%global appLoc; %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); /** * The serverName represents the SAS 9 logical server context * There is no programmatic (SAS code) way to obtain this * So it is taken from the sasjsconfig file OR supplied at runtime, eg: * * %let apploc=/my/apploc; * %let serverName=SASAppDC; * %inc thisfile; * * / %global serverName; %let compiled_serverName=SASApp; %let serverName=%sysfunc(coalescec(&serverName,&compiled_serverName)); %let sasjs_clickmeservice=clickme; %let syscc=0; options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax; /* user supplied build vars */ /* user supplied build vars end */ /* system macro dependencies for build process */ %macro mf_getattrn( libds ,attr )/*/STORE SOURCE*/; %local dsid rc; %let dsid=%sysfunc(open(&libds,is)); %if &dsid = 0 %then %do; %put %str(WARN)ING: Cannot open %trim(&libds), system message below; %put %sysfunc(sysmsg()); -1 %end; %else %do; %sysfunc(attrn(&dsid,&attr)) %let rc=%sysfunc(close(&dsid)); %end; %mend mf_getattrn; %macro mf_nobs(libds )/*/STORE SOURCE*/; %mf_getattrn(&libds,NLOBS) %mend mf_nobs; %macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1) )/des='ungraceful abort' /*STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mf_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %abort; %mend mf_abort; /** @endcond */ %macro mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767); %local rc fname; %if &prefix=0 %then %do; %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); %if &rc %then %put %sysfunc(sysmsg()); &fname %end; %else %do; %local x len; %let len=%eval(8-%length(&prefix)); %let x=0; %do x=0 %to &maxtries; %let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len); %if %sysfunc(fileref(&fname)) > 0 %then %do; %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); %if &rc %then %put %sysfunc(sysmsg()); &fname %return; %end; %end; %put unable to find available fileref after &maxtries attempts; %end; %mend mf_getuniquefileref; %macro mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1) , errds=work.mp_abort_errds , mode=REGULAR )/*/STORE SOURCE*/; %global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode; %local fref fid i; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mp_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %if %symexist(_SYSINCLUDEFILEDEVICE) /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ and %superq(SYSPROCESSNAME) ne %str(Compute Server) %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; data &errds; iftrue='1=1'; length mac $100 msg $5000; mac=symget('mac'); msg=symget('msg'); run; data _null_; abort cancel FILE; run; %return; %end; %end; /* Web App Context */ %if %symexist(_PROGRAM) or %superq(SYSPROCESSNAME) = %str(Compute Server) or &mode=INCLUDE %then %do; options obs=max replace mprint; %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do; options nosyntaxcheck; %end; %if &mode=INCLUDE %then %do; %if %sysfunc(exist(&errds))=1 %then %do; data _null_; set &errds; call symputx('iftrue',iftrue,'l'); call symputx('mac',mac,'l'); call symputx('msg',msg,'l'); putlog (_all_)(=); run; %if (&iftrue)=0 %then %return; %end; %else %do; %put &sysmacroname: No include errors found; %return; %end; %end; /* extract log errs / warns, if exist */ %local logloc logline; %global logmsg; /* capture global messages */ %if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG; %else %let logloc=%qsysfunc(getoption(LOG)); proc printto log=log;run; %let logline=0; %if %length(&logloc)>0 %then %do; data _null_; infile &logloc lrecl=5000; input; putlog _infile_; i=1; retain logonce 0; if ( _infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR" ) and logonce=0 then do; call symputx('logline',_n_); logonce+1; end; run; /* capture log including lines BEFORE the err */ %if &logline>0 %then %do; data _null_; infile &logloc lrecl=5000; input; i=1; stoploop=0; if _n_ ge &logline-15 and stoploop=0 then do until (i>22); call symputx('logmsg',catx('\n',symget('logmsg'),_infile_)); input; i+1; stoploop=1; end; if stoploop=1 then stop; run; %end; %end; %if %symexist(SYS_JES_JOB_URI) %then %do; /* setup webout for Viya */ options nobomfile; %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; filename _webout temp lrecl=999999 mod; %end; %else %do; filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json" lrecl=999999 mod; %end; %end; %else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do; options nobomfile; /* set up http header for SASjs Server */ %let fid=%sysfunc(fopen(&fref,A)); %if &fid=0 %then %do; %put %str(ERR)OR: %sysfunc(sysmsg()); %return; %end; %let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json))); %let rc=%sysfunc(fwrite(&fid)); %let rc=%sysfunc(fclose(&fid)); %let rc=%sysfunc(filename(&fref)); %end; /* send response in SASjs JSON format */ data _null_; file _webout mod lrecl=32000 encoding='utf-8'; length msg syswarningtext syserrortext $32767 mode $10 ; sasdatetime=datetime(); msg=symget('msg'); %if &logline>0 %then %do; msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg')); %end; /* escape the escapes */ msg=tranwrd(msg,'\','\\'); /* escape the quotes */ msg=tranwrd(msg,'"','\"'); /* ditch the CRLFs as chrome complains */ msg=compress(msg,,'kw'); /* quote without quoting the quotes (which are escaped instead) */ msg=cats('"',msg,'"'); if symexist('_debug') then debug=quote(trim(symget('_debug'))); else debug='""'; if symget('sasjsprocessmode')='Stored Program' then mode='SASJS'; if mode ne 'SASJS' then put '>>weboutBEGIN<<'; put '{"SYSDATE" : "' "&SYSDATE" '"'; put ',"SYSTIME" : "' "&SYSTIME" '"'; put ',"sasjsAbort" : [{'; put ' "MSG":' msg ; put ' ,"MAC": "' "&mac" '"}]'; put ",""SYSUSERID"" : ""&sysuserid"" "; put ',"_DEBUG":' debug ; if symexist('_metauser') then do; _METAUSER=quote(trim(symget('_METAUSER'))); put ",""_METAUSER"": " _METAUSER; _METAPERSON=quote(trim(symget('_METAPERSON'))); put ',"_METAPERSON": ' _METAPERSON; end; if symexist('SYS_JES_JOB_URI') then do; SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI'))); put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI; end; _PROGRAM=quote(trim(resolve(symget('_PROGRAM')))); put ',"_PROGRAM" : ' _PROGRAM ; put ",""SYSCC"" : ""&syscc"" "; syserrortext=cats(symget('syserrortext')); if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do; syserrortext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syserrortext) )))))))))))))!!'"'; end; else syserrortext=cats('"',syserrortext,'"'); put ',"SYSERRORTEXT" : ' syserrortext; put ",""SYSHOSTNAME"" : ""&syshostname"" "; put ",""SYSJOBID"" : ""&sysjobid"" "; put ",""SYSSCPL"" : ""&sysscpl"" "; put ",""SYSSITE"" : ""&syssite"" "; sysvlong=quote(trim(symget('sysvlong'))); put ',"SYSVLONG" : ' sysvlong; syswarningtext=cats(symget('syswarningtext')); if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do; syswarningtext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syswarningtext) )))))))))))))!!'"'; end; else syswarningtext=cats('"',syswarningtext,'"'); put ",""SYSWARNINGTEXT"" : " syswarningtext; put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" '; put "}" ; if mode ne 'SASJS' then put '>>weboutEND<<'; run; %put _all_; %if "&sysprocessmode " = "SAS Stored Process Server " %then %do; data _null_; putlog 'stpsrvset program err and syscc'; rc=stpsrvset('program error', 0); call symputx("syscc",0,"g"); run; %if &sysscp=WIN and 1=0 /* deprecating this logic until we figure out a consistent abort */ and "%substr(%str(&sysvlong ),1,8)"="9.04.01M" and "%substr(%str(&sysvlong ),9,1)">"5" %then %do; /* skip approach (below) does not work in windows m6+ envs */ endsas; %end; %else %do; /** * endsas kills 9.4m3 deployments by orphaning multibridges. * Abort variants are ungraceful (non zero return code) * This approach lets SAS run silently until the end :-) * Caution - fails when called within a %include within a macro * Use mp_include() to handle this. */ filename skip temp; data _null_; file skip; put '%macro skip();'; comment '%mend skip; -> fix lint '; put '%macro skippy();'; comment '%mend skippy; -> fix lint '; run; %inc skip; %end; %end; %else %if "&sysprocessmode " = "SAS Compute Server " %then %do; /* endsas kills the session making it harder to fetch results */ data _null_; syswarningtext=symget('syswarningtext'); syserrortext=symget('syserrortext'); abort_msg=symget('msg'); syscc=symget('syscc'); sysuserid=symget('sysuserid'); iftrue=symget('iftrue'); put (_all_)(/=); call symputx('syscc',0); abort cancel nolist; run; %end; %else %do; %abort cancel; %end; %end; %else %do; %put _all_; %abort cancel; %end; %mend mp_abort; /** @endcond */ %macro mf_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* WEBOUT BEGIN */ put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y '; put ' ,engine=DATASTEP '; put ' ,missing=NULL '; put ' ,showmeta=N '; put ' ,maxobs=MAX '; put ')/*/STORE SOURCE*/; '; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval '; put ' tmpds1 tmpds2 tmpds3 tmpds4; '; put '%let numcols=0; '; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); '; put ' '; put '%if &action=OPEN %then %do; '; put ' options nobomfile; '; put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; '; put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; '; put ' run; '; put '%end; '; put '%else %if (&action=ARR or &action=OBJ) %then %do; '; put ' /* force variable names to always be uppercase in the JSON */ '; put ' options validvarname=upcase; '; put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation '; put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ '; put ' filename _sjs1 temp lrecl=200 ; '; put ' data _null_; file _sjs1 encoding=''utf-8''; '; put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; '; put ' run; '; put ' /* now write to _webout 1 char at a time */ '; put ' data _null_; '; put ' infile _sjs1 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs1 clear; '; put ' '; put ' /* grab col defs */ '; put ' proc contents noprint data=&ds '; put ' out=_data_(keep=name type length format formatl formatd varnum label); '; put ' run; '; put ' %let colinfo=%scan(&syslast,2,.); '; put ' proc sort data=&colinfo; '; put ' by varnum; '; put ' run; '; put ' /* move meta to mac vars */ '; put ' data &colinfo; '; put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); '; put ' set &colinfo end=last nobs=nobs; '; put ' name=upcase(name); '; put ' /* fix formats */ '; put ' if type=2 or type=6 then do; '; put ' typelong=''char''; '; put ' length fmt $49.; '; put ' if format='''' then fmt=cats(''$'',length,''.''); '; put ' else if formatl=0 then fmt=cats(format,''.''); '; put ' else fmt=cats(format,formatl,''.''); '; put ' end; '; put ' else do; '; put ' typelong=''num''; '; put ' if format='''' then fmt=''best.''; '; put ' else if formatl=0 then fmt=cats(format,''.''); '; put ' else if formatd=0 then fmt=cats(format,formatl,''.''); '; put ' else fmt=cats(format,formatl,''.'',formatd); '; put ' end; '; put ' /* 32 char unique name */ '; put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); '; put ' '; put ' call symputx(cats(''name'',_n_),name,''l''); '; put ' call symputx(cats(''newname'',_n_),newname,''l''); '; put ' call symputx(cats(''length'',_n_),length,''l''); '; put ' call symputx(cats(''fmt'',_n_),fmt,''l''); '; put ' call symputx(cats(''type'',_n_),type,''l''); '; put ' call symputx(cats(''typelong'',_n_),typelong,''l''); '; put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); '; put ' /* overwritten when fmt=Y and a custom format exists in catalog */ '; put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); '; put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); '; put ' run; '; put ' '; put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' proc sql; '; put ' select count(*) into: lastobs from &ds; '; put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); '; put ' '; put ' %if &engine=PROCJSON %then %do; '; put ' %if &missing=STRING %then %do; '; put ' %put &sysmacroname: Special Missings not supported in proc json.; '; put ' %put &sysmacroname: Switching to DATASTEP engine; '; put ' %goto datastep; '; put ' %end; '; put ' data &tempds; '; put ' set &ds; '; put ' &stmt_obs; '; put ' %if &fmt=N %then format _numeric_ best32.;; '; put ' /* PRETTY is necessary to avoid line truncation in large files */ '; put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; '; put ' proc json out=_sjs2 pretty '; put ' %if &action=ARR %then nokeys ; '; put ' ;export &tempds / nosastags fmtnumeric; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs2 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs2 clear; '; put ' %end; '; put ' %else %if &engine=DATASTEP %then %do; '; put ' %datastep: '; put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 '; put ' %then %do; '; put ' %put &sysmacroname: &ds NOT FOUND!!!; '; put ' %return; '; put ' %end; '; put ' '; put ' %if &fmt=Y %then %do; '; put ' /** '; put ' * Extract format definitions '; put ' * First, by getting library locations from dictionary.formats '; put ' * Then, by exporting the width using proc format '; put ' * Cannot use maxw from sashelp.vformat as not always populated '; put ' * Cannot use fmtinfo() as not supported in all flavours '; put ' */ '; put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' proc sql noprint; '; put ' create table &tmpds1 as '; put ' select cats(libname,''.'',memname) as FMTCAT, '; put ' FMTNAME '; put ' from dictionary.formats '; put ' where fmttype=''F'' and libname is not null '; put ' and fmtname in (select format from &colinfo where format is not null) '; put ' order by 1; '; put ' create table &tmpds2( '; put ' FMTNAME char(32), '; put ' LENGTH num '; put ' ); '; put ' %local catlist cat fmtlist i; '; put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; '; put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); '; put ' %let cat=%scan(&catlist,&i,%str( )); '; put ' proc sql; '; put ' select distinct fmtname into: fmtlist separated by '' '' '; put ' from &tmpds1 where fmtcat="&cat"; '; put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); '; put ' select &fmtlist; '; put ' run; '; put ' proc sql; '; put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; '; put ' %end; '; put ' '; put ' proc sql; '; put ' create table &tmpds4 as '; put ' select a.*, b.length as MAXW '; put ' from &colinfo a '; put ' left join &tmpds2 b '; put ' on cats(a.format)=cats(upcase(b.fmtname)) '; put ' order by a.varnum; '; put ' data _null_; '; put ' set &tmpds4; '; put ' if not missing(maxw); '; put ' call symputx( '; put ' cats(''fmtlen'',_n_), '; put ' /* vars need extra padding due to JSON escaping of special chars */ '; put ' min(32767,ceil((max(length,maxw)+10)*1.5)) '; put ' ,''l'' '; put ' ); '; put ' run; '; put ' '; put ' /* configure varlenchk - as we are explicitly shortening the variables */ '; put ' %let optval=%sysfunc(getoption(varlenchk)); '; put ' options varlenchk=NOWARN; '; put ' data _data_(compress=char); '; put ' /* shorten the new vars */ '; put ' length '; put ' %do i=1 %to &numcols; '; put ' &&name&i $&&fmtlen&i '; put ' %end; '; put ' ; '; put ' /* rename on entry */ '; put ' set &ds(rename=( '; put ' %do i=1 %to &numcols; '; put ' &&name&i=&&newname&i '; put ' %end; '; put ' )); '; put ' &stmt_obs; '; put ' '; put ' drop '; put ' %do i=1 %to &numcols; '; put ' &&newname&i '; put ' %end; '; put ' ; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=num %then %do; '; put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); '; put ' %end; '; put ' %else %do; '; put ' &&name&i=put(&&newname&i,&&fmt&i); '; put ' %end; '; put ' %end; '; put ' if _error_ then do; '; put ' call symputx(''syscc'',1012); '; put ' stop; '; put ' end; '; put ' run; '; put ' %let fmtds=&syslast; '; put ' options varlenchk=&optval; '; put ' %end; '; put ' '; put ' proc format; /* credit yabwon for special null removal */ '; put ' value bart (default=40) '; put ' %if &missing=NULL %then %do; '; put ' ._ - .z = null '; put ' %end; '; put ' %else %do; '; put ' ._ = [quote()] '; put ' . = null '; put ' .a - .z = [quote()] '; put ' %end; '; put ' other = [best.]; '; put ' '; put ' data &tempds; '; put ' attrib _all_ label=''''; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=char or &fmt=Y %then %do; '; put ' length &&name&i $&&fmtlen&i...; '; put ' format &&name&i $&&fmtlen&i...; '; put ' %end; '; put ' %end; '; put ' %if &fmt=Y %then %do; '; put ' set &fmtds; '; put ' %end; '; put ' %else %do; '; put ' set &ds; '; put ' %end; '; put ' &stmt_obs; '; put ' format _numeric_ bart.; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=char or &fmt=Y %then %do; '; put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' &&name&i=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else &&name&i=quote(cats(&&name&i)); '; put ' %end; '; put ' %end; '; put ' run; '; put ' '; put ' filename _sjs3 temp lrecl=131068 ; '; put ' data _null_; '; put ' file _sjs3 encoding=''utf-8''; '; put ' if _n_=1 then put "["; '; put ' set &tempds; '; put ' if _n_>1 then put "," @; put '; put ' %if &action=ARR %then "[" ; %else "{" ; '; put ' %do i=1 %to &numcols; '; put ' %if &i>1 %then "," ; '; put ' %if &action=OBJ %then """&&name&i"":" ; '; put ' "&&name&i"n /* name literal for reserved variable names */ '; put ' %end; '; put ' %if &action=ARR %then "]" ; %else "}" ; ; '; put ' '; put ' /* close out the table */ '; put ' data _null_; '; put ' file _sjs3 mod encoding=''utf-8''; '; put ' put '']''; '; put ' run; '; put ' data _null_; '; put ' infile _sjs3 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs3 clear; '; put ' %end; '; put ' '; put ' proc sql; '; put ' drop table &colinfo, &tempds; '; put ' '; put ' %if %substr(&showmeta,1,1)=Y %then %do; '; put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; '; put ' data _null_; '; put ' file _sjs4; '; put ' length label $350; '; put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; '; put ' do i=1 to &numcols; '; put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); '; put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' if i>1 then put "," @@; '; put ' put name '':{"format":'' format '',"label":'' label '; put ' '',"length":'' length '',"type":'' type ''}''; '; put ' end; '; put ' put ''}}''; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs4 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs4 clear; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=CLOSE %then %do; '; put ' data _null_; file &jref encoding=''utf-8'' mod ; '; put ' put "}"; '; put ' run; '; put '%end; '; put '%mend mp_jsonout; '; put ' '; put '%macro mf_getuser( '; put ')/*/STORE SOURCE*/; '; put ' %local user; '; put ' '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %end; '; put ' %else %if %symexist(_metaperson) %then %do; '; put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* but be sure to quote in case of usernames with commas */ '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); '; put ' %end; '; put ' %else %let user=&sysuserid; '; put ' '; put ' %quote(&user) '; put ' '; put '%mend mf_getuser; '; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL '; put ' ,showmeta=N,maxobs=MAX,workobs=0 '; put '); '; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug '; put ' sasjs_tables; '; put '%local i tempds jsonengine; '; put ' '; put '/* see https://github.com/sasjs/core/issues/41 */ '; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON; '; put '%else %let jsonengine=DATASTEP; '; put ' '; put ' '; put '%if &action=FETCH %then %do; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' options mprint notes mprintnest; '; put ' %end; '; put ' %let _webin_file_count=%eval(&_webin_file_count+0); '; put ' /* now read in the data */ '; put ' %do i=1 %to &_webin_file_count; '; put ' %if &_webin_file_count=1 %then %do; '; put ' %let _webin_fileref1=&_webin_fileref; '; put ' %let _webin_name1=&_webin_name; '; put ' %end; '; put ' data _null_; '; put ' infile &&_webin_fileref&i termstr=crlf; '; put ' input; '; put ' call symputx(''input_statement'',_infile_); '; put ' putlog "&&_webin_name&i input statement: " _infile_; '; put ' stop; '; put ' data &&_webin_name&i; '; put ' infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8''; '; put ' input &input_statement; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' if _n_<20 then putlog _infile_; '; put ' %end; '; put ' run; '; put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; put ' /** '; put ' * check xengine type to avoid the below err message: '; put ' * > Function is only valid for filerefs using the CACHE access method. '; put ' */ '; put ' data _null_; '; put ' set sashelp.vextfl(where=(fileref="_WEBOUT")); '; put ' if xengine=''STREAM'' then do; '; put ' rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8"); '; put ' end; '; put ' run; '; put ' '; put ' /* setup json */ '; put ' data _null_;file &fref encoding=''utf-8''; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' put ''>>weboutBEGIN<<''; '; put ' %end; '; put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; '; put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; '; put ' run; '; put ' '; put '%end; '; put ' '; put '%else %if &action=ARR or &action=OBJ %then %do; '; put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref '; put ' ,engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs '; put ' ) '; put '%end; '; put '%else %if &action=CLOSE %then %do; '; put ' /* To avoid issues with _webout on EBI we use a temporary file */ '; put ' filename _sjsref temp lrecl=131068; '; put ' %if %str(&workobs) > 0 %then %do; '; put ' /* if debug mode, send back first XX records of each work table also */ '; put ' data;run;%let tempds=%scan(&syslast,2,.); '; put ' ods output Members=&tempds; '; put ' proc datasets library=WORK memtype=data; '; put ' %local wtcnt;%let wtcnt=0; '; put ' data _null_; '; put ' set &tempds; '; put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ '; put ' i+1; '; put ' call symputx(cats(''wt'',i),name,''l''); '; put ' call symputx(''wtcnt'',i,''l''); '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put ",""WORK"":{"; '; put ' %do i=1 %to &wtcnt; '; put ' %let wt=&&wt&i; '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' dsid=open("WORK.&wt",''is''); '; put ' nlobs=attrn(dsid,''NLOBS''); '; put ' nvars=attrn(dsid,''NVARS''); '; put ' rc=close(dsid); '; put ' if &i>1 then put '',''@; '; put ' put " ""&wt"" : {"; '; put ' put ''"nlobs":'' nlobs; '; put ' put '',"nvars":'' nvars; '; put ' %mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y '; put ' ,maxobs=&workobs '; put ' ) '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put "}"; '; put ' %end; '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put "}"; '; put ' run; '; put ' %end; '; put ' /* close off json */ '; put ' data _null_;file _sjsref mod encoding=''utf-8''; '; put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; '; put ' put ",""_DEBUG"" : ""&_debug"" "; '; put ' _METAUSER=quote(trim(symget(''_METAUSER''))); '; put ' put ",""_METAUSER"": " _METAUSER; '; put ' _METAPERSON=quote(trim(symget(''_METAPERSON''))); '; put ' put '',"_METAPERSON": '' _METAPERSON; '; put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); '; put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); '; put ' put '',"AUTOEXEC" : '' autoexec; '; put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSENCODING"" : ""&sysencoding"" "; '; put ' syserrortext=cats(symget(''syserrortext'')); '; put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' syserrortext=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else syserrortext=cats(''"'',syserrortext,''"''); '; put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; '; put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; '; put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; '; put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); '; put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; '; put ' put ",""SYSJOBID"" : ""&sysjobid"" "; '; put ' put ",""SYSSCPL"" : ""&sysscpl"" "; '; put ' put ",""SYSSITE"" : ""&syssite"" "; '; put ' put ",""SYSUSERID"" : ""&sysuserid"" "; '; put ' sysvlong=quote(trim(symget(''sysvlong''))); '; put ' put '',"SYSVLONG" : '' sysvlong; '; put ' syswarningtext=cats(symget(''syswarningtext'')); '; put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' syswarningtext=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else syswarningtext=cats(''"'',syswarningtext,''"''); '; put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; '; put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; '; put ' length memsize $32; '; put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; '; put ' memsize=quote(cats(memsize)); '; put ' put '',"MEMSIZE" : '' memsize; '; put ' put "}" @; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' put ''>>weboutEND<<''; '; put ' %end; '; put ' run; '; put ' /* now write to _webout 1 char at a time */ '; put ' data _null_; '; put ' infile _sjsref lrecl=1 recfm=n; '; put ' file &fref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjsref clear; '; put ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

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

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Fetches directories to facilitate configuration'; put '@details The service can also be invoked using the following URL param:'; put '@li &parent= (parent path)'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Downloads zip file of DC customer configurations'; put '@details Zip contains several excel files, containing the customer specific'; put '(non-DC) configurations. Useful when migrating to a new instance of'; put 'Data Controller.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let work=%sysfunc(pathname(work));'; put '/* excel does not work in all envs */'; put '%let mime=application/vnd.ms-excel;'; put '%let dbms=EXCEL;'; put '%let mime=application/csv;'; put '%let dbms=CSV;'; put '%let ext=csv;'; put '%macro conditional_export(ds);'; put '%if %mf_nobs(&ds)>0 %then %do;'; put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"'; put 'DBMS=&dbms REPLACE;'; put 'RUN;'; put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(syscc=&syscc after &ds prep)'; put ')'; put '%mend conditional_export;'; put 'ods package(ProdOutput) open nopf;'; put 'data MPE_ALERTS;'; put 'set &mpelib..MPE_ALERTS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ALERTS)'; put 'data MPE_COLUMN_LEVEL_SECURITY;'; put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'where also CLS_LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)'; put 'data MPE_CONFIG;'; put 'set &mpelib..MPE_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_CONFIG)'; put 'data MPE_DATADICTIONARY;'; put 'set &mpelib..MPE_DATADICTIONARY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'if DD_SOURCE=:"&mpelib" then do;'; put '/* nothing */'; put 'end;'; put 'else output;'; put 'run;'; put '%conditional_export(MPE_DATADICTIONARY)'; put 'data MPE_EMAILS;'; put 'set &mpelib..MPE_EMAILS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EMAILS)'; put 'data MPE_EXCEL_CONFIG;'; put 'set &mpelib..MPE_EXCEL_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EXCEL_CONFIG)'; put 'data MPE_GROUPS;'; put 'set &mpelib..MPE_GROUPS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_GROUPS)'; put 'data MPE_ROW_LEVEL_SECURITY;'; put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ROW_LEVEL_SECURITY)'; put 'data MPE_SECURITY;'; put 'set &mpelib..MPE_SECURITY;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_SECURITY)'; put 'data MPE_SELECTBOX;'; put 'set &mpelib..MPE_SELECTBOX;'; put 'where &dc_dttmtfmt. le ver_to_dttm;'; put 'where also select_lib ne "&mpelib";'; put 'drop ver_: selectbox_rk;'; put 'run;'; put '%conditional_export(MPE_SELECTBOX)'; put 'data MPE_TABLES;'; put 'set &mpelib..MPE_TABLES;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_TABLES)'; put 'data MPE_VALIDATIONS;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also BASE_LIB ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_VALIDATIONS)'; put '/* finish up zip file */'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name="DCBACKUP.zip" archive_path="&work");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc after zip prep)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&work/DCBACKUP.zip)'; put ',outname=DCBACKUP.zip'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=exportdb; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '%if &outref=0 %then %do;'; put '%put %str(WAR)NING: Please provide a fileref;'; put '%return;'; put '%end;'; put '%if %mf_existfileref(&outref)=0 %then %do;'; put 'filename &outref temp lrecl=66000;'; put '%end;'; put '%if &schema=0 %then %let schema=;'; put '%else %let schema=&schema..;'; put '%if &outds=0 %then %let outds=%scan(&ds,2,.);'; put '%local nobs;'; put 'proc sql noprint;'; put 'select count(*) into: nobs TRIMMED from &ds;'; put '%if &nobs=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No rows found in &ds */";'; put 'run;'; put '%end;'; put '%local vars;'; put '%let vars=%mf_getvarcount(&ds);'; put '%if &vars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No columns found in &schema.&ds */";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &vars>1600 and &flavour=PGSQL %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &schema.&ds contains &vars vars */";'; put 'put "/* Postgres cannot handle tables with over 1600 vars */";'; put 'put "/* No inserts will be generated for this table */";'; put 'run;'; put '%return;'; put '%end;'; put '%local varlist varlistcomma;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);'; put '/* next, export data */'; put 'data _null_;'; put 'file &outref mod ;'; put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";'; put 'set &ds;'; put '%if &maxobs ne max %then %do;'; put 'if _n_>&maxobs then stop;'; put '%end;'; put 'length _____str $32767;'; put 'call missing(_____str);'; put 'format _numeric_ best.;'; put 'format _character_ ;'; put '%local i comma var vtype vfmt;'; put '%do i=1 %to %sysfunc(countw(&varlist));'; put '%let var=%scan(&varlist,&i);'; put '%let vtype=%mf_getvartype(&ds,&var);'; put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));'; put '%if &i=1 %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put "insert into &schema.&outds set ";'; put 'put " &var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '_____str=cats('; put '"INSERT INTO &schema.&outds ("'; put ',symget(''varlistcomma'')'; put ',") VALUES ("'; put ');'; put 'put _____str;'; put 'put " "@;'; put '%end;'; put '%end;'; put '%else %do;'; put '%if &flavour=SAS %then %do;'; put 'put " ,&var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put " ,"@;'; put '%end;'; put '%end;'; put '%if &vtype=N %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put &var;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'if missing(&var) then put ''NULL'';'; put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"'; put '%then %do;'; put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";'; put '%end;'; put '%else %do;'; put 'else put &var;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";'; put 'put _____str;'; put '%end;'; put '%end;'; put '%if &flavour=SAS %then %do;'; put 'put '';'';'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put '');'';'; put '%end;'; put 'if _n_=&nobs then put /;'; put 'run;'; put '%mend mp_ds2inserts;'; put '%macro mp_lib2inserts(lib'; put ',flavour=SAS'; put ',outref=0'; put ',schema=0'; put ',maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '/* Find the tables */'; put '%local x ds memlist;'; put 'proc sql noprint;'; put 'select distinct lowcase(memname)'; put 'into: memlist'; put 'separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put 'and memtype=''DATA''; /* exclude views */'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '/* create the inserts */'; put '%do x=1 %to %sysfunc(countw(&memlist));'; put '%let ds=%scan(&memlist,&x);'; put '%mp_ds2inserts(&lib..&ds'; put ',outref=&outref'; put ',schema=&schema'; put ',outds=&ds'; put ',flavour=&flavour'; put ',maxobs=&maxobs'; put ',applydttm=&applydttm'; put ')'; put '%end;'; put '%mend mp_lib2inserts;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Exports the data controller library in DB specific DDL'; put '@details If user is in the administrator group, they can call this'; put 'service directly adding the following URL params:'; put '@li &flavour= (only PGSQL supported at this time)'; put '@li &schema= (optional, if target schema is needed)'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_getddl.sas'; put '@li mp_lib2inserts.sas'; put '@li mp_streamfile.sas'; put '@li mpe_getgroups.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global flavour schema;'; put '/* if no flavour is specified, default to SAS */'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '/* if no schema var provided, DC Libref is used */'; put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));'; put '/* check user is in admin group */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'data work.admins;'; put 'set work.usergroups;'; put 'put (_all_)(=);'; put 'run;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%put &=cnt;'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)'; put ')'; put '%mp_getddl(&DC_LIBREF'; put ',flavour=&flavour'; put ',schema=&schema'; put ',applydttm=YES'; put ',fref=tmpref'; put ')'; put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)'; put '%mp_streamfile(contenttype=TEXT'; put ',inref=tmpref'; put ',outname=&dc_libref..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makedata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_increment(macro_name,incr=1);'; put '/* iterate the value */'; put '%let ¯o_name=%eval(&&¯o_name+&incr);'; put '/* return the value */'; put '&&¯o_name'; put '%mend mf_increment;'; put '%macro mpe_makedata(lib=,mpeadmins=,path=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &lib..mpe_column_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',CLS_SCOPE=''EDIT'''; put ',CLS_GROUP=''AllUsers'''; put ',CLS_LIBREF="&lib"'; put ',CLS_TABLE=''MPE_LOCKANYTABLE'''; put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD'''; put ',CLS_ACTIVE=1'; put ',CLS_HIDE=0;'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_EMAIL_ALERTS"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc=''YES or NO to enable email alerts. Note - this requires email '''; put '!!''options to be preconfigured! They can be configured in the '''; put '!!''settings stp if needed.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_VIEWLIB_CHECK"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc='; put '''Set to YES to enable library validity checking in viewLibs service.'''; put '!!'' Note: this can make the service very slow if there are lots of '''; put '!!''external libraries. If enabled, this removes empty libraries from '''; put '!!''the viewer library dropdown. To switch off, set to NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MACROS"'; put ',var_value=cats(symget(''path''),"/dc_macros")'; put ',var_active=1'; put ',var_desc=''Location of underlying macros - EUC feature.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MAXOBS_WEBEDIT"'; put ',var_value="100"'; put ',var_active=1'; put ',var_desc=''This sets the maximum number of observations that can be loaded'''; put '!!'' into the browser for editing in the EDIT screen. A higher number'''; put '!!'' will require a decent browser (ie, not IE) and more memory on the'''; put '!!'' client side.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_REQUEST_LOGS"'; put ',var_value="YES"'; put ',var_active=1'; put ',var_desc=''Setting to NO will prevent each request being logged to the'''; put '!!'' MPE_REQUESTS table Default=YES.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_VIEWER"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to'''; put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_EDITRECORD"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the'''; put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu'''; put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_CATALOG"'; put ',var_name="DC_IGNORELIBS"'; put ',var_value="|MAPSSAS|MAPS|"'; put ',var_active=1'; put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when'''; put '!!'' running the Data Catalog refresh process. This can enable a clean'''; put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LOCALE"'; put ',var_value="SYSTEM"'; put ',var_active=1'; put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system'''; put '!!'' value (which can be driven from the browser settings). This is '''; put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs '''; put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BULKLOAD"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_BUCKET"'; put ',var_value="''your-aws-bucket/Exchange''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS bucket to'''; put '!!'' use for s3 uploads in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_AWS_CREDENTIALS_FILE"'; put ',var_value="''/path/to/your/aws/s3/.credentials''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS creds file'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_REGION"'; put ',var_value="''eu-west-1''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) AWS region in use'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_COMPRESS"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_USE_SSL"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to use SSL encryption'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_REVIEW"'; put ',var_name="HISTORY_ROWS"'; put ',var_value=''100'''; put ',var_active=1'; put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY '''; put '!!''page'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LICENCE_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Licence Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_ACTIVATION_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Activation Key'';'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''LIBRARY'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Data Controller Control Tables"'; put ',DD_LONGDESC="# The Data Controller Library"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib..MPE_TABLES"'; put ',DD_SHORTDESC="Configuration of new tables for Data Controller"'; put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_TABLES.DSN"'; put ',DD_SHORTDESC="Dataset Name to be edited"'; put ',DD_LONGDESC="_DSN_ - must be UPCASE"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''DIRECTORY'''; put ',DD_SOURCE="/some/directory"'; put ',DD_SHORTDESC="Directory for some purpose"'; put ',DD_LONGDESC="This directory is great. It''s great directory.'; put 'It trumps all other directories."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"'; put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "'; put '!!"registered as a user in this table."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"'; put ',DD_SHORTDESC="Set to 1 to make an option active"'; put ',DD_LONGDESC="This value is used as a filter by data controller whenever "'; put '!!"querying for option settings."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* mpe_xlmap_info'; put '*/'; put 'insert into &lib..mpe_xlmap_info set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_description=''Basel 3 Key Metrics report'''; put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";'; put '/**'; put '* mpe_xlmap_rules'; put '*/'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE D10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/b'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''ABSOLUTE E10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/c'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[6]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/d'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[8]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/e'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[9]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/f'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[10]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE H11'''; put ',xlmap_finish=''RELATIVE R[0]C[1]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:3'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''RELATIVE R[12]C[4]'''; put ',xlmap_finish=''ABSOLUTE I13'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec1'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D8'''; put ',xlmap_finish=''BLANKROW'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec2'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D18'''; put ',xlmap_finish=''LASTDOWN'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''header'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B3'''; put ',xlmap_finish=''ABSOLUTE B8'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''data'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B13'''; put ',xlmap_finish=''ABSOLUTE E16'';'; put '/**'; put '* MPE_GROUPS'; put '*/'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="allbow"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="dctestuser1"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="mihmed"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="DCTest"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_ROW_LEVEL_SECURITY'; put '*/'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=1'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib."'; put ',RLS_TABLE="MPE_GROUPS"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''GROUP_NAME'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''-1''"'; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=2'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''RLS_RK'''; put ',RLS_OPERATOR_NM=''>'''; put ',RLS_RAW_VALUE=''0'''; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=3'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''DC Demo Group'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''ACCESS_LEVEL'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''N/A''"'; put ',RLS_ACTIVE=1;'; put '/**'; put '* MPE_SECURITY'; put '*/'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* mpe_selectbox */'; put '%let rk=1;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=&rk'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''LOCKED'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''UNLOCKED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''EDIT'''; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''APPROVE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''VIEW'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''SIGNOFF'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''UPDATE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''REPLACE'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''TXTEMPORAL'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''BITEMPORAL'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''FORMAT_CAT'''; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''SUBMITTED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''APPROVED'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''REJECTED'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 1'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 2'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 3'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value="This is a long option. This option is very long. "'; put '!!"It is optional, though."'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="CASE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MINVAL"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MAXVAL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT"'; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT"'; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; put ',selectbox_order=6'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="SOME_DATASET"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="EXAMPLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="COLUMN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="TABLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="LIBRARY"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="CATALOG"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="FORMAT"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="LIBREF"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''AUDIT'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="="'; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="BETWEEN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NOT IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="CONTAINS"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_EXCEL_CONFIG"'; put ',base_column="XL_RULE"'; put ',selectbox_value="FORMULA"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="0"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="1"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_TABLES'; put '*/'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_COLUMN_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM'''; put ',notes=''Docs: https://docs.datacontroller.io/column-level-security'''; put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_INFO'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_RULES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID XLMAP_RANGE_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_DATA'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_LOCKANYTABLE'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOCK_LIB LOCK_DS'''; put ',notes=''This table may be edited when a process failed and left a lock'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_TABLES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''This entry allows the MP Editor to edit itself!'''; put ',post_edit_hook=''services/hooks/mpe_tables_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''Determines which groups can view/edit/approve which tables'''; put ',post_edit_hook=''services/hooks/mpe_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SELECTBOX'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''SELECTBOX_RK'''; put ',var_txfrom=''VER_FROM_DTTM'''; put ',var_txto=''VER_TO_DTTM'''; put ',notes=''Can configure dropdowns for the front end'''; put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_TEST'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''PRIMARY_KEY_FIELD'''; put ',notes=''Test table for controller'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EMAILS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''USER_NAME'''; put ',notes=''Primary Emails Table (backup is metadata)'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''VAR_SCOPE VAR_NAME'''; put ',notes=''Configuration variables for Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ALERTS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER'''; put ',notes=''Configuration for alert email events'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_GROUPS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''GROUP_NAME USER_NAME'''; put ',notes=''Configuration for additional groups within Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_VALIDATIONS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE'''; put ',notes=''Configuration of data quality rules in Editor component'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',post_edit_hook=''services/hooks/mpe_validations_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_DATADICTIONARY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''DD_TYPE DD_SOURCE'''; put ',notes=''Configuration of data dictionary'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EXCEL_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN'''; put ',notes=''Configuration of the excel import rules'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ROW_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''RLS_RK'''; put ',notes=''Configuration of Row Level Security'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC '''; put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM '''; put '!!''RLS_RAW_VALUE '''; put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_CATALOG-FC'''; put ',num_of_approvals_required=1'; put ',loadtype=''FORMAT_CAT'''; put ',buskey=''TYPE FMTNAME FMTROW'''; put ',notes=''Sample Format Catalog'''; put ';'; put '/* mpe_validations */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_SCOPE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_HIDE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ALERTS"'; put ',base_col="ALERT_LIB"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_alerts.alert_lib"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_RULES"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="NUM_OF_APPROVALS_REQUIRED"'; put ',rule_type=''MINVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''NOTNULL'''; put ',rule_value=" "'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="&lib..MPE_TABLES.LIBREF"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_TABLES.DSN"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="SAS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_COL"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value="0"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="1"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/mpe_tables.dsn"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="BASE_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test softselect on numeric var (should be ordered numerically) */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_BESTNUM"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_NUM"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_x_test.some_num"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_X_TEST'; put '*/'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=0'; put ',some_char=''this is dummy data'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=1'; put ',some_char=''more dummy data'''; put ',some_dropdown=''Option 2'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=422'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=2'; put ',some_char=''even more dummy data'''; put ',some_dropdown=''Option 3'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=142'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=3'; put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing'''; put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And'''; put '!!'' this, is the tale he told: '',3)'; put ',some_dropdown=''Option 2'''; put ',some_num=1613.001'; put ',some_date=423'; put ',some_datetime=423'; put ',some_time=44'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=4'; put ',some_char=''if you can fill the unforgiving minute'''; put ',some_dropdown=''Option 1'''; put ',some_num=1613.001123456'; put ',some_date=4231'; put ',some_datetime=423123123'; put ',some_time=412'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put '%do x=10 %to 500;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=10&x'; put ',some_char="&x bottles of beer on the wall"'; put ',some_dropdown=''Option 1'''; put ',some_num=ranuni(0)'; put ',some_date=round(ranuni(0)*1000,1)'; put ',some_datetime=round(ranuni(0)*50000,1)'; put ',some_time=round(ranuni(0)*100,1)'; put ',some_shortnum=round(ranuni(0)*100,1)'; put ',some_bestnum=round(ranuni(0)*100,1);'; put '%end;'; put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */'; put 'proc format library=&lib..mpe_x_catalog;'; put 'value otdate'; put '.Z = ''Some Zs'''; put '.N = ''Some 9s'''; put 'other = [date9.]'; put ';'; put 'invalue disc'; put '''ABC'' = 0.20'; put '''DEF'' = 0.25'; put '''XYZ'' = 0.00'; put 'other = 0.00'; put ';'; put 'invalue indate'; put '''00000000'' = .Z'; put '''99999999'' = .N'; put 'other = [yymmdd8.]'; put ';'; put 'value age(multilabel)'; put '20 - 29 = ''20 - 29'''; put '30 - 39 = ''30 - 39'''; put '40 - 49 = ''40 - 49'''; put '50 - 59 = ''50 - 59'''; put '60 - high = ''60 +++'''; put '20 - 35 = ''20 - 35'''; put '36 - 55 = ''36 - 55'''; put '55 - high = ''55 +++'''; put ';'; put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */'; put 'VALUE $GENDERLABEL'; put '"M" = "Male"'; put '"F" = "Female"'; put ';'; put 'VALUE LIKERT_SEVEN'; put '1 = "Strongly Disagree"'; put '2 = "Disagree"'; put '3 = "Slightly Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5 = "Slightly Agree"'; put '6 = "Agree"'; put '7 = "Strongly Agree"'; put ';'; put 'VALUE LIKERT7_ELEVEN'; put '1,2,3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5,6,7 = "Agree"'; put ';'; put 'VALUE LIKERT7_SISTERS'; put '1-3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5-7 = "Agree"'; put ';'; put 'VALUE INCOME'; put 'LOW -< 20000 = "Low"'; put '20000 -< 60000 = "Middle"'; put '60000 - HIGH = "High"'; put ';'; put 'VALUE RACE'; put '1 = "White"'; put '2 = "Black"'; put 'OTHER = "Other"'; put ';'; put 'VALUE GENDERCODE'; put '0 = ''Male'''; put '1 = ''Female'';'; put 'VALUE ATHLETECODE'; put '0 = ''Non-athlete'''; put '1 = ''Athlete'';'; put 'VALUE SMOKINGCODE'; put '0 = ''Nonsmoker'''; put '1 = ''Past smoker'''; put '2 = ''Current smoker'';'; put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */'; put 'value $state'; put '''Delaware''=''DE'''; put '''Florida''=''FL'''; put '''Ohio''=''OH'';'; put 'value MYfmt'; put '/* Format dates prior to 31DEC2011 using only a year. */'; put 'low-''31DEC2011''d=[year4.]'; put '/* Format 2012 dates using the month and year. */'; put '''01jan2012''d-''31DEC12''d=[monyy7.]'; put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */'; put '''01JAN2013''d-high=[date9.]'; put '/* Catch missing values. */'; put 'other=''n/a'';'; put 'value newfmt .=''N/A'' other=[12.1];'; put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */'; put 'value $genderml (multilabel)'; put '''1''=''Male'''; put '''2''=''Female'''; put '''1'',''2'','' ''=''Total people'';'; put 'value agemla (multilabel)'; put '1-4=''Preschool'''; put '1-18=''Children'''; put '19-120=''Adults'';'; put 'value agemlb (multilabel)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put 'value agemlc (multilabel notsorted)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put '%mend mpe_makedata;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mpe_makedatamodel(lib=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put '%local notnull;'; put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;'; put '%put &=notnull;'; put 'proc sql;'; put 'create table &lib..mpe_alerts('; put 'tx_from num format=datetime19.3,'; put 'alert_event char(20),'; put 'alert_lib char(8),'; put 'alert_ds char(32),'; put 'alert_user char(100) ,'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_alerts;'; put 'index create'; put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_audit('; put 'load_ref char(36) label=''unique load reference'','; put 'libref char(8) label=''Library Reference (8 chars)'','; put 'dsn char(32) label=''Dataset Name (32 chars)'','; put 'key_hash char(32) label='; put '''MD5 Hash of primary key values (pipe seperated)'','; put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'','; put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'','; put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'','; put 'is_pk num label=''Is Primary Key Field? (1/0)'','; put 'is_diff num label='; put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'','; put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'','; put 'oldval_num num format=best32. label=''Old (numeric) value'','; put 'newval_num num format=best32. label=''New (numeric) value'','; put 'oldval_char char(32765) label=''Old (character) value'','; put 'newval_char char(32765) label=''New (character) value'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_audit;'; put 'index create'; put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_column_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'CLS_SCOPE char(4) ¬null,'; put 'CLS_GROUP char(64) ¬null,'; put 'CLS_LIBREF char(8) ¬null,'; put 'CLS_TABLE char(32) ¬null,'; put 'CLS_VARIABLE_NM char(32) ¬null,'; put 'CLS_ACTIVE num ¬null,'; put 'CLS_HIDE num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_column_level_security;'; put 'index create'; put 'pk_mpe_column_level_security='; put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_config('; put 'tx_from num ¬null format=datetime19.3'; put ',tx_to num ¬null format=datetime19.3'; put ',var_scope varchar(10) ¬null'; put ',var_name varchar(32) ¬null'; put ',var_value varchar(5000)'; put ',var_active num'; put ',var_desc varchar(300)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_config;'; put 'index create'; put 'pk_mpe_config=(tx_to var_scope var_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_CATS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_CATS;'; put 'index create'; put 'pk_mpe_datacatalog_CATS=(tx_to libref memname)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Ref'','; put 'engine char(32) label=''Library Engine'','; put 'libname char(256) format=$256. label=''Library Name'','; put 'paths char(8192) label=''Library Paths'','; put 'perms char(500) label=''Library Permissions (if BASE)'','; put 'owners char(500) label=''Library Owners (if BASE)'','; put 'schemas char(500) label=''Library Schemas (if DB)'','; put 'libid char(17) label=''LibraryId'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_libs;'; put 'index create'; put 'pk_mpe_datacatalog_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_OBJS('; put 'TX_FROM num ¬null format=datetime19.,'; put 'TX_TO num ¬null format=datetime19.,'; put 'libref char(8) ¬null label=''Library Name'','; put 'memname char(64) ¬null label=''Member Name'','; put 'objname char(32) ¬null label=''Object Name'','; put 'objtype char(8) ¬null label=''Object Type'','; put 'objdesc char(256) label=''Object Description'','; put 'alias char(32) label=''Object Alias'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_OBJS;'; put 'index create'; put 'pk_mpe_datacatalog_OBJS=(libref memname objname objtype tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_TABS('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'memtype char(8) label=''Member Type'','; put 'dbms_memtype char(32) label=''DBMS Member Type'','; put 'memlabel char(512) label=''Data Set Label'','; put 'typemem char(8) label=''Data Set Type'','; put 'nvar num label=''Number of Variables'','; put 'compress char(8) label=''Compression Routine'','; put 'pk_fields char(512)'; put 'label=''Primary Key Fields - in a constraint being both Unique and Not Null'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_TABS;'; put 'index create'; put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_vars('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Table Name'','; put 'name char(64) label=''Column Name'','; put 'memtype char(8) label=''Member Type'','; put 'type char(16) label=''Column Type'','; put 'length num label=''Column Length'','; put 'varnum num label=''Column Number in Table'','; put 'label char(512) label=''Column Label'','; put 'format char(49) label=''Column Format'','; put 'idxusage char(9) label=''Column Index Type'','; put 'notnull char(3) label=''Not NULL?'','; put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_vars;'; put 'index create'; put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_CATS('; put 'TX_FROM float format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'nobjs num ¬null label=''Number of objects'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_CATS;'; put 'index create'; put 'pk_mpe_datastatus_cats=(libref memname tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'libsize num format=SIZEKMG. label=''Size of library'','; put 'table_cnt num label=''Number of Tables'','; put 'catalog_cnt num label=''Number of Catalogs'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_libs;'; put 'index create'; put 'pk_mpe_datastatus_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_OBJS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float ¬null format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'objname char(32) label=''Object Name'','; put 'objtype char(8) label=''Object Type'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'','; put 'level num label=''Library Concatenation Level'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_OBJS;'; put 'index create'; put 'pk_mpe_datastatus_OBJS=(libref memname objname objtype tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_tabs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'filesize num format=SIZEKMG. label=''Size of file'','; put 'crdate num format=DATETIME. label=''Date Created'','; put 'modate num format=DATETIME. label=''Date Modified'','; put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_tabs;'; put 'index create'; put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datadictionary'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'DD_TYPE char(16),'; put 'DD_SOURCE char(1024),'; put 'DD_SHORTDESC char(256),'; put 'DD_LONGDESC char(32767),'; put 'DD_OWNER char(128),'; put 'DD_RESPONSIBLE char(128),'; put 'DD_SENSITIVITY char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datadictionary;'; put 'index create'; put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_dataloads('; put 'libref varchar(8) ¬null,'; put 'dsn varchar(32) ¬null,'; put 'etlsource varchar(100) ¬null,'; put 'loadtype varchar(20) ¬null,'; put 'changed_records int,'; put 'new_records int,'; put 'deleted_records int,'; put 'duration num,'; put 'user_nm varchar(50) ¬null,'; put 'processed_dttm num format=datetime19.3,'; put 'mac_ver varchar(5)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_dataloads;'; put 'index create'; put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_emails('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'user_name char(50) ¬null,'; put 'user_displayname char(100),'; put 'user_email char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_emails;'; put 'index create'; put 'pk_mpe_emails=(tx_to user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_excel_config('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'xl_libref char(8),'; put 'xl_table char(32),'; put 'xl_column char(32),'; put 'xl_rule char(32),'; put 'xl_active num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_excel_config;'; put 'index create'; put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_XLMAP_DATA('; put 'LOAD_REF char(32) ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'ROW_NO num ¬null,'; put 'COL_NO num ¬null,'; put 'VALUE_TXT char(4000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify MPE_XLMAP_DATA;'; put 'index create'; put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_info('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_DESCRIPTION char(1000) ¬null,'; put 'XLMAP_TARGETLIBDS char(41) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_info;'; put 'index create'; put 'pk_mpe_xlmap_info=(tx_to xlmap_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_rules('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'XLMAP_SHEET char(32) ¬null,'; put 'XLMAP_START char(1000) ¬null,'; put 'XLMAP_FINISH char(1000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_rules;'; put 'index create'; put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filteranytable('; put 'filter_rk num ¬null,'; put 'filter_hash char(32) ¬null,'; put 'filter_table char(41) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filteranytable;'; put 'index create filter_rk /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filtersource('; put 'filter_hash char(32) ¬null,'; put 'filter_line num ¬null,'; put 'group_logic char(3) ¬null,'; put 'subgroup_logic char(3) ¬null,'; put 'subgroup_id num ¬null,'; put 'variable_nm varchar(32) ¬null,'; put 'operator_nm varchar(12) ¬null,'; put 'raw_value varchar(4000) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filtersource;'; put 'index create'; put 'pk_mpe_filtersource=(filter_hash filter_line)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_groups('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'group_name char(100) ¬null,'; put 'user_name char(50) ¬null,'; put 'group_desc char(256)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_groups;'; put 'index create'; put 'pk_mpe_groups=(tx_to group_name user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lineage_cols'; put '('; put 'col_id char(32),'; put 'direction char(1),'; put 'sourcecoluri char(256),'; put 'map_type char(256),'; put 'map_transform char(256),'; put 'jobname char(256),'; put 'sourcetablename char(256),'; put 'sourcecolname char(256),'; put 'targettablename char(256),'; put 'targetcolname char(256),'; put 'targetcoluri char(256),'; put 'Derived_Rule char(500),'; put 'level int,'; put 'modified_dttm num format=datetime19.3,'; put 'modified_by char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_cols;'; put 'index create'; put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_LINEAGE_TABS'; put '('; put 'tx_from num ¬null format=datetime19.3,'; put 'jobid char(17),'; put 'srctableid char(17),'; put 'tgttableid char(17),'; put 'jobname char(128),'; put 'srctabletype char(16),'; put 'srctablename char(64),'; put 'srclibref char(8),'; put 'tgttabletype char(16),'; put 'tgttablename char(64),'; put 'tgtlibref char(8),'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_tabs;'; put 'index create'; put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_loads('; put 'csv_dir char(255),'; put 'user_nm char(50) ,'; put 'status char(15) ,'; put 'duration num ,'; put 'processed_dttm num format=datetime19.3,'; put 'reason_txt char(2048) ,'; put 'approvals char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_loads;'; put 'index create csv_dir /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lockanytable('; put 'lock_lib varchar(8) ¬null ,'; put 'lock_ds varchar(32) ¬null,'; put 'lock_status_cd varchar(10) ¬null,'; put 'lock_user_nm varchar(100) ¬null ,'; put 'lock_ref varchar(200),'; put 'lock_pid varchar(10),'; put 'lock_start_dttm num format=E8601DT26.6,'; put 'lock_end_dttm num format=E8601DT26.6'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lockanytable;'; put 'index create'; put 'pk_mpe_lockanytable=(lock_lib lock_ds)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_maxkeyvalues('; put 'keytable varchar(41) label=''Base table in libref.dataset format'','; put 'keycolumn char(32) format=$32.'; put 'label=''The Surrogate / Retained key field containing the key values.'','; put 'max_key num label='; put '''Integer value representing current max RK or SK value in the KEYTABLE'','; put 'processed_dttm num format=E8601DT26.6'; put 'label=''Datetime this value was last updated'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_maxkeyvalues;'; put 'index create keytable /nomiss unique;'; put 'quit;'; put '/* no PK defined as it is a transaction table */'; put 'proc sql;'; put 'create table &lib..mpe_requests('; put 'request_dttm num ¬null format=datetime19.,'; put 'request_user char(64) ¬null,'; put 'request_service char(64) ¬null,'; put 'request_params char(128)'; put ');'; put 'proc sql;'; put 'create table &lib..mpe_review('; put 'table_id varchar(32) ¬null,'; put 'reviewed_by_nm varchar(100) ¬null,'; put 'base_table varchar(41) ¬null,'; put 'review_status_id varchar(10) ¬null,'; put 'reviewed_on_dttm num ¬null format=datetime19.3,'; put 'review_reason_txt varchar(400)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_review;'; put 'index create'; put 'pk_mpe_review=(table_id reviewed_by_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_row_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'RLS_RK num ¬null,'; put 'RLS_SCOPE char(8) ¬null,'; put 'RLS_GROUP char(128) ¬null,'; put 'RLS_LIBREF char(8) ¬null,'; put 'RLS_TABLE char(32) ¬null,'; put 'RLS_GROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_ID num ¬null,'; put 'RLS_VARIABLE_NM varchar(32) ¬null,'; put 'RLS_OPERATOR_NM varchar(12) ¬null,'; put 'RLS_RAW_VALUE varchar(4000) ¬null,'; put 'RLS_ACTIVE num ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_row_level_security;'; put 'index create'; put 'pk_mpe_row_level_security=(tx_to RLS_RK)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'access_level char(10) ¬null,'; put 'sas_group char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_security;'; put 'index create'; put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_selectbox('; put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/'; put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */'; put 'selectbox_rk num ¬null, /* surrogate key */'; put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/'; put 'select_ds varchar(32) ¬null,'; put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */'; put 'selectbox_value varchar(500) ¬null, /* selectbox value */'; put 'selectbox_order num , /* optional ordering (1 comes before 2) */'; put 'selectbox_type varchar(32) /* column type (blank for default, else'; put 'sas or js to indicate relevant system functions)*/'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_selectbox;'; put 'index create'; put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_signoffs('; put 'tech_from_dttm num ¬null format=datetime19.3,'; put 'tech_to_dttm num ¬null format=datetime19.3,'; put 'signoff_table varchar(50) ¬null,'; put 'signoff_section_rk num ¬null,'; put 'signoff_version_rk num ¬null,'; put 'signoff_name varchar(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_signoffs;'; put 'index create'; put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)'; put '/nomiss unique;'; put 'quit;'; put '/* mpe_submit */'; put 'proc sql;'; put 'create table &lib..mpe_submit('; put 'table_id varchar(32) ¬null,'; put 'submit_status_cd varchar(10) ¬null,'; put 'base_lib char(8) ¬null,'; put 'base_ds char(32) ¬null,'; put 'submitted_by_nm varchar(100) ¬null,'; put 'submitted_on_dttm num ¬null format=datetime19.3,'; put 'submitted_reason_txt varchar(400),'; put 'input_obs num,'; put 'input_vars num,'; put 'num_of_approvals_required num ¬null ,'; put 'num_of_approvals_remaining num ¬null ,'; put 'reviewed_by_nm char(100),'; put 'reviewed_on_dttm num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_submit;'; put 'index create table_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_tables('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'num_of_approvals_required int,'; put 'loadtype char(12) ,'; put 'buskey char(1000) ,'; put 'var_txfrom char(32) ,'; put 'var_txto char(32) ,'; put 'var_busfrom char(32) ,'; put 'var_busto char(32) ,'; put 'var_processed char(32) ,'; put 'close_vars varchar(500),'; put 'pre_edit_hook char(200),'; put 'post_edit_hook char(200),'; put 'pre_approve_hook char(200) ,'; put 'post_approve_hook char(200) ,'; put 'signoff_cols varchar(500),'; put 'signoff_hook varchar(200),'; put 'notes char(1000) ,'; put 'rk_underlying char(1000) ,'; put 'audit_libds char(41)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_tables;'; put 'index create'; put 'pk_mpe_tables=(tx_to libref dsn)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_users('; put 'user_id char(50) ¬null,'; put 'last_seen_dt num ¬null format=date9.,'; put 'registered_dt num ¬null format=date9.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_users;'; put 'index create user_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_VALIDATIONS'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'BASE_LIB varchar(8),'; put 'BASE_DS varchar(32),'; put 'BASE_COL varchar(32),'; put 'RULE_TYPE varchar(32),'; put 'RULE_VALUE varchar(128),'; put 'RULE_ACTIVE num ,'; put 'TX_TO num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_validations;'; put 'index create'; put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_x_test('; put 'primary_key_field num ¬null,'; put 'some_char char(32767) ,'; put 'some_dropdown char(128),'; put 'some_num num ,'; put 'some_date num format=date9.,'; put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,'; put 'some_time num format=time8.,'; put 'some_shortnum num length=4,'; put 'some_bestnum num format=best.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_x_test;'; put 'index create primary_key_field /nomiss unique;'; put 'quit;'; put '%mend mpe_makedatamodel;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

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

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

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

Next Steps:

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

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

Library &dclib successfully assigned

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.libs as'; put 'select libref from work.sumcat'; put 'union'; put 'select libref from work.sumdsn;'; put 'create table work.statuslibs as'; put 'select a.libref,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'c.catalog_cnt'; put 'from work.libs a'; put 'left join work.sumdsn b'; put 'on a.libref=b.libref'; put 'left join work.sumcat c'; put 'on a.libref=c.libref;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshcatalog.sas'; put '@brief Refreshes the library data catalog'; put '@details A library may be passed in a LIBREF url param.'; put '

SAS Macros

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

Catalog Refresh Complete

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

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

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

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

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=registerkey; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

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

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '@test'; put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json'; put 'sasjs request admin/registerkey -d in.json'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%global admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from groups where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&admin_check = 0)'; put ',mac=%str(&_program)'; put ',msg=%str(Only members of &mpeadmins may register a key)'; put ')'; put '%global licencekey activation_key;'; put 'data _null_;'; put 'set work.keyupload;'; put 'call symputx(''activation_key'',activation_key);'; put 'call symputx(''licencekey'',licence_key);'; put 'call symputx(''activlen'',length(activation_key));'; put 'call symputx(''liclen'',length(licence_key));'; put 'run;'; put '%mp_abort(iftrue= (&activlen< 10)'; put ',mac=%str(&_program)'; put ',msg=%str(Invalid activation_key)'; put ')'; put '%mp_abort(iftrue= (&liclen < 10)'; put ',mac=%str(&_program)'; put ',msg=%str(Invalid licencekey)'; put ')'; put 'data work.loadme;'; put 'if 0 then set &mpelib..mpe_config;'; put 'VAR_SCOPE=''DC'';'; put 'VAR_NAME=''DC_ACTIVATION_KEY'';'; put 'VAR_VALUE=symget(''activation_key'');'; put 'VAR_ACTIVE=1;'; put 'output;'; put 'VAR_NAME=''DC_LICENCE_KEY'';'; put 'VAR_VALUE=symget(''licencekey'');'; put 'VAR_ACTIVE=1;'; put 'output;'; put 'keep VAR_: ;'; put 'run;'; put '%bitemporal_dataloader('; put 'tech_from=tx_from'; put ',tech_to = tx_to'; put ',base_lib=&mpelib'; put ',base_dsn=mpe_config'; put ',append_lib=WORK'; put ',append_dsn=loadme'; put ',PK= VAR_SCOPE VAR_NAME'; put ',ETLSOURCE=%str(&_program STP)'; put ',LOADTYPE=TXTEMPORAL'; put ',dclib=&mpelib'; put ')'; put 'data work.return;'; put 'msg=''SUCCESS'';'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,return)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/approvers; %let service=getapprovals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getapprovals.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',submit_status_cd as REVIEW_STATUS_ID'; put ',SUBMITTED_BY_NM'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1'; put ',submitted_on_dttm as SUBMITTED_ON_DTTM2'; put ',submitted_reason_txt'; put ',num_of_approvals_required'; put ',num_of_approvals_remaining'; put ',base_lib as libref'; put ',base_ds as dsn'; put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))'; put '/* filter out any submits for which approval is already made */'; put 'where table_id not in ('; put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"'; put ');'; put '%macro getapprovals();'; put '%local admin_check;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in ('; put 'select sas_group from &mpelib..mpe_security'; put 'where libref=''*ALL*'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and access_level in (''APPROVE'')'; put ');'; put '%if &admin_check >0 %then %do;'; put 'create table fromSAS as'; put 'select distinct * from out1'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%else %do;'; put 'create table fromSAS as'; put 'select distinct a.*'; put 'from out1 a'; put 'inner join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL =''APPROVE'''; put 'and b.SAS_GROUP in (select groupname from work.groups)'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%mend getapprovals;'; put '%getapprovals()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=gethistory; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Returns the list of previously approved / rejected items.'; put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and'; put 'filtered according to the groups in MPE_SECURITY (unless the user is in the'; put 'DC admin group).'; put '

SAS Macros

'; put '@li mpe_getvars.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '

Service Inputs

'; put '
BROWSERPARAMS
'; put 'The following variables MAY be provided from frontend (HIST can also be set'; put 'in MPE_CONFIG):'; put '@li HIST - number of records to return'; put '@li STARTROW - the starting row (default is 1)'; put '

Service Outputs

'; put '
FROMSAS
'; put 'This table is returned, starting from &STARTROW for &HIST rows (ordered'; put 'descending on SUBMITTED datetime)'; put '@li TABLE_ID'; put '@li BASE_TABLE'; put '@li SUBMITTED'; put '@li SUBMITTED_REASON_TXT'; put '@li SUBMITTER'; put '@li REVIEWED'; put '@li STATUS'; put '@li REVIEWED_ON_DTTM'; put '@li APPROVER'; put '
HISTPARAMS
'; put '@li HIST - rows returned'; put '@li STARTROW - starting row used'; put '@li NOBS - Number of observations (rows) available'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* hard coded HIST value */'; put '%let hist=40;'; put '%let startrow=1;'; put '/* load parameters from frontend (HIST and STARTROW) */'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC_REVIEW"'; put 'and var_name=''HISTORY_ROWS'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(''hist'',var_value,''G'');'; put 'putlog ''mpe_config: '' var_name "=" var_value;'; put 'run;'; put '/* load parameters (override HIST again if provided) */'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* check to see if the user is an admin, or has *ALL* access rights */'; put '%let authcheck=0;'; put 'proc sql noprint;'; put 'create table work.authcheck'; put 'as select *'; put 'from usergroups'; put 'where upcase(groupname)="%upcase(&mpeadmins)"'; put 'or upcase(groupname) in ('; put 'select upcase(sas_group) from &mpelib..mpe_security'; put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to'; put ');'; put 'select count(*) into: authcheck from &syslast;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after auth check)'; put ')'; put '/* now get the previous &hist records from mpe_submit */'; put 'proc sql;'; put 'create view work.submits as'; put 'select distinct a.TABLE_ID'; put ',cats(a.base_lib,''.'',a.base_ds) as base_table'; put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted'; put ',a.submitted_reason_txt'; put ',a.submitted_by_nm as submitter'; put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED'; put ',a.submit_status_cd as status'; put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a'; put '%macro gethistory();'; put '%if &authcheck=0 %then %do;'; put '/* filter for allowed items */'; put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.base_lib=b.libref'; put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')'; put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)'; put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')'; put '%end;'; put '%mend gethistory;'; put '%gethistory()'; put ';'; put '/* get latest reason text */'; put 'create table work.reviews as'; put 'select a.*'; put ',b.reviewed_on_dttm'; put ',b.reviewed_by_nm as approver'; put ',b.review_reason_txt'; put 'from work.submits a'; put 'left join &mpelib..mpe_review b'; put 'on a.table_id=b.table_id'; put 'order by a.table_id desc, b.reviewed_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after fetching submits)'; put ')'; put 'data work.fromsas;'; put 'set work.reviews;'; put 'by descending table_id descending reviewed_on_dttm;'; put 'if first.table_id;'; put 'if _n_ ge &startrow;'; put 'n+1;'; put 'if n>&hist then stop;'; put 'drop n;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.submits;'; put 'data work.histparams;'; put 'hist=&hist;'; put 'startrow=&startrow;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,histparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=rejection; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Removes a staged data package from approval screen'; put '@details'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_getvars.sas'; put '@li removecolsfromwork.sas'; put '

Service Outputs

'; put '
fromsas
'; put '@li TABLE_ID'; put '@li SUBMITTED_REASON_TXT'; put '@li RESPONSE'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global STP_ACTION TABLE STP_REASON;'; put '%mpeinit()'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* get current status and base table */'; put 'data _null_;'; put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));'; put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));'; put 'call symputx(''submit_status_cd'',submit_status_cd);'; put 'run;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))'; put ',mac=&_program'; put ',msg=%str(&table is already rejected!)'; put ')'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=&_program'; put ',msg=%str(Issue on setup)'; put ')'; put '/**'; put '* determine if user is authorised to reject table'; put '*/'; put '%let user=%mf_getuser();'; put '%global authcheck; %let authcheck=0;'; put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%mp_abort(iftrue= (&authcheck=0)'; put ',mac=&_program..sas'; put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not'; put 'in the &mpeadmins group)'; put ')'; put '/* update the control table to show table as rejected (and why) */'; put '%let now=%sysfunc(datetime());'; put 'data work.reject;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&table";'; put 'BASE_TABLE="&base_table";'; put 'REVIEW_STATUS_ID="REJECTED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&now;'; put 'REVIEW_REASON_TXT=symget(''STP_REASON'');'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.reject;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''REJECTED'','; put 'num_of_approvals_remaining=0,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&now'; put 'where table_id="&table";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc AFTER update...)'; put ')'; put '%mpe_alerts(alert_event=REJECTED'; put ', alert_lib=%scan(&BASE_TABLE,1,.)'; put ', alert_ds=%scan(&BASE_TABLE,2,.)'; put ', dsid=&TABLE'; put ')'; put 'data fromSAS;'; put 'RESPONSE=''SUCCESS!'';'; put 'set REJECT;'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/auditors; %let service=getauditfile; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getauditfile.sas'; put '@brief Downloads a zip file containing audit info.'; put '@details The staging location from the &mpelocapprovals location'; put 'is zipped and returned as a file download. A user can only request the'; put 'audit pack if they have EDIT or APPROVE rights on the target table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_verifymacvars.sas'; put '@li mpe_accesscheck.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getattrn.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'options mprint;'; put '/* security checks */'; put '%let user=%mf_getuser();'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where table_id="&table";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds table)'; put ')'; put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);'; put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=mpestp_audit'; put ',msg=%str(&user not authorised to download audit data for &table)'; put ')'; put 'ods package(ProdOutput) open nopf;'; put 'options notes source2 mprint;'; put '%let table=%unquote(&table);'; put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);'; put 'data _null_;'; put 'set dirs;'; put 'retain str1'; put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";'; put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";'; put 'call execute(cats(str1,filename,str2));'; put 'run;'; put '%let archive_path=%sysfunc(pathname(work));'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name= "&table..zip" archive_path="&archive_path");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&archive_path/&table..zip)'; put ',outname=&table..zip'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getdiffs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdiffs.sas'; put '@brief Retrieves the diff file for viewing'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getstagetable.sas'; put '@brief Retrieves the actual table that is being sent for update'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_loadformat(libcat,libds'; put ',loadtarget=NO'; put ',auditlibds=0'; put ',locklibds=0'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=0'; put ',outds_del=0'; put ',outds_mod=0'; put ',mdebug=0'; put ');'; put '/* set up local macro variables and temporary tables (with a prefix) */'; put '%local err msg prefix dslist i var fmtlist ibufsize;'; put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;'; put '%if &outds_add=0 %then %let dslist=&dslist outds_add;'; put '%if &outds_del=0 %then %let dslist=&dslist outds_del;'; put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;'; put '%let prefix=%substr(%mf_getuniquename(),1,21);'; put '%do i=1 %to %sysfunc(countw(&dslist));'; put '%let var=%scan(&dslist,&i);'; put '%local &var;'; put '%let &var=%upcase(&prefix._&var);'; put '%end;'; put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */'; put '%let libcat=%scan(&libcat,1,-);'; put '/* perform input validations */'; put '%mp_abort('; put 'iftrue=(%mf_existds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&libds could not be found)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(FMTROW not found in &libds)'; put ')'; put '%let err=0;'; put '%let msg=0;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'value=upcase(value);'; put 'if &mdebug=0 then put name ''='' value;'; put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;'; put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'else if name=''LIBCAT'' then do;'; put 'if exist(value,''CATALOG'') le 0 then do;'; put 'call symputx(''msg'',"Unable to open catalog: "!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'end;'; put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))'; put 'and missing(value) then do;'; put 'call symputx(''msg'',"missing value in var: "!!name);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put 'data _null_;'; put 'set &libds;'; put 'if missing(fmtrow) then do;'; put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put '%mp_abort('; put 'iftrue=(&err ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(&msg)'; put ')'; put '%local cnt;'; put 'proc sql noprint;'; put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;'; put '%mp_abort('; put 'iftrue=(&cnt ne %mf_nobs(&libds))'; put ',mac=&sysmacroname'; put ',msg=%str(Non-unique primary key on &libds)'; put ')'; put '/**'; put '* First, extract only relevant formats from the catalog'; put '*/'; put 'proc sql noprint;'; put 'select distinct'; put 'case'; put 'when type=''N'' then upcase(fmtname)'; put 'when type=''C'' then cats(''$'',upcase(fmtname))'; put 'when type=''I'' then cats(''@'',upcase(fmtname))'; put 'when type=''J'' then cats(''@$'',upcase(fmtname))'; put 'else "&sysmacroname:UNHANDLED"'; put 'end'; put 'into: fmtlist separated by '' '''; put 'from &libds;'; put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)'; put '/* get a hash of the row */'; put '%local cvars nvars;'; put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP'; put 'DIG3SEP DATATYPE LANGUAGE;'; put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;'; put 'data &base_fmts/note2err;'; put 'set &base_fmts;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Ensure input table and base_formats have consistent lengths and types'; put '*/'; put 'data &inlibds/nonote2err;'; put 'length &delete_col $3 FMTROW 8 start end label $32767;'; put 'if 0 then set &base_fmts;'; put 'set &libds;'; put 'by type fmtname notsorted;'; put 'if &delete_col='''' then &delete_col=''No'';'; put 'fmtname=upcase(fmtname);'; put 'type=upcase(type);'; put 'if missing(type) then do;'; put 'if substr(fmtname,1,1)=''@'' then do;'; put 'if substr(fmtname,2,1)=''$'' then type=''J'';'; put 'else type=''I'';'; put 'end;'; put 'else do;'; put 'if substr(fmtname,1,1)=''$'' then type=''C'';'; put 'else type=''N'';'; put 'end;'; put 'end;'; put 'if type in (''N'',''I'') then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Identify new records'; put '*/'; put 'proc sql;'; put 'create table &outds_add(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'left join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtname is null'; put 'and upcase(a.&delete_col) ne "YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify modified records'; put '*/'; put 'create table &outds_mod (drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col) ne "YES"'; put 'and a.fmthash ne b.fmthash'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify deleted records'; put '*/'; put 'create table &outds_del(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col)="YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify fully deleted formats (where every record is removed)'; put '* These require to be explicitly deleted in proc format'; put '* del1 - identify _partial_ deletes'; put '* del2 - exclude these, and also formats that come with _additions_'; put '*/'; put 'create table &del1 as'; put 'select a.*'; put 'from &base_fmts a'; put 'left join &outds_del b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtrow is null;'; put 'create table &del2 as'; put 'select * from &outds_del'; put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)'; put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to load prep)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '/* new records plus base records that are not deleted or modified */'; put 'data &ds1;'; put 'merge &base_fmts(in=base)'; put '&outds_mod(in=mod)'; put '&outds_add(in=add)'; put '&outds_del(in=del);'; put 'if not del and not mod;'; put 'by type fmtname fmtrow;'; put 'run;'; put '/* add back the modified records */'; put 'data &stagedata;'; put 'set &ds1 &outds_mod;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put '%end;'; put '/* mp abort needs to run outside of conditional blocks */'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to actual load)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;'; put '%put There are no changes to load in &libcat!;'; put '%return;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* prevent parallel updates */'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT commencing format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* do the actual load */'; put 'proc format lib=&libcat cntlin=&stagedata;'; put 'run;'; put '/* apply any full deletes */'; put '%if %mf_nobs(&del2)>0 %then %do;'; put '%local delfmtlist;'; put 'proc sql noprint;'; put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')'; put 'when type=''C'' then cats(fmtname,''.FORMATC'')'; put 'when type=''J'' then cats(fmtname,''.INFMTC'')'; put 'when type=''I'' then cats(fmtname,''.INFMT'')'; put 'else cats(fmtname,''.BADENTRY!!!'') end'; put 'into: delfmtlist'; put 'separated by '' '''; put 'from &del2;'; put 'proc catalog catalog=&libcat;'; put 'delete &delfmtlist;'; put 'quit;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* unlock the table */'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT completed format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* track the changes */'; put '%if &auditlibds ne 0 %then %do;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%mp_storediffs(&libcat-FC'; put ',&base_fmts'; put ',TYPE FMTNAME FMTROW'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=&storediffs'; put ',mdebug=&mdebug'; put ')'; put 'proc append base=&auditlibds data=&storediffs;'; put 'run;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%end;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc after load)'; put ')'; put '%if &mdebug=0 %then %do;'; put 'proc datasets lib=work;'; put 'delete &prefix:;'; put 'run;'; put '%put &sysmacroname exit vars:;'; put '%put _local_;'; put '%end;'; put '%mend mp_loadformat;'; put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */'; put ',now= %sysfunc(datetime()) /* static processed timestamp */'; put ',etlsource= /* process from whence the data came */'; put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should'; put 'be appended into the target. */'; put ',LOADTARGET=NO /* set to yes to actually load the target */'; put ',CLOSE_VARS= /* provide close vars to override defaults */'; put ',dclib=NOTPROVIDED'; put ',mdebug=0'; put ',dc_dttmtfmt=%sysfunc(datetime())'; put ');'; put '%local lib ds nobs;'; put '/**'; put '* if a format catalog (suffix "-FC") we assume the catalog has already been'; put '* created by the calling program with a libds of work.fmtextract'; put '*/'; put '%let orig_lib=%upcase(%scan(&libds,1,.));'; put '%let orig_ds=%upcase(%scan(&libds,2,.));'; put '%let orig_libds=&libds;'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%let lib=WORK;'; put '%let ds=FMTEXTRACT;'; put '%let libds=&lib..&ds;'; put '%end;'; put '%else %do;'; put '%let lib=&orig_lib;'; put '%let ds=&orig_ds;'; put '%end;'; put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)'; put ',mac=&sysmacroname'; put ',msg=%str(dclib=NOTPROVIDED)'; put ')'; put '/* get table attributes */'; put '%let nobs=0;'; put 'data work.sumo_config;'; put 'set &mpelib..mpe_tables;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&orig_lib"'; put 'and dsn="&orig_ds";'; put 'call symputx(''LOADTYPE'',loadtype,''l'');'; put 'call symputx(''BUSKEY'',buskey,''l'');'; put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');'; put 'call symputx(''VAR_TXTO'',var_txto,''l'');'; put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');'; put 'call symputx(''VAR_BUSTO'',var_busto,''l'');'; put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');'; put '%if %length(&CLOSE_VARS)=0 %then %do;'; put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');'; put '%end;'; put 'call symputx(''nobs'',_n_,''l'');'; put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";'; put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');'; put 'put (_all_)(=);'; put 'run;'; put '/* check if table is actually configured to load */'; put '%if &nobs ne 1 %then %do;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="%mf_getuser()"'; put ',STATUS=''FAILED (BAD DS)'''; put ',CSV_DIR=symget(''ETLSOURCE'')'; put ',PROCESSED_DTTM=&now;'; put '%end;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Table not registered in &mpelib..mpe_tables)'; put ')'; put '%mp_abort(iftrue= (&nobs>1)'; put ',mac=&sysmacroname'; put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)'; put ')'; put '%if &LOADTYPE=TXTEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=&ETLSOURCE'; put ',LOADTYPE=&loadtype'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=REPLACE %then %do;'; put '%if &LOADTARGET=YES %then %do;'; put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put 'data WORK.&STAGING_DS;'; put 'set WORK.&STAGING_DS;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put '&VAR_PROCESSED = &now;'; put '%end;'; put 'drop _____DELETE__THIS__RECORD_____;'; put 'run;'; put 'proc sql; delete * from &libds;'; put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)'; put '%end;'; put '%else %do;'; put '/* is full replace so treat all staged records as new in diff screen */'; put 'data work.outds_mod work.outds_add ;'; put 'set work.&staging_ds;'; put 'output work.outds_add;'; put 'run;'; put '/* previous table will be considered fully deleted */'; put 'data work.outds_del;'; put 'set &lib..&ds;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to='; put ',tech_from= ,tech_to = /* explicitly empty*/'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=UPDATE'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=FORMAT_CAT %then %do;'; put '/**'; put '* run mp_formatload'; put '* inputs:'; put '* - LOADTARGET'; put '* - CATALOG'; put '* - STAGEDATA'; put '* - LOADAUDIT'; put '* outputs:'; put '* work.outds_add'; put '* work.outds_del'; put '* work.outds_mod'; put '*/'; put '%mp_loadformat(&orig_libds'; put ',&staging_ds'; put ',loadtarget=&LOADTARGET'; put ',auditlibds=&AUDIT_LIBDS'; put ',locklibds=&dclib..mpe_lockanytable'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=outds_add'; put ',outds_del=outds_del'; put ',outds_mod=outds_mod'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %if &loadtype=BITEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=BITEMPORAL'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: LOADTYPE &LOADTYPE not supported;'; put '%let syscc=4;'; put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)'; put ')'; put '%mend mpe_targetloader;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file postdata.sas'; put '@brief Either returns the file diffs or actually loads the data to target'; put '@details Before loading the target, a check is made against the time the'; put 'target was last updated (backend) and the time the DIFF was generated'; put '(frontend). If the target was updated whilst the DIFF was on the screen,'; put 'then the provided diff may have been incorrect and so a new DIFF should be'; put 'generated and approved before load.'; put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|'; put '|---|---|---|'; put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|'; put '

SAS Macros

'; put '@li bitemporal_dataloader.sas'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getengine.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuniquelibref.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_runhook.sas'; put '@li mpe_targetloader.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '/* this could be a config setting if required */'; put '%let maxdiff=100;'; put '%mpeinit()'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''ACTION'',ACTION);'; put 'call symputx(''LOAD_REF'',TABLE);'; put '/* DIFFTIME is when the DIFF was generated on the frontend */'; put 'call symputx(''DIFFTIME'',DIFFTIME);'; put 'putlog (_all_)(=);'; put 'run;'; put '%global action is_err err_msg msg;'; put '%let is_err=0;'; put '%let user=%mf_getuser();'; put '%let sastime=%sysfunc(datetime());'; put 'data sastime;'; put 'dt_sastime=&sastime;'; put 'run;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */'; put '/* so we share much of the logic from the actual load process */'; put '%let isfmtcat=0;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit;'; put 'where TABLE_ID="&LOAD_REF";'; put '/* fetch mpe_submit data */'; put 'libds=cats(base_lib,''.'',base_ds);'; put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);'; put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);'; put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);'; put '/* other stuff that''s useful to do in data step */'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''libds'',libds);'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''isfmtcat'',1);'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* convert provided string DIFFTIME back to a numeric SAS datetime */'; put 'if "&action" ne "SHOW_DIFFS" then do;'; put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));'; put 'end;'; put 'length difftime $32;'; put 'DIFFTIME=put(&sastime,datetime19.2);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&isfmtcat=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: difftime orig_libds libds load_ref)'; put ')'; put '/* security checks */'; put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc Before entering postdata macro)'; put ')'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=&_program'; put ',msg=%str(&user not authorised to view approval screen for &orig_libds)'; put ')'; put '%macro quickmacro(inds,outds);'; put 'data &outds ;'; put '%if %length(&VAR_BUSFROM)>0 %then %do;'; put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;'; put '%end;'; put 'if 0 then set &emptybasetable;'; put 'set &inds;'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;'; put 'drop _____DELETE__THIS__RECORD_____;'; put '%end;'; put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put '%mend quickmacro;'; put '%macro postdata();'; put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)'; put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then'; put '%do;'; put 'data params; set approve1; run;'; put '%webout(OPEN)'; put '%webout(OBJ,PARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if &action=APPROVE_TABLE %then %do;'; put '/* check user is authorised to approve table */'; put '/* user could be an editor but not an approver */'; put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)'; put ',mac=&_program'; put ',msg=%str(&user may not APPROVE changes)'; put ')'; put '/* see if this user has already submitted an approval */'; put '%let prev_upload_check=1;'; put 'proc sql;'; put 'select count(*) into: prev_upload_check from &mpelib..mpe_review'; put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"'; put 'and REVIEW_STATUS_ID ne "SUBMITTED";'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%if &authcheck=0 or &prev_upload_check=1 %then %do;'; put '%put %str(WARN)ING: &=authcheck &=prev_upload_check;'; put 'data apPARAMS;'; put 'AUTHORISED=&authcheck;'; put 'PREV_UPLOAD_CHECK=&prev_upload_check;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '/* now check if table has been updated since DIFF screen shown */'; put '%local fmt_tm usernm last_load etlsource;'; put '%let last_load=0;'; put 'proc sql noprint;'; put 'select max(processed_dttm) format=16.2 into: last_load'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";'; put 'select processed_dttm format=datetime19., user_nm, etlsource'; put 'into: fmt_tm, :usernm, :etlsource'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"'; put 'and processed_dttm=&last_load;'; put '%put TIMECHECK: &last_load>&difftime;'; put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;'; put '%let is_err=1;'; put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource'; put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;'; put '%return;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc before logchange;'; put '%return;'; put '%end;'; put '/* upload about to commence so ensure logs */'; put 'options notes mprint source2;'; put '%local oldloc;'; put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;'; put '%else %let oldloc=%qsysfunc(getoption(LOG));'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put 'data _null_;'; put 'if _n_=1 then do;'; put 'length oldloc $1000;'; put 'oldloc=symget(''oldloc'');'; put 'putlog "****** redirected:" oldloc " *****";'; put 'end;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc after logchange;'; put '%return;'; put '%end;'; put '%end;'; put '/**'; put '* upload the actual table'; put '*/'; put '%local libref ds;'; put '%let libref=%scan(&orig_libds,1,.);'; put '%let ds=%scan(&orig_libds,2,.);'; put 'proc sql noprint;'; put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto'; put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO'; put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)'; put ',VAR_PROCESSED'; put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto'; put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO'; put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT'; put ',:VAR_PROCESSED'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&libref"'; put 'and dsn="&ds";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals orig_libds)'; put ')'; put '/* get dataset from approvals location (has same name as load_ref) */'; put '%let tmplib=%mf_getuniquelibref();'; put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";'; put 'data STAGING_DS;'; put 'set &tmplib..&LOAD_REF;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc before preapprove)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */'; put '%mpe_runhook(PRE_APPROVE_HOOK)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after preapprove)'; put ')'; put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'data apReqd;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apReqd);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering TARGETLOADER)'; put ')'; put '%mpe_targetloader(libds=&orig_libds'; put ',now= &sastime'; put ',etlsource=&LOAD_REF'; put ',STAGING_DS=STAGING_DS'; put ',dclib=&mpelib'; put '%if &action=APPROVE_TABLE %then %do;'; put ',LOADTARGET=YES'; put '%end;'; put '%else %do;'; put ',LOADTARGET=NO'; put '%end;'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;'; put '/* empty dataset! */'; put 'data out;'; put 'set STAGING_DS;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering SHOWDIFFS)'; put ')'; put '%if &action=SHOW_DIFFS %then %do;'; put '/**'; put '* Now prepare the SHOW DIFFS (approve) screen'; put '*/'; put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first'; put 'need to find out what version TIME to query it for.. */'; put 'proc sql noprint;'; put 'select max(processed_dttm)-1 format=datetime19. into: tstamp'; put 'from &mpelib..mpe_dataloads'; put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";'; put 'quit;'; put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);'; put '/**'; put '* now create the DIFFS dataset'; put '* If using a database, then utilise pass through!'; put '* Create a temporary table inside the database for joins..'; put '*/'; put 'options mprint;'; put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));'; put '%put &libds engine type = &engine_type;'; put '%local inner_table ;'; put '%if &engine_type=OLEDB %then %do;'; put '/* generate a unique ID for the temporary table */'; put 'data _null_;'; put 'call symputx(''UNIQUE_REF'''; put ',cats(round(datetime(),1)'; put ',''_'''; put ',round(ranuni(0)*100000,1)'; put ')'; put ',''l'''; put ');'; put 'run;'; put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;'; put 'proc sql;'; put 'create table &inner_table as'; put 'select * from work.outds_mod;'; put '%end;'; put '%else %let inner_table=work.outds_mod;'; put 'proc sql;'; put 'create view work.originals2 as'; put 'select b.*'; put 'from &inner_table a'; put 'inner join &libds'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '(where=("&tstamp"dt < &VAR_TXTO))'; put '%end;'; put 'b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&buskey));'; put '%let idx_val=%scan(&buskey,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'create view bitemp5c_updates2 as'; put 'select * from work.outds_mod'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'options varlenchk=nowarn; /* for small numerics (<8) */'; put '%quickmacro(work.outds_del,deleted)'; put '%quickmacro(work.outds_add,new)'; put '%quickmacro(bitemp5c_updates2,updates)'; put '%quickmacro(originals2,originals)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc in quickmacro)'; put ')'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=work.updates'; put 'out=cols (keep=name type length varnum format);'; put 'run;'; put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;'; put 'data cols; set cols; name=upcase(name);run;'; put '%let tempDIFFS_CSV=tempDiffs_%trim('; put '%sysfunc(datetime(),flatdate.)).csv;'; put '/**'; put '* Store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '*/'; put 'data TEMPDIFFS (compress=no) /* for realistic file size */;'; put 'length _____status $10;'; put 'set work.deleted (in=_____del)'; put 'work.new(in=_____new)'; put 'work.updates (in=_____upd)'; put 'work.originals2 (in=_____orig);'; put 'if _____del then _____status=''DELETED '';'; put 'else if _____new then _____status=''NEW'';'; put 'else if _____upd then _____status=''UPDATED'';'; put 'else if _____orig then _____status=''ORIGINAL'';'; put 'run;'; put 'proc export data=TEMPDIFFS dbms=csv replace'; put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;'; put 'run;'; put 'proc sql noprint;'; put 'select filesize format=sizekmg10.1, filesize as filesize_raw'; put 'into: filesize,:filesize_raw'; put 'from dictionary.tables'; put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';'; put 'data params;'; put 'set approve1;'; put 'DIFFS_CSV="&tempDIFFS_CSV";'; put 'FILESIZE="&filesize";'; put 'FILESIZE_RAW=&filesize_raw;'; put 'if %mf_nobs(work.originals)>&maxdiff'; put 'or %mf_nobs(work.new)>&maxdiff'; put 'or %mf_nobs(work.deleted)>&maxdiff'; put 'or %mf_nobs(work.updates)>&maxdiff'; put 'then TRUNCATED="YES";'; put 'else TRUNCATED="NO";'; put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);'; put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);'; put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);'; put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);'; put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;'; put 'ISAPPROVER=''YES'';'; put '%end;'; put '%else %do;'; put 'ISAPPROVER=''NO'';'; put '%end;'; put 'run;'; put '/*'; put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.'; put '* To ensure consistency in the DIFF screen, we should apply the same formats'; put '* to the base table. Limit rows at the same time.'; put '*/'; put 'data work.originals;'; put 'if 0 then set deleted new updates;'; put 'set work.originals;'; put 'if _n_>&maxdiff then stop;'; put 'run;'; put '/* get additional submits against the same base table */'; put 'proc sort data=&mpelib..mpe_submit(where=('; put 'submit_status_cd=''SUBMITTED'''; put 'and cats(base_lib,''.'',base_ds)="&orig_libds"'; put 'and table_id ne "&LOAD_REF"'; put ')) out=submits;'; put 'by descending submitted_on_dttm;'; put 'run;'; put '/* filter last 10 */'; put 'data submits;'; put 'set submits;'; put 'if _n_>10 then stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,params)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,submits)'; put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)'; put '/* need same for formatted view */'; put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)'; put '%webout(CLOSE)'; put '%if &engine_type=OLEDB %then %do;'; put 'proc sql; /* needs to be dropped AFTER view execution */'; put 'drop table &inner_table;'; put '%end;'; put '%return;'; put '%end;'; put '%if &action=APPROVE_TABLE %then %do;'; put '%approve:'; put '/**'; put '* store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '* for REPLACE loads, temp tables not made, so make them'; put '*/'; put '%if &LOADTYPE=REPLACE %then %do;'; put 'data work.outds_add; run;'; put 'data work.outds_mod; run;'; put 'data work.outds_del; run;'; put '%end;'; put 'libname approve "&mpelocapprovals/&LOAD_REF";'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'data approve.ActualDiffs;'; put 'length _____STATUS_____ $10;'; put 'if 0 then set &emptybasetable;'; put 'set work.outds_del (in=_____del)'; put 'work.outds_add (in=_____new)'; put 'work.outds_mod (in=_____upd);'; put 'if _____del then _____STATUS_____=''DELETED'';'; put 'else if _____new then _____STATUS_____=''NEW'';'; put 'else if _____upd then _____STATUS_____=''UPDATED'';'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put 'proc export data=approve.ActualDiffs'; put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control table to show table as approved */'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''APPROVED'','; put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* run post-approve hook */'; put '%mpe_runhook(POST_APPROVE_HOOK)'; put 'data apPARAMS;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'DIFFTIME="&difftime";'; put 'if &syscc=0 then RESPONSE=''SUCCESS!'';'; put 'else response="SYSCC=&syscc.";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program 582'; put ',msg=%superq(msg)'; put ')'; put '%mpe_alerts(alert_event=APPROVED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&LOAD_REF'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mend postdata;'; put '%postdata()'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort(iftrue= (&is_err=1)'; put ',mac=&_program'; put ',msg=%superq(err_msg)'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/editors; %let service=getdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; put '%mend dc_getgroupmembers;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_length(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_length)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_length(var);'; put 'if var=. then len=0;'; put 'else if missing(var) or trunc(var,3)=var then len=3;'; put 'else if trunc(var,4)=var then len=4;'; put 'else if trunc(var,5)=var then len=5;'; put 'else if trunc(var,6)=var then len=6;'; put 'else if trunc(var,7)=var then len=7;'; put 'else len=8;'; put 'return(len);'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_length;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mp_getmaxvarlengths('; put 'libds'; put ',num2char=NO'; put ',outds=work.mp_getmaxvarlengths'; put ')/*/STORE SOURCE*/;'; put '%local vars prefix x var fmt srcds;'; put '%let vars=%mf_getvarlist(libds=&libds);'; put '%let prefix=%substr(%mf_getuniquename(),1,25);'; put '%let num2char=%upcase(&num2char);'; put '%if &num2char=NO %then %do;'; put '/* compile length function for numeric fields */'; put '%mcf_length(wrap=YES, insert_cmplib=YES)'; put '%end;'; put '%if &num2char=NO'; put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")'; put 'and %mf_getvarcount(&libds,typefilter=N) gt 0'; put '%then %do;'; put '/* custom functions not supported in summary operations */'; put '%let srcds=%mf_getuniquename();'; put 'data &srcds/view=&srcds;'; put 'set &libds;'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if %mf_getvartype(&libds,&var)=N %then %do;'; put '&prefix.&x=mcf_length(&var);'; put '%end;'; put '%end;'; put 'run;'; put '%end;'; put '%else %let srcds=&libds;'; put 'proc sql;'; put 'create table &outds (rename=('; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '&prefix.&x=%scan(&vars,&x)'; put '%end;'; put '))'; put 'as select'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if &x>1 %then ,;'; put '%if %mf_getvartype(&libds,&var)=C %then %do;'; put 'max(lengthn(&var)) as &prefix.&x'; put '%end;'; put '%else %if &num2char=YES %then %do;'; put '%let fmt=%mf_getvarformat(&libds,&var);'; put '%put fmt=&fmt;'; put '%if %str(&fmt)=%str() %then %do;'; put 'max(lengthn(cats(&var))) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(lengthn(put(&var,&fmt))) as &prefix.&x'; put '%end;'; put '%end;'; put '%else %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;'; put 'max(&prefix.&x) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(mcf_length(&var)) as &prefix.&x'; put '%end;'; put '%end;'; put '%end;'; put 'from &srcds;'; put 'proc transpose data=&outds'; put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));'; put 'run;'; put '%mend mp_getmaxvarlengths;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdata.sas'; put '@brief Returns a dataset to the editor front end'; put '@details'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|'; put '|---|---|'; put '|DC258467.MPE_X_TEST|-1|'; put '

Service Outputs

'; put '
sasdata
'; put '
sasparams
'; put 'Contains info on the request. One row is returned.'; put '@li CLS_FLG - set to 0 if there are no CLS rules (everything editable)'; put 'else set to 1 (CLS rules exist)'; put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0'; put '
approvers
'; put '
dqrules
'; put '
dqdata
'; put '
cols
'; put 'Contains column level attributes.'; put '@li NAME - column name'; put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li CLS_RULE - values include:'; put '- EDIT - the column is editable'; put '- READ - the column should be readonly'; put '- HIDE - the column should be hidden'; put '@li memlabel'; put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label'; put '@li longdesc - from MPE_DATADICTIONARY'; put '
maxvarlengths
'; put '
xl_rules
'; put '
query
'; put '
versions
'; put 'history of DC versions for this particular table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getgroupmembers.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getvarlist.sas'; put '@li mf_existds.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getmaxvarlengths.sas'; put '@li mp_validatecol.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getlabels.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@li mpe_runhook.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length filter_rk 8;'; put 'set work.SASCONTROLTABLE;'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put 'call symputx(''orig_libds'',upcase(libds));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds filter_rk)'; put ')'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further calls will return col metadata and actual data'; put '*/'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '/**'; put '* First check user has access permission to edit the table'; put '*/'; put '%put checking access;'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)'; put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)'; put ',mac=mpestp_getdata.sas'; put ',msg=&user is not authorised to edit &orig_libds %trim('; put ')in the &mpelib..MPE_SECURITY table'; put ')'; put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)'; put ',mac=mpestp_getdata.sas'; put ',msg=dataset &libds does not exist!!'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at line 60 )'; put ')'; put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype'; put 'sortpk;'; put '%put getting table attributes;'; put 'proc sql noprint;'; put 'select upcase(loadtype)'; put ',var_txfrom,var_txto'; put ',var_busfrom,var_busto'; put ',var_processed,rk_underlying,buskey'; put ',coalesce(rk_underlying,buskey)'; put ',pre_edit_hook'; put ',case when missing(rk_underlying) then buskey else rk_underlying end'; put 'into: loadtype,:var_txfrom,:var_txto'; put ',:var_busfrom ,:var_busto'; put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt TX_TO'; put 'and upcase(dsn)="%scan(&orig_libds,2,.)"'; put 'and upcase(libref)="%scan(&orig_libds,1,.)";'; put '%put preparing filter query:;'; put '%mpe_filtermaster(EDIT,&orig_libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%macro mpestp_getdata();'; put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;'; put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;'; put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;'; put '%put NOTE-;%put NOTE-;'; put '%global DC_MAXOBS_WEBEDIT;'; put '%let DC_MAXOBS_WEBEDIT=500;'; put '%end;'; put '/* for tables which use RKs/SKs then we just expose the business key to'; put 'users - this lets uploads be sent to multiple environments (with'; put 'potentially different RK/SK values for the same business key).'; put 'Note that the config table has the RK column in the buskey field in'; put 'this scenario. */'; put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;'; put '%else %let drop_rk=;'; put '/* always remove the PROCESSED_DTTM column, if it exists */'; put '%if %length(&var_processed)=0 %then %do;'; put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then'; put '%let var_processed=PROCESSED_DTTM;'; put '%end;'; put '/**'; put '* Now get the slice of the actual table'; put '*/'; put 'options obs=10000;'; put '%if &loadtype=BITEMPORAL %then %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'proc sort data=out;'; put 'by &pk &var_busfrom;'; put 'run;'; put 'data out;'; put 'set out;'; put 'by &pk &var_busfrom;'; put 'if last.%scan(&pk,-1);'; put 'run;'; put '%end;'; put '%else %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%end;'; put 'options obs=max;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue with filtering (line 165) )'; put ')'; put 'options obs=&DC_MAXOBS_WEBEDIT;'; put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));'; put 'proc sort data=work.out; by &sortPK; run;'; put 'options obs=max;'; put '%mpe_runhook(PRE_EDIT_HOOK)'; put '%let obscnt=%mf_getattrn(work.out,NLOBS);'; put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)'; put ',mac=&_program'; put ',msg=Table is too big (&obscnt rows) - please filter and try again!'; put ')'; put '/* order delete var and pk fields at start of table */'; put '%let sourcevars=%mf_wordsInStr1ButNotStr2('; put 'Str1=%mf_getvarlist(work.out)'; put ',Str2= _____DELETE__THIS__RECORD_____ &pk'; put ');'; put '%put sourcevars=&sourcevars;'; put 'data outdata;'; put '/* delete & pk fields come first */'; put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';'; put '/* keep remaining variable order */'; put '%if %length(&sourcevars)>0 %then %do;'; put 'attrib &sourcevars label='''';'; put '%end;'; put '_____DELETE__THIS__RECORD_____="No ";'; put '%if %mf_nobs(work.out)=0 %then %do;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put '%end;'; put 'set work.out ;'; put 'run;'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=outdata'; put 'out=vars(keep=name type length varnum format: label);'; put 'run;'; put 'proc sort;'; put 'by varnum;'; put 'run;'; put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");'; put 'if type2=2 or type2=6 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''num'';'; put 'end;'; put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))'; put 'then PK=''YES'';'; put 'length ctrlOptions $500;'; put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';'; put 'else ctrlOptions='''';'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n'; put '%superq(syserrortext)'; put ')'; put ')'; put '%global jsdttmvars jsdtvars jstmvars;'; put 'data _null_;'; put 'set vars3 end=last;'; put 'if _n_>1 then comma='','';'; put 'length coltype $500.;'; put 'format=upcase(format);'; put 'coltype=cats(comma,''{"data":"'',name,''"'');'; put 'if ctrlOptions ne '''' then'; put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");'; put 'else if type=''num'' then do;'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then do;'; put 'colType=cats(coltype'; put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat datetimes in javascript format */'; put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then do;'; put '/* see bottom of file for more date formats!! */'; put '/* also when updating, update stagedata.sas and mp_getcols.sas'; put 'and mpe_loader.sas */'; put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"'''; put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/'; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript dates */'; put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''TIME'' or format=:''HHMM'' then do;'; put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript times */'; put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);'; put 'end;'; put 'else do;'; put '/* is standard numeric but need to ascertain precision */'; put 'retain base ''000000000000000000'';'; put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));'; put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');'; put 'end;'; put 'end;'; put 'else colType=cats(coltype,''}'');'; put 'length concatcoltype $32767;'; put 'retain concatcoltype;'; put 'concatcoltype=cats(concatcoltype,coltype);'; put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s'''; put '(datatype=datetime);'; put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);'; put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);'; put 'RUN;'; put '/* before we send the data, need to rebuild all date & datetime vars as char*/'; put '%let finalvars=%mf_getvarlist(work.outdata);'; put 'data sasdata;'; put '/* set formats & col order ahead of rename+import */'; put 'informat &finalvars ;'; put '/* read dataset and rename date / datetime vars as necessary */'; put 'set outdata'; put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;'; put '(rename=('; put '%local dtvarnum dtvar tmvar;'; put '/* temp datetime vars end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);'; put '&dtvar=_____&dtvarnum._____'; put '%end;'; put '/* temp date vars do not end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan( &jsdtvars,&dtvarnum);'; put '&dtvar=_____&dtvarnum'; put '%end;'; put '/* temp time vars end in ___tm */'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan( &jstmvars,&tmvarnum);'; put '&tmvar=_____&tmvarnum.___tm'; put '%end;'; put '))'; put '%end;'; put ';'; put '%if %length(&jsdttmvars)>0 %then %do ;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum._____;'; put '%end;'; put '%end;'; put '%if %length(&jsdtvars)>0 %then %do;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan(&jsdtvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum;'; put '%end;'; put '%end;'; put '%if %length(&jstmvars)>0 %then %do;'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan(&jstmvars,&tmvarnum);'; put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));'; put 'if &tmvar="ERROR" then call missing(&tmvar);'; put 'drop _____&tmvarnum.___tm;'; put '%end;'; put '%end;'; put 'output;'; put 'run;'; put '/* get the relevant approvers for the drop down */'; put '%put getting approvers;'; put '%local sas_groups sas_i sas_group;'; put 'proc sql noprint;'; put 'select distinct sas_Group into: sas_groups separated by "|"'; put 'from &mpelib..mpe_security'; put 'where libref="%scan(&orig_libds,1,.)"'; put 'and dsn="%scan(&orig_libds,2,.)"'; put 'and access_level=''APPROVE'''; put 'and &dc_dttmtfmt. lt TX_TO;'; put '%if %length(&sas_groups)=0 %then %do;'; put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)'; put '%end;'; put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));'; put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));'; put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)'; put 'proc append base=work.access1 data=work.temp&sas_i;run;'; put '%end;'; put '%mend mpestp_getdata;'; put '%mpestp_getdata()'; put '%mp_abort(mode=INCLUDE)'; put '/* extract column level security rules */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata'; put ',mode=EDIT'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.sasdata1'; put ',outmeta=work.cls_rules'; put ')'; put '/* get labels */'; put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc extracting spec info)'; put ')'; put '/* extract col info */'; put '%mp_getcols(&libds, outds=cols1)'; put '/* join with cls rules */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',a.VARNUM'; put ',a.LABEL'; put ',a.FMTNAME'; put ',a.DDTYPE'; put ',case b.cls_hide'; put 'when 1 then ''HIDE'''; put 'when 0 then ''EDIT'''; put 'else ''READ'' end as CLS_RULE'; put ',c.memlabel'; put ',c.desc'; put ',c.longdesc'; put 'from work.cols1 a'; put 'left join work.cls_rules b'; put 'on a.NAME=b.CLS_VARIABLE_NM'; put 'left join work.spec c'; put 'on a.NAME=c.NAME;'; put 'proc sql;'; put 'create table approvers as select distinct membername as personname'; put ',membername as email, membername as userid'; put 'from work.access1;'; put '/*'; put 'create table access3 as select b.userid,b.email'; put 'from access2 a'; put ',support.users b'; put 'where a.personname=b.userid'; put 'and a.personname ne "%mf_getuser()"'; put 'and %sysfunc(datetime()) lt b.tx_to_dttm'; put 'order by 1;'; put '*/'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%put params;'; put '%let ismap=0;'; put 'proc sql noprint;'; put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;'; put 'data sasparams;'; put 'length colHeaders $20000 filter_text $32767;'; put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));'; put 'pkCnt=countw("&pk");'; put 'pk="&pk";'; put 'dtvars=compbl("&jsdtvars");'; put 'dttmvars=compbl("&jsdttmvars");'; put 'tmvars=compbl("&jstmvars");'; put 'length coltype $32000;'; put 'coltype=symget(''coltype'');'; put 'loadtype=symget(''loadtype'');'; put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;'; put 'else rk_flag=0;'; put 'filter_text=symget(''filter_text'');'; put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;'; put 'else cls_flag=1;'; put 'put (_all_)(=);'; put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;'; put 'else ismap=0;'; put 'run;'; put '/* Extract validation DQ Rules */'; put 'proc sort data=&mpelib..mpe_validations'; put '(where=(&dc_dttmtfmt. le TX_TO'; put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"'; put 'and rule_active=1))'; put 'out=dqrules (keep=base_col rule_type rule_value);'; put 'by base_col rule_type rule_value;'; put 'run;'; put '/* merge with NOTNULL constraints in the physical table */'; put 'proc sql;'; put 'create table _data_ as'; put 'select * from dqrules'; put 'union'; put 'select upcase(name) as base_col'; put ',''NOTNULL'' as rule_type'; put ','''' as rule_value'; put 'from dictionary.columns'; put 'where upcase(libname)="%scan(&orig_libds,1,.)"'; put 'and upcase(memname)="%scan(&orig_libds,2,.)"'; put 'and upcase(name) in (select name from vars3)'; put 'and notnull=''yes'''; put 'order by 1,2,3;'; put 'data dqrules;'; put 'set &syslast;'; put 'by base_col rule_type rule_value;'; put 'if last.rule_type;'; put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then'; put 'do;'; put 'retain x 0; x+1;'; put 'call symputx(cats(''source'',x),rule_value);'; put '%let sourcecnt=0;'; put 'call symputx(''sourcecnt'',x);'; put 'call symputx(cats(''base_col'',x),base_col);'; put 'end;'; put 'run;'; put 'proc sql;'; put 'create table dqdata as'; put 'select distinct base_column as base_col length=32'; put ',upcase(base_column) as rule_value length=74 /* deprecated */'; put ',selectbox_value as rule_data length=1000'; put ',selectbox_order'; put 'from &mpelib..mpe_selectbox'; put 'where &dc_dttmtfmt. lt ver_to_dttm'; put 'and select_lib="%scan(&orig_libds,1,.)"'; put 'and select_ds="%scan(&orig_libds,2,.)";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during DQ rule validation)'; put ')'; put '/* extract selectbox data */'; put '%macro dq_selects();'; put '%local x source lib ds col;'; put '%do x=1 %to &sourcecnt;'; put '%let source=&&source&x;'; put '%let lib=%scan(&source,1,.);'; put '%let ds=%scan(&source,2,.);'; put '%let col=%scan(&source,3,.);'; put '%put &=source;'; put '%put &=lib;'; put '%dc_assignlib(READ,&lib)'; put 'proc sql;'; put 'create table dqdata&x as'; put 'select distinct "&&base_col&x" as base_col length=32'; put ',"&source" as rule_value length=74'; put ',cats(&col) as rule_data length=1000'; put ',&col as tmp_order'; put 'from &lib..&ds'; put 'order by tmp_order;'; put '/* ensure both numerics and char vals are ordered correctly */'; put 'data work.dqdata&x (drop=tmp_order);'; put 'set work.dqdata&x;'; put 'selectbox_order=_n_;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)'; put ')'; put 'proc append base=dqdata data=dqdata&x;run;'; put 'proc sql; drop table dqdata&x;'; put '%end;'; put '%mend dq_selects;'; put '%dq_selects()'; put 'proc sort data=dqdata;'; put '/* order by selectbox_order then the value */'; put 'by base_col selectbox_order rule_data;'; put 'run;'; put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)'; put 'data maxvarlengths;'; put 'set maxvarlengths;'; put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;'; put 'run;'; put 'data xl_rules;'; put 'set &mpelib..mpe_excel_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";'; put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";'; put 'where also xl_active=1;'; put 'keep xl_column xl_rule;'; put 'run;'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '/* send to the client */'; put '%webout(OPEN)'; put '%webout(OBJ,approvers)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dqdata,missing=STRING)'; put '%webout(OBJ,dqrules)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,maxvarlengths)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,xl_rules)'; put '%webout(CLOSE)'; put '/*'; put '$N8601Bw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'DATEw'; put 'DATEAMPMw'; put 'DATETIMEw'; put 'DAYw'; put 'DDMMYYw'; put 'DDMMYYxw'; put 'DOWNAMEw'; put 'DTDATEw'; put 'DTMONYYw'; put 'DTWKDATXw'; put 'DTYEARw'; put 'DTYYQCw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put 'HHMMw'; put 'HOURw'; put 'JULDAYw'; put 'JULIANw'; put 'MMDDYYw'; put 'MMDDYYxw'; put 'MMSSw'; put 'MMYYw'; put 'MMYYxw'; put 'MONNAMEw'; put 'MONTHw'; put 'MONYYw'; put 'PDJULGw'; put 'PDJULIw'; put 'QTRw'; put 'QTRRw'; put 'TIMEw'; put 'TIMEAMPMw'; put 'TODw'; put 'WEEKDATEw'; put 'WEEKDATXw'; put 'WEEKDAYw'; put 'WEEKUw'; put 'WEEKVw'; put 'WEEKWw'; put 'WORDDATEw'; put 'WORDDATXw'; put 'YEARw'; put 'YYMMw'; put 'YYMMxw'; put 'YYMMDDw'; put 'YYMMDDxw'; put 'YYMONw'; put 'YYQw'; put 'YYQxw'; put 'YYQRw'; put 'YYQRxw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put '*/'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getdynamiccolvals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdynamiccolvals.sas'; put '@brief Provide dynamic list of values according to a SAS program or service'; put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown'; put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.'; put 'Results are sent in ARRAY format for efficiency.'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|VARIABLE_NM:$32.|'; put '|---|---|'; put '|DC258467.MPE_SECURITY|SAS_GROUP|'; put '
SOURCE_ROW
'; put 'This contains the raw values from the source table.'; put '

Service Outputs

'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getservicecode.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_include.sas'; put '@li mp_validatecol.sas'; put '@li mf_getapploc.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put '%let err_msg=;'; put 'data work.intest;'; put 'set work.SASCONTROLTABLE;'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put '/* validate varname */'; put 'is_name=nvalid(variable_nm,''v7'');'; put 'putlog (_all_)(=);'; put 'if is_libds ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else if is_name ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''variable_nm'',variable_nm);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after reading work.sascontroltable)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(&err_msg)'; put ')'; put '%dc_assignlib(READ,%scan(&libds,1,.))'; put '/* ensure that work.dynamic_extended_values exists */'; put 'data work.dynamic_extended_values;'; put 'run;'; put '/**'; put '* Get the code to execute'; put '*/'; put 'data work.codetest;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and base_lib="%scan(&libds,1,.)"'; put 'and base_ds="%scan(&libds,2,.)"'; put 'and base_col="&variable_nm"'; put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')'; put 'and RULE_ACTIVE=1;'; put 'putlog (_all_)(=);'; put 'if length(rule_value)>1 then do;'; put 'call symputx(''pgmloc'',rule_value);'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'output;'; put 'stop;'; put 'end;'; put 'else stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)'; put ',mac=&_program'; put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)'; put ')'; put '%macro getdynamiccolvals();'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '%mend getdynamiccolvals;'; put '%getdynamiccolvals()'; put '/* execute the dynamic code */'; put '%mp_include(sascode)'; put '%mp_abort(mode=INCLUDE)'; put '/* ensure that the DISPLAY_INDEX variable exists */'; put 'data work.dynamic_values;'; put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_values;'; put 'display_index=coalesce(display_index,_n_);'; put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;'; put 'run;'; put '/* ensure that work.dynamic_extended_values exists with correct types */'; put 'data work.dynamic_extended_values;'; put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1'; put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_extended_values;'; put 'run;'; put '%webout(OPEN)'; put '%webout(ARR,dynamic_values,fmt=N)'; put '%webout(ARR,dynamic_extended_values,fmt=N)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getlog; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getlog.sas'; put '@brief Downloads the submission, useful if there is an error'; put '@details'; put '

SAS Macros

'; put '@li mf_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '/* security checks */'; put '%let user=%mf_getuser();'; put '%let check_access=0;'; put 'proc sql noprint;'; put 'select count(*) into: check_access from &mpelib..mpe_loads'; put 'where csv_dir="&table" and user_nm="&user";'; put '%mp_abort(iftrue= (&check_access=0 )'; put ',msg=%str(&user not authorised to download audit data for &table)'; put ',mac=mpestp_getlog.sas'; put ')'; put 'ods package(ProdOutput) open nopf;'; put 'options notes source2 mprint;'; put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)'; put 'data _null_;'; put 'set dirs;'; put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');'; put 'retain str1'; put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";'; put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";'; put 'call execute(cats(str1,filename,str2));'; put 'run;'; put '%let archive_path=%sysfunc(pathname(work));'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name= "&table..zip" archive_path="&archive_path");'; put 'ods package(ProdOutput) close;'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&archive_path/&table..zip)'; put ',outname=&table..zip'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getsubmits; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getsubmits.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getxlmaps.sas'; put '@brief Returns a list of rules and other info for a specific xlmap_id'; put '

Service Inputs

'; put '
getxlmaps_in
'; put '|XLMAP_ID|'; put '|---|'; put '|Sample|'; put '

Service Outputs

'; put '
xlmaprules
'; put 'Filtered output of the dc.MPE_XLMAP_RULES table'; put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|'; put '|---|---|---|---|---|'; put '|Sample|Range1|Sheet1|ABSOLUTE A1| |'; put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|'; put '
xlmapinfo
'; put 'Extra info for a map id'; put '|TARGET_DS|'; put '|---|'; put '|DCXXX.MPE_XLMAP_DATA|'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);'; put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;'; put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;'; put '%return;'; put '%end;'; put '/* presence of a period(.) indicates a physical location */'; put '%if %index(&in,.) %then %let in="&in";'; put '%if %index(&out,.) %then %let out="&out";'; put '/**'; put '* convert all cr and crlf within quotes to lf'; put '* convert all other cr or lf to crlf'; put '*/'; put 'data _null_;'; put 'infile &in recfm=n ;'; put 'file &out recfm=n;'; put 'retain isq iscrlf 0 qchar &qchar;'; put 'input inchar $char1. ;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'if isq then do;'; put '/* inside a quote change cr and crlf to lf */'; put 'if inchar=''0D''x then do;'; put 'put ''0A''x;'; put 'input inchar $char1.;'; put 'if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else put inchar $char1.;'; put 'end;'; put 'else do;'; put '/* outside a quote, change cr and lf to crlf */'; put 'if inchar=''0D''x then do;'; put 'crblank:'; put 'put ''0D0A''x;'; put 'input inchar $char1.;'; put 'if inchar=''0D''x then do;'; put '/* multiple CR indicates CR formatted file with blank lines */'; put 'goto crblank;'; put 'end;'; put 'else if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else if inchar=''0A''x then put ''0D0A''x;'; put 'else put inchar $char1.;'; put 'end;'; put 'run;'; put '%mend mp_cleancsv;'; put '/** @endcond */'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file loadfile.sas'; put '@brief Loads a file'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li mp_abort.sas'; put '@li mf_getplatform.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_mkdir.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mpe_getgroups.sas'; put '@li mp_lockfilecheck.sas'; put '@li mpe_loader.sas'; put '@li mp_cleancsv.sas'; put '@li mp_binarycopy.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table dlm;'; put '%mpeinit(fetch=NO)'; put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2'; put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;'; put '%macro load();'; put '%if %mf_getplatform()=SASVIYA %then %do;'; put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;'; put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));'; put '%if "&_webin_fileuri1" ne "" %then %do;'; put '%put &=_webin_fileuri1;'; put 'filename sjfref1 filesrvc "&_webin_fileuri1";'; put '%let _WEBIN_FILEREF1=sjfref1;'; put '%end;'; put '%if "&_webin_fileuri2" ne "" %then %do;'; put '%put &=_webin_fileuri2;'; put 'filename sjfref2 filesrvc "&_webin_fileuri2";'; put '%let _WEBIN_FILEREF2=sjfref2;'; put '%end;'; put '%end;'; put '%mend load;'; put '%load()'; put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));'; put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));'; put '%let abort=0;'; put '/* we do not know if the excel file will be first or second fileref */'; put 'data _null_;'; put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));'; put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));'; put 'if ext1=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME1'');'; put 'csvref=symget(''_WEBIN_FILEREF1'');'; put 'xlsname=symget(''_WEBIN_FILENAME2'');'; put 'xlsref=symget(''_WEBIN_FILEREF2'');'; put 'end;'; put 'else if ext2=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME2'');'; put 'csvref=symget(''_WEBIN_FILEREF2'');'; put 'xlsname=symget(''_WEBIN_FILENAME1'');'; put 'xlsref=symget(''_WEBIN_FILEREF1'');'; put 'end;'; put 'else call symputx(''abort'',1);'; put 'call symputx(''csvname'',csvname);'; put 'call symputx(''csvref'',csvref);'; put 'call symputx(''xlsname'',xlsname);'; put 'call symputx(''xlsref'',coalescec(xlsref,''0''));'; put 'run;'; put '%mp_abort(iftrue= (&abort=1)'; put ',mac=&_program'; put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!'; put '(Comma separated with .csv extension))'; put ')'; put '%let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '%let table=%upcase(%trim(&table));'; put '/* load parameters */'; put 'data _null_;'; put 'libds=upcase(symget(''table''));'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''orig_lib'',scan(libds,1,''.''));'; put 'call symputx(''orig_ds'',scan(libds,2,''.''));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '/* check that the user has the requisite access */'; put '%mpe_getgroups(user=&user,outds=groups)'; put 'proc sql;'; put 'create table accesscheck as'; put 'select * from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select sas_group from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="EDIT"'; put 'and ('; put '(libref="&orig_lib" and dsn="&orig_ds")'; put 'or (libref="&orig_lib" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="&orig_ds")'; put '));'; put '%let nobs=;'; put 'select count(*) into: nobs from &syslast;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)'; put ')'; put '%dc_assignlib(WRITE,&orig_lib)'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=loadfile'; put ',msg=%str(Issue assigning library &orig_lib)'; put ')'; put '%global txfrom txto processed rk;'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where libref="&orig_lib" and dsn="&orig_ds";'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'call symputx(''processed'',var_processed);'; put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);'; put 'run;'; put '%mp_lockfilecheck(libds=&orig_libds)'; put 'data compare;'; put 'set &libds(drop=&txfrom &txto &processed &rk);'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 80)'; put ')'; put '/* get line terminator, assume it''s the first cr, lf, or crlf */'; put 'data _null_;'; put 'length text $32767 term $4;'; put 'call missing (of _all_);'; put 'fid=fopen("&csvref",''I'',32767,''b'');'; put 'rc=fread(fid);'; put 'rc2=fget(fid,text,32767);'; put 'cr=find(text,''0D''x );'; put 'lf=find(text,''0A''x );'; put 'crlf=find(text,''0D0A''x);'; put 'rc=fclose(fid);'; put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';'; put 'else term=''CR'';'; put 'call symputx(''termstr'',term);'; put 'run;'; put 'data _null_;'; put 'infile &csvref lrecl=32000 dsd termstr=&termstr;'; put 'input;'; put 'length incols_unsorted $32000 dlm $1;'; put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');'; put '/* dlm has length 1 so will be the first non alpha / digit char */'; put '/* expectation is that there will not be any crazy characters in first col! */'; put 'dlm=compress(incols_unsorted,''_ '',''ad'');'; put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');'; put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');'; put 'call symputx(''incols_unsorted'',incols_unsorted);'; put 'call symputx(''dlm'',dlm);'; put 'putlog incols_unsorted=;'; put 'putlog dlm=;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 99)'; put ')'; put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));'; put '%let missing_cols=%trim('; put '%mf_wordsInStr1ButNotStr2('; put 'Str1=&basecols'; put ',Str2=&incols_unsorted'; put '));'; put '%let msg='; put 'Expected cols: &basecols'; put '
Received cols: &incols_unsorted'; put '
Missing cols: &missing_cols'; put ';'; put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%superq(msg)'; put ')'; put '%let msg=0;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder and redirect the log */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* clean embedded line breaks and force CRLF line endings */'; put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue in mp_cleancsv)'; put ')'; put '%put; %put; %put log is being redirected;'; put '%let url=_program=%substr(&_program'; put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%put &url;'; put '%put;'; put '/* proc printto log="&dir/weblog.txt";run; */'; put 'libname approve "&dir";'; put 'options mprint;'; put '%put &=mperef;'; put '%put &=termstr;'; put '%put &=dlm;'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%quote(File upload: %superq(csvname))'; put ',dlm=%superq(dlm)'; put ',url=%superq(url)'; put ',termstr=CRLF'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename outref "&dir/BKP_&xlsname";'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc when backing up source file &xlsname)'; put ')'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=restore; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '/* check if there is actually a version to restore */'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &dc_libref..mpe_audit'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No entry for &load_ref in MPE_AUDIT;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let allow_restore=YES;'; put '%let reason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%local libds;'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let allow_restore=YES;'; put '%let reason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '/** @cond */'; put '%macro mp_stripdiffs(libds'; put ',loadref'; put ',difftable'; put ',filtervar=0'; put ',outds=work.mp_stripdiffs'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%let libds=%upcase(&libds);'; put '/* safety checks */'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)'; put ')'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid library.dataset reference - %superq(libds))'; put ')'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;'; put '%let fref1=%mf_getuniquefileref();'; put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);'; put '%else %let filterstr=%str(1=1);'; put '/* get timestamp of the diff to be reverted */'; put '%local ts;'; put 'proc sql noprint;'; put 'select put(processed_dttm,datetime19.6) into: ts'; put 'from &difftable where load_ref="&loadref";'; put '%mp_abort(iftrue= (&sqlobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Load ref %superq(loadref) not found!)'; put ')'; put '/* extract diffs for this base table from this timestamp onwards */'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));'; put 'create table &ds1 (drop=libref dsn) as'; put 'select * from &difftable'; put 'where upcase(cats(libref))="%scan(&libds,1,.)"'; put 'and upcase(cats(dsn))="%scan(&libds,2,.)"'; put 'and processed_dttm ge "&ts"dt'; put 'order by processed_dttm desc, key_hash, is_pk;'; put '/* extract key values only */'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));'; put '%local keyhash processed;'; put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));'; put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));'; put 'create table &ds2 as'; put 'select key_hash as &keyhash,'; put 'tgtvar_nm,'; put 'tgtvar_type,'; put 'coalescec(oldval_char,newval_char) as charval,'; put 'coalesce(oldval_num, newval_num) as numval,'; put 'processed_dttm as &processed'; put 'from &ds1'; put 'where is_pk=1'; put 'order by &keyhash, &processed;'; put '/* grab pk values */'; put '%local pk;'; put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))'; put 'out=&ds3(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var charval;'; put 'run;'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))'; put 'out=&ds4(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var numval;'; put 'run;'; put '/* shorten the lengths */'; put '%mp_ds2squeeze(&ds3,outds=&ds3)'; put '%mp_ds2squeeze(&ds4,outds=&ds4)'; put '/* now merge to get all key values and de-dup */'; put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));'; put 'data &ds5;'; put 'length &keyhash $32 &processed 8;'; put 'merge &ds3 &ds4;'; put 'by &keyhash &processed;'; put 'if not missing(&keyhash);'; put 'run;'; put 'proc sort data=&ds5 nodupkey;'; put 'by &pk;'; put 'run;'; put '/* join to base table for preliminary stage DS */'; put 'proc sql;'; put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put ',a.%scan(&pk,&x,%str( ))'; put '%end;'; put '%local notpkcols;'; put '%let notpkcols=%upcase(%mf_getvarlist(&libds));'; put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);'; put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));'; put ',b.%scan(¬pkcols,&x,%str( ))'; put '%end;'; put 'from &ds5 a'; put 'left join &libds (where=(&filterstr)) b'; put 'on 1=1'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))'; put '%end;'; put ';'; put '/* create SAS code to apply to stage_ds */'; put 'data _null_;'; put 'set &ds1;'; put 'file &fref1 lrecl=33000;'; put 'length charval $32767;'; put 'if _n_=1 then put ''proc sql noprint;'';'; put 'by descending processed_dttm key_hash is_pk;'; put 'if move_type=''M'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'if not last.is_pk then put '','';'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'else if move_type=''A'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;'; put 'end;'; put '/* gating if - as only need PK now */'; put 'if is_pk=1;'; put 'put '' AND '' tgtvar_nm ''='' @@;'; put 'cnt=count(newval_char,''"'');'; put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put newval_num @@;'; put 'end;'; put 'else if move_type=''D'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " ," tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'if last.key_hash then put '';'';'; put 'run;'; put '/* apply the modification statements */'; put '%inc &fref1/source2 lrecl=33000;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;'; put 'file &fref1 clear;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'infile &fref1;'; put 'input;'; put 'if _n_=1 then putlog "Contents of SQL adjustments";'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_stripdiffs;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file restore.sas'; put '@brief Restores a data version'; put '@details Only applies if the history is stored in the audit table'; put '

SAS Macros

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

Service Inputs

'; put '
restore_in
'; put '|LOAD_REF:$32|'; put '|---|'; put '|DCXXXXXX|'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let loadref=;'; put 'data _null_;'; put 'set work.restore_in;'; put 'call symputx(''loadref'',load_ref);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)'; put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)'; put ',mac=&_program..sas'; put ',msg=%str(Cannot restore because: &reason)'; put ')'; put '/* grab the base DS */'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: tgtds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&loadref";'; put '/* find the audit table */'; put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto'; put 'into: difftable, :loadtype, :txto'; put 'from &mpelib..MPE_TABLES'; put 'where libref="%scan(&tgtds,1,.)"'; put '& dsn="%scan(&tgtds,2,.)"'; put '& &dc_dttmtfmt0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after stripdiffs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)'; put ',mac=&_program..sas'; put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)'; put ')'; put '/* create a new load ref */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put '/* copy the diffs dataset */'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);'; put 'set work.mp_stripdiffs;'; put 'run;'; put '/* export to csv */'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/%trim(&tgtds).csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=Restoring &loadref'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data work.restore_out;'; put 'loadref="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,restore_out)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=stagedata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sends a changeset to staging area'; put '@details This is the service that is called when submitting a new edit.'; put '

Service Inputs

'; put '
jsdata
'; put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column'; put '
SASControlTable
'; put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|'; put '|---|---|---|'; put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li dc_assignlib.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_mkdir.sas'; put '@li mf_getuniquefileref.sas'; put '@li mpe_loader.sas'; put '@li mpe_filtermaster.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_ds2csv.sas'; put '@li mf_getplatform.sas'; put '@li removecolsfromwork.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global approver; %let approver=;'; put '%global libref; %let libref=;'; put '%global dsn; %let dsn=;'; put '%global user; %let user=;'; put '%let user=%mf_getuser();'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''action'',action);'; put 'call symputx(''message'',message);'; put 'libds=upcase(libds);'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further jquery calls will return col metadata and'; put 'actual data */'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc - unable to assign library &libref)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals libds)'; put ')'; put '%put Verify that the upload does not violate Row Level Security checks:;'; put '%mpe_filtermaster(ULOAD,&libds,'; put 'dclib=&mpelib,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during filtering process)'; put ')'; put '/* prepare inverse query */'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'file &tempref;'; put 'if _n_=1 then put ''where not('';'; put 'input;'; put 'put _infile_;'; put 'if eof then put '')'';'; put 'run;'; put '/* apply the query */'; put 'data work.badrecords;'; put 'set work.jsdata;'; put '%inc &tempref/source2;;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)'; put ',mac=&_program'; put ',msg=%str('; put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted'; put ')'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/**'; put '* Create package folder and redirect the log'; put '*/'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* get web url */'; put '%global url;'; put '%let url=localhost/SASStoredProcess;'; put '%let platform=%mf_getplatform();'; put '%put &=platform;'; put 'data _null_;'; put 'length url $128;'; put '%macro stagedata();'; put '%if &platform=SASVIYA %then %do;'; put 'if symexist(''_baseurl'') then do;'; put 'url=symget(''_baseurl'');'; put 'if subpad(url,length(url)-9,9)=''SASStudio'''; put 'then url=substr(url,1,length(url)-11);'; put 'else url="&systcpiphostname/SASJobExecution";'; put 'end;'; put 'else url="&systcpiphostname/SASJobExecution";'; put '%end;'; put '%else %if &platform=SASMETA %then %do;'; put 'rc=METADATA_GETURI("Stored Process Web App",url);'; put '%end;'; put '%mend stagedata;'; put '%stagedata()'; put 'call symputx(''url'',url);'; put 'putlog url=;'; put 'run;'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* redirect the log */'; put '%put; %put; %put log is being redirected;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%let url=&url?_program=%substr(&_program'; put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;'; put '%put &url;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to log redirection)'; put ')'; put 'proc printto log="&dir/weblog.txt";run;'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of webin file */'; put 'data _null_;'; put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');'; put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */'; put 'else ref=''indata1'';'; put 'call symputx(''ref'',ref);'; put 'putlog ref=;'; put 'run;'; put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'set jsdata;'; put 'run;'; put '/**'; put '* mf_getvarXXX functions will fail if the target is locked - so take a copy'; put '* and reference that (this will also explicitly throw the lock situation)'; put '*/'; put '%let dscopy=work.dscopy;'; put 'data &dscopy;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue getting lock on &libds)'; put ')'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/&orig_libds..csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%superq(message)'; put ',approver=%quote(%trim(&approver))'; put ',url=%superq(url)'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'url="&url";'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/hooks; %let service=mpe_column_level_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming column_level_security settings to ensure'; put 'each individual filter is valid'; put '**/'; put '/* check scope values and ensure uppercasing */'; put '%let errflag=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'cls_scope=upcase(cls_scope);'; put 'CLS_LIBREF=upcase(CLS_LIBREF);'; put 'cls_table=upcase(CLS_TABLE);'; put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);'; put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;'; put 'call symputx(''errflag'',1);'; put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);'; put 'stop;'; put 'end;'; put 'if cls_hide<1 then cls_hide=0;'; put 'else cls_hide=1;'; put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;'; put 'else CLS_ACTIVE=1;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_column_level_security_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_row_level_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming row_level_security settings to ensure'; put 'each individual filter is'; put '

SAS Macros

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

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/* ignore scope and group for validation */'; put 'proc sql;'; put 'create table work.batches as'; put 'select distinct upcase(rls_libref) as rls_libref,'; put 'upcase(rls_table) as rls_table,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from work.staging_ds'; put 'where rls_active=1'; put 'order by rls_libref, rls_table;'; put '%let cnt=0;'; put 'data _null_;'; put 'set work.batches;'; put 'by rls_libref rls_table;'; put 'putlog (_all_)(=);'; put 'if last.rls_table then do;'; put 'x+1;'; put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));'; put 'call symputx(''cnt'',x);'; put 'end;'; put 'run;'; put '%macro quickloop();'; put '%do i=1 %to &cnt;'; put 'data work.inds&i;'; put 'set work.batches;'; put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";'; put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm'; put 'raw_value;'; put 'run;'; put '%dc_assignlib(READ,%scan(&&libds&i,1,.))'; put '%mp_filtercheck(work.inds&i'; put ',targetds=&&libds&i'; put ',outds=work.badrecords'; put ',abort=YES'; put ')'; put '%end;'; put '%mend quickloop;'; put '%quickloop()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_SECURITY table'; put '@details Post edit hooks provide additional backend validation against'; put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this'; put 'file is included from the mpe_loader.sas macro.'; put 'Available (at runtime) macro variables:'; put '@li DC_LIBREF - The DC control library for your site'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put '/* ensure upcase and check access level values*/'; put '%let errval=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);'; put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;'; put 'call symputx(''errval'',1);'; put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errval=1)'; put ',mac=mpe_security_postedit.sas'; put ',msg=%str(&errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_tables_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_TABLES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks MPE_TABLES to ensure modified / added records are'; put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check'; put 'to ensure that this table already exists.'; put '**/'; put '%let errmsg=;'; put '%let errflag=0;'; put '/* ensure uppercasing */'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* PK fields should not be upcased if we are trying to delete records */'; put 'if upcase(_____DELETE__THIS__RECORD_____) ne "YES" then do;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'end;'; put 'loadtype=upcase(loadtype);'; put 'buskey=upcase(buskey);'; put 'var_txfrom=upcase(var_txfrom);'; put 'var_txto=upcase(var_txto);'; put 'var_busfrom=upcase(var_busfrom);'; put 'var_busto=upcase(var_busto);'; put 'var_processed=upcase(var_processed);'; put 'close_vars=upcase(close_vars);'; put 'audit_libds=upcase(audit_libds);'; put 'rk_underlying=upcase(rk_underlying);'; put '/* check for valid loadtype */'; put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);'; put 'call symputx(''errflag'',1);'; put 'end;'; put '/* force correct BUSKEY and DSN when loading format catalogs */'; put 'if LOADTYPE=''FORMAT_CAT'' then do;'; put 'BUSKEY=''TYPE FMTNAME FMTROW'';'; put 'DSN=scan(dsn,1,''-'')!!''-FC'';'; put 'end;'; put '/* convert tabs into spaces */'; put 'buskey=translate(buskey," ","09"x);'; put 'rk_underlying=translate(rk_underlying," ","09"x);'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '/* get distinct list of audit libs */'; put 'proc sql;'; put 'create table work.liblist as'; put 'select distinct audit_libds'; put 'from work.staging_ds'; put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put '/* assign the libs */'; put 'data _null_;'; put 'set work.liblist;'; put 'call symputx(cats(''lib'',_n_),audit_libds);'; put 'libref=scan(audit_libds,1,''.'');'; put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');'; put 'run;'; put '/* check the audit tables exist */'; put 'data _null_;'; put 'set work.liblist;'; put 'if exist(audit_libds,"DATA")=0 then do;'; put 'call symputx(''errmsg'','; put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."'; put ');'; put 'call symputx(''errflag'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_validations_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_VALIDATIONS table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming mpe_validations settings to ensure'; put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.'; put '

SAS Macros

'; put '@li mf_nobs.sas'; put '

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */'; put '/* need to merge with base table in the case of a single row being added */'; put '%global src_list1 src_list2;'; put '%let src_list1='''';'; put 'proc sql noprint;'; put 'create table work.check1 as'; put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source'; put ',rule_type'; put 'from work.staging_ds'; put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put 'select distinct cats(source) into: src_list1 separated by '','''; put 'from work.check1;'; put 'create table work.check2 as'; put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source'; put ',rule_type'; put 'from &DC_LIBREF..MPE_VALIDATIONS'; put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')'; put 'and &dc_dttmtfmt. lt tx_to'; put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);'; put 'create table work.check3 as'; put 'select * from work.check1'; put 'union'; put 'select * from work.check2;'; put 'create table work.validation_checker as'; put 'select source'; put ',count(*) as cnt'; put 'from work.check3'; put 'group by 1'; put 'having cnt>1;'; put 'select distinct source into: src_list2 from work.validation_checker;'; put 'data _null_;'; put 'set work.validation_checker;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)'; put ',mac=mpe_validations_postedit'; put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_info_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvarlist.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mp_validatecol.sas'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* apply the first excel map to all cells */'; put 'length tgtds $41;'; put 'retain tgtds;'; put 'drop tgtds is_libds;'; put 'if _n_=1 then do;'; put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";'; put 'else tgtds=upcase(XLMAP_TARGETLIBDS);'; put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)'; put 'call symputx(''tgtds'',tgtds);'; put 'call symputx(''is_libds'',is_libds);'; put 'end;'; put 'XLMAP_TARGETLIBDS=tgtds;'; put 'run;'; put '%mp_abort(iftrue=(&is_libds ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Invalid target dataset (&tgtds)'; put ')'; put '/**'; put '* make sure that the supplied target dataset exists and'; put '* has the necessary columns'; put '*/'; put '%dc_assignlib(READ,%scan(&tgtds,1,.))'; put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Target dataset (&tgtds) could not be opened'; put ')'; put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));'; put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));'; put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);'; put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);'; put '%mp_abort(iftrue=(%length(&badvars1.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)'; put ')'; put '%mp_abort(iftrue=(%length(&badvars2.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_rules_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li LOAD_REF - The Load Reference (unique upload id)'; put '@li ORIG_LIBDS - The target library.dataset that was just loaded'; put '**/'; put 'data _null_;'; put 'set work.staging_ds;'; put 'putlog ''load ref is in the staged data: '' load_ref;'; put 'stop;'; put 'run;'; put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The target dataset being loaded'; put '**/'; put '%let abort=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'length errmsg $1000;'; put 'drop err:;'; put '/* KM1 validations */'; put 'if XLMAP_ID=''BASEL-KM1'' then do;'; put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;'; put 'errmsg=''Should be greater than 100'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* CR2 Validations */'; put 'if XLMAP_ID=''BASEL-CR2'' then do;'; put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;'; put 'errmsg=''Should be negative'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* publish error message */'; put 'if err=1 then do;'; put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);'; put 'call symputx(''errmsg'',errmsg);'; put 'call symputx(''abort'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&abort ne 0)'; put ',mac=xlmap_data_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put 'bazaar,#98777b'; put 'beaver,#9f8170'; put 'bisque,#ffe4c4'; put 'blond,#faf0be'; put 'blush,#de5d83'; put 'bole,#79443b'; put 'bone,#e3dac9'; put 'brass,#b5a642'; put 'bronze,#cd7f32'; put 'bubbles,#e7feff'; put 'buff,#f0dc82'; put 'camel,#c19a6b'; put 'canary,#ffff99'; put 'capri,#00bfff'; put 'cardinal,#c41e3a'; put 'carmine,#ff0040'; put 'celadon,#ace1af'; put 'celeste,#b2ffff'; put 'cerise,#de3163'; put 'cerulean,#007ba7'; put 'cherry,#de3163'; put 'chestnut,#cd5c5c'; put 'cinnabar,#e34234'; put 'cinnamon,#d2691e'; put 'citrine,#e4d00a'; put 'cobalt,#0047ab'; put 'coffee,#6f4e37'; put 'copper,#b87333'; put 'coral,#ff7f50'; put 'corn,#fbec5d'; put 'cornsilk,#fff8dc'; put 'cream,#fffdd0'; put 'crimson,#dc143c'; put 'daffodil,#ffff31'; put 'denim,#1560bd'; put 'desert,#c19a6b'; put 'drab,#967117'; put 'ecru,#c2b280'; put 'eggplant,#614051'; put 'eggshell,#f0ead6'; put 'emerald,#50c878'; put 'fallow,#c19a6b'; put 'fawn,#e5aa70'; put 'fern,#71bc78'; put 'flame,#e25822'; put 'flax,#eedc82'; put 'folly,#ff004f'; put 'fuchsia,#ff00ff'; put 'fulvous,#e48400'; put 'gamboge,#e49b0f'; put 'ginger,#b06500'; put 'glaucous,#6082b6'; put 'glitter,#e6e8fa'; put 'gold,#ffd700'; put 'grullo,#a99a86'; put 'icterine,#fcf75e'; put 'indigo,#4b0082'; put 'iris,#5a4fcf'; put 'ivory,#fffff0'; put 'jade,#00a86b'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions='; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '/* check if there is actually a version to restore */'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &dc_libref..mpe_audit'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No entry for &load_ref in MPE_AUDIT;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let allow_restore=YES;'; put '%let reason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%local libds;'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let allow_restore=YES;'; put '%let reason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getchangeinfo.sas'; put '@brief Returns the details for an approval diff'; put '@details'; put '

SAS Macros

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

Service Inputs

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

Service Outputs

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

Data Inputs

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getcols.sas'; put '@brief Retrieves column info to enable population of dropdowns'; put '@details'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Retrieves column info to enable population of dropdowns'; put '@details An optional filterquery may be provided, if so then it is validated'; put 'and then used to filter the subsequent results.'; put '

Service Inputs

'; put '
IWANT
'; put 'The STARTROW and ROWS variables are used to fetch additional values beyond'; put 'the initial default (4000).'; put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|'; put '|---|---|---|---|'; put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000'; put '
FILTERQUERY
'; put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|'; put '|---|---|---|---|---|---|'; put '|AND|AND|1|SOME_BESTNUM|>|1|'; put '|AND|AND|1|SOME_TIME|=|77333|'; put '

Service Outputs

'; put '
VALS
'; put 'The type of this column actually depends on the underlying column type, so it can change'; put '|FORMATTED|UNFORMATTED|'; put '|---|---|'; put '|$44.00|44|'; put '
META
'; put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|'; put '|---|---|---|---|'; put '|COL_NAME|DOLLAR8.2|4001|1000'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvalue.sas'; put '@li mf_verifymacvars.sas'; put '@li dc_assignlib.sas'; put '@li mf_getvarformat.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_filtercheck.sas'; put '@li mp_filtergenerate.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd.'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* input table may or may not exist */'; put 'data work.initvars;'; put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $32767;'; put 'call missing(of _all_);'; put 'stop;'; put 'data work.filterquery;'; put 'set %sysfunc(ifc('; put '%mf_existds(work.filterquery)=1'; put ',work.filterquery'; put ',work.initvars'; put '));'; put 'run;'; put '/* print data for debugging */'; put 'data _null_;'; put 'set work.iwant;'; put 'put (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set work.filterquery;'; put 'put (_all_)(=);'; put 'run;'; put '%let libds=%mf_getvalue(work.iwant,libds);'; put '%let col2=%mf_getvalue(work.iwant,col);'; put '%let is_fmt=0;'; put '%let startrow=1;'; put '%let rows=4000;'; put '%put &=libds;'; put '%put &=col2;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )'; put ')'; put '%dc_assignlib(WRITE,%scan(&libds,1,.))'; put 'data _null_;'; put 'call missing(startrow,rows);'; put 'set work.iwant;'; put '/* check if the request is for a format catalog */'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''startrow'',coalesce(startrow,&startrow));'; put 'call symputx(''rows'',coalesce(rows,&rows));'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/**'; put '* Validate the filter query'; put '*/'; put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)'; put '/**'; put '* Prepare the query'; put '*/'; put '%mp_filtergenerate(work.filterquery,outref=myfilter)'; put '/* cannot %inc in a sql where clause, only data step, so - use a view */'; put 'data work.vw_vals/view=work.vw_vals;'; put 'set &libds;'; put 'where %inc myfilter;;'; put 'run;'; put 'proc sql;'; put 'create view work.vw_vals_sorted as'; put 'select distinct'; put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,'; put '&col2 as unformatted'; put 'from work.vw_vals;'; put '/* restrict num of output values */'; put 'data work.vals;'; put 'set work.vw_vals_sorted;'; put 'if _n_ ge &startrow;'; put 'x+1;'; put 'if x>&rows then stop;'; put 'drop x;'; put 'run;'; put 'data vals;'; put '/* ensure empty value if table is empty, for dropdowns */'; put 'if nobs=0 then output;'; put 'set vals nobs=nobs;'; put 'format unformatted ;'; put 'output;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.vw_vals_sorted;'; put 'data meta;'; put 'column="&col2";'; put 'sasformat="%mf_getVarFormat(&libds,&col2)";'; put 'startrow=&startrow;'; put 'rows=&rows;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,vals,missing=STRING,showmeta=YES)'; put '%webout(OBJ,meta)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getddl; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Download DDL for a table or entire library in a particular flavour.'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mp_abort.sas'; put '@li mp_getddl.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref ds flavour;'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '%mpeinit()'; put '%dc_assignlib(READ,&libref)'; put 'data _null_;'; put '/* check if the request is for a format catalog */'; put 'ds=symget(''ds'');'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'libds=cats(symget(''libref''),''.'',ds);'; put 'putlog "Format Catalog Captured";'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'call symputx(''libref'',''work'');'; put 'call symputx(''ds'',''fmtextract'');'; put 'end;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)'; put ',mac=&_program'; put ',msg=%str(Dataset &libref..&ds was not found)'; put ')'; put '%let tmploc=%sysfunc(pathname(work))/temp.txt;'; put 'filename tmp "&tmploc";'; put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)'; put '%mp_streamfile(contenttype=TEXT'; put ',inloc=%str(&tmploc)'; put ',outname=&libref._&ds..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getgroups; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; put 'by groupname;'; put 'run;'; put '%mend dc_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getgroups.sas'; put '@brief List all SAS Groups'; put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it'; put 'can be available to the sasjs/server configurator'; put '

SAS Macros

'; put '@li dc_getgroups.sas'; put '

Data Outputs

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Downloads data in a variety of formats'; put '@details To enable direct download, this service runs in a dedicated stream'; put 'as a GET request using URL parameters as inputs.'; put 'The inputs are:'; put '@li table - the libds of the table to be downloaded'; put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB'; put '@li filter - the filter RK if used'; put '

SAS Macros

'; put '@li mf_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mf_existfeature.sas'; put '@li dc_assignlib.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_streamfile.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table type filter ds format is_fmt txfrom txto;'; put '%mpeinit()'; put '%let user=%mf_getuser();'; put '%let is_fmt=0;'; put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid inputs: type table)'; put ')'; put '%let libds=%upcase(&table); /* actual source */'; put '%let table=%upcase(&table); /* used as label for fmt catalogs */'; put '%let lib=%scan(&table,1,.);'; put '%let ds=%scan(&table,2,.);'; put '%dc_assignlib(READ,&lib)'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";'; put '/* if a TXTEMPORAL table then filter as such */'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'run;'; put '/* if a format, extract relevant info */'; put 'data _null_;'; put 'ds=symget(''ds'');'; put 'is_fmt=0;'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'table=cats("&lib..",ds);'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'call symputx(''table'',table);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&table'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%put preparing query;'; put '%mpe_filtermaster(DLOAD,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put 'options obs=200000;/* stop limit */'; put 'data staged(drop=&txfrom &txto);'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'options obs=max;'; put 'options validvarname=upcase;'; put '%macro mpestp_getrawdata();'; put '%local outfile;'; put '%if &type=SAS %then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..sas;'; put '%mp_ds2cards(base_ds=staged'; put ', tgt_ds=&table'; put ', cards_file= "&outfile"'; put ', maxobs=100000)'; put '%let ext=sas;'; put '%let mimetype=text;'; put '%end;'; put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)'; put '/* cannot proc export excel if PC Files is not licensed */'; put '%then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..csv;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '%let ext=csv;'; put '%let mimetype=csv;'; put '%end;'; put '%else %if &type=EXCEL %then %do;'; put '%let ext=xlsx;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=xlsx ;'; put 'RUN;'; put '%let mimetype=XLSX;'; put '%end;'; put '%else %if &type=MARKDOWN %then %do;'; put '%let ext=md;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'filename mdref "&outfile" lrecl=32767;'; put '%mp_ds2md(staged,outref=mdref,showlog=NO)'; put '%let mimetype=MARKDOWN;'; put '%end;'; put '%else %if &type=WEBCSV %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %if &type=WEBTAB %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=tab REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %do;'; put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_streamfile(contenttype=&mimetype'; put ',inloc=%str(&outfile)'; put ',outname=&table..&ext'; put ')'; put '%mend mpestp_getrawdata;'; put '%mpestp_getrawdata()'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getversion; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getversion.sas'; put '@brief get a specific (previous) version of a particular table'; put '@details Used to fetch a version of a table as at a previous point in time'; put 'Delivered as part of this issue: https://git.datacontroller.io/dc/dc/issues/84'; put '

Service Inputs

'; put '
getversion_input
'; put '|LIBREF:$char8.|DS:$char32.|TS: 8.|'; put '|---|---|---|'; put '|SOMELIB|SOMEDS|1341344.804|'; put '

Service Outputs

'; put '
work.getversion_output
'; put 'The data for a particular version'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.libs as'; put 'select libref from work.sumcat'; put 'union'; put 'select libref from work.sumdsn;'; put 'create table work.statuslibs as'; put 'select a.libref,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'c.catalog_cnt'; put 'from work.libs a'; put 'left join work.sumdsn b'; put 'on a.libref=b.libref'; put 'left join work.sumcat c'; put 'on a.libref=c.libref;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshlibinfo.sas'; put '@brief Refresh the Data Catalog for a particular library'; put '@details When showing library info in the VIEW menu, the data is taken from'; put 'the Data Catalog tables. These may be empty or outdated, and so this service'; put 'allows end users to run a refresh of the data.'; put '

Service Inputs

'; put '
lib2refresh
'; put 'Should contain the libref to be refreshed.'; put '|libref:$8.|'; put '|---|'; put '|SOMELIB|'; put '

Service Outputs

'; put '
libinfo
'; put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |'; put '|---|---|---|---|---|---|---|---|---|'; put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_refreshcatalog.sas'; put '@li mp_abort.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%webout(FETCH)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem on startup)'; put ')'; put '%let libref=;'; put 'data _null_;'; put 'set work.lib2refresh;'; put 'call symputx(''libref'',libref);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc after lib assignment)'; put ')'; put '%dc_refreshcatalog(&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)'; put ')'; put '/* get libinfo */'; put 'proc sql;'; put 'create table work.libinfo as'; put 'select a.engine,'; put 'a.libname,'; put 'a.paths,'; put 'a.perms,'; put 'a.owners,'; put 'a.schemas,'; put 'a.libid,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'b.catalog_cnt'; put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.libref=b.libref'; put 'where a.libref="&libref";'; put '%webout(OPEN)'; put '%webout(OBJ,libinfo)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=registeruser; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file registeruser.sas'; put '@brief Registers a new user in Data Controller'; put '@details New users are logged after accepting EULA terms.'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file startupservice.sas'; put '@brief List the libraries and tables the mp-editor user can access'; put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)'; put 'then they have access to all libraries / tables. Otherwise a join is made'; put 'to the &mpelib..mpe_security table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue on startup in startupService)'; put ')'; put '%let userid=%mf_getuser();'; put '%put userid is &userid;'; put '%mpe_getgroups(user=&userid,outds=groups)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)'; put ')'; put '/* check if user is an admin */'; put '%let admin_check=0;'; put 'proc sql noprint;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins";'; put '/* check if user is registered or not */'; put '%let isRegistered=0;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '/* get number of registered users */'; put '%let registerCount=0;'; put 'select count(*) into: registercount'; put 'from &mpelib..mpe_users'; put 'where last_seen_dt>%sysfunc(today())-365;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem accessing &mpelib..mpe_users table)'; put ')'; put '%global dc_restrict_editrecord;'; put 'data work.globvars;'; put 'dclib="&mpelib";'; put 'sas9lineage_enabled=1;'; put 'isadmin=&admin_check;'; put 'isregistered=&isregistered;'; put 'registercount=®isterCount;'; put 'dc_admin_group="&mpeadmins";'; put '/* fetched from mpe_config in dc_getsettings */'; put 'licence_key="&dc_licence_key";'; put 'activation_key="&dc_activation_key";'; put 'dc_restrict_editrecord="&dc_restrict_editrecord";'; put 'run;'; put '%macro mstp_mpeditorstartup();'; put 'data _null_;'; put 'putlog "entering &sysmacroname";'; put 'run;'; put 'proc sql noprint;'; put '/* update last seen, if seen */'; put '%if &isregistered>0 %then %do;'; put 'update &mpelib..mpe_users'; put 'set last_seen_dt=%sysfunc(today())'; put 'where user_id="&userid";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem updating &mpelib..mpe_users table)'; put ')'; put '%local all_cnt;'; put 'select count(*) into: all_cnt'; put 'from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and ACCESS_LEVEL in (''EDIT'')'; put 'and libref=''*ALL*'''; put 'and SAS_GROUP in (select groupname from groups);'; put '%if &admin_check >0 or &all_cnt>0 %then %do;'; put 'create table sasDatasets as'; put 'select distinct libref, dsn'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'order by 1;'; put '%end;'; put '%else %do;'; put 'create table sasDatasets as'; put 'select distinct a.libref,a.dsn'; put 'from &mpelib..mpe_tables a'; put 'left join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn'; put 'where &dc_dttmtfmt. lt a.tx_to'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL in (''EDIT'')'; put 'and b.SAS_GROUP in (select groupname from groups)'; put 'order by 1;'; put '%end;'; put '%mend mstp_mpeditorstartup;'; put '%mstp_mpeditorstartup()'; put 'create table saslibs as'; put 'select distinct libref'; put 'from &syslast;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue with security validation)'; put ')'; put 'proc sql;'; put 'create table work.xlmaps as'; put 'select distinct a.XLMAP_ID'; put ',b.XLMAP_DESCRIPTION'; put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")'; put 'as XLMAP_TARGETLIBDS'; put 'from &mpelib..MPE_XLMAP_RULES a'; put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.XLMAP_ID=b.XLMAP_ID'; put 'where &dc_dttmtfmt. lt a.tx_to;'; put '/* we don''t want the XLMAP target datasets to be directly editable */'; put 'delete from sasdatasets'; put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);'; put '%webout(OPEN)'; put '%webout(OBJ,sasDatasets)'; put '%webout(OBJ,saslibs)'; put '%webout(OBJ,globvars)'; put '%webout(ARR,xlmaps)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=validatefilter; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_hashdataset('; put 'libds,'; put 'outds=work._data_,'; put 'salt=,'; put 'iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local keyvar /* roll up the md5 */'; put 'prevkeyvar /* retain prev record md5 */'; put 'lastvar /* last var in input ds */'; put 'cvars nvars;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '/* avoid naming conflict for hash key vars */'; put '%let keyvar=%mf_getuniquename();'; put '%let prevkeyvar=%mf_getuniquename();'; put '%let lastvar=%mf_getuniquename();'; put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;'; put 'data &outds;'; put 'length hashkey $32;'; put 'hashkey=put(md5("&salt"),$hex32.);'; put 'output;'; put 'stop;'; put 'run;'; put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;'; put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;'; put '%end;'; put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;'; put '%put %str(ERR)OR: Dataset &libds is not a dataset;'; put '%end;'; put '%else %do;'; put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'length &prevkeyvar &keyvar $32;'; put 'retain &prevkeyvar;'; put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);'; put 'set &libds end=&lastvar;'; put '/* hash should include previous row */'; put '&keyvar=%mp_md5('; put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,'; put 'nvars=%mf_getvarlist(&libds,typefilter=N)'; put ');'; put '&prevkeyvar=&keyvar;'; put 'if &lastvar then output;'; put 'run;'; put '%end;'; put '%mend mp_hashdataset;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '%macro mp_filterstore(libds=,'; put 'queryds=work.filterquery,'; put 'filter_summary=PERM.FILTER_SUMMARY,'; put 'filter_detail=PERM.FILTER_DETAIL,'; put 'lock_table=PERM.LOCK_TABLE,'; put 'maxkeytable=PERM.MAXKEYTABLE,'; put 'outresult=work.result,'; put 'outquery=work.query,'; put 'mdebug=1'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;'; put '%let libds=%upcase(&libds);'; put '%let orig_libds=&libds;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro entry)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_summary value: &filter_summary)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_detail value: &filter_detail)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid lock_table value: &lock_table)'; put ')'; put '/**'; put '* validate query'; put '* use format catalog export, if a format'; put '*/'; put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;'; put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */'; put '%let ds0=%mf_getuniquename(prefix=fmtds_);'; put '%let libds=&ds0;'; put '/*'; put 'There is no need to export the entire format catalog here - the validations'; put 'are done against the data model, not the data values. So we can simply'; put 'hardcode the structure based on the cntlout dataset.'; put '*/'; put '%mddl_sas_cntlout(libds=&ds0)'; put '%end;'; put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)'; put '/* hash the result */'; put '%let ds1=%mf_getuniquename(prefix=hashds);'; put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)'; put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'putlog "filter_hash=&filter_hash";'; put 'set &ds1;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '/* check if data already exists for this hash */'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc after hash check)'; put ')'; put '%mp_abort(iftrue= ("&filter_hash "=" ")'; put ',mac=mp_filterstore'; put ',msg=%str(problem with filter_hash generation)'; put ')'; put '%if %mf_nobs(&outresult)=0 %then %do;'; put '/* first update summary table */'; put '%let ds3=%mf_getuniquename(prefix=filtersum);'; put 'data work.&ds3;'; put 'if 0 then set &filter_summary;'; put 'filter_table="&orig_libds";'; put 'filter_hash="&filter_hash";'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%let ds4=%mf_getuniquename(prefix=filtersumappend);'; put '%mp_retainedkey('; put 'base_lib=%scan(&filter_summary,1,.)'; put ',base_dsn=%scan(&filter_summary,2,.)'; put ',append_lib=work'; put ',append_dsn=&ds3'; put ',retained_key=filter_rk'; put ',business_key=filter_hash'; put ',maxkeytable=&maxkeytable'; put ',locktable=&lock_table'; put ',outds=work.&ds4'; put ')'; put 'proc append base=&filter_summary data=&ds4;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds4;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '/* Next, update detail table */'; put '%let ds2=%mf_getuniquename(prefix=filterdetail);'; put 'data &ds2;'; put 'if 0 then set &filter_detail;'; put 'set &queryds;'; put 'format filter_hash $hex32. filter_line 8.;'; put 'filter_hash="&filter_hash";'; put 'filter_line=_n_;'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put 'proc append base=&filter_detail data=&ds2;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE detail update &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put '%end;'; put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;'; put 'by filter_line;'; put 'run;'; put '%err:'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro exit)'; put ')'; put '%mend mp_filterstore;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Validates a filter clause before it gets hashified, returns the RK'; put '@details Used to generate a FILTER_RK from an input query dataset.'; put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored'; put 'in dc.mpe_filteranytable'; put '

Service Inputs

'; put '
IWANT
'; put '|FILTER_TABLE:$41.|'; put '|---|'; put '|DC258467.MPE_X_TEST|'; put '
FILTERQUERY
'; put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|'; put '|---|---|---|---|---|---|'; put '|AND|AND|1|SOME_BESTNUM|>|1|'; put '|AND|AND|1|SOME_TIME|=|77333|'; put '

Service Outputs

'; put '
result
'; put '@li FILTER_HASH'; put '@li FILTER_RK'; put '@li FILTER_TABLE'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getvalue.sas'; put '@li mp_filterstore.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));'; put '%dc_assignlib(WRITE,%scan(&ds,1,.))'; put '%mp_filterstore('; put 'libds=&ds,'; put 'queryds=work.filterquery,'; put 'filter_summary=&dc_libref..mpe_filteranytable,'; put 'filter_detail=&dc_libref..mpe_filtersource,'; put 'lock_table=&dc_libref..mpe_lockanytable,'; put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,'; put 'outresult=work.result,'; put 'outquery=work.query, /* not used */'; put 'mdebug=1'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put 'proc sql;'; put 'alter table work.result drop PROCESSED_DTTM;'; put '%webout(OPEN)'; put '%webout(OBJ,result)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; put '%mend dc_gettableid;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getpk('; put 'lib,'; put 'ds=0,'; put 'outds=work.mp_getpk,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks'; put 'pkfromindex;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let engine=%mf_getengine(&lib);'; put '%let schema=%mf_getschema(&lib);'; put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);'; put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);'; put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);'; put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);'; put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);'; put '%let sum=%mf_getuniquename(prefix=getpk_sum);'; put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);'; put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);'; put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);'; put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put 'proc sql;'; put 'create table &ds1 as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.&ds2 as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table &ds3 as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&ds2 b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%if &ds = 0 %then %let dsn=;'; put '/* get all constraints, in constraint order*/'; put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table &pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.&ds2'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table &sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table &pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from &sum a'; put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table &pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data &finalpks;'; put 'set &pkdefault &pk4sure &pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table &ds3 as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.&tabs1 as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data &tabs2;'; put 'set &ds3;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn constraint_order;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table &outds as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.&tabs1 a'; put 'left join work.&tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '/* tidy up */'; put '%mp_dropmembers('; put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getpk;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mp_searchdata(lib='; put ',ds='; put ',string= /* the query will use a contains (?) operator */'; put ',numval= /* numeric must match exactly */'; put ',outloc=0'; put ',outlib=MPSEARCH'; put ',outobs=-1'; put ',filter_text=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local table_list table table_num table colnum col start_tm check_tm vars type'; put 'coltype;'; put '%put process began at %sysfunc(datetime(),datetime19.);'; put '%if &syscc ge 4 %then %do;'; put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;'; put '%return;'; put '%end;'; put '%if &string = %then %let type=N;'; put '%else %let type=C;'; put '%if "&outloc"="0" %then %do;'; put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();'; put '%end;'; put '%mf_mkdir(&outloc)'; put 'libname &outlib "&outloc";'; put '/* get the list of tables in the library */'; put 'proc sql noprint;'; put 'select distinct memname into: table_list separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put '%if &ds ne %then %do;'; put 'and upcase(memname)=%upcase("&ds")'; put '%end;'; put ';'; put '/* check that we have something to check */'; put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;'; put '/* loop through each table */'; put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));'; put '%let table=%scan(&table_list,&table_num,%str( ));'; put '%let vars=%mf_getvarlist(&lib..&table);'; put '%if %length(&vars)=0 %then %do;'; put '%put NO COLUMNS IN &lib..&table! This will be skipped.;'; put '%end;'; put '%else %do;'; put '%let check_tm=%sysfunc(datetime());'; put '/* prep input */'; put 'data &outlib..&table;'; put 'set &lib..&table;'; put 'where %unquote(&filter_text) and ( 0'; put '/* loop through columns */'; put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let col=%scan(&vars,&colnum,%str( ));'; put '%let coltype=%mf_getvartype(&lib..&table,&col);'; put '%if &type=C and &coltype=C %then %do;'; put '/* if a char column, see if it contains the string */'; put 'or ("&col"n ? "&string")'; put '%end;'; put '%else %if &type=N and &coltype=N %then %do;'; put '/* if numeric match exactly */'; put 'or ("&col"n = &numval)'; put '%end;'; put '%end;'; put ');'; put '%if &outobs>-1 %then %do;'; put 'if _n_ > &outobs then stop;'; put '%end;'; put 'run;'; put '%put Search query for &table took'; put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;'; put '%if &syscc ne 0 %then %do;'; put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;'; put '%return;'; put '%end;'; put '%if %mf_nobs(&outlib..&table)=0 %then %do;'; put 'proc sql;'; put 'drop table &outlib..&table;'; put '%end;'; put '%end;'; put '%end;'; put '%put process finished at %sysfunc(datetime(),datetime19.);'; put '%mend mp_searchdata;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewdata.sas'; put '@brief Provide the raw view of the data'; put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.'; put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered'; put 'for current records and don''t include the SCD2 etc cols).'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000'; put '|---|---|---|---'; put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|'; put '

Service Outputs

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

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_createdataset.sas'; put '@li dc_gettableid.sas'; put '@li mf_existds.sas'; put '@li mf_getvarcount.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getpk.sas'; put '@li mp_jsonout.sas'; put '@li mp_searchdata.sas'; put '@li mp_validatecol.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* configure macvars */'; put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;'; put '%let maxrows=250;'; put '/* avoid code injection */'; put '%let FMT_IND=0;'; put '%let SEARCHTYPE=;'; put '%let SEARCHVAL=;'; put '%let FILTER_RK=;'; put '%let LIBDS=;'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;'; put 'set work.SASCONTROLTABLE;'; put 'call symputx(''orig_libds'',libds);'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put '/* check if the request is for a format catalog */'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''fmt_ind'',1);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if searchtype in (''CHAR'',''NUM'') then do;'; put 'searchval=tranwrd(searchval,''%'','''');'; put 'searchval=tranwrd(searchval,''&'','''');'; put 'searchval=tranwrd(searchval,'';'','''');'; put 'searchval=tranwrd(searchval,''"'','''');'; put 'call symputx(''searchtype'',searchtype);'; put 'call symputx(''searchval'',searchval);'; put 'end;'; put 'else if searchtype not in ('''',''NONE'') then do;'; put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;'; put 'stop;'; put 'end;'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem with macro inputs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/**'; put '* assign the Library'; put '*/'; put '%dc_assignlib(READ,%scan(&LIBDS,1,.))'; put '/* abort if looking for a format and the catalog doesn''t exist */'; put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)'; put ',mac=&_program..sas'; put ',msg=%str(Catalog &libds does not exist!)'; put ')'; put '/**'; put 'check if dataset can actually be opened - as library may exist but it may not'; put 'be possible to assign, and even if it can, the physical table may not exist'; put '**/'; put 'data _null_;'; put 'if &fmt_ind=0 then do;'; put 'dsid=open("&libds");'; put 'rc=close(dsid);'; put 'end;'; put 'else dsid=42;'; put 'call symputx(''existds'',dsid,''l'');'; put 'putlog ''dataset exists check:'' dsid;'; put 'run;'; put '/**'; put '* get the data'; put '*/'; put '%global dsobs;'; put '%let dsobs=0;'; put '%macro x();'; put '%if &existds>0 %then %do;'; put '%if &fmt_ind=1 %then %do;'; put '/* export format and point the libds to the output table from here on */'; put '%mp_cntlout('; put 'libcat=&libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%let libds=WORK.FMTEXTRACT;'; put 'proc datasets lib=work noprint;'; put 'modify FMTEXTRACT;'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%end;'; put 'proc sql noprint;'; put 'select count(*) into: dsobs from &libds;'; put '%put preparing query;'; put '%mpe_filtermaster(VIEW,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;'; put '/* get row count */'; put 'filename rows temp;'; put 'data _null_;'; put 'file rows;'; put 'infile filtref end=eof;'; put 'input;'; put 'if _n_=1 then do;'; put 'put ''proc sql;'';'; put 'put "select count(*) into: dsobs from &libds where";'; put 'end;'; put 'put _infile_;'; put 'if eof then put '';'';'; put 'run;'; put 'data _null_;'; put 'infile rows;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%inc rows;'; put '/* send actual data, filtered and row-capped */'; put 'data work.viewdata;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'if _n_>&maxrows then stop;'; put 'run;'; put '%if %mf_nobs(work.viewdata)=0 %then %do;'; put 'data work.viewdata;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put 'set work.viewdata;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data work.vwsearch/view=work.vwsearch;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%if %upcase(&searchtype)=CHAR %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',string=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%else %if %upcase(&searchtype)=NUM %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',numval=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;'; put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);'; put 'data viewdata;'; put 'set MPSEARCH.vwsearch;'; put 'if _n_<&maxrows;'; put 'run;'; put '%end;'; put '%else %do;'; put '%let dsobs=0;'; put 'data viewdata;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '/* physical table is not accessible so create from metatadata definition */'; put '%dc_createdataset(libds=&libds,outds=viewdata)'; put 'data viewData;'; put 'output;'; put 'set viewdata;'; put 'run;'; put '/* make filtref / work.query / work.groups to avoid downstream issues */'; put 'filename filtref temp;'; put 'data work.query;'; put 'file filtref;'; put 'x=0;'; put 'put x;'; put 'run;'; put 'data work.groups;'; put 'length groupuri groupname $32 groupdesc $128 ;'; put 'call missing (of _all_);'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%mend x; %x()'; put '/* apply column level security */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata'; put ',mode=VIEW'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.viewdata2'; put ',outmeta=work.cls_rules'; put ')'; put '/* get table uri (if sas 9) to enable linking direct to lineage */'; put '%dc_gettableid(libref=%scan(&libds,1,.)'; put ',ds=%scan(&libds,2,.)'; put ',outds=work.parambase'; put ')'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)'; put '%let pk_fields=;'; put 'data _null_;'; put 'set work.pk_fields;'; put 'call symputx(''pk_fields'',pk_fields);'; put 'run;'; put 'data work.sasparams;'; put 'set work.parambase;'; put 'format FILTER_TEXT $32767.;'; put 'FILTER_TEXT=symget(''FILTER_TEXT'');'; put 'length PK_FIELDS $512;'; put 'PK_FIELDS=symget(''PK_FIELDS'');'; put 'nobs=&dsobs;'; put 'vars=%mf_getvarcount(viewdata);'; put 'maxrows=&maxrows;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_getcols(&libds, outds=cols)'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cls_rules)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewlibarray; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibarray.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mm_webout.sas'; put '@li mf_existds.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let keepvars=libraryref libraryname;'; put 'data _null_;'; put 'length keepvars $32;'; put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));'; put 'call symputx(''keepvars'',keepvars);'; put 'run;'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic error!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs (keep=&keepvars);'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR, mm_getLibs)'; put '%mm_webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewlibs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibs.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic err!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs out=saslibs;'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,saslibs,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewtables; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewtables.sas'; put '@brief List the tables and format catalogs the user can view'; put '@details Provide a library and get list of tables and catalogs. Also return'; put 'the libinfo details.'; put '

Service Inputs

'; put '
SASControlTable
'; put 'Just one input - MPLIB (the libref to get tables and info for)'; put '|MPLIB:$char8.|'; put '|---|'; put '|SOMELIB|'; put '

Service Outputs

'; put '
work.mptables
'; put '|MEMNAME:$char32.|'; put '|---|'; put '|DS1|'; put '|DS2|'; put '|DS3|'; put 'etc'; put '
work.libinfo
'; put 'If attributes are empty, they don''t need to be shown on screen.'; put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |'; put '|---|---|---|---|---|---|---|---|---|'; put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global MPLIB;'; put '/* load parameters */'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put '/**'; put '* assign the Library'; put '*/'; put '%put &=MPLIB;'; put '%dc_assignlib(READ,&MPLIB)'; put '%mp_abort(iftrue= (&syscc ne 0 )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &mplib library)'; put ')'; put '/**'; put '* get the tables'; put '*/'; put 'data members; /* empty table */'; put 'name='''';'; put 'memtype='''';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&mplib ;'; put 'quit;'; put '/* cannot avoid the proc datasets warn!ng for an empty lib */'; put '/* nolist means no output and nowarn has no effect */'; put '%put &=syscc;'; put 'data _null_;'; put 'if "&syscc" ne "0" then do;'; put 'putlog "Library &mplib is empty, setting syscc to zero";'; put 'call symputx(''syscc'',0);'; put 'end;'; put 'run;'; put '%put &=syscc;'; put 'proc sql;'; put 'create table work.mptables as'; put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')'; put 'else name end as memname'; put 'from members;'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'where also libref in (''*ALL*'',"%upcase(&mplib)");'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches'; put 'where libref=''*ALL*'''; put 'or (libref="&mplib" and dsn=''*ALL*'');'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewtables();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %return;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;'; put '/* scenario 3 - an *ALL* libref or DSN is listed */'; put '%if &all_cnt>0 %then %return;'; put '/* scenario 4 - specific tables listed */'; put '%if &securitygroupscount>0 %then %do;'; put 'proc sql;'; put 'delete from mptables'; put 'where upcase(memname) not in (select upcase(dsn) from sec);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put 'data mptables;'; put 'set mptables;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic error!)'; put ')'; put '%mend mpestp_viewtables;'; put '%mpestp_viewtables()'; put '/* get libinfo */'; put 'proc sql;'; put 'create table work.libinfo as'; put 'select a.engine,'; put 'a.libname,'; put 'a.paths,'; put 'a.perms,'; put 'a.owners,'; put 'a.schemas,'; put 'a.libid,'; put 'coalesce(b.libsize,0) as libsize,'; put 'coalesce(b.table_cnt,0) as table_cnt,'; put 'coalesce(b.catalog_cnt,0) as catalog_cnt'; put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.libref=b.libref'; put 'where a.libref="&MPLIB";'; put '%webout(OPEN)'; put '%webout(OBJ,mptables)'; put '%webout(OBJ,libinfo)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %let service=usergroupsbymember; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usergroupsbymember.sas'; put '@brief List the groups a member is in'; put '@details Runs without \%mpeinit() - this enables the dropdown to be populated'; put 'during configuration, when the settings service does not yet exist.'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mm_getusers.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembers; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getusers;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembers.sas'; put '@brief List all SAS users'; put '@details Gets a list of all SAS users'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbygroup.sas'; put '@brief List the members of a group'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for table columns'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Inputs

'; put '
work.sourcerow
'; put 'Has source table structure.'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuniquename.sas'; put '@li mp_abort.sas'; put '@li mp_validatecol.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlibds=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlibds=%mf_getuniquename();'; put '%let var_is_libds=%mf_getuniquename();'; put 'data _null_;'; put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8'; put 'xl_table base_ds select_ds rls_table cls_table dsn $32;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=symget(''libds'');'; put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"'; put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);'; put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"'; put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);'; put 'else if &varlibds="&mpelib..MPE_SELECTBOX"'; put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_TABLES"'; put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);'; put '/* validate libds */'; put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)'; put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlibds" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)'; put ')'; put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))'; put 'proc contents noprint data=&tgtlibds'; put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );'; put 'run;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.DYNAMIC_VALUES;'; put 'raw_value=upcase(display_value);'; put 'format raw_value;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=libraries_all; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for editable libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libref as display_value,'; put 'upcase(libref) as raw_value'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. < tx_to'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_alerts.alert_lib; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch extended values for alert_lib'; put '@details Fetches libraries from mpe_tables, creates extended values for'; put 'alert_ds, and marks "*ALL*" as the forced (default) value.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch extended values for DSN'; put '@details Fetches datasets in a library, and ALSO fetches a list of numeric'; put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,'; put 'TX_TO etc).'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8;'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else putlog "something unexpected happened";'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'proc sql;'; put 'create table work.source as'; put 'select upcase(memname) as memname'; put ',upcase(name) as name'; put ',type'; put 'from dictionary.columns'; put 'where libname="&TGTLIB"'; put 'and memtype=''DATA'';'; put 'create table work.members as'; put 'select distinct memname as display_value'; put 'from work.source;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.members;'; put 'raw_value=display_value;'; put 'display_index=_n_;'; put 'run;'; put 'proc sql;'; put 'create table work.dynamic_extended_values as'; put 'select a.display_index'; put ',b.name as display_value'; put ',"C" as display_type'; put ',b.name as RAW_VALUE_CHAR'; put ',. as RAW_VALUE_NUM'; put 'from work.dynamic_values a'; put 'left join work.source b'; put 'on a.display_value=b.memname'; put 'where b.type=''num'';'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'extra_col_name=''VAR_PROCESSED'';output;'; put 'extra_col_name=''VAR_TXFROM'';output;'; put 'extra_col_name=''VAR_TXTO'';output;'; put 'extra_col_name=''VAR_BUSFROM'';output;'; put 'extra_col_name=''VAR_BUSTO'';output;'; put 'run;'; put '/* set some force flags */'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'forced_value=0;'; put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;'; put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;'; put 'run;'; put 'proc sort;'; put 'by extra_col_name display_index;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_x_test.some_num; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '|DISPLAY_VALUE:$|RAW_VALUE:??|'; put '|---|---|'; put '|$44.00|44|'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; put 'by groupname;'; put 'run;'; put '%mend dc_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief validating the mpe_security.sas_group column'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

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

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for tables in a library'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlib=RLS_LIBREF;'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlib=CLS_LIBREF;'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'data members; /* empty table */'; put 'name='' '';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&tgtlib ;'; put 'run;'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct name as display_value,'; put 'upcase(name) as raw_value'; put 'from work.members'; put 'where MemType=''DATA'''; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=tables_editable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

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

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for editable libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Inputs

'; put '
work.source_row
'; put '|libref:$8|'; put '|somelib|'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|'; put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'data _null_;'; put 'var=symget(''variable_nm'');'; put 'libds=symget(''libds'');'; put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;'; put 'call symputx(''srccol'',''XL_LIBREF'');'; put 'end;'; put 'else call symputx(''srccol'',''libref'');'; put 'run;'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct dsn as display_value,'; put 'upcase(dsn) as raw_value'; put 'from &mpelib..mpe_tables'; put '(where=(&dc_dttmtfmt. < tx_to))'; put 'where libref in (select &srccol from work.source_row)'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=411.26896d93e056dcb9-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBEcj0xMjAwLFJ0PTEyNTIsRGM9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxMjU3LDEyNTgsMWU0XSxMMD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEz''@;'; put 'put ''MDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGUwPWZ1bmN0aW9uKGUpey0xIT1EYy5pbmRleE9mKGUpJiYoUnQ9TDBbMF09''@;'; put 'put ''ZSl9LE1yPWZ1bmN0aW9uKGUpe0RyPWUsZTAoZSl9O2Z1bmN0aW9uIHIwKCl7TXIoMTIwMCksZnVuY3Rpb24gT2MoKXtlMCgxMjUyKX0oKX1mdW5jdGlvbiB0MChlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5sZW5ndGg7cjxhOysrcil0W3JdPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdH1mdW5j''@;'; put 'put ''dGlvbiBhaShlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg+PjE7KytyKXRbcl09U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlQXQoMipyKzEpKyhlLmNoYXJDb2RlQXQoMipyKTw8OCkpO3JldHVybiB0LmpvaW4oIiIpfXZhciBPZSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09dCYmMjU0PT1yP2Z1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aD4+MTsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgyKnIpKyhlLmNoYXJDb2RlQXQoMipyKzEp''@;'; put 'put ''PDw4KSk7cmV0dXJuIHQuam9pbigiIil9KGUuc2xpY2UoMikpOjI1ND09dCYmMjU1PT1yP2FpKGUuc2xpY2UoMikpOjY1Mjc5PT10P2Uuc2xpY2UoMSk6ZX0scGE9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LEIwPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKHQpfSx6ZT1udWxsLGd0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ZnVuY3Rpb24gZ2EoZSl7Zm9yKHZhciB0PSIiLHI9MCxhPTAsbj0wLGk9MCxzPTAsZj0wLGM9MCxvPTA7bzxlLmxlbmd0''@;'; put 'put ''aDspaT0ocj1lLmNoYXJDb2RlQXQobysrKSk+PjIscz0oMyZyKTw8NHwoYT1lLmNoYXJDb2RlQXQobysrKSk+PjQsZj0oMTUmYSk8PDJ8KG49ZS5jaGFyQ29kZUF0KG8rKykpPj42LGM9NjMmbixpc05hTihhKT9mPWM9NjQ6aXNOYU4obikmJihjPTY0KSx0Kz1ndC5jaGFyQXQoaSkrZ3QuY2hh''@;'; put 'put ''ckF0KHMpK2d0LmNoYXJBdChmKStndC5jaGFyQXQoYyk7cmV0dXJuIHR9ZnVuY3Rpb24gT3IoZSl7dmFyIHQ9IiIsaT0wLHM9MCxmPTAsYz0wO2U9ZS5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoOylpPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSks''@;'; put 'put ''cz1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaTw8MnxzPj40KSw2NCE9PShmPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSkpJiYodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmcyk8PDR8Zj4+MikpLDY0IT09KGM9Z3QuaW5kZXhPZihlLmNoYXJB''@;'; put 'put ''dChvKyspKSkmJih0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJmYpPDw2fGMpKTtyZXR1cm4gdH12YXIgU2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lv''@;'; put 'put ''bnMubm9kZX0oKSxvdD1mdW5jdGlvbigpe2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgZT0hQnVmZmVyLmZyb207aWYoIWUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7ZT0hMH1yZXR1cm4gZT9mdW5jdGlvbih0LHIpe3JldHVybiByP25ldyBCdWZmZXIodCxyKTpuZXcg''@;'; put 'put ''QnVmZmVyKHQpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlcil9cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKTtmdW5jdGlvbiBfdChlKXtyZXR1cm4gU2U/QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYyhlKTpuZXcgQnVmZmVyKGUpOnR5cGVvZiBVaW50OEFycmF5PCJ1Ij9uZXcgVWludDhBcnJheShl''@;'; put 'put ''KTpuZXcgQXJyYXkoZSl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIFNlP0J1ZmZlci5hbGxvY1Vuc2FmZT9CdWZmZXIuYWxsb2NVbnNhZmUoZSk6bmV3IEJ1ZmZlcihlKTp0eXBlb2YgVWludDhBcnJheTwidSI/bmV3IFVpbnQ4QXJyYXkoZSk6bmV3IEFycmF5KGUpfXZhciBJcj1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gU2U/b3QodCwiYmluYXJ5Iik6dC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiAyNTUmci5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHd0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKGEpfSkuam9pbigiIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gTTAoZSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3Vw''@;'; put 'put ''cG9ydGVkIik7aWYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBNMChuZXcgVWludDhBcnJheShlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXTtyZXR1cm4gdH12YXIgZnI9U2U/ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1''@;'; put 'put ''ZmZlci5jb25jYXQoZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpfTpmdW5jdGlvbihlKXtpZih0eXBlb2YgVWludDhBcnJheTwidSIpe3ZhciB0PTAscj0wO2Zvcih0PTA7dDxlLmxlbmd0aDsrK3Qpcis9ZVt0XS5sZW5ndGg7dmFyIGE9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkociksbj0wO2Zvcih0PTAscj0wO3Q8ZS5sZW5ndGg7cis9biwrK3QpaWYobj1lW3RdLmxlbmd0aCxlW3RdaW5zdGFuY2VvZiBVaW50OEFycmF5KWEuc2V0KGVbdF0scik7ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGVbdF0pdGhyb3cid3RmIjthLnNldChuZXcgVWludDhB''@;'; put 'put ''cnJheShlW3RdKSxyKX1yZXR1cm4gYX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpbXS5zbGljZS5jYWxsKGkpfSkpfSxkcj0vXHUwMDAwL2csd2E9L1tcdTAwMDEtXHUwMDA2XS9nO2Z1bmN0aW9uIGVhKGUpe2Zv''@;'; put 'put ''cih2YXIgdD0iIixyPWUubGVuZ3RoLTE7cj49MDspdCs9ZS5jaGFyQXQoci0tKTtyZXR1cm4gdH1mdW5jdGlvbiBZcihlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6amUoIjAiLHQtci5sZW5ndGgpK3J9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgcj0iIitlO3JldHVybiByLmxl''@;'; put 'put ''bmd0aD49dD9yOmplKCIgIix0LXIubGVuZ3RoKStyfWZ1bmN0aW9uIGEwKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpyK2plKCIgIix0LXIubGVuZ3RoKX12YXIgaWk9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gcmEoZSx0KXtyZXR1cm4gZT5paXx8ZTwtaWk/ZnVuY3Rp''@;'; put 'put ''b24gYmMoZSx0KXt2YXIgcj0iIitNYXRoLnJvdW5kKGUpO3JldHVybiByLmxlbmd0aD49dD9yOmplKCIwIix0LXIubGVuZ3RoKStyfShlLHQpOmZ1bmN0aW9uIFBjKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpqZSgiMCIsdC1yLmxlbmd0aCkrcn0oTWF0aC5yb3VuZChl''@;'; put 'put ''KSx0KX1mdW5jdGlvbiBuMChlLHQpe3JldHVybiBlLmxlbmd0aD49NysodD10fHwwKSYmMTAzPT0oMzJ8ZS5jaGFyQ29kZUF0KHQpKSYmMTAxPT0oMzJ8ZS5jaGFyQ29kZUF0KHQrMSkpJiYxMTA9PSgzMnxlLmNoYXJDb2RlQXQodCsyKSkmJjEwMT09KDMyfGUuY2hhckNvZGVBdCh0KzMpKSYm''@;'; put 'put ''MTE0PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNCkpJiY5Nz09KDMyfGUuY2hhckNvZGVBdCh0KzUpKSYmMTA4PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNikpfXZhciBzaT1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0s''@;'; put 'put ''WyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxXMD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsi''@;'; put 'put ''SiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV0scGU9ezA6IkdlbmVyYWwi''@;'; put 'put ''LDE6IjAiLDI6IjAuMDAiLDM6IiMsIyMwIiw0OiIjLCMjMC4wMCIsOToiMCUiLDEwOiIwLjAwJSIsMTE6IjAuMDBFKzAwIiwxMjoiIyA/Lz8iLDEzOiIjID8/Lz8/IiwxNDoibS9kL3l5IiwxNToiZC1tbW0teXkiLDE2OiJkLW1tbSIsMTc6Im1tbS15eSIsMTg6Img6bW0gQU0vUE0iLDE5OiJo''@;'; put 'put ''Om1tOnNzIEFNL1BNIiwyMDoiaDptbSIsMjE6Img6bW06c3MiLDIyOiJtL2QveXkgaDptbSIsMzc6IiMsIyMwIDsoIywjIzApIiwzODoiIywjIzAgO1tSZWRdKCMsIyMwKSIsMzk6IiMsIyMwLjAwOygjLCMjMC4wMCkiLDQwOiIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLDQ1OiJtbTpzcyIs''@;'; put 'put ''NDY6IltoXTptbTpzcyIsNDc6Im1tc3MuMCIsNDg6IiMjMC4wRSswIiw0OToiQCIsNTY6JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJ30sZmk9ezU6MzcsNjozOCw3OjM5LDg6NDAsMjM6MCwyNDowLDI1OjAsMjY6MCwyNzoxNCwy''@;'; put 'put ''ODoxNCwyOToxNCwzMDoxNCwzMToxNCw1MDoxNCw1MToxNCw1MjoxNCw1MzoxNCw1NDoxNCw1NToxNCw1NjoxNCw1NzoxNCw1ODoxNCw1OToxLDYwOjIsNjE6Myw2Mjo0LDY3OjksNjg6MTAsNjk6MTIsNzA6MTMsNzE6MTQsNzI6MTQsNzM6MTUsNzQ6MTYsNzU6MTcsNzY6MjAsNzc6MjEsNzg6''@;'; put 'put ''MjIsNzk6NDUsODA6NDYsODE6NDcsODI6MH0sQmM9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6''@;'; put 'put ''JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDQxOidfKCogIywj''@;'; put 'put ''IzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAj''@;'; put 'put ''LCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKSd9O2Z1bmN0aW9uIGkwKGUsdCxyKXtmb3IodmFyIGE9ZTwwPy0xOjEsbj1lKmEsaT0wLHM9MSxmPTAsYz0xLG89MCxsPTAsaD1NYXRoLmZsb29yKG4pO288dCYmKGY9KGg9TWF0aC5mbG9vcihuKSkq''@;'; put 'put ''cytpLGw9aCpvK2MsIShuLWg8NWUtOCkpOyluPTEvKG4taCksaT1zLHM9ZixjPW8sbz1sO2lmKGw+dCYmKG8+dD8obD1jLGY9aSk6KGw9byxmPXMpKSwhcilyZXR1cm5bMCxhKmYsbF07dmFyIHg9TWF0aC5mbG9vcihhKmYvbCk7cmV0dXJuW3gsYSpmLXgqbCxsXX1mdW5jdGlvbiBrdChlLHQs''@;'; put 'put ''cil7aWYoZT4yOTU4NDY1fHxlPDApcmV0dXJuIG51bGw7dmFyIGE9MHxlLG49TWF0aC5mbG9vcig4NjQwMCooZS1hKSksaT0wLHM9W10sZj17RDphLFQ6bix1Ojg2NDAwKihlLWEpLW4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhmLnUpPDFlLTYmJihmLnU9MCks''@;'; put 'put ''dCYmdC5kYXRlMTkwNCYmKGErPTE0NjIpLGYudT4uOTk5OSYmKGYudT0wLDg2NDAwPT0rK24mJihmLlQ9bj0wLCsrYSwrK2YuRCkpLDYwPT09YSlzPXI/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGk9MztlbHNlIGlmKDA9PT1hKXM9cj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGk9NjtlbHNl''@;'; put 'put ''e2E+NjAmJi0tYTt2YXIgYz1uZXcgRGF0ZSgxOTAwLDAsMSk7Yy5zZXREYXRlKGMuZ2V0RGF0ZSgpK2EtMSkscz1bYy5nZXRGdWxsWWVhcigpLGMuZ2V0TW9udGgoKSsxLGMuZ2V0RGF0ZSgpXSxpPWMuZ2V0RGF5KCksYTw2MCYmKGk9KGkrNiklNyksciYmKGk9ZnVuY3Rpb24gWGMoZSx0KXt0''@;'; put 'put ''WzBdLT01ODE7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZTw2MCYmKHI9KHIrNiklNykscn0oYyxzKSl9cmV0dXJuIGYueT1zWzBdLGYubT1zWzFdLGYuZD1zWzJdLGYuUz1uJTYwLG49TWF0aC5mbG9vcihuLzYwKSxmLk09biU2MCxuPU1hdGguZmxvb3Iobi82MCksZi5IPW4sZi5xPWksZn12''@;'; put 'put ''YXIgY2k9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksTWM9Y2kuZ2V0VGltZSgpLFVjPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBvaShlLHQpe3ZhciByPWUuZ2V0VGltZSgpO3JldHVybiB0P3ItPTEyNjIzMDRlNTplPj1VYyYmKHIrPTg2NGU1KSwoci0oTWMrNmU0Kihl''@;'; put 'put ''LmdldFRpbWV6b25lT2Zmc2V0KCktY2kuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX1mdW5jdGlvbiBIMChlKXtyZXR1cm4tMT09ZS5pbmRleE9mKCIuIik/ZTplLnJlcGxhY2UoLyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC8sIiQxIil9ZnVuY3Rpb24ga2EoZSl7dmFyIHIsdD1NYXRo''@;'; put 'put ''LmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGUpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIHI9dD49LTQmJnQ8PS0xP2UudG9QcmVjaXNpb24oMTArdCk6TWF0aC5hYnModCk8PTk/ZnVuY3Rpb24gSGMoZSl7dmFyIHQ9ZTwwPzEyOjExLHI9SDAoZS50b0ZpeGVkKDEyKSk7cmV0dXJuIHIubGVuZ3Ro''@;'; put 'put ''PD10fHwocj1lLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD10P3I6ZS50b0V4cG9uZW50aWFsKDUpfShlKToxMD09PXQ/ZS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gVmMoZSl7dmFyIHQ9SDAoZS50b0ZpeGVkKDExKSk7cmV0dXJuIHQubGVuZ3RoPihlPDA/MTI6MTEpfHwi''@;'; put 'put ''MCI9PT10fHwiLTAiPT09dD9lLnRvUHJlY2lzaW9uKDYpOnR9KGUpLEgwKGZ1bmN0aW9uIFdjKGUpe3JldHVybi0xPT1lLmluZGV4T2YoIkUiKT9lOmUucmVwbGFjZSgvKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLywiJDFFIikucmVwbGFjZSgvKEVbKy1dKShcZCkkLywiJDEwJDIiKX0o''@;'; put 'put ''ci50b1VwcGVyQ2FzZSgpKSl9ZnVuY3Rpb24gTnQoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZTtjYXNlImJvb2xlYW4iOnJldHVybiBlPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxlKT09PWU/ZS50b1N0cmluZygxMCk6a2EoZSk7Y2Fz''@;'; put 'put ''ZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1lKXJldHVybiIiO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBScigxNCxvaShlLHQmJnQuZGF0ZTE5MDQpLHQpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6''@;'; put 'put ''ICIrZSl9ZnVuY3Rpb24gR2MoZSx0LHIsYSl7dmFyIGMsbj0iIixpPTAscz0wLGY9ci55LG89MDtzd2l0Y2goZSl7Y2FzZSA5ODpmPXIueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ZiUxMDAsbz0yO2JyZWFrO2RlZmF1bHQ6Yz1mJTFlNCxvPTR9YnJl''@;'; put 'put ''YWs7Y2FzZSAxMDk6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5tLG89dC5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBXMFtyLm0tMV1bMV07Y2FzZSA1OnJldHVybiBXMFtyLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gVzBbci5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3''@;'; put 'put ''aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuZCxvPXQubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gc2lbci5xXVswXTtkZWZhdWx0OnJldHVybiBzaVtyLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPTErKHIuSCsxMSklMTIs''@;'; put 'put ''bz10Lmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIit0fWJyZWFrO2Nhc2UgNzI6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5ILG89dC5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrdH1icmVhaztjYXNl''@;'; put 'put ''IDc3OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuTSxvPXQubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrdH1icmVhaztjYXNlIDExNTppZigicyIhPXQmJiJzcyIhPXQmJiIuMCIhPXQmJiIuMDAiIT10JiYiLjAwMCIhPXQpdGhyb3ci''@;'; put 'put ''YmFkIHNlY29uZCBmb3JtYXQ6ICIrdDtyZXR1cm4gMCE9PXIudXx8InMiIT10JiYic3MiIT10PyhzPWE+PTI/Mz09PWE/MWUzOjEwMDoxPT09YT8xMDoxLChpPU1hdGgucm91bmQocyooci5TK3IudSkpKT49NjAqcyYmKGk9MCksInMiPT09dD8wPT09aT8iMCI6IiIraS9zOihuPVlyKGksMith''@;'; put 'put ''KSwic3MiPT09dD9uLnN1YnN0cigwLDIpOiIuIituLnN1YnN0cigyLHQubGVuZ3RoLTEpKSk6WXIoci5TLHQubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaCh0KXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjPTI0KnIuRCtyLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Yz02MCooMjQqci5EK3Iu''@;'; put 'put ''SCkrci5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmM9NjAqKDYwKigyNCpyLkQrci5IKStyLk0pK01hdGgucm91bmQoci5TK3IudSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrdH1vPTM9PT10Lmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6Yz1mLG89''@;'; put 'put ''MX1yZXR1cm4gbz4wP1lyKGMsbyk6IiJ9ZnVuY3Rpb24gRXQoZSl7aWYoZS5sZW5ndGg8PTMpcmV0dXJuIGU7Zm9yKHZhciByPWUubGVuZ3RoJTMsYT1lLnN1YnN0cigwLHIpO3IhPWUubGVuZ3RoO3IrPTMpYSs9KGEubGVuZ3RoPjA/IiwiOiIiKStlLnN1YnN0cihyLDMpO3JldHVybiBhfXZh''@;'; put 'put ''ciBsaT0vJS9nO2Z1bmN0aW9uIHVpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIit1aShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTst''@;'; put 'put ''MT09PW4mJihuPWUuaW5kZXhPZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLC0xPT09KHI9KHQvTWF0aC5wb3coMTAsaSkpLnRvUHJlY2lzaW9uKGErMSsobitpKSVuKSkuaW5kZXhPZigiZSIpKXt2YXIgcz1NYXRoLmZs''@;'; put 'put ''b29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1yLmluZGV4T2YoIi4iKT9yPXIuY2hhckF0KDApKyIuIityLnN1YnN0cigxKSsiRSsiKyhzLXIubGVuZ3RoK2kpOnIrPSJFKyIrKHMtaSk7IjAuIj09PXIuc3Vic3RyKDAsMik7KXI9KHI9ci5jaGFyQXQoMCkrci5zdWJzdHIo''@;'; put 'put ''MixuKSsiLiIrci5zdWJzdHIoMituKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO3I9ci5yZXBsYWNlKC9cKy0vLCItIil9cj1yLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oZixjLG8sbCl7cmV0dXJuIGMrbyts''@;'; put 'put ''LnN1YnN0cigwLChuK2kpJW4pKyIuIitsLnN1YnN0cihpKSsiRSJ9KX1lbHNlIHI9dC50b0V4cG9uZW50aWFsKGEpO3JldHVybiBlLm1hdGNoKC9FXCswMCQvKSYmci5tYXRjaCgvZVsrLV1cZCQvKSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSsiMCIrci5jaGFyQXQoci5sZW5ndGgtMSkp''@;'; put 'put ''LGUubWF0Y2goL0VcLS8pJiZyLm1hdGNoKC9lXCsvKSYmKHI9ci5yZXBsYWNlKC9lXCsvLCJlIikpLHIucmVwbGFjZSgiZSIsIkUiKX12YXIgaGk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLHhpPS9eIyowKlwuKFswI10rKS8sZGk9L1wpLipbMCNdLyx2aT0vXCgjIyNcKSAjIyNcXD8tIyMj''@;'; put 'put ''Iy87ZnVuY3Rpb24gVHIoZSl7Zm9yKHZhciByLHQ9IiIsYT0wO2EhPWUubGVuZ3RoOysrYSlzd2l0Y2gocj1lLmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2Mzp0Kz0iICI7YnJlYWs7Y2FzZSA0ODp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDp0Kz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KHIpfXJldHVybiB0fWZ1bmN0aW9uIHBpKGUsdCl7dmFyIHI9TWF0aC5wb3coMTAsdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChlKnIpL3J9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLU1hdGguZmxvb3IoZSksYT1NYXRoLnBvdygxMCx0KTtyZXR1cm4gdDwoIiIrTWF0aC5yb3VuZChyKmEpKS5s''@;'; put 'put ''ZW5ndGg/MDpNYXRoLnJvdW5kKHIqYSl9ZnVuY3Rpb24gVXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/VXIoIm4iLGEs''@;'; put 'put ''cik6IigiK1VyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uICRjKGUsdCxyKXtmb3IodmFyIGE9dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgu''@;'; put 'put ''cG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiB6YyhlLHQscil7dmFyIGE9dC5yZXBsYWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIs''@;'; put 'put ''bil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiB1aSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitVcihlLHQuc3Vic3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0''@;'; put 'put ''Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0obj1yYShyLDApKSYmKG49IiIpLG4ubGVuZ3RoPnQubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYoaT10Lm1hdGNoKGhp''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gamMoZSx0LHIpe3ZhciBhPXBhcnNlSW50KGVbNF0sMTApLG49TWF0aC5yb3VuZCh0KmEpLGk9TWF0aC5mbG9vcihuL2EpLHM9bi1pKmEsZj1hO3JldHVybiByKygwPT09aT8iIjoiIitpKSsiICIrKDA9PT1zP2plKCIgIixlWzFdLmxlbmd0aCsxK2VbNF0ubGVu''@;'; put 'put ''Z3RoKTpVMChzLGVbMV0ubGVuZ3RoKStlWzJdKyIvIitlWzNdK1lyKGYsZVs0XS5sZW5ndGgpKX0oaSxjLG8pO2lmKHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49cGkocixpWzFdLmxlbmd0''@;'; put 'put ''aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrVHIoaVsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24odix1KXtyZXR1cm4iLiIrdStqZSgiMCIsVHIoaVsxXSkubGVuZ3RoLXUubGVuZ3RoKX0pLC0xIT09dC5pbmRleE9mKCIw''@;'; put 'put ''LiIpP246bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKHQ9dC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGk9dC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIG8rcGkoYyxpWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikk''@;'; put 'put ''LywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gbytFdChyYShjLDApKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrVXIoZSx0LC1yKTpFdCgi''@;'; put 'put ''IisoTWF0aC5mbG9vcihyKStmdW5jdGlvbiBZYyhlLHQpe3JldHVybiB0PCgiIitNYXRoLnJvdW5kKChlLU1hdGguZmxvb3IoZSkpKk1hdGgucG93KDEwLHQpKSkubGVuZ3RoPzE6MH0ocixpWzFdLmxlbmd0aCkpKSsiLiIrWXIobWkocixpWzFdLmxlbmd0aCksaVsxXS5sZW5ndGgpO2lmKGk9''@;'; put 'put ''dC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gVXIoZSx0LnJlcGxhY2UoL14jLCMqLC8sIiIpLHIpO2lmKGk9dC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gbj1lYShVcihlLHQucmVwbGFjZSgvW1xcLV0vZywiIikscikpLHM9MCxlYShlYSh0LnJlcGxhY2UoL1xc''@;'; put 'put ''L2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24odil7cmV0dXJuIHM8bi5sZW5ndGg/bi5jaGFyQXQocysrKToiMCI9PT12PyIwIjoiIn0pKTtpZih0Lm1hdGNoKHZpKSlyZXR1cm4iKCIrKG49VXIoZSwiIyMjIyMjIyMjIyIscikpLnN1YnN0cigwLDMpKyIpICIrbi5zdWJzdHIoMywz''@;'; put 'put ''KSsiLSIrbi5zdWJzdHIoNik7dmFyIGw9IiI7aWYoaT10Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gcz1NYXRoLm1pbihpWzRdLmxlbmd0aCw3KSxmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMSksbj0iIitvLCIgIj09KGw9bHQoIm4iLGlbMV0sZlsxXSkp''@;'; put 'put ''LmNoYXJBdChsLmxlbmd0aC0xKSYmKGw9bC5zdWJzdHIoMCxsLmxlbmd0aC0xKSsiMCIpLG4rPWwraVsyXSsiLyIraVszXSwobD1hMChmWzJdLHMpKS5sZW5ndGg8aVs0XS5sZW5ndGgmJihsPVRyKGlbNF0uc3Vic3RyKGlbNF0ubGVuZ3RoLWwubGVuZ3RoKSkrbCksbis9bDtpZihpPXQubWF0''@;'; put 'put ''Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oTWF0aC5tYXgoaVsxXS5sZW5ndGgsaVs0XS5sZW5ndGgpLDcpLG8rKChmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMCkpWzBdfHwoZlsxXT8iIjoiMCIpKSsiICIrKGZbMV0/VTAoZlsxXSxzKStp''@;'; put 'put ''WzJdKyIvIitpWzNdK2EwKGZbMl0scyk6amUoIiAiLDIqcysxK2lbMl0ubGVuZ3RoK2lbM10ubGVuZ3RoKSk7aWYoaT10Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBuPXJhKHIsMCksdC5sZW5ndGg8PW4ubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYo''@;'; put 'put ''aT10Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWluKGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3Jl''@;'; put 'put ''dHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHM9bWkocixpWzFdLmxlbmd0aCkscjwwPyItIitVcihlLHQsLXIpOkV0KGZ1bmN0aW9uIEpjKGUpe3JldHVybiBlPDIxNDc0ODM2NDcm''@;'; put 'put ''JmU+LTIxNDc0ODM2NDg/IiIrKGU+PTA/MHxlOmUtMXwwKToiIitNYXRoLmZsb29yKGUpfShyKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbih2KXtyZXR1cm4iMDAsIisodi5sZW5ndGg8Mz9ZcigwLDMtdi5sZW5ndGgpOiIiKSt2fSkrIi4i''@;'; put 'put ''K1lyKHMsaVsxXS5sZW5ndGgpO3N3aXRjaCh0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBVcihlLCIjLCMjMC4wMCIscik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIGQ9RXQocmEoYywwKSk7cmV0dXJuIjAiIT09ZD9vK2Q6IiI7Y2FzZSIjIyMsIyMjLjAw''@;'; put 'put ''IjpyZXR1cm4gVXIoZSwiIyMjLCMjMC4wMCIscikucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gVXIoZSwiIywjIzAuMDAiLHIpLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrdCsifCIpfWZ1bmN0aW9u''@;'; put 'put ''IGdpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIitnaShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTstMT09PW4mJihuPWUuaW5kZXhP''@;'; put 'put ''ZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLCEocj0odC9NYXRoLnBvdygxMCxpKSkudG9QcmVjaXNpb24oYSsxKyhuK2kpJW4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgcz1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGgu''@;'; put 'put ''TE9HMTBFKTstMT09PXIuaW5kZXhPZigiLiIpP3I9ci5jaGFyQXQoMCkrIi4iK3Iuc3Vic3RyKDEpKyJFKyIrKHMtci5sZW5ndGgraSk6cis9IkUrIisocy1pKSxyPXIucmVwbGFjZSgvXCstLywiLSIpfXI9ci5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGYs''@;'; put 'put ''YyxvLGwpe3JldHVybiBjK28rbC5zdWJzdHIoMCwobitpKSVuKSsiLiIrbC5zdWJzdHIoaSkrIkUifSl9ZWxzZSByPXQudG9FeHBvbmVudGlhbChhKTtyZXR1cm4gZS5tYXRjaCgvRVwrMDAkLykmJnIubWF0Y2goL2VbKy1dXGQkLykmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkrIjAiK3Iu''@;'; put 'put ''Y2hhckF0KHIubGVuZ3RoLTEpKSxlLm1hdGNoKC9FXC0vKSYmci5tYXRjaCgvZVwrLykmJihyPXIucmVwbGFjZSgvZVwrLywiZSIpKSxyLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVw''@;'; put 'put ''bGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/UXIoIm4iLGEscik6IigiK1FyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHFjKGUsdCxyKXtmb3IodmFyIGE9''@;'; put 'put ''dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgucG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBaYyhlLHQscil7dmFyIGE9dC5yZXBs''@;'; put 'put ''YWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIsbil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiBnaSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitRcihlLHQuc3Vi''@;'; put 'put ''c3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gbj0iIityLDA9PT1yJiYobj0iIiksbi5s''@;'; put 'put ''ZW5ndGg+dC5sZW5ndGg/bjpUcih0LnN1YnN0cigwLHQubGVuZ3RoLW4ubGVuZ3RoKSkrbjtpZihpPXQubWF0Y2goaGkpKXJldHVybiBmdW5jdGlvbiBLYyhlLHQscil7cmV0dXJuIHIrKDA9PT10PyIiOiIiK3QpK2plKCIgIixlWzFdLmxlbmd0aCsyK2VbNF0ubGVuZ3RoKX0oaSxjLG8pO2lm''@;'; put 'put ''KHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49KG49KCIiK3IpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitUcihpWzFdKSkpLnJlcGxh''@;'; put 'put ''Y2UoL1wuKFxkKikkLyxmdW5jdGlvbih2LHUpe3JldHVybiIuIit1K2plKCIwIixUcihpWzFdKS5sZW5ndGgtdS5sZW5ndGgpfSksLTEhPT10LmluZGV4T2YoIjAuIik/bjpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYodD10LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaT10Lm1hdGNoKC9e''@;'; put 'put ''KDAqKVwuKCMqKSQvKSlyZXR1cm4gbysoIiIrYykucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1''@;'; put 'put ''cm4gbytFdCgiIitjKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKSsiLiIramUoIjAiLGlbMV0ubGVuZ3RoKTtpZihpPXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIFFyKGUsdC5yZXBsYWNlKC9eIywjKiwvLCIi''@;'; put 'put ''KSxyKTtpZihpPXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIG49ZWEoUXIoZSx0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHIpKSxzPTAsZWEoZWEodC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKHYpe3JldHVybiBzPG4ubGVuZ3Ro''@;'; put 'put ''P24uY2hhckF0KHMrKyk6IjAiPT09dj8iMCI6IiJ9KSk7aWYodC5tYXRjaCh2aSkpcmV0dXJuIigiKyhuPVFyKGUsIiMjIyMjIyMjIyMiLHIpKS5zdWJzdHIoMCwzKSsiKSAiK24uc3Vic3RyKDMsMykrIi0iK24uc3Vic3RyKDYpO3ZhciBsPSIiO2lmKGk9dC5tYXRjaCgvXihbIzA/XSspKCA/''@;'; put 'put ''KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oaVs0XS5sZW5ndGgsNyksZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITEpLG49IiIrbywiICI9PShsPWx0KCJuIixpWzFdLGZbMV0pKS5jaGFyQXQobC5sZW5ndGgtMSkmJihsPWwuc3Vic3RyKDAsbC5sZW5ndGgtMSkrIjAiKSxu''@;'; put 'put ''Kz1sK2lbMl0rIi8iK2lbM10sKGw9YTAoZlsyXSxzKSkubGVuZ3RoPGlbNF0ubGVuZ3RoJiYobD1UcihpWzRdLnN1YnN0cihpWzRdLmxlbmd0aC1sLmxlbmd0aCkpK2wpLG4rPWw7aWYoaT10Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBzPU1hdGgubWlu''@;'; put 'put ''KE1hdGgubWF4KGlbMV0ubGVuZ3RoLGlbNF0ubGVuZ3RoKSw3KSxvKygoZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITApKVswXXx8KGZbMV0/IiI6IjAiKSkrIiAiKyhmWzFdP1UwKGZbMV0scykraVsyXSsiLyIraVszXSthMChmWzJdLHMpOmplKCIgIiwyKnMrMStpWzJdLmxlbmd0aCtpWzNd''@;'; put 'put ''Lmxlbmd0aCkpO2lmKGk9dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gdC5sZW5ndGg8PShuPSIiK3IpLmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWlu''@;'; put 'put ''KGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3JldHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRj''@;'; put 'put ''aCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKHYpe3JldHVybiIwMCwiKyh2Lmxlbmd0aDwzP1lyKDAsMy12Lmxlbmd0aCk6IiIpK3Z9KSsi''@;'; put 'put ''LiIrWXIoMCxpWzFdLmxlbmd0aCk7c3dpdGNoKHQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBkPUV0KCIiK2MpO3JldHVybiIwIiE9PWQ/bytkOiIiO2RlZmF1bHQ6aWYodC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIFFyKGUsdC5zbGljZSgwLHQubGFz''@;'; put 'put ''dEluZGV4T2YoIi4iKSkscikrVHIodC5zbGljZSh0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8Iit0KyJ8Iil9ZnVuY3Rpb24gbHQoZSx0LHIpe3JldHVybigwfHIpPT09cj9RcihlLHQscik6VXIoZSx0LHIpfXZhciBfaT0vXFtbSGhN''@;'; put 'put ''bVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gYnQoZSl7Zm9yKHZhciB0PTAscj0iIixhPSIiO3Q8ZS5sZW5ndGg7KXN3aXRjaChyPWUuY2hhckF0KHQpKXtjYXNlIkciOm4wKGUsdCkmJih0Kz02KSx0Kys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09ZS5jaGFyQ29kZUF0KCsr''@;'; put 'put ''dCkmJnQ8ZS5sZW5ndGg7KTsrK3Q7YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjp0Kz0yO2JyZWFrO2Nhc2UiQCI6Kyt0O2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lLmNoYXJBdCh0KzEpfHwiMiI9PT1lLmNoYXJBdCh0KzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlki''@;'; put 'put ''OmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWUuc3Vic3RyKHQsMykudG9VcHBlckNhc2UoKXx8IkFNL1BN''@;'; put 'put ''Ij09PWUuc3Vic3RyKHQsNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09ZS5zdWJzdHIodCw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrdDticmVhaztjYXNlIlsiOmZvcihhPXI7Il0iIT09ZS5jaGFyQXQodCsrKSYmdDxlLmxlbmd0aDspYSs9ZS5j''@;'; put 'put ''aGFyQXQodCk7aWYoYS5tYXRjaChfaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDt0PGUubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihyPWUuY2hhckF0KCsrdCkpPi0xfHwiXFwiPT1yJiYiLSI9PWUuY2hhckF0KHQrMSkmJiIwIyIuaW5kZXhPZihl''@;'; put 'put ''LmNoYXJBdCh0KzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7ZS5jaGFyQXQoKyt0KT09PXI7KTticmVhaztjYXNlIioiOisrdCwoIiAiPT1lLmNoYXJBdCh0KXx8IioiPT1lLmNoYXJBdCh0KSkmJisrdDticmVhaztjYXNlIigiOmNhc2UiKSI6Kyt0O2JyZWFrO2Nhc2UiMSI6Y2FzZSIy''@;'; put 'put ''IjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7dDxlLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZS5jaGFyQXQoKyt0KSk+LTE7KTticmVhaztkZWZhdWx0OisrdH1yZXR1cm4hMX12YXIgd2k9L1xbKD18Pls9XT98PFs+''@;'; put 'put ''PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIGtpKGUsdCl7aWYobnVsbD09dClyZXR1cm4hMTt2YXIgcj1wYXJzZUZsb2F0KHRbMl0pO3N3aXRjaCh0WzFdKXtjYXNlIj0iOmlmKGU9PXIpcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihlPnIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8''@;'; put 'put ''IjppZihlPHIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoZSE9cilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihlPj1yKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGU8PXIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUnIoZSx0LHIpe251bGw9PXImJihyPXt9KTt2YXIgYT0i''@;'; put 'put ''Ijtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjphPSJtL2QveXkiPT1lJiZyLmRhdGVORj9yLmRhdGVORjplO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oYT0xND09ZSYmci5kYXRlTkY/ci5kYXRlTkY6KG51bGwhPXIudGFibGU/ci50YWJsZTpwZSlbZV0pJiYoYT1yLnRhYmxlJiZy''@;'; put 'put ''LnRhYmxlW2ZpW2VdXXx8cGVbZmlbZV1dKSxudWxsPT1hJiYoYT1CY1tlXXx8IkdlbmVyYWwiKX1pZihuMChhLDApKXJldHVybiBOdCh0LHIpO3QgaW5zdGFuY2VvZiBEYXRlJiYodD1vaSh0LHIuZGF0ZTE5MDQpKTt2YXIgbj1mdW5jdGlvbiBybyhlLHQpe3ZhciByPWZ1bmN0aW9uIFFjKGUp''@;'; put 'put ''e2Zvcih2YXIgdD1bXSxyPSExLGE9MCxuPTA7YTxlLmxlbmd0aDsrK2Epc3dpdGNoKGUuY2hhckNvZGVBdChhKSl7Y2FzZSAzNDpyPSFyO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrYTticmVhaztjYXNlIDU5OnRbdC5sZW5ndGhdPWUuc3Vic3RyKG4sYS1uKSxuPWErMX1pZih0''@;'; put 'put ''W3QubGVuZ3RoXT1lLnN1YnN0cihuKSwhMD09PXIpdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrZSsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiB0fShlKSxhPXIubGVuZ3RoLG49clthLTFdLmluZGV4T2YoIkAiKTtpZihhPDQmJm4+LTEmJi0tYSxyLmxlbmd0aD40KXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IityLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm5bNCw0PT09ci5sZW5ndGh8fG4+LTE/cltyLmxlbmd0aC0xXToiQCJdO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnI9bj4tMT9bIkdl''@;'; put 'put ''bmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsclswXV06W3JbMF0sclswXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAyOnI9bj4tMT9bclswXSxyWzBdLHJbMF0sclsxXV06W3JbMF0sclsxXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAzOnI9bj4tMT9bclswXSxyWzFdLHJbMF0sclsyXV06W3JbMF0s''@;'; put 'put ''clsxXSxyWzJdLCJAIl19dmFyIGk9dD4wP3JbMF06dDwwP3JbMV06clsyXTtpZigtMT09PXJbMF0uaW5kZXhPZigiWyIpJiYtMT09PXJbMV0uaW5kZXhPZigiWyIpKXJldHVyblthLGldO2lmKG51bGwhPXJbMF0ubWF0Y2goL1xbWz08Pl0vKXx8bnVsbCE9clsxXS5tYXRjaCgvXFtbPTw+XS8p''@;'; put 'put ''KXt2YXIgcz1yWzBdLm1hdGNoKHdpKSxmPXJbMV0ubWF0Y2god2kpO3JldHVybiBraSh0LHMpP1thLHJbMF1dOmtpKHQsZik/W2EsclsxXV06W2EscltudWxsIT1zJiZudWxsIT1mPzI6MV1dfXJldHVyblthLGldfShhLHQpO2lmKG4wKG5bMV0pKXJldHVybiBOdCh0LHIpO2lmKCEwPT09dCl0''@;'; put 'put ''PSJUUlVFIjtlbHNlIGlmKCExPT09dCl0PSJGQUxTRSI7ZWxzZSBpZigiIj09PXR8fG51bGw9PXQpcmV0dXJuIiI7cmV0dXJuIGZ1bmN0aW9uIGVvKGUsdCxyLGEpe2Zvcih2YXIgbyxsLGgsbj1bXSxpPSIiLHM9MCxmPSIiLGM9InQiLHg9IkgiO3M8ZS5sZW5ndGg7KXN3aXRjaChmPWUuY2hh''@;'; put 'put ''ckF0KHMpKXtjYXNlIkciOmlmKCFuMChlLHMpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2YrIiBpbiAiK2UpO25bbi5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0scys9NzticmVhaztjYXNlJyInOmZvcihpPSIiOzM0IT09KGg9ZS5jaGFyQ29kZUF0KCsr''@;'; put 'put ''cykpJiZzPGUubGVuZ3RoOylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpO25bbi5sZW5ndGhdPXt0OiJ0Iix2Oml9LCsrczticmVhaztjYXNlIlxcIjp2YXIgZD1lLmNoYXJBdCgrK3MpO25bbi5sZW5ndGhdPXt0OiIoIj09PWR8fCIpIj09PWQ/ZDoidCIsdjpkfSwrK3M7YnJlYWs7Y2FzZSJf''@;'; put 'put ''IjpuW24ubGVuZ3RoXT17dDoidCIsdjoiICJ9LHMrPTI7YnJlYWs7Y2FzZSJAIjpuW24ubGVuZ3RoXT17dDoiVCIsdjp0fSwrK3M7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWUuY2hhckF0KHMrMSl8fCIyIj09PWUuY2hhckF0KHMrMSkpe2lmKG51bGw9PW8mJm51bGw9PShvPWt0''@;'; put 'put ''KHQsciwiMiI9PT1lLmNoYXJBdChzKzEpKSkpcmV0dXJuIiI7bltuLmxlbmd0aF09e3Q6IlgiLHY6ZS5zdWJzdHIocywyKX0sYz1mLHMrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Zj1mLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNl''@;'; put 'put ''ImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjppZih0PDB8fG51bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO2ZvcihpPWY7KytzPGUubGVuZ3RoJiZlLmNoYXJBdChzKS50b0xvd2VyQ2FzZSgpPT09ZjspaSs9ZjsibSI9PT1mJiYiaCI9PT1jLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkmJihmPSJNIiksImgiPT09ZiYmKGY9eCksbltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciB1PXt0OmYsdjpmfTtpZihudWxsPT1vJiYobz1rdCh0LHIpKSwiQS9QIj09PWUuc3Vic3RyKHMsMykudG9VcHBl''@;'; put 'put ''ckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQIjoiQSIpLHUudD0iVCIseD0iaCIscys9Myk6IkFNL1BNIj09PWUuc3Vic3RyKHMsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQTSI6IkFNIiksdS50PSJUIixzKz01LHg9ImgiKToiXHU0ZTBhXHU1MzQ4''@;'; put 'put ''L1x1NGUwYlx1NTM0OCI9PT1lLnN1YnN0cihzLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW8mJih1LnY9by5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksdS50PSJUIixzKz01LHg9ImgiKToodS50PSJ0IiwrK3MpLG51bGw9PW8mJiJUIj09PXUudClyZXR1cm4iIjtuW24u''@;'; put 'put ''bGVuZ3RoXT11LGM9ZjticmVhaztjYXNlIlsiOmZvcihpPWY7Il0iIT09ZS5jaGFyQXQocysrKSYmczxlLmxlbmd0aDspaSs9ZS5jaGFyQXQocyk7aWYoIl0iIT09aS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcraSsifCI7aWYoaS5tYXRjaChfaSkpe2lmKG51''@;'; put 'put ''bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO25bbi5sZW5ndGhdPXt0OiJaIix2OmkudG9Mb3dlckNhc2UoKX0sYz1pLmNoYXJBdCgxKX1lbHNlIGkuaW5kZXhPZigiJCIpPi0xJiYoaT0oaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixidChlKXx8KG5bbi5s''@;'; put 'put ''ZW5ndGhdPXt0OiJ0Iix2Oml9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1vKXtmb3IoaT1mOysrczxlLmxlbmd0aCYmIjAiPT09KGY9ZS5jaGFyQXQocykpOylpKz1mO25bbi5sZW5ndGhdPXt0OiJzIix2Oml9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoaT1mOysrczxlLmxlbmd0aCYm''@;'; put 'put ''IjAjPy4sRSstJSIuaW5kZXhPZihmPWUuY2hhckF0KHMpKT4tMTspaSs9ZjtuW24ubGVuZ3RoXT17dDoibiIsdjppfTticmVhaztjYXNlIj8iOmZvcihpPWY7ZS5jaGFyQXQoKytzKT09PWY7KWkrPWY7bltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIioiOisrcywoIiAiPT1l''@;'; put 'put ''LmNoYXJBdChzKXx8IioiPT1lLmNoYXJBdChzKSkmJisrczticmVhaztjYXNlIigiOmNhc2UiKSI6bltuLmxlbmd0aF09e3Q6MT09PWE/InQiOmYsdjpmfSwrK3M7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNh''@;'; put 'put ''c2UiOSI6Zm9yKGk9ZjtzPGUubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihlLmNoYXJBdCgrK3MpKT4tMTspaSs9ZS5jaGFyQXQocyk7bltuLmxlbmd0aF09e3Q6IkQiLHY6aX07YnJlYWs7Y2FzZSIgIjpuW24ubGVuZ3RoXT17dDpmLHY6Zn0sKytzO2JyZWFrO2Nhc2UiJCI6bltuLmxl''@;'; put 'put ''bmd0aF09e3Q6InQiLHY6IiQifSwrK3M7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoZikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrZisiIGluICIrZSk7bltuLmxlbmd0''@;'; put 'put ''aF09e3Q6InQiLHY6Zn0sKytzfXZhciBULHA9MCxrPTA7Zm9yKHM9bi5sZW5ndGgtMSxjPSJ0IjtzPj0wOy0tcylzd2l0Y2gobltzXS50KXtjYXNlImgiOmNhc2UiSCI6bltzXS50PXgsYz0iaCIscDwxJiYocD0xKTticmVhaztjYXNlInMiOihUPW5bc10udi5tYXRjaCgvXC4wKyQvKSkmJihr''@;'; put 'put ''PU1hdGgubWF4KGssVFswXS5sZW5ndGgtMSkpLHA8MyYmKHA9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpjPW5bc10udDticmVhaztjYXNlIm0iOiJzIj09PWMmJihuW3NdLnQ9Ik0iLHA8MiYmKHA9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpwPDEmJm5bc10u''@;'; put 'put ''di5tYXRjaCgvW0hoXS8pJiYocD0xKSxwPDImJm5bc10udi5tYXRjaCgvW01tXS8pJiYocD0yKSxwPDMmJm5bc10udi5tYXRjaCgvW1NzXS8pJiYocD0zKX1zd2l0Y2gocCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnU+PS41JiYoby51PTAsKytvLlMpLG8uUz49NjAmJihvLlM9MCwrK28uTSks''@;'; put 'put ''by5NPj02MCYmKG8uTT0wLCsrby5IKTticmVhaztjYXNlIDI6by51Pj0uNSYmKG8udT0wLCsrby5TKSxvLlM+PTYwJiYoby5TPTAsKytvLk0pfXZhciBOLGc9IiI7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylzd2l0Y2gobltzXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJy''@;'; put 'put ''ZWFrO2Nhc2UiWCI6bltzXS52PSIiLG5bc10udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpuW3NdLnY9R2MobltzXS50LmNoYXJDb2RlQXQoMCksbltzXS52LG8sayksbltz''@;'; put 'put ''XS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKE49cysxO251bGwhPW5bTl0mJigiPyI9PT0oZj1uW05dLnQpfHwiRCI9PT1mfHwoIiAiPT09Znx8InQiPT09ZikmJm51bGwhPW5bTisxXSYmKCI/Ij09PW5bTisxXS50fHwidCI9PT1uW04rMV0udCYmIi8iPT09bltOKzFdLnYpfHwi''@;'; put 'put ''KCI9PT1uW3NdLnQmJigiICI9PT1mfHwibiI9PT1mfHwiKSI9PT1mKXx8InQiPT09ZiYmKCIvIj09PW5bTl0udnx8IiAiPT09bltOXS52JiZudWxsIT1uW04rMV0mJiI/Ij09bltOKzFdLnQpKTspbltzXS52Kz1uW05dLnYsbltOXT17djoiIix0OiI7In0sKytOO2crPW5bc10udixzPU4tMTti''@;'; put 'put ''cmVhaztjYXNlIkciOm5bc10udD0idCIsbltzXS52PU50KHQscil9dmFyIEkseSxNPSIiO2lmKGcubGVuZ3RoPjApezQwPT1nLmNoYXJDb2RlQXQoMCk/KEk9dDwwJiY0NT09PWcuY2hhckNvZGVBdCgwKT8tdDp0LHk9bHQoIm4iLGcsSSkpOih5PWx0KCJuIixnLEk9dDwwJiZhPjE/LXQ6dCks''@;'; put 'put ''STwwJiZuWzBdJiYidCI9PW5bMF0udCYmKHk9eS5zdWJzdHIoMSksblswXS52PSItIituWzBdLnYpKSxOPXkubGVuZ3RoLTE7dmFyIFA9bi5sZW5ndGg7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylpZihudWxsIT1uW3NdJiYidCIhPW5bc10udCYmbltzXS52LmluZGV4T2YoIi4iKT4tMSl7UD1z''@;'; put 'put ''O2JyZWFrfXZhciBSPW4ubGVuZ3RoO2lmKFA9PT1uLmxlbmd0aCYmLTE9PT15LmluZGV4T2YoIkUiKSl7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wOy0tcyludWxsPT1uW3NdfHwtMT09PSJuPyIuaW5kZXhPZihuW3NdLnQpfHwoTj49bltzXS52Lmxlbmd0aC0xP25bc10udj15LnN1YnN0cigxKyhO''@;'; put 'put ''LT1uW3NdLnYubGVuZ3RoKSxuW3NdLnYubGVuZ3RoKTpOPDA/bltzXS52PSIiOihuW3NdLnY9eS5zdWJzdHIoMCxOKzEpLE49LTEpLG5bc10udD0idCIsUj1zKTtOPj0wJiZSPG4ubGVuZ3RoJiYobltSXS52PXkuc3Vic3RyKDAsTisxKStuW1JdLnYpfWVsc2UgaWYoUCE9PW4ubGVuZ3RoJiYt''@;'; put 'put ''MT09PXkuaW5kZXhPZigiRSIpKXtmb3IoTj15LmluZGV4T2YoIi4iKS0xLHM9UDtzPj0wOy0tcylpZihudWxsIT1uW3NdJiYtMSE9PSJuPyIuaW5kZXhPZihuW3NdLnQpKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhPZigiLiIpLTE6bltzXS52Lmxl''@;'; put 'put ''bmd0aC0xLE09bltzXS52LnN1YnN0cihsKzEpO2w+PTA7LS1sKU4+PTAmJigiMCI9PT1uW3NdLnYuY2hhckF0KGwpfHwiIyI9PT1uW3NdLnYuY2hhckF0KGwpKSYmKE09eS5jaGFyQXQoTi0tKStNKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c31mb3IoTj49MCYmUjxuLmxlbmd0aCYmKG5bUl0u''@;'; put 'put ''dj15LnN1YnN0cigwLE4rMSkrbltSXS52KSxOPXkuaW5kZXhPZigiLiIpKzEscz1QO3M8bi5sZW5ndGg7KytzKWlmKG51bGwhPW5bc10mJigtMSE9PSJuPygiLmluZGV4T2YobltzXS50KXx8cz09PVApKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhP''@;'; put 'put ''ZigiLiIpKzE6MCxNPW5bc10udi5zdWJzdHIoMCxsKTtsPG5bc10udi5sZW5ndGg7KytsKU48eS5sZW5ndGgmJihNKz15LmNoYXJBdChOKyspKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c319fWZvcihzPTA7czxuLmxlbmd0aDsrK3MpbnVsbCE9bltzXSYmIm4/Ii5pbmRleE9mKG5bc10udCk+''@;'; put 'put ''LTEmJihuW3NdLnY9bHQobltzXS50LG5bc10udixJPWE+MSYmdDwwJiZzPjAmJiItIj09PW5bcy0xXS52Py10OnQpLG5bc10udD0idCIpO3ZhciBWPSIiO2ZvcihzPTA7cyE9PW4ubGVuZ3RoOysrcyludWxsIT1uW3NdJiYoVis9bltzXS52KTtyZXR1cm4gVn0oblsxXSx0LHIsblswXSl9ZnVu''@;'; put 'put ''Y3Rpb24gZXQoZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpe3Q9K3R8fC0xO2Zvcih2YXIgcj0wO3I8MzkyOysrcilpZihudWxsIT1wZVtyXSl7aWYocGVbcl09PWUpe3Q9cjticmVha319ZWxzZSB0PDAmJih0PXIpO3Q8MCYmKHQ9MzkxKX1yZXR1cm4gcGVbdF09ZSx0fWZ1bmN0aW9uIHRh''@;'; put 'put ''KCl7cGU9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGV8fChlPXt9KSxlWzBdPSJHZW5lcmFsIixlWzFdPSIwIixlWzJdPSIwLjAwIixlWzNdPSIjLCMjMCIsZVs0XT0iIywjIzAuMDAiLGVbOV09IjAlIixlWzEwXT0iMC4wMCUiLGVbMTFdPSIwLjAwRSswMCIsZVsxMl09IiMgPy8/IixlWzEzXT0i''@;'; put 'put ''IyA/Py8/PyIsZVsxNF09Im0vZC95eSIsZVsxNV09ImQtbW1tLXl5IixlWzE2XT0iZC1tbW0iLGVbMTddPSJtbW0teXkiLGVbMThdPSJoOm1tIEFNL1BNIixlWzE5XT0iaDptbTpzcyBBTS9QTSIsZVsyMF09Img6bW0iLGVbMjFdPSJoOm1tOnNzIixlWzIyXT0ibS9kL3l5IGg6bW0iLGVbMzdd''@;'; put 'put ''PSIjLCMjMCA7KCMsIyMwKSIsZVszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGVbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixlWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixlWzQ1XT0ibW06c3MiLGVbNDZdPSJbaF06bW06c3MiLGVbNDddPSJtbXNzLjAiLGVbNDhdPSIjIzAu''@;'; put 'put ''MEUrMCIsZVs0OV09IkAiLGVbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsZX0oKX12YXIgYW89ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzon''@;'; put 'put ''IiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6''@;'; put 'put ''Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtf''@;'; put 'put ''KCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9k''@;'; put 'put ''L3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7''@;'; put 'put ''W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5''@;'; put 'put ''Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LEVpPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2csc289ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgZT17dmVyc2lvbjoiMS4yLjAifSxyPWZ1bmN0aW9uIHQoKXtmb3IodmFyIHk9MCxQPW5ldyBBcnJheSgyNTYpLFI9MDsyNTYhPVI7KytSKVBbUl09eT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9Uik/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMw''@;'; put 'put ''NjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MTty''@;'; put 'put ''ZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFApOlB9KCksbj1mdW5jdGlvbiBhKHkpe3ZhciBQPTAsUj0wLFY9MCxYPXR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheSg0MDk2KTpuZXcgQXJyYXkoNDA5Nik7Zm9yKFY9MDsyNTYhPVY7KytWKVhb''@;'; put 'put ''Vl09eVtWXTtmb3IoVj0wOzI1NiE9VjsrK1YpZm9yKFI9eVtWXSxQPTI1NitWO1A8NDA5NjtQKz0yNTYpUj1YW1BdPVI+Pj44XnlbMjU1JlJdO3ZhciBiPVtdO2ZvcihWPTE7MTYhPVY7KytWKWJbVi0xXT10eXBlb2YgSW50MzJBcnJheTwidSI/WC5zdWJhcnJheSgyNTYqViwyNTYqVisyNTYp''@;'; put 'put ''Olguc2xpY2UoMjU2KlYsMjU2KlYrMjU2KTtyZXR1cm4gYn0ociksaT1uWzBdLHM9blsxXSxmPW5bMl0sYz1uWzNdLG89bls0XSxsPW5bNV0saD1uWzZdLHg9bls3XSxkPW5bOF0sdj1uWzldLHU9blsxMF0scD1uWzExXSxrPW5bMTJdLFQ9blsxM10sZz1uWzE0XTtyZXR1cm4gZS50YWJsZT1y''@;'; put 'put ''LGUuYnN0cj1mdW5jdGlvbiBOKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoO1Y8WDspUj1SPj4+OF5yWzI1NSYoUl55LmNoYXJDb2RlQXQoVisrKSldO3JldHVybn5SfSxlLmJ1Zj1mdW5jdGlvbiBNKHksUCl7Zm9yKHZhciBSPX5QLFY9eS5sZW5ndGgtMTUsWD0wO1g8VjspUj1n''@;'; put 'put ''W3lbWCsrXV4yNTUmUl1eVFt5W1grK11eUj4+OCYyNTVdXmtbeVtYKytdXlI+PjE2JjI1NV1ecFt5W1grK11eUj4+PjI0XV51W3lbWCsrXV1edlt5W1grK11dXmRbeVtYKytdXV54W3lbWCsrXV1eaFt5W1grK11dXmxbeVtYKytdXV5vW3lbWCsrXV1eY1t5W1grK11dXmZbeVtYKytdXV5zW3lb''@;'; put 'put ''WCsrXV1eaVt5W1grK11dXnJbeVtYKytdXTtmb3IoVis9MTU7WDxWOylSPVI+Pj44XnJbMjU1JihSXnlbWCsrXSldO3JldHVybn5SfSxlLnN0cj1mdW5jdGlvbiBJKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoLGI9MCxlZT0wO1Y8WDspKGI9eS5jaGFyQ29kZUF0KFYrKykpPDEy''@;'; put 'put ''OD9SPVI+Pj44XnJbMjU1JihSXmIpXTpiPDIwNDg/Uj0oUj1SPj4+OF5yWzI1NSYoUl4oMTkyfGI+PjYmMzEpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmIpKV06Yj49NTUyOTYmJmI8NTczNDQ/KGI9NjQrKDEwMjMmYiksZWU9MTAyMyZ5LmNoYXJDb2RlQXQoVisrKSxSPShSPShSPShSPVI+''@;'; put 'put ''Pj44XnJbMjU1JihSXigyNDB8Yj4+OCY3KSldKT4+PjheclsyNTUmKFJeKDEyOHxiPj4yJjYzKSldKT4+PjheclsyNTUmKFJeKDEyOHxlZT4+NiYxNXwoMyZiKTw8NCkpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmZWUpKV0pOlI9KFI9KFI9Uj4+PjheclsyNTUmKFJeKDIyNHxiPj4xMiYxNSkp''@;'; put 'put ''XSk+Pj44XnJbMjU1JihSXigxMjh8Yj4+NiY2MykpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmYikpXTtyZXR1cm5+Un0sZX0oKSx2ZT1mdW5jdGlvbigpe3ZhciBjLHQ9e307ZnVuY3Rpb24gYShtKXtpZigiLyI9PW0uY2hhckF0KG0ubGVuZ3RoLTEpKXJldHVybi0xPT09bS5zbGljZSgwLC0x''@;'; put 'put ''KS5pbmRleE9mKCIvIik/bTphKG0uc2xpY2UoMCwtMSkpO3ZhciBFPW0ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUU/bTptLnNsaWNlKDAsRSsxKX1mdW5jdGlvbiBuKG0pe2lmKCIvIj09bS5jaGFyQXQobS5sZW5ndGgtMSkpcmV0dXJuIG4obS5zbGljZSgwLC0xKSk7dmFyIEU9bS5s''@;'; put 'put ''YXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09RT9tOm0uc2xpY2UoRSsxKX1mdW5jdGlvbiBpKG0sRSl7InN0cmluZyI9PXR5cGVvZiBFJiYoRT1uZXcgRGF0ZShFKSk7dmFyIF89RS5nZXRIb3VycygpO189KF89Xzw8NnxFLmdldE1pbnV0ZXMoKSk8PDV8RS5nZXRTZWNvbmRzKCk+Pj4xLG0u''@;'; put 'put ''d3JpdGVfc2hpZnQoMixfKTt2YXIgdz1FLmdldEZ1bGxZZWFyKCktMTk4MDt3PSh3PXc8PDR8RS5nZXRNb250aCgpKzEpPDw1fEUuZ2V0RGF0ZSgpLG0ud3JpdGVfc2hpZnQoMix3KX1mdW5jdGlvbiBmKG0pe2hyKG0sMCk7Zm9yKHZhciBFPXt9LF89MDttLmw8PW0ubGVuZ3RoLTQ7KXt2YXIg''@;'; put 'put ''dz1tLnJlYWRfc2hpZnQoMiksUz1tLnJlYWRfc2hpZnQoMiksRj1tLmwrUyxMPXt9OzIxNTg5PT09dyYmKDEmKF89bS5yZWFkX3NoaWZ0KDEpKSYmKEwubXRpbWU9bS5yZWFkX3NoaWZ0KDQpKSxTPjUmJigyJl8mJihMLmF0aW1lPW0ucmVhZF9zaGlmdCg0KSksNCZfJiYoTC5jdGltZT1tLnJl''@;'; put 'put ''YWRfc2hpZnQoNCkpKSxMLm10aW1lJiYoTC5tdD1uZXcgRGF0ZSgxZTMqTC5tdGltZSkpKSxtLmw9RixFW3ddPUx9cmV0dXJuIEV9ZnVuY3Rpb24gbygpe3JldHVybiBjfHwoYz17fSl9ZnVuY3Rpb24gbChtLEUpe2lmKDgwPT1tWzBdJiY3NT09bVsxXSlyZXR1cm4gQ2MobSxFKTtpZigxMDk9''@;'; put 'put ''PSgzMnxtWzBdKSYmMTA1PT0oMzJ8bVsxXSkpcmV0dXJuIGZ1bmN0aW9uIE5nKG0sRSl7aWYoIm1pbWUtdmVyc2lvbjoiIT1jZShtLnNsaWNlKDAsMTMpKS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUFEIGhlYWRlciIpO3ZhciBfPUUmJkUucm9vdHx8IiIs''@;'; put 'put ''dz0oU2UmJkJ1ZmZlci5pc0J1ZmZlcihtKT9tLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShtKSkuc3BsaXQoIlxyXG4iKSxTPTAsRj0iIjtmb3IoUz0wO1M8dy5sZW5ndGg7KytTKWlmKC9eQ29udGVudC1Mb2NhdGlvbjovaS50ZXN0KEY9d1tTXSkmJihGPUYuc2xpY2UoRi5pbmRleE9mKCJmaWxl''@;'; put 'put ''IikpLF98fChfPUYuc2xpY2UoMCxGLmxhc3RJbmRleE9mKCIvIikrMSkpLEYuc2xpY2UoMCxfLmxlbmd0aCkhPV8pKWZvcig7Xy5sZW5ndGg+MCYmKF89KF89Xy5zbGljZSgwLF8ubGVuZ3RoLTEpKS5zbGljZSgwLF8ubGFzdEluZGV4T2YoIi8iKSsxKSxGLnNsaWNlKDAsXy5sZW5ndGgpIT1f''@;'; put 'put ''KTspO3ZhciBMPSh3WzFdfHwiIikubWF0Y2goL2JvdW5kYXJ5PSIoLio/KSIvKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoIk1BRCBjYW5ub3QgZmluZCBib3VuZGFyeSIpO3ZhciB6PSItLSIrKExbMV18fCIiKSxIPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTt5KEgpO3ZhciBxLG5lPTA7''@;'; put 'put ''Zm9yKFM9MDtTPHcubGVuZ3RoOysrUyl7dmFyIGhlPXdbU107aGUhPT16JiZoZSE9PXorIi0tInx8KG5lKysmJlJnKEgsdy5zbGljZShxLFMpLF8pLHE9Uyl9cmV0dXJuIEh9KG0sRSk7aWYobS5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK20ubGVuZ3RoKyIg''@;'; put 'put ''PCA1MTIiKTt2YXIgXyxTLEYsTCx6LFcsdz01MTIsQj1bXSxIPW0uc2xpY2UoMCw1MTIpO2hyKEgsMCk7dmFyIHE9ZnVuY3Rpb24gaChtKXtpZig4MD09bVttLmxdJiY3NT09bVttLmwrMV0pcmV0dXJuWzAsMF07bS5jaGsobGUsIkhlYWRlciBTaWduYXR1cmU6ICIpLG0ubCs9MTY7dmFyIEU9''@;'; put 'put ''bS5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bbS5yZWFkX3NoaWZ0KDIsInUiKSxFXX0oSCk7c3dpdGNoKF89cVswXSl7Y2FzZSAzOnc9NTEyO2JyZWFrO2Nhc2UgNDp3PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PXFbMV0pcmV0dXJuIENjKG0sRSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIitfKX01MTIhPT13JiZocihIPW0uc2xpY2UoMCx3KSwyOCk7dmFyIG5lPW0uc2xpY2UoMCx3KTshZnVuY3Rpb24geChtLEUpe3ZhciBfO3N3aXRjaChtLmwrPTIsXz1tLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1FKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK18pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9RSl0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrXyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlm''@;'; put 'put ''dDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIitfKX1tLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxtLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShILF8pO3ZhciBoZT1ILnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1fJiYwIT09aGUpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK2hlKTtILmwrPTQsTD1ILnJlYWRfc2hpZnQoNCwiaSIpLEgubCs9NCxILmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksej1ILnJlYWRfc2hpZnQoNCwiaSIpLFM9SC5yZWFkX3NoaWZ0KDQs''@;'; put 'put ''ImkiKSxXPUgucmVhZF9zaGlmdCg0LCJpIiksRj1ILnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgaWU9LTEsZmU9MDtmZTwxMDkmJiEoKGllPUgucmVhZF9zaGlmdCg0LCJpIikpPDApOysrZmUpQltmZV09aWU7dmFyIF9lPWZ1bmN0aW9uIGQobSxFKXtmb3IodmFyIF89TWF0aC5jZWlsKG0u''@;'; put 'put ''bGVuZ3RoL0UpLTEsdz1bXSxTPTE7UzxfOysrUyl3W1MtMV09bS5zbGljZShTKkUsKFMrMSkqRSk7cmV0dXJuIHdbXy0xXT1tLnNsaWNlKF8qRSksd30obSx3KTtwKFcsRixfZSx3LEIpO3ZhciBWZT1mdW5jdGlvbiBUKG0sRSxfLHcpe3ZhciBTPW0ubGVuZ3RoLEY9W10sTD1bXSx6PVtdLFc9''@;'; put 'put ''W10sQj13LTEsSD0wLHE9MCxuZT0wLGhlPTA7Zm9yKEg9MDtIPFM7KytIKWlmKHo9W10sKG5lPUgrRSk+PVMmJihuZS09UyksIUxbbmVdKXtXPVtdO3ZhciBpZT1bXTtmb3IocT1uZTtxPj0wOyl7aWVbcV09ITAsTFtxXT0hMCx6W3oubGVuZ3RoXT1xLFcucHVzaChtW3FdKTt2YXIgZmU9X1tN''@;'; put 'put ''YXRoLmZsb29yKDQqcS93KV07aWYodzw0KyhoZT00KnEmQikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitxKyIgNCAiK3cpO2lmKCFtW2ZlXXx8aWVbcT1MdChtW2ZlXSxoZSldKWJyZWFrfUZbbmVdPXtub2Rlczp6LGRhdGE6emkoW1ddKX19cmV0dXJuIEZ9KF9l''@;'; put 'put ''LEwsQix3KTtWZVtMXS5uYW1lPSIhRGlyZWN0b3J5IixTPjAmJnohPT1lZSYmKFZlW3pdLm5hbWU9IiFNaW5pRkFUIiksVmVbQlswXV0ubmFtZT0iIUZBVCIsVmUuZmF0X2FkZHJzPUIsVmUuc3N6PXc7dmFyIG5yPVtdLEJyPVtdLFphPVtdOyhmdW5jdGlvbiBnKG0sRSxfLHcsUyxGLEwseil7''@;'; put 'put ''Zm9yKHZhciBoZSxXPTAsQj13Lmxlbmd0aD8yOjAsSD1FW21dLmRhdGEscT0wLG5lPTA7cTxILmxlbmd0aDtxKz0xMjgpe3ZhciBpZT1ILnNsaWNlKHEscSsxMjgpO2hyKGllLDY0KSxuZT1pZS5yZWFkX3NoaWZ0KDIpLGhlPXUwKGllLDAsbmUtQiksdy5wdXNoKGhlKTt2YXIgZmU9e25hbWU6''@;'; put 'put ''aGUsdHlwZTppZS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmllLnJlYWRfc2hpZnQoMSksTDppZS5yZWFkX3NoaWZ0KDQsImkiKSxSOmllLnJlYWRfc2hpZnQoNCwiaSIpLEM6aWUucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6aWUucmVhZF9zaGlmdCgxNiksc3RhdGU6aWUucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''Iiksc3RhcnQ6MCxzaXplOjB9OzAhPT1pZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpJiYoZmUuY3Q9TihpZSxpZS5sLTgpKSwwIT09aWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQo''@;'; put 'put ''MikraWUucmVhZF9zaGlmdCgyKSYmKGZlLm10PU4oaWUsaWUubC04KSksZmUuc3RhcnQ9aWUucmVhZF9zaGlmdCg0LCJpIiksZmUuc2l6ZT1pZS5yZWFkX3NoaWZ0KDQsImkiKSxmZS5zaXplPDAmJmZlLnN0YXJ0PDAmJihmZS5zaXplPWZlLnR5cGU9MCxmZS5zdGFydD1lZSxmZS5uYW1lPSIi''@;'; put 'put ''KSw1PT09ZmUudHlwZT8oVz1mZS5zdGFydCxTPjAmJlchPT1lZSYmKEVbV10ubmFtZT0iIVN0cmVhbURhdGEiKSk6ZmUuc2l6ZT49NDA5Nj8oZmUuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1FW2ZlLnN0YXJ0XSYmKEVbZmUuc3RhcnRdPWsoXyxmZS5zdGFydCxFLmZhdF9hZGRycyxFLnNzeikp''@;'; put 'put ''LEVbZmUuc3RhcnRdLm5hbWU9ZmUubmFtZSxmZS5jb250ZW50PUVbZmUuc3RhcnRdLmRhdGEuc2xpY2UoMCxmZS5zaXplKSk6KGZlLnN0b3JhZ2U9Im1pbmlmYXQiLGZlLnNpemU8MD9mZS5zaXplPTA6VyE9PWVlJiZmZS5zdGFydCE9PWVlJiZFW1ddJiYoZmUuY29udGVudD11KGZlLEVbV10u''@;'; put 'put ''ZGF0YSwoRVt6XXx8e30pLmRhdGEpKSksZmUuY29udGVudCYmaHIoZmUuY29udGVudCwwKSxGW2hlXT1mZSxMLnB1c2goZmUpfX0pKEwsVmUsX2UsbnIsUyx7fSxCcix6KSxmdW5jdGlvbiB2KG0sRSxfKXtmb3IodmFyIHc9MCxTPTAsRj0wLEw9MCx6PTAsVz1fLmxlbmd0aCxCPVtdLEg9W107''@;'; put 'put ''dzxXOysrdylCW3ddPUhbd109dyxFW3ddPV9bd107Zm9yKDt6PEgubGVuZ3RoOysreilTPW1bdz1IW3pdXS5MLEY9bVt3XS5SLEw9bVt3XS5DLEJbd109PT13JiYoLTEhPT1TJiZCW1NdIT09UyYmKEJbd109QltTXSksLTEhPT1GJiZCW0ZdIT09RiYmKEJbd109QltGXSkpLC0xIT09TCYmKEJb''@;'; put 'put ''TF09dyksLTEhPT1TJiZ3IT1CW3ddJiYoQltTXT1CW3ddLEgubGFzdEluZGV4T2YoUyk8eiYmSC5wdXNoKFMpKSwtMSE9PUYmJnchPUJbd10mJihCW0ZdPUJbd10sSC5sYXN0SW5kZXhPZihGKTx6JiZILnB1c2goRikpO2Zvcih3PTE7dzxXOysrdylCW3ddPT09dyYmKC0xIT09RiYmQltGXSE9''@;'; put 'put ''PUY/Qlt3XT1CW0ZdOi0xIT09UyYmQltTXSE9PVMmJihCW3ddPUJbU10pKTtmb3Iodz0xO3c8VzsrK3cpaWYoMCE9PW1bd10udHlwZSl7aWYoKHo9dykhPUJbel0pZG97RVt3XT1FW3o9Qlt6XV0rIi8iK0Vbd119d2hpbGUoMCE9PXomJi0xIT09Qlt6XSYmeiE9Qlt6XSk7Qlt3XT0tMX1mb3Io''@;'; put 'put ''RVswXSs9Ii8iLHc9MTt3PFc7Kyt3KTIhPT1tW3ddLnR5cGUmJihFW3ddKz0iLyIpfShCcixaYSxuciksbnIuc2hpZnQoKTt2YXIgUWE9e0ZpbGVJbmRleDpCcixGdWxsUGF0aHM6WmF9O3JldHVybiBFJiZFLnJhdyYmKFFhLnJhdz17aGVhZGVyOm5lLHNlY3RvcnM6X2V9KSxRYX1mdW5jdGlv''@;'; put 'put ''biB1KG0sRSxfKXtmb3IodmFyIFM9bS5zaXplLEY9W10sTD1tLnN0YXJ0O18mJlM+MCYmTD49MDspRi5wdXNoKEUuc2xpY2UoTCpiLEwqYitiKSksUy09YixMPUx0KF8sNCpMKTtyZXR1cm4gMD09PUYubGVuZ3RoP0coMCk6ZnIoRikuc2xpY2UoMCxtLnNpemUpfWZ1bmN0aW9uIHAobSxFLF8s''@;'; put 'put ''dyxTKXt2YXIgRj1lZTtpZihtPT09ZWUpe2lmKDAhPT1FKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW0pe3ZhciBMPV9bbV0sej0odz4+PjIpLTE7aWYoIUwpcmV0dXJuO2Zvcih2YXIgVz0wO1c8eiYmKEY9THQoTCw0''@;'; put 'put ''KlcpKSE9PWVlOysrVylTLnB1c2goRik7cChMdChMLHctNCksRS0xLF8sdyxTKX19ZnVuY3Rpb24gayhtLEUsXyx3LFMpe3ZhciBGPVtdLEw9W107U3x8KFM9W10pO3ZhciB6PXctMSxXPTAsQj0wO2ZvcihXPUU7Vz49MDspe1NbV109ITAsRltGLmxlbmd0aF09VyxMLnB1c2gobVtXXSk7dmFy''@;'; put 'put ''IEg9X1tNYXRoLmZsb29yKDQqVy93KV07aWYodzw0KyhCPTQqVyZ6KSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1crIiA0ICIrdyk7aWYoIW1bSF0pYnJlYWs7Vz1MdChtW0hdLEIpfXJldHVybntub2RlczpGLGRhdGE6emkoW0xdKX19ZnVuY3Rpb24gTihtLEUp''@;'; put 'put ''e3JldHVybiBuZXcgRGF0ZSgxZTMqKGNyKG0sRSs0KS8xZTcqTWF0aC5wb3coMiwzMikrY3IobSxFKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB5KG0sRSl7dmFyIF89RXx8e30sdz1fLnJvb3R8fCJSb290IEVudHJ5IjtpZihtLkZ1bGxQYXRoc3x8KG0uRnVsbFBhdGhzPVtdKSxtLkZp''@;'; put 'put ''bGVJbmRleHx8KG0uRmlsZUluZGV4PVtdKSxtLkZ1bGxQYXRocy5sZW5ndGghPT1tLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1tLkZ1bGxQYXRocy5sZW5ndGgmJihtLkZ1bGxQYXRoc1swXT13KyIvIixtLkZpbGVJ''@;'; put 'put ''bmRleFswXT17bmFtZTp3LHR5cGU6NX0pLF8uQ0xTSUQmJihtLkZpbGVJbmRleFswXS5jbHNpZD1fLkNMU0lEKSxmdW5jdGlvbiBQKG0pe3ZhciBFPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQobSwiLyIrRSkpe3ZhciBfPUcoNCk7X1swXT01NSxfWzFdPV9bM109NTAsX1syXT01NCxtLkZp''@;'; put 'put ''bGVJbmRleC5wdXNoKHtuYW1lOkUsdHlwZToyLGNvbnRlbnQ6XyxzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtLkZ1bGxQYXRocy5wdXNoKG0uRnVsbFBhdGhzWzBdK0UpLFIobSl9fShtKX1mdW5jdGlvbiBSKG0sRSl7eShtKTtmb3IodmFyIF89ITEsdz0hMSxTPW0uRnVsbFBhdGhzLmxlbmd0''@;'; put 'put ''aC0xO1M+PTA7LS1TKXt2YXIgRj1tLkZpbGVJbmRleFtTXTtzd2l0Y2goRi50eXBlKXtjYXNlIDA6dz9fPSEwOihtLkZpbGVJbmRleC5wb3AoKSxtLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6dz0hMCxpc05hTihGLlIqRi5MKkYuQykmJihfPSEwKSxGLlI+''@;'; put 'put ''LTEmJkYuTD4tMSYmRi5SPT1GLkwmJihfPSEwKTticmVhaztkZWZhdWx0Ol89ITB9fWlmKF98fEUpe3ZhciBMPW5ldyBEYXRlKDE5ODcsMSwxOSksej0wLFc9T2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlKG51bGwpOnt9LEI9W107Zm9yKFM9MDtTPG0uRnVsbFBhdGhzLmxlbmd0aDsrK1Mp''@;'; put 'put ''V1ttLkZ1bGxQYXRoc1tTXV09ITAsMCE9PW0uRmlsZUluZGV4W1NdLnR5cGUmJkIucHVzaChbbS5GdWxsUGF0aHNbU10sbS5GaWxlSW5kZXhbU11dKTtmb3IoUz0wO1M8Qi5sZW5ndGg7KytTKXt2YXIgSD1hKEJbU11bMF0pOyh3PVdbSF0pfHwoQi5wdXNoKFtILHtuYW1lOm4oSCkucmVwbGFj''@;'; put 'put ''ZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpkZSxjdDpMLG10OkwsY29udGVudDpudWxsfV0pLFdbSF09ITApfWZvcihCLnNvcnQoZnVuY3Rpb24oaGUsaWUpe3JldHVybiBmdW5jdGlvbiByKG0sRSl7Zm9yKHZhciBfPW0uc3BsaXQoIi8iKSx3PUUuc3BsaXQoIi8iKSxTPTAsRj0wLEw9TWF0aC5t''@;'; put 'put ''aW4oXy5sZW5ndGgsdy5sZW5ndGgpO1M8TDsrK1Mpe2lmKEY9X1tTXS5sZW5ndGgtd1tTXS5sZW5ndGgpcmV0dXJuIEY7aWYoX1tTXSE9d1tTXSlyZXR1cm4gX1tTXTx3W1NdPy0xOjF9cmV0dXJuIF8ubGVuZ3RoLXcubGVuZ3RofShoZVswXSxpZVswXSl9KSxtLkZ1bGxQYXRocz1bXSxtLkZp''@;'; put 'put ''bGVJbmRleD1bXSxTPTA7UzxCLmxlbmd0aDsrK1MpbS5GdWxsUGF0aHNbU109QltTXVswXSxtLkZpbGVJbmRleFtTXT1CW1NdWzFdO2ZvcihTPTA7UzxCLmxlbmd0aDsrK1Mpe3ZhciBxPW0uRmlsZUluZGV4W1NdLG5lPW0uRnVsbFBhdGhzW1NdO2lmKHEubmFtZT1uKG5lKS5yZXBsYWNlKCIv''@;'; put 'put ''IiwiIikscS5MPXEuUj1xLkM9LShxLmNvbG9yPTEpLHEuc2l6ZT1xLmNvbnRlbnQ/cS5jb250ZW50Lmxlbmd0aDowLHEuc3RhcnQ9MCxxLmNsc2lkPXEuY2xzaWR8fGRlLDA9PT1TKXEuQz1CLmxlbmd0aD4xPzE6LTEscS5zaXplPTAscS50eXBlPTU7ZWxzZSBpZigiLyI9PW5lLnNsaWNlKC0x''@;'; put 'put ''KSl7Zm9yKHo9UysxO3o8Qi5sZW5ndGgmJmEobS5GdWxsUGF0aHNbel0pIT1uZTsrK3opO2ZvcihxLkM9ej49Qi5sZW5ndGg/LTE6eix6PVMrMTt6PEIubGVuZ3RoJiZhKG0uRnVsbFBhdGhzW3pdKSE9YShuZSk7Kyt6KTtxLlI9ej49Qi5sZW5ndGg/LTE6eixxLnR5cGU9MX1lbHNlIGEobS5G''@;'; put 'put ''dWxsUGF0aHNbUysxXXx8IiIpPT1hKG5lKSYmKHEuUj1TKzEpLHEudHlwZT0yfX19ZnVuY3Rpb24gVihtLEUpe3ZhciBfPUV8fHt9O2lmKCJtYWQiPT1fLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBiZyhtLEUpe2Zvcih2YXIgXz1FfHx7fSx3PV8uYm91bmRhcnl8fCJTaGVldEpTIixTPVsi''@;'; put 'put ''TUlNRS1WZXJzaW9uOiAxLjAiLCdDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iJysodz0iLS0tLS0tPSIrdykuc2xpY2UoMikrJyInLCIiLCIiLCIiXSxGPW0uRnVsbFBhdGhzWzBdLEw9Rix6PW0uRmlsZUluZGV4WzBdLFc9MTtXPG0uRnVsbFBhdGhzLmxlbmd0''@;'; put 'put ''aDsrK1cpaWYoTD1tLkZ1bGxQYXRoc1tXXS5zbGljZShGLmxlbmd0aCksKHo9bS5GaWxlSW5kZXhbV10pLnNpemUmJnouY29udGVudCYmIlx4MDFTaDMzdEo1IiE9TCl7TD1MLnJlcGxhY2UoL1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0UtXHhGRl0vZyxmdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIl94IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KS5yZXBsYWNlKC9bXHUwMDgwLVx1RkZGRl0vZyxmdW5jdGlvbihfZSl7cmV0dXJuIl91IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KTtmb3IodmFyIEI9ei5jb250ZW50LEg9U2UmJkJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcihCKT9CLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShCKSxxPTAsbmU9TWF0aC5taW4oMTAyNCxILmxlbmd0aCksaGU9MCxpZT0wO2llPD1uZTsrK2llKShoZT1ILmNoYXJDb2RlQXQoaWUpKT49MzImJmhlPDEyOCYmKytxO3ZhciBmZT1xPj00Km5lLzU7Uy5wdXNoKHcpLFMucHVzaCgi''@;'; put 'put ''Q29udGVudC1Mb2NhdGlvbjogIisoXy5yb290fHwiZmlsZTovLy9DOi9TaGVldEpTLyIpK0wpLFMucHVzaCgiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIisoZmU/InF1b3RlZC1wcmludGFibGUiOiJiYXNlNjQiKSksUy5wdXNoKCJDb250ZW50LVR5cGU6ICIrQ2coeixMKSksUy5wdXNo''@;'; put 'put ''KCIiKSxTLnB1c2goZmU/T2coSCk6RGcoSCkpfXJldHVybiBTLnB1c2godysiLS1cclxuIiksUy5qb2luKCJcclxuIil9KG0sXyk7aWYoInppcCI9PT0oUihtKSxfLmZpbGVUeXBlKSlyZXR1cm4gZnVuY3Rpb24gQWcobSxFKXt2YXIgXz1FfHx7fSx3PVtdLFM9W10sRj1HKDEpLEw9Xy5jb21w''@;'; put 'put ''cmVzc2lvbj84OjAsej0wLEI9MCxIPTAscT0wLG5lPTAsaGU9bS5GdWxsUGF0aHNbMF0saWU9aGUsZmU9bS5GaWxlSW5kZXhbMF0sX2U9W10sVmU9MDtmb3IoQj0xO0I8bS5GdWxsUGF0aHMubGVuZ3RoOysrQilpZihpZT1tLkZ1bGxQYXRoc1tCXS5zbGljZShoZS5sZW5ndGgpLChmZT1tLkZp''@;'; put 'put ''bGVJbmRleFtCXSkuc2l6ZSYmZmUuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9aWUpe3ZhciBDcj1xLG5yPUcoaWUubGVuZ3RoKTtmb3IoSD0wO0g8aWUubGVuZ3RoOysrSCluci53cml0ZV9zaGlmdCgxLDEyNyZpZS5jaGFyQ29kZUF0KEgpKTtucj1uci5zbGljZSgwLG5yLmwpLF9lW25lXT1z''@;'; put 'put ''by5idWYoZmUuY29udGVudCwwKTt2YXIgQnI9ZmUuY29udGVudDs4PT1MJiYoQnI9TyhCcikpLChGPUcoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxGLndyaXRlX3NoaWZ0KDIsMjApLEYud3JpdGVfc2hpZnQoMix6KSxGLndyaXRlX3NoaWZ0KDIsTCksZmUubXQ/aShGLGZlLm10KTpG''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCgtNCw4Jno/MDpfZVtuZV0pLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpCci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpmZS5jb250ZW50Lmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLG5yLmxlbmd0aCksRi53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDApLHErPUYubGVuZ3RoLHcucHVzaChGKSxxKz1uci5sZW5ndGgsdy5wdXNoKG5yKSxxKz1Cci5sZW5ndGgsdy5wdXNoKEJyKSw4JnomJigoRj1HKDEyKSkud3JpdGVfc2hpZnQoLTQsX2VbbmVdKSxGLndyaXRlX3NoaWZ0KDQsQnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDQsZmUuY29udGVu''@;'; put 'put ''dC5sZW5ndGgpLHErPUYubCx3LnB1c2goRikpLChGPUcoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDIwKSxGLndyaXRlX3NoaWZ0KDIseiksRi53cml0ZV9zaGlmdCgyLEwpLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRl''@;'; put 'put ''X3NoaWZ0KC00LF9lW25lXSksRi53cml0ZV9zaGlmdCg0LEJyLmxlbmd0aCksRi53cml0ZV9zaGlmdCg0LGZlLmNvbnRlbnQubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsbnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxG''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCxDciksVmUrPUYubCxTLnB1c2goRiksVmUrPW5yLmxlbmd0aCxTLnB1c2gobnIpLCsrbmV9cmV0dXJuKEY9RygyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxGLndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''Ri53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMixuZSksRi53cml0ZV9zaGlmdCgyLG5lKSxGLndyaXRlX3NoaWZ0KDQsVmUpLEYud3JpdGVfc2hpZnQoNCxxKSxGLndyaXRlX3NoaWZ0KDIsMCksZnIoW2ZyKHcpLGZyKFMpLEZdKX0obSxfKTt2YXIgdz1mdW5jdGlvbihoZSl7Zm9y''@;'; put 'put ''KHZhciBpZT0wLGZlPTAsX2U9MDtfZTxoZS5GaWxlSW5kZXgubGVuZ3RoOysrX2Upe3ZhciBWZT1oZS5GaWxlSW5kZXhbX2VdO2lmKFZlLmNvbnRlbnQpe3ZhciBDcj1WZS5jb250ZW50Lmxlbmd0aDtDcj4wJiYoQ3I8NDA5Nj9pZSs9Q3IrNjM+PjY6ZmUrPUNyKzUxMT4+OSl9fWZvcih2YXIg''@;'; put 'put ''bnI9aGUuRnVsbFBhdGhzLmxlbmd0aCszPj4yLFphPWllKzEyNz4+NyxRYT0oaWUrNz4+MykrZmUrbnIrWmEsWnQ9UWErMTI3Pj43LHRpPVp0PD0xMDk/MDpNYXRoLmNlaWwoKFp0LTEwOSkvMTI3KTtRYStadCt0aSsxMjc+Pjc+WnQ7KXRpPSsrWnQ8PTEwOT8wOk1hdGguY2VpbCgoWnQtMTA5''@;'; put 'put ''KS8xMjcpO3ZhciBtdD1bMSx0aSxadCxaYSxucixmZSxpZSwwXTtyZXR1cm4gaGUuRmlsZUluZGV4WzBdLnNpemU9aWU8PDYsbXRbN109KGhlLkZpbGVJbmRleFswXS5zdGFydD1tdFswXSttdFsxXSttdFsyXSttdFszXSttdFs0XSttdFs1XSkrKG10WzZdKzc+PjMpLG10fShtKSxTPUcod1s3''@;'; put 'put ''XTw8OSksRj0wLEw9MDtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgxLHJlW0ZdKTtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDIsNjIpLFMud3JpdGVfc2hpZnQoMiwzKSxTLndyaXRlX3NoaWZ0KDIsNjU1MzQpLFMud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiw5KSxTLndyaXRlX3NoaWZ0KDIsNiksRj0wO0Y8MzsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LHdbMl0pLFMud3JpdGVfc2hpZnQoNCx3WzBdK3dbMV0rd1syXSt3WzNdLTEpLFMud3JpdGVfc2hpZnQoNCwwKSxTLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsNDA5NiksUy53cml0ZV9zaGlmdCg0LHdbM10/d1swXSt3WzFdK3dbMl0tMTplZSksUy53cml0ZV9zaGlmdCg0LHdbM10pLFMud3JpdGVfc2hpZnQoLTQsd1sxXT93WzBdLTE6ZWUpLFMud3JpdGVfc2hpZnQoNCx3WzFdKSxGPTA7RjwxMDk7KytGKVMud3JpdGVfc2hpZnQo''@;'; put 'put ''LTQsRjx3WzJdP3dbMV0rRjotMSk7aWYod1sxXSlmb3IoTD0wO0w8d1sxXTsrK0wpe2Zvcig7RjwyMzYrMTI3Kkw7KytGKVMud3JpdGVfc2hpZnQoLTQsRjx3WzJdP3dbMV0rRjotMSk7Uy53cml0ZV9zaGlmdCgtNCxMPT09d1sxXS0xP2VlOkwrMSl9dmFyIHo9ZnVuY3Rpb24oaGUpe2ZvcihM''@;'; put 'put ''Kz1oZTtGPEwtMTsrK0YpUy53cml0ZV9zaGlmdCgtNCxGKzEpO2hlJiYoKytGLFMud3JpdGVfc2hpZnQoLTQsZWUpKX07Zm9yKEw9Rj0wLEwrPXdbMV07RjxMOysrRilTLndyaXRlX3NoaWZ0KC00LHVlLkRJRlNFQ1QpO2ZvcihMKz13WzJdO0Y8TDsrK0YpUy53cml0ZV9zaGlmdCgtNCx1ZS5G''@;'; put 'put ''QVRTRUNUKTt6KHdbM10pLHood1s0XSk7Zm9yKHZhciBXPTAsQj0wLEg9bS5GaWxlSW5kZXhbMF07VzxtLkZpbGVJbmRleC5sZW5ndGg7KytXKShIPW0uRmlsZUluZGV4W1ddKS5jb250ZW50JiYhKChCPUguY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSC5zdGFydD1MLHooQis1MTE+PjkpKTtm''@;'; put 'put ''b3Ioeih3WzZdKzc+PjMpOzUxMSZTLmw7KVMud3JpdGVfc2hpZnQoLTQsdWUuRU5ET0ZDSEFJTik7Zm9yKEw9Rj0wLFc9MDtXPG0uRmlsZUluZGV4Lmxlbmd0aDsrK1cpKEg9bS5GaWxlSW5kZXhbV10pLmNvbnRlbnQmJihCPUguY29udGVudC5sZW5ndGgpJiYhKEI+PTQwOTYpJiYoSC5zdGFy''@;'; put 'put ''dD1MLHooQis2Mz4+NikpO2Zvcig7NTExJlMubDspUy53cml0ZV9zaGlmdCgtNCx1ZS5FTkRPRkNIQUlOKTtmb3IoRj0wO0Y8d1s0XTw8MjsrK0Ype3ZhciBxPW0uRnVsbFBhdGhzW0ZdO2lmKHEmJjAhPT1xLmxlbmd0aCl7SD1tLkZpbGVJbmRleFtGXSwwPT09RiYmKEguc3RhcnQ9SC5zaXpl''@;'; put 'put ''P0guc3RhcnQtMTplZSk7dmFyIG5lPTA9PT1GJiZfLnJvb3R8fEgubmFtZTtpZihCPTIqKG5lLmxlbmd0aCsxKSxTLndyaXRlX3NoaWZ0KDY0LG5lLCJ1dGYxNmxlIiksUy53cml0ZV9zaGlmdCgyLEIpLFMud3JpdGVfc2hpZnQoMSxILnR5cGUpLFMud3JpdGVfc2hpZnQoMSxILmNvbG9yKSxT''@;'; put 'put ''LndyaXRlX3NoaWZ0KC00LEguTCksUy53cml0ZV9zaGlmdCgtNCxILlIpLFMud3JpdGVfc2hpZnQoLTQsSC5DKSxILmNsc2lkKVMud3JpdGVfc2hpZnQoMTYsSC5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoVz0wO1c8NDsrK1cpUy53cml0ZV9zaGlmdCg0LDApO1Mud3JpdGVfc2hpZnQoNCxILnN0''@;'; put 'put ''YXRlfHwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LEguc3RhcnQpLFMud3JpdGVfc2hpZnQoNCxILnNpemUpLFMud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXPTA7''@;'; put 'put ''VzwxNzsrK1cpUy53cml0ZV9zaGlmdCg0LDApO2ZvcihXPTA7VzwzOysrVylTLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXPTA7VzwxMjsrK1cpUy53cml0ZV9zaGlmdCg0LDApfX1mb3IoRj0xO0Y8bS5GaWxlSW5kZXgubGVuZ3RoOysrRilpZigoSD1tLkZpbGVJbmRleFtGXSkuc2l6ZT49NDA5''@;'; put 'put ''NilpZihTLmw9SC5zdGFydCsxPDw5LFNlJiZCdWZmZXIuaXNCdWZmZXIoSC5jb250ZW50KSlILmNvbnRlbnQuY29weShTLFMubCwwLEguc2l6ZSksUy5sKz1ILnNpemUrNTExJi01MTI7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3Io''@;'; put 'put ''OzUxMSZXOysrVylTLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKEY9MTtGPG0uRmlsZUluZGV4Lmxlbmd0aDsrK0YpaWYoKEg9bS5GaWxlSW5kZXhbRl0pLnNpemU+MCYmSC5zaXplPDQwOTYpaWYoU2UmJkJ1ZmZlci5pc0J1ZmZlcihILmNvbnRlbnQpKUguY29udGVudC5jb3B5KFMsUy5sLDAsSC5z''@;'; put 'put ''aXplKSxTLmwrPUguc2l6ZSs2MyYtNjQ7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3IoOzYzJlc7KytXKVMud3JpdGVfc2hpZnQoMSwwKX1pZihTZSlTLmw9Uy5sZW5ndGg7ZWxzZSBmb3IoO1MubDxTLmxlbmd0aDspUy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApO3JldHVybiBTfXQudmVyc2lvbj0iMS4yLjEiO3ZhciBLLGI9NjQsZWU9LTIsbGU9ImQwY2YxMWUwYTFiMTFhZTEiLHJlPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sZGU9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIix1ZT17TUFYUkVHU0VDVDot''@;'; put 'put ''NixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplZSxGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOmxlLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOmRlLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3Rv''@;'; put 'put ''cmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBjZShtKXtmb3IodmFyIEU9bmV3IEFycmF5KG0ubGVuZ3RoKSxfPTA7XzxtLmxlbmd0aDsrK18pRVtfXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bX10pO3JldHVybiBFLmpvaW4oIiIpfWZ1bmN0''@;'; put 'put ''aW9uIE8obSl7cmV0dXJuIEs/Sy5kZWZsYXRlUmF3U3luYyhtKTp5ZShtKX1mb3IodmFyIG0sRSxEPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxqPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3''@;'; put 'put ''LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxzZT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxRPXR5cGVvZiBVaW50OEFy''@;'; put 'put ''cmF5PCJ1IixZPVE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxFZT0wO0VlPDI1NjsrK0VlKVlbRWVdPSh2b2lkIDAsMjU1JigoRT0xMzk1MzYmKChtPUVlKTw8MXxtPDwxMSl8NTU4MTQ0JihtPDw1fG08PDE1KSk+PjE2fEU+Pjh8RSkpO2Z1bmN0aW9uIEEobSxFKXt2YXIgXz1ZWzI1NSZtXTty''@;'; put 'put ''ZXR1cm4gRTw9OD9fPj4+OC1FOihfPV88PDh8WVttPj44JjI1NV0sRTw9MTY/Xz4+PjE2LUU6KF89Xzw8OHxZW20+PjE2JjI1NV0pPj4+MjQtRSl9ZnVuY3Rpb24gUGUobSxFKXt2YXIgXz03JkUsdz1FPj4+MztyZXR1cm4obVt3XXwoXzw9Nj8wOm1bdysxXTw8OCkpPj4+XyYzfWZ1bmN0aW9u''@;'; put 'put ''IEFlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTU/MDptW3crMV08PDgpKT4+Pl8mN31mdW5jdGlvbiBDZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD0zPzA6bVt3KzFdPDw4KSk+Pj5fJjMxfWZ1bmN0aW9uIG9lKG0sRSl7dmFyIF89NyZF''@;'; put 'put ''LHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTE/MDptW3crMV08PDgpKT4+Pl8mMTI3fWZ1bmN0aW9uIHFlKG0sRSxfKXt2YXIgdz03JkUsUz1FPj4+MyxMPW1bU10+Pj53O3JldHVybiBfPDgtd3x8KEx8PW1bUysxXTw8OC13LF88MTYtdyl8fChMfD1tW1MrMl08PDE2LXcsXzwyNC13KXx8KEx8''@;'; put 'put ''PW1bUyszXTw8MjQtdyksTCYoMTw8XyktMX1mdW5jdGlvbiBqcihtLEUsXyl7dmFyIHc9NyZFLFM9RT4+PjM7cmV0dXJuIHc8PTU/bVtTXXw9KDcmXyk8PHc6KG1bU118PV88PHcmMjU1LG1bUysxXT0oNyZfKT4+OC13KSxFKzN9ZnVuY3Rpb24gZnQobSxFLF8pe3JldHVybiBtW0U+Pj4zXXw9''@;'; put 'put ''Xz0oMSZfKTw8KDcmRSksRSsxfWZ1bmN0aW9uIHZ0KG0sRSxfKXt2YXIgUz1FPj4+MztyZXR1cm4gbVtTXXw9MjU1JihfPDw9NyZFKSxtW1MrMV09Xz4+Pj04LEUrOH1mdW5jdGlvbiBKYShtLEUsXyl7dmFyIFM9RT4+PjM7cmV0dXJuIG1bU118PTI1NSYoXzw8PTcmRSksbVtTKzFdPTI1NSYo''@;'; put 'put ''Xz4+Pj04KSxtW1MrMl09Xz4+PjgsRSsxNn1mdW5jdGlvbiBPdChtLEUpe3ZhciBfPW0ubGVuZ3RoLHc9MipfPkU/MipfOkUrNSxTPTA7aWYoXz49RSlyZXR1cm4gbTtpZihTZSl7dmFyIEY9bmkodyk7aWYobS5jb3B5KW0uY29weShGKTtlbHNlIGZvcig7UzxtLmxlbmd0aDsrK1MpRltTXT1t''@;'; put 'put ''W1NdO3JldHVybiBGfWlmKFEpe3ZhciBMPW5ldyBVaW50OEFycmF5KHcpO2lmKEwuc2V0KUwuc2V0KG0pO2Vsc2UgZm9yKDtTPF87KytTKUxbU109bVtTXTtyZXR1cm4gTH1yZXR1cm4gbS5sZW5ndGg9dyxtfWZ1bmN0aW9uIExyKG0pe2Zvcih2YXIgRT1uZXcgQXJyYXkobSksXz0wO188bTsr''@;'; put 'put ''K18pRVtfXT0wO3JldHVybiBFfWZ1bmN0aW9uIHB0KG0sRSxfKXt2YXIgdz0xLFM9MCxGPTAsTD0wLHo9MCxXPW0ubGVuZ3RoLEI9UT9uZXcgVWludDE2QXJyYXkoMzIpOkxyKDMyKTtmb3IoRj0wO0Y8MzI7KytGKUJbRl09MDtmb3IoRj1XO0Y8XzsrK0YpbVtGXT0wO1c9bS5sZW5ndGg7dmFy''@;'; put 'put ''IEg9UT9uZXcgVWludDE2QXJyYXkoVyk6THIoVyk7Zm9yKEY9MDtGPFc7KytGKUJbUz1tW0ZdXSsrLHc8UyYmKHc9UyksSFtGXT0wO2ZvcihCWzBdPTAsRj0xO0Y8PXc7KytGKUJbRisxNl09ej16K0JbRi0xXTw8MTtmb3IoRj0wO0Y8VzsrK0YpMCE9KHo9bVtGXSkmJihIW0ZdPUJbeisxNl0r''@;'; put 'put ''Kyk7dmFyIHE9MDtmb3IoRj0wO0Y8VzsrK0YpaWYoMCE9KHE9bVtGXSkpZm9yKHo9QShIW0ZdLHcpPj53LXEsTD0oMTw8dys0LXEpLTE7TD49MDstLUwpRVt6fEw8PHFdPTE1JnF8Rjw8NDtyZXR1cm4gd312YXIgSXQ9UT9uZXcgVWludDE2QXJyYXkoNTEyKTpMcig1MTIpLHFhPVE/bmV3IFVp''@;'; put 'put ''bnQxNkFycmF5KDMyKTpMcigzMik7aWYoIVEpe2Zvcih2YXIgeXI9MDt5cjw1MTI7Kyt5cilJdFt5cl09MDtmb3IoeXI9MDt5cjwzMjsrK3lyKXFhW3lyXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxFPTA7RTwzMjtFKyspbS5wdXNoKDUpO3B0KG0scWEsMzIpO3ZhciBfPVtdO2ZvcihF''@;'; put 'put ''PTA7RTw9MTQzO0UrKylfLnB1c2goOCk7Zm9yKDtFPD0yNTU7RSsrKV8ucHVzaCg5KTtmb3IoO0U8PTI3OTtFKyspXy5wdXNoKDcpO2Zvcig7RTw9Mjg3O0UrKylfLnB1c2goOCk7cHQoXyxJdCwyODgpfSgpO3ZhciBjdD1mdW5jdGlvbigpe2Zvcih2YXIgRT1RP25ldyBVaW50OEFycmF5KDMy''@;'; put 'put ''NzY4KTpbXSxfPTAsdz0wO188c2UubGVuZ3RoLTE7KytfKWZvcig7dzxzZVtfKzFdOysrdylFW3ddPV87Zm9yKDt3PDMyNzY4OysrdylFW3ddPTI5O3ZhciBTPVE/bmV3IFVpbnQ4QXJyYXkoMjU5KTpbXTtmb3IoXz0wLHc9MDtfPGoubGVuZ3RoLTE7KytfKWZvcig7dzxqW18rMV07Kyt3KVNb''@;'; put 'put ''d109XztyZXR1cm4gZnVuY3Rpb24oVyxCKXtyZXR1cm4gVy5sZW5ndGg8OD9mdW5jdGlvbiBGKHosVyl7Zm9yKHZhciBCPTA7Qjx6Lmxlbmd0aDspe3ZhciBIPU1hdGgubWluKDY1NTM1LHoubGVuZ3RoLUIpO2ZvcihXLndyaXRlX3NoaWZ0KDEsKyhCK0g9PXoubGVuZ3RoKSksVy53cml0ZV9z''@;'; put 'put ''aGlmdCgyLEgpLFcud3JpdGVfc2hpZnQoMiw2NTUzNSZ+SCk7SC0tID4wOylXW1cubCsrXT16W0IrK119cmV0dXJuIFcubH0oVyxCKTpmdW5jdGlvbiBMKHosVyl7Zm9yKHZhciBCPTAsSD0wLHE9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOltdO0g8ei5sZW5ndGg7KXt2YXIgbmU9TWF0aC5t''@;'; put 'put ''aW4oNjU1MzUsei5sZW5ndGgtSCk7aWYobmU8MTApe2Zvcig3JihCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSkpJiYoQis9OC0oNyZCKSksVy5sPUIvOHwwLFcud3JpdGVfc2hpZnQoMixuZSksVy53cml0ZV9zaGlmdCgyLDY1NTM1Jn5uZSk7bmUtLSA+MDspV1tXLmwrK109eltIKytdO0I9''@;'; put 'put ''OCpXLmx9ZWxzZXtCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSsyKTtmb3IodmFyIGhlPTA7bmUtLSA+MDspe3ZhciBpZT16W0hdLGZlPS0xLF9lPTA7aWYoKGZlPXFbaGU9MzI3NjcmKGhlPDw1XmllKV0pJiYoKGZlfD0tMzI3NjgmSCk+SCYmKGZlLT0zMjc2OCksZmU8SCkpZm9yKDt6W2Zl''@;'; put 'put ''K19lXT09eltIK19lXSYmX2U8MjUwOykrK19lO2lmKF9lPjIpeyhpZT1TW19lXSk8PTIyP0I9dnQoVyxCLFlbaWUrMV0+PjEpLTE6KHZ0KFcsQiwzKSx2dChXLEIrPTUsWVtpZS0yM10+PjUpLEIrPTMpO3ZhciBWZT1pZTw4PzA6aWUtND4+MjtWZT4wJiYoSmEoVyxCLF9lLWpbaWVdKSxCKz1W''@;'; put 'put ''ZSksQj12dChXLEIsWVtpZT1FW0gtZmVdXT4+MyksQi09Mzt2YXIgQ3I9aWU8ND8wOmllLTI+PjE7Q3I+MCYmKEphKFcsQixILWZlLXNlW2llXSksQis9Q3IpO2Zvcih2YXIgbnI9MDtucjxfZTsrK25yKXFbaGVdPTMyNzY3JkgsaGU9MzI3NjcmKGhlPDw1XnpbSF0pLCsrSDtuZS09X2UtMX1l''@;'; put 'put ''bHNlIGllPD0xNDM/aWUrPTQ4OkI9ZnQoVyxCLDEpLEI9dnQoVyxCLFlbaWVdKSxxW2hlXT0zMjc2NyZILCsrSH1CPXZ0KFcsQiwwKS0xfX1yZXR1cm4gVy5sPShCKzcpLzh8MCxXLmx9KFcsQil9fSgpO2Z1bmN0aW9uIHllKG0pe3ZhciBFPUcoNTArTWF0aC5mbG9vcigxLjEqbS5sZW5ndGgp''@;'; put 'put ''KSxfPWN0KG0sRSk7cmV0dXJuIEUuc2xpY2UoMCxfKX12YXIgWmU9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOkxyKDMyNzY4KSxLcj1RP25ldyBVaW50MTZBcnJheSgzMjc2OCk6THIoMzI3NjgpLHNyPVE/bmV3IFVpbnQxNkFycmF5KDEyOCk6THIoMTI4KSxxdD0xLEZjPTE7ZnVuY3Rpb24g''@;'; put 'put ''U2cobSxFKXt2YXIgXz1DZShtLEUpKzI1Nyx3PUNlKG0sRSs9NSkrMSxTPWZ1bmN0aW9uIExlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTQ/MDptW3crMV08PDgpKT4+Pl8mMTV9KG0sRSs9NSkrNDtFKz00O2Zvcih2YXIgRj0wLEw9UT9uZXcgVWludDhBcnJheSgx''@;'; put 'put ''OSk6THIoMTkpLHo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFc9MSxCPVE/bmV3IFVpbnQ4QXJyYXkoOCk6THIoOCksSD1RP25ldyBVaW50OEFycmF5KDgpOkxyKDgpLHE9TC5sZW5ndGgsbmU9MDtuZTxTOysrbmUpTFtEW25lXV09Rj1BZShtLEUpLFc8RiYmKFc9''@;'; put 'put ''RiksQltGXSsrLEUrPTM7dmFyIGhlPTA7Zm9yKEJbMF09MCxuZT0xO25lPD1XOysrbmUpSFtuZV09aGU9aGUrQltuZS0xXTw8MTtmb3IobmU9MDtuZTxxOysrbmUpMCE9KGhlPUxbbmVdKSYmKHpbbmVdPUhbaGVdKyspO3ZhciBpZT0wO2ZvcihuZT0wO25lPHE7KytuZSlpZigwIT0oaWU9TFtu''@;'; put 'put ''ZV0pKXtoZT1ZW3pbbmVdXT4+OC1pZTtmb3IodmFyIGZlPSgxPDw3LWllKS0xO2ZlPj0wOy0tZmUpc3JbaGV8ZmU8PGllXT03JmllfG5lPDwzfXZhciBfZT1bXTtmb3IoVz0xO19lLmxlbmd0aDxfK3c7KXN3aXRjaChoZT1zcltvZShtLEUpXSxFKz03JmhlLGhlPj4+PTMpe2Nhc2UgMTY6Zm9y''@;'; put 'put ''KEY9MytQZShtLEUpLEUrPTIsaGU9X2VbX2UubGVuZ3RoLTFdO0YtLSA+MDspX2UucHVzaChoZSk7YnJlYWs7Y2FzZSAxNzpmb3IoRj0zK0FlKG0sRSksRSs9MztGLS0gPjA7KV9lLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoRj0xMStvZShtLEUpLEUrPTc7Ri0tID4wOylfZS5wdXNoKDAp''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6X2UucHVzaChoZSksVzxoZSYmKFc9aGUpfXZhciBWZT1fZS5zbGljZSgwLF8pLENyPV9lLnNsaWNlKF8pO2ZvcihuZT1fO25lPDI4NjsrK25lKVZlW25lXT0wO2ZvcihuZT13O25lPDMwOysrbmUpQ3JbbmVdPTA7cmV0dXJuIHF0PXB0KFZlLFplLDI4NiksRmM9cHQo''@;'; put 'put ''Q3IsS3IsMzApLEV9ZnVuY3Rpb24geWMobSxFKXt2YXIgdz1mdW5jdGlvbiBGZyhtLEUpe2lmKDM9PW1bMF0mJiEoMyZtWzFdKSlyZXR1cm5bX3QoRSksMl07Zm9yKHZhciBfPTAsdz0wLFM9bmkoRXx8MTw8MTgpLEY9MCxMPVMubGVuZ3RoPj4+MCx6PTAsVz0wOyEoMSZ3KTspaWYodz1BZSht''@;'; put 'put ''LF8pLF8rPTMsdz4+PjEpZm9yKHc+PjE9PTE/KHo9OSxXPTUpOihfPVNnKG0sXyksej1xdCxXPUZjKTs7KXshRSYmTDxGKzMyNzY3JiYoTD0oUz1PdChTLEYrMzI3NjcpKS5sZW5ndGgpO3ZhciBIPXFlKG0sXyx6KSxxPXc+Pj4xPT0xP0l0W0hdOlplW0hdO2lmKF8rPTE1JnEsKHE+Pj49NCk+''@;'; put 'put ''Pj44JjI1NSl7aWYoMjU2PT1xKWJyZWFrO3ZhciBuZT0ocS09MjU3KTw4PzA6cS00Pj4yO25lPjUmJihuZT0wKTt2YXIgaGU9RitqW3FdO25lPjAmJihoZSs9cWUobSxfLG5lKSxfKz1uZSksSD1xZShtLF8sVyksXys9MTUmKHE9dz4+PjE9PTE/cWFbSF06S3JbSF0pO3ZhciBpZT0ocT4+Pj00''@;'; put 'put ''KTw0PzA6cS0yPj4xLGZlPXNlW3FdO2ZvcihpZT4wJiYoZmUrPXFlKG0sXyxpZSksXys9aWUpLCFFJiZMPGhlJiYoTD0oUz1PdChTLGhlKzEwMCkpLmxlbmd0aCk7RjxoZTspU1tGXT1TW0YtZmVdLCsrRn1lbHNlIFNbRisrXT1xfWVsc2V7NyZfJiYoXys9OC0oNyZfKSk7dmFyIEI9bVtfPj4+''@;'; put 'put ''M118bVsxKyhfPj4+MyldPDw4O2lmKF8rPTMyLEI+MClmb3IoIUUmJkw8RitCJiYoTD0oUz1PdChTLEYrQikpLmxlbmd0aCk7Qi0tID4wOylTW0YrK109bVtfPj4+M10sXys9OH1yZXR1cm4gRT9bUyxfKzc+Pj4zXTpbUy5zbGljZSgwLEYpLF8rNz4+PjNdfShtLnNsaWNlKG0ubHx8MCksRSk7''@;'; put 'put ''cmV0dXJuIG0ubCs9d1sxXSx3WzBdfWZ1bmN0aW9uIEFjKG0sRSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKEUpO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihFKX1mdW5jdGlvbiBDYyhtLEUpe3ZhciBfPW07aHIoXywwKTt2YXIgRj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpb''@;'; put 'put ''XX07eShGLHtyb290OkUucm9vdH0pO2Zvcih2YXIgTD1fLmxlbmd0aC00Oyg4MCE9X1tMXXx8NzUhPV9bTCsxXXx8NSE9X1tMKzJdfHw2IT1fW0wrM10pJiZMPj0wOyktLUw7Xy5sPUwrNCxfLmwrPTQ7dmFyIHo9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9Njt2YXIgVz1fLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''Zm9yKF8ubD1XLEw9MDtMPHo7KytMKXtfLmwrPTIwO3ZhciBCPV8ucmVhZF9zaGlmdCg0KSxIPV8ucmVhZF9zaGlmdCg0KSxxPV8ucmVhZF9zaGlmdCgyKSxuZT1fLnJlYWRfc2hpZnQoMiksaGU9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9ODt2YXIgaWU9Xy5yZWFkX3NoaWZ0KDQpLGZlPWYoXy5z''@;'; put 'put ''bGljZShfLmwrcSxfLmwrcStuZSkpO18ubCs9cStuZStoZTt2YXIgX2U9Xy5sO18ubD1pZSs0LHlnKF8sQixILEYsZmUpLF8ubD1fZX1yZXR1cm4gRn1mdW5jdGlvbiB5ZyhtLEUsXyx3LFMpe20ubCs9Mjt2YXIgRj1tLnJlYWRfc2hpZnQoMiksTD1tLnJlYWRfc2hpZnQoMiksej1mdW5jdGlv''@;'; put 'put ''biBzKG0pe3ZhciBFPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSxfPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSx3PW5ldyBEYXRlLFM9MzEmXyxGPTE1JihfPj4+PTUpO18+Pj49NCx3LnNldE1pbGxpc2Vjb25kcygwKSx3LnNldEZ1bGxZZWFyKF8rMTk4MCksdy5zZXRNb250aChGLTEpLHcuc2V0RGF0''@;'; put 'put ''ZShTKTt2YXIgTD0zMSZFLHo9NjMmKEU+Pj49NSk7cmV0dXJuIHcuc2V0SG91cnMoRT4+Pj02KSx3LnNldE1pbnV0ZXMoeiksdy5zZXRTZWNvbmRzKEw8PDEpLHd9KG0pO2lmKDgyNTcmRil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7bS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpO2Zvcih2YXIgQj1tLnJlYWRfc2hpZnQoNCksSD1tLnJlYWRfc2hpZnQoNCkscT1tLnJlYWRfc2hpZnQoMiksbmU9bS5yZWFkX3NoaWZ0KDIpLGhlPSIiLGllPTA7aWU8cTsrK2llKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bbS5sKytdKTtpZihuZSl7dmFyIGZlPWYobS5zbGljZSht''@;'; put 'put ''LmwsbS5sK25lKSk7KGZlWzIxNTg5XXx8e30pLm10JiYoej1mZVsyMTU4OV0ubXQpLCgoU3x8e30pWzIxNTg5XXx8e30pLm10JiYoej1TWzIxNTg5XS5tdCl9bS5sKz1uZTt2YXIgX2U9bS5zbGljZShtLmwsbS5sK0IpO3N3aXRjaChMKXtjYXNlIDg6X2U9ZnVuY3Rpb24gVShtLEUpe2lmKCFL''@;'; put 'put ''KXJldHVybiB5YyhtLEUpO3ZhciB3PW5ldygwLEsuSW5mbGF0ZVJhdyksUz13Ll9wcm9jZXNzQ2h1bmsobS5zbGljZShtLmwpLHcuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIG0ubCs9dy5ieXRlc1JlYWQsU30obSxIKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitMKX12YXIgVmU9ITE7OCZGJiYoMTM0Njk1NzYwPT1tLnJlYWRfc2hpZnQoNCkmJihtLnJlYWRfc2hpZnQoNCksVmU9ITApLEI9bS5yZWFkX3NoaWZ0KDQpLEg9bS5yZWFkX3NoaWZ0KDQpKSxCIT1FJiZBYyhWZSwiQmFk''@;'; put 'put ''IGNvbXByZXNzZWQgc2l6ZTogIitFKyIgIT0gIitCKSxIIT1fJiZBYyhWZSwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK18rIiAhPSAiK0gpLHJpKHcsaGUsX2Use3Vuc2FmZTohMCxtdDp6fSl9dmFyIFAwPXtodG06InRleHQvaHRtbCIseG1sOiJ0ZXh0L3htbCIsZ2lmOiJpbWFnZS9naWYi''@;'; put 'put ''LGpwZzoiaW1hZ2UvanBlZyIscG5nOiJpbWFnZS9wbmciLG1zbzoiYXBwbGljYXRpb24veC1tc28iLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsc2gzM3RqNToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn07ZnVuY3Rpb24gQ2cobSxFKXtpZihtLmN0eXBlKXJldHVy''@;'; put 'put ''biBtLmN0eXBlO3ZhciBfPW0ubmFtZXx8IiIsdz1fLm1hdGNoKC9cLihbXlwuXSspJC8pO3JldHVybiB3JiZQMFt3WzFdXXx8RSYmKHc9KF89RSkubWF0Y2goL1tcLlxcXShbXlwuXFxdKSskLykpJiZQMFt3WzFdXT9QMFt3WzFdXToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn1mdW5jdGlv''@;'; put 'put ''biBEZyhtKXtmb3IodmFyIEU9Z2EobSksXz1bXSx3PTA7dzxFLmxlbmd0aDt3Kz03NilfLnB1c2goRS5zbGljZSh3LHcrNzYpKTtyZXR1cm4gXy5qb2luKCJcclxuIikrIlxyXG4ifWZ1bmN0aW9uIE9nKG0pe3ZhciBFPW0ucmVwbGFjZSgvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3''@;'; put 'put ''RS1ceEZGPV0vZyxmdW5jdGlvbihCKXt2YXIgSD1CLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIj0iKygxPT1ILmxlbmd0aD8iMCIrSDpIKX0pOyJcbiI9PShFPUUucmVwbGFjZSgvICQvZ20sIj0yMCIpLnJlcGxhY2UoL1x0JC9nbSwiPTA5IikpLmNo''@;'; put 'put ''YXJBdCgwKSYmKEU9Ij0wRCIrRS5zbGljZSgxKSk7Zm9yKHZhciBfPVtdLHc9KEU9RS5yZXBsYWNlKC9ccig/IVxuKS9nbSwiPTBEIikucmVwbGFjZSgvXG5cbi9nbSwiXG49MEEiKS5yZXBsYWNlKC8oW15cclxuXSlcbi9nbSwiJDE9MEEiKSkuc3BsaXQoIlxyXG4iKSxTPTA7Uzx3Lmxlbmd0''@;'; put 'put ''aDsrK1Mpe3ZhciBGPXdbU107aWYoMCE9Ri5sZW5ndGgpZm9yKHZhciBMPTA7TDxGLmxlbmd0aDspe3ZhciB6PTc2LFc9Ri5zbGljZShMLEwreik7Ij0iPT1XLmNoYXJBdCh6LTEpP3otLToiPSI9PVcuY2hhckF0KHotMik/ei09MjoiPSI9PVcuY2hhckF0KHotMykmJih6LT0zKSxXPUYuc2xp''@;'; put 'put ''Y2UoTCxMK3opLChMKz16KTxGLmxlbmd0aCYmKFcrPSI9IiksXy5wdXNoKFcpfWVsc2UgXy5wdXNoKCIiKX1yZXR1cm4gXy5qb2luKCJcclxuIil9ZnVuY3Rpb24gUmcobSxFLF8pe2Zvcih2YXIgTCx3PSIiLFM9IiIsRj0iIix6PTA7ejwxMDsrK3ope3ZhciBXPUVbel07aWYoIVd8fFcubWF0''@;'; put 'put ''Y2goL15ccyokLykpYnJlYWs7dmFyIEI9Vy5tYXRjaCgvXiguKj8pOlxzKihbXlxzXS4qKSQvKTtpZihCKXN3aXRjaChCWzFdLnRvTG93ZXJDYXNlKCkpe2Nhc2UiY29udGVudC1sb2NhdGlvbiI6dz1CWzJdLnRyaW0oKTticmVhaztjYXNlImNvbnRlbnQtdHlwZSI6Rj1CWzJdLnRyaW0oKTti''@;'; put 'put ''cmVhaztjYXNlImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciOlM9QlsyXS50cmltKCl9fXN3aXRjaCgrK3osUy50b0xvd2VyQ2FzZSgpKXtjYXNlImJhc2U2NCI6TD1JcihPcihFLnNsaWNlKHopLmpvaW4oIiIpKSk7YnJlYWs7Y2FzZSJxdW90ZWQtcHJpbnRhYmxlIjpMPWZ1bmN0aW9uIEln''@;'; put 'put ''KG0pe2Zvcih2YXIgRT1bXSxfPTA7XzxtLmxlbmd0aDsrK18pe2Zvcih2YXIgdz1tW19dO188PW0ubGVuZ3RoJiYiPSI9PXcuY2hhckF0KHcubGVuZ3RoLTEpOyl3PXcuc2xpY2UoMCx3Lmxlbmd0aC0xKSttWysrX107RS5wdXNoKHcpfWZvcih2YXIgUz0wO1M8RS5sZW5ndGg7KytTKUVbU109''@;'; put 'put ''RVtTXS5yZXBsYWNlKC9bPV1bMC05QS1GYS1mXXsyfS9nLGZ1bmN0aW9uKEYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEYuc2xpY2UoMSksMTYpKX0pO3JldHVybiBJcihFLmpvaW4oIlxyXG4iKSl9KEUuc2xpY2UoeikpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nICIrUyl9dmFyIEg9cmkobSx3LnNsaWNlKF8ubGVuZ3RoKSxMLHt1bnNhZmU6ITB9KTtGJiYoSC5jdHlwZT1GKX1mdW5jdGlvbiByaShtLEUsXyx3KXt2YXIgUz13JiZ3LnVuc2FmZTtTfHx5KG0pO3ZhciBGPSFTJiZ2''@;'; put 'put ''ZS5maW5kKG0sRSk7aWYoIUYpe3ZhciBMPW0uRnVsbFBhdGhzWzBdO0Uuc2xpY2UoMCxMLmxlbmd0aCk9PUw/TD1FOigiLyIhPUwuc2xpY2UoLTEpJiYoTCs9Ii8iKSxMPShMK0UpLnJlcGxhY2UoIi8vIiwiLyIpKSxGPXtuYW1lOm4oRSksdHlwZToyfSxtLkZpbGVJbmRleC5wdXNoKEYpLG0u''@;'; put 'put ''RnVsbFBhdGhzLnB1c2goTCksU3x8dmUudXRpbHMuY2ZiX2djKG0pfXJldHVybiBGLmNvbnRlbnQ9XyxGLnNpemU9Xz9fLmxlbmd0aDowLHcmJih3LkNMU0lEJiYoRi5jbHNpZD13LkNMU0lEKSx3Lm10JiYoRi5tdD13Lm10KSx3LmN0JiYoRi5jdD13LmN0KSksRn1yZXR1cm4gdC5maW5kPWZ1''@;'; put 'put ''bmN0aW9uIFgobSxFKXt2YXIgXz1tLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcudG9VcHBlckNhc2UoKX0pLHc9Xy5tYXAoZnVuY3Rpb24oVyl7dmFyIEI9Vy5zcGxpdCgiLyIpO3JldHVybiBCW0IubGVuZ3RoLSgiLyI9PVcuc2xpY2UoLTEpPzI6MSldfSksUz0hMTs0Nz09''@;'; put 'put ''PUUuY2hhckNvZGVBdCgwKT8oUz0hMCxFPV9bMF0uc2xpY2UoMCwtMSkrRSk6Uz0tMSE9PUUuaW5kZXhPZigiLyIpO3ZhciBGPUUudG9VcHBlckNhc2UoKSxMPSEwPT09Uz9fLmluZGV4T2YoRik6dy5pbmRleE9mKEYpO2lmKC0xIT09TClyZXR1cm4gbS5GaWxlSW5kZXhbTF07dmFyIHo9IUYu''@;'; put 'put ''bWF0Y2god2EpO2ZvcihGPUYucmVwbGFjZShkciwiIikseiYmKEY9Ri5yZXBsYWNlKHdhLCIhIikpLEw9MDtMPF8ubGVuZ3RoOysrTClpZigoej9fW0xdLnJlcGxhY2Uod2EsIiEiKTpfW0xdKS5yZXBsYWNlKGRyLCIiKT09Rnx8KHo/d1tMXS5yZXBsYWNlKHdhLCIhIik6d1tMXSkucmVwbGFj''@;'; put 'put ''ZShkciwiIik9PUYpcmV0dXJuIG0uRmlsZUluZGV4W0xdO3JldHVybiBudWxsfSx0LnJlYWQ9ZnVuY3Rpb24gSShtLEUpe3ZhciBfPUUmJkUudHlwZTtzd2l0Y2goX3x8U2UmJkJ1ZmZlci5pc0J1ZmZlcihtKSYmKF89ImJ1ZmZlciIpLF98fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBNKG0sRSl7cmV0dXJuIG8oKSxsKGMucmVhZEZpbGVTeW5jKG0pLEUpfShtLEUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbChJcihPcihtKSksRSk7Y2FzZSJiaW5hcnkiOnJldHVybiBsKElyKG0pLEUpfXJldHVybiBsKG0sRSl9LHQucGFyc2U9bCx0LndyaXRlPWZ1bmN0aW9uIHhl''@;'; put 'put ''KG0sRSl7dmFyIF89VihtLEUpO3N3aXRjaChFJiZFLnR5cGV8fCJidWZmZXIiKXtjYXNlImZpbGUiOnJldHVybiBvKCksYy53cml0ZUZpbGVTeW5jKEUuZmlsZW5hbWUsXyksXztjYXNlImJpbmFyeSI6cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfP186Y2UoXyk7Y2FzZSJiYXNlNjQiOnJldHVy''@;'; put 'put ''biBnYSgic3RyaW5nIj09dHlwZW9mIF8/XzpjZShfKSk7Y2FzZSJidWZmZXIiOmlmKFNlKXJldHVybiBCdWZmZXIuaXNCdWZmZXIoXyk/XzpvdChfKTtjYXNlImFycmF5IjpyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF8/SXIoXyk6X31yZXR1cm4gX30sdC53cml0ZUZpbGU9ZnVuY3Rpb24gRmUo''@;'; put 'put ''bSxFLF8pe28oKTt2YXIgdz1WKG0sXyk7Yy53cml0ZUZpbGVTeW5jKEUsdyl9LHQudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gUGcobSl7dmFyIEU9e307cmV0dXJuIHkoRSxtKSxFfSxjZmJfYWRkOnJpLGNmYl9kZWw6ZnVuY3Rpb24gTGcobSxFKXt5KG0pO3ZhciBfPXZlLmZpbmQobSxFKTtp''@;'; put 'put ''ZihfKWZvcih2YXIgdz0wO3c8bS5GaWxlSW5kZXgubGVuZ3RoOysrdylpZihtLkZpbGVJbmRleFt3XT09XylyZXR1cm4gbS5GaWxlSW5kZXguc3BsaWNlKHcsMSksbS5GdWxsUGF0aHMuc3BsaWNlKHcsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gQmcobSxFLF8pe3kobSk7dmFy''@;'; put 'put ''IHc9dmUuZmluZChtLEUpO2lmKHcpZm9yKHZhciBTPTA7UzxtLkZpbGVJbmRleC5sZW5ndGg7KytTKWlmKG0uRmlsZUluZGV4W1NdPT13KXJldHVybiBtLkZpbGVJbmRleFtTXS5uYW1lPW4oXyksbS5GdWxsUGF0aHNbU109XywhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIE1nKG0pe1Io''@;'; put 'put ''bSwhMCl9LFJlYWRTaGlmdDpBYSxDaGVja0ZpZWxkOmFzLHByZXBfYmxvYjpocixiY29uY2F0OmZyLHVzZV96bGliOmZ1bmN0aW9uIEMobSl7dHJ5e3ZhciBfPW5ldygwLG0uSW5mbGF0ZVJhdyk7aWYoXy5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxfLl9maW5pc2hGbHVz''@;'; put 'put ''aEZsYWcpLCFfLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0s9bX1jYXRjaCh3KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyh3Lm1lc3NhZ2V8fHcpKX19LF9kZWZsYXRlUmF3OnllLF9pbmZsYXRl''@;'; put 'put ''UmF3OnljLGNvbnN0czp1ZX0sdH0oKTtmdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSkscj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2EpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdFthXSkmJnIucHVzaCh0W2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBz''@;'; put 'put ''MChlKXtmb3IodmFyIHQ9W10scj0kZShlKSxhPTA7YSE9PXIubGVuZ3RoOysrYSl0W2VbclthXV1dPXJbYV07cmV0dXJuIHR9dmFyIGMwPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApO2Z1bmN0aW9uIGlyKGUsdCl7dmFyIHI9ZS5nZXRUaW1lKCk7cmV0dXJuIHQmJihyLT0xMjYzMTY4ZTUp''@;'; put 'put ''LChyLShjMC5nZXRUaW1lKCkrNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktYzAuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgU2k9bmV3IERhdGUsbG89YzAuZ2V0VGltZSgpKzZlNCooU2kuZ2V0VGltZXpvbmVPZmZzZXQoKS1jMC5nZXRUaW1lem9uZU9mZnNldCgpKSxGaT1T''@;'; put 'put ''aS5nZXRUaW1lem9uZU9mZnNldCgpO2Z1bmN0aW9uIG8wKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldFRpbWUoMjQqZSo2MCo2MCoxZTMrbG8pLHQuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PUZpJiZ0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCkt''@;'; put 'put ''RmkpKSx0fWZ1bmN0aW9uIHVvKGUpe3ZhciB0PTAscj0wLGE9ITEsbj1lLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFuKXRocm93IG5ldyBFcnJvcigifCIrZSsifCBpcyBub3Qg''@;'; put 'put ''YW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgaT0xO2khPW4ubGVuZ3RoOysraSlpZihuW2ldKXtzd2l0Y2gocj0xLGk+MyYmKGE9ITApLG5baV0uc2xpY2UobltpXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6''@;'; put 'put ''ICIrbltpXS5zbGljZShuW2ldLmxlbmd0aC0xKSk7Y2FzZSJEIjpyKj0yNDtjYXNlIkgiOnIqPTYwO2Nhc2UiTSI6aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtyKj02MH10Kz1yKnBhcnNlSW50KG5baV0sMTApfXJldHVybiB0fXZh''@;'; put 'put ''ciB5aT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIiksQWk9aXNOYU4oeWkuZ2V0RnVsbFllYXIoKSk/bmV3IERhdGUoIjIvMTkvMTciKTp5aSxobz0yMDE3PT1BaS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIFhlKGUsdCl7dmFyIHI9bmV3IERhdGUoZSk7aWYoaG8pcmV0dXJu''@;'; put 'put ''IHQ+MD9yLnNldFRpbWUoci5nZXRUaW1lKCkrNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6dDwwJiZyLnNldFRpbWUoci5nZXRUaW1lKCktNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykscjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZTtpZigxOTE3PT1BaS5nZXRGdWxs''@;'; put 'put ''WWVhcigpJiYhaXNOYU4oci5nZXRGdWxsWWVhcigpKSl7dmFyIGE9ci5nZXRGdWxsWWVhcigpO3JldHVybiBlLmluZGV4T2YoIiIrYSk+LTF8fHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEwMCkscn12YXIgbj1lLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIw''@;'; put 'put ''IiwiMCJdLGk9bmV3IERhdGUoK25bMF0sK25bMV0tMSwrblsyXSwrblszXXx8MCwrbls0XXx8MCwrbls1XXx8MCk7cmV0dXJuIGUuaW5kZXhPZigiWiIpPi0xJiYoaT1uZXcgRGF0ZShpLmdldFRpbWUoKS02MCppLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksaX1mdW5jdGlvbiBQdChlLHQp''@;'; put 'put ''e2lmKFNlJiZCdWZmZXIuaXNCdWZmZXIoZSkpe2lmKHQpe2lmKDI1NT09ZVswXSYmMjU0PT1lWzFdKXJldHVybiB0dChlLnNsaWNlKDIpLnRvU3RyaW5nKCJ1dGYxNmxlIikpO2lmKDI1ND09ZVsxXSYmMjU1PT1lWzJdKXJldHVybiB0dChhaShlLnNsaWNlKDIpLnRvU3RyaW5nKCJiaW5hcnki''@;'; put 'put ''KSkpfXJldHVybiBlLnRvU3RyaW5nKCJiaW5hcnkiKX1pZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXRyeXtpZih0KXtpZigyNTU9PWVbMF0mJjI1ND09ZVsxXSlyZXR1cm4gdHQobmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpLmRlY29kZShlLnNsaWNlKDIpKSk7aWYoMjU0PT1lWzBdJiYy''@;'; put 'put ''NTU9PWVbMV0pcmV0dXJuIHR0KG5ldyBUZXh0RGVjb2RlcigidXRmLTE2YmUiKS5kZWNvZGUoZS5zbGljZSgyKSkpfXZhciByPXsiXHUyMGFjIjoiXHg4MCIsIlx1MjAxYSI6Ilx4ODIiLFx1MDE5MjoiXHg4MyIsIlx1MjAxZSI6Ilx4ODQiLCJcdTIwMjYiOiJceDg1IiwiXHUyMDIwIjoiXHg4''@;'; put 'put ''NiIsIlx1MjAyMSI6Ilx4ODciLFx1MDJjNjoiXHg4OCIsIlx1MjAzMCI6Ilx4ODkiLFx1MDE2MDoiXHg4YSIsIlx1MjAzOSI6Ilx4OGIiLFx1MDE1MjoiXHg4YyIsXHUwMTdkOiJceDhlIiwiXHUyMDE4IjoiXHg5MSIsIlx1MjAxOSI6Ilx4OTIiLCJcdTIwMWMiOiJceDkzIiwiXHUyMDFkIjoi''@;'; put 'put ''XHg5NCIsIlx1MjAyMiI6Ilx4OTUiLCJcdTIwMTMiOiJceDk2IiwiXHUyMDE0IjoiXHg5NyIsIlx1MDJkYyI6Ilx4OTgiLCJcdTIxMjIiOiJceDk5IixcdTAxNjE6Ilx4OWEiLCJcdTIwM2EiOiJceDliIixcdTAxNTM6Ilx4OWMiLFx1MDE3ZToiXHg5ZSIsXHUwMTc4OiJceDlmIn07cmV0dXJu''@;'; put 'put ''IEFycmF5LmlzQXJyYXkoZSkmJihlPW5ldyBVaW50OEFycmF5KGUpKSxuZXcgVGV4dERlY29kZXIoImxhdGluMSIpLmRlY29kZShlKS5yZXBsYWNlKC9bXHUyMGFjXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHUwMTdk''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHUwMTdlXHUwMTc4XS9nLGZ1bmN0aW9uKGkpe3JldHVybiByW2ldfHxpfSl9Y2F0Y2h7fWZvcih2YXIgYT1bXSxuPTA7biE9ZS5sZW5ndGg7KytuKWEucHVzaChT''@;'; put 'put ''dHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBNZShlKXtpZih0eXBlb2YgSlNPTjwidSImJiFBcnJheS5pc0FycmF5KGUpKXJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PWUp''@;'; put 'put ''cmV0dXJuIGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUuZ2V0VGltZSgpKTt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09TWUoZVtyXSkpO3JldHVybiB0fWZ1bmN0aW9uIGplKGUs''@;'; put 'put ''dCl7Zm9yKHZhciByPSIiO3IubGVuZ3RoPHQ7KXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gSnIoZSl7dmFyIHQ9TnVtYmVyKGUpO2lmKCFpc05hTih0KSlyZXR1cm4gaXNGaW5pdGUodCk/dDpOYU47aWYoIS9cZC8udGVzdChlKSlyZXR1cm4gdDt2YXIgcj0xLGE9ZS5yZXBsYWNlKC8oW1xkXSks''@;'; put 'put ''KFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcio9MTAwLCIifSk7cmV0dXJuIGlzTmFOKHQ9TnVtYmVyKGEpKSYmKGE9YS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihuLGkpe3JldHVybiByPS1yLGl9KSxp''@;'; put 'put ''c05hTih0PU51bWJlcihhKSkpP3Q6dC9yfXZhciB4bz1bImphbnVhcnkiLCJmZWJydWFyeSIsIm1hcmNoIiwiYXByaWwiLCJtYXkiLCJqdW5lIiwianVseSIsImF1Z3VzdCIsInNlcHRlbWJlciIsIm9jdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl07ZnVuY3Rpb24gYWEoZSl7dmFyIHQ9''@;'; put 'put ''bmV3IERhdGUoZSkscj1uZXcgRGF0ZShOYU4pLGE9dC5nZXRZZWFyKCksbj10LmdldE1vbnRoKCksaT10LmdldERhdGUoKTtpZihpc05hTihpKSlyZXR1cm4gcjt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7aWYocy5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0''@;'; put 'put ''fG5vdnxkZWMvKSl7aWYoKHM9cy5yZXBsYWNlKC9bXmEtel0vZywiIikucmVwbGFjZSgvKFteYS16XXxeKVthcF1tPyhbXmEtel18JCkvLCIiKSkubGVuZ3RoPjMmJi0xPT14by5pbmRleE9mKHMpKXJldHVybiByfWVsc2UgaWYocy5tYXRjaCgvW2Etel0vKSlyZXR1cm4gcjtyZXR1cm4gYTww''@;'; put 'put ''fHxhPjgwOTk/cjoobj4wfHxpPjEpJiYxMDEhPWE/dDplLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/cjp0fXZhciB2bz1mdW5jdGlvbigpe3ZhciBlPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyLGEsbil7aWYoZXx8InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBhKXJldHVybiByLnNwbGl0KGEpO2Zvcih2YXIgaT1yLnNwbGl0KGEpLHM9W2lbMF1dLGY9MTtmPGkubGVuZ3RoOysrZilzLnB1c2gobikscy5wdXNoKGlbZl0pO3JldHVybiBzfX0oKTtmdW5jdGlvbiBDaShlKXtyZXR1cm4gZT9lLmNvbnRlbnQmJmUudHlwZT9QdChlLmNvbnRlbnQsITAp''@;'; put 'put ''OmUuZGF0YT9RdChlLmRhdGEpOmUuYXNOb2RlQnVmZmVyJiZTZT9RdChlLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6ZS5hc0JpbmFyeT9RdChlLmFzQmluYXJ5KCkpOmUuX2RhdGEmJmUuX2RhdGEuZ2V0Q29udGVudD9RdChQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs''@;'; put 'put ''bChlLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOm51bGw6bnVsbH1mdW5jdGlvbiBEaShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRhdGEpcmV0dXJuIHQwKGUuZGF0YSk7aWYoZS5hc05vZGVCdWZmZXImJlNlKXJldHVybiBlLmFzTm9kZUJ1ZmZlcigpO2lmKGUuX2RhdGEmJmUuX2RhdGEu''@;'; put 'put ''Z2V0Q29udGVudCl7dmFyIHQ9ZS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QwKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfXJldHVybiBlLmNvbnRlbnQmJmUudHlwZT9lLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBXcihlLHQpe2Zvcih2YXIg''@;'; put 'put ''cj1lLkZ1bGxQYXRoc3x8JGUoZS5maWxlcyksYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW1wvXS9nLCJcXCIpLG49YS5yZXBsYWNlKC9cXC9nLCIvIiksaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgcz1yW2ldLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLnRvTG93ZXJDYXNlKCk7''@;'; put 'put ''aWYoYT09c3x8bj09cylyZXR1cm4gZS5maWxlcz9lLmZpbGVzW3JbaV1dOmUuRmlsZUluZGV4W2ldfXJldHVybiBudWxsfWZ1bmN0aW9uIFYwKGUsdCl7dmFyIHI9V3IoZSx0KTtpZihudWxsPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK3QrIiBpbiB6aXAiKTtyZXR1''@;'; put 'put ''cm4gcn1mdW5jdGlvbiBRZShlLHQscil7aWYoIXIpcmV0dXJuIGZ1bmN0aW9uIHBvKGUpe3JldHVybiBlJiYiLmJpbiI9PT1lLm5hbWUuc2xpY2UoLTQpP0RpKGUpOkNpKGUpfShWMChlLHQpKTtpZighdClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFFlKGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9''@;'; put 'put ''fWZ1bmN0aW9uIE5yKGUsdCxyKXtpZighcilyZXR1cm4gQ2koVjAoZSx0KSk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBOcihlLHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBPaShlLHQscil7aWYoIXIpcmV0dXJuIERpKFYwKGUsdCkpO2lmKCF0KXJldHVybiBudWxsO3Ry''@;'; put 'put ''eXtyZXR1cm4gT2koZSx0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSWkoZSl7Zm9yKHZhciB0PWUuRnVsbFBhdGhzfHwkZShlLmZpbGVzKSxyPVtdLGE9MDthPHQubGVuZ3RoOysrYSkiLyIhPXRbYV0uc2xpY2UoLTEpJiZyLnB1c2godFthXS5yZXBsYWNlKC9eUm9vdCBFbnRyeVtc''@;'; put 'put ''L10vLCIiKSk7cmV0dXJuIHIuc29ydCgpfWZ1bmN0aW9uIFJpKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZS5yZWFkKGUse3R5cGU6ImJhc2U2NCJ9KTtjYXNlImJpbmFyeSI6cmV0dXJuIHZlLnJlYWQoZSx7dHlwZToiYmluYXJ5In0pO2Nhc2UiYnVmZmVyIjpj''@;'; put 'put ''YXNlImFycmF5IjpyZXR1cm4gdmUucmVhZChlLHt0eXBlOiJidWZmZXIifSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3QudHlwZSl9ZnVuY3Rpb24gU2EoZSx0KXtpZigiLyI9PWUuY2hhckF0KDApKXJldHVybiBlLnNsaWNlKDEpO3ZhciByPXQuc3BsaXQoIi8iKTsi''@;'; put 'put ''LyIhPXQuc2xpY2UoLTEpJiZyLnBvcCgpO2Zvcih2YXIgYT1lLnNwbGl0KCIvIik7MCE9PWEubGVuZ3RoOyl7dmFyIG49YS5zaGlmdCgpOyIuLiI9PT1uP3IucG9wKCk6Ii4iIT09biYmci5wdXNoKG4pfXJldHVybiByLmpvaW4oIi8iKX12YXIgZXI9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5j''@;'; put 'put ''b2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxtbz0vKFteIlxzPz5cL10rKVxzKj1ccyooKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86Jyl8KFteJyI+XHNdKykpL2csTmk9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMq''@;'; put 'put ''KD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccypbXC9cP10/Pi9nbSx2cj1lci5tYXRjaChOaSk/Tmk6LzxbXj5dKj4vZyxfbz0vPFx3KjovLHdvPS88KFwvPylcdys6LztmdW5jdGlvbiBtZShlLHQscil7Zm9yKHZhciBhPXt9LG49MCxpPTA7biE9PWUubGVuZ3RoJiYzMiE9PShp''@;'; put 'put ''PWUuY2hhckNvZGVBdChuKSkmJjEwIT09aSYmMTMhPT1pOysrbik7aWYodHx8KGFbMF09ZS5zbGljZSgwLG4pKSxuPT09ZS5sZW5ndGgpcmV0dXJuIGE7dmFyIHM9ZS5tYXRjaChtbyksZj0wLGM9IiIsbz0wLGw9IiIsaD0iIix4PTE7aWYocylmb3Iobz0wO28hPXMubGVuZ3RoOysrbyl7Zm9y''@;'; put 'put ''KGg9c1tvXSxpPTA7aSE9aC5sZW5ndGgmJjYxIT09aC5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKGw9aC5zbGljZSgwLGkpLnRyaW0oKTszMj09aC5jaGFyQ29kZUF0KGkrMSk7KSsraTtmb3IoeD0zND09KG49aC5jaGFyQ29kZUF0KGkrMSkpfHwzOT09bj8xOjAsYz1oLnNsaWNlKGkrMSt4LGgu''@;'; put 'put ''bGVuZ3RoLXgpLGY9MDtmIT1sLmxlbmd0aCYmNTghPT1sLmNoYXJDb2RlQXQoZik7KytmKTtpZihmPT09bC5sZW5ndGgpbC5pbmRleE9mKCJfIik+MCYmKGw9bC5zbGljZSgwLGwuaW5kZXhPZigiXyIpKSksYVtsXT1jLHJ8fChhW2wudG9Mb3dlckNhc2UoKV09Yyk7ZWxzZXt2YXIgZD0oNT09''@;'; put 'put ''PWYmJiJ4bWxucyI9PT1sLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrbC5zbGljZShmKzEpO2lmKGFbZF0mJiJleHQiPT1sLnNsaWNlKGYtMyxmKSljb250aW51ZTthW2RdPWMscnx8KGFbZC50b0xvd2VyQ2FzZSgpXT1jKX19cmV0dXJuIGF9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGUucmVwbGFj''@;'; put 'put ''ZSh3bywiPCQxIil9dmFyIGJpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sRzA9czAoYmkpLEllPWZ1bmN0aW9uKCl7dmFyIGU9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSx0PS9feChb''@;'; put 'put ''XGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIHIoYSl7dmFyIG49YSsiIixpPW4uaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWkpcmV0dXJuIG4ucmVwbGFjZShlLGZ1bmN0aW9uKGYsYyl7cmV0dXJuIGJpW2ZdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsZi5p''@;'; put 'put ''bmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8Zn0pLnJlcGxhY2UodCxmdW5jdGlvbihmLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsMTYpKX0pO3ZhciBzPW4uaW5kZXhPZigiXV0+Iik7cmV0dXJuIHIobi5zbGljZSgwLGkpKStuLnNsaWNlKGkrOSxzKStyKG4uc2xp''@;'; put 'put ''Y2UocyszKSl9fSgpLHowPS9bJjw+JyJdL2csTGk9L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uICQwKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKHowLGZ1bmN0aW9uKHIpe3JldHVybiBHMFtyXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShMaSxmdW5jdGlvbihyKXtyZXR1''@;'; put 'put ''cm4iJiN4IisoIjAwMCIrci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfXZhciBCaT1mdW5jdGlvbigpe3ZhciBlPS8mIyhcZCspOy9nO2Z1bmN0aW9uIHQocixhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLDEwKSl9cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZSx0KX19KCk7ZnVuY3Rpb24gV2UoZSl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gajAoZSl7Zm9yKHZhciB0PSIiLHI9MCxh''@;'; put 'put ''PTAsbj0wLGk9MCxzPTAsZj0wO3I8ZS5sZW5ndGg7KShhPWUuY2hhckNvZGVBdChyKyspKTwxMjg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKToobj1lLmNoYXJDb2RlQXQocisrKSxhPjE5MSYmYTwyMjQ/KHM9KDMxJmEpPDw2LHN8PTYzJm4sdCs9U3RyaW5nLmZyb21DaGFyQ29kZShzKSk6''@;'; put 'put ''KGk9ZS5jaGFyQ29kZUF0KHIrKyksYTwyNDA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmYSk8PDEyfCg2MyZuKTw8Nnw2MyZpKTooZj0oKDcmYSk8PDE4fCg2MyZuKTw8MTJ8KDYzJmkpPDw2fDYzJihzPWUuY2hhckNvZGVBdChyKyspKSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZSg1NTI5NisoZj4+PjEwJjEwMjMpKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmYpKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaShlKXt2YXIgcixhLGYsdD1fdCgyKmUubGVuZ3RoKSxuPTEsaT0wLHM9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSs9biluPTEsKGY9ZS5jaGFy''@;'; put 'put ''Q29kZUF0KGEpKTwxMjg/cj1mOmY8MjI0PyhyPTY0KigzMSZmKSsoNjMmZS5jaGFyQ29kZUF0KGErMSkpLG49Mik6ZjwyNDA/KHI9NDA5NiooMTUmZikrNjQqKDYzJmUuY2hhckNvZGVBdChhKzEpKSsoNjMmZS5jaGFyQ29kZUF0KGErMikpLG49Myk6KG49NCxyPTI2MjE0NCooNyZmKSs0MDk2''@;'; put 'put ''Kig2MyZlLmNoYXJDb2RlQXQoYSsxKSkrNjQqKDYzJmUuY2hhckNvZGVBdChhKzIpKSsoNjMmZS5jaGFyQ29kZUF0KGErMykpLHM9NTUyOTYrKChyLT02NTUzNik+Pj4xMCYxMDIzKSxyPTU2MzIwKygxMDIzJnIpKSwwIT09cyYmKHRbaSsrXT0yNTUmcyx0W2krK109cz4+Pjgscz0wKSx0W2kr''@;'; put 'put ''K109ciUyNTYsdFtpKytdPXI+Pj44O3JldHVybiB0LnNsaWNlKDAsaSkudG9TdHJpbmcoInVjczIiKX1mdW5jdGlvbiBVaShlKXtyZXR1cm4gb3QoZSwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX12YXIgbDA9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyIsQmU9''@;'; put 'put ''U2UmJihVaShsMCk9PWowKGwwKSYmVWl8fE1pKGwwKT09ajAobDApJiZNaSl8fGowLHR0PVNlP2Z1bmN0aW9uKGUpe3JldHVybiBvdChlLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9MCxuPTA7cjxlLmxlbmd0aDspc3dpdGNoKGE9''@;'; put 'put ''ZS5jaGFyQ29kZUF0KHIrKyksITApe2Nhc2UgYTwxMjg6dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpO2JyZWFrO2Nhc2UgYTwyMDQ4OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoYT4+NikpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmEpKSk7YnJl''@;'; put 'put ''YWs7Y2FzZSBhPj01NTI5NiYmYTw1NzM0NDphLT01NTI5NixuPWUuY2hhckNvZGVBdChyKyspLTU2MzIwKyhhPDwxMCksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhuPj4xOCY3KSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsobj4+MTImNjMpKSksdC5wdXNoKFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhuPj42JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmbikpKTticmVhaztkZWZhdWx0OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoYT4+MTIpKSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhhPj42''@;'; put 'put ''JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmYSkpKX1yZXR1cm4gdC5qb2luKCIiKX0sRmE9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixhKXt2YXIgbj1yKyJ8IisoYXx8IiIpO3JldHVybiBlW25dP2Vbbl06ZVtuXT1uZXcgUmVnRXhwKCI8''@;'; put 'put ''KD86XFx3KzopPyIrcisnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytyKyI+IixhfHwiIil9fSgpLFdpPWZ1bmN0aW9uKCl7dmFyIGU9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9z''@;'; put 'put ''IiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuZXcgUmVnRXhwKCImIit0WzBdKyI7IiwiaWciKSx0WzFdXX0pO3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9ci5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvPlxzKy9nLCI+IikucmVwbGFjZSgvXHMrPC9nLCI8IikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksbj0wO248ZS5sZW5ndGg7''@;'; put 'put ''KytuKWE9YS5yZXBsYWNlKGVbbl1bMF0sZVtuXVsxXSk7cmV0dXJuIGF9fSgpLFNvPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB2b2lkIDAhPT1lW3JdP2Vbcl06ZVtyXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK3IrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0''@;'; put 'put ''Oik/IityKyI+IiwiZyIpfX0oKSxGbz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyx5bz0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEhpKGUsdCl7dmFyIHI9bWUoZSksYT1lLm1hdGNoKFNvKHIuYmFzZVR5cGUpKXx8W10sbj1bXTtpZihhLmxlbmd0aCE9ci5zaXplKXtp''@;'; put 'put ''Zih0LldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK2EubGVuZ3RoKyIgIT0gIityLnNpemUpO3JldHVybiBufXJldHVybiBhLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5yZXBsYWNlKEZvLCIiKS5tYXRjaCh5byk7cyYmbi5wdXNoKHt2OkJlKHNb''@;'; put 'put ''Ml0pLHQ6c1sxXX0pfSksbn1mdW5jdGlvbiBZMChlKXtpZihTZSYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkp''@;'; put 'put ''cmV0dXJuIEJlKHd0KE0wKGUpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIHlhPS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXSspKD86W1xzPzpcL11bXj5dKik/Pi9nbSxycj17Q09SRV9QUk9Q''@;'; put 'put ''UzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLENVU1RfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixFWFRf''@;'; put 'put ''UFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLENUOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiLFJFTFM6Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyIsVENNTlQ6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxOC90aHJlYWRlZGNvbW1lbnRzIixkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEu''@;'; put 'put ''MS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEifSxTdD1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJl''@;'; put 'put ''YWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2Vs''@;'; put 'put ''LzIwMDYvMiJdLEdpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxhPTA7YTxlWzBdLmxlbmd0aDsrK2EpaWYoZVswXVthXSlmb3IodmFyIG49MCxpPWVbMF1bYV0ubGVuZ3RoO248aTtuKz0xMDI0MCl0LnB1c2guYXBwbHkodCxlWzBdW2FdLnNsaWNlKG4sbisxMDI0MCkpO3JldHVybiB0fSx6''@;'; put 'put ''aT1TZT9mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKGVbMF1bMF0pP0J1ZmZlci5jb25jYXQoZVswXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpOkdpKGUpfTpHaSwkaT1mdW5jdGlvbihlLHQscil7''@;'; put 'put ''Zm9yKHZhciBhPVtdLG49dDtuPHI7bis9MilhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1dChlLG4pKSk7cmV0dXJuIGEuam9pbigiIikucmVwbGFjZShkciwiIil9LHUwPVNlP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoInV0ZjE2bGUi''@;'; put 'put ''LHQscikucmVwbGFjZShkciwiIik6JGkoZSx0LHIpfTokaSxqaT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49dDtuPHQrcjsrK24pYS5wdXNoKCgiMCIrZVtuXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIGEuam9pbigiIil9LEtpPVNlP2Z1bmN0aW9uKGUsdCxyKXty''@;'; put 'put ''ZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoImhleCIsdCx0K3IpOmppKGUsdCxyKX06amksWWk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjxyO24rKylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpYShlLG4pKSk7cmV0dXJuIGEuam9pbigiIil9LG5h''@;'; put 'put ''PVNlP2Z1bmN0aW9uKHQscixhKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHQpP3QudG9TdHJpbmcoInV0ZjgiLHIsYSk6WWkodCxyLGEpfTpZaSxKaT1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9uYShlLHQrNCx0KzQrci0xKToiIn0sSjA9SmkscWk9ZnVuY3Rpb24o''@;'; put 'put ''ZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LHEwPXFpLFppPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MipjcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LFowPVppLFFpPWZ1bmN0aW9uKHQscil7dmFyIGE9Y3IodCxyKTtyZXR1''@;'; put 'put ''cm4gYT4wP3UwKHQscis0LHIrNCthKToiIn0sUTA9UWksZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3IpOiIifSxlbj1lcyxycz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbiBDbyhlLHQpe2Zvcih2YXIgcj0xLTIqKGVbdCs3XT4+''@;'; put 'put ''PjcpLGE9KCgxMjcmZVt0KzddKTw8NCkrKGVbdCs2XT4+PjQmMTUpLG49MTUmZVt0KzZdLGk9NTtpPj0wOy0taSluPTI1NipuK2VbdCtpXTtyZXR1cm4gMjA0Nz09YT8wPT1uP3IqKDEvMCk6TmFOOigwPT1hP2E9LTEwMjI6KGEtPTEwMjMsbis9TWF0aC5wb3coMiw1MikpLHIqTWF0aC5wb3co''@;'; put 'put ''MixhLTUyKSpuKX0oZSx0KX0saDA9cnMscm49ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9O1NlJiYoSjA9ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBK''@;'; put 'put ''aSh0LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiBhPjA/dC50b1N0cmluZygidXRmOCIscis0LHIrNCthLTEpOiIifSxxMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIHFpKHQscik7dmFyIGE9dC5yZWFkVUludDMyTEUocik7cmV0dXJuIGE+''@;'; put 'put ''MD90LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EtMSk6IiJ9LFowPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gWmkodCxyKTt2YXIgYT0yKnQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGYxNmxlIixyKzQscis0K2EtMSl9LFEwPWZ1''@;'; put 'put ''bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gUWkodCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmMTZsZSIscis0LHIrNCthKX0sZW49ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBlcyh0''@;'; put 'put ''LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EpfSxoMD1mdW5jdGlvbih0LHIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dC5yZWFkRG91YmxlTEUocik6cnModCxyKX0scm49ZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcih0KXx8QXJyYXkuaXNBcnJheSh0KXx8dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0IGluc3RhbmNlb2YgVWludDhBcnJheX0pLHR5cGVvZiBPZTwidSImJmZ1bmN0aW9uIHRzKCl7dTA9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBPZS51dGlscy5kZWNvZGUoMTIwMCxlLnNsaWNlKHQs''@;'; put 'put ''cikpLnJlcGxhY2UoZHIsIiIpfSxuYT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9lLnV0aWxzLmRlY29kZSg2NTAwMSxlLnNsaWNlKHQscikpfSxKMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoUnQsZS5zbGljZSh0KzQsdCs0K3ItMSkp''@;'; put 'put ''OiIifSxxMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoRHIsZS5zbGljZSh0KzQsdCs0K3ItMSkpOiIifSxaMD1mdW5jdGlvbihlLHQpe3ZhciByPTIqY3IoZSx0KTtyZXR1cm4gcj4wP09lLnV0aWxzLmRlY29kZSgxMjAwLGUuc2xpY2Uo''@;'; put 'put ''dCs0LHQrNCtyLTEpKToiIn0sUTA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDEyMDAsZS5zbGljZSh0KzQsdCs0K3IpKToiIn0sZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDY1''@;'; put 'put ''MDAxLGUuc2xpY2UodCs0LHQrNCtyKSk6IiJ9fSgpO3ZhciBpYT1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdfSx1dD1mdW5jdGlvbihlLHQpe3JldHVybiAyNTYqZVt0KzFdK2VbdF19LE9vPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MjU2KmVbdCsxXStlW3RdO3JldHVybiByPDMyNzY4P3I6LTEq''@;'; put 'put ''KDY1NTM1LXIrMSl9LGNyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdCszXSooMTw8MjQpKyhlW3QrMl08PDE2KSsoZVt0KzFdPDw4KStlW3RdfSxMdD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3QrM108PDI0fGVbdCsyXTw8MTZ8ZVt0KzFdPDw4fGVbdF19LElvPWZ1bmN0aW9uKGUsdCl7cmV0''@;'; put 'put ''dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07ZnVuY3Rpb24gQWEoZSx0KXt2YXIgYSxuLHMsZixjLG8scj0iIixpPVtdO3N3aXRjaCh0KXtjYXNlImRiY3MiOmlmKG89dGhpcy5sLFNlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpcj10aGlzLnNsaWNlKHRoaXMubCx0''@;'; put 'put ''aGlzLmwrMiplKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGM9MDtjPGU7KytjKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodXQodGhpcyxvKSksbys9MjtlKj0yO2JyZWFrO2Nhc2UidXRmOCI6cj1uYSh0aGlzLHRoaXMubCx0aGlzLmwrZSk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjpyPXUw''@;'; put 'put ''KHRoaXMsdGhpcy5sLHRoaXMubCsoZSo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgT2U8InUiKSlyZXR1cm4gQWEuY2FsbCh0aGlzLGUsImRiY3MiKTtyPU9lLnV0aWxzLmRlY29kZShEcix0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMiplKSksZSo9MjticmVhaztjYXNlImxw''@;'; put 'put ''c3RyLWFuc2kiOnI9SjAodGhpcyx0aGlzLmwpLGU9NCtjcih0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6cj1xMCh0aGlzLHRoaXMubCksZT00K2NyKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6cj1aMCh0aGlzLHRoaXMubCksZT00KzIqY3IodGhpcyx0aGlzLmwp''@;'; put 'put ''O2JyZWFrO2Nhc2UibHBwNCI6ZT00K2NyKHRoaXMsdGhpcy5sKSxyPVEwKHRoaXMsdGhpcy5sKSwyJmUmJihlKz0yKTticmVhaztjYXNlIjhscHA0IjplPTQrY3IodGhpcyx0aGlzLmwpLHI9ZW4odGhpcyx0aGlzLmwpLDMmZSYmKGUrPTQtKDMmZSkpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKGU9''@;'; put 'put ''MCxyPSIiOzAhPT0ocz1pYSh0aGlzLHRoaXMubCtlKyspKTspaS5wdXNoKHBhKHMpKTtyPWkuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKGU9MCxyPSIiOzAhPT0ocz11dCh0aGlzLHRoaXMubCtlKSk7KWkucHVzaChwYShzKSksZSs9MjtlKz0yLHI9aS5qb2luKCIiKTticmVhaztj''@;'; put 'put ''YXNlImRiY3MtY29udCI6Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2M8ZTsrK2Mpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihvKSlyZXR1cm4gcz1pYSh0aGlzLG8pLHRoaXMubD1vKzEsZj1BYS5jYWxsKHRoaXMsZS1jLHM/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGku''@;'; put 'put ''am9pbigiIikrZjtpLnB1c2gocGEodXQodGhpcyxvKSkpLG8rPTJ9cj1pLmpvaW4oIiIpLGUqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIE9lPCJ1Iil7cj1PZS51dGlscy5kZWNvZGUoRHIsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK2UpKTticmVha31jYXNlInNiY3MtY29udCI6''@;'; put 'put ''Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2MhPWU7KytjKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YobykpcmV0dXJuIHM9aWEodGhpcyxvKSx0aGlzLmw9bysxLGY9QWEuY2FsbCh0aGlzLGUtYyxzPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxpLmpvaW4oIiIpK2Y7aS5w''@;'; put 'put ''dXNoKHBhKGlhKHRoaXMsbykpKSxvKz0xfXI9aS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGE9aWEodGhpcyx0aGlzLmwpLHRoaXMubCsrLGE7Y2FzZSAyOnJldHVybiBhPSgiaSI9PT10P09vOnV0KSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLGE7Y2Fz''@;'; put 'put ''ZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT10JiYxMjgmdGhpc1t0aGlzLmwrM10/KG49Y3IodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxuKTooYT0oZT4wP0x0OklvKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LGEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09dClyZXR1cm4gbj04PT1lP2gwKHRoaXMs''@;'; put 'put ''dGhpcy5sKTpoMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxuO2U9ODtjYXNlIDE2OnI9S2ko''@;'; put 'put ''dGhpcyx0aGlzLmwsZSl9fXJldHVybiB0aGlzLmwrPWUscn12YXIgUm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NSxlW3IrMl09dD4+PjE2JjI1NSxlW3IrM109dD4+PjI0JjI1NX0sTm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pjgm''@;'; put 'put ''MjU1LGVbcisyXT10Pj4xNiYyNTUsZVtyKzNdPXQ+PjI0JjI1NX0sYm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NX07ZnVuY3Rpb24gUG8oZSx0LHIpe3ZhciBhPTAsbj0wO2lmKCJkYmNzIj09PXIpe2ZvcihuPTA7biE9dC5sZW5ndGg7KytuKWJvKHRoaXMs''@;'; put 'put ''dC5jaGFyQ29kZUF0KG4pLHRoaXMubCsyKm4pO2E9Mip0Lmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PXIpe2lmKHR5cGVvZiBPZTwidSImJjg3ND09UnQpZm9yKG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPU9lLnV0aWxzLmVuY29kZShSdCx0LmNoYXJBdChuKSk7dGhpc1t0aGlzLmwrbl09''@;'; put 'put ''aVswXX1lbHNlIGZvcih0PXQucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxuPTA7biE9dC5sZW5ndGg7KytuKXRoaXNbdGhpcy5sK25dPTI1NSZ0LmNoYXJDb2RlQXQobik7YT10Lmxlbmd0aH1lbHNle2lmKCJoZXgiPT09cil7Zm9yKDtuPGU7KytuKXRoaXNbdGhpcy5sKytdPXBhcnNl''@;'; put 'put ''SW50KHQuc2xpY2UoMipuLDIqbisyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09cil7dmFyIHM9TWF0aC5taW4odGhpcy5sK2UsdGhpcy5sZW5ndGgpO2ZvcihuPTA7bjxNYXRoLm1pbih0Lmxlbmd0aCxlKTsrK24pe3ZhciBmPXQuY2hhckNvZGVBdChuKTt0aGlzW3RoaXMu''@;'; put 'put ''bCsrXT0yNTUmZix0aGlzW3RoaXMubCsrXT1mPj44fWZvcig7dGhpcy5sPHM7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKGUpe2Nhc2UgMTphPTEsdGhpc1t0aGlzLmxdPTI1NSZ0O2JyZWFrO2Nhc2UgMjphPTIsdGhpc1t0aGlzLmxdPTI1NSZ0LHRoaXNbdGhpcy5sKzFd''@;'; put 'put ''PTI1NSYodD4+Pj04KTticmVhaztjYXNlIDM6YT0zLHRoaXNbdGhpcy5sXT0yNTUmdCx0aGlzW3RoaXMubCsxXT0yNTUmKHQ+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1Jih0Pj4+PTgpO2JyZWFrO2Nhc2UgNDphPTQsUm8odGhpcyx0LHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKGE9OCwiZiI9''@;'; put 'put ''PT1yKXshZnVuY3Rpb24gRG8oZSx0LHIpe3ZhciBhPSh0PDB8fDEvdD09LTEvMD8xOjApPDw3LG49MCxpPTAscz1hPy10OnQ7aXNGaW5pdGUocyk/MD09cz9uPWk9MDoobj1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4yKSxpPXMqTWF0aC5wb3coMiw1Mi1uKSxuPD0tMTAyMyYmKCFp''@;'; put 'put ''c0Zpbml0ZShpKXx8aTxNYXRoLnBvdygyLDUyKSk/bj0tMTAyMjooaS09TWF0aC5wb3coMiw1Miksbis9MTAyMykpOihuPTIwNDcsaT1pc05hTih0KT8yNjk4NTowKTtmb3IodmFyIGY9MDtmPD01OysrZixpLz0yNTYpZVtyK2ZdPTI1NSZpO2Vbcis2XT0oMTUmbik8PDR8MTUmaSxlW3IrN109''@;'; put 'put ''bj4+NHxhfSh0aGlzLHQsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDphPTQsTm8odGhpcyx0LHRoaXMubCl9fXJldHVybiB0aGlzLmwrPWEsdGhpc31mdW5jdGlvbiBhcyhlLHQpe3ZhciByPUtpKHRoaXMsdGhpcy5sLGUubGVuZ3RoPj4xKTtpZihyIT09ZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IodCsiRXhwZWN0ZWQgIitlKyIgc2F3ICIrcik7dGhpcy5sKz1lLmxlbmd0aD4+MX1mdW5jdGlvbiBocihlLHQpe2UubD10LGUucmVhZF9zaGlmdD1BYSxlLmNoaz1hcyxlLndyaXRlX3NoaWZ0PVBvfWZ1bmN0aW9uIHByKGUsdCl7ZS5sKz10fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9X3Qo''@;'; put 'put ''ZSk7cmV0dXJuIGhyKHQsMCksdH1mdW5jdGlvbiBodChlLHQscil7aWYoZSl7dmFyIGEsbixpO2hyKGUsZS5sfHwwKTtmb3IodmFyIHM9ZS5sZW5ndGgsZj0wLGM9MDtlLmw8czspezEyOCYoZj1lLnJlYWRfc2hpZnQoMSkpJiYoZj0oMTI3JmYpKygoMTI3JmUucmVhZF9zaGlmdCgxKSk8PDcp''@;'; put 'put ''KTt2YXIgbz0kYVtmXXx8JGFbNjU1MzVdO2ZvcihpPTEyNyYoYT1lLnJlYWRfc2hpZnQoMSkpLG49MTtuPDQmJjEyOCZhOysrbilpKz0oMTI3JihhPWUucmVhZF9zaGlmdCgxKSkpPDw3Km47Yz1lLmwraTt2YXIgbD1vLmYmJm8uZihlLGkscik7aWYoZS5sPWMsdChsLG8sZikpcmV0dXJufX19''@;'; put 'put ''ZnVuY3Rpb24gU3IoKXt2YXIgZT1bXSx0PVNlPzI1NjoyMDQ4LHI9ZnVuY3Rpb24obyl7dmFyIGw9RyhvKTtyZXR1cm4gaHIobCwwKSxsfSxhPXIodCksbj1mdW5jdGlvbigpe2EmJihhLmxlbmd0aD5hLmwmJigoYT1hLnNsaWNlKDAsYS5sKSkubD1hLmxlbmd0aCksYS5sZW5ndGg+MCYmZS5w''@;'; put 'put ''dXNoKGEpLGE9bnVsbCl9LGk9ZnVuY3Rpb24obyl7cmV0dXJuIGEmJm88YS5sZW5ndGgtYS5sP2E6KG4oKSxhPXIoTWF0aC5tYXgobysxLHQpKSl9O3JldHVybntuZXh0OmkscHVzaDpmdW5jdGlvbihvKXtuKCksbnVsbD09KGE9bykubCYmKGEubD1hLmxlbmd0aCksaSh0KX0sZW5kOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIG4oKSxmcihlKX0sX2J1ZnM6ZX19ZnVuY3Rpb24gQ2EoZSx0LHIpe3ZhciBhPU1lKGUpO2lmKHQucz8oYS5jUmVsJiYoYS5jKz10LnMuYyksYS5yUmVsJiYoYS5yKz10LnMucikpOihhLmNSZWwmJihhLmMrPXQuYyksYS5yUmVsJiYoYS5yKz10LnIpKSwhcnx8ci5iaWZm''@;'; put 'put ''PDEyKXtmb3IoO2EuYz49MjU2OylhLmMtPTI1Njtmb3IoO2Eucj49NjU1MzY7KWEuci09NjU1MzZ9cmV0dXJuIGF9ZnVuY3Rpb24gbnMoZSx0LHIpe3ZhciBhPU1lKGUpO3JldHVybiBhLnM9Q2EoYS5zLHQucyxyKSxhLmU9Q2EoYS5lLHQucyxyKSxhfWZ1bmN0aW9uIERhKGUsdCl7aWYoZS5j''@;'; put 'put ''UmVsJiZlLmM8MClmb3IoZT1NZShlKTtlLmM8MDspZS5jKz10Pjg/MTYzODQ6MjU2O2lmKGUuclJlbCYmZS5yPDApZm9yKGU9TWUoZSk7ZS5yPDA7KWUucis9dD44PzEwNDg1NzY6dD41PzY1NTM2OjE2Mzg0O3ZhciByPWdlKGUpO3JldHVybiFlLmNSZWwmJm51bGwhPWUuY1JlbCYmKHI9ZnVu''@;'; put 'put ''Y3Rpb24gTW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KHIpKSwhZS5yUmVsJiZudWxsIT1lLnJSZWwmJihyPWZ1bmN0aW9uIExvKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShyKSkscn1mdW5jdGlvbiB0bihlLHQpe3Jl''@;'; put 'put ''dHVybiAwIT1lLnMucnx8ZS5zLnJSZWx8fGUuZS5yIT0odC5iaWZmPj0xMj8xMDQ4NTc1OnQuYmlmZj49OD82NTUzNjoxNjM4NCl8fGUuZS5yUmVsPzAhPWUucy5jfHxlLnMuY1JlbHx8ZS5lLmMhPSh0LmJpZmY+PTEyPzE2MzgzOjI1NSl8fGUuZS5jUmVsP0RhKGUucyx0LmJpZmYpKyI6IitE''@;'; put 'put ''YShlLmUsdC5iaWZmKTooZS5zLnJSZWw/IiI6IiQiKStLZShlLnMucikrIjoiKyhlLmUuclJlbD8iIjoiJCIpK0tlKGUuZS5yKTooZS5zLmNSZWw/IiI6IiQiKStIZShlLnMuYykrIjoiKyhlLmUuY1JlbD8iIjoiJCIpK0hlKGUuZS5jKX1mdW5jdGlvbiBhbihlKXtyZXR1cm4gcGFyc2VJbnQo''@;'; put 'put ''ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShlKSwxMCktMX1mdW5jdGlvbiBLZShlKXtyZXR1cm4iIisoZSsxKX1mdW5jdGlvbiBubihlKXtmb3IodmFyIHQ9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9''@;'; put 'put ''KGUpLHI9MCxhPTA7YSE9PXQubGVuZ3RoOysrYSlyPTI2KnIrdC5jaGFyQ29kZUF0KGEpLTY0O3JldHVybiByLTF9ZnVuY3Rpb24gSGUoZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitlKTt2YXIgdD0iIjtmb3IoKytlO2U7ZT1NYXRoLmZsb29yKChlLTEpLzI2''@;'; put 'put ''KSl0PVN0cmluZy5mcm9tQ2hhckNvZGUoKGUtMSklMjYrNjUpK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gR2UoZSl7Zm9yKHZhciB0PTAscj0wLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG49ZS5jaGFyQ29kZUF0KGEpO24+PTQ4JiZuPD01Nz90PTEwKnQrKG4tNDgpOm4+PTY1JiZuPD05MCYmKHI9''@;'; put 'put ''MjYqcisobi02NCkpfXJldHVybntjOnItMSxyOnQtMX19ZnVuY3Rpb24gZ2UoZSl7Zm9yKHZhciB0PWUuYysxLHI9IiI7dDt0PSh0LTEpLzI2fDApcj1TdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTEpJTI2KzY1KStyO3JldHVybiByKyhlLnIrMSl9ZnVuY3Rpb24gUHIoZSl7dmFyIHQ9ZS5pbmRl''@;'; put 'put ''eE9mKCI6Iik7cmV0dXJuLTE9PXQ/e3M6R2UoZSksZTpHZShlKX06e3M6R2UoZS5zbGljZSgwLHQpKSxlOkdlKGUuc2xpY2UodCsxKSl9fWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8Im51bWJlciI9PXR5cGVvZiB0P3dlKGUucyxlLmUpOigic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IGUmJihlPWdlKGUpKSwic3RyaW5nIiE9dHlwZW9mIHQmJih0PWdlKHQpKSxlPT10P2U6ZSsiOiIrdCl9ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxyPTAsYT0wLG49MCxpPWUubGVuZ3RoO2ZvcihyPTA7YTxpJiYhKChuPWUuY2hhckNvZGVBdChhKS02''@;'; put 'put ''NCk8MXx8bj4yNik7KythKXI9MjYqcituO2Zvcih0LnMuYz0tLXIscj0wO2E8aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNDgpPDB8fG4+OSk7KythKXI9MTAqcituO2lmKHQucy5yPS0tcixhPT09aXx8MTAhPW4pcmV0dXJuIHQuZS5jPXQucy5jLHQuZS5yPXQucy5yLHQ7Zm9yKCsrYSxyPTA7''@;'; put 'put ''YSE9aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNjQpPDF8fG4+MjYpOysrYSlyPTI2KnIrbjtmb3IodC5lLmM9LS1yLHI9MDthIT1pJiYhKChuPWUuY2hhckNvZGVBdChhKS00OCk8MHx8bj45KTsrK2Epcj0xMCpyK247cmV0dXJuIHQuZS5yPS0tcix0fWZ1bmN0aW9uIGF0KGUsdCxyKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09ZXx8bnVsbD09ZS50fHwieiI9PWUudD8iIjp2b2lkIDAhPT1lLnc/ZS53OigiZCI9PWUudCYmIWUueiYmciYmci5kYXRlTkYmJihlLno9ci5kYXRlTkYpLCJlIj09ZS50P3h0W2Uudl18fGUudjpmdW5jdGlvbiBpcyhlLHQpe3ZhciByPSJkIj09ZS50JiZ0IGluc3RhbmNlb2Yg''@;'; put 'put ''RGF0ZTtpZihudWxsIT1lLnopdHJ5e3JldHVybiBlLnc9UnIoZS56LHI/aXIodCk6dCl9Y2F0Y2h7fXRyeXtyZXR1cm4gZS53PVJyKChlLlhGfHx7fSkubnVtRm10SWR8fChyPzE0OjApLHI/aXIodCk6dCl9Y2F0Y2h7cmV0dXJuIiIrdH19KGUsbnVsbD09dD9lLnY6dCkpfWZ1bmN0aW9uIEZ0''@;'; put 'put ''KGUsdCl7dmFyIHI9dCYmdC5zaGVldD90LnNoZWV0OiJTaGVldDEiLGE9e307cmV0dXJuIGFbcl09ZSx7U2hlZXROYW1lczpbcl0sU2hlZXRzOmF9fWZ1bmN0aW9uIHNhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHNzKGUsdCxyKXt2YXIgYT1yfHx7fSxuPWU/QXJyYXkuaXNBcnJheShlKTphLmRl''@;'; put 'put ''bnNlO251bGwhPXplJiZudWxsPT1uJiYobj16ZSk7dmFyIGk9ZXx8KG4/W106e30pLHM9MCxmPTA7aWYoaSYmbnVsbCE9YS5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgYS5vcmlnaW4pcz1hLm9yaWdpbjtlbHNle3ZhciBjPSJzdHJpbmciPT10eXBlb2YgYS5vcmlnaW4/R2UoYS5vcmln''@;'; put 'put ''aW4pOmEub3JpZ2luO3M9Yy5yLGY9Yy5jfWlbIiFyZWYiXXx8KGlbIiFyZWYiXT0iQTE6QTEiKX12YXIgbz17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihpWyIhcmVmIl0pe3ZhciBsPURlKGlbIiFyZWYiXSk7by5zLmM9bC5zLmMsby5zLnI9bC5zLnIsby5lLmM9TWF0aC5tYXgo''@;'; put 'put ''by5lLmMsbC5lLmMpLG8uZS5yPU1hdGgubWF4KG8uZS5yLGwuZS5yKSwtMT09cyYmKG8uZS5yPXM9bC5lLnIrMSl9Zm9yKHZhciBoPTA7aCE9dC5sZW5ndGg7KytoKWlmKHRbaF0pe2lmKCFBcnJheS5pc0FycmF5KHRbaF0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMg''@;'; put 'put ''YW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciB4PTA7eCE9dFtoXS5sZW5ndGg7Kyt4KWlmKCEodHlwZW9mIHRbaF1beF0+InUiKSl7dmFyIGQ9e3Y6dFtoXVt4XX0sdj1zK2gsdT1mK3g7aWYoby5zLnI+diYmKG8ucy5yPXYpLG8ucy5jPnUmJihvLnMuYz11KSxvLmUucjx2JiYoby5lLnI9''@;'; put 'put ''diksby5lLmM8dSYmKG8uZS5jPXUpLCF0W2hdW3hdfHwib2JqZWN0IiE9dHlwZW9mIHRbaF1beF18fEFycmF5LmlzQXJyYXkodFtoXVt4XSl8fHRbaF1beF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkLnYpJiYoZC5mPXRbaF1beF1bMV0sZC52PWQudlswXSksbnVsbD09PWQu''@;'; put 'put ''dilpZihkLmYpZC50PSJuIjtlbHNlIGlmKGEubnVsbEVycm9yKWQudD0iZSIsZC52PTA7ZWxzZXtpZighYS5zaGVldFN0dWJzKWNvbnRpbnVlO2QudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZC52P2QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZC52P2QudD0iYiI6ZC52IGluc3RhbmNl''@;'; put 'put ''b2YgRGF0ZT8oZC56PWEuZGF0ZU5GfHxwZVsxNF0sYS5jZWxsRGF0ZXM/KGQudD0iZCIsZC53PVJyKGQueixpcihkLnYpKSk6KGQudD0ibiIsZC52PWlyKGQudiksZC53PVJyKGQueixkLnYpKSk6ZC50PSJzIjtlbHNlIGQ9dFtoXVt4XTtpZihuKWlbdl18fChpW3ZdPVtdKSxpW3ZdW3VdJiZp''@;'; put 'put ''W3ZdW3VdLnomJihkLno9aVt2XVt1XS56KSxpW3ZdW3VdPWQ7ZWxzZXt2YXIgcD1nZSh7Yzp1LHI6dn0pO2lbcF0mJmlbcF0ueiYmKGQuej1pW3BdLnopLGlbcF09ZH19fXJldHVybiBvLnMuYzwxZTcmJihpWyIhcmVmIl09d2UobykpLGl9KG51bGwsZSx0KX1mdW5jdGlvbiBtcihlKXt2YXIg''@;'; put 'put ''dD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT10PyIiOmUucmVhZF9zaGlmdCh0LCJkYmNzIil9ZnVuY3Rpb24gVm8oZSl7cmV0dXJue2ljaDplLnJlYWRfc2hpZnQoMiksaWZudDplLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHNuKGUsdCl7dmFyIHI9ZS5sLGE9ZS5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''LG49bXIoZSksaT1bXSxzPXt0Om4saDpufTtpZigxJmEpe2Zvcih2YXIgZj1lLnJlYWRfc2hpZnQoNCksYz0wO2MhPWY7KytjKWkucHVzaChWbyhlKSk7cy5yPWl9ZWxzZSBzLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gZS5sPXIrdCxzfXZhciBHbz1zbjtmdW5jdGlvbiBIcihlKXt2YXIg''@;'; put 'put ''dD1lLnJlYWRfc2hpZnQoNCkscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHIrPWUucmVhZF9zaGlmdCgxKTw8MTYsZS5sKysse2M6dCxpU3R5bGVSZWY6cn19ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiB0Kz1lLnJlYWRfc2hpZnQoMSk8PDE2LGUubCsrLHtj''@;'; put 'put ''Oi0xLGlTdHlsZVJlZjp0fX12YXIgJG89bXI7ZnVuY3Rpb24gZm4oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09dHx8NDI5NDk2NzI5NT09PXQ/IiI6ZS5yZWFkX3NoaWZ0KHQsImRiY3MiKX12YXIgam89bXIsb249Zm47ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9ZS5zbGljZShl''@;'; put 'put ''LmwsZS5sKzQpLHI9MSZ0WzBdLGE9MiZ0WzBdO2UubCs9NDt2YXIgbj0wPT09YT9oMChbMCwwLDAsMCwyNTImdFswXSx0WzFdLHRbMl0sdFszXV0sMCk6THQodCwwKT4+MjtyZXR1cm4gcj9uLzEwMDpufWZ1bmN0aW9uIG9zKGUpe3ZhciB0PXtzOnt9LGU6e319O3JldHVybiB0LnMucj1lLnJl''@;'; put 'put ''YWRfc2hpZnQoNCksdC5lLnI9ZS5yZWFkX3NoaWZ0KDQpLHQucy5jPWUucmVhZF9zaGlmdCg0KSx0LmUuYz1lLnJlYWRfc2hpZnQoNCksdH12YXIgV3Q9b3M7ZnVuY3Rpb24gZ3IoZSl7aWYoZS5sZW5ndGgtZS5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIGUu''@;'; put 'put ''cmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gbHMoZSx0KXt2YXIgYT1lLnJlYWRfc2hpZnQoNCk7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5I''@;'; put 'put ''TUVUQUZJTEUifVtlLnJlYWRfc2hpZnQoNCldfHwiIn1pZihhPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIithLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGUubC09NCxlLnJlYWRfc2hpZnQoMCwxPT10PyJscHN0ciI6Imxwd3N0ciIpfXZhciBobj0yLEFyPTMs''@;'; put 'put ''dXM9MTIsaHM9ODEsYWw9WzgwLGhzXSx4bj17MTp7bjoiQ29kZVBhZ2UiLHQ6aG59LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpBcn0sNTp7bjoiTGluZUNvdW50Iix0OkFyfSw2OntuOiJQYXJhZ3JhcGhD''@;'; put 'put ''b3VudCIsdDpBcn0sNzp7bjoiU2xpZGVDb3VudCIsdDpBcn0sODp7bjoiTm90ZUNvdW50Iix0OkFyfSw5OntuOiJIaWRkZW5Db3VudCIsdDpBcn0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6QXJ9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6''@;'; put 'put ''NDEwOH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkFyfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7''@;'; put 'put ''bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OkFyLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5''@;'; put 'put ''OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZG49ezE6e246IkNvZGVQYWdlIix0OmhufSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4''@;'; put 'put ''MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246''@;'; put 'put ''Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6QXJ9LDE1OntuOiJXb3JkQ291bnQiLHQ6QXJ9LDE2OntuOiJDaGFyQ291bnQiLHQ6QXJ9LDE3OntuOiJUaHVtYm5haWwiLHQ6''@;'; put 'put ''NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OkFyfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0seHM9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJS''@;'; put 'put ''VSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2''@;'; put 'put ''OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2''@;'; put 'put ''NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LG5sPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr''@;'; put 'put ''VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBpbChlKXtyZXR1cm4gZS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24odCl7cmV0dXJuW3Q+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF19KX12YXIgVnQ9TWUoaWwoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1''@;'; put 'put ''LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4''@;'; put 'put ''ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2''@;'; put 'put ''LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSx4dD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05V''@;'; put 'put ''TSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LGRzPXsiI05VTEwhIjowLCIjRElWLzAhIjo3LCIjVkFMVUUhIjoxNSwiI1JFRiEiOjIzLCIjTkFNRT8iOjI5LCIjTlVNISI6MzYsIiNOL0EiOjQyLCIjR0VUVElOR19EQVRBIjo0MywiI1dURj8iOjI1NX0sdm49''@;'; put 'put ''eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp''@;'; put 'put ''Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCI6InNoZWV0cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC53b3Jrc2hlZXQiOiJzaGVldHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCI6ImNoYXJ0cyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0IjoiY2hhcnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIjoibWFjcm9zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQiOiJtYWNyb3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1h''@;'; put 'put ''Y3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIjoiZGlhbG9ncyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5kaWFsb2dzaGVldCI6ImRpYWxvZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCI6InN0cnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyI6InN0''@;'; put 'put ''cnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIjoic3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyI6InN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNr''@;'; put 'put ''YWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50''@;'; put 'put ''LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNw''@;'; put 'put ''cmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIjoiY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMiOiJjb21tZW50''@;'; put 'put ''cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50aHJlYWRlZGNvbW1lbnRzK3htbCI6InRocmVhZGVkY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGVyc29uK3htbCI6InBlb3BsZSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z''@;'; put 'put ''cHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoibWV0YWRhdGEiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6Im1ldGFkYXRhIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFy''@;'; put 'put ''dGNvbG9yc3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2No''@;'; put 'put ''YWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNl''@;'; put 'put ''dHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6Imxp''@;'; put 'put ''bmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj''@;'; put 'put ''ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5''@;'; put 'put ''VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoiVE9ETyIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5tb2RlbCtkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3Blbnht''@;'; put 'put ''bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5y''@;'; put 'put ''ZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGtlPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3Np''@;'; put 'put ''bmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw''@;'; put 'put ''cy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixDTU5UOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9y''@;'; put 'put ''ZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixDT1JFX1BST1BTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixFWFRfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyIsQ1VTVF9QUk9QUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyIsU1NUOiJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiLFNUWToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiLFRIRU1F''@;'; put 'put ''OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixDSEFSVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsQ0hBUlRF''@;'; put 'put ''WDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiLENTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiLFdTOlsiaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdLERTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixNUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCIsSU1HOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixEUkFXOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciLFhMTUVUQToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGVldE1ldGFkYXRhIixUQ01OVDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNy8xMC9yZWxhdGlvbnNoaXBzL3RocmVhZGVkQ29tbWVudCIsUEVPUExFOiJodHRwOi8vc2NoZW1hcy5taWNy''@;'; put 'put ''b3NvZnQuY29tL29mZmljZS8yMDE3LzEwL3JlbGF0aW9uc2hpcHMvcGVyc29uIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gT2EoZSl7dmFyIHQ9ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVy''@;'; put 'put ''biBlLnNsaWNlKDAsdCsxKSsiX3JlbHMvIitlLnNsaWNlKHQrMSkrIi5yZWxzIn1mdW5jdGlvbiBJYShlLHQpe3ZhciByPXsiIWlkIjp7fX07aWYoIWUpcmV0dXJuIHI7Ii8iIT09dC5jaGFyQXQoMCkmJih0PSIvIit0KTt2YXIgYT17fTtyZXR1cm4oZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKG4pe3ZhciBpPW1lKG4pO2lmKCI8UmVsYXRpb25zaGlwIj09PWlbMF0pe3ZhciBzPXt9O3MuVHlwZT1pLlR5cGUscy5UYXJnZXQ9aS5UYXJnZXQscy5JZD1pLklkLGkuVGFyZ2V0TW9kZSYmKHMuVGFyZ2V0TW9kZT1pLlRhcmdldE1vZGUpO3ZhciBmPSJFeHRlcm5hbCI9PT1p''@;'; put 'put ''LlRhcmdldE1vZGU/aS5UYXJnZXQ6U2EoaS5UYXJnZXQsdCk7cltmXT1zLGFbaS5JZF09c319KSxyWyIhaWQiXT1hLHJ9dmFyIGNsPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixWcj1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250''@;'; put 'put ''ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIs''@;'; put 'put ''IlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRs''@;'; put 'put ''ZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXSxkbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoVnIubGVuZ3RoKSx0PTA7dDxWci5sZW5ndGg7Kyt0KXt2YXIgcj1Wclt0''@;'; put 'put ''XSxhPSIoPzoiK3JbMF0uc2xpY2UoMCxyWzBdLmluZGV4T2YoIjoiKSkrIjopIityWzBdLnNsaWNlKHJbMF0uaW5kZXhPZigiOiIpKzEpO2VbdF09bmV3IFJlZ0V4cCgiPCIrYSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2ErIj4iKX1yZXR1cm4gZX0oKTtmdW5jdGlvbiBtcyhlKXt2YXIgdD17''@;'; put 'put ''fTtlPUJlKGUpO2Zvcih2YXIgcj0wO3I8VnIubGVuZ3RoOysrcil7dmFyIGE9VnJbcl0sbj1lLm1hdGNoKGRsW3JdKTtudWxsIT1uJiZuLmxlbmd0aD4wJiYodFthWzFdXT1JZShuWzFdKSksImRhdGUiPT09YVsyXSYmdFthWzFdXSYmKHRbYVsxXV09WGUodFthWzFdXSkpfXJldHVybiB0fXZh''@;'; put 'put ''ciBYdD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJN''@;'; put 'put ''YW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3Ai''@;'; put 'put ''LCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHdzKGUsdCxyLGEpe3ZhciBuPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgZSluPUhpKGUsYSk7ZWxzZSBmb3IodmFyIGk9''@;'; put 'put ''MDtpPGUubGVuZ3RoOysraSluPW4uY29uY2F0KGVbaV0ubWFwKGZ1bmN0aW9uKGwpe3JldHVybnt2Omx9fSkpO3ZhciBzPSJzdHJpbmciPT10eXBlb2YgdD9IaSh0LGEpLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC52fSk6dCxmPTAsYz0wO2lmKHMubGVuZ3RoPjApZm9yKHZhciBvPTA7byE9''@;'; put 'put ''PW4ubGVuZ3RoO28rPTIpe3N3aXRjaChjPStuW28rMV0udixuW29dLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhl''@;'; put 'put ''NHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMg''@;'; put 'put ''ZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpyLldvcmtzaGVldHM9YyxyLlNoZWV0TmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3''@;'; put 'put ''IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpyLk5hbWVkUmFuZ2VzPWMsci5EZWZpbmVkTmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpyLkNoYXJ0c2hlZXRzPWMsci5DaGFydE5hbWVzPXMu''@;'; put 'put ''c2xpY2UoZixmK2MpfWYrPWN9fXZhciBfbixwbD0vPFtePl0rPltePF0qL2csZ249e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixS''@;'; put 'put ''ZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29t''@;'; put 'put ''cGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn07ZnVuY3Rpb24gZ2woZSx0LHIpe19ufHwoX249czAoZ24pKSxlW3Q9X25bdF18fHRdPXJ9ZnVuY3Rpb24gd24o''@;'; put 'put ''ZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHIvMWU3Kk1hdGgucG93KDIsMzIpK3QvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFRzKGUsdCxyKXt2YXIgYT1l''@;'; put 'put ''Lmwsbj1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihyKWZvcig7ZS5sLWEmMzspKytlLmw7cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gciYmKGUubCs9NC0oYS5sZW5ndGgrMSYzKSYzKSxhfWZ1bmN0aW9uIEZz''@;'; put 'put ''KGUsdCxyKXtyZXR1cm4gMzE9PT10P1NzKGUpOlRzKGUsMCxyKX1mdW5jdGlvbiBrbihlLHQscil7cmV0dXJuIEZzKGUsdCwhMT09PXI/MDo0KX1mdW5jdGlvbiBGbChlKXt2YXIgdD1lLmwscj1fMChlLGhzKTtyZXR1cm4gMD09ZVtlLmxdJiYwPT1lW2UubCsxXSYmZS5sLXQmMiYmKGUubCs9''@;'; put 'put ''MiksW3IsXzAoZSxBcildfWZ1bmN0aW9uIHlzKGUsdCl7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KSxhPXt9LG49MDtuIT1yOysrbil7dmFyIGk9ZS5yZWFkX3NoaWZ0KDQpLHM9ZS5yZWFkX3NoaWZ0KDQpO2FbaV09ZS5yZWFkX3NoaWZ0KHMsMTIwMD09PXQ/InV0ZjE2bGUiOiJ1dGY4Iiku''@;'; put 'put ''cmVwbGFjZShkciwiIikucmVwbGFjZSh3YSwiISIpLDEyMDA9PT10JiZzJTImJihlLmwrPTIpfXJldHVybiAzJmUubCYmKGUubD1lLmw+PjM8PDIpLGF9ZnVuY3Rpb24gQXMoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5zbGljZShlLmwsZS5sK3QpO3JldHVybiBlLmwrPXQsKDMmdCk+''@;'; put 'put ''MCYmKGUubCs9NC0oMyZ0KSYzKSxyfWZ1bmN0aW9uIF8wKGUsdCxyKXt2YXIgbixhPWUucmVhZF9zaGlmdCgyKSxpPXJ8fHt9O2lmKGUubCs9Mix0IT09dXMmJmEhPT10JiYtMT09PWFsLmluZGV4T2YodCkmJig0MTI2IT0oNjU1MzQmdCl8fDQxMjYhPSg2NTUzNCZhKSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJFeHBlY3RlZCB0eXBlICIrdCsiIHNhdyAiK2EpO3N3aXRjaCh0PT09dXM/YTp0KXtjYXNlIDI6cmV0dXJuIG49ZS5yZWFkX3NoaWZ0KDIsImkiKSxpLnJhd3x8KGUubCs9MiksbjtjYXNlIDM6cmV0dXJuIGUucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PWUucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBlLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gVHMoZSwwLDQpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgMzE6cmV0dXJuIFNzKGUpO2Nhc2UgNjQ6cmV0dXJuIHduKGUpO2Nhc2UgNjU6cmV0dXJuIEFzKGUpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIEFsKGUpe3ZhciB0PXt9O3JldHVybiB0LlNpemU9ZS5yZWFkX3NoaWZ0KDQpLGUubCs9dC5TaXplKzMtKHQuU2l6ZS0xKSU0LHR9KGUpO2Nhc2UgODA6cmV0dXJuIGtuKGUsYSwhaS5yYXcpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEVsKGUsdCl7aWYoIXQp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIEZzKGUsdCwwKX0oZSxhKS5yZXBsYWNlKGRyLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHlsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1bXSxh''@;'; put 'put ''PTA7YTx0LzI7KythKXIucHVzaChGbChlKSk7cmV0dXJuIHJ9KGUpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PWE/ZnVuY3Rpb24gVGwoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCg0KSxyPVtdLGE9MDthIT10OysrYSl7dmFyIG49ZS5sO3JbYV09ZS5yZWFkX3NoaWZ0KDAs''@;'; put 'put ''Imxwd3N0ciIpLnJlcGxhY2UoZHIsIiIpLGUubC1uJjImJihlLmwrPTIpfXJldHVybiByfShlKTpmdW5jdGlvbiBTbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9W10sYT0wO2EhPXQ7KythKXJbYV09ZS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShkciwiIik7cmV0''@;'; put 'put ''dXJuIHJ9KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit0KyIgIithKX19ZnVuY3Rpb24gRHMoZSx0KXt2YXIgcj1lLmwsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTAsZj0wLGM9LTEs''@;'; put 'put ''bz17fTtmb3Iocz0wO3MhPW47KytzKXt2YXIgbD1lLnJlYWRfc2hpZnQoNCksaD1lLnJlYWRfc2hpZnQoNCk7aVtzXT1bbCxoK3JdfWkuc29ydChmdW5jdGlvbihULGcpe3JldHVybiBUWzFdLWdbMV19KTt2YXIgeD17fTtmb3Iocz0wO3MhPW47KytzKXtpZihlLmwhPT1pW3NdWzFdKXt2YXIg''@;'; put 'put ''ZD0hMDtpZihzPjAmJnQpc3dpdGNoKHRbaVtzLTFdWzBdXS50KXtjYXNlIDI6ZS5sKzI9PT1pW3NdWzFdJiYoZS5sKz0yLGQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OmUubDw9aVtzXVsxXSYmKGUubD1pW3NdWzFdLGQ9ITEpfWlmKCghdHx8MD09cykmJmUubDw9aVtzXVsxXSYmKGQ9''@;'; put 'put ''ITEsZS5sPWlbc11bMV0pLGQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIraVtzXVsxXSsiIGF0ICIrZS5sKyIgOiIrcyl9aWYodCl7dmFyIHY9dFtpW3NdWzBdXTtpZih4W3Yubl09XzAoZSx2LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PXYucCYmKHhb''@;'; put 'put ''di5uXT1TdHJpbmcoeFt2Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jnhbdi5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09di5uKXN3aXRjaCh4W3Yubl0pe2Nhc2UgMDp4W3Yubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpj''@;'; put 'put ''YXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1Ok1yKGY9eFt2''@;'; put 'put ''Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK3hbdi5uXSl9fWVsc2UgaWYoMT09PWlbc11bMF0pe2lmKGY9eC5Db2RlUGFnZT1fMChlLGhuKSxNcihmKSwtMSE9PWMpe3ZhciB1PWUubDtlLmw9aVtjXVsxXSxvPXlz''@;'; put 'put ''KGUsZiksZS5sPXV9fWVsc2UgaWYoMD09PWlbc11bMF0pe2lmKDA9PT1mKXtjPXMsZS5sPWlbcysxXVsxXTtjb250aW51ZX1vPXlzKGUsZil9ZWxzZXt2YXIgayxwPW9baVtzXVswXV07c3dpdGNoKGVbZS5sXSl7Y2FzZSA2NTplLmwrPTQsaz1BcyhlKTticmVhaztjYXNlIDMwOmNhc2UgMzE6''@;'; put 'put ''ZS5sKz00LGs9a24oZSxlW2UubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OmUubCs9NCxrPWUucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDgs''@;'; put 'put ''ImYiKTticmVhaztjYXNlIDExOmUubCs9NCxrPUplKGUsNCk7YnJlYWs7Y2FzZSA2NDplLmwrPTQsaz1YZSh3bihlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK2VbZS5sXSl9eFtwXT1rfX1yZXR1cm4gZS5sPXIrYSx4fWZ1bmN0aW9uIFJzKGUs''@;'; put 'put ''dCxyKXt2YXIgYT1lLmNvbnRlbnQ7aWYoIWEpcmV0dXJue307aHIoYSwwKTt2YXIgbixpLHMsZixjPTA7YS5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxhLnJlYWRfc2hpZnQoMik7dmFyIG89YS5yZWFkX3NoaWZ0KDQpLGw9YS5yZWFkX3NoaWZ0KDE2KTtpZihsIT09dmUudXRpbHMuY29u''@;'; put 'put ''c3RzLkhFQURFUl9DTFNJRCYmbCE9PXIpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitsKTtpZigxIT09KG49YS5yZWFkX3NoaWZ0KDQpKSYmMiE9PW4pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrbik7aWYoaT1hLnJlYWRfc2hpZnQoMTYp''@;'; put 'put ''LGY9YS5yZWFkX3NoaWZ0KDQpLDE9PT1uJiZmIT09YS5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK2YrIiAhPT0gIithLmwpOzI9PT1uJiYocz1hLnJlYWRfc2hpZnQoMTYpLGM9YS5yZWFkX3NoaWZ0KDQpKTt2YXIgdixoPURzKGEsdCkseD17U3lzdGVtSWRlbnRpZmll''@;'; put 'put ''cjpvfTtmb3IodmFyIGQgaW4gaCl4W2RdPWhbZF07aWYoeC5GTVRJRD1pLDE9PT1uKXJldHVybiB4O2lmKGMtYS5sPT0yJiYoYS5sKz0yKSxhLmwhPT1jKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrYS5sKyIgIT09ICIrYyk7dHJ5e3Y9RHMoYSxudWxsKX1jYXRjaHt9''@;'; put 'put ''Zm9yKGQgaW4gdil4W2RdPXZbZF07cmV0dXJuIHguRk1USUQ9W2ksc10seH1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBlLnJlYWRfc2hpZnQodCksbnVsbH1mdW5jdGlvbiBKZShlLHQpe3JldHVybiAxPT09ZS5yZWFkX3NoaWZ0KHQpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiBlLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiwidSIpfWZ1bmN0aW9uIGJzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIE9sKGUsdCxyKXtmb3IodmFyIGE9W10sbj1lLmwrdDtlLmw8bjspYS5wdXNoKHIoZSxuLWUubCkpO2lmKG4hPT1lLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBhfShlLHQsdHIpfWZ1bmN0''@;'; put 'put ''aW9uIFJhKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQociYmci5iaWZmPj0xMj8yOjEpLG49InNiY3MtY29udCIsaT1EcjtyJiZyLmJpZmY+PTgmJihEcj0xMjAwKSxyJiY4IT1yLmJpZmY/MTI9PXIuYmlmZiYmKG49IndzdHIiKTplLnJlYWRfc2hpZnQoMSkmJihuPSJkYmNzLWNvbnQiKSxy''@;'; put 'put ''LmJpZmY+PTImJnIuYmlmZjw9NSYmKG49ImNwc3RyIik7dmFyIGY9YT9lLnJlYWRfc2hpZnQoYSxuKToiIjtyZXR1cm4gRHI9aSxmfWZ1bmN0aW9uIFJsKGUpe3ZhciB0PURyO0RyPTEyMDA7dmFyIGMscj1lLnJlYWRfc2hpZnQoMiksYT1lLnJlYWRfc2hpZnQoMSksbj00JmEsaT04JmEscz0x''@;'; put 'put ''KygxJmEpLGY9MCxvPXt9O2kmJihmPWUucmVhZF9zaGlmdCgyKSksbiYmKGM9ZS5yZWFkX3NoaWZ0KDQpKTt2YXIgaD0wPT09cj8iIjplLnJlYWRfc2hpZnQociwyPT1zPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtyZXR1cm4gaSYmKGUubCs9NCpmKSxuJiYoZS5sKz1jKSxvLnQ9aCxpfHwo''@;'; put 'put ''by5yYXc9Ijx0PiIrby50KyI8L3Q+IixvLnI9by50KSxEcj10LG99ZnVuY3Rpb24gR3QoZSx0LHIpe2lmKHIpe2lmKHIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBlLnJlYWRfc2hpZnQodCwiY3BzdHIiKTtpZihyLmJpZmY+PTEyKXJldHVybiBlLnJlYWRfc2hpZnQodCwiZGJjcy1jb250''@;'; put 'put ''Iil9dmFyIG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLnJlYWRfc2hpZnQodCwwPT09bj8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTmEoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKTtyZXR1cm4gMD09PWE/KGUubCsrLCIiKTpHdChlLGEs''@;'; put 'put ''cil9ZnVuY3Rpb24genQoZSx0LHIpe2lmKHIuYmlmZj41KXJldHVybiBOYShlLDAscik7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09YT8oZS5sKyssIiIpOmUucmVhZF9zaGlmdChhLHIuYmlmZjw9NHx8IWUubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiB3MChl''@;'; put 'put ''KXt2YXIgdD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQ+MD9lLnJlYWRfc2hpZnQodCwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpOiIifWZ1bmN0aW9uIE1zKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSksZS5yZWFkX3NoaWZ0KDEpLGUucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSld''@;'; put 'put ''fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIHI9TXMoZSk7cmV0dXJuIHJbM109MCxyfWZ1bmN0aW9uIG50KGUpe3JldHVybntyOmUucmVhZF9zaGlmdCgyKSxjOmUucmVhZF9zaGlmdCgyKSxpeGZlOmUucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gVmwoZSx0LHIpe3ZhciBhPXIuYmlmZj44PzQ6Mjty''@;'; put 'put ''ZXR1cm5bZS5yZWFkX3NoaWZ0KGEpLGUucmVhZF9zaGlmdChhLCJpIiksZS5yZWFkX3NoaWZ0KGEsImkiKV19ZnVuY3Rpb24gV3MoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx1bihlKV19ZnVuY3Rpb24gazAoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3Jl''@;'; put 'put ''dHVybntzOntjOmUucmVhZF9zaGlmdCgyKSxyOnR9LGU6e2M6ZS5yZWFkX3NoaWZ0KDIpLHJ9fX1mdW5jdGlvbiBWcyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6ZS5yZWFkX3NoaWZ0KDEpLHI6dH0sZTp7YzplLnJlYWRfc2hpZnQoMSks''@;'; put 'put ''cn19fXZhciBHbD1WcztmdW5jdGlvbiBYcyhlKXtlLmwrPTQ7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTEyLFtyLHQsYV19ZnVuY3Rpb24gX3IoZSl7ZS5sKz0yLGUubCs9ZS5yZWFkX3NoaWZ0KDIpfXZhciBq''@;'; put 'put ''bD17MDpfciw0Ol9yLDU6X3IsNjpfciw3OmZ1bmN0aW9uICRsKGUpe3JldHVybiBlLmwrPTQsZS5jZj1lLnJlYWRfc2hpZnQoMikse319LDg6X3IsOTpfciwxMDpfciwxMTpfciwxMjpfciwxMzpmdW5jdGlvbiB6bChlKXt2YXIgdD17fTtyZXR1cm4gZS5sKz00LGUubCs9MTYsdC5mU2hhcmVk''@;'; put 'put ''Tm90ZT1lLnJlYWRfc2hpZnQoMiksZS5sKz00LHR9LDE0Ol9yLDE1Ol9yLDE2Ol9yLDE3Ol9yLDE4Ol9yLDE5Ol9yLDIwOl9yLDIxOlhzfTtmdW5jdGlvbiBFMChlLHQpe3ZhciByPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKHIuQklGRlZlcj1lLnJlYWRfc2hpZnQoMiksKHQtPTIpPj0yJiYo''@;'; put 'put ''ci5kdD1lLnJlYWRfc2hpZnQoMiksZS5sLT0yKSxyLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZih0PjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrci5C''@;'; put 'put ''SUZGVmVyKX1yZXR1cm4gZS5yZWFkX3NoaWZ0KHQpLHJ9ZnVuY3Rpb24gR3MoZSx0LHIpe3ZhciBhPTA7ciYmMj09ci5iaWZmfHwoYT1lLnJlYWRfc2hpZnQoMikpO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmMj09ci5iaWZmJiYoYT0xLShuPj4xNSksbiY9MzI3NjcpLFt7VW5z''@;'; put 'put ''eW5jZWQ6MSZhLER5WmVybzooMiZhKT4+MSxFeEFzYzooNCZhKT4+MixFeERzYzooOCZhKT4+M30sbl19dmFyIHd1PXp0O2Z1bmN0aW9uIHpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPTghPXIuYmlmZiYmci5iaWZmPzI6NCxpPWUucmVhZF9zaGlmdChuKSxzPWUucmVhZF9zaGlmdChuKSxmPWUu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxjPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sPWEse3M6e3I6aSxjOmZ9LGU6e3I6cyxjfX19ZnVuY3Rpb24ganMoZSx0LHIpe3ZhciBhPW50KGUpOygyPT1yLmJpZmZ8fDk9PXQpJiYrK2UubDt2YXIgbj1mdW5jdGlvbiBJbChlKXt2YXIgdD1lLnJlYWRfc2hpZnQo''@;'; put 'put ''MSk7cmV0dXJuIDE9PT1lLnJlYWRfc2hpZnQoMSk/dDoxPT09dH0oZSk7cmV0dXJuIGEudmFsPW4sYS50PSEwPT09bnx8ITE9PT1uPyJiIjoiZSIsYX12YXIgS3M9ZnVuY3Rpb24gSGwoZSx0LHIpe3JldHVybiAwPT09dD8iIjp6dChlLDAscil9O2Z1bmN0aW9uIFlzKGUsdCxyKXt2YXIgbixh''@;'; put 'put ''PWUucmVhZF9zaGlmdCgyKSxpPXtmQnVpbHRJbjoxJmEsZldhbnRBZHZpc2U6YT4+PjEmMSxmV2FudFBpY3Q6YT4+PjImMSxmT2xlOmE+Pj4zJjEsZk9sZUxpbms6YT4+PjQmMSxjZjphPj4+NSYxMDIzLGZJY29uOmE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1yLnNiY2NoJiYobj1mdW5jdGlv''@;'; put 'put ''biBYbChlLHQscil7ZS5sKz00O3ZhciBhPWUubCsodC09NCksbj1SYShlLDAsciksaT1lLnJlYWRfc2hpZnQoMik7aWYoaSE9PShhLT1lLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIithKyIgIT0gIitpKTtyZXR1cm4gZS5sKz1pLG59KGUsdC0y''@;'; put 'put ''LHIpKSxpLmJvZHk9bnx8ZS5yZWFkX3NoaWZ0KHQtMiksInN0cmluZyI9PXR5cGVvZiBuJiYoaS5OYW1lPW4pLGl9dmFyIE51PVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJh''@;'; put 'put ''c2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94''@;'; put 'put ''bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIEpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgxKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKSxjPTA7KCFyfHxyLmJpZmY+PTUpJiYoNSE9''@;'; put 'put ''ci5iaWZmJiYoZS5sKz0yKSxjPWUucmVhZF9zaGlmdCgyKSw1PT1yLmJpZmYmJihlLmwrPTIpLGUubCs9NCk7dmFyIG89R3QoZSxzLHIpOzMyJm4mJihvPU51W28uY2hhckNvZGVBdCgwKV0pO3ZhciBsPWEtZS5sO3ImJjI9PXIuYmlmZiYmLS1sO3ZhciBoPWEhPWUubCYmMCE9PWYmJmw+MD9m''@;'; put 'put ''dW5jdGlvbiBLZChlLHQscixhKXt2YXIgcyxuPWUubCt0LGk9SGEoZSxhLHIpO3JldHVybiBuIT09ZS5sJiYocz1XYShlLG4tZS5sLGkscikpLFtpLHNdfShlLGwscixmKTpbXTtyZXR1cm57Y2hLZXk6aSxOYW1lOm8saXRhYjpjLHJnY2U6aH19ZnVuY3Rpb24gcXMoZSx0LHIpe2lmKHIuYmlm''@;'; put 'put ''Zjw4KXJldHVybiBmdW5jdGlvbiBidShlLHQscil7Mz09ZVtlLmwrMV0mJmVbZS5sXSsrO3ZhciBhPVJhKGUsMCxyKTtyZXR1cm4gMz09YS5jaGFyQ29kZUF0KDApP2Euc2xpY2UoMSk6YX0oZSwwLHIpO2Zvcih2YXIgYT1bXSxuPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KHIuYmlmZj44PzQ6Mik7''@;'; put 'put ''MCE9aS0tOylhLnB1c2goVmwoZSwwLHIpKTtpZihlLmwhPW4pdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrZS5sKyIgIT0gIituKTtyZXR1cm4gYX1mdW5jdGlvbiBacyhlLHQscil7dmFyIGE9R2woZSw2KTtzd2l0Y2goci5iaWZmKXtjYXNlIDI6ZS5sKyssdC09NzticmVh''@;'; put 'put ''aztjYXNlIDM6Y2FzZSA0OmUubCs9Mix0LT04O2JyZWFrO2RlZmF1bHQ6ZS5sKz02LHQtPTEyfXJldHVyblthLCRkKGUsdCxyKV19dmFyIFh1PXs4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sK3Q7ZS5sKz0xMDt2YXIgYT1lLnJlYWRfc2hpZnQoMik7ZS5sKz00LGUubCs9MixlLmwrPTIsZS5s''@;'; put 'put ''Kz0yLGUubCs9NDt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubCs9bixlLmw9cix7Zm10OmF9fX07ZnVuY3Rpb24gUXMoZSx0LHIpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJuIHByKGUsdCk7dmFyIGE9ciYmci5iaWZmPj0xMj80OjIsbj1lLnJlYWRfc2hpZnQoYSksaT1lLnJlYWRf''@;'; put 'put ''c2hpZnQoYSkscz1lLnJlYWRfc2hpZnQoYSksZj1lLnJlYWRfc2hpZnQoYSksYz1lLnJlYWRfc2hpZnQoMik7Mj09YSYmKGUubCs9Mik7dmFyIG89e3M6bixlOmksdzpzLGl4ZmU6ZixmbGFnczpjfTtyZXR1cm4oci5iaWZmPj01fHwhci5iaWZmKSYmKG8ubGV2ZWw9Yz4+OCY3KSxvfXZhciBp''@;'; put 'put ''aD1udCxzaD1icyxmaD1OYSxtaD1bMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sVG49ZnVuY3Rpb24oKXt2YXIgZT17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUw''@;'; put 'put ''LDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAs''@;'; put 'put ''MTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5''@;'; put 'put ''MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LHQ9czAoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEw''@;'; put 'put ''NDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtm''@;'; put 'put ''dW5jdGlvbiBhKGYsYyl7dmFyIG89Y3x8e307by5kYXRlTkZ8fChvLmRhdGVORj0ieXl5eW1tZGQiKTt2YXIgbD1zYShmdW5jdGlvbiByKGYsYyl7dmFyIG89W10sbD1fdCgxKTtzd2l0Y2goYy50eXBlKXtjYXNlImJhc2U2NCI6bD1JcihPcihmKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmw9SXIo''@;'; put 'put ''Zik7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOmw9Zn1ocihsLDApO3ZhciBoPWwucmVhZF9zaGlmdCgxKSx4PSEhKDEzNiZoKSxkPSExLHY9ITE7c3dpdGNoKGgpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmQ9''@;'; put 'put ''ITAseD0hMDticmVhaztjYXNlIDE0MDp2PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitoLnRvU3RyaW5nKDE2KSl9dmFyIHU9MCxwPTUyMTsyPT1oJiYodT1sLnJlYWRfc2hpZnQoMikpLGwubCs9MywyIT1oJiYodT1sLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpLHU+MTA0ODU3NiYmKHU9MWU2KSwyIT1oJiYocD1sLnJlYWRfc2hpZnQoMikpO3ZhciBrPWwucmVhZF9zaGlmdCgyKSxUPWMuY29kZXBhZ2V8fDEyNTI7MiE9aCYmKGwubCs9MTYsbC5yZWFkX3NoaWZ0KDEpLDAhPT1sW2wubF0mJihUPWVbbFtsLmxdXSksbC5sKz0xLGwubCs9''@;'; put 'put ''MiksdiYmKGwubCs9MzYpO2Zvcih2YXIgZz1bXSxOPXt9LE09TWF0aC5taW4obC5sZW5ndGgsMj09aD81MjE6cC0xMC0oZD8yNjQ6MCkpLEk9dj8zMjoxMTtsLmw8TSYmMTMhPWxbbC5sXTspc3dpdGNoKE49e30sTi5uYW1lPU9lLnV0aWxzLmRlY29kZShULGwuc2xpY2UobC5sLGwubCtJKSku''@;'; put 'put ''cmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLGwubCs9SSxOLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShsLnJlYWRfc2hpZnQoMSkpLDIhPWgmJiF2JiYoTi5vZmZzZXQ9bC5yZWFkX3NoaWZ0KDQpKSxOLmxlbj1sLnJlYWRfc2hpZnQoMSksMj09aCYmKE4ub2Zmc2V0PWwucmVhZF9z''@;'; put 'put ''aGlmdCgyKSksTi5kZWM9bC5yZWFkX3NoaWZ0KDEpLE4ubmFtZS5sZW5ndGgmJmcucHVzaChOKSwyIT1oJiYobC5sKz12PzEzOjE0KSxOLnR5cGUpe2Nhc2UiQiI6KCFkfHw4IT1OLmxlbikmJmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJHIjpjYXNlIlAiOmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2Ui''@;'; put 'put ''VCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK04udHlwZSl9aWYoMTMhPT1sW2wubF0mJihsLmw9cC0xKSwxMyE9PWwucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK2wu''@;'; put 'put ''bCsiICIrbFtsLmxdKTtsLmw9cDt2YXIgeT0wLFA9MDtmb3Iob1swXT1bXSxQPTA7UCE9Zy5sZW5ndGg7KytQKW9bMF1bUF09Z1tQXS5uYW1lO2Zvcig7dS0tID4wOylpZig0MiE9PWxbbC5sXSlmb3IoKytsLmwsb1srK3ldPVtdLFA9MCxQPTA7UCE9Zy5sZW5ndGg7KytQKXt2YXIgUj1sLnNs''@;'; put 'put ''aWNlKGwubCxsLmwrZ1tQXS5sZW4pO2wubCs9Z1tQXS5sZW4saHIoUiwwKTt2YXIgVj1PZS51dGlscy5kZWNvZGUoVCxSKTtzd2l0Y2goZ1tQXS50eXBlKXtjYXNlIkMiOlYudHJpbSgpLmxlbmd0aCYmKG9beV1bUF09Vi5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6b1t5XVtQ''@;'; put 'put ''XT04PT09Vi5sZW5ndGg/bmV3IERhdGUoK1Yuc2xpY2UoMCw0KSwrVi5zbGljZSg0LDYpLTEsK1Yuc2xpY2UoNiw4KSk6VjticmVhaztjYXNlIkYiOm9beV1bUF09cGFyc2VGbG9hdChWLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOm9beV1bUF09dj8yMTQ3NDgzNjQ4XlIucmVhZF9z''@;'; put 'put ''aGlmdCgtNCwiaSIpOlIucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goVi50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOm9beV1bUF09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOm9beV1bUF09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitWKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZigheCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitoLnRvU3RyaW5nKDE2KSk7b1t5XVtQXT0iIyNNRU1PIyMiKyh2P3BhcnNl''@;'; put 'put ''SW50KFYudHJpbSgpLDEwKTpSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KFY9Vi5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1WJiYob1t5XVtQXT0rVnx8MCk7YnJlYWs7Y2FzZSJAIjpvW3ldW1BdPW5ldyBEYXRlKFIucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1''@;'; put 'put ''NjgzMmU1KTticmVhaztjYXNlIlQiOm9beV1bUF09bmV3IERhdGUoODY0ZTUqKFIucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6b1t5XVtQXT1SLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCtSLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCpNYXRoLnBv''@;'; put 'put ''dygyLDMyKTticmVhaztjYXNlIk8iOm9beV1bUF09LVIucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoZCYmOD09Z1tQXS5sZW4pe29beV1bUF09Ui5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Ui5sKz1nW1BdLmxlbjticmVhaztjYXNlIjAiOmlm''@;'; put 'put ''KCJfTnVsbEZsYWdzIj09PWdbUF0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK2dbUF0udHlwZSl9fWVsc2UgbC5sKz1rO2lmKDIhPWgmJmwubDxsLmxlbmd0aCYmMjYhPWxbbC5sKytdKXRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IEVPRiBNYXJrZXIgbWlzc2luZyAiKyhsLmwtMSkrIiBvZiAiK2wubGVuZ3RoKyIgIitsW2wubC0xXS50b1N0cmluZygxNikpO3JldHVybiBjJiZjLnNoZWV0Um93cyYmKG89by5zbGljZSgwLGMuc2hlZXRSb3dzKSksYy5EQkY9ZyxvfShmLG8pLG8pO3JldHVybiBsWyIhY29scyJdPW8uREJG''@;'; put 'put ''Lm1hcChmdW5jdGlvbihoKXtyZXR1cm57d2NoOmgubGVuLERCRjpofX0pLGRlbGV0ZSBvLkRCRixsfXZhciBpPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gbihmLGMpe3RyeXtyZXR1cm4gRnQoYShmLGMpLGMpfWNhdGNoKG8pe2lm''@;'; put 'put ''KGMmJmMuV1RGKXRocm93IG99cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHMoZixjKXt2YXIgbz1jfHx7fTtpZigrby5jb2RlcGFnZT49MCYmTXIoK28uY29kZXBhZ2UpLCJzdHJpbmciPT1vLnR5cGUpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBsPVNyKCksaD1mdW5jdGlvbiBOMChlLHQpe2lmKG51bGw9PWV8fG51bGw9PWVbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcj17dDoibiIsdjowfSxhPTAsbj0xLGk9W10scz0wLGY9IiIsYz17czp7cjowLGM6MH0sZTp7cjow''@;'; put 'put ''LGM6MH19LG89dHx8e30sbD1udWxsIT1vLnJhbmdlP28ucmFuZ2U6ZVsiIXJlZiJdO3N3aXRjaCgxPT09by5oZWFkZXI/YT0xOiJBIj09PW8uaGVhZGVyP2E9MjpBcnJheS5pc0FycmF5KG8uaGVhZGVyKT9hPTM6bnVsbD09by5oZWFkZXImJihhPTApLHR5cGVvZiBsKXtjYXNlInN0cmluZyI6''@;'; put 'put ''Yz1EZShsKTticmVhaztjYXNlIm51bWJlciI6KGM9RGUoZVsiIXJlZiJdKSkucy5yPWw7YnJlYWs7ZGVmYXVsdDpjPWx9YT4wJiYobj0wKTt2YXIgaD1LZShjLnMucikseD1bXSxkPVtdLHY9MCx1PTAscD1BcnJheS5pc0FycmF5KGUpLGs9Yy5zLnIsVD0wLGc9e307cCYmIWVba10mJihlW2td''@;'; put 'put ''PVtdKTt2YXIgTj1vLnNraXBIaWRkZW4mJmVbIiFjb2xzIl18fFtdLE09by5za2lwSGlkZGVuJiZlWyIhcm93cyJdfHxbXTtmb3IoVD1jLnMuYztUPD1jLmUuYzsrK1QpaWYoIShOW1RdfHx7fSkuaGlkZGVuKXN3aXRjaCh4W1RdPUhlKFQpLHI9cD9lW2tdW1RdOmVbeFtUXStoXSxhKXtjYXNl''@;'; put 'put ''IDE6aVtUXT1ULWMucy5jO2JyZWFrO2Nhc2UgMjppW1RdPXhbVF07YnJlYWs7Y2FzZSAzOmlbVF09by5oZWFkZXJbVC1jLnMuY107YnJlYWs7ZGVmYXVsdDppZihudWxsPT1yJiYocj17dzoiX19FTVBUWSIsdDoicyJ9KSxmPXM9YXQocixudWxsLG8pLHU9Z1tzXXx8MCl7ZG97Zj1zKyJfIit1''@;'; put 'put ''Kyt9d2hpbGUoZ1tmXSk7Z1tzXT11LGdbZl09MX1lbHNlIGdbc109MTtpW1RdPWZ9Zm9yKGs9Yy5zLnIrbjtrPD1jLmUucjsrK2spaWYoIShNW2tdfHx7fSkuaGlkZGVuKXt2YXIgST1fYyhlLGMsayx4LGEsaSxwLG8pOyghMT09PUkuaXNlbXB0eXx8KDE9PT1hPyExIT09by5ibGFua3Jvd3M6''@;'; put 'put ''by5ibGFua3Jvd3MpKSYmKGRbdisrXT1JLnJvdyl9cmV0dXJuIGQubGVuZ3RoPXYsZH0oZix7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLHg9aFswXSxkPWguc2xpY2UoMSksdj1mWyIhY29scyJdfHxbXSx1PTAscD0wLGs9MCxUPTE7Zm9yKHU9MDt1PHgubGVuZ3RoOysrdSlpZigo''@;'; put 'put ''KHZbdV18fHt9KS5EQkZ8fHt9KS5uYW1lKXhbdV09dlt1XS5EQkYubmFtZSwrK2s7ZWxzZSBpZihudWxsIT14W3VdKXtpZigrK2ssIm51bWJlciI9PXR5cGVvZiB4W3VdJiYoeFt1XT14W3VdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiB4W3VdKXRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IEludmFsaWQgY29sdW1uIG5hbWUgIit4W3VdKyIgfCIrdHlwZW9mIHhbdV0rInwiKTtpZih4LmluZGV4T2YoeFt1XSkhPT11KWZvcihwPTA7cDwxMDI0OysrcClpZigtMT09eC5pbmRleE9mKHhbdV0rIl8iK3ApKXt4W3VdKz0iXyIrcDticmVha319dmFyIGc9RGUoZlsiIXJlZiJdKSxOPVtd''@;'; put 'put ''LE09W10sST1bXTtmb3IodT0wO3U8PWcuZS5jLWcucy5jOysrdSl7dmFyIHk9IiIsUD0iIixSPTAsVj1bXTtmb3IocD0wO3A8ZC5sZW5ndGg7KytwKW51bGwhPWRbcF1bdV0mJlYucHVzaChkW3BdW3VdKTtpZigwIT1WLmxlbmd0aCYmbnVsbCE9eFt1XSl7Zm9yKHA9MDtwPFYubGVuZ3RoOysr''@;'; put 'put ''cCl7c3dpdGNoKHR5cGVvZiBWW3BdKXtjYXNlIm51bWJlciI6UD0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6UD0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpQPSJMIjticmVhaztjYXNlIm9iamVjdCI6UD1WW3BdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9Uj1NYXRoLm1heChSLFN0''@;'; put 'put ''cmluZyhWW3BdKS5sZW5ndGgpLHk9eSYmeSE9UD8iQyI6UH1SPjI1MCYmKFI9MjUwKSwiQyI9PShQPSgodlt1XXx8e30pLkRCRnx8e30pLnR5cGUpJiZ2W3VdLkRCRi5sZW4+UiYmKFI9dlt1XS5EQkYubGVuKSwiQiI9PXkmJiJOIj09UCYmKHk9Ik4iLElbdV09dlt1XS5EQkYuZGVjLFI9dlt1''@;'; put 'put ''XS5EQkYubGVuKSxNW3VdPSJDIj09eXx8Ik4iPT1QP1I6aVt5XXx8MCxUKz1NW3VdLE5bdV09eX1lbHNlIE5bdV09Ij8ifXZhciBYPWwubmV4dCgzMik7Zm9yKFgud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLFgud3JpdGVfc2hpZnQoNCxkLmxlbmd0aCksWC53cml0ZV9zaGlmdCgyLDI5Nisz''@;'; put 'put ''MiprKSxYLndyaXRlX3NoaWZ0KDIsVCksdT0wO3U8NDsrK3UpWC53cml0ZV9zaGlmdCg0LDApO2ZvcihYLndyaXRlX3NoaWZ0KDQsKCt0W1J0XXx8Myk8PDgpLHU9MCxwPTA7dTx4Lmxlbmd0aDsrK3UpaWYobnVsbCE9eFt1XSl7dmFyIGI9bC5uZXh0KDMyKSxlZT0oeFt1XS5zbGljZSgtMTAp''@;'; put 'put ''KyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7Yi53cml0ZV9zaGlmdCgxLGVlLCJzYmNzIiksYi53cml0ZV9zaGlmdCgxLCI/Ij09Tlt1XT8iQyI6Tlt1XSwic2JjcyIpLGIud3JpdGVfc2hpZnQoNCxwKSxiLndyaXRlX3NoaWZ0KDEsTVt1XXx8aVtOW3VdXXx8MCksYi53''@;'; put 'put ''cml0ZV9zaGlmdCgxLElbdV18fDApLGIud3JpdGVfc2hpZnQoMSwyKSxiLndyaXRlX3NoaWZ0KDQsMCksYi53cml0ZV9zaGlmdCgxLDApLGIud3JpdGVfc2hpZnQoNCwwKSxiLndyaXRlX3NoaWZ0KDQsMCkscCs9TVt1XXx8aVtOW3VdXXx8MH12YXIgbGU9bC5uZXh0KDI2NCk7Zm9yKGxlLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMTMpLHU9MDt1PDY1OysrdSlsZS53cml0ZV9zaGlmdCg0LDApO2Zvcih1PTA7dTxkLmxlbmd0aDsrK3Upe3ZhciByZT1sLm5leHQoVCk7Zm9yKHJlLndyaXRlX3NoaWZ0KDEsMCkscD0wO3A8eC5sZW5ndGg7KytwKWlmKG51bGwhPXhbcF0pc3dpdGNoKE5bcF0pe2Nhc2Ui''@;'; put 'put ''TCI6cmUud3JpdGVfc2hpZnQoMSxudWxsPT1kW3VdW3BdPzYzOmRbdV1bcF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6cmUud3JpdGVfc2hpZnQoOCxkW3VdW3BdfHwwLCJmIik7YnJlYWs7Y2FzZSJOIjp2YXIgZGU9IjAiO2ZvcigibnVtYmVyIj09dHlwZW9mIGRbdV1bcF0mJihkZT1kW3VdW3Bd''@;'; put 'put ''LnRvRml4ZWQoSVtwXXx8MCkpLGs9MDtrPE1bcF0tZGUubGVuZ3RoOysraylyZS53cml0ZV9zaGlmdCgxLDMyKTtyZS53cml0ZV9zaGlmdCgxLGRlLCJzYmNzIik7YnJlYWs7Y2FzZSJEIjpkW3VdW3BdPyhyZS53cml0ZV9zaGlmdCg0LCgiMDAwMCIrZFt1XVtwXS5nZXRGdWxsWWVhcigpKS5z''@;'; put 'put ''bGljZSgtNCksInNiY3MiKSxyZS53cml0ZV9zaGlmdCgyLCgiMDAiKyhkW3VdW3BdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHJlLndyaXRlX3NoaWZ0KDIsKCIwMCIrZFt1XVtwXS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpyZS53cml0ZV9zaGlmdCg4LCIwMDAw''@;'; put 'put ''MDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB1ZT1TdHJpbmcobnVsbCE9ZFt1XVtwXT9kW3VdW3BdOiIiKS5zbGljZSgwLE1bcF0pO2ZvcihyZS53cml0ZV9zaGlmdCgxLHVlLCJzYmNzIiksaz0wO2s8TVtwXS11ZS5sZW5ndGg7KytrKXJlLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1''@;'; put 'put ''cm4gbC5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLGwuZW5kKCl9fX0oKSxlZj1mdW5jdGlvbigpe3ZhciBlPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4''@;'; put 'put ''Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhl''@;'; put 'put ''NCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZi''@;'; put 'put ''IixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUTox''@;'; put 'put ''ODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sdD1uZXcgUmVnRXhw''@;'; put 'put ''KCJceDFiTigiKyRlKGUpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLHI9ZnVuY3Rpb24oeCxkKXt2YXIgdj1lW2RdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygdj9CMCh2KTp2fSxhPWZ1bmN0aW9u''@;'; put 'put ''KHgsZCx2KXt2YXIgdT1kLmNoYXJDb2RlQXQoMCktMzI8PDR8di5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09dT94OkIwKHUpfTtmdW5jdGlvbiBpKHgsZCl7dmFyIFgsdj14LnNwbGl0KC9bXG5ccl0rLyksdT0tMSxwPS0xLGs9MCxUPTAsZz1bXSxOPVtdLE09bnVsbCxJPXt9LHk9W10s''@;'; put 'put ''UD1bXSxSPVtdLFY9MDtmb3IoK2QuY29kZXBhZ2U+PTAmJk1yKCtkLmNvZGVwYWdlKTtrIT09di5sZW5ndGg7KytrKXtWPTA7dmFyIHJlLGI9dltrXS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csYSkucmVwbGFjZSh0LHIpLGVlPWIucmVwbGFjZSgv''@;'; put 'put ''OzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYi5sZW5ndGg+MClzd2l0Y2goZWVbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PWVlWzFd''@;'; put 'put ''LmNoYXJBdCgwKSYmTi5wdXNoKGIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBkZT0hMSx1ZT0hMSxGZT0hMSxjZT0hMSx4ZT0tMSxLPS0xO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJH''@;'; put 'put ''IjpicmVhaztjYXNlIlgiOnA9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsdWU9ITA7YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSx1ZXx8KHA9MCksWD1nLmxlbmd0aDtYPD11OysrWClnW1hdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KHJlPWVlW1Rd''@;'; put 'put ''LnNsaWNlKDEpKS5jaGFyQXQoMCk/cmU9cmUuc2xpY2UoMSxyZS5sZW5ndGgtMSk6IlRSVUUiPT09cmU/cmU9ITA6IkZBTFNFIj09PXJlP3JlPSExOmlzTmFOKEpyKHJlKSk/aXNOYU4oYWEocmUpLmdldERhdGUoKSl8fChyZT1YZShyZSkpOihyZT1KcihyZSksbnVsbCE9PU0mJmJ0KE0pJiYo''@;'; put 'put ''cmU9bzAocmUpKSksdHlwZW9mIE9lPCJ1IiYmInN0cmluZyI9PXR5cGVvZiByZSYmInN0cmluZyIhPShkfHx7fSkudHlwZSYmKGR8fHt9KS5jb2RlcGFnZSYmKHJlPU9lLnV0aWxzLmRlY29kZShkLmNvZGVwYWdlLHJlKSksZGU9ITA7YnJlYWs7Y2FzZSJFIjpjZT0hMDt2YXIgQz11YShlZVtU''@;'; put 'put ''XS5zbGljZSgxKSx7cjp1LGM6cH0pO2dbdV1bcF09W2dbdV1bcF0sQ107YnJlYWs7Y2FzZSJTIjpGZT0hMCxnW3VdW3BdPVtnW3VdW3BdLCJTNVMiXTticmVhaztjYXNlIlIiOnhlPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6Sz1wYXJzZUludChlZVtUXS5zbGlj''@;'; put 'put ''ZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGQmJmQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYil9aWYoZGUmJihnW3VdW3BdJiYyPT1nW3VdW3BdLmxlbmd0aD9nW3VdW3BdWzBdPXJlOmdbdV1bcF09cmUsTT1udWxsKSxGZSl7aWYoY2UpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFU9eGU+LTEmJmdbeGVdW0tdO2lmKCFVfHwhVVsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO2dbdV1bcF1bMV09a2YoVVsxXSx7cjp1LXhl''@;'; put 'put ''LGM6cC1LfSl9YnJlYWs7Y2FzZSJGIjp2YXIgTz0wO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiWCI6cD1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSwrK087YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSkt''@;'; put 'put ''MSxYPWcubGVuZ3RoO1g8PXU7KytYKWdbWF09W107YnJlYWs7Y2FzZSJNIjpWPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpNPU5bcGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpXTti''@;'; put 'put ''cmVhaztjYXNlIlciOmZvcihSPWVlW1RdLnNsaWNlKDEpLnNwbGl0KCIgIiksWD1wYXJzZUludChSWzBdLDEwKTtYPD1wYXJzZUludChSWzFdLDEwKTsrK1gpVj1wYXJzZUludChSWzJdLDEwKSxQW1gtMV09MD09PVY/e2hpZGRlbjohMH06e3djaDpWfSxLdChQW1gtMV0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''QyI6UFtwPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KFBbcF09e30pO2JyZWFrO2Nhc2UiUiI6eVt1PXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KHlbdV09e30pLFY+MD8oeVt1XS5ocHQ9Vix5W3VdLmhweD1vYShWKSk6MD09PVYmJih5W3VdLmhpZGRlbj0hMCk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfU88MSYmKE09bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfX1yZXR1cm4geS5sZW5ndGg+MCYmKElbIiFyb3dz''@;'; put 'put ''Il09eSksUC5sZW5ndGg+MCYmKElbIiFjb2xzIl09UCksZCYmZC5zaGVldFJvd3MmJihnPWcuc2xpY2UoMCxkLnNoZWV0Um93cykpLFtnLEldfWZ1bmN0aW9uIHMoeCxkKXt2YXIgdj1mdW5jdGlvbiBuKHgsZCl7c3dpdGNoKGQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBpKE9yKHgpLGQp''@;'; put 'put ''O2Nhc2UiYmluYXJ5IjpyZXR1cm4gaSh4LGQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaShTZSYmQnVmZmVyLmlzQnVmZmVyKHgpP3gudG9TdHJpbmcoImJpbmFyeSIpOnd0KHgpLGQpO2Nhc2UiYXJyYXkiOnJldHVybiBpKFB0KHgpLGQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5''@;'; put 'put ''cGUgIitkLnR5cGUpfSh4LGQpLHA9dlsxXSxrPXNhKHZbMF0sZCk7cmV0dXJuICRlKHApLmZvckVhY2goZnVuY3Rpb24oVCl7a1tUXT1wW1RdfSksa31mdW5jdGlvbiBjKHgsZCx2LHUpe3ZhciBwPSJDO1kiKyh2KzEpKyI7WCIrKHUrMSkrIjtLIjtzd2l0Y2goeC50KXtjYXNlIm4iOnArPXgu''@;'; put 'put ''dnx8MCx4LmYmJiF4LkYmJihwKz0iO0UiK0luKHguZix7cjp2LGM6dX0pKTticmVhaztjYXNlImIiOnArPXgudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOnArPXgud3x8eC52O2JyZWFrO2Nhc2UiZCI6cCs9JyInKyh4Lnd8fHgudikrJyInO2JyZWFrO2Nhc2UicyI6cCs9JyInK3gu''@;'; put 'put ''di5yZXBsYWNlKC8iL2csIiIpLnJlcGxhY2UoLzsvZywiOzsiKSsnIid9cmV0dXJuIHB9cmV0dXJuIGVbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIGYoeCxkKXtyZXR1cm4gRnQocyh4LGQpLGQpfSx0b19zaGVldDpzLGZyb21fc2hlZXQ6ZnVuY3Rpb24gaCh4LGQpe3ZhciBrLHY9''@;'; put 'put ''WyJJRDtQV1hMO047RSJdLHU9W10scD1EZSh4WyIhcmVmIl0pLFQ9QXJyYXkuaXNBcnJheSh4KSxnPSJcclxuIjt2LnB1c2goIlA7UEdlbmVyYWwiKSx2LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLHhbIiFjb2xzIl0mJmZ1bmN0aW9uIG8oeCxkKXtkLmZvckVhY2goZnVuY3Rpb24odix1KXt2''@;'; put 'put ''YXIgcD0iRjtXIisodSsxKSsiICIrKHUrMSkrIiAiO3YuaGlkZGVuP3ArPSIwIjooIm51bWJlciI9PXR5cGVvZiB2LndpZHRoJiYhdi53cHgmJih2LndweD1QYSh2LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiB2LndweCYmIXYud2NoJiYodi53Y2g9TGEodi53cHgpKSwibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHYud2NoJiYocCs9TWF0aC5yb3VuZCh2LndjaCkpKSwiICIhPXAuY2hhckF0KHAubGVuZ3RoLTEpJiZ4LnB1c2gocCl9KX0odix4WyIhY29scyJdKSx4WyIhcm93cyJdJiZmdW5jdGlvbiBsKHgsZCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKHYsdSl7dmFyIHA9IkY7Ijt2LmhpZGRlbj9wKz0i''@;'; put 'put ''TTA7Ijp2LmhwdD9wKz0iTSIrMjAqdi5ocHQrIjsiOnYuaHB4JiYocCs9Ik0iKzIwKkJhKHYuaHB4KSsiOyIpLHAubGVuZ3RoPjImJngucHVzaChwKyJSIisodSsxKSl9KX0odix4WyIhcm93cyJdKSx2LnB1c2goIkI7WSIrKHAuZS5yLXAucy5yKzEpKyI7WCIrKHAuZS5jLXAucy5jKzEpKyI7''@;'; put 'put ''RCIrW3Aucy5jLHAucy5yLHAuZS5jLHAuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgTj1wLnMucjtOPD1wLmUucjsrK04pZm9yKHZhciBNPXAucy5jO008PXAuZS5jOysrTSl7dmFyIEk9Z2Uoe3I6TixjOk19KTsoaz1UPyh4W05dfHxbXSlbTV06eFtJXSkmJihudWxsIT1rLnZ8fGsuZiYmIWsu''@;'; put 'put ''RikmJnUucHVzaChjKGssMCxOLE0pKX1yZXR1cm4gdi5qb2luKGcpK2crdS5qb2luKGcpK2crIkUiK2d9fX0oKSxyZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxzKXtmb3IodmFyIGY9aS5zcGxpdCgiXG4iKSxjPS0xLG89LTEsbD0wLGg9W107bCE9PWYubGVuZ3RoOysrbClpZigiQk9UIiE9''@;'; put 'put ''PWZbbF0udHJpbSgpKXtpZighKGM8MCkpe2Zvcih2YXIgeD1mW2xdLnRyaW0oKS5zcGxpdCgiLCIpLGQ9eFswXSx2PXhbMV0sdT1mWysrbF18fCIiOzEmKHUubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmbDxmLmxlbmd0aC0xOyl1Kz0iXG4iK2ZbKytsXTtzd2l0Y2godT11LnRyaW0oKSwr''@;'; put 'put ''ZCl7Y2FzZS0xOmlmKCJCT1QiPT09dSl7aFsrK2NdPVtdLG89MDtjb250aW51ZX1pZigiRU9EIiE9PXUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK3UpO2JyZWFrO2Nhc2UgMDpoW2NdW29dPSJUUlVFIj09PXV8fCJGQUxTRSIhPT11JiYoaXNO''@;'; put 'put ''YU4oSnIodikpP2lzTmFOKGFhKHYpLmdldERhdGUoKSk/djpYZSh2KTpKcih2KSksKytvO2JyZWFrO2Nhc2UgMToodT0odT11LnNsaWNlKDEsdS5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJnUubWF0Y2goL149Ii4qIiQvKSYmKHU9dS5zbGljZSgyLC0xKSksaFtjXVtvKytdPSIi''@;'; put 'put ''IT09dT91Om51bGx9aWYoIkVPRCI9PT11KWJyZWFrfX1lbHNlIGhbKytjXT1bXSxvPTA7cmV0dXJuIHMmJnMuc2hlZXRSb3dzJiYoaD1oLnNsaWNlKDAscy5zaGVldFJvd3MpKSxofWZ1bmN0aW9uIHIoaSxzKXtyZXR1cm4gc2EoZnVuY3Rpb24gZShpLHMpe3N3aXRjaChzLnR5cGUpe2Nhc2Ui''@;'; put 'put ''YmFzZTY0IjpyZXR1cm4gdChPcihpKSxzKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQoaSxzKTtjYXNlImJ1ZmZlciI6cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihpKT9pLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChpKSxzKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChpKSxzKX10aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrcy50eXBlKX0oaSxzKSxzKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYShpLHMpe3JldHVybiBGdChyKGkscykscyl9LHRvX3NoZWV0OnIsZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGMsbyxsLGgseCl7Yy5w''@;'; put 'put ''dXNoKG8pLGMucHVzaChsKyIsIitoKSxjLnB1c2goJyInK3gucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LHM9ZnVuY3Rpb24oYyxvLGwsaCl7Yy5wdXNoKG8rIiwiK2wpLGMucHVzaCgxPT1vPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aCl9O3JldHVybiBmdW5jdGlvbihjKXt2YXIg''@;'; put 'put ''aCxvPVtdLGw9RGUoY1siIXJlZiJdKSx4PUFycmF5LmlzQXJyYXkoYyk7aShvLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksaShvLCJWRUNUT1JTIiwwLGwuZS5yLWwucy5yKzEsIiIpLGkobywiVFVQTEVTIiwwLGwuZS5jLWwucy5jKzEsIiIpLGkobywiREFUQSIsMCwwLCIiKTtmb3IodmFyIGQ9''@;'; put 'put ''bC5zLnI7ZDw9bC5lLnI7KytkKXtzKG8sLTEsMCwiQk9UIik7Zm9yKHZhciB2PWwucy5jO3Y8PWwuZS5jOysrdil7dmFyIHU9Z2Uoe3I6ZCxjOnZ9KTtpZihoPXg/KGNbZF18fFtdKVt2XTpjW3VdKXN3aXRjaChoLnQpe2Nhc2UibiI6dmFyIHA9aC53OyFwJiZudWxsIT1oLnYmJihwPWgudiks''@;'; put 'put ''bnVsbD09cD9zKG8sMSwwLGguZiYmIWguRj8iPSIraC5mOiIiKTpzKG8sMCxwLCJWIik7YnJlYWs7Y2FzZSJiIjpzKG8sMCxoLnY/MTowLGgudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpzKG8sMSwwLGlzTmFOKGgudik/aC52Oic9IicraC52KyciJyk7YnJlYWs7Y2FzZSJkIjpo''@;'; put 'put ''Lnd8fChoLnc9UnIoaC56fHxwZVsxNF0saXIoWGUoaC52KSkpKSxzKG8sMCxoLncsIlYiKTticmVhaztkZWZhdWx0OnMobywxLDAsIiIpfWVsc2UgcyhvLDEsMCwiIil9fXJldHVybiBzKG8sLTEsMCwiRU9EIiksby5qb2luKCJcclxuIil9fSgpfX0oKSx0Zj1mdW5jdGlvbigpe2Z1bmN0aW9u''@;'; put 'put ''IGUoaCl7cmV0dXJuIGgucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiB0KGgpe3JldHVybiBoLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVu''@;'; put 'put ''Y3Rpb24gYShoLHgpe3JldHVybiBzYShmdW5jdGlvbiByKGgseCl7Zm9yKHZhciBkPWguc3BsaXQoIlxuIiksdj0tMSx1PS0xLHA9MCxrPVtdO3AhPT1kLmxlbmd0aDsrK3Ape3ZhciBUPWRbcF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09VFswXSl7dmFyIGc9R2UoVFsxXSk7aWYo''@;'; put 'put ''ay5sZW5ndGg8PWcucilmb3Iodj1rLmxlbmd0aDt2PD1nLnI7Kyt2KWtbdl18fChrW3ZdPVtdKTtzd2l0Y2godj1nLnIsdT1nLmMsVFsyXSl7Y2FzZSJ0IjprW3ZdW3VdPWUoVFszXSk7YnJlYWs7Y2FzZSJ2IjprW3ZdW3VdPStUWzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgTj1UW1QubGVuZ3Ro''@;'; put 'put ''LTFdO2Nhc2UidnRjIjprW3ZdW3VdPSJubCI9PT1UWzNdPyEhK1RbNF06K1RbNF0sInZ0ZiI9PVRbMl0mJihrW3ZdW3VdPVtrW3ZdW3VdLE5dKX19fXJldHVybiB4JiZ4LnNoZWV0Um93cyYmKGs9ay5zbGljZSgwLHguc2hlZXRSb3dzKSksa30oaCx4KSx4KX12YXIgaT1bInNvY2lhbGNhbGM6''@;'; put 'put ''dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIikscz1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250''@;'; put 'put ''ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsZj1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxjPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1''@;'; put 'put ''bmN0aW9uIG8oaCl7aWYoIWh8fCFoWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciB2LHg9W10sZD1bXSx1PSIiLHA9UHIoaFsiIXJlZiJdKSxrPUFycmF5LmlzQXJyYXkoaCksVD1wLnMucjtUPD1wLmUucjsrK1QpZm9yKHZhciBnPXAucy5jO2c8PXAuZS5jOysrZylpZih1PWdlKHtyOlQsYzpn''@;'; put 'put ''fSksKHY9az8oaFtUXXx8W10pW2ddOmhbdV0pJiZudWxsIT12LnYmJiJ6IiE9PXYudCl7c3dpdGNoKGQ9WyJjZWxsIix1LCJ0Il0sdi50KXtjYXNlInMiOmNhc2Uic3RyIjpkLnB1c2godCh2LnYpKTticmVhaztjYXNlIm4iOnYuZj8oZFsyXT0idnRmIixkWzNdPSJuIixkWzRdPXYudixkWzVd''@;'; put 'put ''PXQodi5mKSk6KGRbMl09InYiLGRbM109di52KTticmVhaztjYXNlImIiOmRbMl09InZ0Iisodi5mPyJmIjoiYyIpLGRbM109Im5sIixkWzRdPXYudj8iMSI6IjAiLGRbNV09dCh2LmZ8fCh2LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBOPWlyKFhlKHYudikpO2RbMl09''@;'; put 'put ''InZ0YyIsZFszXT0ibmQiLGRbNF09IiIrTixkWzVdPXYud3x8UnIodi56fHxwZVsxNF0sTik7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX14LnB1c2goZC5qb2luKCI6IikpfXJldHVybiB4LnB1c2goInNoZWV0OmM6IisocC5lLmMtcC5zLmMrMSkrIjpyOiIrKHAuZS5yLXAucy5yKzEpKyI6dHZm''@;'; put 'put ''OjEiKSx4LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIikseC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBuKGgseCl7cmV0dXJuIEZ0KGEoaCx4KSx4KX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIGwoaCl7cmV0dXJuW2kscyxmLHMsbyhoKSxj''@;'; put 'put ''XS5qb2luKCJcbiIpfX19KCksY2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGwsaCx4LGQsdil7di5yYXc/aFt4XVtkXT1sOiIiPT09bHx8KGhbeF1bZF09IlRSVUUiPT09bHx8IkZBTFNFIiE9PWwmJihpc05hTihKcihsKSk/aXNOYU4oYWEobCkuZ2V0RGF0ZSgpKT9sOlhlKGwpOkpyKGwpKSl9''@;'; put 'put ''dmFyIHI9ezQ0OiIsIiw5OiJcdCIsNTk6IjsiLDEyNDoifCJ9LGE9ezQ0OjMsOToyLDU5OjEsMTI0OjB9O2Z1bmN0aW9uIG4obCl7Zm9yKHZhciBoPXt9LHg9ITEsZD0wLHY9MDtkPGwubGVuZ3RoOysrZCkzND09KHY9bC5jaGFyQ29kZUF0KGQpKT94PSF4OiF4JiZ2IGluIHImJihoW3ZdPSho''@;'; put 'put ''W3ZdfHwwKSsxKTtmb3IoZCBpbiB2PVtdLGgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsZCkmJnYucHVzaChbaFtkXSxkXSk7aWYoIXYubGVuZ3RoKWZvcihkIGluIGg9YSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxkKSYmdi5wdXNoKFto''@;'; put 'put ''W2RdLGRdKTtyZXR1cm4gdi5zb3J0KGZ1bmN0aW9uKHUscCl7cmV0dXJuIHVbMF0tcFswXXx8YVt1WzFdXS1hW3BbMV1dfSksclt2LnBvcCgpWzFdXXx8NDR9ZnVuY3Rpb24gcyhsLGgpe3JldHVybiFofHwhaC5QUk58fGguRlN8fCJzZXA9Ij09bC5zbGljZSgwLDQpfHxsLmluZGV4T2YoIlx0''@;'; put 'put ''Iik+PTB8fGwuaW5kZXhPZigiLCIpPj0wfHxsLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBpKGwsaCl7dmFyIHg9aHx8e30sZD0iIjtudWxsIT16ZSYmbnVsbD09eC5kZW5zZSYmKHguZGVuc2U9emUpO3ZhciB2PXguZGVuc2U/W106e30sdT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJz''@;'; put 'put ''ZXA9Ij09bC5zbGljZSgwLDQpPzEzPT1sLmNoYXJDb2RlQXQoNSkmJjEwPT1sLmNoYXJDb2RlQXQoNik/KGQ9bC5jaGFyQXQoNCksbD1sLnNsaWNlKDcpKToxMz09bC5jaGFyQ29kZUF0KDUpfHwxMD09bC5jaGFyQ29kZUF0KDUpPyhkPWwuY2hhckF0KDQpLGw9bC5zbGljZSg2KSk6ZD1uKGwu''@;'; put 'put ''c2xpY2UoMCwxMDI0KSk6ZD14JiZ4LkZTP3guRlM6bihsLnNsaWNlKDAsMTAyNCkpO3ZhciBwPTAsaz0wLFQ9MCxnPTAsTj0wLE09ZC5jaGFyQ29kZUF0KDApLEk9ITEseT0wLFA9bC5jaGFyQ29kZUF0KDApO2w9bC5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBSPW51bGwhPXguZGF0ZU5G''@;'; put 'put ''P2Z1bmN0aW9uIG5vKGUpe3ZhciB0PSJudW1iZXIiPT10eXBlb2YgZT9wZVtlXTplO3JldHVybiB0PXQucmVwbGFjZShFaSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrdCsiJCIpfSh4LmRhdGVORik6bnVsbDtmdW5jdGlvbiBWKCl7dmFyIFg9bC5zbGljZShnLE4pLGI9e307aWYoJyInPT1Y''@;'; put 'put ''LmNoYXJBdCgwKSYmJyInPT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1YLmxlbmd0aCliLnQ9InoiO2Vsc2UgaWYoeC5yYXcpYi50PSJzIixiLnY9WDtlbHNlIGlmKDA9PT1YLnRyaW0oKS5sZW5ndGgpYi50PSJzIixiLnY9''@;'; put 'put ''WDtlbHNlIGlmKDYxPT1YLmNoYXJDb2RlQXQoMCkpMzQ9PVguY2hhckNvZGVBdCgxKSYmMzQ9PVguY2hhckNvZGVBdChYLmxlbmd0aC0xKT8oYi50PSJzIixiLnY9WC5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFJ4KGUpe3JldHVybiAxIT1lLmxlbmd0aH0oWCk/''@;'; put 'put ''KGIudD0ibiIsYi5mPVguc2xpY2UoMSkpOihiLnQ9InMiLGIudj1YKTtlbHNlIGlmKCJUUlVFIj09WCliLnQ9ImIiLGIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PVgpYi50PSJiIixiLnY9ITE7ZWxzZSBpZihpc05hTihUPUpyKFgpKSlpZighaXNOYU4oYWEoWCkuZ2V0RGF0ZSgpKXx8UiYmWC5t''@;'; put 'put ''YXRjaChSKSl7Yi56PXguZGF0ZU5GfHxwZVsxNF07dmFyIGVlPTA7UiYmWC5tYXRjaChSKSYmKFg9ZnVuY3Rpb24gaW8oZSx0LHIpe3ZhciBhPS0xLG49LTEsaT0tMSxzPS0xLGY9LTEsYz0tMTsodC5tYXRjaChFaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgseCl7dmFyIGQ9cGFyc2VJbnQo''@;'; put 'put ''clt4KzFdLDEwKTtzd2l0Y2goaC50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjphPWQ7YnJlYWs7Y2FzZSJkIjppPWQ7YnJlYWs7Y2FzZSJoIjpzPWQ7YnJlYWs7Y2FzZSJzIjpjPWQ7YnJlYWs7Y2FzZSJtIjpzPj0wP2Y9ZDpuPWR9fSksYz49MCYmLTE9PWYmJm4+PTAmJihmPW4s''@;'; put 'put ''bj0tMSk7dmFyIG89KCIiKyhhPj0wP2E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisobj49MT9uOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhpPj0xP2k6MSkpLnNsaWNlKC0yKTs3PT1vLmxlbmd0aCYmKG89IjAiK28pLDg9PW8ubGVuZ3RoJiYobz0i''@;'; put 'put ''MjAiK28pO3ZhciBsPSgiMDAiKyhzPj0wP3M6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGY+PTA/ZjowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoYz49MD9jOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXMmJi0xPT1mJiYtMT09Yz9vOi0xPT1hJiYtMT09biYmLTE9PWk/bDpvKyJUIitsfSgw''@;'; put 'put ''LHguZGF0ZU5GLFgubWF0Y2goUil8fFtdKSxlZT0xKSx4LmNlbGxEYXRlcz8oYi50PSJkIixiLnY9WGUoWCxlZSkpOihiLnQ9Im4iLGIudj1pcihYZShYLGVlKSkpLCExIT09eC5jZWxsVGV4dCYmKGIudz1ScihiLnosYi52IGluc3RhbmNlb2YgRGF0ZT9pcihiLnYpOmIudikpLHguY2VsbE5G''@;'; put 'put ''fHxkZWxldGUgYi56fWVsc2UgYi50PSJzIixiLnY9WDtlbHNlIGIudD0ibiIsITEhPT14LmNlbGxUZXh0JiYoYi53PVgpLGIudj1UO2lmKCJ6Ij09Yi50fHwoeC5kZW5zZT8odltwXXx8KHZbcF09W10pLHZbcF1ba109Yik6dltnZSh7YzprLHI6cH0pXT1iKSxQPWwuY2hhckNvZGVBdChnPU4r''@;'; put 'put ''MSksdS5lLmM8ayYmKHUuZS5jPWspLHUuZS5yPHAmJih1LmUucj1wKSx5PT1NKSsraztlbHNlIGlmKGs9MCwrK3AseC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1wKXJldHVybiEwfWU6Zm9yKDtOPGwubGVuZ3RoOysrTilzd2l0Y2goeT1sLmNoYXJDb2RlQXQoTikpe2Nhc2UgMzQ6MzQ9PT1Q''@;'; put 'put ''JiYoST0hSSk7YnJlYWs7Y2FzZSBNOmNhc2UgMTA6Y2FzZSAxMzppZighSSYmVigpKWJyZWFrIGV9cmV0dXJuIE4tZz4wJiZWKCksdlsiIXJlZiJdPXdlKHUpLHZ9KGwsaCk6c2EoZnVuY3Rpb24gdChsLGgpe3ZhciB4PWh8fHt9LGQ9W107aWYoIWx8fDA9PT1sLmxlbmd0aClyZXR1cm4gZDtm''@;'; put 'put ''b3IodmFyIHY9bC5zcGxpdCgvW1xyXG5dLyksdT12Lmxlbmd0aC0xO3U+PTAmJjA9PT12W3VdLmxlbmd0aDspLS11O2Zvcih2YXIgcD0xMCxrPTAsVD0wO1Q8PXU7KytUKS0xPT0oaz12W1RdLmluZGV4T2YoIiAiKSk/az12W1RdLmxlbmd0aDprKysscD1NYXRoLm1heChwLGspO2ZvcihUPTA7''@;'; put 'put ''VDw9dTsrK1Qpe2RbVF09W107dmFyIGc9MDtmb3IoZSh2W1RdLnNsaWNlKDAscCkudHJpbSgpLGQsVCxnLHgpLGc9MTtnPD0odltUXS5sZW5ndGgtcCkvMTArMTsrK2cpZSh2W1RdLnNsaWNlKHArMTAqKGctMSkscCsxMCpnKS50cmltKCksZCxULGcseCl9cmV0dXJuIHguc2hlZXRSb3dzJiYo''@;'; put 'put ''ZD1kLnNsaWNlKDAseC5zaGVldFJvd3MpKSxkfShsLGgpLGgpfWZ1bmN0aW9uIGYobCxoKXt2YXIgeD0iIixkPSJzdHJpbmciPT1oLnR5cGU/WzAsMCwwLDBdOktuKGwsaCk7c3dpdGNoKGgudHlwZSl7Y2FzZSJiYXNlNjQiOng9T3IobCk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5n''@;'; put 'put ''Ijp4PWw7YnJlYWs7Y2FzZSJidWZmZXIiOng9NjUwMDE9PWguY29kZXBhZ2U/bC50b1N0cmluZygidXRmOCIpOmguY29kZXBhZ2UmJnR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2RlKGguY29kZXBhZ2UsbCk6U2UmJkJ1ZmZlci5pc0J1ZmZlcihsKT9sLnRvU3RyaW5nKCJiaW5hcnkiKTp3''@;'; put 'put ''dChsKTticmVhaztjYXNlImFycmF5Ijp4PVB0KGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2gudHlwZSl9cmV0dXJuIDIzOT09ZFswXSYmMTg3PT1kWzFdJiYxOTE9PWRbMl0/eD1CZSh4LnNsaWNlKDMpKToic3RyaW5nIiE9aC50eXBlJiYi''@;'; put 'put ''YnVmZmVyIiE9aC50eXBlJiY2NTAwMT09aC5jb2RlcGFnZT94PUJlKHgpOiJiaW5hcnkiPT1oLnR5cGUmJnR5cGVvZiBPZTwidSImJmguY29kZXBhZ2UmJih4PU9lLnV0aWxzLmRlY29kZShoLmNvZGVwYWdlLE9lLnV0aWxzLmVuY29kZSgyODU5MSx4KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246''@;'; put 'put ''Ij09eC5zbGljZSgwLDE5KT90Zi50b19zaGVldCgic3RyaW5nIj09aC50eXBlP3g6QmUoeCksaCk6cyh4LGgpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBjKGwsaCl7cmV0dXJuIEZ0KGYobCxoKSxoKX0sdG9fc2hlZXQ6Zixmcm9tX3NoZWV0OmZ1bmN0aW9uIG8obCl7Zm9yKHZhciBk''@;'; put 'put ''LGg9W10seD1EZShsWyIhcmVmIl0pLHY9QXJyYXkuaXNBcnJheShsKSx1PXgucy5yO3U8PXguZS5yOysrdSl7Zm9yKHZhciBwPVtdLGs9eC5zLmM7azw9eC5lLmM7KytrKXt2YXIgVD1nZSh7cjp1LGM6a30pO2lmKChkPXY/KGxbdV18fFtdKVtrXTpsW1RdKSYmbnVsbCE9ZC52KXtmb3IodmFy''@;'; put 'put ''IGc9KGQud3x8KGF0KGQpLGQudyl8fCIiKS5zbGljZSgwLDEwKTtnLmxlbmd0aDwxMDspZys9IiAiO3AucHVzaChnKygwPT09az8iICI6IiIpKX1lbHNlIHAucHVzaCgiICAgICAgICAgICIpfWgucHVzaChwLmpvaW4oIiIpKX1yZXR1cm4gaC5qb2luKCJcbiIpfX19KCksanQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtmdW5jdGlvbiBlKEMsVSxPKXtpZihDKXtocihDLEMubHx8MCk7Zm9yKHZhciBEPU8uRW51bXx8eGU7Qy5sPEMubGVuZ3RoOyl7dmFyIGo9Qy5yZWFkX3NoaWZ0KDIpLHNlPURbal18fERbNjU1MzVdLFo9Qy5yZWFkX3NoaWZ0KDIpLFE9Qy5sK1osWT1zZS5mJiZzZS5mKEMsWixPKTtpZihD''@;'; put 'put ''Lmw9USxVKFksc2UsaikpcmV0dXJufX19ZnVuY3Rpb24gcihDLFUpe2lmKCFDKXJldHVybiBDO3ZhciBPPVV8fHt9O251bGwhPXplJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT16ZSk7dmFyIEQ9Ty5kZW5zZT9bXTp7fSxqPSJTaGVldDEiLHNlPSIiLFo9MCxRPXt9LFk9W10sRWU9W10sQT17''@;'; put 'put ''czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFBlPU8uc2hlZXRSb3dzfHwwO2lmKDA9PUNbMl0mJig4PT1DWzNdfHw5PT1DWzNdKSYmQy5sZW5ndGg+PTE2JiY1PT1DWzE0XSYmMTA4PT09Q1sxNV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBXb3JrcyAzIGZvciBNYWMgZmlsZSIpO2lm''@;'; put 'put ''KDI9PUNbMl0pTy5FbnVtPXhlLGUoQyxmdW5jdGlvbihvZSxxZSxqcil7c3dpdGNoKGpyKXtjYXNlIDA6Ty52ZXJzPW9lLG9lPj00MDk2JiYoTy5xcHJvPSEwKTticmVhaztjYXNlIDY6QT1vZTticmVhaztjYXNlIDIwNDpvZSYmKHNlPW9lKTticmVhaztjYXNlIDIyMjpzZT1vZTticmVhaztj''@;'; put 'put ''YXNlIDE1OmNhc2UgNTE6Ty5xcHJvfHwob2VbMV0udj1vZVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09anImJiEoMTEyJn5vZVsyXSkmJigxNSZvZVsyXSk+MSYmKDE1Jm9lWzJdKTwxNSYmKG9lWzFdLno9Ty5kYXRlTkZ8fHBlWzE0XSxPLmNlbGxEYXRlcyYm''@;'; put 'put ''KG9lWzFdLnQ9ImQiLG9lWzFdLnY9bzAob2VbMV0udikpKSxPLnFwcm8mJm9lWzNdPlomJihEWyIhcmVmIl09d2UoQSksUVtqXT1ELFkucHVzaChqKSxEPU8uZGVuc2U/W106e30sQT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFo9b2VbM10saj1zZXx8IlNoZWV0IisoWisxKSxzZT0iIik7''@;'; put 'put ''dmFyIGZ0PU8uZGVuc2U/KERbb2VbMF0ucl18fFtdKVtvZVswXS5jXTpEW2dlKG9lWzBdKV07aWYoZnQpe2Z0LnQ9b2VbMV0udCxmdC52PW9lWzFdLnYsbnVsbCE9b2VbMV0ueiYmKGZ0Lno9b2VbMV0ueiksbnVsbCE9b2VbMV0uZiYmKGZ0LmY9b2VbMV0uZik7YnJlYWt9Ty5kZW5zZT8oRFtv''@;'; put 'put ''ZVswXS5yXXx8KERbb2VbMF0ucl09W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXX19LE8pO2Vsc2V7aWYoMjYhPUNbMl0mJjE0IT1DWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0NbMl0pO08uRW51bT1LLDE0PT1D''@;'; put 'put ''WzJdJiYoTy5xcHJvPSEwLEMubD0wKSxlKEMsZnVuY3Rpb24ob2UscWUsanIpe3N3aXRjaChqcil7Y2FzZSAyMDQ6aj1vZTticmVhaztjYXNlIDIyOm9lWzFdLnY9b2VbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihvZVsz''@;'; put 'put ''XT5aJiYoRFsiIXJlZiJdPXdlKEEpLFFbal09RCxZLnB1c2goaiksRD1PLmRlbnNlP1tdOnt9LEE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxqPSJTaGVldCIrKChaPW9lWzNdKSsxKSksUGU+MCYmb2VbMF0ucj49UGUpYnJlYWs7Ty5kZW5zZT8oRFtvZVswXS5yXXx8KERbb2VbMF0ucl09''@;'; put 'put ''W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXSxBLmUuYzxvZVswXS5jJiYoQS5lLmM9b2VbMF0uYyksQS5lLnI8b2VbMF0uciYmKEEuZS5yPW9lWzBdLnIpO2JyZWFrO2Nhc2UgMjc6b2VbMTRlM10mJihFZVtvZVsxNGUzXVswXV09b2VbMTRlM11bMV0p''@;'; put 'put ''O2JyZWFrO2Nhc2UgMTUzNzpFZVtvZVswXV09b2VbMV0sb2VbMF09PVomJihqPW9lWzFdKX19LE8pfWlmKERbIiFyZWYiXT13ZShBKSxRW3NlfHxqXT1ELFkucHVzaChzZXx8aiksIUVlLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpZLFNoZWV0czpRfTtmb3IodmFyIEFlPXt9LExlPVtdLENl''@;'; put 'put ''PTA7Q2U8RWUubGVuZ3RoOysrQ2UpUVtZW0NlXV0/KExlLnB1c2goRWVbQ2VdfHxZW0NlXSksQWVbRWVbQ2VdXT1RW0VlW0NlXV18fFFbWVtDZV1dKTooTGUucHVzaChFZVtDZV0pLEFlW0VlW0NlXV09eyIhcmVmIjoiQTEifSk7cmV0dXJue1NoZWV0TmFtZXM6TGUsU2hlZXRzOkFlfX1mdW5j''@;'; put 'put ''dGlvbiBvKEMsVSxPKXt2YXIgRD1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDAsMF07cmV0dXJuIE8ucXBybyYmMjA3NjghPU8udmVycz8oRFswXS5jPUMucmVhZF9zaGlmdCgxKSxEWzNdPUMucmVhZF9zaGlmdCgxKSxEWzBdLnI9Qy5yZWFkX3NoaWZ0KDIpLEMubCs9Mik6KERbMl09Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLERbMF0uYz1DLnJlYWRfc2hpZnQoMiksRFswXS5yPUMucmVhZF9zaGlmdCgyKSksRH1mdW5jdGlvbiBsKEMsVSxPKXt2YXIgRD1DLmwrVSxqPW8oQywwLE8pO2lmKGpbMV0udD0icyIsMjA3Njg9PU8udmVycyl7Qy5sKys7dmFyIHNlPUMucmVhZF9zaGlmdCgxKTtyZXR1cm4g''@;'; put 'put ''alsxXS52PUMucmVhZF9zaGlmdChzZSwidXRmOCIpLGp9cmV0dXJuIE8ucXBybyYmQy5sKyssalsxXS52PUMucmVhZF9zaGlmdChELUMubCwiY3N0ciIpLGp9ZnVuY3Rpb24gaChDLFUsTyl7dmFyIEQ9Ryg3K08ubGVuZ3RoKTtELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''VSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBqPTA7ajxELmxlbmd0aDsrK2ope3ZhciBzZT1PLmNoYXJDb2RlQXQoaik7RC53cml0ZV9zaGlmdCgxLHNlPj0xMjg/OTU6c2UpfXJldHVybiBELndyaXRlX3NoaWZ0KDEsMCksRH1mdW5jdGlvbiBkKEMs''@;'; put 'put ''VSxPKXt2YXIgRD1HKDcpO3JldHVybiBELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIsVSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMixPLCJpIiksRH1mdW5jdGlvbiB1KEMsVSxPKXt2YXIgRD1HKDEzKTtyZXR1cm4gRC53cml0ZV9zaGlmdCgxLDI1NSks''@;'; put 'put ''RC53cml0ZV9zaGlmdCgyLFUpLEQud3JpdGVfc2hpZnQoMixDKSxELndyaXRlX3NoaWZ0KDgsTywiZiIpLER9ZnVuY3Rpb24gayhDLFUsTyl7dmFyIEQ9MzI3NjgmVTtyZXR1cm4gVT0oRD9DOjApKygoVSY9LTMyNzY5KT49ODE5Mj9VLTE2Mzg0OlUpLChEPyIiOiIkIikrKE8/SGUoVSk6S2Uo''@;'; put 'put ''VSkpfXZhciBUPXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxnPVsiIiwiIiwiIiwiIiwiIiwi''@;'; put 'put ''IiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gTShDKXt2YXIgVT1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBVWzBdLnI9Qy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLFVbM109Q1tDLmwrK10sVVswXS5jPUNbQy5sKytdLFV9ZnVuY3Rpb24geShDLFUsTyxEKXt2YXIgaj1HKDYrRC5sZW5ndGgpO2oud3JpdGVfc2hpZnQoMixDKSxqLndyaXRlX3NoaWZ0KDEsTyksai53cml0ZV9zaGlmdCgxLFUpLGoud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBz''@;'; put 'put ''ZT0wO3NlPEQubGVuZ3RoOysrc2Upe3ZhciBaPUQuY2hhckNvZGVBdChzZSk7ai53cml0ZV9zaGlmdCgxLFo+PTEyOD85NTpaKX1yZXR1cm4gai53cml0ZV9zaGlmdCgxLDApLGp9ZnVuY3Rpb24gUihDLFUpe3ZhciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoNCksaj1DLnJlYWRfc2hpZnQoNCks''@;'; put 'put ''c2U9Qy5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1zZSlyZXR1cm4gMD09PUQmJjMyMjEyMjU0NzI9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj0xNSk6MD09PUQmJjM0ODk2NjA5Mjg9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj00Mik6T1sxXS52PTAsTzt2YXIgWj0zMjc2OCZzZTtyZXR1cm4gc2U9''@;'; put 'put ''KDMyNzY3JnNlKS0xNjQ0NixPWzFdLnY9KDEtMipaKSooaipNYXRoLnBvdygyLHNlKzMyKStEKk1hdGgucG93KDIsc2UpKSxPfWZ1bmN0aW9uIFYoQyxVLE8sRCl7dmFyIGo9RygxNCk7aWYoai53cml0ZV9zaGlmdCgyLEMpLGoud3JpdGVfc2hpZnQoMSxPKSxqLndyaXRlX3NoaWZ0KDEsVSks''@;'; put 'put ''MD09RClyZXR1cm4gai53cml0ZV9zaGlmdCg0LDApLGoud3JpdGVfc2hpZnQoNCwwKSxqLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGo7dmFyIHNlPTAsWj0wLFk9MDtyZXR1cm4gRDwwJiYoc2U9MSxEPS1EKSxaPTB8TWF0aC5sb2cyKEQpLDIxNDc0ODM2NDgmKFk9KEQvPU1hdGgucG93KDIsWi0z''@;'; put 'put ''MSkpPj4+MCl8fCgrK1osWT0oRC89Mik+Pj4wKSxELT1ZLFl8PTIxNDc0ODM2NDgsWT4+Pj0wLEQqPU1hdGgucG93KDIsMzIpLGoud3JpdGVfc2hpZnQoNCxEPj4+MCksai53cml0ZV9zaGlmdCg0LFkpLGoud3JpdGVfc2hpZnQoMixaKz0xNjM4Mysoc2U/MzI3Njg6MCkpLGp9ZnVuY3Rpb24g''@;'; put 'put ''ZWUoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gT1sxXS52PUQsT31mdW5jdGlvbiByZShDLFUpe3JldHVybiAwPT1DW0MubCtVLTFdP0MucmVhZF9zaGlmdChVLCJjc3RyIik6IiJ9ZnVuY3Rpb24gY2UoQyxVKXt2YXIgTz1HKDUrQy5sZW5ndGgpO08ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwxNGUzKSxPLndyaXRlX3NoaWZ0KDIsVSk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDsrK0Qpe3ZhciBqPUMuY2hhckNvZGVBdChEKTtPW08ubCsrXT1qPjEyNz85NTpqfXJldHVybiBPW08ubCsrXT0wLE99dmFyIHhlPXswOntuOiJCT0YiLGY6dHJ9LDE6e246IkVPRiJ9LDI6''@;'; put 'put ''e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gZihDLFUsTyl7dmFyIEQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gOD09VSYmTy5xcHJvPyhELnMuYz1DLnJlYWRfc2hpZnQo''@;'; put 'put ''MSksQy5sKyssRC5zLnI9Qy5yZWFkX3NoaWZ0KDIpLEQuZS5jPUMucmVhZF9zaGlmdCgxKSxDLmwrKyxELmUucj1DLnJlYWRfc2hpZnQoMiksRCk6KEQucy5jPUMucmVhZF9zaGlmdCgyKSxELnMucj1DLnJlYWRfc2hpZnQoMiksMTI9PVUmJk8ucXBybyYmKEMubCs9MiksRC5lLmM9Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLEQuZS5yPUMucmVhZF9zaGlmdCgyKSwxMj09VSYmTy5xcHJvJiYoQy5sKz0yKSw2NTUzNT09RC5zLmMmJihELnMuYz1ELmUuYz1ELnMucj1ELmUucj0wKSxEKX19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDEx''@;'; put 'put ''OntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24geChDLFUsTyl7dmFyIEQ9byhDLDAsTyk7cmV0dXJuIERbMV0udj1DLnJlYWRfc2hpZnQoMiwiaSIpLER9fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIHYoQyxVLE8pe3ZhciBEPW8oQywwLE8p''@;'; put 'put ''O3JldHVybiBEWzFdLnY9Qy5yZWFkX3NoaWZ0KDgsImYiKSxEfX0sMTU6e246IkxBQkVMIixmOmx9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIHAoQyxVLE8pe3ZhciBEPUMubCtVLGo9byhDLDAsTyk7aWYoalsxXS52PUMucmVhZF9zaGlmdCg4LCJmIiksTy5xcHJvKUMubD1EO2Vsc2V7''@;'; put 'put ''dmFyIHNlPUMucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gTihDLFUpe2hyKEMsMCk7Zm9yKHZhciBPPVtdLEQ9MCxqPSIiLHNlPSIiLFo9IiIsUT0iIjtDLmw8Qy5sZW5ndGg7KXt2YXIgWT1DW0MubCsrXTtzd2l0Y2goWSl7Y2FzZSAwOk8ucHVzaChDLnJlYWRfc2hpZnQoOCwiZiIpKTticmVh''@;'; put 'put ''aztjYXNlIDE6c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKHNlK2opO2JyZWFrO2Nhc2UgMjp2YXIgRWU9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxBPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSk7''@;'; put 'put ''c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKEVlK0ErIjoiK3NlK2opO2JyZWFrO2Nhc2UgMzppZihDLmw8Qy5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVu''@;'; put 'put ''ZCIpO2JyZWFrO2Nhc2UgNDpPLnB1c2goIigiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDU6Ty5wdXNoKEMucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgUGU9IiI7WT1DW0MubCsrXTspUGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSk7Ty5wdXNoKCciJytQZS5yZXBsYWNl''@;'; put 'put ''KC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6Ty5wdXNoKCItIitPLnBvcCgpKTticmVhaztjYXNlIDIzOk8ucHVzaCgiKyIrTy5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpPLnB1c2goIk5PVCgiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6UT1PLnBvcCgpLFo9Ty5wb3Ao''@;'; put 'put ''KSxPLnB1c2goWyJBTkQiLCJPUiJdW1ktMjBdKyIoIitaKyIsIitRKyIpIik7YnJlYWs7ZGVmYXVsdDppZihZPDMyJiZnW1ldKVE9Ty5wb3AoKSxaPU8ucG9wKCksTy5wdXNoKForZ1tZXStRKTtlbHNle2lmKCFUW1ldKXJldHVybiBZPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9w''@;'; put 'put ''Y29kZSAiK1kudG9TdHJpbmcoMTYpKTpZPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitZLnRvU3RyaW5nKDE2KSk6WTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpOlk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEg''@;'; put 'put ''dW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrWS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpO2lmKDY5PT0oRD1UW1ldWzFdKSYmKEQ9Q1tDLmwrK10pLEQ+Ty5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29s''@;'; put 'put ''ZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitZLnRvU3RyaW5nKDE2KSsiOnwiK08uam9pbigifCIpKyJ8Iik7dmFyIEFlPU8uc2xpY2UoLUQpO08ubGVuZ3RoLT1ELE8ucHVzaChUW1ldWzBdKyIoIitBZS5qb2luKCIsIikrIikiKX19fTE9PU8ubGVuZ3RoP1VbMV0uZj0iIitP''@;'; put 'put ''WzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8IitPLmpvaW4oInwiKSsifCIpfSkoQy5zbGljZShDLmwsQy5sK3NlKSxqKSxDLmwrPXNlfXJldHVybiBqfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdF''@;'; put 'put ''In0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQi''@;'; put 'put ''fSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpsfSw1NTp7''@;'; put 'put ''bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0s''@;'; put 'put ''Njg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9''@;'; put 'put ''LDEwNTp7bjoiTVJBTkdFUz8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0sMjIyOntuOiJTSEVFVE5BTUVMUCIsZjpmdW5jdGlvbiBkZShDLFUpe3ZhciBPPUNbQy5sKytdO08+VS0xJiYoTz1VLTEpO2Zvcih2YXIgRD0iIjtELmxlbmd0aDxPOylEKz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KENbQy5sKytdKTtyZXR1cm4gRH19LDY1NTM1OntuOiIifX0sSz17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xV''@;'; put 'put ''TU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlO''@;'; put 'put ''In0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIEkoQyxVKXt2YXIgTz1NKEMpO3JldHVybiBPWzFd''@;'; put 'put ''LnQ9InMiLE9bMV0udj1DLnJlYWRfc2hpZnQoVS00LCJjc3RyIiksT319LDIzOntuOiJOVU1CRVIxNyIsZjpSfSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gUChDLFUpe3ZhciBPPU0oQyk7T1sxXS52PUMucmVhZF9zaGlmdCgyKTt2YXIgRD1PWzFdLnY+PjE7aWYoMSZPWzFdLnYpc3dp''@;'; put 'put ''dGNoKDcmRCl7Y2FzZSAwOkQ9NWUzKihEPj4zKTticmVhaztjYXNlIDE6RD01MDAqKEQ+PjMpO2JyZWFrO2Nhc2UgMjpEPShEPj4zKS8yMDticmVhaztjYXNlIDM6RD0oRD4+MykvMjAwO2JyZWFrO2Nhc2UgNDpEPShEPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkQ9KEQ+PjMpLzJlNDticmVhaztj''@;'; put 'put ''YXNlIDY6RD0oRD4+MykvMTY7YnJlYWs7Y2FzZSA3OkQ9KEQ+PjMpLzY0fXJldHVybiBPWzFdLnY9RCxPfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBYKEMsVSl7dmFyIE89UihDKTtyZXR1cm4gQy5sKz1VLTE0LE99fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQi''@;'; put 'put ''LGY6ZnVuY3Rpb24gRmUoQyxVKXtmb3IodmFyIE89e30sRD1DLmwrVTtDLmw8RDspe3ZhciBqPUMucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qKXtmb3IoT1tqXT1bMCwiIl0sT1tqXVswXT1DLnJlYWRfc2hpZnQoMik7Q1tDLmxdOylPW2pdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbQy5s''@;'; put 'put ''XSksQy5sKys7Qy5sKyt9fXJldHVybiBPfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/''@;'; put 'put ''In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIGIoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPWzFdLnY9RD4+NixPfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOmVlfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIGxlKEMsVSl7dmFy''@;'; put 'put ''IE89ZWUoQyk7cmV0dXJuIEMubCs9VS0xMCxPfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7''@;'; put 'put ''bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0s''@;'; put 'put ''MjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/''@;'; put 'put ''PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7''@;'; put 'put ''bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2''@;'; put 'put ''NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNTM3OntuOiJTSEVFVElORk9RUCIsZjpmdW5jdGlvbiB1ZShDLFUsTyl7aWYoTy5xcHJvJiYhKFU8MjEpKXt2YXIgRD1DLnJlYWRfc2hpZnQoMSk7cmV0''@;'; put 'put ''dXJuIEMubCs9MTcsQy5sKz0xLEMubCs9MixbRCxDLnJlYWRfc2hpZnQoVS0yMSwiY3N0ciIpXX19fSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246''@;'; put 'put ''Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIGEoQyxVKXt2YXIgTz1V''@;'; put 'put ''fHx7fTtpZigrTy5jb2RlcGFnZT49MCYmTXIoK08uY29kZXBhZ2UpLCJzdHJpbmciPT1PLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBEPVNyKCksaj1EZShDWyIhcmVmIl0pLHNlPUFycmF5LmlzQXJyYXkoQyksWj1bXTthZShELDAs''@;'; put 'put ''ZnVuY3Rpb24gaShDKXt2YXIgVT1HKDIpO3JldHVybiBVLndyaXRlX3NoaWZ0KDIsQyksVX0oMTAzMCkpLGFlKEQsNixmdW5jdGlvbiBjKEMpe3ZhciBVPUcoOCk7cmV0dXJuIFUud3JpdGVfc2hpZnQoMixDLnMuYyksVS53cml0ZV9zaGlmdCgyLEMucy5yKSxVLndyaXRlX3NoaWZ0KDIsQy5l''@;'; put 'put ''LmMpLFUud3JpdGVfc2hpZnQoMixDLmUuciksVX0oaikpO2Zvcih2YXIgUT1NYXRoLm1pbihqLmUuciw4MTkxKSxZPWoucy5yO1k8PVE7KytZKWZvcih2YXIgRWU9S2UoWSksQT1qLnMuYztBPD1qLmUuYzsrK0Epe1k9PT1qLnMuciYmKFpbQV09SGUoQSkpO3ZhciBBZT1zZT8oQ1tZXXx8W10p''@;'; put 'put ''W0FdOkNbWltBXStFZV07QWUmJiJ6IiE9QWUudCYmKCJuIj09QWUudD8oMHxBZS52KT09QWUudiYmQWUudj49LTMyNzY4JiZBZS52PD0zMjc2Nz9hZShELDEzLGQoWSxBLEFlLnYpKTphZShELDE0LHUoWSxBLEFlLnYpKTphZShELDE1LGgoWSxBLGF0KEFlKS5zbGljZSgwLDIzOSkpKSl9cmV0''@;'; put 'put ''dXJuIGFlKEQsMSksRC5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gbihDLFUpe3ZhciBPPVV8fHt9O2lmKCtPLmNvZGVwYWdlPj0wJiZNcigrTy5jb2RlcGFnZSksInN0cmluZyI9PU8udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFy''@;'; put 'put ''IEQ9U3IoKTthZShELDAsZnVuY3Rpb24gcyhDKXt2YXIgVT1HKDI2KTtVLndyaXRlX3NoaWZ0KDIsNDA5NiksVS53cml0ZV9zaGlmdCgyLDQpLFUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIE89MCxEPTAsaj0wLHNlPTA7c2U8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK3NlKXt2YXIgUT1DLlNo''@;'; put 'put ''ZWV0c1tDLlNoZWV0TmFtZXNbc2VdXTtpZihRJiZRWyIhcmVmIl0peysrajt2YXIgWT1QcihRWyIhcmVmIl0pO088WS5lLnImJihPPVkuZS5yKSxEPFkuZS5jJiYoRD1ZLmUuYyl9fXJldHVybiBPPjgxOTEmJihPPTgxOTEpLFUud3JpdGVfc2hpZnQoMixPKSxVLndyaXRlX3NoaWZ0KDEsaiks''@;'; put 'put ''VS53cml0ZV9zaGlmdCgxLEQpLFUud3JpdGVfc2hpZnQoMiwwKSxVLndyaXRlX3NoaWZ0KDIsMCksVS53cml0ZV9zaGlmdCgxLDEpLFUud3JpdGVfc2hpZnQoMSwyKSxVLndyaXRlX3NoaWZ0KDQsMCksVS53cml0ZV9zaGlmdCg0LDApLFV9KEMpKTtmb3IodmFyIGo9MCxzZT0wO2o8Qy5TaGVl''@;'; put 'put ''dE5hbWVzLmxlbmd0aDsrK2opKEMuU2hlZXRzW0MuU2hlZXROYW1lc1tqXV18fHt9KVsiIXJlZiJdJiZhZShELDI3LGNlKEMuU2hlZXROYW1lc1tqXSxzZSsrKSk7dmFyIFo9MDtmb3Ioaj0wO2o8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK2ope3ZhciBRPUMuU2hlZXRzW0MuU2hlZXROYW1lc1tq''@;'; put 'put ''XV07aWYoUSYmUVsiIXJlZiJdKXtmb3IodmFyIFk9RGUoUVsiIXJlZiJdKSxFZT1BcnJheS5pc0FycmF5KFEpLEE9W10sUGU9TWF0aC5taW4oWS5lLnIsODE5MSksQWU9WS5zLnI7QWU8PVBlOysrQWUpZm9yKHZhciBMZT1LZShBZSksQ2U9WS5zLmM7Q2U8PVkuZS5jOysrQ2Upe0FlPT09WS5z''@;'; put 'put ''LnImJihBW0NlXT1IZShDZSkpO3ZhciBxZT1FZT8oUVtBZV18fFtdKVtDZV06UVtBW0NlXStMZV07cWUmJiJ6IiE9cWUudCYmKCJuIj09cWUudD9hZShELDIzLFYoQWUsQ2UsWixxZS52KSk6YWUoRCwyMix5KEFlLENlLFosYXQocWUpLnNsaWNlKDAsMjM5KSkpKX0rK1p9fXJldHVybiBhZShE''@;'; put 'put ''LDEpLEQuZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIHQoQyxVKXtzd2l0Y2goVS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHIoSXIoT3IoQykpLFUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcihJcihDKSxVKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIHIoQyxVKX10aHJv''@;'; put 'put ''dyJVbnN1cHBvcnRlZCB0eXBlICIrVS50eXBlfX19KCksd2g9ZnVuY3Rpb24oKXt2YXIgZT1GYSgidCIpLHQ9RmEoInJQciIpO2Z1bmN0aW9uIHIoaSl7dmFyIHM9aS5tYXRjaChlKTtpZighcylyZXR1cm57dDoicyIsdjoiIn07dmFyIGY9e3Q6InMiLHY6SWUoc1sxXSl9LGM9aS5tYXRjaCh0''@;'; put 'put ''KTtyZXR1cm4gYyYmKGYucz1mdW5jdGlvbiBfaChlKXt2YXIgdD17fSxyPWUubWF0Y2godnIpLGE9MCxuPSExO2lmKHIpZm9yKDthIT1yLmxlbmd0aDsrK2Epe3ZhciBpPW1lKHJbYV0pO3N3aXRjaChpWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRl''@;'; put 'put ''bmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+Ijp0LnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWkudmFsKWJyZWFrO3QuY3A9TDBbcGFyc2VJbnQoaS52''@;'; put 'put ''YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighaS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6dC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6dC5uYW1lPWkudmFsO2JyZWFrO2Nhc2UiPHN6Ijp0LnN6''@;'; put 'put ''PWkudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+Ijp0LnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighaS52YWwpYnJlYWs7c3dpdGNoKGkudmFsKXtjYXNlImRvdWJsZSI6''@;'; put 'put ''dC51dmFsPSJkb3VibGUiO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6dC51dmFsPSJzaW5nbGUtYWNjb3VudGluZyI7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjp0LnV2YWw9ImRvdWJsZS1hY2NvdW50aW5nIn1jYXNlIjx1PiI6Y2FzZSI8dS8+Ijp0LnU9MTticmVhaztjYXNl''@;'; put 'put ''IjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09aS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6dC5iPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWkudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOnQuaT0xO2JyZWFrO2Nhc2UiPC9pPiI6''@;'; put 'put ''YnJlYWs7Y2FzZSI8Y29sb3IiOmkucmdiJiYodC5jb2xvcj1pLnJnYi5zbGljZSgyLDgpKTticmVhaztjYXNlIjxjb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dC5mYW1pbHk9aS52YWw7YnJlYWs7Y2FzZSI8ZmFtaWx5PiI6Y2FzZSI8''@;'; put 'put ''ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOnQudmFsaWduPWkudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbj4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8c2NoZW1lIjpjYXNlIjxzY2hlbWU+IjpjYXNlIjxzY2hl''@;'; put 'put ''bWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvZXh0PiI6bj0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09aVswXS5jaGFyQ29kZUF0KDEpJiYhbil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2lbMF0pfX1yZXR1cm4gdH0oY1sxXSkpLGZ9dmFyIGE9LzwoPzpcdys6KT9yPi9nLG49LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShhLCIiKS5zcGxpdChuKS5tYXAocikuZmls''@;'; put 'put ''dGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZ9KX19KCksa2g9ZnVuY3Rpb24oKXt2YXIgdD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gYShuKXt2YXIgaT1bW10sbi52LFtdXTtyZXR1cm4gbi52PyhuLnMmJmZ1bmN0aW9uIHIobixpLHMpe3ZhciBmPVtdO24udSYmZi5wdXNoKCJ0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246IHVuZGVybGluZTsiKSxuLnV2YWwmJmYucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IituLnV2YWwrIjsiKSxuLnN6JiZmLnB1c2goImZvbnQtc2l6ZToiK24uc3orInB0OyIpLG4ub3V0bGluZSYmZi5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxuLnNoYWRvdyYmZi5w''@;'; put 'put ''dXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxpLnB1c2goJzxzcGFuIHN0eWxlPSInK2Yuam9pbigiIikrJyI+Jyksbi5iJiYoaS5wdXNoKCI8Yj4iKSxzLnB1c2goIjwvYj4iKSksbi5pJiYoaS5wdXNoKCI8aT4iKSxzLnB1c2goIjwvaT4iKSksbi5zdHJpa2UmJihpLnB1c2goIjxzPiIpLHMu''@;'; put 'put ''cHVzaCgiPC9zPiIpKTt2YXIgYz1uLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09Y3x8InN1cGVyIj09Yz9jPSJzdXAiOiJzdWJzY3JpcHQiPT1jJiYoYz0ic3ViIiksIiIhPWMmJihpLnB1c2goIjwiK2MrIj4iKSxzLnB1c2goIjwvIitjKyI+IikpLHMucHVzaCgiPC9zcGFuPiIpfShuLnMs''@;'; put 'put ''aVswXSxpWzJdKSxpWzBdLmpvaW4oIiIpK2lbMV0ucmVwbGFjZSh0LCI8YnIvPiIpK2lbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5tYXAoYSkuam9pbigiIil9fSgpLEVoPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFRoPS88''@;'; put 'put ''KD86XHcrOik/cj4vLFNoPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gU24oZSx0KXt2YXIgcj0hdHx8dC5jZWxsSFRNTCxhPXt9O3JldHVybiBlPyhlLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oYS50PUllKEJlKGUuc2xp''@;'; put 'put ''Y2UoZS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksYS5yPUJlKGUpLHImJihhLmg9JDAoYS50KSkpOmUubWF0Y2goVGgpJiYoYS5yPUJlKGUpLGEudD1JZShCZSgoZS5yZXBsYWNlKFNoLCIiKS5tYXRjaChFaCl8fFtdKS5qb2luKCIiKS5yZXBsYWNl''@;'; put 'put ''KHZyLCIiKSkpLHImJihhLmg9a2god2goYS5yKSkpKSxhKTp7dDoiIn19dmFyIEZoPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyx5aD0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLEFoPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO2Z1''@;'; put 'put ''bmN0aW9uIG5mKGUpe2lmKHR5cGVvZiBPZTwidSIpcmV0dXJuIE9lLnV0aWxzLmVuY29kZShSdCxlKTtmb3IodmFyIHQ9W10scj1lLnNwbGl0KCIiKSxhPTA7YTxyLmxlbmd0aDsrK2EpdFthXT1yW2FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHR9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgcj17fTty''@;'; put 'put ''ZXR1cm4gci5NYWpvcj1lLnJlYWRfc2hpZnQoMiksci5NaW5vcj1lLnJlYWRfc2hpZnQoMiksdD49NCYmKGUubCs9dC00KSxyfWZ1bmN0aW9uIExoKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1lLmwrdC00LGE9e30sbj1lLnJlYWRfc2hpZnQoNCksaT1bXTtuLS0gPjA7KWkucHVz''@;'; put 'put ''aCh7dDplLnJlYWRfc2hpZnQoNCksdjplLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoYS5uYW1lPWUucmVhZF9zaGlmdCgwLCJscHA0IiksYS5jb21wcz1pLGUubCE9cil0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitlLmwrIiAhPSAiK3IpO3JldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIHNmKGUsdCl7dmFyIHI9ZS5sK3QsYT17fTthLkZsYWdzPTYzJmUucmVhZF9zaGlmdCg0KSxlLmwrPTQsYS5BbGdJRD1lLnJlYWRfc2hpZnQoNCk7dmFyIG49ITE7c3dpdGNoKGEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4Om49MzY9PWEuRmxhZ3M7YnJl''@;'; put 'put ''YWs7Y2FzZSAyNjYyNTpuPTQ9PWEuRmxhZ3M7YnJlYWs7Y2FzZSAwOm49MTY9PWEuRmxhZ3N8fDQ9PWEuRmxhZ3N8fDM2PT1hLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK2EuQWxnSUR9aWYoIW4pdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIGEuQWxnSURIYXNoPWUucmVhZF9zaGlmdCg0KSxhLktleVNpemU9ZS5yZWFkX3NoaWZ0KDQpLGEuUHJvdmlkZXJUeXBlPWUucmVhZF9zaGlmdCg0KSxlLmwrPTgsYS5DU1BOYW1lPWUucmVhZF9zaGlmdChyLWUubD4+''@;'; put 'put ''MSwidXRmMTZsZSIpLGUubD1yLGF9ZnVuY3Rpb24gZmYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3JldHVybiBlLmwrPTQsci5TYWx0PWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixyLlZlcmlmaWVyPWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixlLnJlYWRfc2hpZnQoNCksci5WZXJp''@;'; put 'put ''Zmllckhhc2g9ZS5zbGljZShlLmwsYSksZS5sPWEscn1mdW5jdGlvbiBWaChlKXtpZigzNiE9KDYzJmUucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciByPWUucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOnNmKGUsciks''@;'; put 'put ''djpmZihlLGUubGVuZ3RoLWUubCl9fWZ1bmN0aW9uIFhoKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIEdoKGUpe3ZhciB0PVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNp''@;'; put 'put ''emUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtlLmwrPTQ7dmFyIHI9ZS5yZWFkX3NoaWZ0KGUubGVuZ3RoLWUubCwidXRmOCIpLGE9e307cmV0dXJuIHIucmVwbGFjZSh2cixmdW5jdGlvbihpKXt2YXIgcz1tZShpKTtz''@;'; put 'put ''d2l0Y2gocnQoc1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6dC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2FbZl09c1tmXX0p''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOmEuZW5jcnlwdGVkSG1hY0tleT1zLmVuY3J5cHRlZEhtYWNLZXksYS5lbmNyeXB0ZWRIbWFjVmFsdWU9cy5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOmEuZW5jcz1b''@;'; put 'put ''XTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOmEudXJpPXMudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6YS5lbmNzLnB1c2gocyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzWzBdfX0pLGF9dmFyIGNmPWZ1bmN0aW9uKCl7dmFyIGU9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwx''@;'; put 'put ''MjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sdD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10scj1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUs''@;'; put 'put ''NjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcw''@;'; put 'put ''LDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0''@;'; put 'put ''OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIw''@;'; put 'put ''LDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sbj1mdW5jdGlvbihzLGYpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gMjU1JihzLzJ8MTI4KnMpfShzXmYpfTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHZhciBmPW5mKHMpLGM9ZnVu''@;'; put 'put ''Y3Rpb24ocyl7Zm9yKHZhciBmPXRbcy5sZW5ndGgtMV0sYz0xMDQsbz1zLmxlbmd0aC0xO28+PTA7LS1vKWZvcih2YXIgbD1zW29dLGg9MDs3IT1oOysraCk2NCZsJiYoZl49cltjXSksbCo9MiwtLWM7cmV0dXJuIGZ9KGYpLG89Zi5sZW5ndGgsbD1fdCgxNiksaD0wOzE2IT1oOysraClsW2hd''@;'; put 'put ''PTA7dmFyIHY7Zm9yKCEoMSZ+bykmJihsW29dPW4oZVswXSxjPj44KSxsWy0tb109bihmW2YubGVuZ3RoLTFdLDI1NSZjKSk7bz4wOylsWy0tb109bihmW29dLGM+PjgpLGxbLS1vXT1uKGZbb10sMjU1JmMpO2ZvcihvPTE1LHY9MTUtZi5sZW5ndGg7dj4wOylsW29dPW4oZVt2XSxjPj44KSwt''@;'; put 'put ''LXYsbFstLW9dPW4oZltvXSwyNTUmYyksLS1vLC0tdjtyZXR1cm4gbH19KCk7dmFyIG9mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShuLGkpe3N3aXRjaChpLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gdChPcihuKSxpKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQobixpKTtjYXNlImJ1ZmZlciI6''@;'; put 'put ''cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihuKT9uLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChuKSxpKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChuKSxpKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraS50eXBlKX1mdW5jdGlvbiB0KG4saSl7dmFyIGY9KGl8fHt9''@;'; put 'put ''KS5kZW5zZT9bXTp7fSxjPW4ubWF0Y2goL1xcdHJvd2QuKj9cXHJvd1xiL2cpO2lmKCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7dmFyIG89e3M6e2M6MCxyOjB9LGU6e2M6MCxyOmMubGVuZ3RoLTF9fTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGws''@;'; put 'put ''aCl7QXJyYXkuaXNBcnJheShmKSYmKGZbaF09W10pO2Zvcih2YXIgdix4PS9cXFx3K1xiL2csZD0wLHU9LTE7dj14LmV4ZWMobCk7KXtpZigiXFxjZWxsIj09PXZbMF0pe3ZhciBwPWwuc2xpY2UoZCx4Lmxhc3RJbmRleC12WzBdLmxlbmd0aCk7aWYoIiAiPT1wWzBdJiYocD1wLnNsaWNlKDEp''@;'; put 'put ''KSwrK3UscC5sZW5ndGgpe3ZhciBrPXt2OnAsdDoicyJ9O0FycmF5LmlzQXJyYXkoZik/ZltoXVt1XT1rOmZbZ2Uoe3I6aCxjOnV9KV09a319ZD14Lmxhc3RJbmRleH11Pm8uZS5jJiYoby5lLmM9dSl9KSxmWyIhcmVmIl09d2UobyksZn1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcihu''@;'; put 'put ''LGkpe3JldHVybiBGdChlKG4saSksaSl9LHRvX3NoZWV0OmUsZnJvbV9zaGVldDpmdW5jdGlvbiBhKG4pe2Zvcih2YXIgZixpPVsie1xccnRmMVxcYW5zaSJdLHM9RGUoblsiIXJlZiJdKSxjPUFycmF5LmlzQXJyYXkobiksbz1zLnMucjtvPD1zLmUucjsrK28pe2kucHVzaCgiXFx0cm93ZFxc''@;'; put 'put ''dHJhdXRvZml0MSIpO2Zvcih2YXIgbD1zLnMuYztsPD1zLmUuYzsrK2wpaS5wdXNoKCJcXGNlbGx4IisobCsxKSk7Zm9yKGkucHVzaCgiXFxwYXJkXFxpbnRibCIpLGw9cy5zLmM7bDw9cy5lLmM7KytsKXt2YXIgaD1nZSh7cjpvLGM6bH0pOyhmPWM/KG5bb118fFtdKVtsXTpuW2hdKSYmKG51''@;'; put 'put ''bGwhPWYudnx8Zi5mJiYhZi5GKSYmKGkucHVzaCgiICIrKGYud3x8KGF0KGYpLGYudykpKSxpLnB1c2goIlxcY2VsbCIpKX1pLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBpLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGJhKGUpe2Zvcih2YXIgdD0wLHI9MTszIT10Oysr''@;'; put 'put ''dClyPTI1NipyKyhlW3RdPjI1NT8yNTU6ZVt0XTwwPzA6ZVt0XSk7cmV0dXJuIHIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gVDAoZSx0KXtpZigwPT09dClyZXR1cm4gZTt2YXIgcj1mdW5jdGlvbiBRaChlKXt2YXIgdD1lWzBdLzI1NSxyPWVbMV0vMjU1''@;'; put 'put ''LGE9ZVsyXS8yNTUsbj1NYXRoLm1heCh0LHIsYSksaT1NYXRoLm1pbih0LHIsYSkscz1uLWk7aWYoMD09PXMpcmV0dXJuWzAsMCx0XTt2YXIgYyxmPTAsbz1uK2k7c3dpdGNoKGM9cy8obz4xPzItbzpvKSxuKXtjYXNlIHQ6Zj0oKHItYSkvcys2KSU2O2JyZWFrO2Nhc2UgcjpmPShhLXQpL3Mr''@;'; put 'put ''MjticmVhaztjYXNlIGE6Zj0odC1yKS9zKzR9cmV0dXJuW2YvNixjLG8vMl19KGZ1bmN0aW9uIFpoKGUpe3ZhciB0PWUuc2xpY2UoIiMiPT09ZVswXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KHQuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQodC5zbGljZSgyLDQpLDE2KSxwYXJz''@;'; put 'put ''ZUludCh0LnNsaWNlKDQsNiksMTYpXX0oZSkpO3JldHVybiByWzJdPXQ8MD9yWzJdKigxK3QpOjEtKDEtclsyXSkqKDEtdCksYmEoZnVuY3Rpb24gZTEoZSl7dmFyIGMscj1lWzFdLGE9ZVsyXSxuPTIqciooYTwuNT9hOjEtYSksaT1hLW4vMixzPVtpLGksaV0sZj02KmVbMF07aWYoMCE9PXIp''@;'; put 'put ''c3dpdGNoKDB8Zil7Y2FzZSAwOmNhc2UgNjpjPW4qZixzWzBdKz1uLHNbMV0rPWM7YnJlYWs7Y2FzZSAxOnNbMF0rPWM9biooMi1mKSxzWzFdKz1uO2JyZWFrO2Nhc2UgMjpjPW4qKGYtMiksc1sxXSs9bixzWzJdKz1jO2JyZWFrO2Nhc2UgMzpzWzFdKz1jPW4qKDQtZiksc1syXSs9bjticmVh''@;'; put 'put ''aztjYXNlIDQ6Yz1uKihmLTQpLHNbMl0rPW4sc1swXSs9YzticmVhaztjYXNlIDU6c1syXSs9Yz1uKig2LWYpLHNbMF0rPW59Zm9yKHZhciBvPTA7MyE9bzsrK28pc1tvXT1NYXRoLnJvdW5kKDI1NSpzW29dKTtyZXR1cm4gc30ocikpfXZhciBsZj02LHIxPTE1LHQxPTEsd3I9bGY7ZnVuY3Rp''@;'; put 'put ''b24gUGEoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUrTWF0aC5yb3VuZCgxMjgvd3IpLzI1Nikqd3IpfWZ1bmN0aW9uIExhKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTUpL3dyKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIFMwKGUpe3JldHVybiBNYXRoLnJvdW5kKChlKndyKzUpL3dyKjI1NikvMjU2''@;'; put 'put ''fWZ1bmN0aW9uIHluKGUpe3JldHVybiBTMChMYShQYShlKSkpfWZ1bmN0aW9uIEFuKGUpe3ZhciB0PU1hdGguYWJzKGUteW4oZSkpLHI9d3I7aWYodD4uMDA1KWZvcih3cj10MTt3cjxyMTsrK3dyKU1hdGguYWJzKGUteW4oZSkpPD10JiYodD1NYXRoLmFicyhlLXluKGUpKSxyPXdyKTt3cj1y''@;'; put 'put ''fWZ1bmN0aW9uIEt0KGUpe2Uud2lkdGg/KGUud3B4PVBhKGUud2lkdGgpLGUud2NoPUxhKGUud3B4KSxlLk1EVz13cik6ZS53cHg/KGUud2NoPUxhKGUud3B4KSxlLndpZHRoPVMwKGUud2NoKSxlLk1EVz13cik6Im51bWJlciI9PXR5cGVvZiBlLndjaCYmKGUud2lkdGg9UzAoZS53Y2gpLGUu''@;'; put 'put ''d3B4PVBhKGUud2lkdGgpLGUuTURXPXdyKSxlLmN1c3RvbVdpZHRoJiZkZWxldGUgZS5jdXN0b21XaWR0aH12YXIgdWY9OTY7ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIDk2KmUvdWZ9ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGUqdWYvOTZ9dmFyIG4xPXtOb25lOiJub25lIixTb2xpZDoic29saWQi''@;'; put 'put ''LEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFn''@;'; put 'put ''Q3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRH''@;'; put 'put ''cmlkIn0sRjA9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLHkwPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0''@;'; put 'put ''b24iLCJxdW90ZVByZWZpeCJdLGgxPWZ1bmN0aW9uKCl7dmFyIHQ9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxyPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sYT0vPCg/Olx3Kzop''@;'; put 'put ''P2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbj0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8saT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihmLGMsbyl7dmFyIGgsbD17fTtyZXR1cm4gZj8oKGg9KGY9Zi5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh0KSkmJmZ1bmN0aW9uIGMxKGUsdCxyKXt0Lk51bWJlckZtdD1bXTtm''@;'; put 'put ''b3IodmFyIGE9JGUocGUpLG49MDtuPGEubGVuZ3RoOysrbil0Lk51bWJlckZtdFthW25dXT1wZVthW25dXTt2YXIgaT1lWzBdLm1hdGNoKHZyKTtpZihpKWZvcihuPTA7bjxpLmxlbmd0aDsrK24pe3ZhciBzPW1lKGlbbl0pO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8''@;'; put 'put ''L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgZj1JZShCZShzLmZvcm1hdENvZGUpKSxjPXBhcnNlSW50KHMubnVtRm10SWQsMTApO2lmKHQuTnVtYmVyRm10W2NdPWYsYz4wKXtpZihjPjM5''@;'; put 'put ''Mil7Zm9yKGM9MzkyO2M+NjAmJm51bGwhPXQuTnVtYmVyRm10W2NdOy0tYyk7dC5OdW1iZXJGbXRbY109Zn1ldChmLGMpfWJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gbnVtRm10cyIpfX19KGgsbCxvKSwoaD1mLm1hdGNo''@;'; put 'put ''KG4pKSYmZnVuY3Rpb24gZjEoZSx0LHIsYSl7dC5Gb250cz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+Ijpj''@;'; put 'put ''YXNlIjxmb250IjpjYXNlIjxmb250PiI6Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmNhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpjYXNlIjxzY2hlbWUvPiI6Y2Fz''@;'; put 'put ''ZSI8L3NjaGVtZT4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+Ijp0LkZvbnRzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxuYW1lIjpmLnZh''@;'; put 'put ''bCYmKG4ubmFtZT1CZShmLnZhbCkpO2JyZWFrO2Nhc2UiPGIiOm4uYm9sZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOm4uYm9sZD0xO2JyZWFrO2Nhc2UiPGkiOm4uaXRhbGljPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6bi5pdGFsaWM9MTticmVhaztj''@;'; put 'put ''YXNlIjx1Ijpzd2l0Y2goZi52YWwpe2Nhc2Uibm9uZSI6bi51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6bi51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6bi51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOm4udW5kZXJsaW5lPTMzO2JyZWFrO2Nh''@;'; put 'put ''c2UiZG91YmxlQWNjb3VudGluZyI6bi51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpuLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPHN0cmlrZSI6bi5zdHJpa2U9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOm4uc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGlu''@;'; put 'put ''ZSI6bi5vdXRsaW5lPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6bi5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpuLnNoYWRvdz1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6bi5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5z''@;'; put 'put ''ZSI6bi5jb25kZW5zZT1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpuLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpuLmV4dGVuZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6bi5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6''@;'; put 'put ''Zi52YWwmJihuLnN6PStmLnZhbCk7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjpmLnZhbCYmKG4udmVydEFsaWduPWYudmFsKTticmVhaztjYXNlIjxmYW1pbHkiOmYudmFsJiYobi5mYW1pbHk9cGFyc2VJbnQoZi52YWwsMTApKTticmVhaztjYXNlIjxzY2hlbWUiOmYudmFsJiYobi5zY2hlbWU9''@;'; put 'put ''Zi52YWwpO2JyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09Zi52YWwpYnJlYWs7Zi5jb2RlcGFnZT1MMFtwYXJzZUludChmLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjppZihuLmNvbG9yfHwobi5jb2xvcj17fSksZi5hdXRvJiYobi5jb2xvci5hdXRvPVdlKGYuYXV0bykpLGYucmdi''@;'; put 'put ''KW4uY29sb3IucmdiPWYucmdiLnNsaWNlKC02KTtlbHNlIGlmKGYuaW5kZXhlZCl7bi5jb2xvci5pbmRleD1wYXJzZUludChmLmluZGV4ZWQsMTApO3ZhciBjPVZ0W24uY29sb3IuaW5kZXhdOzgxPT1uLmNvbG9yLmluZGV4JiYoYz1WdFsxXSksY3x8KGM9VnRbMV0pLG4uY29sb3IucmdiPWNb''@;'; put 'put ''MF0udG9TdHJpbmcoMTYpK2NbMV0udG9TdHJpbmcoMTYpK2NbMl0udG9TdHJpbmcoMTYpfWVsc2UgZi50aGVtZSYmKG4uY29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCksZi50aW50JiYobi5jb2xvci50aW50PXBhcnNlRmxvYXQoZi50aW50KSksZi50aGVtZSYmci50aGVtZUVsZW1l''@;'; put 'put ''bnRzJiZyLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYobi5jb2xvci5yZ2I9VDAoci50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtuLmNvbG9yLnRoZW1lXS5yZ2Isbi5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6aT0hMDticmVhaztj''@;'; put 'put ''YXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjppPSExO2JyZWFrO2RlZmF1bHQ6aWYoYSYmYS5XVEYmJiFpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZlswXSsiIGluIGZvbnRzIil9fSl9KGgsbCxjLG8pLChoPWYubWF0Y2goYSkpJiZmdW5jdGlvbiBzMShl''@;'; put 'put ''LHQscixhKXt0LkZpbGxzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2gocnQoZlswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8''@;'; put 'put ''Z3JhZGllbnRGaWxsPiI6Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxzdG9wIjpjYXNlIjxzdG9wLz4iOmNhc2UiPC9zdG9wPiI6''@;'; put 'put ''Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOnQuRmlsbHMucHVzaChuPXt9KTticmVhaztjYXNlIjxn''@;'; put 'put ''cmFkaWVudEZpbGwiOmNhc2UiPC9ncmFkaWVudEZpbGw+Ijp0LkZpbGxzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpmLnBhdHRlcm5UeXBlJiYobi5wYXR0ZXJuVHlwZT1mLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxiZ0NvbG9y''@;'; put 'put ''IjpuLmJnQ29sb3J8fChuLmJnQ29sb3I9e30pLGYuaW5kZXhlZCYmKG4uYmdDb2xvci5pbmRleGVkPXBhcnNlSW50KGYuaW5kZXhlZCwxMCkpLGYudGhlbWUmJihuLmJnQ29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCkpLGYudGludCYmKG4uYmdDb2xvci50aW50PXBhcnNlRmxvYXQo''@;'; put 'put ''Zi50aW50KSksZi5yZ2ImJihuLmJnQ29sb3IucmdiPWYucmdiLnNsaWNlKC02KSk7YnJlYWs7Y2FzZSI8ZmdDb2xvciI6bi5mZ0NvbG9yfHwobi5mZ0NvbG9yPXt9KSxmLnRoZW1lJiYobi5mZ0NvbG9yLnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApKSxmLnRpbnQmJihuLmZnQ29sb3IudGlu''@;'; put 'put ''dD1wYXJzZUZsb2F0KGYudGludCkpLG51bGwhPWYucmdiJiYobi5mZ0NvbG9yLnJnYj1mLnJnYi5zbGljZSgtNikpO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVj''@;'; put 'put ''b2duaXplZCAiK2ZbMF0rIiBpbiBmaWxscyIpfX0pfShoLGwsMCxvKSwoaD1mLm1hdGNoKGkpKSYmZnVuY3Rpb24gaTEoZSx0LHIsYSl7dC5Cb3JkZXJzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2go''@;'; put 'put ''cnQoZlswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPHJpZ2h0IjpjYXNlIjxyaWdo''@;'; put 'put ''dD4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2Fz''@;'; put 'put ''ZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8L2RpYWdvbmFsPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8L2hvcml6b250YWw+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNl''@;'; put 'put ''IjwvdmVydGljYWw+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2Fz''@;'; put 'put ''ZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6bj17fSxmLmRpYWdvbmFsVXAmJihuLmRpYWdvbmFsVXA9V2UoZi5kaWFnb25hbFVwKSksZi5kaWFn''@;'; put 'put ''b25hbERvd24mJihuLmRpYWdvbmFsRG93bj1XZShmLmRpYWdvbmFsRG93bikpLHQuQm9yZGVycy5wdXNoKG4pO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du''@;'; put 'put ''aXplZCAiK2ZbMF0rIiBpbiBib3JkZXJzIil9fSl9KGgsbCwwLG8pLChoPWYubWF0Y2gocikpJiZmdW5jdGlvbiBsMShlLHQscil7dC5DZWxsWGY9W107dmFyIGEsbj0hMTsoZVswXS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpLGY9MDtzd2l0Y2gocnQo''@;'; put 'put ''c1swXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPHByb3RlY3Rpb24iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNl''@;'; put 'put ''IjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShhPXMpWzBdLGY9MDtmPEYwLmxlbmd0aDsrK2YpYVtGMFtmXV0mJihhW0YwW2ZdXT1wYXJzZUludChhW0YwW2ZdXSwxMCkpO2ZvcihmPTA7Zjx5MC5s''@;'; put 'put ''ZW5ndGg7KytmKWFbeTBbZl1dJiYoYVt5MFtmXV09V2UoYVt5MFtmXV0pKTtpZih0Lk51bWJlckZtdCYmYS5udW1GbXRJZD4zOTIpZm9yKGY9MzkyO2Y+NjA7LS1mKWlmKHQuTnVtYmVyRm10W2EubnVtRm10SWRdPT10Lk51bWJlckZtdFtmXSl7YS5udW1GbXRJZD1mO2JyZWFrfXQuQ2VsbFhm''@;'; put 'put ''LnB1c2goYSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGM9e307cy52ZXJ0aWNhbCYmKGMudmVydGljYWw9cy52ZXJ0aWNhbCkscy5ob3Jpem9udGFsJiYoYy5ob3Jpem9udGFsPXMuaG9yaXpvbnRhbCksbnVsbCE9cy50ZXh0Um90YXRpb24mJihjLnRl''@;'; put 'put ''eHRSb3RhdGlvbj1zLnRleHRSb3RhdGlvbikscy5pbmRlbnQmJihjLmluZGVudD1zLmluZGVudCkscy53cmFwVGV4dCYmKGMud3JhcFRleHQ9V2Uocy53cmFwVGV4dCkpLGEuYWxpZ25tZW50PWM7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpuPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7ZGVmYXVsdDppZihyJiZyLldURiYmIW4pdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShoLGwsbyksbCk6bH19KCksZzE9cHIsdzE9cHIsUDE9WyI8L2E6''@;'; put 'put ''bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rp''@;'; put 'put ''b24gTDEoZSx0LHIpe3QudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIGE9e307KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1tZShuKTtzd2l0Y2goaVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGE6c3JnYkNsciI6YS5yZ2I9aS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOmEucmdiPWkubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxh''@;'; put 'put ''Omx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2Vu''@;'; put 'put ''dDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWlbMF0uY2hh''@;'; put 'put ''ckF0KDEpPyh0LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1AxLmluZGV4T2YoaVswXSldPWEsYT17fSk6YS5uYW1lPWlbMF0uc2xpY2UoMyxpWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKHImJnIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIraVswXSsiIGluIGNs''@;'; put 'put ''clNjaGVtZSIpfX0pfWZ1bmN0aW9uIEIxKCl7fWZ1bmN0aW9uIE0xKCl7fXZhciBVMT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxXMT0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLEgxPS88YTpmbXRTY2hlbWUoW14+''@;'; put 'put ''XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFgxPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gdmYoZSx0KXsoIWV8fDA9PT1lLmxlbmd0aCkmJihlPWZ1bmN0aW9uIERuKGUsdCl7aWYodCYmdC50aGVtZVhMU1gpcmV0dXJu''@;'; put 'put ''IHQudGhlbWVYTFNYO2lmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5yYXcpcmV0dXJuIGUucmF3O3ZhciByPVtlcl07cmV0dXJuIHJbci5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0i''@;'; put 'put ''T2ZmaWNlIFRoZW1lIj4nLHJbci5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIscltyLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPics''@;'; put 'put ''cltyLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxyW3IubGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicscltyLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVF''@;'; put 'put ''Q0UxIi8+PC9hOmx0Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQz''@;'; put 'put ''PjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4n''@;'; put 'put ''LHJbci5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLHJbci5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicscltyLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4''@;'; put 'put ''MDAwODAiLz48L2E6Zm9sSGxpbms+JyxyW3IubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLHJbci5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIscltyLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI''@;'; put 'put ''YW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBS''@;'; put 'put ''b21hbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0i''@;'; put 'put ''VnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBl''@;'; put 'put ''ZmFjZT0iVHVuZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0''@;'; put 'put ''eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlh''@;'; put 'put ''Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9Ikdh''@;'; put 'put ''dXRhbWkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlh''@;'; put 'put ''IiB0eXBlZmFjZT0iS2FsaW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxyW3IubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLHJbci5sZW5ndGhd''@;'; put 'put ''PSI8YTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLHJbci5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxyW3IubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0''@;'; put 'put ''eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5z''@;'; put 'put ''IiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+Jyxy''@;'; put 'put ''W3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicscltyLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3Nh''@;'; put 'put ''Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJE''@;'; put 'put ''b2tDaGFtcGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicscltyLmxlbmd0aF09''@;'; put 'put ''IjwvYTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixyW3IubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciIvPjwvYTpzb2xpZEZpbGw+JyxyW3IubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6''@;'; put 'put ''Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3Ro''@;'; put 'put ''XT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6''@;'; put 'put ''c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0i''@;'; put 'put ''MCIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRG''@;'; put 'put ''aWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxyW3IubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAi''@;'; put 'put ''IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHJbci5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBk''@;'; put 'put ''PSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicscltyLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0''@;'; put 'put ''PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAw''@;'; put 'put ''MDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZm''@;'; put 'put ''ZWN0THN0PiIscltyLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hk''@;'; put 'put ''dz4nLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBk''@;'; put 'put ''aXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicscltyLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6c2Nl''@;'; put 'put ''bmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRS''@;'; put 'put ''aWc+PC9hOnNjZW5lM2Q+JyxyW3IubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTpiZ0Zp''@;'; put 'put ''bGxTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicscltyLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxyW3IubGVuZ3RoXT0iPGE6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6''@;'; put 'put ''Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp''@;'; put 'put ''bnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwv''@;'; put 'put ''YTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQg''@;'; put 'put ''dmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwv''@;'; put 'put ''YTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09IjwvYTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpn''@;'; put 'put ''cmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLHJbci5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLHJbci5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpzcERlZj4iLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJl''@;'; put 'put ''Zj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLHJbci5sZW5ndGhdPSI8L2E6c3BEZWY+IixyW3Iu''@;'; put 'put ''bGVuZ3RoXT0iPGE6bG5EZWY+IixyW3IubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFs''@;'; put 'put ''PSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0iPC9hOmxuRGVmPiIscltyLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixyW3IubGVuZ3RoXT0iPC9hOnRoZW1lPiIsci5qb2luKCIiKX0oKSk7dmFyIHIsYT17fTtpZighKHI9ZS5tYXRjaChYMSkpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gVjEoZSx0LHIpe3ZhciBhO3QudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFUxLEwxXSxbImZvbnRTY2hlbWUiLFcxLEIxXSxbImZtdFNjaGVtZSIsSDEsTTFdXS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKG4pe2lmKCEoYT1lLm1hdGNoKG5bMV0pKSl0aHJvdyBuZXcgRXJyb3IoblswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7blsyXShhLHQscil9KX0oclswXSxhLHQpLGEucmF3PWUsYX1mdW5jdGlvbiBZMShlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMiktNCxhPVt0XTtzd2l0Y2godCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzphWzFdPWZ1bmN0aW9uICQxKGUpe3ZhciB0PXt9O3N3aXRjaCh0LnhjbHJUeXBlPWUucmVhZF9zaGlmdCgyKSx0Lm5UaW50U2hh''@;'; put 'put ''ZGU9ZS5yZWFkX3NoaWZ0KDIpLHQueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6ZS5sKz00O2JyZWFrO2Nhc2UgMTp0LnhjbHJWYWx1ZT1mdW5jdGlvbiBqMShlLHQpe3JldHVybiBwcihlLHQpfShlLDQpO2JyZWFrO2Nhc2UgMjp0LnhjbHJWYWx1ZT1NcyhlKTticmVhaztjYXNlIDM6dC54Y2xy''@;'; put 'put ''VmFsdWU9ZnVuY3Rpb24gejEoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCg0KX0oZSl9cmV0dXJuIGUubCs9OCx0fShlKTticmVhaztjYXNlIDY6YVsxXT1mdW5jdGlvbiBLMShlLHQpe3JldHVybiBwcihlLHQpfShlLHIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTphWzFdPWUucmVhZF9zaGlmdCgx''@;'; put 'put ''PT09cj8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK3QrIiAiK3IpfXJldHVybiBhfWZ1bmN0aW9uIHExKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe30pfWZ1bmN0aW9uIGdmKGUsdCxyLGEpe3ZhciBpLG49QXJyYXku''@;'; put 'put ''aXNBcnJheShlKTt0LmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9R2Uocy5yZWYpO2lmKG4/KGVbZi5yXXx8KGVbZi5yXT1bXSksaT1lW2Yucl1bZi5jXSk6aT1lW3MucmVmXSwhaSl7aT17dDoieiJ9LG4/ZVtmLnJdW2YuY109aTplW3MucmVmXT1pO3ZhciBjPURlKGVbIiFyZWYiXXx8IkJE''@;'; put 'put ''V0dPMTAwMDAwMTpBMSIpO2Mucy5yPmYuciYmKGMucy5yPWYuciksYy5lLnI8Zi5yJiYoYy5lLnI9Zi5yKSxjLnMuYz5mLmMmJihjLnMuYz1mLmMpLGMuZS5jPGYuYyYmKGMuZS5jPWYuYyk7dmFyIG89d2UoYyk7byE9PWVbIiFyZWYiXSYmKGVbIiFyZWYiXT1vKX1pLmN8fChpLmM9W10pO3Zh''@;'; put 'put ''ciBsPXthOnMuYXV0aG9yLHQ6cy50LHI6cy5yLFQ6cn07cy5oJiYobC5oPXMuaCk7Zm9yKHZhciBoPWkuYy5sZW5ndGgtMTtoPj0wOy0taCl7aWYoIXImJmkuY1toXS5UKXJldHVybjtyJiYhaS5jW2hdLlQmJmkuYy5zcGxpY2UoaCwxKX1pZihyJiZhKWZvcihoPTA7aDxhLmxlbmd0aDsrK2gp''@;'; put 'put ''aWYobC5hPT1hW2hdLmlkKXtsLmE9YVtoXS5uYW1lfHxsLmE7YnJlYWt9aS5jLnB1c2gobCl9KX12YXIgd3g9bXIsU3g9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsdWE9ZnVuY3Rpb24oKXt2YXIgZT0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8''@;'; put 'put ''KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLHQ9e3I6MCxjOjB9O2Z1bmN0aW9uIHIoYSxuLGkscyl7dmFyIGY9ITEsYz0hMTswPT1pLmxlbmd0aD9jPSEwOiJbIj09aS5jaGFyQXQoMCkmJihjPSEwLGk9aS5zbGljZSgxLC0xKSksMD09cy5sZW5ndGg/Zj0hMDoi''@;'; put 'put ''WyI9PXMuY2hhckF0KDApJiYoZj0hMCxzPXMuc2xpY2UoMSwtMSkpO3ZhciBvPWkubGVuZ3RoPjA/MHxwYXJzZUludChpLDEwKTowLGw9cy5sZW5ndGg+MD8wfHBhcnNlSW50KHMsMTApOjA7cmV0dXJuIGY/bCs9dC5jOi0tbCxjP28rPXQucjotLW8sbisoZj8iIjoiJCIpK0hlKGwpKyhjPyIi''@;'; put 'put ''OiIkIikrS2Uobyl9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQ9aSxuLnJlcGxhY2UoZSxyKX19KCksT249LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7''@;'; put 'put ''M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5yZXBsYWNlKE9uLGZ1bmN0aW9uKGEsbixpLHMsZixjKXt2YXIgbz1ubihz''@;'; put 'put ''KS0oaT8wOnIuYyksbD1hbihjKS0oZj8wOnIucik7cmV0dXJuIG4rIlIiKygwPT1sPyIiOmY/bCsxOiJbIitsKyJdIikrIkMiKygwPT1vPyIiOmk/bysxOiJbIitvKyJdIil9KX19KCk7ZnVuY3Rpb24ga2YoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKE9uLGZ1bmN0aW9uKHIsYSxuLGkscyxmKXty''@;'; put 'put ''ZXR1cm4gYSsoIiQiPT1uP24raTpIZShubihpKSt0LmMpKSsoIiQiPT1zP3MrZjpLZShhbihmKSt0LnIpKX0pfWZ1bmN0aW9uIEl4KGUsdCxyKXt2YXIgbj1Qcih0KS5zLGk9R2Uocik7cmV0dXJuIGtmKGUse3I6aS5yLW4ucixjOmkuYy1uLmN9KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gZS5y''@;'; put 'put ''ZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGFyKGUpe2UubCs9MX1mdW5jdGlvbiBBdChlLHQpe3ZhciByPWUucmVhZF9zaGlmdCgxPT10PzE6Mik7cmV0dXJuWzE2MzgzJnIscj4+MTQmMSxyPj4xNSYxXX1mdW5jdGlvbiBUZihlLHQscil7dmFyIGE9MjtpZihyKXtpZihyLmJpZmY+''@;'; put 'put ''PTImJnIuYmlmZjw9NSlyZXR1cm4gU2YoZSk7MTI9PXIuYmlmZiYmKGE9NCl9dmFyIG49ZS5yZWFkX3NoaWZ0KGEpLGk9ZS5yZWFkX3NoaWZ0KGEpLHM9QXQoZSwyKSxmPUF0KGUsMik7cmV0dXJue3M6e3I6bixjOnNbMF0sY1JlbDpzWzFdLHJSZWw6c1syXX0sZTp7cjppLGM6ZlswXSxjUmVs''@;'; put 'put ''OmZbMV0sclJlbDpmWzJdfX19ZnVuY3Rpb24gU2YoZSl7dmFyIHQ9QXQoZSwyKSxyPUF0KGUsMiksYT1lLnJlYWRfc2hpZnQoMSksbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6dFswXSxjOmEsY1JlbDp0WzFdLHJSZWw6dFsyXX0sZTp7cjpyWzBdLGM6bixjUmVsOnJbMV0sclJlbDpy''@;'; put 'put ''WzJdfX19ZnVuY3Rpb24gRmYoZSx0LHIpe2lmKHImJnIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBieChlKXt2YXIgdD1BdChlLDIpLHI9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOnRbMF0sYzpyLGNSZWw6dFsxXSxyUmVsOnRbMl19fShlKTt2YXIgYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQociYmMTI9PXIuYmlmZj80OjIpLG49QXQoZSwyKTtyZXR1cm57cjphLGM6blswXSxjUmVsOm5bMV0sclJlbDpuWzJdfX1mdW5jdGlvbiBQeChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6dCxjOjI1NSZyLGZRdW90ZWQ6ISEoMTYzODQmciks''@;'; put 'put ''Y1JlbDpyPj4xNSxyUmVsOnI+PjE1fX1mdW5jdGlvbiB5ZihlKXt2YXIgdD0xJmVbZS5sKzFdO3JldHVybiBlLmwrPTQsW3QsMV19ZnVuY3Rpb24gQWYoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIGxkKGUsdCl7dmFyIHI9W2UucmVhZF9zaGlm''@;'; put 'put ''dCgxKV07aWYoMTI9PXQpc3dpdGNoKHJbMF0pe2Nhc2UgMjpyWzBdPTQ7YnJlYWs7Y2FzZSA0OnJbMF09MTY7YnJlYWs7Y2FzZSAwOnJbMF09MTticmVhaztjYXNlIDE6clswXT0yfXN3aXRjaChyWzBdKXtjYXNlIDQ6clsxXT1KZShlLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT10JiYoZS5sKz03''@;'; put 'put ''KTticmVhaztjYXNlIDM3OmNhc2UgMTY6clsxXT14dFtlW2UubF1dLGUubCs9MTI9PXQ/NDo4O2JyZWFrO2Nhc2UgMDplLmwrPTg7YnJlYWs7Y2FzZSAxOnJbMV09Z3IoZSk7YnJlYWs7Y2FzZSAyOnJbMV09enQoZSwwLHtiaWZmOnQ+MCYmdDw4PzI6dH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrclswXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWQoZSx0LHIpe2Zvcih2YXIgYT1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLG49W10saT0wO2khPWE7KytpKW4ucHVzaCgoMTI9PXIuYmlmZj9XdDprMCkoZSw4KSk7cmV0dXJuIG59ZnVuY3Rpb24g''@;'; put 'put ''aGQoZSx0LHIpe3ZhciBhPTAsbj0wOzEyPT1yLmJpZmY/KGE9ZS5yZWFkX3NoaWZ0KDQpLG49ZS5yZWFkX3NoaWZ0KDQpKToobj0xK2UucmVhZF9zaGlmdCgxKSxhPTErZS5yZWFkX3NoaWZ0KDIpKSxyLmJpZmY+PTImJnIuYmlmZjw4JiYoLS1hLDA9PS0tbiYmKG49MjU2KSk7Zm9yKHZhciBp''@;'; put 'put ''PTAscz1bXTtpIT1hJiYoc1tpXT1bXSk7KytpKWZvcih2YXIgZj0wO2YhPW47KytmKXNbaV1bZl09bGQoZSxyLmJpZmYpO3JldHVybiBzfWZ1bmN0aW9uIFVhKGUsdCxyKXtyZXR1cm4gZS5sKz0yLFtQeChlKV19ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUubCs9NixbXX1mdW5jdGlvbiBDZihl''@;'; put 'put ''KXtyZXR1cm4gZS5sKz0yLFt0cihlKSwxJmUucmVhZF9zaGlmdCgyKV19dmFyIFJkPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIs''@;'; put 'put ''Ij9DdXJyZW50Il0sRGY9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBuZChlLHQscil7cmV0dXJuIGUubCsrLHImJjEyPT1yLmJpZmY/W2UucmVhZF9zaGlmdCg0LCJpIiksMF06W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJs''@;'; put 'put ''IixmOnByfSwzOntuOiJQdGdBZGQiLGY6YXJ9LDQ6e246IlB0Z1N1YiIsZjphcn0sNTp7bjoiUHRnTXVsIixmOmFyfSw2OntuOiJQdGdEaXYiLGY6YXJ9LDc6e246IlB0Z1Bvd2VyIixmOmFyfSw4OntuOiJQdGdDb25jYXQiLGY6YXJ9LDk6e246IlB0Z0x0IixmOmFyfSwxMDp7bjoiUHRnTGUi''@;'; put 'put ''LGY6YXJ9LDExOntuOiJQdGdFcSIsZjphcn0sMTI6e246IlB0Z0dlIixmOmFyfSwxMzp7bjoiUHRnR3QiLGY6YXJ9LDE0OntuOiJQdGdOZSIsZjphcn0sMTU6e246IlB0Z0lzZWN0IixmOmFyfSwxNjp7bjoiUHRnVW5pb24iLGY6YXJ9LDE3OntuOiJQdGdSYW5nZSIsZjphcn0sMTg6e246IlB0''@;'; put 'put ''Z1VwbHVzIixmOmFyfSwxOTp7bjoiUHRnVW1pbnVzIixmOmFyfSwyMDp7bjoiUHRnUGVyY2VudCIsZjphcn0sMjE6e246IlB0Z1BhcmVuIixmOmFyfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjphcn0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBvZChlLHQscil7cmV0dXJuIGUubCsrLFJhKGUs''@;'; put 'put ''MCxyKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBQZChlLHQscil7cmV0dXJuIGUubCs9NSxlLmwrPTIsZS5sKz0yPT1yLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBMZChlLHQscil7cmV0dXJuIGUubCs9Mj09ci5iaWZmPzQ6''@;'; put 'put ''NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIGlkKGUpe3JldHVybiBlLmwrKyx4dFtlLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gZmQoZSl7cmV0dXJuIGUubCsrLDAhPT1lLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRn''@;'; put 'put ''SW50IixmOmZ1bmN0aW9uIHNkKGUpe3JldHVybiBlLmwrKyxlLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIGNkKGUpe3JldHVybiBlLmwrKyxncihlKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBYeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+''@;'; put 'put ''NTtyZXR1cm4gZS5sKz0yPT1yLmJpZmY/NjoxMj09ci5iaWZmPzE0OjcsW2FdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gZWQoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2UubCs9MTt2YXIgbj1lLnJlYWRfc2hpZnQociYmci5iaWZmPD0zPzE6Mik7cmV0dXJuW2F2W25dLFJm''@;'; put 'put ''W25dLGFdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gcmQoZSx0LHIpe3ZhciBhPWVbZS5sKytdLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ciYmci5iaWZmPD0zP1s4OD09YT8tMTowLGUucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gdGQoZSl7cmV0dXJuW2VbZS5sKzFdPj43LDMyNzY3''@;'; put 'put ''JmUucmVhZF9zaGlmdCgyKV19KGUpO3JldHVybltuLCgwPT09aVswXT9SZjp0dilbaVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24geGQoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMyxpPWUucmVhZF9zaGlmdCghcnx8ci5iaWZmPj04PzQ6Mik7c3dpdGNoKHIu''@;'; put 'put ''YmlmZil7Y2FzZSAyOmUubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OmUubCs9ODticmVhaztjYXNlIDU6ZS5sKz0xMn1yZXR1cm5bYSwwLGldfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBxeChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7cmV0dXJuIGUubCs9MSxbYSxGZihlLDAs''@;'; put 'put ''cildfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gTXgoZSx0LHIpe3JldHVyblsoOTYmZVtlLmwrK10pPj41LFRmKGUsMCxyKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBwZChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBlLmwrPXImJjI9''@;'; put 'put ''PXIuYmlmZj8zOjQsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6cHJ9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpwcn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gbWQoZSx0LHIpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41''@;'; put 'put ''JjMsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gZ2QoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZS5sKz00LHIuYmlmZjw4JiZlLmwtLSwxMj09ci5iaWZmJiYoZS5sKz0yKSxbYV19fSw0Mzp7''@;'; put 'put ''bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBXeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NTtyZXR1cm4gZS5sKz1yJiZyLmJpZmY+OD8xMjpyLmJpZmY8OD82OjgsW2FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gWngoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2Uu''@;'; put 'put ''bCs9MTt2YXIgbj1mdW5jdGlvbiBMeChlLHQscil7dmFyIGE9ciYmci5iaWZmP3IuYmlmZjo4O2lmKGE+PTImJmE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJ4KGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgxKSxhPSgzMjc2OCZ0KT4+MTUsbj0oMTYzODQmdCk+PjE0O3Jl''@;'; put 'put ''dHVybiB0Jj0xNjM4MywxPT1hJiZ0Pj04MTkyJiYodC09MTYzODQpLDE9PW4mJnI+PTEyOCYmKHItPTI1Nikse3I6dCxjOnIsY1JlbDpuLHJSZWw6YX19KGUpO3ZhciBuPWUucmVhZF9zaGlmdChhPj0xMj80OjIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9KDE2Mzg0JmkpPj4xNCxmPSgzMjc2OCZp''@;'; put 'put ''KT4+MTU7aWYoaSY9MTYzODMsMT09Zilmb3IoO24+NTI0Mjg3OyluLT0xMDQ4NTc2O2lmKDE9PXMpZm9yKDtpPjgxOTE7KWktPTE2Mzg0O3JldHVybntyOm4sYzppLGNSZWw6cyxyUmVsOmZ9fShlLDAscik7cmV0dXJuW2Esbl19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gVngoZSx0''@;'; put 'put ''LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1mdW5jdGlvbiBOeChlLHQscil7aWYoci5iaWZmPDgpcmV0dXJuIFNmKGUpO3ZhciBhPWUucmVhZF9zaGlmdCgxMj09ci5iaWZmPzQ6Miksbj1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLGk9QXQoZSwyKSxzPUF0KGUsMik7cmV0dXJu''@;'; put 'put ''e3M6e3I6YSxjOmlbMF0sY1JlbDppWzFdLHJSZWw6aVsyXX0sZTp7cjpuLGM6c1swXSxjUmVsOnNbMV0sclJlbDpzWzJdfX19KGUsMCxyKTtyZXR1cm5bYSxuXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBCZChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVh''@;'; put 'put ''ZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIE1kKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41JjMsZS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBkZChlLHQscil7cmV0dXJuIDU9PXIuYmlmZj9mdW5jdGlvbiB2''@;'; put 'put ''ZChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk+Pj41JjMscj1lLnJlYWRfc2hpZnQoMiwiaSIpO2UubCs9ODt2YXIgYT1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubCs9MTIsW3QscixhXX0oZSk6W2UucmVhZF9zaGlmdCgxKT4+PjUmMyxlLnJlYWRfc2hpZnQoMiksZS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''XX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBReChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7ZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmNT09ci5iaWZmJiYoZS5sKz0xMiksW2EsbixGZihlLDAscildfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5j''@;'; put 'put ''dGlvbiBVeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NSxuPWUucmVhZF9zaGlmdCgyLCJpIik7aWYociYmNT09PXIuYmlmZillLmwrPTEyO3JldHVyblthLG4sVGYoZSwwLHIpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBfZChlLHQscil7dmFyIGE9KDk2JmVbZS5s''@;'; put 'put ''KytdKT4+NSxuPWUucmVhZF9zaGlmdCgyKSxpPTQ7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6aT0xNTticmVhaztjYXNlIDEyOmk9Nn1yZXR1cm4gZS5sKz1pLFthLG5dfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBIeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+''@;'; put 'put ''NSxuPWUucmVhZF9zaGlmdCgyKSxpPTg7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6ZS5sKz0xMixpPTY7YnJlYWs7Y2FzZSAxMjppPTEyfXJldHVybiBlLmwrPWksW2Esbl19fSwyNTU6e319LFdkPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2''@;'; put 'put ''ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6''@;'; put 'put ''MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX0sSGQ9ezE6e246IlB0Z0VsZkxlbCIsZjpDZn0sMjp7bjoiUHRnRWxmUnciLGY6VWF9LDM6e246IlB0Z0VsZkNvbCIsZjpVYX0sNjp7bjoiUHRnRWxmUndWIixmOlVhfSw3''@;'; put 'put ''OntuOiJQdGdFbGZDb2xWIixmOlVhfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpVYX0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOlJufSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpSbn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOlJufSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpDZn0sMjU6''@;'; put 'put ''e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gTmQoZSl7ZS5sKz0yO3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTp0LGNvbHR5cGU6MyZyLHJ0OlJkW3I+''@;'; put 'put ''PjImMzFdLGlkeDphLGM6bixDOml9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBiZChlKXtyZXR1cm4gZS5sKz0yLFtlLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxWZD17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gVWQoZSl7cmV0dXJuIGUubCs9NCxbMCwwXX19LDE6''@;'; put 'put ''e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIEt4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBlLmwrPXImJjI9PXIuYmlmZj8zOjQsW2FdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uICR4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBl''@;'; put 'put ''LmwrPTIsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gR3goZSx0LHIpe2UubCs9Mjtmb3IodmFyIGE9ZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpLG49W10saT0wO2k8PWE7KytpKW4ucHVzaChlLnJlYWRf''@;'; put 'put ''c2hpZnQociYmMj09ci5iaWZmPzE6MikpO3JldHVybiBufX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gengoZSx0LHIpe3ZhciBhPTI1NSZlW2UubCsxXT8xOjA7cmV0dXJuIGUubCs9MixbYSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJT''@;'; put 'put ''dW0iLGY6ZnVuY3Rpb24gYWQoZSx0LHIpe2UubCs9ciYmMj09ci5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOnlmfSwzMzp7bjoiUHRnQXR0ckJheGNlbCIsZjp5Zn0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBZeChlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LEFmKGUpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSngoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxBZihlKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gangoZSl7dmFyIHQ9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz0yLFt0LGUu''@;'; put 'put ''cmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIFdhKGUsdCxyLGEpe2lmKGEuYmlmZjw4KXJldHVybiBwcihlLHQpO2Zvcih2YXIgbj1lLmwrdCxpPVtdLHM9MDtzIT09ci5sZW5ndGg7KytzKXN3aXRjaChyW3NdWzBdKXtjYXNlIlB0Z0FycmF5IjpyW3NdWzFdPWhkKGUsMCxhKSxp''@;'; put 'put ''LnB1c2gocltzXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpyW3NdWzJdPXVkKGUsMCxhKSxpLnB1c2gocltzXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOmEmJjEyPT1hLmJpZmYmJihyW3NdWzFdWzFdPWUucmVhZF9zaGlmdCg0KSxpLnB1c2gocltzXVsxXSkpO2JyZWFrO2Nhc2UiUHRn''@;'; put 'put ''TGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK3Jbc11bMF19cmV0dXJuIDAhPSh0PW4tZS5sKSYmaS5wdXNoKHByKGUsdCkpLGl9ZnVuY3Rpb24gSGEoZSx0LHIpe2Zvcih2YXIgbixpLGE9ZS5s''@;'; put 'put ''K3Qscz1bXTthIT1lLmw7KXQ9YS1lLmwsbj1EZltpPWVbZS5sXV18fERmW1dkW2ldXSwoMjQ9PT1pfHwyNT09PWkpJiYobj0oMjQ9PT1pP0hkOlZkKVtlW2UubCsxXV0pLG4mJm4uZj9zLnB1c2goW24ubixuLmYoZSx0LHIpXSk6cHIoZSx0KTtyZXR1cm4gc31mdW5jdGlvbiBYZChlKXtmb3Io''@;'; put 'put ''dmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXtmb3IodmFyIGE9ZVtyXSxuPVtdLGk9MDtpPGEubGVuZ3RoOysraSl7dmFyIHM9YVtpXTtuLnB1c2gocz8yPT09c1swXT8nIicrc1sxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnNbMV06IiIpfXQucHVzaChuLmpvaW4oIiwiKSl9cmV0dXJu''@;'; put 'put ''IHQuam9pbigiOyIpfXZhciBHZD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn07ZnVuY3Rpb24g''@;'; put 'put ''T2YoZSx0LHIpe2lmKCFlKXJldHVybiJTSDMzVEpTRVJSMCI7aWYoci5iaWZmPjgmJighZS5YVEl8fCFlLlhUSVt0XSkpcmV0dXJuIGUuU2hlZXROYW1lc1t0XTtpZighZS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgYT1lLlhUSVt0XTtpZihyLmJpZmY8OClyZXR1cm4gdD4xZTQmJih0''@;'; put 'put ''LT02NTUzNiksdDwwJiYodD0tdCksMD09dD8iIjplLlhUSVt0LTFdO2lmKCFhKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIG49IiI7aWYoci5iaWZmPjgpc3dpdGNoKGVbYVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV0sYVsxXT09''@;'; put 'put ''YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ci5TSUQ/ZS5TaGVldE5hbWVzW3IuU0lEXToiU0gzM1RKU1NBTUUiK2VbYVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrZVthWzBdXVswXX1zd2l0Y2goZVthWzBdXVswXVswXSl7''@;'; put 'put ''Y2FzZSAxMDI1OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV18fCJTSDMzVEpTRVJSMyIsYVsxXT09YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBlW2FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4g''@;'; put 'put ''aS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBlW2FbMF1dWzBdWzNdPyhuPS0xPT1hWzFdPyIjUkVGIjplW2FbMF1dWzBdWzNdW2FbMV1dfHwiU0gzM1RKU0VSUjQiLGFbMV09PWFbMl0/bjpuKyI6IitlW2FbMF1dWzBdWzNdW2FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlv''@;'; put 'put ''biBJZihlLHQscil7dmFyIGE9T2YoZSx0LHIpO3JldHVybiIjUkVGIj09YT9hOmZ1bmN0aW9uIHpkKGUsdCl7aWYoIShlfHx0JiZ0LmJpZmY8PTUmJnQuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1''@;'; put 'put ''MzBGRl0vLnRlc3QoZSk/IiciK2UrIiciOmV9KGEscil9ZnVuY3Rpb24ga3IoZSx0LHIsYSxuKXt2YXIgYyxvLGwsZCxpPW4mJm4uYmlmZnx8OCxzPXtzOntjOjAscjowfSxlOntjOjAscjowfX0sZj1bXSxoPTAseD0wLHY9IiI7aWYoIWVbMF18fCFlWzBdWzBdKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''dT0tMSxwPSIiLGs9MCxUPWVbMF0ubGVuZ3RoO2s8VDsrK2spe3ZhciBnPWVbMF1ba107c3dpdGNoKGdbMF0pe2Nhc2UiUHRnVW1pbnVzIjpmLnB1c2goIi0iK2YucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmYucHVzaCgiKyIrZi5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijpm''@;'; put 'put ''LnB1c2goZi5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2Vy''@;'; put 'put ''IjpjYXNlIlB0Z1N1YiI6aWYoYz1mLnBvcCgpLG89Zi5wb3AoKSx1Pj0wKXtzd2l0Y2goZVswXVt1XVsxXVswXSl7Y2FzZSAwOnA9amUoIiAiLGVbMF1bdV1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpwPWplKCJcciIsZVswXVt1XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihwPSIiLG4uV1RGKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZVswXVt1XVsxXVswXSl9bys9cCx1PS0xfWYucHVzaChvK0dkW2dbMF1dK2MpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiAiK2MpO2JyZWFrO2Nhc2UiUHRnVW5p''@;'; put 'put ''b24iOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiwiK2MpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIjoiK2MpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRn''@;'; put 'put ''QXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0''@;'; put 'put ''IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpsPUNhKGdbMV1bMV0scyxuKSxmLnB1c2goRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpsPXI/Q2EoZ1sxXVsxXSxyLG4pOmdbMV1bMV0sZi5wdXNoKERh''@;'; put 'put ''KGwsaSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmg9Z1sxXVsxXSxsPUNhKGdbMV1bMl0scyxuKSx2PUlmKGEsaCxuKSxmLnB1c2godisiISIrRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBNPWdbMV1bMF0sST1nWzFdWzFdO018fChNPTApO3ZhciB5''@;'; put 'put ''PTA9PShNJj0xMjcpP1tdOmYuc2xpY2UoLU0pO2YubGVuZ3RoLT1NLCJVc2VyIj09PUkmJihJPXkuc2hpZnQoKSksZi5wdXNoKEkrIigiK3kuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpmLnB1c2goZ1sxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNh''@;'; put 'put ''c2UiUHRnRXJyIjpmLnB1c2goZ1sxXSk7YnJlYWs7Y2FzZSJQdGdOdW0iOmYucHVzaChTdHJpbmcoZ1sxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpmLnB1c2goJyInK2dbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6ZD1ucyhnWzFdWzFdLHI/e3M6cn06''@;'; put 'put ''cyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpkPW5zKGdbMV1bMV0scyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmQ9Z1sxXVsyXSx2PUlmKGEsaD1nWzFdWzFdLG4pLGYucHVzaCh2KyIhIit0bihkLG4pKTticmVhaztjYXNlIlB0Z0F0''@;'; put 'put ''dHJTdW0iOmYucHVzaCgiU1VNKCIrZi5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIFA9KGEubmFtZXN8fFtdKVsoeD1nWzFdWzJdKS0xXXx8KGFbMF18fFtdKVt4XSxSPVA/UC5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKHgpO1ImJiJfeGxmbi4iPT1SLnNsaWNlKDAsNikm''@;'; put 'put ''JiFuLnhsZm4mJihSPVIuc2xpY2UoNikpLGYucHVzaChSKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgWCxWPWdbMV1bMV07aWYoeD1nWzFdWzJdLCEobi5iaWZmPD01KSl7dmFyIGI9IiI7aWYoMTQ4NDk9PSgoYVtWXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKGFbVl18fFtdKVswXXx8''@;'; put 'put ''W10pWzBdP2FbVl1beF0mJmFbVl1beF0uaXRhYj4wJiYoYj1hLlNoZWV0TmFtZXNbYVtWXVt4XS5pdGFiLTFdKyIhIik6Yj1hLlNoZWV0TmFtZXNbeC0xXSsiISIpLGFbVl0mJmFbVl1beF0pYis9YVtWXVt4XS5OYW1lO2Vsc2UgaWYoYVswXSYmYVswXVt4XSliKz1hWzBdW3hdLk5hbWU7ZWxz''@;'; put 'put ''ZXt2YXIgZWU9KE9mKGEsVixuKXx8IiIpLnNwbGl0KCI7OyIpO2VlW3gtMV0/Yj1lZVt4LTFdOmIrPSJTSDMzVEpTRVJSWCJ9Zi5wdXNoKGIpO2JyZWFrfVY8MCYmKFY9LVYpLGFbVl0mJihYPWFbVl1beF0pLFh8fChYPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxmLnB1c2goWC5OYW1lKTticmVh''@;'; put 'put ''aztjYXNlIlB0Z1BhcmVuIjp2YXIgbGU9IigiLHJlPSIpIjtpZih1Pj0wKXtzd2l0Y2gocD0iIixlWzBdW3VdWzFdWzBdKXtjYXNlIDI6bGU9amUoIiAiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgMzpsZT1qZSgiXHIiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgNDpyZT1q''@;'; put 'put ''ZSgiICIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7Y2FzZSA1OnJlPWplKCJcciIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7ZGVmYXVsdDppZihuLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2VbMF1bdV1bMV1bMF0pfXU9LTF9Zi5wdXNoKGxl''@;'; put 'put ''K2YucG9wKCkrcmUpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z1JlZkVycjNkIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpmLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBkZT17YzpyLmMscjpyLnJ9O2lmKGEuc2hhcmVkZltnZShsPXtj''@;'; put 'put ''OmdbMV1bMV0scjpnWzFdWzBdfSldKXt2YXIgdWU9YS5zaGFyZWRmW2dlKGwpXTtmLnB1c2goa3IodWUsMCxkZSxhLG4pKX1lbHNle3ZhciBGZT0hMTtmb3IoYz0wO2MhPWEuYXJyYXlmLmxlbmd0aDsrK2MpaWYoIShsLmM8KG89YS5hcnJheWZbY10pWzBdLnMuY3x8bC5jPm9bMF0uZS5jfHxs''@;'; put 'put ''LnI8b1swXS5zLnJ8fGwucj5vWzBdLmUucikpe2YucHVzaChrcihvWzFdLDAsZGUsYSxuKSksRmU9ITA7YnJlYWt9RmV8fGYucHVzaChnWzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpmLnB1c2goInsiK1hkKGdbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0''@;'; put 'put ''clNwYWNlU2VtaSI6dT1rO2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6Zi5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmYucHVzaCgiVGFibGUiK2dbMV0uaWR4KyJbIyIrZ1sxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29s''@;'; put 'put ''U1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZz''@;'; put 'put ''Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhnKSl9aWYoMyE9bi5iaWZmJiZ1Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKGVbMF1ba11bMF0pKXt2''@;'; put 'put ''YXIgeGU9ITA7c3dpdGNoKChnPWVbMF1bdV0pWzFdWzBdKXtjYXNlIDQ6eGU9ITE7Y2FzZSAwOnA9amUoIiAiLGdbMV1bMV0pO2JyZWFrO2Nhc2UgNTp4ZT0hMTtjYXNlIDE6cD1qZSgiXHIiLGdbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYocD0iIixuLldURil0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''ZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2dbMV1bMF0pfWYucHVzaCgoeGU/cDoiIikrZi5wb3AoKSsoeGU/IiI6cCkpLHU9LTF9fWlmKGYubGVuZ3RoPjEmJm4uV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gZlswXX1mdW5jdGlvbiAkZChlLHQs''@;'; put 'put ''cil7dmFyIGksYT1lLmwrdCxuPTI9PXIuYmlmZj8xOjIscz1lLnJlYWRfc2hpZnQobik7aWYoNjU1MzU9PXMpcmV0dXJuW1tdLHByKGUsdC0yKV07dmFyIGY9SGEoZSxzLHIpO3JldHVybiB0IT09cytuJiYoaT1XYShlLHQtcy1uLGYscikpLGUubD1hLFtmLGldfWZ1bmN0aW9uIFlkKGUsdCxy''@;'; put 'put ''KXt2YXIgbixhPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KDIpLHM9SGEoZSxpLHIpO3JldHVybiA2NTUzNT09aT9bW10scHIoZSx0LTIpXToodCE9PWkrMiYmKG49V2EoZSxhLWktMixzLHIpKSxbcyxuXSl9ZnVuY3Rpb24gTm4oZSx0LHIpe3ZhciBhPWUubCt0LG49bnQoZSk7Mj09ci5iaWZmJiYr''@;'; put 'put ''K2UubDt2YXIgaT1mdW5jdGlvbiBKZChlKXt2YXIgdDtpZig2NTUzNSE9PXV0KGUsZS5sKzYpKXJldHVybltncihlKSwibiJdO3N3aXRjaChlW2UubF0pe2Nhc2UgMDpyZXR1cm4gZS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gdD0xPT09ZVtlLmwrMl0sZS5sKz04LFt0LCJi''@;'; put 'put ''Il07Y2FzZSAyOnJldHVybiB0PWVbZS5sKzJdLGUubCs9OCxbdCwiZSJdO2Nhc2UgMzpyZXR1cm4gZS5sKz04LFsiIiwicyJdfXJldHVybltdfShlKSxzPWUucmVhZF9zaGlmdCgxKTsyIT1yLmJpZmYmJihlLnJlYWRfc2hpZnQoMSksci5iaWZmPj01JiZlLnJlYWRfc2hpZnQoNCkpO3ZhciBm''@;'; put 'put ''PWZ1bmN0aW9uIGpkKGUsdCxyKXt2YXIgaSxhPWUubCt0LG49Mj09ci5iaWZmPzE6MixzPWUucmVhZF9zaGlmdChuKTtpZig2NTUzNT09cylyZXR1cm5bW10scHIoZSx0LTIpXTt2YXIgZj1IYShlLHMscik7cmV0dXJuIHQhPT1zK24mJihpPVdhKGUsdC1zLW4sZixyKSksZS5sPWEsW2YsaV19''@;'; put 'put ''KGUsYS1lLmwscik7cmV0dXJue2NlbGw6bix2YWw6aVswXSxmb3JtdWxhOmYsc2hhcmVkOnM+PjMmMSx0dDppWzFdfX1mdW5jdGlvbiBBMChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDQpLG49SGEoZSxhLHIpLGk9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybltuLGk+MD9XYShlLGksbixyKTpu''@;'; put 'put ''dWxsXX12YXIgUWQ9QTAsQzA9QTAsZXY9QTAscnY9QTAsdHY9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwx''@;'; put 'put ''MDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVB''@;'; put 'put ''SyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2''@;'; put 'put ''OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9O''@;'; put 'put ''Iiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1F''@;'; put 'put ''Iiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVS''@;'; put 'put ''WS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVY''@;'; put 'put ''VCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIs''@;'; put 'put ''OTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEu''@;'; put 'put ''RklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEw''@;'; put 'put ''OiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQ''@;'; put 'put ''Qk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlT''@;'; put 'put ''IiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VU''@;'; put 'put ''TElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQi''@;'; put 'put ''LDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwx''@;'; put 'put ''Njc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4''@;'; put 'put ''NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4z''@;'; put 'put ''RC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9N''@;'; put 'put ''T1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJB''@;'; put 'put ''U1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5U''@;'; put 'put ''LlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIu''@;'; put 'put ''REFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJ''@;'; put 'put ''TkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFV''@;'; put 'put ''VE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JL''@;'; put 'put ''Qk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFku''@;'; put 'put ''VE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIs''@;'; put 'put ''MzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElW''@;'; put 'put ''T1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BU''@;'; put 'put ''SU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJH''@;'; put 'put ''QUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5B''@;'; put 'put ''REQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJP''@;'; put 'put ''UEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6''@;'; put 'put ''IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToi''@;'; put 'put ''U1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIs''@;'; put 'put ''NDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFD''@;'; put 'put ''RVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9Y''@;'; put 'put ''LlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5E''@;'; put 'put ''SUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVD''@;'; put 'put ''VC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9S''@;'; put 'put ''QkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04u''@;'; put 'put ''U0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFU''@;'; put 'put ''QVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToi''@;'; put 'put ''U0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFS''@;'; put 'put ''RUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lP''@;'; put 'put ''TlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LFJmPXswOiJDT1VOVCIsMToiSUYi''@;'; put 'put ''LDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIs''@;'; put 'put ''MTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxT''@;'; put 'put ''RSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9H''@;'; put 'put ''RVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4''@;'; put 'put ''OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNF''@;'; put 'put ''QVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVD''@;'; put 'put ''VElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJT''@;'; put 'put ''RVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RF''@;'; put 'put ''IiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJG''@;'; put 'put ''UkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0''@;'; put 'put ''ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1''@;'; put 'put ''ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5''@;'; put 'put ''OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQ''@;'; put 'put ''IiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5P''@;'; put 'put ''VEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VB''@;'; put 'put ''UkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRP''@;'; put 'put ''REFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5I''@;'; put 'put ''IiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoi''@;'; put 'put ''SU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxV''@;'; put 'put ''QVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIs''@;'; put 'put ''MjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0Ui''@;'; put 'put ''LDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9N''@;'; put 'put ''RElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9J''@;'; put 'put ''U1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBF''@;'; put 'put ''QVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2''@;'; put 'put ''OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4''@;'; put 'put ''OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxB''@;'; put 'put ''TksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklF''@;'; put 'put ''Vy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJU''@;'; put 'put ''SEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFI''@;'; put 'put ''VFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklO''@;'; put 'put ''IiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0''@;'; put 'put ''MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0''@;'; put 'put ''MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6''@;'; put 'put ''IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNF''@;'; put 'put ''RElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMi''@;'; put 'put ''LDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6''@;'; put 'put ''Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpT''@;'; put 'put ''Iiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRD''@;'; put 'put ''T1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGF2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6Miwz''@;'; put 'put ''MDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4''@;'; put 'put ''MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMx''@;'; put 'put ''OjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMs''@;'; put 'put ''MTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0''@;'; put 'put ''OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMs''@;'; put 'put ''MzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUx''@;'; put 'put ''OjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEs''@;'; put 'put ''NDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4''@;'; put 'put ''OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH07ZnVuY3Rpb24gTmYoZSl7cmV0dXJuIm9mOiI9PWUuc2xpY2UoMCwzKSYmKGU9ZS5zbGljZSgzKSksNjE9PWUuY2hhckNvZGVBdCgwKSYmNjE9PShlPWUuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihlPWUuc2xpY2UoMSkpLChlPShlPShlPWUucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbih0LHIpe3JldHVybiByLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxh''@;'; put 'put ''Y2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gYm4oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpO3JldHVyblt0WzBdLnNwbGl0KCIuIilbMF0sdFswXS5zcGxpdCgiLiIpWzFdKyh0Lmxlbmd0aD4xPyI6''@;'; put 'put ''IisodFsxXS5zcGxpdCgiLiIpWzFdfHx0WzFdLnNwbGl0KCIuIilbMF0pOiIiKV19dmFyIFZhPXt9LGhhPXt9O2Z1bmN0aW9uIFl0KGUsdCl7aWYoZSl7dmFyIHI9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09dCYmKHI9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1lLmxlZnQmJihlLmxl''@;'; put 'put ''ZnQ9clswXSksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9clsxXSksbnVsbD09ZS50b3AmJihlLnRvcD1yWzJdKSxudWxsPT1lLmJvdHRvbSYmKGUuYm90dG9tPXJbM10pLG51bGw9PWUuaGVhZGVyJiYoZS5oZWFkZXI9cls0XSksbnVsbD09ZS5mb290ZXImJihlLmZvb3Rlcj1yWzVdKX19ZnVu''@;'; put 'put ''Y3Rpb24gYmYoZSx0LHIsYSxuLGkpe3RyeXthLmNlbGxORiYmKGUuej1wZVt0XSl9Y2F0Y2goZil7aWYoYS5XVEYpdGhyb3cgZn1pZigieiIhPT1lLnR8fGEuY2VsbFN0eWxlcyl7aWYoImQiPT09ZS50JiYic3RyaW5nIj09dHlwZW9mIGUudiYmKGUudj1YZShlLnYpKSwoIWF8fCExIT09YS5j''@;'; put 'put ''ZWxsVGV4dCkmJiJ6IiE9PWUudCl0cnl7aWYobnVsbD09cGVbdF0mJmV0KGFvW3RdfHwiR2VuZXJhbCIsdCksImUiPT09ZS50KWUudz1lLnd8fHh0W2Uudl07ZWxzZSBpZigwPT09dClpZigibiI9PT1lLnQpZS53PSgwfGUudik9PT1lLnY/ZS52LnRvU3RyaW5nKDEwKTprYShlLnYpO2Vsc2Ug''@;'; put 'put ''aWYoImQiPT09ZS50KXt2YXIgcz1pcihlLnYpO2Uudz0oMHxzKT09PXM/cy50b1N0cmluZygxMCk6a2Eocyl9ZWxzZXtpZih2b2lkIDA9PT1lLnYpcmV0dXJuIiI7ZS53PU50KGUudixoYSl9ZWxzZSBlLnc9UnIodCwiZCI9PT1lLnQ/aXIoZS52KTplLnYsaGEpfWNhdGNoKGYpe2lmKGEuV1RG''@;'; put 'put ''KXRocm93IGZ9aWYoYS5jZWxsU3R5bGVzJiZudWxsIT1yKXRyeXtlLnM9aS5GaWxsc1tyXSxlLnMuZmdDb2xvciYmZS5zLmZnQ29sb3IudGhlbWUmJiFlLnMuZmdDb2xvci5yZ2ImJihlLnMuZmdDb2xvci5yZ2I9VDAobi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuZmdDb2xvci50aGVt''@;'; put 'put ''ZV0ucmdiLGUucy5mZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmZnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5mZ0NvbG9yLnRoZW1lXS5yZ2IpKSxlLnMuYmdDb2xvciYmZS5zLmJnQ29sb3IudGhlbWUmJihlLnMuYmdDb2xvci5yZ2I9VDAobi50aGVt''@;'; put 'put ''ZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuYmdDb2xvci50aGVtZV0ucmdiLGUucy5iZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmJnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5iZ0NvbG9yLnRoZW1lXS5yZ2IpKX1jYXRjaChmKXtpZihhLldURiYmaS5G''@;'; put 'put ''aWxscyl0aHJvdyBmfX19dmFyIHN2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGZ2PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sY3Y9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20s''@;'; put 'put ''b3Y9LyIoXHcqOlx3KikiLyxsdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLHV2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxodj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLFBmPS88KD86XHc6''@;'; put 'put ''KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8seHY9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+Lyxkdj0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdz''@;'; put 'put ''KT4vO2Z1bmN0aW9uIExuKGUsdCxyLGEpe3ZhciBuPW1lKGUpO3IuU2hlZXRzW2FdfHwoci5TaGVldHNbYV09e30pLG4uY29kZU5hbWUmJihyLlNoZWV0c1thXS5Db2RlTmFtZT1JZShCZShuLmNvZGVOYW1lKSkpfXZhciBEdj0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9c''@;'; put 'put ''Lz8+LyxOdj1mdW5jdGlvbigpe3ZhciBlPS88KD86XHcrOik/Y1sgXC8+XS8sdD0vPFwvKD86XHcrOik/cm93Pi8scj0vcj1bIiddKFteIiddKilbIiddLyxhPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sbj0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGk9RmEoInYi''@;'; put 'put ''KSxzPUZhKCJmIik7cmV0dXJuIGZ1bmN0aW9uKGMsbyxsLGgseCxkKXtmb3IodmFyIEkseSxWLFgscmUsdj0wLHU9IiIscD1bXSxrPVtdLFQ9MCxnPTAsTj0wLE09IiIsUD0wLFI9MCxiPTAsZWU9MCxsZT1BcnJheS5pc0FycmF5KGQuQ2VsbFhmKSxkZT1bXSx1ZT1bXSxGZT1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KG8pLGNlPVtdLHhlPXt9LEs9ITEsQz0hIWwuc2hlZXRTdHVicyxVPWMuc3BsaXQodCksTz0wLEQ9VS5sZW5ndGg7TyE9RDsrK08pe3ZhciBqPSh1PVVbT10udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWope3ZhciBzZT0wO2U6Zm9yKHY9MDt2PGo7Kyt2KXN3aXRjaCh1W3ZdKXtjYXNlIj4i''@;'; put 'put ''OmlmKCIvIiE9dVt2LTFdKXsrK3Y7YnJlYWsgZX1pZihsJiZsLmNlbGxTdHlsZXMpe2lmKFA9bnVsbCE9KHk9bWUodS5zbGljZShzZSx2KSwhMCkpLnI/cGFyc2VJbnQoeS5yLDEwKTpQKzEsUj0tMSxsLnNoZWV0Um93cyYmbC5zaGVldFJvd3M8UCljb250aW51ZTt4ZT17fSxLPSExLHkuaHQm''@;'; put 'put ''JihLPSEwLHhlLmhwdD1wYXJzZUZsb2F0KHkuaHQpLHhlLmhweD1vYSh4ZS5ocHQpKSwiMSI9PXkuaGlkZGVuJiYoSz0hMCx4ZS5oaWRkZW49ITApLG51bGwhPXkub3V0bGluZUxldmVsJiYoSz0hMCx4ZS5sZXZlbD0reS5vdXRsaW5lTGV2ZWwpLEsmJihjZVtQLTFdPXhlKX1icmVhaztjYXNl''@;'; put 'put ''IjwiOnNlPXZ9aWYoc2U+PXYpYnJlYWs7aWYoUD1udWxsIT0oeT1tZSh1LnNsaWNlKHNlLHYpLCEwKSkucj9wYXJzZUludCh5LnIsMTApOlArMSxSPS0xLCEobC5zaGVldFJvd3MmJmwuc2hlZXRSb3dzPFApKXtoLnMucj5QLTEmJihoLnMucj1QLTEpLGguZS5yPFAtMSYmKGguZS5yPVAtMSks''@;'; put 'put ''bCYmbC5jZWxsU3R5bGVzJiYoeGU9e30sSz0hMSx5Lmh0JiYoSz0hMCx4ZS5ocHQ9cGFyc2VGbG9hdCh5Lmh0KSx4ZS5ocHg9b2EoeGUuaHB0KSksIjEiPT15LmhpZGRlbiYmKEs9ITAseGUuaGlkZGVuPSEwKSxudWxsIT15Lm91dGxpbmVMZXZlbCYmKEs9ITAseGUubGV2ZWw9K3kub3V0bGlu''@;'; put 'put ''ZUxldmVsKSxLJiYoY2VbUC0xXT14ZSkpLHA9dS5zbGljZSh2KS5zcGxpdChlKTtmb3IodmFyIFo9MDtaIT1wLmxlbmd0aCYmIjwiPT1wW1pdLnRyaW0oKS5jaGFyQXQoMCk7KytaKTtmb3IocD1wLnNsaWNlKFopLHY9MDt2IT1wLmxlbmd0aDsrK3YpaWYoMCE9PSh1PXBbdl0udHJpbSgpKS5s''@;'; put 'put ''ZW5ndGgpe2lmKGs9dS5tYXRjaChyKSxUPXYsZz0wLE49MCx1PSI8YyAiKygiPCI9PXUuc2xpY2UoMCwxKT8iPiI6IiIpK3UsbnVsbCE9ayYmMj09PWsubGVuZ3RoKXtmb3IoVD0wLE09a1sxXSxnPTA7ZyE9TS5sZW5ndGgmJiEoKE49TS5jaGFyQ29kZUF0KGcpLTY0KTwxfHxOPjI2KTsrK2cp''@;'; put 'put ''VD0yNipUK047Uj0tLVR9ZWxzZSsrUjtmb3IoZz0wO2chPXUubGVuZ3RoJiY2MiE9PXUuY2hhckNvZGVBdChnKTsrK2cpO2lmKCsrZywoeT1tZSh1LnNsaWNlKDAsZyksITApKS5yfHwoeS5yPWdlKHtyOlAtMSxjOlJ9KSksST17dDoiIn0sbnVsbCE9KGs9KE09dS5zbGljZShnKSkubWF0Y2go''@;'; put 'put ''aSkpJiYiIiE9PWtbMV0mJihJLnY9SWUoa1sxXSkpLGwuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrPU0ubWF0Y2gocykpJiYiIiE9PWtbMV0pe2lmKEkuZj1JZShCZShrWzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLGwueGxmbnx8KEkuZj1FZihJLmYpKSxrWzBdLmluZGV4T2YoJ3Q9ImFy''@;'; put 'put ''cmF5IicpPi0xKUkuRj0oTS5tYXRjaChuKXx8W10pWzFdLEkuRi5pbmRleE9mKCI6Iik+LTEmJmRlLnB1c2goW0RlKEkuRiksSS5GXSk7ZWxzZSBpZihrWzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7WD1tZShrWzBdKTt2YXIgUT1JZShCZShrWzFdKSk7bC54bGZufHwoUT1FZihRKSks''@;'; put 'put ''dWVbcGFyc2VJbnQoWC5zaSwxMCldPVtYLFEseS5yXX19ZWxzZShrPU0ubWF0Y2goLzxmW14+XSpcLz4vKSkmJnVlWyhYPW1lKGtbMF0pKS5zaV0mJihJLmY9SXgodWVbWC5zaV1bMV0sdWVbWC5zaV1bMl0seS5yKSk7dmFyIFk9R2UoeS5yKTtmb3IoZz0wO2c8ZGUubGVuZ3RoOysrZylZLnI+''@;'; put 'put ''PWRlW2ddWzBdLnMuciYmWS5yPD1kZVtnXVswXS5lLnImJlkuYz49ZGVbZ11bMF0ucy5jJiZZLmM8PWRlW2ddWzBdLmUuYyYmKEkuRj1kZVtnXVsxXSl9aWYobnVsbD09eS50JiZ2b2lkIDA9PT1JLnYpaWYoSS5mfHxJLkYpSS52PTAsSS50PSJuIjtlbHNle2lmKCFDKWNvbnRpbnVlO0kudD0i''@;'; put 'put ''eiJ9ZWxzZSBJLnQ9eS50fHwibiI7c3dpdGNoKGgucy5jPlImJihoLnMuYz1SKSxoLmUuYzxSJiYoaC5lLmM9UiksSS50KXtjYXNlIm4iOmlmKCIiPT1JLnZ8fG51bGw9PUkudil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIEkudj1wYXJzZUZsb2F0KEkudik7YnJlYWs7Y2FzZSJzIjpp''@;'; put 'put ''Zih0eXBlb2YgSS52PiJ1Iil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIFY9VmFbcGFyc2VJbnQoSS52LDEwKV0sSS52PVYudCxJLnI9Vi5yLGwuY2VsbEhUTUwmJihJLmg9Vi5oKTticmVhaztjYXNlInN0ciI6SS50PSJzIixJLnY9bnVsbCE9SS52P0JlKEkudik6IiIsbC5jZWxsSFRN''@;'; put 'put ''TCYmKEkuaD0kMChJLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6az1NLm1hdGNoKGEpLEkudD0icyIsbnVsbCE9ayYmKFY9U24oa1sxXSkpPyhJLnY9Vi50LGwuY2VsbEhUTUwmJihJLmg9Vi5oKSk6SS52PSIiO2JyZWFrO2Nhc2UiYiI6SS52PVdlKEkudik7YnJlYWs7Y2FzZSJkIjpsLmNl''@;'; put 'put ''bGxEYXRlcz9JLnY9WGUoSS52LDEpOihJLnY9aXIoWGUoSS52LDEpKSxJLnQ9Im4iKTticmVhaztjYXNlImUiOighbHx8ITEhPT1sLmNlbGxUZXh0KSYmKEkudz1JLnYpLEkudj1kc1tJLnZdfWlmKGI9ZWU9MCxyZT1udWxsLGxlJiZ2b2lkIDAhPT15LnMmJm51bGwhPShyZT1kLkNlbGxYZlt5''@;'; put 'put ''LnNdKSYmKG51bGwhPXJlLm51bUZtdElkJiYoYj1yZS5udW1GbXRJZCksbC5jZWxsU3R5bGVzJiZudWxsIT1yZS5maWxsSWQmJihlZT1yZS5maWxsSWQpKSxiZihJLGIsZWUsbCx4LGQpLGwuY2VsbERhdGVzJiZsZSYmIm4iPT1JLnQmJmJ0KHBlW2JdKSYmKEkudD0iZCIsSS52PW8wKEkudikp''@;'; put 'put ''LHkuY20mJmwueGxtZXRhKXt2YXIgRWU9KGwueGxtZXRhLkNlbGx8fFtdKVsreS5jbS0xXTtFZSYmIlhMREFQUiI9PUVlLnR5cGUmJihJLkQ9ITApfWlmKEZlKXt2YXIgQT1HZSh5LnIpO29bQS5yXXx8KG9bQS5yXT1bXSksb1tBLnJdW0EuY109SX1lbHNlIG9beS5yXT1JfX19fWNlLmxlbmd0''@;'; put 'put ''aD4wJiYob1siIXJvd3MiXT1jZSl9fSgpLE12PVd0O2Z1bmN0aW9uIEJmKGUpe3JldHVybltNdChlKSxncihlKSwibiJdfXZhciBrMj1XdCxNZj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdO3ZhciBCbj1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEs''@;'; put 'put ''ImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAs''@;'; put 'put ''ImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsi''@;'; put 'put ''c2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0s''@;'; put 'put ''WyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sYXA9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwi''@;'; put 'put ''Ym9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbnA9W10saXA9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwi''@;'; put 'put ''YXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEi''@;'; put 'put ''LCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIFVmKGUsdCl7Zm9yKHZhciByPTA7ciE9ZS5sZW5ndGg7KytyKWZvcih2YXIgYT1lW3JdLG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl07aWYobnVsbD09YVtpWzBdXSlhW2lbMF1dPWlbMV07ZWxzZSBzd2l0Y2goaVsy''@;'; put 'put ''XSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGFbaVswXV0mJihhW2lbMF1dPVdlKGFbaVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBhW2lbMF1dJiYoYVtpWzBdXT1wYXJzZUludChhW2lbMF1dLDEwKSl9fX1mdW5jdGlvbiBXZihlLHQpe2Zvcih2YXIgcj0w''@;'; put 'put ''O3IhPXQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihudWxsPT1lW2FbMF1dKWVbYVswXV09YVsxXTtlbHNlIHN3aXRjaChhWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZVthWzBdXSYmKGVbYVswXV09V2UoZVthWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGVbYVswXV0mJihlW2FbMF1dPXBhcnNlSW50KGVbYVswXV0sMTApKX19fWZ1bmN0aW9uIEhmKGUpe1dmKGUuV0JQcm9wcyxCbiksV2YoZS5DYWxjUHIsaXApLFVmKGUuV0JWaWV3LGFwKSxVZihlLlNoZWV0cyxucCksaGEuZGF0ZTE5MDQ9V2UoZS5XQlByb3BzLmRhdGUxOTA0KX12YXIg''@;'; put 'put ''ZnA9Il1bKj8vXFwiLnNwbGl0KCIiKTt2YXIgb3A9Lzxcdys6d29ya2Jvb2svO2Z1bmN0aW9uIHZwKGUsdCl7dmFyIHI9e307cmV0dXJuIGUucmVhZF9zaGlmdCg0KSxyLkFyY2hJRD1lLnJlYWRfc2hpZnQoNCksZS5sKz10LTgscn1mdW5jdGlvbiBTcChlLHQscixhLG4saSxzLGYpe3JldHVy''@;'; put 'put ''biIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIE0yKGUsdCxyLGEsbixpLHMpe2lmKCFlKXJldHVybiBlO3ZhciBmPXR8fHt9O2F8fChhPXsiIWlkIjp7fX0pLG51bGwhPXplJiZudWxsPT1mLmRlbnNlJiYoZi5kZW5zZT16ZSk7dmFyIG8sdix1LHAsayxULGcsTixNLEksYz1mLmRlbnNl''@;'; put 'put ''P1tdOnt9LGw9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0saD1bXSx4PSExLGQ9ITEseT1bXTtmLmJpZmY9MTIsZlsiIXJvdyJdPTA7dmFyIFA9MCxSPSExLFY9W10sWD17fSxiPWYuc3VwYm9va3N8fG4uc3VwYm9va3N8fFtbXV07aWYoYi5zaGFyZWRmPVgsYi5hcnJheWY9VixiLlNo''@;'; put 'put ''ZWV0TmFtZXM9bi5TaGVldE5hbWVzfHxuLlNoZWV0cy5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5uYW1lfSksIWYuc3VwYm9va3MmJihmLnN1cGJvb2tzPWIsbi5OYW1lcykpZm9yKHZhciBlZT0wO2VlPG4uTmFtZXMubGVuZ3RoOysrZWUpYlswXVtlZSsxXT1uLk5hbWVzW2VlXTt2YXIg''@;'; put 'put ''dWUsRmUsbGU9W10scmU9W10sZGU9ITE7aWYoJGFbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6QmZ9LGh0KGUsZnVuY3Rpb24oSyxDLFUpe2lmKCFkKXN3aXRjaChVKXtjYXNlIDE0ODpvPUs7YnJlYWs7Y2FzZSAwOnY9SyxmLnNoZWV0Um93cyYmZi5zaGVldFJvd3M8PXYuciYmKGQ9ITApLE09''@;'; put 'put ''S2Uoaz12LnIpLGZbIiFyb3ciXT12LnIsKEsuaGlkZGVufHxLLmhwdHx8bnVsbCE9Sy5sZXZlbCkmJihLLmhwdCYmKEsuaHB4PW9hKEsuaHB0KSkscmVbSy5yXT1LKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6''@;'; put 'put ''Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDYyOnN3aXRjaCh1PXt0OktbMl19LEtbMl0pe2Nhc2UibiI6dS52PUtbMV07YnJlYWs7Y2FzZSJzIjp1LnY9KE49VmFbS1sxXV0pLnQsdS5yPU4ucjticmVhaztjYXNlImIiOnUudj0h''@;'; put 'put ''IUtbMV07YnJlYWs7Y2FzZSJlIjp1LnY9S1sxXSwhMSE9PWYuY2VsbFRleHQmJih1Lnc9eHRbdS52XSk7YnJlYWs7Y2FzZSJzdHIiOnUudD0icyIsdS52PUtbMV07YnJlYWs7Y2FzZSJpcyI6dS50PSJzIix1LnY9S1sxXS50fWlmKChwPXMuQ2VsbFhmW0tbMF0uaVN0eWxlUmVmXSkmJmJmKHUs''@;'; put 'put ''cC5udW1GbXRJZCxudWxsLGYsaSxzKSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsZi5jZWxsRm9ybXVsYSl7Zm9yKFI9ITEsUD0wO1A8Vi5sZW5ndGg7KytQKXt2YXIgTz1WW1BdO3Yucj49T1swXS5zLnIm''@;'; put 'put ''JnYucjw9T1swXS5lLnImJlQ+PU9bMF0ucy5jJiZUPD1PWzBdLmUuYyYmKHUuRj13ZShPWzBdKSxSPSEwKX0hUiYmSy5sZW5ndGg+MyYmKHUuZj1LWzNdKX1pZihsLnMucj52LnImJihsLnMucj12LnIpLGwucy5jPlQmJihsLnMuYz1UKSxsLmUucjx2LnImJihsLmUucj12LnIpLGwuZS5jPFQm''@;'; put 'put ''JihsLmUuYz1UKSxmLmNlbGxEYXRlcyYmcCYmIm4iPT11LnQmJmJ0KHBlW3AubnVtRm10SWRdKSl7dmFyIEQ9a3QodS52KTtEJiYodS50PSJkIix1LnY9bmV3IERhdGUoRC55LEQubS0xLEQuZCxELkgsRC5NLEQuUyxELnUpKX11ZSYmKCJYTERBUFIiPT11ZS50eXBlJiYodS5EPSEwKSx1ZT12''@;'; put 'put ''b2lkIDApLEZlJiYoRmU9dm9pZCAwKTticmVhaztjYXNlIDE6Y2FzZSAxMjppZighZi5zaGVldFN0dWJzfHx4KWJyZWFrO3U9e3Q6InoiLHY6dm9pZCAwfSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsbC5z''@;'; put 'put ''LnI+di5yJiYobC5zLnI9di5yKSxsLnMuYz5UJiYobC5zLmM9VCksbC5lLnI8di5yJiYobC5lLnI9di5yKSxsLmUuYzxUJiYobC5lLmM9VCksdWUmJigiWExEQVBSIj09dWUudHlwZSYmKHUuRD0hMCksdWU9dm9pZCAwKSxGZSYmKEZlPXZvaWQgMCk7YnJlYWs7Y2FzZSAxNzY6eS5wdXNoKEsp''@;'; put 'put ''O2JyZWFrO2Nhc2UgNDk6dWU9KChmLnhsbWV0YXx8e30pLkNlbGx8fFtdKVtLLTFdO2JyZWFrO2Nhc2UgNDk0OnZhciBqPWFbIiFpZCJdW0sucmVsSWRdO2ZvcihqPyhLLlRhcmdldD1qLlRhcmdldCxLLmxvYyYmKEsuVGFyZ2V0Kz0iIyIrSy5sb2MpLEsuUmVsPWopOiIiPT1LLnJlbElkJiYo''@;'; put 'put ''Sy5UYXJnZXQ9IiMiK0subG9jKSxrPUsucmZ4LnMucjtrPD1LLnJmeC5lLnI7KytrKWZvcihUPUsucmZ4LnMuYztUPD1LLnJmeC5lLmM7KytUKWYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdfHwoY1trXVtUXT17dDoieiIsdjp2b2lkIDB9KSxjW2tdW1RdLmw9Syk6KGc9Z2Uoe2M6''@;'; put 'put ''VCxyOmt9KSxjW2ddfHwoY1tnXT17dDoieiIsdjp2b2lkIDB9KSxjW2ddLmw9Syk7YnJlYWs7Y2FzZSA0MjY6aWYoIWYuY2VsbEZvcm11bGEpYnJlYWs7Vi5wdXNoKEspLChJPWYuZGVuc2U/Y1trXVtUXTpjW0hlKFQpK01dKS5mPWtyKEtbMV0sMCx7cjp2LnIsYzpUfSxiLGYpLEkuRj13ZShL''@;'; put 'put ''WzBdKTticmVhaztjYXNlIDQyNzppZighZi5jZWxsRm9ybXVsYSlicmVhaztYW2dlKEtbMF0ucyldPUtbMV0sKEk9Zi5kZW5zZT9jW2tdW1RdOmNbSGUoVCkrTV0pLmY9a3IoS1sxXSwwLHtyOnYucixjOlR9LGIsZik7YnJlYWs7Y2FzZSA2MDppZighZi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7''@;'; put 'put ''Sy5lPj1LLnM7KWxlW0suZS0tXT17d2lkdGg6Sy53LzI1NixoaWRkZW46ISEoMSZLLmZsYWdzKSxsZXZlbDpLLmxldmVsfSxkZXx8KGRlPSEwLEFuKEsudy8yNTYpKSxLdChsZVtLLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOmNbIiFhdXRvZmlsdGVyIl09e3JlZjp3ZShLKX07YnJlYWs7Y2FzZSA0''@;'; put 'put ''NzY6Y1siIW1hcmdpbnMiXT1LO2JyZWFrO2Nhc2UgMTQ3Om4uU2hlZXRzW3JdfHwobi5TaGVldHNbcl09e30pLEsubmFtZSYmKG4uU2hlZXRzW3JdLkNvZGVOYW1lPUsubmFtZSksKEsuYWJvdmV8fEsubGVmdCkmJihjWyIhb3V0bGluZSJdPXthYm92ZTpLLmFib3ZlLGxlZnQ6Sy5sZWZ0fSk7''@;'; put 'put ''YnJlYWs7Y2FzZSAxMzc6bi5WaWV3c3x8KG4uVmlld3M9W3t9XSksbi5WaWV3c1swXXx8KG4uVmlld3NbMF09e30pLEsuUlRMJiYobi5WaWV3c1swXS5SVEw9ITApO2JyZWFrO2Nhc2UgNDg1OmNhc2UgNjQ6Y2FzZSAxMDUzOmNhc2UgMTUxOmNhc2UgMTUyOmNhc2UgMTc1OmNhc2UgNjQ0OmNh''@;'; put 'put ''c2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3''@;'; put 'put ''OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEw''@;'; put 'put ''MjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTp4PSEwO2JyZWFrO2Nhc2UgMzY6eD0hMTticmVhaztjYXNlIDM3OmgucHVzaChV''@;'; put 'put ''KSx4PSEwO2JyZWFrO2Nhc2UgMzg6aC5wb3AoKSx4PSExO2JyZWFrO2RlZmF1bHQ6aWYoIUMuVCYmKCF4fHxmLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrVS50b1N0cmluZygxNikpfX0sZiksZGVsZXRlIGYuc3VwYm9va3MsZGVsZXRlIGZbIiFyb3ciXSwh''@;'; put 'put ''Y1siIXJlZiJdJiYobC5zLnI8MmU2fHxvJiYoby5lLnI+MHx8by5lLmM+MHx8by5zLnI+MHx8by5zLmM+MCkpJiYoY1siIXJlZiJdPXdlKG98fGwpKSxmLnNoZWV0Um93cyYmY1siIXJlZiJdKXt2YXIgY2U9RGUoY1siIXJlZiJdKTtmLnNoZWV0Um93czw9K2NlLmUuciYmKGNlLmUucj1mLnNo''@;'; put 'put ''ZWV0Um93cy0xLGNlLmUucj5sLmUuciYmKGNlLmUucj1sLmUuciksY2UuZS5yPGNlLnMuciYmKGNlLnMucj1jZS5lLnIpLGNlLmUuYz5sLmUuYyYmKGNlLmUuYz1sLmUuYyksY2UuZS5jPGNlLnMuYyYmKGNlLnMuYz1jZS5lLmMpLGNbIiFmdWxscmVmIl09Y1siIXJlZiJdLGNbIiFyZWYiXT13''@;'; put 'put ''ZShjZSkpfXJldHVybiB5Lmxlbmd0aD4wJiYoY1siIW1lcmdlcyJdPXkpLGxlLmxlbmd0aD4wJiYoY1siIWNvbHMiXT1sZSkscmUubGVuZ3RoPjAmJihjWyIhcm93cyJdPXJlKSxjfShlLGEscixuLGkscyxmKTpmdW5jdGlvbiB2dihlLHQscixhLG4saSxzKXtpZighZSlyZXR1cm4gZTthfHwo''@;'; put 'put ''YT17IiFpZCI6e319KSxudWxsIT16ZSYmbnVsbD09dC5kZW5zZSYmKHQuZGVuc2U9emUpO3ZhciBmPXQuZGVuc2U/W106e30sYz17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxvPSIiLGw9IiIsaD1lLm1hdGNoKGZ2KTtoPyhvPWUuc2xpY2UoMCxoLmluZGV4KSxsPWUuc2xpY2UoaC5p''@;'; put 'put ''bmRleCtoWzBdLmxlbmd0aCkpOm89bD1lO3ZhciB4PW8ubWF0Y2goUGYpO3g/TG4oeFswXSwwLG4scik6KHg9by5tYXRjaCh4dikpJiZmdW5jdGlvbiBtdihlLHQscixhLG4pe0xuKGUuc2xpY2UoMCxlLmluZGV4T2YoIj4iKSksMCxhLG4pfSh4WzBdLDAsMCxuLHIpO3ZhciBkPShvLm1hdGNo''@;'; put 'put ''KC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGQ+MCl7dmFyIHY9by5zbGljZShkLGQrNTApLm1hdGNoKG92KTt2JiZmdW5jdGlvbiBpdihlLHQpe3ZhciByPURlKHQpO3Iucy5yPD1yLmUuciYmci5zLmM8PXIuZS5jJiZyLnMucj49MCYmci5zLmM+PTAmJihl''@;'; put 'put ''WyIhcmVmIl09d2UocikpfShmLHZbMV0pfXZhciB1PW8ubWF0Y2goZHYpO3UmJnVbMV0mJmZ1bmN0aW9uIE92KGUsdCl7dC5WaWV3c3x8KHQuVmlld3M9W3t9XSksKGUubWF0Y2goRHYpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBuPW1lKHIpO3QuVmlld3NbYV18fCh0LlZpZXdz''@;'; put 'put ''W2FdPXt9KSwrbi56b29tU2NhbGUmJih0LlZpZXdzW2FdLnpvb209K24uem9vbVNjYWxlKSxXZShuLnJpZ2h0VG9MZWZ0KSYmKHQuVmlld3NbYV0uUlRMPSEwKX0pfSh1WzFdLG4pO3ZhciBwPVtdO2lmKHQuY2VsbFN0eWxlcyl7dmFyIGs9by5tYXRjaChsdik7ayYmZnVuY3Rpb24gRnYoZSx0''@;'; put 'put ''KXtmb3IodmFyIHI9ITEsYT0wO2EhPXQubGVuZ3RoOysrYSl7dmFyIG49bWUodFthXSwhMCk7bi5oaWRkZW4mJihuLmhpZGRlbj1XZShuLmhpZGRlbikpO3ZhciBpPXBhcnNlSW50KG4ubWluLDEwKS0xLHM9cGFyc2VJbnQobi5tYXgsMTApLTE7Zm9yKG4ub3V0bGluZUxldmVsJiYobi5sZXZl''@;'; put 'put ''bD0rbi5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBuLm1pbixkZWxldGUgbi5tYXgsbi53aWR0aD0rbi53aWR0aCwhciYmbi53aWR0aCYmKHI9ITAsQW4obi53aWR0aCkpLEt0KG4pO2k8PXM7KWVbaSsrXT1NZShuKX19KHAsayl9aCYmTnYoaFsxXSxmLHQsYyxpLHMpO3ZhciBUPWwubWF0Y2go''@;'; put 'put ''dXYpO1QmJihmWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIEF2KGUpe3JldHVybntyZWY6KGUubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oVFswXSkpO3ZhciBnPVtdLE49bC5tYXRjaChzdik7aWYoTilmb3IoZD0wO2QhPU4ubGVuZ3RoOysrZClnW2RdPURlKE5bZF0uc2xpY2Uo''@;'; put 'put ''TltkXS5pbmRleE9mKCciJykrMSkpO3ZhciBNPWwubWF0Y2goY3YpO00mJmZ1bmN0aW9uIEV2KGUsdCxyKXtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShlKSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT1tZShCZSh0W25dKSwhMCk7aWYoIWkucmVmKXJldHVybjt2YXIgcz0oKHJ8fHt9KVsi''@;'; put 'put ''IWlkIl18fFtdKVtpLmlkXTtzPyhpLlRhcmdldD1zLlRhcmdldCxpLmxvY2F0aW9uJiYoaS5UYXJnZXQrPSIjIitJZShpLmxvY2F0aW9uKSkpOihpLlRhcmdldD0iIyIrSWUoaS5sb2NhdGlvbikscz17VGFyZ2V0OmkuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGkuUmVsPXMsaS50''@;'; put 'put ''b29sdGlwJiYoaS5Ub29sdGlwPWkudG9vbHRpcCxkZWxldGUgaS50b29sdGlwKTtmb3IodmFyIGY9RGUoaS5yZWYpLGM9Zi5zLnI7Yzw9Zi5lLnI7KytjKWZvcih2YXIgbz1mLnMuYztvPD1mLmUuYzsrK28pe3ZhciBsPWdlKHtjOm8scjpjfSk7YT8oZVtjXXx8KGVbY109W10pLGVbY11bb118''@;'; put 'put ''fChlW2NdW29dPXt0OiJ6Iix2OnZvaWQgMH0pLGVbY11bb10ubD1pKTooZVtsXXx8KGVbbF09e3Q6InoiLHY6dm9pZCAwfSksZVtsXS5sPWkpfX19KGYsTSxhKTt2YXIgST1sLm1hdGNoKGh2KTtpZihJJiYoZlsiIW1hcmdpbnMiXT1mdW5jdGlvbiBUdihlKXt2YXIgdD17fTtyZXR1cm5bImxl''@;'; put 'put ''ZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXSYmKHRbcl09cGFyc2VGbG9hdChlW3JdKSl9KSx0fShtZShJWzBdKSkpLCFmWyIhcmVmIl0mJmMuZS5jPj1jLnMuYyYmYy5lLnI+PWMucy5yJiYoZlsiIXJlZiJdPXdl''@;'; put 'put ''KGMpKSx0LnNoZWV0Um93cz4wJiZmWyIhcmVmIl0pe3ZhciB5PURlKGZbIiFyZWYiXSk7dC5zaGVldFJvd3M8PSt5LmUuciYmKHkuZS5yPXQuc2hlZXRSb3dzLTEseS5lLnI+Yy5lLnImJih5LmUucj1jLmUucikseS5lLnI8eS5zLnImJih5LnMucj15LmUucikseS5lLmM+Yy5lLmMmJih5LmUu''@;'; put 'put ''Yz1jLmUuYykseS5lLmM8eS5zLmMmJih5LnMuYz15LmUuYyksZlsiIWZ1bGxyZWYiXT1mWyIhcmVmIl0sZlsiIXJlZiJdPXdlKHkpKX1yZXR1cm4gcC5sZW5ndGg+MCYmKGZbIiFjb2xzIl09cCksZy5sZW5ndGg+MCYmKGZbIiFtZXJnZXMiXT1nKSxmfShlLGEscixuLGkscyxmKX12YXIgR2Es''@;'; put 'put ''emY9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZywkZj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIFpyKGUsdCl7dmFyIHI9ZS5zcGxpdCgvXHMrLyksYT1bXTtpZih0fHwoYVswXT1y''@;'; put 'put ''WzBdKSwxPT09ci5sZW5ndGgpcmV0dXJuIGE7dmFyIGkscyxjLG49ZS5tYXRjaCh6Zik7aWYobilmb3IoYz0wO2MhPW4ubGVuZ3RoOysrYyktMT09PShzPShpPW5bY10ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP2FbaVsxXV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpOmFbInht''@;'; put 'put ''bG5zOiI9PT1pWzFdLnNsaWNlKDAsNik/InhtbG5zIitpWzFdLnNsaWNlKDYpOmlbMV0uc2xpY2UocysxKV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpO3JldHVybiBhfWZ1bmN0aW9uIEhwKGUpe3ZhciByPXt9O2lmKDE9PT1lLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHI7dmFy''@;'; put 'put ''IG4saSxmLGE9ZS5tYXRjaCh6Zik7aWYoYSlmb3IoZj0wO2YhPWEubGVuZ3RoOysrZiktMT09PShpPShuPWFbZl0ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP3JbblsxXV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpOnJbInhtbG5zOiI9PT1uWzFdLnNsaWNlKDAsNik/InhtbG5z''@;'; put 'put ''IituWzFdLnNsaWNlKDYpOm5bMV0uc2xpY2UoaSsxKV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpO3JldHVybiByfWZ1bmN0aW9uIFhwKGUsdCxyLGEpe3ZhciBuPWE7c3dpdGNoKChyWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4i''@;'; put 'put ''Om49V2UoYSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOm49cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6bj1wYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6bj1YZShhKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6''@;'; put 'put ''Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IityWzBdKX1lW0llKHQpXT1ufWZ1bmN0aW9uIHpwKGUsdCxyKXtpZihyLmNlbGxTdHlsZXMmJnQuSW50ZXJpb3Ipe3ZhciBhPXQuSW50ZXJp''@;'; put 'put ''b3I7YS5QYXR0ZXJuJiYoYS5wYXR0ZXJuVHlwZT1uMVthLlBhdHRlcm5dfHxhLlBhdHRlcm4pfWVbdC5JRF09dH1mdW5jdGlvbiAkcChlLHQscixhLG4saSxzLGYsYyxvKXt2YXIgbD0iR2VuZXJhbCIsaD1hLlN0eWxlSUQseD17fTtvPW98fHt9O3ZhciBkPVtdLHY9MDtmb3Iodm9pZCAwPT09''@;'; put 'put ''aCYmZiYmKGg9Zi5TdHlsZUlEKSx2b2lkIDA9PT1oJiZzJiYoaD1zLlN0eWxlSUQpO3ZvaWQgMCE9PWlbaF0mJihpW2hdLm5mJiYobD1pW2hdLm5mKSxpW2hdLkludGVyaW9yJiZkLnB1c2goaVtoXS5JbnRlcmlvciksaVtoXS5QYXJlbnQpOyloPWlbaF0uUGFyZW50O3N3aXRjaChyLlR5cGUp''@;'; put 'put ''e2Nhc2UiQm9vbGVhbiI6YS50PSJiIixhLnY9V2UoZSk7YnJlYWs7Y2FzZSJTdHJpbmciOmEudD0icyIsYS5yPUJpKEllKGUpKSxhLnY9ZS5pbmRleE9mKCI8Iik+LTE/SWUodHx8ZSkucmVwbGFjZSgvPC4qPz4vZywiIik6YS5yO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9ZS5zbGljZSgt''@;'; put 'put ''MSkmJihlKz0iWiIpLGEudj0oWGUoZSktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxhLnYhPWEudj9hLnY9SWUoZSk6YS52PDYwJiYoYS52PWEudi0xKSwoIWx8fCJHZW5lcmFsIj09bCkmJihsPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWEudiYm''@;'; put 'put ''KGEudj0rZSksYS50fHwoYS50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6YS50PSJlIixhLnY9ZHNbZV0sITEhPT1vLmNlbGxUZXh0JiYoYS53PWUpO2JyZWFrO2RlZmF1bHQ6IiI9PWUmJiIiPT10P2EudD0ieiI6KGEudD0icyIsYS52PUJpKHR8fGUpKX1pZihmdW5jdGlvbiBHcChlLHQscil7''@;'; put 'put ''aWYoInoiIT09ZS50KXtpZighcnx8ITEhPT1yLmNlbGxUZXh0KXRyeXtlLnc9ImUiPT09ZS50P2Uud3x8eHRbZS52XToiR2VuZXJhbCI9PT10PyJuIj09PWUudD8oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTpOdChlLnYpOmZ1bmN0aW9uIFZwKGUsdCl7dmFyIHI9R2Fb''@;'; put 'put ''ZV18fEllKGUpO3JldHVybiJHZW5lcmFsIj09PXI/TnQodCk6UnIocix0KX0odHx8IkdlbmVyYWwiLGUudil9Y2F0Y2goaSl7aWYoci5XVEYpdGhyb3cgaX10cnl7dmFyIGE9R2FbdF18fHR8fCJHZW5lcmFsIjtpZihyLmNlbGxORiYmKGUuej1hKSxyLmNlbGxEYXRlcyYmIm4iPT1lLnQmJmJ0''@;'; put 'put ''KGEpKXt2YXIgbj1rdChlLnYpO24mJihlLnQ9ImQiLGUudj1uZXcgRGF0ZShuLnksbi5tLTEsbi5kLG4uSCxuLk0sbi5TLG4udSkpfX1jYXRjaChpKXtpZihyLldURil0aHJvdyBpfX19KGEsbCxvKSwhMSE9PW8uY2VsbEZvcm11bGEpaWYoYS5Gb3JtdWxhKXt2YXIgdT1JZShhLkZvcm11bGEp''@;'; put 'put ''OzYxPT11LmNoYXJDb2RlQXQoMCkmJih1PXUuc2xpY2UoMSkpLGEuZj11YSh1LG4pLGRlbGV0ZSBhLkZvcm11bGEsIlJDIj09YS5BcnJheVJhbmdlP2EuRj11YSgiUkM6UkMiLG4pOmEuQXJyYXlSYW5nZSYmKGEuRj11YShhLkFycmF5UmFuZ2UsbiksYy5wdXNoKFtEZShhLkYpLGEuRl0pKX1l''@;'; put 'put ''bHNlIGZvcih2PTA7djxjLmxlbmd0aDsrK3Ypbi5yPj1jW3ZdWzBdLnMuciYmbi5yPD1jW3ZdWzBdLmUuciYmbi5jPj1jW3ZdWzBdLnMuYyYmbi5jPD1jW3ZdWzBdLmUuYyYmKGEuRj1jW3ZdWzFdKTtvLmNlbGxTdHlsZXMmJihkLmZvckVhY2goZnVuY3Rpb24ocCl7IXgucGF0dGVyblR5cGUm''@;'; put 'put ''JnAucGF0dGVyblR5cGUmJih4LnBhdHRlcm5UeXBlPXAucGF0dGVyblR5cGUpfSksYS5zPXgpLHZvaWQgMCE9PWEuU3R5bGVJRCYmKGEuaXhmZT1hLlN0eWxlSUQpfWZ1bmN0aW9uIGpwKGUpe2UudD1lLnZ8fCIiLGUudD1lLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2cs''@;'; put 'put ''IlxuIiksZS52PWUudz1lLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIE1uKGUsdCl7dmFyIHI9dHx8e307dGEoKTt2YXIgYT1RdChZMChlKSk7KCJiaW5hcnkiPT1yLnR5cGV8fCJhcnJheSI9PXIudHlwZXx8ImJhc2U2NCI9PXIudHlwZSkmJihhPXR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2Rl''@;'; put 'put ''KDY1MDAxLHQwKGEpKTpCZShhKSk7dmFyIG49YS5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksaT0hMTtpZigoMTAyMyYobj1uLnJlcGxhY2UoLyIuKj8iL2csIiIpKS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmbi5pbmRleE9mKCIsIiksMTAyMyZuLmluZGV4T2YoIjsiKSkpe3Zh''@;'; put 'put ''ciBzPU1lKHIpO3JldHVybiBzLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2soYSxzKX1pZigtMT09bi5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHFlKXtuLmluZGV4T2Yo''@;'; put 'put ''IjwiK3FlKT49MCYmKGk9ITApfSksaSlyZXR1cm4gZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm1hdGNoKC88dGFibGVbXHNcU10qPz5bXHNcU10qPzxcL3RhYmxlPi9naSk7aWYoIXJ8fDA9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8''@;'; put 'put ''dGFibGU+Iik7aWYoMT09ci5sZW5ndGgpcmV0dXJuIEZ0KEpmKHJbMF0sdCksdCk7dmFyIGE9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7ZWkoYSxKZihuLHQpLCJTaGVldCIrKGkrMSkpfSksYX0oYSxyKTtHYT17IkdlbmVyYWwgTnVt''@;'; put 'put ''YmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6cGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOnBlWzE1XSwiU2hvcnQgRGF0ZSI6cGVbMTRdLCJMb25nIFRpbWUiOnBlWzE5XSwiTWVkaXVtIFRpbWUiOnBlWzE4XSwiU2hvcnQgVGltZSI6''@;'; put 'put ''cGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOnBlWzJdLFN0YW5kYXJkOnBlWzRdLFBlcmNlbnQ6cGVbMTBdLFNjaWVudGlmaWM6cGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUi''@;'; put 'put ''OyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfTt2YXIgZixvLGM9W107bnVsbCE9emUmJm51bGw9PXIuZGVuc2UmJihyLmRlbnNlPXplKTt2YXIgdWUsbD17fSxoPVtdLHg9ci5kZW5zZT9bXTp7fSxkPSIiLHY9e30sdT17fSxwPVpyKCc8RGF0YSBzczpU''@;'; put 'put ''eXBlPSJTdHJpbmciPicpLGs9MCxUPTAsZz0wLE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTT17fSxJPXt9LHk9IiIsUD0wLFI9W10sVj17fSxYPXt9LGI9MCxlZT1bXSxsZT1bXSxyZT17fSxkZT1bXSxGZT0hMSxjZT1bXSx4ZT1bXSxLPXt9LEM9MCxVPTAsTz17U2hlZXRzOltd''@;'; put 'put ''LFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sRD17fTt5YS5sYXN0SW5kZXg9MCxhPWEucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgaj0iIjtmPXlhLmV4ZWMoYSk7KXN3aXRjaChmWzNdPShqPWZbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEi''@;'; put 'put ''PT1qKXtpZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYmYy5wdXNoKFtmWzNdLCEwXSk7YnJlYWt9aWYoY1tjLmxlbmd0aC0x''@;'; put 'put ''XVsxXSlicmVhazsiLyI9PT1mWzFdPyRwKGEuc2xpY2UoayxmLmluZGV4KSx5LHAsImNvbW1lbnQiPT1jW2MubGVuZ3RoLTFdWzBdP3JlOnYse2M6VCxyOmd9LE0sZGVbVF0sdSxjZSxyKTooeT0iIixwPVpyKGZbMF0pLGs9Zi5pbmRleCtmWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjpp''@;'; put 'put ''ZigiLyI9PT1mWzFdKWlmKGxlLmxlbmd0aD4wJiYodi5jPWxlKSwoIXIuc2hlZXRSb3dzfHxyLnNoZWV0Um93cz5nKSYmdm9pZCAwIT09di52JiYoci5kZW5zZT8oeFtnXXx8KHhbZ109W10pLHhbZ11bVF09dik6eFtIZShUKStLZShnKV09diksdi5IUmVmJiYodi5sPXtUYXJnZXQ6SWUodi5I''@;'; put 'put ''UmVmKX0sdi5IUmVmU2NyZWVuVGlwJiYodi5sLlRvb2x0aXA9di5IUmVmU2NyZWVuVGlwKSxkZWxldGUgdi5IUmVmLGRlbGV0ZSB2LkhSZWZTY3JlZW5UaXApLCh2Lk1lcmdlQWNyb3NzfHx2Lk1lcmdlRG93bikmJihDPVQrKDB8cGFyc2VJbnQodi5NZXJnZUFjcm9zcywxMCkpLFU9ZysoMHxw''@;'; put 'put ''YXJzZUludCh2Lk1lcmdlRG93biwxMCkpLFIucHVzaCh7czp7YzpULHI6Z30sZTp7YzpDLHI6VX19KSksci5zaGVldFN0dWJzKWlmKHYuTWVyZ2VBY3Jvc3N8fHYuTWVyZ2VEb3duKXtmb3IodmFyIHNlPVQ7c2U8PUM7KytzZSlmb3IodmFyIFo9ZztaPD1VOysrWikoc2U+VHx8Wj5nKSYmKHIu''@;'; put 'put ''ZGVuc2U/KHhbWl18fCh4W1pdPVtdKSx4W1pdW3NlXT17dDoieiJ9KTp4W0hlKHNlKStLZShaKV09e3Q6InoifSk7VD1DKzF9ZWxzZSsrVDtlbHNlIHYuTWVyZ2VBY3Jvc3M/VD1DKzE6KytUO2Vsc2Uodj1IcChmWzBdKSkuSW5kZXgmJihUPSt2LkluZGV4LTEpLFQ8Ti5zLmMmJihOLnMuYz1U''@;'; put 'put ''KSxUPk4uZS5jJiYoTi5lLmM9VCksIi8+Ij09PWZbMF0uc2xpY2UoLTIpJiYrK1QsbGU9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PWZbMV18fCIvPiI9PT1mWzBdLnNsaWNlKC0yKT8oZzxOLnMuciYmKE4ucy5yPWcpLGc+Ti5lLnImJihOLmUucj1nKSwiLz4iPT09ZlswXS5zbGljZSgtMikm''@;'; put 'put ''Jih1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksVD0wLCsrZyk6KCh1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksSz17fSwoIjAiPT11LkF1dG9GaXRIZWlnaHR8fHUuSGVpZ2h0KSYmKEsuaHB4PXBhcnNlSW50KHUuSGVpZ2h0LDEwKSxLLmhwdD1CYShLLmhweCks''@;'; put 'put ''eGVbZ109SyksIjEiPT11LkhpZGRlbiYmKEsuaGlkZGVuPSEwLHhlW2ddPUspKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKTtoLnB1c2goZCksTi5z''@;'; put 'put ''LnI8PU4uZS5yJiZOLnMuYzw9Ti5lLmMmJih4WyIhcmVmIl09d2UoTiksci5zaGVldFJvd3MmJnIuc2hlZXRSb3dzPD1OLmUuciYmKHhbIiFmdWxscmVmIl09eFsiIXJlZiJdLE4uZS5yPXIuc2hlZXRSb3dzLTEseFsiIXJlZiJdPXdlKE4pKSksUi5sZW5ndGgmJih4WyIhbWVyZ2VzIl09Uiks''@;'; put 'put ''ZGUubGVuZ3RoPjAmJih4WyIhY29scyJdPWRlKSx4ZS5sZW5ndGg+MCYmKHhbIiFyb3dzIl09eGUpLGxbZF09eH1lbHNlIE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sZz1UPTAsYy5wdXNoKFtmWzNdLCExXSksbz1acihmWzBdKSxkPUllKG8uTmFtZSkseD1yLmRlbnNlP1tdOnt9''@;'; put 'put ''LFI9W10sY2U9W10seGU9W10sTy5TaGVldHMucHVzaChEPXtuYW1lOmQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2V7aWYoIi8+''@;'; put 'put ''Ij09ZlswXS5zbGljZSgtMikpYnJlYWs7Yy5wdXNoKFtmWzNdLCExXSksZGU9W10sRmU9ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09ZlsxXT96cChNLEkscik6ST1acihmWzBdKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6SS5uZj1JZShacihmWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiks''@;'; put 'put ''R2FbSS5uZl0mJihJLm5mPUdhW0kubmZdKTtmb3IodmFyIFE9MDszOTIhPVEmJnBlW1FdIT1JLm5mOysrUSk7aWYoMzkyPT1RKWZvcihRPTU3OzM5MiE9UTsrK1EpaWYobnVsbD09cGVbUV0pe2V0KEkubmYsUSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1jW2MubGVu''@;'; put 'put ''Z3RoLTFdWzBdKWJyZWFrO2lmKCh1ZT1acihmWzBdKSkuSGlkZGVuJiYodWUuaGlkZGVuPSEwLGRlbGV0ZSB1ZS5IaWRkZW4pLHVlLldpZHRoJiYodWUud3B4PXBhcnNlSW50KHVlLldpZHRoLDEwKSksIUZlJiZ1ZS53cHg+MTApe0ZlPSEwLHdyPWxmO2Zvcih2YXIgWT0wO1k8ZGUubGVuZ3Ro''@;'; put 'put ''OysrWSlkZVtZXSYmS3QoZGVbWV0pfUZlJiZLdCh1ZSksZGVbdWUuSW5kZXgtMXx8ZGUubGVuZ3RoXT11ZTtmb3IodmFyIEVlPTA7RWU8K3VlLlNwYW47KytFZSlkZVtkZS5sZW5ndGhdPU1lKHVlKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PWZbMV0pYnJlYWs7Ty5OYW1lc3x8''@;'; put 'put ''KE8uTmFtZXM9W10pO3ZhciBBPW1lKGZbMF0pLFBlPXtOYW1lOkEuTmFtZSxSZWY6dWEoQS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtPLlNoZWV0cy5sZW5ndGg+MCYmKFBlLlNoZWV0PU8uU2hlZXRzLmxlbmd0aC0xKSxPLk5hbWVzLnB1c2goUGUpO2JyZWFrO2Nhc2UibmFtZWRj''@;'; put 'put ''ZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlImFsaWdubWVudCI6Y2FzZSJib3JkZXJzIjpjYXNlImJvcmRlciI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFn''@;'; put 'put ''cmFwaHMiOmNhc2UibmFtZSI6Y2FzZSJwaXhlbHNwZXJpbmNoIjpjYXNlIm51bGwiOmJyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/eSs9YS5zbGljZShQLGYuaW5kZXgpOlA9Zi5pbmRleCtmWzBdLmxlbmd0aDticmVhaztjYXNlImlu''@;'; put 'put ''dGVyaW9yIjppZighci5jZWxsU3R5bGVzKWJyZWFrO0kuSW50ZXJpb3I9WnIoZlswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNv''@;'; put 'put ''bXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRl''@;'; put 'put ''bnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09ZlswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09ZlsxXT9nbChWLGosYS5zbGljZShiLGYuaW5kZXgpKTpiPWYuaW5kZXgrZlswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlm''@;'; put 'put ''KCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSBjLnB1c2goW2ZbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSk7anAocmUpLGxlLnB1c2gocmUpfWVsc2UgYy5wdXNoKFtmWzNdLCExXSkscmU9e2E6KG89WnIoZlswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVsw''@;'; put 'put ''XSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5ndGgtMikpe3ZhciBBZT1acihmWzBdKTt4WyIhYXV0b2ZpbHRlciJdPXtyZWY6dWEoQWUuUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxj''@;'; put 'put ''LnB1c2goW2ZbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYm''@;'; put 'put ''Yy5wdXNoKFtmWzNdLCEwXSk7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUi''@;'; put 'put ''OmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3Jr''@;'; put 'put ''Ym9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKX1lbHNlIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5n''@;'; put 'put ''dGgtMikmJmMucHVzaChbZlszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09Yy5sZW5ndGgmJiJkb2N1bWVudCI9PWZbM118fDA9PWMubGVuZ3RoJiYidW9mIj09ZlszXSlyZXR1cm4gY2MoYSxyKTt2YXIgTGU9ITA7c3dpdGNoKGNbYy5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1l''@;'; put 'put ''bnRzZXR0aW5ncyI6c3dpdGNoKGZbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNl''@;'; put 'put ''InJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNo''@;'; put 'put ''ZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2goZlszXSl7Y2FzZSJkYXRlMTkwNCI6''@;'; put 'put ''Ty5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJv''@;'; put 'put ''dGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0''@;'; put 'put ''IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVk''@;'; put 'put ''c2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2Fz''@;'; put 'put ''ZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztk''@;'; put 'put ''ZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChmWzNdKXtjYXNlInZp''@;'; put 'put ''c2libGUiOmlmKCIvPiIhPT1mWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1mWzFdKXN3aXRjaChhLnNsaWNlKGIsZi5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOkQuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOkQuSGlkZGVuPTJ9ZWxzZSBiPWYuaW5kZXgrZlswXS5sZW5n''@;'; put 'put ''dGg7YnJlYWs7Y2FzZSJoZWFkZXIiOnhbIiFtYXJnaW5zIl18fFl0KHhbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpc05hTigrbWUoZlswXSkuTWFyZ2luKXx8KHhbIiFtYXJnaW5zIl0uaGVhZGVyPSttZShmWzBdKS5NYXJnaW4pO2JyZWFrO2Nhc2UiZm9vdGVyIjp4WyIhbWFyZ2lucyJdfHxZ''@;'; put 'put ''dCh4WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXNOYU4oK21lKGZbMF0pLk1hcmdpbil8fCh4WyIhbWFyZ2lucyJdLmZvb3Rlcj0rbWUoZlswXSkuTWFyZ2luKTticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgQ2U9bWUoZlswXSk7eFsiIW1hcmdpbnMiXXx8WXQoeFsiIW1hcmdpbnMiXT17''@;'; put 'put ''fSwieGxtbCIpLGlzTmFOKCtDZS5Ub3ApfHwoeFsiIW1hcmdpbnMiXS50b3A9K0NlLlRvcCksaXNOYU4oK0NlLkxlZnQpfHwoeFsiIW1hcmdpbnMiXS5sZWZ0PStDZS5MZWZ0KSxpc05hTigrQ2UuUmlnaHQpfHwoeFsiIW1hcmdpbnMiXS5yaWdodD0rQ2UuUmlnaHQpLGlzTmFOKCtDZS5Cb3R0''@;'; put 'put ''b20pfHwoeFsiIW1hcmdpbnMiXS5ib3R0b209K0NlLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOk8uVmlld3N8fChPLlZpZXdzPVtdKSxPLlZpZXdzWzBdfHwoTy5WaWV3c1swXT17fSksTy5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2Fz''@;'; put 'put ''ZSJmcm96ZW5ub3NwbGl0IjpjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjpjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFu''@;'; put 'put ''ZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNl''@;'; put 'put ''ImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93''@;'; put 'put ''dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2Fz''@;'; put 'put ''ZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxs''@;'; put 'put ''b3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXlo''@;'; put 'put ''ZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlv''@;'; put 'put ''biI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6eFsiIW91dGxpbmUiXXx8KHhbIiFvdXRs''@;'; put 'put ''aW5lIl09e30pLHhbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOnhbIiFvdXRsaW5lIl18fCh4WyIhb3V0bGluZSJdPXt9KSx4WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInBpdm90''@;'; put 'put ''dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKGZbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRp''@;'; put 'put ''b24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZp''@;'; put 'put ''ZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6''@;'; put 'put ''Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJl''@;'; put 'put ''ZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2Ui''@;'; put 'put ''dmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKGZbM10pe2Nhc2UiY29sYnJlYWtzIjpj''@;'; put 'put ''YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKGZbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6''@;'; put 'put ''Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKGZbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1h''@;'; put 'put ''dHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJl''@;'; put 'put ''ZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFs''@;'; put 'put ''IjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFz''@;'; put 'put ''dGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNh''@;'; put 'put ''c2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNh''@;'; put 'put ''c2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1h''@;'; put 'put ''dHRpbmciOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVz''@;'; put 'put ''c2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZh''@;'; put 'put ''bHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKGZbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxk''@;'; put 'put ''IjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJp''@;'; put 'put ''YnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1pZihMZXx8ZlszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZighY1tjLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6''@;'; put 'put ''ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09Y1tjLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/WHAoWCxqLGVlLGEuc2xpY2UoYixmLmluZGV4KSk6KGVlPWYsYj1mLmlu''@;'; put 'put ''ZGV4K2ZbMF0ubGVuZ3RoKTticmVha31pZihyLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpfXZhciBvZT17fTtyZXR1cm4hci5ib29rU2hlZXRzJiYhci5ib29rUHJvcHMmJihvZS5TaGVldHM9bCksb2UuU2hlZXROYW1lcz1oLG9lLldvcmtib29r''@;'; put 'put ''PU8sb2UuU1NGPU1lKHBlKSxvZS5Qcm9wcz1WLG9lLkN1c3Rwcm9wcz1YLG9lfWZ1bmN0aW9uIFVuKGUsdCl7c3dpdGNoKCRuKHQ9dHx8e30pLHQudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTW4oT3IoZSksdCk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZp''@;'; put 'put ''bGUiOnJldHVybiBNbihlLHQpO2Nhc2UiYXJyYXkiOnJldHVybiBNbih3dChlKSx0KX19dmFyIGZtPVs2MCwxMDg0LDIwNjYsMjE2NSwyMTc1XTtmdW5jdGlvbiBjbShlLHQscixhLG4pe3ZhciBpPWEscz1bXSxmPXIuc2xpY2Uoci5sLHIubCtpKTtpZihuJiZuLmVuYyYmbi5lbmMuaW5zaXR1''@;'; put 'put ''JiZmLmxlbmd0aD4wKXN3aXRjaChlKXtjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAxMDMzOmNhc2UgMjA1NzpjYXNlIDQ3OmNhc2UgNDA1OmNhc2UgMjI1OmNhc2UgNDA2OmNhc2UgMzEyOmNhc2UgNDA0OmNhc2UgMTA6Y2FzZSAxMzM6YnJlYWs7ZGVmYXVsdDpuLmVuYy5pbnNpdHUoZil9cy5wdXNo''@;'; put 'put ''KGYpLHIubCs9aTtmb3IodmFyIGM9dXQocixyLmwpLG89V25bY10sbD0wO251bGwhPW8mJmZtLmluZGV4T2YoYyk+LTE7KWk9dXQocixyLmwrMiksbD1yLmwrNCwyMDY2PT1jP2wrPTQ6KDIxNjU9PWN8fDIxNzU9PWMpJiYobCs9MTIpLGY9ci5zbGljZShsLHIubCs0K2kpLHMucHVzaChmKSxy''@;'; put 'put ''LmwrPTQraSxvPVduW2M9dXQocixyLmwpXTt2YXIgaD1mcihzKTtocihoLDApO3ZhciB4PTA7aC5sZW5zPVtdO2Zvcih2YXIgZD0wO2Q8cy5sZW5ndGg7KytkKWgubGVucy5wdXNoKHgpLHgrPXNbZF0ubGVuZ3RoO2lmKGgubGVuZ3RoPGEpdGhyb3ciWExTIFJlY29yZCAweCIrZS50b1N0cmlu''@;'; put 'put ''ZygxNikrIiBUcnVuY2F0ZWQ6ICIraC5sZW5ndGgrIiA8ICIrYTtyZXR1cm4gdC5mKGgsaC5sZW5ndGgsbil9ZnVuY3Rpb24gaXQoZSx0LHIpe2lmKCJ6IiE9PWUudCYmZS5YRil7dmFyIGE9MDt0cnl7YT1lLnp8fGUuWEYubnVtRm10SWR8fDAsdC5jZWxsTkYmJihlLno9cGVbYV0pfWNhdGNo''@;'; put 'put ''KGkpe2lmKHQuV1RGKXRocm93IGl9aWYoIXR8fCExIT09dC5jZWxsVGV4dCl0cnl7ZS53PSJlIj09PWUudD9lLnd8fHh0W2Uudl06MD09PWF8fCJHZW5lcmFsIj09YT8ibiI9PT1lLnQ/KDB8ZS52KT09PWUudj9lLnYudG9TdHJpbmcoMTApOmthKGUudik6TnQoZS52KTpScihhLGUudix7ZGF0''@;'; put 'put ''ZTE5MDQ6ISFyLGRhdGVORjp0JiZ0LmRhdGVORn0pfWNhdGNoKGkpe2lmKHQuV1RGKXRocm93IGl9aWYodC5jZWxsRGF0ZXMmJmEmJiJuIj09ZS50JiZidChwZVthXXx8U3RyaW5nKGEpKSl7dmFyIG49a3QoZS52KTtuJiYoZS50PSJkIixlLnY9bmV3IERhdGUobi55LG4ubS0xLG4uZCxuLkgs''@;'; put 'put ''bi5NLG4uUyxuLnUpKX19fWZ1bmN0aW9uIE8wKGUsdCxyKXtyZXR1cm57djplLGl4ZmU6dCx0OnJ9fXZhciB6YT17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5''@;'; put 'put ''Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gS2YoZSx0KXt2YXIgcixhLG4saTtpZih0fHwodD17fSksJG4odCkscjAoKSx0LmNvZGVwYWdlJiZlMCh0LmNvZGVwYWdlKSxlLkZ1bGxQYXRocyl7aWYodmUuZmluZChlLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBw''@;'; put 'put ''YXNzd29yZC1wcm90ZWN0ZWQiKTtyPXZlLmZpbmQoZSwiIUNvbXBPYmoiKSxhPXZlLmZpbmQoZSwiL1dvcmtib29rIil8fHZlLmZpbmQoZSwiL0Jvb2siKX1lbHNle3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjplPUlyKE9yKGUpKTticmVhaztjYXNlImJpbmFyeSI6ZT1JcihlKTticmVh''@;'; put 'put ''aztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWhyKGUsMCksYT17Y29udGVudDplfX1pZihyJiZmdW5jdGlvbiBzbShlKXt2YXIgdD17fSxyPWUuY29udGVudDtpZihyLmw9MjgsdC5BbnNp''@;'; put 'put ''VXNlclR5cGU9ci5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSx0LkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIGxzKGUsMSl9KHIpLHIubGVuZ3RoLXIubDw9NClyZXR1cm4gdDt2YXIgYT1yLnJlYWRfc2hpZnQoNCk7aWYoMD09YXx8YT40MHx8KHIubC09NCx0''@;'; put 'put ''LlJlc2VydmVkMT1yLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHIubGVuZ3RoLXIubDw9NCl8fDE5MDc1MDU2NTIhPT0oYT1yLnJlYWRfc2hpZnQoNCkpfHwodC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIFpvKGUpe3JldHVybiBscyhlLDIpfShyKSwwPT0oYT1yLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpfHxhPjQwKSlyZXR1cm4gdDtyLmwtPTQsdC5SZXNlcnZlZDI9ci5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShyKSx0LmJvb2tQcm9wcyYmIXQuYm9va1NoZWV0cyluPXt9O2Vsc2V7dmFyIHM9U2U/ImJ1ZmZlciI6ImFycmF5IjtpZihhJiZhLmNvbnRlbnQpbj1mdW5jdGlvbiBv''@;'; put 'put ''bShlLHQpe3ZhciByPXtvcHRzOnt9fSxhPXt9O251bGwhPXplJiZudWxsPT10LmRlbnNlJiYodC5kZW5zZT16ZSk7dmFyIGgsZCx1LHAsZyxOLG49dC5kZW5zZT9bXTp7fSxpPXt9LHM9e30sZj1udWxsLGM9W10sbz0iIixsPXt9LHg9IiIsaz17fSxUPVtdLE09W10sST1bXSx5PXtTaGVldHM6''@;'; put 'put ''W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LFA9e30sUj1mdW5jdGlvbih5ZSl7cmV0dXJuIHllPDg/VnRbeWVdOnllPDY0JiZJW3llLThdfHxWdFt5ZV19LFg9ZnVuY3Rpb24oeWUsWmUsS3Ipe2lmKCEoSz4xfHxLci5zaGVldFJvd3MmJnllLnI+PUtyLnNoZWV0Um93cykp''@;'; put 'put ''e2lmKEtyLmNlbGxTdHlsZXMmJlplLlhGJiZaZS5YRi5kYXRhJiZmdW5jdGlvbih5ZSxaZSxLcil7dmFyIHF0LHNyPVplLlhGLmRhdGE7c3ImJnNyLnBhdHRlcm5UeXBlJiZLciYmS3IuY2VsbFN0eWxlcyYmKFplLnM9e30sWmUucy5wYXR0ZXJuVHlwZT1zci5wYXR0ZXJuVHlwZSwocXQ9YmEo''@;'; put 'put ''Uihzci5pY3ZGb3JlKSkpJiYoWmUucy5mZ0NvbG9yPXtyZ2I6cXR9KSwocXQ9YmEoUihzci5pY3ZCYWNrKSkpJiYoWmUucy5iZ0NvbG9yPXtyZ2I6cXR9KSl9KDAsWmUsS3IpLGRlbGV0ZSBaZS5peGZlLGRlbGV0ZSBaZS5YRixoPXllLHg9Z2UoeWUpLCghc3x8IXMuc3x8IXMuZSkmJihzPXtz''@;'; put 'put ''OntyOjAsYzowfSxlOntyOjAsYzowfX0pLHllLnI8cy5zLnImJihzLnMucj15ZS5yKSx5ZS5jPHMucy5jJiYocy5zLmM9eWUuYykseWUucisxPnMuZS5yJiYocy5lLnI9eWUucisxKSx5ZS5jKzE+cy5lLmMmJihzLmUuYz15ZS5jKzEpLEtyLmNlbGxGb3JtdWxhJiZaZS5mKWZvcih2YXIgc3I9''@;'; put 'put ''MDtzcjxULmxlbmd0aDsrK3NyKWlmKCEoVFtzcl1bMF0ucy5jPnllLmN8fFRbc3JdWzBdLnMucj55ZS5yfHxUW3NyXVswXS5lLmM8eWUuY3x8VFtzcl1bMF0uZS5yPHllLnIpKXtaZS5GPXdlKFRbc3JdWzBdKSwoVFtzcl1bMF0ucy5jIT15ZS5jfHxUW3NyXVswXS5zLnIhPXllLnIpJiZkZWxl''@;'; put 'put ''dGUgWmUuZixaZS5mJiYoWmUuZj0iIitrcihUW3NyXVsxXSwwLHllLGNlLGIpKTticmVha31Lci5kZW5zZT8oblt5ZS5yXXx8KG5beWUucl09W10pLG5beWUucl1beWUuY109WmUpOm5beF09WmV9fSxiPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjprLGFycmF5ZjpULHJydGFi''@;'; put 'put ''aWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIXQmJiEhdC5jZWxsU3R5bGVzLFdURjohIXQmJiEhdC53dGZ9O3QucGFzc3dvcmQmJihiLnBhc3N3b3JkPXQucGFzc3dvcmQpO3ZhciBlZSxsZT1bXSxyZT1bXSxkZT1bXSx1ZT1bXSxG''@;'; put 'put ''ZT0hMSxjZT1bXTtjZS5TaGVldE5hbWVzPWIuc25hbWVzLGNlLnNoYXJlZGY9Yi5zaGFyZWRmLGNlLmFycmF5Zj1iLmFycmF5ZixjZS5uYW1lcz1bXSxjZS5YVEk9W107dmFyIEQseGU9MCxLPTAsQz0wLFU9W10sTz1bXTtiLmNvZGVwYWdlPTEyMDAsTXIoMTIwMCk7Zm9yKHZhciBqPSExO2Uu''@;'; put 'put ''bDxlLmxlbmd0aC0xOyl7dmFyIHNlPWUubCxaPWUucmVhZF9zaGlmdCgyKTtpZigwPT09WiYmMTA9PT14ZSlicmVhazt2YXIgUT1lLmw9PT1lLmxlbmd0aD8wOmUucmVhZF9zaGlmdCgyKSxZPVduW1pdO2lmKFkmJlkuZil7aWYodC5ib29rU2hlZXRzJiYxMzM9PT14ZSYmMTMzIT09WilicmVh''@;'; put 'put ''aztpZih4ZT1aLDI9PT1ZLnJ8fDEyPT1ZLnIpe3ZhciBFZT1lLnJlYWRfc2hpZnQoMik7aWYoUS09MiwhYi5lbmMmJkVlIT09WiYmKCgyNTUmRWUpPDw4fEVlPj44KSE9PVopdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitFZSsiIT0iK1opOzEyPT1ZLnImJihlLmwrPTEwLFEtPTEw''@;'; put 'put ''KX12YXIgQT17fTtpZihBPTEwPT09Wj9ZLmYoZSxRLGIpOmNtKFosWSxlLFEsYiksMD09SyYmLTE9PT1bOSw1MjEsMTAzMywyMDU3XS5pbmRleE9mKHhlKSljb250aW51ZTtzd2l0Y2goWil7Y2FzZSAzNDpyLm9wdHMuRGF0ZTE5MDQ9eS5XQlByb3BzLmRhdGUxOTA0PUE7YnJlYWs7Y2FzZSAx''@;'; put 'put ''MzQ6ci5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIDQ3OmlmKGIuZW5jfHwoZS5sPTApLGIuZW5jPUEsIXQucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PUEudmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0''@;'; put 'put ''aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFBLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSA5MjpiLmxhc3R1c2VyPUE7YnJlYWs7Y2FzZSA2Njp2YXIgUGU9TnVtYmVyKEEpO3N3aXRjaChQZSl7Y2FzZSAyMTAxMDpQZT0xMjAw''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzI3Njg6UGU9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6UGU9MTI1Mn1NcihiLmNvZGVwYWdlPVBlKSxqPSEwO2JyZWFrO2Nhc2UgMzE3OmIucnJ0YWJpZD1BO2JyZWFrO2Nhc2UgMjU6Yi53aW5sb2NrZWQ9QTticmVhaztjYXNlIDQzOTpyLm9wdHMuUmVmcmVzaEFsbD1BO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTI6ci5vcHRzLkNhbGNDb3VudD1BO2JyZWFrO2Nhc2UgMTY6ci5vcHRzLkNhbGNEZWx0YT1BO2JyZWFrO2Nhc2UgMTc6ci5vcHRzLkNhbGNJdGVyPUE7YnJlYWs7Y2FzZSAxMzpyLm9wdHMuQ2FsY01vZGU9QTticmVhaztjYXNlIDE0OnIub3B0cy5DYWxjUHJlY2lzaW9uPUE7''@;'; put 'put ''YnJlYWs7Y2FzZSA5NTpyLm9wdHMuQ2FsY1NhdmVSZWNhbGM9QTticmVhaztjYXNlIDE1OmIuQ2FsY1JlZk1vZGU9QTticmVhaztjYXNlIDIyMTE6ci5vcHRzLkZ1bGxDYWxjPUE7YnJlYWs7Y2FzZSAxMjk6QS5mRGlhbG9nJiYoblsiIXR5cGUiXT0iZGlhbG9nIiksQS5mQmVsb3d8fCgoblsi''@;'; put 'put ''IW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksQS5mUmlnaHR8fCgoblsiIW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIDIyNDpNLnB1c2goQSk7YnJlYWs7Y2FzZSA0MzA6Y2UucHVzaChbQV0pLGNlW2NlLmxlbmd0aC0x''@;'; put 'put ''XS5YVEk9W107YnJlYWs7Y2FzZSAzNTpjYXNlIDU0NzpjZVtjZS5sZW5ndGgtMV0ucHVzaChBKTticmVhaztjYXNlIDI0OmNhc2UgNTM2OkQ9e05hbWU6QS5OYW1lLFJlZjprcihBLnJnY2UsMCxudWxsLGNlLGIpfSxBLml0YWI+MCYmKEQuU2hlZXQ9QS5pdGFiLTEpLGNlLm5hbWVzLnB1c2go''@;'; put 'put ''RCksY2VbMF18fChjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5wdXNoKEEpLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1BLk5hbWUmJkEuaXRhYj4wJiZBLnJnY2UmJkEucmdjZVswXSYmQS5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09QS5yZ2NlWzBdWzBdWzBdJiYo''@;'; put 'put ''T1tBLml0YWItMV09e3JlZjp3ZShBLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSAyMjpiLkV4dGVybkNvdW50PUE7YnJlYWs7Y2FzZSAyMzowPT1jZS5sZW5ndGgmJihjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5YVEk9Y2VbY2UubGVuZ3RoLTFdLlhUSS5j''@;'; put 'put ''b25jYXQoQSksY2UuWFRJPWNlLlhUSS5jb25jYXQoQSk7YnJlYWs7Y2FzZSAyMTk2OmlmKGIuYmlmZjw4KWJyZWFrO251bGwhPUQmJihELkNvbW1lbnQ9QVsxXSk7YnJlYWs7Y2FzZSAxODpuWyIhcHJvdGVjdCJdPUE7YnJlYWs7Y2FzZSAxOTowIT09QSYmYi5XVEYmJmNvbnNvbGUuZXJyb3Io''@;'; put 'put ''IlBhc3N3b3JkIHZlcmlmaWVyOiAiK0EpO2JyZWFrO2Nhc2UgMTMzOmlbQS5wb3NdPUEsYi5zbmFtZXMucHVzaChBLm5hbWUpO2JyZWFrO2Nhc2UgMTA6aWYoLS1LKWJyZWFrO2lmKHMuZSl7aWYocy5lLnI+MCYmcy5lLmM+MCl7aWYocy5lLnItLSxzLmUuYy0tLG5bIiFyZWYiXT13ZShzKSx0''@;'; put 'put ''LnNoZWV0Um93cyYmdC5zaGVldFJvd3M8PXMuZS5yKXt2YXIgQWU9cy5lLnI7cy5lLnI9dC5zaGVldFJvd3MtMSxuWyIhZnVsbHJlZiJdPW5bIiFyZWYiXSxuWyIhcmVmIl09d2Uocykscy5lLnI9QWV9cy5lLnIrKyxzLmUuYysrfWxlLmxlbmd0aD4wJiYoblsiIW1lcmdlcyJdPWxlKSxyZS5s''@;'; put 'put ''ZW5ndGg+MCYmKG5bIiFvYmplY3RzIl09cmUpLGRlLmxlbmd0aD4wJiYoblsiIWNvbHMiXT1kZSksdWUubGVuZ3RoPjAmJihuWyIhcm93cyJdPXVlKSx5LlNoZWV0cy5wdXNoKFApfSIiPT09bz9sPW46YVtvXT1uLG49dC5kZW5zZT9bXTp7fTticmVhaztjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAx''@;'; put 'put ''MDMzOmNhc2UgMjA1NzppZig4PT09Yi5iaWZmJiYoYi5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtaXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0EuQklGRlZlcl18fDgpLGIuYmlmZmd1ZXNzPTA9PUEuQklGRlZlciwwPT1BLkJJRkZWZXImJjQwOTY9PUEu''@;'; put 'put ''ZHQmJihiLmJpZmY9NSxqPSEwLE1yKGIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1iLmJpZmYmJjA9PUEuQklGRlZlciYmMTY9PUEuZHQmJihiLmJpZmY9MiksSysrKWJyZWFrO2lmKG49dC5kZW5zZT9bXTp7fSxiLmJpZmY8OCYmIWomJihqPSEwLE1yKGIuY29kZXBhZ2U9dC5jb2RlcGFnZXx8MTI1''@;'; put 'put ''MikpLGIuYmlmZjw1fHwwPT1BLkJJRkZWZXImJjQwOTY9PUEuZHQpeyIiPT09byYmKG89IlNoZWV0MSIpLHM9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgTGU9e3BvczplLmwtUSxuYW1lOm99O2lbTGUucG9zXT1MZSxiLnNuYW1lcy5wdXNoKG8pfWVsc2Ugbz0oaVtzZV18fHtuYW1l''@;'; put 'put ''OiIifSkubmFtZTszMj09QS5kdCYmKG5bIiF0eXBlIl09ImNoYXJ0IiksNjQ9PUEuZHQmJihuWyIhdHlwZSJdPSJtYWNybyIpLGxlPVtdLHJlPVtdLGIuYXJyYXlmPVQ9W10sZGU9W10sdWU9W10sRmU9ITEsUD17SGlkZGVuOihpW3NlXXx8e2hzOjB9KS5ocyxuYW1lOm99O2JyZWFrO2Nhc2Ug''@;'; put 'put ''NTE1OmNhc2UgMzpjYXNlIDI6ImNoYXJ0Ij09blsiIXR5cGUiXSYmKHQuZGVuc2U/KG5bQS5yXXx8W10pW0EuY106bltnZSh7YzpBLmMscjpBLnJ9KV0pJiYrK0EuYyxnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV18fHt9LHY6QS52YWwsdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2''@;'; put 'put ''M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTpjYXNlIDUxNzpnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV0sdjpBLnZhbCx0OkEudH0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCks''@;'; put 'put ''WCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA2Mzg6Zz17aXhmZTpBLml4ZmUsWEY6TVtBLml4ZmVdLHY6QS5ya251bSx0OiJuIn0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSAx''@;'; put 'put ''ODk6Zm9yKHZhciBDZT1BLmM7Q2U8PUEuQzsrK0NlKXt2YXIgb2U9QS5ya3JlY1tDZS1BLmNdWzBdO2c9e2l4ZmU6b2UsWEY6TVtvZV0sdjpBLnJrcmVjW0NlLUEuY11bMV0sdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6Q2Us''@;'; put 'put ''cjpBLnJ9LGcsdCl9YnJlYWs7Y2FzZSA2OmNhc2UgNTE4OmNhc2UgMTAzMDppZigiU3RyaW5nIj09QS52YWwpe2Y9QTticmVha31pZigoZz1PMChBLnZhbCxBLmNlbGwuaXhmZSxBLnR0KSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEpe3ZhciBxZT1BLmZvcm11bGE7aWYocWUmJnFlWzBd''@;'; put 'put ''JiZxZVswXVswXSYmIlB0Z0V4cCI9PXFlWzBdWzBdWzBdKXt2YXIganI9cWVbMF1bMF1bMV1bMF0sZnQ9cWVbMF1bMF1bMV1bMV0sdnQ9Z2Uoe3I6anIsYzpmdH0pO2tbdnRdP2cuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYik6Zy5GPSgodC5kZW5zZT8obltqcl18fFtdKVtmdF06''@;'; put 'put ''blt2dF0pfHx7fSkuRn1lbHNlIGcuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYil9Qz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWChBLmNlbGwsZyx0KSxmPUE7YnJlYWs7Y2FzZSA3OmNhc2UgNTE5OmlmKCFmKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtmLnZhbD1BLChnPU8wKEEsZi5jZWxsLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEmJihnLmY9IiIra3IoZi5mb3JtdWxhLDAsZi5jZWxsLGNlLGIpKSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChn''@;'; put 'put ''LHQsci5vcHRzLkRhdGUxOTA0KSxYKGYuY2VsbCxnLHQpLGY9bnVsbDticmVhaztjYXNlIDMzOmNhc2UgNTQ1OlQucHVzaChBKTt2YXIgSmE9Z2UoQVswXS5zKTtpZihkPXQuZGVuc2U/KG5bQVswXS5zLnJdfHxbXSlbQVswXS5zLmNdOm5bSmFdLHQuY2VsbEZvcm11bGEmJmQpe2lmKCFmfHwh''@;'; put 'put ''SmF8fCFkKWJyZWFrO2QuZj0iIitrcihBWzFdLDAsQVswXSxjZSxiKSxkLkY9d2UoQVswXSl9YnJlYWs7Y2FzZSAxMjEyOmlmKCF0LmNlbGxGb3JtdWxhKWJyZWFrO2lmKHgpe2lmKCFmKWJyZWFrO2tbZ2UoZi5jZWxsKV09QVswXSwoKGQ9dC5kZW5zZT8obltmLmNlbGwucl18fFtdKVtmLmNl''@;'; put 'put ''bGwuY106bltnZShmLmNlbGwpXSl8fHt9KS5mPSIiK2tyKEFbMF0sMCxoLGNlLGIpfWJyZWFrO2Nhc2UgMjUzOmc9TzAoY1tBLmlzc3RdLnQsQS5peGZlLCJzIiksY1tBLmlzc3RdLmgmJihnLmg9Y1tBLmlzc3RdLmgpLGcuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10p''@;'; put 'put ''LGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTEzOnQuc2hlZXRTdHVicyYmKGc9e2l4ZmU6QS5peGZlLFhGOk1bQS5peGZlXSx0OiJ6In0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7''@;'; put 'put ''YzpBLmMscjpBLnJ9LGcsdCkpO2JyZWFrO2Nhc2UgMTkwOmlmKHQuc2hlZXRTdHVicylmb3IodmFyIE90PUEuYztPdDw9QS5DOysrT3Qpe3ZhciBMcj1BLml4ZmVbT3QtQS5jXTtnPXtpeGZlOkxyLFhGOk1bTHJdLHQ6InoifSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5v''@;'; put 'put ''cHRzLkRhdGUxOTA0KSxYKHtjOk90LHI6QS5yfSxnLHQpfWJyZWFrO2Nhc2UgMjE0OmNhc2UgNTE2OmNhc2UgNDooZz1PMChBLnZhbCxBLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6''@;'; put 'put ''QS5yfSxnLHQpO2JyZWFrO2Nhc2UgMDpjYXNlIDUxMjoxPT09SyYmKHM9QSk7YnJlYWs7Y2FzZSAyNTI6Yz1BO2JyZWFrO2Nhc2UgMTA1NDppZig0PT1iLmJpZmYpe1VbQysrXT1BWzFdO2Zvcih2YXIgcHQ9MDtwdDxDKzE2MyYmcGVbcHRdIT1BWzFdOysrcHQpO3B0Pj0xNjMmJmV0KEFbMV0s''@;'; put 'put ''QysxNjMpfWVsc2UgZXQoQVsxXSxBWzBdKTticmVhaztjYXNlIDMwOlVbQysrXT1BO2Zvcih2YXIgSXQ9MDtJdDxDKzE2MyYmcGVbSXRdIT1BOysrSXQpO0l0Pj0xNjMmJmV0KEEsQysxNjMpO2JyZWFrO2Nhc2UgMjI5OmxlPWxlLmNvbmNhdChBKTticmVhaztjYXNlIDkzOnJlW0EuY21vWzBd''@;'; put 'put ''XT1iLmxhc3RvYmo9QTticmVhaztjYXNlIDQzODpiLmxhc3RvYmouVHhPPUE7YnJlYWs7Y2FzZSAxMjc6Yi5sYXN0b2JqLkltRGF0YT1BO2JyZWFrO2Nhc2UgNDQwOmZvcihwPUFbMF0ucy5yO3A8PUFbMF0uZS5yOysrcClmb3IodT1BWzBdLnMuYzt1PD1BWzBdLmUuYzsrK3UpKGQ9dC5kZW5z''@;'; put 'put ''ZT8obltwXXx8W10pW3VdOm5bZ2Uoe2M6dSxyOnB9KV0pJiYoZC5sPUFbMV0pO2JyZWFrO2Nhc2UgMjA0ODpmb3IocD1BWzBdLnMucjtwPD1BWzBdLmUucjsrK3ApZm9yKHU9QVswXS5zLmM7dTw9QVswXS5lLmM7Kyt1KShkPXQuZGVuc2U/KG5bcF18fFtdKVt1XTpuW2dlKHtjOnUscjpwfSld''@;'; put 'put ''KSYmZC5sJiYoZC5sLlRvb2x0aXA9QVsxXSk7YnJlYWs7Y2FzZSAyODppZihiLmJpZmY8PTUmJmIuYmlmZj49MilicmVhaztkPXQuZGVuc2U/KG5bQVswXS5yXXx8W10pW0FbMF0uY106bltnZShBWzBdKV07dmFyIHFhPXJlW0FbMl1dO2R8fCh0LmRlbnNlPyhuW0FbMF0ucl18fChuW0FbMF0u''@;'; put 'put ''cl09W10pLGQ9bltBWzBdLnJdW0FbMF0uY109e3Q6InoifSk6ZD1uW2dlKEFbMF0pXT17dDoieiJ9LHMuZS5yPU1hdGgubWF4KHMuZS5yLEFbMF0ucikscy5zLnI9TWF0aC5taW4ocy5zLnIsQVswXS5yKSxzLmUuYz1NYXRoLm1heChzLmUuYyxBWzBdLmMpLHMucy5jPU1hdGgubWluKHMucy5j''@;'; put 'put ''LEFbMF0uYykpLGQuY3x8KGQuYz1bXSksZC5jLnB1c2goe2E6QVsxXSx0OnFhLlR4Ty50fSk7YnJlYWs7Y2FzZSAyMTczOnExKDAsQS5leHQpO2JyZWFrO2Nhc2UgMTI1OmlmKCFiLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtBLmU+PUEuczspZGVbQS5lLS1dPXt3aWR0aDpBLncvMjU2LGxldmVs''@;'; put 'put ''OkEubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQS5mbGFncyl9LEZlfHwoRmU9ITAsQW4oQS53LzI1NikpLEt0KGRlW0EuZSsxXSk7YnJlYWs7Y2FzZSA1MjA6dmFyIHlyPXt9O251bGwhPUEubGV2ZWwmJih1ZVtBLnJdPXlyLHlyLmxldmVsPUEubGV2ZWwpLEEuaGlkZGVuJiYodWVbQS5yXT15cix5''@;'; put 'put ''ci5oaWRkZW49ITApLEEuaHB0JiYodWVbQS5yXT15cix5ci5ocHQ9QS5ocHQseXIuaHB4PW9hKEEuaHB0KSk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpuWyIhbWFyZ2lucyJdfHxZdChuWyIhbWFyZ2lucyJdPXt9KSxuWyIhbWFyZ2lucyJdW3szODoibGVmdCIsMzk6''@;'; put 'put ''InJpZ2h0Iiw0MDoidG9wIiw0MToiYm90dG9tIn1bWl1dPUE7YnJlYWs7Y2FzZSAxNjE6blsiIW1hcmdpbnMiXXx8WXQoblsiIW1hcmdpbnMiXT17fSksblsiIW1hcmdpbnMiXS5oZWFkZXI9QS5oZWFkZXIsblsiIW1hcmdpbnMiXS5mb290ZXI9QS5mb290ZXI7YnJlYWs7Y2FzZSA1NzQ6QS5S''@;'; put 'put ''VEwmJih5LlZpZXdzWzBdLlJUTD0hMCk7YnJlYWs7Y2FzZSAxNDY6ST1BO2JyZWFrO2Nhc2UgMjE5ODplZT1BO2JyZWFrO2Nhc2UgMTQwOk49QTticmVhaztjYXNlIDQ0MjpvP1AuQ29kZU5hbWU9QXx8UC5uYW1lOnkuV0JQcm9wcy5Db2RlTmFtZT1BfHwiVGhpc1dvcmtib29rIn19ZWxzZSBZ''@;'; put 'put ''fHxjb25zb2xlLmVycm9yKCJNaXNzaW5nIEluZm8gZm9yIFhMUyBSZWNvcmQgMHgiK1oudG9TdHJpbmcoMTYpKSxlLmwrPVF9cmV0dXJuIHIuU2hlZXROYW1lcz0kZShpKS5zb3J0KGZ1bmN0aW9uKGN0LHllKXtyZXR1cm4gTnVtYmVyKGN0KS1OdW1iZXIoeWUpfSkubWFwKGZ1bmN0aW9uKGN0''@;'; put 'put ''KXtyZXR1cm4gaVtjdF0ubmFtZX0pLHQuYm9va1NoZWV0c3x8KHIuU2hlZXRzPWEpLCFyLlNoZWV0TmFtZXMubGVuZ3RoJiZsWyIhcmVmIl0/KHIuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxyLlNoZWV0cyYmKHIuU2hlZXRzLlNoZWV0MT1sKSk6ci5QcmVhbWJsZT1sLHIuU2hlZXRzJiZP''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oY3QseWUpe3IuU2hlZXRzW3IuU2hlZXROYW1lc1t5ZV1dWyIhYXV0b2ZpbHRlciJdPWN0fSksci5TdHJpbmdzPWMsci5TU0Y9TWUocGUpLGIuZW5jJiYoci5FbmNyeXB0aW9uPWIuZW5jKSxlZSYmKHIuVGhlbWVzPWVlKSxyLk1ldGFkYXRhPXt9LHZvaWQgMCE9''@;'; put 'put ''PU4mJihyLk1ldGFkYXRhLkNvdW50cnk9TiksY2UubmFtZXMubGVuZ3RoPjAmJih5Lk5hbWVzPWNlLm5hbWVzKSxyLldvcmtib29rPXkscn0oYS5jb250ZW50LHQpO2Vsc2UgaWYoKGk9dmUuZmluZChlLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJmkuY29udGVudCluPWp0LnRvX3dvcmtib29r''@;'; put 'put ''KGkuY29udGVudCwodC50eXBlPXMsdCkpO2Vsc2V7aWYoIShpPXZlLmZpbmQoZSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhaS5jb250ZW50KXRocm93KGk9dmUuZmluZChlLCJNTjAiKSkmJmkuY29udGVudD9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFdvcmtzIDQgZm9yIE1hYyBmaWxlIik6''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtuPWp0LnRvX3dvcmtib29rKGkuY29udGVudCwodC50eXBlPXMsdCkpfXQuYm9va1ZCQSYmZS5GdWxsUGF0aHMmJnZlLmZpbmQoZSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYobi52YmFyYXc9ZnVuY3Rpb24g''@;'; put 'put ''RngoZSl7dmFyIHQ9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gZS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihyLGEpe2lmKCIvIiE9PXIuc2xpY2UoLTEpJiZyLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBuPXIucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5y''@;'; put 'put ''ZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZCh0LG4sZS5GaWxlSW5kZXhbYV0uY29udGVudCl9fSksdmUud3JpdGUodCl9KGUpKX12YXIgZj17fTtyZXR1cm4gZS5GdWxsUGF0aHMmJmZ1bmN0aW9uIGxtKGUsdCxyKXt2YXIgYT12ZS5maW5k''@;'; put 'put ''KGUsIi8hRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihhJiZhLnNpemU+MCl0cnl7dmFyIG49UnMoYSx4bix6YS5EU0kpO2Zvcih2YXIgaSBpbiBuKXRbaV09bltpXX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXZhciBzPXZlLmZpbmQoZSwiLyFTdW1tYXJ5SW5mb3JtYXRpb24i''@;'; put 'put ''KTtpZihzJiZzLnNpemU+MCl0cnl7dmFyIGY9UnMocyxkbix6YS5TSSk7Zm9yKHZhciBjIGluIGYpbnVsbD09dFtjXSYmKHRbY109ZltjXSl9Y2F0Y2gobyl7aWYoci5XVEYpdGhyb3cgb310LkhlYWRpbmdQYWlycyYmdC5UaXRsZXNPZlBhcnRzJiYod3ModC5IZWFkaW5nUGFpcnMsdC5UaXRs''@;'; put 'put ''ZXNPZlBhcnRzLHQsciksZGVsZXRlIHQuSGVhZGluZ1BhaXJzLGRlbGV0ZSB0LlRpdGxlc09mUGFydHMpfShlLGYsdCksbi5Qcm9wcz1uLkN1c3Rwcm9wcz1mLHQuYm9va0ZpbGVzJiYobi5jZmI9ZSksbn12YXIgJGE9ezA6e2Y6ZnVuY3Rpb24gUHYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3Iu''@;'; put 'put ''cj1lLnJlYWRfc2hpZnQoNCksZS5sKz00O3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwrPTE7dmFyIGk9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmw9YSw3JmkmJihyLmxldmVsPTcmaSksMTYmaSYmKHIuaGlkZGVuPSEwKSwzMiZpJiYoci5ocHQ9bi8yMCkscn19LDE6e2Y6ZnVuY3Rpb24g''@;'; put 'put ''WHYoZSl7cmV0dXJuW0hyKGUpXX19LDI6e2Y6ZnVuY3Rpb24gYzIoZSl7cmV0dXJuW0hyKGUpLHVuKGUpLCJuIl19fSwzOntmOmZ1bmN0aW9uIHF2KGUpe3JldHVybltIcihlKSxlLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e2Y6ZnVuY3Rpb24ganYoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9z''@;'; put 'put ''aGlmdCgxKSwiYiJdfX0sNTp7ZjpmdW5jdGlvbiBpMihlKXtyZXR1cm5bSHIoZSksZ3IoZSksIm4iXX19LDY6e2Y6ZnVuY3Rpb24geDIoZSl7cmV0dXJuW0hyKGUpLG1yKGUpLCJzdHIiXX19LDc6e2Y6ZnVuY3Rpb24gcjIoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9zaGlmdCg0KSwicyJdfX0s''@;'; put 'put ''ODp7ZjpmdW5jdGlvbiB3MihlLHQscil7dmFyIGE9ZS5sK3Qsbj1IcihlKTtuLnI9clsiIXJvdyJdO3ZhciBzPVtuLG1yKGUpLCJzdHIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxuLHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTty''@;'; put 'put ''ZXR1cm4gc319LDk6e2Y6ZnVuY3Rpb24gXzIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixncihlKSwibiJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNl''@;'; put 'put ''IGUubD1hO3JldHVybiBzfX0sMTA6e2Y6ZnVuY3Rpb24gbTIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixlLnJlYWRfc2hpZnQoMSksImIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxu''@;'; put 'put ''LHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDExOntmOmZ1bmN0aW9uIGcyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPUhyKGUpO24ucj1yWyIhcm93Il07dmFyIHM9W24sZS5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoci5jZWxsRm9ybXVsYSl7ZS5sKz0yO3ZhciBmPUMwKGUsYS1l''@;'; put 'put ''Lmwscik7c1szXT1rcihmLDAsbixyLnN1cGJvb2tzLHIpfWVsc2UgZS5sPWE7cmV0dXJuIHN9fSwxMjp7ZjpmdW5jdGlvbiB6dihlKXtyZXR1cm5bTXQoZSldfX0sMTM6e2Y6ZnVuY3Rpb24gbDIoZSl7cmV0dXJuW010KGUpLHVuKGUpLCJuIl19fSwxNDp7ZjpmdW5jdGlvbiBRdihlKXtyZXR1''@;'; put 'put ''cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7ZjpmdW5jdGlvbiBZdihlKXtyZXR1cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7ZjpCZn0sMTc6e2Y6ZnVuY3Rpb24gdjIoZSl7cmV0dXJuW010KGUpLG1yKGUpLCJzdHIiXX19LDE4OntmOmZ1bmN0aW9uIGEy''@;'; put 'put ''KGUpe3JldHVybltNdChlKSxlLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntmOnNufSwyMDp7fSwyMTp7fSwyMjp7fSwyMzp7fSwyNDp7fSwyNTp7fSwyNjp7fSwyNzp7fSwyODp7fSwyOTp7fSwzMDp7fSwzMTp7fSwzMjp7fSwzMzp7fSwzNDp7fSwzNTp7VDoxfSwzNjp7VDotMX0sMzc6e1Q6''@;'; put 'put ''MX0sMzg6e1Q6LTF9LDM5OntmOmZ1bmN0aW9uIHBwKGUsdCxyKXt2YXIgYT1lLmwrdDtlLmwrPTQsZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCg0KSxpPWpvKGUpLHM9ZXYoZSwwLHIpLGY9Zm4oZSk7ZS5sPWE7dmFyIGM9e05hbWU6aSxQdGc6c307cmV0dXJuIG48MjY4NDM1NDU1JiYoYy5T''@;'; put 'put ''aGVldD1uKSxmJiYoYy5Db21tZW50PWYpLGN9fSw0MDp7fSw0Mjp7fSw0Mzp7ZjpmdW5jdGlvbiB2MShlLHQscil7dmFyIGE9e307YS5zej1lLnJlYWRfc2hpZnQoMikvMjA7dmFyIG49ZnVuY3Rpb24gWW8oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrKyx7ZkJvbGQ6MSZ0''@;'; put 'put ''LGZJdGFsaWM6MiZ0LGZVbmRlcmxpbmU6NCZ0LGZTdHJpa2VvdXQ6OCZ0LGZPdXRsaW5lOjE2JnQsZlNoYWRvdzozMiZ0LGZDb25kZW5zZTo2NCZ0LGZFeHRlbmQ6MTI4JnR9fShlKTtzd2l0Y2gobi5mSXRhbGljJiYoYS5pdGFsaWM9MSksbi5mQ29uZGVuc2UmJihhLmNvbmRlbnNlPTEpLG4u''@;'; put 'put ''ZkV4dGVuZCYmKGEuZXh0ZW5kPTEpLG4uZlNoYWRvdyYmKGEuc2hhZG93PTEpLG4uZk91dGxpbmUmJihhLm91dGxpbmU9MSksbi5mU3RyaWtlb3V0JiYoYS5zdHJpa2U9MSksNzAwPT09ZS5yZWFkX3NoaWZ0KDIpJiYoYS5ib2xkPTEpLGUucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOmEudmVydEFs''@;'; put 'put ''aWduPSJzdXBlcnNjcmlwdCI7YnJlYWs7Y2FzZSAyOmEudmVydEFsaWduPSJzdWJzY3JpcHQifXZhciBzPWUucmVhZF9zaGlmdCgxKTswIT1zJiYoYS51bmRlcmxpbmU9cyk7dmFyIGY9ZS5yZWFkX3NoaWZ0KDEpO2Y+MCYmKGEuZmFtaWx5PWYpO3ZhciBjPWUucmVhZF9zaGlmdCgxKTtzd2l0''@;'; put 'put ''Y2goYz4wJiYoYS5jaGFyc2V0PWMpLGUubCsrLGEuY29sb3I9ZnVuY3Rpb24gS28oZSl7dmFyIHQ9e30sYT1lLnJlYWRfc2hpZnQoMSk+Pj4xLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ZS5yZWFkX3NoaWZ0KDIsImkiKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdCgxKSxjPWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtzd2l0Y2goZS5sKyssYSl7Y2FzZSAwOnQuYXV0bz0xO2JyZWFrO2Nhc2UgMTp0LmluZGV4PW47dmFyIG89VnRbbl07byYmKHQucmdiPWJhKG8pKTticmVhaztjYXNlIDI6dC5yZ2I9YmEoW3MsZixjXSk7YnJlYWs7Y2FzZSAzOnQudGhlbWU9bn1yZXR1cm4gMCE9aSYmKHQu''@;'; put 'put ''dGludD1pPjA/aS8zMjc2NzppLzMyNzY4KSx0fShlKSxlLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTphLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjphLnNjaGVtZT0ibWlub3IifXJldHVybiBhLm5hbWU9bXIoZSksYX19LDQ0OntmOmZ1bmN0aW9uIHgxKGUsdCl7cmV0dXJuW2UucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxtcihlKV19fSw0NTp7ZjpnMX0sNDY6e2Y6dzF9LDQ3OntmOmZ1bmN0aW9uIF8xKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubD1yLHtpeGZlOmEsbnVtRm10SWQ6bn19fSw0ODp7fSw0OTp7ZjpmdW5jdGlvbiBI''@;'; put 'put ''byhlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDQsImkiKX19LDUwOnt9LDUxOntmOmZ1bmN0aW9uIGV4KGUpe2Zvcih2YXIgdD1bXSxyPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChbZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV0pO3JldHVybiB0fX0sNTI6e1Q6MX0sNTM6''@;'; put 'put ''e1Q6LTF9LDU0OntUOjF9LDU1OntUOi0xfSw1Njp7VDoxfSw1Nzp7VDotMX0sNTg6e30sNTk6e30sNjA6e2Y6UXN9LDYyOntmOmZ1bmN0aW9uIGgyKGUpe3JldHVybltIcihlKSxzbihlKSwiaXMiXX19LDYzOntmOmZ1bmN0aW9uIG94KGUpe3ZhciB0PXt9O3QuaT1lLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''dmFyIHI9e307ci5yPWUucmVhZF9zaGlmdCg0KSxyLmM9ZS5yZWFkX3NoaWZ0KDQpLHQucj1nZShyKTt2YXIgYT1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImYSYmKHQubD0iMSIpLDgmYSYmKHQuYT0iMSIpLHR9fSw2NDp7ZjpmdW5jdGlvbiBMMigpe319LDY1Ont9LDY2Ont9LDY3Ont9LDY4''@;'; put 'put ''Ont9LDY5Ont9LDcwOnt9LDEyODp7fSwxMjk6e1Q6MX0sMTMwOntUOi0xfSwxMzE6e1Q6MSxmOnByLHA6MH0sMTMyOntUOi0xfSwxMzM6e1Q6MX0sMTM0OntUOi0xfSwxMzU6e1Q6MX0sMTM2OntUOi0xfSwxMzc6e1Q6MSxmOmZ1bmN0aW9uIFIyKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKTty''@;'; put 'put ''ZXR1cm4gZS5sKz0yOCx7UlRMOjMyJnR9fX0sMTM4OntUOi0xfSwxMzk6e1Q6MX0sMTQwOntUOi0xfSwxNDE6e1Q6MX0sMTQyOntUOi0xfSwxNDM6e1Q6MX0sMTQ0OntUOi0xfSwxNDU6e1Q6MX0sMTQ2OntUOi0xfSwxNDc6e2Y6ZnVuY3Rpb24gSHYoZSx0KXt2YXIgcj17fSxhPWVbZS5sXTty''@;'; put 'put ''ZXR1cm4rK2UubCxyLmFib3ZlPSEoNjQmYSksci5sZWZ0PSEoMTI4JmEpLGUubCs9MTgsci5uYW1lPSRvKGUsdC0xOSkscn19LDE0ODp7ZjpNdixwOjE2fSwxNTE6e2Y6ZnVuY3Rpb24geTIoKXt9fSwxNTI6e30sMTUzOntmOmZ1bmN0aW9uIHhwKGUsdCl7dmFyIHI9e30sYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCk7ci5kZWZhdWx0VGhlbWVWZXJzaW9uPWUucmVhZF9zaGlmdCg0KTt2YXIgbj10Pjg/bXIoZSk6IiI7cmV0dXJuIG4ubGVuZ3RoPjAmJihyLkNvZGVOYW1lPW4pLHIuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmYSksci5iYWNrdXBGaWxlPSEhKDY0JmEpLHIuY2hlY2tDb21w''@;'; put 'put ''YXRpYmlsaXR5PSEhKDQwOTYmYSksci5kYXRlMTkwND0hISgxJmEpLHIuZmlsdGVyUHJpdmFjeT0hISg4JmEpLHIuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmYSksci5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZhKSxyLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JmEpLHIucmVmcmVzaEFsbENv''@;'; put 'put ''bm5lY3Rpb25zPSEhKDI2MjE0NCZhKSxyLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JmEpLHIuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZhKSxyLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJmEpLHIuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25l''@;'; put 'put ''Il1bYT4+MTMmM10sci5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZhKSxyLnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bYT4+OCYzXSxyfX0sMTU0Ont9LDE1NTp7fSwxNTY6e2Y6ZnVuY3Rpb24gdXAoZSx0KXt2YXIgcj17fTtyZXR1cm4gci5IaWRkZW49''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KDQpLHIuaVRhYklEPWUucmVhZF9zaGlmdCg0KSxyLnN0clJlbElEPW9uKGUsdC04KSxyLm5hbWU9bXIoZSkscn19LDE1Nzp7fSwxNTg6e30sMTU5OntUOjEsZjpmdW5jdGlvbiBPaChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV19fSwxNjA6''@;'; put 'put ''e1Q6LTF9LDE2MTp7VDoxLGY6V3R9LDE2Mjp7VDotMX0sMTYzOntUOjF9LDE2NDp7VDotMX0sMTY1OntUOjF9LDE2Njp7VDotMX0sMTY3Ont9LDE2ODp7fSwxNjk6e30sMTcwOnt9LDE3MTp7fSwxNzI6e1Q6MX0sMTczOntUOi0xfSwxNzQ6e30sMTc1Ont9LDE3Njp7ZjprMn0sMTc3OntUOjF9''@;'; put 'put ''LDE3ODp7VDotMX0sMTc5OntUOjF9LDE4MDp7VDotMX0sMTgxOntUOjF9LDE4Mjp7VDotMX0sMTgzOntUOjF9LDE4NDp7VDotMX0sMTg1OntUOjF9LDE4Njp7VDotMX0sMTg3OntUOjF9LDE4ODp7VDotMX0sMTg5OntUOjF9LDE5MDp7VDotMX0sMTkxOntUOjF9LDE5Mjp7VDotMX0sMTkzOntU''@;'; put 'put ''OjF9LDE5NDp7VDotMX0sMTk1OntUOjF9LDE5Njp7VDotMX0sMTk3OntUOjF9LDE5ODp7VDotMX0sMTk5OntUOjF9LDIwMDp7VDotMX0sMjAxOntUOjF9LDIwMjp7VDotMX0sMjAzOntUOjF9LDIwNDp7VDotMX0sMjA1OntUOjF9LDIwNjp7VDotMX0sMjA3OntUOjF9LDIwODp7VDotMX0sMjA5''@;'; put 'put ''OntUOjF9LDIxMDp7VDotMX0sMjExOntUOjF9LDIxMjp7VDotMX0sMjEzOntUOjF9LDIxNDp7VDotMX0sMjE1OntUOjF9LDIxNjp7VDotMX0sMjE3OntUOjF9LDIxODp7VDotMX0sMjE5OntUOjF9LDIyMDp7VDotMX0sMjIxOntUOjF9LDIyMjp7VDotMX0sMjIzOntUOjF9LDIyNDp7VDotMX0s''@;'; put 'put ''MjI1OntUOjF9LDIyNjp7VDotMX0sMjI3OntUOjF9LDIyODp7VDotMX0sMjI5OntUOjF9LDIzMDp7VDotMX0sMjMxOntUOjF9LDIzMjp7VDotMX0sMjMzOntUOjF9LDIzNDp7VDotMX0sMjM1OntUOjF9LDIzNjp7VDotMX0sMjM3OntUOjF9LDIzODp7VDotMX0sMjM5OntUOjF9LDI0MDp7VDot''@;'; put 'put ''MX0sMjQxOntUOjF9LDI0Mjp7VDotMX0sMjQzOntUOjF9LDI0NDp7VDotMX0sMjQ1OntUOjF9LDI0Njp7VDotMX0sMjQ3OntUOjF9LDI0ODp7VDotMX0sMjQ5OntUOjF9LDI1MDp7VDotMX0sMjUxOntUOjF9LDI1Mjp7VDotMX0sMjUzOntUOjF9LDI1NDp7VDotMX0sMjU1OntUOjF9LDI1Njp7''@;'; put 'put ''VDotMX0sMjU3OntUOjF9LDI1ODp7VDotMX0sMjU5OntUOjF9LDI2MDp7VDotMX0sMjYxOntUOjF9LDI2Mjp7VDotMX0sMjYzOntUOjF9LDI2NDp7VDotMX0sMjY1OntUOjF9LDI2Njp7VDotMX0sMjY3OntUOjF9LDI2ODp7VDotMX0sMjY5OntUOjF9LDI3MDp7VDotMX0sMjcxOntUOjF9LDI3''@;'; put 'put ''Mjp7VDotMX0sMjczOntUOjF9LDI3NDp7VDotMX0sMjc1OntUOjF9LDI3Njp7VDotMX0sMjc3Ont9LDI3ODp7VDoxfSwyNzk6e1Q6LTF9LDI4MDp7VDoxfSwyODE6e1Q6LTF9LDI4Mjp7VDoxfSwyODM6e1Q6MX0sMjg0OntUOi0xfSwyODU6e1Q6MX0sMjg2OntUOi0xfSwyODc6e1Q6MX0sMjg4''@;'; put 'put ''OntUOi0xfSwyODk6e1Q6MX0sMjkwOntUOi0xfSwyOTE6e1Q6MX0sMjkyOntUOi0xfSwyOTM6e1Q6MX0sMjk0OntUOi0xfSwyOTU6e1Q6MX0sMjk2OntUOi0xfSwyOTc6e1Q6MX0sMjk4OntUOi0xfSwyOTk6e1Q6MX0sMzAwOntUOi0xfSwzMDE6e1Q6MX0sMzAyOntUOi0xfSwzMDM6e1Q6MX0s''@;'; put 'put ''MzA0OntUOi0xfSwzMDU6e1Q6MX0sMzA2OntUOi0xfSwzMDc6e1Q6MX0sMzA4OntUOi0xfSwzMDk6e1Q6MX0sMzEwOntUOi0xfSwzMTE6e1Q6MX0sMzEyOntUOi0xfSwzMTM6e1Q6LTF9LDMxNDp7VDoxfSwzMTU6e1Q6LTF9LDMxNjp7VDoxfSwzMTc6e1Q6LTF9LDMxODp7VDoxfSwzMTk6e1Q6''@;'; put 'put ''LTF9LDMyMDp7VDoxfSwzMjE6e1Q6LTF9LDMyMjp7VDoxfSwzMjM6e1Q6LTF9LDMyNDp7VDoxfSwzMjU6e1Q6LTF9LDMyNjp7VDoxfSwzMjc6e1Q6LTF9LDMyODp7VDoxfSwzMjk6e1Q6LTF9LDMzMDp7VDoxfSwzMzE6e1Q6LTF9LDMzMjp7VDoxfSwzMzM6e1Q6LTF9LDMzNDp7VDoxfSwzMzU6''@;'; put 'put ''e2Y6ZnVuY3Rpb24gWjEoZSx0KXtyZXR1cm57ZmxhZ3M6ZS5yZWFkX3NoaWZ0KDQpLHZlcnNpb246ZS5yZWFkX3NoaWZ0KDQpLG5hbWU6bXIoZSl9fX0sMzM2OntUOi0xfSwzMzc6e2Y6ZnVuY3Rpb24gYXgoZSl7cmV0dXJuIGUubCs9NCwwIT1lLnJlYWRfc2hpZnQoNCl9LFQ6MX0sMzM4OntU''@;'; put 'put ''Oi0xfSwzMzk6e1Q6MX0sMzQwOntUOi0xfSwzNDE6e1Q6MX0sMzQyOntUOi0xfSwzNDM6e1Q6MX0sMzQ0OntUOi0xfSwzNDU6e1Q6MX0sMzQ2OntUOi0xfSwzNDc6e1Q6MX0sMzQ4OntUOi0xfSwzNDk6e1Q6MX0sMzUwOntUOi0xfSwzNTE6e30sMzUyOnt9LDM1Mzp7VDoxfSwzNTQ6e1Q6LTF9''@;'; put 'put ''LDM1NTp7Zjpvbn0sMzU3Ont9LDM1ODp7fSwzNTk6e30sMzYwOntUOjF9LDM2MTp7fSwzNjI6e2Y6cXN9LDM2Mzp7fSwzNjQ6e30sMzY2Ont9LDM2Nzp7fSwzNjg6e30sMzY5Ont9LDM3MDp7fSwzNzE6e30sMzcyOntUOjF9LDM3Mzp7VDotMX0sMzc0OntUOjF9LDM3NTp7VDotMX0sMzc2OntU''@;'; put 'put ''OjF9LDM3Nzp7VDotMX0sMzc4OntUOjF9LDM3OTp7VDotMX0sMzgwOntUOjF9LDM4MTp7VDotMX0sMzgyOntUOjF9LDM4Mzp7VDotMX0sMzg0OntUOjF9LDM4NTp7VDotMX0sMzg2OntUOjF9LDM4Nzp7VDotMX0sMzg4OntUOjF9LDM4OTp7VDotMX0sMzkwOntUOjF9LDM5MTp7VDotMX0sMzky''@;'; put 'put ''OntUOjF9LDM5Mzp7VDotMX0sMzk0OntUOjF9LDM5NTp7VDotMX0sMzk2Ont9LDM5Nzp7fSwzOTg6e30sMzk5Ont9LDQwMDp7fSw0MDE6e1Q6MX0sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDA5Ont9LDQxMDp7fSw0MTE6e30sNDEyOnt9LDQxMzp7fSw0MTQ6''@;'; put 'put ''e30sNDE1Ont9LDQxNjp7fSw0MTc6e30sNDE4Ont9LDQxOTp7fSw0MjA6e30sNDIxOnt9LDQyMjp7VDoxfSw0MjM6e1Q6MX0sNDI0OntUOi0xfSw0MjU6e1Q6LTF9LDQyNjp7ZjpmdW5jdGlvbiBBMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1vcyhlKSxpPWUucmVhZF9zaGlmdCgxKSxzPVtuXTtp''@;'; put 'put ''ZihzWzJdPWksci5jZWxsRm9ybXVsYSl7dmFyIGY9UWQoZSxhLWUubCxyKTtzWzFdPWZ9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDQyNzp7ZjpmdW5jdGlvbiBDMihlLHQscil7dmFyIGE9ZS5sK3QsaT1bV3QoZSwxNildO2lmKHIuY2VsbEZvcm11bGEpe3ZhciBzPXJ2KGUsYS1lLmwscik7aVsx''@;'; put 'put ''XT1zLGUubD1hfWVsc2UgZS5sPWE7cmV0dXJuIGl9fSw0Mjg6e30sNDI5OntUOjF9LDQzMDp7VDotMX0sNDMxOntUOjF9LDQzMjp7VDotMX0sNDMzOntUOjF9LDQzNDp7VDotMX0sNDM1OntUOjF9LDQzNjp7VDotMX0sNDM3OntUOjF9LDQzODp7VDotMX0sNDM5OntUOjF9LDQ0MDp7VDotMX0s''@;'; put 'put ''NDQxOntUOjF9LDQ0Mjp7VDotMX0sNDQzOntUOjF9LDQ0NDp7VDotMX0sNDQ1OntUOjF9LDQ0Njp7VDotMX0sNDQ3OntUOjF9LDQ0ODp7VDotMX0sNDQ5OntUOjF9LDQ1MDp7VDotMX0sNDUxOntUOjF9LDQ1Mjp7VDotMX0sNDUzOntUOjF9LDQ1NDp7VDotMX0sNDU1OntUOjF9LDQ1Njp7VDot''@;'; put 'put ''MX0sNDU3OntUOjF9LDQ1ODp7VDotMX0sNDU5OntUOjF9LDQ2MDp7VDotMX0sNDYxOntUOjF9LDQ2Mjp7VDotMX0sNDYzOntUOjF9LDQ2NDp7VDotMX0sNDY1OntUOjF9LDQ2Njp7VDotMX0sNDY3OntUOjF9LDQ2ODp7VDotMX0sNDY5OntUOjF9LDQ3MDp7VDotMX0sNDcxOnt9LDQ3Mjp7fSw0''@;'; put 'put ''NzM6e1Q6MX0sNDc0OntUOi0xfSw0NzU6e30sNDc2OntmOmZ1bmN0aW9uIE8yKGUpe3ZhciB0PXt9O3JldHVybiBNZi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09Z3IoZSl9KSx0fX0sNDc3Ont9LDQ3ODp7fSw0Nzk6e1Q6MX0sNDgwOntUOi0xfSw0ODE6e1Q6MX0sNDgyOntUOi0xfSw0ODM6''@;'; put 'put ''e1Q6MX0sNDg0OntUOi0xfSw0ODU6e2Y6ZnVuY3Rpb24gV3YoKXt9fSw0ODY6e1Q6MX0sNDg3OntUOi0xfSw0ODg6e1Q6MX0sNDg5OntUOi0xfSw0OTA6e1Q6MX0sNDkxOntUOi0xfSw0OTI6e1Q6MX0sNDkzOntUOi0xfSw0OTQ6e2Y6ZnVuY3Rpb24gUzIoZSx0KXt2YXIgcj1lLmwrdCxhPVd0''@;'; put 'put ''KGUsMTYpLG49Zm4oZSksaT1tcihlKSxzPW1yKGUpLGY9bXIoZSk7ZS5sPXI7dmFyIGM9e3JmeDphLHJlbElkOm4sbG9jOmksZGlzcGxheTpmfTtyZXR1cm4gcyYmKGMuVG9vbHRpcD1zKSxjfX0sNDk1OntUOjF9LDQ5Njp7VDotMX0sNDk3OntUOjF9LDQ5ODp7VDotMX0sNDk5Ont9LDUwMDp7''@;'; put 'put ''VDoxfSw1MDE6e1Q6LTF9LDUwMjp7VDoxfSw1MDM6e1Q6LTF9LDUwNDp7fSw1MDU6e1Q6MX0sNTA2OntUOi0xfSw1MDc6e30sNTA4OntUOjF9LDUwOTp7VDotMX0sNTEwOntUOjF9LDUxMTp7VDotMX0sNTEyOnt9LDUxMzp7fSw1MTQ6e1Q6MX0sNTE1OntUOi0xfSw1MTY6e1Q6MX0sNTE3OntU''@;'; put 'put ''Oi0xfSw1MTg6e1Q6MX0sNTE5OntUOi0xfSw1MjA6e1Q6MX0sNTIxOntUOi0xfSw1MjI6e30sNTIzOnt9LDUyNDp7fSw1MjU6e30sNTI2Ont9LDUyNzp7fSw1Mjg6e1Q6MX0sNTI5OntUOi0xfSw1MzA6e1Q6MX0sNTMxOntUOi0xfSw1MzI6e1Q6MX0sNTMzOntUOi0xfSw1MzQ6e30sNTM1Ont9''@;'; put 'put ''LDUzNjp7fSw1Mzc6e30sNTM4OntUOjF9LDUzOTp7VDotMX0sNTQwOntUOjF9LDU0MTp7VDotMX0sNTQyOntUOjF9LDU0ODp7fSw1NDk6e30sNTUwOntmOm9ufSw1NTE6e30sNTUyOnt9LDU1Mzp7fSw1NTQ6e1Q6MX0sNTU1OntUOi0xfSw1NTY6e1Q6MX0sNTU3OntUOi0xfSw1NTg6e1Q6MX0s''@;'; put 'put ''NTU5OntUOi0xfSw1NjA6e1Q6MX0sNTYxOntUOi0xfSw1NjI6e30sNTY0Ont9LDU2NTp7VDoxfSw1NjY6e1Q6LTF9LDU2OTp7VDoxfSw1NzA6e1Q6LTF9LDU3Mjp7fSw1NzM6e1Q6MX0sNTc0OntUOi0xfSw1Nzc6e30sNTc4Ont9LDU3OTp7fSw1ODA6e30sNTgxOnt9LDU4Mjp7fSw1ODM6e30s''@;'; put 'put ''NTg0Ont9LDU4NTp7fSw1ODY6e30sNTg3Ont9LDU4ODp7VDotMX0sNTg5Ont9LDU5MDp7VDoxfSw1OTE6e1Q6LTF9LDU5Mjp7VDoxfSw1OTM6e1Q6LTF9LDU5NDp7VDoxfSw1OTU6e1Q6LTF9LDU5Njp7fSw1OTc6e1Q6MX0sNTk4OntUOi0xfSw1OTk6e1Q6MX0sNjAwOntUOi0xfSw2MDE6e1Q6''@;'; put 'put ''MX0sNjAyOntUOi0xfSw2MDM6e1Q6MX0sNjA0OntUOi0xfSw2MDU6e1Q6MX0sNjA2OntUOi0xfSw2MDc6e30sNjA4OntUOjF9LDYwOTp7VDotMX0sNjEwOnt9LDYxMTp7VDoxfSw2MTI6e1Q6LTF9LDYxMzp7VDoxfSw2MTQ6e1Q6LTF9LDYxNTp7VDoxfSw2MTY6e1Q6LTF9LDYxNzp7VDoxfSw2''@;'; put 'put ''MTg6e1Q6LTF9LDYxOTp7VDoxfSw2MjA6e1Q6LTF9LDYyNTp7fSw2MjY6e1Q6MX0sNjI3OntUOi0xfSw2Mjg6e1Q6MX0sNjI5OntUOi0xfSw2MzA6e1Q6MX0sNjMxOntUOi0xfSw2MzI6e2Y6d3h9LDYzMzp7VDoxfSw2MzQ6e1Q6LTF9LDYzNTp7VDoxLGY6ZnVuY3Rpb24gZ3goZSl7dmFyIHQ9''@;'; put 'put ''e307dC5pYXV0aG9yPWUucmVhZF9zaGlmdCg0KTt2YXIgcj1XdChlLDE2KTtyZXR1cm4gdC5yZng9ci5zLHQucmVmPWdlKHIucyksZS5sKz0xNix0fX0sNjM2OntUOi0xfSw2Mzc6e2Y6R299LDYzODp7VDoxfSw2Mzk6e30sNjQwOntUOi0xfSw2NDE6e1Q6MX0sNjQyOntUOi0xfSw2NDM6e1Q6''@;'; put 'put ''MX0sNjQ0Ont9LDY0NTp7VDotMX0sNjQ2OntUOjF9LDY0ODp7VDoxfSw2NDk6e30sNjUwOntUOi0xfSw2NTE6e2Y6ZnVuY3Rpb24gZXAoZSx0KXtyZXR1cm4gZS5sKz0xMCx7bmFtZTptcihlKX19fSw2NTI6e30sNjUzOntUOjF9LDY1NDp7VDotMX0sNjU1OntUOjF9LDY1Njp7VDotMX0sNjU3''@;'; put 'put ''OntUOjF9LDY1ODp7VDotMX0sNjU5Ont9LDY2MDp7VDoxfSw2NjE6e30sNjYyOntUOi0xfSw2NjM6e30sNjY0OntUOjF9LDY2NTp7fSw2NjY6e1Q6LTF9LDY2Nzp7fSw2Njg6e30sNjY5Ont9LDY3MTp7VDoxfSw2NzI6e1Q6LTF9LDY3Mzp7VDoxfSw2NzQ6e1Q6LTF9LDY3NTp7fSw2NzY6e30s''@;'; put 'put ''Njc3Ont9LDY3ODp7fSw2Nzk6e30sNjgwOnt9LDY4MTp7fSwxMDI0Ont9LDEwMjU6e30sMTAyNjp7VDoxfSwxMDI3OntUOi0xfSwxMDI4OntUOjF9LDEwMjk6e1Q6LTF9LDEwMzA6e30sMTAzMTp7VDoxfSwxMDMyOntUOi0xfSwxMDMzOntUOjF9LDEwMzQ6e1Q6LTF9LDEwMzU6e30sMTAzNjp7''@;'; put 'put ''fSwxMDM3Ont9LDEwMzg6e1Q6MX0sMTAzOTp7VDotMX0sMTA0MDp7fSwxMDQxOntUOjF9LDEwNDI6e1Q6LTF9LDEwNDM6e30sMTA0NDp7fSwxMDQ1Ont9LDEwNDY6e1Q6MX0sMTA0Nzp7VDotMX0sMTA0ODp7VDoxfSwxMDQ5OntUOi0xfSwxMDUwOnt9LDEwNTE6e1Q6MX0sMTA1Mjp7VDoxfSwx''@;'; put 'put ''MDUzOntmOmZ1bmN0aW9uIEIyKCl7fX0sMTA1NDp7VDoxfSwxMDU1Ont9LDEwNTY6e1Q6MX0sMTA1Nzp7VDotMX0sMTA1ODp7VDoxfSwxMDU5OntUOi0xfSwxMDYxOnt9LDEwNjI6e1Q6MX0sMTA2Mzp7VDotMX0sMTA2NDp7VDoxfSwxMDY1OntUOi0xfSwxMDY2OntUOjF9LDEwNjc6e1Q6LTF9''@;'; put 'put ''LDEwNjg6e1Q6MX0sMTA2OTp7VDotMX0sMTA3MDp7VDoxfSwxMDcxOntUOi0xfSwxMDcyOntUOjF9LDEwNzM6e1Q6LTF9LDEwNzU6e1Q6MX0sMTA3Njp7VDotMX0sMTA3Nzp7VDoxfSwxMDc4OntUOi0xfSwxMDc5OntUOjF9LDEwODA6e1Q6LTF9LDEwODE6e1Q6MX0sMTA4Mjp7VDotMX0sMTA4''@;'; put 'put ''Mzp7VDoxfSwxMDg0OntUOi0xfSwxMDg1Ont9LDEwODY6e1Q6MX0sMTA4Nzp7VDotMX0sMTA4ODp7VDoxfSwxMDg5OntUOi0xfSwxMDkwOntUOjF9LDEwOTE6e1Q6LTF9LDEwOTI6e1Q6MX0sMTA5Mzp7VDotMX0sMTA5NDp7VDoxfSwxMDk1OntUOi0xfSwxMDk2Ont9LDEwOTc6e1Q6MX0sMTA5''@;'; put 'put ''ODp7fSwxMDk5OntUOi0xfSwxMTAwOntUOjF9LDExMDE6e1Q6LTF9LDExMDI6e30sMTEwMzp7fSwxMTA0Ont9LDExMDU6e30sMTExMTp7fSwxMTEyOnt9LDExMTM6e1Q6MX0sMTExNDp7VDotMX0sMTExNTp7VDoxfSwxMTE2OntUOi0xfSwxMTE3Ont9LDExMTg6e1Q6MX0sMTExOTp7VDotMX0s''@;'; put 'put ''MTEyMDp7VDoxfSwxMTIxOntUOi0xfSwxMTIyOntUOjF9LDExMjM6e1Q6LTF9LDExMjQ6e1Q6MX0sMTEyNTp7VDotMX0sMTEyNjp7fSwxMTI4OntUOjF9LDExMjk6e1Q6LTF9LDExMzA6e30sMTEzMTp7VDoxfSwxMTMyOntUOi0xfSwxMTMzOntUOjF9LDExMzQ6e1Q6LTF9LDExMzU6e1Q6MX0s''@;'; put 'put ''MTEzNjp7VDotMX0sMTEzNzp7VDoxfSwxMTM4OntUOi0xfSwxMTM5OntUOjF9LDExNDA6e1Q6LTF9LDExNDE6e30sMTE0Mjp7VDoxfSwxMTQzOntUOi0xfSwxMTQ0OntUOjF9LDExNDU6e1Q6LTF9LDExNDY6e30sMTE0Nzp7VDoxfSwxMTQ4OntUOi0xfSwxMTQ5OntUOjF9LDExNTA6e1Q6LTF9''@;'; put 'put ''LDExNTI6e1Q6MX0sMTE1Mzp7VDotMX0sMTE1NDp7VDotMX0sMTE1NTp7VDotMX0sMTE1Njp7VDotMX0sMTE1Nzp7VDoxfSwxMTU4OntUOi0xfSwxMTU5OntUOjF9LDExNjA6e1Q6LTF9LDExNjE6e1Q6MX0sMTE2Mjp7VDotMX0sMTE2Mzp7VDoxfSwxMTY0OntUOi0xfSwxMTY1OntUOjF9LDEx''@;'; put 'put ''NjY6e1Q6LTF9LDExNjc6e1Q6MX0sMTE2ODp7VDotMX0sMTE2OTp7VDoxfSwxMTcwOntUOi0xfSwxMTcxOnt9LDExNzI6e1Q6MX0sMTE3Mzp7VDotMX0sMTE3Nzp7fSwxMTc4OntUOjF9LDExODA6e30sMTE4MTp7fSwxMTgyOnt9LDIwNDg6e1Q6MX0sMjA0OTp7VDotMX0sMjA1MDp7fSwyMDUx''@;'; put 'put ''OntUOjF9LDIwNTI6e1Q6LTF9LDIwNTM6e30sMjA1NDp7fSwyMDU1OntUOjF9LDIwNTY6e1Q6LTF9LDIwNTc6e1Q6MX0sMjA1ODp7VDotMX0sMjA2MDp7fSwyMDY3Ont9LDIwNjg6e1Q6MX0sMjA2OTp7VDotMX0sMjA3MDp7fSwyMDcxOnt9LDIwNzI6e1Q6MX0sMjA3Mzp7VDotMX0sMjA3NTp7''@;'; put 'put ''fSwyMDc2Ont9LDIwNzc6e1Q6MX0sMjA3ODp7VDotMX0sMjA3OTp7fSwyMDgwOntUOjF9LDIwODE6e1Q6LTF9LDIwODI6e30sMjA4Mzp7VDoxfSwyMDg0OntUOi0xfSwyMDg1OntUOjF9LDIwODY6e1Q6LTF9LDIwODc6e1Q6MX0sMjA4ODp7VDotMX0sMjA4OTp7VDoxfSwyMDkwOntUOi0xfSwy''@;'; put 'put ''MDkxOnt9LDIwOTI6e30sMjA5Mzp7VDoxfSwyMDk0OntUOi0xfSwyMDk1Ont9LDIwOTY6e1Q6MX0sMjA5Nzp7VDotMX0sMjA5ODp7VDoxfSwyMDk5OntUOi0xfSwyMTAwOntUOjF9LDIxMDE6e1Q6LTF9LDIxMDI6e30sMjEwMzp7VDoxfSwyMTA0OntUOi0xfSwyMTA1Ont9LDIxMDY6e1Q6MX0s''@;'; put 'put ''MjEwNzp7VDotMX0sMjEwODp7fSwyMTA5OntUOjF9LDIxMTA6e1Q6LTF9LDIxMTE6e1Q6MX0sMjExMjp7VDotMX0sMjExMzp7VDoxfSwyMTE0OntUOi0xfSwyMTE1Ont9LDIxMTY6e30sMjExNzp7fSwyMTE4OntUOjF9LDIxMTk6e1Q6LTF9LDIxMjA6e30sMjEyMTp7VDoxfSwyMTIyOntUOi0x''@;'; put 'put ''fSwyMTIzOntUOjF9LDIxMjQ6e1Q6LTF9LDIxMjU6e30sMjEyNjp7VDoxfSwyMTI3OntUOi0xfSwyMTI4Ont9LDIxMjk6e1Q6MX0sMjEzMDp7VDotMX0sMjEzMTp7VDoxfSwyMTMyOntUOi0xfSwyMTMzOntUOjF9LDIxMzQ6e30sMjEzNTp7fSwyMTM2Ont9LDIxMzc6e1Q6MX0sMjEzODp7VDot''@;'; put 'put ''MX0sMjEzOTp7VDoxfSwyMTQwOntUOi0xfSwyMTQxOnt9LDMwNzI6e30sMzA3Mzp7fSw0MDk2OntUOjF9LDQwOTc6e1Q6LTF9LDUwMDI6e1Q6MX0sNTAwMzp7VDotMX0sNTA4MTp7VDoxfSw1MDgyOntUOi0xfSw1MDgzOnt9LDUwODQ6e1Q6MX0sNTA4NTp7VDotMX0sNTA4Njp7VDoxfSw1MDg3''@;'; put 'put ''OntUOi0xfSw1MDg4Ont9LDUwODk6e30sNTA5MDp7fSw1MDkyOntUOjF9LDUwOTM6e1Q6LTF9LDUwOTQ6e30sNTA5NTp7VDoxfSw1MDk2OntUOi0xfSw1MDk3Ont9LDUwOTk6e30sNjU1MzU6e246IiJ9fSxXbj17Njp7ZjpObn0sMTA6e2Y6eXR9LDEyOntmOnRyfSwxMzp7Zjp0cn0sMTQ6e2Y6''@;'; put 'put ''SmV9LDE1OntmOkplfSwxNjp7Zjpncn0sMTc6e2Y6SmV9LDE4OntmOkplfSwxOTp7Zjp0cn0sMjA6e2Y6S3N9LDIxOntmOktzfSwyMzp7Zjpxc30sMjQ6e2Y6SnN9LDI1OntmOkplfSwyNjp7fSwyNzp7fSwyODp7ZjpmdW5jdGlvbiBVdShlLHQscil7cmV0dXJuIGZ1bmN0aW9uIE11KGUsdCxy''@;'; put 'put ''KXtpZighKHIuYmlmZjw4KSl7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9ZS5yZWFkX3NoaWZ0KDIpLGY9enQoZSwwLHIpO3JldHVybiByLmJpZmY8OCYmZS5yZWFkX3NoaWZ0KDEpLFt7cjphLGM6bn0sZixzLGldfX0oZSwwLHIp''@;'; put 'put ''fX0sMjk6e30sMzQ6e2Y6SmV9LDM1OntmOllzfSwzODp7Zjpncn0sMzk6e2Y6Z3J9LDQwOntmOmdyfSw0MTp7Zjpncn0sNDI6e2Y6SmV9LDQzOntmOkplfSw0Nzp7ZjpmdW5jdGlvbiBxaChlLHQscil7dmFyIGE9e1R5cGU6ci5iaWZmPj04P2UucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gYS5U''@;'; put 'put ''eXBlP2Z1bmN0aW9uIEpoKGUsdCxyKXt2YXIgYT1yfHx7fTtyZXR1cm4gYS5JbmZvPWUucmVhZF9zaGlmdCgyKSxlLmwtPTIsYS5EYXRhPTE9PT1hLkluZm8/ZnVuY3Rpb24gJGgoZSl7dmFyIHQ9e30scj10LkVuY3J5cHRpb25WZXJzaW9uSW5mbz1kdChlLDQpO2lmKDEhPXIuTWFqb3J8fDEh''@;'; put 'put ''PXIuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK3IuTWFqb3IrIiA6ICIrci5NaW5vcjtyZXR1cm4gdC5TYWx0PWUucmVhZF9zaGlmdCgxNiksdC5FbmNyeXB0ZWRWZXJpZmllcj1lLnJlYWRfc2hpZnQoMTYpLHQuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPWUucmVhZF9z''@;'; put 'put ''aGlmdCgxNiksdH0oZSk6ZnVuY3Rpb24gemgoZSx0KXt2YXIgcj17fSxhPXIuRW5jcnlwdGlvblZlcnNpb25JbmZvPWR0KGUsNCk7aWYodC09NCwyIT1hLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIithLk1pbm9yKTtpZihhLk1ham9y''@;'; put 'put ''PjR8fGEuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrYS5NYWpvcik7ci5GbGFncz1lLnJlYWRfc2hpZnQoNCksdC09NDt2YXIgbj1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQtPTQsci5FbmNyeXB0aW9uSGVhZGVyPXNmKGUsbiks''@;'; put 'put ''ci5FbmNyeXB0aW9uVmVyaWZpZXI9ZmYoZSx0LT1uKSxyfShlLHQpLGF9KGUsdC0yLGEpOmZ1bmN0aW9uIFloKGUsdCxyLGEpe3ZhciBuPXtrZXk6dHIoZSksdmVyaWZpY2F0aW9uQnl0ZXM6dHIoZSl9O3IucGFzc3dvcmQmJihuLnZlcmlmaWVyPWZ1bmN0aW9uIEZuKGUpe3ZhciByLGksdD0w''@;'; put 'put ''LGE9bmYoZSksbj1hLmxlbmd0aCsxO2Zvcigocj1fdChuKSlbMF09YS5sZW5ndGgsaT0xO2khPW47KytpKXJbaV09YVtpLTFdO2ZvcihpPW4tMTtpPj0wOy0taSl0PSgoMTYzODQmdD8xOjApfHQ8PDEmMzI3NjcpXnJbaV07cmV0dXJuIDUyODExXnR9KHIucGFzc3dvcmQpKSxhLnZhbGlkPW4u''@;'; put 'put ''dmVyaWZpY2F0aW9uQnl0ZXM9PT1uLnZlcmlmaWVyLGEudmFsaWQmJihhLmluc2l0dT1mdW5jdGlvbihlKXt2YXIgdD0wLHI9Y2YoZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyLGEsbil7dmFyIGkscztmb3Iobnx8KG49dCksYXx8KGE9Y2YoIiIpKSxpPTA7aSE9''@;'; put 'put ''dC5sZW5ndGg7KytpKXM9dFtpXSxuW2ldPXM9MjU1Jigoc149YVtyXSk+PjV8czw8MyksKytyO3JldHVybltuLHIsYV19KDAsYSx0LHIpO3JldHVybiB0PW5bMV0sblswXX19KHIucGFzc3dvcmQpKX0oZSwwLHIsYSksYX19LDQ5OntmOmZ1bmN0aW9uIGh1KGUsdCxyKXt2YXIgYT17ZHlIZWln''@;'; put 'put ''aHQ6ZS5yZWFkX3NoaWZ0KDIpLGZsOmUucmVhZF9zaGlmdCgyKX07c3dpdGNoKHImJnIuYmlmZnx8OCl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpjYXNlIDQ6ZS5sKz0yO2JyZWFrO2RlZmF1bHQ6ZS5sKz0xMH1yZXR1cm4gYS5uYW1lPVJhKGUsMCxyKSxhfX0sNTE6e2Y6dHJ9LDYwOnt9LDYxOntm''@;'; put 'put ''OmZ1bmN0aW9uIGZ1KGUpe3JldHVybntQb3M6W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoMildLERpbTpbZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgyKV0sRmxhZ3M6ZS5yZWFkX3NoaWZ0KDIpLEN1clRhYjplLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLFNlbGVjdGVkOmUucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzplLnJlYWRfc2hpZnQoMil9fX0sNjQ6e2Y6SmV9LDY1OntmOmZ1bmN0aW9uIHV1KCl7fX0sNjY6e2Y6dHJ9LDc3Ont9LDgwOnt9LDgxOnt9LDgyOnt9LDg1OntmOnRyfSw4OTp7fSw5MDp7fSw5MTp7fSw5Mjp7ZjpmdW5jdGlv''@;'; put 'put ''biBKbChlLHQscil7aWYoci5lbmMpcmV0dXJuIGUubCs9dCwiIjt2YXIgYT1lLmwsbj16dChlLDAscik7cmV0dXJuIGUucmVhZF9zaGlmdCh0K2EtZS5sKSxufX0sOTM6e2Y6ZnVuY3Rpb24gVnUoZSx0LHIpe2lmKHImJnIuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBHdShlLHQscil7ZS5sKz00''@;'; put 'put ''O3ZhciBhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTY7dmFyIHM9W107cmV0dXJuIHMucHVzaCgoWHVbYV18fHByKShl''@;'; put 'put ''LHQtPTM2LHIpKSx7Y21vOltuLGEsaV0sZnQ6c319KGUsdCxyKTt2YXIgYT1YcyhlKSxuPWZ1bmN0aW9uIEtsKGUsdCl7Zm9yKHZhciByPWUubCt0LGE9W107ZS5sPHI7KXt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sLT0yO3RyeXthLnB1c2goamxbbl0oZSxyLWUubCkpfWNhdGNoe3JldHVy''@;'; put 'put ''biBlLmw9cixhfX1yZXR1cm4gZS5sIT1yJiYoZS5sPXIpLGF9KGUsdC0yMik7cmV0dXJue2NtbzphLGZ0Om59fX0sOTQ6e30sOTU6e2Y6SmV9LDk2Ont9LDk3Ont9LDk5OntmOkplfSwxMjU6e2Y6UXN9LDEyODp7ZjpmdW5jdGlvbiBBdShlKXtlLmwrPTQ7dmFyIHQ9W2UucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxlLnJlYWRfc2hpZnQoMildO2lmKDAhPT10WzBdJiZ0WzBdLS0sMCE9PXRbMV0mJnRbMV0tLSx0WzBdPjd8fHRbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK3Quam9pbigifCIpKTtyZXR1cm4gdH19LDEyOTp7ZjpmdW5jdGlvbiBabChlLHQscil7dmFyIGE9ciYmOD09''@;'; put 'put ''ci5iaWZmfHwyPT10P2UucmVhZF9zaGlmdCgyKTooZS5sKz10LDApO3JldHVybntmRGlhbG9nOjE2JmEsZkJlbG93OjY0JmEsZlJpZ2h0OjEyOCZhfX19LDEzMDp7Zjp0cn0sMTMxOntmOkplfSwxMzI6e2Y6SmV9LDEzMzp7ZjpmdW5jdGlvbiBRbChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLG49MyZlLnJlYWRfc2hpZnQoMSksaT1lLnJlYWRfc2hpZnQoMSk7c3dpdGNoKGkpe2Nhc2UgMDppPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTppPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6aT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Omk9IlZCQU1vZHVsZSJ9dmFyIHM9UmEo''@;'; put 'put ''ZSwwLHIpO3JldHVybiAwPT09cy5sZW5ndGgmJihzPSJTaGVldDEiKSx7cG9zOmEsaHM6bixkdDppLG5hbWU6c319fSwxMzQ6e30sMTQwOntmOmZ1bmN0aW9uIEp1KGUpe3ZhciByLHQ9WzAsMF07cmV0dXJuIHI9ZS5yZWFkX3NoaWZ0KDIpLHRbMF09eHNbcl18fHIscj1lLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksdFsxXT14c1tyXXx8cix0fX0sMTQxOntmOnRyfSwxNDQ6e30sMTQ2OntmOmZ1bmN0aW9uIFF1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0gPjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSwxNTE6e30sMTUyOnt9LDE1Mzp7fSwxNTQ6e30sMTU1Ont9LDE1Njp7''@;'; put 'put ''Zjp0cn0sMTU3Ont9LDE1ODp7fSwxNjA6e2Y6c2h9LDE2MTp7ZjpmdW5jdGlvbiB0aChlLHQpe3ZhciByPXt9O3JldHVybiB0PDMyfHwoZS5sKz0xNixyLmhlYWRlcj1ncihlKSxyLmZvb3Rlcj1ncihlKSxlLmwrPTIpLHJ9fSwxNzQ6e30sMTc1Ont9LDE3Njp7fSwxNzc6e30sMTc4Ont9LDE4''@;'; put 'put ''MDp7fSwxODE6e30sMTgyOnt9LDE4NDp7fSwxODU6e30sMTg5OntmOmZ1bmN0aW9uIFR1KGUsdCl7Zm9yKHZhciByPWUubCt0LTIsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMiksaT1bXTtlLmw8cjspaS5wdXNoKFdzKGUpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TXVsUksgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMscmtyZWM6aX19fSwxOTA6e2Y6ZnVuY3Rpb24gU3UoZSx0KXtmb3IodmFyIHI9''@;'; put 'put ''ZS5sK3QtMixhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPVtdO2UubDxyOylpLnB1c2goZS5yZWFkX3NoaWZ0KDIpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9''@;'; put 'put ''cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMsaXhmZTppfX19LDE5Mzp7Zjp5dH0sMTk3Ont9LDE5ODp7fSwxOTk6e30sMjAwOnt9LDIwMTp7fSwyMDI6e2Y6SmV9LDIwMzp7fSwyMDQ6e30sMjA1Ont9LDIwNjp7fSwy''@;'; put 'put ''MDc6e30sMjA4Ont9LDIwOTp7fSwyMTA6e30sMjExOnt9LDIxMzp7fSwyMTU6e30sMjE2Ont9LDIxNzp7fSwyMTg6e2Y6dHJ9LDIyMDp7fSwyMjE6e2Y6SmV9LDIyMjp7fSwyMjQ6e2Y6ZnVuY3Rpb24geXUoZSx0LHIpe3ZhciBhPXt9O3JldHVybiBhLmlmbnQ9ZS5yZWFkX3NoaWZ0KDIpLGEu''@;'; put 'put ''bnVtRm10SWQ9ZS5yZWFkX3NoaWZ0KDIpLGEuZmxhZ3M9ZS5yZWFkX3NoaWZ0KDIpLGEuZlN0eWxlPWEuZmxhZ3M+PjImMSxhLmRhdGE9ZnVuY3Rpb24gRnUoZSx0LHIsYSl7dmFyIG49e30saT1lLnJlYWRfc2hpZnQoNCkscz1lLnJlYWRfc2hpZnQoNCksZj1lLnJlYWRfc2hpZnQoNCksYz1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7cmV0dXJuIG4ucGF0dGVyblR5cGU9bmxbZj4+MjZdLGEuY2VsbFN0eWxlcyYmKG4uYWxjPTcmaSxuLmZXcmFwPWk+PjMmMSxuLmFsY1Y9aT4+NCY3LG4uZkp1c3RMYXN0PWk+PjcmMSxuLnRyb3Q9aT4+OCYyNTUsbi5jSW5kZW50PWk+PjE2JjE1LG4uZlNocmlua1Rv''@;'; put 'put ''Rml0PWk+PjIwJjEsbi5pUmVhZE9yZGVyPWk+PjIyJjIsbi5mQXRyTnVtPWk+PjI2JjEsbi5mQXRyRm50PWk+PjI3JjEsbi5mQXRyQWxjPWk+PjI4JjEsbi5mQXRyQmRyPWk+PjI5JjEsbi5mQXRyUGF0PWk+PjMwJjEsbi5mQXRyUHJvdD1pPj4zMSYxLG4uZGdMZWZ0PTE1JnMsbi5kZ1JpZ2h0''@;'; put 'put ''PXM+PjQmMTUsbi5kZ1RvcD1zPj44JjE1LG4uZGdCb3R0b209cz4+MTImMTUsbi5pY3ZMZWZ0PXM+PjE2JjEyNyxuLmljdlJpZ2h0PXM+PjIzJjEyNyxuLmdyYml0RGlhZz1zPj4zMCYzLG4uaWN2VG9wPTEyNyZmLG4uaWN2Qm90dG9tPWY+PjcmMTI3LG4uaWN2RGlhZz1mPj4xNCYxMjcsbi5k''@;'; put 'put ''Z0RpYWc9Zj4+MjEmMTUsbi5pY3ZGb3JlPTEyNyZjLG4uaWN2QmFjaz1jPj43JjEyNyxuLmZzeEJ1dHRvbj1jPj4xNCYxKSxufShlLDAsMCxyKSxhfX0sMjI1OntmOmZ1bmN0aW9uIFlsKGUsdCl7cmV0dXJuIDA9PT10fHxlLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7Zjp5dH0sMjI3Ont9''@;'; put 'put ''LDIyOTp7ZjpmdW5jdGlvbiBXdShlLHQpe2Zvcih2YXIgcj1bXSxhPWUucmVhZF9zaGlmdCgyKTthLS07KXIucHVzaChrMChlKSk7cmV0dXJuIHJ9fSwyMzM6e30sMjM1Ont9LDIzNjp7fSwyMzc6e30sMjM5Ont9LDI0MDp7fSwyNDE6e30sMjQyOnt9LDI0NDp7fSwyNDU6e30sMjQ2Ont9LDI0''@;'; put 'put ''Nzp7fSwyNDg6e30sMjQ5Ont9LDI1MTp7fSwyNTI6e2Y6ZnVuY3Rpb24gcnUoZSx0KXtmb3IodmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTA7cyE9biYmZS5sPHI7KytzKWkucHVzaChSbChlKSk7cmV0dXJuIGkuQ291bnQ9YSxpLlVuaXF1''@;'; put 'put ''ZT1uLGl9fSwyNTM6e2Y6ZnVuY3Rpb24gZHUoZSl7dmFyIHQ9bnQoZSk7cmV0dXJuIHQuaXNzdD1lLnJlYWRfc2hpZnQoNCksdH19LDI1NTp7ZjpmdW5jdGlvbiBhdShlLHQpe3ZhciByPXt9O3JldHVybiByLmRzc3Q9ZS5yZWFkX3NoaWZ0KDIpLGUubCs9dC0yLHJ9fSwyNTY6e30sMjU5Ont9''@;'; put 'put ''LDI5MDp7fSwzMTE6e30sMzEyOnt9LDMxNTp7fSwzMTc6e2Y6YnN9LDMxODp7fSwzMTk6e30sMzIwOnt9LDMzMDp7fSwzMzE6e30sMzMzOnt9LDMzNDp7fSwzMzU6e30sMzM2Ont9LDMzNzp7fSwzMzg6e30sMzM5Ont9LDM0MDp7fSwzNTE6e30sMzUyOntmOkplfSwzNTM6e2Y6eXR9LDQwMTp7''@;'; put 'put ''fSw0MDI6e30sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDI1Ont9LDQyNjp7fSw0Mjc6e30sNDI4Ont9LDQyOTp7fSw0MzA6e2Y6ZnVuY3Rpb24gUnUoZSx0LHIpe3ZhciBhPWUubCt0LG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpO2lmKHIu''@;'; put 'put ''c2JjY2g9aSwxMDI1PT1pfHwxNDg0OT09aSlyZXR1cm5baSxuXTtpZihpPDF8fGk+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIraSk7Zm9yKHZhciBzPUd0KGUsaSksZj1bXTthPmUubDspZi5wdXNoKE5hKGUpKTtyZXR1cm5baSxuLHMsZl19fSw0MzE6''@;'; put 'put ''e2Y6SmV9LDQzMjp7fSw0MzM6e30sNDM0Ont9LDQzNzp7fSw0Mzg6e2Y6ZnVuY3Rpb24genUoZSx0LHIpe3ZhciBhPWUubCxuPSIiO3RyeXtlLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoci5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9lLmwrPTY6ZnVuY3Rpb24g''@;'; put 'put ''YmwoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO2UubCsrO3ZhciByPWUucmVhZF9zaGlmdCgyKTtlLmwrPTJ9KGUpO3ZhciBmPWUucmVhZF9zaGlmdCgyKTtlLnJlYWRfc2hpZnQoMiksdHIoZSk7dmFyIGM9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Yztmb3IodmFyIG89MTtvPGUubGVucy5sZW5n''@;'; put 'put ''dGgtMTsrK28pe2lmKGUubC1hIT1lLmxlbnNbb10pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbD1lW2UubF07aWYoKG4rPUd0KGUsZS5sZW5zW28rMV0tZS5sZW5zW29dLTEpKS5sZW5ndGg+PShsP2Y6MipmKSlicmVha31pZihuLmxlbmd0aCE9PWYm''@;'; put 'put ''Jm4ubGVuZ3RoIT09MipmKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitmKyIgIT0gIituLmxlbmd0aCk7cmV0dXJuIGUubD1hK3Qse3Q6bn19Y2F0Y2h7cmV0dXJuIGUubD1hK3Qse3Q6bn19fX0sNDM5OntmOkplfSw0NDA6e2Y6ZnVuY3Rpb24gJHUoZSx0KXt2YXIgcj1rMChlKTtlLmwr''@;'; put 'put ''PTE2O3ZhciBhPWZ1bmN0aW9uIE1sKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCk7aWYoMiE9PWEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIithKTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sKz0yO3ZhciBpLHMsZixjLGwsaCxvPSIi''@;'; put 'put ''OzE2Jm4mJihpPXcwKGUpKSwxMjgmbiYmKHM9dzAoZSkpLCEoMjU3Jn5uKSYmKGY9dzAoZSkpLDE9PSgyNTcmbikmJihjPWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2gocil7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIFBsKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KSxyPWUubCxhPSExO3Q+MjQmJihlLmwrPXQtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PWUucmVhZF9zaGlmdCgxNikmJihhPSEwKSxlLmw9cik7dmFyIG49ZS5yZWFkX3NoaWZ0KChhP3QtMjQ6dCk+''@;'; put 'put ''PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKTtyZXR1cm4gYSYmKGUubCs9MjQpLG59KGUpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBMbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9IiI7dC0tID4wOylyKz0iLi4vIjt2''@;'; put 'put ''YXIgYT1lLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKGUubCs9Miw1NzAwNSE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PWUucmVhZF9zaGlmdCg0KSlyZXR1cm4gcithLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgaT1lLnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7aWYoMyE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIHIrZS5yZWFkX3NoaWZ0KGk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKX0oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1v''@;'; put 'put ''bmlrZXIgIityKX19KGUpKSw4Jm4mJihvPXcwKGUpKSwzMiZuJiYobD1lLnJlYWRfc2hpZnQoMTYpKSw2NCZuJiYoaD13bihlKSksZS5sPXI7dmFyIHg9c3x8Znx8Y3x8IiI7eCYmbyYmKHgrPSIjIitvKSx4fHwoeD0iIyIrbyksMiZuJiYiLyI9PXguY2hhckF0KDApJiYiLyIhPXguY2hhckF0''@;'; put 'put ''KDEpJiYoeD0iZmlsZTovLyIreCk7dmFyIGQ9e1RhcmdldDp4fTtyZXR1cm4gbCYmKGQuZ3VpZD1sKSxoJiYoZC50aW1lPWgpLGkmJihkLlRvb2x0aXA9aSksZH0oZSx0LTI0KTtyZXR1cm5bcixhXX19LDQ0MTp7fSw0NDI6e2Y6TmF9LDQ0Mzp7fSw0NDQ6e2Y6dHJ9LDQ0NTp7fSw0NDY6e30s''@;'; put 'put ''NDQ4OntmOnl0fSw0NDk6e2Y6ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntmOnl0fSw1MTI6e2Y6enN9LDUxMzp7ZjppaH0sNTE1OntmOmZ1bmN0aW9uIE91KGUsdCxyKXtyLmJpZmZndWVzcyYmMj09ci5iaWZmJiYoci5i''@;'; put 'put ''aWZmPTUpO3ZhciBhPW50KGUpLG49Z3IoZSk7cmV0dXJuIGEudmFsPW4sYX19LDUxNjp7ZjpmdW5jdGlvbiBwdShlLHQscil7ci5iaWZmZ3Vlc3MmJjI9PXIuYmlmZiYmKHIuYmlmZj01KTt2YXIgbj1udChlKTsyPT1yLmJpZmYmJmUubCsrO3ZhciBpPU5hKGUsMCxyKTtyZXR1cm4gbi52YWw9''@;'; put 'put ''aSxufX0sNTE3OntmOmpzfSw1MTk6e2Y6Zmh9LDUyMDp7ZjpmdW5jdGlvbiBudShlKXt2YXIgdD17fTt0LnI9ZS5yZWFkX3NoaWZ0KDIpLHQuYz1lLnJlYWRfc2hpZnQoMiksdC5jbnQ9ZS5yZWFkX3NoaWZ0KDIpLXQuYzt2YXIgcj1lLnJlYWRfc2hpZnQoMik7ZS5sKz00O3ZhciBhPWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtyZXR1cm4gZS5sKz0zLDcmYSYmKHQubGV2ZWw9NyZhKSwzMiZhJiYodC5oaWRkZW49ITApLDY0JmEmJih0LmhwdD1yLzIwKSx0fX0sNTIzOnt9LDU0NTp7Zjpac30sNTQ5OntmOkdzfSw1NjY6e30sNTc0OntmOmZ1bmN0aW9uIG91KGUsdCxyKXtyZXR1cm4gciYmci5iaWZm''@;'; put 'put ''Pj0yJiZyLmJpZmY8NT97fTp7UlRMOjY0JmUucmVhZF9zaGlmdCgyKX19fSw2Mzg6e2Y6ZnVuY3Rpb24gRXUoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9V3MoZSk7cmV0dXJue3I6dCxjOnIsaXhmZTphWzBdLHJrbnVtOmFbMV19fX0sNjU5Ont9LDEwNDg6''@;'; put 'put ''e30sMTA1NDp7ZjpmdW5jdGlvbiBndShlLHQscil7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx6dChlLDAscildfX0sMTA4NDp7fSwxMjEyOntmOmZ1bmN0aW9uIEx1KGUsdCxyKXt2YXIgYT1WcyhlKTtlLmwrKzt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1lkKGUsdC09OCxyKSxuLGFd''@;'; put 'put ''fX0sMjA0ODp7ZjpmdW5jdGlvbiBLdShlLHQpe2UucmVhZF9zaGlmdCgyKTt2YXIgcj1rMChlKSxhPWUucmVhZF9zaGlmdCgodC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW3IsYT1hLnJlcGxhY2UoZHIsIiIpXX19LDIwNDk6e30sMjA1MDp7fSwyMDUxOnt9LDIwNTI6e30sMjA1Mzp7fSwy''@;'; put 'put ''MDU0Ont9LDIwNTU6e30sMjA1Njp7fSwyMDU3OntmOkUwfSwyMDU4Ont9LDIwNTk6e30sMjA2MDp7fSwyMDYxOnt9LDIwNjI6e30sMjA2Mzp7fSwyMDY0Ont9LDIwNjY6e30sMjA2Nzp7fSwyMTI4Ont9LDIxMjk6e30sMjEzMDp7fSwyMTMxOnt9LDIxMzI6e30sMjEzMzp7fSwyMTM0Ont9LDIx''@;'; put 'put ''MzU6e30sMjEzNjp7fSwyMTM3Ont9LDIxMzg6e30sMjE0Njp7fSwyMTQ3OntyOjEyfSwyMTQ4Ont9LDIxNDk6e30sMjE1MDp7fSwyMTUxOntmOnl0fSwyMTUyOnt9LDIxNTQ6e30sMjE1NTp7fSwyMTU2Ont9LDIxNjE6e30sMjE2Mjp7fSwyMTY0Ont9LDIxNjU6e30sMjE2Njp7fSwyMTY3Ont9''@;'; put 'put ''LDIxNjg6e30sMjE2OTp7fSwyMTcwOnt9LDIxNzE6e30sMjE3Mjp7ZjpmdW5jdGlvbiBlaChlKXtlLmwrPTI7dmFyIHQ9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIHQuY3hmcz1lLnJlYWRfc2hpZnQoMiksdC5jcmM9ZS5yZWFkX3NoaWZ0KDQpLHR9LHI6MTJ9LDIxNzM6e2Y6ZnVuY3Rpb24gSjEo''@;'; put 'put ''ZSx0KXtlLmwrPTI7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Mjtmb3IodmFyIG49ZS5yZWFkX3NoaWZ0KDIpLGk9W107bi0tID4wOylpLnB1c2goWTEoZSkpO3JldHVybntpeGZlOmEsZXh0Oml9fSxyOjEyfSwyMTc0Ont9LDIxNzU6e30sMjE4MDp7fSwyMTgxOnt9LDIxODI6e30sMjE4''@;'; put 'put ''Mzp7fSwyMTg0Ont9LDIxODU6e30sMjE4Njp7fSwyMTg3Ont9LDIxODg6e2Y6SmUscjoxMn0sMjE4OTp7fSwyMTkwOntyOjEyfSwyMTkxOnt9LDIxOTI6e30sMjE5NDp7fSwyMTk1Ont9LDIxOTY6e2Y6ZnVuY3Rpb24gUHUoZSx0LHIpe2lmKCEoci5iaWZmPDgpKXt2YXIgYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuW0d0KGUsYSxyKSxHdChlLG4scildfWUubCs9dH0scjoxMn0sMjE5Nzp7fSwyMTk4OntmOmZ1bmN0aW9uIEcxKGUsdCxyKXt2YXIgYT1lLmwrdDtpZigxMjQyMjYhPT1lLnJlYWRfc2hpZnQoNCkpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJu''@;'; put 'put ''IHZvaWQoZS5sPWEpO3ZhciBzLGk9ZS5zbGljZShlLmwpO2UubD1hO3RyeXtzPVJpKGkse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgZj1OcihzLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYoZilyZXR1cm4gdmYoZixyKX19LHI6MTJ9LDIxOTk6e30sMjIwMDp7fSwy''@;'; put 'put ''MjAxOnt9LDIyMDI6e2Y6ZnVuY3Rpb24gQnUoZSl7cmV0dXJuWzAhPT1lLnJlYWRfc2hpZnQoNCksMCE9PWUucmVhZF9zaGlmdCg0KSxlLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntmOnl0fSwyMjA0Ont9LDIyMDU6e30sMjIwNjp7fSwyMjA3Ont9LDIyMTE6e2Y6ZnVuY3Rpb24gaXUo''@;'; put 'put ''ZSl7dmFyIHQ9ZnVuY3Rpb24gV2woZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTgse3R5cGU6dCxmbGFnczpyfX0oZSk7aWYoMjIxMSE9dC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrdC50eXBlKTty''@;'; put 'put ''ZXR1cm4gMCE9PWUucmVhZF9zaGlmdCg0KX19LDIyMTI6e30sMjIxMzp7fSwyMjE0Ont9LDIyMTU6e30sNDA5Nzp7fSw0MDk4Ont9LDQwOTk6e30sNDEwMjp7fSw0MTAzOnt9LDQxMDU6e30sNDEwNjp7fSw0MTA3Ont9LDQxMDg6e30sNDEwOTp7fSw0MTE2Ont9LDQxMTc6e30sNDExODp7fSw0''@;'; put 'put ''MTE5Ont9LDQxMjA6e30sNDEyMTp7fSw0MTIyOnt9LDQxMjM6e30sNDEyNDp7fSw0MTI1Ont9LDQxMjY6e30sNDEyNzp7fSw0MTI4Ont9LDQxMjk6e30sNDEzMDp7fSw0MTMyOnt9LDQxMzM6e30sNDEzNDp7Zjp0cn0sNDEzNTp7fSw0MTQ2Ont9LDQxNDc6e30sNDE0ODp7fSw0MTQ5Ont9LDQx''@;'; put 'put ''NTQ6e30sNDE1Njp7fSw0MTU3Ont9LDQxNTg6e30sNDE1OTp7fSw0MTYwOnt9LDQxNjE6e30sNDE2Mzp7fSw0MTY0OntmOmZ1bmN0aW9uIGFoKGUsdCxyKXt2YXIgYT17YXJlYTohMX07aWYoNSE9ci5iaWZmKXJldHVybiBlLmwrPXQsYTt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUu''@;'; put 'put ''bCs9MywxNiZuJiYoYS5hcmVhPSEwKSxhfX0sNDE2NTp7fSw0MTY2Ont9LDQxNjg6e30sNDE3MDp7fSw0MTcxOnt9LDQxNzQ6e30sNDE3NTp7fSw0MTc2Ont9LDQxNzc6e30sNDE4Nzp7fSw0MTg4OntmOmZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0g''@;'; put 'put ''PjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSw0MTg5Ont9LDQxOTE6e30sNDE5Mjp7fSw0MTkzOnt9LDQxOTQ6e30sNDE5NTp7fSw0MTk2Ont9LDQxOTc6e30sNDE5ODp7fSw0MTk5Ont9LDQyMDA6e30sMDp7Zjp6c30sMTp7fSwyOntmOmZ1bmN0aW9uIGhoKGUpe3ZhciB0PW50KGUpOysr''@;'; put 'put ''ZS5sO3ZhciByPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gdC50PSJuIix0LnZhbD1yLHR9fSwzOntmOmZ1bmN0aW9uIGxoKGUpe3ZhciB0PW50KGUpOysrZS5sO3ZhciByPWdyKGUpO3JldHVybiB0LnQ9Im4iLHQudmFsPXIsdH19LDQ6e2Y6ZnVuY3Rpb24gb2goZSx0LHIpe3IuYmlmZmd1ZXNz''@;'; put 'put ''JiY1PT1yLmJpZmYmJihyLmJpZmY9Mik7dmFyIGE9bnQoZSk7KytlLmw7dmFyIG49enQoZSwwLHIpO3JldHVybiBhLnQ9InN0ciIsYS52YWw9bixhfX0sNTp7Zjpqc30sNzp7ZjpmdW5jdGlvbiBkaChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT10PyhlLmwrKywiIik6ZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KHQsInNiY3MtY29udCIpfX0sODp7fSw5OntmOkUwfSwxMTp7fSwyMjp7Zjp0cn0sMzA6e2Y6d3V9LDMxOnt9LDMyOnt9LDMzOntmOlpzfSwzNjp7fSwzNzp7ZjpHc30sNTA6e2Y6ZnVuY3Rpb24gdmgoZSx0KXtlLmwrPTYsZS5sKz0yLGUubCs9MSxlLmwrPTMsZS5sKz0xLGUu''@;'; put 'put ''bCs9dC0xM319LDYyOnt9LDUyOnt9LDY3Ont9LDY4OntmOnRyfSw2OTp7fSw4Njp7fSwxMjY6e30sMTI3OntmOmZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPXtmbXQ6dCxlbnY6cixsZW46YSxkYXRhOmUu''@;'; put 'put ''c2xpY2UoZS5sLGUubCthKX07cmV0dXJuIGUubCs9YSxufX0sMTM1Ont9LDEzNjp7fSwxMzc6e30sMTQ1Ont9LDE0ODp7fSwxNDk6e30sMTUwOnt9LDE2OTp7fSwxNzE6e30sMTg4Ont9LDE5MTp7fSwxOTI6e30sMTk0Ont9LDE5NTp7fSwyMTQ6e2Y6ZnVuY3Rpb24gcGgoZSx0LHIpe3ZhciBh''@;'; put 'put ''PWUubCt0LG49bnQoZSksaT1lLnJlYWRfc2hpZnQoMikscz1HdChlLGkscik7cmV0dXJuIGUubD1hLG4udD0ic3RyIixuLnZhbD1zLG59fSwyMjM6e30sMjM0Ont9LDM1NDp7fSw0MjE6e30sNTE4OntmOk5ufSw1MjE6e2Y6RTB9LDUzNjp7ZjpKc30sNTQ3OntmOllzfSw1NjE6e30sNTc5Ont9''@;'; put 'put ''LDEwMzA6e2Y6Tm59LDEwMzM6e2Y6RTB9LDEwOTE6e30sMjE1Nzp7fSwyMTYzOnt9LDIxNzc6e30sMjI0MDp7fSwyMjQxOnt9LDIyNDI6e30sMjI0Mzp7fSwyMjQ0Ont9LDIyNDU6e30sMjI0Njp7fSwyMjQ3Ont9LDIyNDg6e30sMjI0OTp7fSwyMjUwOnt9LDIyNTE6e30sMjI2Mjp7cjoxMn0s''@;'; put 'put ''MjkyODI6e319O2Z1bmN0aW9uIGFlKGUsdCxyLGEpe3ZhciBuPXQ7aWYoIWlzTmFOKG4pKXt2YXIgaT1hfHwocnx8W10pLmxlbmd0aHx8MCxzPWUubmV4dCg0KTtzLndyaXRlX3NoaWZ0KDIsbikscy53cml0ZV9zaGlmdCgyLGkpLGk+MCYmcm4ocikmJmUucHVzaChyKX19ZnVuY3Rpb24gSmYo''@;'; put 'put ''ZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5zZSYmKHIuZGVuc2U9emUpO3ZhciBhPXIuZGVuc2U/W106e30sbj0oZT1lLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNv''@;'; put 'put ''dWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgaT1lLm1hdGNoKC88XC90YWJsZS9pKSxzPW4uaW5kZXgsZj1pJiZpLmluZGV4fHxlLmxlbmd0aCxjPXZvKGUuc2xpY2UocyxmKSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+Iiksbz0tMSxsPTAsaD0wLHg9MCxkPXtzOntyOjFlNyxjOjFlN30sZTp7''@;'; put 'put ''cjowLGM6MH19LHY9W107Zm9yKHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIHU9Y1tzXS50cmltKCkscD11LnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9cCl7aWYoIjx0ZCI9PXB8fCI8dGgiPT1wKXt2YXIgaz11LnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGY9MDtmPGsubGVu''@;'; put 'put ''Z3RoOysrZil7dmFyIFQ9a1tmXS50cmltKCk7aWYoVC5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIGc9VCxOPTA7IjwiPT1nLmNoYXJBdCgwKSYmKE49Zy5pbmRleE9mKCI+IikpPi0xOylnPWcuc2xpY2UoTisxKTtmb3IodmFyIE09MDtNPHYubGVuZ3RoOysrTSl7dmFyIEk9dltNXTtJLnMu''@;'; put 'put ''Yz09bCYmSS5zLnI8byYmbzw9SS5lLnImJihsPUkuZS5jKzEsTT0tMSl9dmFyIHk9bWUoVC5zbGljZSgwLFQuaW5kZXhPZigiPiIpKSk7eD15LmNvbHNwYW4/K3kuY29sc3BhbjoxLCgoaD0reS5yb3dzcGFuKT4xfHx4PjEpJiZ2LnB1c2goe3M6e3I6byxjOmx9LGU6e3I6bysoaHx8MSktMSxj''@;'; put 'put ''OmwreC0xfX0pO3ZhciBQPXkudHx8eVsiZGF0YS10Il18fCIiO2lmKCFnLmxlbmd0aCl7bCs9eDtjb250aW51ZX1pZihnPVdpKGcpLGQucy5yPm8mJihkLnMucj1vKSxkLmUucjxvJiYoZC5lLnI9byksZC5zLmM+bCYmKGQucy5jPWwpLGQuZS5jPGwmJihkLmUuYz1sKSwhZy5sZW5ndGgpe2wr''@;'; put 'put ''PXg7Y29udGludWV9dmFyIFI9e3Q6InMiLHY6Z307ci5yYXd8fCFnLnRyaW0oKS5sZW5ndGh8fCJzIj09UHx8KCJUUlVFIj09PWc/Uj17dDoiYiIsdjohMH06IkZBTFNFIj09PWc/Uj17dDoiYiIsdjohMX06aXNOYU4oSnIoZykpP2lzTmFOKGFhKGcpLmdldERhdGUoKSl8fChSPXt0OiJkIix2''@;'; put 'put ''OlhlKGcpfSxyLmNlbGxEYXRlc3x8KFI9e3Q6Im4iLHY6aXIoUi52KX0pLFIuej1yLmRhdGVORnx8cGVbMTRdKTpSPXt0OiJuIix2OkpyKGcpfSksci5kZW5zZT8oYVtvXXx8KGFbb109W10pLGFbb11bbF09Uik6YVtnZSh7cjpvLGM6bH0pXT1SLGwrPXh9fX19ZWxzZXtpZigrK28sci5zaGVl''@;'; put 'put ''dFJvd3MmJnIuc2hlZXRSb3dzPD1vKXstLW87YnJlYWt9bD0wfX1yZXR1cm4gYVsiIXJlZiJdPXdlKGQpLHYubGVuZ3RoJiYoYVsiIW1lcmdlcyJdPXYpLGF9ZnVuY3Rpb24gUm0oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5y''@;'; put 'put ''ZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oYSxuKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQobiwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88''@;'; put 'put ''dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIik7cmV0dXJuW0llKHQucmVwbGFjZSgvPFtePl0qPi9nLCIiKSldfXZhciBpYz17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpb''@;'; put 'put ''InMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX07ZnVuY3Rpb24gc2MoZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5z''@;'; put 'put ''ZSYmKHIuZGVuc2U9emUpO3ZhciBpLHMsbCxoLHUscCxhPVkwKGUpLG49W10sZj17bmFtZToiIn0sYz0iIixvPTAseD17fSxkPVtdLHY9ci5kZW5zZT9bXTp7fSxrPXt2YWx1ZToiIn0sVD0iIixnPTAsTT1bXSxJPS0xLHk9LTEsUD17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxSPTAs''@;'; put 'put ''Vj17fSxYPVtdLGI9e30sZWU9MCxsZT0wLHJlPVtdLGRlPTEsdWU9MSxGZT1bXSxjZT17TmFtZXM6W119LHhlPXt9LEs9WyIiLCIiXSxDPVtdLFU9e30sTz0iIixEPTAsaj0hMSxzZT0hMSxaPTA7Zm9yKHlhLmxhc3RJbmRleD0wLGE9YS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwi''@;'; put 'put ''IikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO3U9eWEuZXhlYyhhKTspc3dpdGNoKHVbM109dVszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT11WzFdPyh2WyIhcmVmIl09UC5lLmM+PVAu''@;'; put 'put ''cy5jJiZQLmUucj49UC5zLnI/d2UoUCk6IkExOkExIixyLnNoZWV0Um93cz4wJiZyLnNoZWV0Um93czw9UC5lLnImJih2WyIhZnVsbHJlZiJdPXZbIiFyZWYiXSxQLmUucj1yLnNoZWV0Um93cy0xLHZbIiFyZWYiXT13ZShQKSksWC5sZW5ndGgmJih2WyIhbWVyZ2VzIl09WCkscmUubGVuZ3Ro''@;'; put 'put ''JiYodlsiIXJvd3MiXT1yZSksbC5uYW1lPWwuXHU1NDBkXHU3OWYwfHxsLm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShsKSxkLnB1c2gobC5uYW1lKSx4W2wubmFtZV09dixzZT0hMSk6Ii8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihsPW1lKHVbMF0sITEp''@;'; put 'put ''LEk9eT0tMSxQLnMucj1QLnMuYz0xZTcsUC5lLnI9UC5lLmM9MCx2PXIuZGVuc2U/W106e30sWD1bXSxyZT1bXSxzZT0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PXVbMV0/LS1SOisrUjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PXVb''@;'; put 'put ''MV0pe0krPWRlLGRlPTE7YnJlYWt9aWYoKGg9bWUodVswXSwhMSkpLlx1ODg0Y1x1NTNmNz9JPWguXHU4ODRjXHU1M2Y3LTE6LTE9PUkmJihJPTApLChkZT0raFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKFo9MDtaPGRlOysrWilSPjAmJihyZVtJK1pdPXtsZXZlbDpSfSk7''@;'; put 'put ''eT0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09dVsxXSYmKyt5LHIuc2hlZXRTdHVicyYmKHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXt0OiJ6In0pOnZbZ2Uoe3I6SSxjOnl9KV09e3Q6InoifSksVD0iIixNPVtdO2JyZWFrO2Nhc2UidGFibGUtY2Vs''@;'; put 'put ''bCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PXVbMF0uY2hhckF0KHVbMF0ubGVuZ3RoLTIpKSsreSxrPW1lKHVbMF0sITEpLHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkscD17dDoieiIsdjpudWxsfSxrLmZvcm11bGEmJjAhPXIuY2VsbEZv''@;'; put 'put ''cm11bGEmJihwLmY9TmYoSWUoay5mb3JtdWxhKSkpLCJzdHJpbmciPT0oay5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGtbInZhbHVlLXR5cGUiXSkmJihwLnQ9InMiLHAudj1JZShrWyJzdHJpbmctdmFsdWUiXXx8IiIpLHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXApOnZb''@;'; put 'put ''Z2Uoe3I6SSxjOnl9KV09cCkseSs9dWUtMTtlbHNlIGlmKCIvIiE9PXVbMV0pe1Q9IiIsZz0wLE09W10sdWU9MTt2YXIgUT1kZT9JK2RlLTE6STtpZigrK3k+UC5lLmMmJihQLmUuYz15KSx5PFAucy5jJiYoUC5zLmM9eSksSTxQLnMuciYmKFAucy5yPUkpLFE+UC5lLnImJihQLmUucj1RKSxD''@;'; put 'put ''PVtdLFU9e30scD17dDooaz1tZSh1WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxrWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxyLmNlbGxGb3JtdWxhKWlmKGsuZm9ybXVsYSYmKGsuZm9ybXVsYT1JZShrLmZvcm11bGEpKSxrWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5l''@;'; put 'put ''ZCJdJiZrWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoZWU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsbGU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAscC5GPXdlKGI9e3M6e3I6SSxjOnl9''@;'; put 'put ''LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pLEZlLnB1c2goW2IscC5GXSkpLGsuZm9ybXVsYSlwLmY9TmYoay5mb3JtdWxhKTtlbHNlIGZvcihaPTA7WjxGZS5sZW5ndGg7KytaKUk+PUZlW1pdWzBdLnMuciYmSTw9RmVbWl1bMF0uZS5yJiZ5Pj1GZVtaXVswXS5zLmMmJnk8PUZlW1pdWzBdLmUu''@;'; put 'put ''YyYmKHAuRj1GZVtaXVsxXSk7c3dpdGNoKChrWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fGtbIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihlZT1wYXJzZUludChrWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLGxlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXNwYW5uZWQi''@;'; put 'put ''XSwxMCl8fDAsWC5wdXNoKGI9e3M6e3I6SSxjOnl9LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pKSxrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYodWU9cGFyc2VJbnQoa1sibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLHAudCl7Y2FzZSJib29sZWFuIjpwLnQ9ImIiLHAudj1X''@;'; put 'put ''ZShrWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6cC50PSJuIixwLnY9cGFyc2VGbG9hdChrLnZhbHVlKTticmVhaztjYXNlImRhdGUiOnAudD0iZCIscC52PVhlKGtbImRhdGUtdmFsdWUiXSksci5jZWxsRGF0ZXN8''@;'; put 'put ''fChwLnQ9Im4iLHAudj1pcihwLnYpKSxwLno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpwLnQ9Im4iLHAudj11byhrWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLHIuY2VsbERhdGVzJiYocC50PSJkIixwLnY9bzAocC52KSkscC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOnAudD0i''@;'; put 'put ''biIscC52PXBhcnNlRmxvYXQoay5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1wLnQmJiJ0ZXh0IiE9PXAudCYmcC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK3AudCk7cC50PSJzIixudWxsIT1rWyJzdHJp''@;'; put 'put ''bmctdmFsdWUiXSYmKFQ9SWUoa1sic3RyaW5nLXZhbHVlIl0pLE09W10pfX1lbHNle2lmKGo9ITEsInMiPT09cC50JiYocC52PVR8fCIiLE0ubGVuZ3RoJiYocC5SPU0pLGo9MD09ZykseGUuVGFyZ2V0JiYocC5sPXhlKSxDLmxlbmd0aD4wJiYocC5jPUMsQz1bXSksVCYmITEhPT1yLmNlbGxU''@;'; put 'put ''ZXh0JiYocC53PVQpLGomJihwLnQ9InoiLGRlbGV0ZSBwLnYpLCghanx8ci5zaGVldFN0dWJzKSYmIShyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PUkpKWZvcih2YXIgWT0wO1k8ZGU7KytZKXtpZih1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLHIu''@;'; put 'put ''ZGVuc2UpZm9yKHZbSStZXXx8KHZbSStZXT1bXSksdltJK1ldW3ldPTA9PVk/cDpNZShwKTstLXVlPjA7KXZbSStZXVt5K3VlXT1NZShwKTtlbHNlIGZvcih2W2dlKHtyOkkrWSxjOnl9KV09cDstLXVlPjA7KXZbZ2Uoe3I6SStZLGM6eSt1ZX0pXT1NZShwKTtQLmUuYzw9eSYmKFAuZS5jPXkp''@;'; put 'put ''fXkrPSh1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLHVlPTAscD17fSxUPSIiLE09W119eGU9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1''@;'; put 'put ''Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PXVbMV0pe2lmKChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3Rh''@;'; put 'put ''dGU6ICIraX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpO1UudD1ULE0ubGVuZ3RoJiYo''@;'; put 'put ''VS5SPU0pLFUuYT1PLEMucHVzaChVKX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMV0pO089IiIsRD0wLFQ9IiIsZz0wLE09W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT11WzFdP089YS5zbGljZShELHUuaW5kZXgpOkQ9dS5pbmRleCt1''@;'; put 'put ''WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0t''@;'; put 'put ''bWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6''@;'; put 'put ''aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCExXSk7VD0iIixnPTAsTT1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNl''@;'; put 'put ''ImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJzdHlsZSI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNl''@;'; put 'put ''IjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4t''@;'; put 'put ''c3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1j''@;'; put 'put ''b2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNl''@;'; put 'put ''ImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2Ui''@;'; put 'put ''bGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6''@;'; put 'put ''Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZp''@;'; put 'put ''bHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0''@;'; put 'put ''aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRl''@;'; put 'put ''ci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJm''@;'; put 'put ''aWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3Rp''@;'; put 'put ''YyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0''@;'; put 'put ''aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJk''@;'; put 'put ''YXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBp''@;'; put 'put ''bG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6''@;'; put 'put ''Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNv''@;'; put 'put ''bW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PXVbMV0pe2lmKFZbZi5uYW1lXT1jLChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3RhdGU6ICIr''@;'; put 'put ''aX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihjPSIiLGY9bWUodVswXSwhMSksbi5wdXNoKFt1WzNdLCEwXSkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3''@;'; put 'put ''ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChuW24ubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6cz1tZSh1WzBdLCExKSxjKz1pY1t1WzNdXVsi''@;'; put 'put ''bG9uZyI9PT1zLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09dVswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09dVsxXSlzd2l0Y2gobltuLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpjKz1h''@;'; put 'put ''LnNsaWNlKG8sdS5pbmRleCl9ZWxzZSBvPXUuaW5kZXgrdVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Sz1ibigocz1tZSh1WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgRWU9e05hbWU6cy5uYW1lLFJlZjpLWzBdKyIhIitLWzFdfTtzZSYmKEVlLlNoZWV0''@;'; put 'put ''PWQubGVuZ3RoKSxjZS5OYW1lcy5wdXNoKEVlKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKG5bbi5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PXVbMV18fGsmJmtbInN0cmluZy12YWx1ZSJdKW1lKHVb''@;'; put 'put ''MF0sITEpLGc9dS5pbmRleCt1WzBdLmxlbmd0aDtlbHNle3ZhciBBPVJtKGEuc2xpY2UoZyx1LmluZGV4KSk7VD0oVC5sZW5ndGg+MD9UKyJcbiI6IiIpK0FbMF19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09dVsxXSlicmVhazt0cnl7eFsoSz1ibihtZSh1WzBdKVsidGFy''@;'; put 'put ''Z2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOktbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PXVbMV0pe2lmKCEoeGU9bWUodVswXSwhMSkpLmhyZWYpYnJlYWs7eGUuVGFyZ2V0PUllKHhlLmhyZWYpLGRlbGV0ZSB4ZS5ocmVmLCIjIj09eGUu''@;'; put 'put ''VGFyZ2V0LmNoYXJBdCgwKSYmeGUuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oSz1ibih4ZS5UYXJnZXQuc2xpY2UoMSkpLHhlLlRhcmdldD0iIyIrS1swXSsiISIrS1sxXSk6eGUuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYoeGUuVGFyZ2V0PXhlLlRhcmdldC5zbGljZSgzKSl9YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpzd2l0Y2godVsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6Ijpj''@;'; put 'put ''YXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKHUpfX12YXIgUGU9e1NoZWV0czp4LFNoZWV0TmFtZXM6ZCxXb3JrYm9vazpjZX07cmV0dXJuIHIuYm9va1NoZWV0cyYmZGVsZXRlIFBlLlNoZWV0cyxQZX1mdW5jdGlvbiBjYyhlLHQpe3JldHVybiBz''@;'; put 'put ''YyhlLHQpfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBuZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHR5cGVvZiBUZXh0RGVjb2RlcjwidSI/KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGUpOkJlKHd0KGUpKX1mdW5j''@;'; put 'put ''dGlvbiBEdChlKXt2YXIgdD1lLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuK2kubGVuZ3RofSwwKSxyPW5ldyBVaW50OEFycmF5KHQpLGE9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Iuc2V0KG4sYSksYSs9bi5sZW5ndGh9KSxyfWZ1bmN0aW9uIHVjKGUpe3JldHVybiAx''@;'; put 'put ''Njg0MzAwOSooKGU9KDg1ODk5MzQ1OSYoZS09ZT4+MSYxNDMxNjU1NzY1KSkrKGU+PjImODU4OTkzNDU5KSkrKGU+PjQpJjI1MjY0NTEzNSk+Pj4yNH1mdW5jdGlvbiBLYShlLHQpe3ZhciByPXQ/dFswXTowLGE9MTI3JmVbcl07ZTppZihlW3IrK10+PTEyOCYmKGF8PSgxMjcmZVtyXSk8PDcs''@;'; put 'put ''ZVtyKytdPDEyOHx8KGF8PSgxMjcmZVtyXSk8PDE0LGVbcisrXTwxMjgpfHwoYXw9KDEyNyZlW3JdKTw8MjEsZVtyKytdPDEyOCl8fChhKz0oMTI3JmVbcl0pKk1hdGgucG93KDIsMjgpLCsrcixlW3IrK108MTI4KXx8KGErPSgxMjcmZVtyXSkqTWF0aC5wb3coMiwzNSksKytyLGVbcisrXTwx''@;'; put 'put ''MjgpfHwoYSs9KDEyNyZlW3JdKSpNYXRoLnBvdygyLDQyKSwrK3IsZVtyKytdPDEyOCkpKWJyZWFrIGU7cmV0dXJuIHQmJih0WzBdPXIpLGF9ZnVuY3Rpb24gWWUoZSl7dmFyIHQ9MCxyPTEyNyZlW3RdO2U6aWYoZVt0KytdPj0xMjgpe2lmKHJ8PSgxMjcmZVt0XSk8PDcsZVt0KytdPDEyOHx8''@;'; put 'put ''KHJ8PSgxMjcmZVt0XSk8PDE0LGVbdCsrXTwxMjgpfHwocnw9KDEyNyZlW3RdKTw8MjEsZVt0KytdPDEyOCkpYnJlYWsgZTtyfD0oMTI3JmVbdF0pPDwyOH1yZXR1cm4gcn1mdW5jdGlvbiBSZShlKXtmb3IodmFyIHQ9W10scj1bMF07clswXTxlLmxlbmd0aDspe3ZhciBmLGE9clswXSxuPUth''@;'; put 'put ''KGUsciksaT03Jm4scz0wO2lmKDA9PShuPU1hdGguZmxvb3Iobi84KSkpYnJlYWs7c3dpdGNoKGkpe2Nhc2UgMDpmb3IodmFyIGM9clswXTtlW3JbMF0rK10+PTEyODspO2Y9ZS5zbGljZShjLHJbMF0pO2JyZWFrO2Nhc2UgNTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTQpKSxyWzBdKz1zO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTgpKSxyWzBdKz1zO2JyZWFrO2Nhc2UgMjpzPUthKGUsciksZj1lLnNsaWNlKHJbMF0sclswXStzKSxyWzBdKz1zO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJQQiBUeXBlICIuY29uY2F0KGksIiBmb3IgRmllbGQgIiku''@;'; put 'put ''Y29uY2F0KG4sIiBhdCBvZmZzZXQgIikuY29uY2F0KGEpKX12YXIgbz17ZGF0YTpmLHR5cGU6aX07bnVsbD09dFtuXT90W25dPVtvXTp0W25dLnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4gZT8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB0KHIuZGF0YSl9KXx8W119''@;'; put 'put ''ZnVuY3Rpb24gTW0oZSx0KXtpZigwIT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTbmFwcHkgY2h1bmsgdHlwZSAiLmNvbmNhdChlKSk7Zm9yKHZhciByPVswXSxhPUthKHQsciksbj1bXTtyWzBdPHQubGVuZ3RoOyl7dmFyIGk9MyZ0W3JbMF1dO2lmKDAhPWkpe3ZhciBjPTAsbz0w''@;'; put 'put ''O2lmKDE9PWk/KG89NCsodFtyWzBdXT4+MiY3KSxjPSgyMjQmdFtyWzBdKytdKTw8MyxjfD10W3JbMF0rK10pOihvPTErKHRbclswXSsrXT4+MiksMj09aT8oYz10W3JbMF1dfHRbclswXSsxXTw8OCxyWzBdKz0yKTooYz0odFtyWzBdXXx0W3JbMF0rMV08PDh8dFtyWzBdKzJdPDwxNnx0W3Jb''@;'; put 'put ''MF0rM108PDI0KT4+PjAsclswXSs9NCkpLG49W0R0KG4pXSwwPT1jKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvZmZzZXQgMCIpO2lmKGM+blswXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCBiZXlvbmQgbGVuZ3RoIik7aWYobz49Yylmb3Iobi5wdXNoKG5bMF0u''@;'; put 'put ''c2xpY2UoLWMpKSxvLT1jO28+PW5bbi5sZW5ndGgtMV0ubGVuZ3RoOyluLnB1c2gobltuLmxlbmd0aC0xXSksby09bltuLmxlbmd0aC0xXS5sZW5ndGg7bi5wdXNoKG5bMF0uc2xpY2UoLWMsLWMrbykpfWVsc2V7dmFyIHM9dFtyWzBdKytdPj4yO2lmKHM8NjApKytzO2Vsc2V7dmFyIGY9cy01''@;'; put 'put ''OTtzPXRbclswXV0sZj4xJiYoc3w9dFtyWzBdKzFdPDw4KSxmPjImJihzfD10W3JbMF0rMl08PDE2KSxmPjMmJihzfD10W3JbMF0rM108PDI0KSxzPj4+PTAscysrLHJbMF0rPWZ9bi5wdXNoKHQuc2xpY2UoclswXSxyWzBdK3MpKSxyWzBdKz1zfX12YXIgbD1EdChuKTtpZihsLmxlbmd0aCE9''@;'; put 'put ''YSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbGVuZ3RoOiAiLmNvbmNhdChsLmxlbmd0aCwiICE9ICIpLmNvbmNhdChhKSk7cmV0dXJuIGx9ZnVuY3Rpb24gSG0oZSx0LHIpe3N3aXRjaChlWzBdKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uIFVtKGUs''@;'; put 'put ''dCxyLGEpe3ZhciBoLG49SnQoZSksaT1uLmdldFVpbnQzMig0LCEwKSxzPShhPjE/MTI6OCkrNCp1YyhpJihhPjE/MzQ3MDozOTgpKSxmPS0xLGM9LTEsbz1OYU4sbD1uZXcgRGF0ZSgyMDAxLDAsMSk7c3dpdGNoKDUxMiZpJiYoZj1uLmdldFVpbnQzMihzLCEwKSxzKz00KSxzKz00KnVjKGkm''@;'; put 'put ''KGE+MT8xMjI4ODo0MDk2KSksMTYmaSYmKGM9bi5nZXRVaW50MzIocywhMCkscys9NCksMzImaSYmKG89bi5nZXRGbG9hdDY0KHMsITApLHMrPTgpLDY0JmkmJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKm4uZ2V0RmxvYXQ2NChzLCEwKSkscys9OCksZVsyXSl7Y2FzZSAwOmJyZWFrO2Nh''@;'; put 'put ''c2UgMjpoPXt0OiJuIix2Om99O2JyZWFrO2Nhc2UgMzpoPXt0OiJzIix2OnRbY119O2JyZWFrO2Nhc2UgNTpoPXt0OiJkIix2Omx9O2JyZWFrO2Nhc2UgNjpoPXt0OiJiIix2Om8+MH07YnJlYWs7Y2FzZSA3Omg9e3Q6Im4iLHY6by84NjQwMH07YnJlYWs7Y2FzZSA4Omg9e3Q6ImUiLHY6MH07''@;'; put 'put ''YnJlYWs7Y2FzZSA5OmlmKGY+LTEpaD17dDoicyIsdjpyW2ZdfTtlbHNlIGlmKGM+LTEpaD17dDoicyIsdjp0W2NdfTtlbHNle2lmKGlzTmFOKG8pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGUuc2xpY2UoMCw0KSkpO2g9e3Q6Im4iLHY6b319YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNlbGwgdHlwZSAiLmNvbmNhdChlLnNsaWNlKDAsNCkpKX1yZXR1cm4gaH0oZSx0LHIsZVswXSk7Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBXbShlLHQscil7dmFyIGgsYT1KdChlKSxuPWEuZ2V0VWludDMyKDgsITApLGk9''@;'; put 'put ''MTIscz0tMSxmPS0xLGM9TmFOLG89TmFOLGw9bmV3IERhdGUoMjAwMSwwLDEpO3N3aXRjaCgxJm4mJihjPWZ1bmN0aW9uIExtKGUsdCl7Zm9yKHZhciByPSgxMjcmZVt0KzE1XSk8PDd8ZVt0KzE0XT4+MSxhPTEmZVt0KzE0XSxuPXQrMTM7bj49dDstLW4pYT0yNTYqYStlW25dO3JldHVybigx''@;'; put 'put ''MjgmZVt0KzE1XT8tYTphKSpNYXRoLnBvdygxMCxyLTYxNzYpfShlLGkpLGkrPTE2KSwyJm4mJihvPWEuZ2V0RmxvYXQ2NChpLCEwKSxpKz04KSw0Jm4mJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKmEuZ2V0RmxvYXQ2NChpLCEwKSksaSs9OCksOCZuJiYoZj1hLmdldFVpbnQzMihpLCEw''@;'; put 'put ''KSxpKz00KSwxNiZuJiYocz1hLmdldFVpbnQzMihpLCEwKSxpKz00KSxlWzFdKXtjYXNlIDA6YnJlYWs7Y2FzZSAyOmNhc2UgMTA6aD17dDoibiIsdjpjfTticmVhaztjYXNlIDM6aD17dDoicyIsdjp0W2ZdfTticmVhaztjYXNlIDU6aD17dDoiZCIsdjpsfTticmVhaztjYXNlIDY6aD17dDoi''@;'; put 'put ''YiIsdjpvPjB9O2JyZWFrO2Nhc2UgNzpoPXt0OiJuIix2Om8vODY0MDB9O2JyZWFrO2Nhc2UgODpoPXt0OiJlIix2OjB9O2JyZWFrO2Nhc2UgOTppZighKHM+LTEpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZu''@;'; put 'put ''LCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSk7aD17dDoicyIsdjpyW3NdfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZuLCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSl9cmV0''@;'; put 'put ''dXJuIGh9KGUsdCxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcGF5bG9hZCB2ZXJzaW9uICIuY29uY2F0KGVbMF0pKX19ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIEthKFJlKGUpWzFdWzBdLmRhdGEpfWZ1bmN0aW9uIGhjKGUsdCl7dmFyIHI9UmUodC5kYXRhKSxhPVll''@;'; put 'put ''KHJbMV1bMF0uZGF0YSksaT1bXTtyZXR1cm4oclszXXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9UmUocy5kYXRhKSxjPVllKGZbMV1bMF0uZGF0YSk+Pj4wO3N3aXRjaChhKXtjYXNlIDE6aVtjXT1IbihmWzNdWzBdLmRhdGEpO2JyZWFrO2Nhc2UgODp2YXIgbD1SZShlW0VyKGZb''@;'; put 'put ''OV1bMF0uZGF0YSldWzBdLmRhdGEpLGg9ZVtFcihsWzFdWzBdLmRhdGEpXVswXSx4PVllKGgubWV0YVsxXVswXS5kYXRhKTtpZigyMDAxIT14KXRocm93IG5ldyBFcnJvcigiMjAwMCB1bmV4cGVjdGVkIHJlZmVyZW5jZSB0byAiLmNvbmNhdCh4KSk7dmFyIGQ9UmUoaC5kYXRhKTtpW2NdPWRb''@;'; put 'put ''M10ubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBIbih2LmRhdGEpfSkuam9pbigiIil9fSksaX1mdW5jdGlvbiB6bShlLHQpe3ZhciBhPXsiIXJlZiI6IkExIn0sbj1lW0VyKFJlKHQuZGF0YSlbMl1bMF0uZGF0YSldLGk9WWUoblswXS5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDEhPWkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCI2MDAwIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KGkpKTtyZXR1cm4gZnVuY3Rpb24gR20oZSx0LHIpe3ZhciBhLG49UmUodC5kYXRhKSxpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07aWYoaS5lLnI9KFllKG5bNl1bMF0uZGF0YSk+Pj4wKS0xLGkuZS5y''@;'; put 'put ''PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdyB2YXJpbnQgIi5jb25jYXQobls2XVswXS5kYXRhKSk7aWYoaS5lLmM9KFllKG5bN11bMF0uZGF0YSk+Pj4wKS0xLGkuZS5jPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbCB2YXJpbnQgIi5jb25jYXQobls3XVswXS5kYXRhKSk7''@;'; put 'put ''clsiIXJlZiJdPXdlKGkpO3ZhciBzPVJlKG5bNF1bMF0uZGF0YSksZj1oYyhlLGVbRXIoc1s0XVswXS5kYXRhKV1bMF0pLGM9bnVsbCE9KGE9c1sxN10pJiZhWzBdP2hjKGUsZVtFcihzWzE3XVswXS5kYXRhKV1bMF0pOltdLG89UmUoc1szXVswXS5kYXRhKSxsPTA7b1sxXS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGgpe3ZhciB4PVJlKGguZGF0YSksZD1lW0VyKHhbMl1bMF0uZGF0YSldWzBdLHY9WWUoZC5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDIhPXYpdGhyb3cgbmV3IEVycm9yKCI2MDAxIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KHYpKTt2YXIgdT1mdW5jdGlvbiBYbShl''@;'; put 'put ''LHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPW51bGwhPShyPWE/Lls3XSkmJnJbMF0/WWUoYVs3XVswXS5kYXRhKT4+PjA+MD8xOjA6LTEsaT1WbihhWzVdLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbiBWbShlLHQpe3ZhciByLGEsbixpLHMsZixjLG8sbCxoLHgsZCx2LHUsTixNLHA9UmUo''@;'; put 'put ''ZSksaz1ZZShwWzFdWzBdLmRhdGEpPj4+MCxUPVllKHBbMl1bMF0uZGF0YSk+Pj4wLGc9KG51bGw9PShhPW51bGw9PShyPXBbOF0pP3ZvaWQgMDpyWzBdKT92b2lkIDA6YS5kYXRhKSYmWWUocFs4XVswXS5kYXRhKT4wfHwhMTtpZihudWxsIT0oaT1udWxsPT0obj1wWzddKT92b2lkIDA6blsw''@;'; put 'put ''XSkmJmkuZGF0YSYmMCE9dClOPW51bGw9PShmPW51bGw9PShzPXBbN10pP3ZvaWQgMDpzWzBdKT92b2lkIDA6Zi5kYXRhLE09bnVsbD09KG89bnVsbD09KGM9cFs2XSk/dm9pZCAwOmNbMF0pP3ZvaWQgMDpvLmRhdGE7ZWxzZXtpZihudWxsPT0oaD1udWxsPT0obD1wWzRdKT92b2lkIDA6bFsw''@;'; put 'put ''XSl8fCFoLmRhdGF8fDE9PXQpdGhyb3ciTlVNQkVSUyBUaWxlIG1pc3NpbmcgIi5jb25jYXQodCwiIGNlbGwgc3RvcmFnZSIpO049bnVsbD09KGQ9bnVsbD09KHg9cFs0XSk/dm9pZCAwOnhbMF0pP3ZvaWQgMDpkLmRhdGEsTT1udWxsPT0odT1udWxsPT0odj1wWzNdKT92b2lkIDA6dlswXSk/''@;'; put 'put ''dm9pZCAwOnUuZGF0YX1mb3IodmFyIEk9Zz80OjEseT1KdChOKSxQPVtdLFI9MDtSPE4ubGVuZ3RoLzI7KytSKXt2YXIgVj15LmdldFVpbnQxNigyKlIsITApO1Y8NjU1MzUmJlAucHVzaChbUixWXSl9aWYoUC5sZW5ndGghPVQpdGhyb3ciRXhwZWN0ZWQgIi5jb25jYXQoVCwiIGNlbGxzLCBm''@;'; put 'put ''b3VuZCAiKS5jb25jYXQoUC5sZW5ndGgpO3ZhciBYPVtdO2ZvcihSPTA7UjxQLmxlbmd0aC0xOysrUilYW1BbUl1bMF1dPU0uc3ViYXJyYXkoUFtSXVsxXSpJLFBbUisxXVsxXSpJKTtyZXR1cm4gUC5sZW5ndGg+PTEmJihYW1BbUC5sZW5ndGgtMV1bMF1dPU0uc3ViYXJyYXkoUFtQLmxlbmd0''@;'; put 'put ''aC0xXVsxXSpJKSkse1I6ayxjZWxsczpYfX0ocyxuKX0pO3JldHVybntucm93czpZZShhWzRdWzBdLmRhdGEpPj4+MCxkYXRhOmkucmVkdWNlKGZ1bmN0aW9uKHMsZil7cmV0dXJuIHNbZi5SXXx8KHNbZi5SXT1bXSksZi5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGMsbyl7aWYoc1tmLlJdW29d''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIGNlbGwgcj0iLmNvbmNhdChmLlIsIiBjPSIpLmNvbmNhdChvKSk7c1tmLlJdW29dPWN9KSxzfSxbXSl9fSgwLGQpO3UuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHAsayl7cC5mb3JFYWNoKGZ1bmN0aW9uKFQsZyl7dmFyIE49Z2Uoe3I6bCtrLGM6''@;'; put 'put ''Z30pLE09SG0oVCxmLGMpO00mJihyW05dPU0pfSl9KSxsKz11Lm5yb3dzfSl9KGUsblswXSxhKSxhfWZ1bmN0aW9uIHpuKGUpe3ZhciB0LHIsYSxuLGk9e30scz1bXTtpZihlLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGMubWF0Y2goL1wuaXdwdjIvKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIHBhc3N3b3JkIHByb3RlY3Rpb24iKX0pLGUuRmlsZUluZGV4LmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5uYW1lLm1hdGNoKC9cLml3YSQvKSl7dmFyIG8sbDt0cnl7bz1mdW5jdGlvbiB6cihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgYT1l''@;'; put 'put ''W3IrK10sbj1lW3JdfGVbcisxXTw8OHxlW3IrMl08PDE2O3QucHVzaChNbShhLGUuc2xpY2Uocis9MyxyK24pKSkscis9bn1pZihyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJkYXRhIGlzIG5vdCBhIHZhbGlkIGZyYW1lZCBzdHJlYW0hIik7cmV0dXJuIER0KHQpfShjLmNvbnRlbnQp''@;'; put 'put ''fWNhdGNoKGgpe3JldHVybiBjb25zb2xlLmxvZygiPz8gIitjLmNvbnRlbnQubGVuZ3RoKyIgIisoaC5tZXNzYWdlfHxoKSl9dHJ5e2w9ZnVuY3Rpb24gR3IoZSl7Zm9yKHZhciB0LHI9W10sYT1bMF07YVswXTxlLmxlbmd0aDspe3ZhciBuPUthKGUsYSksaT1SZShlLnNsaWNlKGFbMF0sYVsw''@;'; put 'put ''XStuKSk7YVswXSs9bjt2YXIgcz17aWQ6WWUoaVsxXVswXS5kYXRhKSxtZXNzYWdlczpbXX07aVsyXS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBjPVJlKGYuZGF0YSksbz1ZZShjWzNdWzBdLmRhdGEpO3MubWVzc2FnZXMucHVzaCh7bWV0YTpjLGRhdGE6ZS5zbGljZShhWzBdLGFbMF0rbyl9''@;'; put 'put ''KSxhWzBdKz1vfSksbnVsbCE9KHQ9aVszXSkmJnRbMF0mJihzLm1lcmdlPVllKGlbM11bMF0uZGF0YSk+Pj4wPjApLHIucHVzaChzKX1yZXR1cm4gcn0obyl9Y2F0Y2goaCl7cmV0dXJuIGNvbnNvbGUubG9nKCIjIyAiKyhoLm1lc3NhZ2V8fGgpKX1sLmZvckVhY2goZnVuY3Rpb24oaCl7aVto''@;'; put 'put ''LmlkXT1oLm1lc3NhZ2VzLHMucHVzaChoLmlkKX0pfX0pLCFzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaGFzIG5vIG1lc3NhZ2VzIik7dmFyIGY9KG51bGw9PShuPW51bGw9PShhPW51bGw9PShyPW51bGw9PSh0PWk/LlsxXSk/dm9pZCAwOnRbMF0pP3ZvaWQgMDpyLm1ldGEpP3Zv''@;'; put 'put ''aWQgMDphWzFdKT92b2lkIDA6blswXS5kYXRhKSYmMT09WWUoaVsxXVswXS5tZXRhWzFdWzBdLmRhdGEpJiZpWzFdWzBdO2lmKGZ8fHMuZm9yRWFjaChmdW5jdGlvbihjKXtpW2NdLmZvckVhY2goZnVuY3Rpb24obyl7aWYoMT09WWUoby5tZXRhWzFdWzBdLmRhdGEpPj4+MCl7aWYoZil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkRvY3VtZW50IGhhcyBtdWx0aXBsZSByb290cyIpO2Y9b319KX0pLCFmKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgRG9jdW1lbnQgcm9vdCIpO3JldHVybiBmdW5jdGlvbiBqbShlLHQpe3ZhciByPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX07aWYoVm4oUmUo''@;'; put 'put ''dC5kYXRhKVsxXSxFcikuZm9yRWFjaChmdW5jdGlvbihpKXtlW2ldLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoMj09WWUocy5tZXRhWzFdWzBdLmRhdGEpKXt2YXIgYz1mdW5jdGlvbiAkbShlLHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPXtuYW1lOm51bGwhPShyPWFbMV0pJiZyWzBdP0huKGFb''@;'; put 'put ''MV1bMF0uZGF0YSk6IiIsc2hlZXRzOltdfTtyZXR1cm4gVm4oYVsyXSxFcikuZm9yRWFjaChmdW5jdGlvbihzKXtlW3NdLmZvckVhY2goZnVuY3Rpb24oZil7NmUzPT1ZZShmLm1ldGFbMV1bMF0uZGF0YSkmJm4uc2hlZXRzLnB1c2goem0oZSxmKSl9KX0pLG59KGUscyk7Yy5zaGVldHMuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihvLGwpe2VpKHIsbywwPT1sP2MubmFtZTpjLm5hbWUrIl8iK2wsITApfSl9fSl9KSwwPT1yLlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW1wdHkgTlVNQkVSUyBmaWxlIik7cmV0dXJuIHJ9KGksZil9ZnVuY3Rpb24gJG4oZSl7IWZ1bmN0aW9uIHhj''@;'; put 'put ''KGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9MDthIT1lLmxlbmd0aDsrK2Epe3ZhciBuPWVbYV07dm9pZCAwPT09cltuWzBdXSYmKHJbblswXV09blsxXSksIm4iPT09blsyXSYmKHJbblswXV09TnVtYmVyKHJbblswXV0pKX19fShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwh''@;'; put 'put ''MF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJi''@;'; put 'put ''b29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKGUpfWZ1bmN0aW9uIEptKGUpe3JldHVybiBrZS5XUy5pbmRleE9mKGUpPi0xPyJzaGVldCI6a2UuQ1MmJmU9PWtlLkNTPyJjaGFydCI6a2UuRFMmJmU9PWtlLkRTPyJkaWFsb2ciOmtlLk1T''@;'; put 'put ''JiZlPT1rZS5NUz8ibWFjcm8iOmUmJmUubGVuZ3RoP2U6InNoZWV0In1mdW5jdGlvbiBabShlLHQscixhLG4saSxzLGYsYyxvLGwsaCl7dHJ5e2lbYV09SWEoTnIoZSxyLCEwKSx0KTt2YXIgZCx4PVFlKGUsdCk7c3dpdGNoKGYpe2Nhc2Uic2hlZXQiOmQ9U3AoeCx0LG4sYyxpW2FdLG8sbCxo''@;'; put 'put ''KTticmVhaztjYXNlImNoYXJ0IjppZighKGQ9ZnVuY3Rpb24gRnAoZSx0LHIsYSxuLGkscyxmKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBycChlLHQscixhLG4pe2lmKCFlKXJldHVybiBlO2F8fChhPXsiIWlkIjp7fX0pO3ZhciBpPXsiIXR5cGUiOiJjaGFydCIsIiFk''@;'; put 'put ''cmF3ZWwiOm51bGwsIiFyZWwiOiIifSxzPVtdLGY9ITE7cmV0dXJuIGh0KGUsZnVuY3Rpb24obyxsLGgpe3N3aXRjaChoKXtjYXNlIDU1MDppWyIhcmVsIl09bzticmVhaztjYXNlIDY1MTpuLlNoZWV0c1tyXXx8KG4uU2hlZXRzW3JdPXt9KSxvLm5hbWUmJihuLlNoZWV0c1tyXS5Db2RlTmFt''@;'; put 'put ''ZT1vLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OmY9ITA7YnJlYWs7Y2FzZSAzNjpmPSExO2JyZWFrO2Nhc2UgMzc6cy5wdXNoKGgpO2JyZWFrO2Nhc2UgMzg6''@;'; put 'put ''cy5wb3AoKTticmVhaztkZWZhdWx0OmlmKGwuVD4wKXMucHVzaChoKTtlbHNlIGlmKGwuVDwwKXMucG9wKCk7ZWxzZSBpZighZnx8dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIraC50b1N0cmluZygxNikpfX0sdCksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlb''@;'; put 'put ''IiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLGEscixuLGkpOmZ1bmN0aW9uIFoyKGUsdCxyLGEsbil7aWYoIWUpcmV0dXJuIGU7YXx8KGE9eyIhaWQiOnt9fSk7dmFyIHMsaT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZj1lLm1hdGNoKFBm''@;'; put 'put ''KTtyZXR1cm4gZiYmTG4oZlswXSwwLG4sciksKHM9ZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihpWyIhcmVsIl09c1sxXSksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlbIiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLDAscixuLGkpfSh4LHQsbixjLGlbYV0s''@;'; put 'put ''bykpfHwhZFsiIWRyYXdlbCJdKWJyZWFrO3ZhciB2PVNhKGRbIiFkcmF3ZWwiXS5UYXJnZXQsdCksdT1PYSh2KSxwPWZ1bmN0aW9uIGh4KGUsdCl7aWYoIWUpcmV0dXJuIj8/Ijt2YXIgcj0oZS5tYXRjaCgvPGM6Y2hhcnQgW14+XSpyOmlkPSIoW14iXSopIi8pfHxbIiIsIiJdKVsxXTtyZXR1''@;'; put 'put ''cm4gdFsiIWlkIl1bcl0uVGFyZ2V0fShOcihlLHYsITApLElhKE5yKGUsdSwhMCksdikpLGs9U2EocCx2KSxUPU9hKGspO2Q9ZnVuY3Rpb24gcTIoZSx0LHIsYSxuLGkpe3ZhciBzPWl8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFlKXJldHVybiBpO3ZhciBmPTAsYz0wLG89IkEiLGw9e3M6e3I6''@;'; put 'put ''MmU2LGM6MmU2fSxlOntyOjAsYzowfX07cmV0dXJuKGUubWF0Y2goLzxjOm51bUNhY2hlPltcc1xTXSo/PFwvYzpudW1DYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgeD1mdW5jdGlvbiBKMihlKXt2YXIgYSx0PVtdLHI9ZS5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhl''@;'; put 'put ''Lm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO3MmJih0WytzWzFdXT1yPytzWzJdOnNbMl0pfSk7dmFyIG49''@;'; put 'put ''SWUoKGUubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oZS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXthPWkucmVwbGFjZSgvPC4qPz4vZywiIil9''@;'; put 'put ''KSxbdCxuLGFdfShoKTtsLnMucj1sLnMuYz0wLGwuZS5jPWYsbz1IZShmKSx4WzBdLmZvckVhY2goZnVuY3Rpb24oZCx2KXtzW28rS2UodildPXt0OiJuIix2OmQsejp4WzFdfSxjPXZ9KSxsLmUucjxjJiYobC5lLnI9YyksKytmfSksZj4wJiYoc1siIXJlZiJdPXdlKGwpKSxzfShOcihlLGss''@;'; put 'put ''ITApLDAsMCxJYShOcihlLFQsITApLGspLDAsZCk7YnJlYWs7Y2FzZSJtYWNybyI6ZD1mdW5jdGlvbiB5cChlLHQscixhLG4saSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCx0KTticmVhaztjYXNlImRpYWxvZyI6ZD1mdW5jdGlvbiBBcChlLHQscixhLG4s''@;'; put 'put ''aSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrZil9c1thXT1kO3ZhciBnPVtdO2kmJmlbYV0mJiRlKGlbYV0pLmZvckVhY2goZnVuY3Rpb24oTil7''@;'; put 'put ''dmFyIE09IiI7aWYoaVthXVtOXS5UeXBlPT1rZS5DTU5UKXtNPVNhKGlbYV1bTl0uVGFyZ2V0LHQpO3ZhciBJPWZ1bmN0aW9uIElwKGUsdCxyKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBFeChlLHQpe3ZhciByPVtdLGE9W10sbj17fSxpPSExO3JldHVybiBodChlLGZ1''@;'; put 'put ''bmN0aW9uKGYsYyxvKXtzd2l0Y2gobyl7Y2FzZSA2MzI6YS5wdXNoKGYpO2JyZWFrO2Nhc2UgNjM1Om49ZjticmVhaztjYXNlIDYzNzpuLnQ9Zi50LG4uaD1mLmgsbi5yPWYucjticmVhaztjYXNlIDYzNjppZihuLmF1dGhvcj1hW24uaWF1dGhvcl0sZGVsZXRlIG4uaWF1dGhvcix0LnNoZWV0''@;'; put 'put ''Um93cyYmbi5yZngmJnQuc2hlZXRSb3dzPD1uLnJmeC5yKWJyZWFrO24udHx8KG4udD0iIiksZGVsZXRlIG4ucmZ4LHIucHVzaChuKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2Omk9ITE7YnJlYWs7ZGVmYXVsdDppZigh''@;'; put 'put ''Yy5UJiYoIWl8fHQuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitvLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiB4eChlLHQpe2lmKGUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIHI9W10sYT1bXSxuPWUu''@;'; put 'put ''bWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7biYmblsxXSYmblsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihzKXtpZigiIiE9PXMmJiIiIT09cy50cmltKCkpe3ZhciBmPXMubWF0Y2goLzwoPzpcdys6''@;'; put 'put ''KT9hdXRob3JbXj5dKj4oLiopLyk7ZiYmci5wdXNoKGZbMV0pfX0pO3ZhciBpPWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gaSYmaVsxXSYmaVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24ocyl7aWYoIiIhPT1zJiYiIiE9PXMudHJpbSgpKXt2YXIgZj1zLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKGYpe3ZhciBjPW1lKGZbMF0pLG89e2F1dGhvcjpjLmF1dGhvcklkJiZyW2MuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6Yy5yZWYs''@;'; put 'put ''Z3VpZDpjLmd1aWR9LGw9R2UoYy5yZWYpO2lmKCEodC5zaGVldFJvd3MmJnQuc2hlZXRSb3dzPD1sLnIpKXt2YXIgaD1zLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLHg9ISFoJiYhIWhbMV0mJlNuKGhbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O28u''@;'; put 'put ''cj14LnIsIjx0PjwvdD4iPT14LnImJih4LnQ9eC5oPSIiKSxvLnQ9KHgudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLHQuY2VsbEhUTUwmJihvLmg9eC5oKSxhLnB1c2gobyl9fX19KSxhfShlLHIpfShRZShlLE0sITApLE0sYyk7aWYoIUl8fCFJLmxl''@;'; put 'put ''bmd0aClyZXR1cm47Z2YoZCxJLCExKX1pW2FdW05dLlR5cGU9PWtlLlRDTU5UJiYoTT1TYShpW2FdW05dLlRhcmdldCx0KSxnPWcuY29uY2F0KGZ1bmN0aW9uIGR4KGUsdCl7dmFyIHI9W10sYT0hMSxuPXt9LGk9MDtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGYsYyl7dmFyIG89bWUo''@;'; put 'put ''Zik7c3dpdGNoKHJ0KG9bMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxUaHJlYWRlZENvbW1lbnRzIjpjYXNlIjwvVGhyZWFkZWRDb21tZW50cz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0aHJlYWRlZENv''@;'; put 'put ''bW1lbnQiOm49e2F1dGhvcjpvLnBlcnNvbklkLGd1aWQ6by5pZCxyZWY6by5yZWYsVDoxfTticmVhaztjYXNlIjwvdGhyZWFkZWRDb21tZW50PiI6bnVsbCE9bi50JiZyLnB1c2gobik7YnJlYWs7Y2FzZSI8dGV4dD4iOmNhc2UiPHRleHQiOmk9YytmLmxlbmd0aDticmVhaztjYXNlIjwvdGV4''@;'; put 'put ''dD4iOm4udD1lLnNsaWNlKGksYykucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIik7YnJlYWs7Y2FzZSI8bWVudGlvbnMiOmNhc2UiPG1lbnRpb25zPiI6Y2FzZSI8ZXh0IjphPSEwO2JyZWFrO2Nhc2UiPC9tZW50aW9ucz4iOmNhc2UiPC9leHQ+IjphPSExO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoIWEmJnQuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb1swXSsiIGluIHRocmVhZGVkIGNvbW1lbnRzIil9cmV0dXJuIGZ9KSxyfShRZShlLE0sITApLGMpKSl9KSxnJiZnLmxlbmd0aCYmZ2YoZCxnLCEwLGMucGVvcGxlfHxbXSl9Y2F0Y2goTil7aWYo''@;'; put 'put ''Yy5XVEYpdGhyb3cgTn19ZnVuY3Rpb24gJHIoZSl7cmV0dXJuIi8iPT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gUW0oZSx0KXtpZih0YSgpLCRuKHQ9dHx8e30pLFdyKGUsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxXcihlLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBmYyhlLHQpe3Q9dHx8e30sV3IoZSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIG9sKGUsdCl7Zm9yKHZhciBhLG4scj1ZMChlKTthPXlhLmV4ZWMocik7KXN3aXRjaChhWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09''@;'; put 'put ''KG49bWUoYVswXSwhMSkpLnBhdGgmJm4udHlwZSE9PWNsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNh''@;'; put 'put ''c2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHQmJnQuV1RGKXRocm93IGF9fShRZShlLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSx0KTt2YXIgcj1OcihlLCJjb250ZW50LnhtbCIpO2lmKCFyKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBhPXNjKEJlKHIpLHQpO3JldHVybiBXcihlLCJtZXRhLnhtbCIpJiYoYS5Qcm9wcz1tcyhRZShlLCJtZXRhLnhtbCIpKSksYX0oZSx0KTtpZihXcihlLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl7''@;'; put 'put ''aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiTlVNQkVSUyBmaWxlIHBhcnNpbmcgcmVxdWlyZXMgVWludDhBcnJheSBzdXBwb3J0Iik7aWYoZS5GaWxlSW5kZXgpcmV0dXJuIHpuKGUpO3ZhciByPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gSWkoZSkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihsZSl7IWZ1bmN0aW9uIFRlKGUsdCxyKXtpZihlLkZ1bGxQYXRocyl7dmFyIGE7aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybiBhPVNlP290KHIpOmZ1bmN0aW9uIE5jKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmxlbmd0aCsyNTAsbj1fdChlLmxlbmd0aCsyNTUpLGk9''@;'; put 'put ''MDtpPGUubGVuZ3RoOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO2lmKHM8MTI4KW5bcisrXT1zO2Vsc2UgaWYoczwyMDQ4KW5bcisrXT0xOTJ8cz4+NiYzMSxuW3IrK109MTI4fDYzJnM7ZWxzZSBpZihzPj01NTI5NiYmczw1NzM0NCl7cz02NCsoMTAyMyZzKTt2YXIgZj0xMDIzJmUuY2hh''@;'; put 'put ''ckNvZGVBdCgrK2kpO25bcisrXT0yNDB8cz4+OCY3LG5bcisrXT0xMjh8cz4+MiY2MyxuW3IrK109MTI4fGY+PjYmMTV8KDMmcyk8PDQsbltyKytdPTEyOHw2MyZmfWVsc2UgbltyKytdPTIyNHxzPj4xMiYxNSxuW3IrK109MTI4fHM+PjYmNjMsbltyKytdPTEyOHw2MyZzO3I+YSYmKHQucHVz''@;'; put 'put ''aChuLnNsaWNlKDAscikpLHI9MCxuPV90KDY1NTM1KSxhPTY1NTMwKX1yZXR1cm4gdC5wdXNoKG4uc2xpY2UoMCxyKSksZnIodCl9KHIpLHZlLnV0aWxzLmNmYl9hZGQoZSx0LGEpO3ZlLnV0aWxzLmNmYl9hZGQoZSx0LHIpfWVsc2UgZS5maWxlKHQscil9KHIsbGUsT2koZSxsZSkpfSksem4o''@;'; put 'put ''cil9aWYoIVdyKGUsIltDb250ZW50X1R5cGVzXS54bWwiKSl0aHJvdyBXcihlLCJpbmRleC54bWwuZ3oiKT9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgMDggZmlsZSIpOldyKGUsImluZGV4LnhtbCIpP25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyAwOSBmaWxlIik6bmV3''@;'; put 'put ''IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZmlsZSIpO3ZhciBzLGYsYT1JaShlKSxuPWZ1bmN0aW9uIGZsKGUpe3ZhciB0PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sdGhyZWFkZWRjb21t''@;'; put 'put ''ZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10sbWV0YWRhdGE6W10scGVvcGxlOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFlfHwhZS5tYXRjaCly''@;'; put 'put ''ZXR1cm4gdDt2YXIgcj17fTtpZigoZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBuPW1lKGEpO3N3aXRjaChuWzBdLnJlcGxhY2UoX28sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOnQueG1sbnM9blsieG1sbnMiKyhuWzBdLm1hdGNoKC88KFx3''@;'; put 'put ''Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpyW24uRXh0ZW5zaW9uXT1uLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT10W3ZuW24uQ29udGVudFR5cGVdXSYmdFt2bltuLkNvbnRlbnRUeXBlXV0ucHVzaChuLlBhcnROYW1lKX19KSx0''@;'; put 'put ''LnhtbG5zIT09cnIuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIit0LnhtbG5zKTtyZXR1cm4gdC5jYWxjY2hhaW49dC5jYWxjY2hhaW5zLmxlbmd0aD4wP3QuY2FsY2NoYWluc1swXToiIix0LnNzdD10LnN0cnMubGVuZ3RoPjA/dC5zdHJzWzBdOiIiLHQuc3R5bGU9''@;'; put 'put ''dC5zdHlsZXMubGVuZ3RoPjA/dC5zdHlsZXNbMF06IiIsdC5kZWZhdWx0cz1yLGRlbGV0ZSB0LmNhbGNjaGFpbnMsdH0oTnIoZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxpPSExO2lmKDA9PT1uLndvcmtib29rcy5sZW5ndGgmJlFlKGUsZj0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJm4ud29y''@;'; put 'put ''a2Jvb2tzLnB1c2goZiksMD09PW4ud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVFlKGUsZj0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO24ud29ya2Jvb2tzLnB1c2goZiksaT0hMH0iYmluIj09bi53b3JrYm9va3NbMF0uc2xp''@;'; put 'put ''Y2UoLTMpJiYoaT0hMCk7dmFyIGM9e30sbz17fTtpZighdC5ib29rU2hlZXRzJiYhdC5ib29rUHJvcHMpe2lmKFZhPVtdLG4uc3N0KXRyeXtWYT1mdW5jdGlvbiBPcChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gSWgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVy''@;'; put 'put ''biBodChlLGZ1bmN0aW9uKGkscyxmKXtzd2l0Y2goZil7Y2FzZSAxNTk6ci5Db3VudD1pWzBdLHIuVW5pcXVlPWlbMV07YnJlYWs7Y2FzZSAxOTpyLnB1c2goaSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTphPSEwO2JyZWFrO2Nhc2UgMzY6YT0hMTticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KCFhfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitmLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiBDaChlLHQpe3ZhciByPVtdLGE9IiI7aWYoIWUpcmV0dXJuIHI7dmFyIG49ZS5tYXRjaChGaCk7aWYobil7YT1uWzJdLnJlcGxhY2UoeWgs''@;'; put 'put ''IiIpLnNwbGl0KEFoKTtmb3IodmFyIGk9MDtpIT1hLmxlbmd0aDsrK2kpe3ZhciBzPVNuKGFbaV0udHJpbSgpLHQpO251bGwhPXMmJihyW3IubGVuZ3RoXT1zKX1uPW1lKG5bMV0pLHIuQ291bnQ9bi5jb3VudCxyLlVuaXF1ZT1uLnVuaXF1ZUNvdW50fXJldHVybiByfShlLHIpfShRZShlLCRy''@;'; put 'put ''KG4uc3N0KSksbi5zc3QsdCl9Y2F0Y2gobGUpe2lmKHQuV1RGKXRocm93IGxlfXQuY2VsbFN0eWxlcyYmbi50aGVtZXMubGVuZ3RoJiYoYz1mdW5jdGlvbiBEcChlLHQscil7cmV0dXJuIHZmKGUscil9KE5yKGUsbi50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLHQpKSxu''@;'; put 'put ''LnN0eWxlJiYobz1mdW5jdGlvbiBDcChlLHQscixhKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBTMShlLHQscil7dmFyIGE9e051bWJlckZtdDpbXX07Zm9yKHZhciBuIGluIHBlKWEuTnVtYmVyRm10W25dPXBlW25dO2EuQ2VsbFhmPVtdLGEuRm9udHM9W107dmFyIGk9''@;'; put 'put ''W10scz0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgNDQ6YS5OdW1iZXJGbXRbY1swXV09Y1sxXSxldChjWzFdLGNbMF0pO2JyZWFrO2Nhc2UgNDM6YS5Gb250cy5wdXNoKGMpLG51bGwhPWMuY29sb3IudGhlbWUmJnQmJnQudGhlbWVFbGVtZW50cyYmdC50''@;'; put 'put ''aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGMuY29sb3IucmdiPVQwKHQudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbYy5jb2xvci50aGVtZV0ucmdiLGMuY29sb3IudGludHx8MCkpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ1OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNl''@;'; put 'put ''IDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDc6NjE3PT1pW2kubGVuZ3RoLTFdJiZhLkNlbGxYZi5wdXNoKGMpO2JyZWFrO2Nhc2UgMzU6cz0hMDticmVhaztjYXNlIDM2OnM9ITE7YnJlYWs7Y2FzZSAz''@;'; put 'put ''NzppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM4OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKG8uVD4wKWkucHVzaChsKTtlbHNlIGlmKG8uVDwwKWkucG9wKCk7ZWxzZSBpZighc3x8ci5XVEYmJjM3IT1pW2kubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy''@;'; put 'put ''ZWNvcmQgMHgiK2wudG9TdHJpbmcoMTYpKX19KSxhfShlLHIsYSk6aDEoZSxyLGEpfShRZShlLCRyKG4uc3R5bGUpKSxuLnN0eWxlLGMsdCkpfW4ubGlua3MubWFwKGZ1bmN0aW9uKGxlKXt0cnl7cmV0dXJuIElhKE5yKGUsT2EoJHIobGUpKSksbGUpLGZ1bmN0aW9uIE5wKGUsdCxyLGEpe3Jl''@;'; put 'put ''dHVybiIuYmluIj09PXIuc2xpY2UoLTQpP2Z1bmN0aW9uIHV4KGUsdCxyLGEpe2lmKCFlKXJldHVybiBlO3ZhciBuPWF8fHt9LGk9ITE7aHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNh''@;'; put 'put ''c2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2''@;'; put 'put ''Omk9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIWl8fG4uV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSxuKX0oZSwwLDAsYSk6dm9pZCAwfShRZShlLCRyKGxlKSksMCxsZSx0KX1jYXRjaHt9fSk7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''VHAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIG1wKGUsdCl7dmFyIHI9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sYT1bXSxuPSExO3R8fCh0PXt9KSx0LmJpZmY9MTI7dmFyIGk9W10s''@;'; put 'put ''cz1bW11dO3JldHVybiBzLlNoZWV0TmFtZXM9W10scy5YVEk9W10sJGFbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnZwfSxodChlLGZ1bmN0aW9uKGMsbyxsKXtzd2l0Y2gobCl7Y2FzZSAxNTY6cy5TaGVldE5hbWVzLnB1c2goYy5uYW1lKSxyLlNoZWV0cy5wdXNoKGMpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MTUzOnIuV0JQcm9wcz1jO2JyZWFrO2Nhc2UgMzk6bnVsbCE9Yy5TaGVldCYmKHQuU0lEPWMuU2hlZXQpLGMuUmVmPWtyKGMuUHRnLDAsbnVsbCxzLHQpLGRlbGV0ZSB0LlNJRCxkZWxldGUgYy5QdGcsaS5wdXNoKGMpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAx''@;'; put 'put ''NTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNl''@;'; put 'put ''IDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNbMF0ubGVuZ3RoP3Mu''@;'; put 'put ''cHVzaChbbCxjXSk6c1swXT1bbCxjXSxzW3MubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09cy5sZW5ndGgmJihzWzBdPVtdLHNbMF0uWFRJPVtdKSxzW3MubGVuZ3RoLTFdLlhUST1zW3MubGVuZ3RoLTFdLlhUSS5jb25jYXQoYykscy5YVEk9cy5YVEkuY29uY2F0KGMpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMzU6Y2FzZSAzNzphLnB1c2gobCksbj0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6YS5wb3AoKSxuPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW8uVCYmKCFufHx0LldURiYmMzchPWFbYS5sZW5ndGgtMV0mJjM1IT1hW2EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw''@;'; put 'put ''ZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSx0KSxIZihyKSxyLk5hbWVzPWksci5zdXBib29rcz1zLHJ9KGUscik6ZnVuY3Rpb24gbHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgcj17QXBwVmVyc2lvbjp7fSxXQlByb3Bz''@;'; put 'put ''Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLHhtbG5zOiIifSxhPSExLG49InhtbG5zIixpPXt9LHM9MDtpZihlLnJlcGxhY2UodnIsZnVuY3Rpb24oYyxvKXt2YXIgbD1tZShjKTtzd2l0Y2gocnQobFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4i''@;'; put 'put ''OmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nIjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJv''@;'; put 'put ''b2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25H''@;'; put 'put ''cm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxk''@;'; put 'put ''ZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3Vz''@;'; put 'put ''dG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFy''@;'; put 'put ''dFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmpl''@;'; put 'put ''Y3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJl''@;'; put 'put ''dmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6Yy5tYXRjaChvcCkmJihuPSJ4bWxucyIrYy5tYXRjaCgvPChcdyspOi8pWzFdKSxyLnhtbG5zPWxbbl07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBsWzBdLHIuQXBwVmVyc2lvbj1sO2JyZWFrO2Nhc2UiPHdvcmtib29r''@;'; put 'put ''UHIiOmNhc2UiPHdvcmtib29rUHIvPiI6Qm4uZm9yRWFjaChmdW5jdGlvbihoKXtpZihudWxsIT1sW2hbMF1dKXN3aXRjaChoWzJdKXtjYXNlImJvb2wiOnIuV0JQcm9wc1toWzBdXT1XZShsW2hbMF1dKTticmVhaztjYXNlImludCI6ci5XQlByb3BzW2hbMF1dPXBhcnNlSW50KGxbaFswXV0s''@;'; put 'put ''MTApO2JyZWFrO2RlZmF1bHQ6ci5XQlByb3BzW2hbMF1dPWxbaFswXV19fSksbC5jb2RlTmFtZSYmKHIuV0JQcm9wcy5Db2RlTmFtZT1CZShsLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIGxbMF0sci5XQlZpZXcucHVz''@;'; put 'put ''aChsKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKGwuc3RhdGUpe2Nhc2UiaGlkZGVuIjpsLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6bC5IaWRkZW49MjticmVhaztkZWZhdWx0OmwuSGlkZGVuPTB9ZGVsZXRlIGwuc3RhdGUsbC5uYW1lPUllKEJlKGwubmFtZSkpLGRlbGV0''@;'; put 'put ''ZSBsWzBdLHIuU2hlZXRzLnB1c2gobCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjphPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijpj''@;'; put 'put ''YXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjooaT17fSkuTmFtZT1CZShsLm5hbWUpLGwuY29tbWVudCYmKGkuQ29tbWVudD1sLmNvbW1lbnQpLGwubG9jYWxTaGVldElkJiYoaS5TaGVldD0rbC5sb2NhbFNoZWV0SWQp''@;'; put 'put ''LFdlKGwuaGlkZGVufHwiMCIpJiYoaS5IaWRkZW49ITApLHM9bytjLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjppLlJlZj1JZShCZShlLnNsaWNlKHMsbykpKSxyLk5hbWVzLnB1c2goaSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIGxbMF0s''@;'; put 'put ''ci5DYWxjUHI9bDticmVhaztkZWZhdWx0OmlmKCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2xbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBjfSksLTE9PT1TdC5pbmRleE9mKHIueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIr''@;'; put 'put ''ci54bWxucyk7cmV0dXJuIEhmKHIpLHJ9KGUscil9KFFlKGUsJHIobi53b3JrYm9va3NbMF0pKSxuLndvcmtib29rc1swXSx0KSxoPXt9LHg9IiI7bi5jb3JlcHJvcHMubGVuZ3RoJiYoKHg9UWUoZSwkcihuLmNvcmVwcm9wc1swXSksITApKSYmKGg9bXMoeCkpLDAhPT1uLmV4dHByb3BzLmxl''@;'; put 'put ''bmd0aCYmKHg9UWUoZSwkcihuLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiB2bChlLHQscil7dmFyIGE9e307dHx8KHQ9e30pLGU9QmUoZSksWHQuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT0oZS5tYXRjaChGYShuWzBdKSl8fFtdKVsxXTtzd2l0Y2goblsyXSl7Y2FzZSJzdHJpbmci''@;'; put 'put ''OmkmJih0W25bMV1dPUllKGkpKTticmVhaztjYXNlImJvb2wiOnRbblsxXV09InRydWUiPT09aTticmVhaztjYXNlInJhdyI6dmFyIHM9ZS5tYXRjaChuZXcgUmVnRXhwKCI8IituWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrblswXSsiPiIpKTtzJiZzLmxlbmd0aD4wJiYoYVtuWzFdXT1z''@;'; put 'put ''WzFdKX19KSxhLkhlYWRpbmdQYWlycyYmYS5UaXRsZXNPZlBhcnRzJiZ3cyhhLkhlYWRpbmdQYWlycyxhLlRpdGxlc09mUGFydHMsdCxyKX0oeCxoLHQpKTt2YXIgZD17fTsoIXQuYm9va1NoZWV0c3x8dC5ib29rUHJvcHMpJiYwIT09bi5jdXN0cHJvcHMubGVuZ3RoJiYoeD1OcihlLCRyKG4u''@;'; put 'put ''Y3VzdHByb3BzWzBdKSwhMCkpJiYoZD1mdW5jdGlvbiBtbChlLHQpe3ZhciByPXt9LGE9IiIsbj1lLm1hdGNoKHBsKTtpZihuKWZvcih2YXIgaT0wO2khPW4ubGVuZ3RoOysraSl7dmFyIHM9bltpXSxmPW1lKHMpO3N3aXRjaChmWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpi''@;'; put 'put ''cmVhaztjYXNlIjxwcm9wZXJ0eSI6YT1JZShmLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOmE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1zLmluZGV4T2YoIjx2dDoiKSl7dmFyIGM9cy5zcGxpdCgiPiIpLG89Y1swXS5zbGljZSg0KSxsPWNbMV07c3dpdGNoKG8pe2Nhc2UibHBz''@;'; put 'put ''dHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOnJbYV09SWUobCk7YnJlYWs7Y2FzZSJib29sIjpyW2FdPVdlKGwpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOnJbYV09cGFyc2VJbnQo''@;'; put 'put ''bCwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpyW2FdPXBhcnNlRmxvYXQobCk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpyW2FdPVhlKGwpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1vLnNsaWNlKC0xKSlicmVhazt0LldURiYmdHlwZW9mIGNvbnNv''@;'; put 'put ''bGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLHMsbyxjKX19ZWxzZSBpZigiPC8iIT09cy5zbGljZSgwLDIpJiZ0LldURil0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiByfSh4LHQpKTt2YXIgdj17fTtpZigodC5ib29rU2hlZXRzfHx0LmJvb2tQcm9wcykmJihsLlNoZWV0cz9z''@;'; put 'put ''PWwuU2hlZXRzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLm5hbWV9KTpoLldvcmtzaGVldHMmJmguU2hlZXROYW1lcy5sZW5ndGg+MCYmKHM9aC5TaGVldE5hbWVzKSx0LmJvb2tQcm9wcyYmKHYuUHJvcHM9aCx2LkN1c3Rwcm9wcz1kKSx0LmJvb2tTaGVldHMmJnR5cGVvZiBzPCJ1IiYm''@;'; put 'put ''KHYuU2hlZXROYW1lcz1zKSx0LmJvb2tTaGVldHM/di5TaGVldE5hbWVzOnQuYm9va1Byb3BzKSlyZXR1cm4gdjtzPXt9O3ZhciB1PXt9O3QuYm9va0RlcHMmJm4uY2FsY2NoYWluJiYodT1mdW5jdGlvbiBScChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gbHgo''@;'; put 'put ''ZSx0LHIpe3ZhciBhPVtdO3JldHVybiBodChlLGZ1bmN0aW9uKHMsZixjKXtpZig2Mz09PWMpYS5wdXNoKHMpO2Vsc2UgaWYoIWYuVCl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitjLnRvU3RyaW5nKDE2KSl9KSxhfShlKTpmdW5jdGlvbiBjeChlKXt2YXIgdD1bXTtp''@;'; put 'put ''ZighZSlyZXR1cm4gdDt2YXIgcj0xO3JldHVybihlLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG49bWUoYSk7c3dpdGNoKG5bMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGMiOmRlbGV0ZSBuWzBdLG4uaT9yPW4uaTpuLmk9cix0LnB1c2gobil9fSksdH0oZSl9KFFlKGUsJHIobi5jYWxjY2hhaW4pKSxuLmNhbGNjaGFpbikpO3ZhciBULGcscD0wLGs9e30sTj1sLlNoZWV0cztoLldvcmtzaGVldHM9Ti5sZW5ndGgsaC5TaGVldE5hbWVzPVtdO2Zvcih2YXIg''@;'; put 'put ''TT0wO00hPU4ubGVuZ3RoOysrTSloLlNoZWV0TmFtZXNbTV09TltNXS5uYW1lO3ZhciBJPWk/ImJpbiI6InhtbCIseT1uLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLFA9KG4ud29ya2Jvb2tzWzBdLnNsaWNlKDAseSsxKSsiX3JlbHMvIituLndvcmtib29rc1swXS5zbGljZSh5KzEp''@;'; put 'put ''KyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO1dyKGUsUCl8fChQPSJ4bC9fcmVscy93b3JrYm9vay4iK0krIi5yZWxzIik7dmFyIFI9SWEoTnIoZSxQLCEwKSxQLnJlcGxhY2UoL19yZWxzLiovLCJzNXMiKSk7KG4ubWV0YWRhdGF8fFtdKS5sZW5ndGg+PTEmJih0LnhsbWV0YT1mdW5jdGlv''@;'; put 'put ''biBicChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gaXgoZSx0LHIpe3ZhciBhPXtUeXBlczpbXSxDZWxsOltdLFZhbHVlOltdfSxuPXJ8fHt9LGk9W10scz0hMSxmPTI7cmV0dXJuIGh0KGUsZnVuY3Rpb24oYyxvLGwpe3N3aXRjaChsKXtjYXNlIDMzNTphLlR5''@;'; put 'put ''cGVzLnB1c2goe25hbWU6Yy5uYW1lfSk7YnJlYWs7Y2FzZSA1MTpjLmZvckVhY2goZnVuY3Rpb24oaCl7MT09Zj9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2hbMF0tMV0ubmFtZSxpbmRleDpoWzFdfSk6MD09ZiYmYS5WYWx1ZS5wdXNoKHt0eXBlOmEuVHlwZXNbaFswXS0xXS5uYW1lLGlu''@;'; put 'put ''ZGV4OmhbMV19KX0pO2JyZWFrO2Nhc2UgMzM3OmY9Yz8xOjA7YnJlYWs7Y2FzZSAzMzg6Zj0yO2JyZWFrO2Nhc2UgMzU6aS5wdXNoKGwpLHM9ITA7YnJlYWs7Y2FzZSAzNjppLnBvcCgpLHM9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIXN8fG4uV1RGJiYzNSE9aVtpLmxlbmd0aC0xXSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrbC50b1N0cmluZygxNikpfX0pLGF9KGUsMCxyKTpmdW5jdGlvbiBmeChlLHQscil7dmFyIGE9e1R5cGVzOltdLENlbGw6W10sVmFsdWU6W119O2lmKCFlKXJldHVybiBhO3ZhciBzLG49ITEsaT0yO3JldHVybiBlLnJlcGxh''@;'; put 'put ''Y2UodnIsZnVuY3Rpb24oZil7dmFyIGM9bWUoZik7c3dpdGNoKHJ0KGNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxtZXRhZGF0YSI6Y2FzZSI8L21ldGFkYXRhPiI6Y2FzZSI8bWV0YWRhdGFUeXBlcyI6Y2FzZSI8L21ldGFkYXRhVHlwZXM+IjpjYXNlIjwvbWV0YWRhdGFUeXBlPiI6Y2FzZSI8''@;'; put 'put ''L2Z1dHVyZU1ldGFkYXRhPiI6Y2FzZSI8Yms+IjpjYXNlIjwvYms+IjpjYXNlIjwvcmM+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8bWV0YWRhdGFUeXBlIjphLlR5cGVzLnB1c2goe25hbWU6Yy5uYW1l''@;'; put 'put ''fSk7YnJlYWs7Y2FzZSI8ZnV0dXJlTWV0YWRhdGEiOmZvcih2YXIgbz0wO288YS5UeXBlcy5sZW5ndGg7KytvKWEuVHlwZXNbb10ubmFtZT09Yy5uYW1lJiYocz1hLlR5cGVzW29dKTticmVhaztjYXNlIjxyYyI6MT09aT9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2MudC0xXS5uYW1lLGlu''@;'; put 'put ''ZGV4OitjLnZ9KTowPT1pJiZhLlZhbHVlLnB1c2goe3R5cGU6YS5UeXBlc1tjLnQtMV0ubmFtZSxpbmRleDorYy52fSk7YnJlYWs7Y2FzZSI8Y2VsbE1ldGFkYXRhIjppPTE7YnJlYWs7Y2FzZSI8L2NlbGxNZXRhZGF0YT4iOmNhc2UiPC92YWx1ZU1ldGFkYXRhPiI6aT0yO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHZhbHVlTWV0YWRhdGEiOmk9MDticmVhaztjYXNlIjxleHQiOm49ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7Y2FzZSI8cnZiIjppZighcylicmVhaztzLm9mZnNldHN8fChzLm9mZnNldHM9W10pLHMub2Zmc2V0cy5wdXNoKCtjLmkpO2JyZWFrO2RlZmF1bHQ6aWYoIW4mJnIu''@;'; put 'put ''V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrY1swXSsiIGluIG1ldGFkYXRhIil9cmV0dXJuIGZ9KSxhfShlLDAscil9KFFlKGUsJHIobi5tZXRhZGF0YVswXSkpLG4ubWV0YWRhdGFbMF0sdCkpLChuLnBlb3BsZXx8W10pLmxlbmd0aD49MSYmKHQucGVvcGxlPWZ1bmN0aW9u''@;'; put 'put ''IHB4KGUsdCl7dmFyIHI9W10sYT0hMTtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8cGVyc29uTGlzdCI6Y2FzZSI8L3BlcnNvbkxpc3Q+IjpjYXNlIjwvcGVyc29uPiI6Y2FzZSI8ZXh0THN0Ijpj''@;'; put 'put ''YXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHBlcnNvbiI6ci5wdXNoKHtuYW1lOnMuZGlzcGxheW5hbWUsaWQ6cy5pZH0pO2JyZWFrO2Nhc2UiPGV4dCI6YT0hMDticmVhaztjYXNlIjwvZXh0PiI6YT0hMTticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3NbMF0rIiBpbiB0aHJlYWRlZCBjb21tZW50cyIpfXJldHVybiBpfSkscn0oUWUoZSwkcihuLnBlb3BsZVswXSkpLHQpKSxSJiYoUj1mdW5jdGlvbiBxbShlLHQpe2lmKCFlKXJldHVybiAwO3RyeXtlPXQubWFwKGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBhLmlkfHwoYS5pZD1hLnN0clJlbElEKSxbYS5uYW1lLGVbIiFpZCJdW2EuaWRdLlRhcmdldCxKbShlWyIhaWQiXVthLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZSYmMCE9PWUubGVuZ3RoP2U6bnVsbH0oUixsLlNoZWV0cykpO3ZhciBW''@;'; put 'put ''PVFlKGUsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIiwhMCk/MTowO2U6Zm9yKHA9MDtwIT1oLldvcmtzaGVldHM7KytwKXt2YXIgWD0ic2hlZXQiO2lmKFImJlJbcF0/KFQ9InhsLyIrUltwXVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxXcihlLFQpfHwoVD1SW3BdWzFdKSxXcihlLFQp''@;'; put 'put ''fHwoVD1QLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStSW3BdWzFdKSxYPVJbcF1bMl0pOlQ9KFQ9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhwKzEtVikrIi4iK0kpLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksZz1ULnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxz''@;'; put 'put ''LyQzLnJlbHMiKSx0JiZudWxsIT10LnNoZWV0cylzd2l0Y2godHlwZW9mIHQuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYocCE9dC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoaC5TaGVldE5hbWVzW3BdLnRvTG93ZXJDYXNlKCkhPXQuc2hlZXRzLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkodC5zaGVldHMpKXtmb3IodmFyIGI9ITEsZWU9MDtlZSE9dC5zaGVldHMubGVuZ3RoOysrZWUpIm51bWJlciI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXT09cCYmKGI9''@;'; put 'put ''MSksInN0cmluZyI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXS50b0xvd2VyQ2FzZSgpPT1oLlNoZWV0TmFtZXNbcF0udG9Mb3dlckNhc2UoKSYmKGI9MSk7aWYoIWIpY29udGludWUgZX19Wm0oZSxULGcsaC5TaGVldE5hbWVzW3BdLHAsayxzLFgsdCxsLGMsbyl9cmV0dXJu''@;'; put 'put ''IHY9e0RpcmVjdG9yeTpuLFdvcmtib29rOmwsUHJvcHM6aCxDdXN0cHJvcHM6ZCxEZXBzOnUsU2hlZXRzOnMsU2hlZXROYW1lczpoLlNoZWV0TmFtZXMsU3RyaW5nczpWYSxTdHlsZXM6byxUaGVtZXM6YyxTU0Y6TWUocGUpfSx0JiZ0LmJvb2tGaWxlcyYmKGUuZmlsZXM/KHYua2V5cz1hLHYu''@;'; put 'put ''ZmlsZXM9ZS5maWxlcyk6KHYua2V5cz1bXSx2LmZpbGVzPXt9LGUuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24obGUscmUpe2xlPWxlLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLHYua2V5cy5wdXNoKGxlKSx2LmZpbGVzW2xlXT1lLkZpbGVJbmRleFtyZV19KSkpLHQmJnQuYm9v''@;'; put 'put ''a1ZCQSYmKG4udmJhLmxlbmd0aD4wP3YudmJhcmF3PVFlKGUsJHIobi52YmFbMF0pLCEwKTpuLmRlZmF1bHRzJiZuLmRlZmF1bHRzLmJpbj09PVN4JiYodi52YmFyYXc9UWUoZSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLHZ9ZnVuY3Rpb24gZWcoZSx0KXt2YXIgcj10fHx7fSxhPSJXb3Jr''@;'; put 'put ''Ym9vayIsbj12ZS5maW5kKGUsYSk7dHJ5e2lmKCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7aWYoZnVuY3Rpb24gUGgoZSl7dmFyIHQ9e307dC5p''@;'; put 'put ''ZD1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQuUj1kdChlLDQpLHQuVT1kdChlLDQpLHQuVz1kdChlLDQpfShuLmNvbnRlbnQpLCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRl''@;'; put 'put ''ZCBmaWxlIG1pc3NpbmcgIithKTt2YXIgaT1mdW5jdGlvbiBCaChlKXt2YXIgdD1bXTtlLmwrPTQ7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChMaChlKSk7cmV0dXJuIHR9KG4uY29udGVudCk7aWYoMSE9PWkubGVuZ3RofHwxIT09aVswXS5jb21wcy5sZW5ndGh8''@;'; put 'put ''fDAhPT1pWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWlbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09aVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrYSk7aWYoIShuPXZlLmZpbmQo''@;'; put 'put ''ZSxhPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO3ZhciBzPWZ1bmN0aW9uIE1oKGUpe3ZhciB0PVtdO2UubCs9NDtm''@;'; put 'put ''b3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKGUucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiB0fShuLmNvbnRlbnQpO2lmKDEhPXMubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPXNbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNy''@;'; put 'put ''eXB0ZWQgZmlsZSBiYWQgIithKTtpZighKG49dmUuZmluZChlLGE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n''@;'; put 'put ''ICIrYSk7IWZ1bmN0aW9uIFdoKGUpe3ZhciB0PWZ1bmN0aW9uIFVoKGUpe3ZhciB0PXt9O3JldHVybiBlLnJlYWRfc2hpZnQoNCksZS5sKz00LHQuaWQ9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0Lm5hbWU9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0LlI9ZHQoZSw0KSx0LlU9ZHQoZSw0KSx0''@;'; put 'put ''Llc9ZHQoZSw0KSx0fShlKTtpZih0LmVuYW1lPWUucmVhZF9zaGlmdCgwLCI4bHBwNCIpLHQuYmxrc3o9ZS5yZWFkX3NoaWZ0KDQpLHQuY21vZGU9ZS5yZWFkX3NoaWZ0KDQpLDQhPWUucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4g''@;'; put 'put ''dH0obi5jb250ZW50KX1jYXRjaHt9aWYoIShuPXZlLmZpbmQoZSxhPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7dmFyIGY9ZnVuY3Rpb24gSGgoZSl7dmFyIHQ9ZHQoZSk7c3dpdGNo''@;'; put 'put ''KHQuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bdC5NaW5vcixWaChlKV07Y2FzZSAzOnJldHVyblt0Lk1pbm9yLFhoKCldO2Nhc2UgNDpyZXR1cm5bdC5NaW5vcixHaChlKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIit0Lk1p''@;'; put 'put ''bm9yKX0obi5jb250ZW50KTtpZighKG49dmUuZmluZChlLGE9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO2lmKDQ9PWZbMF0mJnR5cGVvZiBkZWNyeXB0X2FnaWxlPCJ1IilyZXR1''@;'; put 'put ''cm4gZGVjcnlwdF9hZ2lsZShmWzFdLG4uY29udGVudCxyLnBhc3N3b3JkfHwiIixyKTtpZigyPT1mWzBdJiZ0eXBlb2YgZGVjcnlwdF9zdGQ3NjwidSIpcmV0dXJuIGRlY3J5cHRfc3RkNzYoZlsxXSxuLmNvbnRlbnQsci5wYXNzd29yZHx8IiIscik7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlz''@;'; put 'put ''IHBhc3N3b3JkLXByb3RlY3RlZCIpfWZ1bmN0aW9uIEtuKGUsdCl7dmFyIHI9IiI7c3dpdGNoKCh0fHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddXTtjYXNlImJhc2U2NCI6''@;'; put 'put ''cj1PcihlLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyh0JiZ0LnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW3IuY2hhckNvZGVBdCgwKSxyLmNoYXJDb2RlQXQoMSksci5jaGFy''@;'; put 'put ''Q29kZUF0KDIpLHIuY2hhckNvZGVBdCgzKSxyLmNoYXJDb2RlQXQoNCksci5jaGFyQ29kZUF0KDUpLHIuY2hhckNvZGVBdCg2KSxyLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIHZjKGUsdCl7dmFyIHI9MDtlOmZvcig7cjxlLmxlbmd0aDspc3dpdGNoKGUuY2hhckNvZGVBdChyKSl7Y2FzZSAx''@;'; put 'put ''MDpjYXNlIDEzOmNhc2UgMzI6KytyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFVuKGUuc2xpY2UociksdCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBjYS50b193b3JrYm9vayhlLHQpfWZ1bmN0aW9uIFluKGUsdCxyLGEpe3JldHVybiBhPyhyLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2so''@;'; put 'put ''ZSxyKSk6Y2EudG9fd29ya2Jvb2sodCxyKX1mdW5jdGlvbiBJMChlLHQpe3IwKCk7dmFyIHI9dHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBJMChuZXcgVWludDhBcnJheShlKSwoKHI9TWUocikpLnR5cGU9ImFycmF5Iixy''@;'; put 'put ''KSk7dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSYmIXIudHlwZSYmKHIudHlwZT10eXBlb2YgRGVubzwidSI/ImJ1ZmZlciI6ImFycmF5Iik7dmFyIG4sYT1lLGk9ITE7aWYoci5jZWxsU3R5bGVzJiYoci5jZWxsTkY9ITAsci5zaGVldFN0dWJzPSEwKSxo''@;'; put 'put ''YT17fSxyLmRhdGVORiYmKGhhLmRhdGVORj1yLmRhdGVORiksci50eXBlfHwoci50eXBlPVNlJiZCdWZmZXIuaXNCdWZmZXIoZSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09ci50eXBlJiYoci50eXBlPVNlPyJidWZmZXIiOiJiaW5hcnkiLGE9ZnVuY3Rpb24gY28oZSl7aWYodHlwZW9m''@;'; put 'put ''IERlbm88InUiKXJldHVybiBEZW5vLnJlYWRGaWxlU3luYyhlKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB0PUZpbGUoZSk7dC5vcGVuKCJyIiksdC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgcj10LnJlYWQoKTtyZXR1cm4gdC5j''@;'; put 'put ''bG9zZSgpLHJ9Y2F0Y2goYSl7aWYoIWEubWVzc2FnZXx8IWEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBhfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrZSl9KGUpLHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmIVNlJiYoci50eXBlPSJhcnJheSIpKSwic3Ry''@;'; put 'put ''aW5nIj09ci50eXBlJiYoaT0hMCxyLnR5cGU9ImJpbmFyeSIsci5jb2RlcGFnZT02NTAwMSxhPWZ1bmN0aW9uIGZnKGUpe3JldHVybiBlLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT90dChlKTplfShlKSksImFycmF5Ij09ci50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgcz1uZXcgQXJyYXlCdWZmZXIoMyksZj1uZXcgVWludDhBcnJheShzKTtpZihmLmZvbz0iYmFyIiwhZi5mb28pcmV0dXJuKHI9TWUocikpLnR5cGU9ImFycmF5IixJMChNMChhKSxyKX1zd2l0Y2goKG49S24oYSxyKSlb''@;'; put 'put ''MF0pe2Nhc2UgMjA4OmlmKDIwNz09PW5bMV0mJjE3PT09blsyXSYmMjI0PT09blszXSYmMTYxPT09bls0XSYmMTc3PT09bls1XSYmMjY9PT1uWzZdJiYyMjU9PT1uWzddKXJldHVybiBmdW5jdGlvbiBhZyhlLHQpe3JldHVybiB2ZS5maW5kKGUsIkVuY3J5cHRlZFBhY2thZ2UiKT9lZyhlLHQp''@;'; put 'put ''OktmKGUsdCl9KHZlLnJlYWQoYSxyKSxyKTticmVhaztjYXNlIDk6aWYoblsxXTw9OClyZXR1cm4gS2YoYSxyKTticmVhaztjYXNlIDYwOnJldHVybiBVbihhLHIpO2Nhc2UgNzM6aWYoNzM9PT1uWzFdJiY0Mj09PW5bMl0mJjA9PT1uWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBG''@;'; put 'put ''aWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBnaChlLHQpe3ZhciByPXR8fHt9LGE9ISFyLldURjtyLldURj0hMDt0cnl7dmFyIG49ZWYudG9fd29ya2Jvb2soZSxyKTtyZXR1cm4gci5XVEY9YSxufWNhdGNoKGkpe2lmKHIuV1RGPWEsIWku''@;'; put 'put ''bWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJmEpdGhyb3cgaTtyZXR1cm4gY2EudG9fd29ya2Jvb2soZSx0KX19KGEscik7YnJlYWs7Y2FzZSA4NDppZig2NT09PW5bMV0mJjY2PT09blsyXSYmNzY9PT1uWzNdKXJldHVybiByZi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nh''@;'; put 'put ''c2UgODA6cmV0dXJuIDc1PT09blsxXSYmblsyXTw5JiZuWzNdPDk/ZnVuY3Rpb24gbmcoZSx0KXt2YXIgYT1lLG49dHx8e307cmV0dXJuIG4udHlwZXx8KG4udHlwZT1TZSYmQnVmZmVyLmlzQnVmZmVyKGUpPyJidWZmZXIiOiJiYXNlNjQiKSxRbShSaShhLG4pLG4pfShhLHIpOlluKGUsYSxy''@;'; put 'put ''LGkpO2Nhc2UgMjM5OnJldHVybiA2MD09PW5bM10/VW4oYSxyKTpZbihlLGEscixpKTtjYXNlIDI1NTppZigyNTQ9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBzZyhlLHQpe3ZhciByPWU7cmV0dXJuImJhc2U2NCI9PXQudHlwZSYmKHI9T3IocikpLHI9T2UudXRpbHMuZGVjb2RlKDEyMDAsci5z''@;'; put 'put ''bGljZSgyKSwic3RyIiksdC50eXBlPSJiaW5hcnkiLHZjKHIsdCl9KGEscik7aWYoMD09PW5bMV0mJjI9PT1uWzJdJiYwPT09blszXSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDA6aWYoMD09PW5bMV0mJihuWzJdPj0yJiYwPT09blszXXx8MD09PW5bMl0mJig4PT09''@;'; put 'put ''blszXXx8OT09PW5bM10pKSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIFRuLnRvX3dvcmtib29rKGEscik7Y2FzZSAxMjM6aWYoOTI9PT1uWzFdJiYxMTQ9PT1uWzJdJiYxMTY9PT1uWzNdKXJldHVybiBv''@;'; put 'put ''Zi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBpZyhlLHQpe3ZhciByPSIiLGE9S24oZSx0KTtzd2l0Y2godC50eXBlKXtjYXNlImJhc2U2NCI6cj1PcihlKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2Nhc2UiYnVm''@;'; put 'put ''ZmVyIjpyPWUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOnI9UHQoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrdC50eXBlKX1yZXR1cm4gMjM5PT1hWzBdJiYxODc9PWFbMV0mJjE5MT09YVsyXSYmKHI9QmUocikpLHQu''@;'; put 'put ''dHlwZT0iYmluYXJ5Iix2YyhyLHQpfShhLHIpO2Nhc2UgMTM3OmlmKDgwPT09blsxXSYmNzg9PT1uWzJdJiY3MT09PW5bM10pdGhyb3cgbmV3IEVycm9yKCJQTkcgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpfXJldHVybiBtaC5pbmRleE9mKG5bMF0pPi0xJiZuWzJdPD0xMiYm''@;'; put 'put ''blszXTw9MzE/VG4udG9fd29ya2Jvb2soYSxyKTpZbihlLGEscixpKX1mdW5jdGlvbiBfYyhlLHQscixhLG4saSxzLGYpe3ZhciBjPUtlKHIpLG89Zi5kZWZ2YWwsbD1mLnJhd3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJyYXciKSxoPSEwLHg9MT09PW4/W106''@;'; put 'put ''e307aWYoMSE9PW4paWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwiX19yb3dOdW1fXyIse3ZhbHVlOnIsZW51bWVyYWJsZTohMX0pfWNhdGNoe3guX19yb3dOdW1fXz1yfWVsc2UgeC5fX3Jvd051bV9fPXI7aWYoIXN8fGVbcl0pZm9yKHZhciBk''@;'; put 'put ''PXQucy5jO2Q8PXQuZS5jOysrZCl7dmFyIHY9cz9lW3JdW2RdOmVbYVtkXStjXTtpZih2b2lkIDAhPT12JiZ2b2lkIDAhPT12LnQpe3ZhciB1PXYudjtzd2l0Y2godi50KXtjYXNlInoiOmlmKG51bGw9PXUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjp1PTA9PXU/bnVsbDp2b2lkIDA7YnJlYWs7''@;'; put 'put ''Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIit2LnQpfWlmKG51bGwhPWlbZF0pe2lmKG51bGw9PXUpaWYoImUiPT12LnQmJm51bGw9PT11KXhbaVtkXV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9''@;'; put 'put ''PW8peFtpW2RdXT1vO2Vsc2V7aWYoIWx8fG51bGwhPT11KWNvbnRpbnVlO3hbaVtkXV09bnVsbH1lbHNlIHhbaVtkXV09bCYmKCJuIiE9PXYudHx8Im4iPT09di50JiYhMSE9PWYucmF3TnVtYmVycyk/dTphdCh2LHUsZik7bnVsbCE9dSYmKGg9ITEpfX1lbHNle2lmKHZvaWQgMD09PW8pY29u''@;'; put 'put ''dGludWU7bnVsbCE9aVtkXSYmKHhbaVtkXV09byl9fXJldHVybntyb3c6eCxpc2VtcHR5Omh9fWZ1bmN0aW9uIGVpKGUsdCxyLGEpe3ZhciBuPTE7aWYoIXIpZm9yKDtuPD02NTUzNSYmLTEhPWUuU2hlZXROYW1lcy5pbmRleE9mKHI9IlNoZWV0IituKTsrK24scj12b2lkIDApO2lmKCFyfHxl''@;'; put 'put ''LlNoZWV0TmFtZXMubGVuZ3RoPj02NTUzNSl0aHJvdyBuZXcgRXJyb3IoIlRvbyBtYW55IHdvcmtzaGVldHMiKTtpZihhJiZlLlNoZWV0TmFtZXMuaW5kZXhPZihyKT49MCl7dmFyIGk9ci5tYXRjaCgvKF4uKj8pKFxkKykkLyk7bj1pJiYraVsyXXx8MDt2YXIgcz1pJiZpWzFdfHxyO2Zvcigr''@;'; put 'put ''K247bjw9NjU1MzUmJi0xIT1lLlNoZWV0TmFtZXMuaW5kZXhPZihyPXMrbik7KytuKTt9aWYoZnVuY3Rpb24gVmYoZSx0KXtpZihlLmxlbmd0aD4zMSl7aWYodClyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgcj0hMDty''@;'; put 'put ''ZXR1cm4gZnAuZm9yRWFjaChmdW5jdGlvbihhKXtpZigtMSE9ZS5pbmRleE9mKGEpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtyPSExfX0pLHJ9KHIpLGUuU2hlZXROYW1lcy5pbmRleE9mKHIpPj0wKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IityKyJ8IGFscmVhZHkgZXhpc3RzISIpO3JldHVybiBlLlNoZWV0TmFtZXMucHVzaChyKSxlLlNoZWV0c1tyXT10LHJ9YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtkYXRhOmV9KT0+e2NvbnN0e2RhdGE6dCxvcHRzOnJ9PWU7dHJ5''@;'; put 'put ''e2NvbnN0IGE9STAodCxyKTtwb3N0TWVzc2FnZSh7ZXZlbnQ6InJlYWRpbmdfZW5kIix3b3JrYm9vazphfSl9Y2F0Y2goYSl7YS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikmJnBvc3RNZXNzYWdlKHtlcnJvcjphfSl9fSl9KSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l''@;'; put 'put ''dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl''@;'; put 'put ''bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu''@;'; put 'put ''dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy''@;'; put 'put ''b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog''@;'; put 'put ''ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv''@;'; put 'put ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5lNDU4NTQ2ODE5MzRlOTg2LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTSlMiIGxvZ2lubWVjaGFuaXNtPSJSZWRpcmVjdGVkIiBkZWJ1Zz0iZmFsc2UiIHVzZWNv''@;'; put 'put ''bXB1dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBkY3BhdGg9Ii90bXAvZGMiIGhvdGxpY2VuY2VrZXk9Im5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj4KICA8L3Nh''@;'; put 'put ''c2pzPgoKICA8Ym9keSBjZHMtdGhlbWU9ImxpZ2h0IiBjbGFzcz0ibS0wIj4KICAgIDxteS1hcHA+PC9teS1hcHA+CiAgPHNjcmlwdCBzcmM9InJ1bnRpbWUuNDAyZmMzY2ZiYzdlMWJkNC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0icG9seWZpbGxzLmRmMjdhMjQ2''@;'; put 'put ''NTQwZWE1ZWUuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InNjcmlwdHMuZjQxOGQ3ZTcxZGJmZDMwOS5qcyIgZGVmZXI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Im1haW4uZDliNmU1MTg0NjQ0M2MxMi5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48L2JvZHk+Cjwv''@;'; put 'put ''aHRtbD4K'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.d9b6e51846443c12-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 ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgeT17fTtmdW5jdGlvbiBJKF8pe2lmKHlbX10pcmV0dXJuIHlb''@;'; put 'put ''X10uZXhwb3J0czt2YXIgZz15W19dPXtpOl8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gWFtfXS5jYWxsKGcuZXhwb3J0cyxnLGcuZXhwb3J0cyxJKSxnLmw9ITAsZy5leHBvcnRzfXJldHVybiBJLm09WCxJLmM9eSxJLmQ9ZnVuY3Rpb24oXyxnLEIpe0kubyhfLGcpfHxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoXyxnLHtlbnVtZXJhYmxlOiEwLGdldDpCfSl9LEkucj1mdW5jdGlvbihfKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxJLnQ9ZnVuY3Rpb24oXyxnKXtpZigxJmcmJihfPUkoXykpLDgmZ3x8NCZnJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8mJl8uX19lc01vZHVsZSlyZXR1cm4gXzt2YXIgQj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEkucihCKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6X30pLDImZyYmInN0cmluZyIhPXR5cGVvZiBfKWZvcih2YXIgdyBpbiBfKUkuZChCLHcsZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19LmJpbmQobnVsbCx3KSk7cmV0dXJuIEJ9LEkubj1mdW5jdGlv''@;'; put 'put ''bihfKXt2YXIgZz1fJiZfLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gXy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBffTtyZXR1cm4gSS5kKGcsImEiLGcpLGd9LEkubz1mdW5jdGlvbihfLGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxn''@;'; put 'put ''KX0sSS5wPSIiLEkoSS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq''@;'; put 'put ''KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciBfPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w''@;'; put 'put ''bGF0ZS1vYnNlcnZlci50cyIpLGc9e30sQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n''@;'; put 'put ''bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUCl7aWYoMD09PVAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp''@;'; put 'put ''ZigvXHMvLnRlc3QoUCkpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFApe3JldHVybiBQLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihQLEYpe3ZhciBPPUYudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKFApJiYoUD10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShQKSxnW1BdJiZkZWxldGUgZ1tQXSxnW1BdPU8sXy5TaGFwZVRlbXBsYXRlT2JzZXJ2''@;'; put 'put ''ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoUCxPKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKFAsRixPKXtmb3IodmFyIHo9MCxOPU87ejxOLmxlbmd0aDt6Kyspe3ZhciBMPU5bel07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLEws''@;'; put 'put ''e2dldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFApe2lmKCJvYmplY3QiIT10eXBlb2YgUCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl''@;'; put 'put ''cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgRiBpbiBQKVAuaGFzT3duUHJvcGVydHkoRikmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEYsUFtGXSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmhhcz1mdW5jdGlvbihQKXtyZXR1cm4hIWdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oUCl7aWYoIVApcmV0dXJuIGc7aWYoInN0cmluZyIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50''@;'; put 'put ''IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIGdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl''@;'; put 'put ''Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEYgaW4gUClpZihQLmhhc093blByb3BlcnR5KEYpKXtpZighZy5oYXNPd25Qcm9wZXJ0eShGKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrRisiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMoZyxGLFBbRl0pfX0sd30oKTt5LkNsYXJpdHlJY29uc0FwaT1C''@;'; put 'put ''fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu''@;'; put 'put ''dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciBfPUkoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxnPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLEI9MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIFA9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBGKCl7dmFyIE89UC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIE8uY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrQixCKyssT30ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihQPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry''@;'; put 'put ''dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLHkuQ2xhcml0eUljb25FbGVtZW50PUYsRi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7''@;'; put 'put ''Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpGfX0pKS5jb25zdHJ1Y3Rvcj1GLEYucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBPPXcuY2xvbmVOb2RlKCExKTtPLmlkPXRoaXMuY2xySWNvblVuaXFJZCxPLnRleHRDb250''@;'; put 'put ''ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKE8pfSxGLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oTyl7IU51bWJlcihPKXx8TnVtYmVyKE8pPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z''@;'; put 'put ''dHlsZS53aWR0aD1PKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9TysicHgiKX0sRi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEYucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIE89dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09eiYmKHRo''@;'; put 'put ''aXMuY3VycmVudFNpemVBdHRyVmFsPXosdGhpcy5fc2V0SWNvblNpemUoeikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgTj10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv''@;'; put 'put ''bj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhOLGZ1bmN0aW9uKFUpe08uX2luamVjdFRlbXBsYXRlKFUpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPU4sIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW''@;'; put 'put ''YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU''@;'; put 'put ''ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1LJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUspLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0''@;'; put 'put ''dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihPLHosTil7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1PJiZ0aGlzLl9zZXRJY29uU2l6ZShOKSwic2hhcGUiPT09Tyl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy''@;'; put 'put ''VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKE4pLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz''@;'; put 'put ''Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oSyl7TC5faW5qZWN0VGVtcGxhdGUoSyl9KSksIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo''@;'; put 'put ''KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1PJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPU4sIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj''@;'; put 'put ''dFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxGLnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTz10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksTj10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO08/TyYmTy5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmTi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsTysiICIrdGhpcy5jbHJJ''@;'; put 'put ''Y29uVW5pcUlkKTpOLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxGLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oTyl7TyYmTyE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl''@;'; put 'put ''PU8pLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRi5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgs''@;'; put 'put ''eSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgXz1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksZz1J''@;'; put 'put ''KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxCPUkoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1fLkNsYXJpdHlJ''@;'; put 'put ''Y29uc0FwaS5pbnN0YW5jZTt5LkNsYXJpdHlJY29ucz13LHcuYWRkKEIuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u''@;'; put 'put ''Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLGcuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog''@;'; put 'put ''ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv''@;'; put 'put ''dW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db3JlU2hhcGVzPXkuQ2xyU2hhcGVBcnJvdz15LkNsclNoYXBlU3RlcEZvcndhcmQyPXkuQ2xyU2hhcGVFeWVIaWRlPXkuQ2xyU2hhcGVF''@;'; put 'put ''eWU9eS5DbHJTaGFwZUV2ZW50PXkuQ2xyU2hhcGVDYWxlbmRhcj15LkNsclNoYXBlQW5nbGVEb3VibGU9eS5DbHJTaGFwZVZpZXdDb2x1bW5zPXkuQ2xyU2hhcGVTZWFyY2g9eS5DbHJTaGFwZVZtQnVnPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkPXku''@;'; put 'put ''Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPXkuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9eS5DbHJTaGFwZUNsb3VkPXkuQ2xyU2hhcGVJbWFnZT15LkNsclNoYXBlQmVsbD15LkNsclNoYXBlRm9sZGVyT3Blbj15LkNsclNoYXBlRm9sZGVyPXkuQ2xyU2hhcGVBbmdsZT15LkNsclNoYXBl''@;'; put 'put ''VXNlcj15LkNsclNoYXBlQmFycz15LkNsclNoYXBlSGVscEluZm89eS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD15LkNsclNoYXBlRXJyb3JTdGFuZGFyZD15LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPXkuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9eS5DbHJTaGFwZUluZm9DaXJjbGU9eS5DbHJT''@;'; put 'put ''aGFwZUNoZWNrQ2lyY2xlPXkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT15LkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT15LkNsclNoYXBlVGltZXM9eS5DbHJTaGFwZUNoZWNrPXkuQ2xyU2hhcGVDb2c9eS5DbHJTaGFwZUhvbWU9eS5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw''@;'; put 'put ''O3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn''@;'; put 'put ''LXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy''@;'; put 'put ''LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n''@;'; put 'put ''KSx5LkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks''@;'; put 'put ''MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa''@;'; put 'put ''Ii8+JykseS5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz''@;'; put 'put ''Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQt''@;'; put 'put ''Mi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiww''@;'; put 'put ''LjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEu''@;'; put 'put ''NWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40''@;'; put 'put ''YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIx''@;'; put 'put ''Yy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wt''@;'; put 'put ''My4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43''@;'; put 'put ''LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIu''@;'; put 'put ''OC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdM''@;'; put 'put ''MzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4z''@;'; put 'put ''Yy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0''@;'; put 'put ''LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAu''@;'; put 'put ''OGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4''@;'; put 'put ''LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRj''@;'; put 'put ''MC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42''@;'; put 'put ''LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwx''@;'; put 'put ''LjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40''@;'; put 'put ''LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhs''@;'; put 'put ''MC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIs''@;'; put 'put ''NC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4z''@;'; put 'put ''LDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAu''@;'; put 'put ''MiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdj''@;'; put 'put ''My45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYt''@;'; put 'put ''MS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3''@;'; put 'put ''YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYy''@;'; put 'put ''LDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgt''@;'; put 'put ''LjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThW''@;'; put 'put ''MTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMu''@;'; put 'put ''M2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQz''@;'; put 'put ''LjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEu''@;'; put 'put ''NjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42''@;'; put 'put ''MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1''@;'; put 'put ''QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs''@;'; put 'put ''MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs''@;'; put 'put ''MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z''@;'; put 'put ''OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx''@;'; put 'put ''LjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSx5LkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+''@;'; put 'put ''JykseS5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx''@;'; put 'put ''LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt''@;'; put 'put ''Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz''@;'; put 'put ''LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu''@;'; put 'put ''NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSx5LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4''@;'; put 'put ''LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs''@;'; put 'put ''MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43''@;'; put 'put ''MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSx5LkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa''@;'; put 'put ''bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu''@;'; put 'put ''NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt''@;'; put 'put ''Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLHkuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx''@;'; put 'put ''MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs''@;'; put 'put ''MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSx5LkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw''@;'; put 'put ''LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs''@;'; put 'put ''MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSx5LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN''@;'; put 'put ''MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JykseS5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4''@;'; put 'put ''LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JykseS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwx''@;'; put 'put ''LTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2''@;'; put 'put ''LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQz''@;'; put 'put ''NDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYz''@;'; put 'put ''MzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4w''@;'; put 'put ''NDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3''@;'; put 'put ''OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIy''@;'; put 'put ''MTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEz''@;'; put 'put ''LjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44''@;'; put 'put ''LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLHkuQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu''@;'; put 'put ''MTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUu''@;'; put 'put ''NzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0w''@;'; put 'put ''LTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4z''@;'; put 'put ''LjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2Mt''@;'; put 'put ''MS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3''@;'; put 'put ''LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4''@;'; put 'put ''LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJT''@;'; put 'put ''aGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh''@;'; put 'put ''MSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFI''@;'; put 'put ''N1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2''@;'; put 'put ''LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4z''@;'; put 'put ''OSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEs''@;'; put 'put ''MCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1''@;'; put 'put ''LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSx5LkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0y''@;'; put 'put ''SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAs''@;'; put 'put ''MTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40Mkwx''@;'; put 'put ''NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIy''@;'; put 'put ''LjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAs''@;'; put 'put ''MTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgx''@;'; put 'put ''LjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5''@;'; put 'put ''LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAs''@;'; put 'put ''MCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs''@;'; put 'put ''MiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTks''@;'; put 'put ''MCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlB''@;'; put 'put ''MS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42''@;'; put 'put ''MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCww''@;'; put 'put ''LDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4y''@;'; put 'put ''Ni0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVI''@;'; put 'put ''NkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEu''@;'; put 'put ''NTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwz''@;'; put 'put ''MUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu''@;'; put 'put ''ODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCww''@;'; put 'put ''LDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3''@;'; put 'put ''LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIw''@;'; put 'put ''LjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUu''@;'; put 'put ''MzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYz''@;'; put 'put ''LDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYu''@;'; put 'put ''MTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMu''@;'; put 'put ''MzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcu''@;'; put 'put ''OGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCww''@;'; put 'put ''LDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUs''@;'; put 'put ''MjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFW''@;'; put 'put ''My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSW1hZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45''@;'; put 'put ''MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwx''@;'; put 'put ''LTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNB''@;'; put 'put ''MywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42''@;'; put 'put ''NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywy''@;'; put 'put ''NC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMx''@;'; put 'put ''SDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkEx''@;'; put 'put ''MC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5''@;'; put 'put ''LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDku''@;'; put 'put ''OSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42''@;'; put 'put ''NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFh''@;'; put 'put ''Ny40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwx''@;'; put 'put ''LDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNIb3Jp''@;'; put 'put ''em9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i''@;'; put 'put ''Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu''@;'; put 'put ''OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5D''@;'; put 'put ''bHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku''@;'; put 'put ''N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1''@;'; put 'put ''YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSx5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw''@;'; put 'put ''LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu''@;'; put 'put ''MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JykseS5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv''@;'; put 'put ''bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs''@;'; put 'put ''MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs''@;'; put 'put ''MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh''@;'; put 'put ''MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs''@;'; put 'put ''MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i''@;'; put 'put ''I2ZmZmZmZiIvPicpLHkuQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu''@;'; put 'put ''MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1''@;'; put 'put ''LDMzLjI5WiIvPicpLHkuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs''@;'; put 'put ''MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JykseS5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww''@;'; put 'put ''LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLHkuQ2xyU2hhcGVDYWxlbmRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSww''@;'; put 'put ''LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCww''@;'; put 'put ''LDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl''@;'; put 'put ''ZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW''@;'; put 'put ''MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1h''@;'; put 'put ''bGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiww''@;'; put 'put ''LDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgy''@;'; put 'put ''Wm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCww''@;'; put 'put ''LDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEs''@;'; put 'put ''MSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4''@;'; put 'put ''LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01''@;'; put 'put ''SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4''@;'; put 'put ''VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRXZlbnQ9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwz''@;'; put 'put ''MC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1''@;'; put 'put ''LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4''@;'; put 'put ''SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAs''@;'; put 'put ''MCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40''@;'; put 'put ''MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAy''@;'; put 'put ''MC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2Ex''@;'; put 'put ''LDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo''@;'; put 'put ''LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwx''@;'; put 'put ''Mi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwx''@;'; put 'put ''LDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5''@;'; put 'put ''LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMu''@;'; put 'put ''NzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQu''@;'; put 'put ''MDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40''@;'; put 'put ''OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz''@;'; put 'put ''LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs''@;'; put 'put ''MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz''@;'; put 'put ''TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu''@;'; put 'put ''MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0''@;'; put 'put ''Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2''@;'; put 'put ''LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4z''@;'; put 'put ''Ny0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwx''@;'; put 'put ''LjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEu''@;'; put 'put ''MTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUz''@;'; put 'put ''Yy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTku''@;'; put 'put ''OTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs''@;'; put 'put ''MTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwx''@;'; put 'put ''Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSx5LkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu''@;'; put 'put ''MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh''@;'; put 'put ''MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFycm93PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu''@;'; put 'put ''NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JykseS5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOnku''@;'; put 'put ''Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6eS5DbHJTaGFwZUhvbWUsY29nOnkuQ2xyU2hhcGVDb2csY2hlY2s6eS5DbHJTaGFwZUNoZWNrLHRpbWVzOnkuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h''@;'; put 'put ''dGlvbi1jaXJjbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjp5LkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjp5LkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6eS5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu''@;'; put 'put ''ZGFyZCI6eS5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOnkuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjp5LkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOnkuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOnkuQ2xyU2hhcGVC''@;'; put 'put ''YXJzLHVzZXI6eS5DbHJTaGFwZVVzZXIsYW5nbGU6eS5DbHJTaGFwZUFuZ2xlLGZvbGRlcjp5LkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6eS5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDp5LkNsclNoYXBlQmVsbCxpbWFnZTp5LkNsclNoYXBlSW1hZ2UsY2xvdWQ6eS5DbHJTaGFwZUNs''@;'; put 'put ''b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjp5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6eS5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjp5LkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjp5LkNsclNo''@;'; put 'put ''YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjp5LkNsclNoYXBlVm1CdWcsc2VhcmNoOnkuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6eS5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOnkuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjp5LkNsclNoYXBlQ2Fs''@;'; put 'put ''ZW5kYXIsZXZlbnQ6eS5DbHJTaGFwZUV2ZW50LGV5ZTp5LkNsclNoYXBlRXllLCJleWUtaGlkZSI6eS5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjp5LkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OnkuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29y''@;'; put 'put ''ZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHkuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFw''@;'; put 'put ''ZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5D''@;'; put 'put ''b3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1si''@;'; put 'put ''YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAseS5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8oZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHZhbHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v''@;'; put 'put ''cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu''@;'; put 'put ''ZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPXkuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAseS5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9''@;'; put 'put ''O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3RoaXMuY2FsbGJhY2tzPXkuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuc2luZ2xlSW5zdGFuY2V8fChnLnNpbmdsZUlu''@;'; put 'put ''c3RhbmNlPW5ldyBnKSxnLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGcucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbQl0/LTE9PT10aGlzLmNhbGxiYWNrc1tCXS5pbmRl''@;'; put 'put ''eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tCXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW0JdPVt3XSxmdW5jdGlvbigpe3ZhciBGPVAuY2FsbGJhY2tzW0JdLmluZGV4T2Yodyk7UC5jYWxsYmFja3NbQl0uc3BsaWNlKEYsMSksMD09PVAuY2FsbGJhY2tzW0JdLmxlbmd0aCYmZGVsZXRlIFAuY2Fs''@;'; put 'put ''bGJhY2tzW0JdfX0sZy5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oQix3KXt0aGlzLmNhbGxiYWNrc1tCXSYmdGhpcy5jYWxsYmFja3NbQl0ubWFwKGZ1bmN0aW9uKFApe1Aodyl9KX0sZ30oKTt5LlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1ffSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq''@;'; put 'put ''IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSkseS5jbHJJY29uU1ZHPXZvaWQgMDt5LmNsckljb25TVkc9ZnVuY3Rpb24gdyhQKXt2YXIgRj0iIjtyZXR1cm4gUC5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRis9ImNhbi1iYWRnZSAiKSxQLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRis9ImNhbi1h''@;'; put 'put ''bGVydCAiKSxQLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihGKz0iaGFzLXNvbGlkICIpLChGPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRisnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p''@;'; put 'put ''ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrUCsiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKHVlKXt1ZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKFgpe3ZhciB5PXt9O2Z1bmN0aW9uIEkoXyl7aWYoeVtfXSlyZXR1cm4geVtfXS5leHBvcnRzO3ZhciBnPXlbX109e2k6XyxsOiExLGV4cG9ydHM6e319O3JldHVybiBYW19dLmNhbGwoZy5leHBvcnRzLGcsZy5leHBvcnRzLEkpLGcubD0hMCxnLmV4cG9ydHN9cmV0dXJu''@;'; put 'put ''IEkubT1YLEkuYz15LEkuZD1mdW5jdGlvbihfLGcsQil7SS5vKF8sZyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLGcse2VudW1lcmFibGU6ITAsZ2V0OkJ9KX0sSS5yPWZ1bmN0aW9uKF8pe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShfLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEkudD1mdW5jdGlvbihfLGcpe2lmKDEmZyYmKF89SShfKSksOCZnfHw0JmcmJiJvYmplY3QiPT10eXBlb2YgXyYmXyYmXy5f''@;'; put 'put ''X2VzTW9kdWxlKXJldHVybiBfO3ZhciBCPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoSS5yKEIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpffSksMiZnJiYic3RyaW5nIiE9dHlwZW9mIF8pZm9yKHZhciB3IGluIF8pSS5kKEIsdyxmdW5j''@;'; put 'put ''dGlvbihQKXtyZXR1cm4gX1tQXX0uYmluZChudWxsLHcpKTtyZXR1cm4gQn0sSS5uPWZ1bmN0aW9uKF8pe3ZhciBnPV8mJl8uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBfLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIF99O3JldHVybiBJLmQoZywiYSIsZyksZ30sSS5vPWZ1bmN0''@;'; put 'put ''aW9uKF8sZyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGcpfSxJLnA9IiIsSShJLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov''@;'; put 'put ''KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5BbGxTaGFwZXM9dm9pZCAwO3ZhciBfPUko''@;'; put 'put ''Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLGc9SSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksQj1JKAovKiEgLi9jb3Jl''@;'; put 'put ''LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1JKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLFA9SSgKLyohIC4vbWVkaWEtc2hhcGVzICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRj1JKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLE89SSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLHo9SSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxOPUkoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bQi5Db3JlU2hhcGVzLGcuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsUC5NZWRpYVNoYXBlcyxGLlNvY2lhbFNoYXBlcyxPLlRlY2hub2xvZ3lTaGFwZXMsTi5UcmF2ZWxTaGFwZXMsXy5DaGFydFNoYXBlcyx6''@;'; put 'put ''LlRleHRFZGl0U2hhcGVzXSxLPXt9O3kuQWxsU2hhcGVzPUs7Zm9yKHZhciBVPTAsVz1MO1U8Vy5sZW5ndGg7VSsrKXt2YXIgWT1XW1VdO2Zvcih2YXIgcSBpbiBZKVkuaGFzT3duUHJvcGVydHkocSkmJihLW3FdPVlbcV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChLKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DaGFydFNoYXBlcz15LkNsclNoYXBlQmVsbEN1cnZlPXkuQ2xyU2hhcGVUaWNrQ2hhcnQ9eS5DbHJTaGFwZVNjYXR0ZXJQbG90PXkuQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydD15LkNsclNoYXBlTGluZUNoYXJ0PXkuQ2xyU2hhcGVIZWF0TWFwPXkuQ2xyU2hhcGVHcmlkQ2hhcnQ9eS5DbHJTaGFwZUN1cnZlQ2hhcnQ9eS5DbHJTaGFwZUNsb3VkQ2hhcnQ9eS5DbHJTaGFwZUJ1YmJsZUNoYXJ0PXkuQ2xyU2hhcGVCb3hQbG90PXkuQ2xyU2hhcGVCYXJDaGFydD15''@;'; put 'put ''LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv''@;'; put 'put ''amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUF4aXNDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1''@;'; put 'put ''Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEg''@;'; put 'put ''QyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcg''@;'; put 'put ''MjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMg''@;'; put 'put ''Mi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg''@;'; put 'put ''TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz''@;'; put 'put ''MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAy''@;'; put 'put ''Ny43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42''@;'; put 'put ''NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwg''@;'; put 'put ''MzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3''@;'; put 'put ''IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4''@;'; put 'put ''IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5''@;'; put 'put ''OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwg''@;'; put 'put ''MjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAu''@;'; put 'put ''NjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcg''@;'; put 'put ''MTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEu''@;'; put 'put ''MTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JykseS5DbHJTaGFwZUJhckNoYXJ0PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3''@;'; put 'put ''VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBD''@;'; put 'put ''IDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwg''@;'; put 'put ''MTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIx''@;'; put 'put ''IDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAy''@;'; put 'put ''Ny40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUg''@;'; put 'put ''MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4w''@;'; put 'put ''MzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcg''@;'; put 'put ''MTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEg''@;'; put 'put ''MTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwg''@;'; put 'put ''MjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMu''@;'; put 'put ''MDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+''@;'; put 'put ''PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5''@;'; put 'put ''NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEw''@;'; put 'put ''IFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2''@;'; put 'put ''Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44''@;'; put 'put ''NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLHkuQ2xyU2hhcGVCb3hQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBM''@;'; put 'put ''IDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQg''@;'; put 'put ''TCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBM''@;'; put 'put ''IDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRo''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg''@;'; put 'put ''MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg''@;'; put 'put ''WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcu''@;'; put 'put ''MiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAx''@;'; put 'put ''MS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMuMTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40Mjkg''@;'; put 'put ''MzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEy''@;'; put 'put ''LjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwg''@;'; put 'put ''MTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAu''@;'; put 'put ''NiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEz''@;'; put 'put ''LjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1''@;'; put 'put ''OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBa''@;'; put 'put ''IE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx''@;'; put 'put ''My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg''@;'; put 'put ''MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD''@;'; put 'put ''IDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg''@;'; put 'put ''MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy''@;'; put 'put ''NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBD''@;'; put 'put ''IDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42''@;'; put 'put ''NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMg''@;'; put 'put ''QyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYg''@;'; put 'put ''MjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0''@;'; put 'put ''IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAx''@;'; put 'put ''OCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAy''@;'; put 'put ''MSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcg''@;'; put 'put ''NyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0''@;'; put 'put ''IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAx''@;'; put 'put ''NSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMg''@;'; put 'put ''MTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg''@;'; put 'put ''NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz''@;'; put 'put ''LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAy''@;'; put 'put ''NiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0''@;'; put 'put ''LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMu''@;'; put 'put ''NDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1''@;'; put 'put ''IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAy''@;'; put 'put ''NiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcg''@;'; put 'put ''MjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43''@;'; put 'put ''NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4''@;'; put 'put ''IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEy''@;'; put 'put ''LjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMg''@;'; put 'put ''MjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIz''@;'; put 'put ''Ljc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAw''@;'; put 'put ''MSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBD''@;'; put 'put ''IDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBM''@;'; put 'put ''IDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAg''@;'; put 'put ''QyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAy''@;'; put 'put ''NiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQg''@;'; put 'put ''MS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDEx''@;'; put 'put ''LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlQ2xvdWRDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAx''@;'; put 'put ''MS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3''@;'; put 'put ''MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcg''@;'; put 'put ''MTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIg''@;'; put 'put ''QyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYu''@;'; put 'put ''NCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkg''@;'; put 'put ''QyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3''@;'; put 'put ''IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIy''@;'; put 'put ''IDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMg''@;'; put 'put ''MiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIu''@;'; put 'put ''MzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYz''@;'; put 'put ''NyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42''@;'; put 'put ''MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4z''@;'; put 'put ''NDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2''@;'; put 'put ''LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBa''@;'; put 'put ''IE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44Nzkg''@;'; put 'put ''OS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAu''@;'; put 'put ''MTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAy''@;'; put 'put ''MC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcuNDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIz''@;'; put 'put ''LjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjky''@;'; put 'put ''OCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwg''@;'; put 'put ''MjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy''@;'; put 'put ''IDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4y''@;'; put 'put ''NDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMg''@;'; put 'put ''MjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0''@;'; put 'put ''IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx''@;'; put 'put ''MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44''@;'; put 'put ''OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg''@;'; put 'put ''MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5''@;'; put 'put ''LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw''@;'; put 'put ''MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEy''@;'; put 'put ''IEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAy''@;'; put 'put ''OS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDgg''@;'; put 'put ''NiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu''@;'; put 'put ''NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z''@;'; put 'put ''NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAx''@;'; put 'put ''MS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQu''@;'; put 'put ''MiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0''@;'; put 'put ''IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEy''@;'; put 'put ''LjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAz''@;'; put 'put ''MS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5''@;'; put 'put ''IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2''@;'; put 'put ''MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1''@;'; put 'put ''IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBD''@;'; put 'put ''IDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3''@;'; put 'put ''Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4''@;'; put 'put ''LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3''@;'; put 'put ''OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx''@;'; put 'put ''LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAz''@;'; put 'put ''NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAx''@;'; put 'put ''Mi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTgu''@;'; put 'put ''Mjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIw''@;'; put 'put ''LjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEz''@;'; put 'put ''LjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0''@;'; put 'put ''NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLHkuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww''@;'; put 'put ''LDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEs''@;'; put 'put ''Mi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwy''@;'; put 'put ''LDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwz''@;'; put 'put ''MiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2''@;'; put 'put ''Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAx''@;'; put 'put ''OS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIg''@;'; put 'put ''MjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBD''@;'; put 'put ''IDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4x''@;'; put 'put ''ODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAu''@;'; put 'put ''Mjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2''@;'; put 'put ''IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx''@;'; put 'put ''OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg''@;'; put 'put ''OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBM''@;'; put 'put ''IDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBa''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIu''@;'; put 'put ''MTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcg''@;'; put 'put ''MC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3''@;'; put 'put ''QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1''@;'; put 'put ''IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0''@;'; put 'put ''IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIs''@;'; put 'put ''MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIs''@;'; put 'put ''MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBD''@;'; put 'put ''IDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44''@;'; put 'put ''OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4x''@;'; put 'put ''MDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD''@;'; put 'put ''IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5''@;'; put 'put ''IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSGVhdE1hcD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM''@;'; put 'put ''IDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAx''@;'; put 'put ''OC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUy''@;'; put 'put ''NCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQg''@;'; put 'put ''MTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYg''@;'; put 'put ''MTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBM''@;'; put 'put ''IDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIw''@;'; put 'put ''Ljc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkg''@;'; put 'put ''MTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAy''@;'; put 'put ''NiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw''@;'; put 'put ''NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu''@;'; put 'put ''MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkg''@;'; put 'put ''TCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIg''@;'; put 'put ''Ni44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAg''@;'; put 'put ''MTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAx''@;'; put 'put ''Mi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAy''@;'; put 'put ''OSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAy''@;'; put 'put ''NCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTku''@;'; put 'put ''MDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMg''@;'; put 'put ''MzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZUxp''@;'; put 'put ''bmVDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1''@;'; put 'put ''IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDku''@;'; put 'put ''MzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYg''@;'; put 'put ''MjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUg''@;'; put 'put ''NSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42''@;'; put 'put ''MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4zMiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2''@;'; put 'put ''IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMzIDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAx''@;'; put 'put ''Mi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg''@;'; put 'put ''NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEu''@;'; put 'put ''NTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAyOS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1''@;'; put 'put ''IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4z''@;'; put 'put ''NDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUg''@;'; put 'put ''MiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwg''@;'; put 'put ''MjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIu''@;'; put 'put ''MjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEu''@;'; put 'put ''MTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlUGllQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu''@;'; put 'put ''ODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAx''@;'; put 'put ''OSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1''@;'; put 'put ''IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwg''@;'; put 'put ''MTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBD''@;'; put 'put ''IDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBD''@;'; put 'put ''IDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAx''@;'; put 'put ''OCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAy''@;'; put 'put ''NS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3''@;'; put 'put ''IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEg''@;'; put 'put ''MTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMg''@;'; put 'put ''MjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4z''@;'; put 'put ''NDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4x''@;'; put 'put ''MTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAx''@;'; put 'put ''MS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4x''@;'; put 'put ''MDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQz''@;'; put 'put ''NyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw''@;'; put 'put ''NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu''@;'; put 'put ''MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg''@;'; put 'put ''NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUu''@;'; put 'put ''MjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEw''@;'; put 'put ''LjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTku''@;'; put 'put ''NzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAy''@;'; put 'put ''MC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAy''@;'; put 'put ''NC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAu''@;'; put 'put ''MzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAx''@;'; put 'put ''Ni41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4z''@;'; put 'put ''NTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcg''@;'; put 'put ''TCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAx''@;'; put 'put ''Ni4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBD''@;'; put 'put ''IDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEu''@;'; put 'put ''ODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40''@;'; put 'put ''NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2''@;'; put 'put ''IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIx''@;'; put 'put ''Ljg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIg''@;'; put 'put ''MTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYg''@;'; put 'put ''MTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYu''@;'; put 'put ''NjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUg''@;'; put 'put ''MzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg''@;'; put 'put ''ZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgx''@;'; put 'put ''IDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2''@;'; put 'put ''MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44''@;'; put 'put ''MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4''@;'; put 'put ''LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg''@;'; put 'put ''MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0''@;'; put 'put ''LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMg''@;'; put 'put ''MjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIu''@;'; put 'put ''NTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy''@;'; put 'put ''IDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQg''@;'; put 'put ''WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg''@;'; put 'put ''MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz''@;'; put 'put ''IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44''@;'; put 'put ''NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg''@;'; put 'put ''TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0''@;'; put 'put ''Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0''@;'; put 'put ''IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg''@;'; put 'put ''MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu''@;'; put 'put ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEz''@;'; put 'put ''LjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAx''@;'; put 'put ''MS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkg''@;'; put 'put ''MTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYg''@;'; put 'put ''MjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIw''@;'; put 'put ''Ljk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3''@;'; put 'put ''NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTku''@;'; put 'put ''NDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43''@;'; put 'put ''NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAy''@;'; put 'put ''Mi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41''@;'; put 'put ''NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAz''@;'; put 'put ''MC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcg''@;'; put 'put ''WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg''@;'; put 'put ''MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz''@;'; put 'put ''IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44''@;'; put 'put ''NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg''@;'; put 'put ''TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0''@;'; put 'put ''Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0''@;'; put 'put ''IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg''@;'; put 'put ''MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu''@;'; put 'put ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0''@;'; put 'put ''IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxu''@;'; put 'put ''ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLHkuQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5''@;'; put 'put ''NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIy''@;'; put 'put ''IEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYu''@;'; put 'put ''OTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAx''@;'; put 'put ''MyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3''@;'; put 'put ''IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAz''@;'; put 'put ''NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1''@;'; put 'put ''IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYg''@;'; put 'put ''MjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1''@;'; put 'put ''IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4''@;'; put 'put ''LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAy''@;'; put 'put ''NSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1''@;'; put 'put ''NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4''@;'; put 'put ''IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEg''@;'; put 'put ''WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEg''@;'; put 'put ''QyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAy''@;'; put 'put ''OC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg''@;'; put 'put ''MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIy''@;'; put 'put ''IEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN''@;'; put 'put ''IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz''@;'; put 'put ''NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLHkuQ2xyU2hhcGVCZWxsQ3VydmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz''@;'; put 'put ''LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0Ijp5LkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOnkuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0Ijp5LkNsclNoYXBlQnViYmxlQ2hh''@;'; put 'put ''cnQsImNsb3VkLWNoYXJ0Ijp5LkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOnkuQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0Ijp5LkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0Ijp5LkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOnkuQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydCwidGljay1jaGFydCI6eS5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90Ijp5LkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90Ijp5LkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOnkuQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjp5LkNsclNoYXBlQmVsbEN1cnZl''@;'; put 'put ''fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k''@;'; put 'put ''b3cuQ2xhcml0eUljb25zLmFkZCh5LkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg''@;'; put 'put ''ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db21tZXJjZVNoYXBlcz15LkNsclNoYXBlRmFjdG9yeT15LkNsclNoYXBlRW1wbG95ZWU9eS5DbHJTaGFwZUVtcGxveWVlR3JvdXA9eS5DbHJTaGFwZVJ1''@;'; put 'put ''YmxlPXkuQ2xyU2hhcGVQZXNvPXkuQ2xyU2hhcGVDb2luQmFnPXkuQ2xyU2hhcGVCaXRjb2luPXkuQ2xyU2hhcGVZZW49eS5DbHJTaGFwZVdvbj15LkNsclNoYXBlUnVwZWU9eS5DbHJTaGFwZVBvdW5kPXkuQ2xyU2hhcGVFQ2hlY2s9eS5DbHJTaGFwZURvbGxhckJpbGw9eS5DbHJTaGFwZUJh''@;'; put 'put ''bms9eS5DbHJTaGFwZUNyZWRpdENhcmQ9eS5DbHJTaGFwZURvbGxhcj15LkNsclNoYXBlRXVybz15LkNsclNoYXBlU3RvcmU9eS5DbHJTaGFwZVdhbGxldD15LkNsclNoYXBlU2hvcHBpbmdDYXJ0PXkuQ2xyU2hhcGVQaWdneUJhbms9eS5DbHJTaGFwZVNob3BwaW5nQmFnPXkuQ2xyU2hhcGVD''@;'; put 'put ''YWxjdWxhdG9yPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUNhbGN1bGF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIw''@;'; put 'put ''IDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4''@;'; put 'put ''IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gx''@;'; put 'put ''MFY1SDI2WiIvPicpLHkuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1''@;'; put 'put ''LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2''@;'; put 'put ''My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JykseS5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw''@;'; put 'put ''LjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAsMSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Y3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQyLDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4z''@;'; put 'put ''NSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiwwLDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCwwLDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQu''@;'; put 'put ''ODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQzLS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNhNCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43''@;'; put 'put ''NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCwwLDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAuMzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3''@;'; put 'put ''LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0uNTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42''@;'; put 'put ''MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiwwLDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4yOS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEu''@;'; put 'put ''MDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEtNC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcs''@;'; put 'put ''MCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEsMjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0u''@;'; put 'put ''NjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwx''@;'; put 'put ''LDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAtNS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwx''@;'; put 'put ''N2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAs''@;'; put 'put ''MCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIuMDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNyww''@;'; put 'put ''LDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0uMjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEz''@;'; put 'put ''Ljc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIuNjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0xMy43OSwxMS41OWEuODYuODYsMCwwLDEtLjMu''@;'; put 'put ''MDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAsMCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRBMS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3Ljcy''@;'; put 'put ''WiIvPicpLHkuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9''@;'; put 'put ''IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42''@;'; put 'put ''Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0y''@;'; put 'put ''SDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1''@;'; put 'put ''LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCww''@;'; put 'put ''LDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1''@;'; put 'put ''LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjci''@;'; put 'put ''IGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwu''@;'; put 'put ''NjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAt''@;'; put 'put ''LjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhs''@;'; put 'put ''MS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwx''@;'; put 'put ''LDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEt''@;'; put 'put ''Ljc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAs''@;'; put 'put ''MTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0u''@;'; put 'put ''NjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgy''@;'; put 'put ''OS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlV2FsbGV0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs''@;'; put 'put ''MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs''@;'; put 'put ''MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs''@;'; put 'put ''MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45''@;'; put 'put ''NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi''@;'; put 'put ''Lz4nKSx5LkNsclNoYXBlU3RvcmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww''@;'; put 'put ''LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0''@;'; put 'put ''LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx''@;'; put 'put ''LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs''@;'; put 'put ''MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey''@;'; put 'put ''LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JykseS5DbHJTaGFwZUV1cm89KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww''@;'; put 'put ''LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww''@;'; put 'put ''LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4''@;'; put 'put ''LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx''@;'; put 'put ''MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSx5LkNsclNoYXBlRG9sbGFyPSgwLGcuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUEx''@;'; put 'put ''MS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2''@;'; put 'put ''LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4''@;'; put 'put ''djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5''@;'; put 'put ''QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4y''@;'; put 'put ''NWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQs''@;'; put 'put ''MCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4x''@;'; put 'put ''NS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1''@;'; put 'put ''QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JykseS5DbHJTaGFwZUNyZWRpdENhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w''@;'; put 'put ''LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu''@;'; put 'put ''c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCYW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z''@;'; put 'put ''LjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwx''@;'; put 'put ''LDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdp''@;'; put 'put ''ZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgz''@;'; put 'put ''M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45''@;'; put 'put ''LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3''@;'; put 'put ''LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAs''@;'; put 'put ''MSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2''@;'; put 'put ''LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwxOS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIxLjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgzMVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEu''@;'; put 'put ''OC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4''@;'; put 'put ''VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwx''@;'; put 'put ''LDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUsMCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYx''@;'; put 'put ''My40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVB''@;'; put 'put ''MS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAs''@;'; put 'put ''MCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JykseS5DbHJTaGFwZURvbGxhckJpbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs''@;'; put 'put ''MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu''@;'; put 'put ''MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw''@;'; put 'put ''Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy''@;'; put 'put ''LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww''@;'; put 'put ''LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSx5LkNsclNoYXBlRUNoZWNrPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQs''@;'; put 'put ''OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAs''@;'; put 'put ''MC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEu''@;'; put 'put ''ODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAs''@;'; put 'put ''MCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCww''@;'; put 'put ''LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlUG91bmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs''@;'; put 'put ''MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy''@;'; put 'put ''LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y''@;'; put 'put ''MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLHkuQ2xyU2hhcGVSdXBlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4''@;'; put 'put ''LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu''@;'; put 'put ''OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41''@;'; put 'put ''SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLHkuQ2xyU2hhcGVXb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEs''@;'; put 'put ''MCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEs''@;'; put 'put ''MTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9''@;'; put 'put ''IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43''@;'; put 'put ''OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIw''@;'; put 'put ''SDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAs''@;'; put 'put ''MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlWWVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu''@;'; put 'put ''Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz''@;'; put 'put ''NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y''@;'; put 'put ''Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSx5LkNsclNoYXBlQml0Y29pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx''@;'; put 'put ''LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww''@;'; put 'put ''LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy''@;'; put 'put ''NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVDb2luQmFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEyOCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywzLjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCww''@;'; put 'put ''LDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgyLDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4''@;'; put 'put ''LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMuMDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAtMS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCww''@;'; put 'put ''LDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwuMzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIsMCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEz''@;'; put 'put ''LjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFhMSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0LjksMCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDks''@;'; put 'put ''MCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIsMjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3''@;'; put 'put ''LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEuNjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAs''@;'; put 'put ''MCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAs''@;'; put 'put ''MCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIs''@;'; put 'put ''MzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JykseS5DbHJTaGFwZVBlc289KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu''@;'; put 'put ''ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42''@;'; put 'put ''aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44''@;'; put 'put ''SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4''@;'; put 'put ''LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu''@;'; put 'put ''MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1''@;'; put 'put ''YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVSdWJsZT0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa''@;'; put 'put ''TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB''@;'; put 'put ''NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y''@;'; put 'put ''NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw''@;'; put 'put ''LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa''@;'; put 'put ''bTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCww''@;'; put 'put ''LDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEsMTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJB''@;'; put 'put ''MS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMsMjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiww''@;'; put 'put ''VjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThWMjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAg''@;'; put 'put ''PHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2''@;'; put 'put ''My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjExLDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEy''@;'; put 'put ''LTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEw''@;'; put 'put ''LjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4xNiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAsNC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2''@;'; put 'put ''LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAsMCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCww''@;'; put 'put ''LDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUuMTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxl''@;'; put 'put ''bGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0uMjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1''@;'; put 'put ''LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNyww''@;'; put 'put ''LDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4''@;'; put 'put ''LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUu''@;'; put 'put ''NzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0i''@;'; put 'put ''NS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwxOCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2''@;'; put 'put ''LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEsMCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAsMCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JykseS5DbHJTaGFwZUVtcGxveWVlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx''@;'; put 'put ''Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww''@;'; put 'put ''LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx''@;'; put 'put ''LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JykseS5DbHJTaGFwZUZhY3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu''@;'; put 'put ''NjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZo''@;'; put 'put ''OS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0i''@;'; put 'put ''MjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5c''@;'; put 'put ''biAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEu''@;'; put 'put ''NjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZI''@;'; put 'put ''MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOnkuQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjp5LkNsclNoYXBl''@;'; put 'put ''UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOnkuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6eS5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6eS5DbHJTaGFwZVdhbGxldCxzdG9yZTp5LkNsclNoYXBlU3RvcmUsZXVybzp5LkNsclNoYXBlRXVybyxkb2xsYXI6eS5DbHJT''@;'; put 'put ''aGFwZURvbGxhcixwZXNvOnkuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6eS5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazp5LkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOnkuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjp5LkNsclNoYXBlRUNoZWNrLHBvdW5kOnkuQ2xyU2hhcGVQ''@;'; put 'put ''b3VuZCxydXBlZTp5LkNsclNoYXBlUnVwZWUsd29uOnkuQ2xyU2hhcGVXb24seWVuOnkuQ2xyU2hhcGVZZW4sYml0Y29pbjp5LkNsclNoYXBlQml0Y29pbixydWJsZTp5LkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjp5LkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOnkuQ2xyU2hh''@;'; put 'put ''cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOnkuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OnkuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvbW1lcmNlU2hhcGVzWyJwaWdn''@;'; put 'put ''eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db3JlU2hhcGVzPXkuQ2xyU2hhcGVBcnJvdz15''@;'; put 'put ''LkNsclNoYXBlU3RlcEZvcndhcmQyPXkuQ2xyU2hhcGVFeWVIaWRlPXkuQ2xyU2hhcGVFeWU9eS5DbHJTaGFwZUV2ZW50PXkuQ2xyU2hhcGVDYWxlbmRhcj15LkNsclNoYXBlQW5nbGVEb3VibGU9eS5DbHJTaGFwZVZpZXdDb2x1bW5zPXkuQ2xyU2hhcGVTZWFyY2g9eS5DbHJTaGFwZVZtQnVn''@;'; put 'put ''PXkuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkPXkuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPXkuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9eS5DbHJTaGFwZUNsb3VkPXkuQ2xyU2hhcGVJbWFnZT15LkNsclNoYXBlQmVsbD15LkNsclNoYXBlRm9s''@;'; put 'put ''ZGVyT3Blbj15LkNsclNoYXBlRm9sZGVyPXkuQ2xyU2hhcGVBbmdsZT15LkNsclNoYXBlVXNlcj15LkNsclNoYXBlQmFycz15LkNsclNoYXBlSGVscEluZm89eS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD15LkNsclNoYXBlRXJyb3JTdGFuZGFyZD15LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk''@;'; put 'put ''PXkuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9eS5DbHJTaGFwZUluZm9DaXJjbGU9eS5DbHJTaGFwZUNoZWNrQ2lyY2xlPXkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT15LkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT15LkNsclNoYXBlVGltZXM9eS5DbHJTaGFwZUNoZWNrPXkuQ2xyU2hh''@;'; put 'put ''cGVDb2c9eS5DbHJTaGFwZUhvbWU9eS5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9z''@;'; put 'put ''dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj''@;'; put 'put ''eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z''@;'; put 'put ''NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww''@;'; put 'put ''LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSx5LkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww''@;'; put 'put ''LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz''@;'; put 'put ''VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs''@;'; put 'put ''NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44''@;'; put 'put ''M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JykseS5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs''@;'; put 'put ''N3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40''@;'; put 'put ''Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIs''@;'; put 'put ''MTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEu''@;'; put 'put ''MWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQs''@;'; put 'put ''MTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwt''@;'; put 'put ''MS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJs''@;'; put 'put ''MC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAu''@;'; put 'put ''NywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdz''@;'; put 'put ''LTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYs''@;'; put 'put ''MS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwx''@;'; put 'put ''LjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0w''@;'; put 'put ''LjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAu''@;'; put 'put ''My0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4x''@;'; put 'put ''bDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZs''@;'; put 'put ''Mi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjls''@;'; put 'put ''LTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMw''@;'; put 'put ''LjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41''@;'; put 'put ''LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40''@;'; put 'put ''YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4z''@;'; put 'put ''LTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMz''@;'; put 'put ''LjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0w''@;'; put 'put ''LjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0w''@;'; put 'put ''LjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3''@;'; put 'put ''LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42''@;'; put 'put ''OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYx''@;'; put 'put ''LDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45''@;'; put 'put ''NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42''@;'; put 'put ''MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEu''@;'; put 'put ''NjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4z''@;'; put 'put ''N2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwx''@;'; put 'put ''MS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43''@;'; put 'put ''MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMx''@;'; put 'put ''YS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40''@;'; put 'put ''My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdh''@;'; put 'put ''LjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42Myww''@;'; put 'put ''LDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSx5LkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JykseS5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx''@;'; put 'put ''LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9''@;'; put 'put ''IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42''@;'; put 'put ''NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu''@;'; put 'put ''NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSx5LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1''@;'; put 'put ''IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu''@;'; put 'put ''NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSx5LkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs''@;'; put 'put ''MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLHkuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs''@;'; put 'put ''MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs''@;'; put 'put ''MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSx5LkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs''@;'; put 'put ''MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx''@;'; put 'put ''LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSx5LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh''@;'; put 'put ''MS40LDEuNCwwLDEsMSwyLDJaIi8+JykseS5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+''@;'; put 'put ''JykseS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''IGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwz''@;'; put 'put ''NC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMy''@;'; put 'put ''Ljg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3''@;'; put 'put ''NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTgg''@;'; put 'put ''MzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0''@;'; put 'put ''MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCww''@;'; put 'put ''djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLHkuQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu''@;'; put 'put ''NDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUu''@;'; put 'put ''NTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTku''@;'; put 'put ''MywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIu''@;'; put 'put ''NjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIw''@;'; put 'put ''Ljc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2''@;'; put 'put ''LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40Nywy''@;'; put 'put ''LjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx''@;'; put 'put ''LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx''@;'; put 'put ''LTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgy''@;'; put 'put ''OWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4z''@;'; put 'put ''N2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4''@;'; put 'put ''LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcu''@;'; put 'put ''MTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42''@;'; put 'put ''MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYx''@;'; put 'put ''LDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3''@;'; put 'put ''LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu''@;'; put 'put ''NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSx5LkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDls''@;'; put 'put ''Mi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMu''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQu''@;'; put 'put ''MTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5''@;'; put 'put ''LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEz''@;'; put 'put ''LjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PicpLHkuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs''@;'; put 'put ''MSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAs''@;'; put 'put ''MCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSww''@;'; put 'put ''LDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYu''@;'; put 'put ''OWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAs''@;'; put 'put ''MSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJM''@;'; put 'put ''MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwy''@;'; put 'put ''LjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs''@;'; put 'put ''NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu''@;'; put 'put ''NEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs''@;'; put 'put ''MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43''@;'; put 'put ''MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44''@;'; put 'put ''M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42''@;'; put 'put ''MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywx''@;'; put 'put ''NC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4y''@;'; put 'put ''NCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDks''@;'; put 'put ''MCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAs''@;'; put 'put ''MS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0Ljlh''@;'; put 'put ''MTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQu''@;'; put 'put ''NCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwx''@;'; put 'put ''LDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40''@;'; put 'put ''NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSW1hZ2U9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1''@;'; put 'put ''LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEs''@;'; put 'put ''MS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYx''@;'; put 'put ''Mi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEs''@;'; put 'put ''MEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu''@;'; put 'put ''MTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywy''@;'; put 'put ''My4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2''@;'; put 'put ''LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4''@;'; put 'put ''LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44''@;'; put 'put ''Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4x''@;'; put 'put ''OGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5''@;'; put 'put ''LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4''@;'; put 'put ''LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0y''@;'; put 'put ''OSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMz''@;'; put 'put ''LDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44''@;'; put 'put ''OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs''@;'; put 'put ''MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs''@;'; put 'put ''MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSx5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs''@;'; put 'put ''MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx''@;'; put 'put ''NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1''@;'; put 'put ''bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JykseS5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi''@;'; put 'put ''IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy''@;'; put 'put ''Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx''@;'; put 'put ''LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww''@;'; put 'put ''LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx''@;'; put 'put ''NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x''@;'; put 'put ''LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx''@;'; put 'put ''Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLHkuQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw''@;'; put 'put ''Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z''@;'; put 'put ''NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLHkuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy''@;'; put 'put ''LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JykseS5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLHkuQ2xyU2hhcGVDYWxlbmRhcj0o''@;'; put 'put ''MCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIg''@;'; put 'put ''eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIg''@;'; put 'put ''eT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIg''@;'; put 'put ''ZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJo''@;'; put 'put ''MjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMz''@;'; put 'put ''LjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24g''@;'; put 'put ''cG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgy''@;'; put 'put ''NlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu''@;'; put 'put ''NSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwy''@;'; put 'put ''Nkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRXZlbnQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs''@;'; put 'put ''MjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4x''@;'; put 'put ''OUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww''@;'; put 'put ''LDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1''@;'; put 'put ''LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00Vjlh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2''@;'; put 'put ''Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2''@;'; put 'put ''aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43''@;'; put 'put ''OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu''@;'; put 'put ''MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu''@;'; put 'put ''OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx''@;'; put 'put ''OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs''@;'; put 'put ''MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5''@;'; put 'put ''LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9''@;'; put 'put ''IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu''@;'; put 'put ''NzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIs''@;'; put 'put ''MS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYu''@;'; put 'put ''NDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42''@;'; put 'put ''MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs''@;'; put 'put ''OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41Miwx''@;'; put 'put ''OS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEs''@;'; put 'put ''MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSx5LkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFycm93PSgw''@;'; put 'put ''LGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIi8+JykseS5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOnkuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6eS5DbHJTaGFwZUhvbWUsY29nOnkuQ2xyU2hhcGVDb2csY2hlY2s6eS5DbHJTaGFwZUNoZWNrLHRpbWVzOnkuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp''@;'; put 'put ''b24tdHJpYW5nbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjp5LkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjp5LkNsclNoYXBlSW5mb0NpcmNsZSwi''@;'; put 'put ''aW5mby1zdGFuZGFyZCI6eS5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6eS5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOnkuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjp5LkNsclNoYXBlV2FybmluZ1N0YW5k''@;'; put 'put ''YXJkLCJoZWxwLWluZm8iOnkuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOnkuQ2xyU2hhcGVCYXJzLHVzZXI6eS5DbHJTaGFwZVVzZXIsYW5nbGU6eS5DbHJTaGFwZUFuZ2xlLGZvbGRlcjp5LkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6eS5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDp5LkNs''@;'; put 'put ''clNoYXBlQmVsbCxpbWFnZTp5LkNsclNoYXBlSW1hZ2UsY2xvdWQ6eS5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjp5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6eS5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk''@;'; put 'put ''Ijp5LkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjp5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjp5LkNsclNoYXBlVm1CdWcsc2VhcmNoOnkuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6eS5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k''@;'; put 'put ''b3VibGUiOnkuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjp5LkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6eS5DbHJTaGFwZUV2ZW50LGV5ZTp5LkNsclNoYXBlRXllLCJleWUtaGlkZSI6eS5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjp5LkNsclNoYXBlU3RlcEZvcndhcmQy''@;'; put 'put ''LGFycm93OnkuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29yZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjbG9zZSIs''@;'; put 'put ''KDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh5LkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBl''@;'; put 'put ''c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNv''@;'; put 'put ''bmZpZykoeS5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8u''@;'; put 'put ''ZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFw''@;'; put 'put ''ZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuQ2xyU2hhcGVMb2dvdXQ9eS5DbHJTaGFwZUxvZ2luPXkuQ2xyU2hhcGVIZWxwPXkuQ2xy''@;'; put 'put ''U2hhcGVDb3B5PXkuQ2xyU2hhcGVDaGlsZEFycm93PXkuQ2xyU2hhcGVDaXJjbGVBcnJvdz15LkNsclNoYXBlQWxhcm1DbG9jaz15LkNsclNoYXBlQ2xvY2s9eS5DbHJTaGFwZUhpc3Rvcnk9eS5DbHJTaGFwZVRhZ3M9eS5DbHJTaGFwZVRhZz15LkNsclNoYXBlVHJhc2g9eS5DbHJTaGFwZVRp''@;'; put 'put ''bWVzQ2lyY2xlPXkuQ2xyU2hhcGVCYW49eS5DbHJTaGFwZVBsdXNDaXJjbGU9eS5DbHJTaGFwZU1pbnVzQ2lyY2xlPXkuQ2xyU2hhcGVNaW51cz15LkNsclNoYXBlUGx1cz15LkNsclNoYXBlRmlsZT15LkNsclNoYXBlUGluPXkuQ2xyU2hhcGVGaWx0ZXI9eS5DbHJTaGFwZVBvcE91dD15LkNs''@;'; put 'put ''clNoYXBlVXNlcnM9eS5DbHJTaGFwZVVubG9jaz15LkNsclNoYXBlTG9jaz15LkNsclNoYXBlVXBsb2FkPXkuQ2xyU2hhcGVEb3dubG9hZD15LkNsclNoYXBlTGlnaHRidWxiPXkuQ2xyU2hhcGVWaWV3Q2FyZHM9eS5DbHJTaGFwZVZpZXdMaXN0PXkuQ2xyU2hhcGVTeW5jPXkuQ2xyU2hhcGVS''@;'; put 'put ''ZWZyZXNoPXkuQ2xyU2hhcGVOb3RlPXkuQ2xyU2hhcGVQZW5jaWw9eS5DbHJTaGFwZVRoZXJtb21ldGVyPXkuQ2xyU2hhcGVCdWc9eS5DbHJTaGFwZVNjaXNzb3JzPXkuQ2xyU2hhcGVBc3Rlcmlzaz15LkNsclNoYXBlQm9vaz15LkNsclNoYXBlT2JqZWN0cz15LkNsclNoYXBlUmVzaXplPXku''@;'; put 'put ''Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9eS5DbHJTaGFwZUN1cnNvckhhbmQ9eS5DbHJTaGFwZUN1cnNvckFycm93PXkuQ2xyU2hhcGVHcmlkVmlldz15LkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249eS5DbHJTaGFwZU5ldz15LkNsclNoYXBlQWxhcm1PZmY9eS5DbHJTaGFwZVBpbmJvYXJk''@;'; put 'put ''PXkuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCx5LkNsclNoYXBlQ2xvbmU9eS5DbHJTaGFwZUN1cnNvck1vdmU9eS5DbHJTaGFwZVdhbmQ9eS5DbHJTaGFwZVN1bj15LkNsclNoYXBlTW9vbj15LkNsclNoYXBlRmlsdGVyMj15LkNsclNoYXBlRHJhZ0hhbmRsZT15LkNsclNoYXBlQ29weVRvQ2xp''@;'; put 'put ''cGJvYXJkPXkuQ2xyU2hhcGVDb2xvclBpY2tlcj15LkNsclNoYXBlQnJpZWZjYXNlPXkuQ2xyU2hhcGVFeHBhbmRDYXJkPXkuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9eS5DbHJTaGFwZVNvcnRCeT15LkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9eS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPXkuQ2xy''@;'; put 'put ''U2hhcGVTaHJpbms9eS5DbHJTaGFwZVBhcGVyY2xpcD15LkNsclNoYXBlRmlsZUdyb3VwPXkuQ2xyU2hhcGVSZXBlYXQ9eS5DbHJTaGFwZUlkQmFkZ2U9eS5DbHJTaGFwZUJhbGFuY2U9eS5DbHJTaGFwZU9yZ2FuaXphdGlvbj15LkNsclNoYXBlTm9BY2Nlc3M9eS5DbHJTaGFwZUhvdXJnbGFz''@;'; put 'put ''cz15LkNsclNoYXBlRmxhbWU9eS5DbHJTaGFwZVRhcmdldD15LkNsclNoYXBlQnVsbHNleWU9eS5DbHJTaGFwZVdyZW5jaD15LkNsclNoYXBlQm9sdD15LkNsclNoYXBlTGlicmFyeT15LkNsclNoYXBlS2V5PXkuQ2xyU2hhcGVab29tT3V0PXkuQ2xyU2hhcGVab29tSW49eS5DbHJTaGFwZVdp''@;'; put 'put ''bmRvd1Jlc3RvcmU9eS5DbHJTaGFwZVdpbmRvd01pbj15LkNsclNoYXBlV2luZG93TWF4PXkuQ2xyU2hhcGVXaW5kb3dDbG9zZT15LkNsclNoYXBlVG9vbHM9eS5DbHJTaGFwZVN3aXRjaD15LkNsclNoYXBlVHdvV2F5QXJyb3dzPXkuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9eS5DbHJTaGFwZVNj''@;'; put 'put ''cm9sbD15LkNsclNoYXBlVW5kbz15LkNsclNoYXBlUmVkbz15LkNsclNoYXBlTGlzdD15LkNsclNoYXBlRmlyZXdhbGw9eS5DbHJTaGFwZUNsaXBib2FyZD15LkNsclNoYXBlU2xpZGVyPXkuQ2xyU2hhcGVXb3JsZD15LkNsclNoYXBlUHJpbnRlcj12b2lkIDAseS5Fc3NlbnRpYWxTaGFwZXM9''@;'; put 'put ''eS5DbHJTaGFwZUNvbG9yUGFsZXR0ZT15LkNsclNoYXBlRmlyc3RBaWQ9eS5DbHJTaGFwZUJldGE9eS5DbHJTaGFwZURvdENpcmNsZT15LkNsclNoYXBlQ2lyY2xlPXkuQ2xyU2hhcGVDcm9zc2hhaXJzPXkuQ2xyU2hhcGVWb2x1bWU9eS5DbHJTaGFwZVRhYmxlPXkuQ2xyU2hhcGVTbm93Zmxh''@;'; put 'put ''a2U9eS5DbHJTaGFwZUZ1ZWw9eS5DbHJTaGFwZUZvcm09eS5DbHJTaGFwZUZpc2g9eS5DbHJTaGFwZVRyZWU9eS5DbHJTaGFwZVJlY3ljbGU9eS5DbHJTaGFwZUZpbHRlck9mZj15LkNsclNoYXBlRmlsZVppcD15LkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49eS5DbHJTaGFwZUN1cnNvckhhbmRH''@;'; put 'put ''cmFiPXkuQ2xyU2hhcGVUcmVlVmlldz15LkNsclNoYXBlUG9ydHJhaXQ9eS5DbHJTaGFwZVBhc3RlPXkuQ2xyU2hhcGVMYW5kc2NhcGU9eS5DbHJTaGFwZUVyYXNlcj15LkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj15LkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO3kuQ2xyU2hhcGVBZGRUZXh0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs''@;'; put 'put ''MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSx5LkNsclNoYXBlUGluYm9hcmQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs''@;'; put 'put ''Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct''@;'; put 'put ''N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs''@;'; put 'put ''MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLHkuQ2xyU2hhcGVBbGFybU9mZj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2''@;'; put 'put ''LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIy''@;'; put 'put ''QS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRs''@;'; put 'put ''Mi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIs''@;'; put 'put ''MjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0''@;'; put 'put ''bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLHkuQ2xyU2hhcGVOZXc9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w''@;'; put 'put ''OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww''@;'; put 'put ''LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4''@;'; put 'put ''IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx''@;'; put 'put ''Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44''@;'; put 'put ''NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x''@;'; put 'put ''LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLHkuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs''@;'; put 'put ''Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0''@;'; put 'put ''LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz''@;'; put 'put ''Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs''@;'; put 'put ''MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLHkuQ2xyU2hhcGVHcmlkVmlldz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs''@;'; put 'put ''NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2''@;'; put 'put ''OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9''@;'; put 'put ''IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4''@;'; put 'put ''PSIyIiByeT0iMiIvPicpLHkuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3''@;'; put 'put ''bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww''@;'; put 'put ''LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs''@;'; put 'put ''MCwwLDI5LDEyLjM2WiIvPicpLHkuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4''@;'; put 'put ''LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEu''@;'; put 'put ''NDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAs''@;'; put 'put ''MS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40''@;'; put 'put ''MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4y''@;'; put 'put ''OGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMu''@;'; put 'put ''MjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYx''@;'; put 'put ''NS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAs''@;'; put 'put ''MTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w''@;'; put 'put ''LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt''@;'; put 'put ''MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu''@;'; put 'put ''OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt''@;'; put 'put ''My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2''@;'; put 'put ''LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks''@;'; put 'put ''MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx''@;'; put 'put ''LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JykseS5DbHJTaGFwZVJlc2l6ZT0oMCxnLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JykseS5DbHJTaGFwZU9iamVjdHM9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41''@;'; put 'put ''Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz''@;'; put 'put ''MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww''@;'; put 'put ''LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs''@;'; put 'put ''MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi''@;'; put 'put ''IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSx5LkNsclNoYXBlQm9vaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks''@;'; put 'put ''MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5''@;'; put 'put ''LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w''@;'; put 'put ''NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSx5LkNsclNoYXBlQXN0ZXJpc2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44''@;'; put 'put ''NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0''@;'; put 'put ''LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt''@;'; put 'put ''MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4''@;'; put 'put ''bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JykseS5DbHJTaGFwZVNjaXNz''@;'; put 'put ''b3JzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1''@;'; put 'put ''Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww''@;'; put 'put ''LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu''@;'; put 'put ''NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs''@;'; put 'put ''MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx''@;'; put 'put ''LDcuNDUsMTMuMjNaIi8+JykseS5DbHJTaGFwZUJ1Zz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44''@;'; put 'put ''MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcy''@;'; put 'put ''YTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwz''@;'; put 'put ''MS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMu''@;'; put 'put ''MTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEs''@;'; put 'put ''NS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4z''@;'; put 'put ''OCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCww''@;'; put 'put ''LDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0x''@;'; put 'put ''NCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45''@;'; put 'put ''NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRB''@;'; put 'put ''MTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAs''@;'; put 'put ''MSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4''@;'; put 'put ''LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLHkuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSx5LkNsclNoYXBlUGVuY2lsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs''@;'; put 'put ''MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu''@;'; put 'put ''MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z''@;'; put 'put ''MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLHkuQ2xyU2hhcGVOb3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y''@;'; put 'put ''OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy''@;'; put 'put ''LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2''@;'; put 'put ''SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz''@;'; put 'put ''LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSZWZyZXNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks''@;'; put 'put ''MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx''@;'; put 'put ''LjY1WiIvPicpLHkuQ2xyU2hhcGVTeW5jPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu''@;'; put 'put ''NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww''@;'; put 'put ''LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww''@;'; put 'put ''LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JykseS5DbHJTaGFwZVZpZXdMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww''@;'; put 'put ''LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLHkuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLHkuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40Niwx''@;'; put 'put ''OC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRh''@;'; put 'put ''MTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCww''@;'; put 'put ''LDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0x''@;'; put 'put ''LjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0x''@;'; put 'put ''LjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywx''@;'; put 'put ''OC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQs''@;'; put 'put ''MCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQu''@;'; put 'put ''NjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40''@;'; put 'put ''NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIx''@;'; put 'put ''LjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41''@;'; put 'put ''LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSx5LkNsclNoYXBlRG93bmxvYWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQx''@;'; put 'put ''LTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1''@;'; put 'put ''YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5''@;'; put 'put ''LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAt''@;'; put 'put ''MS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JykseS5DbHJTaGFwZVVwbG9hZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQs''@;'; put 'put ''MSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwx''@;'; put 'put ''czEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05Ljlj''@;'; put 'put ''LTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEs''@;'; put 'put ''MSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40''@;'; put 'put ''MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVMb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa''@;'; put 'put ''TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs''@;'; put 'put ''MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs''@;'; put 'put ''MSw2LDYuMzZaIi8+JykseS5DbHJTaGFwZVVubG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2''@;'; put 'put ''LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs''@;'; put 'put ''MSwyLC4wOVoiLz4nKSx5LkNsclNoYXBlVXNlcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44''@;'; put 'put ''LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDku''@;'; put 'put ''NnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEt''@;'; put 'put ''MC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIs''@;'; put 'put ''MC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00''@;'; put 'put ''LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAu''@;'; put 'put ''NSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMw''@;'; put 'put ''LjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9''@;'; put 'put ''Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwz''@;'; put 'put ''MEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4x''@;'; put 'put ''LDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEt''@;'; put 'put ''MS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4''@;'; put 'put ''LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1Yy''@;'; put 'put ''My41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40Niww''@;'; put 'put ''LDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDks''@;'; put 'put ''MCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2''@;'; put 'put ''LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0''@;'; put 'put ''LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwx''@;'; put 'put ''Ny44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTgu''@;'; put 'put ''MSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIz''@;'; put 'put ''LjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQy''@;'; put 'put ''LDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUu''@;'; put 'put ''MjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAt''@;'; put 'put ''My40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgs''@;'; put 'put ''Ni41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x''@;'; put 'put ''MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43''@;'; put 'put ''bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTgu''@;'; put 'put ''NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNB''@;'; put 'put ''OS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCww''@;'; put 'put ''LDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwu''@;'; put 'put ''MiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40''@;'; put 'put ''NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41''@;'; put 'put ''NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMs''@;'; put 'put ''MTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlUG9wT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSx5LkNsclNoYXBlRmlsdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5''@;'; put 'put ''bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44''@;'; put 'put ''MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx''@;'; put 'put ''LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVBpbj0oMCxnLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs''@;'; put 'put ''MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw''@;'; put 'put ''YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu''@;'; put 'put ''NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx''@;'; put 'put ''LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JykseS5DbHJTaGFwZUZpbGU9KDAsZy5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0u''@;'; put 'put ''MywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSww''@;'; put 'put ''LTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUu''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4w''@;'; put 'put ''OUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcs''@;'; put 'put ''MCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwx''@;'; put 'put ''LjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0w''@;'; put 'put ''LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLHkuQ2xyU2hhcGVQbHVz''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs''@;'; put 'put ''MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSx5LkNsclNoYXBlTWludXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB''@;'; put 'put ''MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVCYW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa''@;'; put 'put ''TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLHkuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43''@;'; put 'put ''Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs''@;'; put 'put ''MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs''@;'; put 'put ''LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLHkuQ2xyU2hhcGVUcmFzaD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0''@;'; put 'put ''LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSx5LkNsclNoYXBlVGFnPSgwLGcuY2xySWNvblNWRykoJzxjaXJj''@;'; put 'put ''bGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5Ljky''@;'; put 'put ''YTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIy''@;'; put 'put ''LDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5''@;'; put 'put ''LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEu''@;'; put 'put ''NDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5''@;'; put 'put ''LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCww''@;'; put 'put ''LDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEs''@;'; put 'put ''OS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwy''@;'; put 'put ''LDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIs''@;'; put 'put ''MiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PicpLHkuQ2xyU2hhcGVUYWdzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45''@;'; put 'put ''MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4y''@;'; put 'put ''MUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIx''@;'; put 'put ''LjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2Ljkz''@;'; put 'put ''djkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43Myww''@;'; put 'put ''bDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwx''@;'; put 'put ''Mi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4y''@;'; put 'put ''MSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTku''@;'; put 'put ''MTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwx''@;'; put 'put ''OS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIs''@;'; put 'put ''MCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43Mywx''@;'; put 'put ''LjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAs''@;'; put 'put ''MTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs''@;'; put 'put ''NUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAs''@;'; put 'put ''Mi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCww''@;'; put 'put ''LDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs''@;'; put 'put ''MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0Ii8+JykseS5DbHJTaGFwZUhpc3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1''@;'; put 'put ''LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZUNsb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs''@;'; put 'put ''MTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcu''@;'; put 'put ''OTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5''@;'; put 'put ''LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAs''@;'; put 'put ''MCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0''@;'; put 'put ''LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEz''@;'; put 'put ''LDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAt''@;'; put 'put ''Mi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAs''@;'; put 'put ''MCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2''@;'; put 'put ''bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3''@;'; put 'put ''LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlQWxhcm1DbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFM''@;'; put 'put ''MjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljky''@;'; put 'put ''LDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03''@;'; put 'put ''LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSww''@;'; put 'put ''LDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAs''@;'; put 'put ''MzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQu''@;'; put 'put ''NDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCww''@;'; put 'put ''LDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwx''@;'; put 'put ''LDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYs''@;'; put 'put ''MzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSww''@;'; put 'put ''LDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEu''@;'; put 'put ''MjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMu''@;'; put 'put ''ODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1''@;'; put 'put ''Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4''@;'; put 'put ''TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5''@;'; put 'put ''YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx''@;'; put 'put ''OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JykseS5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUNvcHk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5LkNsclNoYXBlSGVscD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx''@;'; put 'put ''NiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4z''@;'; put 'put ''OCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCww''@;'; put 'put ''LDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4y''@;'; put 'put ''YTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1''@;'; put 'put ''YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAs''@;'; put 'put ''MS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2''@;'; put 'put ''LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0u''@;'; put 'put ''NDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0x''@;'; put 'put ''LDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEu''@;'; put 'put ''NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x''@;'; put 'put ''LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs''@;'; put 'put ''Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNsclNoYXBlTG9naW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy''@;'; put 'put ''MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5''@;'; put 'put ''LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVMb2dvdXQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiLz4nKSx5LkNsclNoYXBlUHJpbnRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5''@;'; put 'put ''Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIy''@;'; put 'put ''LjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwx''@;'; put 'put ''LDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgy''@;'; put 'put ''N1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUy''@;'; put 'put ''LDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVXb3JsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMt''@;'; put 'put ''LjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTku''@;'; put 'put ''MzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRj''@;'; put 'put ''LjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCww''@;'; put 'put ''LDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44''@;'; put 'put ''MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQs''@;'; put 'put ''MTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEt''@;'; put 'put ''My43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4z''@;'; put 'put ''My0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNa''@;'; put 'put ''TTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41''@;'; put 'put ''NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIs''@;'; put 'put ''MjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhh''@;'; put 'put ''MTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3''@;'; put 'put ''LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3''@;'; put 'put ''YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44''@;'; put 'put ''LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAs''@;'; put 'put ''MCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIy''@;'; put 'put ''LjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAs''@;'; put 'put ''MCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVTbGlkZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu''@;'; put 'put ''NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx''@;'; put 'put ''Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0''@;'; put 'put ''LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww''@;'; put 'put ''LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy''@;'; put 'put ''SDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEs''@;'; put 'put ''NCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNB''@;'; put 'put ''LjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEs''@;'; put 'put ''MjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4z''@;'; put 'put ''MUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0''@;'; put 'put ''LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEs''@;'; put 'put ''MCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjEx''@;'; put 'put ''LTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1''@;'; put 'put ''Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUZpcmV3YWxsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy''@;'; put 'put ''djUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEu''@;'; put 'put ''NzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUs''@;'; put 'put ''Ny41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45''@;'; put 'put ''MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhW''@;'; put 'put ''MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0x''@;'; put 'put ''NCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLHkuQ2xyU2hhcGVMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdp''@;'; put 'put ''ZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTki''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00''@;'; put 'put ''SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVSZWRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz''@;'; put 'put ''bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVVbmRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx''@;'; put 'put ''Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVTY3JvbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu''@;'; put 'put ''NSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMy''@;'; put 'put ''LDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0''@;'; put 'put ''LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAs''@;'; put 'put ''MSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww''@;'; put 'put ''djQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAs''@;'; put 'put ''MCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCww''@;'; put 'put ''LDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44''@;'; put 'put ''SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEs''@;'; put 'put ''NSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1''@;'; put 'put ''Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40''@;'; put 'put ''YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwx''@;'; put 'put ''LjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4Ljct''@;'; put 'put ''LjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41''@;'; put 'put ''LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCww''@;'; put 'put ''LDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEu''@;'; put 'put ''MTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40''@;'; put 'put ''NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0u''@;'; put 'put ''MTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYs''@;'; put 'put ''MCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIu''@;'; put 'put ''MjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEu''@;'; put 'put ''NDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgy''@;'; put 'put ''My40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wx''@;'; put 'put ''OC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41''@;'; put 'put ''LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43''@;'; put 'put ''NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x''@;'; put 'put ''NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y''@;'; put 'put ''OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx''@;'; put 'put ''LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx''@;'; put 'put ''LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy''@;'; put 'put ''QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0''@;'; put 'put ''LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1''@;'; put 'put ''LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3''@;'; put 'put ''LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCww''@;'; put 'put ''LDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCww''@;'; put 'put ''LDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwx''@;'; put 'put ''OGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0y''@;'; put 'put ''LC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4z''@;'; put 'put ''Ny4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwy''@;'; put 'put ''Ni42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwx''@;'; put 'put ''LjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYx''@;'; put 'put ''LDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDIt''@;'; put 'put ''LjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC00LS1iYWRnZWQiIC8+JykseS5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku''@;'; put 'put ''NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlU3dpdGNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM''@;'; put 'put ''OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg''@;'; put 'put ''eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPicpLHkuQ2xyU2hhcGVUb29scz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww''@;'; put 'put ''LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM''@;'; put 'put ''MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlV2luZG93Q2xvc2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5''@;'; put 'put ''LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlV2luZG93TWF4PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu''@;'; put 'put ''ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVdpbmRvd01pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs''@;'; put 'put ''MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZVpvb21Jbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw''@;'; put 'put ''LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt''@;'; put 'put ''MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVab29tT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww''@;'; put 'put ''LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNo''@;'; put 'put ''YXBlS2V5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0u''@;'; put 'put ''NEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQs''@;'; put 'put ''MGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5''@;'; put 'put ''PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCww''@;'; put 'put ''LDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBM''@;'; put 'put ''MjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4''@;'; put 'put ''PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUs''@;'; put 'put ''NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEu''@;'; put 'put ''NzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2''@;'; put 'put ''MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgy''@;'; put 'put ''My40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4z''@;'; put 'put ''NywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwz''@;'; put 'put ''MiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCww''@;'; put 'put ''LDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEs''@;'; put 'put ''MSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSx5LkNsclNoYXBlTGlicmFyeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4''@;'; put 'put ''LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu''@;'; put 'put ''OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUJvbHQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz''@;'; put 'put ''MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww''@;'; put 'put ''LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu''@;'; put 'put ''NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPicpLHkuQ2xyU2hhcGVXcmVuY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs''@;'; put 'put ''MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42''@;'; put 'put ''MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z''@;'; put 'put ''IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu''@;'; put 'put ''NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs''@;'; put 'put ''MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUJ1bGxzZXllPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs''@;'; put 'put ''LTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4z''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4''@;'; put 'put ''LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRM''@;'; put 'put ''MTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEs''@;'; put 'put ''MSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEz''@;'; put 'put ''LjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlVGFyZ2V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs''@;'; put 'put ''NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVGbGFtZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx''@;'; put 'put ''Ny43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQz''@;'; put 'put ''LDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3''@;'; put 'put ''LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0y''@;'; put 'put ''LjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIs''@;'; put 'put ''Ny44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCww''@;'; put 'put ''LDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0''@;'; put 'put ''bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlSG91cmdsYXNzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2''@;'; put 'put ''LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwu''@;'; put 'put ''NjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2Ex''@;'; put 'put ''LDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4z''@;'; put 'put ''NGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45''@;'; put 'put ''MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCww''@;'; put 'put ''LDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAs''@;'; put 'put ''MSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAs''@;'; put 'put ''Mi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2''@;'; put 'put ''LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAs''@;'; put 'put ''MCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAs''@;'; put 'put ''MCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu''@;'; put 'put ''NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEu''@;'; put 'put ''MTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYu''@;'; put 'put ''MDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEu''@;'; put 'put ''MjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwx''@;'; put 'put ''MS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZU5vQWNjZXNzPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y''@;'; put 'put ''NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs''@;'; put 'put ''MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx''@;'; put 'put ''Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww''@;'; put 'put ''LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4''@;'; put 'put ''LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy''@;'; put 'put ''IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JykseS5DbHJTaGFwZUJhbGFuY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy''@;'; put 'put ''YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz''@;'; put 'put ''LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu''@;'; put 'put ''MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u''@;'; put 'put ''NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLHkuQ2xyU2hhcGVJZEJhZGdlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0''@;'; put 'put ''LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y''@;'; put 'put ''Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwx''@;'; put 'put ''LDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEt''@;'; put 'put ''Mi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIw''@;'; put 'put ''LDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4y''@;'; put 'put ''OWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3''@;'; put 'put ''LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40''@;'; put 'put ''VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIx''@;'; put 'put ''LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjcz''@;'; put 'put ''QTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZVJlcGVhdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs''@;'; put 'put ''MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3''@;'; put 'put ''LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSx5LkNsclNoYXBlRmlsZUdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx''@;'; put 'put ''LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLHkuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks''@;'; put 'put ''MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww''@;'; put 'put ''LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu''@;'; put 'put ''NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLHkuQ2xyU2hhcGVTaHJpbms9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JykseS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAs''@;'; put 'put ''MCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAs''@;'; put 'put ''Ljc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEt''@;'; put 'put ''LjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5''@;'; put 'put ''LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4x''@;'; put 'put ''MiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjks''@;'; put 'put ''Ny4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQz''@;'; put 'put ''LDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs''@;'; put 'put ''MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz''@;'; put 'put ''My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh''@;'; put 'put ''MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZVNvcnRCeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy''@;'; put 'put ''MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1''@;'; put 'put ''LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt''@;'; put 'put ''MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs''@;'; put 'put ''MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww''@;'; put 'put ''LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs''@;'; put 'put ''MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQnJpZWZjYXNlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx''@;'; put 'put ''LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww''@;'; put 'put ''LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs''@;'; put 'put ''MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2''@;'; put 'put ''OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz''@;'; put 'put ''QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUNvbG9yUGlja2Vy''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey''@;'; put 'put ''LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu''@;'; put 'put ''MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40''@;'; put 'put ''MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww''@;'; put 'put ''LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy''@;'; put 'put ''LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB''@;'; put 'put ''MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz''@;'; put 'put ''SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVGaWx0ZXIyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww''@;'; put 'put ''LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JykseS5DbHJTaGFwZU1vb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x''@;'; put 'put ''LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs''@;'; put 'put ''MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVN1bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4z''@;'; put 'put ''Miw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywx''@;'; put 'put ''MGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4''@;'; put 'put ''LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0x''@;'; put 'put ''LTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDku''@;'; put 'put ''ODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC05IiAvPicpLHkuQ2xyU2hhcGVXYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40''@;'; put 'put ''NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha''@;'; put 'put ''TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz''@;'; put 'put ''bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww''@;'; put 'put ''LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu''@;'; put 'put ''MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JykseS5DbHJT''@;'; put 'put ''aGFwZUN1cnNvck1vdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh''@;'; put 'put ''MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5''@;'; put 'put ''LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQ2xvbmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRGV0YWlscz0oMCxnLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww''@;'; put 'put ''LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww''@;'; put 'put ''LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLHkuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVFcmFzZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy''@;'; put 'put ''SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04''@;'; put 'put ''LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy''@;'; put 'put ''OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz''@;'; put 'put ''LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlTGFuZHNjYXBlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1''@;'; put 'put ''LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs''@;'; put 'put ''MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w''@;'; put 'put ''NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVBhc3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0''@;'; put 'put ''djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI''@;'; put 'put ''Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv''@;'; put 'put ''PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02''@;'; put 'put ''IiAvPicpLHkuQ2xyU2hhcGVQb3J0cmFpdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu''@;'; put 'put ''OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs''@;'; put 'put ''MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu''@;'; put 'put ''MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlVHJlZVZpZXc9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwx''@;'; put 'put ''LDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCww''@;'; put 'put ''LDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCww''@;'; put 'put ''LDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44''@;'; put 'put ''OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs''@;'; put 'put ''MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu''@;'; put 'put ''MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5''@;'; put 'put ''aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2''@;'; put 'put ''LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3''@;'; put 'put ''LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y''@;'; put 'put ''NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx''@;'; put 'put ''Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVGaWxlWmlwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw''@;'; put 'put ''LjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0''@;'; put 'put ''YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAu''@;'; put 'put ''NC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0w''@;'; put 'put ''LjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMt''@;'; put 'put ''M3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFI''@;'; put 'put ''MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRmlsdGVyT2ZmPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu''@;'; put 'put ''MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy''@;'; put 'put ''My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs''@;'; put 'put ''OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVSZWN5Y2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww''@;'; put 'put ''LjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCww''@;'; put 'put ''LjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcu''@;'; put 'put ''Nyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwx''@;'; put 'put ''LjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRc''@;'; put 'put ''dGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUu''@;'; put 'put ''MiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjkt''@;'; put 'put ''My42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwy''@;'; put 'put ''LjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQs''@;'; put 'put ''MC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCww''@;'; put 'put ''LjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4y''@;'; put 'put ''LTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0''@;'; put 'put ''XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAu''@;'; put 'put ''MS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2''@;'; put 'put ''LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlVHJlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43''@;'; put 'put ''QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x''@;'; put 'put ''LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01''@;'; put 'put ''LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu''@;'; put 'put ''OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt''@;'; put 'put ''MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlRmlzaD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44''@;'; put 'put ''MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu''@;'; put 'put ''OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u''@;'; put 'put ''MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x''@;'; put 'put ''MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVGb3JtPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww''@;'; put 'put ''LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs''@;'; put 'put ''MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy''@;'; put 'put ''LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs''@;'; put 'put ''MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlRnVlbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu''@;'; put 'put ''MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1''@;'; put 'put ''LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLHkuQ2xyU2hhcGVTbm93Zmxha2U9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4w''@;'; put 'put ''NywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwz''@;'; put 'put ''MS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci''@;'; put 'put ''IC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSx5LkNsclNoYXBlVGFibGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz''@;'; put 'put ''YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlVm9sdW1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt''@;'; put 'put ''LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx''@;'; put 'put ''LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN''@;'; put 'put ''MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSx5LkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs''@;'; put 'put ''MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu''@;'; put 'put ''MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JykseS5DbHJTaGFwZUNpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZURvdENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCZXRhPSgwLGcuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdz''@;'; put 'put ''LS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZI''@;'; put 'put ''MTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTgu''@;'; put 'put ''MDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAs''@;'; put 'put ''MCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiww''@;'; put 'put ''LTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAu''@;'; put 'put ''NCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwx''@;'; put 'put ''NS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4''@;'; put 'put ''LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSx5LkNsclNoYXBlRmlyc3RBaWQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs''@;'; put 'put ''MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41''@;'; put 'put ''YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSx5LkNsclNo''@;'; put 'put ''YXBlQ29sb3JQYWxldHRlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgs''@;'; put 'put ''Mi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4x''@;'; put 'put ''LDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcy''@;'; put 'put ''LDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43Miwy''@;'; put 'put ''LjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIy''@;'; put 'put ''LDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAt''@;'; put 'put ''LjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44Myww''@;'; put 'put ''LDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEu''@;'; put 'put ''MTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAs''@;'; put 'put ''MS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0u''@;'; put 'put ''NS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3''@;'; put 'put ''LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4w''@;'; put 'put ''NmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2''@;'; put 'put ''LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAs''@;'; put 'put ''MC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwy''@;'; put 'put ''Ljg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUu''@;'; put 'put ''NTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMs''@;'; put 'put ''MzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAs''@;'; put 'put ''MSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwy''@;'; put 'put ''Ljg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4y''@;'; put 'put ''MiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAs''@;'; put 'put ''MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuRXNzZW50aWFsU2hhcGVzPXsi''@;'; put 'put ''YWRkLXRleHQiOnkuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOnkuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDp5LkNsclNoYXBlUGluYm9hcmQsbmV3OnkuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6eS5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci''@;'; put 'put ''OnkuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93Ijp5LkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjp5LkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOnkuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOnkuQ2xyU2hh''@;'; put 'put ''cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6eS5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6eS5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6eS5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTp5LkNsclNoYXBlUmVzaXplLG9iamVjdHM6eS5DbHJT''@;'; put 'put ''aGFwZU9iamVjdHMsYm9vazp5LkNsclNoYXBlQm9vayxhc3Rlcmlzazp5LkNsclNoYXBlQXN0ZXJpc2ssYnVnOnkuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6eS5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOnkuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6eS5DbHJTaGFwZVBlbmNpbCxu''@;'; put 'put ''b3RlOnkuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6eS5DbHJTaGFwZVJlZnJlc2gsc3luYzp5LkNsclNoYXBlU3luYywidmlldy1saXN0Ijp5LkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOnkuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6eS5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0''@;'; put 'put ''YnVsYjp5LkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOnkuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6eS5DbHJTaGFwZVVwbG9hZCxsb2NrOnkuQ2xyU2hhcGVMb2NrLHVubG9jazp5LkNsclNoYXBlVW5sb2NrLHVzZXJzOnkuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6eS5DbHJTaGFwZVBv''@;'; put 'put ''cE91dCxmaWx0ZXI6eS5DbHJTaGFwZUZpbHRlcixwaW46eS5DbHJTaGFwZVBpbixmaWxlOnkuQ2xyU2hhcGVGaWxlLHBsdXM6eS5DbHJTaGFwZVBsdXMsbWludXM6eS5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOnkuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOnkuQ2xy''@;'; put 'put ''U2hhcGVQbHVzQ2lyY2xlLGJhbjp5LkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOnkuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDp5LkNsclNoYXBlVHJhc2gsY2lyY2xlOnkuQ2xyU2hhcGVDaXJjbGUsdGFnOnkuQ2xyU2hhcGVUYWcsdGFnczp5LkNsclNoYXBlVGFncyxoaXN0b3J5Onku''@;'; put 'put ''Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOnkuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOnkuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OkIuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93Ijp5LkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93Ijp5LkNsclNoYXBlQ2hpbGRBcnJv''@;'; put 'put ''dyxjb3B5OnkuQ2xyU2hhcGVDb3B5LGhlbHA6eS5DbHJTaGFwZUhlbHAsbG9naW46eS5DbHJTaGFwZUxvZ2luLGxvZ291dDp5LkNsclNoYXBlTG9nb3V0LHByaW50ZXI6eS5DbHJTaGFwZVByaW50ZXIsd29ybGQ6eS5DbHJTaGFwZVdvcmxkLHNsaWRlcjp5LkNsclNoYXBlU2xpZGVyLGNsaXBi''@;'; put 'put ''b2FyZDp5LkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOnkuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OnkuQ2xyU2hhcGVMaXN0LHJlZG86eS5DbHJTaGFwZVJlZG8sdW5kbzp5LkNsclNoYXBlVW5kbyxzY3JvbGw6eS5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6eS5DbHJTaGFwZUZp''@;'; put 'put ''bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOnkuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOnkuQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6eS5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOnkuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6eS5DbHJTaGFwZVdpbmRvd01h''@;'; put 'put ''eCwid2luZG93LW1pbiI6eS5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOnkuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjp5LkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6eS5DbHJTaGFwZVpvb21PdXQsa2V5OnkuQ2xyU2hhcGVLZXksbGlicmFyeTp5LkNsclNo''@;'; put 'put ''YXBlTGlicmFyeSxib2x0OnkuQ2xyU2hhcGVCb2x0LHdyZW5jaDp5LkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOnkuQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6eS5DbHJTaGFwZVRhcmdldCxmbGFtZTp5LkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOnkuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj''@;'; put 'put ''Y2VzcyI6eS5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjp5LkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6eS5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjp5LkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6eS5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6eS5DbHJTaGFwZUZp''@;'; put 'put ''bGVHcm91cCxwYXBlcmNsaXA6eS5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6eS5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjp5LkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6eS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5Ijp5LkNsclNo''@;'; put 'put ''YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjp5LkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6eS5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOnkuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6eS5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi''@;'; put 'put ''b2FyZCI6eS5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOnkuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6eS5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjp5LkNsclNoYXBlTW9vbixzdW46eS5DbHJTaGFwZVN1bix3YW5kOnkuQ2xyU2hhcGVXYW5kLGNsb25lOnkuQ2xy''@;'; put 'put ''U2hhcGVDbG9uZSxkZXRhaWxzOnkuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOnkuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjp5LkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTp5LkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOnkuQ2xyU2hhcGVQYXN0ZSxwb3J0''@;'; put 'put ''cmFpdDp5LkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjp5LkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6eS5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOnkuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6eS5DbHJTaGFwZVRyZWUsZmlzaDp5LkNsclNoYXBlRmlzaCxmb3JtOnkuQ2xyU2hh''@;'; put 'put ''cGVGb3JtLGZ1ZWw6eS5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOnkuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6eS5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjp5LkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTp5LkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6eS5DbHJTaGFwZUNyb3NzaGFp''@;'; put 'put ''cnMsYmV0YTp5LkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6eS5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KHkuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVz''@;'; put 'put ''LCJhZGQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmln''@;'; put 'put ''KSh5LkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hh''@;'; put 'put ''cGVzLCJsaWdodG5pbmciLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5vcmdhbml6''@;'; put 'put ''YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicGlu''@;'; put 'put ''bmVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxfLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3''@;'; put 'put ''aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZCh5LkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov''@;'; put 'put ''Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuTWVkaWFTaGFwZXM9eS5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPXkuQ2xyU2hhcGVNaWNyb3Bo''@;'; put 'put ''b25lPXkuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9eS5DbHJTaGFwZVJlcGxheU9uZT15LkNsclNoYXBlUmVwbGF5QWxsPXkuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9eS5DbHJTaGFwZU11c2ljTm90ZT15LkNsclNoYXBlRmlsbVN0cmlwPXkuQ2xyU2hhcGVIZWFkcGhvbmVzPXkuQ2xyU2hhcGVWb2x1''@;'; put 'put ''bWVNdXRlPXkuQ2xyU2hhcGVWb2x1bWVVcD15LkNsclNoYXBlVm9sdW1lRG93bj15LkNsclNoYXBlU2h1ZmZsZT15LkNsclNoYXBlVmlkZW9DYW1lcmE9eS5DbHJTaGFwZUNhbWVyYT15LkNsclNoYXBlRmFzdEZvcndhcmQ9eS5DbHJTaGFwZVJld2luZD15LkNsclNoYXBlUG93ZXI9eS5DbHJT''@;'; put 'put ''aGFwZVN0b3A9eS5DbHJTaGFwZVN0ZXBGb3J3YXJkPXkuQ2xyU2hhcGVQYXVzZT15LkNsclNoYXBlUGxheT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO3ku''@;'; put 'put ''Q2xyU2hhcGVQbGF5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu''@;'; put 'put ''MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLHkuQ2xyU2hhcGVQYXVzZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy''@;'; put 'put ''LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu''@;'; put 'put ''ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo''@;'; put 'put ''ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSx5LkNsclNo''@;'; put 'put ''YXBlU3RlcEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2''@;'; put 'put ''LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz''@;'; put 'put ''YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz''@;'; put 'put ''LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i''@;'; put 'put ''MiIgcnk9IjIiLz4nKSx5LkNsclNoYXBlU3RvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww''@;'; put 'put ''LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JykseS5DbHJTaGFwZVBvd2VyPSgw''@;'; put 'put ''LF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSww''@;'; put 'put ''LDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEs''@;'; put 'put ''MCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBW''@;'; put 'put ''MTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2''@;'; put 'put ''QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42''@;'; put 'put ''OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0x''@;'; put 'put ''NS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVSZXdpbmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs''@;'; put 'put ''MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu''@;'; put 'put ''MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLHkuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww''@;'; put 'put ''LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww''@;'; put 'put ''LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3''@;'; put 'put ''LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww''@;'; put 'put ''LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSx5LkNsclNoYXBlQ2FtZXJhPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy''@;'; put 'put ''LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44''@;'; put 'put ''LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs''@;'; put 'put ''MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLHkuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh''@;'; put 'put ''LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww''@;'; put 'put ''LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSx5LkNsclNoYXBlU2h1ZmZsZT0oMCxfLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs''@;'; put 'put ''MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs''@;'; put 'put ''MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JykseS5DbHJTaGFwZVZvbHVtZURvd249KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy''@;'; put 'put ''Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x''@;'; put 'put ''Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0''@;'; put 'put ''LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLHkuQ2xyU2hhcGVWb2x1bWVVcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs''@;'; put 'put ''MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4z''@;'; put 'put ''My03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs''@;'; put 'put ''MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwz''@;'; put 'put ''MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLHkuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4y''@;'; put 'put ''OEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQu''@;'; put 'put ''ODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42''@;'; put 'put ''OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2''@;'; put 'put ''LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42''@;'; put 'put ''N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEu''@;'; put 'put ''NzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYu''@;'; put 'put ''MTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQu''@;'; put 'put ''NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSx5LkNsclNoYXBlSGVhZHBob25lcz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx''@;'; put 'put ''Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy''@;'; put 'put ''Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy''@;'; put 'put ''NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI''@;'; put 'put ''NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSx5LkNsclNoYXBl''@;'; put 'put ''RmlsbVN0cmlwPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4''@;'; put 'put ''QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNI''@;'; put 'put ''MjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44''@;'; put 'put ''NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JykseS5DbHJTaGFwZU11c2ljTm90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt''@;'; put 'put ''MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5''@;'; put 'put ''LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz''@;'; put 'put ''LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs''@;'; put 'put ''Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu''@;'; put 'put ''OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JykseS5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww''@;'; put 'put ''LDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0x''@;'; put 'put ''LDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4''@;'; put 'put ''TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41''@;'; put 'put ''OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt''@;'; put 'put ''NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww''@;'; put 'put ''LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlUmVwbGF5''@;'; put 'put ''T25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4''@;'; put 'put ''TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2''@;'; put 'put ''LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz4nKSx5LkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx''@;'; put 'put ''Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs''@;'; put 'put ''MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y''@;'; put 'put ''NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4''@;'; put 'put ''LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y''@;'; put 'put ''LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz''@;'; put 'put ''MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45''@;'; put 'put ''LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu''@;'; put 'put ''Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks''@;'; put 'put ''eS5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4x''@;'; put 'put ''LDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44''@;'; put 'put ''LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwx''@;'; put 'put ''LjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44''@;'; put 'put ''LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4y''@;'; put 'put ''QzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFo''@;'; put 'put ''LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5Lk1lZGlhU2hhcGVzPXtwbGF5OnkuQ2xyU2hhcGVQbGF5LHBhdXNlOnkuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjp5LkNsclNoYXBlU3Rl''@;'; put 'put ''cEZvcndhcmQsc3RvcDp5LkNsclNoYXBlU3RvcCxwb3dlcjp5LkNsclNoYXBlUG93ZXIscmV3aW5kOnkuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6eS5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTp5LkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOnkuQ2xyU2hhcGVWaWRl''@;'; put 'put ''b0NhbWVyYSxzaHVmZmxlOnkuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOnkuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOnkuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6eS5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczp5LkNsclNoYXBlSGVhZHBob25l''@;'; put 'put ''cywiZmlsbS1zdHJpcCI6eS5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6eS5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6eS5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6eS5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6eS5DbHJTaGFwZVJl''@;'; put 'put ''cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6eS5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOnkuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOnkuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi''@;'; put 'put ''Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKHkuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg''@;'; put 'put ''ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz''@;'; put 'put ''IGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Tb2NpYWxTaGFwZXM9eS5DbHJTaGFwZUhhc2h0YWc9eS5DbHJTaGFwZUNyb3duPXkuQ2xyU2hhcGVUaHVtYnNEb3duPXkuQ2xyU2hh''@;'; put 'put ''cGVUaHVtYnNVcD15LkNsclNoYXBlU2FkRmFjZT15LkNsclNoYXBlTmV1dHJhbEZhY2U9eS5DbHJTaGFwZUhhcHB5RmFjZT15LkNsclNoYXBlUGljdHVyZT15LkNsclNoYXBlQ2hhdEJ1YmJsZT15LkNsclNoYXBlVGFsa0J1YmJsZXM9eS5DbHJTaGFwZUhlYXJ0QnJva2VuPXkuQ2xyU2hhcGVI''@;'; put 'put ''ZWFydD15LkNsclNoYXBlSW5ib3g9eS5DbHJTaGFwZUZsYWc9eS5DbHJTaGFwZVRhc2tzPXkuQ2xyU2hhcGVFbnZlbG9wZT15LkNsclNoYXBlQm9va21hcms9eS5DbHJTaGFwZUhhbGZTdGFyPXkuQ2xyU2hhcGVTdGFyPXkuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO3kuQ2xyU2hhcGVTaGFyZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz''@;'; put 'put ''LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx''@;'; put 'put ''LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3''@;'; put 'put ''QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLHkuQ2xyU2hhcGVTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4''@;'; put 'put ''bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y''@;'; put 'put ''MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs''@;'; put 'put ''MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM''@;'; put 'put ''MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu''@;'; put 'put ''MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00''@;'; put 'put ''LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JykseS5DbHJTaGFwZUhhbGZTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41''@;'; put 'put ''NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs''@;'; put 'put ''LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1''@;'; put 'put ''LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw''@;'; put 'put ''LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu''@;'; put 'put ''MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt''@;'; put 'put ''MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSx5LkNsclNoYXBlQm9va21hcms9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs''@;'; put 'put ''MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42''@;'; put 'put ''Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JykseS5DbHJTaGFwZUVudmVsb3BlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwx''@;'; put 'put ''Ny44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEu''@;'; put 'put ''MzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYu''@;'; put 'put ''ODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwtNS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44''@;'; put 'put ''MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcu''@;'; put 'put ''MjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4w''@;'; put 'put ''Ny41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIyLjk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlVGFza3M9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs''@;'; put 'put ''MSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43''@;'; put 'put ''NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwy''@;'; put 'put ''LjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAt''@;'; put 'put ''Ny43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4x''@;'; put 'put ''OSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEu''@;'; put 'put ''NDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41''@;'; put 'put ''N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAs''@;'; put 'put ''MCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlB''@;'; put 'put ''MS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQt''@;'; put 'put ''NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgs''@;'; put 'put ''MS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3''@;'; put 'put ''aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwy''@;'; put 'put ''LjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEu''@;'; put 'put ''NywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMsMy43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVGbGFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx''@;'; put 'put ''NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0''@;'; put 'put ''Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs''@;'; put 'put ''MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs''@;'; put 'put ''MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JykseS5DbHJTaGFwZUluYm94PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz''@;'; put 'put ''M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUhlYXJ0''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh''@;'; put 'put ''OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs''@;'; put 'put ''OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww''@;'; put 'put ''LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z''@;'; put 'put ''LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt''@;'; put 'put ''NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y''@;'; put 'put ''Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42''@;'; put 'put ''OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu''@;'; put 'put ''OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs''@;'; put 'put ''Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0''@;'; put 'put ''LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu''@;'; put 'put ''MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVUYWxrQnVi''@;'; put 'put ''Ymxlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy''@;'; put 'put ''Mi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEs''@;'; put 'put ''MCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCww''@;'; put 'put ''LDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwx''@;'; put 'put ''LDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2''@;'; put 'put ''LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTct''@;'; put 'put ''LjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43Nywy''@;'; put 'put ''Ljc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAs''@;'; put 'put ''MC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj''@;'; put 'put ''LTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43''@;'; put 'put ''M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAu''@;'; put 'put ''NWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAs''@;'; put 'put ''MC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTgu''@;'; put 'put ''ODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2''@;'; put 'put ''LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0t''@;'; put 'put ''My4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEsMjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2''@;'; put 'put ''LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03''@;'; put 'put ''LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAsMSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZVBpY3R1cmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45Miwx''@;'; put 'put ''NFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEs''@;'; put 'put ''MEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMs''@;'; put 'put ''M0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywz''@;'; put 'put ''LDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUhhcHB5RmFjZT0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs''@;'; put 'put ''MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh''@;'; put 'put ''MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JykseS5DbHJTaGFwZVNhZEZhY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx''@;'; put 'put ''LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs''@;'; put 'put ''MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs''@;'; put 'put ''MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNsclNoYXBlVGh1bWJzVXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w''@;'; put 'put ''OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku''@;'; put 'put ''MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs''@;'; put 'put ''MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVGh1bWJzRG93bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy''@;'; put 'put ''M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43''@;'; put 'put ''NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw''@;'; put 'put ''Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPicpLHkuQ2xyU2hhcGVDcm93bj0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIuNywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYu''@;'; put 'put ''NzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwx''@;'; put 'put ''LDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwx''@;'; put 'put ''LDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4yOCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4w''@;'; put 'put ''OSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0uNzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIg''@;'; put 'put ''cng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2''@;'; put 'put ''LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRaIi8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEzLjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEu''@;'; put 'put ''MzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwxNy4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCww''@;'; put 'put ''LTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0yLjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwx''@;'; put 'put ''LDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSwwLDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4''@;'; put 'put ''LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEsMCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c''@;'; put 'put ''biAgJykseS5DbHJTaGFwZUhhc2h0YWc9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt''@;'; put 'put ''MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM''@;'; put 'put ''MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44''@;'; put 'put ''M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww''@;'; put 'put ''LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh''@;'; put 'put ''MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJykseS5Tb2NpYWxTaGFwZXM9e2Nyb3du''@;'; put 'put ''OnkuQ2xyU2hhcGVDcm93bixzaGFyZTp5LkNsclNoYXBlU2hhcmUsc3Rhcjp5LkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjp5LkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6eS5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOnkuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpCLkNsclNoYXBl''@;'; put 'put ''Q2FsZW5kYXIsZXZlbnQ6Qi5DbHJTaGFwZUV2ZW50LHRhc2tzOnkuQ2xyU2hhcGVUYXNrcyxmbGFnOnkuQ2xyU2hhcGVGbGFnLGluYm94OnkuQ2xyU2hhcGVJbmJveCxoYXNodGFnOnkuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OnkuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjp5LkNsclNo''@;'; put 'put ''YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6eS5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6eS5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTp5LkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6eS5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjp5LkNs''@;'; put 'put ''clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjp5LkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjp5LkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjp5LkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs''@;'; put 'put ''Xy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlNvY2lh''@;'; put 'put ''bFNoYXBlcywiZGF0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZCh5LlNvY2lhbFNoYXBlcyl9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90''@;'; put 'put ''ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbHJTaGFwZVZNV0FwcD15LkNsclNoYXBlVk09eS5DbHJTaGFwZVJvdXRlcj15LkNsclNoYXBlTmV0d29ya1N3aXRjaD15LkNsclNoYXBlTmV0d29ya1NldHRpbmdzPXkuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9''@;'; put 'put ''eS5DbHJTaGFwZVRhYmxldD15LkNsclNoYXBlTW9iaWxlPXkuQ2xyU2hhcGVCYXR0ZXJ5PXkuQ2xyU2hhcGVBcHBsaWNhdGlvbj15LkNsclNoYXBlQ29kZT15LkNsclNoYXBlVGVybWluYWw9eS5DbHJTaGFwZURpc3BsYXk9eS5DbHJTaGFwZUNvbXB1dGVyPXkuQ2xyU2hhcGVGbG9wcHk9eS5D''@;'; put 'put ''bHJTaGFwZVBsdWdpbj15LkNsclNoYXBlRG93bmxvYWRDbG91ZD15LkNsclNoYXBlVXBsb2FkQ2xvdWQ9eS5DbHJTaGFwZUV4cG9ydD15LkNsclNoYXBlSW1wb3J0PXkuQ2xyU2hhcGVTaGllbGRYPXkuQ2xyU2hhcGVTaGllbGQ9eS5DbHJTaGFwZVNoaWVsZENoZWNrPXkuQ2xyU2hhcGVSZXNv''@;'; put 'put ''dXJjZVBvb2w9eS5DbHJTaGFwZURhdGFDbHVzdGVyPXkuQ2xyU2hhcGVNZW1vcnk9eS5DbHJTaGFwZUNQVT15LkNsclNoYXBlQnVpbGRpbmc9eS5DbHJTaGFwZUFwcGxpY2F0aW9ucz15LkNsclNoYXBlQ2x1c3Rlcj15LkNsclNoYXBlU3RvcmFnZT15LkNsclNoYXBlSG9zdD15LkNsclNoYXBl''@;'; put 'put ''RGFzaGJvYXJkPXkuQ2xyU2hhcGVNb3VzZT15LkNsclNoYXBlS2V5Ym9hcmQ9eS5DbHJTaGFwZURldmljZXM9eS5DbHJTaGFwZUJhY2t1cD15LkNsclNoYXBlQmFja3VwUmVzdG9yZT15LkNsclNoYXBlSGFyZERpc2s9eS5DbHJTaGFwZVJhY2tTZXJ2ZXI9eS5DbHJTaGFwZVdpZmk9eS5DbHJT''@;'; put 'put ''aGFwZUJ1bmRsZT15LkNsclNoYXBlQmxvY2tzR3JvdXA9eS5DbHJTaGFwZUJsb2NrPXkuQ2xyU2hhcGVMYXllcnM9eS5DbHJTaGFwZVVuaW5zdGFsbD15LkNsclNoYXBlSW5zdGFsbD15LkNsclNoYXBlTm9XaWZpPXkuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9eS5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''PXZvaWQgMCx5LlRlY2hub2xvZ3lTaGFwZXM9eS5DbHJTaGFwZUZpbGVTaGFyZTI9eS5DbHJTaGFwZUNpQ2Q9eS5DbHJTaGFwZUFuaW1hdGlvbj15LkNsclNoYXBlVGFwZURyaXZlPXkuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9eS5DbHJDb250cm9sTHVuPXkuQ2xyU2hhcGVQb2Q9eS5DbHJTaGFw''@;'; put 'put ''ZU5vZGU9eS5DbHJTaGFwZU5hbWVzcGFjZT15LkNsclNoYXBlTm9kZXM9eS5DbHJTaGFwZU5vZGVHcm91cD15LkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9eS5DbHJTaGFwZUhvc3RHcm91cD15LkNsclNoYXBlU3F1aWQ9eS5DbHJTaGFwZUNhcGFjaXRvcj15LkNsclNoYXBlUmVzaXN0b3I9eS5D''@;'; put 'put ''bHJTaGFwZUluZHVjdG9yPXkuQ2xyU2hhcGVSYWRhcj15LkNsclNoYXBlVXNiPXkuQ2xyU2hhcGVRckNvZGU9eS5DbHJTaGFwZUZpbGVTaGFyZT15LkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPXkuQ2xyU2hhcGVDb250YWluZXI9eS5DbHJTaGFwZUNkRHZkPXkuQ2xyU2hhcGVCYXJDb2RlPXku''@;'; put 'put ''Q2xyU2hhcGVBdG9tPXkuQ2xyU2hhcGVBc3NpZ25Vc2VyPXkuQ2xyU2hhcGVQcm9jZXNzT25WTT15LkNsclNoYXBlQmx1ZXRvb3RoT2ZmPXkuQ2xyU2hhcGVCbHVldG9vdGg9eS5DbHJTaGFwZVNTRD15LkNsclNoYXBlTlZNZT15LkNsclNoYXBlSGFyZERyaXZlRGlza3M9eS5DbHJTaGFwZUhh''@;'; put 'put ''cmREcml2ZT15LkNsclNoYXBlQWRtaW5pc3RyYXRvcj15LkNsclNoYXBlRmxhc2s9eS5DbHJTaGFwZUhlbGl4PXkuQ2xyU2hhcGVEZXBsb3k9eS5DbHJTaGFwZUNsb3VkVHJhZmZpYz15LkNsclNoYXBlQ2xvdWRTY2FsZT15LkNsclNoYXBlQ2xvdWROZXR3b3JrPXkuQ2xyU2hhcGVVbmxpbms9''@;'; put 'put ''eS5DbHJTaGFwZUxpbms9eS5DbHJTaGFwZURpc2Nvbm5lY3Q9eS5DbHJTaGFwZUNvbm5lY3Q9eS5DbHJTaGFwZVVuYXJjaGl2ZT15LkNsclNoYXBlQXJjaGl2ZT15LkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi''@;'; put 'put ''Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu''@;'; put 'put ''MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w''@;'; put 'put ''OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z''@;'; put 'put ''N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x''@;'; put 'put ''MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLHkuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds''@;'; put 'put ''NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu''@;'; put 'put ''ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5''@;'; put 'put ''LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz''@;'; put 'put ''My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLHkuQ2xyU2hhcGVO''@;'; put 'put ''b1dpZmk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTIt''@;'; put 'put ''MS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEs''@;'; put 'put ''MzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0''@;'; put 'put ''LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41''@;'; put 'put ''MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkEx''@;'; put 'put ''LjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwx''@;'; put 'put ''Mi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4''@;'; put 'put ''LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5''@;'; put 'put ''LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0x''@;'; put 'put ''LjQxLTI2LTI2WiIvPlxuJykseS5DbHJTaGFwZUluc3RhbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI''@;'; put 'put ''NS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3''@;'; put 'put ''LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEs''@;'; put 'put ''MTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''MC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJykseS5DbHJTaGFwZVVuaW5zdGFsbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls''@;'; put 'put ''NS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww''@;'; put 'put ''LDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNB''@;'; put 'put ''MSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44''@;'; put 'put ''N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuJykseS5DbHJTaGFwZUxheWVycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs''@;'; put 'put ''MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx''@;'; put 'put ''LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs''@;'; put 'put ''MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0''@;'; put 'put ''LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLHkuQ2xyU2hhcGVCbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; put 'put ''MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEt''@;'; put 'put ''NS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4''@;'; put 'put ''LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEs''@;'; put 'put ''NS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEu''@;'; put 'put ''NDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; put 'put ''MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAs''@;'; put 'put ''MTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4z''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4w''@;'; put 'put ''OC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41''@;'; put 'put ''OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex''@;'; put 'put ''LDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4w''@;'; put 'put ''OCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYs''@;'; put 'put ''MTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4x''@;'; put 'put ''MSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2''@;'; put 'put ''LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwt''@;'; put 'put ''Ni45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1''@;'; put 'put ''LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTgu''@;'; put 'put ''NzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1''@;'; put 'put ''LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4y''@;'; put 'put ''NmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgt''@;'; put 'put ''Mi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEs''@;'; put 'put ''MCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwz''@;'; put 'put ''LjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2''@;'; put 'put ''Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCww''@;'; put 'put ''LDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5''@;'; put 'put ''LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMu''@;'; put 'put ''NDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUEx''@;'; put 'put ''LjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4''@;'; put 'put ''TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAt''@;'; put 'put ''LjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1''@;'; put 'put ''LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLHku''@;'; put 'put ''Q2xyU2hhcGVCdW5kbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42''@;'; put 'put ''LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu''@;'; put 'put ''MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx''@;'; put 'put ''LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2''@;'; put 'put ''LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSx5LkNsclNoYXBlV2lmaT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4''@;'; put 'put ''LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43''@;'; put 'put ''MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0y''@;'; put 'put ''OS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwx''@;'; put 'put ''LjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSww''@;'; put 'put ''LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJykseS5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lk''@;'; put 'put ''dGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1''@;'; put 'put ''LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4w''@;'; put 'put ''Ny0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5''@;'; put 'put ''PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2''@;'; put 'put ''VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEw''@;'; put 'put ''VjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBI''@;'; put 'put ''MTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUy''@;'; put 'put ''LDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2''@;'; put 'put ''MkgxMFpNNiwyN0g4djJINloiLz5cbicpLHkuQ2xyU2hhcGVIYXJkRGlzaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0u''@;'; put 'put ''NTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4''@;'; put 'put ''Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIg''@;'; put 'put ''d2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBI''@;'; put 'put ''MzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSx5LkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg''@;'; put 'put ''eT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcu''@;'; put 'put ''MDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlh''@;'; put 'put ''MSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwx''@;'; put 'put ''NEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIs''@;'; put 'put ''MjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwx''@;'; put 'put ''LDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMu''@;'; put 'put ''NjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUy''@;'; put 'put ''TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40Niww''@;'; put 'put ''LDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3''@;'; put 'put ''LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJykseS5DbHJTaGFwZUJhY2t1cD0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYi''@;'; put 'put ''IHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwx''@;'; put 'put ''NlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMx''@;'; put 'put ''LDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzND''@;'; put 'put ''MzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwz''@;'; put 'put ''MS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIy''@;'; put 'put ''LjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwx''@;'; put 'put ''NCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3''@;'; put 'put ''LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45Miww''@;'; put 'put ''LDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3''@;'; put 'put ''LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjky''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcs''@;'; put 'put ''MjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJykseS5DbHJTaGFwZURldmljZXM9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW''@;'; put 'put ''MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy''@;'; put 'put ''LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLHkuQ2xyU2hhcGVLZXlib2FyZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIy''@;'; put 'put ''MiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2Mkgx''@;'; put 'put ''MVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSx5LkNsclNo''@;'; put 'put ''YXBlTW91c2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy''@;'; put 'put ''NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs''@;'; put 'put ''MCwwLDEsMi42LDBaIi8+XG4nKSx5LkNsclNoYXBlRGFzaGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2''@;'; put 'put ''LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4''@;'; put 'put ''LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1Ljky''@;'; put 'put ''LTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIu''@;'; put 'put ''MDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40''@;'; put 'put ''Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40''@;'; put 'put ''NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJs''@;'; put 'put ''NS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYz''@;'; put 'put ''LDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMu''@;'; put 'put ''NUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01''@;'; put 'put ''LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJykseS5DbHJTaGFwZUhvc3Q9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy''@;'; put 'put ''LjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwy''@;'; put 'put ''LjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMw''@;'; put 'put ''LTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4''@;'; put 'put ''LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhj''@;'; put 'put ''MC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEu''@;'; put 'put ''MiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9''@;'; put 'put ''IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgx''@;'; put 'put ''MFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgs''@;'; put 'put ''Mi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''YWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43''@;'; put 'put ''LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAu''@;'; put 'put ''MSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgs''@;'; put 'put ''MzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJykseS5DbHJTaGFwZVN0b3JhZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUu''@;'; put 'put ''MDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAs''@;'; put 'put ''MCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYs''@;'; put 'put ''MCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDks''@;'; put 'put ''MTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1''@;'; put 'put ''LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwx''@;'; put 'put ''LjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4x''@;'; put 'put ''My0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01''@;'; put 'put ''LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMyww''@;'; put 'put ''LDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1''@;'; put 'put ''LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43''@;'; put 'put ''NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMs''@;'; put 'put ''Ni43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5''@;'; put 'put ''VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40''@;'; put 'put ''M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkx''@;'; put 'put ''TDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZh''@;'; put 'put ''Ny40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUu''@;'; put 'put ''MjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2''@;'; put 'put ''LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSx5LkNsclNoYXBlQ2x1c3Rlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx''@;'; put 'put ''LjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEu''@;'; put 'put ''NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODls''@;'; put 'put ''LjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEu''@;'; put 'put ''NjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAz''@;'; put 'put ''MiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhI''@;'; put 'put ''NC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgz''@;'; put 'put ''M1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwx''@;'; put 'put ''OCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2''@;'; put 'put ''LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAs''@;'; put 'put ''MTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxnLmNsckljb25TVkcpKCc8cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1''@;'; put 'put ''IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAx''@;'; put 'put ''MCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAz''@;'; put 'put ''MiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5''@;'; put 'put ''IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAx''@;'; put 'put ''NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTks''@;'; put 'put ''OEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWln''@;'; put 'put ''aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy''@;'; put 'put ''NiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhl''@;'; put 'put ''aWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDku''@;'; put 'put ''ODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIg''@;'; put 'put ''aGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQnVpbGRpbmc9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''NS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1Yy''@;'; put 'put ''OEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYx''@;'; put 'put ''OGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYz''@;'; put 'put ''MGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlpt''@;'; put 'put ''MC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00''@;'; put 'put ''Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMTho''@;'; put 'put ''MlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4''@;'; put 'put ''aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwz''@;'; put 'put ''SDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVI''@;'; put 'put ''MTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUs''@;'; put 'put ''Ny41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhW''@;'; put 'put ''MzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTku''@;'; put 'put ''ODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNQVT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu''@;'; put 'put ''NUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEu''@;'; put 'put ''NkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZI''@;'; put 'put ''NnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEs''@;'; put 'put ''OC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwx''@;'; put 'put ''LjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAs''@;'; put 'put ''MjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFB''@;'; put 'put ''LjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUu''@;'; put 'put ''NEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1''@;'; put 'put ''LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42''@;'; put 'put ''N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIu''@;'; put 'put ''MmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZI''@;'; put 'put ''OC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2''@;'; put 'put ''Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0''@;'; put 'put ''LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44''@;'; put 'put ''LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4x''@;'; put 'put ''LDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhh''@;'; put 'put ''LjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu''@;'; put 'put ''OCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlTWVtb3J5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0''@;'; put 'put ''IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdp''@;'; put 'put ''ZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41Nmwx''@;'; put 'put ''LjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIg''@;'; put 'put ''eT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJB''@;'; put 'put ''Ny40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4''@;'; put 'put ''LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRI''@;'; put 'put ''NHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD''@;'; put 'put ''MjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0''@;'; put 'put ''LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1''@;'; put 'put ''LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMs''@;'; put 'put ''MCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUu''@;'; put 'put ''NCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwx''@;'; put 'put ''OC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYu''@;'; put 'put ''MzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2''@;'; put 'put ''LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41''@;'; put 'put ''NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQs''@;'; put 'put ''NC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1''@;'; put 'put ''LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywx''@;'; put 'put ''Ni4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIu''@;'; put 'put ''NjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcs''@;'; put 'put ''OS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQu''@;'; put 'put ''MzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAu''@;'; put 'put ''MjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4''@;'; put 'put ''VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4''@;'; put 'put ''LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSww''@;'; put 'put ''LDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44''@;'; put 'put ''Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45''@;'; put 'put ''LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3''@;'; put 'put ''LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQu''@;'; put 'put ''NSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1''@;'; put 'put ''LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45''@;'; put 'put ''MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUs''@;'; put 'put ''MTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4''@;'; put 'put ''LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45''@;'; put 'put ''NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYs''@;'; put 'put ''MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2''@;'; put 'put ''LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45''@;'; put 'put ''QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1Ljkx''@;'; put 'put ''LDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3''@;'; put 'put ''LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x''@;'; put 'put ''Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4''@;'; put 'put ''LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww''@;'; put 'put ''LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41''@;'; put 'put ''NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0''@;'; put 'put ''LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNoaWVsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42Niwx''@;'; put 'put ''OC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIt''@;'; put 'put ''Myw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0x''@;'; put 'put ''Mi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz''@;'; put 'put ''LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0''@;'; put 'put ''Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUs''@;'; put 'put ''MCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0''@;'; put 'put ''YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4z''@;'; put 'put ''NC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlU2hpZWxkWD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5''@;'; put 'put ''LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww''@;'; put 'put ''LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy''@;'; put 'put ''LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx''@;'; put 'put ''LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx''@;'; put 'put ''My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40''@;'; put 'put ''LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlSW1wb3J0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3''@;'; put 'put ''TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEu''@;'; put 'put ''NDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCww''@;'; put 'put ''LDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJI''@;'; put 'put ''MTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAs''@;'; put 'put ''Mkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQx''@;'; put 'put ''LTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFw''@;'; put 'put ''ZUV4cG9ydD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAt''@;'; put 'put ''MS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2''@;'; put 'put ''LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEw''@;'; put 'put ''Ljg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIs''@;'; put 'put ''MTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEs''@;'; put 'put ''MCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTls''@;'; put 'put ''LTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIy''@;'; put 'put ''Ljc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEw''@;'; put 'put ''Ljc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwy''@;'; put 'put ''MS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwy''@;'; put 'put ''LjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0u''@;'; put 'put ''NjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1''@;'; put 'put ''QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCww''@;'; put 'put ''LDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUEx''@;'; put 'put ''LDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcu''@;'; put 'put ''NDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww''@;'; put 'put ''LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZI''@;'; put 'put ''MjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEs''@;'; put 'put ''MC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEu''@;'; put 'put ''MjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDEx''@;'; put 'put ''LDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYu''@;'; put 'put ''MzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAs''@;'; put 'put ''MCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQt''@;'; put 'put ''MTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVQbHVnaW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y''@;'; put 'put ''LDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMs''@;'; put 'put ''MCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwz''@;'; put 'put ''Mi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41''@;'; put 'put ''OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2''@;'; put 'put ''aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4x''@;'; put 'put ''NSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRh''@;'; put 'put ''MiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAs''@;'; put 'put ''MCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAs''@;'; put 'put ''MSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAnKSx5LkNsclNoYXBlRmxvcHB5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJh''@;'; put 'put ''MiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwz''@;'; put 'put ''LjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCww''@;'; put 'put ''LDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3''@;'; put 'put ''LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVa''@;'; put 'put ''TTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42Nyww''@;'; put 'put ''LDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVDb21wdXRlcj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy''@;'; put 'put ''NC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQs''@;'; put 'put ''Ni41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgz''@;'; put 'put ''LjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIu''@;'; put 'put ''NiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42''@;'; put 'put ''NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUs''@;'; put 'put ''MjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURpc3BsYXk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwx''@;'; put 'put ''LDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRW''@;'; put 'put ''MjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4x''@;'; put 'put ''NiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEz''@;'; put 'put ''LjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45''@;'; put 'put ''MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAs''@;'; put 'put ''MCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEs''@;'; put 'put ''MCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwy''@;'; put 'put ''LDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYs''@;'; put 'put ''MzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41''@;'; put 'put ''MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEz''@;'; put 'put ''LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVRlcm1pbmFsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI''@;'; put 'put ''MzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5''@;'; put 'put ''PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4''@;'; put 'put ''IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTks''@;'; put 'put ''OS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIu''@;'; put 'put ''MzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYy''@;'; put 'put ''LjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5''@;'; put 'put ''LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEu''@;'; put 'put ''MTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdI''@;'; put 'put ''MjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02''@;'; put 'put ''LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNvZGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEs''@;'; put 'put ''MSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5Ljgz''@;'; put 'put ''YS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAs''@;'; put 'put ''MS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42''@;'; put 'put ''NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAs''@;'; put 'put ''MCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQXBwbGljYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy''@;'; put 'put ''djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs''@;'; put 'put ''NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVCYXR0ZXJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w''@;'; put 'put ''NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAs''@;'; put 'put ''MCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41''@;'; put 'put ''OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4y''@;'; put 'put ''LDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQs''@;'; put 'put ''MjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIu''@;'; put 'put ''MDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1''@;'; put 'put ''LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2''@;'; put 'put ''YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU1vYmlsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs''@;'; put 'put ''MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlVGFibGV0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAnKSx5LkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMz''@;'; put 'put ''LDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41''@;'; put 'put ''OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0''@;'; put 'put ''LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41''@;'; put 'put ''MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4z''@;'; put 'put ''NCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCww''@;'; put 'put ''LDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSww''@;'; put 'put ''LDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYs''@;'; put 'put ''MTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMs''@;'; put 'put ''Mi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44''@;'; put 'put ''OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3''@;'; put 'put ''LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYu''@;'; put 'put ''OSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwx''@;'; put 'put ''MC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEs''@;'; put 'put ''MTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwx''@;'; put 'put ''LDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEu''@;'; put 'put ''OTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjct''@;'; put 'put ''LjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTIt''@;'; put 'put ''LjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdj''@;'; put 'put ''MCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0''@;'; put 'put ''LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAs''@;'; put 'put ''MS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAs''@;'; put 'put ''MCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIs''@;'; put 'put ''OS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcu''@;'; put 'put ''NDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYu''@;'; put 'put ''OTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEy''@;'; put 'put ''LDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwx''@;'; put 'put ''LjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwu''@;'; put 'put ''MzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCww''@;'; put 'put ''LDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0z''@;'; put 'put ''LjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgt''@;'; put 'put ''LjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEy''@;'; put 'put ''LDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCww''@;'; put 'put ''LDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIz''@;'; put 'put ''Yy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAs''@;'; put 'put ''MC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIu''@;'; put 'put ''NzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0''@;'; put 'put ''LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41''@;'; put 'put ''MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4x''@;'; put 'put ''Mi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAs''@;'; put 'put ''MCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43''@;'; put 'put ''Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs''@;'; put 'put ''MTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0''@;'; put 'put ''LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTks''@;'; put 'put ''MCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCww''@;'; put 'put ''LDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05''@;'; put 'put ''LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4x''@;'; put 'put ''NCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAs''@;'; put 'put ''MC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWEx''@;'; put 'put ''LjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYy''@;'; put 'put ''LS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAs''@;'; put 'put ''MSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4y''@;'; put 'put ''Mi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTkt''@;'; put 'put ''MS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAs''@;'; put 'put ''MCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0u''@;'; put 'put ''MzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1''@;'; put 'put ''LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgt''@;'; put 'put ''Ny4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4y''@;'; put 'put ''YzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwx''@;'; put 'put ''LDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUx''@;'; put 'put ''LS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcs''@;'; put 'put ''MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0z''@;'; put 'put ''MiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdp''@;'; put 'put ''ZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0''@;'; put 'put ''PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0i''@;'; put 'put ''MjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3''@;'; put 'put ''LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwx''@;'; put 'put ''OC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIx''@;'; put 'put ''LjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIz''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDgu''@;'; put 'put ''NDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAs''@;'; put 'put ''MjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww''@;'; put 'put ''aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5''@;'; put 'put ''Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww''@;'; put 'put ''aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEz''@;'; put 'put ''LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiww''@;'; put 'put ''LDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVSb3V0ZXI9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40Mkwz''@;'; put 'put ''NCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwx''@;'; put 'put ''NC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjgu''@;'; put 'put ''OCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjEx''@;'; put 'put ''bDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4x''@;'; put 'put ''NCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00''@;'; put 'put ''LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwx''@;'; put 'put ''LTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjgu''@;'; put 'put ''OCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44''@;'; put 'put ''LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIs''@;'; put 'put ''Mi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4''@;'; put 'put ''LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAg''@;'; put 'put ''JykseS5DbHJTaGFwZVZNPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiww''@;'; put 'put ''LDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMu''@;'; put 'put ''NTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUu''@;'; put 'put ''NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZI''@;'; put 'put ''MjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMu''@;'; put 'put ''NjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEu''@;'; put 'put ''NnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVWTVdBcHA9KDAsZy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy''@;'; put 'put ''OCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0''@;'; put 'put ''IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdp''@;'; put 'put ''ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSww''@;'; put 'put ''LDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg''@;'; put 'put ''ICcpLHkuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIu''@;'; put 'put ''MzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0i''@;'; put 'put ''MTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2''@;'; put 'put ''LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMz''@;'; put 'put ''LjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdo''@;'; put 'put ''dD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2''@;'; put 'put ''LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43''@;'; put 'put ''OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEy''@;'; put 'put ''LDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4z''@;'; put 'put ''NywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwz''@;'; put 'put ''LjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYs''@;'; put 'put ''MTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00''@;'; put 'put ''LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQXJjaGl2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMs''@;'; put 'put ''MCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEs''@;'; put 'put ''MjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVW''@;'; put 'put ''M2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42''@;'; put 'put ''NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEy''@;'; put 'put ''czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAs''@;'; put 'put ''MSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwx''@;'; put 'put ''MkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40''@;'; put 'put ''MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQ29ubmVjdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs''@;'; put 'put ''MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45''@;'; put 'put ''NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx''@;'; put 'put ''LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt''@;'; put 'put ''NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs''@;'; put 'put ''MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2''@;'; put 'put ''LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x''@;'; put 'put ''NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2''@;'; put 'put ''Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVMaW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx''@;'; put 'put ''LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45''@;'; put 'put ''MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu''@;'; put 'put ''ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x''@;'; put 'put ''LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''JykseS5DbHJTaGFwZVVubGluaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01''@;'; put 'put ''LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs''@;'; put 'put ''NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBl''@;'; put 'put ''Q2xvdWROZXR3b3JrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41''@;'; put 'put ''OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz''@;'; put 'put ''LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy''@;'; put 'put ''LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI''@;'; put 'put ''MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4''@;'; put 'put ''LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu''@;'; put 'put ''ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y''@;'; put 'put ''NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4''@;'; put 'put ''LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3''@;'; put 'put ''QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURlcGxveT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB''@;'; put 'put ''MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3''@;'; put 'put ''LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUhlbGl4PSgwLGcuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwy''@;'; put 'put ''MS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwu''@;'; put 'put ''NDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwx''@;'; put 'put ''LTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIs''@;'; put 'put ''MS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAs''@;'; put 'put ''MCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1''@;'; put 'put ''LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcp''@;'; put 'put ''LHkuQ2xyU2hhcGVGbGFzaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz''@;'; put 'put ''NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w''@;'; put 'put ''NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM''@;'; put 'put ''NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu''@;'; put 'put ''NzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJh''@;'; put 'put ''MTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYs''@;'; put 'put ''MCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2''@;'; put 'put ''LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCww''@;'; put 'put ''LDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYs''@;'; put 'put ''MCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAs''@;'; put 'put ''MCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4w''@;'; put 'put ''N2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNyww''@;'; put 'put ''LDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4''@;'; put 'put ''LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIs''@;'; put 'put ''MzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAs''@;'; put 'put ''MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUhhcmREcml2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIx''@;'; put 'put ''LjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEu''@;'; put 'put ''ODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCww''@;'; put 'put ''LDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAs''@;'; put 'put ''MC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSww''@;'; put 'put ''LDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4z''@;'; put 'put ''MSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhB''@;'; put 'put ''OS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYs''@;'; put 'put ''MTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43''@;'; put 'put ''NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZB''@;'; put 'put ''MS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''MTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwy''@;'; put 'put ''My42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMs''@;'; put 'put ''NC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEs''@;'; put 'put ''MCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1''@;'; put 'put ''Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDku''@;'; put 'put ''NzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYy''@;'; put 'put ''LDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4''@;'; put 'put ''LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4x''@;'; put 'put ''M2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44''@;'; put 'put ''OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVOVk1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI''@;'; put 'put ''MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs''@;'; put 'put ''MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNTRD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjku''@;'; put 'put ''ODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEu''@;'; put 'put ''MDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIw''@;'; put 'put ''LjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIu''@;'; put 'put ''MzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEu''@;'; put 'put ''MjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0u''@;'; put 'put ''OTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43''@;'; put 'put ''Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44''@;'; put 'put ''OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIu''@;'; put 'put ''MjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwx''@;'; put 'put ''LDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVCbHVldG9vdGg9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs''@;'; put 'put ''MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3''@;'; put 'put ''LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW''@;'; put 'put ''MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu''@;'; put 'put ''MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHku''@;'; put 'put ''Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey''@;'; put 'put ''LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z''@;'; put 'put ''LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41''@;'; put 'put ''NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlUHJvY2Vzc09uVk09KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx''@;'; put 'put ''Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx''@;'; put 'put ''LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs''@;'; put 'put ''MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh''@;'; put 'put ''MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1''@;'; put 'put ''LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUz''@;'; put 'put ''LDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMx''@;'; put 'put ''Ljg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUu''@;'; put 'put ''NTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2Ljgx''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCww''@;'; put 'put ''LS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMu''@;'; put 'put ''NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVBdG9tPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy''@;'; put 'put ''LjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4x''@;'; put 'put ''Mi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjks''@;'; put 'put ''NS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5''@;'; put 'put ''LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQu''@;'; put 'put ''NjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMy''@;'; put 'put ''LjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0u''@;'; put 'put ''NDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwy''@;'; put 'put ''Mi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYu''@;'; put 'put ''ODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiww''@;'; put 'put ''LDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5''@;'; put 'put ''LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5''@;'; put 'put ''LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwy''@;'; put 'put ''NS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiww''@;'; put 'put ''LDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjIt''@;'; put 'put ''LjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5''@;'; put 'put ''LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42''@;'; put 'put ''OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIy''@;'; put 'put ''Ljg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjEx''@;'; put 'put ''KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCYXJDb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLHkuQ2xyU2hhcGVDZER2''@;'; put 'put ''ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMw''@;'; put 'put ''LjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4x''@;'; put 'put ''MmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTgu''@;'; put 'put ''MjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdB''@;'; put 'put ''OC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCww''@;'; put 'put ''LTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQ29udGFpbmVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW''@;'; put 'put ''MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu''@;'; put 'put ''OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44''@;'; put 'put ''LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks''@;'; put 'put ''MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs''@;'; put 'put ''LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww''@;'; put 'put ''LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu''@;'; put 'put ''MTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIu''@;'; put 'put ''NzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUt''@;'; put 'put ''MTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45''@;'; put 'put ''MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0u''@;'; put 'put ''Ny43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''MEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40''@;'; put 'put ''NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEy''@;'; put 'put ''OSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSx5LkNsclNoYXBlRmlsZVNoYXJlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42''@;'; put 'put ''NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx''@;'; put 'put ''LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVFyQ29kZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww''@;'; put 'put ''LDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAs''@;'; put 'put ''MCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBw''@;'; put 'put ''b2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAy''@;'; put 'put ''OCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSx5LkNs''@;'; put 'put ''clNoYXBlVXNiPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAt''@;'; put 'put ''MywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAs''@;'; put 'put ''MCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwz''@;'; put 'put ''LjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2''@;'; put 'put ''Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40Mloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIu''@;'; put 'put ''MjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJo''@;'; put 'put ''NC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSYWRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku''@;'; put 'put ''NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0''@;'; put 'put ''LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0''@;'; put 'put ''YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy''@;'; put 'put ''LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLHkuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz''@;'; put 'put ''LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs''@;'; put 'put ''Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs''@;'; put 'put ''MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x''@;'; put 'put ''Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx''@;'; put 'put ''NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u''@;'; put 'put ''MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs''@;'; put 'put ''MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs''@;'; put 'put ''MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3''@;'; put 'put ''LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks''@;'; put 'put ''eS5DbHJTaGFwZUNhcGFjaXRvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx''@;'; put 'put ''LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNs''@;'; put 'put ''clNoYXBlU3F1aWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww''@;'; put 'put ''LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5''@;'; put 'put ''TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlSG9zdEdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB''@;'; put 'put ''MS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2''@;'; put 'put ''Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwz''@;'; put 'put ''MS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JykseS5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1''@;'; put 'put ''VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo''@;'; put 'put ''PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JykseS5DbHJTaGFwZU5vZGVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx''@;'; put 'put ''My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45''@;'; put 'put ''NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40''@;'; put 'put ''NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x''@;'; put 'put ''VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1''@;'; put 'put ''djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVOb2Rlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5''@;'; put 'put ''VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41''@;'; put 'put ''LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu''@;'; put 'put ''OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JykseS5DbHJTaGFwZU5hbWVzcGFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx''@;'; put 'put ''LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku''@;'; put 'put ''NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLHkuQ2xyU2hh''@;'; put 'put ''cGVOb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+JykseS5DbHJTaGFwZVBvZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy''@;'; put 'put ''NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2''@;'; put 'put ''LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40''@;'; put 'put ''MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSx5LkNsckNvbnRyb2xMdW49KDAsZy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4z''@;'; put 'put ''NCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1''@;'; put 'put ''LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4''@;'; put 'put ''LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAs''@;'; put 'put ''MCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcu''@;'; put 'put ''NTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41''@;'; put 'put ''MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQs''@;'; put 'put ''NC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1Yx''@;'; put 'put ''MC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0u''@;'; put 'put ''MjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40''@;'; put 'put ''Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42''@;'; put 'put ''MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEs''@;'; put 'put ''MUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjIt''@;'; put 'put ''LjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44''@;'; put 'put ''LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzks''@;'; put 'put ''MjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEs''@;'; put 'put ''MSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcu''@;'; put 'put ''ODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwu''@;'; put 'put ''NDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYy''@;'; put 'put ''NC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLHkuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9''@;'; put 'put ''IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44Ljgs''@;'; put 'put ''MCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0i''@;'; put 'put ''OC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0''@;'; put 'put ''IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEi''@;'; put 'put ''IHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9''@;'; put 'put ''IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEu''@;'; put 'put ''MjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIs''@;'; put 'put ''MCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0w''@;'; put 'put ''LTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcu''@;'; put 'put ''NDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJI''@;'; put 'put ''MzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRW''@;'; put 'put ''MjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJykseS5DbHJTaGFwZVRhcGVEcml2ZT0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUz''@;'; put 'put ''LDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQu''@;'; put 'put ''NTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx''@;'; put 'put ''LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIs''@;'; put 'put ''MCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQu''@;'; put 'put ''NTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRs''@;'; put 'put ''MS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAs''@;'; put 'put ''MCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB''@;'; put 'put ''MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCww''@;'; put 'put ''LDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEt''@;'; put 'put ''MiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwx''@;'; put 'put ''LDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLHkuQ2xyU2hhcGVBbmltYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw''@;'; put 'put ''LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy''@;'; put 'put ''LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu''@;'; put 'put ''MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs''@;'; put 'put ''MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSx5LkNsclNoYXBlQ2lDZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx''@;'; put 'put ''LC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcu''@;'; put 'put ''NDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwx''@;'; put 'put ''LjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCww''@;'; put 'put ''LDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwx''@;'; put 'put ''LDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAs''@;'; put 'put ''MS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJs''@;'; put 'put ''LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLHkuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu''@;'; put 'put ''MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2''@;'; put 'put ''VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy''@;'; put 'put ''LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6eS5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0Ijp5LkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjp5LkNsclNoYXBlTm9XaWZpLGluc3RhbGw6eS5DbHJTaGFwZUlu''@;'; put 'put ''c3RhbGwsdW5pbnN0YWxsOnkuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOnkuQ2xyU2hhcGVMYXllcnMsYmxvY2s6eS5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOnkuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6eS5DbHJTaGFwZUJ1bmRsZSx3aWZpOnkuQ2xyU2hhcGVXaWZpLCJy''@;'; put 'put ''YWNrLXNlcnZlciI6eS5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6eS5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6eS5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOnkuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczp5LkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDp5''@;'; put 'put ''LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6eS5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDp5LkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6eS5DbHJTaGFwZUhvc3Qsc3RvcmFnZTp5LkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOnkuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczp5LkNsclNoYXBl''@;'; put 'put ''QXBwbGljYXRpb25zLGJ1aWxkaW5nOnkuQ2xyU2hhcGVCdWlsZGluZyxjcHU6eS5DbHJTaGFwZUNQVSxtZW1vcnk6eS5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjp5LkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOnkuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk''@;'; put 'put ''OnkuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6eS5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6eS5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OnkuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OnkuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6eS5DbHJTaGFwZVVwbG9hZENs''@;'; put 'put ''b3VkLCJkb3dubG9hZC1jbG91ZCI6eS5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOnkuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OnkuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6eS5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6eS5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6eS5DbHJTaGFw''@;'; put 'put ''ZVRlcm1pbmFsLGNvZGU6eS5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246eS5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6eS5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOnkuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OnkuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOnkuQ2xyU2hhcGVO''@;'; put 'put ''ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOnkuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjp5LkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6eS5DbHJTaGFwZVJvdXRlcix2bTp5LkNsclNoYXBlVk0sInZtdy1hcHAiOnkuQ2xyU2hhcGVWTVdBcHAs''@;'; put 'put ''Y2VydGlmaWNhdGU6eS5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6eS5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOnkuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDp5LkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OnkuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6eS5DbHJTaGFwZUxp''@;'; put 'put ''bmssdW5saW5rOnkuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOnkuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjp5LkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6eS5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOnkuQ2xyQ29udHJv''@;'; put 'put ''bEx1bixkZXBsb3k6eS5DbHJTaGFwZURlcGxveSxoZWxpeDp5LkNsclNoYXBlSGVsaXgsZmxhc2s6eS5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6eS5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOnkuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOnku''@;'; put 'put ''Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOnkuQ2xyU2hhcGVOVk1lLHNzZDp5LkNsclNoYXBlU1NELGJsdWV0b290aDp5LkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjp5LkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjp5LkNsclNoYXBlUHJvY2Vzc09u''@;'; put 'put ''Vk0sImFzc2lnbi11c2VyIjp5LkNsclNoYXBlQXNzaWduVXNlcixhdG9tOnkuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6eS5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6eS5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjp5LkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjp5LkNs''@;'; put 'put ''clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjp5LkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjp5LkNsclNoYXBlUXJDb2RlLHVzYjp5LkNsclNoYXBlVXNiLHJhZGFyOnkuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6eS5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDp5LkNsclNo''@;'; put 'put ''YXBlU3F1aWQsaW5kdWN0b3I6eS5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOnkuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6eS5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjp5LkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOnkuQ2xyU2hhcGVO''@;'; put 'put ''b2RlR3JvdXAsbm9kZXM6eS5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTp5LkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6eS5DbHJTaGFwZU5vZGUscG9kOnkuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOnkuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOnkuQ2xyU2hhcGVUYXBl''@;'; put 'put ''RHJpdmUsYW5pbWF0aW9uOnkuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjp5LkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjp5LkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxfLmRlc2NyaXB0b3JDb25m''@;'; put 'put ''aWcpKHkuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9s''@;'; put 'put ''b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNo''@;'; put 'put ''YXBlcywicmVjZWl2ZXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9sb2d5U2hhcGVzLCJmb2xk''@;'; put 'put ''ZXItc2hhcmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No''@;'; put 'put ''YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuVGV4dEVkaXRTaGFwZXM9eS5DbHJTaGFwZVN1cGVyc2NyaXB0PXkuQ2xyU2hhcGVTdWJzY3JpcHQ9eS5DbHJTaGFwZVN0cmlrZXRocm91Z2g9eS5DbHJTaGFwZUluZGVudD15LkNsclNoYXBlT3V0ZGVu''@;'; put 'put ''dD15LkNsclNoYXBlSGlnaGxpZ2h0ZXI9eS5DbHJTaGFwZVRleHRDb2xvcj15LkNsclNoYXBlTGFuZ3VhZ2U9eS5DbHJTaGFwZUFsaWduVG9wPXkuQ2xyU2hhcGVBbGlnbk1pZGRsZT15LkNsclNoYXBlQWxpZ25Cb3R0b209eS5DbHJTaGFwZVVuZGVybGluZT15LkNsclNoYXBlVGV4dD15LkNs''@;'; put 'put ''clNoYXBlQWxpZ25SaWdodFRleHQ9eS5DbHJTaGFwZUJsb2NrUXVvdGU9eS5DbHJTaGFwZVBhaW50Um9sbGVyPXkuQ2xyU2hhcGVOdW1iZXJMaXN0PXkuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PXkuQ2xyU2hhcGVKdXN0aWZ5VGV4dD15LkNsclNoYXBlSXRhbGljPXkuQ2xyU2hhcGVBbGlnblJp''@;'; put 'put ''Z2h0PXkuQ2xyU2hhcGVBbGlnbkxlZnQ9eS5DbHJTaGFwZUFsaWduQ2VudGVyPXkuQ2xyU2hhcGVGb250U2l6ZT15LkNsclNoYXBlQ2hlY2tib3hMaXN0PXkuQ2xyU2hhcGVDZW50ZXJUZXh0PXkuQ2xyU2hhcGVCdWxsZXRMaXN0PXkuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgXz1JKAovKiEg''@;'; put 'put ''Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUJvbGQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2''@;'; put 'put ''YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx''@;'; put 'put ''OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy''@;'; put 'put ''LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUJ1bGxldExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLF8uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx''@;'; put 'put ''LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JykseS5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5''@;'; put 'put ''LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVGb250U2l6ZT0oMCxfLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPicpLHkuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx''@;'; put 'put ''LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW''@;'; put 'put ''MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw''@;'; put 'put ''VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQWxpZ25SaWdodD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy''@;'; put 'put ''LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUl0YWxpYz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu''@;'; put 'put ''NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs''@;'; put 'put ''MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlTnVt''@;'; put 'put ''YmVyTGlzdD0oMCxfLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu''@;'; put 'put ''MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww''@;'; put 'put ''LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu''@;'; put 'put ''OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40''@;'; put 'put ''MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JykseS5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx''@;'; put 'put ''IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww''@;'; put 'put ''LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQmxvY2tRdW90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs''@;'; put 'put ''MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu''@;'; put 'put ''MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs''@;'; put 'put ''MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy''@;'; put 'put ''MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JykseS5DbHJTaGFwZVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1''@;'; put 'put ''LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4''@;'; put 'put ''LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy''@;'; put 'put ''Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu''@;'; put 'put ''NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3''@;'; put 'put ''LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVV''@;'; put 'put ''bmRlcmxpbmU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs''@;'; put 'put ''MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQWxpZ25Cb3R0b209KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs''@;'; put 'put ''MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww''@;'; put 'put ''LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo''@;'; put 'put ''NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUFsaWduVG9wPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww''@;'; put 'put ''LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlTGFuZ3VhZ2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww''@;'; put 'put ''LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt''@;'; put 'put ''MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM''@;'; put 'put ''MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo''@;'; put 'put ''NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu''@;'; put 'put ''MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x''@;'; put 'put ''LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0''@;'; put 'put ''LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVGV4dENvbG9yPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx''@;'; put 'put ''OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4''@;'; put 'put ''LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww''@;'; put 'put ''LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy''@;'; put 'put ''QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy''@;'; put 'put ''LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy''@;'; put 'put ''ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSx5LkNsclNoYXBlT3V0ZGVudD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx''@;'; put 'put ''LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy''@;'; put 'put ''Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLHkuQ2xyU2hhcGVJbmRlbnQ9KDAs''@;'; put 'put ''Xy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx''@;'; put 'put ''LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2''@;'; put 'put ''LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSx5LkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5''@;'; put 'put ''YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwx''@;'; put 'put ''LjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5''@;'; put 'put ''LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0y''@;'; put 'put ''LDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwx''@;'; put 'put ''LTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4w''@;'; put 'put ''Niw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2''@;'; put 'put ''Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwz''@;'; put 'put ''LjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''Ii8+JykseS5DbHJTaGFwZVN1YnNjcmlwdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x''@;'; put 'put ''NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy''@;'; put 'put ''LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs''@;'; put 'put ''Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5''@;'; put 'put ''LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo''@;'; put 'put ''MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu''@;'; put 'put ''NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs''@;'; put 'put ''MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI''@;'; put 'put ''MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLHkuVGV4dEVkaXRTaGFwZXM9e2JvbGQ6eS5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0Ijp5LkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6eS5DbHJTaGFwZUNoZWNrYm94TGlz''@;'; put 'put ''dCwibnVtYmVyLWxpc3QiOnkuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOnkuQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6eS5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0Ijp5LkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0Ijp5LkNsclNoYXBlQ2VudGVyVGV4dCwi''@;'; put 'put ''YWxpZ24tbGVmdC10ZXh0Ijp5LkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6eS5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOnkuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOnkuQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6eS5D''@;'; put 'put ''bHJTaGFwZVRleHQsdW5kZXJsaW5lOnkuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6eS5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0Ijp5LkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6eS5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6eS5D''@;'; put 'put ''bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOnkuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjp5LkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6eS5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjp5LkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOnkuQ2xy''@;'; put 'put ''U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6eS5DbHJTaGFwZUluZGVudCxvdXRkZW50OnkuQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6eS5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OnkuQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6eS5DbHJTaGFwZVN1cGVyc2Ny''@;'; put 'put ''aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLHksSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5LlRyYXZlbFNoYXBlcz15LkNsclNoYXBlT25I''@;'; put 'put ''b2xpZGF5PXkuQ2xyU2hhcGVUcmFpbGVyPXkuQ2xyU2hhcGVGZXJyeT15LkNsclNoYXBlQ2FyYXZhbj15LkNsclNoYXBlQ2FtcGVydmFuPXkuQ2xyU2hhcGVCb2F0PXkuQ2xyU2hhcGVCaWN5Y2xlPXkuQ2xyU2hhcGVNYXBNYXJrZXI9eS5DbHJTaGFwZUNvbXBhc3M9eS5DbHJTaGFwZU1hcD15''@;'; put 'put ''LkNsclNoYXBlQ2FyPXkuQ2xyU2hhcGVBaXJwbGFuZT15LkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGls''@;'; put 'put ''cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVHJ1Y2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx''@;'; put 'put ''MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww''@;'; put 'put ''SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs''@;'; put 'put ''MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs''@;'; put 'put ''MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs''@;'; put 'put ''MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JykseS5DbHJTaGFwZUFp''@;'; put 'put ''cnBsYW5lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUuNzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEu''@;'; put 'put ''ODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGExLjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4y''@;'; put 'put ''LDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIsMTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2''@;'; put 'put ''Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSwwLDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDEx''@;'; put 'put ''LjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+JykseS5DbHJTaGFwZUNhcj0oMCxnLmNscklj''@;'; put 'put ''b25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y''@;'; put 'put ''Ni40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIwSDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3''@;'; put 'put ''LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThh''@;'; put 'put ''OC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCww''@;'; put 'put ''LDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4x''@;'; put 'put ''MywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIzLjM2QTkuMzksOS4zOSwwLDAsMCwyNi44Nywx''@;'; put 'put ''NC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40''@;'; put 'put ''LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLHkuQ2xyU2hhcGVNYXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx''@;'; put 'put ''LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z''@;'; put 'put ''djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9''@;'; put 'put ''IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz''@;'; put 'put ''aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSx5LkNsclNoYXBlQ29tcGFzcz0o''@;'; put 'put ''MCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW''@;'; put 'put ''NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5''@;'; put 'put ''LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBl''@;'; put 'put ''TWFwTWFya2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMu''@;'; put 'put ''NzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx''@;'; put 'put ''LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlpNMjMuNTksMjRsLS4zNi41M2MtMS43MiwyLjU4''@;'; put 'put ''LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxYTkuNzgsOS43OCwwLDEsMSwxOS41NiwwQzI3Ljc4LDE3Ljc5LDI1LjM2LDIxLjQsMjMuNTksMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMu''@;'; put 'put ''NzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlhNy40OSw3LjQ5LDAsMCwxLTItLjMzYzAsLjE5LDAsLjM4LDAsLjU3LDAsNC4w''@;'; put 'put ''Ni0yLjQyLDcuNjctNC4xOSwxMC4zMWwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFBOS43Nyw5Ljc3LDAsMCwxLDIyLjU2LDUuMDlhNy40NSw3LjQ1LDAs''@;'; put 'put ''MCwxLC41Mi0yQTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1''@;'; put 'put ''LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4''@;'; put 'put ''bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJabTAsMTdhNi41Niw2LjU2LDAsMSwxLDYuNTYtNi41NkE2LjU2LDYuNTYsMCwwLDEsMTgsMTlaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMjkuNzcsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI0LjM4LDExYTYuNTgsNi41OCwwLDEsMS0xLjYxLTMsNy40Miw3LjQyLDAsMCwxLC4zMS00Ljg0QTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42''@;'; put 'put ''MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJpY3ljbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs''@;'; put 'put ''Ni41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwyOS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYu''@;'; put 'put ''NSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0''@;'; put 'put ''LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEsMCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgs''@;'; put 'put ''MjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4wOCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwx''@;'; put 'put ''LDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywy''@;'; put 'put ''My43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIsMS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1''@;'; put 'put ''LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMtMC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4''@;'; put 'put ''LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwt''@;'; put 'put ''MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSx5LkNsclNoYXBlQm9hdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks''@;'; put 'put ''MjcuNCwyNiwyOC4yYy0xLjEsMS4xLTIuOSwxLjEtNC4xLDBjLTEtMC43LTIuMS0xLjEtMy4zLTEuMWMtMS4yLTAuMS0yLjQsMC4zLTMuMywxLjFcblx0XHRDMTQuNywyOC43LDE0LDI5LDEzLjIsMjlzLTEuNS0wLjMtMi4xLTAuOGMtMS0wLjgtMi4yLTEuMi0zLjQtMS4ycy0yLjQsMC40LTMu''@;'; put 'put ''NCwxLjJDMy43LDI4LjcsMi44LDI5LDIsMjl2MlxuXHRcdGMxLjMsMC4xLDIuNi0wLjMsMy42LTEuMkM2LjIsMjkuMyw3LjEsMjksNy45LDI5YzAuNywwLDEuNSwwLjMsMi4xLDAuOGMxLjgsMS42LDQuNiwxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhcblx0XHRjMC43LDAsMS40''@;'; put 'put ''LDAuMywyLDAuOGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNCwwLjMsMS45LDAuOGMwLjksMC43LDEuOSwxLjEsMywxLjJ2LTJcblx0XHRjLTEsMC0xLjItMC40LTEuNy0wLjhDMzEuNCwyNy41LDMwLjMsMjcuMSwyOS4xLDI3LjF6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyM2MwLTAuNiwwLjUtMSwxLjEtMUgzMmwtMy41LDMuMWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjctMC44LDAuNi0yLjEtMC4yLTIuOFxuXHRcdEMzMywyMC4y''@;'; put 'put ''LDMyLjYsMjAsMzIuMSwyMGgtMjVjLTEuNywwLTMsMS4zLTMsM3YzLjJjMC41LTAuNSwxLjItMC44LDEuOS0xLjFWMjN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOC45LDE5SDE1di03LjhjMC0wLjYtMC4zLTEuMi0wLjgtMS42QzEz''@;'; put 'put ''LjMsOC45LDEyLDkuMSwxMS40LDEwbC00LjEsNS45Yy0wLjQsMC42LTAuNCwxLjQtMC4xLDIuMUM3LjUsMTguNiw4LjIsMTksOC45LDE5XG5cdFx0eiBNMTMuMSwxMS4yTDEzLDE3SDguOUwxMy4xLDExLjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjYsMThjMC40LTAuNiwwLjQtMS40LDAtMkwxOS43LDUuNmMtMC40LTAuNi0xLTEtMS43LTFjLTEuMSwwLTIsMC45LTIsMlYxOWg4LjNDMjUsMTksMjUuNywxOC42LDI2LDE4eiBNMTcuOSw2LjZcblx0XHRsNi40LDEwLjVoLTYuNFY2LjZ6IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzQsMzFjLTEuMS0wLjEtMi4xLTAuNS0zLTEuMmMtMC41LTAuNS0xLjItMC44LTItMC44Yy0wLjcsMC0xLjUsMC4zLTIsMC44Yy0wLjksMC44LTIsMS4xLTMuMSwxLjFjLTEuMiwwLTIuNC0wLjQtMy4zLTEuMVxuXHRjLTEuMi0x''@;'; put 'put ''LjEtMy0xLjEtNC4xLDBjLTAuOSwwLjgtMi4xLDEuMi0zLjQsMS4yYy0xLjIsMC0yLjMtMC40LTMuMi0xLjJjLTAuNi0wLjUtMS4zLTAuOC0yLTAuOGMtMC44LDAtMS43LDAuMy0yLjMsMC44XG5cdGMtMSwwLjgtMi4zLDEuMi0zLjUsMS4xVjI5YzAuOCwwLDEuNy0wLjMsMi4zLTAuOWMxLTAu''@;'; put 'put ''OCwyLjItMS4yLDMuNC0xLjFjMS4yLDAsMi40LDAuNCwzLjMsMS4yYzEuMiwxLjEsMywxLjEsNC4yLDBcblx0YzEuOS0xLjYsNC43LTEuNiw2LjUsMGMxLjIsMS4xLDMsMS4xLDQuMSwwYzAuOS0wLjgsMi4xLTEuMiwzLjMtMS4yYzEuMSwwLDIuMiwwLjQsMywxLjJDMzIuOCwyOC43LDMzLDI5''@;'; put 'put ''LDM0LDI5TDM0LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC4xLDI2LjJjMC42LTAuNSwxLjItMC44LDEuOS0xVjIzYzAtMC42LDAuNC0xLjEsMS0xLjFoMjVMMjguNCwyNWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJs''@;'; put 'put ''MC4yLTAuMlxuXHRjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhDMzIuOSwyMC4xLDMyLjQsMjAsMzIsMjBIN2MtMS43LDAtMywxLjMtMywzTDQuMSwyNi4yTDQuMSwyNi4yeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuOSwxOC45SDguOWMt''@;'; put 'put ''MS4xLDAtMi0wLjktMi0yYzAtMC40LDAuMS0wLjgsMC40LTEuMmw0LjEtNS44YzAuNi0wLjksMS45LTEuMSwyLjgtMC41YzAuNSwwLjQsMC44LDEsMC44LDEuNlYxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuMywxOC45SDE2VjYu''@;'; put 'put ''NGMwLTEuMSwwLjktMiwyLTJjMC43LDAsMS4zLDAuNCwxLjcsMUwyNiwxNS44YzAuNiwxLDAuMiwyLjItMC43LDIuN0MyNSwxOC43LDI0LjYsMTguOCwyNC4zLDE4Ljlcblx0TDI0LjMsMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JykseS5DbHJTaGFw''@;'; put 'put ''ZUNhbXBlcnZhbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHog''@;'; put 'put ''TTkuNSwyOUM4LjcsMjksOCwyOC4zLDgsMjcuNVM4LjcsMjYsOS41LDI2czEuNSwwLjcsMS41LDEuNVMxMC4zLDI5LDkuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMy41LDI0QzIzLjUsMjQsMjMuNSwyNCwyMy41LDI0Yy0x''@;'; put 'put ''LjksMC0zLjUsMS42LTMuNSwzLjVjMCwwLDAsMCwwLDBjMCwxLjksMS41LDMuNSwzLjUsMy41YzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMyNS40LDI0LDIzLjUsMjR6IE0yMy41LDI5Yy0wLjgsMC0xLjUtMC43LTEuNS0xLjVzMC43LTEuNSwxLjUtMS41czEuNSwwLjcsMS41LDEuNVMy''@;'; put 'put ''NC4zLDI5LDIzLjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsMjAuMVYyMGgtMC4xbC0zLjUtNS41QzMxLDEzLjYsMzIsMTIsMzIsMTAuM1Y5LjdDMzIsNy4xLDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00''@;'; put 'put ''LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDNcblx0XHR2MTdoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyNHY5aDcuOFxuXHRcdGwwLjIsMC4zVjI1''@;'; put 'put ''YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMzMsMjAuMXogTTI2LDIwdi01aDEuNWwzLjEsNUgyNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIyLDIyIDIyLDEzIDE1LDEzIDE1LDI4IDE3LDI4IDE3LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBk''@;'; put 'put ''PSJNNiwyMGg3di03SDZWMjB6IE04LDE1aDN2M0g4VjE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNVM3LjYsMzEsOS41LDMxYzAsMCwwLDAsMCwwYzEuOSwwLDMuNS0xLjYsMy41LTMu''@;'; put 'put ''NWMwLDAsMC0wLjEsMC0wLjFDMTMsMjUuNSwxMS40LDI0LDkuNSwyNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMjMuNSIgY3k9IjI3LjUiIHI9IjMuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjkuNSwxNC41QzMxLDEzLjYsMzIsMTIsMzIsMTAuMlY5LjdjMCwwLDAsMCwwLTAuMUMzMiw3LDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDN2MTdcblx0XHRoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5''@;'; put 'put ''LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyN2gtM3Y5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMjkuNSwxNC41eiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjcuOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjEuOSwyMiAyMS45LDEzIDE1LDEz''@;'; put 'put ''IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLHkuQ2xy''@;'; put 'put ''U2hhcGVDYXJhdmFuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAtMi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0y''@;'; put 'put ''LjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41''@;'; put 'put ''SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgz''@;'; put 'put ''djEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0y''@;'; put 'put ''di03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSww''@;'; put 'put ''LjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZo''@;'; put 'put ''OVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUZlcnJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w''@;'; put 'put ''LjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMxLjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRc''@;'; put 'put ''dEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhj''@;'; put 'put ''MC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIz''@;'; put 'put ''LjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMsM2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwx''@;'; put 'put ''LjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1LjhsMS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4xLDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4y''@;'; put 'put ''LTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYsNi42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0w''@;'; put 'put ''LjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0wLjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwy''@;'; put 'put ''NSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMt''@;'; put 'put ''MC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3LjksMTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6''@;'; put 'put ''IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVHJhaWxlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42''@;'; put 'put ''LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy''@;'; put 'put ''ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt''@;'; put 'put ''MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu''@;'; put 'put ''OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs''@;'; put 'put ''MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlT25Ib2xpZGF5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs''@;'; put 'put ''Ni4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQu''@;'; put 'put ''NDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAsMSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4xOUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQu''@;'; put 'put ''NzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4zNy01LjE5LDUuNTNIMTQuNjRsMi43My01LjlI''@;'; put 'put ''OC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwxLjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywx''@;'; put 'put ''LjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYyNS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQs''@;'; put 'put ''OC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAsMCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUz''@;'; put 'put ''LjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4yM0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLHkuVHJhdmVsU2hhcGVzPXt0cnVjazp5LkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6eS5DbHJTaGFwZUFpcnBsYW5lLGNhcjp5LkNsclNoYXBlQ2FyLG1hcDp5LkNsclNoYXBlTWFwLGNvbXBhc3M6eS5DbHJTaGFw''@;'; put 'put ''ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOnkuQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTp5LkNsclNoYXBlQmljeWNsZSxib2F0OnkuQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjp5LkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46eS5DbHJTaGFwZUNhcmF2YW4sZmVycnk6eS5DbHJTaGFwZUZlcnJ5''@;'; put 'put ''LHRyYWlsZXI6eS5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOnkuQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoeS5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKHkuVHJh''@;'; put 'put ''dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAseS5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8oZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj''@;'; put 'put ''L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuY2xySWNvblNWRz12b2lkIDA7eS5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRl''@;'; put 'put ''eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4''@;'; put 'put ''TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz''@;'; put 'put ''NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9''@;'; put 'put ''fX0pfSwzNjA5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTt5LnIoSSkseS5kKEkse2FycmF5QXZnOigpPT5McWUsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+SW0sYXJyYXlGbGF0dGVuOigpPT5tMmUsYXJyYXlNYXA6KCk9PnlzLGFycmF5TWF4OigpPT5JcWUs''@;'; put 'put ''YXJyYXlNaW46KCk9PlJxZSxhcnJheVJlZHVjZTooKT0+cXUsYXJyYXlTdW06KCk9PmcyZSxhcnJheVVuaXF1ZTooKT0+djJlLGV4dGVuZEFycmF5OigpPT5sJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmMkLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PcWUsZ2V0VW5pb25PZkFy''@;'; put 'put ''cmF5czooKT0+UHFlLHBpdm90OigpPT5oRSxzdHJpbmdUb0FycmF5OigpPT51JCx0bzJkQXJyYXk6KCk9PnAyZX0pO3ZhciBfPXt9O3kucihfKSx5LmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5TMmUsaXNEZWZpbmVkOigpPT5QYSxpc0VtcHR5OigpPT5VYyxpc1JlZ0V4cDooKT0+YjJl''@;'; put 'put ''LGlzVW5kZWZpbmVkOigpPT5fYyxzdHJpbmdpZnk6KCk9PmxjfSk7dmFyIGc9e307eS5yKGcpLHkuZChnLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WcWUsaXNQZXJjZW50VmFsdWU6KCk9PmYkLHJhbmRvbVN0cmluZzooKT0+aCQsc2FuaXRpemU6KCk9PklPLHN0cmlwVGFnczooKT0+ZyQsc3Vi''@;'; put 'put ''c3RpdHV0ZTooKT0+cCQsdG9VcHBlckNhc2VGaXJzdDooKT0+cDF9KTt2YXIgQj17fTt5LnIoQikseS5kKEIse0hUTUxfQ0hBUkFDVEVSUzooKT0+TjJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+ZFhlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+TSQsY2xvc2VzdDooKT0+Um0sY2xv''@;'; put 'put ''c2VzdERvd246KCk9PmJFLGVtcHR5OigpPT54cCxmYXN0SW5uZXJIVE1MOigpPT56NyxmYXN0SW5uZXJUZXh0OigpPT5QbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9Pk8yZSxnZXRDYXJldFBvc2l0aW9uOigpPT5TJCxnZXRDc3NUcmFuc2Zvcm06KCk9PmdYZSxnZXRGcmFtZUVsZW1l''@;'; put 'put ''bnQ6KCk9PkwyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+ajJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PkIyZSxnZXRQYXJlbnQ6KCk9PlIyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PkI3LGdldFNjcm9sbExlZnQ6KCk9PnckLGdldFNjcm9sbFRvcDooKT0+T08sZ2V0U2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ6KCk9PnlFLGdldFNjcm9sbGJhcldpZHRoOigpPT5mMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+ejJlLGdldFNlbGVjdGlvblRleHQ6KCk9PmZYZSxnZXRTdHlsZTooKT0+X0UsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PmFfLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PkxP''@;'; put 'put ''LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+XyQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PmNYZSxoYXNDbGFzczooKT0+cG8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+VCQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PkUkLGhhc1plcm9IZWlnaHQ6KCk9PlYyZSxpbmRleDooKT0+''@;'; put 'put ''UDJlLGlubmVySGVpZ2h0OigpPT5vXyxpbm5lcldpZHRoOigpPT5DJCxpc0NoaWxkT2Y6KCk9PkxtLGlzRGV0YWNoZWQ6KCk9PkEkLGlzSFRNTEVsZW1lbnQ6KCk9PkVwLGlzSW5wdXQ6KCk9PlNFLGlzSW50ZXJuYWxFbGVtZW50OigpPT52RSxpc091dHNpZGVJbnB1dDooKT0+Rk8saXNWaXNp''@;'; put 'put ''YmxlOigpPT5VNyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PmskLG1hdGNoZXNDU1NSdWxlczooKT0+dVhlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+VTJlLG9mZnNldDooKT0+VTAsb3V0ZXJIZWlnaHQ6KCk9Pnh1LG91dGVyV2lk''@;'; put 'put ''dGg6KCk9PnN1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9Pk9tLHJlbW92ZUF0dHJpYnV0ZTooKT0+ajcscmVtb3ZlQ2xhc3M6KCk9PmxvLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkQkLHJlbW92ZUV2ZW50OigpPT5oWGUscmVtb3ZlVGV4dE5v''@;'; put 'put ''ZGVzOigpPT55JCxyZXNldENzc1RyYW5zZm9ybTooKT0+Q0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+WjJlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9Pm1YZSxzZXRBdHRyaWJ1dGU6KCk9PnZvLHNldENhcmV0UG9zaXRpb246KCk9PndFLHNldE92ZXJs''@;'; put 'put ''YXlQb3NpdGlvbjooKT0+UE99KTt2YXIgdz17fTt5LnIodykseS5kKHcse2N1cnJ5OigpPT5ZMmUsY3VycnlSaWdodDooKT0+eVhlLGRlYm91bmNlOigpPT5NRSxmYXN0Q2FsbDooKT0+SE8saXNGdW5jdGlvbjooKT0+bWwscGFydGlhbDooKT0+SSQscGlwZTooKT0+YlhlLHRocm90dGxlOigp''@;'; put 'put ''PT5XMmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PnZYZX0pO3ZhciBQPXt9O3kucihQKSx5LmQoUCx7Y2xvbmU6KCk9Pm4zLGNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcjooKT0+RmQsZGVlcENsb25lOigpPT5nMSxkZWVwRXh0ZW5kOigpPT54RSxkZWVwT2JqZWN0U2l6ZTooKT0+Qk8sZGVmaW5l''@;'; put 'put ''R2V0dGVyOigpPT5UcCxkdWNrU2NoZW1hOigpPT5zXyxleHRlbmQ6KCk9PkV1LGdldFByb3BlcnR5OigpPT4kMmUsaGFzT3duUHJvcGVydHk6KCk9PlR1LGluaGVyaXQ6KCk9PkcyZSxpc09iamVjdDooKT0+cW8saXNPYmplY3RFcXVhbDooKT0+Tk8sbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6''@;'; put 'put ''KCk9PlhvLHNldFByb3BlcnR5OigpPT5WT30pO3ZhciBGPXt9O3kucihGKSx5LmQoRix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PlRFLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+cTJlLGlzQ1NSOigpPT5LMmUsaXNUb3VjaFN1cHBvcnRlZDooKT0+UiQscmVxdWVzdEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lOigpPT5FRX0pO3ZhciBPPXt9O3kucihPKSx5LmQoTyx7aXNDaHJvbWU6KCk9PkwkLGlzQ2hyb21lV2ViS2l0OigpPT5RMmUsaXNFZGdlOigpPT50ZmUsaXNFZGdlV2ViS2l0OigpPT5fWGUsaXNGaXJlZm94OigpPT5qTyxpc0ZpcmVmb3hXZWJLaXQ6KCk9PmVmZSxpc0lPUzooKT0+TyQs''@;'; put 'put ''aXNJcGFkT1M6KCk9PlAkLGlzTGludXhPUzooKT0+d1hlLGlzTWFjT1M6KCk9PnpPLGlzTW9iaWxlQnJvd3NlcjooKT0+QXAsaXNTYWZhcmk6KCk9PkFFLGlzV2luZG93c09TOigpPT5GJCxzZXRCcm93c2VyTWV0YTooKT0+WDJlLHNldFBsYXRmb3JtTWV0YTooKT0+SjJlfSk7dmFyIHo9e307''@;'; put 'put ''eS5yKHopLHkuZCh6LHtLRVlfQ09ERVM6KCk9PllhLGlzQ3RybEtleTooKT0+U1hlLGlzQ3RybE1ldGFLZXk6KCk9PnJmZSxpc0Z1bmN0aW9uS2V5OigpPT5IJCxpc0tleTooKT0+dV8saXNQcmludGFibGVDaGFyOigpPT5uZmV9KTt2YXIgTj17fTt5LnIoTikseS5kKE4se2lzSW1tZWRpYXRl''@;'; put 'put ''UHJvcGFnYXRpb25TdG9wcGVkOigpPT5GbSxpc0xlZnRDbGljazooKT0+VU8saXNSaWdodENsaWNrOigpPT5IbSxpc1RvdWNoRXZlbnQ6KCk9PmlmZSxvZmZzZXRSZWxhdGl2ZVRvOigpPT5hZmUsc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5CMn0pO3ZhciBMPXt9O3kucihMKSx5LmQo''@;'; put 'put ''TCx7X2RhdGFUb0hUTUw6KCk9PnEkLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+YmZlLGluc3RhbmNlVG9IVE1MOigpPT5LJH0pO3ZhciBLPXt9O3kucihLKSx5LmQoSyx7Y2xhbXA6KCk9PmtzLGlzTnVtZXJpYzooKT0+bTEsaXNOdW1lcmljTGlrZTooKT0+eWZlLHJhbmdlRWFjaDooKT0+R2Es''@;'; put 'put ''cmFuZ2VFYWNoUmV2ZXJzZTooKT0+WCQsdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT5KJH0pO3ZhciBVPXt9O3kucihVKSx5LmQoVSx7Y291bnRGaXJzdFJvd0tleXM6KCk9PkZLLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5rdHQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5U''@;'; put 'put ''dHQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5BdHQsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5QSyxpc0FycmF5T2ZBcnJheXM6KCk9PkUzZSxpc0FycmF5T2ZPYmplY3RzOigpPT5UM2Usc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+RXR0LHNwcmVhZHNoZWV0Q29sdW1u''@;'; put 'put ''TGFiZWw6KCk9PmhQfSk7dmFyIFc9e307eS5yKFcpLHkuZChXLHtDSEVDS0JPWF9DSEVDS0VEOigpPT5oWCxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PmRYLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+ZlgsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9PmhxLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+bXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+U3EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+YnEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9Pl9xLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT52cSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5DcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PnlxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PndxLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0JPUkRFUlM6KCk9Pk1xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5UcSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PkFxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkVxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf''@;'; put 'put ''VE9QOigpPT54cSxDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9Pm5xLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PnJxLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+b3EsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9H''@;'; put 'put ''Uk9VUF9IRUFERVJTOigpPT5hcSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PmlxLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+c3EsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5mcSxDT05URVhUTUVOVV9JVEVNU19GUkVFWkVfQ09M''@;'; put 'put ''VU1OOigpPT5scSxDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+UnEsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9Pk9xLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5xSyxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PlhLLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX01FUkdFX0NFTExTOigpPT51cSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PklxLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+RHEsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9PkdLLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+X1AsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmdxLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PnRxLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT5rcSxDT05URVhUTUVOVV9JVEVNU19S''@;'; put 'put ''RU1PVkVfQ09MVU1OOigpPT5RSyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+SkssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT4kSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PktL''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5McSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+UHEsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+ZXEsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5jcSxDT05URVhUTUVOVV9JVEVNU19VTk1F''@;'; put 'put ''UkdFX0NFTExTOigpPT5kcSxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5WM2UsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+c1gsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5hWCxGSUxURVJTX0JVVFRPTlNfT0s6KCk9Pm9YLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF''@;'; put 'put ''Ul9TRUFSQ0g6KCk9PmxYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PnVYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+Y1gsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PmlYLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjoo''@;'; put 'put ''KT0+cXEsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+WHEsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5CcSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+JHEsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5zbnQsRklMVEVSU19DT05ESVRJT05T''@;'; put 'put ''X0NPTlRBSU5TOigpPT56cSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PkZxLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmpxLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+TnEsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+WnEsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+V3EsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+WXEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+R3EsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+V2MsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX05PTkU6KCk9PndQLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+S3EsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5VcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5IcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMOigp''@;'; put 'put ''PT5WcSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9PkpxLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+UXEsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+ZVgsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PnRYLEZJTFRFUlNfRElWU19GSUxU''@;'; put 'put ''RVJfQllfVkFMVUU6KCk9Pm5YLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5yWCxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+Q1AsRklMVEVSU19OQU1FU1BBQ0U6KCk9PnExLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5TUH0pO3ZhciBZPXt9O2Z1bmN0aW9u''@;'; put 'put ''IHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksRD1NLnZhbHVlfWNhdGNoKFope3JldHVybiB2b2lkIGEoWil9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1l''@;'; put 'put ''bnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe3EoZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe3EoZixkLGgsdixNLCJ0aHJvdyIsRCl9dih2b2lkIDApfSl9fXkucihZKSx5LmQoWSx7Z2V0Tm9ybWFs''@;'; put 'put ''aXplZERhdGU6KCk9PnY0ZX0pO2xldCBuZT1udWxsLGxlPTE7Y29uc3QgbWU9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlvbiBfZShjKXtjb25zdCBsPW5lO3JldHVybiBuZT1jLGx9ZnVuY3Rpb24geChjKXtpZigoIXNlKGMpfHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2gh''@;'; put 'put ''PT1sZSkpe2lmKCFjLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShjKSYmIW0oYykpcmV0dXJuIGMuZGlydHk9ITEsdm9pZChjLmxhc3RDbGVhbkVwb2NoPWxlKTtjLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUoYyksYy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPWxlfX1mdW5jdGlvbiBtKGMpe3dl''@;'; put 'put ''KGMpO2ZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKyl7Y29uc3QgYT1jLnByb2R1Y2VyTm9kZVtsXSxkPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF07aWYoZCE9PWEudmVyc2lvbnx8KHgoYSksZCE9PWEudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rp''@;'; put 'put ''b24gdGUoYyxsKXtpZihmdW5jdGlvbiBVZShjKXtjLmxpdmVDb25zdW1lck5vZGU/Pz1bXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzPz89W119KGMpLHdlKGMpLDE9PT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyl0''@;'; put 'put ''ZShjLnByb2R1Y2VyTm9kZVtkXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbZF0pO2NvbnN0IGE9Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0xO2lmKGMubGl2ZUNvbnN1bWVyTm9kZVtsXT1jLmxpdmVDb25zdW1lck5vZGVbYV0sYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpc1tsXT1jLmxpdmVD''@;'; put 'put ''b25zdW1lckluZGV4T2ZUaGlzW2FdLGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgtLSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aC0tLGw8Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCl7Y29uc3QgZD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdLGg9Yy5saXZlQ29uc3Vt''@;'; put 'put ''ZXJOb2RlW2xdO3dlKGgpLGgucHJvZHVjZXJJbmRleE9mVGhpc1tkXT1sfX1mdW5jdGlvbiBzZShjKXtyZXR1cm4gYy5jb25zdW1lcklzQWx3YXlzTGl2ZXx8KGM/LmxpdmVDb25zdW1lck5vZGU/Lmxlbmd0aD8/MCk+MH1mdW5jdGlvbiB3ZShjKXtjLnByb2R1Y2VyTm9kZT8/PVtdLGMucHJv''@;'; put 'put ''ZHVjZXJJbmRleE9mVGhpcz8/PVtdLGMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24/Pz1bXX1sZXQgRGU9bnVsbDtmdW5jdGlvbiAkZShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiB0dChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVy''@;'; put 'put ''cm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfWNvbnN0IEhlPXR0KGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1''@;'; put 'put ''cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiB1dChjLGwpe2lmKGMpe2NvbnN0''@;'; put 'put ''IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNsYXNzIHF0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYo''@;'; put 'put ''IXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFs''@;'; put 'put ''VGVhcmRvd246ZH09dGhpcztpZigkZShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIEhlP2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXtjaShmKX1jYXRjaCh2KXts''@;'; put 'put ''PWw/P1tdLHYgaW5zdGFuY2VvZiBIZT9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IEhlKGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpY2kobCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgcXQpe2lmKGwuY2xvc2VkfHxs''@;'; put 'put ''Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9''@;'; put 'put ''PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFn''@;'; put 'put ''ZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJnV0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmdXQoYSxsKSxsIGluc3RhbmNlb2YgcXQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19cXQuRU1QVFk9KCgpPT57''@;'; put 'put ''Y29uc3QgYz1uZXcgcXQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IFJ0PXF0LkVNUFRZO2Z1bmN0aW9uIFB0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgcXR8fGMmJiJjbG9zZWQiaW4gYyYmJGUoYy5yZW1vdmUpJiYkZShjLmFkZCkmJiRlKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9u''@;'; put 'put ''IGNpKGMpeyRlKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgUXQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0''@;'; put 'put ''Q29udGV4dDohMX0sc249e3NldFRpbWVvdXQoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PXNuO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1zbjtyZXR1''@;'; put 'put ''cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFJpKGMpe3NuLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PVF0O2lmKCFsKXRocm93IGM7bChjKX0pfWZ1bmN0aW9uIGhuKCl7fWNvbnN0IGZ0PUF0''@;'; put 'put ''KCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBBdChjLGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBSbj1udWxsO2Z1bmN0aW9uIHN0KGMpe2lmKFF0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IVJuO2lmKGwmJihSbj17''@;'; put 'put ''ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PVJuO2lmKFJuPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyByaSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhp''@;'; put 'put ''cy5kZXN0aW5hdGlvbj1sLFB0KGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj16dH1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IGh0KGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIFd0KGMpe3JldHVybiBBdCgiTiIsYyx2b2lkIDApfShs''@;'; put 'put ''KSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIE9yKGMpe3JldHVybiBBdCgiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/cm4oZnQs''@;'; put 'put ''dGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwp''@;'; put 'put ''fV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IFdlPUZ1bmN0aW9uLnByb3Rv''@;'; put 'put ''dHlwZS5iaW5kO2Z1bmN0aW9uIFR0KGMsbCl7cmV0dXJuIFdlLmNhbGwoYyxsKX1jbGFzcyBucntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7''@;'; put 'put ''eHQoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7eHQoZCl9ZWxzZSB4dChsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxl''@;'; put 'put ''dGUoKX1jYXRjaChhKXt4dChhKX19fWNsYXNzIGh0IGV4dGVuZHMgcml7Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksJGUobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmUXQudXNl''@;'; put 'put ''RGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZUdChsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmVHQobC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZUdChsLmNv''@;'; put 'put ''bXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IG5yKGgpfX1mdW5jdGlvbiB4dChjKXtRdC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFV0KGMpe1F0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJlJuJiYoUm4u''@;'; put 'put ''ZXJyb3JUaHJvd249ITAsUm4uZXJyb3I9Yyl9KGMpOlJpKGMpfWZ1bmN0aW9uIHJuKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PVF0O2EmJnNuLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgenQ9e2Nsb3NlZDohMCxuZXh0OmhuLGVycm9yOmZ1bmN0aW9uIGpuKGMp''@;'; put 'put ''e3Rocm93IGN9LGNvbXBsZXRlOmhufSxoaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gY24oYyl7cmV0dXJuIGN9ZnVuY3Rpb24gSWkoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9jbjoxPT09Yy5sZW5ndGg/Y1sw''@;'; put 'put ''XTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBYdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1''@;'; put 'put ''YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBFaShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHJpfHxmdW5jdGlvbiB1YShjKXtyZXR1cm4gYyYmJGUoYy5uZXh0KSYmJGUoYy5lcnJvcikmJiRlKGMuY29tcGxldGUpfShjKSYmUHQoYyl9KGEpP2E6bmV3IGh0KGEsZCxoKTtyZXR1''@;'; put 'put ''cm4gc3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChk''@;'; put 'put ''KXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhkPWVuKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IGh0KHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChEKXtmKEQpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1''@;'; put 'put ''YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W2hpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIElpKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9ZW4oYSkpKChk''@;'; put 'put ''LGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiBlbihjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/P1F0LlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1j''@;'; put 'put ''b25zdCB2cj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBXbj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMu''@;'; put 'put ''Y2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgJGkodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1h''@;'; put 'put ''LGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgdnJ9bmV4dChhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRo''@;'; put 'put ''aXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJv''@;'; put 'put ''d25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJz''@;'; put 'put ''OmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVs''@;'; put 'put ''bD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgp''@;'; put 'put ''LHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/UnQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxs''@;'; put 'put ''LGYucHVzaChhKSxuZXcgcXQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx1dChmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgp''@;'; put 'put ''fWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IFh0O3JldHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3ICRpKGwsYSksY30pKCk7Y2xhc3MgJGkgZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMu''@;'; put 'put ''c291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0''@;'; put 'put ''aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxs''@;'; put 'put ''KGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOlJ0fX1jbGFzcyBlaSBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhp''@;'; put 'put ''cy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJv''@;'; put 'put ''cjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBRcihjKXtyZXR1cm4gJGUoYz8ubGlmdCl9ZnVuY3Rpb24gVmkoYyl7cmV0dXJuIGw9PntpZihRcihs''@;'; put 'put ''KSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTmkoYyxsLGEsZCxoKXtyZXR1''@;'; put 'put ''cm4gbmV3IERhKGMsbCxhLGQsaCl9Y2xhc3MgRGEgZXh0ZW5kcyByaXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChEKXtsLmVy''@;'; put 'put ''cm9yKEQpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChEKXtsLmVycm9yKEQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wu''@;'; put 'put ''ZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmli''@;'; put 'put ''ZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBMcihjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBw''@;'; put 'put ''YT0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3MgUW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGZ1bmN0aW9uIGxhKGMsbCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMoYyl9JHtsPyI6ICIrbDoiIn1gfShsLGEpKSx0aGlzLmNvZGU9bH19ZnVuY3Rpb24g''@;'; put 'put ''TnMoYyl7cmV0dXJue3RvU3RyaW5nOmN9LnRvU3RyaW5nKCl9Y29uc3QgcHU9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiB4YShjLGwsYSl7cmV0dXJuIE5zKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBpcihjKXtyZXR1cm4gZnVuY3Rpb24oLi4uYSl7aWYoYyl7Y29uc3QgZD1jKC4uLmEpO2Zv''@;'; put 'put ''cihjb25zdCBoIGluIGQpdGhpc1toXT1kW2hdfX19KGwpO2Z1bmN0aW9uIGgoLi4uZil7aWYodGhpcyBpbnN0YW5jZW9mIGgpcmV0dXJuIGQuYXBwbHkodGhpcyxmKSx0aGlzO2NvbnN0IHY9bmV3IGgoLi4uZik7cmV0dXJuIE0uYW5ub3RhdGlvbj12LE07ZnVuY3Rpb24gTShELFoscmUpe2Nv''@;'; put 'put ''bnN0IGNlPUQuaGFzT3duUHJvcGVydHkocHUpP0RbcHVdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShELHB1LHt2YWx1ZTpbXX0pW3B1XTtmb3IoO2NlLmxlbmd0aDw9cmU7KWNlLnB1c2gobnVsbCk7cmV0dXJuKGNlW3JlXT1jZVtyZV18fFtdKS5wdXNoKHYpLER9fXJldHVybiBhJiYoaC5wcm90''@;'; put 'put ''b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IFZ0PWdsb2JhbFRoaXM7ZnVuY3Rpb24gSGEoYyl7Zm9yKGxldCBsIGluIGMpaWYoY1tsXT09PUhhKXJldHVybiBsO3Rocm93IEVy''@;'; put 'put ''cm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gTHUoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiBQcihjKXtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm4iWyIrYy5tYXAoUHIpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PWMpcmV0dXJuIiIrYztpZihjLm92ZXJyaWRkZW5OYW1lKXJldHVybmAke2Mub3ZlcnJpZGRlbk5hbWV9YDtpZihjLm5hbWUpcmV0''@;'; put 'put ''dXJuYCR7Yy5uYW1lfWA7Y29uc3QgbD1jLnRvU3RyaW5nKCk7aWYobnVsbD09bClyZXR1cm4iIitsO2NvbnN0IGE9bC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09YT9sOmwuc3Vic3RyaW5nKDAsYSl9ZnVuY3Rpb24gb2QoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jP251bGw9PT1sPyIi''@;'; put 'put ''Omw6bnVsbD09bHx8IiI9PT1sP2M6YysiICIrbH1jb25zdCBjZj1IYSh7X19mb3J3YXJkX3JlZl9fOkhhfSk7ZnVuY3Rpb24gQ3MoYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPUNzLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUHIodGhpcygpKX0sY31mdW5jdGlvbiBZaShjKXty''@;'; put 'put ''ZXR1cm4geWwoYyk/YygpOmN9ZnVuY3Rpb24geWwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkoY2YpJiZjLl9fZm9yd2FyZF9yZWZfXz09PUNzfWZ1bmN0aW9uIGFuKGMpe3JldHVybnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElu''@;'; put 'put ''fHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gQXIoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBQbyhjKXtyZXR1cm4gb2woYyxTcyl8fG9sKGMsSG8pfWZ1bmN0aW9uIG9sKGMs''@;'; put 'put ''bCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpudWxsfWZ1bmN0aW9uIFZzKGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eShqbCl8fGMuaGFzT3duUHJvcGVydHkoa28pKT9jW2psXTpudWxsfWNvbnN0IFNzPUhhKHtcdTAyNzVwcm92OkhhfSksamw9SGEoe1x1MDI3NWlu''@;'; put 'put ''ajpIYX0pLEhvPUhhKHtuZ0luamVjdGFibGVEZWY6SGF9KSxrbz1IYSh7bmdJbmplY3RvckRlZjpIYX0pO2NsYXNzIFN0e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZGVzYz1sLHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgYT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46dGhpcyxwcm92aWRlZEluOmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3Ry''@;'; put 'put ''aW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBWYShjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25zdCAkbz1IYSh7XHUwMjc1Y21wOkhhfSksWGw9SGEoe1x1MDI3NWRpcjpIYX0pLHRvPUhhKHtcdTAyNzVwaXBlOkhhfSksX289''@;'; put 'put ''SGEoe1x1MDI3NW1vZDpIYX0pLGppPUhhKHtcdTAyNzVmYWM6SGF9KSxQYz1IYSh7X19OR19FTEVNRU5UX0lEX186SGF9KSx6bD1IYSh7X19OR19FTlZfSURfXzpIYX0pO2Z1bmN0aW9uIENhKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0''@;'; put 'put ''aW9uIE1zKGMsbCl7dGhyb3cgbmV3IFFuKC0yMDEsITEpfXZhciByYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRlZmF1bHQ9MF09IkRlZmF1bHQiLGNbYy5Ib3N0PTFdPSJIb3N0IixjW2MuU2VsZj0yXT0iU2VsZiIsY1tjLlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsY1tjLk9wdGlvbmFsPThd''@;'; put 'put ''PSJPcHRpb25hbCIsY30ocmF8fHt9KTtsZXQgb287ZnVuY3Rpb24gYTUoKXtyZXR1cm4gb299ZnVuY3Rpb24gX2woYyl7Y29uc3QgbD1vbztyZXR1cm4gb289YyxsfWZ1bmN0aW9uIHRoKGMsbCxhKXtjb25zdCBkPVBvKGMpO3JldHVybiBkJiYicm9vdCI9PWQucHJvdmlkZWRJbj92b2lkIDA9''@;'; put 'put ''PT1kLnZhbHVlP2QudmFsdWU9ZC5mYWN0b3J5KCk6ZC52YWx1ZTphJnJhLk9wdGlvbmFsP251bGw6dm9pZCAwIT09bD9sOnZvaWQgTXMoKX1jb25zdCBLMD17fSxndT0iX19OR19ESV9GTEFHX18iLEZjPSJuZ1RlbXBUb2tlblBhdGgiLFJ3PS9cbi9nbSxzbD0iX19zb3VyY2UiO2xldCBJMztm''@;'; put 'put ''dW5jdGlvbiBuaChjKXtjb25zdCBsPUkzO3JldHVybiBJMz1jLGx9ZnVuY3Rpb24gRDEoYyxsPXJhLkRlZmF1bHQpe2lmKHZvaWQgMD09PUkzKXRocm93IG5ldyBRbigtMjAzLCExKTtyZXR1cm4gbnVsbD09PUkzP3RoKGMsdm9pZCAwLGwpOkkzLmdldChjLGwmcmEuT3B0aW9uYWw/bnVsbDp2''@;'; put 'put ''b2lkIDAsbCl9ZnVuY3Rpb24geHIoYyxsPXJhLkRlZmF1bHQpe3JldHVybihhNSgpfHxEMSkoWWkoYyksbCl9ZnVuY3Rpb24gZmkoYyxsPXJhLkRlZmF1bHQpe3JldHVybiB4cihjLG81KGwpKX1mdW5jdGlvbiBvNShjKXtyZXR1cm4gdHlwZW9mIGM+InUifHwibnVtYmVyIj09dHlwZW9mIGM/''@;'; put 'put ''YzooYy5vcHRpb25hbCYmOCl8KGMuaG9zdCYmMSl8KGMuc2VsZiYmMil8KGMuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIHM1KGMpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9WWkoY1thXSk7aWYoQXJyYXkuaXNBcnJheShkKSl7aWYoMD09PWQubGVuZ3Ro''@;'; put 'put ''KXRocm93IG5ldyBRbig5MDAsITEpO2xldCBoLGY9cmEuRGVmYXVsdDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7Y29uc3QgTT1kW3ZdLEQ9cGYoTSk7Im51bWJlciI9PXR5cGVvZiBEPy0xPT09RD9oPU0udG9rZW46Znw9RDpoPU19bC5wdXNoKHhyKGgsZikpfWVsc2UgbC5wdXNoKHhy''@;'; put 'put ''KGQpKX1yZXR1cm4gbH1mdW5jdGlvbiB0MChjLGwpe3JldHVybiBjW2d1XT1sLGMucHJvdG90eXBlW2d1XT1sLGN9ZnVuY3Rpb24gcGYoYyl7cmV0dXJuIGNbZ3VdfWNvbnN0IGM1PXQwKHhhKCJJbmplY3QiLGM9Pih7dG9rZW46Y30pKSwtMSksSTE9dDAoeGEoIk9wdGlvbmFsIiksOCksbGQ9''@;'; put 'put ''dDAoeGEoIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gbXUoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShqaSk/Y1tqaV06bnVsbH1mdW5jdGlvbiBSMyhjLGwpe2MuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP1IzKGEsbCk6bChhKSl9ZnVuY3Rpb24gUGwoYyxsLGEpe2w+PWMubGVu''@;'; put 'put ''Z3RoP2MucHVzaChhKTpjLnNwbGljZShsLDAsYSl9ZnVuY3Rpb24gT3UoYyxsKXtyZXR1cm4gbD49Yy5sZW5ndGgtMT9jLnBvcCgpOmMuc3BsaWNlKGwsMSlbMF19ZnVuY3Rpb24gXzAoYyxsLGEpe2xldCBkPWUyKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRdPWE6KGQ9fmQsZnVuY3Rpb24gZHYo''@;'; put 'put ''YyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1tsKzFdPWR9fShjLGQsbCxhKSksZH1m''@;'; put 'put ''dW5jdGlvbiBBNihjLGwpe2NvbnN0IGE9ZTIoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gZTIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUjEoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyhoLWQ+PjEpLHY9Y1tmPDxhXTtpZihs''@;'; put 'put ''PT09dilyZXR1cm4gZjw8YTt2Pmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCBJMD17fSx0cz1bXSx0Mj1uZXcgU3QoIiIpLEwzPW5ldyBTdCgiIiwtMSksazY9bmV3IFN0KCIiKTtjbGFzcyB1NXtnZXQobCxhPUswKXtpZihhPT09SzApe2NvbnN0IGQ9bmV3IEVycm9y''@;'; put 'put ''KGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7UHIobCl9IWApO3Rocm93IGQubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGR9cmV0dXJuIGF9fXZhciBPMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVs''@;'; put 'put ''dCIsY30oTzN8fHt9KSxKcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsY1tjLk5vbmU9Ml09Ik5vbmUiLGNbYy5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsY30oSnN8fHt9KSxObj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNb''@;'; put 'put ''Yy5TaWduYWxCYXNlZD0xXT0iU2lnbmFsQmFzZWQiLGNbYy5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybT0yXT0iSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0iLGN9KE5ufHx7fSk7ZnVuY3Rpb24gRncoYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2Yo''@;'; put 'put ''bCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWZ1bmN0aW9uIG00KGMsbCxhKXtsZXQgZD0wO2Zvcig7ZDxhLmxlbmd0''@;'; put 'put ''aDspe2NvbnN0IGg9YVtkXTtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKDAhPT1oKWJyZWFrO2QrKztjb25zdCBmPWFbZCsrXSx2PWFbZCsrXSxNPWFbZCsrXTtjLnNldEF0dHJpYnV0ZShsLHYsTSxmKX1lbHNle2NvbnN0IGY9aCx2PWFbKytkXTtoNShmKT9jLnNldFByb3BlcnR5KGwsZix2''@;'; put 'put ''KTpjLnNldEF0dHJpYnV0ZShsLGYsdiksZCsrfX1yZXR1cm4gZH1mdW5jdGlvbiBkNShjKXtyZXR1cm4gMz09PWN8fDQ9PT1jfHw2PT09Y31mdW5jdGlvbiBoNShjKXtyZXR1cm4gNjQ9PT1jLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gdmYoYyxsKXtpZihudWxsIT09bCYmMCE9PWwubGVuZ3Ro''@;'; put 'put ''KWlmKG51bGw9PT1jfHwwPT09Yy5sZW5ndGgpYz1sLnNsaWNlKCk7ZWxzZXtsZXQgYT0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3QgaD1sW2RdOyJudW1iZXIiPT10eXBlb2YgaD9hPWg6MD09PWF8fEQ2KGMsYSxoLG51bGwsLTE9PT1hfHwyPT09YT9sWysrZF06bnVsbCl9''@;'; put 'put ''fXJldHVybiBjfWZ1bmN0aW9uIEQ2KGMsbCxhLGQsaCl7bGV0IGY9MCx2PWMubGVuZ3RoO2lmKC0xPT09bCl2PS0xO2Vsc2UgZm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2YrK107aWYoIm51bWJlciI9PXR5cGVvZiBNKXtpZihNPT09bCl7dj0tMTticmVha31pZihNPmwpe3Y9Zi0xO2Jy''@;'; put 'put ''ZWFrfX19Zm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2ZdO2lmKCJudW1iZXIiPT10eXBlb2YgTSlicmVhaztpZihNPT09YSl7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbCE9PWgmJihjW2YrMV09aCkpO2lmKGQ9PT1jW2YrMV0pcmV0dXJuIHZvaWQoY1tmKzJdPWgpfWYrKyxudWxs''@;'; put 'put ''IT09ZCYmZisrLG51bGwhPT1oJiZmKyt9LTEhPT12JiYoYy5zcGxpY2UodiwwLGwpLGY9disxKSxjLnNwbGljZShmKyssMCxhKSxudWxsIT09ZCYmYy5zcGxpY2UoZisrLDAsZCksbnVsbCE9PWgmJmMuc3BsaWNlKGYrKywwLGgpfWNvbnN0IGh2PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gSTYo''@;'; put 'put ''YyxsLGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PUZ3KGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZih2NChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhP''@;'; put 'put ''ZigxLGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdjQoYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1odn1mdW5jdGlvbiByMChj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOmh2KX1mdW5jdGlvbiBIdyhjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBwdihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihkNShjW2xdKSlyZXR1cm4gbDtyZXR1''@;'; put 'put ''cm4gYy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiFyMChjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihNYyhk''@;'; put 'put ''KSlyZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFJNihjLGgsRCxhKSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBaPWxbKytNXSxyZT1QMyhELGgsdjQoYyksYSk7aWYoLTE9PT1yZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1p''@;'; put 'put ''ZigiIiE9PVope2xldCBjZTtpZihjZT1yZT5mPyIiOmhbcmUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlohPT1jZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhTWMoZCkmJiFNYyhEKSlyZXR1cm4hMTtpZih2JiZNYyhEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJl''@;'; put 'put ''dHVybiBNYyhkKXx8dn1mdW5jdGlvbiBNYyhjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gUDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9''@;'; put 'put ''PT12fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gZ3YoYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBiNChjLGwsYT0hMSl7Zm9y''@;'; put 'put ''KGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoSHcoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE53KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7''@;'; put 'put ''aCsrKWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIG12KGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBWdyhjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2''@;'; put 'put ''PWNbYV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhTWModikmJihsKz1tdihmLGgpLGg9IiIpLGQ9''@;'; put 'put ''dixmPWZ8fCFNYyhkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9bXYoZixoKSksbH1mdW5jdGlvbiBWcihjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPVI2KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVs''@;'; put 'put ''bCxuZ0NvbnRlbnRTZWxlY3RvcnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09TzMuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0''@;'; put 'put ''YW5kYWxvbmVJbmplY3RvcjpudWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fEpzLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8dHMsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGws''@;'; put 'put ''aWQ6IiJ9O1IwKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1wNShkLCExKSxhLnBpcGVEZWZzPXA1KGQsITApLGEuaWQ9ZnVuY3Rpb24gancoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RW''@;'; put 'put ''YXJzLGMuaG9zdEF0dHJzLGMuY29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFt''@;'; put 'put ''ZXMoYy50eXBlLnByb3RvdHlwZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKXwwO3JldHVybiBsKz0yMTQ3NDgzNjQ4LCJjIitsfShhKSxhfSl9ZnVuY3Rpb24gYmYo''@;'; put 'put ''Yyl7cmV0dXJuIFZvKGMpfHx4YyhjKX1mdW5jdGlvbiBmNShjKXtyZXR1cm4gbnVsbCE9PWN9ZnVuY3Rpb24ga2koYyl7cmV0dXJuIE5zKCgpPT4oe3R5cGU6Yy50eXBlLGJvb3RzdHJhcDpjLmJvb3RzdHJhcHx8dHMsZGVjbGFyYXRpb25zOmMuZGVjbGFyYXRpb25zfHx0cyxpbXBvcnRzOmMu''@;'; put 'put ''aW1wb3J0c3x8dHMsZXhwb3J0czpjLmV4cG9ydHN8fHRzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsaWQ6Yy5pZHx8bnVsbH0pKX1mdW5jdGlvbiB5NChjLGwpe2lmKG51bGw9PWMpcmV0dXJuIEkwO2NvbnN0IGE9e307Zm9yKGNvbnN0IGQg''@;'; put 'put ''aW4gYylpZihjLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWNbZF07bGV0IGYsdixNPU5uLk5vbmU7QXJyYXkuaXNBcnJheShoKT8oTT1oWzBdLGY9aFsxXSx2PWhbMl0/P2YpOihmPWgsdj1oKSxsPyhhW2ZdPU0hPT1Obi5Ob25lP1tkLE1dOmQsbFtmXT12KTphW2ZdPWR9cmV0dXJuIGF9''@;'; put 'put ''ZnVuY3Rpb24gRXIoYyl7cmV0dXJuIE5zKCgpPT57Y29uc3QgbD1SNihjKTtyZXR1cm4gUjAobCksbH0pfWZ1bmN0aW9uIGxsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOiEwPT09Yy5zdGFuZGFsb25l''@;'; put 'put ''LG9uRGVzdHJveTpjLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBWbyhjKXtyZXR1cm4gY1skb118fG51bGx9ZnVuY3Rpb24geGMoYyl7cmV0dXJuIGNbWGxdfHxudWxsfWZ1bmN0aW9uIGV1KGMpe3JldHVybiBjW3RvXXx8bnVsbH1mdW5jdGlvbiBQdShjLGwp''@;'; put 'put ''e2NvbnN0IGE9Y1tfb118fG51bGw7aWYoIWEmJiEwPT09bCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtQcihjKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gYX1mdW5jdGlvbiBSNihjKXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRl''@;'; put 'put ''cnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0''@;'; put 'put ''czpsLGlucHV0VHJhbnNmb3JtczpudWxsLGlucHV0Q29uZmlnOmMuaW5wdXRzfHxJMCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsc2lnbmFsczohMD09PWMuc2lnbmFscyxzZWxlY3RvcnM6Yy5zZWxlY3RvcnN8fHRzLHZpZXdRdWVyeTpj''@;'; put 'put ''LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpjLmZlYXR1cmVzfHxudWxsLHNldElucHV0Om51bGwsZmluZEhvc3REaXJlY3RpdmVEZWZzOm51bGwsaG9zdERpcmVjdGl2ZXM6bnVsbCxpbnB1dHM6eTQoYy5pbnB1dHMsbCksb3V0cHV0czp5NChjLm91dHB1dHMpLGRlYnVnSW5mbzpudWxsfX1m''@;'; put 'put ''dW5jdGlvbiBSMChjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9PmwoYykpfWZ1bmN0aW9uIHA1KGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP2V1OmJmO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIoZjUpfWZ1bmN0aW9u''@;'; put 'put ''IHp3KC4uLmMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6cmgoMCxjKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIHJoKGMsLi4ubCl7Y29uc3QgYT1bXSxkPW5ldyBTZXQ7bGV0IGg7Y29uc3QgZj12PT57YS5wdXNoKHYpfTtyZXR1cm4gUjMobCx2PT57Y29uc3QgTT12O180KE0s''@;'; put 'put ''ZixbXSxkKSYmKGh8fD1bXSxoLnB1c2goTSkpfSksdm9pZCAwIT09aCYmYnYoaCxmKSxhfWZ1bmN0aW9uIGJ2KGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0e25nTW9kdWxlOmQscHJvdmlkZXJzOmh9PWNbYV07TDYoaCxmPT57bChmLGQpfSl9fWZ1bmN0aW9uIF80KGMs''@;'; put 'put ''bCxhLGQpe2lmKCEoYz1ZaShjKSkpcmV0dXJuITE7bGV0IGg9bnVsbCxmPVZzKGMpO2NvbnN0IHY9IWYmJlZvKGMpO2lmKGZ8fHYpe2lmKHYmJiF2LnN0YW5kYWxvbmUpcmV0dXJuITE7aD1jfWVsc2V7Y29uc3QgRD1jLm5nTW9kdWxlO2lmKGY9VnMoRCksIWYpcmV0dXJuITE7aD1EfWNvbnN0''@;'; put 'put ''IE09ZC5oYXMoaCk7aWYodil7aWYoTSlyZXR1cm4hMTtpZihkLmFkZChoKSx2LmRlcGVuZGVuY2llcyl7Y29uc3QgRD0iZnVuY3Rpb24iPT10eXBlb2Ygdi5kZXBlbmRlbmNpZXM/di5kZXBlbmRlbmNpZXMoKTp2LmRlcGVuZGVuY2llcztmb3IoY29uc3QgWiBvZiBEKV80KFosbCxhLGQpfX1l''@;'; put 'put ''bHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFNKXtsZXQgWjtkLmFkZChoKTt0cnl7UjMoZi5pbXBvcnRzLHJlPT57XzQocmUsbCxhLGQpJiYoWnx8PVtdLFoucHVzaChyZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09WiYmYnYoWixsKX1pZighTSl7Y29uc3QgWj1tdSho''@;'; put 'put ''KXx8KCgpPT5uZXcgaCk7bCh7cHJvdmlkZTpoLHVzZUZhY3Rvcnk6WixkZXBzOnRzfSxoKSxsKHtwcm92aWRlOms2LHVzZVZhbHVlOmgsbXVsdGk6ITB9LGgpLGwoe3Byb3ZpZGU6dDIsdXNlVmFsdWU6KCk9PnhyKGgpLG11bHRpOiEwfSxoKX1jb25zdCBEPWYucHJvdmlkZXJzO2lmKG51bGwh''@;'; put 'put ''PUQmJiFNKXtjb25zdCBaPWM7TDYoRCxyZT0+e2wocmUsWil9KX19fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gTDYoYyxsKXtmb3IobGV0IGEgb2YgYylWYShhKSYmKGE9YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/TDYoYSxsKTpsKGEp''@;'; put 'put ''fWNvbnN0IFV3PUhhKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpIYX0pO2Z1bmN0aW9uIE82KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZVdyBpbiBjfWZ1bmN0aW9uIF9mKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IEY2PW5ldyBTdCgiIiks''@;'; put 'put ''RjM9e30sWnc9e307bGV0IEg2O2Z1bmN0aW9uIEgzKCl7cmV0dXJuIHZvaWQgMD09PUg2JiYoSDY9bmV3IHU1KSxINn1jbGFzcyBoY3t9Y2xhc3MgY2QgZXh0ZW5kcyBoY3tnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1jb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigp''@;'; put 'put ''LHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuX25nT25EZXN0cm95SG9va3M9bmV3IFNldCx0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsbTUobCx2PT50aGlzLnByb2Nlc3NQcm92aWRl''@;'; put 'put ''cih2KSksdGhpcy5yZWNvcmRzLnNldChMMyxOMyh2b2lkIDAsdGhpcykpLGguaGFzKCJlbnZpcm9ubWVudCIpJiZ0aGlzLnJlY29yZHMuc2V0KGhjLE4zKHZvaWQgMCx0aGlzKSk7Y29uc3QgZj10aGlzLnJlY29yZHMuZ2V0KEY2KTtudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGYudmFsdWUm''@;'; put 'put ''JnRoaXMuc2NvcGVzLmFkZChmLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChrNix0cyxyYS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25z''@;'; put 'put ''dCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJv''@;'; put 'put ''eUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGwpLCgpPT50aGlzLnJlbW92ZU9uRGVzdHJveShsKX1ydW5JbkNvbnRl''@;'; put 'put ''eHQobCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e25oKGEpLF9sKGQpfX1nZXQobCxhPUswLGQ9cmEuRGVmYXVsdCl7aWYodGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSxsLmhhc093blByb3Bl''@;'; put 'put ''cnR5KHpsKSlyZXR1cm4gbFt6bF0odGhpcyk7ZD1vNShkKTtjb25zdCBmPW5oKHRoaXMpLHY9X2wodm9pZCAwKTt0cnl7aWYoIShkJnJhLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25zdCBaPWZ1bmN0aW9uIFl3KGMpe3JldHVybiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBTdH0obCkmJlBvKGwpO0Q9WiYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShaKT9OMyhnNShsKSxGMyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGwsRCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRy''@;'; put 'put ''YXRlKGwsRCl9cmV0dXJuKGQmcmEuU2VsZj9IMygpOnRoaXMucGFyZW50KS5nZXQobCxhPWQmcmEuT3B0aW9uYWwmJmE9PT1LMD9udWxsOmEpfWNhdGNoKE0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1NLm5hbWUpe2lmKChNW0ZjXT1NW0ZjXXx8W10pLnVuc2hpZnQoUHIobCkpLGYpdGhy''@;'; put 'put ''b3cgTTtyZXR1cm4gZnVuY3Rpb24gbDUoYyxsLGEsZCl7Y29uc3QgaD1jW0ZjXTt0aHJvdyBsW3NsXSYmaC51bnNoaWZ0KGxbc2xdKSxjLm1lc3NhZ2U9ZnVuY3Rpb24gZzQoYyxsLGEsZD1udWxsKXtjPWMmJiJcbiI9PT1jLmNoYXJBdCgwKSYmIlx1MDI3NSI9PWMuY2hhckF0KDEpP2Muc2xp''@;'; put 'put ''Y2UoMik6YztsZXQgaD1QcihsKTtpZihBcnJheS5pc0FycmF5KGwpKWg9bC5tYXAoUHIpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCl7bGV0IGY9W107Zm9yKGxldCB2IGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eSh2KSl7bGV0IE09bFt2XTtmLnB1c2godisiOiIr''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgTT9KU09OLnN0cmluZ2lmeShNKTpQcihNKSkpfWg9YHske2Yuam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7ZD8iKCIrZCsiKSI6IiJ9WyR7aH1dOiAke2MucmVwbGFjZShSdywiXG4gICIpfWB9KCJcbiIrYy5tZXNzYWdlLGgsYSxkKSxjLm5nVG9rZW5QYXRo''@;'; put 'put ''PWgsY1tGY109bnVsbCxjfShNLGwsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IE19ZmluYWxseXtfbCh2KSxuaChmKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgbD1fZShudWxsKSxhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7Y29uc3QgZj10''@;'; put 'put ''aGlzLmdldCh0Mix0cyxyYS5TZWxmKTtmb3IoY29uc3QgdiBvZiBmKXYoKX1maW5hbGx5e25oKGEpLF9sKGQpLF9lKGwpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5rZXlzKCkpbC5wdXNoKFByKGQpKTtyZXR1cm5gUjNJbmplY3Rvclsk''@;'; put 'put ''e2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPV9mKGw9WWkobCkpP2w6WWkobCYmbC5wcm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIE42KGMpe3JldHVybiBP''@;'; put 'put ''NihjKT9OMyh2b2lkIDAsYy51c2VWYWx1ZSk6TjMoQ3YoYyksRjMpfShsKTtpZighX2YobCkmJiEwPT09bC5tdWx0aSl7bGV0IGg9dGhpcy5yZWNvcmRzLmdldChhKTtofHwoaD1OMyh2b2lkIDAsRjMsITApLGguZmFjdG9yeT0oKT0+czUoaC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGgp''@;'; put 'put ''KSxhPWwsaC5tdWx0aS5wdXNoKGwpfXRoaXMucmVjb3Jkcy5zZXQoYSxkKX1oeWRyYXRlKGwsYSl7Y29uc3QgZD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1GMyYmKGEudmFsdWU9WncsYS52YWx1ZT1hLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBhLnZhbHVlJiZhLnZhbHVl''@;'; put 'put ''JiZmdW5jdGlvbiBTdihjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChhLnZhbHVlKSxhLnZhbHVlfWZpbmFsbHl7X2UoZCl9fWluamVjdGFi''@;'; put 'put ''bGVEZWZJblNjb3BlKGwpe2lmKCFsLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1ZaShsLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJv''@;'; put 'put ''eShsKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YobCk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gZzUoYyl7Y29uc3QgbD1QbyhjKSxhPW51bGwhPT1sP2wuZmFjdG9yeTptdShjKTtpZihudWxsIT09YSlyZXR1cm4gYTtp''@;'; put 'put ''ZihjIGluc3RhbmNlb2YgU3QpdGhyb3cgbmV3IFFuKDIwNCwhMSk7aWYoYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiB3dihjKXtpZihjLmxlbmd0aD4wKXRocm93IG5ldyBRbigyMDQsITEpO2NvbnN0IGE9ZnVuY3Rpb24gem8oYyl7cmV0dXJuIGMmJihjW1NzXXx8Y1tI''@;'; put 'put ''b10pfHxudWxsfShjKTtyZXR1cm4gbnVsbCE9PWE/KCk9PmEuZmFjdG9yeShjKTooKT0+bmV3IGN9KGMpO3Rocm93IG5ldyBRbigyMDQsITEpfWZ1bmN0aW9uIEN2KGMsbCxhKXtsZXQgZDtpZihfZihjKSl7Y29uc3QgaD1ZaShjKTtyZXR1cm4gbXUoaCl8fGc1KGgpfWlmKE82KGMpKWQ9KCk9''@;'; put 'put ''PllpKGMudXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24gX3YoYyl7cmV0dXJuISghY3x8IWMudXNlRmFjdG9yeSl9KGMpKWQ9KCk9PmMudXNlRmFjdG9yeSguLi5zNShjLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbiB5dihjKXtyZXR1cm4hKCFjfHwhYy51c2VFeGlzdGluZyl9KGMpKWQ9''@;'; put 'put ''KCk9PnhyKFlpKGMudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGg9WWkoYyYmKGMudXNlQ2xhc3N8fGMucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBXdyhjKXtyZXR1cm4hIWMuZGVwc30oYykpcmV0dXJuIG11KGgpfHxnNShoKTtkPSgpPT5uZXcgaCguLi5zNShjLmRlcHMpKX1yZXR1cm4gZH1m''@;'; put 'put ''dW5jdGlvbiBOMyhjLGwsYT0hMSl7cmV0dXJue2ZhY3Rvcnk6Yyx2YWx1ZTpsLG11bHRpOmE/W106dm9pZCAwfX1mdW5jdGlvbiBtNShjLGwpe2Zvcihjb25zdCBhIG9mIGMpQXJyYXkuaXNBcnJheShhKT9tNShhLGwpOmEmJlZhKGEpP201KGEuXHUwMjc1cHJvdmlkZXJzLGwpOmwoYSl9ZnVu''@;'; put 'put ''Y3Rpb24gcTAoYyxsKXtjIGluc3RhbmNlb2YgY2QmJmMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgZD1uaChjKSxoPV9sKHZvaWQgMCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXtuaChkKSxfbChoKX19ZnVuY3Rpb24gTXYoKXtyZXR1cm4gdm9pZCAwIT09YTUoKXx8bnVsbCE9ZnVuY3Rp''@;'; put 'put ''b24gTHcoKXtyZXR1cm4gSTN9KCl9Y29uc3QgajY9RnVuY3Rpb247Y29uc3QgVWw9MCxLaT0xLFVhPTIsZmM9MyxOYz00LHJjPTUsbnU9NixYMD03LGNsPTgscGM9OSxMMT0xMCxibz0xMSxTZj0xMixDND0xMyxvMD0xNCxabD0xNSxTND0xNixNZj0xNyx1ZD0xOCx3MD0xOSxhMj0yMCxvMj0y''@;'; put 'put ''MSx2NT0yMix4Zj0yMyx3bz0yNSx6Nj0xLHZ1PTcsVjM9OSxnYz0xMDt2YXIgYjU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuSGFzVHJhbnNwbGFudGVkVmlld3M9Ml09Ikhhc1RyYW5zcGxhbnRlZFZpZXdzIixjfShiNXx8e30pO2Z1bmN0aW9uIEZ1KGMpe3Jl''@;'; put 'put ''dHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbejZdfWZ1bmN0aW9uIEh1KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYhMD09PWNbejZdfWZ1bmN0aW9uIHJ1KGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gRWYoYyl7cmV0dXJuIGMuY29tcG9uZW50''@;'; put 'put ''T2Zmc2V0Pi0xfWZ1bmN0aW9uIEowKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gVmMoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHg0KGMpe3JldHVybiEhKDUxMiZjW1VhXSl9Y2xhc3MgdFZ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRo''@;'; put 'put ''aXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gWUEoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1mdW5jdGlvbiB3bCgpe3JldHVy''@;'; put 'put ''biBHQX1mdW5jdGlvbiBHQShjKXtyZXR1cm4gYy50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKGMuc2V0SW5wdXQ9clYpLG5WfWZ1bmN0aW9uIG5WKCl7Y29uc3QgYz1LQSh0aGlzKSxsPWM/LmN1cnJlbnQ7aWYobCl7Y29uc3QgYT1jLnByZXZpb3VzO2lmKGE9PT1JMCljLnByZXZpb3Vz''@;'; put 'put ''PWw7ZWxzZSBmb3IobGV0IGQgaW4gbClhW2RdPWxbZF07Yy5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhsKX19ZnVuY3Rpb24gclYoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMuZGVjbGFyZWRJbnB1dHNbZF0sdj1LQShjKXx8ZnVuY3Rpb24gaVYoYyxsKXtyZXR1cm4gY1skQV09bH0o''@;'; put 'put ''Yyx7cHJldmlvdXM6STAsY3VycmVudDpudWxsfSksTT12LmN1cnJlbnR8fCh2LmN1cnJlbnQ9e30pLEQ9di5wcmV2aW91cyxaPURbZl07TVtmXT1uZXcgdFYoWiYmWi5jdXJyZW50VmFsdWUsYSxEPT09STApLFlBKGMsbCxoLGEpfXdsLm5nSW5oZXJpdD0hMDtjb25zdCAkQT0iX19uZ1NpbXBs''@;'; put 'put ''ZUNoYW5nZXNfXyI7ZnVuY3Rpb24gS0EoYyl7cmV0dXJuIGNbJEFdfHxudWxsfWNvbnN0IHUyPWZ1bmN0aW9uKGMsbCxhKXt9O2xldCBYQT0hMTtmdW5jdGlvbiBDbChjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9Y1tVbF07cmV0dXJuIGN9ZnVuY3Rpb24geTUoYyxsKXtyZXR1cm4gQ2wo''@;'; put 'put ''bFtjXSl9ZnVuY3Rpb24gTDAoYyxsKXtyZXR1cm4gQ2wobFtjLmluZGV4XSl9ZnVuY3Rpb24gWTYoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uIEU0KGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gTzEoYyxsKXtjb25zdCBhPWxbY107cmV0dXJuIEZ1KGEpP2E6YVtVbF19ZnVuY3Rp''@;'; put 'put ''b24gUXcoYyl7cmV0dXJuISgxMjgmfmNbVWFdKX1mdW5jdGlvbiBkMihjLGwpe3JldHVybiBudWxsPT1sP251bGw6Y1tsXX1mdW5jdGlvbiBlQyhjKXtjW01mXT0wfWZ1bmN0aW9uIGNWKGMpezEwMjQmY1tVYV18fChjW1VhXXw9MTAyNCxRdyhjKSYmRzYoYykpfWZ1bmN0aW9uIFR2KGMpe3Jl''@;'; put 'put ''dHVybiEhKDkyMTYmY1tVYV18fGNbeGZdPy5kaXJ0eSl9ZnVuY3Rpb24gbkMoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoMSksVHYoYyk/RzYoYyk6NjQmY1tVYV0mJihmdW5jdGlvbiBvVigpe3JldHVybiBYQX0oKT8oY1tVYV18PTEwMjQsRzYoYykpOmNbTDFd''@;'; put 'put ''LmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCkpfWZ1bmN0aW9uIEc2KGMpe2NbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCk7bGV0IGw9VDQoYyk7Zm9yKDtudWxsIT09bCYmISg4MTkyJmxbVWFdKSYmKGxbVWFdfD04MTkyLFF3KGwpKTspbD1UNChsKX1m''@;'; put 'put ''dW5jdGlvbiBBdihjLGwpe2lmKCEoMjU2Jn5jW1VhXSkpdGhyb3cgbmV3IFFuKDkxMSwhMSk7bnVsbD09PWNbbzJdJiYoY1tvMl09W10pLGNbbzJdLnB1c2gobCl9ZnVuY3Rpb24gVDQoYyl7Y29uc3QgbD1jW2ZjXTtyZXR1cm4gSHUobCk/bFtmY106bH1jb25zdCBDbz17bEZyYW1lOmFrKG51''@;'; put 'put ''bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxza2lwSHlkcmF0aW9uUm9vdFROb2RlOm51bGx9O2Z1bmN0aW9uIHRrKCl7cmV0dXJuIENvLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBfNSgpe3JldHVybiBudWxsIT09Q28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZX1mdW5jdGlvbiBkaSgpe3JldHVy''@;'; put 'put ''biBDby5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gQ28ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHd0KGMpe3JldHVybiBDby5sRnJhbWUuY29udGV4dExWaWV3PWMsY1tjbF19ZnVuY3Rpb24gQ3QoYyl7cmV0dXJuIENvLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxjfWZ1bmN0''@;'; put 'put ''aW9uIHVsKCl7bGV0IGM9ckMoKTtmb3IoO251bGwhPT1jJiY2ND09PWMudHlwZTspYz1jLnBhcmVudDtyZXR1cm4gY31mdW5jdGlvbiByQygpe3JldHVybiBDby5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIGgyKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5jdXJyZW50VE5vZGU9Yyxh''@;'; put 'put ''LmlzUGFyZW50PWx9ZnVuY3Rpb24gaUMoKXtyZXR1cm4gQ28ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIGFDKCl7Q28ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIE8wKCl7Y29uc3QgYz1Dby5sRnJhbWU7bGV0IGw9Yy5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09bCYmKGw9Yy5i''@;'; put 'put ''aW5kaW5nUm9vdEluZGV4PWMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLGx9ZnVuY3Rpb24gVGYoKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBhaCgpe3JldHVybiBDby5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gQWYoYyl7Y29uc3QgbD1Dby5sRnJh''@;'; put 'put ''bWUsYT1sLmJpbmRpbmdJbmRleDtyZXR1cm4gbC5iaW5kaW5nSW5kZXg9bC5iaW5kaW5nSW5kZXgrYyxhfWZ1bmN0aW9uIHlWKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nUm9vdEluZGV4PWMsb0MobCl9ZnVuY3Rpb24gb0MoYyl7Q28ubEZyYW1lLmN1''@;'; put 'put ''cnJlbnREaXJlY3RpdmVJbmRleD1jfWZ1bmN0aW9uIHNDKGMpe2NvbnN0IGw9Q28ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGxDKCl7cmV0dXJuIENvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBCMyhjKXtD''@;'; put 'put ''by5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9Y31mdW5jdGlvbiBjQyhjKXtjb25zdCBsPWNbS2ldO3JldHVybiAyPT09bC50eXBlP2wuZGVjbFROb2RlOjE9PT1sLnR5cGU/Y1tyY106bnVsbH1mdW5jdGlvbiBEdihjLGwsYSl7aWYoYSZyYS5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDsh''@;'; put 'put ''KGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmcmEuSG9zdHx8KGg9Y0MoZiksbnVsbD09PWh8fChmPWZbbzBdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD1Dby5sRnJhbWU9ajMoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9''@;'; put 'put ''ZnVuY3Rpb24gSzYoYyl7Y29uc3QgbD1qMygpLGE9Y1tLaV07Q28ubEZyYW1lPWwsbC5jdXJyZW50VE5vZGU9YS5maXJzdENoaWxkLGwubFZpZXc9YyxsLnRWaWV3PWEsbC5jb250ZXh0TFZpZXc9YyxsLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdTdGFydEluZGV4LGwuaW5JMThuPSExfWZ1bmN0''@;'; put 'put ''aW9uIGozKCl7Y29uc3QgYz1Dby5sRnJhbWUsbD1udWxsPT09Yz9udWxsOmMuY2hpbGQ7cmV0dXJuIG51bGw9PT1sP2FrKGMpOmx9ZnVuY3Rpb24gYWsoYyl7Y29uc3QgbD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6''@;'; put 'put ''LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OmMsY2hpbGQ6bnVsbCxp''@;'; put 'put ''bkkxOG46ITF9O3JldHVybiBudWxsIT09YyYmKGMuY2hpbGQ9bCksbH1mdW5jdGlvbiBJdigpe2NvbnN0IGM9Q28ubEZyYW1lO3JldHVybiBDby5sRnJhbWU9Yy5wYXJlbnQsYy5jdXJyZW50VE5vZGU9bnVsbCxjLmxWaWV3PW51bGwsY31jb25zdCBvaz1JdjtmdW5jdGlvbiB3NSgpe2NvbnN0''@;'; put 'put ''IGM9SXYoKTtjLmlzUGFyZW50PSEwLGMudFZpZXc9bnVsbCxjLnNlbGVjdGVkSW5kZXg9LTEsYy5jb250ZXh0TFZpZXc9bnVsbCxjLmVsZW1lbnREZXB0aENvdW50PTAsYy5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsYy5jdXJyZW50TmFtZXNwYWNlPW51bGwsYy5iaW5kaW5nUm9vdEluZGV4''@;'; put 'put ''PS0xLGMuYmluZGluZ0luZGV4PS0xLGMuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBWdSgpe3JldHVybiBDby5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBBNChjKXtDby5sRnJhbWUuc2VsZWN0ZWRJbmRleD1jfWZ1bmN0aW9uIFFzKCl7Y29uc3QgYz1Dby5sRnJhbWU7cmV0''@;'; put 'put ''dXJuIFk2KGMudFZpZXcsYy5zZWxlY3RlZEluZGV4KX1sZXQgbGs9ITA7ZnVuY3Rpb24gcTYoKXtyZXR1cm4gbGt9ZnVuY3Rpb24gZjIoYyl7bGs9Y31mdW5jdGlvbiBSdihjLGwpe2ZvcihsZXQgYT1sLmRpcmVjdGl2ZVN0YXJ0LGQ9bC5kaXJlY3RpdmVFbmQ7YTxkO2ErKyl7Y29uc3QgZj1j''@;'; put 'put ''LmRhdGFbYV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDp2LG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpNLG5nQWZ0ZXJWaWV3SW5pdDpELG5nQWZ0ZXJWaWV3Q2hlY2tlZDpaLG5nT25EZXN0cm95OnJlfT1mO3YmJihjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKC1hLHYpLE0m''@;'; put 'put ''JigoYy5jb250ZW50SG9va3M/Pz1bXSkucHVzaChhLE0pLChjLmNvbnRlbnRDaGVja0hvb2tzPz89W10pLnB1c2goYSxNKSksRCYmKGMudmlld0hvb2tzPz89W10pLnB1c2goLWEsRCksWiYmKChjLnZpZXdIb29rcz8/PVtdKS5wdXNoKGEsWiksKGMudmlld0NoZWNrSG9va3M/Pz1bXSkucHVz''@;'; put 'put ''aChhLFopKSxudWxsIT1yZSYmKGMuZGVzdHJveUhvb2tzPz89W10pLnB1c2goYSxyZSl9fWZ1bmN0aW9uIEx2KGMsbCxhKXtjayhjLGwsMyxhKX1mdW5jdGlvbiBPdihjLGwsYSxkKXsoMyZjW1VhXSk9PT1hJiZjayhjLGwsYSxkKX1mdW5jdGlvbiBkQyhjLGwpe2xldCBhPWNbVWFdOygzJmEp''@;'; put 'put ''PT09bCYmKGEmPTE2MzgzLGErPTEsY1tVYV09YSl9ZnVuY3Rpb24gY2soYyxsLGEsZCl7Y29uc3QgZj1kPz8tMSx2PWwubGVuZ3RoLTE7bGV0IE09MDtmb3IobGV0IEQ9dm9pZCAwIT09ZD82NTUzNSZjW01mXTowO0Q8djtEKyspaWYoIm51bWJlciI9PXR5cGVvZiBsW0QrMV0pe2lmKE09bFtE''@;'; put 'put ''XSxudWxsIT1kJiZNPj1kKWJyZWFrfWVsc2UgbFtEXTwwJiYoY1tNZl0rPTY1NTM2KSwoTTxmfHwtMT09ZikmJihFVihjLGEsbCxEKSxjW01mXT0oNDI5NDkwMTc2MCZjW01mXSkrRCsyKSxEKyt9ZnVuY3Rpb24gdWsoYyxsKXt1Mig0LGMsbCk7Y29uc3QgYT1fZShudWxsKTt0cnl7bC5jYWxs''@;'; put 'put ''KGMpfWZpbmFsbHl7X2UoYSksdTIoNSxjLGwpfX1mdW5jdGlvbiBFVihjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbVWFdPj4xNDxjW01mXT4+MTYmJigzJmNbVWFdKT09PWwmJihjW1VhXSs9MTYzODQsdWsoTSxmKSk6dWsoTSxmKX1jb25z''@;'; put 'put ''dCBrND0tMTtjbGFzcyBQMXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIFB2KGMpe3JldHVybiBjIT09azR9ZnVuY3Rpb24gWDYoYyl7cmV0dXJu''@;'; put 'put ''IDMyNzY3JmN9ZnVuY3Rpb24gSjYoYyxsKXtsZXQgYT1mdW5jdGlvbiBSVihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW28wXSxhLS07cmV0dXJuIGR9bGV0IGZDPSEwO2Z1bmN0aW9uIEZ2KGMpe2NvbnN0IGw9ZkM7cmV0dXJuIGZDPWMsbH1jb25zdCBIdj0yNTUscEM9''@;'; put 'put ''NTtsZXQgTFY9MDtjb25zdCBwMj17fTtmdW5jdGlvbiBOdihjLGwpe2NvbnN0IGE9VnYoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0tpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRleD1sLmxlbmd0aCxnQyhkLmRhdGEsYyksZ0MobCxudWxsKSxnQyhkLmJs''@;'; put 'put ''dWVwcmludCxudWxsKSk7Y29uc3QgaD1DNShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFB2KGgpKXtjb25zdCB2PVg2KGgpLE09SjYoaCxsKSxEPU1bS2ldLmRhdGE7Zm9yKGxldCBaPTA7Wjw4O1orKylsW2YrWl09TVt2K1pdfERbditaXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBn''@;'; put 'put ''QyhjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gVnYoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmluamVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmlu''@;'; put 'put ''amVjdG9ySW5kZXh9ZnVuY3Rpb24gQzUoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zaChoKSxudWxsPT09ZClyZXR1cm4gazQ7''@;'; put 'put ''aWYoYSsrLGg9aFtvMF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gazR9ZnVuY3Rpb24gaGQoYyxsLGEpeyFmdW5jdGlvbiBPVihjLGwsYSl7bGV0IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFz''@;'; put 'put ''T3duUHJvcGVydHkoUGMpJiYoZD1hW1BjXSksbnVsbD09ZCYmKGQ9YVtQY109TFYrKyk7Y29uc3QgaD1kJkh2O2wuZGF0YVtjKyhoPj5wQyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZGsoYyxsLGEpe2lmKGEmcmEuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7TXMoKX1mdW5jdGlv''@;'; put 'put ''biBvaChjLGwsYSxkKXtpZihhJnJhLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKHJhLlNlbGZ8cmEuSG9zdCkpKXtjb25zdCBoPWNbcGNdLGY9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGg/aC5nZXQobCxkLGEmcmEuT3B0aW9uYWwpOnRoKGwsZCxhJnJhLk9wdGlvbmFsKX1m''@;'; put 'put ''aW5hbGx5e19sKGYpfX1yZXR1cm4gZGsoZCwwLGEpfWZ1bmN0aW9uIGhrKGMsbCxhLGQ9cmEuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW1VhXSYmIShkJnJhLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIFUzKGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYm''@;'; put 'put ''bnVsbCE9PXYmJjIwNDgmdltVYV0mJiEoNTEyJnZbVWFdKTspe2NvbnN0IE09UzUoZix2LGEsZHxyYS5TZWxmLHAyKTtpZihNIT09cDIpcmV0dXJuIE07bGV0IEQ9Zi5wYXJlbnQ7aWYoIUQpe2NvbnN0IFo9dlthMl07aWYoWil7Y29uc3QgcmU9Wi5nZXQoYSxwMixkKTtpZihyZSE9PXAyKXJl''@;'; put 'put ''dHVybiByZX1EPXNoKHYpLHY9dltvMF19Zj1EfXJldHVybiBofShjLGwsYSxkLHAyKTtpZih2IT09cDIpcmV0dXJuIHZ9Y29uc3QgZj1TNShjLGwsYSxkLHAyKTtpZihmIT09cDIpcmV0dXJuIGZ9cmV0dXJuIG9oKGwsYSxkLGgpfWZ1bmN0aW9uIFM1KGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5j''@;'; put 'put ''dGlvbiBUYyhjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoUGMpP2NbUGNdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bD49MD9sJkh2OlEwOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBmKXtpZighRHYobCxjLGQpKXJldHVybiBkJnJhLkhvc3Q/ZGsoaCwwLGQpOm9oKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZyYS5PcHRpb25hbClyZXR1cm4gdjtNcygpfWZpbmFsbHl7b2soKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51''@;'; put 'put ''bGwsTT1WdihjLGwpLEQ9azQsWj1kJnJhLkhvc3Q/bFtabF1bcmNdOm51bGw7Zm9yKCgtMT09PU18fGQmcmEuU2tpcFNlbGYpJiYoRD0tMT09PU0/QzUoYyxsKTpsW00rOF0sRCE9PWs0JiZ4NShkLCExKT8odj1sW0tpXSxNPVg2KEQpLGw9SjYoRCxsKSk6TT0tMSk7LTEhPT1NOyl7Y29uc3Qg''@;'; put 'put ''cmU9bFtLaV07aWYoTTUoZixNLHJlLmRhdGEpKXtjb25zdCBjZT1mayhNLGwsYSx2LGQsWik7aWYoY2UhPT1wMilyZXR1cm4gY2V9RD1sW00rOF0sRCE9PWs0JiZ4NShkLGxbS2ldLmRhdGFbTSs4XT09PVopJiZNNShmLE0sbCk/KHY9cmUsTT1YNihEKSxsPUo2KEQsbCkpOk09LTF9fXJldHVy''@;'; put 'put ''biBofWZ1bmN0aW9uIGZrKGMsbCxhLGQsaCxmKXtjb25zdCB2PWxbS2ldLE09di5kYXRhW2MrOF0scmU9QnYoTSx2LGEsbnVsbD09ZD9FZihNKSYmZkM6ZCE9diYmISEoMyZNLnR5cGUpLGgmcmEuSG9zdCYmZj09PU0pO3JldHVybiBudWxsIT09cmU/RDQobCx2LHJlLE0pOnAyfWZ1bmN0aW9u''@;'; put 'put ''IEJ2KGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQscmU9Zj4+MjAsYmU9aD9NK3JlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgRWU9ZD9NOk0rcmU7RWU8YmU7RWUrKyl7Y29uc3QgQmU9dltFZV07aWYo''@;'; put 'put ''RWU8RCYmYT09PUJlfHxFZT49RCYmQmUudHlwZT09PWEpcmV0dXJuIEVlfWlmKGgpe2NvbnN0IEVlPXZbRF07aWYoRWUmJlZjKEVlKSYmRWUudHlwZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDQoYyxsLGEsZCl7bGV0IGg9Y1thXTtjb25zdCBmPWwuZGF0YTtpZihmdW5j''@;'; put 'put ''dGlvbiBUVihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFAxfShoKSl7Y29uc3Qgdj1oO3YucmVzb2x2aW5nJiZmdW5jdGlvbiAkMChjLGwpe3Rocm93IGwmJmwuam9pbigiID4gIiksbmV3IFFuKC0yMDAsYyl9KGZ1bmN0aW9uIFRhKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFt''@;'; put 'put ''ZXx8Yy50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6Q2EoYyl9KGZbYV0pKTtjb25zdCBNPUZ2KHYuY2FuU2VlVmlld1Byb3ZpZGVycyk7di5yZXNvbHZpbmc9ITA7''@;'; put 'put ''Y29uc3QgWj12LmluamVjdEltcGw/X2wodi5pbmplY3RJbXBsKTpudWxsO0R2KGMsZCxyYS5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiB4VihjLGwsYSl7Y29uc3R7bmdP''@;'; put 'put ''bkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9R0EobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89''@;'; put 'put ''W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVomJl9sKFopLEZ2KE0pLHYucmVzb2x2aW5nPSExLG9rKCl9fXJldHVybiBofWZ1''@;'; put 'put ''bmN0aW9uIE01KGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PnBDKV0mMTw8Yyl9ZnVuY3Rpb24geDUoYyxsKXtyZXR1cm4hKGMmcmEuU2VsZnx8YyZyYS5Ib3N0JiZsKX1jbGFzcyBCdXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVy''@;'; put 'put ''biBoayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG81KGQpLGEpfX1mdW5jdGlvbiBRMCgpe3JldHVybiBuZXcgQnUodWwoKSxkaSgpKX1mdW5jdGlvbiBZcyhjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fERmKGwpLGQ9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZTtsZXQgaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbamldfHxEZihoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9''@;'; put 'put ''KX1mdW5jdGlvbiBEZihjKXtyZXR1cm4geWwoYyk/KCk9Pntjb25zdCBsPURmKFlpKGMpKTtyZXR1cm4gbCYmbCgpfTptdShjKX1mdW5jdGlvbiBzaChjKXtjb25zdCBsPWNbS2ldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3JjXTpudWxsfWZ1bmN0aW9uIElm''@;'; put 'put ''KGMpe3JldHVybiBmdW5jdGlvbiBQVihjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYo''@;'; put 'put ''ZDUoZikpYnJlYWs7aWYoMD09PWYpaCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0odWwoKSxjKX1mdW5jdGlvbiB3QyhjLGw9''@;'; put 'put ''bnVsbCxhPW51bGwsZCl7Y29uc3QgaD1SNChjLGwsYSxkKTtyZXR1cm4gaC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxofWZ1bmN0aW9uIFI0KGMsbD1udWxsLGE9bnVsbCxkLGg9bmV3IFNldCl7Y29uc3QgZj1bYXx8dHMsencoYyldO3JldHVybiBkPWR8fCgib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGM/dm9pZCAwOlByKGMpKSxuZXcgY2QoZixsfHxIMygpLGR8fG51bGwsaCl9bGV0IERzPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuVEhST1dfSUZfTk9UX0ZPVU5EPUswfXN0YXRpY3t0aGlzLk5VTEw9bmV3IHU1fXN0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEp''@;'; put 'put ''KXJldHVybiB3Qyh7bmFtZToiIn0sZCxhLCIiKTt7Y29uc3QgaD1hLm5hbWU/PyIiO3JldHVybiB3Qyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PnhyKEwzKX0p''@;'; put 'put ''fXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPS0xfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQTUoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIGcye2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmlu''@;'; put 'put ''ZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29sZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmQTUobCk7Zm9yKDthJiZBNShhKTspYT1BNShhKTtyZXR1cm4gYXx8bnVs''@;'; put 'put ''bH19Y29uc3Qgdms9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShnMikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IGs1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189VzN9c3RhdGlje3RoaXMuX19OR19FTlZfSURf''@;'; put 'put ''Xz1hPT5hfX1yZXR1cm4gY30pKCk7Y2xhc3MgWjMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiBBdih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rpb24ga3YoYyxsKXtpZihudWxsPT09Y1tvMl0pcmV0dXJuO2NvbnN0''@;'; put 'put ''IGE9Y1tvMl0uaW5kZXhPZihsKTstMSE9PWEmJmNbbzJdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gVzMoKXtyZXR1cm4gbmV3IFozKGRpKCkpfWZ1bmN0aW9uIE5WKCl7cmV0dXJuIEw0KHVsKCksZGkoKSl9ZnVuY3Rpb24gTDQoYyxsKXtyZXR1cm4gbmV3IEppKEww''@;'; put 'put ''KGMsbCkpfWxldCBKaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU5WfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geWsoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9jLm5hdGl2ZUVsZW1lbnQ6''@;'; put 'put ''Y31mdW5jdGlvbiBDQyhjKXtyZXR1cm4gbD0+e3NldFRpbWVvdXQoYyx2b2lkIDAsbCl9fWNvbnN0IEtyPWNsYXNzIFZWIGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLmRlc3Ryb3lSZWY9dm9pZCAwLHRoaXMuX19pc0FzeW5jPWwsTXYoKSYmKHRoaXMuZGVzdHJv''@;'; put 'put ''eVJlZj1maShrNSx7b3B0aW9uYWw6ITB9KT8/dm9pZCAwKX1lbWl0KGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e3N1cGVyLm5leHQobCl9ZmluYWxseXtfZShhKX19c3Vic2NyaWJlKGwsYSxkKXtsZXQgaD1sLGY9YXx8KCgpPT5udWxsKSx2PWQ7aWYobCYmIm9iamVjdCI9PXR5cGVvZiBsKXtj''@;'; put 'put ''b25zdCBEPWw7aD1ELm5leHQ/LmJpbmQoRCksZj1ELmVycm9yPy5iaW5kKEQpLHY9RC5jb21wbGV0ZT8uYmluZChEKX10aGlzLl9faXNBc3luYyYmKGY9Q0MoZiksaCYmKGg9Q0MoaCkpLHYmJih2PUNDKHYpKSk7Y29uc3QgTT1zdXBlci5zdWJzY3JpYmUoe25leHQ6aCxlcnJvcjpmLGNvbXBs''@;'; put 'put ''ZXRlOnZ9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIHF0JiZsLmFkZChNKSxNfX07ZnVuY3Rpb24gQlYoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZmR7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcz8/PW5ldyBLcn1jb25zdHJ1Y3Rvcihs''@;'; put 'put ''PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT12b2lkIDAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz12b2lkIDAsdGhpcy5sZW5ndGg9MCx0aGlzLmZpcnN0PXZvaWQg''@;'; put 'put ''MCx0aGlzLmxhc3Q9dm9pZCAwO2NvbnN0IGE9ZmQucHJvdG90eXBlO2FbU3ltYm9sLml0ZXJhdG9yXXx8KGFbU3ltYm9sLml0ZXJhdG9yXT1CVil9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlzLl9yZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''cmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7Y29uc3QgZD1mdW5jdGlvbiBuMChjKXtyZXR1cm4gYy5mbGF0KE51bWJl''@;'; put 'put ''ci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIGdmKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShm''@;'; put 'put ''KSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlzLl9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1kWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9j''@;'; put 'put ''aGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVtaXQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ry''@;'; put 'put ''b3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9fWZ1bmN0aW9uIFp2KGMpe3JldHVybiEoMTI4Jn5jLmZsYWdzKX1jb25zdCBTQz1uZXcgTWFwO2xldCB6Vj0wO2NvbnN0IHhDPSJfX25nQ29u''@;'; put 'put ''dGV4dF9fIjtmdW5jdGlvbiBqdShjLGwpe0Z1KGwpPyhjW3hDXT1sW3cwXSxmdW5jdGlvbiBaVihjKXtTQy5zZXQoY1t3MF0sYyl9KGwpKTpjW3hDXT1sfWZ1bmN0aW9uIEVrKGMpe3JldHVybiBBayhjW1NmXSl9ZnVuY3Rpb24gVGsoYyl7cmV0dXJuIEFrKGNbTmNdKX1mdW5jdGlvbiBBayhj''@;'; put 'put ''KXtmb3IoO251bGwhPT1jJiYhSHUoYyk7KWM9Y1tOY107cmV0dXJuIGN9bGV0IFRDO2Z1bmN0aW9uIFkzKCl7aWYodm9pZCAwIT09VEMpcmV0dXJuIFRDO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBRbigyMTAsITEpfWNvbnN0ICR2PW5ldyBTdCgi''@;'; put 'put ''Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+c0J9KSxzQj0ibmciLFBrPW5ldyBTdCgiIiksaW89bmV3IFN0KCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksRms9bmV3IFN0KCIiKSxMNT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''LGZhY3Rvcnk6KCk9PlkzKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSk7bGV0IE5rPSgpPT5udWxsO2Z1bmN0aW9uIFJDKGMsbCxhPSExKXtyZXR1cm4gTmsoYyxsLGEpfWNvbnN0IGprPW5ldyBTdCgiIix7''@;'; put 'put ''cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtsZXQgUXYsZWI7ZnVuY3Rpb24gRjUoYyl7cmV0dXJuIGZ1bmN0aW9uIEhDKCl7aWYodm9pZCAwPT09UXYmJihRdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e1F2PVZ0LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3Vs''@;'; put 'put ''YXIiLHtjcmVhdGVIVE1MOmM9PmMsY3JlYXRlU2NyaXB0OmM9PmMsY3JlYXRlU2NyaXB0VVJMOmM9PmN9KX1jYXRjaHt9cmV0dXJuIFF2fSgpPy5jcmVhdGVIVE1MKGMpfHxjfWZ1bmN0aW9uIE5DKCl7aWYodm9pZCAwPT09ZWImJihlYj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e2ViPVZ0''@;'; put 'put ''LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gZWJ9ZnVuY3Rpb24gVWsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZUhUTUwo''@;'; put 'put ''Yyl8fGN9ZnVuY3Rpb24gV2soYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZVNjcmlwdFVSTChjKXx8Y31jbGFzcyBZa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9bH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3By''@;'; put 'put ''b3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke3BhfSlgfX1mdW5jdGlvbiBtMihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFlrP2MuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpjfWZ1bmN0aW9u''@;'; put 'put ''IEg0KGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBHayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFlrJiZjLmdldFR5cGVOYW1lKCl8fG51bGx9KGMpO2lmKG51bGwhPWEmJmEhPT1sKXtpZigiUmVzb3VyY2VVUkwiPT09YSYmIlVSTCI9PT1sKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWly''@;'; put 'put ''ZWQgYSBzYWZlICR7bH0sIGdvdCBhICR7YX0gKHNlZSAke3BhfSlgKX1yZXR1cm4gYT09PWx9Y2xhc3MgJGt7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29u''@;'; put 'put ''c3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGNShsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQobCk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1j''@;'; put 'put ''YXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIFRCe2NvbnN0cnVjdG9yKGwpe3RoaXMuZGVmYXVsdERvYz1sLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlF''@;'; put 'put ''bGVtZW50KGwpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPUY1KGwpLGF9fWNvbnN0IEFCPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0''@;'; put 'put ''aW9uIEJDKGMpe3JldHVybihjPVN0cmluZyhjKSkubWF0Y2goQUIpP2M6InVuc2FmZToiK2N9ZnVuY3Rpb24gTGYoYyl7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCIsIikpbFthXT0hMDtyZXR1cm4gbH1mdW5jdGlvbiBhOCguLi5jKXtjb25zdCBsPXt9O2Zvcihjb25zdCBh''@;'; put 'put ''IG9mIGMpZm9yKGNvbnN0IGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiYobFtkXT0hMCk7cmV0dXJuIGx9Y29uc3QgcWs9TGYoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxYaz1MZigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLEprPUxmKCJy''@;'; put 'put ''cCxydCIpLGpDPWE4KHFrLGE4KFhrLExmKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixp''@;'; put 'put ''bnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxhOChKayxMZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVy''@;'; put 'put ''ZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGE4KEprLFhrKSksekM9TGYoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6''@;'; put 'put ''aHJlZiIpLFFrPWE4KHpDLExmKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVm''@;'; put 'put ''YXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJv''@;'; put 'put ''bGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxMZigi''@;'; put 'put ''YXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEt''@;'; put 'put ''ZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFy''@;'; put 'put ''aWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25s''@;'; put 'put ''eSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFs''@;'; put 'put ''dWVub3csYXJpYS12YWx1ZXRleHQiKSksa0I9TGYoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIGVEe2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbihsKXtsZXQgYT1sLmZpcnN0Q2hpbGQsZD0hMCxoPVtd''@;'; put 'put ''O2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZCloLnB1''@;'; put 'put ''c2goYSksYT1SQihhKTtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBmPUlCKGEpO2lmKGYpe2E9ZjticmVha31hPWgucG9wKCl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChsKXtjb25zdCBh''@;'; put 'put ''PXREKGwpLnRvTG93ZXJDYXNlKCk7aWYoIWpDLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwha0IuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxl''@;'; put 'put ''dCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZC5pdGVtKGgpLHY9Zi5uYW1lLE09di50b0xvd2VyQ2FzZSgpO2lmKCFRay5oYXNPd25Qcm9wZXJ0eShNKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IEQ9Zi52YWx1ZTt6Q1tNXSYmKEQ9QkMoRCkpLHRoaXMu''@;'; put 'put ''YnVmLnB1c2goIiAiLHYsJz0iJyxyRChEKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPXREKGwpLnRvTG93ZXJDYXNlKCk7akMuaGFzT3duUHJvcGVydHkoYSkmJiFxay5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwv''@;'; put 'put ''IiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGwpe3RoaXMuYnVmLnB1c2gockQobCkpfX1mdW5jdGlvbiBJQihjKXtjb25zdCBsPWMubmV4dFNpYmxpbmc7aWYobCYmYyE9PWwucHJldmlvdXNTaWJsaW5nKXRocm93IG5EKGwpO3JldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''IFJCKGMpe2NvbnN0IGw9Yy5maXJzdENoaWxkO2lmKGwmJmZ1bmN0aW9uIERCKGMsbCl7cmV0dXJuKGMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KGMs''@;'; put 'put ''bCkpdGhyb3cgbkQobCk7cmV0dXJuIGx9ZnVuY3Rpb24gdEQoYyl7Y29uc3QgbD1jLm5vZGVOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbD9sOiJGT1JNIn1mdW5jdGlvbiBuRChjKXtyZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVt''@;'; put 'put ''ZW50IGlzIGNsb2JiZXJlZDogJHtjLm91dGVySFRNTH1gKX1jb25zdCBMQj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csT0I9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIHJEKGMpe3JldHVybiBjLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKExCLGZ1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiImIyIrKDEwMjQqKGwuY2hhckNvZGVBdCgwKS01NTI5NikrKGwuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoT0IsZnVuY3Rpb24obCl7cmV0dXJuIiYjIitsLmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgv''@;'; put 'put ''Pi9nLCImZ3Q7Iil9bGV0IHRiO2Z1bmN0aW9uIFVDKGMpe3JldHVybiJjb250ZW50ImluIGMmJmZ1bmN0aW9uIEZCKGMpe3JldHVybiBjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1jLm5vZGVOYW1lfShjKT9jLmNvbnRlbnQ6bnVsbH12YXIgTjU9ZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuSFRNTD0xXT0iSFRNTCIsY1tjLlNUWUxFPTJdPSJTVFlMRSIsY1tjLlNDUklQVD0zXT0iU0NSSVBUIixjW2MuVVJMPTRdPSJVUkwiLGNbYy5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsY30oTjV8fHt9KTtmdW5jdGlv''@;'; put 'put ''biBWNChjKXtjb25zdCBsPW84KCk7cmV0dXJuIGw/VWsobC5zYW5pdGl6ZShONS5IVE1MLGMpfHwiIik6SDQoYywiSFRNTCIpP1VrKG0yKGMpKTpmdW5jdGlvbiBQQihjLGwpe2xldCBhPW51bGw7dHJ5e3RiPXRifHxmdW5jdGlvbiBWQyhjKXtjb25zdCBsPW5ldyBUQihjKTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gS2soKXt0cnl7cmV0dXJuISEobmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGNSgiIiksInRleHQvaHRtbCIpfWNhdGNoe3JldHVybiExfX0oKT9uZXcgJGsobCk6bH0oYyk7bGV0IGQ9bD9TdHJpbmcobCk6IiI7YT10Yi5nZXRJbmVydEJvZHlFbGVtZW50KGQp''@;'; put 'put ''O2xldCBoPTUsZj1kO2Rve2lmKDA9PT1oKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtoLS0sZD1mLGY9YS5pbm5lckhUTUwsYT10Yi5nZXRJbmVydEJvZHlFbGVtZW50KGQpfXdoaWxlKGQhPT1mKTtyZXR1''@;'; put 'put ''cm4gRjUoKG5ldyBlRCkuc2FuaXRpemVDaGlsZHJlbihVQyhhKXx8YSkpfWZpbmFsbHl7aWYoYSl7Y29uc3QgZD1VQyhhKXx8YTtmb3IoO2QuZmlyc3RDaGlsZDspZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQpfX19KFkzKCksQ2EoYykpfWZ1bmN0aW9uIFpDKGMpe2NvbnN0IGw9bzgoKTty''@;'; put 'put ''ZXR1cm4gbD9sLnNhbml0aXplKE41LlVSTCxjKXx8IiI6SDQoYywiVVJMIik/bTIoYyk6QkMoQ2EoYykpfWZ1bmN0aW9uIGlEKGMpe2NvbnN0IGw9bzgoKTtpZihsKXJldHVybiBXayhsLnNhbml0aXplKE41LlJFU09VUkNFX1VSTCxjKXx8IiIpO2lmKEg0KGMsIlJlc291cmNlVVJMIikpcmV0''@;'; put 'put ''dXJuIFdrKG0yKGMpKTt0aHJvdyBuZXcgUW4oOTA0LCExKX1mdW5jdGlvbiBvOCgpe2NvbnN0IGM9ZGkoKTtyZXR1cm4gYyYmY1tMMV0uc2FuaXRpemVyfWNvbnN0IHpCPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csVUI9Lyg8fD4pL2csWkI9Ilx1MjAwYiQxXHUyMDBiIjtmdW5jdGlv''@;'; put 'put ''biBxQyhjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uICQzKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gRjEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj9jKCk6Y312YXIgSzM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBv''@;'; put 'put ''cnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsY30oSzN8fHt9KTtsZXQgWEM7ZnVuY3Rpb24gSkMoYyxsKXtyZXR1cm4gWEMoYyxsKX1mdW5jdGlvbiBCNShjLGwsYSxkLGgpe2lmKG51bGwhPWQpe2xldCBmLHY9ITE7SHUoZCk/Zj1kOkZ1KGQpJiYodj0h''@;'; put 'put ''MCxkPWRbVWxdKTtjb25zdCBNPUNsKGQpOzA9PT1jJiZudWxsIT09YT9udWxsPT1oP29iKGwsYSxNKTpaNChsLGEsTSxofHxudWxsLCEwKToxPT09YyYmbnVsbCE9PWE/WjQobCxhLE0saHx8bnVsbCwhMCk6Mj09PWM/ZnVuY3Rpb24gZDgoYyxsLGEpe2NvbnN0IGQ9cTMoYyxsKTtkJiZmdW5j''@;'; put 'put ''dGlvbiBsOChjLGwsYSxkKXtjLnJlbW92ZUNoaWxkKGwsYSxkKX0oYyxkLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxudWxsIT1mJiZmdW5jdGlvbiBuaihjLGwsYSxkLGgpe2NvbnN0IGY9YVt2dV07ZiE9PUNsKGEpJiZCNShsLGMsZCxmLGgpO2ZvcihsZXQgTT1nYztN''@;'; put 'put ''PGEubGVuZ3RoO00rKyl7Y29uc3QgRD1hW01dO3NiKERbS2ldLEQsYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBlUyhjLGwpe3JldHVybiBjLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gVjUoYyl7cmV0dXJuIGMucmVwbGFjZSh6QixsPT5sLnJlcGxhY2UoVUIsWkIpKX0obCkpfWZ1''@;'; put 'put ''bmN0aW9uIHo0KGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gZkQoYyxsKXtsW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxzYihjLGwsbFtib10sMixudWxsLG51bGwpfWZ1bmN0aW9uIG5TKGMsbCl7Y29uc3QgYT1jW1YzXSxkPWEu''@;'; put 'put ''aW5kZXhPZihsKTthLnNwbGljZShkLDEpfWZ1bmN0aW9uIHM4KGMsbCl7aWYoYy5sZW5ndGg8PWdjKXJldHVybjtjb25zdCBhPWdjK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFtTNF07bnVsbCE9PWgmJmghPT1jJiZuUyhoLGQpLGw+MCYmKGNbYS0xXVtOY109ZFtOY10pO2NvbnN0IGY9T3Uo''@;'; put 'put ''YyxnYytsKTshZnVuY3Rpb24gaEQoYyxsKXtmRChjLGwpLGxbVWxdPW51bGwsbFtyY109bnVsbH0oZFtLaV0sZCk7Y29uc3Qgdj1mW3VkXTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbS2ldKSxkW2ZjXT1udWxsLGRbTmNdPW51bGwsZFtVYV0mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gVTQo''@;'; put 'put ''YyxsKXtpZighKDI1NiZsW1VhXSkpe2NvbnN0IGE9bFtib107YS5kZXN0cm95Tm9kZSYmc2IoYyxsLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIEpCKGMpe2xldCBsPWNbU2ZdO2lmKCFsKXJldHVybiByUyhjW0tpXSxjKTtmb3IoO2w7KXtsZXQgYT1udWxsO2lmKEZ1KGwpKWE9bFtTZl07ZWxz''@;'; put 'put ''ZXtjb25zdCBkPWxbZ2NdO2QmJihhPWQpfWlmKCFhKXtmb3IoO2wmJiFsW05jXSYmbCE9PWM7KUZ1KGwpJiZyUyhsW0tpXSxsKSxsPWxbZmNdO251bGw9PT1sJiYobD1jKSxGdShsKSYmclMobFtLaV0sbCksYT1sJiZsW05jXX1sPWF9fShsKX19ZnVuY3Rpb24gclMoYyxsKXtpZigyNTYmbFtV''@;'; put 'put ''YV0pcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbVWFdJj0tMTI5LGxbVWFdfD0yNTYsbFt4Zl0mJmZ1bmN0aW9uIEEoYyl7aWYod2UoYyksc2UoYykpZm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXRlKGMucHJvZHVjZXJOb2RlW2xdLGMucHJvZHVjZXJJbmRl''@;'; put 'put ''eE9mVGhpc1tsXSk7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ubGVuZ3RoPWMucHJvZHVjZXJJbmRleE9mVGhpcy5sZW5ndGg9MCxjLmxpdmVDb25zdW1lck5vZGUmJihjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoPWMubGl2ZUNvbnN1bWVySW5kZXhP''@;'; put 'put ''ZlRoaXMubGVuZ3RoPTApfShsW3hmXSksZnVuY3Rpb24gZWooYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtkXV07aWYoIShoIGluc3RhbmNlb2YgUDEpKXtjb25zdCBmPWFbZCsx''@;'; put 'put ''XTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEQ9Zlt2KzFdO3UyKDQsTSxEKTt0cnl7RC5jYWxsKE0pfWZpbmFsbHl7dTIoNSxNLEQpfX1lbHNle3UyKDQsaCxmKTt0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7dTIoNSxoLGYp''@;'; put 'put ''fX19fX0oYyxsKSxmdW5jdGlvbiBwRChjLGwpe2NvbnN0IGE9Yy5jbGVhbnVwLGQ9bFtYMF07aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aC0xO2YrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBhW2ZdKXtjb25zdCB2PWFbZiszXTt2Pj0wP2Rbdl0oKTpkWy12XS51bnN1YnNjcmli''@;'; put 'put ''ZSgpLGYrPTJ9ZWxzZSBhW2ZdLmNhbGwoZFthW2YrMV1dKTtudWxsIT09ZCYmKGxbWDBdPW51bGwpO2NvbnN0IGg9bFtvMl07aWYobnVsbCE9PWgpe2xbbzJdPW51bGw7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspKDAsaFtmXSkoKX19KGMsbCksMT09PWxbS2ldLnR5cGUmJmxbYm9dLmRl''@;'; put 'put ''c3Ryb3koKTtjb25zdCBkPWxbUzRdO2lmKG51bGwhPT1kJiZIdShsW2ZjXSkpe2QhPT1sW2ZjXSYmblMoZCxsKTtjb25zdCBoPWxbdWRdO251bGwhPT1oJiZoLmRldGFjaFZpZXcoYyl9IWZ1bmN0aW9uIFdWKGMpe1NDLmRlbGV0ZShjW3cwXSl9KGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9u''@;'; put 'put ''IGFiKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gaVMoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtVbF07e2NvbnN0e2NvbXBvbmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRp''@;'; put 'put ''b246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PUpzLk5vbmV8fGY9PT1Kcy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gTDAoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWjQoYyxsLGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBv''@;'; put 'put ''YihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIGdEKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WjQoYyxsLGEsZCxoKTpvYihjLGwsYSl9ZnVuY3Rpb24gcTMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwpfWZ1bmN0aW9uIHU4KGMsbCxhKXtyZXR1cm4gWDMoYyxsLGEpfWxldCBz''@;'; put 'put ''UyxYMz1mdW5jdGlvbiBvUyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9MMChjLGEpOm51bGx9O2Z1bmN0aW9uIGwwKGMsbCxhLGQpe2NvbnN0IGg9YWIoYyxkLGwpLGY9bFtib10sTT11OChkLnBhcmVudHx8bFtyY10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxl''@;'; put 'put ''dCBEPTA7RDxhLmxlbmd0aDtEKyspZ0QoZixoLGFbRF0sTSwhMSk7ZWxzZSBnRChmLGgsYSxNLCExKTt2b2lkIDAhPT1zUyYmc1MoZixkLGwsYSxoKX1mdW5jdGlvbiBKMyhjLGwpe2lmKG51bGwhPT1sKXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEwwKGwsYyk7aWYoNCZhKXJldHVy''@;'; put 'put ''biBjUygtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gSjMoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBIdShoKT9jUygtMSxoKTpDbChoKX19aWYoMzImYSlyZXR1cm4gSkMobCxjKSgpfHxDbChjW2wuaW5kZXhdKTt7Y29u''@;'; put 'put ''c3QgZD1tRChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06SjMoVDQoY1tabF0pLGQpOkozKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gbUQoYyxsKXtyZXR1cm4gbnVsbCE9PWw/Y1tabF1bcmNdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxs''@;'; put 'put ''fWZ1bmN0aW9uIGNTKGMsbCl7Y29uc3QgYT1nYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtLaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gSjMoZCxoKX1yZXR1cm4gbFt2dV19ZnVuY3Rpb24gdVMoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7Y29u''@;'; put 'put ''c3QgTT1kW2EuaW5kZXhdLEQ9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmanUoQ2woTSksZCksYS5mbGFnc3w9MiksMzImfmEuZmxhZ3MpaWYoOCZEKXVTKGMsbCxhLmNoaWxkLGQsaCxmLCExKSxCNShsLGMsaCxNLGYpO2Vsc2UgaWYoMzImRCl7Y29uc3QgWj1KQyhhLGQpO2xldCByZTtmb3Io''@;'; put 'put ''O3JlPVooKTspQjUobCxjLGgscmUsZik7QjUobCxjLGgsTSxmKX1lbHNlIDE2JkQ/YkQoYyxsLGQsYSxoLGYpOkI1KGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBzYihjLGwsYSxkLGgsZil7dVMoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVu''@;'; put 'put ''Y3Rpb24gYkQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9YVtabF0sRD12W3JjXS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShEKSlmb3IobGV0IFo9MDtaPEQubGVuZ3RoO1orKylCNShsLGMsaCxEW1pdLGYpO2Vsc2V7bGV0IFo9RDtjb25zdCByZT12W2ZjXTtadihk''@;'; put 'put ''KSYmKFouZmxhZ3N8PTEyOCksdVMoYyxsLFoscmUsaCxmLCEwKX19ZnVuY3Rpb24gd0QoYyxsLGEpeyIiPT09YT9jLnJlbW92ZUF0dHJpYnV0ZShsLCJjbGFzcyIpOmMuc2V0QXR0cmlidXRlKGwsImNsYXNzIixhKX1mdW5jdGlvbiBDRChjLGwsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZCxjbGFz''@;'; put 'put ''c2VzOmgsc3R5bGVzOmZ9PWE7bnVsbCE9PWQmJm00KGMsbCxkKSxudWxsIT09aCYmd0QoYyxsLGgpLG51bGwhPT1mJiZmdW5jdGlvbiBfRChjLGwsYSl7Yy5zZXRBdHRyaWJ1dGUobCwic3R5bGUiLGEpfShjLGwsZil9Y29uc3QgUm89e307ZnVuY3Rpb24gZmUoYz0xKXtkUyhscygpLGRpKCks''@;'; put 'put ''VnUoKStjLCExKX1mdW5jdGlvbiBkUyhjLGwsYSxkKXtpZighZClpZigzJn5sW1VhXSl7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJk92KGwsZiwwLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYmTHYobCxmLGEpfUE0KGEpfWZ1bmN0aW9u''@;'; put 'put ''IEdlKGMsbD1yYS5EZWZhdWx0KXtjb25zdCBhPWRpKCk7cmV0dXJuIG51bGw9PT1hP3hyKGMsbCk6aGsodWwoKSxhLFlpKGMpLGwpfWZ1bmN0aW9uIE1EKGMsbCxhLGQsaCxmKXtjb25zdCB2PV9lKG51bGwpO3RyeXtsZXQgTT1udWxsO2gmTm4uU2lnbmFsQmFzZWQmJihNPWxbZF1bbWVdKSxu''@;'; put 'put ''dWxsIT09TSYmdm9pZCAwIT09TS50cmFuc2Zvcm1GbiYmKGY9TS50cmFuc2Zvcm1GbihmKSksaCZObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSYmKGY9Yy5pbnB1dFRyYW5zZm9ybXNbZF0uY2FsbChsLGYpKSxudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwsTSxmLGEsZCk6WUEo''@;'; put 'put ''bCxNLGQsZil9ZmluYWxseXtfZSh2KX19ZnVuY3Rpb24gbGIoYyxsLGEsZCxoLGYsdixNLEQsWixyZSl7Y29uc3QgY2U9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gY2VbVWxdPWgsY2VbVWFdPTIwNHxkLChudWxsIT09Wnx8YyYmMjA0OCZjW1VhXSkmJihjZVtVYV18PTIwNDgpLGVDKGNl''@;'; put 'put ''KSxjZVtmY109Y2VbbzBdPWMsY2VbY2xdPWEsY2VbTDFdPXZ8fGMmJmNbTDFdLGNlW2JvXT1NfHxjJiZjW2JvXSxjZVtwY109RHx8YyYmY1twY118fG51bGwsY2VbcmNdPWYsY2VbdzBdPWZ1bmN0aW9uIFVWKCl7cmV0dXJuIHpWKyt9KCksY2VbbnVdPXJlLGNlW2EyXT1aLGNlW1psXT0yPT1s''@;'; put 'put ''LnR5cGU/Y1tabF06Y2UsY2V9ZnVuY3Rpb24gajUoYyxsLGEsZCxoKXtsZXQgZj1jLmRhdGFbbF07aWYobnVsbD09PWYpZj1mdW5jdGlvbiBoUyhjLGwsYSxkLGgpe2NvbnN0IGY9ckMoKSx2PWlDKCksRD1jLmRhdGFbbF09ZnVuY3Rpb24gREQoYyxsLGEsZCxoLGYpe2xldCB2PWw/bC5pbmpl''@;'; put 'put ''Y3RvckluZGV4Oi0xLE09MDtyZXR1cm4gXzUoKSYmKE18PTEyOCkse3R5cGU6YSxpbmRleDpkLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp2LGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZz''@;'; put 'put ''ZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOk0scHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6aCxhdHRyczpmLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6''@;'; put 'put ''bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGws''@;'; put 'put ''cmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIG51bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9RCksbnVsbCE9PWYmJih2P251bGw9PWYuY2hpbGQmJm51bGwhPT1E''@;'; put 'put ''LnBhcmVudCYmKGYuY2hpbGQ9RCk6bnVsbD09PWYubmV4dCYmKGYubmV4dD1ELEQucHJldj1mKSksRH0oYyxsLGEsZCxoKSxmdW5jdGlvbiBiVigpe3JldHVybiBDby5sRnJhbWUuaW5JMThufSgpJiYoZi5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmZi50eXBlKXtmLnR5cGU9YSxmLnZhbHVlPWQs''@;'; put 'put ''Zi5hdHRycz1oO2NvbnN0IHY9ZnVuY3Rpb24gJDYoKXtjb25zdCBjPUNvLmxGcmFtZSxsPWMuY3VycmVudFROb2RlO3JldHVybiBjLmlzUGFyZW50P2w6bC5wYXJlbnR9KCk7Zi5pbmplY3RvckluZGV4PW51bGw9PT12Py0xOnYuaW5qZWN0b3JJbmRleH1yZXR1cm4gaDIoZiwhMCksZn1mdW5j''@;'; put 'put ''dGlvbiBoOChjLGwsYSxkKXtpZigwPT09YSlyZXR1cm4tMTtjb25zdCBoPWwubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8YTtmKyspbC5wdXNoKGQpLGMuYmx1ZXByaW50LnB1c2goZCksYy5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGh9ZnVuY3Rpb24geEQoYyxsLGEsZCxoKXtjb25zdCBmPVZ1KCks''@;'; put 'put ''dj0yJmQ7dHJ5e0E0KC0xKSx2JiZsLmxlbmd0aD53byYmZFMoYyxsLHdvLCExKSx1Mih2PzI6MCxoKSxhKGQsaCl9ZmluYWxseXtBNChmKSx1Mih2PzM6MSxoKX19ZnVuY3Rpb24gZlMoYyxsLGEpe2lmKHJ1KGwpKXtjb25zdCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5k''@;'; put 'put ''O2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gcFMoYyxsLGEpe3RrKCkmJihmdW5jdGlvbiBoaihjLGwsYSxkKXtj''@;'; put 'put ''b25zdCBoPWEuZGlyZWN0aXZlU3RhcnQsZj1hLmRpcmVjdGl2ZUVuZDtFZihhKSYmZnVuY3Rpb24gYmooYyxsLGEpe2NvbnN0IGQ9TDAobCxjKSxoPWNiKGEpO2xldCB2PTE2O2Euc2lnbmFscz92PTQwOTY6YS5vblB1c2gmJih2PTY0KTtjb25zdCBNPWY4KGMsbGIoYyxoLG51bGwsdixkLGws''@;'; put 'put ''bnVsbCxjW0wxXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZCxhKSxudWxsLG51bGwsbnVsbCkpO2NbbC5pbmRleF09TX0obCxhLGMuZGF0YVtoK2EuY29tcG9uZW50T2Zmc2V0XSksYy5maXJzdENyZWF0ZVBhc3N8fE52KGEsbCksanUoZCxsKTtjb25zdCB2PWEuaW5pdGlhbElu''@;'; put 'put ''cHV0cztmb3IobGV0IE09aDtNPGY7TSsrKXtjb25zdCBEPWMuZGF0YVtNXSxaPUQ0KGwsYyxNLGEpO2p1KFosbCksbnVsbCE9PXYmJnViKDAsTS1oLFosRCwwLHYpLFZjKEQpJiYoTzEoYS5pbmRleCxsKVtjbF09RDQobCxjLE0sYSkpfX0oYyxsLGEsTDAoYSxsKSksISg2NCZ+YS5mbGFncykm''@;'; put 'put ''Jk9EKGMsbCxhKSl9ZnVuY3Rpb24gZ1MoYyxsLGE9TDApe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtjb25zdCB2PWRbZisxXSxNPS0xPT09dj9hKGwsYyk6Y1t2XTtjW2grK109TX19fWZ1bmN0''@;'; put 'put ''aW9uIGNiKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PW1TKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0''@;'; put 'put ''cyxjLmlkKTpsfWZ1bmN0aW9uIG1TKGMsbCxhLGQsaCxmLHYsTSxELFoscmUpe2NvbnN0IGNlPXdvK2QsYmU9Y2UraCxFZT1mdW5jdGlvbiBpaihjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2goZDxjP251bGw6Um8pO3JldHVybiBhfShjZSxiZSksQmU9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFo/WigpOlo7cmV0dXJuIEVlW0tpXT17dHlwZTpjLGJsdWVwcmludDpFZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOkVlLnNsaWNlKCkuZmlsbChudWxsLGNlKSxiaW5kaW5nU3RhcnRJbmRleDpjZSxleHBhbmRvU3Rh''@;'; put 'put ''cnRJbmRleDpiZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250''@;'; put 'put ''ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpCZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOnJlfX1sZXQgRUQ9KCk9Pm51bGw7ZnVuY3Rpb24gSUQoYyxsLGEsZCxo''@;'; put 'put ''KXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBNLEQ9Tm4uTm9uZTtBcnJheS5pc0FycmF5KHYpPyhNPXZbMF0sRD12WzFdKTpNPXY7bGV0IFo9ZjtpZihudWxsIT09''@;'; put 'put ''aCl7aWYoIWguaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Wj1oW2ZdfTA9PT1jP1JEKGQsYSxaLE0sRCk6UkQoZCxhLFosTSl9cmV0dXJuIGR9ZnVuY3Rpb24gUkQoYyxsLGEsZCxoKXtsZXQgZjtjLmhhc093blByb3BlcnR5KGEpPyhmPWNbYV0pLnB1c2gobCxkKTpmPWNbYV09W2wsZF0s''@;'; put 'put ''dm9pZCAwIT09aCYmZi5wdXNoKGgpfWZ1bmN0aW9uIEYwKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1MMChsLGEpO2xldCByZSxaPWwuaW5wdXRzOyFNJiZudWxsIT1aJiYocmU9WltkXSk/KENTKGMsYSxyZSxkLGgpLEVmKGwpJiZmdW5jdGlvbiBjaihjLGwpe2NvbnN0IGE9TzEobCxjKTsx''@;'; put 'put ''NiZhW1VhXXx8KGFbVWFdfD02NCl9KGEsbC5pbmRleCkpOjMmbC50eXBlJiYoZD1mdW5jdGlvbiBsaihjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJI''@;'; put 'put ''VE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpKX1mdW5jdGlvbiB2UyhjLGwsYSxkKXtpZih0aygpKXtjb25zdCBoPW51bGw9PT1kP251''@;'; put 'put ''bGw6eyIiOi0xfSxmPWZ1bmN0aW9uIGZqKGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGwsaD1udWxsO2lmKGEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXTtpZihiNChsLHYuc2VsZWN0b3JzLCExKSlpZihkfHwoZD1bXSksVmModikp''@;'; put 'put ''aWYobnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBNPVtdO2g9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh2LE0saCksZC51bnNoaWZ0KC4uLk0sdikseVMoYyxsLE0ubGVuZ3RoKX1lbHNlIGQudW5zaGlmdCh2KSx5UyhjLGwsMCk7ZWxzZSBoPWh8fG5l''@;'; put 'put ''dyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnM/Lih2LGQsaCksZC5wdXNoKHYpfXJldHVybiBudWxsPT09ZD9udWxsOltkLGhdfShjLGEpO2xldCB2LE07bnVsbD09PWY/dj1NPW51bGw6W3YsTV09ZixudWxsIT09diYmYlMoYyxsLGEsdixoLE0pLGgmJmZ1bmN0aW9uIHBqKGMsbCxhKXtp''@;'; put 'put ''ZihsKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51bGw9PWYpdGhyb3cgbmV3IFFuKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX19KGEsZCxoKX1hLm1lcmdlZEF0dHJzPXZmKGEubWVyZ2VkQXR0cnMs''@;'; put 'put ''YS5hdHRycyl9ZnVuY3Rpb24gYlMoYyxsLGEsZCxoLGYpe2ZvcihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKWhkKE52KGEsbCksYyxkW1pdLnR5cGUpOyFmdW5jdGlvbiBtaihjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJ''@;'; put 'put ''bmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKyspe2NvbnN0IHJlPWRbWl07cmUucHJvdmlkZXJzUmVzb2x2ZXImJnJlLnByb3ZpZGVyc1Jlc29sdmVyKHJlKX1sZXQgdj0hMSxNPSExLEQ9aDgoYyxsLGQubGVuZ3RoLG51bGwpO2Zv''@;'; put 'put ''cihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKXtjb25zdCByZT1kW1pdO2EubWVyZ2VkQXR0cnM9dmYoYS5tZXJnZWRBdHRycyxyZS5ob3N0QXR0cnMpLHZqKGMsYSxsLEQscmUpLGdqKEQscmUsaCksbnVsbCE9PXJlLmNvbnRlbnRRdWVyaWVzJiYoYS5mbGFnc3w9NCksKG51bGwhPT1yZS5ob3N0''@;'; put 'put ''QmluZGluZ3N8fG51bGwhPT1yZS5ob3N0QXR0cnN8fDAhPT1yZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgY2U9cmUudHlwZS5wcm90b3R5cGU7IXYmJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdPbkluaXR8fGNlLm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckhvb2tzPz89W10pLnB1''@;'; put 'put ''c2goYS5pbmRleCksdj0hMCksIU0mJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLE09ITApLEQrK30hZnVuY3Rpb24gc2ooYyxsLGEpe2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQsZj1jLmRhdGEsdj1sLmF0''@;'; put 'put ''dHJzLE09W107bGV0IEQ9bnVsbCxaPW51bGw7Zm9yKGxldCByZT1sLmRpcmVjdGl2ZVN0YXJ0O3JlPGg7cmUrKyl7Y29uc3QgY2U9ZltyZV0sYmU9YT9hLmdldChjZSk6bnVsbCxCZT1iZT9iZS5vdXRwdXRzOm51bGw7RD1JRCgwLGNlLmlucHV0cyxyZSxELGJlP2JlLmlucHV0czpudWxsKSxa''@;'; put 'put ''PUlEKDEsY2Uub3V0cHV0cyxyZSxaLEJlKTtjb25zdCBxZT1udWxsPT09RHx8bnVsbD09PXZ8fHY0KGwpP251bGw6RkQoRCxyZSx2KTtNLnB1c2gocWUpfW51bGwhPT1EJiYoRC5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKGwuZmxhZ3N8PTgpLEQuaGFzT3duUHJvcGVydHkoInN0eWxlIikm''@;'; put 'put ''JihsLmZsYWdzfD0xNikpLGwuaW5pdGlhbElucHV0cz1NLGwuaW5wdXRzPUQsbC5vdXRwdXRzPVp9KGMsYSxmKX1mdW5jdGlvbiBPRChjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24gX1YoKXtyZXR1cm4gQ28ubEZy''@;'; put 'put ''YW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7QTQoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sWj1sW01dO29DKE0pLChudWxsIT09RC5ob3N0QmluZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZQRChELFopfX1maW5h''@;'; put 'put ''bGx5e0E0KC0xKSxvQyh2KX19ZnVuY3Rpb24gUEQoYyxsKXtudWxsIT09Yy5ob3N0QmluZGluZ3MmJmMuaG9zdEJpbmRpbmdzKDEsbCl9ZnVuY3Rpb24geVMoYyxsLGEpe2wuY29tcG9uZW50T2Zmc2V0PWEsKGMuY29tcG9uZW50cz8/PVtdKS5wdXNoKGwuaW5kZXgpfWZ1bmN0aW9uIGdqKGMs''@;'; put 'put ''bCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztWYyhsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiB2aihjLGwsYSxkLGgpe2MuZGF0YVtkXT1oO2NvbnN0IGY9aC5mYWN0b3J5fHwoaC5mYWN0b3J5PW11''@;'; put 'put ''KGgudHlwZSkpLHY9bmV3IFAxKGYsVmMoaCksR2UpO2MuYmx1ZXByaW50W2RdPXYsYVtkXT12LGZ1bmN0aW9uIExEKGMsbCxhLGQsaCl7Y29uc3QgZj1oLmhvc3RCaW5kaW5ncztpZihmKXtsZXQgdj1jLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09diYmKHY9Yy5ob3N0QmluZGluZ09wQ29k''@;'; put 'put ''ZXM9W10pO2NvbnN0IE09fmwuaW5kZXg7KGZ1bmN0aW9uIGRqKGMpe2xldCBsPWMubGVuZ3RoO2Zvcig7bD4wOyl7Y29uc3QgYT1jWy0tbF07aWYoIm51bWJlciI9PXR5cGVvZiBhJiZhPDApcmV0dXJuIGF9cmV0dXJuIDB9KSh2KSE9TSYmdi5wdXNoKE0pLHYucHVzaChhLGQsZil9fShjLGws''@;'; put 'put ''ZCxoOChjLGEsaC5ob3N0VmFycyxSbyksaCl9ZnVuY3Rpb24gdWgoYyxsLGEsZCxoLGYpe2NvbnN0IHY9TDAoYyxsKTshZnVuY3Rpb24gX1MoYyxsLGEsZCxoLGYsdil7aWYobnVsbD09ZiljLnJlbW92ZUF0dHJpYnV0ZShsLGgsYSk7ZWxzZXtjb25zdCBNPW51bGw9PXY/Q2EoZik6dihmLGR8''@;'; put 'put ''fCIiLGgpO2Muc2V0QXR0cmlidXRlKGwsaCxNLGEpfX0obFtib10sdixmLGMudmFsdWUsYSxkLGgpfWZ1bmN0aW9uIHViKGMsbCxhLGQsaCxmKXtjb25zdCB2PWZbbF07aWYobnVsbCE9PXYpZm9yKGxldCBNPTA7TTx2Lmxlbmd0aDspTUQoZCxhLHZbTSsrXSx2W00rK10sdltNKytdLHZbTSsr''@;'; put 'put ''XSl9ZnVuY3Rpb24gRkQoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigwIT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3Qgdj1j''@;'; put 'put ''W2ZdO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MylpZih2W01dPT09bCl7ZC5wdXNoKGYsdltNKzFdLHZbTSsyXSxhW2grMV0pO2JyZWFrfX1oKz0yfWVsc2UgaCs9MjtlbHNlIGgrPTR9cmV0dXJuIGR9ZnVuY3Rpb24gd1MoYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxs''@;'; put 'put ''LGEsbnVsbCxudWxsXX1mdW5jdGlvbiBIRChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO0Iz''@;'; put 'put ''KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIGY4KGMsbCl7cmV0dXJuIGNbU2ZdP2NbQzRdW05jXT1sOmNbU2ZdPWwsY1tDNF09bCxsfWZ1bmN0aW9uIGRiKGMsbCxhKXtCMygwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9''@;'; put 'put ''ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gTkQoYyl7cmV0dXJuIGNbWDBdfHwoY1tYMF09W10pfWZ1bmN0aW9uIHA4KGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFc0KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFZjKGMpKSYmKGE9ZnVuY3Rpb24gSncoYyl7''@;'; put 'put ''Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW3o2XSlyZXR1cm4gYztjPWNbVWxdfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtib119ZnVuY3Rpb24gejUoYyxsKXtjb25zdCBhPWNbcGNdLGQ9YT9hLmdldChnMixudWxsKTpudWxsO2QmJmQuaGFuZGxl''@;'; put 'put ''RXJyb3IobCl9ZnVuY3Rpb24gQ1MoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3Qgdj1hW2YrK10sTT1hW2YrK10sRD1hW2YrK107TUQoYy5kYXRhW3ZdLGxbdl0sZCxNLEQsaCl9fWZ1bmN0aW9uIHYyKGMsbCxhKXtjb25zdCBkPXk1KGwsYyk7IWZ1bmN0aW9uIGRE''@;'; put 'put ''KGMsbCxhKXtjLnNldFZhbHVlKGwsYSl9KGNbYm9dLGQsYSl9ZnVuY3Rpb24gX2ooYyxsKXtjb25zdCBhPU8xKGwsYyksZD1hW0tpXTshZnVuY3Rpb24gd2ooYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmludC5sZW5ndGg7YSsrKWwucHVzaChjLmJsdWVwcmludFthXSl9KGQs''@;'; put 'put ''YSk7Y29uc3QgaD1hW1VsXTtudWxsIT09aCYmbnVsbD09PWFbbnVdJiYoYVtudV09UkMoaCxhW3BjXSkpLFNTKGQsYSxhW2NsXSl9ZnVuY3Rpb24gU1MoYyxsLGEpe0s2KGwpO3RyeXtjb25zdCBkPWMudmlld1F1ZXJ5O251bGwhPT1kJiZkYigxLGQsYSk7Y29uc3QgaD1jLnRlbXBsYXRlO251''@;'; put 'put ''bGwhPT1oJiZ4RChjLGwsaCwxLGEpLGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5maXJzdENyZWF0ZVBhc3M9ITEpLGxbdWRdPy5maW5pc2hWaWV3Q3JlYXRpb24oYyksYy5zdGF0aWNDb250ZW50UXVlcmllcyYmSEQoYyxsKSxjLnN0YXRpY1ZpZXdRdWVyaWVzJiZkYigyLGMudmlld1F1ZXJ5LGEp''@;'; put 'put ''O2NvbnN0IGY9Yy5jb21wb25lbnRzO251bGwhPT1mJiZmdW5jdGlvbiBDaihjLGwpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKV9qKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3MmJihjLmluY29tcGxldGVGaXJzdFBhc3M9ITAsYy5maXJzdENyZWF0''@;'; put 'put ''ZVBhc3M9ITEpLGR9ZmluYWxseXtsW1VhXSY9LTUsdzUoKX19ZnVuY3Rpb24gVTUoYyxsKXtyZXR1cm4hbHx8bnVsbD09PWwuZmlyc3RDaGlsZHx8WnYoYyl9ZnVuY3Rpb24gdjgoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0tpXTtpZihmdW5jdGlvbiB0UyhjLGwsYSxkKXtjb25zdCBoPWdjK2Qs''@;'; put 'put ''Zj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bTmNdPWwpLGQ8Zi1nYz8obFtOY109YVtoXSxQbChhLGdjK2QsbCkpOihhLnB1c2gobCksbFtOY109bnVsbCksbFtmY109YTtjb25zdCB2PWxbUzRdO251bGwhPT12JiZhIT09diYmZnVuY3Rpb24gUUIoYyxsKXtjb25zdCBhPWNbVjNdO2xbWmxdIT09''@;'; put 'put ''bFtmY11bZmNdW1psXSYmKGNbVWFdfD1iNS5IYXNUcmFuc3BsYW50ZWRWaWV3cyksbnVsbD09PWE/Y1tWM109W2xdOmEucHVzaChsKX0odixsKTtjb25zdCBNPWxbdWRdO251bGwhPT1NJiZNLmluc2VydFZpZXcoYyksbkMobCksbFtVYV18PTEyOH0oaCxsLGMsYSksZCl7Y29uc3Qgdj1jUyhh''@;'; put 'put ''LGMpLE09bFtib10sRD1xMyhNLGNbdnVdKTtudWxsIT09RCYmZnVuY3Rpb24gWEIoYyxsLGEsZCxoLGYpe2RbVWxdPWgsZFtyY109bCxzYihjLGQsYSwxLGgsZil9KGgsY1tyY10sTSxsLEQsdil9Y29uc3QgZj1sW251XTtudWxsIT09ZiYmbnVsbCE9PWYuZmlyc3RDaGlsZCYmKGYuZmlyc3RD''@;'; put 'put ''aGlsZD1udWxsKX1mdW5jdGlvbiBiOChjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChDbChmKSksSHUoZikmJlZEKGYsZCk7Y29uc3Qgdj1hLnR5cGU7aWYoOCZ2KWI4KGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7''@;'; put 'put ''Y29uc3QgTT1KQyhhLGwpO2xldCBEO2Zvcig7RD1NKCk7KWQucHVzaChEKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09bUQobCxhKTtpZihBcnJheS5pc0FycmF5KE0pKWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEQ9VDQobFtabF0pO2I4KERbS2ldLEQsTSxkLCEwKX19YT1oP2EucHJvamVjdGlv''@;'; put 'put ''bk5leHQ6YS5uZXh0fXJldHVybiBkfWZ1bmN0aW9uIFZEKGMsbCl7Zm9yKGxldCBhPWdjO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV0saD1kW0tpXS5maXJzdENoaWxkO251bGwhPT1oJiZiOChkW0tpXSxkLGgsbCl9Y1t2dV0hPT1jW1VsXSYmbC5wdXNoKGNbdnVdKX1sZXQgQkQ9W107''@;'; put 'put ''Y29uc3QgRWo9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5leHRQcm9kdWNlckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lk''@;'; put 'put ''IDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9kdWNlclJlY29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5''@;'; put 'put ''OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e30sY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57RzYoYy5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1t4Zl09dGhpc319LGpEPTEwMDtmdW5jdGlvbiBoYihjLGw9''@;'; put 'put ''ITAsYT0wKXtjb25zdCBkPWNbTDFdLGg9ZC5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBUaihjLGwpe3hTKGMsbCk7bGV0IGE9MDtmb3IoO1R2KGMpOyl7aWYoYT09PWpEKXRocm93IG5ldyBRbigxMDMsITEpO2ErKyx4UyhjLDEpfX0oYyxhKX1jYXRjaCh2KXt0''@;'; put 'put ''aHJvdyBsJiZ6NShjLHYpLHZ9ZmluYWxseXtoLmVuZD8uKCksZC5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCl9fWZ1bmN0aW9uIEFqKGMsbCxhLGQpe2NvbnN0IGg9bFtVYV07aWYoISgyNTYmfmgpKXJldHVybjtsW0wxXS5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCksSzYobCk7bGV0''@;'; put 'put ''IHY9bnVsbCxNPW51bGw7KGZ1bmN0aW9uIGtqKGMpe3JldHVybiAyIT09Yy50eXBlfSkoYykmJihNPWZ1bmN0aW9uIFNqKGMpe3JldHVybiBjW3hmXT8/ZnVuY3Rpb24gTWooYyl7Y29uc3QgbD1CRC5wb3AoKT8/T2JqZWN0LmNyZWF0ZShFaik7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCks''@;'; put 'put ''dj1mdW5jdGlvbiBqKGMpe3JldHVybiBjJiYoYy5uZXh0UHJvZHVjZXJJbmRleD0wKSxfZShjKX0oTSkpO3RyeXtlQyhsKSxmdW5jdGlvbiByayhjKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleD1jfShjLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09YSYmeEQoYyxsLGEsMixkKTtj''@;'; put 'put ''b25zdCBEPSEoMyZ+aCk7aWYoRCl7Y29uc3QgY2U9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWNlJiZMdihsLGNlLG51bGwpfWVsc2V7Y29uc3QgY2U9Yy5wcmVPcmRlckhvb2tzO251bGwhPT1jZSYmT3YobCxjZSwwLG51bGwpLGRDKGwsMCl9aWYoZnVuY3Rpb24gRGooYyl7Zm9yKGxl''@;'; put 'put ''dCBsPUVrKGMpO251bGwhPT1sO2w9VGsobCkpe2lmKCEobFtVYV0mYjUuSGFzVHJhbnNwbGFudGVkVmlld3MpKWNvbnRpbnVlO2NvbnN0IGE9bFtWM107Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NWKGFbZF0pfX19KGwpLHpEKGwsMCksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJkhE''@;'; put 'put ''KGMsbCksRCl7Y29uc3QgY2U9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09Y2UmJkx2KGwsY2UpfWVsc2V7Y29uc3QgY2U9Yy5jb250ZW50SG9va3M7bnVsbCE9PWNlJiZPdihsLGNlLDEpLGRDKGwsMSl9IWZ1bmN0aW9uIHJqKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2Rlcztp''@;'; put 'put ''ZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApQTQofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO3lWKHYsZiksTSgyLGxbZl0pfX19ZmluYWxseXtBNCgtMSl9fShjLGwpO2NvbnN0IFo9Yy5jb21wb25lbnRz''@;'; put 'put ''O251bGwhPT1aJiZaRChsLFosMCk7Y29uc3QgcmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PXJlJiZkYigyLHJlLGQpLEQpe2NvbnN0IGNlPWMudmlld0NoZWNrSG9va3M7bnVsbCE9PWNlJiZMdihsLGNlKX1lbHNle2NvbnN0IGNlPWMudmlld0hvb2tzO251bGwhPT1jZSYmT3YobCxjZSwyKSxk''@;'; put 'put ''QyhsLDIpfWlmKCEwPT09Yy5maXJzdFVwZGF0ZVBhc3MmJihjLmZpcnN0VXBkYXRlUGFzcz0hMSksbFt2NV0pe2Zvcihjb25zdCBjZSBvZiBsW3Y1XSljZSgpO2xbdjVdPW51bGx9bFtVYV0mPS03M31jYXRjaChEKXt0aHJvdyBHNihsKSxEfWZpbmFsbHl7bnVsbCE9PU0mJihmdW5jdGlvbiBF''@;'; put 'put ''KGMsbCl7aWYoX2UobCksYyYmdm9pZCAwIT09Yy5wcm9kdWNlck5vZGUmJnZvaWQgMCE9PWMucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYoc2UoYykpZm9yKGxldCBhPWMubmV4dFByb2R1Y2VySW5kZXg7YTxjLnByb2R1Y2VyTm9k''@;'; put 'put ''ZS5sZW5ndGg7YSsrKXRlKGMucHJvZHVjZXJOb2RlW2FdLGMucHJvZHVjZXJJbmRleE9mVGhpc1thXSk7Zm9yKDtjLnByb2R1Y2VyTm9kZS5sZW5ndGg+Yy5uZXh0UHJvZHVjZXJJbmRleDspYy5wcm9kdWNlck5vZGUucG9wKCksYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5wb3AoKSxjLnBy''@;'; put 'put ''b2R1Y2VySW5kZXhPZlRoaXMucG9wKCl9fShNLHYpLGZ1bmN0aW9uIHhqKGMpe2MubFZpZXdbeGZdIT09YyYmKGMubFZpZXc9bnVsbCxCRC5wdXNoKGMpKX0oTSkpLHc1KCl9fWZ1bmN0aW9uIHpEKGMsbCl7Zm9yKGxldCBhPUVrKGMpO251bGwhPT1hO2E9VGsoYSkpZm9yKGxldCBkPWdjO2Q8''@;'; put 'put ''YS5sZW5ndGg7ZCsrKVVEKGFbZF0sbCl9ZnVuY3Rpb24gSWooYyxsLGEpe1VEKE8xKGwsYyksYSl9ZnVuY3Rpb24gVUQoYyxsKXtRdyhjKSYmeFMoYyxsKX1mdW5jdGlvbiB4UyhjLGwpe2NvbnN0IGQ9Y1tLaV0saD1jW1VhXSxmPWNbeGZdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9''@;'; put 'put ''ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0JmgpLHZ8fD0hKCFmPy5kaXJ0eXx8IW0oZikpLGYmJihmLmRpcnR5PSExKSxjW1VhXSY9LTkyMTcsdilBaihkLGMsZC50ZW1wbGF0ZSxjW2NsXSk7ZWxzZSBpZig4MTkyJmgpe3pEKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0m''@;'; put 'put ''JlpEKGMsTSwxKX19ZnVuY3Rpb24gWkQoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKUlqKGMsbFtkXSxhKX1mdW5jdGlvbiB5OChjKXtmb3IoY1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtjOyl7Y1tVYV18PTY0O2NvbnN0IGw9VDQoYyk7aWYoeDQo''@;'; put 'put ''YykmJiFsKXJldHVybiBjO2M9bH1yZXR1cm4gbnVsbH1jbGFzcyBfOHtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbS2ldO3JldHVybiBiOChhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihsLGEsZD0hMCl7dGhpcy5fbFZpZXc9bCx0aGlzLl9jZFJlZklu''@;'; put 'put ''amVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W2NsXX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1tjbF09bH1nZXQg''@;'; put 'put ''ZGVzdHJveWVkKCl7cmV0dXJuISgyNTYmfnRoaXMuX2xWaWV3W1VhXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3W2ZjXTtpZihI''@;'; put 'put ''dShsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHM4KGwsZCksT3UoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7QXYodGhpcy5fbFZpZXcsbCl9bWFy''@;'; put 'put ''a0ZvckNoZWNrKCl7eTgodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbVWFdJj0tMTI5fXJlYXR0YWNoKCl7bkModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3W1VhXXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1tVYV18''@;'; put 'put ''PTEwMjQsaGIodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRh''@;'; put 'put ''Y2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZkQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihsKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hcHBSZWY9bCxuQyh0aGlzLl9sVmll''@;'; put 'put ''dyl9fWxldCBTbD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU9qfX1yZXR1cm4gY30pKCk7Y29uc3QgUmo9U2wsTGo9Y2xhc3MgZXh0ZW5kcyBSantjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVj''@;'; put 'put ''bGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChs''@;'; put 'put ''LGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gZzgoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEQ9bGIoYyxmLGEsNDA5NiZjW1VhXT80MDk2OjE2LG51bGwsbCxudWxsLG51bGwsZD8uaW5qZWN0b3I/P251bGws''@;'; put 'put ''ZD8uZW1iZWRkZWRWaWV3SW5qZWN0b3I/P251bGwsZD8uZGVoeWRyYXRlZFZpZXc/P251bGwpO0RbUzRdPWNbbC5pbmRleF07Y29uc3QgcmU9Y1t1ZF07cmV0dXJuIG51bGwhPT1yZSYmKERbdWRdPXJlLmNyZWF0ZUVtYmVkZGVkVmlldyhmKSksU1MoZixELGEpLER9ZmluYWxseXtfZShoKX19''@;'; put 'put ''KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgXzgoaCl9fTtmdW5jdGlvbiBPaigpe3JldHVybiBmYih1bCgpLGRpKCkpfWZ1bmN0aW9uIGZiKGMs''@;'; put 'put ''bCl7cmV0dXJuIDQmYy50eXBlP25ldyBMaihsLGMsTDQoYyxsKSk6bnVsbH1jbGFzcyBiYnt9Y2xhc3Mgcnp7fWNsYXNzIFFEe31jbGFzcyBventyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBmdW5jdGlvbiBpeihjKXtjb25zdCBsPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9y''@;'; put 'put ''eSBmb3VuZCBmb3IgJHtQcihjKX0uYCk7cmV0dXJuIGwubmdDb21wb25lbnQ9YyxsfShsKX19bGV0IFc1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuTlVMTD1uZXcgb3p9fXJldHVybiBjfSkoKTtjbGFzcyB4OHt9bGV0IEVvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRl''@;'; put 'put ''c3Ryb3lOb2RlPW51bGx9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIHN6KCl7Y29uc3QgYz1kaSgpLGE9TzEodWwoKS5pbmRleCxjKTtyZXR1cm4oRnUoYSk/YTpjKVtib119KCl9fXJldHVybiBjfSkoKSxsej0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUlM9e30sZUk9bmV3IFNldDtmdW5jdGlvbiBiMihjKXtlSS5oYXMoYyl8fChlSS5hZGQoYykscGVyZm9ybWFuY2U/Lm1hcms/LigibWFya19mZWF0dXJl''@;'; put 'put ''X3VzYWdlIix7ZGV0YWlsOntmZWF0dXJlOmN9fSkpfWZ1bmN0aW9uIHRJKC4uLmMpe31jbGFzcyBXYXtjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6bD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmE9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRl''@;'; put 'put ''Y3Rpb246ZD0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgS3IoITEpLHRoaXMub25TdGFibGU9''@;'; put 'put ''bmV3IEtyKCExKSx0aGlzLm9uRXJyb3I9bmV3IEtyKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IFFuKDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IGg9dGhpcztoLl9uZXN0aW5nPTAsaC5fb3V0ZXI9aC5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1Ry''@;'; put 'put ''YWNraW5nWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksbCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxoLnNob3Vs''@;'; put 'put ''ZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IWQmJmEsaC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1kLGgubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGgubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uIGN6KCl7Y29uc3QgYz0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgVnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lO2xldCBsPVZ0W2M/InJlcXVlc3RBbmltYXRpb25GcmFtZSI6InNldFRpbWVvdXQiXSxhPVZ0W2M/ImNhbmNlbEFuaW1hdGlvbkZyYW1lIjoiY2xlYXJUaW1lb3V0Il07aWYodHlwZW9mIFpvbmU8InUiJiZsJiZhKXtjb25zdCBk''@;'; put 'put ''PWxbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2QmJihsPWQpO2NvbnN0IGg9YVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aCYmKGE9aCl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpsLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lOmF9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbiBoeihjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIGR6KGMpe2MuaXNDaGVja1N0YWJsZVJ1bm5pbmd8fC0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWR8fChjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u''@;'; put 'put ''RnJhbWVJZD1jLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZS5jYWxsKFZ0LCgpPT57Yy5mYWtlVG9wRXZlbnRUYXNrfHwoYy5mYWtlVG9wRXZlbnRUYXNrPVpvbmUucm9vdC5zY2hlZHVsZUV2ZW50VGFzaygiZmFrZVRvcEV2ZW50VGFzayIsKCk9PntjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u''@;'; put 'put ''RnJhbWVJZD0tMSxPUyhjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLExTKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9LHZvaWQgMCwoKT0+e30sKCk9Pnt9KSksYy5mYWtlVG9wRXZlbnRUYXNrLmludm9rZSgpfSksT1MoYykpfShjKX07Yy5faW5uZXI9Yy5faW5uZXIuZm9yayh7''@;'; put 'put ''bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihhLGQsaCxmLHYsTSk9PntpZihmdW5jdGlvbiBmeihjKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5sZW5ndGgpJiYhMD09PWNbMF0uZGF0YT8uX19pZ25vcmVfbmdfem9u''@;'; put 'put ''ZV9ffShNKSlyZXR1cm4gYS5pbnZva2VUYXNrKGgsZix2LE0pO3RyeXtyZXR1cm4geWIoYyksYS5pbnZva2VUYXNrKGgsZix2LE0pfWZpbmFsbHl7KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1mLnR5cGV8fGMuc2hvdWxkQ29hbGVzY2VSdW5D''@;'; put 'put ''aGFuZ2VEZXRlY3Rpb24pJiZsKCksbkkoYyl9fSxvbkludm9rZTooYSxkLGgsZix2LE0sRCk9Pnt0cnl7cmV0dXJuIHliKGMpLGEuaW52b2tlKGgsZix2LE0sRCl9ZmluYWxseXtjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZsKCksbkkoYyl9fSxvbkhhc1Rhc2s6KGEsZCxo''@;'; put 'put ''LGYpPT57YS5oYXNUYXNrKGgsZiksZD09PWgmJigibWljcm9UYXNrIj09Zi5jaGFuZ2U/KGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWYubWljcm9UYXNrLE9TKGMpLExTKGMpKToibWFjcm9UYXNrIj09Zi5jaGFuZ2UmJihjLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWYubWFjcm9UYXNrKSl9LG9u''@;'; put 'put ''SGFuZGxlRXJyb3I6KGEsZCxoLGYpPT4oYS5oYW5kbGVFcnJvcihoLGYpLGMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25FcnJvci5lbWl0KGYpKSwhMSl9KX0oaCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50Lmdl''@;'; put 'put ''dCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVdhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBRbig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoV2EuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFFuKDkw''@;'; put 'put ''OSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsdXosdEksdEkpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1m''@;'; put 'put ''aW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IHV6PXt9O2Z1bmN0aW9uIExTKGMpe2lmKDA9PWMuX25l''@;'; put 'put ''c3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgp''@;'; put 'put ''PT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIE9TKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29h''@;'; put 'put ''bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiB5YihjKXtjLl9uZXN0aW5nKyssYy5pc1N0YWJsZSYmKGMuaXNTdGFibGU9ITEsYy5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIG5JKGMpe2MuX25lc3Rp''@;'; put 'put ''bmctLSxMUyhjKX1jbGFzcyBySXtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBLcix0aGlz''@;'; put 'put ''Lm9uU3RhYmxlPW5ldyBLcix0aGlzLm9uRXJyb3I9bmV3IEtyfXJ1bihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiBsKCl9cnVuVGFzayhsLGEsZCxoKXtyZXR1cm4gbC5h''@;'; put 'put ''cHBseShhLGQpfX12YXIgUTM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FYXJseVJlYWQ9MF09IkVhcmx5UmVhZCIsY1tjLldyaXRlPTFdPSJXcml0ZSIsY1tjLk1peGVkUmVhZFdyaXRlPTJdPSJNaXhlZFJlYWRXcml0ZSIsY1tjLlJlYWQ9M109IlJlYWQiLGN9KFEzfHx7fSk7Y29uc3QgUFM9''@;'; put 'put ''e2Rlc3Ryb3koKXt9fTtmdW5jdGlvbiBfYihjLGwpeyFsJiZmdW5jdGlvbiB3ZihjKXtpZighTXYoKSl0aHJvdyBuZXcgUW4oLTIwMywhMSl9KCk7Y29uc3QgYT1sPy5pbmplY3Rvcj8/ZmkoRHMpO2lmKCFmdW5jdGlvbiBjaChjKXtyZXR1cm4iYnJvd3NlciI9PT0oYz8/ZmkoRHMpKS5nZXQo''@;'; put 'put ''aW8pfShhKSlyZXR1cm4gUFM7YjIoIk5nQWZ0ZXJOZXh0UmVuZGVyIik7Y29uc3QgZD1hLmdldChFOCksaD1kLmhhbmRsZXI/Pz1uZXcgb0ksZj1sPy5waGFzZT8/UTMuTWl4ZWRSZWFkV3JpdGUsdj0oKT0+e2gudW5yZWdpc3RlcihEKSxNKCl9LE09YS5nZXQoazUpLm9uRGVzdHJveSh2KSxE''@;'; put 'put ''PXEwKGEsKCk9Pm5ldyBhSShmLCgpPT57digpLGMoKX0pKTtyZXR1cm4gaC5yZWdpc3RlcihEKSx7ZGVzdHJveTp2fX1jbGFzcyBhSXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGhhc2U9bCx0aGlzLmNhbGxiYWNrRm49YSx0aGlzLnpvbmU9ZmkoV2EpLHRoaXMuZXJyb3JIYW5kbGVyPWZpKGcy''@;'; put 'put ''LHtvcHRpb25hbDohMH0pLGZpKGJiLHtvcHRpb25hbDohMH0pPy5ub3RpZnkoMSl9aW52b2tlKCl7dHJ5e3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNhbGxiYWNrRm4pfWNhdGNoKGwpe3RoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihsKX19fWNsYXNzIG9Je2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITEsdGhpcy5idWNrZXRzPXtbUTMuRWFybHlSZWFkXTpuZXcgU2V0LFtRMy5Xcml0ZV06bmV3IFNldCxbUTMuTWl4ZWRSZWFkV3JpdGVdOm5ldyBTZXQsW1EzLlJlYWRdOm5ldyBTZXR9LHRoaXMuZGVmZXJyZWRDYWxsYmFja3M9bmV3''@;'; put 'put ''IFNldH1yZWdpc3RlcihsKXsodGhpcy5leGVjdXRpbmdDYWxsYmFja3M/dGhpcy5kZWZlcnJlZENhbGxiYWNrczp0aGlzLmJ1Y2tldHNbbC5waGFzZV0pLmFkZChsKX11bnJlZ2lzdGVyKGwpe3RoaXMuYnVja2V0c1tsLnBoYXNlXS5kZWxldGUobCksdGhpcy5kZWZlcnJlZENhbGxiYWNrcy5k''@;'; put 'put ''ZWxldGUobCl9ZXhlY3V0ZSgpe3RoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzPSEwO2Zvcihjb25zdCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5idWNrZXRzKSlmb3IoY29uc3QgYSBvZiBsKWEuaW52b2tlKCk7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITE7Zm9yKGNvbnN0IGwgb2YgdGhpcy5k''@;'; put 'put ''ZWZlcnJlZENhbGxiYWNrcyl0aGlzLmJ1Y2tldHNbbC5waGFzZV0uYWRkKGwpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX1kZXN0cm95KCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWwuY2xlYXIoKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmNs''@;'; put 'put ''ZWFyKCl9fWxldCBFOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcz1bXX1leGVjdXRlKCl7dGhpcy5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSx0aGlzLmhhbmRsZXI/LmV4ZWN1dGUoKX1leGVjdXRlSW50ZXJu''@;'; put 'put ''YWxDYWxsYmFja3MoKXtjb25zdCBhPVsuLi50aGlzLmludGVybmFsQ2FsbGJhY2tzXTt0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wO2Zvcihjb25zdCBkIG9mIGEpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5oYW5kbGVyPy5kZXN0cm95KCksdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5p''@;'; put 'put ''bnRlcm5hbENhbGxiYWNrcy5sZW5ndGg9MH1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDYihjLGwsYSl7bGV0IGQ9YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNz''@;'; put 'put ''ZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IE09bFt2XTsibnVtYmVyIj09dHlwZW9mIE0/Zj1NOjE9PWY/aD1vZChoLE0pOjI9PWYmJihkPW9kKGQsTSsiOiAiK2xbKyt2XSsiOyIpKX1hP2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0''@;'; put 'put ''SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBjSSBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9Vm8obCk7cmV0dXJuIG5ldyBrOChhLHRoaXMu''@;'; put 'put ''bmdNb2R1bGUpfX1mdW5jdGlvbiB1SShjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BOYW1lOkFycmF5LmlzQXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFt''@;'; put 'put ''ZTphfSl9cmV0dXJuIGx9Y2xhc3MgU2J7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1vNShkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsUlMsZCk7cmV0dXJuIGghPT1SU3x8YT09PVJTP2g6dGhpcy5wYXJl''@;'; put 'put ''bnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBrOCBleHRlbmRzIFFEe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD11SShsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgu''@;'; put 'put ''cHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gdUkodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMu''@;'; put 'put ''Y29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBCdyhjKXtyZXR1cm4gYy5tYXAoVncpLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMu''@;'; put 'put ''aXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIGhjP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9''@;'; put 'put ''dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBNPXY/bmV3IFNiKGwsdik6bCxEPU0uZ2V0KHg4LG51bGwpO2lmKG51bGw9PT1EKXRocm93IG5ldyBRbig0MDcsITEpO2NvbnN0IFo9TS5nZXQobHosbnVsbCksYmU9e3JlbmRlcmVyRmFjdG9yeTpE''@;'; put 'put ''LHNhbml0aXplcjpaLGlubGluZUVmZmVjdFJ1bm5lcjpudWxsLGFmdGVyUmVuZGVyRXZlbnRNYW5hZ2VyOk0uZ2V0KEU4LG51bGwpLGNoYW5nZURldGVjdGlvblNjaGVkdWxlcjpNLmdldChiYixudWxsKX0sRWU9RC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxCZT10''@;'; put 'put ''aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLHFlPWQ/ZnVuY3Rpb24gYWooYyxsLGEsZCl7Y29uc3QgZj1kLmdldChqaywhMSl8fGE9PT1Kcy5TaGFkb3dEb20sdj1jLnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIG9qKGMpe0VEKGMpfSh2KSx2''@;'; put 'put ''fShFZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sTSk6ejQoRWUsQmUsZnVuY3Rpb24gdnooYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJzdmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEJlKSk7bGV0IHJ0PTUxMjt0aGlzLmNvbXBvbmVu''@;'; put 'put ''dERlZi5zaWduYWxzP3J0fD00MDk2OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaHx8KHJ0fD0xNik7bGV0IHB0PW51bGw7bnVsbCE9PXFlJiYocHQ9UkMocWUsTSwhMCkpO2NvbnN0IGR0PW1TKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksSnQ9bGIobnVs''@;'; put 'put ''bCxkdCxudWxsLHJ0LG51bGwsbnVsbCxiZSxFZSxNLG51bGwscHQpO2xldCB2bixDbjtLNihKdCk7dHJ5e2NvbnN0IHRuPXRoaXMuY29tcG9uZW50RGVmO2xldCBNbixDcj1udWxsO3RuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oTW49W10sQ3I9bmV3IE1hcCx0bi5maW5kSG9zdERpcmVjdGl2''@;'; put 'put ''ZURlZnModG4sTW4sQ3IpLE1uLnB1c2godG4pKTpNbj1bdG5dO2NvbnN0IEdyPWZ1bmN0aW9uIHl6KGMsbCl7Y29uc3QgYT1jW0tpXSxkPXdvO3JldHVybiBjW2RdPWwsajUoYSxkLDIsIiNob3N0IixudWxsKX0oSnQscWUpLG1yPWZ1bmN0aW9uIF96KGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09''@;'; put 'put ''aFtLaV07IWZ1bmN0aW9uIHd6KGMsbCxhLGQpe2Zvcihjb25zdCBoIG9mIGMpbC5tZXJnZWRBdHRycz12ZihsLm1lcmdlZEF0dHJzLGguaG9zdEF0dHJzKTtudWxsIT09bC5tZXJnZWRBdHRycyYmKENiKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWEmJkNEKGQsYSxsKSl9KGQsYyxsLHYp''@;'; put 'put ''O2xldCBEPW51bGw7bnVsbCE9PWwmJihEPVJDKGwsaFtwY10pKTtjb25zdCBaPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHJlPTE2O2Euc2lnbmFscz9yZT00MDk2OmEub25QdXNoJiYocmU9NjQpO2NvbnN0IGNlPWxiKGgsY2IoYSksbnVsbCxyZSxoW2MuaW5k''@;'; put 'put ''ZXhdLGMsZixaLG51bGwsbnVsbCxEKTtyZXR1cm4gTS5maXJzdENyZWF0ZVBhc3MmJnlTKE0sYyxkLmxlbmd0aC0xKSxmOChoLGNlKSxoW2MuaW5kZXhdPWNlfShHcixxZSx0bixNbixKdCxiZSxFZSk7Q249WTYoZHQsd28pLHFlJiZmdW5jdGlvbiBTeihjLGwsYSxkKXtpZihkKW00KGMsYSxb''@;'; put 'put ''Im5nLXZlcnNpb24iLCIxNy4zLjEyIl0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIEthKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwu''@;'; put 'put ''cHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFNYyhoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZtNChjLGEsaCksZiYmZi5sZW5ndGg+MCYmd0QoYyxhLGYuam9pbigiICIpKX19KEVlLHRuLHFlLGQp''@;'; put 'put ''LHZvaWQgMCE9PWEmJmZ1bmN0aW9uIE16KGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6bnVsbCl9fShDbix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSx2''@;'; put 'put ''bj1mdW5jdGlvbiBDeihjLGwsYSxkLGgsZil7Y29uc3Qgdj11bCgpLE09aFtLaV0sRD1MMCh2LGgpO2JTKE0saCx2LGEsbnVsbCxkKTtmb3IobGV0IHJlPTA7cmU8YS5sZW5ndGg7cmUrKylqdShENChoLE0sdi5kaXJlY3RpdmVTdGFydCtyZSx2KSxoKTtPRChNLGgsdiksRCYmanUoRCxoKTtj''@;'; put 'put ''b25zdCBaPUQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K3YuY29tcG9uZW50T2Zmc2V0LHYpO2lmKGNbY2xdPWhbY2xdPVosbnVsbCE9PWYpZm9yKGNvbnN0IHJlIG9mIGYpcmUoWixsKTtyZXR1cm4gZlMoTSx2LGgpLFp9KG1yLHRuLE1uLENyLEp0LFt4el0pLFNTKGR0LEp0LG51bGwpfWZpbmFs''@;'; put 'put ''bHl7dzUoKX1yZXR1cm4gbmV3IGJ6KHRoaXMuY29tcG9uZW50VHlwZSx2bixMNChDbixKdCksSnQsQ24pfWZpbmFsbHl7X2UoZil9fX1jbGFzcyBieiBleHRlbmRzIHJ6e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhp''@;'; put 'put ''cy5fdE5vZGU9Zix0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBfOChoLHZvaWQgMCwhMSksdGhpcy5jb21wb25lbnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25zdCBkPXRoaXMuX3RO''@;'; put 'put ''b2RlLmlucHV0cztsZXQgaDtpZihudWxsIT09ZCYmKGg9ZFtsXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5fcm9vdExWaWV3O0NTKGZbS2ldLGYsaCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSx5OChPMSh0aGlzLl90Tm9kZS5pbmRleCxmKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgQnUodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1mdW5jdGlvbiB4eigpe2NvbnN0IGM9dWwoKTtSdihkaSgpW0tpXSxjKX1sZXQgRG89KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1F''@;'; put 'put ''en19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEV6KCl7cmV0dXJuIGZJKHVsKCksZGkoKSl9Y29uc3QgVHo9RG8sZEk9Y2xhc3MgZXh0ZW5kcyBUentjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9''@;'; put 'put ''Z2V0IGVsZW1lbnQoKXtyZXR1cm4gTDQodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBCdSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBsPUM1KHRoaXMuX2hvc3RUTm9k''@;'; put 'put ''ZSx0aGlzLl9ob3N0TFZpZXcpO2lmKFB2KGwpKXtjb25zdCBhPUo2KGwsdGhpcy5faG9zdExWaWV3KSxkPVg2KGwpO3JldHVybiBuZXcgQnUoYVtLaV0uZGF0YVtkKzhdLGEpfXJldHVybiBuZXcgQnUobnVsbCx0aGlzLl9ob3N0TFZpZXcpfWNsZWFyKCl7Zm9yKDt0aGlzLmxlbmd0aD4wOyl0''@;'; put 'put ''aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKX1nZXQobCl7Y29uc3QgYT1oSSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbbF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1nY31jcmVhdGVFbWJlZGRlZFZpZXcobCxhLGQpe2xl''@;'; put 'put ''dCBoLGY7Im51bWJlciI9PXR5cGVvZiBkP2g9ZDpudWxsIT1kJiYoaD1kLmluZGV4LGY9ZC5pbmplY3Rvcik7Y29uc3QgTT1sLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30sZixudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKE0saCxVNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLE19''@;'; put 'put ''Y3JlYXRlQ29tcG9uZW50KGwsYSxkLGgsZil7Y29uc3Qgdj1sJiYhZnVuY3Rpb24gemkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9KGwpO2xldCBNO2lmKHYpTT1hO2Vsc2V7Y29uc3QgQmU9YXx8e307TT1CZS5pbmRleCxkPUJlLmluamVjdG9yLGg9QmUucHJvamVjdGFibGVOb2Rl''@;'; put 'put ''cyxmPUJlLmVudmlyb25tZW50SW5qZWN0b3J8fEJlLm5nTW9kdWxlUmVmfWNvbnN0IEQ9dj9sOm5ldyBrOChWbyhsKSksWj1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1ELm5nTW9kdWxlKXtjb25zdCBxZT0odj9aOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChoYyxudWxs''@;'; put 'put ''KTtxZSYmKGY9cWUpfVZvKEQuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IEVlPUQuY3JlYXRlKFosaCxudWxsLGYpO3JldHVybiB0aGlzLmluc2VydEltcGwoRWUuaG9zdFZpZXcsTSxVNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLEVlfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydElt''@;'; put 'put ''cGwobCxhLCEwKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3O2lmKGZ1bmN0aW9uIEpBKGMpe3JldHVybiBIdShjW2ZjXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5kZXRhY2goTSk7ZWxzZXtjb25zdCBEPWhbZmNdLFo9bmV3IGRJKEQs''@;'; put 'put ''RFtyY10sRFtmY10pO1ouZGV0YWNoKFouaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgoYSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiB2OCh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLFBsKFZTKHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPWhJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihPdShW''@;'; put 'put ''Uyh0aGlzLl9sQ29udGFpbmVyKSxhKSxVNChkW0tpXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1PdShWUyh0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgXzgoZCk6bnVsbH1fYWRq''@;'; put 'put ''dXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gaEkoYyl7cmV0dXJuIGNbOF19ZnVuY3Rpb24gVlMoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBmSShjLGwpe2xldCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gSHUoZCk/YT1k''@;'; put 'put ''OihhPXdTKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxmOChsLGEpKSxCUyhhLGwsYyxkKSxuZXcgZEkoYSxjLGwpfWxldCBCUz1mdW5jdGlvbiBqUyhjLGwsYSxkKXtpZihjW3Z1XSlyZXR1cm47bGV0IGg7aD04JmEudHlwZT9DbChkKTpmdW5jdGlvbiBBeihjLGwpe2NvbnN0IGE9Y1tib10s''@;'; put 'put ''ZD1hLmNyZWF0ZUNvbW1lbnQoIiIpLGg9TDAobCxjKTtyZXR1cm4gWjQoYSxxMyhhLGgpLGQsZnVuY3Rpb24gYVMoYyxsKXtyZXR1cm4gYy5uZXh0U2libGluZyhsKX0oYSxoKSwhMSksZH0obCxhKSxjW3Z1XT1ofSxNYj0oKT0+ITE7Y2xhc3MgelN7Y29uc3RydWN0b3IobCl7dGhpcy5xdWVy''@;'; put 'put ''eUxpc3Q9bCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgelModGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3MgeGJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwp''@;'; put 'put ''e2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3Yu''@;'; put 'put ''aW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyB4YihoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdD''@;'; put 'put ''cmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PVlTKGwsYSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNz''@;'; put 'put ''IHBJe2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnByZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24geUkoYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAobD0+bC50cmltKCkpfShsKTpsfX1jbGFzcyBVU3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1lbGVtZW50U3RhcnQobCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS5lbGVtZW50U3RhcnQobCxhKX1lbGVtZW50RW5kKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKysp''@;'; put 'put ''dGhpcy5xdWVyaWVzW2FdLmVsZW1lbnRFbmQobCl9ZW1iZWRkZWRUVmlldyhsKXtsZXQgYT1udWxsO2ZvcihsZXQgZD0wO2Q8dGhpcy5sZW5ndGg7ZCsrKXtjb25zdCBoPW51bGwhPT1hP2EubGVuZ3RoOjAsZj10aGlzLmdldEJ5SW5kZXgoZCkuZW1iZWRkZWRUVmlldyhsLGgpO2YmJihmLmlu''@;'; put 'put ''ZGV4SW5EZWNsYXJhdGlvblZpZXc9ZCxudWxsIT09YT9hLnB1c2goZik6YT1bZl0pfXJldHVybiBudWxsIT09YT9uZXcgVVMoYSk6bnVsbH10ZW1wbGF0ZShsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLnRlbXBsYXRlKGwsYSl9Z2V0''@;'; put 'put ''QnlJbmRleChsKXtyZXR1cm4gdGhpcy5xdWVyaWVzW2xdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayhsKXt0aGlzLnF1ZXJpZXMucHVzaChsKX19Y2xhc3MgWlN7Y29uc3RydWN0b3IobCxhPS0xKXt0aGlzLm1ldGFkYXRhPWwsdGhpcy5tYXRjaGVzPW51''@;'; put 'put ''bGwsdGhpcy5pbmRleEluRGVjbGFyYXRpb25WaWV3PS0xLHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITEsdGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITAsdGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9YX1lbGVtZW50U3RhcnQobCxhKXt0aGlzLmlzQXBwbHlpbmdUb05vZGUoYSkmJnRoaXMu''@;'; put 'put ''bWF0Y2hUTm9kZShsLGEpfWVsZW1lbnRFbmQobCl7dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9PT1sLmluZGV4JiYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITEpfXRlbXBsYXRlKGwsYSl7dGhpcy5lbGVtZW50U3RhcnQobCxhKX1lbWJlZGRlZFRWaWV3KGwsYSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aXNBcHBseWluZ1RvTm9kZShsKT8odGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMCx0aGlzLmFkZE1hdGNoKC1sLmluZGV4LGEpLG5ldyBaUyh0aGlzLm1ldGFkYXRhKSk6bnVsbH1pc0FwcGx5aW5nVG9Ob2RlKGwpe2lmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlJiYxJn50aGlzLm1ldGFkYXRh''@;'; put 'put ''LmZsYWdzKXtjb25zdCBhPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4O2xldCBkPWwucGFyZW50O2Zvcig7bnVsbCE9PWQmJjgmZC50eXBlJiZkLmluZGV4IT09YTspZD1kLnBhcmVudDtyZXR1cm4gYT09PShudWxsIT09ZD9kLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4''@;'; put 'put ''dE5vZGV9bWF0Y2hUTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShkKSlmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO3RoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxSeihhLGYpKSx0aGlzLm1h''@;'; put 'put ''dGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsQnYoYSxsLGYsITEsITEpKX1lbHNlIGQ9PT1TbD80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsQnYoYSxsLGQsITEsITEpKX1tYXRjaFROb2Rl''@;'; put 'put ''V2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Sml8fGg9PT1Eb3x8aD09PVNsJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1CdihhLGwsaCwhMSwhMSk7''@;'; put 'put ''bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBSeihjLGwpe2NvbnN0''@;'; put 'put ''IGE9Yy5sb2NhbE5hbWVzO2lmKG51bGwhPT1hKWZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MilpZihhW2RdPT09bClyZXR1cm4gYVtkKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIEx6KGMsbCxhLGQpe3JldHVybi0xPT09YT9mdW5jdGlvbiBnSShjLGwpe3JldHVybiAxMSZjLnR5cGU/TDQo''@;'; put 'put ''YyxsKTo0JmMudHlwZT9mYihjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIFdTKGMsbCxhKXtyZXR1cm4gYT09PUppP0w0KGwsYyk6YT09PVNsP2ZiKGwsYyk6YT09PURvP2ZJKGwsYyk6dm9pZCAwfShjLGwsZCk6RDQoYyxjW0tpXSxhLGwpfWZ1bmN0aW9uIFk1KGMsbCxhLGQpe2Nv''@;'; put 'put ''bnN0IGg9bFt1ZF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVzKXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgRD0wO251bGwhPT12JiZEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFo9dltEXTtNLnB1c2goWjwwP251bGw6THoobCxmW1pdLHZbRCsxXSxhLm1l''@;'; put 'put ''dGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVzfWZ1bmN0aW9uIEQ4KGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0IHY9WTUoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtN''@;'; put 'put ''Kz0yKXtjb25zdCBEPWZbTV07aWYoRD4wKWQucHVzaCh2W00vMl0pO2Vsc2V7Y29uc3QgWj1mW00rMV0scmU9bFstRF07Zm9yKGxldCBjZT1nYztjZTxyZS5sZW5ndGg7Y2UrKyl7Y29uc3QgYmU9cmVbY2VdO2JlW1M0XT09PWJlW2ZjXSYmRDgoYmVbS2ldLGJlLFosZCl9aWYobnVsbCE9PXJl''@;'; put 'put ''W1YzXSl7Y29uc3QgY2U9cmVbVjNdO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKyl7Y29uc3QgRWU9Y2VbYmVdO0Q4KEVlW0tpXSxFZSxaLGQpfX19fX1yZXR1cm4gZH1mdW5jdGlvbiBtSShjLGwsYSl7Y29uc3QgZD1uZXcgZmQoISg0Jn5hKSk7cmV0dXJuIGZ1bmN0aW9uIGtEKGMs''@;'; put 'put ''bCxhLGQpe2NvbnN0IGg9TkQobCk7aC5wdXNoKGEpLGMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKS5wdXNoKGQsaC5sZW5ndGgtMSl9KGMsbCxkLGQuZGVzdHJveSksKGxbdWRdPz89bmV3IHhiKS5xdWVyaWVzLnB1c2gobmV3IHpTKGQpKS0xfWZ1bmN0aW9uIF9JKGMsbCxhKXtudWxsPT09Yy5x''@;'; put 'put ''dWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBVUyksYy5xdWVyaWVzLnRyYWNrKG5ldyBaUyhsLGEpKX1mdW5jdGlvbiBZUyhjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiB3SShjLGwpe2NvbnN0IGE9Y1tLaV0sZD1ZUyhhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1Rl''@;'; put 'put ''bXBsYXRlP0Q4KGEsYyxsLFtdKTpZNShhLGMsZCxsKX1mdW5jdGlvbiBTSShjKXtyZXR1cm4gZnVuY3Rpb24gRWIoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJnZvaWQgMCE9PWNbbWVdfShjKSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0fWZ1bmN0aW9uIHdhKGMpe2xldCBsPWZ1''@;'; put 'put ''bmN0aW9uIFhTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoVmMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0''@;'; put 'put ''aHJvdyBuZXcgUW4oOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVzaChoKTtjb25zdCB2PWM7di5pbnB1dHM9UDgoYy5pbnB1dHMpLHYuaW5wdXRUcmFuc2Zvcm1zPVA4KGMuaW5wdXRUcmFuc2Zvcm1zKSx2LmRlY2xhcmVkSW5wdXRzPVA4KGMuZGVjbGFyZWRJbnB1dHMp''@;'; put 'put ''LHYub3V0cHV0cz1QOChjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmT2YoYyxNKTtjb25zdCBEPWgudmlld1F1ZXJ5LFo9aC5jb250ZW50UXVlcmllcztpZihEJiZSSShjLEQpLFomJlp6KGMsWiksSUkoYyxoKSxMdShjLm91dHB1dHMsaC5vdXRwdXRzKSxWYyhoKSYmaC5k''@;'; put 'put ''YXRhLmFuaW1hdGlvbil7Y29uc3QgcmU9Yy5kYXRhO3JlLmFuaW1hdGlvbj0ocmUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGguZGF0YS5hbmltYXRpb24pfX1jb25zdCBmPWguZmVhdHVyZXM7aWYoZilmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdO00mJk0ubmdJbmhl''@;'; put 'put ''cml0JiZNKGMpLE09PT13YSYmKGE9ITEpfX1sPU9iamVjdC5nZXRQcm90b3R5cGVPZihsKX0hZnVuY3Rpb24gVXooYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tkXTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9''@;'; put 'put ''dmYoaC5ob3N0QXR0cnMsYT12ZihhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBJSShjLGwpe2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1''@;'; put 'put ''dHNbYV07aWYodm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRlY2xhcmVkSW5wdXRzW2FdLG51bGwhPT1sLmlucHV0VHJhbnNmb3Jtcykpe2NvbnN0IGg9QXJyYXkuaXNBcnJheShkKT9kWzBdOmQ7aWYoIWwuaW5wdXRUcmFuc2Zvcm1zLmhhc093blBy''@;'; put 'put ''b3BlcnR5KGgpKWNvbnRpbnVlO2MuaW5wdXRUcmFuc2Zvcm1zPz89e30sYy5pbnB1dFRyYW5zZm9ybXNbaF09bC5pbnB1dFRyYW5zZm9ybXNbaF19fX1mdW5jdGlvbiBQOChjKXtyZXR1cm4gYz09PUkwP3t9OmM9PT10cz9bXTpjfWZ1bmN0aW9uIFJJKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVy''@;'; put 'put ''eTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBaeihjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxoLGYpfTpsfWZ1bmN0aW9uIE9mKGMsbCl7Y29uc3QgYT1jLmhvc3RC''@;'; put 'put ''aW5kaW5ncztjLmhvc3RCaW5kaW5ncz1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiB2ZChjKXtjb25zdCBsPWE9Pntjb25zdCBkPShBcnJheS5pc0FycmF5KGMpP2M6YygpKS5tYXAoaD0+ImZ1bmN0aW9uIj09dHlwZW9mIGg/e2RpcmVjdGl2ZTpZaShoKSxpbnB1dHM6STAs''@;'; put 'put ''b3V0cHV0czpJMH06e2RpcmVjdGl2ZTpZaShoLmRpcmVjdGl2ZSksaW5wdXRzOk9JKGguaW5wdXRzKSxvdXRwdXRzOk9JKGgub3V0cHV0cyl9KTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2ZURlZnM9TEksYS5ob3N0RGlyZWN0aXZlcz1kKTphLmhvc3REaXJl''@;'; put 'put ''Y3RpdmVzLnVuc2hpZnQoLi4uZCl9O3JldHVybiBsLm5nSW5oZXJpdD0hMCxsfWZ1bmN0aW9uIExJKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKXtjb25zdCBoPXhjKGQuZGlyZWN0aXZlKTskeihoLmRlY2xhcmVkSW5w''@;'; put 'put ''dXRzLGQuaW5wdXRzKSxMSShoLGwsYSksYS5zZXQoaCxkKSxsLnB1c2goaCl9fWZ1bmN0aW9uIE9JKGMpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmxlbmd0aClyZXR1cm4gSTA7Y29uc3QgbD17fTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErPTIpbFtjW2FdXT1jW2ErMV07cmV0dXJuIGx9ZnVu''@;'; put 'put ''Y3Rpb24gJHooYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfWZ1bmN0aW9uIFdsKGMpe2NvbnN0IGw9Yy5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkoaCkmJmhbM10mJihhW2RdPWhbM10pfWMuaW5wdXRUcmFuc2Zvcm1zPWF9Y2xhc3MgbnB7fWNsYXNzIG1je31jbGFzcyBSYiBleHRlbmRzIG5we2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX3BhcmVudD1hLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10s''@;'; put 'put ''dGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBjSSh0aGlzKTtjb25zdCBoPVB1KGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9RjEoaC5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9UjQobCxhLFt7cHJvdmlkZTpucCx1c2VWYWx1ZTp0''@;'; put 'put ''aGlzfSx7cHJvdmlkZTpXNSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sUHIobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSx0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLHRoaXMuaW5zdGFuY2U9dGhpcy5fcjNJ''@;'; put 'put ''bmplY3Rvci5nZXQobCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5kZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51''@;'; put 'put ''bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBMYiBleHRlbmRzIG1je2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPWx9Y3JlYXRlKGwpe3JldHVybiBuZXcgUmIodGhpcy5tb2R1bGVUeXBlLGwsW10pfX1jbGFzcyBGOCBleHRlbmRz''@;'; put 'put ''IG5we2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGNJKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtjb25zdCBhPW5ldyBjZChbLi4ubC5wcm92aWRlcnMse3Byb3ZpZGU6bnAsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6VzUsdXNlVmFs''@;'; put 'put ''dWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8SDMoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygp''@;'; put 'put ''fWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIEc0KGMsbCxhPW51bGwpe3JldHVybiBuZXcgRjgoe3Byb3ZpZGVyczpjLHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5p''@;'; put 'put ''dGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnRhc2tJZD0wLHRoaXMucGVuZGluZ1Rhc2tzPW5ldyBTZXQsdGhpcy5oYXNQZW5kaW5nVGFza3M9bmV3IGVpKCExKX1nZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlz''@;'; put 'put ''Lmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1hZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tz''@;'; put 'put ''LmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1Bl''@;'; put 'put ''bmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5j''@;'; put 'put ''dGlvbiBPYihjKXtyZXR1cm4hIUpTKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEpTKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1''@;'; put 'put ''bmN0aW9uIHkyKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIHJwKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBGYihjLGws''@;'; put 'put ''YSxkLGgpe2NvbnN0IGY9cnAoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxmfWZ1bmN0aW9uIGJkKGMsbCxhLGQsaCxmKXtjb25zdCB2PXJwKGMsbCxhLGQpO3JldHVybiBycChjLGwrMixoLGYpfHx2fWZ1bmN0aW9uIGd0KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1kaSgpLFo9bHMo''@;'; put 'put ''KSxyZT1jK3dvLGNlPVouZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFFTKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwuY29uc3RzLHJlPWo1KGwsYyw0LHZ8fG51bGwsZDIoWixNKSk7dlMobCxhLHJlLGQyKFosRCkpLFJ2KGwscmUpO2NvbnN0IGNlPXJlLnRWaWV3PW1TKDIscmUsZCxo''@;'; put 'put ''LGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxaLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscmUpLGNlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocmUpKSxyZX0ocmUsWixELGws''@;'; put 'put ''YSxkLGgsZix2KTpaLmRhdGFbcmVdO2gyKGNlLCExKTtjb25zdCBiZT1WSShaLEQsY2UsYyk7cTYoKSYmbDAoWixELGJlLGNlKSxqdShiZSxEKTtjb25zdCBFZT13UyhiZSxELGJlLGNlKTtyZXR1cm4gRFtyZV09RWUsZjgoRCxFZSksZnVuY3Rpb24gSDAoYyxsLGEpe3JldHVybiBNYihjLGws''@;'; put 'put ''YSl9KEVlLGNlLEQpLEowKGNlKSYmcFMoWixELGNlKSxudWxsIT12JiZnUyhELGNlLE0pLGd0fWxldCBWST1mdW5jdGlvbiBlTShjLGwsYSxkKXtyZXR1cm4gZjIoITApLGxbYm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiBocihjLGwsYSxkKXtjb25zdCBoPWRpKCk7cmV0dXJuIEJj''@;'; put 'put ''KGgsYWgoKSxsKSYmKGxzKCksdWgoUXMoKSxoLGMsbCxhLGQpKSxocn1mdW5jdGlvbiBZbChjLGwsYSxkKXtyZXR1cm4gQmMoYyxhaCgpLGEpP2wrQ2EoYSkrZDpSb31mdW5jdGlvbiBZbyhjLGwpe3JldHVybiBjPDwxN3xsPDwyfWZ1bmN0aW9uIHhsKGMpe3JldHVybiBjPj4xNyYzMjc2N31m''@;'; put 'put ''dW5jdGlvbiBGZihjKXtyZXR1cm4gMnxjfWZ1bmN0aW9uIHlkKGMpe3JldHVybigxMzEwNjgmYyk+PjJ9ZnVuY3Rpb24gZ24oYyxsKXtyZXR1cm4tMTMxMDY5JmN8bDw8Mn1mdW5jdGlvbiB3bihjKXtyZXR1cm4gMXxjfWZ1bmN0aW9uIHlyKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVs''@;'; put 'put ''bD09PWw7bGV0IHY9ZD94bChoKTp5ZChoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgWj1jW3YrMV07V3IoY1t2XSxsKSYmKE09ITAsY1t2KzFdPWQ/d24oWik6RmYoWikpLHY9ZD94bChaKTp5ZChaKX1NJiYoY1thKzFdPWQ/RmYoaCk6d24oaCkpfWZ1bmN0aW9uIFdy''@;'; put 'put ''KGMsbCl7cmV0dXJuIG51bGw9PT1jfHxudWxsPT1sfHwoQXJyYXkuaXNBcnJheShjKT9jWzFdOmMpPT09bHx8ISghQXJyYXkuaXNBcnJheShjKXx8InN0cmluZyIhPXR5cGVvZiBsKSYmZTIoYyxsKT49MH1jb25zdCBvaT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVF''@;'; put 'put ''bmQ6MH07ZnVuY3Rpb24gbmkoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKG9pLmtleSxvaS5rZXlFbmQpfWZ1bmN0aW9uIG5vKGMsbCl7Y29uc3QgYT1vaS50ZXh0RW5kO3JldHVybiBhPT09bD8tMToobD1vaS5rZXlFbmQ9ZnVuY3Rpb24gcjEoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQo''@;'; put 'put ''bCk+MzI7KWwrKztyZXR1cm4gbH0oYyxvaS5rZXk9bCxhKSx4cyhjLGwsYSkpfWZ1bmN0aW9uIHhzKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPD0zMjspbCsrO3JldHVybiBsfWZ1bmN0aW9uIE1lKGMsbCxhKXtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAo''@;'; put 'put ''bHMoKSxRcygpLGQsYyxsLGRbYm9dLGEsITEpLE1lfWZ1bmN0aW9uIGhoKGMsbCxhLGQsaCl7Y29uc3Qgdj1oPyJjbGFzcyI6InN0eWxlIjtDUyhjLGEsbC5pbnB1dHNbdl0sdixkKX1mdW5jdGlvbiBfZChjLGwsYSl7cmV0dXJuIEhmKGMsbCxhLCExKSxfZH1mdW5jdGlvbiBUcihjLGwpe3Jl''@;'; put 'put ''dHVybiBIZihjLGwsbnVsbCwhMCksVHJ9ZnVuY3Rpb24gYXAoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gVWkoYyl7cmV0dXJuIGZ1bmN0aW9uIFRvKGMpe29pLmtleT0wLG9pLmtleUVuZD0wLG9pLnZhbHVlPTAsb2kudmFsdWVFbmQ9MCxvaS50ZXh0RW5kPWMubGVuZ3RofShjKSxubyhjLHhz''@;'; put 'put ''KGMsMCxvaS50ZXh0RW5kKSl9KGwpO2E+PTA7YT1ubyhsLGEpKV8wKGMsbmkobCksITApfWZ1bmN0aW9uIEhmKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj1BZigyKTtmLmZpcnN0VXBkYXRlUGFzcyYmb3JlKGYsYyx2LGQpLGwhPT1SbyYmQmMoaCx2LGwpJiZscmUoZixmLmRhdGFb''@;'; put 'put ''VnUoKV0saCxoW2JvXSxjLGhbdisxXT1mdW5jdGlvbiBuOWUoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jfHwoInN0cmluZyI9PXR5cGVvZiBsP2MrPWw6Im9iamVjdCI9PXR5cGVvZiBjJiYoYz1QcihtMihjKSkpKSxjfShsLGEpLGQsdil9ZnVuY3Rpb24gYXJlKGMsbCl7cmV0dXJuIGw+''@;'; put 'put ''PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gb3JlKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtWdSgpXSx2PWFyZShjLGEpO3VyZShmLGQpJiZudWxsPT09bCYmIXYmJihsPSExKSxsPWZ1bmN0aW9uIEs3ZShjLGwsYSxkKXtjb25zdCBo''@;'; put 'put ''PXNDKGMpO2xldCBmPWQ/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09aCkwPT09KGQ/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncykmJihhPW9NKGE9clUobnVsbCxjLGwsYSxkKSxsLmF0dHJzLGQpLGY9bnVsbCk7ZWxzZXtjb25zdCB2PWwuZGly''@;'; put 'put ''ZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT12fHxjW3ZdIT09aClpZihhPXJVKGgsYyxsLGEsZCksbnVsbD09PWYpe2xldCBEPWZ1bmN0aW9uIHE3ZShjLGwsYSl7Y29uc3QgZD1hP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3M7aWYoMCE9PXlkKGQpKXJldHVybiBjW3hsKGQpXX0o''@;'; put 'put ''YyxsLGQpO3ZvaWQgMCE9PUQmJkFycmF5LmlzQXJyYXkoRCkmJihEPXJVKG51bGwsYyxsLERbMV0sZCksRD1vTShELGwuYXR0cnMsZCksZnVuY3Rpb24gWDdlKGMsbCxhLGQpe2NbeGwoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0oYyxsLGQsRCkpfWVsc2UgZj1mdW5j''@;'; put 'put ''dGlvbiBKN2UoYyxsLGEpe2xldCBkO2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPTErbC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmPGg7ZisrKWQ9b00oZCxjW2ZdLmhvc3RBdHRycyxhKTtyZXR1cm4gb00oZCxsLmF0dHJzLGEpfShjLGwsZCl9cmV0dXJuIHZvaWQgMCE9PWYmJihk''@;'; put 'put ''P2wucmVzaWR1YWxDbGFzc2VzPWY6bC5yZXNpZHVhbFN0eWxlcz1mKSxhfShoLGYsbCxkKSxmdW5jdGlvbiB4bihjLGwsYSxkLGgsZil7bGV0IHY9Zj9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzLE09eGwodiksRD15ZCh2KTtjW2RdPWE7bGV0IHJlLFo9ITE7aWYoQXJyYXkuaXNB''@;'; put 'put ''cnJheShhKT8ocmU9YVsxXSwobnVsbD09PXJlfHxlMihhLHJlKT4wKSYmKFo9ITApKTpyZT1hLGgpaWYoMCE9PUQpe2NvbnN0IGJlPXhsKGNbTSsxXSk7Y1tkKzFdPVlvKGJlLE0pLDAhPT1iZSYmKGNbYmUrMV09Z24oY1tiZSsxXSxkKSksY1tNKzFdPWZ1bmN0aW9uIEVsKGMsbCl7cmV0dXJu''@;'; put 'put ''IDEzMTA3MSZjfGw8PDE3fShjW00rMV0sZCl9ZWxzZSBjW2QrMV09WW8oTSwwKSwwIT09TSYmKGNbTSsxXT1nbihjW00rMV0sZCkpLE09ZDtlbHNlIGNbZCsxXT1ZbyhELDApLDA9PT1NP009ZDpjW0QrMV09Z24oY1tEKzFdLGQpLEQ9ZDtaJiYoY1tkKzFdPUZmKGNbZCsxXSkpLHlyKGMscmUs''@;'; put 'put ''ZCwhMCkseXIoYyxyZSxkLCExKSxmdW5jdGlvbiB6bihjLGwsYSxkLGgpe2NvbnN0IGY9aD9jLnJlc2lkdWFsQ2xhc3NlczpjLnJlc2lkdWFsU3R5bGVzO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgbCYmZTIoZixsKT49MCYmKGFbZCsxXT13bihhW2QrMV0pKX0obCxyZSxjLGQsZiksdj1Z''@;'; put 'put ''byhNLEQpLGY/bC5jbGFzc0JpbmRpbmdzPXY6bC5zdHlsZUJpbmRpbmdzPXZ9KGgsZixsLGEsdixkKX19ZnVuY3Rpb24gclUoYyxsLGEsZCxoKXtsZXQgZj1udWxsO2NvbnN0IHY9YS5kaXJlY3RpdmVFbmQ7bGV0IE09YS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1NP009YS5kaXJl''@;'; put 'put ''Y3RpdmVTdGFydDpNKys7TTx2JiYoZj1sW01dLGQ9b00oZCxmLmhvc3RBdHRycyxoKSxmIT09Yyk7KU0rKztyZXR1cm4gbnVsbCE9PWMmJihhLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PU0pLGR9ZnVuY3Rpb24gb00oYyxsLGEpe2NvbnN0IGQ9YT8xOjI7bGV0IGg9LTE7aWYobnVsbCE9PWwpZm9y''@;'; put 'put ''KGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0IHY9bFtmXTsibnVtYmVyIj09dHlwZW9mIHY/aD12Omg9PT1kJiYoQXJyYXkuaXNBcnJheShjKXx8KGM9dm9pZCAwPT09Yz9bXTpbIiIsY10pLF8wKGMsdiwhIWF8fGxbKytmXSkpfXJldHVybiB2b2lkIDA9PT1jP251bGw6Y31mdW5jdGlv''@;'; put 'put ''biBscmUoYyxsLGEsZCxoLGYsdixNKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgRD1jLmRhdGEsWj1EW00rMV0scmU9ZnVuY3Rpb24ga24oYyl7cmV0dXJuISgxJn5jKX0oWik/Y3JlKEQsbCxhLGgseWQoWiksdik6dm9pZCAwO1pJKHJlKXx8KFpJKGYpfHxmdW5jdGlvbiBfdShjKXty''@;'; put 'put ''ZXR1cm4hKDImfmMpfShaKSYmKGY9Y3JlKEQsbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24geUQoYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3MoYSxkKTtlbHNle2xldCBmPS0xPT09ZC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGw9PWg/''@;'; put 'put ''Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1LMy5JbXBvcnRhbnQpLGMuc2V0U3R5bGUoYSxkLGgsZikpfX0oZCx2LHk1KFZ1KCksYSksaCxmKSl9ZnVuY3Rpb24gY3JlKGMsbCxh''@;'; put 'put ''LGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgRD1jW2hdLFo9QXJyYXkuaXNBcnJheShEKSxyZT1aP0RbMV06RCxjZT1udWxsPT09cmU7bGV0IGJlPWFbaCsxXTtiZT09PVJvJiYoYmU9Y2U/dHM6dm9pZCAwKTtsZXQgRWU9Y2U/QTYoYmUsZCk6cmU9PT1k''@;'; put 'put ''P2JlOnZvaWQgMDtpZihaJiYhWkkoRWUpJiYoRWU9QTYoRCxkKSksWkkoRWUpJiYoTT1FZSx2KSlyZXR1cm4gTTtjb25zdCBCZT1jW2grMV07aD12P3hsKEJlKTp5ZChCZSl9aWYobnVsbCE9PWwpe2xldCBEPWY/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1EJiYo''@;'; put 'put ''TT1BNihELGQpKX1yZXR1cm4gTX1mdW5jdGlvbiBaSShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1cmUoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiBkcmUoYyxsLGEpeyFmdW5jdGlvbiBOZihjLGwsYSxkKXtjb25zdCBoPWxzKCksZj1BZigyKTtoLmZp''@;'; put 'put ''cnN0VXBkYXRlUGFzcyYmb3JlKGgsbnVsbCxmLGQpO2NvbnN0IHY9ZGkoKTtpZihhIT09Um8mJkJjKHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbVnUoKV07aWYodXJlKE0sZCkmJiFhcmUoaCxmKSl7bGV0IEQ9ZD9NLmNsYXNzZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwh''@;'; put 'put ''PT1EJiYoYT1vZChELGF8fCIiKSksaGgoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIHQ5ZShjLGwsYSxkLGgsZix2LE0pe2g9PT1SbyYmKGg9dHMpO2xldCBEPTAsWj0wLHJlPTA8aC5sZW5ndGg/aFswXTpudWxsLGNlPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PXJlfHxudWxs''@;'; put 'put ''IT09Y2U7KXtjb25zdCBiZT1EPGgubGVuZ3RoP2hbRCsxXTp2b2lkIDAsRWU9WjxmLmxlbmd0aD9mW1orMV06dm9pZCAwO2xldCBxZSxCZT1udWxsO3JlPT09Y2U/KEQrPTIsWis9MixiZSE9PUVlJiYoQmU9Y2UscWU9RWUpKTpudWxsPT09Y2V8fG51bGwhPT1yZSYmcmU8Y2U/KEQrPTIsQmU9''@;'; put 'put ''cmUpOihaKz0yLEJlPWNlLHFlPUVlKSxudWxsIT09QmUmJmxyZShjLGwsYSxkLEJlLHFlLHYsTSkscmU9RDxoLmxlbmd0aD9oW0RdOm51bGwsY2U9WjxmLmxlbmd0aD9mW1pdOm51bGx9fShoLE0sdix2W2JvXSx2W2YrMV0sdltmKzFdPWZ1bmN0aW9uIFE3ZShjLGwsYSl7aWYobnVsbD09YXx8''@;'; put 'put ''IiI9PT1hKXJldHVybiB0cztjb25zdCBkPVtdLGg9bTIoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGgpZm9yKGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQs''@;'; put 'put ''ZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0oXzAsYXAsWWwoZGkoKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj13bytjLE09aFtib10sRD1mLmZpcnN0Q3JlYXRlUGFzcz9m''@;'; put 'put ''dW5jdGlvbiBNOWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bC5jb25zdHMsRD1qNShsLGMsMixkLGQyKHYsaCkpO3JldHVybiB2UyhsLGEsRCxkMih2LGYpKSxudWxsIT09RC5hdHRycyYmQ2IoRCxELmF0dHJzLCExKSxudWxsIT09RC5tZXJnZWRBdHRycyYmQ2IoRCxELm1lcmdlZEF0dHJzLCEw''@;'; put 'put ''KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsRCksRH0odixmLGgsbCxhLGQpOmYuZGF0YVt2XSxaPWdyZShmLGgsRCxNLGwsYyk7aFt2XT1aO2NvbnN0IHJlPUowKEQpO3JldHVybiBoMihELCEwKSxDRChNLFosRCksIWZ1bmN0aW9uIEg4KGMpe3JldHVybiEo''@;'; put 'put ''MzImfmMuZmxhZ3MpfShEKSYmcTYoKSYmbDAoZixoLFosRCksMD09PWZ1bmN0aW9uIHVWKCl7cmV0dXJuIENvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKSYmanUoWixoKSxmdW5jdGlvbiBkVigpe0NvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLHJlJiYocFMoZixoLEQpLGZT''@;'; put 'put ''KGYsRCxoKSksbnVsbCE9PWQmJmdTKGgsRCksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz11bCgpO2lDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBoVihjKXtyZXR1cm4gQ28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24g''@;'; put 'put ''bVYoKXtDby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gZWsoKXtDby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPWxzKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiYoUnYoYSxjKSxydShjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykp''@;'; put 'put ''LG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBrVihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmaGgoYSxsLGRpKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIERWKGMpe3JldHVybiEhKDE2JmMuZmxh''@;'; put 'put ''Z3MpfShsKSYmaGgoYSxsLGRpKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksaGV9ZnVuY3Rpb24gR3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksR3R9bGV0IGdyZT0oYyxsLGEsZCxoLGYpPT4oZjIoITApLHo0KGQsaCxmdW5jdGlvbiBzaygpe3JldHVybiBDby5sRnJhbWUu''@;'; put 'put ''Y3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIHNpKGMsbCxhKXtjb25zdCBkPWRpKCksaD1scygpLGY9Yyt3byx2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFQ5ZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25zdHMsdj1kMihmLGQpLE09ajUobCxjLDgsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''dik7cmV0dXJuIG51bGwhPT12JiZDYihNLHYsITApLHZTKGwsYSxNLGQyKGYsaCkpLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxNKSxNfShmLGgsZCxsLGEpOmguZGF0YVtmXTtoMih2LCEwKTtjb25zdCBNPW1yZShoLGQsdixjKTtyZXR1cm4gZFtmXT1NLHE2''@;'; put 'put ''KCkmJmwwKGgsZCxNLHYpLGp1KE0sZCksSjAodikmJihwUyhoLGQsdiksZlMoaCx2LGQpKSxudWxsIT1hJiZnUyhkLHYpLHNpfWZ1bmN0aW9uIGxpKCl7bGV0IGM9dWwoKTtjb25zdCBsPWxzKCk7cmV0dXJuIGlDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSksbC5maXJzdENyZWF0ZVBh''@;'; put 'put ''c3MmJihSdihsLGMpLHJ1KGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbGl9ZnVuY3Rpb24gRmwoYyxsLGEpe3JldHVybiBzaShjLGwsYSksbGkoKSxGbH1sZXQgbXJlPShjLGwsYSxkKT0+KGYyKCEwKSxlUyhsW2JvXSwiIikpO2Z1bmN0aW9uIExuKCl7cmV0dXJuIGRpKCl9ZnVuY3Rp''@;'; put 'put ''b24gb3AoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtyZXR1cm4gQmMoZCxhaCgpLGwpJiZGMChscygpLFFzKCksZCxjLGwsZFtib10sYSwhMCksb3B9ZnVuY3Rpb24gbFUoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtpZihCYyhkLGFoKCksbCkpe2NvbnN0IGY9bHMoKSx2PVFzKCk7RjAoZix2LGQsYyxsLFc0''@;'; put 'put ''KHNDKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gbFV9Y29uc3Qgajg9dm9pZCAwO3ZhciBJOWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxqOF0sW1siQU0iLCJQTSJdLGo4LGo4XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQi''@;'; put 'put ''LCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxqOCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi''@;'; put 'put ''QSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2Vw''@;'; put 'put ''dGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sajgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6''@;'; put 'put ''bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixqOCwiezF9ICdhdCcgezB9IixqOF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMs''@;'; put 'put ''IyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBEOWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1h''@;'; put 'put ''JiYwPT09ZD8xOjV9XTtsZXQgVWI9e307ZnVuY3Rpb24gbzEoYyl7Y29uc3QgbD1mdW5jdGlvbiBMOWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9YnJlKGwpO2lmKGEpcmV0dXJuIGE7Y29uc3QgZD1sLnNwbGl0KCItIilbMF07aWYoYT1i''@;'; put 'put ''cmUoZCksYSlyZXR1cm4gYTtpZigiZW4iPT09ZClyZXR1cm4gSTllO3Rocm93IG5ldyBRbig3MDEsITEpfWZ1bmN0aW9uIGJyZShjKXtyZXR1cm4gYyBpbiBVYnx8KFViW2NdPVZ0Lm5nJiZWdC5uZy5jb21tb24mJlZ0Lm5nLmNvbW1vbi5sb2NhbGVzJiZWdC5uZy5jb21tb24ubG9jYWxlc1tj''@;'; put 'put ''XSksVWJbY119dmFyIGVjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNG''@;'; put 'put ''b3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmly''@;'; put 'put ''c3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZv''@;'; put 'put ''cm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLGNbYy5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3Vy''@;'; put 'put ''cmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9''@;'; put 'put ''KGVjfHx7fSk7Y29uc3QgWmI9ImVuLVVTIjtsZXQgeXJlPVpiO2Z1bmN0aW9uIEZ0KGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj11bCgpO3JldHVybiBoVShmLGgsaFtib10sdixjLGwsZCksRnR9ZnVuY3Rpb24gZFUoYyxsKXtjb25zdCBhPXVsKCksZD1kaSgpLGg9bHMoKTtyZXR1''@;'; put 'put ''cm4gaFUoaCxkLFc0KHNDKGguZGF0YSksYSxkKSxhLGMsbCksZFV9ZnVuY3Rpb24gaFUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1KMChkKSxaPWMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKSxyZT1sW2NsXSxjZT1ORChsKTtsZXQgYmU9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHFlPUwwKGQs''@;'; put 'put ''bCkscnQ9dj92KHFlKTpxZSxwdD1jZS5sZW5ndGgsZHQ9dj92bj0+dihDbCh2bltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIXYmJk0mJihKdD1mdW5jdGlvbiBrdmUoYyxsLGEsZCl7Y29uc3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3Ro''@;'; put 'put ''LTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbWDBdLEQ9aFtmKzJdO3JldHVybiBNLmxlbmd0aD5EP01bRF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihmKz0yKX1yZXR1cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1KdCkoSnQu''@;'; put 'put ''X19uZ0xhc3RMaXN0ZW5lckZuX198fEp0KS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLEp0Ll9fbmdMYXN0TGlzdGVuZXJGbl9fPWYsYmU9ITE7ZWxzZXtmPVlyZShkLGwscmUsZiwhMSk7Y29uc3Qgdm49YS5saXN0ZW4ocnQsaCxmKTtjZS5wdXNoKGYsdm4pLFomJloucHVzaChoLGR0LHB0LHB0''@;'; put 'put ''KzEpfX1lbHNlIGY9WXJlKGQsbCxyZSxmLCExKTtjb25zdCBFZT1kLm91dHB1dHM7bGV0IEJlO2lmKGJlJiZudWxsIT09RWUmJihCZT1FZVtoXSkpe2NvbnN0IHFlPUJlLmxlbmd0aDtpZihxZSlmb3IobGV0IHJ0PTA7cnQ8cWU7cnQrPTIpe2NvbnN0IENuPWxbQmVbcnRdXVtCZVtydCsxXV0u''@;'; put 'put ''c3Vic2NyaWJlKGYpLHRuPWNlLmxlbmd0aDtjZS5wdXNoKGYsQ24pLFomJloucHVzaChoLGQuaW5kZXgsdG4sLSh0bisxKSl9fX1mdW5jdGlvbiBXcmUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIHUyKDYsbCxhKSwhMSE9PWEoZCl9Y2F0Y2goZil7cmV0dXJuIHo1KGMs''@;'; put 'put ''ZiksITF9ZmluYWxseXt1Mig3LGwsYSksX2UoaCl9fWZ1bmN0aW9uIFlyZShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDt5OChjLmNvbXBvbmVudE9mZnNldD4tMT9PMShjLmluZGV4LGwpOmwpO2xldCBEPVdyZShsLGEsZCx2KSxaPWYu''@;'; put 'put ''X19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtaOylEPVdyZShsLGEsWix2KSYmRCxaPVouX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09RCYmdi5wcmV2ZW50RGVmYXVsdCgpLER9fWZ1bmN0aW9uIFJlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIHdWKGMpe3JldHVybihDby5sRnJh''@;'; put 'put ''bWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIHRDKGMsbCl7Zm9yKDtjPjA7KWw9bFtvMF0sYy0tO3JldHVybiBsfShjLENvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtjbF19KGMpfWZ1bmN0aW9uIER2ZShjLGwpe2xldCBhPW51bGw7Y29uc3QgZD1mdW5jdGlvbiBmdihjKXtjb25zdCBsPWMuYXR0''@;'; put 'put ''cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxbaF07aWYoIioiIT09Zil7aWYobnVsbD09PWQ/YjQoYyxmLCEwKTpOdyhkLGYpKXJldHVy''@;'; put 'put ''biBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIHNhKGMpe2NvbnN0IGw9ZGkoKVtabF1bcmNdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIFFoKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0o''@;'; put 'put ''Yz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz9EdmUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6ZFt2XT1mLGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBZcihjLGw9MCxh''@;'; put 'put ''KXtjb25zdCBkPWRpKCksaD1scygpLGY9ajUoaCx3bytjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSxhQygpLCghZFtudV18fF81KCkpJiYzMiZ+Zi5mbGFncyYmZnVuY3Rpb24gdGooYyxsLGEpe2JEKGxbYm9dLDAsbCxhLGFiKGMsYSxs''@;'; put 'put ''KSx1OChhLnBhcmVudHx8bFtyY10sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiBmTShjLGwsYSl7cmV0dXJuIGZVKGMsIiIsbCwiIixhKSxmTX1mdW5jdGlvbiBmVShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PVlsKGYsbCxhLGQpO3JldHVybiB2IT09Um8mJkYwKGxzKCksUXMoKSxmLGMsdixm''@;'; put 'put ''W2JvXSxoLCExKSxmVX1mdW5jdGlvbiBhbyhjLGwsYSxkKXshZnVuY3Rpb24gYkkoYyxsLGEsZCl7Y29uc3QgaD1scygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPXVsKCk7X0koaCxuZXcgcEkobCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIE96KGMsbCl7Y29uc3QgYT1jLmNvbnRl''@;'; put 'put ''bnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIG1JKGgsZGkoKSxhKX0oYyxsLGEs''@;'; put 'put ''ZCl9ZnVuY3Rpb24gcWEoYyxsLGEpeyFmdW5jdGlvbiB2SShjLGwsYSl7Y29uc3QgZD1scygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKF9JKGQsbmV3IHBJKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxtSShkLGRpKCksbCl9KGMsbCxhKX1mdW5j''@;'; put 'put ''dGlvbiBDaShjKXtjb25zdCBsPWRpKCksYT1scygpLGQ9bEMoKTtCMyhkKzEpO2NvbnN0IGg9WVMoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBsVihjKXtyZXR1cm4hKDQmfmNbVWFdKX0obCk9PT0hKDImfmgubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQo''@;'; put 'put ''W10pO2Vsc2V7Y29uc3QgZj13SShsLGQpO2MucmVzZXQoZix5ayksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTaSgpe3JldHVybiBmdW5jdGlvbiBJOChjLGwpe3JldHVybiBjW3VkXS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oZGkoKSxsQygpKX1mdW5j''@;'; put 'put ''dGlvbiBoYShjKXtyZXR1cm4gRTQoZnVuY3Rpb24gdlYoKXtyZXR1cm4gQ28ubEZyYW1lLmNvbnRleHRMVmlld30oKSx3bytjKX1mdW5jdGlvbiBMZShjLGw9IiIpe2NvbnN0IGE9ZGkoKSxkPWxzKCksaD1jK3dvLGY9ZC5maXJzdENyZWF0ZVBhc3M/ajUoZCxoLDEsbCxudWxsKTpkLmRhdGFb''@;'; put 'put ''aF0sdj11aWUoZCxhLGYsbCxjKTthW2hdPXYscTYoKSYmbDAoZCxhLHYsZiksaDIoZiwhMSl9bGV0IHVpZT0oYyxsLGEsZCxoKT0+KGYyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxbYm9dLGQpKTtmdW5jdGlvbiB3cihjKXtyZXR1cm4gRHIoIiIsYywi''@;'; put 'put ''Iiksd3J9ZnVuY3Rpb24gRHIoYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPVlsKGQsYyxsLGEpO3JldHVybiBoIT09Um8mJnYyKGQsVnUoKSxoKSxEcn1mdW5jdGlvbiBVdShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PWZ1bmN0aW9uIEdsKGMsbCxhLGQsaCxmKXtjb25zdCBNPXJwKGMsVGYoKSxh''@;'; put 'put ''LGgpO3JldHVybiBBZigyKSxNP2wrQ2EoYSkrZCtDYShoKStmOlJvfShmLGMsbCxhLGQsaCk7cmV0dXJuIHYhPT1SbyYmdjIoZixWdSgpLHYpLFV1fWZ1bmN0aW9uIFZmKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09ZGkoKSxEPWZ1bmN0aW9uIHl1KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgWj1G''@;'; put 'put ''YihjLFRmKCksYSxoLHYpO3JldHVybiBBZigzKSxaP2wrQ2EoYSkrZCtDYShoKStmK0NhKHYpK006Um99KE0sYyxsLGEsZCxoLGYsdik7cmV0dXJuIEQhPT1SbyYmdjIoTSxWdSgpLEQpLFZmfWZ1bmN0aW9uIEtJKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWRpKCkscmU9ZnVuY3Rpb24g''@;'; put 'put ''TWwoYyxsLGEsZCxoLGYsdixNLEQsWil7Y29uc3QgY2U9YmQoYyxUZigpLGEsaCx2LEQpO3JldHVybiBBZig0KSxjZT9sK0NhKGEpK2QrQ2EoaCkrZitDYSh2KStNK0NhKEQpK1o6Um99KFosYyxsLGEsZCxoLGYsdixNLEQpO3JldHVybiByZSE9PVJvJiZ2MihaLFZ1KCkscmUpLEtJfWZ1bmN0''@;'; put 'put ''aW9uIHBpKGMsbCxhKXtTSShsKSYmKGw9bCgpKTtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAobHMoKSxRcygpLGQsYyxsLGRbYm9dLGEsITEpLHBpfWZ1bmN0aW9uIG1pKGMsbCl7Y29uc3QgYT1TSShjKTtyZXR1cm4gYSYmYy5zZXQobCksYX1mdW5jdGlvbiBnaShjLGwp''@;'; put 'put ''e2NvbnN0IGE9ZGkoKSxkPWxzKCksaD11bCgpO3JldHVybiBoVShkLGEsYVtib10saCxjLGwpLGdpfWZ1bmN0aW9uIHBVKGMsbCxhLGQsaCl7aWYoYz1ZaShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKXBVKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBm''@;'; put 'put ''PWxzKCksdj1kaSgpLE09dWwoKTtsZXQgRD1fZihjKT9jOllpKGMucHJvdmlkZSk7Y29uc3QgWj1DdihjKSxyZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLGNlPU0uZGlyZWN0aXZlU3RhcnQsYmU9TS5wcm92aWRlckluZGV4ZXM+PjIwO2lmKF9mKGMpfHwhYy5tdWx0aSl7Y29uc3QgRWU9''@;'; put 'put ''bmV3IFAxKFosaCxHZSksQmU9bVUoRCxsLGg/cmU6cmUrYmUsY2UpOy0xPT09QmU/KGhkKE52KE0sdiksZixEKSxnVShmLGMsbC5sZW5ndGgpLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVz''@;'; put 'put ''aChFZSksdi5wdXNoKEVlKSk6KGFbQmVdPUVlLHZbQmVdPUVlKX1lbHNle2NvbnN0IEVlPW1VKEQsbCxyZStiZSxjZSksQmU9bVUoRCxsLHJlLHJlK2JlKSxydD1CZT49MCYmYVtCZV07aWYoaCYmIXJ0fHwhaCYmIShFZT49MCYmYVtFZV0pKXtoZChOdihNLHYpLGYsRCk7Y29uc3QgcHQ9ZnVu''@;'; put 'put ''Y3Rpb24gS3ZlKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUDEoYyxhLEdlKTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxtaWUoZixoLGQmJiFhKSxmfShoPyR2ZTpHdmUsYS5sZW5ndGgsaCxkLFopOyFoJiZydCYmKGFbQmVdLnByb3ZpZGVyRmFj''@;'; put 'put ''dG9yeT1wdCksZ1UoZixjLGwubGVuZ3RoLDApLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChwdCksdi5wdXNoKHB0KX1lbHNlIGdVKGYsYyxFZT4tMT9FZTpCZSxtaWUoYVtoP0JlOkVl''@;'; put 'put ''XSxaLCFoJiZkKSk7IWgmJmQmJnJ0JiZhW0JlXS5jb21wb25lbnRQcm92aWRlcnMrK319fWZ1bmN0aW9uIGdVKGMsbCxhLGQpe2NvbnN0IGg9X2YobCksZj1mdW5jdGlvbiBQNihjKXtyZXR1cm4hIWMudXNlQ2xhc3N9KGwpO2lmKGh8fGYpe2NvbnN0IEQ9KGY/WWkobC51c2VDbGFzcyk6bCku''@;'; put 'put ''cHJvdG90eXBlLm5nT25EZXN0cm95O2lmKEQpe2NvbnN0IFo9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHJlPVouaW5kZXhPZihhKTstMT09PXJlP1oucHVzaChhLFtkLERdKTpaW3JlKzFdLnB1c2goZCxEKX1lbHNlIFoucHVzaChh''@;'; put 'put ''LEQpfX19ZnVuY3Rpb24gbWllKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBtVShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJldHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIEd2ZShjLGws''@;'; put 'put ''YSxkKXtyZXR1cm4gdlUodGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gJHZlKGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5tdWx0aTtsZXQgZjtpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3Qgdj10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsTT1ENChhLGFbS2ldLHRo''@;'; put 'put ''aXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGQpO2Y9TS5zbGljZSgwLHYpLHZVKGgsZik7Zm9yKGxldCBEPXY7RDxNLmxlbmd0aDtEKyspZi5wdXNoKE1bRF0pfWVsc2UgZj1bXSx2VShoLGYpO3JldHVybiBmfWZ1bmN0aW9uIHZVKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbC5w''@;'; put 'put ''dXNoKCgwLGNbYV0pKCkpO3JldHVybiBsfWZ1bmN0aW9uIGRhKGMsbD1bXSl7cmV0dXJuIGE9PnthLnByb3ZpZGVyc1Jlc29sdmVyPShkLGgpPT5mdW5jdGlvbiBZdmUoYyxsLGEpe2NvbnN0IGQ9bHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgaD1WYyhjKTtwVShhLGQuZGF0YSxk''@;'; put 'put ''LmJsdWVwcmludCxoLCEwKSxwVShsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWxldCBxdmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs''@;'; put 'put ''b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXJoKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/RzQoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51''@;'; put 'put ''bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz''@;'; put 'put ''LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgYyh4cihoYykpfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBxSShjKXtiMigiTmdTdGFuZGFsb25lIiksYy5n''@;'; put 'put ''ZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQocXZlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBHcyhjLGwsYSl7Y29uc3QgZD1PMCgpK2MsaD1kaSgpO3JldHVybiBoW2RdPT09Um8/eTIoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gQWMoYyxs''@;'; put 'put ''KXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBzcChjLGwsYSxkKXtyZXR1cm4gYmllKGRpKCksTzAoKSxjLGwsYSxkKX1mdW5jdGlvbiBscChjLGwsYSxkLGgpe3JldHVybiB5aWUoZGkoKSxPMCgpLGMsbCxhLGQsaCl9ZnVuY3Rpb24gcE0oYyxsLGEsZCxoLGYpe3JldHVybiBfaWUoZGko''@;'; put 'put ''KSxPMCgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBKSShjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gd2llKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwrYTtyZXR1cm4gYmQoYyxaLGgsZix2LE0pP3kyKGMsWis0LEQ/ZC5jYWxsKEQsaCxmLHYsTSk6ZChoLGYsdixNKSk6Z00o''@;'; put 'put ''YyxaKzQpfShkaSgpLE8wKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gZ00oYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1Sbz92b2lkIDA6YX1mdW5jdGlvbiBiaWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3JldHVybiBCYyhjLHYsaCk/eTIoYyx2KzEsZj9kLmNhbGwoZixoKTpk''@;'; put 'put ''KGgpKTpnTShjLHYrMSl9ZnVuY3Rpb24geWllKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBycChjLE0saCxmKT95MihjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpnTShjLE0rMil9ZnVuY3Rpb24gX2llKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1sK2E7cmV0dXJu''@;'; put 'put ''IEZiKGMsRCxoLGYsdik/eTIoYyxEKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOmdNKGMsRCszKX1mdW5jdGlvbiBlbChjLGwpe2NvbnN0IGE9bHMoKTtsZXQgZDtjb25zdCBoPWMrd287YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24gaWJlKGMsbCl7aWYobClmb3IobGV0IGE9''@;'; put 'put ''bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9''@;'; put 'put ''ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PW11KGQudHlwZSkpLE09X2woR2UpO3RyeXtjb25zdCBEPUZ2KCExKSxaPWYoKTtyZXR1cm4gRnYoRCksZnVuY3Rpb24gT3ZlKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9''@;'; put 'put ''KGEsZGkoKSxoLFopLFp9ZmluYWxseXtfbChNKX19ZnVuY3Rpb24gRGMoYyxsLGEpe2NvbnN0IGQ9Yyt3byxoPWRpKCksZj1FNChoLGQpO3JldHVybiBtTShoLGQpP2JpZShoLE8wKCksbCxmLnRyYW5zZm9ybSxhLGYpOmYudHJhbnNmb3JtKGEpfWZ1bmN0aW9uIHo4KGMsbCxhLGQpe2NvbnN0''@;'; put 'put ''IGg9Yyt3byxmPWRpKCksdj1FNChmLGgpO3JldHVybiBtTShmLGgpP3lpZShmLE8wKCksbCx2LnRyYW5zZm9ybSxhLGQsdik6di50cmFuc2Zvcm0oYSxkKX1mdW5jdGlvbiBiVShjLGwsYSxkLGgpe2NvbnN0IGY9Yyt3byx2PWRpKCksTT1FNCh2LGYpO3JldHVybiBtTSh2LGYpP19pZSh2LE8w''@;'; put 'put ''KCksbCxNLnRyYW5zZm9ybSxhLGQsaCxNKTpNLnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gbU0oYyxsKXtyZXR1cm4gY1tLaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIEljKGMsbCl7cmV0dXJuIGZiKGMsbCl9Y2xhc3MgYk17Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1s''@;'; put 'put ''LnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBOaWU9bmV3IGJNKCIxNy4zLjEyIik7bGV0IFZpZT0oKCk9PntjbGFzcyBje2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUu''@;'; put 'put ''d2FybihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWmllPW5l''@;'; put 'put ''dyBTdCgiIiksdFI9bmV3IFN0KCIiKTtsZXQgRVUsTVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50''@;'; put 'put ''YXNrVHJhY2tpbmdab25lPW51bGwsRVV8fChmdW5jdGlvbiBRYmUoYyl7RVU9Y30oaCksaC5hZGRUb1dpbmRvdyhkKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksYS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50Lmdl''@;'; put 'put ''dCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUu''@;'; put 'put ''b25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57V2EuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBi''@;'; put 'put ''ZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9y''@;'; put 'put ''dW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKXF1ZXVlTWljcm90YXNrKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBhPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoYS50aW1lb3V0SWQpLGEuZG9uZUNiKCl9fSk7ZWxz''@;'; put 'put ''ZXtsZXQgYT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGQ9PiFkLnVwZGF0ZUNifHwhZC51cGRhdGVDYihhKXx8KGNsZWFyVGltZW91dChkLnRpbWVvdXRJZCksITEpKX19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3VyY2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYm''@;'; put 'put ''KGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKHY9PnYudGltZW91dElkIT09ZiksYSgpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZiho''@;'; put 'put ''JiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8n''@;'; put 'put ''KTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0''@;'; put 'put ''aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoV2EpLHhyKHhVKSx4''@;'; put 'put ''cih0UikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLHhVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGEsZCl7dGhp''@;'; put 'put ''cy5fYXBwbGljYXRpb25zLnNldChhLGQpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGEpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShhKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YXBwbGljYXRpb25zLmdldChhKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5k''@;'; put 'put ''VGVzdGFiaWxpdHlJblRyZWUoYSxkPSEwKXtyZXR1cm4gRVU/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGEsZCk/P251bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIF9NKGMpe3JldHVybiEhYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn1mdW5jdGlvbiBXaWUoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9''@;'; put 'put ''Y29uc3QgVFU9bmV3IFN0KCIiKTtsZXQgQVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJ''@;'; put 'put ''bml0cz1maShUVSx7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZihfTShmKSlhLnB1c2goZik7ZWxzZSBpZihXaWUoZikpe2Nv''@;'; put 'put ''bnN0IHY9bmV3IFByb21pc2UoKE0sRCk9PntmLnN1YnNjcmliZSh7Y29tcGxldGU6TSxlcnJvcjpEfSl9KTthLnB1c2godil9fWNvbnN0IGQ9KCk9Pnt0aGlzLmRvbmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PntkKCl9KS5jYXRjaChoPT57dGhpcy5yZWpl''@;'; put 'put ''Y3QoaCl9KSwwPT09YS5sZW5ndGgmJmQoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoi''@;'; put 'put ''cm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGtVPW5ldyBTdCgiIik7ZnVuY3Rpb24gJGllKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoJGllLGMpOnsuLi5jLC4uLmx9fWxldCBxND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYm9vdHN0cmFwTGlz''@;'; put 'put ''dGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9ZmkodmspLHRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPWZpKEU4KSx0aGlz''@;'; put 'put ''LmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IFduLHRoaXMuYWZ0ZXJUaWNrPW5ldyBXbix0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPWZpKFBmKS5oYXNQZW5kaW5nVGFza3MucGlwZShMcihhPT4h''@;'; put 'put ''YSkpLHRoaXMuX2luamVjdG9yPWZpKGhjKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgUUQ7aWYoIXRoaXMuX2luamVjdG9yLmdldChB''@;'; put 'put ''VSkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBuMihjKXtjb25zdCBsPVZvKGMpfHx4YyhjKXx8ZXUoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBRbig0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMuX2luamVjdG9yLmdldChXNSkucmVzb2x2ZUNvbXBvbmVudEZhY3Rv''@;'; put 'put ''cnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgTT1mdW5jdGlvbiBleWUoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KG5wKSxaPXYuY3JlYXRlKERzLk5VTEwsW10sZHx8di5zZWxlY3Rv''@;'; put 'put ''cixNKSxyZT1aLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsY2U9Wi5pbmplY3Rvci5nZXQoWmllLG51bGwpO3JldHVybiBjZT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihyZSksWi5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoWi5ob3N0VmlldyksblIodGhpcy5jb21wb25lbnRzLFopLGNl''@;'; put 'put ''Py51bnJlZ2lzdGVyQXBwbGljYXRpb24ocmUpfSksdGhpcy5fbG9hZENvbXBvbmVudChaKSxafXRpY2soKXt0aGlzLl90aWNrKCEwKX1fdGljayhhKXtpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgUW4oMTAxLCExKTtjb25zdCBkPV9lKG51bGwpO3RyeXt0aGlzLl9ydW5uaW5nVGlj''@;'; put 'put ''az0hMCx0aGlzLmRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl9Y2F0Y2goaCl7dGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcihoKX1maW5hbGx5e3RoaXMuYWZ0ZXJUaWNrLm5leHQoKSx0aGlzLl9ydW5uaW5nVGljaz0hMSxfZShkKX19ZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3''@;'; put 'put ''cyhhKXtsZXQgZD0wO2NvbnN0IGg9dGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI7Zm9yKDs7KXtpZihkPT09akQpdGhyb3cgbmV3IFFuKDEwMywhMSk7aWYoYSl7Y29uc3QgZj0wPT09ZDt0aGlzLmJlZm9yZVJlbmRlci5uZXh0KGYpO2ZvcihsZXR7X2xWaWV3OnYsbm90aWZ5RXJyb3JI''@;'; put 'put ''YW5kbGVyOk19b2YgdGhpcy5fdmlld3MpbnllKHYsZixNKX1pZihkKyssaC5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+RFUoZikpJiYoaC5leGVjdXRlKCksIVsu''@;'; put 'put ''Li50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9PkRVKGYpKSkpYnJlYWt9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2Nv''@;'; put 'put ''bnN0IGQ9YTtuUih0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoa1UsW10pO1su''@;'; put 'put ''Li50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMsLi4uZF0uZm9yRWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ry''@;'; put 'put ''b3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5uUih0aGlz''@;'; put 'put ''Ll9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3''@;'; put 'put ''cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2Z1bmN0aW9uIG5SKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBueWUoYyxsLGEpeyFsJiYhRFUoYyl8fGZ1bmN0aW9uIHJ5ZShjLGwsYSl7bGV0IGQ7YT8oZD0wLGNbVWFdfD0xMDI0KTpkPTY0JmNbVWFdPzA6MSxoYihjLGwsZCl9''@;'; put 'put ''KGMsYSxsKX1mdW5jdGlvbiBEVShjKXtyZXR1cm4gVHYoYyl9Y2xhc3MgaXlle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgS2llPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5l''@;'; put 'put ''dyBMYihhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9RjEoUHUoYSkuZGVj''@;'; put 'put ''bGFyYXRpb25zKS5yZWR1Y2UoKHYsTSk9Pntjb25zdCBEPVZvKE0pO3JldHVybiBEJiZ2LnB1c2gobmV3IGs4KEQpKSx2fSxbXSk7cmV0dXJuIG5ldyBpeWUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21w''@;'; put 'put ''aWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLHN5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy56b25lPWZpKFdhKSx0aGlzLmFwcGxpY2F0aW9uUmVmPWZpKHE0KX1pbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tF''@;'; put 'put ''bXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMuYXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBseWUoKXtjb25zdCBjPWZpKFdhKSxsPWZpKGcyKTtyZXR1cm4gYT0+Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihhKSl9bGV0IHV5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb249bmV3IHF0LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy56b25lPWZpKFdhKSx0aGlzLnBlbmRpbmdUYXNrcz1maShQZil9aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0IGE9bnVsbDshdGhpcy56b25lLmlzU3Rh''@;'; put 'put ''YmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYoYT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5v''@;'; put 'put ''blN0YWJsZS5zdWJzY3JpYmUoKCk9PntXYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PntudWxsIT09YSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tz''@;'; put 'put ''LnJlbW92ZShhKSxhPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57V2EuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGE/Pz10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgQmY9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShCZixyYS5PcHRpb25hbHxyYS5Ta2lwU2VsZil8fGZ1bmN0aW9uIGR5ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8WmJ9KCl9KSxJVT1uZXcgU3QoIiIpO2xl''@;'; put 'put ''dCBRaWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gaUkoYz0i''@;'; put 'put ''em9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9uZXcgckk6InpvbmUuanMiPT09Yz9uZXcgV2EobCk6Y30oZD8ubmdab25lLGZ1bmN0aW9uIEppZShjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENv''@;'; put 'put ''YWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigo''@;'; put 'put ''KT0+e2NvbnN0IGY9ZnVuY3Rpb24gRkkoYyxsLGEpe3JldHVybiBuZXcgUmIoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBYaWUoYyl7cmV0dXJuW3twcm92aWRlOldhLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6dDIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+''@;'; put 'put ''e2NvbnN0IGw9Zmkoc3llLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnQyLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKHV5ZSk7cmV0dXJuKCk9PntsLmluaXRpYWxpemUoKX19fSx7cHJvdmlkZTp2ayx1c2VGYWN0b3J5Omx5''@;'; put 'put ''ZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQoZzIsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBNPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6RD0+e3YuaGFuZGxlRXJyb3IoRCl9fSk7Zi5vbkRlc3Ryb3koKCk9PntuUih0aGlzLl9tb2R1bGVzLGYp''@;'; put 'put ''LE0udW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24gR2llKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIF9NKGQpP2QuY2F0Y2goaD0+e3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFu''@;'; put 'put ''Z3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fSh2LGgsKCk9Pntjb25zdCBNPWYuaW5qZWN0b3IuZ2V0KEFVKTtyZXR1cm4gTS5ydW5Jbml0aWFsaXplcnMoKSxNLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBfcmUoYyl7InN0cmluZyI9PXR5cGVvZiBjJiYoeXJlPWMudG9M''@;'; put 'put ''b3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KEJmLFpiKXx8WmIpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD0kaWUoe30sZCk7cmV0dXJuIGZ1bmN0aW9uIG95ZShjLGwsYSl7Y29u''@;'; put 'put ''c3QgZD1uZXcgTGIoYSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShkKX0oMCwwLGEpLnRoZW4oZj0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KGYsaCkpfV9tb2R1bGVEb0Jvb3RzdHJhcChhKXtjb25zdCBkPWEuaW5qZWN0b3IuZ2V0KHE0KTtpZihhLl9ib290c3RyYXBDb21wb25lbnRz''@;'; put 'put ''Lmxlbmd0aD4wKWEuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChoPT5kLmJvb3RzdHJhcChoKSk7ZWxzZXtpZighYS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBRbigtNDAzLCExKTthLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZCl9dGhpcy5fbW9kdWxlcy5wdXNoKGEp''@;'; put 'put ''fW9uRGVzdHJveShhKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZD0+''@;'; put 'put ''ZC5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChkPT5kKCkpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3IuZ2V0KElVLG51bGwpO2EmJihhLmZvckVhY2goZD0+ZCgpKSxhLmNsZWFyKCkpLHRoaXMuX2Rlc3Ryb3llZD0hMH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2Rlc3Ryb3llZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxRNT1udWxsO2NvbnN0IGVhZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIHRhZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFN0KGQpO3JldHVybihmPVtdKT0+e2xldCB2PVJVKCk7aWYoIXZ8fHYuaW5qZWN0b3IuZ2V0KGVhZSwhMSkpe2NvbnN0IE09Wy4uLmEsLi4u''@;'; put 'put ''Zix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07Yz9jKE0pOmZ1bmN0aW9uIHB5ZShjKXtpZihRNSYmIVE1LmdldChlYWUsITEpKXRocm93IG5ldyBRbig0MDAsITEpOyhmdW5jdGlvbiBZaWUoKXshZnVuY3Rpb24gT2UoYyl7RGU9Y30oKCk9Pnt0aHJvdyBuZXcgUW4oNjAwLCExKX0pfSkoKSxR''@;'; put 'put ''NT1jO2NvbnN0IGw9Yy5nZXQoUWllKTsoZnVuY3Rpb24gcmFlKGMpe2MuZ2V0KFBrLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShjKX0oZnVuY3Rpb24gbmFlKGM9W10sbCl7cmV0dXJuIERzLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6RjYsdXNlVmFsdWU6InBsYXRmb3Jt''@;'; put 'put ''In0se3Byb3ZpZGU6SVUsdXNlVmFsdWU6bmV3IFNldChbKCk9PlE1PW51bGxdKX0sLi4uY119KX0oTSxkKSl9cmV0dXJuIGZ1bmN0aW9uIGd5ZShjKXtjb25zdCBsPVJVKCk7aWYoIWwpdGhyb3cgbmV3IFFuKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFJVKCl7cmV0dXJuIFE1Py5n''@;'; put 'put ''ZXQoUWllKT8/bnVsbH1sZXQgRXM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz12eWV9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2eWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGJ5ZShjLGwsYSl7aWYoRWYoYykmJiFhKXtjb25zdCBkPU8xKGMuaW5kZXgsbCk7cmV0''@;'; put 'put ''dXJuIG5ldyBfOChkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IF84KGxbWmxdLGwpOm51bGx9KHVsKCksZGkoKSwhKDE2Jn5jKSl9Y2xhc3MgbGFle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBPYihsKX1jcmVhdGUobCl7cmV0dXJuIG5ldyBTeWUobCl9fWNvbnN0IEN5ZT0o''@;'; put 'put ''YyxsKT0+bDtjbGFzcyBTeWV7Y29uc3RydWN0b3IobCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlz''@;'; put 'put ''Ll9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVs''@;'; put 'put ''bCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPWx8fEN5ZX1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9pdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0KWwoYSl9Zm9yRWFjaE9wZXJhdGlvbihsKXtsZXQgYT10aGlzLl9pdEhlYWQsZD10aGlz''@;'; put 'put ''Ll9yZW1vdmFsc0hlYWQsaD0wLGY9bnVsbDtmb3IoO2F8fGQ7KXtjb25zdCB2PSFkfHxhJiZhLmN1cnJlbnRJbmRleDx1YWUoZCxoLGYpP2E6ZCxNPXVhZSh2LGgsZiksRD12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxs''@;'; put 'put ''PT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IFo9TS1oLHJlPUQtaDtpZihaIT1yZSl7Zm9yKGxldCBiZT0wO2JlPFo7YmUrKyl7Y29uc3QgRWU9YmU8Zi5sZW5ndGg/ZltiZV06ZltiZV09MCxCZT1FZStiZTtyZTw9QmUmJkJlPFomJihmW2JlXT1FZSsxKX1mW3Yu''@;'; put 'put ''cHJldmlvdXNJbmRleF09cmUtWn19TSE9PUQmJmwodixNLEQpfX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9h''@;'; put 'put ''ZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaE1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0TW92ZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3Zh''@;'; put 'put ''bHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UobCl7bGV0IGE7Zm9yKGE9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRJZGVudGl0eUNoYW5nZSlsKGEpfWRpZmYobCl7aWYobnVsbD09bCYmKGw9W10p''@;'; put 'put ''LCFPYihsKSl0aHJvdyBuZXcgUW4oOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7aWYoQXJyYXkuaXNBcnJheShsKSl7dGhpcy5sZW5ndGg9bC5sZW5n''@;'; put 'put ''dGg7Zm9yKGxldCBNPTA7TTx0aGlzLmxlbmd0aDtNKyspZj1sW01dLHY9dGhpcy5fdHJhY2tCeUZuKE0sZiksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxmLHYsTSkpLE9iamVjdC5pcyhhLml0ZW0sZil8fHRoaXMu''@;'; put 'put ''X2FkZElkZW50aXR5Q2hhbmdlKGEsZikpOihhPXRoaXMuX21pc21hdGNoKGEsZix2LE0pLGQ9ITApLGE9YS5fbmV4dH1lbHNlIGg9MCxmdW5jdGlvbiBReihjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbChjW2FdKTtlbHNle2NvbnN0IGE9Y1tT''@;'; put 'put ''eW1ib2wuaXRlcmF0b3JdKCk7bGV0IGQ7Zm9yKDshKGQ9YS5uZXh0KCkpLmRvbmU7KWwoZC52YWx1ZSl9fShsLE09Pnt2PXRoaXMuX3RyYWNrQnlGbihoLE0pLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsdik/KGQmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsTSx2LGgp''@;'; put 'put ''KSxPYmplY3QuaXMoYS5pdGVtLE0pfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShhLE0pKTooYT10aGlzLl9taXNtYXRjaChhLE0sdixoKSxkPSEwKSxhPWEuX25leHQsaCsrfSksdGhpcy5sZW5ndGg9aDtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoYSksdGhpcy5jb2xsZWN0aW9uPWwsdGhpcy5p''@;'; put 'put ''c0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkp''@;'; put 'put ''e2xldCBsO2ZvcihsPXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09bDtsPWwuX25leHRBZGRlZClsLnByZXZpb3VzSW5kZXg9bC5jdXJyZW50''@;'; put 'put ''SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLGw9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1sO2w9bC5fbmV4dE1vdmVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGws''@;'; put 'put ''dGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2gobCxhLGQsaCl7bGV0IGY7cmV0dXJuIG51bGw9PT1sP2Y9dGhpcy5faXRUYWlsOihmPWwuX3By''@;'; put 'put ''ZXYsdGhpcy5fcmVtb3ZlKGwpKSxudWxsIT09KGw9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fcmVpbnNlcnRB''@;'; put 'put ''ZnRlcihsLGYsaCkpOm51bGwhPT0obD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGQsaCkpPyhPYmplY3QuaXMobC5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShsLGEpLHRoaXMuX21vdmVBZnRlcihsLGYsaCkpOmw9dGhp''@;'; put 'put ''cy5fYWRkQWZ0ZXIobmV3IE15ZShhLGQpLGYsaCksbH1fdmVyaWZ5UmVpbnNlcnRpb24obCxhLGQsaCl7bGV0IGY9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKTtyZXR1cm4gbnVsbCE9PWY/bD10aGlzLl9yZWluc2Vy''@;'; put 'put ''dEFmdGVyKGYsbC5fcHJldixoKTpsLmN1cnJlbnRJbmRleCE9aCYmKGwuY3VycmVudEluZGV4PWgsdGhpcy5fYWRkVG9Nb3ZlcyhsLGgpKSxsfV90cnVuY2F0ZShsKXtmb3IoO251bGwhPT1sOyl7Y29uc3QgYT1sLl9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKSxs''@;'; put 'put ''PWF9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVz''@;'; put 'put ''VGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1Rh''@;'; put 'put ''aWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIobCxhLGQpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgaD1sLl9wcmV2UmVtb3ZlZCxm''@;'; put 'put ''PWwuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09aD90aGlzLl9yZW1vdmFsc0hlYWQ9ZjpoLl9uZXh0UmVtb3ZlZD1mLG51bGw9PT1mP3RoaXMuX3JlbW92YWxzVGFpbD1oOmYuX3ByZXZSZW1vdmVkPWgsdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxs''@;'; put 'put ''fV9tb3ZlQWZ0ZXIobCxhLGQpe3JldHVybiB0aGlzLl91bmxpbmsobCksdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxsfV9hZGRBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKGwsYSxkKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9''@;'; put 'put ''PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9bDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCxsfV9pbnNlcnRBZnRlcihsLGEsZCl7Y29uc3QgaD1udWxsPT09YT90aGlzLl9pdEhlYWQ6YS5fbmV4dDtyZXR1cm4gbC5fbmV4dD1oLGwuX3ByZXY9YSxu''@;'; put 'put ''dWxsPT09aD90aGlzLl9pdFRhaWw9bDpoLl9wcmV2PWwsbnVsbD09PWE/dGhpcy5faXRIZWFkPWw6YS5fbmV4dD1sLG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgY2FlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dChsKSxsLmN1cnJlbnRJbmRl''@;'; put 'put ''eD1kLGx9X3JlbW92ZShsKXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpfV91bmxpbmsobCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKGwpO2NvbnN0IGE9bC5fcHJldixkPWwuX25leHQ7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1hP3RoaXMuX2l0SGVhZD1kOmEuX25leHQ9ZCxudWxsPT09ZD90aGlzLl9pdFRhaWw9YTpkLl9wcmV2PWEsbH1fYWRkVG9Nb3ZlcyhsLGEpe3JldHVybiBsLnByZXZpb3VzSW5kZXg9PT1hfHwodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNI''@;'; put 'put ''ZWFkPWw6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bCksbH1fYWRkVG9SZW1vdmFscyhsKXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgY2FlKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudElu''@;'; put 'put ''ZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFs''@;'; put 'put ''c1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVudGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hl''@;'; put 'put ''YWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bCxsfX1jbGFzcyBNeWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5f''@;'; put 'put ''bmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0''@;'; put 'put ''TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgeHlle2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxs''@;'; put 'put ''Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5j''@;'; put 'put ''dXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1h''@;'; put 'put ''OmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgY2Fle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQobCl7Y29uc3QgYT1sLnRyYWNrQnlJZDtsZXQgZD10aGlzLm1hcC5nZXQoYSk7ZHx8KGQ9bmV3IHh5ZSx0aGlzLm1hcC5zZXQoYSxkKSksZC5hZGQobCl9''@;'; put 'put ''Z2V0KGwsYSl7Y29uc3QgaD10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGg/aC5nZXQobCxhKTpudWxsfXJlbW92ZShsKXtjb25zdCBhPWwudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoYSkucmVtb3ZlKGwpJiZ0aGlzLm1hcC5kZWxldGUoYSksbH1nZXQgaXNFbXB0eSgpe3JldHVybiAw''@;'; put 'put ''PT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIHVhZShjLGwsYSl7Y29uc3QgZD1jLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWQpcmV0dXJuIGQ7bGV0IGg9MDtyZXR1cm4gYSYmZDxhLmxlbmd0aCYmKGg9YVtkXSksZCtsK2h9Y2xhc3MgZGFle2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxKUyhsKX1jcmVhdGUoKXtyZXR1cm4gbmV3IEV5ZX19Y2xhc3MgRXlle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1u''@;'; put 'put ''dWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxz''@;'; put 'put ''VGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEu''@;'; put 'put ''X25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEu''@;'; put 'put ''X25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEu''@;'; put 'put ''X25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fEpTKGwpKSl0aHJvdyBuZXcgUW4oOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7''@;'; put 'put ''bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9n''@;'; put 'put ''ZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlz''@;'; put 'put ''Ll9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVy''@;'; put 'put ''biB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtj''@;'; put 'put ''b25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRB''@;'; put 'put ''ZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7''@;'; put 'put ''dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYodi5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgVHllKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChs''@;'; put 'put ''LGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5f''@;'; put 'put ''bmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1''@;'; put 'put ''ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxs''@;'; put 'put ''LmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0''@;'; put 'put ''aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFp''@;'; put 'put ''bC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgVHlle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2''@;'; put 'put ''aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVu''@;'; put 'put ''Y3Rpb24gaGFlKCl7cmV0dXJuIG5ldyBlbShbbmV3IGxhZV0pfWxldCBlbT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpoYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBj''@;'; put 'put ''cmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxoYWUoKSksZGVwczpbW2MsbmV3IGxk''@;'; put 'put ''LG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihudWxsIT1kKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZmFlKCl7cmV0dXJuIG5ldyB3TShbbmV3IGRhZV0pfWxldCB3''@;'; put 'put ''TT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNl''@;'; put 'put ''KCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxmYWUoKSksZGVwczpbW2MsbmV3IGxkLG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZCho''@;'; put 'put ''PT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7Y29uc3QgRHllPXRhZShudWxsLCJjb3JlIixbXSk7bGV0IEl5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihxNCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzMShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNl''@;'; put 'put ''IiE9PWN9ZnVuY3Rpb24gUGFlKGMpe2NvbnN0IGw9X2UobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtfZShsKX19bGV0IEhhZT1udWxsO2Z1bmN0aW9uIHRtKCl7cmV0dXJuIEhhZX1jbGFzcyBwX2V7fWNvbnN0IHZzPW5ldyBTdCgiIik7bGV0IFZVPSgoKT0+e2NsYXNzIGN7aGlzdG9y''@;'; put 'put ''eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkobV9lKSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpO2NvbnN0IGdfZT1uZXcgU3QoIiIpO2xldCBtX2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFZVe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9ZmkodnMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlzLl9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJh''@;'; put 'put ''c2VIcmVmRnJvbURPTSgpe3JldHVybiB0bSgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9''@;'; put 'put ''PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBv''@;'; put 'put ''cnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0''@;'; put 'put ''aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxoKX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3''@;'; put 'put ''YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5uZXcgYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJVKGMsbCl7aWYoMD09Yy5sZW5ndGgpcmV0dXJuIGw7aWYoMD09bC5sZW5ndGgpcmV0dXJuIGM7bGV0IGE9MDtyZXR1cm4g''@;'; put 'put ''Yy5lbmRzV2l0aCgiLyIpJiZhKyssbC5zdGFydHNXaXRoKCIvIikmJmErKywyPT1hP2MrbC5zdWJzdHJpbmcoMSk6MT09YT9jK2w6YysiLyIrbH1mdW5jdGlvbiBOYWUoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMubGVuZ3RoO3JldHVybiBjLnNsaWNlKDAs''@;'; put 'put ''YS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gWDQoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgWjg9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7''@;'; put 'put ''cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maShCYWUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBWYWU9bmV3IFN0KCIiKTtsZXQgQmFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBaOHtjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCk/P2ZpKHZzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1u''@;'; put 'put ''Z09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhp''@;'; put 'put ''cy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gQlUodGhpcy5fYmFzZUhyZWYsYSl9cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24u''@;'; put 'put ''cGF0aG5hbWUrWDQodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTt0aGlzLl9w''@;'; put 'put ''bGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtYNChmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxv''@;'; put 'put ''Y2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoVlUpLHhyKFZhZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdl9lPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyBaOHtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5f''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhh''@;'; put 'put ''c2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7Y29uc3QgZD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g/PyIjIjtyZXR1cm4gZC5sZW5ndGg+MD9kLnN1YnN0cmluZygxKTpkfXByZXBhcmVFeHRlcm5hbFVybChhKXtjb25zdCBk''@;'; put 'put ''PUJVKHRoaXMuX2Jhc2VIcmVmLGEpO3JldHVybiBkLmxlbmd0aD4wPyIjIitkOmR9cHVzaFN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0''@;'; put 'put ''Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJl''@;'; put 'put ''cGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7''@;'; put 'put ''dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihWVSkseHIoVmFlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9''@;'; put 'put ''fXJldHVybiBjfSkoKSxmaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3N1YmplY3Q9bmV3IEtyLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWE7Y29uc3QgZD10aGlz''@;'; put 'put ''Ll9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24gX19lKGMpe2lmKG5ldyBSZWdFeHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KGMpKXtjb25zdFssYV09Yy5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBhfXJldHVybiBjfShOYWUoamFlKGQp''@;'; put 'put ''KSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKGg9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpoLnN0YXRlLHR5cGU6aC50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJz''@;'; put 'put ''Y3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChhPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGEpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0''@;'; put 'put ''aEVxdWFsVG8oYSxkPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGErWDQoZCkpfW5vcm1hbGl6ZShhKXtyZXR1cm4gYy5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24geV9lKGMsbCl7aWYoIWN8fCFsLnN0YXJ0c1dpdGgoYykpcmV0dXJuIGw7Y29uc3QgYT1sLnN1''@;'; put 'put ''YnN0cmluZyhjLmxlbmd0aCk7cmV0dXJuIiI9PT1hfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhhWzBdKT9hOmx9KHRoaXMuX2Jhc2VQYXRoLGphZShhKSkpfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gYSYmIi8iIT09YVswXSYmKGE9Ii8iK2EpLHRoaXMuX2xvY2F0aW9uU3Ry''@;'; put 'put ''YXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGEpfWdvKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9cmVwbGFjZVN0''@;'; put 'put ''YXRlKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3ku''@;'; put 'put ''Zm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGEpfW9uVXJsQ2hhbmdlKGEpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChhKSx0aGlzLl91cmxD''@;'; put 'put ''aGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN1YnNjcmliZShkPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGQudXJsLGQuc3RhdGUpfSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxp''@;'; put 'put ''Y2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91''@;'; put 'put ''cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9c3RhdGlje3RoaXMubm9ybWFsaXplUXVlcnlQYXJhbXM9WDR9c3RhdGlje3RoaXMuam9p''@;'; put 'put ''bldpdGhTbGFzaD1CVX1zdGF0aWN7dGhpcy5zdHJpcFRyYWlsaW5nU2xhc2g9TmFlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFo4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZnVuY3Rpb24g''@;'; put 'put ''Yl9lKCl7cmV0dXJuIG5ldyBmaCh4cihaOCkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBqYWUoYyl7cmV0dXJuIGMucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciBkMD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkZvcm1hdD0wXT0iRm9ybWF0''@;'; put 'put ''IixjW2MuU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSIsY30oZDB8fHt9KSxkbD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5hcnJvdz0wXT0iTmFycm93IixjW2MuQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixjW2MuV2lkZT0yXT0iV2lkZSIsY1tjLlNob3J0PTNdPSJTaG9ydCIsY30o''@;'; put 'put ''ZGx8fHt9KSxDZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNob3J0PTBdPSJTaG9ydCIsY1tjLk1lZGl1bT0xXT0iTWVkaXVtIixjW2MuTG9uZz0yXT0iTG9uZyIsY1tjLkZ1bGw9M109IkZ1bGwiLGN9KENkfHx7fSk7ZnVuY3Rpb24galUoYyxsLGEpe2NvbnN0IGQ9bzEoYyksZj1DMihbZFtl''@;'; put 'put ''Yy5EYXlzRm9ybWF0XSxkW2VjLkRheXNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIEMyKGYsYSl9ZnVuY3Rpb24gelUoYyxsLGEpe2NvbnN0IGQ9bzEoYyksZj1DMihbZFtlYy5Nb250aHNGb3JtYXRdLGRbZWMuTW9udGhzU3RhbmRhbG9uZV1dLGwpO3JldHVybiBDMihmLGEpfWZ1bmN0aW9uIEMy''@;'; put 'put ''KGMsbCl7Zm9yKGxldCBhPWw7YT4tMTthLS0paWYodHlwZW9mIGNbYV08InUiKXJldHVybiBjW2FdO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1mdW5jdGlvbiBxYWUoYyxsKXtsPWVuY29kZVVSSUNvbXBvbmVudChsKTtmb3IoY29u''@;'; put 'put ''c3QgYSBvZiBjLnNwbGl0KCI7Iikpe2NvbnN0IGQ9YS5pbmRleE9mKCI9IiksW2gsZl09LTE9PWQ/W2EsIiJdOlthLnNsaWNlKDAsZCksYS5zbGljZShkKzEpXTtpZihoLnRyaW0oKT09PWwpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChmKX1yZXR1cm4gbnVsbH1jb25zdCBKVT0vXHMrLyxY''@;'; put 'put ''YWU9W107bGV0IHd1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ0VsPWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLmluaXRpYWxDbGFzc2VzPVhhZSx0aGlzLnN0YXRlTWFwPW5ldyBNYXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRy''@;'; put 'put ''aW0oKS5zcGxpdChKVSk6WGFlfXNldCBuZ0NsYXNzKGEpe3RoaXMucmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBhP2EudHJpbSgpLnNwbGl0KEpVKTphfW5nRG9DaGVjaygpe2Zvcihjb25zdCBkIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoYSl8fGEgaW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IGQgb2YgYSl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtlbHNlIGlmKG51bGwhPWEpZm9yKGNvbnN0IGQgb2YgT2JqZWN0LmtleXMoYSkpdGhpcy5fdXBkYXRlU3RhdGUoZCwhIWFb''@;'; put 'put ''ZF0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLnN0YXRlTWFwLmdldChhKTt2b2lkIDAhPT1oPyhoLmVuYWJsZWQhPT1kJiYoaC5jaGFuZ2VkPSEwLGguZW5hYmxlZD1kKSxoLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0KGEse2Vu''@;'; put 'put ''YWJsZWQ6ZCxjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlTdGF0ZURpZmYoKXtmb3IoY29uc3QgYSBvZiB0aGlzLnN0YXRlTWFwKXtjb25zdCBkPWFbMF0saD1hWzFdO2guY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoZCxoLmVuYWJsZWQpLGguY2hhbmdlZD0hMSk6aC50b3VjaGVk''@;'; put 'put ''fHwoaC5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhkLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShkKSksaC50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoYSxkKXsoYT1hLnRyaW0oKSkubGVuZ3RoPjAmJmEuc3BsaXQoSlUpLmZvckVhY2goaD0+e2Q/dGhpcy5fcmVuZGVyZXIuYWRkQ2xh''@;'; put 'put ''c3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbykpfX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOltObi5Ob25lLCJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIGF3ZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgbnM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkoYSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJh''@;'; put 'put ''Y2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNl''@;'; put 'put ''dCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJz''@;'; put 'put ''LmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdlcyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7''@;'; put 'put ''YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsdik9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGF3ZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXY/dm9pZCAwOnYpO2Vsc2UgaWYobnVsbD09dilkLnJl''@;'; put 'put ''bW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgTT1kLmdldChmKTtkLm1vdmUoTSx2KSxRYWUoTSxoKX19KTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspe2NvbnN0IE09ZC5nZXQoaCkuY29udGV4dDtNLmluZGV4PWgsTS5jb3VudD1mLE0ubmdG''@;'; put 'put ''b3JPZj10aGlzLl9uZ0Zvck9mfWEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGg9PntRYWUoZC5nZXQoaC5jdXJyZW50SW5kZXgpLGgpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKShHZShEbyksR2UoU2wpLEdlKGVtKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JU''@;'; put 'put ''ZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFFhZShjLGwpe2MuY29udGV4dC4kaW1wbGljaXQ9bC5pdGVtfWxldCBiYT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMu''@;'; put 'put ''X2NvbnRleHQ9bmV3IG93ZSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWR9c2V0IG5nSWYoYSl7dGhpcy5fY29udGV4''@;'; put 'put ''dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWEsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihhKXtlb2UoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2Uo''@;'; put 'put ''YSl7ZW9lKCJuZ0lmRWxzZSIsYSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWEsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIu''@;'; put 'put ''Y2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3''@;'; put 'put ''UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMu''@;'; put 'put ''X2NvbnRleHQpKSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIiIsIm5nSWYiLCIiXV0saW5wdXRzOntuZ0lmOiJuZ0lmIixuZ0lmVGhlbjoibmdJZlRoZW4iLG5nSWZFbHNlOiJuZ0lmRWxzZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIG93ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51''@;'; put 'put ''bGx9fWZ1bmN0aW9uIGVvZShjLGwpe2lmKGwmJiFsLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7Y30gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7UHIobCl9Jy5gKX1jbGFzcyBRVXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ZpZXdDb250YWlu''@;'; put 'put ''ZXJSZWY9bCx0aGlzLl90ZW1wbGF0ZVJlZj1hLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5f''@;'; put 'put ''dmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZShsKXtsJiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiFsJiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19bGV0IFMyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10s''@;'; put 'put ''dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0''@;'; put 'put ''Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGEpfV9tYXRjaENhc2UoYSl7Y29uc3QgZD1hPT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fD1kLHRo''@;'; put 'put ''aXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0''@;'; put 'put ''Y2hlZD0hMSksZH1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBkIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylkLmVuZm9yY2VTdGF0ZShhKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLGNwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgUVUoYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3''@;'; put 'put ''aXRjaENhc2UpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpLEdlKFMyLDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25n''@;'; put 'put ''U3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksbm9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5f''@;'; put 'put ''ZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5fbmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhp''@;'; put 'put ''cy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSx2PS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsdik6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsdil9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNo''@;'; put 'put ''QWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShH''@;'; put 'put ''ZShKaSksR2Uod00pLEdlKEVvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLE4xPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhhKXtp''@;'; put 'put ''Zih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcoYSkpe2NvbnN0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZkLnJlbW92ZShkLmluZGV4T2YodGhpcy5fdmlld1JlZikpLCF0aGlzLm5nVGVtcGxhdGVPdXRsZXQpcmV0dXJuIHZvaWQodGhpcy5fdmlld1JlZj1u''@;'; put 'put ''dWxsKTtjb25zdCBoPXRoaXMuX2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKTt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCxoLHtpbmplY3Rvcjp0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj8/dm9pZCAwfSl9fV9zaG91bGRS''@;'; put 'put ''ZWNyZWF0ZVZpZXcoYSl7cmV0dXJuISFhLm5nVGVtcGxhdGVPdXRsZXR8fCEhYS5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3J9X2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKXtyZXR1cm4gbmV3IFByb3h5KHt9LHtzZXQ6KGEsZCxoKT0+ISF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0''@;'; put 'put ''JiZSZWZsZWN0LnNldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCksZ2V0OihhLGQsaCk9PntpZih0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KXJldHVybiBSZWZsZWN0LmdldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCl9fSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRG8pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFzcyB1d2V7Y3JlYXRlU3Vic2Ny''@;'; put 'put ''aXB0aW9uKGwsYSl7cmV0dXJuIFBhZSgoKT0+bC5zdWJzY3JpYmUoe25leHQ6YSxlcnJvcjpkPT57dGhyb3cgZH19KSl9ZGlzcG9zZShsKXtQYWUoKCk9PmwudW5zdWJzY3JpYmUoKSl9fWNsYXNzIGR3ZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gbC50aGVuKGEsZD0+e3Rocm93''@;'; put 'put ''IGR9KX1kaXNwb3NlKGwpe319Y29uc3QgaHdlPW5ldyBkd2UsZndlPW5ldyB1d2U7bGV0IEVNPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITAsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGws''@;'; put 'put ''dGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtpZighdGhpcy5fb2JqKXtpZihhKXRyeXt0aGlzLm1hcmtGb3JDaGVj''@;'; put 'put ''a09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKGEpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZX1yZXR1cm4gYSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGEpKTp0aGlz''@;'; put 'put ''Ll9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKGEpe3RoaXMuX29iaj1hLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGEpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oYSxkPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShhLGQp''@;'; put 'put ''KX1fc2VsZWN0U3RyYXRlZ3koYSl7aWYoX00oYSkpcmV0dXJuIGh3ZTtpZihXaWUoYSkpcmV0dXJuIGZ3ZTt0aHJvdyBmdW5jdGlvbiB6ZihjLGwpe3JldHVybiBuZXcgUW4oMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiks''@;'; put 'put ''dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUmJnRoaXMuX3JlZj8u''@;'; put 'put ''bWFya0ZvckNoZWNrKCkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVzLDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxl''@;'; put 'put ''Wj0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJqc29uIix0eXBlOmMscHVyZToh''@;'; put 'put ''MSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSx3Uj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlmZmVycz1hLHRoaXMua2V5VmFsdWVzPVtdLHRoaXMuY29tcGFyZUZuPXJvZX10cmFuc2Zvcm0oYSxkPXJvZSl7aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpO2NvbnN0IGg9dGhpcy5kaWZmZXIuZGlmZihhKSxmPWQhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaCYmKHRoaXMua2V5VmFsdWVzPVtdLGguZm9yRWFjaEl0ZW0o''@;'; put 'put ''dj0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24geHdlKGMsbCl7cmV0dXJue2tleTpjLHZhbHVlOmx9fSh2LmtleSx2LmN1cnJlbnRWYWx1ZSkpfSkpLChofHxmKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZCksdGhpcy5jb21wYXJlRm49ZCksdGhpcy5rZXlWYWx1ZXN9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uod00sMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJvZShjLGwpe2NvbnN0''@;'; put 'put ''IGE9Yy5rZXksZD1sLmtleTtpZihhPT09ZClyZXR1cm4gMDtpZih2b2lkIDA9PT1hKXJldHVybiAxO2lmKHZvaWQgMD09PWQpcmV0dXJuLTE7aWYobnVsbD09PWEpcmV0dXJuIDE7aWYobnVsbD09PWQpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGE8ZD8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkKXJldHVybiBhLWQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7Y29uc3QgaD1TdHJpbmcoYSksZj1TdHJpbmcoZCk7cmV0dXJu''@;'; put 'put ''IGg9PWY/MDpoPGY/LTE6MX1sZXQgUmE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7ZnVuY3Rpb24gdGwoYyl7cmV0dXJuImJyb3dzZXIiPT09Y31mdW5jdGlvbiBhb2UoYyl7cmV0dXJuInNlcnZlciI9PT1jfWxldCBSd2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PnRsKGZp''@;'; put 'put ''KGlvKSk/bmV3IEx3ZShmaSh2cyksd2luZG93KTpuZXcgUHdlfSl9fXJldHVybiBjfSkoKTtjbGFzcyBMd2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRvY3VtZW50PWwsdGhpcy53aW5kb3c9YSx0aGlzLm9mZnNldD0oKT0+WzAsMF19c2V0T2Zmc2V0KGwpe3RoaXMub2Zmc2V0PUFycmF5Lmlz''@;'; put 'put ''QXJyYXkobCk/KCk9Pmw6bH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblt0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy53aW5kb3cuc2Nyb2xsVG8obFswXSxsWzFdKX1zY3JvbGxUb0FuY2hvcihsKXtjb25zdCBhPWZ1''@;'; put 'put ''bmN0aW9uIE93ZShjLGwpe2NvbnN0IGE9Yy5nZXRFbGVtZW50QnlJZChsKXx8Yy5nZXRFbGVtZW50c0J5TmFtZShsKVswXTtpZihhKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNyZWF0ZVRyZWVXYWxrZXImJmMuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuYm9keS5hdHRh''@;'; put 'put ''Y2hTaGFkb3cpe2NvbnN0IGQ9Yy5jcmVhdGVUcmVlV2Fsa2VyKGMuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IGg9ZC5jdXJyZW50Tm9kZTtmb3IoO2g7KXtjb25zdCBmPWguc2hhZG93Um9vdDtpZihmKXtjb25zdCB2PWYuZ2V0RWxlbWVudEJ5SWQobCl8fGYucXVlcnlTZWxl''@;'; put 'put ''Y3RvcihgW25hbWU9IiR7bH0iXWApO2lmKHYpcmV0dXJuIHZ9aD1kLm5leHROb2RlKCl9fXJldHVybiBudWxsfSh0aGlzLmRvY3VtZW50LGwpO2EmJih0aGlzLnNjcm9sbFRvRWxlbWVudChhKSxhLmZvY3VzKCkpfXNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbihsKXt0aGlzLndpbmRvdy5o''@;'; put 'put ''aXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uPWx9c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlz''@;'; put 'put ''LndpbmRvdy5zY3JvbGxUbyhkLWZbMF0saC1mWzFdKX19Y2xhc3MgUHdle3NldE9mZnNldChsKXt9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm5bMCwwXX1zY3JvbGxUb1Bvc2l0aW9uKGwpe31zY3JvbGxUb0FuY2hvcihsKXt9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe319Y2xh''@;'; put 'put ''c3Mgb29le31jbGFzcyBjQ2UgZXh0ZW5kcyBwX2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fWNsYXNzIGlaIGV4dGVuZHMgY0Nle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBmX2UoYyl7SGFlPz89Y30obmV3IGla''@;'; put 'put ''KX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92''@;'; put 'put ''ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRs''@;'; put 'put ''ZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRh''@;'; put 'put ''cmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VIcmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gdUNlKCl7cmV0dXJuIGtNPWtNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksa00/a00u''@;'; put 'put ''Z2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIGRDZShjKXtyZXR1cm4gbmV3IFVSTChjLGRvY3VtZW50LmJhc2VVUkkpLnBhdGhuYW1lfShhKX1yZXNldEJhc2VFbGVtZW50KCl7a009bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2lu''@;'; put 'put ''ZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKGwpe3JldHVybiBxYWUoZG9jdW1lbnQuY29va2llLGwpfX1sZXQga009bnVsbCxmQ2U9KCgpPT57Y2xhc3MgY3tidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgYVo9bmV3IFN0KCIiKTtsZXQgZ29lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl96b25lPWQsdGhp''@;'; put 'put ''cy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxhLmZvckVhY2goaD0+e2gubWFuYWdlcj10aGlzfSksdGhpcy5fcGx1Z2lucz1hLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGQpLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''YSxkLGgpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihhKXtsZXQgZD10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoYSk7aWYoZClyZXR1cm4gZDtpZihkPXRoaXMuX3BsdWdpbnMuZmluZChmPT5mLnN1cHBvcnRzKGEpKSwhZCl0aHJvdyBuZXcgUW4oNTEw''@;'; put 'put ''MSwhMSk7cmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChhLGQpLGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoYVopLHhyKFdhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgbW9le2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvYz1sfX1jb25zdCBvWj0ibmctYXBwLWlkIjtsZXQgdm9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZj17fSl7dGhpcy5kb2M9YSx0aGlzLmFwcElkPWQsdGhpcy5ub25jZT1oLHRo''@;'; put 'put ''aXMucGxhdGZvcm1JZD1mLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMuc3R5bGVOb2Rlc0luRE9NPXRoaXMuY29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCksdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShmKSx0aGlzLnJlc2V0SG9zdE5vZGVz''@;'; put 'put ''KCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJl''@;'; put 'put ''bW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMuc3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3RO''@;'; put 'put ''b2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlz''@;'; put 'put ''LnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1v''@;'; put 'put ''dmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske29afT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFj''@;'; put 'put ''aChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdl''@;'; put 'put ''fXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltdfSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShvWiks''@;'; put 'put ''Zjt7Y29uc3Qgdj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZ2LnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLHYudGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJnYuc2V0QXR0cmlidXRlKG9aLHRoaXMuYXBwSWQp''@;'; put 'put ''LGEuYXBwZW5kQ2hpbGQodiksdn19YWRkU3R5bGVUb0hvc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0U3R5bGVFbGVtZW50KGEsZCksZj10aGlzLnN0eWxlUmVmLHY9Zi5nZXQoZCk/LmVsZW1lbnRzO3Y/di5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0''@;'; put 'put ''Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVzO2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoJHYpLHhyKEw1LDgpLHhyKGlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3Qgc1o9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu''@;'; put 'put ''ayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sbFo9LyVDT01QJS9nLHZDZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24geW9lKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShsWixjKSl9bGV0IGNaPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWEsdGhpcy5zaGFyZWRTdHlsZXNI''@;'; put 'put ''b3N0PWQsdGhpcy5hcHBJZD1oLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1mLHRoaXMuZG9jPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLm5vbmNlPVosdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShN''@;'; put 'put ''KSx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgdVooYSx2LEQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyKX1jcmVhdGVSZW5kZXJlcihhLGQpe2lmKCFhfHwhZClyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZkLmVuY2Fwc3VsYXRpb249PT1Kcy5TaGFk''@;'; put 'put ''b3dEb20mJihkPXsuLi5kLGVuY2Fwc3VsYXRpb246SnMuRW11bGF0ZWR9KTtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpO3JldHVybiBoIGluc3RhbmNlb2Ygd29lP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIGRaJiZoLmFwcGx5U3R5bGVzKCksaH1nZXRPckNy''@;'; put 'put ''ZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsTT10aGlzLm5nWm9uZSxEPXRoaXMuZXZlbnRNYW5hZ2VyLFo9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LHJlPXRoaXMucmVtb3ZlU3R5''@;'; put 'put ''bGVzT25Db21wRGVzdHJveSxjZT10aGlzLnBsYXRmb3JtSXNTZXJ2ZXI7c3dpdGNoKGQuZW5jYXBzdWxhdGlvbil7Y2FzZSBKcy5FbXVsYXRlZDpmPW5ldyB3b2UoRCxaLGQsdGhpcy5hcHBJZCxyZSx2LE0sY2UpO2JyZWFrO2Nhc2UgSnMuU2hhZG93RG9tOnJldHVybiBuZXcgd0NlKEQsWixh''@;'; put 'put ''LGQsdixNLHRoaXMubm9uY2UsY2UpO2RlZmF1bHQ6Zj1uZXcgZFooRCxaLGQscmUsdixNLGNlKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoeHIoZ29lKSx4cih2b2UpLHhyKCR2KSx4cih2Q2UpLHhyKHZzKSx4cihpbykseHIoV2EpLHhyKEw1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgdVp7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''LGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmdab25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aHJvd09uU3ludGhldGljUHJvcHM9ITAsdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3ko''@;'; put 'put ''KXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhzWlthXXx8YSxsKTp0aGlzLmRvYy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoX29lKGwpP2wuY29udGVudDpsKS5hcHBlbmRDaGlsZChhKX1pbnNlcnRCZWZvcmUobCxhLGQpe2wmJihfb2UobCk/bC5jb250ZW50OmwpLmluc2VydEJlZm9yZShhLGQpfXJlbW92ZUNoaWxkKGwsYSl7bCYmbC5y''@;'; put 'put ''ZW1vdmVDaGlsZChhKX1zZWxlY3RSb290RWxlbWVudChsLGEpe2xldCBkPSJzdHJpbmciPT10eXBlb2YgbD90aGlzLmRvYy5xdWVyeVNlbGVjdG9yKGwpOmw7aWYoIWQpdGhyb3cgbmV3IFFuKC01MTA0LCExKTtyZXR1cm4gYXx8KGQudGV4dENvbnRlbnQ9IiIpLGR9cGFyZW50Tm9kZShsKXty''@;'; put 'put ''ZXR1cm4gbC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKGwpe3JldHVybiBsLm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZShsLGEsZCxoKXtpZihoKXthPWgrIjoiK2E7Y29uc3QgZj1zWltoXTtmP2wuc2V0QXR0cmlidXRlTlMoZixhLGQpOmwuc2V0QXR0cmlidXRlKGEsZCl9ZWxzZSBsLnNldEF0''@;'; put 'put ''dHJpYnV0ZShhLGQpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7aWYoZCl7Y29uc3QgaD1zWltkXTtoP2wucmVtb3ZlQXR0cmlidXRlTlMoaCxhKTpsLnJlbW92ZUF0dHJpYnV0ZShgJHtkfToke2F9YCl9ZWxzZSBsLnJlbW92ZUF0dHJpYnV0ZShhKX1hZGRDbGFzcyhsLGEpe2wuY2xhc3NMaXN0''@;'; put 'put ''LmFkZChhKX1yZW1vdmVDbGFzcyhsLGEpe2wuY2xhc3NMaXN0LnJlbW92ZShhKX1zZXRTdHlsZShsLGEsZCxoKXtoJihLMy5EYXNoQ2FzZXxLMy5JbXBvcnRhbnQpP2wuc3R5bGUuc2V0UHJvcGVydHkoYSxkLGgmSzMuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTpsLnN0eWxlW2FdPWR9cmVt''@;'; put 'put ''b3ZlU3R5bGUobCxhLGQpe2QmSzMuRGFzaENhc2U/bC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShhKTpsLnN0eWxlW2FdPSIifXNldFByb3BlcnR5KGwsYSxkKXtudWxsIT1sJiYobFthXT1kKX1zZXRWYWx1ZShsLGEpe2wubm9kZVZhbHVlPWF9bGlzdGVuKGwsYSxkKXtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGwmJiEobD10bSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuZG9jLGwpKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke2x9IGZvciBldmVudCAke2F9YCk7cmV0dXJuIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCxhLHRoaXMu''@;'; put 'put ''ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChkKSl9ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChsKXtyZXR1cm4gYT0+e2lmKCJfX25nVW53cmFwX18iPT09YSlyZXR1cm4gbDshMT09PSh0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI/dGhpcy5uZ1pvbmUucnVuR3VhcmRlZCgoKT0+bChhKSk6bChhKSkmJmEu''@;'; put 'put ''cHJldmVudERlZmF1bHQoKX19fWZ1bmN0aW9uIF9vZShjKXtyZXR1cm4iVEVNUExBVEUiPT09Yy50YWdOYW1lJiZ2b2lkIDAhPT1jLmNvbnRlbnR9Y2xhc3Mgd0NlIGV4dGVuZHMgdVp7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXtzdXBlcihsLGYsdixEKSx0aGlzLnNoYXJlZFN0eWxl''@;'; put 'put ''c0hvc3Q9YSx0aGlzLmhvc3RFbD1kLHRoaXMuc2hhZG93Um9vdD1kLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IFo9eW9lKGguaWQsaC5zdHlsZXMpO2Zvcihjb25zdCByZSBvZiBaKXtjb25z''@;'; put 'put ''dCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO00mJmNlLnNldEF0dHJpYnV0ZSgibm9uY2UiLE0pLGNlLnRleHRDb250ZW50PXJlLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjZSl9fW5vZGVPclNoYWRvd1Jvb3QobCl7cmV0dXJuIGw9PT10aGlzLmhvc3RFbD90aGlz''@;'; put 'put ''LnNoYWRvd1Jvb3Q6bH1hcHBlbmRDaGlsZChsLGEpe3JldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCksYSl9aW5zZXJ0QmVmb3JlKGwsYSxkKXtyZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhLGQpfXJlbW92''@;'; put 'put ''ZUNoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCkpKX1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19Y2xhc3MgZFogZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3N1cGVyKGwsZix2LE0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1hLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJv''@;'; put 'put ''eT1oLHRoaXMuc3R5bGVzPUQ/eW9lKEQsZC5zdHlsZXMpOmQuc3R5bGVzfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyl9ZGVzdHJveSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmdGhpcy5zaGFyZWRTdHlsZXNIb3N0''@;'; put 'put ''LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyl9fWNsYXNzIHdvZSBleHRlbmRzIGRae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7Y29uc3QgWj1oKyItIitkLmlkO3N1cGVyKGwsYSxkLGYsdixNLEQsWiksdGhpcy5jb250ZW50QXR0cj1mdW5jdGlvbiBiQ2UoYyl7cmV0dXJuIl9uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlIi5yZXBsYWNlKGxaLGMpfShaKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIHlDZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UobFosYyl9KFopfWFwcGx5VG9Ib3N0KGwpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZShsLHRoaXMuaG9z''@;'; put 'put ''dEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPXN1cGVyLmNyZWF0ZUVsZW1lbnQobCxhKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKGQsdGhpcy5jb250ZW50QXR0ciwiIiksZH19bGV0IENDZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbW9le2NvbnN0cnVjdG9yKGEpe3N1''@;'; put 'put ''cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBDb2U9WyJhbHQi''@;'; put 'put ''LCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sU0NlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1Vw''@;'; put 'put ''IixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxNQ2U9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtleSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgeENlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyBtb2V7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuIG51bGwhPWMucGFyc2VFdmVudE5hbWUoYSl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7Y29uc3QgZj1jLnBhcnNlRXZlbnROYW1lKGQpLHY9Yy5ldmVudENhbGxiYWNrKGYuZnVsbEtl''@;'; put 'put ''eSxoLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50bSgpLm9uQW5kQ2FuY2VsKGEsZi5kb21FdmVudE5hbWUsdikpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZShhKXtjb25zdCBkPWEudG9Mb3dlckNhc2Uo''@;'; put 'put ''KS5zcGxpdCgiLiIpLGg9ZC5zaGlmdCgpO2lmKDA9PT1kLmxlbmd0aHx8ImtleWRvd24iIT09aCYmImtleXVwIiE9PWgpcmV0dXJuIG51bGw7Y29uc3QgZj1jLl9ub3JtYWxpemVLZXkoZC5wb3AoKSk7bGV0IHY9IiIsTT1kLmluZGV4T2YoImNvZGUiKTtpZihNPi0xJiYoZC5zcGxpY2UoTSwx''@;'; put 'put ''KSx2PSJjb2RlLiIpLENvZS5mb3JFYWNoKFo9Pntjb25zdCByZT1kLmluZGV4T2YoWik7cmU+LTEmJihkLnNwbGljZShyZSwxKSx2Kz1aKyIuIil9KSx2Kz1mLDAhPWQubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgRD17fTtyZXR1cm4gRC5kb21FdmVudE5hbWU9aCxE''@;'; put 'put ''LmZ1bGxLZXk9dixEfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoYSxkKXtsZXQgaD1TQ2VbYS5rZXldfHxhLmtleSxmPSIiO3JldHVybiBkLmluZGV4T2YoImNvZGUuIik+LTEmJihoPWEuY29kZSxmPSJjb2RlLiIpLCEobnVsbD09aHx8IWgpJiYoaD1oLnRvTG93ZXJDYXNlKCksIiAi''@;'; put 'put ''PT09aD9oPSJzcGFjZSI6Ii4iPT09aCYmKGg9ImRvdCIpLENvZS5mb3JFYWNoKHY9Pnt2IT09aCYmKDAsTUNlW3ZdKShhKSYmKGYrPXYrIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVudENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkm''@;'; put 'put ''JmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgTW9lPVt7cHJvdmlkZTppbyx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOlBrLHVzZVZhbHVlOmZ1bmN0aW9uIEVDZSgpe2laLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTp2cyx1c2VG''@;'; put 'put ''YWN0b3J5OmZ1bmN0aW9uIEFDZSgpe3JldHVybiBmdW5jdGlvbiBvQihjKXtUQz1jfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxrQ2U9dGFlKER5ZSwiYnJvd3NlciIsTW9lKSxEQ2U9bmV3IFN0KCIiKSx4b2U9W3twcm92aWRlOnRSLHVzZUNsYXNzOmNsYXNzIGhDZXthZGRUb1dp''@;'; put 'put ''bmRvdyhsKXtWdC5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgUW4oNTEwMywhMSk7cmV0dXJuIGZ9LFZ0LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdldEFs''@;'; put 'put ''bFRlc3RhYmlsaXRpZXMoKSxWdC5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoVnQuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2NvbnN0''@;'; put 'put ''IGg9VnQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1oLmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKE09PntNLndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/bnVs''@;'; put 'put ''bDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD90bSgpLmlzU2hhZG93Um9vdChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6Wmll''@;'; put 'put ''LHVzZUNsYXNzOk1VLGRlcHM6W1dhLHhVLHRSXX0se3Byb3ZpZGU6TVUsdXNlQ2xhc3M6TVUsZGVwczpbV2EseFUsdFJdfV0sRW9lPVt7cHJvdmlkZTpGNix1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmcyLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVENlKCl7cmV0dXJuIG5ldyBnMn0sZGVwczpb''@;'; put 'put ''XX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6Q0NlLG11bHRpOiEwLGRlcHM6W3ZzLFdhLGlvXX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6eENlLG11bHRpOiEwLGRlcHM6W3ZzXX0sY1osdm9lLGdvZSx7cHJvdmlkZTp4OCx1c2VFeGlzdGluZzpjWn0se3Byb3ZpZGU6b29lLHVzZUNsYXNzOmZDZSxk''@;'; put 'put ''ZXBzOltdfSxbXV07bGV0IFRvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTokdix1c2VWYWx1ZTphLmFwcElkfV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERDZSwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlsuLi5Fb2UsLi4ueG9lXSxpbXBvcnRzOltSYSxJeWVdfSl9fXJldHVybiBjfSkoKSxJQ2U9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2M9YX1nZXRUaXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUoYSl7dGhpcy5fZG9jLnRpdGxlPWF8fCIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZz''@;'; put 'put ''KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7eSgzNzQ4MikseSg4MDY4NSk7Y29uc3QgaFo9e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVD''@;'; put 'put ''bGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEtuPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3RhcnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxl''@;'; put 'put ''OiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6''@;'; put 'put ''IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFy''@;'; put 'put ''eUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6''@;'; put 'put ''dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNl''@;'; put 'put ''bGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJjaDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIs''@;'; put 'put ''Ij49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdfSxoYW5kc29udGFibGU6e2RhcmtUYWJsZUhlYWRlckNsYXNzOiJkYXJrVEgifSx1c2VyRHJvcGRvd25Db25m''@;'; put 'put ''aWc6e2Nsb3NlT25EZWJ1Z0NsaWNrOiExfX07dmFyIE9vPXkoOTc1ODYpLElvZT15Lm4oT28pO2Z1bmN0aW9uIFJvZShjLGwpe3N3aXRjaChjKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihhLGQsaCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGEsZCxoLGYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSl7cmV0dXJuIGwu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFope3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''Y2FzZSA5OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFoscmUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxaLHJlLGNlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gbm0oYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv''@;'; put 'put ''cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBlZyhjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fG5tKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEtiKGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIG5tKGEpP2w6ZWcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIG5tKGEpJiZubShkKT9sOm5tKGEpP2VnKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTpubShkKT9lZyhmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19ZnVuY3Rpb24gTG9lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9Yyx2PTAsTT0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgRDt2PGwubGVuZ3RoJiYoIW5tKGxbdl0pfHxoPj1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoKT9EPWxbdl06KEQ9YXJndW1lbnRzW2hdLGgrPTEpLGRbdl09RCxubShEKT9NPSEwOmYtPTEsdis9MX1yZXR1cm4hTSYmZjw9MD9hLmFwcGx5KHRoaXMsZCk6Um9lKE1hdGgubWF4KDAsZiksTG9lKGMsZCxhKSl9fWNvbnN0IE9vZT1LYihmdW5jdGlvbihsLGEpe3JldHVy''@;'; put 'put ''biAxPT09bD9lZyhhKTpSb2UobCxMb2UobCxbXSxhKSl9KSxQb2U9S2IoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiB4UihjLGwp''@;'; put 'put ''e3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgRm9lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgSG9lPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1Gb2UuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09Rm9lLmNhbGwobCl9OmZ1bmN0aW9uKGwpe3JldHVybiB4UigiY2FsbGVlIixsKX19KCksTkNlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gTm9lKGMpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfXZhciBqQ2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBs''@;'; put 'put ''WyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sWyJmYW50YXN5LWxhbmQvZW1wdHkiXSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1w''@;'; put 'put ''dHkiXSgpOm51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVtcHR5P2wuZW1wdHkoKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3Rvci5lbXB0eT9sLmNvbnN0cnVjdG9yLmVtcHR5KCk6TkNlKGwpP1tdOk5vZShsKT8iIjpm''@;'; put 'put ''dW5jdGlvbiBWQ2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkhvZShsKT9mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCk6ZnVuY3Rpb24gQkNlKGMpe3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChjKTtyZXR1cm4iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iPT09bHx8IltvYmplY3QgSW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MTZBcnJheV0iPT09bHx8IltvYmpl''@;'; put 'put ''Y3QgSW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgVWludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdVaW50NjRBcnJheV0iPT09''@;'; put 'put ''bH0obCk/bC5jb25zdHJ1Y3Rvci5mcm9tKCIiKTp2b2lkIDB9KTtjb25zdCB6Q2U9akNlO2Z1bmN0aW9uIFZvZShjKXtmb3IodmFyIGEsbD1bXTshKGE9Yy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKTtyZXR1cm4gbH1mdW5jdGlvbiBCb2UoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5s''@;'; put 'put ''ZW5ndGg7ZDxoOyl7aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgZlo9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gWkNlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgV0NlPSF7''@;'; put 'put ''dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksam9lPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sem9l''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgibGVuZ3RoIil9KCksWUNlPWZ1bmN0aW9uKGwsYSl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDspe2lmKGxbZF09PT1hKXJldHVybiEwO2QrPTF9cmV0dXJuITF9O2NvbnN0IFVvZT1lZygiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgT2JqZWN0LmtleXN8fHpvZT9mdW5jdGlvbihsKXtpZihPYmplY3QobCkhPT1sKXJldHVybltdO3ZhciBhLGQsaD1bXSxmPXpvZSYmSG9lKGwpO2ZvcihhIGluIGwpeFIoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoV0NlKWZvcihkPWpvZS5s''@;'; put 'put ''ZW5ndGgtMTtkPj0wOyl4UihhPWpvZVtkXSxsKSYmIVlDZShoLGEpJiYoaFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24obCl7cmV0dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSxab2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxs''@;'; put 'put ''Ijp2b2lkIDA9PT1sPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIFdvZShjLGwsYSxkKXt2YXIgaD1Wb2UoYyk7ZnVuY3Rpb24gdihNLEQpe3JldHVybiBwWihNLEQsYS5zbGljZSgpLGQuc2xpY2UoKSl9cmV0dXJu''@;'; put 'put ''IUJvZShmdW5jdGlvbihNLEQpe3JldHVybiFCb2UodixELE0pfSxWb2UobCksaCl9ZnVuY3Rpb24gcFooYyxsLGEsZCl7aWYoZlooYyxsKSlyZXR1cm4hMDt2YXIgaD1ab2UoYyk7aWYoaCE9PVpvZShsKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2Vx''@;'; put 'put ''dWFscyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFu''@;'; put 'put ''ZC9lcXVhbHMiXSYmbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKGMpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFsc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFscyYmYy5lcXVhbHMobCkmJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBsLmVxdWFscyYmbC5lcXVhbHMoYyk7c3dpdGNoKGgpe2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY29uc3RydWN0b3ImJiJQcm9taXNlIj09PWZ1bmN0aW9uIFVDZShjKXt2YXIgbD1TdHJpbmcoYykubWF0Y2goL15m''@;'; put 'put ''dW5jdGlvbiAoXHcqKS8pO3JldHVybiBudWxsPT1sPyIiOmxbMV19KGMuY29uc3RydWN0b3IpKXJldHVybiBjPT09bDticmVhaztjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6aWYodHlwZW9mIGMhPXR5cGVvZiBsfHwhZlooYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkp''@;'; put 'put ''KXJldHVybiExO2JyZWFrO2Nhc2UiRGF0ZSI6aWYoIWZaKGMudmFsdWVPZigpLGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkVycm9yIjpyZXR1cm4gYy5uYW1lPT09bC5uYW1lJiZjLm1lc3NhZ2U9PT1sLm1lc3NhZ2U7Y2FzZSJSZWdFeHAiOmlmKGMuc291cmNlIT09bC5zb3Vy''@;'; put 'put ''Y2V8fGMuZ2xvYmFsIT09bC5nbG9iYWx8fGMuaWdub3JlQ2FzZSE9PWwuaWdub3JlQ2FzZXx8Yy5tdWx0aWxpbmUhPT1sLm11bHRpbGluZXx8Yy5zdGlja3khPT1sLnN0aWNreXx8Yy51bmljb2RlIT09bC51bmljb2RlKXJldHVybiExfWZvcih2YXIgZj1hLmxlbmd0aC0xO2Y+PTA7KXtpZihh''@;'; put 'put ''W2ZdPT09YylyZXR1cm4gZFtmXT09PWw7Zi09MX1zd2l0Y2goaCl7Y2FzZSJNYXAiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJldvZShjLmVudHJpZXMoKSxsLmVudHJpZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiU2V0IjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZX''@;'; put 'put ''b2UoYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJl''@;'; put 'put ''Z0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRB''@;'; put 'put ''cnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX12YXIgdj1Vb2UoYyk7aWYodi5sZW5ndGghPT1Vb2UobCkubGVuZ3RoKXJldHVybiExO3ZhciBNPWEuY29uY2F0KFtjXSksRD1kLmNvbmNhdChbbF0pO2ZvcihmPXYubGVuZ3RoLTE7Zj49MDspe3ZhciBaPXZb''@;'; put 'put ''Zl07aWYoIXhSKFosbCl8fCFwWihsW1pdLGNbWl0sTSxEKSlyZXR1cm4hMTtmLT0xfXJldHVybiEwfWNvbnN0IHFDZT1LYihmdW5jdGlvbihsLGEpe3JldHVybiBwWihsLGEsW10sW10pfSksWW9lPWVnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZxQ2UobCx6Q2UobCkpfSk7ZnVuY3Rp''@;'; put 'put ''b24gSU0oYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gUk0oYyl7cmV0dXJuIElNKGMpfHxZb2UoYyl9ZnVuY3Rpb24gZ1ooYyl7cmV0dXJuIFBvZShTdHJpbmcsYyl9ZnVuY3Rpb24gS29lKGMsbCl7cmV0dXJuIGMhPT1sfWZ1bmN0aW9uIFFvZShjPXdpbmRvdyl7cmV0dXJuIUlNKGMpfWNv''@;'; put 'put ''bnN0IG9TZT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihsKXtyZXR1cm4oMHxsKT09PWx9LGxTZT1LYihmdW5jdGlvbihsLGEpe3ZhciBkPWw8MD9hLmxlbmd0aCtsOmw7cmV0dXJuIE5vZShhKT9hLmNoYXJBdChkKTphW2RdfSksdVNlPUtiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFw''@;'; put 'put ''KGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPW9TZSh2PWRbZl0pP2xTZSh2LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSksaFNlPUtiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIHVTZShbbF0sYSlbMF19KSxwU2U9T29lKDIsKGMs''@;'; put 'put ''bCk9PnZvaWQgMCE9PWhTZShjLGwpKSxlc2U9cFNlKHsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtsZXQgVFIsdHNlLG1aLHZaO2Z1bmN0aW9uIG5zZShjPSEwKXtpZighY3x8IVRSKXtjb25zdCBsPWRvY3VtZW50JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmct''@;'; put 'put ''dmVyc2lvbl0iKTtUUj1sPyIiK2wuZ2V0QXR0cmlidXRlKCJuZy12ZXJzaW9uIik6dm9pZCAwfXJldHVybiBUUn1mdW5jdGlvbiBtU2UoYz0hMCl7cmV0dXJuIGMmJlRSfHwodHNlPXdpbmRvdz8uYW5ndWxhcj8udmVyc2lvbj8uZnVsbCksdHNlfWZ1bmN0aW9uIHJzZShjPSEwKXtyZXR1cm4g''@;'; put 'put ''YyYmbVp8fChtWj13aW5kb3c/LkNEUz8uX3JlYWN0Py52ZXJzaW9uP3dpbmRvdy5DRFMuX3JlYWN0LnZlcnNpb246ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtcmVhY3Ryb290XSwgW2RhdGEtcmVhY3RpZF0iKT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDApLG1afWZ1bmN0aW9uIGlz''@;'; put 'put ''ZShjPSEwKXtpZighY3x8IXZaKXtjb25zdCBsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTtsZXQgYTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylpZihsW2RdLl9fdnVlX18pe2E9bFtkXTticmVha312Wj1hPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMH1yZXR1cm4gdlp9ZnVu''@;'; put 'put ''Y3Rpb24gVzgoYyl7cmV0dXJuIGMucmVwbGFjZSgvW0EtWl0vZyxsPT4iLSIrbC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBzc2UoYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBDU2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5z''@;'; put 'put ''dXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1qcyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9VzgoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEp''@;'; put 'put ''PT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07Y2xhc3MgTE17c3RhdGljIGxvZyguLi5sKXtfWigpJiZ5WigpJiZjb25zb2xlLmxvZyguLi5sKX1zdGF0aWMgd2Fy''@;'; put 'put ''biguLi5sKXtfWigpJiZ5WigpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe19aKCkmJnlaKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIHlaKCl7cmV0dXJuIWVzZShbImphc21pbmUiXSl9ZnVuY3Rpb24gX1ooKXtyZXR1cm4hd2luZG93LkNEUy5lbnZp''@;'; put 'put ''cm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uIHVzZSgpe1FvZSgpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOkNTZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVt''@;'; put 'put ''czpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpkc2UsbG9nRGV0YWlsczpTU2V9LGZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3QgYz0iNi4xNS4xIjt3aW5kb3cuQ0RTLl92ZXJzaW9uLmluZGV4T2YoYyk8MCYmKHdpbmRvdy5DRFMuX3ZlcnNpb24ucHVzaChjKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/LnNldEF0dHJpYnV0ZSgiY2RzLXZlcnNpb24iLHdpbmRvdy5DRFMuX3ZlcnNpb24uam9pbigiICIp''@;'; put 'put ''KSksd2luZG93LkNEUy5fdmVyc2lvbi5sZW5ndGg+MSYmTE0ud2FybigiUnVubmluZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgQ2xhcml0eSBjYW4gY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuIFBsZWFzZSBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBsb2FkZWQuIil9KCksd2luZG93''@;'; put 'put ''LkNEUy5faXNTdGF0ZVByb3hpZWR8fCh3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZD0hMCx3aW5kb3cuQ0RTLl9zdGF0ZT1uZXcgUHJveHkod2luZG93LkNEUy5fc3RhdGUse3NldDooYyxsLGEpPT57Y29uc3QgZD17a2V5OmwscHJldjp3aW5kb3cuQ0RTLl9zdGF0ZVtsXSxjdXJyZW50OmF9''@;'; put 'put ''O3JldHVybiBjW2xdPWEsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIkNEU19TVEFURV9VUERBVEUiLHtkZXRhaWw6ZH0pKSwhMH19KSkpfWZ1bmN0aW9uIGRzZSgpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25tZW50OndpbmRvdy5D''@;'; put 'put ''RFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bnNlKCExKSxhbmd1bGFySlNWZXJzaW9uOm1TZSghMSkscmVhY3RWZXJzaW9uOnJzZSghMSksdnVlVmVyc2lvbjppc2UoITEpLHN0''@;'; put 'put ''YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVnaXN0cnk6T2Jq''@;'; put 'put ''ZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIFNTZSgpe0xNLmxvZyhKU09OLnN0cmluZ2lmeShkc2UoKSxudWxsLDIpKX1jb25zdCBNU2U9T29lKDMsKGMsbCxhKT0+eyFmdW5jdGlvbiBnU2UoYyxsKXty''@;'; put 'put ''ZXR1cm4gbHx8KGw9d2luZG93JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMpLCFsfHwhIWwuZ2V0KGMpfShjKXx8ZnVuY3Rpb24gdlNlKCl7cmV0dXJuIHdpbmRvdz8ubG9jYXRpb24/LmhyZWY/LmluY2x1ZGVzKCJsb2NhbGhvc3Q6NjAwNiIpfSgpPyhhLmRlZmluZShjLGwpLHVzZSgpLHdpbmRv''@;'; put 'put ''dyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6TE0ud2FybihjKyIgaGFz''@;'; put 'put ''IGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBVZihjLGwsYSxkKXt2YXIgdixoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBNPWMubGVuZ3RoLTE7TT49MDtNLS0pKHY9Y1tNXSkmJihmPShoPDM/dihmKTpoPjM/dihsLGEsZik6dihsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIHJtKGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcm0/KHRoaXMudj1jLHRoaXMpOm5ldyBybShjKX1mdW5jdGlvbiBnc2UoYyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3lu''@;'; put 'put ''Y0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLGw9Y1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIGw/bC5jYWxsKGMpOihjPWZ1bmN0aW9uIE1aKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixhPWwmJmNbbF0sZD0wO2lmKGEp''@;'; put 'put ''cmV0dXJuIGEuY2FsbChjKTtpZihjJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGMmJmQ+PWMubGVuZ3RoJiYoYz12b2lkIDApLHt2YWx1ZTpjJiZjW2QrK10sZG9uZTohY319fTt0aHJvdyBuZXcgVHlwZUVycm9yKGw/Ik9iamVjdCBp''@;'; put 'put ''cyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfShjKSxhPXt9LGQoIm5leHQiKSxkKCJ0aHJvdyIpLGQoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO2Z1bmN0aW9uIGQoZil7YVtmXT1j''@;'; put 'put ''W2ZdJiZmdW5jdGlvbih2KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTSxEKXshZnVuY3Rpb24gaChmLHYsTSxEKXtQcm9taXNlLnJlc29sdmUoRCkudGhlbihmdW5jdGlvbihaKXtmKHt2YWx1ZTpaLGRvbmU6TX0pfSx2KX0oTSxELCh2PWNbZl0odikpLmRvbmUsdi52YWx1ZSl9KX19''@;'; put 'put ''fSJmdW5jdGlvbiI9PXR5cGVvZiBTdXBwcmVzc2VkRXJyb3ImJlN1cHByZXNzZWRFcnJvcjtsZXQgbXNlPSExO2Z1bmN0aW9uIFhTZShjKXtpZigoYz1NYXRoLnRydW5jKGMpfHwwKTwwJiYoYys9dGhpcy5sZW5ndGgpLCEoYzwwfHxjPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbY119aWYo''@;'; put 'put ''IW1zZSl7bXNlPSEwO2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WFNlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwfSl9bGV0IHZzZT0hMSxic2U9ITE7ZnVuY3Rpb24geXNlKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRy''@;'; put 'put ''aWJ1dGUobCk6bnVsbH0sc2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9dnNlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgicm9sZSIpfHwoeXNlKEVsZW1lbnQucHJvdG90eXBlLCJyb2xl''@;'; put 'put ''Iiwicm9sZSIpLHZzZT0hMCksYnNlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgiYXJpYUxhYmVsIil8fChic2U9ITAsWyJBY3RpdmVEZXNjZW5kYW50IiwiQXRvbWljIiwiQXV0b0NvbXBsZXRlIiwiQnVzeSIsIkNoZWNrZWQiLCJDb2xDb3VudCIsIkNvbEluZGV4IiwiQ29s''@;'; put 'put ''U3BhbiIsIkNvbnRyb2xzIiwiQ3VycmVudCIsIkRlc2NyaWJlZEJ5IiwiRGV0YWlscyIsIkRpc2FibGVkIiwiRXJyb3JNZXNzYWdlIiwiRXhwYW5kZWQiLCJGbG93VG8iLCJIYXNQb3B1cCIsIkhpZGRlbiIsIkludmFsaWQiLCJLZXlTaG9ydGN1dHMiLCJMYWJlbCIsIkxhYmVsbGVkQnkiLCJM''@;'; put 'put ''ZXZlbCIsIkxpdmUiLCJNb2RhbCIsIk11bHRpTGluZSIsIk11bHRpU2VsZWN0YWJsZSIsIk9yaWVudGF0aW9uIiwiT3ducyIsIlBsYWNlaG9sZGVyIiwiUG9zSW5TZXQiLCJQcmVzc2VkIiwiUmVhZE9ubHkiLCJSZWxldmFudCIsIlJlcXVpcmVkIiwiUm9sZURlc2NyaXB0aW9uIiwiUm93Q291''@;'; put 'put ''bnQiLCJSb3dJbmRleCIsIlJvd1NwYW4iLCJTZWxlY3RlZCIsIlNldFNpemUiLCJTb3J0IiwiVmFsdWVNYXgiLCJWYWx1ZU1pbiIsIlZhbHVlTm93IiwiVmFsdWVUZXh0Il0uZm9yRWFjaChjPT55c2UoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2Mp''@;'; put 'put ''KSk7Y29uc3QgQVI9d2luZG93LEVaPUFSLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1BUi5TaGFkeUNTU3x8QVIuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBl''@;'; put 'put ''LFRaPVN5bWJvbCgpLF9zZT1uZXcgV2Vha01hcDtjbGFzcyB3c2V7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLGQhPT1UWil0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVh''@;'; put 'put ''ZC4iKTt0aGlzLmNzc1RleHQ9bCx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBsPXRoaXMubztjb25zdCBhPXRoaXMudDtpZihFWiYmdm9pZCAwPT09bCl7Y29uc3QgZD12b2lkIDAhPT1hJiYxPT09YS5sZW5ndGg7ZCYmKGw9X3NlLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89''@;'; put 'put ''bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZfc2Uuc2V0KGEsbCkpfXJldHVybiBsfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19Y29uc3QgQ3NlPShjLC4uLmwpPT57Y29uc3QgYT0xPT09Yy5sZW5ndGg/Y1swXTpsLnJlZHVjZSgoZCxo''@;'; put 'put ''LGYpPT5kKyh2PT57aWYoITA9PT12Ll8kY3NzUmVzdWx0JClyZXR1cm4gdi5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdjt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrdisi''@;'; put 'put ''LiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIil9KShoKStjW2YrMV0sY1swXSk7cmV0dXJuIG5ldyB3c2UoYSxjLFRaKX0sU3NlPUVaP2M9PmM6Yz0+YyBpbnN0YW5jZW9mIENTU1N0eWxl''@;'; put 'put ''U2hlZXQ/KGw9PntsZXQgYT0iIjtmb3IoY29uc3QgZCBvZiBsLmNzc1J1bGVzKWErPWQuY3NzVGV4dDtyZXR1cm4oYz0+bmV3IHdzZSgic3RyaW5nIj09dHlwZW9mIGM/YzpjKyIiLHZvaWQgMCxUWikpKGEpfSkoYyk6Yzt2YXIgQVo7Y29uc3Qga1I9d2luZG93LE1zZT1rUi50cnVzdGVkVHlw''@;'; put 'put ''ZXMsZU1lPU1zZT9Nc2UuZW1wdHlTY3JpcHQ6IiIseHNlPWtSLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxrWj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9lTWU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9j''@;'; put 'put ''OkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9tQXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRy''@;'; put 'put ''eXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LEVzZT0oYyxsKT0+bCE9PWMmJihsPT1sfHxjPT1jKSxEWj17YXR0cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjprWixyZWZsZWN0OiExLGhhc0NoYW5nZWQ6RXNlfSxJWj0iZmluYWxpemVkIjtjbGFzcyBx''@;'; put 'put ''YiBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRWk9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVsPW51bGwsdGhpcy5fJEV1KCl9c3RhdGljIGFkZEluaXRpYWxpemVyKGwpe3ZhciBhO3Ro''@;'; put 'put ''aXMuZmluYWxpemUoKSwobnVsbCE9PShhPXRoaXMuaCkmJnZvaWQgMCE9PWE/YTp0aGlzLmg9W10pLnB1c2gobCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChh''@;'; put 'put ''LGQpPT57Y29uc3QgaD10aGlzLl8kRXAoZCxhKTt2b2lkIDAhPT1oJiYodGhpcy5fJEV2LnNldChoLGQpLGwucHVzaChoKSl9KSxsfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eShsLGE9RFope2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5maW5hbGl6ZSgpLHRoaXMuZWxlbWVudFBy''@;'; put 'put ''b3BlcnRpZXMuc2V0KGwsYSksIWEubm9BY2Nlc3NvciYmIXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBkPSJzeW1ib2wiPT10eXBlb2YgbD9TeW1ib2woKToiX18iK2wsaD10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihsLGQsYSk7dm9pZCAwIT09aCYmT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLGwsaCl9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxhLGQpe3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe2NvbnN0IGY9dGhpc1tsXTt0aGlzW2FdPWgsdGhpcy5yZXF1ZXN0VXBkYXRlKGwsZixkKX0sY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGwpfHxEWn1zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KElaKSlyZXR1cm4hMTt0aGlzW0laXT0hMDtj''@;'; put 'put ''b25zdCBsPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZihsLmZpbmFsaXplKCksdm9pZCAwIT09bC5oJiYodGhpcy5oPVsuLi5sLmhdKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAobC5lbGVtZW50UHJvcGVydGllcyksdGhpcy5fJEV2PW5ldyBNYXAsdGhpcy5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eSgicHJvcGVydGllcyIpKXtjb25zdCBhPXRoaXMucHJvcGVydGllcyxkPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpXTtmb3IoY29uc3QgaCBvZiBkKXRoaXMuY3JlYXRlUHJvcGVydHkoaCxhW2hdKX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5lbGVtZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHlsZXModGhpcy5zdHlsZXMpLCEwfXN0YXRpYyBmaW5hbGl6ZVN0eWxlcyhsKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGQ9bmV3IFNldChsLmZsYXQoMS8wKS5yZXZlcnNlKCkpO2Zvcihjb25z''@;'; put 'put ''dCBoIG9mIGQpYS51bnNoaWZ0KFNzZShoKSl9ZWxzZSB2b2lkIDAhPT1sJiZhLnB1c2goU3NlKGwpKTtyZXR1cm4gYX1zdGF0aWMgXyRFcChsLGEpe2NvbnN0IGQ9YS5hdHRyaWJ1dGU7cmV0dXJuITE9PT1kP3ZvaWQgMDoic3RyaW5nIj09dHlwZW9mIGQ/ZDoic3RyaW5nIj09dHlwZW9mIGw/''@;'; put 'put ''bC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1fJEV1KCl7dmFyIGw7dGhpcy5fJEVfPW5ldyBQcm9taXNlKGE9PnRoaXMuZW5hYmxlVXBkYXRpbmc9YSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVnKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksbnVsbD09PShsPXRoaXMuY29uc3RydWN0b3IuaCl8''@;'; put 'put ''fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT5hKHRoaXMpKX1hZGRDb250cm9sbGVyKGwpe3ZhciBhLGQ7KG51bGwhPT0oYT10aGlzLl8kRVMpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJEVTPVtdKS5wdXNoKGwpLHZvaWQgMCE9PXRoaXMucmVuZGVyUm9vdCYmdGhpcy5pc0Nvbm5lY3RlZCYmKG51''@;'; put 'put ''bGw9PT0oZD1sLmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kfHxkLmNhbGwobCkpfXJlbW92ZUNvbnRyb2xsZXIobCl7dmFyIGE7bnVsbD09PShhPXRoaXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuc3BsaWNlKHRoaXMuXyRFUy5pbmRleE9mKGwpPj4+MCwxKX1fJEVnKCl7dGhpcy5jb25zdHJ1''@;'; put 'put ''Y3Rvci5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChsLGEpPT57dGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuXyRFaS5zZXQoYSx0aGlzW2FdKSxkZWxldGUgdGhpc1thXSl9KX1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGw7Y29uc3QgYT1udWxsIT09KGw9dGhpcy5zaGFkb3dSb290''@;'; put 'put ''KSYmdm9pZCAwIT09bD9sOnRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpO3JldHVybigoYyxsKT0+e0VaP2MuYWRvcHRlZFN0eWxlU2hlZXRzPWwubWFwKGE9PmEgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P2E6YS5zdHlsZVNoZWV0KTpsLmZv''@;'; put 'put ''ckVhY2goYT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxoPUFSLmxpdE5vbmNlO3ZvaWQgMCE9PWgmJmQuc2V0QXR0cmlidXRlKCJub25jZSIsaCksZC50ZXh0Q29udGVudD1hLmNzc1RleHQsYy5hcHBlbmRDaGlsZChkKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9y''@;'; put 'put ''LmVsZW1lbnRTdHlsZXMpLGF9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDt2b2lkIDA9PT10aGlzLnJlbmRlclJvb3QmJih0aGlzLnJlbmRlclJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9''@;'; put 'put ''PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jYWxsKGEpfSl9ZW5hYmxlVXBkYXRpbmcobCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQg''@;'; put 'put ''MD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1hLmhvc3REaXNjb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobCxhLGQpe3RoaXMuXyRBSyhsLGQpfV8kRU8obCxhLGQ9RFope3ZhciBoO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5jb25zdHJ1Y3Rvci5fJEVwKGwsZCk7aWYodm9pZCAwIT09ZiYmITA9PT1kLnJlZmxlY3Qpe2NvbnN0IHY9KHZvaWQgMCE9PShudWxsPT09KGg9ZC5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnRvQXR0cmlidXRlKT9kLmNvbnZlcnRlcjprWikudG9BdHRyaWJ1''@;'; put 'put ''dGUoYSxkLnR5cGUpO3RoaXMuXyRFbD1sLG51bGw9PXY/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZik6dGhpcy5zZXRBdHRyaWJ1dGUoZix2KSx0aGlzLl8kRWw9bnVsbH19XyRBSyhsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5jb25zdHJ1Y3RvcixmPWguXyRFdi5nZXQobCk7aWYodm9pZCAwIT09''@;'; put 'put ''ZiYmdGhpcy5fJEVsIT09Zil7Y29uc3Qgdj1oLmdldFByb3BlcnR5T3B0aW9ucyhmKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbnZlcnRlcj97ZnJvbUF0dHJpYnV0ZTp2LmNvbnZlcnRlcn06dm9pZCAwIT09KG51bGw9PT0oZD12LmNvbnZlcnRlcil8fHZvaWQgMD09PWQ/dm9pZCAwOmQu''@;'; put 'put ''ZnJvbUF0dHJpYnV0ZSk/di5jb252ZXJ0ZXI6a1o7dGhpcy5fJEVsPWYsdGhpc1tmXT1NLmZyb21BdHRyaWJ1dGUoYSx2LnR5cGUpLHRoaXMuXyRFbD1udWxsfX1yZXF1ZXN0VXBkYXRlKGwsYSxkKXtsZXQgaD0hMDt2b2lkIDAhPT1sJiYoKChkPWR8fHRoaXMuY29uc3RydWN0b3IuZ2V0UHJv''@;'; put 'put ''cGVydHlPcHRpb25zKGwpKS5oYXNDaGFuZ2VkfHxFc2UpKHRoaXNbbF0sYSk/KHRoaXMuXyRBTC5oYXMobCl8fHRoaXMuXyRBTC5zZXQobCxhKSwhMD09PWQucmVmbGVjdCYmdGhpcy5fJEVsIT09bCYmKHZvaWQgMD09PXRoaXMuXyRFQyYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMu''@;'; put 'put ''c2V0KGwsZCkpKTpoPSExKSwhdGhpcy5pc1VwZGF0ZVBlbmRpbmcmJmgmJih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfV8kRWooKXt2YXIgbD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQpe1Byb21pc2UucmVq''@;'; put 'put ''ZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYoIXRoaXMuaXNVcGRh''@;'; put 'put ''dGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRhdGUoZCksbnVsbD09''@;'; put 'put ''PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVwZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cgYT0hMSx0aGlzLl8k''@;'; put 'put ''RWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFFKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9pZCAwOmguY2FsbChk''@;'; put 'put ''KX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRV''@;'; put 'put ''cGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBkYXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2RdLGEpKSx0aGlzLl8k''@;'; put 'put ''RUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgUlo7cWJbSVpdPSEwLHFiLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAscWIuZWxlbWVudFN0eWxlcz1bXSxxYi5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LHhzZT8uKHtSZWFj''@;'; put 'put ''dGl2ZUVsZW1lbnQ6cWJ9KSwobnVsbCE9PShBWj1rUi5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUFaP0FaOmtSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IERSPXdpbmRvdyxYYj1EUi50cnVzdGVkVHlwZXMsVHNlPVhiP1hiLmNy''@;'; put 'put ''ZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsSVI9IiRsaXQkIix0Zz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLExaPSI/Iit0Zyx0TWU9YDwke0xafT5gLFk4PWRvY3VtZW50LE9NPSgpPT5ZOC5jcmVhdGVDb21tZW50KCIiKSxQ''@;'; put 'put ''TT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxBc2U9QXJyYXkuaXNBcnJheSxPWj0iWyBcdFxuXGZccl0iLEZNPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLERzZT0vLS0+L2csSXNlPS8+''@;'; put 'put ''L2csRzg9UmVnRXhwKGA+fCR7T1p9KD86KFteXFxzIic+PS9dKykoJHtPWn0qPSR7T1p9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksUnNlPS8nL2csTHNlPS8iL2csT3NlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxQc2U9Yz0+KGwsLi4u''@;'; put 'put ''YSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLG5NZT1Qc2UoMSksck1lPVBzZSgyKSxKYj1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxTMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLEZzZT1uZXcgV2Vha01hcCwkOD1ZOC5jcmVhdGVUcmVlV2Fsa2VyKFk4LDEy''@;'; put 'put ''OSxudWxsLCExKTtmdW5jdGlvbiBIc2UoYyxsKXtpZighQXJyYXkuaXNBcnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09VHNlP1RzZS5jcmVhdGVIVE1MKGwpOmx9Y2xh''@;'; put 'put ''c3MgSE17Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29uc3QgTT1sLmxlbmd0aC0xLEQ9dGhpcy5wYXJ0cyxbWixyZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8i''@;'; put 'put ''PHN2Zz4iOiIiLHY9Rk07Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3QgRD1jW01dO2xldCBaLHJlLGNlPS0xLGJlPTA7Zm9yKDtiZTxELmxlbmd0aCYmKHYubGFzdEluZGV4PWJlLHJlPXYuZXhlYyhEKSxudWxsIT09cmUpOyliZT12Lmxhc3RJbmRleCx2PT09Rk0/IiEtLSI9PT1yZVsxXT92''@;'; put 'put ''PURzZTp2b2lkIDAhPT1yZVsxXT92PUlzZTp2b2lkIDAhPT1yZVsyXT8oT3NlLnRlc3QocmVbMl0pJiYoaD1SZWdFeHAoIjwvIityZVsyXSwiZyIpKSx2PUc4KTp2b2lkIDAhPT1yZVszXSYmKHY9RzgpOnY9PT1HOD8iPiI9PT1yZVswXT8odj1oPz9GTSxjZT0tMSk6dm9pZCAwPT09cmVbMV0/''@;'; put 'put ''Y2U9LTI6KGNlPXYubGFzdEluZGV4LXJlWzJdLmxlbmd0aCxaPXJlWzFdLHY9dm9pZCAwPT09cmVbM10/Rzg6JyInPT09cmVbM10/THNlOlJzZSk6dj09PUxzZXx8dj09PVJzZT92PUc4OnY9PT1Ec2V8fHY9PT1Jc2U/dj1GTToodj1HOCxoPXZvaWQgMCk7Y29uc3QgRWU9dj09PUc4JiZjW00r''@;'; put 'put ''MV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PUZNP0QrdE1lOmNlPj0wPyhkLnB1c2goWiksRC5zbGljZSgwLGNlKStJUitELnNsaWNlKGNlKSt0ZytFZSk6RCt0ZysoLTI9PT1jZT8oZC5wdXNoKHZvaWQgMCksTSk6RWUpfXJldHVybltIc2UoYyxmKyhjW2FdfHwiPD8+IikrKDI9''@;'; put 'put ''PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9SE0uY3JlYXRlRWxlbWVudChaLGQpLCQ4LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09YSl7Y29uc3QgY2U9dGhpcy5lbC5jb250ZW50LGJlPWNlLmZpcnN0Q2hpbGQ7YmUucmVtb3ZlKCksY2UuYXBwZW5kKC4u''@;'; put 'put ''LmJlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPSQ4Lm5leHROb2RlKCkpJiZELmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lmKGguaGFzQXR0cmlidXRlcygpKXtjb25zdCBjZT1bXTtmb3IoY29uc3QgYmUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlmKGJlLmVuZHNXaXRo''@;'; put 'put ''KElSKXx8YmUuc3RhcnRzV2l0aCh0Zykpe2NvbnN0IEVlPXJlW3YrK107aWYoY2UucHVzaChiZSksdm9pZCAwIT09RWUpe2NvbnN0IEJlPWguZ2V0QXR0cmlidXRlKEVlLnRvTG93ZXJDYXNlKCkrSVIpLnNwbGl0KHRnKSxxZT0vKFsuP0BdKT8oLiopLy5leGVjKEVlKTtELnB1c2goe3R5cGU6''@;'; put 'put ''MSxpbmRleDpmLG5hbWU6cWVbMl0sc3RyaW5nczpCZSxjdG9yOiIuIj09PXFlWzFdP0JzZToiPyI9PT1xZVsxXT9qc2U6IkAiPT09cWVbMV0/enNlOk5NfSl9ZWxzZSBELnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IGJlIG9mIGNlKWgucmVtb3ZlQXR0cmlidXRlKGJlKX1pZihP''@;'; put 'put ''c2UudGVzdChoLnRhZ05hbWUpKXtjb25zdCBjZT1oLnRleHRDb250ZW50LnNwbGl0KHRnKSxiZT1jZS5sZW5ndGgtMTtpZihiZT4wKXtoLnRleHRDb250ZW50PVhiP1hiLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgRWU9MDtFZTxiZTtFZSsrKWguYXBwZW5kKGNlW0VlXSxPTSgpKSwkOC5uZXh0''@;'; put 'put ''Tm9kZSgpLEQucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKGNlW2JlXSxPTSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09TFopRC5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IGNlPS0xO2Zvcig7LTEhPT0oY2U9aC5kYXRhLmluZGV4T2Yo''@;'; put 'put ''dGcsY2UrMSkpOylELnB1c2goe3R5cGU6NyxpbmRleDpmfSksY2UrPXRnLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPVk4LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gSzgoYyxsLGE9Yyxk''@;'; put 'put ''KXt2YXIgaCxmLHYsTTtpZihsPT09SmIpcmV0dXJuIGw7bGV0IEQ9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgWj1QTShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEQ/LmNvbnN0cnVjdG9yIT09WiYm''@;'; put 'put ''KG51bGw9PT0oZj1EPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEQsITEpLHZvaWQgMD09PVo/RD12b2lkIDA6KEQ9bmV3IFooYyksRC5fJEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtkXT1EOmEuXyRDbD1E''@;'; put 'put ''KSx2b2lkIDAhPT1EJiYobD1LOChjLEQuXyRBUyhjLGwudmFsdWVzKSxELGQpKSxsfWNsYXNzIFZzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5w''@;'; put 'put ''YXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOlk4KS5pbXBvcnROb2RlKGQsITApOyQ4LmN1''@;'; put 'put ''cnJlbnROb2RlPWY7bGV0IHY9JDgubmV4dE5vZGUoKSxNPTAsRD0wLFo9aFswXTtmb3IoO3ZvaWQgMCE9PVo7KXtpZihNPT09Wi5pbmRleCl7bGV0IHJlOzI9PT1aLnR5cGU/cmU9bmV3IFFiKHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1aLnR5cGU/cmU9bmV3IFouY3Rvcih2LFoubmFt''@;'; put 'put ''ZSxaLnN0cmluZ3MsdGhpcyxsKTo2PT09Wi50eXBlJiYocmU9bmV3IFVzZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKHJlKSxaPWhbKytEXX1NIT09Wj8uaW5kZXgmJih2PSQ4Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gJDguY3VycmVudE5vZGU9WTgsZn12KGwpe2xldCBhPTA7Zm9yKGNv''@;'; put 'put ''bnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1kLnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxlbmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgUWJ7Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBlPTIsdGhpcy5fJEFI''@;'; put 'put ''PVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENwPW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGE9bnVsbD09''@;'; put 'put ''PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkmJnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUoKXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1sPy5ub2RlVHlwZSYm''@;'; put 'put ''KGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQn1fJEFJKGwsYT10aGlzKXtsPUs4KHRoaXMsbCxhKSxQTShsKT9sPT09UzB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFIIT09UzAmJnRoaXMu''@;'; put 'put ''XyRBUigpLHRoaXMuXyRBSD1TMCk6bCE9PXRoaXMuXyRBSCYmbCE9PUpiJiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMuZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+QXNlKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRv''@;'; put 'put ''cl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVMwJiZQTSh0''@;'; put 'put ''aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKFk4LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09''@;'; put 'put ''PWguZWwmJihoLmVsPUhNLmNyZWF0ZUVsZW1lbnQoSHNlKGguaCxoLmhbMF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhpcy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyBWc2UoZix0aGlzKSxN''@;'; put 'put ''PXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5fJEFIPXZ9fV8kQUMobCl7bGV0IGE9RnNlLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZGc2Uuc2V0KGwuc3RyaW5ncyxhPW5ldyBITShsKSksYX1UKGwpe0FzZSh0aGlzLl8kQUgpfHwodGhpcy5fJEFI''@;'; put 'put ''PVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxoPTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNoKGQ9bmV3IFFiKHRoaXMuayhPTSgpKSx0aGlzLmsoT00oKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYpLGgrKztoPGEubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxhLmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5nLGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYmbCE9PXRoaXMuXyRB''@;'; put 'put ''Qjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRBTSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNzIE5Ne2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1lPWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRBSD1BcnJheShkLmxl''@;'; put 'put ''bmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0aGlzLl8kQUg9UzB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0IGY9dGhpcy5zdHJp''@;'; put 'put ''bmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD1LOCh0aGlzLGwsYSwwKSx2PSFQTShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PUpiLHYmJih0aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEQsWjtmb3IobD1mWzBdLEQ9MDtEPGYubGVuZ3RoLTE7RCsrKVo9SzgodGhpcyxNW2QrRF0s''@;'; put 'put ''YSxEKSxaPT09SmImJihaPXRoaXMuXyRBSFtEXSksdnx8KHY9IVBNKFopfHxaIT09dGhpcy5fJEFIW0RdKSxaPT09UzA/bD1TMDpsIT09UzAmJihsKz0oWj8/IiIpK2ZbRCsxXSksdGhpcy5fJEFIW0RdPVp9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1TMD90aGlzLmVsZW1lbnQucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBCc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09''@;'; put 'put ''UzA/dm9pZCAwOmx9fWNvbnN0IGlNZT1YYj9YYi5lbXB0eVNjcmlwdDoiIjtjbGFzcyBqc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09UzA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsaU1l''@;'; put 'put ''KTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIHpzZSBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9SzgodGhpcyxsLGEs''@;'; put 'put ''MCkpJiZ2b2lkIDAhPT1kP2Q6UzApPT09SmIpcmV0dXJuO2NvbnN0IGg9dGhpcy5fJEFILGY9bD09PVMwJiZoIT09UzB8fGwuY2FwdHVyZSE9PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09UzAmJihoPT09UzB8fGYpO2YmJnRoaXMuZWxl''@;'; put 'put ''bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgpLHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuXyRBSD90aGlzLl8k''@;'; put 'put ''QUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBVc2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVu''@;'; put 'put ''dD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtLOCh0aGlzLGwpfX1jb25zdCBac2U9RFIubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIgUFosRlo7WnNlPy4o''@;'; put 'put ''SE0sUWIpLChudWxsIT09KFJaPURSLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PVJaP1JaOkRSLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBWTSBleHRlbmRzIHFie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9''@;'; put 'put ''e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVy''@;'; put 'put ''QmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxsLGEpPT57dmFyIGQs''@;'; put 'put ''aDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPXY9bmV3IFFiKGwu''@;'; put 'put ''aW5zZXJ0QmVmb3JlKE9NKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVybiB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8k''@;'; put 'put ''RG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIEpi''@;'; put 'put ''fX1WTS5maW5hbGl6ZWQ9ITAsVk0uXyRsaXRFbGVtZW50JD0hMCxudWxsPT09KFBaPWdsb2JhbFRoaXMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0KXx8dm9pZCAwPT09UFp8fFBaLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxlbWVudDpWTX0pO2NvbnN0IFdzZT1nbG9iYWxUaGlzLmxpdEVsZW1l''@;'; put 'put ''bnRQb2x5ZmlsbFN1cHBvcnQ7V3NlPy4oe0xpdEVsZW1lbnQ6Vk19KSwobnVsbCE9PShGWj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUZaP0ZaOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0IHNNZT1Dc2VgQGNo''@;'; put 'put ''YXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2''@;'; put 'put ''ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwg''@;'; put 'put ''Y2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1p''@;'; put 'put ''dGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+Kntm''@;'; put 'put ''bGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0''@;'; put 'put ''cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJn''@;'; put 'put ''aW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2Rz''@;'; put 'put ''LWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29u''@;'; put 'put ''dGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50''@;'; put 'put ''OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29s''@;'; put 'put ''dXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91''@;'; put 'put ''dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJd''@;'; put 'put ''e21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBt''@;'; put 'put ''ZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1i''@;'; put 'put ''b3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90''@;'; put 'put ''dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''IDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1l''@;'; put 'put ''ZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21h''@;'; put 'put ''cmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFs''@;'; put 'put ''LWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXtt''@;'; put 'put ''YXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90''@;'; put 'put ''dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdp''@;'; put 'put ''ZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDph''@;'; put 'put ''dXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0p''@;'; put 'put ''e2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNh''@;'; put 'put ''bC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50''@;'; put 'put ''ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6''@;'; put 'put ''Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNl''@;'; put 'put ''bnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVy''@;'; put 'put ''dGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6''@;'; put 'put ''b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxm''@;'; put 'put ''OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVm''@;'; put 'put ''dCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWdu''@;'; put 'put ''LXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJp''@;'; put 'put ''Z2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYp''@;'; put 'put ''O21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4''@;'; put 'put ''dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01''@;'; put 'put ''MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkv''@;'; put 'put ''IDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNp''@;'; put 'put ''bmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMo''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0p''@;'; put 'put ''KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxp''@;'; put 'put ''bmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRl''@;'; put 'put ''eHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0p''@;'; put 'put ''fVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNh''@;'; put 'put ''bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp''@;'; put 'put ''bi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0''@;'; put 'put ''LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1m''@;'; put 'put ''b250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0''@;'; put 'put ''dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2Rz''@;'; put 'put ''LXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0''@;'; put 'put ''ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0g''@;'; put 'put ''LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9j''@;'; put 'put ''aztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIp''@;'; put 'put ''KSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0g''@;'; put 'put ''MWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1n''@;'; put 'put ''YXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6Ymxv''@;'; put 'put ''Y2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZz''@;'; put 'put ''ZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtj''@;'; put 'put ''ZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0''@;'; put 'put ''fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwt''@;'; put 'put ''cmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0g''@;'; put 'put ''LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAwKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRlcl17dGV4dC1hbGln''@;'; put 'put ''bjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoiIjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2NvbnRlbnQ6IiI7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNh''@;'; put 'put ''bnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJlZm9yZXtjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJd''@;'; put 'put ''OjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVy''@;'; put 'put ''LWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9udC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDoxLjA5MDllbTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2Fs''@;'; put 'put ''YygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0''@;'; put 'put ''e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5b3V0O2JveC1zaXpp''@;'; put 'put ''bmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNs''@;'; put 'put ''YXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lzLWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFuY2hvcl0pIDo6c2xv''@;'; put 'put ''dHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKSA6OnNsb3R0''@;'; put 'put ''ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlh''@;'; put 'put ''bG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pIDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVto''@;'; put 'put ''aWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpob3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1''@;'; put 'put ''cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpmb2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24gSFooYyl7cmV0dXJuYGNhbGMoKCR7Y30gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIDFyZW0pYH1jbGFzcyBkTWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZuPWwsdGhpcy5zdWJzY3JpcHRpb25zPWF9dW5zdWJzY3JpYmUoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHRoaXMpOy0xIT09bCYmdGhpcy5zdWJzY3JpcHRpb25zLnNwbGljZShsLDEpfX1jb25zdCBOWj1uZXcgY2xhc3MgaE1le2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXN1YnNjcmliZShsKXtjb25zdCBhPW5ldyBk''@;'; put 'put ''TWUobCx0aGlzLnN1YnNjcmlwdGlvbnMpO3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhKSxhfWVtaXQobCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS5mbihsKSl9dG9FdmVudE9ic2VydmFibGUoKXtyZXR1cm4gdGhpc319O05aLmxpc3RlbmVyPWRvY3VtZW50LmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLGM9Pk5aLmVtaXQoYy5kZXRhaWwpKTtjbGFzcyBaZntzdGF0aWMgZ2V0IHN0YXRlKCl7cmV0dXJuIHVzZSgpLHdpbmRvdy5DRFMuX3N0YXRlfXN0YXRpYyBnZXRWYWx1ZShsKXtyZXR1cm4gWmYuc3RhdGVbbF19c3RhdGljIHNldFZh''@;'; put 'put ''bHVlKGwsYSl7WmYuc3RhdGVbbF09YX1zdGF0aWMgbG9nKCl7TE0ubG9nKEpTT04uc3RyaW5naWZ5KFpmLnN0YXRlLG51bGwsMikpfX1aZi5zdGF0ZVVwZGF0ZXM9TloudG9FdmVudE9ic2VydmFibGUoKTtjb25zdCBmTWU9KGMsbCk9PiJtZXRob2QiPT09bC5raW5kJiZsLmRlc2NyaXB0b3Im''@;'; put 'put ''JiEoInZhbHVlImluIGwuZGVzY3JpcHRvcik/ey4uLmwsZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19OntraW5kOiJmaWVsZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5Omwua2V5LGluaXRpYWxpemVyKCl7ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGwuaW5pdGlhbGl6ZXImJih0aGlzW2wua2V5XT1sLmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihhKXthLmNyZWF0ZVByb3BlcnR5KGwua2V5LGMpfX0scE1lPShjLGwsYSk9PntsLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5KGEsYyl9O2Z1bmN0''@;'; put 'put ''aW9uIFlzZShjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9wTWUoYyxsLGEpOmZNZShjLGwpfWZ1bmN0aW9uIEtzZShjLGwpe3N3aXRjaChsJiZsLnR5cGUpe2Nhc2UgQXJyYXk6Y2FzZSBPYmplY3Q6cmV0dXJue3JlZmxlY3Q6ITEsLi4ubH07Y2FzZSBTdHJpbmc6cmV0dXJue3JlZmxlY3Q6''@;'; put 'put ''ITAsYXR0cmlidXRlOlc4KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YXx8bnVsbH0sLi4ubH07Y2FzZSBOdW1iZXI6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlc4KGMpLC4uLmx9O2Nhc2UgQm9vbGVhbjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6VzgoYyksY29udmVy''@;'; put 'put ''dGVyOnt0b0F0dHJpYnV0ZTphPT5hPyIiOm51bGwsZnJvbUF0dHJpYnV0ZTphPT5mdW5jdGlvbiB5TWUoYyl7cmV0dXJuIG51bGwhPWMmJiIiK2MhPSJmYWxzZSJ9KGEpfSwuLi5sfTtjYXNlIERhdGU6cmV0dXJue3JlZmxlY3Q6ITEsY29udmVydGVyOntmcm9tQXR0cmlidXRlOmE9Pm5ldyBE''@;'; put 'put ''YXRlKGEpfSwuLi5sfTtkZWZhdWx0OnJldHVybnsuLi5sfX19ZnVuY3Rpb24gaW0oYyl7cmV0dXJuKGwsYSk9PihjPy5yZXF1aXJlZCYmZnVuY3Rpb24gX01lKGMsbCxhKXtjb25zdCBkPWMuZmlyc3RVcGRhdGVkO2MuZmlyc3RVcGRhdGVkPWZ1bmN0aW9uKGgpe2lmKGEmJmEucmVxdWlyZWQm''@;'; put 'put ''JlJNKHRoaXNbbF0pKXtjb25zdCBmPWEucmVxdWlyZWRNZXNzYWdlfHxmdW5jdGlvbih2PSJ3YXJuaW5nIixNLEQpe2NvbnN0IFo9RC50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3NzZSh2KX06ICR7TX0gaXMgcmVxdWlyZWQgdG8gdXNlICR7Wn0gY29tcG9uZW50LiBTZXQgdGhlIEpT''@;'; put 'put ''IFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhuc2UoKT9gQW5ndWxhcjogPCR7Wn0gWyR7TX1dPSIuLi4iPjwvJHtafT5cbmA6IiIpKyhpc2UoKT9gVnVlOiA8JHtafSA6JHtNfT0iLi4uIj48LyR7Wn0+XG5gOiIiKSsocnNlKCk/YFJlYWN0OiA8JHtmdW5jdGlvbiB5U2UoYyl7''@;'; put 'put ''cmV0dXJuIHNzZShmdW5jdGlvbiBiU2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oWil9ICR7cmU9TSxyZS5zdGFydHNXaXRoKCJhcmlhIik/Vzgo''@;'; put 'put ''cmUpOnJlfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke1p9ICR7VzgoTSl9PSIuLi4iPjwvJHtafT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7Wn0nKS4ke019ID0gJy4uLic7XG5cbmA7dmFyIHJlfShhLnJlcXVpcmVkLGwsdGhpcy50YWdOYW1lKTtpZigiZXJy''@;'; put 'put ''b3IiPT09YS5yZXF1aXJlZCl0aHJvdyBFcnJvcihmKTtMTS53YXJuKGYsdGhpcyl9ZCYmZC5jYWxsKHRoaXMsaCl9fShsLGEsYyksWXNlKEtzZShhLGMpKShsLGEpKX12YXIgTU1lPUNzZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhv''@;'; put 'put ''c3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAv''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUq''@;'; put 'put ''PXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4t''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3Qo''@;'; put 'put ''W3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp''@;'; put 'put ''KSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWln''@;'; put 'put ''aHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxj''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hl''@;'; put 'put ''aWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJd''@;'; put 'put ''KXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtk''@;'; put 'put ''aXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3Jt''@;'; put 'put ''OnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRn''@;'; put 'put ''ZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJh''@;'; put 'put ''ZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJh''@;'; put 'put ''ZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06''@;'; put 'put ''aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFk''@;'; put 'put ''Z2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlv''@;'; put 'put ''bjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Ut''@;'; put 'put ''b3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29uc3QgeE1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0i''@;'; put 'put ''MTgiIHI9IjIuOSIvPid9XTtjbGFzcyBUc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246eE1lWzFdLC4uLlpmLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe1pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uWmYuc3RhdGUuaWNvblJlZ2lzdHJ5''@;'; put 'put ''LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVRzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlRzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChbZCxoXSk9PmgubWFwKGY9PltmLFRzLnJlZ2lzdHJ5W2Rd''@;'; put 'put ''XSkpO1pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uWmYuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX12YXIgZHAsYztmdW5jdGlvbiBrTWUoYyxsKXtsZXQgYT0iIjtzd2l0Y2go''@;'; put 'put ''ZnVuY3Rpb24gRU1lKGMpe3N3aXRjaCghMCl7Y2FzZSBSTShjKTpyZXR1cm4gZHAuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gcXNlKGMpe3JldHVyblsieHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4T2YoYyk+LTF9KGMpOnJldHVybiBkcC5WYWxpZFNpemVT''@;'; put 'put ''dHJpbmc7Y2FzZSBmdW5jdGlvbiBHb2UoYyl7cmV0dXJuIGdaKGMpJiYhWW9lKGMudHJpbSgpKSYmK2M9PStjfShjKTpyZXR1cm4gZHAuVmFsaWROdW1lcmljU3RyaW5nO2RlZmF1bHQ6cmV0dXJuIGRwLkJhZFNpemVWYWx1ZX19KGZ1bmN0aW9uIFRNZShjKXtyZXR1cm4gUk0oYyk/IiI6ZnVu''@;'; put 'put ''Y3Rpb24gX1NlKGMsbCxhPSIiKXtjb25zdCBkPWMuc3BsaXQoIiAiKSxoPSIiPT09YT9kLmZpbHRlcihmPT5mIT09bCk6ZC5tYXAoZj0+Zj09PWw/YTpmKTtyZXR1cm4gaC5sZW5ndGg+MD9oLmpvaW4oIiAiKToiIn0oYywiZml0Iil9KGwpKSl7Y2FzZSBkcC5WYWxpZE51bWVyaWNTdHJpbmc6''@;'; put 'put ''cmV0dXJuIGE9SFoocGFyc2VJbnQobCkpLHZvaWQgZnVuY3Rpb24gY01lKGMsLi4ubCl7bC5mb3JFYWNoKChbYSxkXSk9PntjLnN0eWxlW2FdPWR9KX0oYywuLi5mdW5jdGlvbiBBTWUoYyxsKXtyZXR1cm4hSU0oYykmJmMuaW5kZXhPZigiZml0Iik+LTE/W1sid2lkdGgiLCJhdXRvIl0sWyJo''@;'; put 'put ''ZWlnaHQiLCJhdXRvIl0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dOltbIndpZHRoIixsXSxbImhlaWdodCIsbF0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dfShsLGEpKTtjYXNlIGRwLlZhbGlkU2l6ZVN0cmluZzpjYXNlIGRwLk5pbFNpemVWYWx1ZTpyZXR1''@;'; put 'put ''cm4gdm9pZCBmdW5jdGlvbiB1TWUoYywuLi5sKXtsLmZvckVhY2goYT0+e2Muc3R5bGVbYV09IiJ9KX0oYywid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgiLCJtaW4taGVpZ2h0Iik7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIFZaKGMpe3JldHVybiBjLmJhZGdlJiYoImluaGVyaXQtdHJp''@;'; put 'put ''YW5nbGUiPT09Yy5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09Yy5iYWRnZSl9KGM9ZHB8fChkcD17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixjLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixjLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIs''@;'; put 'put ''Yy5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgV2YgZXh0ZW5kcyBWTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW3NN''@;'; put 'put ''ZSxNTWVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUobCl7aWYoZnVuY3Rpb24gZVNlKGMsbCl7cmV0dXJuIVJNKGMpJiZLb2UoYyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJlcXVlc3RVcGRhdGUo''@;'; put 'put ''InNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShsKXtpZihmdW5jdGlvbiBRQ2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gSkNlKGMpe3JldHVybiBQb2UoU3RyaW5nLGMpfHxJTShjKX0oYykmJktvZShjLGwpfShsLHRoaXMuX3NpemUpKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuX3NpemU7dGhpcy5fc2l6ZT1sLGtNZSh0aGlzLGwpLHRoaXMucmVxdWVzdFVwZGF0ZSgic2l6ZSIsYSl9fXVwZGF0ZWQobCl7aWYobC5oYXMoImlubmVyT2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgYT1IWigtMSp0aGlzLmlubmVyT2Zmc2V0KSxkPWBjYWxjKDEwMCUg''@;'; put 'put ''KyAke0haKDIqdGhpcy5pbm5lck9mZnNldCl9KWA7dGhpcy5zdmcuc3R5bGUud2lkdGg9ZCx0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9ZCx0aGlzLnN2Zy5zdHlsZS5tYXJnaW49YCR7YX0gMCAwICR7YX1gfX1maXJzdFVwZGF0ZWQobCl7aWYoc3VwZXIuZmlyc3RVcGRhdGVkKGwpLHRoaXMuaXND''@;'; put 'put ''b25uZWN0ZWQpe2xldCBhPSJ1bmtub3duIjt0aGlzLnN1YnNjcmlwdGlvbj1aZi5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGQ9PnsiaWNvblJlZ2lzdHJ5Ij09PWQua2V5JiZUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXSYmYSE9PXRoaXMuc2hhcGUmJihhPXRoaXMuc2hhcGUsdGhpcy5yZXF1ZXN0''@;'; put 'put ''VXBkYXRlKCJzaGFwZSIpKX0pfX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9cmVuZGVyKCl7cmV0dXJuIGdaKFRzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT9uTWVgPHNwYW4gLmlubmVy''@;'; put 'put ''SFRNTD0iJHtUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOnJNZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gSU1lKGMpe2NvbnN0IGw9VHMucmVnaXN0cnlbYy5zaGFwZV0/P1RzLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9Yy5zb2xpZCYmbC5zb2xpZD9sLnNvbGlkOmwu''@;'; put 'put ''b3V0bGluZTtyZXR1cm4gYy5iYWRnZSYmIVZaKGMpJiYoYT1jLnNvbGlkP2wuc29saWRCYWRnZWQ/P2E6bC5vdXRsaW5lQmFkZ2VkPz9hKSxWWihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQWxlcnRlZD8/YTpsLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlvbiBETWUoYyl7bGV0''@;'; put 'put ''IGw9IiI7cmV0dXJuIGMuYmFkZ2UmJlZaKGMpP2w9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOmMuYmFk''@;'; put 'put ''Z2UmJihsPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxsfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVuY3Rpb24gQk0oYyl7''@;'; put 'put ''cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIFh0fHwkZShjLmxpZnQpJiYkZShjLnN1YnNjcmliZSkpfVVmKFtpbSh7dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsInNpemUiLG51bGwpLFVmKFtpbSh7''@;'; put 'put ''dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksVWYoW2ltKHt0eXBlOkJvb2xlYW59KV0sV2YucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSxVZihbaW0oe3R5cGU6''@;'; put 'put ''U3RyaW5nfSldLFdmLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLFVmKFtpbSh7dHlwZTpCb29sZWFufSldLFdmLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxVZihbaW0oe3R5cGU6U3RyaW5nfSldLFdmLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksVWYoW2Z1bmN0aW9uIHdNZShj''@;'; put 'put ''KXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9S3NlKGEsYyk7cmV0dXJuIGQmJihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYhYz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK1c4KGEpKSksWXNlKGQpKGwsYSl9fSh7dHlwZTpOdW1iZXJ9KV0sV2YucHJv''@;'; put 'put ''dG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSxVZihbZnVuY3Rpb24gU01lKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEsZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1hLm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aD9oOmEu''@;'; put 'put ''a2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihNKXtjKE0sZil9KSx2fXtjb25zdCBmPWEuY29uc3RydWN0b3I7''@;'; put 'put ''dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQpKSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFyIGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBmLHY7cmV0dXJuIHZvaWQgMD09PXRoaXNbaF0mJih0''@;'; put 'put ''aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLFdmLnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGZ1bmN0''@;'; put 'put ''aW9uIHhTZShjLGwpe1FvZSgpJiZlc2UoWyJjdXN0b21FbGVtZW50cyJdKSYmTVNlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLFdmKTtjb25zdCBCWj1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgYztmdW5jdGlvbiBY''@;'; put 'put ''c2UoYyl7cmV0dXJuICRlKGM/LnRoZW4pfWZ1bmN0aW9uIEpzZShjKXtyZXR1cm4gJGUoY1toaV0pfWZ1bmN0aW9uIFFzZShjKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJiRlKGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIGVsZShjKXtyZXR1cm4gbmV3IFR5cGVF''@;'; put 'put ''cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg''@;'; put 'put ''QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHRsZT1mdW5jdGlvbiBOTWUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKTtmdW5jdGlvbiBubGUoYyl7cmV0dXJu''@;'; put 'put ''ICRlKGM/Llt0bGVdKX1mdW5jdGlvbiBybGUoYyl7cmV0dXJuIGZ1bmN0aW9uIHBzZShjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5hcHBseShjLGx8fFtd''@;'; put 'put ''KSxmPVtdO3JldHVybiBoPU9iamVjdC5jcmVhdGUoKCJmdW5jdGlvbiI9PXR5cGVvZiBBc3luY0l0ZXJhdG9yP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpLE0oIm5leHQiKSxNKCJ0aHJvdyIpLE0oInJldHVybiIsZnVuY3Rpb24gdihFZSl7cmV0dXJuIGZ1bmN0aW9uKEJlKXty''@;'; put 'put ''ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJlKS50aGVuKEVlLGNlKX19KSxoW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoO2Z1bmN0aW9uIE0oRWUsQmUpe2RbRWVdJiYoaFtFZV09ZnVuY3Rpb24ocWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihy''@;'; put 'put ''dCxwdCl7Zi5wdXNoKFtFZSxxZSxydCxwdF0pPjF8fEQoRWUscWUpfSl9LEJlJiYoaFtFZV09QmUoaFtFZV0pKSl9ZnVuY3Rpb24gRChFZSxCZSl7dHJ5eyFmdW5jdGlvbiBaKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIHJtP1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKHJlLGNl''@;'; put 'put ''KTpiZShmWzBdWzJdLEVlKX0oZFtFZV0oQmUpKX1jYXRjaChxZSl7YmUoZlswXVszXSxxZSl9fWZ1bmN0aW9uIHJlKEVlKXtEKCJuZXh0IixFZSl9ZnVuY3Rpb24gY2UoRWUpe0QoInRocm93IixFZSl9ZnVuY3Rpb24gYmUoRWUsQmUpe0VlKEJlKSxmLnNoaWZ0KCksZi5sZW5ndGgmJkQoZlsw''@;'; put 'put ''XVswXSxmWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgcm0oYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIHJtKHZvaWQgMCk7eWllbGQgeWllbGQgcm0oZCl9''@;'; put 'put ''fWZpbmFsbHl7YS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIGlsZShjKXtyZXR1cm4gJGUoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBsMShjKXtpZihjIGluc3RhbmNlb2YgWHQpcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBWTWUoYyl7cmV0dXJuIG5l''@;'; put 'put ''dyBYdChsPT57Y29uc3QgYT1jW2hpXSgpO2lmKCRlKGEuc3Vic2NyaWJlKSlyZXR1cm4gYS5zdWJzY3JpYmUobCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShjKTtpZihCWihj''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gQk1lKGMpe3JldHVybiBuZXcgWHQobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZihYc2UoYykpcmV0dXJuIGZ1bmN0aW9uIGpNZShjKXtyZXR1cm4gbmV3IFh0KGw9Pntj''@;'; put 'put ''LnRoZW4oYT0+e2wuY2xvc2VkfHwobC5uZXh0KGEpLGwuY29tcGxldGUoKSl9LGE9PmwuZXJyb3IoYSkpLnRoZW4obnVsbCxSaSl9KX0oYyk7aWYoUXNlKGMpKXJldHVybiBhbGUoYyk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiB6TWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Zm9yKGNvbnN0''@;'; put 'put ''IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIFVNZShjKXtyZXR1cm4gYWxlKHJsZShjKSl9KGMpfXRocm93IGVsZShjKX1mdW5jdGlvbiBhbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57KGZ1bmN0''@;'; put 'put ''aW9uIFpNZShjLGwpe3ZhciBhLGQsaCxmO3JldHVybiBmdW5jdGlvbiBoc2UoYyxsLGEsZCl7cmV0dXJuIG5ldyhhfHwoYT1Qcm9taXNlKSkoZnVuY3Rpb24oZix2KXtmdW5jdGlvbiBNKHJlKXt0cnl7WihkLm5leHQocmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIEQocmUpe3RyeXta''@;'; put 'put ''KGQudGhyb3cocmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIFoocmUpe3JlLmRvbmU/ZihyZS52YWx1ZSk6ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGE/ZjpuZXcgYShmdW5jdGlvbih2KXt2KGYpfSl9KHJlLnZhbHVlKS50aGVuKE0sRCl9WigoZD1kLmFwcGx5KGMs''@;'; put 'put ''bHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGE9Z3NlKGMpOyEoZD15aWVsZCBhLm5leHQoKSkuZG9uZTspaWYobC5uZXh0KGQudmFsdWUpLGwuY2xvc2VkKXJldHVybn1jYXRjaCh2KXtoPXtlcnJvcjp2fX1maW5hbGx5e3RyeXtkJiYh''@;'; put 'put ''ZC5kb25lJiYoZj1hLnJldHVybikmJih5aWVsZCBmLmNhbGwoYSkpfWZpbmFsbHl7aWYoaCl0aHJvdyBoLmVycm9yfX1sLmNvbXBsZXRlKCl9KX0pKGMsbCkuY2F0Y2goYT0+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiBuZyhjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNjaGVkdWxlKGZ1bmN0''@;'; put 'put ''aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1bmN0aW9uIG9sZShjLGw9MCl7cmV0dXJuIFZpKChhLGQpPT57YS5zdWJzY3JpYmUoTmkoZCxoPT5uZyhkLGMsKCk9PmQubmV4dCho''@;'; put 'put ''KSxsKSwoKT0+bmcoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+bmcoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiBzbGUoYyxsPTApe3JldHVybiBWaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0aW9uIGxsZShjLGwp''@;'; put 'put ''e2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IFh0KGE9PntuZyhhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7bmcoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTph''@;'; put 'put ''Lm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFl1KGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24gcU1lKGMsbCl7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBXTWUoYyxsKXtyZXR1cm4gbDEoYykucGlwZShzbGUobCksb2xlKGwpKX0oYyxsKTtpZihCWihj''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gR01lKGMsbCl7cmV0dXJuIG5ldyBYdChhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZihY''@;'; put 'put ''c2UoYykpcmV0dXJuIGZ1bmN0aW9uIFlNZShjLGwpe3JldHVybiBsMShjKS5waXBlKHNsZShsKSxvbGUobCkpfShjLGwpO2lmKFFzZShjKSlyZXR1cm4gbGxlKGMsbCk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiAkTWUoYyxsKXtyZXR1cm4gbmV3IFh0KGE9PntsZXQgZDtyZXR1cm4gbmco''@;'; put 'put ''YSxsLCgpPT57ZD1jW3RsZV0oKSxuZyhhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PiRlKGQ/LnJldHVybikmJmQucmV0dXJu''@;'; put 'put ''KCl9KX0oYyxsKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIEtNZShjLGwpe3JldHVybiBsbGUocmxlKGMpLGwpfShjLGwpfXRocm93IGVsZShjKX0oYyxsKTpsMShjKX1mdW5jdGlvbiBjbGUoYyl7cmV0dXJuIGMmJiRlKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIGpaKGMpe3JldHVybiBjW2Mu''@;'; put 'put ''bGVuZ3RoLTFdfWZ1bmN0aW9uIHVsZShjKXtyZXR1cm4gJGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGpNKGMpe3JldHVybiBjbGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGZvKC4uLmMpe3JldHVybiBZdShjLGpNKGMpKX1jb25zdHtpc0FycmF5OkpNZX09QXJy''@;'; put 'put ''YXkse2dldFByb3RvdHlwZU9mOlFNZSxwcm90b3R5cGU6ZXhlLGtleXM6dHhlfT1PYmplY3Q7ZnVuY3Rpb24gZGxlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29uc3QgbD1jWzBdO2lmKEpNZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gbnhlKGMpe3JldHVybiBjJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGMmJlFNZShjKT09PWV4ZX0obCkpe2NvbnN0IGE9dHhlKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJldHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5OnJ4ZX09QXJyYXk7ZnVuY3Rpb24gelooYyl7cmV0dXJuIExyKGw9''@;'; put 'put ''PmZ1bmN0aW9uIGl4ZShjLGwpe3JldHVybiByeGUobCk/YyguLi5sKTpjKGwpfShjLGwpKX1mdW5jdGlvbiBobGUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gcTgoLi4uYyl7Y29uc3QgbD1qTShjKSxhPXVsZShjKSx7YXJnczpkLGtl''@;'; put 'put ''eXM6aH09ZGxlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gWXUoW10sbCk7Y29uc3QgZj1uZXcgWHQoZnVuY3Rpb24gYXhlKGMsbCxhPWNuKXtyZXR1cm4gZD0+e2ZsZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9yKGxldCBEPTA7RDxo''@;'; put 'put ''O0QrKylmbGUobCwoKT0+e2NvbnN0IFo9WXUoY1tEXSxsKTtsZXQgcmU9ITE7Wi5zdWJzY3JpYmUoTmkoZCxjZT0+e2ZbRF09Y2UscmV8fChyZT0hMCxNLS0pLE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShkLGwsaD92PT5obGUo''@;'; put 'put ''aCx2KTpjbikpO3JldHVybiBhP2YucGlwZSh6WihhKSk6Zn1mdW5jdGlvbiBmbGUoYyxsLGEpe2M/bmcoYSxjLGwpOmwoKX1jb25zdCBSUj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNl''@;'; put 'put ''In0pO2Z1bmN0aW9uIE4wKGMsbCxhPTEvMCl7cmV0dXJuICRlKGwpP04wKChkLGgpPT5McigoZix2KT0+bChkLGYsaCx2KSkobDEoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksVmkoKGQsaCk9PmZ1bmN0aW9uIG94ZShjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9W107''@;'; put 'put ''bGV0IFo9MCxyZT0wLGNlPSExO2NvbnN0IGJlPSgpPT57Y2UmJiFELmxlbmd0aCYmIVomJmwuY29tcGxldGUoKX0sRWU9cWU9Plo8ZD9CZShxZSk6RC5wdXNoKHFlKSxCZT1xZT0+e2YmJmwubmV4dChxZSksWisrO2xldCBydD0hMTtsMShhKHFlLHJlKyspKS5zdWJzY3JpYmUoTmkobCxwdD0+''@;'; put 'put ''e2g/LihwdCksZj9FZShwdCk6bC5uZXh0KHB0KX0sKCk9PntydD0hMH0sdm9pZCAwLCgpPT57aWYocnQpdHJ5e2ZvcihaLS07RC5sZW5ndGgmJlo8ZDspe2NvbnN0IHB0PUQuc2hpZnQoKTt2P25nKGwsdiwoKT0+QmUocHQpKTpCZShwdCl9YmUoKX1jYXRjaChwdCl7bC5lcnJvcihwdCl9fSkp''@;'; put 'put ''fTtyZXR1cm4gYy5zdWJzY3JpYmUoTmkobCxFZSwoKT0+e2NlPSEwLGJlKCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gZXkoYz0xLzApe3JldHVybiBOMChjbixjKX1mdW5jdGlvbiBVWiguLi5jKXtyZXR1cm4gZnVuY3Rpb24gc3hlKCl7cmV0dXJuIGV5KDEpfSgpKFl1''@;'; put 'put ''KGMsak0oYykpKX1mdW5jdGlvbiBwbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57bDEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiB6TShjLGwpe2NvbnN0IGE9JGUoYyk/YzooKT0+YyxkPWg9PmguZXJyb3IoYSgpKTtyZXR1cm4gbmV3IFh0KGw/aD0+bC5zY2hlZHVsZShkLDAsaCk6ZCl9''@;'; put 'put ''Y29uc3QgTTI9bmV3IFh0KGM9PmMuY29tcGxldGUoKSk7ZnVuY3Rpb24gWlooKXtyZXR1cm4gVmkoKGMsbCk9PntsZXQgYT1udWxsO2MuX3JlZkNvdW50Kys7Y29uc3QgZD1OaShsLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIWN8fGMuX3JlZkNvdW50PD0wfHwwPC0tYy5fcmVmQ291''@;'; put 'put ''bnQpcmV0dXJuIHZvaWQoYT1udWxsKTtjb25zdCBoPWMuX2Nvbm5lY3Rpb24sZj1hO2E9bnVsbCxoJiYoIWZ8fGg9PT1mKSYmaC51bnN1YnNjcmliZSgpLGwudW5zdWJzY3JpYmUoKX0pO2Muc3Vic2NyaWJlKGQpLGQuY2xvc2VkfHwoYT1jLmNvbm5lY3QoKSl9KX1jbGFzcyBXWiBleHRlbmRz''@;'; put 'put ''IFh0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sLHRoaXMuc3ViamVjdEZhY3Rvcnk9YSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsUXIobCkmJih0aGlzLmxpZnQ9bC5saWZ0KX1fc3Vic2NyaWJlKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUobCl9Z2V0U3ViamVjdCgpe2NvbnN0IGw9dGhpcy5fc3ViamVjdDtyZXR1cm4oIWx8fGwuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMu''@;'; put 'put ''X3JlZkNvdW50PTA7Y29uc3R7X2Nvbm5lY3Rpb246bH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPy51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgbD10aGlzLl9jb25uZWN0aW9uO2lmKCFsKXtsPXRoaXMuX2Nvbm5lY3Rpb249bmV3IHF0O2NvbnN0IGE9''@;'; put 'put ''dGhpcy5nZXRTdWJqZWN0KCk7bC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxhLmNvbXBsZXRlKCl9LGQ9Pnt0aGlzLl90ZWFyZG93bigpLGEuZXJyb3IoZCl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLGwuY2xvc2VkJiYodGhp''@;'; put 'put ''cy5fY29ubmVjdGlvbj1udWxsLGw9cXQuRU1QVFkpfXJldHVybiBsfXJlZkNvdW50KCl7cmV0dXJuIFpaKCkodGhpcyl9fWZ1bmN0aW9uIFYxKGMsbCl7cmV0dXJuIFZpKChhLGQpPT57bGV0IGg9bnVsbCxmPTAsdj0hMTtjb25zdCBNPSgpPT52JiYhaCYmZC5jb21wbGV0ZSgpO2Euc3Vic2Ny''@;'; put 'put ''aWJlKE5pKGQsRD0+e2g/LnVuc3Vic2NyaWJlKCk7bGV0IFo9MDtjb25zdCByZT1mKys7bDEoYyhELHJlKSkuc3Vic2NyaWJlKGg9TmkoZCxjZT0+ZC5uZXh0KGw/bChELGNlLHJlLForKyk6Y2UpLCgpPT57aD1udWxsLE0oKX0pKX0sKCk9Pnt2PSEwLE0oKX0pKX0pfWZ1bmN0aW9uIFlmKGMp''@;'; put 'put ''e3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPTA7bC5zdWJzY3JpYmUoTmkoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiB4MiguLi5jKXtjb25zdCBsPWpNKGMpO3JldHVybiBWaSgoYSxkKT0+eyhsP1VaKGMsYSxs''@;'; put 'put ''KTpVWihjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiAkbChjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT5jLmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9ZnVuY3Rpb24gTFIoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5z''@;'; put 'put ''dWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIGdsZShjPWN4ZSl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29t''@;'; put 'put ''cGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIGN4ZSgpe3JldHVybiBuZXcgUlJ9ZnVuY3Rpb24gYW0oYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjPyRsKChoLGYpPT5jKGgsZixkKSk6Y24sWWYoMSksYT9MUihsKTpnbGUoKCk9Pm5l''@;'; put 'put ''dyBSUikpfWZ1bmN0aW9uIHR5KGMsbCl7cmV0dXJuICRlKGwpP04wKGMsbCwxKTpOMChjLDEpfWZ1bmN0aW9uIEd1KGMsbCxhKXtjb25zdCBkPSRlKGMpfHxsfHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1ZpKChoLGYpPT57dmFyIHY7bnVsbD09PSh2PWQuc3Vi''@;'; put 'put ''c2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2guc3Vic2NyaWJlKE5pKGYsRD0+e3ZhciBaO251bGw9PT0oWj1kLm5leHQpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCxEKSxmLm5leHQoRCl9LCgpPT57dmFyIEQ7TT0hMSxudWxsPT09KEQ9ZC5jb21wbGV0ZSl8fHZvaWQg''@;'; put 'put ''MD09PUR8fEQuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEQ9Pnt2YXIgWjtNPSExLG51bGw9PT0oWj1kLmVycm9yKXx8dm9pZCAwPT09Wnx8Wi5jYWxsKGQsRCksZi5lcnJvcihEKX0sKCk9Pnt2YXIgRCxaO00mJihudWxsPT09KEQ9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PUR8fEQuY2FsbChk''@;'; put 'put ''KSksbnVsbD09PShaPWQuZmluYWxpemUpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCl9KSl9KTpjbn1mdW5jdGlvbiBYOChjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1sMShjKHYsWDgoYykobCkpKSxk''@;'; put 'put ''PyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFlaKGMpe3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKE5pKGEs''@;'; put 'put ''aD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBVTShjKXtyZXR1cm4gVmkoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxs''@;'; put 'put ''eXthLmFkZChjKX19KX1mdW5jdGlvbiBWMChjKXtyZXR1cm4gVmkoKGwsYSk9PntsMShjKS5zdWJzY3JpYmUoTmkoYSwoKT0+YS5jb21wbGV0ZSgpLGhuKSksIWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWNvbnN0IEtvPSJwcmltYXJ5IixaTT1TeW1ib2woIlJvdXRlVGl0bGUiKTtjbGFz''@;'; put 'put ''cyBweGV7Y29uc3RydWN0b3IobCl7dGhpcy5wYXJhbXM9bHx8e319aGFzKGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsbCl9Z2V0KGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5p''@;'; put 'put ''c0FycmF5KGEpP2FbMF06YX1yZXR1cm4gbnVsbH1nZXRBbGwobCl7aWYodGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfX1mdW5j''@;'; put 'put ''dGlvbiBueShjKXtyZXR1cm4gbmV3IHB4ZShjKX1mdW5jdGlvbiBneGUoYyxsLGEpe2NvbnN0IGQ9YS5wYXRoLnNwbGl0KCIvIik7aWYoZC5sZW5ndGg+Yy5sZW5ndGh8fCJmdWxsIj09PWEucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxkLmxlbmd0aDxjLmxlbmd0aCkpcmV0dXJuIG51''@;'; put 'put ''bGw7Y29uc3QgaD17fTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdLE09Y1tmXTtpZih2LnN0YXJ0c1dpdGgoIjoiKSloW3Yuc3Vic3RyaW5nKDEpXT1NO2Vsc2UgaWYodiE9PU0ucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6Yy5zbGljZSgwLGQubGVu''@;'; put 'put ''Z3RoKSxwb3NQYXJhbXM6aH19ZnVuY3Rpb24gaHAoYyxsKXtjb25zdCBhPWM/R1ooYyk6dm9pZCAwLGQ9bD9HWihsKTp2b2lkIDA7aWYoIWF8fCFkfHxhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7bGV0IGg7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspaWYoaD1hW2ZdLCFtbGUoY1to''@;'; put 'put ''XSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBHWihjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24gbWxlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheShsKSl7aWYoYy5s''@;'; put 'put ''ZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5jXS5zb3J0KCksZD1bLi4ubF0uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChoLGYpPT5kW2ZdPT09aCl9cmV0dXJuIGM9PT1sfWZ1bmN0aW9uIHZsZShjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gb20oYyl7cmV0dXJuIEJNKGMpP2M6X00oYyk/WXUoUHJvbWlzZS5yZXNvbHZlKGMpKTpmbyhjKX1jb25zdCB2eGU9e2V4YWN0OmZ1bmN0aW9uIF9sZShjLGwsYSl7aWYoIUo4KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFPUihjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVt''@;'; put 'put ''YmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhX2xlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OndsZX0sYmxlPXtleGFj''@;'; put 'put ''dDpmdW5jdGlvbiBieGUoYyxsKXtyZXR1cm4gaHAoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIHl4ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+bWxlKGNbYV0sbFthXSkpfSxpZ25vcmVkOigp''@;'; put 'put ''PT4hMH07ZnVuY3Rpb24geWxlKGMsbCxhKXtyZXR1cm4gdnhlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZibGVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwu''@;'; put 'put ''ZnJhZ21lbnQpfWZ1bmN0aW9uIHdsZShjLGwsYSl7cmV0dXJuIENsZShjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBDbGUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFKOChoLGEp''@;'; put 'put ''fHxsLmhhc0NoaWxkcmVuKCl8fCFPUihoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFKOChjLnNlZ21lbnRzLGEpfHwhT1IoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCF3bGUo''@;'; put 'put ''Yy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShKOChjLnNlZ21lbnRzLGgpJiZPUihjLnNlZ21lbnRzLGgsZCkmJmMu''@;'; put 'put ''Y2hpbGRyZW5bS29dKSYmQ2xlKGMuY2hpbGRyZW5bS29dLGwsZixkKX19ZnVuY3Rpb24gT1IoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5ibGVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIHJ5e2NvbnN0cnVjdG9yKGw9bmV3IEtsKFtdLHt9KSxhPXt9LGQ9''@;'; put 'put ''bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiBDeGUu''@;'; put 'put ''c2VyaWFsaXplKHRoaXMpfX1jbGFzcyBLbHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1i''@;'; put 'put ''ZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFBSKHRoaXMpfX1jbGFzcyBXTXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdl''@;'; put 'put ''dCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89bnkodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4geGxlKHRoaXMpfX1mdW5jdGlvbiBKOChjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5''@;'; put 'put ''KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBpeT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyAkWixwcm92aWRlZElu''@;'; put 'put ''OiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgJFp7cGFyc2UobCl7Y29uc3QgYT1uZXcgTHhlKGwpO3JldHVybiBuZXcgcnkoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25zdCBhPWAvJHtZTShs''@;'; put 'put ''LnJvb3QsITApfWAsZD1mdW5jdGlvbiB4eGUoYyl7Y29uc3QgbD1PYmplY3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9kLm1hcChoPT5gJHtGUihhKX09JHtGUihoKX1gKS5qb2luKCImIik6YCR7RlIoYSl9PSR7RlIoZCl9YCkuZmlsdGVyKGE9PmEpO3JldHVy''@;'; put 'put ''biBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBhcmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIFN4ZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7aH1gfX1jb25zdCBD''@;'; put 'put ''eGU9bmV3ICRaO2Z1bmN0aW9uIFBSKGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT54bGUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBZTShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIFBSKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltLb10/WU0oYy5jaGlsZHJlbltLb10s''@;'; put 'put ''ITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1LbyYmZC5wdXNoKGAke2h9OiR7WU0oZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gd3hlKGMsbCl7''@;'; put 'put ''bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT1LbyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09S28mJihhPWEuY29uY2F0KGwoaCxkKSkp''@;'; put 'put ''fSksYX0oYywoZCxoKT0+aD09PUtvP1tZTShjLmNoaWxkcmVuW0tvXSwhMSldOltgJHtofToke1lNKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltLb10/YCR7UFIoYyl9LyR7YVswXX1gOmAke1BSKGMpfS8oJHth''@;'; put 'put ''LmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIFNsZShjKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBGUihjKXtyZXR1cm4g''@;'; put 'put ''U2xlKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIEtaKGMpe3JldHVybiBTbGUoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gSFIoYyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX1m''@;'; put 'put ''dW5jdGlvbiBNbGUoYyl7cmV0dXJuIEhSKGMucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIHhsZShjKXtyZXR1cm5gJHtLWihjLnBhdGgpfSR7ZnVuY3Rpb24gTXhlKGMpe3JldHVybiBPYmplY3QuZW50cmllcyhjKS5tYXAoKFtsLGFdKT0+YDske0taKGwpfT0ke0taKGEpfWApLmpv''@;'; put 'put ''aW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgRXhlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHFaKGMpe2NvbnN0IGw9Yy5tYXRjaChFeGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgVHhlPS9eW15cLygpPzs9I10rLyxreGU9L15bXj0/JiNdKy8sSXhlPS9eW14mI10rLztjbGFzcyBM''@;'; put 'put ''eGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgo''@;'; put 'put ''IiMiKT9uZXcgS2woW10se30pOm5ldyBLbChbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygpe2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgi''@;'; put 'put ''JiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9w''@;'; put 'put ''dGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRo''@;'; put 'put ''aXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYm''@;'; put 'put ''KGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW0tvXT1uZXcgS2wobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXFaKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0''@;'; put 'put ''aHJvdyBuZXcgUW4oNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgV00oSFIobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7''@;'; put 'put ''cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIEF4ZShjKXtjb25zdCBsPWMubWF0Y2goVHhlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgi''@;'; put 'put ''PSIpKXtjb25zdCBoPXFaKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFtIUihhKV09SFIoZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gRHhlKGMpe2NvbnN0IGw9Yy5tYXRjaChreGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWlu''@;'; put 'put ''aW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IHY9ZnVuY3Rpb24gUnhlKGMpe2NvbnN0IGw9Yy5tYXRjaChJeGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTt2JiYoZD12LHRoaXMu''@;'; put 'put ''Y2FwdHVyZShkKSl9Y29uc3QgaD1NbGUoYSksZj1NbGUoZCk7aWYobC5oYXNPd25Qcm9wZXJ0eShoKSl7bGV0IHY9bFtoXTtBcnJheS5pc0FycmF5KHYpfHwodj1bdl0sbFtoXT12KSx2LnB1c2goZil9ZWxzZSBsW2hdPWZ9cGFyc2VQYXJlbnMobCl7Y29uc3QgYT17fTtmb3IodGhpcy5jYXB0''@;'; put 'put ''dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3QgZD1xWih0aGlzLnJlbWFpbmluZyksaD10aGlzLnJlbWFpbmluZ1tkLmxlbmd0aF07aWYoIi8iIT09aCYmIikiIT09aCYmIjsiIT09aCl0aHJvdyBuZXcgUW4oNDAxMCwh''@;'; put 'put ''MSk7bGV0IGY7ZC5pbmRleE9mKCI6Iik+LTE/KGY9ZC5zbGljZSgwLGQuaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoZiksdGhpcy5jYXB0dXJlKCI6IikpOmwmJihmPUtvKTtjb25zdCB2PXRoaXMucGFyc2VDaGlsZHJlbigpO2FbZl09MT09PU9iamVjdC5rZXlzKHYpLmxlbmd0aD92W0tv''@;'; put 'put ''XTpuZXcgS2woW10sdiksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGF9cGVla1N0YXJ0c1dpdGgobCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgobCl9Y29uc3VtZU9wdGlvbmFsKGwpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChsKSYmKHRoaXMucmVt''@;'; put 'put ''YWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhsLmxlbmd0aCksITApfWNhcHR1cmUobCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKGwpKXRocm93IG5ldyBRbig0MDExLCExKX19ZnVuY3Rpb24gRWxlKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyBLbChbXSx7W0tv''@;'; put 'put ''XTpjfSk6Y31mdW5jdGlvbiBUbGUoYyl7Y29uc3QgbD17fTtmb3IoY29uc3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pKXtjb25zdCBmPVRsZShoKTtpZihkPT09S28mJjA9PT1mLnNlZ21lbnRzLmxlbmd0aCYmZi5oYXNDaGlsZHJlbigpKWZvcihjb25zdFt2LE1db2YgT2Jq''@;'; put 'put ''ZWN0LmVudHJpZXMoZi5jaGlsZHJlbikpbFt2XT1NO2Vsc2UoZi5zZWdtZW50cy5sZW5ndGg+MHx8Zi5oYXNDaGlsZHJlbigpKSYmKGxbZF09Zil9cmV0dXJuIGZ1bmN0aW9uIE94ZShjKXtpZigxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiZjLmNoaWxkcmVuW0tvXSl7Y29uc3QgbD1jLmNoaWxk''@;'; put 'put ''cmVuW0tvXTtyZXR1cm4gbmV3IEtsKGMuc2VnbWVudHMuY29uY2F0KGwuc2VnbWVudHMpLGwuY2hpbGRyZW4pfXJldHVybiBjfShuZXcgS2woYy5zZWdtZW50cyxsKSl9ZnVuY3Rpb24gYXkoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiByeX1mdW5jdGlvbiBBbGUoYyl7bGV0IGw7Y29uc3QgaD1F''@;'; put 'put ''bGUoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBEIG9mIGYuY2hpbGRyZW4pe2NvbnN0IFo9YShEKTt2W0Qub3V0bGV0XT1afWNvbnN0IE09bmV3IEtsKGYudXJsLHYpO3JldHVybiBmPT09YyYmKGw9TSksTX0oYy5yb290KSk7cmV0dXJuIGw/P2h9ZnVuY3Rpb24ga2xlKGMs''@;'; put 'put ''bCxhLGQpe2xldCBoPWM7Zm9yKDtoLnBhcmVudDspaD1oLnBhcmVudDtpZigwPT09bC5sZW5ndGgpcmV0dXJuIFhaKGgsaCxoLGEsZCk7Y29uc3QgZj1mdW5jdGlvbiBGeGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjWzBdJiYxPT09Yy5sZW5ndGgmJiIvIj09PWNbMF0pcmV0dXJuIG5ldyBJ''@;'; put 'put ''bGUoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IE09e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW0QsWl0pPT57TVtEXT0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFo/Wi5zcGxpdCgiLyIpOlp9KSxbLi4uaCx7b3V0bGV0czpNfV19aWYoZi5zZWdtZW50UGF0aClyZXR1cm5bLi4uaCxmLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGY/Wy4uLmgsZl06MD09PXY/KGYuc3BsaXQoIi8iKS5mb3JFYWNoKChNLEQp''@;'; put 'put ''PT57MD09RCYmIi4iPT09TXx8KDA9PUQmJiIiPT09TT9hPSEwOiIuLiI9PT1NP2wrKzoiIiE9TSYmaC5wdXNoKE0pKX0pLGgpOlsuLi5oLGZdfSxbXSk7cmV0dXJuIG5ldyBJbGUoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBYWihoLGgsbmV3IEtsKFtdLHt9KSxhLGQpO2NvbnN0''@;'; put 'put ''IHY9ZnVuY3Rpb24gSHhlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBWUihsLCEwLDApO2lmKCFhKXJldHVybiBuZXcgVlIobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFZSKGEsITAsMCk7Y29uc3QgZD1OUihjLmNvbW1hbmRzWzBdKT8wOjE7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIE54ZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93IG5ldyBRbig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgVlIoZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxj''@;'; put 'put ''Lm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0NoaWxkcmVuPyRNKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6UmxlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIFhaKGgsdi5zZWdtZW50R3JvdXAsTSxhLGQpfWZ1bmN0''@;'; put 'put ''aW9uIE5SKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rpb24gR00oYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24gWFooYyxsLGEsZCxoKXtsZXQgdixmPXt9''@;'; put 'put ''O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtELFpdKT0+e2ZbRF09QXJyYXkuaXNBcnJheShaKT9aLm1hcChyZT0+YCR7cmV9YCk6YCR7Wn1gfSksdj1jPT09bD9hOkRsZShjLGwsYSk7Y29uc3QgTT1FbGUoVGxlKHYpKTtyZXR1cm4gbmV3IHJ5KE0sZixoKX1mdW5jdGlvbiBEbGUo''@;'; put 'put ''YyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09PWw/YTpEbGUoZixsLGEpfSksbmV3IEtsKGMuc2VnbWVudHMsZCl9Y2xhc3MgSWxle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9''@;'; put 'put ''bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZOUihkWzBdKSl0aHJvdyBuZXcgUW4oNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoR00pO2lmKGgmJmghPT12bGUoZCkpdGhyb3cgbmV3IFFuKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBWUntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zZWdtZW50R3JvdXA9bCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9ZH19ZnVuY3Rpb24gUmxlKGMs''@;'; put 'put ''bCxhKXtpZihjPz89bmV3IEtsKFtdLHt9KSwwPT09Yy5zZWdtZW50cy5sZW5ndGgmJmMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gJE0oYyxsLGEpO2NvbnN0IGQ9ZnVuY3Rpb24gQnhlKGMsbCxhKXtsZXQgZD0wLGg9bDtjb25zdCBmPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6''@;'; put 'put ''MH07Zm9yKDtoPGMuc2VnbWVudHMubGVuZ3RoOyl7aWYoZD49YS5sZW5ndGgpcmV0dXJuIGY7Y29uc3Qgdj1jLnNlZ21lbnRzW2hdLE09YVtkXTtpZihHTShNKSlicmVhaztjb25zdCBEPWAke019YCxaPWQ8YS5sZW5ndGgtMT9hW2QrMV06bnVsbDtpZihoPjAmJnZvaWQgMD09PUQpYnJlYWs7''@;'; put 'put ''aWYoRCYmWiYmIm9iamVjdCI9PXR5cGVvZiBaJiZ2b2lkIDA9PT1aLm91dGxldHMpe2lmKCFPbGUoRCxaLHYpKXJldHVybiBmO2QrPTJ9ZWxzZXtpZighT2xlKEQse30sdikpcmV0dXJuIGY7ZCsrfWgrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmgsY29tbWFuZEluZGV4OmR9fShjLGws''@;'; put 'put ''YSksaD1hLnNsaWNlKGQuY29tbWFuZEluZGV4KTtpZihkLm1hdGNoJiZkLnBhdGhJbmRleDxjLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1uZXcgS2woYy5zZWdtZW50cy5zbGljZSgwLGQucGF0aEluZGV4KSx7fSk7cmV0dXJuIGYuY2hpbGRyZW5bS29dPW5ldyBLbChjLnNlZ21lbnRzLnNs''@;'; put 'put ''aWNlKGQucGF0aEluZGV4KSxjLmNoaWxkcmVuKSwkTShmLDAsaCl9cmV0dXJuIGQubWF0Y2gmJjA9PT1oLmxlbmd0aD9uZXcgS2woYy5zZWdtZW50cyx7fSk6ZC5tYXRjaCYmIWMuaGFzQ2hpbGRyZW4oKT9KWihjLGwsYSk6ZC5tYXRjaD8kTShjLDAsaCk6SlooYyxsLGEpfWZ1bmN0aW9uICRN''@;'; put 'put ''KGMsbCxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLHt9KTt7Y29uc3QgZD1mdW5jdGlvbiBWeGUoYyl7cmV0dXJuIEdNKGNbMF0pP2NbMF0ub3V0bGV0czp7W0tvXTpjfX0oYSksaD17fTtpZihPYmplY3Qua2V5cyhkKS5zb21lKGY9PmYhPT1LbykmJmMuY2hp''@;'; put 'put ''bGRyZW5bS29dJiYxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiYwPT09Yy5jaGlsZHJlbltLb10uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPSRNKGMuY2hpbGRyZW5bS29dLGwsYSk7cmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLGYuY2hpbGRyZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhkKS5m''@;'; put 'put ''b3JFYWNoKChbZix2XSk9Pnsic3RyaW5nIj09dHlwZW9mIHYmJih2PVt2XSksbnVsbCE9PXYmJihoW2ZdPVJsZShjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09dil9KSxuZXcgS2wo''@;'; put 'put ''Yy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gSlooYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKEdNKGYpKXtjb25zdCBEPWp4ZShmLm91dGxldHMpO3JldHVybiBuZXcgS2woZCxEKX1pZigwPT09aCYm''@;'; put 'put ''TlIoYVswXSkpe2QucHVzaChuZXcgV00oYy5zZWdtZW50c1tsXS5wYXRoLExsZShhWzBdKSkpLGgrKztjb250aW51ZX1jb25zdCB2PUdNKGYpP2Yub3V0bGV0c1tLb106YCR7Zn1gLE09aDxhLmxlbmd0aC0xP2FbaCsxXTpudWxsO3YmJk0mJk5SKE0pPyhkLnB1c2gobmV3IFdNKHYsTGxlKE0p''@;'; put 'put ''KSksaCs9Mik6KGQucHVzaChuZXcgV00odix7fSkpLGgrKyl9cmV0dXJuIG5ldyBLbChkLHt9KX1mdW5jdGlvbiBqeGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT57InN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLG51bGwhPT1kJiYo''@;'; put 'put ''bFthXT1KWihuZXcgS2woW10se30pLDAsZCkpfSksbH1mdW5jdGlvbiBMbGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBPbGUoYyxsLGEpe3JldHVybiBjPT1hLnBhdGgmJmhwKGwsYS5wYXJh''@;'; put 'put ''bWV0ZXJzKX1jb25zdCBLTT0iaW1wZXJhdGl2ZSI7dmFyIFJzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmF2aWdhdGlvblN0YXJ0PTBdPSJOYXZpZ2F0aW9uU3RhcnQiLGNbYy5OYXZpZ2F0aW9uRW5kPTFdPSJOYXZpZ2F0aW9uRW5kIixjW2MuTmF2aWdhdGlvbkNhbmNlbD0yXT0iTmF2aWdh''@;'; put 'put ''dGlvbkNhbmNlbCIsY1tjLk5hdmlnYXRpb25FcnJvcj0zXT0iTmF2aWdhdGlvbkVycm9yIixjW2MuUm91dGVzUmVjb2duaXplZD00XT0iUm91dGVzUmVjb2duaXplZCIsY1tjLlJlc29sdmVTdGFydD01XT0iUmVzb2x2ZVN0YXJ0IixjW2MuUmVzb2x2ZUVuZD02XT0iUmVzb2x2ZUVuZCIsY1tj''@;'; put 'put ''Lkd1YXJkc0NoZWNrU3RhcnQ9N109Ikd1YXJkc0NoZWNrU3RhcnQiLGNbYy5HdWFyZHNDaGVja0VuZD04XT0iR3VhcmRzQ2hlY2tFbmQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydD05XT0iUm91dGVDb25maWdMb2FkU3RhcnQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRFbmQ9MTBdPSJSb3V0ZUNv''@;'; put 'put ''bmZpZ0xvYWRFbmQiLGNbYy5DaGlsZEFjdGl2YXRpb25TdGFydD0xMV09IkNoaWxkQWN0aXZhdGlvblN0YXJ0IixjW2MuQ2hpbGRBY3RpdmF0aW9uRW5kPTEyXT0iQ2hpbGRBY3RpdmF0aW9uRW5kIixjW2MuQWN0aXZhdGlvblN0YXJ0PTEzXT0iQWN0aXZhdGlvblN0YXJ0IixjW2MuQWN0aXZh''@;'; put 'put ''dGlvbkVuZD0xNF09IkFjdGl2YXRpb25FbmQiLGNbYy5TY3JvbGw9MTVdPSJTY3JvbGwiLGNbYy5OYXZpZ2F0aW9uU2tpcHBlZD0xNl09Ik5hdmlnYXRpb25Ta2lwcGVkIixjfShSc3x8e30pO2NsYXNzIGZwe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMudXJsPWF9fWNsYXNzIEJS''@;'; put 'put ''IGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQ9ImltcGVyYXRpdmUiLGg9bnVsbCl7c3VwZXIobCxhKSx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvblN0YXJ0LHRoaXMubmF2aWdhdGlvblRyaWdnZXI9ZCx0aGlzLnJlc3RvcmVkU3RhdGU9aH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9u''@;'; put 'put ''U3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBwcCBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBO''@;'; put 'put ''YXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIHBoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUmVkaXJlY3Q9MF09IlJlZGlyZWN0IixjW2MuU3VwZXJzZWRl''@;'; put 'put ''ZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiIsY1tjLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixjW2MuR3VhcmRSZWplY3RlZD0zXT0iR3VhcmRSZWplY3RlZCIsY30ocGh8fHt9KSxqUj1mdW5jdGlvbihjKXtyZXR1cm4g''@;'; put 'put ''Y1tjLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIixjW2MuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsY30oalJ8fHt9KTtjbGFzcyBveSBleHRlbmRzIGZwe2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkNhbmNlbH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3Mgc3kgZXh0''@;'; put 'put ''ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25Ta2lwcGVkfX1jbGFzcyB6UiBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRo''@;'; put 'put ''aXMudGFyZ2V0PWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25FcnJvcn10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRXJyb3IoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgZXJyb3I6ICR7dGhpcy5lcnJvcn0pYH19Y2xhc3MgUGxlIGV4dGVuZHMgZnB7Y29uc3RydWN0''@;'; put 'put ''b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5Sb3V0ZXNSZWNvZ25pemVkfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJs''@;'; put 'put ''QWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgenhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMu''@;'; put 'put ''dHlwZT1Scy5HdWFyZHNDaGVja1N0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0p''@;'; put 'put ''YH19Y2xhc3MgVXhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy5zaG91bGRBY3RpdmF0ZT1mLHRoaXMudHlwZT1Scy5HdWFyZHNDaGVja0VuZH10b1N0cmluZygpe3JldHVybmBH''@;'; put 'put ''dWFyZHNDaGVja0VuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xh''@;'; put 'put ''c3MgWnhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5SZXNvbHZlU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZVN0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6''@;'; put 'put ''ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIFd4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1k''@;'; put 'put ''LHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9UnMuUmVzb2x2ZUVuZH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMu''@;'; put 'put ''c3RhdGV9KWB9fWNsYXNzIFl4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWwsdGhpcy50eXBlPVJzLlJvdXRlQ29uZmlnTG9hZFN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBHeGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Scy5Sb3V0ZUNvbmZpZ0xvYWRFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyAkeGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMu''@;'; put 'put ''dHlwZT1Scy5DaGlsZEFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgS3hle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQ2hpbGRBY3RpdmF0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19''@;'; put 'put ''Y2xhc3MgcXhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvblN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmln''@;'; put 'put ''LnBhdGh8fCIifScpYH19Y2xhc3MgWHhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qu''@;'; put 'put ''cm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBGbGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9UnMuU2Nyb2xsfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9sbChhbmNob3I6ICcke3RoaXMu''@;'; put 'put ''YW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3MgUVp7fWNsYXNzIGVXe2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWx9fWNsYXNzIEp4ZXtjb25zdHJ1Y3Rvcigpe3RoaXMu''@;'; put 'put ''b3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBxTSx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgcU09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxkT3V0bGV0Q3JlYXRl''@;'; put 'put ''ZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7aC5vdXRsZXQ9ZCx0aGlzLmNvbnRleHRzLnNldChhLGgpfW9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZD10aGlzLmdldENvbnRleHQoYSk7ZCYmKGQub3V0bGV0PW51bGwsZC5hdHRhY2hSZWY9bnVsbCl9''@;'; put 'put ''b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRSZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO3JldHVy''@;'; put 'put ''biBkfHwoZD1uZXcgSnhlLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9''@;'; put 'put ''YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSGxle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3Jvb3Q9bH1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfXBhcmVudChsKXtjb25zdCBhPXRoaXMucGF0''@;'; put 'put ''aEZyb21Sb290KGwpO3JldHVybiBhLmxlbmd0aD4xP2FbYS5sZW5ndGgtMl06bnVsbH1jaGlsZHJlbihsKXtjb25zdCBhPXRXKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGE/YS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSk6W119Zmlyc3RDaGlsZChsKXtjb25zdCBhPXRXKGwsdGhpcy5fcm9vdCk7''@;'; put 'put ''cmV0dXJuIGEmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXS52YWx1ZTpudWxsfXNpYmxpbmdzKGwpe2NvbnN0IGE9blcobCx0aGlzLl9yb290KTtyZXR1cm4gYS5sZW5ndGg8Mj9bXTphW2EubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChoPT5oLnZhbHVlKS5maWx0ZXIoaD0+aCE9''@;'; put 'put ''PWwpfXBhdGhGcm9tUm9vdChsKXtyZXR1cm4gblcobCx0aGlzLl9yb290KS5tYXAoYT0+YS52YWx1ZSl9fWZ1bmN0aW9uIHRXKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuIGw7Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD10VyhjLGEpO2lmKGQpcmV0dXJuIGR9cmV0dXJu''@;'; put 'put ''IG51bGx9ZnVuY3Rpb24gblcoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm5bbF07Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1uVyhjLGEpO2lmKGQubGVuZ3RoKXJldHVybiBkLnVuc2hpZnQobCksZH1yZXR1cm5bXX1jbGFzcyBHZntjb25zdHJ1Y3RvcihsLGEpe3RoaXMu''@;'; put 'put ''dmFsdWU9bCx0aGlzLmNoaWxkcmVuPWF9dG9TdHJpbmcoKXtyZXR1cm5gVHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgfX1mdW5jdGlvbiBseShjKXtjb25zdCBsPXt9O3JldHVybiBjJiZjLmNoaWxkcmVuLmZvckVhY2goYT0+bFthLnZhbHVlLm91dGxldF09YSksbH1jbGFzcyBObGUgZXh0ZW5k''@;'; put 'put ''cyBIbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBzaG90PWEsYVcodGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIFZsZShjKXtjb25zdCBsPWZ1bmN0aW9uIFF4ZShjKXtjb25zdCBmPW5ldyBpVyhbXSx7fSx7''@;'; put 'put ''fSwiIix7fSxLbyxjLG51bGwse30pO3JldHVybiBuZXcgQmxlKCIiLG5ldyBHZihmLFtdKSl9KGMpLGE9bmV3IGVpKFtuZXcgV00oIiIse30pXSksZD1uZXcgZWkoe30pLGg9bmV3IGVpKHt9KSxmPW5ldyBlaSh7fSksdj1uZXcgZWkoIiIpLE09bmV3IEN1KGEsZCxmLHYsaCxLbyxjLGwucm9v''@;'; put 'put ''dCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyBObGUobmV3IEdmKE0sW10pLGwpfWNsYXNzIEN1e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9ZCx0aGlzLmZyYWdt''@;'; put 'put ''ZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5fZnV0dXJlU25hcHNob3Q9RCx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoTHIoWj0+WltaTV0pKT8/Zm8odm9pZCAwKSx0aGlzLnVybD1sLHRoaXMucGFy''@;'; put 'put ''YW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zn1nZXQgcm91dGVDb25maWcoKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21S''@;'; put 'put ''b290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKExyKGw9Pm55KGwpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlwZShMcihsPT5ueShsKSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlg''@;'; put 'put ''fX1mdW5jdGlvbiByVyhjLGwsYT0iZW1wdHlPbmx5Iil7bGV0IGQ7Y29uc3R7cm91dGVDb25maWc6aH09YztyZXR1cm4gZD1udWxsPT09bHx8ImFsd2F5cyIhPT1hJiYiIiE9PWg/LnBhdGgmJihsLmNvbXBvbmVudHx8bC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/e3BhcmFtczp7Li4u''@;'; put 'put ''Yy5wYXJhbXN9LGRhdGE6ey4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YT8/e319fTp7cGFyYW1zOnsuLi5sLnBhcmFtcywuLi5jLnBhcmFtc30sZGF0YTp7Li4ubC5kYXRhLC4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmwuZGF0YSwuLi5o''@;'; put 'put ''Py5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJnpsZShoKSYmKGQucmVzb2x2ZVtaTV09aC50aXRsZSksZH1jbGFzcyBpV3tnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bWk1dfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEs''@;'; put 'put ''dGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5yb3V0ZUNvbmZpZz1ELHRoaXMuX3Jlc29sdmU9Wn1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJv''@;'; put 'put ''bVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PW55KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFt''@;'; put 'put ''TWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBh''@;'; put 'put ''dGg6IiJ9JylgfX1jbGFzcyBCbGUgZXh0ZW5kcyBIbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLGFXKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gamxlKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiBhVyhjLGwpe2wudmFsdWUuX3JvdXRlclN0YXRlPWMsbC5jaGlsZHJl''@;'; put 'put ''bi5mb3JFYWNoKGE9PmFXKGMsYSkpfWZ1bmN0aW9uIGpsZShjKXtjb25zdCBsPWMuY2hpbGRyZW4ubGVuZ3RoPjA/YCB7ICR7Yy5jaGlsZHJlbi5tYXAoamxlKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBvVyhjKXtpZihjLnNuYXBzaG90KXtj''@;'; put 'put ''b25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEsaHAobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFyYW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1Ympl''@;'; put 'put ''Y3QubmV4dChhLmZyYWdtZW50KSxocChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiBteGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFocChjW2FdLGxb''@;'; put 'put ''YV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxocChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBzaG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9m''@;'; put 'put ''dXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBzVyhjLGwpe2NvbnN0IGE9aHAoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBfeGUoYyxsKXtyZXR1cm4gSjgoYyxsKSYmYy5ldmVyeSgoYSxkKT0+aHAoYS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7''@;'; put 'put ''cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxzVyhjLnBhcmVudCxsLnBhcmVudCkpfWZ1bmN0aW9uIHpsZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCByZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1Lbyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBLcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEtyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBLcix0aGlzLmRldGFjaEV2ZW50cz1uZXcg''@;'; put 'put ''S3IsdGhpcy5wYXJlbnRDb250ZXh0cz1maShxTSksdGhpcy5sb2NhdGlvbj1maShEbyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1maShFcyksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLmlucHV0QmluZGVyPWZpKFVSLHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5k''@;'; put 'put ''aW5nVG9Db21wb25lbnRJbnB1dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1Ry''@;'; put 'put ''YWNrZWRJblBhcmVudENvbnRleHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250''@;'; put 'put ''ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJl''@;'; put 'put ''bnRDb250ZXh0cy5nZXRDb250ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0''@;'; put 'put ''aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmpl''@;'; put 'put ''Y3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlz''@;'; put 'put ''LmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZigh''@;'; put 'put ''dGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0''@;'; put 'put ''YW5jZSksYX1hdHRhY2goYSxkKXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hF''@;'; put 'put ''dmVudHMuZW1pdChhLmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVF''@;'; put 'put ''dmVudHMuZW1pdChhKX19YWN0aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sdj1hLnNuYXBzaG90LmNvbXBvbmVudCxNPXRoaXMucGFyZW50Q29udGV4dHMu''@;'; put 'put ''Z2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sRD1uZXcgbFcoYSxNLGguaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOkQsZW52aXJvbm1lbnRJbmplY3RvcjpkPz90aGlzLmVudmlyb25tZW50''@;'; put 'put ''SW5qZWN0b3J9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSJ9LG91dHB1dHM6e2FjdGl2YXRlRXZlbnRzOiJhY3RpdmF0ZSIsZGVh''@;'; put 'put ''Y3RpdmF0ZUV2ZW50czoiZGVhY3RpdmF0ZSIsYXR0YWNoRXZlbnRzOiJhdHRhY2giLGRldGFjaEV2ZW50czoiZGV0YWNoIn0sZXhwb3J0QXM6WyJvdXRsZXQiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIGxXe19fbmdPdXRsZXRJbmplY3Rvcihs''@;'; put 'put ''KXtyZXR1cm4gbmV3IGxXKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRleHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUN1P3RoaXMucm91dGU6bD09PXFNP3RoaXMuY2hp''@;'; put 'put ''bGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgVVI9bmV3IFN0KCIiKTtsZXQgVWxlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zPW5ldyBNYXB9YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQoYSl7''@;'; put 'put ''dGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSksdGhpcy5zdWJzY3JpYmVUb1JvdXRlRGF0YShhKX11bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQoYSk/LnVuc3Vic2NyaWJlKCksdGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0''@;'; put 'put ''aW9ucy5kZWxldGUoYSl9c3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl7Y29uc3R7YWN0aXZhdGVkUm91dGU6ZH09YSxoPXE4KFtkLnF1ZXJ5UGFyYW1zLGQucGFyYW1zLGQuZGF0YV0pLnBpcGUoVjEoKFtmLHYsTV0sRCk9PihNPXsuLi5mLC4uLnYsLi4uTX0sMD09PUQ/Zm8oTSk6UHJvbWlzZS5y''@;'; put 'put ''ZXNvbHZlKE0pKSkpLnN1YnNjcmliZShmPT57aWYoIWEuaXNBY3RpdmF0ZWR8fCFhLmFjdGl2YXRlZENvbXBvbmVudFJlZnx8YS5hY3RpdmF0ZWRSb3V0ZSE9PWR8fG51bGw9PT1kLmNvbXBvbmVudClyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKTtjb25zdCB2''@;'; put 'put ''PWZ1bmN0aW9uIGhfZShjKXtjb25zdCBsPVZvKGMpO2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IGs4KGwpO3JldHVybntnZXQgc2VsZWN0b3IoKXtyZXR1cm4gYS5zZWxlY3Rvcn0sZ2V0IHR5cGUoKXtyZXR1cm4gYS5jb21wb25lbnRUeXBlfSxnZXQgaW5wdXRzKCl7cmV0dXJuIGEu''@;'; put 'put ''aW5wdXRzfSxnZXQgb3V0cHV0cygpe3JldHVybiBhLm91dHB1dHN9LGdldCBuZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gYS5uZ0NvbnRlbnRTZWxlY3RvcnN9LGdldCBpc1N0YW5kYWxvbmUoKXtyZXR1cm4gbC5zdGFuZGFsb25lfSxnZXQgaXNTaWduYWwoKXtyZXR1cm4gbC5zaWduYWxz''@;'; put 'put ''fX19KGQuY29tcG9uZW50KTtpZih2KWZvcihjb25zdHt0ZW1wbGF0ZU5hbWU6TX1vZiB2LmlucHV0cylhLmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dChNLGZbTV0pO2Vsc2UgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl9KTt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRp''@;'; put 'put ''b25zLnNldChhLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhNKGMsbCxhKXtpZihhJiZjLnNo''@;'; put 'put ''b3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiB0RWUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilp''@;'; put 'put ''ZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gWE0oYyxkLGgpO3JldHVybiBYTShjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IEdmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7''@;'; put 'put ''aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09PlhNKGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gbkVlKGMpe3JldHVybiBuZXcgQ3UobmV3IGVpKGMudXJsKSxuZXcg''@;'; put 'put ''ZWkoYy5wYXJhbXMpLG5ldyBlaShjLnF1ZXJ5UGFyYW1zKSxuZXcgZWkoYy5mcmFnbWVudCksbmV3IGVpKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+WE0oYyxmKSk7cmV0dXJuIG5ldyBHZihkLGgpfX1jb25zdCBabGU9Im5n''@;'; put 'put ''TmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBXbGUoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT1heShsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9WWxlKCExLHBoLlJlZGly''@;'; put 'put ''ZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9ZCxofWZ1bmN0aW9uIFlsZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbWmxlXT0hMCxhLmNhbmNlbGxhdGlvbkNvZGU9bCxh''@;'; put 'put ''fWZ1bmN0aW9uIEdsZShjKXtyZXR1cm4hIWMmJmNbWmxlXX1sZXQgJGxlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25l''@;'; put 'put ''bnQiXV0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcUldLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gY1coYyl7''@;'; put 'put ''Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChjVyksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PUtvJiYoYS5jb21wb25lbnQ9''@;'; put 'put ''JGxlKSxhfWZ1bmN0aW9uIGdwKGMpe3JldHVybiBjLm91dGxldHx8S299ZnVuY3Rpb24gSk0oYyl7aWYoIWMpcmV0dXJuIG51bGw7aWYoYy5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBjLnJvdXRlQ29uZmlnLl9pbmplY3Rvcjtmb3IobGV0IGw9Yy5wYXJlbnQ7bDtsPWwucGFyZW50''@;'; put 'put ''KXtjb25zdCBhPWwucm91dGVDb25maWc7aWYoYT8uX2xvYWRlZEluamVjdG9yKXJldHVybiBhLl9sb2FkZWRJbmplY3RvcjtpZihhPy5faW5qZWN0b3IpcmV0dXJuIGEuX2luamVjdG9yfXJldHVybiBudWxsfWNsYXNzIHVFZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMucm91dGVSZXVz''@;'; put 'put ''ZVN0cmF0ZWd5PWwsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0YXRlPWQsdGhpcy5mb3J3YXJkRXZlbnQ9aCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9Zn1hY3RpdmF0ZShsKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3QsZD10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJT''@;'; put 'put ''dGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKSxvVyh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWx5KGEpO2wuY2hpbGRyZW4uZm9y''@;'; put 'put ''RWFjaChmPT57Y29uc3Qgdj1mLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoZixoW3ZdLGQpLGRlbGV0ZSBoW3ZdfSksT2JqZWN0LnZhbHVlcyhoKS5mb3JFYWNoKGY9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGYsZCl9KX1kZWFjdGl2YXRlUm91dGVz''@;'; put 'put ''KGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldENvbnRleHQoaC5vdXRsZXQpO3YmJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNo''@;'; put 'put ''aWxkUm91dGVzKGwsYSxkKTtlbHNlIGYmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oYSxkKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihsLGEpe2wudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2gobC52YWx1ZS5z''@;'; put 'put ''bmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNv''@;'; put 'put ''bXBvbmVudD9kLmNoaWxkcmVuOmEsZj1seShsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtpZihkJiZkLm91dGxldCl7Y29uc3Qgdj1kLm91dGxldC5kZXRhY2goKSxNPWQuY2hpbGRyZW4ub25PdXRsZXRE''@;'; put 'put ''ZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGwudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjp2LHJvdXRlOmwsY29udGV4dHM6TX0pfX1kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCks''@;'; put 'put ''aD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1seShsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5v''@;'; put 'put ''bk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWx5KGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMu''@;'; put 'put ''Zm9yd2FyZEV2ZW50KG5ldyBYeGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBLeGUobC52YWx1ZS5zbmFwc2hvdCkpfWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihv''@;'; put 'put ''VyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7''@;'; put 'put ''Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBNPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0''@;'; put 'put ''ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksdi5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoTS5jb250ZXh0cyksdi5hdHRhY2hSZWY9TS5jb21wb25lbnRSZWYsdi5yb3V0ZT1NLnJvdXRlLnZhbHVlLHYub3V0bGV0JiZ2Lm91dGxldC5hdHRhY2goTS5jb21wb25lbnRSZWYsTS5yb3V0''@;'; put 'put ''ZS52YWx1ZSksb1coTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNle2NvbnN0IE09Sk0oaC5zbmFwc2hvdCk7di5hdHRhY2hSZWY9bnVsbCx2LnJvdXRlPWgsdi5pbmplY3Rvcj1NLHYub3V0bGV0JiZ2Lm91dGxldC5hY3RpdmF0''@;'; put 'put ''ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNsYXNzIEtsZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0''@;'; put 'put ''aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBaUntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuY29tcG9uZW50PWwsdGhpcy5yb3V0ZT1hfX1mdW5jdGlvbiBkRWUoYyxsLGEpe2NvbnN0IGQ9Yy5fcm9vdDtyZXR1cm4gUU0oZCxsP2wuX3Jvb3Q6bnVsbCxhLFtkLnZhbHVlXSl9ZnVuY3Rpb24gY3ko''@;'; put 'put ''YyxsKXtjb25zdCBhPVN5bWJvbCgpLGQ9bC5nZXQoYyxhKTtyZXR1cm4gZD09PWE/ImZ1bmN0aW9uIiE9dHlwZW9mIGN8fGZ1bmN0aW9uIGVvKGMpe3JldHVybiBudWxsIT09UG8oYyl9KGMpP2wuZ2V0KGMpOmM6ZH1mdW5jdGlvbiBRTShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVDaGVja3M6''@;'; put 'put ''W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWx5KGwpO3JldHVybiBjLmNoaWxkcmVuLmZvckVhY2godj0+eyhmdW5jdGlvbiBmRWUoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1jLnZhbHVlLHY9bD9sLnZh''@;'; put 'put ''bHVlOm51bGwsTT1hP2EuZ2V0Q29udGV4dChjLnZhbHVlLm91dGxldCk6bnVsbDtpZih2JiZmLnJvdXRlQ29uZmlnPT09di5yb3V0ZUNvbmZpZyl7Y29uc3QgRD1mdW5jdGlvbiBwRWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhKGMsbCk7c3dpdGNoKGEpe2Nhc2Ui''@;'; put 'put ''cGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIUo4KGMudXJsLGwudXJsKTtjYXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hSjgoYy51cmwsbC51cmwpfHwhaHAoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJh''@;'; put 'put ''bXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hc1coYyxsKXx8IWhwKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7ZGVmYXVsdDpyZXR1cm4hc1coYyxsKX19KHYsZixmLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7RD9oLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2go''@;'; put 'put ''bmV3IEtsZShkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRhPXYuX3Jlc29sdmVkRGF0YSksUU0oYyxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKSxEJiZNJiZNLm91dGxldCYmTS5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3RpdmF0ZUNoZWNrcy5w''@;'; put 'put ''dXNoKG5ldyBaUihNLm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYmZXgobCxNLGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgS2xlKGQpKSxRTShjLG51bGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpfSkodixmW3YudmFsdWUub3V0bGV0XSxhLGQuY29u''@;'; put 'put ''Y2F0KFt2LnZhbHVlXSksaCksZGVsZXRlIGZbdi52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3YsTV0pPT5leChNLGEuZ2V0Q29udGV4dCh2KSxoKSksaH1mdW5jdGlvbiBleChjLGwsYSl7Y29uc3QgZD1seShjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMo''@;'; put 'put ''ZCkuZm9yRWFjaCgoW2Ysdl0pPT57ZXgodixoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgWlIoaC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxl''@;'; put 'put ''dC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gdHgoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gcWxlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgUlJ8fCJFbXB0eUVycm9yIj09PWM/Lm5hbWV9Y29uc3QgV1I9U3ltYm9sKCJJTklUSUFMX1ZBTFVFIik7ZnVuY3Rp''@;'; put 'put ''b24gdXkoKXtyZXR1cm4gVjEoYz0+cTgoYy5tYXAobD0+bC5waXBlKFlmKDEpLHgyKFdSKSkpKS5waXBlKExyKGw9Pntmb3IoY29uc3QgYSBvZiBsKWlmKCEwIT09YSl7aWYoYT09PVdSKXJldHVybiBXUjtpZighMT09PWF8fGEgaW5zdGFuY2VvZiByeSlyZXR1cm4gYX1yZXR1cm4hMH0pLCRs''@;'; put 'put ''KGw9PmwhPT1XUiksWWYoMSkpKX1mdW5jdGlvbiBYbGUoYyl7cmV0dXJuIGZ1bmN0aW9uIGZuKC4uLmMpe3JldHVybiBJaShjKX0oR3UobD0+e2lmKGF5KGwpKXRocm93IFdsZSgwLGwpfSksTHIobD0+ITA9PT1sKSl9Y2xhc3MgdVd7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9''@;'; put 'put ''bHx8bnVsbH19Y2xhc3MgZFcgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiBkeShjKXtyZXR1cm4gek0obmV3IHVXKGMpKX1jbGFzcyBMRWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybFNlcmlhbGl6ZXI9bCx0aGlzLnVybFRy''@;'; put 'put ''ZWU9YX1saW5lcmFsaXplU2VnbWVudHMobCxhKXtsZXQgZD1bXSxoPWEucm9vdDtmb3IoOzspe2lmKGQ9ZC5jb25jYXQoaC5zZWdtZW50cyksMD09PWgubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZm8oZCk7aWYoaC5udW1iZXJPZkNoaWxkcmVuPjF8fCFoLmNoaWxkcmVuW0tvXSlyZXR1cm4g''@;'; put 'put ''ek0obmV3IFFuKDRlMywhMSkpO2g9aC5jaGlsZHJlbltLb119fWFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLGEsZCl7Y29uc3QgaD10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoYS5zdGFydHNXaXRoKCIvIikpdGhy''@;'; put 'put ''b3cgbmV3IGRXKGgpO3JldHVybiBofWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IHJ5KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJs''@;'; put 'put ''VHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBNPWYuc3Vic3Ry''@;'; put 'put ''aW5nKDEpO2RbaF09YVtNXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTtsZXQgdj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW00sRF0p''@;'; put 'put ''PT57dltNXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLEQsZCxoKX0pLG5ldyBLbChmLHYpfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRzV2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQp''@;'; put 'put ''KX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgUW4oNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3Bs''@;'; put 'put ''aWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBoVz17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIE9FZShjLGwsYSxkLGgpe2NvbnN0IGY9ZlcoYyxs''@;'; put 'put ''LGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gaUVlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1HNChjLnByb3ZpZGVycyxsLGBSb3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIERFZShjLGws''@;'; put 'put ''YSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9mbyhoLm1hcCh2PT57Y29uc3QgTT1jeSh2LGMpO3JldHVybiBvbShmdW5jdGlvbiBfRWUoYyl7cmV0dXJuIGMmJnR4KGMuY2FuTWF0Y2gpfShNKT9NLmNhbk1hdGNoKGwsYSk6cTAoYywoKT0+TShsLGEpKSl9''@;'; put 'put ''KSkucGlwZSh1eSgpLFhsZSgpKTpmbyghMCl9KGQsbCxhKS5waXBlKExyKHY9PiEwPT09dj9mOnsuLi5oV30pKSk6Zm8oZil9ZnVuY3Rpb24gZlcoYyxsLGEpe2lmKCIqKiI9PT1sLnBhdGgpcmV0dXJuIGZ1bmN0aW9uIFBFZShjKXtyZXR1cm57bWF0Y2hlZDohMCxwYXJhbWV0ZXJzOmMubGVu''@;'; put 'put ''Z3RoPjA/dmxlKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0oYSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxkcmVuKCl8fGEubGVu''@;'; put 'put ''Z3RoPjApP3suLi5oV306e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8Z3hlKShhLGMsbCk7aWYoIWgpcmV0dXJuey4uLmhXfTtjb25z''@;'; put 'put ''dCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW00sRF0pPT57ZltNXT1ELnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3RoPjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpmO3JldHVybnttYXRj''@;'; put 'put ''aGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBKbGUoYyxsLGEsZCl7cmV0dXJuIGEu''@;'; put 'put ''bGVuZ3RoPjAmJmZ1bmN0aW9uIE5FZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5ZUihjLGwsZCkmJmdwKGQpIT09S28pfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgS2wobCxIRWUoZCxuZXcgS2woYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1''@;'; put 'put ''bmN0aW9uIFZFZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5ZUihjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgS2woYy5zZWdtZW50cyxGRWUoYyxhLGQsYy5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3IEtsKGMuc2VnbWVudHMsYy5jaGls''@;'; put 'put ''ZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gRkVlKGMsbCxhLGQpe2NvbnN0IGg9e307Zm9yKGNvbnN0IGYgb2YgYSlpZihZUihjLGwsZikmJiFkW2dwKGYpXSl7Y29uc3Qgdj1uZXcgS2woW10se30pO2hbZ3AoZildPXZ9cmV0dXJuey4uLmQsLi4uaH19ZnVuY3Rpb24gSEVlKGMs''@;'; put 'put ''bCl7Y29uc3QgYT17fTthW0tvXT1sO2Zvcihjb25zdCBkIG9mIGMpaWYoIiI9PT1kLnBhdGgmJmdwKGQpIT09S28pe2NvbnN0IGg9bmV3IEtsKFtdLHt9KTthW2dwKGQpXT1ofXJldHVybiBhfWZ1bmN0aW9uIFlSKGMsbCxhKXtyZXR1cm4oIShjLmhhc0NoaWxkcmVuKCl8fGwubGVuZ3RoPjAp''@;'; put 'put ''fHwiZnVsbCIhPT1hLnBhdGhNYXRjaCkmJiIiPT09YS5wYXRofWNsYXNzIHpFZXt9Y2xhc3MgV0Vle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuaW5qZWN0b3I9bCx0aGlzLmNvbmZpZ0xvYWRlcj1hLHRoaXMucm9vdENvbXBvbmVudFR5cGU9ZCx0aGlzLmNvbmZpZz1oLHRoaXMu''@;'; put 'put ''dXJsVHJlZT1mLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT12LHRoaXMudXJsU2VyaWFsaXplcj1NLHRoaXMuYXBwbHlSZWRpcmVjdHM9bmV3IExFZSh0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy51cmxUcmVlKSx0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudD0wLHRoaXMuYWxsb3dS''@;'; put 'put ''ZWRpcmVjdHM9ITB9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgUW4oNDAwMixgJyR7bC5zZWdtZW50R3JvdXB9J2ApfXJlY29nbml6ZSgpe2NvbnN0IGw9SmxlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRoaXMubWF0Y2gobCku''@;'; put 'put ''cGlwZShMcihhPT57Y29uc3QgZD1uZXcgaVcoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LEtvLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSksaD1uZXcgR2YoZCxh''@;'; put 'put ''KSxmPW5ldyBCbGUoIiIsaCksdj1mdW5jdGlvbiBQeGUoYyxsLGE9bnVsbCxkPW51bGwpe3JldHVybiBrbGUoQWxlKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gdi5xdWVyeVBhcmFtcz10aGlzLnVybFRyZWUu''@;'; put 'put ''cXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2KSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QsbnVsbCkse3N0YXRlOmYsdHJlZTp2fX0pKX1tYXRjaChsKXtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuaW5qZWN0b3Is''@;'; put 'put ''dGhpcy5jb25maWcsbCxLbykucGlwZShYOChkPT57aWYoZCBpbnN0YW5jZW9mIGRXKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Rocm93IGQgaW5zdGFuY2VvZiB1Vz90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkpfWluaGVyaXRQYXJh''@;'; put 'put ''bXNBbmREYXRhKGwsYSl7Y29uc3QgZD1sLnZhbHVlLGg9clcoZCxhLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZC5wYXJhbXM9T2JqZWN0LmZyZWV6ZShoLnBhcmFtcyksZC5kYXRhPU9iamVjdC5mcmVlemUoaC5kYXRhKSxsLmNoaWxkcmVuLmZvckVhY2goZj0+dGhpcy5pbmhl''@;'; put 'put ''cml0UGFyYW1zQW5kRGF0YShmLGQpKX1wcm9jZXNzU2VnbWVudEdyb3VwKGwsYSxkLGgpe3JldHVybiAwPT09ZC5zZWdtZW50cy5sZW5ndGgmJmQuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihsLGEsZCk6dGhpcy5wcm9jZXNzU2VnbWVudChsLGEsZCxkLnNlZ21lbnRzLGgs''@;'; put 'put ''ITApLnBpcGUoTHIoZj0+ZiBpbnN0YW5jZW9mIEdmP1tmXTpbXSkpfXByb2Nlc3NDaGlsZHJlbihsLGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhkLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1mP2gudW5zaGlmdChmKTpoLnB1c2goZik7cmV0dXJuIFl1KGgpLnBp''@;'; put 'put ''cGUodHkoZj0+e2NvbnN0IHY9ZC5jaGlsZHJlbltmXSxNPWZ1bmN0aW9uIGxFZShjLGwpe2NvbnN0IGE9Yy5maWx0ZXIoZD0+Z3AoZCk9PT1sKTtyZXR1cm4gYS5wdXNoKC4uLmMuZmlsdGVyKGQ9PmdwKGQpIT09bCkpLGF9KGEsZik7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cChs''@;'; put 'put ''LE0sdixmKX0pLGZ1bmN0aW9uIGR4ZShjLGwpe3JldHVybiBWaShmdW5jdGlvbiB1eGUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsRD1sLFo9MDtmLnN1YnNjcmliZShOaSh2LHJlPT57Y29uc3QgY2U9WisrO0Q9TT9jKEQscmUsY2UpOihNPSEwLHJlKSxkJiZ2Lm5leHQoRCl9''@;'; put 'put ''LGgmJigoKT0+e00mJnYubmV4dChEKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLExSKG51bGwpLGZ1bmN0aW9uIGh4ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5w''@;'; put 'put ''aXBlKGM/JGwoKGgsZik9PmMoaCxmLGQpKTpjbixZWigxKSxhP0xSKGwpOmdsZSgoKT0+bmV3IFJSKSl9KCksTjAoZj0+e2lmKG51bGw9PT1mKXJldHVybiBkeShkKTtjb25zdCB2PVFsZShmKTtyZXR1cm4gZnVuY3Rpb24gWUVlKGMpe2Muc29ydCgobCxhKT0+bC52YWx1ZS5vdXRsZXQ9PT1L''@;'; put 'put ''bz8tMTphLnZhbHVlLm91dGxldD09PUtvPzE6bC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfSh2KSxmbyh2KX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdil7cmV0dXJuIFl1KGEpLnBpcGUodHkoTT0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RS''@;'; put 'put ''b3V0ZShNLl9pbmplY3Rvcj8/bCxhLE0sZCxoLGYsdikucGlwZShYOChEPT57aWYoRCBpbnN0YW5jZW9mIHVXKXJldHVybiBmbyhudWxsKTt0aHJvdyBEfSkpKSxhbShNPT4hIU0pLFg4KE09PntpZihxbGUoTSkpcmV0dXJuIGZ1bmN0aW9uIGpFZShjLGwsYSl7cmV0dXJuIDA9PT1sLmxlbmd0''@;'; put 'put ''aCYmIWMuY2hpbGRyZW5bYV19KGQsaCxmKT9mbyhuZXcgekVlKTpkeShkKTt0aHJvdyBNfSkpfXByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2LE0pe3JldHVybiBmdW5jdGlvbiBCRWUoYyxsLGEsZCl7cmV0dXJuISEoZ3AoYyk9PT1kfHxkIT09S28mJllSKGwsYSxjKSkm''@;'; put 'put ''JmZXKGwsYyxhKS5tYXRjaGVkfShkLGgsZix2KT92b2lkIDA9PT1kLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2KTp0aGlzLmFsbG93UmVkaXJlY3RzJiZNP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEs''@;'; put 'put ''ZCxmLHYpOmR5KGgpOmR5KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2KXtjb25zdHttYXRjaGVkOk0sY29uc3VtZWRTZWdtZW50czpELHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOloscmVtYWluaW5nU2VnbWVudHM6cmV9PWZXKGEsaCxmKTtp''@;'; put 'put ''ZighTSlyZXR1cm4gZHkoYSk7aC5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3QgY2U9dGhpcy5hcHBseVJlZGlyZWN0cy5h''@;'; put 'put ''cHBseVJlZGlyZWN0Q29tbWFuZHMoRCxoLnJlZGlyZWN0VG8sWik7cmV0dXJuIHRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsY2UpLnBpcGUoTjAoYmU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsYmUuY29uY2F0KHJlKSx2LCExKSkpfW1hdGNoU2VnbWVudEFn''@;'; put 'put ''YWluc3RSb3V0ZShsLGEsZCxoLGYpe2NvbnN0IHY9T0VlKGEsZCxoLGwpO3JldHVybiIqKiI9PT1kLnBhdGgmJihhLmNoaWxkcmVuPXt9KSx2LnBpcGUoVjEoTT0+TS5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcobD1kLl9pbmplY3Rvcj8/bCxkLGgpLnBpcGUoVjEoKHtyb3V0ZXM6RH0p''@;'; put 'put ''PT57Y29uc3QgWj1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7Y29uc3VtZWRTZWdtZW50czpyZSxyZW1haW5pbmdTZWdtZW50czpjZSxwYXJhbWV0ZXJzOmJlfT1NLEVlPW5ldyBpVyhyZSxiZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUu''@;'; put 'put ''ZnJhZ21lbnQsZnVuY3Rpb24gJEVlKGMpe3JldHVybiBjLmRhdGF8fHt9fShkKSxncChkKSxkLmNvbXBvbmVudD8/ZC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGQsZnVuY3Rpb24gS0VlKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fShkKSkse3NlZ21lbnRHcm91cDpCZSxzbGljZWRTZWdtZW50''@;'; put 'put ''czpxZX09SmxlKGEscmUsY2UsRCk7aWYoMD09PXFlLmxlbmd0aCYmQmUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4oWixELEJlKS5waXBlKExyKHB0PT5udWxsPT09cHQ/bnVsbDpuZXcgR2YoRWUscHQpKSk7aWYoMD09PUQubGVuZ3RoJiYwPT09cWUubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBmbyhuZXcgR2YoRWUsW10pKTtjb25zdCBydD1ncChkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoWixELEJlLHFlLHJ0P0tvOmYsITApLnBpcGUoTHIocHQ9Pm5ldyBHZihFZSxwdCBpbnN0YW5jZW9mIEdmP1twdF06W10pKSl9KSk6ZHkoYSkpKX1nZXRDaGlsZENv''@;'; put 'put ''bmZpZyhsLGEsZCl7cmV0dXJuIGEuY2hpbGRyZW4/Zm8oe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/Zm8oe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5j''@;'; put 'put ''dGlvbiBrRWUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9mbyghMCk6Zm8oaC5tYXAodj0+e2NvbnN0IE09Y3kodixjKTtyZXR1cm4gb20oZnVuY3Rpb24gbUVlKGMpe3JldHVybiBjJiZ0eChjLmNhbkxvYWQpfShNKT9NLmNhbkxv''@;'; put 'put ''YWQobCxhKTpxMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKHV5KCksWGxlKCkpfShsLGEsZCkucGlwZShOMChoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoR3UoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVj''@;'; put 'put ''dG9yfSkpOmZ1bmN0aW9uIFJFZShjKXtyZXR1cm4gek0oWWxlKCExLHBoLkd1YXJkUmVqZWN0ZWQpKX0oKSkpOmZvKHtyb3V0ZXM6W10saW5qZWN0b3I6bH0pfX1mdW5jdGlvbiBHRWUoYyl7Y29uc3QgbD1jLnZhbHVlLnJvdXRlQ29uZmlnO3JldHVybiBsJiYiIj09PWwucGF0aH1mdW5jdGlv''@;'; put 'put ''biBRbGUoYyl7Y29uc3QgbD1bXSxhPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYyl7aWYoIUdFZShkKSl7bC5wdXNoKGQpO2NvbnRpbnVlfWNvbnN0IGg9bC5maW5kKGY9PmQudmFsdWUucm91dGVDb25maWc9PT1mLnZhbHVlLnJvdXRlQ29uZmlnKTt2b2lkIDAhPT1oPyhoLmNoaWxkcmVuLnB1''@;'; put 'put ''c2goLi4uZC5jaGlsZHJlbiksYS5hZGQoaCkpOmwucHVzaChkKX1mb3IoY29uc3QgZCBvZiBhKXtjb25zdCBoPVFsZShkLmNoaWxkcmVuKTtsLnB1c2gobmV3IEdmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIGVjZShjKXtjb25zdCBsPWMuY2hp''@;'; put 'put ''bGRyZW4ubWFwKGE9PmVjZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxdfWZ1bmN0aW9uIHBXKGMpe3JldHVybiBWMShsPT57Y29uc3QgYT1jKGwpO3JldHVybiBhP1l1KGEpLnBpcGUoTHIoKCk9PmwpKTpmbyhsKX0pfWxldCB0Y2U9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBk''@;'; put 'put ''LGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PUtvKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtaTV19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkodFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0Y2V7Y29u''@;'; put 'put ''c3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihJ''@;'; put 'put ''Q2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBoeT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxmeT1uZXcgU3QoIiIp''@;'; put 'put ''O2xldCBnVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9ZmkoS2llKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9uZW50TG9hZGVy''@;'; put 'put ''cy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBmbyhhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0IGQ9b20oYS5s''@;'; put 'put ''b2FkQ29tcG9uZW50KCkpLnBpcGUoTHIobmNlKSxHdShmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLFVNKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBXWihkLCgp''@;'; put 'put ''PT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcyly''@;'; put 'put ''ZXR1cm4gZm8oe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIG5UZShjLGwsYSxkKXtyZXR1cm4gb20oYy5sb2FkQ2hp''@;'; put 'put ''bGRyZW4oKSkucGlwZShMcihuY2UpLE4wKGg9PmggaW5zdGFuY2VvZiBtY3x8QXJyYXkuaXNBcnJheShoKT9mbyhoKTpZdShsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLExyKGg9PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1oLCEwKTooZj1oLmNy''@;'; put 'put ''ZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGZ5LFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKGNXKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlzLmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZShVTSgoKT0+e3RoaXMuY2hpbGRyZW5M''@;'; put 'put ''b2FkZXJzLmRlbGV0ZShkKX0pKSx2PW5ldyBXWihmLCgpPT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChkLHYpLHZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbmNlKGMpe3JldHVybiBmdW5jdGlvbiByVGUoYyl7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmImRlZmF1bHQiaW4gY30oYyk/Yy5kZWZhdWx0''@;'; put 'put ''OmN9bGV0IG1XPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoaVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCks''@;'; put 'put ''aVRlPSgoKT0+e2NsYXNzIGN7c2hvdWxkUHJvY2Vzc1VybChhKXtyZXR1cm4hMH1leHRyYWN0KGEpe3JldHVybiBhfW1lcmdlKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcmNlPW5ldyBTdCgiIiksaWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gYVRlKGMsbCxhKXtjb25zdCBkPWMuZ2V0KGljZSksaD1jLmdldCh2cyk7cmV0dXJuIGMuZ2V0KFdh''@;'; put 'put ''KS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCFoLnN0YXJ0Vmlld1RyYW5zaXRpb258fGQuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiBkLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShaPT5zZXRUaW1lb3V0KFopKTtsZXQgZjtjb25zdCB2PW5ldyBQcm9taXNlKFo9Pntm''@;'; put 'put ''PVp9KSxNPWguc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5jdGlvbiBvVGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntfYihsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6RH09ZDtyZXR1cm4gRCYmcTAoYywoKT0+RCh7dHJhbnNpdGlv''@;'; put 'put ''bjpNLGZyb206bCx0bzphfSkpLHZ9KX1sZXQgR1I9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlv''@;'; put 'put ''bj1udWxsLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGwsdGhpcy5ldmVudHM9bmV3IFduLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgV24sdGhpcy5jb25maWdMb2FkZXI9ZmkoZ1cpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdGhpcy51cmxTZXJp''@;'; put 'put ''YWxpemVyPWZpKGl5KSx0aGlzLnJvb3RDb250ZXh0cz1maShxTSksdGhpcy5sb2NhdGlvbj1maShmaCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1maShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9ZmkodGNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlv''@;'; put 'put ''bmFsOiEwfSl8fHt9LHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKG1XKSx0aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPWZpKHJjZSx7b3B0''@;'; put 'put ''aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5mbyh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBHeGUoaCkp''@;'; put 'put ''LHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgWXhlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMubmF2aWdhdGlvbklk''@;'; put 'put ''O3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IGVpKHtpZDowLGN1cnJlbnRVcmxUcmVlOmQsY3VycmVudFJhd1VybDpkLGV4dHJhY3Rl''@;'; put 'put ''ZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSx1cmxBZnRlclJlZGlyZWN0czp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSxyYXdVcmw6ZCxleHRyYXM6e30scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHByb21pc2U6UHJvbWlzZS5yZXNvbHZlKCEw''@;'; put 'put ''KSxzb3VyY2U6S00scmVzdG9yZWRTdGF0ZTpudWxsLGN1cnJlbnRTbmFwc2hvdDpoLnNuYXBzaG90LHRhcmdldFNuYXBzaG90Om51bGwsY3VycmVudFJvdXRlclN0YXRlOmgsdGFyZ2V0Um91dGVyU3RhdGU6bnVsbCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOltdLGNhbkRlYWN0aXZhdGVD''@;'; put 'put ''aGVja3M6W119LGd1YXJkc1Jlc3VsdDpudWxsfSksdGhpcy50cmFuc2l0aW9ucy5waXBlKCRsKGY9PjAhPT1mLmlkKSxMcihmPT4oey4uLmYsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGYucmF3VXJsKX0pKSxWMShmPT57bGV0IHY9ITEsTT0hMTtyZXR1''@;'; put 'put ''cm4gZm8oZikucGlwZShWMShEPT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+Zi5pZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLE0yO3RoaXMuY3VycmVudFRyYW5zaXRpb249Zix0aGlzLmN1cnJlbnROYXZp''@;'; put 'put ''Z2F0aW9uPXtpZDpELmlkLGluaXRpYWxVcmw6RC5yYXdVcmwsZXh0cmFjdGVkVXJsOkQuZXh0cmFjdGVkVXJsLHRyaWdnZXI6RC5zb3VyY2UsZXh0cmFzOkQuZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vz''@;'; put 'put ''c2Z1bE5hdmlnYXRpb24scHJldmlvdXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9O2NvbnN0IFo9IWEubmF2aWdhdGVkfHx0aGlzLmlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl8fHRoaXMuaXNVcGRhdGVkQnJvd3NlclVybCgpO2lmKCFaJiYicmVsb2FkIiE9PShELmV4dHJhcy5vblNhbWVVcmxO''@;'; put 'put ''YXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQucmF3VXJsKSxjZSxqUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24pKSxELnJlc29sdmUo''@;'; put 'put ''bnVsbCksTTJ9aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5yYXdVcmwpKXJldHVybiBmbyhEKS5waXBlKFYxKGNlPT57Y29uc3QgYmU9dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKTtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgQlIoY2UuaWQs''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShjZS5leHRyYWN0ZWRVcmwpLGNlLnNvdXJjZSxjZS5yZXN0b3JlZFN0YXRlKSksYmUhPT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpP00yOlByb21pc2UucmVzb2x2ZShjZSl9KSxmdW5jdGlvbiBxRWUoYyxsLGEsZCxoLGYpe3JldHVy''@;'; put 'put ''biBOMCh2PT5mdW5jdGlvbiBVRWUoYyxsLGEsZCxoLGYsdj0iZW1wdHlPbmx5Iil7cmV0dXJuIG5ldyBXRWUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKExyKCh7c3RhdGU6TSx0cmVlOkR9KT0+KHsuLi52LHRhcmdldFNuYXBz''@;'; put 'put ''aG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6RH0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxHdShjZT0+''@;'; put 'put ''e2YudGFyZ2V0U25hcHNob3Q9Y2UudGFyZ2V0U25hcHNob3QsZi51cmxBZnRlclJlZGlyZWN0cz1jZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOmNlLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBi''@;'; put 'put ''ZT1uZXcgUGxlKGNlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoY2UuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGNlLnVybEFmdGVyUmVkaXJlY3RzKSxjZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChiZSl9KSk7aWYoWiYmdGhp''@;'; put 'put ''cy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6Y2UsZXh0cmFjdGVkVXJsOmJlLHNvdXJjZTpFZSxyZXN0b3JlZFN0YXRlOkJlLGV4dHJhczpxZX09RCxydD1uZXcgQlIoY2UsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZShiZSksRWUsQmUpO3RoaXMuZXZlbnRzLm5leHQocnQpO2NvbnN0IHB0PVZsZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFNuYXBzaG90OnB0LHVybEFmdGVyUmVkaXJlY3RzOmJlLGV4dHJhczp7''@;'; put 'put ''Li4ucWUsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmZpbmFsVXJsPWJlLGZvKGYpfXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQu''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSxjZSxqUi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksRC5yZXNvbHZlKG51bGwpLE0yfX0pLEd1KEQ9Pntjb25zdCBaPW5ldyB6eGUoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIu''@;'; put 'put ''c2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpLEQudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoWil9KSxMcihEPT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELGd1YXJkczpkRWUoRC50YXJnZXRTbmFwc2hvdCxELmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RD''@;'; put 'put ''b250ZXh0cyl9LGYpKSxmdW5jdGlvbiB3RWUoYyxsKXtyZXR1cm4gTjAoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12Lmxlbmd0aCYmMD09''@;'; put 'put ''PWYubGVuZ3RoP2ZvKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIENFZShjLGwsYSxkKXtyZXR1cm4gWXUoYykucGlwZShOMChoPT5mdW5jdGlvbiBBRWUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7''@;'; put 'put ''cmV0dXJuIGYmJjAhPT1mLmxlbmd0aD9mbyhmLm1hcChNPT57Y29uc3QgRD1KTShsKT8/aCxaPWN5KE0sRCk7cmV0dXJuIG9tKGZ1bmN0aW9uIHlFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5EZWFjdGl2YXRlKX0oWik/Wi5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOnEwKEQsKCk9PlooYyxsLGEs''@;'; put 'put ''ZCkpKS5waXBlKGFtKCkpfSkpLnBpcGUodXkoKSk6Zm8oITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksYW0oaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoTjAoTT0+TSYmZnVuY3Rpb24gZ0VlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0pP2Z1bmN0aW9uIFNF''@;'; put 'put ''ZShjLGwsYSxkKXtyZXR1cm4gWXUobCkucGlwZSh0eShoPT5VWihmdW5jdGlvbiB4RWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3ICR4ZShjKSksZm8oITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBNRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IHF4ZShj''@;'; put 'put ''KSksZm8oITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIFRFZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gaEVlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2''@;'; put 'put ''YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5wbGUoKCk9PmZvKHYuZ3VhcmRzLm1hcChEPT57Y29uc3QgWj1KTSh2Lm5vZGUpPz9hLHJlPWN5KEQsWik7cmV0dXJuIG9tKGZ1''@;'; put 'put ''bmN0aW9uIGJFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5BY3RpdmF0ZUNoaWxkKX0ocmUpP3JlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpxMChaLCgpPT5yZShkLGMpKSkucGlwZShhbSgpKX0pKS5waXBlKHV5KCkpKSk7cmV0dXJuIGZvKGYpLnBpcGUodXkoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0''@;'; put 'put ''aW9uIEVFZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBmbyghMCk7Y29uc3QgaD1kLm1hcChmPT5wbGUoKCk9Pntjb25zdCB2PUpNKGwpPz9hLE09Y3koZix2KTtyZXR1cm4gb20o''@;'; put 'put ''ZnVuY3Rpb24gdkVlKGMpe3JldHVybiBjJiZ0eChjLmNhbkFjdGl2YXRlKX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOnEwKHYsKCk9Pk0obCxjKSkpLnBpcGUoYW0oKSl9KSk7cmV0dXJuIGZvKGgpLnBpcGUodXkoKSl9KGMsaC5yb3V0ZSxhKSkpLGFtKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs''@;'; put 'put ''KTpmbyhNKSksTHIoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsRD0+dGhpcy5ldmVudHMubmV4dChEKSksR3UoRD0+e2lmKGYuZ3VhcmRzUmVzdWx0PUQuZ3VhcmRzUmVzdWx0LGF5KEQuZ3VhcmRzUmVzdWx0KSl0aHJvdyBXbGUoMCxE''@;'; put 'put ''Lmd1YXJkc1Jlc3VsdCk7Y29uc3QgWj1uZXcgVXhlKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSxELnRhcmdldFNuYXBzaG90LCEhRC5ndWFyZHNSZXN1bHQp''@;'; put 'put ''O3RoaXMuZXZlbnRzLm5leHQoWil9KSwkbChEPT4hIUQuZ3VhcmRzUmVzdWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihELCIiLHBoLkd1YXJkUmVqZWN0ZWQpLCExKSkscFcoRD0+e2lmKEQuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aClyZXR1cm4gZm8oRCku''@;'; put 'put ''cGlwZShHdShaPT57Y29uc3QgcmU9bmV3IFp4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChy''@;'; put 'put ''ZSl9KSxWMShaPT57bGV0IHJlPSExO3JldHVybiBmbyhaKS5waXBlKGZ1bmN0aW9uIFhFZShjLGwpe3JldHVybiBOMChhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gZm8oYSk7Y29uc3QgZj1uZXcg''@;'; put 'put ''U2V0KGgubWFwKEQ9PkQucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0IEQgb2YgZilpZighdi5oYXMoRCkpZm9yKGNvbnN0IFogb2YgZWNlKEQpKXYuYWRkKFopO2xldCBNPTA7cmV0dXJuIFl1KHYpLnBpcGUodHkoRD0+Zi5oYXMoRCk/ZnVuY3Rpb24gSkVlKGMsbCxhLGQpe2NvbnN0IGg9''@;'; put 'put ''Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhemxlKGgpJiYoZltaTV09aC50aXRsZSksZnVuY3Rpb24gUUVlKGMsbCxhLGQpe2NvbnN0IGg9R1ooYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBmbyh7fSk7Y29uc3QgZj17fTtyZXR1cm4gWXUo''@;'; put 'put ''aCkucGlwZShOMCh2PT5mdW5jdGlvbiBlVGUoYyxsLGEsZCl7Y29uc3QgaD1KTShsKT8/ZCxmPWN5KGMsaCk7cmV0dXJuIG9tKGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpxMChoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZShhbSgpLEd1KE09PntmW3ZdPU19KSkpLFlaKDEpLGZ1''@;'; put 'put ''bmN0aW9uIGZ4ZShjKXtyZXR1cm4gTHIoKCk9PmMpfShmKSxYOCh2PT5xbGUodik/TTI6ek0odikpKX0oZixjLGwsZCkucGlwZShMcih2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPXJXKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxudWxsKSkpfShELGQsYyxsKTooRC5kYXRhPXJXKEQsRC5w''@;'; put 'put ''YXJlbnQsYykucmVzb2x2ZSxmbyh2b2lkIDApKSksR3UoKCk9Pk0rKyksWVooMSksTjAoRD0+TT09PXYuc2l6ZT9mbyhhKTpNMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLEd1KHtuZXh0OigpPT5yZT0hMCxjb21wbGV0ZToo''@;'; put 'put ''KT0+e3JlfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKFosIiIscGguTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSxHdShaPT57Y29uc3QgcmU9bmV3IFd4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXpl''@;'; put 'put ''ci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChyZSl9KSl9KSxwVyhEPT57Y29uc3QgWj1yZT0+e2NvbnN0IGNlPVtdO3JlLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhcmUucm91dGVDb25maWcuX2xvYWRlZENv''@;'; put 'put ''bXBvbmVudCYmY2UucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29tcG9uZW50KHJlLnJvdXRlQ29uZmlnKS5waXBlKEd1KGJlPT57cmUuY29tcG9uZW50PWJlfSksTHIoKCk9Pnt9KSkpO2Zvcihjb25zdCBiZSBvZiByZS5jaGlsZHJlbiljZS5wdXNoKC4uLlooYmUpKTtyZXR1cm4gY2V9''@;'; put 'put ''O3JldHVybiBxOChaKEQudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUoTFIobnVsbCksWWYoMSkpfSkscFcoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLFYxKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OkQsdGFyZ2V0U25hcHNob3Q6Wn09ZixyZT10aGlzLmNyZWF0ZVZpZXdU''@;'; put 'put ''cmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEQucm9vdCxaLnJvb3QpO3JldHVybiByZT9ZdShyZSkucGlwZShMcigoKT0+ZikpOmZvKGYpfSksTHIoRD0+e2NvbnN0IFo9ZnVuY3Rpb24gZUVlKGMsbCxhKXtjb25zdCBkPVhNKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAw''@;'; put 'put ''KTtyZXR1cm4gbmV3IE5sZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSxELnRhcmdldFNuYXBzaG90LEQuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFJvdXRlclN0YXRlOlp9LHRoaXMuY3VycmVudE5hdmlnYXRpb24u''@;'; put 'put ''dGFyZ2V0Um91dGVyU3RhdGU9WixmfSksR3UoKCk9Pnt0aGlzLmV2ZW50cy5uZXh0KG5ldyBRWil9KSwoKGMsbCxhLGQpPT5McihoPT4obmV3IHVFZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShjKSxoKSkpKHRoaXMucm9vdENvbnRl''@;'; put 'put ''eHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LEQ9PnRoaXMuZXZlbnRzLm5leHQoRCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxZZigxKSxHdSh7bmV4dDpEPT57dj0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZpZ2F0aW9uLHRoaXMuZXZlbnRzLm5l''@;'; put 'put ''eHQobmV3IHBwKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUoRC50YXJnZXRSb3V0ZXJTdGF0ZS5z''@;'; put 'put ''bmFwc2hvdCksRC5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9Pnt2PSEwfX0pLFYwKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKEd1KEQ9Pnt0aHJvdyBEfSkpKSxVTSgoKT0+eyF2JiYhTSYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2Vk''@;'; put 'put ''ZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkPT09Zi5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSksWDgoRD0+e2lmKE09ITAsR2xlKEQpKXRoaXMuZXZlbnRzLm5leHQobmV3IG95KGYuaWQs''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRC5tZXNzYWdlLEQuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIHJFZShjKXtyZXR1cm4gR2xlKGMpJiZheShjLnVybCl9KEQpP3RoaXMuZXZlbnRzLm5leHQobmV3IGVXKEQudXJsKSk6Zi5yZXNvbHZlKCEx''@;'; put 'put ''KTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IHpSKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRCxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKEQpKX1jYXRjaChaKXt0aGlzLm9wdGlvbnMu''@;'; put 'put ''cmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9mLnJlc29sdmUoITEpOmYucmVqZWN0KFopfX1yZXR1cm4gTTJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IG95KGEuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhLmV4dHJh''@;'; put 'put ''Y3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJs''@;'; put 'put ''VHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtyZXR1cm4gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCghMCkpKS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8u''@;'; put 'put ''ZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHNUZShjKXtyZXR1cm4gYyE9PUtNfWxldCBsVGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maSh1VGUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBjVGV7c2hvdWxkRGV0YWNoKGwpe3JldHVybiExfXN0b3JlKGwsYSl7fXNob3VsZEF0dGFjaChsKXtyZXR1cm4hMX1yZXRyaWV2ZShsKXty''@;'; put 'put ''ZXR1cm4gbnVsbH1zaG91bGRSZXVzZVJvdXRlKGwsYSl7cmV0dXJuIGwucm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnfX1sZXQgdVRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBjVGV7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4o''@;'; put 'put ''YXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYWNlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoZFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksZFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhY2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1''@;'; put 'put ''bWVudHMpLHRoaXMubG9jYXRpb249ZmkoZmgpLHRoaXMudXJsU2VyaWFsaXplcj1maShpeSksdGhpcy5vcHRpb25zPWZpKGh5LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRp''@;'; put 'put ''b258fCJyZXBsYWNlIix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9ZmkobVcpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IHJ5LHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJl''@;'; put 'put ''bnRVcmxUcmVlLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLnJvdXRlclN0YXRlPVZsZShudWxsKSx0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpfWdldEN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuY3VycmVu''@;'; put 'put ''dFVybFRyZWV9Z2V0UmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnJhd1VybFRyZWV9cmVzdG9yZWRTdGF0ZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCl9Z2V0IGJyb3dzZXJQYWdlSWQoKXtyZXR1cm4iY29tcHV0ZWQiIT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0''@;'; put 'put ''aW9uP3RoaXMuY3VycmVudFBhZ2VJZDp0aGlzLnJlc3RvcmVkU3RhdGUoKT8uXHUwMjc1cm91dGVyUGFnZUlkPz90aGlzLmN1cnJlbnRQYWdlSWR9Z2V0Um91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5yb3V0ZXJTdGF0ZX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57cmF3VXJsVHJlZTp0''@;'; put 'put ''aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKGEpe3JldHVybiB0aGlzLmxvY2F0aW9uLnN1YnNjcmliZShkPT57InBv''@;'; put 'put ''cHN0YXRlIj09PWQudHlwZSYmYShkLnVybCxkLnN0YXRlKX0pfWhhbmRsZVJvdXRlckV2ZW50KGEsZCl7aWYoYSBpbnN0YW5jZW9mIEJSKXRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7ZWxzZSBpZihhIGluc3RhbmNlb2Ygc3kpdGhpcy5yYXdVcmxUcmVlPWQu''@;'; put 'put ''aW5pdGlhbFVybDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBQbGUpe2lmKCJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYhZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBoPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVy''@;'; put 'put ''bCk7dGhpcy5zZXRCcm93c2VyVXJsKGgsZCl9fWVsc2UgYSBpbnN0YW5jZW9mIFFaPyh0aGlzLmN1cnJlbnRVcmxUcmVlPWQuZmluYWxVcmwsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVybCksdGhpcy5yb3V0ZXJT''@;'; put 'put ''dGF0ZT1kLnRhcmdldFJvdXRlclN0YXRlLCJkZWZlcnJlZCI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYoZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5yYXdVcmxUcmVlLGQpKSk6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguR3Vh''@;'; put 'put ''cmRSZWplY3RlZHx8YS5jb2RlPT09cGguTm9EYXRhRnJvbVJlc29sdmVyKT90aGlzLnJlc3RvcmVIaXN0b3J5KGQpOmEgaW5zdGFuY2VvZiB6Uj90aGlzLnJlc3RvcmVIaXN0b3J5KGQsITApOmEgaW5zdGFuY2VvZiBwcCYmKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD1hLmlkLHRoaXMuY3VycmVu''@;'; put 'put ''dFBhZ2VJZD10aGlzLmJyb3dzZXJQYWdlSWQpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3Qgdj17Li4uZC5l''@;'; put 'put ''eHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQpfTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLHYpfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUo''@;'; put 'put ''ZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQrMSl9O3RoaXMubG9jYXRpb24uZ28oaCwiIixmKX19cmVzdG9yZUhpc3RvcnkoYSxkPSExKXtpZigiY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uKXtjb25zdCBmPXRoaXMuY3VycmVudFBhZ2VJZC10aGlzLmJyb3dz''@;'; put 'put ''ZXJQYWdlSWQ7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28oZik6dGhpcy5jdXJyZW50VXJsVHJlZT09PWEuZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVk''@;'; put 'put ''TmF2aWdhdGlvblJlc29sdXRpb24mJihkJiZ0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRTdGF0ZShhKXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVybFRyZWU9dGhpcy5z''@;'; put 'put ''dGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEuZmluYWxVcmw/P3RoaXMucmF3VXJsVHJlZSl9cmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl7dGhpcy5sb2NhdGlvbi5y''@;'; put 'put ''ZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLnJhd1VybFRyZWUpLCIiLHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCx0aGlzLmN1cnJlbnRQYWdlSWQpKX1nZW5lcmF0ZU5nUm91dGVyU3RhdGUoYSxkKXtyZXR1cm4i''@;'; put 'put ''Y29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3tuYXZpZ2F0aW9uSWQ6YSxcdTAyNzVyb3V0ZXJQYWdlSWQ6ZH06e25hdmlnYXRpb25JZDphfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwo''@;'; put 'put ''YT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgbng9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0iQ09NUExFVEUiLGNb''@;'; put 'put ''Yy5GQUlMRUQ9MV09IkZBSUxFRCIsY1tjLlJFRElSRUNUSU5HPTJdPSJSRURJUkVDVElORyIsY30obnh8fHt9KTtmdW5jdGlvbiBvY2UoYyxsKXtjLmV2ZW50cy5waXBlKCRsKGE9PmEgaW5zdGFuY2VvZiBwcHx8YSBpbnN0YW5jZW9mIG95fHxhIGluc3RhbmNlb2YgelJ8fGEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBzeSksTHIoYT0+YSBpbnN0YW5jZW9mIHBwfHxhIGluc3RhbmNlb2Ygc3k/bnguQ09NUExFVEU6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguUmVkaXJlY3R8fGEuY29kZT09PXBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP254LlJFRElSRUNUSU5HOm54LkZBSUxFRCksJGwo''@;'; put 'put ''YT0+YSE9PW54LlJFRElSRUNUSU5HKSxZZigxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9ZnVuY3Rpb24gaFRlKGMpe3Rocm93IGN9Y29uc3QgZlRlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHBU''@;'; put 'put ''ZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBMcz0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRDdXJyZW50VXJsVHJl''@;'; put 'put ''ZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKX1nZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUoKX1jb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3RoaXMuZGlzcG9zZWQ9ITEsdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEsdGhpcy5jb25zb2xlPWZpKFZpZSksdGhpcy5zdGF0ZU1hbmFnZXI9ZmkoYWNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKSx0aGlzLnVybFVw''@;'; put 'put ''ZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1maShHUiksdGhpcy51cmxTZXJpYWxpemVyPWZpKGl5KSx0aGlzLmxvY2F0aW9uPWZpKGZoKSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9Zmko''@;'; put 'put ''bVcpLHRoaXMuX2V2ZW50cz1uZXcgV24sdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8aFRlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWZpKGxUZSksdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPXRoaXMub3B0aW9ucy5vblNh''@;'; put 'put ''bWVVcmxOYXZpZ2F0aW9ufHwiaWdub3JlIix0aGlzLmNvbmZpZz1maShmeSx7b3B0aW9uYWw6ITB9KT8uZmxhdCgpPz9bXSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFmaShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5p''@;'; put 'put ''c05nWm9uZUVuYWJsZWQ9ZmkoV2EpaW5zdGFuY2VvZiBXYSYmV2EuaXNJbkFuZ3VsYXJab25lKCksdGhpcy5yZXNldENvbmZpZyh0aGlzLmNvbmZpZyksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuc2V0dXBOYXZpZ2F0aW9ucyh0aGlzLHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb3V0''@;'; put 'put ''ZXJTdGF0ZSkuc3Vic2NyaWJlKHtlcnJvcjphPT57dGhpcy5jb25zb2xlLndhcm4oYSl9fSksdGhpcy5zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKX1zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCBhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJz''@;'; put 'put ''Y3JpYmUoZD0+e3RyeXtjb25zdCBoPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLGY9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb247aWYobnVsbCE9PWgmJm51bGwhPT1mKWlmKHRoaXMuc3RhdGVNYW5hZ2VyLmhhbmRsZVJv''@;'; put 'put ''dXRlckV2ZW50KGQsZiksZCBpbnN0YW5jZW9mIG95JiZkLmNvZGUhPT1waC5SZWRpcmVjdCYmZC5jb2RlIT09cGguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbil0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBwcCl0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5z''@;'; put 'put ''dGFuY2VvZiBlVyl7Y29uc3Qgdj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC51cmwsaC5jdXJyZW50UmF3VXJsKSxNPXtpbmZvOmguZXh0cmFzLmluZm8sc2tpcExvY2F0aW9uQ2hhbmdlOmguZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOiJlYWdlciI9PT10''@;'; put 'put ''aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxzVGUoaC5zb3VyY2UpfTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbih2LEtNLG51bGwsTSx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6aC5wcm9taXNlfSl9KGZ1bmN0aW9uIG1UZShjKXtyZXR1cm4hKGMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBRWnx8YyBpbnN0YW5jZW9mIGVXKX0pKGQpJiZ0aGlzLl9ldmVudHMubmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJlc2V0Um9vdENvbXBv''@;'; put 'put ''bmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMubmF2aWdhdGlvblRy''@;'; put 'put ''YW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLEtNLHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVkU3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl7dGhpcy5ub25S''@;'; put 'put ''b3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN0YXRlTWFuYWdlci5yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKChhLGQpPT57c2V0VGltZW91dCgoKT0+e3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLCJwb3BzdGF0''@;'; put 'put ''ZSIsZCl9LDApfSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQsaCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sdj1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IEQ9ey4uLmh9O2RlbGV0ZSBELm5hdmlnYXRpb25JZCxkZWxldGUgRC5cdTAyNzVyb3V0ZXJQYWdlSWQs''@;'; put 'put ''MCE9PU9iamVjdC5rZXlzKEQpLmxlbmd0aCYmKGYuc3RhdGU9RCl9Y29uc3QgTT10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sZCx2LGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5h''@;'; put 'put ''dmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWco''@;'; put 'put ''YSl7dGhpcy5jb25maWc9YS5tYXAoY1cpLHRoaXMubmF2aWdhdGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5kaXNwb3NlKCl9ZGlzcG9zZSgpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24m''@;'; put 'put ''Jih0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPXZvaWQgMCksdGhpcy5kaXNwb3NlZD0hMCx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmli''@;'; put 'put ''ZSgpfWNyZWF0ZVVybFRyZWUoYSxkPXt9KXtjb25zdHtyZWxhdGl2ZVRvOmgscXVlcnlQYXJhbXM6ZixmcmFnbWVudDp2LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6TSxwcmVzZXJ2ZUZyYWdtZW50OkR9PWQsWj1EP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6djtsZXQgY2UscmU9bnVsbDtz''@;'; put 'put ''d2l0Y2goTSl7Y2FzZSJtZXJnZSI6cmU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6cmU9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OnJlPWZ8fG51bGx9bnVsbCE9PXJlJiYocmU9dGhp''@;'; put 'put ''cy5yZW1vdmVFbXB0eVByb3BzKHJlKSk7dHJ5e2NlPUFsZShoP2guc25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5cGVvZiBhWzBdfHwhYVswXS5zdGFydHNXaXRoKCIvIikpJiYoYT1bXSksY2U9dGhpcy5jdXJyZW50VXJsVHJlZS5y''@;'; put 'put ''b290fXJldHVybiBrbGUoY2UsYSxyZSxaPz9udWxsKX1uYXZpZ2F0ZUJ5VXJsKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgaD1heShhKT9hOnRoaXMucGFyc2VVcmwoYSksZj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoaCx0aGlzLnJhd1VybFRyZWUpO3JldHVy''@;'; put 'put ''biB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLEtNLG51bGwsZCl9bmF2aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gZ1RlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IFFuKDQwMDgsITEpfShh''@;'; put 'put ''KSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEsZCksZCl9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpfXBhcnNlVXJsKGEpe3RyeXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoe3JldHVy''@;'; put 'put ''biB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uZlRlfTohMT09PWQ/ey4uLnBUZX06ZCxheShhKSlyZXR1cm4geWxlKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBmPXRoaXMucGFyc2VVcmwoYSk7cmV0dXJu''@;'; put 'put ''IHlsZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGYsaCl9cmVtb3ZlRW1wdHlQcm9wcyhhKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKChkLFtoLGZdKT0+KG51bGwhPWYmJihkW2hdPWYpLGQpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24oYSxkLGgsZix2KXtpZih0aGlzLmRpc3Bvc2Vk''@;'; put 'put ''KXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBNLEQsWjt2PyhNPXYucmVzb2x2ZSxEPXYucmVqZWN0LFo9di5wcm9taXNlKTpaPW5ldyBQcm9taXNlKChjZSxiZSk9PntNPWNlLEQ9YmV9KTtjb25zdCByZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gb2NlKHRoaXMsKCk9''@;'; put 'put ''PntxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHJlKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOmQscmVzdG9yZWRTdGF0ZTpoLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUs''@;'; put 'put ''Y3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDphLGV4dHJhczpmLHJlc29sdmU6TSxyZWplY3Q6RCxwcm9taXNlOlosY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9KSxaLmNh''@;'; put 'put ''dGNoKGNlPT5Qcm9taXNlLnJlamVjdChjZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpLGMxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRpb25TdHJhdGVneT1NLHRoaXMuaHJlZj1udWxsLHRo''@;'; put 'put ''aXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgV24sdGhpcy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBEPXYubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNB''@;'; put 'put ''bmNob3JFbGVtZW50PSJhIj09PUR8fCJhcmVhIj09PUQsdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKFo9PntaIGluc3RhbmNlb2YgcHAmJnRoaXMudXBkYXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgi''@;'; put 'put ''MCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhp''@;'; put 'put ''cy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRo''@;'; put 'put ''aXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZix2KXtjb25zdCBNPXRoaXMudXJsVHJlZTtyZXR1cm4hIShudWxsPT09TXx8dGhpcy5pc0FuY2hvckVsZW1lbnQmJigwIT09YXx8ZHx8aHx8Znx8dnx8InN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdl''@;'; put 'put ''dCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSx7c2tpcExvY2F0aW9uQ2hhbmdlOnRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6dGhpcy5yZXBsYWNlVXJsLHN0YXRlOnRoaXMuc3RhdGUsaW5mbzp0aGlzLmluZm99KSwhdGhp''@;'; put 'put ''cy5pc0FuY2hvckVsZW1lbnQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlSHJlZigpe2NvbnN0IGE9dGhpcy51cmxUcmVlO3RoaXMuaHJlZj1udWxsIT09YSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRpb25TdHJhdGVneT8u''@;'; put 'put ''cHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChhKSk6bnVsbDtjb25zdCBkPW51bGw9PT10aGlzLmhyZWY/bnVsbDpmdW5jdGlvbiBhRChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGpCKGMsbCl7cmV0dXJuInNyYyI9PT1sJiYoImVtYmVkIj09PWN8fCJmcmFtZSI9''@;'; put 'put ''PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/aUQ6WkN9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhp''@;'; put 'put ''cy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpoLnJlbW92ZUF0dHJpYnV0ZShmLGEpfWdldCB1cmxU''@;'; put 'put ''cmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLmNvbW1hbmRzP251bGw6dGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5''@;'; put 'put ''UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KShHZShMcyksR2UoQ3UpLElmKCJ0YWJpbmRleCIpLEdlKEVvKSxHZShKaSksR2UoWjgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZocigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFyZ2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1zOiJxdWVyeVBhcmFt''@;'; put 'put ''cyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5nOiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21lbnQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJw''@;'; put 'put ''cmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsczFdLHNraXBMb2NhdGlvbkNoYW5nZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsczFdLHJlcGxhY2VVcmw6W05uLkhhc0RlY29yYXRvcklu''@;'; put 'put ''cHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIsczFdLHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpLHB5PSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0''@;'; put 'put ''aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6''@;'; put 'put ''ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEtyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIHBwJiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7Zm8odGhpcy5saW5rcy5jaGFuZ2VzLGZvKG51''@;'; put 'put ''bGwpKS5waXBlKGV5KCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29u''@;'; put 'put ''c3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1ZdShhKS5waXBlKGV5KCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlz''@;'; put 'put ''TGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUo''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3Jv''@;'; put 'put ''dGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuY2xhc3Nlcy5mb3JFYWNoKGQ9PnthP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZl''@;'; put 'put ''RWxlbWVudCxkKX0pLGEmJnZvaWQgMCE9PXRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpOnRoaXMu''@;'; put 'put ''cmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PWEmJih0aGlzLl9pc0FjdGl2ZT1hLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xp''@;'; put 'put ''bmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiB2VGUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT57Y29u''@;'; put 'put ''c3QgZj1oLnVybFRyZWU7cmV0dXJuISFmJiZhLmlzQWN0aXZlKGYsZCl9fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgYT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmYSh0aGlzLmxpbmspfHx0aGlzLmxpbmtzLnNvbWUoYSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEppKSxHZShFbyksR2UoRXMpLEdlKGMxLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVu''@;'; put 'put ''Y3Rpb24oZCxoLGYpe2lmKDEmZCYmYW8oZixjMSw1KSwyJmQpe2xldCB2O0NpKHY9U2koKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVu''@;'; put 'put ''QWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFz''@;'; put 'put ''cyBzY2V7fWxldCBiVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGVyPWEsdGhpcy5pbmplY3Rvcj1oLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWYsdGhpcy5sb2FkZXI9dn1zZXRVcFByZWxvYWRpbmcoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJv''@;'; put 'put ''dXRlci5ldmVudHMucGlwZSgkbChhPT5hIGluc3RhbmNlb2YgcHApLHR5KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRoaXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIGQpe2YucHJvdmlkZXJzJiYhZi5faW5qZWN0b3ImJihmLl9pbmplY3Rvcj1HNChmLnByb3ZpZGVycyxhLGBSb3V0ZTog''@;'; put 'put ''JHtmLnBhdGh9YCkpO2NvbnN0IHY9Zi5faW5qZWN0b3I/P2EsTT1mLl9sb2FkZWRJbmplY3Rvcj8/djsoZi5sb2FkQ2hpbGRyZW4mJiFmLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWYuY2FuTG9hZHx8Zi5sb2FkQ29tcG9uZW50JiYhZi5fbG9hZGVkQ29tcG9uZW50KSYmaC5wdXNoKHRoaXMu''@;'; put 'put ''cHJlbG9hZENvbmZpZyh2LGYpKSwoZi5jaGlsZHJlbnx8Zi5fbG9hZGVkUm91dGVzKSYmaC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhNLGYuY2hpbGRyZW4/P2YuX2xvYWRlZFJvdXRlcykpfXJldHVybiBZdShoKS5waXBlKGV5KCkpfXByZWxvYWRDb25maWcoYSxkKXtyZXR1cm4gdGhpcy5w''@;'; put 'put ''cmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChkLCgpPT57bGV0IGg7aD1kLmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09ZC5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGQpOmZvKG51bGwpO2NvbnN0IGY9aC5waXBlKE4wKHY9Pm51bGw9PT12P2ZvKHZvaWQgMCk6KGQuX2xvYWRl''@;'; put 'put ''ZFJvdXRlcz12LnJvdXRlcyxkLl9sb2FkZWRJbmplY3Rvcj12LmluamVjdG9yLHRoaXMucHJvY2Vzc1JvdXRlcyh2LmluamVjdG9yPz9hLHYucm91dGVzKSkpKTtyZXR1cm4gZC5sb2FkQ29tcG9uZW50JiYhZC5fbG9hZGVkQ29tcG9uZW50P1l1KFtmLHRoaXMubG9hZGVyLmxvYWRDb21wb25l''@;'; put 'put ''bnQoZCldKS5waXBlKGV5KCkpOmZ9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihMcykseHIoS2llKSx4cihoYykseHIoc2NlKSx4cihnVykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm''@;'; put 'put ''YWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHZXPW5ldyBTdCgiIik7bGV0IGxjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdj17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmlld3BvcnRTY3JvbGxl''@;'; put 'put ''cj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz12LHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdi5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9u''@;'; put 'put ''fHw9ImRpc2FibGVkIix2LmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbigibWFudWFsIiks''@;'; put 'put ''dGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMu''@;'; put 'put ''c3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgQlI/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVzdG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/''@;'; put 'put ''YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgcHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSk6YSBpbnN0YW5jZW9mIHN5''@;'; put 'put ''JiZhLmNvZGU9PT1qUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybCkuZnJhZ21lbnQpKX0pfWNvbnN1bWVTY3Jv''@;'; put 'put ''bGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgRmxlJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bv''@;'; put 'put ''c2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxp''@;'; put 'put ''bmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9s''@;'; put 'put ''bEV2ZW50KGEsZCl7dmFyIGg9dGhpczt0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZWUoZnVuY3Rpb24qKCl7eWllbGQgbmV3IFByb21pc2UoZj0+e3NldFRpbWVvdXQoKCk9PntmKCl9KSxfYigoKT0+e2YoKX0se2luamVjdG9yOmguZW52aXJvbm1lbnRJbmplY3Rvcn0pfSksaC56b25l''@;'; put 'put ''LnJ1bigoKT0+e2gudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IEZsZShhLCJwb3BzdGF0ZSI9PT1oLmxhc3RTb3VyY2U/aC5zdG9yZVtoLnJlc3RvcmVkSWRdOm51bGwsZCkpfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUo''@;'; put 'put ''KSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIFNEKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbXAoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiB1Y2UoKXtjb25zdCBjPWZpKERzKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQocTQpO2lmKGwhPT1hLmNvbXBvbmVu''@;'; put 'put ''dHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoTHMpLGg9Yy5nZXQoZGNlKTsxPT09Yy5nZXQoYlcpJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQoaGNlLG51bGwscmEuT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxjLmdldCh2VyxudWxsLHJhLk9wdGlvbmFsKT8uaW5pdCgpLGQu''@;'; put 'put ''cmVzZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBdKSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBkY2U9bmV3IFN0KCIiLHtmYWN0b3J5OigpPT5uZXcgV259KSxiVz1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PjF9KSxoY2U9bmV3IFN0KCIiKTtmdW5jdGlvbiBDVGUoYyl7cmV0dXJuIG1wKDAsW3twcm92aWRlOmhjZSx1c2VFeGlzdGluZzpiVGV9LHtwcm92aWRlOnNjZSx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIE1UZShjKXtyZXR1cm4gbXAoOSxbe3Byb3ZpZGU6cmNl''@;'; put 'put ''LHVzZVZhbHVlOmFUZX0se3Byb3ZpZGU6aWNlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319XSl9Y29uc3QgZmNlPW5ldyBTdCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSx4VGU9W2ZoLHtwcm92aWRlOml5LHVzZUNsYXNzOiRa''@;'; put 'put ''fSxMcyxxTSx7cHJvdmlkZTpDdSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGNjZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0ZS5yb290fSxkZXBzOltMc119LGdXLFtdXTtsZXQgemM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6''@;'; put 'put ''Yyxwcm92aWRlcnM6W3hUZSxbXSx7cHJvdmlkZTpmeSxtdWx0aTohMCx1c2VWYWx1ZTphfSx7cHJvdmlkZTpmY2UsdXNlRmFjdG9yeTprVGUsZGVwczpbW0xzLG5ldyBJMSxuZXcgbGRdXX0se3Byb3ZpZGU6aHksdXNlVmFsdWU6ZHx8e319LGQ/LnVzZUhhc2g/e3Byb3ZpZGU6WjgsdXNlQ2xh''@;'; put 'put ''c3M6dl9lfTp7cHJvdmlkZTpaOCx1c2VDbGFzczpCYWV9LHtwcm92aWRlOnZXLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPWZpKFJ3ZSksbD1maShXYSksYT1maShoeSksZD1maShHUiksaD1maShpeSk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCks''@;'; put 'put ''bmV3IGxjZShoLGQsYyxsLGEpfX0sZD8ucHJlbG9hZGluZ1N0cmF0ZWd5P0NUZShkLnByZWxvYWRpbmdTdHJhdGVneSkuXHUwMjc1cHJvdmlkZXJzOltdLGQ/LmluaXRpYWxOYXZpZ2F0aW9uP0RUZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/bXAoOCxbVWxlLHtwcm92aWRlOlVS''@;'; put 'put ''LHVzZUV4aXN0aW5nOlVsZX1dKS5cdTAyNzVwcm92aWRlcnM6W10sZD8uZW5hYmxlVmlld1RyYW5zaXRpb25zP01UZSgpLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6cGNlLHVzZUZhY3Rvcnk6dWNlfSx7cHJvdmlkZTprVSxtdWx0aTohMCx1c2VFeGlzdGluZzpwY2V9XV19fXN0YXRp''@;'; put 'put ''YyBmb3JDaGlsZChhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOmZ5LG11bHRpOiEwLHVzZVZhbHVlOmF9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoZmNlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtp''@;'; put 'put ''KHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24ga1RlKGMpe3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBEVGUoYyl7cmV0dXJuWyJkaXNhYmxlZCI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21wKDMsW3twcm92aWRlOlRVLG11bHRp''@;'; put 'put ''OiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKExzKTtyZXR1cm4oKT0+e2wuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl9fX0se3Byb3ZpZGU6YlcsdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1jLmluaXRpYWxOYXZpZ2F0aW9u''@;'; put 'put ''P21wKDIsW3twcm92aWRlOmJXLHVzZVZhbHVlOjB9LHtwcm92aWRlOlRVLG11bHRpOiEwLGRlcHM6W0RzXSx1c2VGYWN0b3J5Omw9Pntjb25zdCBhPWwuZ2V0KGdfZSxQcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuKCk9PmEudGhlbigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9bC5nZXQo''@;'; put 'put ''THMpLGY9bC5nZXQoZGNlKTtvY2UoaCwoKT0+e2QoITApfSksbC5nZXQoR1IpLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+KGQoITApLGYuY2xvc2VkP2ZvKHZvaWQgMCk6ZiksaC5pbml0aWFsTmF2aWdhdGlvbigpfSkpfX1dKS5cdTAyNzVwcm92aWRlcnM6W11dfWNvbnN0IHBjZT1uZXcgU3Qo''@;'; put 'put ''IiIpO3ZhciBneT1mdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodD0ibGlnaHQiLGMuZGFyaz0iZGFyayIsY30oZ3l8fHt9KSxnY2U9eSg1NTE4OCksUlRlPXkoNzg3NTUpO2NvbnN0IHlXPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2Vk''@;'; put 'put ''OjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0''@;'; put 'put ''UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIGdoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2Fs''@;'; put 'put ''bG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNf''@;'; put 'put ''aW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5l''@;'; put 'put ''ZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30oZ2h8fHt9KSxtaD15KDM3MzQpLG1jZT15Lm4obWgpLEIwPXkoMTMyNDcpO2xldCBROD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3Ro''@;'; put 'put ''aXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLF9XPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnVzZXJDaGFuZ2U9bmV3IFdufXNldCB1c2VyKGEpe3RoaXMuX3VzZXI9YSx0aGlzLnVzZXJDaGFuZ2UubmV4dChhKX1nZXQgdXNlcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl91c2VyfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzICRSe2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5kZWZhdWx0U2V0dGluZ3M9e3BlcnNpc3RTZWxlY3RlZFRoZW1lOiEwLHNlbGVjdGVkVGhlbWU6Z3kubGlnaHR9LHRoaXMuc2V0dGluZ3M9bmV3IGVpKHRoaXMuZGVmYXVsdFNldHRpbmdzKSx0aGlzLnJlc3RvcmVBcHBTZXR0aW5ncygpfXJlc3RvcmVBcHBTZXR0aW5ncygpe3RyeXtj''@;'; put 'put ''b25zdCBsPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhcHAtc2V0dGluZ3MiKTtpZihsKXtjb25zdCBhPUpTT04ucGFyc2UobCk7dGhpcy5zZXRBcHBTZXR0aW5ncyhhKX1lbHNlIGNvbnNvbGUuaW5mbygiTm8gYXBwIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlLCB3ZSB3aWxs''@;'; put 'put ''IHNldCB0byBkZWZhdWx0IHZhbHVlcy4iKX1jYXRjaChsKXtjb25zb2xlLndhcm4oIkVycm9yIHJlc3RvcmluZyBzZXR0aW5ncyBmcm9tIGxvY2FsIHN0b3JnYWUuIixsKX19c3RvcmVBcHBTZXR0aW5ncygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhcHAtc2V0dGluZ3MiLEpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KHRoaXMuc2V0dGluZ3MudmFsdWUpKX1zZXRBcHBTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzLm5leHQoey4uLnRoaXMuc2V0dGluZ3MudmFsdWUsLi4ubH0pLHRoaXMuc3RvcmVBcHBTZXR0aW5ncygpfX1sZXQgdmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFwcFNl''@;'; put 'put ''dHRpbmdzU2VydmljZT1hLHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBLcix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IEtyLHRoaXMub25TaG93QWJvcnRNb2RhbD1uZXcgS3IsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBLcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5l''@;'; put 'put ''dyBLcix0aGlzLnZpZXdMYXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xvc2VMaW1pdD0xMjgwLHRoaXMuZGFya01vZGU9bmV3IGVpKCExKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmRhcmtNb2RlLm5leHQoYSksYT9kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwiZGFy''@;'; put 'put ''ayIpOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJsaWdodCIpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHtzZWxlY3RlZFRoZW1lOmE/Z3kuZGFyazpneS5saWdodH0pfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0''@;'; put 'put ''TW9kYWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixkKXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1lc3NhZ2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxs''@;'; put 'put ''KTtsZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQodil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9y''@;'; put 'put ''KGEsZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lmKGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0YWlscyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJiho''@;'; put 'put ''PSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJvcnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhpcy5zaG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFy''@;'; put 'put ''KCl7d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1pdCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5TaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0''@;'; put 'put ''dXBEYXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBkOyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoJFIpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBLUnt9Y2xhc3MgcVJ7''@;'; put 'put ''fWNsYXNzIEUye2NvbnN0cnVjdG9yKGwpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsbD8ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGwuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29u''@;'; put 'put ''c3QgZD1hLmluZGV4T2YoIjoiKTtpZihkPjApe2NvbnN0IGg9YS5zbGljZSgwLGQpLGY9aC50b0xvd2VyQ2FzZSgpLHY9YS5zbGljZShkKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaCxmKSx0aGlzLmhlYWRlcnMuaGFzKGYpP3RoaXMuaGVhZGVycy5nZXQoZikucHVz''@;'; put 'put ''aCh2KTp0aGlzLmhlYWRlcnMuc2V0KGYsW3ZdKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3Ro''@;'; put 'put ''aXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''fWdldChsKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9hWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRB''@;'; put 'put ''bGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9w''@;'; put 'put ''OiJzIn0pfWRlbGV0ZShsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5''@;'; put 'put ''SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBFMj90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSks''@;'; put 'put ''dGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShsKXtsLmluaXQoKSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1l''@;'; put 'put ''cy5nZXQoYSkpfSl9Y2xvbmUobCl7Y29uc3QgYT1uZXcgRTI7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEUyP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9''@;'; put 'put ''YXBwbHlVcGRhdGUobCl7Y29uc3QgYT1sLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1l''@;'; put 'put ''KGwubmFtZSxhKTtjb25zdCBoPSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVhZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2''@;'; put 'put ''KXJldHVybjt2PXYuZmlsdGVyKE09Pi0xPT09Zi5pbmRleE9mKE0pKSwwPT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMu''@;'; put 'put ''bm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmllcyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1hcChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXpl''@;'; put 'put ''ZE5hbWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgTFRle2VuY29kZUtleShsKXtyZXR1''@;'; put 'put ''cm4gdmNlKGwpfWVuY29kZVZhbHVlKGwpe3JldHVybiB2Y2UobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19Y29uc3QgUFRlPS8lKFxkW2EtZjAtOV0pL2dpLEZUZT17NDA6IkAi''@;'; put 'put ''LCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gdmNlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShQVGUsKGwsYSk9PkZUZVthXT8/bCl9ZnVuY3Rpb24gWFIoYyl7cmV0dXJuYCR7Y31g''@;'; put 'put ''fWNsYXNzIHNte2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWwuZW5jb2Rlcnx8bmV3IExUZSxsLmZyb21TdHJpbmcpe2lmKGwuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJv''@;'; put 'put ''dGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbiBPVGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGMubGVuZ3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LE1d''@;'; put 'put ''PS0xPT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGguc2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkpXSxEPWEuZ2V0KHYpfHxbXTtELnB1c2goTSksYS5zZXQodixEKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2Jq''@;'; put 'put ''ZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3RbYV0saD1BcnJheS5pc0FycmF5KGQpP2QubWFwKFhSKTpbWFIoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBhP2FbMF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJhIn0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJy''@;'; put 'put ''YXkuaXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmgsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9''@;'; put 'put ''ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1h''@;'; put 'put ''cChkPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpvaW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1jbG9uZShsKXtjb25zdCBhPW5ldyBzbSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRo''@;'; put 'put ''aXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9''@;'; put 'put ''PnRoaXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ape2Nhc2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goWFIobC52''@;'; put 'put ''YWx1ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGwucGFyYW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKFhSKGwudmFsdWUpKTstMSE9''@;'; put 'put ''PWgmJmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQobC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgSFRle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQobCxh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5tYXAuc2V0KGwsYSksdGhpc31nZXQobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKXx8dGhpcy5tYXAuc2V0KGwsbC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGwpfWRlbGV0ZShsKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGwpLHRoaXN9aGFzKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLm1hcC5oYXMobCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fWZ1bmN0aW9uIGJjZShjKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHljZShjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGlu''@;'; put 'put ''c3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBfY2UoYyl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyByeHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9''@;'; put 'put ''ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBOVGUoYyl7c3dpdGNoKGMpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAi''@;'; put 'put ''OnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWYucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFs''@;'; put 'put ''cyxmLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVzcG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxmLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRy''@;'; put 'put ''YW5zZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/Pz1uZXcgRTIsdGhpcy5jb250ZXh0Pz89bmV3IEhUZSx0aGlzLnBhcmFtcyl7Y29uc3Qgdj10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0''@;'; put 'put ''IE09YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0xPT09TT8iPyI6TTxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgc20sdGhpcy51cmxXaXRoUGFyYW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fGJjZSh0aGlzLmJvZHkpfHx5Y2UodGhpcy5ib2R5KXx8X2NlKHRoaXMuYm9keSl8fGZ1bmN0aW9uIFZUZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9k''@;'; put 'put ''eSk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHNtP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkp''@;'; put 'put ''OnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fF9jZSh0aGlzLmJvZHkpP251bGw6eWNlKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6YmNlKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2Ygc20/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09''@;'; put 'put ''dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlzLnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxmPWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFu''@;'; put 'put ''c2ZlckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksTT1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsRD1sLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBaPWwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHJlPWwucGFy''@;'; put 'put ''YW1zfHx0aGlzLnBhcmFtcztjb25zdCBjZT1sLmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09bC5zZXRIZWFkZXJzJiYoWj1PYmplY3Qua2V5cyhsLnNldEhlYWRlcnMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRIZWFkZXJzW0VlXSksWikpLGwuc2V0UGFy''@;'; put 'put ''YW1zJiYocmU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRQYXJhbXNbRWVdKSxyZSkpLG5ldyByeChhLGQsdix7cGFyYW1zOnJlLGhlYWRlcnM6Wixjb250ZXh0OmNlLHJlcG9ydFByb2dyZXNzOkQscmVzcG9uc2VUeXBlOmgsd2l0aENy''@;'; put 'put ''ZWRlbnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciBsbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9h''@;'; put 'put ''ZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30obG18fHt9KTtjbGFzcyB3V3tjb25zdHJ1Y3RvcihsLGE9aXguT2ssZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgRTIsdGhpcy5z''@;'; put 'put ''dGF0dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBKUiBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9''@;'; put 'put ''e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZUhlYWRlcn1jbG9uZShsPXt9KXtyZXR1cm4gbmV3IEpSKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVz''@;'; put 'put ''VGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBlNyBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09bC5ib2R5P2wuYm9keTpudWxsfWNsb25l''@;'; put 'put ''KGw9e30pe3JldHVybiBuZXcgZTcoe2JvZHk6dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRo''@;'; put 'put ''aXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgbXkgZXh0ZW5kcyB3V3tjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlz''@;'; put 'put ''LnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifTogJHtsLnN0YXR1c30gJHtsLnN0YXR1''@;'; put 'put ''c1RleHR9YCx0aGlzLmVycm9yPWwuZXJyb3J8fG51bGx9fXZhciBpeD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNvbnRpbnVlPTEwMF09IkNvbnRpbnVlIixjW2MuU3dpdGNoaW5nUHJvdG9jb2xzPTEwMV09IlN3aXRjaGluZ1Byb3RvY29scyIsY1tjLlByb2Nlc3Npbmc9MTAyXT0iUHJvY2Vz''@;'; put 'put ''c2luZyIsY1tjLkVhcmx5SGludHM9MTAzXT0iRWFybHlIaW50cyIsY1tjLk9rPTIwMF09Ik9rIixjW2MuQ3JlYXRlZD0yMDFdPSJDcmVhdGVkIixjW2MuQWNjZXB0ZWQ9MjAyXT0iQWNjZXB0ZWQiLGNbYy5Ob25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb249MjAzXT0iTm9uQXV0aG9yaXRhdGl2''@;'; put 'put ''ZUluZm9ybWF0aW9uIixjW2MuTm9Db250ZW50PTIwNF09Ik5vQ29udGVudCIsY1tjLlJlc2V0Q29udGVudD0yMDVdPSJSZXNldENvbnRlbnQiLGNbYy5QYXJ0aWFsQ29udGVudD0yMDZdPSJQYXJ0aWFsQ29udGVudCIsY1tjLk11bHRpU3RhdHVzPTIwN109Ik11bHRpU3RhdHVzIixjW2MuQWxy''@;'; put 'put ''ZWFkeVJlcG9ydGVkPTIwOF09IkFscmVhZHlSZXBvcnRlZCIsY1tjLkltVXNlZD0yMjZdPSJJbVVzZWQiLGNbYy5NdWx0aXBsZUNob2ljZXM9MzAwXT0iTXVsdGlwbGVDaG9pY2VzIixjW2MuTW92ZWRQZXJtYW5lbnRseT0zMDFdPSJNb3ZlZFBlcm1hbmVudGx5IixjW2MuRm91bmQ9MzAyXT0i''@;'; put 'put ''Rm91bmQiLGNbYy5TZWVPdGhlcj0zMDNdPSJTZWVPdGhlciIsY1tjLk5vdE1vZGlmaWVkPTMwNF09Ik5vdE1vZGlmaWVkIixjW2MuVXNlUHJveHk9MzA1XT0iVXNlUHJveHkiLGNbYy5VbnVzZWQ9MzA2XT0iVW51c2VkIixjW2MuVGVtcG9yYXJ5UmVkaXJlY3Q9MzA3XT0iVGVtcG9yYXJ5UmVk''@;'; put 'put ''aXJlY3QiLGNbYy5QZXJtYW5lbnRSZWRpcmVjdD0zMDhdPSJQZXJtYW5lbnRSZWRpcmVjdCIsY1tjLkJhZFJlcXVlc3Q9NDAwXT0iQmFkUmVxdWVzdCIsY1tjLlVuYXV0aG9yaXplZD00MDFdPSJVbmF1dGhvcml6ZWQiLGNbYy5QYXltZW50UmVxdWlyZWQ9NDAyXT0iUGF5bWVudFJlcXVpcmVk''@;'; put 'put ''IixjW2MuRm9yYmlkZGVuPTQwM109IkZvcmJpZGRlbiIsY1tjLk5vdEZvdW5kPTQwNF09Ik5vdEZvdW5kIixjW2MuTWV0aG9kTm90QWxsb3dlZD00MDVdPSJNZXRob2ROb3RBbGxvd2VkIixjW2MuTm90QWNjZXB0YWJsZT00MDZdPSJOb3RBY2NlcHRhYmxlIixjW2MuUHJveHlBdXRoZW50aWNh''@;'; put 'put ''dGlvblJlcXVpcmVkPTQwN109IlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsY1tjLlJlcXVlc3RUaW1lb3V0PTQwOF09IlJlcXVlc3RUaW1lb3V0IixjW2MuQ29uZmxpY3Q9NDA5XT0iQ29uZmxpY3QiLGNbYy5Hb25lPTQxMF09IkdvbmUiLGNbYy5MZW5ndGhSZXF1aXJlZD00MTFdPSJM''@;'; put 'put ''ZW5ndGhSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvbkZhaWxlZD00MTJdPSJQcmVjb25kaXRpb25GYWlsZWQiLGNbYy5QYXlsb2FkVG9vTGFyZ2U9NDEzXT0iUGF5bG9hZFRvb0xhcmdlIixjW2MuVXJpVG9vTG9uZz00MTRdPSJVcmlUb29Mb25nIixjW2MuVW5zdXBwb3J0ZWRNZWRpYVR5cGU9''@;'; put 'put ''NDE1XT0iVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLGNbYy5SYW5nZU5vdFNhdGlzZmlhYmxlPTQxNl09IlJhbmdlTm90U2F0aXNmaWFibGUiLGNbYy5FeHBlY3RhdGlvbkZhaWxlZD00MTddPSJFeHBlY3RhdGlvbkZhaWxlZCIsY1tjLkltQVRlYXBvdD00MThdPSJJbUFUZWFwb3QiLGNbYy5NaXNk''@;'; put 'put ''aXJlY3RlZFJlcXVlc3Q9NDIxXT0iTWlzZGlyZWN0ZWRSZXF1ZXN0IixjW2MuVW5wcm9jZXNzYWJsZUVudGl0eT00MjJdPSJVbnByb2Nlc3NhYmxlRW50aXR5IixjW2MuTG9ja2VkPTQyM109IkxvY2tlZCIsY1tjLkZhaWxlZERlcGVuZGVuY3k9NDI0XT0iRmFpbGVkRGVwZW5kZW5jeSIsY1tj''@;'; put 'put ''LlRvb0Vhcmx5PTQyNV09IlRvb0Vhcmx5IixjW2MuVXBncmFkZVJlcXVpcmVkPTQyNl09IlVwZ3JhZGVSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvblJlcXVpcmVkPTQyOF09IlByZWNvbmRpdGlvblJlcXVpcmVkIixjW2MuVG9vTWFueVJlcXVlc3RzPTQyOV09IlRvb01hbnlSZXF1ZXN0cyIs''@;'; put 'put ''Y1tjLlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZT00MzFdPSJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLGNbYy5VbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucz00NTFdPSJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsY1tjLkludGVybmFsU2VydmVyRXJyb3I9NTAwXT0iSW50''@;'; put 'put ''ZXJuYWxTZXJ2ZXJFcnJvciIsY1tjLk5vdEltcGxlbWVudGVkPTUwMV09Ik5vdEltcGxlbWVudGVkIixjW2MuQmFkR2F0ZXdheT01MDJdPSJCYWRHYXRld2F5IixjW2MuU2VydmljZVVuYXZhaWxhYmxlPTUwM109IlNlcnZpY2VVbmF2YWlsYWJsZSIsY1tjLkdhdGV3YXlUaW1lb3V0PTUwNF09''@;'; put 'put ''IkdhdGV3YXlUaW1lb3V0IixjW2MuSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ9NTA1XT0iSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLGNbYy5WYXJpYW50QWxzb05lZ290aWF0ZXM9NTA2XT0iVmFyaWFudEFsc29OZWdvdGlhdGVzIixjW2MuSW5zdWZmaWNpZW50U3RvcmFnZT01MDddPSJJbnN1''@;'; put 'put ''ZmZpY2llbnRTdG9yYWdlIixjW2MuTG9vcERldGVjdGVkPTUwOF09Ikxvb3BEZXRlY3RlZCIsY1tjLk5vdEV4dGVuZGVkPTUxMF09Ik5vdEV4dGVuZGVkIixjW2MuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NTExXT0iTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGN9KGl4''@;'; put 'put ''fHx7fSk7ZnVuY3Rpb24gQ1coYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlw''@;'; put 'put ''ZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBTVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5zdGFuY2VvZiByeClmPWE7''@;'; put 'put ''ZWxzZXtsZXQgRCxaO0Q9aC5oZWFkZXJzIGluc3RhbmNlb2YgRTI/aC5oZWFkZXJzOm5ldyBFMihoLmhlYWRlcnMpLGgucGFyYW1zJiYoWj1oLnBhcmFtcyBpbnN0YW5jZW9mIHNtP2gucGFyYW1zOm5ldyBzbSh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyByeChhLGQsdm9pZCAwIT09''@;'; put 'put ''aC5ib2R5P2guYm9keTpudWxsLHtoZWFkZXJzOkQsY29udGV4dDpoLmNvbnRleHQscGFyYW1zOloscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRoQ3JlZGVudGlhbHMsdHJhbnNm''@;'; put 'put ''ZXJDYWNoZTpoLnRyYW5zZmVyQ2FjaGV9KX1jb25zdCB2PWZvKGYpLnBpcGUodHkoRD0+dGhpcy5oYW5kbGVyLmhhbmRsZShEKSkpO2lmKGEgaW5zdGFuY2VvZiByeHx8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIHY7Y29uc3QgTT12LnBpcGUoJGwoRD0+RCBpbnN0YW5jZW9mIGU3KSk7''@;'; put 'put ''c3dpdGNoKGgub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIE0ucGlwZShMcihEPT57aWYobnVsbCE9PUQuYm9keSYmIShELmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIEQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBNLnBpcGUoTHIoRD0+e2lmKG51bGwhPT1ELmJvZHkmJiEoRC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBC''@;'; put 'put ''bG9iLiIpO3JldHVybiBELmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gTS5waXBlKExyKEQ9PntpZihudWxsIT09RC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIEQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gRC5ib2R5fSkpO2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIE0ucGlwZShMcihEPT5ELmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gTTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1''@;'; put 'put ''ZXN0KCJERUxFVEUiLGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHNtKS5h''@;'; put 'put ''cHBlbmQoZCwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLENXKGgs''@;'; put 'put ''ZCkpfXBvc3QoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsQ1coaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsQ1coaCxkKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoS1Ip''@;'; put 'put ''KX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDY2UoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBaVGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxk''@;'; put 'put ''KX0pfWNvbnN0IFlUZT1uZXcgU3QoIiIpLGF4PW5ldyBTdCgiIiksU2NlPW5ldyBTdCgiIiksTWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gR1RlKCl7bGV0IGM9bnVsbDtyZXR1cm4obCxhKT0+e251bGw9PT1jJiYoYz0oZmkoWVRlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoWlRl''@;'; put 'put ''LENjZSkpO2NvbnN0IGQ9ZmkoUGYpLGg9ZC5hZGQoKTtyZXR1cm4gYyhsLGEpLnBpcGUoVU0oKCk9PmQucmVtb3ZlKGgpKSl9fWxldCB4Y2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtSe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhp''@;'; put 'put ''cy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKTtjb25zdCBoPWZpKE1jZSx7b3B0aW9uYWw6ITB9KTt0aGlzLmJhY2tlbmQ9aD8/YX1oYW5kbGUoYSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdl''@;'; put 'put ''dChheCksLi4udGhpcy5pbmplY3Rvci5nZXQoU2NlLFtdKV0pKTt0aGlzLmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIFdUZShjLGwsYSl7cmV0dXJuKGQsaCk9PnEwKGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLENjZSl9Y29uc3QgZD10aGlz''@;'; put 'put ''LnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoVU0oKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShkKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHFS''@;'; put 'put ''KSx4cihoYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEpUZT0vXlwpXF1cfScsP1xuLztsZXQgVGNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFu''@;'; put 'put ''ZGxlKGEpe2lmKCJKU09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgUW4oLTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP1l1KGQuXHUwMjc1bG9hZEltcGwoKSk6Zm8obnVsbCkpLnBpcGUoVjEoKCk9Pm5ldyBYdChmPT57Y29uc3Qgdj1k''@;'; put 'put ''LmJ1aWxkKCk7aWYodi5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFtcyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKHFlLHJ0KT0+di5zZXRSZXF1ZXN0SGVhZGVyKHFlLHJ0LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMo''@;'; put 'put ''IkFjY2VwdCIpfHx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFhLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgcWU9YS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1xZSYmdi5zZXRSZXF1''@;'; put 'put ''ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHFlKX1pZihhLnJlc3BvbnNlVHlwZSl7Y29uc3QgcWU9YS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTt2LnJlc3BvbnNlVHlwZT0ianNvbiIhPT1xZT9xZToidGV4dCJ9Y29uc3QgTT1hLnNlcmlhbGl6ZUJvZHkoKTtsZXQgRD1udWxsO2NvbnN0''@;'; put 'put ''IFo9KCk9PntpZihudWxsIT09RClyZXR1cm4gRDtjb25zdCBxZT12LnN0YXR1c1RleHR8fCJPSyIscnQ9bmV3IEUyKHYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHB0PWZ1bmN0aW9uIFFUZShjKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJM''@;'; put 'put ''Oi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSh2KXx8YS51cmw7cmV0dXJuIEQ9bmV3IEpSKHtoZWFkZXJzOnJ0LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OnFlLHVy''@;'; put 'put ''bDpwdH0pLER9LHJlPSgpPT57bGV0e2hlYWRlcnM6cWUsc3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fT1aKCksSnQ9bnVsbDtydCE9PWl4Lk5vQ29udGVudCYmKEp0PXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09cnQmJihydD1KdD9p''@;'; put 'put ''eC5PazowKTtsZXQgdm49cnQ+PTIwMCYmcnQ8MzAwO2lmKCJqc29uIj09PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEp0KXtjb25zdCBDbj1KdDtKdD1KdC5yZXBsYWNlKEpUZSwiIik7dHJ5e0p0PSIiIT09SnQ/SlNPTi5wYXJzZShKdCk6bnVsbH1jYXRjaCh0bil7SnQ9Q24s''@;'; put 'put ''dm4mJih2bj0hMSxKdD17ZXJyb3I6dG4sdGV4dDpKdH0pfX12bj8oZi5uZXh0KG5ldyBlNyh7Ym9keTpKdCxoZWFkZXJzOnFlLHN0YXR1czpydCxzdGF0dXNUZXh0OnB0LHVybDpkdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgbXkoe2Vycm9yOkp0LGhlYWRlcnM6cWUs''@;'; put 'put ''c3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fHx2b2lkIDB9KSl9LGNlPXFlPT57Y29uc3R7dXJsOnJ0fT1aKCkscHQ9bmV3IG15KHtlcnJvcjpxZSxzdGF0dXM6di5zdGF0dXN8fDAsc3RhdHVzVGV4dDp2LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6cnR8fHZvaWQgMH0p''@;'; put 'put ''O2YuZXJyb3IocHQpfTtsZXQgYmU9ITE7Y29uc3QgRWU9cWU9PntiZXx8KGYubmV4dChaKCkpLGJlPSEwKTtsZXQgcnQ9e3R5cGU6bG0uRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90YWwpLCJ0ZXh0Ij09PWEu''@;'; put 'put ''cmVzcG9uc2VUeXBlJiZ2LnJlc3BvbnNlVGV4dCYmKHJ0LnBhcnRpYWxUZXh0PXYucmVzcG9uc2VUZXh0KSxmLm5leHQocnQpfSxCZT1xZT0+e2xldCBydD17dHlwZTpsbS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUu''@;'; put 'put ''dG90YWwpLGYubmV4dChydCl9O3JldHVybiB2LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHJlKSx2LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpLGEucmVwb3J0UHJvZ3Jl''@;'; put 'put ''c3MmJih2LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixFZSksbnVsbCE9PU0mJnYudXBsb2FkJiZ2LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsQmUpKSx2LnNlbmQoTSksZi5uZXh0KHt0eXBlOmxtLlNlbnR9KSwoKT0+e3YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJy''@;'; put 'put ''b3IiLGNlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixyZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVl''@;'; put 'put ''KSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixCZSkpLHYucmVhZHlTdGF0ZSE9PXYuRE9ORSYmdi5hYm9ydCgpfX0pKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIob29lKSl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgRVc9bmV3IFN0KCIiKSxBY2U9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxrY2U9bmV3IFN0KCIi''@;'; put 'put ''LHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pO2NsYXNzIERjZXt9bGV0IG5BZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJp''@;'; put 'put ''bmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBh''@;'; put 'put ''cnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1xYWUoYSx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1hKSx0aGlzLmxhc3RUb2tlbn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoaW8pLHhyKEFjZSkpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJBZShjLGwpe2NvbnN0IGE9Yy51cmwudG9Mb3dlckNhc2UoKTtpZighZmkoRVcpfHwiR0VUIj09PWMubWV0aG9kfHwiSEVBRCI9PT1jLm1ldGhvZHx8''@;'; put 'put ''YS5zdGFydHNXaXRoKCJodHRwOi8vIil8fGEuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gbChjKTtjb25zdCBkPWZpKERjZSkuZ2V0VG9rZW4oKSxoPWZpKGtjZSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRlcnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5z''@;'; put 'put ''ZXQoaCxkKX0pKSxsKGMpfXZhciBjbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNy''@;'; put 'put ''ZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRj''@;'; put 'put ''aCIsY30oY218fHt9KTtmdW5jdGlvbiB0NyhjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIGlBZSguLi5jKXtjb25zdCBsPVtTVyxUY2UseGNlLHtwcm92aWRlOktSLHVzZUV4aXN0aW5nOnhjZX0se3Byb3ZpZGU6cVIsdXNlRXhpc3Rpbmc6VGNl''@;'; put 'put ''fSx7cHJvdmlkZTpheCx1c2VWYWx1ZTpyQWUsbXVsdGk6ITB9LHtwcm92aWRlOkVXLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpEY2UsdXNlQ2xhc3M6bkFlfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbiB5ZihjKXtyZXR1cm57''@;'; put 'put ''XHUwMjc1cHJvdmlkZXJzOmN9fShsKX1jb25zdCBJY2U9bmV3IFN0KCIiKTtsZXQgb0FlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W2lBZSh0NyhjbS5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkljZSx1c2VGYWN0b3J5OkdUZX0se3Byb3ZpZGU6YXgsdXNlRXhpc3Rpbmc6SWNlLG11bHRpOiEwfV0pKV19KX19cmV0dXJuIGN9KSgpLFZjZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNl''@;'; put 'put ''dHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHth''@;'; put 'put ''fWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlz''@;'; put 'put ''LmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlz''@;'; put 'put ''LmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTVykseHIoUTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46''@;'; put 'put ''InJvb3QifSl9fXJldHVybiBjfSkoKSxUVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOnty''@;'; put 'put ''ZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246''@;'; put 'put ''Ii9qb2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2gi''@;'; put 'put ''LG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZp''@;'; put 'put ''bml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3Rh''@;'; put 'put ''dGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0s''@;'; put 'put ''T3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWE/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50''@;'; put 'put ''aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0QnlJZChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9''@;'; put 'put ''L2NvbXB1dGUvY29udGV4dHMvJHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlckJ5UGF0aChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRGb2xkZXJN''@;'; put 'put ''ZW1iZXJzKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzLyR7YX0vbWVtYmVyc2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldEFkbWluR3JvdXBzKGE9NWUzKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMv''@;'; put 'put ''Z3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDdXJyZW50VXNlcigpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXQoYSxk''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5odHRwLmdldChhLGQpLnBpcGUoWDgoaD0+KGNvbnNvbGUubG9nKCJ1cmwiLGEpLGNvbnNvbGUubG9nKCJlcnIuc3RhdHVzIixoLnN0YXR1cyksNDQ5PT09aC5zdGF0dXN8fDQwMT09PWguc3RhdHVzP3RoaXMuaHR0cC5nZXQoYSxkKTp6TSgoKT0+aCkpKSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoU1cpLHhyKFE4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksQnM9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMudXNlclNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5zYXNWaXlhU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMucm91dGVy''@;'; put 'put ''PUQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBLcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhtY2UoKSksdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITEs''@;'; put 'put ''dGhpcy5zaG91bGRMb2dpbj1uZXcgZWkoITEpLHRoaXMubGljZW5zZV9zaXRlX2lkPW5ldyBlaShudWxsKX1zYXNTZXJ2aWNlSW5pdCgpe2lmKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnNhc2pzU2Vydmlj''@;'; put 'put ''ZS5zZXR1cCgpLHRoaXMuc2FzVml5YVNlcnZpY2Uuc2V0dXAoKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzKXtzd2l0Y2godGhpcy5zYXNqc0FkYXB0ZXI9bmV3KG1jZSgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgQjAu''@;'; put 'put ''WS5TYXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBCMC5ZLlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIEIwLlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVw''@;'; put 'put ''bG95KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2''@;'; put 'put ''ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIr''@;'; put 'put ''YSxkKSxuZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihEPT57Y29uc3QgWj10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQocmU9PnJlLnNlcnZpY2VMaW5r''@;'; put 'put ''PT09YSk7aWYoITE9PT1ELmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxNKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOlo/LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmRC5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpELk1G''@;'; put 'put ''X0dFVFVTRVJ9KSxELlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoRC5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKEQuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlk''@;'; put 'put ''RW1pdHRlci5lbWl0KEQuU1lTU0lURSkpKSw0MDQ9PT1ELnN0YXR1cyYmTSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkQuYm9keXx8IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpaPy5sb2dGaWxlfSksdHlwZW9mIEQuc2FzanNBYm9ydDwidSIpe2NvbnN0IHJlPUQsY2U9cmUu''@;'; put 'put ''c2FzanNBYm9ydFswXS5NU0csYmU9cmUuc2FzanNBYm9ydFswXS5NQUM7aWYoY2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRl''@;'; put 'put ''ci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOmNlfSxsb2c6Wj8ubG9nRmlsZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwi''@;'; put 'put ''IiksY2Use1NZU1dBUk5JTkdURVhUOnJlLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpyZS5TWVNFUlJPUlRFWFQsTUFDOmJlfSksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpjZX0sbG9nOlo/LmxvZ0ZpbGV9KX12KHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSxE''@;'; put 'put ''PT57Y29uc29sZS5lcnJvcihEKTtjb25zdCBaPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChyZT0+cmUuc2VydmljZUxpbms9PT1hKTtpZihELmVycm9yKXtsZXQgY2UscmU9RC5lcnJvci5tZXNzYWdlO0QuZXJyb3IuZGV0YWlscyYmRC5lcnJvci5kZXRhaWxzLmxv''@;'; put 'put ''ZyYmKGNlPUQuZXJyb3IuZGV0YWlscy5sb2cpLCghcmV8fHJlLnRyaW0oKS5sZW5ndGg8MSkmJihyZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLHJlLHtMT0c6Y2V9LCJS''@;'; put 'put ''ZXF1ZXN0IGVycm9yIiksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpyZX0sbG9nOlo/LmxvZ0ZpbGV9KX1NKHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9Pnt0aGlzLnNhc2pzQWRhcHRl''@;'; put 'put ''ci51cGxvYWRGaWxlKGEsZCxoKS50aGVuKE09Pntjb25zdCBEPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChaPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1aLnNlcnZpY2VMaW5rKTtmKHthZGFwdGVyUmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSxN''@;'; put 'put ''PT57Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoWj0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09Wi5zZXJ2aWNlTGluayk7dih7cmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSl9KX1sb2dpbihhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVl''@;'; put 'put ''KGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5nZXRTZXJ2ZXJUeXBlKCk9PT1CMC5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gaC5zYXNqc0FkYXB0ZXIubG9nSW4oYSxkLGYpLnRoZW4odj0+KHYuaXNMb2dnZWRJbiYmKGgudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6di51c2Vy''@;'; put 'put ''TmFtZX0saC5hcHBMb2NDaGVja1BlbmRpbmcmJihoLmNoZWNrVml5YURlcGxveShoLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxoLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLGguc2hvdWxkTG9naW4ubmV4dCghdi5pc0xvZ2dlZEluKSx2LmlzTG9nZ2VkSW4pLHY9Pihjb25zb2xl''@;'; put 'put ''LmVycm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9cmVsb2FkU3RhcnR1cERhdGEoKXt0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfWdldExpY2Vuc2VT''@;'; put 'put ''aXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVfaWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJy''@;'; put 'put ''b3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKHY9PnshMT09PXYmJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJu''@;'; put 'put ''KCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFy''@;'; put 'put ''IGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGVlKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbih2''@;'; put 'put ''PT57diYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKHYpKX0pLmNhdGNoKHY9PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksZih2KX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkp''@;'; put 'put ''fSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCB2PWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRG''@;'; put 'put ''b2xkZXJDb250ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoTT0+e00uZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxNPT57TS5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2''@;'; put 'put ''YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdixmPSExO2lmKHR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiKXtjb25zdCBNPXlpZWxkIGQuYXBwTG9jQ2hlY2soYSk7Zj1NLmZvdW5kLHY9TS5lcnJvck1lc3NhZ2V9ZWxzZSBmPXlpZWxkIGQuYXBwTG9jQ2hl''@;'; put 'put ''Y2tQcmVBeGlvc2RBZGFwdGVyKGEpO2Y/ZC52aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpLnRoZW4oTT0+e00/ZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTooZC5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95''@;'; put 'put ''IikpfSxNPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgbG9va2luZyBmb3IgdGhlIGZpbGU6IG1ha2VkYXRhLnNhcyIsTSl9KTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsKHZ8fCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBh''@;'; put 'put ''cHBMb2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURBUFRFUiBjb25maWd1cmF0aW9uLiIpK2BcbkFwcExvYzogJHthfWApfSkoKX12aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgo''@;'; put 'put ''ZCxoKT0+e2NvbnN0IGY9YS5nZXRTYXNqc0NvbmZpZygpLHY9YCR7Zi5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlckJ5UGF0aCh2KS5zdWJzY3JpYmUoTT0+e2NvbnN0IEQ9TS5pZDtEfHwoY29uc29sZS5lcnJvcihgRm9sZGVyIElEIGlzIG5vdCBw''@;'; put 'put ''cmVzZW50LiAke3Z9YCxmKSxkKCExKSksYS5zYXNWaXlhU2VydmljZS5nZXRGb2xkZXJNZW1iZXJzKEQpLnN1YnNjcmliZShaPT57Wi5pdGVtcy5zb21lKHJlPT4ibWFrZWRhdGEiPT09cmUubmFtZSk/ZCghMSk6ZCghMCl9LFo9Pntjb25zb2xlLmVycm9yKCJFcnJvciBnZXR0aW5nIGZvbGRl''@;'; put 'put ''ciBjb250ZW50cyIsWiksaCgpfSl9LE09Pntjb25zb2xlLndhcm4oIkVycm9yIGdldHRpbmcgZm9sZGVyIGluZm8iLE0pLGgoTSl9KX0pfSkoKX1hcHBMb2NDaGVjayhhKXt2YXIgZD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmLHYpe2xl''@;'; put 'put ''dCBELE09IiI7dHJ5e0Q9eWllbGQgZC5zYXNqc0FkYXB0ZXIuZ2V0Rm9sZGVyKGEpfWNhdGNoKFopeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09Wi5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoe2ZvdW5kOiExfSkpOk09Ik5vdEZvdW5kZUVy''@;'; put 'put ''cm9yIj09PVoubmFtZT9aLm1lc3NhZ2U6IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIn1pZihNLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJu''@;'; put 'put ''KE0pLGYoe2ZvdW5kOiExLGVycm9yTWVzc2FnZTpNfSk7Zih7Zm91bmQ6ITB9KX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnts''@;'; put 'put ''ZXQgdj0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCkudGhlbihNPT4oNDA0PT09TS5zdGF0dXMmJih2PSEwKSxNLnRleHQoKSkpLnRoZW4oTT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKE0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRo''@;'; put 'put ''aXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmln''@;'; put 'put ''YXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtsZXQgRD1udWxsO3RyeXtEPUpTT04ucGFyc2UoTSl9Y2F0Y2h7fWlmKEQmJkQuaHR0cFN0YXR1c0NvZGUmJjQwND09PUQuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKE09PntkKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4r''@;'; put 'put ''YWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0''@;'; put 'put ''U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBl''@;'; put 'put ''KCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZl''@;'; put 'put ''clR5cGUpe2Nhc2UgQjAuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNWaXlhO2Nhc2UgQjAuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nhc2UgQjAuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fWdldEZpbGVDb250ZW50KGEsZCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldEZp''@;'; put 'put ''bGVDb250ZW50KGEsZCl9dXBkYXRlRmlsZUNvbnRlbnQoYSxkLGgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGRhdGVGaWxlQ29udGVudChhLGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoUTgpLHhyKF9XKSx4cih2YykseHIo''@;'; put 'put ''VmNlKSx4cihUVykseHIoU2QpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksU2Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVjdG9yPWF9''@;'; put 'put ''bG9nKGEsZCl7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihkP2NvbnNvbGUubG9nKGEsZCk6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZCl7Y29uc29sZS5lcnJvcihhLGQpfWxvZ1JlcXVlc3REYXRhKGEsZCl7aWYodGhpcy5sb2coIi0tLSBBZGFw''@;'; put 'put ''dGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coYSksZCl7Zm9yKGxldCBoIG9mIE9iamVjdC5rZXlzKGQpKXRoaXMubG9nKGgsZFtoXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZyl7Y29uc3QgYT10aGlzLmluamVjdG9yLmdldChCcyk7dGhpcy5zYXNqc0NvbmZpZz1hLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQmNlPWZ1bmN0aW9uIHBBZShjLGwpe3JldHVybiBjPT09bHx8YyE9YyYmbCE9bH0sZUw9ZnVuY3Rpb24gZ0FlKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspaWYoQmNl''@;'; put 'put ''KGNbYV1bMF0sbCkpcmV0dXJuIGE7cmV0dXJuLTF9O3ZhciB2QWU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiB2eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX12''@;'; put 'put ''eS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaEFlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sdnkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBiQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6''@;'; put 'put ''dkFlLmNhbGwobCxhLDEpLC0tdGhpcy5zaXplLDApKX0sdnkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBfQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIGE8MD92b2lkIDA6bFthXVsxXX0sdnkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBDQWUoYyl7cmV0dXJuIGVM''@;'; put 'put ''KHRoaXMuX19kYXRhX18sYyk+LTF9LHZ5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTUFlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXyxkPWVMKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IHRMPXZ5LGpjZT0ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIFBBZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHZwPWpjZXx8UEFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgp''@;'; put 'put ''LHVtPXZwLlN5bWJvbDt2YXIgemNlPU9iamVjdC5wcm90b3R5cGUsTkFlPXpjZS5oYXNPd25Qcm9wZXJ0eSxWQWU9emNlLnRvU3RyaW5nLG94PXVtP3VtLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgVUFlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFVjZT11bT91bS50b1N0cmluZ1Rh''@;'; put 'put ''Zzp2b2lkIDA7Y29uc3QgYnk9ZnVuY3Rpb24gJEFlKGMpe3JldHVybiBudWxsPT1jP3ZvaWQgMD09PWM/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlVjZSYmVWNlIGluIE9iamVjdChjKT9mdW5jdGlvbiBCQWUoYyl7dmFyIGw9TkFlLmNhbGwoYyxveCksYT1jW294XTt0''@;'; put 'put ''cnl7Y1tveF09dm9pZCAwO3ZhciBkPSEwfWNhdGNoe312YXIgaD1WQWUuY2FsbChjKTtyZXR1cm4gZCYmKGw/Y1tveF09YTpkZWxldGUgY1tveF0pLGh9KGMpOmZ1bmN0aW9uIFpBZShjKXtyZXR1cm4gVUFlLmNhbGwoYyl9KGMpfSxzeD1mdW5jdGlvbiBLQWUoYyl7dmFyIGw9dHlwZW9mIGM7''@;'; put 'put ''cmV0dXJuIG51bGwhPWMmJigib2JqZWN0Ij09bHx8ImZ1bmN0aW9uIj09bCl9LFpjZT1mdW5jdGlvbiBla2UoYyl7aWYoIXN4KGMpKXJldHVybiExO3ZhciBsPWJ5KGMpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2Jq''@;'; put 'put ''ZWN0IEFzeW5jRnVuY3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09bH0sQVc9dnBbIl9fY29yZS1qc19zaGFyZWRfXyJdO3ZhciBXY2U9ZnVuY3Rpb24oKXt2YXIgYz0vW14uXSskLy5leGVjKEFXJiZBVy5rZXlzJiZBVy5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGM/IlN5bWJvbChz''@;'; put 'put ''cmMpXzEuIitjOiIifSgpO3ZhciBha2U9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IG43PWZ1bmN0aW9uIG9rZShjKXtpZihudWxsIT1jKXt0cnl7cmV0dXJuIGFrZS5jYWxsKGMpfWNhdGNoe310cnl7cmV0dXJuIGMrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIGxrZT0vXlxb''@;'; put 'put ''b2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxma2U9UmVnRXhwKCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3Bl''@;'; put 'put ''cnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25zdCBna2U9ZnVuY3Rpb24gcGtlKGMpe3JldHVybiEoIXN4KGMpfHxmdW5jdGlvbiBua2UoYyl7cmV0dXJuISFXY2UmJldjZSBpbiBjfShjKSkmJihaY2UoYyk/ZmtlOmxrZSkudGVz''@;'; put 'put ''dChuNyhjKSl9LHI3PWZ1bmN0aW9uIGJrZShjLGwpe3ZhciBhPWZ1bmN0aW9uIG1rZShjLGwpe3JldHVybiBjPy5bbF19KGMsbCk7cmV0dXJuIGdrZShhKT9hOnZvaWQgMH0sbHg9cjcodnAsIk1hcCIpLGN4PXI3KE9iamVjdCwiY3JlYXRlIik7dmFyIFRrZT1PYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5O3ZhciBJa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX15eS5wcm90b3R5''@;'; put 'put ''cGUuY2xlYXI9ZnVuY3Rpb24gd2tlKCl7dGhpcy5fX2RhdGFfXz1jeD9jeChudWxsKTp7fSx0aGlzLnNpemU9MH0seXkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBTa2UoYyl7dmFyIGw9dGhpcy5oYXMoYykmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2NdO3JldHVybiB0aGlzLnNpemUtPWw/''@;'; put 'put ''MTowLGx9LHl5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gQWtlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187aWYoY3gpe3ZhciBhPWxbY107cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gVGtlLmNhbGwobCxjKT9sW2NdOnZvaWQgMH0seXkucHJv''@;'; put 'put ''dG90eXBlLmhhcz1mdW5jdGlvbiBSa2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztyZXR1cm4gY3g/dm9pZCAwIT09bFtjXTpJa2UuY2FsbChsLGMpfSx5eS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFBrZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5o''@;'; put 'put ''YXMoYyk/MDoxLGFbY109Y3gmJnZvaWQgMD09PWw/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmwsdGhpc307Y29uc3QgWWNlPXl5LG5MPWZ1bmN0aW9uIGprZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFZrZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3Ry''@;'; put 'put ''aW5nIj09bHx8Im51bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVhbiI9PWw/Il9fcHJvdG9fXyIhPT1jOm51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBfeShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0''@;'; put 'put ''aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1feS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSGtlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgWWNlLG1hcDpuZXcobHh8fHRMKSxzdHJpbmc6bmV3IFljZX19''@;'; put 'put ''LF95LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gemtlKGMpe3ZhciBsPW5MKHRoaXMsYykuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LF95LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gWmtlKGMpe3JldHVybiBuTCh0aGlzLGMpLmdldChjKX0sX3kucHJvdG90eXBlLmhh''@;'; put 'put ''cz1mdW5jdGlvbiBZa2UoYyl7cmV0dXJuIG5MKHRoaXMsYykuaGFzKGMpfSxfeS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uICRrZShjLGwpe3ZhciBhPW5MKHRoaXMsYyksZD1hLnNpemU7cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplKz1hLnNpemU9PWQ/MDoxLHRoaXN9O2NvbnN0IGtXPV95''@;'; put 'put ''O2Z1bmN0aW9uIHd5KGMpe3ZhciBsPXRoaXMuX19kYXRhX189bmV3IHRMKGMpO3RoaXMuc2l6ZT1sLnNpemV9d3kucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEVBZSgpe3RoaXMuX19kYXRhX189bmV3IHRMLHRoaXMuc2l6ZT0wfSx3eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIEFBZShj''@;'; put 'put ''KXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9bC5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZT1sLnNpemUsYX0sd3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiBEQWUoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGMpfSx3eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJBZShjKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fX2RhdGFfXy5oYXMoYyl9LHd5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWGtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgdEwpe3ZhciBkPWEuX19kYXRhX187aWYoIWx4fHxkLmxlbmd0aDwxOTkpcmV0dXJuIGQucHVzaChbYyxsXSksdGhpcy5zaXpl''@;'; put 'put ''PSsrYS5zaXplLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5ldyBrVyhkKX1yZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemU9YS5zaXplLHRoaXN9O2NvbnN0IFFrZT13eTt2YXIgbkRlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBjPXI3KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gYyh7fSwi''@;'; put 'put ''Iix7fSksY31jYXRjaHt9fSgpO2NvbnN0IEdjZT1uRGUsJGNlPWZ1bmN0aW9uIHJEZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJkdjZT9HY2UoYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1hfTt2YXIgYURlPU9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgS2NlPWZ1bmN0aW9uIG9EZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIWFEZS5jYWxsKGMsbCl8fCFCY2UoZCxhKXx8dm9pZCAwPT09YSYmIShsIGluIGMpKSYmJGNlKGMsbCxhKX0sckw9ZnVuY3Rpb24gc0RlKGMsbCxhLGQpe3ZhciBoPSFhO2F8fChh''@;'; put 'put ''PXt9KTtmb3IodmFyIGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBNPWxbZl0sRD1kP2QoYVtNXSxjW01dLE0sYSxjKTp2b2lkIDA7dm9pZCAwPT09RCYmKEQ9Y1tNXSksaD8kY2UoYSxNLEQpOktjZShhLE0sRCl9cmV0dXJuIGF9LEN5PWZ1bmN0aW9uIHVEZShjKXtyZXR1cm4gbnVsbCE9''@;'; put 'put ''YyYmIm9iamVjdCI9PXR5cGVvZiBjfSxxY2U9ZnVuY3Rpb24gaERlKGMpe3JldHVybiBDeShjKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWJ5KGMpfTt2YXIgWGNlPU9iamVjdC5wcm90b3R5cGUsZkRlPVhjZS5oYXNPd25Qcm9wZXJ0eSxwRGU9WGNlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGdE''@;'; put 'put ''ZT1xY2UoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9xY2U6ZnVuY3Rpb24oYyl7cmV0dXJuIEN5KGMpJiZmRGUuY2FsbChjLCJjYWxsZWUiKSYmIXBEZS5jYWxsKGMsImNhbGxlZSIpfTtjb25zdCBtRGU9Z0RlLFN5PUFycmF5LmlzQXJyYXk7dmFyIEpjZT0ib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFFjZT1KY2UmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxldWU9UWNlJiZRY2UuZXhwb3J0cz09PUpjZT92cC5CdWZmZXI6dm9pZCAwO2NvbnN0''@;'; put 'put ''IHR1ZT0oZXVlP2V1ZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiBiRGUoKXtyZXR1cm4hMX07dmFyIE1EZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgRURlPWZ1bmN0aW9uIHhEZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVt''@;'; put 'put ''YmVyIj09YXx8InN5bWJvbCIhPWEmJk1EZS50ZXN0KGMpKSYmYz4tMSYmYyUxPT0wJiZjPGx9LG51ZT1mdW5jdGlvbiBBRGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBiYz17fTtiY1siW29iamVjdCBGbG9hdDMy''@;'; put 'put ''QXJyYXldIl09YmNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWJjWyJbb2JqZWN0IEludDhBcnJheV0iXT1iY1siW29iamVjdCBJbnQxNkFycmF5XSJdPWJjWyJbb2JqZWN0IEludDMyQXJyYXldIl09YmNbIltvYmplY3QgVWludDhBcnJheV0iXT1iY1siW29iamVjdCBVaW50OENsYW1wZWRB''@;'; put 'put ''cnJheV0iXT1iY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1iY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxiY1siW29iamVjdCBBcmd1bWVudHNdIl09YmNbIltvYmplY3QgQXJyYXldIl09YmNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09YmNbIltvYmplY3QgQm9vbGVhbl0iXT1iY1si''@;'; put 'put ''W29iamVjdCBEYXRhVmlld10iXT1iY1siW29iamVjdCBEYXRlXSJdPWJjWyJbb2JqZWN0IEVycm9yXSJdPWJjWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWJjWyJbb2JqZWN0IE1hcF0iXT1iY1siW29iamVjdCBOdW1iZXJdIl09YmNbIltvYmplY3QgT2JqZWN0XSJdPWJjWyJbb2JqZWN0IFJlZ0V4''@;'; put 'put ''cF0iXT1iY1siW29iamVjdCBTZXRdIl09YmNbIltvYmplY3QgU3RyaW5nXSJdPWJjWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgRFc9ZnVuY3Rpb24gdEllKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBydWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZl''@;'; put 'put ''eHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx1eD1ydWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxJVz11eCYmdXguZXhwb3J0cz09PXJ1ZSYmamNlLnByb2Nlc3M7Y29uc3QgTXk9ZnVuY3Rpb24oKXt0cnl7cmV0''@;'; put 'put ''dXJuIHV4JiZ1eC5yZXF1aXJlJiZ1eC5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fElXJiZJVy5iaW5kaW5nJiZJVy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgaXVlPU15JiZNeS5pc1R5cGVkQXJyYXk7Y29uc3QgYUllPWl1ZT9EVyhpdWUpOmZ1bmN0aW9uIFFEZShjKXtyZXR1cm4g''@;'; put 'put ''Q3koYykmJm51ZShjLmxlbmd0aCkmJiEhYmNbYnkoYyldfTt2YXIgc0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgYXVlPWZ1bmN0aW9uIGxJZShjLGwpe3ZhciBhPVN5KGMpLGQ9IWEmJm1EZShjKSxoPSFhJiYhZCYmdHVlKGMpLGY9IWEmJiFkJiYhaCYmYUllKGMp''@;'; put 'put ''LHY9YXx8ZHx8aHx8ZixNPXY/ZnVuY3Rpb24gbERlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9QXJyYXkoYyk7KythPGM7KWRbYV09bChhKTtyZXR1cm4gZH0oYy5sZW5ndGgsU3RyaW5nKTpbXSxEPU0ubGVuZ3RoO2Zvcih2YXIgWiBpbiBjKShsfHxzSWUuY2FsbChjLFopKSYmKCF2fHwhKCJsZW5n''@;'; put 'put ''dGgiPT1afHxoJiYoIm9mZnNldCI9PVp8fCJwYXJlbnQiPT1aKXx8ZiYmKCJidWZmZXIiPT1afHwiYnl0ZUxlbmd0aCI9PVp8fCJieXRlT2Zmc2V0Ij09Wil8fEVEZShaLEQpKSkmJk0ucHVzaChaKTtyZXR1cm4gTX07dmFyIGNJZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IFJXPWZ1bmN0aW9u''@;'; put 'put ''IHVJZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8Y0llKX0sb3VlPWZ1bmN0aW9uIGRJZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYyhsKGEpKX19LGZJZT1vdWUoT2JqZWN0LmtleXMsT2Jq''@;'; put 'put ''ZWN0KTt2YXIgZ0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3Qgc3VlPWZ1bmN0aW9uIGJJZShjKXtyZXR1cm4gbnVsbCE9YyYmbnVlKGMubGVuZ3RoKSYmIVpjZShjKX0sTFc9ZnVuY3Rpb24geUllKGMpe3JldHVybiBzdWUoYyk/YXVlKGMpOmZ1bmN0aW9uIG1JZShj''@;'; put 'put ''KXtpZighUlcoYykpcmV0dXJuIGZJZShjKTt2YXIgbD1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWdJZS5jYWxsKGMsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmwucHVzaChhKTtyZXR1cm4gbH0oYyl9O3ZhciB4SWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBUSWU9''@;'; put 'put ''ZnVuY3Rpb24gRUllKGMpe2lmKCFzeChjKSlyZXR1cm4gZnVuY3Rpb24gQ0llKGMpe3ZhciBsPVtdO2lmKG51bGwhPWMpZm9yKHZhciBhIGluIE9iamVjdChjKSlsLnB1c2goYSk7cmV0dXJuIGx9KGMpO3ZhciBsPVJXKGMpLGE9W107Zm9yKHZhciBkIGluIGMpImNvbnN0cnVjdG9yIj09ZCYm''@;'; put 'put ''KGx8fCF4SWUuY2FsbChjLGQpKXx8YS5wdXNoKGQpO3JldHVybiBhfSxPVz1mdW5jdGlvbiBBSWUoYyl7cmV0dXJuIHN1ZShjKT9hdWUoYywhMCk6VEllKGMpfTt2YXIgbHVlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsY3Vl''@;'; put 'put ''PWx1ZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLHV1ZT1jdWUmJmN1ZS5leHBvcnRzPT09bHVlP3ZwLkJ1ZmZlcjp2b2lkIDAsZHVlPXV1ZT91dWUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IGh1ZT1mdW5jdGlvbiBOSWUoKXty''@;'; put 'put ''ZXR1cm5bXX07dmFyIEJJZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGZ1ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGpJZT1mdWU/ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWM/W106KGM9T2JqZWN0KGMpLGZ1bmN0aW9uIEZJZShjLGwpe2Zvcih2YXIg''@;'; put 'put ''YT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPTAsZj1bXTsrK2E8ZDspe3ZhciB2PWNbYV07bCh2LGEsYykmJihmW2grK109dil9cmV0dXJuIGZ9KGZ1ZShjKSxmdW5jdGlvbihsKXtyZXR1cm4gQkllLmNhbGwoYyxsKX0pKX06aHVlO2NvbnN0IFBXPWpJZSxwdWU9ZnVuY3Rpb24gWkllKGMs''@;'; put 'put ''bCl7Zm9yKHZhciBhPS0xLGQ9bC5sZW5ndGgsaD1jLmxlbmd0aDsrK2E8ZDspY1toK2FdPWxbYV07cmV0dXJuIGN9LGd1ZT1vdWUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIEdJZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIgbD1b''@;'; put 'put ''XTtjOylwdWUobCxQVyhjKSksYz1ndWUoYyk7cmV0dXJuIGx9Omh1ZTtjb25zdCBtdWU9R0llLHZ1ZT1mdW5jdGlvbiBxSWUoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIFN5KGMpP2Q6cHVlKGQsYShjKSl9LEpJZT1mdW5jdGlvbiBYSWUoYyl7cmV0dXJuIHZ1ZShjLExXLFBXKX0sZVJlPWZ1''@;'; put 'put ''bmN0aW9uIFFJZShjKXtyZXR1cm4gdnVlKGMsT1csbXVlKX0sRlc9cjcodnAsIkRhdGFWaWV3IiksSFc9cjcodnAsIlByb21pc2UiKSxOVz1yNyh2cCwiU2V0IiksVlc9cjcodnAsIldlYWtNYXAiKTt2YXIgYnVlPSJbb2JqZWN0IE1hcF0iLHl1ZT0iW29iamVjdCBQcm9taXNlXSIsX3VlPSJb''@;'; put 'put ''b2JqZWN0IFNldF0iLHd1ZT0iW29iamVjdCBXZWFrTWFwXSIsQ3VlPSJbb2JqZWN0IERhdGFWaWV3XSIsb1JlPW43KEZXKSxzUmU9bjcobHgpLGxSZT1uNyhIVyksY1JlPW43KE5XKSx1UmU9bjcoVlcpLGk3PWJ5OyhGVyYmaTcobmV3IEZXKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1DdWV8fGx4''@;'; put 'put ''JiZpNyhuZXcgbHgpIT1idWV8fEhXJiZpNyhIVy5yZXNvbHZlKCkpIT15dWV8fE5XJiZpNyhuZXcgTlcpIT1fdWV8fFZXJiZpNyhuZXcgVlcpIT13dWUpJiYoaTc9ZnVuY3Rpb24oYyl7dmFyIGw9YnkoYyksYT0iW29iamVjdCBPYmplY3RdIj09bD9jLmNvbnN0cnVjdG9yOnZvaWQgMCxkPWE/''@;'; put 'put ''bjcoYSk6IiI7aWYoZClzd2l0Y2goZCl7Y2FzZSBvUmU6cmV0dXJuIEN1ZTtjYXNlIHNSZTpyZXR1cm4gYnVlO2Nhc2UgbFJlOnJldHVybiB5dWU7Y2FzZSBjUmU6cmV0dXJuIF91ZTtjYXNlIHVSZTpyZXR1cm4gd3VlfXJldHVybiBsfSk7Y29uc3QgQlc9aTc7dmFyIGhSZT1PYmplY3QucHJv''@;'; put 'put ''dG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IFN1ZT12cC5VaW50OEFycmF5LGpXPWZ1bmN0aW9uIG1SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgU3VlKGwpLnNldChuZXcgU3VlKGMpKSxsfTt2YXIgeVJlPS9cdyokLzt2YXIgTXVlPXVt''@;'; put 'put ''P3VtLnByb3RvdHlwZTp2b2lkIDAseHVlPU11ZT9NdWUudmFsdWVPZjp2b2lkIDA7Y29uc3QgWVJlPWZ1bmN0aW9uIFdSZShjLGwsYSl7dmFyIGQ9Yy5jb25zdHJ1Y3Rvcjtzd2l0Y2gobCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIGpXKGMpO2Nhc2UiW29iamVjdCBCb29s''@;'; put 'put ''ZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGQoK2MpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiB2UmUoYyxsKXt2YXIgYT1sP2pXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5i''@;'; put 'put ''eXRlTGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVp''@;'; put 'put ''bnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gTVJlKGMsbCl7dmFyIGE9bD9qVyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBj''@;'; put 'put ''LmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMubGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZDtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZChjKTtjYXNlIltvYmpl''@;'; put 'put ''Y3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIF9SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLnNvdXJjZSx5UmUuZXhlYyhjKSk7cmV0dXJuIGwubGFzdEluZGV4PWMubGFzdEluZGV4LGx9KGMpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gQ1JlKGMpe3Jl''@;'; put 'put ''dHVybiB4dWU/T2JqZWN0KHh1ZS5jYWxsKGMpKTp7fX0oYyl9fTt2YXIgRXVlPU9iamVjdC5jcmVhdGUsR1JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31yZXR1cm4gZnVuY3Rpb24obCl7aWYoIXN4KGwpKXJldHVybnt9O2lmKEV1ZSlyZXR1cm4gRXVlKGwpO2MucHJvdG90eXBlPWw7dmFy''@;'; put 'put ''IGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQgMCxhfX0oKTtjb25zdCAkUmU9R1JlO3ZhciBUdWU9TXkmJk15LmlzTWFwO2NvbnN0IHRMZT1UdWU/RFcoVHVlKTpmdW5jdGlvbiBKUmUoYyl7cmV0dXJuIEN5KGMpJiYiW29iamVjdCBNYXBdIj09QlcoYyl9O3ZhciBBdWU9TXkmJk15''@;'; put 'put ''LmlzU2V0O2NvbnN0IG9MZT1BdWU/RFcoQXVlKTpmdW5jdGlvbiByTGUoYyl7cmV0dXJuIEN5KGMpJiYiW29iamVjdCBTZXRdIj09QlcoYyl9O3ZhciBrdWU9IltvYmplY3QgQXJndW1lbnRzXSIsRHVlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSXVlPSJbb2JqZWN0IE9iamVjdF0iLG9jPXt9O29j''@;'; put 'put ''W2t1ZV09b2NbIltvYmplY3QgQXJyYXldIl09b2NbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b2NbIltvYmplY3QgRGF0YVZpZXddIl09b2NbIltvYmplY3QgQm9vbGVhbl0iXT1vY1siW29iamVjdCBEYXRlXSJdPW9jWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vY1siW29iamVjdCBGbG9h''@;'; put 'put ''dDY0QXJyYXldIl09b2NbIltvYmplY3QgSW50OEFycmF5XSJdPW9jWyJbb2JqZWN0IEludDE2QXJyYXldIl09b2NbIltvYmplY3QgSW50MzJBcnJheV0iXT1vY1siW29iamVjdCBNYXBdIl09b2NbIltvYmplY3QgTnVtYmVyXSJdPW9jW0l1ZV09b2NbIltvYmplY3QgUmVnRXhwXSJdPW9jWyJb''@;'; put 'put ''b2JqZWN0IFNldF0iXT1vY1siW29iamVjdCBTdHJpbmddIl09b2NbIltvYmplY3QgU3ltYm9sXSJdPW9jWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b2NbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b2NbIltvYmplY3QgVWludDE2QXJyYXldIl09b2NbIltvYmplY3QgVWludDMyQXJy''@;'; put 'put ''YXldIl09ITAsb2NbIltvYmplY3QgRXJyb3JdIl09b2NbRHVlXT1vY1siW29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IExMZT1mdW5jdGlvbiBpTChjLGwsYSxkLGgsZil7dmFyIHYsTT0xJmwsRD0yJmwsWj00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0''@;'; put 'put ''dXJuIHY7aWYoIXN4KGMpKXJldHVybiBjO3ZhciByZT1TeShjKTtpZihyZSl7aWYodj1mdW5jdGlvbiBmUmUoYyl7dmFyIGw9Yy5sZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZoUmUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRl''@;'; put 'put ''eD1jLmluZGV4LGEuaW5wdXQ9Yy5pbnB1dCksYX0oYyksIU0pcmV0dXJuIGZ1bmN0aW9uIE9JZShjLGwpe3ZhciBhPS0xLGQ9Yy5sZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIGNlPUJXKGMpLGJlPWNlPT1EdWV8fCJb''@;'; put 'put ''b2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWNlO2lmKHR1ZShjKSlyZXR1cm4gZnVuY3Rpb24gUkllKGMsbCl7aWYobClyZXR1cm4gYy5zbGljZSgpO3ZhciBhPWMubGVuZ3RoLGQ9ZHVlP2R1ZShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsTSk7aWYo''@;'; put 'put ''Y2U9PUl1ZXx8Y2U9PWt1ZXx8YmUmJiFoKXtpZih2PUR8fGJlP3t9OmZ1bmN0aW9uIEtSZShjKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYy5jb25zdHJ1Y3Rvcnx8UlcoYyk/e306JFJlKGd1ZShjKSl9KGMpLCFNKXJldHVybiBEP2Z1bmN0aW9uICRJZShjLGwpe3JldHVybiByTChjLG11''@;'; put 'put ''ZShjKSxsKX0oYyxmdW5jdGlvbiBrSWUoYyxsKXtyZXR1cm4gYyYmckwobCxPVyhsKSxjKX0odixjKSk6ZnVuY3Rpb24gekllKGMsbCl7cmV0dXJuIHJMKGMsUFcoYyksbCl9KGMsZnVuY3Rpb24gX0llKGMsbCl7cmV0dXJuIGMmJnJMKGwsTFcobCksYyl9KHYsYykpfWVsc2V7aWYoIW9jW2Nl''@;'; put 'put ''XSlyZXR1cm4gaD9jOnt9O3Y9WVJlKGMsY2UsTSl9fWZ8fChmPW5ldyBRa2UpO3ZhciBFZT1mLmdldChjKTtpZihFZSlyZXR1cm4gRWU7Zi5zZXQoYyx2KSxvTGUoYyk/Yy5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXt2LmFkZChpTChydCxsLGEscnQsYyxmKSl9KTp0TGUoYykmJmMuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihydCxwdCl7di5zZXQocHQsaUwocnQsbCxhLHB0LGMsZikpfSk7dmFyIHFlPXJlP3ZvaWQgMDooWj9EP2VSZTpKSWU6RD9PVzpMVykoYyk7cmV0dXJuIGZ1bmN0aW9uIGVEZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0s''@;'; put 'put ''YSxjKTspO30ocWV8fGMsZnVuY3Rpb24ocnQscHQpe3FlJiYocnQ9Y1twdD1ydF0pLEtjZSh2LHB0LGlMKHJ0LGwsYSxwdCxjLGYpKX0pLHZ9LGFMPWZ1bmN0aW9uIEZMZShjKXtyZXR1cm4gTExlKGMsNSl9O3ZhciBITGU9eSg3ODg1NSk7bGV0IFN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTAsdGhpcy5pc01pY3Jvc29mdD0hMSx0aGlzLmlzTWljcm9zb2Z0PXRoaXMuaXNJRW9yRURHRSgpLGNvbnNvbGUubG9nKCJJcyBJRSBvciBFZGdlPyIsdGhpcy5pc01pY3Jv''@;'; put 'put ''c29mdCl9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShhLGQ9ImRheXMiKXtsZXQgaCxmPTA7aD1hIGluc3RhbmNlb2YgRGF0ZT9hOm5ldyBEYXRlKGEpLGY9bmV3IERhdGUoRGF0ZS5VVEMoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxoLmdldEhvdXJzKCksaC5nZXRN''@;'; put 'put ''aW51dGVzKCksaC5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgRD1mKzMxNTYxOTJlNTtzd2l0Y2goZCl7Y2FzZSJkYXlzIjp7bGV0IFo9RC84NjRlNTtyZXR1cm4gWj1NYXRoLmFicyhaKSxaPU1hdGguZmxvb3IoWiksWn1jYXNlInNlY29uZHMiOnJldHVybiBELzFlM31yZXR1cm4g''@;'; put 'put ''MH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZD0iZGF5cyIpe2lmKCJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VGbG9hdChhKSksInNlY29uZHMiPT09ZCl7bGV0IE09MWUzKmEtMzE1NjE5MmU1O3JldHVybiBNKz02MCpuZXcgRGF0ZShNKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxu''@;'; put 'put ''ZXcgRGF0ZShNKX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqYS0zMTU2MTkyZTUpfXRyZWVPbkZpbHRlcihhLGQpe2xldCBoPWEuc2VhcmNoU3RyaW5nP2Euc2VhcmNoU3RyaW5nOiIiLGY9ZC5zcGxpdCgiLiIpWzBdLHY9ZC5zcGxpdCgiLiIpWzFdLE09ZisiQWxsIjthW2ZdJiYoYVtNXXx8KGFb''@;'; put 'put ''TV09dGhpcy5kZWVwQ2xvbmUoYVtmXSkpLGFbZl09dGhpcy5kZWVwQ2xvbmUoYVtNXSksaC5sZW5ndGg+MCYmKGFbZl09YVtmXS5maWx0ZXIodj9EPT5EW3ZdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKTpEPT5ELnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/YS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKT8oZi5oaWRkZW49ITEsZi5pbkZvcmVncm91bmQ9ITApOihmLmhpZGRlbj0hMCxmLmluRm9yZWdyb3Vu''@;'; put 'put ''ZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLHRoaXMuZGlzcGxheUxpYnJhcmllcyhhKSl9ZGlzcGxheUxpYnJhcmllcyhhLGQpe2Q/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5''@;'; put 'put ''Rm9yZWdyb3VuZChhKSk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aCYmaCE9PXRoaXMuc2hvd25MaWJyYXJpZXM7aCsrKWFbaF0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQoYSl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5pbkZvcmVncm91bmQ9ITF9bWV0''@;'; put 'put ''YU9iamVjdE9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksYS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKXx8KGYuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSl9cmVz''@;'; put 'put ''ZXRBcnJheUZpbHRlcihhKXthLmZvckVhY2goZD0+e2QuaGlkZGVuPSExLGQuaW5Gb3JlZ3JvdW5kJiZkZWxldGUgZC5pbkZvcmVncm91bmR9KX1pc0lFb3JFREdFKCl7dmFyIGE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGEuaW5kZXhPZigiTVNJRSAiKT4wfHwoYS5pbmRl''@;'; put 'put ''eE9mKCJUcmlkZW50LyIpPjA/KGEuaW5kZXhPZigicnY6IiksITApOmEuaW5kZXhPZigiRWRnZS8iKT4wKX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoYSxkPSExKXtyZXR1cm4gZCYmKGE9dGhpcy5kZWVwQ2xvbmUoYSkpLGEubWFwKGg9Pk9iamVjdC5rZXlzKGgpLm1hcChmPT5oW2ZdKSl9YWRk''@;'; put 'put ''TGVhZGluZ1plcm8oYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGEubGVuZ3RoPDI/IjAiK2E6YX1kZWxldGVLZXlzQW5kSGFzaChhLGQsaD0hMCl7Y29uc3QgZj1oP3RoaXMuZGVlcENsb25lKGEpOmE7Zm9yKGxldCB2IG9mIGQpZGVsZXRlIGZbdl07cmV0''@;'; put 'put ''dXJuIEhMZShKU09OLnN0cmluZ2lmeShmKSkudG9TdHJpbmcoKX1kb3dubG9hZFRleHRGaWxlKGEsZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aC5zZXRBdHRyaWJ1dGUoImhyZWYiLCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBv''@;'; put 'put ''bmVudChkKSksaC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixhKyIudHh0IiksaC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGguY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfWNvbnZlcnRBcnJheVZhbHVlcyhhLGQpe2lmKGEu''@;'; put 'put ''bGVuZ3RoPDEpcmV0dXJuW107c3dpdGNoKGQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gYS5tYXAoaD0+MSpoKTtjYXNlInN0cmluZyI6cmV0dXJuIGEudG9TdHJpbmcoKS5zcGxpdCgiLCIpfX1pc1N0cmVhbWluZ1ZpeWEoKXtyZXR1cm4iU0FTVklZQSI9PT10aGlzLnNhc1NlcnZpY2UuZ2V0U2Vy''@;'; put 'put ''dmVyVHlwZSgpJiYhKCFsb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiP19maWxlPSIpfHwhbG9jYXRpb24ucGF0aG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiL3Nhc2pvYmV4ZWN1dGlvbiIpKX1kZWJvdW5jZUNhbGwoYSxkKXtjbGVhclRpbWVvdXQodGhpcy5k''@;'; put 'put ''ZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoZCxhKX1kZWVwQ2xvbmUoYSl7cmV0dXJuIGFMKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5sb2dnZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLl9saWNlbmNlU3RhdGU9eVcsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19h''@;'; put 'put ''bGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlf''@;'; put 'put ''bGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNl''@;'; put 'put ''bmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6T28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVfaWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcg''@;'; put 'put ''ZWkobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgZWkoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgZWkoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBlaSghMSksdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgZWkobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVy''@;'; put 'put ''PW5ldyBlaSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgZWkobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IGVpKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IGVpKHRoaXMuX2xpY2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIu''@;'; put 'put ''c3Vic2NyaWJlKEQ9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJm1pc3NtYXRjaElkPSR7RH0mZm9yY2U9dHJ1ZWA7dGhpcy5saWNlbmNlUHJvYmxl''@;'; put 'put ''bS5uZXh0KFopLHRoaXMuZGVhY3RpdmF0ZUFwcChaKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGljZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90''@;'; put 'put ''TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVzKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1sw''@;'; put 'put ''XS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3Qgdj0nRXJyb3IgZ2V0dGluZyAiR2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29s''@;'; put 'put ''ZS5lcnJvcih2KSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYSh2KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9''@;'; put 'put ''PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tFWT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZB''@;'; put 'put ''VElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXt5aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihNLGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''TSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtjb25zdCBEPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke019YDtjb25zb2xlLmVycm9yKEQpO2NvbnN0IFo9YC9saWNlbnNpbmcva2V5P2Vycm9yPWlu''@;'; put 'put ''dmFsaWQmZGV0YWlscz0ke2J0b2EoRCl9JmZvcmNlPXRydWVgO2gubGljZW5jZVByb2JsZW0ubmV4dChaKSxoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFopLHNldFRpbWVvdXQoKCk9PmguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQpfSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0''@;'; put 'put ''ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCB2PXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO3Z8fCh2PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdl''@;'; put 'put ''dERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQodiksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv''@;'; put 'put ''bmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpNLGRheXNUb0V4cGlyeTpEfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1ELHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChEKSxEPD0wKXJldHVybiBjb25zb2xl''@;'; put 'put ''LmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoTSxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxkJiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZl''@;'; put 'put ''YXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29u''@;'; put 'put ''c3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2gudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5w''@;'; put 'put ''YXJzZUZlYXR1cmVWYWx1ZShkW2doLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5oaXN0''@;'; put 'put ''b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZp''@;'; put 'put ''ZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5saW5lYWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2doLnZp''@;'; put 'put ''ZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2guZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5lZGl0UmVjb3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2guYWRkUmVjb3JkXSl9''@;'; put 'put ''LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNl''@;'; put 'put ''bnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1lZShmdW5jdGlvbioodixNKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlwdG8uc3VidGxlKXRyeXtsZXQgYmU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikp''@;'; put 'put ''O3YoSlNPTi5wYXJzZShiZSkpfWNhdGNoKGJlKXtNKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitiZSl9bGV0IFosRD15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoYSkuY2F0Y2goYmU9PntNKGJlKX0pO2NvbnN0IHJlPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1''@;'; put 'put ''ZmZlcihkKS5jYXRjaChiZT0+e00oYmUpfSk7aWYoIXJlKXJldHVybiB2b2lkIE0oIk1pc3NpbmcgYWN0aXZhdGlvbiBrZXkiKTtsZXQgY2U7Wj1yZTt0cnl7Y2U9eWllbGQgd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJwa2NzOCIsWix7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNI''@;'; put 'put ''QS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goYmUpe00oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrYmUpfWlmKGNlKWlmKEQpdHJ5e3dpbmRvdy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LGNlLEQp''@;'; put 'put ''LnRoZW4oYmU9PntsZXQgRWU9KG5ldyBSVGUuVGV4dERlY29kZXIpLmRlY29kZShiZSk7dHJ5e3YoSlNPTi5wYXJzZShFZSkpfWNhdGNoKEJlKXtNKCJFcnJvciBwYXJzaW5nIGxpY2Vuc2Uga2V5IGRhdGEuICIrQmUpfX0sYmU9PntNKGJlKX0pfWNhdGNoKGJlKXtNKGJlKX1lbHNlIE0oIkxp''@;'; put 'put ''Y2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIE0oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGlj''@;'; put 'put ''ZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtjb25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPU9vKCkudmFsdWVP''@;'; put 'put ''ZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksdj1wYXJzZUludChkLnNwbGl0KCIsIilbMV0pO3JldHVybiBPbyhmKS5pc1NhbWUoT28oKSwiZGF5Iik/dj49dGhpcy5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLHYrMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGluZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9''@;'; put 'put ''LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2goZ2NlLkQoYSkpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZm''@;'; put 'put ''ZXJUb0Jhc2U2NChhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntkKGdjZS5sKGEpKX0pfXNldFNpdGVJZChhKXthLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkX211bHRpcGxlKTphLnNpdGVfaWQmJnRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpe2xldCB2PSExLE09ITE7aWYoKCFhLnNpdGVfaWR8fGEuc2l0ZV9pZCE9PWgpJiYodj0hMCksKCFhLnNpdGVfaWRfbXVsdGlwbGV8fCFhLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMo''@;'; put 'put ''aCkpJiYoTT0hMCksdiYmTSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntjb25zdCBEPSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhp''@;'; put 'put ''cy5saWNlbmNlUHJvYmxlbS5uZXh0KEQpLHRoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEQpfSl9Y2FsY3VsYXRlRXhwaXJ5KGEpe2xldCBk''@;'; put 'put ''PU9vKGEudmFsaWRfdW50aWwsIllZWVktTU0tREQiKS5zdGFydE9mKCJkYXkiKSxoPU9vKCkuc3RhcnRPZigiZGF5IiksZj1kLmRpZmYoaCwiZGF5cyIpO3JldHVybntleHBpcnlfZGF0ZTpkLGRheXNUb0V4cGlyeTpmfX1oYW5kbGVFeHBpcnkoYSxkLGgsZil7c2V0VGltZW91dCgoKT0+e2Nv''@;'; put 'put ''bnN0IHY9YC9saWNlbnNpbmcva2V5P2ZvcmNlPXRydWUmZXJyb3I9ZXhwaXJlZCZkZXRhaWxzPSR7YnRvYSgiRXhwaXJ5IGRhdGU6ICIrYS5mb3JtYXQoIkREL01NL1lZWVkiKSl9YDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQodiksdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5m''@;'; put 'put ''cmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh2KX0pfWhhbmRsZVVzZXJzQWxsb3dlZChhKXthLmRlbW8mJnZvaWQgMCE9PXRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkJiYoYS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dl''@;'; put 'put ''ZD4wP2EudXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCksdGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkfWhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGgpe2lmKHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmKGQu''@;'; put 'put ''UkVHSVNURVJDT1VOVD5hLnVzZXJzX2FsbG93ZWQ/KGNvbnNvbGUud2FybigiQXBwIGhhcyBtb3JlIHVzZXJzIHJlZ2lzdGVyZWQgdGhlbiBsaWNlbnNlZC4iKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5Lm5leHQoITApKTpkLlJFR0lTVEVSQ09VTlQ9PT1hLnVzZXJzX2FsbG93ZWQmJmNvbnNv''@;'; put 'put ''bGUud2FybigiQXBwIGhhcyBoaXQgbGltaXQgb2YgdXNlcnMgcmVnaXN0ZXJlZC4iKSksMSE9PWQuSVNSRUdJU1RFUkVEKXJldHVybiBkLlJFR0lTVEVSQ09VTlQ8YS51c2Vyc19hbGxvd2VkfHwhdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPyhjb25zb2xlLmxvZygiVXNlciBjYW4gcmVnaXN0''@;'; put 'put ''ZXIiKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMCksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvcmVnaXN0ZXIiKSkpOih0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCgh''@;'; put 'put ''MSksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvbGltaXQiKSkpO3RoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''YykoeHIoU2QpLHhyKFE4KSx4cih2YykseHIoQnMpLHhyKFN1KSx4cihMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG9MPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgsZix2LE0sRCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5z''@;'; put 'put ''eXNzaXRlPW5ldyBlaShudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz17fSx0aGlzLnN1YnNjcmliZSgpLHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUocmU9PntyZSBpbnN0YW5jZW9mIHBwJiYiL2RlcGxveSI9PT1yZS51cmwmJnRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9h''@;'; put 'put ''ZGVkKCl9KTtjb25zdCBaPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlO1oucGVyc2lzdFNlbGVjdGVkVGhlbWUmJnRoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKFouc2VsZWN0ZWRUaGVtZSE9PWd5LmxpZ2h0JiZaLnNlbGVjdGVkVGhlbWU9PT1neS5kYXJr''@;'; put 'put ''KX1zYXNTZXJ2aWNlSW5pdCgpe3RoaXMuc2FzU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfXN1YnNjcmliZSgpe3RoaXMuc2FzU2VydmljZS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnRVcERhdGEoKX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0''@;'; put 'put ''U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoYT0+e3RoaXMucGF0Y2hTeXNzaXRlKGEpfSl9Z2V0RW52aXJvbm1lbnRJbmZvKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRJbmZvfXBhdGNoU3lzc2l0ZShhKXtsZXQgZD10aGlzLnN5c3NpdGUuZ2V0VmFsdWUoKTtkJiYoZC5pbmNsdWRlcyhhKXx8''@;'; put 'put ''KGQucHVzaChhKSx0aGlzLnN5c3NpdGUubmV4dChkKSkpfXN0YXJ0VXBEYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9ITE7eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBoPWVlKGZ1bmN0aW9uKihmKXthLnN5c3NpdGUubmV4dChbZi5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURV0pO2xldCB2PVtdO2lmKCghZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnN8fGYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzJiYhZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0p''@;'; put 'put ''JiZ2LnB1c2goIkdsb2J2YXJzIiksZi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHN8fHYucHVzaCgiU2FzZGF0YXNldHMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzfHx2LnB1c2goIlNhc2xpYnMiKSxmLmFkYXB0ZXJSZXNwb25zZS54bG1hcHN8fHYucHVzaCgiWExNYXBzIiksdi5s''@;'; put 'put ''ZW5ndGg+MClyZXR1cm4gZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsYCR7di5qb2luKCIsICIpfSBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNlYCksdm9pZCBhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpO2NvbnN0''@;'; put 'put ''IE09YS5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFLFNZU1NDUEw6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTCxTWVNUQ1BJUEhPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsTUVNU0laRTpmLmFkYXB0ZXJSZXNwb25zZS5NRU1TSVpFLFNZU1BST0NFU1NNT0RFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LlNZU0hPU1ROQU1FLFNZU1VTRVJJRDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsU1lTSE9TVElORk9MT05HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1RJTkZPTE9ORyxTWVNFTkNPRElORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNFTkNPRElORyxBVVRPRVhFQzpmLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5BVVRPRVhFQyxJU0FETUlOOmYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENfQURNSU5fR1JPVVAsQVBQX0xPQzpNPy5hcHBMb2N9O2xldCByZSxjZSxEPWYuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLnNhc2RhdGFzZXRzLFo9e307Zm9yKGxldCBxZSBvZiBEKVpbcWUuTElCUkVGXXx8KFpbcWUuTElCUkVGXT1bXSksWltxZS5MSUJSRUZdLnB1c2gocWUuRFNOKTtsZXQgYmU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShaKSksRWU9W107Zm9yKGxldCBxZSBvZiBPYmplY3Qua2V5cyhi''@;'; put 'put ''ZSkpRWUucHVzaCh7TElCUkFSWVJFRjpxZSx0YWJsZXM6YmVbcWVdfSk7bGV0IEJlPUVlO3JlPVosY2U9T2JqZWN0LmtleXMoWiksdm9pZCAwIT09cmUmJihLbi5lZGl0b3IubGlic0FuZFRhYmxlcz1yZSksS24ueGxtYXBzPWYuYWRhcHRlclJlc3BvbnNlLnhsbWFwcy5tYXAocWU9Pih7aWQ6''@;'; put 'put ''cWVbMF0sZGVzY3JpcHRpb246cWVbMV0sdGFyZ2V0RFM6cWVbMl19KSksS24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzPUJlLEtuLmVkaXRvci5saWJyYXJpZXM9Y2UsS24uZWRpdG9yLnN0YXJ0dXBTZXQ9ITAsS24uZGNMaWI9Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENMSUIs''@;'; put 'put ''eWllbGQgYS5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uKGYuYWRhcHRlclJlc3BvbnNlKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlRo''@;'; put 'put ''ZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSksZHx8''@;'; put 'put ''KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51cmwuaW5jbHVkZXMo''@;'; put 'put ''ImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKSh4cih1MSkseHIodmMpLHhyKEJzKSx4cihTZCkseHIoJFIpLHhyKExzKSx4cihROCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLFJ1ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhp''@;'; put 'put ''cy5fcmVuZGVyZXI9YSx0aGlzLl9lbGVtZW50UmVmPWQsdGhpcy5vbkNoYW5nZT1oPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoYSxkKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSxkKX1yZWdpc3Rlck9u''@;'; put 'put ''VG91Y2hlZChhKXt0aGlzLm9uVG91Y2hlZD1hfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1hfXNldERpc2FibGVkU3RhdGUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''KEdlKEVvKSxHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pfX1yZXR1cm4gY30pKCksYTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ1ZXtzdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1Zcyhj''@;'; put 'put ''KSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgYnA9bmV3IFN0KCIiKSxWTGU9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6Q3MoKCk9Pk1kKSxtdWx0aTohMH07bGV0IE1kPSgoKT0+e2NsYXNz''@;'; put 'put ''IGMgZXh0ZW5kcyBhN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9''@;'; put 'put ''RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2RhKFtWTGVdKSx3YV19KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IEJMZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+cWwpLG11bHRpOiEwfSx6TGU9bmV3IFN0KCIiKTtsZXQgcWw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ1ZXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9aCx0aGlz''@;'; put 'put ''Ll9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbiBqTGUoKXtjb25zdCBjPXRtKCk/dG0oKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChjLnRvTG93ZXJDYXNlKCkpfSgp''@;'; put 'put ''KX13cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixhPz8iIil9X2hhbmRsZUlucHV0KGEpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKGEpfV9jb21wb3NpdGlvblN0YXJ0''@;'; put 'put ''KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChhKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVvKSxHZShKaSks''@;'; put 'put ''R2UoekxlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwi''@;'; put 'put ''IiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7MSZkJiZGdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9oYW5kbGVJbnB1dCh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBoLl9jb21w''@;'; put 'put ''b3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9jb21wb3NpdGlvbkVuZCh2LnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6W2RhKFtCTGVdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGgwPW5ldyBTdCgiIiksaG09bmV3IFN0KCIiKTtm''@;'; put 'put ''dW5jdGlvbiBGdWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGRtKGMpe3JldHVybiBudWxsPT1jfHwoInN0cmluZyI9PXR5cGVvZiBjfHxBcnJheS5pc0FycmF5KGMpKSYmMD09PWMubGVuZ3RofShjLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gSHVlKGMpe3JldHVybiEwPT09Yy52''@;'; put 'put ''YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24gc0woYyl7cmV0dXJuIG51bGx9ZnVuY3Rpb24genVlKGMpe3JldHVybiBudWxsIT1jfWZ1bmN0aW9uIFV1ZShjKXtyZXR1cm4gX00oYyk/WXUoYyk6Y31mdW5jdGlvbiBadWUoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57''@;'; put 'put ''bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBXdWUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YShjKSl9ZnVuY3Rpb24gWXVlKGMpe3JldHVybiBjLm1hcChsPT5mdW5jdGlvbiBaTGUoYyl7cmV0dXJuIWMudmFsaWRhdGV9''@;'; put 'put ''KGwpP2w6YT0+bC52YWxpZGF0ZShhKSl9ZnVuY3Rpb24gVVcoYyl7cmV0dXJuIG51bGwhPWM/ZnVuY3Rpb24gR3VlKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoenVlKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4gWnVlKFd1ZShhLGwp''@;'; put 'put ''KX19KFl1ZShjKSk6bnVsbH1mdW5jdGlvbiBaVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiAkdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcih6dWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBOTGUoLi4uYyl7''@;'; put 'put ''Y29uc3QgbD11bGUoYykse2FyZ3M6YSxrZXlzOmR9PWRsZShjKSxoPW5ldyBYdChmPT57Y29uc3R7bGVuZ3RoOnZ9PWE7aWYoIXYpcmV0dXJuIHZvaWQgZi5jb21wbGV0ZSgpO2NvbnN0IE09bmV3IEFycmF5KHYpO2xldCBEPXYsWj12O2ZvcihsZXQgcmU9MDtyZTx2O3JlKyspe2xldCBjZT0h''@;'; put 'put ''MTtsMShhW3JlXSkuc3Vic2NyaWJlKE5pKGYsYmU9PntjZXx8KGNlPSEwLFotLSksTVtyZV09YmV9LCgpPT5ELS0sdm9pZCAwLCgpPT57KCFEfHwhY2UpJiYoWnx8Zi5uZXh0KGQ/aGxlKGQsTSk6TSksZi5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoeloobCkpOmh9KFd1ZShh''@;'; put 'put ''LGwpLm1hcChVdWUpKS5waXBlKExyKFp1ZSkpfX0oWXVlKGMpKTpudWxsfWZ1bmN0aW9uIEt1ZShjLGwpe3JldHVybiBudWxsPT09Yz9bbF06QXJyYXkuaXNBcnJheShjKT9bLi4uYyxsXTpbYyxsXX1mdW5jdGlvbiBXVyhjKXtyZXR1cm4gYz9BcnJheS5pc0FycmF5KGMpP2M6W2NdOltdfWZ1''@;'; put 'put ''bmN0aW9uIGxMKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Yy5pbmNsdWRlcyhsKTpjPT09bH1mdW5jdGlvbiBKdWUoYyxsKXtjb25zdCBhPVdXKGwpO3JldHVybiBXVyhjKS5mb3JFYWNoKGg9PntsTChhLGgpfHxhLnB1c2goaCl9KSxhfWZ1bmN0aW9uIFF1ZShjLGwpe3JldHVybiBX''@;'; put 'put ''VyhsKS5maWx0ZXIoYT0+IWxMKGMsYSkpfWNsYXNzIGUwZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMu''@;'; put 'put ''Y29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250''@;'; put 'put ''cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdl''@;'; put 'put ''dCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wu''@;'; put 'put ''dW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRo''@;'; put 'put ''KCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPVVXKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPWx8fFtdLHRo''@;'; put 'put ''aXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1aVyh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlk''@;'; put 'put ''YXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaChsKX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119''@;'; put 'put ''cmVzZXQobD12b2lkIDApe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KGwpfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcihsLGEpfWdldEVycm9yKGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0''@;'; put 'put ''RXJyb3IobCxhKTpudWxsfX1jbGFzcyBCMSBleHRlbmRzIGUwZXtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIGQxIGV4dGVuZHMgZTBle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVs''@;'; put 'put ''bCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19Y2xhc3MgdDBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2NkPWx9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8u''@;'; put 'put ''Y29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmV9Z2V0IGlzRGlydHkoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5kaXJ0eX1nZXQgaXNWYWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlk''@;'; put 'put ''fWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19bGV0IG5sPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyB0MGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZDEsMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xO''@;'; put 'put ''YW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNoZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5l''@;'; put 'put ''IixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKSxvNz0oKCk9PntjbGFzcyBjIGV4dGVu''@;'; put 'put ''ZHMgdDBle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEIxLDEwKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi''@;'; put 'put ''LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNo''@;'; put 'put ''ZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRp''@;'; put 'put ''bmcpKCJuZy1zdWJtaXR0ZWQiLGguaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBkeD0iVkFMSUQiLHVMPSJJTlZBTElEIix4eT0iUEVORElORyIsaHg9IkRJU0FCTEVEIjtmdW5jdGlvbiAkVyhjKXtyZXR1cm4oZEwoYyk/Yy52YWxpZGF0b3JzOmMp''@;'; put 'put ''fHxudWxsfWZ1bmN0aW9uIEtXKGMsbCl7cmV0dXJuKGRMKGwpP2wuYXN5bmNWYWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIGRMKGMpe3JldHVybiBudWxsIT1jJiYhQXJyYXkuaXNBcnJheShjKSYmIm9iamVjdCI9PXR5cGVvZiBjfWNsYXNzIHFXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5f''@;'; put 'put ''cGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMu''@;'; put 'put ''X29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKSx0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMoYSl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10''@;'; put 'put ''aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1s''@;'; put 'put ''fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWR4fWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dUx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXh5fWdldCBkaXNhYmxlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLnN0YXR1cz09PWh4fWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09aHh9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3Ro''@;'; put 'put ''aXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKX1zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpfWFkZFZhbGlkYXRvcnMo''@;'; put 'put ''bCl7dGhpcy5zZXRWYWxpZGF0b3JzKEp1ZShsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoSnVlKGwsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRv''@;'; put 'put ''cnMoUXVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfXJlbW92ZUFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhRdWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIGxMKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFz''@;'; put 'put ''QXN5bmNWYWxpZGF0b3IobCl7cmV0dXJuIGxMKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhp''@;'; put 'put ''cy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgp''@;'; put 'put ''KX1tYXJrQXNVbnRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3Vw''@;'; put 'put ''ZGF0ZVRvdWNoZWQobCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEs''@;'; put 'put ''dGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXh5LCExIT09bC5lbWl0RXZl''@;'; put 'put ''bnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0''@;'; put 'put ''dXM9aHgsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0No''@;'; put 'put ''YW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9u''@;'; put 'put ''bHlTZWxmKTt0aGlzLnN0YXR1cz1keCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7''@;'; put 'put ''Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlz''@;'; put 'put ''dGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhp''@;'; put 'put ''cy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhp''@;'; put 'put ''cy5zdGF0dXM9PT1keHx8dGhpcy5zdGF0dXM9PT14eSkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0''@;'; put 'put ''aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFs''@;'; put 'put ''dWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/aHg6ZHh9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlk''@;'; put 'put ''YXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz14eSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1VdWUodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNW''@;'; put 'put ''YWxpZGF0aW9uU3Vic2NyaXB0aW9uPWEuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoZCx7ZW1pdEV2ZW50Omx9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz''@;'; put 'put ''Y3JpcHRpb24mJih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEpfXNldEVycm9ycyhsLGE9e30pe3RoaXMuZXJyb3JzPWwsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1hLmVt''@;'; put 'put ''aXRFdmVudCl9Z2V0KGwpe2xldCBhPWw7cmV0dXJuIG51bGw9PWF8fChBcnJheS5pc0FycmF5KGEpfHwoYT1hLnNwbGl0KCIuIikpLDA9PT1hLmxlbmd0aCk/bnVsbDphLnJlZHVjZSgoZCxoKT0+ZCYmZC5fZmluZChoKSx0aGlzKX1nZXRFcnJvcihsLGEpe2NvbnN0IGQ9YT90aGlzLmdldChh''@;'; put 'put ''KTp0aGlzO3JldHVybiBkJiZkLmVycm9ycz9kLmVycm9yc1tsXTpudWxsfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmdldEVycm9yKGwsYSl9Z2V0IHJvb3QoKXtsZXQgbD10aGlzO2Zvcig7bC5fcGFyZW50OylsPWwuX3BhcmVudDtyZXR1cm4gbH1fdXBkYXRlQ29udHJvbHNFcnJvcnMo''@;'; put 'put ''bCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksbCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyhsKX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5n''@;'; put 'put ''ZXM9bmV3IEtyLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgS3J9X2NhbGN1bGF0ZVN0YXR1cygpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/aHg6dGhpcy5lcnJvcnM/dUw6dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yfHx0aGlzLl9hbnlDb250cm9sc0hhdmVT''@;'; put 'put ''dGF0dXMoeHkpP3h5OnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh1TCk/dUw6ZHh9X2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhsKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoYT0+YS5zdGF0dXM9PT1sKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhs''@;'; put 'put ''PT5sLmRpcnR5KX1fYW55Q29udHJvbHNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwudG91Y2hlZCl9X3VwZGF0ZVByaXN0aW5lKGw9e30pe3RoaXMucHJpc3RpbmU9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlz''@;'; put 'put ''Ll9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfV91cGRhdGVUb3VjaGVkKGw9e30pe3RoaXMudG91Y2hlZD10aGlzLl9hbnlDb250cm9sc1RvdWNoZWQoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQobCl9X3JlZ2lzdGVyT25Db2xsZWN0''@;'; put 'put ''aW9uQ2hhbmdlKGwpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT1sfV9zZXRVcGRhdGVTdHJhdGVneShsKXtkTChsKSYmbnVsbCE9bC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPWwudXBkYXRlT24pfV9wYXJlbnRNYXJrZWREaXJ0eShsKXtyZXR1cm4hbCYmISghdGhpcy5fcGFyZW50fHwh''@;'; put 'put ''dGhpcy5fcGFyZW50LmRpcnR5KSYmIXRoaXMuX3BhcmVudC5fYW55Q29udHJvbHNEaXJ0eSgpfV9maW5kKGwpe3JldHVybiBudWxsfV9hc3NpZ25WYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZFZhbGlk''@;'; put 'put ''YXRvckZuPWZ1bmN0aW9uICRMZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9VVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRo''@;'; put 'put ''aXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlvbiBLTGUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/WlcoYyk6Y3x8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19Y2xhc3MgaEwgZXh0ZW5kcyBxV3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoJFcoYSksS1co''@;'; put 'put ''ZCxhKSksdGhpcy5jb250cm9scz1sLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0''@;'; put 'put ''b3J9KX1yZWdpc3RlckNvbnRyb2wobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sc1tsXT90aGlzLmNvbnRyb2xzW2xdOih0aGlzLmNvbnRyb2xzW2xdPWEsYS5zZXRQYXJlbnQodGhpcyksYS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxhKX1h''@;'; put 'put ''ZGRDb250cm9sKGwsYSxkPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbChsLGE9e30pe3RoaXMuY29udHJvbHNbbF0m''@;'; put 'put ''JnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250''@;'; put 'put ''cm9sKGwsYSxkPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLGEmJnRoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5''@;'; put 'put ''KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyhsKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShsKSYmdGhpcy5jb250cm9sc1tsXS5lbmFibGVkfXNldFZhbHVlKGwsYT17fSl7KGZ1bmN0aW9uIGkwZShjLGws''@;'; put 'put ''YSl7Yy5fZm9yRWFjaENoaWxkKChkLGgpPT57aWYodm9pZCAwPT09YVtoXSl0aHJvdyBuZXcgUW4oMTAwMiwiIil9KX0pKHRoaXMsMCxsKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnsoZnVuY3Rpb24gcjBlKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlz''@;'; put 'put ''KGQpOmQpLmxlbmd0aCl0aHJvdyBuZXcgUW4oMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgUW4oMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVl''@;'; put 'put ''QW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRh''@;'; put 'put ''dGVWYWx1ZUFuZFZhbGlkaXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobD9sW2hdOm51bGwse29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoYSksdGhpcy5fdXBkYXRlVG91''@;'; put 'put ''Y2hlZChhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGwsYSxkKT0+KGxbZF09YS5nZXRSYXdWYWx1ZSgpLGwpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCBsPXRoaXMuX3JlZHVjZUNoaWxk''@;'; put 'put ''cmVuKCExLChhLGQpPT4hIWQuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8YSk7cmV0dXJuIGwmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSxsfV9mb3JFYWNoQ2hpbGQobCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChhPT57Y29uc3QgZD10''@;'; put 'put ''aGlzLmNvbnRyb2xzW2FdO2QmJmwoZCxhKX0pfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKGw9PntsLnNldFBhcmVudCh0aGlzKSxsLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52''@;'; put 'put ''YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfV9hbnlDb250cm9scyhsKXtmb3IoY29uc3RbYSxkXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udGFpbnMoYSkmJmwoZCkpcmV0dXJuITA7cmV0dXJuITF9X3JlZHVjZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVj''@;'; put 'put ''ZUNoaWxkcmVuKHt9LChhLGQsaCk9PigoZC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKGFbaF09ZC52YWx1ZSksYSkpfV9yZWR1Y2VDaGlsZHJlbihsLGEpe2xldCBkPWw7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZCgoaCxmKT0+e2Q9YShkLGgsZil9KSxkfV9hbGxDb250cm9sc0Rpc2Fi''@;'; put 'put ''bGVkKCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1tsXS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZChsKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b250cm9scy5oYXNPd25Qcm9wZXJ0eShsKT90aGlzLmNvbnRyb2xzW2xdOm51bGx9fWNvbnN0IHM3PW5ldyBTdCgiQ2FsbFNldERpc2FibGVkU3RhdGUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5meH0pLGZ4PSJhbHdheXMiO2Z1bmN0aW9uIHB4KGMsbCxhPWZ4KXtYVyhjLGwp''@;'; put 'put ''LGwudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGMudmFsdWUpLChjLmRpc2FibGVkfHwiYWx3YXlzIj09PWEpJiZsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKGMuZGlzYWJsZWQpLGZ1bmN0aW9uIEpMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGE9''@;'; put 'put ''PntjLl9wZW5kaW5nVmFsdWU9YSxjLl9wZW5kaW5nQ2hhbmdlPSEwLGMuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PWMudXBkYXRlT24mJmEwZShjLGwpfSl9KGMsbCksZnVuY3Rpb24gZU9lKGMsbCl7Y29uc3QgYT0oZCxoKT0+e2wudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGQpLGgm''@;'; put 'put ''Jmwudmlld1RvTW9kZWxVcGRhdGUoZCl9O2MucmVnaXN0ZXJPbkNoYW5nZShhKSxsLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2MuX3VucmVnaXN0ZXJPbkNoYW5nZShhKX0pfShjLGwpLGZ1bmN0aW9uIFFMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e2Mu''@;'; put 'put ''X3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PWMudXBkYXRlT24mJmMuX3BlbmRpbmdDaGFuZ2UmJmEwZShjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBYTGUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRT''@;'; put 'put ''dGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gZ0wo''@;'; put 'put ''YyxsKXtjLmZvckVhY2goYT0+e2EucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gWFcoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHF1ZShjKXtyZXR1cm4gYy5fcmF3VmFsaWRhdG9yc30oYyk7bnVsbCE9PWwudmFsaWRh''@;'; put 'put ''dG9yP2Muc2V0VmFsaWRhdG9ycyhLdWUoYSxsLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZjLnNldFZhbGlkYXRvcnMoW2FdKTtjb25zdCBkPWZ1bmN0aW9uIFh1ZShjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9j''@;'; put 'put ''LnNldEFzeW5jVmFsaWRhdG9ycyhLdWUoZCxsLmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmMuc2V0QXN5bmNWYWxpZGF0b3JzKFtkXSk7Y29uc3QgaD0oKT0+Yy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Z0wobC5fcmF3VmFsaWRhdG9ycyxoKSxnTChsLl9yYXdB''@;'; put 'put ''c3luY1ZhbGlkYXRvcnMsaCl9ZnVuY3Rpb24gYTBlKGMsbCl7Yy5fcGVuZGluZ0RpcnR5JiZjLm1hcmtBc0RpcnR5KCksYy5zZXRWYWx1ZShjLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGwudmlld1RvTW9kZWxVcGRhdGUoYy5fcGVuZGluZ1ZhbHVlKSxjLl9w''@;'; put 'put ''ZW5kaW5nQ2hhbmdlPSExfWNvbnN0IGFPZT17cHJvdmlkZTpCMSx1c2VFeGlzdGluZzpDcygoKT0+eXApfSxneD1Qcm9taXNlLnJlc29sdmUoKTtsZXQgeXA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEIxe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3Rh''@;'; put 'put ''dGU9aCx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgS3IsdGhpcy5mb3JtPW5ldyBoTCh7fSxVVyhhKSxaVyhkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0''@;'; put 'put ''aCk7YS5jb250cm9sPWQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLHB4KGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0p''@;'; put 'put ''fWdldENvbnRyb2woYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe2d4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0p''@;'; put 'put ''fWFkZEZvcm1Hcm91cChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgaEwoe30pOyhmdW5jdGlvbiBvMGUoYyxsKXtYVyhjLGwpfSkoaCxhKSxkLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsaCksaC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5''@;'; put 'put ''KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSl9KX1nZXRGb3JtR3JvdXAoYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX11cGRh''@;'; put 'put ''dGVNb2RlbChhLGQpe2d4LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGEucGF0aCkuc2V0VmFsdWUoZCl9KX1zZXRWYWx1ZShhKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSl9b25TdWJtaXQoYSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGZ1bmN0aW9uIHMwZShjLGwpe2MuX3N5bmNQZW5k''@;'; put 'put ''aW5nQ29udHJvbHMoKSxsLmZvckVhY2goYT0+e2NvbnN0IGQ9YS5jb250cm9sOyJzdWJtaXQiPT09ZC51cGRhdGVPbiYmZC5fcGVuZGluZ0NoYW5nZSYmKGEudmlld1RvTW9kZWxVcGRhdGUoZC5fcGVuZGluZ1ZhbHVlKSxkLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5f''@;'; put 'put ''ZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGEpLCJkaWFsb2ciPT09YT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGE9dm9pZCAwKXt0aGlzLmZvcm0ucmVzZXQoYSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5''@;'; put 'put ''KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoYSl7cmV0dXJuIGEucG9wKCksYS5sZW5ndGg/dGhpcy5mb3JtLmdldChhKTp0aGlzLmZvcm19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoaDAsMTApLEdlKGhtLDEwKSxHZShzNyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJu''@;'; put 'put ''Zy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgic3VibWl0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblN1Ym1pdCh2KX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOltO''@;'; put 'put ''bi5Ob25lLCJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltkYShbYU9lXSksd2FdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBsMGUoYyxsKXtjb25zdCBhPWMuaW5kZXhPZihsKTth''@;'; put 'put ''Pi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0aW9uIGMwZShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiYyPT09T2JqZWN0LmtleXMoYykubGVuZ3RoJiYidmFsdWUiaW4gYyYmImRpc2FibGVkImluIGN9Y29uc3QgdFk9Y2xhc3MgZXh0ZW5kcyBxV3tjb25zdHJ1Y3Rvcihs''@;'; put 'put ''PW51bGwsYSxkKXtzdXBlcigkVyhhKSxLVyhkLGEpKSx0aGlzLmRlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITEsdGhpcy5fYXBwbHlGb3JtU3RhdGUobCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5faW5pdE9ic2VydmFi''@;'; put 'put ''bGVzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSksZEwoYSkmJihhLm5vbk51bGxhYmxlfHxhLmluaXRpYWxWYWx1ZUlzRGVmYXVsdCkmJih0aGlzLmRlZmF1bHRWYWx1ZT1jMGUobCk/bC52YWx1ZTps''@;'; put 'put ''KX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVs''@;'; put 'put ''Q2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxhPXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFy''@;'; put 'put ''a0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hh''@;'; put 'put ''bmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXtsMGUodGhpcy5fb25DaGFuZ2UsbCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7''@;'; put 'put ''bDBlKHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UsbCl9X2ZvckVhY2hDaGlsZChsKXt9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVk''@;'; put 'put ''JiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfV9hcHBseUZvcm1TdGF0ZShsKXtjMGUobCk/KHRoaXMudmFsdWU9dGhp''@;'; put 'put ''cy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGxPZT17cHJvdmlkZTpk''@;'; put 'put ''MSx1c2VFeGlzdGluZzpDcygoKT0+JHMpfSxkMGU9UHJvbWlzZS5yZXNvbHZlKCk7bGV0ICRzPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBkMXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj12LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9''@;'; put 'put ''TSx0aGlzLmNvbnRyb2w9bmV3IHRZLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy5uYW1lPSIiLHRoaXMudXBkYXRlPW5ldyBLcix0aGlzLl9wYXJlbnQ9YSx0aGlzLl9zZXRWYWxpZGF0b3JzKGQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhoKSx0aGlzLnZhbHVlQWNjZXNzb3I9ZnVuY3Rp''@;'; put 'put ''b24gZVkoYyxsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgYSxkLGg7cmV0dXJuIEFycmF5LmlzQXJyYXkobCksbC5mb3JFYWNoKGY9PntmLmNvbnN0cnVjdG9yPT09cWw/YT1mOmZ1bmN0aW9uIHJPZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMuY29uc3RydWN0b3IpPT09YTd9''@;'; put 'put ''KGYpP2Q9ZjpoPWZ9KSxofHxkfHxhfHxudWxsfSgwLGYpfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGEpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUp''@;'; put 'put ''KXtjb25zdCBkPWEubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmQscGF0aDp0aGlzLl9nZXRQYXRoKGQpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gYSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoYSksZnVuY3Rp''@;'; put 'put ''b24gUVcoYyxsKXtpZighYy5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBhPWMubW9kZWw7cmV0dXJuISFhLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhsLGEuY3VycmVudFZhbHVlKX0oYSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlz''@;'; put 'put ''Lm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0''@;'; put 'put ''aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGEpe3RoaXMudmlld01vZGVsPWEsdGhpcy51cGRhdGUuZW1pdChhKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9p''@;'; put 'put ''c1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5j''@;'; put 'put ''b250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe3B4KHRoaXMuY29udHJvbCx0aGlzLHRoaXMu''@;'; put 'put ''Y2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFy''@;'; put 'put ''ZW50VHlwZSgpe31fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGEpe2QwZS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2Vt''@;'; put 'put ''aXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmczEoZCk7ZDBlLnRoZW4oKCk9PntoJiYhdGhpcy5jb250cm9s''@;'; put 'put ''LmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWgmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV9nZXRQYXRoKGEpe3JldHVybiB0aGlzLl9wYXJlbnQ/ZnVuY3Rpb24g''@;'; put 'put ''ZkwoYyxsKXtyZXR1cm5bLi4ubC5wYXRoLGNdfShhLHRoaXMuX3BhcmVudCk6W2FdfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEIxLDkpLEdlKGgwLDEwKSxHZShobSwxMCksR2UoYnAsMTApLEdlKEVzLDgpLEdlKHM3LDgpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOltObi5Ob25lLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxt''@;'; put 'put ''b2RlbDpbTm4uTm9uZSwibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbTm4uTm9uZSwibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltkYShbbE9lXSksd2Esd2xdfSl9fXJl''@;'; put 'put ''dHVybiBjfSkoKSxsNz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRh''@;'; put 'put ''dGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBjT2U9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6Q3MoKCk9PnZMKSxtdWx0aTohMH07bGV0IHZMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJv''@;'; put 'put ''cGVydHkoInZhbHVlIixhPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9PnthKCIiPT1kP251bGw6cGFyc2VGbG9hdChkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8''@;'; put 'put ''Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVy''@;'; put 'put ''IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2RhKFtj''@;'; put 'put ''T2VdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHVPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+YkwpLG11bHRpOiEwfTtsZXQgZE9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2go''@;'; put 'put ''W2EsZF0pfXJlbW92ZShhKXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChk''@;'; put 'put ''PT57dGhpcy5faXNTYW1lR3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVnaXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9Zmkoczcse29wdGlvbmFsOiEwfSk/P2Z4''@;'; put 'put ''fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoZDEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhp''@;'; put 'put ''cy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2Fi''@;'; put 'put ''bGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZp''@;'; put 'put ''cmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KEVvKSxHZShKaSksR2UoZE9lKSxHZShEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlu''@;'; put 'put ''cHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFt''@;'; put 'put ''ZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltkYShbdU9lXSksd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCByWT1uZXcgU3QoIiIpLGJPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+VDIpLG11bHRpOiEw''@;'; put 'put ''fTtmdW5jdGlvbiBtMGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IFQyPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7dGhpcy52YWx1ZT1hO2NvbnN0IGg9bTBlKHRoaXMuX2dldE9w''@;'; put 'put ''dGlvbklkKGEpLGEpO3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixoKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZCksYSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291''@;'; put 'put ''bnRlcisrKS50b1N0cmluZygpfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCksYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0''@;'; put 'put ''IGQ9ZnVuY3Rpb24geU9lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwo''@;'; put 'put ''YT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0''@;'; put 'put ''IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0p''@;'; put 'put ''fSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltkYShbYk9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxBMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlz''@;'; put 'put ''Ll9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKG0wZSh0aGlzLmlkLGEpKSx0''@;'; put 'put ''aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMu''@;'; put 'put ''X3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVj''@;'; put 'put ''dC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbyksR2UoVDIsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1''@;'; put 'put ''ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpO2NvbnN0IF9PZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+bXgpLG11bHRpOiEwfTtmdW5jdGlvbiB2MGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KCJzdHJpbmciPT10eXBlb2YgbCYmKGw9YCcke2x9J2ApLGwm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IG14PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVy''@;'; put 'put ''PTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7bGV0IGQ7aWYodGhpcy52YWx1ZT1hLEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGg9YS5tYXAoZj0+dGhpcy5fZ2V0T3B0aW9uSWQoZikpO2Q9''@;'; put 'put ''KGYsdik9PntmLl9zZXRTZWxlY3RlZChoLmluZGV4T2Yodi50b1N0cmluZygpKT4tMSl9fWVsc2UgZD0oaCxmKT0+e2guX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goZCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pntjb25zdCBoPVtdLGY9''@;'; put 'put ''ZC5zZWxlY3RlZE9wdGlvbnM7aWYodm9pZCAwIT09Zil7Y29uc3Qgdj1mO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBaPXRoaXMuX2dldE9wdGlvblZhbHVlKHZbTV0udmFsdWUpO2gucHVzaChaKX19ZWxzZXtjb25zdCB2PWQub3B0aW9ucztmb3IobGV0IE09MDtNPHYubGVu''@;'; put 'put ''Z3RoO00rKyl7Y29uc3QgRD12W01dO2lmKEQuc2VsZWN0ZWQpe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoRC52YWx1ZSk7aC5wdXNoKFopfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dl''@;'; put 'put ''dE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gd09lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJm''@;'; put 'put ''b3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbZGEoW19PZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksazI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWQsdGhp''@;'; put 'put ''cy5fc2VsZWN0PWgsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZSh2MGUodGhpcy5pZCxhKSksdGhpcy5f''@;'; put 'put ''c2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGEpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUodjBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRo''@;'; put 'put ''aXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRW8pLEdlKG14LDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxjNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPXNMfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuaW5wdXROYW1lIGluIGEpe2NvbnN0IGQ9dGhpcy5ub3JtYWxpemVJbnB1dChhW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9''@;'; put 'put ''dGhpcy5lbmFibGVkKGQpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGQpOnNMLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShhKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGEpfXJlZ2lzdGVyT25WYWxpZGF0b3JD''@;'; put 'put ''aGFuZ2UoYSl7dGhpcy5fb25DaGFuZ2U9YX1lbmFibGVkKGEpe3JldHVybiBudWxsIT1hfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBNT2U9e3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6Q3MoKCk9PmFZKSxtdWx0aTohMH0seE9lPXtwcm92aWRlOmgwLHVzZUV4aXN0aW5nOkNzKCgpPT5vWSksbXVsdGk6ITB9O2xldCBhWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYzd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1''@;'; put 'put ''bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD1zMSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5GdWV9ZW5hYmxlZChhKXtyZXR1cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihh''@;'; put 'put ''fHwoYT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMs''@;'; put 'put ''InR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmhyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJl''@;'; put 'put ''ZDoicmVxdWlyZWQifSxmZWF0dXJlczpbZGEoW01PZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksb1k9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFZe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5IdWV9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1l''@;'; put 'put ''IiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZo''@;'; put 'put ''cigicmVxdWlyZWQiLGguX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOltkYShbeE9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxFMGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCksUmM9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOnM3LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3Rh''@;'; put 'put ''dGU/P2Z4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbRTBlXX0pfX1yZXR1cm4gY30pKCksSU9lPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpyWSx1c2VWYWx1ZTphLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2w/PyJhbHdheXMifSx7cHJvdmlkZTpzNyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9m''@;'; put 'put ''eH1dfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0UwZV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEV5PVsiYW5nbGUi''@;'; put 'put ''LHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nfV0sdmg9WyJleGNsYW1hdGlvbi1jaXJjbGUiLHtvdXRsaW5lOic8cGF0''@;'; put 'put ''aCBkPSJNMTggMTkuOEMxOC41NSAxOS44IDE5IDE5LjM1IDE5IDE4LjhWMTNDMTkgMTIuNDUgMTguNTUgMTIgMTggMTJDMTcuNDUgMTIgMTcgMTIuNDUgMTcgMTNWMTguOEMxNyAxOS4zNSAxNy40NSAxOS44IDE4IDE5LjhaTTE4Ljg1IDIxLjk1QzE4LjczIDIxLjg0IDE4LjYgMjEuNzUgMTgu''@;'; put 'put ''NDYgMjEuNjlDMTguMTcgMjEuNTcgMTcuODMgMjEuNTcgMTcuNTQgMjEuNjlDMTcuNCAyMS43NSAxNy4yNyAyMS44NCAxNy4xNSAyMS45NUMxNi45MyAyMi4xOCAxNi44IDIyLjQ4IDE2LjggMjIuOEMxNi44IDIzLjEyIDE2LjkzIDIzLjQyIDE3LjE1IDIzLjY1QzE3LjI3IDIzLjc2IDE3LjQg''@;'; put 'put ''MjMuODUgMTcuNTQgMjMuOTFDMTcuNjkgMjMuOTcgMTcuODQgMjQgMTggMjRDMTguMTYgMjQgMTguMzEgMjMuOTcgMTguNDYgMjMuOTFDMTguNiAyMy44NSAxOC43MyAyMy43NiAxOC44NSAyMy42NUMxOS4wNyAyMy40MiAxOS4yIDIzLjEyIDE5LjIgMjIuOEMxOS4yIDIyLjY0IDE5LjE3IDIy''@;'; put 'put ''LjQ5IDE5LjExIDIyLjM0QzE5LjA1IDIyLjIgMTguOTYgMjIuMDYgMTguODUgMjEuOTVaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDgg''@;'; put 'put ''MjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQu''@;'; put 'put ''NjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNi44IDEyLjY1QzE2LjggMTEuOTkgMTcuMzQgMTEuNDUgMTggMTEuNDVDMTguNjYgMTEuNDUgMTkuMiAxMS45OSAxOS4yIDEyLjY1VjE4LjQ1QzE5LjIgMTkuMTEgMTguNjYgMTkuNjUgMTggMTkuNjVDMTcuMzQgMTkuNjUgMTYuOCAx''@;'; put 'put ''OS4xMSAxNi44IDE4LjQ1VjEyLjY1Wk0xOC45OCAyNC4xNUMxOC44NCAyNC4yOCAxOC42OSAyNC4zOCAxOC41MyAyNC40NUMxOC4zNSAyNC41MiAxOC4xOCAyNC41NiAxOCAyNC41NkMxNy44MiAyNC41NiAxNy42NCAyNC41MyAxNy40NiAyNC40NUMxNy4zMSAyNC4zOCAxNy4xNiAyNC4yOSAx''@;'; put 'put ''NyAyNC4xNEMxNi43NCAyMy44NyAxNi41OSAyMy41MiAxNi41OSAyMy4xNUMxNi41OSAyMi43OCAxNi43MyAyMi40NCAxNyAyMi4xNUMxNy4xNCAyMi4wMiAxNy4yOSAyMS45MiAxNy40NSAyMS44NUMxNy42MiAyMS43OCAxNy44IDIxLjc0IDE3Ljk5IDIxLjc0QzE4LjE4IDIxLjc0IDE4LjM2''@;'; put 'put ''IDIxLjc4IDE4LjUzIDIxLjg1QzE4LjY4IDIxLjkyIDE4LjgzIDIyLjAyIDE4Ljk4IDIyLjE1QzE5LjEgMjIuMjcgMTkuMjEgMjIuNDMgMTkuMjggMjIuNjFDMTkuMzUgMjIuNzkgMTkuMzkgMjIuOTYgMTkuMzkgMjMuMTRDMTkuMzkgMjMuNSAxOS4yNSAyMy44NSAxOC45NyAyNC4xNEwxOC45''@;'; put 'put ''OCAyNC4xNVoiLz4nfV0sYmg9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIuNjEgMTQuMjJMMTYuMjUgMjAuNThMMTIuNzEgMTcuMDRDMTIuMzIgMTYuNjUgMTEuNjkgMTYuNjUgMTEuMyAxNy4wNEMxMC45MSAxNy40MyAxMC45MSAxOC4wNiAxMS4zIDE4LjQ1TDE2LjI1''@;'; put 'put ''IDIzLjRMMjQuMDMgMTUuNjJDMjQuNDIgMTUuMjMgMjQuNDIgMTQuNiAyNC4wMyAxNC4yMUMyMy42NCAxMy44MiAyMy4wMSAxMy44MiAyMi42MiAxNC4yMUwyMi42MSAxNC4yMlpNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0''@;'; put 'put ''LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2''@;'; put 'put ''IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTI0LjE2IDE1Ljc4TDE2LjI0IDIzLjdMMTEuMTUgMTguNjFDMTAuNjggMTguMTQgMTAuNjggMTcuMzggMTEuMTUgMTYuOTFDMTEuNjIgMTYuNDQg''@;'; put 'put ''MTIuMzggMTYuNDQgMTIuODUgMTYuOTFMMTYuMjQgMjAuM0wyMi40NiAxNC4wOEMyMi45MyAxMy42MSAyMy42OSAxMy42MSAyNC4xNiAxNC4wOEMyNC42MyAxNC41NSAyNC42MyAxNS4zMSAyNC4xNiAxNS43OFoiLz4nfV0sVDBlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6Jzxw''@;'; put 'put ''YXRoIGQ9Ik03LjggMTguMUM3LjggMTkuNzU2OCA2LjUwMTYzIDIxLjEgNC45IDIxLjFDMy4yOTgzNyAyMS4xIDIgMTkuNzU2OCAyIDE4LjFDMiAxNi40NDMxIDMuMjk4MzcgMTUuMSA0LjkgMTUuMUM2LjUwMTYzIDE1LjEgNy44IDE2LjQ0MzEgNy44IDE4LjFaIi8+PHBhdGggZD0iTTE4IDIx''@;'; put 'put ''LjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzEuMSAyMS4x''@;'; put 'put ''QzMyLjcwMTYgMjEuMSAzNCAxOS43NTY4IDM0IDE4LjFDMzQgMTYuNDQzMSAzMi43MDE2IDE1LjEgMzEuMSAxNS4xQzI5LjQ5ODQgMTUuMSAyOC4yIDE2LjQ0MzEgMjguMiAxOC4xQzI4LjIgMTkuNzU2OCAyOS40OTg0IDIxLjEgMzEuMSAyMS4xWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGgg''@;'; put 'put ''ZD0iTTQuOSAyMS4xQzYuNTAxNjMgMjEuMSA3LjggMTkuNzU2OCA3LjggMTguMUM3LjggMTYuNDQzMSA2LjUwMTYzIDE1LjEgNC45IDE1LjFDMy4yOTgzNyAxNS4xIDIgMTYuNDQzMSAyIDE4LjFDMiAxOS43NTY4IDMuMjk4MzcgMjEuMSA0LjkgMjEuMVoiLz48cGF0aCBkPSJNMTggMjEuMUMx''@;'; put 'put ''OS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zNCAxOC4xQzM0IDE5''@;'; put 'put ''Ljc1NjggMzIuNzAxNiAyMS4xIDMxLjEgMjEuMUMyOS40OTg0IDIxLjEgMjguMiAxOS43NTY4IDI4LjIgMTguMUMyOC4yIDE2LjQ0MzEgMjkuNDk4NCAxNS4xIDMxLjEgMTUuMUMzMi43MDE2IDE1LjEgMzQgMTYuNDQzMSAzNCAxOC4xWiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1''@;'; put 'put ''IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSx2eD1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSAxOC4wMDAzTDI2LjcgMTAuNzEw''@;'; put 'put ''M0MyNy4wMzk4IDEwLjMxMzUgMjcuMDE2OSA5LjcyMjA3IDI2LjY0NzYgOS4zNTI3QzI2LjI3ODIgOC45ODMzMyAyNS42ODY4IDguOTYwNDkgMjUuMjkgOS4zMDAyNkwxOCAxNi41OTAzTDEwLjcxIDkuMjkwMjZDMTAuMzEzMiA4Ljk1MDQ5IDkuNzIxODEgOC45NzMzMyA5LjM1MjQ0IDkuMzQy''@;'; put 'put ''N0M4Ljk4MzA3IDkuNzEyMDcgOC45NjAyMyAxMC4zMDM1IDkuMzAwMDEgMTAuNzAwM0wxNi41OSAxOC4wMDAzTDkuMjkwMDEgMjUuMjkwM0M5LjAwNDYzIDI1LjUzNDcgOC44ODAzMiAyNS45MTg0IDguOTY4MTkgMjYuMjgzN0M5LjA1NjA3IDI2LjY0OSA5LjM0MTI5IDI2LjkzNDIgOS43MDY1''@;'; put 'put ''OSAyNy4wMjIxQzEwLjA3MTkgMjcuMTA5OSAxMC40NTU2IDI2Ljk4NTYgMTAuNyAyNi43MDAzTDE4IDE5LjQxMDNMMjUuMjkgMjYuNzAwM0MyNS42ODY4IDI3LjA0IDI2LjI3ODIgMjcuMDE3MiAyNi42NDc2IDI2LjY0NzhDMjcuMDE2OSAyNi4yNzg1IDI3LjAzOTggMjUuNjg3IDI2LjcgMjUu''@;'; put 'put ''MjkwM0wxOS40MSAxOC4wMDAzWiIvPid9XSxST2U9WyJpbmZvLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMSAyM0gxOVYxNUgxNkMxNS40NSAxNSAxNSAxNS40NSAxNSAxNkMxNSAxNi41NSAxNS40NSAxNyAxNiAxN0gxN1YyM0gxNUMxNC40NSAyMyAxNCAyMy40NSAxNCAyNEMxNCAy''@;'; put 'put ''NC41NSAxNC40NSAyNSAxNSAyNUgyMUMyMS41NSAyNSAyMiAyNC41NSAyMiAyNEMyMiAyMy40NSAyMS41NSAyMyAyMSAyM1pNMTcuOTMgMTMuM0MxOC43IDEzLjMgMTkuMzMgMTIuNjcgMTkuMzMgMTEuOUMxOS4zMyAxMS4xMyAxOC43IDEwLjUgMTcuOTMgMTAuNUMxNy4xNiAxMC41IDE2LjUz''@;'; put 'put ''IDExLjEzIDE2LjUzIDExLjlDMTYuNTMgMTIuNjcgMTcuMTYgMTMuMyAxNy45MyAxMy4zWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4''@;'; put 'put ''IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0''@;'; put 'put ''LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTcuOTMgMTAuM0MxOC44MSAxMC4zIDE5LjUzIDExLjAyIDE5LjUzIDExLjlDMTkuNTMgMTIuNzggMTguODEgMTMuNSAxNy45MyAxMy41QzE3LjA1IDEzLjUgMTYuMzMgMTIuNzggMTYuMzMgMTEuOUMxNi4zMyAxMS4wMiAxNy4wNSAx''@;'; put 'put ''MC4zIDE3LjkzIDEwLjNaTTIxIDI1LjJIMTVDMTQuMzQgMjUuMiAxMy44IDI0LjY2IDEzLjggMjRDMTMuOCAyMy4zNCAxNC4zNCAyMi44IDE1IDIyLjhIMTYuOFYxNy4ySDE2QzE1LjM0IDE3LjIgMTQuOCAxNi42NiAxNC44IDE2QzE0LjggMTUuMzQgMTUuMzQgMTQuOCAxNiAxNC44SDE5LjJW''@;'; put 'put ''MjIuOEgyMUMyMS42NiAyMi44IDIyLjIgMjMuMzQgMjIuMiAyNEMyMi4yIDI0LjY2IDIxLjY2IDI1LjIgMjEgMjUuMloiLz4nfV0sQTBlPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDY5NiAxNy45NzMyTDI3Ljc1OTYgOS43MDU0MkMyOC4wOTk0IDkuMzA5NzIgMjguMDc2NSA4''@;'; put 'put ''LjcxOTg3IDI3LjcwNzEgOC4zNTE0OEMyNy4zMzc4IDcuOTgzMSAyNi43NDYzIDcuOTYwMzIgMjYuMzQ5NiA4LjI5OTE5TDE4LjA1OTYgMTYuNTY3TDkuNzY5NTggOC4yODkyMkM5LjM3NzQ1IDcuODk4MTQgOC43NDE3IDcuODk4MTQgOC4zNDk1OCA4LjI4OTIyQzcuOTU3NDUgOC42ODAyOSA3''@;'; put 'put ''Ljk1NzQ1IDkuMzE0MzQgOC4zNDk1OCA5LjcwNTQyTDE2LjY0OTYgMTcuOTczMkw4LjM0OTU4IDI2LjI0MUM4LjA2NDIgMjYuNDg0OCA3LjkzOTg5IDI2Ljg2NzUgOC4wMjc3NyAyNy4yMzE4QzguMTE1NjQgMjcuNTk2MSA4LjQwMDg2IDI3Ljg4MDYgOC43NjYxNiAyNy45NjgyQzkuMTMxNDYg''@;'; put 'put ''MjguMDU1OSA5LjUxNTE5IDI3LjkzMTkgOS43NTk1OCAyNy42NDczTDE4LjA1OTYgMTkuMzc5NUwyNi4zNDk2IDI3LjY0NzNDMjYuNzQ2MyAyNy45ODYxIDI3LjMzNzggMjcuOTYzNCAyNy43MDcxIDI3LjU5NUMyOC4wNzY1IDI3LjIyNjYgMjguMDk5NCAyNi42MzY3IDI3Ljc1OTYgMjYuMjQx''@;'; put 'put ''TDE5LjQ2OTYgMTcuOTczMloiLz4nfV0sazBlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LjM0OTEgMTcuODk5NkMyOC41Mzg0IDE4LjA4MzcgMjguNzk0NSAxOC4xODYzIDI5LjA2MSAxOC4xODQ4QzI5LjQ2NCAxOC4xODMxIDI5LjgyNjggMTcuOTQ1MSAyOS45ODIx''@;'; put 'put ''IDE3LjU4MDVDMzAuMTM3NCAxNy4yMTU4IDMwLjA1NSAxNi43OTU1IDI5Ljc3MjkgMTYuNTEzM0wxOC4wMzE4IDVMNi4zMDA2NyAxNi41MTMzQzUuOTU5OTkgMTYuOTAzNCA1Ljk4Mjg5IDE3LjQ4NDkgNi4zNTMyNSAxNy44NDgxQzYuNzIzNiAxOC4yMTEyIDcuMzE2NiAxOC4yMzM3IDcuNzE0''@;'; put 'put ''NDIgMTcuODk5NkwxOC4wMzE4IDcuNzgyNDZMMjguMzQ5MSAxNy44OTk2WiIvPjxwYXRoIGQ9Ik0yOC4zNDkxIDI4LjcxNDlDMjguNTM4NCAyOC44OTg5IDI4Ljc5NDUgMjkuMDAxNSAyOS4wNjEgMjlDMjkuNDY0IDI4Ljk5ODQgMjkuODI2OCAyOC43NjAzIDI5Ljk4MjEgMjguMzk1N0MzMC4x''@;'; put 'put ''Mzc0IDI4LjAzMTEgMzAuMDU1IDI3LjYxMDcgMjkuNzcyOSAyNy4zMjg1TDE4LjAzMTggMTUuODE1Mkw2LjMwMDY3IDI3LjMyODVDNS45NTk5OSAyNy43MTg2IDUuOTgyODkgMjguMzAwMSA2LjM1MzI1IDI4LjY2MzNDNi43MjM2IDI5LjAyNjUgNy4zMTY2IDI5LjA0ODkgNy43MTQ0MiAyOC43''@;'; put 'put ''MTQ5TDE4LjAzMTggMTguNTk3N0wyOC4zNDkxIDI4LjcxNDlaIi8+J31dLExPZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42''@;'; put 'put ''ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuODEgMTQuMzZDMjUuMDAxMyAxNC4xOTYyIDI1LjI0NzQgMTQu''@;'; put 'put ''MTEwNiAyNS40OTkxIDE0LjEyMDNDMjUuNzUwNyAxNC4xMyAyNS45ODk1IDE0LjIzNDMgMjYuMTY3NiAxNC40MTI0QzI2LjM0NTcgMTQuNTkwNSAyNi40NSAxNC44MjkzIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1''@;'; put 'put ''Ljg2WiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI5VjhIMzJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3''@;'; put 'put ''NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMx''@;'; put 'put ''LjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFD''@;'; put 'put ''MzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTgg''@;'; put 'put ''MzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2WiIvPjxwYXRoIGQ9Ik0xMCAx''@;'; put 'put ''MEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40''@;'; put 'put ''ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0i''@;'; put 'put ''TTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4''@;'; put 'put ''IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0yMyA2SDEz''@;'; put 'put ''VjhIMjNWNloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3''@;'; put 'put ''SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3''@;'; put 'put ''MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzY0IDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDA0IDMwLjQyMzggMzMuOTYxOSAzMC42NTYgMzMu''@;'; put 'put ''ODc2MSAzMC44NzM1QzMzLjc5MDMgMzEuMDkxIDMzLjY2MjUgMzEuMjg5NCAzMy41IDMxLjQ1NzVDMzMuMzM3NCAzMS42MjU2IDMzLjE0MzQgMzEuNzYgMzIuOTI4OSAzMS44NTMxQzMyLjcxNDUgMzEuOTQ2MiAzMi40ODM4IDMxLjk5NjEgMzIuMjUgMzJIMy43NTAwMUMzLjUxNjI1IDMxLjk5''@;'; put 'put ''NjEgMy4yODU1NSAzMS45NDYyIDMuMDcxMDggMzEuODUzMUMyLjg1NjYxIDMxLjc2IDIuNjYyNTggMzEuNjI1NiAyLjUwMDA3IDMxLjQ1NzVDMi4zMzc1NyAzMS4yODk0IDIuMjA5NzYgMzEuMDkxIDIuMTIzOTYgMzAuODczNUMyLjAzODE2IDMwLjY1NiAxLjk5NjA0IDMwLjQyMzggMi4wMDAw''@;'; put 'put ''MSAzMC4xOVY3LjgxQzEuOTk2MDQgNy41NzYyNCAyLjAzODE2IDcuMzQzOTggMi4xMjM5NiA3LjEyNjVDMi4yMDk3NiA2LjkwOTAyIDIuMzM3NTcgNi43MTA1NyAyLjUwMDA3IDYuNTQyNDlDMi42NjI1OCA2LjM3NDQxIDIuODU2NjEgNi4yMzk5OSAzLjA3MTA4IDYuMTQ2OTFDMy4yODU1NSA2''@;'; put 'put ''LjA1MzgzIDMuNTE2MjUgNi4wMDM5MSAzLjc1MDAxIDZINy4wMDAwMVY4SDQuMDAwMDFWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjQuMTMzMyAxNS4wMzY3SDI2LjQ1N0MyNi40NTgzIDE1LjA1MTQgMjYuNDU5MiAxNS4wNjYxIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYg''@;'; put 'put ''MjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4y''@;'; put 'put ''NzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuMTMzMyAxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZMMjAuNzU5NCA4SDEzVjZIMjEuOTU5NFoiLz48cGF0aCBkPSJNMTAuNzA3MSA5Ljcw''@;'; put 'put ''NzExQzEwLjUxOTYgOS44OTQ2NCAxMC4yNjUyIDEwIDEwIDEwQzkuNzM0OCAxMCA5LjQ4MDQ0IDkuODk0NjQgOS4yOTI5MSA5LjcwNzExQzkuMTA1MzcgOS41MTk1NyA5LjAwMDAxIDkuMjY1MjIgOS4wMDAwMSA5VjNDOS4wMDAwMSAyLjczNDc4IDkuMTA1MzcgMi40ODA0MyA5LjI5MjkxIDIu''@;'; put 'put ''MjkyODlDOS40ODA0NCAyLjEwNTM2IDkuNzM0OCAyIDEwIDJDMTAuMjY1MiAyIDEwLjUxOTYgMi4xMDUzNiAxMC43MDcxIDIuMjkyODlDMTAuODk0NyAyLjQ4MDQzIDExIDIuNzM0NzggMTEgM1Y5QzExIDkuMjY1MjIgMTAuODk0NyA5LjUxOTU3IDEwLjcwNzEgOS43MDcxMVoiLz4nLG91dGxp''@;'; put 'put ''bmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSAyMC41TDE2LjE3IDI1Ljg2TDI2LjIyIDE1LjgxQzI2LjM4MzggMTUuNjE4NyAyNi40Njk0IDE1LjM3MjYgMjYuNDU5NyAxNS4xMjA5QzI2LjQ1IDE0Ljg2OTMgMjYuMzQ1NyAxNC42MzA1IDI2LjE2NzYgMTQuNDUyNEMyNS45ODk1IDE0LjI3NDMg''@;'; put 'put ''MjUuNzUwNyAxNC4xNyAyNS40OTkxIDE0LjE2MDNDMjUuMjQ3NCAxNC4xNTA2IDI1LjAwMTMgMTQuMjM2MiAyNC44MSAxNC40TDE2LjE3IDIzTDEyLjIzIDE5LjA2QzEyLjAzODcgMTguODk2MiAxMS43OTI2IDE4LjgxMDYgMTEuNTQxIDE4LjgyMDNDMTEuMjg5MyAxOC44MyAxMS4wNTA1IDE4''@;'; put 'put ''LjkzNDMgMTAuODcyNCAxOS4xMTI0QzEwLjY5NDQgMTkuMjkwNSAxMC41OSAxOS41MjkzIDEwLjU4MDMgMTkuNzgwOUMxMC41NzA2IDIwLjAzMjYgMTAuNjU2MiAyMC4yNzg3IDEwLjgyIDIwLjQ3TDEwLjgxIDIwLjVaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5''@;'; put 'put ''NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5''@;'; put 'put ''Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzIgMTMuMjJWMzBINC4wMDAwMVY4SDcu''@;'; put 'put ''MDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgx''@;'; put 'put ''NiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMx''@;'; put 'put ''Ljc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2''@;'; put 'put ''MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzMuMzgwMiAxMi43MyAzMi43MDYzIDEzLjAyNjYgMzIgMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUgNkgxM1Y4SDIyLjc4QzIyLjU5Njgg''@;'; put 'put ''Ny4zNDkwMyAyMi41MDI2IDYuNjc2MjUgMjIuNSA2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29s''@;'; put 'put ''aWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAy''@;'; put 'put ''IDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAg''@;'; put 'put ''MTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4y''@;'; put 'put ''NjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMi4yNSA2SDI4LjI1VjlDMjguMjUgOS41ODM0OCAyOC4wMTgyIDEwLjE0MzEgMjcuNjA1NiAxMC41NTU2QzI3LjE5MzEgMTAuOTY4MiAyNi42MzM1IDExLjIgMjYuMDUgMTEuMkMyNS40NjY1IDExLjIgMjQuOTA3IDEwLjk2ODIgMjQuNDk0NCAxMC41NTU2QzI0LjA4MTgg''@;'; put 'put ''MTAuMTQzMSAyMy44NSA5LjU4MzQ4IDIzLjg1IDlWNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2''@;'; put 'put ''QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIu''@;'; put 'put ''MjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAw''@;'; put 'put ''NyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43''@;'; put 'put ''NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEy''@;'; put 'put ''NjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAy''@;'; put 'put ''MC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUg''@;'; put 'put ''MTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAx''@;'; put 'put ''NC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYu''@;'; put 'put ''MzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAu''@;'; put 'put ''OTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1''@;'; put 'put ''LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZI''@;'; put 'put ''MTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDgg''@;'; put 'put ''Ny44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIu''@;'; put 'put ''MDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2''@;'; put 'put ''MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMz''@;'; put 'put ''My42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjE1LjAyNjNDMzMuODg4NiAxNS4wMzU0IDMzLjc3NjQgMTUuMDM4OSAzMy42NjM3IDE1LjAzNjdIMjYuMTk2NEMyNi4yMDY4IDE1LjA1ODQg''@;'; put 'put ''MjYuMjE2NiAxNS4wODA0IDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMg''@;'; put 'put ''MTYuNTlMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4''@;'; put 'put ''LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDIzLjYyMzMgMTUuMDM2N0gyMi4zMzk1QzIxLjE1NzcgMTUuMDYwNCAyMC4wMjMzIDE0LjQ0ODkgMTkuNDIwNiAxMy4zODkzQzE4LjgyMDQgMTIuMzM0MiAxOC44NzAzIDExLjA0MjMgMTku''@;'; put 'put ''NTM2MiAxMC4wMzg3TDIxLjk1OTQgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAu''@;'; put 'put ''NTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4''@;'; put 'put ''MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQz''@;'; put 'put ''IDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcg''@;'; put 'put ''OS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMwIDEzLjVDMjguMDEwOSAxMy41IDI2LjEwMzIgMTIuNzA5OCAyNC42OTY3IDExLjMwMzNDMjMuMjkwMiA5Ljg5Njc4IDIyLjUgNy45ODkxMiAyMi41IDZIMTIuMlY5QzEyLjIgOS41''@;'; put 'put ''ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44''@;'; put 'put ''MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAx''@;'; put 'put ''Ljk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4''@;'; put 'put ''IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQg''@;'; put 'put ''MzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMyLjgwNDEgMTMuMDk5MSAzMS40MTY1IDEzLjUwMTUgMzAgMTMuNVpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMy''@;'; put 'put ''IDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45''@;'; put 'put ''IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2''@;'; put 'put ''NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0''@;'; put 'put ''IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1''@;'; put 'put ''IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLE9PZT1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTIyIDIwSDIwVjIySDIyVjIwWk0yMCAyNkgyMlYyNEgyMFYyNlpNMjggMjRIMjZWMjZIMjhWMjRaTTI4IDIwSDI2VjIySDI4VjIwWk0yNyAx''@;'; put 'put ''MkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0yMiAxNkgyMFYxOEgyMlYxNlpNMjggMTZIMjZWMThIMjhWMTZaTTI0IDhIMTJWMTBIMjRWOFpNMTAgMTZIOFYxOEgx''@;'; put 'put ''MFYxNlpNMTAgMjBIOFYyMkgxMFYyMFpNMTAgMjRIOFYyNkgxMFYyNFpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMzBWMTBIMzJWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAz''@;'; put 'put ''MC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTE0IDI2''@;'; put 'put ''SDE2VjI0SDE0VjI2Wk0xNiAyMEgxNFYyMkgxNlYyMFpNMTYgMTZIMTRWMThIMTZWMTZaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLG91dGxpbmVBbGVydGVkOic8''@;'; put 'put ''cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYx''@;'; put 'put ''MzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4y''@;'; put 'put ''NjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMy''@;'; put 'put ''SDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDZWMTBINFYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMC43NTk0IDhMMTku''@;'; put 'put ''NTU5NCAxMEgxMlY4SDIwLjc1OTRaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgy''@;'; put 'put ''MlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxw''@;'; put 'put ''YXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+''@;'; put 'put ''JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBkPSJNMjMuMjg5OSA4QzIz''@;'; put 'put ''LjQ1OTQgOC41Njk2MyAyMy42OTk1IDkuMTA4ODcgMjQgOS42MDc1OVYxMEgxMlY4SDIzLjI4OTlaIi8+PHBhdGggZD0iTTM0IDExLjc0NTNDMzMuMzk2IDEyLjE2NjYgMzIuNzIyNCAxMi40OTUxIDMyIDEyLjcxMDFWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRD''@;'; put 'put ''Mi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUz''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJI''@;'; put 'put ''MTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0y''@;'; put 'put ''NyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0zMy41IDguNTRDMzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgyOS4yVjExQzI5LjIgMTIuMjEgMjguMjEg''@;'; put 'put ''MTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFW''@;'; put 'put ''MzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDgu''@;'; put 'put ''NTRaTTEwLjEgMjYuMUg3LjlWMjMuOUgxMC4xVjI2LjFaTTEwLjEgMjIuMUg3LjlWMTkuOUgxMC4xVjIyLjFaTTEwLjEgMTguMUg3LjlWMTUuOUgxMC4xVjE4LjFaTTE2LjEgMjYuMUgxMy45VjIzLjlIMTYuMVYyNi4xWk0xNi4xIDIyLjFIMTMuOVYxOS45SDE2LjFWMjIuMVpNMTYuMSAxOC4x''@;'; put 'put ''SDEzLjlWMTUuOUgxNi4xVjE4LjFaTTIyLjEgMjYuMUgxOS45VjIzLjlIMjIuMVYyNi4xWk0yMi4xIDIyLjFIMTkuOVYxOS45SDIyLjFWMjIuMVpNMjIuMSAxOC4xSDE5LjlWMTUuOUgyMi4xVjE4LjFaTTI4LjEgMjYuMUgyNS45VjIzLjlIMjguMVYyNi4xWk0yOC4xIDIyLjFIMjUuOVYxOS45''@;'; put 'put ''SDI4LjFWMjIuMVpNMjguMSAxOC4xSDI1LjlWMTUuOUgyOC4xVjE4LjFaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2''@;'; put 'put ''LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAz''@;'; put 'put ''NC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAz''@;'; put 'put ''OSAxLjY0NjIxWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuNzU5NCA4TDE5LjUzNjIgMTAuMDM4N0MxOC44NzAzIDExLjA0MjMgMTguODIwNCAxMi4zMzQyIDE5LjQyMDYgMTMuMzg5M0MyMC4wMjMzIDE0LjQ0ODkgMjEuMTU3NyAxNS4w''@;'; put 'put ''NjA0IDIyLjMzOTUgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEu''@;'; put 'put ''OCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINi44VjExQzYuOCAxMi4yMSA3Ljc5IDEzLjIgOSAxMy4yQzEwLjIxIDEzLjIgMTEuMiAxMi4yMSAxMS4yIDExVjhIMjAuNzU5''@;'; put 'put ''NFpNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYu''@;'; put 'put ''MVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTku''@;'; put 'put ''OUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0''@;'; put 'put ''aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9k''@;'; put 'put ''ZCIgZD0iTTM0IDExLjc0NTNDMzIuODY2MiAxMi41MzYyIDMxLjQ4NzIgMTMgMzAgMTNDMjkuNDA2MyAxMyAyOC44Mjk5IDEyLjkyNjEgMjguMjc5NCAxMi43ODdDMjcuOTE4MyAxMy4wNDY3IDI3LjQ3NjIgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjEwLjY4''@;'; put 'put ''NjJDMjQuMTEyNiA5LjkyMzkzIDIzLjU5MDQgOS4wMDk3IDIzLjI4OTkgOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYz''@;'; put 'put ''MC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45''@;'; put 'put ''SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIuMVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYu''@;'; put 'put ''MUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjgu''@;'; put 'put ''MVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+J31dLFBPZT1bImZvbGRlci1vcGVuIix7b3V0bGluZTonPHBhdGggZD0iTTMz''@;'; put 'put ''LjI2IDEzQzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMu''@;'; put 'put ''OSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjkuMzlDMzAuNDkgOSAzMS4zOSA5LjkgMzEuMzkgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NkM3LjkyIDE0LjY2IDcuOTIgMTQu''@;'; put 'put ''NTcgNy45MiAxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZaTTUuOSAyOUgyOC45NEwzMi44OCAxNC45NUgxMC4xNkMxMC4wMSAxNC45OCA5Ljg3IDE1LjA3IDkuNzggMTUuMTlMNS45IDI5WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEu''@;'; put 'put ''NjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEy''@;'; put 'put ''LjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+''@;'; put 'put ''PHBhdGggZD0iTTIwLjEwNTggMTFIMTQuOTEwMkMxNC41OTAyIDExIDE0LjI5MDIgMTAuODUgMTQuMTAwMiAxMC41OUwxMS40OTAyIDdINS4wMDAyNFYyNUw3LjkyMDI0IDE0LjY2VjE0LjUyQzguMzIwMjQgMTMuNjMgOS4xOTAyNCAxMy4wNCAxMC4xNzAyIDEzSDIwLjIzMjdDMjAuMjg2MSAx''@;'; put 'put ''My4xMzI2IDIwLjM0ODggMTMuMjYyNyAyMC40MjA4IDEzLjM4OTNDMjAuODgxNSAxNC4xOTkxIDIxLjY1MjcgMTQuNzQ3MiAyMi41MTgzIDE0Ljk1SDEwLjE2MDJDMTAuMDEwMiAxNC45OCA5Ljg3MDI0IDE1LjA3IDkuNzgwMjQgMTUuMTlMNS45MDAyNCAyOUgyOC45NDAyTDMyLjg1NTkgMTUu''@;'; put 'put ''MDM2N0gzNC42NjM5QzM0Ljc2MzYgMTUuMDM4NyAzNC44NjMgMTUuMDM2MiAzNC45NjE3IDE1LjAyOTJDMzQuOTUwMyAxNS4wNzk4IDM0LjkzNjUgMTUuMTMwMSAzNC45MjAyIDE1LjE4TDMwLjczMDIgMzAuMjhDMzAuNjAwMiAzMC43MiAzMC4xOTAyIDMxLjAyIDI5LjczMDIgMzFINC40MTAy''@;'; put 'put ''NEMzLjY2MDI0IDMxLjAyIDMuMDMwMjQgMzAuNDQgMy4wMDAyNCAyOS42OVY3QzMuMDAwMjQgNS45IDMuOTAwMjQgNSA1LjAwMDI0IDVIMTEuNDkwMkMxMi4xMzAyIDUgMTIuNzMwMiA1LjMgMTMuMTEwMiA1LjgyTDE1LjQyMDIgOUgyMS4xNTk3TDIwLjUzNjQgMTAuMDM4N0MyMC4zMzc4IDEw''@;'; put 'put ''LjMzODEgMjAuMTkzOSAxMC42NjMyIDIwLjEwNTggMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4''@;'; put 'put ''NiAxMSAzMSAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjEwMSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2VjE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAx''@;'; put 'put ''MC4xNyAxM0gzMy4yNkMzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0Mz''@;'; put 'put ''IDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI0LjY3MzZDMjUuMDI5NyA5Ljc0OTYgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMVpNMjguOTQgMjlINS45TDkuNzggMTUuMTlDOS44NyAxNS4wNyAxMC4wMSAxNC45OCAxMC4xNiAxNC45''@;'; put 'put ''NUgzMi44OEwyOC45NCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzQuNzA1OCAxMy43NEMzNC4zNzQ0IDEzLjI2NDMgMzMuODIyMyAxMi45ODYgMzMuMjM3OSAxM0gxMC4yNTgzQzkuMjY5NTIgMTMuMDQxNCA4LjM4ODU4IDEzLjYyOTMgNy45ODA2IDE0LjUyQzcuOTc3MjkgMTQuNTY2NiA3''@;'; put 'put ''Ljk3NzI5IDE0LjYxMzQgNy45ODA2IDE0LjY2TDUuMDI0NjMgMjVWNy4wMDAwMUgxMS41OTQ2TDE0LjIzNjcgMTAuNTlDMTQuNDI3OSAxMC44NDg0IDE0LjczMjcgMTEuMDAwOCAxNS4wNTY3IDExSDMxLjM0NDlDMzEuMzQ0OSA5Ljg5NTQ0IDMwLjQzODQgOS4wMDAwMSAyOS4zMjAzIDkuMDAw''@;'; put 'put ''MDFIMTUuNTczTDEzLjIzNDUgNS44MjAwMUMxMi44NTIyIDUuMzAzMTggMTIuMjQyNiA0Ljk5ODM1IDExLjU5NDYgNS4wMDAwMUg1LjAyNDYzQzMuOTA2NDYgNS4wMDAwMSAzIDUuODk1NDQgMyA3LjAwMDAxVjI5LjY5QzMuMDMyODkgMzAuNDM4OSAzLjY2ODkxIDMxLjAyMjYgNC40MjczNyAz''@;'; put 'put ''MUgyOS42NjQ0QzMwLjEyOTMgMzEuMDE4MyAzMC41NDY5IDMwLjcyMTMgMzAuNjc2OCAzMC4yOEwzNC45MTg0IDE1LjE4QzM1LjA3ODggMTQuNjkzNSAzNS4wMDAxIDE0LjE2MSAzNC43MDU4IDEzLjc0WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIy''@;'; put 'put ''MjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3''@;'; put 'put ''NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''MC4yMzI1IDEzQzIwLjI4NTggMTMuMTMyNiAyMC4zNDg1IDEzLjI2MjcgMjAuNDIwNiAxMy4zODkzQzIxLjAyMzMgMTQuNDQ4OSAyMi4xNTc3IDE1LjA2MDQgMjMuMzM5NSAxNS4wMzY3SDM0LjY2MzdDMzQuNzYyOSAxNS4wMzg3IDM0Ljg2MTggMTUuMDM2MiAzNC45NjAxIDE1LjAyOTNDMzQu''@;'; put 'put ''OTQ4NyAxNS4wNzk5IDM0LjkzNDggMTUuMTMwMiAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0''@;'; put 'put ''IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyMS4xNTk0TDIwLjUzNjIgMTAuMDM4N0MyMC4zMzc1IDEwLjMzODEgMjAuMTkzNyAxMC42NjMyIDIwLjEw''@;'; put 'put ''NTYgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2''@;'; put 'put ''OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gyMC4yMzI1WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDEx''@;'; put 'put ''IDMxIDExWiIvPjxwYXRoIGQ9Ik0yNC42NzM2IDkuMDAwMDFDMjUuMDI5NyA5Ljc0OTYxIDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2''@;'; put 'put ''IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gzMy4yMzc5QzMzLjgyMjMgMTIuOTg2IDM0LjM3NDQgMTMuMjY0MyAzNC43MDU4IDEzLjc0QzM1LjAwMDEgMTQuMTYxIDM1''@;'; put 'put ''LjA3ODggMTQuNjkzNSAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAw''@;'; put 'put ''MSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyNC42NzM2WiIvPid9XSxGT2U9WyJtaW51cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNiAxN0gxMEM5LjQ0NzcyIDE3IDkgMTcuNDQ3''@;'; put 'put ''NyA5IDE4QzkgMTguNTUyMyA5LjQ0NzcyIDE5IDEwIDE5SDI2QzI2LjU1MjMgMTkgMjcgMTguNTUyMyAyNyAxOEMyNyAxNy40NDc3IDI2LjU1MjMgMTcgMjYgMTdaIi8+J31dLEhPZT1bInBsdXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuOTk5OSAxN0gxOC45OTk5VjZDMTguOTk5OSA1LjQ0''@;'; put 'put ''NzcyIDE4LjU1MjIgNSAxNy45OTk5IDVDMTcuNDQ3NiA1IDE2Ljk5OTkgNS40NDc3MiAxNi45OTk5IDZWMTdINS45OTk5MkM1LjQ0NzY0IDE3IDQuOTk5OTIgMTcuNDQ3NyA0Ljk5OTkyIDE4QzQuOTg5OTQgMTguMjYzIDUuMDk0MjcgMTguNTE3NCA1LjI4NiAxOC42OTc2QzUuNDc3NzMgMTgu''@;'; put 'put ''ODc3OCA1LjczODA5IDE4Ljk2NjIgNS45OTk5MiAxOC45NEgxNi45OTk5VjMwQzE2Ljk5OTkgMzAuNTUyMyAxNy40NDc2IDMxIDE3Ljk5OTkgMzFDMTguNTUyMiAzMSAxOC45OTk5IDMwLjU1MjMgMTguOTk5OSAzMFYxOUgyOS45OTk5QzMwLjU1MjIgMTkgMzAuOTk5OSAxOC41NTIzIDMwLjk5''@;'; put 'put ''OTkgMThDMzAuOTk5OSAxNy40NDc3IDMwLjU1MjIgMTcgMjkuOTk5OSAxN1oiLz4nfV0sTk9lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQw''@;'; put 'put ''MSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFMMTcuMjAyOSAxMy4wODAxQzE3LjQ2MjggMTMuMDQwMSAxNy43MjI3IDEzLjAwMDEgMTcuOTkyNiAxMy4wMDAxQzIwLjc1MTMgMTMuMDAwMSAyMi45''@;'; put 'put ''OTAyIDE1LjI0MDEgMjIuOTkwMiAxOC4wMDAxQzIyLjk5MDIgMTguMjcwMSAyMi45NTAyIDE4LjUzMDEgMjIuOTEwMyAxOC43OTAxTDI0LjU0OTUgMjAuNDMwMVpNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAy''@;'; put 'put ''MC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAy''@;'; put 'put ''NC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkw''@;'; put 'put ''MDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3''@;'; put 'put ''MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMu''@;'; put 'put ''OTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTEzLjgzNDUgMTUuMjUwMUwy''@;'; put 'put ''MC43NDEzIDIyLjE2MDFDMTkuOTUxNiAyMi42ODAxIDE5LjAxMjEgMjMuMDAwMSAxNy45OTI2IDIzLjAwMDFDMTUuMjMzOSAyMy4wMDAxIDEyLjk5NDkgMjAuNzYwMSAxMi45OTQ5IDE4LjAwMDFDMTIuOTk0OSAxNi45ODAxIDEzLjMwNDggMTYuMDQwMSAxMy44MzQ1IDE1LjI1MDFaTTE3Ljk5''@;'; put 'put ''MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4''@;'; put 'put ''LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAx''@;'; put 'put ''WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEg''@;'; put 'put ''MzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUz''@;'; put 'put ''IDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkw''@;'; put 'put ''MDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5''@;'; put 'put ''LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAz''@;'; put 'put ''My42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUx''@;'; put 'put ''IDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40''@;'; put 'put ''NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaTTE1LjU2MzcgMTEuNDQwMUwyNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFD''@;'; put 'put ''MjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQwMVoiLz4nfV0sVk9lPVsiZXllIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0''@;'; put 'put ''LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0xNy45OTc2IDIzQzE1LjIzOCAyMyAxMi45OTgzIDIwLjc2IDEyLjk5ODMg''@;'; put 'put ''MThDMTIuOTk4MyAxNS4yNCAxNS4yMzggMTMgMTcuOTk3NiAxM0MyMC43NTcxIDEzIDIyLjk5NjggMTUuMjQgMjIuOTk2OCAxOEMyMi45OTY4IDIwLjc2IDIwLjc1NzEgMjMgMTcuOTk3NiAyM1pNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4''@;'; put 'put ''NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0''@;'; put 'put ''LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYg''@;'; put 'put ''MjcgMTcuOTk3NiAyN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQu''@;'; put 'put ''MTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44''@;'; put 'put ''NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41''@;'; put 'put ''MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+J31dLEJPZT1bImVsbGlwc2lzLXZlcnRpY2FsIix7b3V0bGluZTonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEg''@;'; put 'put ''Ni41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEg''@;'; put 'put ''MjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAu''@;'; put 'put ''OVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAx''@;'; put 'put ''Ni40NDMyIDM0IDE4LjEwMDEgMzRaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMy''@;'; put 'put ''IDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAx''@;'; put 'put ''NS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAx''@;'; put 'put ''OC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMy''@;'; put 'put ''Ny4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sak9lPVsidmlldy1jb2x1bW5zIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMSA1SDVDMy44OTU0MyA1IDMgNS44OTU0''@;'; put 'put ''MyAzIDdWMjlDMyAzMC4xMDQ2IDMuODk1NDMgMzEgNSAzMUgzMUMzMi4xMDQ2IDMxIDMzIDMwLjEwNDYgMzMgMjlWN0MzMyA1Ljg5NTQzIDMyLjEwNDYgNSAzMSA1Wk0xMyAyOUg1VjdIMTNWMjlaTTE1IDI5SDIzVjdIMTVWMjlaIi8+J31dLHpPZT1bImFycm93Iix7b3V0bGluZTonPHBhdGgg''@;'; put 'put ''ZD0iTTI3LjY1MDQgMTUuNjM0MUwxNy45OTUxIDZMOC4zMzk4MSAxNS42MzQxQzguMDI4NjkgMTUuODcxNyA3Ljg4NDMyIDE2LjI2OTUgNy45NzAzIDE2LjY1MjFDOC4wNTYyOSAxNy4wMzQ3IDguMzU2ODUgMTcuMzMxOSA4LjczOTUyIDE3LjQxMjdDOS4xMjIxOSAxNy40OTM1IDkuNTE2Njcg''@;'; put 'put ''MTcuMzQzIDkuNzQ5MTIgMTcuMDI3NkwxNi45OTU2IDkuODE5NTVWMjguOTk3NUMxNi45OTU2IDI5LjU1MTIgMTcuNDQzMSAzMCAxNy45OTUxIDMwQzE4LjU0NzEgMzAgMTguOTk0NiAyOS41NTEyIDE4Ljk5NDYgMjguOTk3NVY5LjgxOTU1TDI2LjI0MTEgMTcuMDI3NkMyNi42MzMgMTcuNDE3''@;'; put 'put ''OSAyNy4yNjYyIDE3LjQxNTcgMjcuNjU1NCAxNy4wMjI2QzI4LjA0NDUgMTYuNjI5NSAyOC4wNDIzIDE1Ljk5NDMgMjcuNjUwNCAxNS42MDRWMTUuNjM0MVoiLz4nfV0sVU9lPVsic3RlcC1mb3J3YXJkLTIiLHtvdXRsaW5lOic8cGF0aCBkPSJNNy4wODg5MyA2LjUyMDAzQzYuOTI2NDMgNi42''@;'; put 'put ''NzY0NSA2Ljc5NzM0IDYuODYzMTUgNi43MDkyMSA3LjA2OTIxQzYuNjIxMDggNy4yNzUyNiA2LjU3NTY4IDcuNDk2NTIgNi41NzU2OCA3LjcyMDAzQzYuNTc1NjggNy45NDM1MyA2LjYyMTA4IDguMTY0NzkgNi43MDkyMSA4LjM3MDg1QzYuNzk3MzQgOC41NzY5IDYuOTI2NDMgOC43NjM2MSA3''@;'; put 'put ''LjA4ODkzIDguOTIwMDNMMTYuNjg3MiAxOEw3LjEyOTY0IDI3LjA4QzYuODI5NzcgMjcuMzk5MSA2LjY2NTU0IDI3LjgxODggNi42NzA2NSAyOC4yNTNDNi42NzU3NiAyOC42ODcyIDYuODQ5ODIgMjkuMTAzMSA3LjE1NzEyIDI5LjQxNTJDNy40NjQ0MiAyOS43Mjc0IDcuODgxNjYgMjkuOTEy''@;'; put 'put ''MSA4LjMyMzIzIDI5LjkzMTZDOC43NjQ4IDI5Ljk1MTEgOS4xOTcyMSAyOS44MDM4IDkuNTMxNzYgMjkuNTJMMjEuNjY0NSAxOEw5LjUzMTc2IDYuNDcwMDNDOS4zNjg1MSA2LjMxNDgyIDkuMTc1NTkgNi4xOTI5MyA4Ljk2NDEzIDYuMTExMzdDOC43NTI2NyA2LjAyOTgyIDguNTI2ODYgNS45''@;'; put 'put ''OTAyMiA4LjI5OTc0IDUuOTk0ODdDOC4wNzI2MiA1Ljk5OTUyIDcuODQ4NjkgNi4wNDgzMiA3LjY0MDg3IDYuMTM4NDZDNy40MzMwNSA2LjIyODU5IDcuMjQ1NDYgNi4zNTgyOCA3LjA4ODkzIDYuNTIwMDNaIi8+PHBhdGggZD0iTTI2Ljg0NTMgNUMyNi4zODY0IDUgMjUuOTQ2MyA1LjE3OTEx''@;'; put 'put ''IDI1LjYyMTggNS40OTc5MkMyNS4yOTczIDUuODE2NzMgMjUuMTE1IDYuMjQ5MTMgMjUuMTE1IDYuN1YyOS4zQzI1LjExNSAyOS43NTA5IDI1LjI5NzMgMzAuMTgzMyAyNS42MjE4IDMwLjUwMjFDMjUuOTQ2MyAzMC44MjA5IDI2LjM4NjQgMzEgMjYuODQ1MyAzMUMyNy4zMDQzIDMxIDI3Ljc0''@;'; put 'put ''NDQgMzAuODIwOSAyOC4wNjg5IDMwLjUwMjFDMjguMzkzNCAzMC4xODMzIDI4LjU3NTcgMjkuNzUwOSAyOC41NzU3IDI5LjNWNi43QzI4LjU3NTcgNi4yNDkxMyAyOC4zOTM0IDUuODE2NzMgMjguMDY4OSA1LjQ5NzkyQzI3Ljc0NDQgNS4xNzkxMSAyNy4zMDQzIDUgMjYuODQ1MyA1WiIvPid9''@;'; put 'put ''XSxaT2U9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2''@;'; put 'put ''NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAy''@;'; put 'put ''MS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTE3IDI2Ljg2TDE1IDI1Ljg2VjIwLjY4TDguNDIgMTRDOC4xNTY3OSAxMy43MzMgOC4wMDY0IDEzLjM3NDkgOCAxM1YxMkM4IDExLjQ0NzcgOC40NDc3MiAxMSA5IDExSDI3''@;'; put 'put ''QzI3LjU1MjMgMTEgMjggMTEuNDQ3NyAyOCAxMlYxM0MyNy45OTM2IDEzLjM3NDkgMjcuODQzMiAxMy43MzMgMjcuNTggMTRMMjEgMjAuNjhWMjlMMTkgMjhMMTkuMDMgMjAuMjdDMTkuMDMxMSAyMC4wMDc3IDE5LjEzNTMgMTkuNzU2MyAxOS4zMiAxOS41N0wyNS43OSAxM0gxMC4yM0wxNi43''@;'; put 'put ''MSAxOS41N0MxNi44OTQ3IDE5Ljc1NjMgMTYuOTk4OSAyMC4wMDc3IDE3IDIwLjI3VjI2Ljg2WiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQg''@;'; put 'put ''MzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRD''@;'; put 'put ''MjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNOCAxMi4xMlYxMUgyNy45OFYxMi4xNEMyNy45NzgxIDEyLjI3MTkgMjcuOTI0MiAxMi4zOTc3IDI3LjgzIDEyLjQ5TDIw''@;'; put 'put ''LjcxIDE5Ljc0QzIwLjYwODEgMTkuODI5OSAyMC41NDM4IDE5Ljk1NDggMjAuNTMgMjAuMDlWMjguNDhDMjAuNTMwMyAyOC42NTI4IDIwLjQ0MTUgMjguODEzNCAyMC4yOTUgMjguOTA1QzIwLjE0ODUgMjguOTk2NiAxOS45NjUxIDI5LjAwNiAxOS44MSAyOC45M0wxNS44NiAyNy41MkMxNS42''@;'; put 'put ''ODgzIDI3LjQzNTkgMTUuNTc5NiAyNy4yNjEyIDE1LjU4IDI3LjA3VjIwLjE4QzE1LjU3ODEgMjAuMDQ4MSAxNS41MjQyIDE5LjkyMjMgMTUuNDMgMTkuODNMOC4xNSAxMi40N0M4LjA1NTc5IDEyLjM3NzcgOC4wMDE4OCAxMi4yNTE5IDggMTIuMTJaIi8+J31dLFdPZT1bImZpbHRlci1ncmlk''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTE1IDIzLjg2TDE3IDI0Ljg2VjE4LjI3QzE2Ljk5ODkgMTguMDA3NyAxNi44OTQ3IDE3Ljc1NjMgMTYuNzEgMTcuNTdMMTAuMjMgMTFIMjUuNzlMMTkuMzIgMTcuNTdDMTkuMTM1MyAxNy43NTYzIDE5LjAzMTEgMTguMDA3NyAxOS4wMyAxOC4yN0wxOSAy''@;'; put 'put ''NkwyMSAyN1YxOC42OEwyNy41OCAxMkMyNy44NDMyIDExLjczMyAyNy45OTM2IDExLjM3NDkgMjggMTFWMTBDMjggOS40NDc3MiAyNy41NTIzIDkgMjcgOUg5QzguNDQ3NzIgOSA4IDkuNDQ3NzIgOCAxMFYxMUM4LjAwNjQgMTEuMzc0OSA4LjE1Njc5IDExLjczMyA4LjQyIDEyTDE1IDE4LjY4''@;'; put 'put ''VjIzLjg2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04IDlWMTAuMTIxMkM4LjAwMTg4IDEwLjI1MzIgOC4wNTU4NSAxMC4zNzkxIDguMTUwMTUgMTAuNDcxNkwxNS40Mzc0IDE3LjgzOTNDMTUuNTMxNyAxNy45MzE3IDE1LjU4NTcgMTguMDU3NyAxNS41ODc2IDE4LjE4OTdWMjUuMDg3QzE1LjU4''@;'; put 'put ''NzIgMjUuMjc4NCAxNS42OTYgMjUuNDUzMiAxNS44Njc5IDI1LjUzNzVMMTkuODIxOCAyNi45NDg5QzE5Ljk3NzEgMjcuMDI1IDIwLjE2MDcgMjcuMDE1NiAyMC4zMDczIDI2LjkyMzlDMjAuNDUzOSAyNi44MzIzIDIwLjU0MjkgMjYuNjcxNCAyMC41NDI1IDI2LjQ5ODVWMTguMDk5NkMyMC41''@;'; put 'put ''NTY0IDE3Ljk2NDMgMjAuNjIwNyAxNy44MzkyIDIwLjcyMjcgMTcuNzQ5MkwyNy44NDk4IDEwLjQ5MTZDMjcuOTQ0MiAxMC4zOTkyIDI3Ljk5ODEgMTAuMjczMiAyOCAxMC4xNDEyVjlIOFoiLz4nfV0sc1k9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAyMi42MUMx''@;'; put 'put ''Ny40NDc3IDIyLjYxIDE3IDIyLjE2MjMgMTcgMjEuNjFWOS42MUMxNyA5LjA1NzcyIDE3LjQ0NzcgOC42MSAxOCA4LjYxQzE4LjU1MjMgOC42MSAxOSA5LjA1NzcyIDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYyMyAxOC41NTIzIDIyLjYxIDE4IDIyLjYxWiIvPjxwYXRoIGQ9Ik0xOS4zMyAyNi4w''@;'; put 'put ''NkMxOS4zMyAyNi43OTQ1IDE4LjczNDUgMjcuMzkgMTggMjcuMzlDMTcuMjY1NSAyNy4zOSAxNi42NyAyNi43OTQ1IDE2LjY3IDI2LjA2QzE2LjY3IDI1LjMyNTUgMTcuMjY1NSAyNC43MyAxOCAyNC43M0MxOC43MzQ1IDI0LjczIDE5LjMzIDI1LjMyNTUgMTkuMzMgMjYuMDZaIi8+PHBhdGgg''@;'; put 'put ''ZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzIyLjI0MzUgMzQgMjYuMzEzMSAzMi4zMTQzIDI5LjMxMzcgMjkuMzEzN0MzMi4zMTQzIDI2LjMxMzEgMzQgMjIuMjQzNSAzNCAxOEMzNCA5LjE2MzQ0IDI2''@;'; put 'put ''LjgzNjYgMiAxOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOFpNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0x''@;'; put 'put ''OCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3IDkuNjFDMTcgOS4wNiAxNy40NSA4LjYxIDE4IDguNjFDMTgu''@;'; put 'put ''NTUgOC42MSAxOSA5LjA2IDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYgMTguNTUgMjIuNjEgMTggMjIuNjFDMTcuNDUgMjIuNjEgMTcgMjIuMTYgMTcgMjEuNjFWOS42MVpNMTggMjcuMjZDMTcuMzQgMjcuMjYgMTYuOCAyNi43MiAxNi44IDI2LjA2QzE2LjggMjUuNCAxNy4zNCAyNC44NiAxOCAy''@;'; put 'put ''NC44NkMxOC42NiAyNC44NiAxOS4yIDI1LjQgMTkuMiAyNi4wNkMxOS4yIDI2LjcyIDE4LjY2IDI3LjI2IDE4IDI3LjI2WiIvPid9XSxZT2U9WyJoZWxwIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgOS4xNjM0NCA5''@;'; put 'put ''LjE2MzQ0IDIgMTggMkMyMi4yNDM1IDIgMjYuMzEzMSAzLjY4NTcxIDI5LjMxMzcgNi42ODYyOUMzMi4zMTQzIDkuNjg2ODcgMzQgMTMuNzU2NSAzNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQgMTggMzRDOS4xNjM0NCAzNCAyIDI2LjgzNjYgMiAxOFpNNCAxOEM0IDI1LjczMiAxMC4yNjgg''@;'; put 'put ''MzIgMTggMzJDMjEuNzEzIDMyIDI1LjI3NCAzMC41MjUgMjcuODk5NSAyNy44OTk1QzMwLjUyNSAyNS4yNzQgMzIgMjEuNzEzIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQgMThaTTE4LjI5IDguOTJDMTYuMDk2MSA4Ljg4Mzc0IDEzLjk5OTggOS44''@;'; put 'put ''MjU2IDEyLjU3IDExLjQ5QzEyLjM3MTggMTEuNjczNyAxMi4yNTYzIDExLjkyOTggMTIuMjUgMTIuMkMxMi4yNDk5IDEyLjQ0OTMgMTIuMzUwOSAxMi42ODggMTIuNTMgMTIuODYxNEMxMi43MDkxIDEzLjAzNDggMTIuOTUwOCAxMy4xMjgxIDEzLjIgMTMuMTJDMTMuNDY0MiAxMy4xMTM1IDEz''@;'; put 'put ''LjcxNjggMTMuMDEwMyAxMy45MSAxMi44M0MxNC45OTE2IDExLjU2MjUgMTYuNTczNyAxMC44MzE3IDE4LjI0IDEwLjgzQzIwLjYgMTAuODMgMjIuMDcgMTIuMzUgMjIuMDcgMTQuMjRWMTQuMjlDMjIuMDcgMTYuNSAyMC4zMSAxNy43MyAxNy41MyAxNy45NEMxNy4zMDIzIDE3Ljk0ODggMTcu''@;'; put 'put ''MDg5MiAxOC4wNTQyIDE2Ljk0NDEgMTguMjI5OUMxNi43OTkgMTguNDA1NiAxNi43MzU3IDE4LjYzNDggMTYuNzcgMTguODZWMjEuNjFDMTYuODIxNSAyMi4xMjI5IDE3LjI1NDUgMjIuNTEyNiAxNy43NyAyMi41MUgxNy44OEMxOC4zOTI5IDIyLjQ1ODUgMTguNzgyNiAyMi4wMjU1IDE4Ljc4''@;'; put 'put ''IDIxLjUxVjE5LjQ1QzIxLjc4IDE5LjAzIDI0LjIxIDE3LjQ1IDI0LjIxIDE0LjE3VjE0LjEyQzI0LjE4IDExLjEyIDIxLjg0IDguOTIgMTguMjkgOC45MlpNMTkuMDMgMjYuMkMxOS4wMyAyNi44OTA0IDE4LjQ3MDQgMjcuNDUgMTcuNzggMjcuNDVDMTcuMDg5NiAyNy40NSAxNi41MyAyNi44''@;'; put 'put ''OTA0IDE2LjUzIDI2LjJDMTYuNTMgMjUuNTA5NiAxNy4wODk2IDI0Ljk1IDE3Ljc4IDI0Ljk1QzE4LjQ3MDQgMjQuOTUgMTkuMDMgMjUuNTA5NiAxOS4wMyAyNi4yWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMzLjAwMTMgMTIuNzY4OUMzMi4zOTU5IDEzLjA0NjIgMzEuNzU1OSAx''@;'; put 'put ''My4yNDA2IDMxLjA5ODYgMTMuMzQ2N0MzMy4yNjM2IDE5LjUxMDggMzAuODc2MyAyNi4zNTI4IDI1LjM0NjUgMjkuODMyQzE5LjgxNjcgMzMuMzExMiAxMi42MTU0IDMyLjUwMiA3Ljk5NTY5IDI3Ljg4MjJDMy4zNzU5NyAyMy4yNjI1IDIuNTY2NzQgMTYuMDYxMyA2LjA0NTkyIDEwLjUzMTVD''@;'; put 'put ''OS41MjUwOSA1LjAwMTYyIDE2LjM2NzEgMi42MTQyOSAyMi41MzEyIDQuNzc5MzhDMjIuNjM3NSA0LjEyMjA1IDIyLjgzMTggMy40ODIwNCAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5''@;'; put 'put ''NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVoiLz48cGF0aCBkPSJNMTcuNzE5NiAyNy4zNTMzQzE4LjQwNzMgMjcuMzUz''@;'; put 'put ''MyAxOC45NjQ4IDI2Ljc5NTggMTguOTY0OCAyNi4xMDgxQzE4Ljk2NDggMjUuNDIwMyAxOC40MDczIDI0Ljg2MjggMTcuNzE5NiAyNC44NjI4QzE3LjAzMTggMjQuODYyOCAxNi40NzQzIDI1LjQyMDMgMTYuNDc0MyAyNi4xMDgxQzE2LjQ3NDMgMjYuNzk1OCAxNy4wMzE4IDI3LjM1MzMgMTcu''@;'; put 'put ''NzE5NiAyNy4zNTMzWiIvPjxwYXRoIGQ9Ik0yNC4wOTUzIDE0LjA3MzlWMTQuMTIzOEMyNC4wOTUzIDE3LjM5MTMgMjEuNjc0NSAxOC45MzU0IDE4LjcyNTcgMTkuMzgzN1YyMS40MzU5QzE4LjcyODMgMjEuOTQ5NCAxOC4zNDAxIDIyLjM4MDcgMTcuODI5MSAyMi40MzIxSDE3LjcxOTZDMTcu''@;'; put 'put ''MjA2IDIyLjQzNDcgMTYuNzc0NyAyMi4wNDY1IDE2LjcyMzMgMjEuNTM1NVYxOC43OTU5QzE2LjY4OTEgMTguNTcxNiAxNi43NTIyIDE4LjM0MzIgMTYuODk2OCAxOC4xNjgyQzE3LjA0MTMgMTcuOTkzMiAxNy4yNTM3IDE3Ljg4ODIgMTcuNDgwNSAxNy44Nzk0QzIwLjI0OTkgMTcuNjcwMiAy''@;'; put 'put ''Mi4wMDMyIDE2LjQ0NDkgMjIuMDAzMiAxNC4yNDMzVjE0LjE5MzVDMjIuMDAzMiAxMi4zMTA3IDIwLjUzODggMTAuNzk2NCAxOC4xODc4IDEwLjc5NjRDMTYuNTI3OCAxMC43OTgyIDE0Ljk1MTcgMTEuNTI2MSAxMy44NzQyIDEyLjc4ODhDMTMuNjgxNyAxMi45Njg0IDEzLjQzMDEgMTMuMDcx''@;'; put 'put ''MiAxMy4xNjY5IDEzLjA3NzdDMTIuOTE4NyAxMy4wODU4IDEyLjY3NzggMTIuOTkyOSAxMi40OTk0IDEyLjgyMDFDMTIuMzIxIDEyLjY0NzMgMTIuMjIwNCAxMi40MDk2IDEyLjIyMDUgMTIuMTYxMkMxMi4yMjY4IDExLjg5MjEgMTIuMzQxOCAxMS42MzY5IDEyLjUzOTMgMTEuNDUzOUMxMy45''@;'; put 'put ''NjM3IDkuNzk1ODUgMTYuMDUyIDguODU3NTcgMTguMjM3NiA4Ljg5MzY5QzIxLjc2NDEgOC44OTM2OSAyNC4wOTUzIDExLjA4NTMgMjQuMDk1MyAxNC4wNzM5WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3''@;'; put 'put ''LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQg''@;'; put 'put ''MTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE3Ljc4IDI3Ljg1QzE3LjExMjYgMjcuODUgMTYuNTExIDI3LjQ0OCAxNi4yNTU2IDI2LjgzMTRD''@;'; put 'put ''MTYuMDAwMiAyNi4yMTQ5IDE2LjE0MTQgMjUuNTA1MiAxNi42MTMzIDI1LjAzMzNDMTcuMDg1MiAyNC41NjE0IDE3Ljc5NDkgMjQuNDIwMiAxOC40MTE0IDI0LjY3NTZDMTkuMDI4IDI0LjkzMSAxOS40MyAyNS41MzI2IDE5LjQzIDI2LjJDMTkuNDMgMjcuMTExMyAxOC42OTEzIDI3Ljg1IDE3''@;'; put 'put ''Ljc4IDI3Ljg1Wk0xOS4xNSAyMS41MVYxOS43OUMyMi42MSAxOS4yIDI0LjU4IDE3LjE2IDI0LjU4IDE0LjExQzI0LjU4IDEwLjgxIDIyIDguNTEgMTguMyA4LjUxQzE2LjAwMDUgOC40NzQ1MiAxMy44MDMzIDkuNDU5NTYgMTIuMyAxMS4yQzEyLjAzMDQgMTEuNDYzNiAxMS44NzU5IDExLjgy''@;'; put 'put ''MyAxMS44NyAxMi4yQzExLjg4MyAxMi43NTE2IDEyLjIyOCAxMy4yNDA2IDEyLjc0MzIgMTMuNDM4QzEzLjI1ODUgMTMuNjM1MyAxMy44NDE5IDEzLjUwMTggMTQuMjIgMTMuMUMxNS4yMDkyIDExLjkwNjkgMTYuNjcwNCAxMS4yMDU2IDE4LjIyIDExLjE4QzIwLjI0IDExLjE4IDIxLjY1IDEy''@;'; put 'put ''LjQyIDIxLjY1IDE0LjI1QzIxLjY1IDE2LjggMTkuMDQgMTcuMzggMTcuNDcgMTcuNUMxNy4xNDQ4IDE3LjUxNzUgMTYuODQwOSAxNy42Njc0IDE2LjYyOTMgMTcuOTE1QzE2LjQxNzYgMTguMTYyNSAxNi4zMTY3IDE4LjQ4NiAxNi4zNSAxOC44MVYyMS41N0MxNi4zNjA0IDIxLjkyNzIgMTYu''@;'; put 'put ''NTEzMSAyMi4yNjU1IDE2Ljc3NDEgMjIuNTA5NkMxNy4wMzUxIDIyLjc1MzcgMTcuMzgyOSAyMi44ODM1IDE3Ljc0IDIyLjg3SDE3Ljg1QzE4LjU3NTMgMjIuODMyOSAxOS4xNDU2IDIyLjIzNjIgMTkuMTUgMjEuNTFaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2Rk''@;'; put 'put ''IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzAuMTY1OSAxNC4wNjg4IDI2LjgyMTIgMTMuNDY3OSAyNC42MTU2IDExLjI2MjNDMjIuNDEwMSA5LjA1Njc0IDIxLjgwOTEgNS43MTIgMjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTky''@;'; put 'put ''MDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaTTE3''@;'; put 'put ''LjcxOTYgMjcuNzEyQzE3LjA1NDcgMjcuNzEyIDE2LjQ1NTQgMjcuMzExNSAxNi4yMDA5IDI2LjY5NzNDMTUuOTQ2NSAyNi4wODMgMTYuMDg3MiAyNS4zNzYgMTYuNTU3MyAyNC45MDU5QzE3LjAyNzQgMjQuNDM1OCAxNy43MzQ0IDI0LjI5NTIgMTguMzQ4NiAyNC41NDk2QzE4Ljk2MjggMjQu''@;'; put 'put ''ODA0IDE5LjM2MzMgMjUuNDAzNCAxOS4zNjMzIDI2LjA2ODJDMTkuMzc0IDI2LjUxMSAxOS4yMDU2IDI2LjkzOTQgMTguODk2MiAyNy4yNTY0QzE4LjU4NjcgMjcuNTczMyAxOC4xNjI1IDI3Ljc1MTkgMTcuNzE5NiAyNy43NTE4VjI3LjcxMlpNMTkuMDg0NCAyMS4zOTZWMTkuNzIyNEMyMi41''@;'; put 'put ''MzEyIDE5LjEzNDcgMjQuNDkzNyAxNy4xMDI0IDI0LjQ5MzcgMTQuMDI0MUMyNC40OTM3IDEwLjczNjcgMjEuOTIzNSA4LjQ0NTQgMTguMjM3NiA4LjQ0NTRDMTUuOTQ2OCA4LjQxMDA2IDEzLjc1OCA5LjM5MTM2IDEyLjI2MDQgMTEuMTI1MkMxMS45OTE4IDExLjM4NzggMTEuODM3OSAxMS43''@;'; put 'put ''NDU4IDExLjgzMiAxMi4xMjE0QzExLjg0NSAxMi42NzA5IDEyLjE4ODYgMTMuMTU4MSAxMi43MDE5IDEzLjM1NDdDMTMuMjE1MiAxMy41NTEyIDEzLjc5NjQgMTMuNDE4MiAxNC4xNzMxIDEzLjAxOEMxNS4xNTg2IDExLjgyOTQgMTYuNjE0MSAxMS4xMzA3IDE4LjE1NzkgMTEuMTA1M0MyMC4x''@;'; put 'put ''NzAyIDExLjEwNTMgMjEuNTc0OSAxMi4zNDA2IDIxLjU3NDkgMTQuMTYzNkMyMS41NzQ5IDE2LjcwMzkgMTguOTc0OCAxNy4yODE3IDE3LjQxMDcgMTcuNDAxM0MxNy4wODY3IDE3LjQxODYgMTYuNzg0IDE3LjU2ODEgMTYuNTczMiAxNy44MTQ3QzE2LjM2MjMgMTguMDYxMyAxNi4yNjE4IDE4''@;'; put 'put ''LjM4MzUgMTYuMjk1IDE4LjcwNjNWMjEuNDU1OEMxNi4zMDU0IDIxLjgxMTcgMTYuNDU3NSAyMi4xNDg3IDE2LjcxNzUgMjIuMzkxOUMxNi45Nzc1IDIyLjYzNTEgMTcuMzIzOSAyMi43NjQzIDE3LjY3OTcgMjIuNzUwOUgxNy43ODkzQzE4LjUxMTggMjIuNzEzOSAxOS4wOCAyMi4xMTk1IDE5''@;'; put 'put ''LjA4NDQgMjEuMzk2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxHT2U9WyJpbmZvLXN0YW5kYXJk''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOFpNNCAxOEM0IDEwLjI3IDEw''@;'; put 'put ''LjI3IDQgMTggNEMyNS43MyA0IDMyIDEwLjI3IDMyIDE4QzMyIDI1LjczIDI1LjczIDMyIDE4IDMyQzEwLjI3IDMyIDQgMjUuNzMgNCAxOFpNMjEgMjVIMTlWMTRIMTZDMTUuNDUgMTQgMTUgMTQuNDUgMTUgMTVDMTUgMTUuNTUgMTUuNDUgMTYgMTYgMTZIMTdWMjVIMTVDMTQuNDUgMjUgMTQg''@;'; put 'put ''MjUuNDUgMTQgMjZDMTQgMjYuNTUgMTQuNDUgMjcgMTUgMjdIMjFDMjEuNTUgMjcgMjIgMjYuNTUgMjIgMjZDMjIgMjUuNDUgMjEuNTUgMjUgMjEgMjVaTTE5LjM3IDEwLjQ1QzE5LjM3IDExLjIyIDE4Ljc0IDExLjg1IDE3Ljk3IDExLjg1QzE3LjIgMTEuODUgMTYuNTcgMTEuMjIgMTYuNTcg''@;'; put 'put ''MTAuNDVDMTYuNTcgOS42OCAxNy4yIDkuMDUgMTcuOTcgOS4wNUMxOC43NCA5LjA1IDE5LjM3IDkuNjggMTkuMzcgMTAuNDVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4z''@;'; put 'put ''MSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcuOTcgOC44NUMxOC44NSA4Ljg1IDE5LjU3IDkuNTcgMTkuNTcgMTAuNDVDMTkuNTcgMTEuMzMgMTguODUgMTIuMDUgMTcuOTcgMTIuMDVDMTcuMDkgMTIuMDUgMTYuMzcgMTEuMzMgMTYu''@;'; put 'put ''MzcgMTAuNDVDMTYuMzcgOS41NyAxNy4wOSA4Ljg1IDE3Ljk3IDguODVaTTIxIDI3LjJIMTVDMTQuMzQgMjcuMiAxMy44IDI2LjY2IDEzLjggMjZDMTMuOCAyNS4zNCAxNC4zNCAyNC44IDE1IDI0LjhIMTYuOFYxNi4ySDE2QzE1LjM0IDE2LjIgMTQuOCAxNS42NiAxNC44IDE1QzE0LjggMTQu''@;'; put 'put ''MzQgMTUuMzQgMTMuOCAxNiAxMy44SDE5LjJWMjQuOEgyMUMyMS42NiAyNC44IDIyLjIgMjUuMzQgMjIuMiAyNkMyMi4yIDI2LjY2IDIxLjY2IDI3LjIgMjEgMjcuMloiLz4nfV0sJE9lPVsibm90ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCww''@;'; put 'put ''LDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiLz48cGF0aCBkPSJNMzMuNTMsNS44NCwzMC4xNiwyLjQ3YTEuNjEsMS42MSwwLDAsMC0yLjI4LDBMMTQuMTcsMTYuMjZsLTEuMTEsNC44MUExLjYxLDEuNjEsMCwwLDAsMTQuNjMsMjMsMS42OSwxLjY5LDAs''@;'; put 'put ''MCwwLDE1LDIzbDQuODUtMS4wN0wzMy41Myw4LjEyQTEuNjEsMS42MSwwLDAsMCwzMy41Myw1Ljg0Wk0xOC44MSwyMC4wOGwtMy42Ni44MUwxNiwxNy4yNiwyNi4zMiw2Ljg3bDIuODIsMi44MlpNMzAuMjcsOC41NiwyNy40NSw1Ljc0LDI5LDQuMTYsMzEuODQsN1oiLz4nLHNvbGlkOic8cGF0''@;'; put 'put ''aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUs''@;'; put 'put ''OS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4yMywzLjIzWiIvPid9XSxsWT1bInN1Y2Nlc3Mtc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAy''@;'; put 'put ''IDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAy''@;'; put 'put ''NS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTI2LjU5IDEyLjFDMjYuOTggMTEuNzEyMyAyNy42MSAxMS43''@;'; put 'put ''MTIzIDI4IDEyLjFDMjguMTg5MyAxMi4yODc4IDI4LjI5NTggMTIuNTQzNCAyOC4yOTU4IDEyLjgxQzI4LjI5NTggMTMuMDc2NiAyOC4xODkzIDEzLjMzMjIgMjggMTMuNTJMMTUuNDkgMjZMOCAxOC41M0M3LjYxODkyIDE4LjExODUgNy42NDM1NSAxNy40NzYxIDguMDU1IDE3LjA5NUM4LjQ2''@;'; put 'put ''NjQ1IDE2LjcxMzkgOS4xMDg5MiAxNi43Mzg1IDkuNDkgMTcuMTVMMTUuNDkgMjMuMTVMMjYuNTkgMTIuMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMjkuMzEgNi42OUMyNi4zMSAzLjY5IDIyLjI0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzI2Ljg0''@;'; put 'put ''IDM0IDM0IDI2Ljg0IDM0IDE4QzM0IDEzLjc2IDMyLjMxIDkuNjkgMjkuMzEgNi42OVpNMjguMTQgMTMuNjRMMTUuNjMgMjYuMTJMMTUuNDkgMjYuMjZMMTUuMzUgMjYuMTJMNy44NSAxOC42NEM3LjM5IDE4LjE1IDcuNDIgMTcuMzggNy45MiAxNi45MkM4LjE1IDE2LjcxIDguNDQgMTYuNiA4''@;'; put 'put ''Ljc1IDE2LjZDOS4wOSAxNi42IDkuNDEgMTYuNzQgOS42NCAxNi45OEwxNS41IDIyLjg0TDI2LjQ2IDExLjkzQzI2LjY5IDExLjcgMjYuOTkgMTEuNTggMjcuMzEgMTEuNThDMjcuNjMgMTEuNTggMjcuOTMgMTEuNyAyOC4xNiAxMS45M0MyOC4zOSAxMi4xNSAyOC41MSAxMi40NiAyOC41MSAx''@;'; put 'put ''Mi43OEMyOC41MSAxMy4xIDI4LjM4IDEzLjQxIDI4LjE2IDEzLjYzTDI4LjE0IDEzLjY0WiIvPid9XSxLT2U9WyJ3YXJuaW5nLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjAwMDEgMjIuOTkzMkMxOC41NTAxIDIyLjk5MzIgMTkuMDAwMSAyMi41NDM0IDE5LjAwMDEgMjEuOTkz''@;'; put 'put ''NlYxMC45OTc1QzE5LjAwMDEgMTAuNDQ3NyAxOC41NTAxIDkuOTk3ODYgMTguMDAwMSA5Ljk5Nzg2QzE3LjQ1MDEgOS45OTc4NiAxNy4wMDAxIDEwLjQ0NzcgMTcuMDAwMSAxMC45OTc1VjIxLjk5MzZDMTcuMDAwMSAyMi41NDM0IDE3LjQ1MDEgMjIuOTkzMiAxOC4wMDAxIDIyLjk5MzJaTTMz''@;'; put 'put ''LjU2MDEgMjcuMjExN0wyMC43ODAxIDUuNTc5NDRDMjAuMjAwMSA0LjU4OTc5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41ODk3OSAxNS4yMjAxIDUuNTc5NDRMMi40NDAxIDI3LjIxMTdDMS44NTAxIDI4LjIxMTQgMS44NTAxIDI5LjQwMDkgMi40MzAxIDMwLjQw''@;'; put 'put ''MDZDMy4wMTAxIDMxLjQwMDIgNC4wNjAxIDMyIDUuMjIwMSAzMkgzMC43NzAxQzMxLjk0MDEgMzIgMzIuOTgwMSAzMS40MDAyIDMzLjU2MDEgMzAuNDAwNkMzNC4xNDAxIDI5LjQwMDkgMzQuMTQwMSAyOC4yMTE0IDMzLjU1MDEgMjcuMjExN0gzMy41NjAxWk0zMS44MTAxIDI5LjQwMDlDMzEu''@;'; put 'put ''NzEwMSAyOS41ODA5IDMxLjQwMDEgMjkuOTkwNyAzMC43ODAxIDI5Ljk5MDdINS4yMzAxQzQuNjEwMSAyOS45OTA3IDQuMzAwMSAyOS41ODA5IDQuMjAwMSAyOS40MDA5QzQuMTAwMSAyOS4yMjEgMy44OTAxIDI4Ljc1MTIgNC4yMDAxIDI4LjIzMTNMMTYuOTgwMSA2LjU4OTA4QzE3LjI5MDEg''@;'; put 'put ''Ni4wNjkyNiAxNy44MDAxIDYuMDA5MjggMTguMDAwMSA2LjAwOTI4QzE4LjIwMDEgNi4wMDkyOCAxOC43MTAxIDYuMDY5MjYgMTkuMDIwMSA2LjU4OTA4TDMxLjc5MDEgMjguMjIxM0MzMi4xMDAxIDI4Ljc1MTIgMzEuOTAwMSAyOS4yMjEgMzEuNzkwMSAyOS4zOTA5TDMxLjgxMDEgMjkuNDAw''@;'; put 'put ''OVpNMTguMDEwMSAyNS4wMDI1QzE3LjI4MDEgMjUuMDAyNSAxNi42ODAxIDI1LjYwMjMgMTYuNjgwMSAyNi4zMzJDMTYuNjgwMSAyNy4wNjE4IDE3LjI4MDEgMjcuNjYxNSAxOC4wMTAxIDI3LjY2MTVDMTguNzQwMSAyNy42NjE1IDE5LjM0MDEgMjcuMDYxOCAxOS4zNDAxIDI2LjMzMkMxOS4z''@;'; put 'put ''NDAxIDI1LjYwMjMgMTguNzQwMSAyNS4wMDI1IDE4LjAxMDEgMjUuMDAyNVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMuNTYwMSAyNy4yMkwyMC43ODAxIDUuNThDMjAuMjAwMSA0LjU5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41OSAxNS4yMjAxIDUuNThMMi40''@;'; put 'put ''NDAwNiAyNy4yMkMxLjg1MDA2IDI4LjIyIDEuODUwMDYgMjkuNDEgMi40NDAwNiAzMC40MUMzLjAyMDA2IDMxLjQxIDQuMDcwMDYgMzIuMDEgNS4yMzAwNiAzMi4wMUgzMC43ODAxQzMxLjk1MDEgMzIuMDEgMzIuOTkwMSAzMS40MSAzMy41NzAxIDMwLjQxQzM0LjE1MDEgMjkuNDEgMzQuMTUw''@;'; put 'put ''MSAyOC4yMiAzMy41NjAxIDI3LjIyWk0xNi45MDAxIDExQzE2LjkwMDEgMTAuMzkgMTcuMzkwMSA5LjkgMTguMDAwMSA5LjlDMTguNjEwMSA5LjkgMTkuMTAwMSAxMC4zOSAxOS4xMDAxIDExVjIyQzE5LjEwMDEgMjIuNjEgMTguNjEwMSAyMy4xIDE4LjAwMDEgMjMuMUMxNy4zOTAxIDIzLjEg''@;'; put 'put ''MTYuOTAwMSAyMi42MSAxNi45MDAxIDIyVjExWk0xOC4wMDAxIDI3Ljc2QzE3LjIxMDEgMjcuNzYgMTYuNTcwMSAyNy4xMiAxNi41NzAxIDI2LjMzQzE2LjU3MDEgMjUuNTQgMTcuMjEwMSAyNC45IDE4LjAwMDEgMjQuOUMxOC43OTAxIDI0LjkgMTkuNDMwMSAyNS41NCAxOS40MzAxIDI2LjMz''@;'; put 'put ''QzE5LjQzMDEgMjcuMTIgMTguNzkwMSAyNy43NiAxOC4wMDAxIDI3Ljc2WiIvPid9XSxxT2U9WyJjaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAx''@;'; put 'put ''MC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFpNNiAxOEM2IDI0LjYyNzQgMTEuMzcyNiAzMCAxOCAzMEMyMS4xODI2IDMwIDI0LjIzNDggMjguNzM1NyAyNi40ODUzIDI2LjQ4NTNDMjguNzM1NyAyNC4yMzQ4IDMwIDIxLjE4MjYg''@;'; put 'put ''MzAgMThDMzAgMTEuMzcyNiAyNC42Mjc0IDYgMTggNkMxMS4zNzI2IDYgNiAxMS4zNzI2IDYgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOEM0IDI1LjczMiAxMC4yNjggMzIgMTggMzJDMjUuNzMyIDMyIDMyIDI1LjczMiAzMiAxOEMzMiAxMC4y''@;'; put 'put ''NjggMjUuNzMyIDQgMTggNFoiLz4nfV0sWE9lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxMUMxOS4zODQ1IDExIDIwLjczNzkgMTEuNDEwNSAyMS44ODkgMTIuMTc5N0MyMy4wNDAxIDEyLjk0ODkgMjMuOTM3NCAxNC4wNDIxIDI0LjQ2NzIgMTUuMzIxMkMyNC45OTcg''@;'; put 'put ''MTYuNjAwMyAyNS4xMzU2IDE4LjAwNzggMjQuODY1NSAxOS4zNjU2QzI0LjU5NTQgMjAuNzIzNSAyMy45Mjg3IDIxLjk3MDggMjIuOTQ5OCAyMi45NDk4QzIxLjk3MDggMjMuOTI4NyAyMC43MjM1IDI0LjU5NTQgMTkuMzY1NiAyNC44NjU1QzE4LjAwNzggMjUuMTM1NiAxNi42MDAzIDI0Ljk5''@;'; put 'put ''NyAxNS4zMjEyIDI0LjQ2NzJDMTQuMDQyMSAyMy45Mzc0IDEyLjk0ODkgMjMuMDQwMSAxMi4xNzk3IDIxLjg4OUMxMS40MTA1IDIwLjczNzkgMTEgMTkuMzg0NSAxMSAxOEMxMSAxNi4xNDM1IDExLjczNzUgMTQuMzYzIDEzLjA1MDMgMTMuMDUwM0MxNC4zNjMgMTEuNzM3NSAxNi4xNDM1IDEx''@;'; put 'put ''IDE4IDExWiIvPjxwYXRoIGQ9Ik0xOCAzNEMxNC44MzU1IDM0IDExLjc0MjEgMzMuMDYxNiA5LjExMDg4IDMxLjMwMzVDNi40Nzk3IDI5LjU0NTQgNC40Mjg5NCAyNy4wNDY2IDMuMjE3OTMgMjQuMTIyOUMyLjAwNjkzIDIxLjE5OTMgMS42OTAwOCAxNy45ODIzIDIuMzA3NDQgMTQuODc4NkMy''@;'; put 'put ''LjkyNDgxIDExLjc3NDkgNC40NDg2NiA4LjkyMzk0IDYuNjg2MyA2LjY4NjNDOC45MjM5NCA0LjQ0ODY2IDExLjc3NDkgMi45MjQ4MSAxNC44Nzg2IDIuMzA3NDRDMTcuOTgyMyAxLjY5MDA4IDIxLjE5OTMgMi4wMDY5MyAyNC4xMjI5IDMuMjE3OTNDMjcuMDQ2NiA0LjQyODk0IDI5LjU0NTQg''@;'; put 'put ''Ni40Nzk3IDMxLjMwMzUgOS4xMTA4OEMzMy4wNjE2IDExLjc0MjEgMzQgMTQuODM1NSAzNCAxOEMzNCAyMi4yNDM1IDMyLjMxNDMgMjYuMzEzMSAyOS4zMTM3IDI5LjMxMzdDMjYuMzEzMSAzMi4zMTQzIDIyLjI0MzUgMzQgMTggMzRaTTE4IDQuMDAwMDFDMTUuMjMxMSA0LjAwMDAxIDEyLjUy''@;'; put 'put ''NDMgNC44MjEwOSAxMC4yMjIgNi4zNTk0M0M3LjkxOTc0IDcuODk3NzcgNi4xMjUzMiAxMC4wODQzIDUuMDY1NjkgMTIuNjQyNEM0LjAwNjA3IDE1LjIwMDYgMy43Mjg4MiAxOC4wMTU1IDQuMjY5MDEgMjAuNzMxM0M0LjgwOTIxIDIzLjQ0NyA2LjE0MjU4IDI1Ljk0MTYgOC4xMDA1MSAyNy44''@;'; put 'put ''OTk1QzEwLjA1ODQgMjkuODU3NCAxMi41NTMgMzEuMTkwOCAxNS4yNjg3IDMxLjczMUMxNy45ODQ1IDMyLjI3MTIgMjAuNzk5NCAzMS45OTM5IDIzLjM1NzYgMzAuOTM0M0MyNS45MTU3IDI5Ljg3NDcgMjguMTAyMiAyOC4wODAzIDI5LjY0MDYgMjUuNzc4QzMxLjE3ODkgMjMuNDc1NyAzMiAy''@;'; put 'put ''MC43Njg5IDMyIDE4QzMyIDE0LjI4NyAzMC41MjUgMTAuNzI2IDI3Ljg5OTUgOC4xMDA1MUMyNS4yNzQgNS40NzUgMjEuNzEzIDQuMDAwMDEgMTggNC4wMDAwMVoiLz4nfV07ZnVuY3Rpb24gSk9lKGMsbCl7cmV0dXJuIGM9PT1sfWNsYXNzIGVQZSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSl7c3VwZXIoKX1zY2hlZHVsZShsLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IHdMPXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09d0w7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xl''@;'; put 'put ''YXJJbnRlcnZhbChjKXtjb25zdHtkZWxlZ2F0ZTpsfT13TDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgdVkgZXh0ZW5kcyBlUGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhp''@;'; put 'put ''cy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQo''@;'; put 'put ''ZixoLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gd0wuc2V0SW50ZXJ2YWwobC5m''@;'; put 'put ''bHVzaC5iaW5kKGwsdGhpcyksZCl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJndMLmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBu''@;'; put 'put ''ZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlz''@;'; put 'put ''LnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgp''@;'; put 'put ''LGh9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSx1dChkLHRoaXMpLG51bGwhPWwmJih0aGlzLmlkPXRo''@;'; put 'put ''aXMucmVjeWNsZUFzeW5jSWQoYSxsLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fWNvbnN0IGRZPXtub3c6KCk9PihkWS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyBieHtjb25zdHJ1Y3RvcihsLGE9Yngubm93KXt0aGlz''@;'; put 'put ''LnNjaGVkdWxlckFjdGlvbkN0b3I9bCx0aGlzLm5vdz1hfXNjaGVkdWxlKGwsYT0wLGQpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsbCkuc2NoZWR1bGUoZCxhKX19Yngubm93PWRZLm5vdztjbGFzcyBoWSBleHRlbmRzIGJ4e2NvbnN0cnVjdG9yKGwsYT1ieC5u''@;'; put 'put ''b3cpe3N1cGVyKGwsYSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaChsKXtjb25zdHthY3Rpb25zOmF9PXRoaXM7aWYodGhpcy5fYWN0aXZlKXJldHVybiB2b2lkIGEucHVzaChsKTtsZXQgZDt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoZD1sLmV4ZWN1dGUobC5zdGF0ZSxs''@;'; put 'put ''LmRlbGF5KSlicmVha313aGlsZShsPWEuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGQpe2Zvcig7bD1hLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBkfX19Y29uc3QgQ0w9bmV3IGhZKHVZKSx0UGU9Q0w7ZnVuY3Rpb24gZm0oYyxsPUNMKXtyZXR1cm4gVmkoKGEsZCk9Pnts''@;'; put 'put ''ZXQgaD1udWxsLGY9bnVsbCx2PW51bGw7Y29uc3QgTT0oKT0+e2lmKGgpe2gudW5zdWJzY3JpYmUoKSxoPW51bGw7Y29uc3QgWj1mO2Y9bnVsbCxkLm5leHQoWil9fTtmdW5jdGlvbiBEKCl7Y29uc3QgWj12K2MscmU9bC5ub3coKTtpZihyZTxaKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9p''@;'; put 'put ''ZCAwLFotcmUpLHZvaWQgZC5hZGQoaCk7TSgpfWEuc3Vic2NyaWJlKE5pKGQsWj0+e2Y9Wix2PWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShELGMpLGQuYWRkKGgpKX0sKCk9PntNKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWNvbnN0IG5QZT1bImFkZExpc3Rl''@;'; put 'put ''bmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxyUGU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLGlQZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24geGQoYyxsLGEsZCl7aWYoJGUoYSkmJihkPWEsYT12b2lkIDApLGQpcmV0dXJuIHhkKGMsbCxhKS5waXBlKHpaKGQpKTtj''@;'; put 'put ''b25zdFtoLGZdPWZ1bmN0aW9uIHNQZShjKXtyZXR1cm4gJGUoYy5hZGRFdmVudExpc3RlbmVyKSYmJGUoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/clBlLm1hcCh2PT5NPT5jW3ZdKGwsTSxhKSk6ZnVuY3Rpb24gYVBlKGMpe3JldHVybiAkZShjLmFkZExpc3RlbmVyKSYmJGUoYy5yZW1v''@;'; put 'put ''dmVMaXN0ZW5lcil9KGMpP25QZS5tYXAoRDBlKGMsbCkpOmZ1bmN0aW9uIG9QZShjKXtyZXR1cm4gJGUoYy5vbikmJiRlKGMub2ZmKX0oYyk/aVBlLm1hcChEMGUoYyxsKSk6W107aWYoIWgmJkJaKGMpKXJldHVybiBOMCh2PT54ZCh2LGwsYSkpKGwxKGMpKTtpZighaCl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgWHQodj0+e2NvbnN0IE09KC4uLkQpPT52Lm5leHQoMTxELmxlbmd0aD9EOkRbMF0pO3JldHVybiBoKE0pLCgpPT5mKE0pfSl9ZnVuY3Rpb24gRDBlKGMsbCl7cmV0dXJuIGE9PmQ9PmNbYV0obCxkKX1jbGFzcyB5eCBl''@;'; put 'put ''eHRlbmRzIFdue2NvbnN0cnVjdG9yKGw9MS8wLGE9MS8wLGQ9ZFkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT1sLHRoaXMuX3dpbmRvd1RpbWU9YSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1kLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5m''@;'; put 'put ''aW5pdGVUaW1lV2luZG93PWE9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGwpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxhKX1uZXh0KGwpe2NvbnN0e2lzU3RvcHBlZDphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93OmgsX3RpbWVzdGFtcFByb3ZpZGVyOmYs''@;'; put 'put ''X3dpbmRvd1RpbWU6dn09dGhpczthfHwoZC5wdXNoKGwpLCFoJiZkLnB1c2goZi5ub3coKSt2KSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQobCl9X3N1YnNjcmliZShsKXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2NvbnN0IGE9dGhpcy5faW5uZXJT''@;'; put 'put ''dWJzY3JpYmUobCkse19pbmZpbml0ZVRpbWVXaW5kb3c6ZCxfYnVmZmVyOmh9PXRoaXMsZj1oLnNsaWNlKCk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aCYmIWwuY2xvc2VkO3YrPWQ/MToyKWwubmV4dChmW3ZdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhsKSxhfV90cmlt''@;'; put 'put ''QnVmZmVyKCl7Y29uc3R7X2J1ZmZlclNpemU6bCxfdGltZXN0YW1wUHJvdmlkZXI6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpofT10aGlzLGY9KGg/MToyKSpsO2lmKGw8MS8wJiZmPGQubGVuZ3RoJiZkLnNwbGljZSgwLGQubGVuZ3RoLWYpLCFoKXtjb25zdCB2PWEubm93KCk7''@;'; put 'put ''bGV0IE09MDtmb3IobGV0IEQ9MTtEPGQubGVuZ3RoJiZkW0RdPD12O0QrPTIpTT1EO00mJmQuc3BsaWNlKDAsTSsxKX19fWZ1bmN0aW9uIGZZKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygpO2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgaHQoe25leHQ6KCk9PntkLnVu''@;'; put 'put ''c3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBsMShsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gSTBlKGMsbCxhKXtsZXQgZCxoPSExO3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGM/KHtidWZmZXJTaXplOmQ9MS8wLHdpbmRvd1RpbWU6bD0xLzAscmVmQ291bnQ6aD0hMSxzY2hl''@;'; put 'put ''ZHVsZXI6YX09Yyk6ZD1jPz8xLzAsZnVuY3Rpb24gbFBlKGM9e30pe2NvbnN0e2Nvbm5lY3RvcjpsPSgoKT0+bmV3IFduKSxyZXNldE9uRXJyb3I6YT0hMCxyZXNldE9uQ29tcGxldGU6ZD0hMCxyZXNldE9uUmVmQ291bnRaZXJvOmg9ITB9PWM7cmV0dXJuIGY9PntsZXQgdixNLEQsWj0wLHJl''@;'; put 'put ''PSExLGNlPSExO2NvbnN0IGJlPSgpPT57TT8udW5zdWJzY3JpYmUoKSxNPXZvaWQgMH0sRWU9KCk9PntiZSgpLHY9RD12b2lkIDAscmU9Y2U9ITF9LEJlPSgpPT57Y29uc3QgcWU9djtFZSgpLHFlPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gVmkoKHFlLHJ0KT0+e1orKywhY2UmJiFyZSYmYmUo''@;'; put 'put ''KTtjb25zdCBwdD1EPUQ/P2woKTtydC5hZGQoKCk9PntaLS0sMD09PVomJiFjZSYmIXJlJiYoTT1mWShCZSxoKSl9KSxwdC5zdWJzY3JpYmUocnQpLCF2JiZaPjAmJih2PW5ldyBodCh7bmV4dDpkdD0+cHQubmV4dChkdCksZXJyb3I6ZHQ9PntjZT0hMCxiZSgpLE09ZlkoRWUsYSxkdCkscHQu''@;'; put 'put ''ZXJyb3IoZHQpfSxjb21wbGV0ZTooKT0+e3JlPSEwLGJlKCksTT1mWShFZSxkKSxwdC5jb21wbGV0ZSgpfX0pLGwxKHFlKS5zdWJzY3JpYmUodikpfSkoZil9fSh7Y29ubmVjdG9yOigpPT5uZXcgeXgoZCxsLGEpLHJlc2V0T25FcnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJl''@;'; put 'put ''ZkNvdW50WmVybzpofSl9ZnVuY3Rpb24gX3goLi4uYyl7Y29uc3QgbD1qTShjKSxhPWZ1bmN0aW9uIFhNZShjLGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgalooYyk/Yy5wb3AoKTpsfShjLDEvMCksZD1jO3JldHVybiBkLmxlbmd0aD8xPT09ZC5sZW5ndGg/bDEoZFswXSk6ZXkoYSkoWXUo''@;'; put 'put ''ZCxsKSk6TTJ9dmFyIEFvPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU3RhdGU9MF09IlN0YXRlIixjW2MuVHJhbnNpdGlvbj0xXT0iVHJhbnNpdGlvbiIsY1tjLlNlcXVlbmNlPTJdPSJTZXF1ZW5jZSIsY1tjLkdyb3VwPTNdPSJHcm91cCIsY1tjLkFuaW1hdGU9NF09IkFuaW1hdGUiLGNbYy5L''@;'; put 'put ''ZXlmcmFtZXM9NV09IktleWZyYW1lcyIsY1tjLlN0eWxlPTZdPSJTdHlsZSIsY1tjLlRyaWdnZXI9N109IlRyaWdnZXIiLGNbYy5SZWZlcmVuY2U9OF09IlJlZmVyZW5jZSIsY1tjLkFuaW1hdGVDaGlsZD05XT0iQW5pbWF0ZUNoaWxkIixjW2MuQW5pbWF0ZVJlZj0xMF09IkFuaW1hdGVSZWYi''@;'; put 'put ''LGNbYy5RdWVyeT0xMV09IlF1ZXJ5IixjW2MuU3RhZ2dlcj0xMl09IlN0YWdnZXIiLGN9KEFvfHx7fSk7Y29uc3QgaWc9IioiO2Z1bmN0aW9uIHloKGMsbCl7cmV0dXJue3R5cGU6QW8uVHJpZ2dlcixuYW1lOmMsZGVmaW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBNMChjLGw9bnVs''@;'; put 'put ''bCl7cmV0dXJue3R5cGU6QW8uQW5pbWF0ZSxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIHVzKGMpe3JldHVybnt0eXBlOkFvLlN0eWxlLHN0eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBTTChjLGwsYSl7cmV0dXJue3R5cGU6QW8uU3RhdGUsbmFtZTpjLHN0eWxlczpsLG9wdGlv''@;'; put 'put ''bnM6YX19ZnVuY3Rpb24gdVBlKGMpe3JldHVybnt0eXBlOkFvLktleWZyYW1lcyxzdGVwczpjfX1mdW5jdGlvbiBpdShjLGwsYT1udWxsKXtyZXR1cm57dHlwZTpBby5UcmFuc2l0aW9uLGV4cHI6YyxhbmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIHd4e2NvbnN0cnVjdG9yKGw9MCxhPTAp''@;'; put 'put ''e3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNo''@;'; put 'put ''ZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1v''@;'; put 'put ''blN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5z''@;'; put 'put ''LnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3Jv''@;'; put 'put ''dGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwo''@;'; put 'put ''dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVk''@;'; put 'put ''PSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFIwZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGlt''@;'; put 'put ''ZT0wLHRoaXMucGxheWVycz1sO2xldCBhPTAsZD0wLGg9MDtjb25zdCBmPXRoaXMucGxheWVycy5sZW5ndGg7MD09Zj9xdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2godj0+e3Yub25Eb25lKCgpPT57KythPT1mJiZ0aGlzLl9vbkZpbmlz''@;'; put 'put ''aCgpfSksdi5vbkRlc3Ryb3koKCk9PnsrK2Q9PWYmJnRoaXMuX29uRGVzdHJveSgpfSksdi5vblN0YXJ0KCgpPT57KytoPT1mJiZ0aGlzLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRoaXMucGxheWVycy5yZWR1Y2UoKHYsTSk9Pk1hdGgubWF4KHYsTS50b3RhbFRpbWUpLDApfV9v''@;'; put 'put ''bkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmluaXQoKSl9b25TdGFydChsKXt0aGlzLl9vblN0YXJ0Rm5z''@;'; put 'put ''LnB1c2gobCl9X29uU3RhcnQoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSl9b25Eb25lKGwpe3RoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9v''@;'; put 'put ''bkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5wbGF5KCkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZv''@;'; put 'put ''ckVhY2gobD0+bC5wYXVzZSgpKX1yZXN0YXJ0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXN0YXJ0KCkpfWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5maW5pc2goKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhp''@;'; put 'put ''cy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXNldCgpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXtjb25zdCBhPWwqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goZD0+e2NvbnN0IGg9ZC50b3Rh''@;'; put 'put ''bFRpbWU/TWF0aC5taW4oMSxhL2QudG90YWxUaW1lKToxO2Quc2V0UG9zaXRpb24oaCl9KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoYSxkKT0+bnVsbD09PWF8fGQudG90YWxUaW1lPmEudG90YWxUaW1lP2Q6YSxudWxsKTtyZXR1cm4gbnVsbCE9bD9sLmdl''@;'; put 'put ''dFBvc2l0aW9uKCk6MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+e2wuYmVmb3JlRGVzdHJveSYmbC5iZWZvcmVEZXN0cm95KCl9KX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2Eu''@;'; put 'put ''Zm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWxldCBnWTt0cnl7Z1k9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtnWT0hMX1sZXQgU3gsQ3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybUlkPWEsdGhpcy5pc0Jyb3dzZXI9''@;'; put 'put ''dGhpcy5fcGxhdGZvcm1JZD90bCh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2Vy''@;'; put 'put ''JiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFnWSkmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2Vy''@;'; put 'put ''JiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFt''@;'; put 'put ''ImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRS''@;'; put 'put ''SURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihpbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEF5KGMpe3JldHVybiBmdW5jdGlvbiBnUGUoKXtpZihudWxsPT1TeCYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0''@;'; put 'put ''ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+U3g9ITB9KSl9ZmluYWxseXtTeD1TeHx8ITF9cmV0dXJuIFN4fSgpP2M6ISFjLmNhcHR1cmV9dmFyIF9wPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9STUFMPTBdPSJOT1JNQUwiLGNbYy5ORUdB''@;'; put 'put ''VEVEPTFdPSJORUdBVEVEIixjW2MuSU5WRVJURUQ9Ml09IklOVkVSVEVEIixjfShfcHx8e30pO2xldCBNTCx1NyxtWTtmdW5jdGlvbiBNeCgpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gX3AuTk9STUFMO2lmKG51bGw9PU1MKXtjb25zdCBjPWRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Yy5zdHlsZTtjLmRpcj0icnRsIixsLndpZHRoPSIxcHgiLGwub3ZlcmZsb3c9ImF1dG8iLGwudmlzaWJpbGl0eT0iaGlkZGVuIixsLnBvaW50ZXJFdmVudHM9Im5vbmUiLGwucG9zaXRpb249ImFic29sdXRlIjtjb25zdCBhPWRvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImRpdiIpLGQ9YS5zdHlsZTtkLndpZHRoPSIycHgiLGQuaGVpZ2h0PSIxcHgiLGMuYXBwZW5kQ2hpbGQoYSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxNTD1fcC5OT1JNQUwsMD09PWMuc2Nyb2xsTGVmdCYmKGMuc2Nyb2xsTGVmdD0xLE1MPTA9PT1jLnNjcm9s''@;'; put 'put ''bExlZnQ/X3AuTkVHQVRFRDpfcC5JTlZFUlRFRCksYy5yZW1vdmUoKX1yZXR1cm4gTUx9ZnVuY3Rpb24gTzBlKGMpe2lmKGZ1bmN0aW9uIHZQZSgpe2lmKG51bGw9PW1ZKXtjb25zdCBjPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO21ZPSEoIWN8fCFjLmNyZWF0ZVNo''@;'; put 'put ''YWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIG1ZfSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gbH1yZXR1cm4gbnVs''@;'; put 'put ''bH1mdW5jdGlvbiB4TChjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1sZXQgalBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fcGxhdGZvcm09YX1pc0Rpc2FibGVkKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiZGlzYWJs''@;'; put 'put ''ZWQiKX1pc1Zpc2libGUoYSl7cmV0dXJuIGZ1bmN0aW9uIFVQZShjKXtyZXR1cm4hIShjLm9mZnNldFdpZHRofHxjLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0Q2xpZW50UmVjdHMmJmMuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShhKSYmInZpc2libGUiPT09Z2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZShhKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoYSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtjb25zdCBkPWZ1bmN0aW9uIHpQZShjKXt0cnl7cmV0dXJuIGMuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24gWFBlKGMp''@;'; put 'put ''e3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShhKSk7aWYoZCYmKC0xPT09TjBlKGQpfHwhdGhpcy5pc1Zpc2libGUoZCkpKXJldHVybiExO2xldCBoPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxmPU4wZShhKTtyZXR1cm4gYS5o''@;'; put 'put ''YXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09ZjohKCJpZnJhbWUiPT09aHx8Im9iamVjdCI9PT1ofHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uIEtQZShjKXtsZXQgbD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT0iaW5w''@;'; put 'put ''dXQiPT09bCYmYy50eXBlO3JldHVybiJ0ZXh0Ij09PWF8fCJwYXNzd29yZCI9PT1hfHwic2VsZWN0Ij09PWx8fCJ0ZXh0YXJlYSI9PT1sfShhKSkmJigiYXVkaW8iPT09aD8hIWEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PWY6InZpZGVvIj09PWg/LTEhPT1mJiYobnVsbCE9PWZ8''@;'; put 'put ''fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTphLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShhLGQpe3JldHVybiBmdW5jdGlvbiBxUGUoYyl7cmV0dXJuIWZ1bmN0aW9uIFdQZShjKXtyZXR1cm4gZnVuY3Rpb24gR1BlKGMpe3JldHVybiJpbnB1''@;'; put 'put ''dCI9PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJiJoaWRkZW4iPT1jLnR5cGV9KGMpJiYoZnVuY3Rpb24gWlBlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09bHx8InNlbGVjdCI9PT1sfHwiYnV0dG9uIj09PWx8fCJ0ZXh0YXJlYSI9PT1s''@;'; put 'put ''fShjKXx8ZnVuY3Rpb24gWVBlKGMpe3JldHVybiBmdW5jdGlvbiAkUGUoYyl7cmV0dXJuImEiPT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KGMpJiZjLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShjKXx8Yy5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxIMGUoYykpfShhKSYmIXRo''@;'; put 'put ''aXMuaXNEaXNhYmxlZChhKSYmKGQ/Lmlnbm9yZVZpc2liaWxpdHl8fHRoaXMuaXNWaXNpYmxlKGEpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihDeCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEgwZShjKXtpZighYy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PWMudGFiSW5kZXgpcmV0dXJuITE7bGV0IGw9Yy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghbHx8''@;'; put 'put ''aXNOYU4ocGFyc2VJbnQobCwxMCkpKX1mdW5jdGlvbiBOMGUoYyl7aWYoIUgwZShjKSlyZXR1cm4gbnVsbDtjb25zdCBsPXBhcnNlSW50KGMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGwpPy0xOmx9Y2xhc3MgVjBle2dldCBlbmFibGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQobCl7dGhpcy5fZW5hYmxlZD1sLHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMu''@;'; put 'put ''X2VuZEFuY2hvcikpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZj0hMSl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX2NoZWNrZXI9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl9kb2N1bWVudD1oLHRoaXMuX2hhc0F0dGFjaGVkPSExLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0xh''@;'; put 'put ''c3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLmVuZEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLl9lbmFibGVkPSEwLGZ8fHRoaXMuYXR0YWNoQW5jaG9ycygpfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3N0YXJ0QW5jaG9yLGE9dGhpcy5f''@;'; put 'put ''ZW5kQW5jaG9yO2wmJihsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLGwucmVtb3ZlKCkpLGEmJihhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxhLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFu''@;'; put 'put ''Y2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9''@;'; put 'put ''dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJl''@;'; put 'put ''bnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5f''@;'; put 'put ''ZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudChsKSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJs''@;'; put 'put ''ZUVsZW1lbnQobCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke2x9XSwgW2Nka0ZvY3VzUmVnaW9uJHtsfV0sIFtjZGstZm9jdXMtJHtsfV1gKTtyZXR1cm4ic3RhcnQiPT1sP2EubGVuZ3RoP2FbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQo''@;'; put 'put ''dGhpcy5fZWxlbWVudCk6YS5sZW5ndGg/YVthLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtj''@;'; put 'put ''ZGtGb2N1c0luaXRpYWxdIik7aWYoYSl7aWYoIXRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUoYSkpe2NvbnN0IGQ9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYSk7cmV0dXJuIGQ/LmZvY3VzKGwpLCEhZH1yZXR1cm4gYS5mb2N1cyhsKSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0''@;'; put 'put ''VGFiYmFibGVFbGVtZW50KGwpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gYSYmYS5mb2N1cyhsKSwhIWF9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9u''@;'; put 'put ''Qm91bmRhcnkoImVuZCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxl''@;'; put 'put ''KGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4g''@;'; put 'put ''aH1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD1hLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25z''@;'; put 'put ''dCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2NvbnN0IGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsbCksbC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksbC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSxsLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRk''@;'; put 'put ''ZW4iLCJ0cnVlIiksbH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCxhKXtsP2Euc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTphLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKGwpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90''@;'; put 'put ''b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUobCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP2woKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShZZigx''@;'; put 'put ''KSkuc3Vic2NyaWJlKGwpfX1sZXQgdlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWh9Y3JlYXRlKGEsZD0hMSl7cmV0dXJuIG5ldyBWMGUoYSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0''@;'; put 'put ''aGlzLl9kb2N1bWVudCxkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihqUGUpLHhyKFdhKSx4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpLEIwZT0oKCk9PntjbGFzcyBje2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwPy5lbmFibGVkfHwhMX1zZXQgZW5hYmxlZChhKXt0aGlzLmZvY3VzVHJhcCYmKHRoaXMuZm9jdXNUcmFwLmVuYWJsZWQ9YSl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMu''@;'; put 'put ''X2VsZW1lbnRSZWY9YSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWQsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsZmkoQ3gpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxl''@;'; put 'put ''bWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRl''@;'; put 'put ''ckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJhcCYmIXRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFj''@;'; put 'put ''aEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEuYXV0b0NhcHR1cmU7ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlv''@;'; put 'put ''dXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIGJQZSgpe2xldCBjPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO2MmJmMuc2hhZG93Um9vdDspe2NvbnN0IGw9Yy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYobD09PWMp''@;'; put 'put ''YnJlYWs7Yz1sfXJldHVybiBjfSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKHZZKSxHZSh2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9''@;'; put 'put ''RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVHJhcEZvY3VzIiwiIl1dLGlucHV0czp7ZW5hYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka1RyYXBGb2N1cyIsImVuYWJsZWQiLHMxXSxhdXRvQ2FwdHVyZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0s''@;'; put 'put ''ImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiLHMxXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGQ3KGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24gckZlKGMpe3JldHVy''@;'; put 'put ''biFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihjKSl9KGMpP051bWJlcihjKTpsfWZ1bmN0aW9uIEVkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgSmk/Yy5uYXRpdmVFbGVtZW50OmN9Y29uc3QgeHg9e3NjaGVkdWxlKGMpe2xldCBsPXJlcXVlc3RBbmltYXRpb25GcmFtZSxh''@;'; put 'put ''PWNhbmNlbEFuaW1hdGlvbkZyYW1lO2NvbnN0e2RlbGVnYXRlOmR9PXh4O2QmJihsPWQucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9ZC5jYW5jZWxBbmltYXRpb25GcmFtZSk7Y29uc3QgaD1sKGY9PnthPXZvaWQgMCxjKGYpfSk7cmV0dXJuIG5ldyBxdCgoKT0+YT8uKGgpKX0scmVxdWVzdEFu''@;'; put 'put ''aW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXh4O3JldHVybihsPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4uYyl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXh4O3JldHVybihsPy5jYW5j''@;'; put 'put ''ZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxkZWxlZ2F0ZTp2b2lkIDB9LGowZT1uZXcgY2xhc3Mgb0ZlIGV4dGVuZHMgaFl7Zmx1c2gobCl7bGV0IGE7dGhpcy5fYWN0aXZlPSEwLGw/YT1sLmlkOihhPXRoaXMuX3NjaGVkdWxlZCx0aGlzLl9zY2hlZHVs''@;'; put 'put ''ZWQ9dm9pZCAwKTtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFsw''@;'; put 'put ''XSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGFGZSBleHRlbmRzIHVZe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxs''@;'; put 'put ''IT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPXh4LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+bC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBo''@;'; put 'put ''O2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiZhPT09bC5fc2NoZWR1bGVkJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEm''@;'; put 'put ''Jih4eC5jYW5jZWxBbmltYXRpb25GcmFtZShhKSxsLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtsZXQgYlksc0ZlPTE7Y29uc3QgRUw9e307ZnVuY3Rpb24gejBlKGMpe3JldHVybiBjIGluIEVMJiYoZGVsZXRlIEVMW2NdLCEwKX1jb25zdCBsRmU9e3NldEltbWVkaWF0ZShjKXtjb25zdCBsPXNG''@;'; put 'put ''ZSsrO3JldHVybiBFTFtsXT0hMCxiWXx8KGJZPVByb21pc2UucmVzb2x2ZSgpKSxiWS50aGVuKCgpPT56MGUobCkmJmMoKSksbH0sY2xlYXJJbW1lZGlhdGUoYyl7ejBlKGMpfX0se3NldEltbWVkaWF0ZTpjRmUsY2xlYXJJbW1lZGlhdGU6dUZlfT1sRmUsVEw9e3NldEltbWVkaWF0ZSguLi5j''@;'; put 'put ''KXtjb25zdHtkZWxlZ2F0ZTpsfT1UTDtyZXR1cm4obD8uc2V0SW1tZWRpYXRlfHxjRmUpKC4uLmMpfSxjbGVhckltbWVkaWF0ZShjKXtjb25zdHtkZWxlZ2F0ZTpsfT1UTDtyZXR1cm4obD8uY2xlYXJJbW1lZGlhdGV8fHVGZSkoYyl9LGRlbGVnYXRlOnZvaWQgMH0sZkZlPW5ldyBjbGFzcyBo''@;'; put 'put ''RmUgZXh0ZW5kcyBoWXtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSli''@;'; put 'put ''cmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGRGZSBleHRlbmRzIHVZe2NvbnN0cnVjdG9yKGwsYSl7''@;'; put 'put ''c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPVRM''@;'; put 'put ''LnNldEltbWVkaWF0ZShsLmZsdXNoLmJpbmQobCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVs''@;'; put 'put ''bD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihUTC5jbGVhckltbWVkaWF0ZShhKSxsLl9zY2hlZHVsZWQ9PT1hJiYobC5fc2NoZWR1bGVkPXZvaWQgMCkpfX0pO2Z1bmN0aW9uIFUwZShjPTAsbCxhPXRQZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwh''@;'; put 'put ''PWwmJihjbGUobCk/YT1sOmQ9bCksbmV3IFh0KGg9PntsZXQgZj1mdW5jdGlvbiBnRmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4oYyl9KGMpPytjLWEubm93KCk6YztmPDAmJihmPTApO2xldCB2PTA7cmV0dXJuIGEuc2NoZWR1bGUoZnVuY3Rpb24oKXtoLmNsb3NlZHx8''@;'; put 'put ''KGgubmV4dCh2KyspLDA8PWQ/dGhpcy5zY2hlZHVsZSh2b2lkIDAsZCk6aC5jb21wbGV0ZSgpKX0sZil9KX1mdW5jdGlvbiB5WShjLGw9Q0wpe3JldHVybiBmdW5jdGlvbiBwRmUoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCx2PSExO2NvbnN0IE09KCk9Pntp''@;'; put 'put ''ZihmPy51bnN1YnNjcmliZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IFo9aDtoPW51bGwsYS5uZXh0KFopfXYmJmEuY29tcGxldGUoKX0sRD0oKT0+e2Y9bnVsbCx2JiZhLmNvbXBsZXRlKCl9O2wuc3Vic2NyaWJlKE5pKGEsWj0+e2Q9ITAsaD1aLGZ8fGwxKGMoWikpLnN1YnNjcmliZShmPU5p''@;'; put 'put ''KGEsTSxEKSl9LCgpPT57dj0hMCwoIWR8fCFmfHxmLmNsb3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+VTBlKGMsbCkpfWNvbnN0IHZGZT1uZXcgU3QoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBiRmUoKXtyZXR1cm4gZmkodnMpfX0pLHlG''@;'; put 'put ''ZT0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtsZXQgcG09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZhbHVl''@;'; put 'put ''PSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBLcixhJiYodGhpcy52YWx1ZT1mdW5jdGlvbiBfRmUoYyl7Y29uc3QgbD1jPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT1sJiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT95RmUudGVzdChuYXZpZ2F0b3Iu''@;'; put 'put ''bGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09bD8icnRsIjoibHRyIn0oKGEuYm9keT9hLmJvZHkuZGlyOm51bGwpfHwoYS5kb2N1bWVudEVsZW1lbnQ/YS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2RmUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHdGZXt9Y2xh''@;'; put 'put ''c3MgU0ZlIGV4dGVuZHMgd0Zle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fZGF0YT1sfWNvbm5lY3QoKXtyZXR1cm4gQk0odGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpmbyh0aGlzLl9kYXRhKX1kaXNjb25uZWN0KCl7fX12YXIgZ209ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SRVBMQUNF''@;'; put 'put ''RD0wXT0iUkVQTEFDRUQiLGNbYy5JTlNFUlRFRD0xXT0iSU5TRVJURUQiLGNbYy5NT1ZFRD0yXT0iTU9WRUQiLGNbYy5SRU1PVkVEPTNdPSJSRU1PVkVEIixjfShnbXx8e30pO2NvbnN0IF9ZPW5ldyBTdCgiX1ZpZXdSZXBlYXRlciIpO2NsYXNzIFowZXtjb25zdHJ1Y3Rvcigpe3RoaXMudmll''@;'; put 'put ''d0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKGwsYSxkLGgsZil7bC5mb3JFYWNoT3BlcmF0aW9uKCh2LE0sRCk9PntsZXQgWixyZTtudWxsPT12LnByZXZpb3VzSW5kZXg/KFo9dGhpcy5faW5zZXJ0VmlldygoKT0+ZCh2LE0sRCksRCxhLGgodikpLHJlPVo/''@;'; put 'put ''Z20uSU5TRVJURUQ6Z20uUkVQTEFDRUQpOm51bGw9PUQ/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhNLGEpLHJlPWdtLlJFTU9WRUQpOihaPXRoaXMuX21vdmVWaWV3KE0sRCxhLGgodikpLHJlPWdtLk1PVkVEKSxmJiZmKHtjb250ZXh0Olo/LmNvbnRleHQsb3BlcmF0aW9uOnJlLHJlY29y''@;'; put 'put ''ZDp2fSl9KX1kZXRhY2goKXtmb3IoY29uc3QgbCBvZiB0aGlzLl92aWV3Q2FjaGUpbC5kZXN0cm95KCk7dGhpcy5fdmlld0NhY2hlPVtdfV9pbnNlcnRWaWV3KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZShhLGQpO2lmKGYpcmV0dXJuIHZvaWQoZi5jb250ZXh0''@;'; put 'put ''LiRpbXBsaWNpdD1oKTtjb25zdCB2PWwoKTtyZXR1cm4gZC5jcmVhdGVFbWJlZGRlZFZpZXcodi50ZW1wbGF0ZVJlZix2LmNvbnRleHQsdi5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyhsLGEpe2NvbnN0IGQ9YS5kZXRhY2gobCk7dGhpcy5fbWF5YmVDYWNoZVZpZXcoZCxhKX1fbW92ZVZp''@;'; put 'put ''ZXcobCxhLGQsaCl7Y29uc3QgZj1kLmdldChsKTtyZXR1cm4gZC5tb3ZlKGYsYSksZi5jb250ZXh0LiRpbXBsaWNpdD1oLGZ9X21heWJlQ2FjaGVWaWV3KGwsYSl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2gobCk7ZWxz''@;'; put 'put ''ZXtjb25zdCBkPWEuaW5kZXhPZihsKTstMT09PWQ/bC5kZXN0cm95KCk6YS5yZW1vdmUoZCl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKGwsYSl7Y29uc3QgZD10aGlzLl92aWV3Q2FjaGUucG9wKCk7cmV0dXJuIGQmJmEuaW5zZXJ0KGQsbCksZHx8bnVsbH19Y29uc3QgTUZlPVsiY29udGVudFdy''@;'; put 'put ''YXBwZXIiXSx4RmU9WyIqIl0sVzBlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtjbGFzcyBFRmV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IFduLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hh''@;'; put 'put ''bmdlLnBpcGUoZnVuY3Rpb24gY1koYyxsPWNuKXtyZXR1cm4gYz1jPz9KT2UsVmkoKGEsZCk9PntsZXQgaCxmPSEwO2Euc3Vic2NyaWJlKE5pKGQsdj0+e2NvbnN0IE09bCh2KTsoZnx8IWMoaCxNKSkmJihmPSExLGg9TSxkLm5leHQodikpfSkpfSl9KCkpLHRoaXMuX3ZpZXdwb3J0PW51bGws''@;'; put 'put ''dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWR9YXR0YWNoKGwpe3RoaXMuX3ZpZXdwb3J0PWwsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxl''@;'; put 'put ''ZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShsLGEsZCl7dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRo''@;'; put 'put ''aXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRS''@;'; put 'put ''ZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KGwsYSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KGwqdGhpcy5faXRlbVNpemUsYSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYm''@;'; put 'put ''dGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCBsPXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVk''@;'; put 'put ''UmFuZ2UoKSxhPXtzdGFydDpsLnN0YXJ0LGVuZDpsLmVuZH0sZD10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxoPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgZj10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksdj10aGlzLl9pdGVtU2l6ZT4w''@;'; put 'put ''P2YvdGhpcy5faXRlbVNpemU6MDtpZihhLmVuZD5oKXtjb25zdCBEPU1hdGguY2VpbChkL3RoaXMuX2l0ZW1TaXplKSxaPU1hdGgubWF4KDAsTWF0aC5taW4odixoLUQpKTt2IT1aJiYodj1aLGY9Wip0aGlzLl9pdGVtU2l6ZSxhLnN0YXJ0PU1hdGguZmxvb3IodikpLGEuZW5kPU1hdGgubWF4''@;'; put 'put ''KDAsTWF0aC5taW4oaCxhLnN0YXJ0K0QpKX1jb25zdCBNPWYtYS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihNPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1hLnN0YXJ0KXtjb25zdCBEPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtTSkvdGhpcy5faXRlbVNpemUpO2Euc3RhcnQ9TWF0aC5t''@;'; put 'put ''YXgoMCxhLnN0YXJ0LUQpLGEuZW5kPU1hdGgubWluKGgsTWF0aC5jZWlsKHYrKGQrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCBEPWEuZW5kKnRoaXMuX2l0ZW1TaXplLShmK2QpO2lmKEQ8dGhpcy5fbWluQnVmZmVyUHgmJmEuZW5kIT1oKXtjb25zdCBa''@;'; put 'put ''PU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtRCkvdGhpcy5faXRlbVNpemUpO1o+MCYmKGEuZW5kPU1hdGgubWluKGgsYS5lbmQrWiksYS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iodi10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQu''@;'; put 'put ''c2V0UmVuZGVyZWRSYW5nZShhKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqYS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IodikpfX1sZXQga3k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5fcGxhdGZvcm09ZCx0aGlzLl9zY3JvbGxlZD1uZXcgV24sdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PWh9cmVnaXN0''@;'; put 'put ''ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuc2Nyb2xsQ29udGFpbmVy''@;'; put 'put ''cy5nZXQoYSk7ZCYmKGQudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBYdChkPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0''@;'; put 'put ''ZW5lcigpO2NvbnN0IGg9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUoeVkoYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3JpYmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5f''@;'; put 'put ''c2Nyb2xsZWRDb3VudHx8dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpmbygpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxl''@;'; put 'put ''ZC5jb21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUoJGwoZj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhh''@;'; put 'put ''KXtjb25zdCBkPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9''@;'; put 'put ''X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1FZChkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFs''@;'; put 'put ''U3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vi''@;'; put 'put ''c2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFdhKSx4cihDeCkseHIodnMsOCkpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFkwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1kLHRo''@;'; put 'put ''aXMubmdab25lPWgsdGhpcy5kaXI9Zix0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgWHQodj0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnhkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKFYwKHRo''@;'; put 'put ''aXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSh2KSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0''@;'; put 'put ''cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaD10aGlzLmRpciYm''@;'; put 'put ''InJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PWEubGVmdCYmKGEubGVmdD1oP2EuZW5kOmEuc3RhcnQpLG51bGw9PWEucmlnaHQmJihhLnJpZ2h0PWg/YS5zdGFydDphLmVuZCksbnVsbCE9YS5ib3R0b20mJihhLnRvcD1kLnNjcm9sbEhlaWdodC1kLmNsaWVudEhlaWdodC1hLmJvdHRvbSks''@;'; put 'put ''aCYmTXgoKSE9X3AuTk9STUFMPyhudWxsIT1hLmxlZnQmJihhLnJpZ2h0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLmxlZnQpLE14KCk9PV9wLklOVkVSVEVEP2EubGVmdD1hLnJpZ2h0Ok14KCk9PV9wLk5FR0FURUQmJihhLmxlZnQ9YS5yaWdodD8tYS5yaWdodDphLnJpZ2h0KSk6''@;'; put 'put ''bnVsbCE9YS5yaWdodCYmKGEubGVmdD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5yaWdodCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl9X2FwcGx5U2Nyb2xsVG9PcHRpb25zKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7IWZ1bmN0aW9uIG1Q''@;'; put 'put ''ZSgpe2lmKG51bGw9PXU3KXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gdTc9ITEsdTc7aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSl1''@;'; put 'put ''Nz0hMDtlbHNle2NvbnN0IGM9RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87dTc9ISFjJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoYy50b1N0cmluZygpKX19cmV0dXJuIHU3fSgpPyhudWxsIT1hLnRvcCYmKGQuc2Nyb2xsVG9wPWEudG9wKSxudWxsIT1hLmxlZnQmJihk''@;'; put 'put ''LnNjcm9sbExlZnQ9YS5sZWZ0KSk6ZC5zY3JvbGxUbyhhKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2NvbnN0IGQ9ImxlZnQiLGg9InJpZ2h0IixmPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCJ0b3AiPT1hKXJldHVybiBmLnNjcm9sbFRvcDtpZigiYm90dG9tIj09YSlyZXR1''@;'; put 'put ''cm4gZi5zY3JvbGxIZWlnaHQtZi5jbGllbnRIZWlnaHQtZi5zY3JvbGxUb3A7Y29uc3Qgdj10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWE/YT12P2g6ZDoiZW5kIj09YSYmKGE9dj9kOmgpLHYmJk14KCk9PV9wLklOVkVSVEVEP2E9PWQ/Zi5zY3JvbGxX''@;'; put 'put ''aWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdDpmLnNjcm9sbExlZnQ6diYmTXgoKT09X3AuTkVHQVRFRD9hPT1kP2Yuc2Nyb2xsTGVmdCtmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGg6LWYuc2Nyb2xsTGVmdDphPT1kP2Yuc2Nyb2xsTGVmdDpmLnNjcm9sbFdpZHRoLWYuY2xpZW50''@;'; put 'put ''V2lkdGgtZi5zY3JvbGxMZWZ0fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreSksR2UoV2EpLEdlKHBtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxl''@;'; put 'put ''IiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLEFMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3JtPWEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5f''@;'; put 'put ''Y2hhbmdlLm5leHQoZil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5k''@;'; put 'put ''b3coKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0''@;'; put 'put ''aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdw''@;'; put 'put ''b3J0U2l6ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdo''@;'; put 'put ''dDphLmxlZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxl''@;'; put 'put ''bWVudCxmPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShh''@;'; put 'put ''PTIwKXtyZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKHlZKGEpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3Zp''@;'; put 'put ''ZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEN4KSx4cihXYSkseHIo''@;'; put 'put ''dnMsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEcwZT1uZXcgU3QoIlZJUlRVQUxfU0NST0xMQUJMRSIpO2xldCAkMGU9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IFkwZXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihhLGQsaCxmKX1tZWFzdXJlVmlld3BvcnRTaXplKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09YT9kLmNsaWVudFdpZHRoOmQuY2xpZW50SGVpZ2h0fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreSksR2UoV2EpLEdlKHBtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgREZlPXR5cGVvZiByZXF1ZXN0QW5pbWF0''@;'; put 'put ''aW9uRnJhbWU8InUiP2owZTpmRmU7bGV0IER5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyAkMGV7Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihhKXt0aGlzLl9vcmllbnRhdGlvbiE9PWEmJih0aGlzLl9vcmllbnRhdGlvbj1hLHRoaXMu''@;'; put 'put ''X2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXtzdXBlcihhLE0saCx2KSx0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1kLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWYsdGhpcy5zY3JvbGxhYmxlPVosdGhpcy5fcGxhdGZv''@;'; put 'put ''cm09ZmkoQ3gpLHRoaXMuX2RldGFjaGVkU3ViamVjdD1uZXcgV24sdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuX29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgWHQocmU9PnRoaXMuX3Nj''@;'; put 'put ''cm9sbFN0cmF0ZWd5LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKGNlPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnJlLm5leHQoY2UpKSkpKSx0aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhp''@;'; put 'put ''cy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVy''@;'; put 'put ''ZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9cXQuRU1QVFksdGhpcy5f''@;'; put 'put ''dmlld3BvcnRDaGFuZ2VzPUQuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSksdGhpcy5zY3JvbGxhYmxlfHwodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSIpLHRoaXMuc2Ny''@;'; put 'put ''b2xsYWJsZT10aGlzKX1uZ09uSW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFz''@;'; put 'put ''dXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHgyKG51bGwpLHlZKDAsREZlKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5''@;'; put 'put ''Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0''@;'; put 'put ''YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2goYSl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9mb3JPZj1hLHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlw''@;'; put 'put ''ZShWMCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoZD0+e2NvbnN0IGg9ZC5sZW5ndGg7aCE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPWgsdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVj''@;'; put 'put ''dGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5n''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGEpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2FdfXNldFRvdGFsQ29udGVudFNpemUo''@;'; put 'put ''YSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWEmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZShhKXsoZnVuY3Rpb24ga0ZlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuc3RhcnQ9PWwuc3RhcnQmJmMuZW5kPT1sLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsYSl8fCh0aGlzLmFwcGVuZE9ubHkmJihhPXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCxhLmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0''@;'; put 'put ''KHRoaXMuX3JlbmRlcmVkUmFuZ2U9YSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50''@;'; put 'put ''T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldChhLGQ9InRvLXN0YXJ0Iil7YT10aGlzLmFwcGVuZE9ubHkmJiJ0by1zdGFydCI9PT1kPzA6YTtjb25zdCBmPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRh''@;'; put 'put ''dGlvbix2PWY/IlgiOiJZIjtsZXQgRD1gdHJhbnNsYXRlJHt2fSgke051bWJlcigoZiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSphKX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD1hLCJ0by1lbmQiPT09ZCYmKEQrPWAgdHJhbnNsYXRlJHt2fSgtMTAw''@;'; put 'put ''JSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1EJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPUQsdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRl''@;'; put 'put ''cmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0''@;'; put 'put ''KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQoYSxkPSJhdXRvIil7Y29uc3QgaD17YmVoYXZpb3I6ZH07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9oLnN0''@;'; put 'put ''YXJ0PWE6aC50b3A9YSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8oaCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGEsZCl9bWVhc3VyZVNjcm9sbE9mZnNldChhKXtsZXQgZDtyZXR1cm4gZD10aGlzLnNjcm9sbGFibGU9PXRo''@;'; put 'put ''aXM/aD0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChoKTpoPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChoKSxNYXRoLm1heCgwLGQoYT8/KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zm''@;'; put 'put ''c2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChhKXtsZXQgZDtjb25zdCBoPSJsZWZ0IixmPSJyaWdodCIsdj0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2Q9InN0YXJ0Ij09YT92P2Y6aDoiZW5kIj09YT92P2g6ZjphfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6''@;'; put 'put ''InRvcCIpO2NvbnN0IE09dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGQpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkXS1NfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRT''@;'; put 'put ''aXplKCl7Y29uc3QgYT10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodH1tZWFzdXJlUmFuZ2VTaXplKGEpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JP''@;'; put 'put ''Zi5tZWFzdXJlUmFuZ2VTaXplKGEsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3''@;'; put 'put ''cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoYSl7YSYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaChhKSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8''@;'; put 'put ''fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURl''@;'; put 'put ''dGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25lLnJ1bigoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO2NvbnN0''@;'; put 'put ''IGE9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlv''@;'; put 'put ''bj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKEdlKEppKSxHZShFcyksR2UoV2EpLEdlKFcwZSw4KSxHZShwbSw4KSxHZShreSksR2UoQUwpLEdlKEcwZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXV0sdmlld1F1ZXJ5OmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShNRmUsNyksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5fY29udGVudFdyYXBwZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''MiZkJiZUcigiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24pKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwiLCJob3Jpem9udGFsIiE9PWgub3JpZW50YXRpb24pfSxpbnB1dHM6e29y''@;'; put 'put ''aWVudGF0aW9uOiJvcmllbnRhdGlvbiIsYXBwZW5kT25seTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImFwcGVuZE9ubHkiLCJhcHBlbmRPbmx5IixzMV19LG91dHB1dHM6e3Njcm9sbGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiEwLGZl''@;'; put 'put ''YXR1cmVzOltkYShbe3Byb3ZpZGU6WTBlLHVzZUZhY3Rvcnk6KGEsZCk9PmF8fGQsZGVwczpbW25ldyBJMSxuZXcgYzUoRzBlKV0sY119XSksV2wsd2EscUldLG5nQ29udGVudFNlbGVjdG9yczp4RmUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNk''@;'; put 'put ''ay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKHNhKCksZGUoMCwiZGl2IiwxLDApLFlyKDIpLGhlKCksR3QoMywiZGl2IiwyKSksMiZkJiYoZmUoMyksX2QoIndpZHRo''@;'; put 'put ''IixoLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaC5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1z''@;'; put 'put ''Y3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6''@;'; put 'put ''MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4t''@;'; put 'put ''aGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12''@;'; put 'put ''aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1s''@;'; put 'put ''ZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRh''@;'; put 'put ''dGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmly''@;'; put 'put ''dHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1''@;'; put 'put ''YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0u''@;'; put 'put ''Y2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp''@;'; put 'put ''b246MH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSzBlKGMsbCxhKXtpZighYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PWM/InN0YXJ0Ij09PWw/aC5sZWZ0OmgucmlnaHQ6InN0''@;'; put 'put ''YXJ0Ij09PWw/aC50b3A6aC5ib3R0b219bGV0IGtMPSgoKT0+e2NsYXNzIGN7Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihhKXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9YSxmdW5jdGlvbiBDRmUoYyl7cmV0dXJu''@;'; put 'put ''IGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbm5lY3QmJiEoYyBpbnN0YW5jZW9mIFdaKX0oYSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChhKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBTRmUoQk0oYSk/YTpBcnJheS5mcm9tKGF8fFtdKSkpfWdldCBjZGtWaXJ0''@;'; put 'put ''dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9YT8oZCxoKT0+YShkKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMu''@;'; put 'put ''X3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCksaCk6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7YSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWEpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVh''@;'; put 'put ''dGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1kNyhhKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhp''@;'; put 'put ''cy5fZGlmZmVycz1oLHRoaXMuX3ZpZXdSZXBlYXRlcj1mLHRoaXMuX3ZpZXdwb3J0PXYsdGhpcy52aWV3Q2hhbmdlPW5ldyBXbix0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgV24sdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoeDIobnVsbCksZnVuY3Rp''@;'; put 'put ''b24gbUZlKCl7cmV0dXJuIFZpKChjLGwpPT57bGV0IGEsZD0hMTtjLnN1YnNjcmliZShOaShsLGg9Pntjb25zdCBmPWE7YT1oLGQmJmwubmV4dChbZixoXSksZD0hMH0pKX0pfSgpLFYxKChbRCxaXSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UoRCxaKSksSTBlKDEpKSx0aGlzLl9kaWZmZXI9''@;'; put 'put ''bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUoRD0+e3RoaXMuX2RhdGE9RCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKFYw''@;'; put 'put ''KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShEPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1ELHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZNLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hh''@;'; put 'put ''bmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShhLGQpe2lmKGEuc3RhcnQ+PWEuZW5kKXJldHVybiAwO2NvbnN0IGg9YS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LGY9YS5lbmQtYS5zdGFydDtsZXQgdixNO2ZvcihsZXQgRD0wO0Q8''@;'; put 'put ''ZjtEKyspe2NvbnN0IFo9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoRCtoKTtpZihaJiZaLnJvb3ROb2Rlcy5sZW5ndGgpe3Y9TT1aLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCBEPWYtMTtEPi0xO0QtLSl7Y29uc3QgWj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gpO2lm''@;'; put 'put ''KFomJloucm9vdE5vZGVzLmxlbmd0aCl7TT1aLnJvb3ROb2Rlc1taLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiB2JiZNP0swZShkLCJlbmQiLE0pLUswZShkLCJzdGFydCIsdik6MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2E/dGhpcy5fYXBwbHlDaGFuZ2VzKGEpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNl''@;'; put 'put ''Q2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25S''@;'; put 'put ''ZW5kZXJlZERhdGFDaGFuZ2UoKXt0aGlzLl9yZW5kZXJlZFJhbmdlJiYodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9k''@;'; put 'put ''aWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChhLGQpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoYSxkKTpkKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGEsZCl7cmV0dXJuIGEmJmEu''@;'; put 'put ''ZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxkP2QuY29ubmVjdCh0aGlzKTpmbygpfV91cGRhdGVDb250ZXh0KCl7Y29uc3QgYT10aGlzLl9kYXRhLmxlbmd0aDtsZXQgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2QtLTspe2NvbnN0IGg9dGhpcy5f''@;'; put 'put ''dmlld0NvbnRhaW5lclJlZi5nZXQoZCk7aC5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrZCxoLmNvbnRleHQuY291bnQ9YSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGguY29udGV4dCksaC5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5n''@;'; put 'put ''ZXMoYSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhhLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKGYsdixNKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhmLE0pLGY9PmYuaXRlbSksYS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZj0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYu''@;'; put 'put ''Z2V0KGYuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1mLml0ZW19KTtjb25zdCBkPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7aC0tOyl7Y29uc3QgZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChoKTtmLmNvbnRl''@;'; put 'put ''eHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtoLGYuY29udGV4dC5jb3VudD1kLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZi5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoYSl7YS5maXJzdD0wPT09YS5pbmRleCxhLmxh''@;'; put 'put ''c3Q9YS5pbmRleD09PWEuY291bnQtMSxhLmV2ZW49YS5pbmRleCUyPT0wLGEub2RkPSFhLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoYSxkKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmEuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5f''@;'; put 'put ''Y2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4OmR9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERvKSxHZShTbCksR2UoZW0pLEdlKF9ZKSxHZShEeSw0KSxH''@;'; put 'put ''ZShXYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2Rr''@;'; put 'put ''VmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlk''@;'; put 'put ''ZTpfWSx1c2VDbGFzczpaMGV9XSldfSl9fXJldHVybiBjfSkoKSxJRmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9''@;'; put 'put ''QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gd1koYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4g''@;'; put 'put ''Y31mdW5jdGlvbiBJeShjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7d1koYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXIt''@;'; put 'put ''c2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiBxMGUoYyxsLGEpe3dZKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0''@;'; put 'put ''Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uIERMKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gWDBlKGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09SUwo''@;'; put 'put ''bC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBJTChjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoYyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIENZKGMpe2NvbnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0''@;'; put 'put ''OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiBTWShjLGwsYSl7Y29uc3R7dG9wOmQsYm90dG9tOmgsbGVmdDpmLHJpZ2h0OnZ9PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8''@;'; put 'put ''PXZ9ZnVuY3Rpb24gRXgoYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIEowZShjLGwsYSxkKXtjb25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTp2LGxlZnQ6TSx3aWR0aDpELGhlaWdodDpafT1j''@;'; put 'put ''LHJlPUQqbCxjZT1aKmw7cmV0dXJuIGQ+aC1jZSYmZDx2K2NlJiZhPk0tcmUmJmE8ZityZX1jbGFzcyBRMGV7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnBvc2l0aW9ucz1uZXcgTWFwfWNsZWFyKCl7dGhpcy5wb3NpdGlvbnMuY2xlYXIoKX1jYWNoZShsKXt0aGlzLmNs''@;'; put 'put ''ZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLGwuZm9yRWFjaChhPT57dGhpcy5wb3NpdGlvbnMuc2V0KGEse3Njcm9sbFBvc2l0aW9uOnt0b3A6YS5zY3JvbGxUb3AsbGVmdDph''@;'; put 'put ''LnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6Q1koYSl9KX0pfWhhbmRsZVNjcm9sbChsKXtjb25zdCBhPXhMKGwpLGQ9dGhpcy5wb3NpdGlvbnMuZ2V0KGEpO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5zY3JvbGxQb3NpdGlvbjtsZXQgZix2O2lmKGE9PT10aGlzLl9kb2N1bWVudCl7Y29u''@;'; put 'put ''c3QgWj10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtmPVoudG9wLHY9Wi5sZWZ0fWVsc2UgZj1hLnNjcm9sbFRvcCx2PWEuc2Nyb2xsTGVmdDtjb25zdCBNPWgudG9wLWYsRD1oLmxlZnQtdjtyZXR1cm4gdGhpcy5wb3NpdGlvbnMuZm9yRWFjaCgoWixyZSk9PntaLmNsaWVudFJl''@;'; put 'put ''Y3QmJmEhPT1yZSYmYS5jb250YWlucyhyZSkmJkV4KFouY2xpZW50UmVjdCxNLEQpfSksaC50b3A9ZixoLmxlZnQ9dix7dG9wOk0sbGVmdDpEfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue3RvcDp3aW5kb3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rp''@;'; put 'put ''b24gZTFlKGMpe2NvbnN0IGw9Yy5jbG9uZU5vZGUoITApLGE9bC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIiksZD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7bC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspYVtoXS5yZW1vdmVBdHRyaWJ1dGUoImlk''@;'; put 'put ''Iik7cmV0dXJuImNhbnZhcyI9PT1kP3IxZShjLGwpOigiaW5wdXQiPT09ZHx8InNlbGVjdCI9PT1kfHwidGV4dGFyZWEiPT09ZCkmJm4xZShjLGwpLHQxZSgiY2FudmFzIixjLGwscjFlKSx0MWUoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IixjLGwsbjFlKSxsfWZ1bmN0aW9uIHQxZShjLGws''@;'; put 'put ''YSxkKXtjb25zdCBoPWwucXVlcnlTZWxlY3RvckFsbChjKTtpZihoLmxlbmd0aCl7Y29uc3QgZj1hLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspZChoW3ZdLGZbdl0pfX1sZXQgTEZlPTA7ZnVuY3Rpb24gbjFlKGMsbCl7ImZpbGUiIT09bC50eXBlJiYo''@;'; put 'put ''bC52YWx1ZT1jLnZhbHVlKSwicmFkaW8iPT09bC50eXBlJiZsLm5hbWUmJihsLm5hbWU9YG1hdC1jbG9uZS0ke2wubmFtZX0tJHtMRmUrK31gKX1mdW5jdGlvbiByMWUoYyxsKXtjb25zdCBhPWwuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXRyeXthLmRyYXdJbWFnZShjLDAsMCl9Y2F0Y2h7fX1m''@;'; put 'put ''dW5jdGlvbiBpMWUoYyxsKXtjb25zdCBhPWMucm9vdE5vZGVzO2lmKDE9PT1hLmxlbmd0aCYmYVswXS5ub2RlVHlwZT09PWwuRUxFTUVOVF9OT0RFKXJldHVybiBhWzBdO2NvbnN0IGQ9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS5mb3JFYWNoKGg9PmQuYXBwZW5kQ2hpbGQoaCkp''@;'; put 'put ''LGR9ZnVuY3Rpb24gYTFlKGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBhcnNlRmxvYXQoYykqbH1mdW5jdGlvbiBNWShjLGwpe3JldHVybiBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWNv''@;'; put 'put ''bnN0IFBGZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgRkZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX3Jvb3RFbGVtZW50PWEsdGhpcy5fZGlyZWN0aW9uPWQsdGhpcy5faW5pdGlhbERvbVJlY3Q9aCx0aGlzLl9wcmV2aWV3VGVt''@;'; put 'put ''cGxhdGU9Zix0aGlzLl9wcmV2aWV3Q2xhc3M9dix0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT1NLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09RCx0aGlzLl96SW5kZXg9Wn1hdHRhY2gobCl7dGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3KCksbC5hcHBlbmRDaGlsZCh0aGlzLl9w''@;'; put 'put ''cmV2aWV3KSwic2hvd1BvcG92ZXIiaW4gdGhpcy5fcHJldmlldyYmdGhpcy5fcHJldmlldy5zaG93UG9wb3ZlcigpfWRlc3Ryb3koKXt0aGlzLl9wcmV2aWV3LnJlbW92ZSgpLHRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdF''@;'; put 'put ''bWJlZGRlZFZpZXc9bnVsbH1zZXRUcmFuc2Zvcm0obCl7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09bH1nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtyZXR1cm4gdGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1hZGRDbGFzcyhsKXt0aGlzLl9wcmV2aWV3LmNsYXNz''@;'; put 'put ''TGlzdC5hZGQobCl9Z2V0VHJhbnNpdGlvbkR1cmF0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIE9GZShjKXtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUoYyksYT1NWShsLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiksZD1hLmZpbmQoTT0+InRyYW5zZm9ybSI9PT1NfHwiYWxsIj09PU0pO2lmKCFkKXJl''@;'; put 'put ''dHVybiAwO2NvbnN0IGg9YS5pbmRleE9mKGQpLGY9TVkobCwidHJhbnNpdGlvbi1kdXJhdGlvbiIpLHY9TVkobCwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiBhMWUoZltoXSkrYTFlKHZbaF0pfSh0aGlzLl9wcmV2aWV3KX1hZGRFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmlldy5h''@;'; put 'put ''ZGRFdmVudExpc3RlbmVyKGwsYSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpfV9jcmVhdGVQcmV2aWV3KCl7Y29uc3QgbD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLl9wcmV2aWV3Q2xhc3MsZD1sP2wudGVtcGxh''@;'; put 'put ''dGU6bnVsbDtsZXQgaDtpZihkJiZsKXtjb25zdCBmPWwubWF0Y2hTaXplP3RoaXMuX2luaXRpYWxEb21SZWN0Om51bGwsdj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGQsbC5jb250ZXh0KTt2LmRldGVjdENoYW5nZXMoKSxoPWkxZSh2LHRoaXMuX2RvY3VtZW50KSx0aGlz''@;'; put 'put ''Ll9wcmV2aWV3RW1iZWRkZWRWaWV3PXYsbC5tYXRjaFNpemU/WDBlKGgsZik6aC5zdHlsZS50cmFuc2Zvcm09SUwodGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KX1lbHNlIGg9ZTFlKHRoaXMuX3Jvb3RFbGVtZW50KSxYMGUoaCx0aGlz''@;'; put 'put ''Ll9pbml0aWFsRG9tUmVjdCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKGguc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pO3JldHVybiB3WShoLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46IjAiLHBvc2l0aW9uOiJmaXhlZCIsdG9wOiIwIixs''@;'; put 'put ''ZWZ0OiIwIiwiei1pbmRleCI6dGhpcy5fekluZGV4KyIifSxQRmUpLEl5KGgsITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJwb3BvdmVyIiwibWFudWFsIiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJy''@;'; put 'put ''YXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlzdC5hZGQoYSkpLGh9fWNvbnN0IG8xZT1BeSh7cGFzc2l2ZTohMH0pLFJMPUF5KHtwYXNzaXZlOiExfSksczFlPUF5KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxsMWU9bmV3IFNldChbInBv''@;'; put 'put ''c2l0aW9uIl0pO2NsYXNzIE5GZXtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7bCE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9''@;'; put 'put ''bCx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGE9Pkl5KGEsbCkpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5fY29uZmlnPWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVy''@;'; put 'put ''PWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT12LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSExLHRoaXMuX21vdmVFdmVudHM9bmV3IFduLHRoaXMuX3BvaW50ZXJNb3ZlU3Vi''@;'; put 'put ''c2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1udWxsLHRoaXMuX25hdGl2ZUlu''@;'; put 'put ''dGVyYWN0aW9uc0VuYWJsZWQ9ITAsdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9bmV3IFNldCx0aGlzLl9kaXJlY3Rpb249Imx0ciIsdGhpcy5kcmFnU3RhcnREZWxheT0wLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgV24sdGhpcy5zdGFy''@;'; put 'put ''dGVkPW5ldyBXbix0aGlzLnJlbGVhc2VkPW5ldyBXbix0aGlzLmVuZGVkPW5ldyBXbix0aGlzLmVudGVyZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMubW92ZWQ9dGhpcy5fbW92ZUV2ZW50cyx0aGlzLl9wb2ludGVyRG93bj1NPT57aWYodGhp''@;'; put 'put ''cy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7RCYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoRCkmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKEQsTSl9ZWxz''@;'; put 'put ''ZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMuX3Jvb3RFbGVtZW50LE0pfSx0aGlzLl9wb2ludGVyTW92ZT1NPT57Y29uc3QgRD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoTSk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyl7aWYo''@;'; put 'put ''TWF0aC5hYnMoRC54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJzKEQueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgRWU9RGF0ZS5ub3coKT49dGhpcy5fZHJhZ1N0YXJ0VGltZSt0aGlz''@;'; put 'put ''Ll9nZXREcmFnU3RhcnREZWxheShNKSxCZT10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFFZSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSk7KCFCZXx8IUJlLmlzRHJhZ2dpbmcoKSYmIUJlLmlzUmVjZWl2aW5nKCkpJiYoTS5jYW5jZWxhYmxlJiZNLnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX3N0YXJ0RHJhZ1NlcXVlbmNlKE0pKSl9cmV0dXJufU0uY2FuY2VsYWJsZSYmTS5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IFo9dGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24o''@;'; put 'put ''RCk7aWYodGhpcy5faGFzTW92ZWQ9ITAsdGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPUQsdGhpcy5fdXBkYXRlUG9pbnRlckRpcmVjdGlvbkRlbHRhKFopLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihaLEQpO2Vsc2V7Y29uc3QgcmU9''@;'; put 'put ''dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsRG9tUmVjdDp0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSxjZT10aGlzLl9hY3RpdmVUcmFuc2Zvcm07Y2UueD1aLngtcmUueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsY2UueT1aLnktcmUueSt0aGlzLl9wYXNzaXZlVHJh''@;'; put 'put ''bnNmb3JtLnksdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShjZS54LGNlLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOlosZXZl''@;'; put 'put ''bnQ6TSxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoWiksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhfSl9KX0sdGhpcy5fcG9pbnRlclVwPU09Pnt0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSl9LHRoaXMuX25hdGl2ZURyYWdTdGFydD1NPT57aWYodGhpcy5faGFuZGxl''@;'; put 'put ''cy5sZW5ndGgpe2NvbnN0IEQ9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKE0pO0QmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKEQpJiYhdGhpcy5kaXNhYmxlZCYmTS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8TS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLndpdGhSb290''@;'; put 'put ''RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBRMGUoZCksdi5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVu''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PkVk''@;'; put 'put ''KGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+SXkoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhP''@;'; put 'put ''ZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxh''@;'; put 'put ''dGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPUVkKGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1lbnQmJih0aGlzLl9yb290RWxlbWVudCYmdGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixSTCksYS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvMWUpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRp''@;'; put 'put ''dmVEcmFnU3RhcnQsUkwpfSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fcm9vdEVsZW1lbnQ9YSksdHlwZW9mIFNWR0VsZW1lbnQ8InUiJiZ0aGlzLl9yb290RWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJih0aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnQub3duZXJTVkdFbGVtZW50KSx0aGlzfXdpdGhCb3VuZGFyeUVsZW1lbnQobCl7cmV0dXJuIHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1sP0VkKGwpOm51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksbCYmKHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10''@;'; put 'put ''aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxMCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpKSksdGhpc313aXRoUGFyZW50KGwpe3JldHVybiB0aGlzLl9wYXJlbnREcmFnUmVmPWwsdGhpc31kaXNwb3NlKCl7dGhpcy5fcmVtb3ZlUm9vdEVs''@;'; put 'put ''ZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLl9yb290RWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdE''@;'; put 'put ''cm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVu''@;'; put 'put ''dGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAw''@;'; put 'put ''LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9yb290RWxlbWVudD10aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9w''@;'; put 'put ''cmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERyYWdSZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyYmdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpfXJlc2V0KCl7dGhpcy5fcm9vdEVsZW1lbnQu''@;'; put 'put ''c3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm18fCIiLHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH19ZGlzYWJsZUhhbmRsZShsKXshdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmdGhpcy5faGFu''@;'; put 'put ''ZGxlcy5pbmRleE9mKGwpPi0xJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmFkZChsKSxJeShsLCEwKSl9ZW5hYmxlSGFuZGxlKGwpe3RoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZGVsZXRlKGwpLEl5KGwsdGhpcy5kaXNhYmxlZCkpfXdpdGhE''@;'; put 'put ''aXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj1sLHRoaXN9X3dpdGhEcm9wQ29udGFpbmVyKGwpe3RoaXMuX2Ryb3BDb250YWluZXI9bH1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7Y29uc3QgbD10aGlzLmlzRHJhZ2dpbmcoKT90aGlzLl9hY3RpdmVUcmFuc2Zvcm06dGhpcy5fcGFz''@;'; put 'put ''c2l2ZVRyYW5zZm9ybTtyZXR1cm57eDpsLngseTpsLnl9fXNldEZyZWVEcmFnUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PWwueCx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9bC55LHRoaXMuX2Ryb3BD''@;'; put 'put ''b250YWluZXJ8fHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obC54LGwueSksdGhpc313aXRoUHJldmlld0NvbnRhaW5lcihsKXtyZXR1cm4gdGhpcy5fcHJldmlld0NvbnRhaW5lcj1sLHRoaXN9X3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fbGFz''@;'; put 'put ''dEtub3duUG9pbnRlclBvc2l0aW9uO2wmJnRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIodGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCksbCl9X3JlbW92ZUxpc3RlbmVycygpe3RoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0''@;'; put 'put ''aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2V0U2hhZG93Um9vdCgpPy5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdTFlLHMxZSl9''@;'; put 'put ''X2Rlc3Ryb3lQcmV2aWV3KCl7dGhpcy5fcHJldmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9bnVsbH1fZGVzdHJveVBsYWNlaG9sZGVyKCl7dGhpcy5fcGxhY2Vob2xkZXI/LnJlbW92ZSgpLHRoaXMuX3BsYWNlaG9sZGVyUmVmPy5kZXN0cm95KCksdGhpcy5fcGxhY2Vob2xkZXI9dGhp''@;'; put 'put ''cy5fcGxhY2Vob2xkZXJSZWY9bnVsbH1fZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2ds''@;'; put 'put ''ZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZykpaWYodGhpcy5yZWxlYXNlZC5u''@;'; put 'put ''ZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl9kcm9wQ29udGFpbmVyLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCkudGhlbigoKT0+e3RoaXMuX2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpLHRoaXMu''@;'; put 'put ''X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9KTtlbHNle3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueDtjb25zdCBhPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShs''@;'; put 'put ''KTt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGEpLGRyb3BQb2ludDphLGV2ZW50Omx9KX0pLHRoaXMu''@;'; put 'put ''X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9fV9zdGFydERyYWdTZXF1ZW5jZShsKXtUeChsKSYmKHRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZT1EYXRlLm5vdygpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJh''@;'; put 'put ''Y3Rpb25zKCk7Y29uc3QgYT10aGlzLl9nZXRTaGFkb3dSb290KCksZD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKGEmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLHUxZSxzMWUpfSksZCl7Y29uc3QgaD10aGlzLl9y''@;'; put 'put ''b290RWxlbWVudCxmPWgucGFyZW50Tm9kZSx2PXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLE09dGhpcy5fYW5jaG9yPXRoaXMuX2FuY2hvcnx8dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIik7Zi5pbnNlcnRCZWZvcmUoTSxoKSx0aGlz''@;'; put 'put ''Ll9pbml0aWFsVHJhbnNmb3JtPWguc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PW5ldyBGRmUodGhpcy5fZG9jdW1lbnQsdGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fZGlyZWN0aW9uLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3ByZXZpZXdUZW1wbGF0ZXx8bnVsbCx0aGlz''@;'; put 'put ''LnByZXZpZXdDbGFzc3x8bnVsbCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtLHRoaXMuX2NvbmZpZy56SW5kZXh8fDFlMyksdGhpcy5fcHJldmlldy5hdHRhY2godGhpcy5fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGYsYSkpLHEwZShoLCExLGwx''@;'; put 'put ''ZSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmLnJlcGxhY2VDaGlsZCh2LGgpKSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLGQuc3RhcnQoKSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPWQsdGhpcy5faW5pdGlhbEluZGV4PWQuZ2V0SXRlbUluZGV4''@;'; put 'put ''KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKGQ/ZC5nZXRTY3JvbGxhYmxlUGFyZW50cygpOltdKX1faW5p''@;'; put 'put ''dGlhbGl6ZURyYWdTZXF1ZW5jZShsLGEpe3RoaXMuX3BhcmVudERyYWdSZWYmJmEuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZD10aGlzLmlzRHJhZ2dpbmcoKSxoPVR4KGEpLGY9IWgmJjAhPT1hLmJ1dHRvbix2PXRoaXMuX3Jvb3RFbGVtZW50LE09eEwoYSksRD0haCYmdGhpcy5fbGFzdFRv''@;'; put 'put ''dWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUrODAwPkRhdGUubm93KCksWj1oP2Z1bmN0aW9uIFFQZShjKXtjb25zdCBsPWMudG91Y2hlcyYmYy50b3VjaGVzWzBdfHxjLmNoYW5nZWRUb3VjaGVzJiZjLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWx8fC0xIT09bC5p''@;'; put 'put ''ZGVudGlmaWVyfHxudWxsIT1sLnJhZGl1c1gmJjEhPT1sLnJhZGl1c1h8fG51bGwhPWwucmFkaXVzWSYmMSE9PWwucmFkaXVzWSl9KGEpOmZ1bmN0aW9uIEpQZShjKXtyZXR1cm4gMD09PWMuYnV0dG9uc3x8MD09PWMuZGV0YWlsfShhKTtpZihNJiZNLmRyYWdnYWJsZSYmIm1vdXNlZG93biI9''@;'; put 'put ''PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxEfHxaKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYmU9di5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodD1iZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcnx8IiIsYmUud2Via2l0VGFwSGln''@;'; put 'put ''aGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9p''@;'; put 'put ''bnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5zdWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9p''@;'; put 'put ''bnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShiZT0+dGhpcy5fdXBkYXRlT25TY3JvbGwoYmUpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFy''@;'; put 'put ''eVJlY3Q9Q1kodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgcmU9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PXJlJiZyZS50ZW1wbGF0ZSYmIXJlLm1hdGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVt''@;'; put 'put ''ZW50KHRoaXMuX2luaXRpYWxEb21SZWN0LGwsYSk7Y29uc3QgY2U9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShhKTt0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGE9e3g6MCx5''@;'; put 'put ''OjB9LHRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZT17eDpjZS54LHk6Y2UueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RhcnREcmFnZ2luZyh0aGlzLGEpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKXtx''@;'; put 'put ''MGUodGhpcy5fcm9vdEVsZW1lbnQsITAsbDFlKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxEb21S''@;'; put 'put ''ZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9z''@;'; put 'put ''aXRpb25PblBhZ2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksdj1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1''@;'; put 'put ''cnJlbnRJbmRleDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjp2LGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0''@;'; put 'put ''aGlzLGQsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsdixmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5p''@;'; put 'put ''dGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5p''@;'; put 'put ''dGlhbENvbnRhaW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ryb3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJv''@;'; put 'put ''cENvbnRhaW5lcj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRleDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3Vy''@;'; put 'put ''cmVudEluZGV4OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZCxoKSx0aGlzLl9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0''@;'; put 'put ''aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1f''@;'; put 'put ''YW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCl7aWYoIXRoaXMuX2hhc01vdmVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3ByZXZpZXcuYWRkQ2xhc3MoImNkay1kcmFnLWFuaW1hdGlu''@;'; put 'put ''ZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQsbC50b3ApO2NvbnN0IGE9dGhpcy5fcHJldmlldy5nZXRUcmFuc2l0aW9uRHVyYXRpb24oKTtyZXR1cm4gMD09PWE/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJv''@;'; put 'put ''bWlzZShkPT57Y29uc3QgaD12PT57KCF2fHx4TCh2KT09PXRoaXMuX3ByZXZpZXcmJiJ0cmFuc2Zvcm0iPT09di5wcm9wZXJ0eU5hbWUpJiYodGhpcy5fcHJldmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGlt''@;'; put 'put ''ZW91dChoLDEuNSphKTt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8o''@;'; put 'put ''dGhpcy5fcGxhY2Vob2xkZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9aTFlKHRoaXMuX3BsYWNlaG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD1lMWUodGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnQpLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJv''@;'; put 'put ''dW5kaW5nQ2xpZW50UmVjdCgpOmwsdj1UeChkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxNPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0Kyh2LnBhZ2VYLWYubGVmdC1NLmxlZnQpLHk6Zi50b3AtbC50b3ArKHYucGFnZVktZi50b3AtTS50''@;'; put 'put ''b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9VHgobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFnZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZ''@;'; put 'put ''LWEudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3Qgdj10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYodil7Y29uc3QgTT10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gTS54PWgsTS55PWYsTS5tYXRyaXhUcmFuc2Zv''@;'; put 'put ''cm0odi5pbnZlcnNlKCkpfX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlzOm51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/''@;'; put 'put ''dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09YT9oPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnktKHRoaXMuY29uc3RyYWluUG9z''@;'; put 'put ''aXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueTowKTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngtKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueDowKSks''@;'; put 'put ''dGhpcy5fYm91bmRhcnlSZWN0KXtjb25zdHt4OmYseTp2fT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3t4OjAseTowfTp0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCxNPXRoaXMuX2JvdW5kYXJ5UmVjdCx7d2lkdGg6RCxoZWlnaHQ6Wn09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSxyZT1N''@;'; put 'put ''LnRvcCt2LGNlPU0uYm90dG9tLShaLXYpO2Q9YzFlKGQsTS5sZWZ0K2YsTS5yaWdodC0oRC1mKSksaD1jMWUoaCxyZSxjZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0''@;'; put 'put ''YSxmPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSx2PU1hdGguYWJzKGEtZi54KSxNPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gdj50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxNPnRo''@;'; put 'put ''aXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRs''@;'; put 'put ''ZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCxJeSh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVt''@;'; put 'put ''b3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixSTCksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvMWUpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQs''@;'; put 'put ''UkwpfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1JTChsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFuc2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/''@;'; put 'put ''aC50cmFuc2Zvcm06IiIpLGgudHJhbnNmb3JtPURMKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPUlMKGwsYSk7''@;'; put 'put ''dGhpcy5fcHJldmlldy5zZXRUcmFuc2Zvcm0oREwoaCxkKSl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5f''@;'; put 'put ''Ym91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFn''@;'; put 'put ''Z2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8''@;'; put 'put ''fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCx2PWQucmlnaHQtaC5yaWdodCxNPWgudG9wLWQudG9wLEQ9ZC5ib3R0b20taC5ib3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSx2PjAmJihsLT12KSk6bD0wLGguaGVpZ2h0PmQu''@;'; put 'put ''aGVpZ2h0PyhNPjAmJihhKz1NKSxEPjAmJihhLT1EKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpUeChsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD14TChsKTt0aGlzLl9i''@;'; put 'put ''b3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmRXgodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0''@;'; put 'put ''aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMu''@;'; put 'put ''X2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9s''@;'; put 'put ''bFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9TzBlKHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50''@;'; put 'put ''KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMuX2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVt''@;'; put 'put ''ZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gRWQoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVp''@;'; put 'put ''Z2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9''@;'; put 'put ''PmwudGFyZ2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBjMWUoYyxsLGEpe3JldHVybiBNYXRoLm1heChsLE1hdGgubWluKGEsYykpfWZ1bmN0aW9uIFR4KGMpe3JldHVybiJ0Ij09PWMudHlwZVswXX1mdW5jdGlvbiB1MWUoYyl7Yy5wcmV2ZW50''@;'; put 'put ''RGVmYXVsdCgpfWZ1bmN0aW9uIGQxZShjLGwsYSl7Y29uc3QgZD1BeChsLGMubGVuZ3RoLTEpLGg9QXgoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2RdLHY9aDxkPy0xOjE7Zm9yKGxldCBNPWQ7TSE9PWg7TSs9diljW01dPWNbTSt2XTtjW2hdPWZ9ZnVuY3Rpb24g''@;'; put 'put ''QXgoYyxsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBCRmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMu''@;'; put 'put ''X3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pdGVtUG9zaXRpb25zLHY9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtp''@;'; put 'put ''ZigtMT09PXYmJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgTT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLEQ9Zi5maW5kSW5kZXgocnQ9PnJ0LmRyYWc9PT1sKSxaPWZbdl0sY2U9Wi5jbGllbnRSZWN0LGJlPUQ+dj8xOi0xLEVlPXRoaXMuX2dldEl0ZW1PZmZzZXRQeChm''@;'; put 'put ''W0RdLmNsaWVudFJlY3QsY2UsYmUpLEJlPXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChELGYsYmUpLHFlPWYuc2xpY2UoKTtyZXR1cm4gZDFlKGYsRCx2KSxmLmZvckVhY2goKHJ0LHB0KT0+e2lmKHFlW3B0XT09PXJ0KXJldHVybjtjb25zdCBkdD1ydC5kcmFnPT09bCxKdD1kdD9FZTpCZSx2''@;'; put 'put ''bj1kdD9sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnJ0LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTtydC5vZmZzZXQrPUp0LE0/KHZuLnN0eWxlLnRyYW5zZm9ybT1ETChgdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKHJ0Lm9mZnNldCl9cHgsIDAsIDApYCxydC5pbml0aWFsVHJhbnNmb3JtKSxF''@;'; put 'put ''eChydC5jbGllbnRSZWN0LDAsSnQpKToodm4uc3R5bGUudHJhbnNmb3JtPURMKGB0cmFuc2xhdGUzZCgwLCAke01hdGgucm91bmQocnQub2Zmc2V0KX1weCwgMClgLHJ0LmluaXRpYWxUcmFuc2Zvcm0pLEV4KHJ0LmNsaWVudFJlY3QsSnQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJs''@;'; put 'put ''YXBzPVNZKGNlLGEsZCksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9Wi5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1NP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6RCxjdXJyZW50SW5kZXg6dn19ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUlu''@;'; put 'put ''ZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCx2PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsTT12LmluZGV4T2YobCksRD1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBaPXZbZl07aWYoWj09PWwmJihaPXZbZisxXSksIVomJihudWxsPT1mfHwtMT09PWZ8fGY8di5sZW5ndGgt''@;'; put 'put ''MSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZCkmJihaPXZbMF0pLE0+LTEmJnYuc3BsaWNlKE0sMSksWiYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhaKSl7Y29uc3QgcmU9Wi5nZXRSb290RWxlbWVudCgpO3JlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVm''@;'; put 'put ''b3JlKEQscmUpLHYuc3BsaWNlKGYsMCxsKX1lbHNlIEVkKHRoaXMuX2VsZW1lbnQpLmFwcGVuZENoaWxkKEQpLHYucHVzaChsKTtELnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoSXRlbXMobCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1sLnNsaWNl''@;'; put 'put ''KCksdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aFNvcnRQcmVkaWNhdGUobCl7dGhpcy5fc29ydFByZWRpY2F0ZT1sfXJlc2V0KCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5mb3JFYWNoKGw9Pntjb25zdCBhPWwuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBkPXRoaXMuX2l0''@;'; put 'put ''ZW1Qb3NpdGlvbnMuZmluZChoPT5oLmRyYWc9PT1sKT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5zZm9ybT1kfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2''@;'; put 'put ''aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9''@;'; put 'put ''PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChkPT5kLmRyYWc9PT1sKX11cGRhdGVPblNjcm9sbChsLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6ZH0p''@;'; put 'put ''PT57RXgoZCxsLGEpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpkfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZCkmJmQuX3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpfSl9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGw9Imhvcml6''@;'; put 'put ''b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKGE9Pntjb25zdCBkPWEuZ2V0VmlzaWJsZUVsZW1lbnQoKTtyZXR1cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06ZC5zdHlsZS50cmFuc2Zvcm18''@;'; put 'put ''fCIiLGNsaWVudFJlY3Q6Q1koZCl9fSkuc29ydCgoYSxkKT0+bD9hLmNsaWVudFJlY3QubGVmdC1kLmNsaWVudFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWQuY2xpZW50UmVjdC50b3ApfV9nZXRJdGVtT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmll''@;'; put 'put ''bnRhdGlvbjtsZXQgZj1oP2EubGVmdC1sLmxlZnQ6YS50b3AtbC50b3A7cmV0dXJuLTE9PT1kJiYoZis9aD9hLndpZHRoLWwud2lkdGg6YS5oZWlnaHQtbC5oZWlnaHQpLGZ9X2dldFNpYmxpbmdPZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9u''@;'; put 'put ''LGY9YVtsXS5jbGllbnRSZWN0LHY9YVtsKy0xKmRdO2xldCBNPWZbaD8id2lkdGgiOiJoZWlnaHQiXSpkO2lmKHYpe2NvbnN0IEQ9aD8ibGVmdCI6InRvcCIsWj1oPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1kP00tPXYuY2xpZW50UmVjdFtEXS1mW1pdOk0rPWZbRF0tdi5jbGllbnRSZWN0W1pd''@;'; put 'put ''fXJldHVybiBNfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChsLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGRbMF0uZHJhZyE9PXRoaXMu''@;'; put 'put ''X2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IHY9ZFtkLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBoP2w+PXYucmlnaHQ6YT49di5ib3R0b219e2NvbnN0IHY9ZFswXS5jbGllbnRSZWN0O3JldHVybiBoP2w8PXYubGVmdDphPD12LnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVy''@;'; put 'put ''UG9zaXRpb24obCxhLGQsaCl7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLHY9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOk0sY2xpZW50UmVjdDpEfSk9Pk0hPT1sJiYoKCFofHxNIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9w''@;'; put 'put ''cmV2aW91c1N3YXAub3ZlcmxhcHN8fChmP2gueDpoLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKGY/YT49TWF0aC5mbG9vcihELmxlZnQpJiZhPE1hdGguZmxvb3IoRC5yaWdodCk6ZD49TWF0aC5mbG9vcihELnRvcCkmJmQ8TWF0aC5mbG9vcihELmJvdHRvbSkpKSk7cmV0dXJu''@;'; put 'put ''LTEhPT12JiZ0aGlzLl9zb3J0UHJlZGljYXRlKHYsbCk/djotMX19dmFyIEQyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLlVQPTFdPSJVUCIsY1tjLkRPV049Ml09IkRPV04iLGN9KEQyfHx7fSksajE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJO''@;'; put 'put ''T05FIixjW2MuTEVGVD0xXT0iTEVGVCIsY1tjLlJJR0hUPTJdPSJSSUdIVCIsY30oajF8fHt9KTtjbGFzcyBqRmV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuZGlzYWJsZWQ9''@;'; put 'put ''ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsU3RlcD0yLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBXbix0aGlzLmVudGVy''@;'; put 'put ''ZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMuc29ydGVkPW5ldyBXbix0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQ9bmV3IFduLHRoaXMucmVjZWl2aW5nU3RvcHBlZD1uZXcgV24sdGhpcy5faXNEcmFnZ2luZz0hMSx0aGlzLl9kcmFnZ2FibGVzPVtd''@;'; put 'put ''LHRoaXMuX3NpYmxpbmdzPVtdLHRoaXMuX2FjdGl2ZVNpYmxpbmdzPW5ldyBTZXQsdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249RDIuTk9ORSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWoxLk5P''@;'; put 'put ''TkUsdGhpcy5fc3RvcFNjcm9sbFRpbWVycz1uZXcgV24sdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1udWxsLHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksZnVuY3Rpb24gUkZlKGM9MCxsPUNMKXtyZXR1cm4gYzwwJiYoYz0wKSxVMGUoYyxjLGwp''@;'; put 'put ''fSgwLGowZSkucGlwZShWMCh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3Qgdj10aGlzLl9zY3JvbGxOb2RlLE09dGhpcy5hdXRvU2Nyb2xsU3RlcDt0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PUQyLlVQP3Yuc2Nyb2xsQnkoMCwtTSk6dGhpcy5f''@;'; put 'put ''dmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1EMi5ET1dOJiZ2LnNjcm9sbEJ5KDAsTSksdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PWoxLkxFRlQ/di5zY3JvbGxCeSgtTSwwKTp0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09ajEuUklHSFQmJnYuc2Nyb2xsQnko''@;'; put 'put ''TSwwKX0pfSx0aGlzLmVsZW1lbnQ9RWQobCksdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhTY3JvbGxhYmxlUGFyZW50cyhbdGhpcy5lbGVtZW50XSksYS5yZWdpc3RlckRyb3BDb250YWluZXIodGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBRMGUoZCksdGhpcy5fc29ydFN0cmF0''@;'; put 'put ''ZWd5PW5ldyBCRmUodGhpcy5lbGVtZW50LGEpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgodixNKT0+dGhpcy5zb3J0UHJlZGljYXRlKHYsTSx0aGlzKSl9ZGlzcG9zZSgpe3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRl''@;'; put 'put ''KCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuc29ydGVkLmNv''@;'; put 'put ''bXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3MuY2xlYXIoKSx0aGlzLl9zY3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fZHJh''@;'; put 'put ''Z0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9ZW50ZXIobCxhLGQsaCl7dGhpcy5fZHJh''@;'; put 'put ''Z2dpbmdTdGFydGVkKCksbnVsbD09aCYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihoPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKSksdGhpcy5fc29ydFN0cmF0ZWd5LmVudGVyKGwsYSxkLGgpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2li''@;'; put 'put ''bGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleChsKX0pfWV4aXQobCl7dGhpcy5fcmVzZXQoKSx0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXN9KX1kcm9wKGwsYSxkLGgsZix2''@;'; put 'put ''LE0sRD17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTpsLGN1cnJlbnRJbmRleDphLHByZXZpb3VzSW5kZXg6ZCxjb250YWluZXI6dGhpcyxwcmV2aW91c0NvbnRhaW5lcjpoLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZixkaXN0YW5jZTp2LGRyb3BQb2ludDpNLGV2''@;'; put 'put ''ZW50OkR9KX13aXRoSXRlbXMobCl7Y29uc3QgYT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPWwsbC5mb3JFYWNoKGQ9PmQuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMpKSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGEuZmlsdGVyKGg9PmguaXNEcmFnZ2luZygpKS5ldmVy''@;'; put 'put ''eShoPT4tMT09PWwuaW5kZXhPZihoKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb249bCx0aGlzfWNvbm5lY3RlZFRvKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5vcmllbnRhdGlvbj1sLHRoaXN9d2l0aFNjcm9sbGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9RWQodGhpcy5lbGVtZW50KTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29y''@;'; put 'put ''dFN0cmF0ZWd5LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRlbShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNhYmxlZHx8IXRoaXMuX2RvbVJlY3R8fCFK''@;'; put 'put ''MGUodGhpcy5fZG9tUmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRo''@;'; put 'put ''aXMsaXRlbTpsfSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD1EMi5OT05FLGY9ajEuTk9ORTtpZih0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2goKHYsTSk9PntNPT09dGhpcy5f''@;'; put 'put ''ZG9jdW1lbnR8fCF2LmNsaWVudFJlY3R8fGR8fEowZSh2LmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiB6RmUoYyxsLGEsZCxoKXtjb25zdCBmPXAxZShsLGgpLHY9ZzFlKGwsZCk7bGV0IE09RDIuTk9ORSxEPWoxLk5PTkU7aWYoZil7Y29uc3QgWj1jLnNjcm9sbFRvcDtm''@;'; put 'put ''PT09RDIuVVA/Wj4wJiYoTT1EMi5VUCk6Yy5zY3JvbGxIZWlnaHQtWj5jLmNsaWVudEhlaWdodCYmKE09RDIuRE9XTil9aWYodil7Y29uc3QgWj1jLnNjcm9sbExlZnQ7InJ0bCI9PT1hP3Y9PT1qMS5SSUdIVD9aPDAmJihEPWoxLlJJR0hUKTpjLnNjcm9sbFdpZHRoK1o+Yy5jbGllbnRXaWR0''@;'; put 'put ''aCYmKEQ9ajEuTEVGVCk6dj09PWoxLkxFRlQ/Wj4wJiYoRD1qMS5MRUZUKTpjLnNjcm9sbFdpZHRoLVo+Yy5jbGllbnRXaWR0aCYmKEQ9ajEuUklHSFQpfXJldHVybltNLERdfShNLHYuY2xpZW50UmVjdCx0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uLGwsYSksKGh8fGYpJiYoZD1NKSl9''@;'; put 'put ''KSwhaCYmIWYpe2NvbnN0e3dpZHRoOnYsaGVpZ2h0Ok19PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksRD17d2lkdGg6dixoZWlnaHQ6TSx0b3A6MCxyaWdodDp2LGJvdHRvbTpNLGxlZnQ6MH07aD1wMWUoRCxhKSxmPWcxZShELGwpLGQ9d2luZG93fWQmJihoIT09dGhp''@;'; put 'put ''cy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGYhPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxkIT09dGhpcy5fc2Nyb2xsTm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1oLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249Zix0aGlzLl9zY3Jv''@;'; put 'put ''bGxOb2RlPWQsKGh8fGYpJiZkP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlzLl9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgp''@;'; put 'put ''e2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KS5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9bC5tc1Njcm9sbFNuYXBUeXBlfHxsLnNjcm9sbFNuYXBUeXBlfHwiIixsLnNjcm9sbFNuYXBUeXBlPWwubXNT''@;'; put 'put ''Y3JvbGxTbmFwVHlwZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50''@;'; put 'put ''cygpfV9jYWNoZVBhcmVudFBvc2l0aW9ucygpe2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KTt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlzLl9kb21SZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KGwpLmNsaWVu''@;'; put 'put ''dFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBsPUVkKHRoaXMuZWxlbWVudCkuc3R5bGU7bC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5pdGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdG9wUmVjZWl2''@;'; put 'put ''aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3RyYXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1faXNPdmVyQ29udGFpbmVyKGwsYSl7cmV0dXJu''@;'; put 'put ''IG51bGwhPXRoaXMuX2RvbVJlY3QmJlNZKHRoaXMuX2RvbVJlY3QsbCxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihsLGEsZCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzLmZpbmQoaD0+aC5fY2FuUmVjZWl2ZShsLGEsZCkpfV9jYW5SZWNlaXZlKGwsYSxkKXtpZighdGhpcy5f''@;'; put 'put ''ZG9tUmVjdHx8IVNZKHRoaXMuX2RvbVJlY3QsYSxkKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUobCx0aGlzKSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuX2dldFNoYWRvd1Jvb3QoKS5lbGVtZW50RnJvbVBvaW50KGEsZCk7aWYoIWgpcmV0dXJuITE7Y29uc3QgZj1FZCh0aGlzLmVsZW1lbnQpO3Jl''@;'; put 'put ''dHVybiBoPT09Znx8Zi5jb250YWlucyhoKX1fc3RhcnRSZWNlaXZpbmcobCxhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFkLmhhcyhsKSYmYS5ldmVyeShoPT50aGlzLmVudGVyUHJlZGljYXRlKGgsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihoKT4tMSkmJihkLmFk''@;'; put 'put ''ZChsKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhsKXt0aGlzLl9hY3RpdmVTaWJsaW5n''@;'; put 'put ''cy5kZWxldGUobCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2Ny''@;'; put 'put ''aXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUobD0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7YSYmdGhpcy5fc29ydFN0cmF0ZWd5''@;'; put 'put ''LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9vdCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBsPU8wZShFZCh0aGlzLmVsZW1lbnQpKTt0aGlz''@;'; put 'put ''Ll9jYWNoZWRTaGFkb3dSb290PWx8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpe2NvbnN0IGw9dGhpcy5fc29ydFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5maWx0ZXIoYT0+YS5pc0RyYWdn''@;'; put 'put ''aW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RhcnRSZWNlaXZpbmcodGhpcyxsKSl9fWZ1bmN0aW9uIHAxZShjLGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLGhlaWdodDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP0QyLlVQOmw+PWQtZiYmbDw9ZCtmP0Qy''@;'; put 'put ''LkRPV046RDIuTk9ORX1mdW5jdGlvbiBnMWUoYyxsKXtjb25zdHtsZWZ0OmEscmlnaHQ6ZCx3aWR0aDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP2oxLkxFRlQ6bD49ZC1mJiZsPD1kK2Y/ajEuUklHSFQ6ajEuTk9ORX1jb25zdCBMTD1BeSh7cGFzc2l2ZTohMSxjYXB0dXJl''@;'; put 'put ''OiEwfSksT0w9bmV3IFNldDtsZXQgVUZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsi''@;'; put 'put ''Y2RrLWRyYWctcmVzZXRzLWNvbnRhaW5lciIsIiJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3FJXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe30sc3R5bGVzOlsiQGxheWVyIGNkay1yZXNldHN7LmNkay1kcmFnLXByZXZpZXd7YmFja2dyb3VuZDpub25lO2JvcmRl''@;'; put 'put ''cjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0fX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX19cmV0dXJuIGN9KSgpLFpGZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fYXBwUmVmPWZpKHE0KSx0aGlzLl9lbnZp''@;'; put 'put ''cm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLl9kcm9wSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fZHJhZ0luc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXM9W10sdGhpcy5fZ2xvYmFsTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGU9aD0+''@;'; put 'put ''aC5pc0RyYWdnaW5nKCksdGhpcy5wb2ludGVyTW92ZT1uZXcgV24sdGhpcy5wb2ludGVyVXA9bmV3IFduLHRoaXMuc2Nyb2xsPW5ldyBXbix0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmc9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJmgucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKX0sdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zb21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmaC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu''@;'; put 'put ''cG9pbnRlck1vdmUubmV4dChoKSl9LHRoaXMuX2RvY3VtZW50PWR9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9wSW5zdGFuY2VzLmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuYWRkKGEp''@;'; put 'put ''LDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLExMKX0pfXJlbW92ZURyb3BDb250''@;'; put 'put ''YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoYSl9cmVtb3ZlRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5kZWxldGUoYSksdGhpcy5zdG9wRHJhZ2dpbmcoYSksMD09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsTEwpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMSkmJih0aGlzLl9sb2FkUmVzZXRzKCksdGhpcy5fYWN0aXZlRHJhZ0luc3Rh''@;'; put 'put ''bmNlcy5wdXNoKGEpLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIik7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldChoPyJ0b3VjaGVuZCI6Im1vdXNldXAiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlclVwLm5l''@;'; put 'put ''eHQoZiksb3B0aW9uczohMH0pLnNldCgic2Nyb2xsIix7aGFuZGxlcjpmPT50aGlzLnNjcm9sbC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNlbGVjdHN0YXJ0Iix7aGFuZGxlcjp0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsb3B0aW9uczpMTH0pLGh8fHRoaXMuX2dsb2Jh''@;'; put 'put ''bExpc3RlbmVycy5zZXQoIm1vdXNlbW92ZSIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KGYpLG9wdGlvbnM6TEx9KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoZix2KT0+e3RoaXMuX2RvY3VtZW50''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIodixmLmhhbmRsZXIsZi5vcHRpb25zKX0pfSl9fXN0b3BEcmFnZ2luZyhhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKTtkPi0xJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fYWN0''@;'; put 'put ''aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCkpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNjcm9sbF07cmV0dXJuIGEmJmEhPT10''@;'; put 'put ''aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBYdChoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCB2PU09Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmaC5uZXh0KE0pfTtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITAp''@;'; put 'put ''LCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITApfX0pKSksX3goLi4uZCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVt''@;'; put 'put ''b3ZlRHJvcENvbnRhaW5lcihhKSksdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2ludGVyVXAuY29tcGxldGUoKX1fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+''@;'; put 'put ''e3RoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxhLmhhbmRsZXIsYS5vcHRpb25zKX0pLHRoaXMuX2dsb2JhbExpc3RlbmVycy5jbGVhcigpfV9sb2FkUmVzZXRzKCl7aWYoIU9MLmhhcyh0aGlzLl9hcHBSZWYpKXtPTC5hZGQodGhpcy5fYXBwUmVmKTtjb25zdCBhPWZ1bmN0''@;'; put 'put ''aW9uIGRfZShjLGwpe2NvbnN0IGE9Vm8oYyksZD1sLmVsZW1lbnRJbmplY3Rvcnx8SDMoKTtyZXR1cm4gbmV3IGs4KGEpLmNyZWF0ZShkLGwucHJvamVjdGFibGVOb2RlcyxsLmhvc3RFbGVtZW50LGwuZW52aXJvbm1lbnRJbmplY3Rvcil9KFVGZSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlz''@;'; put 'put ''Ll9lbnZpcm9ubWVudEluamVjdG9yfSk7dGhpcy5fYXBwUmVmLm9uRGVzdHJveSgoKT0+e09MLmRlbGV0ZSh0aGlzLl9hcHBSZWYpLDA9PT1PTC5zaXplJiZhLmRlc3Ryb3koKX0pfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihXYSkseHIo''@;'; put 'put ''dnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBXRmU9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NX07bGV0''@;'; put 'put ''IFBMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1mfWNyZWF0ZURyYWcoYSxkPVdGZSl7cmV0dXJuIG5ldyBORmUoYSxkLHRoaXMuX2Rv''@;'; put 'put ''Y3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgakZlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRS''@;'; put 'put ''dWxlcil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpLHhyKFdhKSx4cihBTCkseHIoWkZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1y''@;'; put 'put ''ZXR1cm4gY30pKCk7Y29uc3Qga3g9bmV3IFN0KCJDREtfRFJBR19QQVJFTlQiKSxtMWU9bmV3IFN0KCJDZGtEcmFnSGFuZGxlIik7bGV0IHYxZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9''@;'; put 'put ''YSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh0aGlzKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX3BhcmVudERyYWc9ZCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFduLHRoaXMuX2Rpc2FibGVkPSExLGQ/Ll9hZGRIYW5kbGUodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''Ll9wYXJlbnREcmFnPy5fcmVtb3ZlSGFuZGxlKHRoaXMpLHRoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnSGFuZGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxzdGFuZGFs''@;'; put 'put ''b25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6bTFlLHVzZUV4aXN0aW5nOmN9XSksV2xdfSl9fXJldHVybiBjfSkoKTtjb25zdCB4WT1uZXcgU3QoIkNES19EUkFHX0NPTkZJRyIpLEVZPW5ldyBTdCgiQ2RrRHJvcExpc3QiKTtsZXQgVFk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5f''@;'; put 'put ''ZHJhZ0luc3RhbmNlcz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5f''@;'; put 'put ''ZGlzYWJsZWR9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRyb3BDb250YWluZXI9ZCx0aGlzLl9uZ1pvbmU9Zix0aGlzLl92aWV3Q29udGFpbmVyUmVmPXYsdGhpcy5fZGlyPUQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cmUsdGhp''@;'; put 'put ''cy5fc2VsZkhhbmRsZT1jZSx0aGlzLl9wYXJlbnREcmFnPWJlLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5faGFuZGxlcz1uZXcgZWkoW10pLHRoaXMuc3RhcnRlZD1uZXcgS3IsdGhpcy5yZWxlYXNlZD1uZXcgS3IsdGhpcy5lbmRlZD1uZXcgS3IsdGhpcy5lbnRlcmVkPW5ldyBLcix0''@;'; put 'put ''aGlzLmV4aXRlZD1uZXcgS3IsdGhpcy5kcm9wcGVkPW5ldyBLcix0aGlzLm1vdmVkPW5ldyBYdChFZT0+e2NvbnN0IEJlPXRoaXMuX2RyYWdSZWYubW92ZWQucGlwZShMcihxZT0+KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246cWUucG9pbnRlclBvc2l0aW9uLGV2ZW50OnFlLmV2ZW50''@;'; put 'put ''LGRlbHRhOnFlLmRlbHRhLGRpc3RhbmNlOnFlLmRpc3RhbmNlfSkpKS5zdWJzY3JpYmUoRWUpO3JldHVybigpPT57QmUudW5zdWJzY3JpYmUoKX19KSx0aGlzLl9kcmFnUmVmPVouY3JlYXRlRHJhZyhhLHtkcmFnU3RhcnRUaHJlc2hvbGQ6TSYmbnVsbCE9TS5kcmFnU3RhcnRUaHJlc2hvbGQ/''@;'; put 'put ''TS5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOk0mJm51bGwhPU0ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9NLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6TT8uekluZGV4fSksdGhpcy5fZHJhZ1Jl''@;'; put 'put ''Zi5kYXRhPXRoaXMsYy5fZHJhZ0luc3RhbmNlcy5wdXNoKHRoaXMpLE0mJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKE0pLGQmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihkLl9kcm9wTGlzdFJlZiksZC5hZGRJdGVtKHRoaXMpKSx0aGlzLl9zeW5jSW5wdXRzKHRoaXMuX2RyYWdS''@;'; put 'put ''ZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVtZW50KCl9cmVz''@;'; put 'put ''ZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShZZigxKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVyKCks''@;'; put 'put ''dGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0pfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJvb3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RDaGFu''@;'; put 'put ''Z2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXImJnRo''@;'; put 'put ''aXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpO2NvbnN0IGE9Yy5fZHJhZ0luc3RhbmNlcy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2RyYWdJbnN0YW5jZXMuc3BsaWNlKGEsMSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5faGFuZGxlcy5jb21wbGV0''@;'; put 'put ''ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fYWRkSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpO2QucHVzaChhKSx0aGlzLl9oYW5kbGVzLm5leHQoZCl9X3JlbW92''@;'; put 'put ''ZUhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKSxoPWQuaW5kZXhPZihhKTtoPi0xJiYoZC5zcGxpY2UoaCwxKSx0aGlzLl9oYW5kbGVzLm5leHQoZCkpfV9zZXRQcmV2aWV3VGVtcGxhdGUoYSl7dGhpcy5fcHJldmlld1RlbXBsYXRlPWF9X3Jlc2V0UHJldmlld1Rl''@;'; put 'put ''bXBsYXRlKGEpe2E9PT10aGlzLl9wcmV2aWV3VGVtcGxhdGUmJih0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bnVsbCl9X3NldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1hfV9yZXNldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7YT09PXRoaXMuX3BsYWNl''@;'; put 'put ''aG9sZGVyVGVtcGxhdGUmJih0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPW51bGwpfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xvc2VzdD9hLmNs''@;'; put 'put ''b3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1lbnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5ib3VuZGFyeUVs''@;'; put 'put ''ZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6RWQoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBkPXRoaXMuX2Rp''@;'; put 'put ''cixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0Nv''@;'; put 'put ''bnRhaW5lclJlZn06bnVsbCx2PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBsYXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRjaFNpemUsdmll''@;'; put 'put ''d0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5kcmFnU3RhcnREZWxheT0ib2JqZWN0Ij09dHlwZW9mIGgmJmg/aDpkNyhoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29u''@;'; put 'put ''c3RyYWluUG9zaXRpb24sYS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShmKS53aXRoUHJldmlld1RlbXBsYXRlKHYpLndpdGhQcmV2aWV3Q29udGFp''@;'; put 'put ''bmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShZZigxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFy''@;'; put 'put ''ZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7YS53aXRoUGFyZW50KGMuX2RyYWdJbnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZl''@;'; put 'put ''RWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9y''@;'; put 'put ''UmVmLm1hcmtGb3JDaGVjaygpfSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQuZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5j''@;'; put 'put ''ZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJy''@;'; put 'put ''ZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRl''@;'; put 'put ''eDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixp''@;'; put 'put ''dGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJhaW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczp2LGJvdW5kYXJ5''@;'; put 'put ''RWxlbWVudDpNLGRyYWdnaW5nRGlzYWJsZWQ6RCxyb290RWxlbWVudFNlbGVjdG9yOloscHJldmlld0NvbnRhaW5lcjpyZX09YTt0aGlzLmRpc2FibGVkPUQ/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9aHx8MCxkJiYodGhpcy5sb2NrQXhpcz1kKSxmJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlv''@;'; put 'put ''bj1mKSx2JiYodGhpcy5wcmV2aWV3Q2xhc3M9diksTSYmKHRoaXMuYm91bmRhcnlFbGVtZW50PU0pLFomJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9WikscmUmJih0aGlzLnByZXZpZXdDb250YWluZXI9cmUpfV9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMucGlwZShH''@;'; put 'put ''dShhPT57Y29uc3QgZD1hLm1hcChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxlcyhkKX0pLFYxKGE9Pl94KC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdl''@;'; put 'put ''cy5waXBlKHgyKGQpKSkpKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5fZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/ZC5kaXNhYmxlSGFuZGxlKGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVZLDEyKSxHZSh2cyksR2UoV2EpLEdlKERvKSxHZSh4WSw4KSxHZShwbSw4KSxHZShQTCksR2UoRXMpLEdlKG0xZSwxMCksR2Uoa3gsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2Vs''@;'; put 'put ''ZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY2RrLWRyYWctZGlzYWJsZWQiLGguZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsaC5fZHJhZ1JlZi5pc0Ry''@;'; put 'put ''YWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6W05uLk5vbmUsImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOltObi5Ob25lLCJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVtZW50U2VsZWN0b3I6W05uLk5vbmUsImNka0RyYWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50''@;'; put 'put ''U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6W05uLk5vbmUsImNka0RyYWdCb3VuZGFyeSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5OltObi5Ob25lLCJjZGtEcmFnU3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlvbjpbTm4uTm9uZSwiY2Rr''@;'; put 'put ''RHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLGNvbnN0cmFpblBvc2l0aW9uOltObi5Ob25lLCJjZGtEcmFnQ29uc3RyYWluUG9zaXRp''@;'; put 'put ''b24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbTm4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6W05uLk5vbmUsImNka0RyYWdQcmV2aWV3Q29udGFpbmVyIiwicHJldmlld0NvbnRhaW5lciJdfSxvdXRwdXRz''@;'; put 'put ''OntzdGFydGVkOiJjZGtEcmFnU3RhcnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2RrRHJhZ0V4aXRlZCIsZHJvcHBlZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92''@;'; put 'put ''ZWQifSxleHBvcnRBczpbImNka0RyYWciXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6a3gsdXNlRXhpc3Rpbmc6Y31dKSxXbCx3bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEFZPW5ldyBTdCgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBiMWU9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5kaXNhYmxlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxz''@;'; put 'put ''dGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QVksdXNlRXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpLEdGZT0wLHkxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9kcm9wTGlzdHM9W119Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwh''@;'; put 'put ''IXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1oLHRo''@;'; put 'put ''aXMuX3Njcm9sbERpc3BhdGNoZXI9Zix0aGlzLl9kaXI9dix0aGlzLl9ncm91cD1NLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5jb25uZWN0ZWRUbz1bXSx0aGlzLmlkPSJjZGstZHJvcC1saXN0LSIrR0ZlKyssdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGlj''@;'; put 'put ''YXRlPSgpPT4hMCx0aGlzLmRyb3BwZWQ9bmV3IEtyLHRoaXMuZW50ZXJlZD1uZXcgS3IsdGhpcy5leGl0ZWQ9bmV3IEtyLHRoaXMuc29ydGVkPW5ldyBLcix0aGlzLl91bnNvcnRlZEl0ZW1zPW5ldyBTZXQsdGhpcy5fZHJvcExpc3RSZWY9ZC5jcmVhdGVEcm9wTGlzdChhKSx0aGlzLl9kcm9w''@;'; put 'put ''TGlzdFJlZi5kYXRhPXRoaXMsRCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoRCksdGhpcy5fZHJvcExpc3RSZWYuZW50ZXJQcmVkaWNhdGU9KFoscmUpPT50aGlzLmVudGVyUHJlZGljYXRlKFouZGF0YSxyZS5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShaLHJlLGNlKT0+''@;'; put 'put ''dGhpcy5zb3J0UHJlZGljYXRlKFoscmUuZGF0YSxjZS5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2Ryb3BMaXN0UmVmKSxjLl9kcm9wTGlzdHMucHVzaCh0aGlzKSxNJiZNLl9pdGVtcy5h''@;'; put 'put ''ZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1yZW1vdmVJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGEpLHRoaXMuX2Ryb3BMaXN0UmVm''@;'; put 'put ''LmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQu''@;'; put 'put ''X2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9ncm91cCYmdGhp''@;'; put 'put ''cy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl91bnNvcnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKGEp''@;'; put 'put ''e3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKHgyKHRoaXMuX2Rpci52YWx1ZSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24gaUZlKGMpe3Jl''@;'; put 'put ''dHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5lY3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKHY9PnYuaWQ9PT1oKTpoKTtpZih0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0xPT09ZC5pbmRl''@;'; put 'put ''eE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50''@;'; put 'put ''KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVudHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1hLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rpc2Fi''@;'; put 'put ''bGVkLGEuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLGEuYXV0b1Njcm9sbFN0ZXA9ZDcodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSxhLmNvbm5lY3RlZFRvKGQuZmlsdGVyKGg9PmgmJmghPT10aGlzKS5tYXAoaD0+aC5fZHJvcExpc3RSZWYpKS53aXRoT3JpZW50''@;'; put 'put ''YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0''@;'; put 'put ''aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YSxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pLHRoaXMuX2No''@;'; put 'put ''YW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5zb3J0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnNvcnRlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0p''@;'; put 'put ''fSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFp''@;'; put 'put ''bmVyLmRhdGEsaXRlbTpkLml0ZW0uZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNo''@;'; put 'put ''ZWNrKCl9KSxfeChhLnJlY2VpdmluZ1N0YXJ0ZWQsYS5yZWNlaXZpbmdTdG9wcGVkKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnZ2luZ0Rpc2FibGVkOmgsc29ydGlu''@;'; put 'put ''Z0Rpc2FibGVkOmYsbGlzdEF1dG9TY3JvbGxEaXNhYmxlZDp2LGxpc3RPcmllbnRhdGlvbjpNfT1hO3RoaXMuZGlzYWJsZWQ9aD8/ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9Zj8/ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9dj8/ITEsdGhpcy5vcmllbnRhdGlvbj1NfHwidmVydGljYWwi''@;'; put 'put ''LGQmJih0aGlzLmxvY2tBeGlzPWQpfV9zeW5jSXRlbXNXaXRoUmVmKCl7dGhpcy5fZHJvcExpc3RSZWYud2l0aEl0ZW1zKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAoYT0+YS5fZHJhZ1JlZikpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KEppKSxHZShQTCksR2UoRXMpLEdlKGt5KSxHZShwbSw4KSxHZShBWSwxMiksR2UoeFksOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1s''@;'; put 'put ''aXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJihocigiaWQiLGguaWQpLFRyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsaC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRy''@;'; put 'put ''b3AtbGlzdC1yZWNlaXZpbmciLGguX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbTm4uTm9uZSwiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbTm4uTm9uZSwiY2RrRHJvcExpc3REYXRhIiwiZGF0YSJdLG9yaWVu''@;'; put 'put ''dGF0aW9uOltObi5Ob25lLCJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOltObi5Ob25lLCJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BM''@;'; put 'put ''aXN0RGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLHNvcnRpbmdEaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGluZ0Rpc2FibGVkIixzMV0sZW50ZXJQcmVkaWNhdGU6W05uLk5vbmUsImNka0Ryb3BMaXN0RW50''@;'; put 'put ''ZXJQcmVkaWNhdGUiLCJlbnRlclByZWRpY2F0ZSJdLHNvcnRQcmVkaWNhdGU6W05uLk5vbmUsImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEF1dG9T''@;'; put 'put ''Y3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCIsczFdLGF1dG9TY3JvbGxTdGVwOltObi5Ob25lLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXX0sb3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJvcExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9w''@;'; put 'put ''TGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRlOkFZLHVzZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6RVksdXNl''@;'; put 'put ''RXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpLF8xZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7''@;'; put 'put ''cHJvdmlkZXJzOltQTF0saW1wb3J0czpbSUZlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeW89WyIqIl0sWEZlPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJd''@;'; put 'put ''XSwiKiJdLEpGZT1bImNsci1hY2NvcmRpb24tdGl0bGUsIGNsci1zdGVwLXRpdGxlIiwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb24iLCIqIl07ZnVuY3Rpb24gUUZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5KSxGdCgiQHRv''@;'; put 'put ''Z2dsZS5kb25lIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShoKSl9KSxkZSgxLCJkaXYiLDEwKSxZcigyLDIpLGhlKCkoKX0yJmMmJk1lKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9u''@;'; put 'put ''IGVIZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMikoMiwiZGl2IiwzKSgzLCJidXR0b24iLDQsMCksZWwoNSwiYXN5bmMiKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlUGFuZWwoKSl9KSxkZSg2LCJzcGFuIiw1''@;'; put 'put ''KSxHdCg3LCJjZHMtaWNvbiIsNiksaGUoKSxZcig4KSxZcig5LDEpLGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSxndCgxMSxRRmUsMywxLCJkaXYiLDgpLGhlKCkoKSxsaSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1sLiRpbXBsaWNpdCxoPVJlKCk7ZmUoKSxNZSgibmdDbGFzcyIsaC5nZXRQYW5l''@;'; put 'put ''bFN0YXRlQ2xhc3NlcyhkKSksZmUoKSxocigicm9sZSIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD8iaGVhZGluZyI6bnVsbCkoImFyaWEtbGV2ZWwiLGguaGVhZGluZ0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/aC5oZWFkaW5nTGV2ZWw6bnVsbCks''@;'; put 'put ''ZmUoKSxUcigiY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIiwobnVsbD09KGE9RGMoNSwxNCxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMpKT9udWxsOmEubGVuZ3RoKXx8aC5hY2NvcmRpb25EZXNjcmlwdGlvbi5sZW5ndGgpLE1lKCJpZCIsaC5nZXRBY2NvcmRp''@;'; put 'put ''b25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJhcmlhLWNvbnRyb2xzIiwhZC5kaXNhYmxlZCYmZC5vcGVuP2guZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCk6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGQub3BlbiksZmUoNyksTWUo''@;'; put 'put ''IkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGguZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCkpLGhyKCJhcmlhLWhpZGRlbiIsIWQub3BlbikoImFyaWEtbGFiZWxsZWRieSIsaC5nZXRBY2NvcmRpb25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSxmZSgpLE1lKCJu''@;'; put 'put ''Z0lmIixkLm9wZW4pfX1jb25zdCBDSGU9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gU0hlKGMsbCl7MSZjJiYoc2koMCksR3QoMSwic3BhbiIsMyksbGkoKSksMiZjJiYoZmUoKSxNZSgiQHNwaW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIE1IZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O3NpKDApLGRlKDEsInNwYW4iLDQpLEZ0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLGhlKCksbGkoKX0yJmMmJihmZSgpLE1lKCJAdmFsaWRhdGVk''@;'; put 'put ''Iix2b2lkIDApKX1mdW5jdGlvbiB4SGUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw1KSxZcigxKSxoZSgpKSwyJmMmJk1lKCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiBFSGUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJidXR0b24iLDEpLEd0KDIsImNkcy1pY29uIiwyKSxo''@;'; put 'put ''ZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksaHIoImFyaWEtbGFiZWwiLGEuc2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdFRvZ2dsZSksZmUoKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBU''@;'; put 'put ''SGU9W1tbImNsci1zaWducG9zdC10aXRsZSJdXSwiKiJdLEFIZT1bImNsci1zaWducG9zdC10aXRsZSIsIioiXSxrSGU9W1tbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLERIZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJl''@;'; put 'put ''bCJdO2Z1bmN0aW9uIElIZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBSSGU9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtb''@;'; put 'put ''ImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLExIZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gT0hlKGMsbCl7MSZj''@;'; put 'put ''JiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFBIZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksWXIoMSwyKSxoZSgpKX1mdW5jdGlvbiBGSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBISGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBOSGUo''@;'; put 'put ''YyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gVkhlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBCSGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLGd0KDEsRkhlLDEsMCwiY2RzLWljb24iLDQpKDIs''@;'; put 'put ''SEhlLDEsMCwiY2RzLWljb24iLDUpKDMsTkhlLDEsMCwibmctY29udGVudCIsMCkoNCxWSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCBqSGU9WyJjbHJLZXlGb2N1cyIsIiJdLFlIZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXRQcmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgi''@;'; put 'put ''LCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEdIZT1bImxhYmVsIiwiW2NscklucHV0UHJlZml4XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gJEhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIEtIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHFIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcp''@;'; put 'put ''fWZ1bmN0aW9uIFhIZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIEpIZShjLGwpezEmYyYmWXIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBRSGUoYyxsKXsxJmMmJllyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1''@;'; put 'put ''bmN0aW9uIGxOZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgY05lPVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIHVOZShjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24iLDEpLFlyKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJhY3RpdmUiLGEuYWN0aXZlKSxNZSgi''@;'; put 'put ''aWQiLGEudGFiQ29udGVudElkKSgiaGlkZGVuIiwhYS5hY3RpdmUpLGhyKCJhcmlhLWxhYmVsbGVkYnkiLGEuYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWhpZGRlbiIsIWEuYWN0aXZlKX19Y29uc3QgZE5lPVsidGFiQ29udGVudFZpZXdDb250YWluZXIiXSxoTmU9W1tbImNsci10YWJzLWFjdGlv''@;'; put 'put ''bnMiXV1dLGZOZT1bImNsci10YWJzLWFjdGlvbnMiXTtmdW5jdGlvbiBwTmUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJsaSIsNSksRmwoMiw2KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYS50ZW1wbGF0ZVJl''@;'; put 'put ''ZkNvbnRhaW5lci50ZW1wbGF0ZSl9fWZ1bmN0aW9uIGdOZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEscE5lLDMsMSwibmctY29udGFpbmVyIiw0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO2ZlKCksTWUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJiFhLmlu''@;'; put 'put ''T3ZlcmZsb3cpfX1mdW5jdGlvbiBtTmUoYyxsKXsxJmMmJkZsKDAsNiksMiZjJiZNZSgibmdUZW1wbGF0ZU91dGxldCIsUmUoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfWZ1bmN0aW9uIHZOZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsbU5lLDEsMSwibmct''@;'; put 'put ''Y29udGFpbmVyIiwxMyksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gYk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRhYi1vdmVyZmxv''@;'; put 'put ''dy1jb250ZW50IiwxMiksRnQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLCQzKSgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpLFJlKCk7Y29uc3QgZj1oYSg0KTtyZXR1cm4gQ3QoUmUoKS5jbG9zZU9uT3V0''@;'; put 'put ''c2lkZUNsaWNrKGgsZikpfSwhMSwkMykoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLGd0KDEsdk5lLDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0Zvck9m''@;'; put 'put ''IixhLnRhYkxpbmtEaXJlY3RpdmVzKX19ZnVuY3Rpb24geU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5LDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuX21vdXNlZG93''@;'; put 'put ''bj0hMCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxHdCg1LCJjZHMtaWNvbiIsMTApLGhlKCko''@;'; put 'put ''KSxndCg2LGJOZSwyLDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLFRyKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksZmUoMiksVHIoImFjdGl2ZSIsYS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsYS50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLm9wZW4pLGhyKCJ0YWJpbmRleCIsYS5hY3RpdmVUYWJJbk92ZXJmbG93JiYhYS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgyKSxocigic3RhdHVzIixhLnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6''@;'; put 'put ''bnVsbCkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgpLE1lKCJuZ0lmIixhLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIF9OZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChSZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksR3QoMSwiY2RzLWljb24iLDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoIm9uLWNvbGxhcHNlIixhLmNvbGxhcHNlZCksaHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhw''@;'; put 'put ''YW5kZWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksZmUoKSxocigiZGlyZWN0aW9uIixhLmNvbGxhcHNlZD8icmlnaHQiOiJsZWZ0Iil9fWZ1bmN0aW9uIHdOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNvbGxhcHNlZD0hMSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2hyKCJhcmlhLWNvbnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX19Y29uc3QgTU5lPVsiY2xyVmVydGljYWxOYXZMaW5rIiwiIl0seE5lPVtbWyIiLCJjbHJWZXJ0aWNhbE5hdkljb24iLCIiXV0sIioiXSxFTmU9WyJbY2xyVmVydGljYWxOYXZJY29uXSIsIioiXTtmdW5jdGlvbiBUTmUoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJ0aCIsNCkoMSwic3BhbiIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksaHIoImFyaWEtbGFiZWwiLGEuZGF5KSxmZSgpLHdyKGEubmFycm93KX19ZnVuY3Rpb24gQU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwidGQi''@;'; put 'put ''LDcpKDEsImNsci1kYXkiLDgpLEZ0KCJzZWxlY3REYXkiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5zZXRTZWxlY3RlZERheShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoImNsckRheVZpZXciLGEpfX1mdW5jdGlvbiBrTmUoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJ0ciIsNSksZ3QoMSxBTmUsMiwxLCJ0ZCIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLGEpfX1mdW5jdGlvbiBETmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5jaGFuZ2VNb250aChoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChSZSgpLm9uSG92ZXIoaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoKTtUcigiaXMtc2VsZWN0ZWQiLGguaXNTZWxlY3RlZChkKSkoImlzLXN0YXJ0LXJhbmdlIixoLmdldElzUmFuZ2VTdGFydE1vbnRoKGQpKSgiaXMtZW5kLXJhbmdlIixoLmdldElzUmFuZ2VFbmRNb250aChkKSkoImluLXJhbmdlIixoLmlzSW5S''@;'; put 'put ''YW5nZShkKSkoImlzLXRvZGF5IixoLmNhbGVuZGFyWWVhcj09PWguY3VycmVudENhbGVuZGFyWWVhciYmZD09PWguY3VycmVudENhbGVuZGFyTW9udGgpLGhyKCJ0YWJpbmRleCIsaC5nZXRUYWJJbmRleChkKSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBJTmUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY2hhbmdlWWVhcihoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''Q3QoUmUoKS5vbkhvdmVyKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtUcigiaXMtc2VsZWN0ZWQiLGE9PT1kLnNlbGVjdGVkU3RhcnRZZWFyfHxhPT09ZC5zZWxlY3RlZEVuZFllYXIpKCJpcy1zdGFydC1yYW5nZSIsZC5nZXRJc1JhbmdlU3Rh''@;'; put 'put ''cnRZZWFyKGEpKSgiaXMtZW5kLXJhbmdlIixkLmdldElzUmFuZ2VFbmRZZWFyKGEpKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKGEpKSgiaXMtdG9kYXkiLGQuaXNDdXJyZW50Q2FsZW5kYXJZZWFyKGEpKSxocigidGFiaW5kZXgiLGQuZ2V0VGFiSW5kZXgoYSkpLGZlKCksRHIoIiAiLGEsIiAi''@;'; put 'put ''KX19ZnVuY3Rpb24gUk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYSIsNiksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pKCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSxMZSgyKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksaHIoImFyaWEtbGFiZWwiLG51bGw9PWE/bnVsbDphLmxhYmVsKSxmZSgp''@;'; put 'put ''LERyKCIgIixhLmxhYmVsLCIgIil9fWZ1bmN0aW9uIExOZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gT05lKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLXZlcnRpY2FsLW5hdiIsMiksZ3QoMixSTmUsMywyLCJuZy1jb250YWluZXIiLDMpLGhlKCksZGUoMywiZGl2Iiw0KSxndCg0''@;'; put 'put ''LExOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDIpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLmRhdGVSYW5nZU9wdGlvbnMpLGZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gUE5lKGMsbCl7MSZjJiZHdCgwLCJj''@;'; put 'put ''bHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBGTmUoYyxsKXsxJmMmJkd0KDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gSE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF5cGlja2VyIil9ZnVuY3Rpb24gTk5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIil9ZnVu''@;'; put 'put ''Y3Rpb24gVk5lKGMsbCl7aWYoMSZjJiZndCgwLFBOZSwxLDAsImNsci1tb250aHBpY2tlciIsNykoMSxGTmUsMSwwLCJjbHIteWVhcnBpY2tlciIsNykoMixITmUsMSwwLCJjbHItZGF5cGlja2VyIiw3KSgzLE5OZSwxLDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiLDcpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpO01lKCJuZ0lmIixhLmlzTW9udGhWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLmlzWWVhclZpZXcpLGZlKCksTWUoIm5nSWYiLGEuaXNEYXlWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLmhhc0FjdGlvbkJ1dHRvbnMpfX1jb25zdCBCTmU9WyJhY3Rpb25CdXR0b24iXSxqTmU9W1tbImxhYmVs''@;'; put 'put ''Il1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLFtbIiIsImNsckVuZERhdGUiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLHpOZT1bImxhYmVsIiwiW2Ns''@;'; put 'put ''ckRhdGVdIiwiW2NsclN0YXJ0RGF0ZV0iLCJbY2xyRW5kRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBVTmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gWk5lKGMsbCl7MSZjJiYo''@;'; put 'put ''c2koMCksWXIoMSwyKSxkZSgyLCJzcGFuIiw5KSxMZSgzLCItIiksaGUoKSxZcig0LDMpLGxpKCkpfWZ1bmN0aW9uIFdOZShjLGwpezEmYyYmKGRlKDAsImJ1dHRvbiIsMTAsMCksR3QoMiwiY2RzLWljb24iLDExKSxoZSgpKSwyJmMmJk1lKCJkaXNhYmxlZCIsUmUoKS5pc0lucHV0RGF0ZURp''@;'; put 'put ''c2FibGVkKX1mdW5jdGlvbiBZTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIEdOZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEzKX1mdW5jdGlvbiAkTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24g''@;'; put 'put ''S05lKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gcU5lKGMsbCl7MSZjJiZZcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFhOZShjLGwpezEmYyYmWXIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgdFZlPVtb''@;'; put 'put ''WyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sblZlPVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gclZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGlWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDExKX1mdW5jdGlvbiBhVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwx''@;'; put 'put ''Mil9ZnVuY3Rpb24gb1ZlKGMsbCl7MSZjJiZZcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gc1ZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGxWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9''@;'; put 'put ''Y29uc3QgY1ZlPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJlbCJdXV0sdVZlPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZFZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNvbnN0IGhWZT1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNv''@;'; put 'put ''bnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGZWZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtm''@;'; put 'put ''dW5jdGlvbiBwVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gZ1ZlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxZcigxLDIpLGhlKCkpfWZ1bmN0aW9uIG1WZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHZWZShjLGwpezEmYyYmR3QoMCwiY2RzLWlj''@;'; put 'put ''b24iLDcpfWZ1bmN0aW9uIGJWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiB5VmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIF9WZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSxtVmUs''@;'; put 'put ''MSwwLCJjZHMtaWNvbiIsNCkoMix2VmUsMSwwLCJjZHMtaWNvbiIsNSkoMyxiVmUsMSwwLCJuZy1jb250ZW50IiwwKSg0LHlWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''c2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IHdWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2VsZWN0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxb''@;'; put 'put ''WyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxDVmU9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gU1ZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIE1W''@;'; put 'put ''ZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIHhWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEVWZShjLGwpezEmYyYmWXIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIFRWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYi''@;'; put 'put ''LCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBBVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IGtWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4dGFyZWEiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1d''@;'; put 'put ''LFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLERWZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIElWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlv''@;'; put 'put ''biBSVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBMVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBPVmUoYyxsKXsxJmMmJllyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBQVmUoYyxsKXsxJmMmJllyKDAsMyxbIipu''@;'; put 'put ''Z0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gRlZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBIVmU9WyJhbmNob3IiXTtmdW5jdGlvbiBOVmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxHdCgz''@;'; put 'put ''LCJjZHMtaWNvbiIsNyksaGUoKSgpLFlyKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO01lKCJpZCIsYS5wb3BvdmVySWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksZmUoMyksaHIoInRpdGxlIixhLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0IFZWZT1bImlucHV0X2xvdyJdLEJWZT1bImlucHV0Il0salZlPVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gelZlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBVVmU9WyJyZXNpemVUcmFja2VyIl0sWlZlPVsiY29sdW1uSGFuZGxlIl0sV1ZlPVtb''@;'; put 'put ''WyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0sWVZlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBHVmUoYyxsKXsx''@;'; put 'put ''JmMmJkZsKDApfWZ1bmN0aW9uICRWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEwKSwyJmMmJmhyKCJkaXJlY3Rpb24iLFJlKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIEtWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnNvcnQoKSl9KSxndCgxLEdWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkoMiwkVmUsMSwxLCJjZHMtaWNvbiIsOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKCksTWUo''@;'; put 'put ''Im5nSWYiLGEuc29ydERpcmVjdGlvbil9fWZ1bmN0aW9uIHFWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxMSksZ2koImNsckZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYu''@;'; put 'put ''ZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtNZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGEuZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxwaSgiY2xyRmls''@;'; put 'put ''dGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBYVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxnaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWko''@;'; put 'put ''Zi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO01lKCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51''@;'; put 'put ''bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpLHBpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEpWZShjLGwpezEmYyYmWXIoMCwxKX1mdW5jdGlvbiBRVmUoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIGVCZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzKSxndCgxLFFWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtSZSgpO2NvbnN0IGE9aGEoNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uIHRCZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi1z''@;'; put 'put ''ZXBhcmF0b3IiKX1mdW5jdGlvbiBuQmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsNCl9ZnVuY3Rpb24gckJlKGMsbCl7MSZjJiZZcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdyaWQiXSl9Y29uc3QgaUJlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIGFCZShjLGwpezEmYyYmWXIoMCl9Y29uc3Qg''@;'; put 'put ''b0JlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gc0JlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBsQmU9WyJkZXRhaWxCdXR0b24iXSxjQmU9WyJzdGlja3lDZWxscyJdLHVCZT1bInNjcm9sbGFibGVDZWxscyJdLGRCZT1bImNhbGN1bGF0ZWRDZWxscyJdLGhCZT1bW1siY2xyLWRnLXJvdy1kZXRh''@;'; put 'put ''aWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0sZkJlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXSxwQmU9Yz0+KHsiaXMtcmVwbGFjZWQiOmN9KSx3MWU9Yz0+KHsiY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbC1kaXNhYmxlZCI6Y30pO2Z1bmN0aW9uIGdCZShjLGwpe31mdW5jdGlvbiBtQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLGdCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpLGQ9aGEo''@;'; put 'put ''Nik7TWUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIHZCZShjLGwpe31mdW5jdGlvbiBiQmUoYyxsKXsxJmMmJmd0KDAsdkJlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihSZSgy''@;'; put 'put ''KSxNZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNikpKX1mdW5jdGlvbiB5QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBDdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxndCgxLG1CZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixiQmUsMSwxLG51bGwsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIF9CZShjLGwpe31mdW5jdGlvbiB3QmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLF9CZSwwLDAsIm5nLXRlbXBs''@;'; put 'put ''YXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCksZD1oYSg2KTtNZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gQ0JlKGMsbCl7fWZ1bmN0aW9uIFNCZShjLGwpezEmYyYmZ3Qo''@;'; put 'put ''MCxDQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDYpKSl9ZnVuY3Rpb24gTUJlKGMsbCl7MSZjJiZZcigwKX1mdW5jdGlvbiB4QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgy''@;'; put 'put ''LCJpbnB1dCIsMjMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikudG9nZ2xlKGgpKX0pLGhlKCksZGUoMywibGFiZWwiLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5jbGVhclJhbmdlcyhoKSl9KSxk''@;'; put 'put ''ZSg0LCJzcGFuIiwyNSksTGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7TWUoIm5nQ2xhc3MiLHNwKDcsdzFlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLE1lKCJuZ01vZGVsIixhLnNlbGVjdGVkKSgiaWQiLGEuY2hlY2tib3hJZCkoImRpc2FibGVkIiwhYS5jbHJE''@;'; put 'put ''Z1NlbGVjdGFibGV8fG51bGwpLGhyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCksTWUoImZvciIsYS5jaGVja2JveElkKSxmZSgyKSx3cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9u''@;'; put 'put ''IEVCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjEpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDI2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zZWxlY3Rpb24uY3VycmVudFNp''@;'; put 'put ''bmdsZSxoKXx8KGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjUpLExlKDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJuZ0NsYXNzIixzcCgxMCx3MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSks''@;'; put 'put ''ZmUoMiksTWUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pLHBpKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSxNZSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PWEuaXRlbSkoImRp''@;'; put 'put ''c2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGhyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCksTWUoImZvciIsYS5yYWRpb0lkKSxmZSgyKSx3cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVj''@;'; put 'put ''dCl9fWZ1bmN0aW9uIFRCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24gQUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS50b2dnbGVF''@;'; put 'put ''eHBhbmQoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMzMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2hyKCJhcmlhLWV4cGFuZGVkIixhLmV4cGFuZC5leHBhbmRlZCkoImFyaWEtbGFiZWwiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxP''@;'; put 'put ''cGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixhLmV4cGFuZC5oYXNFeHBhbmRUZW1wbGF0ZSYmIWEuZXhwYW5kLmV4cGFuZGVkP251bGw6YS5leHBhbmRhYmxlSWQpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmQuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsYS5leHBhbmQu''@;'; put 'put ''ZXhwYW5kZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24ga0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXNwaW5uZXIiLDM0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSx3cihhLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gREJlKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxBQmUsMiw1LCJidXR0b24iLDMwKSgyLGtCZSwyLDEsImNsci1zcGlubmVyIiwzMSksbGkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLCFhLmV4cGFuZC5sb2Fk''@;'; put 'put ''aW5nKSxmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gSUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSksZ3QoMSxEQmUsMywyLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZC5leHBh''@;'; put 'put ''bmRhYmxlKX19ZnVuY3Rpb24gUkJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzNyw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxKSxmPVJlKDMpO3JldHVybiBDdChmLmRldGFpbFNlcnZpY2UudG9nZ2xlKGYuaXRlbSxoKSl9KSxH''@;'; put 'put ''dCgyLCJjZHMtaWNvbiIsMzgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO1RyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLE1lKCJkaXNhYmxlZCIsYS5kZXRhaWxEaXNhYmxlZCksaHIoImFyaWEtbGFiZWwiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09w''@;'; put 'put ''ZW4oYS5pdGVtKT9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSgiYXJpYS1jb250cm9scyIsYS5kZXRhaWxTZXJ2aWNlLmlkKSxmZSgyKSxocigiZGlyZWN0aW9u''@;'; put 'put ''IixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlOmEuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4pfX1mdW5jdGlvbiBMQmUoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSxndCgxLFJCZSwzLDgsImJ1dHRvbiIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5kZXRhaWxIaWRkZW4pfX1mdW5jdGlvbiBPQmUoYyxsKXt9ZnVuY3Rpb24gUEJlKGMsbCl7MSZjJiZndCgwLE9CZSwwLDAs''@;'; put 'put ''Im5nLXRlbXBsYXRlIiwxMSksMiZjJiYoUmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDQpKSl9ZnVuY3Rpb24gRkJlKGMsbCl7fWZ1bmN0aW9uIEhCZShjLGwpezEmYyYmZ3QoMCxGQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0''@;'; put 'put ''IixoYSg0KSkpfWZ1bmN0aW9uIE5CZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNlbGwiLDM5KX1mdW5jdGlvbiBWQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxzaSgyLG51bGwsMyksZ3QoNCx4QmUsNiw5LCJkaXYiLDE0KSg1LEVCZSw2LDEyLCJkaXYiLDE0''@;'; put 'put ''KSg2LFRCZSwyLDAsImRpdiIsMTUpKDcsSUJlLDIsMSwiZGl2IiwxNikoOCxMQmUsMiwxLCJkaXYiLDE3KSxsaSgpLGhlKCksZGUoOSwiZGl2IiwxOCkoMTAsImRpdiIsMTkpLFlyKDExLDEpLEZsKDEyLG51bGwsNCksaGUoKSxndCgxNCxQQmUsMSwxLG51bGwsOCkoMTUsSEJlLDEsMSxudWxs''@;'; put 'put ''LDgpLGhlKCksZ3QoMTYsTkJlLDEsMCwiY2xyLWRnLWNlbGwiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtUcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLE1lKCJpZCIsYS5pZCksZmUoNCksTWUoIm5nSWYiLGEuc2Vs''@;'; put 'put ''ZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLE1lKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCksTWUoIm5nSWYiLGEucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFibGUuaGFzRXhwYW5kYWJsZVJvdyksZmUoKSxNZSgibmdJZiIsYS5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKCksTWUoIm5nQ2xhc3MiLHNwKDEyLHBCZSxhLnJlcGxhY2VkJiZhLmV4cGFuZGVkKSksZmUoNSksTWUoIm5nSWYiLGEu''@;'; put 'put ''cmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuc2tlbGV0b25Mb2FkaW5nKX19Y29uc3QgQkJlPVsiZGF0YWdyaWQiXSxqQmU9WyJkYXRhZ3JpZFRhYmxlIl0sekJlPVsic2Ny''@;'; put 'put ''b2xsYWJsZUNvbHVtbnMiXSxVQmU9WyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyJdLFpCZT1bInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyJdLFdCZT1bImRpc3BsYXllZFJvd3MiXSxZQmU9WyJjYWxjdWxhdGlvblJvd3MiXSxHQmU9WyJzZWxlY3RBbGxDaGVja2JveCJdLCRCZT1bW1si''@;'; put 'put ''Y2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRhaWwiXV1dLEtCZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZv''@;'; put 'put ''b3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdO2Z1bmN0aW9uIHFCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzApKDEsImlucHV0IiwzMSw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4g''@;'; put 'put ''bWkoZi5hbGxTZWxlY3RlZCxoKXx8KGYuYWxsU2VsZWN0ZWQ9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwzMikoNCwic3BhbiIsMzMpLExlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJpZCIsYS5zZWxlY3RBbGxJZCkscGkoIm5nTW9kZWwiLGEuYWxs''@;'; put 'put ''U2VsZWN0ZWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpLGZlKDIpLE1lKCJmb3IiLGEuc2VsZWN0QWxsSWQpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIFhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImRpdiIsMjcpLEZ0KCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVBbGxTZWxlY3RlZChoKSl9KSxndCgxLHFCZSw2LDUsImRpdiIsMjgpLEd0KDIsImRpdiIsMjkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsIWEudmlydHVhbFNjcm9sbHx8YS5jdXN0b21TZWxlY3RBbGxFbmFibGVkKX19ZnVuY3Rpb24gSkJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNCkoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3''@;'; put 'put ''cihhLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsKX19ZnVuY3Rpb24gUUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNSkoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3cihhLmNsckRnU2luZ2xlQWN0''@;'; put 'put ''aW9uYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIGVqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzYpKDEsImRpdiIsMzMpLExlKDIpLGhlKCksR3QoMywiZGl2IiwyOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksd3IoYS5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsKX19''@;'; put 'put ''ZnVuY3Rpb24gdGplKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNsci1kZy1jZWxsIiksR3QoMiwiY2xyLXNwaW5uZXIiLDM4KSxkZSgzLCJzcGFuIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmxvYWRpbmcpfX1mdW5jdGlvbiBuamUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNwYW4iKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksd3IoYS5jb21tb25T''@;'; put 'put ''dHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIHJqZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gaWplKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzOSkoMSwiY2xyLXNwaW5uZXIiLDM4KSxMZSgyLCJMb2FkaW5nIiksaGUoKSgpKX1jb25zdCBvamU9''@;'; put 'put ''WyJhbGxTZWxlY3RlZCJdO2Z1bmN0aW9uIHNqZShjLGwpe31mdW5jdGlvbiBsamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13cmFwcGVyIikoMiwiaW5wdXQiLDEzKSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13''@;'; put 'put ''dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKGYsIWgpKX0pLGhlKCksZGUoMywibGFiZWwiKSxndCg0LHNqZSwwLDAsIm5nLXRlbXBsYXRlIiwxNCksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksTWUoImRp''@;'; put 'put ''c2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLGZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxlVGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYi''@;'; put 'put ''LDMpKDEsImRpdiIsNCkoMiwiZGl2Iiw1LDApLExlKDQpLGhlKCksZGUoNSwiaDIiKSxMZSg2KSxoZSgpLGRlKDcsImJ1dHRvbiIsNiksR3QoOCwiY2RzLWljb24iLDcpLGRlKDksInNwYW4iLDgpLExlKDEwKSxoZSgpKCkoKSxkZSgxMSwidWwiLDkpLGd0KDEyLGxqZSw1LDMsImxpIiwxMCks''@;'; put 'put ''aGUoKSxkZSgxMywiZGl2IiwxMSkoMTQsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiIsMTIpLEZ0KCJjbHJBbGxTZWxlY3RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5hbGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtN''@;'; put 'put ''ZSgiaWQiLGEucG9wb3ZlcklkKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb24pLGZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''c2hvd0NvbHVtbnMpLGZlKCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5o''@;'; put 'put ''aWRlYWJsZUNvbHVtblN0YXRlcykoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1jb25zdCBDMWU9WyJ0aXRsZSJdLGRqZT1bW1siY2xyLWRnLXBhZ2luYXRpb24iXV0sIioiXSxoamU9WyJjbHItZGctcGFnaW5hdGlvbiIsIioiXTtmdW5jdGlvbiBmamUoYyxsKXtpZigxJmMmJihzaSgw''@;'; put 'put ''KSxkZSgxLCJkaXYiLDEpKDIsImNsci1jaGVja2JveC13cmFwcGVyIiwyKSxHdCgzLCJpbnB1dCIsMyksZGUoNCwibGFiZWwiKSxMZSg1KSxoZSgpLGRlKDYsInNwYW4iLDQpLExlKDcpLGhlKCkoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDUpLHdyKGEuc2VsZWN0aW9uLmN1cnJl''@;'; put 'put ''bnQubGVuZ3RoKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFJvd3MpfX1mdW5jdGlvbiBwamUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIil9ZnVuY3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxwamUsMSwwLCJjbHItZGctY29s''@;'; put 'put ''dW1uLXRvZ2dsZSIsMCksZGUoMiwiZGl2Iiw1KSxZcigzLDEpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5oYXNIaWRlYWJsZUNvbHVtbnMpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDQpLExlKDEpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgibmdWYWx1ZSIsYSksZmUoKSx3cihhKX19Y29uc3QgdmplPVsiY3VycmVudFBhZ2VJbnB1dCJdLGJqZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLHlqZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gX2plKGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw2KSxZcigxLDEpLGhlKCkpfWZ1bmN0aW9uIHdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImlucHV0IiwxOCwxKSxGdCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pKCJi''@;'; put 'put ''bHVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykudmVyaWZ5Q3VycmVudFBhZ2UoaCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7TWUoInNpemUiLGEucGFnZS5sYXN0LnRvU3RyaW5nKCkubGVuZ3RoKSgidmFsdWUiLGEucGFnZS5jdXJyZW50KSxocigiYXJpYS1s''@;'; put 'put ''YWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY3VycmVudFBhZ2UpfX1mdW5jdGlvbiBDamUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksd3IoYS5wYWdlLmN1cnJlbnQpfX1mdW5jdGlvbiBTamUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDcpKDEsImJ1dHRvbiIsOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5wYWdlLmN1cnJlbnQ9MSl9KSxkZSgyLCJzcGFuIiw5KSxMZSgzKSxoZSgpLEd0KDQsImNkcy1pY29uIiwxMCksaGUoKSxkZSg1LCJidXR0b24i''@;'; put 'put ''LDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxkZSg2LCJzcGFuIiw5KSxMZSg3KSxoZSgpLEd0KDgsImNkcy1pY29uIiwxMiksaGUoKSxndCg5LHdqZSwyLDMsImlucHV0Iiwx''@;'; put 'put ''MykoMTAsQ2plLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMCxJYyksTGUoMTIsIiBceGEwL1x4YTAiKSxkZSgxMywic3BhbiIpLExlKDE0KSxoZSgpLGRlKDE1LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1''@;'; put 'put ''cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxkZSgxNiwic3BhbiIsOSksTGUoMTcpLGhlKCksR3QoMTgsImNkcy1pY29uIiwxNSksaGUoKSxkZSgxOSwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50''@;'; put 'put ''PWgucGFnZS5sYXN0KX0pLGRlKDIwLCJzcGFuIiw5KSxMZSgyMSksaGUoKSxHdCgyMiwiY2RzLWljb24iLDE3KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDExKSxkPVJlKDIpO2ZlKCksTWUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSx3cihk''@;'; put 'put ''LmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLE1lKCJuZ0lmIiwhZC5kaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCkoIm5nSWZFbHNlIixhKSxmZSg0KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMudG90YWxQYWdlcyksZmUoKSx3cihkLnBhZ2UubGFz''@;'; put 'put ''dCksZmUoKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksTWUoImRpc2FibGVkIixkLnBhZ2Uu''@;'; put 'put ''Y3VycmVudD49ZC5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpfX1mdW5jdGlvbiBNamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLF9qZSwyLDAsImRpdiIsMyks''@;'; put 'put ''ZGUoMiwiZGl2Iiw0KSxZcigzKSxoZSgpLGd0KDQsU2plLDIzLDE2LCJkaXYiLDUpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuX3BhZ2VTaXplQ29tcG9uZW50KSxmZSgzKSxNZSgibmdJZiIsYS5wYWdlLmxhc3Q+MSl9fWZ1bmN0aW9uIHhqZShjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTkpLExlKDIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRl''@;'; put 'put ''KDUsInNwYW4iLDkpLExlKDYpLGhlKCksR3QoNywiY2RzLWljb24iLDEyKSxoZSgpLGRlKDgsInNwYW4iKSxMZSg5KSxoZSgpLGRlKDEwLCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2Uu''@;'; put 'put ''Y3VycmVudCsxKX0pLGRlKDExLCJzcGFuIiw5KSxMZSgxMiksaGUoKSxHdCgxMywiY2RzLWljb24iLDE1KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxWZigiICIsYS5wYWdlLmZpcnN0SXRlbSsxLCItIixhLnBhZ2UubGFzdEl0ZW0rMSwiIC8gIixhLnBhZ2UudG90''@;'; put 'put ''YWxJdGVtcywiICIpLGZlKDIpLE1lKCJkaXNhYmxlZCIsYS5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMyksd3IoYS5wYWdlLmN1''@;'; put 'put ''cnJlbnQpLGZlKCksTWUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudD49YS5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpfX1jb25zdCBramU9W1tbImNsci1zdGFj''@;'; put 'put ''ay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxEamU9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl07ZnVuY3Rpb24gSWplKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZocigiZGlyZWN0aW9uIixSZSgpLmNhcmV0RGlyZWN0aW9u''@;'; put 'put ''KX1mdW5jdGlvbiBSamUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnN0YWNrVmlld0NoYW5nZWQpfX1mdW5jdGlvbiBMamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkpLFly''@;'; put 'put ''KDEsMiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7X2QoImhlaWdodCIsYS5leHBhbmRlZD8iYXV0byI6MCksaHIoImlkIixhLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnlJZCl9fWNvbnN0IE9qZT1bW1siY2xyLXN0YWNrLWhlYWRlciJdXSwi''@;'; put 'put ''KiJdLFBqZT1bImNsci1zdGFjay1oZWFkZXIiLCIqIl07ZnVuY3Rpb24gTmplKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBWamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE5qZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7''@;'; put 'put ''ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIEJqZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVmplLDIsMiwibmctY29udGFp''@;'; put 'put ''bmVyIiwxKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIiwobnVsbD09YS5wYXJlbnQ/bnVsbDphLnBhcmVudC5jaGlsZHJlbil8fGEuY2hpbGRyZW4pfX1jb25zdCBqamU9WyJjb250ZW50Q29udGFpbmVyIl0semplPVtbWyJjbHItdHJlZS1ub2RlIl1dLFtbIiIs''@;'; put 'put ''ImNscklmRXhwYW5kZWQiLCIiXV0sIioiXSxVamU9WyJjbHItdHJlZS1ub2RlIiwiW2NscklmRXhwYW5kZWRdIiwiKiJdO2Z1bmN0aW9uIFpqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMTApLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7TWUoImRpc2FibGVkIixhLmRpc2FibGVkKSxmZSgp''@;'; put 'put ''LGhyKCJkaXJlY3Rpb24iLGEuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZG93biI6InJpZ2h0Iil9fWZ1bmN0aW9uIFdqZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMTEpLEd0KDEsInNwYW4iLDEyKSxoZSgpKX1mdW5jdGlvbiBZamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJk''@;'; put 'put ''aXYiLDEzKSgxLCJpbnB1dCIsMTQpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24oaC5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUo''@;'; put 'put ''KS5mb2N1c1RyZWVOb2RlKCkpfSksaGUoKSxkZSgyLCJsYWJlbCIsMTUpLEZsKDMsMTYpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDcpO2ZlKCksTWUoImlkIixhLm5vZGVJZCsiLWNoZWNrIikoImRpc2FibGVkIixhLmRpc2FibGVkKSgiY2hlY2tlZCIsYS5fbW9kZWwuc2Vs''@;'; put 'put ''ZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksZmUoKSxNZSgiZm9yIixhLm5vZGVJZCsiLWNoZWNrIiksZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1''@;'; put 'put ''bmN0aW9uIEdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTcpLEZ0KCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxGbCgxLDE2KSxoZSgpfWlmKDImYyl7UmUoKTtjb25zdCBhPWhhKDcpO2ZlKCksTWUo''@;'; put 'put ''Im5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiAkamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSgxLCJzcGFuIiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksRHIoIiAiLGEuYXJpYVNlbGVjdGVkP2EuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVk''@;'; put 'put ''VHJlZU5vZGU6YS5jb21tb25TdHJpbmdzLmtleXMudW5zZWxlY3RlZFRyZWVOb2RlLCIiKX19ZnVuY3Rpb24gS2plKGMsbCl7aWYoMSZjJiYoWXIoMCwyKSxndCgxLCRqZSwzLDEsImRpdiIsMTgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmZlYXR1cmVzU2VydmljZS5z''@;'; put 'put ''ZWxlY3RhYmxlfHxhLmFyaWFTZWxlY3RlZCl9fWZ1bmN0aW9uIHFqZShjLGwpezEmYyYmR3QoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZNZSgiY2hpbGRyZW4iLFJlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290KX1mdW5jdGlvbiBYamUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2xvc2UoKSl9KSxHdCgxLCJjZHMtaWNvbiIsNSksaGUoKX0yJmMmJmhyKCJhcmlhLWxhYmVsIixSZSgyKS5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVu''@;'; put 'put ''Y3Rpb24gSmplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLFlyKDIpLGhlKCksZ3QoMyxYamUsMiwxLCJidXR0b24iLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJhbGVydC1zbSIsYS5pc1NtYWxsKSgiYWxlcnQtbGlnaHR3ZWlnaHQiLGEuaXNMaWdodHdl''@;'; put 'put ''aWdodCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxNZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxmZSgzKSxNZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIFFqZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDMpfWZ1bmN0aW9uIGV6ZShjLGwpe2lmKDEmYyYm''@;'; put 'put ''R3QoMCwiY2RzLWljb24iLDQpLDImYyl7Y29uc3QgYT1SZSgpO2hyKCJzaGFwZSIsYS5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkoImFyaWEtbGFiZWwiLGEuaWNvblNlcnZpY2UuYWxlcnRJY29uVGl0bGUpfX1jb25zdCB0emU9W1tbImNsci1hbGVydCJdXV0sbnplPVsiY2xyLWFsZXJ0''@;'; put 'put ''Il07ZnVuY3Rpb24gcnplKGMsbCl7MSZjJiZHdCgwLCJjbHItYWxlcnRzLXBhZ2VyIiwyKSwyJmMmJk1lKCJjbHJDdXJyZW50QWxlcnRJbmRleCIsUmUoKS5jdXJyZW50QWxlcnRJbmRleCl9Y29uc3QgaXplPVsiY2xySW50ZXJuYWxNb2RhbENvbnRlbnRUZW1wbGF0ZSJdLFMxZT1bImJvZHki''@;'; put 'put ''XSxhemU9W1tbIiIsOCwibGVhZGluZy1idXR0b24iXV0sW1siIiw4LCJtb2RhbC10aXRsZSJdXSxbWyIiLDgsIm1vZGFsLWJvZHkiXV0sW1siIiw4LCJtb2RhbC1mb290ZXIiXV1dLG96ZT1bIi5sZWFkaW5nLWJ1dHRvbiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFsLWZv''@;'; put 'put ''b3RlciJdO2Z1bmN0aW9uIHN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuY2xvc2UoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMTUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMp''@;'; put 'put ''O2hyKCJhcmlhLWxhYmVsIixhLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWZ1bmN0aW9uIGx6ZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOCkoMSwiZGl2Iiw5KSgyLCJkaXYiLDEwKSxZcigzKSxkZSg0LCJkaXYiLDExLDApLFlyKDYsMSks''@;'; put 'put ''aGUoKSxndCg3LHN6ZSwyLDEsImJ1dHRvbiIsMTIpLGhlKCksZGUoOCwiZGl2IiwxMywxKSxZcigxMCwyKSxoZSgpLFlyKDExLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJpZCIsYS5tb2RhbElkKSxmZSgzKSxNZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9u''@;'; put 'put ''IGN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxGdCgiQGZhZGVNb3ZlLmRvbmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmZhZGVEb25lKGgpKX0pLGRlKDIsImRpdiIsNiksTGUoMyksaGUoKSxndCg0LGx6ZSwxMiwyLCJk''@;'; put 'put ''aXYiLDcpLGRlKDUsImRpdiIsNiksTGUoNiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoIm1vZGFsLWZ1bGwtc2NyZWVuIiwiZnVsbC1zY3JlZW4iPT1hLnNpemUpLGZlKCksVHIoIm1vZGFsLXNtIiwic20iPT1hLnNpemUpKCJtb2RhbC1sZyIsImxnIj09YS5zaXplKSgibW9k''@;'; put 'put ''YWwteGwiLCJ4bCI9PWEuc2l6ZSksTWUoImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwhMCkoIkBmYWRlTW92ZSIsYS5mYWRlTW92ZSksaHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5fHxhLm1vZGFsSWQpLGZlKDIpLHdyKGEuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxmZSgpLE1lKCJuZ0lmIiwhYS5tb2RhbENvbnRlbnRUZW1wbGF0ZSkoIm5nSWZFbHNlIixhLm1vZGFsQ29udGVudFRlbXBsYXRlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpfX1mdW5jdGlvbiB1''@;'; put 'put ''emUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuYmFja2Ryb3BDbGljaygpKX0pLGhlKCl9MiZjJiZNZSgiQGZhZGUiLHZvaWQgMCl9bGV0IEhsPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaWNvbiJdXX0pLGN9KSgpLHJzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZHMtaWNvbiJdXX0pLGN9KSgpLEFzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2lt''@;'; put 'put ''cG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIER4e312YXIgejE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNVQ0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KHoxfHx7fSk7bGV0''@;'; put 'put ''IGowPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT16MS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRlfXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9ejEuTE9BRElORzph''@;'; put 'put ''fHwoYT16MS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9ejEuREVGQVVMVH19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHgsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGluZ1N0YXRlOltObi5Ob25lLCJjbHJMb2FkaW5nIiwibG9hZGluZ1N0YXRl''@;'; put 'put ''Il19fSksY30pKCksVTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kYWJsZT0wLHRoaXMuaGFzRXhwYW5kVGVtcGxhdGU9ITEsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IFdufWdldCBsb2FkaW5nKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoYSl7KGE9ISFhKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWEpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhw''@;'; put 'put ''YW5kZWQ9YSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3RoaXMubG9h''@;'; put 'put ''ZGluZz1hPT09ejEuTE9BRElOR319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQnplPTA7ZnVuY3Rpb24gTXUoKXtyZXR1cm4iY2xyLWlkLSIrQnplKyt9''@;'; put 'put ''bGV0IE0xZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9z''@;'; put 'put ''dFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKTtjb25zdCAkZj0iMC4ycyBlYXNlLWluLW91dCIsanplPVt5aCgic2tpcEluaXRpYWxSZW5kZXIiLFtpdSgiOmVudGVyIixbXSldKSx5aCgidG9nZ2xlIixbaXUoInZvaWQgPT4gKiIsW3VzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9''@;'; put 'put ''KSxNMCgkZix1cyh7aGVpZ2h0OiIqIn0pKV0pXSldLGtZPSh5aCgic2tpcEluaXRpYWxSZW5kZXIiLFtpdSgiOmVudGVyIixbXSldKSx5aCgidG9nZ2xlIixbaXUoInZvaWQgPT4gKiIsW3VzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxNMCgkZix1cyh7aGVpZ2h0OiIqIn0pKV0pLGl1''@;'; put 'put ''KCIqID0+IHZvaWQiLFt1cyh7ZGlzcGxheToiYmxvY2sifSksTTAoJGYsdXMoe2hlaWdodDowLGRpc3BsYXk6Im5vbmUifSkpXSldKSx7b3BlbjoiT3BlbiIsY2xvc2U6IkNsb3NlIixzaG93OiJTaG93IixoaWRlOiJIaWRlIixhcHBseToiQXBwbHkiLGNhbmNlbDoiQ2FuY2VsIixleHBhbmQ6''@;'; put 'put ''IkV4cGFuZCIsY29sbGFwc2U6IkNvbGxhcHNlIixtb3JlOiJNb3JlIixzZWxlY3Q6IlNlbGVjdCIsc2VsZWN0QWxsOiJTZWxlY3QgQWxsIixwcmV2aW91czoiUHJldmlvdXMiLG5leHQ6Ik5leHQiLGN1cnJlbnQ6Ikp1bXAgdG8gY3VycmVudCIsaW5mbzoiSW5mbyIsc3VjY2VzczoiU3VjY2Vz''@;'; put 'put ''cyIsd2FybmluZzoiV2FybmluZyIsZGFuZ2VyOiJFcnJvciIsbmV1dHJhbDoiTmV1dHJhbCIsdW5rbm93bjoiVW5rbm93biIscm93QWN0aW9uczoiQXZhaWxhYmxlIGFjdGlvbnMiLHBpY2tDb2x1bW5zOiJNYW5hZ2UgQ29sdW1ucyIsc2hvd0NvbHVtbnM6IlNob3cgQ29sdW1ucyIsc29ydENv''@;'; put 'put ''bHVtbjoiU29ydCBDb2x1bW4iLGZpcnN0UGFnZToiRmlyc3QgUGFnZSIsbGFzdFBhZ2U6Ikxhc3QgUGFnZSIsbmV4dFBhZ2U6Ik5leHQgUGFnZSIscHJldmlvdXNQYWdlOiJQcmV2aW91cyBQYWdlIixjdXJyZW50UGFnZToiQ3VycmVudCBQYWdlIix0b3RhbFBhZ2VzOiJUb3RhbCBQYWdlcyIs''@;'; put 'put ''ZmlsdGVySXRlbXM6IkZpbHRlciBpdGVtcyIsbWluVmFsdWU6Ik1pbiB2YWx1ZSIsbWF4VmFsdWU6Ik1heCB2YWx1ZSIsbW9kYWxDb250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBNb2RhbCBDb250ZW50Iixtb2RhbENvbnRlbnRFbmQ6IkVuZCBvZiBNb2RhbCBDb250ZW50IixzaWRlUGFuZWxQ''@;'; put 'put ''aW46IlBpbiBTaWRlIFBhbmVsIixzaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbjoiU2hvdyBvciBoaWRlIGNvbHVtbnMgbWVudSIsYWxsQ29sdW1uc1NlbGVjdGVkOiJBbGwgY29sdW1ucyBzZWxlY3RlZCIsc2lnbnBvc3RUb2dnbGU6IlNpZ25wb3N0IFRvZ2dsZSIsc2lnbnBvc3RDbG9zZToi''@;'; put 'put ''Q2xvc2UiLGxvYWRpbmc6IkxvYWRpbmciLGRldGFpbFBhbmVTdGFydDoiU3RhcnQgb2Ygcm93IGRldGFpbHMiLGRldGFpbFBhbmVFbmQ6IkVuZCBvZiByb3cgZGV0YWlscyIsc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJTaW5nbGUgc2VsZWN0aW9uIGhlYWRlciIsc2luZ2xlQWN0aW9uYWJs''@;'; put 'put ''ZUFyaWFMYWJlbDoiU2luZ2xlIGFjdGlvbmFibGUgaGVhZGVyIixkZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJUb2dnbGUgbW9yZSByb3cgY29udGVudCIsZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJMYWJlbDoie0NPTFVNTn0gZmls''@;'; put 'put ''dGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1uU2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9yIHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNv''@;'; put 'put ''bHVtbiIsZnJvbUxhYmVsOiJGcm9tIix0b0xhYmVsOiJUbyIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgYWxlcnQiLGFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlh''@;'; put 'put ''TGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9nTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJl''@;'; put 'put ''bDoiQ2hhbmdlIGRhdGUsIHtTRUxFQ1RFRF9EQVRFfSIsZGF0ZXBpY2tlclByZXZpb3VzTW9udGg6IlByZXZpb3VzIG1vbnRoIixkYXRlcGlja2VyQ3VycmVudE1vbnRoOiJDdXJyZW50IG1vbnRoIixkYXRlcGlja2VyTmV4dE1vbnRoOiJOZXh0IG1vbnRoIixkYXRlcGlja2VyUHJldmlvdXNE''@;'; put 'put ''ZWNhZGU6IlByZXZpb3VzIGRlY2FkZSIsZGF0ZXBpY2tlck5leHREZWNhZGU6Ik5leHQgZGVjYWRlIixkYXRlcGlja2VyQ3VycmVudERlY2FkZToiQ3VycmVudCBkZWNhZGUiLGRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQ6IlNlbGVjdCBtb250aCwgdGhlIGN1cnJlbnQgbW9udGggaXMge0NB''@;'; put 'put ''TEVOREFSX01PTlRIfSIsZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0OiJTZWxlY3QgeWVhciwgdGhlIGN1cnJlbnQgeWVhciBpcyB7Q0FMRU5EQVJfWUVBUn0iLGRhdGVwaWNrZXJTZWxlY3RlZExhYmVsOiJ7RlVMTF9EQVRFfSAtIFNlbGVjdGVkIixzdGFja1ZpZXdDaGFuZ2VkOiJWYWx1ZSBj''@;'; put 'put ''aGFuZ2VkLiIscmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW46Ik9wZW4gbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJl''@;'; put 'put ''c3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2VG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiIsdGltZWxpbmVTdGVwTm90U3RhcnRlZDoiTm90IHN0YXJ0ZWQiLHRpbWVsaW5lU3RlcEN1cnJlbnQ6IkN1''@;'; put 'put ''cnJlbnQiLHRpbWVsaW5lU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsdGltZWxpbmVTdGVwRXJyb3I6IkVycm9yIix0aW1lbGluZVN0ZXBQcm9jZXNzaW5nOiJJbiBwcm9ncmVzcyIsY29tYm9ib3hEZWxldGU6IkRlbGV0ZSBzZWxlY3RlZCBvcHRpb24iLGNvbWJvYm94U2VhcmNoaW5nOidTZWFy''@;'; put 'put ''Y2hpbmcgZm9yIG1hdGNoZXMgZm9yICJ7SU5QVVR9IicsY29tYm9ib3hTZWxlY3Rpb246IlNlbGVjdGlvbiIsY29tYm9ib3hTZWxlY3RlZDoiU2VsZWN0ZWQiLGNvbWJvYm94Tm9SZXN1bHRzOiJObyByZXN1bHRzIixjb21ib2JveE9wZW46IlNob3cgb3B0aW9ucyIsZGF0YWdyaWRFeHBhbmRh''@;'; put 'put ''YmxlQmVnaW5uaW5nT2Y6IkJlZ2lubmluZyBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlRW5kT2Y6IkVuZCBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlUm93Q29udGVudDoiRXhwYW5kYWJsZSByb3cgY29udGVudCIsZGF0YWdyaWRFeHBhbmRhYmxlUm93c0hlbHBlclRleHQ6IlNjcmVlbiByZWFkZXIg''@;'; put 'put ''dGFibGUgY29tbWFuZHMgbWF5IG5vdCB3b3JrIGZvciB2aWV3aW5nIGV4cGFuZGVkIGNvbnRlbnQsIHBsZWFzZSB1c2UgeW91ciBzY3JlZW4gcmVhZGVyJ3MgYnJvd3NlIG1vZGUgdG8gcmVhZCB0aGUgY29udGVudCBleHBvc2VkIGJ5IHRoaXMgYnV0dG9uIix3aXphcmRTdGVwOiJTdGVwIix3''@;'; put 'put ''aXphcmRTdGVwU3VjY2VzczoiQ29tcGxldGVkIix3aXphcmRTdGVwRXJyb3I6IkVycm9yIix3aXphcmRTdGVwbmF2QXJpYUxhYmVsOiJXaXphcmQgc3RlcHMiLHBhc3N3b3JkSGlkZToiSGlkZSBwYXNzd29yZCBmb3Ige0xBQkVMfSIscGFzc3dvcmRTaG93OiJTaG93IHBhc3N3b3JkIGZvciB7''@;'; put 'put ''TEFCRUx9IixzZWxlY3RlZFJvd3M6IlNlbGVjdGVkIHJvd3MiLHN0ZXBDb21wbGV0ZToiU3RlcCB7U1RFUH0gY29tcGxldGUiLHN0ZXBFcnJvcjoiRXJyb3IgaW4gc3RlcCB7U1RFUH0iLGJyb3dzZToiQnJvd3NlIixmaWxlQ291bnQ6IntDT1VOVH0gZmlsZXMiLGNsZWFyRmlsZToiQ2xlYXIg''@;'; put 'put ''e0ZJTEV9IixjbGVhckZpbGVzOiJDbGVhciB7Q09VTlR9IGZpbGVzIixzZWxlY3RlZFRyZWVOb2RlOiJzZWxlY3RlZCIsdW5zZWxlY3RlZFRyZWVOb2RlOiJ1bnNlbGVjdGVkIixicmVhZGNydW1ic0xhYmVsOiJicmVhZGNydW1icyIsZXhwYW5kQnJlYWRjcnVtYnNMYWJlbDoiRXhwYW5kIGJy''@;'; put 'put ''ZWFkY3J1bWJzIn0pO2xldCBpcz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RyaW5ncz1rWX1nZXQga2V5cygpe3JldHVybiB0aGlzLl9zdHJpbmdzfWxvY2FsaXplKGEpe3RoaXMuX3N0cmluZ3M9ey4uLnRoaXMuX3N0cmluZ3MsLi4uYX19cGFyc2UoYSxkPXt9KXtjb25z''@;'; put 'put ''dCBoPU9iamVjdC5rZXlzKGQpO2xldCBmPWE7cmV0dXJuIGgubGVuZ3RoJiZoLmZvckVhY2godj0+e2Y9Zi5yZXBsYWNlKGB7JHt2fX1gLGRbdl0pfSksZn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFyIEtmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShLZnx8e30pLEl4PWZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''LkRlZmF1bHQ9ImRlZmF1bHQiLGMuTXVsdGk9Im11bHRpIixjfShJeHx8e30pO2xldCBVemU9MDtjbGFzcyBaemV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy5hY2NvcmRpb25JZD1hLHRoaXMuc3RhdHVzPUtmLkluYWN0aXZlLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRpc2FibGVk''@;'; put 'put ''PSExLHRoaXMub3Blbj0hMSx0aGlzLnRlbXBsYXRlSWQ9YCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWB9fWNsYXNzIHgxZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9SXguRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PVV6ZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFu''@;'; put 'put ''ZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1v''@;'; put 'put ''dmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFp6ZShsLHRoaXMuYWNjb3JkaW9uQ291bnQpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYm''@;'; put 'put ''dGhpcy5zdHJhdGVneT09PUl4LkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2FibGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9w''@;'; put 'put ''YW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQoZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgUng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3RoaXMuYWNjb3JkaW9uPW5ldyB4MWUsdGhpcy5fcGFuZWxzQ2hhbmdlcz1uZXcgZWkodGhpcy5hY2NvcmRpb24ucGFuZWxzKX1nZXRQYW5lbENoYW5nZXMoYSl7cmV0dXJuIHRoaXMuX3BhbmVsc0NoYW5nZXMucGlwZShMcihkPT5kLmZpbmQoaD0+aC5pZD09PWEpKSl9c2V0U3RyYXRlZ3ko''@;'; put 'put ''YSl7dGhpcy5hY2NvcmRpb24uc2V0U3RyYXRlZ3koYSl9YWRkUGFuZWwoYSxkPSExKXt0aGlzLmFjY29yZGlvbi5hZGRQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX10b2dnbGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLnRvZ2dsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBk''@;'; put 'put ''YXRlZFBhbmVscygpfWRpc2FibGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLmRpc2FibGVQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX11cGRhdGVQYW5lbE9yZGVyKGEpe3RoaXMuYWNjb3JkaW9uLnVwZGF0ZVBhbmVsT3JkZXIoYSksdGhpcy5lbWl0VXBkYXRlZFBhbmVs''@;'; put 'put ''cygpfWVtaXRVcGRhdGVkUGFuZWxzKCl7dGhpcy5fcGFuZWxzQ2hhbmdlcy5uZXh0KHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pLGN9KSgpLEZMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuYWNjb3JkaW9uU2VydmljZT1oLHRoaXMuaWZFeHBhbmRTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmRpc2FibGVkPSExLHRoaXMu''@;'; put 'put ''cGFuZWxPcGVuPSExLHRoaXMuaGVhZGluZ0VuYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW5DaGFuZ2U9bmV3IEtyLHRoaXMuX2lkPU11KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfWdldCBwYW5lbE51bWJlcigpe3JldHVybiB0aGlzLl9wYW5lbEluZGV4''@;'; put 'put ''KzF9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsP3RoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw6dGhpcy5wYXJlbnQ/NDozfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQp''@;'; put 'put ''LnBpcGUoR3UoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9u''@;'; put 'put ''U2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2ds''@;'; put 'put ''ZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2FibGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlz''@;'; put 'put ''YWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRl''@;'; put 'put ''Q2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8iY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25I''@;'; put 'put ''ZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9c3RlcENvbXBsZXRlVGV4dChhKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBDb21wbGV0ZSx7U1RFUDphLnRvU3RyaW5nKCl9KX1zdGVwRXJyb3JU''@;'; put 'put ''ZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcEVycm9yLHtTVEVQOmEudG9TdHJpbmcoKX0pfWVtaXRQYW5lbENoYW5nZShhKXthLmluZGV4IT09dGhpcy5fcGFuZWxJbmRleCYmKHRoaXMuX3BhbmVsSW5kZXg9YS5pbmRl''@;'; put 'put ''eCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpLGEub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShpcyksR2UoUngpLEdlKFUxKSxHZShFcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo''@;'; put 'put ''KXtpZigxJmEmJmFvKGgsTTFlLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuYWNjb3JkaW9uRGVzY3JpcHRpb249Zil9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tcGFuZWwiLCEwKSgiY2xyLWFjY29yZGlvbi1wYW5l''@;'; put 'put ''bC1kaXNhYmxlZCIsZC5kaXNhYmxlZCl9LGlucHV0czp7ZGlzYWJsZWQ6W05uLk5vbmUsImNsckFjY29yZGlvblBhbmVsRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHBhbmVsT3BlbjpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxPcGVuIiwicGFuZWxPcGVuIl0saGVhZGluZ0VuYWJsZWQ6W05u''@;'; put 'put ''Lk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0VuYWJsZWQiLCJoZWFkaW5nRW5hYmxlZCJdLGV4cGxpY2l0SGVhZGluZ0xldmVsOltObi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbEhlYWRpbmdMZXZlbCIsImV4cGxpY2l0SGVhZGluZ0xldmVsIl19LG91dHB1dHM6e3BhbmVsT3BlbkNo''@;'; put 'put ''YW5nZToiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtVMV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6SkZlLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJoZWFkZXJCdXR0b24iLCIiXSxbNCwibmdJZiJdLFszLCJuZ0NsYXNzIl0sWzEsImNsci1hY2NvcmRp''@;'; put 'put ''b24taGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24iLDMsImNsaWNrIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItYWNjb3JkaW9uLXN0YXR1cyJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0IiwxLCJjbHItYWNjb3Jk''@;'; put 'put ''aW9uLWFuZ2xlIl0sWyJyb2xlIiwicmVnaW9uIiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIiwzLCJpZCJdLFsiY2xhc3MiLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Il0sWzEsImNsci1hY2NvcmRpb24taW5uZXIt''@;'; put 'put ''Y29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFhGZSksZ3QoMCxlSGUsMTIsMTYsIm5nLWNvbnRhaW5lciIsMSksZWwoMSwiYXN5bmMiKSksMiZhJiZNZSgibmdJZiIsRGMoMSwxLGQucGFuZWwpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxFTV0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpqemV9LGNoYW5nZURldGVjdGlvbjowfSksY30pKCksRTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3Ro''@;'; put 'put ''aXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVz''@;'; put 'put ''aCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9J''@;'; put 'put ''eC5NdWx0aTpJeC5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZSh4Mih0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRlUGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5p''@;'; put 'put ''ZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoUngpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLEZMLDQp''@;'; put 'put ''LDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uTXVsdGlQYW5lbCIsIm11bHRp''@;'; put 'put ''UGFuZWwiXX0sZmVhdHVyZXM6W2RhKFtSeF0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksVDFlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xz''@;'; put 'put ''OjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEExZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLXRpdGxlIiwhMCl9LG5nQ29udGVudFNlbGVjdG9y''@;'; put 'put ''czp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxSeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEs''@;'; put 'put ''dGhpcy5fY2hvY29sYXRlPW5ldyBXbn1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVja3x8dGhpcy5fY2hvY29sYXRlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxMeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zdWJzY3JpcHRpb249ZC5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10''@;'; put 'put ''aGlzLmZsYXZvciYmKGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLGEuZGV0ZWN0Q2hhbmdlcygpLGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKFJ5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxEWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUnl7fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVlzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxrMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1hY2NvcmRpb24tcGFuZWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgY2xyLWFjY29yZGlvbiIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhw''@;'; put 'put ''YW5kLmV4cGFuZGVkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoRFksOCksR2UoVTEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxmZWF0dXJlczpbd2FdfSksY30p''@;'; put 'put ''KCksRDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhFeSx2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzXX0p''@;'; put 'put ''LGN9KSgpLEt6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxEMWUsRDFlXX0pLGN9KSgpO3ZhciBnYT1mdW5jdGlvbihj''@;'; put 'put ''KXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIiLGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0i''@;'; put 'put ''RXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjLlBhZ2VEb3duPSJQYWdlRG93biIsYy5QYWdlVXA9IlBhZ2VVcCIsY30oZ2F8fHt9KSxoNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd1VwPSJVcCIsYy5BcnJvd0Rvd249''@;'; put 'put ''IkRvd24iLGMuQXJyb3dSaWdodD0iUmlnaHQiLGMuQXJyb3dMZWZ0PSJMZWZ0IixjLlNwYWNlPSJTcGFjZWJhciIsYy5Fc2NhcGU9IkVzYyIsY30oaDd8fHt9KTtmdW5jdGlvbiBJMihjKXtyZXR1cm4gYz09PWdhLkFycm93VXB8fGM9PT1oNy5BcnJvd1VwP2dhLkFycm93VXA6Yz09PWdhLkFy''@;'; put 'put ''cm93RG93bnx8Yz09PWg3LkFycm93RG93bj9nYS5BcnJvd0Rvd246Yz09PWdhLkFycm93UmlnaHR8fGM9PT1oNy5BcnJvd1JpZ2h0P2dhLkFycm93UmlnaHQ6Yz09PWdhLkFycm93TGVmdHx8Yz09PWg3LkFycm93TGVmdD9nYS5BcnJvd0xlZnQ6Yz09PWdhLlNwYWNlfHxjPT09aDcuU3BhY2U/''@;'; put 'put ''Z2EuU3BhY2U6Yz09PWdhLkVzY2FwZXx8Yz09PWg3LkVzY2FwZT9nYS5Fc2NhcGU6Y31mdW5jdGlvbiBSWShjKXtjb25zdCBsPUkyKGMua2V5KTsobD09PWdhLkFycm93VXB8fGw9PT1nYS5BcnJvd0Rvd258fGw9PT1nYS5BcnJvd0xlZnR8fGw9PT1nYS5BcnJvd1JpZ2h0KSYmYy5wcmV2ZW50''@;'; put 'put ''RGVmYXVsdCgpfWxldCBzYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlPW5ldyBXbix0aGlzLl9vcGVuRXZlbnRDaGFuZ2U9bmV3IFduLHRoaXMuX3BvcG92ZXJBbGlnbmVkPW5ldyBXbix0aGlzLl9wb3BvdmVyVmlzaWJsZT1uZXcg''@;'; put 'put ''V259Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgcG9wb3ZlclZpc2libGUoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlclZpc2libGUuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0''@;'; put 'put ''IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9''@;'; put 'put ''Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUoKX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxl''@;'; put 'put ''KCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1JZKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlclZpc2libGVFbWl0KGEpe3RoaXMuX3BvcG92ZXJWaXNpYmxlLm5leHQoYSl9cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGlnbmVkLm5leHQo''@;'; put 'put ''YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE94PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLnNt''@;'; put 'put ''YXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/KHRoaXMuYWRk''@;'; put 'put ''RXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9bmdPbkRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj14ZCh0aGlzLmRvY3VtZW50LCJz''@;'; put 'put ''Y3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoJGwodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSExLHRo''@;'; put 'put ''aXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0''@;'; put 'put ''c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVu''@;'; put 'put ''PSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxkZWxldGUgdGhp''@;'; put 'put ''cy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNo''@;'; put 'put ''b3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9''@;'; put 'put ''c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50LmxvY2FsTmFt''@;'; put 'put ''ZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVy''@;'; put 'put ''KCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihFbykseHIoc2MpLHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUHg9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE94KSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQW5jaG9y''@;'; put 'put ''IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEwxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1kLHRoaXMu''@;'; put 'put ''c21hcnRPcGVuU2VydmljZT1oLHRoaXMuY2xvc2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2UucGlwZSgkbChmPT4hZikpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2xvc2VDaGFuZ2UubmV4dCgpfSkpfWhhbmRs''@;'; put 'put ''ZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSksdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0QW5jaG9yRm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jbG9zZUJ1dHRvblJlZj10aGlzLmVsZW1lbnRSZWYs''@;'; put 'put ''dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0Q2xvc2VGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKE94KSxH''@;'; put 'put ''ZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9''@;'; put 'put ''KSwyJmEmJlRyKCJjbHItc21hcnQtY2xvc2UtYnV0dG9uIiwhMCl9LG91dHB1dHM6e2Nsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT25DbG9zZUNoYW5nZSJ9fSksY30pKCk7dmFyIGgxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVkVSVElDQUw9MF09IlZFUlRJQ0FMIixjW2MuSE9SSVpPTlRBTD0x''@;'; put 'put ''XT0iSE9SSVpPTlRBTCIsY30oaDF8fHt9KSxPcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNUQVJUPTBdPSJTVEFSVCIsY1tjLkNFTlRFUj0uNV09IkNFTlRFUiIsY1tjLkVORD0xXT0iRU5EIixjfShPc3x8e30pLEZ4PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQk9UVE9NPTBdPSJCT1RUT00i''@;'; put 'put ''LGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjW2MuVE9QPTNdPSJUT1AiLGN9KEZ4fHx7fSk7Y29uc3QgbW09Yz0+KHsuLi5jLHNpZGU6LTEqYy5zaWRlfSksYWc9KGMsbCk9Pntjb25zdCBhPWMuY29udGVudCsobD8uNTotLjUpO3JldHVybiBhPDB8fGE+MT9jOnsu''@;'; put 'put ''Li5jLGNvbnRlbnQ6YX19O2Z1bmN0aW9uIE95KGMsbCxhKXtyZXR1cm4gZD0+bChjKGQpLGEpfWZ1bmN0aW9uIF9oKGMsbCxhKXtsZXQgZD1sLmxlZnQsaD1sLnRvcDtzd2l0Y2goYy5heGlzK2Muc2lkZSl7Y2FzZS0xOmQrPU8xZShjLGwsYSksaC09YS5oZWlnaHQ7YnJlYWs7Y2FzZSAxOmQr''@;'; put 'put ''PU8xZShjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9UDFlKGMsbCxhKTticmVhaztjYXNlIDI6ZCs9bC53aWR0aCxoKz1QMWUoYyxsLGEpfXJldHVybnt4T2Zmc2V0OmQseU9mZnNldDpofX1mdW5jdGlvbiBPMWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMu''@;'; put 'put ''YW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIE9zLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2UgT3Mu''@;'; put 'put ''RU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gUDFlKGMsbCxhKXtsZXQgZD0wO3N3aXRjaChjLmFuY2hvcil7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkKz1sLmhlaWdodC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQrPWwuaGVpZ2h0fXN3aXRjaChjLmNvbnRlbnQp''@;'; put 'put ''e2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS5oZWlnaHQvMjticmVhaztjYXNlIE9zLkVORDpkLT1hLmhlaWdodH1yZXR1cm4gZH1sZXQgRjFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMucGxhdGZvcm1JZD1k''@;'; put 'put ''LHRoaXMuX3Nob3VsZFJlYWxpZ249bmV3IFduLHRoaXMuc2hvdWxkUmVhbGlnbj10aGlzLl9zaG91bGRSZWFsaWduLmFzT2JzZXJ2YWJsZSgpfXJlYWxpZ24oKXt0aGlzLl9zaG91bGRSZWFsaWduLm5leHQoKX1hbGlnbkNvbnRlbnQoYSl7aWYoIXRsKHRoaXMucGxhdGZvcm1JZCkpcmV0dXJu''@;'; put 'put ''e3hPZmZzZXQ6MCx5T2Zmc2V0OjB9O3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcz10aGlzLmV2ZW50U2VydmljZS5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzPWEuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCksdGhpcy5jb250ZW50T2Zmc2V0cz1faCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTtjb25zdCBkPWZ1bmN0aW9uIFh6ZShjLGwpe2NvbnN0IGE9W10sZF9ib3R0b209Yy55T2Zmc2V0K2wuaGVpZ2h0LGRfbGVm''@;'; put 'put ''dD1jLnhPZmZzZXQsZF9yaWdodD1jLnhPZmZzZXQrbC53aWR0aDtyZXR1cm4gYy55T2Zmc2V0Pj0wfHxhLnB1c2goRnguVE9QKSxkX2xlZnQ+PTB8fGEucHVzaChGeC5MRUZUKSxkX2JvdHRvbTw9KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhl''@;'; put 'put ''aWdodCl8fGEucHVzaChGeC5CT1RUT00pLGRfcmlnaHQ8PSh3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXx8YS5wdXNoKEZ4LlJJR0hUKSxhfSh0aGlzLmNvbnRlbnRPZmZzZXRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpLGg9ZC5y''@;'; put 'put ''ZWR1Y2UoKGYsdik9PmYrdiwwKTtyZXR1cm4gMT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihoKToxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhPUklaT05UQUw/dGhp''@;'; put 'put ''cy5oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhP''@;'; put 'put ''UklaT05UQUwmJnRoaXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wPDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrPU1hdGguYWJzKHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSksdGhpcy5jb250''@;'; put 'put ''ZW50T2Zmc2V0cy55T2Zmc2V0K3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcy55PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQ9MC10aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCksdGhpcy5jb250ZW50T2Zmc2V0c31oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oYSl7''@;'; put 'put ''c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz1faChtbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAxOnRoaXMuY29udGVudE9mZnNldHM9X2godGhpcy5wb3NpdGlv''@;'; put 'put ''bix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksdGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ9MTApO2JyZWFrO2Nhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9z''@;'; put 'put ''aXRpb24sITApLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19aGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhhKXtzd2l0Y2goYSl7Y2FzZSA1Ontjb25zdCBkPU95KG1tLGFnLCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhp''@;'; put 'put ''cy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgNDp7Y29uc3QgZD1PeShtbSxhZywhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0''@;'; put 'put ''aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVu''@;'; put 'put ''dENvb3Jkcyk7YnJlYWt9Y2FzZSAxOntjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfX19aGFuZGxlSG9yaXpvbnRhbEF4aXNP''@;'; put 'put ''bmVWaW9sYXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz1faChtbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAwOnRoaXMuY29udGVudE9mZnNldHM9''@;'; put 'put ''X2goYWcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJl''@;'; put 'put ''bnRDb250ZW50Q29vcmRzKX19aGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6Y2FzZSA0Ontjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRz''@;'; put 'put ''LHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjpjYXNlIDE6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy''@;'; put 'put ''ZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoT3gpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSHg9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmRvY3VtZW50PWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2U9dix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1NLHRoaXMuc21hcnRPcGVuU2VydmljZT1E''@;'; put 'put ''LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1udWxsLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEtyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2Vy''@;'; put 'put ''dmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMu''@;'; put 'put ''c21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcpe2NvbnN0IGE9dGhpcy52aWV3LnJvb3ROb2Rlc1swXS5vZmZzZXRIZWlnaHQ7KHRoaXMuc2hvdWxkUmVhbGln''@;'; put 'put ''bnx8bnVsbCE9PXRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0JiZ0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodCE9PWEpJiYodGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9YSx0aGlzLmNoZWNrQ29sbGVjdG9yLmVtaXQoKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmFkZENvbnRlbnQoKTp0aGlzLnJlbW92ZUNvbnRlbnQoKX0pLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2Uuc2hvdWxkUmVhbGlnbi5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNob3VsZFJl''@;'; put 'put ''YWxpZ249ITB9KSx0aGlzLmNoZWNrQ29sbGVjdG9yLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuYWxpZ25Db250ZW50KCksdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMudmlldyYmKHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwib3BhY2l0''@;'; put 'put ''eSIsIjEiKSx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCEwKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhp''@;'; put 'put ''cy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMu''@;'; put 'put ''cmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNs''@;'; put 'put ''aWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7''@;'; put 'put ''dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMu''@;'; put 'put ''ZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3LHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITEpKX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv''@;'; put 'put ''blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl''@;'; put 'put ''ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHZzKSxHZShEbyksR2UoU2wpLEdlKEVvKSxH''@;'; put 'put ''ZShGMWUpLEdlKE94KSxHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ29udGVudCIsIiJdXSxpbnB1dHM6e29wZW46W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbTm4uTm9uZSwiY2xyUG9wb3Zl''@;'; put 'put ''ckNvbnRlbnRBdCIsImNvbnRlbnRBdCJdLG91dHNpZGVDbGlja0Nsb3NlOltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJvdXRzaWRlQ2xpY2tDbG9zZSJdLHNjcm9sbFRvQ2xvc2U6W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9z''@;'; put 'put ''ZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxOeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBLcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5vcGVu''@;'; put 'put ''Q2hhbmdlLnN1YnNjcmliZShkPT57dGhpcy5vcGVuQ2xvc2VDaGFuZ2UubmV4dChkKX0pKX1oYW5kbGVDbGljayhhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmli''@;'; put 'put ''ZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1vcGVuLWNsb3NlIiwhMCl9LG91dHB1dHM6e29wZW5DbG9zZUNoYW5nZToiY2xyUG9wb3Zlck9wZW5DbG9zZUNoYW5nZSJ9fSksY30pKCksVng9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7dmFyIHdoPWZ1bmN0aW9uKGMpe3JldHVybiBjLlVQPSJ1cCIsYy5ET1dOPSJkb3duIixjLkxF''@;'; put 'put ''RlQ9ImxlZnQiLGMuUklHSFQ9InJpZ2h0IixjfSh3aHx8e30pO2xldCB3cD1jbGFzc3tjb25zdHJ1Y3RvcihsKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXJlc2V0KGwpe3RoaXMuX2N1cnJlbnQ9bH1s''@;'; put 'put ''aXN0ZW5Ub0Fycm93S2V5cyhsKXt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd3VwIiwoKT0+IXRoaXMubW92ZSh3aC5VUCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93''@;'; put 'put ''bi5hcnJvd2Rvd24iLCgpPT4hdGhpcy5tb3ZlKHdoLkRPV04pKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dsZWZ0IiwoKT0+IXRoaXMubW92ZSh3aC5MRUZUKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJl''@;'; put 'put ''bmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93cmlnaHQiLCgpPT4hdGhpcy5tb3ZlKHdoLlJJR0hUKSkpfXJlZ2lzdGVyQ29udGFpbmVyKGwsYT0iMCIpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGwsInRhYmluZGV4IixhKSx0aGlzLmxpc3RlblRvQXJyb3dLZXlzKGwpLHRoaXMu''@;'; put 'put ''X3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLnNwYWNlIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5lbnRlciIsKCk9PiF0aGlzLmFj''@;'; put 'put ''dGl2YXRlQ3VycmVudCgpKSl9bW92ZVRvKGwpe3ZvaWQgMCE9PWwmJih0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudC5ibHVyKCksbC5mb2N1cygpLHRoaXMuX2N1cnJlbnQ9bCl9bW92ZShsKXtsZXQgYT0hMTtpZih0aGlzLmN1cnJlbnQpe2NvbnN0IGQ9dGhpcy5jdXJyZW50W2xdO2QmJihC''@;'; put 'put ''TShkKT9kOmZvKGQpKS5zdWJzY3JpYmUoZj0+e2YmJih0aGlzLm1vdmVUbyhmKSxhPSEwKX0pfXJldHVybiBhfWFjdGl2YXRlQ3VycmVudCgpe3JldHVybiEoIXRoaXMuY3VycmVudHx8IXRoaXMuY3VycmVudC5hY3RpdmF0ZXx8KHRoaXMuY3VycmVudC5hY3RpdmF0ZSgpLDApKX1kZXRhY2hM''@;'; put 'put ''aXN0ZW5lcnMoKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2gobD0+bCgpKX19O3dwLlx1MDI3NWZhYz1mdW5jdGlvbihsKXtyZXR1cm4gbmV3KGx8fHdwKSh4cihFbykpfSx3cC5cdTAyNzVwcm92PWFuKHt0b2tlbjp3cCxmYWN0b3J5OndwLlx1MDI3NWZhY30pO2NvbnN0IFYxZT17cHJv''@;'; put 'put ''dmlkZTp3cCx1c2VGYWN0b3J5OmZ1bmN0aW9uIEp6ZShjLGwpe3JldHVybiBjfHxuZXcgd3AobCl9LGRlcHM6W1tuZXcgSTEsbmV3IGxkLHdwXSxFb119O3ZhciBSMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkJFRk9SRT0tMV09IkJFRk9SRSIsY1tjLkFGVEVSPTFdPSJBRlRFUiIsY30oUjJ8''@;'; put 'put ''fHt9KTtjbGFzcyBUZHt9VGRbInRvcC1yaWdodCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LFRkWyJ0b3AtbGVmdCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50''@;'; put 'put ''Ok9zLlNUQVJUfSxUZFsiYm90dG9tLXJpZ2h0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSxUZFsiYm90dG9tLWxlZnQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50''@;'; put 'put ''Ok9zLlNUQVJUfSxUZFsicmlnaHQtdG9wIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5DRU5URVIsY29udGVudDpPcy5FTkR9LFRkWyJyaWdodC1ib3R0b20iXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNv''@;'; put 'put ''bnRlbnQ6T3MuU1RBUlR9LFRkWyJsZWZ0LXRvcCJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sVGRbImxlZnQtYm90dG9tIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuU1RB''@;'; put 'put ''UlQsY29udGVudDpPcy5TVEFSVH07Y29uc3QgTkw9bmV3IFN0KCJQT1BPVkVSX0hPU1RfQU5DSE9SIik7bGV0IFF6ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbH1uZ09uSW5pdCgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5sYXN0T3BlbkNoYW5nZT1hfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1vbkVzY2FwZUtleShhKXtudWxsIT09dGhpcy5sYXN0T3BlbkNoYW5nZSYm''@;'; put 'put ''KCExPT09dGhpcy5sYXN0T3BlbkNoYW5nZSYmYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RCaW5kaW5n''@;'; put 'put ''czpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleXVwLmVzY2FwZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Fc2NhcGVLZXkoZil9KX0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFtzYyxPeCxGMWUse3Byb3ZpZGU6TkwsdXNlRXhpc3Rpbmc6Sml9XSksdmQoW1F6ZV0pXX0pLGN9KSgpO2NsYXNzIE9Ze3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1h''@;'; put 'put ''KX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgtMSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxl''@;'; put 'put ''dCB2bT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7Y29uc3QgZD1hLmNsb25lTm9kZSghMCk7ZC5pZCYmKGQuaWQ9ZC5pZCsiLWNsb25lIiksZC5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpO2Nv''@;'; put 'put ''bnN0IGg9dGhpcy5jbGllbnRSZWN0KGQpLndpZHRoO3JldHVybiBkLnJlbW92ZSgpLGh9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGgtYS5jbGllbnRXaWR0aH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aHx8MH1jb21wdXRlZEhlaWdodChhKXtyZXR1''@;'; put 'put ''cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSwxMCl9Y2xpZW50UmVjdChhKXtjb25zdCBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpwYXJzZUludChkLnRvcCwxMCksYm90dG9tOnBhcnNlSW50KGQuYm90dG9t''@;'; put 'put ''LDEwKSxsZWZ0OnBhcnNlSW50KGQubGVmdCwxMCkscmlnaHQ6cGFyc2VJbnQoZC5yaWdodCwxMCksd2lkdGg6cGFyc2VJbnQoZC53aWR0aCwxMCksaGVpZ2h0OnBhcnNlSW50KGQuaGVpZ2h0LDEwKX19bWluV2lkdGgoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0''@;'; put 'put ''UHJvcGVydHlWYWx1ZSgibWluLXdpZHRoIiksMTApfWZvY3VzKGEpe2EuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkw9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbGVtZW50PWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xyRXhwYW5kVHJpZ2dlcj0hMSx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu''@;'; put 'put ''ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uU3RhcnQoYSl7InZvaWQiIT09YS5mcm9tU3RhdGUmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiwiaGlkZGVuIil9YW5pbWF0''@;'; put 'put ''aW9uRG9uZShhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmKHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiksdGhpcy51cGRhdGVTdGFydEhlaWdodCgpKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhp''@;'; put 'put ''cy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKHZtKSxHZShFbykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJmRVKCJAZXhwYW5kQW5pbWF0aW9uLnN0YXJ0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5hbmltYXRpb25TdGFydChmKX0pKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUi''@;'; put 'put ''LGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvbkRvbmUoZil9KSwyJmEmJmxVKCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dlcjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOltkYShbdm1dKV0sbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3loKCJleHBhbmRBbmltYXRpb24iLFtpdSgidHJ1ZSA8PT4gZmFsc2UiLFt1cyh7aGVpZ2h0OiJ7e3N0YXJ0SGVp''@;'; put 'put ''Z2h0fX1weCJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe2hlaWdodDoiKiJ9KSldKV0pXX19KSxjfSkoKSxQWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxlVWU9MDtjb25zdCBGeT1uZXcgU3QoIklGX0FDVElWRV9JRCIpLG5VZT17cHJvdmlkZTpGeSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHRVZSgpe3JldHVybisrZVVlfX07bGV0IGY3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9j''@;'; put 'put ''dXJyZW50Q2hhbmdlPW5ldyBXbn1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50''@;'; put 'put ''PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSHk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb249YS5jdXJyZW50Q2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcodil9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfXNldCBhY3RpdmUoYSl7YSYmKHRoaXMuaWZBY3RpdmVTZXJ2aWNl''@;'; put 'put ''LmN1cnJlbnQ9dGhpcy5pZCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX1jaGVja0FuZFVwZGF0''@;'; put 'put ''ZVZpZXcoYSl7Y29uc3QgZD1hPT09dGhpcy5pZDtkIT09dGhpcy53YXNBY3RpdmUmJih0aGlzLnVwZGF0ZVZpZXcoZCksdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChkKSx0aGlzLndhc0FjdGl2ZT1kKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo''@;'; put 'put ''ZjcpLEdlKEZ5KSxHZShTbCksR2UoRG8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZBY3RpdmUiLCIiXV0saW5wdXRzOnthY3RpdmU6W05uLk5vbmUsImNscklmQWN0aXZlIiwiYWN0aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3Rp''@;'; put 'put ''dmVDaGFuZ2UifX0pLGN9KSgpLEwyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9ZCx0aGlzLmNvbnRhaW5lcj1oLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9uPWEub3BlbkNoYW5n''@;'; put 'put ''ZS5zdWJzY3JpYmUoZj0+e3RoaXMudXBkYXRlVmlldyhmKSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChmKX0pfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufXNldCBvcGVuKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWF9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2Mp''@;'; put 'put ''LEdlKFNsKSxHZShEbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZk9wZW4iLCIiXV0saW5wdXRzOntvcGVuOltObi5Ob25lLCJjbHJJZk9wZW4iLCJvcGVuIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9fSksY30pKCksQjFl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZXhwYW5kPXYsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITApLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMu''@;'; put 'put ''X3N1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHYuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlVmlldygpLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh2LmV4cGFuZGVkKX0pKSx2Lmhhc0V4cGFuZFRlbXBsYXRlPSEhYX1nZXQgZXhwYW5k''@;'; put 'put ''ZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLmV4cGFuZC5leHBhbmRlZD1hLHRoaXMuX2V4cGFuZGVkPWEpfW5nT25Jbml0KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSsrLHRoaXMudXBkYXRlVmlldygpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZS0tLHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZVZpZXcoKXtpZighdGhpcy5leHBhbmQuZXhwYW5kZWR8fDA9PT10aGlzLmNvbnRhaW5lci5sZW5ndGgpaWYodGhpcy50ZW1wbGF0ZSl0''@;'; put 'put ''aGlzLmV4cGFuZC5leHBhbmRlZD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKTtlbHNlIHRyeXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzcGxheSIsdGhpcy5leHBh''@;'; put 'put ''bmQuZXhwYW5kZWQ/bnVsbDoibm9uZSIpfWNhdGNoe319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsLDgpLEdlKERvKSxHZShKaSksR2UoRW8pLEdlKFUxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklm''@;'; put 'put ''RXhwYW5kZWQiLCIiXV0saW5wdXRzOntleHBhbmRlZDpbTm4uTm9uZSwiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxPMj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjb25zdCByVWU9e3Byb3ZpZGU6bmV3IFN0KCJGT0NVU19PTl9WSUVXX0lOSVQiKSx1c2VWYWx1ZTohMH07bGV0IEJMPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbclVlXSxpbXBvcnRzOltSYV19KSxjfSkoKSxhVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsVnhdfSksY30pKCksUDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQs''@;'; put 'put ''dGhpcy5jbHJMb2FkaW5nQ2hhbmdlPW5ldyBLcighMSksdGhpcy5idXR0b25TdGF0ZT16MSx0aGlzLnN0YXRlPXoxLkRFRkFVTFR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe2lmKGEhPT10aGlzLnN0YXRlKXtzd2l0Y2godGhpcy5zdGF0ZT1hLGEpe2Nhc2UgejEuREVGQVVMVDp0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiksdGhpcy5kaXNhYmxlZHx8dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LCJkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgejEuTE9BRElORzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiwidHJhbnNsYXRleigwKSIpLHRoaXMucmVuZGVyZXIuc2V0''@;'; put 'put ''QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLCIiKTticmVhaztjYXNlIHoxLlNVQ0NFU1M6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCk7YnJlYWs7Y2FzZSB6MS5FUlJPUjp0aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZSh6MS5ERUZBVUxUKX10aGlzLmNsckxv''@;'; put 'put ''YWRpbmdDaGFuZ2UuZW1pdChhKX19c2V0RXhwbGljaXRCdXR0b25XaWR0aCgpe2lmKHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7Y29uc3QgYT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCksZD1NYXRoLm1heCg0MixhLndpZHRoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGAke2R9cHhgKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFbykpfSxjLlx1MDI3''@;'; put 'put ''NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJidXR0b24iLCJjbHJMb2FkaW5nIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZGlzYWJsZWQiLGQuZGlzYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0''@;'; put 'put ''cHV0czp7Y2xyTG9hZGluZ0NoYW5nZToiY2xyTG9hZGluZ0NoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6Y31dKV0sYXR0cnM6Q0hlLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6NSxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3''@;'; put 'put ''aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29u''@;'; put 'put ''dGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwic3BhbiIsMCksZ3QoMSxTSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDIsTUhlLDIsMSwibmctY29udGFpbmVyIiwxKSgzLHhIZSwyLDEsInNwYW4iLDIpLGhlKCkpLDImYSYmKE1lKCJAcGFyZW50Iix2b2lk''@;'; put 'put ''IDApKCJuZ1N3aXRjaCIsZC5zdGF0ZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkxPQURJTkcpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuREVGQVVMVCkpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W1MyLGNwXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgicGFyZW50IixbaXUoIjplbnRlciIsW10pXSkseWgoImRlZmF1bHRCdXR0b24iLFtpdSgiOmVudGVyIixbdXMoe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIix1cyh7b3Bh''@;'; put 'put ''Y2l0eToxfSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjB9KV0pXSkseWgoInNwaW5uZXIiLFtpdSgiOmVudGVyIixbdXMoe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIix1cyh7b3BhY2l0eToxfSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjF9KSxNMCgi''@;'; put 'put ''MTAwbXMgZWFzZS1vdXQiLHVzKHtvcGFjaXR5OjB9KSldKV0pLHloKCJ2YWxpZGF0ZWQiLFtpdSgiOmVudGVyIixbTTAoIjYwMG1zIix1UGUoW3VzKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksdXMoe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSx1cyh7dHJhbnNmb3JtOiJzY2Fs''@;'; put 'put ''ZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksdXMoe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSx1cyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjF9KSxNMCgiMTAwbXMgZWFzZS1vdXQiLHVzKHtvcGFj''@;'; put 'put ''aXR5OjB9KSldKV0pXX19KSxjfSkoKSxzVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCksbFVlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhUMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltzVWUsYVVlXX0pLGN9KSgpLGNVZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7fSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KSxjfSkoKSxCeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKSx1VWU9MCxDaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5faWQ9ImNsci1mb3JtLWNvbnRyb2wtIisgKyt1VWUsdGhpcy5faWRDaGFuZ2U9bmV3IGVpKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRD''@;'; put 'put ''aGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGRVZT0wLHA3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlz''@;'; put 'put ''Ll9pZD0iY2xyLWZvcm0tY29udGFpbmVyLSIrICsrZFVlLHRoaXMuX2lkQ2hhbmdlPW5ldyBlaSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lk''@;'; put 'put ''Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtsZXQgRlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3Ro''@;'; put 'put ''aXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImFic3RyYWN0In1nZXQgaWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJZFNlcnZpY2U/YCR7dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9s''@;'; put 'put ''SWRTdWZmaXh9YDp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/YCR7dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1''@;'; put 'put ''MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksaFVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iZXJyb3IifX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShwNyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWVycm9yIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh''@;'; put 'put ''JiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgiZXJyb3IiLCEwKSl9LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9''@;'; put 'put ''KSgpLGpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iaGVscGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1oZWxwZXIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJj''@;'; put 'put ''bHItc3VidGV4dCIsITApKX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3RoaXMuX2FkZGl0aW9uYWxDb250cm9scz1bXSx0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgV24sdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcz1uZXcgV24sdGhpcy5faGVscGVycz1uZXcgV259Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5fY29udHJvbH1nZXQgY29udHJvbENo''@;'; put 'put ''YW5nZXMoKXtyZXR1cm4gdGhpcy5fY29udHJvbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGFkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHN9Z2V0IGFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENv''@;'; put 'put ''bnRyb2xzQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuISF0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aH1nZXQgaGVscGVyc0NoYW5nZSgpe3JldHVybiB0aGlzLl9oZWxwZXJzLmFzT2JzZXJ2YWJsZSgpfXNldENvbnRyb2wo''@;'; put 'put ''YSl7dGhpcy5fY29udHJvbD1hLHRoaXMuX2NvbnRyb2xDaGFuZ2VzLm5leHQoYSl9YWRkQWRkaXRpb25hbENvbnRyb2woYSl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzLnB1c2goYSksdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5uZXh0KHRoaXMuX2FkZGl0aW9uYWxDb250cm9s''@;'; put 'put ''cyl9c2V0SGVscGVycyhhKXt0aGlzLl9oZWxwZXJzLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBBZD1mdW5jdGlvbihjKXtyZXR1''@;'; put 'put ''cm4gYy5OT05FPSJOT05FIixjLlZBTElEPSJWQUxJRCIsYy5JTlZBTElEPSJJTlZBTElEIixjfShBZHx8e30pO2xldCBrZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuc3RhdHVzQ2hhbmdlcz10aGlzLmdl''@;'; put 'put ''dFN0YXR1c0NoYW5nZXMoYSkucGlwZShJMGUoMSkpfXRyaWdnZXJTdGF0dXNDaGFuZ2UoKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0Lm5leHQoKX1nZXRTdGF0dXNDaGFuZ2VzKGEpe3JldHVybiBxOChbYS5jb250cm9sQ2hhbmdlcyxhLmFkZGl0aW9uYWxDb250cm9sc0NoYW5n''@;'; put 'put ''ZXMucGlwZSh4MihbXSkpXSkucGlwZShWMSgoW2QsaF0pPT57aWYoZCl7Y29uc3QgZj1bZCwuLi5oXTtyZXR1cm4gX3gocTgoZi5tYXAodj0+di5zdGF0dXNDaGFuZ2VzKSksdGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdC5waXBlKExyKCgpPT5mLm1hcCh2PT52LnN0YXR1cykpKSl9''@;'; put 'put ''cmV0dXJuIE0yfSksTHIoZD0+ZC5pbmNsdWRlcyhBZC5JTlZBTElEKT9BZC5JTlZBTElEOmQuaW5jbHVkZXMoQWQuVkFMSUQpP0FkLlZBTElEOkFkLk5PTkUpLHgyKEFkLk5PTkUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoZjEpKX0sYy5c''@;'; put 'put ''dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyB6THt9ZnVuY3Rpb24gWjFlKGMpe3JldHVybltjLHtwcm92aWRlOnpMLHVzZUV4aXN0aW5nOmN9XX1mdW5jdGlvbiBXMWUoYyxsLGEpe3JldHVybiBYdC5jcmVhdGUoZD0+e2woZCk7Y29uc3Qg''@;'; put 'put ''aD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBVTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yZW5kZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZp''@;'; put 'put ''Y2U9Zix0aGlzLnBsYXRmb3JtSWQ9dix0aGlzLmlkPU11KCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMuX3VubGlzdGVuRnVuY3M9W10sdGhpcy5yZXNldENoaWxkcmVuKCksdGhpcy5tb3ZlVG9GaXJzdEl0ZW1XaGVuT3BlbigpLGR8fHRoaXMuaGFuZGxlUm9v''@;'; put 'put ''dEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5w''@;'; put 'put ''dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2UubGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFp''@;'; put 'put ''bmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5s''@;'; put 'put ''aXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZSh3aC5MRUZUKSxkLnN0b3BQcm9wYWdhdGlvbigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxp''@;'; put 'put ''c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hp''@;'; put 'put ''bGRyZW4ucGlwZShZZigxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaCh2PT52LmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJnRsKHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRo''@;'; put 'put ''aXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSksdGhpcy5mb2N1c1NlcnZpY2UuZGV0YWNoTGlzdGVuZXJzKCl9bW92ZVRvRmlyc3RJ''@;'; put 'put ''dGVtV2hlbk9wZW4oKXtjb25zdCBhPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZCYmdGhpcy50b2dnbGVTZXJ2aWNlLm9yaWdpbmFsRXZlbnQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlVG8odGhpcyksdGhpcy5mb2N1c1NlcnZp''@;'; put 'put ''Y2UubW92ZSh0aGlzLnBhcmVudD93aC5SSUdIVDp3aC5ET1dOKX0pfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZVJvb3RGb2N1cygpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkfHwodGhp''@;'; put 'put ''cy5mb2N1c1NlcnZpY2UucmVzZXQodGhpcyksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkJiZ0aGlzLmZvY3VzKCkpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3Vz''@;'; put 'put ''KCl7dGhpcy50cmlnZ2VyJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2Vy''@;'; put 'put ''LmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHl4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5h''@;'; put 'put ''WzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTHIoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtPWS5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJk9ZLmxpbmtQYXJlbnQoYSx0aGlzLmNsb3NlQW5kR2V0VGhpcygpLHdoLkxFRlQpLHRo''@;'; put 'put ''aXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gVzFlKHRoaXMuY2hpbGRyZW4sKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1jbG9zZUFuZEdldFRoaXMoKXtyZXR1cm4gVzFlKGZvKHRoaXMpLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0h''@;'; put 'put ''MSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEVvKSx4cihjLDEyKSx4cihzYykseHIod3ApLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgZlVlPVoxZShVTCk7bGV0''@;'; put 'put ''IGp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBXbn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBnVWU9e3Byb3ZpZGU6angsdXNlRmFjdG9yeTpmdW5jdGlvbiBwVWUoYyl7cmV0dXJuIGN8fG5ldyBqeH0sZGVwczpbW25ldyBJMSxuZXcgbGQs''@;'; put 'put ''anhdXX07bGV0IHNnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZm9jdXNIYW5kbGVyPWgsdGhpcy5pc01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLnB1c2godi5jaGFuZ2VzLnN1YnNjcmliZShNPT5kLm9wZW49TSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PmYubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz''@;'; put 'put ''Y3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKHNjKSxHZShVTCksR2UoRXMpLEdlKGp4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbTm4uTm9uZSwiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W2dVZSxWMWUsZlVlXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgQWk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9D''@;'; put 'put ''RU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRdPSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0i''@;'; put 'put ''VE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0iTEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09''@;'; put 'put ''IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oQWl8fHt9KTtjbGFzcyBiVWV7Y29uc3RydWN0b3IobCl7dGhpcy5lbGVtZW50PWwsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXI9dGhpcy5lbWl0U2Nyb2xsRXZlbnQuYmluZCh0aGlzKSx0aGlzLnNjcm9s''@;'; put 'put ''bGFibGVFbGVtZW50cz1bXSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9yKGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQ''@;'; put 'put ''YXJlbnQ6dj0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksdiYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IE09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxEPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo''@;'; put 'put ''KTtsZXQgWj1NLmxlZnQtRC5sZWZ0K2gscmU9TS50b3AtRC50b3ArZjtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6''@;'; put 'put ''Wis9TS53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6cmUrPU0uaGVpZ2h0O2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpyZSs9TS5oZWlnaHQsWis9TS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRf''@;'; put 'put ''Qk9UVE9NOnJlKz1NLmhlaWdodCxaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUrPU0uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6cmUrPU0uaGVpZ2h0LzIsWis9TS53aWR0aH1zd2l0Y2goZCl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9M''@;'; put 'put ''RUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6Wi09RC53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6cmUtPUQuaGVpZ2h0O2JyZWFrO2Nhc2Ug''@;'; put 'put ''QWkuQk9UVE9NX0NFTlRFUjpyZS09RC5oZWlnaHQsWi09RC53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRfQk9UVE9NOnJlLT1ELmhlaWdodCxaLT1ELndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUtPUQuaGVpZ2h0LzI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBBaS5SSUdIVF9DRU5URVI6cmUtPUQuaGVpZ2h0LzIsWi09RC53aWR0aH1jb25zdCBjZT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCksYmU9cGFyc2VJbnQoY2UubWFyZ2luTGVmdCwxMCksRWU9cGFyc2VJbnQoY2UubWFyZ2luUmlnaHQsMTApLEJlPXBhcnNlSW50KGNlLm1hcmdp''@;'; put 'put ''blRvcCwxMCkscWU9cGFyc2VJbnQoY2UubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmNhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOihkPT09QWkuQk9UVE9NX1JJR0hUfHxkPT09QWkuUklHSFRfQk9UVE9NKSYm''@;'; put 'put ''KHJlLT1xZSxaLT1FZSksKGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKHJlLT1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfTEVGVHx8ZD09PUFpLkxFRlRfVE9QKSYmKHJlKz1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfUklHSFR8fGQ9PT1BaS5SSUdIVF9UT1ApJiYocmUr''@;'; put 'put ''PUJlLFotPUVlKTticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006KGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKHJlLT1xZSxaKz1iZSksKGQ9PT1BaS5C''@;'; put 'put ''T1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00pJiYocmUtPXFlLFotPUVlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWkuTEVGVF9UT1ApJiYocmUrPUJlLForPWJlKSwoZD09PUFpLlRPUF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihyZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''QWkuVE9QX0NFTlRFUjpyZS09cWUsWis9YmUsWi09RWU7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOnJlKz1CZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOnJlKz1CZSxyZS09cWUsWi09RWU7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6cmUrPUJlLHJlLT1x''@;'; put 'put ''ZSxaKz1iZX1yZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoWil9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5kKHJlKX1weClgLHRoaXMuX3Njcm9sbC5hc09ic2VydmFibGUoKX1yZWxlYXNlKCl7dGhpcy5lbGVtZW50LnN0eWxl''@;'; put 'put ''LnRyYW5zZm9ybT0iIix0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl9aXNQb3NpdGlvbmVkKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKS5wb3NpdGlvbjtyZXR1cm4icmVsYXRpdmUiPT09YXx8ImFic29sdXRlIj09PWF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVu''@;'; put 'put ''dCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBXbjtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJv''@;'; put 'put ''dW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3JvbGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwp''@;'; put 'put ''e2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8ImF1dG8iPT09YS5vdmVyZmxvd1l9fWNvbnN0IEsxZT0iaXMtb2ZmLXNjcmVlbiI7bGV0IEhZPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudEhvc3Q9ZCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRl''@;'; put 'put ''Q2xpY2tDYWxsYmFjaz1oPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGgudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD1hLmdldChKaSksdGhpcy50b2dnbGVTZXJ2aWNlPWEuZ2V0KHNjKSx0aGlzLnJlbmRlcmVyPWEuZ2V0KEVvKSx0aGlzLm5nWm9u''@;'; put 'put ''ZT1hLmdldChXYSksdGhpcy5yZWY9YS5nZXQoRXMpLHRoaXMuYW5jaG9yRWxlbT1kLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IGJVZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBp''@;'; put 'put ''cGUoeDIodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4pKS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEsxZSkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRl''@;'; put 'put ''dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSzFlKSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVw''@;'; put 'put ''ZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1y''@;'; put 'put ''ZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1''@;'; put 'put ''bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmSTIoYS5rZXkpPT09Z2EuRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlz''@;'; put 'put ''LnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMu''@;'; put 'put ''Y2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNp''@;'; put 'put ''ZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKEppLDQpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLGc3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIWXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNs''@;'; put 'put ''ci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9N''@;'; put 'put ''X0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hh''@;'; put 'put ''bmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfTEVGVCx0''@;'; put 'put ''aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQ''@;'; put 'put ''b2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5j''@;'; put 'put ''aG9yUG9pbnQ9QWkuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRo''@;'; put 'put ''aXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUo''@;'; put 'put ''KCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoYywxMiksR2UoVUwpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEm''@;'; put 'put ''YSYmYW8oaCx6TCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsIm1lbnUiKSxUcigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbTm4uTm9uZSwi''@;'; put 'put ''Y2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtNz0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITAsYS5wYXJlbnQmJih0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSExKSxmLnRyaWdnZXI9aC5uYXRpdmVFbGVtZW50fWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''Lm9wZW59b25Ecm9wZG93blRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzZyksR2Uoc2MpLEdlKEppKSxHZShVTCkpfSxjLlx1MDI3NWRpcj1Fcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiXSxbIiIsImNsckRyb3Bkb3duVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3Bkb3duVHJp''@;'; put 'put ''Z2dlckNsaWNrKGYpfSksMiZhJiYoaHIoImFyaWEtaGFzcG9wdXAiLCJtZW51IikoImFyaWEtZXhwYW5kZWQiLGQuYWN0aXZlKSxUcigiZHJvcGRvd24tdG9nZ2xlIixkLmlzUm9vdExldmVsVG9nZ2xlKSgiZHJvcGRvd24taXRlbSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJleHBhbmRhYmxl''@;'; put 'put ''IiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImFjdGl2ZSIsZC5hY3RpdmUpKX19KSxjfSkoKTtjb25zdCB5VWU9W3twcm92aWRlOnpMLHVzZUNsYXNzOigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhp''@;'; put 'put ''cy5pZD1NdSgpLHRoaXMuZGlzYWJsZWQ9ITEsZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJpZCIsdGhpcy5pZCksZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIil9Zm9jdXMoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIjAiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJl''@;'; put 'put ''c3QifSkpfWJsdXIoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoSmkpLHhyKEVvKSx4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IFZ5PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLmZv''@;'; put 'put ''Y3VzYWJsZUl0ZW0uZGlzYWJsZWQ9ISFhfHwiIj09PWF9Z2V0IGRyb3Bkb3duSXRlbUlkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5pZH1zZXQgZHJvcGRvd25JdGVtSWQoYSl7dGhpcy5mb2N1c2FibGVJdGVtLmlkPWF9b25Ecm9wZG93bkl0ZW1DbGljaygpe2lmKHRoaXMuZHJvcGRv''@;'; put 'put ''d24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLmRyb3Bkb3duLnRvZ2dsZVNlcnZpY2Uub3Blbil7Y29uc3QgYT10aGlzLmZpbmRSb290RHJvcGRvd24oKTthLmZvY3VzSGFuZGxlci5mb2N1cygpLGEuZm9jdXNIYW5kbGVyLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9z''@;'; put 'put ''ZWQ9ITF9c2V0VGltZW91dCgoKT0+e3RoaXMuZHJvcGRvd24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9kcm9wZG93blNlcnZpY2UuY2xvc2VNZW51cygpfSl9b25TcGFjZUtleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEp''@;'; put 'put ''fW9uRW50ZXJLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKX1zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9''@;'; put 'put ''ZmluZFJvb3REcm9wZG93bigpe2xldCBhPXRoaXMuZHJvcGRvd247Zm9yKDthLnBhcmVudDspYT1hLnBhcmVudDtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2cpLEdlKGp4KSxHZSh6TCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24o''@;'; put 'put ''Zil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihocigicm9sZSIsIm1lbnVpdGVtIikoImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJpZCIsZC5kcm9wZG93bkl0ZW1J''@;'; put 'put ''ZCksVHIoImRpc2FibGVkIixkLmRpc2FibGVkKSgiZHJvcGRvd24taXRlbSIsITApKX0saW5wdXRzOntkaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGlzYWJsZWQiLCJkaXNhYmxlZCJdLGRyb3Bkb3duSXRlbUlkOltObi5Ob25lLCJpZCIsImRyb3Bkb3duSXRlbUlkIl19LGZlYXR1cmVzOltkYShb''@;'; put 'put ''eVVlXSldfSksY30pKCksTlk9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsTzIsQXNdfSksY30pKCksVlk9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tzZXQgdHJpZ2dlckVsKGEpe3RoaXMuX3RyaWdnZXJFbD1hfWZvY3VzVHJpZ2dlcigpe3RoaXMuX3RyaWdnZXJFbCYmdGhpcy5fdHJpZ2dlckVsLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEJZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgV259Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXNldElkKGEpe3RoaXMuX2lkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFpMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLnNpZ25w''@;'; put 'put ''b3N0SWRTZXJ2aWNlPWgsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1mLHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuYXJpYUV4cGFuZGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PXZ9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJF''@;'; put 'put ''bD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRo''@;'; put 'put ''aXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGljayhh''@;'; put 'put ''KXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWZvY3VzT25DbG9zZSgpe3RsKHRoaXMucGxhdGZvcm1JZCkmJiF0aGlzLmlzT3BlbiYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5kb2N1bWVudC5ib2R5JiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2Vy''@;'; put 'put ''LmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoSmkpLEdlKEJZKSxHZShWWSksR2UodnMpLEdlKGlvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNpZ25wb3N0VHJpZ2dl''@;'; put 'put ''ciIsIiJdXSxob3N0QXR0cnM6WzEsInNpZ25wb3N0LXRyaWdnZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGYpfSksMiZhJiYoaHIoImFyaWEtZXhwYW5k''@;'; put 'put ''ZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJvbCksVHIoImFjdGl2ZSIsZC5pc09wZW4pKX19KSxjfSkoKSxXTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hMX1zZXQg''@;'; put 'put ''Y3VzdG9tVHJpZ2dlcihhKXt0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ISFhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QiXV0sY29udGVudFF1ZXJp''@;'; put 'put ''ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxaTCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmN1c3RvbVRyaWdnZXI9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInNpZ25wb3N0IiwhMCl9LGlucHV0czp7c2lnbnBv''@;'; put 'put ''c3RUcmlnZ2VyQXJpYUxhYmVsOltObi5Ob25lLCJjbHJTaWducG9zdFRyaWdnZXJBcmlhTGFiZWwiLCJzaWducG9zdFRyaWdnZXJBcmlhTGFiZWwiXX0sZmVhdHVyZXM6W2RhKFtWWSxCWV0pLHZkKFtvZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltb''@;'; put 'put ''NCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tbGluayJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh''@;'; put 'put ''KCksZ3QoMCxFSGUsMywyLCJuZy1jb250YWluZXIiLDApLFlyKDEpKSwyJmEmJk1lKCJuZ0lmIiwhZC51c2VDdXN0b21UcmlnZ2VyKX0sZGVwZW5kZW5jaWVzOltiYSxycyxaTF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgX1VlPXsidG9wLWxlZnQiOnthbmNob3JQb2ludDpBaS5U''@;'; put 'put ''T1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLXJpZ2h0''@;'; put 'put ''Ijp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0''@;'; put 'put ''WDoxNn0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRf''@;'; put 'put ''VE9QLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwiYm90dG9tLXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuVE9QX0xFRlQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixw''@;'; put 'put ''b3BvdmVyUG9pbnQ6QWkuVE9QX0NFTlRFUixvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1sZWZ0Ijp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuVE9QX1JJR0hULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNob3JQb2lu''@;'; put 'put ''dDpBaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0''@;'; put 'put ''LXRvcCI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE2fSxkZWZhdWx0OnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZz''@;'; put 'put ''ZXRYOjE2fX0sd1VlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1pZGRsZSIs''@;'; put 'put ''ImxlZnQtdG9wIl07bGV0IHExZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSFl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7aWYoc3VwZXIoYSxkKSx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5zaWducG9z''@;'; put 'put ''dENvbnRlbnRJZD1NdSgpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCxmLnNl''@;'; put 'put ''dElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9RH1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMu''@;'; put 'put ''X3Bvc2l0aW9uPWEmJndVZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3QgZD1fVWVbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9zZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIu''@;'; put 'put ''bmdPbkRlc3Ryb3koKSx0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKE5MLDgpLEdlKGlzKSxHZShCWSksR2UoVlkpLEdlKGlvKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezImYSYmKG9wKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksVHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7c2lnbnBvc3RDbG9zZUFyaWFMYWJlbDpbTm4uTm9uZSwiY2xyU2lnbnBvc3RDbG9zZUFyaWFMYWJlbCIsInNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiXSxw''@;'; put 'put ''b3NpdGlvbjpbTm4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczpBSGUsZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBvaW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbInRhYmluZGV4IiwiMCIsMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo''@;'; put 'put ''c2EoVEhlKSxkZSgwLCJkaXYiLDApLEd0KDEsImRpdiIsMSksZGUoMiwiZGl2IiwyKSxZcigzKSxkZSg0LCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jbG9zZSgpfSksR3QoNSwiY2RzLWljb24iLDQpLGhlKCkoKSxkZSg2LCJkaXYiLDUpLFlyKDcsMSksaGUo''@;'; put 'put ''KSgpKSwyJmEmJihmZSg0KSxocigiYXJpYS1sYWJlbCIsZC5zaWducG9zdENsb3NlQXJpYUxhYmVsfHxkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJpYS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5r''@;'; put 'put ''ZXlzLmNsb3NlKSl9LGRlcGVuZGVuY2llczpbcnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLENVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModngsUk9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsQkwsTzJdfSksY30pKCksalk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBXbn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9dXBkYXRlSWQoYSl7dGhp''@;'; put 'put ''cy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkselk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2U9YX1vbk1vdXNlRW50ZXJUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSEwLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfW9uTW91c2VMZWF2ZVRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITEsdGhpcy5oaWRlSWZNb3VzZU91dCgpfW9uTW91c2VFbnRlckNvbnRl''@;'; put 'put ''bnQoKXt0aGlzLm1vdXNlT3ZlckNvbnRlbnQ9ITB9b25Nb3VzZUxlYXZlQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9aGlkZUlmTW91c2VPdXQoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubW91c2VPdmVyVHJpZ2dlciYmIXRoaXMubW91''@;'; put 'put ''c2VPdmVyQ29udGVudCYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHNjKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdjc9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigidG9vbHRp''@;'; put 'put ''cCIsITApfSxmZWF0dXJlczpbZGEoW2pZLHpZXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBNVWU9WyJib3R0b20tbGVm''@;'; put 'put ''dCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0seFVlPVsieHMiLCJzbSIsIm1kIiwibGciXTtsZXQgYjc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRT''@;'; put 'put ''ZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPU11KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBp''@;'; put 'put ''ZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPU1VZS5pbmNsdWRlcyhhKT9hOiJyaWdo''@;'; put 'put ''dCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50''@;'; put 'put ''PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0NFTlRFUix0aGlz''@;'; put 'put ''LnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfQ0VOVEVS''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gU1VlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5k''@;'; put 'put ''bGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZSxoPXhVZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1g''@;'; put 'put ''LG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9u''@;'; put 'put ''TW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''YWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoalkpLEdlKHpZKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNv''@;'; put 'put ''bnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihvcCgi''@;'; put 'put ''aWQiLGQuaWQpLGhyKCJyb2xlIiwidG9vbHRpcCIpLF9kKCJvcGFjaXR5IiwxKSxUcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e2lkOiJpZCIscG9zaXRpb246W05uLk5vbmUsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXSxzaXplOltObi5Ob25lLCJjbHJTaXplIiwic2l6ZSJd''@;'; put 'put ''fSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5Nz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnRvZ2ds''@;'; put 'put ''ZVNlcnZpY2U9YSx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9aCx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goZC5pZC5zdWJzY3JpYmUoZj0+dGhpcy5hcmlhRGVzY3JpYmVkQnk9ZikpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zaG93''@;'; put 'put ''VG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfWhpZGVUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlclRyaWdnZXIoKX1vbk1vdXNlTGVhdmUoKXt0aGlzLnRvb2x0''@;'; put 'put ''aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoalkpLEdlKHpZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRvb2x0aXBUcmlnZ2Vy''@;'; put 'put ''IiwiIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2hvd1Rvb2x0aXAoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUb29sdGlwKCl9''@;'; put 'put ''KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIoKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgpfSksMiZhJiYoaHIoImFyaWEtZGVzY3JpYmVkYnkiLGQuYXJpYURlc2NyaWJlZEJ5KSgicm9sZSIsImJ1dHRvbiIp''@;'; put 'put ''LFRyKCJ0b29sdGlwLXRyaWdnZXIiLCEwKSl9fSksY30pKCksRVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLE8yLEFzXX0p''@;'; put 'put ''LGN9KSgpLFRVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltOWSxDVWUsRVVlXX0pLGN9KSgpO3ZhciBfNz1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShfN3x8e30pO2xldCBDcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlz''@;'; put 'put ''LmxheW91dD1fNy5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKF83KS5tYXAoYT0+XzdbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4gdGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlk''@;'; put 'put ''KGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PV83LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PV83LkhPUkla''@;'; put 'put ''T05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlzVmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxT''@;'; put 'put ''aXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZHM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYpe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPXYsdGhpcy5lbmFibGVHcmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7dGhpcy5pZEF0dHI9dGhpcy5pZElucHV0LCh0aGlzLmNvbnRyb2xJZFNlcnZpY2V8fHRoaXMubmdDb250cm9sU2VydmljZSkmJnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhp''@;'; put 'put ''cy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29udHJvbC1sYWJlbCIpLHRoaXMuZW5hYmxlR3JpZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1l''@;'; put 'put ''LmluZGV4T2YoImNsci1jb2wiKTwwJiYodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb2wtMTIiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5sYWJl''@;'; put 'put ''bFNpemV9YCkpLHRoaXMuY29udHJvbElkU2VydmljZSYmIXRoaXMuZm9yQXR0ciYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5mb3JBdHRyPWEsdGhpcy5pZEF0dHI9dGhpcy5pZElucHV0fHxgJHthfS1s''@;'; put 'put ''YWJlbGB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfW9uQ2xpY2soYSl7dGhpcy5wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl9cHJldmVudERlZmF1''@;'; put 'put ''bHRPblNpZ25wb3N0VGFyZ2V0KGEpe3RoaXMuc2lnbnBvc3QmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSYmYS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShDcCw4KSxHZShmMSw4KSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxXTCw1LEppKSwyJmEpe2xl''@;'; put 'put ''dCBmO0NpKGY9U2koKSkmJihkLnNpZ25wb3N0PWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DbGljayhmKX0pLDImYSYmaHIoImlkIixkLmlkQXR0cikoImZvciIsZC5mb3JBdHRy''@;'; put 'put ''KX0saW5wdXRzOntpZElucHV0OltObi5Ob25lLCJpZCIsImlkSW5wdXQiXSxmb3JBdHRyOltObi5Ob25lLCJmb3IiLCJmb3JBdHRyIl19fSksY30pKCksQVVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0ic3VjY2VzcyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKHA3LDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLWNvbnRyb2wtc3VjY2VzcyJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIoImNsci1zdWJ0ZXh0IiwhMCkoInN1Y2Nlc3MiLCEwKSl9LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFy''@;'; put 'put ''czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLERkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QWQuTk9ORSxk''@;'; put 'put ''PSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEFkLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEFkLklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMu''@;'; put 'put ''Y2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxk''@;'; put 'put ''KXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJjbHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoeHIoQ3AsOCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHc3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0''@;'; put 'put ''aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5zdGF0ZT12LHNldFRpbWVvdXQoKCk9Pnt0aGlzLnVwZGF0''@;'; put 'put ''ZUhlbHBlcnMoKX0pfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLmNvbnRyb2w9dn0pLGYuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuYWRkaXRpb25hbENvbnRyb2xzPXZ9KSl9Z2V0IHNo''@;'; put 'put ''b3dIZWxwZXIoKXtyZXR1cm4hIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudH1nZXQgc2hvd1ZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PUFkLlZBTElEJiZ0aGlzLnN1Y2Nlc3NNZXNzYWdlUHJlc2VudH1nZXQgc2hvd0ludmFsaWQoKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b3VjaGVkJiZ0aGlzLnN0YXRlPT09QWQuSU5WQUxJRCYmdGhpcy5lcnJvck1lc3NhZ2VQcmVzZW50fWdldCBzdWNjZXNzTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnR9Z2V0IGVycm9yTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29u''@;'; put 'put ''dHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuISghdGhpcy5jb250cm9sPy50b3VjaGVkJiYhdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/LnNvbWUoYT0+YS50b3VjaGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy51cGRhdGVIZWxwZXJzKCl9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbnRyb2xDbGFzcygpe3JldHVybiB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QWQuVkFMSUR8fCF0''@;'; put 'put ''aGlzLnRvdWNoZWQ/QWQuTk9ORTp0aGlzLnN0YXRlLHRoaXMuYWRkR3JpZCgpKX1hZGRHcmlkKCl7cmV0dXJuIHRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCl9dXBkYXRlSGVscGVycygpe3RoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0Nv''@;'; put 'put ''bnRyb2xTZXJ2aWNlLnNldEhlbHBlcnMoe3Nob3c6dGhpcy5zaG93SW52YWxpZHx8dGhpcy5zaG93SGVscGVyfHx0aGlzLnNob3dWYWxpZCxzaG93SW52YWxpZDp0aGlzLnNob3dJbnZhbGlkLHNob3dIZWxwZXI6dGhpcy5zaG93SGVscGVyLHNob3dWYWxpZDp0aGlzLnNob3dWYWxpZH0pfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShrZCksR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNSksYW8oaCxBVWUsNSks''@;'; put 'put ''YW8oaCxoVWUsNSksYW8oaCxqTCw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sU3VjY2Vzc0NvbXBvbmVudD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sRXJyb3JDb21wb25lbnQ9Zi5maXJzdCksQ2koZj1T''@;'; put 'put ''aSgpKSYmKGQuY29udHJvbEhlbHBlckNvbXBvbmVudD1mLmZpcnN0KX19fSksY30pKCk7Y2xhc3MgWUx7Y29uc3RydWN0b3IobCxhLGQ9MCl7aWYodGhpcy5pbmplY3Rvcj1hLmluamVjdG9yLCF0aGlzLmluamVjdG9yLmdldChsLG51bGwpKXtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KFc1''@;'; put 'put ''KSxmPXRoaXMuaW5qZWN0b3IuZ2V0KEppKTthLmNyZWF0ZUNvbXBvbmVudChoLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNVZSkpO2NvbnN0IHY9aC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKSxNPVtdO01bZF09W2YubmF0aXZlRWxlbWVudF07Y29uc3QgRD1hLmNyZWF0ZUNvbXBvbmVu''@;'; put 'put ''dCh2LHZvaWQgMCx2b2lkIDAsTSk7YS5yZW1vdmUoMCksdGhpcy5pbmplY3Rvcj1ELmluamVjdG9yfX1nZXQobCxhKXtyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQobCxhKX19bGV0IFVZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkPW5ldyBXbn1nZXQgdG91Y2hl''@;'; put 'put ''ZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFpZPWZ1bmN0aW9uKGMpe3JldHVybiBjLkZPUk09ImZvcm0iLGMuTU9ERUw9Im1vZGVsIixjfShaWXx8e30pO2xldCBDNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnZjcj1hLHRoaXMud3JhcHBlclR5cGU9ZCx0''@;'; put 'put ''aGlzLl9uZ0NvbnRyb2w9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5hZGRpdGlvbmFsRGlmZmVyPW5ldyBNYXAsaCYmKHRoaXMubmdDb250cm9sU2VydmljZT1oLmdldChmMSxudWxsKSx0aGlzLmlmQ29udHJvbFN0''@;'; put 'put ''YXRlU2VydmljZT1oLmdldChrZCxudWxsKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoRGQsbnVsbCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9aC5nZXQoVVksbnVsbCksdGhpcy5kaWZmZXJzPWguZ2V0KHdNLG51bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMu''@;'; put 'put ''Y29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKHYsTS5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJrQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1h''@;'; put 'put ''cmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZShEPT57dGhpcy5zZXRBcmlhRGVzY3JpYmVkQnkoRCl9KSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuY29udHJvbElkU2VydmljZSYmKHRoaXMuY29udHJvbElkU2VydmljZS5pZD1hKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuYWRkaXRpb25hbERpZmZlci5zaXplPjB9bmdPbkluaXQoKXt0aGlzLl9jb250YWlu''@;'; put 'put ''ZXJJbmplY3Rvcj1uZXcgWUwodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KENoKSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQocDcs''@;'; put 'put ''bnVsbCksdGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuX25nQ29udHJvbCYmKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sPyh0aGlzLm5nQ29u''@;'; put 'put ''dHJvbD10aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkQWRkaXRpb25hbENvbnRyb2wodGhpcy5fbmdDb250cm9sKSx0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2V0KHRoaXMuX25nQ29udHJvbCx0aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0Nv''@;'; put 'put ''bnRyb2wpLmNyZWF0ZSgpKSk6KHRoaXMubmdDb250cm9sPXRoaXMuX25nQ29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29udHJvbCh0aGlzLm5nQ29udHJvbCksdGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpfW5nRG9DaGVj''@;'; put 'put ''aygpe2lmKHRoaXMudHJpZ2dlckRvQ2hlY2sodGhpcy5kaWZmZXIsdGhpcy5uZ0NvbnRyb2wpLHRoaXMuaGFzQWRkaXRpb25hbENvbnRyb2xzKWZvcihjb25zdFthLGRdb2YgdGhpcy5hZGRpdGlvbmFsRGlmZmVyKXRoaXMudHJpZ2dlckRvQ2hlY2soZCxhKX1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmE/LnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIo''@;'; put 'put ''YSxkKXt0cnl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChhLGQpfWNhdGNoe3JldHVybiBkfX10cmlnZ2VyRG9DaGVjayhhLGQpe2lmKGEpe2NvbnN0IGg9YS5kaWZmKGQpO2gmJmguZm9yRWFjaENoYW5nZWRJdGVtKGY9PnsoZi5rZXk9PT1aWS5GT1JNfHxmLmtleT09PVpZ''@;'; put 'put ''Lk1PREVMKSYmZi5jdXJyZW50VmFsdWUhPT1mLnByZXZpb3VzVmFsdWUmJnRoaXMudHJpZ2dlclZhbGlkYXRpb24oKX0pfX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9s''@;'; put 'put ''LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGFzQWRkaXRpb25hbENvbnRyb2xzJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkaXRpb25hbENvbnRyb2xzPy5mb3JFYWNoKGE9PnthLmNvbnRyb2wubWFya0Fz''@;'; put 'put ''VG91Y2hlZCgpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1''@;'; put 'put ''dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtjb25zdCBkPXRoaXMuY29udGFpbmVy''@;'; put 'put ''SWRTZXJ2aWNlPy5pZHx8dGhpcy5jb250cm9sSWRTZXJ2aWNlPy5pZDtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPVtgJHtkfS1oZWxwZXJgXTtyZXR1cm4gYS5zaG93SW52YWxpZD9oLnB1c2goYCR7ZH0tZXJyb3JgKTphLnNob3dWYWxpZCYmaC5wdXNoKGAke2R9LXN1Y2Nlc3NgKSxoLmpv''@;'; put 'put ''aW4oIiAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKGo2KSxHZShEcyksR2UoZDEpLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiZGdCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZvcCgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksUTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLm1hcmtD''@;'; put 'put ''b250cm9sU2VydmljZT1kfXNldCBsYWJlbFNpemUoYSl7Y29uc3QgZD1wYXJzZUludChhLDEwKXx8Mjt0aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplPWR9b25Gb3JtU3VibWl0KCl7dGhpcy5tYXJrQXNUb3VjaGVkKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMubWFya0NvbnRyb2xTZXJ2aWNl''@;'; put 'put ''Lm1hcmtBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3ApLEdlKFVZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvcm0iLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgp''@;'; put 'put ''e2lmKDEmYSYmYW8oaCxkcyw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVscz1mKX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgic3VibWl0IixmdW5jdGlvbigpe3JldHVybiBkLm9uRm9ybVN1Ym1pdCgpfSksMiZhJiZUcigiY2xyLWZv''@;'; put 'put ''cm0iLCEwKSgiY2xyLWZvcm0taG9yaXpvbnRhbCIsZC5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpKSgiY2xyLWZvcm0tY29tcGFjdCIsZC5sYXlvdXRTZXJ2aWNlLmlzQ29tcGFjdCgpKX0saW5wdXRzOntsYWJlbFNpemU6W05uLk5vbmUsImNsckxhYmVsU2l6ZSIsImxhYmVsU2l6ZSJd''@;'; put 'put ''fSxmZWF0dXJlczpbZGEoW0NwLFVZXSldfSksY30pKCksYXU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCk7Y29uc3QgV1k9bmV3IFN0KCJJU19UT0dHTEUiKSxSVWU9e3Byb3ZpZGU6V1ksdXNlRmFjdG9yeTpmdW5jdGlvbiBJVWUoKXtyZXR1cm4gbmV3IGVpKCExKX19O2xldCBTaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu''@;'; put 'put ''dG9nZ2xlPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy50b2dnbGU9ZH0pKX1uZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFdZKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdy''@;'; put 'put ''YXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNyksYW8oaCxJZCw3KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jaGVja2JveD1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJp''@;'; put 'put ''bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIixudWxsPT1kLmNoZWNrYm94P251bGw6ZC5jaGVja2JveC5jb250cm9sRGlzYWJsZWQpKCJjbHItdG9nZ2xlLXdyYXBwZXIi''@;'; put 'put ''LGQudG9nZ2xlKX0sZmVhdHVyZXM6W2RhKFtDaCxSVWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkRIZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa0hlKSxZcigwKSxZcigxLDEpLGd0KDIsSUhlLDEsMCwibGFiZWwi''@;'; put 'put ''LDApKSwyJmEmJihmZSgyKSxNZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltiYSxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhLFNoLGQsaCxmLHYpLHRoaXMuY29u''@;'; put 'put ''dHJvbD1oLHRoaXMudG9nZ2xlPU19Z2V0IGNvbnRyb2xEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKTtjb25zdCBhPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFdZLG51bGwpO2EmJm51bGwhPT10aGlzLnRv''@;'; put 'put ''Z2dsZSYmYS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSxJZigiY2xyVG9nZ2xlIikpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJD''@;'; put 'put ''aGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsbnVsbCE9PWQudG9nZ2xlPyJzd2l0Y2giOm51bGwpfSxmZWF0dXJlczpbd2FdfSksY30pKCksQnk9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklu''@;'; put 'put ''bGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9Z2V0IGFsbENoZWNrYm94ZXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkJiYoIXRoaXMuYWRkaXRpb25h''@;'; put 'put ''bENvbnRyb2xzPy5sZW5ndGh8fHRoaXMuYWRkaXRpb25hbENvbnRyb2xzLmV2ZXJ5KGE9PmEuZGlzYWJsZWQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLmNoZWNrYm94ZXMubGVuZ3RoPyJncm91cCI6bnVs''@;'; put 'put ''bH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtY29udGFpbmVyIl0sWyJjbHItdG9nZ2xlLWNvbnRhaW5l''@;'; put 'put ''ciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLElkLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuY2hlY2tib3hlcz1mKX19LGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInJvbGUiLGQucm9sZSksVHIoImNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5hbGxDaGVja2JveGVzRGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W2RhKFtrZCxmMSxEZCxwN10pLHdhXSxuZ0Nv''@;'; put 'put ''bnRlbnRTZWxlY3RvcnM6TEhlLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xh''@;'; put 'put ''c3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJz''@;'; put 'put ''dWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi''@;'; put 'put ''c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShSSGUpLFlyKDApLGd0KDEsT0hlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksWXIoMywxKSxndCg0LFBIZSwyLDAsImRpdiIsMiko''@;'; put 'put ''NSxCSGUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxUcigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dI''@;'; put 'put ''ZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWR8fGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLExVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxhdSxCeCxhdV19KSxjfSkoKTtmdW5jdGlvbiBxZihjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/''@;'; put 'put ''Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IFJkPSgoKT0+e2NsYXNzIGN7Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9cWYoYSl9Z2V0IGlu''@;'; put 'put ''dmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMuX2ludmVyc2U9cWYoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXFmKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVy''@;'; put 'put ''biF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVtPXFmKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0s''@;'; put 'put ''aG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtYnVzeSIsITApLFRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5u''@;'; put 'put ''ZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9y''@;'; put 'put ''czp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxqeT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9''@;'; put 'put ''a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTt2YXIgYm09ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVkVSVElDQUw9InZlcnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQk9USD0iYm90aCIsY30oYm18fHt9KTtsZXQgZWRlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1mb2N1cygpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWxlbWVudFJlZi5uYXRp''@;'; put 'put ''dmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShpbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1c0l0ZW0iLCIiXV19KSxjfSkoKSx6eT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuZGlyZWN0aW9uPWJtLlZFUlRJQ0FMLHRoaXMuZm9jdXNPbkxvYWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEtyLHRoaXMuX2N1cnJlbnQ9MH1nZXQgZm9jdXNhYmxlSXRlbXMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5fZm9jdXNhYmxlSXRlbXM6dGhpcy5jbHJLZXlGb2N1c0l0ZW1zP3RoaXMuY2xyS2V5Rm9jdXNJdGVtcy50b0FycmF5KCk6W119c2V0IGZvY3VzYWJsZUl0ZW1zKGEpe0FycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoJiYodGhpcy5f''@;'; put 'put ''Zm9jdXNhYmxlSXRlbXM9YSx0aGlzLmluaXRpYWxpemVGb2N1cygpKX1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX2N1cnJlbnQhPT1h''@;'; put 'put ''JiYodGhpcy5fY3VycmVudD1hKX1nZXQgY3VycmVudEl0ZW0oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtc1t0aGlzLl9jdXJyZW50XX1nZXQgY3VycmVudEl0ZW1FbGVtZW50KCl7cmV0dXJuIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudD90aGlzLmN1cnJlbnRJdGVtLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQ6dGhpcy5jdXJyZW50SXRlbX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckl0ZW1VcGRhdGVzKCkpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh''@;'; put 'put ''PT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZUtleWJvYXJkRXZlbnQoYSl7aWYodGhpcy5jdXJyZW50SXRlbUVsZW1lbnQhPT1hLnRhcmdldCl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7dGhpcy5wb3NpdGlvbkluUmFuZ2UoZCkmJih0aGlzLmN1cnJlbnQ9ZCl9dGhp''@;'; put 'put ''cy5wcmV2S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudC0xKTp0aGlzLm5leHRLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQr''@;'; put 'put ''MSk6YS5jb2RlPT09Z2EuSG9tZT90aGlzLm1vdmVUbygwKTphLmNvZGU9PT1nYS5FbmQmJnRoaXMubW92ZVRvKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLFJZKGEpfXNldENsaWNrZWRJdGVtQ3VycmVudChhKXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTtk''@;'; put 'put ''Pi0xJiZ0aGlzLm1vdmVUbyhkKX1mb2N1c0N1cnJlbnQoKXt0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfW1vdmVUbyhhKXt0aGlzLnBvc2l0aW9uSW5SYW5nZShhKSYmKHRoaXMuY3VycmVudD1hLHRoaXMuZm9jdXNDdXJyZW50''@;'; put 'put ''KCkpfXBvc2l0aW9uSW5SYW5nZShhKXtyZXR1cm4gYT49MCYmYTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJyZW50LTE+PTB9Y3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJy''@;'; put 'put ''ZW50KzE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9aW5pdGlhbGl6ZUZvY3VzKCl7dGhpcy5mb2N1c2FibGVJdGVtcyYmdGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50Pj10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9dGhpcy5m''@;'; put 'put ''b2N1c2FibGVJdGVtcy5sZW5ndGgtMSksdGhpcy5mb2N1c09uTG9hZCYmKHRoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLmVtaXQoKSkpfW5leHRLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9STIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSBibS5WRVJU''@;'; put 'put ''SUNBTDpyZXR1cm4gZD09PWdhLkFycm93RG93bjtjYXNlIGJtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd1JpZ2h0O2Nhc2UgYm0uQk9USDpyZXR1cm4gZD09PWdhLkFycm93RG93bnx8ZD09PWdhLkFycm93UmlnaHQ7ZGVmYXVsdDpyZXR1cm4hMX19cHJldktleVByZXNzZWQoYSl7''@;'; put 'put ''Y29uc3QgZD1JMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGJtLlZFUlRJQ0FMOnJldHVybiBkPT09Z2EuQXJyb3dVcDtjYXNlIGJtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd0xlZnQ7Y2FzZSBibS5CT1RIOnJldHVybiBkPT09Z2EuQXJyb3dVcHx8ZD09PWdh''@;'; put 'put ''LkFycm93TGVmdDtkZWZhdWx0OnJldHVybiExfX1nZXRJdGVtUG9zaXRpb24oYSl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuZm9jdXNhYmxlSXRlbXMuaW5kZXhPZihhKTp0aGlzLmZvY3VzYWJsZUl0ZW1zLm1hcChkPT5kLm5hdGl2ZUVsZW1lbnQpLmluZGV4T2YoYSl9bGlz''@;'; put 'put ''dGVuRm9ySXRlbVVwZGF0ZXMoKXtyZXR1cm4gdGhpcy5jbHJLZXlGb2N1c0l0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5pbml0aWFsaXplRm9jdXMoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSkpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1cyIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGVkZSw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXlib2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246W05uLk5vbmUsImNsckRpcmVj''@;'; put 'put ''dGlvbiIsImRpcmVjdGlvbiJdLGZvY3VzT25Mb2FkOltObi5Ob25lLCJjbHJGb2N1c09uTG9hZCIsImZvY3VzT25Mb2FkIl0sZm9jdXNhYmxlSXRlbXM6W05uLk5vbmUsImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdl''@;'; put 'put ''In0sYXR0cnM6akhlLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjbGFzcyBPVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiEhdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5pbmNsdWRlcyhsKX1zZWxlY3QobCl7dGhpcy5h''@;'; put 'put ''ZGRJdGVtKGwpfXVuc2VsZWN0KGwpe3RoaXMucmVtb3ZlSXRlbShsKX1pc0VtcHR5KCl7cmV0dXJuISh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wKX1wb3AoKXtsZXQgbDtyZXR1cm4gdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCYmKGw9dGhpcy5tb2RlbFt0aGlzLm1v''@;'; put 'put ''ZGVsLmxlbmd0aC0xXSx0aGlzLnJlbW92ZUl0ZW0obCkpLGx9dG9TdHJpbmcobCxhPS0xKXtsZXQgZD0iIjtyZXR1cm4gdGhpcy5tb2RlbCYmKGE+LTE/dGhpcy5tb2RlbFthXSYmKGQrPWwmJnRoaXMubW9kZWxbYV1bbF0/dGhpcy5tb2RlbFthXVtsXTp0aGlzLm1vZGVsW2FdLnRvU3RyaW5n''@;'; put 'put ''KCkpOnRoaXMubW9kZWwuZm9yRWFjaChoPT57ZCs9bCYmaFtsXT9oW2xdOmgudG9TdHJpbmcoKSxkKz0iICJ9KSksZC50cmltKCl9YWRkSXRlbShsKXt0aGlzLmNvbnRhaW5zSXRlbShsKXx8KHRoaXMubW9kZWw9dGhpcy5tb2RlbHx8W10sdGhpcy5tb2RlbC5wdXNoKGwpKX1yZW1vdmVJdGVt''@;'; put 'put ''KGwpe2lmKG51bGw9PXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGE9dGhpcy5tb2RlbC5pbmRleE9mKGwpO2E+LTEmJnRoaXMubW9kZWwuc3BsaWNlKGEsMSksMD09PXRoaXMubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbD1udWxsKX19Y2xhc3MgUFVle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5tb2RlbD09PWx9c2VsZWN0KGwpe3RoaXMubW9kZWw9bH11bnNlbGVjdChsKXt0aGlzLmNvbnRhaW5zSXRlbShsKSYmKHRoaXMubW9kZWw9bnVsbCl9aXNFbXB0eSgpe3JldHVybiF0aGlzLm1vZGVsfXBvcCgpe2NvbnN0IGw9dGhpcy5tb2RlbDtyZXR1cm4gdGhpcy5tb2RlbD1udWxs''@;'; put 'put ''LGx9dG9TdHJpbmcobCl7cmV0dXJuIHRoaXMubW9kZWw/bCYmdGhpcy5tb2RlbFtsXT90aGlzLm1vZGVsW2xdOnRoaXMubW9kZWwudG9TdHJpbmcoKToiIn19Y2xhc3MgRlVlIGV4dGVuZHMgUFVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb2N1c0NoYW5nZWQ9''@;'; put 'put ''bmV3IGVpKG51bGwpfWdldCBmb2N1c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfXNlbGVjdChsKXt0aGlzLm1vZGVsIT09bCYmKHRoaXMubW9kZWw9bCx0aGlzLl9mb2N1c0NoYW5nZWQubmV4dChsKSl9fWxldCBIVWU9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnNob3dBbGxPcHRpb25zPSEwLHRoaXMuX2N1cnJlbnRJbnB1dD0iIix0aGlzLl9pbnB1dENoYW5nZWQ9bmV3IGVpKCIiKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkPW5ldyB5eCgxKSx0aGlzLmlucHV0Q2hhbmdlZD10aGlzLl9pbnB1''@;'; put 'put ''dENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnRJbnB1dCgpe3JldHVybiB0aGlzLl9jdXJyZW50SW5wdXR9c2V0IGN1cnJlbnRJbnB1dChhKXsiIj09PWEmJiF0aGlzLm11bHRpc2VsZWN0YWJsZSYmdGhpcy5zZXRTZWxlY3Rpb25WYWx1ZShudWxsKSx0aGlzLl9jdXJyZW50SW5w''@;'; put 'put ''dXQ9YSx0aGlzLl9pbnB1dENoYW5nZWQubmV4dChhKX1nZXQgc2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBtdWx0aXNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbCBpbnN0YW5jZW9mIE9VZX1z''@;'; put 'put ''ZWxlY3QoYSl7bnVsbD09YXx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXRvZ2dsZShhKXtudWxsIT1hJiYodGhpcy5zZWxl''@;'; put 'put ''Y3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSk/dGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKTp0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXVuc2VsZWN0KGEpe251bGw9PWF8fCF0aGlz''@;'; put 'put ''LnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX1zZXRTZWxlY3Rpb25WYWx1ZShhKXshdGhpcy5zZWxlY3Rpb25Nb2RlbHx8dGhpcy5z''@;'; put 'put ''ZWxlY3Rpb25Nb2RlbC5tb2RlbD09PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsJiYhYXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9YSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtaMWUoKCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnNlbGVjdGlvblNlcnZpY2U9aCx0aGlzLnBs''@;'; put 'put ''YXRmb3JtSWQ9Zix0aGlzLnBzZXVkb0ZvY3VzPW5ldyBGVWUsdGhpcy5vcHRpb25EYXRhPVtdLHRoaXMuaGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKSx0aGlzLnJlbmRlcmVyPWEuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNl''@;'; put 'put ''dCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IGxpc3Rib3goKXtyZXR1cm4gdGhpcy5fbGlzdGJveH1zZXQgbGlzdGJveChhKXt0aGlzLl9saXN0Ym94PWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCB0ZXh0''@;'; put 'put ''SW5wdXQoKXtyZXR1cm4gdGhpcy5fdGV4dElucHV0fXNldCB0ZXh0SW5wdXQoYSl7dGhpcy5fdGV4dElucHV0PWEsdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93biIsZD0+IXRoaXMuaGFuZGxlVGV4dElucHV0KGQpKSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Zm9jdXNJ''@;'; put 'put ''bnB1dCgpe3RoaXMudGV4dElucHV0JiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRleHRJbnB1dC5mb2N1cygpfWZvY3VzRmlyc3RBY3RpdmUoKXtpZih0aGlzLm9wdGlvbkRhdGEubGVuZ3RoPjApaWYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKSl0''@;'; put 'put ''aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbMF0pO2Vsc2V7bGV0IGE7YT10aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbFswXTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2Vs''@;'; put 'put ''ZWN0aW9uTW9kZWwubW9kZWw7Y29uc3QgZD10aGlzLm9wdGlvbkRhdGEuZmluZChoPT5oLnZhbHVlPT09YSk7dGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QoZHx8dGhpcy5vcHRpb25EYXRhWzBdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCJhdXRvIil9fWFkZE9wdGlvblZhbHVlcyhh''@;'; put 'put ''KXt0aGlzLm9wdGlvbkRhdGE9YX1oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YXx8KHRoaXMucHNldWRvRm9jdXMubW9kZWw9bnVsbCl9KX1tb3ZlRm9jdXNUbyhhKXtsZXQgZD10aGlzLm9wdGlvbkRhdGEuZmlu''@;'; put 'put ''ZEluZGV4KGg9PmguZXF1YWxzKHRoaXMucHNldWRvRm9jdXMubW9kZWwpKTthPT09d2guVVA/LTE9PT1kfHwwPT09ZD9kPXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMTpkLS06YT09PXdoLkRPV04mJigtMT09PWR8fGQ9PT10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE/ZD0wOmQrKyksdGhpcy5w''@;'; put 'put ''c2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhW2RdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCl9b3BlbkFuZE1vdmVUbyhhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm1vdmVGb2N1c1RvKGEpOih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBl''@;'; put 'put ''KFlmKDEpKS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMubW92ZUZvY3VzVG8oYSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9aGFuZGxlVGV4dElucHV0KGEpe2xldCBkPSExO2NvbnN0IGg9STIoYS5rZXkpO2lmKGEpc3dpdGNoKGgpe2Nhc2UgZ2EuRW50ZXI6dGhpcy50b2dnbGVTZXJ2''@;'; put 'put ''aWNlLm9wZW4mJnRoaXMucHNldWRvRm9jdXMubW9kZWwmJih0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS50b2dnbGUodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSk6dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlz''@;'; put 'put ''LnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKSxkPSEwKTticmVhaztjYXNlIGdhLlNwYWNlOnRoaXMudG9nZ2xlU2VydmljZS5vcGVufHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITAsZD0hMCk7YnJlYWs7Y2FzZSBnYS5BcnJvd1VwOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEp''@;'; put 'put ''LHRoaXMub3BlbkFuZE1vdmVUbyh3aC5VUCksZD0hMDticmVhaztjYXNlIGdhLkFycm93RG93bjp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8od2guRE9XTiksZD0hMDticmVhaztkZWZhdWx0OmEua2V5IT09Z2EuVGFiJiYoIXRoaXMuc2VsZWN0''@;'; put 'put ''aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGV8fGEua2V5IT09Z2EuQmFja3NwYWNlKSYmYS5rZXkhPT1nYS5Fc2NhcGUmJiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1yZXR1cm4gZH1zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbChhPSJzbW9v''@;'; put 'put ''dGgiKXt0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjphLGJsb2NrOiJjZW50ZXIiLGlubGluZToibmVhcmVzdCJ9KX1wcmV2ZW50Vmlld3BvcnRTY3JvbGxp''@;'; put 'put ''bmcoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5mb2N1c091dE9mQ29tcG9uZW50KGQpJiYo''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5jb21wb25lbnRDZFJlZiYmdGhpcy5jb21wb25lbnRDZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfSl9Zm9jdXNPdXRPZkNvbXBvbmVudChhKXtjb25zdCBkPWEucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4h''@;'; put 'put ''KHRoaXMudGV4dElucHV0LmNvbnRhaW5zKGQpfHx0aGlzLnRyaWdnZXIuY29udGFpbnMoZCl8fHRoaXMubGlzdGJveC5jb250YWlucyhkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHg4KSx4cihzYykseHIoSFVlKSx4cihpbykpfSxjLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpKTtsZXQgTlVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxFeSx2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1''@;'; put 'put ''MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLFlZLGF1LE8yLFZ4LGp5LGF1LE8yXX0pLGN9KSgpLEdMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3t9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pbnB1dC1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6R0hlLGRlY2xzOjEzLHZhcnM6Nyxjb25zdHM6''@;'; put 'put ''W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIs''@;'; put 'put ''ImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWUhlKSxZcigwKSxndCgxLCRIZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxZcig1LDEpLFlyKDYsMiksWXIoNywzKSxoZSgpLGd0KDgsS0hlLDEsMCwiY2RzLWljb24iLDQpKDkscUhlLDEsMCwiY2Rz''@;'; put 'put ''LWljb24iLDUpLGhlKCksZ3QoMTAsWEhlLDEsMCwibmctY29udGVudCIsMCkoMTEsSkhlLDEsMCwibmctY29udGVudCIsMCkoMTIsUUhlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLE1lKCJuZ0NsYXNz''@;'; put 'put ''IixkLmNvbnRyb2xDbGFzcygpKSxmZSg2KSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQp''@;'; put 'put ''KX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWjE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxHTCxkLGgsZix2KSx0aGlzLmluZGV4PTEsIm51bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxuICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xy''@;'; put 'put ''LW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAgJyl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm''@;'; put 'put ''VHIoImNsci1pbnB1dCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksdGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLFV5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c2VkPW5ldyBlaSghMSl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWQuYXNPYnNlcnZhYmxlKCl9c2V0''@;'; put 'put ''IGZvY3VzZWQoYSl7dGhpcy5fZm9jdXNlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxWVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsdGRlLEFzXX0pLGN9KSgpLEJVZT0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxCeCx6Y119KSxjfSkoKSxqVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCksR1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE5ZXX0pLGN9KSgpLGlkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29t''@;'; put 'put ''cG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoU2wsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZT1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh''@;'; put 'put ''KCksZ3QoMCxsTmUsMSwwLCJuZy10ZW1wbGF0ZSIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJFVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo''@;'; put 'put ''e2ltcG9ydHM6W1JhXX0pLGN9KSgpLHltPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci10YWJzIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxTNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTHl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHJUYWJMaW5rIGFuZCBjbHItdGFiLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNp''@;'; put 'put ''ZGUgb2YgYSBjbHItdGFicyIpO3N1cGVyKGEsZCksdGhpcy5pZkFjdGl2ZT1mLHRoaXMuaWQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmUuY3VycmVudD09PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxH''@;'; put 'put ''ZSh5bSw4KSxHZShGeSksR2UoZjcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdLFsiY2xyLXRhYi1jb250ZW50Il1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKTt2YXIgTTc9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSE9SSVpPTlRBTD0iaG9y''@;'; put 'put ''aXpvbnRhbCIsYy5WRVJUSUNBTD0idmVydGljYWwiLGN9KE03fHx7fSk7bGV0IHp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxheW91dD1NNy5IT1JJWk9OVEFMLHRoaXMuX2NoaWxkcmVuPVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9jaGlsZHJlbn1nZXQgYWN0''@;'; put 'put ''aXZlVGFiKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG92ZXJmbG93VGFicygpe3JldHVybiB0aGlzLmxheW91dD09PU03LlZFUlRJQ0FMP1tdOnRoaXMuY2hpbGRyZW4uZmlsdGVyKGE9PiEwPT09YS50YWJMaW5rLmluT3ZlcmZsb3cpfXJlZ2lzdGVyKGEp''@;'; put 'put ''e3RoaXMuX2NoaWxkcmVuLnB1c2goYSl9dW5yZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTtkPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShkLDEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxLVWU9MCxfbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJDb250ZW50SWR8fCh0aGlzLnRhYkNv''@;'; put 'put ''bnRlbnRJZD0iY2xyLXRhYi1jb250ZW50LSIrS1VlKyspfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IGFyaWFMYWJlbGxlZEJ5KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbmsu''@;'; put 'put ''aWQ9PT10aGlzLmlkKT8udGFiTGluaz8udGFiTGlua0lkfXNldCB0ZW1wbGF0ZVJlZihhKXt0aGlzLnZpZXdSZWY9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMudGFic1NlcnZp''@;'; put 'put ''Y2UudGFiQ29udGVudFZpZXdDb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWYpO2E+LTEmJnRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIucmVtb3ZlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2Uo''@;'; put 'put ''RnkpLEdlKHp4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWItY29udGVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGNOZSw3KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0saW5wdXRz''@;'; put 'put ''Ont0YWJDb250ZW50SWQ6W05uLk5vbmUsImlkIiwidGFiQ29udGVudElkIl19LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sidGFiQ29udGVudFByb2plY3RlZFJlZiIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwxLCJ0YWItY29udGVudCIsMywiaWQiLCJo''@;'; put 'put ''aWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsdU5lLDIsNiwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxxVWU9MDtjb25zdCAkWT1uZXcgU3QoIlRBQlNfSUQiKSxKVWU9e3Byb3ZpZGU6JFksdXNlRmFjdG9y''@;'; put 'put ''eTpmdW5jdGlvbiBYVWUoKXtyZXR1cm4iY2xyLXRhYnMtIitxVWUrK319O2xldCBRVWU9MCx3bT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMuZWw9aCx0aGlzLnRhYnNTZXJ2aWNlPU0sdGhpcy50''@;'; put 'put ''YWJzSWQ9RCx0aGlzLnRhYkxpbmtJZHx8KHRoaXMudGFiTGlua0lkPSJjbHItdGFiLWxpbmstIitRVWUrKyk7Y29uc3QgWj1mLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGlkZSk7dGhpcy50ZW1wbGF0ZVJlZkNvbnRhaW5lcj12LmNyZWF0ZUNvbXBvbmVudChaLHZvaWQgMCx2b2lkIDAsW1to''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnRdXSkuaW5zdGFuY2V9Z2V0IGluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy5faW5PdmVyZmxvdyYmdGhpcy50YWJzU2VydmljZS5sYXlvdXQhPT1NNy5WRVJUSUNBTH1zZXQgaW5PdmVyZmxvdyhhKXt0aGlzLl9pbk92ZXJmbG93PWF9Z2V0IGFkZExpbmtDbGFzc2VzKCl7''@;'; put 'put ''cmV0dXJuIXRoaXMuaW5PdmVyZmxvd31nZXQgYXJpYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbms9PT10aGlzKT8udGFiQ29udGVudD8udGFiQ29udGVudElkfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZp''@;'; put 'put ''Y2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IHRhYmluZGV4KCl7cmV0dXJuIHRoaXMuYWN0aXZlPzA6LTF9YWN0aXZhdGUoKXt0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxH''@;'; put 'put ''ZShGeSksR2UoSmkpLEdlKFc1KSxHZShEbyksR2UoengpLEdlKCRZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInRhYiIsInR5cGUiLCJidXR0b24iXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hY3RpdmF0ZSgpfSksMiZhJiYob3AoImlkIixkLnRhYkxpbmtJZCksaHIoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2xzKSgiYXJpYS1zZWxlY3RlZCIsZC5hY3RpdmUpKCJ0YWJpbmRleCIsZC50''@;'; put 'put ''YWJpbmRleCksVHIoImJ0biIsITApKCJidG4tbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoIm5hdi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgiYWN0aXZlIixkLmFjdGl2ZSkpfSxpbnB1dHM6e3RhYkxpbmtJZDpbTm4uTm9uZSwiaWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OltObi5Ob25l''@;'; put 'put ''LCJjbHJUYWJMaW5rSW5PdmVyZmxvdyIsImluT3ZlcmZsb3ciXX19KSxjfSkoKSxDbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsaC5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2UoRnkpLEdlKHp4KSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsd20sNyksYW8oaCxfbSw3KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC50YWJMaW5rPWYuZmlyc3QpLENpKGY9U2koKSkm''@;'; put 'put ''JihkLnRhYkNvbnRlbnQ9Zi5maXJzdCl9fSxmZWF0dXJlczpbZGEoW25VZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksYWRlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJBY3Rpb24iLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl19KSxjfSkoKSxLWT0oKCk9PntjbGFzcyBje31y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZHJvcGRv''@;'; put 'put ''d24tbWVudSIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkseDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaWZB''@;'; put 'put ''Y3RpdmVTZXJ2aWNlPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFic0lkPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJM''@;'; put 'put ''aW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlvdXQoYSl7T2JqZWN0LmtleXMoTTcpLm1hcChkPT5NN1tkXSkuaW5kZXhPZihhKT49MCYmKHRoaXMudGFic1NlcnZpY2UubGF5b3V0PWEpfWdldCB0YWJMaW5rRGlyZWN0''@;'; put 'put ''aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4tMX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmluZEluZGV4KGE9PmEuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5PdmVyZmxvdygpe3JldHVybiB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91''@;'; put 'put ''dD09PU03LlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0VsKGEpe3RoaXMuX3RhYk92ZXJmbG93RWw9YSYmYS5uYXRpdmVFbGVtZW50LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZhJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBvdmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihhPT4hYS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRWaWV3Q29udGFpbmVyKGEpe3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9YX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1sw''@;'; put 'put ''XSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3RpdmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Q''@;'; put 'put ''b3NpdGlvbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShhKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3Vy''@;'; put 'put ''cmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9dG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93bj0hMX1vcGVuT3ZlcmZsb3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlz''@;'; put 'put ''LmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNPdXQoYSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRh''@;'; put 'put ''YkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uXT09PWEucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlv''@;'; put 'put ''bi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGEsZCl7Y29uc3QgaD10aGlzLnRhYnNBY3Rpb25zLnNvbWUoZj0+Zi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSk7YS50YXJnZXQ9PT1kfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8aHx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFp''@;'; put 'put ''bnMoYS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1zZXRUYWJMaW5rRWxlbWVudHMoKXt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGE9PmEudGFiTGluayksdGhpcy50''@;'; put 'put ''YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMubWFwKGE9PmEuZWwubmF0aXZlRWxlbWVudCksdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJMaW5rRWxlbWVudHMucHVzaCguLi50aGlzLnRhYnNBY3Rpb25zLm1hcChhPT5hLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQpKX1saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygpe3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKHgyKHRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2Vz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMudGFic0FjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1lbnRzKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2Uoc2MpLEdlKHp4KSxHZSgkWSksR2UoaXMpKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsYWRlLDUsSmkpLGFvKGgsQ20sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQudGFic0FjdGlvbnM9ZiksQ2koZj1TaSgpKSYm''@;'; put 'put ''KGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKHp5LDcpLHFhKEtZLDUsSmkpLHFhKGROZSw3LERvKSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLENp''@;'; put 'put ''KGg9U2koKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbTm4uTm9uZSwiY2xyTGF5b3V0IiwibGF5''@;'; put 'put ''b3V0Il19LGZlYXR1cmVzOltkYShbZjcsengsSlVlXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczpmTmUsZGVjbHM6Nix2YXJzOjMsY29uc3RzOltbInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIiwiIl0sWyJ0YWJPdmVyZmxvd1RyaWdnZXIiLCIiXSxbInJvbGUiLCJ0YWJsaXN0Iiwi''@;'; put 'put ''Y2xyRGlyZWN0aW9uIiwiYm90aCIsMSwibmF2IiwzLCJjbHJGb2N1c0NoYW5nZSIsImZvY3Vzb3V0IiwiY2xyS2V5Rm9jdXMiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nSWYiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5hdi1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQi''@;'; put 'put ''XSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJk''@;'; put 'put ''cm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInNoYXBlIiwiZWxsaXBzaXMtaG9yaXpvbnRhbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0''@;'; put 'put ''Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtzYShoTmUpLGRlKDAsInVsIiwyKSxGdCgiY2xyRm9jdXNDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnRvZ2dsZU92ZXJmbG93''@;'; put 'put ''T25Qb3NpdGlvbih2KSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUodikpfSksZ3QoMSxnTmUsMiwxLCJuZy1jb250YWluZXIiLDMpKDIseU5lLDcsMTEsIm5nLWNvbnRhaW5lciIsNCksWXIoMyksaGUoKSxG''@;'; put 'put ''bCg0LG51bGwsMCl9MiZhJiYoTWUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksZmUoKSxNZSgibmdGb3JPZiIsZC50YWJMaW5rRGlyZWN0aXZlcyksZmUoKSxNZSgibmdJZiIsZC50YWJzU2VydmljZS5vdmVyZmxvd1RhYnMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltucyxi''@;'; put 'put ''YSxOMSxycyx6eSxLWV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhUMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxPMixBcywkVWUsWVksTzJdfSksY30pKCkscVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0''@;'; put 'put ''aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWFk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25z''@;'; put 'put ''PTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJs''@;'; put 'put ''ZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFw''@;'; put 'put ''c2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNpYmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5l''@;'; put 'put ''eHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxRWT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuY29udGVudElkPU11KCksdGhpcy5fY29sbGFwc2Vk''@;'; put 'put ''Q2hhbmdlZD1uZXcgS3IoITApLHRoaXMuX3N1Yj1hLmNvbGxhcHNlZENoYW5nZWQuc3Vic2NyaWJlKHY9Pnt0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmVtaXQodil9KX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUo''@;'; put 'put ''YSl7dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZT1hfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZD1hfWdldCBoYXNOYXZHcm91cHMoKXtyZXR1cm4gdGhpcy5fbmF2''@;'; put 'put ''R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlLm5hdkdyb3VwQ291bnQ+MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5fbmF2SWNvblNlcnZpY2UuaGFzSWNvbnN9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmNvbGxhcHNpYmxlP3RoaXMuY29sbGFwc2VkPyJmYWxzZSI6InRydWUi''@;'; put 'put ''Om51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWIudW5zdWJzY3JpYmUoKX10b2dnbGVCeUJ1dHRvbigpe3RoaXMuY29sbGFwc2VkPSF0aGlzLmNvbGxhcHNlZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSlkpLEdlKFhZKSxHZShxWSksR2Uo''@;'; put 'put ''aXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXZlcnRpY2FsLW5hdiJdXSxob3N0QXR0cnM6WzEsImNsci12ZXJ0aWNhbC1uYXYiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlzLWNvbGxhcHNlZCIsZC5jb2xsYXBz''@;'; put 'put ''ZWQpKCJoYXMtbmF2LWdyb3VwcyIsZC5oYXNOYXZHcm91cHMpKCJoYXMtaWNvbnMiLGQuaGFzSWNvbnMpfSxpbnB1dHM6e3RvZ2dsZUxhYmVsOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdlRvZ2dsZUxhYmVsIiwidG9nZ2xlTGFiZWwiXSxjb2xsYXBzaWJsZTpbTm4uTm9uZSwiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZDb2xsYXBzaWJsZSIsImNvbGxhcHNpYmxlIl0sY29sbGFwc2VkOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZCIsImNvbGxhcHNlZCJdfSxvdXRwdXRzOntfY29sbGFwc2VkQ2hhbmdlZDoiY2xyVmVydGljYWxOYXZDb2xsYXBzZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W0pZLFhZLHFZXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LXRyaWdnZXIiLDMsIm9uLWNvbGxhcHNlIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwibmF2LWNvbnRlbnQiLDMsImlkIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2Vy''@;'; put 'put ''LWljb24iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxfTmUsMiw2LCJidXR0b24iLDApLGRlKDEsImRpdiIsMSksWXIoMiks''@;'; put 'put ''Z3QoMyx3TmUsMSwyLCJidXR0b24iLDIpLGhlKCkpLDImYSYmKE1lKCJuZ0lmIixkLmNvbGxhcHNpYmxlKSxmZSgpLE1lKCJpZCIsZC5jb250ZW50SWQpLGZlKDIpLE1lKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W2JhLHJzXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KSxjfSkoKSxlRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBXbn1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCgh''@;'; put 'put ''MCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHRHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IFduLGgm''@;'; put 'put ''JnhkKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRXMpLEdlKGVHLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGljYWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczpNTmUsbmdDb250ZW50U2VsZWN0b3JzOkVOZSxk''@;'; put 'put ''ZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHhOZSksWXIoMCksZGUoMSwic3BhbiIsMCksWXIoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtUcy5hZGRJY29ucyhFeSxrMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxPMixCTCxPMixBcyxCTF19KSxjfSkoKSxpWmU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbalVlLEdVZSxlWmUsb2RlLEJVZV19KSxjfSkoKSxaeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQjBle2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZSh2WSksR2UodnMsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0sZmVh''@;'; put 'put ''dHVyZXM6W3dhXX0pLGN9KSgpLEtMPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpO2NvbnN0IG9aZT0vZCsuK20rLit5Ky9pLHNaZT0v''@;'; put 'put ''bSsuK2QrLit5Ky9pLGxaZT0vZCt8bSt8eSsvaSxjWmU9L1xkKy9nLHVaZT0vTW9iaS9pLGRaZT0vXHUyMDBmL2csbkc9IllZWVkiLHFMPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixuR119LGFHPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkRE''@;'; put 'put ''IixuR119LGhaZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0OltuRywiTU0iLCJERCJdfTtmdW5jdGlvbiBsZGUoYyxsKXtyZXR1cm4gbmV3IERhdGUoYyxsKzEsMCkuZ2V0RGF0ZSgpfWNsYXNzIHZaZXtjb25zdHJ1Y3RvcihsLGE9ITEsZD0hMSxoPSExLGY9ITEsdj0hMSxNPSExLEQ9ITEp''@;'; put 'put ''e3RoaXMuZGF5TW9kZWw9bCx0aGlzLmlzVG9kYXlzRGF0ZT1hLHRoaXMuaXNFeGNsdWRlZD1kLHRoaXMuaXNEaXNhYmxlZD1oLHRoaXMuaXNTZWxlY3RlZD1mLHRoaXMuaXNGb2N1c2FibGU9dix0aGlzLmlzUmFuZ2VTdGFydERheT1NLHRoaXMuaXNSYW5nZUVuZERheT1EfWdldCB0YWJJbmRl''@;'; put 'put ''eCgpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlPzA6LTF9fWNsYXNzIExke2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5kYXRlPWR9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGgmJnRo''@;'; put 'put ''aXMuZGF0ZT09PWwuZGF0ZX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX1pbmNyZW1lbnRCeShsKXtjb25zdCBhPW5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZStsKTtyZXR1cm4gbmV3IExkKGEuZ2V0RnVsbFll''@;'; put 'put ''YXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfWNsb25lKCl7cmV0dXJuIG5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfXRvQ29tcGFyaXNvblN0cmluZygpe3JldHVybmAke3RoaXMueWVhcn0ke3RoaXMucGFkKHRoaXMubW9udGgpfSR7dGhpcy5wYWQodGhpcy5k''@;'; put 'put ''YXRlKX1gfXRvRGF0ZVN0cmluZygpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3dlZWtkYXk6ImxvbmciLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSl9aXNCZWZvcmUobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0''@;'; put 'put ''ZSgpLmdldFRpbWUoKTw9bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPGw/LnRvRGF0ZSgpLmdldFRpbWUoKX1pc0FmdGVyKGwsYT0hMSl7cmV0dXJuIGE/dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk+PWw/LnRvRGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0''@;'; put 'put ''ZSgpLmdldFRpbWUoKT5sPy50b0RhdGUoKS5nZXRUaW1lKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6YCR7bH1gfX1jbGFzcyBiWmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5jYWxlbmRhcj1sLHRoaXMuc2VsZWN0ZWREYXk9YSx0aGlzLnNlbGVjdGVkRW5kRGF5PWQs''@;'; put 'put ''dGhpcy5mb2N1c2FibGVEYXk9aCx0aGlzLnRvZGF5PWYsdGhpcy5maXJzdERheU9mV2Vlaz12LHRoaXMuZXhjbHVkZWREYXRlcz1NLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9j''@;'; put 'put ''YWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9dXBkYXRlU2VsZWN0ZWREYXkobCl7dGhpcy5zZXRTZWxlY3RlZERh''@;'; put 'put ''eSh0aGlzLnNlbGVjdGVkRGF5LCExKSx0aGlzLnNlbGVjdGVkRGF5PWwsdGhpcy5zZXRTZWxlY3RlZERheShsLCEwKX11cGRhdGVTZWxlY3RlZEVuZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITEpLHRoaXMuc2VsZWN0ZWRFbmREYXk9bCx0aGlzLnNl''@;'; put 'put ''dFNlbGVjdGVkRGF5KGwsITApfWluaXRpYWxpemVDYWxlbmRhclZpZXcoKXtjb25zdCBsPXRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aCgpLGE9dGhpcy5jYWxlbmRhci5uZXh0TW9udGgoKSxkPXRoaXMubnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcodGhpcy5jYWxlbmRhci55ZWFy''@;'; put 'put ''LHRoaXMuY2FsZW5kYXIubW9udGgpLGg9NDItKHRoaXMuY2FsZW5kYXIuZGF5cy5sZW5ndGgrZCk7bGV0IGY9W10sdj1bXTtkPjAmJihmPXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwuZGF5cy5zbGljZSgtMSpkKSwhMCwhMSkpLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9dGhpcy5nZW5l''@;'; put 'put ''cmF0ZURheVZpZXdNb2RlbHModGhpcy5jYWxlbmRhci5kYXlzLCExLCEwKSxoPjAmJih2PXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGEuZGF5cy5zbGljZSgwLGgpLCEwLCExKSksdGhpcy5fY2FsZW5kYXJWaWV3PXRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoZix0aGlzLmN1cnJNb250''@;'; put 'put ''aERheVZpZXdzLHYpLHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCksdGhpcy5pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl9aXNEYXRlRXhjbHVkZWQobCl7Y29uc3R7bWluRGF0ZTphLG1heERhdGU6ZH09dGhpcy5leGNsdWRlZERhdGVzLGg9YS50b0NvbXBhcmlzb25TdHJpbmcoKSxmPWQu''@;'; put 'put ''dG9Db21wYXJpc29uU3RyaW5nKCksdj1sLnRvQ29tcGFyaXNvblN0cmluZygpO3JldHVybiEodj49aCYmdjw9Zil9Z2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwsYSxkKXtjb25zdCBoPWwubWFwKGY9Pm5ldyB2WmUoZiwhMSxhLHRoaXMuaXNEYXRlRXhjbHVkZWQoZiksITEsITEpKTtyZXR1cm4g''@;'; put 'put ''ZCYmdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSkmJihoW3RoaXMudG9kYXkuZGF0ZS0xXS5pc1RvZGF5c0RhdGU9ITApLGh9bnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcobCxhKXtjb25zdCBkPWZ1bmN0aW9uIHBaZShjLGwsYSl7cmV0dXJuIG5ldyBEYXRl''@;'; put 'put ''KGMsbCxhKS5nZXREYXkoKX0obCxhLDEpO3JldHVybiBkPj10aGlzLmZpcnN0RGF5T2ZXZWVrP2QtdGhpcy5maXJzdERheU9mV2Vlazo3K2QtdGhpcy5maXJzdERheU9mV2Vla31pc0RheUluQ2FsZW5kYXJWaWV3KGwpe3JldHVybiEhdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIobCl9''@;'; put 'put ''Z2VuZXJhdGVDYWxlbmRhclZpZXcobCxhLGQpe2NvbnN0IGg9Wy4uLmwsLi4uYSwuLi5kXSxmPVtdO2ZvcihsZXQgdj0wO3Y8Njt2KyspZlt2XT1oLnNsaWNlKDcqdiw3Kih2KzEpKTtyZXR1cm4gZn1pbml0aWFsaXplU2VsZWN0ZWREYXkoKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWREYXksITApLHRoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMCl9aW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpe3RoaXMuZm9jdXNhYmxlRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5mb2N1c2FibGVEYXkpP3RoaXMuc2V0Rm9jdXNhYmxlRmxh''@;'; put 'put ''Zyh0aGlzLmZvY3VzYWJsZURheSwhMCk6dGhpcy5zZWxlY3RlZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZERheS5j''@;'; put 'put ''bG9uZSgpKTp0aGlzLnNlbGVjdGVkRW5kRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZEVuZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRW5kRGF5LmNsb25l''@;'; put 'put ''KCkpOnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnRvZGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMudG9kYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMudG9kYXkuY2xvbmUoKSk6KHRoaXMuZm9jdXNhYmxlRGF5PW5ldyBMZCh0aGlzLmNhbGVuZGFyLnllYXIsdGhp''@;'; put 'put ''cy5jYWxlbmRhci5tb250aCwxNSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKSl9c2V0Rm9jdXNhYmxlRmxhZyhsLGEpe2wmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2wuZGF0ZS0xXS5pc0ZvY3VzYWJsZT1hKX1zZXRTZWxlY3RlZERheShsLGEpe2wmJnRo''@;'; put 'put ''aXMuaXNEYXlJbkNhbGVuZGFyVmlldyhsKSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbD8uZGF0ZS0xXS5pc1NlbGVjdGVkPWEpfX1sZXQgWng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXpl''@;'; put 'put ''TG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3JldHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93''@;'; put 'put ''KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVE''@;'; put 'put ''YXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhpcy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250''@;'; put 'put ''aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygpfWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuV2lkZSkuc2xpY2UoKSxoPWpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuTmFycm93KS5zbGlj''@;'; put 'put ''ZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IHY9MDt2PDc7disrKWEucHVzaCh7ZGF5OmRbdl0sbmFycm93Omhbdl19KTtpZihmPjApe2NvbnN0IHY9YS5zcGxpY2UoMCxmKTthLnB1c2goLi4udil9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJy''@;'; put 'put ''ZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkPXpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXpVKHRoaXMubG9jYWxlLGQwLlN0''@;'; put 'put ''YW5kYWxvbmUsZGwuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiB4X2UoYyl7cmV0dXJuIG8xKGMpW2VjLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7''@;'; put 'put ''dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiBNTShjLGwpe3JldHVybiBDMihvMShjKVtlYy5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUsQ2QuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihCZikpfSxjLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIE9ke2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVh''@;'; put 'put ''ciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVuZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBPZCh0aGlzLnllYXItMSwxMSk6bmV3IE9kKHRo''@;'; put 'put ''aXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3JldHVybiAxMT09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhcisxLDApOm5ldyBPZCh0aGlzLnllYXIsdGhpcy5tb250aCsxKX1wcmV2aW91c1llYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhci0xLHRoaXMubW9udGgpfW5l''@;'; put 'put ''eHRZZWFyKCl7cmV0dXJuIG5ldyBPZCh0aGlzLnllYXIrMSx0aGlzLm1vbnRoKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPWxkZSh0aGlzLnllYXIsdGhpcy5tb250aCk7dGhpcy5kYXlzPUFycmF5KGwpLmZpbGwobnVsbCkubWFwKChhLGQpPT5uZXcgTGQodGhpcy55ZWFy''@;'; put 'put ''LHRoaXMubW9udGgsZCsxKSl9fWxldCBNaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pc1JhbmdlUGlja2VyPSExLHRoaXMuaGFzQWN0aW9uQnV0dG9ucz0hMSx0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgV24sdGhp''@;'; put 'put ''cy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2U9bmV3IFduLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlPW5ldyBXbix0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2U9bmV3IFduLHRoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXc9bmV3IFduLHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2U9bmV3IFdu''@;'; put 'put ''fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl90b2RheX1nZXQgZGlzcGxheWVkQ2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBzZWxl''@;'; put 'put ''Y3RlZEVuZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzT25DYWxl''@;'; put 'put ''bmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZERheUNoYW5nZS5hc09ic2VydmFibGUoKS5waXBlKEd1KGE9PnRoaXMuZm9jdXNlZERheT1hKSl9Z2V0''@;'; put 'put ''IHJlZnJlc2hDYWxlbmRhclZpZXcoKXtyZXR1cm4gdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldy5hc09ic2VydmFibGUoKX1ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoYSx7ZW1pdEV2ZW50OmR9PXtlbWl0RXZlbnQ6ITB9KXtpZih0aGlzLmlzUmFuZ2VQaWNrZXIpe2NvbnN0e3N0YXJ0RGF0''@;'; put 'put ''ZTpoLGVuZERhdGU6Zn09YTtoJiZmPyh0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCksdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpKToobnVsbCE9PWYmJnRoaXMuc2V0U2VsZWN0ZWRFbmREYXkoZixkKSxudWxsIT09aCYmdGhpcy5zZXRTZWxlY3RlZERheShoLGQpKX1lbHNlIHRoaXMuc2V0''@;'; put 'put ''U2VsZWN0ZWREYXkoYSxkKTt0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3Lm5leHQoKX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmZvY3VzZWREYXk9bnVsbCx0aGlzLmluaXRpYWxpemVUb2RheXNEYXRlKCksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9dGhpcy5zZWxlY3RlZERheT9uZXcg''@;'; put 'put ''T2QodGhpcy5zZWxlY3RlZERheS55ZWFyLHRoaXMuc2VsZWN0ZWREYXkubW9udGgpOm5ldyBPZCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCl9Y2hhbmdlTW9udGgoYSl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIueWVh''@;'; put 'put ''cixhKSl9Y2hhbmdlWWVhcihhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZChhLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm1vbnRoKSl9bW92ZVRvTmV4dE1vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0TW9udGgo''@;'; put 'put ''KSl9bW92ZVRvUHJldmlvdXNNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNNb250aCgpKX1tb3ZlVG9OZXh0WWVhcigpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubmV4dFll''@;'; put 'put ''YXIoKSl9bW92ZVRvUHJldmlvdXNZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c1llYXIoKSl9bW92ZVRvQ3VycmVudE1vbnRoKCl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSl8''@;'; put 'put ''fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1tb3ZlVG9TcGVjaWZpY01vbnRoKGEpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFy''@;'; put 'put ''KGEpfHx0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZChhLnllYXIsYS5tb250aCkpfWluY3JlbWVudEZvY3VzRGF5KGEpe3RoaXMuaG92ZXJlZERheT10aGlzLmZvY3VzZWREYXk9dGhpcy5mb2N1c2VkRGF5LmluY3JlbWVudEJ5KGEpLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlz''@;'; put 'put ''RGF5SW5DYWxlbmRhcih0aGlzLmZvY3VzZWREYXkpP3RoaXMuX2ZvY3VzZWREYXlDaGFuZ2UubmV4dCh0aGlzLmZvY3VzZWREYXkpOnRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMuZm9jdXNlZERheS55ZWFyLHRoaXMuZm9jdXNlZERheS5tb250aCkpLHRoaXMuX2ZvY3Vz''@;'; put 'put ''T25DYWxlbmRhckNoYW5nZS5uZXh0KCl9cmVzZXRTZWxlY3RlZERheSgpe3RoaXMuc2VsZWN0ZWREYXk9dGhpcy5wZXJzaXN0ZWREYXRlLHRoaXMuc2VsZWN0ZWRFbmREYXk9dGhpcy5wZXJzaXN0ZWRFbmREYXRlfWNvbnZlcnREYXRlVG9EYXlNb2RlbChhKXtyZXR1cm4gbmV3IExkKGEuZ2V0''@;'; put 'put ''RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfXNldFNlbGVjdGVkRGF5KGEsZCl7dGhpcy5zZWxlY3RlZERheT1hLGQmJnRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLm5leHQoYSl9c2V0U2VsZWN0ZWRFbmREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRW5kRGF5PWEsZCYmdGhpcy5f''@;'; put 'put ''c2VsZWN0ZWRFbmREYXlDaGFuZ2UubmV4dChhKX1zZXREaXNwbGF5ZWRDYWxlbmRhcihhKXt0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0VxdWFsKGEpfHwodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9YSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5uZXh0KCkpfWluaXRpYWxpemVU''@;'; put 'put ''b2RheXNEYXRlKCl7dGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fdG9kYXk9bmV3IExkKHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldEZ1bGxZZWFyKCksdGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0TW9udGgoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXREYXRlKCkpfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5wbGF0Zm9ybUlkPWR9''@;'; put 'put ''Zm9jdXNDZWxsKGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXg9IjAiXScpO2QmJmQuZm9jdXMoKX0p''@;'; put 'put ''fSl9Zm9jdXNJbnB1dChhKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9PmEuZm9jdXMoKSkpfWVsZW1lbnRJc0ZvY3VzZWQoYSl7cmV0dXJuIHRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50''@;'; put 'put ''LmFjdGl2ZUVsZW1lbnQ9PT1hfW5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCl7cmV0dXJuIHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKGFtKCksJGwoKCk9PnRsKHRoaXMucGxhdGZvcm1JZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoeHIoV2EpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksY2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IExkKDAsMCwxKSxtYXhEYXRlOm5l''@;'; put 'put ''dyBMZCg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PXFMLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD1hLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFs''@;'; put 'put ''aXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihh''@;'; put 'put ''KXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcCh2PT5wYXJzZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IExkKGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IExkKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0''@;'; put 'put ''W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgTGQoOTk5OSwxMSwzMSl9c2V0UmFuZ2VPcHRpb25zKGEpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy52YWxpZGF0ZURhdGVSYW5nZU9wdGlvbnMoYSk7dGhpcy5kYXRlUmFuZ2VPcHRpb25zPWR8fFtdfWdldFJhbmdlT3B0aW9ucygpe3JldHVybiB0aGlzLmRhdGVSYW5nZU9wdGlvbnN9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgp''@;'; put 'put ''KSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0cmluZygpOiIwIitkLHY9aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09cUw/Zit0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRl''@;'; put 'put ''bGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PWFHP3YrdGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0''@;'; put 'put ''ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtjb25zdCBkPWEubWF0Y2goY1plKTtpZighZHx8MyE9PWQubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0W2gsZix2XT1kO3JldHVybiB0aGlz''@;'; put 'put ''LmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1xTD90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGYsaCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09YUc/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixoLGYpOnRoaXMudmFsaWRhdGVBbmRHZXREYXRlKGgsZix2KX12YWxpZGF0ZURhdGVSYW5n''@;'; put 'put ''ZU9wdGlvbnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYT8uZm9yRWFjaChoPT57MiE9PWg/LnZhbHVlPy5sZW5ndGh8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoPy52YWx1ZVswXSl8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''dG9TdHJpbmcuY2FsbChoPy52YWx1ZVsxXSl8fGQucHVzaChoKX0pLGR9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9b1plLnRlc3QoYSk/''@;'; put 'put ''cUw6c1plLnRlc3QoYSk/YUc6aFplLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNlKGRaZSwiIikuc3BsaXQobFplKTtkJiY0PT09''@;'; put 'put ''ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgp''@;'; put 'put ''e3JldHVybiBoPjAmJmg8PWxkZShhLGQpfXZhbGlkYXRlQW5kR2V0RGF0ZShhLGQsaCl7Y29uc3QgZj0rYSx2PStkLTEsTT0raDtpZighdGhpcy5pc1ZhbGlkTW9udGgodil8fCF0aGlzLmlzVmFsaWREYXRlKGYsdixNKSlyZXR1cm4gbnVsbDtjb25zdCBEPWZ1bmN0aW9uIGdaZShjKXtpZihj''@;'; put 'put ''Pjk5OTl8fGM+MTAwJiZjPDk5OXx8YzwxMClyZXR1cm4tMTtpZihjPjk5OSlyZXR1cm4gYztjb25zdCBsPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTtsZXQgZD1jKzEwMCpNYXRoLmZsb29yKGwvMTAwKTtyZXR1cm4gZD5sKzIwJiYoZC09MTAwKSxkfShmKTtyZXR1cm4tMSE9PUQ/bmV3IERh''@;'; put 'put ''dGUoRCx2LE0pOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFp4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWXk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Rv''@;'; put 'put ''dWNoZWRDaGFuZ2U9bmV3IFduLHRoaXMuX2RpcnR5Q2hhbmdlPW5ldyBXbn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXJ0eUNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXJ0eUNoYW5nZS5hc09ic2VydmFibGUoKX1t''@;'; put 'put ''YXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZENoYW5nZS5uZXh0KCl9bWFya0FzRGlydHkoKXt0aGlzLl9kaXJ0eUNoYW5nZS5uZXh0KCl9c2V0RGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZD1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMub25TZWxlY3REYXk9bmV3IEtyfWdldCBk''@;'; put 'put ''YXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr''@;'; put 'put ''ZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9Z2V0IGlzUmFuZ2VTdGFydERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNS''@;'; put 'put ''YW5nZVBpY2tlciYmdGhpcy5kYXlWaWV3Py5kYXlNb2RlbD8udG9Db21wYXJpc29uU3RyaW5nKCk9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnRvQ29tcGFyaXNvblN0cmluZygpfWdldCBpc1JhbmdlRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9aG92ZXJMaXN0ZW5lcigpe3RoaXMuZGF5Vmll''@;'; put 'put ''dy5pc0Rpc2FibGVkfHwodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsKX1vbkRheVZpZXdGb2N1cygpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5PXRoaXMuZGF5Vmlldy5kYXlNb2RlbH1zZWxlY3REYXko''@;'; put 'put ''KXt0aGlzLmRheVZpZXcuaXNEaXNhYmxlZHx8dGhpcy5vblNlbGVjdERheS5lbWl0KHRoaXMuZGF5Vmlldy5kYXlNb2RlbCl9aXNJblJhbmdlKCl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KTohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXksITApKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''R2UoTWgpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXkiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLmhvdmVyTGlzdGVuZXIoKX0pLDImYSYm''@;'; put 'put ''VHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6W05uLk5vbmUsImNsckRheVZpZXciLCJkYXlWaWV3Il19LG91dHB1dHM6e29uU2VsZWN0RGF5OiJzZWxlY3REYXkifSxkZWNsczoyLHZhcnM6MTksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9j''@;'; put 'put ''dXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdGb2N1cygpfSksTGUoMSksaGUoKSksMiZhJiYoVHIo''@;'; put 'put ''ImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdl''@;'; put 'put ''KCkpKCJpcy1zdGFydC1yYW5nZSIsZC5pc1JhbmdlU3RhcnREYXkpKCJpcy1lbmQtcmFuZ2UiLGQuaXNSYW5nZUVuZERheSksaHIoInRhYmluZGV4IixkLmRheVZpZXcudGFiSW5kZXgpKCJhcmlhLWN1cnJlbnQiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGU/ImRhdGUiOiJmYWxzZSIpKCJhcmlh''@;'; put 'put ''LWxhYmVsIixkLmRheVN0cmluZykoImFyaWEtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSxmZSgpLERyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2''@;'; put 'put ''LE0sRCl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9kYXRlSU9TZXJ2aWNlPWYsdGhpcy5fZWxSZWY9dix0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU0sdGhp''@;'; put 'put ''cy5fdG9nZ2xlU2VydmljZT1ELHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVuZGFy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBzZWxlY3RlZEVuZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChJMihhLmtleSkpe2Nhc2UgZ2EuQXJy''@;'; put 'put ''b3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIGdhLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcp''@;'; put 'put ''O2JyZWFrO2Nhc2UgZ2EuQXJyb3dMZWZ0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''LmluY3JlbWVudEZvY3VzRGF5KDEpfX1zZXRTZWxlY3RlZERheShhKXtjb25zdCBkPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zLGg9dGhpcy51cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKTt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2Vs''@;'; put 'put ''ZWN0ZWREYXlDaGFuZ2VkKGgse2VtaXRFdmVudDohZH0pLGR8fCh0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCksdGhpcy52YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpKX1pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+''@;'; put 'put ''e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXND''@;'; put 'put ''ZWxsKHRoaXMuX2VsUmVmKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlZnJlc2hDYWxlbmRhclZpZXcuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKX0pKX12YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpeyh0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl8fCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBp''@;'; put 'put ''Y2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmKHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9dXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoYSl7Y29uc3QgZD10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fHxudWxsLGg9dGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI7bGV0IGY9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheXx8bnVsbDtyZXR1cm4gaD8hZHx8ZCYmZnx8ZCYmYT8uaXNCZWZvcmUoZCk/KHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSks''@;'; put 'put ''ZiYmKGY9dm9pZCAwLHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoZikpKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGEpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSksaD97c3RhcnREYXRl''@;'; put 'put ''OnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fXJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpe3RoaXMuY2FsZW5kYXJWaWV3TW9k''@;'; put 'put ''ZWwudXBkYXRlU2VsZWN0ZWREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheSh0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbD1uZXcgYlplKHRoaXMuY2FsZW5kYXIsdGhpcy5zZWxlY3RlZERheSx0aGlzLnNlbGVjdGVkRW5kRGF5LHRoaXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRoaXMu''@;'; put 'put ''X2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlPZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoWngpLEdlKE1oKSxHZShTbSksR2UoY2cpLEdlKEppKSxHZShZeSksR2Uo''@;'; put 'put ''c2MpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1si''@;'; put 'put ''cm9sZSIsInByZXNlbnRhdGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXItcm93Iiw0LCJuZ0ZvciIsIm5nRm9y''@;'; put 'put ''T2YiXSxbMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsInNlbGVjdERheSIsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJihkZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGd0KDIsVE5lLDMsMiwidGgiLDIpLGhlKCksZ3QoMyxrTmUsMiwxLCJ0ciIsMyksaGUoKSksMiZhJiYoZmUoMiksTWUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksZmUoKSxNZSgibmdGb3JPZiIsZC5jYWxlbmRhclZpZXdN''@;'; put 'put ''b2RlbC5jYWxlbmRhclZpZXcpKX0sZGVwZW5kZW5jaWVzOltucyxjZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFhMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSxhJiYodGhpcy5faXNVc2VyQWdlbnRN''@;'; put 'put ''b2JpbGU9dVplLnRlc3QoYS5kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWEuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVyV2lkdGg8NzY4JiZ0aGlzLl9pc1Vz''@;'; put 'put ''ZXJBZ2VudE1vYmlsZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb0c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSl7c3VwZXIoYSxZeCxkLHYsZixoKSx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuY29udHJvbD12LHRoaXMuY29udGFpbmVyPU0sdGhpcy5kYXRlSU9TZXJ2aWNlPUQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Wix0aGlz''@;'; put 'put ''LmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1yZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Y2UsdGhpcy5wbGF0Zm9ybUlkPWJlLHRoaXMuZm9jdXNTZXJ2aWNlPUVlLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1CZSx0aGlzLmluZGV4PTF9Z2V0IGRpc2FibGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT90aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR8fCEhdGhpcy5jb250cm9sPy5jb250cm9sPy5kaXNhYmxlZDpudWxsfXNldCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1D''@;'; put 'put ''b250cm9sU2VydmljZS5zZXREaXNhYmxlZChxZihhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIHRsKHRoaXMucGxh''@;'; put 'put ''dGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9y''@;'; put 'put ''VXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQo''@;'; put 'put ''KXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlP''@;'; put 'put ''U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBpZih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsdl09YS52YWx1ZS5zcGxp''@;'; put 'put ''dCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCt2KSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfWRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpe3JldHVybiEhdGhpcy5jb250cm9sfXNldERhdGUoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcg''@;'; put 'put ''RGF0ZShhKSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUoYSksdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWV8fCh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZT1hKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBp''@;'; put 'put ''Y2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX1wb3B1''@;'; put 'put ''bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpe3RoaXMuY29udGFpbmVyfHwodGhpcy5kYXRlSU9TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKGNnKSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihN''@;'; put 'put ''aCksdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoWEwpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihZeSkpfXByb2Nlc3NJbml0aWFsSW5wdXRzKCl7dGhpcy5kYXRlcGlj''@;'; put 'put ''a2VySGFzRm9ybUNvbnRyb2woKT90aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRoaXMuY29udHJvbC52YWx1ZSkpOnRoaXMudXBkYXRlRGF0ZSh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSl9dXBkYXRlRGF0ZShhLGQ9''@;'; put 'put ''ITEpe2NvbnN0IGg9dGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpO2lmKGQ/dGhpcy5lbWl0RGF0ZU91dHB1dChoKTp0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlKXtjb25zdCBmPWg/bmV3IExkKGguZ2V0RnVsbFllYXIoKSxoLmdl''@;'; put 'put ''dE1vbnRoKCksaC5nZXREYXRlKCkpOm51bGw7dGhpcy51cGRhdGVEYXlNb2RlbChmKX10aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTt0aGlzLnVzaW5nTmF0aXZl''@;'; put 'put ''RGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiZk''@;'; put 'put ''IT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCksdGhpcy52YWxpZGF0ZURhdGVSYW5nZSgpfWVsc2UgdGhpcy5yZW5kZXJlci5zZXRQcm9w''@;'; put 'put ''ZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIiwiIil9Z2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTtyZXR1cm4gdGhpcy5kYXRl''@;'; put 'put ''SU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGQpfXJldHVybiBudWxsfWVtaXREYXRlT3V0cHV0KGEpeyFmdW5jdGlvbiBtWmUoYyxsKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJmwgaW5zdGFuY2VvZiBEYXRlJiZjLmdldEZ1bGxZZWFyKCk9PT1sLmdldEZ1bGxZZWFy''@;'; put 'put ''KCkmJmMuZ2V0TW9udGgoKT09PWwuZ2V0TW9udGgoKSYmYy5nZXREYXRlKCk9PT1sLmdldERhdGUoKX0oYSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSk/KHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGEpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWEpOiFhJiZ0aGlzLnByZXZpb3VzRGF0ZUNoYW5n''@;'; put 'put ''ZSYmKHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPW51bGwpfWxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoJGwo''@;'; put 'put ''KCk9PiF0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZWxlbWVudElzRm9jdXNlZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSkpKTpudWxsfWxpc3Rl''@;'; put 'put ''bkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy51c2VyU2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZShhPy50b0RhdGUoKSwhMCkpfWxpc3RlbkZvclRvdWNoQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZp''@;'; put 'put ''Y2UudG91Y2hlZENoYW5nZS5waXBlKCRsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpfWxpc3RlbkZvckRpcnR5Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJv''@;'; put 'put ''bFNlcnZpY2UuZGlydHlDaGFuZ2UucGlwZSgkbCgoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSl9bGlzdGVuRm9ySW5wdXRSZWZvY3VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoJGwoYT0+ISFhJiYhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikpLnN1YnNjcmliZSgoKT0+dGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9''@;'; put 'put ''dmFsaWRhdGVEYXRlUmFuZ2UoKXtpZih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKXtjb25zdCBhPXRoaXMubmdDb250cm9sU2VydmljZT8uY29udHJvbCxkPXRoaXMubmdDb250cm9sU2VydmljZT8uYWRkaXRpb25hbENvbnRyb2xzO3RoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5pc0JlZm9yZSh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSwhMCkmJihhPy5oYXNFcnJvcigicmFuZ2UiKXx8ZD8uc29tZShmPT5mLmhhc0Vycm9yKCJyYW5nZSIpKSkmJihhLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFs''@;'; put 'put ''aWRpdHkoe2VtaXRFdmVudDohMX0pLGQuZm9yRWFjaChmPT57Zj8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKEppKSxHZShF''@;'; put 'put ''byksR2UoZDEsMTApLEdlKENzKCgpPT5ZeCksOCksR2UoY2csOCksR2UoTWgsOCksR2UoWEwsOCksR2UoWXksOCksR2UoaW8pLEdlKFV5LDgpLEdlKFNtKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1''@;'; put 'put ''cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRGb2N1c1N0YXRlcygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVmFsdWVDaGFuZ2UoZi50YXJnZXQpfSksMiZhJiYob3AoImRpc2FibGVk''@;'; put 'put ''IixkLmRpc2FibGVkKSxocigicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJUZXh0KSgidHlwZSIsZC5pbnB1dFR5cGUpKX0saW5wdXRzOntwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxkZGU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''YyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1''@;'; put 'put ''c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/''@;'; put 'put ''LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRW5kRGF0ZT10''@;'; put 'put ''aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi''@;'; put 'put ''Y2xyRW5kRGF0ZSIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJzaXplIixkLmlucHV0U2l6ZSksVHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltObi5Ob25lLCJjbHJFbmREYXRlIiwi''@;'; put 'put ''ZGF0ZSJdfSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJFbmREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLEpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBvR3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcigh''@;'; put 'put ''MSl9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMudHJpZ2dlckNv''@;'; put 'put ''bnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRy''@;'; put 'put ''b2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1pbnB1dCIsITApfSxpbnB1dHM6e2RhdGU6W05uLk5vbmUsImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5n''@;'; put 'put ''ZToiY2xyRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSkoKSxoZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRh''@;'; put 'put ''dGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlk''@;'; put 'put ''YXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9''@;'; put 'put ''dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1Z''@;'; put 'put ''cyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInNpemUiLGQuaW5wdXRTaXplKSxfZCgidGV4dC1hbGlnbiIsInJpZ2h0''@;'; put 'put ''IiksVHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltObi5Ob25lLCJjbHJTdGFydERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsclN0YXJ0RGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSko''@;'; put 'put ''KSxHeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGlvbj1UZFsiYm90dG9tLWxlZnQiXSx0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9Z2V0IGlzRGF5Vmlldygpe3JldHVybiJEQVlWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0''@;'; put 'put ''dXJuIllFQVJWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc01vbnRoVmlldygpe3JldHVybiJNT05USFZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iTU9OVEhWSUVXIn1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5f''@;'; put 'put ''Y3VycmVudFZpZXc9IllFQVJWSUVXIn1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpLGZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5fdmlld01h''@;'; put 'put ''bmFnZXJTZXJ2aWNlPXYsdGhpcy5jb21tb25TdHJpbmdzPU0sdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg9dGhpcy5jYWxlbmRhck1vbnRoSW5kZXh9Z2V0IG1vbnRoTmFtZXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlfWdldCBjYWxlbmRhck1v''@;'; put 'put ''bnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRofWdldCBjYWxlbmRhckVuZE1vbnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1nZXQgeWVhckF0''@;'; put 'put ''dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1nZXQgY3VycmVudENhbGVuZGFyWWVhcigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX1nZXQgY3VycmVudENhbGVuZGFyTW9udGgoKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCl9Z2V0''@;'; put 'put ''SXNSYW5nZVN0YXJ0TW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5zZWxlY3RlZERheT8ubW9udGh9Z2V0SXNSYW5nZUVuZE1vbnRoKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXIm''@;'; put 'put ''JmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9ZZWFyVmlldygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2Uu''@;'; put 'put ''Zm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1JMihhLmtleSk7ZD09PWdhLkFycm93VXAmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PjE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC09Mix0aGlzLl9kYXRlcGlja2Vy''@;'; put 'put ''Rm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1nYS5BcnJvd0Rvd24mJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDEwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0Nl''@;'; put 'put ''bGwodGhpcy5fZWxSZWYpKTpkPT09Z2EuQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCsrLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09''@;'; put 'put ''PWdhLkFycm93TGVmdCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC0tLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSl9fWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFy''@;'; put 'put ''PT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLmNhbGVuZGFyRW5kTW9udGhJbmRleH1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGg9YX1jaGFuZ2VNb250aChhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlTW9udGgoYSks''@;'; put 'put ''dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfWdldFRhYkluZGV4KGEpe3JldHVybiBhPT09dGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg/MDotMX1uZXh0WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9OZXh0WWVhcigpfXByZXZpb3VzWWVh''@;'; put 'put ''cigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c1llYXIoKX1jdXJyZW50WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9DdXJyZW50TW9udGgoKX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu''@;'; put 'put ''aXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIm''@;'; put 'put ''JmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS5t''@;'; put 'put ''b250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVh''@;'; put 'put ''ciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFy''@;'; put 'put ''PT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVh''@;'; put 'put ''ciYmdGhpcy5jYWxlbmRhclllYXI8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpJiYodGhpcy5j''@;'; put 'put ''YWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aHx8dGhpcy5jYWxlbmRh''@;'; put 'put ''clllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShaeCksR2UoTWgpLEdlKFNt''@;'; put 'put ''KSxHZShKaSksR2UoR3kpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb250aHBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRv''@;'; put 'put ''d24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmVHIoIm1vbnRocGlja2VyIiwhMCl9LGRlY2xzOjEzLHZhcnM6MTAsY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIiwiaW4tbW9udGhwaWNrZXIiXSxbMSwieWVhci12aWV3LXN3aXRjaGVyIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u''@;'; put 'put ''IiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsIm1vbnRocyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5k''@;'; put 'put ''LXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aCIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvWWVhclZpZXcoKX0pLExlKDMpLGhlKCkoKSxkZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBk''@;'; put 'put ''LnByZXZpb3VzWWVhcigpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudFllYXIoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBkLm5leHRZZWFyKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCkoKSgpLGRlKDExLCJkaXYiLDgpLGd0KDEyLEROZSwyLDEyLCJidXR0b24iLDkpLGhlKCkpLDImYSYmKGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0''@;'; put 'put ''dHJTdHJpbmcpLGZlKCksRHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3Vz''@;'; put 'put ''TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMiksTWUoIm5nRm9yT2YiLGQubW9udGhOYW1lcykpfSxkZXBlbmRlbmNpZXM6W25zLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxj''@;'; put 'put ''fSkoKTtjbGFzcyBXeHtjb25zdHJ1Y3RvcihsKXt0aGlzLnllYXI9bCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVyYXRlWWVhclJhbmdlKCl9Z2V0IG1pZGRsZVllYXIoKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHRE''@;'; put 'put ''ZWNhZGUoKXtyZXR1cm4gbmV3IFd4KHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IFd4KHRoaXMueWVhci0xMCl9Y3VycmVudERlY2FkZSgpe3JldHVybiBuZXcgV3goKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKGwpe3JldHVybiB0aGlzLnllYXJS''@;'; put 'put ''YW5nZS5pbmRleE9mKGwpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgYT10aGlzLnllYXItdGhpcy55ZWFyJTEwO3RoaXMueWVhclJhbmdlPXRoaXMuZ2VuZXJhdGVSYW5nZShhLGErMTApfWdlbmVyYXRlUmFuZ2UobCxhKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmEtbH0sKGQs''@;'; put 'put ''aCk9PmgrbCl9fWxldCBnZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncz12LHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IFd4KHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj10aGlzLmNhbGVuZGFyWWVhcn1nZXQgc2VsZWN0ZWRTdGFydFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5''@;'; put 'put ''Py55ZWFyfWdldCBzZWxlY3RlZEVuZFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9aXND''@;'; put 'put ''dXJyZW50Q2FsZW5kYXJZZWFyKGEpe3JldHVybiBhPT09KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldElzUmFuZ2VTdGFydFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl''@;'; put 'put ''bGVjdGVkRGF5Py55ZWFyfWdldElzUmFuZ2VFbmRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9k''@;'; put 'put ''YXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9STIoYS5rZXkpO2Q9PT1nYS5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMikpOmQ9PT1nYS5BcnJvd0Rvd24/''@;'; put 'put ''KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDIpKTpkPT09Z2EuQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMSkpOmQ9PT1nYS5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNy''@;'; put 'put ''ZW1lbnRGb2N1c1llYXJCeSgtMSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3Zl''@;'; put 'put ''cmVkWWVhcj1hfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCl9Y3VycmVudERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVh''@;'; put 'put ''cil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2Rl''@;'; put 'put ''bC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLl9mb2N1c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZ''@;'; put 'put ''ZWFyOnRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLnNlbGVjdGVkRW5kWWVhcik/dGhpcy5zZWxlY3RlZEVuZFllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5taWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWE/MDotMX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmdGhpcy5zZWxlY3RlZEVuZFllYXI/YT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuc2VsZWN0ZWRFbmRZZWFyOiEoIXRoaXMuX2RhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcnx8dGhpcy5zZWxlY3RlZEVuZFllYXIpJiZhPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyKX1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNl''@;'; put 'put ''cnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9aW5jcmVtZW50Rm9jdXNZZWFyQnkoYSl7dGhpcy5fZm9jdXNlZFllYXI9dGhpcy5fZm9jdXNlZFllYXIrYSx0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1hPjA/dGhpcy55''@;'; put 'put ''ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KEdlKE1oKSxHZShHeSksR2UoU20pLEdlKEppKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIteWVhcnBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEm''@;'; put 'put ''YSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmVHIoInllYXJwaWNrZXIiLCEwKX0sZGVjbHM6MTMsdmFyczo5LGNvbnN0czpbWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLCJ5ZWFyLXJhbmdlIiwzLCJjbGljayJdLFsxLCJ5ZWFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u''@;'; put 'put ''IiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsInllYXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4geWVhciIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1y''@;'; put 'put ''YW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhciIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo''@;'; put 'put ''ZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvRGF5VmlldygpfSksTGUoMyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJl''@;'; put 'put ''dmlvdXNEZWNhZGUoKX0pLEd0KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnREZWNhZGUoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBkLm5leHREZWNhZGUoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksZ3QoMTIsSU5lLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUoMyksVXUoIiAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlWzBdLCIgLSAiLGQueWVh''@;'; put 'put ''clJhbmdlTW9kZWwueWVhclJhbmdlW2QueWVhclJhbmdlTW9kZWwueWVhclJhbmdlLmxlbmd0aC0xXSwiICIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCks''@;'; put 'put ''aHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKDIpLE1lKCJuZ0Zvck9mIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZSkp''@;'; put 'put ''fSxkZXBlbmRlbmNpZXM6W25zLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWZ9Z2V0IG1vbnRoQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dCx7Q0FMRU5EQVJfTU9OVEg6dGhpcy5jYWxlbmRhck1vbnRo''@;'; put 'put ''fSl9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhck1v''@;'; put 'put ''bnRoKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzQWJicmV2aWF0ZWRbdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRoXX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvTW9udGhWaWV3KCl9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmV4dE1vbnRo''@;'; put 'put ''KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRNb250aCgpfXByZXZpb3VzTW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNNb250aCgpfWN1cnJlbnRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9D''@;'; put 'put ''dXJyZW50TW9udGgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoR3kpLEdlKE1oKSxHZShaeCksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheXBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwi''@;'; put 'put ''YXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRheXBpY2tlciIsITApfSxkZWNsczoxOCx2YXJzOjE0LGNvbnN0czpbWzEsImNsci1zci1vbmx5Il0sWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aHBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQp''@;'; put 'put ''ezEmYSYmKGRlKDAsImRpdiIsMCksTGUoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9Nb250aFZpZXcoKX0pLExlKDUpLGhlKCksZGUoNiwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksTGUoNyksaGUoKSgpLGRlKDgsImRpdiIsNSkoOSwiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNNb250aCgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpLGRlKDExLCJidXR0''@;'; put 'put ''b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50TW9udGgoKX0pLEd0KDEyLCJjZHMtaWNvbiIsOCksaGUoKSxkZSgxMywiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dE1vbnRoKCl9KSxHdCgxNCwiY2RzLWljb24iLDkpLGhl''@;'; put 'put ''KCkoKSgpLEd0KDE1LCJjbHItY2FsZW5kYXIiKSxkZSgxNiwiZGl2IiwwKSxMZSgxNyksaGUoKSksMiZhJiYoZmUoKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksZmUoMyksaHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9u''@;'; put 'put ''dGhBdHRyU3RyaW5nKSxmZSgpLERyKCIgIixkLmNhbGVuZGFyTW9udGgsIiAiKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0dHJTdHJpbmcpLGZlKCksRHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwi''@;'; put 'put ''LGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJy''@;'; put 'put ''ZW50TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMyksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKSl9LGRlcGVuZGVuY2llczpbcnMsdWRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx2ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlz''@;'; put 'put ''LmNvbW1vblN0cmluZ3M9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1mfWFwcGx5KCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Pyh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh''@;'; put 'put ''eSxlbmREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpOiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZERheSYmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpLHRoaXMudG9nZ2xlU2Vy''@;'; put 'put ''dmljZS5vcGVuPSExfWNhbmNlbCgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKHNjKSxHZShNaCks''@;'; put 'put ''R2UoWXkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItYWN0aW9ucyJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGVwaWNrZXItYWN0aW9ucyIsITApfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6''@;'; put 'put ''W1sxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsKCl9KSxMZSgxKSxo''@;'; put 'put ''ZSgpLGRlKDIsImJ1dHRvbiIsMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFwcGx5KCl9KSxMZSgzKSxoZSgpKSwyJmEmJihmZSgpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSksY30pKCksYmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUlPU2VydmljZT1mfWdldCBpc01vbnRoVmll''@;'; put 'put ''dygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdl''@;'; put 'put ''dCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyJiYhIXRoaXMuZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0Fj''@;'; put 'put ''dGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldFJhbmdlT3B0aW9ucygpfW9uUmFuZ2VPcHRpb25TZWxlY3QoYSl7Y29uc3QgZD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFs''@;'; put 'put ''dWVbMF0pLGg9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzFdKTt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpkLGVuZERhdGU6aH0se2VtaXRFdmVudDohdGhpcy5o''@;'; put 'put ''YXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKEd5KSxHZShNaCksR2UoY2cpKX0sYy5cdTAyNzVjbXA9VnIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLGQuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCksVHIoImRhdGVwaWNrZXIiLCEwKSgiaGFzLXJhbmdlLW9wdGlvbiIsZC5oYXNSYW5nZU9wdGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLGQuaGFzQWN0aW9uQnV0dG9ucykpfSxmZWF0dXJlczpbZGEoW1NtXSldLGRlY2xzOjMsdmFy''@;'; put 'put ''czoyLGNvbnN0czpbWyJjYWxlbmRhclZpZXciLCIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsImNsci1kYXRlLXJhbmdlLXBpY2tlci1uYXYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbImNs''@;'; put 'put ''clZlcnRpY2FsTmF2TGluayIsIiIsImhyZWYiLCJqYXZhc2NyaXB0OnZvaWQoMCkiLCJ0YWJpbmRleCIsIjAiLDMsImtleXVwLmVudGVyIiwiY2xpY2siXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmZ3QoMCxPTmUsNSwyLCJuZy1jb250YWluZXIiLDEpKDEs''@;'; put 'put ''Vk5lLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxJYyksMiZhKXtjb25zdCBoPWhhKDIpO01lKCJuZ0lmIixkLmhhc1JhbmdlT3B0aW9ucykoIm5nSWZFbHNlIixoKX19LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUVksdEcsZmRlLGdkZSxtZGUsdmRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko''@;'; put 'put ''KSxZeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlKXtpZihzdXBlcihxZSxFZSxiZSxCZSksdGhpcy5yZW5kZXJlcj1hLHRoaXMuZWxlbT1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlPWYsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dix0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmNvbW1vblN0cmluZ3M9Wix0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1jZSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZp''@;'; put 'put ''Y2U9YmUsdGhpcy5sYXlvdXRTZXJ2aWNlPUVlLHRoaXMubmdDb250cm9sU2VydmljZT1CZSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1xZSx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHJlLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShydD0+e3RoaXMuZm9jdXM9cnR9''@;'; put 'put ''KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e00ubWFya0FzVG91Y2hlZCgpfSkpLGYpe2NvbnN0IHJ0PWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Zi5oYXNBY3Rpb25CdXR0b25zPWYuaXNSYW5nZVBpY2tlcj0iY2xy''@;'; put 'put ''LWRhdGUtcmFuZ2UtY29udGFpbmVyIj09PXJ0fX1zZXQgc2hvd0FjdGlvbkJ1dHRvbnMoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmIWE/Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhY3Rpb24gYnV0dG9u''@;'; put 'put ''cywgW3Nob3dBY3Rpb25CdXR0b25zXSBjYW5ub3QgYmUgdHVybmVkIG9mZi4iKTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zPWF9c2V0IGNsclBvc2l0aW9uKGEpe2EmJlRkW2FdJiYodGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb249VGRbYV0pfXNl''@;'; put 'put ''dCByYW5nZU9wdGlvbnMoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldFJhbmdlT3B0aW9ucyhhKX1zZXQgbWluKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/''@;'; put 'put ''LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21pbl0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5n''@;'; put 'put ''ZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWluYCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRo''@;'; put 'put ''aXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21heF0gaW5wdXQgb25s''@;'; put 'put ''eSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWF4YCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNhYmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9Z2V0IGlzUmFuZ2VQaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uu''@;'; put 'put ''aXNSYW5nZVBpY2tlcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKToodGhp''@;'; put 'put ''cy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbChhKXtp''@;'; put 'put ''ZihhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYS50b0RhdGUoKSk7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxF''@;'; put 'put ''Q1RFRF9EQVRFOmR9KX1yZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbH1saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKHgyKHRoaXMu''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKGE9PntpZih0aGlzLmlzRW5hYmxlZCl7Y29uc3QgZD10aGlzLmdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpLGg9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0''@;'; put 'put ''ZShoLCJhcmlhLWxhYmVsIixkKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJ0aXRsZSIsZCl9fSl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9ZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpe3RoaXMu''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLmNsckRhdGVJbnB1dCYmY29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGFuZCBjbHJFbmREYXRlIGlucHV0cyIpLHRoaXMuY2xyU3Rh''@;'; put 'put ''cnREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsclN0YXJ0RGF0ZSBpbnB1dCIpLHRoaXMuY2xyRW5kRGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11''@;'; put 'put ''c3QgY29udGFpbiBjbHJFbmREYXRlIGlucHV0IikpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFbyksR2UoSmkpLEdlKHNjKSxHZShNaCksR2UoWEwpLEdlKFl5KSxHZShjZyksR2UoaXMpLEdlKFV5KSxHZShHeSksR2UoRGQpLEdlKENwLDgp''@;'; put 'put ''LEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250YWluZXIiXSxbImNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxKTCw1KSxhbyhoLGhkZSw1''@;'; put 'put ''KSxhbyhoLGRkZSw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jbHJEYXRlSW5wdXQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2xyU3RhcnREYXRlSW5wdXQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2xyRW5kRGF0ZUlucHV0PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7aWYoMSZhJiZxYShCTmUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5hY3Rpb25CdXR0b249aC5maXJzdCl9fSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1kYXRlLWNvbnRhaW5lciIsITApKCJjbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIixkLmlzSW5wdXREYXRlRGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0saW5wdXRzOntzaG93QWN0aW9uQnV0dG9uczoic2hvd0FjdGlvbkJ1dHRvbnMiLGNsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiIscmFuZ2VPcHRpb25zOiJy''@;'; put 'put ''YW5nZU9wdGlvbnMiLG1pbjoibWluIixtYXg6Im1heCJ9LGZlYXR1cmVzOltkYShbQ2gsWngsRGQsVXksZjEsY2csTWgsWEwsWXksR3ksa2RdKSx2ZChbb2ddKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOnpOZSxkZWNsczoxNCx2YXJzOjE1LGNvbnN0czpbWyJhY3Rpb25CdXR0b24iLCIiXSxb''@;'; put 'put ''NCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsclBvcG92ZXJBbmNob3IiLCIiLDEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIi''@;'; put 'put ''LCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiLDQsIm5nSWYiXSxbImNka1RyYXBGb2N1cyIsIiIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWlj''@;'; put 'put ''b24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMSwiZGF0ZS1yYW5nZS1zZXBhcmF0b3IiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQt''@;'; put 'put ''Z3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIl0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2RrVHJhcEZvY3VzIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xy''@;'; put 'put ''LXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShqTmUpLFlyKDApLGd0KDEsVU5lLDEsMCwibGFi''@;'; put 'put ''ZWwiLDEpLGRlKDIsImRpdiIsMikoMywiZGl2IiwzKSg0LCJkaXYiLDQpLGd0KDUsWk5lLDUsMCwibmctY29udGFpbmVyIiwxKSxZcig2LDEpLGd0KDcsV05lLDMsMSwiYnV0dG9uIiw1KSg4LFlOZSwxLDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsNiksaGUoKSxndCg5LEdOZSwx''@;'; put 'put ''LDAsImNkcy1pY29uIiw3KSgxMCwkTmUsMSwwLCJjZHMtaWNvbiIsOCksaGUoKSxndCgxMSxLTmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMixxTmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMyxYTmUsMSwwLCJuZy1jb250ZW50IiwxKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJl''@;'; put 'put ''bCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKCksTWUoIm5nSWYiLGQuaXNSYW5nZVBpY2tlciksZmUoMiksTWUoIm5nSWYiLGQuaXNFbmFibGVkKSxmZSgpLE1lKCJjbHJQb3BvdmVyQ29u''@;'; put 'put ''dGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5wb3BvdmVyUG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCks''@;'; put 'put ''ZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxaeSxQeCxOeCxIeCxycyxkcyxiZGVdLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLGN9KSgpLHNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZh''@;'; put 'put ''bHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8aClyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6''@;'; put 'put ''ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+ZilyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShHZShjZyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXSxbIiIsImNsclN0YXJ0RGF0ZSIsIiJdLFsiIiwiY2xyRW5kRGF0ZSIsIiJdXSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmgwLHVzZUV4aXN0aW5nOmMsbXVsdGk6ITB9XSldfSks''@;'; put 'put ''Y30pKCkseVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxFeSxMT2UsT09lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0''@;'; put 'put ''czpbUmEsS0wsQngsTzIsVngsQXMsYXUsb2RlXX0pLGN9KSgpO25ldyBTdCgiQ2xyRmlsZU1lc3NhZ2VzVGVtcGxhdGVDb250ZXh0Iik7bGV0IHdaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoUE9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsYXUsYXVdfSksY30pKCkseWRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKHYsZCxhLGgpLHRoaXMuaWZDb250''@;'; put 'put ''cm9sU3RhdGVTZXJ2aWNlPXYsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShNPT50aGlzLmZvY3VzPU0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGQpLEdlKENwLDgpLEdl''@;'; put 'put ''KGYxKSxHZShVeSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxfZGUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5p''@;'; put 'put ''bnB1dD1mLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItZm9ybS1j''@;'; put 'put ''b250cm9sLXJlYWRvbmx5IixkLmlucHV0LnJlYWRvbmx5KSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEoW1V5LGtkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpuVmUsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250''@;'; put 'put ''cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWzEsImNsci1pbnB1dC1ncm91cC1hY3Rpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImNs''@;'; put 'put ''aWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwic20iXSxbMSwiY2xyLW51bWJlci1pbnB1dC1zZXBhcmF0b3IiXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCJzbSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xl''@;'; put 'put ''Iiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4''@;'; put 'put ''Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24i''@;'; put 'put ''XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh0VmUpLFlyKDApLGd0KDEsclZlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFlyKDUsMSksZGUoNiwiZGl2Iiw0KSg3LCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZC5pbnB1dC5zdGVwRG93bigpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksR3QoOSwiZGl2Iiw3KSxkZSgxMCwiYnV0dG9uIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5wdXQuc3RlcFVwKCl9KSxHdCgxMSwiY2RzLWljb24iLDgpLGhlKCkoKSgpLGd0KDEy''@;'; put 'put ''LGlWZSwxLDAsImNkcy1pY29uIiw5KSgxMyxhVmUsMSwwLCJjZHMtaWNvbiIsMTApLGhlKCksZ3QoMTQsb1ZlLDEsMCwibmctY29udGVudCIsMCkoMTUsc1ZlLDEsMCwibmctY29udGVudCIsMCkoMTYsbFZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''IWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLE1lKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxUcigiY2xyLWZvY3VzIixkLmZvY3VzKSxmZSgzKSxNZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMyksTWUoImRpc2Fi''@;'; put 'put ''bGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtpZihzdXBlcihkLHlkZSxoLGYsdixNKSx0aGlzLmZv''@;'; put 'put ''Y3VzU2VydmljZT1hLHRoaXMuY29udHJvbD1mLHRoaXMuZWw9TSx0aGlzLmluZGV4PTEsIWEpdGhyb3cgbmV3IEVycm9yKCJjbHJOdW1iZXJJbnB1dCByZXF1aXJlcyBiZWluZyB3cmFwcGVkIGluIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj4iKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJlYWRvbmx5Iil9dHJpZ2dlckZvY3VzKCl7IXRoaXMucmVhZG9ubHkmJnRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMCl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLnJlYWRv''@;'; put 'put ''bmx5fHwoc3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITEpKX1zdGVwVXAoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcFVwKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2''@;'; put 'put ''ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9c3RlcERvd24oKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcERvd24oKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcg''@;'; put 'put ''RXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoVXksOCksR2UoRG8pLEdlKERzKSxHZShkMSwxMCks''@;'; put 'put ''R2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImNsck51bWJlcklucHV0IiwiIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGQudHJpZ2dlckZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZUcigiY2xyLWlucHV0IiwhMCkoImNsci1udW1iZXItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLENaZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgsRk9lLEhPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpO25ldyBT''@;'; put 'put ''dCh2b2lkIDApO2xldCB4WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKE5PZSxWT2UsdmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSxsRz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxkcyw3KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVsPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsyJmEmJlRyKCJjbHItcmFkaW8td3JhcHBlciIsITApfSxmZWF0dXJlczpbZGEoW0NoXSldLG5nQ29udGVudFNlbGVjdG9yczp1VmUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGNWZSksWXIoMCksWXIoMSwx''@;'; put 'put ''KSxndCgyLGRWZSwxLDAsImxhYmVsIiwwKSksMiZhJiYoZmUoMiksTWUoIm5nSWYiLCFkLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbYmEsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNHPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEs''@;'; put 'put ''bEcsZCxoLGYsdil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSYWRpbyIsIiJdXSxmZWF0dXJlczpb''@;'; put 'put ''d2FdfSksY30pKCksRVplPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0''@;'; put 'put ''YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExLHRoaXMuX2dlbmVyYXRlZElkPU11KCl9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJ''@;'; put 'put ''bml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKSx0aGlzLnNldEFyaWFMYWJlbGxlZEJ5KCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucmFkaW9zLmxlbmd0aD8icmFkaW9ncm91cCI6bnVsbH1zZXRBcmlhTGFiZWxsZWRCeSgpe2NvbnN0IGE9dGhpcy5ncm91cExhYmVsPy5uYXRpdmVF''@;'; put 'put ''bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKTthP3RoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP2E6bnVsbDoodGhpcy5ncm91cExhYmVsPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2dlbmVyYXRlZElkKSx0aGlzLmFyaWFMYWJlbGxlZEJ5PXRo''@;'; put 'put ''aXMucmFkaW9zLmxlbmd0aD90aGlzLl9nZW5lcmF0ZWRJZDpudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFk''@;'; put 'put ''aW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLGRzLDcsSmkpLGFvKGgsY0csNSkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuZ3JvdXBMYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo4''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIixkLnJvbGUpKCJhcmlhLWxhYmVsbGVkYnkiLGQuYXJpYUxhYmVsbGVkQnkpLFRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQu''@;'; put 'put ''Y29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbZGEoW2YxLGtkLERkLHA3XSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpmVmUsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsx''@;'; put 'put ''LCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJz''@;'; put 'put ''dGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFt''@;'; put 'put ''YXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGhWZSksWXIoMCksZ3QoMSxwVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSxZcigzLDEpLGd0KDQsZ1ZlLDIsMCwiZGl2IiwyKSg1LF9WZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwm''@;'; put 'put ''JmQuYWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWR8fGQuc2hvd0ludmFsaWQpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOlt3dSxiYSxkcyxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7''@;'; put 'put ''dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LEJ4LEFzLGF1XX0pLGN9KSgpLEFaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxhdSxCeCxBcyxhdV19KSxjfSkoKSwkeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9s''@;'; put 'put ''Q2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShh''@;'; put 'put ''PT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgbXgsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJDbGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENwLDgpLEdlKERkKSxHZShmMSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8o''@;'; put 'put ''aCxteCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJv''@;'; put 'put ''bD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q1ZlLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5l''@;'; put 'put ''ciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24i''@;'; put 'put ''LCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJd''@;'; put 'put ''LFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHdWZSksWXIoMCksZ3QoMSxTVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2''@;'; put 'put ''IiwxKSgzLCJkaXYiLDIpLFlyKDQsMSksZ3QoNSxNVmUsMSwwLCJjZHMtaWNvbiIsMykoNix4VmUsMSwwLCJjZHMtaWNvbiIsNCksaGUoKSxndCg3LEVWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsVFZlLDEsMCwibmctY29udGVudCIsMCkoOSxBVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgp''@;'; put 'put ''KSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixk''@;'; put 'put ''LnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxFNz0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLCR5LGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSl9LGMuXHUw''@;'; put 'put ''Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNlbGVjdCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1zZWxlY3QiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGtaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSx3ZGU9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIHc3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpEVmUsZGVjbHM6MTAsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0''@;'; put 'put ''ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhp''@;'; put 'put ''ZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1o''@;'; put 'put ''aWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGtWZSksWXIoMCksZ3QoMSxJVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLFlyKDQsMSksZ3QoNSxSVmUsMSwwLCJjZHMtaWNvbiIsMyko''@;'; put 'put ''NixMVmUsMSwwLCJjZHMtaWNvbiIsNCksaGUoKSxndCg3LE9WZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsUFZlLDEsMCwibmctY29udGVudCIsMCkoOSxGVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCks''@;'; put 'put ''TWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDMpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixk''@;'; put 'put ''LnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxRTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHdkZSxkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezImYSYmVHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksRFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v''@;'; put 'put ''ZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLENkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPUFyKHtpbXBvcnRzOltSYSxhdSxMVWUsTlVlLHlaZSx3WmUsdGRlLHhaZSxUWmUsa1plLERaZSxBWmUsVlVlLENaZV19KSxjfSkoKSxTZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0''@;'; put 'put ''eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCksSVplPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUWXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUpe3N1cGVyKGEsZCxoLGYsdixNLEQsWixyZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFWSw4KSxHZSh2cyw4KSxHZShXYSksR2UoRG8pLEdlKHhZLDgpLEdlKHBtKSxHZShQTCksR2UoRXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksUlpl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLExaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjbGFzcyBlT3t9bGV0IEd4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm5iQ2hhbmdlcz0wLHRoaXMuX2NoYW5nZT1uZXcgV259Z2V0''@;'; put 'put ''IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Y2hhbmdlU3RhcnQoKXt0aGlzLm5iQ2hhbmdlcysrfWNoYW5nZURvbmUoKXswPT0tLXRoaXMubmJDaGFuZ2VzJiZ0aGlzLl9jaGFuZ2UubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxNbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLmFjdGl2YXRlZD0hMSx0aGlzLl9zaXplPTAsdGhpcy5fY3VycmVu''@;'; put 'put ''dD0xLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5wcmV2ZW50RW1pdD0hMSx0aGlzLl9zaXplQ2hhbmdlPW5ldyBXbn1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZTthIT09ZCYmKHRoaXMucHJldmVudEVtaXR8fHRoaXMuc3RhdGVE''@;'; put 'put ''ZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9zaXplPWEsdGhpcy5fY3VycmVudD0wPT09YT8xOk1hdGguZmxvb3IoZC9hKih0aGlzLl9jdXJyZW50LTEpKSsxLHRoaXMucHJldmVudEVtaXR8fCh0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSx0aGlzLl9zaXplQ2hhbmdlLm5l''@;'; put 'put ''eHQodGhpcy5fc2l6ZSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpKSx0aGlzLnByZXZlbnRFbWl0PSExfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN8fDB9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hLHRoaXMuY3VycmVudD50''@;'; put 'put ''aGlzLmxhc3QmJih0aGlzLmN1cnJlbnQ9dGhpcy5sYXN0KX1nZXQgbGFzdCgpe3JldHVybiB0aGlzLl9sYXN0P3RoaXMuX2xhc3Q6dGhpcy5zaXplPjAmJnRoaXMudG90YWxJdGVtcz9NYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zL3RoaXMuc2l6ZSk6MX1zZXQgbGFzdChhKXt0aGlzLl9sYXN0''@;'; put 'put ''PWF9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNpemVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2l6ZUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlz''@;'; put 'put ''Ll9jdXJyZW50JiYodGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiAwPT09dGhpcy5fdG90YWxJdGVtcz8tMTow''@;'; put 'put ''PT09dGhpcy5zaXplPzA6KHRoaXMuY3VycmVudC0xKSp0aGlzLnNpemV9Z2V0IGxhc3RJdGVtKCl7aWYoMD09PXRoaXMuX3RvdGFsSXRlbXMpcmV0dXJuLTE7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4gdGhpcy50b3RhbEl0ZW1zLTE7bGV0IGE9dGhpcy5jdXJyZW50KnRoaXMuc2l6ZS0xO3Jl''@;'; put 'put ''dHVybiB0aGlzLnRvdGFsSXRlbXMmJihhPU1hdGgubWluKGEsdGhpcy50b3RhbEl0ZW1zLTEpKSxhfXByZXZpb3VzKCl7dGhpcy5jdXJyZW50PjEmJnRoaXMuY3VycmVudC0tfW5leHQoKXt0aGlzLmN1cnJlbnQ8dGhpcy5sYXN0JiZ0aGlzLmN1cnJlbnQrK31yZXNldFBhZ2VTaXplKGE9ITEp''@;'; put 'put ''e3RoaXMucHJldmVudEVtaXQ9YSx0aGlzLnNpemU9MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx1Zz0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7dGhpcy5fcGFnZT1hLHRoaXMuc3RhdGVEZWJvdW5jZXI9ZCx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuX2FsbD1bXX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1oYXNBY3RpdmVGaWx0ZXJzKCl7Zm9yKGNvbnN0e2ZpbHRlcjph''@;'; put 'put ''fW9mIHRoaXMuX2FsbClpZihhJiZhLmlzQWN0aXZlKCkpcmV0dXJuITA7cmV0dXJuITF9Z2V0QWN0aXZlRmlsdGVycygpe2NvbnN0IGE9W107Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClkJiZkLmlzQWN0aXZlKCkmJmEucHVzaChkKTtyZXR1cm4gYX1hZGQoYSl7Y29uc3QgZD1h''@;'; put 'put ''LmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2FdKSk7bGV0IGg9ITE7Y29uc3QgZj1uZXcgdE8oYSwoKT0+e2lmKGgpcmV0dXJuO2QudW5zdWJzY3JpYmUoKTtjb25zdCB2PXRoaXMuX2FsbC5maW5kSW5kZXgoTT0+TS5maWx0ZXI9PT1h''@;'; put 'put ''KTt2Pj0wJiZ0aGlzLl9hbGwuc3BsaWNlKHYsMSksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW10pLGg9ITB9KTtyZXR1cm4gdGhpcy5fYWxsLnB1c2goZiksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2Fd''@;'; put 'put ''KSxmfWFjY2VwdHMoYSl7Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClpZihkJiZkLmlzQWN0aXZlKCkmJiFkLmFjY2VwdHMoYSkpcmV0dXJuITE7cmV0dXJuITB9cmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCks''@;'; put 'put ''dGhpcy5fcGFnZS5jdXJyZW50PTEsdGhpcy5fY2hhbmdlLm5leHQoYSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKE1tKSx4cihHeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMs''@;'; put 'put ''ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIHRPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5maWx0ZXI9bCx0aGlzLnVucmVnaXN0ZXI9YX19bGV0IG5PPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWx0ZXJzPWF9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLnJl''@;'; put 'put ''Z2lzdGVyZWQmJnRoaXMucmVnaXN0ZXJlZC5maWx0ZXJ9bmdPbkRlc3Ryb3koKXt0aGlzLmRlbGV0ZUZpbHRlcigpfXNldEZpbHRlcihhKXt0aGlzLmRlbGV0ZUZpbHRlcigpLGEgaW5zdGFuY2VvZiB0Tz90aGlzLnJlZ2lzdGVyZWQ9YTphJiYodGhpcy5yZWdpc3RlcmVkPXRoaXMuZmlsdGVy''@;'; put 'put ''cy5hZGQoYSkpfWRlbGV0ZUZpbHRlcigpe3RoaXMucmVnaXN0ZXJlZCYmKHRoaXMucmVnaXN0ZXJlZC51bnJlZ2lzdGVyKCksZGVsZXRlIHRoaXMucmVnaXN0ZXJlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSl9LGMuXHUwMjc1ZGly''@;'; put 'put ''PUVyKHt0eXBlOmN9KSxjfSkoKTtjbGFzcyBNZGV7Y29uc3RydWN0b3IobCl7dGhpcy51dGlscz1sfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2EueT1sLnktMTtjb25zdCBkPXRoaXMudXRpbHMuaXNBY3Rp''@;'; put 'put ''b25DZWxsKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkmJiFkJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihkP2EueT1hLnktMTphLng9YS54LXRoaXMudXRpbHMuYWN0aW9u''@;'; put 'put ''Q2VsbENvdW50KGwueSkpLGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYobC55Pj0odGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowKSlyZXR1cm4gYTtjb25zdCBoPXRoaXMudXRpbHMuaXNBY3Rpb25DZWxs''@;'; put 'put ''KGwpO3JldHVybiBhLnk9bC55KzEsIWgmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlMZWZ0KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gMD09PWwueHx8KGEueD1sLngtMSksYX1rZXlSaWdodChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aC0xP3RoaXMudXRpbHMu''@;'; put 'put ''Z2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gYS54PWwueDxkP2EueCsxOmEueCxhfWtleUVuZChsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxoPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MDtyZXR1cm4g''@;'; put 'put ''ZC54PWg/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowLGEmJihkLnk9aCx0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhkLnkpJiYoZC54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coZC55KS5sZW5ndGgtMSkpLGR9a2V5SG9tZShsLGEpe2NvbnN0IGQ9dGhpcy51dGls''@;'; put 'put ''cy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gZC54PTAsYSYmKGQueT0wKSxkfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueS1kPjA/bC55LWQrMToxLHRo''@;'; put 'put ''aXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNl''@;'; put 'put ''bGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkmJnRoaXMu''@;'; put 'put ''dXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJnRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9hLng9MDp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1hLngtdGhpcy51dGlscy5hY3Rpb25D''@;'; put 'put ''ZWxsQ291bnQobC55KTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9fWNsYXNzIHhkZSBleHRlbmRzIE1kZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtzdXBlcihsKX1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTtpZihhLnk9bC55LTEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkpdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYm''@;'; put 'put ''YS55PjAmJihhLnk9YS55LTEpO2Vsc2Ugc3dpdGNoKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpJiYoYS55PWEueS0xKSwhMCl7Y2FzZSB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpOmEueD0wO2JyZWFrO2Nhc2UhMT09PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk6YS54''@;'; put 'put ''PWwueDticmVhaztkZWZhdWx0OmEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpfXJldHVybiBhfWtleURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3Jl''@;'; put 'put ''dHVybiBsLnk+PWR8fChhLnk9bC55KzEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/YS55PWEueTxkP2EueSsxOmEueToodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEpLGEueD10aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpPzA6dGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQoYS55KSkpLGF9a2V5TGVmdChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpPygwIT09bC54P2EueD1sLngtMTp0aGlz''@;'; put 'put ''LnV0aWxzLmlzQWN0aW9uQ2VsbChsKXx8KGEueT1sLnktMSxhLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KS0xKSxhKTpzdXBlci5rZXlMZWZ0KGwpfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZighdGhpcy51dGlscy5p''@;'; put 'put ''c0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpKXJldHVybiBzdXBlci5rZXlSaWdodChsKTtjb25zdCBkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLng+PWR8fCh0''@;'; put 'put ''aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmbC54PT09dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC54KS0xJiZ0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk/KGEueT1sLnkrMSxhLng9MCk6YS54PWwueCsxKSxhfWtleUVu''@;'; put 'put ''ZChsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4hdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpfHxhP3N1cGVyLmtleUVuZChsLGEpOihkLng9dGhpcy51dGlscy5nZXRDZWxsc0Zv''@;'; put 'put ''clJvdyhsLnkpLmxlbmd0aC0xLGQpfWtleUhvbWUobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpPyhkLng9MCxkLnk9bC55LTEsYSYm''@;'; put 'put ''KGQueT0wKSxkKTpzdXBlci5rZXlIb21lKGwsYSl9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwo''@;'; put 'put ''bCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueT1hLnkrMSxhLng9MCk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT90aGlzLnV0aWxzLmlz''@;'; put 'put ''RGV0YWlsc1JvdyhsLnkpJiYodGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD0wKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVh''@;'; put 'put ''dGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWls''@;'; put 'put ''c1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT9hLnk8ZCYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55KzEpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2Eu''@;'; put 'put ''eD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9fWNsYXNzIE9aZSBleHRlbmRzIHhkZXtjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENl''@;'; put 'put ''bGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTtpZihhLnk9bC55LTEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpKXJldHVybiBzdXBlci5rZXlVcChsKTtjb25zdCBkPXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpO3JldHVybiBkJiZ0aGlzLnV0aWxzLmlz''@;'; put 'put ''RGV0YWlsc1JvdyhhLnkpP2EueT1hLnktMTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT8oYS55PWEueS0xLHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyhs''@;'; put 'put ''LnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6IWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5RG93bihsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD1kP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gbC55Pj1kP2E6KGEueT1sLnkrMSx0aGlzLnV0''@;'; put 'put ''aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5RG93bihsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP2EueT1hLnk8ZD9hLnkrMTphLnktMTphLng9dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhsLnkp''@;'; put 'put ''Lmxlbmd0aD5oP2wueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOmwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpLGEpKX1rZXlMZWZ0KGwpe3JldHVybiBzdXBlci5rZXlMZWZ0KGwpfWtleVJpZ2h0KGwpe3JldHVybiBzdXBlci5rZXlSaWdodChsKX1rZXlFbmQo''@;'; put 'put ''bCxhKXtyZXR1cm4gc3VwZXIua2V5RW5kKGwsYSl9a2V5SG9tZShsLGEpe3JldHVybiBzdXBlci5rZXlIb21lKGwsYSl9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55''@;'; put 'put ''LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleVBhZ2VVcChsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxh''@;'; put 'put ''Y2VkKGEueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51''@;'; put 'put ''dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlz''@;'; put 'put ''LnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleVBhZ2VEb3duKGwpOih0aGlzLnV0aWxz''@;'; put 'put ''LmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PGQmJihhLnk9YS55KzEsYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNl''@;'; put 'put ''bGxDb3VudChhLnkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5h''@;'; put 'put ''Y3Rpb25DZWxsQ291bnQobC55KSksYSl9fWNsYXNzIFBaZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG9zdD1sLHRoaXMuY29uZmlnPWF9Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWdldCBjdXJyZW50Q2VsbENvb3JkaW5hdGVzKCl7Y29uc3QgbD10aGlzLmNl''@;'; put 'put ''bGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT4iMCI9PT1oLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbCxhPWw/bC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKTpudWxsO3JldHVybnt4OmEmJmw/QXJyYXkuZnJvbShhLnF1ZXJ5U2VsZWN0b3JBbGwodGhp''@;'; put 'put ''cy5jb25maWcua2V5R3JpZENlbGxzKSkuaW5kZXhPZihsKTowLHk6YSYmbCYmdGhpcy5yb3dzP0FycmF5LmZyb20odGhpcy5yb3dzKS5pbmRleE9mKGEpOjB9fWdldCBpdGVtc1BlclBhZ2UoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZCIp''@;'; put 'put ''LmNsaWVudEhlaWdodC90aGlzLnJvd3NbMF0uY2xpZW50SGVpZ2h0KS0xfHwwfWdldE5leHRJdGVtQ29vcmRpbmF0ZShsKXtjb25zdCBhPXRoaXMuY3VycmVudENlbGxDb29yZGluYXRlcyxkPXRoaXMuZ2V0TmF2U3RyYXRlZ3koYSk7c3dpdGNoKGwua2V5KXtjYXNlIGdhLkFycm93VXA6cmV0''@;'; put 'put ''dXJuIGQua2V5VXAoYSk7Y2FzZSBnYS5BcnJvd0Rvd246cmV0dXJuIGQua2V5RG93bihhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP2dhLkFycm93UmlnaHQ6Z2EuQXJyb3dMZWZ0OnJldHVybiBkLmtleUxlZnQoYSk7Y2FzZSJydGwiPT09dGhpcy5ob3N0LmRpcj9nYS5BcnJvd0xlZnQ6''@;'; put 'put ''Z2EuQXJyb3dSaWdodDpyZXR1cm4gZC5rZXlSaWdodChhKTtjYXNlIGdhLkhvbWU6cmV0dXJuIGQua2V5SG9tZShhLGwuY3RybEtleSk7Y2FzZSBnYS5FbmQ6cmV0dXJuIGQua2V5RW5kKGEsbC5jdHJsS2V5KTtjYXNlIGdhLlBhZ2VVcDpyZXR1cm4gZC5rZXlQYWdlVXAoYSk7Y2FzZSBnYS5Q''@;'; put 'put ''YWdlRG93bjpyZXR1cm4gZC5rZXlQYWdlRG93bihhKTtkZWZhdWx0OnJldHVybiBhfX1nZXRDZWxsc0ZvclJvdyhsKXtyZXR1cm4gdGhpcy5yb3dzW2xdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1pc0V4cGFuZGVkUm93KGwpe2NvbnN0IGE9dGhpcy5yb3dz''@;'; put 'put ''W2xdLnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3ctZGV0YWlsIik7cmV0dXJuISFhJiYibm9uZSIhPT1hLnN0eWxlLmRpc3BsYXl9aXNEZXRhaWxzUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0uY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRhZ3JpZC1yb3ctZGV0YWlsIil9aXNSb3dSZXBs''@;'; put 'put ''YWNlZChsKXtyZXR1cm4hIXRoaXMucm93c1tsXS5jbG9zZXN0KCJjbHItZGctcm93LmRhdGFncmlkLXJvdy1yZXBsYWNlZCIpfWlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGwpe3JldHVybiAxPT09dGhpcy5yb3dzW2xdPy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxs''@;'; put 'put ''cykubGVuZ3RofWFjdGlvbkNlbGxDb3VudChsKXtyZXR1cm4gdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkobCkubGVuZ3RofWFjdGlvbkNlbGxzQXNBcnJheShsKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvckFsbCgiLmRhdGFncmlkLXJvdy1zdGlja3kgLmRh''@;'; put 'put ''dGFncmlkLWNlbGwsIC5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jb2x1bW4iKSl9aXNBY3Rpb25DZWxsKGwpe3JldHVybiEhdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkobC55KVtsLnhdfWNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpe3JldHVybnt4OmwueCx5OmwueX19Z2V0TmF2U3Ry''@;'; put 'put ''YXRlZ3kobCl7c3dpdGNoKCEwKXtjYXNlIHRoaXMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobC55KTpyZXR1cm4gbmV3IHhkZSh0aGlzKTtjYXNlIHRoaXMuaXNEZXRhaWxzUm93KGwueSk6Y2FzZSB0aGlzLmlzRXhwYW5kZWRSb3cobC55KTpyZXR1cm4gbmV3IE9aZSh0aGlzKTtkZWZhdWx0''@;'; put 'put ''OnJldHVybiBuZXcgTWRlKHRoaXMpfX19Y29uc3QgRWRlPVsiYVtocmVmXSIsImFyZWFbaHJlZl0iLCJpbnB1dDpub3QoW2Rpc2FibGVkXSkiLCJidXR0b246bm90KFtkaXNhYmxlZF0pIiwic2VsZWN0Om5vdChbZGlzYWJsZWRdKSIsInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSIsImlmcmFt''@;'; put 'put ''ZSIsIm9iamVjdCIsImVtYmVkIiwiW2NvbnRlbnRlZGl0YWJsZT10cnVlXSIsIltyb2xlPWJ1dHRvbl06bm90KFtkaXNhYmxlZF0pIl07ZnVuY3Rpb24gSFplKGMpe2NvbnN0IGw9RWRlLmpvaW4oIiwiKTtyZXR1cm4gYy5tYXRjaGVzKGwpfWxldCByTz0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEpe3RoaXMuem9uZT1hLHRoaXMuc2tpcEl0ZW1Gb2N1cz0hMSx0aGlzLmxpc3RlbmVyc0FkZGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFduLHRoaXMuX2FjdGl2ZUNlbGw9bnVsbCx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6J1tyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhv''@;'; put 'put ''bGRlcik6bm90KFtzdHlsZSo9ImRpc3BsYXk6IG5vbmUiXSknLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlk''@;'; put 'put ''LWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9YWRkTGlz''@;'; put 'put ''dGVuZXJzKCl7dGhpcy5saXN0ZW5lcnNBZGRlZHx8KHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3hkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwibW91c2Vkb3duIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigxPT09YS5idXR0b25zJiYhYS5jdHJs''@;'; put 'put ''S2V5KXtjb25zdCBkPXRoaXMua2V5TmF2VXRpbHMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmNlbGxzKS5maW5kKGg9Pmg9PT1hLnRhcmdldHx8aD09PWEudGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSk6bnVsbDtkJiZ0aGlzLnNldEFjdGl2ZUNl''@;'; put 'put ''bGwoZCx7a2VlcEZvY3VzOkhaZShhLnRhcmdldCl9KX19KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsIndoZWVsIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZW1vdmVBY3RpdmVDZWxsKCl9KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsImZvY3Vz''@;'; put 'put ''b3V0IikucGlwZShmbSgwKSxWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZVdGlscy5ncmlkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwia2V5ZG93''@;'; put 'put ''biIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fGEua2V5IT09Z2EuQXJyb3dMZWZ0JiZhLmtleSE9PWdhLkFycm93UmlnaHQpJiYoYS5rZXk9PT1nYS5BcnJvd1VwfHxhLmtleT09''@;'; put 'put ''PWdhLkFycm93RG93bnx8YS5rZXk9PT1nYS5BcnJvd0xlZnR8fGEua2V5PT09Z2EuQXJyb3dSaWdodHx8YS5rZXk9PT1nYS5FbmR8fGEua2V5PT09Z2EuSG9tZXx8YS5rZXk9PT1nYS5QYWdlVXB8fGEua2V5PT09Z2EuUGFnZURvd24pKXtjb25zdCBkPXRoaXMua2V5TmF2VXRpbHMuZ2V0TmV4''@;'; put 'put ''dEl0ZW1Db29yZGluYXRlKGEpLGg9dGhpcy5rZXlOYXZVdGlscy5yb3dzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpKVtkLnhdOm51bGw7aCYmdGhpcy5zZXRBY3RpdmVDZWxsKGgpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJz''@;'; put 'put ''QWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMua2V5TmF2VXRpbHM9bmV3IFBaZShhLHRoaXMuY29uZmlnKSx0aGlzLmFkZExpc3RlbmVycygpLHRoaXMucmVzZXRLZXlHcmlkKCl9cmVzZXRLZXlHcmlkKCl7dGhpcy5rZXlOYXZVdGlscy5jZWxscz8uZm9yRWFjaChkPT5kLnNl''@;'; put 'put ''dEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpKSwodGhpcy5rZXlOYXZVdGlscy5jZWxscz90aGlzLmtleU5hdlV0aWxzLmNlbGxzWzBdOm51bGwpPy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpfXJlbW92ZUFjdGl2ZUNlbGwoKXt0aGlzLl9hY3RpdmVDZWxsPW51bGx9Z2V0QWN0aXZl''@;'; put 'put ''Q2VsbCgpe3JldHVybiB0aGlzLl9hY3RpdmVDZWxsfXNldEFjdGl2ZUNlbGwoYSx7a2VlcEZvY3VzOmR9PXtrZWVwRm9jdXM6ITF9KXtjb25zdCBoPXRoaXMua2V5TmF2VXRpbHMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmNlbGxzKS5maW5kKGY9PiIwIj09PWYuZ2V0QXR0''@;'; put 'put ''cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2lmKGgmJmguc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2FjdGl2ZUNlbGw9YSwhdGhpcy5za2lwSXRlbUZvY3VzJiYhZCl7bGV0IGY7aWYoImNvbHVtbmhlYWRlciI9PT1h''@;'; put 'put ''LmdldEF0dHJpYnV0ZSgicm9sZSIpKWY9YTtlbHNle2NvbnN0IHY9ZnVuY3Rpb24gRlplKGMpe2NvbnN0IGE9Wy4uLkVkZSwnW3RhYmluZGV4PSIwIl06bm90KFtkaXNhYmxlZF0pJ10uam9pbigiLCIpO3JldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChhKSl9KGEpO2Y9di5s''@;'; put 'put ''ZW5ndGg/dlswXTphfWYuZm9jdXMoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksJHg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhKSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMuZWxlbWVudFJlZj12LHRoaXMua2V5TmF2aWdhdGlvbj1NLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRo''@;'; put 'put ''aXMuYXJpYUV4cGFuZGVkPSExLHRoaXMucG9wb3ZlcklkPU11KCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sdGhpcy5fb3Blbj0hMSx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goaC5v''@;'; put 'put ''cGVuQ2hhbmdlLnN1YnNjcmliZShEPT57dGhpcy5vcGVuPUQsdGhpcy5hcmlhRXhwYW5kZWQ9RH0pKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMub3BlbiE9PShhPSEhYSkmJih0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuPWEsdGhpcy5vcGVuQ2hh''@;'; put 'put ''bmdlLmVtaXQoYSksIWEmJnRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmtleU5hdmlnYXRpb24mJih0aGlzLmtleU5hdmlnYXRpb24uc2tpcEl0ZW1Gb2N1cz1hKSx0aGlzLl9vcGVuPWEpfXNldCBjdXN0b21GaWx0ZXIoYSl7dGhp''@;'; put 'put ''cy5zZXRGaWx0ZXIoYSl9Z2V0IGFjdGl2ZSgpe3JldHVybiEhdGhpcy5maWx0ZXImJnRoaXMuZmlsdGVyLmlzQWN0aXZlKCl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ry''@;'; put 'put ''b3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpe2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoImNsci1kZy1jb2x1bW4iKT8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''bi10aXRsZSIpPy50ZXh0Q29udGVudC50cmltKCkudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLnRvZ2dsZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWwse0NPTFVNTjpofHwiIn0p''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1ZyksR2UoaXMpLEdlKHNjKSxHZShpbyksR2UoSmkpLEdlKHJPLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXtpZigxJmEmJnFhKEhWZSw1LEppKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmFuY2hvcj1oLmZpcnN0KX19LGlucHV0czp7b3BlbjpbTm4uTm9uZSwiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbTm4uTm9uZSwiY2xyRGdGaWx0ZXIiLCJjdXN0b21G''@;'; put 'put ''aWx0ZXIiXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTplTyx1c2VFeGlzdGluZzpjfV0pLHdhLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NCx2YXJzOjEzLGNvbnN0czpbWyJhbmNob3IiLCIiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSJdLFsic29saWQiLCIiXSxbImNsYXNzIiwiZGF0YWdyaWQtZmlsdGVyIiwiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRp''@;'; put 'put ''YWxvZyIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIs''@;'; put 'put ''MSwiZGF0YWdyaWQtZmlsdGVyIiwzLCJpZCJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsMSwiY2xvc2UiXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoKSxkZSgwLCJidXR0b24iLDEsMCksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksZ3QoMyxOVmUsNSwzLCJkaXYiLDMpKSwyJmEmJihUcigiZGF0YWdyaWQtZmlsdGVyLW9wZW4iLGQub3BlbikoImRhdGFncmlkLWZpbHRlcmVkIixkLmFjdGl2ZSksaHIoImFyaWEtbGFiZWwi''@;'; put 'put ''LGQudG9nZ2xlQnV0dG9uQXJpYUxhYmVsKSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92ZXJJZCksZmUoMiksaHIoInN0YXR1cyIsZC5hY3RpdmU/ImluZm8iOm51bGwpKCJzaGFwZSIsZC5hY3RpdmU/ImZpbHRlci1ncmlkLWNpcmNsZSI6''@;'; put 'put ''ImZpbHRlci1ncmlkIiksZmUoKSxNZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLGQuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2Ui''@;'; put 'put ''LCEwKSl9LGRlcGVuZGVuY2llczpbWnkscnMsUHgsTDFlLE54LEh4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyB1R3tjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCxsLmluZGV4T2YoIi4iKT49MCYmKHRoaXMuc3BsaXRQcm9wPWwuc3BsaXQoIi4iKSl9Z2V0UHJvcFZhbHVlKGwp''@;'; put 'put ''e2lmKHRoaXMuc3BsaXRQcm9wKXtsZXQgYT1sO2Zvcihjb25zdCBkIG9mIHRoaXMuc3BsaXRQcm9wKXtpZihudWxsPT09YXx8dHlwZW9mIGE+InUifHx0eXBlb2YgYVtkXT4idSIpcmV0dXJuO2E9YVtkXX1yZXR1cm4gYX1yZXR1cm4gbFt0aGlzLnByb3BdfX1jbGFzcyBpT3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGE9ITEpe3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWFjY2VwdHMobCxhLGQpe2NvbnN0IGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHZvaWQgMD09PWh8fG51bGwhPT1hJiYoIm51bWJlciIhPXR5cGVvZiBo''@;'; put 'put ''fHxoPGEpfHxudWxsIT09ZCYmKCJudW1iZXIiIT10eXBlb2YgaHx8aD5kKSl9fWNsYXNzIFQ3e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBXbix0aGlzLl9sb3c9bnVsbCx0aGlzLl9oaWdoPW51bGx9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5fbG93LHRoaXMuX2hpZ2hdfXNldCB2YWx1ZShsKXtjb25zdCBhPWxbMF0sZD1sWzFdOyhhIT09dGhpcy5fbG93fHxkIT09dGhpcy5faGlnaCkmJih0aGlzLl9sb3c9YSx0aGlzLl9oaWdoPWQsdGhpcy5fY2hh''@;'; put 'put ''bmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgbG93KCl7cmV0dXJuIHRoaXMuX2xvd31zZXQgbG93KGwpe2whPT10aGlzLl9sb3cmJih0aGlzLl9sb3c9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2hpZ2h9c2V0IGhpZ2gobCl7bCE9PXRoaXMuX2hpZ2gmJih0aGlzLl9oaWdoPWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZu''@;'; put 'put ''LnByb3AsbG93OnRoaXMuX2xvdyxoaWdoOnRoaXMuX2hpZ2h9OnRoaXN9aXNBY3RpdmUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2xvd3x8bnVsbCE9PXRoaXMuaGlnaH1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLl9sb3csdGhpcy5faGlnaCl9ZXF1YWxz''@;'; put 'put ''KGwpe3JldHVybiBsIGluc3RhbmNlb2YgVDcmJihsLmZpbHRlckZuIGluc3RhbmNlb2YgaU8/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPJiZsLmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJmwubG93PT09dGhpcy5fbG93JiZsLmhpZ2g9PT10aGlzLl9oaWdoOmw9PT10''@;'; put 'put ''aGlzKX19bGV0IFRkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9dix0aGlzLmZpbHRlclZh''@;'; put 'put ''bHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5m''@;'; put 'put ''aWx0ZXIubG93fHxhWzFdIT09dGhpcy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEp''@;'; put 'put ''KTp0aGlzLmluaXRGaWx0ZXJWYWx1ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgdE8/YTpuZXcgVDcoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlz''@;'; put 'put ''LmluaXRGaWx0ZXJWYWx1ZXMpfWdldCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLm1pblZhbHVlfWdldCBmcm9tTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLmZyb21MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZnJvbUxhYmVsfWdldCB0b0xhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy50b0xhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy50b0xhYmVsfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhp''@;'; put 'put ''cy5maWx0ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxv''@;'; put 'put ''dyx0aGlzLmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5m''@;'; put 'put ''aWx0ZXIuaGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1p''@;'; put 'put ''dChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lk''@;'; put 'put ''ZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVu''@;'; put 'put ''c3Vic2NyaWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpLEdlKHZtKSxHZShpcyksR2Uoc2MpLEdlKFdhKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3''@;'; put 'put ''UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShWVmUsNSkscWEoJHgsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbTm4uTm9uZSwi''@;'; put 'put ''Y2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJtaW5QbGFjZWhvbGRlciJdLG1heFBsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsIm1heFBsYWNlaG9sZGVyIl0sZnJvbUxhYmVsOltObi5Ob25lLCJjbHJGaWx0ZXJGcm9tTGFiZWwiLCJmcm9tTGFiZWwiXSx0''@;'; put 'put ''b0xhYmVsOltObi5Ob25lLCJjbHJGaWx0ZXJUb0xhYmVsIiwidG9MYWJlbCJdLHZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl0sY3VzdG9tTnVtZXJpY0ZpbHRlcjpbTm4uTm9uZSwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRw''@;'; put 'put ''dXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmVPLHVzZUV4aXN0aW5nOmN9XSksd2FdLGRlY2xzOjEyLHZhcnM6MTAsY29uc3RzOltbImlucHV0X2xvdyIsIiJdLFsiaW5wdXRfaGlnaCIsIiJdLFszLCJjbHJEZ0Zp''@;'; put 'put ''bHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1mb3JtIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYi''@;'; put 'put ''LCJuYW1lIiwibG93IiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEs''@;'; put 'put ''ImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMiksZ2koImNsckRnRmlsdGVyT3BlbkNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImRpdiIsMykoMiwiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSgzLCJsYWJlbCIsNCksTGUoNCksaGUoKSxkZSg1LCJpbnB1dCIsNSwwKSxnaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQubG93LHYpfHwoZC5sb3c9diksQ3Qodil9KSxoZSgpKCksZGUoNywiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSg4LCJsYWJlbCIsNCksTGUoOSksaGUoKSxkZSgxMCwiaW5wdXQiLDYsMSksZ2koIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLmhpZ2gsdil8fChkLmhpZ2g9diksQ3Qodil9KSxoZSgpKCkoKSgpfTImYSYmKE1lKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxwaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDQpLHdyKGQuZnJvbUxhYmVsVmFsdWUpLGZl''@;'; put 'put ''KCkscGkoIm5nTW9kZWwiLGQubG93KSxNZSgicGxhY2Vob2xkZXIiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksZmUoNCksd3IoZC50b0xhYmVsVmFsdWUpLGZlKCkscGkoIm5nTW9kZWwiLGQuaGlnaCksTWUoInBsYWNlaG9s''@;'; put 'put ''ZGVyIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltkcyxfZGUseWRlLHFsLHZMLG5sLCRzLCR4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBhT3tjb25zdHJ1Y3RvcihsLGE9ITEpe3Ro''@;'; put 'put ''aXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6KCIi''@;'; put 'put ''K2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIEE3e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBXbix0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9j''@;'; put 'put ''aGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGFPP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1ZX06''@;'; put 'put ''dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0KGwp''@;'; put 'put ''KX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBBNyYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBhTz90aGlzLmZpbHRl''@;'; put 'put ''ckZuIGluc3RhbmNlb2YgYU8mJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgZEc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3N1cGVyKGEpLHRoaXMuZG9t''@;'; put 'put ''QWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5jZHI9TSx0aGlzLm5nWm9uZT1ELHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlzLmxhYmVsVmFsdWU9IiIsdGhp''@;'; put 'put ''cy5zdWJzPVtdfXNldCBjdXN0b21TdHJpbmdGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIHRPP2E6bmV3IEE3KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX1n''@;'; put 'put ''ZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIudmFsdWV9c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiYic3RyaW5nIj09dHlwZW9mIGE/KGF8fChhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChh''@;'; put 'put ''KSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9Z2V0IHBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZmlsdGVySXRlbXN9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzLnB1c2godGhpcy5zbWFydFRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25DaGFu''@;'; put 'put ''Z2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0RmlsdGVyTGFiZWwoKSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEZpbHRlckxhYmVsKCl7aWYodGhp''@;'; put 'put ''cy5sYWJlbClyZXR1cm4gdm9pZCh0aGlzLmxhYmVsVmFsdWU9dGhpcy5sYWJlbCk7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik7dGhpcy5sYWJlbFZh''@;'; put 'put ''bHVlPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckxhYmVsLHtDT0xVTU46ZD8udGV4dENvbnRlbnQudHJpbSgpfHwiIn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1Zyks''@;'; put 'put ''R2Uodm0pLEdlKGlzKSxHZShzYyksR2UoSmkpLEdlKEVzKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShCVmUsNSkscWEoJHgsNSkpLDImYSl7bGV0''@;'; put 'put ''IGg7Q2koaD1TaSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciJdLGxhYmVsOltObi5Ob25lLCJjbHJGaWx0''@;'; put 'put ''ZXJMYWJlbCIsImxhYmVsIl0sY3VzdG9tU3RyaW5nRmlsdGVyOltObi5Ob25lLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0''@;'; put 'put ''ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6ZU8sdXNlRXhpc3Rpbmc6Y31dKSx3YSx3bF0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbImlucHV0IiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWyJ0''@;'; put 'put ''eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLCJjbHJJbnB1dCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImNsci1kZy1m''@;'; put 'put ''aWx0ZXIiLDEpLGdpKCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLm9wZW4sdil8fChkLm9wZW49diksQ3Qodil9KSxkZSgxLCJjbHItaW5wdXQtY29udGFpbmVyIikoMiwibGFiZWwiKSxMZSgzKSxoZSgpLGRlKDQsImlucHV0IiwyLDApLGdp''@;'; put 'put ''KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC52YWx1ZSx2KXx8KGQudmFsdWU9diksQ3Qodil9KSxoZSgpKCkoKX0yJmEmJihNZSgiY2xyRGdGaWx0ZXIiLGQucmVnaXN0ZXJlZCkscGkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxmZSgzKSx3cihkLmxh''@;'; put 'put ''YmVsVmFsdWUpLGZlKCkscGkoIm5nTW9kZWwiLGQudmFsdWUpLE1lKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxocigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbZHMsWjEsR0wscWwsbmwsJHMsJHhdLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''LGN9KSgpLHhtPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3Jp''@;'; put 'put ''ZCJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksS3k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50PTB9Z2V0IGhhc0FjdGlvbmFibGVSb3coKXtyZXR1cm4gdGhpcy5hY3Rpb25hYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50''@;'; put 'put ''Kyt9dW5yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGs3PSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyBMeXtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLnJvd0FjdGlvbnM9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMucm93QWN0''@;'; put 'put ''aW9ucy5oYXNBY3Rpb25hYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoeG0sOCksR2UoS3kpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZl''@;'; put 'put ''YXR1cmVzOlt3YV19KSxjfSkoKSxBZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLm1vZGFsU3RhY2s9W10sdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXI9dGhpcy5vbktleVVwLmJpbmQodGhpcyl9dHJhY2tNb2RhbE9wZW4oYSl7ITE9PT10aGlz''@;'; put 'put ''Lm1vZGFsU3RhY2suaW5jbHVkZXMoYSkmJnRoaXMubW9kYWxTdGFjay51bnNoaWZ0KGEpLHRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVudExpc3RlbmVyKX10cmFja01vZGFsQ2xvc2UoYSl7Y29uc3QgZD10''@;'; put 'put ''aGlzLm1vZGFsU3RhY2suaW5kZXhPZihhKTtkPi0xJiZ0aGlzLm1vZGFsU3RhY2suc3BsaWNlKGQsMSksMD09PXRoaXMubW9kYWxTdGFjay5sZW5ndGgmJnRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVu''@;'; put 'put ''dExpc3RlbmVyKX1vbktleVVwKGEpe3RoaXMubW9kYWxTdGFjay5sZW5ndGgmJkkyKGEua2V5KT09PWdhLkVzY2FwZSYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLHRoaXMubW9kYWxTdGFja1swXS5jbG9zZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoeHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxYZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubW9kYWxTdGFja1NlcnZpY2U9YSx0aGlzLnByZXZlbnRTY3Jv''@;'; put 'put ''bGw9ITEsdGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9lbmFibGVkPSExLHRoaXMuX3N0YXRlPW5ldyBlaSh0aGlzLnRvZ2dsZVN0YXRlKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKGEpe3RoaXMuX2VuYWJsZWQ9YX1nZXQgcHJldmVudEZvY3VzU2Ny''@;'; put 'put ''b2xsKCl7cmV0dXJuIHRoaXMucHJldmVudFNjcm9sbH1zZXQgcHJldmVudEZvY3VzU2Nyb2xsKGEpe3RoaXMucHJldmVudFNjcm9sbD1hfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmNhY2hlfWdldCBzdGF0ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKX1nZXQg''@;'; put 'put ''aXNPcGVuKCl7cmV0dXJuITA9PT10aGlzLnRvZ2dsZVN0YXRlfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Bl''@;'; put 'put ''bih0aGlzKX1jbG9zZSgpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5yZXR1cm5Gb2N1cygpLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcyl9cmV0dXJuRm9jdXMoKXt0aGlzLmJ1dHRvbiYmKHRo''@;'; put 'put ''aXMuYnV0dG9uLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRoaXMucHJldmVudEZvY3VzU2Nyb2xsfSksdGhpcy5idXR0b249bnVsbCl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50''@;'; put 'put ''b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihBZGUpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxeT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsr''@;'; put 'put ''fXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihYZikpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEQ3PSgoKT0+e2NsYXNzIGMg''@;'; put 'put ''ZXh0ZW5kcyBMeXtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKHhtLDgpLEdlKHF5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsi''@;'; put 'put ''Y2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbd2FdfSksY30pKCk7Y2xhc3Mgb097Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyB1RyhsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJv''@;'; put 'put ''cC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNlKCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1''@;'; put 'put ''Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgeGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfSh4aHx8e30pO2NvbnN0IFh5PSJkYXRhZ3JpZC1maXhlZC13aWR0aCIsS3g9''@;'; put 'put ''ImRhdGFncmlkLWhpZGRlbi1jb2x1bW4iO2xldCBoRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY29sdW1uVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uVmlldy5kZXN0cm95KCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGpWZSw1KSwyJmEpe2xldCBoO0NpKGg9U2ko''@;'; put 'put ''KSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAselZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJ''@;'; put 'put ''YykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgV259Z2V0IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQg''@;'; put 'put ''Y29tcGFyYXRvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2Uo''@;'; put 'put ''YSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoYSxkKXt0''@;'; put 'put ''aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09YT90aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZHx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZCksdGhpcy5lbWl0Q2hhbmdl''@;'; put 'put ''KCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGEsZCl7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZShhLGQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0''@;'; put 'put ''aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgSmY9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5BTElHTl9DT0xVTU5TPTBdPSJB''@;'; put 'put ''TElHTl9DT0xVTU5TIixjW2MuQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixjW2MuQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLGNbYy5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJRFRIUyIsY1tjLkNPTVBVVEVfQ09MVU1OX1dJRFRI''@;'; put 'put ''Uz00XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixjfShKZnx8e30pO2xldCBJNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgV24sdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09i''@;'; put 'put ''c2VydmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhhKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUoJGwoZD0+YT09PWQpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5l''@;'; put 'put ''eHQoSmYuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkNBTENVTEFURV9N''@;'; put 'put ''T0RFX09GRil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGZHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLmRv''@;'; put 'put ''bUFkYXB0ZXI9ZCx0aGlzLm9yZ2FuaXplcj1oLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFkYXB0ZXIubWluV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9''@;'; put 'put ''Z2V0IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplK3RoaXMuX3Jlc2l6ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6''@;'; put 'put ''ZWRCeT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVz''@;'; put 'put ''aXplKGEpe2E8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9YSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihKaSkseHIodm0pLHhyKEk3KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkscEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YX1nZXQg''@;'; put 'put ''dGFibGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGEpe3RoaXMuX3RhYmxlUmVmPWF9c2V0IHRhYmxlKGEpe3RsKHRoaXMucGxhdGZvcm1JZCkmJmEubmF0aXZlRWxlbWVudCYmKHRoaXMudGFibGVSZWY9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGlvKSl9LGMuXHUwMjc1''@;'; put 'put ''cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZp''@;'; put 'put ''Y2U9Zix0aGlzLmNvbW1vblN0cmluZz12LHRoaXMuZG9jdW1lbnQ9TSx0aGlzLmNvbHVtblNlcGFyYXRvcklkPU11KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFy''@;'; put 'put ''YXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3''@;'; put 'put ''SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJh''@;'; put 'put ''Y2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNo''@;'; put 'put ''KGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdo''@;'; put 'put ''dCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRy''@;'; put 'put ''YWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhp''@;'; put 'put ''ZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9y''@;'; put 'put ''bSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2x1bW5IYW5kbGVFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImF1dG8iKX1zaG93VHJhY2tl''@;'; put 'put ''ck9uRmlyc3RLZXlEb3duKGEpeyF0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSEwLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mo''@;'; put 'put ''dGhpcy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLnNob3dUcmFja2VyKCkpfW1vdmVUcmFja2VyT25LZXlEb3duKGEpe3RoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKT8oYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1u''@;'; put 'put ''UmVzaXplclNlcnZpY2UucmVzaXplZEJ5LTEyKSk6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmKGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMikpfWhpZGVUcmFja2VyT25LZXlVcChhKXt0aGlz''@;'; put 'put ''LnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWws''@;'; put 'put ''Im9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLmhpZGVUcmFja2VyKCksdGhpcy5jb2x1bW5IYW5kbGVFbC5mb2N1cygpKX1yZWRGbGFnVHJhY2tlcigpe3RoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSE9PXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5n''@;'; put 'put ''ZSYmKHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlP3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVk''@;'; put 'put ''LW1heCIpOnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpKX1pc0Fycm93TGVmdEtleUV2ZW50KGEpe3JldHVybiBJMihhLmtleSk9PT1nYS5BcnJvd0xlZnR9aXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSl7cmV0dXJuIEkyKGEua2V5KT09''@;'; put 'put ''PWdhLkFycm93UmlnaHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGZHKSxHZShFbyksR2UoV2EpLEdlKHBHKSxHZShpcyksR2UodnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi1zZXBhcmF0''@;'; put 'put ''b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoVVZlLDUpLHFhKFpWZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5yZXNpemVUcmFja2VyUmVmPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmNvbHVtbkhhbmRsZVJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciIsITApfSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY29sdW1uSGFuZGxlIiwiIl0sWyJyZXNpemVUcmFja2VyIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2RrRHJhZyIsIiIsImNk''@;'; put 'put ''a0RyYWdMb2NrQXhpcyIsIngiLDEsImRhdGFncmlkLWNvbHVtbi1oYW5kbGUiLDMsImNka0RyYWdTdGFydGVkIiwiY2RrRHJhZ01vdmVkIiwiY2RrRHJhZ0VuZGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImJ1dHRvbiIsMiwwKSxGdCgiY2RrRHJhZ1N0YXJ0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGgpLEN0KGQuc2hvd1RyYWNrZXIoKSl9KSgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5tb3Zl''@;'; put 'put ''VHJhY2tlcih2LmRpc3RhbmNlLngpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxkLmhpZGVUcmFja2VyKCksQ3Qodi5zb3VyY2UuX2RyYWdSZWYucmVzZXQoKSl9KSxoZSgpLGRlKDIsInNwYW4iLDMpLExlKDMpLGhlKCksR3QoNCwiZGl2Iiw0LDEpfTImYSYm''@;'; put 'put ''KGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVzY3JpcHRpb25JZCksZmUoMiksaHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5nLmtleXMuY29s''@;'; put 'put ''dW1uU2VwYXJhdG9yRGVzY3JpcHRpb24sIiAiKSl9LGRlcGVuZGVuY2llczpbSVplXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxSNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGgpLHRoaXMuZWw9YSx0aGlzLl9zb3J0PWQsdGhpcy52''@;'; put 'put ''Y3I9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmNoYW5nZURldGVjdG9yUmVmPU0sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEtyLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMuY3VzdG9tRmlsdGVyPSExLHRoaXMuX2NvbFR5cGU9InN0cmluZyIsdGhpcy5fc29ydE9y''@;'; put 'put ''ZGVyPXhoLlVOU09SVEVELHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zaG93U2VwYXJhdG9yPSEwLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEZXRhaWxQYW5l''@;'; put 'put ''Q2hhbmdlcygpKX1nZXQgaXNIaWRkZW4oKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhLeCl9Z2V0IHNob3dTZXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fc2hvd1NlcGFyYXRvcn1zZXQgc2hvd1NlcGFyYXRvcihhKXt0aGlzLl9zaG93U2VwYXJhdG9y''@;'; put 'put ''PWEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgY29sVHlwZSgpe3JldHVybiB0aGlzLl9jb2xUeXBlfXNldCBjb2xUeXBlKGEpe3RoaXMuX2NvbFR5cGU9YX1nZXQgZmllbGQoKXtyZXR1cm4gdGhpcy5fZmllbGR9c2V0IGZpZWxkKGEpeyJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgYSYmKHRoaXMuX2ZpZWxkPWEsdGhpcy5fc29ydEJ5fHwodGhpcy5fc29ydEJ5PW5ldyBvTyhhKSkpfWdldCBzb3J0QnkoKXtyZXR1cm4gdGhpcy5fc29ydEJ5fXNldCBzb3J0QnkoYSl7InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX3NvcnRCeT1uZXcgb08oYSk6YT90aGlzLl9zb3J0Qnk9''@;'; put 'put ''YTp0aGlzLmZpZWxkP3RoaXMuX3NvcnRCeT1uZXcgb08odGhpcy5maWVsZCk6ZGVsZXRlIHRoaXMuX3NvcnRCeX1nZXQgc29ydE9yZGVyKCl7cmV0dXJuIHRoaXMuX3NvcnRPcmRlcn1zZXQgc29ydE9yZGVyKGEpe2lmKCEodHlwZW9mIGE+InUiKSYmdGhpcy5fc29ydE9yZGVyIT09YSlzd2l0''@;'; put 'put ''Y2goYSl7Y2FzZSB4aC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztjYXNlIHhoLkRFU0M6dGhpcy5zb3J0KCEwKTticmVhaztkZWZhdWx0OnRoaXMuX3NvcnQuY2xlYXIoKX19c2V0IHVwZGF0ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgQTc/KCgh''@;'; put 'put ''YXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3JiYoKCFhfHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYo''@;'; put 'put ''YVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZp''@;'; put 'put ''bHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7Y2FzZSB4aC5BU0M6cmV0dXJuImFzY2VuZGluZyI7Y2FzZSB4aC5ERVNDOnJldHVybiJkZXNjZW5kaW5nIjtkZWZhdWx0OnJldHVybiJub25l''@;'; put 'put ''In19Z2V0IHNvcnREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydERpcmVjdGlvbn1nZXQgZmlsdGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBN3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNz90aGlzLmZpbHRlci52YWx1ZTpudWxsfXNldCBmaWx0ZXJWYWx1''@;'; put 'put ''ZShhKXsodGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBN3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNykmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyLnZhbHVlKSl9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBl''@;'; put 'put ''ZEluamVjdG9yLmdldChoRyx0aGlzLnZjcikuY29sdW1uVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBZTChoRyx0aGlzLnZjcil9bmdPbkNoYW5nZXMoYSl7YS5jb2xUeXBlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlIT09''@;'; put 'put ''YS5jb2xUeXBlLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKSxhLmZpZWxkJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSYm''@;'; put 'put ''YS5maWVsZC5jdXJyZW50VmFsdWUhPT1hLmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c29ydChhKXt0aGlzLnNvcnRhYmxlJiYodGhpcy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LGEpLHRoaXMuX3NvcnRPcmRlcj10aGlzLl9zb3J0LnJldmVyc2U/eGguREVTQzp4aC5BU0MsdGhpcy5fc29ydERp''@;'; put 'put ''cmVjdGlvbj10aGlzLl9zb3J0T3JkZXI9PT14aC5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSl9bGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmli''@;'; put 'put ''ZShhPT57dGhpcy5zaG93U2VwYXJhdG9yIT09IWEmJih0aGlzLnNob3dTZXBhcmF0b3I9IWEpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMu''@;'; put 'put ''c29ydE9yZGVyIT09eGguVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj14aC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlciksdGhpcy5fc29ydERpcmVjdGlvbj1udWxsKX0pfXNldHVwRGVmYXVs''@;'; put 'put ''dEZpbHRlcihhLGQpeyJudW1iZXIiPT09ZD90aGlzLnNldEZpbHRlcihuZXcgVDcobmV3IGlPKGEpKSk6InN0cmluZyI9PT1kJiZ0aGlzLnNldEZpbHRlcihuZXcgQTcobmV3IGFPKGEpKSksdGhpcy5maWx0ZXImJnRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1''@;'; put 'put ''ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2Uoc08pLEdlKHVnKSxHZShEbyksR2UoWGYpLEdlKEVzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxlTyw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFk''@;'; put 'put ''ZXIiXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLFRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlclN0cmluZ1BsYWNl''@;'; put 'put ''aG9sZGVyIiwiZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyOltObi5O''@;'; put 'put ''b25lLCJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbTm4uTm9uZSwiY2xyRGdDb2xUeXBlIiwiY29sVHlwZSJdLGZpZWxkOltObi5Ob25lLCJjbHJEZ0ZpZWxkIiwiZmllbGQiXSxzb3J0Qnk6W05uLk5vbmUsImNs''@;'; put 'put ''ckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOltObi5Ob25lLCJjbHJEZ1NvcnRPcmRlciIsInNvcnRPcmRlciJdLHVwZGF0ZUZpbHRlclZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInVwZGF0ZUZpbHRlclZhbHVlIl19LG91dHB1dHM6e3NvcnRPcmRlckNoYW5nZToiY2xy''@;'; put 'put ''RGdTb3J0T3JkZXJDaGFuZ2UiLGZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOlt2ZChbb2ddKSx3YSx3bF0sbmdDb250ZW50U2VsZWN0b3JzOllWZSxkZWNsczo5LHZhcnM6NSxjb25zdHM6W1siY29sdW1uVGl0bGUiLCIiXSxbMSwiZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFu''@;'; put 'put ''Z2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LXRpdGxlIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsImNsYXNzIiwic29ydC1pY29uIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJzb3J0LWljb24iXSxbMywiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiXSxbMywiY2xyRmlsdGVyVmFs''@;'; put 'put ''dWVDaGFuZ2UiLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoV1Zl''@;'; put 'put ''KSxkZSgwLCJkaXYiLDEpLGd0KDEsS1ZlLDMsMiwiYnV0dG9uIiwyKSxZcigyKSxndCgzLHFWZSwxLDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiwzKSg0LFhWZSwxLDQsImNsci1kZy1udW1lcmljLWZpbHRlciIsNCkoNSxKVmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSg3LGVCZSwy''@;'; put 'put ''LDEsInNwYW4iLDUpKDgsdEJlLDEsMCwiY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiLDYpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLGQuc29ydGFibGUpLGZlKDIpLE1lKCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0b21GaWx0ZXImJiJzdHJpbmciPT1kLmNvbFR5cGUpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksZmUoMyksTWUoIm5nSWYiLCFkLnNvcnRhYmxlKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dTZXBhcmF0b3IpKX0sZGVwZW5kZW5jaWVzOltiYSxOMSxycyxEZGUsVGRlLGRHXSxlbmNhcHN1bGF0aW9uOjIs''@;'; put 'put ''Y2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9maWx0ZXJzPWEsdGhpcy5fc29ydD1kLHRoaXMuX3BhZ2U9aCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5fc21hcnQ9ITEsdGhpcy5fZGlzcGxheWVkPVtdLHRoaXMuX2NoYW5n''@;'; put 'put ''ZT1uZXcgV24sdGhpcy5fYWxsQ2hhbmdlcz1uZXcgV24sdGhpcy50cmFja0J5PWY9PmZ9Z2V0IHNtYXJ0KCl7cmV0dXJuIHRoaXMuX3NtYXJ0fWdldCBhbGwoKXtyZXR1cm4gdGhpcy5fYWxsfXNldCBhbGwoYSl7dGhpcy5fYWxsPWEsdGhpcy5lbWl0QWxsQ2hhbmdlcyhhKSx0aGlzLnNtYXJ0''@;'; put 'put ''P3RoaXMuX2ZpbHRlckl0ZW1zKCk6KHRoaXMuX2Rpc3BsYXllZD1hLHRoaXMuZW1pdENoYW5nZSgpKX1nZXQgZGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZH1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgYWxsQ2hhbmdlcygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9hbGxDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB1bmluaXRpYWxpemVkKCl7cmV0dXJuIXRoaXMuX2FsbH1kZXN0cm95KCl7dGhpcy5fZmlsdGVyc1N1YiYmdGhpcy5fZmlsdGVyc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3NvcnRTdWImJnRoaXMuX3NvcnRTdWIudW5z''@;'; put 'put ''dWJzY3JpYmUoKSx0aGlzLl9wYWdlU3ViJiZ0aGlzLl9wYWdlU3ViLnVuc3Vic2NyaWJlKCl9c21hcnRlbkRvd24oKXt0aGlzLl9zbWFydD0hMSx0aGlzLmRlc3Ryb3koKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1''@;'; put 'put ''YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRlbXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFn''@;'; put 'put ''ZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdl''@;'; put 'put ''cy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmlsdGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9w''@;'; put 'put ''YWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSks''@;'; put 'put ''dGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9wYWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5m''@;'; put 'put ''aXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHVnKSx4cihzTykseHIoTW0pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxKeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRpZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy5kaWZmZXI9bnVsbCx0aGlzLnN1YnNjcmlwdGlvbnM9W10saC5zbWFydGVuVXAoKSx0aGlz''@;'; put 'put ''Lml0ZXJhYmxlUHJveHk9bmV3IG5zKGYsYSxkKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5nZS5zdWJzY3JpYmUodj0+e3RoaXMuaXRlcmFibGVQcm94eS5uZ0Zvck9mPXYsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRG9DaGVjaygpfSkpfXNldCByYXdJdGVtcyhhKXt0aGlzLl9yYXdJ''@;'; put 'put ''dGVtcz1hfHxbXX1zZXQgdHJhY2tCeShhKXt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5PWF9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1uZ0RvQ2hlY2soKXt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKHRoaXMu''@;'; put 'put ''X3Jhd0l0ZW1zKS5jcmVhdGUodGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeSkpLHRoaXMuZGlmZmVyJiZ0aGlzLmRpZmZlci5kaWZmKHRoaXMuX3Jhd0l0ZW1zKSYmKHRoaXMuaXRlbXMuYWxsPXRoaXMuX3Jhd0l0ZW1zKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5m''@;'; put 'put ''b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsKSxHZShlbSksR2UoZGcpLEdlKERvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRnSXRlbXMiLCIiLCJjbHJE''@;'; put 'put ''Z0l0ZW1zT2YiLCIiXV0saW5wdXRzOntyYXdJdGVtczpbTm4uTm9uZSwiY2xyRGdJdGVtc09mIiwicmF3SXRlbXMiXSx0cmFja0J5OltObi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxnRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRl''@;'; put 'put ''bXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGRnKSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8s''@;'; put 'put ''ZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9s''@;'; put 'put ''ZGVyLWltYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJkaXYiLDApLGd0KDEsbkJlLDEsMCwiZGl2IiwxKSxkZSgyLCJzcGFuIiwyKSxndCgzLHJCZSwxLDAsIm5nLWNvbnRlbnQiLDMpLGhlKCkoKSksMiZhJiYoVHIoImRhdGFncmlkLWVtcHR5IixkLmVt''@;'; put 'put ''cHR5RGF0YWdyaWQpLGZlKCksTWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCksZmUoMiksTWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCkpfSxkZXBlbmRlbmNpZXM6W2JhXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY2Vs''@;'; put 'put ''bFZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNlbGxWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbImRnLXdyYXBwZWQtY2VsbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGlCZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJj''@;'; put 'put ''ZWxsUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGFCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUWY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZjcj1hfWdldCBfdmll''@;'; put 'put ''dygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQobUcsdGhpcy52Y3IpLmNlbGxWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKG1HLHRoaXMudmNyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8p''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxXTCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnNpZ25wb3N0PWYpfX0saG9zdEF0dHJzOlsicm9sZSIsImdy''@;'; put 'put ''aWRjZWxsIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1jZWxsIiwhMCkoImRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIiLGQuc2lnbnBvc3QubGVuZ3RoPjApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWRlPTAscXg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFUxe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBlaSghMSks''@;'; put 'put ''dGhpcy5fYW5pbWF0ZT1uZXcgV24sSWRlKyssdGhpcy5leHBhbmRhYmxlSWQ9ImNsci1kZy1leHBhbmRhYmxlLXJvdy0iK0lkZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFu''@;'; put 'put ''ZGVkPWEsdGhpcy5fYW5pbWF0ZS5uZXh0KCksdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoYSkpfWdldCByZXBsYWNlKCl7cmV0dXJuIHRoaXMuX3JlcGxhY2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFuaW1hdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZS5hc09ic2VydmFibGUoKX1sb2FkaW5nU3Rh''@;'; put 'put ''dGVDaGFuZ2UoYSl7c3VwZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpLGEhPT16MS5MT0FESU5HJiZ0aGlzLl9hbmltYXRlLm5leHQoKX1zZXRSZXBsYWNlKGEpe3RoaXMuX3JlcGxhY2UubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFF5PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRElTUExBWT0wXT0iRElTUExBWSIsY1tjLkNBTENVTEFURT0xXT0iQ0FMQ1VMQVRFIixjfShReXx8e30pLHBsPWZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''W2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpbmdsZT0xXT0iU2luZ2xlIixjW2MuTXVsdGk9Ml09Ik11bHRpIixjfShwbHx8e30pO2xldCB2Rz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxs''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXtpZigxJmEmJnFhKG9CZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3dQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgp''@;'; put 'put ''LGd0KDAsc0JlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxWWmU9MCxlXz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5faXRlbXM9YSx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSEx''@;'; put 'put ''LHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBXbix0aGlzLl9zZWxlY3Rpb25UeXBlPXBsLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9''@;'; put 'put ''W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIrVlplKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnMucHVzaChhLmFsbENoYW5nZXMuc3Vic2NyaWJlKGg9Pntjb25zdCBmPVtdO3N3aXRjaCh0aGlzLnNlbGVjdGlvblR5cGUpe2Nhc2UgcGwuTm9uZTpicmVhaztjYXNlIHBsLlNpbmdsZTp7bGV0IHYsTT0hMTt0aGlzLmN1cnJlbnRTaW5nbGUmJiF0aGlzLnByZXZTaW5nbGVTZWxlY3Rp''@;'; put 'put ''b25SZWYmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9YS50cmFja0J5KHRoaXMuY3VycmVudFNpbmdsZSkpLGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPT09WiYmKHY9RCxNPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5k''@;'; put 'put ''ZXhPZihaKT4tMSYmZi5wdXNoKFopfSksYS5zbWFydCYmIXYmJihNPSEwKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudFNpbmdsZT12KX0sMCk7YnJlYWt9Y2FzZSBwbC5NdWx0aTp7bGV0IHY9dGhpcy5jdXJyZW50LnNsaWNlKCksTT0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAm''@;'; put 'put ''JnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmKHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5jdXJyZW50LmZvckVhY2goRD0+e3RoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaChhLnRyYWNrQnkoRCkpfSkpLGguZm9yRWFjaChEPT57''@;'; put 'put ''Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoWik+LTEmJmYucHVzaChaKX0pLHYubGVuZ3RoPjAmJihoLmZvckVhY2goRD0+e2NvbnN0IFo9YS50cmFja0J5KEQpLHJlPXRoaXMucHJldlNlbGVjdGlvblJlZnMuaW5kZXhPZihaKTtyZT4tMSYmKHZbcmVdPUQs''@;'; put 'put ''TT0hMCl9KSxhLnNtYXJ0JiYodj12LmZpbHRlcihEPT5oLmluZGV4T2YoRCk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT12Lmxlbmd0aCYmKE09ITApKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudD12KX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVj''@;'; put 'put ''dGlvblR5cGUmJih0aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PXBsLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEw''@;'; put 'put ''KX1nZXQgY3VycmVudFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLGEmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJh''@;'; put 'put ''Y2tCeShhKSksdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBfc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGl8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGV9''@;'; put 'put ''Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9jdXJyZW50PVtdLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPW51bGwsdGhpcy5fY3VycmVudFNpbmdsZT1udWxsLHRoaXMuZW1pdENoYW5nZSgpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''Zm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZUN1cnJlbnQoYSxkKXt0aGlzLl9jdXJyZW50PWEsZCYmdGhpcy52YWx1ZUNvbGxlY3Rvci5uZXh0KGEpfWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5jdXJyZW50U2luZ2xl''@;'; put 'put ''PT09YTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuY3VycmVudC5pbmRleE9mKGEpPj0wfXNldFNlbGVjdGVkKGEsZCl7Y29uc3QgaD10aGlzLmN1cnJlbnQ/dGhpcy5jdXJyZW50LmluZGV4T2YoYSk6LTE7c3dpdGNoKHRoaXMuX3NlbGVjdGlvblR5cGUpe2Nhc2UgcGwu''@;'; put 'put ''Tm9uZTpjYXNlIHBsLlNpbmdsZTpicmVhaztjYXNlIHBsLk11bHRpOmg+PTAmJiFkP3RoaXMuZGVzZWxlY3RJdGVtKGgpOmg8MCYmZCYmdGhpcy5zZWxlY3RJdGVtKGEpfX1pc0FsbFNlbGVjdGVkKCl7aWYodGhpcy5fc2VsZWN0aW9uVHlwZSE9PXBsLk11bHRpfHwhdGhpcy5faXRlbXMuZGlz''@;'; put 'put ''cGxheWVkKXJldHVybiExO2NvbnN0IGE9dGhpcy5faXRlbXMuZGlzcGxheWVkLmZpbHRlcihmPT4hMT09PXRoaXMuaXNMb2NrZWQoZikpO3JldHVybiEoYS5sZW5ndGg8MSkmJmEuZmlsdGVyKGY9PnRoaXMuY3VycmVudC5pbmRleE9mKGYpPi0xKS5sZW5ndGg9PT1hLmxlbmd0aH1sb2NrSXRl''@;'; put 'put ''bShhLGQpe2lmKHRoaXMuY2FuSXRCZUxvY2tlZCgpKXtjb25zdCBoPXRoaXMuX2l0ZW1zLnRyYWNrQnkoYSk7ITA9PT1kP3RoaXMubG9ja2VkUmVmcy5wdXNoKGgpOnRoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGY9PmghPT1mKX19aXNMb2NrZWQoYSl7aWYodGhpcy5j''@;'; put 'put ''YW5JdEJlTG9ja2VkKCkpe2NvbnN0IGQ9dGhpcy5faXRlbXMudHJhY2tCeShhKTtyZXR1cm4gdGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoZCk+LTF9cmV0dXJuITF9dG9nZ2xlQWxsKCl7dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk5vbmV8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5n''@;'; put 'put ''bGV8fCh0aGlzLmlzQWxsU2VsZWN0ZWQoKT90aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmN1cnJlbnQuaW5kZXhPZihhKTtkPi0xJiYhMT09PXRoaXMuaXNMb2NrZWQoYSkmJnRoaXMuZGVzZWxlY3RJdGVtKGQpfSk6dGhpcy5faXRlbXMuZGlzcGxheWVk''@;'; put 'put ''LmZvckVhY2goYT0+e3RoaXMuY3VycmVudC5pbmRleE9mKGEpPDAmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5zZWxlY3RJdGVtKGEpfSkpfXNlbGVjdEl0ZW0oYSl7dGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5jb25jYXQoYSksdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRo''@;'; put 'put ''aXMuX2l0ZW1zLnRyYWNrQnkoYSkpfWRlc2VsZWN0SXRlbShhKXtpZih0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LnNsaWNlKDAsYSkuY29uY2F0KHRoaXMuY3VycmVudC5zbGljZShhKzEpKSxhPHRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoKXtjb25zdCBkPXRoaXMucHJldlNlbGVj''@;'; put 'put ''dGlvblJlZnMuc3BsaWNlKGEsMSk7dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoaD0+aCE9PWRbMF0pfX1jYW5JdEJlTG9ja2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUhPT1wbC5Ob25lfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwu''@;'; put 'put ''U2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihkZyks''@;'; put 'put ''eHIodWcpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxiRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXc9bmV3IGVpKFF5LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChReS5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFF5LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEk3KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3Ro''@;'; put 'put ''aXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVlcnlTZWxlY3RvcigiaW5wdXQiKT8uY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoR2UoZV8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJkYXRhZ3JpZC1zZWxlY3QiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2VsZWN0aW9uQ2VsbENsaWNr''@;'; put 'put ''KGYpfSl9fSksY30pKCksU3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0U3RhdGUoYSl7''@;'; put 'put ''dGhpcy5zZXRXaWR0aChhKSx0aGlzLnNldEhpZGRlbihhKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhp''@;'; put 'put ''cy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlz''@;'; put 'put ''LmVsLm5hdGl2ZUVsZW1lbnQsS3gpfWNsZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSxHZShJNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXX0pLGN9KSgpLGxPPTAsRW09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUs''@;'; put 'put ''Y2UsYmUsRWUpe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPWQsdGhpcy5nbG9iYWxFeHBhbmRhYmxlPWgsdGhpcy5leHBhbmQ9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmRpc3BsYXlNb2RlPU0sdGhpcy52Y3I9RCx0aGlzLmNvbW1vblN0cmluZ3M9Y2UsdGhp''@;'; put 'put ''cy5pdGVtcz1iZSx0aGlzLmRvY3VtZW50PUVlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZGV0YWlsRGlzYWJsZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5k''@;'; put 'put ''aXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGwsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgeXgoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIs''@;'; put 'put ''dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsbE8rKyx0aGlzLmlkPSJjbHItZGctcm93IitsTyx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiK2xPLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrbE8s''@;'; put 'put ''dGhpcy5leHBhbmRhYmxlSWQ9Zi5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocTgoZi5yZXBsYWNlLGYuZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFtCZSxxZV0pPT57QmUmJnFlPyh0aGlzLnJlcGxhY2VkPSEwLFouYWRkQ2xhc3MocmUubmF0aXZlRWxlbWVudCwiZGF0''@;'; put 'put ''YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSExLFoucmVtb3ZlQ2xhc3MocmUubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5faXRlbT1hLHRoaXMuaXRlbUNo''@;'; put 'put ''YW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBjbHJEZ1NlbGVjdGFibGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRlbSYmdGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''bG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9YX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCh0aGlz''@;'; put 'put ''Lml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTm9uZT90aGlzLl9zZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMuc2VsZWN0aW9uLnJhbmdlU3Rh''@;'; put 'put ''cnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yb3dTZWxlY3Rpb25MYWJlbD90aGlzLl9yb3dTZWxlY3Rpb25MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3R9c2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoYSl7dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5q''@;'; put 'put ''ZWN0b3IuZ2V0KHZHLHRoaXMudmNyKS5yb3dWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKHZHLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7''@;'; put 'put ''dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2goYT0+e2EuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGEuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMu''@;'; put 'put ''X2NhbGN1bGF0ZWRDZWxscy5kZXRhY2goKTthPT09UXkuQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoZC5fdmlldyl9KSk6KHRoaXMuZGlzcGxheUNl''@;'; put 'put ''bGxzPSEwLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChkLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSF0aGlzLmV4''@;'; put 'put ''cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZShhPSF0aGlzLnNlbGVjdGVkKXthIT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkQ2hhbmdl''@;'; put 'put ''ZC5lbWl0KGEpKX10b2dnbGVFeHBhbmQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRBbmltYXRpb24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Y2xl''@;'; put 'put ''YXJSYW5nZXMoYSl7YS5zaGlmdEtleSYmKHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUoITApKSl9c2Vs''@;'; put 'put ''ZWN0Um93KGE9IXRoaXMuc2VsZWN0ZWQsZCl7IkxBQkVMIiE9PWQudGFyZ2V0LnRhZ05hbWUmJih0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlzLml0ZW06dGhpcy50b2dnbGUo''@;'; put 'put ''YSkpfXJhbmdlU2VsZWN0KCl7Y29uc3QgYT10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighYSlyZXR1cm47Y29uc3QgZD1hLmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rpb24uY3VycmVudC5pbmNsdWRl''@;'; put 'put ''cyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYtMSE9PWQpe2NvbnN0IGg9YS5pbmRleE9mKHRoaXMuaXRlbSksZj1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KGEuc2xpY2UoTWF0aC5taW4oZCxoKSxNYXRoLm1h''@;'; put 'put ''eChkLGgpKzEpKSk7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnB1c2goLi4uZil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''YykoR2UoZV8pLEdlKEt5KSxHZShxeSksR2UocXgpLEdlKFhmKSxHZShiRyksR2UoRG8pLEdlKEVvKSxHZShKaSksR2UoaXMpLEdlKGRnKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCxoKXtpZigxJmEmJmFvKGgsUWYsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5kZ0NlbGxzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoVkwsNSkscWEobEJlLDUpLHFhKGNCZSw1LERvKSxxYSh1QmUsNSxEbykscWEoZEJlLDUsRG8pKSwyJmEpe2xldCBo''@;'; put 'put ''O0NpKGg9U2koKSkmJihkLmV4cGFuZEFuaW1hdGlvbj1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5kZXRhaWxCdXR0b249aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3N0aWNreUNlbGxzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9zY3JvbGxhYmxlQ2VsbHM9aC5maXJzdCksQ2koaD1TaSgp''@;'; put 'put ''KSYmKGQuX2NhbGN1bGF0ZWRDZWxscz1oLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJyb3dncm91cCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtb3ducyIsZC5pZCksVHIoImRhdGFncmlkLXJvdyIsITApKCJkYXRhZ3JpZC1yb3ct''@;'; put 'put ''c2tlbGV0b24iLGQuc2tlbGV0b25Mb2FkaW5nKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntkZXRhaWxEaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGdEZXRhaWxEaXNhYmxlZCIsImRldGFpbERpc2FibGVkIl0sZGV0YWlsSGlkZGVuOltObi5Ob25lLCJjbHJEZ0Rl''@;'; put 'put ''dGFpbEhpZGRlbiIsImRldGFpbEhpZGRlbiJdLHNrZWxldG9uTG9hZGluZzpbTm4uTm9uZSwiY2xyRGdTa2VsZXRvbkxvYWRpbmciLCJza2VsZXRvbkxvYWRpbmciXSxpdGVtOltObi5Ob25lLCJjbHJEZ0l0ZW0iLCJpdGVtIl0sY2xyRGdTZWxlY3RhYmxlOiJjbHJEZ1NlbGVjdGFibGUiLHNl''@;'; put 'put ''bGVjdGVkOltObi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbTm4uTm9uZSwiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJEZ0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0''@;'; put 'put ''YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dTZWxlY3Rpb25MYWJlbDoiY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckRnRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3F4''@;'; put 'put ''LHtwcm92aWRlOlUxLHVzZUV4aXN0aW5nOnF4fSx7cHJvdmlkZTpEeCx1c2VFeGlzdGluZzpxeH1dKV0sbmdDb250ZW50U2VsZWN0b3JzOmZCZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbInN0''@;'; put 'put ''aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYi''@;'; put 'put ''XSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0s''@;'; put 'put ''WzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFn''@;'; put 'put ''cmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNs''@;'; put 'put ''YXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNzIl0sWzEsImRhdGFncmlkLXNjcm9sbGluZy1jZWxscyJd''@;'; put 'put ''LFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInRhYmlu''@;'; put 'put ''ZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInRhYmluZGV4IiwiLTEiLCJ0''@;'; put 'put ''eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEs''@;'; put 'put ''ImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgi''@;'; put 'put ''LCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwi''@;'; put 'put ''ZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIsNCwibmdJZiJdLFsidGFiaW5kZXgi''@;'; put 'put ''LCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24iXSxbMSwic2tl''@;'; put 'put ''bGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGhCZSksZ3QoMCx5QmUsMywyLCJkaXYiLDYpKDEsd0JlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLFNCZSwxLDEsbnVsbCw4KSgzLE1CZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAs''@;'; put 'put ''SWMpKDUsVkJlLDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLEljKSxGbCg3LG51bGwsMikpLDImYSYmKE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxmZSgpLE1lKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmZC5leHBhbmQuZXhwYW5kYWJs''@;'; put 'put ''ZSksZmUoKSxNZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJiFkLmV4cGFuZC5leHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsTjEscnMsZHMsY0csbEcscWwsTWQsYkwsbmwsJHMsVkwsUmQsUWYseUcsU3BdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3Zh''@;'; put 'put ''ciBXMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLldJRFRIPTBdPSJXSURUSCIsY1tjLkhJRERFTj0xXT0iSElEREVOIixjW2MuSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsY30oVzF8fHt9KTtjb25zdCBCWmU9T2JqZWN0LmtleXMoVzEpLm1hcChjPT5XMVtjXSkuZmlsdGVyKGM9PmM9PT1w''@;'; put 'put ''YXJzZUludChjLDEwKSYmYyE9PVcxLklOSVRJQUxJWkUpO2xldCBoZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyBlaShudWxsKSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT4h''@;'; put 'put ''YS5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5zLm1hcChhPT57Y29uc3QgZD17Li4uYS52YWx1ZX07cmV0dXJuIGRlbGV0ZSBkLmNoYW5nZXMsZH0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5sZW5ndGh9cmVzZXRUb0xhc3RDYWNoZSgpe3RoaXMuX2Nh''@;'; put 'put ''Y2hlLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXsuLi5hLGNoYW5nZXM6QlplfTt0aGlzLmNvbHVtbnNbZF0ubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hhbmdlQXQoYSxkKXt0aGlzLmNvbHVtbnNbYV0mJnRoaXMu''@;'; put 'put ''ZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1thXSxkKX1lbWl0U3RhdGVDaGFuZ2UoYSxkKXtjb25zdCBoPXsuLi5hLnZhbHVlLC4uLmR9O2EubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBqWmU9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBSZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxE''@;'; put 'put ''LFoscmUsY2UsYmUsRWUsQmUpe3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLml0ZXJhYmxlRGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLm5nWm9uZT1mLHRoaXMucmVuZGVyZXIyPXYsdGhpcy50ZW1wbGF0ZVJlZj1NLHRoaXMudmlld0NvbnRhaW5lclJlZj1ELHRoaXMuZGlyZWN0''@;'; put 'put ''aW9uYWxpdHk9Wix0aGlzLnNjcm9sbERpc3BhdGNoZXI9cmUsdGhpcy52aWV3cG9ydFJ1bGVyPWNlLHRoaXMuZGF0YWdyaWQ9YmUsdGhpcy5jb2x1bW5zU2VydmljZT1FZSx0aGlzLmluamVjdG9yPUJlLHRoaXMucmVuZGVyZWRSYW5nZUNoYW5nZT1uZXcgS3IsdGhpcy5wZXJzaXN0SXRlbXM9''@;'; put 'put ''ITAsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cz17Li4ualplfSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy50b3BJbmRleD0wLHRoaXMubXV0YXRpb25DaGFuZ2VzPW5ldyBNdXRhdGlvbk9ic2VydmVyKHFlPT57cWUuZm9yRWFjaChydD0+e3J0LnRhcmdldC5jbGFz''@;'; put 'put ''c0xpc3QuY29udGFpbnMoImRhdGFncmlkLWNvbXBhY3QiKSYmdGhpcy5pdGVtU2l6ZT4yNCYmKHRoaXMuaXRlbVNpemU9MjQpfSl9KSx0aGlzLnZpZXdSZXBlYXRlcj1uZXcgWjBlLHRoaXMuY2RrVmlydHVhbEZvcklucHV0cz17Y2RrVmlydHVhbEZvclRyYWNrQnk6cWU9PnFlfSxoLnNtYXJ0''@;'; put 'put ''ZW5VcCgpLGJlLmRldGFpbFNlcnZpY2UucHJldmVudEZvY3VzU2Nyb2xsPSEwLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmPWJlLmVsLHRoaXMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPTIwLHRoaXMubXV0YXRpb25DaGFuZ2VzLm9ic2VydmUodGhpcy5kYXRhZ3JpZEVsZW1lbnRS''@;'; put 'put ''ZWYubmF0aXZlRWxlbWVudCx7YXR0cmlidXRlRmlsdGVyOlsiY2xhc3MiXSxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0pLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5PW5ldyBFRmUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNp''@;'; put 'put ''emVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmly''@;'; put 'put ''dHVhbEZvck9mKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Y9YSx0aGlzLml0ZW1zLmFsbD1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMu''@;'; put 'put ''Y2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcz8uY2RrVmlydHVhbEZvcklucHV0cz8uY2RrVmlydHVhbEZvclRlbXBsYXRlfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0''@;'; put 'put ''dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9ZDcoYSksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemV9c2V0IGl0ZW1TaXplKGEpe3RoaXMuX2Nka0ZpeGVkU2l6''@;'; put 'put ''ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemU9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZl''@;'; put 'put ''clB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHg9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1''@;'; put 'put ''dHMubWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHg9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9c2V0IGRhdGFSYW5nZShhKXthJiYodGhpcy5pdGVtcy5z''@;'; put 'put ''bWFydCYmdGhpcy5pdGVtcy5zbWFydGVuRG93bigpLHRoaXMudG90YWxJdGVtcz1hLnRvdGFsLHRoaXMudXBkYXRlRGF0YVJhbmdlKGEuc2tpcCxhLmRhdGEpKX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLl90b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpe3RoaXMuX3RvdGFsSXRl''@;'; put 'put ''bXM9YX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKT0+e3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0PXRoaXMuY3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQodGhpcy5jaGFuZ2VEZXRlY3RvclJlZix0aGlzLm5nWm9uZSx0aGlz''@;'; put 'put ''LnJlbmRlcmVyMix0aGlzLmRpcmVjdGlvbmFsaXR5LHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLnZpZXdwb3J0UnVsZXIsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYsdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kpLHRoaXMuY2RrVmlydHVhbEZvcj1mdW5jdGlvbiBVWmUoYyxsLGEsZCxo''@;'; put 'put ''LGYpe2lmKCtOaWUubWFqb3I8MTkpcmV0dXJuIG5ldyBrTChjLGwsYSxkLGgsZik7e2NvbnN0IHY9RHMuY3JlYXRlKHtwYXJlbnQ6ZmkoaGMpLHByb3ZpZGVyczpbe3Byb3ZpZGU6RHksdXNlVmFsdWU6aH1dfSk7cmV0dXJuIERzLmNyZWF0ZSh7cGFyZW50OnYscHJvdmlkZXJzOlt7cHJvdmlk''@;'; put 'put ''ZTpEbyx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpTbCx1c2VWYWx1ZTpsfSx7cHJvdmlkZTplbSx1c2VWYWx1ZTphfSx7cHJvdmlkZTpfWSx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpXYSx1c2VWYWx1ZTpmfSx7cHJvdmlkZTprTCx1c2VDbGFzczprTH1dfSkuZ2V0KGtMKX19KHRoaXMudmlld0NvbnRh''@;'; put 'put ''aW5lclJlZix0aGlzLnRlbXBsYXRlUmVmLHRoaXMuaXRlcmFibGVEaWZmZXJzLHRoaXMudmlld1JlcGVhdGVyLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LHRoaXMubmdab25lKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5uZ09uSW5pdCgpfSksdGhpcy5ncmlkUm9sZUVsZW1lbnQ9''@;'; put 'put ''dGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT0iZ3JpZCJdJyksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5pdGVtcy5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLml0''@;'; put 'put ''ZW1zLnNtYXJ0JiYodGhpcy5jZGtWaXJ0dWFsRm9yLmNka1ZpcnR1YWxGb3JPZj1hKX0pLHRoaXMuY2RrVmlydHVhbEZvci5kYXRhU3RyZWFtLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGVBcmlhUm93Q291bnQoYS5sZW5ndGgpfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xs''@;'; put 'put ''ZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudG9wSW5kZXg9YX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlbmRlcmVkUmFuZ2VDaGFuZ2UuZW1pdChhKX0pLHRoaXMuZGF0YWdyaWQucmVmcmVzaC5z''@;'; put 'put ''dWJzY3JpYmUoYT0+e2EuZmlsdGVycyYmdGhpcy5zY3JvbGxUb0luZGV4KDApfSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy52aWV3UmVwZWF0ZXIuZGV0YWNoKCl9KSl9bmdEb0NoZWNrKCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5u''@;'; put 'put ''Z0RvQ2hlY2soKSx0aGlzLnVwZGF0ZUFyaWFSb3dJbmRleGVzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nT25EZXN0cm95KCksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/Lm5nT25EZXN0cm95KCksdGhpcy5tdXRhdGlvbkNoYW5nZXM/LmRpc2Nvbm5lY3QoKSx0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9c2Nyb2xsVXAoYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgtYSxkKX1zY3JvbGxEb3duKGEsZD0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4K2Es''@;'; put 'put ''ZCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleChhLGQpfXVwZGF0ZURhdGFSYW5nZShhLGQpe2xldCBoPXRoaXMuY2RrVmlydHVhbEZvck9mOyghdGhpcy5wZXJzaXN0SXRlbXN8fCFofHxoPy5sZW5ndGghPT10aGlz''@;'; put 'put ''LnRvdGFsSXRlbXMpJiYoaD1BcnJheSh0aGlzLnRvdGFsSXRlbXMpKSxoLnNwbGljZShhLGQubGVuZ3RoLC4uLmQpLHRoaXMuY2RrVmlydHVhbEZvck9mPUFycmF5LmZyb20oaCl9dXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpe2lmKHRoaXMuY2RrVmlydHVhbEZvcilmb3IoY29uc3QgYSBv''@;'; put 'put ''ZiBPYmplY3Qua2V5cyh0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMpKXRoaXMuY2RrVmlydHVhbEZvclthXSE9PXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSYmKHRoaXMuY2RrVmlydHVhbEZvclthXT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0pfXVwZGF0ZUZpeGVkU2l6ZVZpcnR1''@;'; put 'put ''YWxTY3JvbGxJbnB1dHMoKXt0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSYmdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0''@;'; put 'put ''dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfXVwZGF0ZUFyaWFSb3dDb3VudChhKXt0aGlzLmdyaWRSb2xlRWxlbWVudD8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IixhLnRvU3RyaW5nKCkp''@;'; put 'put ''fXVwZGF0ZUFyaWFSb3dJbmRleGVzKCl7Zm9yKGxldCBhPTA7YTx0aGlzLnZpZXdDb250YWluZXJSZWYubGVuZ3RoO2ErKyl7Y29uc3QgZD10aGlzLnZpZXdDb250YWluZXJSZWYuZ2V0KGEpO2Qucm9vdE5vZGVzLmZpbmQoTT0+IkNMUi1ERy1ST1ciPT09TS50YWdOYW1lKT8ucXVlcnlTZWxl''@;'; put 'put ''Y3RvcignW3JvbGU9InJvdyJdJyk/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsKGQuY29udGV4dC5pbmRleCsxKS50b1N0cmluZygpKX19Y3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQoYSxkLGgsZix2LE0sRCxaKXtjb25zdCByZT1ELm5hdGl2ZUVsZW1lbnQu''@;'; put 'put ''cXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIiksY2U9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC10YWJsZSIpLGJlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtcm93cyIpO2xldCBCZT0wLHFlPTA7ZnVuY3Rpb24gcnQoKXtiZS5zdHls''@;'; put 'put ''ZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHtCZX1weClgLGJlLnN0eWxlLmhlaWdodD1xZS1CZSsicHgifWNvbnN0IHB0PWZ1bmN0aW9uIHpaZShjLGwsYSxkLGgsZix2LE0sRCl7cmV0dXJuK05pZS5tYWpvcjwxOT9uZXcgRHkoYyxsLGEsaCxmLHYsTSxEKTpEcy5jcmVhdGUoe3BhcmVudDpm''@;'; put 'put ''aShoYykscHJvdmlkZXJzOlt7cHJvdmlkZTpKaSx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpFcyx1c2VWYWx1ZTpsfSx7cHJvdmlkZTpXYSx1c2VWYWx1ZTphfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpXMGUsdXNlVmFsdWU6aH0se3Byb3ZpZGU6cG0sdXNlVmFsdWU6Zn0se3By''@;'; put 'put ''b3ZpZGU6a3ksdXNlVmFsdWU6dn0se3Byb3ZpZGU6QUwsdXNlVmFsdWU6TX0se3Byb3ZpZGU6JDBlLHVzZVZhbHVlOkR9LHtwcm92aWRlOkR5LHVzZUNsYXNzOkR5fV19KS5nZXQoRHkpfSh7bmF0aXZlRWxlbWVudDpyZX0sYSxkLGgsWixmLHYsTSxudWxsKTtyZXR1cm4gcHQuX2NvbnRlbnRX''@;'; put 'put ''cmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShkdCl7QmU9dm9pZCAwPT09ZHQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8uZXhlYyhkdCk/LlsxXSxydCgpfX19fSxwdC5zZXRUb3RhbENvbnRlbnRTaXplPWR0PT57cWU9ZHQsY2Uuc3R5bGUuaGVpZ2h0''@;'; put 'put ''PWAke3FlfXB4YCxydCgpfSxwdH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKGVtKSxHZShkZyksR2UoV2EpLEdlKEVvKSxHZShTbCksR2UoRG8pLEdlKHBtKSxHZShreSksR2UoQUwpLEdlKENzKCgpPT5BbSkpLEdlKGhnKSxHZSho''@;'; put 'put ''YykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWaXJ0dWFsU2Nyb2xsIiwiIl0sWyIiLCJDbHJWaXJ0dWFsU2Nyb2xsIiwiIl1dLGlucHV0czp7cGVyc2lzdEl0ZW1zOltObi5Ob25lLCJjbHJWaXJ0dWFsUGVyc2lzdEl0ZW1zIiwicGVyc2lzdEl0ZW1zIl0s''@;'; put 'put ''Y2RrVmlydHVhbEZvck9mOltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c09mIiwiY2RrVmlydHVhbEZvck9mIl0sY2RrVmlydHVhbEZvclRyYWNrQnk6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzVHJhY2tCeSIsImNka1ZpcnR1YWxGb3JUcmFja0J5Il0sY2RrVmlydHVhbEZvclRlbXBsYXRlOltO''@;'; put 'put ''bi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlIl0sY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlQ2FjaGVTaXplIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIl0s''@;'; put 'put ''aXRlbVNpemU6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzSXRlbVNpemUiLCJpdGVtU2l6ZSJdLG1pbkJ1ZmZlclB4OltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c01pbkJ1ZmZlclB4IiwibWluQnVmZmVyUHgiXSxtYXhCdWZmZXJQeDpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NNYXhCdWZmZXJQ''@;'; put 'put ''eCIsIm1heEJ1ZmZlclB4Il0sZGF0YVJhbmdlOltObi5Ob25lLCJjbHJWaXJ0dWFsRGF0YVJhbmdlIiwiZGF0YVJhbmdlIl19LG91dHB1dHM6e3JlbmRlcmVkUmFuZ2VDaGFuZ2U6InJlbmRlcmVkUmFuZ2VDaGFuZ2UifSxmZWF0dXJlczpbZGEoW2RnXSldfSksY30pKCksTGRlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWQsdGhpcy5wYWdlPWgsdGhpcy5kZWJvdW5jZXI9Zix0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZShMcigoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307''@;'; put 'put ''dGhpcy5wYWdlLnNpemU+MCYmKGEucGFnZT17ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRvOnRoaXMucGFnZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29t''@;'; put 'put ''cGFyYXRvciBpbnN0YW5jZW9mIG9PP3tieTp0aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZD10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmls''@;'; put 'put ''dGVycygpO2lmKGQubGVuZ3RoPjApe2EuZmlsdGVycz1bXTtmb3IoY29uc3QgaCBvZiBkKWEuZmlsdGVycy5wdXNoKGguc3RhdGU/aC5zdGF0ZTpoKX1yZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodWcpLHhyKHNPKSx4cihNbSks''@;'; put 'put ''eHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxUbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5z''@;'; put 'put ''ZXRDZWxsc1N0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q2VsbHNTdGF0ZSgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRDZWxs''@;'; put 'put ''c1N0YXRlKCl7dGhpcy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiZ0aGlzLmNlbGxzLmZvckVhY2goKGEsZCk9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0mJmEucmVzZXRTdGF0ZSh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNb''@;'; put 'put ''ZF0udmFsdWUpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhnKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXSxbImNsci1kZy1yb3ctZGV0YWlsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9u''@;'; put 'put ''KGEsZCxoKXtpZigxJmEmJihhbyhoLGMsNSksYW8oaCxTcCw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5leHBhbmRhYmxlUm93PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNlbGxzPWYpfX19KSxjfSkoKSxBbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQs''@;'; put 'put ''WixyZSxjZSxiZSxFZSxCZSxxZSxydCl7dGhpcy5vcmdhbml6ZXI9YSx0aGlzLml0ZW1zPWQsdGhpcy5leHBhbmRhYmxlUm93cz1oLHRoaXMuc2VsZWN0aW9uPWYsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPXYsdGhpcy5zdGF0ZVByb3ZpZGVyPU0sdGhpcy5kaXNwbGF5TW9kZT1ELHRoaXMucmVu''@;'; put 'put ''ZGVyZXI9Wix0aGlzLmRldGFpbFNlcnZpY2U9cmUsdGhpcy5kb2N1bWVudD1jZSx0aGlzLmVsPWJlLHRoaXMucGFnZT1FZSx0aGlzLmNvbW1vblN0cmluZ3M9QmUsdGhpcy5rZXlOYXZpZ2F0aW9uPXFlLHRoaXMuem9uZT1ydCx0aGlzLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsPXRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCx0aGlzLmNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJl''@;'; put 'put ''bD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzPSExLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLnJlZnJlc2g9''@;'; put 'put ''bmV3IEtyKCExKSx0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ9ITEsdGhpcy5jdXN0b21TZWxlY3RBbGw9bmV3IEtyLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGwsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBwdD1NdSgpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxs''@;'; put 'put ''LSIrcHQscmUuaWQ9cHR9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5pdGVtcy5sb2FkaW5nfXNldCBsb2FkaW5nKGEpe3RoaXMuaXRlbXMubG9hZGluZz1hfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPWE/cGwuTXVsdGk6cGwuTm9uZSx0aGlzLnNlbGVj''@;'; put 'put ''dGlvbi51cGRhdGVDdXJyZW50KGEsITEpfXNldCBzaW5nbGVTZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPXBsLlNpbmdsZSxhP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9YTp0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlJiYodGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''Y3VycmVudFNpbmdsZT1udWxsKX1zZXQgY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5wcmVzZXJ2ZVNlbGVjdGlvbj1hfXNldCByb3dTZWxlY3Rpb25Nb2RlKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGU9YX1zZXQgdHJhY2tCeShhKXt0aGlzLml0''@;'; put 'put ''ZW1zLnRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxTZWxlY3RlZChhKXt0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ/dGhpcy5jdXN0b21TZWxlY3RBbGwuZW1pdChhKTp0aGlzLnNlbGVjdGlvbi50b2dn''@;'; put 'put ''bGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoVjEoZD0+X3goZm8oZC5tYXAoaD0+aC5pdGVtKSkscTgoZC5tYXAoaD0+aC5p''@;'; put 'put ''dGVtQ2hhbmdlcykpLnBpcGUoZm0oMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXll''@;'; put 'put ''ZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnVwZGF0''@;'; put 'put ''ZURldGFpbFN0YXRlKCksdGhpcy52aXJ0dWFsU2Nyb2xsKXtjb25zdCBkPXRoaXMua2V5TmF2aWdhdGlvbi5nZXRBY3RpdmVDZWxsKCk7ZCYmdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+dGhpcy5rZXlOYXZpZ2F0aW9uLnNldEFjdGl2ZUNlbGwoZCkp''@;'; put 'put ''fSl9fSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMua2V5TmF2aWdhdGlvbi5pbml0aWFsaXplS2V5R3JpZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJlc2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZT90aGlzLnNpbmdsZVNl''@;'; put 'put ''bGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5NdWx0aSYmdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMu''@;'; put 'put ''Y2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygpfSksdGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3By''@;'; put 'put ''b2plY3RlZERpc3BsYXlDb2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGlvblJvd3Mu''@;'; put 'put ''bGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRpb25Sb3dzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZGV0YWNoKCk7YT09PVF5LkRJU1BMQVk/KHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhp''@;'; put 'put ''cy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNl''@;'; put 'put ''cnQoZC5fdmlldyl9KSk6KHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSks''@;'; put 'put ''dGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2NhbGN1bGF0aW9uUm93cy5pbnNlcnQoZC5fdmlldyl9KSl9KSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHhkKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5ZG93biIpLnN1YnNjcmli''@;'; put 'put ''ZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSEwKX0pLHhkKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5dXAiKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMSl9KSl9KX1uZ09uRGVz''@;'; put 'put ''dHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZUFsbFNlbGVjdGVkKGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdEFsbENoZWNrYm94Py5uYXRpdmVFbGVtZW50LmNsaWNrKCl9cmVzaXplKCl7dGhpcy5vcmdhbml6ZXIu''@;'; put 'put ''cmVzaXplKCl9dXBkYXRlRGV0YWlsU3RhdGUoKXtpZih0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGE9dGhpcy5yb3dzLmZpbmQoZD0+dGhpcy5pdGVtcy50cmFja0J5KGQuaXRlbSk9PT10aGlzLml0ZW1zLnRyYWNrQnkodGhpcy5k''@;'; put 'put ''ZXRhaWxTZXJ2aWNlLnN0YXRlKSk7YT90aGlzLmRldGFpbFNlcnZpY2Uub3BlbihhLml0ZW0sYS5kZXRhaWxCdXR0b24ubmF0aXZlRWxlbWVudCk6dGhpcy52aXJ0dWFsU2Nyb2xsfHxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZXRhaWxTZXJ2aWNlLmNsb3NlKCl9KX19ZGF0YUNoYW5nZWQoKXt0''@;'; put 'put ''aGlzLml0ZW1zLnJlZnJlc2goKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSTcpLEdlKGRnKSxHZShxeSksR2UoZV8pLEdlKEt5KSxHZShMZGUpLEdlKGJHKSxHZShFbyksR2UoWGYpLEdlKHZzKSxHZShKaSksR2UoTW0pLEdlKGlzKSxHZShy''@;'; put 'put ''TyksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLFJkZSw1KSxhbyhoLEp5LDUpLGFvKGgsZ0csNSksYW8oaCxSNyw0KSxhbyhoLEVtLDQpKSwyJmEp''@;'; put 'put ''e2xldCBmO0NpKGY9U2koKSkmJihkLnZpcnR1YWxTY3JvbGw9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY29sdW1ucz1mKSxDaShmPVNpKCkpJiYoZC5yb3dzPWYpfX0s''@;'; put 'put ''dmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoQkJlLDUsSmkpLHFhKGpCZSw1LEppKSxxYSh6QmUsNSxEbykscWEoVUJlLDUsRG8pLHFhKFpCZSw1LERvKSxxYShXQmUsNSxEbykscWEoWUJlLDUsRG8pLHFhKEdCZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5kYXRh''@;'; put 'put ''Z3JpZD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5kYXRhZ3JpZFRhYmxlPWguZmlyc3QpLENpKGg9U2koKSkmJihkLnNjcm9sbGFibGVDb2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fcHJvamVj''@;'; put 'put ''dGVkQ2FsY3VsYXRpb25Db2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9kaXNwbGF5ZWRSb3dzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9jYWxjdWxhdGlvblJvd3M9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuc2VsZWN0QWxsQ2hlY2tib3g9aC5maXJzdCl9fSxob3N0VmFyczo0''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWhvc3QiLCEwKSgiZGF0YWdyaWQtZGV0YWlsLW9wZW4iLGQuZGV0YWlsU2VydmljZS5pc09wZW4pfSxpbnB1dHM6e2xvYWRpbmdNb3JlSXRlbXM6W05uLk5vbmUsImNsckxvYWRpbmdNb3JlSXRlbXMiLCJsb2Fk''@;'; put 'put ''aW5nTW9yZUl0ZW1zIl0sY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6ImNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsIixjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6ImNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbCIsY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFM''@;'; put 'put ''YWJlbDoiY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCIsY2xyRGdEaXNhYmxlUGFnZUZvY3VzOiJjbHJEZ0Rpc2FibGVQYWdlRm9jdXMiLGN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ6W05uLk5vbmUsImNsckRnQ3VzdG9tU2VsZWN0QWxsRW5hYmxlZCIsImN1c3RvbVNlbGVjdEFsbEVuYWJs''@;'; put 'put ''ZWQiXSxsb2FkaW5nOltObi5Ob25lLCJjbHJEZ0xvYWRpbmciLCJsb2FkaW5nIl0sc2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOltObi5Ob25lLCJjbHJEZ1NpbmdsZVNlbGVjdGVkIiwic2luZ2xlU2VsZWN0ZWQiXSxjbHJEZ1By''@;'; put 'put ''ZXNlcnZlU2VsZWN0aW9uOiJjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uIixyb3dTZWxlY3Rpb25Nb2RlOltObi5Ob25lLCJjbHJEZ1Jvd1NlbGVjdGlvbiIsInJvd1NlbGVjdGlvbk1vZGUiXSx0cmFja0J5OltObi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7''@;'; put 'put ''c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3RlZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCIsY3VzdG9tU2VsZWN0QWxsOiJjbHJEZ0N1c3RvbVNlbGVjdEFsbCJ9LGZlYXR1cmVzOltkYShb''@;'; put 'put ''ZV8sc08sdWcsTW0sZGcsSTcsS3kscXksR3gsWGYsTGRlLHBHLGhnLGJHLHJPXSldLG5nQ29udGVudFNlbGVjdG9yczpLQmUsZGVjbHM6MzUsdmFyczo5LGNvbnN0czpbWyJkYXRhZ3JpZCIsIiJdLFsiZGF0YWdyaWRUYWJsZSIsIiJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxb''@;'; put 'put ''ImRpc3BsYXllZFJvd3MiLCIiXSxbInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyIsIiJdLFsiY2FsY3VsYXRpb25Sb3dzIiwiIl0sWyJzZWxlY3RBbGxDaGVja2JveCIsIiJdLFsxLCJkYXRhZ3JpZC1vdXRlci13cmFwcGVyIl0sWzEsImRhdGFncmlkLWlubmVyLXdyYXBwZXIiXSxbMSwi''@;'; put 'put ''ZGF0YWdyaWQiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBlciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJkYXRhZ3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdyJdLFsx''@;'; put 'put ''LCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRv''@;'; put 'put ''d24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4g''@;'; put 'put ''ZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''ZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsImRhdGFncmlkLXJvd3MiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWxvYWRpbmciLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRh''@;'; put 'put ''dGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIl0s''@;'; put 'put ''WyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9k''@;'; put 'put ''ZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwi''@;'; put 'put ''Y29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCIsImRhdGFncmlkLWZp''@;'; put 'put ''eGVkLWNvbHVtbiJdLFsxLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgkQmUpLFlyKDApLGRlKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJkaXYiLDksMCkoNSwi''@;'; put 'put ''ZGl2IiwxMCkoNiwiZGl2IiwxMSwxKSg4LCJkaXYiLDEyKSg5LCJkaXYiLDEzKSgxMCwiZGl2IiwxNCkoMTEsImRpdiIsMTUpLGd0KDEyLFhCZSwzLDEsImRpdiIsMTYpKDEzLEpCZSw0LDEsImRpdiIsMTcpKDE0LFFCZSw0LDEsImRpdiIsMTgpKDE1LGVqZSw0LDEsImRpdiIsMTkpLGhlKCks''@;'; put 'put ''ZGUoMTYsImRpdiIsMjApLEZsKDE3LG51bGwsMiksaGUoKSgpKCkoKSxkZSgxOSwiZGl2IiwyMSksZ3QoMjAsdGplLDUsMSwiY2xyLWRnLXJvdyIsMjIpLEZsKDIxLG51bGwsMyksZ3QoMjMsbmplLDUsMSwiY2xyLWRnLXJvdyIsMjIpLFlyKDI0LDEpLGd0KDI1LHJqZSwxLDAsImNsci1kZy1w''@;'; put 'put ''bGFjZWhvbGRlciIsMjMpLGhlKCkoKSgpKCksWXIoMjYsMiksZ3QoMjcsaWplLDMsMCwiZGl2IiwyNCksaGUoKSxZcigyOCwzKSxoZSgpLGRlKDI5LCJkaXYiLDI1KSgzMCwiZGl2IiwyNiksRmwoMzEsbnVsbCw0KSxoZSgpLEZsKDMzLG51bGwsNSksaGUoKSksMiZhJiYoZmUoMyksaHIoImFy''@;'; put 'put ''aWEtaGlkZGVuIiwhIWQuZGV0YWlsU2VydmljZS5pc09wZW58fG51bGwpLGZlKDkpLE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSxNZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9O''@;'; put 'put ''X1RZUEUuU2luZ2xlKSxmZSgpLE1lKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSxNZSgibmdJZiIsZC5leHBhbmRhYmxlUm93cy5oYXNFeHBhbmRhYmxlUm93fHxkLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoNSksTWUoIm5nSWYiLGQubG9hZGlu''@;'; put 'put ''Z01vcmVJdGVtcyksZmUoMyksTWUoIm5nSWYiLGQubG9hZGluZ01vcmVJdGVtcyksZmUoMiksTWUoIm5nSWYiLCFkLnBsYWNlaG9sZGVyKSxmZSgyKSxNZSgibmdJZiIsZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbYmEsZHMsTWQsbmwsJHMsUmQsUWYsZ0csRW0seUcsU3AsVG0sazcsRDdd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IEdaZT1jPT5jO2xldCBPZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLmFsbFNlbGVjdGVkPW5ldyBLcn1nZXQgY2xyQWxsU2VsZWN0ZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1u''@;'; put 'put ''cygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W1cxLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5z''@;'; put 'put ''LmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKGhnKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRw''@;'; put 'put ''dXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VsZWN0QWxsKCl9KSxMZSgxKSxoZSgpKSwyJmEmJihNZSgiZGlzYWJsZWQiLGQuYWxsSGlkZWFibGVzVmlzaWJsZSksZmUoKSxEcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0''@;'; put 'put ''QWxsLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxQZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3ZlcklkPU11KCksdGhpcy5vcGVuU3RhdGU9ITEsdGhpcy5zbWFydFBv''@;'; put 'put ''c2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj1HWmUsdGhpcy5zdWJzY3JpcHRpb249aC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT50aGlzLm9wZW5TdGF0ZT1mKX1nZXQgYWxsQ29s''@;'; put 'put ''dW1uc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fYWxsQ29sdW1uc1Zpc2libGV9c2V0IGFsbENvbHVtbnNWaXNpYmxlKGEpe3RoaXMuX2FsbENvbHVtbnNWaXNpYmxlPWF9Z2V0IGhpZGVhYmxlQ29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIo''@;'; put 'put ''ZD0+ZC52YWx1ZS5oaWRlYWJsZSkubWFwKGQ9PmQudmFsdWUpfWdldCBoYXNPbmx5T25lVmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoLXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMubGVuZ3RoPT0wJiYxPT09dGhpcy5oaWRlYWJsZUNv''@;'; put 'put ''bHVtblN0YXRlcy5maWx0ZXIoZD0+IWQuaGlkZGVuKS5sZW5ndGh9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXRvZ2dsZUNvbHVtblN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGY9PmYudmFsdWU9PT1h''@;'; put 'put ''KVswXTt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShoLHtoaWRkZW46ZCxjaGFuZ2VzOltXMS5ISURERU5dfSl9dG9nZ2xlU3dpdGNoUGFuZWwoKXt0aGlzLm9wZW5TdGF0ZT0hdGhpcy5vcGVuU3RhdGV9YWxsQ29sdW1uc1NlbGVjdGVkKCl7dGhpcy5hbGxTZWxlY3RlZEVs''@;'; put 'put ''ZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoaGcpLEdlKHNjKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlIl1dLHZpZXdR''@;'; put 'put ''dWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEob2plLDUsSmkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuYWxsU2VsZWN0ZWRFbGVtZW50PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjb2x1bW4tc3dpdGNoLXdyYXBwZXIi''@;'; put 'put ''LCEwKSgiYWN0aXZlIixkLm9wZW5TdGF0ZSl9LGZlYXR1cmVzOlt2ZChbb2ddKV0sZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbImFsbFNlbGVjdGVkIiwiIl0sWyJyb2xlIiwiYnV0dG9uIiwidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3Nl''@;'; put 'put ''QnV0dG9uIiwiIiwxLCJidG4iLCJidG4tc20iLCJjb2x1bW4tdG9nZ2xlLS1hY3Rpb24iXSxbImNsYXNzIiwiY29sdW1uLXN3aXRjaCIsInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJj''@;'; put 'put ''bHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDEsImNvbHVtbi1zd2l0Y2giLDMsImlkIl0sWzEsInN3aXRjaC1oZWFkZXIiXSxbInRhYmluZGV4Iiwi''@;'; put 'put ''LTEiLDEsImNsci1zci1vbmx5Il0sWyJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInRvZ2dsZS1zd2l0Y2gtY2xvc2UtYnV0dG9uIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSIsImFyaWEtaGlkZGVuIiwidHJ1''@;'; put 'put ''ZSJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJzd2l0Y2gtY29udGVudCIsImxpc3QtdW5zdHlsZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsInN3aXRjaC1mb290ZXIiXSxbMywiY2xyQWxsU2VsZWN0ZWQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNo''@;'; put 'put ''ZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDEpLExlKDEpLGhlKCksZ3QoMixjamUsMTUsOSwiZGl2IiwyKSksMiZhJiYoaHIoImFy''@;'; put 'put ''aWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuU3RhdGUpKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnBpY2tDb2x1bW5zLCIgIiksZmUoKSxNZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlblN0''@;'; put 'put ''YXRlKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltucyxOMSxaeSxycyxkcyxJZCxTaCxNZCxu''@;'; put 'put ''bCwkcyxQeCxMMWUsTngsSHgsT2RlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQ9YSxhJiZhLnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRo''@;'; put 'put ''aXMuZXhwYW5kYWJsZVJvd3NDb3VudC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHF5LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLGNP''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbH1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXyksR2UoWGYpLEdlKGhnKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''ZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpoamUsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3JpcHRpb24iXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShkamUpLGd0KDAsZmplLDgsMiwibmctY29udGFpbmVyIiwwKSgxLGdqZSw0LDEsIm5nLWNvbnRhaW5lciIsMCksWXIoMikpLDImYSYmKE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSYm''@;'; put 'put ''ZC5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pKX0sZGVwZW5kZW5jaWVzOltiYSxkcyxJZCxTaCxQZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IF9HPW5ldyBTdCgiQ09MVU1OX1NUQVRFIiksWFplPXtw''@;'; put 'put ''cm92aWRlOl9HLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gcVplKCl7cmV0dXJuIG5ldyBlaSh7Y2hhbmdlczpbXX0pfX07bGV0IFh4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1NdSgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VT''@;'; put 'put ''aXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTW0pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpbTm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6W05uLk5vbmUsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNp''@;'; put 'put ''emVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWzMsImZvciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''MywibmdWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwibGFiZWwiLDApLFlyKDEpLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzZWxlY3QiLDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gbWkoZC5wYWdlLnNpemUsZil8fChkLnBh''@;'; put 'put ''Z2Uuc2l6ZT1mKSxmfSksZ3QoNCxtamUsMiwyLCJvcHRpb24iLDMpLGhlKCkoKSksMiZhJiYoTWUoImZvciIsZC5wYWdlU2l6ZU9wdGlvbnNJZCksZmUoMyksVHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksTWUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxwaSgibmdNb2RlbCIsZC5w''@;'; put 'put ''YWdlLnNpemUpLGZlKCksTWUoIm5nRm9yT2YiLGQucGFnZVNpemVPcHRpb25zKSl9LGRlcGVuZGVuY2llczpbbnMsZHMsQTIsazIsVDIsbmwsJHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHVPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucGFnZT1hLHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncz1kLHRoaXMuZGV0YWlsU2VydmljZT1oLHRoaXMuY3VycmVudENoYW5nZWQ9bmV3IEtyKCExKSxhLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5z''@;'; put 'put ''aXplPWEpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2Uo''@;'; put 'put ''YSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucGFnZS5maXJzdEl0ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFn''@;'; put 'put ''ZS5jdXJyZW50KSx0aGlzLnBhZ2UuY3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vi''@;'; put 'put ''c2NyaWJlKGE9PnRoaXMuY3VycmVudENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnBy''@;'; put 'put ''ZXZpb3VzKCl9bmV4dCgpe3RoaXMucGFnZS5uZXh0KCl9dmVyaWZ5Q3VycmVudFBhZ2UoYSl7cGFyc2VJbnQoYS50YXJnZXQudmFsdWUsMTApIT09dGhpcy5wYWdlLmN1cnJlbnQmJihhLnRhcmdldC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3Qg''@;'; put 'put ''ZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50LnRv''@;'; put 'put ''U3RyaW5nKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1tKSxHZShpcyksR2UoWGYpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxk''@;'; put 'put ''LGgpe2lmKDEmYSYmYW8oaCxYeCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLl9wYWdlU2l6ZUNvbXBvbmVudD1mLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEodmplLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuY3VycmVudFBhZ2VJbnB1dFJl''@;'; put 'put ''Zj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicGFnaW5hdGlvbiIsITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0OltObi5Ob25lLCJjbHJEZ1BhZ2VJbnB1dERpc2FibGVkIiwiZGlzYWJsZUN1cnJlbnRQYWdlSW5w''@;'; put 'put ''dXQiXSxwYWdlU2l6ZTpbTm4uTm9uZSwiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbTm4uTm9uZSwiY2xyRGdUb3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOltObi5Ob25lLCJjbHJEZ0xhc3RQYWdlIiwibGFzdFBhZ2UiXSxjdXJyZW50UGFnZTpbTm4u''@;'; put 'put ''Tm9uZSwiY2xyRGdQYWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczp5amUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0IiwiIl0sWzQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24iXSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJjbGljayIs''@;'; put 'put ''ImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIsInBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMsInNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwi''@;'; put 'put ''c3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJsdXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoYmplKSxndCgwLE1qZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSx4amUsMTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImYSYmKE1lKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksZmUoKSxNZSgibmdJZiIsZC5kZXRhaWxTZXJ2''@;'; put 'put ''aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W2JhLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5jb2x1bW5SZXNpemVy''@;'; put 'put ''U2VydmljZT12LHRoaXMuY29sdW1uc1NlcnZpY2U9TSx0aGlzLmNvbHVtblN0YXRlPUQsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBLcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJS''@;'; put 'put ''ZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGE9dGhpcy5kZXRlY3RT''@;'; put 'put ''dHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0aChhKSxzdHJpY3RXaWR0aDphfX1zZXRDb2x1bW5TdGF0ZShhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbYV09dGhpcy5jb2x1bW5TdGF0ZX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoPyh0aGlzLmNvbHVt''@;'; put 'put ''blJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1pdHRlci5lbWl0KGEud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlzLnJlbmRlcmVyLmFkZENs''@;'; put 'put ''YXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5hdXRvU2V0PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgi''@;'; put 'put ''KSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEt4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCl9Y2xlYXJX''@;'; put 'put ''aWR0aCgpe3RoaXMud2lkdGhTZXQmJiF0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKSx0aGlzLmF1dG9TZXQmJnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5l''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50LFh5KX1kZXRlY3RTdHJpY3RXaWR0aCgpe3JldHVybiB0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeT90aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLndpZHRoQWZ0ZXJSZXNpemU6dGhpcy5hdXRvU2V0PzA6dGhpcy5kb21BZGFwdGVyLnVzZXJEZWZp''@;'; put 'put ''bmVkV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1jb21wdXRlV2lkdGgoYSl7bGV0IGQ9YTtyZXR1cm4gZHx8KGQ9dGhpcy5kb21BZGFwdGVyLnNjcm9sbFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpLGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpKEdlKEppKSxHZShFbyksR2UoSTcpLEdlKHZtKSxHZShmRyksR2UoaGcpLEdlKF9HKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sb3V0cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxmZWF0dXJlczpb''@;'; put 'put ''ZGEoW2ZHLFhaZV0pXX0pLGN9KSgpLHRXZT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIDB9Y2xpZW50UmVjdChhKXtyZXR1''@;'; put 'put ''cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19bWluV2lkdGgoYSl7cmV0dXJuIDB9Zm9jdXMoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBuV2U9Yz0+dGwoYyk/bmV3IHZtOm5ldyB0V2U7bGV0IHRfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlKXt0aGlzLmRhdGFncmlkPWEsdGhpcy5vcmdhbml6ZXI9ZCx0aGlzLml0ZW1zPWgsdGhp''@;'; put 'put ''cy5wYWdlPWYsdGhpcy5lbD12LHRoaXMucmVuZGVyZXI9TSx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Wix0aGlzLmNvbHVtbnNTZXJ2aWNlPXJlLHRoaXMubmdab25lPWNlLHRoaXMua2V5TmF2aWdhdGlvbj1iZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmPUVlLHRoaXMuX2hlaWdodFNldD0hMSx0''@;'; put 'put ''aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNPTVBVVEVf''@;'; put 'put ''Q09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuc2l6ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oZWlnaHRTZXQmJnRoaXMucmVzZXREYXRhZ3JpZEhlaWdodCgpfSkpLHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucy5wdXNoKEQuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKEJlPT50aGlzLnRvZ2dsZURldGFpbFBhbmUoQmUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITApKX1uZ09uSW5pdCgpe3Ro''@;'; put 'put ''aXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmNvbHVtblN0YXRlQ2hhbmdlZChhKSksbnVsbD09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQmJih0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25P''@;'; put 'put ''YnNlcnZlcigoW2FdKT0+eyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50fHxhLmlzSW50ZXJzZWN0aW5nKSYmdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGUmJih0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRo''@;'; put 'put ''aXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKX0pLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRo''@;'; put 'put ''aXMuaGVhZGVycy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdGFiaWxpemVDb2x1bW5zKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50YWJsZVNpemVTZXJ2aWNlLnRhYmxlPXRoaXMuZWx9bmdB''@;'; put 'put ''ZnRlclZpZXdDaGVja2VkKCl7dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zJiZ0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKSx0aGlzLnNob3VsZENvbXB1dGVIZWlnaHQoKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wdXRlRGF0''@;'; put 'put ''YWdyaWRIZWlnaHQoKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNv''@;'; put 'put ''bHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGQsaCk9PntoPjAmJnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZC5jb2x1bW5JbmRleCx7Y2hh''@;'; put 'put ''bmdlczpbVzEuSElEREVOXSxoaWRkZW46YX0pfSkpOmF8fHRoaXMuY29sdW1uc1NlcnZpY2UucmVzZXRUb0xhc3RDYWNoZSgpKX1zZXR1cENvbHVtbnMoKXt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoYSxkKT0+YS5zZXRDb2x1bW5TdGF0ZShkKSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5z''@;'; put 'put ''LnNwbGljZSh0aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2NoYW5nZXM6W1cxLklOSVRJQUxJWkVdLGNvbHVtbkluZGV4OmR9KX0pfXNob3VsZENvbXB1''@;'; put 'put ''dGVIZWlnaHQoKXtyZXR1cm4hdGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnBhZ2Uuc2l6ZT4wJiZ0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg9PT10aGlzLnBhZ2Uuc2l6ZX1jb21wdXRlRGF0YWdyaWRIZWlnaHQoKXtjb25zdCBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudCkuaGVpZ2h0O3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLGEpLHRoaXMuX2hlaWdodFNldD0hMH1yZXNldERhdGFncmlkSGVpZ2h0KCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhl''@;'; put 'put ''aWdodCIsIiIpLHRoaXMuX2hlaWdodFNldD0hMX1jb21wdXRlSGVhZGVyc1dpZHRoKCl7Y29uc3QgYT10aGlzLmhlYWRlcnMubGVuZ3RoLGQ9dGhpcy5oZWFkZXJzLm1hcChmPT5mLmdldENvbHVtbldpZHRoU3RhdGUoKSk7bGV0IGg9ITA7dGhpcy5oZWFkZXJzLmZvckVhY2goKGYsdik9Pntj''@;'; put 'put ''b25zdCBNPXtjaGFuZ2VzOltXMS5XSURUSF0sLi4uZFt2XX07TS5zdHJpY3RXaWR0aHx8KGg9ITEpLGE9PT12KzEmJmgmJihNLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQodixNKX0pfWNvbHVtblN0YXRlQ2hhbmdlZChhKXtpZighdGhpcy5o''@;'; put 'put ''ZWFkZXJzfHxudWxsPT1hLmNvbHVtbkluZGV4KXJldHVybjtjb25zdCBkPWEuY29sdW1uSW5kZXg7YS5jaGFuZ2VzJiZhLmNoYW5nZXMubGVuZ3RoJiZhLmNoYW5nZXMuZm9yRWFjaChoPT57c3dpdGNoKGgpe2Nhc2UgVzEuV0lEVEg6dGhpcy5oZWFkZXJzLmdldChkKS5zZXRXaWR0aChhKSx0''@;'; put 'put ''aGlzLnJvd3MuZm9yRWFjaChmPT57Zj8uY2VsbHMubGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldFdpZHRoKGEpLGYuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KGQpPy5zZXRXaWR0aChhKSl9KTticmVhaztjYXNlIFcxLkhJ''@;'; put 'put ''RERFTjp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldEhpZGRlbihhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zi5jZWxscyYmZi5jZWxscy5sZW5ndGgmJihmLmNlbGxzLmdldChkKS5zZXRIaWRkZW4oYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldEhpZGRlbihhKSl9KSx0aGlz''@;'; put 'put ''LnVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCksdGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpO2JyZWFrO2Nhc2UgVzEuSU5JVElBTElaRTphLmhpZGVhYmxlJiZhLmhpZGRlbiYmKHRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JF''@;'; put 'put ''YWNoKGY9PntmLnNldENlbGxzU3RhdGUoKSxmLmV4cGFuZGFibGVSb3c/LnNldENlbGxzU3RhdGUoKX0pKX19KX1zdGFiaWxpemVDb2x1bW5zKCl7dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGV8fHRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD4wJiYodGhpcy5vcmdhbml6ZXIucmVzaXplKCks''@;'; put 'put ''dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITApfXVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCl7Y29uc3QgYT10aGlzLmRhdGFncmlkLmNvbHVtbnMuZmlsdGVyKGQ9PiFkLmlzSGlkZGVuKTthLmZvckVhY2goKGQsaCk9PntoPT09YS5sZW5ndGgtMT9kLnNob3dTZXBhcmF0b3I9''@;'; put 'put ''ITE6ZC5zaG93U2VwYXJhdG9yfHwoZC5zaG93U2VwYXJhdG9yPSEwKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShBbSksR2UoSTcpLEdlKGRnKSxHZShNbSksR2UoSmkpLEdlKEVvKSxHZShYZiksR2UocEcpLEdlKGhnKSxHZShXYSksR2Uo''@;'; put 'put ''ck8pLEdlKEVzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxMNyw0KSxhbyhoLFRtLDQpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmhlYWRlcnM9Ziks''@;'; put 'put ''Q2koZj1TaSgpKSYmKGQucm93cz1mKX19LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6dm0sdXNlRmFjdG9yeTpuV2UsZGVwczpbaW9dfV0pXX0pLGN9KSgpLHJXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoQk9lLGpPZSx2eCx6T2UsQTBlLFVPZSxrMGUsWk9lLFdP''@;'; put 'put ''ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJaZSxLTCxBcyxDZGUsUmMsUFksTzIsTFplLFNkZSxqeSxWeCxZWV19KSxjfSkoKSxOZGU9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dfSksY30pKCksd0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVy''@;'; put 'put ''YXRlZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPSJzdHJpbmciPT10eXBlb2YgYSYmIiIhPT1hP2E6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVs''@;'; put 'put ''LSIrTXUoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5fZ2VuZXJhdGVkSWQrIiIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko''@;'; put 'put ''KSxWZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnVuaXF1''@;'; put 'put ''ZUlkPU11KCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhpcy5fZnVsbHlJbml0aWFsaXpl''@;'; put 'put ''ZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhwYW5kZWR9Z2V0IG9uU3RhY2tM''@;'; put 'put ''YWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5hcmlhTGV2ZWw/dGhpcy5hcmlh''@;'; put 'put ''TGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5leHBh''@;'; put 'put ''bmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4cGFuZGFibGU9ITB9dG9nZ2xl''@;'; put 'put ''RXhwYW5kKGEpe0JkZShhKXx8dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3RhY2stY2hpbGRy''@;'; put 'put ''ZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH1wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChhKXtCZGUoYSl8fGEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2UoaXMpKX0sYy5cdTAyNzVjbXA9''@;'; put 'put ''VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsd0csNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsImhlYWRpbmciKSgiYXJpYS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLFRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5k''@;'; put 'put ''YWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24tZm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbTm4uTm9uZSwiY2xyU2JFeHBhbmRlZCIsImV4cGFuZGVkIl0sZXhwYW5kYWJsZTpbTm4uTm9uZSwiY2xyU2JFeHBh''@;'; put 'put ''bmRhYmxlIiwiZXhwYW5kYWJsZSJdLGFyaWFMZXZlbDpbTm4uTm9uZSwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxzZXRDaGFuZ2VkVmFsdWU6W05uLk5vbmUsImNsclNiTm90aWZ5Q2hhbmdlIiwic2V0Q2hhbmdlZFZhbHVlIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJj''@;'; put 'put ''bHJTYkV4cGFuZGVkQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOkRqZSxkZWNsczo5LHZhcnM6OSxjb25zdHM6W1sxLCJzdGFjay1ibG9jay1sYWJlbCIsMywiY2xpY2siLCJrZXl1cC5lbnRlciIsImtleXVwLnNwYWNlIiwia2V5ZG93bi5zcGFjZSIsImZvY3VzIiwiYmx1ciIsImlkIl0s''@;'; put 'put ''WyJzaGFwZSIsImFuZ2xlIiwiY2xhc3MiLCJzdGFjay1ibG9jay1jYXJldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJzdGFjay12aWV3LWtleSJdLFsxLCJzdGFjay1ibG9jay1jb250ZW50Il0sWzEsInN0YWNrLWNoaWxkcmVuIiwzLCJjbHJFeHBh''@;'; put 'put ''bmRUcmlnZ2VyIl0sWyJyb2xlIiwicmVnaW9uIiwzLCJoZWlnaHQiLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUiLDEsInN0YWNrLWJsb2NrLWNhcmV0Il0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwicmVnaW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa2plKSxk''@;'; put 'put ''ZSgwLCJkaXYiLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChm''@;'; put 'put ''KX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChmKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSEwfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMX0pLGd0KDEsSWpl''@;'; put 'put ''LDEsMSwiY2RzLWljb24iLDEpKDIsUmplLDIsMSwic3BhbiIsMiksZGUoMywiZGl2IiwzKSxZcig0KSxoZSgpLGRlKDUsImRpdiIsNCksWXIoNiwxKSxoZSgpKCksZGUoNywiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw1KSxndCg4LExqZSwyLDQsImRpdiIsNiksaGUoKSksMiZhJiYoTWUo''@;'; put 'put ''ImlkIixkLnVuaXF1ZUlkKSxocigicm9sZSIsZC5yb2xlKSgidGFiaW5kZXgiLGQudGFiSW5kZXgpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQuZ2V0U3RhY2tDaGlsZHJlbklkKCkpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kYWJsZSksZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLGZlKDUpLE1lKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxmZSgpLE1lKCJuZ0lmIixkLmV4cGFuZGVkKSl9LGRlcGVuZGVuY2llczpbYmEscnMsVkxdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2Z1bmN0aW9uIEJkZShjKXtjb25z''@;'; put 'put ''dCBsPWM/LnRhcmdldDtyZXR1cm4hIWw/LnRhZ05hbWUmJlsiSU5QVVQiLCJURVhUQVJFQSIsIkJVVFRPTiIsIkEiLCJTRUxFQ1QiLCJPUFRJT04iXS5pbmNsdWRlcyhsLnRhZ05hbWUpfWxldCBDRz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLXZpZXciXV0sbmdDb250ZW50U2VsZWN0b3JzOlBqZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJzdGFjay12aWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoT2pl''@;'; put 'put ''KSxZcigwKSxkZSgxLCJkaXYiLDApLFlyKDIsMSksaGUoKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGFXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoRXkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxTZGVdfSksY30pKCksTzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlzLmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBXbn19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgamRlPXtwcm92aWRlOk83LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gb1dlKGMpe3JldHVybiBjfHxuZXcgTzd9LGRl''@;'; put 'put ''cHM6W1tuZXcgSTEsbmV3IGxkLE83XV19O2xldCB6ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5leHBhbmRTZXJ2aWNlPWQsZCYmKHRoaXMuc3Vic2NyaXB0aW9uPWQuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRo''@;'; put 'put ''aXMucGFyZW50JiYhYS5lYWdlciYmYS5yZWN1cnNpb24mJnRoaXMucGFyZW50LmNsZWFyQ2hpbGRyZW4oKX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNob3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlz''@;'; put 'put ''LmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5tb2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnBhcmVudD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE83KSxHZShVMSw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIixkLnJvbGUpfSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxkZWNsczoxLHZhcnM6MSxjb25z''@;'; put 'put ''dHM6W1s0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJmd0KDAsQmplLDIsMSwibmctY29udGFpbmVyIiwwKSwyJmEmJk1lKCJuZ0lmIixkLnNo''@;'; put 'put ''b3VsZFJlbmRlcigpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyICR1PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TRUxFQ1RFRD0wXT0iVU5TRUxFQ1RFRCIsY1tjLlNFTEVDVEVEPTFdPSJTRUxFQ1RFRCIsY1tjLklOREVURVJNSU5BVEU9''@;'; put 'put ''Ml09IklOREVURVJNSU5BVEUiLGN9KCR1fHx7fSk7Y2xhc3MgVWRle2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nJD1uZXcgZWkoITEpLHRoaXMuc2VsZWN0ZWQ9bmV3IGVpKCR1LlVOU0VMRUNURUQpLHRoaXMuX2xvYWRpbmc9ITF9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGlu''@;'; put 'put ''Z31zZXQgbG9hZGluZyhsKXt0aGlzLl9sb2FkaW5nPWwsdGhpcy5sb2FkaW5nJC5uZXh0KGwpfWdldCBkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuX2Rpc2FibGVkJiYhdGhpcy5wYXJlbnQ/LmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7dGhpcy5fZGlzYWJsZWQ9bH1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxkJiZsIT09JHUuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9PntoLmRpc2FibGVk''@;'; put 'put ''fHxoLnNldFNlbGVjdGVkKGwsITEsITApfSksYSYmdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9dG9nZ2xlU2VsZWN0aW9uKGwpe3RoaXMuZGlzYWJsZWR8fHRoaXMuc2V0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZC52YWx1ZT09PSR1LlNF''@;'; put 'put ''TEVDVEVEPyR1LlVOU0VMRUNURUQ6JHUuU0VMRUNURUQsITAsbCl9X3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpe2NvbnN0IGw9dGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKTtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChs''@;'; put 'put ''KSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX1jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKXtsZXQgbD0hMSxhPSExO2Zvcihjb25zdCBkIG9mIHRoaXMuY2hpbGRyZW4pc3dpdGNoKGQuc2VsZWN0ZWQudmFsdWUpe2Nh''@;'; put 'put ''c2UgJHUuSU5ERVRFUk1JTkFURTppZihkLmRpc2FibGVkKWNvbnRpbnVlO3JldHVybiAkdS5JTkRFVEVSTUlOQVRFO2Nhc2UgJHUuU0VMRUNURUQ6aWYobD0hMCxhKXJldHVybiAkdS5JTkRFVEVSTUlOQVRFO2JyZWFrO2RlZmF1bHQ6aWYoYT0hMCxsKXJldHVybiAkdS5JTkRFVEVSTUlOQVRF''@;'; put 'put ''fXJldHVybiBsP2E/JHUuVU5TRUxFQ1RFRDokdS5TRUxFQ1RFRDokdS5VTlNFTEVDVEVEfX1jbGFzcyBkTyBleHRlbmRzIFVkZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMuZ2V0Q2hpbGRyZW49ZCx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuY2hpbGRyZW5GZXRjaGVk''@;'; put 'put ''PSExLHRoaXMuX2NoaWxkcmVuPVtdLHRoaXMubW9kZWw9bCx0aGlzLnBhcmVudD1hfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmZldGNoQ2hpbGRyZW4oKSx0aGlzLl9jaGlsZHJlbn1zZXQgY2hpbGRyZW4obCl7dGhpcy5fY2hpbGRyZW49bH1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksc3VwZXIuZGVzdHJveSgpfWNsZWFyQ2hpbGRyZW4oKXt0aGlzLl9jaGlsZHJlbi5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSxkZWxldGUgdGhpcy5fY2hpbGRyZW4sdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITF9ZmV0Y2hDaGlsZHJl''@;'; put 'put ''bigpe2lmKHRoaXMuY2hpbGRyZW5GZXRjaGVkKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Q2hpbGRyZW4odGhpcy5tb2RlbCk7IWZ1bmN0aW9uIHNXZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn0obCk/Qk0obCk/KHRoaXMubG9hZGluZz0hMCx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbj1sLnN1YnNjcmliZShhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpOnRoaXMuX2NoaWxkcmVuPWw/dGhpcy53cmFwQ2hpbGRyZW4obCk6W106KHRoaXMubG9hZGluZz0hMCxsLnRoZW4oYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMu''@;'; put 'put ''d3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMCx0aGlzLmZlYXR1cmVzU2VydmljZSYmdGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLm5leHQoKX13cmFwQ2hpbGRyZW4obCl7cmV0dXJuIGwubWFwKGE9Pm5ldyBkTyhh''@;'; put 'put ''LHRoaXMsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpfX1sZXQgWmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNoYW5nZXMoKXtsZXQgYTthPUFycmF5''@;'; put 'put ''LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IGRPKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBkTyh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSldLHRoaXMuY2hp''@;'; put 'put ''bGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmbSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSkpLHRoaXMuZmVhdHVyZXNTZXJ2''@;'; put 'put ''aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wpLEdlKE83KSxHZShFcykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOltObi5Ob25lLCJjbHJSZWN1cnNpdmVG''@;'; put 'put ''b3JPZiIsIm5vZGVzIl0sZ2V0Q2hpbGRyZW46W05uLk5vbmUsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iXX0sZmVhdHVyZXM6W3dsXX0pLGN9KSgpLFNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c1JlcXVlc3Q9bmV3IFduLHRoaXMu''@;'; put 'put ''X2ZvY3VzQ2hhbmdlPW5ldyBXbn1nZXQgZm9jdXNSZXF1ZXN0KCl7cmV0dXJuIHRoaXMuX2ZvY3VzUmVxdWVzdC5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Zm9jdXNOb2RlKGEpe2EmJnRoaXMuX2ZvY3Vz''@;'; put 'put ''UmVxdWVzdC5uZXh0KGEubm9kZUlkKX1icm9hZGNhc3RGb2N1c2VkTm9kZShhKXt0aGlzLmZvY3VzZWROb2RlSWQhPT1hJiYodGhpcy5mb2N1c2VkTm9kZUlkPWEsdGhpcy5fZm9jdXNDaGFuZ2UubmV4dChhKSl9Zm9jdXNQYXJlbnQoYSl7YSYmdGhpcy5mb2N1c05vZGUoYS5wYXJlbnQpfWZv''@;'; put 'put ''Y3VzRmlyc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHNbMF0pfWZvY3VzTGFzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTGFzdFZpc2libGVJblRyZWUoKSl9Zm9jdXNOb2RlQWJvdmUo''@;'; put 'put ''YSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUFib3ZlKGEpKX1mb2N1c05vZGVCZWxvdyhhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQmVsb3coYSkpfWZvY3VzTm9kZVN0YXJ0c1dpdGgoYSxkKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dp''@;'; put 'put ''dGgoYSxkKSl9ZmluZFNpYmxpbmdzKGEpe3JldHVybiBhLnBhcmVudD9hLnBhcmVudC5jaGlsZHJlbjp0aGlzLnJvb3ROb2RlTW9kZWxzfWZpbmRMYXN0VmlzaWJsZUluTm9kZShhKXtpZighYSlyZXR1cm4gbnVsbDtpZihhLmV4cGFuZGVkJiZhLmNoaWxkcmVuLmxlbmd0aD4wKXtjb25zdCBk''@;'; put 'put ''PWEuY2hpbGRyZW47cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbZC5sZW5ndGgtMV0pfXJldHVybiBhfWZpbmROZXh0Rm9jdXNhYmxlKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7cmV0dXJuIGg8ZC5s''@;'; put 'put ''ZW5ndGgtMT9kW2grMV06aD09PWQubGVuZ3RoLTE/dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhLnBhcmVudCk6bnVsbH1maW5kTGFzdFZpc2libGVJblRyZWUoKXtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVs''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMucm9vdE5vZGVNb2RlbHNbdGhpcy5yb290Tm9kZU1vZGVscy5sZW5ndGgtMV0pfWZpbmROb2RlQWJvdmUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gMD09PWg/YS5wYXJlbnQ6aD4w''@;'; put 'put ''P3RoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbaC0xXSk6bnVsbH1maW5kTm9kZUJlbG93KGEpe3JldHVybiBhP2EuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXTp0aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEpOm51bGx9ZmluZERlc2NlbmRlbnROb2RlU3Rh''@;'; put 'put ''cnRzV2l0aChhLGQpe2lmKGQuZXhwYW5kZWQmJmQuY2hpbGRyZW4ubGVuZ3RoPjApZm9yKGNvbnN0IGggb2YgZC5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChh''@;'; put 'put ''LGQpe2NvbnN0IGg9dGhpcy5maW5kU2libGluZ3MoZCk7Zm9yKGxldCB2PWguaW5kZXhPZihkKSsxO3Y8aC5sZW5ndGg7disrKXtjb25zdCBEPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaFt2XSk7aWYoRClyZXR1cm4gRH1yZXR1cm4gbnVsbH1maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEs''@;'; put 'put ''ZCl7Zm9yKGNvbnN0IGggb2YgdGhpcy5yb290Tm9kZU1vZGVscyl7aWYoZC5wYXJlbnQmJmQucGFyZW50PT09aCljb250aW51ZTtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kTm9kZVN0YXJ0c1dpdGgoYSxkKXtyZXR1''@;'; put 'put ''cm4gZD9kLnRleHRDb250ZW50LnN0YXJ0c1dpdGgoYSk/ZDp0aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTpudWxsfWZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPXRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRz''@;'; put 'put ''V2l0aChhLGQpO2lmKGgpcmV0dXJuIGg7Y29uc3QgZj10aGlzLmZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKTtyZXR1cm4gZnx8KHRoaXMuZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpfHx0aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGQucGFyZW50KSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIGxXZSBleHRlbmRzIFVkZXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMucGFyZW50PWwsbCYmbC5fYWRkQ2hpbGQodGhp''@;'; put 'put ''cyksdGhpcy5jaGlsZHJlbj1bXX1kZXN0cm95KCl7dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll9yZW1vdmVDaGlsZCh0aGlzKSxzdXBlci5kZXN0cm95KCl9X2FkZENoaWxkKGwpe3RoaXMuY2hpbGRyZW4ucHVzaChsKX1fcmVtb3ZlQ2hpbGQobCl7Y29uc3QgYT10aGlzLmNoaWxkcmVuLmlu''@;'; put 'put ''ZGV4T2YobCk7YT4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoYSwxKX19bGV0IGZnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbD1hfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIil9YWN0aXZh''@;'; put 'put ''dGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljayYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsOCwiY2xyLXRyZWVub2RlLWxpbmsiXV19KSxjfSkoKSxQZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmV4cGFuZFNlcnZpY2U9Zix0aGlzLmNv''@;'; put 'put ''bW1vblN0cmluZ3M9dix0aGlzLmZvY3VzTWFuYWdlcj1NLHRoaXMuZWxlbWVudFJlZj1ELHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcix0aGlzLlNUQVRFUz0kdSx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRoaXMubm9kZUlkPU11KCks''@;'; put 'put ''dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9aC5yZWN1cnNpb24/Wi52aWV3''@;'; put 'put ''P1oudmlldy5jb250ZXh0LmNsck1vZGVsOlouX2xWaWV3WzhdLmNsck1vZGVsOm5ldyBsV2UoZD9kLl9tb2RlbDpudWxsKSx0aGlzLl9tb2RlbC5ub2RlSWQ9dGhpcy5ub2RlSWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlz''@;'; put 'put ''Ll9tb2RlbC5kaXNhYmxlZD1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPSR1LlVOU0VMRUNURUQpLCJi''@;'; put 'put ''b29sZWFuIj09dHlwZW9mIGEmJihhPWE/JHUuU0VMRUNURUQ6JHUuVU5TRUxFQ1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBF''@;'; put 'put ''bWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfXNldCBjbHJGb3JUeXBlQWhlYWQoYSl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9V2RlKGF8fHRo''@;'; put 'put ''aXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT0kdS5TRUxFQ1RFRDohIXRoaXMudHJlZU5vZGVMaW5rPy5hY3RpdmV8fG51bGx9Z2V0''@;'; put 'put ''IHRyZWVOb2RlTGluaygpe3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJzdH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25Jbml0KCl7dGhpcy5f''@;'; put 'put ''bW9kZWwuZXhwYW5kZWQ9dGhpcy5leHBhbmRlZCx0aGlzLl9tb2RlbC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoJGwoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNl''@;'; put 'put ''bGVjdGVkQ2hhbmdlLmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGZtKDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGZt''@;'; put 'put ''KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudHx8KHRoaXMuX21vZGVsLnRleHRD''@;'; put 'put ''b250ZW50PVdkZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkpfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kZWwuZGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aXNFeHBhbmRhYmxlKCl7cmV0dXJuIHR5cGVv''@;'; put 'put ''ZiB0aGlzLmV4cGFuZGFibGU8InUiP3RoaXMuZXhwYW5kYWJsZTohIXRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRhYmxlfHx0aGlzLmlzUGFyZW50fWlzU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfWZvY3VzVHJlZU5vZGUoKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50O3RsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1hJiYodGhpcy5zZXRUYWJJbmRleCgwKSxhLmZvY3VzKCksYS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9''@;'; put 'put ''KSl9YnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpe3RoaXMuZm9jdXNNYW5hZ2VyLmJyb2FkY2FzdEZvY3VzZWROb2RlKHRoaXMubm9kZUlkKX1vbktleURvd24oYSl7c3dpdGNoKFJZKGEpLEkyKGEua2V5KSl7Y2FzZSBnYS5BcnJvd1VwOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUFi''@;'; put 'put ''b3ZlKHRoaXMuX21vZGVsKTticmVhaztjYXNlIGdhLkFycm93RG93bjp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBnYS5BcnJvd1JpZ2h0OnRoaXMuZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKTticmVhaztjYXNlIGdhLkFycm93TGVm''@;'; put 'put ''dDp0aGlzLmNvbGxhcHNlT3JGb2N1c1BhcmVudCgpO2JyZWFrO2Nhc2UgZ2EuSG9tZTphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNGaXJzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBnYS5FbmQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNNYW5hZ2Vy''@;'; put 'put ''LmZvY3VzTGFzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBnYS5FbnRlcjp0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztjYXNlIGdhLlNwYWNlOmNhc2UgZ2EuU3BhY2ViYXI6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVm''@;'; put 'put ''YXVsdCgpO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5fbW9kZWwudGV4dENvbnRlbnQmJmZ1bmN0aW9uIHF6ZShjKXtjb25zdCBsPWMua2V5O3JldHVybiBsLnRvTG93ZXJDYXNlKCkhPT1sLnRvVXBwZXJDYXNlKCl8fGw+PSIwIiYmbDw9IjkifShhKSlyZXR1cm4gdGhpcy50eXBlQWhlYWRLZXlC''@;'; put 'put ''dWZmZXIrPWEua2V5LHZvaWQgdGhpcy50eXBlQWhlYWRLZXlFdmVudC5uZXh0KHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKX10aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn1zZXRUYWJJbmRleChhKXt0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD1hLHRoaXMuY29udGVudENvbnRhaW5l''@;'; put 'put ''ci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGEudG9TdHJpbmcoKSl9Y2hlY2tUYWJJbmRleChhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEp''@;'; put 'put ''fXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5pc0V4cGFuZGFibGUoKSYmIXRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkOnRoaXMudHJpZ2dlckRlZmF1bHRBY3Rpb24oKSl9ZXhw''@;'; put 'put ''YW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0h''@;'; put 'put ''MCkpfWNvbGxhcHNlT3JGb2N1c1BhcmVudCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCkpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVl''@;'; put 'put ''Tm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShH''@;'; put 'put ''ZShpbyksR2UoYywxMiksR2UoTzcpLEdlKFUxKSxHZShpcyksR2UoU0cpLEdlKEppKSxHZShEcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZmcsNCksMiZh''@;'; put 'put ''KXtsZXQgZjtDaShmPVNpKCkpJiYoZC50cmVlTm9kZUxpbmtMaXN0PWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShqamUsNyxKaSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5jb250ZW50Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixkLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbTm4uTm9uZSwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGlzYWJsZWQi''@;'; put 'put ''LCJkaXNhYmxlZCJdLHNlbGVjdGVkOltObi5Ob25lLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W05uLk5vbmUsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlOiJjbHJT''@;'; put 'put ''ZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtqZGUsVTEse3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6VTF9XSldLG5nQ29udGVudFNlbGVjdG9yczpVamUsZGVjbHM6MTIsdmFyczoxMixjb25zdHM6W1siY29udGVudENvbnRh''@;'; put 'put ''aW5lciIsIiJdLFsidHJlZW5vZGVDb250ZW50IiwiIl0sWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlkb3duIiwiZm9jdXMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0''@;'; put 'put ''YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImRpc2FibGVkIiwiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIiw0LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24i''@;'; put 'put ''LCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0LWljb24iXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIl0sWzEsImNsci10cmVl''@;'; put 'put ''bm9kZS1zcGlubmVyIiwic3Bpbm5lciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsImNsci10cmVlbm9kZS1jaGVja2JveCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLWNoZWNrYm94IiwzLCJjaGFuZ2UiLCJmb2N1''@;'; put 'put ''cyIsImlkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiXSxbImNsYXNzIiwiY2xyLXNyLW9ubHkiLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwiY2xyLXNyLW9ubHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtzYSh6amUpLGRlKDAsImRpdiIsMiwwKSxGdCgia2V5ZG93biIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQub25LZXlEb3duKHYpKX0pKCJmb2N1cyIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCkpfSksZ3QoMixaamUsMiwyLCJidXR0b24iLDMpKDMsV2plLDIsMCwiZGl2Iiw0KSg0LFlqZSw0LDYsImRpdiIsNSkoNSxHamUsMiwxLCJkaXYiLDYpKDYsS2plLDIsMSwibmctdGVtcGxhdGUiLG51''@;'; put 'put ''bGwsMSxJYyksaGUoKSxkZSg4LCJkaXYiLDcpLFlyKDkpLFlyKDEwLDEpLEd0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSxoZSgpfTImYSYmKFRyKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmRpc2FibGVkKSxocigiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImFy''@;'; put 'put ''aWEtZXhwYW5kZWQiLGQuaXNFeHBhbmRhYmxlKCk/ZC5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZC5hcmlhU2VsZWN0ZWQpLGZlKDIpLE1lKCJuZ0lmIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5pc01vZGVsTG9hZGluZyYmIWQuZXhwYW5kU2VydmljZS5sb2FkaW5nKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksZmUoKSxNZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoKSxNZSgibmdJZiIsIWQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKDMpLE1lKCJAdG9nZ2xlQ2hpbGRy''@;'; put 'put ''ZW5BbmltIixkLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksaHIoInJvbGUiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxmZSgzKSxNZSgicGFyZW50IixkLl9tb2RlbCkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W2JhLE4xLHJzLHpkZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeWgoInRvZ2dsZUNoaWxkcmVuQW5pbSIsW2l1KCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFt1cyh7aGVpZ2h0OjB9KSxNMCgyMDAsdXMoe2hlaWdodDoiKiJ9KSldKSxpdSgiZXhwYW5kZWQgPT4g''@;'; put 'put ''Y29sbGFwc2VkIixbdXMoe2hlaWdodDoiKiJ9KSxNMCgyMDAsdXMoe2hlaWdodDowfSkpXSksU0woImV4cGFuZGVkIix1cyh7aGVpZ2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLFNMKCJjb2xsYXBzZWQiLHVzKHtoZWlnaHQ6MH0pKV0pXX19KSxjfSkoKTtmdW5jdGlvbiBXZGUo''@;'; put 'put ''Yyl7cmV0dXJuIGMudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IEVoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmVsPWYsdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExO2NvbnN0IE09di5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQoZi5uYXRpdmVFbGVtZW50LCJmb2N1c2luIikuc3Vic2NyaWJlKEQ9PntELnRhcmdldD09PWYubmF0aXZlRWxlbWVudCYmKGQuZm9jdXNGaXJzdFZpc2li''@;'; put 'put ''bGVOb2RlKCksaC5yZW1vdmVBdHRyaWJ1dGUoZi5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChNKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''aXNNdWx0aVNlbGVjdGFibGV9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0TXVsdGlTZWxlY3RhYmxlKCksdGhpcy5zZXRSb290Tm9kZXMo''@;'; put 'put ''KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0TXVsdGlTZWxlY3RhYmxlKCl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjA/KHRoaXMuX2lzTXVsdGlTZWxlY3Rh''@;'; put 'put ''YmxlPSEwLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIikpOih0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIikpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4hYS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShHZShPNyksR2UoU0cpLEdlKEVvKSxHZShKaSksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxQZCw0KSwyJmEpe2xldCBm''@;'; put 'put ''O0NpKGY9U2koKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsInRyZWUiKX0saW5wdXRzOntsYXp5OltObi5Ob25lLCJjbHJMYXp5IiwibGF6eSJdfSxmZWF0''@;'; put 'put ''dXJlczpbZGEoW2pkZSxTR10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMywiY2hpbGRyZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApLGd0KDEscWplLDEsMSwiY2xyLXJl''@;'; put 'put ''Y3Vyc2l2ZS1jaGlsZHJlbiIsMCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W2JhLHpkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZFdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhF''@;'; put 'put ''eSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLFBZXX0pLGN9KSgpLGhXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltyV2UsYVdlLGRXZV19KSxjfSkoKTtjb25zdCBmV2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiLCJuZXV0cmFsIiwidW5rbm93biIsImxv''@;'; put 'put ''YWRpbmciXTtsZXQgTUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hhcGU9ImluZm8tc3RhbmRhcmQiLHRoaXMuX2FsZXJ0SWNvblNoYXBlPSIiLHRoaXMuX2FsZXJ0VHlwZT0iaW5mbyJ9Z2V0IGFsZXJ0VHlwZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXtmV2UuaW5kZXhPZihhKT4tMSYmKHRoaXMuX2FsZXJ0VHlwZT1hKX1nZXQgYWxlcnRJY29uU2hhcGUoKXtyZXR1cm4iIj09PXRoaXMuX2FsZXJ0SWNvblNoYXBlP3RoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVy''@;'; put 'put ''dFR5cGUpLnNoYXBlOnRoaXMuX2FsZXJ0SWNvblNoYXBlfXNldCBhbGVydEljb25TaGFwZShhKXthP2EhPT10aGlzLl9hbGVydEljb25TaGFwZSYmKHRoaXMuX2FsZXJ0SWNvblNoYXBlPWEpOnRoaXMuX2FsZXJ0SWNvblNoYXBlPSIifWdldCBhbGVydEljb25UaXRsZSgpe3JldHVybiB0aGlz''@;'; put 'put ''Lmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS50aXRsZX1pY29uSW5mb0Zyb21UeXBlKGEpe2NvbnN0IGQ9e3NoYXBlOiIiLGNzc0NsYXNzOiIiLHRpdGxlOiIifTtzd2l0Y2goYSl7Y2FzZSJ3YXJuaW5nIjpkLnNoYXBlPSJ3YXJuaW5nLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJh''@;'; put 'put ''bGVydC13YXJuaW5nIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLndhcm5pbmc7YnJlYWs7Y2FzZSJkYW5nZXIiOmQuc2hhcGU9ImVycm9yLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2Jy''@;'; put 'put ''ZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0ic3VjY2Vzcy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtc3VjY2VzcyIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzO2JyZWFrO2Nhc2UibmV1dHJhbCI6ZC5zaGFwZT0ibm90ZSIsZC5jc3NDbGFzcz0iYWxlcnQt''@;'; put 'put ''bmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5uZXV0cmFsO2JyZWFrO2Nhc2UidW5rbm93biI6ZC5zaGFwZT0iaGVscCIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2Nhc2UibG9h''@;'; put 'put ''ZGluZyI6ZC5zaGFwZT0ibG9hZGluZyIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2RlZmF1bHQ6ZC5zaGFwZT10aGlzLmRlZmF1bHRJY29uU2hhcGUsZC5jc3NDbGFzcz0iYWxlcnQtaW5mbyIsZC50aXRs''@;'; put 'put ''ZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvfXJldHVybiBkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihpcykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGhPPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlzLl9jdXJyZW50JiYodGhpcy5fY3Vy''@;'; put 'put ''cmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpKX1nZXQgYWN0aXZlQWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzJiZ0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+IWEuX2Nsb3NlZCl9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVB''@;'; put 'put ''bGVydHNbdGhpcy5jdXJyZW50XX1zZXQgY3VycmVudEFsZXJ0KGEpe3RoaXMuY3VycmVudD10aGlzLmFjdGl2ZUFsZXJ0cy5pbmRleE9mKGEpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHMubGVuZ3RofHwwfW1hbmFnZShhKXt0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmFsbEFsZXJ0cz1hLHRoaXMuY3VycmVudD0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX2N1cnJlbnQ/dGhpcy5fY3VycmVudDowLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCksdGhpcy5zdWJzY3Jp''@;'; put 'put ''cHRpb249dGhpcy5hbGxBbGVydHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmN1cnJlbnQ+PXRoaXMuYWxsQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudD1NYXRoLm1heCgwLHRoaXMuYWxsQWxlcnRzLmxlbmd0aC0xKSl9KX1uZXh0KCl7dGhpcy5fY3VycmVudD10aGlzLmN1cnJl''@;'; put 'put ''bnQ9PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMT8wOnRoaXMuY3VycmVudCsxLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfXByZXZpb3VzKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9MD09PXRoaXMuY3VycmVudD90aGlzLmFjdGl2''@;'; put 'put ''ZUFsZXJ0cy5sZW5ndGgtMTp0aGlzLmN1cnJlbnQtMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9b3BlbigpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnRBbGVydHx8KHRoaXMuX2N1cnJlbnQ9MCksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5f''@;'; put 'put ''Y3VycmVudCkpfWNsb3NlKGEpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJihhJiYodGhpcy5fY3VycmVudD1NYXRoLm1heCgwLHRoaXMuY3VycmVudC0xKSksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYsTSl7dGhpcy5pY29uU2VydmljZT1hLHRoaXMuY2RyPWQsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmhvc3RFbGVtZW50PU0sdGhpcy5pc1NtYWxsPSExLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5pc0FwcExldmVs''@;'; put 'put ''PSExLHRoaXMuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbCx0aGlzLl9jbG9zZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5fY2xvc2VkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9pc0xpZ2h0''@;'; put 'put ''d2VpZ2h0PSExfWdldCBpc0xpZ2h0d2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzTGlnaHR3ZWlnaHR9c2V0IGlzTGlnaHR3ZWlnaHQoYSl7dGhpcy5faXNMaWdodHdlaWdodD1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKHRoaXMuX29yaWdBbGVydFR5cGUpfWdldCBhbGVydFR5cGUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLl9vcmlnQWxlcnRUeXBlPWEsdGhpcy5jb25maWdBbGVydFR5cGUoYSl9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGU9YX1zZXQgY2xvc2VkKGEpe2EmJiF0''@;'; put 'put ''aGlzLl9jbG9zZWQ/dGhpcy5jbG9zZSgpOiFhJiZ0aGlzLl9jbG9zZWQmJnRoaXMub3BlbigpfWdldCBhbGVydENsYXNzKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZSkuY3NzQ2xhc3N9Z2V0IGhpZGRlbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9oaWRkZW59c2V0IGhpZGRlbihhKXthIT09dGhpcy5faGlkZGVuJiYodGhpcy5faGlkZGVuPWEsdGhpcy5faGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKTp0aGlzLnJlbmRlcmVyLnJl''@;'; put 'put ''bW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIiksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2Uu''@;'; put 'put ''Y2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhpZGRlbj10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCE9PXRoaXN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbmZpZ0FsZXJ0VHlwZShhKXt0aGlz''@;'; put 'put ''Lmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfW9wZW4oKXt0aGlzLl9jbG9zZWQ9ITEsdGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5vcGVuKCksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCExKX1jbG9zZSgpe2lmKCF0aGlzLmNsb3NhYmxlKXJldHVybjtj''@;'; put 'put ''b25zdCBhPXRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmN1cnJlbnRBbGVydD09PXRoaXM7dGhpcy5fY2xvc2VkPSEwLHRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmFjdGl2ZUFsZXJ0cyYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jbG9zZShhKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITAp''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNRyksR2UoRXMpLEdlKGhPLDgpLEdlKGlzKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbTm4u''@;'; put 'put ''Tm9uZSwiY2xyQWxlcnRTaXplU21hbGwiLCJpc1NtYWxsIl0sY2xvc2FibGU6W05uLk5vbmUsImNsckFsZXJ0Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGlzQXBwTGV2ZWw6W05uLk5vbmUsImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNs''@;'; put 'put ''ckNsb3NlQnV0dG9uQXJpYUxhYmVsIixpc0xpZ2h0d2VpZ2h0OltObi5Ob25lLCJjbHJBbGVydExpZ2h0d2VpZ2h0IiwiaXNMaWdodHdlaWdodCJdLGFsZXJ0VHlwZTpbTm4uTm9uZSwiY2xyQWxlcnRUeXBlIiwiYWxlcnRUeXBlIl0sYWxlcnRJY29uU2hhcGU6W05uLk5vbmUsImNsckFsZXJ0''@;'; put 'put ''SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOltObi5Ob25lLCJjbHJBbGVydENsb3NlZCIsImNsb3NlZCJdfSxvdXRwdXRzOntfY2xvc2VkQ2hhbmdlZDoiY2xyQWxlcnRDbG9zZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW01HXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczox''@;'; put 'put ''LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJhbGVydCIsMywibmdDbGFzcyIsImFsZXJ0LXNtIiwiYWxlcnQtbGlnaHR3ZWlnaHQiLCJhbGVydC1hcHAtbGV2ZWwiLDQsIm5nSWYiXSxbMSwiYWxlcnQiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnQtaXRlbXMiXSxbInR5cGUiLCJidXR0b24iLCJj''@;'; put 'put ''bGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxKamUsNCw4LCJkaXYiLDApKSwyJmEmJk1lKCJu''@;'; put 'put ''Z0lmIiwhZC5fY2xvc2VkKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pY29uU2VydmljZT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShHZShNRykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQtaXRlbSJdXSxob3N0QXR0cnM6WzEsImFsZXJ0LWl0ZW0iXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJj''@;'; put 'put ''bGFzcyIsImFsZXJ0LXNwaW5uZXIiLCJjbHJJbmxpbmUiLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQtaWNvbiIsInJvbGUiLCJpbWciLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsMSwiYWxlcnQtc3Bpbm5lciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwiZGl2IiwwKSxndCgxLFFqZSwxLDAsImNsci1zcGlubmVyIiwxKSgyLGV6ZSwxLDIsImNkcy1pY29uIiwyKSxoZSgpLFlyKDMpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwibG9hZGluZyI9PT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNo''@;'; put 'put ''YXBlKSxmZSgpLE1lKCJuZ0lmIiwibG9hZGluZyIhPT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSl9LGRlcGVuZGVuY2llczpbYmEscnMsUmRdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFF4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImFsZXJ0LXRleHQiXV19KSxjfSkoKSxHZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1''@;'; put 'put ''cnJlbnRBbGVydENoYW5nZT1uZXcgS3IoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEtyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0''@;'; put 'put ''U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlh''@;'; put 'put ''TGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5j''@;'; put 'put ''b3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhp''@;'; put 'put ''cy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3Rp''@;'; put 'put ''dmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoTyksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImFsZXJ0''@;'; put 'put ''cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il0sY3VycmVudEFsZXJ0SW5kZXg6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydEluZGV4IiwiY3VycmVudEFsZXJ0SW5kZXgiXX0sb3V0cHV0czp7Y3VycmVu''@;'; put 'put ''dEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGRlY2xzOjksdmFyczo2LGNvbnN0czpbWzEsImFsZXJ0cy1wYWdlci1jb250cm9sIl0sWzEsImFsZXJ0cy1wYWdlLWRvd24iXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImFsZXJ0cy1wYWdlci1idXR0b24iLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsxLCJhbGVydHMtcGFnZXItdGV4dCJdLFsxLCJhbGVydHMtcGFnZS11cCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJp''@;'; put 'put ''Z2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VEb3duKCl9KSxHdCgzLCJjZHMtaWNvbiIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksTGUoNSks''@;'; put 'put ''aGUoKSxkZSg2LCJkaXYiLDUpKDcsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VVcCgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCkoKSgpKSwyJmEmJihmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5wcmV2aW91c0FsZXJ0QXJpYUxhYmVsKSxmZSgpLGhy''@;'; put 'put ''KCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXMpLGZlKDIpLFV1KCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCksZmUo''@;'; put 'put ''KSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHQpKX0sZGVwZW5kZW5jaWVzOltyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdl''@;'; put 'put ''PW5ldyBLcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1zZXQgYWxsQWxlcnRzKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubWFuYWdlKGEpfXNldCBfaW5wdXRDdXJyZW50SW5kZXgoYSl7TnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihhKSYmYT49MCYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9''@;'; put 'put ''YX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0PWEpfWdldCBhbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMuZmls''@;'; put 'put ''dGVyKGE9PiExPT09YS5oaWRkZW4pfWdldCBjdXJyZW50QWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0P3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0LmFsZXJ0VHlwZToiIn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLm5leHQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UubmV4dCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCl9''@;'; put 'put ''KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMubXVsdGlBbGVydFNlcnZpY2UuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoTykpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsSngsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5hbGxBbGVydHM9Zil9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsyJmEmJlRyKCJhbGVydHMiLCEwKSgiYWxlcnQtZGFuZ2VyIiwiZGFuZ2VyIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtaW5mbyIsImluZm8iPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1zdWNjZXNzIiwic3VjY2VzcyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0''@;'; put 'put ''LXdhcm5pbmciLCJ3YXJuaW5nIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtbmV1dHJhbCIsIm5ldXRyYWwiPT1kLmN1cnJlbnRBbGVydFR5cGUpfSxpbnB1dHM6e19pbnB1dEN1cnJlbnRJbmRleDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5k''@;'; put 'put ''ZXgiXSxjdXJyZW50QWxlcnQ6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdl''@;'; put 'put ''In0sZmVhdHVyZXM6W2RhKFtoT10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6bnplLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzEsImFsZXJ0cy13cmFwcGVyIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Iiw0LCJuZ0lmIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Il1dLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiYoc2EodHplKSxkZSgwLCJkaXYiLDApLGd0KDEscnplLDEsMSwiY2xyLWFsZXJ0cy1wYWdlciIsMSksWXIoMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKSl9LGRlcGVuZGVuY2llczpbYmEsR2RlXSxzdHls''@;'; put 'put ''ZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxLZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHNZLFlPZSxHT2UsJE9lLGxZLEtPZSx2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE5ZLGp5XX0pLGN9KSgpLHBXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltLZGVdfSksY30pKCkscWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YX1zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJuby1zY3JvbGxpbmciKX1yZXN1bWVTY3Jv''@;'; put 'put ''bGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygibm8tc2Nyb2xsaW5nIikmJnRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibm8tc2Nyb2xsaW5nIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZhZGVNb3ZlPSJmYWRlRG93biIsdGhpcy5iYWNrZHJvcD0hMH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21t''@;'; put 'put ''b25TdHJpbmdzPWQsdGhpcy5tb2RhbFN0YWNrU2VydmljZT1oLHRoaXMuY29uZmlndXJhdGlvbj1mLHRoaXMubW9kYWxJZD1NdSgpLHRoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuY2xvc2VCdXR0b25BcmlhTGFiZWw9dGhp''@;'; put 'put ''cy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UsdGhpcy5zaXplPSJtZCIsdGhpcy5zdGF0aWNCYWNrZHJvcD0hMCx0aGlzLnNraXBBbmltYXRpb249ITEsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgS3IoITEpLHRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMX1nZXQgZmFk''@;'; put 'put ''ZU1vdmUoKXtyZXR1cm4gdGhpcy5za2lwQW5pbWF0aW9uPyIiOnRoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZX1zZXQgZmFkZU1vdmUoYSl7dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlPWF9Z2V0IGJhY2tkcm9wKCl7cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5iYWNrZHJvcH1uZ09u''@;'; put 'put ''Q2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlPyh0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnN0b3BTY3JvbGxpbmcoKSx0aGlzLm1vZGFsU3Rh''@;'; put 'put ''Y2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKTp0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCl9b3Blbigpe3RoaXMuX29wZW58fCh0aGlzLl9vcGVuPSEwLHRo''@;'; put 'put ''aXMuX29wZW5DaGFuZ2VkLmVtaXQoITApLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpfWJhY2tkcm9wQ2xpY2soKXt0aGlzLnN0YXRpY0JhY2tkcm9wP3RoaXMudGl0bGUubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMuY2xvc2UoKX1jbG9zZSgpe3RoaXMu''@;'; put 'put ''c3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiYodGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFj''@;'; put 'put ''a01vZGFsQ2xvc2UodGhpcykpfXNjcm9sbFRvcCgpe3RoaXMuYm9keUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUbygwLDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShxZGUpLEdlKGlzKSxHZShBZGUpLEdlKFhkZSkpfSxjLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9kYWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxpemUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5tb2RhbENvbnRlbnRUZW1wbGF0ZT1mLmZpcnN0KX19LHZpZXdRdWVyeTpm''@;'; put 'put ''dW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKEMxZSw1KSxxYShTMWUsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGl0bGU9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuYm9keUVsZW1lbnRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm''@;'; put 'put ''YSYmVHIoIm9wZW4iLGQuX29wZW4pfSxpbnB1dHM6e19vcGVuOltObi5Ob25lLCJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOltObi5Ob25lLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xvc2FibGUiXSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpbTm4uTm9uZSwiY2xyTW9kYWxDbG9zZUJ1''@;'; put 'put ''dHRvbkFyaWFMYWJlbCIsImNsb3NlQnV0dG9uQXJpYUxhYmVsIl0sc2l6ZTpbTm4uTm9uZSwiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOltObi5Ob25lLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwic3RhdGljQmFja2Ryb3AiXSxza2lwQW5pbWF0aW9uOltObi5Ob25l''@;'; put 'put ''LCJjbHJNb2RhbFNraXBBbmltYXRpb24iLCJza2lwQW5pbWF0aW9uIl0sc3RvcENsb3NlOltObi5Ob25lLCJjbHJNb2RhbFByZXZlbnRDbG9zZSIsInN0b3BDbG9zZSJdLGxhYmVsbGVkQnk6W05uLk5vbmUsImNsck1vZGFsTGFiZWxsZWRCeUlkIiwibGFiZWxsZWRCeSJdLGJ5cGFzc1Njcm9s''@;'; put 'put ''bFNlcnZpY2U6W05uLk5vbmUsImNsck1vZGFsT3ZlcnJpZGVTY3JvbGxTZXJ2aWNlIiwiYnlwYXNzU2Nyb2xsU2VydmljZSJdfSxvdXRwdXRzOntfb3BlbkNoYW5nZWQ6ImNsck1vZGFsT3BlbkNoYW5nZSIsYWx0Q2xvc2U6ImNsck1vZGFsQWx0ZXJuYXRlQ2xvc2UifSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W10sW3FkZV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6b3plLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0aXRsZSIsIiJdLFsiYm9keSIsIiJdLFsiY2xhc3MiLCJtb2RhbCIsMywibW9kYWwtZnVsbC1zY3JlZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlh''@;'; put 'put ''LWhpZGRlbiIsInRydWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsMywiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXSxbMSwiY2xyLXNyLW9ubHki''@;'; put 'put ''XSxbImNsYXNzIiwibW9kYWwtY29udGVudC13cmFwcGVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjZGtGb2N1c0luaXRpYWwiLCIiLCJ0YWJpbmRl''@;'; put 'put ''eCIsIi0xIiwxLCJtb2RhbC10aXRsZS13cmFwcGVyIiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHktd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIs''@;'; put 'put ''IndpbmRvdy1jbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShhemUpLGd0KDAsY3plLDcsMTYsImRpdiIsMikoMSx1emUsMSwxLCJkaXYiLDMpKSwyJmEmJihNZSgibmdJZiIs''@;'; put 'put ''ZC5fb3BlbiksZmUoKSxNZSgibmdJZiIsZC5iYWNrZHJvcCkpfSxkZXBlbmRlbmNpZXM6W2JhLFp5LHJzXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgiZmFkZU1vdmUiLFtpdSgiKiA9PiBmYWRlRG93biIsW3VzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUo''@;'; put 'put ''MCwgLTI1JSkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGl1KCJmYWRlRG93biA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSksaXUoIiogPT4gZmFkZUxlZnQiLFt1cyh7b3BhY2l0eTowLHRy''@;'; put 'put ''YW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGl1KCJmYWRlTGVmdCA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSldKV0pLHloKCJmYWRlIixbaXUoInZv''@;'; put 'put ''aWQgPT4gKiIsW3VzKHtvcGFjaXR5OjB9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6Ljg1fSkpXSksaXUoIiogPT4gdm9pZCIsW00wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0eTowfSkpXSldKV19fSksY30pKCksS3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuaG9zdD1kLHRoaXMudGFiaW5kZXg9IjAiLHRoaXMudW5saXN0ZW5lcnM9W10saC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMub2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT50aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKSks''@;'; put 'put ''dGhpcy5vYnNlcnZlci5vYnNlcnZlKGQubmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2V1cCIsKCk9Pnt0aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKX0pLGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2Vkb3du''@;'; put 'put ''IiwoKT0+e3RoaXMucmVtb3ZlVGFiSW5kZXgoKX0pKX0pfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLnVubGlzdGVuZXJzLmxlbmd0aDspdGhpcy51bmxpc3RlbmVycy5wb3AoKSgpO3RoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMub2JzZXJ2ZXI9bnVsbH1hZGRUYWJJbmRleCgpe3Ro''@;'; put 'put ''aXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsdGhpcy50YWJpbmRleCl9cmVtb3ZlVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKX1hZGRPclJl''@;'; put 'put ''bW92ZVRhYkluZGV4KCl7Y29uc3QgYT10aGlzLmhvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2EmJmEuY2xpZW50SGVpZ2h0PGEuc2Nyb2xsSGVpZ2h0P3RoaXMuYWRkVGFiSW5kZXgoKTp0aGlzLnJlbW92ZVRhYkluZGV4KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVvKSxHZShKaSksR2UoV2EpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJtb2RhbC1ib2R5Il1dfSksY30pKCksZk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZ4KX19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsS0wsQXMsQXNdfSksY30pKCksZ1dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEtMLEFzLGZPLGZPLEFzXX0pLGN9KSgpLG1XZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVt''@;'; put 'put ''b2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxiV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHFPZSxYT2Usc1ksbFkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxqeSxBcyxqeV19KSxjfSkoKSxTV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHNZLGxZKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsZk8sS2RlXX0pLGN9KSgpLHowPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3BXZSxoV2UsQXMsZk8sUFksTzIsQkwsbFVlLENkZSxpWmUsVFVlLFNXZSxnV2UsS3plLGp5LG1XZSxWeCxiV2VdfSksY30pKCksTVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxvZ2dl''@;'; put 'put ''clNlcnZpY2U9ZCx0aGlzLl9zdWJzY3JpcHRpb249bmV3IHF0LHRoaXMubG9hZGluZz0hMSx0aGlzLmFsZXJ0Q2xvc2VkPSEwLHRoaXMuZGF0YT17dXNlcjpudWxsLHBhc3M6bnVsbH19bmdPbkluaXQoKXsiUmVkaXJlY3RlZCIhPT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5s''@;'; put 'put ''b2dpbk1lY2hhbmlzbSYmKHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGQ9Pnt0aGlzLmlzQWN0aXZlPWQ7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2gmJihkP2guY2xhc3NMaXN0LmFkZCgic2hvdWxkLWxvZ2lu''@;'; put 'put ''Iik6aC5jbGFzc0xpc3QucmVtb3ZlKCJzaG91bGQtbG9naW4iKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdWJtaXQoKXt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5kYXRhLnVzZXImJnRoaXMuZGF0YS5wYXNzJiZ0aGlz''@;'; put 'put ''LnNhc1NlcnZpY2UubG9naW4odGhpcy5kYXRhLnVzZXIsdGhpcy5kYXRhLnBhc3MpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSxhfHwodGhpcy5lcnJvck1zZz0iVXNlcm5hbWUgb3IgcGFzc3dvcmQgaW52YWxpZCIsdGhpcy5hbGVydENsb3NlZD0hMSl9LGE9Pnt0aGlzLmxvZ2dlclNlcnZp''@;'; put 'put ''Y2UubG9nKGEpLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yTXNnPWEsdGhpcy5hbGVydENsb3NlZD0hMX0pKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UoU2QpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImFwcC1sb2dpbiJdXSxkZWNsczoyMCx2YXJzOjksY29uc3RzOltbMSwibG9naW4tc2lkZWJhci13cmFwcGVyIl0sWzEsImxvZ2luLXNpZGViYXIiLCJzaWRlQmFyUHJvcHMiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxO''@;'; put 'put ''MExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEsImxvZ2luLWdyb3VwIl0s''@;'; put 'put ''WyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFzc3dvcmQiLCJwbGFjZWhv''@;'; put 'put ''bGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydENsb3NlZCJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQt''@;'; put 'put ''dGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEd0KDIsImltZyIsMiks''@;'; put 'put ''ZGUoMywiZm9ybSIsMyksRnQoIm5nU3VibWl0IixmdW5jdGlvbigpe3JldHVybiBoLnN1Ym1pdCgpfSksZGUoNCwibGFiZWwiLDQpKDUsImgzIiw1KSxMZSg2LCJXZWxjb21lIHRvIiksaGUoKSxMZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLGRlKDgsImg0Iiw2KSxMZSg5LCJDYXB0dXJlLCBS''@;'; put 'put ''ZXZpZXcsIGFuZCBBcHByb3ZlIiksaGUoKSgpLGRlKDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRhdGEudXNlcix2KXx8KGguZGF0YS51c2VyPXYpLHZ9KSxoZSgpLGRlKDEyLCJpbnB1dCIsOSksZ2koIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRhdGEucGFzcyx2KXx8KGguZGF0YS5wYXNzPXYpLHZ9KSxoZSgpLGRlKDEzLCJjbHItYWxlcnQiLDEwKSxnaSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmFsZXJ0Q2xvc2VkLHYpfHwoaC5h''@;'; put 'put ''bGVydENsb3NlZD12KSx2fSksZGUoMTQsImRpdiIsMTEpKDE1LCJzcGFuIiwxMiksTGUoMTYpLGhlKCkoKSgpLGRlKDE3LCJidXR0b24iLDEzKSxMZSgxOCwiIExvZyBpbiAiKSxoZSgpKCkoKSgpLEd0KDE5LCJkaXYiLDE0KSxoZSgpKSwyJmQmJihUcigiYWN0aXZlIixoLmlzQWN0aXZlKSxm''@;'; put 'put ''ZSgxMSkscGkoIm5nTW9kZWwiLGguZGF0YS51c2VyKSxmZSgpLHBpKCJuZ01vZGVsIixoLmRhdGEucGFzcyksZmUoKSxNZSgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIikscGkoImNsckFsZXJ0Q2xvc2VkIixoLmFsZXJ0Q2xvc2VkKSxmZSgzKSx3cihoLmVycm9yTXNnKSxmZSgpLE1l''@;'; put 'put ''KCJjbHJMb2FkaW5nIixoLmxvYWRpbmcpKCJkaXNhYmxlZCIsaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbDcscWwsbmwsbzcsJHMseXAsSngsUXgsajAsUDIsZHMsWjFdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geFdlKGMsbCl7MSZjJiYoZGUoMCwic3Bh''@;'; put 'put ''biIsMTApLExlKDEsImxvYWRpbmciKSxoZSgpKX1mdW5jdGlvbiBFV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMSksTGUoMSwibG9hZGVkIiksaGUoKSl9ZnVuY3Rpb24gVFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTIpLExlKDEsImZhaWxlZCIpLGhlKCkpfWZ1bmN0aW9uIEFXZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJjb2RlIiksTGUoMiksaGUoKSxMZSgzLCIgXHhhMCAiKSxndCg0LHhXZSwyLDAsInNwYW4iLDcpKDUsRVdlLDIsMCwic3BhbiIsOCkoNixUV2UsMiwwLCJzcGFuIiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5w''@;'; put 'put ''cm9ncmFtKSxmZSgyKSxNZSgibmdJZiIsYS5ydW5uaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLGZlKCksTWUoIm5nSWYiLCFhLnJ1bm5pbmcmJiFhLnN1Y2Nlc3NmdWwpfX1mdW5jdGlvbiBrV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc2lnbnBvc3Qt''@;'; put 'put ''Y29udGVudCIsNSksZ3QoMSxBV2UsNyw0LCJwIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtNZSgiY2xyUG9zaXRpb24iLCJib3R0b20tbWlkZGxlIiksZmUoKSxNZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBEV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMuX2xvYWRpbmdTdWI9bmV3IHF0fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvYWRpbmctaW5kaWNhdG9yIl1dLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bp''@;'; put 'put ''bm5lci1pbnZlcnNlIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIiwxLCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIs''@;'; put 'put ''NCwiY2xySWZPcGVuIl0sWzMsImNsclBvc2l0aW9uIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJydW5uaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Y2Nlc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmFpbCIsNCwibmdJZiJdLFsxLCJydW5uaW5nIl0sWzEsInN1Y2Nlc3Mi''@;'; put 'put ''XSxbMSwiZmFpbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiY2xyLXNpZ25wb3N0IiksR3QoMiwic3BhbiIsMSkoMywiY2xyLWljb24iLDIpKDQsImNsci1pY29uIiwzKSxndCg1LGtXZSwyLDIsImNsci1zaWducG9zdC1jb250ZW50Iiw0KSxoZSgp''@;'; put 'put ''KCkpLDImZCYmKGZlKDIpLF9kKCJkaXNwbGF5IixoLmxvYWRpbmc/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgpLF9kKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiZoLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgp''@;'; put 'put ''LF9kKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiYhaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIikpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEhsLEwyLFdMLHExZSxaTF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtmdW5jdGlvbiBJV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjZHMtaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVEYXJrTW9kZSghMCkpfSksaGUoKX19ZnVuY3Rpb24gUldlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiY2RzLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlRGFya01vZGUoITEpKX0pLGhlKCl9fWZ1bmN0aW9uIExXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxHdCgxLCJpbWciLDE0KSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoKTtmZSgpLGZNKCJzcmMiLGEuZ2V0UGljdHVyZVVybCgpLFpDKX19ZnVuY3Rpb24gT1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJoaWRkZW4iLDA9PT1hLmZhaWxlZFJlcXMubGVuZ3RoKSxmZSgpLHdy''@;'; put 'put ''KGEuZmFpbGVkUmVxcy5sZW5ndGgpfX1mdW5jdGlvbiBQV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7VHIoImhpZGRlbiIsMD09PWEuZGVidWdMb2dzLmxlbmd0aCksZmUoKSx3cihhLmRlYnVnTG9ncy5sZW5ndGgpfX1mdW5j''@;'; put 'put ''dGlvbiBGV2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxNyl9ZnVuY3Rpb24gSFdlKGMsbCl7MSZjJiYoc2koMCksZGUoMSwiYSIsMjgpKDIsInNwYW4iLDI5KSxMZSgzLCJEb2N1bWVudGF0aW9uIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uIE5XZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51IiwxOCkoMSwiZGl2IiwxOSwwKSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1oYSgyKTtyZXR1cm4gQ3QoUmUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxkZSg0LCJj''@;'; put 'put ''bHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2FzanNDb25maWcuZGVidWcsaCl8fChmLnNhc2pzQ29uZmlnLmRlYnVnPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25EZWJ1Z01vZGVDaGFuZ2UoKSl9KSxoZSgpLGRlKDYsImxhYmVsIiksTGUoNywiRGVidWcgTW9kZSIpLGhlKCkoKSgpKCksZGUoOCwiYSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5v''@;'; put 'put ''cGVuUmVxdWVzdHNNb2RhbCgpKX0pLGRlKDksInNwYW4iKSxMZSgxMCwiU0FTIFJlcXVlc3RzIiksaGUoKSgpLGd0KDExLEhXZSw0LDAsIm5nLWNvbnRhaW5lciIsNyksR3QoMTIsImRpdiIsMjMpLGRlKDEzLCJhIiwyNCkoMTQsInNwYW4iKSxMZSgxNSwiU3lzdGVtIiksaGUoKSgpLGRlKDE2''@;'; put 'put ''LCJhIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5sb2dvdXQoaCkpfSksZGUoMTcsInNwYW4iKSxMZSgxOCwiTG9nIE91dCIpLGhlKCksR3QoMTksImNsci1pY29uIiwyNiksaGUoKSxkZSgyMCwiZGl2IiwyNykoMjEsInNwYW4iKSxMZSgyMiksaGUo''@;'; put 'put ''KSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoNSkscGkoIm5nTW9kZWwiLGEuc2FzanNDb25maWcuZGVidWcpLGZlKDYpLE1lKCJuZ0lmIiwhYS5pc0RlcGxveVBhZ2UpLGZlKDExKSxEcigidiIsYS5jb21taXRWZXIsIiIpfX1sZXQgVldlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgcXQsdGhpcy51c2VyU3ViPW5ldyBxdCx0aGlzLmFwcExvZ3M9W10s''@;'; put 'put ''dGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIiLHRoaXMuZGFya01vZGU9dGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2UuZGFya01vZGV9bmdPbkluaXQoKXt0aGlzLnVzZXJTdWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy51c2VyTmFtZT1hLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwi''@;'; put 'put ''U0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRWZXI9InY3LjAuMiIucmVwbGFjZSgidiIsIiIpKyIuZzBkYjZiMjUifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5z''@;'; put 'put ''dWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShhKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxLbi51c2VyRHJvcGRvd25Db25maWcuY2xvc2VPbkRlYnVnQ2xpY2smJnNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9''@;'; put 'put ''bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNl''@;'; put 'put ''ck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoX1cpLEdlKEJzKSxHZSh2YyksR2UoTHMpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItYWN0aW9ucyJdXSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVt''@;'; put 'put ''cy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVtZS10''@;'; put 'put ''b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3Itd2hp''@;'; put 'put ''dGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwibmdJZiJd''@;'; put 'put ''LFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNpemUi''@;'; put 'put ''LCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwi''@;'; put 'put ''YmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwi''@;'; put 'put ''L3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9j''@;'; put 'put ''cy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsSVdlLDEsMCwiY2RzLWljb24iLDMpKDMsUldlLDEsMCwiY2RzLWljb24i''@;'; put 'put ''LDQpLGhlKCksR3QoNCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxMZSg4KSxoZSgpLGd0KDksTFdlLDIsMSwic3BhbiIsNykoMTAsT1dlLDIsMywic3BhbiIsOCkoMTEsUFdlLDIsMywic3BhbiIsOSkoMTIs''@;'; put 'put ''RldlLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLGd0KDEzLE5XZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUpLHdyKGgudXNl''@;'; put 'put ''ck5hbWUpLGZlKCksTWUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNWaXlhKSxmZSgpLE1lKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsIWguaXNWaXlhKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbYmEsTWQsbmwsJHMsYzEsSGwscnMsTDIsZHMsSWQsQnksU2gsc2csZzcsbTcsVnksRFdlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGRoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hbGVydHM9bmV3IFdufXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1hbGVydCIsMiks''@;'; put 'put ''Z2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5jbG9zZWQsaCl8fChmLmNsb3NlZD1oKSxDdChoKX0pLEZ0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMiku''@;'; put 'put ''b25BbGVydENsb3NlKCkpfSksZGUoMSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxMZSgzKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLHBpKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQp''@;'; put 'put ''LGZlKDMpLERyKCIgIixhLm1lc3NhZ2UsIiAiKX19ZnVuY3Rpb24galdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFsZXJ0cyIpLGd0KDEsQldlLDQsNCwiY2xyLWFsZXJ0IiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIixhLmFsZXJ0cyl9fWxldCB6V2U9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9hbGVydHNTZXJ2aWNlPWEsdGhpcy5hbGVydHM9W10sdGhpcy5oYXNPcGVuQWxlcnQ9ITEsdGhpcy5hbGVydHNTdWI9bmV3IHF0fW5nT25Jbml0KCl7dGhpcy5hbGVydHNTdWI9dGhpcy5fYWxlcnRzU2VydmljZS5hbGVydHMuc3Vi''@;'; put 'put ''c2NyaWJlKGE9Pnt0aGlzLmFsZXJ0cy5wdXNoKGEpLHRoaXMuaGFzT3BlbkFsZXJ0PSEwLGEuZXJyJiZjb25zb2xlLmVycm9yKGEuZXJyKX0pfW9uQWxlcnRDbG9zZSgpe3RoaXMuaGFzT3BlbkFsZXJ0PXRoaXMuYWxlcnRzLnNvbWUoYT0+IWEuY2xvc2VkKX1zdGF0aWN7dGhpcy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFw''@;'; put 'put ''cExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIl0sWzEsImFsZXJ0LWl0ZW0iXSxb''@;'; put 'put ''MSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmZ3QoMCxqV2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmQmJk1lKCJuZ0lmIixoLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbbnMsYmEsSngsJGRlLFF4XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpLHBPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9IiJ9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250''@;'; put 'put ''YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihk''@;'; put 'put ''ZSgwLCJhIiwwKSxMZSgxLCJzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksaGUoKSksMiZkJiYoVHIoInVuc2V0IiwiIiE9PWguY2xhc3NlcyksTWUoIm5nQ2xhc3MiLGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W3d1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGhoZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IFduLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgV259b3BlbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5hfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBXbix0''@;'; put 'put ''aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxlKCl9Y2xvc2UoYSl7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5uZXh0KHtwYXNzd29yZDphfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVVdlKGMsbCl7MSZjJiYoZGUoMCwicCIsMTMpLExlKDEs''@;'; put 'put ''IiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWZ1bmN0aW9uIFpXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksTGUoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCks''@;'; put 'put ''ZGUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxMZSg2LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxkZSg3LCJpbnB1dCIsNywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnBhc3N3b3JkSW5wdXQsaCl8fChmLnBhc3N3''@;'; put 'put ''b3JkSW5wdXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoOSwiZGl2Iiw4KSgxMCwiZGl2IiksZ3QoMTEsVVdlLDIsMCwicCIsOSksaGUoKSxkZSgxMiwiZGl2IiwxMCkoMTMsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZSgpKX0pLExl''@;'; put 'put ''KDE0LCIgQ2FuY2VsICIpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhhKDgpO3JldHVybiBDdChSZSgpLmNsb3NlKGgudmFsdWUpKX0pLExlKDE2LCIgVW5sb2NrICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5u''@;'; put 'put ''Z0lmLGQ9aGEoOCksaD1SZSgpO2ZlKCksTWUoImNsck1vZGFsT3BlbiIsYS5vcGVuKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHBpKCJuZ01vZGVsIixoLnBhc3N3b3JkSW5wdXQpLGZlKDQpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSg0KSxNZSgi''@;'; put 'put ''ZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpfX1sZXQgV1dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMu''@;'; put 'put ''ZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFzc3dvcmRJbnB1dD0iIn1jbG9zZShhKXt0aGlzLnBhc3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLmNsb3NlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KGhoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQt''@;'; put 'put ''ZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFu''@;'; put 'put ''YWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsWldlLDE3LDYsImRpdiIsMSksZWwoMSwiYXN5bmMiKSks''@;'; put 'put ''MiZkJiZNZSgibmdJZiIsRGMoMSwxLGgub3B0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltiYSxxbCxubCwkcyxvdSxLdSxFTV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSx0RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9w''@;'; put 'put ''cGVkPW5ldyBLcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgS3J9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2Vk''@;'; put 'put ''T3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFU''@;'; put 'put ''cmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxl''@;'; put 'put ''cyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJz''@;'; put 'put ''OjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5v''@;'; put 'put ''bmRyb3Aodil9KSwyJmQmJlRyKCJmaWxlb3ZlciIsaC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZmhlPSgpPT5bXTtmdW5jdGlvbiBZV2UoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJwIiw2KSxMZSgxLCJObyByZXF1ZXN0cyBtYWRlIiksaGUoKSl9ZnVuY3Rpb24gR1dlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gJFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwx''@;'; put 'put ''NCksaGUoKSl9ZnVuY3Rpb24gS1dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDMpLmluZGV4O3JldHVybiBDdChSZSgyKS5nb1RvTG9nTGluZShoLCJy''@;'; put 'put ''ZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJidXR0b24iLDIzKSxMZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHFXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxHdCgxLCJjbHIt''@;'; put 'put ''aWNvbiIsMjApLExlKDIpLGd0KDMsS1dlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoMiksRHIoIiBFcnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCksTWUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHxHcygy''@;'; put 'put ''LGZoZSkpfX1mdW5jdGlvbiBYV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoMykuaW5kZXg7cmV0dXJuIEN0KFJlKDIpLmdvVG9Mb2dMaW5lKGgsInJl''@;'; put 'put ''cXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwiYnV0dG9uIiwyMyksTGUoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBKV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwiY2xy''@;'; put 'put ''LWljb24iLDI0KSxMZSgyKSxndCgzLFhXZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKDIpLERyKCIgV2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSxNZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5n''@;'; put 'put ''c3x8R3MoMixmaGUpKX19ZnVuY3Rpb24gUVdlKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI1KSwyJmMmJk1lKCJpbm5lckhUTUwiLFJlKDIpLiRpbXBsaWNpdC5sb2dGaWxlLFY0KX1mdW5jdGlvbiBlWWUoYyxsKXsxJmMmJkd0KDAsImRpdiIsMjYpLDImYyYmTWUoInRleHRDb250ZW50IixSZSgy''@;'; put 'put ''KS4kaW1wbGljaXQubG9nRmlsZSl9ZnVuY3Rpb24gdFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5kb3dubG9hZExvZyhoLmxvZ0Zp''@;'; put 'put ''bGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBuWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIpLGd0KDIscVdlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsSldlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCks''@;'; put 'put ''Z3QoNCxRV2UsMSwxLCJkaXYiLDE2KSg1LGVZZSwxLDEsImRpdiIsMTcpKDYsdFllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksTWUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLE1lKCJuZ0lmIixhLmxvZ1dhcm5pbmdz''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIiwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmlsZS5sZW5ndGgpPjApfX1mdW5jdGlvbiByWWUoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJjZUNvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1m''@;'; put 'put ''dW5jdGlvbiBpWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxMZSgyKSxoZSgpLGd0KDMsclllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuc291cmNlQ29kZSksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7''@;'; put 'put ''cmV0dXJuIEN0KFJlKDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBvWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxMZSgyKSxoZSgpLGd0KDMsYVll''@;'; put 'put ''LDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLERyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9u''@;'; put 'put ''IHNZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aC5rZXkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7VHIoInNlbGVjdGVkIixSZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxmZSgpLERyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBsWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGd0KDEsc1llLDIsMywiZGl2Iiwz''@;'; put 'put ''MyksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gY1llKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzgpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKDMpLiRpbXBsaWNpdDtmZSgyKSxEcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEua2V5''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIGRZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKS4kaW1wbGljaXQ7ZmUoKSxEcigiICIsZFthLmtleV0sIiAiKX19ZnVuY3Rpb24gaFllKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxn''@;'; put 'put ''dCgxLGRZZSwyLDEsInRkIiw0MCksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBmWWUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJ0YWJsZSIsMzkpKDEsInRoZWFkIikoMiwidHIiKSxndCgzLHVZZSwyLDEsInRoIiw0MCksZWwoNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJvZHkiKSxndCg2LGhZZSwzLDMsInRyIiw0MCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMykuJGltcGxpY2l0O2ZlKDMp''@;'; put 'put ''LE1lKCJuZ0Zvck9mIixEYyg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxmZSgzKSxNZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBwWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFi''@;'; put 'put ''LWNvbnRlbnQiKSxndCgxLGNZZSwzLDEsInAiLDM1KSxkZSgyLCJkaXYiLDM2KSxndCgzLGZZZSw3LDQsInRhYmxlIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksZmUoMiksTWUoIm5nSWYiLGEuc2VsZWN0''@;'; put 'put ''ZWRUYWJsZSl9fWZ1bmN0aW9uIGdZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI5KSgyLCJidXR0b24iLDMwKSxMZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEd0KDQsImNsci1pY29uIiwzMSksaGUoKSxndCg1LGxZZSwzLDMs''@;'; put 'put ''ImNsci1kcm9wZG93bi1tZW51IiwzMiksaGUoKSxndCg2LHBZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpO3JldHVybiBtaShmLnRhYmxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0''@;'; put 'put ''KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKSxmZSg1KSxwaSgiY2xySWZBY3RpdmUiLGEudGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gbVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXN0YWNr''@;'; put 'put ''LWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwiKSxMZSgyKSxkZSgzLCJzcGFuIiw5KSxndCg0LEdXZSwyLDAsInNwYW4iLDUpKDUsJFdlLDIsMCwic3BhbiIsNSksaGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50IiksTGUoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEw''@;'; put 'put ''KSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJjbHItdGFicyIpKDExLCJjbHItdGFiIikoMTIsImJ1dHRvbiIsMTEpLExlKDEzLCJTQVMgTG9nIiksaGUoKSxndCgxNCxuWWUsNyw1LCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zYXNMb2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwiYnV0dG9uIiwxMSksTGUoMTcsIlNBUyBTb3VyY2UgQ29kZSIpLGhlKCksZ3QoMTgsaVllLDQsMiwibmctdGVtcGxhdGUi''@;'; put 'put ''LDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwx''@;'; put 'put ''MSksTGUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLGhlKCksZ3QoMjIsb1llLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYu''@;'; put 'put ''c2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZ3QoMjMsZ1llLDcsMiwiY2xyLXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMik7TWUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIs''@;'; put 'put ''MSksZmUoMiksRHIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxm''@;'; put 'put ''ZSgyKSx3cihhLnBhcnNlZFRpbWVzdGFtcCksZmUoNykscGkoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksZmUoNCkscGkoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlvbiB2WWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3RhY2stdmlldyIpLGd0KDEsbVllLDI0LDEwLCJjbHItc3RhY2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0''@;'; put 'put ''cyl9fWxldCBiWWU9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgS3IsdGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2Fz''@;'; put 'put ''R2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygp''@;'; put 'put ''LHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4g''@;'; put 'put ''YS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0VGltZXN0YW1wKGEpe3JldHVybiBPbyhhKS5mb3JtYXQoKT9PbyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBPbyhhKS5m''@;'; put 'put ''b3JtYXQoKT9gICgke09vKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVz''@;'; put 'put ''dHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXAp''@;'; put 'put ''fWdvVG9Mb2dMaW5lKGEsZCxoKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihmKWlmKCJTQVNWSVlBIj09PXRoaXMuc2VydmVyVHlwZSl7Y29uc3QgTT0oZi50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIpO2xldCBEPS0x''@;'; put 'put ''O2ZvcihsZXQgYmU9MDtiZTxNLmxlbmd0aDtiZSsrKWlmKE1bYmVdLmluY2x1ZGVzKGEpKXtEPWJlO2JyZWFrfWlmKC0xPT09RClyZXR1cm47Y29uc3QgWj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixaLnRleHRDb250''@;'; put 'put ''ZW50PSJYIixmLmFwcGVuZENoaWxkKFopO2NvbnN0IHJlPVouY2xpZW50SGVpZ2h0O2YucmVtb3ZlQ2hpbGQoWiksZi5zY3JvbGxUb3A9cmUqRDtjb25zdCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjZS5jbGFzc05hbWU9ImxpbmUtaGlnaGxpZ2h0LW92ZXJsYXkgIisoImVy''@;'; put 'put ''cm9yIj09PWg/ImVycm9yLWhpZ2hsaWdodCI6Indhcm5pbmctaGlnaGxpZ2h0IiksY2UuY2xhc3NMaXN0LmFkZCgidGVtcC1oZWlnaHQtc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtaGVpZ2h0IixgJHtyZX1weGApLGNlLmNsYXNz''@;'; put 'put ''TGlzdC5hZGQoImxpbmUtcG9zaXRpb24tc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtdG9wIixyZSpEKyJweCIpLGYuYXBwZW5kQ2hpbGQoY2UpLHNldFRpbWVvdXQoKCk9PntmLmNvbnRhaW5zKGNlKSYmZi5yZW1vdmVDaGlsZChj''@;'; put 'put ''ZSl9LDNlMyl9ZWxzZXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2cgZm9udGApO2ZvcihsZXQgTSBvZiBBcnJheS5mcm9tKHYpKWlmKE0udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGEpKXtmLnNjcm9sbFRvcD1NLm9mZnNldFRvcC1m''@;'; put 'put ''Lm9mZnNldFRvcCxNLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodGVkLWxpbmUiKSxzZXRUaW1lb3V0KCgpPT57TS5jbGFzc0xpc3QucmVtb3ZlKCJoaWdobGlnaHRlZC1saW5lIil9LDNlMyk7YnJlYWt9fX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sdj1hLmxvZ0ZpbGUuc3BsaXQoIlxuIiksTT1bLi4udl07Zm9yKGxldCBE''@;'; put 'put ''PTA7RDx2Lmxlbmd0aDtEKyspe2lmKC88Lio+RVJST1IvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJFIiksdltEXS5sZW5ndGgtMSk7aC5wdXNoKFopfWVsc2UvXkVSUk9SL2dtLnRlc3QodltEXSkmJihoLnB1c2godltEXSksIlNBU1ZJWUEiIT09''@;'; put 'put ''ZC5zZXJ2ZXJUeXBlJiYodltEXT0nPGZvbnQgY2xhc3M9ImVycm9yLWxpbmUiPicrdltEXSsiPC9mb250PiIpKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJXIiksdltEXS5sZW5ndGgtMSk7Zi5wdXNoKFopfWVsc2Uv''@;'; put 'put ''XldBUk5JTkcvZ20udGVzdCh2W0RdKSYmKGYucHVzaCh2W0RdKSwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUmJih2W0RdPSc8Zm9udCBjbGFzcz0id2FybmluZy1saW5lIj4nK3ZbRF0rIjwvZm9udD4iKSl9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhmKSwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUm''@;'; put 'put ''JihhLm9yaWdpbmFsTG9nRmlsZT1NLmpvaW4oIlxuIiksYS5sb2dGaWxlTGluZU1hcD17fSxoLmZvckVhY2goRD0+e2ZvcihsZXQgWj0wO1o8TS5sZW5ndGg7WisrKWlmKE1bWl0uaW5jbHVkZXMoRCkpe2EubG9nRmlsZUxpbmVNYXAuZXJyb3JzfHwoYS5sb2dGaWxlTGluZU1hcC5lcnJvcnM9''@;'; put 'put ''e30pLGEubG9nRmlsZUxpbmVNYXAuZXJyb3JzW0RdPVo7YnJlYWt9fSksZi5mb3JFYWNoKEQ9Pntmb3IobGV0IFo9MDtaPE0ubGVuZ3RoO1orKylpZihNW1pdLmluY2x1ZGVzKEQpKXthLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzfHwoYS5sb2dGaWxlTGluZU1hcC53YXJuaW5ncz17fSksYS5s''@;'; put 'put ''b2dGaWxlTGluZU1hcC53YXJuaW5nc1tEXT1aO2JyZWFrfX0pKSxhLmxvZ0ZpbGU9di5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9h''@;'; put 'put ''ZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2FkU291cmNlQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25z''@;'; put 'put ''dCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShTZCksR2UoU3UpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwi''@;'; put 'put ''eGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0''@;'; put 'put ''LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5n''@;'; put 'put ''ZSIsImNscklmQWN0aXZlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJsb2ctd3JhcHBlciBzYXNsb2ciLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2cgdml5YSIsMywidGV4dENvbnRlbnQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEs''@;'; put 'put ''ImNvbG9yLWdyZWVuIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbMSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLCJ2aXlhIiwzLCJ0ZXh0Q29udGVudCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFw''@;'; put 'put ''cGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVt''@;'; put 'put ''IiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xh''@;'; put 'put ''c3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''dil7cmV0dXJuIGgubW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiksTGUoNCksaGUoKSgpLGRlKDUsImRpdiIsMyksZ3QoNixZV2UsMiwwLCJwIiw0KSg3LHZZZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgp''@;'; put 'put ''KCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgub3BlbmVkKSxmZSg0KSxEcigiQXBwIExvY2F0aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9jLCIiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCks''@;'; put 'put ''TWUoIm5nSWYiLGgub3BlbmVkJiYobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLENHLFZkZSx3RyxOZGUsRWgsUGQsZmcsSGwsb3UsS3UsSHksTDIsX20sQ20seDcsd20seW0sUzcsc2csZzcsbTcsVnks''@;'; put 'put ''d1JdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgeVlle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcgcGhlfX1jbGFzcyBwaGV7fWZ1bmN0aW9uIF9ZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAi''@;'; put 'put ''LDgpLExlKDEsIiBTQVMgU2VydmljZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIHdZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLExl''@;'; put 'put ''KDMsIlNZU1dBUk5JTkdURVhUOiIpLGhlKCksTGUoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25nIiksTGUoNywiU1lTRVJST1JURVhUOiIpLGhlKCksTGUoOCksaGUoKSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLExlKDExLCJNQUM6IiksaGUoKSxMZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9UmUoKTtmZSg0KSxEcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZlKDQpLERyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLGZlKDQpLERyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBDWWUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLExlKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o''@;'; put 'put ''KTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxMZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBNWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw''@;'; put 'put ''LCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZG93bmxvYWRMb2coKSl9KSxMZSgxLCIgRG93bmxvYWQgbG9nICIpLGhlKCl9fWZ1bmN0aW9uIHhZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxMZSgxLCIgQ2xvc2UgIiksaGUoKX19ZnVuY3Rpb24gRVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChSZSgpLnJlbG9hZCgpKX0pLExlKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IFRZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9''@;'; put 'put ''Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEtyLHRoaXMuZGF0YT1uZXcgeVllLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIs''@;'; put 'put ''ZGV0YWlsczpuZXcgcGhlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRl''@;'; put 'put ''cygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIu''@;'; put 'put ''bmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2lu''@;'; put 'put ''ZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZSh2YyksR2Uo''@;'; put 'put ''QnMpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1v''@;'; put 'put ''ZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJd''@;'; put 'put ''LFsiY2xhc3MiLCJzYXNTZXJ2aWNlIG10LTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRu''@;'; put 'put ''LXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIs''@;'; put 'put ''MCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgubW9kYWxFbmFibGVkLHYpfHwoaC5tb2RhbEVuYWJsZWQ9diksdn0pLGRlKDEsImgzIiwxKSxMZSgyKSxndCgzLF9ZZSw0LDEsInAiLDIpLGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLGd0''@;'; put 'put ''KDYsd1llLDEzLDMsImRpdiIsNSksaGUoKSxkZSg3LCJkaXYiLDYpLGd0KDgsQ1llLDIsMCwiYnV0dG9uIiw3KSg5LFNZZSwyLDAsImJ1dHRvbiIsNykoMTAsTVllLDIsMCwiYnV0dG9uIiw3KSgxMSx4WWUsMiwwLCJidXR0b24iLDcpKDEyLEVZZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwy''@;'; put 'put ''JmQmJihwaSgiY2xyTW9kYWxPcGVuIixoLm1vZGFsRW5hYmxlZCksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFoLmZvcmNlUmVsb2FkKSxmZSgyKSxEcigiICIsaC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxmZSgpLE1lKCJuZ0lmIixoLmRhdGEuc2FzU2Vydmlj''@;'; put 'put ''ZSYmaC5kYXRhLnNhc1NlcnZpY2UubGVuZ3RoPjApLGZlKDIpLE1lKCJpbm5lckhUTUwiLGguZGF0YS5tZXNzYWdlLFY0KSxmZSgpLE1lKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKDIpLE1lKCJuZ0lmIixoLnNob3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZp''@;'; put 'put ''Y2UpKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCksTWUoIm5nSWYiLChudWxsPT1oLmRhdGEuZGV0YWlscz9udWxsOmguZGF0YS5kZXRhaWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRh''@;'; put 'put ''LmRldGFpbHMuTE9HLnRyaW0oKS5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYiLCFoLmZvcmNlUmVsb2FkKSxmZSgpLE1lKCJuZ0lmIixoLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbYmEsb3UsS3UsdEVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQVllPSgp''@;'; put 'put ''PT5bIi8iXSxnaGU9KCk9PlsiL3ZpZXciXSxtaGU9KCk9PlsiL2hvbWUiXSxFRz0oKT0+WyIvcmV2aWV3L3N1Ym1pdHRlZCJdLGtZZT0oKT0+WyIvcmV2aWV3L2FwcHJvdmUiXSxEWWU9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07ZnVuY3Rpb24gSVllKGMsbCl7MSZjJiYoc2koMCksZGUoMSwi''@;'; put 'put ''ZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCks''@;'; put 'put ''ZGUoOCwiYSIsMjMpLExlKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gUlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUs''@;'; put 'put ''ImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRh''@;'; put 'put ''aWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLExlKDgsIk1vcmUgZGV0YWlscyIpLGhlKCksbGkoKX19ZnVuY3Rpb24gTFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxJWWUsMTAsMCwibmctY29udGFpbmVyIiwxKSgyLFJZZSw5LDAsIm5nLWNvbnRhaW5lciIsMSks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIE9ZZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJVcGRh''@;'; put 'put ''dGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlvbiBQWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksTGUoNiksR3QoNywiY29udGFjdC1saW5r''@;'; put 'put ''IiwyMiksTGUoOCksaGUoKSgpKCksZ3QoOSxPWWUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDYpLFV1KCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5nRGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8i''@;'; put 'put ''ZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3QgIiksZmUoMiksRHIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSxNZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIp''@;'; put 'put ''fX1mdW5jdGlvbiBGWWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksTGUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gSFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24i''@;'; put 'put ''LDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLExlKDgpLGhlKCkoKSgp''@;'; put 'put ''LGd0KDksRlllLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSxEcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLE1lKCJuZ0lmIiwhYS5s''@;'; put 'put ''aWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIE5ZZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsTFllLDMsMiwiZGl2IiwxNCkoMixQWWUsMTAsNCwiZGl2IiwxNSkoMyxIWWUsMTAsMiwiZGl2IiwxNSksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsYS5mcmVlVGllckJhbm5lciYmKCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEubGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSxNZSgibmdJZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksZmUoKSxNZSgibmdJZiIsYS5hcHBPdmVyQ2Fw''@;'; put 'put ''YWNpdHkpfX1mdW5jdGlvbiBWWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEsImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gQlllKGMs''@;'; put 'put ''bCl7MSZjJiYoZGUoMCwiYSIsMjkpLEd0KDEsImltZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDImYyYmTWUoInJvdXRlckxpbmsiLEdzKDEsQVllKSl9ZnVuY3Rpb24galllKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNwYW4iLDMyKSxoZSgpKX1mdW5jdGlvbiB6WWUoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDApKDEsImEiLDQxKSxMZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJhIiw0MSksTGUoNCwiTE9BRCIpLGhlKCksZGUoNSwiYSIsNDEpLExlKDYsIlJFVklFVyIpLGhlKCkoKSksMiZjJiYoZmUoKSxNZSgicm91dGVyTGluayIsR3MoMyxnaGUpKSxm''@;'; put 'put ''ZSgyKSxNZSgicm91dGVyTGluayIsR3MoNCxtaGUpKSxmZSgyKSxNZSgicm91dGVyTGluayIsR3MoNSxFRykpKX1mdW5jdGlvbiBVWWUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24iKSgzLCJidXR0b24iLDM0KSxMZSg0LCIgTWVudSAiKSxoZSgp''@;'; put 'put ''LGd0KDUselllLDcsNiwiY2xyLWRyb3Bkb3duLW1lbnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2IiwzNikoNywiYSIsMzcpLExlKDgsIlZJRVciKSxoZSgpLGRlKDksImEiLDM4KSxMZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEiLDM5KSxMZSgxMiwiUkVWSUVXIiksaGUoKSgpLGxpKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1SZSgpO2ZlKDcpLE1lKCJyb3V0ZXJMaW5rIixHcyg3LGdoZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21l''@;'; put 'put ''IikpLE1lKCJyb3V0ZXJMaW5rIixHcyg4LG1oZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksTWUoInJvdXRlckxp''@;'; put 'put ''bmsiLEdzKDksRUcpKX19ZnVuY3Rpb24gWlllKGMsbCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0MikoMSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxMZSg0LCJTVUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJhIiwzNyksTGUoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJs''@;'; put 'put ''aSIsNDQpKDksImEiLDM3KSxMZSgxMCwiSElTVE9SWSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLE1lKCJyb3V0ZXJMaW5rIixHcyg1LEVHKSksZmUoMyksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLE1lKCJyb3V0ZXJMaW5rIixH''@;'; put 'put ''cyg2LGtZZSkpLGZlKDMpLE1lKCJyb3V0ZXJMaW5rIixHcyg3LERZZSkpfX1mdW5jdGlvbiBXWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBZWWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1h''@;'; put 'put ''bGVydHMiKX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtaW5mby1tb2RhbCIsNDUpLEZ0KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmNsb3NlQWJvcnRNb2RhbCho''@;'; put 'put ''LmlkKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0aW9uIEtZZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0''@;'; put 'put ''KDEsImRpdiIsNTApKDIsImRpdiIsNTEpKDMsImRpdiIsNTIpLGhlKCkpfWZ1bmN0aW9uIHFZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIsNDcpLGd0KDIsS1llLDQsMCwiZGl2Iiw0OCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLG51''@;'; put 'put ''bGw9PT1hLmFwcEFjdGl2ZSl9fVRzLmFkZEljb25zKFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4y''@;'; put 'put ''MzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAz''@;'; put 'put ''MC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMg''@;'; put 'put ''NiAxMi4yNDAzIDYgMTcuOTkwM0M2IDI0LjYxMDMgMTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAzQzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAyNC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTgu''@;'; put 'put ''MzMwMyAxMy43MSAxMi4yMDAzQzEzLjcxIDEwLjA3MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgwM1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMg''@;'; put 'put ''NC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMw''@;'; put 'put ''M0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAw''@;'; put 'put ''MDNaIi8+J31dLFsic3VuIix7b3V0bGluZTonPHBhdGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYu''@;'; put 'put ''MyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0Mx''@;'; put 'put ''OC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAy''@;'; put 'put ''OS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIg''@;'; put 'put ''Ni42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gz''@;'; put 'put ''MEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIy''@;'; put 'put ''Ljk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYgMTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEgMjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUgMTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcg''@;'; put 'put ''MjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45''@;'; put 'put ''TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkg''@;'; put 'put ''MjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5''@;'; put 'put ''IDguODIgMjUuNzhIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41''@;'; put 'put ''MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAy''@;'; put 'put ''NyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEw''@;'; put 'put ''LjUxSDI2LjQ5Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTgu''@;'; put 'put ''NTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAy''@;'; put 'put ''NS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIg''@;'; put 'put ''MjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xl''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NDMgMjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIwLjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4z''@;'; put 'put ''NSAxNy40NDQ1IDIwLjggMTcuOTk0MyAyMC44Wk0xOC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQgMTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcuMzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIu''@;'; put 'put ''OTVDMTYuOTI0NyAyMy4xOCAxNi43OTQ4IDIzLjQ4IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEyIDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMxNy42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMx''@;'; put 'put ''OC4xNTQyIDI1IDE4LjMwNDEgMjQuOTcgMTguNDU0MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIzOSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTkuMTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAyMy42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTku''@;'; put 'put ''MDQzOCAyMy4yIDE4Ljk1MzggMjMuMDYgMTguODQzOSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQu''@;'; put 'put ''ODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3''@;'; put 'put ''QzI4Ljc1OTUgMjcuNjMgMjguNDc5NiAyOCAyNy45Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMxIDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4''@;'; put 'put ''NDMgOEMxOC4xNjQyIDggMTguNjM0IDguMDUgMTguOTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjkuMTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdIMjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5''@;'; put 'put ''IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMg''@;'; put 'put ''MzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAxMi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41''@;'; put 'put ''VjE5LjNDMTkuMTkzNyAxOS45NiAxOC42NTQgMjAuNSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMgMTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1''@;'; put 'put ''LjQxIDE3Ljk5NDMgMjUuNDFDMTcuODE0MyAyNS40MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUuM0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAyNC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcgMTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMu''@;'; put 'put ''MjkgMTYuOTk0NyAyM0MxNy4xMzQ2IDIyLjg3IDE3LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAx''@;'; put 'put ''OC45NzM4IDIzQzE5LjA5MzggMjMuMTIgMTkuMjAzNyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2MzggMjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291''@;'; put 'put ''dGxpbmU6JzxwYXRoIGQ9Ik0zMyAxOEMzMy41NSAxOCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAzMy41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAzNCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIuNDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDND''@;'; put 'put ''Mi40NSA2IDIgNi40NSAyIDdDMiA3LjU1IDIuNDUgOCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQgNyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAzMy41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAzMy41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAz''@;'; put 'put ''NCAyNyAzNEMyNy41NSAzNCAyOCAzMy41NSAyOCAzM1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAzNCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pNMTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYx''@;'; put 'put ''NloiLz4nfV0sWyJ0cmFzaCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAyNy45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDguMzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcg''@;'; put 'put ''MzEuMjUgNy45OSAzMVYxMS4wM0g1Ljk3VjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEu''@;'; put 'put ''MDNIMjcuOThWMzFaTTEzIDEyLjk4VjI3Ljk4SDE1LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTgg''@;'; put 'put ''NS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1YxMi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1''@;'; put 'put ''QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAx''@;'; put 'put ''MS4wM1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4Ljgy''@;'; put 'put ''VjE1SDIzLjIxVjI5SDIwLjc5VjI4LjgyWk0xMi44MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYyOC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTonPHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAyNS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0My''@;'; put 'put ''My41NSAyNS41MDAxIDI0IDI1LjA1MDEgMjQgMjQuNTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMuNTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEgMTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAxSDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAx''@;'; put 'put ''QzUuODEgMjIuMjAwMSA2LjE5IDIxLjcwMDEgNi4xMSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIwLjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZD''@;'; put 'put ''MTYuNDkgOS40MDAwNiAxNi43NCA5LjQ5MDA2IDE3IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwxNy43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkgMy40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAx''@;'; put 'put ''NS45MSA0LjgxMDA2IDE2LjMgNS4yMDAwNkwxNi42NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEyLjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEgNC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIuMjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEg''@;'; put 'put ''MjIuMjkwMSA1LjI2IDIyLjI5MDFWMjIuMjgwMVpNMjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAxIDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEgMTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAyNi45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45''@;'; put 'put ''OCAyNi4xMjAxQzEwLjA3IDI1LjU4MDEgOS43IDI1LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQuMzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjkuMTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUuNjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAx''@;'; put 'put ''IDYuNjQgMjguOTMwMSA2LjczIDI4LjQ1MDFMNi44MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43''@;'; put 'put ''NyAzMC4wMDAxIDI0LjE2IDI5LjgyMDEgMjMuNjggMzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4wOSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMyIDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQx''@;'; put 'put ''MDA2IDIyLjQ2IDYuNjQwMDYgMjIuMjQgNy4xNTAwNkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUwMDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAxIDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1''@;'; put 'put ''LjMyMDFDMjcuOSAyNC43ODAxIDI3LjM5IDI0LjQwMDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAxIDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAy''@;'; put 'put ''Ny4xMjAxIDMwLjY0IDI2Ljc0MDEgMzAuMDkgMjYuODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IFhZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5y''@;'; put 'put ''b3V0ZT1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5jZHI9Wix0aGlzLmVsZW1lbnRSZWY9cmUsdGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhpcy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0h''@;'; put 'put ''MSx0aGlzLmFwcHJvdmVBY3RpdmU9ITEsdGhpcy5mcmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNlUHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRo''@;'; put 'put ''aXMuYXBwQWN0aXZlPW51bGwsdGhpcy5yZXF1ZXN0c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJhdGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVOYW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNl''@;'; put 'put ''LnN5c3NpdGUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4xMi4xIiwiQXBwIHZlcnNpb24i''@;'; put 'put ''OiJ2Ny4wLjIiLnJlcGxhY2UoInYiLCIiKSwiQnVpbGQgdGltZXN0YW1wIjpPbyhwYXJzZUludCgiMTc1MDQ5ODI0OTAwNSIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIiksIi4uLiI6Ii4uLiJ9KX0sdGhpcy5zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKSx0aGlzLmNvbW1pdFZlcj0i''@;'; put 'put ''djcuMC4yIi5yZXBsYWNlKCJ2IiwiIikrIi5nMGRiNmIyNSIsaC5ldmVudHMuc3Vic2NyaWJlKGNlPT57aWYodGhpcy5yb3V0ZVVybD10aGlzLnJvdXRlci51cmwsdHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD40KXtsZXQgYmU9dGhpcy5yb3V0ZVVybC5z''@;'; put 'put ''cGxpdCgiLyIpWzFdOyJlZGl0b3IiPT09YmU/KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6ImhvbWUiPT09YmU/KHRoaXMuZXJyVG9wPSExLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6KHRoaXMu''@;'; put 'put ''ZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSExKSxLbi5yb290UGFyYW09YmV9dHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD42JiYodGhpcy5hcHByb3ZlQWN0aXZlPSEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygiYXBwcm92ZURldCIpfHwhIXRoaXMu''@;'; put 'put ''cm91dGVVcmwuaW5jbHVkZXMoInRvYXBwcm92ZSIpKX0pLHRoaXMuc3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCksdGhpcy5zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpLHRoaXMuc3Vi''@;'; put 'put ''c2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpLHdpbmRvdy5mcmFtZUVsZW1lbnQmJih3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''ImFsbG93ZnVsbHNjcmVlbiIsIiIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJn''@;'; put 'put ''aW53aWR0aCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIpLHdpbmRvdy5mb2N1cygpKX1wYXJzZURjQWRhcHRlclNldHRpbmdzKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzYXNqcyIpO2lmKCFhKXJldHVybiB0aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlLmRlYWN0aXZhdGVBcHAoKSx2b2lkIHNldFRpbWVvdXQoKCk9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJQbGVhc2UgbWFrZSBzdXJlICdTQVNKUycgdGFnIHdpdGggY29uZmlnIGF0dHJpYnV0ZXMgaXMgYWRkZWQgdG8gaW5kZXguaHRt''@;'; put 'put ''bCIsbnVsbCwiU0FTanMgQ29uZmlnIG5vdCBmb3VuZCIpfSk7Y29uc3QgZD1mPT5hLmdldEF0dHJpYnV0ZShmKXx8dm9pZCAwLGg9e3NlcnZlclVybDpkKCJzZXJ2ZXJVcmwiKXx8IiIsYXBwTG9jOmQoImFwcExvYyIpfHwiIixzZXJ2ZXJUeXBlOmQoInNlcnZlclR5cGUiKSxsb2dpbk1lY2hh''@;'; put 'put ''bmlzbTpkKCJsb2dpbk1lY2hhbmlzbSIpfHwiIixhZG1pbkdyb3VwOmQoImFkbWluR3JvdXAiKXx8IiIsZGNQYXRoOmQoImRjUGF0aCIpfHwiIixkZWJ1ZzoidHJ1ZSI9PT1kKCJkZWJ1ZyIpfHwhMSx1c2VDb21wdXRlQXBpOnRoaXMucGFyc2VDb21wdXRlQXBpKGQoInVzZUNvbXB1dGVBcGki''@;'; put 'put ''KSksY29udGV4dE5hbWU6ZCgiY29udGV4dE5hbWUiKXx8IiIsaG90TGljZW5jZUtleTpkKCJob3RMaWNlbmNlS2V5Iil8fCIifTt0aGlzLmRjQWRhcHRlclNldHRpbmdzPWgsdGhpcy5hcHBTdG9yZVNlcnZpY2Uuc2V0RGNBZGFwdGVyU2V0dGluZ3MoaCksdGhpcy5hcHBTZXJ2aWNlLnNhc1Nl''@;'; put 'put ''cnZpY2VJbml0KCl9bGljZW5jZVByb2JsZW1EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9cGFyc2VDb21wdXRlQXBpKGEpe3JldHVybiB2b2lkIDA9PT1hfHwidW5kZWZpbmVkIj09PWF8fCJudWxsIj09PWE/bnVsbDoidHJ1ZSI9PT1hfHwhMX1zdWJzY3JpYmVUb0Rl''@;'; put 'put ''bW9MaW1pdE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25EZW1vTGltaXRNb2RhbFNob3cuc3Vic2NyaWJlKGE9Pnt0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMCxmZWF0dXJlTmFtZTphfX0pfXN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNB''@;'; put 'put ''cHBGcmVlVGllci5zdWJzY3JpYmUoYT0+e3RoaXMuZnJlZVRpZXJCYW5uZXI9YX0pLHRoaXMubGljZW5jZVNlcnZpY2UubGljZW5zZUV4cGlyZXNJbkRheXMuc3Vic2NyaWJlKGE9PnthJiZhPD0xNCYmKHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1hKX0pLHRoaXMubGljZW5jZVNlcnZpY2Uu''@;'; put 'put ''aXNBcHBPdmVyQ2FwYWNpdHkuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcE92ZXJDYXBhY2l0eT1hfSl9c3Vic2NyaWJlVG9BcHBBY3RpdmUoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnN1YnNjcmliZShhPT57dGhpcy5hcHBBY3RpdmU9YX0pfXN1YnNjcmliZVRvU2hvd0Fi''@;'; put 'put ''b3J0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblNob3dBYm9ydE1vZGFsLnN1YnNjcmliZShhPT57YS5pZD10aGlzLnNhc2pzQWJvcnRzLmxlbmd0aCsxLHRoaXMuc2FzanNBYm9ydHMucHVzaChhKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KX1zdWJzY3JpYmVUb1N0YXJ0dXBEYXRh''@;'; put 'put ''KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSEwfSl9c3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25SZXF1ZXN0c01vZGFsT3Blbi5zdWJzY3JpYmUoYT0+e3Ro''@;'; put 'put ''aXMucmVxdWVzdHNNb2RhbD0hMH0pfWNsb3NlQWJvcnRNb2RhbChhKXtsZXQgZD10aGlzLnNhc2pzQWJvcnRzLmZpbmRJbmRleChoPT5oLmlkPT09YSk7dGhpcy5zYXNqc0Fib3J0cy5zcGxpY2UoZCwxKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlU2lkZWJhcigp''@;'; put 'put ''fWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoYSl9b3BlbkxpY2VuY2luZ1BhZ2UoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL3VwZGF0ZSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpKEdlKG9MKSxHZSh1MSksR2UoTHMpLEdlKEN1KSxHZShmaCksR2UodmMpLEdlKFE4KSxHZShFcyksR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm15LWFwcCJdXSxkZWNsczoyNix2YXJzOjE3LGNvbnN0czpbWzEsIm1haW4tY29udGFp''@;'; put 'put ''bmVyIl0sWzQsIm5nSWYiXSxbMSwiYXBwLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgbWwtMTAgZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImxvZ28iLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJocmVmIiwiIyIsImNsYXNzIiwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwic3VibmF2Iiw0LCJuZ0lmIl0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFsz''@;'; put 'put ''LCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJj''@;'; put 'put ''bHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbInNpemUiLCIyMCIsInNoYXBlIiwibG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImFwcC1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC13YXJuaW5nIiwiaWQiLCJk''@;'; put 'put ''ZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtZGFuZ2VyIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwi''@;'; put 'put ''YWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC13YXJuaW5nIl0sWzEsImFsZXJ0LWl0ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQt''@;'; put 'put ''dGV4dCJdLFsiY2xhc3NlcyIsImNvbG9yLXdoaXRlIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwi''@;'; put 'put ''YWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC1kYW5nZXIiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsImNsYXNzIiwidXBkYXRlLWtleSIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwi''@;'; put 'put ''ZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIjI0Iiwic2hhcGUiLCJ0cmVlLXZpZXciXSxbImhyZWYiLCIjIiwxLCJuYXYtbGluayIsMywicm91dGVyTGluayJdLFsic3JjIiwiL1NBU1N0b3Jl''@;'; put 'put ''ZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYy1sb2dvLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28gd2l0aG91dCB0ZXh0IiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTU3Rv''@;'; put 'put ''cmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsIndpdGgtdGV4dCIsImQtbm9uZSIsImQtbWQtYmxvY2siXSxbMSwiY2xyLWljb24iLCJoZWFkZXIt''@;'; put 'put ''bG9nbyIsIm1sLTEwIl0sWzEsImhlYWRlci1uYXYiLCJkLWZsZXgiLCJkLXNtLW5vbmUiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJ0b2dnbGUgc2V0dGluZ3MgbWVudSIsMSwibmF2LWljb24iLCJjb2xvci13aGl0ZS1pIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRv''@;'; put 'put ''bS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiaGVhZGVyLW5hdiIsImQtbm9uZSIsImQtc20tZmxleCJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJM''@;'; put 'put ''aW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLCJjdXJzb3ItcG9pbnRlciIsMywicm91dGVyTGluayJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInN1Ym5hdiJdLFsxLCJuYXYiXSxbMSwibmF2LWl0''@;'; put 'put ''ZW0iXSxbMywib25Db25maXJtTW9kYWxDbGljayIsImRhdGEiLCJmb3JjZVJlbG9hZCJdLFsxLCJhcHAtbG9hZGluZyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJh''@;'; put 'put ''bHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYm''@;'; put 'put ''KGRlKDAsImRpdiIsMCksZ3QoMSxOWWUsNCwzLCJuZy1jb250YWluZXIiLDEpLGRlKDIsImhlYWRlciIsMiksZ3QoMyxWWWUsMiwwLCJkaXYiLDMpLGRlKDQsImRpdiIsNCksZ3QoNSxCWWUsMywyLCJhIiw1KSg2LGpZZSwyLDAsImEiLDEpLGhlKCksZ3QoNyxVWWUsMTMsMTAsIm5nLWNvbnRh''@;'; put 'put ''aW5lciIsMSksR3QoOCwiYXBwLWhlYWRlci1hY3Rpb25zIiksaGUoKSxndCg5LFpZZSwxMSw4LCJuYXYiLDYpKDEwLFdZZSwxLDAsImFwcC1hbGVydHMiLDEpLGRlKDExLCJhcHAtcmVxdWVzdHMtbW9kYWwiLDcpLGdpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJl''@;'; put 'put ''cXVlc3RzTW9kYWwsdil8fChoLnJlcXVlc3RzTW9kYWw9diksdn0pLGhlKCksR3QoMTIsImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCIpLGd0KDEzLFlZZSwxLDAsInJvdXRlci1vdXRsZXQiLDEpLEd0KDE0LCJhcHAtbG9naW4iKSxndCgxNSxHWWUsMSwwLCJhcHAtYWxlcnRzIiwxKSgxNiwk''@;'; put 'put ''WWUsMSwyLCJhcHAtaW5mby1tb2RhbCIsOCksZGUoMTcsImNsci1tb2RhbCIsOSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGVtb0xpbWl0Tm90aWNlLm9wZW4sdil8fChoLmRlbW9MaW1pdE5vdGljZS5vcGVuPXYpLHZ9KSxkZSgxOCwiaDMiLDEw''@;'; put 'put ''KSxMZSgxOSksR3QoMjAsImNsci1pY29uIiwxMSksaGUoKSxkZSgyMSwiZGl2IiwxMiksTGUoMjIsIiBDb250YWN0ICIpLEd0KDIzLCJjb250YWN0LWxpbmsiKSxMZSgyNCksaGUoKSgpKCksZ3QoMjUscVllLDMsMSwiZGl2IiwxMykpLDImZCYmKGZlKCksTWUoIm5nSWYiLCFoLnJvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldyIpfHxoLmlzTWFpblJvdXRlKCJob21lIikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxNZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygi''@;'; put 'put ''ZGVwbG95IikpLGZlKCksTWUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCksTWUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMiksTWUoIm5nSWYiLGgucm91''@;'; put 'put ''dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksZmUoKSxNZSgibmdJZiIsIWguZXJyVG9wKSxmZSgpLHBpKCJvcGVuZWQiLGgucmVxdWVzdHNNb2RhbCksZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLGguc3RhcnR1cERhdGFMb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixoLmVyclRvcCksZmUoKSxNZSgibmdGb3JPZiIsaC5zYXNqc0Fib3J0cyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLmRlbW9MaW1pdE5vdGljZS5vcGVuKSxNZSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJj''@;'; put 'put ''bHJNb2RhbFNpemUiLCJsZyIpLGZlKDIpLERyKCIgTG9ja2VkIEZlYXR1cmUgKCIsaC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksZmUoNSksRHIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixoLnN5c3NpdGUudmFsdWUsIikgdG8gYWN0aXZhdGUhICIpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LCFoLnN0YXJ0dXBEYXRhTG9hZGVkKSl9LGRlcGVuZGVuY2llczpbbnMsYmEscmcsYzEscHksTVdlLFZXZSx6V2UscE8sV1dlLFF4LEhsLHJzLG91LEt1LEwyLHNnLGc3LG03LFZ5LHRFLGJZZSxUWWVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdmhlKGMpe3Jl''@;'; put 'put ''dHVybiBuZXcgUW4oM2UzLCExKX1mdW5jdGlvbiBEbShjKXtzd2l0Y2goYy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHd4O2Nhc2UgMTpyZXR1cm4gY1swXTtkZWZhdWx0OnJldHVybiBuZXcgUjBlKGMpfX1mdW5jdGlvbiBiaGUoYyxsLGE9bmV3IE1hcCxkPW5ldyBNYXApe2NvbnN0IGg9''@;'; put 'put ''W10sZj1bXTtsZXQgdj0tMSxNPW51bGw7aWYobC5mb3JFYWNoKEQ9Pntjb25zdCBaPUQuZ2V0KCJvZmZzZXQiKSxyZT1aPT12LGNlPXJlJiZNfHxuZXcgTWFwO0QuZm9yRWFjaCgoYmUsRWUpPT57bGV0IEJlPUVlLHFlPWJlO2lmKCJvZmZzZXQiIT09RWUpc3dpdGNoKEJlPWMubm9ybWFsaXpl''@;'; put 'put ''UHJvcGVydHlOYW1lKEJlLGgpLHFlKXtjYXNlIiEiOnFlPWEuZ2V0KEVlKTticmVhaztjYXNlIGlnOnFlPWQuZ2V0KEVlKTticmVhaztkZWZhdWx0OnFlPWMubm9ybWFsaXplU3R5bGVWYWx1ZShFZSxCZSxxZSxoKX1jZS5zZXQoQmUscWUpfSkscmV8fGYucHVzaChjZSksTT1jZSx2PVp9KSxo''@;'; put 'put ''Lmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBfR2UoYyl7cmV0dXJuIG5ldyBRbigzNTAyLCExKX0oKTtyZXR1cm4gZn1mdW5jdGlvbiBURyhjLGwsYSxkKXtzd2l0Y2gobCl7Y2FzZSJzdGFydCI6Yy5vblN0YXJ0KCgpPT5kKGEmJkFHKGEsInN0YXJ0IixjKSkpO2JyZWFrO2Nhc2UiZG9uZSI6Yy5v''@;'; put 'put ''bkRvbmUoKCk9PmQoYSYmQUcoYSwiZG9uZSIsYykpKTticmVhaztjYXNlImRlc3Ryb3kiOmMub25EZXN0cm95KCgpPT5kKGEmJkFHKGEsImRlc3Ryb3kiLGMpKSl9fWZ1bmN0aW9uIEFHKGMsbCxhKXtjb25zdCBmPWtHKGMuZWxlbWVudCxjLnRyaWdnZXJOYW1lLGMuZnJvbVN0YXRlLGMudG9T''@;'; put 'put ''dGF0ZSxsfHxjLnBoYXNlTmFtZSxhLnRvdGFsVGltZT8/Yy50b3RhbFRpbWUsISFhLmRpc2FibGVkKSx2PWMuX2RhdGE7cmV0dXJuIG51bGwhPXYmJihmLl9kYXRhPXYpLGZ9ZnVuY3Rpb24ga0coYyxsLGEsZCxoPSIiLGY9MCx2KXtyZXR1cm57ZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsZnJv''@;'; put 'put ''bVN0YXRlOmEsdG9TdGF0ZTpkLHBoYXNlTmFtZTpoLHRvdGFsVGltZTpmLGRpc2FibGVkOiEhdn19ZnVuY3Rpb24gVGgoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO3JldHVybiBkfHxjLnNldChsLGQ9YSksZH1mdW5jdGlvbiB5aGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIjoiKTtyZXR1cm5bYy5z''@;'; put 'put ''dWJzdHJpbmcoMSxsKSxjLnNsaWNlKGwrMSldfWNvbnN0IFJHZT10eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIERHKGMpe2NvbnN0IGw9Yy5wYXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1SR2U/bnVsbDpsfWxldCBQ''@;'; put 'put ''Nz1udWxsLF9oZT0hMTtmdW5jdGlvbiB3aGUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPURHKGwpfXJldHVybiExfWZ1bmN0aW9uIENoZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9Yy5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KGwpO3JldHVybiBkP1tkXTpbXX1sZXQgSUc9KCgpPT57Y2xhc3MgY3t2YWxpZGF0ZVN0eWxlUHJvcGVydHkoYSl7cmV0dXJuIGZ1bmN0aW9uIE9HZShjKXtQN3x8KFA3PWZ1bmN0aW9uIFBHZSgpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmJvZHk6bnVsbH0oKXx8e30s''@;'; put 'put ''X2hlPSEhUDcuc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIFA3LnN0eWxlKTtsZXQgbD0hMDtyZXR1cm4gUDcuc3R5bGUmJiFmdW5jdGlvbiBMR2UoYyl7cmV0dXJuImVia2l0Ij09Yy5zdWJzdHJpbmcoMSw2KX0oYykmJihsPWMgaW4gUDcuc3R5bGUsIWwmJl9oZSYmKGw9IldlYmtpdCIr''@;'; put 'put ''Yy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStjLnNsaWNlKDEpaW4gUDcuc3R5bGUpKSxsfShhKX1tYXRjaGVzRWxlbWVudChhLGQpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChhLGQpe3JldHVybiB3aGUoYSxkKX1nZXRQYXJlbnRFbGVtZW50KGEpe3JldHVybiBERyhhKX1xdWVyeShhLGQs''@;'; put 'put ''aCl7cmV0dXJuIENoZShhLGQsaCl9Y29tcHV0ZVN0eWxlKGEsZCxoKXtyZXR1cm4gaHx8IiJ9YW5pbWF0ZShhLGQsaCxmLHYsTT1bXSxEKXtyZXR1cm4gbmV3IHd4KGgsZil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgUkd7c3RhdGlje3RoaXMuTk9PUD1uZXcgSUd9fWNsYXNzIExHe31jb25zdCBIR2U9MWUzLE9HPSJuZy1lbnRlciIsZ089Im5nLWxlYXZlIixtTz0ibmctdHJpZ2dlciIsdk89Ii5u''@;'; put 'put ''Zy10cmlnZ2VyIixNaGU9Im5nLWFuaW1hdGluZyIsUEc9Ii5uZy1hbmltYXRpbmciO2Z1bmN0aW9uIHBnKGMpe2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gYztjb25zdCBsPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWx8fGwubGVuZ3RoPDI/MDpGRyhwYXJzZUZs''@;'; put 'put ''b2F0KGxbMV0pLGxbMl0pfWZ1bmN0aW9uIEZHKGMsbCl7cmV0dXJuInMiPT09bD9jKkhHZTpjfWZ1bmN0aW9uIGJPKGMsbCxhKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9jOmZ1bmN0aW9uIFZHZShjLGwsYSl7bGV0IGgsZj0wLHY9IiI7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjKXtjb25zdCBNPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1NKXJldHVybiBsLnB1c2godmhlKCkpLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtoPUZH''@;'; put 'put ''KHBhcnNlRmxvYXQoTVsxXSksTVsyXSk7Y29uc3QgRD1NWzNdO251bGwhPUQmJihmPUZHKHBhcnNlRmxvYXQoRCksTVs0XSkpO2NvbnN0IFo9TVs1XTtaJiYodj1aKX1lbHNlIGg9YztpZighYSl7bGV0IE09ITEsRD1sLmxlbmd0aDtoPDAmJihsLnB1c2goZnVuY3Rpb24gSlllKCl7cmV0dXJu''@;'; put 'put ''IG5ldyBRbigzMTAwLCExKX0oKSksTT0hMCksZjwwJiYobC5wdXNoKGZ1bmN0aW9uIFFZZSgpe3JldHVybiBuZXcgUW4oMzEwMSwhMSl9KCkpLE09ITApLE0mJmwuc3BsaWNlKEQsMCx2aGUoKSl9cmV0dXJue2R1cmF0aW9uOmgsZGVsYXk6ZixlYXNpbmc6dn19KGMsbCxhKX1mdW5jdGlvbiBN''@;'; put 'put ''cChjLGwsYSl7bC5mb3JFYWNoKChkLGgpPT57Y29uc3QgZj1ORyhoKTthJiYhYS5oYXMoaCkmJmEuc2V0KGgsYy5zdHlsZVtmXSksYy5zdHlsZVtmXT1kfSl9ZnVuY3Rpb24gRjcoYyxsKXtsLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPU5HKGQpO2Muc3R5bGVbaF09IiJ9KX1mdW5jdGlvbiBu''@;'; put 'put ''RShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8xPT1jLmxlbmd0aD9jWzBdOmZ1bmN0aW9uIGNQZShjLGw9bnVsbCl7cmV0dXJue3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6YyxvcHRpb25zOmx9fShjKTpjfWNvbnN0IEhHPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1''@;'; put 'put ''bmN0aW9uIEVoZShjKXtsZXQgbD1bXTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1IRy5leGVjKGMpOylsLnB1c2goYVsxXSk7SEcubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gckUoYyxsLGEpe2NvbnN0IGQ9YCR7Y31gLGg9ZC5yZXBsYWNlKEhHLChmLHYpPT57''@;'; put 'put ''bGV0IE09bFt2XTtyZXR1cm4gbnVsbD09TSYmKGEucHVzaChmdW5jdGlvbiB0R2UoYyl7cmV0dXJuIG5ldyBRbigzMDAzLCExKX0oKSksTT0iIiksTS50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWNvbnN0IHpHZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gTkcoYyl7cmV0dXJuIGMu''@;'; put 'put ''cmVwbGFjZSh6R2UsKC4uLmwpPT5sWzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIEFoKGMsbCxhKXtzd2l0Y2gobC50eXBlKXtjYXNlIEFvLlRyaWdnZXI6cmV0dXJuIGMudmlzaXRUcmlnZ2VyKGwsYSk7Y2FzZSBBby5TdGF0ZTpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSBBby5U''@;'; put 'put ''cmFuc2l0aW9uOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgQW8uU2VxdWVuY2U6cmV0dXJuIGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgQW8uR3JvdXA6cmV0dXJuIGMudmlzaXRHcm91cChsLGEpO2Nhc2UgQW8uQW5pbWF0ZTpyZXR1cm4gYy52aXNpdEFuaW1hdGUobCxh''@;'; put 'put ''KTtjYXNlIEFvLktleWZyYW1lczpyZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgQW8uU3R5bGU6cmV0dXJuIGMudmlzaXRTdHlsZShsLGEpO2Nhc2UgQW8uUmVmZXJlbmNlOnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSBBby5BbmltYXRlQ2hpbGQ6cmV0dXJuIGMu''@;'; put 'put ''dmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIEFvLkFuaW1hdGVSZWY6cmV0dXJuIGMudmlzaXRBbmltYXRlUmVmKGwsYSk7Y2FzZSBBby5RdWVyeTpyZXR1cm4gYy52aXNpdFF1ZXJ5KGwsYSk7Y2FzZSBBby5TdGFnZ2VyOnJldHVybiBjLnZpc2l0U3RhZ2dlcihsLGEpO2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgZnVuY3Rpb24gbkdlKGMpe3JldHVybiBuZXcgUW4oMzAwNCwhMSl9KCl9fWZ1bmN0aW9uIFZHKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IFdHZT1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdp''@;'; put 'put ''ZHRoIiwibWF4SGVpZ2h0IiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdp''@;'; put 'put ''bkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUi''@;'; put 'put ''XSk7Y2xhc3MgVGhlIGV4dGVuZHMgTEd7bm9ybWFsaXplUHJvcGVydHlOYW1lKGwsYSl7cmV0dXJuIE5HKGwpfW5vcm1hbGl6ZVN0eWxlVmFsdWUobCxhLGQsaCl7bGV0IGY9IiI7Y29uc3Qgdj1kLnRvU3RyaW5nKCkudHJpbSgpO2lmKFdHZS5oYXMoYSkmJjAhPT1kJiYiMCIhPT1kKWlmKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZClmPSJweCI7ZWxzZXtjb25zdCBNPWQubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTtNJiYwPT1NWzFdLmxlbmd0aCYmaC5wdXNoKGZ1bmN0aW9uIHJHZShjLGwpe3JldHVybiBuZXcgUW4oMzAwNSwhMSl9KCkpfXJldHVybiB2K2Z9fWNvbnN0IHlPPSIq''@;'; put 'put ''Ijtjb25zdCBfTz1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksd089bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBBaGUoYyxsKXtjb25zdCBhPV9PLmhhcyhjKXx8d08uaGFzKGMpLGQ9X08uaGFzKGwpfHx3Ty5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgdj1jPT15T3x8Yz09aCxNPWw9''@;'; put 'put ''PXlPfHxsPT1mO3JldHVybiF2JiZhJiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYodj1oP19PLmhhcyhjKTp3Ty5oYXMoYykpLCFNJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoTT1mP19PLmhhcyhsKTp3Ty5oYXMobCkpLHYmJk19fWNvbnN0IEtHZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIs''@;'; put 'put ''ImciKTtmdW5jdGlvbiBCRyhjLGwsYSxkKXtyZXR1cm4gbmV3IHFHZShjKS5idWlsZChsLGEsZCl9Y2xhc3MgcUdle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBRR2UoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5n''@;'; put 'put ''U3RhdGUoaCksQWgodGhpcyxuRShsKSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNp''@;'; put 'put ''dFRyaWdnZXIobCxhKXtsZXQgZD1hLnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLHY9W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGlHZSgpe3JldHVybiBuZXcgUW4oMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMu''@;'; put 'put ''Zm9yRWFjaChNPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSxNLnR5cGU9PUFvLlN0YXRlKXtjb25zdCBEPU0sWj1ELm5hbWU7Wi50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChyZT0+e0QubmFtZT1yZSxmLnB1c2godGhpcy52aXNpdFN0YXRl''@;'; put 'put ''KEQsYSkpfSksRC5uYW1lPVp9ZWxzZSBpZihNLnR5cGU9PUFvLlRyYW5zaXRpb24pe2NvbnN0IEQ9dGhpcy52aXNpdFRyYW5zaXRpb24oTSxhKTtkKz1ELnF1ZXJ5Q291bnQsaCs9RC5kZXBDb3VudCx2LnB1c2goRCl9ZWxzZSBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGFHZSgpe3JldHVybiBu''@;'; put 'put ''ZXcgUW4oMzAwNywhMSl9KCkpfSkse3R5cGU6QW8uVHJpZ2dlcixuYW1lOmwubmFtZSxzdGF0ZXM6Zix0cmFuc2l0aW9uczp2LHF1ZXJ5Q291bnQ6ZCxkZXBDb3VudDpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZShsLGEpe2NvbnN0IGQ9dGhpcy52aXNpdFN0eWxlKGwuc3R5bGVzLGEpLGg9''@;'; put 'put ''bC5vcHRpb25zJiZsLm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGQuY29udGFpbnNEeW5hbWljU3R5bGVzKXtjb25zdCBmPW5ldyBTZXQsdj1ofHx7fTtkLnN0eWxlcy5mb3JFYWNoKE09PntNIGluc3RhbmNlb2YgTWFwJiZNLmZvckVhY2goRD0+e0VoZShEKS5mb3JFYWNoKFo9Pnt2Lmhhc093''@;'; put 'put ''blByb3BlcnR5KFopfHxmLmFkZChaKX0pfSl9KSxmLnNpemUmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gb0dlKGMsbCl7cmV0dXJuIG5ldyBRbigzMDA4LCExKX0oMCxmLnZhbHVlcygpKSl9cmV0dXJue3R5cGU6QW8uU3RhdGUsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFt''@;'; put 'put ''czpofTpudWxsfX12aXNpdFRyYW5zaXRpb24obCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50PTA7Y29uc3QgZD1BaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSxoPWZ1bmN0aW9uIFlHZShjLGwpe2NvbnN0IGE9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoL1xzKixc''@;'; put 'put ''cyovKS5mb3JFYWNoKGQ9PmZ1bmN0aW9uIEdHZShjLGwsYSl7aWYoIjoiPT1jWzBdKXtjb25zdCBEPWZ1bmN0aW9uICRHZShjLGwpe3N3aXRjaChjKXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6''@;'; put 'put ''cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk+cGFyc2VGbG9hdChhKTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPHBhcnNlRmxvYXQoYSk7ZGVmYXVsdDpyZXR1cm4gbC5wdXNoKGZ1bmN0aW9uIG1HZShjKXtyZXR1cm4gbmV3IFFuKDMwMTYsITEpfSgpKSwi''@;'; put 'put ''KiA9PiAqIn19KGMsYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEQpcmV0dXJuIHZvaWQgbC5wdXNoKEQpO2M9RH1jb25zdCBkPWMubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWR8fGQubGVuZ3RoPDQpcmV0dXJuIGEucHVzaChmdW5j''@;'; put 'put ''dGlvbiBnR2UoYyl7cmV0dXJuIG5ldyBRbigzMDE1LCExKX0oKSksbDtjb25zdCBoPWRbMV0sZj1kWzJdLHY9ZFszXTtsLnB1c2goQWhlKGgsdikpLCI8Ij09ZlswXSYmKGghPXlPfHx2IT15TykmJmwucHVzaChBaGUodixoKSl9KGQsYSxsKSk6YS5wdXNoKGMpLGF9KGwuZXhwcixhLmVycm9y''@;'; put 'put ''cyk7cmV0dXJue3R5cGU6QW8uVHJhbnNpdGlvbixtYXRjaGVyczpoLGFuaW1hdGlvbjpkLHF1ZXJ5Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291bnQsb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6QW8uU2VxdWVuY2Usc3Rl''@;'; put 'put ''cHM6bC5zdGVwcy5tYXAoZD0+QWgodGhpcyxkLGEpKSxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0R3JvdXAobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWU7bGV0IGg9MDtjb25zdCBmPWwuc3RlcHMubWFwKHY9PnthLmN1cnJlbnRUaW1lPWQ7Y29uc3QgTT1BaCh0aGlzLHYsYSk7cmV0''@;'; put 'put ''dXJuIGg9TWF0aC5tYXgoaCxhLmN1cnJlbnRUaW1lKSxNfSk7cmV0dXJuIGEuY3VycmVudFRpbWU9aCx7dHlwZTpBby5Hcm91cCxzdGVwczpmLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1mdW5jdGlvbiB0JGUoYyxsKXtpZihjLmhhc093blByb3Bl''@;'; put 'put ''cnR5KCJkdXJhdGlvbiIpKXJldHVybiBjO2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gakcoYk8oYyxsKS5kdXJhdGlvbiwwLCIiKTtjb25zdCBhPWM7aWYoYS5zcGxpdCgvXHMrLykuc29tZShmPT4ieyI9PWYuY2hhckF0KDApJiYieyI9PWYuY2hhckF0KDEpKSl7Y29uc3QgZj1qRygw''@;'; put 'put ''LDAsIiIpO3JldHVybiBmLmR5bmFtaWM9ITAsZi5zdHJWYWx1ZT1hLGZ9Y29uc3QgaD1iTyhhLGwpO3JldHVybiBqRyhoLmR1cmF0aW9uLGguZGVsYXksaC5lYXNpbmcpfShsLnRpbWluZ3MsYS5lcnJvcnMpO2EuY3VycmVudEFuaW1hdGVUaW1pbmdzPWQ7bGV0IGgsZj1sLnN0eWxlcz9sLnN0''@;'; put 'put ''eWxlczp1cyh7fSk7aWYoZi50eXBlPT1Bby5LZXlmcmFtZXMpaD10aGlzLnZpc2l0S2V5ZnJhbWVzKGYsYSk7ZWxzZXtsZXQgdj1sLnN0eWxlcyxNPSExO2lmKCF2KXtNPSEwO2NvbnN0IFo9e307ZC5lYXNpbmcmJihaLmVhc2luZz1kLmVhc2luZyksdj11cyhaKX1hLmN1cnJlbnRUaW1lKz1k''@;'; put 'put ''LmR1cmF0aW9uK2QuZGVsYXk7Y29uc3QgRD10aGlzLnZpc2l0U3R5bGUodixhKTtELmlzRW1wdHlTdGVwPU0saD1EfXJldHVybiBhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOkFvLkFuaW1hdGUsdGltaW5nczpkLHN0eWxlOmgsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKGws''@;'; put 'put ''YSl7Y29uc3QgZD10aGlzLl9tYWtlU3R5bGVBc3QobCxhKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChkLGEpLGR9X21ha2VTdHlsZUFzdChsLGEpe2NvbnN0IGQ9W10saD1BcnJheS5pc0FycmF5KGwuc3R5bGVzKT9sLnN0eWxlczpbbC5zdHlsZXNdO2ZvcihsZXQgTSBvZiBoKSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgTT9NPT09aWc/ZC5wdXNoKE0pOmEuZXJyb3JzLnB1c2gobmV3IFFuKDMwMDIsITEpKTpkLnB1c2gobmV3IE1hcChPYmplY3QuZW50cmllcyhNKSkpO2xldCBmPSExLHY9bnVsbDtyZXR1cm4gZC5mb3JFYWNoKE09PntpZihNIGluc3RhbmNlb2YgTWFwJiYoTS5oYXMo''@;'; put 'put ''ImVhc2luZyIpJiYodj1NLmdldCgiZWFzaW5nIiksTS5kZWxldGUoImVhc2luZyIpKSwhZikpZm9yKGxldCBEIG9mIE0udmFsdWVzKCkpaWYoRC50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6QW8uU3R5bGUsc3R5bGVzOmQsZWFzaW5nOnYsb2Zmc2V0''@;'; put 'put ''Omwub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpmLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBoPWEuY3VycmVudFRpbWUsZj1hLmN1cnJlbnRUaW1lO2QmJmY+MCYmKGYtPWQuZHVyYXRpb24rZC5k''@;'; put 'put ''ZWxheSksbC5zdHlsZXMuZm9yRWFjaCh2PT57InN0cmluZyIhPXR5cGVvZiB2JiZ2LmZvckVhY2goKE0sRCk9Pntjb25zdCBaPWEuY29sbGVjdGVkU3R5bGVzLmdldChhLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxyZT1aLmdldChEKTtsZXQgY2U9ITA7cmUmJihmIT1oJiZmPj1yZS5zdGFydFRp''@;'; put 'put ''bWUmJmg8PXJlLmVuZFRpbWUmJihhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGxHZShjLGwsYSxkLGgpe3JldHVybiBuZXcgUW4oMzAxMCwhMSl9KCkpLGNlPSExKSxmPXJlLnN0YXJ0VGltZSksY2UmJlouc2V0KEQse3N0YXJ0VGltZTpmLGVuZFRpbWU6aH0pLGEub3B0aW9ucyYmZnVuY3Rpb24g''@;'; put 'put ''akdlKGMsbCxhKXtjb25zdCBkPWwucGFyYW1zfHx7fSxoPUVoZShjKTtoLmxlbmd0aCYmaC5mb3JFYWNoKGY9PntkLmhhc093blByb3BlcnR5KGYpfHxhLnB1c2goZnVuY3Rpb24gZUdlKGMpe3JldHVybiBuZXcgUW4oMzAwMSwhMSl9KCkpfSl9KE0sYS5vcHRpb25zLGEuZXJyb3JzKX0pfSl9''@;'; put 'put ''dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPXt0eXBlOkFvLktleWZyYW1lcyxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gY0dlKCl7cmV0dXJuIG5ldyBRbigzMDExLCExKX0oKSksZDts''@;'; put 'put ''ZXQgZj0wO2NvbnN0IHY9W107bGV0IE09ITEsRD0hMSxaPTA7Y29uc3QgcmU9bC5zdGVwcy5tYXAocHQ9Pntjb25zdCBkdD10aGlzLl9tYWtlU3R5bGVBc3QocHQsYSk7bGV0IEp0PW51bGwhPWR0Lm9mZnNldD9kdC5vZmZzZXQ6ZnVuY3Rpb24gZSRlKGMpe2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''YylyZXR1cm4gbnVsbDtsZXQgbD1udWxsO2lmKEFycmF5LmlzQXJyYXkoYykpYy5mb3JFYWNoKGE9PntpZihhIGluc3RhbmNlb2YgTWFwJiZhLmhhcygib2Zmc2V0Iikpe2NvbnN0IGQ9YTtsPXBhcnNlRmxvYXQoZC5nZXQoIm9mZnNldCIpKSxkLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBp''@;'; put 'put ''ZihjIGluc3RhbmNlb2YgTWFwJiZjLmhhcygib2Zmc2V0Iikpe2NvbnN0IGE9YztsPXBhcnNlRmxvYXQoYS5nZXQoIm9mZnNldCIpKSxhLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIGx9KGR0LnN0eWxlcyksdm49MDtyZXR1cm4gbnVsbCE9SnQmJihmKyssdm49ZHQub2Zmc2V0PUp0KSxEPUR8''@;'; put 'put ''fHZuPDB8fHZuPjEsTT1NfHx2bjxaLFo9dm4sdi5wdXNoKHZuKSxkdH0pO0QmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gdUdlKCl7cmV0dXJuIG5ldyBRbigzMDEyLCExKX0oKSksTSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBkR2UoKXtyZXR1cm4gbmV3IFFuKDMyMDAsITEpfSgpKTtjb25z''@;'; put 'put ''dCBjZT1sLnN0ZXBzLmxlbmd0aDtsZXQgYmU9MDtmPjAmJmY8Y2U/YS5lcnJvcnMucHVzaChmdW5jdGlvbiBoR2UoKXtyZXR1cm4gbmV3IFFuKDMyMDIsITEpfSgpKTowPT1mJiYoYmU9MS8oY2UtMSkpO2NvbnN0IEVlPWNlLTEsQmU9YS5jdXJyZW50VGltZSxxZT1hLmN1cnJlbnRBbmltYXRl''@;'; put 'put ''VGltaW5ncyxydD1xZS5kdXJhdGlvbjtyZXR1cm4gcmUuZm9yRWFjaCgocHQsZHQpPT57Y29uc3QgSnQ9YmU+MD9kdD09RWU/MTpiZSpkdDp2W2R0XSx2bj1KdCpydDthLmN1cnJlbnRUaW1lPUJlK3FlLmRlbGF5K3ZuLHFlLmR1cmF0aW9uPXZuLHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QocHQs''@;'; put 'put ''YSkscHQub2Zmc2V0PUp0LGQuc3R5bGVzLnB1c2gocHQpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOkFvLlJlZmVyZW5jZSxhbmltYXRpb246QWgodGhpcyxuRShsLmFuaW1hdGlvbiksYSksb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZChsLGEp''@;'; put 'put ''e3JldHVybiBhLmRlcENvdW50Kysse3R5cGU6QW8uQW5pbWF0ZUNoaWxkLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6QW8uQW5pbWF0ZVJlZixhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25z''@;'; put 'put ''Okg3KGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZix2XT1mdW5jdGlvbiBYR2UoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyov''@;'; put 'put ''KS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBsJiYoYz1jLnJlcGxhY2UoS0dlLCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLHZPKS5yZXBsYWNlKC9AXHcrL2csYT0+dk8rIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxQRyksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3Vy''@;'; put 'put ''cmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsiICIrZjpmLFRoKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgTT1BaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVy''@;'; put 'put ''eVNlbGVjdG9yPWQse3R5cGU6QW8uUXVlcnksc2VsZWN0b3I6ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjp2LGFuaW1hdGlvbjpNLG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dl''@;'; put 'put ''cihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGZHZSgpe3JldHVybiBuZXcgUW4oMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06Yk8obC50aW1pbmdzLGEuZXJyb3JzLCEw''@;'; put 'put ''KTtyZXR1cm57dHlwZTpBby5TdGFnZ2VyLGFuaW1hdGlvbjpBaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSx0aW1pbmdzOmQsb3B0aW9uczpudWxsfX19Y2xhc3MgUUdle2NvbnN0cnVjdG9yKGwpe3RoaXMuZXJyb3JzPWwsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMu''@;'; put 'put ''Y3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0''@;'; put 'put ''aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19ZnVuY3Rpb24gSDcoYyl7cmV0dXJuIGM/KGM9ey4uLmN9KS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiBKR2UoYyl7cmV0dXJuIGM/ey4uLmN9Om51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1''@;'; put 'put ''bmN0aW9uIGpHKGMsbCxhKXtyZXR1cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2luZzphfX1mdW5jdGlvbiB6RyhjLGwsYSxkLGgsZix2PW51bGwsTT0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRp''@;'; put 'put ''b246aCxkZWxheTpmLHRvdGFsVGltZTpoK2YsZWFzaW5nOnYsc3ViVGltZWxpbmU6TX19Y2xhc3MgQ097Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQobCl7cmV0dXJuIHRoaXMuX21hcC5nZXQobCl8fFtdfWFwcGVuZChsLGEpe2xldCBkPXRoaXMuX21hcC5nZXQobCk7ZHx8''@;'; put 'put ''dGhpcy5fbWFwLnNldChsLGQ9W10pLGQucHVzaCguLi5hKX1oYXMobCl7cmV0dXJuIHRoaXMuX21hcC5oYXMobCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgaSRlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxvJGU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9u''@;'; put 'put ''IFVHKGMsbCxhLGQsaCxmPW5ldyBNYXAsdj1uZXcgTWFwLE0sRCxaPVtdKXtyZXR1cm4obmV3IHMkZSkuYnVpbGRLZXlmcmFtZXMoYyxsLGEsZCxoLGYsdixNLEQsWil9Y2xhc3MgcyRle2J1aWxkS2V5ZnJhbWVzKGwsYSxkLGgsZix2LE0sRCxaLHJlPVtdKXtaPVp8fG5ldyBDTztjb25zdCBj''@;'; put 'put ''ZT1uZXcgWkcobCxhLFosaCxmLHJlLFtdKTtjZS5vcHRpb25zPUQ7Y29uc3QgYmU9RC5kZWxheT9wZyhELmRlbGF5KTowO2NlLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGJlKSxjZS5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFt2XSxudWxsLGNlLmVycm9ycyxEKSxBaCh0aGlz''@;'; put 'put ''LGQsY2UpO2NvbnN0IEVlPWNlLnRpbWVsaW5lcy5maWx0ZXIoQmU9PkJlLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKEVlLmxlbmd0aCYmTS5zaXplKXtsZXQgQmU7Zm9yKGxldCBxZT1FZS5sZW5ndGgtMTtxZT49MDtxZS0tKXtjb25zdCBydD1FZVtxZV07aWYocnQuZWxlbWVudD09PWEpe0Jl''@;'; put 'put ''PXJ0O2JyZWFrfX1CZSYmIUJlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJkJlLnNldFN0eWxlcyhbTV0sbnVsbCxjZS5lcnJvcnMsRCl9cmV0dXJuIEVlLmxlbmd0aD9FZS5tYXAoQmU9PkJlLmJ1aWxkS2V5ZnJhbWVzKCkpOlt6RyhhLFtdLFtdLFtdLDAsYmUsIiIsITEpXX12aXNpdFRy''@;'; put 'put ''aWdnZXIobCxhKXt9dmlzaXRTdGF0ZShsLGEpe312aXNpdFRyYW5zaXRpb24obCxhKXt9dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtjb25zdCBkPWEuc3ViSW5zdHJ1Y3Rpb25zLmdldChhLmVsZW1lbnQpO2lmKGQpe2NvbnN0IGg9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyksZj1hLmN1''@;'; put 'put ''cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSx2PXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGQsaCxoLm9wdGlvbnMpO2YhPXYmJmEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpfWEucHJldmlvdXNOb2RlPWx9dmlzaXRBbmltYXRlUmVmKGwsYSl7Y29uc3QgZD1hLmNyZWF0ZVN1YkNv''@;'; put 'put ''bnRleHQobC5vcHRpb25zKTtkLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFtsLm9wdGlvbnMsbC5hbmltYXRpb24ub3B0aW9uc10sYSxkKSx0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGQpLGEudHJhbnNmb3JtSW50b05l''@;'; put 'put ''d1RpbWVsaW5lKGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxhLnByZXZpb3VzTm9kZT1sfV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhsLGEsZCl7Zm9yKGNvbnN0IGggb2YgbCl7Y29uc3QgZj1oPy5kZWxheTtpZihmKXtjb25zdCB2PSJudW1iZXIiPT10eXBlb2YgZj9mOnBnKHJF''@;'; put 'put ''KGYsaD8ucGFyYW1zPz97fSxhLmVycm9ycykpO2QuZGVsYXlOZXh0U3RlcCh2KX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyhsLGEsZCl7bGV0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3Qgdj1udWxsIT1kLmR1cmF0aW9uP3BnKGQuZHVyYXRpb24pOm51bGwsTT1udWxs''@;'; put 'put ''IT1kLmRlbGF5P3BnKGQuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT12JiZsLmZvckVhY2goRD0+e2NvbnN0IFo9YS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoRCx2LE0pO2Y9TWF0aC5tYXgoZixaLmR1cmF0aW9uK1ouZGVsYXkpfSksZn12aXNpdFJlZmVyZW5jZShsLGEpe2EudXBkYXRl''@;'; put 'put ''T3B0aW9ucyhsLm9wdGlvbnMsITApLEFoKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bH12aXNpdFNlcXVlbmNlKGwsYSl7Y29uc3QgZD1hLnN1YkNvbnRleHRDb3VudDtsZXQgaD1hO2NvbnN0IGY9bC5vcHRpb25zO2lmKGYmJihmLnBhcmFtc3x8Zi5kZWxheSkmJihoPWEu''@;'; put 'put ''Y3JlYXRlU3ViQ29udGV4dChmKSxoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPWYuZGVsYXkpKXtoLnByZXZpb3VzTm9kZS50eXBlPT1Bby5TdHlsZSYmKGguY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGgucHJldmlvdXNOb2RlPVNPKTtjb25zdCB2''@;'; put 'put ''PXBnKGYuZGVsYXkpO2guZGVsYXlOZXh0U3RlcCh2KX1sLnN0ZXBzLmxlbmd0aCYmKGwuc3RlcHMuZm9yRWFjaCh2PT5BaCh0aGlzLHYsaCkpLGguY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGguc3ViQ29udGV4dENvdW50PmQmJmgudHJhbnNmb3JtSW50b05ld1Rp''@;'; put 'put ''bWVsaW5lKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9W107bGV0IGg9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgZj1sLm9wdGlvbnMmJmwub3B0aW9ucy5kZWxheT9wZyhsLm9wdGlvbnMuZGVsYXkpOjA7bC5zdGVwcy5mb3JFYWNoKHY9''@;'; put 'put ''Pntjb25zdCBNPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2YmJk0uZGVsYXlOZXh0U3RlcChmKSxBaCh0aGlzLHYsTSksaD1NYXRoLm1heChoLE0uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxkLnB1c2goTS5jdXJyZW50VGltZWxpbmUpfSksZC5mb3JFYWNoKHY9PmEuY3Vy''@;'; put 'put ''cmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModikpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgpLGEucHJldmlvdXNOb2RlPWx9X3Zpc2l0VGltaW5nKGwsYSl7aWYobC5keW5hbWljKXtjb25zdCBkPWwuc3RyVmFsdWU7cmV0dXJuIGJPKGEucGFyYW1zP3JF''@;'; put 'put ''KGQsYS5wYXJhbXMsYS5lcnJvcnMpOmQsYS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjpsLmR1cmF0aW9uLGRlbGF5OmwuZGVsYXksZWFzaW5nOmwuZWFzaW5nfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKGwudGlt''@;'; put 'put ''aW5ncyxhKSxoPWEuY3VycmVudFRpbWVsaW5lO2QuZGVsYXkmJihhLmluY3JlbWVudFRpbWUoZC5kZWxheSksaC5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7Y29uc3QgZj1sLnN0eWxlO2YudHlwZT09QW8uS2V5ZnJhbWVzP3RoaXMudmlzaXRLZXlmcmFtZXMoZixhKTooYS5pbmNyZW1lbnRU''@;'; put 'put ''aW1lKGQuZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShmLGEpLGguYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsYS5wcmV2aW91c05vZGU9bH12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZSxoPWEuY3VycmVudEFu''@;'; put 'put ''aW1hdGVUaW1pbmdzOyFoJiZkLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmZC5mb3J3YXJkRnJhbWUoKTtjb25zdCBmPWgmJmguZWFzaW5nfHxsLmVhc2luZztsLmlzRW1wdHlTdGVwP2QuYXBwbHlFbXB0eVN0ZXAoZik6ZC5zZXRTdHlsZXMobC5zdHlsZXMsZixhLmVycm9ycyxhLm9w''@;'; put 'put ''dGlvbnMpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLGg9YS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sZj1kLmR1cmF0aW9uLE09YS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO00uZWFzaW5n''@;'; put 'put ''PWQuZWFzaW5nLGwuc3R5bGVzLmZvckVhY2goRD0+e00uZm9yd2FyZFRpbWUoKEQub2Zmc2V0fHwwKSpmKSxNLnNldFN0eWxlcyhELnN0eWxlcyxELmVhc2luZyxhLmVycm9ycyxhLm9wdGlvbnMpLE0uYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRp''@;'; put 'put ''bWVsaW5lQ29sbGVjdGVkU3R5bGVzKE0pLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgrZiksYS5wcmV2aW91c05vZGU9bH12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxoPWwub3B0aW9uc3x8e30sZj1oLmRlbGF5P3BnKGguZGVsYXkp''@;'; put 'put ''OjA7ZiYmKGEucHJldmlvdXNOb2RlLnR5cGU9PT1Bby5TdHlsZXx8MD09ZCYmYS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGEucHJldmlvdXNOb2RlPVNPKTtsZXQgdj1kO2Nv''@;'; put 'put ''bnN0IE09YS5pbnZva2VRdWVyeShsLnNlbGVjdG9yLGwub3JpZ2luYWxTZWxlY3RvcixsLmxpbWl0LGwuaW5jbHVkZVNlbGYsISFoLm9wdGlvbmFsLGEuZXJyb3JzKTthLmN1cnJlbnRRdWVyeVRvdGFsPU0ubGVuZ3RoO2xldCBEPW51bGw7TS5mb3JFYWNoKChaLHJlKT0+e2EuY3VycmVudFF1''@;'; put 'put ''ZXJ5SW5kZXg9cmU7Y29uc3QgY2U9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyxaKTtmJiZjZS5kZWxheU5leHRTdGVwKGYpLFo9PT1hLmVsZW1lbnQmJihEPWNlLmN1cnJlbnRUaW1lbGluZSksQWgodGhpcyxsLmFuaW1hdGlvbixjZSksY2UuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5''@;'; put 'put ''bGVzVG9LZXlmcmFtZSgpLHY9TWF0aC5tYXgodixjZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksYS5jdXJyZW50UXVlcnlJbmRleD0wLGEuY3VycmVudFF1ZXJ5VG90YWw9MCxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KSxEJiYoYS5jdXJyZW50VGltZWxpbmUubWVyZ2VU''@;'; put 'put ''aW1lbGluZUNvbGxlY3RlZFN0eWxlcyhEKSxhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdFN0YWdnZXIobCxhKXtjb25zdCBkPWEucGFyZW50Q29udGV4dCxoPWEuY3VycmVudFRpbWVsaW5lLGY9bC50aW1pbmdzLHY9TWF0''@;'; put 'put ''aC5hYnMoZi5kdXJhdGlvbiksTT12KihhLmN1cnJlbnRRdWVyeVRvdGFsLTEpO2xldCBEPXYqYS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goZi5kdXJhdGlvbjwwPyJyZXZlcnNlIjpmLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpEPU0tRDticmVhaztjYXNlImZ1bGwiOkQ9ZC5jdXJyZW50U3Rh''@;'; put 'put ''Z2dlclRpbWV9Y29uc3QgcmU9YS5jdXJyZW50VGltZWxpbmU7RCYmcmUuZGVsYXlOZXh0U3RlcChEKTtjb25zdCBjZT1yZS5jdXJyZW50VGltZTtBaCh0aGlzLGwuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWwsZC5jdXJyZW50U3RhZ2dlclRpbWU9aC5jdXJyZW50VGltZS1jZSsoaC5z''@;'; put 'put ''dGFydFRpbWUtZC5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19Y29uc3QgU089e307Y2xhc3MgWkd7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN1Ykluc3RydWN0aW9ucz1kLHRoaXMuX2VudGVyQ2xhc3NOYW1lPWgs''@;'; put 'put ''dGhpcy5fbGVhdmVDbGFzc05hbWU9Zix0aGlzLmVycm9ycz12LHRoaXMudGltZWxpbmVzPU0sdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1TTyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9u''@;'; put 'put ''cz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9RHx8bmV3IE1PKHRoaXMuX2RyaXZlcixhLDApLE0ucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBh''@;'; put 'put ''cmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnMobCxhKXtpZighbClyZXR1cm47Y29uc3QgZD1sO2xldCBoPXRoaXMub3B0aW9ucztudWxsIT1kLmR1cmF0aW9uJiYoaC5kdXJhdGlvbj1wZyhkLmR1cmF0aW9uKSksbnVsbCE9ZC5kZWxheSYmKGguZGVsYXk9''@;'; put 'put ''cGcoZC5kZWxheSkpO2NvbnN0IGY9ZC5wYXJhbXM7aWYoZil7bGV0IHY9aC5wYXJhbXM7dnx8KHY9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57KCFhfHwhdi5oYXNPd25Qcm9wZXJ0eShNKSkmJih2W01dPXJFKGZbTV0sdix0aGlzLmVycm9ycykp''@;'; put 'put ''fSl9fV9jb3B5T3B0aW9ucygpe2NvbnN0IGw9e307aWYodGhpcy5vcHRpb25zKXtjb25zdCBhPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoYSl7Y29uc3QgZD1sLnBhcmFtcz17fTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntkW2hdPWFbaF19KX19cmV0dXJuIGx9Y3JlYXRlU3ViQ29udGV4''@;'; put 'put ''dChsPW51bGwsYSxkKXtjb25zdCBoPWF8fHRoaXMuZWxlbWVudCxmPW5ldyBaRyh0aGlzLl9kcml2ZXIsaCx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRU''@;'; put 'put ''aW1lbGluZS5mb3JrKGgsZHx8MCkpO3JldHVybiBmLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxmLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxmLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxmLnVwZGF0ZU9wdGlvbnMobCksZi5j''@;'; put 'put ''dXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LGYuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxmLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGZ9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGwpe3JldHVybiB0''@;'; put 'put ''aGlzLnByZXZpb3VzTm9kZT1TTyx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCxsKSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRv''@;'; put 'put ''VGltZWxpbmUobCxhLGQpe2NvbnN0IGg9e2R1cmF0aW9uOmE/P2wuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGQ/PzApK2wuZGVsYXksZWFzaW5nOiIifSxmPW5ldyBsJGUodGhpcy5fZHJpdmVyLGwuZWxlbWVudCxsLmtleWZyYW1lcyxsLnByZVN0''@;'; put 'put ''eWxlUHJvcHMsbC5wb3N0U3R5bGVQcm9wcyxoLGwuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKGYpLGh9aW5jcmVtZW50VGltZShsKXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlv''@;'; put 'put ''bitsKX1kZWxheU5leHRTdGVwKGwpe2w+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChsKX1pbnZva2VRdWVyeShsLGEsZCxoLGYsdil7bGV0IE09W107aWYoaCYmTS5wdXNoKHRoaXMuZWxlbWVudCksbC5sZW5ndGg+MCl7bD0obD1sLnJlcGxhY2UoaSRlLCIuIit0aGlz''@;'; put 'put ''Ll9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UobyRlLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IFo9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCxsLDEhPWQpOzAhPT1kJiYoWj1kPDA/Wi5zbGljZShaLmxlbmd0aCtkLFoubGVuZ3RoKTpaLnNsaWNlKDAsZCkpLE0ucHVz''@;'; put 'put ''aCguLi5aKX1yZXR1cm4hZiYmMD09TS5sZW5ndGgmJnYucHVzaChmdW5jdGlvbiBwR2UoYyl7cmV0dXJuIG5ldyBRbigzMDE0LCExKX0oKSksTX19Y2xhc3MgTU97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9ZCx0aGlz''@;'; put 'put ''Ll9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9aCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5lYXNpbmc9bnVsbCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1t''@;'; put 'put ''YXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1''@;'; put 'put ''cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVT''@;'; put 'put ''dHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5z''@;'; put 'put ''aXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1l''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChsKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGlt''@;'; put 'put ''ZStsKSxhJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9bH1mb3JrKGwsYSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IE1PKHRoaXMuX2RyaXZlcixsLGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5l''@;'; put 'put ''U3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1''@;'; put 'put ''cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRU''@;'; put 'put ''aW1lKGwpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1sLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZShsLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhp''@;'; put 'put ''cy5fc3R5bGVTdW1tYXJ5LnNldChsLHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChsKXtsJiZ0''@;'; put 'put ''aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixsKTtmb3IobGV0W2EsZF1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoYSxkfHxpZyksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGlnKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5''@;'; put 'put ''ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyhsLGEsZCxoKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixhKTtjb25zdCBmPWgmJmgucGFyYW1zfHx7fSx2PWZ1bmN0aW9uIGMkZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZDtyZXR1cm4gYy5m''@;'; put 'put ''b3JFYWNoKGg9PntpZigiKiI9PT1oKXtkPz89bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQpYS5zZXQoZixpZyl9ZWxzZSBmb3IobGV0W2Ysdl1vZiBoKWEuc2V0KGYsdil9KSxhfShsLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtmb3IobGV0W00sRF1vZiB2KXtjb25zdCBaPXJFKEQsZixk''@;'; put 'put ''KTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChNLFopLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKE0pfHx0aGlzLl9iYWNrRmlsbC5zZXQoTSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoTSk/P2lnKSx0aGlzLl91cGRhdGVTdHlsZShNLFopfX1hcHBseVN0eWxlc1RvS2V5''@;'; put 'put ''ZnJhbWUoKXswIT10aGlzLl9wZW5kaW5nU3R5bGVzLnNpemUmJih0aGlzLl9wZW5kaW5nU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSx0aGlzLl9wZW5kaW5nU3R5bGVzLmNsZWFyKCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5mb3JF''@;'; put 'put ''YWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhcyhhKXx8dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSkpfXNuYXBzaG90Q3VycmVudFN0eWxlcygpe2ZvcihsZXRbbCxhXW9mIHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpdGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQo''@;'; put 'put ''bCxhKSx0aGlzLl91cGRhdGVTdHlsZShsLGEpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSlsLnB1c2goYSk7cmV0''@;'; put 'put ''dXJuIGx9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKXtsLl9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fc3R5bGVTdW1tYXJ5LmdldChkKTsoIWh8fGEudGltZT5oLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShkLGEudmFsdWUpfSl9YnVpbGRLZXlm''@;'; put 'put ''cmFtZXMoKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO2NvbnN0IGw9bmV3IFNldCxhPW5ldyBTZXQsZD0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uO2xldCBoPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKChNLEQpPT57Y29uc3QgWj1uZXcgTWFw''@;'; put 'put ''KFsuLi50aGlzLl9iYWNrRmlsbCwuLi5NXSk7Wi5mb3JFYWNoKChyZSxjZSk9PnsiISI9PT1yZT9sLmFkZChjZSk6cmU9PT1pZyYmYS5hZGQoY2UpfSksZHx8Wi5zZXQoIm9mZnNldCIsRC90aGlzLmR1cmF0aW9uKSxoLnB1c2goWil9KTtjb25zdCBmPVsuLi5sLnZhbHVlcygpXSx2PVsuLi5h''@;'; put 'put ''LnZhbHVlcygpXTtpZihkKXtjb25zdCBNPWhbMF0sRD1uZXcgTWFwKE0pO00uc2V0KCJvZmZzZXQiLDApLEQuc2V0KCJvZmZzZXQiLDEpLGg9W00sRF19cmV0dXJuIHpHKHRoaXMuZWxlbWVudCxoLGYsdix0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xh''@;'; put 'put ''c3MgbCRlIGV4dGVuZHMgTU97Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTT0hMSl7c3VwZXIobCxhLHYuZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPU0sdGhpcy50''@;'; put 'put ''aW1pbmdzPXtkdXJhdGlvbjp2LmR1cmF0aW9uLGRlbGF5OnYuZGVsYXksZWFzaW5nOnYuZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9u''@;'; put 'put ''OmQsZWFzaW5nOmh9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSx2PWQrYSxNPWEvdixEPW5ldyBNYXAobFswXSk7RC5zZXQoIm9mZnNldCIsMCksZi5wdXNoKEQpO2NvbnN0IFo9bmV3IE1hcChsWzBdKTtaLnNldCgib2Zmc2V0''@;'; put 'put ''IixJaGUoTSkpLGYucHVzaChaKTtjb25zdCByZT1sLmxlbmd0aC0xO2ZvcihsZXQgY2U9MTtjZTw9cmU7Y2UrKyl7bGV0IGJlPW5ldyBNYXAobFtjZV0pO2NvbnN0IEVlPWJlLmdldCgib2Zmc2V0Iik7YmUuc2V0KCJvZmZzZXQiLEloZSgoYStFZSpkKS92KSksZi5wdXNoKGJlKX1kPXYsYT0w''@;'; put 'put ''LGg9IiIsbD1mfXJldHVybiB6Ryh0aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIEloZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1mdW5jdGlvbiBS''@;'; put 'put ''aGUoYyxsLGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSl7cmV0dXJue3R5cGU6MCxlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxlczp2LHRpbWVsaW5lczpNLHF1ZXJpZWRFbGVtZW50''@;'; put 'put ''czpELHByZVN0eWxlUHJvcHM6Wixwb3N0U3R5bGVQcm9wczpyZSx0b3RhbFRpbWU6Y2UsZXJyb3JzOmJlfX1jb25zdCBXRz17fTtjbGFzcyBMaGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGwsYSxk''@;'; put 'put ''LGgpe3JldHVybiBmdW5jdGlvbiB1JGUoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwmJiho''@;'; put 'put ''PXRoaXMuX3N0YXRlU3R5bGVzLmdldChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsdixNLEQsWixyZSl7Y29uc3QgY2U9W10sYmU9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fFdHLEJlPXRo''@;'; put 'put ''aXMuYnVpbGRTdHlsZXMoZCxNJiZNLnBhcmFtc3x8V0csY2UpLHFlPUQmJkQucGFyYW1zfHxXRyxydD10aGlzLmJ1aWxkU3R5bGVzKGgscWUsY2UpLHB0PW5ldyBTZXQsZHQ9bmV3IE1hcCxKdD1uZXcgTWFwLHZuPSJ2b2lkIj09PWgsQ249e3BhcmFtczpPaGUocWUsYmUpLGRlbGF5OnRoaXMu''@;'; put 'put ''YXN0Lm9wdGlvbnM/LmRlbGF5fSx0bj1yZT9bXTpVRyhsLGEsdGhpcy5hc3QuYW5pbWF0aW9uLGYsdixCZSxydCxDbixaLGNlKTtsZXQgTW49MDtyZXR1cm4gdG4uZm9yRWFjaChDcj0+e01uPU1hdGgubWF4KENyLmR1cmF0aW9uK0NyLmRlbGF5LE1uKX0pLGNlLmxlbmd0aD9SaGUoYSx0aGlz''@;'; put 'put ''Ll90cmlnZ2VyTmFtZSxkLGgsdm4sQmUscnQsW10sW10sZHQsSnQsTW4sY2UpOih0bi5mb3JFYWNoKENyPT57Y29uc3QgR3I9Q3IuZWxlbWVudCxtcj1UaChkdCxHcixuZXcgU2V0KTtDci5wcmVTdHlsZVByb3BzLmZvckVhY2goYWk9Pm1yLmFkZChhaSkpO2NvbnN0IEduPVRoKEp0LEdyLG5l''@;'; put 'put ''dyBTZXQpO0NyLnBvc3RTdHlsZVByb3BzLmZvckVhY2goYWk9PkduLmFkZChhaSkpLEdyIT09YSYmcHQuYWRkKEdyKX0pLFJoZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCx2bixCZSxydCx0bixbLi4ucHQudmFsdWVzKCldLGR0LEp0LE1uKSl9fWZ1bmN0aW9uIE9oZShjLGwpe2NvbnN0IGE9''@;'; put 'put ''ey4uLmx9O3JldHVybiBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbZCxoXSk9PntudWxsIT1oJiYoYVtkXT1oKX0pLGF9Y2xhc3MgZCRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVz''@;'; put 'put ''KGwsYSl7Y29uc3QgZD1uZXcgTWFwLGg9T2hlKGwsdGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKCh2LE0pPT57diYmKHY9ckUodixoLGEpKTtjb25zdCBEPXRoaXMubm9ybWFsaXpl''@;'; put 'put ''ci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoTSxhKTt2PXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKE0sRCx2LGEpLGQuc2V0KE0sdil9KX0pLGR9fWNsYXNzIGYkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQs''@;'; put 'put ''dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0ZXMuc2V0KGgubmFtZSxuZXcgZCRlKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxQaGUodGhpcy5zdGF0ZXMsInRy''@;'; put 'put ''dWUiLCIxIiksUGhlKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBMaGUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBwJGUoYyxsLGEp''@;'; put 'put ''e3JldHVybiBuZXcgTGhlKGMse3R5cGU6QW8uVHJhbnNpdGlvbixhbmltYXRpb246e3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHYsTSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVz''@;'; put 'put ''KX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHY9PnYubWF0Y2gobCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBQaGUoYyxsLGEpe2MuaGFzKGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdldChhKSl9Y29uc3QgZyRlPW5ldyBDTztjbGFzcyBtJGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhLGQpe3RoaXMuYm9keU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fYW5pbWF0aW9ucz1uZXcgTWFwLHRoaXMuX3BsYXllcnNCeUlkPW5ldyBNYXAsdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPUJHKHRoaXMu''@;'; put 'put ''X2RyaXZlcixhLGQsW10pO2lmKGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHdHZShjKXtyZXR1cm4gbmV3IFFuKDM1MDMsITEpfSgpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KGwsZil9X2J1aWxkUGxheWVyKGwsYSxkKXtjb25zdCBoPWwuZWxlbWVudCxmPWJoZSh0aGlzLl9ub3JtYWxpemVyLGwu''@;'; put 'put ''a2V5ZnJhbWVzLGEsZCk7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGgsZixsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsW10sITApfWNyZWF0ZShsLGEsZD17fSl7Y29uc3QgaD1bXSxmPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGwpO2xldCB2O2NvbnN0IE09bmV3IE1hcDtpZihmPyh2''@;'; put 'put ''PVVHKHRoaXMuX2RyaXZlcixhLGYsT0csZ08sbmV3IE1hcCxuZXcgTWFwLGQsZyRlLGgpLHYuZm9yRWFjaChyZT0+e2NvbnN0IGNlPVRoKE0scmUuZWxlbWVudCxuZXcgTWFwKTtyZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGJlPT5jZS5zZXQoYmUsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rp''@;'; put 'put ''b24gQ0dlKCl7cmV0dXJuIG5ldyBRbigzMzAwLCExKX0oKSksdj1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gU0dlKGMpe3JldHVybiBuZXcgUW4oMzUwNCwhMSl9KCk7TS5mb3JFYWNoKChyZSxjZSk9PntyZS5mb3JFYWNoKChiZSxFZSk9PntyZS5zZXQoRWUsdGhpcy5fZHJpdmVyLmNv''@;'; put 'put ''bXB1dGVTdHlsZShjZSxFZSxpZykpfSl9KTtjb25zdCBaPURtKHYubWFwKHJlPT57Y29uc3QgY2U9TS5nZXQocmUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHJlLG5ldyBNYXAsY2UpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxaKSxaLm9uRGVzdHJveSgo''@;'; put 'put ''KT0+dGhpcy5kZXN0cm95KGwpKSx0aGlzLnBsYXllcnMucHVzaChaKSxafWRlc3Ryb3kobCl7Y29uc3QgYT10aGlzLl9nZXRQbGF5ZXIobCk7YS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKGwpO2NvbnN0IGQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoYSk7ZD49MCYmdGhpcy5w''@;'; put 'put ''bGF5ZXJzLnNwbGljZShkLDEpfV9nZXRQbGF5ZXIobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXJzQnlJZC5nZXQobCk7aWYoIWEpdGhyb3cgZnVuY3Rpb24gTUdlKGMpe3JldHVybiBuZXcgUW4oMzMwMSwhMSl9KCk7cmV0dXJuIGF9bGlzdGVuKGwsYSxkLGgpe2NvbnN0IGY9a0coYSwiIiwiIiwi''@;'; put 'put ''Iik7cmV0dXJuIFRHKHRoaXMuX2dldFBsYXllcihsKSxkLGYsaCksKCk9Pnt9fWNvbW1hbmQobCxhLGQsaCl7aWYoInJlZ2lzdGVyIj09ZClyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKGwsaFswXSk7aWYoImNyZWF0ZSI9PWQpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUobCxhLGhbMF18fHt9''@;'; put 'put ''KTtjb25zdCBmPXRoaXMuX2dldFBsYXllcihsKTtzd2l0Y2goZCl7Y2FzZSJwbGF5IjpmLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjpmLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6Zi5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6Zi5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2gi''@;'; put 'put ''OmYuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjpmLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjpmLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoaFswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KGwpfX19Y29uc3QgRmhlPSJuZy1hbmltYXRlLXF1ZXVlZCIsWUc9''@;'; put 'put ''Im5nLWFuaW1hdGUtZGlzYWJsZWQiLHckZT1bXSxIaGU9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LEMkZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yTW92ZTohMSxzZXRGb3JSZW1v''@;'; put 'put ''dmFsOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMH0sZTM9Il9fbmdfcmVtb3ZlZCI7Y2xhc3MgR0d7Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWNvbnN0cnVjdG9yKGwsYT0iIil7dGhpcy5uYW1lc3BhY2VJZD1hO2NvbnN0IGQ9bCYm''@;'; put 'put ''bC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uIEUkZShjKXtyZXR1cm4gYz8/bnVsbH0oZD9sLnZhbHVlOmwpLGQpe2NvbnN0e3ZhbHVlOmYsLi4udn09bDt0aGlzLm9wdGlvbnM9dn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1z''@;'; put 'put ''fHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyhsKXtjb25zdCBhPWwucGFyYW1zO2lmKGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntudWxsPT1kW2hdJiYoZFtoXT1hW2hdKX0pfX19Y29uc3QgaUU9InZvaWQi''@;'; put 'put ''LCRHPW5ldyBHRyhpRSk7Y2xhc3MgUyRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmlkPWwsdGhpcy5ob3N0RWxlbWVudD1hLHRoaXMuX2VuZ2luZT1kLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9''@;'; put 'put ''bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIitsLEYyKGEsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKGwsYSxkLGgpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoYSkpdGhyb3cgZnVuY3Rpb24geEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzMzAyLCExKX0oKTtpZihudWxs''@;'; put 'put ''PT1kfHwwPT1kLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBFR2UoYyl7cmV0dXJuIG5ldyBRbigzMzAzLCExKX0oKTtpZighZnVuY3Rpb24gVCRlKGMpe3JldHVybiJzdGFydCI9PWN8fCJkb25lIj09Y30oZCkpdGhyb3cgZnVuY3Rpb24gVEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNDAwLCExKX0o''@;'; put 'put ''KTtjb25zdCBmPVRoKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsbCxbXSksdj17bmFtZTphLHBoYXNlOmQsY2FsbGJhY2s6aH07Zi5wdXNoKHYpO2NvbnN0IE09VGgodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxsLG5ldyBNYXApO3JldHVybiBNLmhhcyhhKXx8KEYyKGwsbU8pLEYyKGws''@;'; put 'put ''bU8rIi0iK2EpLE0uc2V0KGEsJEcpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57Y29uc3QgRD1mLmluZGV4T2Yodik7RD49MCYmZi5zcGxpY2UoRCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoYSl8fE0uZGVsZXRlKGEpfSl9fXJlZ2lzdGVyKGwsYSl7cmV0dXJuIXRoaXMuX3Ry''@;'; put 'put ''aWdnZXJzLmhhcyhsKSYmKHRoaXMuX3RyaWdnZXJzLnNldChsLGEpLCEwKX1fZ2V0VHJpZ2dlcihsKXtjb25zdCBhPXRoaXMuX3RyaWdnZXJzLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBBR2UoYyl7cmV0dXJuIG5ldyBRbigzNDAxLCExKX0oKTtyZXR1cm4gYX10cmlnZ2VyKGwsYSxk''@;'; put 'put ''LGg9ITApe2NvbnN0IGY9dGhpcy5fZ2V0VHJpZ2dlcihhKSx2PW5ldyBLRyh0aGlzLmlkLGEsbCk7bGV0IE09dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7TXx8KEYyKGwsbU8pLEYyKGwsbU8rIi0iK2EpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KGwsTT1u''@;'; put 'put ''ZXcgTWFwKSk7bGV0IEQ9TS5nZXQoYSk7Y29uc3QgWj1uZXcgR0coZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZEJiZaLmFic29yYk9wdGlvbnMoRC5vcHRpb25zKSxNLnNldChhLFopLER8fChEPSRHKSxaLnZhbHVlIT09aUUmJkQudmFsdWU9PT1aLnZh''@;'; put 'put ''bHVlKXtpZighZnVuY3Rpb24gRCRlKGMsbCl7Y29uc3QgYT1PYmplY3Qua2V5cyhjKSxkPU9iamVjdC5rZXlzKGwpO2lmKGEubGVuZ3RoIT1kLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2lmKCFsLmhhc093blByb3BlcnR5KGYpfHxj''@;'; put 'put ''W2ZdIT09bFtmXSlyZXR1cm4hMX1yZXR1cm4hMH0oRC5wYXJhbXMsWi5wYXJhbXMpKXtjb25zdCBxZT1bXSxydD1mLm1hdGNoU3R5bGVzKEQudmFsdWUsRC5wYXJhbXMscWUpLHB0PWYubWF0Y2hTdHlsZXMoWi52YWx1ZSxaLnBhcmFtcyxxZSk7cWUubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBv''@;'; put 'put ''cnRFcnJvcihxZSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntGNyhsLHJ0KSxNcChsLHB0KX0pfXJldHVybn1jb25zdCBiZT1UaCh0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCxsLFtdKTtiZS5mb3JFYWNoKHFlPT57cWUubmFtZXNwYWNlSWQ9PXRoaXMuaWQmJnFlLnRyaWdn''@;'; put 'put ''ZXJOYW1lPT1hJiZxZS5xdWV1ZWQmJnFlLmRlc3Ryb3koKX0pO2xldCBFZT1mLm1hdGNoVHJhbnNpdGlvbihELnZhbHVlLFoudmFsdWUsbCxaLnBhcmFtcyksQmU9ITE7aWYoIUVlKXtpZighaClyZXR1cm47RWU9Zi5mYWxsYmFja1RyYW5zaXRpb24sQmU9ITB9cmV0dXJuIHRoaXMuX2VuZ2lu''@;'; put 'put ''ZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOkVlLGZyb21TdGF0ZTpELHRvU3RhdGU6WixwbGF5ZXI6dixpc0ZhbGxiYWNrVHJhbnNpdGlvbjpCZX0pLEJlfHwoRjIobCxGaGUpLHYub25TdGFydCgoKT0+''@;'; put 'put ''e2lfKGwsRmhlKX0pKSx2Lm9uRG9uZSgoKT0+e2xldCBxZT10aGlzLnBsYXllcnMuaW5kZXhPZih2KTtxZT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShxZSwxKTtjb25zdCBydD10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYocnQpe2xldCBwdD1ydC5pbmRleE9mKHYp''@;'; put 'put ''O3B0Pj0wJiZydC5zcGxpY2UocHQsMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2godiksYmUucHVzaCh2KSx2fWRlcmVnaXN0ZXIobCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKGwpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChhPT5hLmRlbGV0ZShsKSksdGhpcy5fZWxlbWVu''@;'; put 'put ''dExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoZCxhLmZpbHRlcihoPT5oLm5hbWUhPWwpKX0pfWNsZWFyRWxlbWVudENhY2hlKGwpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKGwpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMu''@;'; put 'put ''ZGVsZXRlKGwpO2NvbnN0IGE9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2EmJihhLmZvckVhY2goZD0+ZC5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZShsKSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KGwsdk8sITApO2QuZm9yRWFjaChoPT57aWYoaFtlM10pcmV0dXJuO2NvbnN0IGY9dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChoKTtmLnNpemU/Zi5mb3JFYWNoKHY9PnYudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGgs''@;'; put 'put ''YSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCl9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5kLmZvckVhY2goaD0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbihsLGEsZCxoKXtjb25zdCBmPXRoaXMu''@;'; put 'put ''X2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpLHY9bmV3IE1hcDtpZihmKXtjb25zdCBNPVtdO2lmKGYuZm9yRWFjaCgoRCxaKT0+e2lmKHYuc2V0KFosRC52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKFopKXtjb25zdCByZT10aGlzLnRyaWdnZXIobCxaLGlFLGgpO3JlJiZNLnB1c2go''@;'; put 'put ''cmUpfX0pLE0ubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCxsLCEwLGEsdiksZCYmRG0oTSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZShsKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlz''@;'; put 'put ''dGVuZXJzKGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQobCksZD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihhJiZkKXtjb25zdCBoPW5ldyBTZXQ7YS5mb3JFYWNoKGY9Pntjb25zdCB2PWYubmFtZTtpZihoLmhhcyh2KSlyZXR1cm47aC5hZGQo''@;'; put 'put ''dik7Y29uc3QgRD10aGlzLl90cmlnZ2Vycy5nZXQodikuZmFsbGJhY2tUcmFuc2l0aW9uLFo9ZC5nZXQodil8fCRHLHJlPW5ldyBHRyhpRSksY2U9bmV3IEtHKHRoaXMuaWQsdixsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDps''@;'; put 'put ''LHRyaWdnZXJOYW1lOnYsdHJhbnNpdGlvbjpELGZyb21TdGF0ZTpaLHRvU3RhdGU6cmUscGxheWVyOmNlLGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lO2lmKGwuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJl''@;'; put 'put ''bW92YWxGb3JJbm5lclRyaWdnZXJzKGwsYSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLCEwKSlyZXR1cm47bGV0IGg9ITE7aWYoZC50b3RhbEFuaW1hdGlvbnMpe2NvbnN0IGY9ZC5wbGF5ZXJzLmxlbmd0aD9kLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTpbXTtpZihm''@;'; put 'put ''JiZmLmxlbmd0aCloPSEwO2Vsc2V7bGV0IHY9bDtmb3IoO3Y9di5wYXJlbnROb2RlOylpZihkLnN0YXRlc0J5RWxlbWVudC5nZXQodikpe2g9ITA7YnJlYWt9fX1pZih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyhsKSxoKWQubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5p''@;'; put 'put ''ZCxsLCExLGEpO2Vsc2V7Y29uc3QgZj1sW2UzXTsoIWZ8fGY9PT1IaGUpJiYoZC5hZnRlckZsdXNoKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGwpKSxkLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCksZC5fb25SZW1vdmFsQ29tcGxldGUobCxhKSl9fWluc2VydE5vZGUobCxhKXtGMihs''@;'; put 'put ''LHRoaXMuX2hvc3RDbGFzc05hbWUpfWRyYWluUXVldWVkVHJhbnNpdGlvbnMobCl7Y29uc3QgYT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChkPT57Y29uc3QgaD1kLnBsYXllcjtpZihoLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgZj1kLmVsZW1lbnQsdj10aGlzLl9lbGVtZW50TGlz''@;'; put 'put ''dGVuZXJzLmdldChmKTt2JiZ2LmZvckVhY2goTT0+e2lmKE0ubmFtZT09ZC50cmlnZ2VyTmFtZSl7Y29uc3QgRD1rRyhmLGQudHJpZ2dlck5hbWUsZC5mcm9tU3RhdGUudmFsdWUsZC50b1N0YXRlLnZhbHVlKTtELl9kYXRhPWwsVEcoZC5wbGF5ZXIsTS5waGFzZSxELE0uY2FsbGJhY2spfX0p''@;'; put 'put ''LGgubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2guZGVzdHJveSgpfSk6YS5wdXNoKGQpfSksdGhpcy5fcXVldWU9W10sYS5zb3J0KChkLGgpPT57Y29uc3QgZj1kLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHY9aC50cmFuc2l0aW9uLmFzdC5kZXBDb3Vu''@;'; put 'put ''dDtyZXR1cm4gMD09Znx8MD09dj9mLXY6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoZC5lbGVtZW50LGguZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kobCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goYT0+YS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRy''@;'; put 'put ''aWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsbCl9fWNsYXNzIE0kZXtfb25SZW1vdmFsQ29tcGxldGUobCxhKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKGwsYSl9Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMu''@;'; put 'put ''c2NoZWR1bGVyPWgsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxl''@;'; put 'put ''ZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFj''@;'; put 'put ''ZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT57fX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25h''@;'; put 'put ''bWVzcGFjZUxpc3QuZm9yRWFjaChhPT57YS5wbGF5ZXJzLmZvckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGwsYSl7Y29uc3QgZD1uZXcgUyRlKGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVt''@;'; put 'put ''ZW50KHRoaXMuYm9keU5vZGUsYSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxh''@;'; put 'put ''KXtjb25zdCBkPXRoaXMuX25hbWVzcGFjZUxpc3QsaD10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCB2PSExLE09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO007KXtjb25zdCBEPWguZ2V0KE0pO2lmKEQpe2NvbnN0IFo9ZC5p''@;'; put 'put ''bmRleE9mKEQpO2Quc3BsaWNlKForMSwwLGwpLHY9ITA7YnJlYWt9TT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KE0pfXZ8fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNwYWNlTG9va3Vw''@;'; put 'put ''W2xdO3JldHVybiBkfHwoZD10aGlzLmNyZWF0ZU5hbWVzcGFjZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7bCYmKHRoaXMu''@;'; put 'put ''YWZ0ZXJGbHVzaCgoKT0+e30pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVzcGFjZUxpc3Qu''@;'; put 'put ''aW5kZXhPZihkKTtoPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShoLDEpLGQuZGVzdHJveShhKSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFtZXNwYWNlc0J5''@;'; put 'put ''RWxlbWVudChsKXtjb25zdCBhPW5ldyBTZXQsZD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRkKGYpfXJldHVy''@;'; put 'put ''biBhfXRyaWdnZXIobCxhLGQsaCl7aWYoeE8oYSkpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCF4TyhhKSlyZXR1cm47Y29uc3QgZj1hW2UzXTtpZihmJiZmLnNl''@;'; put 'put ''dEZvclJlbW92YWwpe2Yuc2V0Rm9yUmVtb3ZhbD0hMSxmLnNldEZvck1vdmU9ITA7Y29uc3Qgdj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTt2Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHYsMSl9aWYobCl7Y29uc3Qgdj10aGlzLl9mZXRj''@;'; put 'put ''aE5hbWVzcGFjZShsKTt2JiZ2Lmluc2VydE5vZGUoYSxkKX1oJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3RoaXMuZGlzYWJs''@;'; put 'put ''ZWROb2Rlcy5oYXMobCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKGwpLEYyKGwsWUcpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxpXyhsLFlHKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoeE8oYSkpe3RoaXMuc2NoZWR1bGVyPy5u''@;'; put 'put ''b3RpZnkoKTtjb25zdCBoPWw/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk6bnVsbDtoP2gucmVtb3ZlTm9kZShhLGQpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLCExLGQpO2NvbnN0IGY9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoYSk7ZiYmZi5pZCE9PWwmJmYucmVt''@;'; put 'put ''b3ZlTm9kZShhLGQpfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoYSxkKX1tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsZCxoLGYpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGEpLGFbZTNdPXtuYW1lc3BhY2VJZDpsLHNldEZvclJlbW92YWw6aCxoYXNBbmltYXRpb246''@;'; put 'put ''ZCxyZW1vdmVkQmVmb3JlUXVlcmllZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOmZ9fWxpc3RlbihsLGEsZCxoLGYpe3JldHVybiB4TyhhKT90aGlzLl9mZXRjaE5hbWVzcGFjZShsKS5saXN0ZW4oYSxkLGgsZik6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKGwsYSxkLGgsZil7cmV0dXJu''@;'; put 'put ''IGwudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcixsLmVsZW1lbnQsbC5mcm9tU3RhdGUudmFsdWUsbC50b1N0YXRlLnZhbHVlLGQsaCxsLmZyb21TdGF0ZS5vcHRpb25zLGwudG9TdGF0ZS5vcHRpb25zLGEsZil9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKXtsZXQgYT10aGlzLmRyaXZl''@;'; put 'put ''ci5xdWVyeShsLHZPLCEwKTthLmZvckVhY2goZD0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZCkpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGE9dGhpcy5kcml2ZXIucXVlcnkobCxQRywhMCksYS5mb3JFYWNoKGQ9PnRoaXMuZmluaXNo''@;'; put 'put ''QWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChkKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PntkLnF1ZXVlZD9kLm1hcmtlZEZvckRlc3Ryb3k9ITA6ZC5kZXN0''@;'; put 'put ''cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PmQuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKGw9Pntp''@;'; put 'put ''Zih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBEbSh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+bCgpKTtsKCl9KX1wcm9jZXNzTGVhdmVOb2RlKGwpe2NvbnN0IGE9bFtlM107aWYoYSYmYS5zZXRGb3JSZW1vdmFsKXtpZihsW2UzXT1IaGUsYS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95''@;'; put 'put ''SW5uZXJBbmltYXRpb25zKGwpO2NvbnN0IGQ9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYS5uYW1lc3BhY2VJZCk7ZCYmZC5jbGVhckVsZW1lbnRDYWNoZShsKX10aGlzLl9vblJlbW92YWxDb21wbGV0ZShsLGEuc2V0Rm9yUmVtb3ZhbCl9bC5jbGFzc0xpc3Q/LmNvbnRhaW5zKFlHKSYmdGhpcy5t''@;'; put 'put ''YXJrRWxlbWVudEFzRGlzYWJsZWQobCwhMSksdGhpcy5kcml2ZXIucXVlcnkobCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGQ9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChkLCExKX0pfWZsdXNoKGw9LTEpe2xldCBhPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRz''@;'; put 'put ''LnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKChkLGgpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGgpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClm''@;'; put 'put ''b3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7ZCsrKUYyKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tkXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRo''@;'; put 'put ''aXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXtjb25zdCBkPVtdO3RyeXthPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhkLGwpfWZpbmFsbHl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspZFtoXSgpfX1lbHNlIGZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1l''@;'; put 'put ''bnRzLmxlbmd0aDtkKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tkXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxl''@;'; put 'put ''bmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZD0+ZCgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCBkPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sYS5sZW5ndGg/RG0oYSkub25Eb25lKCgpPT57ZC5mb3JF''@;'; put 'put ''YWNoKGg9PmgoKSl9KTpkLmZvckVhY2goaD0+aCgpKX19cmVwb3J0RXJyb3IobCl7dGhyb3cgZnVuY3Rpb24ga0dlKGMpe3JldHVybiBuZXcgUW4oMzQwMiwhMSl9KCl9X2ZsdXNoQW5pbWF0aW9ucyhsLGEpe2NvbnN0IGQ9bmV3IENPLGg9W10sZj1uZXcgTWFwLHY9W10sTT1uZXcgTWFwLEQ9''@;'; put 'put ''bmV3IE1hcCxaPW5ldyBNYXAscmU9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChKbj0+e3JlLmFkZChKbik7Y29uc3QgSXI9dGhpcy5kcml2ZXIucXVlcnkoSm4sIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgJHI9MDskcjxJci5sZW5ndGg7JHIrKylyZS5hZGQo''@;'; put 'put ''SXJbJHJdKX0pO2NvbnN0IGNlPXRoaXMuYm9keU5vZGUsYmU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLEVlPUJoZShiZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLEJlPW5ldyBNYXA7bGV0IHFlPTA7RWUuZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9''@;'; put 'put ''T0crcWUrKztCZS5zZXQoSXIsJHIpLEpuLmZvckVhY2god2k9PkYyKHdpLCRyKSl9KTtjb25zdCBydD1bXSxwdD1uZXcgU2V0LGR0PW5ldyBTZXQ7Zm9yKGxldCBKbj0wO0puPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7Sm4rKyl7Y29uc3QgSXI9dGhpcy5jb2xsZWN0ZWRM''@;'; put 'put ''ZWF2ZUVsZW1lbnRzW0puXSwkcj1JcltlM107JHImJiRyLnNldEZvclJlbW92YWwmJihydC5wdXNoKElyKSxwdC5hZGQoSXIpLCRyLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShJciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKHdpPT5wdC5hZGQod2kpKTpkdC5hZGQo''@;'; put 'put ''SXIpKX1jb25zdCBKdD1uZXcgTWFwLHZuPUJoZShiZSxBcnJheS5mcm9tKHB0KSk7dm4uZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9Z08rcWUrKztKdC5zZXQoSXIsJHIpLEpuLmZvckVhY2god2k9PkYyKHdpLCRyKSl9KSxsLnB1c2goKCk9PntFZS5mb3JFYWNoKChKbixJcik9Pntjb25z''@;'; put 'put ''dCAkcj1CZS5nZXQoSXIpO0puLmZvckVhY2god2k9PmlfKHdpLCRyKSl9KSx2bi5mb3JFYWNoKChKbixJcik9Pntjb25zdCAkcj1KdC5nZXQoSXIpO0puLmZvckVhY2god2k9PmlfKHdpLCRyKSl9KSxydC5mb3JFYWNoKEpuPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEpuKX0pfSk7Y29uc3Qg''@;'; put 'put ''Q249W10sdG49W107Zm9yKGxldCBKbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO0puPj0wO0puLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtKbl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKCRyPT57Y29uc3Qgd2k9JHIucGxheWVyLGVhPSRyLmVsZW1lbnQ7aWYoQ24u''@;'; put 'put ''cHVzaCh3aSksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgYXI9ZWFbZTNdO2lmKGFyJiZhci5zZXRGb3JNb3ZlKXtpZihhci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZhci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0''@;'; put 'put ''IEhyPWFyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KCRyLnRyaWdnZXJOYW1lKSxxcj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoJHIuZWxlbWVudCk7aWYocXImJnFyLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0IG9uPXFyLmdldCgkci50cmlnZ2VyTmFtZSk7b24udmFsdWU9SHIs''@;'; put 'put ''cXIuc2V0KCRyLnRyaWdnZXJOYW1lLG9uKX19cmV0dXJuIHZvaWQgd2kuZGVzdHJveSgpfX1jb25zdCBmYT0hY2V8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQoY2UsZWEpLHZ0PUp0LmdldChlYSksTnQ9QmUuZ2V0KGVhKSxIdD10aGlzLl9idWlsZEluc3RydWN0aW9uKCRyLGQsTnQs''@;'; put 'put ''dnQsZmEpO2lmKEh0LmVycm9ycyYmSHQuZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCB0bi5wdXNoKEh0KTtpZihmYSlyZXR1cm4gd2kub25TdGFydCgoKT0+RjcoZWEsSHQuZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+TXAoZWEsSHQudG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7''@;'; put 'put ''aWYoJHIuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIHdpLm9uU3RhcnQoKCk9PkY3KGVhLEh0LmZyb21TdHlsZXMpKSx3aS5vbkRlc3Ryb3koKCk9Pk1wKGVhLEh0LnRvU3R5bGVzKSksdm9pZCBoLnB1c2god2kpO2NvbnN0IEhuPVtdO0h0LnRpbWVsaW5lcy5mb3JFYWNoKGFyPT57YXIu''@;'; put 'put ''c3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhhci5lbGVtZW50KXx8SG4ucHVzaChhcil9KSxIdC50aW1lbGluZXM9SG4sZC5hcHBlbmQoZWEsSHQudGltZWxpbmVzKSx2LnB1c2goe2luc3RydWN0aW9uOkh0LHBsYXllcjp3aSxlbGVtZW50OmVhfSks''@;'; put 'put ''SHQucXVlcmllZEVsZW1lbnRzLmZvckVhY2goYXI9PlRoKE0sYXIsW10pLnB1c2god2kpKSxIdC5wcmVTdHlsZVByb3BzLmZvckVhY2goKGFyLEhyKT0+e2lmKGFyLnNpemUpe2xldCBxcj1ELmdldChIcik7cXJ8fEQuc2V0KEhyLHFyPW5ldyBTZXQpLGFyLmZvckVhY2goKG9uLHluKT0+cXIu''@;'; put 'put ''YWRkKHluKSl9fSksSHQucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoYXIsSHIpPT57bGV0IHFyPVouZ2V0KEhyKTtxcnx8Wi5zZXQoSHIscXI9bmV3IFNldCksYXIuZm9yRWFjaCgob24seW4pPT5xci5hZGQoeW4pKX0pfSk7aWYodG4ubGVuZ3RoKXtjb25zdCBKbj1bXTt0bi5mb3JFYWNoKEly''@;'; put 'put ''PT57Sm4ucHVzaChmdW5jdGlvbiBER2UoYyxsKXtyZXR1cm4gbmV3IFFuKDM1MDUsITEpfSgpKX0pLENuLmZvckVhY2goSXI9PklyLmRlc3Ryb3koKSksdGhpcy5yZXBvcnRFcnJvcihKbil9Y29uc3QgTW49bmV3IE1hcCxDcj1uZXcgTWFwO3YuZm9yRWFjaChKbj0+e2NvbnN0IElyPUpuLmVs''@;'; put 'put ''ZW1lbnQ7ZC5oYXMoSXIpJiYoQ3Iuc2V0KElyLElyKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKbi5wbGF5ZXIubmFtZXNwYWNlSWQsSm4uaW5zdHJ1Y3Rpb24sTW4pKX0pLGguZm9yRWFjaChKbj0+e2NvbnN0IElyPUpuLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKEly''@;'; put 'put ''LCExLEpuLm5hbWVzcGFjZUlkLEpuLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2god2k9PntUaChNbixJcixbXSkucHVzaCh3aSksd2kuZGVzdHJveSgpfSl9KTtjb25zdCBHcj1ydC5maWx0ZXIoSm49PnpoZShKbixELFopKSxtcj1uZXcgTWFwO1ZoZShtcix0aGlzLmRyaXZlcixkdCxaLGln''@;'; put 'put ''KS5mb3JFYWNoKEpuPT57emhlKEpuLEQsWikmJkdyLnB1c2goSm4pfSk7Y29uc3QgYWk9bmV3IE1hcDtFZS5mb3JFYWNoKChKbixJcik9PntWaGUoYWksdGhpcy5kcml2ZXIsbmV3IFNldChKbiksRCwiISIpfSksR3IuZm9yRWFjaChKbj0+e2NvbnN0IElyPW1yLmdldChKbiksJHI9YWkuZ2V0''@;'; put 'put ''KEpuKTttci5zZXQoSm4sbmV3IE1hcChbLi4uSXI/LmVudHJpZXMoKT8/W10sLi4uJHI/LmVudHJpZXMoKT8/W11dKSl9KTtjb25zdCBfaT1bXSxPbj1bXSx6cj17fTt2LmZvckVhY2goSm49Pntjb25zdHtlbGVtZW50OklyLHBsYXllcjokcixpbnN0cnVjdGlvbjp3aX09Sm47aWYoZC5oYXMo''@;'; put 'put ''SXIpKXtpZihyZS5oYXMoSXIpKXJldHVybiAkci5vbkRlc3Ryb3koKCk9Pk1wKElyLHdpLnRvU3R5bGVzKSksJHIuZGlzYWJsZWQ9ITAsJHIub3ZlcnJpZGVUb3RhbFRpbWUod2kudG90YWxUaW1lKSx2b2lkIGgucHVzaCgkcik7bGV0IGVhPXpyO2lmKENyLnNpemU+MSl7bGV0IHZ0PUlyO2Nv''@;'; put 'put ''bnN0IE50PVtdO2Zvcig7dnQ9dnQucGFyZW50Tm9kZTspe2NvbnN0IEh0PUNyLmdldCh2dCk7aWYoSHQpe2VhPUh0O2JyZWFrfU50LnB1c2godnQpfU50LmZvckVhY2goSHQ9PkNyLnNldChIdCxlYSkpfWNvbnN0IGZhPXRoaXMuX2J1aWxkQW5pbWF0aW9uKCRyLm5hbWVzcGFjZUlkLHdpLE1u''@;'; put 'put ''LGYsYWksbXIpO2lmKCRyLnNldFJlYWxQbGF5ZXIoZmEpLGVhPT09enIpX2kucHVzaCgkcik7ZWxzZXtjb25zdCB2dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGVhKTt2dCYmdnQubGVuZ3RoJiYoJHIucGFyZW50UGxheWVyPURtKHZ0KSksaC5wdXNoKCRyKX19ZWxzZSBGNyhJcix3aS5m''@;'; put 'put ''cm9tU3R5bGVzKSwkci5vbkRlc3Ryb3koKCk9Pk1wKElyLHdpLnRvU3R5bGVzKSksT24ucHVzaCgkcikscmUuaGFzKElyKSYmaC5wdXNoKCRyKX0pLE9uLmZvckVhY2goSm49Pntjb25zdCBJcj1mLmdldChKbi5lbGVtZW50KTtpZihJciYmSXIubGVuZ3RoKXtjb25zdCAkcj1EbShJcik7Sm4u''@;'; put 'put ''c2V0UmVhbFBsYXllcigkcil9fSksaC5mb3JFYWNoKEpuPT57Sm4ucGFyZW50UGxheWVyP0puLnN5bmNQbGF5ZXJFdmVudHMoSm4ucGFyZW50UGxheWVyKTpKbi5kZXN0cm95KCl9KTtmb3IobGV0IEpuPTA7Sm48cnQubGVuZ3RoO0puKyspe2NvbnN0IElyPXJ0W0puXSwkcj1JcltlM107aWYo''@;'; put 'put ''aV8oSXIsZ08pLCRyJiYkci5oYXNBbmltYXRpb24pY29udGludWU7bGV0IHdpPVtdO2lmKE0uc2l6ZSl7bGV0IGZhPU0uZ2V0KElyKTtmYSYmZmEubGVuZ3RoJiZ3aS5wdXNoKC4uLmZhKTtsZXQgdnQ9dGhpcy5kcml2ZXIucXVlcnkoSXIsUEcsITApO2ZvcihsZXQgTnQ9MDtOdDx2dC5sZW5n''@;'; put 'put ''dGg7TnQrKyl7bGV0IEh0PU0uZ2V0KHZ0W050XSk7SHQmJkh0Lmxlbmd0aCYmd2kucHVzaCguLi5IdCl9fWNvbnN0IGVhPXdpLmZpbHRlcihmYT0+IWZhLmRlc3Ryb3llZCk7ZWEubGVuZ3RoP0EkZSh0aGlzLElyLGVhKTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoSXIpfXJldHVybiBydC5sZW5n''@;'; put 'put ''dGg9MCxfaS5mb3JFYWNoKEpuPT57dGhpcy5wbGF5ZXJzLnB1c2goSm4pLEpuLm9uRG9uZSgoKT0+e0puLmRlc3Ryb3koKTtjb25zdCBJcj10aGlzLnBsYXllcnMuaW5kZXhPZihKbik7dGhpcy5wbGF5ZXJzLnNwbGljZShJciwxKX0pLEpuLnBsYXkoKX0pLF9pfWFmdGVyRmx1c2gobCl7dGhp''@;'; put 'put ''cy5fZmx1c2hGbnMucHVzaChsKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2gobCl9X2dldFByZXZpb3VzUGxheWVycyhsLGEsZCxoLGYpe2xldCB2PVtdO2lmKGEpe2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7''@;'; put 'put ''TSYmKHY9TSl9ZWxzZXtjb25zdCBNPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYoTSl7Y29uc3QgRD0hZnx8Zj09aUU7TS5mb3JFYWNoKFo9PntaLnF1ZXVlZHx8IUQmJloudHJpZ2dlck5hbWUhPWh8fHYucHVzaChaKX0pfX1yZXR1cm4oZHx8aCkmJih2PXYuZmlsdGVyKE09PiEo''@;'; put 'put ''ZCYmZCE9TS5uYW1lc3BhY2VJZHx8aCYmaCE9TS50cmlnZ2VyTmFtZSkpKSx2fV9iZWZvcmVBbmltYXRpb25CdWlsZChsLGEsZCl7Y29uc3QgZj1hLmVsZW1lbnQsdj1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmwsTT1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dl''@;'; put 'put ''ck5hbWU7Zm9yKGNvbnN0IEQgb2YgYS50aW1lbGluZXMpe2NvbnN0IFo9RC5lbGVtZW50LHJlPVohPT1mLGNlPVRoKGQsWixbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKFoscmUsdixNLGEudG9TdGF0ZSkuZm9yRWFjaChFZT0+e2NvbnN0IEJlPUVlLmdldFJlYWxQbGF5ZXIoKTtCZS5i''@;'; put 'put ''ZWZvcmVEZXN0cm95JiZCZS5iZWZvcmVEZXN0cm95KCksRWUuZGVzdHJveSgpLGNlLnB1c2goRWUpfSl9RjcoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgTT1hLnRyaWdnZXJOYW1lLEQ9YS5lbGVtZW50LFo9W10scmU9bmV3IFNldCxjZT1uZXcg''@;'; put 'put ''U2V0LGJlPWEudGltZWxpbmVzLm1hcChCZT0+e2NvbnN0IHFlPUJlLmVsZW1lbnQ7cmUuYWRkKHFlKTtjb25zdCBydD1xZVtlM107aWYocnQmJnJ0LnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgd3goQmUuZHVyYXRpb24sQmUuZGVsYXkpO2NvbnN0IHB0PXFlIT09RCxkdD1mdW5j''@;'; put 'put ''dGlvbiBrJGUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gamhlKGMsbCksbH0oKGQuZ2V0KHFlKXx8dyRlKS5tYXAoTW49Pk1uLmdldFJlYWxQbGF5ZXIoKSkpLmZpbHRlcihNbj0+ISFNbi5lbGVtZW50JiZNbi5lbGVtZW50PT09cWUpLEp0PWYuZ2V0KHFlKSx2bj12LmdldChxZSksQ249YmhlKHRo''@;'; put 'put ''aXMuX25vcm1hbGl6ZXIsQmUua2V5ZnJhbWVzLEp0LHZuKSx0bj10aGlzLl9idWlsZFBsYXllcihCZSxDbixkdCk7aWYoQmUuc3ViVGltZWxpbmUmJmgmJmNlLmFkZChxZSkscHQpe2NvbnN0IE1uPW5ldyBLRyhsLE0scWUpO01uLnNldFJlYWxQbGF5ZXIodG4pLFoucHVzaChNbil9cmV0dXJu''@;'; put 'put ''IHRufSk7Wi5mb3JFYWNoKEJlPT57VGgodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxCZS5lbGVtZW50LFtdKS5wdXNoKEJlKSxCZS5vbkRvbmUoKCk9PmZ1bmN0aW9uIHgkZShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEp''@;'; put 'put ''O2Quc3BsaWNlKGgsMSl9MD09ZC5sZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEJlLmVsZW1lbnQsQmUpKX0pLHJlLmZvckVhY2goQmU9PkYyKEJlLE1oZSkpO2NvbnN0IEVlPURtKGJlKTtyZXR1cm4gRWUub25EZXN0cm95KCgpPT57''@;'; put 'put ''cmUuZm9yRWFjaChCZT0+aV8oQmUsTWhlKSksTXAoRCxhLnRvU3R5bGVzKX0pLGNlLmZvckVhY2goQmU9PntUaChoLEJlLFtdKS5wdXNoKEVlKX0pLEVlfV9idWlsZFBsYXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0''@;'; put 'put ''aW9uLGwuZGVsYXksbC5lYXNpbmcsZCk6bmV3IHd4KGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNzIEtHe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kLHRoaXMuX3BsYXllcj1uZXcgd3gsdGhpcy5fY29udGFp''@;'; put 'put ''bnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRS''@;'; put 'put ''ZWFsUGxheWVyKGwpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1sLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGQpPT57YS5mb3JFYWNoKGg9PlRHKGwsZCx2b2lkIDAsaCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29u''@;'; put 'put ''dGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUobC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRoaXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShsKXt0aGlzLnRvdGFsVGltZT1sfXN5bmNQbGF5ZXJFdmVudHMobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmwub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGwub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSxsLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGwsYSl7VGgodGhp''@;'; put 'put ''cy5fcXVldWVkQ2FsbGJhY2tzLGwsW10pLnB1c2goYSl9b25Eb25lKGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixsKSx0aGlzLl9wbGF5ZXIub25Eb25lKGwpfW9uU3RhcnQobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixsKSx0aGlzLl9w''@;'; put 'put ''bGF5ZXIub25TdGFydChsKX1vbkRlc3Ryb3kobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGwpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kobCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5f''@;'; put 'put ''cGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMu''@;'; put 'put ''X3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24obCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihs''@;'; put 'put ''KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2sobCl9fWZ1bmN0aW9uIHhPKGMpe3JldHVy''@;'; put 'put ''biBjJiYxPT09Yy5ub2RlVHlwZX1mdW5jdGlvbiBOaGUoYyxsKXtjb25zdCBhPWMuc3R5bGUuZGlzcGxheTtyZXR1cm4gYy5zdHlsZS5kaXNwbGF5PWw/PyJub25lIixhfWZ1bmN0aW9uIFZoZShjLGwsYSxkLGgpe2NvbnN0IGY9W107YS5mb3JFYWNoKEQ9PmYucHVzaChOaGUoRCkpKTtjb25z''@;'; put 'put ''dCB2PVtdO2QuZm9yRWFjaCgoRCxaKT0+e2NvbnN0IHJlPW5ldyBNYXA7RC5mb3JFYWNoKGNlPT57Y29uc3QgYmU9bC5jb21wdXRlU3R5bGUoWixjZSxoKTtyZS5zZXQoY2UsYmUpLCghYmV8fDA9PWJlLmxlbmd0aCkmJihaW2UzXT1DJGUsdi5wdXNoKFopKX0pLGMuc2V0KFoscmUpfSk7bGV0''@;'; put 'put ''IE09MDtyZXR1cm4gYS5mb3JFYWNoKEQ9Pk5oZShELGZbTSsrXSkpLHZ9ZnVuY3Rpb24gQmhlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2lmKGMuZm9yRWFjaChNPT5hLnNldChNLFtdKSksMD09bC5sZW5ndGgpcmV0dXJuIGE7Y29uc3QgaD1uZXcgU2V0KGwpLGY9bmV3IE1hcDtmdW5jdGlvbiB2''@;'; put 'put ''KE0pe2lmKCFNKXJldHVybiAxO2xldCBEPWYuZ2V0KE0pO2lmKEQpcmV0dXJuIEQ7Y29uc3QgWj1NLnBhcmVudE5vZGU7cmV0dXJuIEQ9YS5oYXMoWik/WjpoLmhhcyhaKT8xOnYoWiksZi5zZXQoTSxEKSxEfXJldHVybiBsLmZvckVhY2goTT0+e2NvbnN0IEQ9dihNKTsxIT09RCYmYS5nZXQo''@;'; put 'put ''RCkucHVzaChNKX0pLGF9ZnVuY3Rpb24gRjIoYyxsKXtjLmNsYXNzTGlzdD8uYWRkKGwpfWZ1bmN0aW9uIGlfKGMsbCl7Yy5jbGFzc0xpc3Q/LnJlbW92ZShsKX1mdW5jdGlvbiBBJGUoYyxsLGEpe0RtKGEpLm9uRG9uZSgoKT0+Yy5wcm9jZXNzTGVhdmVOb2RlKGwpKX1mdW5jdGlvbiBqaGUo''@;'; put 'put ''YyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1jW2FdO2QgaW5zdGFuY2VvZiBSMGU/amhlKGQucGxheWVycyxsKTpsLnB1c2goZCl9fWZ1bmN0aW9uIHpoZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtpZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4g''@;'; put 'put ''aD9kLmZvckVhY2goZj0+aC5hZGQoZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgYUV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYp''@;'; put 'put ''PT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBNJGUobC5ib2R5LGEsZCxoKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcgbSRlKGwuYm9keSxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGYsdik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoZix2''@;'; put 'put ''KX1yZWdpc3RlclRyaWdnZXIobCxhLGQsaCxmKXtjb25zdCB2PWwrIi0iK2g7bGV0IE09dGhpcy5fdHJpZ2dlckNhY2hlW3ZdO2lmKCFNKXtjb25zdCBEPVtdLHJlPUJHKHRoaXMuX2RyaXZlcixmLEQsW10pO2lmKEQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHlHZShjLGwpe3JldHVybiBuZXcg''@;'; put 'put ''UW4oMzQwNCwhMSl9KCk7TT1mdW5jdGlvbiBoJGUoYyxsLGEpe3JldHVybiBuZXcgZiRlKGMsbCxhKX0oaCxyZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbdl09TX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLGgsTSl9cmVnaXN0ZXIobCxh''@;'; put 'put ''KXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKGwsYSl9ZGVzdHJveShsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7''@;'; put 'put ''dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxoKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLHZdPXlo''@;'; put 'put ''ZShkKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKGYsYSx2LGgpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W3YsTV09eWhlKGQpO3JldHVybiB0aGlzLl90aW1lbGlu''@;'; put 'put ''ZUVuZ2luZS5saXN0ZW4odixhLE0sZil9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygpe3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBs''@;'; put 'put ''YXllcnMsLi4udGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVyc119d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVy''@;'; put 'put ''Rmx1c2hBbmltYXRpb25zRG9uZShsKX19Y2xhc3Mgb0V7c3RhdGlje3RoaXMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcH1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX3N0YXJ0U3R5bGVzPWEsdGhpcy5fZW5kU3R5bGVzPWQsdGhpcy5fc3RhdGU9''@;'; put 'put ''MDtsZXQgaD1vRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChsKTtofHxvRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChsLGg9bmV3IE1hcCksdGhpcy5faW5pdGlhbFN0eWxlcz1ofXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZNcCh0aGlzLl9lbGVt''@;'; put 'put ''ZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoTXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihNcCh0aGlzLl9lbGVt''@;'; put 'put ''ZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihvRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYm''@;'; put 'put ''KEY3KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihGNyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0''@;'; put 'put ''eWxlcyksdGhpcy5fc3RhdGU9Myl9fWZ1bmN0aW9uIHFHKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+eyhmdW5jdGlvbiBSJGUoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xh''@;'; put 'put ''c3MgVWhle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25zPWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9p''@;'; put 'put ''bml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1''@;'; put 'put ''cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRv''@;'; put 'put ''bmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEw''@;'; put 'put ''O2NvbnN0IGw9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwO2NvbnN0IGE9KCk9PnRoaXMuX29u''@;'; put 'put ''RmluaXNoKCk7dGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKSx0aGlzLm9uRGVzdHJveSgoKT0+e3RoaXMuZG9tUGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZpbmlzaCIsYSl9KX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhp''@;'; put 'put ''cy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChsKXtjb25zdCBhPVtdO3JldHVybiBsLmZvckVhY2goZD0+e2EucHVzaChPYmplY3QuZnJvbUVudHJpZXMoZCkpfSksYX1fdHJpZ2dlcldlYkFuaW1hdGlvbihs''@;'; put 'put ''LGEsZCl7cmV0dXJuIGwuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoYSksZCl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1''@;'; put 'put ''c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZu''@;'; put 'put ''cz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9z''@;'; put 'put ''cGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0''@;'; put 'put ''YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0''@;'; put 'put ''aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0''@;'; put 'put ''eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKGwpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJy''@;'; put 'put ''ZW50VGltZT1sKnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybisodGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU/PzApL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBsPW5ldyBNYXA7''@;'; put 'put ''dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOlZHKHRoaXMuZWxlbWVudCxoKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1sfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBh''@;'; put 'put ''PSJzdGFydCI9PT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFpoZXt2YWxpZGF0ZVN0eWxlUHJvcGVydHkobCl7cmV0dXJuITB9dmFsaWRhdGVBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH1t''@;'; put 'put ''YXRjaGVzRWxlbWVudChsLGEpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChsLGEpe3JldHVybiB3aGUobCxhKX1nZXRQYXJlbnRFbGVtZW50KGwpe3JldHVybiBERyhsKX1xdWVyeShsLGEsZCl7cmV0dXJuIENoZShsLGEsZCl9Y29tcHV0ZVN0eWxlKGwsYSxkKXtyZXR1cm4gVkcobCxhKX1h''@;'; put 'put ''bmltYXRlKGwsYSxkLGgsZix2PVtdKXtjb25zdCBEPXtkdXJhdGlvbjpkLGRlbGF5OmgsZmlsbDowPT1oPyJib3RoIjoiZm9yd2FyZHMifTtmJiYoRC5lYXNpbmc9Zik7Y29uc3QgWj1uZXcgTWFwLHJlPXYuZmlsdGVyKEVlPT5FZSBpbnN0YW5jZW9mIFVoZSk7KGZ1bmN0aW9uIFVHZShjLGwp''@;'; put 'put ''e3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZyZS5mb3JFYWNoKEVlPT57RWUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKEJlLHFlKT0+Wi5zZXQocWUsQmUpKX0pO2xldCBjZT1mdW5jdGlvbiBCR2UoYyl7cmV0dXJuIGMubGVuZ3RoP2NbMF1pbnN0YW5jZW9mIE1hcD9jOmMubWFwKGw9''@;'; put 'put ''Pm5ldyBNYXAoT2JqZWN0LmVudHJpZXMobCkpKTpbXX0oYSkubWFwKEVlPT5uZXcgTWFwKEVlKSk7Y2U9ZnVuY3Rpb24gWkdlKGMsbCxhKXtpZihhLnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLHYpPT57ZC5oYXModil8fGgucHVzaCh2KSxkLnNldCh2''@;'; put 'put ''LGYpfSksaC5sZW5ndGgpZm9yKGxldCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCB2PWxbZl07aC5mb3JFYWNoKE09PnYuc2V0KE0sVkcoYyxNKSkpfX1yZXR1cm4gbH0obCxjZSxaKTtjb25zdCBiZT1mdW5jdGlvbiBJJGUoYyxsKXtsZXQgYT1udWxsLGQ9bnVsbDtyZXR1cm4gQXJyYXkuaXNB''@;'; put 'put ''cnJheShsKSYmbC5sZW5ndGg/KGE9cUcobFswXSksbC5sZW5ndGg+MSYmKGQ9cUcobFtsLmxlbmd0aC0xXSkpKTpsIGluc3RhbmNlb2YgTWFwJiYoYT1xRyhsKSksYXx8ZD9uZXcgb0UoYyxhLGQpOm51bGx9KGwsY2UpO3JldHVybiBuZXcgVWhlKGwsY2UsRCxiZSl9fWNvbnN0IFdoZT0iQC5k''@;'; put 'put ''aXNhYmxlZCI7Y2xhc3MgWWhle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0aGlzLl9vbkRlc3Ryb3k9aCx0aGlzLlx1MDI3NXR5cGU9MH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVz''@;'; put 'put ''dHJveU5vZGUobCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9''@;'; put 'put ''Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1j''@;'; put 'put ''cmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEw''@;'; put 'put ''KXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsYSx0aGlzLmRlbGVnYXRlKX1zZWxlY3RSb290''@;'; put 'put ''RWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KGwsYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKGwpfW5leHRTaWJsaW5nKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKGwpfXNldEF0dHJp''@;'; put 'put ''YnV0ZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShsLGEsZCxoKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGwsYSxkKX1hZGRDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3MobCxhKX1yZW1vdmVDbGFzcyhs''@;'; put 'put ''LGEpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MobCxhKX1zZXRTdHlsZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKGwsYSxkLGgpfXJlbW92ZVN0eWxlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKGwsYSxkKX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNo''@;'; put 'put ''YXJBdCgwKSYmYT09V2hlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCwhIWQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfXNldFZhbHVlKGwsYSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShsLGEpfWxpc3RlbihsLGEsZCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGws''@;'; put 'put ''YSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKGwsYSl9fWNsYXNzIEwkZSBleHRlbmRzIFloZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpLHRoaXMuZmFjdG9yeT1sLHRoaXMubmFtZXNwYWNlSWQ9YX1zZXRQcm9w''@;'; put 'put ''ZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKT8iLiI9PWEuY2hhckF0KDEpJiZhPT1XaGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLGQ9dm9pZCAwPT09ZHx8ISFkKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsbCxhLnNsaWNlKDEpLGQpOnRoaXMuZGVsZWdhdGUu''@;'; put 'put ''c2V0UHJvcGVydHkobCxhLGQpfWxpc3RlbihsLGEsZCl7aWYoIkAiPT1hLmNoYXJBdCgwKSl7Y29uc3QgaD1mdW5jdGlvbiBPJGUoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93Ijpy''@;'; put 'put ''ZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIGN9fShsKTtsZXQgZj1hLnNsaWNlKDEpLHY9IiI7cmV0dXJuIkAiIT1mLmNoYXJBdCgwKSYmKFtmLHZdPWZ1bmN0aW9uIFAkZShjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19''@;'; put 'put ''KGYpKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxoLGYsdixNPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhNLl9kYXRhfHwtMSxkLE0pfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX19Y2xhc3MgRiRle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkKXt0aGlzLmRlbGVnYXRlPWwsdGhpcy5lbmdpbmU9YSx0aGlzLl96b25lPWQsdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJE''@;'; put 'put ''ZXB0aD0wLGEub25SZW1vdmFsQ29tcGxldGU9KGgsZik9Pntjb25zdCB2PWY/LnBhcmVudE5vZGUoaCk7diYmZi5yZW1vdmVDaGlsZCh2LGgpfX1jcmVhdGVSZW5kZXJlcihsLGEpe2NvbnN0IGg9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihsLGEpO2lmKCFsfHwhYT8uZGF0YT8uYW5p''@;'; put 'put ''bWF0aW9uKXtjb25zdCBaPXRoaXMuX3JlbmRlcmVyQ2FjaGU7bGV0IHJlPVouZ2V0KGgpO3JldHVybiByZXx8KHJlPW5ldyBZaGUoIiIsaCx0aGlzLmVuZ2luZSwoKT0+Wi5kZWxldGUoaCkpLFouc2V0KGgscmUpKSxyZX1jb25zdCBmPWEuaWQsdj1hLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7''@;'; put 'put ''dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIodixsKTtjb25zdCBNPVo9PntBcnJheS5pc0FycmF5KFopP1ouZm9yRWFjaChNKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZix2LGwsWi5uYW1lLFopfTtyZXR1cm4gYS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKE0p''@;'; put 'put ''LG5ldyBMJGUodGhpcyx2LGgsdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30p''@;'; put 'put ''fXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhsLGEsZCl7aWYobD49MCYmbDx0aGlzLl9taWNyb3Rhc2tJZClyZXR1cm4gdm9pZCB0aGlzLl96b25lLnJ1bigoKT0+YShkKSk7Y29uc3QgaD10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI7MD09aC5sZW5ndGgmJnF1ZXVlTWljcm90YXNr''@;'; put 'put ''KCgpPT57dGhpcy5fem9uZS5ydW4oKCk9PntoLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zjt2KE0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSxoLnB1c2goW2EsZF0pfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhp''@;'; put 'put ''cy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19bGV0IEgkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYUV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoLGZpKGJiLHtvcHRpb25hbDohMH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoUkcpLHhyKExHKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgR2hlPVt7cHJvdmlkZTpMRyx1c2VGYWN0b3J5OmZ1bmN0aW9u''@;'; put 'put ''IE4kZSgpe3JldHVybiBuZXcgVGhlfX0se3Byb3ZpZGU6YUUsdXNlQ2xhc3M6SCRlfSx7cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIFYkZShjLGwsYSl7cmV0dXJuIG5ldyBGJGUoYyxsLGEpfSxkZXBzOltjWixhRSxXYV19XSxYRz1be3Byb3ZpZGU6UkcsdXNlRmFjdG9yeTooKT0+''@;'; put 'put ''bmV3IFpoZX0se3Byb3ZpZGU6RmssdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uR2hlXSwkaGU9W3twcm92aWRlOlJHLHVzZUNsYXNzOklHfSx7cHJvdmlkZTpGayx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5HaGVdO2xldCBCJGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMg''@;'; put 'put ''d2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz8kaGU6WEd9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlhHLGltcG9ydHM6W1RvZV19KX19cmV0dXJuIGN9KSgpLGokZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUo''@;'; put 'put ''MCwiZGl2IiwwKSgxLCJwIiksTGUoMiwiNDA0IC0gTm90IEZvdW5kIiksaGUoKSgpKX0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxLaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe2xldCBmPW5ldyBCbG9iKFthXSx7dHlw''@;'; put 'put ''ZToidGV4dC9wbGFpbiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihmLGAke2R9LiR7aH1gKTtlbHNle2xldCB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTt2LmhyZWY9ImRhdGE6''@;'; put 'put ''dGV4dC9wbGFpbiwiK2VuY29kZVVSSUNvbXBvbmVudChhKSx2LmRvd25sb2FkPWAke2R9LiR7aH1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodiksdi5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodil9fXJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+''@;'; put 'put ''e2xldCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPSgpPT57Zi5yZXN1bHQmJmQoSlNPTi5wYXJzZShmLnJlc3VsdC50b1N0cmluZygpKSl9LGYucmVhZEFzVGV4dChhKX0pfWNsZWFyVXBsb2FkSW5wdXQoYSl7YS50YXJnZXQudmFsdWU9IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7dmFyIGdnPXkoNTk0OCk7Y29uc3QgSkc9ZnVuY3Rpb24gVSRlKGMpe3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgY3x8Q3koYykmJiJbb2JqZWN0IFN5bWJvbF0iPT1ieShjKX07dmFyIFokZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxXJGU9L15cdyokLztmdW5jdGlvbiBRRyhjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjfHxudWxs''@;'; put 'put ''IT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1cm4gZi5nZXQoaCk7''@;'; put 'put ''dmFyIHY9Yy5hcHBseSh0aGlzLGQpO3JldHVybiBhLmNhY2hlPWYuc2V0KGgsdil8fGYsdn07cmV0dXJuIGEuY2FjaGU9bmV3KFFHLkNhY2hlfHxrVyksYX1RRy5DYWNoZT1rVztjb25zdCBLJGU9UUc7dmFyIFEkZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86''@;'; put 'put ''KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxlS2U9L1xcKFxcKT8vZyx0S2U9ZnVuY3Rpb24gWCRlKGMpe3ZhciBsPUskZShjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1sLmNhY2hlO3JldHVy''@;'; put 'put ''biBsfShmdW5jdGlvbihjKXt2YXIgbD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQoMCkmJmwucHVzaCgiIiksYy5yZXBsYWNlKFEkZSxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UoZUtlLCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IG5LZT10S2U7dmFyIHFoZT11bT91''@;'; put 'put ''bS5wcm90b3R5cGU6dm9pZCAwLFhoZT1xaGU/cWhlLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBvS2U9ZnVuY3Rpb24gSmhlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihTeShjKSlyZXR1cm4gZnVuY3Rpb24gcktlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMu''@;'; put 'put ''bGVuZ3RoLGg9QXJyYXkoZCk7KythPGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9KGMsSmhlKSsiIjtpZihKRyhjKSlyZXR1cm4gWGhlP1hoZS5jYWxsKGMpOiIiO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSx1S2U9ZnVuY3Rpb24gY0tlKGMsbCl7cmV0''@;'; put 'put ''dXJuIFN5KGMpP2M6ZnVuY3Rpb24gWSRlKGMsbCl7aWYoU3koYykpcmV0dXJuITE7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISgibnVtYmVyIiE9YSYmInN5bWJvbCIhPWEmJiJib29sZWFuIiE9YSYmbnVsbCE9YyYmIUpHKGMpKXx8VyRlLnRlc3QoYyl8fCFaJGUudGVzdChjKXx8bnVsbCE9bCYm''@;'; put 'put ''YyBpbiBPYmplY3QobCl9KGMsbCk/W2NdOm5LZShmdW5jdGlvbiBzS2UoYyl7cmV0dXJuIG51bGw9PWM/IiI6b0tlKGMpfShjKSl9LGZLZT1mdW5jdGlvbiBoS2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjfHxKRyhjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0t''@;'; put 'put ''MS8wPyItMCI6bH0seWM9ZnVuY3Rpb24gbUtlKGMsbCxhKXt2YXIgZD1udWxsPT1jP3ZvaWQgMDpmdW5jdGlvbiBwS2UoYyxsKXtmb3IodmFyIGE9MCxkPShsPXVLZShsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbZktlKGxbYSsrXSldO3JldHVybiBhJiZhPT1kP2M6dm9pZCAwfShj''@;'; put 'put ''LGwpO3JldHVybiB2b2lkIDA9PT1kP2E6ZH07bGV0IGtoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IFduLHRoaXMuY2hhbmdlZFRhYmxl''@;'; put 'put ''PW5ldyBXbix0aGlzLmRldGFpbHM9bmV3IFduLHRoaXMuZGlmZnM9bmV3IFduLHRoaXMuY29sdW1ucz1uZXcgV24sdGhpcy52YWx1ZXM9bmV3IFduLHRoaXMuZmlsdGVyPW5ldyBXbix0aGlzLnF1ZXJ5PW5ldyBXbix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IFduLHRoaXMucmVtb3ZlUXVlcnk9''@;'; put 'put ''bmV3IFduLHRoaXMuc2V0U3VibWl0PW5ldyBXbix0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IFdufWNhbGxTZXJ2aWNlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09e307cmV0dXJuIE1bZF09W2FdLHtkYXRhOih5aWVsZCB2LnNhc1NlcnZpY2UucmVx''@;'; put 'put ''dWVzdChoLE0pKS5hZGFwdGVyUmVzcG9uc2UsbGliZHM6Zn19KSgpfXVwZGF0ZVRhYmxlKGEsZCxoLGYsdixNLEQpe3ZhciBaPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCByZT17anNkYXRhOmR9O2lmKHYpe2xldCBiZT1aLnBhcnNlRm9ybWF0cyh2KTtyZS4kanNkYXRhPXtmb3Jt''@;'; put 'put ''YXRzOmJlfX1yZXR1cm4gcmVbaF09W2FdLHlpZWxkIFouc2FzU2VydmljZS5yZXF1ZXN0KGYscmUsRCx7c3VwcHJlc3NFcnJvckFib3J0TW9kYWw6TSxzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOk19KX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2VuZERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PU9iamVjdC5hc3NpZ24oe3N1Yjoh''@;'; put 'put ''MH0sYSk7Zi5zdWJtaXR0RGV0YWlsLm5leHQoe2RhdGE6aFtkXSx2aWV3RGF0YTp2fSl9KSgpfWdldFN1Ym1pdHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpKS5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdMaWJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBk''@;'; put 'put ''PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2xpYjJyZWZyZXNoOlt7bGlicmVmOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVmcmVzaGxpYmluZm8iLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9''@;'; put 'put ''dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlz''@;'; put 'put ''O3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7TElCRFM6YSxGSUxURVJfUks6ZH1dfTtyZXR1cm4oeWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGFTZWFyY2goYSl7''@;'; put 'put ''dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKGgsZj0hMSx2LE0pe2xldCBaPXtTQVNDb250cm9sVGFibGU6W3tTRUFSQ0hUWVBFOmgubGVuZ3RoPjA/Zj8iTlVNIjoiQ0hBUiI6Ik5PTkUiLFNFQVJDSFZBTDpoLExJQkRTOnYsRklMVEVSX1JLOk19XX07cmV0dXJuKHlpZWxkIGQuc2Fz''@;'; put 'put ''U2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLFopKS5hZGFwdGVyUmVzcG9uc2V9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Z2V0WExNYXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19''@;'; put 'put ''O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNob3dEaWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNh''@;'; put 'put ''c1NlcnZpY2UucmVxdWVzdChoLHYse3VzZUNvbXB1dGVBcGk6bnVsbH0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlamVjdGluZyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVz''@;'; put 'put ''dChoLHYse3VzZUNvbXB1dGVBcGk6bnVsbH0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfWFwcHJvdmVUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2V9KSgpfWdldEhpc3RvcnkoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZXRRdWVyeVZhcmlhYmxlcyhh''@;'; put 'put ''LGQpe3RoaXMuY29sdW1ucy5uZXh0KHtkYXRhOntjb2xzOmR9LGxpYmRzOmF9KX1nZXRDaGFuZ2VJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tUQUJMRTphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVz''@;'; put 'put ''dCgicHVibGljL2dldGNoYW5nZWluZm8iLGYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfWdldFF1ZXJ5VmFsdWVzKGEsZCxoLGYsdil7dmFyIE09dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IEQ9e2l3YW50Olt7bGliZHM6ZCxjb2w6YSwuLi5mJiZ7U1RBUlRST1c6Zn0sLi4udiYme1JP''@;'; put 'put ''V1M6dn19XX07cmV0dXJuIGgubGVuZ3RoPjAmJihELkZJTFRFUlFVRVJZPWgpLCh5aWVsZCBNLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNvbHZhbHMiLEQpLmNhdGNoKFo9Pnt0aHJvdyBafSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2F2ZVF1ZXJ5KGEsZCl7dmFyIGg9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e2l3YW50Olt7ZmlsdGVyX3RhYmxlOmF9XSxmaWx0ZXJxdWVyeTpkfTtjb25zdCB2PXlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmFsaWRhdGVmaWx0ZXIiLGYpO3JldHVybiBoLmZpbHRlci5uZXh0KHYpLHYuYWRhcHRlclJl''@;'; put 'put ''c3BvbnNlfSkoKX1vcGVuVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9e2l3YW50Olt7dGFibGVfaWQ6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoImF1ZGl0b3JzL2dldHN0YWdldGFibGUiLGgpKS5hZGFwdGVyUmVzcG9uc2V9''@;'; put 'put ''KSgpfWNoZWNrT3BlcmF0b3IoYSxkLGgpe2xldCBmO3N3aXRjaChhKXtjYXNlIkJFVFdFRU4iOmQgaW5zdGFuY2VvZiBBcnJheSYmKCIiIT09ZFswXSYmIiIhPT1kWzFdP2Y9ZFswXSsiIEFORCAiK2RbMV06IiIhPT1kWzBdJiYiIj09PWRbMV0/KGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2Rb''@;'; put 'put ''MV0pOiIiPT09ZFswXSYmIiIhPT1kWzFdPyhkWzBdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKTooZFswXT0iLiIsZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSkpO2JyZWFrO2Nhc2UiSU4iOmNhc2UiTk9UIElOIjpsZXQgTT1bXTtpZih0eXBlb2YgZDwidSIpZm9yKGxldCBEPTA7RDxk''@;'; put 'put ''Lmxlbmd0aDtEKyspITA9PT1kW0RdLmNoZWNrZWQmJigiY2hhciI9PT1oPygic3RyaW5nIj09dHlwZW9mIGRbRF0udmFsJiYoZFtEXS52YWw9ZFtEXS52YWwucmVwbGFjZSgiJyIsIicnIikpLE0ucHVzaCgiJyIrZFtEXS52YWwrIiciKSk6KG51bGw9PT1kW0RdLnZhbCYmKGRbRF0udmFsPSIu''@;'; put 'put ''IiksTS5wdXNoKGRbRF0udmFsKSkpO2Q9IigiK00rIikiO2JyZWFrO2Nhc2UiQ09OVEFJTlMiOmE9Ij8iO2JyZWFrO2Nhc2UiTk9UIEVRVUFMIjphPSJuZSJ9cmV0dXJuIm51bSI9PT1oJiZudWxsPT09ZCYmKGQ9Ii4iKSwiUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1kJiYoZD0iIiksLTEhPT1b''@;'; put 'put ''Ij0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYSkmJiJudW0iPT09aCYmIiI9PT1kJiYoZD0iLiIpLCJCRVRXRUVOIj09PWE/e3ZhbHVlOmYsb3BlcmF0b3I6YX06e3ZhbHVlOmQsb3BlcmF0b3I6YX19d2hlcmVDbGF1c2VDcmVhdG9yKGEsZCxoKXtsZXQgRCxjZSxmPSIiLFo9''@;'; put 'put ''IiIscmU9W107Zm9yKGxldCBFZT0wO0VlPGEucXVlcnlPYmoubGVuZ3RoO0VlKyspe2xldCBCZT0iIixxZT1hLnF1ZXJ5T2JqW0VlXTtmb3IobGV0IHJ0PTA7cnQ8cWUuZWxlbWVudHMubGVuZ3RoO3J0Kyspe2xldCBkdCxwdD1xZS5lbGVtZW50c1tydF07RD1ydDxxZS5lbGVtZW50cy5sZW5n''@;'; put 'put ''dGgtMT9xZS5jbGF1c2VMb2dpYzoiIjtmb3IobGV0IENyPTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtDcisrKXtpZigic3RyaW5nIj09dHlwZW9mIHB0LnZhbHVlJiYibnVtYmVyIj09dHlwZW9mIHB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkKXB0LnZhbHVlPT09SlNPTi5zdHJpbmdpZnkocHQudmFs''@;'; put 'put ''dWVzW0NyXS5mb3JtYXR0ZWQpJiYoZHQ9cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCk7ZWxzZXtsZXQgbXI9Im51bWJlciIhPXR5cGVvZiBwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCYmbnVsbCE9PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkP3B0LnZhbHVlc1tDcl0uZm9ybWF0dGVkLnRyaW0o''@;'; put 'put ''KTpwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZDtwdC52YWx1ZT09PW1yJiYoZHQ9cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCl9IlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09cHQudmFsdWUmJi0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKHB0Lm9wZXJhdG9yKSYmKGR0''@;'; put 'put ''PSIiKSwoIkNPTlRBSU5TIj09PXB0Lm9wZXJhdG9yfHwiTElLRSI9PT1wdC5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PXB0Lm9wZXJhdG9yKSYmKGR0PXB0LnZhbHVlKX1pZihkdHx8KGR0PXB0LnZhbHVlKSxwdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYiQkVUV0VFTiI9PT1wdC5vcGVy''@;'; put 'put ''YXRvcil7ZHQ9W10sZHQucHVzaChwdC52YWx1ZVswXSksZHQucHVzaChwdC52YWx1ZVsxXSk7Zm9yKGxldCBDcj0wO0NyPHB0LnZhbHVlcy5sZW5ndGg7Q3IrKylkdFswXT09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbMF09cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCksZHRbMV09''@;'; put 'put ''PT1wdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCYmKGR0WzFdPXB0LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpfWlmKHB0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJigiSU4iPT09cHQub3BlcmF0b3J8fCJOT1QgSU4iPT09cHQub3BlcmF0b3IpKXtkdD1bXSxkdD1wdC52YWx1ZTtmb3IobGV0IENy''@;'; put 'put ''PTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtDcisrKWR0W0NyXSYmZHRbQ3JdLnZhbD09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbQ3JdLnZhbD1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKX1sZXQgSnQ9cHQudHlwZTtjb25zdCB2bj1wdC52YWx1ZVZhcmlhYmxlO2xldCBNbixDbj1u''@;'; put 'put ''dWxsPT09cHQudmFyaWFibGU/IiI6cHQudmFyaWFibGUsdG49bnVsbD09PXB0Lm9wZXJhdG9yPyIiOnB0Lm9wZXJhdG9yO01uPXRoaXMuY2hlY2tPcGVyYXRvcih0bixkdCxKdCkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBNbiYmIigiIT09TW5bMF0mJihNbj1Nbi5yZXBsYWNlKCInIiwiJyci''@;'; put 'put ''KSksdG49dGhpcy5jaGVja09wZXJhdG9yKHRuLE1uLEp0KS5vcGVyYXRvciwiY2hhciI9PT1KdCYmIklOIiE9PXRuJiYiTk9UIElOIiE9PXRuPyh0eXBlb2YgTW4+InUiJiYoTW49IiIpLE1uPXZuPyIgIitNbisiICI6IiAnIitNbisiJyAiLEJlPUJlKyIgIitDbisiICIrdG4rTW4rRCk6KCJu''@;'; put 'put ''dW0iPT09SnQmJnR5cGVvZiBNbj4idSImJihNbj0iLiIpLE1uPXR5cGVvZiBNbj4idSI/IiI6IiAiK01uKyIgIixCZT1CZSsiICIrQ24rIiAiK3RuK01uK0QpfXJlLnB1c2goQmUpfVo9IiI7Zm9yKGxldCBFZT0wO0VlPHJlLmxlbmd0aDtFZSsrKWNlPUVlPHJlLmxlbmd0aC0xP2Q6IiIsWj0x''@;'; put 'put ''PT09cmUubGVuZ3RoP3JlWzBdOlorIiAoIityZVtFZV0rIikgIitjZTtyZXR1cm4gZj1aLnN1YnN0cigxKS5zbGljZSgwLC0xKSxaPSJXSEVSRSIrWisiOyIsdGhpcy5xdWVyeS5uZXh0KHt3aGVyZUNsYXVzZTpaLHN0cmluZzpmLG9iajphLGxpYmRzOmh9KSx7d2hlcmVDbGF1c2U6WixzdHJp''@;'; put 'put ''bmc6Zn19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShhKXtjb25zdCBkPVtdO3JldHVybiBhLmZpbHRlckdyb3Vwcy5mb3JFYWNoKChoLGYpPT57aC5maWx0ZXJDbGF1c2VzLmZvckVhY2godj0+e2xldCBNPSIiOyJCRVRXRUVOIj09PXYub3BlcmF0b3I/TT1gJHt2LnZhbHVlWzBdfSBBTkQgJHt2''@;'; put 'put ''LnZhbHVlWzFdfWA6IklOIj09PXYub3BlcmF0b3J8fCJOT1QgSU4iPT09di5vcGVyYXRvcj8odi52YWx1ZS5mb3JFYWNoKEQ9PntpZihELmNoZWNrZWQpe2NvbnN0IFo9RC52YWw7InN0cmluZyIhPXR5cGVvZiBafHwoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShaKSYmImNoYXIiIT09di50eXBl''@;'; put 'put ''P00ubGVuZ3RoPjA/TSs9YCwke1p9YDpNPWAoJHtafWA6TS5sZW5ndGg+MD9NKz1gLCcke1oucmVwbGFjZSgvJy9nLCInJyIpfSdgOk09YCgnJHtaLnJlcGxhY2UoLycvZywiJyciKX0nYH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6IiI9PT12LnZhbHVlP009ImNoYXIiPT09di50eXBlPyIn''@;'; put 'put ''ICciOiIuIjoiY2hhciI9PT12LnR5cGUmJiF2LnZhbHVlVmFyaWFibGUmJihNPWAnJHt2LnZhbHVlLnJlcGxhY2UoLycvZywiJyciKX0nYCksZC5wdXNoKHtHUk9VUF9MT0dJQzphLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6aC5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixW''@;'; put 'put ''QVJJQUJMRV9OTTp2LnZhcmlhYmxlLE9QRVJBVE9SX05NOnYub3BlcmF0b3IsUkFXX1ZBTFVFOk18fHYudmFsdWV9KX0pfSksZH1pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGEsZCl7Y29uc3QgaD17cXVlcnlPYmo6W10sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp5YyhLbixhKS5m''@;'; put 'put ''aWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUN9O3ljKEtuLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaCkseWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWM9eWMoS24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDO2xldCBmPSIiLHY9e2VsZW1l''@;'; put 'put ''bnRzOltdfSxNPTA7eWMoS24sYSkuZmlsdGVyLnF1ZXJ5LmZvckVhY2goRD0+e2NvbnN0IFo9e307Zm9yKGxldCByZT0wO3JlPGQubGVuZ3RoO3JlKyspaWYoZFtyZV0uTkFNRT09PUQuVkFSSUFCTEVfTk0pe2lmKGY9RC5TVUJHUk9VUF9MT0dJQyxaLmRkdHlwZT1kW3JlXS5ERFRZUEUsWi50''@;'; put 'put ''eXBlPWRbcmVdLlRZUEUsWi5vcGVyYXRvcnM9Im51bSI9PT1kW3JlXS5UWVBFP0tuLm9wZXJhdG9ycy5udW1PcGVyYXRvcnM6S24ub3BlcmF0b3JzLmNoYXJPcGVyYXRvcnMsWi5sb2dpYz1udWxsLFoub3BlcmF0b3I9RC5PUEVSQVRPUl9OTSxaLnZhcmlhYmxlPUQuVkFSSUFCTEVfTk0sImNo''@;'; put 'put ''YXIiPT09ZFtyZV0uVFlQRSlpZigiSU4iPT09RC5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBjZT1bXSxFZT1ELlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiJywnIik7MT09PUVlLmxlbmd0aD9jZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpFZVswXS5z''@;'; put 'put ''bGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIil9KTpFZS5mb3JFYWNoKChCZSxxZSk9PntjZS5wdXNoKDA9PT1xZT97Y2hlY2tlZDohMCx2YWw6QmUuc2xpY2UoMSkucmVwbGFjZSgvJycvZywiJyIpfTpxZT09PUVlLmxlbmd0aC0xP3tjaGVja2VkOiEwLHZhbDpCZS5zbGljZSgwLC0xKS5y''@;'; put 'put ''ZXBsYWNlKC8nJy9nLCInIil9OntjaGVja2VkOiEwLHZhbDpCZS5yZXBsYWNlKC8nJy9nLCInIil9KX0pLFoudmFsdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShjZSl9ZWxzZSBaLnZhbHVlPUQuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKTtlbHNlIGlm''@;'; put 'put ''KCJJTiI9PT1ELk9QRVJBVE9SX05NfHwiTk9UIElOIj09PUQuT1BFUkFUT1JfTk0pe2NvbnN0IGNlPVtdO0QuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCIsIikuZm9yRWFjaCgoQmUscWUpPT57Y2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6QmV9KX0pLFoudmFsdWU9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmRlZXBDbG9uZShjZSl9ZWxzZSBpZigiQkVUV0VFTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBjZT1ELlJBV19WQUxVRS5zcGxpdCgiIEFORCAiKTtaLnZhbHVlPWNlfWVsc2UgWi52YWx1ZT1ELlJBV19WQUxVRTtaLnZhbHVlcz1bXSxNPT09RC5TVUJHUk9VUF9JRHx8KHljKEtu''@;'; put 'put ''LGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh2KSkseWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uY2xhdXNlTG9naWM9Zix5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5pbnZhbGlkQ2xhdXNl''@;'; put 'put ''PSExLE0rKyx2LmVsZW1lbnRzPVtdKSx2LmVsZW1lbnRzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShaKSk7YnJlYWt9fSksdi5lbGVtZW50cy5sZW5ndGg+MCYmKHljKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBD''@;'; put 'put ''bG9uZSh2KSkseWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uY2xhdXNlTG9naWM9Zix5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5pbnZhbGlkQ2xhdXNlPSExKSx5YyhLbixhKS5maWx0ZXIucXVlcnk9W119cmVtb3ZlQ2xhdXNlKCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIGEucmVtb3ZlUXVlcnkubmV4dCghMCksITB9KSgpfXNwZWNDb252ZXJzaW9uKGEpe2xldCBkPXt9LGg9W107aWYoaD1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5OQU1FLnRvVXBwZXJDYXNlKCl9KSxhIGluc3RhbmNlb2YgQXJyYXkpZm9y''@;'; put 'put ''KGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspZFtoW2ZdXT0xPT09YVtmXS5UWVBFP3tjb2xUeXBlOiJudW0iLGNvbExlbmd0aDphW2ZdLkxFTkdUSH06e2NvbFR5cGU6InN0cmluZyIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTtyZXR1cm4gZH1zZXRTdWJtaXRSZWFkeSgpe3RoaXMuc2V0U3VibWl0''@;'; put 'put ''Lm5leHQoITApfXBhcnNlRm9ybWF0cyhhKXtjb25zdCBkPXt9LGg9YS52YXJzO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhoKSl7Y29uc3Qgdj1oW2ZdLnR5cGUsTT1oW2ZdLmxlbmd0aDsibnVtIj09PXY/ZFtmXT0iYmVzdC4iOiJjaGFyIj09PXYmJihkW2ZdPWAkY2hhciR7TX0uYCl9cmV0''@;'; put 'put ''dXJuIGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoQnMpLHhyKFN1KSx4cihTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHZLZShj''@;'; put 'put ''LGwpezEmYyYmKHNpKDApLGRlKDEsInNwYW4iLDIxKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsInAiKSxMZSg0LCJEZXBsb3lpbmcuLi4iKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIGJLZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiB5S2UoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gX0tlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMCksZ3QoMSxiS2UsMSwwLCJjbHItaWNvbiIsMzEpKDIseUtlLDEsMCwiY2xyLWljb24iLDI3KSxkZSgzLCJwIiksTGUoNCwiRGVwbG95IFNBUyBKb2JzIiksaGUoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsITA9PT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksTWUoIm5nSWYiLCEhYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKX19ZnVuY3Rpb24gd0tlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIs''@;'; put 'put ''MzIpfWZ1bmN0aW9uIENLZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBTS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMwKSxndCgxLHdLZSwxLDAsImNsci1pY29uIiwzMSkoMixDS2UsMSwwLCJjbHItaWNvbiIsMjcpLGRlKDMsInAiKSxMZSg0LCJDcmVhdGUg''@;'; put 'put ''ZGF0YWJhc2UiKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKCksTWUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gTUtlKGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIHhLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDIyKSxMZSgyLCJEb25lIiksaGUoKSxHdCgzLCJociIsMjMpLGd0KDQsX0tlLDUsMiwiZGl2IiwyNCkoNSxTS2UsNSwyLCJkaXYiLDI0KSxHdCg2LCJociIsMjMpLGRl''@;'; put 'put ''KDcsImRpdiIsMjUpKDgsImJ1dHRvbiIsMjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxndCg5LE1LZSwxLDAsImNsci1pY29uIiwyNyksTGUoMTAsIiBMQVVOQ0ggIiksaGUoKSxkZSgxMSwiYnV0dG9uIiwyOCksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLExlKDEyLCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxHdCgxMywiaHIiLDIzKSxkZSgx''@;'; put 'put ''NCwiZGl2IiwyNSkoMTUsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmF1dG9kZXBsb3lpbmc9ITEsQ3QoaC5hdXRvZGVwbG95RG9uZT0hMSl9KSxMZSgxNiwiIENsb3NlICIpLGhlKCksZGUoMTcsImJ1dHRvbiIsMjkpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub3BlblNhc1JlcXVlc3RzTW9kYWwoKSl9KSxMZSgxOCwiIFNBUyBSZXF1ZXN0cyAiKSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCksTWUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0''@;'; put 'put ''dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKDQpLE1lKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFr''@;'; put 'put ''ZURhdGEpfX1mdW5jdGlvbiBFS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSgxLCJkaXYiLDIwKSxndCgyLHZLZSw1LDAsIm5nLWNvbnRhaW5lciIsMTIpKDMseEtlLDE5LDMsIm5nLWNvbnRhaW5lciIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYi''@;'; put 'put ''LCFhLmF1dG9kZXBsb3lEb25lKSxmZSgpLE1lKCJuZ0lmIixhLmF1dG9kZXBsb3lEb25lKX19ZnVuY3Rpb24gVEtlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5pZCksZmUoKSxEcigiICIs''@;'; put 'put ''YS5uYW1lLCIgIil9fWZ1bmN0aW9uIEFLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlbGVjdCIsMzQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3Rl''@;'; put 'put ''ZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxndCgxLFRLZSwyLDIsIm9wdGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7cGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKX19ZnVuY3Rpb24ga0tlKGMsbCl7MSZj''@;'; put 'put ''JiZHdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1bmN0aW9uIERLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuaWQpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBJS2UoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWxlY3QiLDM0KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25Db21wdXRlQ29udGV4dENoYW5nZShoKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''Zj1SZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQsaCl8fChmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9aCksQ3QoaCl9KSxndCgxLERLZSwyLDIsIm9wdGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7cGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb21wdXRl''@;'; put 'put ''Q29udGV4dCksZmUoKSxNZSgibmdGb3JPZiIsYS5jb21wdXRlQ29udGV4dHMpfX1mdW5jdGlvbiBSS2UoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzNyl9ZnVuY3Rpb24gTEtlKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwibGFiZWwiLDIpLExlKDIsIlJ1bm5pbmcgYXMgdXNlcjoi''@;'; put 'put ''KSxoZSgpLGRlKDMsImRpdiIsMykoNCwiZGl2Iiw0KSg1LCJwIiw1KSxMZSg2KSxoZSgpKCkoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg2KSx3cihhLnJ1bm5pbmdBc1VzZXIpfX1sZXQgT0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5zYXNWaXlhU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT12LHRoaXMuaGVscGVyU2VydmljZT1NLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRo''@;'; put 'put ''aXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgS3IsdGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0PSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSEx''@;'; put 'put ''LHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZT0hMCx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmFk''@;'; put 'put ''bWluR3JvdXBzTG9hZGluZz0hMSx0aGlzLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITEsdGhpcy5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jdXJyZW50VXNlckluZm89bnVsbCx0aGlzLmNvbXB1dGVDb250ZXh0cz1bXSx0aGlzLmF1dG9EZXBs''@;'; put 'put ''b3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGwscnVuTWFrZURhdGE6bnVsbH0sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmRlcGxveUluTmV3V2luZG93PSEwfW5nT25Jbml0KCl7dGhpcy5sb2FkRGF0YSgpfWxvYWREYXRhKCl7''@;'; put 'put ''dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgYS5nZXRBZG1pbkdyb3VwcygpLHlpZWxkIGEuZ2V0Q29tcHV0ZUNvbnRleHRzKCkseWllbGQgYS5nZXRDdXJyZW50VXNlcigpLHNldFRpbWVvdXQoKCk9PnthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQmJmEub25Db21wdXRl''@;'; put 'put ''Q29udGV4dENoYW5nZShhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpfSw1MDApfSkoKX1nZXRDb21wdXRlQ29udGV4dHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITAsYS5zYXNW''@;'; put 'put ''aXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4dHMoKS5zdWJzY3JpYmUoZj0+e2EuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMTtjb25zdCB2PWYuaXRlbXMuZmluZChNPT4iU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Ij09PU0ubmFtZSk7diYmKGEuc2VsZWN0ZWRDb21wdXRl''@;'; put 'put ''Q29udGV4dD12LmlkKSxhLmNvbXB1dGVDb250ZXh0cz1mLml0ZW1zLGQoKX0sZj0+e2goZil9KX0pfSkoKX1nZXRDdXJyZW50VXNlcigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY3VycmVudFVzZXJJbmZvTG9hZGluZz0h''@;'; put 'put ''MCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuc3Vic2NyaWJlKGY9PnthLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITEsYS5jdXJyZW50VXNlckluZm89ZixhLmRjUGF0aD1gL2V4cG9ydC92aXlhL2hvbWVzLyR7Zi5pZH1gLGQoKX0sZj0+e2NvbnNvbGUuZXJyb3IoIkVycm9y''@;'; put 'put ''IHdoaWxlIGdldHRpbmcgY3VycmVudCB1c2VyIixmKSxoKGYpfSl9KX0pKCl9Z2V0QWRtaW5Hcm91cHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmFkbWluR3JvdXBzTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdl''@;'; put 'put ''dEFkbWluR3JvdXBzKCkuc3Vic2NyaWJlKGY9PnthLmFkbWluR3JvdXBzTG9hZGluZz0hMSxhLmFkbWluR3JvdXBzPWYuaXRlbXMubWFwKHY9Pih7aWQ6di5pZCxuYW1lOnYubmFtZX0pKSxkKCl9KX0pfSkoKX1vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVl''@;'; put 'put ''KGZ1bmN0aW9uKigpe2Quc2FzVml5YVNlcnZpY2UuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKGEpLnN1YnNjcmliZShoPT57ZC5ydW5uaW5nQXNVc2VyPWguYXR0cmlidXRlcyYmaC5hdHRyaWJ1dGVzLnJ1blNlcnZlckFzP2guYXR0cmlidXRlcy5ydW5TZXJ2ZXJBczpkLmN1cnJlbnRVc2VySW5m''@;'; put 'put ''bz8uaWR8fCJ1bmtub3duIn0pfSkoKX1nZXRDb21wdXRlQ29udGV4dE5hbWUoYSl7cmV0dXJuIHRoaXMuY29tcHV0ZUNvbnRleHRzLmZpbmQoZD0+ZC5pZD09PWEpPy5uYW1lfHx2b2lkIDB9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmlzU3VibWl0''@;'; put 'put ''dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2Msdm9pZCAwLHZvaWQgMCwhMCksYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSEwLGEuaXNKc29uU3VibWl0dGVkPSEw''@;'; put 'put ''fWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2UsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSExLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZv''@;'; put 'put ''TW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApLGEuYXV0b2RlcGxveWluZz0hMSx2b2lkKGEuYXV0b2RlcGxveURvbmU9ITEpfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9cnVuQXV0b0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0''@;'; put 'put ''aW9uKihkPSExKXthLmRlcGxveUluTmV3V2luZG93fHwoYS5hdXRvZGVwbG95aW5nPSEwKSxkJiZhLmV4ZWN1dGVKc29uKCksYS5yZWNyZWF0ZURhdGFiYXNlP2EuY3JlYXRlRGF0YWJhc2UoKTphLmRlcGxveUluTmV3V2luZG93fHwoYS5hdXRvZGVwbG95RG9uZT0hMCl9KS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9Y3JlYXRlRGF0YWJhc2UoKXtsZXQgYT17ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LGQ9dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZTtpZih0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQubGVuZ3Ro''@;'; put 'put ''JiZ0aGlzLmNvbXB1dGVDb250ZXh0cy5sZW5ndGgpe2NvbnN0IGY9dGhpcy5nZXRDb21wdXRlQ29udGV4dE5hbWUodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtmJiYoZD1mKX1sZXQgaD17dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOmQsZGVidWc6ITB9O3RoaXMuZGVwbG95''@;'; put 'put ''SW5OZXdXaW5kb3c/dGhpcy5ydW5NYWtlZGF0YUluTmV3V2luZG93KGQpOnRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLGEsaCwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RoaXMuYXV0b2RlcGxveURvbmU9''@;'; put 'put ''ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoZi5yZXN1bHQmJmYucmVzdWx0Lmxlbmd0aD4wKSx0eXBlb2YgZi5zYXNqc0Fib3J0PCJ1''@;'; put 'put ''IiYmdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixmLnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6Zi5zYXNqc0Fib3J0WzBdLk1BQ30pLHRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5pc1N0cmVhbWluZ1ZpeWEoKSYmdGhpcy51cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpfSkuY2F0Y2goZj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsSlNPTi5zdHJpbmdpZnkoZikpLHRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5N''@;'; put 'put ''YWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9cnVuTWFrZWRhdGFJbk5ld1dpbmRvdyhhKXtsZXQgZD10aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clVybCxoPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vbWFrZWRhdGEiK2AmX2NvbnRleHRuYW1lPSR7YX0mX2RlYnVnPTEzMWAp''@;'; put 'put ''fXVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZD1sb2NhdGlvbi5zZWFyY2guc3BsaXQoIi8iKS5wb3AoKSxoPWQ/LmluY2x1ZGVzKCIuIik/ZDp2b2lkIDA7aWYoIWgpcmV0dXJuIHZvaWQgYS5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiV2UgY291bGQgbm90IGZpZ3VyZSBvdXQgdGhlIGZpbGUgbmFtZSBvZiBgaW5kZXguaHRtbGAgYmFzZWQgb24gdGhlIHVybC4iKTtjb25zdCBmPXlpZWxkIGEuc2FzU2VydmljZS5nZXRGaWxlQ29udGVudChgJHthLmFwcExvY30vc2VydmljZXNgLGgp''@;'; put 'put ''O2lmKCFmKXJldHVybiB2b2lkIGEubG9nZ2VyU2VydmljZS5lcnJvcihgRmFpbGVkIHRvIGdldCAke2h9IGF0ICR7YS5hcHBMb2N9L3NlcnZpY2VzYCk7Y29uc3Qgdj1hLmdldENvbXB1dGVDb250ZXh0TmFtZShhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpO2lmKCF2KXJldHVybiB2b2lkIGEu''@;'; put 'put ''bG9nZ2VyU2VydmljZS5lcnJvcihgQ29tcHV0ZSBjb250ZXh0IG5hbWUgbm90IGZvdW5kIGZvciBJRDogJHthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHR9IHwgTGlzdDogJHtKU09OLnN0cmluZ2lmeShhLmNvbXB1dGVDb250ZXh0cyl9YCk7Y29uc3QgTT1mLnJlcGxhY2UoL2NvbnRleHRuYW1l''@;'; put 'put ''PSJbXiJdKiIvZyxgY29udGV4dG5hbWU9IiR7dn0iYCk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwZGF0ZUZpbGVDb250ZW50KGAke2EuYXBwTG9jfS9zZXJ2aWNlc2AsaCxNKS5jYXRjaChEPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIERhdGFDb250cm9sbGVyLmh0''@;'; put 'put ''bWw6ICR7RH1gKX0pfSkoKX1kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxkLGgpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29u''@;'; put 'put ''RmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50YXJnZXQuY2hlY2tlZCYmKHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5j''@;'; put 'put ''bGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy''@;'; put 'put ''biBuZXcoZHx8YykoR2UodmMpLEdlKEtoZSksR2UoQnMpLEdlKFRXKSxHZShTZCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvbWF0aWMtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2Fz''@;'; put 'put ''SnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyIsYXBwTG9jOiJhcHBMb2MiLGRjUGF0aDoiZGNQYXRoIixzZWxlY3RlZEFkbWluR3JvdXA6InNlbGVjdGVkQWRtaW5Hcm91cCJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUi''@;'; put 'put ''fSxkZWNsczo0NCx2YXJzOjExLGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVy''@;'; put 'put ''Il0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiLCJkYy1sb2MtaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciIsInNtYWxsLW10Il0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJkY2xvYyIsMywi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJvcHRpb25zIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJmb3IiLCJjb21wdXRlQ29udGV4''@;'; put 'put ''dCIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFs0LCJuZ0lmIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJN''@;'; put 'put ''b2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxb''@;'; put 'put ''MSwic3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24tc2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsiY2xhc3MiLCJkZXBsb3ktZXJyb3IiLCJzaGFwZSIsInRpbWVzLWNpcmNsZSIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwi''@;'; put 'put ''YWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJz''@;'; put 'put ''aGFwZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsiY2xySW5saW5lIiwiIiwxLCJz''@;'; put 'put ''cGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ3QoMCxFS2UsNCwyLCJkaXYiLDApLGRlKDEsImg0IiwxKSxMZSgyLCJWaXlhIERlcGxveSIpLGhlKCksR3QoMywiaHIiKSxkZSg0LCJsYWJlbCIsMiksTGUoNSwiQXBwIExvYyIpLGhlKCksZGUoNiwiZGl2IiwzKSg3''@;'; put 'put ''LCJkaXYiLDQpKDgsInAiLDUpLExlKDkpLGhlKCkoKSgpLGRlKDEwLCJsYWJlbCIsMiksTGUoMTEsIkRDIExvYyIpLGhlKCksZGUoMTIsImRpdiIsNikoMTMsImRpdiIsNykoMTQsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGNQYXRoLHYp''@;'; put 'put ''fHwoaC5kY1BhdGg9diksdn0pLGhlKCkoKSgpLGRlKDE1LCJsYWJlbCIsMiksTGUoMTYsIlNBUyBBZG1pbiBncm91cCIpLGhlKCksZGUoMTcsImRpdiIsMykoMTgsImRpdiIsNyksZ3QoMTksQUtlLDIsMiwic2VsZWN0Iiw5KSgyMCxrS2UsMSwwLCJjbHItc3Bpbm5lciIsMTApLGhlKCkoKSxk''@;'; put 'put ''ZSgyMSwibGFiZWwiLDExKSxMZSgyMiwiQ29tcHV0ZSBDb250ZXh0IiksaGUoKSxkZSgyMywiZGl2IiwzKSgyNCwiZGl2Iiw3KSxndCgyNSxJS2UsMiwyLCJzZWxlY3QiLDkpKDI2LFJLZSwxLDAsImNsci1zcGlubmVyIiwxMCksaGUoKSgpLGd0KDI3LExLZSw3LDEsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''MTIpLEd0KDI4LCJociIpLGRlKDI5LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucnVuQXV0b0RlcGxveSgpfSksTGUoMzAsIiBEZXBsb3lcbiIpLGhlKCksZGUoMzEsImNsci1tb2RhbCIsMTQpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiBtaShoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCx2KXx8KGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPXYpLHZ9KSxkZSgzMiwiaDMiLDE1KSxMZSgzMywiV2FybmluZyIpLGhlKCksZGUoMzQsImRpdiIsMTYpLExlKDM1LCIgVGhpcyBhY3Rpb24gd2lsbCByZWNyZWF0ZSB0aGUgZGF0''@;'; put 'put ''YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksZGUoMzYsInN0cm9uZyIpLExlKDM3KSxoZSgpLExl''@;'; put 'put ''KDM4LCIuICIpLGhlKCksZGUoMzksImRpdiIsMTcpKDQwLCJidXR0b24iLDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGgucmVjcmVhdGVEYXRhYmFzZT0hMX0pLExlKDQxLCIgQ2FuY2VsICIpLGhlKCksZGUoNDIsImJ1dHRvbiIs''@;'; put 'put ''MTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsaC5yZWNyZWF0ZURhdGFiYXNlPSEwfSksTGUoNDMsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoTWUoIm5nSWYiLGguYXV0b2RlcGxveWluZyksZmUoOSksd3IoaC5hcHBMb2MpLGZlKDUp''@;'; put 'put ''LHBpKCJuZ01vZGVsIixoLmRjUGF0aCksZmUoNSksTWUoIm5nSWYiLCFoLmFkbWluR3JvdXBzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5hZG1pbkdyb3Vwc0xvYWRpbmcpLGZlKDUpLE1lKCJuZ0lmIiwhaC5jb21wdXRlQ29udGV4dHNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLmNvbXB1''@;'; put 'put ''dGVDb250ZXh0c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgucnVubmluZ0FzVXNlciksZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksd3IoaC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltucyxi''@;'; put 'put ''YSxBMixrMixxbCxUMixubCwkcyxIbCxvdSxLdSxkcyxaMSxFNyxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBlJD0oKT0+KHtzdGFuZGFsb25lOiEwfSk7ZnVuY3Rpb24gUEtlKGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw2KSgxLCJwIiw3KSxMZSgyLCJQbGVhc2Ug''@;'; put 'put ''bG9nIGluIGZpcnN0IiksaGUoKSxkZSgzLCJsYWJlbCIsOCksTGUoNCwiVXNlcm5hbWUiKSxoZSgpLGRlKDUsImRpdiIsOSkoNiwiZGl2IiwxMCksR3QoNywiaW5wdXQiLDExKSxoZSgpKCksZGUoOCwibGFiZWwiLDEyKSxMZSg5LCJQYXNzd29yZCIpLGhlKCksZGUoMTAsImRpdiIsOSkoMTEs''@;'; put 'put ''ImRpdiIsMTApLEd0KDEyLCJpbnB1dCIsMTMpLGhlKCkoKSxkZSgxMywiYnV0dG9uIiwxNCksTGUoMTQsIkxvZyBpbiIpLGhlKCkoKSl9ZnVuY3Rpb24gRktlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2''@;'; put 'put ''YWx1ZSIsYS5pZCksZmUoKSxEcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIEhLZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxEcigiKCAiLGEuYXR0cmlidXRlcy5zeXNVc2VySWQsIiApIil9fWZ1bmN0''@;'; put 'put ''aW9uIE5LZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGd0KDIsSEtlLDIsMSwic3BhbiIsNSksZWwoMywianNvbiIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEubmFtZSksZmUoKSxEcigiICIsYS5uYW1lLCIgIiksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsInt9IiE9RGMoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBWS2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksTGUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IiksaGUoKSl9ZnVuY3Rpb24gQktlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9u''@;'; put 'put ''IiwzNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSksR3QoMSwiY2xyLWljb24iLDM4KSxoZSgpfX1mdW5jdGlvbiBqS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwzOSksTGUo''@;'; put 'put ''MiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLGhlKCksR3QoMywiaHIiKSxkZSg0LCJkaXYiKSg1LCJidXR0b24iLDQwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxv''@;'; put 'put ''ZyIsInR4dCIpKX0pLExlKDYsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpLGxpKCl9fWZ1bmN0aW9uIHpLZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLERyKCIgIixhLm1ha2VEYXRhUmVzcG9uc2UsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24gVUtlKGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIsMjUpLExlKDIsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxoZSgpLGRlKDMsInNwYW4iKSxMZSg0LCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBaS2UoYyxsKXsxJmMmJihzaSgwKSxHdCgx''@;'; put 'put ''LCJjbHItaWNvbiIsNDYpLGRlKDIsInNwYW4iKSxMZSgzLCIgVmFsaWRhdGlvbiBmYWlsZWQgIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBXS2UoYyxsKXsxJmMmJihzaSgwKSxHdCgxLCJjbHItaWNvbiIsNDcpLGRlKDIsInNwYW4iKSxMZSgzLCIgVmFsaWRhdGlvbiBzdWNjZWVkZWQgIiksaGUo''@;'; put 'put ''KSxsaSgpKX1mdW5jdGlvbiBZS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ1KSxndCgxLFVLZSw1LDAsIm5nLWNvbnRhaW5lciIsNSkoMixaS2UsNCwwLCJuZy1jb250YWluZXIiLDUpKDMsV0tlLDQsMCwibmctY29udGFpbmVyIiw1KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsYS5pc1ZhbGlkYXRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxmZSgpLE1lKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJzdWNjZXNzIj09PWEudmFsaWRhdGlvblN0YXRlKX19ZnVuY3Rpb24gR0tl''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwicCIsMzkpLExlKDIsIkNyZWF0ZSBEYXRhYmFzZSBDb21wbGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZ3QoNCx6S2UsMiwxLCJkaXYiLDQxKSxkZSg1LCJidXR0b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KFJlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksTGUoNiwiIExldCdzIGdldCBzdGFydGVkICIpLGhlKCksZGUoNywiYnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFS''@;'; put 'put ''ZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLExlKDgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSxkZSg5LCJidXR0b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLnZhbGlkYXRlRGVwbG95KCkpfSksTGUoMTAsIiBWYWxpZGF0''@;'; put 'put ''ZSAiKSxoZSgpLGd0KDExLFlLZSw0LDMsImRpdiIsNDMpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApLGZlKDcpLE1lKCJuZ0lmIiwibm9uZSIhPT1hLnZhbGlkYXRpb25TdGF0ZXx8YS5pc1ZhbGlkYXRpbmcp''@;'; put 'put ''fX1mdW5jdGlvbiAkS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxMZSg0LCJBZG1pbiBncm91cCIpLGhlKCksZGUoNSwiZGl2IiwxNykoNiwiZGl2IiwxOCkoNywic2VsZWN0IiwxOSksZ2koIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5zZWxlY3RlZEFkbWluR3JvdXAsaCl8fChmLnNlbGVjdGVkQWRtaW5Hcm91cD1oKSxDdChoKX0pLGd0KDgsRktlLDIsMiwib3B0aW9uIiwyMCksaGUoKSgpKCkoKSxkZSg5LCJkaXYiLDE1KSgxMCwiZGl2''@;'; put 'put ''IikoMTEsImxhYmVsIiwxNiksTGUoMTIsIkNvbnRleHQiKSxoZSgpLGRlKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRDb250ZXh0LGgp''@;'; put 'put ''fHwoZi5zZWxlY3RlZENvbnRleHQ9aCksQ3QoaCl9KSxndCgxNixOS2UsNCw1LCJvcHRpb24iLDIwKSxoZSgpKCkoKSxkZSgxNywiYnV0dG9uIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmV4ZWN1dGFibGVDb250ZXh0KCkpfSksR3QoMTgsImNsci1p''@;'; put 'put ''Y29uIiwyMyksaGUoKSgpLGRlKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUpLExlKDIxLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpLGRlKDIyLCJzcGFuIiksTGUoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLGhlKCkoKSxkZSgyNCwibGFiZWwiLDI2KSxMZSgyNSwiREMgTG9j''@;'; put 'put ''IiksaGUoKSxkZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0IiwyNyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5kY1BhdGgsaCl8fChmLmRjUGF0aD1oKSxDdChoKX0pLEZ0KCJmb2N1c291dCIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zYXZlRGNQYXRoKCkpfSksaGUoKSgpKCksZGUoMjksInAiLDI4KSxMZSgzMCwiIFNlbGVjdCBKU09OIGZpbGUgdG8gdXBsb2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTogIiksaGUoKSxkZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0Iiwz''@;'; put 'put ''MCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSnNvbkZpbGVDaGFuZ2UoaCkpfSksaGUoKSgpLGRlKDMzLCJkaXYiLDMxKSgzNCwiYnV0''@;'; put 'put ''dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmV4ZWN1dGVKc29uKCkpfSksTGUoMzUsIiBTVUJNSVQgSlNPTiAiKSxoZSgpLGd0KDM2LFZLZSwyLDAsInNwYW4iLDUpLGhlKCksZGUoMzcsInAiLDI4KSxMZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRv''@;'; put 'put ''IHVwbG9hZDoiKSxoZSgpLGRlKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBmLm9u''@;'; put 'put ''U2FzRmlsZUNoYW5nZShoKSxDdChmLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSxoZSgpLGd0KDQxLEJLZSwyLDAsImJ1dHRvbiIsMzMpLGhlKCksZGUoNDIsImRpdiIsMzEpKDQzLCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZXhlY3V0ZVNB''@;'; put 'put ''UygpKX0pLExlKDQ0LCIgU1VCTUlUICIpLGhlKCkoKSgpLGd0KDQ1LGpLZSw3LDAsIm5nLWNvbnRhaW5lciIsNSksZGUoNDYsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jcmVhdGVEYXRhYmFzZSgpKX0pLExlKDQ3LCIgQ3JlYXRlIERh''@;'; put 'put ''dGFiYXNlICIpLGhlKCksZ3QoNDgsR0tlLDEyLDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDcpLHBpKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCksTWUoIm5nTW9kZWxPcHRpb25zIixHcygxOSxlJCkpLGZlKCksTWUoIm5nRm9y''@;'; put 'put ''T2YiLGEuYWRtaW5Hcm91cHMpLGZlKDIpLFRyKCJoaWRkZW4iLGEuY29udGV4dHNMb2FkaW5nKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbnRleHQpLE1lKCJuZ01vZGVsT3B0aW9ucyIsR3MoMjAsZSQpKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmFsbENvbnRleHRzKSxmZSgzKSxU''@;'; put 'put ''cigiaGlkZGVuIiwhYS5jb250ZXh0c0xvYWRpbmcpLGZlKDkpLHBpKCJuZ01vZGVsIixhLmRjUGF0aCksTWUoIm5nTW9kZWxPcHRpb25zIixHcygyMSxlJCkpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixhLmlzU3VibWl0dGluZ0pzb24pLGZlKDIpLE1lKCJuZ0lmIixhLmlzSnNvblN1Ym1pdHRl''@;'; put 'put ''ZCksZmUoNSksTWUoIm5nSWYiLGEuZG93bmxvYWRGaWxlQnRuKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5leGVjdXRpbmdTY3JpcHQpLGZlKDIpLE1lKCJuZ0lmIixhLmpvYkxvZy5sZW5ndGg+MCksZmUoKSxNZSgiY2xyTG9hZGluZyIsYS5jcmVhdGVEYXRhYmFzZUxvYWRpbmcpLGZlKDIp''@;'; put 'put ''LE1lKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgS0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLmRlcGxveVNlcnZpY2U9Zix0''@;'; put 'put ''aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3Rl''@;'; put 'put ''ZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNPZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0''@;'; put 'put ''aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2FkRmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSEx''@;'; put 'put ''LHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVybiBlZShmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5w''@;'; put 'put ''dXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZD1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWQubmFtZTtsZXQgaD1uZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD0oKT0+e2gucmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1oLnJlc3VsdC5z''@;'; put 'put ''cGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGY9PiIiIT09ZiYmbnVsbCE9PWYpLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGgucmVhZEFzVGV4dChkKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBk''@;'; put 'put ''PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1hZGRQcmVjb2RlTGluZXMoKXt0aGlzLmxpbmVzT2ZDb2RlLnVuc2hpZnQoYCVsZXQgY29udGV4dD0ke3RoaXMu''@;'; put 'put ''c2VsZWN0ZWRDb250ZXh0fTtgLGAlbGV0IGFwcExvYz0ke3RoaXMuYXBwTG9jfTtgLGAlbGV0IGFkbWluPSR7dGhpcy5zZWxlY3RlZEFkbWluR3JvdXB9O2AsYCVsZXQgZGNwYXRoPSR7dGhpcy5kY1BhdGh9O2ApfWRvd25sb2FkU2FzUHJlY29kZUZpbGUoKXtsZXQgYT10aGlzLmxpbmVzT2ZD''@;'; put 'put ''b2RlLmpvaW4oIlxuIiksZD10aGlzLmZpbGVOYW1lLnNwbGl0KCIuIilbMF07dGhpcy5kb3dubG9hZEZpbGUoYSxkLCJzYXMiKX1kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxkLGgpfXNhdmVEY1BhdGgoKXtsb2NhbFN0b3JhZ2Uu''@;'; put 'put ''c2V0SXRlbSgiZGVwbG95X2RjX2xvYyIsdGhpcy5kY1BhdGgpfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJT''@;'; put 'put ''ZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3RyaW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLHZvaWQg''@;'; put 'put ''YS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCl9YS5pc1N1Ym1pdHRpbmdKc29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9''@;'; put 'put ''ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZD15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOmEuZmlsZU5hbWUsbGluZXNPZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0TmFtZTphLnNlbGVjdGVkQ29udGV4dH0pO2EubG9nZ2VyU2Vy''@;'; put 'put ''dmljZS5sb2coZCksInN0cmluZyI9PXR5cGVvZiBkLmxvZyYmKGQubG9nPUpTT04ucGFyc2UoZC5sb2cpKSwiZXJyb3IiPT09ZC5qb2JTdGF0dXM/YWxlcnQoIkVycm9yISIpOmEuam9iTG9nPWQubG9nLml0ZW1zP2QubG9nLml0ZW1zLm1hcChoPT5oLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5z''@;'; put 'put ''dHJpbmdpZnkoZC5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2UoYT0hMCl7aWYoYSl7bGV0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9f''@;'; put 'put ''cHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwKyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3aW5kb3cub3BlbihmLCJfYmxhbmsiKX1lbHNlIHRoaXMuY3Jl''@;'; put 'put ''YXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVBcGk6bnVsbCxjb250ZXh0TmFtZTp0aGlz''@;'; put 'put ''LnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhp''@;'; put 'put ''cy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3Ro''@;'; put 'put ''aXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzPyJzdWNjZXNzIjoiZXJyb3IiLHRoaXMuaXNWYWxpZGF0aW5nPSExfSkuY2F0Y2goYT0+e3RoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJlcnJvciJ9KX1kZWxldGVLZXlz''@;'; put 'put ''KCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImRlcGxveV9kY19sb2MiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UodmMpLEdlKFNkKSxHZShLaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbImFwcC1tYW51YWwtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNs''@;'; put 'put ''czo5LHZhcnM6Myxjb25zdHM6W1sxLCJjYXJkLWhlYWRlciIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImQtaW5saW5lLWJsb2NrIiwibWwtMTAiLCJtYi0xMCIsIm10LTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJjbGVhci1tZW1vcnktYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUi''@;'; put 'put ''LDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwibG9naW5Gb3JtIiwiY2xhc3MiLCJkLW5vbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiaWQiLCJsb2dpbkZvcm0iLDEsImQtbm9uZSJdLFsxLCJtYi0xMCJdLFsiZm9yIiwidXNlcm5hbWUiLDEsImNsci1jb250cm9sLWxhYmVs''@;'; put 'put ''Il0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJ0eXBlIiwidGV4dCIsImlkIiwidXNlcm5hbWUiLDEsImNsci1pbnB1dCJdLFsiZm9yIiwicGFzc3dvcmQiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWyJ0eXBlIiwicGFzc3dv''@;'; put 'put ''cmQiLCJpZCIsInBhc3N3b3JkIiwxLCJjbHItaW5wdXQiXSxbImlkIiwibG9naW5CdG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1ub25lIl0sWzEsImNsci1mb3JtLWNvbnRyb2wiXSxbImZvciIsInNlbGVjdC1mdWxsIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJv''@;'; put 'put ''bC1jb250YWluZXIiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWyJuYW1lIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwiaWQiLCJhZG1pbkdyb3Vwc1NlbGVjdCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFszLCJ2YWx1ZSIs''@;'; put 'put ''NCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJjb250ZXh0cy1idG4iLDEsImJ0biIsImJ0bi1pY29uIiwz''@;'; put 'put ''LCJjbGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0xMCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5hbWUiLCJkY1BhdGgiLCJ0eXBlIiwidGV4dCIsImlkIiwiZGNs''@;'; put 'put ''b2MiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIsMywiY2xpY2siLCJjaGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZs''@;'; put 'put ''ZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4taWNvbiBtaW4tdy0wIHctNDAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJpZCIsImRlcGxveSIsMSwibXQtMCIsMywiY2xpY2si''@;'; put 'put ''LCJjbHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJ2YWx1ZSJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsIm1pbi13LTAiLCJ3LTQwIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJt''@;'; put 'put ''Yi0wIiwibXQtMTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0wIiwibXItMjAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInZhbGlkYXRpb24tYmFyIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIl0sWzEsInZhbGlkYXRpb24tYmFyIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwiaXMtZXJyb3IiXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJpcy1zdWNjZXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUo''@;'; put 'put ''MCwiZGl2IiwwKSxMZSgxLCIgQ29uZmlndXJhdG9yICIpLGRlKDIsInAiLDEpLExlKDMpLGhlKCksZGUoNCwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZGVsZXRlS2V5cygpfSksTGUoNSwiIENsZWFyIG1lbW9yeSAiKSxoZSgpKCksZGUoNiwiZGl2IiwzKSxn''@;'; put 'put ''dCg3LFBLZSwxNSwwLCJkaXYiLDQpKDgsJEtlLDQ5LDIyLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImZCYmKGZlKDMpLERyKCJBcHAgTG9jYXRpb246ICIsaC5hcHBMb2MsIiIpLGZlKDQpLE1lKCJuZ0lmIixoLm5lZWRzTG9naW4pLGZlKCksTWUoIm5nSWYiLCFoLm5lZWRzTG9naW4pKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltucyxiYSxsNyxBMixrMixxbCxUMixubCxvNywkcyx5cCxIbCxqMCxQMixkcyxlWl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBxS2UoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE1KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IFhLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuR1JPVVBOQU1FKSxmZSgpLFV1KCIgIixhLkdST1VQTkFNRSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgSktlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgS3IsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlz''@;'; put 'put ''LmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2Vy''@;'; put 'put ''dmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2''@;'; put 'put ''L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuYWRhcHRlclJlc3BvbnNlLk1GX0dFVFVTRVIsdGhpcy5TWVNVU0VSSUQ9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVVNFUklELHRoaXMuU1lTSE9TVE5BTUU9YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9T''@;'; put 'put ''VE5BTUUsdGhpcy5TWVNWTE9ORz1hLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyx0aGlzLmRjRGlyZWN0b3J5PXRoaXMudG1wRGlyZWN0b3JpZXNbWyJMIiwiSCIsIkEiLCJTIl0uaW5jbHVkZXMoYS5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2lu''@;'; put 'put ''ZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09QjAuWS5TYXNqcz90aGlzLnNh''@;'; put 'put ''c1NlcnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihEPT57RCYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5v''@;'; put 'put ''cmlnaW4rZCsiLyIsdj1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7dn0gYCwiX2JsYW5rIil9''@;'; put 'put ''bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShWY2UpLEdlKGZoKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2FzanMt''@;'; put 'put ''Y29uZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0NCx2YXJzOjEw''@;'; put 'put ''LGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJl''@;'; put 'put ''bCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUw''@;'; put 'put ''dnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4''@;'; put 'put ''dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLHFLZSwyLDAsImRpdiIsMCksZGUoMSwiaDQiLDEpLExlKDIsIlNhc2pzIERlcGxveSIpLGhl''@;'; put 'put ''KCksR3QoMywiaHIiLDIpLGRlKDQsInAiLDMpLExlKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSxoZSgpLGRlKDYsInAiLDQpLExlKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNp''@;'; put 'put ''Y2FsIGRpcmVjdG9yeSAob24gdGhlICIpLGRlKDgsInN0cm9uZyIpLExlKDkpLGhlKCksTGUoMTAsIiBjb21wdXRlIHNlcnZlcikgYmVsb3csIHRvIHdoaWNoIHVzZXIgIiksZGUoMTEsInN0cm9uZyIpLExlKDEyKSxoZSgpLExlKDEzLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBD''@;'; put 'put ''b250cm9sbGVyLlxuIiksaGUoKSxkZSgxNCwibGFiZWwiLDUpLExlKDE1LCJEQyBTdGFnaW5nIERpcmVjdG9yeSIpLGhlKCksZGUoMTYsImRpdiIsNikoMTcsImRpdiIsNykoMTgsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGNEaXJlY3Rv''@;'; put 'put ''cnksdil8fChoLmRjRGlyZWN0b3J5PXYpLHZ9KSxoZSgpKCkoKSxkZSgxOSwicCIsNCksTGUoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRt''@;'; put 'put ''aW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDIxLCJsYWJlbCIsNSksTGUoMjIsIkRhdGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLGhlKCksZGUoMjMsImNsci1zZWxlY3Qt''@;'; put 'put ''Y29udGFpbmVyIiw5KSgyNCwic2VsZWN0IiwxMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjQWRtaW5Hcm91cCx2KXx8KGguZGNBZG1pbkdyb3VwPXYpLHZ9KSxndCgyNSxYS2UsMiwzLCJvcHRpb24iLDExKSxoZSgpKCksZGUoMjYsInAiLDQpLExlKDI3''@;'; put 'put ''LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLGhlKCksZGUoMjgsImRpdiIsMTIpKDI5LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGgubWFrZURhdGEoKX0pLExlKDMwLCIgU1VCTUlUICIpLGhlKCkoKSxHdCgzMSwiaHIiLDIpLGRlKDMyLCJkaXYiLDE0KSgzMywicCIpLExlKDM0LCJZb3UgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6IiksaGUoKSxkZSgzNSwidWwiKSgz''@;'; put 'put ''NiwibGkiKSxMZSgzNyksaGUoKSxkZSgzOCwibGkiKSxMZSgzOSksaGUoKSxkZSg0MCwibGkiKSxMZSg0MSksaGUoKSxkZSg0MiwibGkiKSxMZSg0MyksaGUoKSgpKCkpLDImZCYmKE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKDkpLERyKCIgIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgzKSx3ciho''@;'; put 'put ''LlNZU1VTRVJJRCksZmUoNikscGkoIm5nTW9kZWwiLGguZGNEaXJlY3RvcnkpLGZlKDYpLHBpKCJuZ01vZGVsIixoLmRjQWRtaW5Hcm91cCksZmUoKSxNZSgibmdGb3JPZiIsaC5kY0FkbWluR3JvdXBMaXN0KSxmZSgxMiksRHIoIk1FVEFQRVJTT046ICIsaC5NRVRBUEVSU09OLCIiKSxmZSgy''@;'; put 'put ''KSxEcigiU1lTVVNFUklEOiAiLGguU1lTVVNFUklELCIiKSxmZSgyKSxEcigiU1lTSE9TVE5BTUU6ICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMiksRHIoIlNZU1ZMT05HOiAiLGguU1lTVkxPTkcsIiIpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxBMixrMixxbCxUMixubCwkcyxkcyxFNywkeV0s''@;'; put 'put ''ZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBRS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksTGUoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSxoZSgpLGRlKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiw4KSxM''@;'; put 'put ''ZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBCZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwg''@;'; put 'put ''YW5kIGFncmVlZCB0byB0aGUgIiksZGUoNywiYSIsOSksTGUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSxMZSg5LCIuICIpLGhlKCkoKSxHdCgxMCwiaHIiLDEwKSxkZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5w''@;'; put 'put ''dXQiLDExKSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEzLCJsYWJlbCIpLExlKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxkZSgxNSwiYSIsOSksTGUoMTYs''@;'; put 'put ''IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gZXFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNikoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE3KSxGdCgib25OYXZpZ2F0ZVRv''@;'; put 'put ''SG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixh''@;'; put 'put ''LmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gdHFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxOCkoMSwiYXBwLW1h''@;'; put 'put ''bnVhbC1kZXBsb3kiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5z''@;'; put 'put ''YXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gbnFlKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxlcWUsMiw2LCJkaXYiLDE0KSgyLHRxZSwyLDMsImRpdiIsMTUpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJu''@;'; put 'put ''Z0lmIixhLmF1dG9kZXBsb3kpLGZlKCksTWUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBycWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDE2KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOSksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5k''@;'; put 'put ''Y0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIGlxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMiku''@;'; put 'put ''b25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gYXFl''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoc2koMCwxMiksZ3QoMSxucWUsMywyLCJuZy1jb250YWluZXIiLDEzKSgyLHJxZSwzLDMsIm5nLWNvbnRhaW5lciIsMTMpKDMsaXFlLDMsMywibmctY29udGFpbmVyIiwxMyksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7TWUoIm5nU3dpdGNoIiwhMCksZmUoKSxNZSgi''@;'; put 'put ''bmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0Nv''@;'; put 'put ''bmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgUWhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3Rl''@;'; put 'put ''cD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5z''@;'; put 'put ''YXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlz''@;'; put 'put ''LmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlzLnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5j''@;'; put 'put ''bGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRfc2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xv''@;'; put 'put ''YyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2V0RGVwbG95RGVmYXVsdHMoKX1zZXREZXBsb3lEZWZhdWx0cygpe3RoaXMuZGNQYXRoPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmRjUGF0aHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYWRtaW5H''@;'; put 'put ''cm91cHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXB8fCh0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiKX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hdXRvZGVwbG95fHx0aGlzLmdldEFkbWluR3JvdXBzKCksdGhpcy5zdGVwKyt9Z2V0QWRtaW5Hcm91cHMo''@;'; put 'put ''KXtmZXRjaCh0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PTUwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkO3RyeXtkPUpTT04ucGFy''@;'; put 'put ''c2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5hZG1pbkdyb3Vwcz1kLml0ZW1zLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuYWRtaW5Hcm91cHNbMF0uaWQpfSl9b25OYXZpZ2F0ZVRvSG9tZSgpe3dpbmRvdy5vcGVuKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMi''@;'; put 'put ''KVswXSwiX2JsYW5rIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoUTgpLEdlKEJzKSxHZShTZCksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJz''@;'; put 'put ''OlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImNsci1yb3ciXSxbImlkIiwiVENTIiwiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJp''@;'; put 'put ''ZCIsIlRDUyIsMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJtdC0wIl0sWyJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2V2YWx1YXRpb24tbGljZW5jZS1hZ3JlZW1lbnQiLCJ0YXJnZXQiLCJfYmxh''@;'; put 'put ''bmsiXSxbMSwibGlnaHQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJjaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImF1dG9kZXBsb3ktc2VjdGlvbiBjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm1haW5ib2R5IiwiY2xh''@;'; put 'put ''c3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImF1dG9kZXBsb3ktc2VjdGlvbiIsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsImFwcExvYyIsImRjUGF0aCIsInNlbGVjdGVkQWRtaW5Hcm91cCJdLFsiaWQiLCJt''@;'; put 'put ''YWluYm9keSIsMSwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsUUtlLDE3LDAsImRpdiIsMiksaGUo''@;'; put 'put ''KSxndCgzLGFxZSw0LDQsIm5nLWNvbnRhaW5lciIsMyksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLDA9PT1oLnN0ZXApLGZlKCksTWUoIm5nSWYiLGguc3RlcD4wKSl9LGRlcGVuZGVuY2llczpbYmEsUzIsY3AsZHMsSWQsU2gsT0tlLEtLZSxKS2VdLGVuY2Fwc3VsYXRpb246Mn0pfX1y''@;'; put 'put ''ZXR1cm4gY30pKCk7Y29uc3Qgb3FlPVt7cGF0aDoiIixjb21wb25lbnQ6UWhlfSx7cGF0aDoibWFudWFsZGVwbG95Iixjb21wb25lbnQ6UWhlfV07bGV0IHNxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQob3FlKSx6Y119KX19cmV0dXJuIGN9KSgpLGxxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsejAsc3FlXX0pfX1yZXR1cm4gY30pKCk7eSg0OTUzNykseSg3NzUyNSkseSg1NzcyKSx5KDY5ODc1KSx5KDE2MDkzKSx5KDk1NjA4KSx5KDE2NDkz''@;'; put 'put ''KSx5KDYxOTM0KSx5KDEwMTAxKSx5KDI2ODg5KSx5KDQzMjg3KSx5KDY1NzQ1KSx5KDI5NzA4KSx5KDY1MTE3KSx5KDEwMzYzKTtjb25zdHtlbnRyaWVzOmUyZSxzZXRQcm90b3R5cGVPZjp0MmUsaXNGcm96ZW46Y3FlLGdldFByb3RvdHlwZU9mOnVxZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0''@;'; put 'put ''b3I6ZHFlfT1PYmplY3Q7bGV0e2ZyZWV6ZTpZMSxzZWFsOkgyLGNyZWF0ZTpuMmV9PU9iamVjdCx7YXBwbHk6dCQsY29uc3RydWN0Om4kfT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7WTF8fChZMT1mdW5jdGlvbihsKXtyZXR1cm4gbH0pLEgyfHwoSDI9ZnVuY3Rpb24obCl7cmV0dXJu''@;'; put 'put ''IGx9KSx0JHx8KHQkPWZ1bmN0aW9uKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfSksbiR8fChuJD1mdW5jdGlvbihsLGEpe3JldHVybiBuZXcgbCguLi5hKX0pO2NvbnN0IFRPPSQxKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxocWU9JDEoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9m''@;'; put 'put ''KSxyMmU9JDEoQXJyYXkucHJvdG90eXBlLnBvcCksc0U9JDEoQXJyYXkucHJvdG90eXBlLnB1c2gpLGZxZT0kMShBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxBTz0kMShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxyJD0kMShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxpMmU9JDEo''@;'; put 'put ''U3RyaW5nLnByb3RvdHlwZS5tYXRjaCksbEU9JDEoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxwcWU9JDEoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxncWU9JDEoU3RyaW5nLnByb3RvdHlwZS50cmltKSx0Mz0kMShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxHMT0kMShS''@;'; put 'put ''ZWdFeHAucHJvdG90eXBlLnRlc3QpLGNFPWZ1bmN0aW9uIG1xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbiQoYyxhKX19KFR5cGVFcnJvcik7ZnVuY3Rp''@;'; put 'put ''b24gJDEoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2wgaW5zdGFuY2VvZiBSZWdFeHAmJihsLmxhc3RJbmRleD0wKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHQkKGMsbCxkKX19''@;'; put 'put ''ZnVuY3Rpb24gYnMoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06QU87dDJlJiZ0MmUoYyxudWxsKTtsZXQgZD1sLmxlbmd0aDtmb3IoO2QtLTspe2xldCBoPWxbZF07aWYoInN0cmluZyI9PXR5cGVvZiBoKXtjb25zdCBm''@;'; put 'put ''PWEoaCk7ZiE9PWgmJihjcWUobCl8fChsW2RdPWYpLGg9Zil9Y1toXT0hMH1yZXR1cm4gY31mdW5jdGlvbiB2cWUoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspdDMoYyxsKXx8KGNbbF09bnVsbCk7cmV0dXJuIGN9ZnVuY3Rpb24gbWcoYyl7Y29uc3QgbD1uMmUobnVsbCk7Zm9yKGNv''@;'; put 'put ''bnN0W2EsZF1vZiBlMmUoYykpdDMoYyxhKSYmKGxbYV09QXJyYXkuaXNBcnJheShkKT92cWUoZCk6ZCYmIm9iamVjdCI9PXR5cGVvZiBkJiZkLmNvbnN0cnVjdG9yPT09T2JqZWN0P21nKGQpOmQpO3JldHVybiBsfWZ1bmN0aW9uIHVFKGMsbCl7Zm9yKDtudWxsIT09Yzspe2NvbnN0IGQ9ZHFl''@;'; put 'put ''KGMsbCk7aWYoZCl7aWYoZC5nZXQpcmV0dXJuICQxKGQuZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC52YWx1ZSlyZXR1cm4gJDEoZC52YWx1ZSl9Yz11cWUoYyl9cmV0dXJuIGZ1bmN0aW9uIGEoKXtyZXR1cm4gbnVsbH19Y29uc3QgYTJlPVkxKFsiYSIsImFiYnIiLCJhY3JvbnltIiwi''@;'; put 'put ''YWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIs''@;'; put 'put ''ImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZv''@;'; put 'put ''cm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51''@;'; put 'put ''aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3Vy''@;'; put 'put ''Y2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwi''@;'; put 'put ''LCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxpJD1ZMShbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwi''@;'; put 'put ''ZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFk''@;'; put 'put ''aWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksYSQ9WTEoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIi''@;'; put 'put ''LCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3Np''@;'; put 'put ''YW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksYnFlPVkxKFsiYW5pbWF0ZSIsImNv''@;'; put 'put ''bG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRp''@;'; put 'put ''ZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxvJD1ZMShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0''@;'; put 'put ''ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIi''@;'; put 'put ''LCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSkseXFlPVkxKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRp''@;'; put 'put ''b24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxvMmU9WTEoWyIjdGV4dCJdKSxzMmU9WTEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxh''@;'; put 'put ''eSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMi''@;'; put 'put ''LCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZh''@;'; put 'put ''Y2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVu''@;'; put 'put ''Z3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9w''@;'; put 'put ''b3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVj''@;'; put 'put ''ayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24i''@;'; put 'put ''LCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxzJD1ZMShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6''@;'; put 'put ''aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9u''@;'; put 'put ''LWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50Iiwi''@;'; put 'put ''ZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQt''@;'; put 'put ''dmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIs''@;'; put 'put ''ImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2Nh''@;'; put 'put ''bCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFt''@;'; put 'put ''ZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFu''@;'; put 'put ''c2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3Vs''@;'; put 'put ''dCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0''@;'; put 'put ''b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNj''@;'; put 'put ''YWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBl''@;'; put 'put ''IiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNl''@;'; put 'put ''bGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLGwyZT1ZMShbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGlu''@;'; put 'put ''ZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1''@;'; put 'put ''b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3Nw''@;'; put 'put ''YW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRy''@;'; put 'put ''aWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxrTz1ZMShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLF9xZT1IMigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLHdxZT1IMigvPCVbXHdcV10qfFtcd1xXXSol''@;'; put 'put ''Pi9nbSksQ3FlPUgyKC9cJFx7W1x3XFddKi9nbSksU3FlPUgyKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXSskLyksTXFlPUgyKC9eYXJpYS1bXC1cd10rJC8pLGMyZT1IMigvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHB8bWF0cml4KTp8W15h''@;'; put 'put ''LXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSkseHFlPUgyKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxFcWU9SDIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksdTJlPUgyKC9eaHRtbCQvaSksVHFlPUgyKC9e''@;'; put 'put ''W2Etel1bLlx3XSooLVsuXHddKykrJC9pKTt2YXIgZDJlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjpNcWUsQVRUUl9XSElURVNQQUNFOkVxZSxDVVNUT01fRUxFTUVOVDpUcWUsREFUQV9BVFRSOlNxZSxET0NUWVBFX05BTUU6dTJlLEVSQl9FWFBSOndxZSxJU19B''@;'; put 'put ''TExPV0VEX1VSSTpjMmUsSVNfU0NSSVBUX09SX0RBVEE6eHFlLE1VU1RBQ0hFX0VYUFI6X3FlLFRNUExJVF9FWFBSOkNxZX0pO3ZhciBEcWU9ZnVuY3Rpb24gZjJlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3''@;'; put 'put ''aW5kb3c+InUiP251bGw6d2luZG93O2NvbnN0IGw9Y289PmYyZShjbyk7aWYobC52ZXJzaW9uPSIzLjIuNiIsbC5yZW1vdmVkPVtdLCFjfHwhYy5kb2N1bWVudHx8OSE9PWMuZG9jdW1lbnQubm9kZVR5cGV8fCFjLkVsZW1lbnQpcmV0dXJuIGwuaXNTdXBwb3J0ZWQ9ITEsbDtsZXR7ZG9jdW1l''@;'; put 'put ''bnQ6YX09Yztjb25zdCBkPWEsaD1kLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6ZixIVE1MVGVtcGxhdGVFbGVtZW50OnYsTm9kZTpNLEVsZW1lbnQ6RCxOb2RlRmlsdGVyOlosTmFtZWROb2RlTWFwOnJlPWMuTmFtZWROb2RlTWFwfHxjLk1vek5hbWVkQXR0ck1hcCxIVE1MRm9y''@;'; put 'put ''bUVsZW1lbnQ6Y2UsRE9NUGFyc2VyOmJlLHRydXN0ZWRUeXBlczpFZX09YyxCZT1ELnByb3RvdHlwZSxxZT11RShCZSwiY2xvbmVOb2RlIikscnQ9dUUoQmUsInJlbW92ZSIpLHB0PXVFKEJlLCJuZXh0U2libGluZyIpLGR0PXVFKEJlLCJjaGlsZE5vZGVzIiksSnQ9dUUoQmUsInBhcmVudE5v''@;'; put 'put ''ZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygdil7Y29uc3QgY289YS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2NvLmNvbnRlbnQmJmNvLmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGE9Y28uY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgdm4sQ249IiI7Y29uc3R7aW1wbGVtZW50YXRp''@;'; put 'put ''b246dG4sY3JlYXRlTm9kZUl0ZXJhdG9yOk1uLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6Q3IsZ2V0RWxlbWVudHNCeVRhZ05hbWU6R3J9PWEse2ltcG9ydE5vZGU6bXJ9PWQ7bGV0IEduPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJT''@;'; put 'put ''YW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFk''@;'; put 'put ''b3dOb2RlOltdfTtsLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBlMmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBKdCYmdG4mJnZvaWQgMCE9PXRuLmNyZWF0ZUhUTUxEb2N1bWVudDtjb25zdHtNVVNUQUNIRV9FWFBSOmFpLEVSQl9FWFBSOl9pLFRNUExJVF9FWFBSOk9uLERBVEFfQVRU''@;'; put 'put ''Ujp6cixBUklBX0FUVFI6Sm4sSVNfU0NSSVBUX09SX0RBVEE6SXIsQVRUUl9XSElURVNQQUNFOiRyLENVU1RPTV9FTEVNRU5UOndpfT1kMmU7bGV0e0lTX0FMTE9XRURfVVJJOmVhfT1kMmUsZmE9bnVsbDtjb25zdCB2dD1icyh7fSxbLi4uYTJlLC4uLmkkLC4uLmEkLC4uLm8kLC4uLm8yZV0p''@;'; put 'put ''O2xldCBOdD1udWxsO2NvbnN0IEh0PWJzKHt9LFsuLi5zMmUsLi4ucyQsLi4ubDJlLC4uLmtPXSk7bGV0IEhuPU9iamVjdC5zZWFsKG4yZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5h''@;'; put 'put ''bWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksdHI9bnVsbCxhcj1udWxs''@;'; put 'put ''LEhyPSEwLHFyPSEwLG9uPSExLHluPSEwLHBuPSExLHByPSEwLCRuPSExLGRyPSExLFVyPSExLFpuPSExLHNyPSExLE5yPSExLE1yPSEwLFpyPSExLEJhPSEwLElvPSExLFpvPXt9LHBzPW51bGw7Y29uc3QgTW89YnMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJk''@;'; put 'put ''ZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUi''@;'; put 'put ''LCJ2aWRlbyIsInhtcCJdKTtsZXQgaHM9bnVsbDtjb25zdCBuYz1icyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBRbz1udWxsO2NvbnN0IE0zPWJzKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBh''@;'; put 'put ''dHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksYWQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLFVzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsSmM9Imh0dHA6Ly93d3cudzMub3Jn''@;'; put 'put ''LzE5OTkveGh0bWwiO2xldCBxcz1KYyxCbD0hMSxlcz1udWxsO2NvbnN0IEUxPWJzKHt9LFthZCxVcyxKY10sciQpO2xldCB4Mz1icyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksUWc9YnMoe30sWyJhbm5vdGF0aW9uLXhtbCJdKTtjb25zdCBkND1icyh7fSxbInRpdGxlIiwi''@;'; put 'put ''c3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKTtsZXQgYXY9bnVsbDtjb25zdCBWQT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdO2xldCAkYT1udWxsLHg2PW51bGw7Y29uc3QgV3RlPWEuY3JlYXRlRWxlbWVudCgiZm9ybSIpLFpOPWZ1bmN0aW9uKGdyKXtyZXR1cm4g''@;'; put 'put ''Z3IgaW5zdGFuY2VvZiBSZWdFeHB8fGdyIGluc3RhbmNlb2YgRnVuY3Rpb259LEJBPWZ1bmN0aW9uKCl7bGV0IGdyPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZigheDZ8fHg2IT09Z3Ipe2lmKCghZ3J8fCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgZ3IpJiYoZ3I9e30pLGdyPW1nKGdyKSxhdj0tMT09PVZBLmluZGV4T2YoZ3IuUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOmdyLlBBUlNFUl9NRURJQV9UWVBFLCRhPSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09YXY/ciQ6QU8sZmE9dDMoZ3IsIkFMTE9XRURfVEFHUyIpP2Jz''@;'; put 'put ''KHt9LGdyLkFMTE9XRURfVEFHUywkYSk6dnQsTnQ9dDMoZ3IsIkFMTE9XRURfQVRUUiIpP2JzKHt9LGdyLkFMTE9XRURfQVRUUiwkYSk6SHQsZXM9dDMoZ3IsIkFMTE9XRURfTkFNRVNQQUNFUyIpP2JzKHt9LGdyLkFMTE9XRURfTkFNRVNQQUNFUyxyJCk6RTEsUW89dDMoZ3IsIkFERF9VUklf''@;'; put 'put ''U0FGRV9BVFRSIik/YnMobWcoTTMpLGdyLkFERF9VUklfU0FGRV9BVFRSLCRhKTpNMyxocz10MyhnciwiQUREX0RBVEFfVVJJX1RBR1MiKT9icyhtZyhuYyksZ3IuQUREX0RBVEFfVVJJX1RBR1MsJGEpOm5jLHBzPXQzKGdyLCJGT1JCSURfQ09OVEVOVFMiKT9icyh7fSxnci5GT1JCSURfQ09O''@;'; put 'put ''VEVOVFMsJGEpOk1vLHRyPXQzKGdyLCJGT1JCSURfVEFHUyIpP2JzKHt9LGdyLkZPUkJJRF9UQUdTLCRhKTptZyh7fSksYXI9dDMoZ3IsIkZPUkJJRF9BVFRSIik/YnMoe30sZ3IuRk9SQklEX0FUVFIsJGEpOm1nKHt9KSxabz0hIXQzKGdyLCJVU0VfUFJPRklMRVMiKSYmZ3IuVVNFX1BST0ZJ''@;'; put 'put ''TEVTLEhyPSExIT09Z3IuQUxMT1dfQVJJQV9BVFRSLHFyPSExIT09Z3IuQUxMT1dfREFUQV9BVFRSLG9uPWdyLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSx5bj0hMSE9PWdyLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUixwbj1nci5TQUZFX0ZPUl9URU1QTEFURVN8fCExLHByPSExIT09''@;'; put 'put ''Z3IuU0FGRV9GT1JfWE1MLCRuPWdyLldIT0xFX0RPQ1VNRU5UfHwhMSxabj1nci5SRVRVUk5fRE9NfHwhMSxzcj1nci5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxOcj1nci5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxVcj1nci5GT1JDRV9CT0RZfHwhMSxNcj0hMSE9PWdyLlNBTklUSVpFX0RP''@;'; put 'put ''TSxacj1nci5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsQmE9ITEhPT1nci5LRUVQX0NPTlRFTlQsSW89Z3IuSU5fUExBQ0V8fCExLGVhPWdyLkFMTE9XRURfVVJJX1JFR0VYUHx8YzJlLHFzPWdyLk5BTUVTUEFDRXx8SmMseDM9Z3IuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTfHx4''@;'; put 'put ''MyxRZz1nci5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UU3x8UWcsSG49Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZaTihnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoSG4udGFnTmFtZUNoZWNrPWdyLkNV''@;'; put 'put ''U1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJlpOKGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihIbi5hdHRyaWJ1dGVOYW1lQ2hlY2s9Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcu''@;'; put 'put ''YXR0cmlidXRlTmFtZUNoZWNrKSxnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2YgZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoSG4uYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPWdyLkNV''@;'; put 'put ''U1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cykscG4mJihxcj0hMSksc3ImJihabj0hMCksWm8mJihmYT1icyh7fSxvMmUpLE50PVtdLCEwPT09Wm8uaHRtbCYmKGJzKGZhLGEyZSksYnMoTnQsczJlKSksITA9PT1aby5zdmcmJihicyhmYSxpJCks''@;'; put 'put ''YnMoTnQscyQpLGJzKE50LGtPKSksITA9PT1aby5zdmdGaWx0ZXJzJiYoYnMoZmEsYSQpLGJzKE50LHMkKSxicyhOdCxrTykpLCEwPT09Wm8ubWF0aE1sJiYoYnMoZmEsbyQpLGJzKE50LGwyZSksYnMoTnQsa08pKSksZ3IuQUREX1RBR1MmJihmYT09PXZ0JiYoZmE9bWcoZmEpKSxicyhmYSxn''@;'; put 'put ''ci5BRERfVEFHUywkYSkpLGdyLkFERF9BVFRSJiYoTnQ9PT1IdCYmKE50PW1nKE50KSksYnMoTnQsZ3IuQUREX0FUVFIsJGEpKSxnci5BRERfVVJJX1NBRkVfQVRUUiYmYnMoUW8sZ3IuQUREX1VSSV9TQUZFX0FUVFIsJGEpLGdyLkZPUkJJRF9DT05URU5UUyYmKHBzPT09TW8mJihwcz1tZyhw''@;'; put 'put ''cykpLGJzKHBzLGdyLkZPUkJJRF9DT05URU5UUywkYSkpLEJhJiYoZmFbIiN0ZXh0Il09ITApLCRuJiZicyhmYSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxmYS50YWJsZSYmKGJzKGZhLFsidGJvZHkiXSksZGVsZXRlIHRyLnRib2R5KSxnci5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYoImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIGdyLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwpdGhyb3cgY0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnci5U''@;'; put 'put ''UlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwpdGhyb3cgY0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7dm49Z3IuVFJVU1RFRF9UWVBFU19QT0xJQ1ksQ249dm4uY3Jl''@;'; put 'put ''YXRlSFRNTCgiIil9ZWxzZSB2b2lkIDA9PT12biYmKHZuPWZ1bmN0aW9uKGwsYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBoPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2EmJmEu''@;'; put 'put ''aGFzQXR0cmlidXRlKGgpJiYoZD1hLmdldEF0dHJpYnV0ZShoKSk7Y29uc3QgZj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBsLmNyZWF0ZVBvbGljeShmLHtjcmVhdGVIVE1MOnY9PnYsY3JlYXRlU2NyaXB0VVJMOnY9PnZ9KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJu''@;'; put 'put ''KCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrZisiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fShFZSxoKSksbnVsbCE9PXZuJiYic3RyaW5nIj09dHlwZW9mIENuJiYoQ249dm4uY3JlYXRlSFRNTCgiIikpO1kxJiZZMShncikseDY9Z3J9fSxXTj1icyh7fSxbLi4uaSQsLi4uYSQsLi4u''@;'; put 'put ''YnFlXSksWU49YnMoe30sWy4uLm8kLC4uLnlxZV0pLFl0PWZ1bmN0aW9uKGdyKXtzRShsLnJlbW92ZWQse2VsZW1lbnQ6Z3J9KTt0cnl7SnQoZ3IpLnJlbW92ZUNoaWxkKGdyKX1jYXRjaHtydChncil9fSx2MD1mdW5jdGlvbihncixRaSl7dHJ5e3NFKGwucmVtb3ZlZCx7YXR0cmlidXRlOlFp''@;'; put 'put ''LmdldEF0dHJpYnV0ZU5vZGUoZ3IpLGZyb206UWl9KX1jYXRjaHtzRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206UWl9KX1pZihRaS5yZW1vdmVBdHRyaWJ1dGUoZ3IpLCJpcyI9PT1ncilpZihabnx8c3IpdHJ5e1l0KFFpKX1jYXRjaHt9ZWxzZSB0cnl7UWkuc2V0QXR0cmlidXRl''@;'; put 'put ''KGdyLCIiKX1jYXRjaHt9fSxacz1mdW5jdGlvbihncil7bGV0IFFpPW51bGwsWGE9bnVsbDtpZihVcilncj0iPHJlbW92ZT48L3JlbW92ZT4iK2dyO2Vsc2V7Y29uc3QgUnU9aTJlKGdyLC9eW1xyXG5cdCBdKy8pO1hhPVJ1JiZSdVswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWF2JiZx''@;'; put 'put ''cz09PUpjJiYoZ3I9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytncisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBkYz12bj92bi5jcmVhdGVIVE1MKGdyKTpncjtpZihxcz09PUpjKXRyeXtRaT0obmV3IGJlKS5wYXJzZUZy''@;'; put 'put ''b21TdHJpbmcoZGMsYXYpfWNhdGNoe31pZighUWl8fCFRaS5kb2N1bWVudEVsZW1lbnQpe1FpPXRuLmNyZWF0ZURvY3VtZW50KHFzLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e1FpLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9Qmw/Q246ZGN9Y2F0Y2h7fX1jb25zdCBBMD1RaS5ib2R5fHxRaS5k''@;'; put 'put ''b2N1bWVudEVsZW1lbnQ7cmV0dXJuIGdyJiZYYSYmQTAuaW5zZXJ0QmVmb3JlKGEuY3JlYXRlVGV4dE5vZGUoWGEpLEEwLmNoaWxkTm9kZXNbMF18fG51bGwpLHFzPT09SmM/R3IuY2FsbChRaSwkbj8iaHRtbCI6ImJvZHkiKVswXTokbj9RaS5kb2N1bWVudEVsZW1lbnQ6QTB9LEdOPWZ1bmN0''@;'; put 'put ''aW9uKGdyKXtyZXR1cm4gTW4uY2FsbChnci5vd25lckRvY3VtZW50fHxncixncixaLlNIT1dfRUxFTUVOVHxaLlNIT1dfQ09NTUVOVHxaLlNIT1dfVEVYVHxaLlNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTnxaLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sRTY9ZnVuY3Rpb24oZ3Ipe3Jl''@;'; put 'put ''dHVybiBnciBpbnN0YW5jZW9mIGNlJiYoInN0cmluZyIhPXR5cGVvZiBnci5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiBnci50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLnJlbW92ZUNoaWxkfHwhKGdyLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiByZSl8fCJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBnci5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgZ3IubmFtZXNwYWNlVVJJfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IuaW5zZXJ0QmVmb3JlfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IuaGFzQ2hpbGRO''@;'; put 'put ''b2Rlcyl9LGU1PWZ1bmN0aW9uKGdyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTSYmZ3IgaW5zdGFuY2VvZiBNfTtmdW5jdGlvbiBFMyhjbyxncixRaSl7VE8oY28sWGE9PntYYS5jYWxsKGwsZ3IsUWkseDYpfSl9Y29uc3QgJE49ZnVuY3Rpb24oZ3Ipe2xldCBRaT1udWxsO2lmKEUzKEdu''@;'; put 'put ''LmJlZm9yZVNhbml0aXplRWxlbWVudHMsZ3IsbnVsbCksRTYoZ3IpKXJldHVybiBZdChnciksITA7Y29uc3QgWGE9JGEoZ3Iubm9kZU5hbWUpO2lmKEUzKEduLnVwb25TYW5pdGl6ZUVsZW1lbnQsZ3Ise3RhZ05hbWU6WGEsYWxsb3dlZFRhZ3M6ZmF9KSxwciYmZ3IuaGFzQ2hpbGROb2Rlcygp''@;'; put 'put ''JiYhZTUoZ3IuZmlyc3RFbGVtZW50Q2hpbGQpJiZHMSgvPFsvXHchXS9nLGdyLmlubmVySFRNTCkmJkcxKC88Wy9cdyFdL2csZ3IudGV4dENvbnRlbnQpfHw3PT09Z3Iubm9kZVR5cGV8fHByJiY4PT09Z3Iubm9kZVR5cGUmJkcxKC88Wy9cd10vZyxnci5kYXRhKSlyZXR1cm4gWXQoZ3IpLCEw''@;'; put 'put ''O2lmKCFmYVtYYV18fHRyW1hhXSl7aWYoIXRyW1hhXSYmcU4oWGEpJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssWGEpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKFhhKSkpcmV0dXJu''@;'; put 'put ''ITE7aWYoQmEmJiFwc1tYYV0pe2NvbnN0IGRjPUp0KGdyKXx8Z3IucGFyZW50Tm9kZSxBMD1kdChncil8fGdyLmNoaWxkTm9kZXM7aWYoQTAmJmRjKWZvcihsZXQgVDE9QTAubGVuZ3RoLTE7VDE+PTA7LS1UMSl7Y29uc3QgWmg9cWUoQTBbVDFdLCEwKTtaaC5fX3JlbW92YWxDb3VudD0oZ3Iu''@;'; put 'put ''X19yZW1vdmFsQ291bnR8fDApKzEsZGMuaW5zZXJ0QmVmb3JlKFpoLHB0KGdyKSl9fXJldHVybiBZdChnciksITB9cmV0dXJuIGdyIGluc3RhbmNlb2YgRCYmIWZ1bmN0aW9uKGdyKXtsZXQgUWk9SnQoZ3IpOyghUWl8fCFRaS50YWdOYW1lKSYmKFFpPXtuYW1lc3BhY2VVUkk6cXMsdGFnTmFt''@;'; put 'put ''ZToidGVtcGxhdGUifSk7Y29uc3QgWGE9QU8oZ3IudGFnTmFtZSksZGM9QU8oUWkudGFnTmFtZSk7cmV0dXJuISFlc1tnci5uYW1lc3BhY2VVUkldJiYoZ3IubmFtZXNwYWNlVVJJPT09VXM/UWkubmFtZXNwYWNlVVJJPT09SmM/InN2ZyI9PT1YYTpRaS5uYW1lc3BhY2VVUkk9PT1hZD8ic3Zn''@;'; put 'put ''Ij09PVhhJiYoImFubm90YXRpb24teG1sIj09PWRjfHx4M1tkY10pOiEhV05bWGFdOmdyLm5hbWVzcGFjZVVSST09PWFkP1FpLm5hbWVzcGFjZVVSST09PUpjPyJtYXRoIj09PVhhOlFpLm5hbWVzcGFjZVVSST09PVVzPyJtYXRoIj09PVhhJiZRZ1tkY106ISFZTltYYV06Z3IubmFtZXNwYWNl''@;'; put 'put ''VVJJPT09SmM/IShRaS5uYW1lc3BhY2VVUkk9PT1VcyYmIVFnW2RjXXx8UWkubmFtZXNwYWNlVVJJPT09YWQmJiF4M1tkY10pJiYhWU5bWGFdJiYoZDRbWGFdfHwhV05bWGFdKTohKCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIT09YXZ8fCFlc1tnci5uYW1lc3BhY2VVUkldKSl9KGdyKXx8KCJu''@;'; put 'put ''b3NjcmlwdCI9PT1YYXx8Im5vZW1iZWQiPT09WGF8fCJub2ZyYW1lcyI9PT1YYSkmJkcxKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLGdyLmlubmVySFRNTCk/KFl0KGdyKSwhMCk6KHBuJiYzPT09Z3Iubm9kZVR5cGUmJihRaT1nci50ZXh0Q29udGVudCxUTyhbYWksX2ksT25dLGRj''@;'; put 'put ''PT57UWk9bEUoUWksZGMsIiAiKX0pLGdyLnRleHRDb250ZW50IT09UWkmJihzRShsLnJlbW92ZWQse2VsZW1lbnQ6Z3IuY2xvbmVOb2RlKCl9KSxnci50ZXh0Q29udGVudD1RaSkpLEUzKEduLmFmdGVyU2FuaXRpemVFbGVtZW50cyxncixudWxsKSwhMSl9LEtOPWZ1bmN0aW9uKGdyLFFpLFhh''@;'; put 'put ''KXtpZihNciYmKCJpZCI9PT1RaXx8Im5hbWUiPT09UWkpJiYoWGEgaW4gYXx8WGEgaW4gV3RlKSlyZXR1cm4hMTtpZigoIXFyfHxhcltRaV18fCFHMSh6cixRaSkpJiYoIUhyfHwhRzEoSm4sUWkpKSlpZighTnRbUWldfHxhcltRaV0pe2lmKCEocU4oZ3IpJiYoSG4udGFnTmFtZUNoZWNrIGlu''@;'; put 'put ''c3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssZ3IpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKGdyKSkmJihIbi5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhuLmF0dHJpYnV0ZU5hbWVDaGVj''@;'; put 'put ''ayxRaSl8fEhuLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi5hdHRyaWJ1dGVOYW1lQ2hlY2soUWkpKXx8ImlzIj09PVFpJiZIbi5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhu''@;'; put 'put ''LnRhZ05hbWVDaGVjayxYYSl8fEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi50YWdOYW1lQ2hlY2soWGEpKSkpcmV0dXJuITF9ZWxzZSBpZighUW9bUWldJiYhRzEoZWEsbEUoWGEsJHIsIiIpKSYmKCJzcmMiIT09UWkmJiJ4bGluazpocmVmIiE9PVFpJiYiaHJlZiIh''@;'; put 'put ''PT1RaXx8InNjcmlwdCI9PT1ncnx8MCE9PXBxZShYYSwiZGF0YToiKXx8IWhzW2dyXSkmJighb258fEcxKElyLGxFKFhhLCRyLCIiKSkpJiZYYSlyZXR1cm4hMTtyZXR1cm4hMH0scU49ZnVuY3Rpb24oZ3Ipe3JldHVybiJhbm5vdGF0aW9uLXhtbCIhPT1nciYmaTJlKGdyLHdpKX0sWE49ZnVu''@;'; put 'put ''Y3Rpb24oZ3Ipe0UzKEduLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxncixudWxsKTtjb25zdHthdHRyaWJ1dGVzOlFpfT1ncjtpZighUWl8fEU2KGdyKSlyZXR1cm47Y29uc3QgWGE9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpOdCxm''@;'; put 'put ''b3JjZUtlZXBBdHRyOnZvaWQgMH07bGV0IGRjPVFpLmxlbmd0aDtmb3IoO2RjLS07KXtjb25zdCBBMD1RaVtkY10se25hbWU6UnUsbmFtZXNwYWNlVVJJOlQxLHZhbHVlOlpofT1BMCxzdj0kYShSdSksekE9Wmg7bGV0IGswPSJ2YWx1ZSI9PT1SdT96QTpncWUoekEpO2lmKFhhLmF0dHJOYW1l''@;'; put 'put ''PXN2LFhhLmF0dHJWYWx1ZT1rMCxYYS5rZWVwQXR0cj0hMCxYYS5mb3JjZUtlZXBBdHRyPXZvaWQgMCxFMyhHbi51cG9uU2FuaXRpemVBdHRyaWJ1dGUsZ3IsWGEpLGswPVhhLmF0dHJWYWx1ZSxaciYmKCJpZCI9PT1zdnx8Im5hbWUiPT09c3YpJiYodjAoUnUsZ3IpLGswPSJ1c2VyLWNvbnRl''@;'; put 'put ''bnQtIitrMCkscHImJkcxKC8oKC0tIT98XSk+KXw8XC8oc3R5bGV8dGl0bGUpL2ksazApKXt2MChSdSxncik7Y29udGludWV9aWYoWGEuZm9yY2VLZWVwQXR0ciljb250aW51ZTtpZighWGEua2VlcEF0dHIpe3YwKFJ1LGdyKTtjb250aW51ZX1pZigheW4mJkcxKC9cLz4vaSxrMCkpe3YwKFJ1''@;'; put 'put ''LGdyKTtjb250aW51ZX1wbiYmVE8oW2FpLF9pLE9uXSxKTj0+e2swPWxFKGswLEpOLCIgIil9KTtjb25zdCBrdz0kYShnci5ub2RlTmFtZSk7aWYoS04oa3csc3YsazApKXtpZih2biYmIm9iamVjdCI9PXR5cGVvZiBFZSYmImZ1bmN0aW9uIj09dHlwZW9mIEVlLmdldEF0dHJpYnV0ZVR5cGUm''@;'; put 'put ''JiFUMSlzd2l0Y2goRWUuZ2V0QXR0cmlidXRlVHlwZShrdyxzdikpe2Nhc2UiVHJ1c3RlZEhUTUwiOmswPXZuLmNyZWF0ZUhUTUwoazApO2JyZWFrO2Nhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6azA9dm4uY3JlYXRlU2NyaXB0VVJMKGswKX1pZihrMCE9PXpBKXRyeXtUMT9nci5zZXRBdHRyaWJ1''@;'; put 'put ''dGVOUyhUMSxSdSxrMCk6Z3Iuc2V0QXR0cmlidXRlKFJ1LGswKSxFNihncik/WXQoZ3IpOnIyZShsLnJlbW92ZWQpfWNhdGNoe3YwKFJ1LGdyKX19ZWxzZSB2MChSdSxncil9RTMoR24uYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMsZ3IsbnVsbCl9LG92PWZ1bmN0aW9uIGNvKGdyKXtsZXQgUWk9''@;'; put 'put ''bnVsbDtjb25zdCBYYT1HTihncik7Zm9yKEUzKEduLmJlZm9yZVNhbml0aXplU2hhZG93RE9NLGdyLG51bGwpO1FpPVhhLm5leHROb2RlKCk7KUUzKEduLnVwb25TYW5pdGl6ZVNoYWRvd05vZGUsUWksbnVsbCksJE4oUWkpLFhOKFFpKSxRaS5jb250ZW50IGluc3RhbmNlb2YgZiYmY28oUWku''@;'; put 'put ''Y29udGVudCk7RTMoR24uYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSxncixudWxsKX07cmV0dXJuIGwuc2FuaXRpemU9ZnVuY3Rpb24oY28pe2xldCBncj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sUWk9bnVsbCxYYT1udWxsLGRjPW51''@;'; put 'put ''bGwsQTA9bnVsbDtpZihCbD0hY28sQmwmJihjbz0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIGNvJiYhZTUoY28pKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgY28udG9TdHJpbmcpdGhyb3cgY0UoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVv''@;'; put 'put ''Zihjbz1jby50b1N0cmluZygpKSl0aHJvdyBjRSgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFsLmlzU3VwcG9ydGVkKXJldHVybiBjbztpZihkcnx8QkEoZ3IpLGwucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIGNvJiYoSW89ITEpLElvKXtpZihjby5ub2RlTmFt''@;'; put 'put ''ZSl7Y29uc3QgWmg9JGEoY28ubm9kZU5hbWUpO2lmKCFmYVtaaF18fHRyW1poXSl0aHJvdyBjRSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGNvIGluc3RhbmNlb2YgTSlRaT1acygiXHgzYyEtLS0tXHgzZSIpLFhh''@;'; put 'put ''PVFpLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShjbywhMCksMT09PVhhLm5vZGVUeXBlJiYiQk9EWSI9PT1YYS5ub2RlTmFtZXx8IkhUTUwiPT09WGEubm9kZU5hbWU/UWk9WGE6UWkuYXBwZW5kQ2hpbGQoWGEpO2Vsc2V7aWYoIVpuJiYhcG4mJiEkbiYmLTE9PT1jby5pbmRleE9mKCI8Iikp''@;'; put 'put ''cmV0dXJuIHZuJiZOcj92bi5jcmVhdGVIVE1MKGNvKTpjbztpZihRaT1acyhjbyksIVFpKXJldHVybiBabj9udWxsOk5yP0NuOiIifVFpJiZVciYmWXQoUWkuZmlyc3RDaGlsZCk7Y29uc3QgUnU9R04oSW8/Y286UWkpO2Zvcig7ZGM9UnUubmV4dE5vZGUoKTspJE4oZGMpLFhOKGRjKSxkYy5j''@;'; put 'put ''b250ZW50IGluc3RhbmNlb2YgZiYmb3YoZGMuY29udGVudCk7aWYoSW8pcmV0dXJuIGNvO2lmKFpuKXtpZihzcilmb3IoQTA9Q3IuY2FsbChRaS5vd25lckRvY3VtZW50KTtRaS5maXJzdENoaWxkOylBMC5hcHBlbmRDaGlsZChRaS5maXJzdENoaWxkKTtlbHNlIEEwPVFpO3JldHVybihOdC5z''@;'; put 'put ''aGFkb3dyb290fHxOdC5zaGFkb3dyb290bW9kZSkmJihBMD1tci5jYWxsKGQsQTAsITApKSxBMH1sZXQgVDE9JG4/UWkub3V0ZXJIVE1MOlFpLmlubmVySFRNTDtyZXR1cm4gJG4mJmZhWyIhZG9jdHlwZSJdJiZRaS5vd25lckRvY3VtZW50JiZRaS5vd25lckRvY3VtZW50LmRvY3R5cGUmJlFp''@;'; put 'put ''Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZHMSh1MmUsUWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYoVDE9IjwhRE9DVFlQRSAiK1FpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK1QxKSxwbiYmVE8oW2FpLF9pLE9uXSxaaD0+e1QxPWxFKFQxLFpoLCIgIil9''@;'; put 'put ''KSx2biYmTnI/dm4uY3JlYXRlSFRNTChUMSk6VDF9LGwuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7QkEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9KSxkcj0hMH0sbC5jbGVhckNvbmZpZz1mdW5jdGlvbigpe3g2PW51bGwsZHI9ITF9LGwu''@;'; put 'put ''aXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihjbyxncixRaSl7eDZ8fEJBKHt9KTtjb25zdCBYYT0kYShjbyksZGM9JGEoZ3IpO3JldHVybiBLTihYYSxkYyxRaSl9LGwuYWRkSG9vaz1mdW5jdGlvbihjbyxncil7ImZ1bmN0aW9uIj09dHlwZW9mIGdyJiZzRShHbltjb10sZ3IpfSxsLnJlbW92''@;'; put 'put ''ZUhvb2s9ZnVuY3Rpb24oY28sZ3Ipe2lmKHZvaWQgMCE9PWdyKXtjb25zdCBRaT1ocWUoR25bY29dLGdyKTtyZXR1cm4tMT09PVFpP3ZvaWQgMDpmcWUoR25bY29dLFFpLDEpWzBdfXJldHVybiByMmUoR25bY29dKX0sbC5yZW1vdmVIb29rcz1mdW5jdGlvbihjbyl7R25bY29dPVtdfSxsLnJl''@;'; put 'put ''bW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7R249e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9y''@;'; put 'put ''ZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119fSxsfSgpO2Z1bmN0aW9uIHAyZShjKXtjb25zdCBsPWMubGVuZ3RoO2xldCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1d''@;'; put 'put ''LGErPTF9ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIGhFKGMpe2NvbnN0IGw9W107aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18fDA9PT1jWzBdLmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMu''@;'; put 'put ''bGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9ZnVuY3Rpb24gcXUoYyxsLGEsZCl7bGV0IGg9LTEsZj1jLHY9YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJh''@;'; put 'put ''eS5mcm9tKGMpKTtjb25zdCBNPWYubGVuZ3RoO2ZvcihkJiZNJiYoaCs9MSx2PWZbaF0pLGgrPTE7aDxNOyl2PWwodixmW2hdLGgsZiksaCs9MTtyZXR1cm4gdn1mdW5jdGlvbiBJbShjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9''@;'; put 'put ''ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspe2NvbnN0IE09ZFthXTtsKE0sYSxkKSYmKHYrPTEsZlt2XT1NKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uIHlzKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0''@;'; put 'put ''aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl2Kz0xLGZbdl09bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBZbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2Fd''@;'; put 'put ''LGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gZzJlKGMpe3JldHVybiBxdShjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gSXFlKGMpe3JldHVybiBxdShjLChsLGEpPT5sPmE/bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIFJxZShjKXtyZXR1cm4gcXUoYywo''@;'; put 'put ''bCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBMcWUoYyl7cmV0dXJuIGMubGVuZ3RoP2cyZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9uIG0yZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bC5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9tMmUoYSk6YSks''@;'; put 'put ''W10pfWZ1bmN0aW9uIHYyZShjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLGE9PnstMT09PWwuaW5kZXhPZihhKSYmbC5wdXNoKGEpfSksbH1mdW5jdGlvbiBjJCgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2Fd''@;'; put 'put ''O2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIFluKGgsdj0+e2Y9Zi5maWx0ZXIoTT0+IXYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBPcWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1th''@;'; put 'put ''XTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBZbihoLHY9PntmPWYuZmlsdGVyKE09PnYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBQcWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1th''@;'; put 'put ''XTtjb25zdFtkLC4uLmhdPVsuLi5sXSxmPW5ldyBTZXQoZCk7cmV0dXJuIFluKGgsdj0+e1luKHYsTT0+e2YuaGFzKE0pfHxmLmFkZChNKX0pfSksQXJyYXkuZnJvbShmKX1mdW5jdGlvbiB1JChjKXtyZXR1cm4gYy5zcGxpdChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBnbChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIHF1KGMsKGYsdixNKT0+Zit2LnJlcGxhY2UoL1xyP1xuXHMqL2cs''@;'; put 'put ''IiIpKyhhW01dP2FbTV06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gbGMoYyl7bGV0IGw7c3dpdGNoKHR5cGVvZiBjKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9YCR7Y31gO2JyZWFrO2Nhc2Uib2JqZWN0IjpsPW51bGw9PT1jPyIiOmMudG9TdHJpbmcoKTticmVhaztjYXNlInVuZGVm''@;'; put 'put ''aW5lZCI6bD0iIjticmVhaztkZWZhdWx0Omw9Yy50b1N0cmluZygpfXJldHVybiBsfWZ1bmN0aW9uIFBhKGMpe3JldHVybiB0eXBlb2YgYzwidSJ9ZnVuY3Rpb24gX2MoYyl7cmV0dXJuIHR5cGVvZiBjPiJ1In1mdW5jdGlvbiBVYyhjKXtyZXR1cm4gbnVsbD09PWN8fCIiPT09Y3x8X2MoYyl9''@;'; put 'put ''ZnVuY3Rpb24gYjJlKGMpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWNvbnN0IGZFPSJsZW5ndGgiLHBFPWM9PnBhcnNlSW50KGMsMTYpLHkyZT1jPT5wYXJzZUludChjLDEwKSxETz0oYyxsLGEpPT5jLnN1YnN0cihsLGEpLGdF''@;'; put 'put ''PWM9PmMuY29kZVBvaW50QXQoMCktNjUsZCQ9Yz0+YCR7Y31gLnJlcGxhY2UoL1wtL2csIiIpLEZxZT1jPT5wRShETyhkJChjKSxwRSgiMTIiKSxnRSgiRiIpKSkvKHBFKERPKGQkKGMpLGdFKCJCIiksfn4hW11bZkVdKSl8fDkpLEhxZT0oKT0+dHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2Et''@;'; put 'put ''ejAtOVwtXStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpO2xldCBfMmU9ITE7Y29uc3QgdzJlPXtpbnZhbGlkOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFu''@;'; put 'put ''ZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gZ2xgCiAgICBUaGUgbGlj''@;'; put 'put ''ZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJz''@;'; put 'put ''aW9uIHJlbGVhc2VkIHByaW9yXHgyMAogICAgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc2FsZXNAaGFuZHNvbnRhYmxlLmNvbS5gfSxtaXNzaW5nOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVz''@;'; put 'put ''ZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25v''@;'; put 'put ''bi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9LEMyZT17aW52YWxpZDooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkg''@;'; put 'put ''Zm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJv''@;'; put 'put ''cGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gZ2xgCiAgICBUaGUg''@;'; put 'put ''bGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVu''@;'; put 'put ''ZXc8L2E+IHlvdXJceDIwCiAgICBsaWNlbnNlIGtleSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueVx4MjAKICAgIGhlbHAsIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20i''@;'; put 'put ''PnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LmB9LG1pc3Npbmc6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5''@;'; put 'put ''LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxl''@;'; put 'put ''LmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0IGluXHgyMAogICAgdGhlIGRvY3VtZW50YXRpb24gb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5z''@;'; put 'put ''dXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifTtmdW5jdGlvbiBTMmUoYyxsKXtjb25zdCBhPSFVYyhjKSxkPSJzdHJpbmciPT10eXBlb2YgYyYmIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PWMudG9Mb3dlckNhc2UoKSxoPSIxNS4z''@;'; put 'put ''LjAiO2xldCBmLHY9ImludmFsaWQiLE09ImludmFsaWQiO2NvbnN0IEQ9ZnVuY3Rpb24gTnFlKGMpe2xldCBsPVtdW2ZFXSxhPWw7aWYoY1tmRV0hPT1nRSgiWiIpKXJldHVybiExO2ZvcihsZXQgZD0iIixoPSJCPEg0UCsiLnNwbGl0KCIiKSxmPWdFKGguc2hpZnQoKSk7ZjtmPWdFKGguc2hp''@;'; put 'put ''ZnQoKXx8IkEiKSktLWY8IiJbZkVdP2F8PSh5MmUoYCR7eTJlKHBFKGQpKyhwRShETyhjLE1hdGguYWJzKGYpLDIpKStbXSkucGFkU3RhcnQoMiwiMCIpKX1gKSU5N3x8Mik+PjE6ZD1ETyhjLGYsZj8xPT09aFtmRV0/OTo4OjYpO3JldHVybiBhPT09bH0oYz1kJChjfHwiIikpO2lmKGF8fGR8''@;'; put 'put ''fEQpaWYoRCl7Y29uc3QgWj1PbygiMjkvMDQvMjAyNSIsIkREL01NL1lZWVkiKSxyZT1NYXRoLmZsb29yKFoudG9EYXRlKCkuZ2V0VGltZSgpLzg2NGU1KSxjZT1GcWUoYyk7Zj1Pbyg4NjRlNSooY2UrMSksIngiKS5mb3JtYXQoIk1NTU0gREQsIFlZWVkiKSxyZT5jZT8odj0iZXhwaXJlZCIs''@;'; put 'put ''TT0iZXhwaXJlZCIpOih2PSJ2YWxpZCIsTT0idmFsaWQiKX1lbHNlIGQ/KHY9Im5vbl9jb21tZXJjaWFsIixNPSJ2YWxpZCIpOih2PSJpbnZhbGlkIixNPSJpbnZhbGlkIik7ZWxzZSB2PSJtaXNzaW5nIixNPSJtaXNzaW5nIjtpZihIcWUoKSYmKHY9InZhbGlkIixNPSJ2YWxpZCIpLCFfMmUm''@;'; put 'put ''JiJ2YWxpZCIhPT12JiYodzJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSYmY29uc29sZVsibm9uX2NvbW1lcmNpYWwiPT09dj8iaW5mbyI6Indhcm4iXSh3MmVbdl0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKSxfMmU9ITApLCJ2YWxpZCIhPT1NJiZs''@;'; put 'put ''LnBhcmVudE5vZGUmJkMyZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpe2NvbnN0IHJlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JlLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlIGhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIscmUuaW5uZXJIVE1MPUMyZVtN''@;'; put 'put ''XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyZSxsLm5leHRTaWJsaW5nKX19ZnVuY3Rpb24gcDEoYyl7cmV0dXJuIGNbMF0udG9VcHBlckNhc2UoKStjLnN1YnN0cigxKX1mdW5jdGlvbiBWcWUoKXtjb25zdCBjPVtdO2Zvcih2''@;'; put 'put ''YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3QgZj1sYyhhW2hdKS50b0xvd2VyQ2FzZSgpOy0xPT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9''@;'; put 'put ''PT1jLmxlbmd0aH1mdW5jdGlvbiBoJCgpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4gYygpK2MoKStjKCkrYygpfWZ1bmN0aW9uIGYkKGMpe3JldHVybi9eKFswLTldWzAtOV0/''@;'; put 'put ''JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIHAkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5gJHtjfWAucmVwbGFjZSgvKD86XFwpP1xbKFteW1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFy''@;'; put 'put ''QXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIGckKGMpe3JldHVybiBJTyhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIElPKGMsbCl7cmV0dXJuIERxZS5zYW5pdGl6ZShjLGwpfWNvbnN0IE43PWM9PlsidGFiaW5k''@;'; put 'put ''ZXgiLGNdLEtxZT0oKT0+WyJyb2xlIiwiY2hlY2tib3giXSxtRT1jPT5bImFyaWEtbGFiZWwiLGNdLFY3PSgpPT5bImFyaWEtaGlkZGVuIiwidHJ1ZSJdLEUyZT1jPT5bImFyaWEtaGFzcG9wdXAiLGNdLFQyZT1jPT5bImFyaWEtcm93Y291bnQiLGNdLFJPPWM9PlsiYXJpYS1jb2xjb3VudCIs''@;'; put 'put ''Y10sQTJlPWM9PlsiYXJpYS1yb3dpbmRleCIsY10sdiQ9Yz0+WyJhcmlhLWNvbGluZGV4IixjXSxOMj1jPT5bImFyaWEtZXhwYW5kZWQiLGNdLGsyZT0oKT0+WyJhcmlhLXJlYWRvbmx5IiwidHJ1ZSJdLEQyZT0oKT0+WyJhcmlhLWludmFsaWQiLCJ0cnVlIl0sSTJlPWM9PlsiYXJpYS1jaGVj''@;'; put 'put ''a2VkIixjXSxyWGU9Yz0+WyJhcmlhLWNvbnRyb2xzIixjXSxhWGU9Yz0+WyJhcmlhLWxpdmUiLGNdLG9YZT1jPT5bImFyaWEtcmVsZXZhbnQiLGNdLHNYZT1jPT5bImFyaWEtc2V0c2l6ZSIsY10sbFhlPWM9PlsiYXJpYS1wb3NpbnNldCIsY107ZnVuY3Rpb24gUjJlKGMpe2xldCBsPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9LTEsZD1udWxsLGg9Yztmb3IoO251bGwhPT1oOyl7aWYoYT09PWwpe2Q9aDticmVha31oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aD1oLmhvc3Q6KGEr''@;'; put 'put ''PTEsaD1oLnBhcmVudE5vZGUpfXJldHVybiBkfWZ1bmN0aW9uIHZFKGMsbCl7Y29uc3QgYT1jLmNsb3Nlc3QoIi5oYW5kc29udGFibGUiKTtyZXR1cm4hIWEmJihhLnBhcmVudE5vZGU9PT1sfHxhPT09bCl9ZnVuY3Rpb24gTDJlKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5w''@;'; put 'put ''YXJlbnQpJiZjLmZyYW1lRWxlbWVudH1mdW5jdGlvbiBCNyhjKXtyZXR1cm4gTDJlKGMpJiZjLnBhcmVudH1mdW5jdGlvbiBjWGUoYyl7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpfWZ1bmN0aW9uIFJtKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2NvbnN0e0VMRU1FTlRfTk9ERTpkLERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6aH09Tm9kZTtsZXQgZj1jO2Zvcig7bnVsbCE9ZiYmZiE9PWE7KXtjb25zdHtub2Rl''@;'; put 'put ''VHlwZTp2LG5vZGVOYW1lOk19PWY7aWYodj09PWQmJihsLmluY2x1ZGVzKE0pfHxsLmluY2x1ZGVzKGYpKSlyZXR1cm4gZjtjb25zdHtob3N0OkR9PWY7Zj1EJiZ2PT09aD9EOmYucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBiRShjLGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1jO2Zv''@;'; put 'put ''cig7aCYmKGg9Um0oaCxsLGEpLGgmJighYXx8YS5jb250YWlucyhoKSkpOylkLnB1c2goaCksaD1oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aC5ob3N0OmgucGFyZW50Tm9kZTtjb25zdCBmPWQubGVuZ3RoO3JldHVybiBmP2RbZi0xXTpudWxsfWZ1''@;'; put 'put ''bmN0aW9uIE8yZShjLGwpe2NvbnN0IGE9e2VsZW1lbnQ6dm9pZCAwLGNsYXNzTmFtZXM6W119O2xldCBkPWM7Zm9yKDtudWxsIT09ZCYmZCE9PWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFhLmVsZW1lbnQ7KXtpZigic3RyaW5nIj09dHlwZW9mIGwmJmQuY2xhc3NMaXN0LmNv''@;'; put 'put ''bnRhaW5zKGwpKWEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKGwpO2Vsc2UgaWYobCBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgaD1BcnJheS5mcm9tKGQuY2xhc3NMaXN0KS5maWx0ZXIoZj0+bC50ZXN0KGYpKTtoLmxlbmd0aCYmKGEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNo''@;'; put 'put ''KC4uLmgpKX1kPWQucGFyZW50RWxlbWVudH1yZXR1cm4gYX1mdW5jdGlvbiBMbShjLGwpe2xldCBhPWMucGFyZW50Tm9kZSxkPVtdO2Zvcigic3RyaW5nIj09dHlwZW9mIGw/ZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRlZmF1bHRWaWV3P2MucXVlcnlTZWxlY3RvckFsbChsKTpj''@;'; put 'put ''Lm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChsKSwwKTpkLnB1c2gobCk7bnVsbCE9PWE7KXtpZihkLmluZGV4T2YoYSk+LTEpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gUDJlKGMpe2xldCBsPTAsYT1jO2lmKGEucHJldmlvdXNTaWJsaW5nKWZvcig7''@;'; put 'put ''YT1hLnByZXZpb3VzU2libGluZzspbCs9MTtyZXR1cm4gbH1mdW5jdGlvbiBPbShjLGwsYSl7Y29uc3QgZD1hLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmh0X2Nsb25lXyR7Y31gKTtyZXR1cm4gZD9kLmNvbnRhaW5zKGwpOm51bGx9ZnVuY3Rpb24gRjJlKGMpe3JldHVybiBjJiZj''@;'; put 'put ''Lmxlbmd0aD9jLmZpbHRlcihsPT4hIWwpOltdfWZ1bmN0aW9uIEgyZShjLGwpe2lmKCFjfHwhYy5sZW5ndGgpcmV0dXJuIGw/e3JlZ2V4RnJlZTpbXSxyZWdleGVzOltdfTpbXTtjb25zdCBhPVtdLGQ9W107cmV0dXJuIGQucHVzaCguLi5jLmZpbHRlcihoPT57Y29uc3QgZj1oIGluc3RhbmNl''@;'; put 'put ''b2YgUmVnRXhwO3JldHVybiBmJiZsJiZhLnB1c2goaCksIWZ9KSksbD97cmVnZXhGcmVlOmQscmVnZXhlczphfTpkfWZ1bmN0aW9uIHBvKGMsbCl7cmV0dXJuIHZvaWQgMCE9PWMuY2xhc3NMaXN0JiYic3RyaW5nIj09dHlwZW9mIGwmJiIiIT09bCYmYy5jbGFzc0xpc3QuY29udGFpbnMobCl9''@;'; put 'put ''ZnVuY3Rpb24gVGkoYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9RjJlKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QuYWRkKC4uLmwpfWZ1bmN0aW9uIGxvKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdF''@;'; put 'put ''eHAmJihsPVtsXSk7bGV0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09SDJlKGwsITApO2E9RjJlKGEpLGEubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LnJlbW92ZSguLi5hKSxkLmZvckVhY2goaD0+e2MuY2xhc3NMaXN0LmZvckVhY2goZj0+e2gudGVzdChmKSYmYy5jbGFzc0xpc3QucmVtb3ZlKGYp''@;'; put 'put ''fSl9KX1mdW5jdGlvbiB2byhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtBcnJheS5pc0FycmF5KGwpfHwobD1bW2wsYV1dKSxsLmZvckVhY2go''@;'; put 'put ''ZD0+e0FycmF5LmlzQXJyYXkoZCkmJiIiIT09ZFswXSYmYy5zZXRBdHRyaWJ1dGUoLi4uZCl9KX1mdW5jdGlvbiBqNyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgi''@;'; put 'put ''ICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7Y29uc3R7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1IMmUobCwhMCk7YS5mb3JFYWNoKGg9PnsiIiE9PWgmJmMucmVtb3ZlQXR0cmlidXRlKGgpfSksZC5mb3JFYWNoKGg9PntjLmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChmPT57''@;'; put 'put ''aC50ZXN0KGYpJiZjLnJlbW92ZUF0dHJpYnV0ZShmKX0pfSl9ZnVuY3Rpb24geSQoYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2UgaWYoWyJUQUJMRSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4t''@;'; put 'put ''MSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0peSQobFthXSl9fWZ1bmN0aW9uIHhwKGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGlsZDspYy5yZW1vdmVDaGlsZChsKX1jb25zdCBOMmU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gejcoYyxs''@;'; put 'put ''KXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO04yZS50ZXN0KGwpP2MuaW5uZXJIVE1MPWE/SU8obCk6bDpQbShjLGwpfWZ1bmN0aW9uIFBtKGMsbCl7Y29uc3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUm''@;'; put 'put ''Jm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooeHAoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpKX1mdW5jdGlvbiBVNyhjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1jLm93bmVyRG9jdW1l''@;'; put 'put ''bnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QhPT1sOyl7aWYobnVsbD09PWQpcmV0dXJuITE7aWYoZC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7aWYoZC5ob3N0KXtpZihkLmhvc3QuaW1wbClyZXR1cm4gVTcoZC5ob3N0LmltcGwpO2lmKGQuaG9zdClyZXR1''@;'; put 'put ''cm4gVTcoZC5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZigibm9uZSI9PT1hLmdldENvbXB1dGVkU3R5bGUoZCkuZGlzcGxheSlyZXR1cm4hMTtkPWQucGFyZW50Tm9kZX1yZXR1cm4hMH1mdW5jdGlvbiBWMmUoYyl7Y29u''@;'; put 'put ''c3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QucGFyZW50Tm9kZTspe2lmKCIwcHgiPT09ZC5zdHlsZS5oZWlnaHR8fCIwIj09PWQuc3R5bGUuaGVpZ2h0KXJldHVybiJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGQpLm92ZXJmbG93O2Q9ZC5wYXJl''@;'; put 'put ''bnROb2RlfXJldHVybiExfWZ1bmN0aW9uIFUwKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1lbnRFbGVtZW50O2xldCBmLHYsTSxoPWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LHY9aC5vZmZzZXRUb3AsTT1oOyhoPWgub2Zmc2V0UGFyZW50KSYmaCE9''@;'; put 'put ''PWwuYm9keSYmIm9mZnNldExlZnQiaW4gaDspZis9aC5vZmZzZXRMZWZ0LHYrPWgub2Zmc2V0VG9wLE09aDtyZXR1cm4gTSYmImZpeGVkIj09PU0uc3R5bGUucG9zaXRpb24mJihmKz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExlZnQsdis9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHts''@;'; put 'put ''ZWZ0OmYsdG9wOnZ9fWZ1bmN0aW9uIF8kKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFl9ZnVuY3Rpb24gTE8oKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiBPTyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9fJChsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiB3JChjKXtsZXQg''@;'; put 'put ''bD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9MTyhsKTpjLnNjcm9sbExlZnR9ZnVuY3Rpb24geUUoYyl7bGV0IGw9Yy5vd25lckRvY3VtZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1j''@;'; put 'put ''LmRvY3VtZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnROb2RlO2Zvcig7aCYmaC5zdHlsZSYmbC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpmLG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1oLnN0eWxlO2lm''@;'; put 'put ''KFtmLHYsTV0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09YS5nZXRDb21wdXRlZFN0eWxlKGgpKSxkLmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKE0pfHxoLmNsaWVudEhlaWdodDw9aC5z''@;'; put 'put ''Y3JvbGxIZWlnaHQrMSYmKGQuaW5jbHVkZXMoTSl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBCMmUoYyl7cmV0dXJu''@;'; put 'put ''IGMuc2Nyb2xsSGVpZ2h0LWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIGoyZShjKXtyZXR1cm4gYy5zY3JvbGxXaWR0aC1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIGFfKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldztsZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZk''@;'; put 'put ''LnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGQpLGY9WyJzY3JvbGwiLCJoaWRkZW4iLCJhdXRvIl0sdj1oLmdldFByb3BlcnR5VmFsdWUo''@;'; put 'put ''Im92ZXJmbG93IiksTT1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSxEPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIpO2lmKGYuaW5jbHVkZXModil8fGYuaW5jbHVkZXMoTSl8fGYuaW5jbHVkZXMoRCkpcmV0dXJuIGQ7ZD1kLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVu''@;'; put 'put ''Y3Rpb24gX0UoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d2luZG93O2lmKCFjKXJldHVybjtpZihjPT09YSlyZXR1cm4id2lkdGgiPT09bD9gJHthLmlubmVyV2lkdGh9cHhgOiJoZWlnaHQiPT09bD9gJHthLmlubmVy''@;'; put 'put ''SGVpZ2h0fXB4YDp2b2lkIDA7Y29uc3QgZD1jLnN0eWxlW2xdO2lmKCIiIT09ZCYmdm9pZCAwIT09ZClyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShjKTtyZXR1cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/aFtsXTp2b2lkIDB9ZnVuY3Rpb24gdVhlKGMsbCl7Y29uc3R7''@;'; put 'put ''c2VsZWN0b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2VsZWN0b3I/ZD1jLm1zTWF0Y2hlc1NlbGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5tYXRjaGVzKGEpKSksZH1mdW5jdGlvbiBzdShjKXtyZXR1cm4g''@;'; put 'put ''Yy5vZmZzZXRXaWR0aH1mdW5jdGlvbiB4dShjKXtyZXR1cm4gYy5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gb18oYyl7cmV0dXJuIGMuY2xpZW50SGVpZ2h0fHxjLmlubmVySGVpZ2h0fWZ1bmN0aW9uIEMkKGMpe3JldHVybiBjLmNsaWVudFdpZHRofHxjLmlubmVyV2lkdGh9ZnVuY3Rpb24gZFhl''@;'; put 'put ''KGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBoWGUoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFMkKGMpe3JldHVybiBjLnNlbGVjdGlvblN0YXJ0P2Muc2VsZWN0aW9uU3RhcnQ6MH1mdW5jdGlvbiB6MmUoYyl7cmV0dXJu''@;'; put 'put ''IGMuc2VsZWN0aW9uRW5kP2Muc2VsZWN0aW9uRW5kOjB9ZnVuY3Rpb24gZlhlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjb25zdCBsPWMuZG9jdW1lbnQ7bGV0IGE9IiI7cmV0dXJuIGMuZ2V0U2VsZWN0aW9u''@;'; put 'put ''P2E9Yy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOmwuc2VsZWN0aW9uJiYiQ29udHJvbCIhPT1sLnNlbGVjdGlvbi50eXBlJiYoYT1sLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQpLGF9ZnVuY3Rpb24gTSQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2MuZ2V0U2VsZWN0aW9uJiYoYy5nZXRTZWxlY3Rpb24oKS5lbXB0eT9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk6Yy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMmJmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpfWZ1''@;'; put 'put ''bmN0aW9uIHdFKGMsbCxhKXtpZih2b2lkIDA9PT1hJiYoYT1sKSxjLnNldFNlbGVjdGlvblJhbmdlKXtjLmZvY3VzKCk7dHJ5e2Muc2V0U2VsZWN0aW9uUmFuZ2UobCxhKX1jYXRjaHtjb25zdCBoPWMucGFyZW50Tm9kZSxmPWguc3R5bGUuZGlzcGxheTtoLnN0eWxlLmRpc3BsYXk9ImJsb2Nr''@;'; put 'put ''IixjLnNldFNlbGVjdGlvblJhbmdlKGwsYSksaC5zdHlsZS5kaXNwbGF5PWZ9fX1sZXQgeCQsbF87ZnVuY3Rpb24gZjAoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJuIHZvaWQgMD09PXgkJiYoeCQ9''@;'; put 'put ''ZnVuY3Rpb24gcFhlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdodD0iMjAwcHgiLGwuc3R5bGUud2lkdGg9IjEwMCUiO2NvbnN0''@;'; put 'put ''IGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnN0eWxlLmJveFNpemluZz0iY29udGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9w''@;'; put 'put ''PSIwcHgiLGEuc3R5bGUud2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLm9mZnNldFdpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7''@;'; put 'put ''bGV0IGg9bC5vZmZzZXRXaWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lkdGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChhKSxkLWh9KGMpKSx4JH1mdW5jdGlvbiBFJChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHku''@;'; put 'put ''c2Nyb2xsSGVpZ2h0PmMuaW5uZXJIZWlnaHQ6Yy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoPmMuaW5uZXJXaWR0aDpjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50''@;'; put 'put ''SGVpZ2h0fWZ1bmN0aW9uIFBPKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBnWGUoYyl7bGV0IGw7cmV0dXJuIGMuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMuc3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9''@;'; put 'put ''ZnVuY3Rpb24gQ0UoYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24gU0UoYyl7cmV0dXJuIGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1''@;'; put 'put ''ZSI9PT1jLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gRk8oYyl7cmV0dXJuIFNFKGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpfWZ1bmN0aW9uIG1YZShjKXtGTyhjLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gQSQo''@;'; put 'put ''Yyl7cmV0dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiBVMmUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+e2YuaXNJbnRlcnNlY3RpbmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYmKGwoKSxoLnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25l''@;'; put 'put ''ckRvY3VtZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIGskKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRz''@;'; put 'put ''WzJdO2NvbnN0IGQ9Yy5vd25lckRvY3VtZW50LGg9ZC5jcmVhdGVSYW5nZSgpLGY9ZC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTt2byhjLCJjb250ZW50ZWRpdGFibGUiLCEwKSxhJiZ2byhjLC4uLlY3KCkpLGwmJlRpKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGguc2VsZWN0Tm9kZUNv''@;'; put 'put ''bnRlbnRzKGMpLGYucmVtb3ZlQWxsUmFuZ2VzKCksZi5hZGRSYW5nZShoKX1mdW5jdGlvbiBEJChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldFNl''@;'; put 'put ''bGVjdGlvbigpO2MuaGFzQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZjLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxhLnJlbW92ZUFsbFJhbmdlcygpLGwmJmxvKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKX1mdW5j''@;'; put 'put ''dGlvbiBaMmUoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2skKGMsYSksbCgpLEQkKGMsYSl9ZnVuY3Rpb24gRXAoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT1jfHxudWxsPT09KGw9Yy5vd25lckRvY3VtZW50KXx8''@;'; put 'put ''dm9pZCAwPT09bD92b2lkIDA6bC5kZWZhdWx0Vmlldy5FbGVtZW50O3JldHVybiEhKGEmJm51bGwhPT1hJiZjIGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gbWwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gVzJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksRD0wO0Q8djtEKyspTVtEXT1hcmd1''@;'; put 'put ''bWVudHNbRF07Y29uc3QgWj1EYXRlLm5vdygpO2xldCByZT0hMTtkLmxhc3RDYWxsVGhyb3R0bGVkPSEwLGF8fChhPVoscmU9ITApO2NvbnN0IGNlPWwtKFotYSk7cmV0dXJuIHJlPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSk6KGgmJmNsZWFyVGltZW91dChoKSxo''@;'; put 'put ''PXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSxhPTAsaD12b2lkIDB9LGNlKSksZH19ZnVuY3Rpb24gdlhlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBk''@;'; put 'put ''PVcyZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gdigpe2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0pLFo9MDtaPE07WisrKURbWl09YXJndW1lbnRzW1pdO3JldHVy''@;'; put 'put ''biBoPyhoLT0xLGMuYXBwbHkodGhpcyxEKSk6ZC5hcHBseSh0aGlzLEQpfXJldHVybiB2LmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSx2fWZ1bmN0aW9uIE1FKGMpe2xldCBkLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxh''@;'; put 'put ''PW51bGw7cmV0dXJuIGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLHYpfSxsKSxk''@;'; put 'put ''fX1mdW5jdGlvbiBiWGUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiks''@;'; put 'put ''RD0wO0Q8djtEKyspTVtEXT1hcmd1bWVudHNbRF07cmV0dXJuIHF1KGgsKFoscmUpPT5yZShaKSxkLmFwcGx5KHRoaXMsTSkpfX1mdW5jdGlvbiBJJChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVu''@;'; put 'put ''dHNbZF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGMuYXBwbHkodGhpcyxhLmNvbmNhdCh2KSl9fWZ1bmN0aW9uIFkyZShjKXtjb25zdCBsPWMubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEQ9ZC5jb25jYXQodik7bGV0IFo7cmV0dXJuIFo9RC5sZW5ndGg+PWw/Yy5hcHBseSh0''@;'; put 'put ''aGlzLEQpOmEoRCksWn19KFtdKX1mdW5jdGlvbiB5WGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtj''@;'; put 'put ''b25zdCBEPWQuY29uY2F0KHYucmV2ZXJzZSgpKTtsZXQgWjtyZXR1cm4gWj1ELmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsRCk6YShEKSxafX0oW10pfWZ1bmN0aW9uIEhPKGMsbCxhLGQsaCxmLHYsTSl7cmV0dXJuIFBhKE0pP2MuY2FsbChsLGEsZCxoLGYsdixNKTpQYSh2KT9jLmNhbGwobCxh''@;'; put 'put ''LGQsaCxmLHYpOlBhKGYpP2MuY2FsbChsLGEsZCxoLGYpOlBhKGgpP2MuY2FsbChsLGEsZCxoKTpQYShkKT9jLmNhbGwobCxhLGQpOlBhKGEpP2MuY2FsbChsLGEpOmMuY2FsbChsKX1mdW5jdGlvbiBzXyhjKXtsZXQgbDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9sPWMubGVuZ3RoP25ldyBB''@;'; put 'put ''cnJheShjLmxlbmd0aCkuZmlsbChudWxsKTpbXToobD17fSxYbyhjLChhLGQpPT57Il9fY2hpbGRyZW4iIT09ZCYmKGxbZF09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhQXJyYXkuaXNBcnJheShhKT9zXyhhKTpBcnJheS5pc0FycmF5KGEpP2EubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGFb''@;'; put 'put ''MF0mJiFBcnJheS5pc0FycmF5KGFbMF0pP1tzXyhhWzBdKV06W106bnVsbCl9KSksbH1mdW5jdGlvbiBHMmUoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gRXUoYyxsLGEp''@;'; put 'put ''e2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4gWG8obCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24geEUoYyxsKXtYbyhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KGxbZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSx4RShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiBnMShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmlu''@;'; put 'put ''Z2lmeShjKSk6Y31mdW5jdGlvbiBuMyhjKXtjb25zdCBsPXt9O3JldHVybiBYbyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiBUbChjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7''@;'; put 'put ''ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIFluKGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxYbyhoLChmLHYpPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbdl0pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7dn0nIGFscmVhZHkg''@;'; put 'put ''ZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5gKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVt2XT1mO2Vsc2V7Y29uc3QgRD1mdW5jdGlvbihyZSl7Y29uc3QgY2U9YF8ke3JlfWA7cmV0dXJuIGZ1bmN0aW9uKGJlKXt0aGlzW2NlXT1iZX19O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLnByb3RvdHlwZSx2LHtnZXQ6ZnVuY3Rpb24ocmUsY2Upe2NvbnN0IGJlPWBfJHtyZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW2JlXSYmKHRoaXNbYmVdPShCZT0+e2xldCBxZT1CZTtyZXR1cm4oQXJyYXkuaXNBcnJheShxZSl8fHFvKHFl''@;'; put 'put ''KSkmJihxZT1nMShxZSkpLHFlfSkoY2UpKSx0aGlzW2JlXX19KHYsZiksc2V0OkQodiksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIE5PKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gcW8oYyl7cmV0dXJuIltvYmpl''@;'; put 'put ''Y3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gVHAoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmln''@;'; put 'put ''dXJhYmxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwsZCl9ZnVuY3Rpb24gWG8oYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1th''@;'; put 'put ''XSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uICQyZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIFhvKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gVk8oYyxsLGEpe2lmKCJzdHJpbmciIT10eXBl''@;'; put 'put ''b2YgbClyZXR1cm47Y29uc3QgZD1sLnNwbGl0KCIuIik7bGV0IGg9YztkLmZvckVhY2goKGYsdik9PnsiX19wcm90b19fIj09PWZ8fCJjb25zdHJ1Y3RvciI9PT1mfHwicHJvdG90eXBlIj09PWZ8fCh2IT09ZC5sZW5ndGgtMT8oVHUoaCxmKXx8KGhbZl09e30pLGg9aFtmXSk6aFtmXT1hKX0p''@;'; put 'put ''fWZ1bmN0aW9uIEJPKGMpe2lmKCFxbyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIHFvKGEpP1hvKGEsKGgsZik9PnsiX19jaGlsZHJlbiIhPT1mJiYoZCs9bChoKSl9KTpkKz0xLGR9O3JldHVybiBsKGMpfWZ1bmN0aW9uIEZkKGMpe2xldCBsPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hlZDohMSxbYV06Yyxpc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtn''@;'; put 'put ''ZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gVHUoYyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9ZnVuY3Rpb24g''@;'; put 'put ''RUUoYyl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gVEUoYyl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIFIkKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB3aW5kb3d9ZnVuY3Rpb24gSzJlKCl7cmV0dXJuIHR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUifWZ1bmN0aW9uIHEyZShjKXtyZXR1cm4gbF98fChsXz0ib2JqZWN0Ij09dHlwZW9mIEludGw/bmV3IEludGwuQ29sbGF0b3IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmNvbXBhcmU6ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8oYSxkKT0+YCR7YX1gLmxvY2FsZUNvbXBhcmUoZCk6KGEsZCk9PmE9PT1kPzA6YT5kPy0xOjEsbF8pfXkoOTU0OTMpO2NvbnN0IFYyPWM9Pntjb25zdCBsPXt2YWx1ZTohMSx0ZXN0OihhLGQpPT57bC52YWx1ZT1jKGEsZCl9fTty''@;'; put 'put ''ZXR1cm4gbH0sYmc9e2Nocm9tZTpWMigoYyxsKT0+L0Nocm9tZS8udGVzdChjKSYmL0dvb2dsZS8udGVzdChsKSksY2hyb21lV2ViS2l0OlYyKGM9Pi9DcmlPUy8udGVzdChjKSksZWRnZTpWMihjPT4vRWRnZS8udGVzdChjKSksZWRnZVdlYktpdDpWMihjPT4vRWRnaU9TLy50ZXN0KGMpKSxm''@;'; put 'put ''aXJlZm94OlYyKGM9Pi9GaXJlZm94Ly50ZXN0KGMpKSxmaXJlZm94V2ViS2l0OlYyKGM9Pi9GeGlPUy8udGVzdChjKSksbW9iaWxlOlYyKGM9Pi9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChjKSksc2FmYXJpOlYy''@;'; put 'put ''KChjLGwpPT4vU2FmYXJpLy50ZXN0KGMpJiYvQXBwbGUgQ29tcHV0ZXIvLnRlc3QobCkpfSxjXz17bWFjOlYyKGM9Pi9eTWFjLy50ZXN0KGMpKSx3aW46VjIoYz0+L15XaW4vLnRlc3QoYykpLGxpbnV4OlYyKGM9Pi9eTGludXgvLnRlc3QoYykpLGlvczpWMihjPT4vaVBob25lfGlQYWR8aVBv''@;'; put 'put ''ZC9pLnRlc3QoYykpfTtmdW5jdGlvbiBYMmUoKXtsZXR7dXNlckFnZW50OmM9bmF2aWdhdG9yLnVzZXJBZ2VudCx2ZW5kb3I6bD1uYXZpZ2F0b3IudmVuZG9yfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307WG8oYmcsYT0+e2xldHt0''@;'; put 'put ''ZXN0OmR9PWE7ZChjLGwpfSl9ZnVuY3Rpb24gSjJlKCl7bGV0e3BsYXRmb3JtOmM9bmF2aWdhdG9yLnBsYXRmb3JtfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307WG8oY18sbD0+e2xldHt0ZXN0OmF9PWw7YShjKX0pfWZ1bmN0aW9u''@;'; put 'put ''IEwkKCl7cmV0dXJuIGJnLmNocm9tZS52YWx1ZX1mdW5jdGlvbiBRMmUoKXtyZXR1cm4gYmcuY2hyb21lV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIGpPKCl7cmV0dXJuIGJnLmZpcmVmb3gudmFsdWV9ZnVuY3Rpb24gZWZlKCl7cmV0dXJuIGJnLmZpcmVmb3hXZWJLaXQudmFsdWV9ZnVuY3Rpb24g''@;'; put 'put ''QUUoKXtyZXR1cm4gYmcuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIHRmZSgpe3JldHVybiBiZy5lZGdlLnZhbHVlfWZ1bmN0aW9uIF9YZSgpe3JldHVybiBiZy5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEFwKCl7cmV0dXJuIGJnLm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBPJCgpe3JldHVybiBj''@;'; put 'put ''Xy5pb3MudmFsdWV9ZnVuY3Rpb24gUCQoKXtsZXR7bWF4VG91Y2hQb2ludHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5hdmlnYXRvcjtyZXR1cm4gYz4yJiZjXy5tYWMudmFsdWV9ZnVuY3Rpb24gRiQoKXtyZXR1cm4gY18ud2lu''@;'; put 'put ''LnZhbHVlfWZ1bmN0aW9uIHpPKCl7cmV0dXJuIGNfLm1hYy52YWx1ZX1mdW5jdGlvbiB3WGUoKXtyZXR1cm4gY18ubGludXgudmFsdWV9SzJlKCkmJihYMmUoKSxKMmUoKSk7Y29uc3QgWWE9e0FMVDoxOCxBUlJPV19ET1dOOjQwLEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1df''@;'; put 'put ''VVA6MzgsQVVESU9fRE9XTjpqTygpPzE4MjoxNzQsQVVESU9fTVVURTpqTygpPzE4MToxNzMsQVVESU9fVVA6ak8oKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxD''@;'; put 'put ''T05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcs''@;'; put 'put ''RjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFfUExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RPUDoxNzgsTlVMTDowLE5VTV9MT0NLOjE0NCxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJ''@;'; put 'put ''T0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxGOjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODksWjo5MH0sQ1hlPVtZYS5BTFQsWWEuQVJST1dfRE9XTixZYS5BUlJPV19MRUZULFlhLkFSUk9XX1JJR0hULFlh''@;'; put 'put ''LkFSUk9XX1VQLFlhLkFVRElPX0RPV04sWWEuQVVESU9fTVVURSxZYS5BVURJT19VUCxZYS5CQUNLU1BBQ0UsWWEuQ0FQU19MT0NLLFlhLkRFTEVURSxZYS5FTkQsWWEuRU5URVIsWWEuRVNDQVBFLFlhLkYxLFlhLkYyLFlhLkYzLFlhLkY0LFlhLkY1LFlhLkY2LFlhLkY3LFlhLkY4LFlhLkY5''@;'; put 'put ''LFlhLkYxMCxZYS5GMTEsWWEuRjEyLFlhLkYxMyxZYS5GMTQsWWEuRjE1LFlhLkYxNixZYS5GMTcsWWEuRjE4LFlhLkYxOSxZYS5IT01FLFlhLklOU0VSVCxZYS5NRURJQV9ORVhULFlhLk1FRElBX1BMQVlfUEFVU0UsWWEuTUVESUFfUFJFVixZYS5NRURJQV9TVE9QLFlhLk5VTEwsWWEuTlVN''@;'; put 'put ''X0xPQ0ssWWEuUEFHRV9ET1dOLFlhLlBBR0VfVVAsWWEuUEFVU0UsWWEuU0NST0xMX0xPQ0ssWWEuU0hJRlQsWWEuVEFCXTtmdW5jdGlvbiBuZmUoYyl7cmV0dXJuIDMyPT09Y3x8Yz49NDgmJmM8PTU3fHxjPj05NiYmYzw9MTExfHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+''@;'; put 'put ''PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIEgkKGMpe3JldHVybiBDWGUuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gU1hlKGMpe2NvbnN0IGw9W107cmV0dXJuIHpPKCk/bC5wdXNoKFlhLkNPTU1BTkRfTEVGVCxZYS5DT01NQU5EX1JJR0hULFlhLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKFlh''@;'; put 'put ''LkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gcmZlKGMpe3JldHVybltZYS5DT05UUk9MLFlhLkNPTU1BTkRfTEVGVCxZYS5DT01NQU5EX1JJR0hULFlhLkNPTU1BTkRfRklSRUZPWF0uaW5jbHVkZXMoYyl9ZnVuY3Rpb24gdV8oYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQg''@;'; put 'put ''ZD0hMTtyZXR1cm4gWW4oYSxoPT57aWYoYz09PVlhW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiBCMihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSExLGMuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIEZtKGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3Bh''@;'; put 'put ''Z2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBIbShjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIFVPKGMpe3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gaWZlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgVG91Y2hFdmVudH1mdW5jdGlvbiBhZmUoYyxsKXtjb25zdCBhPXt4OmMub2Zm''@;'; put 'put ''c2V0WCx5OmMub2Zmc2V0WX07bGV0IGQ9Yy50YXJnZXQ7aWYoIUVwKGwpfHxkIT09bCYmZC5jb250YWlucyhsKSlyZXR1cm4gYTtmb3IoO2QhPT1sOylhLngrPWQub2Zmc2V0TGVmdCxhLnkrPWQub2Zmc2V0VG9wLGQ9ZC5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9ZnVuY3Rpb24gaWwoKXtQYShj''@;'; put 'put ''b25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gTiQoKXtQYShjb25zb2xlKSYmY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpfWNvbnN0IFo3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlv''@;'; put 'put ''bnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVDb250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIs''@;'; put 'put ''ImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2VsZWN0IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURv''@;'; put 'put ''d24iLCJhZnRlckRyYXdTZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLCJhZnRlckdldENlbGxNZXRhIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJhZnRlckdldFJvd0hlYWRlciIsImFmdGVySW5pdCIsImFmdGVyTG9hZERhdGEi''@;'; put 'put ''LCJhZnRlclVwZGF0ZURhdGEiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJhZnRlck9uQ2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51''@;'; put 'put ''IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJSZW1vdmVDb2wiLCJhZnRlclJlbW92ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0ZXJSZW5kZXJlciIsImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRp''@;'; put 'put ''Y2FsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiwiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCJhZnRlclNjcm9sbCIsImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVBy''@;'; put 'put ''b3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIiwiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNlbGVjdENvbHVtbnMiLCJhZnRlclNlbGVjdENvbHVtbnMiLCJiZWZvcmVTZWxlY3RSb3dzIiwiYWZ0ZXJTZWxlY3RSb3dzIiwiYWZ0ZXJTZXRD''@;'; put 'put ''ZWxsTWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNldERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLCJhZnRlclNldFRoZW1lIiwiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsImFmdGVyVmFsaWRhdGUiLCJiZWZvcmVM''@;'; put 'put ''YW5ndWFnZUNoYW5nZSIsImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLCJiZWZvcmVBdXRvZmlsbCIsImFmdGVyQXV0b2ZpbGwiLCJiZWZvcmVDZWxsQWxpZ25tZW50IiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlQ2hhbmdlUmVuZGVyIiwiYmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0''@;'; put 'put ''YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxrb250YWJsZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJlZm9yZUtleURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVm''@;'; put 'put ''b3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJvdyIsImJlZm9yZVZpZXdSZW5kZXIiLCJhZnRlclZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJl''@;'; put 'put ''bmRlciIsImJlZm9yZVJvd1dyYXAiLCJiZWZvcmVDb2x1bW5XcmFwIiwiYmVmb3JlU2V0Q2VsbE1ldGEiLCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlU2Vs''@;'; put 'put ''ZWN0aW9uSGlnaGxpZ2h0U2V0IiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCJt''@;'; put 'put ''b2RpZnlGb2N1c2VkRWxlbWVudCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLCJtb2RpZnlEYXRhIiwibW9kaWZ5U291cmNlRGF0YSIsIm1vZGlmeVJvd0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwibW9kaWZ5''@;'; put 'put ''R2V0Q29vcmRzRWxlbWVudCIsIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwicGVyc2lzdGVudFN0YXRlTG9hZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVu''@;'; put 'put ''dFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0IiwiYmVmb3JlQ29weSIsImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0''@;'; put 'put ''ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsImJlZm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVD''@;'; put 'put ''b2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9y''@;'; put 'put ''ZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLCJhZnRlclNoZWV0QWRkZWQiLCJhZnRlclNoZWV0UmVuYW1lZCIsImFmdGVyU2hlZXRSZW1vdmVk''@;'; put 'put ''IiwibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLCJiZWZvcmVVbmRvIiwiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJVbmRvIiwiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLCJiZWZvcmVSZWRvIiwiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIiwi''@;'; put 'put ''YWZ0ZXJSZWRvIiwiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJtb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwiYWZ0ZXJNb2RpZnlU''@;'; put 'put ''cmFuc2Zvcm1TdGFydCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsImJlZm9yZUhpZGVSb3dzIiwiYWZ0''@;'; put 'put ''ZXJIaWRlUm93cyIsImJlZm9yZVVuaGlkZVJvd3MiLCJhZnRlclVuaGlkZVJvd3MiLCJiZWZvcmVIaWRlQ29sdW1ucyIsImFmdGVySGlkZUNvbHVtbnMiLCJiZWZvcmVVbmhpZGVDb2x1bW5zIiwiYWZ0ZXJVbmhpZGVDb2x1bW5zIiwiYmVmb3JlVHJpbVJvdyIsImFmdGVyVHJpbVJvdyIsImJl''@;'; put 'put ''Zm9yZVVudHJpbVJvdyIsImFmdGVyVW50cmltUm93IiwiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51SGlkZSIsImJlZm9yZUFkZENoaWxkIiwiYWZ0ZXJBZGRDaGlsZCIsImJlZm9yZURldGFjaENoaWxkIiwiYWZ0ZXJE''@;'; put 'put ''ZXRhY2hDaGlsZCIsImJlZm9yZUJlZ2luRWRpdGluZyIsImFmdGVyQmVnaW5FZGl0aW5nIiwiYmVmb3JlTWVyZ2VDZWxscyIsImFmdGVyTWVyZ2VDZWxscyIsImJlZm9yZVVubWVyZ2VDZWxscyIsImFmdGVyVW5tZXJnZUNlbGxzIiwiYWZ0ZXJMaXN0ZW4iLCJhZnRlclVubGlzdGVuIiwiYWZ0''@;'; put 'put ''ZXJSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLCJhZnRlckNvbHVtbkNvbGxhcHNlIiwiYmVmb3JlQ29sdW1uRXhwYW5kIiwiYWZ0ZXJDb2x1bW5FeHBhbmQiLCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiXSxWJD1u''@;'; put 'put ''ZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2RpZnlSb3ciLCI4LjAuMCJdLFsidW5tb2RpZnlDb2wiLCI4LjAuMCJdLFsic2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxbImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ci''@;'; put 'put ''LCI4LjAuMCJdXSksQiQ9bmV3IE1hcChbW11dKTtmdW5jdGlvbiBqJChjLGwsYSl7b2ZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBvZmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3''@;'; put 'put ''aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHNmZShjLGwsYSl7cmV0dXJuIGMuc2V0KFpPKGMsbCksYSksYX1mdW5jdGlvbiBaMChjLGwpe3JldHVybiBjLmdldChaTyhjLGwpKX1mdW5jdGlvbiBaTyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0''@;'; put 'put ''dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eSgyMzAxMikseSg4MTI2MCk7dmFyIERoPW5ldyBXZWFrTWFwLGRfPW5ldyBXZWFrTWFwLHokPW5ldyBXZWFrTWFwLFUk''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzIGxmZXtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBNWGUoYyxsKXtvZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsVSQpLGokKHRoaXMsRGgsbmV3IE1hcCksaiQodGhpcyxkXyxuZXcgTWFwKSxqJCh0aGlzLHokLG5ldyBTZXQpLFo3LmZvckVhY2gobD0+Wk8oVSQs''@;'; put 'put ''dGhpcyxjZmUpLmNhbGwodGhpcyxsKSl9Z2V0SG9va3MobCl7dmFyIGE7cmV0dXJuIG51bGwhPT0oYT1aMChEaCx0aGlzKS5nZXQobCkpJiZ2b2lkIDAhPT1hP2E6W119YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJd''@;'; put 'put ''Ont9O1owKERoLHRoaXMpLmhhcyhsKXx8KFpPKFUkLHRoaXMsY2ZlKS5jYWxsKHRoaXMsbCksWjcucHVzaChsKSk7Y29uc3QgaD1aMChEaCx0aGlzKS5nZXQobCk7aWYoaC5maW5kKFo9PlouY2FsbGJhY2s9PT1hKSlyZXR1cm47Y29uc3QgZj1OdW1iZXIuaXNJbnRlZ2VyKGQub3JkZXJJbmRl''@;'; put 'put ''eCk/ZC5vcmRlckluZGV4OjAsdj0hIWQucnVuT25jZSxNPSEhZC5pbml0aWFsSG9vaztsZXQgRD0hMTtpZihNKXtjb25zdCBaPWguZmluZChyZT0+cmUuaW5pdGlhbEhvb2spO1omJihaLmNhbGxiYWNrPWEsRD0hMCl9aWYoIUQpe2gucHVzaCh7Y2FsbGJhY2s6YSxvcmRlckluZGV4OmYscnVu''@;'; put 'put ''T25jZTp2LGluaXRpYWxIb29rOk0sc2tpcDohMX0pO2xldCBaPVowKHokLHRoaXMpLmhhcyhsKTshWiYmMCE9PWYmJihaPSEwLFowKHokLHRoaXMpLmFkZChsKSksWiYmaC5sZW5ndGg+MSYmWjAoRGgsdGhpcykuc2V0KGwsaC50b1NvcnRlZCgocmUsY2UpPT5yZS5vcmRlckluZGV4LWNlLm9y''@;'; put 'put ''ZGVySW5kZXgpKX19aGFzKGwpe3JldHVybiBaMChEaCx0aGlzKS5oYXMobCkmJlowKERoLHRoaXMpLmdldChsKS5sZW5ndGg+MH1yZW1vdmUobCxhKXtpZighWjAoRGgsdGhpcykuaGFzKGwpKXJldHVybiExO2NvbnN0IGQ9WjAoRGgsdGhpcykuZ2V0KGwpLGg9ZC5maW5kKGY9PmYuY2FsbGJh''@;'; put 'put ''Y2s9PT1hKTtpZihoKXtsZXQgZj1aMChkXyx0aGlzKS5nZXQobCk7cmV0dXJuIGguc2tpcD0hMCxmKz0xLGY+MTAwJiYoWjAoRGgsdGhpcykuc2V0KGwsZC5maWx0ZXIodj0+IXYuc2tpcCkpLGY9MCksWjAoZF8sdGhpcykuc2V0KGwsZiksITB9cmV0dXJuITF9ZGVzdHJveSgpe1owKERoLHRo''@;'; put 'put ''aXMpLmNsZWFyKCksWjAoZF8sdGhpcykuY2xlYXIoKSxzZmUoRGgsdGhpcyxudWxsKSxzZmUoZF8sdGhpcyxudWxsKX19ZnVuY3Rpb24gY2ZlKGMpe1owKERoLHRoaXMpLnNldChjLFtdKSxaMChkXyx0aGlzKS5zZXQoYywwKX1jb25zdCBrWGU9Z2xgVGhlIHBsdWdpbiBob29rICJbaG9va05h''@;'; put 'put ''bWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQbGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0g''@;'; put 'put ''dG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmA7Y2xhc3MgU2F7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gRVhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUWGUoYyl7dmFyIGw9ZnVuY3Rpb24gQVhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZ2xvYmFsQnVja2V0IixuZXcgbGZlKX1zdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIElYZSgpe3JldHVybiBEWGV9KCl9Z2V0QnVja2V0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGw/KGwucGx1Z2luSG9va0J1Y2tldHx8KGwucGx1Z2luSG9va0J1Y2tldD1uZXcgbGZlKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxmPT50aGlzLmFkZChsLGYsZCkpOihWJC5oYXMobCkmJmlsKHAkKGtYZSx7aG9va05hbWU6bCxyZW1vdmVk''@;'; put 'put ''SW5WZXJzaW9uOlYkLmdldChsKX0pKSxCJC5oYXMobCkmJmlsKEIkLmdldChsKSksdGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITF9KSksdGhpc31vbmNlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/''@;'; put 'put ''YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGY9PnRoaXMub25jZShsLGYsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse29yZGVySW5kZXg6aCxydW5PbmNlOiEwfSksdGhp''@;'; put 'put ''c31hZGRBc0ZpeGVkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxoPT50aGlzLmFkZEFzRml4ZWQobCxoLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxh''@;'; put 'put ''LHtpbml0aWFsSG9vazohMH0pLHRoaXN9cmVtb3ZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKS5yZW1vdmUobCxhKX1oYXMobCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKS5oYXMobCl9cnVuKGwsYSxkLGgsZix2LE0sRCl7e2NvbnN0IFo9dGhpcy5nZXRCdWNrZXQoKS5nZXRIb29rcyhhKSxyZT1aP1oubGVuZ3RoOjA7bGV0IGNlPTA7aWYocmUpZm9yKDtjZTxyZTsp''@;'; put 'put ''e2lmKCFaW2NlXXx8WltjZV0uc2tpcCl7Y2UrPTE7Y29udGludWV9Y29uc3QgYmU9SE8oWltjZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAwIT09YmUmJihkPWJlKSxaW2NlXSYmWltjZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxaW2NlXS5jYWxsYmFjayksY2UrPTF9fXtjb25z''@;'; put 'put ''dCBaPXRoaXMuZ2V0QnVja2V0KGwpLmdldEhvb2tzKGEpLHJlPVo/Wi5sZW5ndGg6MDtsZXQgY2U9MDtpZihyZSlmb3IoO2NlPHJlOyl7aWYoIVpbY2VdfHxaW2NlXS5za2lwKXtjZSs9MTtjb250aW51ZX1jb25zdCBiZT1ITyhaW2NlXS5jYWxsYmFjayxsLGQsaCxmLHYsTSxEKTt2b2lkIDAh''@;'; put 'put ''PT1iZSYmKGQ9YmUpLFpbY2VdJiZaW2NlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLFpbY2VdLmNhbGxiYWNrLGwpLGNlKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51''@;'; put 'put ''bGwpLmRlc3Ryb3koKX1yZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKXx8WjcucHVzaChsKX1kZXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpJiZaNy5zcGxpY2UoWjcuaW5kZXhPZihsKSwxKX1pc0RlcHJlY2F0ZWQobCl7cmV0dXJuIEIkLmhhcyhsKXx8ViQuaGFzKGwp''@;'; put 'put ''fWlzUmVnaXN0ZXJlZChsKXtyZXR1cm4gWjcuaW5kZXhPZihsKT49MH1nZXRSZWdpc3RlcmVkKCl7cmV0dXJuIFo3fX1jb25zdCBEWGU9bmV3IFNhLFokPW5ldyBNYXA7ZnVuY3Rpb24gcjMoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu''@;'; put 'put ''dHNbMF06ImNvbW1vbiI7WiQuaGFzKGMpfHxaJC5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPVokLmdldChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShNLEQpe2wuc2V0KE0sRCl9LGdldEl0ZW06ZnVuY3Rpb24gZChNKXtyZXR1cm4gbC5nZXQoTSl9LGhhc0l0ZW06ZnVuY3Rpb24gaChN''@;'; put 'put ''KXtyZXR1cm4gbC5oYXMoTSl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlzKCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gdigpe3JldHVyblsuLi5sLnZhbHVlcygpXX19fWNvbnN0IFckPW5ldyBXZWFrTWFwLHtyZWdpc3RlcjpSWGUsZ2V0SXRlbTp1ZmUsaGFzSXRlbTpk''@;'; put 'put ''ZmUsZ2V0TmFtZXM6TFhlfT1yMygiZWRpdG9ycyIpO2Z1bmN0aW9uIE9YZShjKXtjb25zdCBsPXt9LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5l''@;'; put 'put ''dyBhKGQpKSxsW2QuZ3VpZF19LFNhLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gaGZlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpVyQuZ2V0KGMpfHxIZChudWxsLGMpLGE9VyQuZ2V0''@;'; put 'put ''KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9dWZlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBu''@;'; put 'put ''YW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIFdPKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFkZmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIHVm''@;'; put 'put ''ZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIEhkKGMsbCl7YyYmInN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgT1hlKGwpOyJzdHJpbmciPT10eXBlb2YgYyYmUlhlKGMsYSksVyQuc2V0KGwsYSl9bGV0IFlPPTA7Y29uc3QgajI9Y2xh''@;'; put 'put ''c3MgTlhle2NvbnN0cnVjdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7KGZ1bmN0aW9uIFBYZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRlhlKGMpe3ZhciBsPWZ1bmN0aW9uIEhYZShjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJjb250ZXh0Iix2b2lkIDApLHRoaXMuY29udGV4dD1sfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKHYpe2QuY2FsbCh0aGlzLGZ1bmN0aW9uIFZYZShjKXtjb25zdCBsPWMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0''@;'; put 'put ''b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksQjIodGhpcyl9LGN9KHYpKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxiYWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVu''@;'; put 'put ''dE1hbmFnZXI6dGhpc30pLGwuYWRkRXZlbnRMaXN0ZW5lcihhLGYsaCksWU8rPTEsKCk9Pnt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgdixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZh''@;'; put 'put ''cmd1bWVudHNbM10sZj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYoZi09MSx2PXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSx2LmV2ZW50PT09YSYmdi5lbGVtZW50PT09bCl7aWYoZCYmZCE9PXYuY2FsbGJhY2t8fGgmJnYuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''IT09dGhpcyljb250aW51ZTt0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksdi5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodi5ldmVudCx2LmNhbGxiYWNrUHJveHksdi5vcHRpb25zKSxZTy09MX19Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2''@;'; put 'put ''ZW50TWFuYWdlciE9PXRoaXN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSksZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSxZTy09MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLmNsZWFyRXZlbnRzKCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50''@;'; put 'put ''P2wub3duZXJEb2N1bWVudDpsLGg9ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0''@;'; put 'put ''S2V5OiExLG1ldGFLZXk6ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCB2O2QuY3JlYXRlRXZlbnQ/KHY9ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSx2LmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3Jl''@;'; put 'put ''ZW5YLGYuc2NyZWVuWSxmLmNsaWVudFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQuYm9keS5wYXJlbnROb2RlKSk6dj1kLmNyZWF0ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlz''@;'; put 'put ''cGF0Y2hFdmVudCh2KTpsLmZpcmVFdmVudChgb24ke2F9YCx2KX19O2Z1bmN0aW9uIFc3KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVWGUoYyl7dmFyIGw9ZnVuY3Rpb24gWlhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1p''@;'; put 'put ''dGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9''@;'; put 'put ''PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31m''@;'; put 'put ''dW5jdGlvbiBZJChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEdPPW5l''@;'; put 'put ''dyBXZWFrU2V0O2NsYXNzIEcke2NvbnN0cnVjdG9yKGwsYSxkKXsoZnVuY3Rpb24galhlKGMsbCl7KGZ1bmN0aW9uIHpYZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxHTyksVzcodGhpcywiaG90Iix2b2lkIDApLFc3KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSxXNyh0aGlzLCJzZWxlY3Rpb24iLHZvaWQgMCksVzcodGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLFc3KHRoaXMsImRlc3Ryb3llZCIs''@;'; put 'put ''ITEpLFc3KHRoaXMsImFjdGl2ZUVkaXRvciIsdm9pZCAwKSxXNyh0aGlzLCJjZWxsUHJvcGVydGllcyIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMudGFibGVNZXRhPWEsdGhpcy5zZWxlY3Rpb249ZCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgajIobCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJE''@;'; put 'put ''b2N1bWVudEtleURvd24iLGg9PlkkKEdPLHRoaXMsZmZlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGg9PlkkKEdPLHRoaXMsZmZlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LnZpZXcuX3d0LnVwZGF0ZSgib25DZWxsRGJsQ2xpY2si''@;'; put 'put ''LChoLGYsdik9PlkkKEdPLHRoaXMsV1hlKS5jYWxsKHRoaXMsaCxmLHYpKX1nZXRBY3RpdmVFZGl0b3IoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3J9cHJlcGFyZUVkaXRvcigpe3ZhciBsO2lmKHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1''@;'; put 'put ''cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLFo9PntaJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8YS5pc0hlYWRlcigpKXJl''@;'; put 'put ''dHVybjtjb25zdHtyb3c6ZCxjb2w6aH09YSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtsZXQgdj1kLE09aDtpZihBcnJheS5pc0FycmF5KGYpJiYoW3YsTV09ZiksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmhvdC5nZXRDZWxsTWV0''@;'; put 'put ''YSh2LE0pLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbChkLGgsITApO2lmKEQpe2NvbnN0IFo9dGhpcy5ob3QuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxyZT10aGlz''@;'; put 'put ''LmhvdC5jb2xUb1Byb3AoTSksY2U9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pO3RoaXMuYWN0aXZlRWRpdG9yPWhmZShaLHRoaXMuaG90KSx0aGlzLmFjdGl2ZUVkaXRvci5wcmVwYXJlKGQsaCxyZSxELGNlLHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMpfX1pc0VkaXRvck9wZW5lZCgpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNPcGVuZWQoKX1vcGVuRWRpdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZighdGhp''@;'; put 'put ''cy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bGV0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUJlZ2luRWRpdGluZyIsaC5oaWdobGlnaHQucm93LGguaGlnaGxp''@;'; put 'put ''Z2h0LmNvbCxsLGEsZCk7YSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJiJib29sZWFuIiE9dHlwZW9mIGYmJihmPTA9PT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzU2luZ2xlKCkpLCExIT09Zj8odGhpcy5hY3RpdmVFZGl0b3J8fCh0aGlzLmhvdC5zY3JvbGxUb0Zv''@;'; put 'put ''Y3VzZWRDZWxsKCksdGhpcy5wcmVwYXJlRWRpdG9yKCkpLHRoaXMuYWN0aXZlRWRpdG9yJiYoZCYmdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCksdGhpcy5hY3RpdmVFZGl0b3IuYmVnaW5FZGl0aW5nKGwsYSkpKTp0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCl9Y2xvc2VF''@;'; put 'put ''ZGl0b3IobCxhLGQpe3RoaXMuYWN0aXZlRWRpdG9yP3RoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcobCxhLGQpOmQmJmQoITEpfWNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobCl7dGhpcy5jbG9zZUVkaXRvcighMSxsKX1jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVl''@;'; put 'put ''KGwpe3RoaXMuY2xvc2VFZGl0b3IoITAsbCl9Y2xlYXJBY3RpdmVFZGl0b3IoKXt0aGlzLmFjdGl2ZUVkaXRvcj12b2lkIDB9aXNDZWxsRWRpdGFibGUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdC5nZXRD''@;'; put 'put ''ZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6ZCxjb2w6aH09bC5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3QsTT1mLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZCkpfHx2LmlzSGlkZGVuKHRoaXMuaG90''@;'; put 'put ''LnRvUGh5c2ljYWxDb2x1bW4oaCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWF8fE0pfW1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9ey4uLiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRh''@;'; put 'put ''LmVudGVyTW92ZXMobCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlc307bC5zaGlmdEtleSYmKGEucm93PS1hLnJvdyxhLmNvbD0tYS5jb2wpLHRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCk/dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoYS5yb3csYS5jb2wpOnRoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBmZmUoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCF0aGlzLmhvdC5p''@;'; put 'put ''c0xpc3RlbmluZygpfHwhbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8Rm0oYykpcmV0dXJuO2NvbnN0e2tleUNvZGU6YX09YyxkPShjLmN0cmxLZXl8fGMubWV0YUtleSkmJiFjLmFsdEtleTsoIXRoaXMuYWN0aXZlRWRpdG9yfHx0aGlzLmFjdGl2ZUVkaXRvciYmIXRoaXMuYWN0aXZlRWRp''@;'; put 'put ''dG9yLmlzV2FpdGluZygpKSYmIUgkKGEpJiYhcmZlKGEpJiYhZCYmIXRoaXMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5vcGVuRWRpdG9yKCIiLGMpfWZ1bmN0aW9uIFdYZShjLGwpe2wuaXNDZWxsKCkmJnRoaXMub3BlbkVkaXRvcihudWxsLGMsITApfWNvbnN0IHBmZT1uZXcgV2Vha01hcDtH''@;'; put 'put ''JC5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9cGZlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IEckKGMsbCxhKSxwZmUuc2V0KGMsZCkpLGR9O2NvbnN0IFlYZT1HJDtmdW5jdGlvbiBrRShjLGwsYSl7Z2ZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBnZmUoYyxsKXtpZihs''@;'; put 'put ''LmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGNjKGMsbCl7cmV0dXJuIGMuZ2V0KHlnKGMsbCkpfWZ1bmN0aW9uIERFKGMsbCxhKXtyZXR1cm4gYy5zZXQo''@;'; put 'put ''eWcoYyxsKSxhKSxhfWZ1bmN0aW9uIHlnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX1jb25zdCBoXz1PYmplY3QuZnJlZXplKHtDRUxMOiJjZWxsIixNSVhFRDoibWl4ZWQifSk7dmFyIFh1PW5ldyBXZWFrTWFwLCRPPW5ldyBXZWFrTWFwLEtPPW5ldyBXZWFrTWFwLHFPPW5ldyBXZWFrTWFwLFhPPW5ldyBXZWFrTWFwLE5tPW5ldyBXZWFrU2V0O2NsYXNzICRYZXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXt2YXIgYT10aGlzOyhmdW5jdGlvbiBHWGUoYyxsKXtnZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsTm0pLGtFKHRoaXMsWHUsdm9pZCAwKSxrRSh0aGlzLCRPLHZvaWQgMCksa0UodGhpcyxLTywxKSxrRSh0aGlzLHFPLG51bGwpLGtFKHRoaXMsWE8sbmV3IE1hcCk7Y29uc3Qg''@;'; put 'put ''ZD1sLmdldFNldHRpbmdzKCk7REUoWHUsdGhpcyxsKSxERSgkTyx0aGlzLGQuaW1lRmFzdEVkaXQ/aF8uTUlYRUQ6aF8uQ0VMTCksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJh''@;'; put 'put ''eShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoTm0sYSxxWGUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2''@;'; put 'put ''PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhObSxhLG1mZSkuY2FsbChhLC4uLmYpfSksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxo''@;'; put 'put ''O3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoTm0sYSxtZmUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZb''@;'; put 'put ''dl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhObSxhLEtYZSkuY2FsbChhLC4uLmYpfSl9Z2V0Rm9jdXNNb2RlKCl7cmV0dXJuIGNjKCRPLHRoaXMpfXNldEZvY3VzTW9kZShsKXtPYmplY3QudmFsdWVzKGhfKS5pbmNsdWRlcyhsKT9ERSgkTyx0aGlzLGwpOmlsKGAiJHtsfSIgaXMgbm90IGEg''@;'; put 'put ''dmFsaWQgZm9jdXMgbW9kZS5gKX1nZXRSZWZvY3VzRGVsYXkoKXtyZXR1cm4gY2MoS08sdGhpcyl9c2V0UmVmb2N1c0RlbGF5KGwpe0RFKEtPLHRoaXMsbCl9c2V0UmVmb2N1c0VsZW1lbnRHZXR0ZXIobCl7REUocU8sdGhpcyxsKX1nZXRSZWZvY3VzRWxlbWVudCgpe3ZhciBsO3JldHVybiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjYyhxTyx0aGlzKT9jYyhxTyx0aGlzKS5jYWxsKHRoaXMpOm51bGw9PT0obD1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuVEVYVEFSRUF9Zm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChsKXtjb25zdCBhPWQ9Pnt2YXIg''@;'; put 'put ''aCxmO2NvbnN0IHY9bnVsbD09PShoPWNjKFh1LHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodDtpZighdilyZXR1cm47bGV0IE09Y2MoWHUsdGhpcykucnVuSG9va3MoIm1vZGlmeUZvY3VzZWRFbGVtZW50Iix2LnJvdyx2LmNvbCxk''@;'; put 'put ''KTtFcChNKXx8KE09ZCksTSYmKG51bGw9PT0oZj1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWZ8fCFmLmlzT3BlbmVkKCkpJiZNLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9O2w/YShsKTp5ZyhObSx0aGlzLCQkKS5jYWxsKHRoaXMsZD0+YShkKSl9cmVmb2N1''@;'; put 'put ''c1RvRWRpdG9yVGV4dGFyZWEoKXt2YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06Y2MoS08sdGhpcyk7dmFyIGQsaDshY2MoWHUsdGhpcykuZ2V0U2V0dGluZ3MoKS5pbWVGYXN0RWRpdHx8bnVsbCE9PShsPWNjKFh1LHRo''@;'; put 'put ''aXMpLmdldEFjdGl2ZUVkaXRvcigpKSYmdm9pZCAwIT09bCYmbC5pc09wZW5lZCgpfHwobnVsbD09PShkPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09ZHx8bnVsbD09PShoPWQucmVmcmVzaFZhbHVlKXx8dm9pZCAwPT09aHx8aC5jYWxsKGQpLGNjKFhPLHRoaXMp''@;'; put 'put ''LmhhcyhhKXx8Y2MoWE8sdGhpcykuc2V0KGEsTUUoKCk9Pnt2YXIgZjtjYyhYdSx0aGlzKS5pc0Rlc3Ryb3llZHx8bnVsbD09PShmPXRoaXMuZ2V0UmVmb2N1c0VsZW1lbnQoKSl8fHZvaWQgMD09PWZ8fGYuc2VsZWN0KCl9LGEpKSxjYyhYTyx0aGlzKS5nZXQoYSkoKSl9fWZ1bmN0aW9uICQk''@;'; put 'put ''KGMpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPWNjKFh1LHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8IWNjKFh1LHRoaXMpLnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpKXJldHVybiB2b2lkIGMobnVsbCk7Y29u''@;'; put 'put ''c3QgZD1jYyhYdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKTtudWxsPT09ZD9jYyhYdSx0aGlzKS5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLCgpPT57YyhjYyhYdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKSl9KTpjKGQpfWZ1bmN0aW9uIG1mZSgpe3lnKE5tLHRoaXMs''@;'; put 'put ''JCQpLmNhbGwodGhpcyxjPT57Y29uc3R7YWN0aXZlRWxlbWVudDpsfT1jYyhYdSx0aGlzKS5yb290RG9jdW1lbnQ7bCYmRk8obCkmJmwuYmx1cigpLHRoaXMuZm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChjKX0pfWZ1bmN0aW9uIEtYZSgpe3lnKE5tLHRoaXMsJCQpLmNhbGwodGhpcyxjPT57dGhp''@;'; put 'put ''cy5nZXRGb2N1c01vZGUoKT09PWhfLk1JWEVEJiYiVEQiPT09Yz8ubm9kZU5hbWUmJnRoaXMucmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKX0pfWZ1bmN0aW9uIHFYZShjKXsiYm9vbGVhbiI9PXR5cGVvZiBjLmltZUZhc3RFZGl0JiZ0aGlzLnNldEZvY3VzTW9kZShjLmltZUZhc3RFZGl0P2hf''@;'; put 'put ''Lk1JWEVEOmhfLkNFTEwpfXkoMTYyMjkpLHkoNDQyMTMpO2NvbnN0IHZmZT17IiZuYnNwOyI6IiAiLCImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+In0sWFhlPW5ldyBSZWdFeHAoT2JqZWN0LmtleXModmZlKS5tYXAoYz0+YCgke2N9KWApLmpvaW4oInwiKSwiZ2kiKTtmdW5jdGlv''@;'; put 'put ''biBLJChjKXtjb25zdCBsPWMuaGFzQ29sSGVhZGVycygpLGE9Yy5oYXNSb3dIZWFkZXJzKCksZD1bbD8tMTowLGE/LTE6MCxjLmNvdW50Um93cygpLTEsYy5jb3VudENvbHMoKS0xXSxoPWMuZ2V0RGF0YSguLi5kKSxmPWgubGVuZ3RoLHY9Zj4wP2hbMF0ubGVuZ3RoOjAsTT1bIjx0YWJsZT4i''@;'; put 'put ''LCI8L3RhYmxlPiJdLEQ9bD9bIjx0aGVhZD4iLCI8L3RoZWFkPiJdOltdLFo9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxyZT1hPzE6MCxjZT1sPzE6MDtmb3IobGV0IGJlPTA7YmU8ZjtiZSs9MSl7Y29uc3QgRWU9bCYmMD09PWJlLEJlPVtdO2ZvcihsZXQgcnQ9MDtydDx2O3J0Kz0xKXtjb25z''@;'; put 'put ''dCBwdD0hRWUmJmEmJjA9PT1ydDtsZXQgZHQ9IiI7aWYoRWUpZHQ9YDx0aD4ke2MuZ2V0Q29sSGVhZGVyKHJ0LXJlKX08L3RoPmA7ZWxzZSBpZihwdClkdD1gPHRoPiR7Yy5nZXRSb3dIZWFkZXIoYmUtY2UpfTwvdGg+YDtlbHNle2NvbnN0IEp0PWhbYmVdW3J0XSx7aGlkZGVuOnZuLHJvd3Nw''@;'; put 'put ''YW46Q24sY29sc3Bhbjp0bn09Yy5nZXRDZWxsTWV0YShiZS1jZSxydC1yZSk7aWYoIXZuKXtjb25zdCBNbj1bXTtpZihDbiYmTW4ucHVzaChgcm93c3Bhbj0iJHtDbn0iYCksdG4mJk1uLnB1c2goYGNvbHNwYW49IiR7dG59ImApLFVjKEp0KSlkdD1gPHRkICR7TW4uam9pbigiICIpfT48L3Rk''@;'; put 'put ''PmA7ZWxzZXtjb25zdCBDcj1KdC50b1N0cmluZygpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgv''@;'; put 'put ''XHQvZ2ksIiYjOTsiKTtkdD1gPHRkICR7TW4uam9pbigiICIpfT4ke0NyfTwvdGQ+YH19fUJlLnB1c2goZHQpfWNvbnN0IHFlPVsiPHRyPiIsLi4uQmUsIjwvdHI+Il0uam9pbigiIik7RWU/RC5zcGxpY2UoMSwwLHFlKTpaLnNwbGljZSgtMSwwLHFlKX1yZXR1cm4gTS5zcGxpY2UoMSwwLEQu''@;'; put 'put ''am9pbigiIiksWi5qb2luKCIiKSksTS5qb2luKCIiKX1mdW5jdGlvbiBxJChjKXtjb25zdCBsPWMubGVuZ3RoLGE9WyI8dGFibGU+Il07Zm9yKGxldCBkPTA7ZDxsO2QrPTEpe2NvbnN0IGg9Y1tkXSxmPWgubGVuZ3RoLHY9W107MD09PWQmJmEucHVzaCgiPHRib2R5PiIpO2ZvcihsZXQgTT0w''@;'; put 'put ''O008ZjtNKz0xKXtjb25zdCBEPWhbTV0sWj1VYyhEKT8iIjpELnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxu''@;'; put 'put ''IikucmVwbGFjZSgvXHgyMHsyLH0vZ2kscmU9PmA8c3BhbiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KHJlLmxlbmd0aC0xKX0gPC9zcGFuPmApLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7di5wdXNoKGA8dGQ+JHtafTwvdGQ+YCl9YS5wdXNoKCI8dHI+Iiwu''@;'; put 'put ''Li52LCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEuam9pbigiIil9ZnVuY3Rpb24gYmZlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtj''@;'; put 'put ''b25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0IEp0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9n''@;'; put 'put ''LHZuPT57Y29uc3QgQ249dm4ubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHtDbn0ke3ZuLnN1YnN0cmluZyhDbi5sZW5ndGgsdm4ubGFzdEluZGV4T2YoIjwiKSkudHJpbSgpLnJlcGxhY2VBbGwoL1xuXHMrL2csIiAiKS5yZXBsYWNlQWxsKC88cC4qPz4vZywiXG4iKS5yZXBs''@;'; put 'put ''YWNlKCJcbiIsIiIpLnJlcGxhY2VBbGwoLzxcLyguKik+XHMrJC9nbSwiPC8kMT4iKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwiIikucmVwbGFjZUFsbCgvXiZuYnNwOyQvZ20sIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtKdH1gKSxm''@;'; put 'put ''PWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1bmN0aW9uIEpYZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IHY9aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksTT1udWxsIT09Zi5xdWVyeVNl''@;'; put 'put ''bGVjdG9yKCJ0Ym9keSB0aCIpLEQ9Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLFo9RD9BcnJheS5mcm9tKEQuY2VsbHMpLnJlZHVjZSgoSnQsdm4pPT5KdCt2bi5jb2xTcGFuLDApLShNPzE6MCk6MCxyZT1mLnRGb290JiZBcnJheS5mcm9tKGYudEZvb3Qucm93cyl8fFtdLGNlPVtdO2xldCBiZT0h''@;'; put 'put ''MSxFZT0wLEJlPTA7aWYoZi50SGVhZCl7Y29uc3QgSnQ9QXJyYXkuZnJvbShmLnRIZWFkLnJvd3MpLmZpbHRlcih2bj0+e2NvbnN0IENuPW51bGwhPT12bi5xdWVyeVNlbGVjdG9yKCJ0ZCIpO3JldHVybiBDbiYmY2UucHVzaCh2biksIUNufSk7RWU9SnQubGVuZ3RoLGJlPUVlPjAsRWU+MT9h''@;'; put 'put ''Lm5lc3RlZEhlYWRlcnM9QXJyYXkuZnJvbShKdCkucmVkdWNlKCh2bixDbik9Pntjb25zdCB0bj1BcnJheS5mcm9tKENuLmNlbGxzKS5yZWR1Y2UoKE1uLENyLEdyKT0+e2lmKE0mJjA9PT1HcilyZXR1cm4gTW47Y29uc3R7Y29sU3Bhbjptcixpbm5lckhUTUw6R259PUNyO3JldHVybiBNbi5w''@;'; put 'put ''dXNoKG1yPjE/e2xhYmVsOkduLGNvbHNwYW46bXJ9OkduKSxNbn0sW10pO3JldHVybiB2bi5wdXNoKHRuKSx2bn0sW10pOmJlJiYoYS5jb2xIZWFkZXJzPUFycmF5LmZyb20oSnRbMF0uY2hpbGRyZW4pLnJlZHVjZSgodm4sQ24sdG4pPT4oTSYmMD09PXRufHx2bi5wdXNoKENuLmlubmVySFRN''@;'; put 'put ''TCksdm4pLFtdKSl9Y2UubGVuZ3RoJiYoYS5maXhlZFJvd3NUb3A9Y2UubGVuZ3RoKSxyZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT1yZS5sZW5ndGgpO2NvbnN0IHFlPVsuLi5jZSwuLi5BcnJheS5mcm9tKGYudEJvZGllcykucmVkdWNlKChKdCx2bik9PihKdC5wdXNoKC4uLkFycmF5''@;'; put 'put ''LmZyb20odm4ucm93cykpLEp0KSxbXSksLi4ucmVdO0JlPXFlLmxlbmd0aDtjb25zdCBydD1uZXcgQXJyYXkoQmUpO2ZvcihsZXQgSnQ9MDtKdDxCZTtKdCsrKXJ0W0p0XT1uZXcgQXJyYXkoWik7Y29uc3QgcHQ9W10sZHQ9W107Zm9yKGxldCBKdD0wO0p0PEJlO0p0Kyspe2NvbnN0IENuPUFy''@;'; put 'put ''cmF5LmZyb20ocWVbSnRdLmNlbGxzKSx0bj1Dbi5sZW5ndGg7Zm9yKGxldCBNbj0wO01uPHRuO01uKyspe2NvbnN0IENyPUNuW01uXSx7bm9kZU5hbWU6R3IsaW5uZXJIVE1MOm1yLHJvd1NwYW46R24sY29sU3BhbjphaX09Q3IsX2k9cnRbSnRdLmZpbmRJbmRleChPbj0+dm9pZCAwPT09T24p''@;'; put 'put ''O2lmKCJURCI9PT1Hcil7aWYoR24+MXx8YWk+MSl7Zm9yKGxldCBJcj1KdDtJcjxKdCtHbjtJcisrKWlmKElyPEJlKWZvcihsZXQgJHI9X2k7JHI8X2krYWk7JHIrKylydFtJcl1bJHJdPW51bGw7Y29uc3QgenI9Q3IuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO3pyJiZ6ci5pbmNsdWRlcygibXNv''@;'; put 'put ''LWlnbm9yZTpjb2xzcGFuIil8fHB0LnB1c2goe2NvbDpfaSxyb3c6SnQscm93c3BhbjpHbixjb2xzcGFuOmFpfSl9bGV0IE9uPSIiO09uPXYmJi9leGNlbC9naS50ZXN0KHYuY29udGVudCk/bXIucmVwbGFjZSgvW1xyXG5dW1x4MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8p''@;'; put 'put ''PltcclxuXT9bXHgyMF17MCwzfS9naW0sIlxyXG4iKTptci5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLHJ0W0p0XVtfaV09T24ucmVwbGFjZShYWGUsenI9PnZmZVt6cl0pfWVsc2UgZHQucHVzaChtcil9fXJldHVybiBwdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9''@;'; put 'put ''cHQpLGR0Lmxlbmd0aCYmKGEucm93SGVhZGVycz1kdCkscnQubGVuZ3RoJiYoYS5kYXRhPXJ0KSxhfWZ1bmN0aW9uIG0xKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIi''@;'; put 'put ''PT09YSlyZXR1cm4haXNOYU4oYykmJmlzRmluaXRlKGMpO2lmKCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQvLnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9''@;'; put 'put ''YCkuam9pbigifCIpO3JldHVybiBuZXcgUmVnRXhwKGBeWystXT8oKCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1''@;'; put 'put ''ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiB5ZmUoYyl7cmV0dXJuIG0xKGMsWyIsIl0pfWZ1bmN0aW9uIEdhKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIFgkKGMs''@;'; put 'put ''bCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsJiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gSiQoYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChj''@;'; put 'put ''KmwvMTAwLDEwKX1mdW5jdGlvbiBrcyhjLGwsYSl7cmV0dXJuIE1hdGgubWluKGMsbCk9PT1jP2w6TWF0aC5tYXgoYyxhKT09PWM/YTpjfWNvbnN0IF9mZT1uZXcgTWFwKFtbImFzYyIsWy0xLDFdXSxbImRlc2MiLFsxLC0xXV1dKSxlSmU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgYWxy''@;'; put 'put ''ZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gLHRKZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBub3QgYSBudW1iZXIuYCxySmU9Yz0+YFRoZSBpZCAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gO2Z1bmN0aW9uIEpPKCl7bGV0e2Vycm9ySWRFeGlzdHM6Y309YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IE1hcDtmdW5jdGlvbiBNKCl7cmV0dXJuWy4uLmxdfWZ1bmN0aW9uIEQoWil7cmV0dXJuIGwuaGFzKFopfXJldHVybiBjPW1sKGMpP2M6ckplLHthZGRJdGVtOmZ1bmN0aW9uIGEo''@;'; put 'put ''WixyZSl7aWYoRChaKSl0aHJvdyBuZXcgRXJyb3IoYyhaKSk7bC5zZXQoWixyZSl9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGYoWil7Y29uc3RbcmVdPU0oKS5maW5kKGNlPT57bGV0W2JlLEVlXT1jZTtyZXR1cm4gWj09PUVlJiZiZX0pfHxbbnVsbF07''@;'; put 'put ''cmV0dXJuIHJlfSxnZXRJdGVtOmZ1bmN0aW9uIHYoWil7cmV0dXJuIGwuZ2V0KFopfSxnZXRJdGVtczpNLGhhc0l0ZW06RCxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQoWil7cmV0dXJuIGwuZGVsZXRlKFopfX19Y29uc3QgaUplPWM9PmAnJHtjfScgdmFsdWUgaXMgYWxyZWFkeSBkZWNsYXJlZCBp''@;'; put 'put ''biBhIHVuaXF1ZSBzZXQuYCxlSz1jPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkICIke2N9IiBwbHVnaW4uYCx3ZmU9ZnVuY3Rpb24gbkplKCl7bGV0e2Vycm9yUHJpb3JpdHlFeGlzdHM6YyxlcnJvclByaW9yaXR5TmFOOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGM9bWwoYyk/YzplSmUsbD1tbChsKT9sOnRKZSx7YWRkSXRlbTpmdW5jdGlvbiBkKGYsdil7aWYoIW0xKGYpKXRocm93IG5ldyBFcnJvcihsKGYpKTtpZihhLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhm''@;'; put 'put ''KSk7YS5zZXQoZix2KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiYXNjIjtjb25zdFt2LE1dPV9mZS5nZXQoZil8fF9mZS5nZXQoImFzYyIpO3JldHVyblsuLi5hXS5zb3J0KChELFop''@;'; put 'put ''PT5EWzBdPFpbMF0/djpNKS5tYXAoRD0+RFsxXSl9fX0oe2Vycm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4gb24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBu''@;'; put 'put ''dW1iZXIuYH0pLENmZT1mdW5jdGlvbiBhSmUoKXtsZXR7ZXJyb3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9bWwoYyk/YzppSmUse2FkZEl0ZW06ZnVuY3Rpb24g''@;'; put 'put ''YShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czplS30pLHRLPUpPKHtlcnJvcklkRXhpc3RzOmVLfSk7''@;'; put 'put ''ZnVuY3Rpb24gbksoKXtyZXR1cm5bLi4ud2ZlLmdldEl0ZW1zKCksLi4uQ2ZlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIElFKGMpe2NvbnN0IGw9cDEoYyk7cmV0dXJuIHRLLmdldEl0ZW0obCl9ZnVuY3Rpb24gUHMoYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24gbEplKGMsbCxhKXtyZXR1cm4iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09SUUoYykmJmZ1bmN0aW9uIHNKZShjLGwsYSl7Y29uc3QgZD1wMShjKTtpZih0Sy5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihlSyhkKSk7''@;'; put 'put ''dm9pZCAwPT09YT9DZmUuYWRkSXRlbShkKTp3ZmUuYWRkSXRlbShhLGQpLHRLLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOmNKZSxnZXRJdGVtOnVKZSxoYXNJdGVtOlNmZSxnZXROYW1lczpkSmV9PXIzKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBRTyhjKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYylyZXR1cm4gYztpZighU2ZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIHVKZShjKX1mdW5jdGlvbiBJaChjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJf''@;'; put 'put ''VFlQRSksY0plKGMsbCl9Y29uc3R7cmVnaXN0ZXI6aEplLGdldEl0ZW06ZkplLGhhc0l0ZW06TWZlLGdldE5hbWVzOnBKZX09cjMoInZhbGlkYXRvcnMiKTtmdW5jdGlvbiBySyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighTWZlKGMpKXRocm93IEVycm9yKGBObyBy''@;'; put 'put ''ZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBmSmUoYyl9ZnVuY3Rpb24gWTcoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSxoSmUoYyxsKX1mdW5jdGlvbiBrcChjLGwsYSl7KGZ1bmN0aW9uIGdKZShj''@;'; put 'put ''LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUWEoYyxsKXtyZXR1cm4gYy5nZXQoeGZlKGMsbCkpfWZ1bmN0''@;'; put 'put ''aW9uIFZtKGMsbCxhKXtyZXR1cm4gYy5zZXQoeGZlKGMsbCksYSksYX1mdW5jdGlvbiB4ZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB6Mj1uZXcgV2Vha01hcCxpSz1uZXcgV2Vha01hcCx4MD1uZXcgV2Vha01hcCxmXz1uZXcgV2Vha01hcCxlUD1uZXcgV2Vha01hcCxpMz1uZXcgV2Vha01hcCxhSz1uZXcgV2Vha01hcCxSRT1uZXcgV2Vha01hcCxHNz1uZXcg''@;'; put 'put ''V2Vha01hcCxEcD1uZXcgV2Vha01hcDtjb25zdCBFZmU9Y2xhc3MgbUple2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtsZXQgTT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDtrcCh0aGlzLHoyLHZvaWQgMCksa3AodGhpcyxpSyx2''@;'; put 'put ''b2lkIDApLGtwKHRoaXMseDAsdm9pZCAwKSxrcCh0aGlzLGZfLHZvaWQgMCksa3AodGhpcyxlUCx2b2lkIDApLGtwKHRoaXMsaTMsdm9pZCAwKSxrcCh0aGlzLGFLLHZvaWQgMCksa3AodGhpcyxSRSx2b2lkIDApLGtwKHRoaXMsRzcsW251bGwsbnVsbF0pLGtwKHRoaXMsRHAsW251bGwsbnVs''@;'; put 'put ''bF0pLFZtKHoyLHRoaXMsZCksVm0oaUssdGhpcyxhKSxWbSh4MCx0aGlzLGYpLFZtKGZfLHRoaXMsdiksVm0oZVAsdGhpcyxNKSxWbShpMyx0aGlzLGgpLFZtKGFLLHRoaXMsbCksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZlbnRzKCl7UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0''@;'; put 'put ''ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsImNvbnRleHRtZW51IixkPT50aGlzLm9uQ29udGV4dE1lbnUoZCkpLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksUWEoaTMsdGhpcykuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5UQUJMRSwibW91c2VvdXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJ0b3VjaHN0YXJ0IixkPT50aGlzLm9uVG91Y2hTdGFydChkKSksUWEo''@;'; put 'put ''aTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsInRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hFbmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9KSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgw''@;'; put 'put ''LHRoaXMpLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmd8fFFhKHoyLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1vbWVudHVt''@;'; put 'put ''U2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsUWEoejIsdGhpcykuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Ny''@;'; put 'put ''b2xsIikpfSwyMDApfSl9O0FwKCk/bCgpOihSJCgpJiZsKCksKCgpPT57UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhv''@;'; put 'put ''bGRlciwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKX0pKCkpfXNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQobCl7Y29uc3QgZD10aGlzLnBhcmVudENlbGwobCkuY29vcmRzO2lmKFFhKFJFLHRoaXMpJiZkKXtjb25zdFtoLGZdPVtkLnJvdyxRYShSRSx0aGlzKS5mcm9tLnJvd10s''@;'; put 'put ''W3YsTV09W2QuY29sLFFhKFJFLHRoaXMpLmZyb20uY29sXTtyZXR1cm4gaD09PWYmJnY9PT1NfXJldHVybiExfXBhcmVudENlbGwobCl7Y29uc3QgYT17fSxoPWJFKGwsWyJURCIsIlRIIl0sUWEoeDAsdGhpcykuVEFCTEUpO3JldHVybiBoPyhhLmNvb3Jkcz1RYSh4MCx0aGlzKS5nZXRDb29y''@;'; put 'put ''ZHMoaCksYS5URD1oKTpwbyhsLCJ3dEJvcmRlciIpJiZwbyhsLCJjdXJyZW50Iik/KGEuY29vcmRzPVFhKGZfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPVFhKHgwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKTpwbyhsLCJ3dEJvcmRlciIpJiZw''@;'; put 'put ''byhsLCJhcmVhIikmJlFhKGZfLHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UmJihhLmNvb3Jkcz1RYShmXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlLnRvLGEuVEQ9UWEoeDAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29u''@;'; put 'put ''c3QgYT1RYShpSyx0aGlzKS5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCxkPUkkKFIyZSxsLnRhcmdldCksaD1sLnRhcmdldDtpZighWyJURCIsIlRIIl0uaW5jbHVkZXMoYS5ub2RlTmFtZSkmJihoPT09YXx8ZCgwKT09PWF8fGQoMSk9PT1hKSlyZXR1cm47Y29uc3QgZj10aGlzLnBhcmVu''@;'; put 'put ''dENlbGwoaCk7cG8oaCwiY29ybmVyIik/UWEoejIsdGhpcykuZ2V0U2V0dGluZygib25DZWxsQ29ybmVyTW91c2VEb3duIixsLGgpOmYuVEQmJlFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZURvd24iLGwsZi5jb29yZHMs''@;'; put 'put ''Zi5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiZmLlREJiYoUWEoRHAsdGhpcylbMF09Zi5URCxjbGVhclRpbWVvdXQoUWEoRzcsdGhpcylbMF0pLFFhKEc3LHRoaXMpWzBdPXNldFRpbWVvdXQoKCk9PntRYShEcCx0aGlzKVswXT1udWxsfSwxZTMpKX1vbkNvbnRleHRN''@;'; put 'put ''ZW51KGwpe2lmKFFhKHoyLHRoaXMpLmhhcygib25DZWxsQ29udGV4dE1lbnUiKSl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb250ZXh0TWVudSIsbCxhLmNvb3JkcyxhLlREKX19b25Nb3VzZU92ZXIobCl7aWYoIVFh''@;'; put 'put ''KHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJuO2NvbnN0IGE9UWEoeDAsdGhpcykuVEFCTEUsZD1iRShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPVFhKGVQLHRoaXMpfHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJkxtKGQsYSkmJihoLmxhc3RNb3VzZU92ZXI9''@;'; put 'put ''ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLFFhKHgwLHRoaXMpLmdldENvb3JkcyhkKSxkKSl9b25Nb3VzZU91dChsKXtpZighUWEoejIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU91dCIpKXJldHVybjtjb25zdCBhPVFhKHgwLHRoaXMpLlRBQkxFLGQ9YkUobC50YXJn''@;'; put 'put ''ZXQsWyJURCIsIlRIIl0sYSksaD1iRShsLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sYSksZj1RYShlUCx0aGlzKXx8dGhpcztkJiZkIT09aCYmTG0oZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCxRYSh4MCx0aGlzKS5nZXRDb29yZHMoZCksZCksbnVsbD09''@;'; put 'put ''PWgmJihmLmxhc3RNb3VzZU92ZXI9bnVsbCkpfW9uTW91c2VVcChsKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmUWEoejIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZVVwIixsLGEuY29vcmRzLGEuVEQp''@;'; put 'put ''LCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKGEuVEQ9PT1RYShEcCx0aGlzKVswXSYmYS5URD09PVFhKERwLHRoaXMpWzFdPyhwbyhsLnRhcmdldCwiY29ybmVyIik/dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGEuY29vcmRzLGEuVEQpOnRo''@;'; put 'put ''aXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxhLmNvb3JkcyxhLlREKSxRYShEcCx0aGlzKVswXT1udWxsLFFhKERwLHRoaXMpWzFdPW51bGwpOmEuVEQ9PT1RYShEcCx0aGlzKVswXSYmKFFhKERwLHRoaXMpWzFdPWEuVEQsY2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzFdKSxR''@;'; put 'put ''YShHNyx0aGlzKVsxXT1zZXRUaW1lb3V0KCgpPT57UWEoRHAsdGhpcylbMV09bnVsbH0sNTAwKSkpfW9uVG91Y2hTdGFydChsKXtWbShSRSx0aGlzLFFhKGZfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlKSx0aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3du''@;'; put 'put ''KGwpfW9uVG91Y2hFbmQobCl7dmFyIGE7Y29uc3QgZD1sLnRhcmdldCxoPW51bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3JkcyxmPVBhKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7aWYobC5jYW5jZWxhYmxlJiZmJiZRYSh6Mix0aGlzKS5nZXRT''@;'; put 'put ''ZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgTT1bIkEiLCJCVVRUT04iLCJJTlBVVCJdO08kKCkmJihRMmUoKXx8ZWZlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFNLmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRoaXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPVFhKHoyLHRoaXMpLmdldFNldHRpbmdQdXJlKGwpO2YmJmYoYSxkLGgsUWEoYUssdGhpcyku''@;'; put 'put ''Y2FsbCh0aGlzKSl9ZGVzdHJveSgpe2NsZWFyVGltZW91dChRYShHNyx0aGlzKVswXSksY2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzFdKSxRYShpMyx0aGlzKS5kZXN0cm95KCl9fTtmdW5jdGlvbiBvSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdkplKGMpe3ZhciBsPWZ1bmN0aW9uIGJK''@;'; put 'put ''ZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgX0plPWNsYXNzIHlKZXtjb25zdHJ1Y3RvcihsLGEsZCl7b0sodGhpcywib2Zmc2V0Iix2b2lkIDApLG9LKHRoaXMsInRvdGFsIix2b2lkIDApLG9LKHRoaXMsImNvdW50''@;'; put 'put ''VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVk''@;'; put 'put ''KGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihs''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBzSyhjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gd0plKGMpe3ZhciBsPWZ1bmN0aW9uIENKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgTUplPWNsYXNzIFNKZXtjb25zdHJ1Y3RvcihsLGEsZCl7c0sodGhpcywib2Zmc2V0Iix2b2lk''@;'; put 'put ''IDApLHNLKHRoaXMsInRvdGFsIix2b2lkIDApLHNLKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0''@;'; put 'put ''fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3Vu''@;'; put 'put ''dFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5k''@;'; put 'put ''ZXJlZChsKSl9fTtmdW5jdGlvbiB0UChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geEplKGMpe3ZhciBsPWZ1bmN0aW9uIEVKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu''@;'; put 'put ''Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVEple2NvbnN0cnVjdG9yKCl7dFAodGhp''@;'; put 'put ''cywiY3VycmVudFNpemUiLDApLHRQKHRoaXMsIm5leHRTaXplIiwwKSx0UCh0aGlzLCJjdXJyZW50T2Zmc2V0IiwwKSx0UCh0aGlzLCJuZXh0T2Zmc2V0IiwwKX1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3Ro''@;'; put 'put ''aXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWZ1bmN0aW9uIGNLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrSmUoYyl7dmFyIGw9ZnVuY3Rpb24gREplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31jbGFzcyBJSmV7Y29uc3RydWN0b3IoKXtjSyh0aGlzLCJzaXplIixuZXcgVEplKSxjSyh0aGlzLCJ3b3JraW5nU3BhY2UiLDApLGNLKHRoaXMsInNoYXJlZFNpemUiLG51bGwpfXNldFNpemUobCl7dGhpcy5zaXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6''@;'; put 'put ''ZS5zZXRPZmZzZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4gdGhpcy5zaXplfWlzU2hhcmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLnNoYXJlZFNpemV9aXNQbGFjZU9uKGwpe3JldHVybiB0aGlzLndvcmtpbmdTcGFjZT09PWx9YXBwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTEsbC53b3Jr''@;'; put 'put ''aW5nU3BhY2U9Mix0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfXByZXBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MixsLndvcmtpbmdTcGFjZT0xLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9fXkoMjk3NjApO2NsYXNzIEFmZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5j''@;'; put 'put ''dGlvbiBSSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIExKZShjKXt2YXIgbD1mdW5jdGlvbiBPSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVm''@;'; put 'put ''YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywib3JkZXIiLFtdKSx0aGlzLm9yZGVyPVsuLi5BcnJheShhKS5r''@;'; put 'put ''ZXlzKCldLm1hcChkPT5sK2QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlci5sZW5ndGh9aGFzKGwpe3JldHVybiB0aGlzLm9yZGVyLmluZGV4T2YobCk+LTF9Z2V0KGwpe3JldHVybiBsPHRoaXMub3JkZXIubGVuZ3RoP3RoaXMub3JkZXJbbF06LTF9cmVtb3ZlKGwpe3RoaXMub3Jk''@;'; put 'put ''ZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihsKSwxKX1wcmVwZW5kKGwpe3JldHVybiB0aGlzLm9yZGVyLnVuc2hpZnQobCksdGhpcy5vcmRlci5wb3AoKX19Y2xhc3MgTkple2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBQSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZKZShjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBISmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywic2l6ZVNldCIsdm9pZCAwKSx0aGlzLnNpemVTZXQ9bH1kaWZmKCl7Y29uc3R7c2l6ZVNldDpsfT10aGlzLHtjdXJyZW50U2l6ZTphLG5l''@;'; put 'put ''eHRTaXplOmR9PWwuZ2V0Vmlld1NpemUoKTtsZXQgaD1NYXRoLm1heChkLGEpO2lmKDA9PT1oKXJldHVybltdO2NvbnN0e2N1cnJlbnRPZmZzZXQ6ZixuZXh0T2Zmc2V0OnZ9PWwuZ2V0Vmlld1NpemUoKSxNPW5ldyBBZmUoZixhKSxEPW5ldyBBZmUodixkKSxaPVtdO2ZvcihsZXQgcmU9MDty''@;'; put 'put ''ZTxoO3JlKyspe2NvbnN0IGNlPU0uZ2V0KHJlKSxiZT1ELmdldChyZSk7aWYoLTE9PT1iZSlaLnB1c2goWyJyZW1vdmUiLGNlXSk7ZWxzZSBpZigtMT09PWNlKSFsLmlzU2hhcmVkKCl8fGwuaXNTaGFyZWQoKSYmbC5pc1BsYWNlT24oMik/Wi5wdXNoKFsiYXBwZW5kIixiZV0pOloucHVzaChb''@;'; put 'put ''InByZXBlbmQiLGJlXSk7ZWxzZSBpZihiZT5jZSlNLmhhcyhiZSkmJihNLnJlbW92ZShiZSksZDw9TS5sZW5ndGgmJihoLT0xKSksWi5wdXNoKFsicmVwbGFjZSIsYmUsY2VdKTtlbHNlIGlmKGJlPGNlKXtjb25zdCBFZT1NLnByZXBlbmQoYmUpO1oucHVzaChbImluc2VydF9iZWZvcmUiLGJl''@;'; put 'put ''LGNlLEVlXSl9ZWxzZSBaLnB1c2goWyJub25lIixiZV0pfXJldHVybiBafX1mdW5jdGlvbiBwXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVkplKGMpe3ZhciBsPWZ1bmN0aW9uIEJKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9Y2xhc3Mga2Zle2NvbnN0cnVjdG9yKGwsYSl7cF8odGhpcywicm9vdE5vZGUiLHZvaWQgMCkscF8odGhpcywibm9kZXNQb29sIix2b2lkIDApLHBfKHRoaXMsInNpemVTZXQiLG5ldyBJSmUpLHBfKHRoaXMsImNvbGxlY3RlZE5vZGVzIixbXSkscF8odGhpcywidmlld0RpZmZlciIsbmV3''@;'; put 'put ''IE5KZSh0aGlzLnNpemVTZXQpKSxwXyh0aGlzLCJsZWFkcyIsW10pLHRoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGwpLHRoaXN9c2V0T2Zmc2V0KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwp''@;'; put 'put ''LHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5pc1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsXTpudWxsfWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxl''@;'; put 'put ''Y3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29sbGVjdGVkTm9kZXNbbC0xXTpudWxsfWFwcGx5Q29tbWFuZChsKXtjb25zdHtyb290Tm9kZTphfT10aGlzLFtkLGgsZix2XT1sLE09dGhpcy5ub2Rlc1Bvb2woaCk7c3dpdGNoKHRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChNKSxk''@;'; put 'put ''KXtjYXNlInByZXBlbmQiOmEuaW5zZXJ0QmVmb3JlKE0sYS5maXJzdENoaWxkKTticmVhaztjYXNlImFwcGVuZCI6YS5hcHBlbmRDaGlsZChNKTticmVhaztjYXNlImluc2VydF9iZWZvcmUiOmEuaW5zZXJ0QmVmb3JlKE0sdGhpcy5ub2Rlc1Bvb2woZikpLGEucmVtb3ZlQ2hpbGQodGhpcy5u''@;'; put 'put ''b2Rlc1Bvb2wodikpO2JyZWFrO2Nhc2UicmVwbGFjZSI6YS5yZXBsYWNlQ2hpbGQoTSx0aGlzLm5vZGVzUG9vbChmKSk7YnJlYWs7Y2FzZSJyZW1vdmUiOmEucmVtb3ZlQ2hpbGQoTSl9fXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg9MCx0aGlzLmxlYWRzPXRoaXMudmlld0Rp''@;'; put 'put ''ZmZlci5kaWZmKCl9cmVuZGVyKCl7dGhpcy5sZWFkcy5sZW5ndGg+MCYmdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX1lbmQoKXtmb3IoO3RoaXMubGVhZHMubGVuZ3RoPjA7KXRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hpZnQoKSl9fWNsYXNzIERmZSBleHRl''@;'; put 'put ''bmRzIGtmZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnByZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBl''@;'; put 'put ''bmQodGhpcy5zaXplU2V0KSx0aGlzfX1mdW5jdGlvbiBJZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGpKZShjKXt2YXIgbD1mdW5jdGlvbiB6SmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFVKZXtjb25zdHJ1''@;'; put 'put ''Y3RvcihsKXtJZmUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksSWZlKHRoaXMsInBvb2wiLG5ldyBNYXApLHRoaXMubm9kZVR5cGU9bC50b1VwcGVyQ2FzZSgpfXNldFJvb3REb2N1bWVudChsKXt0aGlzLnJvb3REb2N1bWVudD1sfW9idGFpbihsLGEpe2NvbnN0IGg9Im51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBhP2Ake2x9eCR7YX1gOmwudG9TdHJpbmcoKTtpZih0aGlzLnBvb2wuaGFzKGgpKXJldHVybiB0aGlzLnBvb2wuZ2V0KGgpO2NvbnN0IGY9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKTtyZXR1cm4gdGhpcy5wb29sLnNldChoLGYpLGZ9fWZ1bmN0aW9u''@;'; put 'put ''IExFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaSmUoYyl7dmFyIGw9ZnVuY3Rpb24gV0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBPRXtjb25zdHJ1Y3RvcihsLGEpe0xFKHRoaXMsIm5vZGVzUG9vbCIsbnVs''@;'; put 'put ''bCksTEUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksTEUodGhpcywicm9vdE5vZGUiLHZvaWQgMCksTEUodGhpcywidGFibGUiLG51bGwpLExFKHRoaXMsInJlbmRlcmVkTm9kZXMiLDApLHRoaXMubm9kZXNQb29sPSJzdHJpbmciPT10eXBlb2YgbD9uZXcgVUplKGwpOm51bGwsdGhpcy5ub2Rl''@;'; put 'put ''VHlwZT1sLHRoaXMucm9vdE5vZGU9YX1zZXRUYWJsZShsKXt0aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigpe319ZnVuY3Rpb24gUmZlKGMsbCxhKXtyZXR1cm4obD1mdW5j''@;'; put 'put ''dGlvbiBZSmUoYyl7dmFyIGw9ZnVuY3Rpb24gR0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp''@;'; put 'put ''biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyAkSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUSCIpLFJmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcg''@;'; put 'put ''V2Vha01hcCksUmZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBEZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3Vy''@;'; put 'put ''Y2VSb3dJbmRleCxkKSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlzLnRhYmxlO2ZvcihsZXQgdj0wO3Y8bDt2Kyspe2NvbnN0''@;'; put 'put ''IE09dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHYpLEQ9aC5nZXRSZW5kZXJlZE5vZGUodik7dGhpcy5zb3VyY2VSb3dJbmRleD1NO2NvbnN0IFo9dGhpcy5vYnRhaW5PcmRlclZpZXcoRCkscmU9Zi5vYnRhaW5PcmRlclZpZXcoRCk7Wi5hcHBlbmRWaWV3KHJlKS5zZXRTaXplKGQp''@;'; put 'put ''LnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgY2U9ZC0xO2NlPj0wO2NlLS0pe1oucmVuZGVyKCk7Y29uc3QgYmU9Wi5nZXRDdXJyZW50Tm9kZSgpO2JlLmNsYXNzTmFtZT0iIixiZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksajcoYmUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5l''@;'; put 'put ''dyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byhiZSxbWyJyb2xlIiwicm93aGVhZGVyIl0sWyJzY29wZSIsInJvdyJdLHYkKGNlKzEpLE43KC0xKV0pLGFbY2VdKE0sYmUsY2UpfVouZW5kKCl9fX1jbGFzcyBLSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtm''@;'; put 'put ''b3IobGV0IE09MCxEPWw7TTxEO00rKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW01dLGR8fChkPXRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGRO''@;'; put 'put ''b2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hp''@;'; put 'put ''bGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCB2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYodj5sKWZvcihsZXQgTT1sO008djtNKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZ4cChkKX1yZW5kZXIo''@;'; put 'put ''KXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdHtjb2x1bW5IZWFkZXJGdW5jdGlvbnM6ZCxjb2x1''@;'; put 'put ''bW5zVG9SZW5kZXI6aCxyb3dIZWFkZXJzQ291bnQ6Zn09dGhpcy50YWJsZSx2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1thXTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odixbWyJyb2xlIiwicm93Il0sQTJlKGErMSldKTtmb3IobGV0IE09LTEqZjtNPGg7TSs9MSl7Y29uc3Qg''@;'; put 'put ''RD10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoTSksWj12LmNoaWxkTm9kZXNbTStmXTtaLmNsYXNzTmFtZT0iIixaLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxqNyhaLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlz''@;'; put 'put ''QXJpYUVuYWJsZWQoKSYmdm8oWixbdiQoTSsxK3RoaXMudGFibGUucm93SGVhZGVyc0NvdW50KSxONygtMSksWyJyb2xlIiwiY29sdW1uaGVhZGVyIl0sLi4uTT49MD9bWyJzY29wZSIsImNvbCJdXTpbWyJyb2xlIiwicm93Il1dXSksZFthXShELFosYSl9fX19bGV0IExmZT0hMTtjbGFzcyBx''@;'; put 'put ''SmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQo''@;'; put 'put ''dGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMt''@;'; put 'put ''PTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTshTGZlJiZsPjFlMyYmKExmZT0hMCxpbChnbGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNp''@;'; put 'put ''YmxlIGNvbHVtbnMuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0aCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxDb2x1bW5zIiBvcHRpb24u''@;'; put 'put ''YCkpO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7dn1weGB9Zm9y''@;'; put 'put ''KGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFdpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWNvbnN0IGQ9dGhpcy5y''@;'; put 'put ''b290Tm9kZS5maXJzdENoaWxkO2QmJlRpKGQsInJvd0hlYWRlciIpfX1sZXQgT2ZlPSExO2NsYXNzIGVRZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksZnVuY3Rpb24gWEplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKSmUoYyl7dmFyIGw9ZnVuY3Rpb24gUUpl''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJWaWV3Iix2b2lkIDApLHRoaXMub3JkZXJWaWV3PW5ldyBrZmUobCxhPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oYSkpfWdldFJlbmRlcmVkTm9kZShsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5vcmRlclZpZXcuZ2V0Tm9kZShsKX1oYXNTdGFsZUNvbnRlbnQobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3Lmhhc1N0YWxlQ29udGVudChsKX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bH09dGhpcy50YWJsZTshT2ZlJiZsPjFlMyYmKE9mZT0hMCxpbChnbGBQZXJmb3Jt''@;'; put 'put ''YW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXHgyMAogICAg''@;'; put 'put ''ICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsUm93cyIgb3B0aW9uLmApKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pLHRoaXMub3JkZXJWaWV3LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVu''@;'; put 'put ''ZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGg9MDtoPGw7aCsrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCksdj10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoaCk7dmFyIGEsZDt0aGlzLnRh''@;'; put 'put ''YmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oZixbWyJyb2xlIiwicm93Il0sQTJlKHYrKG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PWR8fG51bGw9PT0oZD1kLmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbHVtbkhlYWRl''@;'; put 'put ''cnMubGVuZ3RoKSYmdm9pZCAwIT09YT9hOjApKzEpXSksKHYrMSklMj09MD9wbyhmLCJodF9fcm93X2V2ZW4iKXx8KGxvKGYsImh0X19yb3dfb2RkIiksVGkoZiwiaHRfX3Jvd19ldmVuIikpOnBvKGYsImh0X19yb3dfb2RkIil8fChsbyhmLCJodF9fcm93X2V2ZW4iKSxUaShmLCJodF9fcm93''@;'; put 'put ''X29kZCIpKX10aGlzLm9yZGVyVmlldy5lbmQoKX19ZnVuY3Rpb24gUGZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0UWUoYyl7dmFyIGw9ZnVuY3Rpb24gblFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo''@;'; put 'put ''dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu''@;'; put 'put ''ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyByUWUg''@;'; put 'put ''ZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLFBmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksUGZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9y''@;'; put 'put ''ZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBEZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVy''@;'; put 'put ''OmEscm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IE09MDtNPGw7TSsrKXtjb25zdCBEPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShNKSxaPWQuZ2V0UmVuZGVyZWROb2RlKE0pO3RoaXMuc291cmNlUm93SW5kZXg9RDtjb25zdCByZT10aGlzLm9idGFpbk9y''@;'; put 'put ''ZGVyVmlldyhaKSxjZT1oLm9idGFpbk9yZGVyVmlldyhaKTtyZS5wcmVwZW5kVmlldyhjZSkuc2V0U2l6ZShhKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IGJlPTA7YmU8YTtiZSsrKXtyZS5yZW5kZXIoKTtjb25zdCBFZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2Uo''@;'; put 'put ''YmUpLEJlPXJlLmdldEN1cnJlbnROb2RlKCk7dmFyIGYsdjtwbyhCZSwiaGlkZSIpfHwoQmUuY2xhc3NOYW1lPSIiKSxCZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQmUucmVtb3ZlQXR0cmlidXRlKCJkaXIiKSxqNyhCZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgi''@;'; put 'put ''cm9sZSIpXSksdGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoRCxFZSxCZSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKEJlLFsuLi5CZS5oYXNBdHRyaWJ1dGUoInJvbGUiKT9bXTpbWyJyb2xlIiwiZ3JpZGNlbGwiXV0sTjcoLTEpLHYkKEVlKyhudWxsIT09KGY9bnVsbD09PSh2PXRo''@;'; put 'put ''aXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT12fHxudWxsPT09KHY9di5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09dj92b2lkIDA6di5yb3dIZWFkZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWY/ZjowKSsxKV0pfXJlLmVuZCgpfX19ZnVuY3Rpb24gSnUoYyxsLGEpe3JldHVybihsPWZ1''@;'; put 'put ''bmN0aW9uIGlRZShjKXt2YXIgbD1mdW5jdGlvbiBhUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp''@;'; put 'put ''KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIG9RZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJlbmRlcmVyOmEsc3R5bGVzSGFuZGxlcjpkfT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307SnUodGhpcywicm9vdE5vZGUiLHZvaWQgMCksSnUodGhpcywicm9vdERvY3VtZW50Iix2b2lkIDApLEp1KHRoaXMsInJvd0hlYWRlcnMiLG51bGwpLEp1KHRoaXMsImNvbHVtbkhlYWRlcnMiLG51bGwpLEp1''@;'; put 'put ''KHRoaXMsImNvbEdyb3VwIixudWxsKSxKdSh0aGlzLCJyb3dzIixudWxsKSxKdSh0aGlzLCJjZWxscyIsbnVsbCksSnUodGhpcywicm93RmlsdGVyIixudWxsKSxKdSh0aGlzLCJjb2x1bW5GaWx0ZXIiLG51bGwpLEp1KHRoaXMsInJvd1V0aWxzIixudWxsKSxKdSh0aGlzLCJjb2x1bW5VdGls''@;'; put 'put ''cyIsbnVsbCksSnUodGhpcywicm93c1RvUmVuZGVyIiwwKSxKdSh0aGlzLCJjb2x1bW5zVG9SZW5kZXIiLDApLEp1KHRoaXMsInJvd0hlYWRlckZ1bmN0aW9ucyIsW10pLEp1KHRoaXMsInJvd0hlYWRlcnNDb3VudCIsMCksSnUodGhpcywiY29sdW1uSGVhZGVyRnVuY3Rpb25zIixbXSksSnUo''@;'; put 'put ''dGhpcywiY29sdW1uSGVhZGVyc0NvdW50IiwwKSxKdSh0aGlzLCJjZWxsUmVuZGVyZXIiLHZvaWQgMCksSnUodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLHZvaWQgMCksSnUodGhpcywic3R5bGVzSGFuZGxlciIsdm9pZCAwKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5yb290RG9jdW1lbnQ9dGhp''@;'; put 'put ''cy5yb290Tm9kZS5vd25lckRvY3VtZW50LHRoaXMuY2VsbFJlbmRlcmVyPWEsdGhpcy5zdHlsZXNIYW5kbGVyPWR9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7dGhpcy5hY3RpdmVPdmVybGF5TmFtZT1sfXNldEF4aXNVdGlscyhsLGEpe3RoaXMucm93VXRpbHM9bCx0aGlzLmNvbHVtblV0aWxz''@;'; put 'put ''PWF9c2V0Vmlld3BvcnRTaXplKGwsYSl7dGhpcy5yb3dzVG9SZW5kZXI9bCx0aGlzLmNvbHVtbnNUb1JlbmRlcj1hfXNldEZpbHRlcnMobCxhKXt0aGlzLnJvd0ZpbHRlcj1sLHRoaXMuY29sdW1uRmlsdGVyPWF9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3RoaXMucm93SGVhZGVy''@;'; put 'put ''RnVuY3Rpb25zPWwsdGhpcy5yb3dIZWFkZXJzQ291bnQ9bC5sZW5ndGgsdGhpcy5jb2x1bW5IZWFkZXJGdW5jdGlvbnM9YSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD1hLmxlbmd0aH1zZXRSZW5kZXJlcnMoKXtsZXR7cm93SGVhZGVyczpsLGNvbHVtbkhlYWRlcnM6YSxjb2xHcm91cDpkLHJv''@;'; put 'put ''d3M6aCxjZWxsczpmfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307bC5zZXRUYWJsZSh0aGlzKSxhLnNldFRhYmxlKHRoaXMpLGQuc2V0VGFibGUodGhpcyksaC5zZXRUYWJsZSh0aGlzKSxmLnNldFRhYmxlKHRoaXMpLHRoaXMucm93''@;'; put 'put ''SGVhZGVycz1sLHRoaXMuY29sdW1uSGVhZGVycz1hLHRoaXMuY29sR3JvdXA9ZCx0aGlzLnJvd3M9aCx0aGlzLmNlbGxzPWZ9cmVuZGVyZWRSb3dUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXJlZENvbHVtblRvU291cmNlKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfWlzQXJpYUVuYWJsZWQoKXtyZXR1cm4gdGhpcy5yb3dVdGlscy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIil9cmVuZGVyKCl7dGhpcy5jb2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMu''@;'; put 'put ''YWRqdXN0KCksdGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRoaXMucm93SGVhZGVycy5yZW5kZXIoKSx0aGlzLmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2Fs''@;'; put 'put ''Y3VsYXRlV2lkdGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1hLmdldFJlbmRlcmVkTm9kZShkKSxmPXRoaXMucm93VXRpbHM7aWYoaC5maXJzdENoaWxkKXtjb25zdCB2PXRo''@;'; put 'put ''aXMucmVuZGVyZWRSb3dUb1NvdXJjZShkKSxNPWYuZ2V0SGVpZ2h0QnlPdmVybGF5TmFtZSh2LHRoaXMuYWN0aXZlT3ZlcmxheU5hbWUpLFo9dGhpcy5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVyQm94KCk/MDoxO2guZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9TT9NLVorInB4IjoiIn19''@;'; put 'put ''fX1jbGFzcyBzUWV7Y29uc3RydWN0b3IoKXtsZXR7VEFCTEU6bCxUSEVBRDphLENPTEdST1VQOmQsVEJPRFk6aCxyb3dVdGlsczpmLGNvbHVtblV0aWxzOnYsY2VsbFJlbmRlcmVyOk0sc3R5bGVzSGFuZGxlcjpEfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h''@;'; put 'put ''cmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgb1FlKGwse2NlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6RH0pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyAkSmUsY29sdW1uSGVhZGVyczpuZXcgS0plKGEpLGNvbEdyb3VwOm5ldyBxSmUoZCks''@;'; put 'put ''cm93czpuZXcgZVFlKGgpLGNlbGxzOm5ldyByUWV9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLHYpfXNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpLHRoaXN9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlz''@;'; put 'put ''LnJlbmRlcmVyLnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRl''@;'; put 'put ''bnRSZW5kZXJlcnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19ZnVuY3Rpb24gdUsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxRZShjKXt2YXIgbD1mdW5jdGlvbiBjUWUoYyxsKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHVRZXtjb25zdHJ1Y3RvcihsLGEpe3VLKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksdUsodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx1Syh0aGlzLCJoZWFkZXJXaWR0aHMiLG5ldyBN''@;'; put 'put ''YXApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uV2lkdGgiLGwpfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIil9Z2V0SGVh''@;'; put 'put ''ZGVySGVpZ2h0KGwpe2xldCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihh''@;'; put 'put ''PWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRoKGwpe3JldHVybiB0aGlzLmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGlu''@;'; put 'put ''Z3M6bH09dGhpcztsZXQgYT1sLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIik7aWYoYT1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLGEpLG51bGwhPWEpe2NvbnN0IGQ9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLGg9bC5nZXRTZXR0aW5nKCJkZWZh''@;'; put 'put ''dWx0Q29sdW1uV2lkdGgiKTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtsZXQgdj1BcnJheS5pc0FycmF5KGEpP2FbZl06YTt2PXY/P2gsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KGYsdil9fX19ZnVuY3Rpb24gRmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBkUWUoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''aFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBmUWV7Y29uc3RydWN0b3IobCxhKXtGZmUodGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxGZmUodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lk''@;'; put 'put ''IDAhPT1kJiYoYT12b2lkIDA9PT1hP2Q6TWF0aC5tYXgoYSxkKSksYX1nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKGwsYSl7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGwsYSk7Y29uc3QgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RW''@;'; put 'put ''aWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1oJiYoZD12b2lkIDA9PT1kP2g6TWF0aC5tYXgoZCxoKSksZH19Y29uc3QgJDc9InRvcCIsSXA9ImJvdHRvbSIsSzc9ImlubGluZV9zdGFydCIscTc9InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIixCbT0iYm90dG9tX2lu''@;'; put 'put ''bGluZV9zdGFydF9jb3JuZXIiLEhmZT1bJDcsSXAsSzcscTcsQm1dLHBRZT1uZXcgTWFwKFtbJDcsYGh0X2Nsb25lXyR7JDd9YF0sW0lwLGBodF9jbG9uZV8ke0lwfWBdLFtLNyxgaHRfY2xvbmVfJHtLN30gaHRfY2xvbmVfbGVmdGBdLFtxNyxgaHRfY2xvbmVfJHtxN30gaHRfY2xvbmVfdG9w''@;'; put 'put ''X2xlZnRfY29ybmVyYF0sW0JtLGBodF9jbG9uZV8ke0JtfSBodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXJgXV0pO2Z1bmN0aW9uIFJwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBnUWUoYyl7dmFyIGw9ZnVuY3Rpb24gbVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBtXz1jbGFzcyB2UWV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtScCh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxScCh0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxScCh0aGlzLCJUQk9EWSIsbnVsbCksUnAodGhpcywiVEhFQUQiLG51''@;'; put 'put ''bGwpLFJwKHRoaXMsIkNPTEdST1VQIixudWxsKSxScCh0aGlzLCJoYXNUYWJsZUhlaWdodCIsITApLFJwKHRoaXMsImhhc1RhYmxlV2lkdGgiLCEwKSxScCh0aGlzLCJpc1RhYmxlVmlzaWJsZSIsITEpLFJwKHRoaXMsInRhYmxlT2Zmc2V0IiwwKSxScCh0aGlzLCJob2xkZXJPZmZzZXQiLDAp''@;'; put 'put ''LHRoaXMuZG9tQmluZGluZ3M9ZCx0aGlzLmlzTWFzdGVyPSJtYXN0ZXIiPT09Zix0aGlzLm5hbWU9Zix0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuaW5zdGFuY2U9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlz''@;'; put 'put ''LndvdD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMuVEFCTEU9ZC5yb290VGFibGUseSQodGhpcy5UQUJMRSksdGhpcy5zcHJlYWRlcj10aGlzLmNyZWF0ZVNwcmVhZGVyKHRoaXMuVEFCTEUpLHRoaXMuaGlkZXI9dGhpcy5jcmVhdGVIaWRlcih0aGlzLnNwcmVhZGVyKSx0aGlzLmhv''@;'; put 'put ''bGRlcj10aGlzLmNyZWF0ZUhvbGRlcih0aGlzLmhpZGVyKSx0aGlzLnd0Um9vdEVsZW1lbnQ9dGhpcy5ob2xkZXIucGFyZW50Tm9kZSx0aGlzLmlzTWFzdGVyJiZ0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLmZpeFRhYmxlRG9tVHJlZSgpLHRoaXMucm93''@;'; put 'put ''RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0hMTtjb25zdCB2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicm93SGVhZGVyV2lkdGgiKTt0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJyb3dIZWFkZXJXaWR0aCIsKCk9PnRo''@;'; put 'put ''aXMuX21vZGlmeVJvd0hlYWRlcldpZHRoKHYpKSx0aGlzLnJvd1V0aWxzPW5ldyBmUWUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy5jb2x1bW5VdGlscz1uZXcgdVFlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMudGFibGVS''@;'; put 'put ''ZW5kZXJlcj1uZXcgc1FlKHtUQUJMRTp0aGlzLlRBQkxFLFRIRUFEOnRoaXMuVEhFQUQsQ09MR1JPVVA6dGhpcy5DT0xHUk9VUCxUQk9EWTp0aGlzLlRCT0RZLHJvd1V0aWxzOnRoaXMucm93VXRpbHMsY29sdW1uVXRpbHM6dGhpcy5jb2x1bW5VdGlscyxjZWxsUmVuZGVyZXI6dGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmdQdXJlKCJjZWxsUmVuZGVyZXIiKSxzdHlsZXNIYW5kbGVyOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyfSl9aXMobCl7cmV0dXJuIHRoaXMubmFtZT09PWx9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgbD10aGlzLmRvbUJpbmRpbmdzLnJvb3RE''@;'; put 'put ''b2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZfHwodGhpcy5UQk9EWT1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9bC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQsdGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIp''@;'; put 'put ''LHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWwuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMuVEhFQUQpKX1jcmVhdGVTcHJlYWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8''@;'; put 'put ''fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RTcHJlYWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENo''@;'; put 'put ''aWxkKGwpKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1jcmVhdGVIaWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEu''@;'; put 'put ''bm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwp''@;'; put 'put ''KSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWNyZWF0ZUhvbGRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBv''@;'; put 'put ''KGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZC5jbGFzc05hbWU9Ind0SG9sZGVyIix2byhkLFtONygtMSldKSxhJiZhLmluc2VydEJlZm9yZShkLGwpLHRoaXMu''@;'; put 'put ''aXNNYXN0ZXImJihkLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJsZSIsZC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1vZGUiKT8icnRsIjoibHRyIiksdGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQucGFyZW50Tm9kZSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSksZC5hcHBlbmRDaGlsZChsKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1kcmF3KCl7''@;'; put 'put ''bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiks''@;'; put 'put ''dj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLE09YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksRD1NLmxlbmd0aCxaPWEuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLHJlPVoubGVuZ3RoO2xldCBjZT1sO2lmKHRoaXMuaXNNYXN0ZXImJihkLmJlZm9yZURyYXcoKSx0aGlzLmhv''@;'; put 'put ''bGRlck9mZnNldD1VMCh0aGlzLmhvbGRlciksY2U9aC5jcmVhdGVDYWxjdWxhdG9ycyhjZSksRCYmIWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IEVlPWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksQmU9dGhpcy5jb3JyZWN0SGVhZGVy''@;'; put 'put ''V2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PUVlLEJlIT09dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihjZT0hMSl9aWYoY2UpdGhpcy5pc01hc3RlciYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9VMCh0aGlzLlRBQkxFKTp0aGlz''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgRWU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCksMCksQmU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksMCk7dGhpcy5yb3dGaWx0ZXI9bmV3IE1KZShFZSxmLHJlKSx0aGlz''@;'; put 'put ''LmNvbHVtbkZpbHRlcj1uZXcgX0plKEJlLHYsRCk7bGV0IHFlPSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IHJ0PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxydCkscWU9ITAh''@;'; put 'put ''PT1ydC5za2lwUmVuZGVyfXFlJiYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxaKSwodGhpcy5pcyhJcCl8fHRoaXMuaXMoQm0pKSYmdGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxbXSksdGhpcy5yZXNldE92ZXJz''@;'; put 'put ''aXplZFJvd3MoKSx0aGlzLnRhYmxlUmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUodGhpcy5uYW1lKS5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0''@;'; put 'put ''aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCksdGhpcy5pc01hc3RlciYmdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpLHRoaXMuYWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpLCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKElwKSkmJnRoaXMubWFya092ZXJzaXplZFJvd3MoKSx0''@;'; put 'put ''aGlzLmlzTWFzdGVyPyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIil8fGguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZC5yZWZyZXNoKCExKSxkLmFwcGx5VG9ET00oKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCkp''@;'; put 'put ''OnRoaXMuaXMoSXApJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY2xvbmVTb3VyY2Uud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSl9bGV0IGJlPSExO3JldHVybiB0aGlzLmlzTWFzdGVyJiYoYmU9ZC50b3BPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tT3Zlcmxh''@;'; put 'put ''eS5jbG9uZSYmKGJlPWQuYm90dG9tT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8YmUpLGJlPWQuaW5saW5lU3RhcnRPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpfHxiZSxkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXku''@;'; put 'put ''cmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSksYmU/KGQucmVmcmVzaEFs''@;'; put 'put ''bCgpLGQuYWRqdXN0RWxlbWVudHNTaXplKCkpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zZWxlY3Rpb25NYW5hZ2VyLnNldEFjdGl2ZU92ZXJsYXkodGhpcy5mYWNhZGVHZXR0ZXIoKSkucmVuZGVyKGNlKSx0aGlzLmlzTWFzdGVyJiZkLmFmdGVyRHJhdygpLHRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlckhlaWdodCIpfHxbXTtmb3IoO2Q7KWQtPTEsZj10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChk''@;'; put 'put ''KSx2PXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGEsZCksdiYmKE09b18odiksKCFmJiZoPE18fGY8TSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPU0pLEFycmF5LmlzQXJyYXkoRCk/bnVsbCE9RFtkXSYmKHRoaXMuZGF0YUFjY2Vz''@;'; put 'put ''c09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RFtkXSk6aXNOYU4oRCl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPUQpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXpl''@;'; put 'put ''ZENvbHVtbkhlYWRlcnNbZF08KERbZF18fEQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EW2RdfHxEKSl9YWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyxhPXRoaXMuVEhFQUQu''@;'; put 'put ''Y2hpbGROb2RlcyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBmPTAsdj1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Zjx2O2YrKylpZihkW2ZdKXtpZighYVtmXXx8MD09PWFbZl0uY2hpbGROb2Rl''@;'; put 'put ''cy5sZW5ndGgpcmV0dXJuO2FbZl0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7ZFtmXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRo''@;'; put 'put ''aXMuaXMoSXApKSYmIWwuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTthLm92ZXJzaXplZFJv''@;'; put 'put ''d3MmJmEub3ZlcnNpemVkUm93c1tmXSYmKGEub3ZlcnNpemVkUm93c1tmXT12b2lkIDApfX19Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsYSxkLCF0aGlzLmlzTWFzdGVyLCJy''@;'; put 'put ''ZW5kZXIiKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhk''@;'; put 'put ''KSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1m''@;'; put 'put ''LmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93''@;'; put 'put ''KGwpe2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRl''@;'; put 'put ''cil8fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5j''@;'; put 'put ''aGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMo''@;'; put 'put ''bCl7Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVh''@;'; put 'put ''ZGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVu''@;'; put 'put ''ZGVyZWQobCksZj1oPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpOmgsTT0oaDwwP3RoaXMuVEhFQUQ6dGhpcy5UQk9EWSkuY2hpbGROb2Rlc1tmXTtyZXR1cm4gTT8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXSx2PWY/LmNoaWxkTm9kZXNbaF07diYmYS5wdXNoKHYp''@;'; put 'put ''fXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9Um0oYSxbIlREIiwiVEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJlbnROb2RlO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5w''@;'; put 'put ''YXJlbnROb2RlO2xldCBmPVAyZShkKSx2PWEuY2VsbEluZGV4O09tKHE3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oJDcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGlsZE5vZGVzLmxlbmd0aCk6T20oQm0sYSx0aGlzLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQpfHxPbShJcCxhLHRoaXMud3RSb290RWxlbWVudCk/Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP2Y9dGhpcy5yb3dGaWx0ZXIudmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGYpOnRo''@;'; put 'put ''aXMucm93RmlsdGVyJiYoZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpKSxPbShxNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKEs3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oQm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpP3Y9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0''@;'; put 'put ''dGVkVEgodik6dGhpcy5jb2x1bW5GaWx0ZXImJih2PXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbih2KSk7Y29uc3QgTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDb29yZHNFbGVtZW50IixmLHYpO3JldHVybiBN''@;'; put 'put ''JiZBcnJheS5pc0FycmF5KE0pJiYoW2Ysdl09TSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgbD10aGlzLlRCT0RZLmNoaWxk''@;'; put 'put ''Tm9kZXMubGVuZ3RoO2NvbnN0IGE9bCp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCksZD1vXyh0aGlzLlRCT0RZKS0xLGg9dGhpcy53b3Quc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpLGY9aD94dTpvXyx2PWg/MDoxLE09''@;'; put 'put ''aD8xOjA7bGV0IEQsWixyZSxjZSxiZTtpZihhIT09ZHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKWZvcig7bDspe2wtPTEscmU9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKSxEPXRoaXMuZ2V0Um93SGVpZ2h0KHJlKSxjZT10aGlzLmdl''@;'; put 'put ''dFRyRm9yUm93KHJlKSxiZT1jZS5xdWVyeVNlbGVjdG9yKCJ0aCIpO2NvbnN0IEVlPTA9PT1yZT9NOjA7Wj1iZT9mKGJlKTpmKGNlKS12LCghRCYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpPFotRWV8fEQ8WikmJihofHwoWis9MSks''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tyZV09Wil9fWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihs''@;'; put 'put ''Pj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5n''@;'; put 'put ''KCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dB''@;'; put 'put ''ZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJl''@;'; put 'put ''bmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRM''@;'; put 'put ''YXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1uQmVmb3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3Vy''@;'; put 'put ''Y2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1''@;'; put 'put ''bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlzLnJvd1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1u''@;'; put 'put ''VXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiBzdSh0''@;'; put 'put ''aGlzLlRBQkxFKX1nZXRIZWlnaHQoKXtyZXR1cm4geHUodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9c3UodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD14dSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9''@;'; put 'put ''PWw/bDp0aGlzLmdldEhlaWdodCgpfWlzVmlzaWJsZSgpe3JldHVybiBVNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bWwobCk/bCgpOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJv''@;'; put 'put ''d0hlYWRlcldpZHRoKGFbYS5sZW5ndGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29s''@;'; put 'put ''dW1uV2lkdGgiKSksdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sTmZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5k''@;'; put 'put ''ZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIp''@;'; put 'put ''LHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhl''@;'; put 'put ''YWRlcnMubGVuZ3RofX07VHAoTmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c1RvcCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBWZmU9TmZlLEJmZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1u''@;'; put 'put ''UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3Qg''@;'; put 'put ''Yz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6''@;'; put 'put ''Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVt''@;'; put 'put ''blBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNSZW5kZXJlZH0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3QuY291bnRDb2x1bW5zVmlzaWJsZX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O1RwKEJmZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRDb2x1bW5zIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0p''@;'; put 'put ''O2NvbnN0IGRLPUJmZTtjbGFzcyBoSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsJDcpfX1UbChoSyxWZmUpLFRsKGhLLGRLKTtjb25zdCBfUWU9aEs7ZnVuY3Rpb24gblAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBQRT1uZXcgV2Vha1NldDtmdW5jdGlvbiBqZmUoYyl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGluZVN0YXJ0''@;'; put 'put ''T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzp2fT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoYS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXYpe2xldCBEPW51bGw7aWYobC5nZXRTZXR0aW5nKCJydGxNb2RlIikpe2NvbnN0''@;'; put 'put ''IHJlPWQuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RD1NYXRoLmFicyhyZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpfWVsc2UgRD1VMChkLnd0Um9vdEVsZW1lbnQpLmxlZnQ7Y29uc3Qg''@;'; put 'put ''Wj1NYXRoLmFicyh3JCh2LHYpKTtpZihEPlope2NvbnN0IHJlPUMkKHYpO2xldCBjZT1oLmdldFJvd0hlYWRlcldpZHRoKCk7Zm9yKGxldCBiZT0xO2JlPD1mO2JlKyspaWYoY2UrPWEuc3VtQ2VsbFNpemVzKGJlLTEsYmUpLEQrY2UtWj49cmUpe2M9YmUtMjticmVha319fXJldHVybiBjfWZ1''@;'; put 'put ''bmN0aW9uIHpmZShjKXtjb25zdHt0b3BPdmVybGF5Omwsd3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCx0b3RhbFJvd3M6aCxyb290V2luZG93OmZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3Qgdj1VMChhLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQpLE09T08oZixmKTtpZih2LnRvcD5NKXtjb25zdCBEPW9fKGYpO2xldCBaPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7Zm9yKGxldCByZT0xO3JlPD1oO3JlKyspaWYoWis9bC5zdW1DZWxsU2l6ZXMocmUtMSxyZSksdi50b3ArWi1NPj1EKXtjPXJlLTI7YnJlYWt9fX1yZXR1cm4gY31j''@;'; put 'put ''b25zdCBUUWU9Y2xhc3MgRVFle2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB3UWUoYyxsKXsoZnVuY3Rpb24gQ1FlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmpl''@;'; put 'put ''Y3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLFBFKSxmdW5jdGlvbiBTUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE1RZShjKXt2YXIgbD1mdW5jdGlvbiB4UWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJk''@;'; put 'put ''YXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtpZihsLmNvbDwwfHxsLnJvdzwwKXJldHVybiExO2NvbnN0IGg9dGhpcy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLmNvbCxhKSxmPXRoaXMuc2Nyb2xsVmll''@;'; put 'put ''d3BvcnRWZXJ0aWNhbGx5KGwucm93LGQpO3JldHVybiBofHxmfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXV0byI7Y29uc3R7ZHJhd246ZCx0b3RhbENvbHVtbnM6aH09''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybiExO2NvbnN0IGY9RmQoYSk7aWYobD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxs''@;'; put 'put ''PDB8fGw+aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRDb2x1bW5zU3RhcnQ6dixpbmxpbmVTdGFydE92ZXJsYXk6TX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LEQ9ImF1dG8iPT09YTtpZihEJiZsPHYpcmV0dXJuITE7Y29uc3QgWj10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigp''@;'; put 'put ''LHJlPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtsZXQgY2U9ITE7cmV0dXJuKEQmJihsPFp8fGw+cmUpfHwhRCkmJihjZT1NLnNjcm9sbFRvKGwsRD9sPj10aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCk6ImVuZCI9PT1hKSksY2V9c2Nyb2xsVmlld3BvcnRWZXJ0aWNh''@;'; put 'put ''bGx5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXV0byI7Y29uc3R7ZHJhd246ZCx0b3RhbFJvd3M6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybiExO2NvbnN0IGY9RmQoYSk7aWYobD10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2NvbnN0e2ZpeGVkUm93c0JvdHRvbTp2LGZpeGVkUm93c1RvcDpN''@;'; put 'put ''LHRvcE92ZXJsYXk6RH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LFo9ImF1dG8iPT09YTtpZihaJiYobDxNfHxsPmgtdi0xKSlyZXR1cm4hMTtjb25zdCByZT10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGNlPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTtsZXQgYmU9ITE7cmV0dXJuKFomJihs''@;'; put 'put ''PHJlfHxsPmNlKXx8IVopJiYoYmU9RC5zY3JvbGxUbyhsLFo/bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpOiJib3R0b20iPT09YSkpLGJlfWdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVS''@;'; put 'put ''b3coKX1nZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiBuUChQRSx0aGlzLHpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmpl''@;'; put 'put ''Y3Qud3RUYWJsZS5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiBuUChQRSx0aGlzLHpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdl''@;'; put 'put ''dEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiBuUChQRSx0aGlzLGpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRh''@;'; put 'put ''YmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3Jl''@;'; put 'put ''dHVybiBuUChQRSx0aGlzLGpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfX07ZnVuY3Rpb24gVWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEUWUoYyl7dmFyIGw9ZnVuY3Rpb24gSVFlKGMsbCl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl''@;'; put 'put ''OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2XyhjLGwpe3JldHVybiBjLmdldChXZmUoYyxsKSl9ZnVuY3Rpb24gWmZlKGMsbCxhKXtyZXR1cm4gYy5zZXQoV2ZlKGMsbCksYSksYX1mdW5jdGlvbiBXZmUoYyxsLGEpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBfZz1uZXcgV2Vha01hcDtjbGFzcyByUHtj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07VWZlKHRoaXMsInJvdyIsbnVsbCksVWZlKHRoaXMsImNvbCIsbnVsbCksZnVuY3Rpb24gQVFlKGMsbCxhKXsoZnVuY3Rpb24ga1FlKGMsbCl7aWYobC5o''@;'; put 'put ''YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxfZywhMSksWmZlKF9nLHRoaXMsZCksdHlwZW9mIGw8InUiJiZ0eXBlb2YgYTwidSIm''@;'; put 'put ''Jih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7Y29uc3R7Y291bnRSb3dzOmEsY291bnRDb2xzOmQsY291bnRSb3dIZWFkZXJzOmgsY291bnRDb2xIZWFkZXJzOmZ9PXtjb3VudFJvd3M6MCxjb3VudENvbHM6MCxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6MCwu''@;'; put 'put ''Li5sfTtyZXR1cm4hKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMucm93KXx8IU51bWJlci5pc0ludGVnZXIodGhpcy5jb2wpfHx0aGlzLnJvdzwtZnx8dGhpcy5jb2w8LWh8fHRoaXMucm93Pj1hfHx0aGlzLmNvbD49ZCl9aXNFcXVhbChsKXtyZXR1cm4gbD09PXRoaXN8fHRoaXMucm93PT09bC5y''@;'; put 'put ''b3cmJnRoaXMuY29sPT09bC5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hdGhpcy5pc0NlbGwoKX1pc0NlbGwoKXtyZXR1cm4gdGhpcy5yb3c+PTAmJnRoaXMuY29sPj0wfWlzUnRsKCl7cmV0dXJuIHZfKF9nLHRoaXMpfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKHZf''@;'; put 'put ''KF9nLHRoaXMpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1s''@;'; put 'put ''LnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJv''@;'; put 'put ''dz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRoaXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9YXNzaWduKGwpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGw/LnJvdykmJih0aGlzLnJvdz1sLnJv''@;'; put 'put ''dyksTnVtYmVyLmlzSW50ZWdlcihsPy5jb2wpJiYodGhpcy5jb2w9bC5jb2wpLGwgaW5zdGFuY2VvZiByUCYmWmZlKF9nLHRoaXMsbC5pc1J0bCgpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyByUCh0aGlzLnJvdyx0aGlzLmNvbCx2XyhfZyx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57cm93''@;'; put 'put ''OnRoaXMucm93LGNvbDp0aGlzLmNvbH19fWNvbnN0IGlQPXJQO2Z1bmN0aW9uIGZLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPUWUoYyl7dmFyIGw9ZnVuY3Rpb24gUFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5j''@;'; put 'put ''dGlvbiBVMihjLGwpe3JldHVybiBjLmdldChZZmUoYyxsKSl9ZnVuY3Rpb24gWWZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMg''@;'; put 'put ''bm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTmQ9bmV3IFdlYWtNYXA7Y2xhc3MgcEt7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bCxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107ZksodGhpcywiaGlnaGxpZ2h0IixudWxsKSxmSyh0aGlzLCJmcm9tIixudWxsKSxmSyh0aGlzLCJ0byIsbnVsbCksZnVuY3Rpb24gUlFl''@;'; put 'put ''KGMsbCxhKXsoZnVuY3Rpb24gTFFlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxOZCwhMSksdGhpcy5oaWdo''@;'; put 'put ''bGlnaHQ9bC5jbG9uZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24gRlFlKGMsbCxhKXtjLnNldChZZmUoYyxsKSxhKX0oTmQsdGhpcyxoKX1zZXRIaWdobGlnaHQobCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKSx0aGlzfXNldEZyb20o''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMuZnJvbT1sLmNsb25lKCksdGhpc31zZXRUbyhsKXtyZXR1cm4gdGhpcy50bz1sLmNsb25lKCksdGhpc31ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQubm9ybWFsaXplKCksdGhpcy5mcm9tLm5vcm1hbGl6ZSgpLHRoaXMudG8ubm9ybWFsaXplKCksdGhp''@;'; put 'put ''c31pc1ZhbGlkKGwpe3JldHVybiB0aGlzLmZyb20uaXNWYWxpZChsKSYmdGhpcy50by5pc1ZhbGlkKGwpfWlzU2luZ2xlKCl7cmV0dXJuIHRoaXMuaXNTaW5nbGVDZWxsKCl8fHRoaXMuaXNTaW5nbGVIZWFkZXIoKX1pc1NpbmdsZUNlbGwoKXtyZXR1cm4gdGhpcy5mcm9tLnJvdz49MCYmdGhp''@;'; put 'put ''cy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNTaW5nbGVIZWFkZXIoKXtyZXR1cm4odGhpcy5mcm9tLnJvdzwwfHx0aGlzLmZyb20uY29sPDApJiZ0aGlzLmZyb20ucm93PT09dGhpcy50by5yb3cmJnRoaXMu''@;'; put 'put ''ZnJvbS5jb2w9PT10aGlzLnRvLmNvbH1pc0hlYWRlcigpe3JldHVybiEoIXRoaXMuZnJvbS5pc0hlYWRlcigpfHwhdGhpcy50by5pc0hlYWRlcigpKXx8dGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRvLmNvbDwwfHx0aGlzLmZyb20ucm93PDAmJnRoaXMudG8ucm93PDB9Y29udGFpbnNIZWFkZXJz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZnJvbS5pc0hlYWRlcigpfHx0aGlzLnRvLmlzSGVhZGVyKCl9Z2V0T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyktTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7''@;'; put 'put ''cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJv''@;'; put 'put ''dywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1h''@;'; put 'put ''eCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhsKXtjb25zdHtyb3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJvdzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1JhbmdlKGwpe3JldHVybiB0aGlzLmluY2x1ZGVzKGwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNs''@;'; put 'put ''dWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5t''@;'; put 'put ''YXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3Zl''@;'; put 'put ''cmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigp''@;'; put 'put ''LmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRD''@;'; put 'put ''b3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbDw9bC5nZXRP''@;'; put 'put ''dXRlclRvcEVuZENvcm5lcigpLmNvbHx8dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPD1sLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbH1pc092ZXJsYXBw''@;'; put 'put ''aW5nVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93Pj1sLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93''@;'; put 'put ''fHx0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvd31leHBhbmQobCl7Y29uc3QgYT10aGlzLmdldE91dGVy''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4obC5yb3c8YS5yb3d8fGwuY29sPGEuY29sfHxsLnJvdz5kLnJvd3x8bC5jb2w+ZC5jb2wpJiYodGhpcy5mcm9tPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oYS5yb3csbC5yb3cp''@;'; put 'put ''LE1hdGgubWluKGEuY29sLGwuY29sKSksdGhpcy50bz10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGQucm93LGwucm93KSxNYXRoLm1heChkLmNvbCxsLmNvbCkpLCEwKX1leHBhbmRCeVJhbmdlKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0pfHxhcmd1bWVudHNbMV07aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGg9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGY9dGhpcy5nZXREaXJlY3Rpb24o''@;'; put 'put ''KSx2PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLE09bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLEQ9TWF0aC5taW4oZC5yb3csdi5yb3cpLFo9TWF0aC5taW4oZC5jb2wsdi5jb2wpLHJlPU1hdGgubWF4KGgucm93LE0ucm93KSxjZT1NYXRoLm1heChoLmNvbCxNLmNvbCksYmU9dGhp''@;'; put 'put ''cy5fY3JlYXRlQ2VsbENvb3JkcyhELFopLEVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMocmUsY2UpO3JldHVybiB0aGlzLmZyb209YmUsdGhpcy50bz1FZSx0aGlzLnNldERpcmVjdGlvbihmKSxhJiYodGhpcy5oaWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVy''@;'; put 'put ''KCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rp''@;'; put 'put ''b24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCkpLCEwfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmZyb20uaXNOb3J0aFdlc3RPZih0aGlzLnRvKT8iTlctU0UiOnRoaXMuZnJvbS5pc05vcnRoRWFzdE9mKHRoaXMudG8pPyJORS1TVyI6dGhpcy5mcm9tLmlzU291dGhF''@;'; put 'put ''YXN0T2YodGhpcy50byk/IlNFLU5XIjp0aGlzLmZyb20uaXNTb3V0aFdlc3RPZih0aGlzLnRvKT8iU1ctTkUiOnZvaWQgMH1zZXREaXJlY3Rpb24obCl7c3dpdGNoKGwpe2Nhc2UiTlctU0UiOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCksdGhpcy5n''@;'; put 'put ''ZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCldO2JyZWFrO2Nhc2UiTkUtU1ciOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU0UtTlciOlt0aGlzLmZyb20sdGhpcy50''@;'; put 'put ''b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU1ctTkUiOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVy''@;'; put 'put ''KCldfX1nZXRWZXJ0aWNhbERpcmVjdGlvbigpe3JldHVyblsiTkUtU1ciLCJOVy1TRSJdLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSk+LTE/Ik4tUyI6IlMtTiJ9Z2V0SG9yaXpvbnRhbERpcmVjdGlvbigpe3JldHVyblsiTlctU0UiLCJTVy1ORSJdLmluZGV4T2YodGhpcy5nZXREaXJl''@;'; put 'put ''Y3Rpb24oKSk+LTE/IlctRSI6IkUtVyJ9ZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIik7YnJl''@;'; put 'put ''YWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIil9fWZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXRE''@;'; put 'put ''aXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIil9fWdldFRvcFN0YXJ0''@;'; put 'put ''Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcExlZnRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhp''@;'; put 'put ''cy5nZXRUb3BFbmRDb3JuZXIoKTp0aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCl9Z2V0Qm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNv''@;'; put 'put ''bCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbUVuZENvcm5lcigpfWdldFRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgu''@;'; put 'put ''bWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BSaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRUb3BFbmRDb3JuZXIo''@;'; put 'put ''KX1nZXRCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21MZWZ0Q29ybmVyKCl7cmV0''@;'; put 'put ''dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpfWdldE91dGVyVG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRo''@;'; put 'put ''Lm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKX1nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpe3JldHVy''@;'; put 'put ''biB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21T''@;'; put 'put ''dGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKX1nZXRPdXRlclRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5j''@;'; put 'put ''b2wpKX1nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKX1nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tTGVmdENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlckJv''@;'; put 'put ''dHRvbVN0YXJ0Q29ybmVyKCl9aXNDb3JuZXIobCl7cmV0dXJuIGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpfHxs''@;'; put 'put ''LmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwpe3JldHVybiBsIGluc3RhbmNlb2YgaVAmJihsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlz''@;'; put 'put ''RXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJv''@;'; put 'put ''dHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDApfWdldEJvcmRlcnNTaGFyZWRXaXRoKGwpe2lmKCF0aGlzLmluY2x1ZGVzUmFuZ2UobCkpcmV0dXJuW107Y29uc3QgYV90b3A9TWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9i''@;'; put 'put ''b3R0b209TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9sZWZ0PU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGFfcmlnaHQ9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksZF90b3A9TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdyks''@;'; put 'put ''ZF9ib3R0b209TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdyksZF9sZWZ0PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpLGRfcmlnaHQ9TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCksaD1bXTtyZXR1cm4gYV90b3A9PT1kX3RvcCYmaC5wdXNoKCJ0b3AiKSxhX3JpZ2h0PT09''@;'; put 'put ''ZF9yaWdodCYmaC5wdXNoKFUyKE5kLHRoaXMpPyJsZWZ0IjoicmlnaHQiKSxhX2JvdHRvbT09PWRfYm90dG9tJiZoLnB1c2goImJvdHRvbSIpLGFfbGVmdD09PWRfbGVmdCYmaC5wdXNoKFUyKE5kLHRoaXMpPyJyaWdodCI6ImxlZnQiKSxofWdldElubmVyKCl7Y29uc3QgbD10aGlzLmdldE91''@;'; put 'put ''dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKykodGhpcy5mcm9tLnJvdyE9PWh8fHRoaXMuZnJvbS5jb2whPT1mKSYmKHRoaXMudG8u''@;'; put 'put ''cm93IT09aHx8dGhpcy50by5jb2whPT1mKSYmZC5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Z2V0QWxsKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQg''@;'; put 'put ''aD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKylkLnB1c2gobC5yb3c9PT1oJiZsLmNvbD09PWY/bDphLnJvdz09PWgmJmEuY29sPT09Zj9hOnRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Zm9yQWxsKGwpe2NvbnN0IGE9dGhpcy5n''@;'; put 'put ''ZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBoPWEucm93O2g8PWQucm93O2grKylmb3IobGV0IGY9YS5jb2w7Zjw9ZC5jb2w7ZisrKWlmKCExPT09bChoLGYpKXJldHVybn1jbG9uZSgpe3JldHVybiBuZXcgcEsodGhpcy5o''@;'; put 'put ''aWdobGlnaHQsdGhpcy5mcm9tLHRoaXMudG8sVTIoTmQsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue2Zyb206dGhpcy5mcm9tLnRvT2JqZWN0KCksdG86dGhpcy50by50b09iamVjdCgpfX1fY3JlYXRlQ2VsbENvb3JkcyhsLGEpe3JldHVybiBuZXcgaVAobCxhLFUyKE5kLHRoaXMpKX19Y29u''@;'; put 'put ''c3QgZ0s9cEs7ZnVuY3Rpb24gWjIoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhRZShjKXt2YXIgbD1mdW5jdGlvbiBOUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh''@;'; put 'put ''bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu''@;'; put 'put ''ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIG1Le2dldCBldmVudE1hbmFnZXIoKXtyZXR1''@;'; put 'put ''cm4gbmV3IGoyKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7WjIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxaMih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSxaMih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLFoyKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksWjIodGhpcywic2VsZWN0aW9uTWFu''@;'; put 'put ''YWdlciIsdm9pZCAwKSxaMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLFoyKHRoaXMsImd1aWQiLGB3dF8ke2gkKCl9YCksWjIodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksWjIodGhpcywiZHJhd24iLCExKSxaMih0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsIm1hc3RlciIpLFoyKHRoaXMs''@;'; put 'put ''ImRvbUJpbmRpbmdzIix2b2lkIDApLFoyKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kb21CaW5kaW5ncz17cm9vdFRhYmxlOmwscm9vdERvY3VtZW50Omwub3duZXJEb2N1bWVudCxyb290V2luZG93Omwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld30sdGhpcy53dFNldHRpbmdz''@;'; put 'put ''PWEsdGhpcy53dFNjcm9sbD1uZXcgVFFlKHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpfWZpbmRPcmlnaW5hbEhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLmxlbmd0aCYmdGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rl''@;'; put 'put ''cy5sZW5ndGgpe2ZvcihsZXQgYT0wLGQ9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKylsLnB1c2godGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1thXS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24oYSxkKXtQbShkLGxbYV0pfV0pfX1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBpUChsLGEsdGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gbmV3IGdLKGwsYSxkLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRyYXcoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRz''@;'; put 'put ''WzBdO3JldHVybiB0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMSwhdGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpfHxWMmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSk/dGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITA6dGhpcy53dFRhYmxlLmRyYXcobCksdGhpc31nZXRDZWxsKGwp''@;'; put 'put ''e2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGg9dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoImZpeGVkUm93c1RvcCIpLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYobC5yb3c8aCYmbC5jb2w8dilyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRv''@;'; put 'put ''cElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8aClyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwuY29sPHYmJmwucm93Pj1kLWYpe2lmKHRoaXMud3RPdmVybGF5cy5i''@;'; put 'put ''b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfWVs''@;'; put 'put ''c2V7aWYobC5jb2w8dilyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8ZCYmbC5yb3c+PWQtZiYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5''@;'; put 'put ''LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9''@;'; put 'put ''c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEp''@;'; put 'put ''fWdldFZpZXdwb3J0KCl7cmV0dXJuW3RoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCldfWRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLnd0T3ZlcmxheXMuZGVzdHJveSgpLHRoaXMud3RFdmVudC5kZXN0cm95KCl9Y3JlYXRlU2Nyb2xsRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgZHJhd24oKXtyZXR1cm4gbC5kcmF3bn0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92''@;'; put 'put ''ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dFNldHRpbmdzKCl7cmV0dXJu''@;'; put 'put ''IGwud3RTZXR0aW5nc30sZ2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gbC5kb21CaW5kaW5ncy5yb290V2luZG93fSxnZXQgdG90YWxSb3dzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKX0sZ2V0IHRvdGFsQ29sdW1ucygpe3JldHVybiBsLnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygidG90YWxDb2x1bW5zIil9LGdldCBmaXhlZFJvd3NUb3AoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfSxnZXQgZml4ZWRSb3dzQm90dG9tKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20i''@;'; put 'put ''KX0sZ2V0IGZpeGVkQ29sdW1uc1N0YXJ0KCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpfX19Z2V0VGFibGVEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHBhcmVudFRhYmxlT2Zmc2V0KCl7cmV0dXJu''@;'; put 'put ''IGwuY2xvbmVTb3VyY2Uud3RUYWJsZS50YWJsZU9mZnNldH0sZ2V0IGNsb25lU291cmNlKCl7cmV0dXJuIGwuY2xvbmVTb3VyY2V9LGdldCB3b3Jrc3BhY2VXaWR0aCgpe3JldHVybiBsLnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53''@;'; put 'put ''dFZpZXdwb3J0fSxnZXQgd3RPdmVybGF5cygpe3JldHVybiBsLnd0T3ZlcmxheXN9LGdldCBzZWxlY3Rpb25NYW5hZ2VyKCl7cmV0dXJuIGwuc2VsZWN0aW9uTWFuYWdlcn0sZ2V0IHN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gbC5zdHlsZXNIYW5kbGVyfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5k''@;'; put 'put ''cmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2li''@;'; put 'put ''bGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxn''@;'; put 'put ''ZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRD''@;'; put 'put ''b2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50''@;'; put 'put ''fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJv''@;'; put 'put ''d1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgZW5kUm93''@;'; put 'put ''UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJu''@;'; put 'put ''IGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3Bv''@;'; put 'put ''cnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgY29sdW1uSGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpfSxnZXQgcm93SGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpfX19''@;'; put 'put ''fWZ1bmN0aW9uIEdmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVlFlKGMpe3ZhciBsPWZ1bmN0aW9uIEJRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgalFlIGV4dGVuZHMgbUt7Y29uc3RydWN0b3IobCxhLGQp''@;'; put 'put ''e3N1cGVyKGwsYSksR2ZlKHRoaXMsImNsb25lU291cmNlIix2b2lkIDApLEdmZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVy''@;'; put 'put ''bGF5PWQub3ZlcmxheSx0aGlzLnN0eWxlc0hhbmRsZXI9ZC5zdHlsZXNIYW5kbGVyLHRoaXMud3RUYWJsZT10aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlRGFvKCksaCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PWQu''@;'; put 'put ''dmlld3BvcnQsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPWQuc2VsZWN0aW9uTWFuYWdlcix0aGlzLnd0RXZlbnQ9bmV3IEVmZShoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIsZC5ldmVu''@;'; put 'put ''dCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9fWNsYXNzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7KGZ1bmN0aW9uIHpRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVVFlKGMpe3ZhciBsPWZ1bmN0aW9uIFpRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxUcCh0aGlzLCJ3b3QiLGwse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1mLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWg7Y29uc3R7VEFCTEU6dixoaWRlcjpNLHNwcmVh''@;'; put 'put ''ZGVyOkQsaG9sZGVyOlosd3RSb290RWxlbWVudDpyZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPXYsdGhpcy5oaWRlcj1NLHRoaXMuc3ByZWFkZXI9RCx0''@;'; put 'put ''aGlzLmhvbGRlcj1aLHRoaXMud3RSb290RWxlbWVudD1yZSx0aGlzLnRyaW1taW5nQ29udGFpbmVyPWFfKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKSx0aGlzLm5lZWRGdWxsUmVuZGVyPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUo''@;'; put 'put ''KX1oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXtyZXR1cm4gdGhpcy5uZWVkRnVsbFJlbmRlciE9PXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcobCl7ImJlZm9yZSI9PT1sJiZ0aGlzLnNob3VsZEJlUmVuZGVyZWQoKT90aGlzLm5lZWRGdWxsUmVuZGVy''@;'; put 'put ''PSEwOiJhZnRlciI9PT1sJiYhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCkmJih0aGlzLm5lZWRGdWxsUmVuZGVyPSExKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuITB9dXBkYXRlVHJpbW1pbmdDb250YWluZXIoKXt0aGlzLnRyaW1taW5nQ29udGFpbmVyPWFfKHRoaXMuaGlkZXIucGFyZW50''@;'; put 'put ''Tm9kZS5wYXJlbnROb2RlKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHls''@;'; put 'put ''ZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRlcjp5RShsLlRBQkxFKX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihsLGEsZCl7aWYoITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRh''@;'; put 'put ''aW5zKGwpKXJldHVybiB2b2lkIGlsKGBUaGUgcHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92ZXJsYXlgKTtjb25zdCBoPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZj1kPHRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YTx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksTT1hPj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''ImZpeGVkUm93c0JvdHRvbSIpLEQ9dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLFo9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKEQpLHRvcDpELm9mZnNldFRvcH0scmU9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpLHRvcDpsLm9mZnNldFRv''@;'; put 'put ''cH07bGV0IGNlPW51bGw7cmV0dXJuIGNlPWg/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyh2LGYscmUsWik6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcih2LE0sZixyZSxaKSxjZX1nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaXNSdGwoKT9sLm9mZnNldFBhcmVudC5vZmZzZXRXaWR0aC1sLm9mZnNldExlZnQtbC5vZmZzZXRXaWR0aDpsLm9mZnNldExlZnR9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3cobCxhLGQsaCl7Y29uc3QgZj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHY9MCxNPTA7aWYoYSl7bGV0IEQ9Zi5sZWZ0O3RoaXMuaXNSdGwoKSYmKEQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LmlubmVyV2lkdGgtKGYubGVmdCtmLndpZHRoK2YwKCkpKSx2PUQ8PTA/LTEqRDowfWVsc2Ugdj1oLnN0YXJ0''@;'; put 'put ''O3JldHVybiBNPWw/dGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1mLnRvcDpoLnRvcCx7c3RhcnQ6ZC5zdGFydCt2LHRvcDpkLnRvcCtNfX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihsLGEsZCxoLGYpe2NvbnN0IHZfaG9y''@;'; put 'put ''aXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHZfdmVydGljYWw9dGhpcy53b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7bGV0IE09MCxEPTA7aWYoZHx8KE09dl9ob3Jpem9udGFsLWYu''@;'; put 'put ''c3RhcnQpLGEpe2NvbnN0IFo9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9LTEqdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtaLnRvcH1lbHNlIGx8fChEPXZfdmVydGljYWwtZi50b3Ap''@;'; put 'put ''O3JldHVybntzdGFydDpoLnN0YXJ0LU0sdG9wOmgudG9wLUR9fW1ha2VDbG9uZSgpe2lmKC0xPT09SGZlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmwsd3RTZXR0''@;'; put 'put ''aW5nczphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgidGFibGUiKSxNPWwud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2YuY2xhc3NOYW1lPWAke3BRZS5n''@;'; put 'put ''ZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxmLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLnRvcD0wLGYuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9mLnN0eWxl''@;'; put 'put ''LnJpZ2h0PTA6Zi5zdHlsZS5sZWZ0PTAsYS5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhmLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLHYuY2xhc3NOYW1lPWwuVEFCTEUuY2xhc3NOYW1lLGwuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikmJnYuc2V0QXR0cmlidXRlKCJyb2xlIixs''@;'; put 'put ''LlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpKSxmLmFwcGVuZENoaWxkKHYpLE0uYXBwZW5kQ2hpbGQoZik7Y29uc3QgWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1afHwi''@;'; put 'put ''aG9yaXpvbnRhbCI9PT1aJiZ0aGlzLnR5cGU9PT0kN3x8InZlcnRpY2FsIj09PVomJnRoaXMudHlwZT09PUs3P2g6ImhpZGRlbiI9PT1oLmdldENvbXB1dGVkU3R5bGUoTSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjp5RShsLlRBQkxFKSxuZXcgalFlKHYsdGhpcy53''@;'; put 'put ''dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25NYW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIsc3R5bGVzSGFuZGxlcjp0aGlzLndvdC5zdHlsZXNI''@;'; put 'put ''YW5kbGVyfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5uZWVkRnVsbFJlbmRlcil7Y29uc3QgYT10aGlzLmNsb25lLmNsb25lU291cmNlO2EuYWN0aXZlT3ZlcmxheU5hbWU9dGhpcy5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLm5hbWUsdGhpcy5jbG9uZS5kcmF3KGwpLGEuYWN0aXZlT3ZlcmxheU5hbWU9Im1hc3RlciJ9fXJlc2V0KCl7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO1tsLnN0eWxlLHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVudE5vZGUuc3R5bGVd''@;'; put 'put ''LmZvckVhY2godj0+e3Yud2lkdGg9IiIsdi5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IHZLPWM9Pntjb25zdCBsPWMuc3R5bGVz''@;'; put 'put ''SGFuZGxlcjtpZihsLmlzQ2xhc3NpY1RoZW1lKCkpcmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyV2lkdGg6MSxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiIjRkZGIn0pO2NvbnN0IGE9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9m''@;'; put 'put ''aWxsLXNpemUiKSxkPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxoPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6YSxoZWlnaHQ6YSxib3JkZXJX''@;'; put 'put ''aWR0aDpkLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6aH0pfTtjbGFzcyAkUWUgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsJDcsZCxoKSxmdW5jdGlvbiBXUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlRZShjKXt2YXIgbD1mdW5jdGlvbiBH''@;'; put 'put ''UWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3Jl''@;'; put 'put ''YXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IF9RZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRS''@;'; put 'put ''ZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9s''@;'; put 'put ''ZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgaD0wLGY9ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGQmJiJ2ZXJ0aWNhbCI9PT1kKWg9dGhpcy5n''@;'; put 'put ''ZXRTY3JvbGxQb3NpdGlvbigpLENFKGwpO2Vsc2V7Y29uc3R7d3RUYWJsZTpNfT10aGlzLndvdCxEPU0uaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zj1NYXRoLmNlaWwoRC5ib3R0b20pPT09bC5vZmZzZXRIZWlnaHQsaD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxQTyhsLCIwcHgi''@;'; put 'put ''LGAke2h9cHhgKX1jb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGgsZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLm1haW5UYWJs''@;'; put 'put ''ZVNjcm9sbGFibGVFbGVtZW50O2xldCBoPSExO2lmKGQ9PT1hJiZsIT09YS5zY3JvbGxZKXtjb25zdCBmPWEuc2Nyb2xsWTthLnNjcm9sbFRvKExPKGEpLGwpLGg9ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1s''@;'; put 'put ''LGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQg''@;'; put 'put ''aD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09dj9kOnYsaCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYm''@;'; put 'put ''KHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmlu''@;'; put 'put ''ZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBaPWEuZ2V0V29ya3Nw''@;'; put 'put ''YWNlV2lkdGgoKTthLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihaLT1mMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1gJHtafXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRo''@;'; put 'put ''O2xldCBEPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoRD0wKSx2LmhlaWdodD1gJHtEfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPXZLKHRoaXMud290KSxkPXRoaXMud290''@;'; put 'put ''LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLmhlaWdodCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwu''@;'; put 'put ''c3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93''@;'; put 'put ''c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUg''@;'; put 'put ''b2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0''@;'; put 'put ''LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLHY9KGQuY2xvbmVTb3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRhYmxlLmhvbGRlcixNPWguZ2V0U2V0dGluZygiY29sdW1uSGVh''@;'; put 'put ''ZGVycyIpLFo9MD09PWguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikmJk0ubGVuZ3RoPjAmJiFwbyh2LnBhcmVudE5vZGUsImlubmVyQm9yZGVyVG9wIik/MTowO2xldCByZT10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksY2U9MDtpZihhJiZ0aGlzLndvdC53dFRhYmxlLmdldFJvd0hl''@;'; put 'put ''aWdodChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkmJihhPSExKSxhJiZ2Lm9mZnNldEhlaWdodCE9PXYuY2xpZW50SGVpZ2h0JiYoY2U9ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCBiZT1oLmdldFNldHRpbmcoImZpeGVkUm93''@;'; put 'put ''c0JvdHRvbSIpLEVlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmUrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxyZS09ZC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCktdGhpcy5zdW1DZWxsU2l6ZXMoRWUtYmUsRWUpLHJlKz0xLHJlKz1afWVsc2UgcmUrPXRoaXMuc3VtQ2Vs''@;'; put 'put ''bFNpemVzKGguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIHJlKz1jZSxCMmUodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT1yZS1aJiZaPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkoWiksdGhpcy5zZXRTY3JvbGxQ''@;'; put 'put ''b3NpdGlvbihyZSl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVy''@;'; put 'put ''biBPTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZs''@;'; put 'put ''b3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7ZD1NYXRoLm1heCh0aGlzLmdldFNj''@;'; put 'put ''cm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7''@;'; put 'put ''d3RTZXR0aW5nczpkfT10aGlzLGg9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxmPWQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj0iaG9yaXpvbnRhbCI9PT1kLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2Y/bG8oaCwiZW1wdHlDb2x1bW5zIik6VGkoaCwi''@;'; put 'put ''ZW1wdHlDb2x1bW5zIik7bGV0IE09ITE7aWYoIWEmJiF2KXtjb25zdCBEPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj10aGlzLmNhY2hlZEZpeGVkUm93c1RvcCE9PUQscmU9ZC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7aWYoKFp8fDA9PT1EKSYmcmUubGVuZ3RoPjApe2Nv''@;'; put 'put ''bnN0IGNlPXBvKGgsImlubmVyQm9yZGVyVG9wIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09ZC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8oVGkoaCwiaW5uZXJCb3JkZXJUb3AiKSxNPSFjZSk6KGxvKGgsImlubmVyQm9yZGVy''@;'; put 'put ''VG9wIiksTT1jZSl9fXJldHVybiBNfX1jb25zdCAkZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtyZXR1cm4gMD09PWM/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLWN9LGdldEZpcnN0VmlzaWJs''@;'; put 'put ''ZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQo''@;'; put 'put ''KT8tMTp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0s''@;'; put 'put ''Z2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRS''@;'; put 'put ''ZW5kZXJlZFJvd3NDb3VudCgpfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQ6KCk9PjB9O1RwKCRmZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NCb3R0b20iLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgS2ZlPSRmZTtjbGFzcyBiSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkLGgpe3N1cGVyKGwsYSxkLGgsSXApfX1UbChiSyxLZmUpLFRsKGJLLGRLKTtjb25zdCBxUWU9Yks7Y2xhc3MgZWV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLElwLGQsaCksZnVuY3Rpb24gWFFlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKUWUoYyl7''@;'; put 'put ''dmFyIGw9ZnVuY3Rpb24gUVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzQm90dG9tIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoImZpeGVkUm93c0JvdHRvbSIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBxUWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2Nv''@;'; put 'put ''bnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdD''@;'; put 'put ''b250YWluZXIhPT1sfHxoJiYidmVydGljYWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1gJHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJv''@;'; put 'put ''cmRlcnNQb3NpdGlvbihkKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxl''@;'; put 'put ''LmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1mMChkKSksaC5zdHlsZS5i''@;'; put 'put ''b3R0b209YCR7Zn1weGB9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3Jv''@;'; put 'put ''bGxUbyhMTyhhKSx0b3ApLGg9ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xs''@;'; put 'put ''SG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3R7d3RUYWJsZTpkLHN0eWxlc0hhbmRsZXI6aH09dGhpcy53b3QsZj1oLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgdj1sLE09MDtmb3IoO3Y8YTspe2NvbnN0IEQ9ZC5nZXRSb3dIZWlnaHQodik7TSs9dm9pZCAwPT09RD9m''@;'; put 'put ''OkQsdis9MX1yZXR1cm4gTX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVt''@;'; put 'put ''ZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0''@;'; put 'put ''dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBaPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTthLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihaLT1mMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5z''@;'; put 'put ''Y3JvbGxXaWR0aCksdi53aWR0aD1gJHtafXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBEPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoRD0wKSx2LmhlaWdodD1gJHtE''@;'; put 'put ''fXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxs''@;'; put 'put ''LnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0fWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3Rh''@;'; put 'put ''cnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxj''@;'; put 'put ''dWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6Imxl''@;'; put 'put ''ZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7bGV0IGQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO2NvbnN0IGY9KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRlcjtsZXQgdj0wO2EmJmYub2Zm''@;'; put 'put ''c2V0SGVpZ2h0IT09Zi5jbGllbnRIZWlnaHQmJih2PWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oZCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLGQtPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSxkKz0xKTpkKz10aGlzLnN1bUNlbGxTaXpl''@;'; put 'put ''cyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbCksZCs9dix0aGlzLnNldFNjcm9sbFBvc2l0aW9uKGQpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJv''@;'; put 'put ''b3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gT08odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290''@;'; put 'put ''V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IGg9dGhpcy53b3Qud3RUYWJsZS5nZXRU''@;'; put 'put ''b3RhbEhlaWdodCgpLHY9aC10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxNPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7ZD1NYXRoLm1heCh0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbigpLU0raCwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxkPXRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tIT09YSxoPXRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7bGV0IGY9ITE7aWYoKGR8fDA9PT1hKSYmaC5sZW5ndGg+MCl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLE09cG8odiwiaW5uZXJCb3JkZXJCb3R0b20iKTt0aGlzLmNhY2hlZEZpeGVkUm93''@;'; put 'put ''c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbHx8MD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8oVGkodiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPSFNKToobG8odiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPU0p''@;'; put 'put ''fXJldHVybiBmfX1jb25zdCBxZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5z''@;'; put 'put ''dGFydFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkUm93KCl7''@;'; put 'put ''Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFBhcnRp''@;'; put 'put ''YWxseVZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dzUmVuZGVyZWR9LGdl''@;'; put 'put ''dFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1Zpc2libGV9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVhZGVycy5sZW5ndGh9fTtUcChxZmUsIk1JWElOX05BTUUiLCJj''@;'; put 'put ''YWxjdWxhdGVkUm93cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBYZmU9cWZlLEpmZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpPy0xOjB9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgp''@;'; put 'put ''LTF9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJu''@;'; put 'put ''IE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSl9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgp''@;'; put 'put ''fSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07VHAoSmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Q29sdW1uc1N0YXJ0Iix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHlLPUpmZTtjbGFzcyBfSyBl''@;'; put 'put ''eHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsSzcpfX1UbChfSyxYZmUpLFRsKF9LLHlLKTtjb25zdCByZXQ9X0s7Y2xhc3MgaWV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLEs3LGQsaCl9Y3JlYXRlVGFibGUoKXtmb3IodmFy''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHJldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290O2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCFsLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21C''@;'; put 'put ''aW5kaW5ncyxkPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZj0wO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxoJiYiaG9yaXpvbnRhbCI9PT1oPyhmPXRoaXMuZ2V0U2Ny''@;'; put 'put ''b2xsUG9zaXRpb24oKSxDRShkKSk6KGY9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxQTyhkLGAke2Z9cHhgLCIwcHgiKSk7Y29uc3Qgdj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUo''@;'; put 'put ''KSx2fXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTt0aGlzLmlzUnRsKCkmJihsPS1sKTtjb25zdCBoPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7aWYoaD09PWEmJmwhPT1hLnNjcm9sbFgpe2NvbnN0IGY9''@;'; put 'put ''YS5zY3JvbGxYO2Euc2Nyb2xsVG8obCxfJChhKSksZD1mIT09YS5zY3JvbGxYfWVsc2UgaWYobCE9PWguc2Nyb2xsTGVmdCl7Y29uc3QgZj1oLnNjcm9sbExlZnQ7aC5zY3JvbGxMZWZ0PWwsZD1mIT09aC5zY3JvbGxMZWZ0fXJldHVybiBkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoIm9uU2Nyb2xsVmVydGljYWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2xldCBoPWwsZj0wO2Zvcig7aDxhOylmKz10aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGgp''@;'; put 'put ''fHxkLGgrPTE7cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxl''@;'; put 'put ''bWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwidmVydGljYWwiPT09TSl7bGV0IFo9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKTthLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKFotPWYwKGQpKSxaPU1hdGgubWluKFosbC53dFJvb3RFbGVtZW50''@;'; put 'put ''LnNjcm9sbEhlaWdodCksdi5oZWlnaHQ9YCR7Wn1weGB9ZWxzZSB2LmhlaWdodD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLmhlaWdodD12LmhlaWdodDtjb25zdCBEPXN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7di53aWR0aD1gJHtEfXB4YH1hZGp1c3RSb290Q2hp''@;'; put 'put ''bGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPXZLKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLndpZHRoLDEwKS8yOjA7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxl''@;'; put 'put ''LmhlaWdodD10aGlzLmhpZGVyLnN0eWxlLmhlaWdodCxsLnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LGwuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQobC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLDEwKStkfXB4YH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksYT10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCI7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZVthXT1g''@;'; put 'put ''JHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIGNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZVth''@;'; put 'put ''XT0iMCJ9dGhpcy5pc1J0bCgpP3RoaXMuc3ByZWFkZXIuc3R5bGUubGVmdD0iIjp0aGlzLnNwcmVhZGVyLnN0eWxlLnJpZ2h0PSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe3RoaXMuY2xvbmUud3RUYWJsZS5zcHJl''@;'; put 'put ''YWRlci5zdHlsZS50b3A9Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEp''@;'; put 'put ''e2NvbnN0e3d0U2V0dGluZ3M6ZH09dGhpcyxoPWQuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9ZC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLE09KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRlcixEPTA9''@;'; put 'put ''PT1mJiZoLmxlbmd0aD4wJiYhcG8oTS5wYXJlbnROb2RlLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik/MTowO2xldCBaPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxyZT0wO3JldHVybiBhJiZ0aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGwpPnRoaXMud290Lnd0Vmlld3Bv''@;'; put 'put ''cnQuZ2V0Vmlld3BvcnRXaWR0aCgpJiYoYT0hMSksYSYmTS5vZmZzZXRXaWR0aCE9PU0uY2xpZW50V2lkdGgmJihyZT1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KForPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxaLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdw''@;'; put 'put ''b3J0V2lkdGgoKSxaKz1EKTpaKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxsKSxaKz1yZSxqMmUodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT1aLUQmJkQ+MCYmdGhpcy53b3Qud3RPdmVybGF5cy5l''@;'; put 'put ''eHBhbmRIaWRlckhvcml6b250YWxseUJ5KEQpLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oWil9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtsZXQgYT0wO3JldHVybiF0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IikmJnRoaXMudHJpbW1pbmdDb250YWluZXI9PT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cmJihhPXRoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LmxlZnQpLGF9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gTWF0aC5hYnModyQodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5k''@;'; put 'put ''b3cpKX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7cmV0dXJuIHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxhJiYiaG9yaXpvbnRh''@;'; put 'put ''bCI9PT1hfHwoZD10aGlzLmlzUnRsKCk/TWF0aC5hYnMoTWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxk''@;'; put 'put ''PnRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCkmJihkPTApKSxkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMsZD10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJl''@;'; put 'put ''bnROb2RlLGg9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksZj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iiksdj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09InZlcnRpY2FsIj09PWEuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dj9sbyhkLCJlbXB0eVJvd3Mi''@;'; put 'put ''KTpUaShkLCJlbXB0eVJvd3MiKTtsZXQgRD0hMTtpZighTSlpZihmJiYhaC5sZW5ndGgpVGkoZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtlbHNlIGlmKCFmJiZoLmxlbmd0aCl7Y29uc3QgWj1wbyhkLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7bD8oVGko''@;'; put 'put ''ZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSxEPSFaKToobG8oZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSxEPVopfXJldHVybiBEfX1jbGFzcyB3SyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxk''@;'; put 'put ''LGgscTcpfX1UbCh3SyxWZmUpLFRsKHdLLHlLKTtjb25zdCBhZXQ9d0s7ZnVuY3Rpb24gUWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvZXQoYyl7dmFyIGw9ZnVuY3Rpb24gc2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y31jbGFzcyBjZXQgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCxhLHE3LGQsaCksUWZlKHRoaXMsInRvcE92ZXJsYXkiLHZvaWQgMCksUWZlKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsdm9pZCAwKSx0aGlzLnRvcE92ZXJsYXk9Zix0aGlzLmlubGluZVN0''@;'; put 'put ''YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBhZXQoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0''@;'; put 'put ''U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO3RoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/UE8obCx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVy''@;'; put 'put ''bGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSsicHgiLGAke3RoaXMudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCl9cHhgKTpDRShsKTtsZXQgYT14dSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGQ9c3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4g''@;'; put 'put ''dGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoYT0wKSxsLnN0eWxlLmhlaWdodD1gJHthfXB4YCxsLnN0eWxlLndpZHRoPWAke2R9cHhgLCExfX1jbGFzcyBDSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsQm0pfX1UbChDSyxLZmUpLFRs''@;'; put 'put ''KENLLHlLKTtjb25zdCB1ZXQ9Q0s7Y2xhc3MgZGV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxCbSxkLGgpLHRoaXMuYm90dG9tT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHVldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5IikmJnRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3b3Q6bH09dGhpcztpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIWwud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtj''@;'; put 'put ''b25zdCBhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZihhLnN0eWxlLnRvcD0iIix0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KXtjb25zdCBmPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQo''@;'; put 'put ''KSx2PXRoaXMuYm90dG9tT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7YS5zdHlsZVt0aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2Z9cHhgLGEuc3R5bGUuYm90dG9tPWAke3Z9cHhgfWVsc2UgQ0UoYSksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpO2xldCBkPXh1KHRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgaD1zdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChkPTApLGEuc3R5bGUuaGVpZ2h0PWAke2R9cHhgLGEuc3R5bGUud2lkdGg9YCR7aH1weGAsITF9cmVwb3NpdGlvbk92''@;'; put 'put ''ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtz''@;'; put 'put ''cGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWYwKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH19ZnVuY3Rpb24gYVAoYyxsLGEpeyhmdW5jdGlvbiBoZXQoYyxsKXtpZihsLmhhcyhj''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHdnKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBmZXQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''cGV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBYNyhjLGwsYSl7cmV0dXJuIGMuc2V0KGUzZShjLGwpLGEpLGF9ZnVuY3Rpb24gQ2coYyxsKXtyZXR1cm4gYy5nZXQoZTNlKGMsbCkpfWZ1bmN0aW9uIGUzZShj''@;'; put 'put ''LGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGJfPW5ldyBXZWFrTWFwLG9Q''@;'; put 'put ''PW5ldyBXZWFrTWFwLHlfPW5ldyBXZWFrTWFwLHNQPW5ldyBXZWFrTWFwO2NvbnN0IG1ldD1jbGFzcyBnZXR7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3dnKHRoaXMsIndvdCIsbnVsbCksYVAodGhpcyxiXyxbXSksd2codGhpcywidG9wT3ZlcmxheSIsbnVsbCksd2codGhpcywiYm90dG9t''@;'; put 'put ''T3ZlcmxheSIsbnVsbCksd2codGhpcywiaW5saW5lU3RhcnRPdmVybGF5IixudWxsKSx3Zyh0aGlzLCJ0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLHdnKHRoaXMsImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksd2codGhpcywiYnJvd3NlckxpbmVIZWln''@;'; put 'put ''aHQiLHZvaWQgMCksd2codGhpcywid3RTZXR0aW5ncyIsbnVsbCksYVAodGhpcyxvUCwhMSksYVAodGhpcyx5XywwKSxhUCh0aGlzLHNQLG51bGwpLHdnKHRoaXMsInJlc2l6ZU9ic2VydmVyIixuZXcgUmVzaXplT2JzZXJ2ZXIocmU9PntFRSgoKT0+eyFBcnJheS5pc0FycmF5KHJlKXx8IXJl''@;'; put 'put ''Lmxlbmd0aHx8KFg3KHlfLHRoaXMsQ2coeV8sdGhpcykrMSksMTAwPT09Q2coeV8sdGhpcykmJihpbCgiVGhlIFJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIHdhcyBmaXJlZCB0b28gbWFueSB0aW1lcyBpbiBkaXJlY3Qgc3VjY2Vzc2lvbi5cblRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbmZpbml0''@;'; put 'put ''ZSBsb29wIGNhdXNlZCBieSBzZXR0aW5nIGEgZHluYW1pYyBoZWlnaHQvd2lkdGggKGZvciBleGFtcGxlLCB3aXRoIHRoZSBgZHZoYCB1bml0cykgdG8gYSBIYW5kc29udGFibGUgY29udGFpbmVyJ3MgcGFyZW50LiBcblRoZSBvYnNlcnZlciB3aWxsIGJlIGRpc2Nvbm5lY3RlZC4iKSx0aGlz''@;'; put 'put ''LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSksbnVsbCE9PUNnKHNQLHRoaXMpJiZjbGVhclRpbWVvdXQoQ2coc1AsdGhpcykpLFg3KHNQLHRoaXMsc2V0VGltZW91dCgoKT0+e1g3KHlfLHRoaXMsMCl9LDEwMCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkNvbnRhaW5lckVs''@;'; put 'put ''ZW1lbnRSZXNpemUiKSl9KX0pKSx0aGlzLndvdD1sLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuZG9tQmluZGluZ3M9ZCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT12O2NvbnN0e3Jvb3REb2N1bWVudDpNLHJvb3RXaW5kb3c6RH09dGhpcy5kb21CaW5kaW5nczt0aGlzLmluc3Rh''@;'; put 'put ''bmNlPXRoaXMud290LHRoaXMuZXZlbnRNYW5hZ2VyPWYsdGhpcy5zY3JvbGxiYXJTaXplPWYwKE0pO2NvbnN0IFo9ImhpZGRlbiI9PT1ELmdldENvbXB1dGVkU3R5bGUodi53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik7dGhpcy5zY3JvbGxh''@;'; put 'put ''YmxlRWxlbWVudD1aP3YuaG9sZGVyOnlFKHYuVEFCTEUpLHRoaXMuaW5pdE92ZXJsYXlzKCksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5rZXlQcmVzc2VkPSExLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZT17d2lkdGg6bnVsbCxoZWlnaHQ6bnVsbH0sdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0''@;'; put 'put ''aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITEsdGhpcy5pbml0QnJvd3NlckxpbmVIZWlnaHQoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksdGhpcy5sYXN0U2Nyb2xsWD1ELnNjcm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1ELnNjcm9sbFl9Z2V0T3ZlcmxheXMoKXtsZXQgbD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGE9Wy4uLkNnKGJfLHRoaXMpXTtyZXR1cm4gbCYmYS5wdXNoKHRoaXMud3RUYWJsZSksYX1pbml0QnJvd3NlckxpbmVIZWlnaHQoKXtjb25zdHtyb290V2luZG93Omwscm9vdERvY3VtZW50OmF9PXRo''@;'; put 'put ''aXMuZG9tQmluZGluZ3MsZD1sLmdldENvbXB1dGVkU3R5bGUoYS5ib2R5KSxoPXBhcnNlSW50KGQubGluZUhlaWdodCwxMCksZj0xLjIqcGFyc2VJbnQoZC5mb250U2l6ZSwxMCk7dGhpcy5icm93c2VyTGluZUhlaWdodD1ofHxmfWluaXRPdmVybGF5cygpe2NvbnN0IGw9W3RoaXMud290LHRo''@;'; put 'put ''aXMuZmFjYWRlR2V0dGVyLHRoaXMud3RTZXR0aW5ncyx0aGlzLmRvbUJpbmRpbmdzXTt0aGlzLnRvcE92ZXJsYXk9bmV3ICRRZSguLi5sKSx0aGlzLmJvdHRvbU92ZXJsYXk9bmV3IGVldCguLi5sKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT1uZXcgaWV0KC4uLmwpLHRoaXMudG9wSW5saW5l''@;'; put 'put ''U3RhcnRDb3JuZXJPdmVybGF5PW5ldyBjZXQoLi4ubCx0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBkZXQoLi4ubCx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkp''@;'; put 'put ''LFg3KGJfLHRoaXMsW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldKX1iZWZvcmVEcmF3KCl7WDcob1AsdGhp''@;'; put 'put ''cyxDZyhiXyx0aGlzKS5yZWR1Y2UoKGwsYSk9PmEuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl8fGwsITEpKSxDZyhiXyx0aGlzKS5mb3JFYWNoKGw9PmwudXBkYXRlU3RhdGVPZlJlbmRlcmluZygiYmVmb3JlIikpfWFmdGVyRHJhdygpe3RoaXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKSxD''@;'; put 'put ''ZyhiXyx0aGlzKS5mb3JFYWNoKGw9Pntjb25zdCBhPWwuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7bC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJhZnRlciIpLGEmJiFsLm5lZWRGdWxsUmVuZGVyJiZsLnJlc2V0KCl9KX1yZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0''@;'; put 'put ''aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcmJnRoaXMu''@;'; put 'put ''dG9wT3ZlcmxheS5vblNjcm9sbCgpLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExfX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyx7bWFpblRhYmxlU2Nyb2xs''@;'; put 'put ''YWJsZUVsZW1lbnQ6ZH09dGhpcy50b3BPdmVybGF5LHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpofT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXlkb3duIixjZT0+dGhpcy5vbktleURv''@;'; put 'put ''d24oY2UpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsInZpc2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSks''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJzY3JvbGwiLGNlPT50aGlzLm9uVGFibGVTY3JvbGwoY2UpLHtwYXNzaXZlOiEwfSksZCE9PWgmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwic2Nyb2xsIixjZT0+dGhpcy5vblRhYmxlU2Nyb2xsKGNl''@;'; put 'put ''KSx7cGFzc2l2ZTohMH0pO2NvbnN0IGY9YS5kZXZpY2VQaXhlbFJhdGlvJiZhLmRldmljZVBpeGVsUmF0aW8+MSx2PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1hLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRXaGVlbCIpLEQ9e3Bhc3NpdmU6dn07bGV0IHJlOyhNfHxm''@;'; put 'put ''fHwhTCQoKSkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsIndoZWVsIixjZT0+dGhpcy5vbkNsb25lV2hlZWwoY2UsTSksRCksW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2goY2U9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGNlLmNsb25lLnd0VGFibGUuaG9sZGVyLCJ3aGVlbCIsYmU9PnRoaXMu''@;'; put 'put ''b25DbG9uZVdoZWVsKGJlLE0pLEQpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJyZXNpemUiLCgpPT57RUUoKCk9PntjbGVhclRpbWVvdXQocmUpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbldpbmRvd1Jlc2l6ZSIpLHJlPXNldFRpbWVvdXQoKCk9PntY''@;'; put 'put ''Nyh5Xyx0aGlzLDApfSwyMDApfSl9KSx2fHx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50RWxlbWVudCl9b25UYWJsZVNjcm9sbChsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxkPXRoaXMuaW5saW5lU3Rh''@;'; put 'put ''cnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGg9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9bC50YXJnZXQ7dGhpcy5rZXlQcmVzc2VkJiYoaCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoaCl8fGQhPT1hJiZmIT09YSYmIWwu''@;'; put 'put ''dGFyZ2V0LmNvbnRhaW5zKGQpKXx8dGhpcy5zeW5jU2Nyb2xsUG9zaXRpb25zKGwpfW9uQ2xvbmVXaGVlbChsLGEpe2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50''@;'; put 'put ''b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHY9bC50YXJnZXQsTT1mIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGYpLEQ9aCE9PWQmJnYhPT1kJiYhdi5jb250YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQmJihNfHxEKXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQp''@;'; put 'put ''cmV0dXJuO2NvbnN0IFo9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZaKSYmbC5wcmV2ZW50RGVmYXVsdCgpfW9uS2V5RG93bihsKXt0aGlzLmtleVByZXNzZWQ9dV8obC5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19S''@;'; put 'put ''SUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5rZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKXtsZXQgYT1pc05hTihsLmRlbHRhWSk/LTEqbC53aGVlbERlbHRhWTpsLmRlbHRhWSxkPWlzTmFOKGwuZGVsdGFYKT8tMSpsLndoZWVs''@;'; put 'put ''RGVsdGFYOmwuZGVsdGFYOzE9PT1sLmRlbHRhTW9kZSYmKGQrPWQqdGhpcy5icm93c2VyTGluZUhlaWdodCxhKz1hKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQpO2NvbnN0IGg9dGhpcy5zY3JvbGxWZXJ0aWNhbGx5KGEpLGY9dGhpcy5zY3JvbGxIb3Jpem9udGFsbHkoZCk7cmV0dXJuIGh8fGZ9''@;'; put 'put ''c2Nyb2xsVmVydGljYWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3B9c2Nyb2xsSG9yaXpvbnRhbGx5KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQrPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdH1zeW5jU2Nyb2xsUG9zaXRpb25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI7bGV0IGQ9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3Jv''@;'; put 'put ''bGxUb3A7aWYodGhpcy53b3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoZD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFgpLHRoaXMud290Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJihoPXRoaXMuc2Ny''@;'; put 'put ''b2xsYWJsZUVsZW1lbnQuc2Nyb2xsWSksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFghPT1kLHRoaXMudmVydGljYWxTY3JvbGxpbmc9dGhpcy5sYXN0U2Nyb2xsWSE9PWgsdGhpcy5sYXN0U2Nyb2xsWD1kLHRoaXMubGFzdFNjcm9sbFk9aCx0aGlzLmhvcml6b250''@;'; put 'put ''YWxTY3JvbGxpbmcpe2wuc2Nyb2xsTGVmdD1kO2NvbnN0IGY9dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO2YmJihmLnNjcm9sbExlZnQ9ZCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGEuc2Ny''@;'; put 'put ''b2xsVG9wPWgpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7aWYoIUNnKG9QLHRoaXMpKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx7c2Nyb2xsTGVmdDphLHNjcm9sbFRvcDpkfT1sO3RoaXMudG9wT3Zl''@;'; put 'put ''cmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRo''@;'; put 'put ''aXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPWQpLFg3KG9QLHRoaXMsITEpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVh''@;'; put 'put ''ckV2ZW50cyghMCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5''@;'; put 'put ''LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUp''@;'; put 'put ''LmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6eUUobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRl''@;'; put 'put ''c3Ryb3koKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5k''@;'; put 'put ''ZXN0cm95KCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xl''@;'; put 'put ''dCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVm''@;'; put 'put ''cmVzaChsKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5l''@;'; put 'put ''U3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIs''@;'; put 'put ''YT1sLmNsaWVudFdpZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5o''@;'; put 'put ''ZWlnaHQ9ZCksaH1hZGp1c3RFbGVtZW50c1NpemUoKXtjb25zdHt3dFZpZXdwb3J0Omx9PXRoaXMud290LHt3dFRhYmxlOmF9PXRoaXMse3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1kLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInRvdGFsQ29sdW1ucyIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09bC5nZXRSb3dIZWFkZXJXaWR0aCgpLFo9bC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdikrMSxyZT1NK3RoaXMuaW5saW5l''@;'; put 'put ''U3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLGYpLGJlPWEuaGlkZXIuc3R5bGUscWU9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A+TWF0aC5tYXgoMCxaLWEuaG9sZGVyLmNsaWVudEhlaWdodCkpKCk/MTowLHJ0PSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQuc2Nyb2xsTGVmdD5NYXRoLm1heCgwLHJlLWEuaG9sZGVyLmNsaWVudFdpZHRoKSkoKT8xOjA7YmUud2lkdGg9YCR7cmUrcnR9cHhgLGJlLmhlaWdodD1gJHtaK3FlfXB4YCx0aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXku''@;'; put 'put ''YWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWV4cGFuZEhpZGVyVmVydGljYWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLmhlaWdodCwx''@;'; put 'put ''MCkrbH1weGB9ZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLndpZHRoLDEwKStsfXB4YH1hcHBseVRvRE9NKCl7dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhp''@;'; put 'put ''cy50b3BPdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYXBwbHlUb0RPTSgpKX1nZXRQYXJlbnRPdmVybGF5KGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBk''@;'; put 'put ''PW51bGw7cmV0dXJuIFluKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxoPT57aCYmaC5jbG9uZSYmaC5j''@;'; put 'put ''bG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGwpJiYoZD1oLmNsb25lKX0pLGR9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5UQUJMRTtZbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZD0+e2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lPWwuY2xhc3NOYW1lKX0pfX07ZnVuY3Rpb24gdDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biB2ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gYmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB5ZXR7Y29uc3RydWN0b3IobCl7dDNlKHRoaXMsInNldHRpbmdzIix7fSksdDNlKHRoaXMsImRlZmF1bHRzIixPYmplY3Qu''@;'; put 'put ''ZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLFhvKHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGluZ3NbZF09bFtkXTtlbHNle2lmKHZvaWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJv''@;'; put 'put ''dmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNEYXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxjdXJyZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNs''@;'; put 'put ''YXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRp''@;'; put 'put ''bmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5n''@;'; put 'put ''dGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWluU3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNl''@;'; put 'put ''bGxSZW5kZXJlcjoobCxhLGQpPT57UG0oZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9LHJvd0hlaWdodCgpe30scm93SGVpZ2h0QnlPdmVybGF5TmFtZSgpe30sZGVmYXVsdENvbHVtbldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVy''@;'; put 'put ''T25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDpudWxsLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOm51bGws''@;'; put 'put ''b25DZWxsTW91c2VEb3duOm51bGwsb25DZWxsQ29udGV4dE1lbnU6bnVsbCxvbkNlbGxNb3VzZU92ZXI6bnVsbCxvbkNlbGxNb3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVsbCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2VsbENvcm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRi''@;'; put 'put ''bENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9uRHJhdzpudWxsLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6bnVsbCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9uQmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Omw9Pmws''@;'; put 'put ''b25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6bD0+bCxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uU2Nyb2xsVmVydGljYWxseTpudWxsLG9uQmVmb3JlVG91Y2hTY3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1TY3JvbGw6bnVsbCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51''@;'; put 'put ''bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50Om51bGwsb25Nb2RpZnlHZXRDb29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjpsPT5sLG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmw9Pmwsb25XaW5kb3dS''@;'; put 'put ''ZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6bnVsbCxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlckFsbFJvd3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMSxh''@;'; put 'put ''cmlhVGFnczohMH19dXBkYXRlKGwsYSl7cmV0dXJuIHZvaWQgMD09PWE/WG8obCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3NbbF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90''@;'; put 'put ''aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuc2V0dGluZ3NbbF19fWNsYXNzIFNLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9YV8odGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0''@;'; put 'put ''IGQ9bC5wYXJlbnRFbGVtZW50LGg9X0UobCwiaGVpZ2h0IixhKSxmPV9FKGwsIm92ZXJmbG93IixhKSx2PXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDpNLHNjcm9sbEhlaWdodDpEfT1sO2xldCBaPWwub2Zmc2V0V2lkdGgscmU9bC5vZmZzZXRIZWlnaHQ7aWYoZCYmWyJhdXRvIiwi''@;'; put 'put ''aGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikpe2NvbnN0IGJlPWwuY2xvbmVOb2RlKCExKTtiZS5zdHlsZS5vdmVyZmxvdz0iYXV0byIsYmUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZShiZSxsLm5leHRFbGVtZW50U2li''@;'; put 'put ''bGluZyk6ZC5hcHBlbmRDaGlsZChiZSk7Y29uc3QgRWU9cGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKGJlKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoYmUpLDA9PT1FZSYmKHJlPTApfXJlPU1hdGgubWluKHJlLEQpLHYuaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke3JlfXB4YCxa''@;'; put 'put ''PU1hdGgubWluKFosTSksdi53aWR0aD1gJHtafXB4YCx2Lm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09di5oZWlnaHR8fHJlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPVo+MH10aGlzLmlzVGFibGVWaXNpYmxlPVU3KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1''@;'; put 'put ''bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYmJiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRb''@;'; put 'put ''ZF0pe2NvbnN0IE09bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLEQ9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgWj0wO1o8ZjtaKyspZm9yKGxldCByZT0tMSpNO3JlPEQ7cmUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihyZSk7YS5o''@;'; put 'put ''YXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdPSEwfX19VGwoU0ssWGZlKSxUbChTSyxkSyk7Y29uc3QgX2V0PVNLO2Z1bmN0aW9uIEhFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQ2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh''@;'; put 'put ''YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBNZXR7Y29uc3RydWN0b3IoKXtIRSh0aGlzLCJjb3VudCIsMCksSEUodGhpcywic3RhcnRSb3ciLDApLEhFKHRoaXMsImVuZFJvdyIsMCksSEUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksSEUodGhpcywiaXNWaXNpYmxlSW5U''@;'; put 'put ''cmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsUm93czphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZFJvdz10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gTkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhldChjKXt2YXIg''@;'; put 'put ''bD1mdW5jdGlvbiBFZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfXkoMzkwOTIpLHkoMTQzNjApO2NsYXNzIG4zZXtjb25zdHJ1Y3Rvcigpe05FKHRoaXMsImNvdW50IiwwKSxORSh0aGlzLCJzdGFydFJvdyIsbnVsbCksTkUo''@;'; put 'put ''dGhpcywiZW5kUm93IixudWxsKSxORSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxORSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xs''@;'; put 'put ''T2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Um93PWwpLGQ+PWgmJmQ8PWYmJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZp''@;'; put 'put ''ZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6RCxyb3dIZWlnaHQ6Wn09bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0''@;'; put 'put ''Um93PjA7KXtjb25zdCBjZT1EW3RoaXMuZW5kUm93XStaLURbdGhpcy5zdGFydFJvdy0xXTtpZih0aGlzLnN0YXJ0Um93LT0xLGNlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2li''@;'; put 'put ''bGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLWY8MHx8ZD5ELmF0KC0xKStaKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gcjNlKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiBUZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZXQgZXh0ZW5kcyBuM2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHIzZSh0''@;'; put 'put ''aGlzLCJyb3dTdGFydE9mZnNldCIsMCkscjNlKHRoaXMsInJvd0VuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsUm93czpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRSb3csTT10aGlzLmVuZFJvdztkKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93LU19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0w''@;'; put 'put ''KSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPWZbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19''@;'; put 'put ''ZnVuY3Rpb24gVkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERldChjKXt2YXIgbD1mdW5jdGlvbiBJZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFJldHtjb25zdHJ1Y3Rvcigpe1ZFKHRoaXMsImNvdW50Iiww''@;'; put 'put ''KSxWRSh0aGlzLCJzdGFydFJvdyIsbnVsbCksVkUodGhpcywiZW5kUm93IixudWxsKSxWRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxWRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxj''@;'; put 'put ''dWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmLHJvd0hlaWdodDp2fT1hO2Q+PWgmJmQrdjw9ZiYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sKX1maW5hbGl6ZShsKXt2YXIgYTtj''@;'; put 'put ''b25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkQscm93SGVpZ2h0Olp9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9''@;'; put 'put ''dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3QgYmU9RFt0aGlzLmVuZFJvd10rWi1EW3RoaXMuc3RhcnRSb3ctMV07aWYoYmU8PWgtZiYmKHRoaXMuc3RhcnRSb3ctPTEpLGJlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3dd''@;'; put 'put ''KSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgcmU9ZCtoLWYsY2U9bnVsbD09PXRoaXMuc3RhcnRSb3c/MDpsLmdldFJvd0hlaWdodCh0aGlzLnN0YXJ0Um93KTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShyZTxjZXx8ZD5ELmF0KC0xKSksdjx0aGlzLmVuZFJvdyYmKHRo''@;'; put 'put ''aXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIEJFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMZXQoYyl7dmFyIGw9ZnVuY3Rpb24gT2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBQZXR7Y29uc3RydWN0b3IoKXtCRSh0aGlzLCJjb3VudCIsMCksQkUodGhpcywic3RhcnRDb2x1bW4iLDApLEJFKHRoaXMsImVuZENvbHVtbiIsMCksQkUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksQkUodGhpcywi''@;'; put 'put ''aXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsQ29sdW1uczphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZENvbHVtbj10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gakUoYyxsLGEpe3JldHVybihsPWZ1''@;'; put 'put ''bmN0aW9uIEZldChjKXt2YXIgbD1mdW5jdGlvbiBIZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp''@;'; put 'put ''KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGkzZXtjb25zdHJ1Y3Rvcigpe2pFKHRoaXMsImNvdW50IiwwKSxqRSh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCks''@;'; put 'put ''akUodGhpcywiZW5kQ29sdW1uIixudWxsKSxqRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxqRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRT''@;'; put 'put ''Y3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRDb2x1bW49bCksZD49aCYmZDw9aCsoaD4wP2YrMTpmKSYmbnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bH1maW5hbGl6ZShsKXt2YXIgYTtj''@;'; put 'put ''b25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlosY29sdW1uV2lkdGg6cmV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1N''@;'; put 'put ''LTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgRWU9Wlt0aGlzLmVuZENvbHVtbl0rcmUtWlt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRDb2x1bW4tPTEsRWU+aClicmVha310aGlzLnN0YXJ0UG9zaXRp''@;'; put 'put ''b249bnVsbCE9PShhPVpbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtKHY+MD9oKzE6aCk8LTEqZnx8ZD5aLmF0KC0xKStyZXx8LTEqZC1oPjApLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENv''@;'; put 'put ''bHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBhM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE5ldChjKXt2YXIgbD1mdW5jdGlvbiBWZXQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEJldCBleHRlbmRzIGkzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYTNlKHRoaXMsImNvbHVtblN0YXJ0T2Zmc2V0IiwwKSxhM2UodGhpcywiY29sdW1uRW5kT2Zmc2V0IiwwKX1maW5h''@;'; put 'put ''bGl6ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQsdG90YWxDb2x1bW5zOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydENvbHVtbiYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydENvbHVtbixNPXRo''@;'; put 'put ''aXMuZW5kQ29sdW1uO2QodGhpcyksdGhpcy5jb2x1bW5TdGFydE9mZnNldD12LXRoaXMuc3RhcnRDb2x1bW4sdGhpcy5jb2x1bW5FbmRPZmZzZXQ9dGhpcy5lbmRDb2x1bW4tTX10aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0YXJ0Q29sdW1uPTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxs''@;'; put 'put ''IT09KGE9Zlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsLGg8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1oLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlv''@;'; put 'put ''biB6RShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gamV0KGMpe3ZhciBsPWZ1bmN0aW9uIHpldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVWV0e2NvbnN0cnVjdG9yKCl7ekUodGhpcywiY291bnQiLDApLHpFKHRo''@;'; put 'put ''aXMsInN0YXJ0Q29sdW1uIixudWxsKSx6RSh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLHpFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLHpFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1''@;'; put 'put ''bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zixjb2x1bW5XaWR0aDp2fT1hO2Q+PWgmJmQrdjw9aCsoaD4wP2YrMTpmKSYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWwpfWZpbmFs''@;'; put 'put ''aXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNlOkQsc3RhcnRQb3NpdGlvbnM6Wixjb2x1bW5XaWR0aDpyZX09bDtpZih0aGlz''@;'; put 'put ''LmVuZENvbHVtbj09PU0tMSYmRClmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBCZT1aW3RoaXMuZW5kQ29sdW1uXStyZS1aW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYoQmU8PWgmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxCZT49''@;'; put 'put ''aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPVpbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCBiZT1kK2gtKHY+MD9oKzE6aCksRWU9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDpsLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4p''@;'; put 'put ''O3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGJlPC0xKmZ8fGQ+Wi5hdCgtMSl8fC0xKmQtaD4tMSpFZSksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRo''@;'; put 'put ''aXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIG8zZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWmV0KGMpe3ZhciBsPWZ1bmN0aW9uIFdldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgczNle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe28zZSh0aGlzLCJjYWxjdWxhdGlvblR5cGVzIixbXSksbzNlKHRoaXMsImNhbGN1bGF0aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPWx9X2luaXRpYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFtkLGhdPWE7dGhpcy5j''@;'; put 'put ''YWxjdWxhdGlvblJlc3VsdHMuc2V0KGQsaCksaC5pbml0aWFsaXplKGwpfSl9X3Byb2Nlc3MobCxhKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChkPT57bGV0WyxoXT1kO3JldHVybiBoLnByb2Nlc3MobCxhKX0pfV9maW5hbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9y''@;'; put 'put ''RWFjaChhPT57bGV0WyxkXT1hO3JldHVybiBkLmZpbmFsaXplKGwpfSl9Z2V0UmVzdWx0c0ZvcihsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGwpfX1mdW5jdGlvbiBXMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWWV0KGMpe3ZhciBsPWZ1bmN0aW9uIEdldChjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJGV0IGV4dGVuZHMgczNle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRIZWlnaHQ6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbFJvd3M6ZixkZWZh''@;'; put 'put ''dWx0Um93SGVpZ2h0OnYscm93SGVpZ2h0Rm46TSxvdmVycmlkZUZuOkQsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpafT1sO3N1cGVyKGEpLFcyKHRoaXMsInZpZXdwb3J0SGVpZ2h0IiwwKSxXMih0aGlzLCJzY3JvbGxPZmZzZXQiLDApLFcyKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNl''@;'; put 'put ''dCIsMCksVzIodGhpcywidG90YWxSb3dzIiwwKSxXMih0aGlzLCJyb3dIZWlnaHRGbiIsbnVsbCksVzIodGhpcywicm93SGVpZ2h0IiwwKSxXMih0aGlzLCJvdmVycmlkZUZuIixudWxsKSxXMih0aGlzLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwwKSxXMih0aGlzLCJpbm5lclZpZXdw''@;'; put 'put ''b3J0SGVpZ2h0IiwwKSxXMih0aGlzLCJ0b3RhbENhbGN1bGF0ZWRIZWlnaHQiLDApLFcyKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksVzIodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLmRlZmF1bHRIZWlnaHQ9dix0aGlzLnZpZXdwb3J0SGVpZ2h0PWQsdGhpcy5zY3JvbGxPZmZzZXQ9''@;'; put 'put ''aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxSb3dzPWYsdGhpcy5yb3dIZWlnaHRGbj1NLHRoaXMub3ZlcnJpZGVGbj1ELHRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1aPz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnpl''@;'; put 'put ''cm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdwb3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsUm93cztsKyspaWYodGhpcy5y''@;'; put 'put ''b3dIZWlnaHQ9dGhpcy5nZXRSb3dIZWlnaHQobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxh''@;'; put 'put ''dGVkSGVpZ2h0Pj10aGlzLmlubmVyVmlld3BvcnRIZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5yb3dIZWlnaHRGbihsKTtyZXR1cm4gaXNOYU4oYSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmF9''@;'; put 'put ''fWZ1bmN0aW9uIGEzKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLZXQoYyl7dmFyIGw9ZnVuY3Rpb24gcWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBfXz01MDtjbGFzcyBYZXQgZXh0ZW5kcyBzM2V7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7bGV0e2NhbGN1bGF0aW9uVHlwZXM6YSx2aWV3cG9ydFdpZHRoOmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxDb2x1bW5zOmYsY29sdW1uV2lkdGhGbjp2LG92ZXJyaWRlRm46TSxpbmxpbmVTdGFydE9mZnNldDpEfT1sO3N1cGVyKGEpLGEzKHRoaXMsInZpZXdwb3J0V2lkdGgiLDAp''@;'; put 'put ''LGEzKHRoaXMsInNjcm9sbE9mZnNldCIsMCksYTModGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxhMyh0aGlzLCJ0b3RhbENvbHVtbnMiLDApLGEzKHRoaXMsImNvbHVtbldpZHRoRm4iLG51bGwpLGEzKHRoaXMsImNvbHVtbldpZHRoIiwwKSxhMyh0aGlzLCJvdmVycmlkZUZuIixu''@;'; put 'put ''dWxsKSxhMyh0aGlzLCJpbmxpbmVTdGFydE9mZnNldCIsMCksYTModGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgiLDApLGEzKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksYTModGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLnZpZXdwb3J0V2lkdGg9ZCx0aGlzLnNjcm9sbE9mZnNldD1o''@;'; put 'put ''LHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbENvbHVtbnM9Zix0aGlzLmNvbHVtbldpZHRoRm49dix0aGlzLm92ZXJyaWRlRm49TSx0aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUQsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0''@;'; put 'put ''aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbENvbHVtbnM7bCsrKWlmKHRoaXMuY29sdW1uV2lkdGg9dGhpcy5nZXRDb2x1bW5XaWR0aChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgp''@;'; put 'put ''LHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgrPXRoaXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMp''@;'; put 'put ''fWdldENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKT9fXzphfX1jb25zdCBRZXQ9Y2xhc3MgSmV0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5j''@;'; put 'put ''ZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGll''@;'; put 'put ''bnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpP25ldyBNZXQ6bmV3IGtldF0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgUmV0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgbjNlXV0pLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKT9uZXcgUGV0Om5ldyBCZXRdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IFVldF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IGkzZV1dKSx0aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5jbGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2NvbnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJs''@;'; put 'put ''YXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgZD0wO3JldHVybiBkPWE9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDp4dShhKT4wJiZhLmNsaWVudEhlaWdodD4wP2EuY2xpZW50SGVp''@;'; put 'put ''Z2h0OjEvMCxkfWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0''@;'; put 'put ''e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaDtpZihkPT09YSl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxD''@;'; put 'put ''b2x1bW5zIik7aD10aGlzLnd0VGFibGUuaG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGYpPmgmJihoPWwuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1lbHNlIGg9ZC5jbGllbnRXaWR0aDtyZXR1cm4gaH1nZXRW''@;'; put 'put ''aWV3cG9ydFdpZHRoKCl7Y29uc3QgbD10aGlzLmdldFdvcmtzcGFjZVdpZHRoKCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gYT4wP2wtYTpsfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxh''@;'; put 'put ''YmxlQnlXaW5kb3coKSl7Y29uc3QgZj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsSGVpZ2h0PmYuY2xpZW50SGVpZ2h0fWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0SGVpZ2h0O3JldHVy''@;'; put 'put ''biBsLmNsaWVudEhlaWdodDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''O3JldHVybiBmLnNjcm9sbFdpZHRoPmYuY2xpZW50V2lkdGh9Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRXaWR0aDtyZXR1cm4gbC5jbGllbnRXaWR0aDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlX''@;'; put 'put ''aW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5l''@;'; put 'put ''U3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldFdvcmtzcGFjZU9m''@;'; put 'put ''ZnNldCgpe3JldHVybiBVMCh0aGlzLnd0VGFibGUuaG9sZGVyKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg/aXNOYU4odGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQpJiYodGhpcy5jb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHQ9eHUodGhpcy53dFRhYmxlLlRIRUFEKSk6dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9MCx0aGlzLmNvbHVtbkhlYWRlckhlaWdodH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0''@;'; put 'put ''aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz1zdShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lk''@;'; put 'put ''dGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFkZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hl''@;'; put 'put ''YWRlcldpZHRofWNyZWF0ZVJvd3NDYWxjdWxhdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFi''@;'; put 'put ''bGU6ZH09dGhpcztsZXQgZix2LGg9dGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOO2xldCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IEQ9YS5n''@;'; put 'put ''ZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxaPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikscmU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gRCYmTT49MCYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsRCksTSs9dixo''@;'; put 'put ''LT12KSxaJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuc3VtQ2VsbFNpemVzKHJlLVoscmUpLGgtPXYpLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0''@;'; put 'put ''PzA6ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyAkZXQoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAoY2U9PltjZSx0aGlzLnJvd3NDYWxjdWxhdG9yVHlwZXMuZ2V0KGNlKSgpXSksdmlld3BvcnRIZWlnaHQ6aCxzY3JvbGxPZmZzZXQ6TSx0b3RhbFJvd3M6YS5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0b3RhbFJvd3MiKSxkZWZhdWx0Um93SGVpZ2h0OnRoaXMuaW5zdGFuY2Uuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkscm93SGVpZ2h0Rm46Y2U9PmQuZ2V0Um93SGVpZ2h0KGNlKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3Vs''@;'; put 'put ''YXRvck92ZXJyaWRlIiksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRp''@;'; put 'put ''YWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxp''@;'; put 'put ''bmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3Qgdj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodiYmZj49MCl7Y29uc3QgTT10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygw''@;'; put 'put ''LHYpO2YrPU0saC09TX1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0aCYmKGgtPWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksbmV3IFhldCh7Y2FsY3VsYXRpb25UeXBlczpsLm1hcChNPT5bTSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9y''@;'; put 'put ''VHlwZXMuZ2V0KE0pKCldKSx2aWV3cG9ydFdpZHRoOmgsc2Nyb2xsT2Zmc2V0OmYsdG90YWxDb2x1bW5zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksY29sdW1uV2lkdGhGbjpNPT5kLmdldENvbHVtbldpZHRoKE0pLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRD''@;'; put 'put ''b2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiKSxpbmxpbmVTdGFydE9mZnNldDp0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXR9KX1jcmVhdGVDYWxjdWxhdG9ycygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1''@;'; put 'put ''bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigpLGg9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpO2lmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKSl7Y29uc3QgZj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5''@;'; put 'put ''VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGYpfWlmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKSl7Y29uc3QgZj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZp''@;'; put 'put ''c2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGYpfXJldHVybiBsfHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIiksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIikpLHRoaXMucm93c1Zp''@;'; put 'put ''c2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInBh''@;'; put 'put ''cnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSxsfWNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe2NvbnN0IGw9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcihbImZ1bGx5Vmlz''@;'; put 'put ''aWJsZSIsInBhcnRpYWxseVZpc2libGUiXSksYT10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKTt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1u''@;'; put 'put ''c1Zpc2libGVDYWxjdWxhdG9yPWEuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9YS5n''@;'; put 'put ''ZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Um93OmEsZW5kUm93OmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1k''@;'; put 'put ''KXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKXJldHVybiEwO2E9dGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3csZD10aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9Y29uc3R7c3RhcnRSb3c6aCxlbmRSb3c6Zixy''@;'; put 'put ''b3dTdGFydE9mZnNldDp2LHJvd0VuZE9mZnNldDpNfT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEsWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQiKTty''@;'; put 'put ''ZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihaKSYmWj4wPyhhPU1hdGgubWF4KDAsYS1NYXRoLm1pbih2LFopKSxkPU1hdGgubWluKEQsZCtNYXRoLm1pbihNLFopKSk6ImF1dG8iPT09WiYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2VpbCh2LzIpKSxkPU1hdGgubWluKEQsZCtNYXRoLmNlaWwoTS8y''@;'; put 'put ''KSkpLCEoYTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9PT1mJiZkPEQpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydENvbHVtbjphLGVuZENvbHVtbjpkfT1sO2lm''@;'; put 'put ''KG51bGw9PT1hJiZudWxsPT09ZCl7aWYoIWwuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcilyZXR1cm4hMDthPXRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1uLGQ9dGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29s''@;'; put 'put ''dW1ufWNvbnN0e3N0YXJ0Q29sdW1uOmgsZW5kQ29sdW1uOmYsY29sdW1uU3RhcnRPZmZzZXQ6dixjb2x1bW5FbmRPZmZzZXQ6TX09dGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcixEPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xLFo9dGhpcy53dFNldHRp''@;'; put 'put ''bmdzLmdldFNldHRpbmcoInZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoWikmJlo+MD8oYT1NYXRoLm1heCgwLGEtTWF0aC5taW4odixaKSksZD1NYXRoLm1pbihELGQrTWF0aC5taW4oTSxaKSkpOiJhdXRvIj09PVomJihhPU1hdGgu''@;'; put 'put ''bWF4KDAsYS1NYXRoLmNlaWwodi8yKSksZD1NYXRoLm1pbihELGQrTWF0aC5jZWlsKE0vMikpKSwhKGE8aHx8YT09PWgmJmE+MHx8ZD5mfHxkPT09ZiYmZDxEKX1yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXtYbyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNN''@;'; put 'put ''YXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9fTtmdW5jdGlvbiBsM2UoYyxsLGEpe2MzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gYzNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBaYyhjLGwpe3JldHVybiBjLmdldChVRShjLGwpKX1mdW5jdGlvbiB1M2UoYyxsLGEpe3JldHVybiBjLnNldChVRShjLGwpLGEpLGF9ZnVuY3Rpb24gVUUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXkoOTM5MDkpO3ZhciBvMz1uZXcgV2Vha01hcCx2MT1uZXcgV2Vha01hcCxsUD1uZXcgV2Vha1NldDtjbGFzcyB0''@;'; put 'put ''dHR7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gZXR0KGMsbCl7YzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGxQKSxsM2UodGhpcyxvMyx2b2lkIDApLGwzZSh0aGlzLHYxLHZvaWQgMCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gdTNlKHYxLHRoaXMsbCksdGhpc31zZXRBY3RpdmVTZWxl''@;'; put 'put ''Y3Rpb24obCl7cmV0dXJuIHUzZShvMyx0aGlzLGwpLHRoaXN9c2Nhbigpe2NvbnN0IGw9WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxhPW5ldyBTZXQ7cmV0dXJuImFjdGl2ZS1oZWFkZXIiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQp''@;'; put 'put ''KSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpKToiYXJlYSI9PT1sP3RoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJmb2N1cyI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRl''@;'; put 'put ''cnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJmaWxsIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2Nh''@;'; put 'put ''blJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSkpOiJyb3ciPT09bD8odGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImNvbHVtbiI9PT1sJiYodGhpcy5zY2FuQ29sdW1uc0luSGVhZGVy''@;'; put 'put ''c1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Db2x1bW5zSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSksYX1zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxoLGZdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyh2MSx0aGlzKSxNPXYuZ2V0''@;'; put 'put ''UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxEPXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7bGV0IFo9MDtmb3IobGV0IHJlPS12LmdldFJvd0hlYWRlcnNDb3VudCgpO3JlPE07cmUrKyl7Y29uc3QgY2U9di5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShyZSk7aWYoIShjZTxkfHxjZT5m''@;'; put 'put ''KSl7Zm9yKGxldCBiZT0tRDtiZTwwO2JlKyspe2lmKGJlPGF8fGJlPmgpY29udGludWU7Y29uc3QgRWU9YmUrRDtsZXQgQmU9di5nZXRDb2x1bW5IZWFkZXIoY2UsRWUpO2NvbnN0IHFlPVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixj''@;'; put 'put ''ZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhvMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGNvbHVtbkN1cnNvcjpaLHNlbGVjdGlvbldpZHRoOmYtZCsxfSk7bnVsbCE9PXFlJiYocWUhPT1jZSYmKEJlPXYuZ2V0Q29sdW1uSGVhZGVyKHFlLEVlKSksbChCZSkpfVorPTF9fX1zY2FuUm93''@;'; put 'put ''c0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxoLGZdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyh2MSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxEPXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7bGV0IFo9MDtmb3IobGV0IHJlPS12LmdldENvbHVt''@;'; put 'put ''bkhlYWRlcnNDb3VudCgpO3JlPE07cmUrKyl7Y29uc3QgY2U9di5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShyZSk7aWYoIShjZTxhfHxjZT5oKSl7Zm9yKGxldCBiZT0tRDtiZTwwO2JlKyspe2lmKGJlPGR8fGJlPmYpY29udGludWU7Y29uc3QgRWU9YmUrRDtsZXQgQmU9di5nZXRSb3dI''@;'; put 'put ''ZWFkZXIoY2UsRWUpO2NvbnN0IHFlPVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixjZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhvMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLHJvd0N1cnNvcjpaLHNlbGVjdGlvbkhlaWdodDpoLWEr''@;'; put 'put ''MX0pO251bGwhPT1xZSYmKHFlIT09Y2UmJihCZT12LmdldFJvd0hlYWRlcihxZSxFZSkpLGwoQmUpKX1aKz0xfX19c2NhbkNlbGxzUmFuZ2UobCl7Y29uc3R7d3RUYWJsZTphfT1aYyh2MSx0aGlzKTtVRShsUCx0aGlzLG50dCkuY2FsbCh0aGlzLChkLGgpPT57Y29uc3QgZj1hLmdldENlbGwo''@;'; put 'put ''WmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSx2PVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJEcmF3U2VsZWN0aW9uIixkLGgsWmMobzMsdGhpcykuc2V0dGluZ3MubGF5ZXJMZXZlbCk7InN0cmluZyI9PXR5cGVvZiB2JiZUaShmLHYpLGwoZil9KX1zY2FuUm93c0lu''@;'; put 'put ''Q2VsbHNSYW5nZShsKXtjb25zdFthLCxkXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09WmModjEsdGhpcyk7VUUobFAsdGhpcyxkM2UpLmNhbGwodGhpcywoZix2KT0+e2lmKGY+PWEmJmY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoZix2KSk7bChNKX19KX1zY2FuQ29sdW1uc0luQ2VsbHNSYW5nZShsKXtjb25zdFssYSwsZF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmh9PVpjKHYxLHRoaXMpO1VFKGxQLHRoaXMsZDNlKS5jYWxsKHRoaXMsKGYsdik9PntpZih2Pj1hJiZ2PD1kKXtjb25zdCBN''@;'; put 'put ''PWguZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGYsdikpO2woTSl9fSl9fWZ1bmN0aW9uIG50dChjKXtsZXRbbCxhLGQsaF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpO2lmKGw8MCYmZDwwfHxhPDAmJmg8MClyZXR1cm47Y29uc3R7d3RUYWJsZTpmfT1aYyh2MSx0aGlz''@;'; put 'put ''KSx2PWwhPT1kfHxhIT09aDtpZihhPU1hdGgubWF4KGEsMCksaD1NYXRoLm1heChoLDApLGw9TWF0aC5tYXgobCwwKSxkPU1hdGgubWF4KGQsMCksdil7aWYoYT1NYXRoLm1heChhLGYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPU1hdGgubWluKGgsZi5nZXRMYXN0UmVuZGVyZWRDb2x1''@;'; put 'put ''bW4oKSksbD1NYXRoLm1heChsLGYuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKSxkPU1hdGgubWluKGQsZi5nZXRMYXN0UmVuZGVyZWRSb3coKSksaDxhfHxkPGwpcmV0dXJufWVsc2UgaWYoIUVwKGYuZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSkpKSlyZXR1cm47Zm9y''@;'; put 'put ''KGxldCBNPWw7TTw9ZDtNKz0xKWZvcihsZXQgRD1hO0Q8PWg7RCs9MSljKE0sRCl9ZnVuY3Rpb24gZDNlKGMpe2NvbnN0e3d0VGFibGU6bH09WmModjEsdGhpcyksYT1sLmdldFJlbmRlcmVkUm93c0NvdW50KCksZD1sLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBoPTA7aDxh''@;'; put 'put ''O2grPTEpe2NvbnN0IGY9bC5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTtmb3IobGV0IHY9MDt2PGQ7dis9MSljKGYsbC5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZSh2KSl9fWNvbnN0IGgzZT1jbGFzcyBydHR7Y29uc3RydWN0b3IobCxhKXthJiYodGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5jZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0''@;'; put 'put ''eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT12Syh0aGlzLmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQodGhp''@;'; put 'put ''cy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIpLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9j''@;'; put 'put ''dW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAs''@;'; put 'put ''ZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VFbnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3Vz''@;'; put 'put ''ZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1''@;'; put 'put ''bHQoKSxCMihsKTtjb25zdCBkPXRoaXMsaD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gTShE''@;'; put 'put ''KXsoZnVuY3Rpb24gdihEKXtpZihELmNsaWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fEQuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxELmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxELmNsaWVudFg+TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKEQp''@;'; put 'put ''JiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLE0pLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMud290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Nv''@;'; put 'put ''bnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IE09MDtNPDU7TSsrKXtjb25zdCBEPWRbTV0sWj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIp''@;'; put 'put ''O1ouY2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0uaGlkZSYmKFouY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9Wi5zdHlsZSxoLmJhY2tncm91bmRDb2xvcj10aGlzLnNldHRpbmdzW0Rd''@;'; put 'put ''JiZ0aGlzLnNldHRpbmdzW0RdLmNvbG9yP3RoaXMuc2V0dGluZ3NbRF0uY29sb3I6bC5ib3JkZXIuY29sb3IsaC5oZWlnaHQ9dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW0RdLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAs''@;'; put 'put ''aC53aWR0aD10aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0RdLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbRF0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCx0aGlzLm1haW4uYXBwZW5kQ2hpbGQoWil9dGhpcy50b3A9dGhpcy5tYWluLmNoaWxkTm9kZXNbMF0sdGhpcy5z''@;'; put 'put ''dGFydD10aGlzLm1haW4uY2hpbGROb2Rlc1sxXSx0aGlzLmJvdHRvbT10aGlzLm1haW4uY2hpbGROb2Rlc1syXSx0aGlzLmVuZD10aGlzLm1haW4uY2hpbGROb2Rlc1szXSx0aGlzLnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRoaXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMu''@;'; put 'put ''Ym90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUsdGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj10aGlzLm1haW4uY2hpbGROb2Rlc1s0XSx0aGlzLmNvcm5lci5jbGFzc05hbWUrPSIgY29ybmVyIix0aGlzLmNvcm5lclN0eWxlPXRoaXMuY29ybmVyLnN0eWxlLHRo''@;'; put 'put ''aXMuY29ybmVyU3R5bGUud2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuaGVpZ2h0PWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXI9W2Ake3RoaXMuY29ybmVyRGVmYXVs''@;'; put 'put ''dFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJTdHlsZSx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJDb2xvcl0uam9pbigiICIpLEFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJnRoaXMu''@;'; put 'put ''Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKSx0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6Zn09dGhpcy53b3Q7bGV0IHY9Zi5ib3JkZXJzSG9sZGVyO3Z8fCh2PWEuY3JlYXRlRWxlbWVudCgiZGl2Iiksdi5jbGFzc05hbWU9Imh0Qm9yZGVycyIsZi5ib3JkZXJzSG9sZGVy''@;'; put 'put ''PXYsZi5zcHJlYWRlci5hcHBlbmRDaGlsZCh2KSksdi5hcHBlbmRDaGlsZCh0aGlzLm1haW4pfWNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwsc3R5bGVzSGFuZGxlcjphfT10aGlzLndvdCxkPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1t''@;'; put 'put ''b2JpbGUtaGFuZGxlLXNpemUiKSxoPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1yYWRpdXMiKSxmPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJhY2tncm91bmQtY29sb3IiKSx2PWEuZ2V0Q1NTVmFyaWFibGVWYWx1''@;'; put 'put ''ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci13aWR0aCIpLE09YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLWNvbG9yIik7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJv''@;'; put 'put ''dHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHls''@;'; put 'put ''ZXM9e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRs''@;'; put 'put ''ZXMuYm90dG9tSGl0QXJlYS5zdHlsZX0sWG8oe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwoYmUsRWUpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21I''@;'; put 'put ''aXRBcmVhW0VlXT1iZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFbRWVdPWJlfSksWG8oYS5pc0NsYXNzaWNUaGVtZSgpP3twb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8x''@;'; put 'put ''LjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZGIixib3JkZXI6IjFweCBzb2xpZCAjNDI4NWM4In06e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OmAke2R9cHhgLHdpZHRoOmAke2R9cHhgLCJib3JkZXItcmFkaXVzIjpgJHtofXB4YCxiYWNrZ3JvdW5kOmAke2Z9YCxib3JkZXI6YCR7''@;'; put 'put ''dn1weCBzb2xpZCAke019YH0sKGJlLEVlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW0VlXT1iZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcFtFZV09YmV9KSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhp''@;'; put 'put ''cy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1p''@;'; put 'put ''c1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRBcmVhU2VsZWN0aW9uKCk7cmV0dXJuISghZC5jZWxsUmFuZ2V8fGw9PT1kLmNlbGxSYW5nZS50by5yb3cmJmE9PT1kLmNlbGxSYW5nZS50by5jb2wpfXVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFu''@;'; put 'put ''ZGxlc1Bvc2l0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBEPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLHt0b3A6Wix0b3BIaXRBcmVhOnJlLGJvdHRvbTpjZSxib3R0b21IaXRBcmVhOmJlfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5''@;'; put 'put ''bGVzLEVlPXBhcnNlSW50KFouYm9yZGVyV2lkdGgsMTApLEJlPXBhcnNlSW50KFoud2lkdGgsMTApLHFlPXBhcnNlSW50KHJlLndpZHRoLDEwKSxydD10aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCkscHQ9dGhpcy53b3Qud3RUYWJsZS5nZXRIZWlnaHQoKTtaLnRvcD1gJHtwYXJzZUludChk''@;'; put 'put ''LUJlLTEsMTApfXB4YCxaW0RdPWAke3BhcnNlSW50KGgtQmUtMSwxMCl9cHhgLHJlLnRvcD1gJHtwYXJzZUludChkLXFlLzQqMywxMCl9cHhgLHJlW0RdPWAke3BhcnNlSW50KGgtcWUvNCozLDEwKX1weGA7Y29uc3QgZHQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSxydC1CZS0yKkVlKSxK''@;'; put 'put ''dD1NYXRoLm1pbihwYXJzZUludChoK2YtcWUvNCwxMCkscnQtcWUtMipFZSk7Y2VbRF09YCR7ZHR9cHhgLGJlW0RdPWAke0p0fXB4YDtjb25zdCB2bj1NYXRoLm1pbihwYXJzZUludChkK3YsMTApLHB0LUJlLTIqRWUpLENuPU1hdGgubWluKHBhcnNlSW50KGQrdi1xZS80LDEwKSxwdC1xZS0y''@;'; put 'put ''KkVlKTtjZS50b3A9YCR7dm59cHhgLGJlLnRvcD1gJHtDbn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhaLmRpc3BsYXk9ImJsb2NrIixyZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5n''@;'; put 'put ''ZShsLGEpPyhjZS5kaXNwbGF5PSJub25lIixiZS5kaXNwbGF5PSJub25lIik6KGNlLmRpc3BsYXk9ImJsb2NrIixiZS5kaXNwbGF5PSJibG9jayIpKTooWi5kaXNwbGF5PSJub25lIixjZS5kaXNwbGF5PSJub25lIixyZS5kaXNwbGF5PSJub25lIixiZS5kaXNwbGF5PSJub25lIiksbD09PXRo''@;'; put 'put ''aXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KFouekluZGV4PSI5OTk5IixyZS56SW5kZXg9Ijk5OTkiKTooWi56SW5kZXg9IiIscmUuekluZGV4PSIiKX1h''@;'; put 'put ''cHBlYXIobCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47bGV0W2EsZCxoLGZdPWw7aWYoYTwwJiZoPDB8fGQ8MCYmZjwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTp2LHJvb3REb2N1bWVudDpNLHJvb3RXaW5kb3c6RH09dGhpcy53b3QsWj1hIT09aHx8ZCE9''@;'; put 'put ''PWYscmU9di5nZXRGaXJzdFJlbmRlcmVkUm93KCksY2U9di5nZXRMYXN0UmVuZGVyZWRSb3coKSxiZT12LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSxFZT12LmdldExhc3RSZW5kZXJlZENvbHVtbigpO2lmKGJlPDAmJkVlPDB8fHJlPDAmJmNlPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBl''@;'; put 'put ''YXIoKTtsZXQgQmU7aWYoWil7aWYoZD1NYXRoLm1heChkLGJlKSxmPU1hdGgubWluKGYsRWUpLGE9TWF0aC5tYXgoYSxyZSksaD1NYXRoLm1pbihoLGNlKSxmPGR8fGg8YSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO0JlPXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KGEsZCkpfWVsc2UgaWYoQmU9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSksIUVwKEJlKSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0IHFlPVo/di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoaCxmKSk6QmUscnQ9VTAoQmUpLHB0''@;'; put 'put ''PVo/VTAocWUpOnJ0LGR0PVUwKHYuVEFCTEUpLEp0PXJ0LnRvcCx2bj1ydC5sZWZ0LENuPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCB0bj0wLE1uPTA7aWYoQ24pe2NvbnN0IElyPXN1KHYuVEFCTEUpLCRyPXN1KEJlKTtNbj12biskci1wdC5sZWZ0LHRu''@;'; put 'put ''PUQuaW5uZXJXaWR0aC12bi0kci0oRC5pbm5lcldpZHRoLWR0LmxlZnQtSXIpLTF9ZWxzZSBNbj1wdC5sZWZ0K3N1KHFlKS12bix0bj12bi1kdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGEsaCkpe2NvbnN0ICRyPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIo''@;'; put 'put ''ImNvbHVtbnMiLGQsZixhLGR0KTtsZXQgd2k9bnVsbDskciYmKFt3aSx0bixNbl09JHIpLHdpJiYoQmU9d2kpfWxldCBDcj1KdC1kdC50b3AtMSxHcj1wdC50b3AreHUocWUpLUp0O2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChkLGYpKXtjb25zdCAkcj10aGlzLmdldERpbWVuc2lvbnNG''@;'; put 'put ''cm9tSGVhZGVyKCJyb3dzIixhLGgsZCxkdCk7bGV0IHdpPW51bGw7JHImJihbd2ksQ3IsR3JdPSRyKSx3aSYmKEJlPXdpKX1jb25zdCBtcj1ELmdldENvbXB1dGVkU3R5bGUoQmUpO3BhcnNlSW50KG1yLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoQ3IrPTEsR3I9R3I+MD9Hci0xOjApLHBhcnNl''@;'; put 'put ''SW50KG1yW0NuPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJih0bis9MSxNbj1Nbj4wP01uLTE6MCk7Y29uc3QgR249Q24/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMudG9wU3R5bGVbR25dPWAke3RufXB4YCx0aGlz''@;'; put 'put ''LnRvcFN0eWxlLndpZHRoPWAke01ufXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke0NyfXB4YCx0aGlzLnN0YXJ0U3R5bGVbR25dPWAke3RufXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke0dyfXB4YCx0aGlzLnN0YXJ0U3R5bGUu''@;'; put 'put ''ZGlzcGxheT0iYmxvY2siO2NvbnN0IGFpPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9Q3IrR3ItYWkrInB4Iix0aGlzLmJvdHRvbVN0eWxlW0duXT1gJHt0bn1weGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtNbn1weGAs''@;'; put 'put ''dGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMuZW5kU3R5bGVbR25dPXRuK01uLWFpKyJweCIsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7R3IrMX1weGAsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IF9pPXRo''@;'; put 'put ''aXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGU7X2k9ImZ1bmN0aW9uIj09dHlwZW9mIF9pP19pKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6X2k7Y29uc3QgT249dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixoLGYsITEsInJlbmRlciIpO2xldFt6''@;'; put 'put ''cixKbl09W2gsZl07aWYoT24mJkFycmF5LmlzQXJyYXkoT24pJiYoWywsenIsSm5dPU9uKSxBcCgpfHwhX2l8fHRoaXMuaXNQYXJ0UmFuZ2UoenIsSm4pKXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlzLmNvcm5lclN0eWxlLnRvcD1DcitHcit0aGlzLmNvcm5lckNl''@;'; put 'put ''bnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZVtHbl09dG4rTW4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCsicHgiLHRoaXMuY29ybmVy''@;'; put 'put ''U3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJMZWZ0V2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVy''@;'; put 'put ''Qm90dG9tV2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtsZXQgSXI9YV8odi5UQUJMRSk7Y29uc3Qg''@;'; put 'put ''JHI9SXI9PT1EOyRyJiYoSXI9TS5kb2N1bWVudEVsZW1lbnQpO2NvbnN0IHdpPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLDEwKS0xLGVhPU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMiksZmE9TWF0aC5j''@;'; put 'put ''ZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMik7aWYoZj09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpe2NvbnN0IHZ0PSRyP3FlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ6cWUub2Zmc2V0TGVmdDtsZXQgTnQ9ITEs''@;'; put 'put ''SHQ9MDtDbj8oSHQ9dnQtcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsTnQ9SHQ8MCk6KEh0PXZ0K3N1KHFlKStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixOdD1IdD49QyQoSXIpKSxOdCYmKHRoaXMuY29ybmVyU3R5bGVb''@;'; put 'put ''R25dPWAke01hdGguZmxvb3IodG4rTW4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1lYS13aSl9cHhgLHRoaXMuY29ybmVyU3R5bGVbQ24/ImJvcmRlckxlZnRXaWR0aCI6ImJvcmRlclJpZ2h0V2lkdGgiXT0wKX1pZihoPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxSb3dzIikt''@;'; put 'put ''MSl7Y29uc3QgSHQ9KCRyP3FlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDpxZS5vZmZzZXRUb3ApK3h1KHFlKStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzI+PW9fKElyKSxIbj10aGlzLndvdC5zdHlsZXNIYW5kbGVyLmlzQ2xhc3NpY1RoZW1lKCk7''@;'; put 'put ''aWYoSHQpe2NvbnN0IHRyPU1hdGguZmxvb3IoQ3IrR3IrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1mYS13aSk7SG4/KHRoaXMuY29ybmVyU3R5bGUudG9wPWAke3RyfXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApOnRoaXMuY29ybmVyU3R5bGUudG9wPXRy''@;'; put 'put ''LTErInB4In19dGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJibG9jayJ9QXAoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy51cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbihoLGYsQ3IsdG4sTW4sR3IpfWlzRW50aXJl''@;'; put 'put ''Q29sdW1uU2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0VudGlyZVJvd1NlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxl''@;'; put 'put ''LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9Z2V0RGltZW5zaW9uc0Zyb21IZWFkZXIobCxhLGQsaCxmKXtjb25zdHt3dFRhYmxlOnZ9PXRoaXMud290LE09di53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bGV0''@;'; put 'put ''IEQ9bnVsbCxaPW51bGwscmU9bnVsbCxjZT1udWxsLGJlPW51bGwsRWU9bnVsbCxCZT1udWxsLHFlPW51bGw7c3dpdGNoKGwpe2Nhc2Uicm93cyI6RD1mdW5jdGlvbigpe3JldHVybiB2LmdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSxaPWZ1bmN0aW9uKCl7cmV0dXJuIHh1KC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyl9LHJlPSJodF9fc2VsZWN0aW9uLS1yb3dzIixFZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0sWj1mdW5jdGlvbigpe3JldHVybiBzdSguLi5hcmd1bWVudHMpfSxyZT0iaHRfX3NlbGVj''@;'; put 'put ''dGlvbi0tY29sdW1ucyIsRWU9ImxlZnQifWlmKE0uY2xhc3NMaXN0LmNvbnRhaW5zKHJlKSl7Y29uc3QgcnQ9dGhpcy53b3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtpZihCZT1EKGEscnQtaCkscWU9RChkLHJ0LWgpLCFCZXx8IXFlKXJldHVybiExO2NvbnN0IHB0PVUw''@;'; put 'put ''KEJlKSxkdD1VMChxZSk7cmV0dXJuIEJlJiZxZSYmKGNlPXB0W0VlXS1mW0VlXS0xLGJlPWR0W0VlXStaKHFlKS1wdFtFZV0pLFtCZSxjZSxiZV19cmV0dXJuITF9Y2hhbmdlQm9yZGVyU3R5bGUobCxhKXtjb25zdCBkPXRoaXNbbF0uc3R5bGUsaD1hW2xdOyFofHxoLmhpZGU/VGkodGhpc1ts''@;'; put 'put ''XSwiaGlkZGVuIik6KHBvKHRoaXNbbF0sImhpZGRlbiIpJiZsbyh0aGlzW2xdLCJoaWRkZW4iKSxkLmJhY2tncm91bmRDb2xvcj1oLmNvbG9yLCgidG9wIj09PWx8fCJib3R0b20iPT09bCkmJihkLmhlaWdodD1gJHtoLndpZHRofXB4YCksKCJzdGFydCI9PT1sfHwiZW5kIj09PWwpJiYoZC53''@;'; put 'put ''aWR0aD1gJHtoLndpZHRofXB4YCkpfWNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZTtkLmJhY2tncm91bmRDb2xvcj0iIzAwMCIsZC53aWR0aD0iMXB4IixkLmhlaWdodD0iMXB4In10b2dnbGVIaWRkZW5DbGFzcyhsLGEpe3RoaXMuY2hhbmdlQm9y''@;'; put 'put ''ZGVyVG9EZWZhdWx0U3R5bGUobCksYT9UaSh0aGlzW2xdLCJoaWRkZW4iKTpsbyh0aGlzW2xdLCJoaWRkZW4iKX1kaXNhcHBlYXIoKXt0aGlzLnRvcFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIixBcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiYodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3AuZGlzcGxheT0ibm9u''@;'; put 'put ''ZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYS5kaXNwbGF5PSJub25l''@;'; put 'put ''Iil9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpLHRoaXMubWFpbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubWFpbil9fTtmdW5jdGlvbiB3XyhjLGwsYSl7ZjNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBmM2UoYyxsKXtpZihs''@;'; put 'put ''LmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGFzKGMsbCl7cmV0dXJuIGMuZ2V0KE1LKGMsbCkpfWZ1bmN0aW9uIHAzZShjLGwsYSl7cmV0dXJuIGMuc2V0''@;'; put 'put ''KE1LKGMsbCksYSksYX1mdW5jdGlvbiBNSyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2Jq''@;'; put 'put ''ZWN0Iil9dmFyIGIxPW5ldyBXZWFrTWFwLFZkPW5ldyBXZWFrTWFwLHhLPW5ldyBXZWFrTWFwLFpFPW5ldyBXZWFrTWFwLEVLPW5ldyBXZWFrTWFwLEo3PW5ldyBXZWFrTWFwLGczZT1uZXcgV2Vha1NldDtjbGFzcyBhdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIGl0dChjLGwpe2YzZShj''@;'; put 'put ''LGwpLGwuYWRkKGMpfSkodGhpcyxnM2UpLHdfKHRoaXMsYjEsdm9pZCAwKSx3Xyh0aGlzLFZkLHZvaWQgMCksd18odGhpcyx4SyxuZXcgdHR0KSx3Xyh0aGlzLFpFLG5ldyBXZWFrTWFwKSx3Xyh0aGlzLEVLLG5ldyBXZWFrU2V0KSx3Xyh0aGlzLEo3LG5ldyBNYXApLHAzZShWZCx0aGlzLGwp''@;'; put 'put ''fXNldEFjdGl2ZU92ZXJsYXkobCl7cmV0dXJuIHAzZShiMSx0aGlzLGwpLGFzKHhLLHRoaXMpLnNldEFjdGl2ZU92ZXJsYXkoYXMoYjEsdGhpcykpLGFzKFpFLHRoaXMpLmhhcyhhcyhiMSx0aGlzKSl8fGFzKFpFLHRoaXMpLnNldChhcyhiMSx0aGlzKSxuZXcgU2V0KSx0aGlzfWdldEZvY3Vz''@;'; put 'put ''U2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1hcyhWZCx0aGlzKT9hcyhWZCx0aGlzKS5nZXRGb2N1cygpOm51bGx9Z2V0QXJlYVNlbGVjdGlvbigpe3JldHVybiBudWxsIT09YXMoVmQsdGhpcyk/YXMoVmQsdGhpcykuY3JlYXRlTGF5ZXJlZEFyZWEoKTpudWxsfWdldEJvcmRlckluc3RhbmNl''@;'; put 'put ''KGwpe2lmKCFsLnNldHRpbmdzLmJvcmRlcilyZXR1cm4gbnVsbDtpZihhcyhKNyx0aGlzKS5oYXMobCkpe2NvbnN0IGQ9YXMoSjcsdGhpcykuZ2V0KGwpO2lmKGQuaGFzKGFzKGIxLHRoaXMpKSlyZXR1cm4gZC5nZXQoYXMoYjEsdGhpcykpO2NvbnN0IGg9bmV3IGgzZShhcyhiMSx0aGlzKSxs''@;'; put 'put ''LnNldHRpbmdzKTtyZXR1cm4gZC5zZXQoYXMoYjEsdGhpcyksaCksaH1jb25zdCBhPW5ldyBoM2UoYXMoYjEsdGhpcyksbC5zZXR0aW5ncyk7cmV0dXJuIGFzKEo3LHRoaXMpLnNldChsLG5ldyBNYXAoW1thcyhiMSx0aGlzKSxhXV0pKSxhfWdldEJvcmRlckluc3RhbmNlcyhsKXt2YXIgYSxk''@;'; put 'put ''O3JldHVybiBBcnJheS5mcm9tKG51bGwhPT0oYT1udWxsPT09KGQ9YXMoSjcsdGhpcykuZ2V0KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC52YWx1ZXMoKSkmJnZvaWQgMCE9PWE/YTpbXSl9ZGVzdHJveUJvcmRlcnMobCl7YXMoSjcsdGhpcykuZ2V0KGwpLmZvckVhY2goYT0+YS5kZXN0cm95''@;'; put 'put ''KCkpLGFzKEo3LHRoaXMpLmRlbGV0ZShsKX1yZW5kZXIobCl7aWYobnVsbD09PWFzKFZkLHRoaXMpKXJldHVybjtsJiZNSyhnM2UsdGhpcyxvdHQpLmNhbGwodGhpcyk7Y29uc3QgYT1BcnJheS5mcm9tKGFzKFZkLHRoaXMpKSxkPW5ldyBNYXAsaD1uZXcgTWFwO2ZvcihsZXQgZj0wO2Y8YS5s''@;'; put 'put ''ZW5ndGg7ZisrKXtjb25zdCB2PWFbZl0se2NsYXNzTmFtZTpNLGhlYWRlckF0dHJpYnV0ZXM6RCxjcmVhdGVMYXllcnM6WixzZWxlY3Rpb25UeXBlOnJlfT12LnNldHRpbmdzO2FzKEVLLHRoaXMpLmhhcyh2KXx8KGFzKEVLLHRoaXMpLmFkZCh2KSx2LmFkZExvY2FsSG9vaygiZGVzdHJveSIs''@;'; put 'put ''KCk9PnRoaXMuZGVzdHJveUJvcmRlcnModikpKTtjb25zdCBjZT10aGlzLmdldEJvcmRlckluc3RhbmNlKHYpO2lmKHYuaXNFbXB0eSgpKXtjZT8uZGlzYXBwZWFyKCk7Y29udGludWV9TSYmYXMoeEssdGhpcykuc2V0QWN0aXZlU2VsZWN0aW9uKHYpLnNjYW4oKS5mb3JFYWNoKEJlPT57aWYo''@;'; put 'put ''ZC5oYXMoQmUpKXtjb25zdCBxZT1kLmdldChCZSk7cWUuaGFzKE0pJiYhMD09PVo/cWUuc2V0KE0scWUuZ2V0KE0pKzEpOnFlLnNldChNLDEpfWVsc2UgZC5zZXQoQmUsbmV3IE1hcChbW00sMV1dKSk7RCYmKGguaGFzKEJlKXx8aC5zZXQoQmUsW10pLCJUSCI9PT1CZS5ub2RlTmFtZSYmaC5n''@;'; put 'put ''ZXQoQmUpLnB1c2goLi4uRCkpfSk7Y29uc3QgYmU9di5nZXRDb3JuZXJzKCk7YXMoYjEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVEcmF3Qm9yZGVycyIsYmUscmUpLGNlPy5hcHBlYXIoYmUpfWQuZm9yRWFjaCgoZix2KT0+e3ZhciBNO2NvbnN0IEQ9QXJyYXkuZnJvbShmKS5tYXAoWj0+''@;'; put 'put ''e2xldFtyZSxjZV09WjtyZXR1cm4gMT09PWNlP3JlOltyZSwuLi5BcnJheS5mcm9tKHtsZW5ndGg6Y2UtMX0sKGJlLEVlKT0+YCR7cmV9LSR7RWUrMX1gKV19KS5mbGF0KCk7RC5mb3JFYWNoKFo9PmFzKFpFLHRoaXMpLmdldChhcyhiMSx0aGlzKSkuYWRkKFopKSxUaSh2LEQpLCJURCI9PT12''@;'; put 'put ''Lm5vZGVOYW1lJiZBcnJheS5pc0FycmF5KG51bGw9PT0oTT1hcyhWZCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09TT92b2lkIDA6TS5jZWxsQXR0cmlidXRlcykmJnZvKHYsYXMoVmQsdGhpcykub3B0aW9ucy5jZWxsQXR0cmlidXRlcyl9KSxBcnJheS5mcm9tKGgua2V5cygpKS5mb3JFYWNo''@;'; put 'put ''KGY9Pnt2byhmLFsuLi5oLmdldChmKV0pfSl9fWZ1bmN0aW9uIG90dCgpe2NvbnN0IGM9YXMoWkUsdGhpcykuZ2V0KGFzKGIxLHRoaXMpKSxsPWFzKGIxLHRoaXMpLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpO2lmKEFycmF5LmlzQXJyYXko''@;'; put 'put ''bCkpZm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspYy5hZGQobFthXSk7Yy5mb3JFYWNoKGE9Pnt2YXIgZCxoO2NvbnN0IGY9YXMoYjEsdGhpcykud3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yQWxsKGAuJHthfWApO2xldCB2PVtdO0FycmF5LmlzQXJyYXkobnVsbD09PShkPWFzKFZkLHRo''@;'; put 'put ''aXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNlbGxBdHRyaWJ1dGVzKSYmKHY9YXMoVmQsdGhpcykub3B0aW9ucy5jZWxsQXR0cmlidXRlcy5tYXAoTT0+TVswXSkpLEFycmF5LmlzQXJyYXkobnVsbD09PShoPWFzKFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1oP3ZvaWQg''@;'; put 'put ''MDpoLmhlYWRlckF0dHJpYnV0ZXMpJiYodj1bLi4udiwuLi5hcyhWZCx0aGlzKS5vcHRpb25zLmhlYWRlckF0dHJpYnV0ZXMubWFwKE09Pk1bMF0pXSk7Zm9yKGxldCBNPTAsRD1mLmxlbmd0aDtNPEQ7TSsrKWxvKGZbTV0sYSksajcoZltNXSx2KX0pLGMuY2xlYXIoKX1mdW5jdGlvbiBRNyhj''@;'; put 'put ''LGwsYSl7bTNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHdjKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuZ2V0KGwzKGMsbCkpfWZ1bmN0aW9uIHMzKGMsbCxhKXtyZXR1cm4gYy5zZXQobDMoYyxsKSxhKSxhfWZ1bmN0aW9uIGwzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTHA9bmV3IFdlYWtNYXAsU2c9bmV3IFdlYWtNYXAsVEs9bmV3IFdlYWtNYXAsQUs9bmV3IFdlYWtNYXAsam09bmV3IFdlYWtNYXAsV0U9bmV3IFdlYWtNYXAsWUU9bmV3IFdlYWtNYXAsT3A9''@;'; put 'put ''bmV3IFdlYWtTZXQ7Y2xhc3MgbHR0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBzdHQoYyxsKXttM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsT3ApLFE3KHRoaXMsTHAsdm9pZCAwKSxRNyh0aGlzLFNnLHZvaWQgMCksUTcodGhpcyxUSyx2b2lkIDApLFE3KHRoaXMsQUssdm9pZCAwKSxRNyh0''@;'; put 'put ''aGlzLGptLCEwKSxRNyh0aGlzLFdFLHt9KSxRNyh0aGlzLFlFLHt9KSxzMyhTZyx0aGlzLGwucm9vdFRhYmxlLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksczMoQUssdGhpcyxsLnJvb3REb2N1bWVudCl9aXNDbGFzc2ljVGhlbWUoKXtyZXR1cm4gd2Moam0sdGhpcyl9Z2V0Q1NTVmFy''@;'; put 'put ''aWFibGVWYWx1ZShsKXt2YXIgYTtpZih3YyhqbSx0aGlzKSlyZXR1cm4gbnVsbDtpZih3YyhXRSx0aGlzKVtgLS1odC0ke2x9YF0pcmV0dXJuIHdjKFdFLHRoaXMpW2AtLWh0LSR7bH1gXTtjb25zdCBkPW51bGwhPT0oYT1sMyhPcCx0aGlzLGh0dCkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKSkm''@;'; put 'put ''JnZvaWQgMCE9PWE/YTpsMyhPcCx0aGlzLHkzZSkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKTtyZXR1cm4gbnVsbCE9PWQ/KHdjKFdFLHRoaXMpW2AtLWh0LSR7bH1gXT1kLGQpOnZvaWQgMH1nZXRTdHlsZUZvclREKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9d2MoWUUsdGhpcykpfHx2b2lk''@;'; put 'put ''IDA9PT1hP3ZvaWQgMDphLnRkW2xdfWdldERlZmF1bHRSb3dIZWlnaHQoKXtpZih3YyhqbSx0aGlzKSlyZXR1cm4gMjM7Y29uc3QgbD1sMyhPcCx0aGlzLGN0dCkuY2FsbCh0aGlzKTtyZXR1cm4hbCYmcG8od2MoU2csdGhpcyksImh0LXdyYXBwZXIiKT8oaWwoYFRoZSAiJHt3YyhMcCx0aGlz''@;'; put 'put ''KX0iIHRoZW1lIGlzIGVuYWJsZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJlY3RseS4gSW1wb3J0IHRoZSBjb3JyZWN0IENTUyBmaWxlcyBpbiBvcmRlciB0byB1c2UgdGhhdCB0aGVtZS5gKSxzMyhqbSx0aGlzLCEwKSx0aGlzLnVzZVRo''@;'; put 'put ''ZW1lKCksMjMpOmx9YXJlQ2VsbHNCb3JkZXJCb3goKXtyZXR1cm4iYm9yZGVyLWJveCI9PT10aGlzLmdldFN0eWxlRm9yVEQoImJveC1zaXppbmciKX11c2VUaGVtZShsKXtpZighbClyZXR1cm4gbDMoT3AsdGhpcyxiM2UpLmNhbGwodGhpcyksczMoam0sdGhpcywhMCksdm9pZCBzMyhMcCx0''@;'; put 'put ''aGlzLGx8fHZvaWQgMCk7bCYmbCE9PXdjKExwLHRoaXMpJiYod2MoTHAsdGhpcykmJmwzKE9wLHRoaXMsZnR0KS5jYWxsKHRoaXMpLHMzKExwLHRoaXMsbCksczMoam0sdGhpcywhMSksbDMoT3AsdGhpcyx1dHQpLmNhbGwodGhpcyksbDMoT3AsdGhpcyxiM2UpLmNhbGwodGhpcykpfWdldFRo''@;'; put 'put ''ZW1lTmFtZSgpe3JldHVybiB3YyhMcCx0aGlzKX1yZW1vdmVDbGFzc05hbWVzKCl7cG8od2MoU2csdGhpcyksd2MoTHAsdGhpcykpJiZsbyh3YyhTZyx0aGlzKSx3YyhMcCx0aGlzKSl9fWZ1bmN0aW9uIGN0dCgpe2NvbnN0IGM9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJsaW5lLWhlaWdo''@;'; put 'put ''dCIpLGw9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLXZlcnRpY2FsLXBhZGRpbmciKSxhPU1hdGguY2VpbChwYXJzZUZsb2F0KHRoaXMuZ2V0U3R5bGVGb3JURCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpKSk7cmV0dXJuIG51bGw9PT1jfHxudWxsPT09bHx8aXNOYU4oYSk/bnVsbDpj''@;'; put 'put ''KzIqbCthfWZ1bmN0aW9uIHV0dCgpe2xvKHdjKFNnLHRoaXMpLC9odC10aGVtZS0uKi9nKSxUaSh3YyhTZyx0aGlzKSx3YyhMcCx0aGlzKSl9ZnVuY3Rpb24gYjNlKCl7dGhpcy5pc0NsYXNzaWNUaGVtZSgpfHxzMyhUSyx0aGlzLGdldENvbXB1dGVkU3R5bGUod2MoU2csdGhpcykpKTtjb25z''@;'; put 'put ''dCBjPWwzKE9wLHRoaXMsZHR0KS5jYWxsKHRoaXMsWyJib3gtc2l6aW5nIiwiYm9yZGVyLWJvdHRvbS13aWR0aCJdKTt3YyhZRSx0aGlzKS50ZD17Li4ud2MoWUUsdGhpcykudGQsImJveC1zaXppbmciOmNbImJveC1zaXppbmciXSwiYm9yZGVyLWJvdHRvbS13aWR0aCI6Y1siYm9yZGVyLWJv''@;'; put 'put ''dHRvbS13aWR0aCJdfX1mdW5jdGlvbiBkdHQoYyl7Y29uc3QgbD13YyhBSyx0aGlzKSxhPXdjKFNnLHRoaXMpLGQ9bC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGg9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLGY9bC5jcmVhdGVFbGVtZW50KCJ0ciIpLHY9bC5jcmVhdGVFbGVtZW50KCJ0ciIp''@;'; put 'put ''LE09bC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3YuYXBwZW5kQ2hpbGQoTSksaC5hcHBlbmRDaGlsZChmKSxoLmFwcGVuZENoaWxkKHYpLGQuYXBwZW5kQ2hpbGQoaCksYS5hcHBlbmRDaGlsZChkKTtjb25zdCBEPWdldENvbXB1dGVkU3R5bGUoTSksWj17fTtyZXR1cm4gYy5mb3JFYWNoKHJlPT57''@;'; put 'put ''WltyZV09RC5nZXRQcm9wZXJ0eVZhbHVlKHJlKX0pLGEucmVtb3ZlQ2hpbGQoZCksWn1mdW5jdGlvbiBodHQoYyl7Y29uc3QgbD1NYXRoLmNlaWwocGFyc2VGbG9hdChsMyhPcCx0aGlzLHkzZSkuY2FsbCh0aGlzLGMpKSk7cmV0dXJuIE51bWJlci5pc05hTihsKT9udWxsOmx9ZnVuY3Rpb24g''@;'; put 'put ''eTNlKGMpe2NvbnN0IGw9d2MoVEssdGhpcykuZ2V0UHJvcGVydHlWYWx1ZShjKTtyZXR1cm4iIj09PWw/bnVsbDpsfWZ1bmN0aW9uIGZ0dCgpe3MzKFlFLHRoaXMse30pLHMzKFdFLHRoaXMse30pLHMzKGptLHRoaXMsITApfWNsYXNzIHB0dCBleHRlbmRzIG1Le2NvbnN0cnVjdG9yKGwsYSl7''@;'; put 'put ''c3VwZXIobCxuZXcgeWV0KGEpKSx0aGlzLnN0eWxlc0hhbmRsZXI9bmV3IGx0dCh0aGlzLmRvbUJpbmRpbmdzKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgX2V0KHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRoaXMuZG9t''@;'; put 'put ''QmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IFFldCh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9bmV3IGF0''@;'; put 'put ''dCh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpKSx0aGlzLnd0RXZlbnQ9bmV3IEVmZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIpLHRoaXMud3RPdmVy''@;'; put 'put ''bGF5cz1uZXcgbWV0KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xh''@;'; put 'put ''c3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtYbyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLGxvKHRoaXMu''@;'; put 'put ''d3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSksVGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRPdmVybGF5QnlOYW1lKGwpe3ZhciBhO2lmKCFIZmUuaW5jbHVkZXMobCkpcmV0dXJuIG51bGw7Y29uc3QgZD1sLnJlcGxhY2UoL18oW2Etel0p''@;'; put 'put ''L2csaD0+aFsxXS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gbnVsbCE9PShhPXRoaXMud3RPdmVybGF5c1tgJHtkfU92ZXJsYXlgXSkmJnZvaWQgMCE9PWE/YTpudWxsfWdldFZpZXdwb3J0RGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCB0b3BPdmVybGF5''@;'; put 'put ''VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LnRyaW1taW5nQ29udGFp''@;'; put 'put ''bmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgaW5s''@;'; put 'put ''aW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFRhYmxlUGFy''@;'; put 'put ''ZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCBib3R0b21PdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5''@;'; put 'put ''cy5ib3R0b21PdmVybGF5fX19fWNsYXNzIGtLe2NvbnN0cnVjdG9yKGwpe2wgaW5zdGFuY2VvZiBtSz90aGlzLl93b3Q9bDp0aGlzLl9pbml0RnJvbVNldHRpbmdzKGwpfV9pbml0RnJvbVNldHRpbmdzKGwpe2wuZmFjYWRlPWE9Pntjb25zdCBkPW5ldyBrSyhhKTtyZXR1cm4oKT0+ZH0sdGhp''@;'; put 'put ''cy5fd290PW5ldyBwdHQobC50YWJsZSxsKX1nZXQgZ3VpZCgpe3JldHVybiB0aGlzLl93b3QuZ3VpZH1nZXQgcm9vdERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290RG9jdW1lbnR9Z2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdz''@;'; put 'put ''LnJvb3RXaW5kb3d9Z2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3N9Z2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZVNvdXJjZX1nZXQgY2xvbmVPdmVybGF5KCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXl9Z2V0IHNlbGVjdGlv''@;'; put 'put ''bk1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LnNlbGVjdGlvbk1hbmFnZXJ9Z2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0Vmlld3BvcnR9Z2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gdGhpcy5fd290Lnd0T3ZlcmxheXN9Z2V0IHd0VGFibGUoKXtyZXR1cm4gdGhpcy5fd290''@;'; put 'put ''Lnd0VGFibGV9Z2V0IHd0RXZlbnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0RXZlbnR9Z2V0IHd0U2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbH1nZXQgZHJhd24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXdufXNldCBkcmF3bihsKXt0aGlzLl93b3QuZHJhd249bH1nZXQgYWN0aXZl''@;'; put 'put ''T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmFjdGl2ZU92ZXJsYXlOYW1lfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQgbGFzdE1v''@;'; put 'put ''dXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVtU2Nyb2xs''@;'; put 'put ''aW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhpcy5fd290''@;'; put 'put ''LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFuYWdlcn1n''@;'; put 'put ''ZXQgc3R5bGVzSGFuZGxlcigpe3JldHVybiB0aGlzLl93b3Quc3R5bGVzSGFuZGxlcn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5n''@;'; put 'put ''ZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxs''@;'; put 'put ''eShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNs''@;'; put 'put ''b25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd290LmdldE92ZXJsYXlCeU5hbWUobCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdz''@;'; put 'put ''QXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gXzNlKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1JpZ2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOnYsY2Vs''@;'; put 'put ''bENvb3Jkc0ZhY3Rvcnk6TX09Yztjb25zdCBEPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLFo9Zi5pc1NlbGVjdGVkQnlDb3JuZXIoKSxyZT1mLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGYubWFya1NvdXJjZSgibW91c2UiKSxsJiZEKWgu''@;'; put 'put ''cm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKGgpOihafHxyZSkmJmgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKE0oaC5yb3csaC5jb2wpKTpaJiZoLnJvdzwwJiYhdi5jb2x1bW4/Zi5zZXRSYW5nZUVuZChNKEQudG8ucm93LGguY29sKSk6''@;'; put 'put ''cmUmJmguY29sPDAmJiF2LnJvdz9mLnNldFJhbmdlRW5kKE0oaC5yb3csRC50by5jb2wpKTooIVomJiFyZSYmaC5jb2w8MHx8WiYmaC5jb2w8MCkmJiF2LnJvdz9mLnNlbGVjdFJvd3MoTWF0aC5tYXgoRC5mcm9tLnJvdywwKSxoLnJvdyxoLmNvbCk6KCFaJiYhcmUmJmgucm93PDB8fHJlJiZo''@;'; put 'put ''LnJvdzwwKSYmIXYuY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoRC5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCBjZT0hZi5pbkluU2VsZWN0aW9uKGgpLGJlPWF8fGQmJmNlO2gucm93PDAmJmguY29sPj0wJiYhdi5jb2x1bW4/YmUmJmYuc2VsZWN0Q29sdW1u''@;'; put 'put ''cyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiF2LnJvdz9iZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYmaC5yb3c+PTAmJiF2LmNlbGw/YmUmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCgh''@;'; put 'put ''MCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITAsZm9jdXNQb3NpdGlvbjp7cm93OjAsY29sOjB9fSl9Zi5tYXJrRW5kU291cmNlKCl9Y29uc3QgbXR0PW5ldyBNYXAoW1sibW91c2Vkb3duIixfM2VdLFsibW91c2VvdmVyIixmdW5jdGlvbiBndHQoYyl7bGV0e2lzTGVmdENsaWNrOmws''@;'; put 'put ''Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IHY9ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksRD1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksWj1k''@;'; put 'put ''LnRhYmxlUHJvcHMuY291bnRSb3dzKCk7ZC5tYXJrU291cmNlKCJtb3VzZSIpLE0mJiFoLmNvbHVtbj9kLnNldFJhbmdlRW5kKGYoWi0xLGEuY29sKSk6diYmIWgucm93P2Quc2V0UmFuZ2VFbmQoZihhLnJvdyxELTEpKTpoLmNlbGx8fGQuc2V0UmFuZ2VFbmQoYSksZC5tYXJrRW5kU291cmNl''@;'; put 'put ''KCl9XSxbInRvdWNoc3RhcnQiLF8zZV1dKTtmdW5jdGlvbiB3M2UoYyxsKXtsZXR7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWw7bXR0LmdldChjLnR5cGUpKHtjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jk''@;'; put 'put ''c0ZhY3Rvcnk6Zixpc1NoaWZ0S2V5OmMuc2hpZnRLZXksaXNMZWZ0Q2xpY2s6VU8oYyl8fCJ0b3VjaHN0YXJ0Ij09PWMudHlwZSxpc1JpZ2h0Q2xpY2s6SG0oYyl9KX1jb25zdCBDM2U9bmV3IFdlYWtNYXAsREs9U3ltYm9sKCJyb290SW5zdGFuY2UiKTtmdW5jdGlvbiBjUChjKXtyZXR1cm4g''@;'; put 'put ''QzNlLmhhcyhjKX1mdW5jdGlvbiB6bShjLGwsYSl7UzNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBTM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp''@;'; put 'put ''fWZ1bmN0aW9uIFVtKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBfdHQoYyl7dmFyIGw9ZnVuY3Rpb24gd3R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBBdShjLGwpe3JldHVybiBjLmdldChDXyhjLGwpKX1m''@;'; put 'put ''dW5jdGlvbiBCZChjLGwsYSl7cmV0dXJuIGMuc2V0KENfKGMsbCksYSksYX1mdW5jdGlvbiBDXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIElLPW5ldyBXZWFrTWFwLHVQPW5ldyBXZWFrTWFwLGRQPW5ldyBXZWFrTWFwLE1nPW5ldyBXZWFrTWFwLGMzPW5ldyBXZWFrTWFwLFJLPW5ldyBXZWFrTWFwLExLPW5ldyBXZWFrTWFwLFNfPW5ldyBXZWFrTWFwLEdFPW5l''@;'; put 'put ''dyBXZWFrU2V0O2Z1bmN0aW9uIE0zZSgpe3JldHVybiBwYXJzZUludCh0aGlzLmhvdC5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoUk8oKVswXSksMTApfWZ1bmN0aW9uIFN0dChjKXtjb25zdCBsPUNfKEdFLHRoaXMsTTNlKS5jYWxsKHRoaXMpK2M7dm8odGhpcy5ob3Qucm9vdEVsZW1lbnQs''@;'; put 'put ''Li4uUk8obCkpfWZ1bmN0aW9uIE10dCgpe2NvbnN0IGM9dGhpcy5ob3Qucm9vdEVsZW1lbnQ7dGhpcy5oYXNWZXJ0aWNhbFNjcm9sbCgpP1RpKGMsImh0SGFzU2Nyb2xsWSIpOmxvKGMsImh0SGFzU2Nyb2xsWSIpLHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP1RpKGMsImh0SGFzU2Nyb2xs''@;'; put 'put ''WCIpOmxvKGMsImh0SGFzU2Nyb2xsWCIpfWNvbnN0IHh0dD1jbGFzcyBDdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIHl0dChjLGwpe1MzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxHRSksVW0odGhpcywiaG90Iix2b2lkIDApLFVtKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxVbSh0''@;'; put 'put ''aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxVbSh0aGlzLCJUSEVBRCIsdm9pZCAwKSxVbSh0aGlzLCJUQk9EWSIsdm9pZCAwKSxVbSh0aGlzLCJfd3QiLHZvaWQgMCksVW0odGhpcywiYWN0aXZlV3QiLHZvaWQgMCksem0odGhpcyxJSywwKSx6bSh0aGlzLHVQLDApLFVtKHRoaXMsInBvc3Rwb25l''@;'; put 'put ''ZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLHptKHRoaXMsZFAsITEpLHptKHRoaXMsTWcsdm9pZCAwKSx6bSh0aGlzLGMzLHZvaWQgMCksem0odGhpcyxSSywwKSx6bSh0aGlzLExLLDApLHptKHRoaXMsU18sbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgajIodGhpcy5o''@;'; put 'put ''b3QpLHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl9cmVuZGVyKCl7aWYoIXRoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCkpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXIiLGwpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSksdGhpcy5f''@;'; put 'put ''d3QuZHJhdyghbCksQ18oR0UsdGhpcyxNdHQpLmNhbGwodGhpcyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyIixsKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITF9fWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9u''@;'; put 'put ''ZWRBZGp1c3RFbGVtZW50c1NpemU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDZWxsQXRDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuX3d0LmdldENlbGwobCxhKTtyZXR1cm4gZDwwP251bGw6ZH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3''@;'; put 'put ''cG9ydFZlcnRpY2FsbHkobCxhKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9bC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7ZCYmbC5zZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWxzdHlsZSIsZCksVGkobCwiaGFuZHNvbnRh''@;'; put 'put ''YmxlIiksQmQoYzMsdGhpcyxhLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikpLFRpKEF1KGMzLHRoaXMpLCJodENvcmUiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lJiZUaShBdShjMyx0aGlzKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKSx0aGlz''@;'; put 'put ''LnNldHRpbmdzLmFyaWFUYWdzJiYodm8oQXUoYzMsdGhpcyksW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksdm8obCxbWyJyb2xlIiwidHJlZWdyaWQiXSxUMmUoLTEpLFJPKHRoaXMuaG90LmNvdW50Q29scygpKSxbImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkpLHRoaXMuVEhF''@;'; put 'put ''QUQ9YS5jcmVhdGVFbGVtZW50KCJUSEVBRCIpLEF1KGMzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9YS5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLEF1KGMzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpLHRoaXMuaG90LnRhYmxlPUF1KGMzLHRoaXMpLHRo''@;'; put 'put ''aXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoQXUoYzMsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290RG9jdW1lbnQ6YSxzZWxlY3Rpb246ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9YS5k''@;'; put 'put ''b2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLE09PntCZChkUCx0aGlzLCEwKSx0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoTS50YXJnZXQpfHwoTSQoaCksTS5wcmV2ZW50RGVmYXVsdCgpLGguZm9jdXMoKSl9KSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT57QmQoZFAsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsTT0+e0F1KGRQLHRoaXMpJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFy''@;'; put 'put ''Z2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJk0kKGgpLE0ucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVwIixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmIU0uc2hpZnRLZXkmJmQuZmluaXNoKCl9KSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNldXAiLE09PntkLmlzSW5Qcm9ncmVzcygpJiZVTyhNKSYmZC5maW5pc2goKSxCZChNZyx0aGlzLCExKTtjb25zdCBEPUZPKGEuYWN0aXZlRWxlbWVudCk7U0UoYS5hY3RpdmVFbGVtZW50KSYmIUR8fChEfHwhZC5pc1NlbGVj''@;'; put 'put ''dGVkKCkmJiFkLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhbC5jb250YWlucyhNLnRhcmdldCkmJiFIbShNKSkmJnRoaXMuaG90LnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51IixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmSG0o''@;'; put 'put ''TSkmJihkLmZpbmlzaCgpLEJkKE1nLHRoaXMsITEpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57ZC5pc0luUHJvZ3Jlc3MoKSYmZC5maW5pc2goKSxCZChNZyx0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoZiwibW91c2Vkb3duIixNPT57Y29uc3QgRD1NLnRhcmdldCxaPU0ueHx8TS5jbGllbnRYLHJlPU0ueXx8TS5jbGllbnRZO2xldCBjZT1NLnRhcmdldDtpZihBdShNZyx0aGlzKXx8IWx8fCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtob2xkZXI6YmV9PXRoaXMuX3d0Lnd0VGFibGU7''@;'; put 'put ''aWYoY2U9PT1iZSl7Y29uc3QgQmU9ZjAoYSk7aWYoYS5lbGVtZW50RnJvbVBvaW50KForQmUscmUpIT09YmV8fGEuZWxlbWVudEZyb21Qb2ludChaLHJlK0JlKSE9PWJlKXJldHVybn1lbHNlIGZvcig7Y2UhPT1mOyl7aWYobnVsbD09PWNlKXtpZihNLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJy''@;'; put 'put ''ZWFrO3JldHVybn1pZihjZT09PWwpcmV0dXJuO2NlPWNlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhEKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlj''@;'; put 'put ''a0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVzdHJveUVkaXRvcighMSwhMSl9KTtsZXQgdj1CNyhoKTtmb3IoO251bGwhPT12Oyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIs''@;'; put 'put ''KCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksdj1CNyh2KTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEF1KGMzLHRoaXMpLCJzZWxlY3RzdGFydCIsTT0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fFNFKE0udGFyZ2V0KXx8TS5wcmV2ZW50RGVmYXVsdCgp''@;'; put 'put ''fSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5zbGF0ZUZyb21SZW5k''@;'; put 'put ''ZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKTpsLGg9YT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0''@;'; put 'put ''dXJuIG51bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4g''@;'; put 'put ''bnVsbD09PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVu''@;'; put 'put ''ZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Um93cyl9Y291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0''@;'; put 'put ''aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVy''@;'; put 'put ''YWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpLHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRl''@;'; put 'put ''Z2VyKHYpKXJldHVybiAwO2xldCBNPTA7cmV0dXJuIGE8MD9NPXYrMTphPjAmJihNPWgtdiksTX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5z''@;'; put 'put ''U3RhcnQsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9w''@;'; put 'put ''LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9t''@;'; put 'put ''LDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTty''@;'; put 'put ''ZXR1cm4gZH1nZXRTdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3d0LnN0eWxlc0hhbmRsZXJ9Z2V0RGVmYXVsdFJvd0hlaWdodCgpe3JldHVybiB0aGlzLl93dC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKX1hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGwpe3Zh''@;'; put 'put ''ciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtkJiZUaShkLGwpfXJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChs''@;'; put 'put ''KXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmbG8oZCxsKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3Zl''@;'; put 'put ''cmxheXMoKXtjb25zdCBsPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKT5s''@;'; put 'put ''JiZ0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl7Y29uc3QgbD17YXJpYVRhZ3M6dGhpcy5zZXR0aW5ncy5hcmlhVGFncyxydGxNb2RlOnRoaXMuaG90LmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaG90LmdldFBsdWdpbigi''@;'; put 'put ''YXV0b1Jvd1NpemUiKSYmdGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpLmlzRW5hYmxlZCgpLHRhYmxlOkF1KGMzLHRoaXMpLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+Y1AodGhpcy5ob3QpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cs''@;'; put 'put ''cHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhp''@;'; put 'put ''cy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCxkYXRhOihmLHYpPT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdikpLHRvdGFsUm93czooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVSb3dz''@;'; put 'put ''KCksdG90YWxDb2x1bW5zOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxmaXhlZENvbHVtbnNTdGFydDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCksZml4ZWRSb3dzVG9wOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksZml4''@;'; put 'put ''ZWRSb3dzQm90dG9tOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0PjB8fGwucm93SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92''@;'; put 'put ''ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fGwuY29sdW1uSGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjAsbWluU3BhcmVSb3dzOigpPT50aGlzLnNldHRpbmdzLm1pblNw''@;'; put 'put ''YXJlUm93cyxyZW5kZXJBbGxSb3dzOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsUm93cyxyZW5kZXJBbGxDb2x1bW5zOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsQ29sdW1ucyxyb3dIZWFkZXJzOigpPT57Y29uc3QgZj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZmLnB1c2go''@;'; put 'put ''KHYsTSk9Pntjb25zdCBEPXY+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kUm93SGVhZGVyKEQsTSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGYpLEJkKHVQLHRo''@;'; put 'put ''aXMsZi5sZW5ndGgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJkNfKEdFLHRoaXMsTTNlKS5jYWxsKHRoaXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJkNfKEdFLHRoaXMsU3R0KS5jYWxsKHRoaXMsQXUodVAsdGhpcykpLGZ9LGNvbHVtbkhlYWRlcnM6KCk9Pntjb25zdCBm''@;'; put 'put ''PVtdO3JldHVybiB0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEQ9dj49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRDb2xIZWFkZXIoRCxNKX0pLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZiksQmQoSUssdGhpcyxmLmxlbmd0aCksZn0sY29sdW1uV2lkdGg6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3Qu''@;'; put 'put ''Z2V0Q29sV2lkdGgobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0OmY9Pntjb25zdCB2PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hlaWdodChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHRCeU92ZXJs''@;'; put 'put ''YXlOYW1lOihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLEQ9bnVsbD09PU0/ZjpNO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsdGhpcy5ob3QuZ2V0Um93''@;'; put 'put ''SGVpZ2h0KEQpLEQsdil9LGNlbGxSZW5kZXJlcjooZix2LE0pPT57Y29uc3RbRCxaXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLHJlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixELFosITEsIm1ldGEiKTtsZXQgY2U9RCxi''@;'; put 'put ''ZT1aO0FycmF5LmlzQXJyYXkocmUpJiYoW2NlLGJlXT1yZSk7Y29uc3QgRWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoY2UsYmUpLEJlPXRoaXMuaG90LmNvbFRvUHJvcChiZSk7bGV0IHFlPXRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AoY2UsQmUpO3RoaXMuaG90Lmhhc0hvb2soImJlZm9yZVZh''@;'; put 'put ''bHVlUmVuZGVyIikmJihxZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLHFlLEVlKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixNLEQsWixCZSxxZSxFZSksdGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEVlKSh0aGlzLmhvdCxNLEQsWixCZSxxZSxF''@;'; put 'put ''ZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLE0sRCxaLEJlLHFlLEVlKX0sc2VsZWN0aW9uczp0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6KCk9PnRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24sb25XaW5kb3dS''@;'; put 'put ''ZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZVNyh0aGlzLmhvdC5yb290RWxlbWVudCkmJnRo''@;'; put 'put ''aXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KSxyZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmFj''@;'; put 'put ''dGl2ZVd0PUQsQmQoTWcsdGhpcywhMCksQmQoU18sdGhpcyx7eDpmLmNsaWVudFgseTpmLmNsaWVudFl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmLFosTSxyZSksIUZtKGYpJiYodzNlKGYse2Nvb3JkczpaLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rp''@;'; put 'put ''b24sY29udHJvbGxlcjpyZSxjZWxsQ29vcmRzRmFjdG9yeTooY2UsYmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29udGV4''@;'; put 'put ''dE1lbnU6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELEJkKE1nLHRoaXMsITEpLHRoaXMuaG90LnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmZpbmlzaCgp''@;'; put 'put ''LHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsZixaLE0pLCFGbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0OihmLHYsTSxEKT0+e2Nv''@;'; put 'put ''bnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdXQiLGYsWixNKSwhRm0oZikmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU91dCIs''@;'; put 'put ''ZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModikscmU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5hY3RpdmVXdD1ELHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGYsWixNLHJlKSwhRm0oZikmJihBdShNZyx0aGlzKSYmKCFBdShTXyx0aGlzKXx8QXUoU18sdGhpcykueCE9PWYuY2xpZW50WHx8QXUoU18sdGhpcykueSE9PWYuY2xpZW50WSkmJnczZShmLHtjb29yZHM6WixzZWxlY3Rpb246''@;'; put 'put ''dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6cmUsY2VsbENvb3Jkc0ZhY3Rvcnk6KGNlLGJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY2UsYmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93''@;'; put 'put ''dCxCZChTXyx0aGlzLG51bGwpKX0sb25DZWxsTW91c2VVcDooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGYsWixNKSwh''@;'; put 'put ''Rm0oZikmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOmY9PntmLnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixmKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6Zj0+e2YucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsZil9LGJlZm9yZURyYXc6KGYsdik9PnRoaXMuYmVmb3JlUmVuZGVyKGYs''@;'; put 'put ''diksb25EcmF3OmY9PnRoaXMuYWZ0ZXJSZW5kZXIoZiksb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEQ9ZjwwO2xldCBaPWY7cmV0dXJuIER8fChaPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChm''@;'; put 'put ''KSxudWxsIT09Wik/KFo9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsWix2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1o6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopKTpmfSxvbkJlZm9yZVZp''@;'; put 'put ''ZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixEPWY8MDtsZXQgWj1mO3JldHVybiBEfHwoWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksbnVsbCE9PVopPyhaPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsWix2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1o6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopKTpmfSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uQmVm''@;'; put 'put ''b3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLFo9ZjwwO2xldCByZT1mO1p8''@;'; put 'put ''fChyZT1ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IGNlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLHJlLHYsTSk7cmV0dXJuIFo/Y2U6RC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhp''@;'; put 'put ''ZGRlbkluZGV4KGNlLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6KGYsdixNKT0+e2NvbnN0IEQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsWj1mPDA7bGV0IHJlPWY7Wnx8KHJlPUQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgY2U9dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIscmUsdixNKTtyZXR1cm4gWj9jZTpELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooZix2LE0pPT57''@;'; put 'put ''bGV0IEQ7Y29uc3RbWixyZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSxjZT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGNlLnNpemUoKT4wKXtjb25zdCBFZT1jZS5wZWVrQnlJbmRleChNPz8wKTtEPVtFZS5mcm9tLnJv''@;'; put 'put ''dyxFZS5mcm9tLmNvbCxFZS50by5yb3csRWUudG8uY29sXX1yZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsWixyZSxELE0pfSxvbkJlZm9yZURyYXdCb3JkZXJzOihmLHYpPT57Y29uc3RbTSxELFoscmVdPWYsY2U9W3RoaXMuaG90LnJvd0luZGV4TWFwcGVy''@;'; put 'put ''LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChEKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFopLHRoaXMuaG90LmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmUpXTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixjZSx2KX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRl''@;'; put 'put ''ck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIpLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Zj0+dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmKSxvbk1vZGlmeUdldENlbGxDb29yZHM6KGYsdixNLEQpPT57''@;'; put 'put ''Y29uc3QgWj10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixyZT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixjZT12Pj0wP3JlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixiZT1mPj0wP1ouZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLEVlPXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixiZSxjZSxNLEQpO2lmKEFycmF5LmlzQXJyYXkoRWUpKXtjb25zdFtCZSxxZSxydCxwdF09RWU7cmV0dXJuW0JlPj0wP1ouZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChCZSwxKSk6QmUs''@;'; put 'put ''cWU+PTA/cmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocWUsMSkpOnFlLHJ0Pj0wP1ouZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChydCwtMSkpOnJ0LHB0Pj0wP3JlLmdldFJl''@;'; put 'put ''bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHB0LC0xKSk6cHRdfX0sb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixEPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLFo9dj49''@;'; put 'put ''MD9ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixyZT1mPj0wP00uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLGNlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IixyZSxaKTtpZihBcnJheS5pc0FycmF5KGNlKSl7Y29uc3RbYmUs''@;'; put 'put ''RWVdPWNlO3JldHVybltiZT49MD9NLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSkpOmJlLEVlPj0wP0QuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxKSk6RWVdfX0s''@;'; put 'put ''dmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AmJih2PTEwKSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3Vu''@;'; put 'put ''dFJlbmRlcmFibGVSb3dzKCksRD1mLnN0YXJ0Um93LFo9Zi5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiB2KWYuc3RhcnRSb3c9TWF0aC5tYXgoRC12LDApLGYuZW5kUm93PU1hdGgubWluKFordixNLTEpO2Vsc2UgaWYoImF1dG8iPT09dil7Y29uc3QgcmU9TWF0aC5tYXgoMSxNYXRoLmNl''@;'; put 'put ''aWwoWi9NKjEyKSk7Zi5zdGFydFJvdz1NYXRoLm1heChELXJlLDApLGYuZW5kUm93PU1hdGgubWluKForcmUsTS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpmPT57''@;'; put 'put ''bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0JiYodj0xMCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLEQ9Zi5z''@;'; put 'put ''dGFydENvbHVtbixaPWYuZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgdiYmKGYuc3RhcnRDb2x1bW49TWF0aC5tYXgoRC12LDApLGYuZW5kQ29sdW1uPU1hdGgubWluKFordixNLTEpKSwiYXV0byI9PT12KXtjb25zdCByZT1NYXRoLm1heCgxLE1hdGguY2VpbChaL00qNikpO2Yuc3Rh''@;'; put 'put ''cnRDb2x1bW49TWF0aC5tYXgoRC1yZSwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihaK3JlLE0tMSl9fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmKX0scm93SGVhZGVyV2lkdGg6KCk9PnRoaXMuc2V0dGluZ3Mucm93SGVhZGVyV2lk''@;'; put 'put ''dGgsY29sdW1uSGVhZGVySGVpZ2h0OigpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxmfX07dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJs''@;'; put 'put ''ZSIsbCksdGhpcy5fd3Q9bmV3IGtLKGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgYT10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpkLGhlaWdodDpofT10aGlzLmhvdC5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldExhc3RTaXplKGQs''@;'; put 'put ''aCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJjb250ZXh0bWVudSIsZj0+e2YudGFy''@;'; put 'put ''Z2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkm''@;'; put 'put ''JnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmdGhpcy5ob3QucmVuZGVyKCl9KX1pc1RleHRTZWxlY3Rpb25BbGxvd2VkKGwpe2lmKFNFKGwpKXJldHVybiEwO2NvbnN0IGE9TG0obCx0aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyKTtyZXR1cm4hISghMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21l''@;'; put 'put ''bnRTZWxlY3Rpb24mJmF8fCJjZWxsIj09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkmJmF8fCF0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzQ2VsbEVkaXRlZCgpJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2Vs''@;'; put 'put ''bCgpKX1pc01vdXNlRG93bigpe3JldHVybiBBdShNZyx0aGlzKX1pc1NlbGVjdGVkT25seUNlbGwoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGw9bnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlQ2VsbCgpKSYm''@;'; put 'put ''dm9pZCAwIT09bCYmbH1pc0NlbGxFZGl0ZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiBsJiZsLmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKGwsYSl7bCYmdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJl''@;'; put 'put ''bmRlcixhKX1hZnRlclJlbmRlcihsKXtsJiZ0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWFwcGVuZFJvd0hlYWRlcihsLGEpe2lmKGEuZmlyc3RDaGlsZCl7Y29uc3QgZD1hLmZpcnN0Q2hpbGQ7aWYoIXBvKGQsInJlbGF0aXZl''@;'; put 'put ''IikpcmV0dXJuIHhwKGEpLHZvaWQgdGhpcy5hcHBlbmRSb3dIZWFkZXIobCxhKTt0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoZC5xdWVyeVNlbGVjdG9yKCIucm93SGVhZGVyIiksbCx0aGlzLmhvdC5nZXRSb3dIZWFkZXIpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmQsZ2V0Um93SGVhZGVyOmh9''@;'; put 'put ''PXRoaXMuaG90LGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsdi5jbGFzc05hbWU9InJvd0hlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKHYsbCxoKSxmLmFwcGVuZENoaWxkKHYpLGEuYXBwZW5kQ2hp''@;'; put 'put ''bGQoZil9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyIixsLGEpfWFwcGVuZENvbEhlYWRlcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmhvdC5nZXRDb2xIZWFkZXIsaD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtjb25zdCBmPSgpPT57Y29uc3Qgdj1sPj0wP3RoaXMuaG90LmdldENvbHVtbk1ldGEobCkuaGVhZGVyQ2xhc3NOYW1lOm51bGw7cmV0dXJuIHY/di5zcGxpdCgiICIpOltdfTtpZihhLmZpcnN0Q2hpbGQpe2Nv''@;'; put 'put ''bnN0IHY9YS5maXJzdENoaWxkO3BvKHYsInJlbGF0aXZlIik/KHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxsLGQsaCksdi5jbGFzc05hbWU9IiIsVGkodixbInJlbGF0aXZlIiwuLi5mKCldKSk6KHhwKGEpLHRoaXMuYXBwZW5kQ29sSGVhZGVy''@;'; put 'put ''KGwsYSxkLGgpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDp2fT10aGlzLmhvdCxNPXYuY3JlYXRlRWxlbWVudCgiZGl2IiksRD12LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxaPWYoKTtNLmNsYXNzTGlzdC5hZGQoInJlbGF0aXZlIiwuLi5aKSxELmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlz''@;'; put 'put ''LnNldHRpbmdzLmFyaWFUYWdzJiYodm8oTSwicm9sZSIsInByZXNlbnRhdGlvbiIpLHZvKEQsInJvbGUiLCJwcmVzZW50YXRpb24iKSksdGhpcy51cGRhdGVDZWxsSGVhZGVyKEQsbCxkLGgpLE0uYXBwZW5kQ2hpbGQoRCksYS5hcHBlbmRDaGlsZChNKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJHZXRDb2xIZWFkZXIiLGwsYSxoKX11cGRhdGVDZWxsSGVhZGVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxmPWE7Y29uc3Qgdj10aGlzLl93dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkobCl8fHRo''@;'; put 'put ''aXMuX3d0O2wucGFyZW50Tm9kZSYmKHBvKGwsImNvbEhlYWRlciIpP2Y9di53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpOnBvKGwsInJvd0hlYWRlciIpJiYoZj12Lnd0VGFibGUucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSkpKSxmPi0xP3o3KGwsZChhLGgp''@;'; put 'put ''KTooUG0obCwiXHhhMCIpLFRpKGwsImNvcm5lckhlYWRlciIpKX1tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aChsKXtjb25zdCBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKS1sO3JldHVybiBkPjA/ZDowfW1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChsKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbDtyZXR1cm4gZD4wP2Q6MH1zZXRMYXN0U2l6ZShsLGEpe0JkKFJLLHRoaXMsbCksQmQoTEssdGhpcyxhKX1nZXRMYXN0U2l6ZSgpe3JldHVybnt3aWR0aDpBdShSSyx0aGlzKSxoZWlnaHQ6QXUoTEssdGhp''@;'; put 'put ''cyl9fWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53''@;'; put 'put ''dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9''@;'; put 'put ''dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/P3RoaXMuaG90LmNvdW50Um93cygpLTEsLTEpfWdldEZp''@;'; put 'put ''cnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53''@;'; put 'put ''dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxs''@;'; put 'put ''O2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/P3RoaXMuaG90LmNvdW50Q29s''@;'; put 'put ''cygpLTEsLTEpfWdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qu''@;'; put 'put ''d3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxl''@;'; put 'put ''Um93KCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNp''@;'; put 'put ''YmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9Z2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIEF1KElLLHRoaXMpfWdldFJvd0hlYWRlcnND''@;'; put 'put ''b3VudCgpe3JldHVybiBBdSh1UCx0aGlzKX1nZXRWaWV3cG9ydFdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpfWdldFdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX1nZXRWaWV3''@;'; put 'put ''cG9ydEhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9Z2V0RWxlbWVudE92ZXJsYXlOYW1lKGwpe3ZhciBhO3JldHVy''@;'; put 'put ''bihudWxsIT09KGE9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpKSYmdm9pZCAwIT09YT9hOnRoaXMuX3d0KS53dFRhYmxlLm5hbWV9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd3QuZ2V0T3ZlcmxheUJ5TmFtZShsKX1nZXRBY3RpdmVPdmVybGF5TmFt''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl93dC5hY3RpdmVPdmVybGF5TmFtZX1pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5pc1Zpc2libGUoKX1oYXNWZXJ0aWNhbFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhhc1ZlcnRpY2FsU2Nyb2xsKCl9aGFzSG9yaXpvbnRh''@;'; put 'put ''bFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhhc0hvcml6b250YWxTY3JvbGwoKX1nZXRUYWJsZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0V2lkdGgoKX1nZXRUYWJsZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldEhlaWdodCgpfWdl''@;'; put 'put ''dFRhYmxlT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlT2Zmc2V0KCl9Z2V0Um93SGVhZGVyV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll93dC53dFZpZXdwb3J0LmdldENvbHVtbkhlYWRlckhlaWdodCgpfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpfWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1kZXN0cm95KCl7dGhpcy5fd3QuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19O3koMTM5MDgpO2NvbnN0IHgzZT0iQUJDREVGR0hJSktMTU5PUFFSU1RV''@;'; put 'put ''VldYWVoiLE9LPXgzZS5sZW5ndGg7ZnVuY3Rpb24gaFAoYyl7bGV0IGQsbD1jKzEsYT0iIjtmb3IoO2w+MDspZD0obC0xKSVPSyxhPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUrZCkrYSxsPXBhcnNlSW50KChsLWQpL09LLDEwKTtyZXR1cm4gYX1mdW5jdGlvbiBFdHQoYyl7bGV0IGw9MDtpZihj''@;'; put 'put ''KWZvcihsZXQgYT0wLGQ9Yy5sZW5ndGgtMTthPGMubGVuZ3RoO2ErPTEsZC09MSlsKz1PSyoqZCooeDNlLmluZGV4T2YoY1thXSkrMSk7cmV0dXJuIGwtPTEsbH1mdW5jdGlvbiBUdHQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb''@;'; put 'put ''MF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDtoKyspZi5wdXNoKGhQKGgpKyhkKzEpKTthLnB1c2goZil9cmV0dXJu''@;'; put 'put ''IGF9ZnVuY3Rpb24gQXR0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3Io''@;'; put 'put ''ZD0wO2Q8YztkKyspe2NvbnN0IGY9e307Zm9yKGg9MDtoPGw7aCsrKWZbYHByb3Ake2h9YF09aFAoaCkrKGQrMSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIGt0dChjLGwpe2NvbnN0IGE9W107bGV0IGQ7Zm9yKGxldCBoPTA7aDxjO2grKyl7ZD1bXTtmb3IobGV0IGY9MDtmPGw7Zisr''@;'; put 'put ''KWQucHVzaCgiIik7YS5wdXNoKGQpfXJldHVybiBhfWZ1bmN0aW9uIFBLKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9Yztjb25zdCBkPVtdO3JldHVybighQXJyYXkuaXNBcnJheShjKXx8IUFycmF5LmlzQXJyYXko''@;'; put 'put ''Y1swXSkpJiYoYT1bY10pLGEuZm9yRWFjaCgoaCxmKT0+e0FycmF5LmlzQXJyYXkoaCk/aC5mb3JFYWNoKCh2LE0pPT57ZC5wdXNoKFtmK2wsTSx2XSl9KTpPYmplY3Qua2V5cyhoKS5mb3JFYWNoKHY9PntkLnB1c2goW2YrbCx2LGhbdl1dKX0pfSksZH1mdW5jdGlvbiBGSyhjKXtsZXQgbD0w''@;'; put 'put ''O3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoY1swXSYmQXJyYXkuaXNBcnJheShjWzBdKT9sPWNbMF0ubGVuZ3RoOmNbMF0mJnFvKGNbMF0pJiYobD1CTyhjWzBdKSkpLGx9ZnVuY3Rpb24gRTNlKGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PkFy''@;'; put 'put ''cmF5LmlzQXJyYXkobCkpKX1mdW5jdGlvbiBUM2UoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+Im9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmbnVsbCE9PWwpKX1mdW5jdGlvbiAkRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gRHR0KGMpe3ZhciBsPWZ1bmN0aW9uIEl0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgTHR0PWNsYXNzIFJ0dHtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXT9hcmd1bWVudHNbMV06W107JEUodGhpcywiaG90Iix2b2lkIDApLCRFKHRoaXMsImRhdGEiLHZvaWQgMCksJEUodGhpcywiZGF0YVR5cGUiLCJhcnJheSIpLCRFKHRoaXMsImNvbFRvUHJvcCIsKCk9Pnt9KSwkRSh0aGlzLCJwcm9wVG9Db2wiLCgpPT57fSksdGhpcy5ob3Q9bCx0''@;'; put 'put ''aGlzLmRhdGE9YX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1n''@;'; put 'put ''ZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhpcy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1n''@;'; put 'put ''ZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBZbih0aGlzLmRhdGEsKGQsaCk9Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJvdyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3Vt''@;'; put 'put ''ZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQse2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGwsRD1udWxsO2lmKE09dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFycmF5LmlzQXJyYXkoTSkpRD1bXSxmP00uZm9yRWFjaCgoWixy''@;'; put 'put ''ZSk9PntEW3JlXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwscmUsTSl9KTpHYShhLGQsWj0+e0RbWi1hXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsWixNKX0pO2Vsc2UgaWYocW8oTSl8fG1sKE0pKWlmKEQ9aD9bXTp7fSwhZnx8aCl7Y29uc3QgcmU9dGhpcy5jb3VudEZpcnN0Um93S2V5''@;'; put 'put ''cygpLTE7R2EoMCxyZSxjZT0+e2NvbnN0IGJlPXRoaXMuY29sVG9Qcm9wKGNlKTtpZihjZT49KGF8fDApJiZjZTw9KGR8fHJlKSYmIU51bWJlci5pc0ludGVnZXIoYmUpKXtjb25zdCBFZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsYmUsTSk7aD9ELnB1c2goRWUpOnY/Vk8oRCxiZSxFZSk6''@;'; put 'put ''RFtiZV09RWV9fSl9ZWxzZSBYbyhNLChaLHJlKT0+e2NvbnN0IGNlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxyZSxNKTt2P1ZPKEQscmUsY2UpOkRbcmVdPWNlfSk7cmV0dXJuIER9c2V0QXRDZWxsKGwsYSxkKXtpZighKGw+PXRoaXMuY291bnRSb3dzKCl8fGE+PXRoaXMuY291bnRGaXJz''@;'; put 'put ''dFJvd0tleXMoKSkpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgaD1GZChkKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsbCxhLGgsInNldCIpLGguaXNUb3VjaGVkKCkmJihkPWgudmFsdWUpfVsiX19wcm90b19fIiwiY29uc3Ry''@;'; put 'put ''dWN0b3IiLCJwcm90b3R5cGUiXS5pbmNsdWRlcyhsKXx8KE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdW2FdPWQ6Vk8odGhpcy5kYXRhW2xdLGEsZCkpfX1nZXRBdFBoeXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVsbDtpZihkKWlmKCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3R7''@;'; put 'put ''ZGF0YURvdE5vdGF0aW9uOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aD1mPyQyZShkLGEpOmRbYV19ZWxzZSBoPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6ZFthXTtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGY9RmQoaCk7dGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxmLCJnZXQiKSxmLmlzVG91Y2hlZCgpJiYoaD1mLnZhbHVlKX1yZXR1cm4gaH1nZXRBdENlbGwobCxhKXtjb25zdCBkPXRoaXMubW9kaWZ5Um93RGF0YShsKTtyZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRoaXMuY29sVG9Qcm9w''@;'; put 'put ''KGEpLGQpfWdldEJ5UmFuZ2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9bnVsbCx2PW51bGwsTT1udWxsLEQ9bnVsbDtudWxsPT09bHx8bnVsbD09PWE/KGg9ITAsZj0wLE09dGhpcy5jb3VudFJvd3MoKS0xKTooZj1NYXRoLm1pbihsLnJvdyxhLnJvdyksdj1NYXRoLm1pbihsLmNv''@;'; put 'put ''bCxhLmNvbCksTT1NYXRoLm1heChsLnJvdyxhLnJvdyksRD1NYXRoLm1heChsLmNvbCxhLmNvbCkpO2NvbnN0IFo9W107cmV0dXJuIEdhKGYsTSxyZT0+e1oucHVzaChoP3RoaXMuZ2V0QXRSb3cocmUsdm9pZCAwLHZvaWQgMCxkKTp0aGlzLmdldEF0Um93KHJlLHYsRCxkKSl9KSxafWNvdW50''@;'; put 'put ''Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsfXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RS''@;'; put 'put ''b3dLZXlzKCl7cmV0dXJuIEZLKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fTt5KDIwMjkxKTtjb25zdCBBM2U9e19sb2NhbEhvb2tzOk9iamVjdC5jcmVhdGUobnVsbCksYWRkTG9jYWxIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3Nb''@;'; put 'put ''Y118fCh0aGlzLl9sb2NhbEhvb2tzW2NdPVtdKSx0aGlzLl9sb2NhbEhvb2tzW2NdLnB1c2gobCksdGhpc30scnVuTG9jYWxIb29rcyhjLGwsYSxkLGgsZix2KXtpZih0aGlzLl9sb2NhbEhvb2tzW2NdKXtjb25zdCBNPXRoaXMuX2xvY2FsSG9va3NbY10ubGVuZ3RoO2ZvcihsZXQgRD0wO0Q8''@;'; put 'put ''TTtEKyspSE8odGhpcy5fbG9jYWxIb29rc1tjXVtEXSx0aGlzLGwsYSxkLGgsZix2KX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9LHRoaXN9fTtUcChBM2UsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0p''@;'; put 'put ''O2NvbnN0IHkxPUEzZTtmdW5jdGlvbiBrM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFB0dChjKXt2YXIgbD1mdW5jdGlvbiBGdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGU5e2NvbnN0cnVjdG9yKCl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7azNlKHRoaXMsImluZGV4ZWRWYWx1ZXMiLFtdKSxrM2UodGhpcywiaW5pdFZhbHVlT3JGbiIsdm9pZCAwKSx0aGlzLmluaXRWYWx1ZU9yRm49bH1nZXRWYWx1ZXMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleChsKXtjb25zdCBhPXRoaXMuaW5kZXhlZFZhbHVlcztpZihsPGEubGVuZ3RoKXJldHVybiBhW2xdfXNldFZhbHVlcyhsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9bC5zbGljZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KGwsYSl7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXREZWZhdWx0VmFsdWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsbWwodGhpcy5p''@;'; put 'put ''bml0VmFsdWVPckZuKT9HYShsLTEsYT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGEpKSk6R2EobC0xLCgpPT50aGlzLmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWluaXQobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyhsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2Fs''@;'; put 'put ''SG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gSEsoYyxsLGEpe3JldHVyblsuLi5jLnNsaWNlKDAsbCksLi4uYSwuLi5jLnNsaWNlKGwpXX1mdW5jdGlvbiBLRShjLGwpe3JldHVybiBJbShjLGE9PiExPT09bC5pbmNsdWRl''@;'; put 'put ''cyhhKSl9ZnVuY3Rpb24gTksoYyxsKXtyZXR1cm4geXMoYyxhPT5hLWwuZmlsdGVyKGQ9PmQ8YSkubGVuZ3RoKX1mdW5jdGlvbiBWSyhjLGwpe2NvbnN0IGE9bFswXSxkPWwubGVuZ3RoO3JldHVybiB5cyhjLGg9Pmg+PWE/aCtkOmgpfVRsKGU5LHkxKTtjbGFzcyBEM2UgZXh0ZW5kcyBlOXtj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9VksodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1ISyhkLGwsYSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9S0UodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMu''@;'; put 'put ''aW5kZXhlZFZhbHVlcz1OSyhhLGwpLHN1cGVyLnJlbW92ZShsKX19ZnVuY3Rpb24gQksoYyxsLGEsZCl7Y29uc3QgaD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5bLi4uYy5zbGljZSgwLGgpLC4uLmEubWFwKChmLHYpPT5tbChkKT9kKGYsdik6ZCksLi4udm9pZCAwPT09aD9bXTpjLnNs''@;'; put 'put ''aWNlKGgpXX1mdW5jdGlvbiBqSyhjLGwpe3JldHVybiBJbShjLChhLGQpPT4hMT09PWwuaW5jbHVkZXMoZCkpfWNsYXNzIFptIGV4dGVuZHMgZTl7aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUJLKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBl''@;'; put 'put ''ci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWpLKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9fWNsYXNzIGZQIGV4dGVuZHMgWm17Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIHF1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNsYXNzIHBQIGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEh0dChjLGws''@;'; put 'put ''YSl7cmV0dXJuKGw9ZnVuY3Rpb24gTnR0KGMpe3ZhciBsPWZ1bmN0aW9uIFZ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm9yZGVyT2ZJbmRleGVzIixbXSl9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMub3JkZXJP''@;'; put 'put ''ZkluZGV4ZXMubWFwKGw9PnRoaXMuaW5kZXhlZFZhbHVlc1tsXSl9c2V0VmFsdWVzKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9Wy4uLkFycmF5KGwubGVuZ3RoKS5rZXlzKCldLHN1cGVyLnNldFZhbHVlcyhsKX1zZXRWYWx1ZUF0SW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjIm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLCExPT09dGhpcy5vcmRlck9mSW5kZXhlcy5pbmNsdWRlcyhsKSYmdGhp''@;'; put 'put ''cy5vcmRlck9mSW5kZXhlcy5zcGxpY2UoZCwwLGwpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyVmFsdWUobCl7dGhpcy5vcmRlck9mSW5kZXhlcz1LRSh0aGlzLm9yZGVyT2ZJbmRleGVzLFtsXSksbWwodGhpcy5pbml0VmFsdWVPckZuKT9zdXBlci5zZXRWYWx1ZUF0''@;'; put 'put ''SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4obCkpOnN1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbil9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aD0wLHN1cGVyLnNldERlZmF1bHRWYWx1ZXMobCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUJLKHRoaXMuaW5kZXhlZFZh''@;'; put 'put ''bHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSx0aGlzLm9yZGVyT2ZJbmRleGVzPVZLKHRoaXMub3JkZXJPZkluZGV4ZXMsYSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1qSyh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhl''@;'; put 'put ''cz1LRSh0aGlzLm9yZGVyT2ZJbmRleGVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9TksodGhpcy5vcmRlck9mSW5kZXhlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0RW50cmllcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT5bbCx0aGlzLmdldFZhbHVlQXRJbmRleChsKV0p''@;'; put 'put ''fX1jbGFzcyBxRSBleHRlbmRzIFpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4gcXUodGhpcy5nZXRWYWx1ZXMoKSwobCxhLGQpPT4oYSYmbC5wdXNo''@;'; put 'put ''KGQpLGwpLFtdKX19Y29uc3QgSTNlPW5ldyBNYXAoW1siaGlkaW5nIixmUF0sWyJpbmRleCIsZTldLFsibGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWUiLHBQXSxbInBoeXNpY2FsSW5kZXhUb1ZhbHVlIixabV0sWyJ0cmltbWluZyIscUVdXSk7bGV0IHpLPTA7Y2xhc3MgVUt7Y29uc3RydWN0''@;'; put 'put ''b3IoKXshZnVuY3Rpb24ganR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB6dHQoYyl7dmFyIGw9ZnVuY3Rpb24gVXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY29sbGVjdGlvbiIsbmV3IE1hcCl9cmVnaXN0''@;'; put 'put ''ZXIobCxhKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXMobCkmJih0aGlzLmNvbGxlY3Rpb24uc2V0KGwsYSksYS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSkseksrPTEpfXVucmVnaXN0ZXIobCl7Y29uc3QgYT10aGlzLmNvbGxlY3Rp''@;'; put 'put ''b24uZ2V0KGwpO1BhKGEpJiYoYS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSksekstPTEpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgobCxhKT0+dGhpcy51bnJlZ2lzdGVyKGEpKSx0aGlz''@;'; put 'put ''LmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQobCl7cmV0dXJuIF9jKGwpP0FycmF5LmZyb20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGwpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkobCl7dGhpcy5j''@;'; put 'put ''b2xsZWN0aW9uLmZvckVhY2goYT0+e2EucmVtb3ZlKGwpfSl9aW5zZXJ0VG9FdmVyeShsLGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGQ9PntkLmluc2VydChsLGEpfSl9aW5pdEV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLmluaXQobCl9KX19ZnVuY3Rpb24gWkso''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFd0dChjKXt2YXIgbD1mdW5jdGlvbiBZdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfVRsKFVLLHkxKTtjbGFzcyBSM2UgZXh0ZW5kcyBVS3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVy''@;'; put 'put ''KCksWksodGhpcywibWVyZ2VkVmFsdWVzQ2FjaGUiLFtdKSxaSyh0aGlzLCJhZ2dyZWdhdGlvbkZ1bmN0aW9uIix2b2lkIDApLFpLKHRoaXMsImZhbGxiYWNrVmFsdWUiLHZvaWQgMCksdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uPWwsdGhpcy5mYWxsYmFja1ZhbHVlPWF9Z2V0TWVyZ2VkVmFs''@;'; put 'put ''dWVzKCl7aWYoITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMubWVyZ2VkVmFsdWVzQ2FjaGU7aWYoMD09PXRoaXMuZ2V0TGVuZ3RoKCkpcmV0dXJuW107Y29uc3QgYT15cyh0aGlzLmdldCgpLGY9PmYu''@;'; put 'put ''Z2V0VmFsdWVzKCkpLGQ9W10saD1QYShhWzBdKSYmYVswXS5sZW5ndGh8fDA7Zm9yKGxldCBmPTA7ZjxoO2YrPTEpe2NvbnN0IHY9W107Zm9yKGxldCBNPTA7TTx0aGlzLmdldExlbmd0aCgpO00rPTEpdi5wdXNoKGFbTV1bZl0pO2QucHVzaCh2KX1yZXR1cm4geXMoZCx0aGlzLmFnZ3JlZ2F0''@;'; put 'put ''aW9uRnVuY3Rpb24pfWdldE1lcmdlZFZhbHVlQXRJbmRleChsLGEpe2NvbnN0IGQ9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoYSlbbF07cmV0dXJuIFBhKGQpP2Q6dGhpcy5mYWxsYmFja1ZhbHVlfXVwZGF0ZUNhY2hlKCl7dGhpcy5tZXJnZWRWYWx1ZXNDYWNoZT10aGlzLmdldE1lcmdlZFZhbHVl''@;'; put 'put ''cyghMSl9fWZ1bmN0aW9uIEwzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9''@;'; put 'put ''dmFyIFdLPW5ldyBXZWFrTWFwO2NsYXNzIE8zZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBHdHQoYyxsLGEpeyhmdW5jdGlvbiAkdHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLFdLLFtdKX1zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGwpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIHF0dChjLGwpe3JldHVybiBjLmdldChMM2UoYyxsKSl9KFdLLHRoaXMpKSx0aGlz''@;'; put 'put ''fXVuc3Vic2NyaWJlKCl7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygidW5zdWJzY3JpYmUiKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXN9X3dyaXRlKGwpe3JldHVybiBsLmxlbmd0aD4wJiZ0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCksdGhpc31fd3JpdGVJbml0aWFsQ2hh''@;'; put 'put ''bmdlcyhsKXshZnVuY3Rpb24gS3R0KGMsbCxhKXtjLnNldChMM2UoYyxsKSxhKX0oV0ssdGhpcyxsKX19ZnVuY3Rpb24gUDNlKGMsbCl7Y29uc3QgYT1bXTtsZXQgZD0wLGg9MDtmb3IoO2Q8Yy5sZW5ndGgmJmg8bC5sZW5ndGg7ZCsrLGgrKyljW2RdIT09bFtoXSYmYS5wdXNoKHtvcDoicmVw''@;'; put 'put ''bGFjZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2RdLG5ld1ZhbHVlOmxbaF19KTtmb3IoO2Q8bC5sZW5ndGg7ZCsrKWEucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6ZCxvbGRWYWx1ZTp2b2lkIDAsbmV3VmFsdWU6bFtkXX0pO2Zvcig7aDxjLmxlbmd0aDtoKyspYS5wdXNoKHtvcDoicmVtb3ZlIixp''@;'; put 'put ''bmRleDpoLG9sZFZhbHVlOmNbaF0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGF9ZnVuY3Rpb24gWEUoYyxsLGEpeyhmdW5jdGlvbiBYdHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3''@;'; put 'put ''aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFkyKGMsbCl7cmV0dXJuIGMuZ2V0KEYzZShjLGwpKX1mdW5jdGlvbiBnUChjLGwsYSl7cmV0dXJuIGMuc2V0KEYzZShjLGwpLGEpLGF9ZnVuY3Rpb24gRjNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChPM2UseTEpO3ZhciBtUD1uZXcgV2Vha01hcCxKRT1uZXcgV2Vha01hcCx2UD1u''@;'; put 'put ''ZXcgV2Vha01hcCxiUD1uZXcgV2Vha01hcCx5UD1uZXcgV2Vha01hcDtjbGFzcyBKdHR7Y29uc3RydWN0b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O1hFKHRoaXMsbVAsbmV3IFNl''@;'; put 'put ''dCksWEUodGhpcyxKRSxbXSksWEUodGhpcyx2UCxbXSksWEUodGhpcyxiUCwhMSksWEUodGhpcyx5UCwhMSksZ1AoeVAsdGhpcyxsPz8hMSl9Y3JlYXRlT2JzZXJ2ZXIoKXtjb25zdCBsPW5ldyBPM2U7cmV0dXJuIFkyKG1QLHRoaXMpLmFkZChsKSxsLmFkZExvY2FsSG9vaygidW5zdWJzY3Jp''@;'; put 'put ''YmUiLCgpPT57WTIobVAsdGhpcykuZGVsZXRlKGwpfSksbC5fd3JpdGVJbml0aWFsQ2hhbmdlcyhQM2UoWTIoSkUsdGhpcyksWTIodlAsdGhpcykpKSxsfWVtaXQobCl7bGV0IGE9WTIodlAsdGhpcyk7KCFZMihiUCx0aGlzKXx8WTIoSkUsdGhpcykubGVuZ3RoIT09bC5sZW5ndGgpJiYoMD09''@;'; put 'put ''PWwubGVuZ3RoP2w9bmV3IEFycmF5KGEubGVuZ3RoKS5maWxsKFkyKHlQLHRoaXMpKTpnUChKRSx0aGlzLG5ldyBBcnJheShsLmxlbmd0aCkuZmlsbChZMih5UCx0aGlzKSkpLFkyKGJQLHRoaXMpfHwoZ1AoYlAsdGhpcywhMCksYT1ZMihKRSx0aGlzKSkpO2NvbnN0IGQ9UDNlKGEsbCk7WTIo''@;'; put 'put ''bVAsdGhpcykuZm9yRWFjaChoPT5oLl93cml0ZShkKSksZ1AodlAsdGhpcyxsKX19ZnVuY3Rpb24gSzEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFF0dChjKXt2YXIgbD1mdW5jdGlvbiBlbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNsYXNzIFlLe2NvbnN0cnVjdG9yKCl7SzEodGhpcywiaW5kZXhlc1NlcXVlbmNlIixuZXcgRDNlKSxLMSh0aGlzLCJ0cmltbWluZ01hcHNDb2xsZWN0aW9uIixuZXcgUjNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSksSzEodGhpcywiaGlkaW5nTWFwc0NvbGxlY3Rpb24iLG5l''@;'; put 'put ''dyBSM2UobD0+bC5zb21lKGE9PiEwPT09YSksITEpKSxLMSh0aGlzLCJ2YXJpb3VzTWFwc0NvbGxlY3Rpb24iLG5ldyBVSyksSzEodGhpcywiaGlkaW5nQ2hhbmdlc09ic2VydmFibGUiLG5ldyBKdHQoe2luaXRpYWxJbmRleFZhbHVlOiExfSkpLEsxKHRoaXMsIm5vdFRyaW1tZWRJbmRleGVz''@;'; put 'put ''Q2FjaGUiLFtdKSxLMSh0aGlzLCJub3RIaWRkZW5JbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJpc0JhdGNoZWQiLCExKSxLMSh0aGlzLCJpbmRleGVzU2VxdWVuY2VDaGFuZ2VkIiwhMSksSzEodGhpcywiaW5kZXhlc0NoYW5nZVNvdXJjZSIsdm9pZCAwKSxLMSh0aGlzLCJ0cmltbWVkSW5k''@;'; put 'put ''ZXhlc0NoYW5nZWQiLCExKSxLMSh0aGlzLCJoaWRkZW5JbmRleGVzQ2hhbmdlZCIsITEpLEsxKHRoaXMsInJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZSIsW10pLEsxKHRoaXMsImZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlIixuZXcgTWFwKSxLMSh0aGlzLCJmcm9tVmlz''@;'; put 'put ''dWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlIixuZXcgTWFwKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1Nl''@;'; put 'put ''cXVlbmNlQ2hhbmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMudHJpbW1lZElu''@;'; put 'put ''ZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMuaGlkZGVuSW5kZXhl''@;'; put 'put ''c0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNo''@;'; put 'put ''YW5nZSIsbCx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hlKCl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGwpe2lmKCJoaWRp''@;'; put 'put ''bmciIT09bCl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2x9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVhdGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAobCxhLGQpe3JldHVybiB0aGlzLnJlZ2lz''@;'; put 'put ''dGVyTWFwKGwsZnVuY3Rpb24gQnR0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFJM2UuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIG1hcCB0eXBlICgiJHtjfSIpIGRvZXMgbm90IGV4''@;'; put 'put ''aXN0LmApO3JldHVybiBuZXcoSTNlLmdldChjKSkobCl9KGEsZCkpfXJlZ2lzdGVyTWFwKGwsYSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChsKSl0''@;'; put 'put ''aHJvdyBFcnJvcihgTWFwIHdpdGggbmFtZSAiJHtsfSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2EgaW5zdGFuY2VvZiBxRT90aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTphIGluc3RhbmNlb2YgZlA/dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5y''@;'; put 'put ''ZWdpc3RlcihsLGEpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk7Y29uc3QgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmEuaW5pdChkKSxhfXVucmVnaXN0ZXJNYXAobCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0''@;'; put 'put ''ZXIobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCl9dW5yZWdpc3RlckFsbCgpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29s''@;'; put 'put ''bGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlW2xdO3JldHVybiBQYShhKT9hOm51bGx9Z2V0UGh5c2lj''@;'; put 'put ''YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpe2NvbnN0IGE9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbbF07cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2Fj''@;'; put 'put ''aGUuZ2V0KGwpO3JldHVybiBQYShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJn''@;'; put 'put ''dW1lbnRzWzJdO2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5oYXMobCkpcmV0dXJuIGw7Y29uc3QgZj1BcnJheS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCB2PS0xO3JldHVybiB2PWE+MD9mLmZpbmRJbmRleChNPT5NPmwpOmYucmV2ZXJzZSgpLmZpbmRJbmRleChNPT5NPGwpLC0xPT09dj9kP3RoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsLWEsITEpOm51bGw6Zlt2XX1pbml0VG9M''@;'; put 'put ''ZW5ndGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5k''@;'; put 'put ''ZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbml0KGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWlu''@;'; put 'put ''Z01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVz''@;'; put 'put ''dW1lT3BlcmF0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKGwpe2NvbnN0IGE9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihsPGEpe2NvbnN0IGQ9Wy4uLkFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCktbCkua2V5cygpXS5tYXAoaD0+aCts''@;'; put 'put ''KTt0aGlzLnJlbW92ZUluZGV4ZXMoZCl9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoYSxsLWEpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2VxdWVuY2UobCl7dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdl''@;'; put 'put ''U291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMobCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5k''@;'; put 'put ''ZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNUcmltbWVkKGQp''@;'; put 'put ''KX1nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBd''@;'; put 'put ''KT90aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRl''@;'; put 'put ''cmFibGVJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmZpbHRlcihkPT4hMT09''@;'; put 'put ''PXRoaXMuaXNIaWRkZW4oZCkpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJbmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKGws''@;'; put 'put ''YSl7Im51bWJlciI9PXR5cGVvZiBsJiYobD1bbF0pO2NvbnN0IGQ9eXMobCxaPT50aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KFopKSxoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxmPWwubGVuZ3RoLHY9S0UodGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKSxkKSxN''@;'; put 'put ''PXYuZmlsdGVyKFo9PiExPT09dGhpcy5pc1RyaW1tZWQoWikpO2xldCBEPXYuaW5kZXhPZihNW00ubGVuZ3RoLTFdKSsxO2ErZjxoJiYoRD12LmluZGV4T2YoTVthXSkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0ibW92ZSIsdGhpcy5zZXRJbmRleGVzU2VxdWVuY2UoSEsodixELGQpKSx0''@;'; put 'put ''aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwfWlzVHJpbW1lZChsKXtyZXR1cm4gdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pc0hpZGRlbihsKXtyZXR1cm4gdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0''@;'; put 'put ''SW5kZXgobCl9aW5zZXJ0SW5kZXhlcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpW2xdLGg9UGEoZCk/ZDp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLGY9dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmNsdWRlcyhkKT90aGlzLmdldEluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZSgpLmluZGV4T2YoZCk6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSx2PXlzKG5ldyBBcnJheShhKS5maWxsKGgpLChNLEQpPT5NK0QpO3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Imluc2VydCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5zZXJ0''@;'; put 'put ''KGYsdiksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluc2VydFRv''@;'; put 'put ''RXZlcnkoZix2KSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX1yZW1vdmVJbmRleGVzKGwpe3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9InJlbW92ZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UucmVtb3ZlKGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJj''@;'; put 'put ''ZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRp''@;'; put 'put ''b25zKCl9dXBkYXRlQ2FjaGUoKXsoITA9PT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl8fCExPT09dGhpcy5pc0JhdGNoZWQmJiEwPT09KHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZHx8dGhpcy50cmltbWVkSW5kZXhlc0NoYW5n''@;'; put 'put ''ZWR8fHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQpKSYmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9dGhpcy5nZXROb3RUcmltbWVkSW5k''@;'; put 'put ''ZXhlcyghMSksdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9dGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCExKSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT10aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCExKSx0aGlzLmNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRl''@;'; put 'put ''eGVzKCksdGhpcy5jYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzKCksdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCYmdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5lbWl0KHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkpLHRoaXMucnVuTG9j''@;'; put 'put ''YWxIb29rcygiY2FjaGVVcGRhdGVkIix7aW5kZXhlc1NlcXVlbmNlQ2hhbmdlZDp0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQsdHJpbW1lZEluZGV4ZXNDaGFuZ2VkOnRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkLGhpZGRlbkluZGV4ZXNDaGFuZ2VkOnRoaXMuaGlkZGVuSW5kZXhlc0No''@;'; put 'put ''YW5nZWR9KSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITEsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSl9Y2FjaGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4''@;'; put 'put ''ZXNMZW5ndGgoKTt0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0IGQ9dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChhKTt0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLnNldChk''@;'; put 'put ''LGEpfX1jYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSksaD10aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGQpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5zZXQoaCxhKX19fWZ1bmN0aW9uIEgzZShjKXtjb25zdCBhPS9eKFthLXpBLVpdezJ9KS0o''@;'; put 'put ''W2EtekEtWl17Mn0pJC8uZXhlYyhjKTtyZXR1cm4gYT9gJHthWzFdLnRvTG93ZXJDYXNlKCl9LSR7YVsyXS50b1VwcGVyQ2FzZSgpfWA6Y31mdW5jdGlvbiBOM2UoYyl7UGEoYykmJk4kKGdsYExhbmd1YWdlIHdpdGggY29kZSAiJHtjfSIgd2FzIG5vdCBmb3VuZC4gWW91IHNob3VsZCByZWdp''@;'; put 'put ''c3RlciBwYXJ0aWN1bGFyIGxhbmd1YWdlXHgyMAogICAgYmVmb3JlIHVzaW5nIGl0LiBSZWFkIG1vcmUgYWJvdXQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9kb2NzLmhhbmRzb250YWJsZS5jb20vaTE4bi9taXNzaW5nLWxhbmd1YWdlLWNvZGUuYCl9VGwoWUsseTEpO2NvbnN0e3JlZ2lzdGVy''@;'; put 'put ''OnJudCxnZXRWYWx1ZXM6aW50fT1yMygicGhyYXNlRm9ybWF0dGVycyIpOyFmdW5jdGlvbiBhbnQoYyxsKXtybnQoYyxsKX0oInBsdXJhbGl6ZSIsZnVuY3Rpb24gbm50KGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJk51bWJlci5pc0ludGVnZXIobCk/Y1tsXTpjfSk7Y29uc3QgVjNl''@;'; put 'put ''PSJDb250ZXh0TWVudTppdGVtcyIsR0s9YCR7VjNlfS5ub0l0ZW1zYCwkSz1gJHtWM2V9Lmluc2VydFJvd0Fib3ZlYCxLSz1gJHtWM2V9Lmluc2VydFJvd0JlbG93YCxxSz1gJHtWM2V9Lmluc2VydENvbHVtbk9uVGhlTGVmdGAsWEs9YCR7VjNlfS5pbnNlcnRDb2x1bW5PblRoZVJpZ2h0YCxK''@;'; put 'put ''Sz1gJHtWM2V9LnJlbW92ZVJvd2AsUUs9YCR7VjNlfS5yZW1vdmVDb2x1bW5gLGVxPWAke1YzZX0udW5kb2AsdHE9YCR7VjNlfS5yZWRvYCxfUD1gJHtWM2V9LnJlYWRPbmx5YCxucT1gJHtWM2V9LmNsZWFyQ29sdW1uYCxycT1gJHtWM2V9LmNvcHlgLGlxPWAke1YzZX0uY29weVdpdGhIZWFk''@;'; put 'put ''ZXJzYCxhcT1gJHtWM2V9LmNvcHlXaXRoR3JvdXBIZWFkZXJzYCxvcT1gJHtWM2V9LmNvcHlIZWFkZXJzT25seWAsc3E9YCR7VjNlfS5jdXRgLGxxPWAke1YzZX0uZnJlZXplQ29sdW1uYCxjcT1gJHtWM2V9LnVuZnJlZXplQ29sdW1uYCx1cT1gJHtWM2V9Lm1lcmdlQ2VsbHNgLGRxPWAke1Yz''@;'; put 'put ''ZX0udW5tZXJnZUNlbGxzYCxocT1gJHtWM2V9LmFkZENvbW1lbnRgLGZxPWAke1YzZX0uZWRpdENvbW1lbnRgLHBxPWAke1YzZX0ucmVtb3ZlQ29tbWVudGAsZ3E9YCR7VjNlfS5yZWFkT25seUNvbW1lbnRgLG1xPWAke1YzZX0uYWxpZ25gLHZxPWAke1YzZX0uYWxpZ24ubGVmdGAsYnE9YCR7''@;'; put 'put ''VjNlfS5hbGlnbi5jZW50ZXJgLHlxPWAke1YzZX0uYWxpZ24ucmlnaHRgLF9xPWAke1YzZX0uYWxpZ24uanVzdGlmeWAsd3E9YCR7VjNlfS5hbGlnbi50b3BgLENxPWAke1YzZX0uYWxpZ24ubWlkZGxlYCxTcT1gJHtWM2V9LmFsaWduLmJvdHRvbWAsTXE9YCR7VjNlfS5ib3JkZXJzYCx4cT1g''@;'; put 'put ''JHtWM2V9LmJvcmRlcnMudG9wYCxFcT1gJHtWM2V9LmJvcmRlcnMucmlnaHRgLFRxPWAke1YzZX0uYm9yZGVycy5ib3R0b21gLEFxPWAke1YzZX0uYm9yZGVycy5sZWZ0YCxrcT1gJHtWM2V9LmJvcmRlcnMucmVtb3ZlYCxEcT1gJHtWM2V9Lm5lc3RlZEhlYWRlcnMuaW5zZXJ0Q2hpbGRSb3dg''@;'; put 'put ''LElxPWAke1YzZX0ubmVzdGVkSGVhZGVycy5kZXRhY2hGcm9tUGFyZW50YCxScT1gJHtWM2V9LmhpZGVDb2x1bW5gLExxPWAke1YzZX0uc2hvd0NvbHVtbmAsT3E9YCR7VjNlfS5oaWRlUm93YCxQcT1gJHtWM2V9LnNob3dSb3dgLHExPSJGaWx0ZXJzOiIsV2M9YCR7cTF9Y29uZGl0aW9uc2As''@;'; put 'put ''d1A9YCR7V2N9Lm5vbmVgLEZxPWAke1djfS5pc0VtcHR5YCxIcT1gJHtXY30uaXNOb3RFbXB0eWAsTnE9YCR7V2N9LmlzRXF1YWxUb2AsVnE9YCR7V2N9LmlzTm90RXF1YWxUb2AsQnE9YCR7V2N9LmJlZ2luc1dpdGhgLGpxPWAke1djfS5lbmRzV2l0aGAsenE9YCR7V2N9LmNvbnRhaW5zYCxV''@;'; put 'put ''cT1gJHtXY30uZG9lc05vdENvbnRhaW5gLHNudD1gJHtXY30uYnlWYWx1ZWAsWnE9YCR7V2N9LmdyZWF0ZXJUaGFuYCxXcT1gJHtXY30uZ3JlYXRlclRoYW5PckVxdWFsVG9gLFlxPWAke1djfS5sZXNzVGhhbmAsR3E9YCR7V2N9Lmxlc3NUaGFuT3JFcXVhbFRvYCwkcT1gJHtXY30uaXNCZXR3''@;'; put 'put ''ZWVuYCxLcT1gJHtXY30uaXNOb3RCZXR3ZWVuYCxxcT1gJHtXY30uYWZ0ZXJgLFhxPWAke1djfS5iZWZvcmVgLEpxPWAke1djfS50b2RheWAsUXE9YCR7V2N9LnRvbW9ycm93YCxlWD1gJHtXY30ueWVzdGVyZGF5YCx0WD1gJHtxMX1sYWJlbHMuZmlsdGVyQnlDb25kaXRpb25gLG5YPWAke3Ex''@;'; put 'put ''fWxhYmVscy5maWx0ZXJCeVZhbHVlYCxyWD1gJHtxMX1sYWJlbHMuY29uanVuY3Rpb25gLENQPWAke3ExfWxhYmVscy5kaXNqdW5jdGlvbmAsU1A9YCR7cTF9dmFsdWVzLmJsYW5rQ2VsbHNgLGlYPWAke3ExfWJ1dHRvbnMuc2VsZWN0QWxsYCxhWD1gJHtxMX1idXR0b25zLmNsZWFyYCxvWD1g''@;'; put 'put ''JHtxMX1idXR0b25zLm9rYCxzWD1gJHtxMX1idXR0b25zLmNhbmNlbGAsbFg9YCR7cTF9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWFyY2hgLGNYPWAke3ExfWJ1dHRvbnMucGxhY2Vob2xkZXIudmFsdWVgLHVYPWAke3ExfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2Vjb25kVmFsdWVgLGRYPSJDaGVj''@;'; put 'put ''a2JveFJlbmRlcmVyOiIsaFg9YCR7ZFh9Y2hlY2tlZGAsZlg9YCR7ZFh9dW5jaGVja2VkYCxCM2U9e2xhbmd1YWdlQ29kZToiZW4tVVMiLFtHS106Ik5vIGF2YWlsYWJsZSBvcHRpb25zIixbJEtdOiJJbnNlcnQgcm93IGFib3ZlIixbS0tdOiJJbnNlcnQgcm93IGJlbG93IixbcUtdOiJJbnNl''@;'; put 'put ''cnQgY29sdW1uIGxlZnQiLFtYS106Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtKS106WyJSZW1vdmUgcm93IiwiUmVtb3ZlIHJvd3MiXSxbUUtdOlsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0sW2VxXToiVW5kbyIsW3RxXToiUmVkbyIsW19QXToiUmVhZCBvbmx5IixbbnFdOiJD''@;'; put 'put ''bGVhciBjb2x1bW4iLFttcV06IkFsaWdubWVudCIsW3ZxXToiTGVmdCIsW2JxXToiQ2VudGVyIixbeXFdOiJSaWdodCIsW19xXToiSnVzdGlmeSIsW3dxXToiVG9wIixbQ3FdOiJNaWRkbGUiLFtTcV06IkJvdHRvbSIsW2xxXToiRnJlZXplIGNvbHVtbiIsW2NxXToiVW5mcmVlemUgY29sdW1u''@;'; put 'put ''IixbTXFdOiJCb3JkZXJzIixbeHFdOiJUb3AiLFtFcV06IlJpZ2h0IixbVHFdOiJCb3R0b20iLFtBcV06IkxlZnQiLFtrcV06IlJlbW92ZSBib3JkZXIocykiLFtocV06IkFkZCBjb21tZW50IixbZnFdOiJFZGl0IGNvbW1lbnQiLFtwcV06IkRlbGV0ZSBjb21tZW50IixbZ3FdOiJSZWFkLW9u''@;'; put 'put ''bHkgY29tbWVudCIsW3VxXToiTWVyZ2UgY2VsbHMiLFtkcV06IlVubWVyZ2UgY2VsbHMiLFtycV06IkNvcHkiLFtpcV06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbYXFdOlsiQ29weSB3aXRoIGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJz''@;'; put 'put ''Il0sW29xXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtzcV06IkN1dCIsW0RxXToiSW5zZXJ0IGNoaWxkIHJvdyIsW0lxXToiRGV0YWNoIGZyb20gcGFyZW50IixbUnFdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbTHFdOlsiU2hvdyBjb2x1bW4i''@;'; put 'put ''LCJTaG93IGNvbHVtbnMiXSxbT3FdOlsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSxbUHFdOlsiU2hvdyByb3ciLCJTaG93IHJvd3MiXSxbd1BdOiJOb25lIixbRnFdOiJJcyBlbXB0eSIsW0hxXToiSXMgbm90IGVtcHR5IixbTnFdOiJJcyBlcXVhbCB0byIsW1ZxXToiSXMgbm90IGVxdWFsIHRv''@;'; put 'put ''IixbQnFdOiJCZWdpbnMgd2l0aCIsW2pxXToiRW5kcyB3aXRoIixbenFdOiJDb250YWlucyIsW1VxXToiRG9lcyBub3QgY29udGFpbiIsW1pxXToiR3JlYXRlciB0aGFuIixbV3FdOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iLFtZcV06Ikxlc3MgdGhhbiIsW0dxXToiTGVzcyB0aGFuIG9y''@;'; put 'put ''IGVxdWFsIHRvIixbJHFdOiJJcyBiZXR3ZWVuIixbS3FdOiJJcyBub3QgYmV0d2VlbiIsW3FxXToiQWZ0ZXIiLFtYcV06IkJlZm9yZSIsW0pxXToiVG9kYXkiLFtRcV06IlRvbW9ycm93IixbZVhdOiJZZXN0ZXJkYXkiLFtTUF06IkJsYW5rIGNlbGxzIixbdFhdOiJGaWx0ZXIgYnkgY29uZGl0''@;'; put 'put ''aW9uIixbblhdOiJGaWx0ZXIgYnkgdmFsdWUiLFtyWF06IkFuZCIsW0NQXToiT3IiLFtpWF06IlNlbGVjdCBhbGwiLFthWF06IkNsZWFyIixbb1hdOiJPSyIsW3NYXToiQ2FuY2VsIixbbFhdOiJTZWFyY2giLFtjWF06IlZhbHVlIixbdVhdOiJTZWNvbmQgdmFsdWUiLFtoWF06IkNoZWNrZWQi''@;'; put 'put ''LFtmWF06IlVuY2hlY2tlZCJ9LGxudD1XLHBYPUIzZS5sYW5ndWFnZUNvZGUse3JlZ2lzdGVyOmNudCxnZXRJdGVtOmozZSxoYXNJdGVtOnVudCxnZXRWYWx1ZXM6ZG50fT1yMygibGFuZ3VhZ2VzRGljdGlvbmFyaWVzIik7ZnVuY3Rpb24gejNlKGMsbCl7bGV0IGE9YyxkPWw7cmV0dXJuIHFv''@;'; put 'put ''KGMpJiYoZD1jLGE9ZC5sYW5ndWFnZUNvZGUpLGZ1bmN0aW9uIGhudChjLGwpe2MhPT1wWCYmZnVuY3Rpb24gdG50KGMsbCl7WG8obCwoYSxkKT0+e19jKGNbZF0pJiYoY1tkXT1hKX0pfShsLGozZShwWCkpfShhLGQpLGNudChhLGcxKGQpKSxnMShkKX1mdW5jdGlvbiBVM2UoYyl7cmV0dXJu''@;'; put 'put ''IGdYKGMpP2cxKGozZShjKSk6bnVsbH1mdW5jdGlvbiBnWChjKXtyZXR1cm4gdW50KGMpfWZ1bmN0aW9uIFozZShjLGwsYSl7Y29uc3QgZD1VM2UoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kW2xdO2lmKF9jKGgpKXJldHVybiBudWxsO2NvbnN0IGY9ZnVuY3Rpb24gcG50''@;'; put 'put ''KGMsbCl7bGV0IGE9YztyZXR1cm4gWW4oZnVuY3Rpb24gb250KCl7cmV0dXJuIGludCgpfSgpLGQ9PnthPWQoYyxsKX0pLGF9KGgsYSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZik/ZlswXTpmfXozZShCM2UpO2NvbnN0IFczZT0iYWN0aXZlLWhlYWRlciIsbVg9ImhlYWRlciIsdlg9ImFyZWEi''@;'; put 'put ''LFFFPSJmb2N1cyI7Y2xhc3MgWTNle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZXR0aW5ncz1sLHRoaXMuY2VsbFJhbmdlPWF8fG51bGx9aXNFbXB0eSgpe3JldHVybiBudWxsPT09dGhpcy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzLmNlbGxSYW5nZT10aGlz''@;'; put 'put ''LnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNlbGxSYW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLmZyb209YSwhMDtpZih0aGlz''@;'; put 'put ''LmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhpc31nZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlzLmNlbGxSYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCks''@;'; put 'put ''YT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19ZGVzdHJveSgpe3RoaXMucnVuTG9jYWxIb29rcygiZGVzdHJveSIpfX1UbChZM2UseTEpO2NvbnN0IF9udD1ZM2U7Y29uc3QgeGc9Y2xhc3MgTW50IGV4dGVu''@;'; put 'put ''ZHMgX250e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5jdGlvbiB3bnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIENudChjKXt2YXIgbD1mdW5jdGlvbiBTbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0''@;'; put 'put ''aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09''@;'; put 'put ''PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0''@;'; put 'put ''aGlzLCJ2aXN1YWxDZWxsUmFuZ2UiLG51bGwpLHRoaXMudmlzdWFsQ2VsbFJhbmdlPWF8fG51bGwsdGhpcy5jb21taXQoKX1hZGQobCl7cmV0dXJuIG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZT90aGlzLnZpc3VhbENlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShs''@;'; put 'put ''KTp0aGlzLnZpc3VhbENlbGxSYW5nZS5leHBhbmQobCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLnZpc3VhbENlbGxSYW5nZT1udWxsLHN1cGVyLmNsZWFyKCl9dHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KGwpe2xldHtmcm9tOmEsdG86ZH09bCxoPXRoaXMuZ2V0TmVhcmVzdE5vdEhp''@;'; put 'put ''ZGRlbkNvb3JkcyhhLDEpLGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGQsLTEpO3JldHVybiBudWxsPT09aHx8bnVsbD09PWY/bnVsbDooKGgucm93PmYucm93fHxoLmNvbD5mLmNvbCkmJihoPWEsZj1kKSx0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShoLGgsZikpfWdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YTtjb25zdCBoPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHRoaXMuc2V0dGluZ3Mucm93SW5kZXhNYXBwZXIsbC5yb3cs''@;'; put 'put ''YSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyLGwuY29sLGQpO3JldHVybiBudWxsPT09Zj9udWxsOnRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEsZCl7cmV0dXJuIGE8MD9hOmwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEsZCl9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2NvbnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9u''@;'; put 'put ''bHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBhPWwuZnJvbS5jbG9uZSgpLm5vcm1hbGl6ZSgpLGQ9Ik4tUyI9''@;'; put 'put ''PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCk/MTotMSxoPSJXLUUiPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCk/MTotMSxmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCk7bGV0IHY9bnVsbDtpZigobnVs''@;'; put 'put ''bD09PWZ8fG51bGw9PT1mLmNvbHx8bnVsbD09PWYucm93KSYmKHY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsZCxoKSksbnVsbCE9PXYmJmwub3ZlcmxhcHModikpe2NvbnN0IE09bC5oaWdobGlnaHQuY2xvbmUoKTtpZihNLnJvdz49MCYmKE0ucm93PXYucm93KSxNLmNvbD49''@;'; put 'put ''MCYmKE0uY29sPXYuY29sKSxudWxsPT09dGhpcy5jZWxsUmFuZ2Upe2NvbnN0IEQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoTSk7dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoRCl9bC5zZXRIaWdobGlnaHQoTSl9cmV0dXJuImZv''@;'; put 'put ''Y3VzIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSYmbnVsbCE9PWYmJm51bGw9PT12JiZsLnNldEhpZ2hsaWdodCh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmNlbGxSYW5nZTtyZXR1cm5bTWF0''@;'; put 'put ''aC5taW4obC5yb3csYS5yb3cpLE1hdGgubWluKGwuY29sLGEuY29sKSxNYXRoLm1heChsLnJvdyxhLnJvdyksTWF0aC5tYXgobC5jb2wsYS5jb2wpXX1nZXRWaXN1YWxDb3JuZXJzKCl7Y29uc3QgbD10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5n''@;'; put 'put ''ZS5nZXRUb3BTdGFydENvcm5lcigpKSxhPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobCxhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpLGg9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYSk7cmV0dXJuIG51bGw9PT1kLnJvd3x8bnVsbD09PWQuY29sfHxudWxsPT09aC5yb3d8fG51bGw9PT1oLmNvbD9udWxsOnRoaXMu''@;'; put 'put ''c2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGQsZCxoKX19O2Z1bmN0aW9uIGJYKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTpXM2V9KX1mdW5jdGlvbiB4bnQoYyl7bGV0e2FyZWFDb3Ju''@;'; put 'put ''ZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImFyZWEiLGNyZWF0ZUxheWVyczohMCxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rpb25UeXBlOnZYfSl9ZnVuY3Rpb24gRW50KGMpe2xldHsuLi5s''@;'; put 'put ''fT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IiwuLi5sLHNlbGVjdGlvblR5cGU6dlh9KX1mdW5jdGlvbiBUbnQoYyl7bGV0e2NvbHVtbkNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJjb2x1bW4i''@;'; put 'put ''fSl9ZnVuY3Rpb24gRzNlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTptWH0pfWZ1bmN0aW9uIEludChjKXtsZXR7cm93Q2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05h''@;'; put 'put ''bWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6InJvdyJ9KX1mdW5jdGlvbiBqZChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT250KGMpe3ZhciBsPWZ1bmN0aW9uIFBudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24g''@;'; put 'put ''RWcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBQcD1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBGbnR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFJudChjLGwpeyhmdW5jdGlvbiBMbnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSko''@;'; put 'put ''YyxsKSxsLmFkZChjKX0pKHRoaXMsUHApLGpkKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksamQodGhpcywibGF5ZXJMZXZlbCIsMCksamQodGhpcywiZm9jdXMiLHZvaWQgMCksamQodGhpcywiZmlsbCIsdm9pZCAwKSxqZCh0aGlzLCJsYXllcmVkQXJlYXMiLG5ldyBNYXApLGpkKHRoaXMsImFy''@;'; put 'put ''ZWFzIixuZXcgTWFwKSxqZCh0aGlzLCJyb3dIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJjb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVSb3dIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVDb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3Rp''@;'; put 'put ''dmVDb3JuZXJIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJyb3dIaWdobGlnaHRzIixuZXcgTWFwKSxqZCh0aGlzLCJjb2x1bW5IaWdobGlnaHRzIixuZXcgTWFwKSxqZCh0aGlzLCJjdXN0b21TZWxlY3Rpb25zIixbXSksdGhpcy5vcHRpb25zPWwsdGhpcy5mb2N1cz1mdW5jdGlvbiBBbnQo''@;'; put 'put ''Yyl7bGV0e2NlbGxDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImN1cnJlbnQiLGhlYWRlckF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0sYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4u''@;'; put 'put ''LmEsc2VsZWN0aW9uVHlwZTpRRX0pfShsKSx0aGlzLmZpbGw9ZnVuY3Rpb24gRG50KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiZmlsbCIsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjZmYwMDAwIn0sLi4ubCxzZWxlY3Rpb25UeXBlOiJmaWxsIn0pfShsKX1pc0Vu''@;'; put 'put ''YWJsZWRGb3IobCxhKXtsZXQgZD1sO2w9PT1RRSYmKGQ9ImN1cnJlbnQiKTtsZXQgaD10aGlzLm9wdGlvbnMuZGlzYWJsZWRDZWxsU2VsZWN0aW9uKGEucm93LGEuY29sKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPVtoXSksITE9PT1ofHxBcnJheS5pc0FycmF5KGgpJiYhaC5pbmNs''@;'; put 'put ''dWRlcyhkKX11c2VMYXllckxldmVsKCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0aGlzfWdldEZvY3VzKCl7cmV0dXJuIHRoaXMuZm9jdXN9Z2V0RmlsbCgpe3JldHVybiB0aGlzLmZpbGx9''@;'; put 'put ''Y3JlYXRlTGF5ZXJlZEFyZWEoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMubGF5ZXJlZEFyZWFzLHhudCl9Z2V0TGF5ZXJlZEFyZWFzKCl7cmV0dXJuWy4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpXX1jcmVhdGVBcmVhKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcp''@;'; put 'put ''LmNhbGwodGhpcyx0aGlzLmFyZWFzLEVudCl9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMoKV19Y3JlYXRlUm93SGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLnJvd0hlYWRlcnMsRzNlKX1nZXRSb3dIZWFkZXJzKCl7cmV0dXJuWy4u''@;'; put 'put ''LnRoaXMucm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhlYWRlcnMsRzNlKX1nZXRDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3Jl''@;'; put 'put ''YXRlQWN0aXZlUm93SGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZVJvd0hlYWRlcnMsYlgpfWdldEFjdGl2ZVJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb2x1bW5IZWFk''@;'; put 'put ''ZXIoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycyxiWCl9Z2V0QWN0aXZlQ29sdW1uSGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpe3Jl''@;'; put 'put ''dHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLGJYKX1nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlUm93SGlnaGxpZ2h0KCl7cmV0dXJuIEVnKFBwLHRo''@;'; put 'put ''aXMsVGcpLmNhbGwodGhpcyx0aGlzLnJvd0hpZ2hsaWdodHMsSW50KX1nZXRSb3dIaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmNvbHVt''@;'; put 'put ''bkhpZ2hsaWdodHMsVG50KX1nZXRDb2x1bW5IaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVzKCldfWFkZEN1c3RvbVNlbGVjdGlvbihs''@;'; put 'put ''KXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChmdW5jdGlvbiBrbnQoYyl7bGV0e2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTphLC4uLmR9PWM7cmV0dXJuIG5ldyB4Zyh7Li4ubCwuLi5kLHNlbGVjdGlvblR5cGU6ImN1c3RvbS1zZWxlY3Rpb24ifSxhKX0oey4uLnRoaXMub3B0aW9ucywu''@;'; put 'put ''Li5sfSkpfWNsZWFyKCl7dGhpcy5mb2N1cy5jbGVhcigpLHRoaXMuZmlsbC5jbGVhcigpLFluKHRoaXMuYXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLnJvd0hlYWRlcnMudmFsdWVzKCks''@;'; put 'put ''bD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0p''@;'; put 'put ''LFluKHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pfVtTeW1ib2wuaXRlcmF0''@;'; put 'put ''b3JdKCl7cmV0dXJuW3RoaXMuZm9jdXMsdGhpcy5maWxsLC4uLnRoaXMuYXJlYXMudmFsdWVzKCksLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZVJvd0hl''@;'; put 'put ''YWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY3Vz''@;'; put 'put ''dG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1mdW5jdGlvbiBUZyhjLGwpe2NvbnN0IGE9dGhpcy5sYXllckxldmVsO2lmKGMuaGFzKGEpKXJldHVybiBjLmdldChhKTtjb25zdCBkPWwoe2xheWVyTGV2ZWw6YSwuLi50aGlzLm9wdGlvbnN9KTtyZXR1cm4gYy5zZXQoYSxkKSxk''@;'; put 'put ''fWNvbnN0IEhudD1GbnQ7ZnVuY3Rpb24gJDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBObnQoYyl7dmFyIGw9ZnVuY3Rpb24gVm50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBCbnR7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''JDNlKHRoaXMsInJhbmdlcyIsW10pLCQzZSh0aGlzLCJjcmVhdGVDZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jcmVhdGVDZWxsUmFuZ2U9bH1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLnNpemUoKX1zZXQobCl7cmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3Jl''@;'; put 'put ''YXRlQ2VsbFJhbmdlKGwpKSx0aGlzfWFkZChsKXtyZXR1cm4gdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31wb3AoKXtyZXR1cm4gdGhpcy5yYW5nZXMucG9wKCksdGhpc31jdXJyZW50KCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCkt''@;'; put 'put ''MSl9cHJldmlvdXMoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0yKX1pbmNsdWRlcyhsKXtyZXR1cm4gdGhpcy5yYW5nZXMuc29tZShhPT5hLmluY2x1ZGVzKGwpKX1jbGVhcigpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGg9MCx0aGlzfXNpemUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yYW5nZXMubGVuZ3RofXBlZWtCeUluZGV4KCl7bGV0IGEsbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gbD49MCYmbDx0aGlzLnNpemUoKSYmKGE9dGhpcy5yYW5nZXNbbF0pLGF9W1N5bWJvbC5pdGVyYXRvcl0oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBqbnQ9Qm50O2Z1bmN0aW9uIHlYKGMsbCxhKXtLM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEszZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24ganMoYyxsKXtyZXR1cm4gYy5nZXQoUXUoYyxsKSl9ZnVuY3Rpb24gTVAoYyxsLGEpe3JldHVybiBjLnNldChRdShjLGwpLGEpLGF9ZnVuY3Rpb24gUXUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB4UD1uZXcgV2Vha01hcCx1Yz1uZXcgV2Vha01hcCx1Mz1uZXcgV2Vha01h''@;'; put 'put ''cCxwMD1uZXcgV2Vha1NldDtjbGFzcyBxM2V7Y29uc3RydWN0b3IobCxhKXsoZnVuY3Rpb24gem50KGMsbCl7SzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLHAwKSx5WCh0aGlzLHhQLHZvaWQgMCkseVgodGhpcyx1Yyx2b2lkIDApLHlYKHRoaXMsdTMse3g6MCx5OjB9KSxNUCh4UCx0aGlzLGwp''@;'; put 'put ''LE1QKHVjLHRoaXMsYSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpO2xldCBmPWpzKHhQLHRoaXMpLmN1cnJlbnQo''@;'; put 'put ''KS5oaWdobGlnaHQ7Y29uc3Qgdj1qcyh1Yyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZik7bGV0IE09MCxEPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsaCksbnVsbCE9PXYucm93JiZudWxsIT09di5jb2wpe2NvbnN0e3dpZHRoOlosaGVp''@;'; put 'put ''Z2h0OnJlfT1RdShwMCx0aGlzLEozZSkuY2FsbCh0aGlzKSx7cm93OmNlLGNvbDpiZX09UXUocDAsdGhpcyxRM2UpLmNhbGwodGhpcyxmKSxFZT1qcyh1Yyx0aGlzKS5maXhlZFJvd3NCb3R0b20oKSxCZT1qcyh1Yyx0aGlzKS5taW5TcGFyZVJvd3MoKSxxZT1qcyh1Yyx0aGlzKS5taW5TcGFy''@;'; put 'put ''ZUNvbHMoKSxydD1qcyh1Yyx0aGlzKS5hdXRvV3JhcFJvdygpLHB0PWpzKHVjLHRoaXMpLmF1dG9XcmFwQ29sKCksZHQ9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhjZStoLnJvdyxiZStoLmNvbCk7aWYoZHQucm93Pj1yZSl7Y29uc3QgQ249RmQoZCYmQmU+MCYmMD09PUVlKSx0bj1k''@;'; put 'put ''dC5jb2wrMSxNbj1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGR0LnJvdy1yZSx0bj49Wj90bi1aOnRuKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG4+PVopLENuLnZhbHVlP3RoaXMucnVuTG9jYWxI''@;'; put 'put ''b29rcygiaW5zZXJ0Um93UmVxdWlyZSIsanModWMsdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpKTpwdCYmZHQuYXNzaWduKE1uKX1lbHNlIGlmKGR0LnJvdzwwKXtjb25zdCBDbj1GZChwdCksdG49ZHQuY29sLTEsTW49anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhyZStkdC5yb3cs''@;'; put 'put ''dG48MD9aK3RuOnRuKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG48MCkscHQmJmR0LmFzc2lnbihNbil9aWYoZHQuY29sPj1aKXtjb25zdCBDbj1GZChkJiZxZT4wKSx0bj1kdC5yb3crMSxNbj1qcyh1Yyx0''@;'; put 'put ''aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHRuPj1yZT90bi1yZTp0bixkdC5jb2wtWik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLHRuPj1yZSksQ24udmFsdWU/dGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1''@;'; put 'put ''aXJlIixqcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpOnJ0JiZkdC5hc3NpZ24oTW4pfWVsc2UgaWYoZHQuY29sPDApe2NvbnN0IENuPUZkKHJ0KSx0bj1kdC5yb3ctMSxNbj1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHRuPDA/cmUrdG46dG4sWitkdC5jb2wpO3Ro''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsQ24sUXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bjwwKSxydCYmZHQuYXNzaWduKE1uKX1jb25zdHtyb3dEaXI6SnQsY29sRGlyOnZufT1RdShwMCx0aGlzLFgzZSkuY2FsbCh0aGlzLGR0KTtNPUp0LEQ9dm4sZj1RdShwMCx0''@;'; put 'put ''aGlzLE1fKS5jYWxsKHRoaXMsZHQpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtU3RhcnQiLGYsTSxEKSxmfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0IGQ9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpLGg9anMoeFAsdGhpcykuY3VycmVudCgpLGY9''@;'; put 'put ''anModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxpZ2h0KSx2PVF1KHAwLHRoaXMsX1gpLmNhbGwodGhpcyxoLnRvLnJvdyxoLmZyb20ucm93KSxNPVF1KHAwLHRoaXMsd1gpLmNhbGwodGhpcyxoLnRvLmNvbCxoLmZyb20uY29sKSxEPWgudG8uY2xvbmUoKTtsZXQg''@;'; put 'put ''Wj0wLHJlPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGQpLG51bGwhPT1mLnJvdyYmbnVsbCE9PWYuY29sJiZudWxsIT09diYmbnVsbCE9PU0pe2NvbnN0e3JvdzpjZSxjb2w6YmV9PVF1KHAwLHRoaXMsUTNlKS5jYWxsKHRoaXMsaC5oaWdobGlnaHQpLEVl''@;'; put 'put ''PWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModitkLnJvdyxNK2QuY29sKSxCZT1oLmdldFRvcFN0YXJ0Q29ybmVyKCkscWU9aC5nZXRUb3BFbmRDb3JuZXIoKSxydD1oLmdldEJvdHRvbUVuZENvcm5lcigpO2lmKGQuY29sPDAmJk0+PWJlJiZFZS5jb2w8YmUpe2NvbnN0IHZuPUVlLmNv''@;'; put 'put ''bC1iZTtFZS5jb2w9UXUocDAsdGhpcyx3WCkuY2FsbCh0aGlzLEJlLmNvbCxxZS5jb2wpK3ZufWVsc2UgaWYoZC5jb2w+MCYmTTw9YmUmJkVlLmNvbD5iZSl7Y29uc3Qgdm49UXUocDAsdGhpcyx3WCkuY2FsbCh0aGlzLHFlLmNvbCxCZS5jb2wpLENuPU1hdGgubWF4KEVlLmNvbC12biwxKTtF''@;'; put 'put ''ZS5jb2w9dm4rQ259aWYoZC5yb3c8MCYmdj49Y2UmJkVlLnJvdzxjZSl7Y29uc3Qgdm49RWUucm93LWNlO0VlLnJvdz1RdShwMCx0aGlzLF9YKS5jYWxsKHRoaXMsQmUucm93LHJ0LnJvdykrdm59ZWxzZSBpZihkLnJvdz4wJiZ2PD1jZSYmRWUucm93PmNlKXtjb25zdCB2bj1RdShwMCx0aGlz''@;'; put 'put ''LF9YKS5jYWxsKHRoaXMscnQucm93LEJlLnJvdyksQ249TWF0aC5tYXgoRWUucm93LXZuLDEpO0VlLnJvdz12bitDbn1jb25zdHtyb3dEaXI6cHQsY29sRGlyOmR0fT1RdShwMCx0aGlzLFgzZSkuY2FsbCh0aGlzLEVlKTtaPXB0LHJlPWR0O2NvbnN0IEp0PVF1KHAwLHRoaXMsTV8pLmNhbGwo''@;'; put 'put ''dGhpcyxFZSk7MD09PWQucm93JiYwIT09ZC5jb2w/RC5jb2w9SnQuY29sOjAhPT1kLnJvdyYmMD09PWQuY29sP0Qucm93PUp0LnJvdzooRC5yb3c9SnQucm93LEQuY29sPUp0LmNvbCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLEQsWixyZSksRH1zZXRP''@;'; put 'put ''ZmZzZXRTaXplKGwpe2xldHt4OmEseTpkfT1sO01QKHUzLHRoaXMse3g6YSx5OmR9KX1yZXNldE9mZnNldFNpemUoKXtNUCh1Myx0aGlzLHt4OjAseTowfSl9fWZ1bmN0aW9uIFgzZShjKXtjb25zdHt3aWR0aDpsLGhlaWdodDphfT1RdShwMCx0aGlzLEozZSkuY2FsbCh0aGlzKTtsZXQgZD0w''@;'; put 'put ''LGg9MDtyZXR1cm4gYy5yb3c8MD8oZD0tMSxjLnJvdz0wKTpjLnJvdz4wJiZjLnJvdz49YSYmKGQ9MSxjLnJvdz1hLTEpLGMuY29sPDA/KGg9LTEsYy5jb2w9MCk6Yy5jb2w+MCYmYy5jb2w+PWwmJihoPTEsYy5jb2w9bC0xKSx7cm93RGlyOmQsY29sRGlyOmh9fWZ1bmN0aW9uIEozZSgpe3Jl''@;'; put 'put ''dHVybnt3aWR0aDpqcyh1Myx0aGlzKS54K2pzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxoZWlnaHQ6anModTMsdGhpcykueStqcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVSb3dzKCl9fWZ1bmN0aW9uIF9YKGMsbCl7Y29uc3QgYT1qcyh1Yyx0aGlzKS5maW5kRmlyc3RO''@;'; put 'put ''b25IaWRkZW5SZW5kZXJhYmxlUm93KGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6anModTMsdGhpcykueSthfWZ1bmN0aW9uIHdYKGMsbCl7Y29uc3QgYT1qcyh1Yyx0aGlzKS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6anMo''@;'; put 'put ''dTMsdGhpcykueCthfWZ1bmN0aW9uIFEzZShjKXtjb25zdHtyb3c6bCxjb2w6YX09anModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGMpO2lmKG51bGw9PT1sfHxudWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmFibGUgY29vcmRzIGFyZSBub3QgdmlzaWJsZS4iKTty''@;'; put 'put ''ZXR1cm4ganModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyhqcyh1Myx0aGlzKS55K2wsanModTMsdGhpcykueCthKX1mdW5jdGlvbiBNXyhjKXtjb25zdCBsPWMuY2xvbmUoKTtyZXR1cm4gbC5jb2w9Yy5jb2wtanModTMsdGhpcykueCxsLnJvdz1jLnJvdy1qcyh1Myx0aGlzKS55LGpzKHVj''@;'; put 'put ''LHRoaXMpLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKX1UbChxM2UseTEpO2NvbnN0IGVwZT1xM2UsVW50PVszLDJdLFpudD1bWyJudW1iZXIiXSxbIm51bWJlciIsInN0cmluZyJdLFsibnVtYmVyIiwidW5kZWZpbmVkIl0sWyJudW1iZXIiLCJzdHJpbmciLCJ1bmRlZmluZWQiXV0sU1g9''@;'; put 'put ''U3ltYm9sKCJyb290IiksbnBlPVN5bWJvbCgiY2hpbGQiKTtmdW5jdGlvbiB4XyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06U1g7aWYobCE9PVNYJiZsIT09bnBlKXRocm93IG5ldyBFcnJvcigiVGhlIHNlY29uZCBhcmd1''@;'; put 'put ''bWVudCBpcyB1c2VkIGludGVybmFsbHkgb25seSBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIpO2NvbnN0IGE9QXJyYXkuaXNBcnJheShjKSxkPWw9PT1TWDtsZXQgaD0wO2lmKGEpe2NvbnN0IGY9Y1swXTswPT09Yy5sZW5ndGg/aD0xOmQmJmYgaW5zdGFuY2VvZiBnSz9oPTM6ZCYmQXJy''@;'; put 'put ''YXkuaXNBcnJheShmKT9oPXhfKGYsbnBlKTpjLmxlbmd0aD49MiYmYy5sZW5ndGg8PTQmJiFjLnNvbWUoKE0sRCk9PiFabnRbRF0uaW5jbHVkZXModHlwZW9mIE0pKSYmKGg9Mil9cmV0dXJuIGh9ZnVuY3Rpb24gZVQoYyl7bGV0e2NyZWF0ZUNlbGxDb29yZHM6bCxjcmVhdGVDZWxsUmFuZ2U6''@;'; put 'put ''YSxrZWVwRGlyZWN0aW9uOmQ9ITEscHJvcFRvQ29sOmh9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighVW50LmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEg''@;'; put 'put ''dHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGYpe2NvbnN0IHY9Mz09PWM7bGV0IE09dj9mLmZyb20ucm93OmZbMF0sRD12P2YuZnJvbS5jb2w6ZlsxXSxaPXY/Zi50by5yb3c6ZlsyXSxyZT12P2YudG8uY29sOmZbM107aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgmJigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIEQmJihEPWgoRCkpLCJzdHJpbmciPT10eXBlb2YgcmUmJihyZT1oKHJlKSkpLF9jKFopJiYoWj1NKSxfYyhyZSkmJihyZT1EKSwhZCl7Y29uc3QgRWU9TSxCZT1ELHFlPVoscnQ9cmU7TT1NYXRoLm1pbihFZSxxZSksRD1NYXRoLm1pbihCZSxydCksWj1NYXRoLm1heChF''@;'; put 'put ''ZSxxZSkscmU9TWF0aC5tYXgoQmUscnQpfWNvbnN0IGNlPWwoTSxEKSxiZT1sKFoscmUpO3JldHVybiBhKGNlLGNlLGJlKX19ZnVuY3Rpb24gRV8oYyxsLGEpeyhmdW5jdGlvbiBHbnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHQ5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiAkbnQoYyl7dmFyIGw9ZnVuY3Rpb24gS250KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2''@;'; put 'put ''YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBDYyhjLGwpe3JldHVybiBjLmdldChycGUoYyxsKSl9ZnVuY3Rpb24gRnAoYyxsLGEpe3JldHVybiBjLnNldChycGUoYyxsKSxhKSxhfWZ1bmN0aW9uIHJwZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkp''@;'; put 'put ''cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIF8xPW5ldyBXZWFrTWFwLG45PW5ldyBXZWFrTWFwLEFQPW5ldyBXZWFrTWFwLHRUPW5ldyBXZWFrTWFwLGtQ''@;'; put 'put ''PW5ldyBXZWFrTWFwLG5UPW5ldyBXZWFrTWFwO2NsYXNzIGlwZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7dDkodGhpcywic2V0dGluZ3MiLHZvaWQgMCksdDkodGhpcywidGFibGVQcm9wcyIsdm9pZCAwKSx0OSh0aGlzLCJpblByb2dyZXNzIiwhMSksdDkodGhpcywic2VsZWN0ZWRS''@;'; put 'put ''YW5nZSIsbmV3IGpudCgoaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KSkpLHQ5KHRoaXMsImhpZ2hsaWdodCIsdm9pZCAwKSxFXyh0aGlzLF8xLHZvaWQgMCksRV8odGhpcyxuOSx2b2lkIDApLHQ5KHRoaXMsInNlbGVjdGVkQnlSb3dIZWFkZXIiLG5ldyBT''@;'; put 'put ''ZXQpLHQ5KHRoaXMsInNlbGVjdGVkQnlDb2x1bW5IZWFkZXIiLG5ldyBTZXQpLEVfKHRoaXMsQVAsITEpLEVfKHRoaXMsdFQsITEpLEVfKHRoaXMsa1AsInVua25vd24iKSxFXyh0aGlzLG5ULC0xKSx0aGlzLnNldHRpbmdzPWwsdGhpcy50YWJsZVByb3BzPWEsdGhpcy5oaWdobGlnaHQ9bmV3''@;'; put 'put ''IEhudCh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhlYWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NOYW1l''@;'; put 'put ''LGNlbGxBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLHJvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsZGlzYWJsZWRDZWxsU2VsZWN0aW9uOiho''@;'; put 'put ''LGYpPT50aGlzLnRhYmxlUHJvcHMuaXNEaXNhYmxlZENlbGxTZWxlY3Rpb24oaCxmKSxjZWxsQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlzQ2VsbENvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sYXJlYUNvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0Fy''@;'; put 'put ''ZWFDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFs''@;'; put 'put ''Q29vcmRzKGgpLGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksY3JlYXRlQ2VsbFJhbmdlOihoLGYsdik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaCxmLHYpfSksRnAoXzEsdGhpcyxuZXcgZXBlKHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZSx7cm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixjb3VudFJlbmRlcmFibGVSb3dzOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxl''@;'; put 'put ''Um93cygpLGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFs''@;'; put 'put ''Q29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpfSxm''@;'; put 'put ''aW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKC4uLmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGgsZiksZml4ZWRSb3dzQm90dG9tOigpPT5sLmZpeGVkUm93c0JvdHRvbSxtaW5TcGFyZVJvd3M6KCk9PmwubWluU3BhcmVSb3dzLG1pblNwYXJlQ29sczooKT0+bC5taW5TcGFyZUNvbHMsYXV0b1dyYXBSb3c6KCk9PmwuYXV0b1dyYXBSb3csYXV0b1dyYXBDb2w6KCk9PmwuYXV0''@;'; put 'put ''b1dyYXBDb2x9KSksRnAobjksdGhpcyxuZXcgZXBlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7cm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixjb3VudFJlbmRlcmFibGVS''@;'; put 'put ''b3dzOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3JldHVybiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxoLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkucm93KX0sY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+e2NvbnN0''@;'; put 'put ''IGg9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtyZXR1cm4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsaC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLmNvbCl9LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''dmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZp''@;'; put 'put ''bmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpfSxjcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+MCxtaW5TcGFyZVJvd3M6KCk9PjAsbWluU3BhcmVDb2xzOigpPT4wLGF1dG9XcmFwUm93OigpPT4hMCxhdXRvV3JhcENvbDooKT0+ITB9KSksQ2MoXzEs''@;'; put 'put ''dGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFu''@;'; put 'put ''c2Zvcm1TdGFydCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9j''@;'; put 'put ''YWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2''@;'; put 'put ''PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsLi4uZil9KSxDYyhuOSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5z''@;'; put 'put ''Zm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5mKX0pLENjKG45LHRoaXMp''@;'; put 'put ''LmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZv''@;'; put 'put ''Y3VzIiwuLi5mKX0pfWdldFNlbGVjdGVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlfW1hcmtTb3VyY2UobCl7RnAoa1AsdGhpcyxsKX1tYXJrRW5kU291cmNlKCl7RnAoa1AsdGhpcywidW5rbm93biIpfWdldFNlbGVjdGlvblNvdXJjZSgpe3JldHVybiBDYyhrUCx0aGlzKX1z''@;'; put 'put ''ZXRFeHBlY3RlZExheWVycyhsKXtGcChuVCx0aGlzLGwpfWJlZ2luKCl7dGhpcy5pblByb2dyZXNzPSEwfWZpbmlzaCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpKSx0aGlzLmluUHJvZ3Jlc3M9ITEs''@;'; put 'put ''RnAoblQsdGhpcywtMSl9aXNJblByb2dyZXNzKCl7cmV0dXJuIHRoaXMuaW5Qcm9ncmVzc31zZXRSYW5nZVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpsO2NvbnN0IGY9Im11bHRpcGxlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSx2PV9jKGEpP3RoaXMudGFibGVQcm9wcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk6YSxNPWwuY2xvbmUoKTtGcChBUCx0aGlzLCEx''@;'; put 'put ''KSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksTSksKCFmfHxmJiYhdiYmX2MoYSkpJiZ0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLnNlbGVjdGVkUmFuZ2UuYWRkKE0pLmN1cnJlbnQoKS5zZXRIaWdobGlnaHQoaC5jbG9uZSgp''@;'; put 'put ''KSwwPT09dGhpcy5nZXRMYXllckxldmVsKCkmJih0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuY2xlYXIoKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuY2xlYXIoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5nZVN0YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChs''@;'; put 'put ''LGEsITAsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwpfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5jbG9uZSgpLGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygp''@;'; put 'put ''LGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGY9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5jbG9uZSgpLnNldFRvKGwpLmlzU2luZ2xlSGVhZGVyKCk7aWYoKGQ+MHx8aD4wKSYmKDA9PT1kJiZhLmNvbDwwJiYhZnx8MD09PWgmJmEucm93PDAmJiFmKSlyZXR1cm47dGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsYSksdGhpcy5iZWdpbigpO2NvbnN0IHY9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnN8fHYuaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLCJzaW5nbGUiPT09dGhpcy5zZXR0''@;'; put 'put ''aW5ncy5zZWxlY3Rpb25Nb2RlKXYuc2V0RnJvbSh2LmhpZ2hsaWdodCksdi5zZXRUbyh2LmhpZ2hsaWdodCk7ZWxzZXtjb25zdCBEPXYuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLFo9di5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLHJlPXRoaXMuaXNNdWx0aXBsZSgpO3Yuc2V0VG8oYSkscmUm''@;'; put 'put ''JihEIT09di5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl8fDE9PT12LmdldFdpZHRoKCkmJiF2LmluY2x1ZGVzKHYuaGlnaGxpZ2h0KSkmJnYuZnJvbS5hc3NpZ24oe2NvbDp2LmhpZ2hsaWdodC5jb2x9KSxyZSYmKFohPT12LmdldFZlcnRpY2FsRGlyZWN0aW9uKCl8fDE9PT12LmdldEhlaWdo''@;'; put 'put ''dCgpJiYhdi5pbmNsdWRlcyh2LmhpZ2hsaWdodCkpJiZ2LmZyb20uYXNzaWduKHtyb3c6di5oaWdobGlnaHQucm93fSl9ZD4wJiZoPjAmJighdGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzfHx0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMmJiF2LmlzU2luZ2xlSGVhZGVyKCkp''@;'; put 'put ''JiZ2LnRvLm5vcm1hbGl6ZSgpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5zZXRSYW5nZUZvY3VzKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KSx0aGlzLmFwcGx5QW5kQ29tbWl0KCk7Y29uc3QgTT0tMT09PUNjKG5ULHRoaXMp''@;'; put 'put ''fHx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpPT09Q2MoblQsdGhpcyk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsLE0pfWFwcGx5QW5kQ29tbWl0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRo''@;'; put 'put ''aXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgZD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRD''@;'; put 'put ''b2xzKCk7YTx0aGlzLmhpZ2hsaWdodC5sYXllckxldmVsJiYoWW4odGhpcy5oaWdobGlnaHQuZ2V0QXJlYXMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRMYXllcmVkQXJlYXMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIZWFk''@;'; put 'put ''ZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZVJvd0hlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVD''@;'; put 'put ''b2x1bW5IZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29ybmVySGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hpZ2hsaWdodHMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdo''@;'; put 'put ''dC5nZXRDb2x1bW5IaWdobGlnaHRzKCksQmU9PntCZS5jbGVhcigpfSkpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCksdj10aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQu''@;'; put 'put ''Y3JlYXRlUm93SGVhZGVyKCksRD10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxaPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLHJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLGNlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0''@;'; put 'put ''ZUFjdGl2ZUNvcm5lckhlYWRlcigpLGJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLEVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO2lmKGYuY2xlYXIoKSx2LmNsZWFyKCksTS5jbGVhcigpLEQuY2xlYXIoKSxaLmNsZWFyKCkscmUuY2xlYXIo''@;'; put 'put ''KSxjZS5jbGVhcigpLGJlLmNsZWFyKCksRWUuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IodlgsbC5oaWdobGlnaHQpJiYodGhpcy5pc011bHRpcGxlKCl8fGE+PTEpJiYoZi5hZGQobC5mcm9tKS5hZGQobC50bykuY29tbWl0KCksdi5hZGQobC5mcm9tKS5hZGQobC50byku''@;'; put 'put ''Y29tbWl0KCksMT09PWEpKXtjb25zdCBCZT10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEtMSksdGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLmFkZChCZS5mcm9tKS5jb21taXQoKS5zeW5jV2l0aChCZSksdGhpcy5oaWdobGln''@;'; put 'put ''aHQuY3JlYXRlTGF5ZXJlZEFyZWEoKS5hZGQoQmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoQmUpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9aWYodGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKG1YLGwuaGlnaGxpZ2h0KSl7aWYoIWwuaXNTaW5nbGVIZWFkZXIoKSl7Y29u''@;'; put 'put ''c3QgcnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC5mcm9tLnJvdywwKSwtMSkscHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobC50by5yb3csLTEpLGR0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwu''@;'; put 'put ''ZnJvbS5jb2wsMCkpLEp0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLGwudG8uY29sKTsic2luZ2xlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZT8oTS5hZGQocnQpLmNvbW1pdCgpLEQuYWRkKGR0KS5jb21taXQoKSxiZS5hZGQocnQpLmNvbW1pdCgpLEVlLmFk''@;'; put 'put ''ZChkdCkuY29tbWl0KCkpOihNLmFkZChydCkuYWRkKHB0KS5jb21taXQoKSxELmFkZChkdCkuYWRkKEp0KS5jb21taXQoKSxiZS5hZGQocnQpLmFkZChwdCkuY29tbWl0KCksRWUuYWRkKGR0KS5hZGQoSnQpLmNvbW1pdCgpKX1jb25zdCBCZT0hQ2ModFQsdGhpcykmJnRoaXMuaXNFbnRpcmVS''@;'; put 'put ''b3dTZWxlY3RlZCgpJiYoaD4wJiZoPT09bC5nZXRXaWR0aCgpfHwwPT09aCYmdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkscWU9IUNjKHRULHRoaXMpJiZ0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKSYmKGQ+MCYmZD09PWwuZ2V0SGVpZ2h0KCl8fDA9PT1kJiZ0aGlzLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvbHVtbkhlYWRlcigpKTtCZSYmWi5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC5mcm9tLnJvdywwKSxNYXRoLm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLC0xKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhNYXRoLm1heChsLnRvLnJvdywwKSwtMSkpLmNvbW1pdCgpLHFlJiZyZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwtMSksTWF0aC5tYXgobC5mcm9tLmNvbCwwKSkpLmFk''@;'; put 'put ''ZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChsLnRvLmNvbCwwKSkpLmNvbW1pdCgpLEJlJiZxZSYmY2UuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLXRoaXMudGFibGVQ''@;'; put 'put ''cm9wcy5jb3VudFJvd0hlYWRlcnMoKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwtMSkpLmNvbW1pdCgpfX1zZXRSYW5nZUZvY3VzKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5zZWxlY3RlZFJhbmdlLmN1''@;'; put 'put ''cnJlbnQoKTt0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0Rm9jdXMiLGwpO2NvbnN0IGQ9dGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtkLmNsZWFyKCksYS5zZXRIaWdobGlnaHQobCksdGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJl''@;'; put 'put ''Zm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihRRSxhLmhpZ2hsaWdodCkmJmQuYWRkKGEuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChhKSx0aGlzLmluUHJvZ3Jlc3N8fChGcChBUCx0aGlzLCEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0''@;'; put 'put ''Rm9jdXMiLGEuaGlnaGxpZ2h0KSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3RoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz9DYyhfMSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OnRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSx5OnRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKX0pOkNjKF8xLHRoaXMpLnJlc2V0T2Zmc2V0U2l6ZSgpLHRoaXMuc2V0UmFuZ2VTdGFydChDYyhfMSx0aGlzKS50cmFuc2Zvcm1TdGFydChsLGEsZCkpfXRyYW5zZm9ybUVu''@;'; put 'put ''ZChsLGEpe3RoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz9DYyhfMSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OnRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSx5OnRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKX0pOkNjKF8xLHRoaXMpLnJlc2V0T2Zmc2V0U2l6''@;'; put 'put ''ZSgpLHRoaXMuc2V0UmFuZ2VFbmQoQ2MoXzEsdGhpcykudHJhbnNmb3JtRW5kKGwsYSkpfXRyYW5zZm9ybUZvY3VzKGwsYSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLHtyb3c6aCxjb2w6Zn09ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJv''@;'; put 'put ''cHMuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxmLTEpLE09dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsaC0xKTtkLmhpZ2hsaWdodC5pc0hlYWRlcigpP0NjKG45LHRoaXMpLnNldE9mZnNldFNpemUoe3g6ZjwwP01hdGguYWJzKGYpOi12LHk6''@;'; put 'put ''aDwwP01hdGguYWJzKGgpOi1NfSk6Q2MobjksdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDpmPDA/MDotdix5Omg8MD8wOi1NfSk7Y29uc3QgRD1DYyhuOSx0aGlzKS50cmFuc2Zvcm1TdGFydChsLGEpO3RoaXMuc2V0UmFuZ2VGb2N1cyhELm5vcm1hbGl6ZSgpKX1zaGlmdFJvd3MobCxhKXtpZigh''@;'; put 'put ''dGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVk''@;'; put 'put ''QnlDb2x1bW5IZWFkZXIoKXx8ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkucm93Pj1sKXtjb25zdHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZCxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxEPXRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksWj10aGlzLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvbHVtbkhlYWRlcigpLHJlPVo/LTE6MCxjZT1aPzA6YTt0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKTtjb25zdCBiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhrcyhoLnJvdytjZSxyZSxNLTEpLGguY29sKSxFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhrcyhmLnJvdythLHJlLE0tMSksZi5jb2wpO3RoaXMubWFya1NvdXJjZSgic2hpZnQiKSx2LnJvdz49bD90aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwLHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtzKHYucm93K2EsMCxNLTEpLHYuY29sKSk6dGhpcy5zZXRSYW5n''@;'; put 'put ''ZVN0YXJ0T25seShiZSwhMCksRCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWiYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChFZSksdGhpcy5tYXJrRW5kU291''@;'; put 'put ''cmNlKCl9fXNoaWZ0Q29sdW1ucyhsLGEpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0''@;'; put 'put ''OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLEQ9dGhpcy5pc1NlbGVjdGVkQnlSb3dI''@;'; put 'put ''ZWFkZXIoKSxaPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkscmU9RD8tMTowLGNlPUQ/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IGJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgucm93LGtzKGguY29sK2NlLHJlLE0tMSkpLEVlPXRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYucm93LGtzKGYuY29sK2EscmUsTS0xKSk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYuY29sPj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITAsdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModi5yb3csa3Modi5j''@;'; put 'put ''b2wrYSwwLE0tMSkpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwKSxEJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxaJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJh''@;'; put 'put ''bmdlRW5kKEVlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpfWlzTXVsdGlwbGUoKXtpZighdGhpcy5pc1NlbGVjdGVk''@;'; put 'put ''KCkpcmV0dXJuITE7Y29uc3QgbD1GZCghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9aXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pc1NlbGVjdGVkKCkmJkNjKEFQLHRoaXMpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIo''@;'; put 'put ''bCkmJigtMT09PWw/dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKGwpKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMu''@;'; put 'put ''Z2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGE9aD0+e2NvbnN0e2NvbDpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtyZXR1cm4odj4wJiZmPDB8fDA9PT12KSYmaC5nZXRX''@;'; put 'put ''aWR0aCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsKTtyZXR1cm4hIWQmJmEoZCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5zaXplPjA6dGhpcy5zZWxlY3Rl''@;'; put 'put ''ZEJ5Q29sdW1uSGVhZGVyLmhhcyhsKSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtyb3c6Zn09aC5nZXRPdXRl''@;'; put 'put ''clRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0SGVpZ2h0KCk9PT1NfTtpZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxl''@;'; put 'put ''Y3RlZFJhbmdlKS5zb21lKGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNv''@;'; put 'put ''bHVtbkhlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKHRoaXMuZ2V0TGF5''@;'; put 'put ''ZXJMZXZlbCgpKX1pbkluU2VsZWN0aW9uKGwpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMobCl9aXNDZWxsQ29ybmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmIXRoaXMuaXNN''@;'; put 'put ''dWx0aXBsZSgpfWlzQ2VsbFZpc2libGUobCl7Y29uc3QgYT10aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpO3JldHVybiBudWxsIT09YS5yb3cmJm51bGwhPT1hLmNvbH1pc0FyZWFDb3JuZXJWaXNpYmxlKGwpe3JldHVybighTnVtYmVyLmlzSW50ZWdlcihsKXx8''@;'; put 'put ''bD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMuaXNNdWx0aXBsZSgpfWNsZWFyKCl7dGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuY2xlYXIoKX1k''@;'; put 'put ''ZXNlbGVjdCgpe3RoaXMuaXNTZWxlY3RlZCgpJiYodGhpcy5pblByb2dyZXNzPSExLHRoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRGVzZWxlY3QiKSl9c2VsZWN0QWxsKCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0m''@;'; put 'put ''JmFyZ3VtZW50c1swXSxkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0saD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e2ZvY3VzUG9zaXRpb246ITEsZGlzYWJsZUhlYWRlcnNIaWdo''@;'; put 'put ''bGlnaHQ6ITF9O2NvbnN0IGY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLEQ9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLFo9ZD8tRDowLHJlPWE/LU06''@;'; put 'put ''MDtpZigwPT09WiYmMD09PXJlJiYoMD09PWZ8fDA9PT12KSlyZXR1cm47bGV0IGNlPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtjb25zdHtmb2N1c1Bvc2l0aW9uOmJlLGRpc2FibGVIZWFkZXJzSGln''@;'; put 'put ''aGxpZ2h0OkVlfT1oO0ZwKHRULHRoaXMsRWUpLGJlJiZOdW1iZXIuaXNJbnRlZ2VyKGJlPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGJlPy5jb2wpJiYoY2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoa3MoYmUucm93LFosZi0xKSxrcyhiZS5jb2wscmUsdi0xKSkpO2NvbnN0''@;'; put 'put ''IEJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFoscmUpLHFlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYtMSx2LTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KEJlLHZvaWQgMCxjZSkscmU8MCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVh''@;'; put 'put ''ZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWjwwJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKHFlKSx0aGlzLmZpbmlzaCgpLEZwKHRULHRoaXMsITEpfXNlbGVjdENlbGxzKGwpe3ZhciBhPXRoaXM7''@;'; put 'put ''Y29uc3QgZD14XyhsKTtpZigxPT09ZClyZXR1cm4hMTtpZigwPT09ZCl0aHJvdyBuZXcgRXJyb3IoZ2xgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxscyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBh''@;'; put 'put ''cyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblByb3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCBoPWVUKGQse2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHM6ZnVuY3Rpb24oKXtyZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbFJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoLi4uYXJndW1lbnRzKX0scHJvcFRvQ29s''@;'; put 'put ''OkQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woRCksa2VlcERpcmVjdGlvbjohMH0pLGY9dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzLHY9e2NvdW50Um93czp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksY291bnRDb2xzOnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxj''@;'; put 'put ''b3VudFJvd0hlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk6MCxjb3VudENvbEhlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCk6MH0sTT0hbC5zb21lKEQ9Pntjb25zdCBaPWgoRCkscmU9Wi5pc1ZhbGlkKHYpO3JldHVybiEocmUmJiFa''@;'; put 'put ''LmNvbnRhaW5zSGVhZGVycygpfHxyZSYmWi5jb250YWluc0hlYWRlcnMoKSYmWi5pc1NpbmdsZUhlYWRlcigpKX0pO3JldHVybiBNJiYodGhpcy5jbGVhcigpLHRoaXMuc2V0RXhwZWN0ZWRMYXllcnMobC5sZW5ndGgpLFluKGwsRD0+e2NvbnN0e2Zyb206Wix0bzpyZX09aChEKTt0aGlzLnNl''@;'; put 'put ''dFJhbmdlU3RhcnRPbmx5KFouY2xvbmUoKSwhMSksdGhpcy5zZXRSYW5nZUVuZChyZS5jbG9uZSgpKX0pLHRoaXMuZmluaXNoKCkpLE19c2VsZWN0Q29sdW1ucyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wobCk6bCxmPSJzdHJpbmciPT10eXBlb2YgYT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsdj10''@;'; put 'put ''aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksWj0wPT09RD8wOi1ELHJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFosaCksY2U9dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LmNyZWF0ZUNlbGxDb29yZHModi0xLGYpLGJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UocmUscmUsY2UpLmlzVmFsaWQoe2NvdW50Um93czp2LGNvdW50Q29sczpNLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczpEfSk7aWYoYmUpe2xldCBFZT0wLEJlPTA7TnVt''@;'; put 'put ''YmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KEVlPWtzKGQucm93LFosdi0xKSxCZT1rcyhkLmNvbCxNYXRoLm1pbihoLGYpLE1hdGgubWF4KGgsZikpKTooRWU9a3MoZCxaLHYtMSksQmU9aCk7Y29uc3QgcWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoRWUsQmUpLHJ0PTA9PT1EPzA6a3MocWUucm93LFosLTEpLHB0PXYtMSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhydCxoKSxKdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhwdCxmKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVj''@;'; put 'put ''dENvbHVtbnMiLGR0LEp0LHFlKSxkdC5yb3c9cnQsSnQucm93PXB0LHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoZHQsdm9pZCAwLHFlKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEp0KSx0aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsZHQsSnQscWUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIGJlfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtjb25zdCBoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxNPTA9PT12PzA6LXYsRD10aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhsLE0pLFo9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxmLTEpLHJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoRCxELFopLmlzVmFsaWQoe2NvdW50Um93czpoLGNvdW50Q29sczpmLGNvdW50Um93SGVhZGVyczp2LGNvdW50Q29s''@;'; put 'put ''SGVhZGVyczowfSk7aWYocmUpe2xldCBjZT0wLGJlPTA7TnVtYmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KGNlPWtzKGQucm93LE1hdGgubWluKGwsYSksTWF0aC5tYXgobCxhKSksYmU9a3MoZC5jb2wsTSxmLTEpKTooY2U9bCxiZT1rcyhkLE0sZi0x''@;'; put 'put ''KSk7Y29uc3QgRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoY2UsYmUpLEJlPTA9PT12PzA6a3MoRWUuY29sLE0sLTEpLHFlPWYtMSxydD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLEJlKSxwdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhh''@;'; put 'put ''LHFlKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdFJvd3MiLHJ0LHB0LEVlKSxydC5jb2w9QmUscHQuY29sPXFlLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkocnQsdm9pZCAwLEVlKSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlz''@;'; put 'put ''LnNldFJhbmdlRW5kKHB0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Um93cyIscnQscHQsRWUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIHJlfXJlZnJlc2goKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGE9''@;'; put 'put ''dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKDA9PT1sfHwwPT09YSlyZXR1cm4gdm9pZCB0aGlzLmRlc2VsZWN0KCk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgodGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xKSx7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9''@;'; put 'put ''PWQ7dGhpcy5jbGVhcigpLHYuYXNzaWduKHtyb3c6a3Modi5yb3csLTEvMCxsLTEpLGNvbDprcyh2LmNvbCwtMS8wLGEtMSl9KSxoLmFzc2lnbih7cm93OmtzKGgucm93LC0xLzAsbC0xKSxjb2w6a3MoaC5jb2wsLTEvMCxhLTEpfSksZi5hc3NpZ24oe3JvdzprcyhmLnJvdywwLGwtMSksY29s''@;'; put 'put ''OmtzKGYuY29sLDAsYS0xKX0pLHRoaXMuc2VsZWN0ZWRSYW5nZS5yYW5nZXMucHVzaChkKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpLmFkZCh2KS5jb21taXQo''@;'; put 'put ''KS5zeW5jV2l0aChkKSx0aGlzLmFwcGx5QW5kQ29tbWl0KGQpfWNvbW1pdCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGg9PntoLmNvbW1pdCgpfSksIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0TGF5ZXJMZXZlbCgp''@;'; put 'put ''LGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTt0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsZC5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpLmNvbW1pdCgpLnN5bmNXaXRoKGQpO2ZvcihsZXQgaD0wO2g8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKTto''@;'; put 'put ''Kz0xKXt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGgpO2NvbnN0IGY9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxNPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpLEQ9dGhpcy5oaWdobGlnaHQuY3Jl''@;'; put 'put ''YXRlQ29sdW1uSGVhZGVyKCksWj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxyZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxjZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKSxiZT10aGlzLmhpZ2hsaWdo''@;'; put 'put ''dC5jcmVhdGVSb3dIaWdobGlnaHQoKSxFZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IaWdobGlnaHQoKTtmLmNvbW1pdCgpLHYuY29tbWl0KCksTS5jb21taXQoKSxELmNvbW1pdCgpLFouY29tbWl0KCkscmUuY29tbWl0KCksY2UuY29tbWl0KCksYmUuY29tbWl0KCksRWUuY29tbWl0''@;'; put 'put ''KCl9dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKX19VGwoaXBlLHkxKTtjb25zdCBxbnQ9aXBlLHtyZWdpc3RlcjpYbnQsZ2V0SXRlbTpKbnQsaGFzSXRlbTphcGUsZ2V0TmFtZXM6UW50fT1yMygiY2VsbFR5cGVzIik7ZnVuY3Rpb24gTVgoYyl7aWYoIWFwZShjKSl0aHJvdyBFcnJv''@;'; put 'put ''cihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdp''@;'; put 'put ''c3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBKbnQoYyl9ZnVuY3Rpb24gRzIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEs''@;'; put 'put ''cmVuZGVyZXI6ZCx2YWxpZGF0b3I6aH09bDthJiZIZChjLGEpLGQmJkloKGMsZCksaCYmWTcoYyxoKSxYbnQoYyxsKX1mdW5jdGlvbiBEUChjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBsLnR5cGU/TVgobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZYbyhsLChmLHYpPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzLmRlbGV0ZSh2KX0pLCFxbyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNh''@;'; put 'put ''bGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtYbyhkLChmLHYpPT57dmFyIE07KGZ1bmN0aW9uIGVydChjLGwpe3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21h''@;'; put 'put ''dGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oYXMoYykpfHwhVHUobCxjKSl9KSh2LGEpJiYoaFt2XT1mLG51bGw9PT0oTT1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1NfHxNLmFkZCh2KSl9KSxFdShjLGgpfWZ1bmN0''@;'; put 'put ''aW9uIElQKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1bmN0aW9uIFJQKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiBMUChjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBvcGU9KCk9Pih7X2F1dG9tYXRp''@;'; put 'put ''Y2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVt''@;'; put 'put ''b3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGFyaWFUYWdzOiEwLGF1dG9Db2x1bW5TaXplOnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hl''@;'; put 'put ''Y2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xsYXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29s''@;'; put 'put ''V2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21tZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRl''@;'; put 'put ''ckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3VzdG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhRG90Tm90YXRpb246ITAsZGF0YVNjaGVtYTp2b2lkIDAsZGF0ZUZvcm1hdDoiREQvTU0vWVlZWSIsdGltZUZvcm1hdDoiaDptbTpzcyBh''@;'; put 'put ''IixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6''@;'; put 'put ''MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVmdDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6''@;'; put 'put ''dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlYWRlckNsYXNzTmFtZTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxoaWRkZW5Db2x1bW5zOnZvaWQgMCxoaWRkZW5Sb3dzOnZvaWQgMCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixpbWVGYXN0RWRpdDohMSxpc0VtcHR5Q29sKGMp''@;'; put 'put ''e2xldCBsLGEsZDtmb3IobD0wLGE9dGhpcy5jb3VudFJvd3MoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGwsYyksITE9PT1VYyhkKSlyZXR1cm4hMTtyZXR1cm4hMH0saXNFbXB0eVJvdyhjKXtsZXQgbCxhLGQsaDtmb3IobD0wLGE9dGhpcy5jb3VudENvbHMoKTtsPGE7bCsr''@;'; put 'put ''KWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGMsbCksITE9PT1VYyhkKSlyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJihoPXRoaXMuZ2V0Q2VsbE1ldGEoYyxsKSxOTyh0aGlzLmdldFNjaGVtYSgpW2gucHJvcF0sZCkpO3JldHVybiEwfSxsYWJlbDp2b2lkIDAsbGFuZ3VhZ2U6ImVuLVVTIixs''@;'; put 'put ''YXlvdXREaXJlY3Rpb246ImluaGVyaXQiLGxpY2Vuc2VLZXk6dm9pZCAwLGxvY2FsZToiZW4tVVMiLG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZvaWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxSb3dS''@;'; put 'put ''ZXNpemU6dm9pZCAwLG1heENvbHM6MS8wLG1heFJvd3M6MS8wLG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxtdWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5hdmlnYWJsZUhlYWRlcnM6ITEsdGFiTmF2aWdhdGlvbjohMCxu''@;'; put 'put ''ZXN0ZWRIZWFkZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxh''@;'; put 'put ''Y2Vob2xkZXI6dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOiExLHJlbmRlckFsbENv''@;'; put 'put ''bHVtbnM6ITEscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlvbnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNraXBS''@;'; put 'put ''b3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRhYmxlQ2xhc3NOYW1lOnZvaWQgMCx0aGVtZU5hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0''@;'; put 'put ''bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86ITAsdmFsaWRhdG9yOnZvaWQgMCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3Bv''@;'; put 'put ''cnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOjAsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aXNpYmxlUm93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtmdW5jdGlvbiBzcGUoYyxsLGEpe3JldHVybihs''@;'; put 'put ''PWZ1bmN0aW9uIG5ydChjKXt2YXIgbD1mdW5jdGlvbiBycnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9''@;'; put 'put ''KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGFydHtjb25zdHJ1Y3RvcihsKXtzcGUodGhpcywibWV0YUN0b3IiLGNsYXNze30pLHNwZSh0aGlzLCJtZXRh''@;'; put 'put ''Iix2b2lkIDApLHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxFdSh0aGlzLm1ldGEsb3BlKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEo''@;'; put 'put ''bCl7dmFyIGE7RXUodGhpcy5tZXRhLGwpLERQKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9LGwpfX1jbGFzcyBjcnR7Y29uc3RydWN0b3IobCl7IWZ1bmN0aW9uIG9ydChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''c3J0KGMpe3ZhciBsPWZ1bmN0aW9uIGxydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm1ldGEiLHZvaWQgMCk7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe0V1KHRoaXMubWV0YSxsKSxEUCh0aGlzLm1ldGEsbCxsKX19ZnVuY3Rpb24gT1AoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHVydChjKXt2YXIgbD1mdW5jdGlvbiBkcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFBQe2NvbnN0cnVjdG9yKGwpe09QKHRoaXMsInZhbHVlRmFjdG9yeSIsdm9pZCAwKSxPUCh0aGlzLCJkYXRhIixbXSksT1AodGhpcywiaW5kZXgiLFtdKSxPUCh0aGlzLCJob2xlcyIsbmV3IFNldCksdGhpcy52YWx1ZUZhY3Rvcnk9bH1v''@;'; put 'put ''YnRhaW4obCl7UlAoKCk9PklQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9dGhpcy5fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCk7bGV0IGQ7aWYoYT49MClkPXRoaXMuZGF0YVthXSx2b2lkIDA9PT1kJiYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmRh''@;'; put 'put ''dGFbYV09ZCk7ZWxzZSBpZihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuaG9sZXMuc2l6ZT4wKXtjb25zdCBoPXRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3RoaXMuaG9sZXMuZGVsZXRlKGgpLHRoaXMuZGF0YVtoXT1kLHRoaXMuaW5kZXhbbF09aH1lbHNlIHRoaXMuZGF0''@;'; put 'put ''YS5wdXNoKGQpLHRoaXMuaW5kZXhbbF09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiBkfWluc2VydChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtSUCgoKT0+SVAobCl8fExQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWdu''@;'; put 'put ''ZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9W10saD10aGlzLmRhdGEubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8YTt2KyspZC5wdXNoKGgrdiksdGhpcy5kYXRhLnB1c2godm9pZCAwKTtjb25zdCBmPUxQKGwpP3RoaXMuaW5kZXgubGVuZ3RoOmw7dGhpcy5p''@;'; put 'put ''bmRleD1bLi4udGhpcy5pbmRleC5zbGljZSgwLGYpLC4uLmQsLi4udGhpcy5pbmRleC5zbGljZShmKV19cmVtb3ZlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO1JQKCgpPT5JUChsKXx8TFAobCksIkV4cGVjdGluZyBh''@;'; put 'put ''biB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD10aGlzLmluZGV4LnNwbGljZShMUChsKT90aGlzLmluZGV4Lmxlbmd0aC1hOmwsYSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTsibnVtYmVyIj09dHlwZW9mIGYm''@;'; put 'put ''JnRoaXMuaG9sZXMuYWRkKGYpfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfXZhbHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmlsdGVyKChsLGEpPT52b2lkIDAhPT1sJiYhdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVz''@;'; put 'put ''KCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmdm9pZCAwIT09dGhpcy5kYXRhW2RdJiZsLnB1c2goW2gsdGhpcy5kYXRhW2RdXSl9bGV0IGE9MDtyZXR1cm57bmV4dDoo''@;'; put 'put ''KT0+e2lmKGE8bC5sZW5ndGgpe2NvbnN0IGQ9bFthXTtyZXR1cm4gYSs9MSx7dmFsdWU6ZCxkb25lOiExfX1yZXR1cm57ZG9uZTohMH19fX1jbGVhcigpe3RoaXMuZGF0YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xlYXIoKX1fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5kZXgubGVuZ3RoPmw/dGhpcy5pbmRleFtsXTotMX1fZ2V0S2V5QnlTdG9yYWdlSW5kZXgobCl7cmV0dXJuIHRoaXMuaW5kZXguaW5kZXhPZihsKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX19ZnVuY3Rpb24gbHBlKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiBocnQoYyl7dmFyIGw9ZnVuY3Rpb24gZnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBwcnQ9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBncnR7Y29uc3RydWN0b3IobCl7bHBlKHRoaXMsImdsb2JhbE1l''@;'; put 'put ''dGEiLHZvaWQgMCksbHBlKHRoaXMsIm1ldGFzIixuZXcgUFAoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSkpLHRoaXMuZ2xvYmFsTWV0YT1sLHRoaXMubWV0YXM9bmV3IFBQKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpfXVwZGF0ZU1ldGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWV0YShsKTtFdShk''@;'; put 'put ''LGEpLERQKGQsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1yZW1vdmVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfWdldE1ldGEobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpfWdldE1ldGFDb25zdHJ1Y3RvcihsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tZXRhcy5vYnRhaW4obCkuY29uc3RydWN0b3J9Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlTWV0YSgpe3JldHVybiBmdW5jdGlvbiB0cnQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Z1''@;'; put 'put ''bmN0aW9uIGEoKXt9RzJlKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCkscHJ0KS5wcm90b3R5cGV9fWZ1bmN0aW9uIGNwZShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gbXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHZydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgYnJ0e2NvbnN0cnVjdG9yKGwpe2NwZSh0aGlzLCJjb2x1bW5NZXRhIix2b2lkIDApLGNwZSh0aGlzLCJtZXRh''@;'; put 'put ''cyIsbmV3IFBQKCgpPT50aGlzLl9jcmVhdGVSb3coKSkpLHRoaXMuY29sdW1uTWV0YT1sfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7RXUoaCxkKSxEUChoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1uKGws''@;'; put 'put ''YSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0''@;'; put 'put ''aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCB2PXRoaXMubWV0YXMub2J0YWluKGwpLm9i''@;'; put 'put ''dGFpbihhKTtudWxsPT09KGY9di5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksdltkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBsPVtd''@;'; put 'put ''LGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylQYShhW2RdKSYmbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVybiBsfWdldE1ldGFzQXRSb3cobCl7UlAoKCk9PklQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVy''@;'; put 'put ''LiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdldChsKS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBQUChsPT50aGlzLl9jcmVhdGVNZXRhKGwpKX1f''@;'; put 'put ''Y3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkpfX1jbGFzcyB1cGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhpcy5nbG9iYWxNZXRhPW5ldyBhcnQobCksdGhpcy50YWJsZU1ldGE9bmV3IGNydCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1uZXcgZ3J0KHRoaXMuZ2xvYmFsTWV0''@;'; put 'put ''YSksdGhpcy5jZWxsTWV0YT1uZXcgYnJ0KHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRoaXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YShs''@;'; put 'put ''KXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdldENvbHVtbk1ldGEobCl7cmV0dXJuIHRoaXMuY29sdW1uTWV0''@;'; put 'put ''YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShsLGEpfWdldENlbGxNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBoLnZpc3VhbFJvdz1kLnZpc3VhbFJvdyxoLnZpc3VhbENvbD1k''@;'; put 'put ''LnZpc3VhbENvbHVtbixoLnJvdz1sLGguY29sPWEsZC5za2lwTWV0YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckdldENlbGxNZXRhIixoKSxofWdldENlbGxNZXRhS2V5VmFsdWUobCxhLGQpe2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBw''@;'; put 'put ''YXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEsZCl9c2V0Q2VsbE1ldGEobCxhLGQsaCl7dGhpcy5jZWxsTWV0YS5zZXRNZXRhKGwsYSxkLGgpfXVwZGF0ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxN''@;'; put 'put ''ZXRhLnVwZGF0ZU1ldGEobCxhLGQpfXJlbW92ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEobCxhLGQpfWdldENlbGxzTWV0YSgpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2VsbHNNZXRhQXRSb3cobCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEu''@;'; put 'put ''Z2V0TWV0YXNBdFJvdyhsKX1jcmVhdGVSb3cobCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9cmVtb3ZlUm93KGwpe3RoaXMuY2VsbE1ldGEucmVtb3ZlUm93KGwsYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLmNyZWF0ZUNvbHVtbihsLGEpLHRoaXMuY29s''@;'; put 'put ''dW1uTWV0YS5jcmVhdGVDb2x1bW4obCxhKX1yZW1vdmVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1u''@;'; put 'put ''KGwsYSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMuY29sdW1uTWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9uIGRwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geXJ0KGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIF9ydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9VGwodXBlLHkxKTtjbGFzcyB3cnR7Y29uc3RydWN0b3IobCl7dmFyIGE9dGhpcztkcGUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksZHBlKHRo''@;'; put 'put ''aXMsIm1ldGFTeW5jTWVtbyIsbmV3IE1hcCksdGhpcy5tZXRhTWFuYWdlcj1sLGwuYWRkTG9jYWxIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVybiBhLmV4dGVuZENlbGxNZXRhKC4uLmFyZ3VtZW50cyl9KSxTYS5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRl''@;'; put 'put ''ciIsZD0+e2QmJnRoaXMubWV0YVN5bmNNZW1vLmNsZWFyKCl9LHRoaXMubWV0YU1hbmFnZXIuaG90KX1leHRlbmRDZWxsTWV0YShsKXt2YXIgYTtjb25zdHtyb3c6ZCxjb2w6aH09bDtpZihudWxsIT09KGE9dGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpKSYmdm9pZCAwIT09YSYmYS5oYXMoaCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0e3Zpc3VhbFJvdzpmLHZpc3VhbENvbDp2fT1sLE09dGhpcy5tZXRhTWFuYWdlci5ob3QsRD1NLmNvbFRvUHJvcCh2KTtsLnByb3A9RCxNLnJ1bkhvb2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsZix2LGwpO2NvbnN0IFo9VHUobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCBy''@;'; put 'put ''ZT1tbChsLmNlbGxzKT9sLmNlbGxzKGQsaCxEKTpudWxsO2lmKFopaWYocmUpe3ZhciBjZTtyZS50eXBlPW51bGwhPT0oY2U9cmUudHlwZSkmJnZvaWQgMCE9PWNlP2NlOlp9ZWxzZSByZT17dHlwZTpafTtyZSYmdGhpcy5tZXRhTWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgscmUpLE0ucnVu''@;'; put 'put ''SG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGYsdixsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMubWV0YVN5bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5bmNNZW1vLmdldChkKS5hZGQoaCl9fWZ1bmN0aW9uIHhYKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNcnQo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24geHJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY312YXIgaHBlPW5ldyBXZWFrTWFwO2NsYXNzIEFydHtjb25zdHJ1Y3RvcihsKXt4WCh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSx4WCh0aGlz''@;'; put 'put ''LCJ1c2FnZVRyYWNrZXIiLG5ldyBTZXQpLHhYKHRoaXMsInByb3BEZXNjcmlwdG9ycyIsbmV3IE1hcChbWyJhcmlhVGFncyIse2luaXRPbmx5OiEwfV0sWyJmaXhlZENvbHVtbnNMZWZ0Iix7dGFyZ2V0OiJmaXhlZENvbHVtbnNTdGFydCIsb25DaGFuZ2UoYSl7aWYodGhpcy5tZXRhTWFuYWdl''@;'; put 'put ''ci5ob3QuaXNSdGwoKSYmImZpeGVkQ29sdW1uc0xlZnQiPT09YSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpO2lmKHRoaXMudXNhZ2VUcmFja2Vy''@;'; put 'put ''LmhhcygiZml4ZWRDb2x1bW5zTGVmdCIpJiZ0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc1N0YXJ0IikpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGFuZCBgZml4ZWRDb2x1bW5zU3RhcnRgIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxl''@;'; put 'put ''YXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKX19XSxbImxheW91dERpcmVjdGlvbiIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxDb2x1bW5zIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbFJvd3MiLHtpbml0T25seTohMH1dXSkpLGZ1bmN0aW9uIENy''@;'; put 'put ''dChjLGwsYSl7KGZ1bmN0aW9uIFNydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsaHBlLChhLGQsaCk9Pntp''@;'; put 'put ''ZighaCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBcYCR7YX1cYCBvcHRpb24gY2FuIG5vdCBiZSB1cGRhdGVkIGFmdGVyIHRoZSBIYW5kc29udGFibGUgaXMgaW5pdGlhbGl6ZWQuYCl9KSx0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0''@;'; put 'put ''aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7aW5pdE9ubHk6ZCx0YXJnZXQ6aCxvbkNoYW5nZTpmfT1sLHY9InN0cmluZyI9PXR5cGVvZiBoLE09dj9oOmEsRD1gXyR7TX1gO3RoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW0RdPXRoaXMubWV0YU1hbmFn''@;'; put 'put ''ZXIuZ2xvYmFsTWV0YS5tZXRhW01dLGY/KHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGEsRCxmKSx2JiZ0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihoLEQsZikpOmQmJih0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZnVuY3Rpb24gRXJ0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIFRy''@;'; put 'put ''dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShocGUsdGhpcykp''@;'; put 'put ''LHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzfHwodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3M9W10pLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzLnB1c2go''@;'; put 'put ''YSkpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3Qgdj0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gu''@;'; put 'put ''dXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsdiksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBmcGU9L14oXHJcbnxcblxyfFxyfFxuKS8sa3J0PS9eW15cdFxyXG5dKy8scHBlPS9eXHQvO2Z1bmN0aW9uIHJUKGMpe2xldCBsLGEsZCxo''@;'; put 'put ''LHYsZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSx2PWNbbF1bZF0sInN0cmluZyI9PXR5cGVvZiB2P3YuaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7di5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9''@;'; put 'put ''djpmKz1udWxsPT12PyIiOnY7bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWZ1bmN0aW9uIHI5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJcnQoYyl7dmFyIGw9ZnVuY3Rpb24gUnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY31jbGFzcyBUX3tzdGF0aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7cmV0dXJuIDJ9Y29uc3RydWN0b3IobCxhLGQpe3I5KHRoaXMsImhvdCIsdm9pZCAwKSxyOSh0aGlzLCJtZXRh''@;'; put 'put ''TWFuYWdlciIsdm9pZCAwKSxyOSh0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCkscjkodGhpcywiZGF0YVNvdXJjZSIsdm9pZCAwKSxyOSh0aGlzLCJkdWNrU2NoZW1hIix2b2lkIDApLHI5KHRoaXMsImNvbFRvUHJvcENhY2hlIix2b2lkIDApLHI5KHRoaXMsInByb3BUb0NvbENhY2hlIix2b2lk''@;'; put 'put ''IDApLHRoaXMuaG90PWwsdGhpcy5tZXRhTWFuYWdlcj1kLHRoaXMudGFibGVNZXRhPWQuZ2V0VGFibGVNZXRhKCksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHRoaXMuY3JlYXRlTWFwKCl9Y3JlYXRlTWFwKCl7Y29uc3QgbD10aGlzLmdldFNjaGVtYSgpO2lm''@;'; put 'put ''KHR5cGVvZiBsPiJ1Iil0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBjcmVhdGUgYGNvbHVtbnNgIGRlZmluaXRpb24gYnV0IHlvdSBkaWRuJ3QgcHJvdmlkZSBgc2NoZW1hYCBub3IgYGRhdGFgIik7Y29uc3QgYT10aGlzLnRhYmxlTWV0YS5jb2x1bW5zO2xldCBkO2lmKHRoaXMuY29sVG9Q''@;'; put 'put ''cm9wQ2FjaGU9W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcgTWFwLGEpe2xldCBoPTAsZj0wLHY9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe2NvbnN0IE09Qk8obCk7aD1NPjA/TTp0aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCksdj0hMH1lbHNlIGg9TWF0aC5taW4odGhpcy50YWJsZU1l''@;'; put 'put ''dGEubWF4Q29scyxhLmxlbmd0aCk7Zm9yKGQ9MDtkPGg7ZCsrKXtjb25zdCBNPXY/YShkKTphW2RdO2lmKHFvKE0pKXtpZih0eXBlb2YgTS5kYXRhPCJ1Iil7Y29uc3QgRD12P2Y6ZDt0aGlzLmNvbFRvUHJvcENhY2hlW0RdPU0uZGF0YSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChNLmRhdGEs''@;'; put 'put ''RCl9Zis9MX19fWVsc2UgdGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhsKX1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBGSyh0aGlzLmRhdGFTb3VyY2UpfXJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwsYSxkKXtsZXQgdixoPWEsZj1kO3JldHVybiB0eXBlb2YgaD4idSImJihoPTAsZj0iIiks''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmWG8obCwoTSxEKT0+e251bGw9PT1NPyh2PWYrRCx0aGlzLmNvbFRvUHJvcENhY2hlLnB1c2godiksdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQodixoKSxoKz0xKTpoPXRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMoTSxoLGAk''@;'; put 'put ''e0R9LmApfSksaH1jb2xUb1Byb3AobCl7aWYoITE9PT1OdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsO2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hlJiZQYSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90''@;'; put 'put ''aGlzLmNvbFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoUGEoYSkpcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1k''@;'; put 'put ''P2w6ZH1nZXRTY2hlbWEoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIGw/ImZ1bmN0aW9uIj09dHlwZW9mIGw/bCgpOmw6dGhpcy5kdWNrU2NoZW1hfWNyZWF0ZUR1Y2tTY2hlbWEoKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3VyY2VbMF0/''@;'; put 'put ''c18odGhpcy5kYXRhU291cmNlWzBdKTp7fX1yZWZyZXNoRHVja1NjaGVtYSgpe3RoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX1jcmVhdGVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3Nv''@;'; put 'put ''dXJjZTpkLG1vZGU6aD0iYWJvdmUifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZj10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgdj1mLE09MCxEPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgRHx8RD49ZikmJihE''@;'; put 'put ''PWYpLEQ8dGhpcy5ob3QuY291bnRSb3dzKCkmJih2PXRoaXMuaG90LnRvUGh5c2ljYWxSb3coRCkpLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsRCxhLGQpfHxudWxsPT09dilyZXR1cm57ZGVsdGE6MH07Y29uc3QgcmU9dGhpcy50YWJsZU1ldGEubWF4Um93cyxj''@;'; put 'put ''ZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCxiZT1bXTtmb3IoO008YSYmZitNPHJlOyl7bGV0IEJlPW51bGw7ImFycmF5Ij09PXRoaXMuaG90LmRhdGFUeXBlP3RoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE/QmU9ZzEodGhpcy5nZXRTY2hlbWEoKSk6KEJlPVtdLEdhKGNlLTEsKCk9PkJlLnB1''@;'; put 'put ''c2gobnVsbCkpKToiZnVuY3Rpb24iPT09dGhpcy5ob3QuZGF0YVR5cGU/QmU9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYShEK00pOihCZT17fSx4RShCZSx0aGlzLmdldFNjaGVtYSgpKSksYmUucHVzaChCZSksTSs9MX10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEQs''@;'; put 'put ''TSksImJlbG93Ij09PWgmJih2PU1hdGgubWluKHYrMSxmKSksdGhpcy5zcGxpY2VEYXRhKHYsMCxiZSk7Y29uc3QgRWU9dGhpcy5ob3QudG9WaXN1YWxSb3codik7cmV0dXJuIHRoaXMuaG90LmNvdW50U291cmNlUm93cygpPT09YmUubGVuZ3RoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5pbml0VG9MZW5ndGgodGhpcy5ob3QuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLE0+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3cobnVsbCxNKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyh2LGEpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJDcmVhdGVSb3ciLEVlLE0sZCkse2RlbHRhOk0sc3RhcnRQaHlzaWNhbEluZGV4OnZ9fWNyZWF0ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJzdGFydCJ9PWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighdGhpcy5ob3QuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5''@;'; put 'put ''b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywgZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJy''@;'; put 'put ''YXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSx2PXRoaXMudGFibGVNZXRhLm1heENvbHMsTT10aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKTtsZXQgRD1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIER8fEQ+PU0pJiYoRD1NKSwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVDcmVhdGVDb2wiLEQsYSxkKSlyZXR1cm57ZGVsdGE6MH07bGV0IHJlPU07RDx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHJlPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRCkpO2NvbnN0IGNlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2xldCBiZT10aGlzLmhvdC5jb3VudENv''@;'; put 'put ''bHMoKSxFZT0wLEJlPXJlOyJlbmQiPT09aCYmKEJlPU1hdGgubWluKEJlKzEsTSkpO2NvbnN0IHFlPUJlO2Zvcig7RWU8YSYmYmU8djspe2lmKCJudW1iZXIiIT10eXBlb2YgRHx8RD49YmUpaWYoY2U+MClmb3IobGV0IHB0PTA7cHQ8Y2U7cHQrPTEpdHlwZW9mIGZbcHRdPiJ1IiYmKGZbcHRd''@;'; put 'put ''PVtdKSxmW3B0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNoKFtudWxsXSk7ZWxzZSBmb3IobGV0IHB0PTA7cHQ8Y2U7cHQrKylmW3B0XS5zcGxpY2UoQmUsMCxudWxsKTtFZSs9MSxCZSs9MSxiZSs9MX10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEQsRWUpLEVlPjAm''@;'; put 'put ''JihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsRWUpOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKHFlLGEpKTtjb25zdCBydD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihxZSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ckNyZWF0ZUNvbCIscnQsRWUsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpFZSxzdGFydFBoeXNpY2FsSW5kZXg6cWV9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLHY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7aWYoaD0oditoKSV2LCExPT09dGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZVJlbW92ZVJvdyIsaCxmLmxlbmd0aCxmLGQpKXJldHVybiExO2NvbnN0IEQ9Zi5sZW5ndGg7aWYodGhpcy5maWx0ZXJEYXRhKGgsRCxmKSxoPHRoaXMuaG90LmNvdW50Um93cygpKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IHJlPVBhKHRoaXMu''@;'; put 'put ''dGFibGVNZXRhLmNvbHVtbnMpfHxQYSh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKXx8dGhpcy50YWJsZU1ldGEuY29sSGVhZGVyczswPT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmIXJlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5zZXRJbmRleGVzU2VxdWVuY2UoW10pfXJldHVybiBmLnNsaWNlKDApLnNvcnQoKHJlLGNlKT0+Y2UtcmUpLmZvckVhY2gocmU9Pnt0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyhyZSwxKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsaCxELGYsZCksITB9cmVtb3Zl''@;'; put 'put ''Q29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmhvdC5kYXRhVHlwZXx8dGhpcy50YWJsZU1ldGEuY29sdW1u''@;'; put 'put ''cyl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVtbnMgb3B0aW9uIHNwZWNpZmllZCIpO2xldCBoPSJudW1iZXIiIT10eXBlb2YgbD8tYTpsO2g9KHRoaXMuaG90LmNvdW50Q29scygpK2gpJXRoaXMuaG90LmNvdW50''@;'; put 'put ''Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLHY9Zi5zbGljZSgwKS5zb3J0KChjZSxiZSk9PmJlLWNlKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDb2wiLGgsYSxmLGQpKXJldHVybiExO2xldCBEPSEwO2NvbnN0IFo9di5s''@;'; put 'put ''ZW5ndGgscmU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgY2U9MDtjZTxaO2NlKyspRCYmZlswXSE9PWZbY2VdLWNlJiYoRD0hMSk7aWYoRClmb3IobGV0IGNlPTAsYmU9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7Y2U8YmU7Y2UrKylyZVtjZV0uc3BsaWNlKGZbMF0sYSksMD09PWNlJiZ0''@;'; put 'put ''aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCBjZT0wLGJlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2NlPGJlO2NlKyspZm9yKGxldCBFZT0wO0VlPFo7RWUrKylyZVtjZV0uc3BsaWNlKHZbRWVdLDEpLDA9PT1jZSYmdGhpcy5tZXRhTWFuYWdl''@;'; put 'put ''ci5yZW1vdmVDb2x1bW4odltFZV0sMSk7cmV0dXJuIGg8dGhpcy5ob3QuY291bnRDb2xzKCkmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpLCF0aGlzLnRhYmxlTWV0YS5yb3dIZWFkZXJzJiYwPT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90''@;'; put 'put ''VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25z''@;'; put 'put ''dCBoPXRoaXMuaG90LmdldERhdGFBdENvbChsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0+Mz9NLTM6MCksWj0zO1o8TTtaKyspRFtaLTNdPWFyZ3VtZW50c1taXTtsJChELHYpO2xldCByZT0wO2Zvcig7''@;'; put 'put ''cmU8ZDspRC5wdXNoKG51bGwpLHJlKz0xO3JldHVybiBwMmUoRCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoYSxsLEQsbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRSb3cobCksZj1oLnNsaWNlKGEs''@;'; put 'put ''YStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNPjM/TS0zOjApLFo9MztaPE07WisrKURbWi0zXT1hcmd1bWVudHNbWl07bCQoRCx2KTtsZXQgcmU9MDtmb3IoO3JlPGQ7KUQucHVzaChudWxsKSxyZSs9MTtyZXR1cm4gdGhpcy5ob3Qu''@;'; put 'put ''cG9wdWxhdGVGcm9tQXJyYXkobCxhLFtEXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGF0YVNwbGljZSIsbCxhLGQpKXtjb25zdCBmPVsuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UoMCxsKSwuLi5k''@;'; put 'put ''LC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShsKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLGYuZm9yRWFjaCh2PT50aGlzLmRhdGFTb3VyY2UucHVzaCh2KSl9fWZpbHRlckRhdGEobCxhLGQpe2xldCBoPXRoaXMuaG90LnJ1bkhvb2tzKCJmaWx0ZXJEYXRhIixsLGEsZCk7ITE9PT1BcnJh''@;'; put 'put ''eS5pc0FycmF5KGgpJiYoaD10aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChmLHYpPT4tMT09PWQuaW5kZXhPZih2KSkpLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmRhdGFTb3VyY2UsaCl9Z2V0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixkKTtoPWlzTmFOKGYpP2Y6aDtjb25zdHtkYXRhRG90Tm90YXRpb246dn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsO2lmKGgm''@;'; put 'put ''JmguaGFzT3duUHJvcGVydHkmJlR1KGgsYSkpTT1oW2FdO2Vsc2UgaWYodiYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IEQ9aDtpZighRClyZXR1cm4gbnVsbDtjb25zdCBaPWEuc3BsaXQoIi4iKTtmb3IobGV0IHJlPTAsY2U9Wi5sZW5ndGg7cmU8Y2U7cmUr''@;'; put 'put ''KylpZihEPURbWltyZV1dLHR5cGVvZiBEPiJ1IilyZXR1cm4gbnVsbDtNPUR9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoTT1hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShkLGQrMSlbMF0pKTtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlEYXRhIikpe2NvbnN0IEQ9RmQoTSk7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5wcm9wVG9Db2woYSksRCwiZ2V0IiksRC5pc1RvdWNoZWQoKSYmKE09RC52YWx1ZSl9cmV0dXJuIE19Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCx0aGlzLnByb3BUb0NvbChhKSkuY29weWFibGU/''@;'; put 'put ''dGhpcy5nZXQobCxhKToiIn1zZXQobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTtsZXQgZj1kLHY9dGhpcy5kYXRhU291cmNlW2hdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKHY9aXNOYU4oTSk/TTp2LHRoaXMuaG90Lmhh''@;'; put 'put ''c0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgWj1GZChmKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsaCx0aGlzLnByb3BUb0NvbChhKSxaLCJzZXQiKSxaLmlzVG91Y2hlZCgpJiYoZj1aLnZhbHVlKX1jb25zdHtkYXRhRG90Tm90YXRpb246RH09dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKTtpZih2JiZ2Lmhhc093blByb3BlcnR5JiZUdSh2LGEpKXZbYV09ZjtlbHNlIGlmKEQmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5pbmRleE9mKCIuIik+LTEpe2xldCBjZSxaPXYscmU9MDtjb25zdCBiZT1hLnNwbGl0KCIuIik7Zm9yKHJlPTAsY2U9YmUubGVuZ3RoLTE7cmU8Y2U7cmUr''@;'; put 'put ''Kyl7aWYoIl9fcHJvdG9fXyI9PT1iZVtyZV18fCJjb25zdHJ1Y3RvciI9PT1iZVtyZV18fCJwcm90b3R5cGUiPT09YmVbcmVdKXJldHVybjt0eXBlb2YgWltiZVtyZV1dPiJ1IiYmKFpbYmVbcmVdXT17fSksWj1aW2JlW3JlXV19WltiZVtyZV1dPWZ9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYSlhKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik7ZWxzZXtpZigiX19wcm90b19fIj09PWF8fCJjb25zdHJ1Y3RvciI9PT1hfHwicHJvdG90eXBlIj09PWEpcmV0dXJuO3ZbYV09Zn19dmlzdWFsUm93c1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50''@;'; put 'put ''U291cmNlUm93cygpLGg9W107bGV0IE0sZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpLGgucHVzaChNKSx2LT0xLGYrPTE7cmV0dXJuIGh9dmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygp''@;'; put 'put ''LGg9W107bGV0IGY9KGQrbCklZCx2PWE7Zm9yKDtmPGQmJnY7KXtjb25zdCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKE0pLHYtPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bCsrKWZvcihsZXQg''@;'; put 'put ''YT0wO2E8dGhpcy5ob3QuY291bnRDb2xzKCk7YSsrKXRoaXMuc2V0KGwsdGhpcy5jb2xUb1Byb3AoYSksIiIpfWdldExlbmd0aCgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEubWF4Um93cztsZXQgYTthPWw8MHx8MD09PWw/MDpsfHwxLzA7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBl''@;'; put 'put ''ci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5ob3QuY291bnRSb3dzKCktMSwwKSxjb2w6TWF0aC5tYXgodGhpcy5ob3QuY291bnRDb2xzKCktMSwwKX07''@;'; put 'put ''cmV0dXJuIGwucm93LWEucm93IT0wfHx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdlKGwsYSxk''@;'; put 'put ''KXtjb25zdCBoPVtdO2xldCBmLHYsTTtjb25zdCBEPXRoaXMudGFibGVNZXRhLm1heFJvd3MsWj10aGlzLnRhYmxlTWV0YS5tYXhDb2xzO2lmKDA9PT1EfHwwPT09WilyZXR1cm5bXTtjb25zdCByZT1kPT09VF8uREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlh''@;'; put 'put ''YmxlOnRoaXMuZ2V0LGNlPU1hdGgubWluKE1hdGgubWF4KEQtMSwwKSxNYXRoLm1heChsLnJvdyxhLnJvdykpLGJlPU1hdGgubWluKE1hdGgubWF4KFotMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWluKGwucm93LGEucm93KTtmPD1jZTtmKyspe009W107Y29uc3Qg''@;'; put 'put ''RWU9Zj49MD90aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpOmY7Zm9yKHY9TWF0aC5taW4obC5jb2wsYS5jb2wpO3Y8PWJlJiZudWxsIT09RWU7disrKU0ucHVzaChyZS5jYWxsKHRoaXMsZix0aGlzLmNvbFRvUHJvcCh2KSkpO251bGwhPT1FZSYmaC5wdXNoKE0pfXJldHVybiBofWdldFRleHQo''@;'; put 'put ''bCxhKXtyZXR1cm4gclQodGhpcy5nZXRSYW5nZShsLGEsVF8uREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQobCxhKXtyZXR1cm4gclQodGhpcy5nZXRSYW5nZShsLGEsVF8uREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmhvdD1u''@;'; put 'put ''dWxsLHRoaXMubWV0YU1hbmFnZXI9bnVsbCx0aGlzLmRhdGFTb3VyY2U9bnVsbCx0aGlzLmR1Y2tTY2hlbWE9bnVsbCx0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aD0wLHRoaXMucHJvcFRvQ29sQ2FjaGUuY2xlYXIoKSx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMH19Y29uc3QgTHJ0PVRf''@;'; put 'put ''O2Z1bmN0aW9uIGdwZShjLGwsYSxkKXtjb25zdHtob3RJbnN0YW5jZTpoLGRhdGFNYXA6ZixkYXRhU291cmNlOnYsaW50ZXJuYWxTb3VyY2U6TSxzb3VyY2U6RCxtZXRhTWFuYWdlcjpaLGZpcnN0UnVuOnJlfT1kLGNlPXAxKE0pLGJlPWguZ2V0U2V0dGluZ3MoKTtoLmRhdGFUeXBlPUFycmF5''@;'; put 'put ''LmlzQXJyYXkoYmUuZGF0YVNjaGVtYSk/ImFycmF5IjptbChiZS5kYXRhU2NoZW1hKT8iZnVuY3Rpb24iOiJvYmplY3QiLGYmJmYuZGVzdHJveSgpLGM9aC5ydW5Ib29rcyhgYmVmb3JlJHtjZX1gLGMscmUsRCk7Y29uc3QgRWU9bmV3IExydChoLGMsWik7aWYobChFZSksIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke019IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30gZ2l2ZW4pYCk7e2NvbnN0IEJlPUVl''@;'; put 'put ''LmdldFNjaGVtYSgpO2M9W107bGV0IHFlLHJ0PTAscHQ9MDtmb3IocnQ9MCxwdD1iZS5zdGFydFJvd3M7cnQ8cHQ7cnQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1oLmRhdGFUeXBlfHwhYmUuZGF0YVNjaGVtYSlpZigiYXJyYXkiPT09aC5kYXRhVHlwZSlxZT1n''@;'; put 'put ''MShCZVswXSksYy5wdXNoKHFlKTtlbHNle3FlPVtdO2ZvcihsZXQgZHQ9MCxKdD1iZS5zdGFydENvbHM7ZHQ8SnQ7ZHQrKylxZS5wdXNoKG51bGwpO2MucHVzaChxZSl9ZWxzZSBxZT1nMShCZSksYy5wdXNoKHFlKX19QXJyYXkuaXNBcnJheShjWzBdKSYmKGguZGF0YVR5cGU9ImFycmF5Iiks''@;'; put 'put ''YmUuZGF0YT1jLEVlLmRhdGFTb3VyY2U9Yyx2LmRhdGE9Yyx2LmRhdGFUeXBlPWguZGF0YVR5cGUsdi5jb2xUb1Byb3A9RWUuY29sVG9Qcm9wLmJpbmQoRWUpLHYucHJvcFRvQ29sPUVlLnByb3BUb0NvbC5iaW5kKEVlKSx2LmNvdW50Q2FjaGVkQ29sdW1ucz1FZS5jb3VudENhY2hlZENvbHVt''@;'; put 'put ''bnMuYmluZChFZSksYShFZSksaC5ydW5Ib29rcyhgYWZ0ZXIke2NlfWAsYyxyZSxEKSxyZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLE0pLGgucmVuZGVyKCkpLGguZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oaC5yb290RWxlbWVudCxbVDJlKC0xKSxSTyhoLmNvdW50Q29s''@;'; put 'put ''cygpKyhoLnZpZXc/aC5jb3VudFJvd0hlYWRlcnMoKTowKSldKX1mdW5jdGlvbiBBXyhjKXtFcChjKSYmYy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KX1mdW5jdGlvbiBGUChjKXtjb25zdHtzZWxlY3Rpb246bCx2aWV3OmF9PWMsZD1jLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCksaD1sLmdldFNlbGVjdGlvblNvdXJjZSgpLGY9YS5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLHY9YS5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCksTT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLEQ9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2ws''@;'; put 'put ''Wj1NPD1mLHJlPUQ+PXYsY2U9YS5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLGJlPWEuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpLEVlPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csQmU9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3cscWU9RWU8PWNlLHJ0PUJlPj1iZTtyZXR1cm57Z2V0''@;'; put 'put ''Q29tcHV0ZWRDb2x1bW5UYXJnZXQ6cHQ9PiJtb3VzZSI9PT1ofHwia2V5Ym9hcmQiPT09aD9wdC5jb2w6WiYmcmU/ZC5oaWdobGlnaHQuY29sOlo/TTpyZT9EOnB0LmNvbCxnZXRDb21wdXRlZFJvd1RhcmdldDpwdD0+Im1vdXNlIj09PWh8fCJrZXlib2FyZCI9PT1oP3B0LnJvdzpxZSYmcnQ/''@;'; put 'put ''ZC5oaWdobGlnaHQucm93OnFlP0VlOnJ0P0JlOnB0LnJvd319Y29uc3QgbXBlPSJncmlkRGVmYXVsdCIsV209ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2Z1bmN0aW9uIHZwZShjKXtjb25zdCBhPWMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGEu''@;'; put 'put ''dHlwZT0idGV4dCIsYS5uYW1lPSJfX2h0Rm9jdXNDYXRjaGVyIixhLmNsYXNzTGlzdC5hZGQoImh0Rm9jdXNDYXRjaGVyIiksYy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhhLFttRSgiRm9jdXMgY2F0Y2hlciIpXSksYX1mdW5jdGlvbiBFWChjKXtjb25zdHtyb3dJbmRleE1hcHBlcjps''@;'; put 'put ''LGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse25hdmlnYWJsZUhlYWRlcnM6ZH09Yy5nZXRTZXR0aW5ncygpO2xldCBoPWQmJmMuY291bnRDb2xIZWFkZXJzKCk+MD8tYy5jb3VudENvbEhlYWRlcnMoKTowLGY9ZCYmYy5jb3VudFJvd0hlYWRlcnMoKT4wPy1jLmNvdW50Um93SGVhZGVycygpOjA7''@;'; put 'put ''cmV0dXJuIDA9PT1oJiYoaD1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLDA9PT1mJiYoZj1hLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLG51bGw9PT1ofHxudWxsPT09Zj9udWxsOmMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1mdW5jdGlvbiBUWChjKXt2YXIg''@;'; put 'put ''bCxhO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09Yyx7bmF2aWdhYmxlSGVhZGVyczpmfT1jLmdldFNldHRpbmdzKCk7bGV0IHY9ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTEsTT1oLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMTtpZih2''@;'; put 'put ''PDApe2lmKCFmfHwwPT09Yy5jb3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDt2PS0xfWlmKE08MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO009LTF9cmV0dXJuIGMuX2NyZWF0ZUNlbGxDb29yZHMobnVsbCE9PShsPWQuZ2V0VmlzdWFsRnJvbVJlbmRl''@;'; put 'put ''cmFibGVJbmRleCh2KSkmJnZvaWQgMCE9PWw/bDp2LG51bGwhPT0oYT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSkpJiZ2b2lkIDAhPT1hP2E6TSl9Y29uc3QgYnBlPW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJzcGFjZWJhciIsInNwYWNlIl0sWyJzY3JvbGwiLCJzY3JvbGxs''@;'; put 'put ''b2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVkaWFuZXh0dHJhY2siLCJtZWRpYXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVkaWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1cCIsImF1ZGlvdm9sdW1ldXAiXSxbInZvbHVtZWRvd24iLCJh''@;'; put 'put ''dWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11dGUiXSxbIm11bHRpcGx5IiwiKiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJhY3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0Il0sWyJyaWdodCIsImFycm93cmlnaHQiXSxbInVwIiwiYXJy''@;'; put 'put ''b3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksSFA9Yz0+Yy5tYXAobD0+e2NvbnN0IGE9bC50b0xvd2VyQ2FzZSgpO3JldHVybiBicGUuaGFzKGEpP2JwZS5nZXQoYSk6YX0pLnNvcnQoKS5qb2luKCIrIikseXBlPW5ldyBNYXAoW1s5NiwibnVtcGFkMCJdLFs5NywibnVtcGFkMSJdLFs5''@;'; put 'put ''OCwibnVtcGFkMiJdLFs5OSwibnVtcGFkMyJdLFsxMDAsIm51bXBhZDQiXSxbMTAxLCJudW1wYWQ1Il0sWzEwMiwibnVtcGFkNiJdLFsxMDMsIm51bXBhZDciXSxbMTA0LCJudW1wYWQ4Il0sWzEwNSwibnVtcGFkOSJdLFsxMDYsIm11bHRpcGx5Il0sWzEwNywiYWRkIl0sWzEwOCwiZGVjaW1h''@;'; put 'put ''bCJdLFsxMDksInN1YnRyYWN0Il0sWzExMCwiZGVjaW1hbCJdLFsxMTEsImRpdmlkZSJdLFsxMTIsImYxIl0sWzExMywiZjIiXSxbMTE0LCJmMyJdLFsxMTUsImY0Il0sWzExNiwiZjUiXSxbMTE3LCJmNiJdLFsxMTgsImY3Il0sWzExOSwiZjgiXSxbMTIwLCJmOSJdLFsxMjEsImYxMCJdLFsx''@;'; put 'put ''MjIsImYxMSJdLFsxMjMsImYxMiJdLFsxODYsInNlbWljb2xvbiJdLFsxODcsImVxdWFsIl0sWzE4OCwiY29tbWEiXSxbMTg5LCJtaW51cyJdLFsxOTAsInBlcmlvZCJdLFsxOTEsInNsYXNoIl0sWzE5MiwiYmFja3F1b3RlIl0sWzIxOSwiYnJhY2tldGxlZnQiXSxbMjIwLCJiYWNrc2xhc2gi''@;'; put 'put ''XSxbMjIxLCJicmFja2V0cmlnaHQiXSxbMjIyLCJxdW90ZSJdXSksQVg9Yz0+e2xldHt3aGljaDpsLGtleTphfT1jO2lmKHlwZS5oYXMobCkpcmV0dXJuIHlwZS5nZXQobCk7Y29uc3QgZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpLnRvTG93ZXJDYXNlKCk7cmV0dXJuL15bYS16MC05XSQvLnRl''@;'; put 'put ''c3QoZCk/ZDphLnRvTG93ZXJDYXNlKCl9LF9wZT1TeW1ib2woInNob3J0Y3V0LWNvbnRleHQiKTtmdW5jdGlvbiB3cGUoYyl7cmV0dXJuIHFvKGMpJiZjLl9fa2luZE9mPT09X3BlfWNvbnN0ICRydD1bIm1ldGEiLCJhbHQiLCJzaGlmdCIsImNvbnRyb2wiXSxpVD1mdW5jdGlvbiBHcnQoKXtj''@;'; put 'put ''b25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwpfSxyZWxlYXNlQWxsKCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+Yy5oYXMobCl9fSgpLGFUPVtdO2xldCBOUD0wO2NvbnN0IHFydD1jPT57bGV0e293bmVyV2luZG93OmwsaGFu''@;'; put 'put ''ZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj1KTyh7ZXJyb3JJZEV4aXN0czpCZT0+YFRoZSAiJHtCZX0iIGNvbnRleHQgbmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCB2PSJncmlkIjtjb25zdCBEPSgpPT52LFo9QmU9PmYuZ2V0''@;'; put 'put ''SXRlbShCZSk7bGV0IGNlPSExO2NvbnN0IGJlPWZ1bmN0aW9uKEJlLHFlKXtsZXQgcnQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQoKTtjb25zdCBwdD13cGUocnQpP3J0OloocnQpO2xldCBkdD0hMTtpZighcHQuaGFzU2hvcnRjdXQo''@;'; put 'put ''cWUpKXJldHVybiBkdDtjb25zdCBKdD1wdC5nZXRTaG9ydGN1dHMocWUpO2ZvcihsZXQgdm49MDt2bjxKdC5sZW5ndGg7dm4rKyl7Y29uc3R7Y2FsbGJhY2s6Q24scnVuT25seUlmOnRuLHByZXZlbnREZWZhdWx0Ok1uLHN0b3BQcm9wYWdhdGlvbjpDcixjYXB0dXJlQ3RybDpHcixmb3J3YXJk''@;'; put 'put ''VG9Db250ZXh0Om1yfT1KdFt2bl07aWYoITA9PT10bihCZSkpe2lmKGNlPUdyLGR0PSExPT09Q24oQmUscWUpLGNlPSExLE1uJiZCZS5wcmV2ZW50RGVmYXVsdCgpLENyJiYoQjIoQmUpLEJlLnN0b3BQcm9wYWdhdGlvbigpKSxkdClicmVhazttciYmYmUoQmUscWUsbXIpfX1yZXR1cm4gZHR9''@;'; put 'put ''LEVlPWZ1bmN0aW9uIEtydChjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PiRydC5pbmNsdWRlcyhFZSksdj1mdW5jdGlvbihFZSl7bGV0IEJlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgcWU9W107cmV0dXJuIEVlLmFsdEtleSYm''@;'; put 'put ''cWUucHVzaCgiYWx0IiksQmUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9xZS5wdXNoKCJjb250cm9sL21ldGEiKTooRWUuY3RybEtleSYmcWUucHVzaCgiY29udHJvbCIpLEVlLm1ldGFLZXkmJnFlLnB1c2goIm1ldGEiKSksRWUuc2hpZnRLZXkmJnFlLnB1c2goInNoaWZ0IikscWV9LE09''@;'; put 'put ''RWU9PntpZighMT09PWwoRWUpfHwhMT09PWEoRWUpfHwyMjk9PT1FZS5rZXlDb2RlfHwic3RyaW5nIiE9dHlwZW9mIEVlLmtleXx8Rm0oRWUpKXJldHVybjtjb25zdCBxZT1BWChFZSk7bGV0IHJ0PVtdO2YocWUpfHwocnQ9dihFZSkpO2NvbnN0IHB0PVtxZV0uY29uY2F0KHJ0KTshaChFZSxw''@;'; put 'put ''dCkmJih6TygpJiZydC5pbmNsdWRlcygibWV0YSIpfHwhek8oKSYmcnQuaW5jbHVkZXMoImNvbnRyb2wiKSkmJmgoRWUsW3FlXS5jb25jYXQodihFZSwhMCkpKSxkKEVlKX0sRD1FZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUua2V5KXtjb25zdCBCZT1BWChFZSk7ZihCZSkmJmlULnByZXNz''@;'; put 'put ''KEJlKX19LFo9RWU9PntpZigic3RyaW5nIj09dHlwZW9mIEVlLmtleSl7Y29uc3QgQmU9QVgoRWUpO2YoQmUpJiZpVC5yZWxlYXNlKEJlKX19LHJlPSgpPT57aVQucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoTlArPTE7RWU7KTE9PT1OUCYmKEVlLmRvY3Vt''@;'; put 'put ''ZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSxhVC5wdXNoKHtldmVudDoia2V5ZG93biIsbGlzdGVuZXI6RH0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsWiksYVQucHVzaCh7ZXZlbnQ6ImtleXVw''@;'; put 'put ''IixsaXN0ZW5lcjpafSkpLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIscmUpLEVlPUI3KEVlKX0sdW5tb3VudDooKT0+e2xldCBFZT1jO2Zv''@;'; put 'put ''cihOUC09MTtFZTspe2lmKDA9PT1OUCl7Zm9yKGxldCBCZT0wO0JlPGFULmxlbmd0aDtCZSsrKXtjb25zdHtldmVudDpxZSxsaXN0ZW5lcjpydH09YVRbQmVdO0VlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHFlLHJ0KX1hVC5sZW5ndGg9MH1FZS5kb2N1''@;'; put 'put ''bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHJlKSxFZT1CNyhFZSl9fSxpc1ByZXNzZWQ6RWU9PmlULmlzUHJlc3NlZChFZSkscmVsZWFzZVBy''@;'; put 'put ''ZXNzZWRLZXlzOigpPT5pVC5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLGJlKTtyZXR1cm4gRWUubW91bnQoKSx7YWRkQ29udGV4dDpCZT0+e2NvbnN0IHFlPShjPT57Y29uc3QgbD1KTyh7ZXJyb3JJZEV4aXN0czpEPT5gVGhlICIke0R9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQg''@;'; put 'put ''aW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6RCxjYWxsYmFjazpaLGdyb3VwOnJlLHJ1bk9ubHlJZjpjZT0oKCk9PiEwKSxjYXB0dXJlQ3RybDpiZT0hMSxwcmV2ZW50RGVmYXVsdDpFZT0hMCxzdG9wUHJvcGFnYXRpb246QmU9ITEscmVsYXRpdmVUb0dy''@;'; put 'put ''b3VwOnFlLHBvc2l0aW9uOnJ0LGZvcndhcmRUb0NvbnRleHQ6cHR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihfYyhyZSkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAu''@;'; put 'put ''Iik7aWYoITE9PT1tbChaKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24uIik7aWYoITE9PT1BcnJheS5pc0FycmF5KEQpKXRocm93IG5ldyBFcnJvcihnbGBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5''@;'; put 'put ''IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgZHQ9e2Nh''@;'; put 'put ''bGxiYWNrOlosZ3JvdXA6cmUscnVuT25seUlmOmNlLGNhcHR1cmVDdHJsOmJlLHByZXZlbnREZWZhdWx0OkVlLHN0b3BQcm9wYWdhdGlvbjpCZX07UGEocWUpJiYoZHQucmVsYXRpdmVUb0dyb3VwPXFlLGR0LnBvc2l0aW9uPXJ0KSx3cGUocHQpJiYoZHQuZm9yd2FyZFRvQ29udGV4dD1wdCks''@;'; put 'put ''RC5mb3JFYWNoKEp0PT57Y29uc3Qgdm49SFAoSnQpO2lmKGwuaGFzSXRlbSh2bikpe2NvbnN0IHRuPWwuZ2V0SXRlbSh2bik7bGV0IE1uPXRuLmZpbmRJbmRleChDcj0+Q3IuZ3JvdXA9PT1xZSk7LTEhPT1Nbj8iYmVmb3JlIj09PXJ0P01uLT0xOk1uKz0xOk1uPXRuLmxlbmd0aCx0bi5zcGxp''@;'; put 'put ''Y2UoTW4sMCxkdCl9ZWxzZSBsLmFkZEl0ZW0odm4sW2R0XSl9KX0saD1EPT57Y29uc3QgWj1IUChEKTtsLnJlbW92ZUl0ZW0oWil9O3JldHVybntfX2tpbmRPZjpfcGUsYWRkU2hvcnRjdXQ6YSxhZGRTaG9ydGN1dHM6ZnVuY3Rpb24oRCl7bGV0IFo9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0QuZm9yRWFjaChyZT0+e1hvKFosKGNlLGJlKT0+eyExPT09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlLGJlKSYmKHJlW2JlXT1aW2JlXSl9KSxhKHJlKX0pfSxnZXRTaG9ydGN1dHM6RD0+e2NvbnN0IFo9''@;'; put 'put ''SFAoRCkscmU9bC5nZXRJdGVtKFopO3JldHVybiBQYShyZSk/cmUuc2xpY2UoKTpbXX0saGFzU2hvcnRjdXQ6RD0+e2NvbnN0IFo9SFAoRCk7cmV0dXJuIGwuaGFzSXRlbShaKX0scmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpEPT57bC5nZXRJdGVtcygp''@;'; put 'put ''LmZvckVhY2gocmU9PntsZXRbY2UsYmVdPXJlO2NvbnN0IEVlPWJlLmZpbHRlcihCZT0+QmUuZ3JvdXAhPT1EKTswPT09RWUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkoY2UpKTooYmUubGVuZ3RoPTAsYmUucHVzaCguLi5FZSkpfSl9fX0pKEJlKTtyZXR1cm4gZi5hZGRJdGVtKEJlLHFl''@;'; put 'put ''KSxxZX0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6RCxnZXRDb250ZXh0Olosc2V0QWN0aXZlQ29udGV4dE5hbWU6QmU9PntpZighZi5oYXNJdGVtKEJlKSl0aHJvdyBuZXcgRXJyb3IoZ2xgWW91J3ZlIHRyaWVkIHRvIGFjdGl2YXRlIHRoZSAiJHtCZX0iIHNob3J0Y3V0IGNvbnRleHRceDIwCiAg''@;'; put 'put ''ICAgICAgdGhhdCBkb2VzIG5vdCBleGlzdC4gQmVmb3JlIGFjdGl2YXRpb24sIHJlZ2lzdGVyIHRoZSBjb250ZXh0IHVzaW5nIHRoZSAiYWRkQ29udGV4dCIgbWV0aG9kLmApO3Y9QmV9LGlzQ3RybFByZXNzZWQ6KCk9PiFjZSYmKEVlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxFZS5pc1ByZXNz''@;'; put 'put ''ZWQoIm1ldGEiKSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5FZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5FZS51bm1vdW50KCl9fSxYcnQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZSIsY2FsbGJhY2soYyl7Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLmNsb3NlRWRpdG9yQW5k''@;'; put 'put ''U2F2ZUNoYW5nZXMoKX19LENwZT17X2hvb2tzU3RvcmFnZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdl''@;'; put 'put ''W2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtZbih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe1hvKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwp''@;'; put 'put ''KSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtUcChDcGUsIk1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgUXJ0PUNwZTtmdW5jdGlvbiBkMyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZWl0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIHRpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgbHU9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdBSVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJ''@;'; put 'put ''TklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KTtjbGFzcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe2QzKHRoaXMsImhvdCIsdm9pZCAwKSxkMyh0aGlzLCJzdGF0ZSIsbHUuVklSR0lOKSxkMyh0aGlzLCJfb3BlbmVkIiwhMSksZDModGhp''@;'; put 'put ''cywiX2Z1bGxFZGl0TW9kZSIsITEpLGQzKHRoaXMsIl9jbG9zZUNhbGxiYWNrIixudWxsKSxkMyh0aGlzLCJURCIsbnVsbCksZDModGhpcywicm93IixudWxsKSxkMyh0aGlzLCJjb2wiLG51bGwpLGQzKHRoaXMsInByb3AiLG51bGwpLGQzKHRoaXMsIm9yaWdpbmFsVmFsdWUiLG51bGwpLGQz''@;'; put 'put ''KHRoaXMsImNlbGxQcm9wZXJ0aWVzIixudWxsKSx0aGlzLmhvdD1sLHRoaXMuaW5pdCgpfV9maXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93''@;'; put 'put ''IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVu''@;'; put 'put ''dGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZix2KXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXM9dix0aGlzLnN0YXRlPXRoaXMuaXNPcGVuZWQoKT90aGlzLnN0YXRlOmx1LlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLHY7aWYoYSl7Y29uc3QgRD10aGlzLmhvdC5nZXRTZWxlY3Rl''@;'; put 'put ''ZExhc3QoKTtkPU1hdGgubWF4KE1hdGgubWluKERbMF0sRFsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbihEWzFdLERbM10pLDApLGY9TWF0aC5tYXgoRFswXSxEWzJdKSx2PU1hdGgubWF4KERbMV0sRFszXSl9ZWxzZVtkLGgsZix2XT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtj''@;'; put 'put ''b25zdCBNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtBcnJheS5pc0FycmF5KE0pJiYoW2QsaF09TSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZix2LCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0''@;'; put 'put ''ZSE9PWx1LlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLHY9KCk9Pntp''@;'; put 'put ''Zih0aGlzLnN0YXRlPWx1LkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IEQ9InN0cmluZyI9PXR5cGVvZiBsP2w6bGModGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLnNldFZhbHVlKEQpfXRoaXMub3BlbihhKSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5mb2N1cygpLGQudmll''@;'; put 'put ''dy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfTt0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHYpLGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpfHwodGhpcy5ob3QucmVtb3Zl''@;'; put 'put ''SG9vaygiYWZ0ZXJTY3JvbGwiLHYpLHYoKSl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgZj10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9dj0+e2YmJmYodiksZCh2KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfX1pZighdGhpcy5pc1dhaXRp''@;'; put 'put ''bmcoKSl7aWYodGhpcy5zdGF0ZT09PWx1LlZJUkdJTilyZXR1cm4gdm9pZCB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KTtpZih0aGlzLnN0YXRlPT09bHUuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9p''@;'; put 'put ''ZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBlb2YgZj9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChmfHwiIik6Zl1dOltbZl1dLHRoaXMuc3RhdGU9bHUu''@;'; put 'put ''V0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIix2PT57dGhpcy5zdGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3Iodil9''@;'; put 'put ''KToodGhpcy5zdGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19fWNhbmNlbENoYW5nZXMoKXt0aGlzLnN0YXRlPWx1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcigpfWRpc2NhcmRFZGl0b3IobCl7dGhpcy5zdGF0ZT09PWx1LkZJTklTSEVEJiYoITE9PT1sJiYh''@;'; put 'put ''MCE9PXRoaXMuY2VsbFByb3BlcnRpZXMuYWxsb3dJbnZhbGlkPyh0aGlzLmhvdC5zZWxlY3RDZWxsKHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmZvY3VzKCksdGhpcy5zdGF0ZT1sdS5FRElUSU5HLHRoaXMuX2ZpcmVDYWxsYmFja3MoITEpKToodGhpcy5jbG9zZSgpLHRoaXMuX29wZW5lZD0h''@;'; put 'put ''MSx0aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5zdGF0ZT1sdS5WSVJHSU4sdGhpcy5fZmlyZUNhbGxiYWNrcyghMCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSkpfWVuYWJsZUZ1bGxFZGl0TW9kZSgpe3RoaXMuX2Z1bGxFZGl0''@;'; put 'put ''TW9kZT0hMH1pc0luRnVsbEVkaXRNb2RlKCl7cmV0dXJuIHRoaXMuX2Z1bGxFZGl0TW9kZX1pc09wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9aXNXYWl0aW5nKCl7cmV0dXJuIHRoaXMuc3RhdGU9PT1sdS5XQUlUSU5HfWdldEVkaXRlZENlbGxSZWN0KCl7dmFyIGw7Y29uc3QgYT10aGlz''@;'; put 'put ''LmdldEVkaXRlZENlbGwoKTtpZighYSlyZXR1cm47Y29uc3R7d3RPdmVybGF5czpkLHd0Vmlld3BvcnQ6aH09dGhpcy5ob3Qudmlldy5fd3QsZj10aGlzLmhvdC5yb290V2luZG93LHY9VTAoYSksTT1zdShhKSxEPVUwKHRoaXMuaG90LnJvb3RFbGVtZW50KSxaPXN1KHRoaXMuaG90LnJvb3RF''@;'; put 'put ''bGVtZW50KSxyZT1kLnRvcE92ZXJsYXkuaG9sZGVyLGNlPWQuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixiZT1yZSE9PWY/cmUuc2Nyb2xsVG9wOjAsRWU9Y2UhPT1mP2NlLnNjcm9sbExlZnQ6MCxCZT1mLmlubmVyV2lkdGgtRC5sZWZ0LVose3d0VGFibGU6cWV9PW51bGwhPT0obD1kLmdl''@;'; put 'put ''dFBhcmVudE92ZXJsYXkoYSkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QscnQ9cWUubmFtZSxwdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHJ0KT9iZTowLGR0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMocnQpP0VlOjA7bGV0IHZuPXYu''@;'; put 'put ''dG9wLUQudG9wLSh2LnRvcD09PUQudG9wPzA6MSktcHQsQ249MDtDbj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC12LmxlZnQtTS1CZS0xK2R0OnYubGVmdC1ELmxlZnQtMS1kdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMocnQpJiYodm4rPWQudG9w''@;'; put 'put ''T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkmJihDbis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgdG49dGhpcy5ob3QuaGFzQ29s''@;'; put 'put ''SGVhZGVycygpLE1uPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLENyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLG1yPXRoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KHRuJiZNbjw9MHx8TW49PT1tcikmJih2bis9MSksQ3I8PTAmJihDbis9MSk7Y29uc3QgR249aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFy''@;'; put 'put ''dFBvc2l0aW9uLGFpPWguY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixfaT1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxPbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx6cj1mMCh0aGlzLmhvdC5yb290RG9j''@;'; put 'put ''dW1lbnQpO2xldCBKbj1hLm9mZnNldFRvcDtpZihbImlubGluZV9zdGFydCIsIm1hc3RlciJdLmluY2x1ZGVzKHJ0KSYmKEpuKz1Hbi1PbiksWyJib3R0b20iLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHJ0KSl7Y29uc3R7d3RWaWV3cG9ydDpIcix3dFRhYmxlOnFy''@;'; put 'put ''fT1kLmJvdHRvbU92ZXJsYXkuY2xvbmU7Sm4rPUhyLmdldFdvcmtzcGFjZUhlaWdodCgpLXFyLmdldEhlaWdodCgpLXpyfWxldCBJcj1hLm9mZnNldExlZnQ7dGhpcy5ob3QuaXNSdGwoKT8oSXI9SXI+PTA/cWUuZ2V0V2lkdGgoKS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoSXIpLElyKz1haS1f''@;'; put 'put ''aS1NKTpbInRvcCIsIm1hc3RlciIsImJvdHRvbSJdLmluY2x1ZGVzKHJ0KSYmKElyKz1haS1faSk7Y29uc3QgJHI9Zi5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpLHdpPXRoaXMuaG90LmlzUnRsKCk/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiLGVhPXBhcnNlSW50KCRy''@;'; put 'put ''W3dpXSwxMCk+MD8wOjEsZmE9cGFyc2VJbnQoJHIuYm9yZGVyVG9wV2lkdGgsMTApPjA/MDoxLHZ0PXN1KGEpK2VhLE50PXh1KGEpK2ZhLEh0PUUkKHJlKT96cjowLEhuPVQkKGNlKT96cjowLHRyPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoSXIpLUh0K2VhO3Jl''@;'; put 'put ''dHVybnt0b3A6dm4sc3RhcnQ6Q24saGVpZ2h0Ok50LG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChKbiktSG4rZmEsdGhpcy5ob3Qudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpLHdpZHRoOnZ0LG1heFdpZHRoOnRyfX1nZXRF''@;'; put 'put ''ZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90''@;'; put 'put ''dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4i''@;'; put 'put ''aHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9y''@;'; put 'put ''U2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1z''@;'; put 'put ''dGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJv''@;'; put 'put ''dHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0IiksYX19VGwoa18sUXJ0KTtjb25zdCByaXQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlz''@;'; put 'put ''IixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1kLmdldEFjdGl2ZUVkaXRvcigpO2guaXNJbkZ1bGxFZGl0TW9kZSgpJiZoLnN0YXRlPT09bHUuRURJVElOR3x8KGQuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpLGMuZ2V0U2VsZWN0ZWQoKSYmKGEu''@;'; put 'put ''aW5jbHVkZXMoImFycm93ZG93biIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCk6YS5pbmNsdWRlcygiYXJyb3d1cCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApOmEuaW5jbHVkZXMoImFycm93bGVmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEq''@;'; put 'put ''Yy5nZXREaXJlY3Rpb25GYWN0b3IoKSk6YS5pbmNsdWRlcygiYXJyb3dyaWdodCIpJiZjLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpKSxsLnByZXZlbnREZWZhdWx0KCkpfX0saWl0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixj''@;'; put 'put ''YWxsYmFjayhjLGwpe2NvbnN0IGE9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2EuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsLmN0cmxLZXl8fGwubWV0YUtleSksYS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKX19LGFpdD17bmFtZToiZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxs''@;'; put 'put ''YmFjayhjKXtjb25zdCBsPWMuX2dldEVkaXRvck1hbmFnZXIoKTtsLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUoYy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpLGwuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fSxvaXQ9e25hbWU6ImVkaXRvckZhc3RPcGVu''@;'; put 'put ''IixjYWxsYmFjayhjLGwpe2NvbnN0e2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5pc0hlYWRlcigpfHxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkub3BlbkVkaXRvcihudWxsLGwsITApfX0sc2l0PXtuYW1lOiJlZGl0b3JPcGVuIixjYWxsYmFjayhjLGwsYSl7Y29uc3Qg''@;'; put 'put ''ZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpmfT1oO2lmKGMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wKXtjb25z''@;'; put 'put ''dCB2PWMuZ2V0U2V0dGluZ3MoKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmVudGVyTW92ZXM/di5lbnRlck1vdmVzKGwpOnYuZW50ZXJNb3ZlczthLmluY2x1ZGVzKCJzaGlmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKC1NLnJvdywtTS5jb2wpOmMuc2VsZWN0aW9uLnRyYW5zZm9y''@;'; put 'put ''bUZvY3VzKE0ucm93LE0uY29sKX1lbHNlIGYuaXNIZWFkZXIoKXx8KGMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmc/ZC5jZWxsUHJvcGVydGllcy5yZWFkT25seT9kLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpOmQub3BlbkVkaXRvcihudWxsLGwsITApOmQubW92ZVNlbGVj''@;'; put 'put ''dGlvbkFmdGVyRW50ZXIobCksQjIobCkpfX0sY2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd24iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigp''@;'; put 'put ''JiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMSwwKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSx1aXQ9e25hbWU6ImV4dGVu''@;'; put 'put ''ZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse3RvOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPU1hdGgubWluKGQucm93K2MuY291bnRWaXNpYmxlUm93cygpLGMuY291bnRS''@;'; put 'put ''b3dzKCktMSksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYsZC5jb2wpLE09ZC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEQ9TWF0aC5taW4odi5yb3ctTSxjLmNvdW50Um93cygpLTEp''@;'; put 'put ''O2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OkQsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxkaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9u''@;'; put 'put ''TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvbHVtbkhlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpKX19LGhpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7''@;'; put 'put ''Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRl''@;'; put 'put ''cigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpKX19LGZpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjps''@;'; put 'put ''fT1jLHtoaWdobGlnaHQ6YSxmcm9tOmQsdG86aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpP2wuc2VsZWN0QWxsKCEwLCEwKTpjLnNlbGVjdENvbHVtbnMoZC5jb2wsaC5jb2wsYSksbC5tYXJrRW5k''@;'; put 'put ''U291cmNlKCl9fSxwaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hl''@;'; put 'put ''YWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKSxEPWguY2xvbmUoKTtELnJvdz1kLnJvdyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5n''@;'; put 'put ''ZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKE0sZi5jb2wpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxnaXQ9e25hbWU6ImV4dGVuZENlbGxz''@;'; put 'put ''U2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5p''@;'; put 'put ''c1NlbGVjdGVkQnlDb3JuZXIoKSYmZC5pc0NlbGwoKSl7Y29uc3Qgdj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpLE09aC5jbG9uZSgpO00uY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoTSx2b2lkIDAsITEs''@;'; put 'put ''ZC5jbG9uZSgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csdikpLGwubWFya0VuZFNvdXJjZSgpfX19LG1pdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygp''@;'; put 'put ''LmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYsMSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sdml0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpm''@;'; put 'put ''fT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0p''@;'; put 'put ''LEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LGJpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bMCwxXTpbYy5jb3VudENvbHMoKS0xLC0xXSksRD1o''@;'; put 'put ''LmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0seWl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSksRD1oLmNsb25lKCk7RC5yb3c9ZC5yb3csbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwu''@;'; put 'put ''c2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhNLGYuY29sKSksbC5tYXJrRW5kU291cmNlKCl9fX0sX2l0PXtuYW1lOiJleHRl''@;'; put 'put ''bmRDZWxsc1NlbGVjdGlvblRvUm93cyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/bC5z''@;'; put 'put ''ZWxlY3RBbGwoITAsITApOmMuc2VsZWN0Um93cyhkLnJvdyxoLnJvdyxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LHdpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgtMSwwKSxs''@;'; put 'put ''Lm1hcmtFbmRTb3VyY2UoKSl9fSxDaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHt0bzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1NYXRoLm1heChk''@;'; put 'put ''LnJvdy1jLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxEPU1hdGgubWF4KHYucm93''@;'; put 'put ''LU0sMCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodiksbC5tYXJrRW5kU291cmNlKCksYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6RCx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LE1pdD17bmFtZToibW92ZUNlbGxTZWxlY3Rp''@;'; put 'put ''b25Eb3duIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMSwwKSxsLm1hcmtFbmRTb3VyY2UoKX19LHhpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2so''@;'; put 'put ''Yyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09''@;'; put 'put ''Zj8xOmYsaD09PWMuY291bnRSb3dzKCktMT9mPTE6aCtmPmMuY291bnRSb3dzKCkmJihmPWMuY291bnRSb3dzKCktaC0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydChmLDApLGwubWFya0VuZFNvdXJjZSgpLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdo''@;'; put 'put ''bGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LEVpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRpbmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGEuaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/YS50cmFu''@;'; put 'put ''c2Zvcm1Gb2N1cygtZi5yb3csLWYuY29sKTphLnRyYW5zZm9ybVN0YXJ0KC1mLnJvdywtZi5jb2wpLGEubWFya0VuZFNvdXJjZSgpfX0sVGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0IixjYWxsYmFjayhjLGwpe2NvbnN0e3NlbGVjdGlvbjphfT1jLGQ9Yy5nZXRTZXR0''@;'; put 'put ''aW5ncygpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGQudGFiTW92ZXM/ZC50YWJNb3ZlcyhsKTpkLnRhYk1vdmVzO2EubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxhLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29s''@;'; put 'put ''cygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wP2EudHJhbnNmb3JtRm9jdXMoZi5yb3csZi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoZi5yb3csZi5jb2wpLGEubWFya0VuZFNvdXJjZSgpfX0sQWl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkxlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3Nl''@;'; put 'put ''bGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCl9fSxraXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uUmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlv''@;'; put 'put ''bjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCl9fSxEaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246''@;'; put 'put ''bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKTtudWxsPT09ZCYmKGQ9LTEpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGQsYSkpfX0sSWl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVk''@;'; put 'put ''Um93c0JvdHRvbSwxMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLWgtMSwtMSksdj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhmLHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFJpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0''@;'; put 'put ''UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSkpKSxsLm1hcmtFbmRTb3VyY2UoKX19LExpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rp''@;'; put 'put ''b25Ub01vc3RJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxm''@;'; put 'put ''PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLGwubWFya0VuZFNvdXJjZSgpfX0sT2l0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxi''@;'; put 'put ''YWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMsZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdztsZXQgaD1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO251''@;'; put 'put ''bGw9PT1oJiYoaD1jLmlzUnRsKCk/LTE6LWMuY291bnRSb3dIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFBpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01v''@;'; put 'put ''c3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7cm93OmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50''@;'; put 'put ''Q29scygpLTEsLTFdKTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy1jLmNvdW50Um93SGVhZGVycygpOi0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSksbC5tYXJrRW5kU291cmNlKCl9fSxGaXQ9e25hbWU6Im1vdmVD''@;'; put 'put ''ZWxsU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtudWxsPT09ZCYmKGQ9''@;'; put 'put ''LWMuY291bnRDb2xIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGEpKSxsLm1hcmtFbmRTb3VyY2UoKX19LEhpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCIsY2FsbGJh''@;'; put 'put ''Y2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCwxMCksZj1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLHY9YS5nZXRO''@;'; put 'put ''ZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwxKSxNPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYsMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKHYsTSkpLGwubWFya0VuZFNvdXJjZSgpfX0sTml0PXtuYW1lOiJtb3ZlQ2Vs''@;'; put 'put ''bFNlbGVjdGlvblVwIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoLTEsMCksbC5tYXJrRW5kU291cmNlKCl9fSxWaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQiLGNhbGxi''@;'; put 'put ''YWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmF9PWMuZ2V0U2V0dGluZ3MoKSxkPWE/Yy5jb3VudENvbEhlYWRlcnMoKTowLHtyb3c6aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZj1jLmNvdW50VmlzaWJsZVJvd3MoKStkO2Y9''@;'; put 'put ''MD09PWY/LTE6LWYsaD09PS1kP2Y9LTE6aCtmPGQmJihmPS0oaCtkKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoZiwwKSxsLm1hcmtFbmRTb3VyY2UoKSxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0''@;'; put 'put ''VG8oe3JvdzowfSl9fSxqaXQ9e25hbWU6ImVtcHR5U2VsZWN0ZWRDZWxscyIsY2FsbGJhY2soYyl7Yy5lbXB0eVNlbGVjdGVkQ2VsbHMoKSxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkucHJlcGFyZUVkaXRvcigpfX0seml0PXtuYW1lOiJzY3JvbGxUb0ZvY3VzZWRDZWxsIixjYWxsYmFjayhjKXtj''@;'; put 'put ''b25zdHtoaWdobGlnaHQ6bH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLTEsZD1jLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCktMSxoPWMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpKzEsZj1jLmdldExhc3RGdWxseVZpc2libGVD''@;'; put 'put ''b2x1bW4oKSsxLHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLE09Yy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpO2lmKCFjLl9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLmluY2x1ZGVzKGwpJiYobC5yb3c+PTB8fGwuY29sPj0wKSl7Y29uc3QgWj17fTtpZihsLmNvbD49MCl7Y29uc3QgcmU9TWF0''@;'; put 'put ''aC5mbG9vcihjLmNvdW50VmlzaWJsZUNvbHMoKS8yKTtaLmNvbD1NYXRoLm1heChsLmNvbC1yZSwwKX1pZihsLnJvdz49MCl7Y29uc3QgcmU9TWF0aC5mbG9vcihjLmNvdW50VmlzaWJsZVJvd3MoKS8yKTtaLnJvdz1NYXRoLm1heChsLnJvdy1yZSwwKX1jLnNjcm9sbFZpZXdwb3J0VG8oey4u''@;'; put 'put ''LlosdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxVaXQ9e25hbWU6InNlbGVjdEFsbENlbGxzIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVy''@;'; put 'put ''c0hpZ2hsaWdodDohMH0pLGwubWFya0VuZFNvdXJjZSgpfX0sWml0PXtuYW1lOiJzZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGln''@;'; put 'put ''aGxpZ2h0OiExfSksbC5tYXJrRW5kU291cmNlKCl9fSxXaXQ9e25hbWU6InBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEiLGNhbGxiYWNrKGMpe2NvbnN0IGw9Yy5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzphLGNvbDpkfT1sW2wubGVuZ3RoLTFdLmhpZ2hsaWdodC5ub3JtYWxpemUoKSxoPWMu''@;'; put 'put ''Z2V0RGF0YUF0Q2VsbChhLGQpLGY9bmV3IE1hcDtmb3IobGV0IHY9MDt2PGwubGVuZ3RoO3YrKylsW3ZdLmZvckFsbCgoTSxEKT0+e2lmKE0+PTAmJkQ+PTAmJihNIT09YXx8RCE9PWQpKXtjb25zdHtyZWFkT25seTpafT1jLmdldENlbGxNZXRhKE0sRCk7Wnx8Zi5zZXQoYCR7TX14JHtEfWAs''@;'; put 'put ''W00sRCxoXSl9fSk7Yy5zZXREYXRhQXRDZWxsKEFycmF5LmZyb20oZi52YWx1ZXMoKSkpfX0sWWl0PVsuLi5mdW5jdGlvbiBsaXQoKXtyZXR1cm5bWHJ0LHJpdCxpaXQsYWl0LG9pdCxzaXRdfSgpLC4uLmZ1bmN0aW9uIFNpdCgpe3JldHVybltjaXQsdWl0LGRpdCxoaXQsZml0LHBpdCxnaXQs''@;'; put 'put ''bWl0LHZpdCxiaXQseWl0LF9pdCx3aXQsQ2l0XX0oKSwuLi5mdW5jdGlvbiBCaXQoKXtyZXR1cm5bTWl0LHhpdCxFaXQsVGl0LEFpdCxraXQsRGl0LElpdCxSaXQsTGl0LE9pdCxQaXQsRml0LEhpdCxOaXQsVml0XX0oKSxqaXQseml0LFVpdCxaaXQsV2l0XTtmdW5jdGlvbiBTcGUoYyl7Y29u''@;'; put 'put ''c3QgbD17fTtyZXR1cm4gWWl0LmZvckVhY2goYT0+e2xldHtuYW1lOmQsY2FsbGJhY2s6aH09YTtsW2RdPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGgoYywuLi52KX19KSxs''@;'; put 'put ''fWZ1bmN0aW9uIEdpdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksYT1TcGUoYyksZD17Z3JvdXA6V219O2wuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaCxmKT0+YS5lZGl0''@;'; put 'put ''b3JDbG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlzOltbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6''@;'; put 'put ''W1siVGFiIl0sWyJUYWIiLCJTaGlmdCJdLFsiUGFnZURvd24iXSxbIlBhZ2VVcCJdXSxmb3J3YXJkVG9Db250ZXh0OmMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZShoLGYpfSx7a2V5czpbWyJBcnJv''@;'; put 'put ''d0Rvd24iXSxbIkFycm93VXAiXSxbIkFycm93TGVmdCJdLFsiQXJyb3dSaWdodCJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5cyhoLGYpfSx7a2V5czpbWyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJd''@;'; put 'put ''XSxjYWxsYmFjazooKT0+YS5lZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmcoKX1dLGQpfWZ1bmN0aW9uICRpdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZ3JpZCIpLGE9U3BlKGMpLGQ9e3J1bk9ubHlJZjooKT0+e2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6''@;'; put 'put ''aH09Yy5nZXRTZXR0aW5ncygpO3JldHVybiBQYShjLmdldFNlbGVjdGVkKCkpJiYoaHx8IWgmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCl9LGdyb3VwOm1wZX07bC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOmg9PmEuZWRp''@;'; put 'put ''dG9yRmFzdE9wZW4oaCl9LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvck9wZW4oaCxmKX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9PmEuZW1wdHlTZWxlY3RlZENlbGxzKCl9XSx7Z3JvdXA6''@;'; put 'put ''V20scnVuT25seUlmOigpPT5QYShjLmdldFNlbGVjdGVkKCkpfSksbC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2VsbHMoKSxydW5Pbmx5SWY6KCk9Pnt2YXIgaDtyZXR1cm4hKG51bGwhPT0oaD1jLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VMYXN0KCkpJiZ2b2lkIDAhPT1oJiZoLmhpZ2hsaWdodC5pc0hlYWRlcigpKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9Pnt9LHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8''@;'; put 'put ''dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQuaXNIZWFkZXIoKX0scHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiU3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0''@;'; put 'put ''YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT5hLnBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEoKSxydW5Pbmx5SWY6KCk9Pnt2YXIgaCxmO3JldHVybiEobnVsbCE9PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQgMCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpJiYobnVs''@;'; put 'put ''bD09PShmPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZ2V0Q2VsbHNDb3VudCgpKT4xfX0se2tleXM6W1siQ29udHJvbCIsIlNwYWNlIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zKCl9''@;'; put 'put ''LHtrZXlzOltbIlNoaWZ0IiwiU3BhY2UiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1Vw''@;'; put 'put ''IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAi''@;'; put 'put ''LCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29s''@;'; put 'put ''dW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9z''@;'; put 'put ''dEJvdHRvbSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5k''@;'; put 'put ''Q2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20oKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxs''@;'; put 'put ''U2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVu''@;'; put 'put ''ZENlbGxzU2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxl''@;'; put 'put ''Y3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0''@;'; put 'put ''cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiLCJDb250cm9s''@;'; put 'put ''L01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5''@;'; put 'put ''czpbWyJIb21lIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siSG9tZSIsIlNoaWZ0Il1d''@;'; put 'put ''LGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKX0se2tleXM6W1siSG9tZSIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0KCkscnVuT25s''@;'; put 'put ''eUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRh''@;'; put 'put ''YmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZUVuZCgpfSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6''@;'; put 'put ''KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVXBCeVZp''@;'; put 'put ''ZXdwb3J0SGlnaHQoKX0se2tleXM6W1siUGFnZVVwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9y''@;'; put 'put ''dEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOmg9PmEubW92ZUNlbGxTZWxlY3Rpb25J''@;'; put 'put ''bmxpbmVTdGFydChoKX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZChoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT5hLnNjcm9sbFRvRm9j''@;'; put 'put ''dXNlZENlbGwoKX1dLGQpfWZ1bmN0aW9uIE1wZShjKXtjb25zdHtjbGFzc05hbWVzOmx9PU8yZShjLC9odC10aGVtZS1bYS16QS1aMC05Xy1dKy8pO3JldHVybiBsLnBvcCgpfWxldCBrWD1udWxsO2NvbnN0IERYPW5ldyBNYXA7ZnVuY3Rpb24geHBlKGMsbCl7dmFyIGEsZD10aGlzO2xldCBo''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sZj10aGlzO2NvbnN0IHY9bmV3IGoyKGYpO2xldCBNLEQsWixyZSxjZSxiZSxFZT0hMDsoZnVuY3Rpb24gYnR0KGMpe3JldHVybiBjPT09REt9KShoKSYmZnVuY3Rpb24gdnR0KGMpe0MzZS5z''@;'; put 'put ''ZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdEVsZW1lbnQ9Yyx0aGlzLnJvb3REb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9vdERvY3VtZW50LmRlZmF1bHRWaWV3LHRoaXMuaXNEZXN0cm95ZWQ9ITEsdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPTAs''@;'; put 'put ''dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPTA7Y29uc3QgQmU9bnVsbCE9PShhPWw/LmxheW91dERpcmVjdGlvbikmJnZvaWQgMCE9PWE/YToiaW5oZXJpdCIscWU9WyJydGwiLCJsdHIiXS5pbmNsdWRlcyhCZSk/QmU6dGhpcy5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhp''@;'; put 'put ''cy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLHFlKSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1xZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFmLmlzUnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFj''@;'; put 'put ''dG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuaXNMdHIoKT8xOi0xfSxsLmxhbmd1YWdlPWZ1bmN0aW9uIGdudChjKXtsZXQgbD1IM2UoYyk7cmV0dXJuIGdYKGwpfHwobD1wWCxOM2UoYykpLGx9KGwubGFuZ3VhZ2UpO2NvbnN0IHJ0PU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhs''@;'; put 'put ''KS5maWx0ZXIodnQ9PntsZXRbTnRdPXZ0O3JldHVybiEoU2EuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKE50KXx8U2EuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKE50KSl9KSkscHQ9bmV3IHVwZShmLHJ0LFt3cnQsQXJ0XSksZHQ9cHQuZ2V0VGFibGVNZXRhKCksSnQ9cHQuZ2V0''@;'; put 'put ''R2xvYmFsTWV0YSgpLHZuPUpPKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsYy5maXJzdENoaWxkKSxjUCh0aGlzKSYmKFMyZShsLmxpY2Vuc2VLZXksYyksVGkoYywiaHQtd3JhcHBl''@;'; put 'put ''ciIpKSx0aGlzLmd1aWQ9YGh0XyR7aCQoKX1gLERYLnNldCh0aGlzLmd1aWQsdGhpcyksdGhpcy5jb2x1bW5JbmRleE1hcHBlcj1uZXcgWUssdGhpcy5yb3dJbmRleE1hcHBlcj1uZXcgWUssdGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5n''@;'; put 'put ''ZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix2dCl9KSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHYuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcih0aGlzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9uc3RhcnQiLHZ0PT57Zi5ydW5Ib29rcygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsdnQpfSksRD1uZXcgTHR0KGYpLCghdGhpcy5yb290RWxlbWVudC5pZHx8Imh0XyI9PT10aGlzLnJvb3RF''@;'; put 'put ''bGVtZW50LmlkLnN1YnN0cmluZygwLDMpKSYmKHRoaXMucm9vdEVsZW1lbnQuaWQ9dGhpcy5ndWlkKTtsZXQgR3I9bmV3IHFudChkdCx7cm93SW5kZXhNYXBwZXI6Zi5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjpmLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5j''@;'; put 'put ''b3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOnZ0PT5NLnByb3BUb0NvbCh2dCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRBY3RpdmVFZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpLGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6''@;'; put 'put ''KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSZW5kZXJhYmxlUm93czooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxjb3VudFJvd0hlYWRlcnM6KCk9PnRoaXMuY291bnRSb3dIZWFkZXJzKCksY291bnRDb2xIZWFkZXJzOigpPT50aGlzLmNv''@;'; put 'put ''dW50Q29sSGVhZGVycygpLGNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGQudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSguLi5hcmd1bWVudHMpfSxjb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBkLnZpZXcu''@;'; put 'put ''Y291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sZ2V0U2hvcnRjdXRNYW5hZ2VyOigpPT5mLmdldFNob3J0Y3V0TWFuYWdlcigpLGNyZWF0ZUNlbGxDb29yZHM6KHZ0LE50KT0+Zi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksY3JlYXRlQ2VsbFJhbmdlOih2dCxO''@;'; put 'put ''dCxIdCk9PmYuX2NyZWF0ZUNlbGxSYW5nZSh2dCxOdCxIdCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok50LGNvbDpIdH09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoTnQ+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KE50KTpOdCxIdD49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSHQpOkh0KX0scmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok50LGNvbDpIdH09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoTnQ+PTA/Zi5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE50KTpOdCxIdD49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoSHQpOkh0KX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzoodnQsTnQpPT57Y29uc3QgSHQ9''@;'; put 'put ''TnQ+dnQ/MTotMSxIbj1NYXRoLm1pbih2dCxOdCksdHI9TWF0aC5tYXgodnQsTnQpLGFyPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LEh0KTtyZXR1cm4gbnVsbD09PWFyfHwxPT09SHQmJmFyPnRyfHwtMT09PUh0JiZhcjxIbj9udWxsOmFyPj0wP2Yucm93''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhcik6YXJ9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46KHZ0LE50KT0+e2NvbnN0IEh0PU50PnZ0PzE6LTEsSG49TWF0aC5taW4odnQsTnQpLHRyPU1hdGgubWF4KHZ0LE50KSxhcj1mLmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCxIdCk7cmV0dXJuIG51bGw9PT1hcnx8MT09PUh0JiZhcj50cnx8LTE9PT1IdCYmYXI8SG4/bnVsbDphcj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYXIpOmFyfSxpc0Rpc2Fi''@;'; put 'put ''bGVkQ2VsbFNlbGVjdGlvbjoodnQsTnQpPT52dDwwfHxOdDwwP2YuZ2V0U2V0dGluZ3MoKS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9uOmYuZ2V0Q2VsbE1ldGEodnQsTnQpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb259KTt0aGlzLnNlbGVjdGlvbj1Hcjtjb25zdCBtcj12dD0+e2xldHtoaWRkZW5J''@;'; put 'put ''bmRleGVzQ2hhbmdlZDpOdH09dnQ7dGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsTnQmJnRoaXMuc2VsZWN0aW9uLmNvbW1pdCgpfTtmdW5jdGlvbiBhaSh2dCxOdCl7Y29uc3QgSHQ9ImNsYXNzTmFtZSI9PT12dD9mLnJvb3RFbGVtZW50OmYudGFibGU7aWYoRWUpVGkoSHQsTnQpO2Vsc2V7bGV0''@;'; put 'put ''IEhuPVtdLHRyPVtdO0p0W3Z0XSYmKEhuPUFycmF5LmlzQXJyYXkoSnRbdnRdKT9KdFt2dF06dSQoSnRbdnRdKSksTnQmJih0cj1BcnJheS5pc0FycmF5KE50KT9OdDp1JChOdCkpO2NvbnN0IGFyPWMkKEhuLHRyKSxIcj1jJCh0cixIbik7YXIubGVuZ3RoJiZsbyhIdCxhciksSHIubGVuZ3Ro''@;'; put 'put ''JiZUaShIdCxIcil9SnRbdnRdPU50fWZ1bmN0aW9uIF9pKCl7bGV0IHZ0PSExO3JldHVybnt2YWxpZGF0b3JzSW5RdWV1ZTowLHZhbGlkOiEwLGFkZFZhbGlkYXRvclRvUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlKz0xLHZ0PSExfSxyZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKXt0''@;'; put 'put ''aGlzLnZhbGlkYXRvcnNJblF1ZXVlPXRoaXMudmFsaWRhdG9yc0luUXVldWUtMTwwPzA6dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xLHRoaXMuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSxvblF1ZXVlRW1wdHkoKXt9LGNoZWNrSWZRdWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5R''@;'; put 'put ''dWV1ZSYmITE9PT12dCYmKHZ0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIE9uKHZ0KXtjb25zdCBOdD12dC5yZXBsYWNlKCIsIiwiLiIpO3JldHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChOdCkpP3BhcnNlRmxvYXQoTnQpOnZ0fWZ1bmN0aW9uIHpyKHZ0''@;'; put 'put ''LE50LEh0KXtpZighdnQubGVuZ3RoKXJldHVybiB2b2lkIEh0KCk7Y29uc3QgSG49Zi5nZXRBY3RpdmVFZGl0b3IoKSx0cj1uZXcgX2k7bGV0IGFyPSEwO3RyLm9uUXVldWVFbXB0eT0oKT0+e0huJiZhciYmSG4uY2FuY2VsQ2hhbmdlcygpLEh0KCl9O2ZvcihsZXQgSHI9dnQubGVuZ3RoLTE7''@;'; put 'put ''SHI+PTA7SHItLSl7Y29uc3RbcXIsb25dPXZ0W0hyXSx5bj1NLnByb3BUb0NvbChvbik7bGV0IHBuO3BuPU51bWJlci5pc0ludGVnZXIoeW4pP2YuZ2V0Q2VsbE1ldGEocXIseW4pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZHQpLC4uLmR0fSxmLmdldENlbGxWYWxpZGF0b3IocG4pJiYo''@;'; put 'put ''dHIuYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKHZ0W0hyXVszXSxwbixmdW5jdGlvbihwciwkbil7cmV0dXJuIGZ1bmN0aW9uKGRyKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBkcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9v''@;'; put 'put ''bGVhbiIpOyExPT09ZHImJiExPT09JG4uYWxsb3dJbnZhbGlkJiYoYXI9ITEsdnQuc3BsaWNlKHByLDEpLCRuLnZhbGlkPSEwKSx0ci5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX19KEhyLHBuKSxOdCkpfXRyLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBKbih2dCxOdCl7Zm9y''@;'; put 'put ''KGxldCBIbj12dC5sZW5ndGgtMTtIbj49MDtIbi0tKXtsZXQgdHI9ITE7aWYobnVsbCE9PXZ0W0huXSl7aWYobnVsbCE9dnRbSG5dWzJdfHxudWxsIT12dFtIbl1bM10pe2lmKGR0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbSG5dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOmFy''@;'; put 'put ''fT1NLmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWFyKXt0cj0hMDticmVha319aWYoImFycmF5Ij09PWYuZGF0YVR5cGUmJighZHQuY29sdW1uc3x8MD09PWR0LmNvbHVtbnMubGVuZ3RoKSYmZHQuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtNLnByb3BU''@;'; put 'put ''b0NvbCh2dFtIbl1bMV0pPmYuY291bnRDb2xzKCktMTspe2NvbnN0e2RlbHRhOmFyfT1NLmNyZWF0ZUNvbCh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWFyKXt0cj0hMDticmVha319dHJ8fE0uc2V0KHZ0W0huXVswXSx2dFtIbl1bMV0sdnRbSG5dWzNdKX19ZWxzZSB2''@;'; put 'put ''dC5zcGxpY2UoSG4sMSl9aWYodnQubGVuZ3RoPjApe1ouYWRqdXN0Um93c0FuZENvbHMoKSxmLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLHZ0LE50KSxyZS5jbG9zZUVkaXRvcigpLGYucmVuZGVyKCkscmUucHJlcGFyZUVkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUo''@;'; put 'put ''KSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsTnR8fCJlZGl0Iik7Y29uc3QgSG49Zi5nZXRBY3RpdmVFZGl0b3IoKTtIbiYmUGEoSG4ucmVmcmVzaFZhbHVlKSYmSG4ucmVmcmVzaFZhbHVlKCl9ZWxzZSBmLnJlbmRlcigpfWZ1bmN0aW9uIElyKHZ0LE50LEh0KXtyZXR1cm4gQXJyYXku''@;'; put 'put ''aXNBcnJheSh2dCk/dnQ6W1t2dCxOdCxIdF1dfWZ1bmN0aW9uICRyKHZ0LE50KXtjb25zdCBIdD1mLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2UiLHZ0LE50fHwiZWRpdCIpLEhuPXZ0LmZpbHRlcihhcj0+bnVsbCE9PWFyKTt2YXIgdHI7aWYoITE9PT1IdHx8MD09PUhuLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''bnVsbD09PSh0cj1mLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09dHJ8fHRyLmNhbmNlbENoYW5nZXMoKSxbXTtmb3IobGV0IGFyPUhuLmxlbmd0aC0xO2FyPj0wO2FyLS0pe2NvbnN0W0hyLHFyLCxvbl09SG5bYXJdLHluPU0ucHJvcFRvQ29sKHFyKTtsZXQgcG47cG49TnVtYmVyLmlz''@;'; put 'put ''SW50ZWdlcih5bik/Zi5nZXRDZWxsTWV0YShIcix5bik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihkdCksLi4uZHR9O2NvbnN0e3R5cGU6cHIsY2hlY2tlZFRlbXBsYXRlOiRuLHVuY2hlY2tlZFRlbXBsYXRlOmRyfT1wbjtpZigibnVtZXJpYyI9PT1wciYmInN0cmluZyI9PXR5cGVvZiBv''@;'; put 'put ''biYmeWZlKG9uKSYmKEhuW2FyXVszXT1PbihvbikpLCJjaGVja2JveCI9PT1wcil7Y29uc3QgVXI9bGMob24pLFpuPVVyPT09bGMoJG4pLHNyPVVyPT09bGMoZHIpOyhabnx8c3IpJiYoSG5bYXJdWzNdPVpuPyRuOmRyKX19cmV0dXJuIEhufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9j''@;'; put 'put ''YWxIb29rKCJjYWNoZVVwZGF0ZWQiLG1yKSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixtciksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldFJhbmdlRW5kIiwodnQsTnQpPT57Y29uc3QgSHQ9RmQoITEpLEhuPXRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7ZnJvbTp0cix0bzphcn09SG4uY3VycmVudCgpLEhyPUhuLnNpemUoKS0xO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uIix0ci5yb3csdHIuY29sLGFyLnJvdyxhci5jb2wsSHQsSHIpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQ''@;'; put 'put ''cm9wIix0ci5yb3csZi5jb2xUb1Byb3AodHIuY29sKSxhci5yb3csZi5jb2xUb1Byb3AoYXIuY29sKSxIdCxIciksTnQmJighSHQuaXNUb3VjaGVkKCl8fEh0LmlzVG91Y2hlZCgpJiYhSHQudmFsdWUpJiZiZS5zY3JvbGxUbyh2dCk7Y29uc3QgcXI9R3IuaXNTZWxlY3RlZEJ5Um93SGVhZGVy''@;'; put 'put ''KCksb249R3IuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7cXImJm9uP1RpKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKTpxcj8obG8odGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpLFRp''@;'; put 'put ''KHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSk6b24/KGxvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSxUaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikpOmxvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2Vs''@;'; put 'put ''ZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSwic2hpZnQiIT09R3IuZ2V0U2VsZWN0aW9uU291cmNlKCkmJnJlLmNsb3NlRWRpdG9yKG51bGwpLGYudmlldy5yZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJl''@;'; put 'put ''Zm9yZVNldEZvY3VzIix2dD0+e3RoaXMucnVuSG9va3MoImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0Iix2dC5yb3csdnQuY29sKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRGb2N1cyIsdnQ9Pntjb25zdCBOdD1GZCghMSk7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxl''@;'; put 'put ''Y3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0LmNvbCxOdCksKCFOdC5pc1RvdWNoZWQoKXx8TnQuaXNUb3VjaGVkKCkmJiFOdC52YWx1ZSkmJmJlLnNjcm9sbFRvKHZ0KSxyZS5jbG9zZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgTnQ9dnQubGVuZ3RoLTEse2Zyb206SHQsdG86SG59PXZ0W050XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZCIsSHQucm93LEh0LmNvbCxIbi5yb3csSG4uY29sLE50KSx0aGlzLnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsSHQucm93LGYuY29sVG9Qcm9wKEh0LmNvbCksSG4ucm93LGYuY29sVG9Qcm9wKEhuLmNvbCksTnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgTnQ9dGhpcy5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1OdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyRGVzZWxlY3QiLCgpPT57cmUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCksbG8odGhpcy5yb290RWxl''@;'; put 'put ''bWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxpZ2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygiYmVmb3JlU2Vs''@;'; put 'put ''ZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9v''@;'; put 'put ''a3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRd''@;'; put 'put ''O3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRd''@;'; put 'put ''PWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtI''@;'; put 'put ''dCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxI''@;'; put 'put ''dD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJy''@;'; put 'put ''YXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5l''@;'; put 'put ''dyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlU''@;'; put 'put ''cmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9y''@;'; put 'put ''bUZvY3VzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9v''@;'; put 'put ''a3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07''@;'; put 'put ''cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1''@;'; put 'put ''bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1h''@;'; put 'put ''cmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT50aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix2dCwxLCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVx''@;'; put 'put ''dWlyZSIsdnQ9PnRoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKSksWj17YWx0ZXIodnQsTnQpe2xldCBIdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxIbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRz''@;'; put 'put ''WzNdOnZvaWQgMCx0cj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBhcj1Icj0+e2lmKDA9PT1Ici5sZW5ndGgpcmV0dXJuW107Y29uc3QgcXI9Wy4uLkhyXTtyZXR1cm4gcXIuc29ydCgoeW4scG4pPT57bGV0W3ByXT15bixbJG5dPXBuO3JldHVybiBwcj09''@;'; put 'put ''PSRuPzA6cHI+JG4/MTotMX0pLHF1KHFyLCh5bixwbik9PntsZXRbcHIsJG5dPXBuO2NvbnN0IGRyPXluW3luLmxlbmd0aC0xXSxbVXIsWm5dPWRyLHNyPVVyK1puO2lmKHByPD1zcil7Y29uc3QgTnI9TWF0aC5tYXgoJG4tKHNyLXByKSwwKTtkclsxXSs9TnJ9ZWxzZSB5bi5wdXNoKFtwciwk''@;'; put 'put ''bl0pO3JldHVybiB5bn0sW3FyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IEhyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZHQubWF4Um93cz09PUhyKXJldHVybjtjb25zdCBxcj0iaW5zZXJ0X3Jvd19iZWxvdyI9''@;'; put 'put ''PT12dD8iYmVsb3ciOiJhYm92ZSI7TnQ9TnQ/PygiYmVsb3ciPT09cXI/SHI6MCk7Y29uc3R7ZGVsdGE6b24sc3RhcnRQaHlzaWNhbEluZGV4OnlufT1NLmNyZWF0ZVJvdyhOdCxIdCx7c291cmNlOkhuLG1vZGU6cXJ9KTtHci5zaGlmdFJvd3MoZi50b1Zpc3VhbFJvdyh5biksb24pO2JyZWFr''@;'; put 'put ''O2Nhc2UiaW5zZXJ0X2NvbF9zdGFydCI6Y2FzZSJpbnNlcnRfY29sX2VuZCI6Y29uc3QgcG49Imluc2VydF9jb2xfZW5kIj09PXZ0PyJlbmQiOiJzdGFydCI7TnQ9TnQ/PygiZW5kIj09PXBuP2YuY291bnRTb3VyY2VDb2xzKCk6MCk7Y29uc3R7ZGVsdGE6cHIsc3RhcnRQaHlzaWNhbEluZGV4''@;'; put 'put ''OiRufT1NLmNyZWF0ZUNvbChOdCxIdCx7c291cmNlOkhuLG1vZGU6cG59KTtpZihwcil7aWYoQXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSl7Y29uc3QgWm49W2YudG9WaXN1YWxDb2x1bW4oJG4pLDBdO1puLmxlbmd0aCs9cHIsQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShkdC5j''@;'; put 'put ''b2xIZWFkZXJzLFpuKX1Hci5zaGlmdENvbHVtbnMoZi50b1Zpc3VhbENvbHVtbigkbikscHIpfWJyZWFrO2Nhc2UicmVtb3ZlX3JvdyI6Y29uc3QgZHI9Wm49PntsZXQgc3I9MDtZbihabixOcj0+e2xldFtNcixacl09TnI7Y29uc3QgYWE9VWMoTXIpP2YuY291bnRSb3dzKCktMTpNYXRoLm1h''@;'; put 'put ''eChNci1zciwwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKE1yKSYmKE1yPU1hdGgubWF4KE1yLXNyLDApKSwhTS5yZW1vdmVSb3coTXIsWnIsSG4pKXJldHVybjtpZihHci5pc1NlbGVjdGVkKCkpe2NvbnN0e3JvdzpNb309Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNbz49TXIm''@;'; put 'put ''Jk1vPD1Ncitaci0xJiZyZS5jbG9zZUVkaXRvcighMCl9Y29uc3QgSW89Zi5jb3VudFJvd3MoKSxabz1kdC5maXhlZFJvd3NUb3A7Wm8+PWFhKzEmJihkdC5maXhlZFJvd3NUb3AtPU1hdGgubWluKFpyLFpvLWFhKSk7Y29uc3QgcHM9ZHQuZml4ZWRSb3dzQm90dG9tO3BzJiZhYT49SW8tcHMm''@;'; put 'put ''JihkdC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKFpyLHBzKSksMD09PUlvP0dyLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZVJvdyI9PT1Ibj9Hci5yZWZyZXNoKCk6R3Iuc2hpZnRSb3dzKE1yLC1aciksc3IrPVpyfSl9O0FycmF5LmlzQXJyYXkoTnQpP2RyKGFyKE50KSk6ZHIo''@;'; put 'put ''W1tOdCxIdF1dKTticmVhaztjYXNlInJlbW92ZV9jb2wiOmNvbnN0IFVyPVpuPT57bGV0IHNyPTA7WW4oWm4sTnI9PntsZXRbTXIsWnJdPU5yO2NvbnN0IGFhPVVjKE1yKT9mLmNvdW50Q29scygpLTE6TWF0aC5tYXgoTXItc3IsMCk7bGV0IEJhPWYudG9QaHlzaWNhbENvbHVtbihhYSk7aWYo''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcihNcikmJihNcj1NYXRoLm1heChNci1zciwwKSksIU0ucmVtb3ZlQ29sKE1yLFpyLEhuKSlyZXR1cm47aWYoR3IuaXNTZWxlY3RlZCgpKXtjb25zdHtjb2w6TW99PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7TW8+PU1yJiZNbzw9TXIrWnItMSYm''@;'; put 'put ''cmUuY2xvc2VFZGl0b3IoITApfTA9PT1mLmNvdW50Q29scygpP0dyLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiI9PT1Ibj9Hci5yZWZyZXNoKCk6R3Iuc2hpZnRDb2x1bW5zKE1yLC1acik7Y29uc3QgcHM9ZHQuZml4ZWRDb2x1bW5zU3RhcnQ7cHM+PWFhKzEmJihkdC5m''@;'; put 'put ''aXhlZENvbHVtbnNTdGFydC09TWF0aC5taW4oWnIscHMtYWEpKSxBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpJiYodHlwZW9mIEJhPiJ1IiYmKEJhPS0xKSxkdC5jb2xIZWFkZXJzLnNwbGljZShCYSxacikpLHNyKz1acn0pfTtBcnJheS5pc0FycmF5KE50KT9VcihhcihOdCkpOlVyKFtb''@;'; put 'put ''TnQsSHRdXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3Z0fSJgKX10cnx8Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldy5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGFkanVzdFJvd3NBbmRDb2xzKCl7''@;'; put 'put ''Y29uc3QgdnQ9ZHQubWluUm93cyxOdD1kdC5taW5TcGFyZVJvd3MsSHQ9ZHQubWluQ29scyxIbj1kdC5taW5TcGFyZUNvbHM7aWYodnQpe2NvbnN0IHRyPWYuY291bnRSb3dzKCk7dHI8dnQmJk0uY3JlYXRlUm93KHRyLHZ0LXRyLHtzb3VyY2U6ImF1dG8ifSl9aWYoTnQpe2NvbnN0IHRyPWYu''@;'; put 'put ''Y291bnRFbXB0eVJvd3MoITApO2lmKHRyPE50KXtjb25zdCBIcj1NYXRoLm1pbihOdC10cixkdC5tYXhSb3dzLWYuY291bnRTb3VyY2VSb3dzKCkpO00uY3JlYXRlUm93KGYuY291bnRSb3dzKCksSHIse3NvdXJjZToiYXV0byJ9KX19e2xldCB0cjsoSHR8fEhuKSYmKHRyPWYuY291bnRFbXB0''@;'; put 'put ''eUNvbHMoITApKTtsZXQgYXI9Zi5jb3VudENvbHMoKTtpZihIdCYmIWR0LmNvbHVtbnMmJmFyPEh0KXtjb25zdCBIcj1IdC1hcjt0cis9SHIsTS5jcmVhdGVDb2woYXIsSHIse3NvdXJjZToiYXV0byJ9KX1pZihIbiYmIWR0LmNvbHVtbnMmJiJhcnJheSI9PT1mLmRhdGFUeXBlJiZ0cjxIbil7''@;'; put 'put ''YXI9Zi5jb3VudENvbHMoKTtjb25zdCBxcj1NYXRoLm1pbihIbi10cixkdC5tYXhDb2xzLWFyKTtNLmNyZWF0ZUNvbChhcixxcix7c291cmNlOiJhdXRvIn0pfX19LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE50LEh0LEhuLHRyKXtsZXQgYXIsSHIscXIsb247Y29uc3QgeW49W10scG49e30scHI9''@;'; put 'put ''W10sJG49dnQucm93LGRyPXZ0LmNvbDtpZihIcj1OdC5sZW5ndGgsMD09PUhyKXJldHVybiExO2xldCBVcj0wLFpuPTA7c3dpdGNoKHFvKEh0KSYmKFVyPUh0LmNvbC1kcisxLFpuPUh0LnJvdy0kbisxKSx0cil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCBzcj1oRShOdCksTnI9c3IubGVuZ3Ro''@;'; put 'put ''LE1yPU1hdGgubWF4KE5yLFVyKSxacj1mLmdldERhdGEoKS5zbGljZSgkbiksYWE9aEUoWnIpLnNsaWNlKGRyLGRyK01yKTtmb3IocXI9MDtxcjxNcjtxcis9MSlpZihxcjxOcil7Zm9yKGFyPTAsSHI9c3JbcXJdLmxlbmd0aDthcjxabi1Icjthcis9MSlzcltxcl0ucHVzaChzcltxcl1bYXIl''@;'; put 'put ''SHJdKTtwci5wdXNoKHNyW3FyXS5jb25jYXQocXI8YWEubGVuZ3RoP2FhW3FyXTpuZXcgQXJyYXkoWnIubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBwci5wdXNoKHNyW3FyJU5yXS5jb25jYXQoYWFbcXJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheSgkbixkcixoRShwcikpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''c2hpZnRfcmlnaHQiOmNvbnN0IEJhPU50Lmxlbmd0aCxJbz1NYXRoLm1heChCYSxabiksWm89Zi5nZXREYXRhKCkuc2xpY2UoJG4pLm1hcChVcz0+VXMuc2xpY2UoZHIpKTtmb3IoYXI9MDthcjxJbzthcis9MSlpZihhcjxCYSl7Zm9yKHFyPTAsb249TnRbYXJdLmxlbmd0aDtxcjxVci1vbjtx''@;'; put 'put ''cis9MSlOdFthcl0ucHVzaChOdFthcl1bcXIlb25dKTtpZihhcjxaby5sZW5ndGgpZm9yKGxldCBVcz0wO1VzPFpvW2FyXS5sZW5ndGg7VXMrPTEpTnRbYXJdLnB1c2goWm9bYXJdW1VzXSk7ZWxzZSBOdFthcl0ucHVzaCguLi5uZXcgQXJyYXkoWm9bMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1l''@;'; put 'put ''bHNlIE50LnB1c2goTnRbYXIlSHJdLnNsaWNlKDAsSW8pLmNvbmNhdChab1thcl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KCRuLGRyLE50KTticmVhaztkZWZhdWx0OnBuLnJvdz12dC5yb3cscG4uY29sPXZ0LmNvbDtsZXQgbmMscHM9MCxNbz0wLGhzPSEwO2NvbnN0IFFvPWZ1bmN0aW9uKEpj''@;'; put 'put ''KXtsZXQgcXM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgQmw9TnRbSmMlTnQubGVuZ3RoXTtyZXR1cm4gbnVsbCE9PXFzP0JsW3FzJUJsLmxlbmd0aF06Qmx9LE0zPU50Lmxlbmd0aCxhZD1IdD9IdC5yb3ctdnQucm93''@;'; put 'put ''KzE6MDtmb3IoSHI9SHQ/YWQ6TWF0aC5tYXgoTTMsYWQpLGFyPTA7YXI8SHImJiEoSHQmJnBuLnJvdz5IdC5yb3cmJmFkPk0zfHwhZHQuYWxsb3dJbnNlcnRSb3cmJnBuLnJvdz5mLmNvdW50Um93cygpLTF8fHBuLnJvdz49ZHQubWF4Um93cyk7YXIrKyl7Y29uc3QgVXM9YXItcHMsSmM9UW8o''@;'; put 'put ''VXMpLmxlbmd0aCxxcz1IdD9IdC5jb2wtdnQuY29sKzE6MDtpZihvbj1IdD9xczpNYXRoLm1heChKYyxxcykscG4uY29sPXZ0LmNvbCxuYz1mLmdldENlbGxNZXRhKHBuLnJvdyxwbi5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09SG4mJiJBdXRvZmlsbC5maWxsIiE9PUhufHwhbmMuc2tpcFJv''@;'; put 'put ''d09uUGFzdGUpe2ZvcihNbz0wLHFyPTA7cXI8b24mJiEoSHQmJnBuLmNvbD5IdC5jb2wmJnFzPkpjfHwhZHQuYWxsb3dJbnNlcnRDb2x1bW4mJnBuLmNvbD5mLmNvdW50Q29scygpLTF8fHBuLmNvbD49ZHQubWF4Q29scyk7cXIrKyl7aWYobmM9Zi5nZXRDZWxsTWV0YShwbi5yb3cscG4uY29s''@;'; put 'put ''KSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Ibnx8IkF1dG9maWxsLmZpbGwiPT09SG4pJiZuYy5za2lwQ29sdW1uT25QYXN0ZSl7TW8rPTEscG4uY29sKz0xLG9uKz0xO2NvbnRpbnVlfWlmKG5jLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Ibil7cG4uY29sKz0xO2NvbnRpbnVlfWxldCBl''@;'; put 'put ''cz1RbyhVcyxxci1NbyksRTE9Zi5nZXREYXRhQXRDZWxsKHBuLnJvdyxwbi5jb2wpO2lmKG51bGwhPT1lcyYmIm9iamVjdCI9PXR5cGVvZiBlcylpZihBcnJheS5pc0FycmF5KGVzKSYmbnVsbD09PUUxJiYoRTE9W10pLG51bGw9PT1FMXx8Im9iamVjdCIhPXR5cGVvZiBFMSlocz0hMTtlbHNl''@;'; put 'put ''e2NvbnN0IHgzPXNfKEFycmF5LmlzQXJyYXkoRTEpP0UxOkUxWzBdfHxFMSksUWc9c18oQXJyYXkuaXNBcnJheShlcyk/ZXM6ZXNbMF18fGVzKTtOTyh4MyxRZyl8fEFycmF5LmlzQXJyYXkoeDMpJiZBcnJheS5pc0FycmF5KFFnKT9lcz1nMShlcyk6aHM9ITF9ZWxzZSBudWxsIT09RTEmJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgRTEmJihocz0hMSk7aHMmJnluLnB1c2goW3BuLnJvdyxwbi5jb2wsZXNdKSxocz0hMCxwbi5jb2wrPTF9cG4ucm93Kz0xfWVsc2UgcHMrPTEscG4ucm93Kz0xLEhyKz0xfWYuc2V0RGF0YUF0Q2VsbCh5bixudWxsLG51bGwsSG58fCJwb3B1bGF0ZUZyb21BcnJheSIp''@;'; put 'put ''fX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe0Quc2V0RGF0YShkdC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKEFwKCl8fFAkKCkpJiZUaShmLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGwsITApLHRoaXMudmlldz1uZXcgeHR0KHRoaXMpO2NvbnN0''@;'; put 'put ''IHZ0PWR0LnRoZW1lTmFtZXx8TXBlKGYucm9vdEVsZW1lbnQpO2YudXNlVGhlbWUodnQpLGYudmlldy5hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKSxyZT1ZWGUuZ2V0SW5zdGFuY2UoZixkdCxHciksYmU9ZnVuY3Rpb24ganJ0KGMpe2NvbnN0''@;'; put 'put ''e3NlbGVjdGlvbjpsfT1jO2xldCBhPSExLGQ9ITE7cmV0dXJue3Jlc3VtZSgpe2Q9ITF9LHN1c3BlbmQoKXtkPSEwfSxza2lwTmV4dFNjcm9sbEN5Y2xlKCl7YT0hMH0sc2Nyb2xsVG8oaCl7dmFyIGY7aWYoYXx8ZClyZXR1cm4gdm9pZChhPSExKTtsZXQgdjtsLmlzRm9jdXNTZWxlY3Rpb25D''@;'; put 'put ''aGFuZ2VkKCk/dj1mdW5jdGlvbiBGcnQoYyl7cmV0dXJuIGw9PntjLnNjcm9sbFZpZXdwb3J0VG8obC50b09iamVjdCgpLCgpPT57Y29uc3R7cm93OmEsY29sOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7QV8oYy5nZXRDZWxsKGEsZCwhMCkpfSl9fShjKTpsLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvcm5lcigpP3Y9KCk9Pnt9OmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/dj1mdW5jdGlvbiBWcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7cm93OmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKS5yb3dIZWFkZXJzO0FfKGMuZ2V0Q2VsbChhLGQ/LTE6MCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP3Y9ZnVuY3Rpb24gT3J0KGMpe3JldHVybiBsPT57Y29uc3QgYT1GUChjKS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKTtjLnNjcm9sbFZp''@;'; put 'put ''ZXdwb3J0VG8oe2NvbDphfSwoKT0+e2NvbnN0IGQ9ISFjLmdldFNldHRpbmdzKCkuY29sSGVhZGVycztBXyhjLmdldENlbGwoZD8tMTowLGEsITApKX0pfX0oYyk6MT09PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKSYmbC5pc011bHRpcGxlKCk/dj1mdW5jdGlvbiBIcnQoYyl7cmV0dXJu''@;'; put 'put ''IGw9Pntjb25zdCBhPUZQKGMpLGQ9e3JvdzphLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpLGNvbDphLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpfTtjLnNjcm9sbFZpZXdwb3J0VG8oZCwoKT0+e2NvbnN0e3JvdzpoLGNvbDpmfT1kO0FfKGMuZ2V0Q2VsbChoLGYsITApKX0pfX0oYyk6MSE9''@;'; put 'put ''PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKXx8bC5pc011bHRpcGxlKCk/bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJih2PWZ1bmN0aW9uIE5ydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9RlAoYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29t''@;'; put 'put ''cHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7QV8oYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKSk6dj1mdW5jdGlvbiBCcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPWMuc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJj''@;'; put 'put ''ZSgpLHtyb3c6ZCxjb2w6aH09bCxmPSgpPT57QV8oYy5nZXRDZWxsKGQsaCwhMCkpfTtpZihkPDAmJmg+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6aH0sZik7ZWxzZSBpZihoPDAmJmQ+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZH0sZik7ZWxzZXtpZigibW91c2UiPT09YSYmKGg9''@;'; put 'put ''PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXx8ZD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSlyZXR1cm47Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZCxjb2w6aH0sZil9fX0oYyksbnVsbD09PShmPXYpfHx2b2lkIDA9PT1mfHxmKGgpfX19''@;'; put 'put ''KGYpLGNlPW5ldyAkWGUoZiksY1AodGhpcykmJmZ1bmN0aW9uIFVydChjKXtjb25zdCBsPWZ1bmN0aW9uIFpydChjKXtyZXR1cm4gbD0+e2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9RVgoYyksZD1UWChjKTtyZXR1cm4gbC5jb2w8YS5jb2wmJihsLmNvbD1hLmNvbCksbC5jb2w+ZC5jb2wm''@;'; put 'put ''JihsLmNvbD1kLmNvbCksbC5yb3c8YS5yb3cmJihsLnJvdz1hLnJvdyksbC5yb3c+ZC5yb3cmJihsLnJvdz1kLnJvdyksbH19KGMpO2xldCBhO2NvbnN0e2FjdGl2YXRlOmQsZGVhY3RpdmF0ZTpofT1mdW5jdGlvbiB6cnQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0IGE9Yy5yb290RWxlbWVudCxkPXZwZShjKSxoPXZwZShjKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmw/Lm9uRm9jdXNGcm9tVG9wKCkpLGguYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5sPy5vbkZv''@;'; put 'put ''Y3VzRnJvbUJvdHRvbSgpKSxhLmZpcnN0Q2hpbGQuYmVmb3JlKGQpLGEubGFzdENoaWxkLmFmdGVyKGgpLHthY3RpdmF0ZSgpe2MuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2QudGFiSW5kZXg9MCxoLnRhYkluZGV4PTB9LDEwKX0sZGVhY3RpdmF0ZSgpe2MuX3JlZ2lzdGVyVGltZW91dCgoKT0+''@;'; put 'put ''e2QudGFiSW5kZXg9LTEsaC50YWJJbmRleD0tMX0sMTApfX19KGMse29uRm9jdXNGcm9tVG9wKCl7dmFyIGNlO2NvbnN0IGJlPW51bGwhPT0oY2U9bChhKSkmJnZvaWQgMCE9PWNlP2NlOkVYKGMpO2JlJiYoYy5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2Fi''@;'; put 'put ''b3ZlIixiZSksYy5zZWxlY3RDZWxsKGJlLnJvdyxiZS5jb2wpKSxjLmxpc3RlbigpfSxvbkZvY3VzRnJvbUJvdHRvbSgpe3ZhciBjZTtjb25zdCBiZT1udWxsIT09KGNlPWwoYSkpJiZ2b2lkIDAhPT1jZT9jZTpUWChjKTtiZSYmKGMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0''@;'; put 'put ''aW9uIiwiZnJvbV9iZWxvdyIsYmUpLGMuc2VsZWN0Q2VsbChiZS5yb3csYmUuY29sKSksYy5saXN0ZW4oKX19KSxmPXt3cmFwcGVkOiExLGZsaXBwZWQ6ITF9O2xldCB2PSEwLE09ITEsRD0hMTtjLmFkZEhvb2soImFmdGVyTGlzdGVuIiwoKT0+aCgpKSxjLmFkZEhvb2soImFmdGVyVW5saXN0''@;'; put 'put ''ZW4iLCgpPT5kKCkpLGMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChjZSxiZSxFZSxCZSxxZSk9Pnt2YXIgcnQ7TSYmKGYud3JhcHBlZCYmZi5mbGlwcGVkfHxEKSYmKEQ9ITEscWUudmFsdWU9ITApLHYmJihhPW51bGw9PT0ocnQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAw''@;'; put 'put ''PT09cnQ/dm9pZCAwOnJ0LmhpZ2hsaWdodCl9KSxjLmFkZEhvb2soImJlZm9yZVJvd1dyYXAiLChjZSxiZSxFZSk9PntmLndyYXBwZWQ9ITAsZi5mbGlwcGVkPUVlfSk7Y29uc3QgcmU9e2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFn''@;'; put 'put ''YXRpb246ITEscmVsYXRpdmVUb0dyb3VwOm1wZSxncm91cDoiZm9jdXNDYXRjaGVyIn07Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7Li4ucmUsY2FsbGJhY2s6KCk9Pntjb25zdHt0YWJOYXZpZ2F0aW9uOmNlfT1jLmdldFNldHRpbmdz''@;'; put 'put ''KCk7TT0hMCxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkmJiFjZSYmKHY9ITEpLGNlfHwoRD0hMCl9LHBvc2l0aW9uOiJiZWZvcmUifSx7Li4ucmUsY2FsbGJhY2s6Y2U9Pntjb25zdHt0YWJOYXZpZ2F0aW9uOmJlLGF1dG9XcmFwUm93OkVlfT1jLmdldFNldHRpbmdzKCk7aWYoTT0hMSx2PSEw''@;'; put 'put ''LCFiZXx8IWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKXx8RWUmJmYud3JhcHBlZCYmZi5mbGlwcGVkfHwhRWUmJmYud3JhcHBlZClyZXR1cm4gRWUmJmYud3JhcHBlZCYmZi5mbGlwcGVkJiYoYT1jZS5zaGlmdEtleT9FWChjKTpUWChjKSksZnVuY3Rpb24gWigpe2Yud3JhcHBlZD0hMSxmLmZs''@;'; put 'put ''aXBwZWQ9ITEsYy5kZXNlbGVjdENlbGwoKSxjLnVubGlzdGVuKCl9KCksITE7Y2UucHJldmVudERlZmF1bHQoKX0scG9zaXRpb246ImFmdGVyIn1dKX0oZiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMucmVuZGVyKCksRWUmJm51bGw9PT1mLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmVTJl''@;'; put 'put ''KGYucm9vdEVsZW1lbnQsKCk9PntmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLGYucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSksIm9iamVjdCI9PXR5cGVvZiBFZSYmKGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIixFZVswXSxFZVsx''@;'; put 'put ''XSksRWU9ITEpLGYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHZ0LE50LEh0KXtyZXR1cm4g''@;'; put 'put ''Zi52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodnQsTnQsSHQpfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyPWYuZ2V0Q2VsbFZhbGlkYXRvcihOdCk7ZnVuY3Rpb24gYXIoSHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU50LmhpZGRlbilyZXR1cm4gdm9pZCBIdChIcik7Y29uc3Qgb249TnQudmlzdWFsQ29sLHluPU50LnZpc3VhbFJvdyxwbj1mLmdldENlbGwoeW4sb24sITApO2lmKHBuJiYiVEgiIT09cG4ubm9kZU5hbWUpe2NvbnN0IHByPWYucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh5biksJG49Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG9uKTtmLnZpZXcuX3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIscHIsJG4scG4pfUh0KEhyKX1iMmUodHIpJiYodHI9ZnVuY3Rp''@;'; put 'put ''b24oSHIpe3JldHVybiBmdW5jdGlvbihxcixvbil7b24oSHIudGVzdChxcikpfX0odHIpKSxtbCh0cik/KHZ0PWYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxIbiksZi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnt0ci5jYWxsKE50LHZ0LEhyPT57''@;'; put 'put ''ZiYmKEhyPWYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLEhyLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLEhuKSxOdC52YWxpZD1IcixhcihIciksZi5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLEhyLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLEhuKSl9KX0pKTpmLl9yZWdpc3Rlcklt''@;'; put 'put ''bWVkaWF0ZSgoKT0+e050LnZhbGlkPSEwLGFyKE50LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPUlyKHZ0LE50LEh0KSxhcj1bXTtsZXQgcXIsb24seW4sSHI9SG47Zm9yKHFyPTAsb249dHIubGVuZ3RoO3FyPG9uO3FyKysp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgdHJbcXJdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBudW1iZXIgb3IgY2hhbmdlcyBhcnJheSBvZiBhcnJheXMgYXMgaXRzIGZpcnN0IHBhcmFtZXRlciIpO2lmKCJudW1iZXIiIT10eXBlb2YgdHJbcXJd''@;'; put 'put ''WzFdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdhbnQgdG8gdXNlIG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIp''@;'; put 'put ''O3luPXRyW3FyXVsxXT49dGhpcy5jb3VudENvbHMoKT90cltxcl1bMV06TS5jb2xUb1Byb3AodHJbcXJdWzFdKSxhci5wdXNoKFt0cltxcl1bMF0seW4sRC5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KHRyW3FyXVswXSksdHJbcXJdWzFdKSx0cltxcl1bMl1dKX0hSHImJiJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgdnQmJihIcj1OdCk7Y29uc3QgcG49JHIoYXIsSHIpO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIscG4sSHIpLHpyKHBuLEhyLCgpPT57Sm4ocG4sSHIpfSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9SXIodnQs''@;'; put 'put ''TnQsSHQpLGFyPVtdO2xldCBxcixvbixIcj1Ibjtmb3IocXI9MCxvbj10ci5sZW5ndGg7cXI8b247cXIrKylhci5wdXNoKFt0cltxcl1bMF0sdHJbcXJdWzFdLEQuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyh0cltxcl1bMF0pLHRyW3FyXVsxXSksdHJbcXJdWzJdXSk7IUhyJiYib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIHZ0JiYoSHI9TnQpO2NvbnN0IHluPSRyKGFyLEhuKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLHluLEhyKSx6cih5bixIciwoKT0+e0puKHluLEhyKX0pfSx0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe2YmJiFmLmlzTGlzdGVuaW5nKCkmJihEWC5mb3JF''@;'; put 'put ''YWNoKHZ0PT57ZiE9PXZ0JiZ2dC51bmxpc3RlbigpfSksa1g9Zi5ndWlkLGYucnVuSG9va3MoImFmdGVyTGlzdGVuIikpfSx0aGlzLnVubGlzdGVuPWZ1bmN0aW9uKCl7dGhpcy5pc0xpc3RlbmluZygpJiYoa1g9bnVsbCxmLnJ1bkhvb2tzKCJhZnRlclVubGlzdGVuIikpfSx0aGlzLmlzTGlz''@;'; put 'put ''dGVuaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGtYPT09Zi5ndWlkfSx0aGlzLmRlc3Ryb3lFZGl0b3I9ZnVuY3Rpb24oKXtsZXQgTnQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtyZS5jbG9zZUVkaXRvcihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksTnQmJkdyLmlzU2VsZWN0ZWQoKSYmcmUucHJlcGFyZUVkaXRvcigpfSx0aGlzLnBvcHVsYXRlRnJvbUFycmF5PWZ1bmN0aW9uKHZ0LE50LEh0LEhuLHRyLGFyLEhyKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIEh0fHwib2JqZWN0IiE9dHlwZW9mIEh0WzBdKXRocm93IG5ldyBFcnJvcigicG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJheSBvZiBhcnJheXMiKTtjb25zdCBxcj0ibnVtYmVyIj09dHlwZW9mIEhuP2YuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''SG4sdHIpOm51bGw7cmV0dXJuIFoucG9wdWxhdGVGcm9tQXJyYXkoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksSHQscXIsYXIsSHIpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih2dCxOdCxIdCl7Zm9yKHZhciBIbj1hcmd1bWVudHMubGVuZ3RoLHRyPW5ldyBBcnJheShIbj4zP0huLTM6''@;'; put 'put ''MCksYXI9MzthcjxIbjthcisrKXRyW2FyLTNdPWFyZ3VtZW50c1thcl07cmV0dXJuIE0uc3BsaWNlQ29sKHZ0LE50LEh0LC4uLnRyKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24odnQsTnQsSHQpe2Zvcih2YXIgSG49YXJndW1lbnRzLmxlbmd0aCx0cj1uZXcgQXJyYXkoSG4+Mz9Ibi0zOjAp''@;'; put 'put ''LGFyPTM7YXI8SG47YXIrKyl0clthci0zXT1hcmd1bWVudHNbYXJdO3JldHVybiBNLnNwbGljZVJvdyh2dCxOdCxIdCwuLi50cil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihHci5pc1NlbGVjdGVkKCkpcmV0dXJuIHlzKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSx2dD0+e2xldHtm''@;'; put 'put ''cm9tOk50LHRvOkh0fT12dDtyZXR1cm5bTnQucm93LE50LmNvbCxIdC5yb3csSHQuY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgTnQ7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE50PXZ0W3Z0Lmxlbmd0aC0x''@;'; put 'put ''XSksTnR9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lmKEdyLmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShHci5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlKCk7bGV0IE50O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihOdD12dFt2dC5sZW5ndGgtMV0pLE50fSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih2dCl7aWYoIUdyLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJl''@;'; put 'put ''dHVybjtjb25zdCBOdD1bXTtZbihHci5nZXRTZWxlY3RlZFJhbmdlKCksSHQ9PntpZihIdC5pc1NpbmdsZUhlYWRlcigpKXJldHVybjtjb25zdCBIbj1IdC5nZXRUb3BTdGFydENvcm5lcigpLHRyPUh0LmdldEJvdHRvbUVuZENvcm5lcigpO0dhKEhuLnJvdyx0ci5yb3csYXI9PntHYShIbi5j''@;'; put 'put ''b2wsdHIuY29sLEhyPT57dGhpcy5nZXRDZWxsTWV0YShhcixIcikucmVhZE9ubHl8fE50LnB1c2goW2FyLEhyLG51bGxdKX0pfSl9KSxOdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKE50LHZ0KX0sdGhpcy5pc1JlbmRlclN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJl''@;'; put 'put ''bmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRlcj1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVy''@;'; put 'put ''U3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh2dCwwKSwhdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpJiZ2dD09PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlciYmZi52aWV3LnJlbmRlcigpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMuZm9yY2VGdWxsUmVuZGVy''@;'; put 'put ''PSEwLHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKXx8Zi52aWV3LnJlbmRlcigpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgTnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5pc0V4ZWN1dGlvblN1c3Bl''@;'; put 'put ''bmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMo''@;'; put 'put ''KSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgTnQ9dGhpcy5leGVjdXRpb25TdXNw''@;'; put 'put ''ZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE50LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZOdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5yZXN1bWVP''@;'; put 'put ''cGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3BlbmRFeGVj''@;'; put 'put ''dXRpb24oKTtjb25zdCBIdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihOdCksSHR9LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE50PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0''@;'; put 'put ''aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0IHZ0PWYudmlldyx7d2lkdGg6TnQsaGVpZ2h0Okh0fT12dC5nZXRMYXN0U2l6ZSgpLHt3aWR0aDpIbixoZWlnaHQ6dHJ9PWYucm9vdEVs''@;'; put 'put ''ZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYXI9SG4hPT1OdHx8dHIhPT1IdDshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQsaGVpZ2h0Okh0fSx7d2lkdGg6SG4saGVpZ2h0OnRyfSxhcikmJigoYXJ8fHZ0Ll93dC53dE92ZXJsYXlzLnNj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKHZ0LnNldExhc3RTaXplKEhuLHRyKSxmLnJlbmRlcigpLHZ0LmFkanVzdEVsZW1lbnRzU2l6ZSgpKSxmLnJ1bkhvb2tzKCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQsaGVpZ2h0Okh0fSx7d2lkdGg6SG4saGVpZ2h0''@;'; put 'put ''OnRyfSxhcikpfSx0aGlzLnVwZGF0ZURhdGE9ZnVuY3Rpb24odnQsTnQpe2dwZSh2dCxIdD0+e009SHR9LEh0PT57TT1IdCxmLmNvbHVtbkluZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLGYucm93SW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhp''@;'; put 'put ''cy5jb3VudFNvdXJjZVJvd3MoKSksWi5hZGp1c3RSb3dzQW5kQ29scygpLEdyLnJlZnJlc2goKX0se2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6RCxpbnRlcm5hbFNvdXJjZToidXBkYXRlRGF0YSIsc291cmNlOk50LG1ldGFNYW5hZ2VyOnB0LGZpcnN0UnVuOkVlfSl9LHRo''@;'; put 'put ''aXMubG9hZERhdGE9ZnVuY3Rpb24odnQsTnQpe2dwZSh2dCxIdD0+e009SHR9LCgpPT57cHQuY2xlYXJDZWxsc0NhY2hlKCksZi5pbml0SW5kZXhNYXBwZXJzKCksWi5hZGp1c3RSb3dzQW5kQ29scygpLEdyLnJlZnJlc2goKSxFZSYmKEVlPVtudWxsLCJsb2FkRGF0YSJdKX0se2hvdEluc3Rh''@;'; put 'put ''bmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6RCxpbnRlcm5hbFNvdXJjZToibG9hZERhdGEiLHNvdXJjZTpOdCxtZXRhTWFuYWdlcjpwdCxmaXJzdFJ1bjpFZX0pfSx0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudD1mdW5jdGlvbigpe2NvbnN0IHZ0PWR0LmNvbHVtbnM7bGV0IE50PTA7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheSh2dCkpTnQ9dnQubGVuZ3RoO2Vsc2UgaWYobWwodnQpKWlmKCJhcnJheSI9PT1mLmRhdGFUeXBlKXtjb25zdCBIdD10aGlzLmNvdW50U291cmNlQ29scygpO2ZvcihsZXQgSG49MDtIbjxIdDtIbis9MSl2dChIbikmJihOdCs9MSl9ZWxzZSgib2JqZWN0Ij09PWYuZGF0''@;'; put 'put ''YVR5cGV8fCJmdW5jdGlvbiI9PT1mLmRhdGFUeXBlKSYmKE50PU0uY29sVG9Qcm9wQ2FjaGUubGVuZ3RoKTtlbHNlIGlmKFBhKGR0LmRhdGFTY2hlbWEpKXtjb25zdCBIdD1NLmdldFNjaGVtYSgpO050PUFycmF5LmlzQXJyYXkoSHQpP0h0Lmxlbmd0aDpCTyhIdCl9ZWxzZSBOdD10aGlzLmNv''@;'; put 'put ''dW50U291cmNlQ29scygpO3JldHVybiBOdH0sdGhpcy5pbml0SW5kZXhNYXBwZXJzPWZ1bmN0aW9uKCl7dGhpcy5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksdGhpcy5yb3dJbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5j''@;'; put 'put ''b3VudFNvdXJjZVJvd3MoKSl9LHRoaXMuZ2V0RGF0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7cmV0dXJuIF9jKHZ0KT9NLmdldEFsbCgpOk0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbiksTS5ERVNUSU5BVElPTl9SRU5ERVJF''@;'; put 'put ''Uil9LHRoaXMuZ2V0Q29weWFibGVUZXh0PWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtyZXR1cm4gTS5nZXRDb3B5YWJsZVRleHQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbikpfSx0aGlzLmdldENvcHlhYmxlRGF0YT1mdW5jdGlvbih2dCxOdCl7''@;'; put 'put ''cmV0dXJuIE0uZ2V0Q29weWFibGUodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gTS5nZXRTY2hlbWEoKX0sdGhpcy51cGRhdGVTZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgSHQ9KEVlP2YubG9hZERhdGE6Zi51cGRhdGVEYXRhKS5iaW5kKHRoaXMpO2xldCB0cixhcixIbj0hMTtpZihQYSh2dC5yb3dzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAicm93cyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5''@;'; put 'put ''b3UgbWVhbiBzdGFydFJvd3MsIG1pblJvd3Mgb3IgbWF4Um93cz8nKTtpZihQYSh2dC5jb2xzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiY29scyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydENvbHMsIG1pbkNvbHMgb3IgbWF4Q29scz8nKTtpZihQ''@;'; put 'put ''YSh2dC5nYW50dENoYXJ0KSl0aHJvdyBuZXcgRXJyb3IoJ1NpbmNlIDguMC4wIHRoZSAiZ2FudHRDaGFydCIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicpO2Zvcih0ciBpbiB2dC5sYW5ndWFnZSYmZnVuY3Rpb24gR24odnQpe2NvbnN0IE50PUgzZSh2dCk7Z1goTnQpPyhmLnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsTnQpLEp0Lmxhbmd1YWdlPU50LGYucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLE50KSk6TjNlKHZ0KX0odnQubGFuZ3VhZ2UpLHZ0KWlmKCJkYXRhIiE9PXRyJiYibGFuZ3VhZ2UiIT09dHIpaWYoImNsYXNzTmFtZSI9PT10cilh''@;'; put 'put ''aSgiY2xhc3NOYW1lIix2dC5jbGFzc05hbWUpO2Vsc2UgaWYoInRhYmxlQ2xhc3NOYW1lIj09PXRyJiZmLnRhYmxlKWFpKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpO2Vsc2UgaWYo''@;'; put 'put ''U2EuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKHRyKXx8U2EuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKHRyKSl7Y29uc3QgcG49dnRbdHJdO21sKHBuKT8oU2EuZ2V0U2luZ2xldG9uKCkuYWRkQXNGaXhlZCh0cixwbixmKSxkdFt0cl09cG4pOkFycmF5LmlzQXJyYXkocG4pJiYo''@;'; put 'put ''U2EuZ2V0U2luZ2xldG9uKCkuYWRkKHRyLHBuLGYpLGR0W3RyXT1wbil9ZWxzZSFOdCYmVHUodnQsdHIpJiYoSnRbdHJdPXZ0W3RyXSk7dm9pZCAwPT09dnQuZGF0YSYmdm9pZCAwPT09ZHQuZGF0YT9IdChudWxsLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmRhdGE/SHQodnQuZGF0''@;'; put 'put ''YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5jb2x1bW5zJiYoTS5jcmVhdGVNYXAoKSxmLmluaXRJbmRleE1hcHBlcnMoKSk7Y29uc3QgSHI9Zi5jb3VudENvbHMoKSxxcj1kdC5jb2x1bW5zO2lmKHFyJiZtbChxcikmJihIbj0hMCksKHZvaWQgMCE9PXZ0LmNlbGx8fHZvaWQgMCE9''@;'; put 'put ''PXZ0LmNlbGxzfHx2b2lkIDAhPT12dC5jb2x1bW5zKSYmcHQuY2xlYXJDYWNoZSgpLEhyPjApZm9yKHRyPTAsYXI9MDt0cjxIcjt0cisrKXtpZihxcil7Y29uc3QgcG49SG4/cXIodHIpOnFyW2FyXTtwbiYmcHQudXBkYXRlQ29sdW1uTWV0YShhcixwbil9YXIrPTF9UGEodnQuY2VsbCkmJlhv''@;'; put 'put ''KHZ0LmNlbGwscG49PntmLnNldENlbGxNZXRhT2JqZWN0KHBuLnJvdyxwbi5jb2wscG4pfSksZi5ydW5Ib29rcygiYWZ0ZXJDZWxsTWV0YVJlc2V0Iik7bGV0IG9uPWYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09b24mJihvbj1wYXJzZUludChmLnJvb3RFbGVtZW50LnN0eWxlLmhl''@;'; put 'put ''aWdodCwxMCkpO2xldCB5bj12dC5oZWlnaHQ7aWYobWwoeW4pJiYoeW49eW4oKSksTnQmJmYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpJiZmLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiLGYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJz''@;'; put 'put ''dHlsZSIpKSxudWxsPT09eW4pe2NvbnN0IHBuPWYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIpO3BuJiYocG4uaW5kZXhPZigiaGVpZ2h0Iik+LTF8fHBuLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP2Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHls''@;'; put 'put ''ZSIscG4pOihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PXluJiYoZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4oeW4pP2Ake3lufWA6YCR7eW59cHhgLGYucm9vdEVsZW1lbnQuc3R5bGUu''@;'; put 'put ''b3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5cGVvZiB2dC53aWR0aDwidSIpe2xldCBwbj12dC53aWR0aDttbChwbikmJihwbj1wbigpKSxmLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKHBuKT9gJHtwbn1gOmAke3BufXB4YH1pZighTnQpe2lmKGYudmlldyl7Zi52aWV3Ll93dC53dFZp''@;'; put 'put ''ZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKTtjb25zdCBwbj1mLmdldEN1cnJlbnRUaGVtZU5hbWUoKSxwcj1UdSh2dCwidGhlbWVOYW1lIik7cG4mJnByJiZwbiE9PXZ0LnRoZW1lTmFt''@;'; put 'put ''ZSYmKGYudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkucmVtb3ZlQ2xhc3NOYW1lcygpLGYudmlldy5yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1lbnQocG4pKTtjb25zdCAkbj1wciYmdnQudGhlbWVOYW1lfHxNcGUoZi5yb290RWxlbWVudCk7Zi51c2VUaGVtZSgkbiksZi52aWV3LmFk''@;'; put 'put ''ZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQoZi5nZXRDdXJyZW50VGhlbWVOYW1lKCkpfWYucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLHZ0KX1aLmFkanVzdFJvd3NBbmRDb2xzKCksZi52aWV3JiYhRWUmJihmLnJlbmRlcigpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RF''@;'; put 'put ''bGVtZW50c1NpemUoKSksIU50JiZmLnZpZXcmJigiIj09PW9ufHwiIj09PXlufHx2b2lkIDA9PT15bikmJm9uIT09eW4mJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNl''@;'; put 'put ''bGVjdGVkTGFzdCgpO2lmKGR0LmdldFZhbHVlKXtpZihtbChkdC5nZXRWYWx1ZSkpcmV0dXJuIGR0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0WzBdWzBdXVtkdC5nZXRWYWx1ZV19ZWxzZSBpZih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0''@;'; put 'put ''WzFdKX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBkdH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlvbih2dCxOdCxIdCxIbix0cil7Wi5hbHRlcih2dCxOdCxIdCxI''@;'; put 'put ''bix0cil9LHRoaXMuZ2V0Q2VsbD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sSG49TnQsdHI9dnQ7aWYoTnQ+PTApe2lmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1Bo''@;'; put 'put ''eXNpY2FsQ29sdW1uKE50KSkpcmV0dXJuIG51bGw7SG49dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE50KX1pZih2dD49MCl7aWYodGhpcy5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxSb3codnQpKSlyZXR1cm4gbnVs''@;'; put 'put ''bDt0cj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodnQpfXJldHVybiBudWxsPT09dHJ8fG51bGw9PT1Ibnx8dm9pZCAwPT09dHJ8fHZvaWQgMD09PUhuP251bGw6Zi52aWV3LmdldENlbGxBdENvb3JkcyhmLl9jcmVhdGVDZWxsQ29vcmRzKHRyLEhu''@;'; put 'put ''KSxIdCl9LHRoaXMuZ2V0Q29vcmRzPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29vcmRzKHZ0KTtpZihudWxsPT09TnQpcmV0dXJuIG51bGw7Y29uc3R7cm93Okh0LGNvbDpIbn09TnQ7bGV0IHRyPUh0LGFyPUhuO3JldHVybiBIdD49MCYmKHRyPXRo''@;'; put 'put ''aXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIdCkpLEhuPj0wJiYoYXI9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEhuKSksZi5fY3JlYXRlQ2VsbENvb3Jkcyh0cixhcil9LHRoaXMuY29sVG9Qcm9wPWZ1''@;'; put 'put ''bmN0aW9uKHZ0KXtyZXR1cm4gTS5jb2xUb1Byb3AodnQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih2dCl7cmV0dXJuIE0ucHJvcFRvQ29sKHZ0KX0sdGhpcy50b1Zpc3VhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50''@;'; put 'put ''b1Zpc3VhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIE0uZ2V0KHZ0LE0uY29sVG9Qcm9wKE50KSl9LHRoaXMuZ2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxO''@;'; put 'put ''dCl7cmV0dXJuIE0uZ2V0KHZ0LE50KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24odnQpe2NvbnN0IE50PVtdLEh0PU0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcygwLHZ0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGR0LmRhdGEubGVuZ3RoLTEsdnQpLE0uREVTVElOQVRJT05fUkVO''@;'; put 'put ''REVSRVIpO2ZvcihsZXQgSG49MDtIbjxIdC5sZW5ndGg7SG4rPTEpZm9yKGxldCB0cj0wO3RyPEh0W0huXS5sZW5ndGg7dHIrPTEpTnQucHVzaChIdFtIbl1bdHJdKTtyZXR1cm4gTnR9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9W10sSHQ9TS5nZXRSYW5nZShm''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKDAsTS5wcm9wVG9Db2wodnQpKSxmLl9jcmVhdGVDZWxsQ29vcmRzKGR0LmRhdGEubGVuZ3RoLTEsTS5wcm9wVG9Db2wodnQpKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IEhuPTA7SG48SHQubGVuZ3RoO0huKz0xKWZvcihsZXQgdHI9MDt0cjxI''@;'; put 'put ''dFtIbl0ubGVuZ3RoO3RyKz0xKU50LnB1c2goSHRbSG5dW3RyXSk7cmV0dXJuIE50fSx0aGlzLmdldFNvdXJjZURhdGE9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cjtyZXR1cm4gdHI9dm9pZCAwPT09dnQ/RC5nZXREYXRhKCk6RC5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''dnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoSHQsSG4pKSx0cn0sdGhpcy5nZXRTb3VyY2VEYXRhQXJyYXk9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cjtyZXR1cm4gdHI9dm9pZCAwPT09dnQ/RC5nZXREYXRhKCEwKTpELmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxO''@;'; put 'put ''dCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbiksITApLHRyfSx0aGlzLmdldFNvdXJjZURhdGFBdENvbD1mdW5jdGlvbih2dCl7cmV0dXJuIEQuZ2V0QXRDb2x1bW4odnQpfSx0aGlzLnNldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPUlyKHZ0LE50''@;'; put 'put ''LEh0KSxhcj10aGlzLmhhc0hvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIpLEhyPVtdO2FyJiZZbih0cixvbj0+e2xldFt5bixwbixwcl09b247SHIucHVzaChbeW4scG4sRC5nZXRBdENlbGwoeW4scG4pLHByXSl9KSxZbih0cixvbj0+e2xldFt5bixwbixwcl09b247RC5zZXRBdENl''@;'; put 'put ''bGwoeW4scG4scHIpfSksYXImJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsSHIsSG4pLHRoaXMucmVuZGVyKCk7Y29uc3QgcXI9Zi5nZXRBY3RpdmVFZGl0b3IoKTtxciYmUGEocXIucmVmcmVzaFZhbHVlKSYmcXIucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291''@;'; put 'put ''cmNlRGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gRC5nZXRBdFJvdyh2dCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIEQuZ2V0QXRDZWxsKHZ0LE50KX0sdGhpcy5nZXREYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBNLmdldFJhbmdl''@;'; put 'put ''KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsMCksZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCx0aGlzLmNvdW50Q29scygpLTEpLE0uREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9dm9pZCAwPT09dnQ/WzAs''@;'; put 'put ''MCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOlt2dCxOdCxIdCxIbl0sW2FyLEhyXT10cjtsZXRbLCxxcixvbl09dHIseW49bnVsbCxwbj1udWxsO3ZvaWQgMD09PXFyJiYocXI9YXIpLHZvaWQgMD09PW9uJiYob249SHIpO2xldCBwcj0ibWl4ZWQiO3JldHVybiBHYShNYXRo''@;'; put 'put ''Lm1heChNYXRoLm1pbihhcixxciksMCksTWF0aC5tYXgoYXIscXIpLCRuPT57bGV0IGRyPSEwO3JldHVybiBHYShNYXRoLm1heChNYXRoLm1pbihIcixvbiksMCksTWF0aC5tYXgoSHIsb24pLFVyPT4ocG49dGhpcy5nZXRDZWxsTWV0YSgkbixVcikudHlwZSx5bj9kcj15bj09PXBuOnluPXBu''@;'; put 'put ''LGRyKSkscHI9ZHI/cG46Im1peGVkIixkcn0pLHByfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50LEh0KXtjb25zdFtIbix0cl09W3RoaXMudG9QaHlzaWNhbFJvdyh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KV07bGV0IGFyPXB0LmdldENlbGxNZXRhS2V5VmFsdWUo''@;'; put 'put ''SG4sdHIsSHQpOyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHZ0LE50LEh0LGFyKSYmKHB0LnJlbW92ZUNlbGxNZXRhKEhuLHRyLEh0KSxmLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxNZXRhIix2dCxOdCxIdCxhcikpLGFyPW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNN''@;'; put 'put ''ZXRhPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9yKHZhciBIdD1hcmd1bWVudHMubGVuZ3RoLEhuPW5ldyBBcnJheShIdD4yP0h0LTI6MCksdHI9Mjt0cjxIdDt0cisrKUhuW3RyLTJdPWFyZ3Vt''@;'; put 'put ''ZW50c1t0cl07aWYoSG4ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KEhuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNlbGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtOdD4wJiZwdC5y''@;'; put 'put ''ZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSxOdCksSG4ubGVuZ3RoPjAmJlluKEhuLnJldmVyc2UoKSxhcj0+e3B0LmNyZWF0ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpKSxZbihhciwoSHIscXIpPT50aGlzLnNldENlbGxNZXRhT2JqZWN0KHZ0LHFyLEhyKSl9KSxmLnJlbmRl''@;'; put 'put ''cigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHZ0LE50LEh0KXsib2JqZWN0Ij09dHlwZW9mIEh0JiZYbyhIdCwoSG4sdHIpPT57dGhpcy5zZXRDZWxsTWV0YSh2dCxOdCx0cixIbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7aWYoITE9PT1m''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsdnQsTnQsSHQsSG4pKXJldHVybjtsZXQgYXI9dnQsSHI9TnQ7dnQ8dGhpcy5jb3VudFJvd3MoKSYmKGFyPXRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLE50PHRoaXMuY291bnRDb2xzKCkmJihIcj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQp''@;'; put 'put ''KSxwdC5zZXRDZWxsTWV0YShhcixIcixIdCxIbiksZi5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsdnQsTnQsSHQsSG4pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiBwdC5nZXRDZWxsc01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCl7bGV0''@;'; put 'put ''IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7c2tpcE1ldGFFeHRlbnNpb246ITF9LEhuPXRoaXMudG9QaHlzaWNhbFJvdyh2dCksdHI9dGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KTtyZXR1cm4gbnVsbD09PUhuJiYoSG49dnQpLG51''@;'; put 'put ''bGw9PT10ciYmKHRyPU50KSxwdC5nZXRDZWxsTWV0YShIbix0cix7dmlzdWFsUm93OnZ0LHZpc3VhbENvbHVtbjpOdCwuLi5IdH0pfSx0aGlzLmdldENvbHVtbk1ldGE9ZnVuY3Rpb24odnQpe3JldHVybiBwdC5nZXRDb2x1bW5NZXRhKHRoaXMudG9QaHlzaWNhbENvbHVtbih2dCkpfSx0aGlz''@;'; put 'put ''LmdldENlbGxNZXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBwdC5nZXRDZWxsc01ldGFBdFJvdyh2dCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkPWZ1bmN0aW9uKCl7cmV0dXJuISgib2JqZWN0Ij09PWYuZGF0YVR5cGV8fGR0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxS''@;'; put 'put ''ZW5kZXJlcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS5yZW5kZXJlcjp2dC5yZW5kZXJlcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEh0P1FPKEh0KTpfYyhIdCk/UU8oInRleHQiKTpIdH0sdGhpcy5nZXRDZWxsRWRp''@;'; put 'put ''dG9yPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLmVkaXRvcjp2dC5lZGl0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIdD9XTyhIdCk6X2MoSHQpP1dPKCJ0ZXh0Iik6SHR9LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1m''@;'; put 'put ''dW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS52YWxpZGF0b3I6dnQudmFsaWRhdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgSHQ/cksoSHQpOkh0fSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQpe3RoaXMuX3Zh''@;'; put 'put ''bGlkYXRlQ2VsbHModnQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih2dCxOdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVSb3dzIHBhcmFtZXRlciBgcm93c2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoTnQsdnQp''@;'; put 'put ''fSx0aGlzLnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbih2dCxOdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVDb2x1bW5zIHBhcmFtZXRlciBgY29sdW1uc2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoTnQsdm9pZCAwLHZ0''@;'; put 'put ''KX0sdGhpcy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCxOdCxIdCl7Y29uc3QgSG49bmV3IF9pO3Z0JiYoSG4ub25RdWV1ZUVtcHR5PXZ0KTtsZXQgdHI9Zi5jb3VudFJvd3MoKS0xO2Zvcig7dHI+PTA7KXtpZih2b2lkIDAhPT1OdCYmLTE9PT1OdC5pbmRleE9mKHRyKSl7dHItPTE7Y29u''@;'; put 'put ''dGludWV9bGV0IGFyPWYuY291bnRDb2xzKCktMTtmb3IoO2FyPj0wOyl2b2lkIDA9PT1IdHx8LTEhPT1IdC5pbmRleE9mKGFyKT8oSG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKGYuZ2V0RGF0YUF0Q2VsbCh0cixhciksZi5nZXRDZWxsTWV0YSh0cixhciksSHI9Pntp''@;'; put 'put ''ZigiYm9vbGVhbiIhPXR5cGVvZiBIcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09SHImJihIbi52YWxpZD0hMSksSG4ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksYXItPTEpOmFyLT0x''@;'; put 'put ''O3RyLT0xfUhuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBOdD1kdC5yb3dIZWFkZXJzLEh0PXZ0O3JldHVybiB2b2lkIDAhPT1IdCYmKEh0PWYucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlciIsSHQpKSx2b2lkIDA9PT1IdD8oTnQ9''@;'; put 'put ''W10sR2EoZi5jb3VudFJvd3MoKS0xLEhuPT57TnQucHVzaChmLmdldFJvd0hlYWRlcihIbikpfSkpOkFycmF5LmlzQXJyYXkoTnQpJiZ2b2lkIDAhPT1OdFtIdF0/TnQ9TnRbSHRdOm1sKE50KT9OdD1OdChIdCk6TnQmJiJzdHJpbmciIT10eXBlb2YgTnQmJiJudW1iZXIiIT10eXBlb2YgTnQm''@;'; put 'put ''JihOdD1IdCsxKSxOdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFkdC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihudWxsIT1kdC5jb2xIZWFkZXJzKXJldHVybiEhZHQuY29sSGVhZGVycztmb3IobGV0IHZ0PTAsTnQ9Zi5jb3Vu''@;'; put 'put ''dENvbHMoKTt2dDxOdDt2dCsrKWlmKGYuZ2V0Q29sSGVhZGVyKHZ0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgSHQ9''@;'; put 'put ''Zi5ydW5Ib29rcygibW9kaWZ5Q29sSGVhZGVyIix2dCk7aWYodm9pZCAwPT09SHQpe2NvbnN0IHFyPVtdLG9uPWYuY291bnRDb2xzKCk7Zm9yKGxldCB5bj0wO3luPG9uO3luKyspcXIucHVzaChmLmdldENvbEhlYWRlcih5bikpO3JldHVybiBxcn1sZXQgSG49ZHQuY29sSGVhZGVycztjb25z''@;'; put 'put ''dCBhcj1mLnRvUGh5c2ljYWxDb2x1bW4oSHQpLEhyPWZ1bmN0aW9uKHFyKXtjb25zdCBvbj1bXSx5bj1mLmNvdW50Q29scygpO2xldCBwbj0wO2Zvcig7cG48eW47cG4rKyltbChkdC5jb2x1bW5zKSYmZHQuY29sdW1ucyhwbikmJm9uLnB1c2gocG4pO3JldHVybiBvbltxcl19KGFyKTtyZXR1''@;'; put 'put ''cm4hMT09PWR0LmNvbEhlYWRlcnM/SG49bnVsbDpkdC5jb2x1bW5zJiZtbChkdC5jb2x1bW5zKSYmZHQuY29sdW1ucyhIcikmJmR0LmNvbHVtbnMoSHIpLnRpdGxlP0huPWR0LmNvbHVtbnMoSHIpLnRpdGxlOmR0LmNvbHVtbnMmJmR0LmNvbHVtbnNbYXJdJiZkdC5jb2x1bW5zW2FyXS50aXRs''@;'; put 'put ''ZT9Ibj1kdC5jb2x1bW5zW2FyXS50aXRsZTpBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1kdC5jb2xIZWFkZXJzW2FyXT9Ibj1kdC5jb2xIZWFkZXJzW2FyXTptbChkdC5jb2xIZWFkZXJzKT9Ibj1kdC5jb2xIZWFkZXJzKGFyKTpkdC5jb2xIZWFkZXJzJiYic3RyaW5n''@;'; put 'put ''IiE9dHlwZW9mIGR0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YgZHQuY29sSGVhZGVycyYmKEhuPWhQKEh0KSksSG49Zi5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLEhuLHZ0LE50KSxIbn0sdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQp''@;'; put 'put ''e2xldCBOdDtpZih2dD49MCYmKE50PWYuZ2V0Q2VsbE1ldGEoMCx2dCkud2lkdGgpLCh2b2lkIDA9PT1OdHx8TnQ9PT1kdC53aWR0aCkmJihOdD1kdC5jb2xXaWR0aHMpLG51bGwhPU50KXtzd2l0Y2godHlwZW9mIE50KXtjYXNlIm9iamVjdCI6TnQ9TnRbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rp''@;'; put 'put ''b24iOk50PU50KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE50JiYoTnQ9cGFyc2VJbnQoTnQsMTApKX1yZXR1cm4gTnR9LHRoaXMuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24odnQsTnQpe2xldCBIdD1mLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIEh0PWYucnVuSG9va3MoIm1vZGlm''@;'; put 'put ''eUNvbFdpZHRoIixIdCx2dCxOdCksdm9pZCAwPT09SHQmJihIdD1fXyksSHR9LHRoaXMuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9dGhpcy52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgSHQ9ZHQucm93SGVpZ2h0cztpZihudWxsIT1IdCl7''@;'; put 'put ''c3dpdGNoKHR5cGVvZiBIdCl7Y2FzZSJvYmplY3QiOkh0PUh0W3Z0XTticmVhaztjYXNlImZ1bmN0aW9uIjpIdD1IdCh2dCl9InN0cmluZyI9PXR5cGVvZiBIdCYmKEh0PXBhcnNlSW50KEh0LDEwKSl9cmV0dXJuIG51bGwhPUh0JiZIdDxOdD9OdDpIdH0sdGhpcy5nZXRSb3dIZWlnaHQ9ZnVu''@;'; put 'put ''Y3Rpb24odnQsTnQpe2xldCBIdD1mLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3ModnQpO3JldHVybiBIdD1mLnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHQiLEh0LHZ0LE50KSxIdH0sdGhpcy5jb3VudFNvdXJjZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gRC5jb3VudFJvd3MoKX0sdGhpcy5j''@;'; put 'put ''b3VudFNvdXJjZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRC5jb3VudEZpcnN0Um93S2V5cygpfSx0aGlzLmNvdW50Um93cz1mdW5jdGlvbigpe3JldHVybiBNLmdldExlbmd0aCgpfSx0aGlzLmNvdW50Q29scz1mdW5jdGlvbigpe2NvbnN0IHZ0PWR0Lm1heENvbHMsTnQ9dGhpcy5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbih2dCxOdCl9LHRoaXMuY291bnRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTot''@;'; put 'put ''MX0sdGhpcy5jb3VudFZpc2libGVSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFJlbmRlcmVkQ29scz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yu''@;'; put 'put ''dmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50Um93''@;'; put 'put ''SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Um93SGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xl''@;'; put 'put ''dCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50PTA7cmV0dXJuIFgkKGYuY291bnRSb3dzKCktMSxIdD0+e2lmKGYuaXNFbXB0eVJvdyhIdCkpTnQrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksTnR9LHRoaXMuY291bnRF''@;'; put 'put ''bXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxOdD0wO3JldHVybiBYJChmLmNvdW50Q29scygpLTEsSHQ9PntpZihmLmlzRW1wdHlDb2woSHQpKU50Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1''@;'; put 'put ''cm4hMX0pLE50fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBkdC5pc0VtcHR5Um93LmNhbGwoZix2dCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7cmV0dXJuIGR0LmlzRW1wdHlDb2wuY2FsbChmLHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE50''@;'; put 'put ''LEh0LEhuKXtsZXQgdHI9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxhcj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFfYyh2dCkmJiFfYyhOdCkmJnRoaXMu''@;'; put 'put ''c2VsZWN0Q2VsbHMoW1t2dCxOdCxIdCxIbl1dLHRyLGFyKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W1tdXSxIdD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiZiZS5zdXNwZW5kKCk7Y29uc3QgSG49R3Iuc2VsZWN0Q2VsbHModnQpO3JldHVybiBIbiYmSHQmJmYubGlzdGVuKCksYmUu''@;'; put 'put ''cmVzdW1lKCksSG59LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbih2dCl7cmV0dXJuIEdyLnNlbGVjdENvbHVtbnModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9p''@;'; put 'put ''ZCAwKX0sdGhpcy5zZWxlY3RSb3dzPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gR3Iuc2VsZWN0Um93cyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLmRl''@;'; put 'put ''c2VsZWN0Q2VsbD1mdW5jdGlvbigpe0dyLmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7bGV0IHZ0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LEh0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2JlLnNraXBOZXh0U2Nyb2xsQ3ljbGUoKSxHci5zZWxlY3RBbGwodnQsTnQsSHQpfTtjb25zdCB3aT0odnQsTnQpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTnQs''@;'; put 'put ''MSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE50KXt2YXIgSHQ7Im51bWJlciI9PXR5cGVvZiB2dCYmKHZ0PXtyb3c6YXJndW1lbnRzWzBdLGNvbDphcmd1bWVudHNbMV0sdmVydGljYWxTbmFwOmFyZ3VtZW50c1syXT8iYm90dG9tIjoidG9wIixob3Jpem9udGFsU25h''@;'; put 'put ''cDphcmd1bWVudHNbM10/ImVuZCI6InN0YXJ0Iixjb25zaWRlckhpZGRlbkluZGV4ZXM6bnVsbD09PShIdD1hcmd1bWVudHNbNF0pfHx2b2lkIDA9PT1IdHx8SHR9KTtjb25zdHtyb3c6SG4sY29sOnRyLGNvbnNpZGVySGlkZGVuSW5kZXhlczphcn09dnQ/P3t9O2xldCBIcj1Ibixxcj10cjtp''@;'; put 'put ''ZihtbChOdCkmJnRoaXMuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIixOdCksdm9pZCAwPT09YXJ8fGFyKXtjb25zdCBwcj1OdW1iZXIuaXNJbnRlZ2VyKEhuKSYmSG4+PTAsJG49TnVtYmVyLmlzSW50ZWdlcih0cikmJnRyPj0wLGRyPXByP3dpKHRoaXMucm93SW5kZXhNYXBwZXIsSG4pOnZv''@;'; put 'put ''aWQgMCxVcj0kbj93aSh0aGlzLmNvbHVtbkluZGV4TWFwcGVyLHRyKTp2b2lkIDA7aWYobnVsbD09PWRyfHxudWxsPT09VXIpcmV0dXJuITE7SHI9cHI/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGRyKTpIbixxcj0kbj9mLmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVXIpOnRyfWNvbnN0IG9uPU51bWJlci5pc0ludGVnZXIoSHIpLHluPU51bWJlci5pc0ludGVnZXIocXIpO2xldCBwbj0hMTtyZXR1cm4gb24mJkhyPj0wJiZ5biYmcXI+PTA/cG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0KGYuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoSHIscXIpLHZ0Lmhvcml6b250YWxTbmFwLHZ0LnZlcnRpY2FsU25hcCk6b24mJkhyPj0wJiYoeW4mJnFyPDB8fCF5bik/cG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShIcix2dC52ZXJ0aWNhbFNuYXApOnluJiZxcj49MCYmKG9uJiZIcjwwfHwhb24pJiYocG49''@;'; put 'put ''Zi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KHFyLHZ0Lmhvcml6b250YWxTbmFwKSksbWwoTnQpJiYocG4/dGhpcy52aWV3LnJlbmRlcigpOih0aGlzLnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIixOdCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9Pk50KCkpKSkscG59LHRo''@;'; put 'put ''aXMuc2Nyb2xsVG9Gb2N1c2VkQ2VsbD1mdW5jdGlvbih2dCl7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTttbCh2dCkmJnRoaXMuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIix2dCk7Y29uc3R7aGlnaGxpZ2h0Ok50fT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCksSHQ9dGhpcy5zY3JvbGxWaWV3cG9ydFRvKE50LnRvT2JqZWN0KCkpO3JldHVybiBIdD90aGlzLnZpZXcucmVuZGVyKCk6bWwodnQpJiYodGhpcy5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsdnQpLHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrKCgpPT52dCgpKSksSHR9LHRoaXMuZGVzdHJv''@;'; put 'put ''eT1mdW5jdGlvbigpe2lmKGYuX2NsZWFyVGltZW91dHMoKSxmLl9jbGVhckltbWVkaWF0ZXMoKSxmLnZpZXcmJmYudmlldy5kZXN0cm95KCksRCYmRC5kZXN0cm95KCksRD1udWxsLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZGVzdHJveSgpLHB0LmNsZWFyQ2FjaGUoKSxEWC5kZWxldGUo''@;'; put 'put ''dGhpcy5ndWlkKSxjUChmKSl7Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO3Z0JiZ2dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHZ0KX14cChmLnJvb3RFbGVtZW50KSx2LmRlc3Ryb3koKSxyZSYmcmUuZGVzdHJv''@;'; put 'put ''eSgpLGYuYmF0Y2hFeGVjdXRpb24oKCk9PntmLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxmLmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSx2bi5nZXRJdGVtcygpLmZvckVhY2godnQ9PntsZXRbLE50XT12dDtOdC5kZXN0cm95KCl9KSx2bi5jbGVhcigpLGYucnVu''@;'; put 'put ''SG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksU2EuZ2V0U2luZ2xldG9uKCkuZGVzdHJveShmKSxYbyhmLCh2dCxOdCxIdCk9PnttbCh2dCk/SHRbTnRdPWZ1bmN0aW9uIGVhKHZ0KXtyZXR1cm4oKT0+e3Rocm93IG5ldyBFcnJvcihgVGhlICIke3Z0fSIgbWV0aG9kIGNhbm5vdCBiZSBjYWxs''@;'; put 'put ''ZWQgYmVjYXVzZSB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19KE50KToiZ3VpZCIhPT1OdCYmKEh0W050XT1udWxsKX0pLGYuaXNEZXN0cm95ZWQ9ITAsTSYmTS5kZXN0cm95KCksTT1udWxsLFo9bnVsbCxHcj1udWxsLHJlPW51bGwsZj1udWxsfSx0''@;'; put 'put ''aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiByZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UmVuZGVy''@;'; put 'put ''ZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMu''@;'; put 'put ''Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygp''@;'; put 'put ''fSx0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4o''@;'; put 'put ''KX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFBhcnRpYWxseVZp''@;'; put 'put ''c2libGVSb3coKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZp''@;'; put 'put ''cnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldFBsdWdpbj1mdW5jdGlvbih2dCl7cmV0dXJuIHZuLmdldEl0''@;'; put 'put ''ZW0ocDEodnQpKX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTp2bi5nZXRJZCh2dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5h''@;'; put 'put ''ZGRIb29rPWZ1bmN0aW9uKHZ0LE50LEh0KXtTYS5nZXRTaW5nbGV0b24oKS5hZGQodnQsTnQsZixIdCl9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIFNhLmdldFNpbmdsZXRvbigpLmhhcyh2dCxmKXx8U2EuZ2V0U2luZ2xldG9uKCkuaGFzKHZ0KX0sdGhpcy5hZGRIb29rT25j''@;'; put 'put ''ZT1mdW5jdGlvbih2dCxOdCxIdCl7U2EuZ2V0U2luZ2xldG9uKCkub25jZSh2dCxOdCxmLEh0KX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LE50KXtTYS5nZXRTaW5nbGV0b24oKS5yZW1vdmUodnQsTnQsZil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQsTnQsSHQsSG4sdHIsYXIs''@;'; put 'put ''SHIpe3JldHVybiBTYS5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxOdCxIdCxIbix0cixhcixIcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIFozZShkdC5sYW5ndWFnZSx2dCxOdCl9LHRoaXMudG9IVE1MPSgpPT5LJCh0aGlzKSx0aGlzLnRvVGFi''@;'; put 'put ''bGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsSyQodGhpcykpLHZ0LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMudXNlVGhl''@;'; put 'put ''bWU9dnQ9Pnt0aGlzLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLnVzZVRoZW1lKHZ0KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFRoZW1lIix2dCwhIUVlKX0sdGhpcy5nZXRDdXJyZW50VGhlbWVOYW1lPSgpPT50aGlzLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLmdldFRoZW1lTmFtZSgpLHRo''@;'; put 'put ''aXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih2dCl7bGV0IEh0PXZ0OyJmdW5jdGlvbiI9PXR5cGVvZiBIdCYmKEh0PXNldFRpbWVvdXQoSHQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goSHQp''@;'; put 'put ''fSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7WW4odGhpcy50aW1lb3V0cyx2dD0+e2NsZWFyVGltZW91dCh2dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHZ0KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUo''@;'; put 'put ''dnQpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7WW4odGhpcy5pbW1lZGlhdGVzLHZ0PT57Y2xlYXJJbW1lZGlhdGUodnQpfSl9LHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrPWZ1bmN0aW9uKHZ0KXt0aGlzLnJvb3RXaW5kb3cucXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmlz''@;'; put 'put ''RGVzdHJveWVkfHx2dCgpfSl9LHRoaXMuX2dldEVkaXRvck1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gcmV9O2NvbnN0IGZhPXFydCh7aGFuZGxlRXZlbnQ6KCk9PmYuaXNMaXN0ZW5pbmcoKSxiZWZvcmVLZXlEb3duOnZ0PT50aGlzLnJ1bkhvb2tzKCJiZWZvcmVLZXlEb3duIix2dCksYWZ0''@;'; put 'put ''ZXJLZXlEb3duOnZ0PT57dGhpcy5pc0Rlc3Ryb3llZHx8Zi5ydW5Ib29rcygiYWZ0ZXJEb2N1bWVudEtleURvd24iLHZ0KX0sb3duZXJXaW5kb3c6dGhpcy5yb290V2luZG93fSk7dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLHZ0PT57ITE9PT12dC5jdHJsS2V5JiYhMT09''@;'; put 'put ''PXZ0Lm1ldGFLZXkmJmZhLnJlbGVhc2VQcmVzc2VkS2V5cygpfSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZmF9LHRoaXMuZ2V0Rm9jdXNNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSxuSygpLmZvckVhY2godnQ9Pntjb25zdCBOdD1JRSh2dCk7dm4u''@;'; put 'put ''YWRkSXRlbSh2dCxuZXcgTnQodGhpcykpfSksZnVuY3Rpb24gS2l0KGMpe1skaXQsR2l0XS5mb3JFYWNoKGw9PmwoYykpfShmKSxmYS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLFNhLmdldFNpbmdsZXRvbigpLnJ1bihmLCJjb25zdHJ1Y3QiKX1mdW5jdGlvbiBFcGUoYyxsLGEpe2Mu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFRwZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gVlAoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGMpfWZ1bmN0aW9uIEFwZShjKXtjb25z''@;'; put 'put ''dCBhPXttaW5IZWlnaHQ6MjAwLG1heEhlaWdodDozMDAsbWluV2lkdGg6MTAwLG1heFdpZHRoOjMwMCx0ZXh0Q29udGVudDpjZT0+Y2UudmFsdWUsLi4uYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9fSxkPWMuYm9keSxoPWMuY3JlYXRl''@;'; put 'put ''VGV4dE5vZGUoIiIpLGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IHY7ZnVuY3Rpb24gTSgpe3ZhciBjZSxiZTtoLnRleHRDb250ZW50PWEudGV4dENvbnRlbnQodiksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUuZm9udFNpemU9VlAodikuZm9udFNpemUsZi5zdHls''@;'; put 'put ''ZS5mb250RmFtaWx5PVZQKHYpLmZvbnRGYW1pbHksZi5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGQuYXBwZW5kQ2hpbGQoZik7Y29uc3QgRWU9cGFyc2VJbnQoKG51bGw9PT0oY2U9VlAodikpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UucGFkZGluZ0lubGluZVN0YXJ0KXx8MCwxMCksQmU9cGFy''@;'; put 'put ''c2VJbnQoKG51bGw9PT0oYmU9VlAodikpfHx2b2lkIDA9PT1iZT92b2lkIDA6YmUucGFkZGluZ0lubGluZUVuZCl8fDAsMTApLHFlPWYuY2xpZW50V2lkdGgrRWUrQmUrMTtkLnJlbW92ZUNoaWxkKGYpO2NvbnN0IHJ0PXYuc3R5bGU7cnQuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YCxydC53''@;'; put 'put ''aWR0aD1hLm1pbldpZHRoPnFlP2Ake2EubWluV2lkdGh9cHhgOnFlPmEubWF4V2lkdGg/YCR7YS5tYXhXaWR0aH1weGA6YCR7cWV9cHhgO2NvbnN0IHB0PXYuc2Nyb2xsSGVpZ2h0P3Yuc2Nyb2xsSGVpZ2h0LTE6MDthLm1pbkhlaWdodD5wdD9ydC5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhg''@;'; put 'put ''OmEubWF4SGVpZ2h0PHB0PyhydC5oZWlnaHQ9YCR7YS5tYXhIZWlnaHR9cHhgLHJ0Lm92ZXJmbG93WT0idmlzaWJsZSIpOnJ0LmhlaWdodD1gJHtwdH1weGB9ZnVuY3Rpb24gRCgpe2MuZGVmYXVsdFZpZXcuc2V0VGltZW91dChNLDApfXJldHVybntpbml0OmZ1bmN0aW9uIHJlKGNlLGJlKXts''@;'; put 'put ''ZXQgRWU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt2PWNlLGZ1bmN0aW9uIFooY2Upe2lmKGNlJiZjZS5taW5IZWlnaHQpaWYoImluaGVyaXQiPT09Y2UubWluSGVpZ2h0KWEubWluSGVpZ2h0PXYuY2xpZW50SGVpZ2h0O2Vsc2V7Y29u''@;'; put 'put ''c3QgYmU9cGFyc2VJbnQoY2UubWluSGVpZ2h0LDEwKTtpc05hTihiZSl8fChhLm1pbkhlaWdodD1iZSl9aWYoY2UmJmNlLm1heEhlaWdodClpZigiaW5oZXJpdCI9PT1jZS5tYXhIZWlnaHQpYS5tYXhIZWlnaHQ9di5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5tYXhI''@;'; put 'put ''ZWlnaHQsMTApO2lzTmFOKGJlKXx8KGEubWF4SGVpZ2h0PWJlKX1pZihjZSYmY2UubWluV2lkdGgpaWYoImluaGVyaXQiPT09Y2UubWluV2lkdGgpYS5taW5XaWR0aD12LmNsaWVudFdpZHRoO2Vsc2V7Y29uc3QgYmU9cGFyc2VJbnQoY2UubWluV2lkdGgsMTApO2lzTmFOKGJlKXx8KGEubWlu''@;'; put 'put ''V2lkdGg9YmUpfWlmKGNlJiZjZS5tYXhXaWR0aClpZigiaW5oZXJpdCI9PT1jZS5tYXhXaWR0aClhLm1heFdpZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5tYXhXaWR0aCwxMCk7aXNOYU4oYmUpfHwoYS5tYXhXaWR0aD1iZSl9Zi5maXJzdENoaWxkfHwoZi5j''@;'; put 'put ''bGFzc05hbWU9ImF1dG9SZXNpemUiLGYuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIixmLmFwcGVuZENoaWxkKGgpKX0oYmUpLCJURVhUQVJFQSI9PT12Lm5vZGVOYW1lJiYodi5zdHlsZS5yZXNpemU9Im5vbmUiLHYuc3R5bGUuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YCx2LnN0eWxl''@;'; put 'put ''Lm1pbldpZHRoPWAke2EubWluV2lkdGh9cHhgLHYuc3R5bGUubWF4V2lkdGg9YCR7YS5tYXhXaWR0aH1weGAsdi5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLEVlJiYoRXBlKHYsImlucHV0IixNKSxFcGUodiwia2V5ZG93biIsRCkpLE0oKX0scmVzaXplOk0sdW5PYnNlcnZlKCl7VHBlKHYs''@;'; put 'put ''ImlucHV0IixNKSxUcGUodiwia2V5ZG93biIsRCl9fX1mdW5jdGlvbiBrcGUoYyxsKXtjb25zdCBhPVMkKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7MCE9PXYmJihmKz1kW3YtMV0ubGVuZ3RoKzEpO2NvbnN0IEQ9Zitk''@;'; put 'put ''W3ZdLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPUQpLGE8PUQpYnJlYWt9d0UobCxoKX1mdW5jdGlvbiBpOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcWl0KGMpe3ZhciBsPWZ1bmN0aW9uIFhpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQlA9Imh0X2VkaXRvcl9oaWRkZW4iLERwZT0idGV4dEVkaXRvciI7Y2xhc3MgYTkgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRleHQifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGk5KHRoaXMsImV2ZW50''@;'; put 'put ''TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxpOSh0aGlzLCJhdXRvUmVzaXplIixBcGUodGhpcy5ob3Qucm9vdERvY3VtZW50KSksaTkodGhpcywiVEVYVEFSRUEiLHZvaWQgMCksaTkodGhpcywidGV4dGFyZWFTdHlsZSIsdm9pZCAwKSxpOSh0aGlzLCJURVhUQVJFQV9QQVJFTlQiLHZvaWQgMCks''@;'; put 'put ''aTkodGhpcywidGV4dGFyZWFQYXJlbnRTdHlsZSIsdm9pZCAwKSxpOSh0aGlzLCJsYXllckNsYXNzIix2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqMih0aGlzKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVy''@;'; put 'put ''RGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFsdWU9bH1vcGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMu''@;'; put 'put ''aG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLmF1dG9SZXNpemUudW5PYnNlcnZlKCksdkUodGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdGhpcy5ob3Qu''@;'; put 'put ''cm9vdEVsZW1lbnQpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtjb25zdCBNPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksIXYucmVhZE9u''@;'; put 'put ''bHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpEfT12O0QmJiF0aGlzLmlzT3BlbmVkKCkmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxNIT09bHUuRklOSVNIRUQmJiF0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpfX1i''@;'; put 'put ''ZWdpbkVkaXRpbmcobCxhKXt0aGlzLnN0YXRlPT09bHUuVklSR0lOJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIixzdXBlci5iZWdpbkVkaXRpbmcobCxhKSl9Zm9jdXMoKXt0aGlzLlRFWFRBUkVBLnNlbGVjdCgpLHdFKHRoaXMuVEVYVEFSRUEsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgp''@;'; put 'put ''fWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuVEVYVEFSRUE9bC5jcmVhdGVFbGVtZW50KCJURVhUQVJFQSIpLHZvKHRoaXMuVEVYVEFSRUEsW1siZGF0YS1ob3QtaW5wdXQiLCIiXSxONygtMSldKSxUaSh0aGlzLlRFWFRBUkVBLCJoYW5kc29u''@;'; put 'put ''dGFibGVJbnB1dCIpLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVO''@;'; put 'put ''VD1sLmNyZWF0ZUVsZW1lbnQoIkRJViIpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhvbGRlciIpLHBvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykmJmxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksVGkodGhp''@;'; put 'put ''cy5URVhUQVJFQV9QQVJFTlQsQlApLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRB''@;'; put 'put ''UkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe3RmZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9Ii05OTk5OXB4IiksdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMu''@;'; put 'put ''dGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsbG8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCl9c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50''@;'; put 'put ''ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5''@;'; put 'put ''PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIjtjb25zdCBsPXRoaXMuVEVYVEFSRUFfUEFSRU5ULmNoaWxkTm9kZXM7bGV0IGE9ITE7R2EobC5sZW5ndGgtMSxkPT57aWYocG8obFtkXSwiaGFuZHNvbnRhYmxlRWRpdG9yIikpcmV0dXJuIGE9ITAsITF9KSxwbyh0aGlzLlRF''@;'; put 'put ''WFRBUkVBX1BBUkVOVCxCUCkmJmxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULEJQKSxhPyh0aGlzLmxheWVyQ2xhc3M9Imh0X2VkaXRvcl92aXNpYmxlIixUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKToodGhpcy5sYXllckNsYXNzPXRoaXMuZ2V0RWRpdGVkQ2VsbHNM''@;'; put 'put ''YXllckNsYXNzKCksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSl9cmVmcmVzaFZhbHVlKCl7Y29uc3QgbD10aGlzLmhvdC50b1BoeXNpY2FsUm93KHRoaXMucm93KSxhPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwobCx0aGlzLmNvbCk7dGhpcy5vcmlnaW5h''@;'; put 'put ''bFZhbHVlPWEsdGhpcy5zZXRWYWx1ZShhKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuc3RhdGUhPT1sdS5FRElUSU5HJiYhbCly''@;'; put 'put ''ZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZChsfHx0aGlzLmNsb3NlKCkpO2NvbnN0e3RvcDphLHN0YXJ0OmQsd2lkdGg6aCxtYXhXaWR0aDpmLGhlaWdodDp2LG1heEhlaWdodDpNfT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7dGhp''@;'; put 'put ''cy50ZXh0YXJlYVBhcmVudFN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7ZH1weGAsdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCk7Y29uc3QgRD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1''@;'; put 'put ''dGVkU3R5bGUodGhpcy5URCk7dGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZT1ELmZvbnRTaXplLHRoaXMuVEVYVEFSRUEuc3R5bGUuZm9udEZhbWlseT1ELmZvbnRGYW1pbHksdGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5URC5zdHlsZS5iYWNrZ3JvdW5kQ29s''@;'; put 'put ''b3IsdGhpcy5hdXRvUmVzaXplLmluaXQodGhpcy5URVhUQVJFQSx7bWluV2lkdGg6TWF0aC5taW4oaCxmKSxtaW5IZWlnaHQ6TWF0aC5taW4odixNKSxtYXhXaWR0aDpmLG1heEhlaWdodDpNfSwhMCl9YmluZEV2ZW50cygpe08kKCkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIodGhpcy5URVhUQVJFQSwiZm9jdXNvdXQiLCgpPT50aGlzLmZpbmlzaEVkaXRpbmcoITEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9''@;'; put 'put ''PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PWx1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT57''@;'; put 'put ''dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT1sdS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0''@;'; put 'put ''cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sIiwiRW50''@;'; put 'put ''ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5fSx7a2V5czpbWyJNZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjooKT0+IXRoaXMuaG90LnNlbGVjdGlv''@;'; put 'put ''bi5pc011bHRpcGxlKCl9LHtrZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazooZix2KT0+e2xldFtNXT12O2twZShNLHRoaXMuVEVYVEFSRUEpfX0se2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0''@;'; put 'put ''W01dPXY7a3BlKE0sdGhpcy5URVhUQVJFQSl9fV0se3J1bk9ubHlJZjooKT0+UGEodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6RHBlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNo''@;'; put 'put ''b3J0Y3V0c0J5R3JvdXAoRHBlKX19ZnVuY3Rpb24gb1QoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT12LmFyaWFUYWdzLEQ9W10sWj1bXSxyZT1bXSxjZT1bXTt2LmNsYXNzTmFtZSYmVGkobCx2LmNsYXNzTmFtZSksdi5yZWFkT25seT8oRC5wdXNoKHYucmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSxN''@;'; put 'put ''JiZjZS5wdXNoKGsyZSgpKSk6TSYmcmUucHVzaChrMmUoKVswXSksITE9PT12LnZhbGlkJiZ2LmludmFsaWRDZWxsQ2xhc3NOYW1lPyhELnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmY2UucHVzaChEMmUoKSkpOihaLnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmcmUu''@;'; put 'put ''cHVzaChEMmUoKVswXSkpLCExPT09di53b3JkV3JhcCYmdi5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZELnB1c2godi5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwhZiYmdi5wbGFjZWhvbGRlciYmRC5wdXNoKHYucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxsbyhsLFopLFRpKGwsRCksajcobCxyZSks''@;'; put 'put ''dm8obCxjZSl9ZnVuY3Rpb24gQWcoYyxsLGEsZCxoLGYsdil7b1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2xldCBNPWY7IU0mJnYucGxhY2Vob2xkZXImJihNPXYucGxhY2Vob2xkZXIpLE09bGMoTSksdi50cmltV2hpdGVzcGFjZSYmKE09TS50cmltKCkpLFBtKGwsTSl9b1QuUkVO''@;'; put 'put ''REVSRVJfVFlQRT0iYmFzZSIsQWcuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29uc3QgSXBlPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjphOSxyZW5kZXJlcjpBZ307ZnVuY3Rpb24gaDMoYyxsKXtjb25zdCBhPW5ldyB4cGUoYyxsfHx7fSxESyk7cmV0dXJuIGEuaW5pdCgpLGF9RzIoSXBlKSxo''@;'; put 'put ''My5lZGl0b3JzPXtCYXNlRWRpdG9yOmtffSxoMy5Db3JlPWZ1bmN0aW9uKGMpe3JldHVybiBuZXcgeHBlKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LERLKX0saDMuRGVmYXVsdFNldHRpbmdzPW9wZSgpLGgzLmhvb2tzPVNhLmdl''@;'; put 'put ''dFNpbmdsZXRvbigpLGgzLkNlbGxDb29yZHM9aVAsaDMuQ2VsbFJhbmdlPWdLLGgzLnBhY2thZ2VOYW1lPSJoYW5kc29udGFibGUiLGgzLmJ1aWxkRGF0ZT0iMjQvMDQvMjAyNSAxMDo1OTowMCIsaDMudmVyc2lvbj0iMTUuMy4wIixoMy5sYW5ndWFnZXM9e2RpY3Rpb25hcnlLZXlzOmxudCxn''@;'; put 'put ''ZXRMYW5ndWFnZURpY3Rpb25hcnk6VTNlLGdldExhbmd1YWdlc0RpY3Rpb25hcmllczpmdW5jdGlvbiBmbnQoKXtyZXR1cm4gZG50KCl9LHJlZ2lzdGVyTGFuZ3VhZ2VEaWN0aW9uYXJ5OnozZSxnZXRUcmFuc2xhdGVkUGhyYXNlOlozZX07Y29uc3Qgb3M9aDMsbmF0PVsiY29udGFpbmVyIl0s''@;'; put 'put ''SVg9bmV3IE1hcCxScGU9IlRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQgd2FzIGRlc3Ryb3llZCBhbmQgY2Fubm90IGJlIHVzZWQgcHJvcGVybHkuIjtsZXQgWW09KCgpPT57Y2xhc3MgY3tnZXRJbnN0YW5jZShhKXtjb25zdCBkPUlYLmdldChhKTty''@;'; put 'put ''ZXR1cm4gZC5pc0Rlc3Ryb3llZD8oY29uc29sZS53YXJuKFJwZSksbnVsbCk6ZH1yZWdpc3Rlckluc3RhbmNlKGEsZCl7cmV0dXJuIElYLnNldChhLGQpfXJlbW92ZUluc3RhbmNlKGEpe3JldHVybiBJWC5kZWxldGUoYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3''@;'; put 'put ''KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHJhdD1PYmplY3Qua2V5cyhvcy5EZWZhdWx0U2V0dGluZ3MpLExwZT1vcy5ob29rcy5nZXRSZWdpc3RlcmVkKCk7bGV0IE9wZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e21lcmdlU2V0dGluZ3MoYSl7Y29uc3QgZD0ic2V0dGluZ3MiaW4gYSYmIm9iamVjdCI9PXR5cGVvZiBhLnNldHRpbmdzLGg9ZD9hLnNldHRpbmdzOnt9O3JldHVybiBMcGUuY29uY2F0KHJhdCkuZm9yRWFjaCh2PT57Y29uc3QgTT1McGUuaW5kZXhPZih2KT4tMTtsZXQgRDtkJiZNJiYoRD1h''@;'; put 'put ''LnNldHRpbmdzW3ZdKSx2b2lkIDAhPT1hW3ZdJiYoRD1hW3ZdKSx2b2lkIDAhPT1EJiYoaFt2XT0ibmdab25lImluIGEmJiJmdW5jdGlvbiI9PXR5cGVvZiBEJiZNP2Z1bmN0aW9uKC4uLlope3JldHVybiBhLm5nWm9uZS5ydW4oKCk9PkQuYXBwbHkodGhpcyxaKSl9OkQpfSksaH1wcmVwYXJl''@;'; put 'put ''Q2hhbmdlcyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9KSxkfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3''@;'; put 'put ''NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxEXz0oKCk9PntjbGFzcyBje19ob3RUYWJsZVJlZ2lzdGVyZXI7X2hvdFNldHRpbmdzUmVzb2x2ZXI7bmdab25lO2NvbnRhaW5lcjtfX2hvdEluc3RhbmNlPW51bGw7Y29sdW1uc0NvbXBvbmVudHM9''@;'; put 'put ''W107c2V0dGluZ3M7aG90SWQ9IiI7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lO2FsbG93RW1wdHk7YWxsb3dIdG1sO2FsbG93SW5zZXJ0Q29sdW1uO2FsbG93SW5zZXJ0Um93O2FsbG93SW52YWxpZDthbGxvd1JlbW92ZUNvbHVtbjthbGxvd1JlbW92ZVJvdzthcmlhVGFnczthdXRvQ29sdW1uU2l6''@;'; put 'put ''ZTthdXRvUm93U2l6ZTthdXRvV3JhcENvbDthdXRvV3JhcFJvdztiaW5kUm93c1dpdGhIZWFkZXJzO2NlbGw7Y2VsbHM7Y2hlY2tlZFRlbXBsYXRlO2NsYXNzTmFtZTtjb2xIZWFkZXJzO2NvbGxhcHNpYmxlQ29sdW1ucztjb2x1bW5IZWFkZXJIZWlnaHQ7Y29sdW1ucztjb2x1bW5Tb3J0aW5n''@;'; put 'put ''O2NvbHVtblN1bW1hcnk7Y29sV2lkdGhzO2NvbW1lbnRlZENlbGxDbGFzc05hbWU7Y29tbWVudHM7Y29udGV4dE1lbnU7Y29weWFibGU7Y29weVBhc3RlO2NvcnJlY3RGb3JtYXQ7Y3VycmVudENvbENsYXNzTmFtZTtjdXJyZW50SGVhZGVyQ2xhc3NOYW1lO2N1cnJlbnRSb3dDbGFzc05hbWU7''@;'; put 'put ''Y3VzdG9tQm9yZGVycztkYXRhO2RhdGFEb3ROb3RhdGlvbjtkYXRhU2NoZW1hO2RhdGVGb3JtYXQ7ZGF0ZVBpY2tlckNvbmZpZztkZWZhdWx0RGF0ZTt0YWJOYXZpZ2F0aW9uO3RoZW1lTmFtZTtkaXNhYmxlVmlzdWFsU2VsZWN0aW9uO2RyYWdUb1Njcm9sbDtkcm9wZG93bk1lbnU7ZWRpdG9y''@;'; put 'put ''O2VudGVyQmVnaW5zRWRpdGluZztlbnRlck1vdmVzO2ZpbGxIYW5kbGU7ZmlsdGVyO2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU7ZmlsdGVycztmaXhlZENvbHVtbnNMZWZ0O2ZpeGVkQ29sdW1uc1N0YXJ0O2ZpeGVkUm93c0JvdHRvbTtmaXhlZFJvd3NUb3A7Zm9ybXVsYXM7ZnJhZ21lbnRTZWxl''@;'; put 'put ''Y3Rpb247aGVhZGVyQ2xhc3NOYW1lO2hlaWdodDtoaWRkZW5Db2x1bW5zO2hpZGRlblJvd3M7aW52YWxpZENlbGxDbGFzc05hbWU7aW1lRmFzdEVkaXQ7bGFiZWw7bGFuZ3VhZ2U7bGF5b3V0RGlyZWN0aW9uO2xpY2Vuc2VLZXk7bG9jYWxlO21hbnVhbENvbHVtbkZyZWV6ZTttYW51YWxDb2x1''@;'; put 'put ''bW5Nb3ZlO21hbnVhbENvbHVtblJlc2l6ZTttYW51YWxSb3dNb3ZlO21hbnVhbFJvd1Jlc2l6ZTttYXhDb2xzO21heFJvd3M7bWVyZ2VDZWxsczttaW5Db2xzO21pblJvd3M7bWluU3BhcmVDb2xzO21pblNwYXJlUm93czttdWx0aUNvbHVtblNvcnRpbmc7bmF2aWdhYmxlSGVhZGVycztuZXN0''@;'; put 'put ''ZWRIZWFkZXJzO25lc3RlZFJvd3M7bm9Xb3JkV3JhcENsYXNzTmFtZTtudW1lcmljRm9ybWF0O29ic2VydmVET01WaXNpYmlsaXR5O291dHNpZGVDbGlja0Rlc2VsZWN0cztwZXJzaXN0ZW50U3RhdGU7cGxhY2Vob2xkZXI7cGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lO3ByZXZlbnRPdmVyZmxv''@;'; put 'put ''dztwcmV2ZW50V2hlZWw7cmVhZE9ubHk7cmVhZE9ubHlDZWxsQ2xhc3NOYW1lO3JlbmRlckFsbENvbHVtbnM7cmVuZGVyQWxsUm93cztyZW5kZXJlcjtyb3dIZWFkZXJzO3Jvd0hlYWRlcldpZHRoO3Jvd0hlaWdodHM7c2VhcmNoO3NlbGVjdGlvbk1vZGU7c2VsZWN0T3B0aW9ucztza2lwQ29s''@;'; put 'put ''dW1uT25QYXN0ZTtza2lwUm93T25QYXN0ZTtzb3J0QnlSZWxldmFuY2U7c291cmNlO3N0YXJ0Q29scztzdGFydFJvd3M7c3RyZXRjaEg7c3RyaWN0O3RhYmxlQ2xhc3NOYW1lO3RhYk1vdmVzO3RpdGxlO3RyaW1Ecm9wZG93bjt0cmltUm93czt0cmltV2hpdGVzcGFjZTt0eXBlO3VuY2hlY2tl''@;'; put 'put ''ZFRlbXBsYXRlO3VuZG87dmFsaWRhdG9yO3ZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O3ZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O3Zpc2libGVSb3dzO3dpZHRoO3dvcmRXcmFwO2FmdGVyQWRkQ2hpbGQ7YWZ0ZXJBdXRvZmlsbDthZnRlckJlZ2luRWRpdGluZzthZnRlckNlbGxN''@;'; put 'put ''ZXRhUmVzZXQ7YWZ0ZXJDaGFuZ2U7YWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ7YWZ0ZXJDb2x1bW5Db2xsYXBzZTthZnRlckNvbHVtbkV4cGFuZDthZnRlckNvbHVtbkZyZWV6ZTthZnRlckNvbHVtbk1vdmU7YWZ0ZXJDb2x1bW5SZXNpemU7YWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZTthZnRlckNv''@;'; put 'put ''bHVtblNvcnQ7YWZ0ZXJDb2x1bW5VbmZyZWV6ZTthZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM7YWZ0ZXJDb250ZXh0TWVudUhpZGU7YWZ0ZXJDb250ZXh0TWVudVNob3c7YWZ0ZXJDb3B5O2FmdGVyQ29weUxpbWl0O2FmdGVyQ3JlYXRlQ29sO2FmdGVyQ3JlYXRlUm93O2FmdGVyQ3V0''@;'; put 'put ''O2FmdGVyRGVzZWxlY3Q7YWZ0ZXJEZXN0cm95O2FmdGVyRGV0YWNoQ2hpbGQ7YWZ0ZXJEb2N1bWVudEtleURvd247YWZ0ZXJEcmF3U2VsZWN0aW9uO2FmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnM7YWZ0ZXJEcm9wZG93bk1lbnVIaWRlO2FmdGVyRHJvcGRvd25NZW51U2hvdzthZnRl''@;'; put 'put ''ckZpbHRlcjthZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlO2FmdGVyR2V0Q2VsbE1ldGE7YWZ0ZXJHZXRDb2xIZWFkZXI7YWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnM7YWZ0ZXJHZXRSb3dIZWFkZXI7YWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM7YWZ0ZXJIaWRlQ29sdW1uczthZnRl''@;'; put 'put ''ckhpZGVSb3dzO2FmdGVySW5pdDthZnRlckxhbmd1YWdlQ2hhbmdlO2FmdGVyTGlzdGVuO2FmdGVyTG9hZERhdGE7YWZ0ZXJNZXJnZUNlbGxzO2FmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kO2FmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXM7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydDthZnRlck1v''@;'; put 'put ''bWVudHVtU2Nyb2xsO2FmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQ7YWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkO2FmdGVyT25DZWxsQ29udGV4dE1lbnU7YWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazthZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjthZnRlck9uQ2VsbE1vdXNlRG93bjth''@;'; put 'put ''ZnRlck9uQ2VsbE1vdXNlT3V0O2FmdGVyT25DZWxsTW91c2VPdmVyO2FmdGVyT25DZWxsTW91c2VVcDthZnRlclBhc3RlO2FmdGVyUGx1Z2luc0luaXRpYWxpemVkO2FmdGVyUmVkbzthZnRlclJlZG9TdGFja0NoYW5nZTthZnRlclJlZnJlc2hEaW1lbnNpb25zO2FmdGVyUmVtb3ZlQ2VsbE1l''@;'; put 'put ''dGE7YWZ0ZXJSZW1vdmVDb2w7YWZ0ZXJSZW1vdmVSb3c7YWZ0ZXJSZW5kZXI7YWZ0ZXJSZW5kZXJlcjthZnRlclJvd01vdmU7YWZ0ZXJSb3dSZXNpemU7YWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZTthZnRlclNjcm9sbEhvcml6b250YWxseTthZnRlclNjcm9sbFZlcnRpY2FsbHk7YWZ0ZXJTY3Jv''@;'; put 'put ''bGw7YWZ0ZXJTZWxlY3RDb2x1bW5zO2FmdGVyU2VsZWN0aW9uO2FmdGVyU2VsZWN0aW9uQnlQcm9wO2FmdGVyU2VsZWN0aW9uRW5kO2FmdGVyU2VsZWN0aW9uRW5kQnlQcm9wO2FmdGVyU2VsZWN0aW9uRm9jdXNTZXQ7YWZ0ZXJTZWxlY3RSb3dzO2FmdGVyU2V0Q2VsbE1ldGE7YWZ0ZXJTZXRE''@;'; put 'put ''YXRhQXRDZWxsO2FmdGVyU2V0RGF0YUF0Um93UHJvcDthZnRlclNldFNvdXJjZURhdGFBdENlbGw7YWZ0ZXJTZXRUaGVtZTthZnRlclNoZWV0QWRkZWQ7YWZ0ZXJTaGVldFJlbmFtZWQ7YWZ0ZXJTaGVldFJlbW92ZWQ7YWZ0ZXJUcmltUm93O2FmdGVyVW5kbzthZnRlclVuZG9TdGFja0NoYW5n''@;'; put 'put ''ZTthZnRlclVuaGlkZUNvbHVtbnM7YWZ0ZXJVbmhpZGVSb3dzO2FmdGVyVW5saXN0ZW47YWZ0ZXJVbm1lcmdlQ2VsbHM7YWZ0ZXJVbnRyaW1Sb3c7YWZ0ZXJVcGRhdGVEYXRhO2FmdGVyVXBkYXRlU2V0dGluZ3M7YWZ0ZXJWYWxpZGF0ZTthZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92''@;'; put 'put ''ZXJyaWRlO2FmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU7YWZ0ZXJWaWV3UmVuZGVyO2JlZm9yZUFkZENoaWxkO2JlZm9yZUF1dG9maWxsO2JlZm9yZUJlZ2luRWRpdGluZztiZWZvcmVDZWxsQWxpZ25tZW50O2JlZm9yZUNoYW5nZTtiZWZvcmVDaGFuZ2VSZW5kZXI7YmVmb3Jl''@;'; put 'put ''Q29sdW1uQ29sbGFwc2U7YmVmb3JlQ29sdW1uRXhwYW5kO2JlZm9yZUNvbHVtbkZyZWV6ZTtiZWZvcmVDb2x1bW5Nb3ZlO2JlZm9yZUNvbHVtblJlc2l6ZTtiZWZvcmVDb2x1bW5Tb3J0O2JlZm9yZUNvbHVtbldyYXA7YmVmb3JlQ29sdW1uVW5mcmVlemU7YmVmb3JlQ29tcG9zaXRpb25TdGFy''@;'; put 'put ''dDtiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zO2JlZm9yZUNvbnRleHRNZW51U2hvdztiZWZvcmVDb3B5O2JlZm9yZUNyZWF0ZUNvbDtiZWZvcmVDcmVhdGVSb3c7YmVmb3JlQ3V0O2JlZm9yZURldGFjaENoaWxkO2JlZm9yZURyYXdCb3JkZXJzO2JlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1z''@;'; put 'put ''O2JlZm9yZURyb3Bkb3duTWVudVNob3c7YmVmb3JlRmlsdGVyO2JlZm9yZUdldENlbGxNZXRhO2JlZm9yZUhpZGVDb2x1bW5zO2JlZm9yZUhpZGVSb3dzO2JlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjtiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI7YmVmb3JlSW5pdDtiZWZvcmVJ''@;'; put 'put ''bml0V2Fsa29udGFibGU7YmVmb3JlS2V5RG93bjtiZWZvcmVMYW5ndWFnZUNoYW5nZTtiZWZvcmVMb2FkRGF0YTtiZWZvcmVNZXJnZUNlbGxzO2JlZm9yZU9uQ2VsbENvbnRleHRNZW51O2JlZm9yZU9uQ2VsbE1vdXNlRG93bjtiZWZvcmVPbkNlbGxNb3VzZU91dDtiZWZvcmVPbkNlbGxNb3Vz''@;'; put 'put ''ZU92ZXI7YmVmb3JlT25DZWxsTW91c2VVcDtiZWZvcmVQYXN0ZTtiZWZvcmVSZWRvO2JlZm9yZVJlZG9TdGFja0NoYW5nZTtiZWZvcmVSZWZyZXNoRGltZW5zaW9ucztiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcztiZWZvcmVSZW1vdmVDZWxsTWV0YTtiZWZvcmVSZW1vdmVDb2w7YmVmb3Jl''@;'; put 'put ''UmVtb3ZlUm93O2JlZm9yZVJlbmRlcjtiZWZvcmVSZW5kZXJlcjtiZWZvcmVSb3dNb3ZlO2JlZm9yZVJvd1Jlc2l6ZTtiZWZvcmVSb3dXcmFwO2JlZm9yZVNlbGVjdENvbHVtbnM7YmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQ7YmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0O2JlZm9yZVNlbGVj''@;'; put 'put ''dFJvd3M7YmVmb3JlU2V0Q2VsbE1ldGE7YmVmb3JlU2V0UmFuZ2VFbmQ7YmVmb3JlU2V0UmFuZ2VTdGFydDtiZWZvcmVTZXRSYW5nZVN0YXJ0T25seTtiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg7YmVmb3JlVG91Y2hTY3JvbGw7YmVmb3JlVHJpbVJvdztiZWZvcmVVbmRvO2JlZm9yZVVu''@;'; put 'put ''ZG9TdGFja0NoYW5nZTtiZWZvcmVVbmhpZGVDb2x1bW5zO2JlZm9yZVVuaGlkZVJvd3M7YmVmb3JlVW5tZXJnZUNlbGxzO2JlZm9yZVVudHJpbVJvdztiZWZvcmVVcGRhdGVEYXRhO2JlZm9yZVZhbGlkYXRlO2JlZm9yZVZhbHVlUmVuZGVyO2JlZm9yZVZpZXdwb3J0U2Nyb2xsO2JlZm9yZVZp''@;'; put 'put ''ZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5O2JlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTtiZWZvcmVWaWV3UmVuZGVyO2NvbnN0cnVjdDtpbml0O21vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDttb2RpZnlBdXRvZmlsbFJhbmdlO21vZGlmeUNvbEhlYWRlcjttb2RpZnlDb2x1bW5IZWFk''@;'; put 'put ''ZXJIZWlnaHQ7bW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU7bW9kaWZ5Q29sV2lkdGg7bW9kaWZ5Q29weWFibGVSYW5nZTttb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZTttb2RpZnlGb2N1c2VkRWxlbWVudDttb2RpZnlEYXRhO21vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uO21vZGlmeUdl''@;'; put 'put ''dENlbGxDb29yZHM7bW9kaWZ5R2V0Q29vcmRzRWxlbWVudDttb2RpZnlSb3dEYXRhO21vZGlmeVJvd0hlYWRlcjttb2RpZnlSb3dIZWFkZXJXaWR0aDttb2RpZnlSb3dIZWlnaHQ7bW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZTttb2RpZnlTb3VyY2VEYXRhO21vZGlmeVRyYW5zZm9ybUVu''@;'; put 'put ''ZDttb2RpZnlUcmFuc2Zvcm1Gb2N1czttb2RpZnlUcmFuc2Zvcm1TdGFydDtwZXJzaXN0ZW50U3RhdGVMb2FkO3BlcnNpc3RlbnRTdGF0ZVJlc2V0O3BlcnNpc3RlbnRTdGF0ZVNhdmU7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlcj1hLHRoaXMuX2hvdFNldHRp''@;'; put 'put ''bmdzUmVzb2x2ZXI9ZCx0aGlzLm5nWm9uZT1ofWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZD90aGlzLl9faG90SW5zdGFuY2U6KHRoaXMuX2hvdFRhYmxlUmVnaXN0''@;'; put 'put ''ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKSxjb25zb2xlLndhcm4oUnBlKSxudWxsKX1zZXQgaG90SW5zdGFuY2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRlclZpZXdJbml0KCl7Y29uc3QgYT10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3ModGhp''@;'; put 'put ''cyk7aWYodGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgZD1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2QucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksYS5jb2x1bW5zPWR9dGhpcy5uZ1pvbmUucnVu''@;'; put 'put ''T3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBvcy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5ob3RJZCx0aGlzLmhvdEluc3RhbmNlKSx0''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlLmluaXQoKX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGw9PT10aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBkPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIucHJlcGFyZUNoYW5nZXMoYSk7dGhpcy51cGRhdGVIb3RUYWJsZShkKX1uZ09uRGVzdHJveSgpe3Ro''@;'; put 'put ''aXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCl9dXBkYXRlSG90VGFibGUoYSl7dGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGEsITEpfSl9b25BZnRlckNvbHVtbnNDaGFuZ2UoKXtpZih2b2lkIDAhPT10aGlzLmNvbHVtbnNDb21wb25lbnRzJiZ0aGlzLmNvbHVtbnNDb21w''@;'; put 'put ''b25lbnRzLmxlbmd0aD4wKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX19b25BZnRlckNvbHVtbnNO''@;'; put 'put ''dW1iZXJDaGFuZ2UoKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjAmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChkPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhkKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxl''@;'; put 'put ''KHtjb2x1bW5zOmF9KX1hZGRDb2x1bW4oYSl7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5wdXNoKGEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1yZW1vdmVDb2x1bW4oYSl7Y29uc3QgZD10aGlzLmNvbHVtbnNDb21wb25lbnRzLmluZGV4T2YoYSk7dGhpcy5jb2x1bW5zQ29t''@;'; put 'put ''cG9uZW50cy5zcGxpY2UoZCwxKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFltKSxHZShPcGUpLEdlKFdhKSl9O3N0YXRpYyBcdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''aG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEobmF0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguY29udGFpbmVyPWYuZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1l''@;'; put 'put ''OiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFs''@;'; put 'put ''aWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNvbHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhcmlhVGFnczoiYXJpYVRhZ3MiLGF1dG9Db2x1bW5TaXplOiJhdXRvQ29sdW1uU2l6ZSIsYXV0b1Jvd1NpemU6ImF1dG9Sb3dTaXplIixhdXRvV3JhcENvbDoi''@;'; put 'put ''YXV0b1dyYXBDb2wiLGF1dG9XcmFwUm93OiJhdXRvV3JhcFJvdyIsYmluZFJvd3NXaXRoSGVhZGVyczoiYmluZFJvd3NXaXRoSGVhZGVycyIsY2VsbDoiY2VsbCIsY2VsbHM6ImNlbGxzIixjaGVja2VkVGVtcGxhdGU6ImNoZWNrZWRUZW1wbGF0ZSIsY2xhc3NOYW1lOiJjbGFzc05hbWUiLGNv''@;'; put 'put ''bEhlYWRlcnM6ImNvbEhlYWRlcnMiLGNvbGxhcHNpYmxlQ29sdW1uczoiY29sbGFwc2libGVDb2x1bW5zIixjb2x1bW5IZWFkZXJIZWlnaHQ6ImNvbHVtbkhlYWRlckhlaWdodCIsY29sdW1uczoiY29sdW1ucyIsY29sdW1uU29ydGluZzoiY29sdW1uU29ydGluZyIsY29sdW1uU3VtbWFyeToi''@;'; put 'put ''Y29sdW1uU3VtbWFyeSIsY29sV2lkdGhzOiJjb2xXaWR0aHMiLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6ImNvbW1lbnRlZENlbGxDbGFzc05hbWUiLGNvbW1lbnRzOiJjb21tZW50cyIsY29udGV4dE1lbnU6ImNvbnRleHRNZW51Iixjb3B5YWJsZToiY29weWFibGUiLGNvcHlQYXN0ZToiY29w''@;'; put 'put ''eVBhc3RlIixjb3JyZWN0Rm9ybWF0OiJjb3JyZWN0Rm9ybWF0IixjdXJyZW50Q29sQ2xhc3NOYW1lOiJjdXJyZW50Q29sQ2xhc3NOYW1lIixjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXJyZW50SGVhZGVyQ2xhc3NOYW1lIixjdXJyZW50Um93Q2xhc3NOYW1lOiJjdXJyZW50Um93Q2xhc3NO''@;'; put 'put ''YW1lIixjdXN0b21Cb3JkZXJzOiJjdXN0b21Cb3JkZXJzIixkYXRhOiJkYXRhIixkYXRhRG90Tm90YXRpb246ImRhdGFEb3ROb3RhdGlvbiIsZGF0YVNjaGVtYToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIs''@;'; put 'put ''ZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIix0YWJOYXZpZ2F0aW9uOiJ0YWJOYXZpZ2F0aW9uIix0aGVtZU5hbWU6InRoZW1lTmFtZSIsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiZGlzYWJsZVZpc3VhbFNlbGVjdGlvbiIsZHJhZ1RvU2Nyb2xsOiJkcmFnVG9TY3JvbGwiLGRyb3Bkb3duTWVu''@;'; put 'put ''dToiZHJvcGRvd25NZW51IixlZGl0b3I6ImVkaXRvciIsZW50ZXJCZWdpbnNFZGl0aW5nOiJlbnRlckJlZ2luc0VkaXRpbmciLGVudGVyTW92ZXM6ImVudGVyTW92ZXMiLGZpbGxIYW5kbGU6ImZpbGxIYW5kbGUiLGZpbHRlcjoiZmlsdGVyIixmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiJmaWx0''@;'; put 'put ''ZXJpbmdDYXNlU2Vuc2l0aXZlIixmaWx0ZXJzOiJmaWx0ZXJzIixmaXhlZENvbHVtbnNMZWZ0OiJmaXhlZENvbHVtbnNMZWZ0IixmaXhlZENvbHVtbnNTdGFydDoiZml4ZWRDb2x1bW5zU3RhcnQiLGZpeGVkUm93c0JvdHRvbToiZml4ZWRSb3dzQm90dG9tIixmaXhlZFJvd3NUb3A6ImZpeGVk''@;'; put 'put ''Um93c1RvcCIsZm9ybXVsYXM6ImZvcm11bGFzIixmcmFnbWVudFNlbGVjdGlvbjoiZnJhZ21lbnRTZWxlY3Rpb24iLGhlYWRlckNsYXNzTmFtZToiaGVhZGVyQ2xhc3NOYW1lIixoZWlnaHQ6ImhlaWdodCIsaGlkZGVuQ29sdW1uczoiaGlkZGVuQ29sdW1ucyIsaGlkZGVuUm93czoiaGlkZGVu''@;'; put 'put ''Um93cyIsaW52YWxpZENlbGxDbGFzc05hbWU6ImludmFsaWRDZWxsQ2xhc3NOYW1lIixpbWVGYXN0RWRpdDoiaW1lRmFzdEVkaXQiLGxhYmVsOiJsYWJlbCIsbGFuZ3VhZ2U6Imxhbmd1YWdlIixsYXlvdXREaXJlY3Rpb246ImxheW91dERpcmVjdGlvbiIsbGljZW5zZUtleToibGljZW5zZUtl''@;'; put 'put ''eSIsbG9jYWxlOiJsb2NhbGUiLG1hbnVhbENvbHVtbkZyZWV6ZToibWFudWFsQ29sdW1uRnJlZXplIixtYW51YWxDb2x1bW5Nb3ZlOiJtYW51YWxDb2x1bW5Nb3ZlIixtYW51YWxDb2x1bW5SZXNpemU6Im1hbnVhbENvbHVtblJlc2l6ZSIsbWFudWFsUm93TW92ZToibWFudWFsUm93TW92ZSIs''@;'; put 'put ''bWFudWFsUm93UmVzaXplOiJtYW51YWxSb3dSZXNpemUiLG1heENvbHM6Im1heENvbHMiLG1heFJvd3M6Im1heFJvd3MiLG1lcmdlQ2VsbHM6Im1lcmdlQ2VsbHMiLG1pbkNvbHM6Im1pbkNvbHMiLG1pblJvd3M6Im1pblJvd3MiLG1pblNwYXJlQ29sczoibWluU3BhcmVDb2xzIixtaW5TcGFy''@;'; put 'put ''ZVJvd3M6Im1pblNwYXJlUm93cyIsbXVsdGlDb2x1bW5Tb3J0aW5nOiJtdWx0aUNvbHVtblNvcnRpbmciLG5hdmlnYWJsZUhlYWRlcnM6Im5hdmlnYWJsZUhlYWRlcnMiLG5lc3RlZEhlYWRlcnM6Im5lc3RlZEhlYWRlcnMiLG5lc3RlZFJvd3M6Im5lc3RlZFJvd3MiLG5vV29yZFdyYXBDbGFz''@;'; put 'put ''c05hbWU6Im5vV29yZFdyYXBDbGFzc05hbWUiLG51bWVyaWNGb3JtYXQ6Im51bWVyaWNGb3JtYXQiLG9ic2VydmVET01WaXNpYmlsaXR5OiJvYnNlcnZlRE9NVmlzaWJpbGl0eSIsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiJvdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLHBlcnNpc3RlbnRTdGF0ZToi''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToicGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lIixwcmV2ZW50T3ZlcmZsb3c6InByZXZlbnRPdmVyZmxvdyIscHJldmVudFdoZWVsOiJwcmV2ZW50V2hlZWwiLHJlYWRPbmx5''@;'; put 'put ''OiJyZWFkT25seSIscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJyZWFkT25seUNlbGxDbGFzc05hbWUiLHJlbmRlckFsbENvbHVtbnM6InJlbmRlckFsbENvbHVtbnMiLHJlbmRlckFsbFJvd3M6InJlbmRlckFsbFJvd3MiLHJlbmRlcmVyOiJyZW5kZXJlciIscm93SGVhZGVyczoicm93SGVhZGVy''@;'; put 'put ''cyIscm93SGVhZGVyV2lkdGg6InJvd0hlYWRlcldpZHRoIixyb3dIZWlnaHRzOiJyb3dIZWlnaHRzIixzZWFyY2g6InNlYXJjaCIsc2VsZWN0aW9uTW9kZToic2VsZWN0aW9uTW9kZSIsc2VsZWN0T3B0aW9uczoic2VsZWN0T3B0aW9ucyIsc2tpcENvbHVtbk9uUGFzdGU6InNraXBDb2x1bW5P''@;'; put 'put ''blBhc3RlIixza2lwUm93T25QYXN0ZToic2tpcFJvd09uUGFzdGUiLHNvcnRCeVJlbGV2YW5jZToic29ydEJ5UmVsZXZhbmNlIixzb3VyY2U6InNvdXJjZSIsc3RhcnRDb2xzOiJzdGFydENvbHMiLHN0YXJ0Um93czoic3RhcnRSb3dzIixzdHJldGNoSDoic3RyZXRjaEgiLHN0cmljdDoic3Ry''@;'; put 'put ''aWN0Iix0YWJsZUNsYXNzTmFtZToidGFibGVDbGFzc05hbWUiLHRhYk1vdmVzOiJ0YWJNb3ZlcyIsdGl0bGU6InRpdGxlIix0cmltRHJvcGRvd246InRyaW1Ecm9wZG93biIsdHJpbVJvd3M6InRyaW1Sb3dzIix0cmltV2hpdGVzcGFjZToidHJpbVdoaXRlc3BhY2UiLHR5cGU6InR5cGUiLHVu''@;'; put 'put ''Y2hlY2tlZFRlbXBsYXRlOiJ1bmNoZWNrZWRUZW1wbGF0ZSIsdW5kbzoidW5kbyIsdmFsaWRhdG9yOiJ2YWxpZGF0b3IiLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldCIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6InZpZXdw''@;'; put 'put ''b3J0Um93UmVuZGVyaW5nT2Zmc2V0Iix2aXNpYmxlUm93czoidmlzaWJsZVJvd3MiLHdpZHRoOiJ3aWR0aCIsd29yZFdyYXA6IndvcmRXcmFwIixhZnRlckFkZENoaWxkOiJhZnRlckFkZENoaWxkIixhZnRlckF1dG9maWxsOiJhZnRlckF1dG9maWxsIixhZnRlckJlZ2luRWRpdGluZzoiYWZ0''@;'; put 'put ''ZXJCZWdpbkVkaXRpbmciLGFmdGVyQ2VsbE1ldGFSZXNldDoiYWZ0ZXJDZWxsTWV0YVJlc2V0IixhZnRlckNoYW5nZToiYWZ0ZXJDaGFuZ2UiLGFmdGVyQ2hhbmdlc09ic2VydmVkOiJhZnRlckNoYW5nZXNPYnNlcnZlZCIsYWZ0ZXJDb2x1bW5Db2xsYXBzZToiYWZ0ZXJDb2x1bW5Db2xsYXBz''@;'; put 'put ''ZSIsYWZ0ZXJDb2x1bW5FeHBhbmQ6ImFmdGVyQ29sdW1uRXhwYW5kIixhZnRlckNvbHVtbkZyZWV6ZToiYWZ0ZXJDb2x1bW5GcmVlemUiLGFmdGVyQ29sdW1uTW92ZToiYWZ0ZXJDb2x1bW5Nb3ZlIixhZnRlckNvbHVtblJlc2l6ZToiYWZ0ZXJDb2x1bW5SZXNpemUiLGFmdGVyQ29sdW1uU2Vx''@;'; put 'put ''dWVuY2VDaGFuZ2U6ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLGFmdGVyQ29sdW1uU29ydDoiYWZ0ZXJDb2x1bW5Tb3J0IixhZnRlckNvbHVtblVuZnJlZXplOiJhZnRlckNvbHVtblVuZnJlZXplIixhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyQ29udGV4dE1lbnVE''@;'; put 'put ''ZWZhdWx0T3B0aW9ucyIsYWZ0ZXJDb250ZXh0TWVudUhpZGU6ImFmdGVyQ29udGV4dE1lbnVIaWRlIixhZnRlckNvbnRleHRNZW51U2hvdzoiYWZ0ZXJDb250ZXh0TWVudVNob3ciLGFmdGVyQ29weToiYWZ0ZXJDb3B5IixhZnRlckNvcHlMaW1pdDoiYWZ0ZXJDb3B5TGltaXQiLGFmdGVyQ3Jl''@;'; put 'put ''YXRlQ29sOiJhZnRlckNyZWF0ZUNvbCIsYWZ0ZXJDcmVhdGVSb3c6ImFmdGVyQ3JlYXRlUm93IixhZnRlckN1dDoiYWZ0ZXJDdXQiLGFmdGVyRGVzZWxlY3Q6ImFmdGVyRGVzZWxlY3QiLGFmdGVyRGVzdHJveToiYWZ0ZXJEZXN0cm95IixhZnRlckRldGFjaENoaWxkOiJhZnRlckRldGFjaENo''@;'; put 'put ''aWxkIixhZnRlckRvY3VtZW50S2V5RG93bjoiYWZ0ZXJEb2N1bWVudEtleURvd24iLGFmdGVyRHJhd1NlbGVjdGlvbjoiYWZ0ZXJEcmF3U2VsZWN0aW9uIixhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zOiJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixhZnRlckRyb3Bk''@;'; put 'put ''b3duTWVudUhpZGU6ImFmdGVyRHJvcGRvd25NZW51SGlkZSIsYWZ0ZXJEcm9wZG93bk1lbnVTaG93OiJhZnRlckRyb3Bkb3duTWVudVNob3ciLGFmdGVyRmlsdGVyOiJhZnRlckZpbHRlciIsYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZToiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYWZ0''@;'; put 'put ''ZXJHZXRDZWxsTWV0YToiYWZ0ZXJHZXRDZWxsTWV0YSIsYWZ0ZXJHZXRDb2xIZWFkZXI6ImFmdGVyR2V0Q29sSGVhZGVyIixhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGFmdGVyR2V0Um93SGVhZGVyOiJhZnRlckdldFJvd0hl''@;'; put 'put ''YWRlciIsYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZnRlckhpZGVDb2x1bW5zOiJhZnRlckhpZGVDb2x1bW5zIixhZnRlckhpZGVSb3dzOiJhZnRlckhpZGVSb3dzIixhZnRlckluaXQ6ImFmdGVySW5pdCIsYWZ0ZXJMYW5ndWFnZUNo''@;'; put 'put ''YW5nZToiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsYWZ0ZXJMaXN0ZW46ImFmdGVyTGlzdGVuIixhZnRlckxvYWREYXRhOiJhZnRlckxvYWREYXRhIixhZnRlck1lcmdlQ2VsbHM6ImFmdGVyTWVyZ2VDZWxscyIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5k''@;'; put 'put ''IixhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzOiJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixhZnRlck1vbWVudHVtU2Nyb2xsOiJhZnRlck1vbWVudHVtU2Nyb2xsIixhZnRlck5hbWVkRXhw''@;'; put 'put ''cmVzc2lvbkFkZGVkOiJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudToiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsYWZ0ZXJPbkNlbGxDb3JuZXJE''@;'; put 'put ''YmxDbGljazoiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd246ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VPdXQ6ImFmdGVyT25D''@;'; put 'put ''ZWxsTW91c2VPdXQiLGFmdGVyT25DZWxsTW91c2VPdmVyOiJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsYWZ0ZXJPbkNlbGxNb3VzZVVwOiJhZnRlck9uQ2VsbE1vdXNlVXAiLGFmdGVyUGFzdGU6ImFmdGVyUGFzdGUiLGFmdGVyUGx1Z2luc0luaXRpYWxpemVkOiJhZnRlclBsdWdpbnNJbml0aWFs''@;'; put 'put ''aXplZCIsYWZ0ZXJSZWRvOiJhZnRlclJlZG8iLGFmdGVyUmVkb1N0YWNrQ2hhbmdlOiJhZnRlclJlZG9TdGFja0NoYW5nZSIsYWZ0ZXJSZWZyZXNoRGltZW5zaW9uczoiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsYWZ0ZXJSZW1vdmVDZWxsTWV0YToiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsYWZ0''@;'; put 'put ''ZXJSZW1vdmVDb2w6ImFmdGVyUmVtb3ZlQ29sIixhZnRlclJlbW92ZVJvdzoiYWZ0ZXJSZW1vdmVSb3ciLGFmdGVyUmVuZGVyOiJhZnRlclJlbmRlciIsYWZ0ZXJSZW5kZXJlcjoiYWZ0ZXJSZW5kZXJlciIsYWZ0ZXJSb3dNb3ZlOiJhZnRlclJvd01vdmUiLGFmdGVyUm93UmVzaXplOiJhZnRl''@;'; put 'put ''clJvd1Jlc2l6ZSIsYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZToiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk6ImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IixhZnRlclNjcm9sbFZlcnRpY2FsbHk6ImFmdGVyU2Nyb2xsVmVydGljYWxseSIsYWZ0ZXJTY3Jv''@;'; put 'put ''bGw6ImFmdGVyU2Nyb2xsIixhZnRlclNlbGVjdENvbHVtbnM6ImFmdGVyU2VsZWN0Q29sdW1ucyIsYWZ0ZXJTZWxlY3Rpb246ImFmdGVyU2VsZWN0aW9uIixhZnRlclNlbGVjdGlvbkJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGFmdGVyU2VsZWN0aW9uRW5kOiJhZnRlclNlbGVjdGlv''@;'; put 'put ''bkVuZCIsYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A6ImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIixhZnRlclNlbGVjdGlvbkZvY3VzU2V0OiJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixhZnRlclNlbGVjdFJvd3M6ImFmdGVyU2VsZWN0Um93cyIsYWZ0ZXJTZXRDZWxsTWV0YToiYWZ0ZXJTZXRD''@;'; put 'put ''ZWxsTWV0YSIsYWZ0ZXJTZXREYXRhQXRDZWxsOiJhZnRlclNldERhdGFBdENlbGwiLGFmdGVyU2V0RGF0YUF0Um93UHJvcDoiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixhZnRlclNldFNvdXJjZURhdGFBdENlbGw6ImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsYWZ0ZXJTZXRUaGVtZToiYWZ0''@;'; put 'put ''ZXJTZXRUaGVtZSIsYWZ0ZXJTaGVldEFkZGVkOiJhZnRlclNoZWV0QWRkZWQiLGFmdGVyU2hlZXRSZW5hbWVkOiJhZnRlclNoZWV0UmVuYW1lZCIsYWZ0ZXJTaGVldFJlbW92ZWQ6ImFmdGVyU2hlZXRSZW1vdmVkIixhZnRlclRyaW1Sb3c6ImFmdGVyVHJpbVJvdyIsYWZ0ZXJVbmRvOiJhZnRl''@;'; put 'put ''clVuZG8iLGFmdGVyVW5kb1N0YWNrQ2hhbmdlOiJhZnRlclVuZG9TdGFja0NoYW5nZSIsYWZ0ZXJVbmhpZGVDb2x1bW5zOiJhZnRlclVuaGlkZUNvbHVtbnMiLGFmdGVyVW5oaWRlUm93czoiYWZ0ZXJVbmhpZGVSb3dzIixhZnRlclVubGlzdGVuOiJhZnRlclVubGlzdGVuIixhZnRlclVubWVy''@;'; put 'put ''Z2VDZWxsczoiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGFmdGVyVW50cmltUm93OiJhZnRlclVudHJpbVJvdyIsYWZ0ZXJVcGRhdGVEYXRhOiJhZnRlclVwZGF0ZURhdGEiLGFmdGVyVXBkYXRlU2V0dGluZ3M6ImFmdGVyVXBkYXRlU2V0dGluZ3MiLGFmdGVyVmFsaWRhdGU6ImFmdGVyVmFsaWRhdGUi''@;'; put 'put ''LGFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld1JlbmRl''@;'; put 'put ''cjoiYWZ0ZXJWaWV3UmVuZGVyIixiZWZvcmVBZGRDaGlsZDoiYmVmb3JlQWRkQ2hpbGQiLGJlZm9yZUF1dG9maWxsOiJiZWZvcmVBdXRvZmlsbCIsYmVmb3JlQmVnaW5FZGl0aW5nOiJiZWZvcmVCZWdpbkVkaXRpbmciLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQi''@;'; put 'put ''LGJlZm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJlZm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1u''@;'; put 'put ''RnJlZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9yZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5XcmFwOiJiZWZvcmVD''@;'; put 'put ''b2x1bW5XcmFwIixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbXBvc2l0aW9uU3RhcnQ6ImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNv''@;'; put 'put ''bnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9yZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hD''@;'; put 'put ''aGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1lbnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93''@;'; put 'put ''IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVh''@;'; put 'put ''ZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29udGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIs''@;'; put 'put ''YmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdlQ2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51''@;'; put 'put ''OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VPdmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJl''@;'; put 'put ''Zm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZv''@;'; put 'put ''cmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNvbDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1v''@;'; put 'put ''dmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZvcmVSb3dSZXNpemUiLGJlZm9yZVJvd1dyYXA6ImJl''@;'; put 'put ''Zm9yZVJvd1dyYXAiLGJlZm9yZVNlbGVjdENvbHVtbnM6ImJlZm9yZVNlbGVjdENvbHVtbnMiLGJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0OiJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0OiJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGJl''@;'; put 'put ''Zm9yZVNlbGVjdFJvd3M6ImJlZm9yZVNlbGVjdFJvd3MiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5n''@;'; put 'put ''ZVN0YXJ0T25seToiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJl''@;'; put 'put ''Zm9yZVVuZG86ImJlZm9yZVVuZG8iLGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6''@;'; put 'put ''ImJlZm9yZVVubWVyZ2VDZWxscyIsYmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZv''@;'; put 'put ''cmVWaWV3cG9ydFNjcm9sbDoiYmVmb3JlVmlld3BvcnRTY3JvbGwiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRp''@;'; put 'put ''Y2FsbHkiLGJlZm9yZVZpZXdSZW5kZXI6ImJlZm9yZVZpZXdSZW5kZXIiLGNvbnN0cnVjdDoiY29uc3RydWN0Iixpbml0OiJpbml0Iixtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ6Im1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsbW9kaWZ5QXV0b2ZpbGxSYW5nZToibW9kaWZ5QXV0b2ZpbGxS''@;'; put 'put ''YW5nZSIsbW9kaWZ5Q29sSGVhZGVyOiJtb2RpZnlDb2xIZWFkZXIiLG1vZGlmeUNvbHVtbkhlYWRlckhlaWdodDoibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iixtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZToibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLG1vZGlmeUNvbFdpZHRoOiJtb2RpZnlD''@;'; put 'put ''b2xXaWR0aCIsbW9kaWZ5Q29weWFibGVSYW5nZToibW9kaWZ5Q29weWFibGVSYW5nZSIsbW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWU6Im1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixtb2RpZnlGb2N1c2VkRWxlbWVudDoibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLG1vZGlmeURh''@;'; put 'put ''dGE6Im1vZGlmeURhdGEiLG1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uOiJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsbW9kaWZ5R2V0Q2VsbENvb3JkczoibW9kaWZ5R2V0Q2VsbENvb3JkcyIsbW9kaWZ5R2V0Q29vcmRzRWxlbWVudDoibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsbW9k''@;'; put 'put ''aWZ5Um93RGF0YToibW9kaWZ5Um93RGF0YSIsbW9kaWZ5Um93SGVhZGVyOiJtb2RpZnlSb3dIZWFkZXIiLG1vZGlmeVJvd0hlYWRlcldpZHRoOiJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsbW9kaWZ5Um93SGVpZ2h0OiJtb2RpZnlSb3dIZWlnaHQiLG1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5h''@;'; put 'put ''bWU6Im1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLG1vZGlmeVNvdXJjZURhdGE6Im1vZGlmeVNvdXJjZURhdGEiLG1vZGlmeVRyYW5zZm9ybUVuZDoibW9kaWZ5VHJhbnNmb3JtRW5kIixtb2RpZnlUcmFuc2Zvcm1Gb2N1czoibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLG1vZGlmeVRyYW5z''@;'; put 'put ''Zm9ybVN0YXJ0OiJtb2RpZnlUcmFuc2Zvcm1TdGFydCIscGVyc2lzdGVudFN0YXRlTG9hZDoicGVyc2lzdGVudFN0YXRlTG9hZCIscGVyc2lzdGVudFN0YXRlUmVzZXQ6InBlcnNpc3RlbnRTdGF0ZVJlc2V0IixwZXJzaXN0ZW50U3RhdGVTYXZlOiJwZXJzaXN0ZW50U3RhdGVTYXZlIn0sZmVh''@;'; put 'put ''dHVyZXM6W2RhKFtZbSxPcGVdKSx3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImNvbnRhaW5lciIsIiJdLFszLCJpZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwiZGl2IiwxLDApLDImZCYmTWUoImlkIixoLmhvdElkKX0sZW5jYXBzdWxhdGlvbjoyfSl9cmV0dXJu''@;'; put 'put ''IGN9KSgpLG85PSgoKT0+e2NsYXNzIGN7c3RhdGljIHZlcnNpb249IjE1LjMuMCI7c3RhdGljIGZvclJvb3QoKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W1ltXX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPWtp''@;'; put 'put ''KHt0eXBlOmN9KTtzdGF0aWMgXHUwMjc1aW5qPUFyKHt9KX1yZXR1cm4gY30pKCk7Y29uc3QgUHBlPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIFJYIGV4dGVuZHMgYTl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCk7''@;'; put 'put ''Y29uc3QgbD10aGlzLmh0Q29udGFpbmVyLnN0eWxlO3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKSxsLndpZHRoPSIiLGwuaGVpZ2h0PSIiLGwub3ZlcmZsb3c9IiIpLCJub25lIj09PWwuZGlzcGxheSYmKGwuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhp''@;'; put 'put ''cy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0T3B0aW9ucyksdGhpcy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2Vs''@;'; put 'put ''bCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksd0UodGhpcy5URVhUQVJFQSwwLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0SGVpZ2h0KCl9KSx0aGlz''@;'; put 'put ''LnJlZnJlc2hEaW1lbnNpb25zKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZix2''@;'; put 'put ''KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMsRD17c3RhcnRSb3dzOjAsc3RhcnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZTohMSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seToh''@;'; put 'put ''MCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFyaWFUYWdzOiExLHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYWZ0ZXJPbkNlbGxNb3VzZURvd24oWixyZSl7Y29uc3QgY2U9dGhpcy5nZXRTb3VyY2VEYXRhKHJlLnJvdyxyZS5j''@;'; put 'put ''b2wpO3ZvaWQgMCE9PWNlJiZNLnNldFZhbHVlKGNlKSxNLmhvdC5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJkV1KEQsdi5oYW5kc29u''@;'; put 'put ''dGFibGUpLHRoaXMuaHRPcHRpb25zPUR9YmVnaW5FZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7''@;'; put 'put ''Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hF''@;'; put 'put ''ZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRWYWx1ZSgpO3ZvaWQg''@;'; put 'put ''MCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZUhlaWdodCgpKzF9Z2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlV2lkdGgoKX1hc3Np''@;'; put 'put ''Z25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt2YXIgbDtudWxsPT09KGw9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9Pnt2YXIgZDthfHxudWxsPT09KGQ9''@;'; put 'put ''dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWR8fGQudXNlVGhlbWUobCl9KX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLHYpPT57''@;'; put 'put ''Y29uc3QgTT10aGlzLmh0RWRpdG9yO2lmKHZvaWQgMCE9PWYmJihmPDB8fE0uZmxpcHBlZCYmZj5NLmNvdW50Um93cygpLTE/TS5kZXNlbGVjdENlbGwoKTpNLnNlbGVjdENlbGwoZiwwKSxNLmdldERhdGEoKS5sZW5ndGgpKXJldHVybiB2LnByZXZlbnREZWZhdWx0KCksQjIodiksdGhpcy5o''@;'; put 'put ''b3QubGlzdGVuKCksdGhpcy5URVhUQVJFQS5mb2N1cygpLCExfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7cmV0dXJuIXYuZ2V0U2VsZWN0ZWRMYXN0KCkmJnYuZmxpcHBlZD9NPXYuY291bnRS''@;'; put 'put ''b3dzKCktMTp2LmdldFNlbGVjdGVkTGFzdCgpJiYodi5mbGlwcGVkPyhEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1heCgwLEQtMSkpOihEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1ELTEpKSxoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24i''@;'; put 'put ''XV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvcjtsZXQgTSxEO2lmKHYuZ2V0U2VsZWN0ZWRMYXN0KCl8fHYuZmxpcHBlZCl7aWYodi5nZXRTZWxlY3RlZExhc3QoKSlpZih2LmZsaXBwZWQpTT12LmdldFNlbGVjdGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighdi5mbGlwcGVkKXtj''@;'; put 'put ''b25zdCBaPXYuY291bnRSb3dzKCktMTtEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1pbihaLEQrMSl9fWVsc2UgTT0wO3JldHVybiBoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfV0se2dyb3VwOlBwZSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJl''@;'; put 'put ''Z2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoUHBlKX19ZnVuY3Rpb24gRnBlKGMsbCxhKXtIcGUoYyxsKSxsLnNldChjLGEp''@;'; put 'put ''fWZ1bmN0aW9uIEhwZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24galAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9hdChjKXt2YXIg''@;'; put 'put ''bD1mdW5jdGlvbiBzYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIExYKGMsbCl7cmV0dXJuIGMuZ2V0KE9YKGMsbCkpfWZ1bmN0aW9uIE9YKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUFg9bmV3IFdlYWtNYXAsTnBlPW5ldyBXZWFrTWFwLEZYPW5ldyBXZWFrU2V0O2NsYXNzIEhY''@;'; put 'put ''IGV4dGVuZHMgUlh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGFhdChjLGwpe0hwZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZYKSxqUCh0aGlzLCJxdWVyeSIsbnVsbCksalAodGhpcywic3RyaXBwZWRDaG9pY2VzIixbXSksalAodGhpcywicmF3Q2hvaWNlcyIs''@;'; put 'put ''W10pLEZwZSh0aGlzLFBYLHRoaXMuaG90Lmd1aWQuc2xpY2UoMCw5KSksRnBlKHRoaXMsTnBlLE1FKCgpPT57dGhpcy5mb2N1cygpfSwxMDApKSxqUCh0aGlzLCJzb3J0QnlSZWxldmFuY2UiLGZ1bmN0aW9uKGwsYSxkKXtjb25zdCBoPVtdLGY9W10sdj1sLmxlbmd0aDtsZXQgRCxaLHJlLGNl''@;'; put 'put ''LE09YS5sZW5ndGg7aWYoMD09PXYpe2ZvcihyZT0wO3JlPE07cmUrKylmLnB1c2gocmUpO3JldHVybiBmfWZvcihyZT0wO3JlPE07cmUrKyl7aWYoWj1nJChsYyhhW3JlXSkpLGQpY2U9Wi5pbmRleE9mKGwpO2Vsc2V7Y29uc3QgYmU9dGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGU7Y2U9Wi50''@;'; put 'put ''b0xvY2FsZUxvd2VyQ2FzZShiZSkuaW5kZXhPZihsLnRvTG9jYWxlTG93ZXJDYXNlKGJlKSl9LTEhPT1jZSYmKEQ9Wi5sZW5ndGgtY2UtdixoLnB1c2goe2Jhc2VJbmRleDpyZSxpbmRleDpjZSxjaGFyc0xlZnQ6RCx2YWx1ZTpafSkpfWZvcihoLnNvcnQoKGJlLEVlKT0+e2lmKC0xPT09RWUu''@;'; put 'put ''aW5kZXgpcmV0dXJuLTE7aWYoLTE9PT1iZS5pbmRleClyZXR1cm4gMTtpZihiZS5pbmRleDxFZS5pbmRleClyZXR1cm4tMTtpZihFZS5pbmRleDxiZS5pbmRleClyZXR1cm4gMTtpZihiZS5pbmRleD09PUVlLmluZGV4KXtpZihiZS5jaGFyc0xlZnQ8RWUuY2hhcnNMZWZ0KXJldHVybi0xO2lm''@;'; put 'put ''KGJlLmNoYXJzTGVmdD5FZS5jaGFyc0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSxyZT0wLE09aC5sZW5ndGg7cmU8TTtyZSsrKWYucHVzaChoW3JlXS5iYXNlSW5kZXgpO3JldHVybiBmfSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRvY29tcGxldGUifWdldFZhbHVlKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLnJhd0Nob2ljZXMuZmluZChhPT50aGlzLnN0cmlwVmFsdWVJZk5lZWRlZChhKT09PXRoaXMuVEVYVEFSRUEudmFsdWUpO3JldHVybiBQYShsKT9sOnRoaXMuVEVYVEFSRUEudmFsdWV9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLFRpKHRoaXMu''@;'; put 'put ''aHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLFRpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2''@;'; put 'put ''byh0aGlzLlRFWFRBUkVBLFtbInR5cGUiLCJ0ZXh0Il0sWyJyb2xlIiwiY29tYm9ib3giXSxFMmUoImxpc3Rib3giKSxbImFyaWEtYXV0b2NvbXBsZXRlIiwibGlzdCJdXSl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksdGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5hcmlhVGFncyYmdm8odGhpcy5URVhUQVJFQSxbTjIoImZhbHNlIiksclhlKGAke0xYKFBYLHRoaXMpfS1saXN0Ym94LSR7bH0tJHthfWApXSl9b3Blbigpe3N1cGVyLm9wZW4oKTtjb25zdCBsPXZvaWQgMD09PXRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3dufHx0aGlzLmNl''@;'; put 'put ''bGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bixhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MsZD1BcnJheS5pc0FycmF5KHRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlKT90aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTpudWxsLGg9ZD8ubGVuZ3RoLHtyb3c6Zixjb2w6dn09dGhp''@;'; put 'put ''czt0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzKCksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixNPT50aGlzLm9uQmVmb3JlS2V5RG93bihNKSksdGhpcy5odEVkaXRvci5hZGRIb29rKCJhZnRlclNjcm9sbCIsTFgoTnBlLHRoaXMpKSx0aGlzLmh0RWRpdG9yLnVw''@;'; put 'put ''ZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6bD9bc3UodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLGF1dG9Db2x1bW5TaXplOiEwLHJlbmRlcmVyOihNLEQsWixyZSxjZSxiZSxFZSk9PntBZyhNLEQsWixyZSxjZSxiZSxFZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpCZSxhbGxvd0h0''@;'; put 'put ''bWw6cWUsbG9jYWxlOnJ0fT10aGlzLmNlbGxQcm9wZXJ0aWVzLHB0PXRoaXMucXVlcnk7bGV0IEp0LHZuLGR0PWxjKGJlKTtkdCYmIXFlJiYoSnQ9ITA9PT1CZT9kdC5pbmRleE9mKHB0KTpkdC50b0xvY2FsZUxvd2VyQ2FzZShydCkuaW5kZXhPZihwdC50b0xvY2FsZUxvd2VyQ2FzZShydCkp''@;'; put 'put ''LC0xIT09SnQmJih2bj1kdC5zdWJzdHIoSnQscHQubGVuZ3RoKSxkdD1kdC5yZXBsYWNlKHZuLGA8c3Ryb25nPiR7dm59PC9zdHJvbmc+YCkpKSxhJiZ2byhELFtbInJvbGUiLCJvcHRpb24iXSwuLi5kP1tzWGUoaCldOltdLC4uLmQ/W2xYZShkLmluZGV4T2YoYmUpKzEpXTpbXSxbImlkIixg''@;'; put 'put ''JHt0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LmlkfV8ke1p9LSR7cmV9YF1dKSxELmlubmVySFRNTD1kdH0sYWZ0ZXJTZWxlY3Rpb25FbmQ6KE0sRCk9PntpZihhKXtjb25zdCBaPWNlPT57dm8oY2UsW1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0pLHZvKHRoaXMuVEVYVEFSRUEsLi4uKGM9''@;'; put 'put ''PlsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixjXSkoY2UuaWQpKX0scmU9dGhpcy5odEVkaXRvci5nZXRDZWxsKE0sRCwhMCk7bnVsbCE9PXJlP1oocmUpOnRoaXMuaHRFZGl0b3IuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9Pntjb25zdCBjZT10aGlzLmh0RWRpdG9y''@;'; put 'put ''LmdldENlbGwoTSxELCEwKTtaKGNlKX0pfX19KSxhJiYodm8odGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUsInJvbGUiLCJwcmVzZW50YXRpb24iKSx2byh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il0sYVhlKCJwb2xp''@;'; put 'put ''dGUiKSxvWGUoInRleHQiKSxbImlkIixgJHtMWChQWCx0aGlzKX0tbGlzdGJveC0ke2Z9LSR7dn1gXV0pLHZvKHRoaXMuVEVYVEFSRUEsLi4uTjIoInRydWUiKSkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0p''@;'; put 'put ''fWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlzLlRFWFRBUkVBLFtOMigiZmFsc2UiKV0pfWRpc2NhcmRFZGl0b3IobCl7c3VwZXIuZGlzY2FyZEVkaXRvcihs''@;'; put 'put ''KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfXF1ZXJ5Q2hvaWNlcyhsKXtjb25zdCBhPXRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlO3RoaXMucXVlcnk9bCwiZnVuY3Rpb24iPT10eXBlb2YgYT9hLmNhbGwodGhpcy5jZWxsUHJvcGVydGllcyxsLGQ9Pnt0aGlzLnJhd0Nob2ljZXM9ZCx0aGlz''@;'; put 'put ''LnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChkKSl9KTpBcnJheS5pc0FycmF5KGEpPyh0aGlzLnJhd0Nob2ljZXM9YSx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChhKSkpOnRoaXMudXBkYXRlQ2hvaWNlc0xpc3QoW10p''@;'; put 'put ''fXVwZGF0ZUNob2ljZXNMaXN0KGwpe2NvbnN0IGE9UyQodGhpcy5URVhUQVJFQSksZD16MmUodGhpcy5URVhUQVJFQSksaD10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvcnRCeVJlbGV2YW5jZSxmPXRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyO2xldCB2PW51bGwsTT1udWxsLEQ9bDtoJiYodj10''@;'; put 'put ''aGlzLnNvcnRCeVJlbGV2YW5jZSh0aGlzLnN0cmlwVmFsdWVJZk5lZWRlZCh0aGlzLmdldFZhbHVlKCkpLEQsdGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKSk7Y29uc3QgWj1BcnJheS5pc0FycmF5KHYpP3YubGVuZ3RoOjA7aWYoITE9PT1mKVomJihNPXZbMF0p''@;'; put 'put ''O2Vsc2V7Y29uc3QgcmU9W107Zm9yKGxldCBjZT0wLGJlPUQubGVuZ3RoO2NlPGJlJiYhKGgmJlo8PWNlKTtjZSsrKXJlLnB1c2goWj9EW3ZbY2VdXTpEW2NlXSk7TT0wLEQ9cmV9dGhpcy5zdHJpcHBlZENob2ljZXM9RCx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9''@;'; put 'put ''MD09PUQubGVuZ3RoPyJub25lIjoiIix0aGlzLmh0RWRpdG9yLmxvYWREYXRhKGhFKFtEXSkpLEQubGVuZ3RoPjAmJih0aGlzLnVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpLHRoaXMuZmxpcERyb3Bkb3duSWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlz''@;'; put 'put ''LmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShNKSksdGhpcy5ob3QubGlzdGVuKCksd0UodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpkKX1mbGlwRHJvcGRvd25JZk5lZWRlZCgpe2NvbnN0IGw9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGE9bC5oZWlnaHQ7bGV0IGQ9bC50b3A7''@;'; put 'put ''aWYodGhpcy5ob3Qudmlldy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgTT10aGlzLmhvdC52aWV3LmdldFRhYmxlT2Zmc2V0KCkudG9wLXRoaXMuaG90LnJvb3RXaW5kb3cuc2Nyb2xsWTtkPU1hdGgubWF4KGQrTSwwKX1jb25zdCBoPXRoaXMuZ2V0SGVpZ2h0KCks''@;'; put 'put ''Zj10aGlzLmhvdC52aWV3LmdldFdvcmtzcGFjZUhlaWdodCgpLWQtYSx2PWg+ZiYmZD5mK2E7cmV0dXJuIHY/dGhpcy5mbGlwRHJvcGRvd24oaCk6dGhpcy51bmZsaXBEcm9wZG93bigpLHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKHY/ZDpmLGgpLHZ9bGltaXREcm9wZG93bklmTmVlZGVk''@;'; put 'put ''KGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsdj1udWxsO2Rve2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCksZCs9ZixoKz0xfXdoaWxlKGQ8bCk7dj1kLWYsdGhpcy5odEVkaXRvci5mbGlwcGVkJiYo''@;'; put 'put ''dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3A9cGFyc2VJbnQodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3AsMTApK2EtdisicHgiKSx0aGlzLnNldERyb3Bkb3duSGVpZ2h0KGQtZil9fWZsaXBEcm9wZG93bihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3Iucm9v''@;'; put 'put ''dEVsZW1lbnQuc3R5bGU7YS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEudG9wPS1sKyJweCIsdGhpcy5odEVkaXRvci5mbGlwcGVkPSEwfXVuZmxpcERyb3Bkb3duKCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsLnRvcD0iIix0''@;'; put 'put ''aGlzLmh0RWRpdG9yLmZsaXBwZWQ9dm9pZCAwfXVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQoKX0pLE9YKEZYLHRoaXMsVnBlKS5jYWxsKHRoaXMpLHRoaXMu''@;'; put 'put ''aHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25IZWlnaHQobCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0Omx9KSxPWChGWCx0aGlzLFZwZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9y''@;'; put 'put ''LnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5o''@;'; put 'put ''dEVkaXRvci5kZXNlbGVjdENlbGwoKX1nZXRIZWlnaHQoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSksYT1wYXJzZUludChsLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChs''@;'; put 'put ''LmJvcmRlckJvdHRvbVdpZHRoLDEwKSxkPU1hdGgubWluKHRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3MsdGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmR9LChmLHYpPT52KS5yZWR1Y2UoKGYsdik9PmYrKHRoaXMuaHRFZGl0b3Iu''@;'; put 'put ''Z2V0Um93SGVpZ2h0KHYpfHx0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKSwwKSthKzF9Z2V0V2lkdGgoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSks''@;'; put 'put ''YT1wYXJzZUludChsLmJvcmRlcklubGluZVN0YXJ0V2lkdGgsMTApK3BhcnNlSW50KGwuYm9yZGVySW5saW5lRW5kV2lkdGgsMTApO3JldHVybiB0aGlzLmh0RWRpdG9yLmdldENvbFdpZHRoKDApK2F9c3RyaXBWYWx1ZUlmTmVlZGVkKGwpe3JldHVybiB0aGlzLnN0cmlwVmFsdWVzSWZOZWVk''@;'; put 'put ''ZWQoW2xdKVswXX1zdHJpcFZhbHVlc0lmTmVlZGVkKGwpe2NvbnN0e2FsbG93SHRtbDphfT10aGlzLmNlbGxQcm9wZXJ0aWVzLGQ9eXMobCxmPT5sYyhmKSk7cmV0dXJuIHlzKGQsZj0+YT9mOmckKGYpKX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9y''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZF9yb3c9YT9hLmZyb20ucm93Oi0xO2xldCBoPSExO3JldHVybiBsPT09WWEuQVJST1dfRE9XTiYmZF9yb3c+MCYmZF9yb3c8dGhpcy5odEVkaXRvci5jb3VudFJvd3MoKS0xJiYoaD0hMCksbD09PVlhLkFSUk9XX1VQJiZkX3Jvdz4tMSYmKGg9ITAp''@;'; put 'put ''LGh9b25CZWZvcmVLZXlEb3duKGwpe2lmKG5mZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1ZYS5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PVlhLkRFTEVURXx8bC5rZXlDb2RlPT09WWEuSU5TRVJUKXtsZXQgYT0xMDtpZihsLmtleUNvZGU9PT1ZYS5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkp''@;'; put 'put ''KXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChhKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSxhKX19fWZ1bmN0aW9uIFZwZSgpe3RoaXMuaHRFZGl0b3Iudmlldy5oYXNWZXJ0''@;'; put 'put ''aWNhbFNjcm9sbCgpJiZ0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCkrZjAodGhpcy5ob3Qucm9vdERvY3VtZW50KX0pfWNsYXNzIEJwZSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iY2hlY2tib3gifWJlZ2luRWRp''@;'; put 'put ''dGluZyhsLGEpe2lmKGEmJiJtb3VzZXVwIj09PWEudHlwZSYmIlREIj09PWEudGFyZ2V0Lm5vZGVOYW1lKXtjb25zdCBkPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXScpO3BvKGQsImh0QmFkVmFsdWUiKXx8ZC5jbGljaygpfX1maW5pc2hFZGl0aW5nKCl7''@;'; put 'put ''fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRWYWx1ZSgpe31mb2N1cygpe319Y29uc3QgR209KCk9PndpbmRvdywkMj0oKT0+d2luZG93LmRvY3VtZW50LE5YPShjLGwpPT53aW5kb3cuc2V0VGltZW91dChjLGwpLEhwPWZ1bmN0aW9uKGMsbCxhLGQpe2MuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihsLGEsISFkKX0sa2c9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhIWQpfSxSaD1mdW5jdGlvbihjLGwpe3JldHVybi0xIT09KCIgIitjLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoIiAiK2wrIiAiKX0sVlg9ZnVuY3Rpb24oYyxsKXtSaChj''@;'; put 'put ''LGwpfHwoYy5jbGFzc05hbWU9IiI9PT1jLmNsYXNzTmFtZT9sOmMuY2xhc3NOYW1lKyIgIitsKX0sQlg9ZnVuY3Rpb24oYyxsKXtjLmNsYXNzTmFtZT1mdW5jdGlvbihjKXtyZXR1cm4gYy50cmltP2MudHJpbSgpOmMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSgoIiAiK2MuY2xhc3NOYW1l''@;'; put 'put ''KyIgIikucmVwbGFjZSgiICIrbCsiICIsIiAiKSl9LGpYPWZ1bmN0aW9uKGMpe3JldHVybi9BcnJheS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpfSxMaD1mdW5jdGlvbihjKXtyZXR1cm4vRGF0ZS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo''@;'; put 'put ''YykpJiYhaXNOYU4oYy5nZXRUaW1lKCkpfSxkYXQ9ZnVuY3Rpb24oYyl7bGV0IGw9Yy5nZXREYXkoKTtyZXR1cm4gMD09PWx8fDY9PT1sfSxoYXQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGMlND09MCYmYyUxMDAhPTB8fGMlNDAwPT0wfSxqcGU9ZnVuY3Rpb24oYyxsKXtyZXR1cm5bMzEsaGF0KGMp''@;'; put 'put ''PzI5OjI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVtsXX0selA9ZnVuY3Rpb24oYyl7TGgoYykmJmMuc2V0SG91cnMoMCwwLDAsMCl9LFVQPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIGMuZ2V0VGltZSgpPT09bC5nZXRUaW1lKCl9LFpQPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZCxoO2Zv''@;'; put 'put ''cihkIGluIGwpaD12b2lkIDAhPT1jW2RdLGgmJiJvYmplY3QiPT10eXBlb2YgbFtkXSYmbnVsbCE9PWxbZF0mJnZvaWQgMD09PWxbZF0ubm9kZU5hbWU/TGgobFtkXSk/YSYmKGNbZF09bmV3IERhdGUobFtkXS5nZXRUaW1lKCkpKTpqWChsW2RdKT9hJiYoY1tkXT1sW2RdLnNsaWNlKDApKTpj''@;'; put 'put ''W2RdPVpQKHt9LGxbZF0sYSk6KGF8fCFoKSYmKGNbZF09bFtkXSk7cmV0dXJuIGN9LHpwZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9JDIoKS5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpO2QuaW5pdEV2ZW50KGwsITAsITEpLGQ9WlAoZCxhKSxjLmRpc3BhdGNoRXZlbnQoZCl9LFVwZT1mdW5j''@;'; put 'put ''dGlvbihjKXtyZXR1cm4gYy5tb250aDwwJiYoYy55ZWFyLT1NYXRoLmNlaWwoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgrPTEyKSxjLm1vbnRoPjExJiYoYy55ZWFyKz1NYXRoLmZsb29yKE1hdGguYWJzKGMubW9udGgpLzEyKSxjLm1vbnRoLT0xMiksY30sTnA9e2ZpZWxkOm51bGws''@;'; put 'put ''Ym91bmQ6dm9pZCAwLGFyaWFMYWJlbDoiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIHBpY2sgYSBkYXRlIixwb3NpdGlvbjoiYm90dG9tIGxlZnQiLHJlcG9zaXRpb246ITAsZm9ybWF0OiJZWVlZLU1NLUREIix0b1N0cmluZzpudWxsLHBhcnNlOm51bGwsZGVmYXVsdERhdGU6bnVsbCxzZXREZWZh''@;'; put 'put ''dWx0RGF0ZTohMSxmaXJzdERheTowLGZpcnN0V2Vla09mWWVhck1pbkRheXM6NCxmb3JtYXRTdHJpY3Q6ITEsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCx5ZWFyUmFuZ2U6MTAsc2hvd1dlZWtOdW1iZXI6ITEscGlja1dob2xlV2VlazohMSxtaW5ZZWFyOjAsbWF4WWVhcjo5OTk5LG1pbk1v''@;'; put 'put ''bnRoOnZvaWQgMCxtYXhNb250aDp2b2lkIDAsc3RhcnRSYW5nZTpudWxsLGVuZFJhbmdlOm51bGwsaXNSVEw6ITEseWVhclN1ZmZpeDoiIixzaG93TW9udGhBZnRlclllYXI6ITEsc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5k''@;'; put 'put ''UHJldmlvdXNNb250aHM6ITEsbnVtYmVyT2ZNb250aHM6MSxtYWluQ2FsZW5kYXI6ImxlZnQiLGNvbnRhaW5lcjp2b2lkIDAsYmx1ckZpZWxkT25TZWxlY3Q6ITAsaTE4bjp7cHJldmlvdXNNb250aDoiUHJldmlvdXMgTW9udGgiLG5leHRNb250aDoiTmV4dCBNb250aCIsbW9udGhzOlsiSmFu''@;'; put 'put ''dWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSx3ZWVrZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2Rh''@;'; put 'put ''eSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sd2Vla2RheXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdfSx0aGVtZTpudWxsLGV2ZW50czpbXSxvblNlbGVjdDpudWxsLG9uT3BlbjpudWxsLG9uQ2xvc2U6bnVsbCxvbkRyYXc6bnVsbCxrZXlib2FyZElu''@;'; put 'put ''cHV0OiEwfSxacGU9ZnVuY3Rpb24oYyxsLGEpe2ZvcihsKz1jLmZpcnN0RGF5O2w+PTc7KWwtPTc7cmV0dXJuIGE/Yy5pMThuLndlZWtkYXlzU2hvcnRbbF06Yy5pMThuLndlZWtkYXlzW2xdfSxmYXQ9ZnVuY3Rpb24oYyl7bGV0IGw9W10sYT0iZmFsc2UiO2lmKGMuaXNFbXB0eSl7aWYoIWMu''@;'; put 'put ''c2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocylyZXR1cm4nPHRkIGNsYXNzPSJpcy1lbXB0eSI+PC90ZD4nO2wucHVzaCgiaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIiksYy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHN8fGwucHVzaCgiaXMtc2VsZWN0''@;'; put 'put ''aW9uLWRpc2FibGVkIil9cmV0dXJuIGMuaXNEaXNhYmxlZCYmbC5wdXNoKCJpcy1kaXNhYmxlZCIpLGMuaXNUb2RheSYmbC5wdXNoKCJpcy10b2RheSIpLGMuaXNTZWxlY3RlZCYmKGwucHVzaCgiaXMtc2VsZWN0ZWQiKSxhPSJ0cnVlIiksYy5oYXNFdmVudCYmbC5wdXNoKCJoYXMtZXZlbnQi''@;'; put 'put ''KSxjLmlzSW5SYW5nZSYmbC5wdXNoKCJpcy1pbnJhbmdlIiksYy5pc1N0YXJ0UmFuZ2UmJmwucHVzaCgiaXMtc3RhcnRyYW5nZSIpLGMuaXNFbmRSYW5nZSYmbC5wdXNoKCJpcy1lbmRyYW5nZSIpLCc8dGQgZGF0YS1kYXk9IicrYy5kYXkrJyIgY2xhc3M9IicrbC5qb2luKCIgIikrJyIgYXJp''@;'; put 'put ''YS1zZWxlY3RlZD0iJythKyciPjxidXR0b24gY2xhc3M9InBpa2EtYnV0dG9uIHBpa2EtZGF5IiB0eXBlPSJidXR0b24iIGRhdGEtcGlrYS15ZWFyPSInK2MueWVhcisnIiBkYXRhLXBpa2EtbW9udGg9IicrYy5tb250aCsnIiBkYXRhLXBpa2EtZGF5PSInK2MuZGF5KyciPicrYy5kYXkrIjwv''@;'; put 'put ''YnV0dG9uPjwvdGQ+In0sZ2F0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7bGV0IGY9bmV3IERhdGUoZCxhLGwpO3JldHVybic8dGQgY2xhc3M9InBpa2Etd2VlayI+JysoYy5oYXNNb21lbnQ/Yy5tb21lbnQoZikuaXNvV2VlaygpOmZ1bmN0aW9uKGMsbCl7Yy5zZXRIb3VycygwLDAsMCwwKTtsZXQg''@;'; put 'put ''YT1jLmdldERhdGUoKSxkPWMuZ2V0RGF5KCksaD1sLGY9aC0xLE09ZnVuY3Rpb24oYmUpe3JldHVybihiZSs3LTEpJTd9O2Muc2V0RGF0ZShhK2YtTShkKSk7bGV0IEQ9bmV3IERhdGUoYy5nZXRGdWxsWWVhcigpLDAsaCkscmU9KGMuZ2V0VGltZSgpLUQuZ2V0VGltZSgpKS84NjRlNTtyZXR1''@;'; put 'put ''cm4gMStNYXRoLnJvdW5kKChyZS1mK00oRC5nZXREYXkoKSkpLzcpfShmLGgpKSsiPC90ZD4ifSxtYXQ9ZnVuY3Rpb24oYyxsLGEsZCl7cmV0dXJuJzx0ciBjbGFzcz0icGlrYS1yb3cnKyhhPyIgcGljay13aG9sZS13ZWVrIjoiIikrKGQ/IiBpcy1zZWxlY3RlZCI6IiIpKyciPicrKGw/Yy5y''@;'; put 'put ''ZXZlcnNlKCk6Yykuam9pbigiIikrIjwvdHI+In0seWF0PWZ1bmN0aW9uKGMsbCxhLGQsaCxmKXtsZXQgdixNLEQsRWUsQmUsWj1jLl9vLHJlPWE9PT1aLm1pblllYXIsY2U9YT09PVoubWF4WWVhcixiZT0nPGRpdiBpZD0iJytmKyciIGNsYXNzPSJwaWthLXRpdGxlIiByb2xlPSJoZWFkaW5n''@;'; put 'put ''IiBhcmlhLWxpdmU9InBvbGl0ZSI+JyxxZT0hMCxydD0hMDtmb3IoRD1bXSx2PTA7djwxMjt2KyspRC5wdXNoKCc8b3B0aW9uIHZhbHVlPSInKyhhPT09aD92LWw6MTIrdi1sKSsnIicrKHY9PT1kPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyhyZSYmdjxaLm1pbk1vbnRofHxjZSYmdj5a''@;'; put 'put ''Lm1heE1vbnRoPycgZGlzYWJsZWQ9ImRpc2FibGVkIic6IiIpKyI+IitaLmkxOG4ubW9udGhzW3ZdKyI8L29wdGlvbj4iKTtmb3IoRWU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrWi5pMThuLm1vbnRoc1tkXSsnPHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9u''@;'; put 'put ''dGgiIHRhYmluZGV4PSItMSI+JytELmpvaW4oIiIpKyI8L3NlbGVjdD48L2Rpdj4iLGpYKFoueWVhclJhbmdlKT8odj1aLnllYXJSYW5nZVswXSxNPVoueWVhclJhbmdlWzFdKzEpOih2PWEtWi55ZWFyUmFuZ2UsTT0xK2ErWi55ZWFyUmFuZ2UpLEQ9W107djxNJiZ2PD1aLm1heFllYXI7disr''@;'; put 'put ''KXY+PVoubWluWWVhciYmRC5wdXNoKCc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT09YT8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrdisiPC9vcHRpb24+Iik7cmV0dXJuIEJlPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK2ErWi55ZWFyU3VmZml4Kyc8c2VsZWN0IGNsYXNz''@;'; put 'put ''PSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIiB0YWJpbmRleD0iLTEiPicrRC5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixiZSs9Wi5zaG93TW9udGhBZnRlclllYXI/QmUrRWU6RWUrQmUscmUmJigwPT09ZHx8Wi5taW5Nb250aD49ZCkmJihxZT0hMSksY2UmJigxMT09PWR8fFou''@;'; put 'put ''bWF4TW9udGg8PWQpJiYocnQ9ITEpLDA9PT1sJiYoYmUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYnKyhxZT8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK1ouaTE4bi5wcmV2aW91c01vbnRoKyI8L2J1dHRvbj4iKSxsPT09Yy5fby5udW1iZXJPZk1vbnRocy0xJiYo''@;'; put 'put ''YmUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLW5leHQnKyhydD8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK1ouaTE4bi5uZXh0TW9udGgrIjwvYnV0dG9uPiIpLGJlKyI8L2Rpdj4ifTtmdW5jdGlvbiB6WChjKXtsZXQgbD10aGlzLGE9bC5jb25maWcoYyk7bC5fb25Nb3Vz''@;'; put 'put ''ZURvd249ZnVuY3Rpb24oaCl7aWYoIWwuX3YpcmV0dXJuO2xldCBmPShoPWh8fEdtKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2lmKGYpaWYoUmgoZiwiaXMtZGlzYWJsZWQiKXx8KCFSaChmLCJwaWthLWJ1dHRvbiIpfHxSaChmLCJpcy1lbXB0eSIpfHxSaChmLnBhcmVudE5vZGUs''@;'; put 'put ''ImlzLWRpc2FibGVkIik/UmgoZiwicGlrYS1wcmV2Iik/bC5wcmV2TW9udGgoKTpSaChmLCJwaWthLW5leHQiKSYmbC5uZXh0TW9udGgoKToobC5zZXREYXRlKG5ldyBEYXRlKGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EteWVhciIpLGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtbW9udGgi''@;'; put 'put ''KSxmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLWRheSIpKSksYS5ib3VuZCYmTlgoZnVuY3Rpb24oKXtsLmhpZGUoKSxhLmJsdXJGaWVsZE9uU2VsZWN0JiZhLmZpZWxkJiZhLmZpZWxkLmJsdXIoKX0sMTAwKSkpLFJoKGYsInBpa2Etc2VsZWN0IikpbC5fYz0hMDtlbHNle2lmKCFoLnByZXZl''@;'; put 'put ''bnREZWZhdWx0KXJldHVybiBoLnJldHVyblZhbHVlPSExLCExO2gucHJldmVudERlZmF1bHQoKX19LGwuX29uQ2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fEdtKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2YmJihSaChmLCJwaWthLXNlbGVjdC1tb250aCIpP2wuZ290b01v''@;'; put 'put ''bnRoKGYudmFsdWUpOlJoKGYsInBpa2Etc2VsZWN0LXllYXIiKSYmbC5nb3RvWWVhcihmLnZhbHVlKSl9LGwuX29uS2V5Q2hhbmdlPWZ1bmN0aW9uKGgpe2lmKGg9aHx8R20oKS5ldmVudCxsLmlzVmlzaWJsZSgpKXN3aXRjaChoLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAyNzphLmZpZWxkJiZh''@;'; put 'put ''LmZpZWxkLmJsdXIoKTticmVhaztjYXNlIDM3OmwuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpO2JyZWFrO2Nhc2UgMzg6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyk7YnJlYWs7Y2FzZSAzOTpsLmFkanVzdERhdGUoImFkZCIsMSk7YnJlYWs7Y2FzZSA0MDpsLmFkanVzdERhdGUoImFkZCIs''@;'; put 'put ''Nyk7YnJlYWs7Y2FzZSA4OmNhc2UgNDY6bC5zZXREYXRlKG51bGwpfX0sbC5fcGFyc2VGaWVsZFZhbHVlPWZ1bmN0aW9uKCl7aWYoYS5wYXJzZSlyZXR1cm4gYS5wYXJzZShhLmZpZWxkLnZhbHVlLGEuZm9ybWF0KTtpZih0aGlzLmhhc01vbWVudCl7bGV0IGg9dGhpcy5tb21lbnQoYS5maWVs''@;'; put 'put ''ZC52YWx1ZSxhLmZvcm1hdCxhLmZvcm1hdFN0cmljdCk7cmV0dXJuIGgmJmguaXNWYWxpZCgpP2gudG9EYXRlKCk6bnVsbH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShhLmZpZWxkLnZhbHVlKSl9LGwuX29uSW5wdXRDaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY7aC5maXJlZEJ5IT09bCYm''@;'; put 'put ''KGY9bC5fcGFyc2VGaWVsZFZhbHVlKCksTGgoZikmJmwuc2V0RGF0ZShmKSxsLl92fHxsLnNob3coKSl9LGwuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0Q2xpY2s9ZnVuY3Rpb24oKXtsLnNob3coKX0sbC5fb25JbnB1dEJsdXI9ZnVuY3Rpb24oKXtsZXQg''@;'; put 'put ''aD0kMigpLmFjdGl2ZUVsZW1lbnQ7ZG97aWYoUmgoaCwicGlrYS1zaW5nbGUiKSlyZXR1cm59d2hpbGUoaD1oLnBhcmVudE5vZGUpO2wuX2N8fChsLl9iPU5YKGZ1bmN0aW9uKCl7bC5oaWRlKCl9LDUwKSksbC5fYz0hMX0sbC5fb25DbGljaz1mdW5jdGlvbihoKXtsZXQgZj0oaD1ofHxHbSgp''@;'; put 'put ''LmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudCx2PWY7aWYoZil7IWhhc0V2ZW50TGlzdGVuZXJzJiZSaChmLCJwaWthLXNlbGVjdCIpJiYoZi5vbmNoYW5nZXx8KGYuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsInJldHVybjsiKSxIcChmLCJjaGFuZ2UiLGwuX29uQ2hhbmdlKSkpO2Rve2lm''@;'; put 'put ''KFJoKHYsInBpa2Etc2luZ2xlIil8fHY9PT1hLnRyaWdnZXIpcmV0dXJufXdoaWxlKHY9di5wYXJlbnROb2RlKTtsLl92JiZmIT09YS50cmlnZ2VyJiZ2IT09YS50cmlnZ2VyJiZsLmhpZGUoKX19LGwuZWw9JDIoKS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsLmVsLmNsYXNzTmFtZT0icGlrYS1z''@;'; put 'put ''aW5nbGUiKyhhLmlzUlRMPyIgaXMtcnRsIjoiIikrKGEudGhlbWU/IiAiK2EudGhlbWU6IiIpLEhwKGwuZWwsIm1vdXNlZG93biIsbC5fb25Nb3VzZURvd24sITApLEhwKGwuZWwsInRvdWNoZW5kIixsLl9vbk1vdXNlRG93biwhMCksSHAobC5lbCwiY2hhbmdlIixsLl9vbkNoYW5nZSksYS5r''@;'; put 'put ''ZXlib2FyZElucHV0JiZIcCgkMigpLCJrZXlkb3duIixsLl9vbktleUNoYW5nZSksYS5maWVsZCYmKGEuY29udGFpbmVyP2EuY29udGFpbmVyLmFwcGVuZENoaWxkKGwuZWwpOmEuYm91bmQ/JDIoKS5ib2R5LmFwcGVuZENoaWxkKGwuZWwpOmEuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZv''@;'; put 'put ''cmUobC5lbCxhLmZpZWxkLm5leHRTaWJsaW5nKSxIcChhLmZpZWxkLCJjaGFuZ2UiLGwuX29uSW5wdXRDaGFuZ2UpLGEuZGVmYXVsdERhdGV8fChhLmRlZmF1bHREYXRlPWwuX3BhcnNlRmllbGRWYWx1ZSgpLGEuc2V0RGVmYXVsdERhdGU9ITApKTtsZXQgZD1hLmRlZmF1bHREYXRlO0xoKGQp''@;'; put 'put ''P2Euc2V0RGVmYXVsdERhdGU/bC5zZXREYXRlKGQsITApOmwuZ290b0RhdGUoZCk6bC5nb3RvRGF0ZShuZXcgRGF0ZSksYS5ib3VuZD8odGhpcy5oaWRlKCksbC5lbC5jbGFzc05hbWUrPSIgaXMtYm91bmQiLEhwKGEudHJpZ2dlciwiY2xpY2siLGwuX29uSW5wdXRDbGljayksSHAoYS50cmln''@;'; put 'put ''Z2VyLCJmb2N1cyIsbC5fb25JbnB1dEZvY3VzKSxIcChhLnRyaWdnZXIsImJsdXIiLGwuX29uSW5wdXRCbHVyKSk6dGhpcy5zaG93KCl9ZnVuY3Rpb24gV3BlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTYXQoYyl7dmFyIGw9ZnVuY3Rpb24gTWF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBVWChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9elgucHJvdG90eXBlPXtjb25maWc6ZnVuY3Rpb24oYyl7dGhpcy5fb3x8KHRoaXMuX289WlAoe30sTnAsITApKTtsZXQgbD1aUCh0aGlzLl9vLGMsITApO2wuaXNSVEw9ISFsLmlzUlRMLGwuZmllbGQ9bC5maWVsZCYmbC5maWVsZC5ub2Rl''@;'; put 'put ''TmFtZT9sLmZpZWxkOm51bGwsbC50aGVtZT0ic3RyaW5nIj09dHlwZW9mIGwudGhlbWUmJmwudGhlbWU/bC50aGVtZTpudWxsLGwuYm91bmQ9ISEodm9pZCAwIT09bC5ib3VuZD9sLmZpZWxkJiZsLmJvdW5kOmwuZmllbGQpLGwudHJpZ2dlcj1sLnRyaWdnZXImJmwudHJpZ2dlci5ub2RlTmFt''@;'; put 'put ''ZT9sLnRyaWdnZXI6bC5maWVsZCxsLmRpc2FibGVXZWVrZW5kcz0hIWwuZGlzYWJsZVdlZWtlbmRzLGwuZGlzYWJsZURheUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBsLmRpc2FibGVEYXlGbj9sLmRpc2FibGVEYXlGbjpudWxsO2xldCBhPXBhcnNlSW50KGwubnVtYmVyT2ZNb250aHMsMTApfHwx''@;'; put 'put ''O2lmKGwubnVtYmVyT2ZNb250aHM9YT40PzQ6YSxMaChsLm1pbkRhdGUpfHwobC5taW5EYXRlPSExKSxMaChsLm1heERhdGUpfHwobC5tYXhEYXRlPSExKSxsLm1pbkRhdGUmJmwubWF4RGF0ZSYmbC5tYXhEYXRlPGwubWluRGF0ZSYmKGwubWF4RGF0ZT1sLm1pbkRhdGU9ITEpLGwubWluRGF0''@;'; put 'put ''ZSYmdGhpcy5zZXRNaW5EYXRlKGwubWluRGF0ZSksbC5tYXhEYXRlJiZ0aGlzLnNldE1heERhdGUobC5tYXhEYXRlKSxqWChsLnllYXJSYW5nZSkpe2xldCBkPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0xMDtsLnllYXJSYW5nZVswXT1wYXJzZUludChsLnllYXJSYW5nZVswXSwxMCl8fGQs''@;'; put 'put ''bC55ZWFyUmFuZ2VbMV09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMV0sMTApfHxkfWVsc2UgbC55ZWFyUmFuZ2U9TWF0aC5hYnMocGFyc2VJbnQobC55ZWFyUmFuZ2UsMTApKXx8TnAueWVhclJhbmdlLGwueWVhclJhbmdlPjEwMCYmKGwueWVhclJhbmdlPTEwMCk7cmV0dXJuIGx9LHRvU3RyaW5n''@;'; put 'put ''OmZ1bmN0aW9uKGMpe3JldHVybiBjPWN8fHRoaXMuX28uZm9ybWF0LExoKHRoaXMuX2QpP3RoaXMuX28udG9TdHJpbmc/dGhpcy5fby50b1N0cmluZyh0aGlzLl9kLGMpOnRoaXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpLmZvcm1hdChjKTp0aGlzLl9kLnRvRGF0ZVN0cmluZygp''@;'; put 'put ''OiIifSxnZXRNb21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNNb21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCk6bnVsbH0sc2V0TW9tZW50OmZ1bmN0aW9uKGMsbCl7dGhpcy5oYXNNb21lbnQmJnRoaXMubW9tZW50LmlzTW9tZW50KGMpJiZ0aGlzLnNldERhdGUoYy50b0RhdGUoKSxs''@;'; put 'put ''KX0sdXNlTW9tZW50OmZ1bmN0aW9uKGMpe3RoaXMuaGFzTW9tZW50PSEwLHRoaXMubW9tZW50PWN9LGdldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgodGhpcy5fZCk/bmV3IERhdGUodGhpcy5fZC5nZXRUaW1lKCkpOm51bGx9LHNldERhdGU6ZnVuY3Rpb24oYyxsKXtpZighYylyZXR1cm4g''@;'; put 'put ''dGhpcy5fZD1udWxsLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPSIiLHpwZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksdGhpcy5kcmF3KCk7aWYoInN0cmluZyI9PXR5cGVvZiBjJiYoYz1uZXcgRGF0ZShEYXRlLnBhcnNlKGMpKSksIUxoKGMp''@;'; put 'put ''KXJldHVybjtsZXQgYT10aGlzLl9vLm1pbkRhdGUsZD10aGlzLl9vLm1heERhdGU7TGgoYSkmJmM8YT9jPWE6TGgoZCkmJmM+ZCYmKGM9ZCksdGhpcy5fZD1uZXcgRGF0ZShjLmdldFRpbWUoKSkselAodGhpcy5fZCksdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKSx0aGlzLl9vLmZpZWxkJiYodGhp''@;'; put 'put ''cy5fby5maWVsZC52YWx1ZT10aGlzLnRvU3RyaW5nKCksenBlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSwhbCYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25TZWxlY3QmJnRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLHRoaXMuZ2V0RGF0ZSgpKX0sY2xl''@;'; put 'put ''YXI6ZnVuY3Rpb24oKXt0aGlzLnNldERhdGUobnVsbCl9LGdvdG9EYXRlOmZ1bmN0aW9uKGMpe2xldCBsPSEwO2lmKExoKGMpKXtpZih0aGlzLmNhbGVuZGFycyl7bGV0IGE9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVhcix0aGlzLmNhbGVuZGFyc1swXS5tb250aCwxKSxkPW5ldyBE''@;'; put 'put ''YXRlKHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS55ZWFyLHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwxKSxoPWMuZ2V0VGltZSgpO2Quc2V0TW9udGgoZC5nZXRNb250aCgpKzEpLGQuc2V0RGF0ZShkLmdldERhdGUoKS0xKSxs''@;'; put 'put ''PWg8YS5nZXRUaW1lKCl8fGQuZ2V0VGltZSgpPGh9bCYmKHRoaXMuY2FsZW5kYXJzPVt7bW9udGg6Yy5nZXRNb250aCgpLHllYXI6Yy5nZXRGdWxsWWVhcigpfV0sInJpZ2h0Ij09PXRoaXMuX28ubWFpbkNhbGVuZGFyJiYodGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrPTEtdGhpcy5fby5udW1i''@;'; put 'put ''ZXJPZk1vbnRocykpLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9fSxhZGp1c3REYXRlOmZ1bmN0aW9uKGMsbCl7bGV0IGgsYT10aGlzLmdldERhdGUoKXx8bmV3IERhdGUsZD0yNCpwYXJzZUludChsKSo2MCo2MCoxZTM7ImFkZCI9PT1jP2g9bmV3IERhdGUoYS52YWx1ZU9mKCkrZCk6InN1YnRy''@;'; put 'put ''YWN0Ij09PWMmJihoPW5ldyBEYXRlKGEudmFsdWVPZigpLWQpKSx0aGlzLnNldERhdGUoaCl9LGFkanVzdENhbGVuZGFyczpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdPVVwZSh0aGlzLmNhbGVuZGFyc1swXSk7Zm9yKGxldCBjPTE7Yzx0aGlzLl9vLm51bWJlck9mTW9udGhzO2MrKyl0''@;'; put 'put ''aGlzLmNhbGVuZGFyc1tjXT1VcGUoe21vbnRoOnRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoK2MseWVhcjp0aGlzLmNhbGVuZGFyc1swXS55ZWFyfSk7dGhpcy5kcmF3KCl9LGdvdG9Ub2RheTpmdW5jdGlvbigpe3RoaXMuZ290b0RhdGUobmV3IERhdGUpfSxnb3RvTW9udGg6ZnVuY3Rpb24oYyl7''@;'; put 'put ''aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS5tb250aD1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKyx0aGlzLmFkanVzdENhbGVuZGFycygpfSxwcmV2TW9udGg6ZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LGdvdG9ZZWFyOmZ1bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ueWVhcj1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sc2V0TWluRGF0ZTpmdW5jdGlv''@;'; put 'put ''bihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oelAoYyksdGhpcy5fby5taW5EYXRlPWMsdGhpcy5fby5taW5ZZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1pbk1vbnRoPWMuZ2V0TW9udGgoKSk6KHRoaXMuX28ubWluRGF0ZT1OcC5taW5EYXRlLHRoaXMuX28ubWluWWVhcj1OcC5taW5ZZWFy''@;'; put 'put ''LHRoaXMuX28ubWluTW9udGg9TnAubWluTW9udGgsdGhpcy5fby5zdGFydFJhbmdlPU5wLnN0YXJ0UmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRNYXhEYXRlOmZ1bmN0aW9uKGMpe2MgaW5zdGFuY2VvZiBEYXRlPyh6UChjKSx0aGlzLl9vLm1heERhdGU9Yyx0aGlzLl9vLm1heFllYXI9Yy5nZXRG''@;'; put 'put ''dWxsWWVhcigpLHRoaXMuX28ubWF4TW9udGg9Yy5nZXRNb250aCgpKToodGhpcy5fby5tYXhEYXRlPU5wLm1heERhdGUsdGhpcy5fby5tYXhZZWFyPU5wLm1heFllYXIsdGhpcy5fby5tYXhNb250aD1OcC5tYXhNb250aCx0aGlzLl9vLmVuZFJhbmdlPU5wLmVuZFJhbmdlKSx0aGlzLmRyYXco''@;'; put 'put ''KX0sc2V0U3RhcnRSYW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLnN0YXJ0UmFuZ2U9Y30sc2V0RW5kUmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5lbmRSYW5nZT1jfSxkcmF3OmZ1bmN0aW9uKGMpe2lmKCF0aGlzLl92JiYhYylyZXR1cm47bGV0IE0sbD10aGlzLl9vLGE9bC5taW5ZZWFyLGQ9''@;'; put 'put ''bC5tYXhZZWFyLGg9bC5taW5Nb250aCxmPWwubWF4TW9udGgsdj0iIjt0aGlzLl95PD1hJiYodGhpcy5feT1hLCFpc05hTihoKSYmdGhpcy5fbTxoJiYodGhpcy5fbT1oKSksdGhpcy5feT49ZCYmKHRoaXMuX3k9ZCwhaXNOYU4oZikmJnRoaXMuX20+ZiYmKHRoaXMuX209ZikpO2ZvcihsZXQg''@;'; put 'put ''RD0wO0Q8bC5udW1iZXJPZk1vbnRocztEKyspTT0icGlrYS10aXRsZS0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16XSsvZywiIikuc3Vic3RyKDAsMiksdis9JzxkaXYgY2xhc3M9InBpa2EtbGVuZGFyIj4nK3lhdCh0aGlzLEQsdGhpcy5jYWxlbmRhcnNbRF0u''@;'; put 'put ''eWVhcix0aGlzLmNhbGVuZGFyc1tEXS5tb250aCx0aGlzLmNhbGVuZGFyc1swXS55ZWFyLE0pK3RoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW0RdLnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsTSkrIjwvZGl2PiI7dGhpcy5lbC5pbm5lckhUTUw9dixsLmJvdW5kJiYiaGlkZGVuIiE9''@;'; put 'put ''PWwuZmllbGQudHlwZSYmTlgoZnVuY3Rpb24oKXtsLnRyaWdnZXIuZm9jdXMoKX0sMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25EcmF3JiZ0aGlzLl9vLm9uRHJhdyh0aGlzKSxsLmJvdW5kJiZsLmZpZWxkLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbC5hcmlhTGFiZWwpfSxh''@;'; put 'put ''ZGp1c3RQb3NpdGlvbjpmdW5jdGlvbigpe2xldCBjLGwsYSxkLGgsZix2LE0sRCxaLHJlO3RoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGM9dGhpcy5fby50cmlnZ2VyLGw9dGhpcy5lbC5vZmZzZXRXaWR0aCxhPXRoaXMuZWwub2Zmc2V0SGVp''@;'; put 'put ''Z2h0LGQ9R20oKS5pbm5lcldpZHRofHwkMigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxoPUdtKCkuaW5uZXJIZWlnaHR8fCQyKCkuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxmPSQyKCkuYm9keS5zY3JvbGxUb3B8fCQyKCkuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxa''@;'; put 'put ''PSEwLHJlPSEwLEQ9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PUQubGVmdCtHbSgpLnBhZ2VYT2Zmc2V0LE09RC5ib3R0b20rR20oKS5wYWdlWU9mZnNldCwodGhpcy5fby5yZXBvc2l0aW9uJiZ2K2w+ZHx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpPi0xJiZ2LWwrYy5v''@;'; put 'put ''ZmZzZXRXaWR0aD4wKSYmKHY9di1sK2Mub2Zmc2V0V2lkdGgsWj0hMSksKHRoaXMuX28ucmVwb3NpdGlvbiYmTSthPmgrZnx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT4tMSYmTS1hLWMub2Zmc2V0SGVpZ2h0PjApJiYoTT1NLWEtYy5vZmZzZXRIZWlnaHQscmU9ITEpLHY8MCYm''@;'; put 'put ''KHY9MCksTTwwJiYoTT0wKSx0aGlzLmVsLnN0eWxlLmxlZnQ9disicHgiLHRoaXMuZWwuc3R5bGUudG9wPU0rInB4IixWWCh0aGlzLmVsLFo/ImxlZnQtYWxpZ25lZCI6InJpZ2h0LWFsaWduZWQiKSxWWCh0aGlzLmVsLHJlPyJib3R0b20tYWxpZ25lZCI6InRvcC1hbGlnbmVkIiksQlgodGhp''@;'; put 'put ''cy5lbCxaPyJyaWdodC1hbGlnbmVkIjoibGVmdC1hbGlnbmVkIiksQlgodGhpcy5lbCxyZT8idG9wLWFsaWduZWQiOiJib3R0b20tYWxpZ25lZCIpKX0scmVuZGVyOmZ1bmN0aW9uKGMsbCxhKXtsZXQgZD10aGlzLl9vLGg9bmV3IERhdGUsZj1qcGUoYyxsKSx2PW5ldyBEYXRlKGMsbCwxKS5n''@;'; put 'put ''ZXREYXkoKSxNPVtdLEQ9W107elAoaCksZC5maXJzdERheT4wJiYodi09ZC5maXJzdERheSx2PDAmJih2Kz03KSk7bGV0IFo9MD09PWw/MTE6bC0xLHJlPTExPT09bD8wOmwrMSxjZT0wPT09bD9jLTE6YyxiZT0xMT09PWw/YysxOmMsRWU9anBlKGNlLFopLEJlPWYrdixxZT1CZTtmb3IoO3Fl''@;'; put 'put ''Pjc7KXFlLT03O0JlKz03LXFlO2xldCBydD0hMTtmb3IobGV0IHB0PTAsZHQ9MDtwdDxCZTtwdCsrKXtsZXQgSnQ9bmV3IERhdGUoYyxsLHB0LXYrMSksdm49ISFMaCh0aGlzLl9kKSYmVVAoSnQsdGhpcy5fZCksQ249VVAoSnQsaCksdG49LTEhPT1kLmV2ZW50cy5pbmRleE9mKEp0LnRvRGF0''@;'; put 'put ''ZVN0cmluZygpKSxNbj1wdDx2fHxwdD49Zit2LENyPXB0LXYrMSxHcj1sLG1yPWMsR249ZC5zdGFydFJhbmdlJiZVUChkLnN0YXJ0UmFuZ2UsSnQpLGFpPWQuZW5kUmFuZ2UmJlVQKGQuZW5kUmFuZ2UsSnQpLF9pPWQuc3RhcnRSYW5nZSYmZC5lbmRSYW5nZSYmZC5zdGFydFJhbmdlPEp0JiZK''@;'; put 'put ''dDxkLmVuZFJhbmdlLE9uPWQubWluRGF0ZSYmSnQ8ZC5taW5EYXRlfHxkLm1heERhdGUmJkp0PmQubWF4RGF0ZXx8ZC5kaXNhYmxlV2Vla2VuZHMmJmRhdChKdCl8fGQuZGlzYWJsZURheUZuJiZkLmRpc2FibGVEYXlGbihKdCk7TW4mJihwdDx2PyhDcj1FZStDcixHcj1aLG1yPWNlKTooQ3It''@;'; put 'put ''PWYsR3I9cmUsbXI9YmUpKSxkLnBpY2tXaG9sZVdlZWsmJnZuJiYocnQ9ITApLEQucHVzaChmYXQoe2RheTpDcixtb250aDpHcix5ZWFyOm1yLGhhc0V2ZW50OnRuLGlzU2VsZWN0ZWQ6dm4saXNUb2RheTpDbixpc0Rpc2FibGVkOk9uLGlzRW1wdHk6TW4saXNTdGFydFJhbmdlOkduLGlzRW5k''@;'; put 'put ''UmFuZ2U6YWksaXNJblJhbmdlOl9pLHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2''@;'; put 'put ''aW91c01vbnRoc30pKSw3PT0rK2R0JiYoZC5zaG93V2Vla051bWJlciYmRC51bnNoaWZ0KGdhdCh0aGlzLHB0LXYsbCxjLGQuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpLE0ucHVzaChtYXQoRCxkLmlzUlRMLGQucGlja1dob2xlV2VlayxydCkpLEQ9W10sZHQ9MCxydD0hMSl9cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGMsbCxhKXtyZXR1cm4nPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBpa2EtdGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0iJythKyciPicrZnVuY3Rpb24oYyl7bGV0IGwsYT1bXTtmb3IoYy5zaG93V2Vla051bWJlciYmYS5w''@;'; put 'put ''dXNoKCI8dGg+PC90aD4iKSxsPTA7bDw3O2wrKylhLnB1c2goJzx0aCBzY29wZT0iY29sIj48YWJiciB0aXRsZT0iJytacGUoYyxsKSsnIj4nK1pwZShjLGwsITApKyI8L2FiYnI+PC90aD4iKTtyZXR1cm4iPHRoZWFkPjx0cj4iKyhjLmlzUlRMP2EucmV2ZXJzZSgpOmEpLmpvaW4oIiIpKyI8''@;'; put 'put ''L3RyPjwvdGhlYWQ+In0oYykrZnVuY3Rpb24oYyl7cmV0dXJuIjx0Ym9keT4iK2Muam9pbigiIikrIjwvdGJvZHk+In0obCkrIjwvdGFibGU+In0oZCxNLGEpfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdn0sc2hvdzpmdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlKCl8fCh0''@;'; put 'put ''aGlzLl92PSEwLHRoaXMuZHJhdygpLEJYKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX28uYm91bmQmJihIcCgkMigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5hZGp1c3RQb3NpdGlvbigpKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbk9wZW4mJnRoaXMuX28ub25PcGVu''@;'; put 'put ''LmNhbGwodGhpcykpfSxoaWRlOmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fdjshMSE9PWMmJih0aGlzLl9vLmJvdW5kJiZrZygkMigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiLHRoaXMuZWwuc3R5bGUu''@;'; put 'put ''bGVmdD0iYXV0byIsdGhpcy5lbC5zdHlsZS50b3A9ImF1dG8iKSxWWCh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl92PSExLHZvaWQgMCE9PWMmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UmJnRoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpKX0sZGVzdHJveTpmdW5jdGlv''@;'; put 'put ''bigpe2xldCBjPXRoaXMuX287dGhpcy5oaWRlKCksa2codGhpcy5lbCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93biwhMCksa2codGhpcy5lbCwidG91Y2hlbmQiLHRoaXMuX29uTW91c2VEb3duLCEwKSxrZyh0aGlzLmVsLCJjaGFuZ2UiLHRoaXMuX29uQ2hhbmdlKSxjLmtleWJvYXJk''@;'; put 'put ''SW5wdXQmJmtnKCQyKCksImtleWRvd24iLHRoaXMuX29uS2V5Q2hhbmdlKSxjLmZpZWxkJiYoa2coYy5maWVsZCwiY2hhbmdlIix0aGlzLl9vbklucHV0Q2hhbmdlKSxjLmJvdW5kJiYoa2coYy50cmlnZ2VyLCJjbGljayIsdGhpcy5fb25JbnB1dENsaWNrKSxrZyhjLnRyaWdnZXIsImZvY3Vz''@;'; put 'put ''Iix0aGlzLl9vbklucHV0Rm9jdXMpLGtnKGMudHJpZ2dlciwiYmx1ciIsdGhpcy5fb25JbnB1dEJsdXIpKSksdGhpcy5lbC5wYXJlbnROb2RlJiZ0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCl9fTtjb25zdCBZcGU9ImRhdGUiLEdwZT0iZGF0ZUVkaXRvciI7dmFyIFdQ''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzICRwZSBleHRlbmRzIGE5e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB3YXQoYyxsKXsoZnVuY3Rpb24gQ2F0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUg''@;'; put 'put ''cHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsV1ApLFdwZSh0aGlzLCJwYXJlbnREZXN0cm95ZWQiLCExKSxXcGUodGhpcywiJGRhdGVQaWNrZXIiLG51bGwpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4gWXBlfWluaXQo''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgT28pdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBpbmNsdWRlIG1vbWVudC5qcyB0byB5b3VyIHByb2plY3QuIik7c3VwZXIuaW5pdCgpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt0aGlzLnBhcmVudERlc3Ryb3llZD0h''@;'; put 'put ''MCx0aGlzLmRlc3Ryb3lFbGVtZW50cygpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9PnthfHwobG8odGhpcy5kYXRlUGlja2VyLC9odC10aGVtZS0uKi9nKSxUaSh0aGlzLmRhdGVQaWNrZXIsbCkpfSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVt''@;'; put 'put ''ZW50cygpLHRoaXMuZGF0ZVBpY2tlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5kYXRlUGlja2VyU3R5bGU9dGhpcy5kYXRlUGlja2VyLnN0eWxlLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5kYXRlUGlja2Vy''@;'; put 'put ''U3R5bGUudG9wPTAsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnpJbmRleD05OTk5LHRoaXMuZGF0ZVBpY2tlci5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIiksVGkodGhpcy5kYXRlUGlja2VyLCJodERhdGVw''@;'; put 'put ''aWNrZXJIb2xkZXIiKTtjb25zdCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKTtsbyh0aGlzLmRhdGVQaWNrZXIsL2h0LXRoZW1lLS4qL2cpLFRpKHRoaXMuZGF0ZVBpY2tlcixsKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRhdGVQaWNrZXIp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGE9PntwbyhhLnRhcmdldCwicGlrYS1kYXkiKSYmdGhpcy5oaWRlRGF0ZXBpY2tlcigpLGEuc3RvcFByb3BhZ2F0aW9uKCl9KX1kZXN0cm95RWxlbWVudHMoKXtjb25zdCBsPXRo''@;'; put 'put ''aXMuZGF0ZVBpY2tlci5wYXJlbnROb2RlO3RoaXMuJGRhdGVQaWNrZXImJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5kYXRlUGlja2VyKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX1vcGVuKCl7bGV0IGw9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Y29uc3QgZD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTt0aGlzLnNob3dEYXRlcGlja2VyKGwpLHN1cGVyLm9wZW4oKSxkLmFkZFNob3J0''@;'; put 'put ''Y3V0cyhbe2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDEpfX0se2tl''@;'; put 'put ''eXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDcpfX1dLHtncm91cDpHcGV9KX1j''@;'; put 'put ''bG9zZSgpe3ZhciBsO3RoaXMuX29wZW5lZD0hMSxudWxsIT09KGw9dGhpcy4kZGF0ZVBpY2tlcikmJnZvaWQgMCE9PWwmJmwuZGVzdHJveSYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2NvbnN0IGg9dGhpcy5ob3QuX2dldEVkaXRv''@;'; put 'put ''ck1hbmFnZXIoKTtoLmNsb3NlRWRpdG9yKCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxoLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR3BlKSxzdXBlci5jbG9zZSgpfWZp''@;'; put 'put ''bmlzaEVkaXRpbmcoKXtzdXBlci5maW5pc2hFZGl0aW5nKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2hvd0RhdGVwaWNrZXIobCl7''@;'; put 'put ''Y29uc3QgYT1VWChXUCx0aGlzLFpYKS5jYWxsKHRoaXMpLGQ9dGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpLGg9ISFsJiZIJChsLmtleUNvZGUpO2xldCBmO3RoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy4kZGF0ZVBpY2tlcj1uZXcgelgodGhpcy5nZXREYXRl''@;'; put 'put ''UGlja2VyQ29uZmlnKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudCYmdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQoT28pLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5vcmlnaW5hbFZhbHVlPyhmPXRoaXMu''@;'; put 'put ''b3JpZ2luYWxWYWx1ZSxPbyhmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoT28oZixhKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmlnaW5hbFZhbHVlJiZ0aGlzLnNldFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSksIWgmJiFkJiZ0aGlzLnNldFZh''@;'; put 'put ''bHVlKCIiKSk6dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZT8oZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLE9vKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChPbyhmLGEpLCEwKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0''@;'; put 'put ''aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgpfWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9Z2V0RGF0ZVBpY2tlckNvbmZpZygpe3ZhciBsO2NvbnN0IGE9dGhpcy5URVhUQVJFQSxkPXt9O3RoaXMu''@;'; put 'put ''Y2VsbFByb3BlcnRpZXMmJnRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmeEUoZCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0IGg9ZC5vblNlbGVjdCxmPWQub25DbG9zZTtyZXR1cm4gZC5maWVsZD1hLGQudHJpZ2dlcj1hLGQuY29udGFp''@;'; put 'put ''bmVyPXRoaXMuZGF0ZVBpY2tlcixkLmJvdW5kPSExLGQua2V5Ym9hcmRJbnB1dD0hMSxkLmZvcm1hdD1udWxsIT09KGw9ZC5mb3JtYXQpJiZ2b2lkIDAhPT1sP2w6VVgoV1AsdGhpcyxaWCkuY2FsbCh0aGlzKSxkLnJlcG9zaXRpb249ZC5yZXBvc2l0aW9ufHwhMSxkLmlzUlRMPSExLGQub25T''@;'; put 'put ''ZWxlY3Q9dj0+e2xldCBNPXY7aXNOYU4oTS5nZXRUaW1lKCkpfHwoTT1PbyhNKS5mb3JtYXQoVVgoV1AsdGhpcyxaWCkuY2FsbCh0aGlzKSkpLHRoaXMuc2V0VmFsdWUoTSksaCYmaCgpLEFwKCkmJnRoaXMuaGlkZURhdGVwaWNrZXIoKX0sZC5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0''@;'; put 'put ''cm95ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksZiYmZigpfSxkfXJlZnJlc2hEaW1lbnNpb25zKGwpe3ZhciBhO2lmKHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKGwpLHRoaXMuc3RhdGUhPT1sdS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlz''@;'; put 'put ''LlREKXJldHVybiB2b2lkIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PXRoaXMuaG90LHt3dE92ZXJsYXlzOmZ9PXRoaXMuaG90LnZpZXcuX3d0LHt3dFRhYmxlOnZ9PW51bGwhPT0oYT1mLmdldFBhcmVudE92ZXJsYXko''@;'; put 'put ''dGhpcy5URCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5ob3Qudmlldy5fd3QsTT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSksRD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJs''@;'; put 'put ''ZVJvdygpKSxaPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKSxyZT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKTtpZih0aGlzLnJvdz49TSYmdGhp''@;'; put 'put ''cy5yb3c8PUQmJnRoaXMuY29sPj1aJiZ0aGlzLmNvbDw9cmUpe2NvbnN0IGNlPXRoaXMuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXQrY2UudG9wK3h1KHRoaXMuVEQpfXB4YDtsZXQg''@;'; put 'put ''YmU9dGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldDt0aGlzLmhvdC5pc1J0bCgpP2JlKz1jZS5yaWdodC1zdSh0aGlzLmRhdGVQaWNrZXIpOmJlKz1jZS5sZWZ0LHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9YCR7YmV9cHhgfWVsc2UgdGhpcy5oaWRlRGF0ZXBpY2tlcigpfX1mdW5j''@;'; put 'put ''dGlvbiBaWCgpe3ZhciBjO3JldHVybiBudWxsIT09KGM9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0KSYmdm9pZCAwIT09Yz9jOiJERC9NTS9ZWVlZIn1jbGFzcyBLcGUgZXh0ZW5kcyBIWHtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGws''@;'; put 'put ''YSxkLGgsZix2KXt2LmZpbHRlcj0hMSx2LnN0cmljdD0hMCxzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX19Y2xhc3MgcXBlIGV4dGVuZHMgYTl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgWHBlIGV4dGVuZHMgYTl7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEFhdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2F0KGMpe3ZhciBsPWZ1bmN0aW9uIERhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImF1dG9SZXNpemUiLEFwZSh0''@;'; put 'put ''aGlzLmhvdC5yb290RG9jdW1lbnQse3RleHRDb250ZW50Omw9PiJcdTIwMjIiLnJlcGVhdChsLnZhbHVlLmxlbmd0aCl9KSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29yZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFS''@;'; put 'put ''RUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1l''@;'; put 'put ''PSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHhwKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBl''@;'; put 'put ''bmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgV1g9Imh0X2VkaXRvcl92aXNpYmxlIixKcGU9InNlbGVjdEVkaXRvciI7Y2xhc3MgUXBlIGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNlbGVjdFdyYXBwZXI9dGhpcy5o''@;'; put 'put ''b3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2VsZWN0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSx0aGlzLnNlbGVjdC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwidHJ1ZSIpLHRoaXMuc2VsZWN0V3JhcHBlci5z''@;'; put 'put ''dHlsZS5kaXNwbGF5PSJub25lIjtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bC5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLGEmJmwuc2V0QXR0cmlidXRlKC4uLlY3KCkp''@;'; put 'put ''LGwuYXBwZW5kQ2hpbGQodGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksVGkodGhpcy5zZWxlY3RXcmFwcGVyLCJodFNlbGVjdEVkaXRvciIpLHRoaXMuc2VsZWN0V3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdCksdGhpcy5zZWxlY3RXcmFwcGVy''@;'; put 'put ''Lmluc2VydEJlZm9yZShsLHRoaXMuc2VsZWN0V3JhcHBlci5maXJzdENoaWxkKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdFdyYXBwZXIpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVl''@;'; put 'put ''KGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRv''@;'; put 'put ''ciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29wZW5lZD0hMSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIscG8odGhpcy5zZWxlY3RXcmFwcGVyLFdYKSYmbG8odGhpcy5zZWxlY3RXcmFwcGVyLFdYKSx0aGlzLnVucmVnaXN0ZXJTaG9y''@;'; put 'put ''dGN1dHMoKSx0aGlzLmNsZWFySG9va3MoKX1mb2N1cygpe3RoaXMuc2VsZWN0LmZvY3VzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxW''@;'; put 'put ''ZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKX1w''@;'; put 'put ''cmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMuY2VsbFByb3BlcnRpZXMuc2VsZWN0T3B0aW9ucztsZXQgRDtEPXRoaXMucHJlcGFyZU9wdGlvbnMoImZ1bmN0aW9uIj09dHlwZW9mIE0/TSh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnBy''@;'; put 'put ''b3ApOk0pLHhwKHRoaXMuc2VsZWN0KSxYbyhELChaLHJlKT0+e2NvbnN0IGNlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtjZS52YWx1ZT1yZSx6NyhjZSxaKSx0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChjZSl9KX1wcmVwYXJlT3B0aW9ucyhsKXtsZXQg''@;'; put 'put ''YT17fTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgZD0wLGg9bC5sZW5ndGg7ZDxoO2QrKylhW2xbZF1dPWxbZF07ZWxzZSJvYmplY3QiPT10eXBlb2YgbCYmKGE9bCk7cmV0dXJuIGF9cmVmcmVzaFZhbHVlKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMu''@;'; put 'put ''cm93LHRoaXMucHJvcCk7dGhpcy5vcmlnaW5hbFZhbHVlPWwsdGhpcy5zZXRWYWx1ZShsKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtpZih0aGlzLnN0YXRlIT09bHUuRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwh''@;'; put 'put ''dGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7Y29uc3R7dG9wOmwsc3RhcnQ6YSx3aWR0aDpkLGhlaWdodDpofT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCksZj10aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGU7Zi5oZWlnaHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1g''@;'; put 'put ''JHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhgLGYubWFyZ2luPSIwcHgiLFRpKHRoaXMuc2VsZWN0V3JhcHBlcixXWCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVk''@;'; put 'put ''aXRvciIpLGQ9e2dyb3VwOkpwZX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmEuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4LTE7aD49MCYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEw''@;'; put 'put ''KX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleCsxO2g8PXRoaXMuc2VsZWN0Lmxlbmd0aC0xJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX1dLGQpfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhv''@;'; put 'put ''dC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEpwZSl9fWNsYXNzIGU0ZSBleHRlbmRzIGE5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGltZSJ9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFy''@;'; put 'put ''ZShsLGEsZCxoLGYsdiksdGhpcy5URVhUQVJFQS5kaXI9Imx0ciJ9fWZ1bmN0aW9uIFlYKGMsbCxhLGQsaCxmLHYpe29ULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSx6NyhsLGY/PyIiLCExKX1mdW5jdGlvbiBJXyhjLGwsYSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxE''@;'; put 'put ''PXYuYWxsb3dIdG1sP1lYOkFnLFo9TS5jcmVhdGVFbGVtZW50KCJESVYiKSxyZT1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoWi5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLHJlJiZaLnNldEF0dHJpYnV0ZSguLi5WNygpKSxaLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5v''@;'; put 'put ''ZGUoIlx1MjViYyIpKSxELmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxsLmluc2VydEJlZm9yZShaLGwuZmlyc3RDaGlsZCksVGkobCwiaHRBdXRvY29tcGxldGUiKSwhYy5hY0Fycm93TGlz''@;'; put 'put ''dGVuZXIpe2NvbnN0IGNlPW5ldyBqMihjKTtjLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbihiZSl7cG8oYmUudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93IikmJmMudmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLGwp''@;'; put 'put ''fSxjZS5hZGRFdmVudExpc3RlbmVyKGMucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsYy5hY0Fycm93TGlzdGVuZXIpLGMuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PntjZS5kZXN0cm95KCl9KX19ZnVuY3Rpb24gR1goYyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEs''@;'; put 'put ''ZCxoLGYsdl0pfVlYLlJFTkRFUkVSX1RZUEU9Imh0bWwiLElfLlJFTkRFUkVSX1RZUEU9ImF1dG9jb21wbGV0ZSIsR1guUkVOREVSRVJfVFlQRT0iZHJvcGRvd24iO2NvbnN0IHQ0ZT1uZXcgV2Vha01hcCxuNGU9bmV3IFdlYWtNYXAsTmF0PSJodEJhZFZhbHVlIixSXz0iZGF0YS1yb3ciLExf''@;'; put 'put ''PSJkYXRhLWNvbCIsVmF0PSJjaGVja2JveFJlbmRlcmVyIjtmdW5jdGlvbiAkWChjLGwsYSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxEPWMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztvVC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksZnVuY3Rpb24gQmF0KGMpe2xldCBs''@;'; put 'put ''PW40ZS5nZXQoYyk7aWYoIWwpe2NvbnN0e3Jvb3RFbGVtZW50OmF9PWM7bD1uZXcgajIoYyksbC5hZGRFdmVudExpc3RlbmVyKGEsImNsaWNrIixkPT5mdW5jdGlvbiBaYXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighS1goYSl8fCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJp''@;'; put 'put ''YnV0ZShMXykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoUl8pLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKExfKSwxMCk7bC5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnREZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihh''@;'; put 'put ''LCJtb3VzZXVwIixkPT5mdW5jdGlvbiBVYXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztLWChhKSYmKCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXyl8fHNldFRpbWVvdXQobC5saXN0ZW4sMTApKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+''@;'; put 'put ''ZnVuY3Rpb24gV2F0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUtYKGEpfHwhYS5oYXNBdHRyaWJ1dGUoUl8pfHwhYS5oYXNBdHRyaWJ1dGUoTF8pKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFJfKSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShMXyks''@;'; put 'put ''MTApLGY9bC5nZXRDZWxsTWV0YShkLGgpO2lmKCFmLnJlYWRPbmx5KXtsZXQgdj1udWxsO3Y9Yy50YXJnZXQuY2hlY2tlZD92b2lkIDA9PT1mLnVuY2hlY2tlZFRlbXBsYXRlfHxmLmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAhPT1mLnVuY2hlY2tlZFRlbXBsYXRlJiZmLnVuY2hlY2tlZFRlbXBs''@;'; put 'put ''YXRlLGwuc2V0RGF0YUF0Q2VsbChkLGgsdil9fShkLGMpKSxuNGUuc2V0KGMsbCl9fShjKTtsZXQgWj1mdW5jdGlvbiBqYXQoYyl7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGwuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJJbnB1dCIsbC50eXBlPSJjaGVj''@;'; put 'put ''a2JveCIsbC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxsLmNsb25lTm9kZSghMSl9KE0pO2NvbnN0IHJlPXYubGFiZWw7bGV0IGNlPSExO2lmKHR5cGVvZiB2LmNoZWNrZWRUZW1wbGF0ZT4idSImJih2LmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIHYudW5jaGVja2VkVGVtcGxh''@;'; put 'put ''dGU+InUiJiYodi51bmNoZWNrZWRUZW1wbGF0ZT0hMSkseHAobCksZj09PXYuY2hlY2tlZFRlbXBsYXRlfHxsYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1sYyh2LmNoZWNrZWRUZW1wbGF0ZSkudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpP1ouY2hlY2tlZD0hMDpmPT09''@;'; put 'put ''di51bmNoZWNrZWRUZW1wbGF0ZXx8bGMoZikudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpPT09bGModi51bmNoZWNrZWRUZW1wbGF0ZSkudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpP1ouY2hlY2tlZD0hMTpVYyhmKT9UaShaLCJub1ZhbHVlIik6KFouc3R5bGUuZGlzcGxheT0ibm9u''@;'; put 'put ''ZSIsVGkoWixOYXQpLGNlPSEwKSx2byhaLFtbUl8sYV0sW0xfLGRdXSksRCYmdm8oWixbbUUoYy5nZXRUcmFuc2xhdGVkUGhyYXNlKFouY2hlY2tlZD9oWDpmWCkpLEkyZShaLmNoZWNrZWQpLEtxZSgpXSksIWNlJiZyZSl7bGV0IHFlPSIiO2lmKHJlLnZhbHVlKXFlPSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiByZS52YWx1ZT9yZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6cmUudmFsdWU7ZWxzZSBpZihyZS5wcm9wZXJ0eSl7Y29uc3QgcHQ9Yy5nZXREYXRhQXRSb3dQcm9wKGEscmUucHJvcGVydHkpO3FlPW51bGwhPT1wdD9wdDoiIn1jb25zdCBydD1mdW5jdGlvbiB6YXQoYyxsLGEpe2Nv''@;'; put 'put ''bnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2QuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJMYWJlbCAiKyhhPyJmdWxsV2lkdGgiOiIiKTtjb25zdCBoPWMuY3JlYXRlVGV4dE5vZGUobCk7aWYoYSl7Y29uc3QgZj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmFwcGVuZENo''@;'; put 'put ''aWxkKGgpLGQuYXBwZW5kQ2hpbGQoZil9ZWxzZSBkLmFwcGVuZENoaWxkKGgpO3JldHVybiBkLmNsb25lTm9kZSghMCl9KE0scWUsITAhPT1yZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09cmUucG9zaXRpb24/cmUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKHJ0KSxsLmFwcGVuZENoaWxkKFop''@;'; put 'put ''KToocnQuYXBwZW5kQ2hpbGQoWiksWj1ydCk6KCFyZS5wb3NpdGlvbnx8ImFmdGVyIj09PXJlLnBvc2l0aW9uKSYmKHJlLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChaKSxsLmFwcGVuZENoaWxkKHJ0KSk6KHJ0Lmluc2VydEJlZm9yZShaLHJ0LmZpcnN0Q2hpbGQpLFo9cnQpKX1mdW5jdGlv''@;'; put 'put ''biBFZSgpe2xldCBxZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IHJ0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHB0PVtdLGR0PW5ldyBNYXA7bGV0IEp0PVtdLHZuPTA7aWYocnQpe2ZvcihsZXQgQ249MDtDbjxydC5sZW5ndGg7''@;'; put 'put ''Q24rKyl7Y29uc3R7cm93OnRuLGNvbDpNbn09cnRbQ25dLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpDcixjb2w6R3J9PXJ0W0NuXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IG1yPXRuO21yPD1Dcjttcis9MSlmb3IobGV0IEduPU1uO0duPD1HcjtHbis9MSl7Y29uc3QgYWk9Yy5n''@;'; put 'put ''ZXRDZWxsTWV0YShtcixHbik7aWYoYWkuaGlkZGVuKWNvbnRpbnVlO2NvbnN0IF9pPXtjaGVja2VkVGVtcGxhdGU6YWkuY2hlY2tlZFRlbXBsYXRlLHVuY2hlY2tlZFRlbXBsYXRlOmFpLnVuY2hlY2tlZFRlbXBsYXRlfTtpZigiY2hlY2tib3giIT09YWkudHlwZSl7ITA9PT1xZSYmIWFpLnJl''@;'; put 'put ''YWRPbmx5JiYoZHQuaGFzKHB0Lmxlbmd0aCk/ZHQuc2V0KHB0Lmxlbmd0aCxbLi4uZHQuZ2V0KHB0Lmxlbmd0aCksW21yLEduLG51bGxdXSk6ZHQuc2V0KHB0Lmxlbmd0aCxbW21yLEduLG51bGxdXSkpO2NvbnRpbnVlfWlmKCEwPT09YWkucmVhZE9ubHkpY29udGludWU7dHlwZW9mIGFpLmNo''@;'; put 'put ''ZWNrZWRUZW1wbGF0ZT4idSImJihhaS5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBhaS51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihhaS51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3QgT249Yy5nZXREYXRhQXRDZWxsKG1yLEduKTshMT09PXFlP1thaS5jaGVja2VkVGVtcGxhdGUsYWku''@;'; put 'put ''Y2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKE9uKT9KdC5wdXNoKFttcixHbixhaS51bmNoZWNrZWRUZW1wbGF0ZSxfaV0pOlthaS51bmNoZWNrZWRUZW1wbGF0ZSxhaS51bmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhPbikmJkp0''@;'; put 'put ''LnB1c2goW21yLEduLGFpLmNoZWNrZWRUZW1wbGF0ZSxfaV0pOkp0LnB1c2goW21yLEduLGFpLnVuY2hlY2tlZFRlbXBsYXRlLF9pXSksdm4rPTF9cHQucHVzaCh2biksdm49MH1KdD1KdC5ldmVyeShDbj0+e2xldFssLHRuXT1DbjtyZXR1cm4gdG49PT1KdFswXVsyXX0pP0p0Lm1hcChDbj0+''@;'; put 'put ''e2xldFt0bixNbixDcl09Q247cmV0dXJuW3RuLE1uLENyXX0pOkp0Lm1hcChDbj0+e2xldFt0bixNbiwsQ3JdPUNuO3JldHVyblt0bixNbixDci5jaGVja2VkVGVtcGxhdGVdfSksSnQubGVuZ3RoPjAmJnB0LmZvckVhY2goKENuLHRuKT0+e2xldCBNbj1KdC5zcGxpY2UoMCxDbik7ZHQuc2l6''@;'; put 'put ''ZSYmZHQuaGFzKHRuKSYmKE1uPVsuLi5NbiwuLi5kdC5nZXQodG4pXSksYy5zZXREYXRhQXRDZWxsKE1uKX0pfX1mdW5jdGlvbiBCZSgpe2NvbnN0IHFlPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKHFlKXtmb3IobGV0IHJ0PTA7cnQ8cWUubGVuZ3RoO3J0Kyspe2NvbnN0IHB0PXFlW3J0XS5n''@;'; put 'put ''ZXRUb3BTdGFydENvcm5lcigpLGR0PXFlW3J0XS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IEp0PXB0LnJvdztKdDw9ZHQucm93O0p0KyspZm9yKGxldCB2bj1wdC5jb2w7dm48PWR0LmNvbDt2bisrKXtpZihjLmdldENlbGxNZXRhKEp0LHZuKS5yZWFkT25seSljb250aW51ZTtjb25z''@;'; put 'put ''dCB0bj1jLmdldENlbGwoSnQsdm4pO2lmKEVwKHRuKSYmdG4ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MClyZXR1cm4hMH19cmV0dXJuITF9fSghcmV8fHJlJiYhcmUuc2VwYXJhdGVkKSYmbC5hcHBlbmRDaGlsZChaKSxjZSYmbC5hcHBlbmRDaGls''@;'; put 'put ''ZChNLmNyZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSx0NGUuaGFzKGMpfHwodDRlLnNldChjLCEwKSxmdW5jdGlvbiBiZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6KCk9PihF''@;'; put 'put ''ZSgpLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgZHQ7cmV0dXJuIG51bGw9PT0oZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZHQ/dm9pZCAwOmR0LmhpZ2hsaWdodC5pc0NlbGwoKX19LHtrZXlzOltbImVudGVyIl1dLGNhbGxiYWNrOigpPT4oRWUoKSwhQmUoKSks''@;'; put 'put ''cnVuT25seUlmOigpPT57Y29uc3QgZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiBjLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nJiZkdD8uaGlnaGxpZ2h0LmlzQ2VsbCgpJiYhYy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfX0se2tleXM6W1siZGVsZXRlIl0sWyJi''@;'; put 'put ''YWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSghMCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kdD92b2lkIDA6ZHQuaGlnaGxpZ2h0LmlzQ2VsbCgpfX1dLHtncm91cDpWYXQscmVs''@;'; put 'put ''YXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9KCkpfWZ1bmN0aW9uIEtYKGMpe3JldHVybiJJTlBVVCI9PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0dHJpYnV0ZSgidHlwZSIpfWZ1bmN0aW9uIHFYKGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxh''@;'; put 'put ''LGQsaCxmLHZdKX1TYS5nZXRTaW5nbGV0b24oKS5hZGQoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsZnVuY3Rpb24oYyxsLGEpe2NvbnN0e2xhYmVsOmQsdHlwZTpoLHJvdzpmLGNvbHVtbjp2LHByb3A6TX09bDtpZigiY2hlY2tib3giPT09aCl7aWYoZCl7Y29uc3R7dmFsdWU6RCxwcm9w''@;'; put 'put ''ZXJ0eTpafT1kO2xldCByZT1hO2lmKEQpcmU9ImZ1bmN0aW9uIj09dHlwZW9mIEQ/RChmLHYsTSxhKTpEO2Vsc2UgaWYoWil7Y29uc3QgY2U9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGYsWik7cmU9bnVsbCE9PWNlP2NlOmF9Yz1yZX1yZXR1cm4gY319KSwkWC5SRU5ERVJFUl9UWVBFPSJjaGVj''@;'; put 'put ''a2JveCIscVguUkVOREVSRVJfVFlQRT0iaGFuZHNvbnRhYmxlIjt2YXIgWFgsaTRlLEpYLGE0ZSxRWCxzNGUsR2F0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUi''@;'; put 'put ''P3NlbGY6e307ZnVuY3Rpb24gJGF0KGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCJkZWZhdWx0Iik/Yy5kZWZhdWx0OmN9ZnVuY3Rpb24gbzRlKCl7aWYoYTRlKXJldHVybiBKWDthNGU9MTtjb25zdCBjPVt7a2V5OiJa''@;'; put 'put ''aUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDcpfSx7a2V5OiJaQiIsZmFjdG9yOk1hdGgucG93KDFlMyw3KX0se2tleToiWWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw4KX0se2tleToiWUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsOCl9LHtrZXk6IlRpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQs''@;'; put 'put ''NCl9LHtrZXk6IlRCIixmYWN0b3I6TWF0aC5wb3coMWUzLDQpfSx7a2V5OiJQaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDUpfSx7a2V5OiJQQiIsZmFjdG9yOk1hdGgucG93KDFlMyw1KX0se2tleToiTWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwyKX0se2tleToiTUIiLGZhY3RvcjpNYXRo''@;'; put 'put ''LnBvdygxZTMsMil9LHtrZXk6IktpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMSl9LHtrZXk6IktCIixmYWN0b3I6TWF0aC5wb3coMWUzLDEpfSx7a2V5OiJHaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDMpfSx7a2V5OiJHQiIsZmFjdG9yOk1hdGgucG93KDFlMywzKX0se2tleToiRWlCIixm''@;'; put 'put ''YWN0b3I6TWF0aC5wb3coMTAyNCw2KX0se2tleToiRUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNil9LHtrZXk6IkIiLGZhY3RvcjoxfV07ZnVuY3Rpb24gbChEKXtyZXR1cm4gRC5yZXBsYWNlKC9bLS9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gYShELFoscmUsY2UsYmUs''@;'; put 'put ''RWUsQmUpe2lmKCFpc05hTigrRCkpcmV0dXJuK0Q7bGV0IHFlPSIiLHJ0PUQucmVwbGFjZSgvKF5bXihdKilcKCguKilcKShbXildKiQpLywiJDEkMiQzIik7aWYocnQhPT1EKXJldHVybi0xKmEocnQsWixyZSxjZSxiZSxFZSk7Zm9yKGxldCB0bj0wO3RuPGMubGVuZ3RoO3RuKyspe2xldCBN''@;'; put 'put ''bj1jW3RuXTtpZihxZT1ELnJlcGxhY2UoUmVnRXhwKGAoWzAtOSBdKSgke01uLmtleX0pJGApLCIkMSIpLHFlIT09RClyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKSpNbi5mYWN0b3J9aWYocWU9RC5yZXBsYWNlKCIlIiwiIikscWUhPT1EKXJldHVybiBhKHFlLFoscmUsY2UsYmUsRWUpLzEw''@;'; put 'put ''MDtsZXQgcHQ9cGFyc2VGbG9hdChEKTtpZihpc05hTihwdCkpcmV0dXJuO2xldCBkdD1jZShwdCk7aWYoZHQmJiIuIiE9PWR0JiYocWU9RC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7bChkdCl9JGApLCIiKSxxZSE9PUQpKXJldHVybiBhKHFlLFoscmUsY2UsYmUsRWUpO2xldCBKdD17fTtPYmpl''@;'; put 'put ''Y3Qua2V5cyhFZSkuZm9yRWFjaCh0bj0+e0p0W0VlW3RuXV09dG59KTtsZXQgdm49T2JqZWN0LmtleXMoSnQpLnNvcnQoKS5yZXZlcnNlKCksQ249dm4ubGVuZ3RoO2ZvcihsZXQgdG49MDt0bjxDbjt0bisrKXtsZXQgTW49dm5bdG5dLENyPUp0W01uXTtpZihxZT1ELnJlcGxhY2UoTW4sIiIp''@;'; put 'put ''LHFlIT09RCl7bGV0IEdyO3N3aXRjaChDcil7Y2FzZSJ0aG91c2FuZCI6R3I9TWF0aC5wb3coMTAsMyk7YnJlYWs7Y2FzZSJtaWxsaW9uIjpHcj1NYXRoLnBvdygxMCw2KTticmVhaztjYXNlImJpbGxpb24iOkdyPU1hdGgucG93KDEwLDkpO2JyZWFrO2Nhc2UidHJpbGxpb24iOkdyPU1hdGgu''@;'; put 'put ''cG93KDEwLDEyKX1yZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKSpHcn19fWZ1bmN0aW9uIGgoRCxaLHJlPSIiLGNlLGJlLEVlLEJlKXtpZigiIj09PUQpcmV0dXJuO2lmKEQ9PT1iZSlyZXR1cm4gMDtsZXQgcWU9ZnVuY3Rpb24gZChELFoscmUpe2xldCBjZT1ELnJlcGxhY2UocmUsIiIpO3Jl''@;'; put 'put ''dHVybiBjZT1jZS5yZXBsYWNlKG5ldyBSZWdFeHAoYChbMC05XSkke2woWi50aG91c2FuZHMpfShbMC05XSlgLCJnIiksIiQxJDIiKSxjZT1jZS5yZXBsYWNlKFouZGVjaW1hbCwiLiIpLGNlfShELFoscmUpO3JldHVybiBhKHFlLFoscmUsY2UsYmUsRWUpfXJldHVybiBKWD17dW5mb3JtYXQ6''@;'; put 'put ''ZnVuY3Rpb24gTShELFope2NvbnN0IHJlPXJKKCk7bGV0IHJ0LGNlPXJlLmN1cnJlbnREZWxpbWl0ZXJzKCksYmU9cmUuY3VycmVudEN1cnJlbmN5KCkuc3ltYm9sLEVlPXJlLmN1cnJlbnRPcmRpbmFsKCksQmU9cmUuZ2V0WmVyb0Zvcm1hdCgpLHFlPXJlLmN1cnJlbnRBYmJyZXZpYXRpb25z''@;'; put 'put ''KCk7aWYoInN0cmluZyI9PXR5cGVvZiBEKXJ0PWZ1bmN0aW9uIGYoRCxaKXtpZighRC5pbmRleE9mKCI6Iil8fCI6Ij09PVoudGhvdXNhbmRzKXJldHVybiExO2xldCBjZT1ELnNwbGl0KCI6Iik7aWYoMyE9PWNlLmxlbmd0aClyZXR1cm4hMTtsZXQgRWU9K2NlWzFdLEJlPStjZVsyXTtyZXR1''@;'; put 'put ''cm4haXNOYU4oK2NlWzBdKSYmIWlzTmFOKEVlKSYmIWlzTmFOKEJlKX0oRCxjZSk/ZnVuY3Rpb24gdihEKXtsZXQgWj1ELnNwbGl0KCI6Iik7cmV0dXJuK1pbMl0rNjAqK1pbMV0rMzYwMCorWlswXX0oRCk6aChELGNlLGJlLEVlLEJlLHFlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgRCly''@;'; put 'put ''ZXR1cm47cnQ9RH1pZih2b2lkIDAhPT1ydClyZXR1cm4gcnR9fX1mdW5jdGlvbiBlSigpe2lmKHM0ZSlyZXR1cm4gUVg7czRlPTE7bGV0IGM9bzRlKCk7Y29uc3QgbD0vXlthLXpdezIsM30oLVthLXpBLVpdezR9KT8oLShbQS1aXXsyfXxbMC05XXszfSkpPyQvLFo9e291dHB1dDp7dHlwZToi''@;'; put 'put ''c3RyaW5nIix2YWxpZFZhbHVlczpbImN1cnJlbmN5IiwicGVyY2VudCIsImJ5dGUiLCJ0aW1lIiwib3JkaW5hbCIsIm51bWJlciJdfSxiYXNlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiZGVjaW1hbCIsImJpbmFyeSIsImdlbmVyYWwiXSxyZXN0cmljdGlvbjoocnQscHQpPT4iYnl0''@;'; put 'put ''ZSI9PT1wdC5vdXRwdXQsbWVzc2FnZToiYGJhc2VgIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgYGJ5dGVgIixtYW5kYXRvcnk6cnQ9PiJieXRlIj09PXJ0Lm91dHB1dH0sY2hhcmFjdGVyaXN0aWM6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246cnQ9PnJ0Pj0w''@;'; put 'put ''LG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxwcmVmaXg6InN0cmluZyIscG9zdGZpeDoic3RyaW5nIixmb3JjZUF2ZXJhZ2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJ0cmlsbGlvbiIsImJpbGxpb24iLCJtaWxsaW9uIiwidGhvdXNhbmQiXX0sYXZlcmFnZToiYm9v''@;'; put 'put ''bGVhbiIsbG93UHJlY2lzaW9uOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoocnQscHQpPT4hMD09PXB0LmF2ZXJhZ2UsbWVzc2FnZToiYGxvd1ByZWNpc2lvbmAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG9wdGlvbiBgYXZlcmFnZWAgaXMgc2V0In0sY3VycmVuY3lQb3Np''@;'; put 'put ''dGlvbjp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInByZWZpeCIsImluZml4IiwicG9zdGZpeCJdfSxjdXJyZW5jeVN5bWJvbDoic3RyaW5nIix0b3RhbExlbmd0aDp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbnM6W3tyZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUg''@;'; put 'put ''bXVzdCBiZSBwb3NpdGl2ZSJ9LHtyZXN0cmljdGlvbjoocnQscHQpPT4hcHQuZXhwb25lbnRpYWwsbWVzc2FnZToiYHRvdGFsTGVuZ3RoYCBpcyBpbmNvbXBhdGlibGUgd2l0aCBgZXhwb25lbnRpYWxgIn1dfSxtYW50aXNzYTp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpydD0+cnQ+PTAs''@;'; put 'put ''bWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LG9wdGlvbmFsTWFudGlzc2E6ImJvb2xlYW4iLHRyaW1NYW50aXNzYToiYm9vbGVhbiIscm91bmRpbmdGdW5jdGlvbjoiZnVuY3Rpb24iLG9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM6ImJvb2xlYW4iLHRob3VzYW5kU2VwYXJhdGVkOiJi''@;'; put 'put ''b29sZWFuIixzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ImJvb2xlYW4iLGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOiJzdHJpbmciLG1pbGxp''@;'; put 'put ''b246InN0cmluZyIsYmlsbGlvbjoic3RyaW5nIix0cmlsbGlvbjoic3RyaW5nIn19LG5lZ2F0aXZlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsic2lnbiIsInBhcmVudGhlc2lzIl19LGZvcmNlU2lnbjoiYm9vbGVhbiIsZXhwb25lbnRpYWw6e3R5cGU6ImJvb2xlYW4ifSxwcmVmaXhT''@;'; put 'put ''eW1ib2w6e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihydCxwdCk9PiJwZXJjZW50Ij09PXB0Lm91dHB1dCxtZXNzYWdlOiJgcHJlZml4U3ltYm9sYCBjYW4gYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgYHBlcmNlbnRgIn19LHJlPXtsYW5ndWFnZVRhZzp7dHlwZToi''@;'; put 'put ''c3RyaW5nIixtYW5kYXRvcnk6ITAscmVzdHJpY3Rpb246cnQ9PnJ0Lm1hdGNoKGwpLG1lc3NhZ2U6InRoZSBsYW5ndWFnZSB0YWcgbXVzdCBmb2xsb3cgdGhlIEJDUCA0NyBzcGVjaWZpY2F0aW9uIChzZWUgaHR0cHM6Ly90b29scy5pZWZ0Lm9yZy9odG1sL2JjcDQ3KSJ9LGRlbGltaXRlcnM6''@;'; put 'put ''e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kczoic3RyaW5nIixkZWNpbWFsOiJzdHJpbmciLHRob3VzYW5kc1NpemU6Im51bWJlciJ9LG1hbmRhdG9yeTohMH0sYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6e3R5cGU6InN0cmluZyIsbWFu''@;'; put 'put ''ZGF0b3J5OiEwfSxtaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sYmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LHRyaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH19LG1hbmRhdG9yeTohMH0sc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkQ3VycmVuY3k6ImJvb2xlYW4iLG9yZGluYWw6e3R5cGU6ImZ1bmN0aW9uIixtYW5kYXRvcnk6ITB9LGJ5dGVzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntiaW5hcnlTdWZmaXhlczoib2JqZWN0IixkZWNpbWFsU3VmZml4ZXM6Im9iamVjdCJ9fSxjdXJyZW5jeTp7dHlw''@;'; put 'put ''ZToib2JqZWN0IixjaGlsZHJlbjp7c3ltYm9sOiJzdHJpbmciLHBvc2l0aW9uOiJzdHJpbmciLGNvZGU6InN0cmluZyJ9LG1hbmRhdG9yeTohMH0sZGVmYXVsdHM6ImZvcm1hdCIsb3JkaW5hbEZvcm1hdDoiZm9ybWF0IixieXRlRm9ybWF0OiJmb3JtYXQiLHBlcmNlbnRhZ2VGb3JtYXQ6ImZv''@;'; put 'put ''cm1hdCIsY3VycmVuY3lGb3JtYXQ6ImZvcm1hdCIsdGltZURlZmF1bHRzOiJmb3JtYXQiLGZvcm1hdHM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2ZvdXJEaWdpdHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRh''@;'; put 'put ''dG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfX19fTtmdW5jdGlvbiBiZShydCl7cmV0dXJuIHZvaWQgMCE9PWMudW5mb3JtYXQocnQp''@;'; put 'put ''fWZ1bmN0aW9uIEVlKHJ0LHB0LGR0LEp0PSExKXtsZXQgdm49T2JqZWN0LmtleXMocnQpLm1hcChDbj0+e2lmKCFwdFtDbl0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9IEludmFsaWQga2V5OiAke0NufWApLCExO2xldCB0bj1ydFtDbl0sTW49cHRbQ25dO2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgTW4mJihNbj17dHlwZTpNbn0pLCJmb3JtYXQiPT09TW4udHlwZSl7aWYoIUVlKHRuLFosYFtWYWxpZGF0ZSAke0NufV1gLCEwKSlyZXR1cm4hMX1lbHNlIGlmKHR5cGVvZiB0biE9PU1uLnR5cGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IHR5cGUgbWlzbWF0Y2hlZDog''@;'; put 'put ''IiR7TW4udHlwZX0iIGV4cGVjdGVkLCAiJHt0eXBlb2YgdG59IiBwcm92aWRlZGApLCExO2lmKE1uLnJlc3RyaWN0aW9ucyYmTW4ucmVzdHJpY3Rpb25zLmxlbmd0aCl7bGV0IENyPU1uLnJlc3RyaWN0aW9ucy5sZW5ndGg7Zm9yKGxldCBHcj0wO0dyPENyO0dyKyspe2xldHtyZXN0cmljdGlv''@;'; put 'put ''bjptcixtZXNzYWdlOkdufT1Nbi5yZXN0cmljdGlvbnNbR3JdO2lmKCFtcih0bixydCkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6ICR7R259YCksITF9fXJldHVybiBNbi5yZXN0cmljdGlvbiYmIU1uLnJlc3RyaWN0aW9uKHRuLHJ0KT8oY29uc29s''@;'; put 'put ''ZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogJHtNbi5tZXNzYWdlfWApLCExKTpNbi52YWxpZFZhbHVlcyYmLTE9PT1Nbi52YWxpZFZhbHVlcy5pbmRleE9mKHRuKT8oY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogbXVzdCBiZSBhbW9uZyAke0pT''@;'; put 'put ''T04uc3RyaW5naWZ5KE1uLnZhbGlkVmFsdWVzKX0sICIke3RufSIgcHJvdmlkZWRgKSwhMSk6IShNbi5jaGlsZHJlbiYmIUVlKHRuLE1uLmNoaWxkcmVuLGBbVmFsaWRhdGUgJHtDbn1dYCkpfSk7cmV0dXJuIEp0fHx2bi5wdXNoKC4uLk9iamVjdC5rZXlzKHB0KS5tYXAoQ249PntsZXQgdG49''@;'; put 'put ''cHRbQ25dO2lmKCJzdHJpbmciPT10eXBlb2YgdG4mJih0bj17dHlwZTp0bn0pLHRuLm1hbmRhdG9yeSl7bGV0IE1uPXRuLm1hbmRhdG9yeTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTW4mJihNbj1NbihydCkpLE1uJiZ2b2lkIDA9PT1ydFtDbl0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9''@;'; put 'put ''IE1pc3NpbmcgbWFuZGF0b3J5IGtleSAiJHtDbn0iYCksITF9cmV0dXJuITB9KSksdm4ucmVkdWNlKChDbix0bik9PkNuJiZ0biwhMCl9ZnVuY3Rpb24gQmUocnQpe3JldHVybiBFZShydCxaLCJbVmFsaWRhdGUgZm9ybWF0XSIpfXJldHVybiBRWD17dmFsaWRhdGU6ZnVuY3Rpb24gY2UocnQs''@;'; put 'put ''cHQpe2xldCBkdD1iZShydCksSnQ9QmUocHQpO3JldHVybiBkdCYmSnR9LHZhbGlkYXRlRm9ybWF0OkJlLHZhbGlkYXRlSW5wdXQ6YmUsdmFsaWRhdGVMYW5ndWFnZTpmdW5jdGlvbiBxZShydCl7cmV0dXJuIEVlKHJ0LHJlLCJbVmFsaWRhdGUgbGFuZ3VhZ2VdIil9fX12YXIgbkosbDRlLHRK''@;'; put 'put ''PXtwYXJzZUZvcm1hdDpmdW5jdGlvbiBkb3QoYyxsPXt9KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGM/YzooYz1mdW5jdGlvbiBxYXQoYyxsKXtsZXQgYT1jLm1hdGNoKC9eeyhbXn1dKil9Lyk7cmV0dXJuIGE/KGwucHJlZml4PWFbMV0sYy5zbGljZShhWzBdLmxlbmd0aCkpOmN9KGMsbCks''@;'; put 'put ''Yz1mdW5jdGlvbiBYYXQoYyxsKXtsZXQgYT1jLm1hdGNoKC97KFtefV0qKX0kLyk7cmV0dXJuIGE/KGwucG9zdGZpeD1hWzFdLGMuc2xpY2UoMCwtYVswXS5sZW5ndGgpKTpjfShjLGwpLGZ1bmN0aW9uIEphdChjLGwpe2lmKC0xPT09Yy5pbmRleE9mKCIkIikpe2lmKC0xPT09Yy5pbmRleE9m''@;'; put 'put ''KCIlIikpcmV0dXJuLTEhPT1jLmluZGV4T2YoImJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZ2VuZXJhbCIpKTotMSE9PWMuaW5kZXhPZigiYiIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImJpbmFyeSIpKTotMSE9PWMuaW5kZXhPZigiZCIpPyhsLm91dHB1dD0i''@;'; put 'put ''Ynl0ZSIsdm9pZChsLmJhc2U9ImRlY2ltYWwiKSk6dm9pZCgtMT09PWMuaW5kZXhPZigiOiIpPy0xIT09Yy5pbmRleE9mKCJvIikmJihsLm91dHB1dD0ib3JkaW5hbCIpOmwub3V0cHV0PSJ0aW1lIik7bC5vdXRwdXQ9InBlcmNlbnQifWVsc2UgbC5vdXRwdXQ9ImN1cnJlbmN5In0oYyxsKSxm''@;'; put 'put ''dW5jdGlvbiB0b3QoYyxsKXtsZXQgYT1jLm1hdGNoKC9bMS05XStbMC05XSovKTthJiYobC50b3RhbExlbmd0aD0rYVswXSl9KGMsbCksZnVuY3Rpb24gbm90KGMsbCl7bGV0IGQ9Yy5zcGxpdCgiLiIpWzBdLm1hdGNoKC8wKy8pO2QmJihsLmNoYXJhY3RlcmlzdGljPWRbMF0ubGVuZ3RoKX0o''@;'; put 'put ''YyxsKSxmdW5jdGlvbiBsb3QoYyxsKXtpZigtMSE9PWMuaW5kZXhPZigiLiIpKXtsZXQgYT1jLnNwbGl0KCIuIilbMF07bC5vcHRpb25hbENoYXJhY3RlcmlzdGljPS0xPT09YS5pbmRleE9mKCIwIil9fShjLGwpLGZ1bmN0aW9uIGFvdChjLGwpey0xIT09Yy5pbmRleE9mKCJhIikmJihsLmF2''@;'; put 'put ''ZXJhZ2U9ITApfShjLGwpLGZ1bmN0aW9uIG9vdChjLGwpey0xIT09Yy5pbmRleE9mKCJLIik/bC5mb3JjZUF2ZXJhZ2U9InRob3VzYW5kIjotMSE9PWMuaW5kZXhPZigiTSIpP2wuZm9yY2VBdmVyYWdlPSJtaWxsaW9uIjotMSE9PWMuaW5kZXhPZigiQiIpP2wuZm9yY2VBdmVyYWdlPSJiaWxs''@;'; put 'put ''aW9uIjotMSE9PWMuaW5kZXhPZigiVCIpJiYobC5mb3JjZUF2ZXJhZ2U9InRyaWxsaW9uIil9KGMsbCksZnVuY3Rpb24gcm90KGMsbCl7bGV0IGE9Yy5zcGxpdCgiLiIpWzFdO2lmKGEpe2xldCBkPWEubWF0Y2goLzArLyk7ZCYmKGwubWFudGlzc2E9ZFswXS5sZW5ndGgpfX0oYyxsKSxmdW5j''@;'; put 'put ''dGlvbiBzb3QoYyxsKXtjLm1hdGNoKC9cW1wuXS8pP2wub3B0aW9uYWxNYW50aXNzYT0hMDpjLm1hdGNoKC9cLi8pJiYobC5vcHRpb25hbE1hbnRpc3NhPSExKX0oYyxsKSxmdW5jdGlvbiBpb3QoYyxsKXtjb25zdCBhPWMuc3BsaXQoIi4iKVsxXTthJiYobC50cmltTWFudGlzc2E9LTEhPT1h''@;'; put 'put ''LmluZGV4T2YoIlsiKSl9KGMsbCksZnVuY3Rpb24gUWF0KGMsbCl7LTEhPT1jLmluZGV4T2YoIiwiKSYmKGwudGhvdXNhbmRTZXBhcmF0ZWQ9ITApfShjLGwpLGZ1bmN0aW9uIGVvdChjLGwpey0xIT09Yy5pbmRleE9mKCIgIikmJihsLnNwYWNlU2VwYXJhdGVkPSEwLGwuc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeT0hMCwobC5hdmVyYWdlfHxsLmZvcmNlQXZlcmFnZSkmJihsLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uPSEwKSl9KGMsbCksZnVuY3Rpb24gY290KGMsbCl7Yy5tYXRjaCgvXlwrP1woW14pXSpcKSQvKSYmKGwubmVnYXRpdmU9InBhcmVudGhlc2lzIiksYy5tYXRjaCgv''@;'; put 'put ''XlwrPy0vKSYmKGwubmVnYXRpdmU9InNpZ24iKX0oYyxsKSxmdW5jdGlvbiB1b3QoYyxsKXtjLm1hdGNoKC9eXCsvKSYmKGwuZm9yY2VTaWduPSEwKX0oYyxsKSxsKX19O2Z1bmN0aW9uIHJKKCl7aWYobDRlKXJldHVybiBuSjtsNGU9MTtjb25zdCBjPWZ1bmN0aW9uIEthdCgpe3JldHVybiBp''@;'; put 'put ''NGV8fChpNGU9MSxYWD17bGFuZ3VhZ2VUYWc6ImVuLVVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxzcGFjZVNlcGFyYXRlZDohMSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKGMpe2xldCBsPWMlMTA7cmV0dXJuIDE9PX5+KGMlMTAwLzEwKT8idGgiOjE9PT1sPyJzdCI6Mj09PWw/Im5kIjozPT09bD8icmQiOiJ0aCJ9LGJ5dGVzOntiaW5hcnlTdWZmaXhlczpbIkIiLCJLaUIiLCJNaUIiLCJHaUIiLCJUaUIiLCJQaUIiLCJFaUIiLCJaaUIiLCJZaUIi''@;'; put 'put ''XSxkZWNpbWFsU3VmZml4ZXM6WyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiLCJQQiIsIkVCIiwiWkIiLCJZQiJdfSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6''@;'; put 'put ''NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KSxYWH0oKSxsPWVKKCksYT10Sjts''@;'; put 'put ''ZXQgaCxkPXt9LGY9e30sdj1udWxsLE09e307ZnVuY3Rpb24gRChyZSl7aD1yZX1mdW5jdGlvbiBaKCl7cmV0dXJuIGZbaF19cmV0dXJuIGQubGFuZ3VhZ2VzPSgpPT5PYmplY3QuYXNzaWduKHt9LGYpLGQuY3VycmVudExhbmd1YWdlPSgpPT5oLGQuY3VycmVudEJ5dGVzPSgpPT5aKCkuYnl0''@;'; put 'put ''ZXN8fHt9LGQuY3VycmVudEN1cnJlbmN5PSgpPT5aKCkuY3VycmVuY3ksZC5jdXJyZW50QWJicmV2aWF0aW9ucz0oKT0+WigpLmFiYnJldmlhdGlvbnMsZC5jdXJyZW50RGVsaW1pdGVycz0oKT0+WigpLmRlbGltaXRlcnMsZC5jdXJyZW50T3JkaW5hbD0oKT0+WigpLm9yZGluYWwsZC5jdXJy''@;'; put 'put ''ZW50RGVmYXVsdHM9KCk9Pk9iamVjdC5hc3NpZ24oe30sWigpLmRlZmF1bHRzLE0pLGQuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLm9yZGluYWxGb3JtYXQpLGQuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0''@;'; put 'put ''PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLmJ5dGVGb3JtYXQpLGQuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLnBlcmNlbnRhZ2VGb3JtYXQpLGQuY3VycmVudEN1''@;'; put 'put ''cnJlbmN5RGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5jdXJyZW5jeUZvcm1hdCksZC5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkudGltZUZvcm1hdCks''@;'; put 'put ''ZC5zZXREZWZhdWx0cz1yZT0+e3JlPWEucGFyc2VGb3JtYXQocmUpLGwudmFsaWRhdGVGb3JtYXQocmUpJiYoTT1yZSl9LGQuZ2V0WmVyb0Zvcm1hdD0oKT0+dixkLnNldFplcm9Gb3JtYXQ9cmU9PnY9InN0cmluZyI9PXR5cGVvZiByZT9yZTpudWxsLGQuaGFzWmVyb0Zvcm1hdD0oKT0+bnVs''@;'; put 'put ''bCE9PXYsZC5sYW5ndWFnZURhdGE9cmU9PntpZihyZSl7aWYoZltyZV0pcmV0dXJuIGZbcmVdO3Rocm93IG5ldyBFcnJvcihgVW5rbm93biB0YWcgIiR7cmV9ImApfXJldHVybiBaKCl9LGQucmVnaXN0ZXJMYW5ndWFnZT0ocmUsY2U9ITEpPT57aWYoIWwudmFsaWRhdGVMYW5ndWFnZShyZSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxhbmd1YWdlIGRhdGEiKTtmW3JlLmxhbmd1YWdlVGFnXT1yZSxjZSYmRChyZS5sYW5ndWFnZVRhZyl9LGQuc2V0TGFuZ3VhZ2U9KHJlLGNlPWMubGFuZ3VhZ2VUYWcpPT57aWYoIWZbcmVdKXtsZXQgYmU9cmUuc3BsaXQoIi0iKVswXSxFZT1PYmpl''@;'; put 'put ''Y3Qua2V5cyhmKS5maW5kKEJlPT5CZS5zcGxpdCgiLSIpWzBdPT09YmUpO3JldHVybiBmW0VlXT92b2lkIEQoRWUpOnZvaWQgRChjZSl9RChyZSl9LGQucmVnaXN0ZXJMYW5ndWFnZShjKSxoPWMubGFuZ3VhZ2VUYWcsbko9ZH12YXIgYzRlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oYyl7IWZ1''@;'; put 'put ''bmN0aW9uKGwpe3ZhciBhLGQ9L14tPyg/OlxkKyg/OlwuXGQqKT98XC5cZCspKD86ZVsrLV0/XGQrKT8kL2ksaD1NYXRoLmNlaWwsZj1NYXRoLmZsb29yLHY9IltCaWdOdW1iZXIgRXJyb3JdICIsTT12KyJOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGln''@;'; put 'put ''aXRzOiAiLEQ9MWUxNCxaPTE0LHJlPTkwMDcxOTkyNTQ3NDA5OTEsY2U9WzEsMTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUxMiwxZTEzXSxiZT0xZTcsRWU9MWU5O2Z1bmN0aW9uIHFlKHRuKXt2YXIgTW49MHx0bjtyZXR1cm4gdG4+MHx8dG49PT1Nbj9N''@;'; put 'put ''bjpNbi0xfWZ1bmN0aW9uIHJ0KHRuKXtmb3IodmFyIE1uLENyLEdyPTEsbXI9dG4ubGVuZ3RoLEduPXRuWzBdKyIiO0dyPG1yOyl7Zm9yKE1uPXRuW0dyKytdKyIiLENyPVotTW4ubGVuZ3RoO0NyLS07TW49IjAiK01uKTtHbis9TW59Zm9yKG1yPUduLmxlbmd0aDs0OD09PUduLmNoYXJDb2Rl''@;'; put 'put ''QXQoLS1tcik7KTtyZXR1cm4gR24uc2xpY2UoMCxtcisxfHwxKX1mdW5jdGlvbiBwdCh0bixNbil7dmFyIENyLEdyLG1yPXRuLmMsR249TW4uYyxhaT10bi5zLF9pPU1uLnMsT249dG4uZSx6cj1Nbi5lO2lmKCFhaXx8IV9pKXJldHVybiBudWxsO2lmKEdyPUduJiYhR25bMF0sKENyPW1yJiYh''@;'; put 'put ''bXJbMF0pfHxHcilyZXR1cm4gQ3I/R3I/MDotX2k6YWk7aWYoYWkhPV9pKXJldHVybiBhaTtpZihDcj1haTwwLEdyPU9uPT16ciwhbXJ8fCFHbilyZXR1cm4gR3I/MDohbXJeQ3I/MTotMTtpZighR3IpcmV0dXJuIE9uPnpyXkNyPzE6LTE7Zm9yKF9pPShPbj1tci5sZW5ndGgpPCh6cj1Hbi5s''@;'; put 'put ''ZW5ndGgpP09uOnpyLGFpPTA7YWk8X2k7YWkrKylpZihtclthaV0hPUduW2FpXSlyZXR1cm4gbXJbYWldPkduW2FpXV5Dcj8xOi0xO3JldHVybiBPbj09enI/MDpPbj56cl5Dcj8xOi0xfWZ1bmN0aW9uIGR0KHRuLE1uLENyLEdyKXtpZih0bjxNbnx8dG4+Q3J8fHRuIT09Zih0bikpdGhyb3cg''@;'; put 'put ''RXJyb3IodisoR3J8fCJBcmd1bWVudCIpKygibnVtYmVyIj09dHlwZW9mIHRuP3RuPE1ufHx0bj5Dcj8iIG91dCBvZiByYW5nZTogIjoiIG5vdCBhbiBpbnRlZ2VyOiAiOiIgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogIikrU3RyaW5nKHRuKSl9ZnVuY3Rpb24gSnQodG4pe3ZhciBNbj10bi5j''@;'; put 'put ''Lmxlbmd0aC0xO3JldHVybiBxZSh0bi5lL1opPT1NbiYmdG4uY1tNbl0lMiE9MH1mdW5jdGlvbiB2bih0bixNbil7cmV0dXJuKHRuLmxlbmd0aD4xP3RuLmNoYXJBdCgwKSsiLiIrdG4uc2xpY2UoMSk6dG4pKyhNbjwwPyJlIjoiZSsiKStNbn1mdW5jdGlvbiBDbih0bixNbixDcil7dmFyIEdy''@;'; put 'put ''LG1yO2lmKE1uPDApe2Zvcihtcj1DcisiLiI7KytNbjttcis9Q3IpO3RuPW1yK3RufWVsc2UgaWYoKytNbj4oR3I9dG4ubGVuZ3RoKSl7Zm9yKG1yPUNyLE1uLT1HcjstLU1uO21yKz1Dcik7dG4rPW1yfWVsc2UgTW48R3ImJih0bj10bi5zbGljZSgwLE1uKSsiLiIrdG4uc2xpY2UoTW4pKTty''@;'; put 'put ''ZXR1cm4gdG59YT1mdW5jdGlvbiBCZSh0bil7dmFyIE1uLENyLEdyLG9uLHluLG1yPUh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SHQsdG9TdHJpbmc6bnVsbCx2YWx1ZU9mOm51bGx9LEduPW5ldyBIdCgxKSxhaT0yMCxfaT00LE9uPS03LHpyPTIxLEpuPS0xZTcsSXI9MWU3LCRyPSExLHdp''@;'; put 'put ''PTEsZWE9MCxmYT17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFsU2VwYXJhdG9yOiIuIixmcmFjdGlvbkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6Ilx4YTAiLHN1ZmZpeDoiIn0sdnQ9IjAxMjM0''@;'; put 'put ''NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsTnQ9ITA7ZnVuY3Rpb24gSHQob24seW4pe3ZhciBwbixwciwkbixkcixVcixabixzcixOcixNcj10aGlzO2lmKCEoTXIgaW5zdGFuY2VvZiBIdCkpcmV0dXJuIG5ldyBIdChvbix5bik7aWYobnVsbD09eW4pe2lmKG9uJiYhMD09PW9u''@;'; put 'put ''Ll9pc0JpZ051bWJlcilyZXR1cm4gTXIucz1vbi5zLHZvaWQoIW9uLmN8fG9uLmU+SXI/TXIuYz1Nci5lPW51bGw6b24uZTxKbj9Nci5jPVtNci5lPTBdOihNci5lPW9uLmUsTXIuYz1vbi5jLnNsaWNlKCkpKTtpZigoWm49Im51bWJlciI9PXR5cGVvZiBvbikmJjAqb249PTApe2lmKE1yLnM9''@;'; put 'put ''MS9vbjwwPyhvbj0tb24sLTEpOjEsb249PT1+fm9uKXtmb3IoZHI9MCxVcj1vbjtVcj49MTA7VXIvPTEwLGRyKyspO3JldHVybiB2b2lkKGRyPklyP01yLmM9TXIuZT1udWxsOihNci5lPWRyLE1yLmM9W29uXSkpfU5yPVN0cmluZyhvbil9ZWxzZXtpZighZC50ZXN0KE5yPVN0cmluZyhvbikp''@;'; put 'put ''KXJldHVybiBHcihNcixOcixabik7TXIucz00NT09TnIuY2hhckNvZGVBdCgwKT8oTnI9TnIuc2xpY2UoMSksLTEpOjF9KGRyPU5yLmluZGV4T2YoIi4iKSk+LTEmJihOcj1Oci5yZXBsYWNlKCIuIiwiIikpLChVcj1Oci5zZWFyY2goL2UvaSkpPjA/KGRyPDAmJihkcj1VciksZHIrPStOci5z''@;'; put 'put ''bGljZShVcisxKSxOcj1Oci5zdWJzdHJpbmcoMCxVcikpOmRyPDAmJihkcj1Oci5sZW5ndGgpfWVsc2V7aWYoZHQoeW4sMix2dC5sZW5ndGgsIkJhc2UiKSwxMD09eW4mJk50KXJldHVybiBIcihNcj1uZXcgSHQob24pLGFpK01yLmUrMSxfaSk7aWYoTnI9U3RyaW5nKG9uKSxabj0ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIG9uKXtpZigwKm9uIT0wKXJldHVybiBHcihNcixOcixabix5bik7aWYoTXIucz0xL29uPDA/KE5yPU5yLnNsaWNlKDEpLC0xKToxLEh0LkRFQlVHJiZOci5yZXBsYWNlKC9eMFwuMCp8XC4vLCIiKS5sZW5ndGg+MTUpdGhyb3cgRXJyb3IoTStvbil9ZWxzZSBNci5zPTQ1PT09''@;'; put 'put ''TnIuY2hhckNvZGVBdCgwKT8oTnI9TnIuc2xpY2UoMSksLTEpOjE7Zm9yKHBuPXZ0LnNsaWNlKDAseW4pLGRyPVVyPTAsc3I9TnIubGVuZ3RoO1VyPHNyO1VyKyspaWYocG4uaW5kZXhPZihwcj1Oci5jaGFyQXQoVXIpKTwwKXtpZigiLiI9PXByKXtpZihVcj5kcil7ZHI9c3I7Y29udGludWV9''@;'; put 'put ''fWVsc2UgaWYoISRuJiYoTnI9PU5yLnRvVXBwZXJDYXNlKCkmJihOcj1Oci50b0xvd2VyQ2FzZSgpKXx8TnI9PU5yLnRvTG93ZXJDYXNlKCkmJihOcj1Oci50b1VwcGVyQ2FzZSgpKSkpeyRuPSEwLFVyPS0xLGRyPTA7Y29udGludWV9cmV0dXJuIEdyKE1yLFN0cmluZyhvbiksWm4seW4pfVpu''@;'; put 'put ''PSExLChkcj0oTnI9Q3IoTnIseW4sMTAsTXIucykpLmluZGV4T2YoIi4iKSk+LTE/TnI9TnIucmVwbGFjZSgiLiIsIiIpOmRyPU5yLmxlbmd0aH1mb3IoVXI9MDs0OD09PU5yLmNoYXJDb2RlQXQoVXIpO1VyKyspO2Zvcihzcj1Oci5sZW5ndGg7NDg9PT1Oci5jaGFyQ29kZUF0KC0tc3IpOyk7''@;'; put 'put ''aWYoTnI9TnIuc2xpY2UoVXIsKytzcikpe2lmKHNyLT1VcixabiYmSHQuREVCVUcmJnNyPjE1JiYob24+cmV8fG9uIT09ZihvbikpKXRocm93IEVycm9yKE0rTXIucypvbik7aWYoKGRyPWRyLVVyLTEpPklyKU1yLmM9TXIuZT1udWxsO2Vsc2UgaWYoZHI8Sm4pTXIuYz1bTXIuZT0wXTtlbHNl''@;'; put 'put ''e2lmKE1yLmU9ZHIsTXIuYz1bXSxVcj0oZHIrMSklWixkcjwwJiYoVXIrPVopLFVyPHNyKXtmb3IoVXImJk1yLmMucHVzaCgrTnIuc2xpY2UoMCxVcikpLHNyLT1aO1VyPHNyOylNci5jLnB1c2goK05yLnNsaWNlKFVyLFVyKz1aKSk7VXI9Wi0oTnI9TnIuc2xpY2UoVXIpKS5sZW5ndGh9ZWxz''@;'; put 'put ''ZSBVci09c3I7Zm9yKDtVci0tO05yKz0iMCIpO01yLmMucHVzaCgrTnIpfX1lbHNlIE1yLmM9W01yLmU9MF19ZnVuY3Rpb24gSG4ob24seW4scG4scHIpe3ZhciAkbixkcixVcixabixzcjtpZihudWxsPT1wbj9wbj1faTpkdChwbiwwLDgpLCFvbi5jKXJldHVybiBvbi50b1N0cmluZygpO2lm''@;'; put 'put ''KCRuPW9uLmNbMF0sVXI9b24uZSxudWxsPT15bilzcj1ydChvbi5jKSxzcj0xPT1wcnx8Mj09cHImJihVcjw9T258fFVyPj16cik/dm4oc3IsVXIpOkNuKHNyLFVyLCIwIik7ZWxzZSBpZihkcj0ob249SHIobmV3IEh0KG9uKSx5bixwbikpLmUsWm49KHNyPXJ0KG9uLmMpKS5sZW5ndGgsMT09''@;'; put 'put ''cHJ8fDI9PXByJiYoeW48PWRyfHxkcjw9T24pKXtmb3IoO1puPHluO3NyKz0iMCIsWm4rKyk7c3I9dm4oc3IsZHIpfWVsc2UgaWYoeW4tPVVyLHNyPUNuKHNyLGRyLCIwIiksZHIrMT5abil7aWYoLS15bj4wKWZvcihzcis9Ii4iO3luLS07c3IrPSIwIik7fWVsc2UgaWYoKHluKz1kci1abik+''@;'; put 'put ''MClmb3IoZHIrMT09Wm4mJihzcis9Ii4iKTt5bi0tO3NyKz0iMCIpO3JldHVybiBvbi5zPDAmJiRuPyItIitzcjpzcn1mdW5jdGlvbiB0cihvbix5bil7Zm9yKHZhciBwbixwciwkbj0xLGRyPW5ldyBIdChvblswXSk7JG48b24ubGVuZ3RoOyRuKyspKCEocHI9bmV3IEh0KG9uWyRuXSkpLnN8''@;'; put 'put ''fChwbj1wdChkcixwcikpPT09eW58fDA9PT1wbiYmZHIucz09PXluKSYmKGRyPXByKTtyZXR1cm4gZHJ9ZnVuY3Rpb24gYXIob24seW4scG4pe2Zvcih2YXIgcHI9MSwkbj15bi5sZW5ndGg7IXluWy0tJG5dO3luLnBvcCgpKTtmb3IoJG49eW5bMF07JG4+PTEwOyRuLz0xMCxwcisrKTtyZXR1''@;'; put 'put ''cm4ocG49cHIrcG4qWi0xKT5Jcj9vbi5jPW9uLmU9bnVsbDpwbjxKbj9vbi5jPVtvbi5lPTBdOihvbi5lPXBuLG9uLmM9eW4pLG9ufWZ1bmN0aW9uIEhyKG9uLHluLHBuLHByKXt2YXIgJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnI9b24uYyxhYT1jZTtpZihacil7ZTp7Zm9yKCRuPTEsWm49WnJb''@;'; put 'put ''MF07Wm4+PTEwO1puLz0xMCwkbisrKTtpZigoZHI9eW4tJG4pPDApZHIrPVosc3I9WnJbTnI9MF0sTXI9Zihzci9hYVskbi0oVXI9eW4pLTFdJTEwKTtlbHNlIGlmKChOcj1oKChkcisxKS9aKSk+PVpyLmxlbmd0aCl7aWYoIXByKWJyZWFrIGU7Zm9yKDtaci5sZW5ndGg8PU5yO1pyLnB1c2go''@;'; put 'put ''MCkpO3NyPU1yPTAsJG49MSxVcj0oZHIlPVopLVorMX1lbHNle2Zvcihzcj1abj1acltOcl0sJG49MTtabj49MTA7Wm4vPTEwLCRuKyspO01yPShVcj0oZHIlPVopLVorJG4pPDA/MDpmKHNyL2FhWyRuLVVyLTFdJTEwKX1pZihwcj1wcnx8eW48MHx8bnVsbCE9WnJbTnIrMV18fChVcjwwP3Ny''@;'; put 'put ''OnNyJWFhWyRuLVVyLTFdKSxwcj1wbjw0PyhNcnx8cHIpJiYoMD09cG58fHBuPT0ob24uczwwPzM6MikpOk1yPjV8fDU9PU1yJiYoND09cG58fHByfHw2PT1wbiYmKGRyPjA/VXI+MD9zci9hYVskbi1Vcl06MDpacltOci0xXSklMTAmMXx8cG49PShvbi5zPDA/ODo3KSkseW48MXx8IVpyWzBd''@;'; put 'put ''KXJldHVybiBaci5sZW5ndGg9MCxwcj8oWnJbMF09YWFbKFotKHluLT1vbi5lKzEpJVopJVpdLG9uLmU9LXlufHwwKTpaclswXT1vbi5lPTAsb247aWYoMD09ZHI/KFpyLmxlbmd0aD1Ocixabj0xLE5yLS0pOihaci5sZW5ndGg9TnIrMSxabj1hYVtaLWRyXSxacltOcl09VXI+MD9mKHNyL2Fh''@;'; put 'put ''WyRuLVVyXSVhYVtVcl0pKlpuOjApLHByKWZvcig7Oyl7aWYoMD09TnIpe2Zvcihkcj0xLFVyPVpyWzBdO1VyPj0xMDtVci89MTAsZHIrKyk7Zm9yKFVyPVpyWzBdKz1abixabj0xO1VyPj0xMDtVci89MTAsWm4rKyk7ZHIhPVpuJiYob24uZSsrLFpyWzBdPT1EJiYoWnJbMF09MSkpO2JyZWFr''@;'; put 'put ''fWlmKFpyW05yXSs9Wm4sWnJbTnJdIT1EKWJyZWFrO1pyW05yLS1dPTAsWm49MX1mb3IoZHI9WnIubGVuZ3RoOzA9PT1aclstLWRyXTtaci5wb3AoKSk7fW9uLmU+SXI/b24uYz1vbi5lPW51bGw6b24uZTxKbiYmKG9uLmM9W29uLmU9MF0pfXJldHVybiBvbn1mdW5jdGlvbiBxcihvbil7dmFy''@;'; put 'put ''IHluLHBuPW9uLmU7cmV0dXJuIG51bGw9PT1wbj9vbi50b1N0cmluZygpOih5bj1ydChvbi5jKSx5bj1wbjw9T258fHBuPj16cj92bih5bixwbik6Q24oeW4scG4sIjAiKSxvbi5zPDA/Ii0iK3luOnluKX1yZXR1cm4gSHQuY2xvbmU9QmUsSHQuUk9VTkRfVVA9MCxIdC5ST1VORF9ET1dOPTEs''@;'; put 'put ''SHQuUk9VTkRfQ0VJTD0yLEh0LlJPVU5EX0ZMT09SPTMsSHQuUk9VTkRfSEFMRl9VUD00LEh0LlJPVU5EX0hBTEZfRE9XTj01LEh0LlJPVU5EX0hBTEZfRVZFTj02LEh0LlJPVU5EX0hBTEZfQ0VJTD03LEh0LlJPVU5EX0hBTEZfRkxPT1I9OCxIdC5FVUNMSUQ9OSxIdC5jb25maWc9SHQuc2V0''@;'; put 'put ''PWZ1bmN0aW9uKG9uKXt2YXIgeW4scG47aWYobnVsbCE9b24pe2lmKCJvYmplY3QiIT10eXBlb2Ygb24pdGhyb3cgRXJyb3IodisiT2JqZWN0IGV4cGVjdGVkOiAiK29uKTtpZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iREVDSU1BTF9QTEFDRVMiKSYmKGR0KHBuPW9uW3luXSwwLEVlLHluKSxh''@;'; put 'put ''aT1wbiksb24uaGFzT3duUHJvcGVydHkoeW49IlJPVU5ESU5HX01PREUiKSYmKGR0KHBuPW9uW3luXSwwLDgseW4pLF9pPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iRVhQT05FTlRJQUxfQVQiKSYmKChwbj1vblt5bl0pJiZwbi5wb3A/KGR0KHBuWzBdLC1FZSwwLHluKSxkdChwblsxXSww''@;'; put 'put ''LEVlLHluKSxPbj1wblswXSx6cj1wblsxXSk6KGR0KHBuLC1FZSxFZSx5biksT249LSh6cj1wbjwwPy1wbjpwbikpKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iUkFOR0UiKSlpZigocG49b25beW5dKSYmcG4ucG9wKWR0KHBuWzBdLC1FZSwtMSx5biksZHQocG5bMV0sMSxFZSx5biksSm49cG5b''@;'; put 'put ''MF0sSXI9cG5bMV07ZWxzZXtpZihkdChwbiwtRWUsRWUseW4pLCFwbil0aHJvdyBFcnJvcih2K3luKyIgY2Fubm90IGJlIHplcm86ICIrcG4pO0puPS0oSXI9cG48MD8tcG46cG4pfWlmKG9uLmhhc093blByb3BlcnR5KHluPSJDUllQVE8iKSl7aWYoKHBuPW9uW3luXSkhPT0hIXBuKXRocm93''@;'; put 'put ''IEVycm9yKHYreW4rIiBub3QgdHJ1ZSBvciBmYWxzZTogIitwbik7aWYocG4pe2lmKCEodHlwZW9mIGNyeXB0bzwidSImJmNyeXB0byYmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXN8fGNyeXB0by5yYW5kb21CeXRlcykpKXRocm93ICRyPSFwbixFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUi''@;'; put 'put ''KTskcj1wbn1lbHNlICRyPXBufWlmKG9uLmhhc093blByb3BlcnR5KHluPSJNT0RVTE9fTU9ERSIpJiYoZHQocG49b25beW5dLDAsOSx5biksd2k9cG4pLG9uLmhhc093blByb3BlcnR5KHluPSJQT1dfUFJFQ0lTSU9OIikmJihkdChwbj1vblt5bl0sMCxFZSx5biksZWE9cG4pLG9uLmhhc093''@;'; put 'put ''blByb3BlcnR5KHluPSJGT1JNQVQiKSl7aWYoIm9iamVjdCIhPXR5cGVvZihwbj1vblt5bl0pKXRocm93IEVycm9yKHYreW4rIiBub3QgYW4gb2JqZWN0OiAiK3BuKTtmYT1wbn1pZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iQUxQSEFCRVQiKSl7aWYoInN0cmluZyIhPXR5cGVvZihwbj1vblt5''@;'; put 'put ''bl0pfHwvXi4/JHxbK1wtLlxzXXwoLikuKlwxLy50ZXN0KHBuKSl0aHJvdyBFcnJvcih2K3luKyIgaW52YWxpZDogIitwbik7TnQ9IjAxMjM0NTY3ODkiPT1wbi5zbGljZSgwLDEwKSx2dD1wbn19cmV0dXJue0RFQ0lNQUxfUExBQ0VTOmFpLFJPVU5ESU5HX01PREU6X2ksRVhQT05FTlRJQUxf''@;'; put 'put ''QVQ6W09uLHpyXSxSQU5HRTpbSm4sSXJdLENSWVBUTzokcixNT0RVTE9fTU9ERTp3aSxQT1dfUFJFQ0lTSU9OOmVhLEZPUk1BVDpmYSxBTFBIQUJFVDp2dH19LEh0LmlzQmlnTnVtYmVyPWZ1bmN0aW9uKG9uKXtpZighb258fCEwIT09b24uX2lzQmlnTnVtYmVyKXJldHVybiExO2lmKCFIdC5E''@;'; put 'put ''RUJVRylyZXR1cm4hMDt2YXIgeW4scG4scHI9b24uYywkbj1vbi5lLGRyPW9uLnM7ZTppZigiW29iamVjdCBBcnJheV0iPT17fS50b1N0cmluZy5jYWxsKHByKSl7aWYoKDE9PT1kcnx8LTE9PT1kcikmJiRuPj0tRWUmJiRuPD1FZSYmJG49PT1mKCRuKSl7aWYoMD09PXByWzBdKXtpZigwPT09''@;'; put 'put ''JG4mJjE9PT1wci5sZW5ndGgpcmV0dXJuITA7YnJlYWsgZX1pZigoeW49KCRuKzEpJVopPDEmJih5bis9WiksU3RyaW5nKHByWzBdKS5sZW5ndGg9PXluKXtmb3IoeW49MDt5bjxwci5sZW5ndGg7eW4rKylpZigocG49cHJbeW5dKTwwfHxwbj49RHx8cG4hPT1mKHBuKSlicmVhayBlO2lmKDAh''@;'; put 'put ''PT1wbilyZXR1cm4hMH19fWVsc2UgaWYobnVsbD09PXByJiZudWxsPT09JG4mJihudWxsPT09ZHJ8fDE9PT1kcnx8LTE9PT1kcikpcmV0dXJuITA7dGhyb3cgRXJyb3IodisiSW52YWxpZCBCaWdOdW1iZXI6ICIrb24pfSxIdC5tYXhpbXVtPUh0Lm1heD1mdW5jdGlvbigpe3JldHVybiB0cihh''@;'; put 'put ''cmd1bWVudHMsLTEpfSxIdC5taW5pbXVtPUh0Lm1pbj1mdW5jdGlvbigpe3JldHVybiB0cihhcmd1bWVudHMsMSl9LEh0LnJhbmRvbT0ob249OTAwNzE5OTI1NDc0MDk5Mix5bj1NYXRoLnJhbmRvbSgpKm9uJjIwOTcxNTE/ZnVuY3Rpb24oKXtyZXR1cm4gZihNYXRoLnJhbmRvbSgpKm9uKX06''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gODM4ODYwOCooMTA3Mzc0MTgyNCpNYXRoLnJhbmRvbSgpfDApKyg4Mzg4NjA4Kk1hdGgucmFuZG9tKCl8MCl9LGZ1bmN0aW9uKHBuKXt2YXIgcHIsJG4sZHIsVXIsWm4sc3I9MCxOcj1bXSxNcj1uZXcgSHQoR24pO2lmKG51bGw9PXBuP3BuPWFpOmR0KHBuLDAs''@;'; put 'put ''RWUpLFVyPWgocG4vWiksJHIpaWYoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7Zm9yKHByPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KFVyKj0yKSk7c3I8VXI7KShabj0xMzEwNzIqcHJbc3JdKyhwcltzcisxXT4+PjExKSk+PTllMTU/KCRuPWNyeXB0by5nZXRSYW5k''@;'; put 'put ''b21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKSxwcltzcl09JG5bMF0scHJbc3IrMV09JG5bMV0pOihOci5wdXNoKFpuJTFlMTQpLHNyKz0yKTtzcj1Vci8yfWVsc2V7aWYoIWNyeXB0by5yYW5kb21CeXRlcyl0aHJvdyAkcj0hMSxFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTtmb3Io''@;'; put 'put ''cHI9Y3J5cHRvLnJhbmRvbUJ5dGVzKFVyKj03KTtzcjxVcjspKFpuPTI4MTQ3NDk3NjcxMDY1NiooMzEmcHJbc3JdKSsxMDk5NTExNjI3Nzc2KnByW3NyKzFdKzQyOTQ5NjcyOTYqcHJbc3IrMl0rMTY3NzcyMTYqcHJbc3IrM10rKHByW3NyKzRdPDwxNikrKHByW3NyKzVdPDw4KStwcltzcis2''@;'; put 'put ''XSk+PTllMTU/Y3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkocHIsc3IpOihOci5wdXNoKFpuJTFlMTQpLHNyKz03KTtzcj1Vci83fWlmKCEkcilmb3IoO3NyPFVyOykoWm49eW4oKSk8OWUxNSYmKE5yW3NyKytdPVpuJTFlMTQpO2ZvcihVcj1OclstLXNyXSxwbiU9WixVciYmcG4mJihOcltz''@;'; put 'put ''cl09ZihVci8oWm49Y2VbWi1wbl0pKSpabik7MD09PU5yW3NyXTtOci5wb3AoKSxzci0tKTtpZihzcjwwKU5yPVtkcj0wXTtlbHNle2Zvcihkcj0tMTswPT09TnJbMF07TnIuc3BsaWNlKDAsMSksZHItPVopO2Zvcihzcj0xLFpuPU5yWzBdO1puPj0xMDtabi89MTAsc3IrKyk7c3I8WiYmKGRy''@;'; put 'put ''LT1aLXNyKX1yZXR1cm4gTXIuZT1kcixNci5jPU5yLE1yfSksSHQuc3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciBvbj0xLHluPWFyZ3VtZW50cyxwbj1uZXcgSHQoeW5bMF0pO29uPHluLmxlbmd0aDspcG49cG4ucGx1cyh5bltvbisrXSk7cmV0dXJuIHBufSxDcj1mdW5jdGlvbigpe3ZhciBvbj0i''@;'; put 'put ''MDEyMzQ1Njc4OSI7ZnVuY3Rpb24geW4ocG4scHIsJG4sZHIpe2Zvcih2YXIgVXIsc3IsWm49WzBdLE5yPTAsTXI9cG4ubGVuZ3RoO05yPE1yOyl7Zm9yKHNyPVpuLmxlbmd0aDtzci0tO1puW3NyXSo9cHIpO2ZvcihablswXSs9ZHIuaW5kZXhPZihwbi5jaGFyQXQoTnIrKykpLFVyPTA7VXI8''@;'; put 'put ''Wm4ubGVuZ3RoO1VyKyspWm5bVXJdPiRuLTEmJihudWxsPT1abltVcisxXSYmKFpuW1VyKzFdPTApLFpuW1VyKzFdKz1abltVcl0vJG58MCxabltVcl0lPSRuKX1yZXR1cm4gWm4ucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihwbixwciwkbixkcixVcil7dmFyIFpuLHNyLE5yLE1yLFpyLGFh''@;'; put 'put ''LEJhLElvLFpvPXBuLmluZGV4T2YoIi4iKSxwcz1haSxNbz1faTtmb3IoWm8+PTAmJihNcj1lYSxlYT0wLHBuPXBuLnJlcGxhY2UoIi4iLCIiKSxhYT0oSW89bmV3IEh0KHByKSkucG93KHBuLmxlbmd0aC1abyksZWE9TXIsSW8uYz15bihDbihydChhYS5jKSxhYS5lLCIwIiksMTAsJG4sb24p''@;'; put 'put ''LElvLmU9SW8uYy5sZW5ndGgpLE5yPU1yPShCYT15bihwbixwciwkbixVcj8oWm49dnQsb24pOihabj1vbix2dCkpKS5sZW5ndGg7MD09QmFbLS1Ncl07QmEucG9wKCkpO2lmKCFCYVswXSlyZXR1cm4gWm4uY2hhckF0KDApO2lmKFpvPDA/LS1OcjooYWEuYz1CYSxhYS5lPU5yLGFhLnM9ZHIs''@;'; put 'put ''QmE9KGFhPU1uKGFhLElvLHBzLE1vLCRuKSkuYyxacj1hYS5yLE5yPWFhLmUpLFpvPUJhW3NyPU5yK3BzKzFdLE1yPSRuLzIsWnI9WnJ8fHNyPDB8fG51bGwhPUJhW3NyKzFdLFpyPU1vPDQ/KG51bGwhPVpvfHxacikmJigwPT1Nb3x8TW89PShhYS5zPDA/MzoyKSk6Wm8+TXJ8fFpvPT1NciYm''@;'; put 'put ''KDQ9PU1vfHxacnx8Nj09TW8mJjEmQmFbc3ItMV18fE1vPT0oYWEuczwwPzg6NykpLHNyPDF8fCFCYVswXSlwbj1acj9Dbihabi5jaGFyQXQoMSksLXBzLFpuLmNoYXJBdCgwKSk6Wm4uY2hhckF0KDApO2Vsc2V7aWYoQmEubGVuZ3RoPXNyLFpyKWZvcigtLSRuOysrQmFbLS1zcl0+JG47KUJh''@;'; put 'put ''W3NyXT0wLHNyfHwoKytOcixCYT1bMV0uY29uY2F0KEJhKSk7Zm9yKE1yPUJhLmxlbmd0aDshQmFbLS1Ncl07KTtmb3IoWm89MCxwbj0iIjtabzw9TXI7cG4rPVpuLmNoYXJBdChCYVtabysrXSkpO3BuPUNuKHBuLE5yLFpuLmNoYXJBdCgwKSl9cmV0dXJuIHBufX0oKSxNbj1mdW5jdGlvbigp''@;'; put 'put ''e2Z1bmN0aW9uIG9uKHByLCRuLGRyKXt2YXIgVXIsWm4sc3IsTnIsTXI9MCxacj1wci5sZW5ndGgsYWE9JG4lYmUsQmE9JG4vYmV8MDtmb3IocHI9cHIuc2xpY2UoKTtaci0tOylNcj0oKFpuPWFhKihzcj1wcltacl0lYmUpKyhVcj1CYSpzcisoTnI9cHJbWnJdL2JlfDApKmFhKSViZSpiZStN''@;'; put 'put ''cikvZHJ8MCkrKFVyL2JlfDApK0JhKk5yLHByW1pyXT1abiVkcjtyZXR1cm4gTXImJihwcj1bTXJdLmNvbmNhdChwcikpLHByfWZ1bmN0aW9uIHluKHByLCRuLGRyLFVyKXt2YXIgWm4sc3I7aWYoZHIhPVVyKXNyPWRyPlVyPzE6LTE7ZWxzZSBmb3IoWm49c3I9MDtabjxkcjtabisrKWlmKHBy''@;'; put 'put ''W1puXSE9JG5bWm5dKXtzcj1wcltabl0+JG5bWm5dPzE6LTE7YnJlYWt9cmV0dXJuIHNyfWZ1bmN0aW9uIHBuKHByLCRuLGRyLFVyKXtmb3IodmFyIFpuPTA7ZHItLTspcHJbZHJdLT1abixwcltkcl09KFpuPXByW2RyXTwkbltkcl0/MTowKSpVcitwcltkcl0tJG5bZHJdO2Zvcig7IXByWzBd''@;'; put 'put ''JiZwci5sZW5ndGg+MTtwci5zcGxpY2UoMCwxKSk7fXJldHVybiBmdW5jdGlvbihwciwkbixkcixVcixabil7dmFyIHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvLHBzLE1vLGhzLG5jLFFvLE0zLGFkLFVzLEpjLHFzPXByLnM9PSRuLnM/MTotMSxCbD1wci5jLGVzPSRuLmM7aWYoIShCbCYmQmxb''@;'; put 'put ''MF0mJmVzJiZlc1swXSkpcmV0dXJuIG5ldyBIdChwci5zJiYkbi5zJiYoQmw/IWVzfHxCbFswXSE9ZXNbMF06ZXMpP0JsJiYwPT1CbFswXXx8IWVzPzAqcXM6cXMvMDpOYU4pO2Zvcihwcz0oWm89bmV3IEh0KHFzKSkuYz1bXSxxcz1kcisoTnI9cHIuZS0kbi5lKSsxLFpufHwoWm49RCxOcj1x''@;'; put 'put ''ZShwci5lL1opLXFlKCRuLmUvWikscXM9cXMvWnwwKSxNcj0wO2VzW01yXT09KEJsW01yXXx8MCk7TXIrKyk7aWYoZXNbTXJdPihCbFtNcl18fDApJiZOci0tLHFzPDApcHMucHVzaCgxKSxacj0hMDtlbHNle2ZvcihNMz1CbC5sZW5ndGgsVXM9ZXMubGVuZ3RoLE1yPTAscXMrPTIsKGFhPWYo''@;'; put 'put ''Wm4vKGVzWzBdKzEpKSk+MSYmKGVzPW9uKGVzLGFhLFpuKSxCbD1vbihCbCxhYSxabiksVXM9ZXMubGVuZ3RoLE0zPUJsLmxlbmd0aCksUW89VXMsaHM9KE1vPUJsLnNsaWNlKDAsVXMpKS5sZW5ndGg7aHM8VXM7TW9baHMrK109MCk7SmM9ZXMuc2xpY2UoKSxKYz1bMF0uY29uY2F0KEpjKSxh''@;'; put 'put ''ZD1lc1swXSxlc1sxXT49Wm4vMiYmYWQrKztkb3tpZihhYT0wLChzcj15bihlcyxNbyxVcyxocykpPDApe2lmKG5jPU1vWzBdLFVzIT1ocyYmKG5jPW5jKlpuKyhNb1sxXXx8MCkpLChhYT1mKG5jL2FkKSk+MSlmb3IoYWE+PVpuJiYoYWE9Wm4tMSksSW89KEJhPW9uKGVzLGFhLFpuKSkubGVu''@;'; put 'put ''Z3RoLGhzPU1vLmxlbmd0aDsxPT15bihCYSxNbyxJbyxocyk7KWFhLS0scG4oQmEsVXM8SW8/SmM6ZXMsSW8sWm4pLElvPUJhLmxlbmd0aCxzcj0xO2Vsc2UgMD09YWEmJihzcj1hYT0xKSxJbz0oQmE9ZXMuc2xpY2UoKSkubGVuZ3RoO2lmKElvPGhzJiYoQmE9WzBdLmNvbmNhdChCYSkpLHBu''@;'; put 'put ''KE1vLEJhLGhzLFpuKSxocz1Nby5sZW5ndGgsLTE9PXNyKWZvcig7eW4oZXMsTW8sVXMsaHMpPDE7KWFhKysscG4oTW8sVXM8aHM/SmM6ZXMsaHMsWm4pLGhzPU1vLmxlbmd0aH1lbHNlIDA9PT1zciYmKGFhKyssTW89WzBdKTtwc1tNcisrXT1hYSxNb1swXT9Nb1tocysrXT1CbFtRb118fDA6''@;'; put 'put ''KE1vPVtCbFtRb11dLGhzPTEpfXdoaWxlKChRbysrPE0zfHxudWxsIT1Nb1swXSkmJnFzLS0pO1pyPW51bGwhPU1vWzBdLHBzWzBdfHxwcy5zcGxpY2UoMCwxKX1pZihabj09RCl7Zm9yKE1yPTEscXM9cHNbMF07cXM+PTEwO3FzLz0xMCxNcisrKTtIcihabyxkcisoWm8uZT1NcitOcipaLTEp''@;'; put 'put ''KzEsVXIsWnIpfWVsc2UgWm8uZT1Ocixaby5yPStacjtyZXR1cm4gWm99fSgpLEdyPWZ1bmN0aW9uKCl7dmFyIG9uPS9eKC0/KTAoW3hib10pKD89XHdbXHcuXSokKS9pLHluPS9eKFteLl0rKVwuJC8scG49L15cLihbXi5dKykkLyxwcj0vXi0/KEluZmluaXR5fE5hTikkLywkbj0vXlxzKlwr''@;'; put 'put ''KD89W1x3Ll0pfF5ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbihkcixVcixabixzcil7dmFyIE5yLE1yPVpuP1VyOlVyLnJlcGxhY2UoJG4sIiIpO2lmKHByLnRlc3QoTXIpKWRyLnM9aXNOYU4oTXIpP251bGw6TXI8MD8tMToxO2Vsc2V7aWYoIVpuJiYoTXI9TXIucmVwbGFjZShvbixmdW5j''@;'; put 'put ''dGlvbihacixhYSxCYSl7cmV0dXJuIE5yPSJ4Ij09KEJhPUJhLnRvTG93ZXJDYXNlKCkpPzE2OiJiIj09QmE/Mjo4LHNyJiZzciE9TnI/WnI6YWF9KSxzciYmKE5yPXNyLE1yPU1yLnJlcGxhY2UoeW4sIiQxIikucmVwbGFjZShwbiwiMC4kMSIpKSxVciE9TXIpKXJldHVybiBuZXcgSHQoTXIs''@;'; put 'put ''TnIpO2lmKEh0LkRFQlVHKXRocm93IEVycm9yKHYrIk5vdCBhIisoc3I/IiBiYXNlICIrc3I6IiIpKyIgbnVtYmVyOiAiK1VyKTtkci5zPW51bGx9ZHIuYz1kci5lPW51bGx9fSgpLG1yLmFic29sdXRlVmFsdWU9bXIuYWJzPWZ1bmN0aW9uKCl7dmFyIG9uPW5ldyBIdCh0aGlzKTtyZXR1cm4g''@;'; put 'put ''b24uczwwJiYob24ucz0xKSxvbn0sbXIuY29tcGFyZWRUbz1mdW5jdGlvbihvbix5bil7cmV0dXJuIHB0KHRoaXMsbmV3IEh0KG9uLHluKSl9LG1yLmRlY2ltYWxQbGFjZXM9bXIuZHA9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwciwkbjtpZihudWxsIT1vbilyZXR1cm4gZHQob24sMCxFZSks''@;'; put 'put ''bnVsbD09eW4/eW49X2k6ZHQoeW4sMCw4KSxIcihuZXcgSHQodGhpcyksb24rdGhpcy5lKzEseW4pO2lmKCEocG49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihwcj0oKCRuPXBuLmxlbmd0aC0xKS1xZSh0aGlzLmUvWikpKlosJG49cG5bJG5dKWZvcig7JG4lMTA9PTA7JG4vPTEwLHByLS0pO3Jl''@;'; put 'put ''dHVybiBwcjwwJiYocHI9MCkscHJ9LG1yLmRpdmlkZWRCeT1tci5kaXY9ZnVuY3Rpb24ob24seW4pe3JldHVybiBNbih0aGlzLG5ldyBIdChvbix5biksYWksX2kpfSxtci5kaXZpZGVkVG9JbnRlZ2VyQnk9bXIuaWRpdj1mdW5jdGlvbihvbix5bil7cmV0dXJuIE1uKHRoaXMsbmV3IEh0KG9u''@;'; put 'put ''LHluKSwwLDEpfSxtci5leHBvbmVudGlhdGVkQnk9bXIucG93PWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG4sZHIsWm4sc3IsTnIsTXIsWnI9dGhpcztpZigob249bmV3IEh0KG9uKSkuYyYmIW9uLmlzSW50ZWdlcigpKXRocm93IEVycm9yKHYrIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2Vy''@;'; put 'put ''OiAiK3FyKG9uKSk7aWYobnVsbCE9eW4mJih5bj1uZXcgSHQoeW4pKSxabj1vbi5lPjE0LCFaci5jfHwhWnIuY1swXXx8MT09WnIuY1swXSYmIVpyLmUmJjE9PVpyLmMubGVuZ3RofHwhb24uY3x8IW9uLmNbMF0pcmV0dXJuIE1yPW5ldyBIdChNYXRoLnBvdygrcXIoWnIpLFpuP29uLnMqKDIt''@;'; put 'put ''SnQob24pKTorcXIob24pKSkseW4/TXIubW9kKHluKTpNcjtpZihzcj1vbi5zPDAseW4pe2lmKHluLmM/IXluLmNbMF06IXluLnMpcmV0dXJuIG5ldyBIdChOYU4pOyhwcj0hc3ImJlpyLmlzSW50ZWdlcigpJiZ5bi5pc0ludGVnZXIoKSkmJihacj1aci5tb2QoeW4pKX1lbHNle2lmKG9uLmU+''@;'; put 'put ''OSYmKFpyLmU+MHx8WnIuZTwtMXx8KDA9PVpyLmU/WnIuY1swXT4xfHxabiYmWnIuY1sxXT49MjRlNzpaci5jWzBdPDhlMTN8fFpuJiZaci5jWzBdPD05OTk5OTc1ZTcpKSlyZXR1cm4gZHI9WnIuczwwJiZKdChvbik/LTA6MCxaci5lPi0xJiYoZHI9MS9kciksbmV3IEh0KHNyPzEvZHI6ZHIp''@;'; put 'put ''O2VhJiYoZHI9aChlYS9aKzIpKX1mb3IoWm4/KHBuPW5ldyBIdCguNSksc3ImJihvbi5zPTEpLE5yPUp0KG9uKSk6TnI9KCRuPU1hdGguYWJzKCtxcihvbikpKSUyLE1yPW5ldyBIdChHbik7Oyl7aWYoTnIpe2lmKCEoTXI9TXIudGltZXMoWnIpKS5jKWJyZWFrO2RyP01yLmMubGVuZ3RoPmRy''@;'; put 'put ''JiYoTXIuYy5sZW5ndGg9ZHIpOnByJiYoTXI9TXIubW9kKHluKSl9aWYoJG4pe2lmKDA9PT0oJG49Zigkbi8yKSkpYnJlYWs7TnI9JG4lMn1lbHNlIGlmKEhyKG9uPW9uLnRpbWVzKHBuKSxvbi5lKzEsMSksb24uZT4xNClOcj1KdChvbik7ZWxzZXtpZigwPT0oJG49K3FyKG9uKSkpYnJlYWs7''@;'; put 'put ''TnI9JG4lMn1acj1aci50aW1lcyhaciksZHI/WnIuYyYmWnIuYy5sZW5ndGg+ZHImJihaci5jLmxlbmd0aD1kcik6cHImJihacj1aci5tb2QoeW4pKX1yZXR1cm4gcHI/TXI6KHNyJiYoTXI9R24uZGl2KE1yKSkseW4/TXIubW9kKHluKTpkcj9IcihNcixlYSxfaSx2b2lkIDApOk1yKX0sbXIu''@;'; put 'put ''aW50ZWdlclZhbHVlPWZ1bmN0aW9uKG9uKXt2YXIgeW49bmV3IEh0KHRoaXMpO3JldHVybiBudWxsPT1vbj9vbj1faTpkdChvbiwwLDgpLEhyKHluLHluLmUrMSxvbil9LG1yLmlzRXF1YWxUbz1tci5lcT1mdW5jdGlvbihvbix5bil7cmV0dXJuIDA9PT1wdCh0aGlzLG5ldyBIdChvbix5bikp''@;'; put 'put ''fSxtci5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxtci5pc0dyZWF0ZXJUaGFuPW1yLmd0PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gcHQodGhpcyxuZXcgSHQob24seW4pKT4wfSxtci5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvPW1yLmd0ZT1mdW5jdGlvbihvbix5bil7cmV0''@;'; put 'put ''dXJuIDE9PT0oeW49cHQodGhpcyxuZXcgSHQob24seW4pKSl8fDA9PT15bn0sbXIuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJnFlKHRoaXMuZS9aKT50aGlzLmMubGVuZ3RoLTJ9LG1yLmlzTGVzc1RoYW49bXIubHQ9ZnVuY3Rpb24ob24seW4pe3JldHVybiBwdCh0aGlz''@;'; put 'put ''LG5ldyBIdChvbix5bikpPDB9LG1yLmlzTGVzc1RoYW5PckVxdWFsVG89bXIubHRlPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4tMT09PSh5bj1wdCh0aGlzLG5ldyBIdChvbix5bikpKXx8MD09PXlufSxtci5pc05hTj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN9LG1yLmlzTmVnYXRpdmU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5zPDB9LG1yLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LG1yLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiYwPT10aGlzLmNbMF19LG1yLm1pbnVzPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG4sZHIsVXI9dGhp''@;'; put 'put ''cyxabj1Vci5zO2lmKHluPShvbj1uZXcgSHQob24seW4pKS5zLCFabnx8IXluKXJldHVybiBuZXcgSHQoTmFOKTtpZihabiE9eW4pcmV0dXJuIG9uLnM9LXluLFVyLnBsdXMob24pO3ZhciBzcj1Vci5lL1osTnI9b24uZS9aLE1yPVVyLmMsWnI9b24uYztpZighc3J8fCFOcil7aWYoIU1yfHwh''@;'; put 'put ''WnIpcmV0dXJuIE1yPyhvbi5zPS15bixvbik6bmV3IEh0KFpyP1VyOk5hTik7aWYoIU1yWzBdfHwhWnJbMF0pcmV0dXJuIFpyWzBdPyhvbi5zPS15bixvbik6bmV3IEh0KE1yWzBdP1VyOjM9PV9pPy0wOjApfWlmKHNyPXFlKHNyKSxOcj1xZShOciksTXI9TXIuc2xpY2UoKSxabj1zci1Ocil7''@;'; put 'put ''Zm9yKChkcj1abjwwKT8oWm49LVpuLCRuPU1yKTooTnI9c3IsJG49WnIpLCRuLnJldmVyc2UoKSx5bj1abjt5bi0tOyRuLnB1c2goMCkpOyRuLnJldmVyc2UoKX1lbHNlIGZvcihwcj0oZHI9KFpuPU1yLmxlbmd0aCk8KHluPVpyLmxlbmd0aCkpP1puOnluLFpuPXluPTA7eW48cHI7eW4rKylp''@;'; put 'put ''ZihNclt5bl0hPVpyW3luXSl7ZHI9TXJbeW5dPFpyW3luXTticmVha31pZihkciYmKCRuPU1yLE1yPVpyLFpyPSRuLG9uLnM9LW9uLnMpLCh5bj0ocHI9WnIubGVuZ3RoKS0ocG49TXIubGVuZ3RoKSk+MClmb3IoO3luLS07TXJbcG4rK109MCk7Zm9yKHluPUQtMTtwcj5abjspe2lmKE1yWy0t''@;'; put 'put ''cHJdPFpyW3ByXSl7Zm9yKHBuPXByO3BuJiYhTXJbLS1wbl07TXJbcG5dPXluKTstLU1yW3BuXSxNcltwcl0rPUR9TXJbcHJdLT1acltwcl19Zm9yKDswPT1NclswXTtNci5zcGxpY2UoMCwxKSwtLU5yKTtyZXR1cm4gTXJbMF0/YXIob24sTXIsTnIpOihvbi5zPTM9PV9pPy0xOjEsb24uYz1b''@;'; put 'put ''b24uZT0wXSxvbil9LG1yLm1vZHVsbz1tci5tb2Q9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwciwkbj10aGlzO3JldHVybiBvbj1uZXcgSHQob24seW4pLCEkbi5jfHwhb24uc3x8b24uYyYmIW9uLmNbMF0/bmV3IEh0KE5hTik6IW9uLmN8fCRuLmMmJiEkbi5jWzBdP25ldyBIdCgkbik6KDk9''@;'; put 'put ''PXdpPyhwcj1vbi5zLG9uLnM9MSxwbj1NbigkbixvbiwwLDMpLG9uLnM9cHIscG4ucyo9cHIpOnBuPU1uKCRuLG9uLDAsd2kpLCEob249JG4ubWludXMocG4udGltZXMob24pKSkuY1swXSYmMT09d2kmJihvbi5zPSRuLnMpLG9uKX0sbXIubXVsdGlwbGllZEJ5PW1yLnRpbWVzPWZ1bmN0aW9u''@;'; put 'put ''KG9uLHluKXt2YXIgcG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnIsYWEsQmEsSW8sWm8scHMsTW89dGhpcyxocz1Nby5jLG5jPShvbj1uZXcgSHQob24seW4pKS5jO2lmKCEoaHMmJm5jJiZoc1swXSYmbmNbMF0pKXJldHVybiFNby5zfHwhb24uc3x8aHMmJiFoc1swXSYmIW5jfHxuYyYm''@;'; put 'put ''IW5jWzBdJiYhaHM/b24uYz1vbi5lPW9uLnM9bnVsbDoob24ucyo9TW8ucyxocyYmbmM/KG9uLmM9WzBdLG9uLmU9MCk6b24uYz1vbi5lPW51bGwpLG9uO2Zvcihwcj1xZShNby5lL1opK3FlKG9uLmUvWiksb24ucyo9TW8ucywoc3I9aHMubGVuZ3RoKTwoWnI9bmMubGVuZ3RoKSYmKElvPWhz''@;'; put 'put ''LGhzPW5jLG5jPUlvLCRuPXNyLHNyPVpyLFpyPSRuKSwkbj1zcitacixJbz1bXTskbi0tO0lvLnB1c2goMCkpO2Zvcihabz1ELHBzPWJlLCRuPVpyOy0tJG4+PTA7KXtmb3IocG49MCxhYT1uY1skbl0lcHMsQmE9bmNbJG5dL3BzfDAsZHI9JG4rKFVyPXNyKTtkcj4kbjspcG49KChOcj1hYSoo''@;'; put 'put ''TnI9aHNbLS1Vcl0lcHMpKyhabj1CYSpOcisoTXI9aHNbVXJdL3BzfDApKmFhKSVwcypwcytJb1tkcl0rcG4pL1pvfDApKyhabi9wc3wwKStCYSpNcixJb1tkci0tXT1OciVabztJb1tkcl09cG59cmV0dXJuIHBuPysrcHI6SW8uc3BsaWNlKDAsMSksYXIob24sSW8scHIpfSxtci5uZWdhdGVk''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIG9uPW5ldyBIdCh0aGlzKTtyZXR1cm4gb24ucz0tb24uc3x8bnVsbCxvbn0sbXIucGx1cz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByPXRoaXMsJG49cHIucztpZih5bj0ob249bmV3IEh0KG9uLHluKSkucywhJG58fCF5bilyZXR1cm4gbmV3IEh0KE5hTik7aWYo''@;'; put 'put ''JG4hPXluKXJldHVybiBvbi5zPS15bixwci5taW51cyhvbik7dmFyIGRyPXByLmUvWixVcj1vbi5lL1osWm49cHIuYyxzcj1vbi5jO2lmKCFkcnx8IVVyKXtpZighWm58fCFzcilyZXR1cm4gbmV3IEh0KCRuLzApO2lmKCFablswXXx8IXNyWzBdKXJldHVybiBzclswXT9vbjpuZXcgSHQoWm5b''@;'; put 'put ''MF0/cHI6MCokbil9aWYoZHI9cWUoZHIpLFVyPXFlKFVyKSxabj1abi5zbGljZSgpLCRuPWRyLVVyKXtmb3IoJG4+MD8oVXI9ZHIscG49c3IpOigkbj0tJG4scG49Wm4pLHBuLnJldmVyc2UoKTskbi0tO3BuLnB1c2goMCkpO3BuLnJldmVyc2UoKX1mb3IoKCRuPVpuLmxlbmd0aCktKHluPXNy''@;'; put 'put ''Lmxlbmd0aCk8MCYmKHBuPXNyLHNyPVpuLFpuPXBuLHluPSRuKSwkbj0wO3luOykkbj0oWm5bLS15bl09Wm5beW5dK3NyW3luXSskbikvRHwwLFpuW3luXT1EPT09Wm5beW5dPzA6Wm5beW5dJUQ7cmV0dXJuICRuJiYoWm49WyRuXS5jb25jYXQoWm4pLCsrVXIpLGFyKG9uLFpuLFVyKX0sbXIu''@;'; put 'put ''cHJlY2lzaW9uPW1yLnNkPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG47aWYobnVsbCE9b24mJm9uIT09ISFvbilyZXR1cm4gZHQob24sMSxFZSksbnVsbD09eW4/eW49X2k6ZHQoeW4sMCw4KSxIcihuZXcgSHQodGhpcyksb24seW4pO2lmKCEocG49dGhpcy5jKSlyZXR1cm4gbnVsbDtp''@;'; put 'put ''Zihwcj0oJG49cG4ubGVuZ3RoLTEpKlorMSwkbj1wblskbl0pe2Zvcig7JG4lMTA9PTA7JG4vPTEwLHByLS0pO2Zvcigkbj1wblswXTskbj49MTA7JG4vPTEwLHByKyspO31yZXR1cm4gb24mJnRoaXMuZSsxPnByJiYocHI9dGhpcy5lKzEpLHByfSxtci5zaGlmdGVkQnk9ZnVuY3Rpb24ob24p''@;'; put 'put ''e3JldHVybiBkdChvbiwtcmUscmUpLHRoaXMudGltZXMoIjFlIitvbil9LG1yLnNxdWFyZVJvb3Q9bXIuc3FydD1mdW5jdGlvbigpe3ZhciBvbix5bixwbixwciwkbixkcj10aGlzLFVyPWRyLmMsWm49ZHIucyxzcj1kci5lLE5yPWFpKzQsTXI9bmV3IEh0KCIwLjUiKTtpZigxIT09Wm58fCFV''@;'; put 'put ''cnx8IVVyWzBdKXJldHVybiBuZXcgSHQoIVpufHxabjwwJiYoIVVyfHxVclswXSk/TmFOOlVyP2RyOjEvMCk7aWYoMD09KFpuPU1hdGguc3FydCgrcXIoZHIpKSl8fFpuPT0xLzA/KCgoeW49cnQoVXIpKS5sZW5ndGgrc3IpJTI9PTAmJih5bis9IjAiKSxabj1NYXRoLnNxcnQoK3luKSxzcj1x''@;'; put 'put ''ZSgoc3IrMSkvMiktKHNyPDB8fHNyJTIpLHBuPW5ldyBIdCh5bj1abj09MS8wPyI1ZSIrc3I6KHluPVpuLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCx5bi5pbmRleE9mKCJlIikrMSkrc3IpKTpwbj1uZXcgSHQoWm4rIiIpLHBuLmNbMF0pZm9yKChabj0oc3I9cG4uZSkrTnIpPDMmJihabj0w''@;'; put 'put ''KTs7KWlmKHBuPU1yLnRpbWVzKCgkbj1wbikucGx1cyhNbihkciwkbixOciwxKSkpLHJ0KCRuLmMpLnNsaWNlKDAsWm4pPT09KHluPXJ0KHBuLmMpKS5zbGljZSgwLFpuKSl7aWYocG4uZTxzciYmLS1abiwiOTk5OSIhPSh5bj15bi5zbGljZShabi0zLFpuKzEpKSYmKHByfHwiNDk5OSIhPXlu''@;'; put 'put ''KSl7KCEreW58fCEreW4uc2xpY2UoMSkmJiI1Ij09eW4uY2hhckF0KDApKSYmKEhyKHBuLHBuLmUrYWkrMiwxKSxvbj0hcG4udGltZXMocG4pLmVxKGRyKSk7YnJlYWt9aWYoIXByJiYoSHIoJG4sJG4uZSthaSsyLDApLCRuLnRpbWVzKCRuKS5lcShkcikpKXtwbj0kbjticmVha31Ocis9NCxa''@;'; put 'put ''bis9NCxwcj0xfXJldHVybiBIcihwbixwbi5lK2FpKzEsX2ksb24pfSxtci50b0V4cG9uZW50aWFsPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gbnVsbCE9b24mJihkdChvbiwwLEVlKSxvbisrKSxIbih0aGlzLG9uLHluLDEpfSxtci50b0ZpeGVkPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gbnVs''@;'; put 'put ''bCE9b24mJihkdChvbiwwLEVlKSxvbj1vbit0aGlzLmUrMSksSG4odGhpcyxvbix5bil9LG1yLnRvRm9ybWF0PWZ1bmN0aW9uKG9uLHluLHBuKXt2YXIgcHI7aWYobnVsbD09cG4pbnVsbCE9b24mJnluJiYib2JqZWN0Ij09dHlwZW9mIHluPyhwbj15bix5bj1udWxsKTpvbiYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBvbj8ocG49b24sb249eW49bnVsbCk6cG49ZmE7ZWxzZSBpZigib2JqZWN0IiE9dHlwZW9mIHBuKXRocm93IEVycm9yKHYrIkFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICIrcG4pO2lmKHByPXRoaXMudG9GaXhlZChvbix5biksdGhpcy5jKXt2YXIgZHIsVXI9cHIuc3BsaXQoIi4i''@;'; put 'put ''KSxabj0rcG4uZ3JvdXBTaXplLHNyPStwbi5zZWNvbmRhcnlHcm91cFNpemUsTnI9cG4uZ3JvdXBTZXBhcmF0b3J8fCIiLE1yPVVyWzBdLFpyPVVyWzFdLGFhPXRoaXMuczwwLEJhPWFhP01yLnNsaWNlKDEpOk1yLElvPUJhLmxlbmd0aDtpZihzciYmKGRyPVpuLFpuPXNyLHNyPWRyLElvLT1k''@;'; put 'put ''ciksWm4+MCYmSW8+MCl7Zm9yKE1yPUJhLnN1YnN0cigwLGRyPUlvJVpufHxabik7ZHI8SW87ZHIrPVpuKU1yKz1OcitCYS5zdWJzdHIoZHIsWm4pO3NyPjAmJihNcis9TnIrQmEuc2xpY2UoZHIpKSxhYSYmKE1yPSItIitNcil9cHI9WnI/TXIrKHBuLmRlY2ltYWxTZXBhcmF0b3J8fCIiKSso''@;'; put 'put ''KHNyPStwbi5mcmFjdGlvbkdyb3VwU2l6ZSk/WnIucmVwbGFjZShuZXcgUmVnRXhwKCJcXGR7IitzcisifVxcQiIsImciKSwiJCYiKyhwbi5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yfHwiIikpOlpyKTpNcn1yZXR1cm4ocG4ucHJlZml4fHwiIikrcHIrKHBuLnN1ZmZpeHx8IiIpfSxtci50b0Zy''@;'; put 'put ''YWN0aW9uPWZ1bmN0aW9uKG9uKXt2YXIgeW4scG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnIsYWEsQmE9dGhpcyxJbz1CYS5jO2lmKG51bGwhPW9uJiYoIShabj1uZXcgSHQob24pKS5pc0ludGVnZXIoKSYmKFpuLmN8fDEhPT1abi5zKXx8Wm4ubHQoR24pKSl0aHJvdyBFcnJvcih2KyJB''@;'; put 'put ''cmd1bWVudCAiKyhabi5pc0ludGVnZXIoKT8ib3V0IG9mIHJhbmdlOiAiOiJub3QgYW4gaW50ZWdlcjogIikrcXIoWm4pKTtpZighSW8pcmV0dXJuIG5ldyBIdChCYSk7Zm9yKHluPW5ldyBIdChHbiksTnI9cG49bmV3IEh0KEduKSxwcj1zcj1uZXcgSHQoR24pLGFhPXJ0KElvKSxkcj15bi5l''@;'; put 'put ''PWFhLmxlbmd0aC1CYS5lLTEseW4uY1swXT1jZVsoVXI9ZHIlWik8MD9aK1VyOlVyXSxvbj0hb258fFpuLmNvbXBhcmVkVG8oeW4pPjA/ZHI+MD95bjpOcjpabixVcj1JcixJcj0xLzAsWm49bmV3IEh0KGFhKSxzci5jWzBdPTA7TXI9TW4oWm4seW4sMCwxKSwxIT0oJG49cG4ucGx1cyhNci50''@;'; put 'put ''aW1lcyhwcikpKS5jb21wYXJlZFRvKG9uKTspcG49cHIscHI9JG4sTnI9c3IucGx1cyhNci50aW1lcygkbj1OcikpLHNyPSRuLHluPVpuLm1pbnVzKE1yLnRpbWVzKCRuPXluKSksWm49JG47cmV0dXJuICRuPU1uKG9uLm1pbnVzKHBuKSxwciwwLDEpLHNyPXNyLnBsdXMoJG4udGltZXMoTnIp''@;'; put 'put ''KSxwbj1wbi5wbHVzKCRuLnRpbWVzKHByKSksc3Iucz1Oci5zPUJhLnMsWnI9TW4oTnIscHIsZHIqPTIsX2kpLm1pbnVzKEJhKS5hYnMoKS5jb21wYXJlZFRvKE1uKHNyLHBuLGRyLF9pKS5taW51cyhCYSkuYWJzKCkpPDE/W05yLHByXTpbc3IscG5dLElyPVVyLFpyfSxtci50b051bWJlcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybitxcih0aGlzKX0sbXIudG9QcmVjaXNpb249ZnVuY3Rpb24ob24seW4pe3JldHVybiBudWxsIT1vbiYmZHQob24sMSxFZSksSG4odGhpcyxvbix5biwyKX0sbXIudG9TdHJpbmc9ZnVuY3Rpb24ob24pe3ZhciB5bixwbj10aGlzLHByPXBuLnMsJG49cG4uZTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PSRuP3ByPyh5bj0iSW5maW5pdHkiLHByPDAmJih5bj0iLSIreW4pKTp5bj0iTmFOIjoobnVsbD09b24/eW49JG48PU9ufHwkbj49enI/dm4ocnQocG4uYyksJG4pOkNuKHJ0KHBuLmMpLCRuLCIwIik6MTA9PT1vbiYmTnQ/eW49Q24ocnQoKHBuPUhyKG5ldyBIdChwbiksYWkr''@;'; put 'put ''JG4rMSxfaSkpLmMpLHBuLmUsIjAiKTooZHQob24sMix2dC5sZW5ndGgsIkJhc2UiKSx5bj1DcihDbihydChwbi5jKSwkbiwiMCIpLDEwLG9uLHByLCEwKSkscHI8MCYmcG4uY1swXSYmKHluPSItIit5bikpLHlufSxtci52YWx1ZU9mPW1yLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBxcih0''@;'; put 'put ''aGlzKX0sbXIuX2lzQmlnTnVtYmVyPSEwLG51bGwhPXRuJiZIdC5zZXQodG4pLEh0fSgpLGEuZGVmYXVsdD1hLkJpZ051bWJlcj1hLGMuZXhwb3J0cz9jLmV4cG9ydHM9YToobHx8KGw9dHlwZW9mIHNlbGY8InUiJiZzZWxmP3NlbGY6d2luZG93KSxsLkJpZ051bWJlcj1hKX0oR2F0KX0oYzRl''@;'; put 'put ''KTt2YXIgdTRlPWM0ZS5leHBvcnRzO2NvbnN0IGYzPXJKKCksZ290PWVKKCksbW90PXRKLHZvdD11NGUsVzA9e3RyaWxsaW9uOk1hdGgucG93KDEwLDEyKSxiaWxsaW9uOk1hdGgucG93KDEwLDkpLG1pbGxpb246TWF0aC5wb3coMTAsNiksdGhvdXNhbmQ6TWF0aC5wb3coMTAsMyl9LHNUPXt0''@;'; put 'put ''b3RhbExlbmd0aDowLGNoYXJhY3RlcmlzdGljOjAsZm9yY2VBdmVyYWdlOiExLGF2ZXJhZ2U6ITEsbWFudGlzc2E6LTEsb3B0aW9uYWxNYW50aXNzYTohMCx0aG91c2FuZFNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZDohMSxuZWdhdGl2ZToic2lnbiIsZm9yY2VTaWduOiExLHJvdW5kaW5n''@;'; put 'put ''RnVuY3Rpb246TWF0aC5yb3VuZCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMX0se2JpbmFyeVN1ZmZpeGVzOmQ0ZSxkZWNpbWFsU3VmZml4ZXM6WVB9PWYzLmN1cnJlbnRCeXRlcygpLGlKPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOllQLG1hcmtlcjoiYmQifSxiaW5hcnk6''@;'; put 'put ''e3NjYWxlOjEwMjQsc3VmZml4ZXM6ZDRlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpZUCxtYXJrZXI6ImQifX07ZnVuY3Rpb24gR1AoYyxsLGEpe2xldCBkPWxbMF0saD1NYXRoLmFicyhjKTtpZihoPj1hKXtmb3IobGV0IGY9MTtmPGwubGVuZ3RoOysrZil7bGV0''@;'; put 'put ''IHY9TWF0aC5wb3coYSxmKSxNPU1hdGgucG93KGEsZisxKTtpZihoPj12JiZoPE0pe2Q9bFtmXSxjLz12O2JyZWFrfX1kPT09bFswXSYmKGMvPU1hdGgucG93KGEsbC5sZW5ndGgtMSksZD1sW2wubGVuZ3RoLTFdKX1yZXR1cm57dmFsdWU6YyxzdWZmaXg6ZH19ZnVuY3Rpb24gJFAoYyl7bGV0''@;'; put 'put ''IGw9IiI7Zm9yKGxldCBhPTA7YTxjO2ErKylsKz0iMCI7cmV0dXJuIGx9ZnVuY3Rpb24gbFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphPWYzLGRlY2ltYWxTZXBhcmF0b3I6ZCxkZWZhdWx0czpoPWEuY3VycmVudERlZmF1bHRzKCl9KXtsZXQgZj1jLl92YWx1ZTtpZigw''@;'; put 'put ''PT09ZiYmYS5oYXNaZXJvRm9ybWF0KCkpcmV0dXJuIGEuZ2V0WmVyb0Zvcm1hdCgpO2lmKCFpc0Zpbml0ZShmKSlyZXR1cm4gZi50b1N0cmluZygpO2xldCB2PU9iamVjdC5hc3NpZ24oe30sc1QsaCxsKSxNPXYudG90YWxMZW5ndGgsRD1NPzA6di5jaGFyYWN0ZXJpc3RpYyxaPXYub3B0aW9u''@;'; put 'put ''YWxDaGFyYWN0ZXJpc3RpYyxyZT12LmZvcmNlQXZlcmFnZSxiZT0hIU18fCEhcmV8fHYuYXZlcmFnZSxFZT1NPy0xOmJlJiZ2b2lkIDA9PT1sLm1hbnRpc3NhPzA6di5tYW50aXNzYSxCZT0hTSYmKHZvaWQgMD09PWwub3B0aW9uYWxNYW50aXNzYT8tMT09PUVlOnYub3B0aW9uYWxNYW50aXNz''@;'; put 'put ''YSkscWU9di50cmltTWFudGlzc2EscnQ9di50aG91c2FuZFNlcGFyYXRlZCxwdD12LnNwYWNlU2VwYXJhdGVkLGR0PXYubmVnYXRpdmUsSnQ9di5mb3JjZVNpZ24sdm49di5leHBvbmVudGlhbCxDbj12LnJvdW5kaW5nRnVuY3Rpb24sdG49IiI7aWYoYmUpe2xldCBDcj1mdW5jdGlvbiBBb3Qo''@;'; put 'put ''e3ZhbHVlOmMsZm9yY2VBdmVyYWdlOmwsbG93UHJlY2lzaW9uOmE9ITAsYWJicmV2aWF0aW9uczpkLHNwYWNlU2VwYXJhdGVkOmg9ITEsdG90YWxMZW5ndGg6Zj0wLHJvdW5kaW5nRnVuY3Rpb246dj1NYXRoLnJvdW5kfSl7bGV0IE09IiIsRD1NYXRoLmFicyhjKSxaPS0xO2lmKGwmJmRbbF0m''@;'; put 'put ''JlcwW2xdPyhNPWRbbF0sYy89VzBbbF0pOkQ+PVcwLnRyaWxsaW9ufHxhJiYxPT09dihEL1cwLnRyaWxsaW9uKT8oTT1kLnRyaWxsaW9uLGMvPVcwLnRyaWxsaW9uKTpEPFcwLnRyaWxsaW9uJiZEPj1XMC5iaWxsaW9ufHxhJiYxPT09dihEL1cwLmJpbGxpb24pPyhNPWQuYmlsbGlvbixjLz1X''@;'; put 'put ''MC5iaWxsaW9uKTpEPFcwLmJpbGxpb24mJkQ+PVcwLm1pbGxpb258fGEmJjE9PT12KEQvVzAubWlsbGlvbik/KE09ZC5taWxsaW9uLGMvPVcwLm1pbGxpb24pOihEPFcwLm1pbGxpb24mJkQ+PVcwLnRob3VzYW5kfHxhJiYxPT09dihEL1cwLnRob3VzYW5kKSkmJihNPWQudGhvdXNhbmQsYy89''@;'; put 'put ''VzAudGhvdXNhbmQpLE0mJihNPShoPyIgIjoiIikrTSksZil7bGV0IGNlPWM8MCxiZT1jLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVswXTtaPU1hdGgubWF4KGYtKGNlP2JlLmxlbmd0aC0xOmJlLmxlbmd0aCksMCl9cmV0dXJue3ZhbHVlOmMsYWJicmV2aWF0aW9uOk0sbWFudGlzc2FQcmVjaXNp''@;'; put 'put ''b246Wn19KHt2YWx1ZTpmLGZvcmNlQXZlcmFnZTpyZSxsb3dQcmVjaXNpb246di5sb3dQcmVjaXNpb24sYWJicmV2aWF0aW9uczphLmN1cnJlbnRBYmJyZXZpYXRpb25zKCksc3BhY2VTZXBhcmF0ZWQ6cHQscm91bmRpbmdGdW5jdGlvbjpDbix0b3RhbExlbmd0aDpNfSk7Zj1Dci52YWx1ZSx0''@;'; put 'put ''bis9Q3IuYWJicmV2aWF0aW9uLE0mJihFZT1Dci5tYW50aXNzYVByZWNpc2lvbil9aWYodm4pe2xldCBDcj1mdW5jdGlvbiBrb3Qoe3ZhbHVlOmMsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246bH0pe2xldFthLGRdPWMudG9FeHBvbmVudGlhbCgpLnNwbGl0KCJlIiksaD0rYTtyZXR1cm4gbD8o''@;'; put 'put ''MTxsJiYoaCo9TWF0aC5wb3coMTAsbC0xKSxkPStkLShsLTEpLGQ9ZD49MD9gKyR7ZH1gOmQpLHt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfSk6e3ZhbHVlOmgsYWJicmV2aWF0aW9uOmBlJHtkfWB9fSh7dmFsdWU6ZixjaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjpEfSk7Zj1Dci52YWx1''@;'; put 'put ''ZSx0bj1Dci5hYmJyZXZpYXRpb24rdG59bGV0IE1uPWZ1bmN0aW9uIFJvdChjLGwsYSxkLGgsZil7aWYoLTE9PT1kKXJldHVybiBjO2xldCB2PWZ1bmN0aW9uIElvdChjLGwsYT1NYXRoLnJvdW5kKXtyZXR1cm4tMSE9PWMudG9TdHJpbmcoKS5pbmRleE9mKCJlIik/ZnVuY3Rpb24gRG90KGMs''@;'; put 'put ''bCl7bGV0IGE9Yy50b1N0cmluZygpLFtkLGhdPWEuc3BsaXQoImUiKSxbZix2PSIiXT1kLnNwbGl0KCIuIik7aWYoK2g+MClhPWYrdiskUChoLXYubGVuZ3RoKTtlbHNle2xldCBNPSIuIjtNPStmPDA/YC0wJHtNfWA6YDAke019YDtsZXQgRD0oJFAoLWgtMSkrTWF0aC5hYnMoZikrdikuc3Vi''@;'; put 'put ''c3RyKDAsbCk7RC5sZW5ndGg8bCYmKEQrPSRQKGwtRC5sZW5ndGgpKSxhPU0rRH1yZXR1cm4raD4wJiZsPjAmJihhKz1gLiR7JFAobCl9YCksYX0oYyxsKTpuZXcgdm90KGEoK2Ake2N9ZSske2x9YCkvTWF0aC5wb3coMTAsbCkpLnRvRml4ZWQobCl9KGwsZCxmKSxbTSxEPSIiXT12LnRvU3Ry''@;'; put 'put ''aW5nKCkuc3BsaXQoIi4iKTtpZihELm1hdGNoKC9eMCskLykmJihhfHxoKSlyZXR1cm4gTTtsZXQgWj1ELm1hdGNoKC8wKyQvKTtyZXR1cm4gaCYmWj9gJHtNfS4ke0QudG9TdHJpbmcoKS5zbGljZSgwLFouaW5kZXgpfWA6di50b1N0cmluZygpfShmLnRvU3RyaW5nKCksZixCZSxFZSxxZSxD''@;'; put 'put ''bik7cmV0dXJuIE1uPWZ1bmN0aW9uIExvdChjLGwsYSxkKXtsZXQgaD1jLFtmLHZdPWgudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKGYubWF0Y2goL14tPzAkLykmJmEpcmV0dXJuIHY/YCR7Zi5yZXBsYWNlKCIwIiwiIil9LiR7dn1gOmYucmVwbGFjZSgiMCIsIiIpO2NvbnN0IE09bDwwJiYw''@;'; put 'put ''PT09Zi5pbmRleE9mKCItIik7aWYoTSYmKGY9Zi5zbGljZSgxKSxoPWguc2xpY2UoMSkpLGYubGVuZ3RoPGQpe2xldCBEPWQtZi5sZW5ndGg7Zm9yKGxldCBaPTA7WjxEO1orKyloPWAwJHtofWB9cmV0dXJuIE0mJihoPWAtJHtofWApLGgudG9TdHJpbmcoKX0oTW4sZixaLEQpLE1uPWZ1bmN0''@;'; put 'put ''aW9uIFBvdChjLGwsYSxkLGgpe2xldCBmPWQuY3VycmVudERlbGltaXRlcnMoKSx2PWYudGhvdXNhbmRzO2g9aHx8Zi5kZWNpbWFsO2xldCBNPWYudGhvdXNhbmRzU2l6ZXx8MyxEPWMudG9TdHJpbmcoKSxaPUQuc3BsaXQoIi4iKVswXSxyZT1ELnNwbGl0KCIuIilbMV07Y29uc3QgY2U9bDww''@;'; put 'put ''JiYwPT09Wi5pbmRleE9mKCItIik7cmV0dXJuIGEmJihjZSYmKFo9Wi5zbGljZSgxKSksZnVuY3Rpb24gT290KGMsbCl7bGV0IGE9W10sZD0wO2ZvcihsZXQgaD1jO2g+MDtoLS0pZD09PWwmJihhLnVuc2hpZnQoaCksZD0wKSxkKys7cmV0dXJuIGF9KFoubGVuZ3RoLE0pLmZvckVhY2goKEVl''@;'; put 'put ''LEJlKT0+e1o9Wi5zbGljZSgwLEVlK0JlKSt2K1ouc2xpY2UoRWUrQmUpfSksY2UmJihaPWAtJHtafWApKSxEPXJlP1oraCtyZTpaLER9KE1uLGYscnQsYSxkKSwoYmV8fHZuKSYmKE1uPWZ1bmN0aW9uIEZvdChjLGwpe3JldHVybiBjK2x9KE1uLHRuKSksKEp0fHxmPDApJiYoTW49ZnVuY3Rp''@;'; put 'put ''b24gSG90KGMsbCxhKXtyZXR1cm4gMD09PWw/YzowPT0rYz9jLnJlcGxhY2UoIi0iLCIiKTpsPjA/YCske2N9YDoic2lnbiI9PT1hP2M6YCgke2MucmVwbGFjZSgiLSIsIiIpfSlgfShNbixmLGR0KSksTW59ZnVuY3Rpb24gT18oYyxsKXtpZighYylyZXR1cm4gbDtsZXQgYT1PYmplY3Qua2V5''@;'; put 'put ''cyhjKTtyZXR1cm4gMT09PWEubGVuZ3RoJiYib3V0cHV0Ij09PWFbMF0/bDpjfWNvbnN0IERnPXU0ZTtmdW5jdGlvbiBoNGUoYyxsLGEpe2xldCBkPW5ldyBEZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRGcoaCksYy5fdmFsdWU9ZC5t''@;'; put 'put ''aW51cyhoKS50b051bWJlcigpLGN9Y29uc3QgVnA9ckooKSwkb3Q9ZUooKSxLb3Q9KGM9Pih7bG9hZExhbmd1YWdlc0luTm9kZTpsPT5mdW5jdGlvbiBmb3QoYyxsKXtjLmZvckVhY2goYT0+e2xldCBkO3RyeXtkPWZ1bmN0aW9uIGhvdChjKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBk''@;'; put 'put ''eW5hbWljYWxseSByZXF1aXJlICInK2MrJyIuIFBsZWFzZSBjb25maWd1cmUgdGhlIGR5bmFtaWNSZXF1aXJlVGFyZ2V0cyBvci9hbmQgaWdub3JlRHluYW1pY1JlcXVpcmVzIG9wdGlvbiBvZiBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHJlcXVpcmUg''@;'; put 'put ''Y2FsbCB0byB3b3JrLicpfShgLi4vbGFuZ3VhZ2VzLyR7YX1gKX1jYXRjaHtjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gbG9hZCAiJHthfSIuIE5vIG1hdGNoaW5nIGxhbmd1YWdlIGZpbGUgZm91bmQuYCl9ZCYmbC5yZWdpc3Rlckxhbmd1YWdlKGQpfSl9KGwsYyl9KSkoY3UpLHFvdD1vNGUo''@;'; put 'put ''KTtsZXQgczk9KGM9Pih7Zm9ybWF0OiguLi5sKT0+ZnVuY3Rpb24gYm90KGMsbD17fSxhKXtpZigic3RyaW5nIj09dHlwZW9mIGwmJihsPW1vdC5wYXJzZUZvcm1hdChsKSksIWdvdC52YWxpZGF0ZUZvcm1hdChsKSlyZXR1cm4iRVJST1I6IGludmFsaWQgZm9ybWF0IjtsZXQgaD1sLnByZWZp''@;'; put 'put ''eHx8IiIsZj1sLnBvc3RmaXh8fCIiLHY9ZnVuY3Rpb24geW90KGMsbCxhKXtzd2l0Y2gobC5vdXRwdXQpe2Nhc2UiY3VycmVuY3kiOnJldHVybiBmdW5jdGlvbiBUb3QoYyxsLGEpe2NvbnN0IGQ9YS5jdXJyZW50Q3VycmVuY3koKTtsZXQgdixoPU9iamVjdC5hc3NpZ24oe30sbCksZj1PYmpl''@;'; put 'put ''Y3QuYXNzaWduKHt9LHNULGgpLE09IiIsRD0hIWYudG90YWxMZW5ndGh8fCEhZi5mb3JjZUF2ZXJhZ2V8fGYuYXZlcmFnZSxaPWguY3VycmVuY3lQb3NpdGlvbnx8ZC5wb3NpdGlvbixyZT1oLmN1cnJlbmN5U3ltYm9sfHxkLnN5bWJvbDtjb25zdCBjZT12b2lkIDAhPT1mLnNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQ3VycmVuY3k/Zi5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5OmYuc3BhY2VTZXBhcmF0ZWQ7dm9pZCAwPT09aC5sb3dQcmVjaXNpb24mJihoLmxvd1ByZWNpc2lvbj0hMSksY2UmJihNPSIgIiksImluZml4Ij09PVomJih2PU0rcmUrTSk7bGV0IGJlPWxUKHtpbnN0YW5jZTpjLHByb3ZpZGVk''@;'; put 'put ''Rm9ybWF0Omgsc3RhdGU6YSxkZWNpbWFsU2VwYXJhdG9yOnZ9KTtyZXR1cm4icHJlZml4Ij09PVomJihiZT1jLl92YWx1ZTwwJiYic2lnbiI9PT1mLm5lZ2F0aXZlP2AtJHtNfSR7cmV9JHtiZS5zbGljZSgxKX1gOmMuX3ZhbHVlPjAmJmYuZm9yY2VTaWduP2ArJHtNfSR7cmV9JHtiZS5zbGlj''@;'; put 'put ''ZSgxKX1gOnJlK00rYmUpLCghWnx8InBvc3RmaXgiPT09WikmJihNPSFmLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uJiZEPyIiOk0sYmU9YmUrTStyZSksYmV9KGMsbD1PXyhsLGYzLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSksZjMpO2Nhc2UicGVyY2VudCI6cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIEVvdChjLGwsYSxkKXtsZXQgaD1sLnByZWZpeFN5bWJvbCxmPWxUKHtpbnN0YW5jZTpkKDEwMCpjLl92YWx1ZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1PYmplY3QuYXNzaWduKHt9LHNULGwpO3JldHVybiBoP2AlJHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke2Z9''@;'; put 'put ''YDpgJHtmfSR7di5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdCgpKSxmMyxhKTtjYXNlImJ5dGUiOnJldHVybiBmdW5jdGlvbiBTb3QoYyxsLGEsZCl7bGV0IGg9bC5iYXNlfHwiYmluYXJ5IixmPU9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sc1QsbCk7Y29uc3R7YmluYXJ5U3VmZml4ZXM6dixkZWNpbWFsU3VmZml4ZXM6TX09YS5jdXJyZW50Qnl0ZXMoKTtsZXQgWj17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpNfHxZUCxtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOnZ8fGQ0ZSxtYXJr''@;'; put 'put ''ZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6TXx8WVAsbWFya2VyOiJkIn19W2hdLHt2YWx1ZTpyZSxzdWZmaXg6Y2V9PUdQKGMuX3ZhbHVlLFouc3VmZml4ZXMsWi5zY2FsZSk7cmV0dXJuYCR7bFQoe2luc3RhbmNlOmQocmUpLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YSxk''@;'; put 'put ''ZWZhdWx0czphLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpfSl9JHtmLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke2NlfWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpKSxmMyxhKTtjYXNlInRpbWUiOnJldHVybiBsPU9fKGwsZjMuY3VycmVudFRpbWVEZWZhdWx0''@;'; put 'put ''Rm9ybWF0KCkpLGZ1bmN0aW9uIHhvdChjKXtsZXQgbD1NYXRoLmZsb29yKGMuX3ZhbHVlLzYwLzYwKSxhPU1hdGguZmxvb3IoKGMuX3ZhbHVlLTYwKmwqNjApLzYwKSxkPU1hdGgucm91bmQoYy5fdmFsdWUtNjAqbCo2MC02MCphKTtyZXR1cm5gJHtsfToke2E8MTA/IjAiOiIifSR7YX06JHtk''@;'; put 'put ''PDEwPyIwIjoiIn0ke2R9YH0oYyk7Y2FzZSJvcmRpbmFsIjpyZXR1cm4gZnVuY3Rpb24gTW90KGMsbCxhKXtsZXQgZD1hLmN1cnJlbnRPcmRpbmFsKCksaD1PYmplY3QuYXNzaWduKHt9LHNULGwpLGY9bFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1kKGMuX3Zh''@;'; put 'put ''bHVlKTtyZXR1cm5gJHtmfSR7aC5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHt2fWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdCgpKSxmMyk7ZGVmYXVsdDpyZXR1cm4gbFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxudW1icm86YX0pfX0oYyxsLGEpO3Jl''@;'; put 'put ''dHVybiB2PWZ1bmN0aW9uIE5vdChjLGwpe3JldHVybiBsK2N9KHYsaCksdj1mdW5jdGlvbiBWb3QoYyxsKXtyZXR1cm4gYytsfSh2LGYpLHZ9KC4uLmwsYyksZ2V0Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiBDb3QoYyl7bGV0IGw9aUouZ2VuZXJhbDtyZXR1cm4gR1AoYy5fdmFsdWUsbC5z''@;'; put 'put ''dWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0QmluYXJ5Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiB3b3QoYyl7bGV0IGw9aUouYmluYXJ5O3JldHVybiBHUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxnZXREZWNpbWFsQnl0ZVVuaXQ6''@;'; put 'put ''KC4uLmwpPT5mdW5jdGlvbiBfb3QoYyl7bGV0IGw9aUouZGVjaW1hbDtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZm9ybWF0T3JEZWZhdWx0Ok9ffSkpKGN1KSxsOT0oYz0+KHthZGQ6KGwsYSk9PmZ1bmN0aW9uIGpvdChjLGwsYSl7bGV0''@;'; put 'put ''IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLnBsdXMoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksc3VidHJhY3Q6KGwsYSk9Pmg0ZShsLGEsYyksbXVsdGlwbHk6KGwsYSk9PmZ1bmN0aW9uIHpv''@;'; put 'put ''dChjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLnRpbWVzKGgpLnRvTnVtYmVyKCksY30obCxhLGMpLGRpdmlkZToobCxhKT0+ZnVuY3Rpb24gVW90KGMsbCxhKXtsZXQgZD1u''@;'; put 'put ''ZXcgRGcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IERnKGgpLGMuX3ZhbHVlPWQuZGl2aWRlZEJ5KGgpLnRvTnVtYmVyKCksY30obCxhLGMpLHNldDoobCxhKT0+ZnVuY3Rpb24gWm90KGMsbCxhKXtsZXQgZD1sO3JldHVybiBhLmlzTnVt''@;'; put 'put ''YnJvKGwpJiYoZD1sLl92YWx1ZSksYy5fdmFsdWU9ZCxjfShsLGEsYyksZGlmZmVyZW5jZToobCxhKT0+ZnVuY3Rpb24gV290KGMsbCxhKXtsZXQgZD1hKGMuX3ZhbHVlKTtyZXR1cm4gaDRlKGQsbCxhKSxNYXRoLmFicyhkLl92YWx1ZSl9KGwsYSxjKSxCaWdOdW1iZXI6RGd9KSkoY3UpO2Nv''@;'; put 'put ''bnN0IFhvdD10SjtjbGFzcyBmNGV7Y29uc3RydWN0b3IobCl7dGhpcy5fdmFsdWU9bH1jbG9uZSgpe3JldHVybiBjdSh0aGlzLl92YWx1ZSl9Zm9ybWF0KGw9e30pe3JldHVybiBzOS5mb3JtYXQodGhpcyxsKX1mb3JtYXRDdXJyZW5jeShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJihs''@;'; put 'put ''PVhvdC5wYXJzZUZvcm1hdChsKSksKGw9czkuZm9ybWF0T3JEZWZhdWx0KGwsVnAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSkub3V0cHV0PSJjdXJyZW5jeSIsczkuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0VGltZShsPXt9KXtyZXR1cm4gbC5vdXRwdXQ9InRpbWUiLHM5LmZvcm1h''@;'; put 'put ''dCh0aGlzLGwpfWJpbmFyeUJ5dGVVbml0cygpe3JldHVybiBzOS5nZXRCaW5hcnlCeXRlVW5pdCh0aGlzKX1kZWNpbWFsQnl0ZVVuaXRzKCl7cmV0dXJuIHM5LmdldERlY2ltYWxCeXRlVW5pdCh0aGlzKX1ieXRlVW5pdHMoKXtyZXR1cm4gczkuZ2V0Qnl0ZVVuaXQodGhpcyl9ZGlmZmVyZW5j''@;'; put 'put ''ZShsKXtyZXR1cm4gbDkuZGlmZmVyZW5jZSh0aGlzLGwpfWFkZChsKXtyZXR1cm4gbDkuYWRkKHRoaXMsbCl9c3VidHJhY3QobCl7cmV0dXJuIGw5LnN1YnRyYWN0KHRoaXMsbCl9bXVsdGlwbHkobCl7cmV0dXJuIGw5Lm11bHRpcGx5KHRoaXMsbCl9ZGl2aWRlKGwpe3JldHVybiBsOS5kaXZp''@;'; put 'put ''ZGUodGhpcyxsKX1zZXQobCl7cmV0dXJuIGw5LnNldCh0aGlzLHA0ZShsKSl9dmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9dmFsdWVPZigpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gcDRlKGMpe2xldCBsPWM7cmV0dXJuIGN1LmlzTnVtYnJvKGMpP2w9Yy5fdmFsdWU6InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBjP2w9Y3UudW5mb3JtYXQoYyk6aXNOYU4oYykmJihsPU5hTiksbH1mdW5jdGlvbiBjdShjKXtyZXR1cm4gbmV3IGY0ZShwNGUoYykpfWN1LnZlcnNpb249IjIuNS4wIixjdS5pc051bWJybz1mdW5jdGlvbihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIGY0ZX0sY3UubGFuZ3Vh''@;'; put 'put ''Z2U9VnAuY3VycmVudExhbmd1YWdlLGN1LnJlZ2lzdGVyTGFuZ3VhZ2U9VnAucmVnaXN0ZXJMYW5ndWFnZSxjdS5zZXRMYW5ndWFnZT1WcC5zZXRMYW5ndWFnZSxjdS5sYW5ndWFnZXM9VnAubGFuZ3VhZ2VzLGN1Lmxhbmd1YWdlRGF0YT1WcC5sYW5ndWFnZURhdGEsY3UuemVyb0Zvcm1hdD1W''@;'; put 'put ''cC5zZXRaZXJvRm9ybWF0LGN1LmRlZmF1bHRGb3JtYXQ9VnAuY3VycmVudERlZmF1bHRzLGN1LnNldERlZmF1bHRzPVZwLnNldERlZmF1bHRzLGN1LmRlZmF1bHRDdXJyZW5jeUZvcm1hdD1WcC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0LGN1LnZhbGlkYXRlPSRvdC52YWxpZGF0ZSxj''@;'; put 'put ''dS5sb2FkTGFuZ3VhZ2VzSW5Ob2RlPUtvdC5sb2FkTGFuZ3VhZ2VzSW5Ob2RlLGN1LnVuZm9ybWF0PXFvdC51bmZvcm1hdCxjdS5CaWdOdW1iZXI9bDkuQmlnTnVtYmVyO3ZhciAkbT0kYXQoY3UpO2Z1bmN0aW9uIGc0ZShjLGwpe2lmKG0xKGMpKXtjb25zdCBhPWwubnVtZXJpY0Zvcm1hdCxk''@;'; put 'put ''PWEmJmEuY3VsdHVyZXx8Ii0iLGg9YSYmYS5wYXR0ZXJuO2lmKHR5cGVvZiBkPCJ1IiYmISRtLmxhbmd1YWdlcygpW2RdKXtjb25zdCBmPWQucmVwbGFjZSgiLSIsIiIpLHY9JG0uYWxsTGFuZ3VhZ2VzPyRtLmFsbExhbmd1YWdlc1tkXTokbVtmXTt2JiYkbS5yZWdpc3Rlckxhbmd1YWdlKHYp''@;'; put 'put ''fSRtLnNldExhbmd1YWdlKGQpLGM9JG0oYykuZm9ybWF0KGh8fCIwIil9cmV0dXJuIGN9ZnVuY3Rpb24gYUooYyxsLGEsZCxoLGYsdil7bGV0IE09ZjtpZihtMShNKSl7bGV0IFo9W107aWYoQXJyYXkuaXNBcnJheSh2LmNsYXNzTmFtZSkpWj12LmNsYXNzTmFtZTtlbHNle3ZhciBEO2NvbnN0''@;'; put 'put ''IHJlPW51bGwhPT0oRD12LmNsYXNzTmFtZSkmJnZvaWQgMCE9PUQ/RDoiIjtyZS5sZW5ndGgmJihaPXJlLnNwbGl0KCIgIikpfU09ZzRlKE0sdiksWi5pbmRleE9mKCJodExlZnQiKTwwJiZaLmluZGV4T2YoImh0Q2VudGVyIik8MCYmWi5pbmRleE9mKCJodFJpZ2h0Iik8MCYmWi5pbmRleE9m''@;'; put 'put ''KCJodEp1c3RpZnkiKTwwJiZaLnB1c2goImh0UmlnaHQiKSxaLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJloucHVzaCgiaHROdW1lcmljIiksdi5jbGFzc05hbWU9Wi5qb2luKCIgIiksbC5kaXI9Imx0ciJ9QWcoYyxsLGEsZCxoLE0sdil9ZnVuY3Rpb24gb0ooYyxsLGEsZCxoLGYsdil7QWcu''@;'; put 'put ''YXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2NvbnN0IEQ9di5oYXNoU3ltYm9sfHwiKiI7bGV0IFo9IiI7R2EoKHYuaGFzaExlbmd0aHx8bC5pbm5lckhUTUwubGVuZ3RoKS0xLCgpPT57Wis9RH0pLHo3KGwsWil9ZnVuY3Rpb24gc0ooYyxsLGEsZCxoLGYsdil7QWcuYXBwbHkodGhpcyxb''@;'; put 'put ''YyxsLGEsZCxoLGYsdl0pfWZ1bmN0aW9uIGxKKGMsbCxhLGQsaCxmLHYpe0FnLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxsLmRpcj0ibHRyIn1mdW5jdGlvbiBjVChjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1hP2woITApOnRoaXMuc3Ry''@;'; put 'put ''aWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2UoYSxtNGUoYSxsKSk6bTRlKGEsbCkodGhpcy5zb3VyY2UpOmwoITApfWZ1bmN0aW9uIG00ZShjLGwpe2NvbnN0IGE9YztyZXR1cm4gZnVuY3Rpb24oZCl7bGV0IGg9ITE7Zm9yKGxldCBm''@;'; put 'put ''PTAsdj1kLmxlbmd0aDtmPHY7ZisrKWlmKGE9PT1kW2ZdKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIHY0ZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihuZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERhdGUoKSk/bDpuZXcgRGF0ZShsLmdldFRpbWUoKSs2ZTQqbC5n''@;'; put 'put ''ZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBLUChjLGwpe2NvbnN0IGE9aGZlKFlwZSx0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBmPU9vKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRlZmF1bHREYXRlRm9ybWF0LCEwKS5pc1ZhbGlkKCksdj1Pbyhu''@;'; put 'put ''ZXcgRGF0ZShkKSkuaXNWYWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYodj0hMCxmPSEwKSx2fHwoaD0hMSksIXYmJmYmJihoPSEwKSx2JiYhZilpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgTT1mdW5jdGlvbiBvc3QoYyxsKXtjb25zdCBhPU9vKHY0ZShj''@;'; put 'put ''KSksZD1PbyhjLGwpLGg9Yy5zZWFyY2goL1tBLVphLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQuaXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChsKX0oZCx0aGlzLmRhdGVGb3JtYXQpO3RoaXMuaW5zdGFuY2Uu''@;'; put 'put ''c2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxNLCJkYXRlVmFsaWRhdG9yIiksaD0hMH1lbHNlIGg9ITE7bChoKX1mdW5jdGlvbiBjSihjLGwpe2NULmFwcGx5KHRoaXMsW2MsbF0pfWZ1bmN0aW9uIHVKKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCgh''@;'; put 'put ''KCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmbTEoYykpfWFKLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLG9KLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixzSi5SRU5ERVJFUl9UWVBFPSJzZWxlY3QiLGxKLlJFTkRFUkVSX1RZUEU9InRpbWUiLGNULlZBTElEQVRPUl9UWVBF''@;'; put 'put ''PSJhdXRvY29tcGxldGUiLEtQLlZBTElEQVRPUl9UWVBFPSJkYXRlIixjSi5WQUxJREFUT1JfVFlQRT0iZHJvcGRvd24iLHVKLlZBTElEQVRPUl9UWVBFPSJudW1lcmljIjtjb25zdCBjc3Q9WyJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1oiLCJYIiwieCJdO2Z1bmN0aW9uIHFQKGMsbCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLnRpbWVGb3JtYXR8fCJoOm1tOnNzIGEiO2xldCBkPSEwLGg9YztudWxsPT09aCYmKGg9IiIpLGg9L15cZHszLH0kLy50ZXN0KGgpP3BhcnNlSW50KGgsMTApOmg7Y29uc3QgZj0vXlxkezEsMn0kLy50ZXN0KGgpO2YmJihoKz0iOjAwIik7Y29uc3Qgdj1PbyhoLGNzdCwhMCku''@;'; put 'put ''aXNWYWxpZCgpP09vKGgpOk9vKGgsYSk7bGV0IE09di5pc1ZhbGlkKCksRD1PbyhoLGEsITApLmlzVmFsaWQoKSYmIWY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWgmJihNPSEwLEQ9ITApLE18fChkPSExKSwhTSYmRCYmKGQ9ITApLE0mJiFEKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0''@;'; put 'put ''KXtjb25zdCBaPXYuZm9ybWF0KGEpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxaLCJ0aW1lVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7bChkKX1xUC5WQUxJREFUT1JfVFlQRT0idGltZSI7Y29uc3QgaHN0PXtDRUxMX1RZUEU6''@;'; put 'put ''ImF1dG9jb21wbGV0ZSIsZWRpdG9yOkhYLHJlbmRlcmVyOklfLHZhbGlkYXRvcjpjVH0sZnN0PXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6QnBlLHJlbmRlcmVyOiRYfTtmdW5jdGlvbiBiNGUoYyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfWI0ZS5S''@;'; put 'put ''RU5ERVJFUl9UWVBFPSJkYXRlIjtjb25zdCBnc3Q9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9yOiRwZSxyZW5kZXJlcjpiNGUsdmFsaWRhdG9yOktQfSxtc3Q9e0NFTExfVFlQRToiZHJvcGRvd24iLGVkaXRvcjpLcGUscmVuZGVyZXI6R1gsdmFsaWRhdG9yOmNKLGZpbHRlcjohMSxzdHJpY3Q6''@;'; put 'put ''ITB9LHZzdD17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpSWCxyZW5kZXJlcjpxWH0sYnN0PXtDRUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpxcGUscmVuZGVyZXI6YUosdmFsaWRhdG9yOnVKLGRhdGFUeXBlOiJudW1iZXIifSx5c3Q9e0NFTExfVFlQRToicGFzc3dvcmQiLGVk''@;'; put 'put ''aXRvcjpYcGUscmVuZGVyZXI6b0osY29weWFibGU6ITF9LF9zdD17Q0VMTF9UWVBFOiJzZWxlY3QiLGVkaXRvcjpRcGUscmVuZGVyZXI6c0p9LHdzdD17Q0VMTF9UWVBFOiJ0aW1lIixlZGl0b3I6ZTRlLHJlbmRlcmVyOmxKLHZhbGlkYXRvcjpxUH07ZnVuY3Rpb24geTRlKGMsbCl7aWYobC5o''@;'; put 'put ''YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBQXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geHN0KGMpe3ZhciBsPWZ1bmN0aW9uIEVzdChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRl8oYyxsKXtyZXR1cm4gYy5nZXQoXzRlKGMsbCkpfWZ1bmN0aW9uIF80ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdzRlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBvSmUoYyl7cmV0dXJuISFJRShjKX1dLFsiY2VsbC10eXBlIixhcGVdLFsi''@;'; put 'put ''ZWRpdG9yIixkZmVdLFsicmVuZGVyZXIiLFNmZV0sWyJ2YWxpZGF0b3IiLE1mZV1dKSxDNGU9U3ltYm9sKCJtYWluU2V0dGluZyIpLFhQPVtdO2xldCBjOT1udWxsO3ZhciB1OT1uZXcgV2Vha01hcCxTNGU9bmV3IFdlYWtTZXQ7Y2xhc3MgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0''@;'; put 'put ''dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue319Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFNzdChjLGwpe3k0ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxTNGUpLFBf''@;'; put 'put ''KHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxQXyh0aGlzLCJwbHVnaW5OYW1lIixudWxsKSxQXyh0aGlzLCJwbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MiLFtdKSxQXyh0aGlzLCJpc1BsdWdpbnNSZWFkeSIsITEpLFBfKHRoaXMsImVuYWJsZWQiLCExKSxQXyh0aGlzLCJp''@;'; put 'put ''bml0aWFsaXplZCIsITEpLGZ1bmN0aW9uIE1zdChjLGwsYSl7eTRlKGMsbCksbC5zZXQoYyxhKX0odGhpcyx1OSx7fSksVHAodGhpcywiaG90IixsLHt3cml0YWJsZTohMX0pLGM5PW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT50aGlzLm9uQWZ0''@;'; put 'put ''ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYT0+dGhpcy5vblVwZGF0ZVNldHRpbmdzKGEpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVJbml0IiwoKT0+dGhpcy5pbml0KCkpfWluaXQoKXt0aGlzLnBsdWdpbk5hbWU9dGhp''@;'; put 'put ''cy5ob3QuZ2V0UGx1Z2luTmFtZSh0aGlzKTtjb25zdCBsPXRoaXMuY29uc3RydWN0b3IuUExVR0lOX0RFUFMsYT1BcnJheS5pc0FycmF5KGwpP2w6W107aWYoYS5sZW5ndGg+MCl7Y29uc3QgaD1bXTtpZihhLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zi5zcGxpdCgiOiIpO2lmKCF3NGUuaGFz''@;'; put 'put ''KHYpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwbHVnaW4gZGVwZW5kZW5jeSB0eXBlICIke3Z9IiB3YXMgZm91bmQuYCk7dzRlLmdldCh2KShNKXx8aC5wdXNoKGAgLSAke019ICgke3Z9KWApfSksaC5sZW5ndGg+MCl7Y29uc3QgZj1bYFRoZSAke3RoaXMucGx1Z2luTmFtZX0gcGx1Z2lu''@;'; put 'put ''IHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgbW9kdWxlczpcbmAsYCR7aC5qb2luKCJcbiIpfVxuYF0uam9pbigiIik7WFAucHVzaChmKX19aWYoYzl8fChjOT1uSygpKSxjOS5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSk+PTAmJmM5LnNwbGljZShjOS5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSks''@;'; put 'put ''MSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+e3RoaXMuaXNFbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpfSksMD09PWM5Lmxlbmd0aCl7aWYoWFAubGVuZ3RoPjApe2NvbnN0IGg9W2Ake1hQLmpvaW4oIlxu''@;'; put 'put ''Iil9XG5gLCJZb3UgaGF2ZSB0byBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZW0gbWFudWFsbHkuIl0uam9pbigiIik7dGhyb3cgWFAubGVuZ3RoPTAsbmV3IEVycm9yKGgpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIpfXRoaXMuaW5pdGlhbGl6ZWQ9ITB9ZW5h''@;'; put 'put ''YmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkPSEwfWRpc2FibGVQbHVnaW4oKXt2YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWdldFNldHRpbmcobCl7Y29uc3QgYT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpW3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV07aWYodm9pZCAwPT09bClyZXR1cm4gYTtjb25zdCBkPXRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9TRVRUSU5HUzt2YXIgaCxmO3JldHVybihBcnJheS5pc0FycmF5KGEpfHxxbyhhKSkmJmRbQzRlXT09PWw/QXJy''@;'; put 'put ''YXkuaXNBcnJheShhKT9hOm51bGwhPT0oaD1hW2xdKSYmdm9pZCAwIT09aD9oOmRbbF06cW8oYSkmJm51bGwhPT0oZj1hW2xdKSYmdm9pZCAwIT09Zj9mOmRbbF19YWRkSG9vayhsLGEsZCl7Rl8odTksdGhpcylbbF09Rl8odTksdGhpcylbbF18fFtdO2NvbnN0IGg9Rl8odTksdGhpcylbbF07''@;'; put 'put ''dGhpcy5ob3QuYWRkSG9vayhsLGEsZCksaC5wdXNoKGEpLEZfKHU5LHRoaXMpW2xdPWh9cmVtb3ZlSG9va3MobCl7WW4oRl8odTksdGhpcylbbF18fFtdLGE9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tzKCl7Y29uc3QgbD1GXyh1OSx0aGlzKTtYbyhsLChhLGQpPT50''@;'; put 'put ''aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKXtZbih0aGlzLnBsdWdpbnNJbml0''@;'; put 'put ''aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0aW5ncyhsKXtjb25zdCBhPV80ZShTNGUsdGhpcyxBc3QpLmNhbGwodGhpcyxsKTt0aGlzLmlzRW5hYmxlZCYm''@;'; put 'put ''KHRoaXMuZW5hYmxlZCYmIXRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZGlzYWJsZVBsdWdpbigpLCF0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZhJiZ0aGlzLnVwZGF0ZVBsdWdpbihsKSl9''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl7fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxYbyh0aGlzLChhLGQpPT57ImhvdCIhPT1kJiYodGhpc1tkXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVs''@;'; put 'put ''ZXRlIHRoaXMuaG90fX1mdW5jdGlvbiBBc3QoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVvZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0''@;'; put 'put ''dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtzdChjKXt2YXIgbD1mdW5jdGlvbiBEc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGRKPWNsYXNzIElzdHtjb25zdHJ1''@;'; put 'put ''Y3RvcihsKXtkOSh0aGlzLCJob3QiLG51bGwpLGQ5KHRoaXMsImNvbnRhaW5lciIsbnVsbCksZDkodGhpcywiaW5qZWN0ZWQiLCExKSxkOSh0aGlzLCJyb3dzIixbXSksZDkodGhpcywiY29sdW1ucyIsW10pLGQ5KHRoaXMsInNhbXBsZXMiLG51bGwpLGQ5KHRoaXMsInNldHRpbmdzIix7dXNl''@;'; put 'put ''SGVhZGVyczohMH0pLHRoaXMuaG90PWx9YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNv''@;'; put 'put ''bnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5h''@;'; put 'put ''cHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbChsKSksdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhsKSksMD09PWwmJlRpKHRoaXMudGFibGUudGFibGUsImh0R2hvc3RUYWJsZUZpcnN0Um93IiksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVu''@;'; put 'put ''ZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3QgZD17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlz''@;'; put 'put ''LmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xH''@;'; put 'put ''cm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhp''@;'; put 'put ''cy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcu''@;'; put 'put ''YXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCx2b2lkIDAsLTEpLHRoaXMudGFibGUudEJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2wobCkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFi''@;'; put 'put ''bGUudGFibGV9Z2V0SGVpZ2h0cyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWW4odGhpcy5yb3dzLGE9Pntjb25zdHtoZWlnaHQ6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEucm93LE1hdGguY2VpbChkKSl9KX1nZXRXaWR0aHMobCl7dGhpcy5p''@;'; put 'put ''bmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFluKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lkdGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29sLE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGluZyhsLGEp''@;'; put 'put ''e3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91cHNDb2wo''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmEuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KC0xLC0xKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZD0+e1luKGQu''@;'; put 'put ''c3RyaW5ncyxoPT57YS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoaC5jb2wsbCkpfSl9KSxhfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmPT57WW4oZi5zdHJpbmdzLHY9Pntjb25zdCBNPXYuY29sLEQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxN''@;'; put 'put ''KSxaPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihEKSxyZT1hLmNyZWF0ZUVsZW1lbnQoInRkIik7cmUuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksWih0aGlzLmhvdCxyZSxsLE0sdGhpcy5ob3QuY29sVG9Qcm9wKE0pLHYudmFsdWUsRCksZC5hcHBlbmRDaGlsZChyZSl9KX0pLGR9''@;'; put 'put ''YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goWy0xLGhdKSxh''@;'; put 'put ''LmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntZbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5jb2wsTT1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFt2LE1dKSxhLmFwcGVuZENoaWxkKE0pfSl9KSx0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENoaWxkKGEpLFlu''@;'; put 'put ''KGQsaD0+e2NvbnN0W2Ysdl09aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLHYpfSl9Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57WW4o''@;'; put 'put ''aC5zdHJpbmdzLGY9Pntjb25zdCB2PWYucm93LE09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixsKSxEPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihNKSxaPWEuY3JlYXRlRWxlbWVudCgidGQiKSxyZT1hLmNyZWF0ZUVsZW1lbnQoInRyIik7Wi5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwx''@;'; put 'put ''KSxEKHRoaXMuaG90LFosdixsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLE0pLHJlLmFwcGVuZENoaWxkKFopLGQuYXBwZW5kQ2hpbGQocmUpfSl9KSxkfWNsZWFuKCl7dGhpcy5yb3dzLmxlbmd0aD0wLHRoaXMucm93c1stMV09dm9pZCAwLHRoaXMuY29sdW1ucy5sZW5ndGg9MCx0''@;'; put 'put ''aGlzLnNhbXBsZXMmJnRoaXMuc2FtcGxlcy5jbGVhcigpLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMucmVtb3ZlVGFibGUoKX1pbmplY3RUYWJsZSgpe3RoaXMuaW5qZWN0ZWR8fCgoKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKXx8''@;'; put 'put ''dGhpcy5ob3Qucm9vdEVsZW1lbnQpLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyLmZyYWdtZW50KSx0aGlzLmluamVjdGVkPSEwKX1yZW1vdmVUYWJsZSgpe3RoaXMuaW5qZWN0ZWQmJnRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlJiYodGhpcy5jb250YWluZXIuY29udGFp''@;'; put 'put ''bmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsLHRoaXMuaW5qZWN0ZWQ9ITEpfWNyZWF0ZUNvbEVsZW1lbnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTts''@;'; put 'put ''ZXQgaD0wO2E+PTAmJmw+PTAmJihoPXRoaXMuaG90LmdldENlbGxNZXRhKGEsbCkuY29sc3Bhbik7bGV0IGY9dGhpcy5ob3QuZ2V0Q29sV2lkdGgobCk7aWYoaD4xKWZvcihsZXQgdj1sKzE7djxsK2g7disrKWYrPXRoaXMuaG90LmdldENvbFdpZHRoKHYpO3JldHVybiBkLnN0eWxlLndpZHRo''@;'; put 'put ''PWAke2Z9cHhgLGR9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1l''@;'; put 'put ''bnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdj1hLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksTT1hLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksRD1hLmNyZWF0ZUVsZW1lbnQoInRyIiksWj1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaXNWZXJ0aWNh''@;'; put 'put ''bCgpJiZoLmFwcGVuZENoaWxkKE0pLHRoaXMuaXNIb3Jpem9udGFsKCkmJihELmFwcGVuZENoaWxkKFopLGYuYXBwZW5kQ2hpbGQoRCksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGguYXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJnYu''@;'; put 'put ''YXBwZW5kQ2hpbGQoRCksaC5hcHBlbmRDaGlsZCh2KSxUaShoLGwpLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5OnYsY29sR3JvdXA6TSx0cjpELHRoOlp9fWNyZWF0ZUNvbnRhaW5lcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKGgsYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9''@;'; put 'put ''YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgpe3JldHVybiEoIXRoaXMucm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5ndGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEoIXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5n''@;'; put 'put ''dGgpfX07ZnVuY3Rpb24gSlAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJzdChjKXt2YXIgbD1mdW5jdGlvbiBMc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGhKe3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7''@;'; put 'put ''cmV0dXJuIDN9Y29uc3RydWN0b3IobCl7SlAodGhpcywic2FtcGxlcyIsbnVsbCksSlAodGhpcywiZGF0YUZhY3RvcnkiLG51bGwpLEpQKHRoaXMsImN1c3RvbVNhbXBsZUNvdW50IixudWxsKSxKUCh0aGlzLCJhbGxvd0R1cGxpY2F0ZXMiLCExKSx0aGlzLmRhdGFGYWN0b3J5PWx9Z2V0U2Ft''@;'; put 'put ''cGxlQ291bnQoKXtyZXR1cm4gdGhpcy5jdXN0b21TYW1wbGVDb3VudD90aGlzLmN1c3RvbVNhbXBsZUNvdW50OmhKLlNBTVBMRV9DT1VOVH1zZXRTYW1wbGVDb3VudChsKXt0aGlzLmN1c3RvbVNhbXBsZUNvdW50PWx9c2V0QWxsb3dEdXBsaWNhdGVzKGwpe3RoaXMuYWxsb3dEdXBsaWNhdGVz''@;'; put 'put ''PWx9Z2VuZXJhdGVSb3dTYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTYW1wbGVzKCJyb3ciLGEsbCl9Z2VuZXJhdGVDb2x1bW5TYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTYW1wbGVzKCJjb2wiLGEsbCl9Z2VuZXJhdGVTYW1wbGVzKGwsYSxkKXtjb25zdCBoPW5l''@;'; put 'put ''dyBNYXAse2Zyb206Zix0bzp2fT0ibnVtYmVyIj09dHlwZW9mIGQ/e2Zyb206ZCx0bzpkfTpkO3JldHVybiBHYShmLHYsTT0+e2NvbnN0IEQ9dGhpcy5nZW5lcmF0ZVNhbXBsZShsLGEsTSk7aC5zZXQoTSxEKX0pLGh9Z2VuZXJhdGVTYW1wbGUobCxhLGQpe2lmKCJyb3ciIT09bCYmImNvbCIh''@;'; put 'put ''PT1sKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2FtcGxlIHR5cGUiKTtjb25zdCBoPW5ldyBNYXAsZj0icm93Ij09PWw/ImNvbCI6InJvdyIsdj1bXTtyZXR1cm4gR2EoYS5mcm9tLGEudG8sTT0+e2NvbnN0IEQ9InJvdyI9PT1sP3RoaXMuZGF0YUZhY3RvcnkoZCxNKTp0aGlzLmRh''@;'; put 'put ''dGFGYWN0b3J5KE0sZCk7aWYoITE9PT1EKXJldHVybjtjb25zdHt2YWx1ZTpaLGJ1bmRsZVNlZWQ6cmV9PUQsY2U9InN0cmluZyI9PXR5cGVvZiByZSYmcmUubGVuZ3RoPjA7bGV0IGJlO2JlPWNlP3JlOnFvKFopP2Ake09iamVjdC5rZXlzKFopLmxlbmd0aH1gOkFycmF5LmlzQXJyYXkoWik/''@;'; put 'put ''YCR7Wi5sZW5ndGh9YDpgJHtsYyhaKS5sZW5ndGh9YCxoLmhhcyhiZSl8fGguc2V0KGJlLHtuZWVkZWQ6dGhpcy5nZXRTYW1wbGVDb3VudCgpLHN0cmluZ3M6W119KTtjb25zdCBFZT1oLmdldChiZSk7RWUubmVlZGVkJiYoISh2LmluZGV4T2YoWik+LTEpfHx0aGlzLmFsbG93RHVwbGljYXRl''@;'; put 'put ''c3x8Y2UpJiYoRWUuc3RyaW5ncy5wdXNoKHt2YWx1ZTpaLFtmXTpNfSksdi5wdXNoKFopLEVlLm5lZWRlZC09MSl9KSxofX1jb25zdCBNNGU9aEo7ZnVuY3Rpb24gZkooYyxsLGEpe3g0ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geDRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB1VChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUHN0KGMpe3ZhciBsPWZ1bmN0aW9uIEZzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gS20oYyxsKXtyZXR1cm4gYy5nZXQoemQoYyxsKSl9ZnVuY3Rpb24gUVAoYyxsLGEpe3JldHVybiBjLnNldCh6ZChjLGwpLGEpLGF9ZnVuY3Rpb24gemQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1s''@;'; put 'put ''OmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtj''@;'; put 'put ''b25zdCBwSj0iYXV0b0NvbHVtblNpemUiO3ZhciBnSj1uZXcgV2Vha01hcCxIXz1uZXcgV2Vha01hcCxOXz1uZXcgV2Vha01hcCxPaD1uZXcgV2Vha1NldDtjbGFzcyBkVCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklP''@;'; put 'put ''UklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VM''@;'; put 'put ''QVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gT3N0KGMsbCl7eDRlKGMsbCksbC5hZGQoYyl9KHRoaXMsT2gpLHVUKHRoaXMsImdob3N0VGFibGUiLG5ldyBk''@;'; put 'put ''Sih0aGlzLmhvdCkpLHVUKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBNNGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHx0aGlz''@;'; put 'put ''LmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKSlyZXR1cm4hMTtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGEsZCk7bGV0IE09IiI7di5zcGFubmVkfHwoTT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCkpO2xldCBEPSIiO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJt''@;'; put 'put ''b2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKSYmKEQ9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsRCx2LE0pKSx7dmFsdWU6TSxidW5kbGVTZWVkOkR9fSkpLHVUKHRoaXMsImluUHJvZ3Jlc3MiLCExKSx1VCh0aGlzLCJtZWFzdXJlZENvbHVtbnMiLDApLHVU''@;'; put 'put ''KHRoaXMsImNvbHVtbldpZHRoc01hcCIsbmV3IFptKSxmSih0aGlzLGdKLCExKSxmSih0aGlzLEhfLFtdKSxmSih0aGlzLE5fLFtdKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b0NvbHVtblNpemUiLHRoaXMuY29sdW1uV2lkdGhzTWFwKSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGEsZCxoKT0+emQoT2gsdGhpcyxBNGUpLmNhbGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe3JldHVybiExIT09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwSl0mJiF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmNvbFdpZHRoc31lbmFibGVQbHVnaW4o''@;'; put 'put ''KXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpKSx0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygi''@;'; put 'put ''YWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gemQoT2gsbCxqc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLHpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLFpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT56ZChPaCx0aGlzLEJzdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+emQoT2gsdGhpcyxVc3QpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe1FQKE5fLHRoaXMsdGhpcy5maW5kQ29s''@;'; put 'put ''dW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwobCxhLGQpPT56ZChPaCx0aGlzLEE0ZSkuY2FsbCh0aGlzLGwsYSxkKSl9''@;'; put 'put ''Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZUNvbHVt''@;'; put 'put ''bnNXaWR0aCh7ZnJvbTpsLHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZUNvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50''@;'; put 'put ''Q29scygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0''@;'; put 'put ''IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7R2EoaC5mcm9tLGgudG8sdj0+e2xldCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5jb2x1''@;'; put 'put ''bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KE0pJiYhdGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKE0pKSYmemQoT2gsdGhpcyxFNGUpLmNhbGwodGhpcyx2LGYpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoemQoT2gsdGhpcyxUNGUpLmNhbGwodGhpcyks''@;'; put 'put ''dGhpcy5tZWFzdXJlZENvbHVtbnM9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3Vu''@;'; put 'put ''dFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVy''@;'; put 'put ''biBURShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpNYXRoLm1pbihkK2RULkNBTENVTEFUSU9OX1NURVAsaCl9LGwsYSksZD1kK2RULkNBTENVTEFUSU9OX1NURVArMSxkPGg/Zj1FRSh2KTooVEUoZiksdGhpcy5pblBy''@;'; put 'put ''b2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOnRoaXMuaW5Qcm9ncmVzcz0h''@;'; put 'put ''MX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpW3BKXTtsZXQgYT1kVC5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtyZXR1cm4gcW8obCkmJihhPWwuc3luY0xpbWl0LGYkKGEpP2E9SiQoZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRDb2x1bW5XaWR0''@;'; put 'put ''aChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSks''@;'; put 'put ''ZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLF9fKSkpLGh9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxl''@;'; put 'put ''Q29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkucmVkdWNlKChk''@;'; put 'put ''LGgsZik9Pntjb25zdCB2PUttKEhfLHRoaXMpLmxlbmd0aDtyZXR1cm4odi0xPGZ8fEttKEhfLHRoaXMpW2ZdIT09aCkmJmQucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSksdi0xPGY/S20oSF8sdGhpcykucHVzaChoKTpLbShIXyx0aGlzKVtmXT1oLGR9LFtdKX1jbGVhckNhY2hl''@;'; put 'put ''KGwpe0FycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfSl9LCEwKTp0aGlzLmNvbHVtbldpZHRoc01hcC5jbGVhcigpfWlzTmVlZFJlY2FsY3VsYXRlKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRDb2x1bW5zKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBWc3QoYyl7''@;'; put 'put ''Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9O2MuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO251bGwhPT1kJiYodGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKGQpfHx6ZChPaCx0aGlzLEU0ZSkuY2FsbCh0''@;'; put 'put ''aGlzLGEsbCkpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoemQoT2gsdGhpcyxUNGUpLmNhbGwodGhpcyksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIEU0ZShjLGwpe3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoYyxsKS5m''@;'; put 'put ''b3JFYWNoKChkLGgpPT50aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGgsZCkpfWZ1bmN0aW9uIFQ0ZSgpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldFdpZHRocygoYyxsKT0+e2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjKTt0aGlz''@;'; put 'put ''LmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxsKX0pfSwhMCl9ZnVuY3Rpb24gQnN0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCksdGhpcy5pblByb2dyZXNzfHwoemQoT2gsdGhpcyxWc3QpLmNhbGwodGhpcyxLbShOXyx0aGlzKSksUVAoTl8sdGhpcyxb''@;'; put 'put ''XSkpfWZ1bmN0aW9uIGpzdChjLGwpe2x8fHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKX1mdW5jdGlvbiB6c3QoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xldFssaF09ZDtjb25zdCBmPXRoaXMuaG90LnByb3BUb0NvbChoKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihm''@;'; put 'put ''KSYmLTE9PT1hLmluZGV4T2YoZikmJmEucHVzaChmKSxhfSxbXSk7S20oTl8sdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiBBNGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChsLHZvaWQgMCwhMCksZD10aGlzLmdldENvbHVtbldpZHRoKGws''@;'; put 'put ''dm9pZCAwLCExKSksZH1mdW5jdGlvbiBVc3QoKXtRUChIXyx0aGlzLHRoaXMuaG90LmdldENvbEhlYWRlcigpKSx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCksUVAoZ0osdGhpcywhMCl9ZnVuY3Rpb24gWnN0KGMpe2lmKCFLbShnSix0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJl''@;'; put 'put ''ZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmguY29sO2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1''@;'; put 'put ''cm4gYX0sW10pO0ttKE5fLHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgaDk9e2hvcml6b250YWw6Imhvcml6b250YWwiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9O2Z1bmN0aW9uIFZfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLc3QoYyl7dmFyIGw9ZnVuY3Rpb24gcXN0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBoVChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0''@;'; put 'put ''ZXJBdXRvZmlsbCIpO2NvbnN0IEpzdD1bImZpbGxIYW5kbGUiXTt2YXIgQl89bmV3IFdlYWtTZXQ7Y2xhc3MgdGx0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEdzdChjLGwpeyhmdW5jdGlvbiAkc3QoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxCXyksVl8odGhpcywiYWRkaW5nU3RhcnRlZCIsITEpLFZfKHRoaXMsIm1vdXNlRG93bk9uQ2VsbENvcm5l''@;'; put 'put ''ciIsITEpLFZfKHRoaXMsIm1vdXNlRHJhZ091dHNpZGUiLCExKSxWXyh0aGlzLCJoYW5kbGVEcmFnZ2VkQ2VsbHMiLDApLFZfKHRoaXMsImRpcmVjdGlvbnMiLFtdKSxWXyh0aGlzLCJhdXRvSW5zZXJ0Um93IiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImF1dG9maWxsIn1z''@;'; put 'put ''dGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblsiYXV0b2ZpbGwiLC4uLkpzdF19aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVu''@;'; put 'put ''YWJsZWR8fCh0aGlzLm1hcFNldHRpbmdzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PmhUKEJfLHRoaXMscmx0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIs''@;'; put 'put ''bD0+aFQoQl8sdGhpcyxubHQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT5oVChCXyx0aGlzLGlsdCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCks''@;'; put 'put ''dGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCks''@;'; put 'put ''e3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLFt7c3RhcnRSb3c6YSxzdGFydENvbDpkLGVuZFJvdzpoLGVuZENvbDpmfV0pLE09W10s''@;'; put 'put ''RD1bXSxaPVtdO3JldHVybiBZbih2LHJlPT57Zm9yKGxldCBjZT1yZS5zdGFydFJvdztjZTw9cmUuZW5kUm93O2NlKz0xKS0xPT09TS5pbmRleE9mKGNlKSYmTS5wdXNoKGNlKTtmb3IobGV0IGNlPXJlLnN0YXJ0Q29sO2NlPD1yZS5lbmRDb2w7Y2UrPTEpLTE9PT1ELmluZGV4T2YoY2UpJiZE''@;'; put 'put ''LnB1c2goY2UpfSksWW4oTSxyZT0+e2NvbnN0IGNlPVtdO1luKEQsYmU9PntjZS5wdXNoKHRoaXMuaG90LmdldENvcHlhYmxlRGF0YShyZSxiZSkpfSksWi5wdXNoKGNlKX0pLFp9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJl''@;'; put 'put ''dHVybiExO2NvbnN0W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1mLmdldFRvcFN0YXJ0Q29ybmVyKCksTT1mLmdldEJvdHRvbUVuZENvcm5lcigpO3Ro''@;'; put 'put ''aXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgRD1bdi5yb3csdi5jb2wsTS5yb3csTS5jb2xdLFo9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9maWxsUmFuZ2UiLFtNYXRoLm1pbih2LnJvdyxsKSxNYXRoLm1pbih2LmNvbCxhKSxNYXRoLm1heChNLnJvdyxkKSxN''@;'; put 'put ''YXRoLm1heChNLmNvbCxoKV0sRCkse2RpcmVjdGlvbk9mRHJhZzpyZSxzdGFydE9mRHJhZ0Nvb3JkczpjZSxlbmRPZkRyYWdDb29yZHM6YmV9PWZ1bmN0aW9uIFdzdChjLGwsYSl7bGV0IGQsaCxmO3JldHVybiBsWzBdPT09Y1swXSYmbFsxXTxjWzFdPyhmPSJsZWZ0IixkPWEobFswXSxsWzFd''@;'; put 'put ''KSxoPWEobFsyXSxjWzFdLTEpKTpsWzJdPT09Y1syXSYmbFswXT09PWNbMF0mJmxbM10+Y1szXT8oZj0icmlnaHQiLGQ9YShsWzBdLGNbM10rMSksaD1hKGxbMl0sbFszXSkpOmxbMF08Y1swXSYmbFsxXT09PWNbMV0/KGY9InVwIixkPWEobFswXSxsWzFdKSxoPWEoY1swXS0xLGxbM10pKTps''@;'; put 'put ''WzJdPmNbMl0mJmxbMV09PT1jWzFdJiYoZj0iZG93biIsZD1hKGNbMl0rMSxsWzFdKSxoPWEobFsyXSxsWzNdKSksZCYmZC5ub3JtYWxpemUoKSxoJiZoLm5vcm1hbGl6ZSgpLHtkaXJlY3Rpb25PZkRyYWc6ZixzdGFydE9mRHJhZ0Nvb3JkczpkLGVuZE9mRHJhZ0Nvb3JkczpofX0oRCxaLChF''@;'; put 'put ''ZSxCZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEVlLEJlKSk7aWYoY2UmJmNlLnJvdz4tMSYmY2UuY29sPi0xKXtjb25zdCBFZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoKSxCZT1mLmNsb25lKCkscWU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShjZSxjZSxiZSkscnQ9dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZUF1dG9maWxsIixFZSxCZSxxZSxyZSk7aWYoITE9PT1ydClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTtsZXQgcHQ9cnQ7Y29uc3QgZHQ9cnQ7aWYoWyJ1cCIsImxlZnQi''@;'; put 'put ''XS5pbmRleE9mKHJlKT4tMSYmKDEhPT1kdC5sZW5ndGh8fDAhPT1kdFswXS5sZW5ndGgpKWlmKHB0PVtdLCJ1cCI9PT1yZSl7Y29uc3QgSnQ9YmUucm93LWNlLnJvdysxLHZuPUp0JWR0Lmxlbmd0aDtmb3IobGV0IENuPTA7Q248SnQ7Q24rKylwdC5wdXNoKGR0WyhDbisoZHQubGVuZ3RoLXZu''@;'; put 'put ''KSklZHQubGVuZ3RoXSl9ZWxzZXtjb25zdCBKdD1iZS5jb2wtY2UuY29sKzEsdm49SnQlZHRbMF0ubGVuZ3RoO2ZvcihsZXQgQ249MDtDbjxkdC5sZW5ndGg7Q24rKyl7cHQucHVzaChbXSk7Zm9yKGxldCB0bj0wO3RuPEp0O3RuKyspcHRbQ25dLnB1c2goZHRbQ25dWyh0bisoZHRbQ25dLmxl''@;'; put 'put ''bmd0aC12bikpJWR0W0NuXS5sZW5ndGhdKX19dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoY2Uucm93LGNlLmNvbCxwdCxiZS5yb3csYmUuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oWiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0''@;'; put 'put ''b2ZpbGwiLHB0LEJlLHFlLHJlKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7cmV0dXJuITB9cmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGwpe3JldHVybiBsLnJvdzwwJiYobC5yb3c9MCksbC5jb2w8MCYmKGwuY29sPTApLGx9Z2V0Q29vcmRzT2ZE''@;'; put 'put ''cmFnQW5kRHJvcEJvcmRlcnMobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgaD1sO2lmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS52ZXJ0aWNhbCkmJnRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS5o''@;'; put 'put ''b3Jpem9udGFsKSl7Y29uc3QgZj1hLmdldFRvcFN0YXJ0Q29ybmVyKCk7KGQuY29sPD1sLmNvbHx8Zi5jb2w+PWwuY29sKSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpKSwoZC5yb3c8bC5yb3d8fGYucm93Pmwucm93KSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMobC5yb3csZC5jb2wpKX1lbHNlIGlmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS52ZXJ0aWNhbCkpaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCk7ZWxzZXtpZighdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5Lmhvcml6b250YWwpKXJldHVy''@;'; put 'put ''bjtoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKX1yZXR1cm4gdGhpcy5yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQoaCl9c2hvd0JvcmRlcihsKXtjb25zdCBhPXRoaXMuZ2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMobCk7YSYmdGhpcy5yZWRyYXdCb3Jk''@;'; put 'put ''ZXJzKGEpfWFkZFJvdygpe3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsdm9pZCAwLDEsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCksdGhpcy5hZGRpbmdTdGFydGVkPSExfSwyMDApfWFkZE5ld1Jvd0lmTmVlZGVkKCl7''@;'; put 'put ''aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSYmITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuYXV0b0luc2VydFJvdyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQu''@;'; put 'put ''Z2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xbMl08ZC0xJiZhWzJdPT09ZC0xJiYodGhpcy5hZGRpbmdTdGFydGVkPSEwLHRoaXMuYWRkUm93KCkpfX1nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCl7Y29uc3QgYT10aGlzLmhv''@;'; put 'put ''dC5nZXREYXRhKCksZD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgaDtmb3IobGV0IGY9bFsyXSsxO2Y8ZDtmKyspe2ZvcihsZXQgRD1sWzFdO0Q8PWxbM107RCsrKWlmKCFVYyhhW2ZdW0RdKSlyZXR1cm4tMTtjb25zdCBNPWFbZl1bbFszXSsxXTsoIVVjKGFbZl1bbFsxXS0xXSl8fCFVYyhN''@;'; put 'put ''KSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pKS5hZGQodGhp''@;'; put 'put ''cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVjdENlbGwoLi4ueXMobCxhPT5NYXRoLm1heChhLDApKSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9''@;'; put 'put ''dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhpcy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFu''@;'; put 'put ''ZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdCb3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCku''@;'; put 'put ''ZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9''@;'; put 'put ''VTAodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK3h1KHRoaXMuaG90LnRhYmxlKSxoPVUwKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3N1''@;'; put 'put ''KHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+''@;'; put 'put ''aFQoQl8sdGhpcyxhbHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5oVChCXyx0aGlzLG9sdCkuY2FsbCh0aGlzLGEpKX1jbGVhck1hcHBlZFNldHRpbmdzKCl7dGhpcy5kaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuYXV0''@;'; put 'put ''b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24gWXN0KGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMoaDkpLGwuYXV0b0luc2VydFJvdz0hMCk6cW8oYyk/KGwuYXV0b0luc2VydFJvdz0hIVBhKGMuYXV0b0luc2Vy''@;'; put 'put ''dFJvdykmJmMuZGlyZWN0aW9uIT09aDkuaG9yaXpvbnRhbCYmYy5hdXRvSW5zZXJ0Um93LGwuZGlyZWN0aW9ucz1QYShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qua2V5cyhoOSkpOiJzdHJpbmciPT10eXBlb2YgYz8obC5kaXJlY3Rpb25zPVtjXSxsLmF1dG9JbnNlcnRSb3c9''@;'; put 'put ''ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVjdGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwuYXV0b0luc2VydFJvd31kZXN0cm95KCl7c3VwZXIuZGVzdHJv''@;'; put 'put ''eSgpfX1mdW5jdGlvbiBubHQoKXt0aGlzLnNlbGVjdEFkamFjZW50KCkmJnRoaXMuZmlsbEluKCl9ZnVuY3Rpb24gcmx0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1mdW5jdGlvbiBpbHQoYyl7dGhpcy5tb3VzZURvd25PbkNlbGxD''@;'; put 'put ''b3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9yZGVyKGMpLHRoaXMuYWRkTmV3Um93SWZOZWVkZWQoKSl9ZnVuY3Rpb24gYWx0KCl7dGhpcy5oYW5kbGVEcmFn''@;'; put 'put ''Z2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEpfWZ1bmN0aW9uIG9sdChjKXtjb25zdCBsPXRoaXMuZ2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRl''@;'; put 'put ''KGMpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZsPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdTdGFydGVkPSEwKTp0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9J''@;'; put 'put ''bnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9ZnVuY3Rpb24gRDRlKGMsbCxhKXtJNGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEk0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ug''@;'; put 'put ''b24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gal8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxsdChjKXt2YXIgbD1mdW5jdGlvbiBjbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFI0ZShjLGwsYSl7cmV0dXJu''@;'; put 'put ''IGMuc2V0KEJwKGMsbCksYSksYX1mdW5jdGlvbiBlRihjLGwpe3JldHVybiBjLmdldChCcChjLGwpKX1mdW5jdGlvbiBCcChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgbUo9ImF1dG9Sb3dTaXplIjt2YXIgZlQ9bmV3IFdlYWtNYXAsdko9bmV3IFdlYWtNYXAsSWc9bmV3IFdlYWtTZXQ7Y2xhc3MgcFQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVko''@;'; put 'put ''KXtyZXR1cm4gbUp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57dXNlSGVhZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1w''@;'; put 'put ''bGVEdXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUwMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBzbHQoYyxsKXtJNGUoYyxsKSxsLmFkZChjKX0o''@;'; put 'put ''dGhpcyxJZyksal8odGhpcywiaGVhZGVySGVpZ2h0IixudWxsKSxqXyh0aGlzLCJnaG9zdFRhYmxlIixuZXcgZEoodGhpcy5ob3QpKSxqXyh0aGlzLCJzYW1wbGVzR2VuZXJhdG9yIixuZXcgTTRlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZil8fGE+PTAmJmQ+PTAmJnRoaXMuaG90LmdldENlbGxNZXRhKGEsZCkuaGlkZGVuKXJldHVybiExO2xldCB2O3JldHVy''@;'; put 'put ''biBhPj0wP3Y9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKHY9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6dn19KSksal8odGhpcywiaW5Qcm9ncmVzcyIsITEpLGpfKHRoaXMsIm1lYXN1cmVkUm93cyIsMCksal8odGhpcywicm93SGVpZ2h0c01hcCIsbmV3''@;'; put 'put ''IFptKSxENGUodGhpcyxmVCxbXSksRDRlKHRoaXMsdkosITEpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGEsZCxoKT0+QnAoSWcsdGhpcyxMNGUpLmNh''@;'; put 'put ''bGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSl07cmV0dXJuITA9PT1sfHxxbyhsKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVw''@;'; put 'put ''bGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKElnLGwscGx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5n''@;'; put 'put ''ZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQnAoSWcsbCxnbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+''@;'; put 'put ''dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBC''@;'; put 'put ''cChJZyxsLHZsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5CcChJZyx0aGlzLGZsdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChkLGgpPT50aGlzLmdldFJvd0hlaWdodChoLGQpKSx0aGlzLmFkZEhvb2soImlu''@;'; put 'put ''aXQiLCgpPT5CcChJZyx0aGlzLG1sdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9''@;'; put 'put ''bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChsLGEsZCk9PkJwKElnLHRoaXMsTDRlKS5jYWxsKHRoaXMsbCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpe2lmKCF0aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29u''@;'; put 'put ''c3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVSb3dzSGVpZ2h0''@;'; put 'put ''KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0''@;'; put 'put ''bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtp''@;'; put 'put ''ZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCB2PXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsZik7dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3codi5nZXQoLTEpKX1HYShoLmZyb20saC50byx2PT57bGV0IE09dGhp''@;'; put 'put ''cy5ob3QudG9QaHlzaWNhbFJvdyh2KTtudWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KE0pKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyh2LGYpLmZvckVhY2goKFoscmUpPT50aGlzLmdob3N0VGFi''@;'; put 'put ''bGUuYWRkUm93KHJlLFopKX0pLHRoaXMuZ2hvc3RUYWJsZS5yb3dzLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldEhlaWdodHMoKHYsTSk9Pnt2PDA/dGhpcy5oZWFkZXJIZWlnaHQ9TTp0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSl9KX0sITApLHRoaXMubWVhc3VyZWRSb3dzPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''P2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dy''@;'; put 'put ''ZXNzPSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIFRFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206ZCx0bzpNYXRoLm1pbihkK3BULkNBTENVTEFUSU9OX1NURVAsaCl9LGwsYSksZD1kK3BULkNBTENVTEFUSU9O''@;'; put 'put ''X1NURVArMSxkPGg/Zj1FRSh2KTooVEUoZiksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOjAsdG86TX0sbCxh''@;'; put 'put ''KSxkPU0rMSksZDxoP3YoKToodGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCh7ZnJvbTowLHRv''@;'; put 'put ''OnRoaXMuaG90LmNvdW50Q29scygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSl07bGV0IGE9cFQuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIHFvKGwp''@;'; put 'put ''JiYoYT1sLnN5bmNMaW1pdCxmJChhKT9hPUokKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwsYSl7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKTts''@;'; put 'put ''ZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2li''@;'; put 'put ''bGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWNsZWFyQ2FjaGUobCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxBcnJh''@;'; put 'put ''eS5pc0FycmF5KGwpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMucm93SGVpZ2h0c01hcC5jbGVhcigpfWNsZWFyQ2FjaGVCeVJhbmdlKGwpe2NvbnN0e2Zyb206''@;'; put 'put ''YSx0bzpkfT0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57R2EoTWF0aC5taW4oYSxkKSxNYXRoLm1heChhLGQpLGg9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsbnVsbCl9KX0sITApfWlzTmVlZFJl''@;'; put 'put ''Y2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24g''@;'; put 'put ''aGx0KGMpe2NvbnN0IGw9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfTtjLmZvckVhY2goYT0+e3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoYSxsKS5mb3JFYWNoKChoLGYpPT50aGlzLmdob3N0VGFibGUuYWRkUm93KGYsaCkpfSksdGhpcy5naG9z''@;'; put 'put ''dFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKTt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsZCl9KX0sITAp''@;'; put 'put ''LHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBmbHQoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoQnAoSWcsdGhpcyxobHQpLmNhbGwodGhpcyxlRihmVCx0aGlzKSksUjRlKGZULHRoaXMsW10pKX1mdW5jdGlvbiBMNGUoYyxs''@;'; put 'put ''LGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQobCx2b2lkIDAsITApLGQ9dGhpcy5nZXRSb3dIZWlnaHQobCkpLGR9ZnVuY3Rpb24gcGx0KGMsbCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX1mdW5jdGlvbiBnbHQoYyl7Y29uc3QgbD1j''@;'; put 'put ''LnJlZHVjZSgoYSxkKT0+e2xldFtoXT1kO3JldHVybi0xPT09YS5pbmRleE9mKGgpJiZhLnB1c2goaCksYX0sW10pO2VGKGZULHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gbWx0KCl7dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSxSNGUodkosdGhpcywhMCl9ZnVuY3Rpb24gdmx0''@;'; put 'put ''KGMpe2lmKCFlRih2Six0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmgucm93O2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxSb3co''@;'; put 'put ''Zik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO2VGKGZULHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgTzRlPW5ldyBNYXAoW1siaW5kZXhlc1NlcXVlbmNlIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkhLLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOktFfV0s''@;'; put 'put ''WyJwaHlzaWNhbGx5SW5kZXhlZCIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpCSyxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpqS31dXSksUDRlPWM9PntpZighMT09PU80ZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBBbHRlciBzdHJhdGVneSB3aXRoIElEICcke2N9JyBkb2VzIG5vdCBl''@;'; put 'put ''eGlzdC5gKTtyZXR1cm4gTzRlLmdldChjKX0se2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpibHQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6eWx0fT1QNGUoInBoeXNpY2FsbHlJbmRleGVkIikse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpDbHQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6''@;'; put 'put ''U2x0fT1QNGUoInBoeXNpY2FsbHlJbmRleGVkIik7Y29uc3QgRjRlPSJiaW5kUm93c1dpdGhIZWFkZXJzIixINGU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgX2x0IGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPVZLKHRoaXMuaW5kZXhl''@;'; put 'put ''ZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9Ymx0KGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9eWx0KHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9TksoYSxsKSxzdXBlci5yZW1vdmUobCl9''@;'; put 'put ''fV0sWyJzdHJpY3QiLGNsYXNzIE1sdCBleHRlbmRzIGU5e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUNsdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCxhLChkLGgpPT50aGlzLmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9''@;'; put 'put ''cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1TbHQodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ2V0VmFsdWVzKCkpKzErbH19XV0pO3ZhciBONGU9bmV3IFdlYWtTZXQ7Y2xhc3MgT2x0IGV4''@;'; put 'put ''dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEVsdChjLGwpeyhmdW5jdGlvbiBUbHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxONGUpLGZ1bmN0aW9uIEFsdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2x0KGMpe3ZhciBsPWZ1bmN0aW9uIERsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9''@;'; put 'put ''KHRoaXMsImhlYWRlckluZGV4ZXMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBGNGV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGNGVdfWVuYWJsZVBsdWdpbigp''@;'; put 'put ''e3ZhciBsO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT1udWxsIT09KGw9SDRlLmdldCh0aGlzLmdldFNldHRpbmcoKSkpJiZ2b2lkIDAhPT1sP2w6SDRlLmdldCgibG9vc2UiKTt0aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImJp''@;'; put 'put ''bmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+ZnVuY3Rpb24gSWx0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oTjRlLHRoaXMsUGx0KS5jYWxsKHRoaXMsZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJiaW5kUm93''@;'; put 'put ''c1dpdGhIZWFkZXJzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFBsdChjKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGMpKX1mdW5jdGlvbiBWNGUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEI0ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTmx0KGMpe3ZhciBsPWZ1bmN0aW9uIFZsdChj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gajRlKGMsbCl7cmV0dXJuIGMuZ2V0KHpfKGMsbCkpfWZ1bmN0aW9uIGJKKGMsbCxhKXtyZXR1cm4gYy5zZXQoel8oYyxsKSxhKSxhfWZ1bmN0aW9uIHpfKGMsbCxhKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB0Rj0iY29sbGFwc2libGVDb2x1bW5z''@;'; put 'put ''IixqbHQ9WyJuZXN0ZWRIZWFkZXJzIl0sVV89ImNvbGxhcHNpYmxlSW5kaWNhdG9yIix6NGU9dEYsVTRlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0s''@;'; put 'put ''WyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBaXz1uZXcgV2Vha01hcCxnVD1uZXcgV2Vha1NldDtjbGFzcyB6bHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVy''@;'; put 'put ''KC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRmx0KGMsbCl7VjRlKGMsbCksbC5hZGQoYyl9KHRoaXMsZ1QpLEI0ZSh0aGlzLCJuZXN0ZWRIZWFkZXJzUGx1Z2luIixudWxsKSxCNGUodGhpcywiaGVhZGVyU3RhdGVNYW5hZ2VyIixudWxsKSxmdW5jdGlvbiBIbHQoYyxsLGEpe1Y0ZShjLGwpLGwu''@;'; put 'put ''c2V0KGMsYSl9KHRoaXMsWl8sbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHRGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI5MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46TmVzdGVkSGVhZGVycyJdfXN0YXRpYyBnZXQg''@;'; put 'put ''U0VUVElOR19LRVlTKCl7cmV0dXJuW3RGLC4uLmpsdF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpO2F8fGlsKCJZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBpbiBvcmRlciB0byB1c2UgY29sbGFwc2libGUgaGVhZGVycy4iKSxiSihaXyx0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhN''@;'; put 'put ''YXAodGhpcy5wbHVnaW5OYW1lLCJoaWRpbmciKSksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPXRoaXMuaG90LmdldFBsdWdpbigibmVzdGVkSGVhZGVycyIpLHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyPXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5nZXRTdGF0ZU1hbmFnZXIoKSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImluaXQiLCgpPT56XyhnVCx0aGlzLFdsdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6''@;'; put 'put ''XyhnVCxsLFlsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gel8oZ1QsbCxVbHQpLmNh''@;'; put 'put ''bGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIiwoZCxoLGYpPT56XyhnVCx0aGlzLFpsdCkuY2FsbCh0aGlzLGQsaCxmKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRl''@;'; put 'put ''UGx1Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzKXtjb25zdHtjb2xsYXBzaWJsZUNvbHVtbnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsiYm9vbGVhbiI9PXR5cGVvZiBsP3RoaXMuaGVhZGVy''@;'; put 'put ''U3RhdGVNYW5hZ2VyLm1hcFN0YXRlKGE9Pih7Y29sbGFwc2libGU6YS5vcmlnQ29sc3Bhbj4xfSkpOkFycmF5LmlzQXJyYXkobCkmJih0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZSgoKT0+KHtjb2xsYXBzaWJsZTohMX0pKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tZXJnZVN0''@;'; put 'put ''YXRlV2l0aChsKSl9c3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksYkooWl8sdGhpcyxudWxsKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLnVucmVn''@;'; put 'put ''aXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFyQnV0dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFj''@;'; put 'put ''azooKT0+e3ZhciBsO2NvbnN0e3JvdzphLGNvbDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCx7Y29sbGFwc2libGU6aCxpc0NvbGxhcHNlZDpmLGNvbHVtbkluZGV4OnZ9PW51bGwhPT0obD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJUcmVl''@;'; put 'put ''Tm9kZURhdGEoYSxkKSkmJnZvaWQgMCE9PWw/bDp7fTtpZihoKXJldHVybiBmP3RoaXMuZXhwYW5kU2VjdGlvbih7cm93OmEsY29sOnZ9KTp0aGlzLmNvbGxhcHNlU2VjdGlvbih7cm93OmEsY29sOnZ9KSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtyZXR1cm4obnVsbD09PShsPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzU2luZ2xlKCkpJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhpZ2hsaWdodC5pc0hlYWRlcigpKX0sZ3JvdXA6ejRlLHJlbGF0''@;'; put 'put ''aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh6NGUpfWNsZWFyQnV0dG9ucygpe2lmKCF0aGlzLmhvdC52aWV3''@;'; put 'put ''KXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRIRUFELGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQs''@;'; put 'put ''aD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT90aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEOm51bGwsZj1mdW5jdGlvbih2KXt2JiZ2LnBhcmVu''@;'; put 'put ''dE5vZGUucmVtb3ZlQ2hpbGQodil9O0dhKDAsbC0xLHY9Pntjb25zdCBNPWEuY2hpbGROb2Rlc1t2XSxEPWQuY2hpbGROb2Rlc1t2XSxaPWg/aC5jaGlsZE5vZGVzW3ZdOm51bGw7R2EoMCxNLmNoaWxkTm9kZXMubGVuZ3RoLTEscmU9PntsZXQgY2U9TS5jaGlsZE5vZGVzW3JlXS5xdWVyeVNl''@;'; put 'put ''bGVjdG9yKGAuJHtVX31gKTtmKGNlKSxEJiZELmNoaWxkTm9kZXNbcmVdJiYoY2U9RC5jaGlsZE5vZGVzW3JlXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKSxmKGNlKSksaCYmWiYmWi5jaGlsZE5vZGVzW3JlXSYmKGNlPVouY2hpbGROb2Rlc1tyZV0ucXVlcnlTZWxlY3RvcihgLiR7VV99YCks''@;'; put 'put ''ZihjZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9Y29sbGFwc2VTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25z''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46ZixoZWFkZXJMZXZlbDp2LGNvbHVtbkluZGV4Ok0saXNDb2xsYXBzZWQ6RH09ZDtpZighMD09PWgmJmY+MSYmKEQmJiJleHBhbmQiPT09bHx8IUQm''@;'; put 'put ''JiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHModiksY29sOk19fSk7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygi''@;'; put 'put ''Y29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihsLGEpe2lmKCFVNGUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSku''@;'; put 'put ''YCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9SW0obCxFZT0+e2xldHtyb3c6QmV9PUVlO3JldHVybiBCZTwwfSk7bGV0IGg9ZC5sZW5ndGg+MDtZbihkLEVlPT57dmFyIEJlO2xldHtyb3c6cWUsY29sOnJ0fT1FZTtjb25zdHtjb2xsYXBzaWJsZTpwdCxpc0NvbGxhcHNl''@;'; put 'put ''ZDpkdH09bnVsbCE9PShCZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhxZSxydCkpJiZ2b2lkIDAhPT1CZT9CZTp7fTtpZighcHR8fGR0JiYiY29sbGFwc2UiPT09YXx8IWR0JiYiZXhwYW5kIj09PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLHY9W107''@;'; put 'put ''aCYmWW4oZCxFZT0+e2xldHtyb3c6QmUsY29sOnFlfT1FZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOnJ0LGFmZmVjdGVkQ29sdW1uczpwdCxyb2xsYmFja01vZGlmaWNhdGlvbjpkdH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxCZSxxZSk7''@;'; put 'put ''cnQ+MCYmKHYucHVzaCguLi5wdCksZi5wdXNoKGR0KSl9KTtjb25zdCBNPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xldCBEPVtdOyJjb2xsYXBzZSI9PT1hP0Q9djJlKFsuLi5NLC4uLnZdKToiZXhwYW5kIj09PWEmJihEPUltKE0sRWU9PiF2LmluY2x1ZGVzKEVlKSkpO2NvbnN0IFo9''@;'; put 'put ''VTRlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKFouYmVmb3JlSG9vayxNLEQsaCkpcmV0dXJuIHZvaWQgWW4oZixFZT0+e0VlKCl9KTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKHYsRWU9PntqNGUoWl8sdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRv''@;'; put 'put ''UGh5c2ljYWxDb2x1bW4oRWUpLFouaGlkZUNvbHVtbil9KX0sITApO2NvbnN0IGNlPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpLmxlbmd0aCE9PU0ubGVuZ3RoLGJlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoImNvbGxhcHNlIj09PWEmJmNlJiZiZSl7Y29uc3R7cm93''@;'; put 'put ''OkVlLGNvbDpCZX09YmUuaGlnaGxpZ2h0O2lmKCh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihFZSl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKEJlKSkmJnYuaW5jbHVkZXMoQmUpKXtjb25zdCBydD1FZT49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRWUsMSwhMCk6RWUscHQ9QmU+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEJlLDEsITApOkJlO251bGwhPT1ydCYmbnVsbCE9PXB0JiZ0aGlzLmhvdC5zZWxlY3RDZWxsKHJ0LHB0KX19dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoWi5hZnRlckhvb2ssTSxELGgsY2UpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9Z2V0Q29sbGFwc2VkQ29sdW1ucygpe3JldHVybiBqNGUoWl8sdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpfWRlc3Ryb3koKXtiSihaXyx0''@;'; put 'put ''aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVWx0KGMsbCxhKXt2YXIgZDtjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdDb2xzcGFuOmYsaXNDb2xsYXBzZWQ6dn09bnVsbCE9PShkPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGEsYykpJiZ2b2lk''@;'; put 'put ''IDAhPT1kP2Q6e30sTT1oJiZmPjEmJmM+PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsRD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2xldCBaPWwucXVlcnlTZWxlY3RvcihgLiR7VV99YCk7dmFyIHJlO2o3KGwsW04yKCIiKVswXV0pLE0/KFp8fCha''@;'; put 'put ''PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxUaShaLFVfKSxsLnF1ZXJ5U2VsZWN0b3IoImRpdjpmaXJzdC1jaGlsZCIpLmFwcGVuZENoaWxkKFopKSxsbyhaLFsiY29sbGFwc2VkIiwiZXhwYW5kZWQiXSksdj8oVGkoWiwiY29sbGFwc2VkIiksUG0oWiwiKyIp''@;'; put 'put ''LEQmJnZvKGwsLi4uTjIoITEpKSk6KFRpKFosImV4cGFuZGVkIiksUG0oWiwiLSIpLEQmJnZvKGwsLi4uTjIoITApKSksRCYmdm8oWiwuLi5WNygpKSk6bnVsbD09PShyZT1aKXx8dm9pZCAwPT09cmV8fHJlLnJlbW92ZSgpfWZ1bmN0aW9uIFpsdChjLGwpe3BvKGMudGFyZ2V0LFVfKSYmKHBv''@;'; put 'put ''KGMudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImNvbGxhcHNlIikpOnBvKGMudGFyZ2V0LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZp''@;'; put 'put ''cmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIikpLEIyKGMpKX1mdW5jdGlvbiBXbHQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIFlsdChjLGwpe2x8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24g''@;'; put 'put ''ZjkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdsdChjKXt2YXIgbD1mdW5jdGlvbiAkbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEtsdD1bInNvcnRFbXB0eUNlbGxzIiwiaW5kaWNhdG9yIiwiaGVhZGVyQWN0''@;'; put 'put ''aW9uIiwiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSJdO2NsYXNzIFFsdHtjb25zdHJ1Y3RvcihsLGEpe2Y5KHRoaXMsImhvdCIsdm9pZCAwKSxmOSh0aGlzLCJzb3J0aW5nU3RhdGVzIixuZXcgcFApLGY5KHRoaXMsInNvcnRFbXB0eUNlbGxzIiwhMSksZjkodGhpcywiaW5kaWNhdG9yIiwhMCks''@;'; put 'put ''ZjkodGhpcywiaGVhZGVyQWN0aW9uIiwhMCksZjkodGhpcywiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIsdm9pZCAwKSxmOSh0aGlzLCJtYXBOYW1lIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5tYXBOYW1lPWEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYSx0aGlz''@;'; put 'put ''LnNvcnRpbmdTdGF0ZXMpfXVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpe3FvKGwpJiZYbyhsLChhLGQpPT57S2x0LmluY2x1ZGVzKGQpJiYodGhpc1tkXT1hKX0pfWdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCl7Y29uc3QgbD17c29ydEVtcHR5Q2VsbHM6dGhpcy5zb3J0RW1wdHlDZWxs''@;'; put 'put ''cyxpbmRpY2F0b3I6dGhpcy5pbmRpY2F0b3IsaGVhZGVyQWN0aW9uOnRoaXMuaGVhZGVyQWN0aW9ufTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5JiYobC5jb21wYXJlRnVuY3Rpb25GYWN0b3J5PXRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9y''@;'; put 'put ''eSksbH1nZXRTb3J0T3JkZXJPZkNvbHVtbihsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnNvcnRPcmRlcn1nZXRJbmRleE9mQ29sdW1u''@;'; put 'put ''SW5Tb3J0UXVldWUobCl7cmV0dXJuIGw9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSx0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLmZpbmRJbmRleChhPT57bGV0W2RdPWE7cmV0dXJuIGQ9PT1sfSl9Z2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc29y''@;'; put 'put ''dGluZ1N0YXRlcy5nZXRMZW5ndGgoKX1pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKX1pc0NvbHVtblNvcnRlZChsKXtyZXR1cm4gcW8odGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGwpKSl9Z2V0U29ydFN0YXRlcygpe3JldHVybiBudWxsPT09dGhpcy5zb3J0aW5nU3RhdGVzP1tdOnRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGE9PntsZXRbZCxoXT1hO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4o''@;'; put 'put ''ZCksLi4uaH19KX1nZXRDb2x1bW5Tb3J0U3RhdGUobCl7Y29uc3QgYT10aGlzLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKFBhKGEpKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6YX19c2V0U29ydFN0YXRlcyhsKXt0aGlzLnNvcnRpbmdTdGF0ZXMuY2xlYXIoKTtmb3IobGV0IGE9MDth''@;'; put 'put ''PGwubGVuZ3RoO2ErPTEpdGhpcy5zb3J0aW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGxbYV0uY29sdW1uKSx7c29ydE9yZGVyOmxbYV0uc29ydE9yZGVyfSl9ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJN''@;'; put 'put ''YXAodGhpcy5tYXBOYW1lKSx0aGlzLnNvcnRpbmdTdGF0ZXM9bnVsbH19ZnVuY3Rpb24gWjRlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbihoLGYpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOnZ9PWE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG9jYWxl''@;'; put 'put ''TG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mP2pwOlVjKGgpP1VjKGYpP2pwOnYmJiJhc2MiPT09Yz9ZYzpHYzpVYyhmKT92JiYiYXNjIj09PWM/R2M6WWM6aXNOYU4oaCkmJiFpc05hTihmKT8iYXNjIj09PWM/R2M6WWM6''@;'; put 'put ''IWlzTmFOKGgpJiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jP1ljOkdjOmg+Zj8iYXNjIj09PWM/R2M6WWM6anB9fWNvbnN0e3JlZ2lzdGVyOm1ULGdldEl0ZW06WTRlLGhhc0l0ZW06bGN0fT1y''@;'; put 'put ''Mygic29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOkc0ZSxnZXRJdGVtOmNjdH09cjMoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gJDRlKGMpe3JldHVybiBsY3QoYyk/WTRlKGMpOlk0ZSgiZGVmYXVsdCIpfW1UKCJjaGVja2JveCIsZnVu''@;'; put 'put ''Y3Rpb24gbmN0KGMsbCxhKXtjb25zdCBkPWwuY2hlY2tlZFRlbXBsYXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVuY3Rpb24odixNKXtjb25zdCBEPVVjKHYpLFo9VWMoTSkscmU9RD9oOnYsY2U9Wj9oOk0sYmU9cmU9PT1ofHxyZT09PWQs''@;'; put 'put ''RWU9Y2U9PT1ofHxjZT09PWQ7aWYoITE9PT1mKXtpZihEJiYhMT09PVopcmV0dXJuIEdjO2lmKCExPT09RCYmWilyZXR1cm4gWWN9cmV0dXJuITE9PT1iZSYmRWU/ImFzYyI9PT1jP1ljOkdjOmJlJiYhMT09PUVlPyJhc2MiPT09Yz9HYzpZYzohMT09PWJlJiYhMT09PUVlP1o0ZShjLGwsYSko''@;'; put 'put ''dixNKTpyZT09PWgmJmNlPT09ZD8iYXNjIj09PWM/WWM6R2M6cmU9PT1kJiZjZT09PWg/ImFzYyI9PT1jP0djOlljOmpwfX0pLG1UKCJkYXRlIixmdW5jdGlvbiBpY3QoYyxsLGEpe3JldHVybiBRNGUoYyxsLmRhdGVGb3JtYXQsYSl9KSxtVCgiZGVmYXVsdCIsWjRlKSxtVCgibnVtZXJpYyIs''@;'; put 'put ''ZnVuY3Rpb24gZWN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksdj1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpNfT1hO2lmKGY9PT12fHxpc05hTihmKSYmaXNOYU4odikpcmV0dXJuIGpwO2lmKE0pe2lmKFVjKGQpKXJldHVybiJhc2Mi''@;'; put 'put ''PT09Yz9ZYzpHYztpZihVYyhoKSlyZXR1cm4iYXNjIj09PWM/R2M6WWN9cmV0dXJuIGlzTmFOKGYpP0djOmlzTmFOKHYpP1ljOmY8dj8iYXNjIj09PWM/WWM6R2M6Zj52PyJhc2MiPT09Yz9HYzpZYzpqcH19KSxtVCgidGltZSIsZnVuY3Rpb24gb2N0KGMsbCxhKXtyZXR1cm4gUTRlKGMsbC50''@;'; put 'put ''aW1lRm9ybWF0LGEpfSk7Y29uc3QganA9MCxZYz0tMSxHYz0xLG5GPSJhc2MiLHJGPSJkZXNjIixLNGU9ImNvbEhlYWRlciI7ZnVuY3Rpb24gcTRlKGMpe2lmKGMhPT1yRilyZXR1cm4gYz09PW5GP3JGOm5GfWZ1bmN0aW9uIFg0ZShjKXtyZXR1cm4gYy5xdWVyeVNlbGVjdG9yKGAuJHtLNGV9''@;'; put 'put ''YCl9ZnVuY3Rpb24gSjRlKGMsbCl7aWYoYzwwfHwhbC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9bC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztyZXR1cm4gQXJyYXkuZnJvbShhKS5pbmRleE9mKGwucGFyZW50Tm9kZSktYS5sZW5ndGg9PS0xfWZ1bmN0aW9uIHlKKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09SG0oYSl9ZnVuY3Rpb24gUTRlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdHtzb3J0RW1wdHlDZWxsczpmfT1hO2lmKGQ9PT1oKXJldHVybiBqcDtpZihVYyhkKSlyZXR1cm4gVWMoaCk/anA6ZiYmImFzYyI9PT1jP1ljOkdj''@;'; put 'put ''O2lmKFVjKGgpKXJldHVybiBmJiYiYXNjIj09PWM/R2M6WWM7Y29uc3Qgdj1PbyhkLGwpLE09T28oaCxsKTtyZXR1cm4gdi5pc1ZhbGlkKCk/TS5pc1ZhbGlkKCk/TS5pc0FmdGVyKHYpPyJhc2MiPT09Yz9ZYzpHYzpNLmlzQmVmb3JlKHYpPyJhc2MiPT09Yz9HYzpZYzpqcDpZYzpHY319Y29u''@;'; put 'put ''c3QgZWdlPSJpbmRpY2F0b3JEaXNhYmxlZCIsdGdlPSJjb2x1bW5Tb3J0aW5nIixuZ2U9InNvcnRBY3Rpb24iLHJnZT1uZXcgTWFwKFtbbkYsImFzY2VuZGluZyJdLFtyRiwiZGVzY2VuZGluZyJdXSk7ZnVuY3Rpb24gaUYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdjdChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBDY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFdfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBhRj0iY29sdW1uU29ydGluZyIsb0Y9ImFwcGVuZCIsaWdlPWFGO0c0ZShhRixmdW5jdGlvbiBiY3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4u''@;'; put 'put ''aF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uKE0pe2NvbnN0IEQ9Y1swXSxaPWxbMF0scmU9aFswXSxjZT1mWzBdLGJlPVouY29sdW1uU29ydGluZztyZXR1cm4oYmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9iZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OiQ0ZShaLnR5cGUpKShELFos''@;'; put 'put ''YmUpKHJlLGNlKX0oKX19KSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uU29ydCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblNvcnQiKTtjb25zdCB2VD1uZXcgV2Vha01hcDt2YXIgcDk9bmV3IFdlYWtTZXQ7Y2xhc3MgYWdlIGV4dGVu''@;'; put 'put ''ZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHljdChjLGwpeyhmdW5jdGlvbiBfY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu''@;'; put 'put ''IG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxwOSksaUYodGhpcywiY29sdW1uU3RhdGVzTWFuYWdlciIsbnVsbCksaUYodGhpcywiY29sdW1uTWV0YUNhY2hlIixudWxsKSxpRih0aGlzLCJwbHVnaW5LZXkiLGFGKSxpRih0aGlzLCJpbmRleGVzU2VxdWVuY2VDYWNoZSIsbnVsbCl9''@;'; put 'put ''c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGFGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDUwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih2VC5o''@;'; put 'put ''YXModGhpcy5ob3QpJiZ2VC5nZXQodGhpcy5ob3QpIT09dGhpcy5wbHVnaW5LZXkpcmV0dXJuIHRoaXMuaG90LnVwZGF0ZVNldHRpbmdzKHtbdGhpcy5wbHVnaW5LZXldOiExfSksdm9pZCBmdW5jdGlvbiBmY3QoYyxsKXtpbChnbGBQbHVnaW5zIFxgY29sdW1uU29ydGluZ1xgIGFuZCBcYG11''@;'; put 'put ''bHRpQ29sdW1uU29ydGluZ1xgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS5ceDIwCiAgICBPbmx5IFxgJHtjfVxgIHdpbGwgd29yay4gVGhlIFxgJHtsfVxgIHBsdWdpbiB3aWxsIHJlbWFpbiBkaXNhYmxlZC5gKX0odlQuZ2V0KHRoaXMuaG90KSx0aGlzLnBsdWdpbktl''@;'; put 'put ''eSk7dGhpcy5lbmFibGVkfHwodlQuc2V0KHRoaXMuaG90LHRoaXMucGx1Z2luS2V5KSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bmV3IFFsdCh0aGlzLmhvdCxgJHt0aGlzLnBsdWdpbktleX0uc29ydGluZ1N0YXRlc2ApLHRoaXMuY29sdW1uTWV0YUNhY2hlPW5ldyBabShhPT57bGV0IGQ9''@;'; put 'put ''dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7cmV0dXJuIG51bGw9PT1kJiYoZD1hKSx0aGlzLmdldE1lcmdlZFBsdWdpblNldHRpbmdzKGQpfSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgLHRoaXMuY29sdW1u''@;'; put 'put ''TWV0YUNhY2hlKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIiwoYSxkKT0+V18ocDksdGhpcyx4Y3QpLmNhbGwodGhpcyxhLGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gV18ocDksbCxUY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLChhLGQpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oYSxkKSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlckluaXQiLCgpPT5XXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFdfKHA5''@;'; put 'put ''LGwsRWN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmhvdC52aWV3JiZXXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2NvbnN0IGw9KGEsZCk9Pntjb25zdCBoPVg0ZShkKTshMT09PUo0''@;'; put 'put ''ZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTt2VC5kZWxldGUodGhpcy5ob3QpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92''@;'; put 'put ''ZUhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5n''@;'; put 'put ''ZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT1udWxsKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNv''@;'; put 'put ''bHVtbk1ldGFgKSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRj''@;'; put 'put ''dXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIHRoaXMuc29y''@;'; put 'put ''dCh0aGlzLmdldENvbHVtbk5leHRDb25maWcobC5jb2wpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiYtMT09PWQucm93JiZkLmNvbD49MH0scmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUiLGdy''@;'; put 'put ''b3VwOmlnZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChpZ2UpfXNvcnQobCl7Y29uc3QgYT10aGlzLmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXpl''@;'; put 'put ''ZFNvcnRDb25maWdzKGwpLGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1hLmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZUNhY2hlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5LG5ldyBEM2UpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1u''@;'; put 'put ''U3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEsaD9kOmEsaCksaCYmdGhpcy5ob3QucmVuZGVyKCkpfWNsZWFy''@;'; put 'put ''U29ydCgpe3RoaXMuc29ydChbXSl9aXNTb3J0ZWQoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gUGEobCk/dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdl''@;'; put 'put ''dENvbHVtblNvcnRTdGF0ZShsKTp0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydFN0YXRlcygpfXNldFNvcnRDb25maWcobCl7Y29uc3QgYT10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKTt0aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoYSkmJnRoaXMuY29sdW1uU3RhdGVz''@;'; put 'put ''TWFuYWdlci5zZXRTb3J0U3RhdGVzKGEpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKDAsMSk6W2xdfWFyZVZhbGlk''@;'; put 'put ''U29ydENvbmZpZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4gZnVuY3Rpb24gaGN0KGMpe2lmKGMuc29tZShhPT4hMT09PWZ1bmN0aW9uIGRjdChjKXtpZighMT09PXFvKGMpKXJldHVybiExO2NvbnN0e2NvbHVtbjpsLHNvcnRPcmRlcjphfT1jO3JldHVybiBOdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKGwpJiZbbkYsckZdLmluY2x1ZGVzKGEpfShhKSkpcmV0dXJuITE7Y29uc3QgbD1jLm1hcChhPT57bGV0e2NvbHVtbjpkfT1hO3JldHVybiBkfSk7cmV0dXJuIG5ldyBTZXQobCkuc2l6ZT09PWwubGVuZ3RofShsKSYmbC5ldmVyeShkPT57bGV0e2NvbHVtbjpofT1kO3Jl''@;'; put 'put ''dHVybiBoPD1hJiZoPj0wfSl9c2F2ZUFsbFNvcnRTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpO2EuaW5pdGlhbENvbmZpZz15cyhsLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxDb2x1bW4oZiksLi4udn19KSx0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsImNvbHVtblNvcnRpbmciLGEpfWdldEFsbFNhdmVkU29ydFNldHRpbmdzKCl7Y29uc3QgbD17fTt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9h''@;'; put 'put ''ZCIsImNvbHVtblNvcnRpbmciLGwpO2NvbnN0IGE9bC52YWx1ZTtyZXR1cm4gUGEoYSkmJkFycmF5LmlzQXJyYXkoYS5pbml0aWFsQ29uZmlnKSYmKGEuaW5pdGlhbENvbmZpZz15cyhhLmluaXRpYWxDb25maWcsaD0+e2xldHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxDb2x1bW4oZiksLi4udn19KSksYX1nZXRDb2x1bW5OZXh0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKFBhKGEpKXtjb25zdCBoPXE0ZShhKTtyZXR1cm4gUGEoaCk/e2NvbHVtbjpsLHNvcnRP''@;'; put 'put ''cmRlcjpofTp2b2lkIDB9Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wJiZsPGQpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjpxNGUoKX19Z2V0TmV4dFNvcnRDb25maWcobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm9GO2NvbnN0IGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSxoPS0xIT09ZCxmPXRoaXMuZ2V0U29ydENvbmZpZygpLHY9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwpO2lmKGgpe2lm''@;'; put 'put ''KF9jKHYpKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpXTtpZihhPT09b0YpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSksdl07aWYoInJlcGxhY2UiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLHYsLi4uZi5zbGljZShkKzEpXX1yZXR1cm4g''@;'; put 'put ''UGEodik/Zi5jb25jYXQodik6Zn1nZXRQbHVnaW5Db2x1bW5Db25maWcobCl7aWYocW8obCkpe2NvbnN0IGE9bFt0aGlzLnBsdWdpbktleV07aWYocW8oYSkpcmV0dXJuIGF9cmV0dXJue319Z2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''W3RoaXMucGx1Z2luS2V5XSxkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpLGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxmPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmLmNvbHVtbnMpP09iamVjdC5h''@;'; put 'put ''c3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1uc1tsXSkpOm1sKGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zKGwpKSk6T2JqZWN0LmFzc2lnbihkLGEpfWdldEZpcnN0Q2VsbFNldHRpbmdz''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxkPU9iamVjdC5jcmVhdGUoYSk7cmV0dXJuIGRbdGhpcy5wbHVnaW5LZXldPXRoaXMuY29sdW1uTWV0YUNhY2hlLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkfWdldE51bWJlck9mUm93''@;'; put 'put ''c1RvU29ydChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCk7cmV0dXJuIGEubWF4Um93czw9bD9hLm1heFJvd3M6bC1hLm1pblNwYXJlUm93c31zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGwpe2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlz''@;'; put 'put ''LmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSwwPT09bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPVo9PnlzKGwscmU9PnRoaXMuaG90LmdldERhdGFBdENlbGwoWixyZS5jb2x1bW4pKTtmb3IobGV0IFo9MDtaPHRoaXMuZ2V0TnVt''@;'; put 'put ''YmVyT2ZSb3dzVG9Tb3J0KGQpO1orPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KFopXS5jb25jYXQoaChaKSkpO2NvbnN0IGY9eXMoYSxaPT5aWzBdKTshZnVuY3Rpb24gdWN0KGMsbCl7Y29uc3QgYT1jY3QobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJy''@;'; put 'put ''YXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSx5cyhsLFo9Plouc29ydE9yZGVyKSx5cyhsLFo9PnRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoWi5jb2x1bW4pKSk7Zm9yKGxldCBaPWEubGVuZ3Ro''@;'; put 'put ''O1o8ZDtaKz0xKWEucHVzaChbWl0uY29uY2F0KGgoWikpKTtjb25zdCB2PXlzKGEsWj0+WlswXSksTT1uZXcgTWFwKHlzKGYsKFoscmUpPT5bWix2W3JlXV0pKSxEPXlzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFo9Pk0uaGFzKFopP00uZ2V0KFopOlop''@;'; put 'put ''O3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShEKX1zb3J0QnlTZXR0aW5ncyhsKXtpZihxbyhsKSl7dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpO2NvbnN0IGE9bC5pbml0aWFsQ29uZmlnOyhBcnJheS5pc0Fy''@;'; put 'put ''cmF5KGEpfHxxbyhhKSkmJnRoaXMuc29ydChhKX1lbHNlIHRoaXMuaG90LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYobG8obCxmdW5jdGlvbiB2Y3QoKXtyZXR1cm4gQXJyYXkuZnJvbShyZ2UudmFsdWVzKCkpLmNvbmNhdChuZ2UsZWdlLHRnZSl9KCkpLCExIT09dGhpcy5l''@;'; put 'put ''bmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07VGkobCxmdW5jdGlvbiBtY3QoYyxsLGEsZCl7Y29uc3QgaD1bdGdlXTtpZihkJiZoLnB1c2gobmdlKSwhMT09PWEpcmV0dXJuIGgu''@;'; put 'put ''cHVzaChlZ2UpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3JldHVybiBQYShmKSYmaC5wdXNoKHJnZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKGwpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYm''@;'; put 'put ''dGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksUGEobFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX13YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGws''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmcG8obC50YXJnZXQsSzRlKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7aWYoITEhPT15SihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJD''@;'; put 'put ''bGlja2VkKGwsYS5jb2wpKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSk7Y29uc3QgZD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSxoPXRoaXMuZ2V0''@;'; put 'put ''Q29sdW1uTmV4dENvbmZpZyhhLmNvbCk7bnVsbCE9ZCYmZC5pc09wZW5lZCgpJiZ0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKGQucm93LGQuY29sKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgpPT57dGhpcy5zb3J0KGgpfSk6dGhpcy5zb3J0KGgpfX1kZXN0''@;'; put 'put ''cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gX0ooKXtjb25zdCBjPXRoaXMuZ2V0QWxsU2F2ZWRTb3J0U2V0dGluZ3MoKTtpZihxbyhjKSl0aGlzLnNvcnRCeVNl''@;'; put 'put ''dHRpbmdzKGMpO2Vsc2V7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTt0aGlzLnNvcnRCeVNldHRpbmdzKGwpfX1mdW5jdGlvbiB4Y3QoYyxsKXtjb25zdCBhPVg0ZShsKTtpZighMT09PUo0ZShjLGwpfHxudWxsPT09YSlyZXR1cm47Y29uc3QgZD10aGlz''@;'; put 'put ''LmdldEZpcnN0Q2VsbFNldHRpbmdzKGMpW3RoaXMucGx1Z2luS2V5XTtpZih0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoYSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIsYyxkLmluZGljYXRvcixkLmhlYWRlckFjdGlvbiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3Qg''@;'; put 'put ''dj10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4oYyk7dm8obCwuLi4oYz0+WyJhcmlhLXNvcnQiLGNdKSh2P2Ake3Z9ZW5kaW5nYDoibm9uZSIpKX19ZnVuY3Rpb24gRWN0KGMpeyEwPT09YyYmdGhpcy5ob3QudmlldyYmV18ocDksdGhpcyxfSikuY2FsbCh0''@;'; put 'put ''aGlzKX1mdW5jdGlvbiBUY3QoYyxsLGEsZCl7ITEhPT15SihsLnJvdyxsLmNvbCxjKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGMsbC5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gZzko''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFjdChjKXt2YXIgbD1mdW5jdGlvbiBrY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEljdD1jbGFzcyBEY3R7Y29uc3RydWN0b3IobCxhKXtnOSh0aGlzLCJwbHVnaW4i''@;'; put 'put ''LHZvaWQgMCksZzkodGhpcywiaG90Iix2b2lkIDApLGc5KHRoaXMsImVuZHBvaW50cyIsW10pLGc5KHRoaXMsInNldHRpbmdzIix2b2lkIDApLGc5KHRoaXMsInNldHRpbmdzVHlwZSIsImFycmF5IiksZzkodGhpcywiY3VycmVudEVuZHBvaW50IixudWxsKSxnOSh0aGlzLCJjZWxsc1RvU2V0''@;'; put 'put ''Q2FjaGUiLFtdKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PXRoaXMucGx1Z2luLmhvdCx0aGlzLnNldHRpbmdzPWF9aW5pdEVuZHBvaW50cygpe3RoaXMuZW5kcG9pbnRzPXRoaXMucGFyc2VTZXR0aW5ncygpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWdldEVuZHBvaW50KGwpe3JldHVy''@;'; put 'put ''biJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpW2xdOnRoaXMuZW5kcG9pbnRzW2xdfWdldEFsbEVuZHBvaW50cygpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNz''@;'; put 'put ''aW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpOnRoaXMuZW5kcG9pbnRzfWZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKGwpe3JldHVybiB0aGlzLnBhcnNlU2V0dGluZ3MobC5jYWxsKHRoaXMpKX1wYXJzZVNldHRpbmdzKGwpe2NvbnN0IGE9W107bGV0IGQ9bDtpZihkfHwiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgdGhpcy5zZXR0aW5ncylyZXR1cm4gZHx8KGQ9dGhpcy5zZXR0aW5ncyksWW4oZCxoPT57Y29uc3QgZj17fTt0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyYW5nZXMiLFtbMCx0aGlzLmhvdC5jb3VudFJvd3MoKS0xXV0pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJldmVyc2Vk''@;'; put 'put ''Um93Q29vcmRzIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Sb3ciLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiByb3cgZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJs''@;'; put 'put ''eSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvbkNvbHVtbiIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHBy''@;'; put 'put ''b3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInNvdXJjZUNvbHVtbiIsaC5kZXN0aW5hdGlvbkNvbHVtbiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwidHlwZSIsInN1bSIpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImZvcmNlTnVtZXJpYyIsITEpLHRoaXMuYXNz''@;'; put 'put ''aWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlvbiIsbnVsbCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0Iiwh''@;'; put 'put ''MSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIhPT1kfHx2b2lkIDAhPT1sW2RdKXtpZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNl''@;'; put 'put ''b2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMuaG90LmNvdW50Um93cygpLWxbZF0tMTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixmPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7WW4oZix2PT57InJvdyI9PT1oJiZ2LmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD92''@;'; put 'put ''LmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKHYuYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmdi5kZXN0aW5hdGlvbkNvbHVtbj49YSYmKCJpbnNlcnRfY29sIj09PWw/di5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJih2LmFsdGVyQ29s''@;'; put 'put ''dW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCxoLGYpe2xldCB2PSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCBiZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGJlKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIi''@;'; put 'put ''LGJlKX1jb25zdCBNPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsRD1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsWj10aGlzLmdldEFsbEVuZHBvaW50cygpLHJlPTA9PT1sLmluZGV4T2YoIm1vdmVfcm93IiksY2U9YTtZbihaLGJlPT57InJvdyI9PT1NJiZiZS5kZXN0aW5h''@;'; put 'put ''dGlvblJvdz49Y2UmJihiZS5hbHRlclJvd09mZnNldD1EKmQpLCJjb2wiPT09TSYmYmUuZGVzdGluYXRpb25Db2x1bW4+PWNlJiYoYmUuYWx0ZXJDb2x1bW5PZmZzZXQ9RCpkKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoWiwhcmUpLFluKFoscmU/YmU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50''@;'; put 'put ''UmFuZ2VzKGJlLGNlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhiZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKGJlKX06YmU9Pnt0aGlzLnNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhiZSxjZSl9KSx2JiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMo''@;'; put 'put ''KX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGwsYSxkLGgpe1luKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpk''@;'; put 'put ''PGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtjb25zdCBkPVtdLGg9W107WW4obC5yYW5nZXMsZj0+e2NvbnN0IHY9W107aWYoZlsxXSlmb3IobGV0IE09Zlsw''@;'; put 'put ''XTtNPD1mWzFdO00rKyl2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhNKSk7ZWxzZSB2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKHYpfSksWW4oaCxmPT57bGV0IHY9W107WW4oZiwoTSxEKT0+ezA9PT1EP3YucHVzaChNKTpmW0RdIT09ZltELTFdKzEm''@;'; put 'put ''Jih2LnB1c2goZltELTFdKSxkLnB1c2godiksdj1bXSx2LnB1c2goTSkpLEQ9PT1mLmxlbmd0aC0xJiYodi5wdXNoKE0pLGQucHVzaCh2KSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/''@;'; put 'put ''KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsWW4obC5yYW5nZXMsZD0+e1luKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9KX0pKTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRp''@;'; put 'put ''b25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxs''@;'; put 'put ''RW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3Qgdj1oLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhp''@;'; put 'put ''cy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rdj49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLFluKGwsaD0+e3RoaXMucmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNU''@;'; put 'put ''b1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbih0aGlzLmdldEFsbEVuZHBvaW50cygpLGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1''@;'; put 'put ''Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9''@;'; put 'put ''W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbihsLChkLGgsZik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNdfWAmJlluKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKHYsTSk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsx''@;'; put 'put ''XSk9PT12LnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoTSkmJmEucHVzaChNKX0pfSksWW4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChkKSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5''@;'; put 'put ''LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2gobD0+e2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEoYSxsLmRlc3RpbmF0aW9uQ29sdW1uKTtkLnJlYWRPbmx5PWwucmVhZE9ubHksZC5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJlc2hFbmRwb2ludChsKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBv''@;'; put 'put ''aW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxs''@;'; put 'put ''c1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0''@;'; put 'put ''IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRoaXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29s''@;'; put 'put ''dW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVz''@;'; put 'put ''dGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHx2LnJlYWRPbmx5IT09bC5yZWFkT25seSkmJih2LnJlYWRPbmx5PWwucmVhZE9ubHksdi5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQiKX1pZigoITA9PT1sLnJvdW5kRmxvYXR8fE51bWJlci5pc0ludGVnZXIobC5yb3VuZEZsb2F0''@;'; put 'put ''KSkmJiFpc05hTihsLnJlc3VsdCkpe2NvbnN0IHY9bC5yb3VuZEZsb2F0O2xldCBNPTA7TnVtYmVyLmlzSW50ZWdlcih2KSYmKE09TWF0aC5taW4oTWF0aC5tYXgoMCx2KSwxMDApKSxsLnJlc3VsdD1sLnJlc3VsdC50b0ZpeGVkKE0pfWQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVz''@;'; put 'put ''dGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxsLmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRP''@;'; put 'put ''ZkJvdW5kc1dhcm5pbmcoKXtpbCgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX19O2Z1bmN0aW9uIHdKKGMpe3JldHVybiBudWxsPT1jfHxpc05hTihjKX1m''@;'; put 'put ''dW5jdGlvbiBzRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQ0o9''@;'; put 'put ''ImNvbHVtblN1bW1hcnkiO3ZhciBiVD1uZXcgV2Vha1NldDtjbGFzcyBOY3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUmN0KGMsbCl7KGZ1bmN0aW9uIExjdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v''@;'; put 'put ''dCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGJUKSxmdW5jdGlvbiBPY3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFBjdChjKXt2YXIgbD1mdW5jdGlvbiBGY3QoYyxsKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJlbmRwb2ludHMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBDSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NKXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDSl0sdGhpcy5lbmRwb2ludHM9bmV3IEljdCh0aGlzLHRoaXMuc2V0dGluZ3MpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBzRihiVCxsLFZjdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoYlQsbCxqY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoYlQsbCxCY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVm''@;'; put 'put ''b3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJh''@;'; put 'put ''dGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRT''@;'; put 'put ''ZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVD''@;'; put 'put ''b2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHNGKGJULGwsemN0KS5jYWxsKGwsLi4uZCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5l''@;'; put 'put ''bmRwb2ludHMuaW5pdEVuZHBvaW50cygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWNhbGN1bGF0ZShsKXtzd2l0Y2gobC50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic3VtIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZVN1bShsKTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOmwucmVzdWx0PXRo''@;'; put 'put ''aXMuY2FsY3VsYXRlTWluTWF4KGwsbC50eXBlKTticmVhaztjYXNlImNvdW50IjpsLnJlc3VsdD10aGlzLmNvdW50RW50cmllcyhsKTticmVhaztjYXNlImF2ZXJhZ2UiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlQXZlcmFnZShsKTticmVhaztjYXNlImN1c3RvbSI6bC5yZXN1bHQ9bC5jdXN0''@;'; put 'put ''b21GdW5jdGlvbi5jYWxsKHRoaXMsbCl9fWNhbGN1bGF0ZVN1bShsKXtsZXQgYT0wO3JldHVybiBYbyhsLnJhbmdlcyxkPT57YSs9dGhpcy5nZXRQYXJ0aWFsU3VtKGQsbC5zb3VyY2VDb2x1bW4pfSksYX1nZXRQYXJ0aWFsU3VtKGwsYSl7bGV0IGQ9MCxoPWxbMV18fGxbMF0sZj1udWxsLHY9''@;'; put 'put ''MDtkb3tpZihmPXRoaXMuZ2V0Q2VsbFZhbHVlKGgsYSksZj13SihmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IE09KGAke2Z9YC5zcGxpdCgiLiIpWzFdfHxbXSkubGVuZ3RofHwxO00+diYmKHY9TSl9ZCs9Znx8MCxoLT0xfXdoaWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAq''@;'; put 'put ''KnYpLzEwKip2fWNhbGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIFhvKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRoaXMuZ2V0UGFydGlhbE1pbk1heChoLGwuc291cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZudWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nh''@;'; put 'put ''c2UibWluIjpkPU1hdGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVub3VnaCBkYXRhIjpkfWdldFBhcnRpYWxNaW5NYXgobCxhLGQpe2xldCB2LGg9bnVsbCxmPWxbMV18fGxbMF07ZG97aWYodj10aGlzLmdldENlbGxWYWx1ZShm''@;'; put 'put ''LGEpLHY9d0oodik/bnVsbDp2LG51bGw9PT1oKWg9djtlbHNlIGlmKG51bGwhPT12KXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRoLm1pbihoLHYpO2JyZWFrO2Nhc2UibWF4IjpoPU1hdGgubWF4KGgsdil9Zi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0''@;'; put 'put ''IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD13SihkKT9udWxsOmQsbnVsbD09PWQmJihoKz0xKSxmLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW50cmllcyhsKXtsZXQgYT0wO3JldHVybiBYbyhsLnJhbmdlcyxoPT57Y29uc3QgZj12''@;'; put 'put ''b2lkIDA9PT1oWzFdPzE6aFsxXS1oWzBdKzEsdj10aGlzLmNvdW50RW1wdHkoaCxsLnNvdXJjZUNvbHVtbik7YSs9ZixhLT12fSksYX1jYWxjdWxhdGVBdmVyYWdlKGwpe3JldHVybiB0aGlzLmNhbGN1bGF0ZVN1bShsKS90aGlzLmNvdW50RW50cmllcyhsKX1nZXRDZWxsVmFsdWUobCxhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93KGwpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7bGV0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLGEpLHY9IiI7aWYobnVsbCE9PWQmJm51bGwhPT1oJiYodj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFt''@;'; put 'put ''ZXx8IiIpLHYuaW5kZXhPZigiY29sdW1uU3VtbWFyeVJlc3VsdCIpPi0xKXJldHVybiBudWxsO2lmKHRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5mb3JjZU51bWVyaWMmJigic3RyaW5nIj09dHlwZW9mIGYmJihmPWYucmVwbGFjZSgvLC8sIi4iKSksZj1wYXJzZUZsb2F0KGYpKSxp''@;'; put 'put ''c05hTihmKSYmIXRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5zdXBwcmVzc0RhdGFUeXBlRXJyb3JzKXRocm93IG5ldyBFcnJvcihnbGBDb2x1bW5TdW1tYXJ5IHBsdWdpbjogY2VsbCBhdCAoJHtsfSwgJHthfSkgaXMgbm90IGluIGFceDIwCiAgICAgICAgICBudW1lcmljIGZvcm1h''@;'; put 'put ''dC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtyZXR1cm4gZn19ZnVuY3Rpb24gVmN0KCl7dGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpfWZ1bmN0aW9uIEJjdChjKXt2b2lkIDAhPT1jLmNvbHVtbnMmJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDZWxsTWV0YXMoKX1mdW5jdGlv''@;'; put 'put ''biBqY3QoYyxsKXtjJiYiQ29sdW1uU3VtbWFyeS5yZXNldCIhPT1sJiYiQ29sdW1uU3VtbWFyeS5zZXQiIT09bCYmImxvYWREYXRhIiE9PWwmJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGMpfWZ1bmN0aW9uIHpjdChjLGwpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0''@;'; put 'put ''dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsY1swXSxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGwsYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpfWZ1''@;'; put 'put ''bmN0aW9uIFNKKGMsbCxhKXtvZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG9nZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWV8o''@;'; put 'put ''YyxsKXtyZXR1cm4gYy5nZXQoeEooYyxsKSl9ZnVuY3Rpb24gTUooYyxsLGEpe3JldHVybiBjLnNldCh4SihjLGwpLGEpLGF9ZnVuY3Rpb24geEooYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBsRj1uZXcgV2Vha01hcCxjRj1uZXcgV2Vha01hcCx1Rj1uZXcgV2Vha01hcCxzZ2U9bmV3IFdlYWtTZXQ7Y2xhc3MgbGdle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIFVj''@;'; put 'put ''dChjLGwpe29nZShjLGwpLGwuYWRkKGMpfSkodGhpcyxzZ2UpLFNKKHRoaXMsbEYsITApLFNKKHRoaXMsY0YsbnVsbCksU0oodGhpcyx1RixuZXcgUmVzaXplT2JzZXJ2ZXIobD0+eEooc2dlLHRoaXMsWmN0KS5jYWxsKHRoaXMsbCkpKX1zZXRPYnNlcnZlZEVsZW1lbnQobCl7TUooY0YsdGhp''@;'; put 'put ''cyxsKX11bm9ic2VydmUoKXtZXyh1Rix0aGlzKS51bm9ic2VydmUoWV8oY0YsdGhpcykpfW9ic2VydmUoKXtNSihsRix0aGlzLCEwKSxZXyh1Rix0aGlzKS5vYnNlcnZlKFlfKGNGLHRoaXMpKX1kZXN0cm95KCl7WV8odUYsdGhpcykuZGlzY29ubmVjdCgpfX1mdW5jdGlvbiBaY3QoYyl7IVlf''@;'; put 'put ''KGxGLHRoaXMpJiZBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aD9jLmZvckVhY2gobD0+e2xldHtib3JkZXJCb3hTaXplOmF9PWw7Y29uc3R7aW5saW5lU2l6ZTpkLGJsb2NrU2l6ZTpofT1hWzBdO3RoaXMucnVuTG9jYWxIb29rcygicmVzaXplIixkLGgpfSk6TUoobEYsdGhpcywhMSl9ZnVu''@;'; put 'put ''Y3Rpb24gbTkoYyxsLGEpeyhmdW5jdGlvbiBXY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIE5sKGMs''@;'; put 'put ''bCl7cmV0dXJuIGMuZ2V0KGNnZShjLGwpKX1mdW5jdGlvbiBSZyhjLGwsYSl7cmV0dXJuIGMuc2V0KGNnZShjLGwpLGEpLGF9ZnVuY3Rpb24gY2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChsZ2UseTEpO3ZhciB2OT1uZXcgV2Vha01hcCxFSj1uZXcgV2Vha01hcCxMZz1uZXcgV2Vha01hcCxxbT1uZXcgV2Vha01hcCxYbT1uZXcgV2Vha01hcCxkRj1uZXcgV2Vh''@;'; put 'put ''a01hcCxHXz1uZXcgV2Vha01hcDtjbGFzcyBiOXtzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRDb21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3Jl''@;'; put 'put ''dHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczttOSh0aGlzLHY5LHZvaWQgMCksbTkodGhpcyxFSiwhMSksbTkodGhpcyxMZyxudWxsKSxtOSh0aGlzLHFtLHZvaWQg''@;'; put 'put ''MCksbTkodGhpcyxYbSx2b2lkIDApLG05KHRoaXMsZEYsITApLG05KHRoaXMsR18sbmV3IGxnZSksUmcodjksdGhpcyxsKSxSZyhFSix0aGlzLGEpLFJnKHFtLHRoaXMsdGhpcy5jcmVhdGVFZGl0b3IoKSksUmcoWG0sdGhpcyxObChxbSx0aGlzKS5zdHlsZSksTmwoR18sdGhpcykuc2V0T2Jz''@;'; put 'put ''ZXJ2ZWRFbGVtZW50KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLE5sKEdfLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1''@;'; put 'put ''bkxvY2FsSG9va3MoInJlc2l6ZSIsLi4uZil9KSx0aGlzLmhpZGUoKX1zZXRQb3NpdGlvbihsLGEpe05sKFhtLHRoaXMpLmxlZnQ9YCR7bH1weGAsTmwoWG0sdGhpcykudG9wPWAke2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZhKXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ZC5z''@;'; put 'put ''dHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDpzdSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6eHUodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fW9ic2VydmVTaXplKCl7TmwoR18sdGhpcykub2JzZXJ2ZSgp''@;'; put 'put ''fXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUobCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1sfXNob3coKXtObChYbSx0aGlzKS5kaXNwbGF5PSJibG9j''@;'; put 'put ''ayIsUmcoZEYsdGhpcywhMSl9aGlkZSgpe05sKEdfLHRoaXMpLnVub2JzZXJ2ZSgpLE5sKGRGLHRoaXMpfHwoTmwoWG0sdGhpcykuZGlzcGxheT0ibm9uZSIpLFJnKGRGLHRoaXMsITApfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT1ObChYbSx0aGlzKS5kaXNwbGF5fXNldFZhbHVlKCl7''@;'; put 'put ''Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1hfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0''@;'; put 'put ''dXJuIE5sKHY5LHRoaXMpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVkaXRvcigpe2NvbnN0IGw9TmwodjksdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IiksYT1ObCh2OSx0aGlzKS5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFJnKExnLHRoaXMsTmwodjksdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IikpLE5sKExnLHRoaXMpLnNldEF0dHJpYnV0ZSgiZGlyIixObChFSix0aGlzKT8icnRsIjoibHRyIiksVGkoTmwoTGcs''@;'; put 'put ''dGhpcyksYjkuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksTmwodjksdGhpcykuYm9keS5hcHBlbmRDaGlsZChObChMZyx0aGlzKSksVGkobCxiOS5DTEFTU19FRElUT1IpLFRpKGEsYjkuQ0xBU1NfSU5QVVQpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLGwuYXBwZW5kQ2hp''@;'; put 'put ''bGQoYSksTmwoTGcsdGhpcykuYXBwZW5kQ2hpbGQobCksbH1nZXRJbnB1dEVsZW1lbnQoKXtyZXR1cm4gTmwocW0sdGhpcykucXVlcnlTZWxlY3RvcihgLiR7YjkuQ0xBU1NfSU5QVVR9YCl9Z2V0RWRpdG9yRWxlbWVudCgpe3JldHVybiBObChxbSx0aGlzKX1kZXN0cm95KCl7Y29uc3QgbD1O''@;'; put 'put ''bChMZyx0aGlzKT9ObChMZyx0aGlzKS5wYXJlbnROb2RlOm51bGw7TmwocW0sdGhpcykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChObChxbSx0aGlzKSksUmcocW0sdGhpcyxudWxsKSxSZyhYbSx0aGlzLG51bGwpLE5sKEdfLHRoaXMpLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKE5sKExn''@;'; put 'put ''LHRoaXMpKX19VGwoYjkseTEpO2NvbnN0IFljdD1iOTtmdW5jdGlvbiBUSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR2N0KGMpe3ZhciBsPWZ1bmN0aW9uICRjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgdWdl''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpe1RKKHRoaXMsIndhc0xhc3RBY3Rpb25TaG93IiwhMCksVEoodGhpcywic2hvd0RlYm91bmNlZCIsbnVsbCksVEoodGhpcywiaGlkaW5nVGltZXIiLG51bGwpLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5o''@;'; put 'put ''aWRpbmdUaW1lcj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMu''@;'; put 'put ''d2FzTGFzdEFjdGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hvd0RlYm91bmNlZD1NRShhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93Iixh''@;'; put 'put ''LmZyb20ucm93LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGwodWdlLHkxKTtjb25zdCBYY3Q9dWdlLHNzPSItLS0tLS0tLS0iO2Z1bmN0aW9u''@;'; put 'put ''IHk5KGMsbCl7Y29uc3QgYT17fTtyZXR1cm4gWW4oYyxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiYoYVtoXXx8KGFbaF09W10pLGFbaF1bZl09bChoLGYpKX0pfSksYX1mdW5jdGlvbiBKbShjLGwsYSxkLGgpe1luKGMsZj0+e2YuZm9yQWxsKCh2LE0pPT57dj49MCYmTT49MCYm''@;'; put 'put ''ZnVuY3Rpb24gcnV0KGMsbCxhLGQsaCxmKXtjb25zdCB2PWgoYyxsKTtsZXQgTT1kO3YuY2xhc3NOYW1lJiYoTT0idmVydGljYWwiPT09YT9mdW5jdGlvbiB0dXQoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRUb3AiLCIiKS5yZXBsYWNlKCJodE1pZGRs''@;'; put 'put ''ZSIsIiIpLnJlcGxhY2UoImh0Qm90dG9tIiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpOmZ1bmN0aW9uIG51dChjLGwpe3JldHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodExlZnQiLCIiKS5yZXBsYWNlKCJodENlbnRlciIsIiIpLnJl''@;'; put 'put ''cGxhY2UoImh0UmlnaHQiLCIiKS5yZXBsYWNlKCJodEp1c3RpZnkiLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCkpLGYoYyxsLCJjbGFzc05hbWUiLE0pfSh2LE0sbCxhLGQsaCl9KX0pfWZ1bmN0aW9uIGRnZShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVj''@;'; put 'put ''dGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9ZnVuY3Rpb24gaEYoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmWW4oYyxkPT4oZC5mb3JBbGwoKGgsZik9PntpZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJuIGE9ITAsITF9KSxhKSksYX1mdW5jdGlvbiBmRihjLGwpe2Nv''@;'; put 'put ''bnN0IGE9e3RvcDowLGxlZnQ6MH07aWYobCE9PWMub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmR9PWwuZGVmYXVsdFZpZXcse3RvcDpoLGxlZnQ6Zn09ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRvcD1oLGEubGVmdD1mfXJldHVybiBhfWZ1bmN0aW9uICRfKGMsbCxh''@;'; put 'put ''KXtoZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGhnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUW0oYyxsLGEpe3JldHVybiBj''@;'; put 'put ''LnNldChVZChjLGwpLGEpLGF9ZnVuY3Rpb24gSm8oYyxsKXtyZXR1cm4gYy5nZXQoVWQoYyxsKSl9ZnVuY3Rpb24gVWQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHBGPSJjb21tZW50cyIsT2c9ImNvbW1lbnQiLHlUPSJ2YWx1ZSIsZ0Y9InJlYWRPbmx5IixfVD1wRixBSj1gcGx1Z2luOiR7cEZ9YDt2YXIgQWw9bmV3IFdlYWtNYXAsenA9bmV3IFdlYWtNYXAs''@;'; put 'put ''bUY9bmV3IFdlYWtNYXAsdkY9bmV3IFdlYWtNYXAsa0o9bmV3IFdlYWtNYXAsYkY9bmV3IFdlYWtNYXAsUGg9bmV3IFdlYWtTZXQ7Y2xhc3MgdXV0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGF1dChjLGwpe2hnZShjLGwpLGwuYWRkKGMp''@;'; put 'put ''fSh0aGlzLFBoKSxmdW5jdGlvbiBvdXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHN1dChjKXt2YXIgbD1mdW5jdGlvbiBsdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1h''@;'; put 'put ''LmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0''@;'; put 'put ''cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJyYW5nZSIse30pLCRfKHRoaXMsQWws''@;'; put 'put ''bnVsbCksJF8odGhpcyx6cCxudWxsKSwkXyh0aGlzLG1GLCExKSwkXyh0aGlzLHZGLCExKSwkXyh0aGlzLGtKLG51bGwpLCRfKHRoaXMsYkYsIiIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA2MH1zdGF0aWMg''@;'; put 'put ''Z2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57ZGlzcGxheURlbGF5OjI1MH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KEpvKEFsLHRoaXMpfHwoUW0oQWwsdGhpcyxuZXcg''@;'; put 'put ''WWN0KHRoaXMuaG90LnJvb3REb2N1bWVudCx0aGlzLmhvdC5pc1J0bCgpKSksSm8oQWwsdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0''@;'; put 'put ''dXJuIFVkKFBoLGwsYnV0KS5jYWxsKGwsLi4uZCl9KSksSm8oenAsdGhpcyl8fFFtKHpwLHRoaXMsbmV3IFhjdCh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGE9PnRoaXMuYWRkVG9Db250ZXh0''@;'; put 'put ''TWVudShhKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIiwoYSxkLGgsZix2LE0pPT5VZChQaCx0aGlzLGd1dCkuY2FsbCh0aGlzLGEsTSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLCgpPT5VZChQaCx0aGlzLHl1dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckJl''@;'; put 'put ''Z2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT5VZChQaCx0aGlzLHBnZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGE9PlVkKFBoLHRoaXMscGdlKS5jYWxsKHRoaXMs''@;'; put 'put ''YSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gVWQoUGgsbCxfdXQpLmNhbGwobCwuLi5kKX0pLEpvKHpwLHRoaXMpLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiaGlkZSIsKCk9PnRoaXMuaGlkZSgpKSxKbyh6cCx0aGlzKS5hZGRMb2NhbEhvb2soInNob3ciLChhLGQpPT50aGlzLnNob3dBdENlbGwoYSxkKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFibGVQbHVnaW4o''@;'; put 'put ''KSl9dXBkYXRlUGx1Z2luKCl7Sm8oenAsdGhpcykudXBkYXRlRGVsYXkodGhpcy5nZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdp''@;'; put 'put ''c3RlclNob3J0Y3V0cygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuYWRkQ29udGV4dChBSik7YS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwiQWx0IiwiTSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtRbSh2Rix0aGlzLCEwKSx0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCgpPT57dGhpcy5zZXRSYW5nZShoKSx0aGlzLnNob3coKSx0aGlzLmZvY3VzRWRpdG9yKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZShBSiksdGhpcy5ob3QuX3Jl''@;'; put 'put ''Z2lzdGVyVGltZW91dCgoKT0+e1FtKHZGLHRoaXMsITEpfSl9KX0sc3RvcFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0LmlzQ2Vs''@;'; put 'put ''bCgpfSxncm91cDpfVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57Sm8oQWwsdGhpcykuc2V0VmFsdWUoSm8oYkYsdGhpcykpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25seUlmOigpPT5KbyhBbCx0aGlz''@;'; put 'put ''KS5pc1Zpc2libGUoKSYmSm8oQWwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6X1R9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6''@;'; put 'put ''KCk9PkpvKEFsLHRoaXMpLmlzVmlzaWJsZSgpJiZKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpfVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT57Sm8o''@;'; put 'put ''QWwsdGhpcykuc2V0VmFsdWUoSm8oQWwsdGhpcykuZ2V0VmFsdWUoKSksdGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxncm91cDpfVH0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlk''@;'; put 'put ''IikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChfVCl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT10aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5V''@;'; put 'put ''ZChQaCx0aGlzLGZ1dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+VWQoUGgsdGhpcyxkdXQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+VWQo''@;'; put 'put ''UGgsdGhpcyxwdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiZm9jdXMiLCgpPT5VZChQaCx0aGlzLHZ1dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJibHVyIiwoKT0+VWQoUGgsdGhpcyxtdXQp''@;'; put 'put ''LmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKSwibW91c2Vkb3duIixkPT5VZChQaCx0aGlzLGh1dCkuY2FsbCh0aGlzLGQpKX1zZXRSYW5nZShsKXt0aGlzLnJhbmdlPWx9Y2xlYXJSYW5nZSgpe3RoaXMu''@;'; put 'put ''cmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1SbShsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVybiEhKGEmJnBvKGEsImh0Q29tbWVudENlbGwiKSYmUm0oYSxbdGhpcy5ob3Qucm9vdEVsZW1lbnRdKSl9dGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50''@;'; put 'put ''Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPUpvKEFsLHRoaXMpLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse1t5VF06ZH0pLHRoaXMuaG90''@;'; put 'put ''LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVudChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Quc2V0Q2VsbE1l''@;'; put 'put ''dGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLE9nKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50''@;'; put 'put ''c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx5VCl9''@;'; put 'put ''Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSx5VCl9c2hvdygpe3ZhciBsO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1''@;'; put 'put ''Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6YSxjb2w6ZH19PXRoaXMucmFuZ2U7aWYoYTwwfHxhPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGQ8MHx8ZD50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGg9dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gSm8oenAsdGhpcykuY2FuY2VsSGlkaW5nKCksSm8oQWwsdGhpcykuc2V0VmFsdWUobnVsbCE9PShsPWhbT2ddP2hbT2ddW3lUXTpudWxsKSYmdm9pZCAwIT09bD9sOiIiKSxKbyhB''@;'; put 'put ''bCx0aGlzKS5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXtKbyhBbCx0aGlzKS5oaWRlKCl9cmVmcmVzaEVk''@;'; put 'put ''aXRvcigpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZKbyhBbCx0aGlzKS5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhp''@;'; put 'put ''cy5ob3Qse3JvdzpoLGNvbDpmfT10aGlzLnJhbmdlLmZyb207bGV0IHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2NvbnN0IEQ9bnVsbD09PXY7Sm8oQWwsdGhpcykuc2V0UG9zaXRpb24oMCwwKSxudWxsPT09''@;'; put 'put ''diYmKHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpKSksbnVsbD09PU0mJihNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLC0xKSkpO2NvbnN0IFo9bnVsbD09''@;'; put 'put ''PXYscmU9bnVsbD09PU07dj12Pz8wLE09TT8/MDtjb25zdHtyb290V2luZG93OmNlLHZpZXc6e193dDpiZX19PXRoaXMuaG90LHt3dFRhYmxlOkVlfT1iZSxCZT1iZS5nZXRDZWxsKHtyb3c6dixjb2w6TX0sITApLHFlPXRoaXMuZ2V0Q29tbWVudE1ldGEoaCxmLCJzdHlsZSIpO3FlP0pvKEFs''@;'; put 'put ''LHRoaXMpLnNldFNpemUocWUud2lkdGgscWUuaGVpZ2h0KTpKbyhBbCx0aGlzKS5yZXNldFNpemUoKTtjb25zdCBydD1yZT8wOkVlLmdldENvbHVtbldpZHRoKE0pLHB0PUQmJiFaP3h1KEJlKTowLHtsZWZ0OmR0LHRvcDpKdCx3aWR0aDp2bixoZWlnaHQ6Q259PUJlLmdldEJvdW5kaW5nQ2xp''@;'; put 'put ''ZW50UmVjdCgpLHt3aWR0aDp0bixoZWlnaHQ6TW59PUpvKEFsLHRoaXMpLmdldFNpemUoKSx7aW5uZXJXaWR0aDpDcixpbm5lckhlaWdodDpHcn09dGhpcy5ob3Qucm9vdFdpbmRvdyxtcj10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEduPWYwKHRoaXMuaG90LnJvb3RE''@;'; put 'put ''b2N1bWVudCksYWk9RSQodGhpcy5ob3Qucm9vdFdpbmRvdyk/R246MCxfaT1UJCh0aGlzLmhvdC5yb290V2luZG93KT9HbjowO2xldCBPbj1kdCtjZS5zY3JvbGxYK3J0LHpyPUp0K2NlLnNjcm9sbFkrcHQ7dGhpcy5ob3QuaXNSdGwoKSYmKE9uLT10bitydCksdGhpcy5ob3QuaXNMdHIoKSYm''@;'; put 'put ''ZHQrdm4rdG4+Q3ItYWk/T249ZHQrY2Uuc2Nyb2xsWC10bi0xOnRoaXMuaG90LmlzUnRsKCkmJk9uPC0obXIuc2Nyb2xsV2lkdGgtbXIuY2xpZW50V2lkdGgpJiYoT249ZHQrY2Uuc2Nyb2xsWCtydCsxKSxKdCtNbj5Hci1faSYmKHpyLT1Nbi1DbisxKSxKbyhBbCx0aGlzKS5zZXRQb3NpdGlv''@;'; put 'put ''bihPbix6ciksSm8oQWwsdGhpcykuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKGgsZixnRikpLEpvKEFsLHRoaXMpLm9ic2VydmVTaXplKCl9Zm9jdXNFZGl0b3IoKXtKbyhBbCx0aGlzKS5mb2N1cygpfXVwZGF0ZUNvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMu''@;'; put 'put ''aG90LmdldENlbGxNZXRhKGwsYSlbT2ddO2xldCBmO2g/KGY9ZzEoaCkseEUoZixkKSk6Zj1kLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSxPZyxmKX1nZXRDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO2lmKGhbT2ddKXJldHVybiBoW09nXVtk''@;'; put 'put ''XX1hZGRUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rpb24gUWN0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzQWRkRWRpdCIsbmFtZSgpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9p''@;'; put 'put ''ZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBudWxsIT1hJiZhLmlzQ2VsbCgpJiZjLmdldENvbW1lbnRBdENlbGwoYS5yb3csYS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShmcSk6dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGhxKX0sY2FsbGJhY2soKXtjb25zdCBsPXRoaXMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZUxhc3QoKTtjLnNldFJhbmdlKGwpLGMuc2hvdygpLGMuZm9jdXNFZGl0b3IoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVS''@;'; put 'put ''b3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpLGZ1bmN0aW9uIGV1dChjKXtyZXR1cm57a2V5OiJjb21tZW50c1JlbW92''@;'; put 'put ''ZSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocHEpfSxjYWxsYmFjaygpe3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9PnthPj0wJiZkPj0wJiZjLnJlbW92ZUNvbW1lbnRBdENlbGwoYSxkLCExKX0pLHRoaXMucmVuZGVyKCl9LGRpc2Fi''@;'; put 'put ''bGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhp''@;'; put 'put ''cy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiBpdXQoYyl7cmV0dXJue2tleToiY29tbWVudHNSZWFkT25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGdxKTtyZXR1cm4gaEYodGhp''@;'; put 'put ''cy5nZXRTZWxlY3RlZFJhbmdlKCksKGQsaCk9PmMuZ2V0Q29tbWVudE1ldGEoZCxoLGdGKSk/ZGdlKGwpOmx9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZvckFsbCgoYSxkKT0+e2lmKGE+PTAmJmQ+PTApe2NvbnN0IGg9ISFjLmdldENvbW1lbnRNZXRhKGEsZCxn''@;'; put 'put ''Rik7Yy51cGRhdGVDb21tZW50TWV0YShhLGQse1tnRl06IWh9KX19KX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8IWMuZ2V0Q29tbWVudEF0Q2VsbChsLmhpZ2hsaWdodC5yb3csbC5o''@;'; put 'put ''aWdobGlnaHQuY29sKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpKX1n''@;'; put 'put ''ZXRFZGl0b3JJbnB1dEVsZW1lbnQoKXtyZXR1cm4gSm8oQWwsdGhpcykuZ2V0SW5wdXRFbGVtZW50KCl9ZGVzdHJveSgpe3ZhciBsLGE7bnVsbD09PShsPUpvKEFsLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksbnVsbD09PShhPUpvKHpwLHRoaXMpKXx8dm9pZCAwPT09YXx8YS5k''@;'; put 'put ''ZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkdXQoYyl7aWYodGhpcy5ob3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFKbyhtRix0aGlzKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykpe2NvbnN0IGw9Um0oYy50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQg''@;'; put 'put ''YT1udWxsO2wmJihhPXRoaXMuaG90LmdldENvb3JkcyhsKSksKCFsfHx0aGlzLnJhbmdlLmZyb20mJmEmJih0aGlzLnJhbmdlLmZyb20ucm93IT09YS5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1hLmNvbCkpJiZ0aGlzLmhpZGUoKX19ZnVuY3Rpb24gaHV0KGMpe2Muc3RvcFByb3BhZ2F0''@;'; put 'put ''aW9uKCl9ZnVuY3Rpb24gZnV0KGMpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDtpZighKEpvKG1GLHRoaXMpfHxKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKXx8cG8oYy50YXJnZXQsInd0Qm9yZGVyIil8fEpvKGtKLHRoaXMpPT09Yy50YXJnZXQpJiZKbyhBbCx0aGlzKSlpZihRbShr''@;'; put 'put ''Six0aGlzLGwuZWxlbWVudEZyb21Qb2ludChjLmNsaWVudFgsYy5jbGllbnRZKSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChjKSl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhjLnRhcmdldCkpO0pvKHpwLHRoaXMpLnNob3coYSl9''@;'; put 'put ''ZWxzZSBMbShjLnRhcmdldCxsKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykmJkpvKHpwLHRoaXMpLmhpZGUoKX1mdW5jdGlvbiBwdXQoKXtRbShtRix0aGlzLCExKX1mdW5jdGlvbiBndXQoYyxsKXtsW09nXSYmbFtPZ11beVRdJiZUaShjLGwuY29tbWVudGVkQ2VsbENsYXNz''@;'; put 'put ''TmFtZSl9ZnVuY3Rpb24gbXV0KCl7UW0oYkYsdGhpcywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSx0aGlzLnNldENvbW1lbnQoKX1mdW5jdGlvbiB2dXQoKXtRbShiRix0aGlzLHRoaXMuZ2V0Q29tbWVudCgpKSx0aGlzLmhv''@;'; put 'put ''dC5saXN0ZW4oKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShBSil9ZnVuY3Rpb24gYnV0KGMsbCl7dGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse3N0eWxlOnt3aWR0aDpjLGhl''@;'; put 'put ''aWdodDpsfX0pfWZ1bmN0aW9uIHBnZShjKXtKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSYmQjIoYyl9ZnVuY3Rpb24geXV0KCl7Sm8odkYsdGhpcyl8fHRoaXMuaGlkZSgpfWZ1bmN0aW9uIF91dCgpe2NvbnN0IGM9Sm8oQWwsdGhpcykuZ2V0RWRpdG9yRWxlbWVudCgpO2xvKGMsL2h0LXRoZW1l''@;'; put 'put ''LS4qL2cpLFRpKGMsdGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKX1mdW5jdGlvbiBESihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd3V0KGMpe3ZhciBsPWZ1bmN0aW9uIEN1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9Y2xhc3MgZ2dle2NvbnN0cnVjdG9yKGwpe0RKKHRoaXMsImhvdCIsdm9pZCAwKSxESih0aGlzLCJjb21tYW5kcyIse30pLERKKHRoaXMsImNvbW1vbkNhbGxiYWNrIixudWxsKSx0aGlzLmhvdD1sfXJlZ2lzdGVyQ29tbWFuZChsLGEpe3RoaXMuY29tbWFuZHNbbF09YX1zZXRDb21tb25D''@;'; put 'put ''YWxsYmFjayhsKXt0aGlzLmNvbW1vbkNhbGxiYWNrPWx9ZXhlY3V0ZShsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07Y29uc3QgZj1sLnNwbGl0KCI6Iiksdj1mWzBdLE09Mj09PWYubGVu''@;'; put 'put ''Z3RoP2ZbMV06bnVsbDtsZXQgRD10aGlzLmNvbW1hbmRzW3ZdO2lmKCFEKXRocm93IG5ldyBFcnJvcihgTWVudSBjb21tYW5kICcke3Z9JyBub3QgZXhpc3RzLmApO2lmKE0mJkQuc3VibWVudSYmKEQ9ZnVuY3Rpb24gU3V0KGMsbCl7bGV0IGE7cmV0dXJuIFluKGwsZD0+e2NvbnN0IGg9ZC5r''@;'; put 'put ''ZXk/ZC5rZXkuc3BsaXQoIjoiKTpudWxsO2lmKEFycmF5LmlzQXJyYXkoaCkmJmhbMV09PT1jKXJldHVybiBhPWQsITF9KSxhfShNLEQuc3VibWVudS5pdGVtcykpLCEwPT09RC5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9mIEQuZGlzYWJsZWQmJiEwPT09RC5kaXNhYmxlZC5jYWxsKHRo''@;'; put 'put ''aXMuaG90KXx8VHUoRCwic3VibWVudSIpKXJldHVybjtjb25zdCBaPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBELmNhbGxiYWNrJiZaLnB1c2goRC5jYWxsYmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJloucHVzaCh0aGlzLmNvbW1vbkNhbGxiYWNrKSxkLnVu''@;'; put 'put ''c2hpZnQoZi5qb2luKCI6IikpLFluKFoscmU9PnJlLmFwcGx5KHRoaXMuaG90LGQpKX19Y29uc3QgSzI9ImFsaWdubWVudCIseUY9ImNsZWFyX2NvbHVtbiIsd1Q9ImNvbF9sZWZ0IixDVD0iY29sX3JpZ2h0IixTVD0ibWFrZV9yZWFkX29ubHkiLF9GPSJyZWRvIixNVD0icmVtb3ZlX2NvbCIs''@;'; put 'put ''d0Y9InJlbW92ZV9yb3ciLENGPSJyb3dfYWJvdmUiLFNGPSJyb3dfYmVsb3ciLHhUPSJub19pdGVtcyIsTUY9InVuZG8iLG1nZT1bQ0YsU0Ysd1QsQ1QseUYsd0YsTVQsTUYsX0YsU1QsSzIsc3MseFRdLHZnZT17W3NzXTpmdW5jdGlvbiBKY3QoKXtyZXR1cm57bmFtZTpzc319LFt4VF06ZnVu''@;'; put 'put ''Y3Rpb24gT3V0KCl7cmV0dXJue2tleTp4VCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHSyl9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtDRl06ZnVuY3Rpb24gUnV0KCl7cmV0dXJue2tleTpDRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZSgkSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0Fib3ZlIil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93''@;'; put 'put ''cyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Um93cygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFtTRl06ZnVuY3Rpb24gTHV0KCl7cmV0dXJue2tleTpTRixuYW1lKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0Qm90dG9tUmlnaHRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dCZWxvdyIpfSxk''@;'; put 'put ''aXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49''@;'; put 'put ''dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFt3VF06ZnVuY3Rpb24gRXV0KCl7cmV0dXJue2tleTp3VCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShxSyl9LGNhbGxi''@;'; put 'put ''YWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2Fi''@;'; put 'put ''bGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMu''@;'; put 'put ''aGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Q29scygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygp''@;'; put 'put ''LmFsbG93SW5zZXJ0Q29sdW1ufX19LFtDVF06ZnVuY3Rpb24gVHV0KCl7cmV0dXJue2tleTpDVCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShYSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wUmlnaHRDb3JuZXIo''@;'; put 'put ''KSxsPXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9zdGFydCI6Imluc2VydF9jb2xfZW5kIjt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uUmlnaHQiKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25z''@;'; put 'put ''dCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbeUZdOmZ1bmN0aW9uIHh1dCgpe3JldHVybntrZXk6eUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobnEpfSxjYWxsYmFjayhjLGwpe2NvbnN0''@;'; put 'put ''IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgwLGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5zdGFydC5yb3csbFswXS5lbmQucm93KSxkLCJDb250ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgp''@;'; put 'put ''e2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHwhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpcmV0dXJuITA7bGV0IGw9ITE7cmV0dXJuIGMuZm9yQWxsKChhLGQp''@;'; put 'put ''PT57aWYoYTwwfHxkPDApcmV0dXJuITA7Y29uc3R7cmVhZE9ubHk6aH09dGhpcy5nZXRDZWxsTWV0YShhLGQpO3JldHVybiEhaHx8KGw9ITAsITEpfSksIWx9fX0sW3dGXTpmdW5jdGlvbiBJdXQoKXtyZXR1cm57a2V5OndGLG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQg''@;'; put 'put ''bD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFthLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKSyxsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfcm93IixmdW5jdGlvbiBZbnQoYyl7Y29uc3QgbD14Xyhj''@;'; put 'put ''LmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPWVUKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gWW4o''@;'; put 'put ''Yy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86RH09YSh2KSxaPU1hdGgubWF4KE0ucm93LDApO1luKEFycmF5LmZyb20obmV3IEFycmF5KEQucm93LVorMSksKGNlLGJlKT0+WitiZSksY2U9PntkLmhhcyhjZSl8fGQuYWRkKGNlKX0pfSkscXUoQXJyYXkuZnJvbShkKS5zb3J0''@;'; put 'put ''KCh2LE0pPT52LU0pLCh2LE0sRCxaKT0+KDAhPT1EJiZNPT09WltELTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksMSwiQ29udGV4dE1lbnUucmVtb3ZlUm93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDApcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5I''@;'; put 'put ''ZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW01UXTpmdW5jdGlvbiBEdXQoKXtyZXR1cm57a2V5Ok1ULG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSls''@;'; put 'put ''PTE7ZWxzZXtjb25zdFssYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUUssbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX2NvbCIsZnVuY3Rpb24gV250KGMpe2NvbnN0IGw9eF8oYy5nZXRTZWxlY3RlZCgpKTtpZigwPT09''@;'; put 'put ''bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT1lVChsLHtjcmVhdGVDZWxsQ29vcmRzOmMuX2NyZWF0ZUNlbGxDb29yZHMuYmluZChjKSxjcmVhdGVDZWxsUmFuZ2U6Yy5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQoYyl9KSxkPW5ldyBTZXQ7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWQoKSx2PT57Y29u''@;'; put 'put ''c3R7ZnJvbTpNLHRvOkR9PWEodiksWj1NYXRoLm1heChNLmNvbCwwKTtZbihBcnJheS5mcm9tKG5ldyBBcnJheShELmNvbC1aKzEpLChjZSxiZSk9PlorYmUpLGNlPT57ZC5oYXMoY2UpfHxkLmFkZChjZSl9KX0pLHF1KEFycmF5LmZyb20oZCkuc29ydCgodixNKT0+di1NKSwodixNLEQsWik9''@;'; put 'put ''PigwIT09RCYmTT09PVpbRC0xXSsxP3Zbdi5sZW5ndGgtMV1bMV0rPTE6di5wdXNoKFtNLDFdKSx2KSxbXSl9KHRoaXMpLG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2Nv''@;'; put 'put ''bnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtNRl06ZnVuY3Rpb24gUHV0KCl7cmV0dXJue2tleTpNRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRl''@;'; put 'put ''ZFBocmFzZShlcSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikudW5kbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVu''@;'; put 'put ''ZG9SZWRvIikuaXNVbmRvQXZhaWxhYmxlKCl9fX0sW19GXTpmdW5jdGlvbiBrdXQoKXtyZXR1cm57a2V5Ol9GLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHRxKX0sY2FsbGJhY2soKXt0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5yZWRvKCl9LGhpZGRlbigpe2Nv''@;'; put 'put ''bnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1JlZG9BdmFpbGFibGUoKX19fSxbU1RdOmZ1bmN0aW9uIEF1dCgpe3JldHVybntrZXk6U1QsY2hlY2th''@;'; put 'put ''YmxlOiEwLGFyaWFDaGVja2VkKCl7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChsLGEpPT50aGlzLmdldENlbGxNZXRhKGwsYSkucmVhZE9ubHkpfSxhcmlhTGFiZWwoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9QKX0sbmFtZSgpe2xldCBjPXRoaXMuZ2V0''@;'; put 'put ''VHJhbnNsYXRlZFBocmFzZShfUCk7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1kZ2UoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWhGKGMsKGEsZCk9''@;'; put 'put ''PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7WW4oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHkiLCFsKX0pfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUxhc3QoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZSgpLmxlbmd0aCl9fX0sW0syXTpmdW5jdGlvbiBNdXQoKXtyZXR1cm57a2V5OksyLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG1xKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7''@;'; put 'put ''Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIShjJiYhYy5pc1NpbmdsZUhlYWRlcigpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0sc3VibWVudTp7aXRlbXM6W3trZXk6YCR7SzJ9OmxlZnRg''@;'; put 'put ''LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHZxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRMZWZ0Ijt0aGlz''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9OmNlbnRlcmAs''@;'; put 'put ''bmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYnEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodENlbnRlciI7dGhp''@;'; put 'put ''cy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpyaWdodGAs''@;'; put 'put ''bmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeXEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodFJpZ2h0Ijt0aGlz''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9Omp1c3RpZnlg''@;'; put 'put ''LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9xKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRKdXN0aWZ5Ijt0''@;'; put 'put ''aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOnNzfSx7a2V5OmAk''@;'; put 'put ''e0syfTp0b3BgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0VG9w''@;'; put 'put ''Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9Om1p''@;'; put 'put ''ZGRsZWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRNaWRkbGUi''@;'; put 'put ''O3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06Ym90''@;'; put 'put ''dG9tYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTcSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodEJvdHRvbSI7''@;'; put 'put ''dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfV19fX19O2Z1bmN0aW9uIGJn''@;'; put 'put ''ZSgpe2NvbnN0IGM9e307cmV0dXJuIFhvKHZnZSwobCxhKT0+e2NbYV09bCgpfSksY31mdW5jdGlvbiBJSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRnV0KGMpe3ZhciBsPWZ1bmN0aW9uIEh1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9Y2xhc3MgeWdle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO0lKKHRoaXMsImhvdCIsdm9pZCAwKSxJSih0aGlzLCJwcmVkZWZpbmVkSXRlbXMiLGJnZSgpKSxJSih0aGlzLCJk''@;'; put 'put ''ZWZhdWx0T3JkZXJQYXR0ZXJuIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLFhvKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5hbWU9PT1z''@;'; put 'put ''cz8oYVtzc109ZCxmPXNzKTppc05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5rZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRlbXM9YX1n''@;'; put 'put ''ZXRJdGVtcygpe3JldHVybiBmdW5jdGlvbiBOdXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZD1b''@;'; put 'put ''XTtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXkuaXNBcnJheShoKXx8KGg9bCkscW8oaCk/WG8oaCwoZix2KT0+e2xldCBNPWFbInN0cmluZyI9PXR5cGVvZiBm''@;'; put 'put ''P2Y6dl07TXx8KE09ZikscW8oZik/RXUoTSxmKToic3RyaW5nIj09dHlwZW9mIE0mJihNPXtuYW1lOk19KSx2b2lkIDA9PT1NLmtleSYmKE0ua2V5PXYpLGQucHVzaChNKX0pOlluKGgsKGYsdik9PntsZXQgTT1hW2ZdOyFNJiZtZ2UuaW5kZXhPZihmKT49MHx8KE18fChNPXtuYW1lOmYsa2V5''@;'; put 'put ''OmAke3Z9YH0pLHFvKGYpJiZFdShNLGYpLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnByZWRlZmlu''@;'; put 'put ''ZWRJdGVtcyl9fWZ1bmN0aW9uIGU2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWdXQoYyl7dmFyIGw9ZnVuY3Rpb24gQnV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBqdXR7Y29uc3RydWN0b3IobCxhKXtlNih0''@;'; put 'put ''aGlzLCJ0b3AiLHZvaWQgMCksZTYodGhpcywidG9wUmVsYXRpdmUiLHZvaWQgMCksZTYodGhpcywibGVmdCIsdm9pZCAwKSxlNih0aGlzLCJsZWZ0UmVsYXRpdmUiLHZvaWQgMCksZTYodGhpcywic2Nyb2xsVG9wIix2b2lkIDApLGU2KHRoaXMsInNjcm9sbExlZnQiLHZvaWQgMCksZTYodGhp''@;'; put 'put ''cywiY2VsbEhlaWdodCIsdm9pZCAwKSxlNih0aGlzLCJjZWxsV2lkdGgiLHZvaWQgMCk7Y29uc3QgZD1hLnNjcm9sbFksaD1hLnNjcm9sbFg7bGV0IGYsdixNLEQsWixyZTt0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnR5cGU9dGhpcy5nZXRTb3VyY2VUeXBlKGwpLCJsaXRlcmFsIj09PXRoaXMu''@;'; put 'put ''dHlwZT8oZj1wYXJzZUludChsLnRvcCwxMCksTT1wYXJzZUludChsLmxlZnQsMTApLFo9bC5oZWlnaHR8fDAscmU9bC53aWR0aHx8MCx2PWYsRD1NLGYrPWQsTSs9aCk6ImV2ZW50Ij09PXRoaXMudHlwZSYmKGY9cGFyc2VJbnQobC5wYWdlWSwxMCksTT1wYXJzZUludChsLnBhZ2VYLDEwKSxa''@;'; put 'put ''PWwudGFyZ2V0LmNsaWVudEhlaWdodCxyZT1sLnRhcmdldC5jbGllbnRXaWR0aCx2PWYtZCxEPU0taCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPXYsdGhpcy5sZWZ0PU0sdGhpcy5sZWZ0UmVsYXRpdmU9RCx0aGlzLnNjcm9sbFRvcD1kLHRoaXMuc2Nyb2xsTGVmdD1oLHRoaXMuY2Vs''@;'; put 'put ''bEhlaWdodD1aLHRoaXMuY2VsbFdpZHRoPXJlfWdldFNvdXJjZVR5cGUobCl7bGV0IGE9ImxpdGVyYWwiO3JldHVybiBsIGluc3RhbmNlb2YgRXZlbnQmJihhPSJldmVudCIpLGF9Zml0c0Fib3ZlKGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlPj1sLm9mZnNldEhlaWdodH1maXRzQmVsb3co''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmUrbC5vZmZzZXRIZWlnaHQ8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVySGVpZ2h0KX1maXRzT25SaWdodChsKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRp''@;'; put 'put ''dmUrdGhpcy5jZWxsV2lkdGgrbC5vZmZzZXRXaWR0aDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJXaWR0aCl9Zml0c09uTGVmdChsKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmU+PWwub2Zmc2V0''@;'; put 'put ''V2lkdGh9fWZ1bmN0aW9uIEVUKGMsbCxhKXsoZnVuY3Rpb24genV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5j''@;'; put 'put ''dGlvbiBVbyhjLGwpe3JldHVybiBjLmdldChfZ2UoYyxsKSl9ZnVuY3Rpb24geEYoYyxsLGEpe3JldHVybiBjLnNldChfZ2UoYyxsKSxhKSxhfWZ1bmN0aW9uIF9nZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFgxPW5ldyBXZWFrTWFwLFpkPW5ldyBXZWFrTWFwLFdkPW5ldyBXZWFrTWFwLFJKPW5ldyBXZWFrTWFwLEtfPW5ldyBXZWFrTWFwO2NsYXNzIFV1dHtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtFVCh0aGlzLFgxLHZvaWQgMCksRVQodGhpcyxaZCx2b2lkIDApLEVUKHRoaXMsV2Qsdm9pZCAwKSxFVCh0aGlzLFJKLCExKSxFVCh0aGlzLEtfLHthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9KSx4RihSSix0aGlzLGwpfXNldE9mZnNldChsKXtsZXQgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4gVW8oS18sdGhpcylbbF09YSx0aGlzfXNldEVsZW1lbnQobCl7cmV0dXJuIHhGKFgxLHRoaXMsbCksdGhpc31zZXRQYXJlbnRFbGVtZW50KGwpe3JldHVybiB4RihaZCx0aGlzLGwp''@;'; put 'put ''LHRoaXN9dXBkYXRlUG9zaXRpb24obCl7eEYoV2QsdGhpcyxuZXcganV0KGwsVW8oWDEsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpLFVvKFJKLHRoaXMpPyhVbyhXZCx0aGlzKS5maXRzQmVsb3coVW8oWDEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpOlVv''@;'; put 'put ''KFdkLHRoaXMpLmZpdHNBYm92ZShVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy51cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpLHRoaXMuc2V0''@;'; put 'put ''UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKSl9dXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCl7InJ0bCI9PT1VbyhYMSx0aGlzKS5kaXI/VW8oV2QsdGhpcykuZml0c09uTGVmdChVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbk9u''@;'; put 'put ''UmlnaHRPZkN1cnNvcigpOlVvKFdkLHRoaXMpLmZpdHNPblJpZ2h0KFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmFi''@;'; put 'put ''b3ZlK1VvKFdkLHRoaXMpLnRvcC1VbyhYMSx0aGlzKS5vZmZzZXRIZWlnaHQ7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGQ9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSks''@;'; put 'put ''aD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1VbyhXZCx0aGlzKS50b3ArVW8oV2QsdGhpcykuY2VsbEhlaWdodC1VbyhYMSx0aGlzKS5zY3JvbGxIZWlnaHQraCtmfVVvKFgxLHRoaXMpLnN0eWxlLnRvcD1gJHts''@;'; put 'put ''fXB4YH1zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykuYmVsb3crVW8oV2QsdGhpcykudG9wKzE7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGQ9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1VbyhXZCx0aGlzKS50b3AtaC1mLTF9VW8oWDEsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uT25S''@;'; put 'put ''aWdodE9mQ3Vyc29yKCl7bGV0IGw9VW8oV2QsdGhpcykubGVmdDtpZihVbyhaZCx0aGlzKSl7Y29uc3QgYT1VbyhaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LGQ9TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIu''@;'; put 'put ''aHRDb3JlIikpLmJvcmRlclJpZ2h0V2lkdGgsMTApO2wrPVVvKFdkLHRoaXMpLmNlbGxXaWR0aCtkfWVsc2UgbCs9VW8oS18sdGhpcykucmlnaHQ7VW8oWDEsdGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykubGVm''@;'; put 'put ''dCtVbyhXZCx0aGlzKS5sZWZ0LVVvKFgxLHRoaXMpLm9mZnNldFdpZHRoO2lmKFVvKFpkLHRoaXMpKXtjb25zdCBhPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bC09TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKCIuaHRDb3JlIikpLmJvcmRlckxlZnRXaWR0aCwxMCl9VW8oWDEsdGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH19ZnVuY3Rpb24gd2dlKGMpe2xldHtpbml0aWFsUGFnZTpsPS0xLHNpemU6YT0oKCk9PjApLG9uSXRlbVNlbGVjdDpkPSgoKT0+e30pLG9uQ2xlYXI6aD0oKCk9Pnt9KX09''@;'; put 'put ''Yztjb25zdCBmPW5ldyBTZXQ7bGV0IHY9a3MobCwtMSxCZSgpLTEpO2Z1bmN0aW9uIE0ocnQscHQpe2NvbnN0IGR0PUJlKCktMTtyZXR1cm4gcnQ8MCYmKHJ0PWR0KSxydD5kdCYmKHJ0PTApLGYuaGFzKHJ0KT8tMTooZi5hZGQocnQpLCExPT09ZChydCwhMSkmJihydD1NKDE9PT1wdD8rK3J0''@;'; put 'put ''Oi0tcnQscHQpKSxydCl9ZnVuY3Rpb24gQmUoKXtyZXR1cm4gTWF0aC5tYXgoYSgpLDApfXJldHVybntzZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBEKHJ0KXtydD4tMSYmcnQ8QmUoKSYmITEhPT1kKHJ0LCEwKSYmKHY9cnQpfSxnZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBaKCl7cmV0dXJuIHZ9''@;'; put 'put ''LHRvRmlyc3RJdGVtOmZ1bmN0aW9uIHJlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TSgwLDEpKX0sdG9MYXN0SXRlbTpmdW5jdGlvbiBjZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oQmUoKS0xLC0xKSl9LHRvTmV4dEl0ZW06ZnVuY3Rpb24gYmUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1N''@;'; put 'put ''KCsrdiwxKSl9LHRvUHJldmlvdXNJdGVtOmZ1bmN0aW9uIEVlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TSgtLXYsLTEpKX0sZ2V0U2l6ZTpCZSxjbGVhcjpmdW5jdGlvbiBxZSgpe2YuY2xlYXIoKSx2PWwsaCgpfX19ZnVuY3Rpb24gTEooYyl7cmV0dXJuIFR1KGMsInN1Ym1lbnUiKX1mdW5j''@;'; put 'put ''dGlvbiBPSihjKXtyZXR1cm4gbmV3IFJlZ0V4cChzcywiaSIpLnRlc3QoYy5uYW1lKX1mdW5jdGlvbiBFRihjLGwpe3JldHVybiEwPT09Yy5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMuZGlzYWJsZWQmJiEwPT09Yy5kaXNhYmxlZC5jYWxsKGwpfWZ1bmN0aW9uIENnZShjKXtyZXR1''@;'; put 'put ''cm4gVHUoYywiZGlzYWJsZVNlbGVjdGlvbiIpfWZ1bmN0aW9uIFNnZShjLGwpe2NvbnN0IGE9Yy5zbGljZSgwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZhW2RdLm5hbWU9PT1sOylhLnNoaWZ0KCk7cmV0dXJuIGF9ZnVuY3Rpb24gUXV0KGMpe3JldHVybiEwPT09Yy5jaGVja2FibGV9ZnVu''@;'; put 'put ''Y3Rpb24gcjB0KGMpe3JldHVybihsLGEsZCxoLGYsdik9Pntjb25zdCBNPWwuZ2V0U291cmNlRGF0YUF0Um93KGQpLEQ9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj0iZnVuY3Rpb24iPT10eXBlb2Ygdj92LmNhbGwoYyk6dixyZT0iZnVuY3Rpb24iPT10eXBlb2YgTS5h''@;'; put 'put ''cmlhTGFiZWw/TS5hcmlhTGFiZWwuY2FsbChjKTpNLmFyaWFMYWJlbCxjZT0iZnVuY3Rpb24iPT10eXBlb2YgTS5hcmlhQ2hlY2tlZD9NLmFyaWFDaGVja2VkLmNhbGwoYyk6TS5hcmlhQ2hlY2tlZDtpZih4cChhKSxUaShELCJodEl0ZW1XcmFwcGVyIiksYy5nZXRTZXR0aW5ncygpLmFyaWFU''@;'; put 'put ''YWdzKXtjb25zdCBiZT0hRUYoTSxjKSYmIUNnZShNKSYmIU9KKE0pO3ZvKGEsWy4uLlF1dChNKT9bWyJyb2xlIiwibWVudWl0ZW1jaGVja2JveCJdLG1FKHJlKSxJMmUoY2UpXTpbWyJyb2xlIiwibWVudWl0ZW0iXSxtRShaKV0sLi4uYmU/W043KC0xKV06W10sLi4uRUYoTSxjKT9bWyJhcmlh''@;'; put 'put ''LWRpc2FibGVkIiwidHJ1ZSJdXTpbXSwuLi5MSihNKT9bTjIoITEpXTpbXV0pfWEuY2xhc3NOYW1lPSIiLGEuYXBwZW5kQ2hpbGQoRCksT0ooTSk/VGkoYSwiaHRTZXBhcmF0b3IiKToiZnVuY3Rpb24iPT10eXBlb2YgTS5yZW5kZXJlcj8oVGkoYSwiaHRDdXN0b21NZW51UmVuZGVyZXIiKSxh''@;'; put 'put ''LmFwcGVuZENoaWxkKE0ucmVuZGVyZXIobCxELGQsaCxmLFopKSk6ejcoRCxaKSxFRihNLGMpP1RpKGEsImh0RGlzYWJsZWQiKTpDZ2UoTSk/VGkoYSwiaHRTZWxlY3Rpb25EaXNhYmxlZCIpOkxKKE0pJiZUaShhLCJodFN1Ym1lbnUiKX19ZnVuY3Rpb24gUEooYyxsLGEpeyhmdW5jdGlvbiBp''@;'; put 'put ''MHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBhMHQo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24gbzB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBGSihjLGwsYSl7cmV0dXJuIGMuc2V0KEVnZShjLGwpLGEpLGF9ZnVuY3Rpb24gXzkoYyxsKXtyZXR1cm4gYy5nZXQoRWdlKGMs''@;'; put 'put ''bCkpfWZ1bmN0aW9uIEVnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFy''@;'; put 'put ''IFRUPW5ldyBXZWFrTWFwLFRGPW5ldyBXZWFrTWFwLEFGPW5ldyBXZWFrTWFwO2NsYXNzIHFfe2dldCB0YWJsZUJvcmRlcldpZHRoKCl7cmV0dXJuIHZvaWQgMD09PV85KEFGLHRoaXMpJiZ0aGlzLmhvdE1lbnUmJkZKKEFGLHRoaXMscGFyc2VJbnQodGhpcy5ob3RNZW51LnJvb3RXaW5kb3cu''@;'; put 'put ''Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdE1lbnUudmlldy5fd3Qud3RUYWJsZS5UQUJMRSkuYm9yZGVyV2lkdGgsMTApKSxfOShBRix0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7VXAodGhpcywiaG90Iix2b2lkIDApLFVwKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksVXAodGhp''@;'; put 'put ''cywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLFVwKHRoaXMsImNvbnRhaW5lciIsdm9pZCAwKSxVcCh0aGlzLCJwb3NpdGlvbmVyIix2b2lkIDApLFVwKHRoaXMsImhvdE1lbnUiLG51bGwpLFVwKHRoaXMsImhvdFN1Yk1lbnVzIix7fSksVXAodGhpcywicGFyZW50TWVudSIsdm9pZCAw''@;'; put 'put ''KSxVcCh0aGlzLCJtZW51SXRlbXMiLG51bGwpLFVwKHRoaXMsIm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLG51bGwpLFBKKHRoaXMsVFQsdm9pZCAwKSxQSih0aGlzLFRGLHZvaWQgMCksUEoodGhpcyxBRix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5vcHRpb25zPWF8fHtwYXJlbnQ6bnVs''@;'; put 'put ''bCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5kYWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlv''@;'; put 'put ''bnMubmFtZSksdGhpcy5wb3NpdGlvbmVyPW5ldyBVdXQodGhpcy5vcHRpb25zLmtlZXBJblZpZXdwb3J0KSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVudHx8bnVsbCx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFm''@;'; put 'put ''dGVyU2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLC4uLmYp''@;'; put 'put ''fSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGgsZik9Pnt2YXIgdjtmfHxudWxsPT09KHY9dGhpcy5ob3RNZW51KXx8dm9pZCAwPT09dnx8di51c2VUaGVtZShoKX0pfXJlZ2lzdGVyRXZlbnRzKCl7bGV0IGw9dGhpcy5ob3Qucm9vdFdpbmRvdztmb3IoO2w7KXRoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwibW91c2Vkb3duIixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwidG91Y2hzdGFydCIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VE''@;'; put 'put ''b3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1CNyhsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXROYXZpZ2F0b3IoKXtyZXR1cm4g''@;'; put 'put ''XzkoVFQsdGhpcyl9Z2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCl7cmV0dXJuIF85KFRGLHRoaXMpfWdldFNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLmhhc1NlbGVjdGVkSXRlbSgpP3RoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3codGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFz''@;'; put 'put ''dCgpWzBdKTpudWxsfWhhc1NlbGVjdGVkSXRlbSgpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKSl9aXNTdWJNZW51KCl7cmV0dXJuIG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Blbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlT3BlbiIp''@;'; put 'put ''LHRoaXMuY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgbD1NRShNPT50aGlzLm9wZW5TdWJNZW51KE0pLDMwMCksYT10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNTtsZXQgZD0hMSxoPUltKHRoaXMu''@;'; put 'put ''bWVudUl0ZW1zLE09PihNLmtleT09PXhUJiYoZD0hMCksZnVuY3Rpb24gS3V0KGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5oaWRkZW4uY2FsbChsKSl9KE0sdGhpcy5ob3QpKSk7aWYoaC5sZW5ndGg8MSYmIWQpaC5wdXNoKGJnZSgpW3hU''@;'; put 'put ''XSk7ZWxzZSBpZigwPT09aC5sZW5ndGgpcmV0dXJuO2g9ZnVuY3Rpb24gSnV0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzcyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9U2dlKGEsbCksYT1mdW5jdGlvbiBxdXQoYyxsKXts''@;'; put 'put ''ZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPVNnZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBYdXQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1c2go''@;'; put 'put ''YSl9KSxsfShhKSxhfShoLHNzKTtsZXQgZj0hMTtjb25zdCB2PXtkYXRhOmgsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpNPT5QYShNKSYmTTxhP2E6TSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxlZGl0b3I6ITEsY29w''@;'; put 'put ''eVBhc3RlOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjpyMHQodGhpcy5ob3QpfV0scmVuZGVyQWxsUm93czohMCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlv''@;'; put 'put ''bjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxiZWZvcmVSZWZyZXNoRGltZW5zaW9uczooKT0+ITEsYmVmb3JlT25DZWxsTW91c2VPdmVyOihNLEQp''@;'; put 'put ''PT57XzkoVFQsdGhpcykuc2V0Q3VycmVudFBhZ2UoRC5yb3cpfSxhZnRlck9uQ2VsbE1vdXNlT3ZlcjooTSxEKT0+e3RoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpP2woRC5yb3cpOnRoaXMub3BlblN1Yk1lbnUoRC5yb3cpfSxhZnRlck9uQ2VsbENvbnRleHRNZW51Ok09PntNLnByZXZlbnRE''@;'; put 'put ''ZWZhdWx0KCksRiQoKSYmZiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGFmdGVyU2VsZWN0aW9uOihNLEQsWixyZSxjZSk9Pnt0aGlzLmhvdE1lbnUudmlldy5pc01vdXNlRG93bigpJiYoY2UudmFsdWU9ITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxl''@;'; put 'put ''Y3Rpb25DaGFuZ2UiLHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpfSxiZWZvcmVPbkNlbGxNb3VzZVVwOk09Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoZj0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoTSkpfSxhZnRl''@;'; put 'put ''ck9uQ2VsbE1vdXNlVXA6TT0+eyghRiQoKXx8IUhtKE0pKSYmZiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKEFwKCl8fFAkKCk/dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhp''@;'; put 'put ''cy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVuKCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRz''@;'; put 'put ''aWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmNvbnRhaW5lcix2KSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuaW5pdCgpLEZKKFRULHRoaXMs''@;'; put 'put ''ZnVuY3Rpb24gZTB0KGMpe3JldHVybiB3Z2Uoe3NpemU6KCk9PmMuY291bnRSb3dzKCksb25JdGVtU2VsZWN0KGwsYSl7Y29uc3QgZD1jLmdldENlbGwobCwwKTtpZighZHx8ZnVuY3Rpb24gV3V0KGMpe3JldHVybiBwbyhjLCJodFNlcGFyYXRvciIpfShkKXx8ZnVuY3Rpb24gR3V0KGMpe3Jl''@;'; put 'put ''dHVybiBwbyhjLCJodERpc2FibGVkIil9KGQpfHxmdW5jdGlvbiAkdXQoYyl7cmV0dXJuIHBvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX0oZCkpcmV0dXJuITE7Yy5zZWxlY3RDZWxsKGwsMCwuLi5hP1tsLDAsITEsITFdOltdKX0sb25DbGVhcigpe2MuZGVzZWxlY3RDZWxsKCl9fSl9KHRo''@;'; put 'put ''aXMuaG90TWVudSkpLEZKKFRGLHRoaXMsZnVuY3Rpb24gbjB0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPVtdO2Z1bmN0aW9uIGQoWixyZSl7TShyZSkuYWRkU2hvcnRjdXRzKFose2dyb3VwOiJtZW51''@;'; put 'put ''In0pfWZ1bmN0aW9uIGgoWixyZSl7Y29uc3QgY2U9TShyZSk7Wi5mb3JFYWNoKGJlPT57bGV0e2tleXM6RWV9PWJlO0VlLmZvckVhY2goQmU9PmNlLnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhCZSkpfSksYS5wdXNoKHtzaG9ydGN1dHM6Wixjb250ZXh0TmFtZTpyZX0pLGQoWixyZSl9ZnVuY3Rp''@;'; put 'put ''b24gdihaKXtyZXR1cm4gWj9gbWVudToke1p9YDoibWVudSJ9ZnVuY3Rpb24gTShaKXt2YXIgcmU7Y29uc3QgY2U9Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLGJlPXYoWik7cmV0dXJuIG51bGwhPT0ocmU9Y2UuZ2V0Q29udGV4dChiZSkpJiZ2b2lkIDAhPT1yZT9yZTpjZS5hZGRD''@;'; put 'put ''b250ZXh0KGJlKX1yZXR1cm4gZChmdW5jdGlvbiB0MHQoYyl7Y29uc3R7aG90OmwsaG90TWVudTphfT1jO3JldHVyblt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGZvcndhcmRUb0NvbnRleHQ6bC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6''@;'; put 'put ''KCk9PmMuY2xvc2UoITApfSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOihkLGgpPT57Y29uc3QgZj1sLmdldFNldHRpbmdzKCksdj0iZnVuY3Rpb24iPT10eXBlb2YgZi50YWJNb3Zlcz9mLnRhYk1vdmVzKGQpOmYudGFiTW92ZXM7aC5pbmNsdWRlcygic2hpZnQi''@;'; put 'put ''KT9sLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtdi5yb3csLXYuY29sKTpsLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh2LnJvdyx2LmNvbCksYy5jbG9zZSghMCl9fSx7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PmMuY2xvc2UoKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNh''@;'; put 'put ''bGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTmV4dEl0ZW0oKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b1ByZXZpb3VzSXRlbSgpfSx7a2V5czpbW2wuaXNSdGwoKT8iQXJyb3dMZWZ0IjoiQXJyb3dSaWdodCJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+e2NvbnN0IGQ9YS5nZXRTZWxlY3RlZExhc3QoKTtpZihkKXtjb25zdCBoPWMub3BlblN1Yk1lbnUoZFswXSk7aCYmaC5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX19LHtrZXlzOltbbC5pc1J0bCgpPyJBcnJvd1JpZ2h0IjoiQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57YS5n''@;'; put 'put ''ZXRTZWxlY3RlZExhc3QoKSYmYy5pc1N1Yk1lbnUoKSYmKGMuY2xvc2UoKSxjLmlzU3ViTWVudSgpJiZjLnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd1VwIl0sWyJIb21lIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigp''@;'; put 'put ''LnRvRmlyc3RJdGVtKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkFycm93RG93biJdLFsiRW5kIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0oKX0se2tleXM6W1siRW50ZXIiXSxbIlNwYWNlIl1dLGNhbGxiYWNrOmQ9Pntjb25zdCBoPWEuZ2V0U2VsZWN0''@;'; put 'put ''ZWRMYXN0KCk7aCYmKGEuZ2V0U291cmNlRGF0YUF0Um93KGhbMF0pLnN1Ym1lbnU/Yy5vcGVuU3ViTWVudShoWzBdKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpOihjLmV4ZWN1dGVDb21tYW5kKGQpLGMuY2xvc2UoITApKSl9fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9''@;'; put 'put ''PnthLmdldFNlbGVjdGVkTGFzdCgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1hLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCk/YS5z''@;'; put 'put ''ZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5jb3VudFZpc2libGVSb3dzKCksMCk6Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9fV19KGMpKSxsLmZvckVhY2goWj0+e2xldHtzaG9ydGN1dHM6cmUsY29udGV4dE5hbWU6Y2V9PVo7aChyZSxjZSl9KSx7YWRkQ3VzdG9tU2hvcnRjdXRz''@;'; put 'put ''OmgsZ2V0Q3VzdG9tU2hvcnRjdXRzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4uYV19LGdldENvbnRleHQ6TSxsaXN0ZW46ZnVuY3Rpb24gRChaKXtjLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUodihaKSl9fX0odGhpcykpLF85KFRGLHRoaXMpLmxp''@;'; put 'put ''c3RlbigpLHRoaXMuZm9jdXMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImFmdGVyU3VibWVudU9wZW4iLHRoaXMpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIsdGhpcyl9''@;'; put 'put ''Y2xvc2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuaXNPcGVuZWQoKSlpZihsJiZ0aGlzLmlzU3ViTWVudSgpKXRoaXMucGFyZW50TWVudS5jbG9zZSgpO2Vsc2UgaWYoXzkoVFQsdGhpcykuY2xlYXIoKSx0''@;'; put 'put ''aGlzLmNsb3NlQWxsU3ViTWVudXMoKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmhvdE1lbnUuZGVzdHJveSgpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMub3JpZ091dHNpZGVDbGlj''@;'; put 'put ''a0Rlc2VsZWN0cyx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSx0aGlzLmlzU3ViTWVudSgpKXtpZih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCBhPXRoaXMucGFyZW50TWVudS5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO2EmJnZvKHRoaXMucGFyZW50''@;'; put 'put ''TWVudS5ob3RNZW51LmdldENlbGwoYVswXSwwKSxbTjIoITEpXSl9dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCl9fW9wZW5TdWJNZW51KGwpe2lmKCF0aGlzLmhvdE1lbnUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO2lmKHRoaXMuY2xvc2VBbGxT''@;'; put 'put ''dWJNZW51cygpLCFhfHwhZnVuY3Rpb24gWXV0KGMpe3JldHVybiBwbyhjLCJodFN1Ym1lbnUiKX0oYSkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGg9bmV3IHFfKHRoaXMuaG90LHtwYXJlbnQ6dGhpcyxuYW1lOmQubmFtZSxjbGFzc05hbWU6''@;'; put 'put ''dGhpcy5vcHRpb25zLmNsYXNzTmFtZSxrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLmNvbnRhaW5lcn0pO3JldHVybiBoLnNldE1lbnVJdGVtcyhkLnN1Ym1lbnUuaXRlbXMpLGgub3BlbigpLGguc2V0UG9zaXRpb24oYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSks''@;'; put 'put ''dGhpcy5ob3RTdWJNZW51c1tkLmtleV09aCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhhLFtOMighMCldKSxofWNsb3NlU3ViTWVudShsKXtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3cobCksZD10aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XTtpZihk''@;'; put 'put ''KXtkLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1thLmtleV07Y29uc3QgaD10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO3RoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKGgsW04yKCExKV0pfX1jbG9zZUFsbFN1Yk1lbnVzKCl7WW4odGhpcy5ob3RNZW51Lmdl''@;'; put 'put ''dERhdGEoKSwobCxhKT0+dGhpcy5jbG9zZVN1Yk1lbnUoYSkpfWlzQWxsU3ViTWVudXNDbG9zZWQoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxlbmd0aH1mb2N1cygpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMuaG90TWVudS5yb290RWxlbWVudC5mb2N1cyh7''@;'; put 'put ''cHJldmVudFNjcm9sbDohMH0pLHRoaXMuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKCksdGhpcy5ob3RNZW51Lmxpc3RlbigpKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlO3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jbG9zZSgpLHRo''@;'; put 'put ''aXMucGFyZW50TWVudT1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX1pc09wZW5lZCgpe3JldHVybiBudWxsIT09dGhpcy5ob3RNZW51fWV4ZWN1dGVDb21tYW5kKGwpe2lmKCF0aGlzLmlzT3BlbmVkKCl8fCF0aGlzLmhh''@;'; put 'put ''c1NlbGVjdGVkSXRlbSgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLGEsbCksdGhpcy5pc0NvbW1hbmRQYXNzaXZlKGEpKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxoPWQ/ZnVu''@;'; put 'put ''Y3Rpb24gWnV0KGMpe3JldHVybiB5cyhjLGw9Pih7c3RhcnQ6bC5nZXRUb3BTdGFydENvcm5lcigpLGVuZDpsLmdldEJvdHRvbUVuZENvcm5lcigpfSkpfShkKTpbXTt0aGlzLnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMu''@;'; put 'put ''cGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKX1pc0NvbW1hbmRQYXNzaXZlKGwpe3JldHVybiExPT09bC5pc0NvbW1hbmR8fE9KKGwpfHxFRihsLHRoaXMuaG90KXx8TEoobCl9c2V0T2Zmc2V0KGwpe3RoaXMucG9zaXRpb25lci5zZXRPZmZzZXQo''@;'; put 'put ''bCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCl9c2V0UG9zaXRpb24obCl7dGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wb3NpdGlvbmVyLnNldFBhcmVudEVsZW1lbnQodGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lciksdGhpcy5wb3NpdGlv''@;'; put 'put ''bmVyLnNldEVsZW1lbnQodGhpcy5jb250YWluZXIpLnVwZGF0ZVBvc2l0aW9uKGwpfXVwZGF0ZU1lbnVEaW1lbnNpb25zKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkse3d0VGFibGU6YX09dGhpcy5ob3RNZW51LnZpZXcuX3d0LGQ9dGhpcy5ob3RNZW51''@;'; put 'put ''LmdldFNldHRpbmdzKCkuZGF0YSxoPWEuaGlkZXIuc3R5bGUsZj1hLmhvbGRlci5zdHlsZSx2PXBhcnNlSW50KGgud2lkdGgsMTApLE09cXUoZCwoRCxaLHJlKT0+e2NvbnN0IGJlPXRoaXMuaG90TWVudS5nZXRDZWxsKHJlLDApP3h1KHRoaXMuaG90TWVudS5nZXRDZWxsKHJlLDApKTowO3Jl''@;'; put 'put ''dHVybiBEKyhaLm5hbWU9PT1zcz8xOmJlKX0sMCk7bC5pc0NsYXNzaWNUaGVtZSgpPyhmLndpZHRoPWAke3YrM31weGAsZi5oZWlnaHQ9YCR7TSszfXB4YCk6KGYud2lkdGg9YCR7dn1weGAsZi5oZWlnaHQ9YCR7TX1weGApLGguaGVpZ2h0PWYuaGVpZ2h0fWNyZWF0ZUNvbnRhaW5lcigpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50O2xldCBoLGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGQmJihtbChkKSYmKGQ9ZC5jYWxsKHRoaXMuaG90KSxkPW51bGw9PT1kfHxfYyhk''@;'; put 'put ''KT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpLGQ9YCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtkfWAsaD1hLnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9LiR7ZH1gKSksaHx8KGg9YS5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJkaXYiKSxUaShoLGBodE1lbnUgaGFuZHNvbnRhYmxlICR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1gKSxkJiZUaShoLGQpLHRoaXMub3B0aW9ucy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaCkpLGh9b25BZnRlckluaXQoKXt0aGlzLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCksdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5ob3RNZW51LnJvb3RFbGVtZW50LFtbInJvbGUiLCJtZW51Il0sTjcoLTEpXSl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSYmdGhpcy5ob3RNZW51JiYhTG0obC50''@;'; put 'put ''YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIUxtKGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3VtZW50Q29udGV4dE1lbnUobCl7dGhpcy5pc09wZW5lZCgpJiZw''@;'; put 'put ''byhsLnRhcmdldCwiaHRDb3JlIikmJkxtKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gSEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGMwdChjKXt2YXIgbD1mdW5jdGlvbiB1MHQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGtGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChxXyx5MSk7Y29uc3QgQVQ9ImNvbnRleHRNZW51IixBZ2U9QVQ7U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZv''@;'; put 'put ''cmVDb250ZXh0TWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVu''@;'; put 'put ''dUV4ZWN1dGUiKTt2YXIga1Q9bmV3IFdlYWtTZXQ7Y2xhc3MgREYgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gczB0KGMsbCl7KGZ1bmN0aW9uIGwwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0''@;'; put 'put ''aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGtUKSxISih0aGlzLCJjb21tYW5kRXhlY3V0b3IiLG5ldyBnZ2UodGhpcy5ob3QpKSxISih0aGlzLCJpdGVtc0ZhY3RvcnkiLG51bGwpLEhKKHRoaXMsIm1l''@;'; put 'put ''bnUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBBVH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA3MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMo''@;'; put 'put ''KXtyZXR1cm5bQ0YsU0Ysc3Msd1QsQ1Qsc3Msd0YsTVQsc3MsTUYsX0Ysc3MsU1Qsc3MsSzJdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVtBVF07ImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGEuY2FsbGJhY2spLHRoaXMubWVudT1uZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHRDb250ZXh0TWVudSIsa2VlcEluVmll''@;'; put 'put ''d3BvcnQ6ITAsY29udGFpbmVyOmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PmtGKGtULHRoaXMsZjB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4i''@;'; put 'put ''LCgpPT5rRihrVCx0aGlzLHAwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PmtGKGtULHRoaXMsZzB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGQ9PmtGKGtULHRoaXMsaDB0KS5jYWxsKHRoaXMs''@;'; put 'put ''ZCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51''@;'; put 'put ''JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0''@;'; put 'put ''Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiQmFja3NsYXNoIl0sWyJTaGlmdCIsIkYxMCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3RoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKTtjb25z''@;'; put 'put ''dCBhPXRoaXMuaG90LmdldENlbGwobC5yb3csbC5jb2wsITApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpO3RoaXMub3Blbih7bGVmdDphLmxlZnQrZC5sZWZ0LHRvcDphLnRvcCtkLnRvcC0xK2EuaGVpZ2h0''@;'; put 'put ''fSx7bGVmdDphLndpZHRoLGFib3ZlOi1hLmhlaWdodH0pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6''@;'; put 'put ''bC5oaWdobGlnaHQ7cmV0dXJuIGEmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOkFnZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiku''@;'; put 'put ''cmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBZ2UpfW9wZW4obCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O2lmKG51bGwhPT0oYT10aGlzLm1lbnUpJiZ2b2lk''@;'; put 'put ''IDAhPT1hJiZhLmlzT3BlbmVkKCkpcmV0dXJuO3RoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVuKCk7Y29uc3QgaD10aGlzLm1lbnUudGFibGVCb3JkZXJXaWR0aD4wO1hvKGQsKGYsdik9Pntjb25zdCBNPVsiYmVsb3ciLCJyaWdodCJdLmluY2x1ZGVzKHYpP2YrMTpmLTE7''@;'; put 'put ''dGhpcy5tZW51LnNldE9mZnNldCh2LGg/ZjpNKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbH1leGVjdXRlQ29tbWFuZChsKXtudWxsPT09dGhp''@;'; put 'put ''cy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJlcGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4uZCl9cHJlcGFy''@;'; put 'put ''ZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNGYWN0b3J5PW5ldyB5Z2UodGhpcy5ob3QsREYuREVGQVVMVF9JVEVNUyk7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0FUXSxhPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhsKX07dGhpcy5ob3QucnVuSG9va3MoImFmdGVy''@;'; put 'put ''Q29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYSksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGEuaXRlbXMpO2NvbnN0IGQ9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGQpLHRo''@;'; put 'put ''aXMubWVudS5zZXRNZW51SXRlbXMoZCksWW4oZCxoPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoaC5rZXksaCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaDB0KGMp''@;'; put 'put ''e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPWwucm93SGVhZGVycyxkPWwuY29sSGVhZGVycyxmPWMudGFyZ2V0O2lmKHRoaXMuY2xvc2UoKSxwbyhmLCJoYW5kc29udGFibGVJbnB1dCIpfHwoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCksIShhfHxkfHxm''@;'; put 'put ''dW5jdGlvbiBoKE0pe3JldHVybiJURCI9PT1NLm5vZGVOYW1lfHwiVEQiPT09TS5wYXJlbnROb2RlLm5vZGVOYW1lfShmKXx8cG8oZiwiY3VycmVudCIpJiZwbyhmLCJ3dEJvcmRlciIpKSkpcmV0dXJuO2NvbnN0IHY9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQpO3RoaXMub3Blbih7dG9wOmMuY2xpZW50WSt2LnRvcCxsZWZ0OmMuY2xpZW50WCt2LmxlZnR9KX1mdW5jdGlvbiBmMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBwMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250''@;'; put 'put ''ZXh0TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIGcwdCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9REYuU0VQQVJBVE9SPXtuYW1lOnNzfTtjbGFzcyB3MHR7Y29uc3RydWN0b3IoKXt0aGlzLmRhdGE9e319c2V0RGF0''@;'; put 'put ''YShsLGEpe3RoaXMuZGF0YVtsXT1hfWdldERhdGEobCl7cmV0dXJuIHRoaXMuZGF0YVtsXXx8dm9pZCAwfX1jbGFzcyBDMHR7Y29uc3RydWN0b3IoKXt0aGlzLmNsaXBib2FyZERhdGE9bmV3IHcwdH1wcmV2ZW50RGVmYXVsdCgpe31jb21wb3NlZFBhdGgoKXtyZXR1cm5bXX19ZnVuY3Rpb24g''@;'; put 'put ''WF8oYyxsLGEpe2tnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24ga2dlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBKMShjLGwpe3Jl''@;'; put 'put ''dHVybiBjLmdldChRXyhjLGwpKX1mdW5jdGlvbiBKXyhjLGwsYSl7cmV0dXJuIGMuc2V0KFFfKGMsbCksYSksYX1mdW5jdGlvbiBRXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHQ2PW5ldyBXZWFrTWFwLE5KPW5ldyBXZWFrTWFwLERUPW5ldyBXZWFrTWFwLFZKPW5ldyBXZWFrTWFwLEJKPW5ldyBXZWFrTWFwLElUPW5ldyBXZWFrTWFwLFJUPW5ldyBXZWFrU2V0''@;'; put 'put ''O2NsYXNzIE0wdHtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOnZ9PWw7KGZ1bmN0aW9uIFMwdChjLGwpe2tnZShjLGwpLGwuYWRkKGMpfSkodGhpcyxSVCksWF8odGhpcyx0''@;'; put 'put ''Nix2b2lkIDApLFhfKHRoaXMsTkosdm9pZCAwKSxYXyh0aGlzLERULHZvaWQgMCksWF8odGhpcyxWSix2b2lkIDApLFhfKHRoaXMsQkosdm9pZCAwKSxYXyh0aGlzLElULHZvaWQgMCksSl8oTkosdGhpcyxhKSxKXyhEVCx0aGlzLGQpLEpfKFZKLHRoaXMsaCksSl8oQkosdGhpcyxmKSxKXyhJ''@;'; put 'put ''VCx0aGlzLHYpfXNldFNlbGVjdGVkUmFuZ2UobCl7Sl8odDYsdGhpcyxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PUoxKE5KLHRoaXMpLmNhbGwodGhpcyl8fDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1KMSh0Nix0aGlzKS5nZXRU''@;'; put 'put ''b3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09SjEodDYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1RXyhSVCx0aGlzLHgwdCkuY2FsbCh0aGlzLGwsZCksdj1RXyhSVCx0aGlzLGpKKS5jYWxsKHRoaXMsYSxoKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6ZCE9PWZ8fGghPT12LHN0''@;'; put 'put ''YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZixlbmRDb2w6dn19Z2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMpfHwwPT09SjEoSVQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09SjEodDYsdGhp''@;'; put 'put ''cykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PUoxKHQ2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9UV8oUlQsdGhpcyxqSikuY2FsbCh0aGlzLGwsYSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0YXJ0Um93Oi0xLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpk''@;'; put 'put ''fX1nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09SjEoRFQsdGhpcykuY2FsbCh0aGlzKXx8MD09PUoxKElULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PUoxKHQ2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1KMSh0Nix0aGlzKS5n''@;'; put 'put ''ZXRCb3R0b21FbmRDb3JuZXIoKSxkPVFfKFJULHRoaXMsakopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotSjEoSVQsdGhpcykuY2FsbCh0aGlzKSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19fWZ1bmN0aW9uIGpKKGMsbCl7cmV0''@;'; put 'put ''dXJuIE1hdGgubWluKGwsTWF0aC5tYXgoYytKMShCSix0aGlzKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIHgwdChjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrSjEoVkosdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBEZ2UoYyl7Y29uc3QgbD1bXSxhPVtdO3Jl''@;'; put 'put ''dHVybiBZbihjLGQ9PntHYShNYXRoLm1pbihkLnN0YXJ0Um93LGQuZW5kUm93KSxNYXRoLm1heChkLnN0YXJ0Um93LGQuZW5kUm93KSxEPT57LTE9PT1sLmluZGV4T2YoRCkmJmwucHVzaChEKX0pLEdhKE1hdGgubWluKGQuc3RhcnRDb2wsZC5lbmRDb2wpLE1hdGgubWF4KGQuc3RhcnRDb2ws''@;'; put 'put ''ZC5lbmRDb2wpLEQ9PnstMT09PWEuaW5kZXhPZihEKSYmYS5wdXNoKEQpfSl9KSx7cm93czpsLGNvbHVtbnM6YX19ZnVuY3Rpb24gbjYoYyxsLGEpe0lnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSWdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGlu''@;'; put 'put ''aXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBMVChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDB0KGMpe3ZhciBsPWZ1bmN0aW9uIEEwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWWQoYyxsKXtyZXR1cm4gYy5nZXQoR2QoYyxsKSl9ZnVuY3Rpb24gcDMoYyxsLGEpe3JldHVybiBjLnNldChHZChjLGwpLGEpLGF9ZnVuY3Rpb24gR2QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJt''@;'; put 'put ''b2RpZnlDb3B5YWJsZVJhbmdlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lz''@;'; put 'put ''dGVyKCJhZnRlclBhc3RlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7Y29uc3Qgeko9ImNvcHlQYXN0ZSIsRDB0PVsiZnJhZ21lbnRTZWxlY3Rpb24iXSxSZ2U9Wyc8bWV0YSBuYW1lPSJn''@;'; put 'put ''ZW5lcmF0b3IiIGNvbnRlbnQ9IkhhbmRzb250YWJsZSIvPicsJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+dGR7d2hpdGUtc3BhY2U6bm9ybWFsfWJye21zby1kYXRhLXBsYWNlbWVudDpzYW1lLWNlbGx9PC9zdHlsZT4nXS5qb2luKCIiKTt2YXIgVUo9bmV3IFdlYWtNYXAsWko9bmV3IFdlYWtN''@;'; put 'put ''YXAsV0o9bmV3IFdlYWtNYXAsZXc9bmV3IFdlYWtNYXAsSUY9bmV3IFdlYWtNYXAsUkY9bmV3IFdlYWtNYXAsdHc9bmV3IFdlYWtNYXAsTEY9bmV3IFdlYWtNYXAsRmg9bmV3IFdlYWtTZXQ7Y2xhc3MgSTB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1''@;'; put 'put ''bmN0aW9uIEUwdChjLGwpe0lnZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZoKSxMVCh0aGlzLCJjb2x1bW5zTGltaXQiLDEvMCksTFQodGhpcywicm93c0xpbWl0IiwxLzApLExUKHRoaXMsInBhc3RlTW9kZSIsIm92ZXJ3cml0ZSIpLExUKHRoaXMsInVpQ29udGFpbmVyIix0aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnQuYm9keSksbjYodGhpcyxVSiwhMSksbjYodGhpcyxaSiwhMSksbjYodGhpcyxXSiwhMSksbjYodGhpcyxldywiY2VsbHMtb25seSIpLG42KHRoaXMsSUYsITEpLG42KHRoaXMsUkYsITEpLG42KHRoaXMsdHcsbmV3IE0wdCh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJv''@;'; put 'put ''d3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0OigpPT50aGlzLmNvbHVtbnNMaW1pdCxjb3VudENvbHVtbkhlYWRlcnM6KCk9PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50''@;'; put 'put ''KCl9KSksbjYodGhpcyxMRiwhMSksTFQodGhpcywiY29weWFibGVSYW5nZXMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gekp9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bekosLi4uRDB0XX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA4''@;'; put 'put ''MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57cGFzdGVNb2RlOiJvdmVyd3JpdGUiLHJvd3NMaW1pdDoxLzAsY29sdW1uc0xpbWl0OjEvMCxjb3B5Q29sdW1uSGVhZGVyczohMSxjb3B5Q29sdW1uR3JvdXBIZWFkZXJzOiExLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMX19''@;'; put 'put ''aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pKXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhLGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnBhc3RlTW9kZT1udWxsIT09KGw9dGhpcy5nZXRTZXR0aW5nKCJwYXN0ZU1vZGUiKSkmJnZvaWQgMCE9PWw/bDp0aGlz''@;'; put 'put ''LnBhc3RlTW9kZSx0aGlzLnJvd3NMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpKT90aGlzLnJvd3NMaW1pdDp0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpLHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKHRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikpP3Ro''@;'; put 'put ''aXMuY29sdW1uc0xpbWl0OnRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikscDMoVUosdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzIikpLHAzKFpKLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uR3JvdXBIZWFkZXJzIikpLHAzKFdKLHRoaXMsdGhp''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVyc09ubHkiKSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KGE9dGhpcy5nZXRTZXR0aW5nKCJ1aUNvbnRhaW5lciIpKSYmdm9pZCAwIT09YT9hOnRoaXMudWlDb250YWluZXIsdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVs''@;'; put 'put ''dE9wdGlvbnMiLGg9PkdkKEZoLHRoaXMsTzB0KS5jYWxsKHRoaXMsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdk''@;'; put 'put ''KEZoLGQsUDB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIiwoKT0+R2QoRmgsdGhpcyxGMHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjb3B5IixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBkLm9uQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImN1dCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkN1dCguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsInBhc3RlIixmdW5jdGlvbigpe3JldHVybiBkLm9uUGFzdGUoLi4uYXJndW1lbnRzKX0pLEFFKCkmJih0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWVudGVyIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBHZChGaCxkLEgwdCkuY2FsbChkLC4uLmYpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnQuYm9keSwibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gR2QoRmgsZCxOMHQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJT''@;'; put 'put ''ZWxlY3Rpb24iLCgpPT5HZChGaCx0aGlzLFYwdCkuY2FsbCh0aGlzKSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5k''@;'; put 'put ''aXNhYmxlUGx1Z2luKCl9Y29weSgpe3AzKGV3LHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjZWxscy1vbmx5IikscDMoSUYsdGhpcywhMCksR2QoRmgsdGhpcyxMZ2UpLmNhbGwodGhpcywiY29weSIpfWNvcHlDZWxsc09ubHko''@;'; put 'put ''KXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1oZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhl''@;'; put 'put ''YWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtwMyhSRix0aGlzLCEwKSxHZChGaCx0aGlzLExnZSkuY2FsbCh0aGlzLCJjdXQiKX1nZXRSYW5nZWRDb3B5YWJsZURhdGEobCl7cmV0dXJuIHJUKHRoaXMuZ2V0UmFuZ2VkRGF0YShsKSl9Z2V0UmFuZ2VkRGF0''@;'; put 'put ''YShsKXtjb25zdCBhPVtdLHtyb3dzOmQsY29sdW1uczpofT1EZ2UobCk7cmV0dXJuIFluKGQsZj0+e2NvbnN0IHY9W107WW4oaCxNPT57di5wdXNoKGY8MD90aGlzLmhvdC5nZXRDb2xIZWFkZXIoTSxmKTp0aGlzLmhvdC5nZXRDb3B5YWJsZURhdGEoZixNKSl9KSxhLnB1c2godil9KSxhfXBh''@;'; put 'put ''c3RlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmw7aWYoIWwmJiFhKXJldHVybjtjb25zdCBkPW5ldyBDMHQ7bCYm''@;'; put 'put ''ZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGwpLGEmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLGEpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0''@;'; put 'put ''dXJuO2lmKGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4gdm9pZCh0aGlzLmNvcHlhYmxlUmFuZ2VzPVtdKTtZZCh0dyx0aGlzKS5zZXRTZWxlY3RlZFJhbmdlKGwpO2NvbnN0IGE9bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxbImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVhZGVycy1vbmx5''@;'; put 'put ''Ij09PVlkKGV3LHRoaXMpP2Euc2V0KCJoZWFkZXJzIixZZCh0dyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1bW4taGVhZGVycyI9PT1ZZChldyx0aGlzKT9hLnNldCgiaGVhZGVycyIsWWQodHcsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhl''@;'; put 'put ''YWRlcnNSYW5nZSgpKToid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1ZZChldyx0aGlzKSYmYS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpKSxhLnNldCgiY2VsbHMiLFlkKHR3LHRoaXMpLmdldENlbGxzUmFuZ2UoKSkpLHRoaXMuY29w''@;'; put 'put ''eWFibGVSYW5nZXM9QXJyYXkuZnJvbShhLnZhbHVlcygpKS5maWx0ZXIoaD0+bnVsbCE9PWgpLm1hcChoPT57bGV0e3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRDb2w6RH09aDtyZXR1cm57c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpEfX0pLHRoaXMu''@;'; put 'put ''Y29weWFibGVSYW5nZXM9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLHRoaXMuY29weWFibGVSYW5nZXMpO2NvbnN0IGQ9YS5nZXQoImNlbGxzIik7aWYobnVsbCE9PWQmJmQuaXNSYW5nZVRyaW1tZWQpe2NvbnN0e3N0YXJ0Um93Omgsc3RhcnRDb2w6ZixlbmRSb3c6''@;'; put 'put ''dixlbmRDb2w6TX09ZDt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5TGltaXQiLHYtaCsxLE0tZisxLHRoaXMucm93c0xpbWl0LHRoaXMuY29sdW1uc0xpbWl0KX19aXNFZGl0b3JPcGVuZWQoKXt2YXIgbDtyZXR1cm4gbnVsbD09PShsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpKXx8''@;'; put 'put ''dm9pZCAwPT09bD92b2lkIDA6bC5pc09wZW5lZCgpfXBvcHVsYXRlVmFsdWVzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsLmxlbmd0aClyZXR1cm47Y29u''@;'; put 'put ''c3QgZD1sLmxlbmd0aCxoPWxbMF0ubGVuZ3RoLGY9W10se3Jvdzp2LGNvbDpNfT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpELGNvbDpafT1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCByZT12LGNlPU0sYmU9dixFZT1NO2Zvcig7Zi5sZW5ndGg8ZHx8cmU8PUQ7KXtjb25zdHtza2lw''@;'; put 'put ''Um93T25QYXN0ZTpCZSx2aXN1YWxSb3c6cWV9PXRoaXMuaG90LmdldENlbGxNZXRhKHJlLE0pO2lmKHJlPXFlKzEsITA9PT1CZSljb250aW51ZTtiZT1xZSxjZT1NO2NvbnN0IHJ0PVtdLHB0PWYubGVuZ3RoJWQ7Zm9yKDtydC5sZW5ndGg8aHx8Y2U8PVo7KXtjb25zdHtza2lwQ29sdW1uT25Q''@;'; put 'put ''YXN0ZTpkdCx2aXN1YWxDb2w6SnR9PXRoaXMuaG90LmdldENlbGxNZXRhKHYsY2UpOyhjZT1KdCsxLCEwIT09ZHQpJiYoRWU9SnQscnQucHVzaChsW3B0XVtydC5sZW5ndGglaF0pKX1mLnB1c2gocnQpfXJldHVybiBwMyhMRix0aGlzLCEwKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2''@;'; put 'put ''LE0sZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbdixNLGJlLEVlXX1vbkNvcHkobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJp''@;'; put 'put ''YnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVlkKElGLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fEVwKGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiF2RShhLHRoaXMuaG90LnJvb3RFbGVt''@;'; put 'put ''ZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHAzKElGLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLHY9R2QoRmgsdGhpcyxSMHQpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2Vz''@;'; put 'put ''KTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpKXtjb25zdCBEPXJUKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgWj1xJChmKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsRCksbC5jbGlwYm9hcmRE''@;'; put 'put ''YXRhLnNldERhdGEoInRleHQvaHRtbCIsW1JnZSxaXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsRCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsZix0aGlzLmNv''@;'; put 'put ''cHlhYmxlUmFuZ2VzLHYpfXAzKGV3LHRoaXMsImNlbGxzLW9ubHkiKX1vbkN1dChsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lm''@;'; put 'put ''KCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhWWQoUkYsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIXZFKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVm''@;'; put 'put ''YXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCkscDMoUkYsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUN1dCIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSl7Y29uc3QgTT1yVChmKTtp''@;'; put 'put ''ZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IEQ9cSQoZik7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLE0pLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtSZ2UsRF0uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdGhp''@;'; put 'put ''cy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLE0pO3RoaXMuaG90LmVtcHR5U2VsZWN0ZWRDZWxscygiQ29weVBhc3RlLmN1dCIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckN1dCIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKX19b25QYXN0ZShsKXtjb25zdCBh''@;'; put 'put ''PWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCF0aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhdkUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsZXQgZjtpZihsLnByZXZlbnREZWZhdWx0KCksbCYmdHlwZW9mIGwuY2xpcGJvYXJkRGF0YTwidSIp''@;'; put 'put ''e2NvbnN0IHJlPUlPKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2Y9cmUmJi8oPHRhYmxlKXwoPFRBQkxFKS9nLnRlc3QocmUpP2JmZShyZSx0aGlzLmhvdC5yb290RG9j''@;'; put 'put ''dW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoZj10aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEu''@;'; put 'put ''Z2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGYmJihmPWZ1bmN0aW9uIERydChjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0aDspaWYoaD1jLmxlbmd0aCxjLm1hdGNo''@;'; put 'put ''KHBwZSkpYz1jLnJlcGxhY2UocHBlLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKGZwZSkpYz1jLnJlcGxhY2UoZnBlLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0IHY9MCxNPSEwO2Zvcig7TTspe2NvbnN0''@;'; put 'put ''IEQ9Yy5zbGljZSgwLDEpOyciJz09PUQmJih2Kz0xKSxmKz1ELCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmdiUyPT0wKSYmKE09ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIikucmVwbGFjZSgvWyJdKi9nLEQ9Pm5ldyBB''@;'; put 'put ''cnJheShNYXRoLmZsb29yKEQubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3Qgdj1jLm1hdGNoKGtydCk7Zj12P3ZbMF06IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGYpKSx2b2lkIDA9PT1mfHxmJiYwPT09Zi5sZW5ndGh8fCExPT09''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixmLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFt2LE0sRCxaXT10aGlzLnBvcHVsYXRlVmFsdWVzKGYpO3RoaXMuaG90LnNlbGVjdENlbGwodixNLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsRCksTWF0aC5t''@;'; put 'put ''aW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxaKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gTGdlKGMpe2lmKEFFKCkpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUxhc3QoKTtpZihsKXtjb25zdHtyb3c6YSxjb2w6ZH09bC5oaWdobGlnaHQsaD10aGlzLmhvdC5nZXRDZWxsKGEsZCwhMCk7aCYmWjJlKGgsKCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoYyl9KX19ZWxzZSB0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1h''@;'; put 'put ''bmQoYyl9ZnVuY3Rpb24gUjB0KGMpe2NvbnN0e3Jvd3M6bH09RGdlKGMpO2xldCBhPTA7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aCYmIShsW2RdPj0wKTtkKyspYSs9MTtyZXR1cm57Y29sdW1uSGVhZGVyc0NvdW50OmF9fWZ1bmN0aW9uIEwwdCgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkp''@;'; put 'put ''e2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwhMCk7ZCYmayQoZCl9fX1mdW5jdGlvbiBPZ2UoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25zdCBj''@;'; put 'put ''PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO251bGwhPWQmJmQuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSYmRCQoZCl9fX1mdW5jdGlvbiBPMHQoYyl7''@;'; put 'put ''Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBtMHQoYyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocnEpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNv''@;'; put 'put ''dW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRk''@;'; put 'put ''ZW46ITF9fSh0aGlzKSksWWQoVUosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiB5MHQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6''@;'; put 'put ''MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGlxLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFs''@;'; put 'put ''fHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxZZChaSix0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIGIwdChjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29s''@;'; put 'put ''dW1uX2dyb3VwX2hlYWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/a3MobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYXEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aEFsbENvbHVtbkhlYWRl''@;'; put 'put ''cnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCl8fCF0aGlzLmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVycylyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9''@;'; put 'put ''dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoV0osdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiB2MHQoYyl7cmV0dXJue2tleToiY29weV9jb2x1bW5faGVhZGVyc19vbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9xLGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVy''@;'; put 'put ''biEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxjLml0ZW1zLnB1c2goZnVuY3Rpb24g''@;'; put 'put ''XzB0KGMpe3JldHVybntrZXk6ImN1dCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc3EpfSxjYWxsYmFjaygpe2MuY3V0KCl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IGw9dGhp''@;'; put 'put ''cy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX1mdW5jdGlvbiBQMHQoYyxsLGEsZCxoKXtZZChMRix0aGlzKSYm''@;'; put 'put ''KGgudmFsdWU9ITApLHAzKExGLHRoaXMsITEpfWZ1bmN0aW9uIEYwdCgpe3RoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5zZXRDb3B5YWJsZVRleHQoKX1mdW5jdGlvbiBIMHQoKXtHZChGaCx0aGlzLE9nZSkuY2Fs''@;'; put 'put ''bCh0aGlzKX1mdW5jdGlvbiBOMHQoKXtHZChGaCx0aGlzLEwwdCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBWMHQoKXtHZChGaCx0aGlzLE9nZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBQZ2UoYyxsKXtyZXR1cm5gYm9yZGVyX3JvdyR7Y31jb2wke2x9YH1mdW5jdGlvbiBZSihjKXt2YXIgbCxhO3Jl''@;'; put 'put ''dHVybihQYShjLnN0YXJ0KXx8UGEoYy5sZWZ0KSkmJihjLnN0YXJ0PW51bGwhPT0obD1jLnN0YXJ0KSYmdm9pZCAwIT09bD9sOmMubGVmdCksKFBhKGMuZW5kKXx8UGEoYy5yaWdodCkpJiYoYy5lbmQ9bnVsbCE9PShhPWMuZW5kKSYmdm9pZCAwIT09YT9hOmMucmlnaHQpLGRlbGV0ZSBjLmxl''@;'; put 'put ''ZnQsZGVsZXRlIGMucmlnaHQsY31mdW5jdGlvbiBQVChjKXtyZXR1cm4gUGEoYy5zdGFydCkmJihjLmxlZnQ9Yy5zdGFydCksUGEoYy5lbmQpJiYoYy5yaWdodD1jLmVuZCksY31mdW5jdGlvbiBHSihjLGwpe3JldHVybntpZDpQZ2UoYyxsKSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAi''@;'; put 'put ''LGNvcm5lclZpc2libGU6ITF9LHJvdzpjLGNvbDpsLHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEwfSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24gRmcoYyxsKXtsZXQgYT0hMTtyZXR1cm4gWW4oYy5nZXRTZWxlY3RlZFJhbmdlKCksZD0+e2QuZm9yQWxsKCho''@;'; put 'put ''LGYpPT57aWYoaDwwfHxmPDApcmV0dXJuO2NvbnN0IHY9Yy5nZXRDZWxsTWV0YShoLGYpLmJvcmRlcnM7aWYodil7aWYoIWwpcmV0dXJuIGE9ITAsITE7aWYoIVR1KHZbbF0sImhpZGUiKXx8ITE9PT12W2xdLmhpZGUpcmV0dXJuIGE9ITAsITF9fSl9KSxhfWZ1bmN0aW9uIE9GKGMpe3JldHVy''@;'; put 'put ''bmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1jb25zdCBaMHQ9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiBZMHQoYyl7cmV0dXJue2tleToiYm9yZGVyczp0b3AiLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UoeHEpO3JldHVybiBGZyh0aGlzLCJ0b3AiKSYmKGw9T0YobCkpLGx9LGNhbGxiYWNrKGwsYSl7Y29uc3QgZD1GZyh0aGlzLCJ0b3AiKTtjLnByZXBhcmVCb3JkZXIoYSwidG9wIixkKX19fWZ1bmN0aW9uIEcwdChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/InN0YXJ0Ijoi''@;'; put 'put ''ZW5kIjtyZXR1cm57a2V5OiJib3JkZXJzOnJpZ2h0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEVxKTtyZXR1cm4gRmcodGhpcyxsKSYmKGE9T0YoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1GZyh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1m''@;'; put 'put ''dW5jdGlvbiAkMHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpib3R0b20iLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVHEpO3JldHVybiBGZyh0aGlzLCJib3R0b20iKSYmKGw9T0YobCkpLGx9LGNhbGxiYWNrKGwsYSl7Y29uc3QgZD1GZyh0aGlzLCJib3R0b20iKTtj''@;'; put 'put ''LnByZXBhcmVCb3JkZXIoYSwiYm90dG9tIixkKX19fWZ1bmN0aW9uIEswdChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/ImVuZCI6InN0YXJ0IjtyZXR1cm57a2V5OiJib3JkZXJzOmxlZnQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQXEpO3JldHVybiBGZyh0aGlz''@;'; put 'put ''LGwpJiYoYT1PRihhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPUZnKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIHEwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOm5vX2JvcmRlcnMiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGtx''@;'; put 'put ''KX0sY2FsbGJhY2sobCxhKXtjLnByZXBhcmVCb3JkZXIoYSwibm9Cb3JkZXJzIil9LGRpc2FibGVkKCl7cmV0dXJuIUZnKHRoaXMpfX19ZnVuY3Rpb24gRmdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6''@;'; put 'put ''YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBQRj0iY3VzdG9tQm9yZGVycyI7dmFyICRKPW5ldyBXZWFrU2V0O2NsYXNzIHIxdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1l''@;'; put 'put ''bnRzKSxmdW5jdGlvbiBYMHQoYyxsKXsoZnVuY3Rpb24gSjB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsJEop''@;'; put 'put ''LGZ1bmN0aW9uIFEwdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZTF0KGMpe3ZhciBsPWZ1bmN0aW9uIHQxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExV''@;'; put 'put ''R0lOX0tFWSgpe3JldHVybiBQRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUEZdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVu''@;'; put 'put ''dURlZmF1bHRPcHRpb25zIixsPT5GZ2UoJEosdGhpcyxpMXQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+RmdlKCRKLHRoaXMsYTF0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBl''@;'; put 'put ''ci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9yZGVycyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3Rh''@;'; put 'put ''cnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPVlKKGEpKTtjb25zdCB2PWVUKHhfKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNl''@;'; put 'put ''bGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpfSk7WW4obCxNPT57dihNKS5mb3JBbGwoKEQsWik9PntZbihkLHJlPT57dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKEQsWixoLGZ1bmN0aW9uIFcwdChjKXt2YXIgbDtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PShsPVowdC5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6Y30ocmUpKX0pfSl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldEJvcmRlcnMobCl7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2NvbnN0IGQ9ZVQoeF8obCkse2NyZWF0ZUNlbGxDb29yZHM6dGhp''@;'; put 'put ''cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KSxoPVtdO3JldHVybiBZbihsLGY9PntkKGYpLmZvckFsbCgodixNKT0+e1luKHRoaXMuc2F2ZWRCb3JkZXJzLEQ9PntE''@;'; put 'put ''LnJvdz09PXYmJkQuY29sPT09TSYmaC5wdXNoKFBUKEQpKX0pfSl9KSxofWNsZWFyQm9yZGVycyhsKXtsP3RoaXMuc2V0Qm9yZGVycyhsKTooWW4odGhpcy5zYXZlZEJvcmRlcnMsYT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGEuaWQpLHRoaXMuY2xlYXJOdWxs''@;'; put 'put ''Q2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoYS5yb3csYS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MobCxhKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJzKGwpfHx0aGlzLnNhdmVkQm9yZGVycy5w''@;'; put 'put ''dXNoKGwpO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsaCxhKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5hZGRDdXN0b21TZWxlY3Rpb24o''@;'; put 'put ''e2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTpofSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmNvdW50Um93cygpLHY9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYobD49Znx8YT49dilyZXR1cm47bGV0IE09R0oobCxhKTtkJiYoTT1mdW5j''@;'; put 'put ''dGlvbiBqMHQoYyxsKXtyZXR1cm4gVHUobCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLFR1KGwsInRvcCIpJiZQYShsLnRvcCkmJihsLnRvcD8ocW8obC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy50b3A9bC50b3ApOihsLnRvcD17aGlk''@;'; put 'put ''ZTohMH0sYy50b3A9bC50b3ApKSxUdShsLCJib3R0b20iKSYmUGEobC5ib3R0b20pJiYobC5ib3R0b20/KHFvKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToobC5ib3R0b209e2hpZGU6ITB9LGMuYm90dG9tPWwuYm90dG9t''@;'; put 'put ''KSksVHUobCwic3RhcnQiKSYmUGEobC5zdGFydCkmJihsLnN0YXJ0PyhxbyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFydD1sLnN0YXJ0KSksVHUobCwiZW5kIikmJlBhKGwuZW5kKSYm''@;'; put 'put ''KGwuZW5kPyhxbyhsLmVuZCl8fChsLmVuZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KE0sZCksWW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLEQ9PntpZihNLmlkPT09''@;'; put 'put ''RC5zZXR0aW5ncy5pZClyZXR1cm4gT2JqZWN0LmFzc2lnbihELnNldHRpbmdzLGQpLE0uaWQ9RC5zZXR0aW5ncy5pZCxNLnRvcD1ELnNldHRpbmdzLnRvcCxNLmJvdHRvbT1ELnNldHRpbmdzLmJvdHRvbSxNLnN0YXJ0PUQuc2V0dGluZ3Muc3RhcnQsTS5lbmQ9RC5zZXR0aW5ncy5lbmQsITF9''@;'; put 'put ''KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixQVChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1hdGgubWluKGwudG8ucm93LHRoaXMuaG90LmNvdW50Um93cygp''@;'; put 'put ''LTEpLGg9TWF0aC5taW4obC50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7R2EobC5mcm9tLnJvdyxkLGY9PntHYShsLmZyb20uY29sLGgsdj0+e2NvbnN0IE09R0ooZix2KTtsZXQgRD0wO2Y9PT1sLmZyb20ucm93JiZUdShhLCJ0b3AiKSYmKEQrPTEsTS50b3A9YS50b3ApLGY9PT1s''@;'; put 'put ''LnRvLnJvdyYmVHUoYSwiYm90dG9tIikmJihEKz0xLE0uYm90dG9tPWEuYm90dG9tKSx2PT09bC5mcm9tLmNvbCYmVHUoYSwic3RhcnQiKSYmKEQrPTEsTS5zdGFydD1hLnN0YXJ0KSx2PT09bC50by5jb2wmJlR1KGEsImVuZCIpJiYoRCs9MSxNLmVuZD1hLmVuZCksRD4wJiYodGhpcy5ob3Qu''@;'; put 'put ''c2V0Q2VsbE1ldGEoZix2LCJib3JkZXJzIixQVChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1QZ2UobCxhKTt0aGlzLnNwbGljZUJvcmRlcihkKSx0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0''@;'; put 'put ''aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRlcnM7Zj1mJiZ2b2lkIDAhPT1mLmJvcmRlcj9ZSihmKTpHSihs''@;'; put 'put ''LGEpLGg/KGZbZF09e2hpZGU6ITB9LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5z''@;'; put 'put ''ZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLFBUKGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0''@;'; put 'put ''YShsLGEsImJvcmRlcnMiLFBUKGYpKSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7WW4obCxoPT57bGV0e3N0YXJ0OmYsZW5kOnZ9PWg7aWYoZi5yb3c9PT12LnJvdyYmZi5jb2w9PT12LmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGYucm93LGYuY29sKTp0aGlzLnNl''@;'; put 'put ''dEJvcmRlcihmLnJvdyxmLmNvbCxhLGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjpHYShmLmNvbCx2LmNvbCxNPT57R2EoZi5yb3csdi5yb3csRD0+e3RoaXMucmVtb3ZlQWxsQm9yZGVycyhELE0pfSl9KTticmVhaztjYXNlInRvcCI6R2EoZi5jb2wsdi5jb2wsTT0+e3RoaXMu''@;'; put 'put ''c2V0Qm9yZGVyKGYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjpHYShmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIodi5yb3csTSxhLGQpfSk7YnJlYWs7Y2FzZSJzdGFydCI6R2EoZi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sZi5jb2wsYSxkKX0pO2JyZWFr''@;'; put 'put ''O2Nhc2UiZW5kIjpHYShmLnJvdyx2LnJvdyxNPT57dGhpcy5zZXRCb3JkZXIoTSx2LmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtZbihsLGE9Pntjb25zdCBkPVlKKGEpO2EucmFuZ2U/dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UoYS5yYW5nZSxk''@;'; put 'put ''KTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09bDtyZXR1cm4gcXUoW2EsZCxoLGZdLChNLEQpPT57bGV0IFo9TTtyZXR1cm4gRCYmRC5oaWRlJiYoWis9MSks''@;'; put 'put ''Wn0sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9eXModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9PmQuc2V0dGluZ3MuaWQpLmluZGV4T2YobCk7YT4tMSYmdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5j''@;'; put 'put ''dXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEpPT57aWYobnVsbD09PWwuY2VsbFJhbmdlKXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1''@;'; put 'put ''c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJzKCl7WW4odGhpcy5zYXZlZEJvcmRlcnMsbD0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRp''@;'; put 'put ''bmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT15cyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJzLnNwbGljZShhLDEpfWNoZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBh''@;'; put 'put ''PSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOlluKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzW2ZdPWwsYT0hMCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxl''@;'; put 'put ''Y3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gWW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihsLmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1cm4gWW4odGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdl''@;'; put 'put ''ci5nZXRCb3JkZXJJbnN0YW5jZXMoZiksTT0+e00udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmNvdW50SGlkZShsKTtsZXQgZj0hMTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVy''@;'; put 'put ''cyhsLnJvdyxsLmNvbCksZj0hMCk6WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLHY9PntpZihsLmlkPT09di5zZXR0aW5ncy5pZClyZXR1cm4gdi52aXN1YWxDZWxsUmFuZ2U9YSx2LmNvbW1pdCgpLGQmJlluKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVj''@;'; put 'put ''dGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKHYpLEQ9PntELmNoYW5nZUJvcmRlclN0eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQRl07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT1n''@;'; put 'put ''MShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZvaWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0''@;'; put 'put ''aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gejB0KGMpe3JldHVybiBjLnNvbWUobD0+UGEobC5sZWZ0KXx8UGEobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIFUwdChjKXtyZXR1cm4gYy5zb21lKGw9PlBhKGwuc3RhcnQpfHxQYShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO2lmKHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGkxdChjKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXSYm''@;'; put 'put ''Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNcSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIShsJiYhbC5pc1NpbmdsZUhlYWRl''@;'; put 'put ''cigpKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOltZMHQodGhpcyksRzB0KHRoaXMpLCQwdCh0aGlzKSxLMHQodGhpcykscTB0KHRoaXMpXX19KX1mdW5jdGlvbiBhMXQoKXt0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9ZnVuY3Rpb24g''@;'; put 'put ''S0ooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGwxdChjKXt2YXIgbD1mdW5jdGlvbiBjMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEhnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6''@;'; put 'put ''Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgTmdlPSJkcmFnVG9TY3JvbGwiO3ZhciBxSj1uZXcgV2Vha1NldDtjbGFzcyBkMXQgZXh0''@;'; put 'put ''ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzF0KGMsbCl7KGZ1bmN0aW9uIHMxdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g''@;'; put 'put ''YW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHFKKSxLSih0aGlzLCJib3VuZGFyaWVzIixudWxsKSxLSih0aGlzLCJjYWxsYmFjayIsbnVsbCksS0oodGhpcywibGlzdGVuaW5nIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE5nZX1zdGF0aWMgZ2V0IFBMVUdJ''@;'; put 'put ''Tl9QUklPUklUWSgpe3JldHVybiAxMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW05nZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbD0+SGdlKHFKLHRoaXMsVmdlKS5jYWxsKHRo''@;'; put 'put ''aXMsbCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PkhnZShxSix0aGlzLFZnZSkuY2FsbCh0aGlzLGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRo''@;'; put 'put ''aXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKCl7dGhpcy5ib3VuZGFyaWVzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7bGVmdDowLHJpZ2h0OnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJXaWR0aCx0b3A6MCxib3R0b206dGhpcy5ob3Qucm9vdFdpbmRvdy5pbm5lckhlaWdodH19c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1sfWNoZWNrKGwsYSl7bGV0IGQ9MCxo''@;'; put 'put ''PTA7YTx0aGlzLmJvdW5kYXJpZXMudG9wP2g9YS10aGlzLmJvdW5kYXJpZXMudG9wOmE+dGhpcy5ib3VuZGFyaWVzLmJvdHRvbSYmKGg9YS10aGlzLmJvdW5kYXJpZXMuYm90dG9tKSxsPHRoaXMuYm91bmRhcmllcy5sZWZ0P2Q9bC10aGlzLmJvdW5kYXJpZXMubGVmdDpsPnRoaXMuYm91bmRh''@;'; put 'put ''cmllcy5yaWdodCYmKGQ9bC10aGlzLmJvdW5kYXJpZXMucmlnaHQpLHRoaXMuY2FsbGJhY2soZCxoKX1saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMH11bmxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSExfWlzTGlzdGVuaW5nKCl7cmV0dXJuIHRoaXMubGlzdGVuaW5nfXJlZ2lzdGVyRXZlbnRz''@;'; put 'put ''KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmhvdDtsZXQgYT1sO2Zvcig7YTspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJjb250ZXh0bWVudSIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihh''@;'; put 'put ''LmRvY3VtZW50LCJtb3VzZXVwIiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNlbW92ZSIsZD0+dGhpcy5vbk1vdXNlTW92ZShkKSksYT1CNyhhKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIuY2xlYXIoKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVmdlKGMpe2lmKEhtKGMpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0''@;'; put 'put ''T3ZlcmxheXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDt0aGlzLnNldEJvdW5kYXJpZXMobCE9PXRoaXMuaG90LnJvb3RXaW5kb3c/bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp2b2lkIDApLHRoaXMuc2V0Q2FsbGJhY2soKGEsZCk9Pnt2YXIgaCxmO2NvbnN0IHY9''@;'; put 'put ''bnVsbCE9PShoPWwuc2Nyb2xsTGVmdCkmJnZvaWQgMCE9PWg/aDpsLnNjcm9sbFgsTT1udWxsIT09KGY9bC5zY3JvbGxUb3ApJiZ2b2lkIDAhPT1mP2Y6bC5zY3JvbGxZO2wuc2Nyb2xsKHYrNTAqTWF0aC5zaWduKGEpLE0rMjAqTWF0aC5zaWduKGQpKX0pLHRoaXMubGlzdGVuKCl9ZnVuY3Rp''@;'; put 'put ''b24gQmdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBYSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcDF0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIGcxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gamdlKGMsbCxhKXtyZXR1cm4gYy5zZXQocTIoYyxsKSxhKSxhfWZ1bmN0aW9uIHEyKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9u''@;'; put 'put ''cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxTYS5n''@;'; put 'put ''ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgRkY9ImRyb3Bkb3duTWVudSIsRlQ9ImNoYW5nZVR5cGUiLEpKPUZGO3ZhciBIRj1uZXcgV2Vha01hcCxnMz1uZXcgV2Vha1NldDtjbGFzcyBORiBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExV''@;'; put 'put ''R0lOX0tFWSgpe3JldHVybiBGRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW3dULENULHNzLE1ULHNz''@;'; put 'put ''LHlGLHNzLFNULHNzLEsyXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBoMXQoYyxsKXtCZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxnMyksWEoodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgZ2dlKHRoaXMuaG90KSksWEoodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxYSih0''@;'; put 'put ''aGlzLCJtZW51IixudWxsKSxmdW5jdGlvbiBmMXQoYyxsLGEpe0JnZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsSEYsITEpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIiwoYSxkKT0+cTIoZzMsdGhpcyx5MXQpLmNhbGwodGhpcyxhLGQpKX1pc0VuYWJsZWQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGRl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyB5Z2UodGhpcy5ob3QsTkYuREVGQVVMVF9JVEVNUyksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHEyKGczLGwseDF0KS5jYWxsKGwsLi4uZil9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBxMihnMyxsLE0xdCkuY2FsbChsLC4uLmYpfSk7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZGXSxkPXtpdGVtczp0''@;'; put 'put ''aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIu''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCksdGhpcy5jYWxsT25QbHVnaW5zUmVhZHkoKCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZCksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGQuaXRlbXMpO2NvbnN0IGg9dGhpcy5pdGVtc0Zh''@;'; put 'put ''Y3RvcnkuZ2V0SXRlbXMoYSk7dGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1uZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHREcm9wZG93bk1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuYm9keX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+cTIoZzMsdGhpcyxfMXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnEyKGczLHRoaXMsdzF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIixmPT5xMihnMyx0aGlzLEMxdCkuY2FsbCh0aGlzLGYpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3Nl''@;'; put 'put ''IiwoKT0+cTIoZzMsdGhpcyxTMXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBs''@;'; put 'put ''LmV4ZWN1dGVDb21tYW5kLmNhbGwobCwuLi52KX0pLFluKGgsZj0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGYua2V5LGYpKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT0oKT0+e2NvbnN0e2hpZ2hsaWdodDpkfT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKChkLmlzSGVhZGVyKCkmJi0xPT09ZC5yb3d8fGQuaXNDZWxsKCkpJiZkLmNvbD49MCl7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhkLmNvbCxkLmNvbCwtMSk7Y29uc3R7ZnJvbTpofT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''LGY9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLHY9dGhpcy5ob3QuZ2V0Q2VsbCgtMSxoLmNvbCwhMCkucXVlcnlTZWxlY3RvcihgLiR7RlR9YCksTT12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMub3Blbih7bGVmdDpNLmxlZnQrZi5sZWZ0LHRv''@;'; put 'put ''cDpNLnRvcCt2Lm9mZnNldEhlaWdodCtmLnRvcH0se2xlZnQ6TS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX07dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNo''@;'; put 'put ''b3J0Y3V0cyhbe2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXSxbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOmEscnVuT25seUlmOigpPT57dmFyIGQ7Y29uc3QgaD1udWxsPT09KGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWQ/''@;'; put 'put ''dm9pZCAwOmQuaGlnaGxpZ2h0O3JldHVybiBoJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShoKSYmaC5pc0hlYWRlcigpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGNhcHR1cmVDdHJsOiEwLGdyb3VwOkpKfSx7a2V5czpbWyJTaGlmdCIsIkFsdCIsIkFycm93RG93biJdXSxj''@;'; put 'put ''YWxsYmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXND''@;'; put 'put ''ZWxsKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6Skp9XSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEpKKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixsPT5xMihnMyx0aGlzLGIxdCkuY2FsbCh0aGlzLGwpKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7''@;'; put 'put ''YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpfHwodGhpcy5tZW51Lm9wZW4oKSxYbyhkLChoLGYpPT57dGhpcy5tZW51LnNldE9mZnNldChmLGgpfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpKX1j''@;'; put 'put ''bG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3RoaXMuY29t''@;'; put 'put ''bWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1zZXRMaXN0ZW5pbmcoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMubWVudS5pc09wZW5lZCgpJiYobD90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlz''@;'; put 'put ''Lm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHpnZShjKXtjLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tl''@;'; put 'put ''eXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSl9ZnVuY3Rpb24gYjF0KGMpe2lmKHBvKGMudGFyZ2V0LEZUKSl7Y29uc3QgbD1mRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCksYT1jLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJl''@;'; put 'put ''Y3QoKTtjLnN0b3BQcm9wYWdhdGlvbigpLGpnZShIRix0aGlzLCExKSx0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2wubGVmdCx0b3A6YS50b3ArYy50YXJnZXQub2Zmc2V0SGVpZ2h0K2wudG9wfSx7bGVmdDphLndpZHRoLHJpZ2h0OjAsYWJvdmU6MCxiZWxvdzozfSl9fWZ1bmN0aW9uIHkxdChj''@;'; put 'put ''LGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2lmKCFhKXJldHVybjtjb25zdCBkPWEucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChkLGEpO2lmKGM8MHx8aCE9PWQubGVuZ3RoLTEpcmV0dXJuO2NvbnN0IGY9bC5xdWVyeVNlbGVjdG9yKGAuJHtG''@;'; put 'put ''VH1gKTtpZih0aGlzLmVuYWJsZWQmJmYpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoZiYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpKTtjb25zdCB2PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTt2LmNsYXNzTmFtZT1GVCx2LnR5''@;'; put 'put ''cGU9ImJ1dHRvbiIsdi50YWJJbmRleD0tMSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYodm8odixbVjcoKSxtRSgiICIpXSksdm8obCxbRTJlKCJtZW51IildKSksdi5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUodixsLmZp''@;'; put 'put ''cnN0Q2hpbGQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gXzF0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIHcxdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLHRoaXMpLHEyKGczLHRoaXMsemdlKS5j''@;'; put 'put ''YWxsKHRoaXMsdGhpcy5tZW51KX1mdW5jdGlvbiBDMXQoYyl7cTIoZzMsdGhpcyx6Z2UpLmNhbGwodGhpcyxjKX1mdW5jdGlvbiBTMXQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIix0aGlzKX1mdW5jdGlvbiBNMXQoYyl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIG0xdChjLGwpe3JldHVybiBjLmdldChxMihjLGwpKX0oSEYsdGhpcyk/bnVsbDpjfWZ1bmN0aW9uIHgxdChjKXtwbyhjLnRhcmdldCxGVCkmJmpnZShIRix0aGlzLCEwKX1mdW5jdGlvbiBVZ2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEUxdChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBUMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfU5GLlNFUEFSQVRPUj17bmFtZTpzc307Y29uc3QgazF0PWNsYXNzIEExdHtjb25zdHJ1Y3RvcihsKXtVZ2UodGhpcywiaG90Iix2b2lkIDApLFVnZSh0aGlzLCJvcHRp''@;'; put 'put ''b25zIix7fSksdGhpcy5ob3Q9bH1zZXRPcHRpb25zKGwpe3RoaXMub3B0aW9ucz1sfWdldERhdGEoKXtjb25zdHtzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmQsZW5kQ29sOmh9PXRoaXMuX2dldERhdGFSYW5nZSgpLGY9dGhpcy5vcHRpb25zLHY9W107cmV0dXJuIEdhKGwsZCxNPT57''@;'; put 'put ''Y29uc3QgRD1bXTshZi5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhNKXx8KEdhKGEsaCxaPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oWil8fEQucHVzaCh0aGlzLmhvdC5nZXREYXRhQXRDZWxsKE0sWikpfSksdi5wdXNoKEQpKX0p''@;'; put 'put ''LHZ9Z2V0Um93SGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2NvbnN0e3N0YXJ0Um93OmEsZW5kUm93OmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7R2EoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhp''@;'; put 'put ''ZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMuY29sdW1uSGVhZGVycyl7Y29uc3R7c3RhcnRDb2w6YSxlbmRDb2w6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCks''@;'; put 'put ''aD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTtHYShhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfV9nZXREYXRhUmFuZ2UoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygp''@;'; put 'put ''LTEsYT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtkPTAsaD0wLGY9YSx2PWxdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gZD1NYXRoLm1heChkLDApLGg9TWF0aC5tYXgoaCwwKSxmPU1hdGgubWluKGYsYSksdj1NYXRoLm1pbih2LGwpLHtzdGFydFJvdzpkLHN0YXJ0Q29sOmgsZW5k''@;'; put 'put ''Um93OmYsZW5kQ29sOnZ9fV9pc0hpZGRlblJvdyhsKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9X2lzSGlkZGVuQ29sdW1uKGwpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlz''@;'; put 'put ''LmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX19O2Z1bmN0aW9uIFpnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRDF0KGMpe3ZhciBsPWZ1bmN0aW9uIEkxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6''@;'; put 'put ''TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUUp7c3Rh''@;'; put 'put ''dGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvcGxhaW4iLGZpbGVFeHRlbnNpb246InR4dCIsZmlsZW5hbWU6IkhhbmRzb250YWJsZSBbWVlZWV0tW01NXS1bRERdIixlbmNvZGluZzoidXRmLTgiLGJvbTohMSxjb2x1bW5IZWFkZXJzOiExLHJvd0hlYWRl''@;'; put 'put ''cnM6ITEsZXhwb3J0SGlkZGVuQ29sdW1uczohMSxleHBvcnRIaWRkZW5Sb3dzOiExLHJhbmdlOltdfX1jb25zdHJ1Y3RvcihsLGEpe1pnZSh0aGlzLCJkYXRhUHJvdmlkZXIiLHZvaWQgMCksWmdlKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksdGhpcy5kYXRhUHJvdmlkZXI9bCx0aGlzLm9wdGlv''@;'; put 'put ''bnM9dGhpcy5fbWVyZ2VPcHRpb25zKGEpLHRoaXMuZGF0YVByb3ZpZGVyLnNldE9wdGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKGwpe2xldCBhPW4zKHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtjb25zdCBkPW5ldyBEYXRlO3JldHVybiBhPUV1KG4zKFFKLkRF''@;'; put 'put ''RkFVTFRfT1BUSU9OUyksYSksYT1FdShhLGwpLGEuZmlsZW5hbWU9cCQoYS5maWxlbmFtZSx7WVlZWTpkLmdldEZ1bGxZZWFyKCksTU06YCR7ZC5nZXRNb250aCgpKzF9YC5wYWRTdGFydCgyLCIwIiksREQ6YCR7ZC5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCIwIil9KSxhfX1jb25zdCBSMXQ9''@;'; put 'put ''UUo7ZnVuY3Rpb24gV2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIg''@;'; put 'put ''ZVE9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gVTF0KGMpe3JldHVybiBjLnN0YXJ0c1dpdGgoIj0iKXx8Yy5zdGFydHNXaXRoKCIrIil8fGMuc3RhcnRzV2l0aCgiLSIpfHxjLnN0YXJ0c1dpdGgoIkAiKXx8Yy5zdGFydHNXaXRoKCJcdCIpfHxjLnN0YXJ0c1dpdGgoIlxyIik/YCcke2N9YDpjfWZ1''@;'; put 'put ''bmN0aW9uIFoxdChjLGwpe3JldHVybiBsLnRlc3QoYyk/YCcke2N9YDpjfWNvbnN0IHRRPXtjc3Y6Y2xhc3MgejF0IGV4dGVuZHMgUjF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBMMXQoYyxsKXsoZnVuY3Rpb24gTzF0KGMsbCl7aWYobC5oYXMoYykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZVEpfXN0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIs''@;'; put 'put ''ZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4iLHNhbml0aXplVmFsdWVzOiExfX1leHBvcnQoKXtjb25zdCBsPXRoaXMub3B0aW9ucyxhPXRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKTtsZXQgZD10aGlzLmRhdGFQcm92''@;'; put 'put ''aWRlci5nZXRDb2x1bW5IZWFkZXJzKCk7Y29uc3QgaD1kLmxlbmd0aD4wLGY9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Um93SGVhZGVycygpLHY9Zi5sZW5ndGg+MDtsZXQgTT1sLmJvbT8iXHVmZWZmIjoiIjtyZXR1cm4gaCYmKGQ9eXMoZCxEPT50aGlzLl9lc2NhcGVDZWxsKEQse2ZvcmNlOiEw''@;'; put 'put ''LHNhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKSx2JiYoTSs9bC5jb2x1bW5EZWxpbWl0ZXIpLE0rPWQuam9pbihsLmNvbHVtbkRlbGltaXRlciksTSs9bC5yb3dEZWxpbWl0ZXIpLFluKGEsKEQsWik9PntaPjAmJihNKz1sLnJvd0RlbGltaXRlciksdiYmKE0rPXRoaXMuX2VzY2Fw''@;'; put 'put ''ZUNlbGwoZltaXSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSksTSs9bC5jb2x1bW5EZWxpbWl0ZXIpO2NvbnN0IHJlPUQubWFwKGNlPT50aGlzLl9lc2NhcGVDZWxsKGNlLHtzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSkuam9pbihsLmNvbHVtbkRlbGltaXRlcik7''@;'; put 'put ''TSs9cmV9KSxNfV9lc2NhcGVDZWxsKGwpe2xldHtmb3JjZTphPSExLHNhbml0aXplVmFsdWU6ZD0hMX09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGg9bGMobCk7cmV0dXJuIiI9PT1ofHwoZCYmKGE9ITApLGQgaW5zdGFuY2VvZiBS''@;'; put 'put ''ZWdFeHA/aD1XZ2UoZVEsdGhpcyxaMXQpLmNhbGwodGhpcyxoLGQpOiJmdW5jdGlvbiI9PXR5cGVvZiBkP2g9ZChoKTpkJiYoaD1XZ2UoZVEsdGhpcyxVMXQpLmNhbGwodGhpcyxoKSksKGF8fGguaW5kZXhPZigiXHIiKT49MHx8aC5pbmRleE9mKCciJyk+PTB8fGguaW5kZXhPZigiXG4iKT49''@;'; put 'put ''MHx8aC5pbmRleE9mKHRoaXMub3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpPj0wKSYmKGg9aC5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksaD1gIiR7aH0iYCkpLGh9fX07Y2xhc3MgcTF0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImV4cG9ydEZp''@;'; put 'put ''bGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3dubG9hZEZpbGUobCl7''@;'; put 'put ''bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYSksdj10aGlzLl9jcmVhdGVCbG9iKGYpLE09''@;'; put 'put ''aC5VUkx8fGgud2Via2l0VVJMLEQ9ZC5jcmVhdGVFbGVtZW50KCJhIiksWj1gJHtmLm9wdGlvbnMuZmlsZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1ELmRvd25sb2FkKXtjb25zdCByZT1NLmNyZWF0ZU9iamVjdFVSTCh2KTtELnN0eWxlLmRpc3BsYXk9''@;'; put 'put ''Im5vbmUiLEQuc2V0QXR0cmlidXRlKCJocmVmIixyZSksRC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixaKSxkLmJvZHkuYXBwZW5kQ2hpbGQoRCksRC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJjbGljayIpKSxkLmJvZHkucmVtb3ZlQ2hpbGQoRCksc2V0VGltZW91dCgoKT0+e00u''@;'; put 'put ''cmV2b2tlT2JqZWN0VVJMKHJlKX0sMTAwKX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYih2LFopfV9jcmVhdGVUeXBlRm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2Fy''@;'; put 'put ''Z3VtZW50c1sxXTp7fTtpZighdFFbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9uIEcxdChjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRRW2NdP25ldyB0UVtjXShsLGEpOm51bGx9''@;'; put 'put ''KGwsbmV3IGsxdCh0aGlzLmhvdCksYSl9X2NyZWF0ZUJsb2IobCl7bGV0IGE9bnVsbDtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiYoYT1uZXcgQmxvYihbbC5leHBvcnQoKV0se3R5cGU6YCR7bC5vcHRpb25zLm1pbWVUeXBlfTtjaGFyc2V0PSR7bC5vcHRpb25zLmVuY29kaW5nfWB9KSksYX19''@;'; put 'put ''ZnVuY3Rpb24gbncoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFgxdChjKXt2YXIgbD1mdW5jdGlvbiBKMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEhUe2NvbnN0cnVjdG9yKGwsYSl7bGV0e2lkOmQsc3RhdGVs''@;'; put 'put ''ZXNzOmg9ITB9PWE7bncodGhpcywiaG90Iix2b2lkIDApLG53KHRoaXMsImlkIix2b2lkIDApLG53KHRoaXMsImVsZW1lbnRzIixbXSksbncodGhpcywiaGlkZGVuIiwhMSksbncodGhpcywic3RhdGVJZCIsIiIpLG53KHRoaXMsInN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pZD1k''@;'; put 'put ''LHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1oP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyBwUCl9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50c31yZXNldCgp''@;'; put 'put ''e1luKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRkZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUo''@;'; put 'put ''dGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdl''@;'; put 'put ''dFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgZ2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2Fs''@;'; put 'put ''SG9va3MoKSxZbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fVRsKEhULHkxKTtjb25zdCBOVD17fTtmdW5jdGlvbiByNihjLGwpe2lmKCFOVFtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRp''@;'; put 'put ''dGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOmEsZGVzY3JpcHRvcjpkfT1OVFtjXTtsZXQgaD1sO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3JhdG9yKGgpKSxmdW5jdGlvbihmKXtyZXR1cm4gYS5hcHBseShm''@;'; put 'put ''Lm1ldGEuaW5zdGFuY2UsW10uY29uY2F0KFtmXSxbaF0pKX19ZnVuY3Rpb24gdzkoYyl7aWYoIU5UW2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gTlRbY10uZGVzY3JpcHRvcn1mdW5jdGlvbiBrdShjLGwsYSl7YS5rZXk9''@;'; put 'put ''YyxOVFtjXT17Y29uZGl0aW9uOmwsZGVzY3JpcHRvcjphfX1jb25zdCBFMD0ibm9uZSI7a3UoRTAsZnVuY3Rpb24gUTF0KCl7cmV0dXJuITB9LHtuYW1lOndQLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IFZUPSJlbXB0eSI7a3UoVlQsZnVuY3Rpb24gZWR0KGMpe3Jl''@;'; put 'put ''dHVybiBVYyhjLnZhbHVlKX0se25hbWU6RnEsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgVkY9Im5vdF9lbXB0eSI7a3UoVkYsZnVuY3Rpb24gdGR0KGMsbCl7cmV0dXJuIXI2KFZULGwpKGMpfSx7bmFtZTpIcSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9''@;'; put 'put ''KTtjb25zdCBCVD0iZXEiO2t1KEJULGZ1bmN0aW9uIG5kdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09PWxjKGEpfSx7bmFtZTpOcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBCRj0ibmVx''@;'; put 'put ''IjtrdShCRixmdW5jdGlvbiByZHQoYyxsKXtyZXR1cm4hcjYoQlQsbCkoYyl9LHtuYW1lOlZxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJndCIsZnVuY3Rpb24gaWR0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJz''@;'; put 'put ''ZUZsb2F0KGQsMTApKSxjLnZhbHVlPmR9LHtuYW1lOlpxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJndGUiLGZ1bmN0aW9uIGFkdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1''@;'; put 'put ''ZT49ZH0se25hbWU6V3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImx0IixmdW5jdGlvbiBvZHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8ZH0se25hbWU6WXEsaW5wdXRz''@;'; put 'put ''Q291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImx0ZSIsZnVuY3Rpb24gc2R0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1kfSx7bmFtZTpHcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRv''@;'; put 'put ''cnM6ITB9KTtjb25zdCBuUT0iZGF0ZV9hZnRlciI7a3UoblEsZnVuY3Rpb24gbGR0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPU9vKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZk''@;'; put 'put ''LmRpZmYoaCk+PTB9LHtuYW1lOnFxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHJRPSJkYXRlX2JlZm9yZSI7a3UoclEsZnVuY3Rpb24gY2R0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPU9vKGEsYy5tZXRhLmRh''@;'; put 'put ''dGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9LHtuYW1lOlhxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGpGPSJiZXR3ZWVuIjtrdShqRixmdW5jdGlvbiB1ZHQoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7''@;'; put 'put ''aWYoIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9cGFyc2VGbG9hdChoLDEwKSxNPXBhcnNlRmxvYXQoZiwxMCk7aD1NYXRoLm1pbih2LE0pLGY9TWF0aC5tYXgodixNKX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXI2KHJRLFtmXSksTT1yNihuUSxbaF0p''@;'; put 'put ''O3JldHVybiB2KGMpJiZNKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTokcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBYZ2U9Im5vdF9iZXR3ZWVuIjtrdShYZ2UsZnVuY3Rpb24gZGR0KGMsbCl7cmV0dXJuIXI2KGpGLGwpKGMpfSx7bmFt''@;'; put 'put ''ZTpLcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBKZ2U9ImJlZ2luc193aXRoIjtrdShKZ2UsZnVuY3Rpb24gaGR0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgobGMoYSkp''@;'; put 'put ''fSx7bmFtZTpCcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrdSgiZW5kc193aXRoIixmdW5jdGlvbiBmZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgobGMoYSkpfSx7bmFtZTpqcSxp''@;'; put 'put ''bnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBpUT0iY29udGFpbnMiO2t1KGlRLGZ1bmN0aW9uIHBkdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5pbmRleE9mKGxjKGEpKT49MH0se25hbWU6enEs''@;'; put 'put ''aW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZTVlPSJub3RfY29udGFpbnMiO2t1KGU1ZSxmdW5jdGlvbiBnZHQoYyxsKXtyZXR1cm4hcjYoaVEsbCkoYyl9LHtuYW1lOlVxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHQ1ZT0iZGF0ZV90b21v''@;'; put 'put ''cnJvdyI7a3UodDVlLGZ1bmN0aW9uIG1kdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpRcSxpbnB1dHNDb3VudDow''@;'; put 'put ''fSk7Y29uc3QgbjVlPSJkYXRlX3RvZGF5IjtrdShuNWUsZnVuY3Rpb24gdmR0KGMpe2NvbnN0IGw9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoT28oKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpKcSxpbnB1dHNDb3VudDow''@;'; put 'put ''fSk7Y29uc3QgcjVlPSJkYXRlX3llc3RlcmRheSI7a3UocjVlLGZ1bmN0aW9uIGJkdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3VidHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9''@;'; put 'put ''LHtuYW1lOmVYLGlucHV0c0NvdW50OjB9KTtjb25zdCBhNWU9e251bWVyaWM6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLCJndCIsImd0ZSIsImx0IiwibHRlIixqRixYZ2VdLHRleHQ6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLEpnZSwiZW5kc193aXRoIixzcyxpUSxlNWVdLGRhdGU6W0Uw''@;'; put 'put ''LHNzLFZULFZGLHNzLEJULEJGLHNzLHJRLG5RLGpGLHNzLHQ1ZSxuNWUscjVlXX07ZnVuY3Rpb24galQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIENkdChjKXt2YXIgbD1mdW5jdGlvbiBTZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNvbnN0IGFRPSJidWlsdCIsb1E9ImJ1aWxkaW5nIixvNWU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXTtjbGFzcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6''@;'; put 'put ''IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2IixjaGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1jb25zdHJ1Y3RvcihsLGEpe2pUKHRoaXMsImhvdCIsdm9pZCAwKSxqVCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBqMih0aGlzKSksalQodGhpcywib3B0aW9ucyIsdm9pZCAwKSxqVCh0aGlzLCJfZWxl''@;'; put 'put ''bWVudCIsdm9pZCAwKSxqVCh0aGlzLCJidWlsZFN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5vcHRpb25zPUV1KEhoLkRFRkFVTFRTLGEpLHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlz''@;'; put 'put ''Lm9wdGlvbnMudGFnTmFtZSl9c2V0VmFsdWUobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09b1E/dGhpcy5fZWxlbWVudDp0aGlzLmJ1''@;'; put 'put ''aWxkU3RhdGU9PT1hUT8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRlPW9RLHRoaXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9YVEsdGhpcy5fZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1hUX10cmFuc2xhdGVJZlBvc3Np''@;'; put 'put ''YmxlKGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKHExKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShhLGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhv''@;'; put 'put ''b2tzKGQsaCx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1vUSksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnRhYkluZGV4JiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgi''@;'; put 'put ''dGFiaW5kZXgiLHRoaXMub3B0aW9ucy50YWJJbmRleCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJyb2xlIix0aGlzLm9wdGlvbnMucm9sZSksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmVGkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlv''@;'; put 'put ''bnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKVluKHRoaXMub3B0aW9ucy5jaGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxlbWVudCkpO2Vsc2UgaWYodGhpcy5vcHRpb25zLndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7YS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksWG8odGhpcy5vcHRpb25zLChkLGgpPT57dm9pZCAwIT09YVtoXSYmImNsYXNzTmFtZSIhPT1oJiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09aCYmKGFb''@;'; put 'put ''aF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksWW4obzVlLGQ9PmwoYSxkKSl9ZWxzZSBZbihvNWUsYT0+bCh0aGlzLl9lbGVtZW50LGEpKX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhpcy51cGRh''@;'; put 'put ''dGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5ob3Q9bnVs''@;'; put 'put ''bCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fWZ1bmN0aW9uIHM1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gekYoYyxsKXtyZXR1cm4gYy5nZXQoc1EoYyxsKSl9ZnVuY3Rpb24gc1EoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKEhoLHkxKTt2YXIgcnc9bmV3IFdlYWtNYXAsbDVlPW5ldyBXZWFrU2V0O2NsYXNzIGk2IGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxU''@;'; put 'put ''Uygpe3JldHVybiBuMyh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQiLHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KGk2LkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBNZHQoYyxsKXtzNWUoYyxsKSxsLmFkZChjKX0odGhpcyxsNWUpLGZ1''@;'; put 'put ''bmN0aW9uIHhkdChjLGwsYSl7czVlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxydyx2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PnNRKGw1ZSx0aGlzLFRkdCkuY2FsbCh0aGlzLGwpKX1idWlsZCgpe3N1cGVy''@;'; put 'put ''LmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7KGZ1bmN0aW9uIEVkdChjLGwsYSl7Yy5zZXQoc1EoYyxsKSxhKX0pKHJ3LHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKSxUaSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxU''@;'; put 'put ''aShsLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoekYocncsdGhpcykudHlwZT10aGlzLm9wdGlvbnMudHlwZSx6Rihydyx0aGlzKS5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlm''@;'; put 'put ''UG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSx6Rihydyx0aGlzKS52YWx1ZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnZhbHVlKSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmekYocncsdGhpcykuZm9jdXMoKX19ZnVuY3Rpb24gVGR0KGMpe3RoaXMu''@;'; put 'put ''b3B0aW9ucy52YWx1ZT1jLnRhcmdldC52YWx1ZX1mdW5jdGlvbiB6VChjLGwsYSl7YzVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3''@;'; put 'put ''aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGl3KGMsbCxhKXtyZXR1cm4gYy5zZXQoVVQoYyxsKSxhKSxhfWZ1bmN0aW9uICRjKGMsbCl7cmV0dXJuIGMuZ2V0KFVUKGMsbCkpfWZ1bmN0aW9uIFVUKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZzA9bmV3IFdlYWtNYXAsVUY9bmV3IFdlYWtNYXAsWkY9bmV3IFdlYWtNYXAsbFE9bmV3IFdlYWtNYXAsV0Y9bmV3''@;'; put 'put ''IFdlYWtNYXAsWUY9bmV3IFdlYWtTZXQ7Y2xhc3MgWlQgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6Imh0VUlTZWxlY3QiLHdyYXBJdDohMSx0YWJJbmRleDotMX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShaVC5ERUZBVUxUUyxh''@;'; put 'put ''KSksZnVuY3Rpb24gQWR0KGMsbCl7YzVlKGMsbCksbC5hZGQoYyl9KHRoaXMsWUYpLHpUKHRoaXMsZzAsbnVsbCkselQodGhpcyxVRixbXSkselQodGhpcyxaRix2b2lkIDApLHpUKHRoaXMsbFEsdm9pZCAwKSx6VCh0aGlzLFdGLHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0TWVu''@;'; put 'put ''dSgpe3JldHVybiAkYyhnMCx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+VVQoWUYsdGhpcyxJZHQpLmNhbGwodGhpcykpfXNldEl0ZW1zKGwpe2l3KFVGLHRoaXMsdGhpcy50cmFuc2xhdGVOYW1lcyhsKSksJGMoZzAsdGhpcykmJiRjKGcwLHRo''@;'; put 'put ''aXMpLnNldE1lbnVJdGVtcygkYyhVRix0aGlzKSl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIFluKGwsYT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1lKX0pLGx9YnVpbGQoKXtzdXBlci5idWlsZCgpLGl3KGcwLHRoaXMsbmV3IHFfKHRoaXMuaG90LHtjbGFzc05h''@;'; put 'put ''bWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyfSkpLCRjKGcwLHRoaXMpLnNldE1lbnVJdGVtcygkYyhVRix0aGlzKSk7Y29uc3QgbD1uZXcgSGgo''@;'; put 'put ''dGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pO2l3KFpGLHRoaXMsbCksaXcobFEsdGhpcyxsLmVsZW1lbnQpLGl3KFdGLHRoaXMsYSksdGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5hcmlhVGFncyYmKHZvKGEuZWxlbWVudCxbVjcoKV0pLHZvKHRoaXMuX2VsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXV0pKSxZbihbbCxhXSxkPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLCRjKGcwLHRoaXMpLmFkZExvY2FsSG9vaygic2VsZWN0IixkPT5VVChZ''@;'; put 'put ''Rix0aGlzLGtkdCkuY2FsbCh0aGlzLGQpKSwkYyhnMCx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5VVChZRix0aGlzLERkdCkuY2FsbCh0aGlzKSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2xldCBsO2w9dGhpcy5vcHRpb25z''@;'; put 'put ''LnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOiRjKGcwLHRoaXMpLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHdQKSwkYyhsUSx0aGlzKS50ZXh0Q29udGVudD1sLHN1cGVyLnVwZGF0ZSgpfW9wZW5PcHRpb25zKCl7Y29uc3QgbD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCk7JGMoZzAsdGhpcykmJigkYyhnMCx0aGlzKS5vcGVuKCksJGMoZzAsdGhpcykuc2V0UG9zaXRpb24oe2xlZnQ6dGhpcy5ob3QuaXNMdHIoKT9sLmxlZnQtNTpsLmxlZnQtMzEsdG9wOmwudG9wLTEsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KSwkYyhnMCx0aGlzKS5nZXRO''@;'; put 'put ''YXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpLCRjKGcwLHRoaXMpLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazphPT57dGhpcy5jbG9zZU9wdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoInRhYktleWRvd24iLGEpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSkpfWNsb3NlT3B0aW9ucygpeyRjKGcwLHRoaXMpJiYkYyhnMCx0aGlzKS5jbG9zZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnRoaXMuZWxlbWVudC5mb2N1cygpfWRl''@;'; put 'put ''c3Ryb3koKXskYyhnMCx0aGlzKSYmKCRjKGcwLHRoaXMpLmRlc3Ryb3koKSxpdyhnMCx0aGlzLG51bGwpKSwkYyhaRix0aGlzKSYmJGMoWkYsdGhpcykuZGVzdHJveSgpLCRjKFdGLHRoaXMpJiYkYyhXRix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrZHQoYyl7''@;'; put 'put ''Yy5uYW1lIT09c3MmJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLnVwZGF0ZSgpLHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0Iix0aGlzLm9wdGlvbnMudmFsdWUpKX1mdW5jdGlvbiBEZHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1mdW5jdGlvbiBJZHQoKXt0aGlz''@;'; put 'put ''Lm9wZW5PcHRpb25zKCl9ZnVuY3Rpb24gdTVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPZHQoYyl7dmFyIGw9ZnVuY3Rpb24gUGR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBkNWUoYyxsLGEpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBjUT1uZXcgV2Vha1NldDtjbGFzcyB1USBleHRl''@;'; put 'put ''bmRzIEhUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBSZHQoYyxsKXsoZnVuY3Rpb24gTGR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsY1EpLHU1ZSh0aGlzLCJuYW1lIiwiIiksdTVlKHRoaXMsImFkZFNlcGFyYXRvciIsITEpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBhcmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50cy5w''@;'; put 'put ''dXNoKG5ldyBaVCh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6Y1h9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6dVh9KSksdGhp''@;'; put 'put ''cy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixsPT5kNWUoY1EsdGhpcyxGZHQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJh''@;'; put 'put ''ZnRlckNsb3NlIikpLmFkZExvY2FsSG9vaygidGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3RUYWJLZXlkb3duIixsKSksWW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT5kNWUoY1EsdGhpcyxIZHQpLmNhbGwo''@;'; put 'put ''dGhpcyxhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9bjMobC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aChXYykmJihhLm5hbWU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhLm5hbWUpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5z''@;'; put 'put ''ZXRWYWx1ZShhKSxZbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtjb25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFsdWUoZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ciOiJoaWRlIl0oKSxofHx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1l''@;'; put 'put ''b3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fHc5KEUwKSxhPVtdO3JldHVybiBZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxoKT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFs''@;'; put 'put ''dWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPXc5KGw/bC5uYW1lOkUwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtjb21tYW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8fFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0''@;'; put 'put ''VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIFpUKVswXX1nZXRJbnB1dEVsZW1lbnQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDty''@;'; put 'put ''ZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRzKClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgaTYpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1h''@;'; put 'put ''bmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57VGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJlRpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7''@;'; put 'put ''Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFlu''@;'; put 'put ''KHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bGV0IGE9W3c5KEUwKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7''@;'; put 'put ''YT1mdW5jdGlvbiB3ZHQoYyl7Y29uc3QgbD1bXTtsZXQgYT1jO3JldHVybiBhNWVbYV18fChhPSJ0ZXh0IiksWW4oYTVlW2FdLGQ9PntsZXQgaDtoPWQ9PT1zcz97bmFtZTpzc306bjModzkoZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3Vu''@;'; put 'put ''dFJvd3MoKSxkKSl9WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9fWZ1bmN0aW9uIEZkdChjKXtZbih0aGlz''@;'; put 'put ''LmdldElucHV0RWxlbWVudHMoKSwobCxhKT0+e2xbYy5pbnB1dHNDb3VudD5hPyJzaG93IjoiaGlkZSJdKCksMD09PWEmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmwuZm9jdXMoKSwxMCl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYyl9ZnVuY3Rpb24gSGR0KGMpe3Vf''@;'; put 'put ''KGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEIyKGMpKX1jb25zdCBXVD17fTtmdW5jdGlvbiBWZHQoYyl7cmV0dXJuIFdUW2NdLm5hbWV9ZnVuY3Rpb24gZFEoYyxsLGEpe1dUW2NdPXtuYW1lOmwsZnVuYzphfX1jb25zdCBhNj0iY29uanVuY3Rp''@;'; put 'put ''b24iO2RRKGE2LHJYLGZ1bmN0aW9uIGpkdChjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9KTtjb25zdCBHRj0iZGlzanVuY3Rpb24iO2RRKEdGLENQLGZ1bmN0aW9uIFVkdChjLGwpe3JldHVybiBjLnNvbWUoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IGhRPSJkaXNqdW5jdGlvbldp''@;'; put 'put ''dGhFeHRyYUNvbmRpdGlvbiI7ZnVuY3Rpb24gaDVlKGMsbCxhKXsoZnVuY3Rpb24gWWR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBZVChjLGwpe3JldHVybiBjLmdldChwNWUoYyxsKSl9ZnVuY3Rpb24gZjVlKGMsbCxhKXtyZXR1cm4gYy5zZXQocDVlKGMsbCksYSksYX1mdW5jdGlvbiBwNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWRRKGhRLENQLGZ1bmN0aW9uIFdkdChjLGwpe2lmKGMubGVuZ3RoPDMpdGhyb3cgRXJyb3IoIk9wZXJhdGlvbiBkb2Vzbid0IHdvcmsg''@;'; put 'put ''b24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuIik7cmV0dXJuIGMuc2xpY2UoMCxjLmxlbmd0aC0xKS5zb21lKGE9PmEuZnVuYyhsKSkmJmNbYy5sZW5ndGgtMV0uZnVuYyhsKX0pO3ZhciBhdz1uZXcgV2Vha01hcCxmUT1uZXcgV2Vha01hcDtjbGFzcyAkRiBleHRlbmRzIEhoe3N0YXRp''@;'; put 'put ''YyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KCRGLkRFRkFVTFRTLGEpKSxoNWUodGhpcyxhdyx2b2lkIDApLGg1ZSh0aGlzLGZR''@;'; put 'put ''LHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7bC50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSxsLmh0bWxGb3I9''@;'; put 'put ''dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSxmNWUoZlEsdGhpcyxsKSxmNWUoYXcsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLFlUKGF3LHRoaXMpLmNoZWNrZWQ9dGhpcy5vcHRpb25zLmNoZWNrZWQsdGhpcy5fZWxlbWVudC5hcHBl''@;'; put 'put ''bmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoWVQoZlEsdGhpcykudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCkpfWlzQ2hlY2tlZCgpe3JldHVybiEhdGhpcy5pc0J1aWx0''@;'; put 'put ''KCkmJllUKGF3LHRoaXMpLmNoZWNrZWR9c2V0Q2hlY2tlZCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5pc0J1aWx0KCkmJihZVChhdyx0aGlzKS5jaGVja2VkPWwpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkm''@;'; put 'put ''JllUKGF3LHRoaXMpLmZvY3VzKCl9fXZhciBtNWU9bmV3IFdlYWtTZXQ7Y2xhc3MgUWR0IGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIEdkdChjLGwpeyhmdW5jdGlvbiAkZHQoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxtNWUpLGZ1bmN0aW9uIEtkdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcWR0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIFhkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tl''@;'; put 'put ''eTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oVGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3JzIiksWW4odGhpcy5lbGVtZW50cyxkPT5h''@;'; put 'put ''LmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBsPVthNixHRl07WW4obCxhPT57Y29uc3QgZD1uZXcgJEYodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7aHRtbEZvcjphLHRleHRDb250ZW50OlZkdChhKX0sdmFsdWU6YSxj''@;'; put 'put ''aGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT5mdW5jdGlvbiBKZHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZh''@;'; put 'put ''dGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShtNWUsdGhpcyxlaHQpLmNhbGwodGhpcyxoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVsZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9yKGdsYFJhZGlvIGJ1dHRvbiB3''@;'; put 'put ''aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtZbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1lbnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mICRGJiZhLmlzQ2hlY2tlZCgpKTty''@;'; put 'put ''ZXR1cm4gbD9sLmdldFZhbHVlKCk6YTZ9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpfXNldFN0YXRlKGwpe3RoaXMucmVzZXQoKSxsJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1sJiZZbih0aGlzLmVsZW1lbnRzLGE9PnthLnNldENoZWNrZWQo''@;'; put 'put ''YS5nZXRWYWx1ZSgpPT09bCl9KX11cGRhdGVTdGF0ZSgpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTphNjtkPT09aFEmJihkPUdGKSx0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1l''@;'; put 'put ''bnRzWzFdOnZvaWQgMCxkKX1yZXNldCgpe3RoaXMuc2V0Q2hlY2tlZCgwKX19ZnVuY3Rpb24gZWh0KGMpe3RoaXMuc2V0U3RhdGUoYy50YXJnZXQudmFsdWUpfWZ1bmN0aW9uIG5odChjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1hJiYoYT1gKCR7bH0pYCksYX1mdW5jdGlvbiBHVChjKXtjb25z''@;'; put 'put ''dCBsPW5ldyBTZXQoYyk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmhhcyhhKX19ZnVuY3Rpb24gcFEoYyl7cmV0dXJuIGM/PyIifWZ1bmN0aW9uIGdRKGMpe3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYykpLm1hcChsPT5wUShsKSkuc29ydCgobCxhKT0+Im51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBsJiYibnVtYmVyIj09dHlwZW9mIGE/bC1hOmw9PT1hPzA6bD5hPzE6LTEpfWZ1bmN0aW9uIHY1ZShjLGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09PWw7bGV0IHY7cmV0dXJuIGZ8fCh2PUdUKGwpKSxjLmZvckVhY2goTT0+e2xldCBEPSExOyhmfHx2KE0pKSYmKEQ9ITApO2NvbnN0IFo9e2No''@;'; put 'put ''ZWNrZWQ6RCx2YWx1ZTpNLHZpc3VhbFZhbHVlOm5odChNLGEpfTtkJiZkKFopLGgucHVzaChaKX0pLGh9ZnVuY3Rpb24gbVEoYyxsKXtyZXR1cm4gYy5nZXQoYjVlKGMsbCkpfWZ1bmN0aW9uIGI1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9cTJlKCk7dmFyICRUPW5ldyBXZWFrTWFwO2NsYXNzIEtUIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVy''@;'; put 'put ''biBuMyh7aHJlZjoiIyIsdGFnTmFtZToiYSIsdGFiSW5kZXg6LTEscm9sZToiYnV0dG9uIn0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShLVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gcmh0KGMsbCxhKXsoZnVuY3Rpb24gaWh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcywkVCx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxmdW5jdGlvbiBhaHQoYyxsLGEpe2Muc2V0KGI1ZShjLGwpLGEp''@;'; put 'put ''fSgkVCx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihtUSgkVCx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmbVEo''@;'; put 'put ''JFQsdGhpcykuZm9jdXMoKX1hY3RpdmF0ZSgpe21RKCRULHRoaXMpLmNsaWNrKCl9fWZ1bmN0aW9uIG93KGMsbCxhKXt5NWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHk1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l''@;'; put 'put ''IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gam8oYyxsKXtyZXR1cm4gYy5nZXQoc3coYyxsKSl9ZnVuY3Rpb24gbTMoYyxsLGEpe3JldHVybiBjLnNldChzdyhjLGwpLGEpLGF9ZnVuY3Rpb24gc3coYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''P2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IF81ZT0ibXVsdGlwbGVTZWxlY3QuaXRlbUJveCI7dmFyIHYzPW5ldyBXZWFr''@;'; put 'put ''TWFwLHV1PW5ldyBXZWFrTWFwLHZRPW5ldyBXZWFrTWFwLEhnPW5ldyBXZWFrTWFwLG82PW5ldyBXZWFrTWFwLHM2PW5ldyBXZWFrTWFwLHFUPW5ldyBXZWFrU2V0O2NsYXNzIFhUIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7Y2xhc3NOYW1lOiJodFVJTXVs''@;'; put 'put ''dGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KFhULkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBvaHQoYyxsKXt5NWUoYyxsKSxsLmFkZChjKX0odGhpcyxxVCksb3codGhpcyx2MyxbXSksb3codGhpcyx1dSx2b2lkIDApLG93KHRoaXMsdlEsdm9pZCAw''@;'; put 'put ''KSxvdyh0aGlzLEhnLHZvaWQgMCksb3codGhpcyxvNix2b2lkIDApLG93KHRoaXMsczYsdm9pZCAwKSxtMyhIZyx0aGlzLG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6bFgsY2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3RTZWFyY2gifSkpLG0zKG82LHRoaXMsbmV3IEtUKHRoaXMu''@;'; put 'put ''aG90LHt0ZXh0Q29udGVudDppWCxjbGFzc05hbWU6Imh0VUlTZWxlY3RBbGwifSkpLG0zKHM2LHRoaXMsbmV3IEtUKHRoaXMuaG90LHt0ZXh0Q29udGVudDphWCxjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0SXRlbXNCb3goKXtyZXR1cm4gam8o''@;'; put 'put ''dXUsdGhpcyl9cmVnaXN0ZXJIb29rcygpe2pvKEhnLHRoaXMpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+c3cocVQsdGhpcyxsaHQpLmNhbGwodGhpcyxsKSksam8oSGcsdGhpcykuYWRkTG9jYWxIb29rKCJpbnB1dCIsbD0+c3cocVQsdGhpcyxzaHQpLmNhbGwodGhpcyxsKSksam8obzYs''@;'; put 'put ''dGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+c3cocVQsdGhpcyxjaHQpLmNhbGwodGhpcyxsKSksam8oczYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+c3cocVQsdGhpcyx1aHQpLmNhbGwodGhpcyxsKSl9c2V0SXRlbXMobCl7dmFyIGE7bTModjMsdGhpcyxsKSxudWxsPT09''@;'; put 'put ''KGE9am8odXUsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmxvYWREYXRhKGpvKHYzLHRoaXMpKX1zZXRMb2NhbGUobCl7bTModlEsdGhpcyxsKX1nZXRMb2NhbGUoKXtyZXR1cm4gam8odlEsdGhpcyl9Z2V0SXRlbXMoKXtyZXR1cm5bLi4uam8odjMsdGhpcyldfWdldFZhbHVlKCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIGhodChjKXtjb25zdCBsPVtdO3JldHVybiBjLmZvckVhY2goYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0oam8odjMsdGhpcykpfWdldFNlYXJjaElucHV0RWxlbWVudCgpe3JldHVybiBqbyhIZyx0aGlzKX1nZXRTZWxlY3RBbGxFbGVtZW50KCl7cmV0dXJuIGpv''@;'; put 'put ''KG82LHRoaXMpfWdldENsZWFyQWxsRWxlbWVudCgpe3JldHVybiBqbyhzNix0aGlzKX1pc1NlbGVjdGVkQWxsVmFsdWVzKCl7cmV0dXJuIGpvKHYzLHRoaXMpLmxlbmd0aD09PXRoaXMuZ2V0VmFsdWUoKS5sZW5ndGh9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDps''@;'; put 'put ''fT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbam8obzYsdGhpcyksam8oczYsdGhpcyldfSk7dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChqbyhIZyx0aGlzKS5l''@;'; put 'put ''bGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKTtjb25zdCBoPWY9Pnt2YXIgdjtpZighdGhpcy5fZWxlbWVudClyZXR1cm47bnVsbD09PSh2PWpvKHV1LHRoaXMpKXx8dm9pZCAwPT09dnx8di5kZXN0cm95KCks''@;'; put 'put ''VGkoZiwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksbTModXUsdGhpcyxuZXcgdGhpcy5ob3QuY29uc3RydWN0b3IoZix7ZGF0YTpqbyh2Myx0aGlzKSxjb2x1bW5zOlt7ZGF0YToiY2hlY2tlZCIsdHlwZToiY2hlY2tib3giLGxhYmVsOntwcm9wZXJ0eToidmlzdWFsVmFsdWUiLHBvc2l0aW9u''@;'; put 'put ''OiJhZnRlciJ9fV0sYmVmb3JlUmVuZGVyZXI6KFoscmUsY2UsYmUsRWUsQmUpPT57Wi50aXRsZT1CZS5pbnN0YW5jZS5nZXREYXRhQXRSb3dQcm9wKHJlLEJlLmxhYmVsLnByb3BlcnR5KX0sYWZ0ZXJMaXN0ZW46KCk9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImZvY3VzIix0aGlzKX0sYmVmb3Jl''@;'; put 'put ''T25DZWxsTW91c2VVcDooKT0+e2pvKHV1LHRoaXMpLmxpc3RlbigpfSxtb2RpZnlDb2xXaWR0aDpaPT57Y29uc3QgcmU9am8odXUsdGhpcykuY29udGFpbmVyLnNjcm9sbFdpZHRoLWYwKGwpO3JldHVybiB2b2lkIDAhPT1aJiZaPHJlP3JlOlp9LG1heENvbHM6MSxhdXRvV3JhcENvbDohMCxo''@;'; put 'put ''ZWlnaHQ6MTEwLGNvcHlQYXN0ZTohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixmaWxsSGFuZGxlOiExLGZyYWdtZW50U2VsZWN0aW9uOiJjZWxsIix0YWJNb3Zlczp7cm93OjEsY29sOjB9LHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksbGF5b3V0RGly''@;'; put 'put ''ZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSksam8odXUsdGhpcykuaW5pdCgpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChaLHJlKT0+e3JlfHxqbyh1dSx0aGlzKS51c2VUaGVtZShaKX0pO2NvbnN0IEQ9am8odXUsdGhpcykuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpO0QucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiVGFiIl0pLEQucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiU2hpZnQiLCJUYWIiXSksRC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6Wj0+e3RoaXMucnVuTG9jYWxIb29rcygi''@;'; put 'put ''a2V5ZG93biIsWix0aGlzKX0sZ3JvdXA6XzVlfSksRC5hZGRTaG9ydGN1dCh7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOlo9Pntqbyh1dSx0aGlzKS5kZXNlbGVjdENlbGwoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLFosdGhpcyksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJsaXN0VGFiS2V5ZG93biIsWix0aGlzKX0sZ3JvdXA6XzVlfSl9O2goYSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+aChhKSwxMDApfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJmpvKHV1LHRoaXMpLmxpc3RlbigpfXJlc2V0KCl7am8oSGcsdGhpcykucmVzZXQoKSxq''@;'; put 'put ''byhvNix0aGlzKS5yZXNldCgpLGpvKHM2LHRoaXMpLnJlc2V0KCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihqbyh1dSx0aGlzKS5sb2FkRGF0YShmdW5jdGlvbiBkaHQoYyxsKXtjb25zdCBhPUdUKGwpO3JldHVybiBjLm1hcChkPT4oZC5jaGVja2VkPWEoZC52YWx1ZSksZCkpfShqbyh2''@;'; put 'put ''Myx0aGlzKSx0aGlzLm9wdGlvbnMudmFsdWUpKSxzdXBlci51cGRhdGUoKSl9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD1qbyh1dSx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLGpvKEhnLHRoaXMpLmRlc3Ryb3koKSxqbyhzNix0aGlzKS5kZXN0cm95KCksam8obzYsdGhpcyku''@;'; put 'put ''ZGVzdHJveSgpLG0zKEhnLHRoaXMsbnVsbCksbTMoczYsdGhpcyxudWxsKSxtMyhvNix0aGlzLG51bGwpLG0zKHV1LHRoaXMsbnVsbCksbTModjMsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHNodChjKXtjb25zdCBsPWMudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJD''@;'; put 'put ''YXNlKHRoaXMuZ2V0TG9jYWxlKCkpO2xldCBhO2E9IiI9PT1sP1suLi5qbyh2Myx0aGlzKV06am8odjMsdGhpcykuZmlsdGVyKGQ9PmAke2QudmFsdWV9YC50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKS5pbmRleE9mKGwpPj0wKSxqbyh1dSx0aGlzKS5sb2FkRGF0YShhKX1m''@;'; put 'put ''dW5jdGlvbiBsaHQoYyl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixjLHRoaXMpLEkkKHVfLGMua2V5Q29kZSkoIkFSUk9XX0RPV04iKSYmKGMucHJldmVudERlZmF1bHQoKSxCMihjKSxqbyh1dSx0aGlzKS5saXN0ZW4oKSxqbyh1dSx0aGlzKS5zZWxlY3RDZWxsKDAsMCkpfWZ1bmN0''@;'; put 'put ''aW9uIGNodChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxqbyh1dSx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMCxsLnB1c2goUEsoYSxkKVswXSl9KSxqbyh1dSx0aGlzKS5zZXRTb3VyY2VEYXRhQXRDZWxsKGwpfWZ1bmN0aW9uIHVo''@;'; put 'put ''dChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxqbyh1dSx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMSxsLnB1c2goUEsoYSxkKVswXSl9KSxqbyh1dSx0aGlzKS5zZXRTb3VyY2VEYXRhQXRDZWxsKGwpfWNvbnN0IEM5PSJieV92YWx1''@;'; put 'put ''ZSI7ZnVuY3Rpb24gS0YoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWt1KEM5''@;'; put 'put ''LGZ1bmN0aW9uIGZodChjLGwpe2xldFthXT1sO3JldHVybiBhKGMudmFsdWUpfSx7bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3IoYyl7bGV0W2xdPWM7cmV0dXJuW0dUKGwpXX0sc2hvd09wZXJhdG9yczohMX0pO3ZhciBDNWUsSlQ9bmV3IFdlYWtT''@;'; put 'put ''ZXQ7Y2xhc3MgeWh0IGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIHBodChjLGwpeyhmdW5jdGlvbiBnaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxKVCksZnVuY3Rpb24gbWh0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2aHQoYyl7dmFyIGw9ZnVuY3Rpb24gYmh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly''@;'; put 'put ''ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p''@;'; put 'put ''dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi''@;'; put 'put ''bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBYVCh0aGlzLmhvdCkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVu''@;'; put 'put ''dCgpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+S0YoSlQsdGhpcyxfaHQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIsbCkpLHRoaXMuaG90LmFkZEhvb2soIm1vZGlmeUZpbHRlcnNN''@;'; put 'put ''dWx0aVNlbGVjdFZhbHVlIiwobCxhKT0+S0YoSlQsdGhpcyx3aHQpLmNhbGwodGhpcyxsLGEpKX1nZXRFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTtyZXR1cm5bbC5nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKSxsLmdldFNlbGVjdEFsbEVsZW1lbnQo''@;'; put 'put ''KSxsLmdldENsZWFyQWxsRWxlbWVudCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCldfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5PT09Qzkpe2NvbnN0IGE9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRl''@;'; put 'put ''bXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJue2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMo''@;'; put 'put ''KXx8IWEubGVuZ3RoP0UwOkM5fSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsdixNKT0+e2NvbnN0W0RdPUltKGgsY2U9PmNlLm5hbWU9PT1DOSksWj17fSxyZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFNQ''@;'; put 'put ''KTtpZihEKXtjb25zdCBjZT12KGQsTSksYmU9eXMoY2UsZHQ9PmR0LnZhbHVlKSxFZT1uZXcgTWFwKGNlLm1hcChkdD0+W2R0LnZhbHVlLHRoaXMuaG90LmdldENlbGxNZXRhKGR0Lm1ldGEudmlzdWFsUm93LGR0Lm1ldGEudmlzdWFsQ29sKV0pKSxCZT1nUShiZSk7ZiYmKEQuYXJnc1swXT1m''@;'; put 'put ''KTtjb25zdCBxZT1bXSxydD12NWUoQmUsRC5hcmdzWzBdLHJlLGR0PT57ZHQuY2hlY2tlZCYmcWUucHVzaChkdC52YWx1ZSksS0YoSlQsdGhpcyx3NWUpLmNhbGwodGhpcyxkdCxFZSl9KTtaLmxvY2FsZT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29s''@;'; put 'put ''dW1uKS5sb2NhbGUsWi5hcmdzPVtxZV0sWi5jb21tYW5kPXc5KEM5KSxaLml0ZW1zU25hcHNob3Q9cnR9ZWxzZSBaLmFyZ3M9W10sWi5jb21tYW5kPXc5KEUwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChkLFopfTthKGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGwuZWRpdGVk''@;'; put 'put ''Q29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5KSxsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgmJmEobC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLGwuZGVwZW5kZW50Q29uZGl0aW9u''@;'; put 'put ''U3RhY2tzWzBdLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSxsLmVkaXRlZENvbmRpdGlvblN0YWNrKX1nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIFhUKVsw''@;'; put 'put ''XX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2KT0+e1RpKGEucGFyZW50Tm9kZSwiaHRG''@;'; put 'put ''aWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUo''@;'; put 'put ''Imdob3N0LXRhYmxlIil8fFluKHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoU1ApLGE9dGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpLGQ9YS5tYXAoRD0+RC52YWx1''@;'; put 'put ''ZSksaD1uZXcgTWFwKGEubWFwKEQ9PltELnZhbHVlLEQubWV0YV0pKSxmPWdRKGQpLHY9djVlKGYsZixsLEQ9PntLRihKVCx0aGlzLHc1ZSkuY2FsbCh0aGlzLEQsaCl9KTt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKHYpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRN''@;'; put 'put ''dWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShmKTtjb25zdCBNPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PU0mJnRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90LmdldENlbGxNZXRh''@;'; put 'put ''KDAsTS52aXN1YWxJbmRleCkubG9jYWxlKX1fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtyZXR1cm4gbnVsbD09PWw/W106eXModGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwudmlzdWFsSW5k''@;'; put 'put ''ZXgpLChhLGQpPT4oe3ZhbHVlOnBRKGEpLG1ldGE6dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxsLnZpc3VhbEluZGV4KX0pKX19ZnVuY3Rpb24gX2h0KGMpe3VfKGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEIyKGMpKX1mdW5jdGlvbiB3NWUoYyxs''@;'; put 'put ''KXt0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIpJiYoYy52aXN1YWxWYWx1ZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLGMudmlzdWFsVmFsdWUsbC5nZXQoYy52YWx1ZSkpKX1mdW5jdGlvbiB3aHQoYyxs''@;'; put 'put ''KXtyZXR1cm4ibnVtZXJpYyI9PT1sLnR5cGU/ZzRlKGMsbCk6Y312YXIgUzVlPW5ldyBXZWFrU2V0O2NsYXNzIFFUIGV4dGVuZHMgSFR7c3RhdGljIGdldCBCVVRUT05fT0soKXtyZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9OX0NBTkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSxmdW5jdGlvbiBDaHQoYyxsKXsoZnVuY3Rpb24gU2h0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsUzVlKSxmdW5jdGlvbiBNaHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhodChjKXt2YXIgbD1mdW5jdGlvbiBFaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlz''@;'; put 'put ''LCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGk2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOm9YLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50aWZpZXI6UVQuQlVUVE9OX09LfSkpLHRoaXMuZWxlbWVudHMu''@;'; put 'put ''cHVzaChuZXcgaTYodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6c1gsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25DYW5jZWwiLGlkZW50aWZpZXI6UVQuQlVUVE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7WW4odGhpcy5lbGVt''@;'; put 'put ''ZW50cyxsPT57bC5hZGRMb2NhbEhvb2soImNsaWNrIiwoYSxkKT0+ZnVuY3Rpb24gVGh0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oUzVlLHRoaXMsQWh0KS5jYWxsKHRoaXMsYSxkKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigp''@;'; put 'put ''PT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxZbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWFjY2VwdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0Iil9''@;'; put 'put ''Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX19ZnVuY3Rpb24gQWh0KGMsbCl7bC5vcHRpb25zLmlkZW50aWZpZXI9PT1DNWUuQlVUVE9OX09LP3RoaXMuYWNjZXB0KCk6dGhpcy5jYW5jZWwoKX1mdW5jdGlvbiBiUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2h0KGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIERodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9QzVlPVFUO2NvbnN0IE01ZT0iQ29uZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdTdGF0ZXMiO2NsYXNzIHg1ZXtjb25zdHJ1Y3RvcihsKXtsZXQg''@;'; put 'put ''YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2JRKHRoaXMsImhvdCIsdm9pZCAwKSxiUSh0aGlzLCJpc01hcFJlZ2lzdHJhYmxlIix2b2lkIDApLGJRKHRoaXMsImZpbHRlcmluZ1N0YXRlcyIsbmV3IHBQKSx0aGlzLmhvdD1sLHRo''@;'; put 'put ''aXMuaXNNYXBSZWdpc3RyYWJsZT1hLCEwPT09dGhpcy5pc01hcFJlZ2lzdHJhYmxlP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKE01ZSx0aGlzLmZpbHRlcmluZ1N0YXRlcyk6dGhpcy5maWx0ZXJpbmdTdGF0ZXMuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5nZXROdW1iZXJPZkluZGV4ZXMoKSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5sZW5ndGh9aXNNYXRjaChsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGEpLGY9bnVsbCE9PShkPWg/LmNvbmRp''@;'; put 'put ''dGlvbnMpJiZ2b2lkIDAhPT1kP2Q6W10sdj1oPy5vcGVyYXRpb247cmV0dXJuIHRoaXMuaXNNYXRjaEluQ29uZGl0aW9ucyhmLGwsdil9aXNNYXRjaEluQ29uZGl0aW9ucyhsLGEpe3JldHVybiFsLmxlbmd0aHx8ZnVuY3Rpb24gTmR0KGMpe2lmKCFXVFtjXSl0aHJvdyBFcnJvcihgT3BlcmF0''@;'; put 'put ''aW9uIHdpdGggaWQgIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0IGw9V1RbY10uZnVuYztyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbChhLGQpfX0oYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE2KShsLGEpfWFkZENvbmRp''@;'; put 'put ''dGlvbihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphNixoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKS5sb2NhbGUsdj1hLmFyZ3Mu''@;'; put 'put ''bWFwKHJlPT4ic3RyaW5nIj09dHlwZW9mIHJlP3JlLnRvTG9jYWxlTG93ZXJDYXNlKGYpOnJlKSxNPWEubmFtZXx8YS5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUFkZCIsbCk7Y29uc3QgRD10aGlzLmdldE9wZXJhdGlvbihsKTtpZihEKXtpZihEIT09ZCl0aHJvdyBF''@;'; put 'put ''cnJvcihnbGBUaGUgY29sdW1uIG9mIGluZGV4ICR7bH0gaGFzIGJlZW4gYWxyZWFkeSBhcHBsaWVkIHdpdGggYSBcYCR7RH1cYFx4MjAKICAgICAgICBmaWx0ZXIgb3BlcmF0aW9uLiBVc2UgXGByZW1vdmVDb25kaXRpb25zXGAgdG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uZGl0aW9ucyBhbmQg''@;'; put 'put ''dGhlbiBhZGQgbmV3IG9uZXMuXHgyMAogICAgICAgIE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIFxgY29uanVuY3Rpb25cYCxceDIwCiAgICAgICAgdXNlIGl0IGNvbnNlcXVlbnRseSBmb3Ig''@;'; put 'put ''YSBwYXJ0aWN1bGFyIGNvbHVtbikuYCl9ZWxzZSBpZihfYyhXVFtkXSkpdGhyb3cgbmV3IEVycm9yKGdsYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtkfVxgLiBQb3NzaWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBcYGRpc2p1bmN0aW9uXGAgYW5kIFxgY29uanVuY3Rpb25cYC5g''@;'; put 'put ''KTtjb25zdCBaPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTswPT09Wi5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGwse29wZXJhdGlvbjpkLGNvbmRpdGlvbnM6W3tuYW1lOk0sYXJnczp2LGZ1bmM6cjYoTSx2KX1dfSxoKTpaLnB1c2goe25hbWU6TSxhcmdzOnYs''@;'; put 'put ''ZnVuYzpyNihNLHYpfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsbCl9Z2V0Q29uZGl0aW9ucyhsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGE9bnVsbD09PShkPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29u''@;'; put 'put ''ZGl0aW9ucykmJnZvaWQgMCE9PWE/YTpbXX1nZXRPcGVyYXRpb24obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9wZXJhdGlvbn1nZXRGaWx0ZXJlZENvbHVtbnMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChsPT57bGV0W2FdPWw7cmV0dXJuIGF9KX1nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2YobCl9ZXhwb3J0QWxsQ29uZGl0aW9ucygpe3JldHVybiB0aGlz''@;'; put 'put ''LmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkucmVkdWNlKChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJuIGwucHVzaCh7Y29sdW1uOmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpmLm1hcCh2PT57bGV0e25hbWU6TSxhcmdzOkR9PXY7cmV0dXJu''@;'; put 'put ''e25hbWU6TSxhcmdzOlsuLi5EXX19KX0pLGx9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxsLmZvckVhY2goYT0+e2EuY29uZGl0aW9ucy5mb3JFYWNoKGQ9PnRoaXMuYWRkQ29uZGl0aW9uKGEuY29sdW1uLGQpKX0pfXJlbW92ZUNvbmRpdGlvbnMobCl7dGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLGwpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsbCl9Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNsZWFuIiksdGhpcy5maWx0ZXJpbmdTdGF0ZXMu''@;'; put 'put ''Y2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xlYW4iKX1oYXNDb25kaXRpb25zKGwsYSl7Y29uc3QgZD10aGlzLmdldENvbmRpdGlvbnMobCk7cmV0dXJuIGE/ZC5zb21lKGg9PmgubmFtZT09PWEpOmQubGVuZ3RoPjB9ZGVzdHJveSgpe3RoaXMuaXNNYXBSZWdpc3RyYWJsZSYm''@;'; put 'put ''dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChNNWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGwoeDVlLHkxKTtjb25zdCBFNWU9eDVlO2Z1bmN0aW9uIFQ1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSWh0KGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIFJodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQTVlPWNsYXNzIExodHtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06KCk9PltdO1Q1ZSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLFQ1ZSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bCx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWF9ZmlsdGVyKCl7bGV0IGw9W107''@;'; put 'put ''cmV0dXJuIFluKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoYSxkKT0+e2xldCBoPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoYSk7ZCYmKGg9dGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShoLGwpKSxsPXRoaXMuZmlsdGVyQnlDb2x1bW4oYSxoKX0pLGx9Zmls''@;'; put 'put ''dGVyQnlDb2x1bW4obCl7Y29uc3QgZD1bXTtyZXR1cm4gWW4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9Pnt2b2lkIDAhPT1oJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChoLGwpJiZkLnB1c2goaCl9KSxkfV9n''@;'; put 'put ''ZXRJbnRlcnNlY3REYXRhKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gWW4oYSxoPT57Y29uc3QgZj1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWxbZl0mJihkW2ZdPWxbZl0pfSksZH19O2Z1bmN0aW9uIFM5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGaHQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''SGh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB5UShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHFGPW5ldyBXZWFrU2V0O2NsYXNzIGs1ZXtjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToo''@;'; put 'put ''KT0+W107KGZ1bmN0aW9uIE9odChjLGwpeyhmdW5jdGlvbiBQaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMs''@;'; put 'put ''cUYpLFM5KHRoaXMsImhvdCIsdm9pZCAwKSxTOSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLFM5KHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLFM5KHRoaXMsImNoYW5nZXMiLFtdKSxTOSh0aGlzLCJncm91cGluZyIsITEpLFM5KHRoaXMsImxhdGVzdEVkaXRl''@;'; put 'put ''ZENvbHVtblBvc2l0aW9uIiwtMSksUzkodGhpcywibGF0ZXN0T3JkZXJTdGFjayIsW10pLHRoaXMuaG90PWwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWEsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1kLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVJlbW92''@;'; put 'put ''ZSIsaD0+eVEocUYsdGhpcyxOaHQpLmNhbGwodGhpcyxoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVy''@;'; put 'put ''QWRkIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVDbGVhbiIsKCk9PnlRKHFGLHRoaXMsVmh0KS5jYWxsKHRoaXMpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRl''@;'; put 'put ''ckNsZWFuIiwoKT0+eVEocUYsdGhpcyxCaHQpLmNhbGwodGhpcykpfWdyb3VwQ2hhbmdlcygpe3RoaXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLFluKHRoaXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5n''@;'; put 'put ''dGg9MH11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0aGlzLmNoYW5nZXMucHVzaChsKSk7Y29uc3QgaD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxs''@;'; put 'put ''Q29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbik7Y29uc3Qgdj1oLnNsaWNlKDAsZiksTT1oLnNsaWNlKGYpO00ubGVuZ3RoJiZNWzBdLmNv''@;'; put 'put ''bHVtbj09PWwmJk0uc2hpZnQoKTtjb25zdCBEPVkyZShmdW5jdGlvbihyZSxjZSl7bGV0IGJlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtjb25zdCBFZT1uZXcgRTVlKGQuaG90LCExKSxCZT1bXS5jb25jYXQocmUsYmUpO0VlLmlt''@;'; put 'put ''cG9ydEFsbENvbmRpdGlvbnMoQmUpO2NvbnN0IHFlPWQuY29sdW1uRGF0YUZhY3RvcnkoY2UpO2xldCBydDtydD1FZS5pc0VtcHR5KCk/cWU6bmV3IEE1ZShFZSxkdD0+ZC5jb2x1bW5EYXRhRmFjdG9yeShkdCkpLmZpbHRlcigpLHJ0PXlzKHJ0LGR0PT5kdC5tZXRhLnZpc3VhbFJvdyk7Y29u''@;'; put 'put ''c3QgcHQ9R1QocnQpO3JldHVybiBFZS5kZXN0cm95KCksSW0ocWUsZHQ9PnB0KGR0Lm1ldGEudmlzdWFsUm93KSl9KSh2KSxaPVtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29uZGl0aW9ucyhsKSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJ1cGRhdGUiLHtlZGl0ZWRDb25k''@;'; put 'put ''aXRpb25TdGFjazp7Y29sdW1uOmwsY29uZGl0aW9uczpafSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6TSxmaWx0ZXJlZFJvd3NGYWN0b3J5OkQsY29uZGl0aW9uQXJnc0NoYW5nZTphfSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksWG8odGhpcywobCxhKT0+e3RoaXNbYV09''@;'; put 'put ''bnVsbH0pfX1mdW5jdGlvbiBOaHQoYyl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihjKX1mdW5jdGlvbiBWaHQoKXt0aGlzLmxhdGVzdE9yZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0''@;'; put 'put ''aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfWZ1bmN0aW9uIEJodCgpe1luKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxjPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjKX0pfVRsKGs1ZSx5MSk7Y29uc3Qgamh0PWs1ZSxlQT0iZmlsdGVycyI7ZnVuY3Rpb24gX1EoYyxsLGEpe0Q1ZShjLGwp''@;'; put 'put ''LGwuc2V0KGMsYSl9ZnVuY3Rpb24gRDVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB0QShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''V2h0KGMpe3ZhciBsPWZ1bmN0aW9uIFlodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWEYoYyxsLGEpe3JldHVybiBjLnNldCgkZChjLGwpLGEpLGF9ZnVuY3Rpb24gWDIoYyxsKXtyZXR1cm4gYy5nZXQoJGQo''@;'; put 'put ''YyxsKSl9ZnVuY3Rpb24gJGQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNv''@;'; put 'put ''bnN0IHdRPSJmaWx0ZXJzIixJNWU9d1E7dmFyIE5nPW5ldyBXZWFrTWFwLENRPW5ldyBXZWFrTWFwLE05PW5ldyBXZWFrTWFwLE5oPW5ldyBXZWFrU2V0O2NsYXNzICRodCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB3UX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklP''@;'; put 'put ''UklUWSgpe3JldHVybiAyNTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7dmFyIGE7c3VwZXIobCksYT10aGlzLGZ1bmN0aW9uIFpodChj''@;'; put 'put ''LGwpe0Q1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE5oKSx0QSh0aGlzLCJkcm9wZG93bk1lbnVQbHVnaW4iLG51bGwpLHRBKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLG51bGwpLHRBKHRoaXMsImNvbmRpdGlvblVwZGF0ZU9ic2VydmVyIixudWxsKSx0QSh0aGlzLCJjb21wb25lbnRzIixu''@;'; put 'put ''ZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24iLG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9iYXIiLG51bGxdXSkpLHRBKHRoaXMsImZpbHRlcnNS''@;'; put 'put ''b3dzTWFwIixudWxsKSxfUSh0aGlzLE5nLHZvaWQgMCksX1EodGhpcyxDUSxuZXcgV2Vha1NldCksX1EodGhpcyxNOSxbXSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0w''@;'; put 'put ''O2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuICRkKE5oLGEsdDJ0KS5jYWxsKGEsLi4uaCl9KX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbd1FdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmZp''@;'; put 'put ''bHRlcnNSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxuZXcgcUUpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPXRoaXMuaG90LmdldFBsdWdpbigiZHJvcGRvd25NZW51Iik7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRy''@;'; put 'put ''b3Bkb3duTWVudSxkPWEmJmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LGg9TT0+KE0uYWRkTG9jYWxIb29rKCJhY2NlcHQiLCgpPT4kZChOaCx0aGlzLFI1ZSkuY2FsbCh0aGlzLCJhY2NlcHQiKSksTS5hZGRMb2NhbEhvb2soImNhbmNlbCIsKCk9PiRkKE5oLHRo''@;'; put 'put ''aXMsUjVlKS5jYWxsKHRoaXMsImNhbmNlbCIpKSxNLmFkZExvY2FsSG9vaygiY2hhbmdlIixEPT4kZChOaCx0aGlzLGUydCkuY2FsbCh0aGlzLE0sRCkpLE0pLGY9KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UodFgpfTpgO2lmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0''@;'; put 'put ''ZXJfYnlfY29uZGl0aW9uIikpe2NvbnN0IE09bmV3IHVRKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbiIsbmFtZTpmLGFkZFNlcGFyYXRvcjohMSxtZW51Q29udGFpbmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PiRkKE5oLHRoaXMsTDVlKS5jYWxsKHRo''@;'; put 'put ''aXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIixoKE0pKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9vcGVyYXRvcnMiLG5ldyBRZHQodGhpcy5ob3Qse2lkOiJmaWx0ZXJf''@;'; put 'put ''b3BlcmF0b3JzIixuYW1lOiJPcGVyYXRvcnMifSkpLCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpKXtjb25zdCBNPW5ldyB1USh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24yIixuYW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVy''@;'; put 'put ''OmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PiRkKE5oLHRoaXMsTDVlKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsaChNKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIil8fHRoaXMuY29t''@;'; put 'put ''cG9uZW50cy5zZXQoImZpbHRlcl9ieV92YWx1ZSIsaChuZXcgeWh0KHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X3ZhbHVlIixuYW1lOigpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKG5YKX06YH0pKSksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2FjdGlvbl9iYXIiKXx8''@;'; put 'put ''dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLGgobmV3IFFUKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb258fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bmV3IEU1ZSh0''@;'; put 'put ''aGlzLmhvdCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBqaHQodGhpcy5ob3QsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLE09PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKE0pKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9i''@;'; put 'put ''c2VydmVyLmFkZExvY2FsSG9vaygidXBkYXRlIixNPT4kZChOaCx0aGlzLG4ydCkuY2FsbCh0aGlzLE0pKSksdGhpcy5jb21wb25lbnRzLmZvckVhY2goTT0+TS5zaG93KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNKSxaPTA7WjxNO1orKylEW1pdPWFyZ3VtZW50c1taXTtyZXR1cm4gJGQoTmgsbCxRaHQpLmNhbGwobCwuLi5EKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsKCk9PiRkKE5oLHRoaXMsSmh0KS5jYWxsKHRo''@;'; put 'put ''aXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsKCk9PiRkKE5oLHRoaXMscWh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51SGlkZSIsKCk9PiRkKE5oLHRoaXMsWGh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ2hh''@;'; put 'put ''bmdlIixNPT4kZChOaCx0aGlzLEtodCkuY2FsbCh0aGlzLE0pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4u''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCkpLCFYMihOZyx0aGlzKSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlZCl7Y29uc3QgTT1be2ZvY3VzOigpPT57Y29uc3QgWj1YMihOZyx0aGlzKS5nZXRNZW51KCkscmU9Wi5nZXROYXZpZ2F0b3IoKSxjZT1YMihOZyx0aGlzKS5nZXRMYXN0TWVudVBhZ2Uo''@;'; put 'put ''KTtaLmZvY3VzKCksY2U+MD9yZS5zZXRDdXJyZW50UGFnZShjZSk6cmUudG9GaXJzdEl0ZW0oKX19LC4uLkFycmF5LmZyb20odGhpcy5jb21wb25lbnRzKS5tYXAoWj0+e2xldFsscmVdPVo7cmV0dXJuIHJlLmdldEVsZW1lbnRzKCl9KS5mbGF0KCldO1hGKE5nLHRoaXMsZnVuY3Rpb24gVWh0''@;'; put 'put ''KGMsbCl7bGV0IGQsYT0tMTtjb25zdCBoPWZ1bmN0aW9uIHpodChjKXtyZXR1cm4gd2dlKHtpbml0aWFsUGFnZTowLHNpemU6KCk9PmMubGVuZ3RoLG9uSXRlbVNlbGVjdDooYSxkKT0+e2NvbnN0IGg9Y1thXTtyZXR1cm4gaCBpbnN0YW5jZW9mIFhUP2Q6IShoLmVsZW1lbnQmJiFVNyhoLmVs''@;'; put 'put ''ZW1lbnQpKSYmdm9pZCBoLmZvY3VzKCl9fSl9KGwpLGY9Y2U9PigpPT57ZC5pc09wZW5lZCgpJiZkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihlQSksaC5zZXRDdXJyZW50UGFnZShsLmluZGV4T2YoY2UpKX07ZnVuY3Rpb24gdihjZSl7Y29uc3QgYmU9ZC5nZXRLZXlib2Fy''@;'; put 'put ''ZFNob3J0Y3V0c0N0cmwoKSxFZT1jZS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKTtoLmNsZWFyKCksRWUuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGZvcndhcmRUb0NvbnRleHQ6YmUuZ2V0Q29udGV4dChlQSksY2FsbGJhY2s6KCk9Pntj''@;'; put 'put ''ZS5pc1N1Yk1lbnUoKSYmY2UuY2xvc2UoKSxiZS5saXN0ZW4oZUEpfX1dKSwhY2UuaXNTdWJNZW51KCkmJmJlLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpCZT0+e2NvbnN0IHFlPWQuZ2V0TmF2aWdhdG9yKCk7cWUuZ2V0Q3Vy''@;'; put 'put ''cmVudFBhZ2UoKT4tMSYmKGE9cWUuZ2V0Q3VycmVudFBhZ2UoKSkscWUuY2xlYXIoKSxCZS5zaGlmdEtleT9oLnRvUHJldmlvdXNJdGVtKCk6aC50b05leHRJdGVtKCl9fSx7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PntkLmNsb3NlKCl9fSx7a2V5czpbWyJFbnRlciJdLFsiU3Bh''@;'; put 'put ''Y2UiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6QmU9Pntjb25zdCBxZT1sW2guZ2V0Q3VycmVudFBhZ2UoKV07cWUgaW5zdGFuY2VvZiBaVCYmKHFlLm9wZW5PcHRpb25zKCksQmUucHJldmVudERlZmF1bHQoKSkscWUgaW5zdGFuY2VvZiBLVCYmKHFlLmFjdGl2YXRlKCksQmUucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSkscWUgaW5zdGFuY2VvZiBIaHx8QmUucHJldmVudERlZmF1bHQoKX19XSxlQSl9ZnVuY3Rpb24gRChjZSl7Y2UuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsYmU9PntiZS5rZXkuc3RhcnRzV2l0aCgiZmlsdGVyXyIpfHxoLmNsZWFyKCl9KSxjZS5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLHYpLGNlLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIix2KSxkPWNlfXJldHVybiBsLmZvckVhY2goY2U9PntjZSBpbnN0YW5jZW9mIEhoJiYoY2UuYWRkTG9jYWxIb29rKCJjbGljayIsZihjZSkpLGNlLmFkZExvY2FsSG9vaygiZm9jdXMi''@;'; put 'put ''LGYoY2UpKSxjZS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLGYoY2UpKSl9KSxEKGMpLHsuLi5oLGxpc3RlbjpmdW5jdGlvbiBNKCl7ZC5mb2N1cygpLGQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKGVBKX0sc2V0TWVudTpELGdldE1lbnU6ZnVuY3Rpb24gWigpe3JldHVy''@;'; put 'put ''biBkfSxnZXRMYXN0TWVudVBhZ2U6ZnVuY3Rpb24gcmUoKXtyZXR1cm4gYX19fSh0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LE0pKTtjb25zdCBEPVo9PntYMihOZyx0aGlzKS5saXN0ZW4oKSxaLnByZXZlbnREZWZhdWx0KCksdV8oWi5rZXlDb2RlLCJUQUIiKSYmKFouc2hpZnRLZXk/''@;'; put 'put ''WDIoTmcsdGhpcykudG9QcmV2aW91c0l0ZW0oKTpYMihOZyx0aGlzKS50b05leHRJdGVtKCkpfTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5hZGRMb2NhbEhvb2soImxpc3RUYWJLZXlkb3duIixEKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0''@;'; put 'put ''aW9uIikuYWRkTG9jYWxIb29rKCJzZWxlY3RUYWJLZXlkb3duIixEKX10aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO3RoaXMuZW5hYmxlZCYmKG51bGwhPT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbikmJnZvaWQg''@;'; put 'put ''MCE9PWwmJmwuZW5hYmxlZCYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgoYSxkKT0+e2EuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoZCxudWxsKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5k''@;'; put 'put ''ZXN0cm95KCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0''@;'; put 'put ''aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQWx0IiwiQSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9Pntjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkKCk7dGhpcy5jbGVhckNvbmRpdGlvbnMo''@;'; put 'put ''KSx0aGlzLmZpbHRlcigpLGwmJnRoaXMuaG90LnNlbGVjdENlbGxzKGwpfSxncm91cDpJNWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoSTVlKX1hZGRDb25kaXRp''@;'; put 'put ''b24obCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphNjtjb25zdCBmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLHtjb21tYW5kOntrZXk6''@;'; put 'put ''YX0sYXJnczpkfSxoKX1yZW1vdmVDb25kaXRpb25zKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX1jbGVhckNvbmRpdGlvbnMobCl7aWYodm9pZCAwPT09bCl0aGlzLmNvbmRpdGlvbkNv''@;'; put 'put ''bGxlY3Rpb24uY2xlYW4oKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX19aW1wb3J0Q29uZGl0aW9ucyhsKXt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0''@;'; put 'put ''aW9ucyhsKX1leHBvcnRDb25kaXRpb25zKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCl9ZmlsdGVyKCl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGE9dGhpcy5fY3JlYXRlRGF0YUZpbHRlcigp''@;'; put 'put ''LGQ9IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc0VtcHR5KCk7bGV0IGg9W107Y29uc3QgZj10aGlzLmV4cG9ydENvbmRpdGlvbnMoKSx2PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVGaWx0ZXIiLGYsWDIoTTksdGhpcykpO2lmKCExIT09diYmZCl7Y29uc3QgTT1bXTt0aGlzLmhvdC5i''@;'; put 'put ''YXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSxoPXlzKGEuZmlsdGVyKCksWj0+Wi5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgRD1HVChoKTtHYSh0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xLFo9PntEKFopfHxNLnB1c2goWil9KSxZbihNLFo9Pnt0aGlz''@;'; put 'put ''LmZpbHRlcnNSb3dzTWFwLnNldFZhbHVlQXRJbmRleChaLCEwKX0pfSwhMCksIWwmJiFoLmxlbmd0aCYmdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksWEYoTTksdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSl9ZWxzZSExPT09dnx8ZD90aGlzLmltcG9ydENvbmRpdGlvbnMoWDIoTTksdGhp''@;'; put 'put ''cykpOihYRihNOSx0aGlzLHRoaXMuZXhwb3J0Q29uZGl0aW9ucygpKSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCkpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJnRoaXMuaG90LnNlbGVjdENlbGwobD8tMTowLHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGln''@;'; put 'put ''aGxpZ2h0LmNvbCksITEhPT12JiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1nZXRTZWxlY3RlZENvbHVtbigpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gYT97dmlzdWFsSW5kZXg6YS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEuY29sKX06bnVsbH1nZXREYXRhTWFwQXRDb2x1bW4obCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSxkPVtdO3JldHVybiBZbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woYSksKGgsZik9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6RCx2aXN1YWxDb2w6Wix2aXN1YWxSb3c6cmUsdHlwZTpjZSxpbnN0YW5jZTpiZSxkYXRlRm9ybWF0OkVlLGxv''@;'; put 'put ''Y2FsZTpCZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxxZT1udWxsIT09KHY9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZvaWQgMCE9PXY/djpoO2QucHVzaCh7bWV0YTp7cm93Ok0sY29sOkQsdmlzdWFsQ29sOlosdmlzdWFsUm93OnJl''@;'; put 'put ''LHR5cGU6Y2UsaW5zdGFuY2U6YmUsZGF0ZUZvcm1hdDpFZSxsb2NhbGU6QmV9LHZhbHVlOnBRKHFlKX0pfSksZH11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25zdCBkPWdRKHRoaXMuaG90LmdldERhdGFBdENvbChsKSk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci51''@;'; put 'put ''cGRhdGVTdGF0ZXNBdENvbHVtbihsLGQpfXJlc3RvcmVDb21wb25lbnRzKGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucGh5c2ljYWxJbmRleDtsLmZvckVhY2goaD0+e2guaXNIaWRkZW4oKXx8aC5yZXN0''@;'; put 'put ''b3JlU3RhdGUoZCl9KSx0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl9Z2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhsLGEsZCxoKXtsZXQgZj1sO3JldHVybiBmPT09R0YmJmEuY29tbWFuZC5rZXkhPT1FMCYmZC5jb21tYW5kLmtleSE9PUUwJiZoLmNvbW1h''@;'; put 'put ''bmQua2V5IT09RTA/Zj1oUTpoLmNvbW1hbmQua2V5IT09RTAmJihhLmNvbW1hbmQua2V5PT09RTB8fGQuY29tbWFuZC5rZXk9PT1FMCkmJihmPWE2KSxmfXNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpe3RoaXMuZHJvcGRvd25NZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5z''@;'; put 'put ''ZXRMaXN0ZW5pbmcoKX11cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpe2NvbnN0IGw9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLHtjb21tYW5kOmF9PWwuZ2V0U3RhdGUoKSxkPVt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29u''@;'; put 'put ''ZGl0aW9uMiIpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKV07YS5zaG93T3BlcmF0b3JzP3RoaXMuc2hvd0NvbXBvbmVudHMoLi4uZCk6dGhpcy5oaWRlQ29tcG9uZW50cyguLi5kKX1fY3JlYXRlRGF0YUZpbHRlcigpe3JldHVybiBuZXcgQTVlKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sYT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oYSkpfWdldEluZGV4ZXNPZkNvbXBvbmVudHMoKXtjb25zdCBsPVtdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbily''@;'; put 'put ''ZXR1cm4gbDtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFluKGgsdj0+e1luKGEubWVudUl0ZW1zLChNLEQpPT57TS5rZXk9PT12''@;'; put 'put ''LmdldE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSYmbC5wdXNoKEQpfSl9KSxsfWNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVn''@;'; put 'put ''aW4pcmV0dXJuO2NvbnN0IGQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5ob3RNZW51LGg9ZC5nZXRQbHVnaW4oImhpZGRlblJvd3MiKTtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmPjE/Zi0xOjApLE09MTtNPGY7TSsrKXZbTS0xXT1hcmd1bWVudHNbTV07''@;'; put 'put ''Y29uc3QgRD10aGlzLmdldEluZGV4ZXNPZkNvbXBvbmVudHMoLi4udik7bD9oLnNob3dSb3dzKEQpOmguaGlkZVJvd3MoRCksZC5yZW5kZXIoKX1oaWRlQ29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1l''@;'; put 'put ''bnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITEsLi4uYSl9c2hvd0NvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmls''@;'; put 'put ''aXR5KCEwLC4uLmEpfWRlc3Ryb3koKXt0aGlzLmVuYWJsZWQmJih0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgobCxhKT0+e251bGwhPT1sJiYobC5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChhLG51bGwpKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5j''@;'; put 'put ''b25kaXRpb25VcGRhdGVPYnNlcnZlci5kZXN0cm95KCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEtodChjKXtjJiZZbihjLGw9Pntjb25zdFssYV09bCxkPXRoaXMuaG90LnByb3BUb0Nv''@;'; put 'put ''bChhKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmdGhpcy51cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihkKX0pfWZ1bmN0aW9uIHFodCgpe2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFy''@;'; put 'put ''cmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSksYy51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIFhodCgpe3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCksdGhpcy5jb21wb25l''@;'; put 'put ''bnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCl9ZnVuY3Rpb24gSmh0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O1gyKENRLHRoaXMpLmhhcyhjKXx8WDIoTmcsdGhpcykuc2V0TWVudShjKSxYMihD''@;'; put 'put ''USx0aGlzKS5hZGQoYyl9ZnVuY3Rpb24gUWh0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30pLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGw9PntjLml0ZW1zLnB1c2gobC5nZXRNZW51SXRlbURlc2NyaXB0b3IoKSl9KX1mdW5jdGlvbiBSNWUoYyl7dmFyIGw7aWYoImFjY2VwdCI9PT1jKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTt2YXIgYTtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1hfHxhLmNsb3NlKCkpO2NvbnN0e3BoeXNpY2FsSW5kZXg6aH09ZCxmPXRoaXMuY29tcG9uZW50cy5n''@;'; put 'put ''ZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTdGF0ZSgpLHY9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTdGF0ZSgpLE09dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikuZ2V0U3RhdGUoKSxEPXRoaXMuZ2V0T3BlcmF0aW9u''@;'; put 'put ''QmFzZWRPbkFyZ3VtZW50cyh0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSxmLHYsTSk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5ncm91cENoYW5nZXMoKTtsZXQgWj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0''@;'; put 'put ''Q29sdW1uU3RhY2tQb3NpdGlvbihoKTstMT09PVomJihaPXZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoaCksZi5jb21tYW5kLmtleSE9PUUwJiYodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLGYsRCxaKSx2LmNvbW1hbmQu''@;'; put 'put ''a2V5IT09RTAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCx2LEQsWikpLE0uY29tbWFuZC5rZXkhPT1FMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLE0sRCxaKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCksdGhp''@;'; put 'put ''cy5jb21wb25lbnRzLmZvckVhY2gocmU9PnJlLnNhdmVTdGF0ZShoKSksdGhpcy5maWx0ZXIoKX1udWxsPT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCl9ZnVuY3Rpb24gZTJ0KGMsbCl7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5t''@;'; put 'put ''ZW51O3RoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKSxjLmNvbnN0cnVjdG9yPT09dVEmJiFsLmlucHV0c0NvdW50JiZ0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpLGEudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBMNWUoKXt0aGlzLnNldExp''@;'; put 'put ''c3RlbmluZ0Ryb3Bkb3duTWVudSgpfWZ1bmN0aW9uIHQydChjLGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuZW5hYmxlZCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCkmJmE9PT10aGlzLmhvdC52aWV3LmdldENvbHVtbkhl''@;'; put 'put ''YWRlcnNDb3VudCgpLTE/VGkobCwiaHRGaWx0ZXJzQWN0aXZlIik6bG8obCwiaHRGaWx0ZXJzQWN0aXZlIil9ZnVuY3Rpb24gbjJ0KGMpe3ZhciBsO2lmKG51bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fCFsLmVuYWJsZWQpcmV0dXJuO2NvbnN0e2VkaXRl''@;'; put 'put ''ZENvbmRpdGlvblN0YWNrOntjb25kaXRpb25zOmEsY29sdW1uOmR9LGNvbmRpdGlvbkFyZ3NDaGFuZ2U6aH09YztBcnJheS5pc0FycmF5KGgpJiZYRihNOSx0aGlzLFgyKE05LHRoaXMpLm1hcChNPT4oTS5jb2x1bW49PT1kJiZhLmxlbmd0aD4wJiZNLmNvbmRpdGlvbnMuZm9yRWFjaChEPT57''@;'; put 'put ''ImJ5X3ZhbHVlIj09PUQubmFtZSYmKEQuYXJncz1bWy4uLmhdXSl9KSxNKSkpO2NvbnN0IGY9YS5maWx0ZXIoTT0+TS5uYW1lPT09QzkpLHY9YS5maWx0ZXIoTT0+TS5uYW1lIT09QzkpO2lmKGYubGVuZ3RoPj0yfHx2Lmxlbmd0aD49MylpbChnbGBUaGUgZmlsdGVyIGNvbmRpdGlvbnMgaGF2''@;'; put 'put ''ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHksIGJ1dCBjb3VsZG7igJl0IGJlIGRpc3BsYXllZCB2aXN1YWxseS5ceDIwCiAgICAgICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRpdGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSBkcm9wZG93biBtZW51Llx4MjAKICAgICAgICBG''@;'; put 'put ''b3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi5gKTtlbHNle2NvbnN0IE09dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldE9wZXJhdGlvbihkKTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikudXBkYXRlU3RhdGUodlswXSxkKSx0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLnVwZGF0ZVN0YXRlKHZbMV0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLnVwZGF0ZVN0YXRlKE0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikudXBkYXRlU3RhdGUo''@;'; put 'put ''Yyl9fWNvbnN0IE81ZT0iaW50ZXJuYWwtdXNlLWluLWhhbmRzb250YWJsZSIsU1E9e2xpY2Vuc2VLZXk6TzVlLHVzZUFycmF5QXJpdGhtZXRpYzohMCx1c2VDb2x1bW5JbmRleDohMSx1c2VTdGF0czohMSxldmFsdWF0ZU51bGxUb1plcm86ITAscHJlY2lzaW9uRXBzaWxvbjoxZS0xMyxwcmVj''@;'; put 'put ''aXNpb25Sb3VuZGluZzoxNCxzbWFydFJvdW5kaW5nOiEwLGxlYXBZZWFyMTkwMDohMSxudWxsRGF0ZTp7eWVhcjoxODk5LG1vbnRoOjEyLGRheTozMH0sbnVsbFllYXI6MzAsZGF0ZUZvcm1hdHM6WyJERC9NTS9ZWVlZIiwiREQvTU0vWVkiXSx0aW1lRm9ybWF0czpbImhoOm1tIiwiaGg6bW06''@;'; put 'put ''c3Muc3NzIl0sbWF0Y2hXaG9sZUNlbGw6ITAsdXNlUmVndWxhckV4cHJlc3Npb25zOiExLHVzZVdpbGRjYXJkczohMCxmdW5jdGlvbkFyZ1NlcGFyYXRvcjoiLCIsdGhvdXNhbmRTZXBhcmF0b3I6IiIsZGVjaW1hbFNlcGFyYXRvcjoiLiIsbGFuZ3VhZ2U6ImVuR0IifTtmdW5jdGlvbiBQNWUo''@;'; put 'put ''Yyl7dmFyIGw7cmV0dXJue21heENvbHVtbnM6Yy5tYXhDb2x1bW5zLG1heFJvd3M6Yy5tYXhSb3dzLGxhbmd1YWdlOm51bGw9PT0obD1jW3cxXSl8fHZvaWQgMD09PWx8fG51bGw9PT0obD1sLmxhbmd1YWdlKXx8dm9pZCAwPT09bD92b2lkIDA6bC5sYW5nQ29kZX19ZnVuY3Rpb24gRjVlKGMp''@;'; put 'put ''e3JldHVybiBPYmplY3Qua2V5cyhjKS5yZWR1Y2UoKGwsYSk9PigiaHlwZXJmb3JtdWxhIiE9PWEmJihsW2FdPWNbYV0pLGwpLHt9KX1mdW5jdGlvbiBKRigpe2NvbnN0IGM9ImVuZ2luZV9yZWxhdGlvbnNoaXAiLGw9cjModzEpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxu''@;'; put 'put ''ZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gTVEoKXtjb25zdCBjPSJzaGFyZWRfZW5naW5lX3VzYWdlIixsPXIzKHcxKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIEg1ZShjKXt2YXIgbDtjb25zdCBhPUpGKCks''@;'; put 'put ''ZD0wPT09YS5zaXplP1tdOkFycmF5LmZyb20obnVsbCE9PShsPWEuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOltdKTtyZXR1cm4gbmV3IE1hcChkLm1hcChoPT5baC5nZXRQbHVnaW4oImZvcm11bGFzIikuc2hlZXRJZCxoXSkpfWZ1bmN0aW9uIE41ZShjLGwpe2lmKGMpe2NvbnN0IGE9SkYoKSxk''@;'; put 'put ''PWEuZ2V0KGMpLGg9TVEoKSxmPWguZ2V0KGMpO2QmJmQuaW5jbHVkZXMobCkmJihkLnNwbGljZShkLmluZGV4T2YobCksMSksMD09PWQubGVuZ3RoJiZhLmRlbGV0ZShjKSksZiYmZi5pbmNsdWRlcyhsLmd1aWQpJiYoZi5zcGxpY2UoZi5pbmRleE9mKGwuZ3VpZCksMSksMD09PWYubGVuZ3Ro''@;'; put 'put ''JiYoaC5kZWxldGUoYyksYy5kZXN0cm95KCkpKX19Y29uc3QgVjVlPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiB4UShjLGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmImRhdGUiPT09bH1mdW5jdGlvbiBCNWUoYyxsKXtyZXR1cm4gT28oYyxsLCEwKS5pc1ZhbGlkKCl9ZnVuY3Rpb24gajVl''@;'; put 'put ''KGMsbCl7cmV0dXJuIE9vKGMsbCwhMCkuZm9ybWF0KFY1ZSl9ZnVuY3Rpb24gZzJ0KGMsbCl7cmV0dXJuIE9vKGMsVjVlLCEwKS5mb3JtYXQobCl9ZnVuY3Rpb24gejVlKGMsbCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygwLDAsYystMSkpO3JldHVybiBPbyhkKS5mb3JtYXQobCl9ZnVu''@;'; put 'put ''Y3Rpb24gRVEoYyxsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gdjJ0KGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4gYy5mb3JFYWNoKGQ9Pntjb25zdCBoPXtmcm9tOmQsdG86bH07YS5mb3JFYWNoKGY9PntmLmZyb20+aC5mcm9tJiZmLnRvPD1oLmZyb20mJmYuZnJvbT5mLnRvJiYoaC5mcm9tKz0xKX0p''@;'; put 'put ''LGguZnJvbT49bCYmKGwrPTEpLGEucHVzaChoKX0pLGF9KGMsZnVuY3Rpb24gbTJ0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oQXJyYXkoYSkua2V5cygpKS5maWx0ZXIoZj0+ITE9PT1jLmluY2x1ZGVzKGYpKTt2YXIgaDtyZXR1cm4gMD09PWw/bnVsbCE9PShoPWRbbF0pJiZ2b2lkIDAh''@;'; put 'put ''PT1oP2g6MDpkW2wtMV0rMX0oYyxsLGEpKTtyZXR1cm4gZnVuY3Rpb24gYjJ0KGMpe3JldHVybiBjLmZvckVhY2goKGwsYSk9PntjLnNsaWNlKGErMSkuZm9yRWFjaChoPT57aC5mcm9tPmwuZnJvbSYmaC5mcm9tPGgudG8mJihoLmZyb20tPTEpfSl9KSxjfShkKX1mdW5jdGlvbiB4OShjLGws''@;'; put 'put ''YSl7KGZ1bmN0aW9uIHkydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gU2MoYyxsKXtyZXR1cm4gYy5n''@;'; put 'put ''ZXQoVTVlKGMsbCkpfWZ1bmN0aW9uIGw2KGMsbCxhKXtyZXR1cm4gYy5zZXQoVTVlKGMsbCksYSksYX1mdW5jdGlvbiBVNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBuQT1uZXcgV2Vha01hcCxjNj1uZXcgV2Vha01hcCxWaD1uZXcgV2Vha01hcCxRRj1uZXcgV2Vha01hcCxUUT1uZXcgV2Vha01hcCxBUT1uZXcgV2Vha01hcCxlSD1uZXcgV2Vha01hcDtjb25z''@;'; put 'put ''dCBaNWU9Y2xhc3MgXzJ0e2NvbnN0cnVjdG9yKGwsYSxkKXt4OSh0aGlzLG5BLHZvaWQgMCkseDkodGhpcyxjNix2b2lkIDApLHg5KHRoaXMsVmgsdm9pZCAwKSx4OSh0aGlzLFFGLFtdKSx4OSh0aGlzLFRRLFtdKSx4OSh0aGlzLEFRLHZvaWQgMCkseDkodGhpcyxlSCxbXSksbDYobkEsdGhp''@;'; put 'put ''cyxsKSxsNihjNix0aGlzLGEpLGw2KFZoLHRoaXMsZCl9c2V0UmVtb3ZlZEhmSW5kZXhlcyhsKXtyZXR1cm4gbDYoZUgsdGhpcyxsLm1hcChhPT57Y29uc3QgZD1TYyhjNix0aGlzKS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3Vh''@;'; put 'put ''bEluZGV4KGQpfSkpLFNjKGVILHRoaXMpfWdldFJlbW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gU2MoZUgsdGhpcyl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPVNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQ9U2MoYzYsdGhpcykuZ2V0Tm90VHJpbW1lZElu''@;'; put 'put ''ZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0sbCl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke3AxKFNjKG5BLHRoaXMpKX1zYDtTYyhWaCx0aGlzKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZTYyhW''@;'; put 'put ''aCx0aGlzKS5nZXRFbmdpbmUoKVtkXShTYyhWaCx0aGlzKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3JlTW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1kJiYobDYoVFEsdGhpcyxsLm1hcChoPT50aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSxsNihB''@;'; put 'put ''USx0aGlzLHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSkpfWNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhsLGEpe2lmKFNjKFZoLHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCl8fCExPT09bHx8ITE9PT1hKXJldHVybjtjb25zdCBkPUVRKFNjKFRRLHRoaXMpLFNjKEFRLHRoaXMp''@;'; put 'put ''LFNjKGM2LHRoaXMpLmdldE51bWJlck9mSW5kZXhlcygpKTtudWxsPT09U2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpP1NjKFZoLHRoaXMpLmdldFBvc3Rwb25lQWN0aW9uKCgpPT50aGlzLnN5bmNNb3ZlcyhkKSk6dGhpcy5zeW5jTW92ZXMoZCl9Z2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2Qo''@;'; put 'put ''KXtjb25zdCBsPWBzZXQke3AxKFNjKG5BLHRoaXMpKX1PcmRlcmA7cmV0dXJuIGE9PntpZihTYyhWaCx0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpKXJldHVybjtjb25zdCBkPVNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpO2lmKCJ1cGRhdGUiPT09YSYmZC5sZW5ndGg+MCl7''@;'; put 'put ''Y29uc3QgaD1TYyhRRix0aGlzKS5tYXAoRD0+ZC5pbmRleE9mKEQpKSxmPVNjKFZoLHRoaXMpLmdldEVuZ2luZSgpLmdldFNoZWV0RGltZW5zaW9ucyhTYyhWaCx0aGlzKS5nZXRTaGVldElkKCkpO2xldCB2O3Y9InJvdyI9PT1TYyhuQSx0aGlzKT9mLmhlaWdodDpmLndpZHRoO2ZvcihsZXQg''@;'; put 'put ''RD1oLmxlbmd0aDtEPHY7RCs9MSloLnB1c2goRCk7U2MoVmgsdGhpcykuZ2V0RW5naW5lKClbbF0oU2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpLGgpfWw2KFFGLHRoaXMsZCl9fWluaXQoKXtsNihRRix0aGlzLFNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX19O2Z1bmN0aW9uIEU5''@;'; put 'put ''KGMsbCxhKXsoZnVuY3Rpb24gdzJ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBWZyhjLGwpe3JldHVy''@;'; put 'put ''biBjLmdldChXNWUoYyxsKSl9ZnVuY3Rpb24gVDkoYyxsLGEpe3JldHVybiBjLnNldChXNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIFc1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRIPW5ldyBXZWFrTWFwLG5IPW5ldyBXZWFrTWFwLGtRPW5ldyBXZWFrTWFwLERRPW5ldyBXZWFrTWFwLElRPW5ldyBXZWFrTWFwLFJRPW5ldyBXZWFrTWFwLExRPW5ldyBXZWFrTWFw''@;'; put 'put ''O2NvbnN0IFMydD1jbGFzcyBDMnR7Y29uc3RydWN0b3IobCxhLGQpe0U5KHRoaXMsdEgsdm9pZCAwKSxFOSh0aGlzLG5ILHZvaWQgMCksRTkodGhpcyxrUSx2b2lkIDApLEU5KHRoaXMsRFEsITEpLEU5KHRoaXMsSVEsITEpLEU5KHRoaXMsUlEsbnVsbCksRTkodGhpcyxMUSxudWxsKSxUOSh0''@;'; put 'put ''SCx0aGlzLG5ldyBaNWUoInJvdyIsbCx0aGlzKSksVDkobkgsdGhpcyxuZXcgWjVlKCJjb2x1bW4iLGEsdGhpcykpLFQ5KGtRLHRoaXMsZCl9Z2V0Rm9yQXhpcyhsKXtyZXR1cm4gVmcoInJvdyI9PT1sP3RIOm5ILHRoaXMpfXNldFBlcmZvcm1VbmRvKGwpe1Q5KERRLHRoaXMsbCl9c2V0UGVy''@;'; put 'put ''Zm9ybVJlZG8obCl7VDkoSVEsdGhpcyxsKX1pc1BlcmZvcm1pbmdVbmRvUmVkbygpe3JldHVybiBWZyhEUSx0aGlzKXx8VmcoSVEsdGhpcyl9Z2V0U2hlZXRJZCgpe3JldHVybiBWZyhMUSx0aGlzKX1nZXRFbmdpbmUoKXtyZXR1cm4gVmcoUlEsdGhpcyl9Z2V0UG9zdHBvbmVBY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gVmcoa1EsdGhpcyl9c2V0dXBTeW5jRW5kcG9pbnQobCxhKXtUOShSUSx0aGlzLGwpLFQ5KExRLHRoaXMsYSksVmcodEgsdGhpcykuaW5pdCgpLFZnKG5ILHRoaXMpLmluaXQoKX19O2Z1bmN0aW9uIEE5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4MnQoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gRTJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPUShjLGwsYSl7WTVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg''@;'; put 'put ''aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHU2KGMsbCxhKXtyZXR1cm4gYy5zZXQoenMoYyxsKSxhKSxhfWZ1bmN0aW9uIGs5KGMsbCl7cmV0dXJuIGMuZ2V0KHpzKGMsbCkpfWZ1bmN0aW9uIHpzKGMsbCxhKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB3MT0iZm9ybXVsYXMiLFQydD1bIm1heFJv''@;'; put 'put ''d3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTtTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW5hbWVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNWYWx1''@;'; put 'put ''ZXNVcGRhdGUiKTtjb25zdCBsdz1jPT4iVW5kb1JlZG8udW5kbyI9PT1jfHwiVW5kb1JlZG8ucmVkbyI9PT1jfHwiYXV0byI9PT1jO3ZhciBCZz1uZXcgV2Vha01hcCxySD1uZXcgV2Vha01hcCxyQT1uZXcgV2Vha01hcCxLcz1uZXcgV2Vha1NldDtjbGFzcyBrMnQgZXh0ZW5kcyBGc3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3ZhciBsO3N1cGVyKC4uLmFyZ3VtZW50cyksbD10aGlzLGZ1bmN0aW9uIE0ydChjLGwpe1k1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEtzKSxPUSh0aGlzLEJnLCExKSxPUSh0aGlzLHJILCExKSxPUSh0aGlzLHJBLFtbInZhbHVlc1VwZGF0ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwsVzJ0KS5jYWxsKGwsLi4uZCl9XSxbIm5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9''@;'; put 'put ''bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLFkydCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25SZW1vdmVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLEcydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldEFkZGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhL''@;'; put 'put ''cyxsLCQydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldFJlbmFtZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwsSzJ0KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0''@;'; put 'put ''UmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4genMoS3MsbCxxMnQpLmNhbGwobCwuLi5kKX1dXSksQTkodGhpcywic3RhdGljUmVnaXN0ZXIiLHIzKCJmb3JtdWxh''@;'; put 'put ''cyIpKSxBOSh0aGlzLCJlbmdpbmUiLG51bGwpLEE5KHRoaXMsInNoZWV0SWQiLG51bGwpLEE5KHRoaXMsInNoZWV0TmFtZSIsbnVsbCksQTkodGhpcywiaW5kZXhTeW5jZXIiLG51bGwpLEE5KHRoaXMsInJvd0F4aXNTeW5jZXIiLG51bGwpLEE5KHRoaXMsImNvbHVtbkF4aXNTeW5jZXIiLG51''@;'; put 'put ''bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB3MX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdzEsLi4uVDJ0XX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''dzFdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGE9dGhpcztpZighdGhpcy5lbmFibGVkKXtpZih0aGlzLmVuZ2luZT1udWxsIT09KGw9ZnVuY3Rpb24gbzJ0KGMpe2NvbnN0IGw9Yy5nZXRTZXR0aW5ncygpLGE9bFt3MV0sZD1hPy5lbmdpbmU7aWYoITA9PT1hfHxfYyhkKSlyZXR1cm4gbnVsbDt2''@;'; put 'put ''YXIgaDtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5oeXBlcmZvcm11bGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBkKXJldHVybiBmdW5jdGlvbiBzMnQoYyxsLGEpe2NvbnN0IGQ9bFt3MV0saD1mdW5jdGlvbiByMnQoYyl7dmFyIGw7Y29uc3QgYT1jW3cxXSxkPUY1ZShudWxsIT1hJiZudWxsIT09''@;'; put 'put ''KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksaD1QNWUoYyk7cmV0dXJuey4uLlNRLC4uLmQsLi4uaH19KGwpLGY9SkYoKSx2PU1RKCk7KGZ1bmN0aW9uIGwydChjLGwpe2wmJmwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRy''@;'; put 'put ''YW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKHYpe2lsKHYubWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBjMnQoYyxsKXtpZihsKXtjb25zdHtsYW5nQ29kZTphfT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRj''@;'; put 'put ''aChkKXtpbChkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgTT1jLmJ1aWxkRW1wdHkoaCk7cmV0dXJuIGYuc2V0KE0sW2FdKSx2LnNldChNLFthLmd1aWRdKSxmdW5jdGlvbiB1MnQoYyxsKXtsJiYoYy5zdXNwZW5kRXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFt''@;'; put 'put ''ZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6dn09YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Npb24oZCxoLGYsdil9Y2F0Y2goTSl7aWwoTS5tZXNzYWdlKX19KSxjLnJlc3VtZUV2YWx1YXRpb24oKSl9KE0sZC5uYW1lZEV4cHJlc3Npb25zKSxNLm9uKCJzaGVldEFkZGVkIiwoKT0+''@;'; put 'put ''e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNLm9uKCJzaGVldFJlbW92ZWQiLCgpPT57TS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLE19KG51bGwhPT0oaD1kLmh5cGVyZm9ybXVsYSkmJnZvaWQgMCE9PWg/aDpkLGwsYyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZfYyhkLmh5cGVy''@;'; put 'put ''Zm9ybXVsYSkpe2NvbnN0IGY9SkYoKSx2PU1RKCkuZ2V0KGQpO3JldHVybiBmLmhhcyhkKXx8Zi5zZXQoZCxbXSksZi5nZXQoZCkucHVzaChjKSx2JiZ2LnB1c2goYy5ndWlkKSxkLmdldENvbmZpZygpLmxpY2Vuc2VLZXl8fGQudXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5Ok81ZX0pLChkLmdl''@;'; put 'put ''dENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PVNRLmxlYXBZZWFyMTkwMHx8ITE9PT1OTyhkLmdldENvbmZpZygpLm51bGxEYXRlLFNRLm51bGxEYXRlKSkmJmlsKGdsYElmIHlvdSB1c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIx''@;'; put 'put ''OTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhhbmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0''@;'; put 'put ''aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgaWwoIk1pc3NpbmcgdGhlIHJlcXVpcmVkIGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBsZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuIGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2Uu''@;'; put 'put ''Iik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5zaGVldE5hbWUsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpOyExIT09ZCYmenMoS3MsdGhpcyxpQSku''@;'; put 'put ''Y2FsbCh0aGlzLGQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsRzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsJDVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVw''@;'; put 'put ''ZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsRzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlRGF0YSIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSwkNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5RGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxMMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5l''@;'; put 'put ''dyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxPMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmFsaWRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8''@;'; put 'put ''ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsRDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKylo''@;'; put 'put ''W2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxQMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRDZWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRz''@;'; put 'put ''W2ZdO3JldHVybiB6cyhLcyxhLEs1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJu''@;'; put 'put ''IHpzKEtzLGEsSzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxGMnQpLmNh''@;'; put 'put ''bGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEgydCkuY2FsbChhLC4uLmgpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxCMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJD''@;'; put 'put ''cmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsajJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxOMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLFYydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxo''@;'; put 'put ''PW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSx6MnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0w''@;'; put 'put ''O2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsVTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyBTMnQodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNlKCJp''@;'; put 'put ''bml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1ZW5j''@;'; put 'put ''ZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgsZix2KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVz''@;'; put 'put ''SW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXModixNKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLHYsTSk9Pnt0''@;'; put 'put ''aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwoZCxo''@;'; put 'put ''KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3lu''@;'; put 'put ''Y2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEs''@;'; put 'put ''UjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMCksdGhpcy5lbmdpbmUudW5kbygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZWRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9y''@;'; put 'put ''bVJlZG8oITApLHRoaXMuZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMSl9''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsWjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZUF1dG9maWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEkydCkuY2FsbChhLC4uLmgpfSksazkockEsdGhpcykuZm9yRWFjaChkPT57bGV0W2gs''@;'; put 'put ''Zl09ZDtyZXR1cm4gdGhpcy5lbmdpbmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7azkockEsdGhpcykuZm9yRWFjaChsPT57bGV0W2EsZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGEsZCl9KSxONWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRo''@;'; put 'put ''aXMuZW5naW5lPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIGkydChjKXt2YXIgbDtjb25zdCBhPWNbdzFdO3JldHVybnsuLi5GNWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11''@;'; put 'put ''bGE/YS5lbmdpbmU6e30pLC4uLlA1ZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBhMnQoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9KSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5l''@;'; put 'put ''bmdpbmUudXBkYXRlQ29uZmlnKGEpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV07aWYoUGEoZCkmJlBhKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChkLnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMu''@;'; put 'put ''c2hlZXROYW1lKXtjb25zdCBoPXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdLnNoZWV0TmFtZTtpZihoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGY9dGhpcy5hZGRTaGVldChoPz92b2lkIDAsdGhp''@;'; put 'put ''cy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpO3pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxmKX19c3VwZXIudXBkYXRlUGx1Z2luKGwpfWRlc3Ryb3koKXtrOShyQSx0aGlzKS5mb3JFYWNoKGw9Pnt2YXIgYTtsZXRbZCxoXT1sO3JldHVybiBudWxsPT09KGE9dGhpcy5lbmdpbmUpfHx2b2lk''@;'; put 'put ''IDA9PT1hP3ZvaWQgMDphLm9mZihkLGgpfSksdTYockEsdGhpcyxudWxsKSxONWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGVzdHJveSgpfWFkZFNoZWV0KGwsYSl7aWYoUGEoYSkmJiFFM2UoYSkpcmV0dXJuIGlsKCJUaGUgcHJvdmlkZWQgZGF0YSBz''@;'; put 'put ''aG91bGQgYmUgYW4gYXJyYXkgb2YgYXJyYXlzLiIpLCExO2lmKG51bGwhPWwmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiBpbCgiU2hlZXQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSwhMTt0cnl7Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRT''@;'; put 'put ''aGVldChsPz92b2lkIDApO3JldHVybiBhJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5lbmdpbmUuZ2V0U2hlZXRJZChkKSxhKSxkfWNhdGNoKGQpe3JldHVybiBpbChkLm1lc3NhZ2UpLCExfX1zd2l0Y2hTaGVldChsKXtpZighdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3Qo''@;'; put 'put ''bCkpcmV0dXJuIHZvaWQgTiQoYFRoZSBzaGVldCBuYW1lZCBcYCR7bH1cYCBkb2VzIG5vdCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7enMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGwpO2NvbnN0IGE9dGhpcy5lbmdpbmUuZ2V0U2hlZXRTZXJpYWxpemVkKHRoaXMuc2hlZXRJZCk7YS5sZW5n''@;'; put 'put ''dGg+MCYmdGhpcy5ob3QubG9hZERhdGEoYSxgJHtwMSh3MSl9LnN3aXRjaFNoZWV0YCl9Z2V0Q2VsbFR5cGUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlz''@;'; put 'put ''aWNhbFJvdyhsKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7cmV0dXJuIG51bGwhPT1oJiZudWxsIT09Zj90aGlzLmVuZ2luZS5nZXRDZWxsVHlwZSh7c2hlZXQ6ZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29s''@;'; put 'put ''dW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShsLGEpe3JldHVybiB0aGlzLmVuZ2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtzaGVldDphcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9h''@;'; put 'put ''cmd1bWVudHNbMl06dGhpcy5zaGVldElkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl7bGV0IGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPW5ldyBTZXQ7bC5mb3JFYWNoKGg9Pnt2YXIgZjtjb25zdCB2PW51bGw9PWh8fG51bGw9PT0oZj1oLmFkZHJlc3MpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNoZWV0O3ZvaWQgMCE9''@;'; put 'put ''PXYmJihkLmhhcyh2KXx8ZC5hZGQodikpfSksSDVlKHRoaXMuZW5naW5lKS5mb3JFYWNoKChoLGYpPT57dmFyIHY7KGF8fGYhPT10aGlzLnNoZWV0SWQpJiZkLmhhcyhmKSYmKGgucmVuZGVyKCksbnVsbD09PSh2PWgudmlldyl8fHZvaWQgMD09PXZ8fHYuYWRqdXN0RWxlbWVudHNTaXplKCkp''@;'; put 'put ''fSl9dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhsKXtjb25zdCBkPWY9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6RCxzaGVldDpafT1udWxsIT09KHY9Zj8uYWRkcmVzcykmJnZvaWQgMCE9PXY/djp7fTtyZXR1cm4gUGEoWik/YCR7Wn06JHtNfXgke0R9YDoiIn0saD1uZXcgU2V0KChhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10pLm1hcChmPT5kKGYpKSk7bC5mb3JFYWNoKGY9Pnt2YXIgdixNO2NvbnN0e3JvdzpELGNvbDpafT1udWxsIT09KHY9Zi5hZGRyZXNzKSYmdm9pZCAwIT09dj92Ont9O2lmKCExPT09UGEoRCl8fCExPT09''@;'; put 'put ''UGEoWil8fEQ+PXRoaXMuaG90LmNvdW50Um93cygpfHxaPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgcmU9bnVsbD09Znx8bnVsbD09PShNPWYuYWRkcmVzcyl8fHZvaWQgMD09PU0/dm9pZCAwOk0uc2hlZXQsY2U9ZChmKTtpZih2b2lkIDAhPT1yZSYmIWguaGFzKGNlKSl7''@;'; put 'put ''Y29uc3QgYmU9SDVlKHRoaXMuZW5naW5lKS5nZXQocmUpO2lmKCFiZSlyZXR1cm47YmUudmFsaWRhdGVDZWxsKGJlLmdldERhdGFBdENlbGwoRCxaKSxiZS5nZXRDZWxsTWV0YShELFopLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhFbmdpbmUobCxhLGQpe2NvbnN0IGg9e3Jvdzp0aGlzLnJv''@;'; put 'put ''d0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksc2hlZXQ6dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaCkp''@;'; put 'put ''cmV0dXJuIHZvaWQgaWwoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoaCl9YCk7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO3JldHVybiB4UShkLGYudHlwZSkmJihCNWUoZCxmLmRhdGVGb3JtYXQpP2Q9ajVlKGQsZi5kYXRlRm9y''@;'; put 'put ''bWF0KTohMT09PWZ1bmN0aW9uIHAydChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMuc3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhoLGQpfX1mdW5jdGlvbiBpQShjKXt0aGlzLnNoZWV0TmFtZT1jLHRoaXMuc2hlZXRJ''@;'; put 'put ''ZD10aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKX1mdW5jdGlvbiBEMnQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QucHJvcFRvQ29sKGEpO2lmKHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUobCxkKSl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4''@;'; put 'put ''RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxzaGVldDp0aGlzLnNoZWV0SWR9LGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxkKTtsZXQgdj10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoaCk7cmV0dXJuImRh''@;'; put 'put ''dGUiPT09Zi50eXBlJiZtMSh2KSYmKHY9ejVlKHYsZi5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiB2JiZudWxsIT09dj92LnZhbHVlOnZ9cmV0dXJuIGN9ZnVuY3Rpb24gSTJ0KGMsbCxhKXtjb25zdHtyb3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6''@;'; put 'put ''dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93Ok0sY29sOkR9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlosY29sOnJlfT1hLmdldEJvdHRvbUVuZENvcm5lcigpLGNlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLGNv''@;'; put 'put ''bDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRl''@;'; put 'put ''eEZyb21WaXN1YWxJbmRleCh2KSxzaGVldDp0aGlzLnNoZWV0SWR9fSxiZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChNKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6''@;'; put 'put ''dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChaKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocmUpLHNoZWV0OnRoaXMuc2hlZXRJZH19O2lmKCExPT09dGhpcy5lbmdp''@;'; put 'put ''bmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoYmUpKXJldHVybiExO2NvbnN0IEVlPXRoaXMuZW5naW5lLmdldEZpbGxSYW5nZURhdGEoY2UsYmUpLHtyb3c6QmUsY29sOnFlfT1jZS5zdGFydCx7cm93OnJ0LGNvbDpwdH09Y2UuZW5kLGR0PXJ0LUJlKzEsSnQ9cHQtcWUrMTtmb3Io''@;'; put 'put ''bGV0IHZuPTA7dm48RWUubGVuZ3RoO3ZuKz0xKWZvcihsZXQgQ249MDtDbjxFZVt2bl0ubGVuZ3RoO0NuKz0xKXtjb25zdCB0bj1FZVt2bl1bQ25dLE1uPUJlK3ZuJWR0LENyPXFlK0NuJUp0LEdyPXRoaXMuaG90LmdldENlbGxNZXRhKE1uLENyKTt4USh0bixHci50eXBlKSYmKHRuLnN0YXJ0''@;'; put 'put ''c1dpdGgoIiciKT9FZVt2bl1bQ25dPXRuLnNsaWNlKDEpOiExPT09dGhpcy5pc0Zvcm11bGFDZWxsVHlwZShNbixDcix0aGlzLnNoZWV0SWQpJiYoRWVbdm5dW0NuXT1nMnQodG4sR3IuZGF0ZUZvcm1hdCkpKX1yZXR1cm4gRWV9ZnVuY3Rpb24gRzVlKGMsbCl7KGFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMocDEodzEpKXx8dTYockgsdGhpcyxfYyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEpKX1mdW5jdGlvbiBSMnQoKXtpZihrOShySCx0aGlzKSlyZXR1cm4gdm9pZCB0aGlzLnN3aXRjaFNoZWV0KHRo''@;'; put 'put ''aXMuc2hlZXROYW1lKTtjb25zdCBjPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxmLHtza2lwTWV0YUV4dGVuc2lvbjohMH0pLE09di5kYXRlRm9ybWF0O3hRKGgs''@;'; put 'put ''di50eXBlKSYmKEI1ZShoLE0pP2NbZF1bZl09ajVlKGgsTSk6aC5zdGFydHNXaXRoKCI9Iil8fChjW2RdW2ZdPWAnJHtofWApKX0pfSksdTYoQmcsdGhpcywhMCk7Y29uc3QgbD10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGMpO3RoaXMuaW5kZXhTeW5jZXIuc2V0''@;'; put 'put ''dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhsKSx1NihCZyx0aGlzLCExKX1mdW5jdGlvbiAkNWUoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06''@;'; put 'put ''IiI7aWYoYS5pbmNsdWRlcyhwMSh3MSkpKXJldHVybjtjb25zdCBkPWZ1bmN0aW9uIGQydChjLGwpe3JldHVybihfYyhsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFkZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2luZSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXS5zaGVldE5hbWUp''@;'; put 'put ''O2lmKHpzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxkKSwidXBkYXRlU2V0dGluZ3MiIT09YSlpZihrOShySCx0aGlzKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7aWYodGhpcy5lbmdpbmUuaXNJdFBv''@;'; put 'put ''c3NpYmxlVG9SZXBsYWNlU2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKSl7dTYoQmcsdGhpcywhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5z''@;'; put 'put ''aGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKSx1NihCZyx0aGlzLCExKX19fWZ1bmN0aW9uIEwydChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fGs5KEJnLHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0''@;'; put 'put ''TmFtZSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3coYyk7aWYobnVsbD09PWh8fG51bGw9PT1sKXJldHVybjtjb25zdCBmPXRoaXMuZ2V0Q2VsbFR5cGUoaCxsKTtpZigiVkFMVUUiPT09Znx8IkVNUFRZIj09PWYpcmV0dXJuIHZvaWQoYS52YWx1ZT1mdW5jdGlvbiBmMnQo''@;'; put 'put ''Yyl7cmV0dXJuIGZ1bmN0aW9uIGgydChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hhckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX0oYyk/Yy5zdWJzdHIoMSk6Y30oYS52YWx1ZSkpO2NvbnN0IHY9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21W''@;'; put 'put ''aXN1YWxJbmRleChoKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksc2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgTT10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUodik7Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsTWV0YShoLGwse3NraXBNZXRh''@;'; put 'put ''RXh0ZW5zaW9uOiEwfSk7ImRhdGUiPT09RC50eXBlJiZtMShNKSYmKE09ejVlKE0sRC5kYXRlRm9ybWF0KSksYS52YWx1ZT0ib2JqZWN0Ij09dHlwZW9mIE0mJm51bGwhPT1NP00udmFsdWU6TX1mdW5jdGlvbiBPMnQoYyxsLGEsZCl7aWYoImdldCIhPT1kfHxrOShCZyx0aGlzKXx8bnVsbD09''@;'; put 'put ''PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGMpLGY9dGhpcy5ob3QucHJvcFRvQ29sKGwpO2lmKG51bGw9PT1ofHxudWxsPT09ZilyZXR1cm47Y29uc3Qgdj10aGlz''@;'; put 'put ''LmdldENlbGxUeXBlKGgsZik7aWYoIlZBTFVFIj09PXZ8fCJFTVBUWSI9PT12KXJldHVybjtjb25zdCBNPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKSk7aWYoMD09PU0ud2lkdGgmJjA9PT1NLmhlaWdodClyZXR1''@;'; put 'put ''cm47Y29uc3QgRD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlzLnNoZWV0SWR9O2EudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2Vs''@;'; put 'put ''bFNlcmlhbGl6ZWQoRCl9ZnVuY3Rpb24gSzVlKGMsbCl7aWYobHcobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXSxoPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57Yy5mb3JFYWNoKGY9PntsZXRbdixNLCxEXT1mO2NvbnN0IFo9dGhpcy5ob3QucHJvcFRvQ29sKE0pLHJlPXRoaXMuaG90LnRvUGh5''@;'; put 'put ''c2ljYWxSb3codiksY2U9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihaKSxiZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChaKSxzaGVldDp0aGlz''@;'; put 'put ''LnNoZWV0SWR9O251bGwhPT1yZSYmbnVsbCE9PWNlP3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUodixaLEQpOmEucHVzaChbdixaLERdKSxkLnB1c2goe2FkZHJlc3M6YmV9KX0pfSk7YS5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBmPXRo''@;'; put 'put ''aXMuZW5naW5lLmJhdGNoKCgpPT57YS5mb3JFYWNoKHY9PntsZXRbTSxELFpdPXY7dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZShNLEQsWil9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYsITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaCksdGhpcy52YWxpZGF0ZURl''@;'; put 'put ''cGVuZGVudENlbGxzKGgsZCl9ZnVuY3Rpb24gUDJ0KGMsbCl7aWYobHcobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXTtjLmZvckVhY2goaD0+e2xldFtmLHYsLE1dPWg7Y29uc3QgRD10aGlzLmhvdC5wcm9wVG9Db2wodik7aWYoIW0xKEQpKXJldHVybjtjb25zdCBaPXtyb3c6dGhpcy5yb3dB''@;'; put 'put ''eGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEQpLHNoZWV0OnRoaXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoWik/KGQucHVz''@;'; put 'put ''aCh7YWRkcmVzczpafSksYS5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhaLE0pKSk6aWwoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KFopfWApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoYSksdGhpcy52''@;'; put 'put ''YWxpZGF0ZURlcGVuZGVudENlbGxzKGEsZCl9ZnVuY3Rpb24gRjJ0KGMsbCl7bGV0IGE9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyk7aWYoYz49dGhpcy5ob3QuY291bnRSb3dzKCkmJihhPWMpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2lu''@;'; put 'put ''ZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFthLGxdKSlyZXR1cm4hMX1mdW5jdGlvbiBIMnQoYyxsKXtsZXQgYT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudENvbHMoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2EsbF0p''@;'; put 'put ''KXJldHVybiExfWZ1bmN0aW9uIE4ydChjLGwsYSl7cmV0dXJuITEhPT10aGlzLnJvd0F4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZVJvd3ModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlv''@;'; put 'put ''biBWMnQoYyxsLGEpe3JldHVybiExIT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoYSkuZXZlcnkoZj0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbZiwxXSkpJiZ2b2lkIDB9ZnVuY3Rpb24gQjJ0KGMsbCxh''@;'; put 'put ''KXtpZihsdyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRSb3dzKHRoaXMuc2hlZXRJZCxbdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIGoydChjLGwsYSl7aWYo''@;'; put 'put ''bHcoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGxdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKX1mdW5jdGlvbiB6MnQoYyxsLGEsZCl7''@;'; put 'put ''aWYobHcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFt2LDFdKX0p''@;'; put 'put ''fSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gVTJ0KGMsbCxhLGQpe2lmKGx3KGQpKXJldHVybjtjb25zdCBoPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgodixNKT0+TS12KSxmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57''@;'; put 'put ''aC5mb3JFYWNoKHY9Pnt0aGlzLmVuZ2luZS5yZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdiwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpfWZ1bmN0aW9uIFoydChjLGwsYSl7dmFyIGQ7dTYoQmcsdGhpcywhMCk7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRh''@;'; put 'put ''QXJyYXkoYSwwLGErKChudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5sZW5ndGgpfHwwKSx0aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSk7dTYoQmcsdGhpcywhMSksaC5mb3JFYWNoKChmLHYpPT57Zi5mb3JFYWNoKChNLEQpPT57dGhpcy5lbmdpbmUuc2V0''@;'; put 'put ''Q2VsbENvbnRlbnRzKHtjb2w6RCxyb3c6YSt2LHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tNXV0pfSl9KX1mdW5jdGlvbiBXMnQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGMpfWZ1bmN0aW9uIFkydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ck5hbWVkRXhwcmVzc2lvbkFkZGVkIixjLGwpfWZ1bmN0aW9uIEcydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGMsbCl9ZnVuY3Rpb24gJDJ0KGMpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLGMpfWZ1bmN0aW9uIEsy''@;'; put 'put ''dChjLGwpe3pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxsKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbmFtZWQiLGMsbCl9ZnVuY3Rpb24gcTJ0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1vdmVkIixjLGwpfWZ1bmN0aW9uIHE1ZShjLGwpe2lmKGwuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRDkoYyxsKXtyZXR1cm4gYy5nZXQoZDYoYyxsKSl9ZnVuY3Rpb24gWDVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoZDYo''@;'; put 'put ''YyxsKSxhKSxhfWZ1bmN0aW9uIGQ2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3Qi''@;'; put 'put ''KX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlQ29sdW1ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksU2EuZ2V0U2luZ2xldG9uKCku''@;'; put 'put ''cmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IEo1ZT0iaGlkZGVuQ29sdW1ucyI7dmFyIFpwPW5ldyBXZWFrTWFwLEk5PW5ldyBXZWFrU2V0O2NsYXNzIG5mdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBRMnQoYyxsKXtx''@;'; put 'put ''NWUoYyxsKSxsLmFkZChjKX0odGhpcyxJOSksZnVuY3Rpb24gZWZ0KGMsbCxhKXtxNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFpwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBKNWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzEwfXN0YXRpYyBn''@;'; put 'put ''ZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEsY29sdW1uczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0o1ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChY''@;'; put 'put ''NWUoWnAsdGhpcyxuZXcgZlApLEQ5KFpwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmQ2KEk5LHRoaXMsbGZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsRDkoWnAsdGhpcykpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBkNihJOSxsLHNmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5kNihJOSx0aGlzLGlmdCkuY2FsbCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGEsZCk9PmQ2KEk5LHRoaXMscmZ0KS5jYWxsKHRoaXMsYSxkKSwyKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBkNihJOSxsLG9mdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5kNihJOSx0aGlz''@;'; put 'put ''LGFmdCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9RDkoWnAs''@;'; put 'put ''dGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwubWFwKFo9PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oWikpLFo9PntmW1pdPSExfSksaD1xdShmLChaLHJlLGNlKT0+KHJlJiZaLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oY2UpKSxaKSxb''@;'; put 'put ''XSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZUNvbHVtbnMiLGEsaCxkJiZ2KSYmKGQmJnYmJkQ5KFpwLHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZUNvbHVtbnMi''@;'; put 'put ''LGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd0NvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd0NvbHVtbnMoYSl9aGlkZUNvbHVtbnMobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlQ29sdW1ucyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVj''@;'; put 'put ''dXRpb24oKCk9PntZbihsLHY9PntEOShacCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVDb2x1bW5zIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVDb2x1bW4o''@;'; put 'put ''KXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVDb2x1bW5zKGEpfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4geXMoRDkoWnAsdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90''@;'; put 'put ''LnRvVmlzdWFsQ29sdW1uKGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gRDkoWnAsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuISEoQXJyYXkuaXNB''@;'; put 'put ''cnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBDb2x1bW5PblBhc3RlPSExfSl9ZGVzdHJveSgpe1g1ZShacCx0aGlzLG51bGwp''@;'; put 'put ''LHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcmZ0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDp0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKSYmKHRoaXMuaXNIaWRkZW4obCsxKXx8dGhpcy5pc0hpZGRlbihsLTEpKSYmIm51bWJlciI9PXR5cGVvZiBjJiZ0aGlzLmhvdC5o''@;'; put 'put ''YXNDb2xIZWFkZXJzKCk/YysxNTp2b2lkIDB9ZnVuY3Rpb24gaWZ0KGMsbCxhKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKGwpJiYoYS5za2lwQ29sdW1uT25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWEuY2xhc3NOYW1l''@;'; put 'put ''PWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vsc2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4w''@;'; put 'put ''KXtjb25zdCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtoPi0xJiZkLnNwbGljZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rpb24gYWZ0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0o''@;'; put 'put ''ZCxoLGYsdik9PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRDb2w6ZixlbmRDb2w6dn0pfTtyZXR1cm4gWW4oYyxkPT57bGV0IGg9ITAsZj0wO0dhKGQuc3RhcnRDb2wsZC5lbmRDb2wsdj0+e3RoaXMuaXNIaWRkZW4odik/KGh8fGEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYt''@;'; put 'put ''MSksaD0hMCk6KGgmJihmPXYpLHY9PT1kLmVuZENvbCYmYShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdiksaD0hMSl9KX0pLGx9ZnVuY3Rpb24gb2Z0KGMsbCl7aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDApcmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRl''@;'; put 'put ''bihjLTEpJiZhLnB1c2goImFmdGVySGlkZGVuQ29sdW1uIiksYzx0aGlzLmhvdC5jb3VudENvbHMoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3JlSGlkZGVuQ29sdW1uIiksVGkobCxhKX1mdW5jdGlvbiBzZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOnNzfSxmdW5jdGlv''@;'; put 'put ''biBYMnQoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZShScSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChE''@;'; put 'put ''KTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IE09dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRo''@;'; put 'put ''aXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVu''@;'; put 'put ''Y3Rpb24gSjJ0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTHEsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1s''@;'; put 'put ''WzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgo''@;'; put 'put ''ZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5zKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudENvbHMoKXx8dGhpcy5zZWxlY3RDb2x1bW5zKGgsZil9LGRpc2FibGVkOiEx''@;'; put 'put ''LGhpZGRlbigpe2NvbnN0IGE9eXMoYy5nZXRIaWRkZW5Db2x1bW5zKCksY2U9PnRoaXMudG9QaHlzaWNhbENvbHVtbihjZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0''@;'; put 'put ''aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsdj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZp''@;'; put 'put ''c3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFo9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLHJlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3QgRWU9Wi5zbGljZShoLGYrMSk7cmUucHVzaCguLi5FZS5maWx0ZXIoQmU9PmEuaW5jbHVk''@;'; put 'put ''ZXMoQmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aClyZS5wdXNoKC4uLlouc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSlyZS5wdXNoKC4uLlouc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCBjZT10aGlzLmNvdW50Q29scygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZy''@;'; put 'put ''b21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwtMSkpJiZjZT5mJiZyZS5wdXNoKC4uLlouc2xpY2UoZisxKSl9cmV0dXJuIFluKHJlLGNlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4oY2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24g''@;'; put 'put ''bGZ0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoImNvbHVtbnMiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVDb2x1bW5zKGMpfWZ1bmN0aW9uIFE1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUg''@;'; put 'put ''ZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUjkoYyxsKXtyZXR1cm4gYy5nZXQoaDYoYyxsKSl9ZnVuY3Rpb24gZW1lKGMsbCxhKXtyZXR1cm4gYy5zZXQoaDYoYyxsKSxhKSxhfWZ1bmN0aW9uIGg2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZVJvd3MiKSxTYS5nZXRTaW5nbGV0''@;'; put 'put ''b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlUm93cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVSb3dzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlUm93cyIpO2NvbnN0IHRtZT0iaGlkZGVuUm93cyI7dmFyIFdwPW5ldyBXZWFrTWFw''@;'; put 'put ''LEw5PW5ldyBXZWFrU2V0O2NsYXNzIHBmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBkZnQoYyxsKXtRNWUoYyxsKSxsLmFkZChjKX0odGhpcyxMOSksZnVuY3Rpb24gaGZ0KGMsbCxhKXtRNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFdw''@;'; put 'put ''LG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0bWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNF''@;'; put 'put ''bmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChlbWUoV3AsdGhpcyxuZXcgZlApLFI5KFdwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9Pmg2KEw5LHRoaXMsX2Z0KS5jYWxsKHRo''@;'; put 'put ''aXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsUjkoV3AsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5''@;'; put 'put ''KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBoNihMOSxsLHlmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5oNihMOSx0aGlzLG1mdCkuY2FsbCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlS''@;'; put 'put ''b3dIZWlnaHQiLChhLGQpPT5oNihMOSx0aGlzLGdmdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07''@;'; put 'put ''cmV0dXJuIGg2KEw5LGwsYmZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9Pmg2KEw5LHRoaXMsdmZ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlz''@;'; put 'put ''LmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Um93cyhsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1SOShXcCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obC5tYXAoWj0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhaKSksWj0+e2Zb''@;'; put 'put ''Wl09ITF9KSxoPXF1KGYsKFoscmUsY2UpPT4ocmUmJloucHVzaCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhjZSkpLFopLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJnYpJiYoZCYmdiYmUjkoV3AsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJvd3MiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJv''@;'; put 'put ''d3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5o''@;'; put 'put ''b3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntSOShXcCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dzIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVS''@;'; put 'put ''b3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4geXMoUjkoV3AsdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRv''@;'; put 'put ''VmlzdWFsUm93KGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gUjkoV3AsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYm''@;'; put 'put ''bC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBSb3dPblBhc3RlPSExfSl9ZGVzdHJveSgpe2VtZShXcCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ry''@;'; put 'put ''b3koKX19ZnVuY3Rpb24gZ2Z0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDpjfWZ1bmN0aW9uIG1mdChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRlbihjKSYmKGEuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNI''@;'; put 'put ''aWRkZW4oYy0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGEuY2xhc3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIg''@;'; put 'put ''Iik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuUm93Iik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1bmN0aW9uIHZmdChjKXtpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztj''@;'; put 'put ''b25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIFluKGMsZD0+e2xldCBoPSEwLGY9MDtHYShkLnN0YXJ0Um93LGQuZW5kUm93LHY9Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGYsdi0xLGQuc3Rh''@;'; put 'put ''cnRDb2wsZC5lbmRDb2wpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRSb3cmJmEoZix2LGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIGJmdChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEm''@;'; put 'put ''JnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlblJvdyIpLGM8dGhpcy5ob3QuY291bnRSb3dzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlblJvdyIpLFRpKGwsYSl9ZnVuY3Rpb24geWZ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30s''@;'; put 'put ''ZnVuY3Rpb24gY2Z0KGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRl''@;'; put 'put ''ZFBocmFzZShPcSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVz''@;'; put 'put ''aChEKTtjLmhpZGVSb3dzKGYpO2NvbnN0IE09dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Um93cyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVu''@;'; put 'put ''ZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gdWZ0''@;'; put 'put ''KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUHEsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxl''@;'; put 'put ''bmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09''@;'; put 'put ''ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNob3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudFJvd3MoKXx8dGhpcy5zZWxlY3RSb3dzKGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9eXMoYy5n''@;'; put 'put ''ZXRIaWRkZW5Sb3dzKCksY2U9PnRoaXMudG9QaHlzaWNhbFJvdyhjZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10''@;'; put 'put ''aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3csdj10aGlzLnJvd0luZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZp''@;'; put 'put ''c3VhbEluZGV4KGYpLFo9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLHJlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3QgRWU9Wi5zbGljZShoLGYrMSk7cmUucHVzaCguLi5FZS5maWx0ZXIoQmU9PmEuaW5jbHVkZXMoQmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aClyZS5wdXNo''@;'; put 'put ''KC4uLlouc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSlyZS5wdXNoKC4uLlouc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCBjZT10aGlzLmNvdW50Um93cygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChjZSwtMSkpJiZjZT5mJiZyZS5wdXNoKC4uLlouc2xpY2UoZisxKSl9cmV0dXJuIFluKHJlLGNlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3coY2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gX2Z0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoInJvd3MiKTtB''@;'; put 'put ''cnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVSb3dzKGMpfWZ1bmN0aW9uIG5tZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUFEoYyxs''@;'; put 'put ''KXtyZXR1cm4gYy5nZXQoaUgoYyxsKSl9ZnVuY3Rpb24gRlEoYyxsLGEpe3JldHVybiBjLnNldChpSChjLGwpLGEpLGF9ZnVuY3Rpb24gaUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5GcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUiKSxTYS5nZXRT''@;'; put 'put ''aW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IHJtZT0ibWFudWFsQ29sdW1uRnJlZXplIjt2YXIgTzk9bmV3IFdlYWtNYXAsSFE9bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''RWZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFNmdChjLGwpe25tZShjLGwpLGwuYWRkKGMpfSh0aGlzLEhRKSxmdW5jdGlvbiBNZnQoYyxsLGEpe25tZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsTzksITEpfXN0YXRpYyBnZXQgUExVR0lO''@;'; put 'put ''X0tFWSgpe3JldHVybiBybWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtybWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVu''@;'; put 'put ''dURlZmF1bHRPcHRpb25zIixsPT5pSChIUSx0aGlzLFRmdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChsLGEpPT5pSChIUSx0aGlzLEFmdCkuY2FsbCh0aGlzLGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7RlEoTzks''@;'; put 'put ''dGhpcywhMSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRD''@;'; put 'put ''b2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+YS5maXhlZENvbHVtbnNTdGFydC0xO1BRKE85LHRoaXMpfHxGUShPOSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsZCkmJihkJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSxhLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGQpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0PjAmJmw8PWEuZml4ZWRDb2x1bW5zU3RhcnQtMTtQUShPOSx0aGlzKXx8RlEoTzksdGhpcywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGwsZCkmJihkJiYoYS5fZml4ZWRDb2x1bW5zU3RhcnQtPTEsdGhpcy5ob3QuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uVW5mcmVlemUiLGwsZCkpfX1mdW5jdGlvbiBUZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiB3ZnQoYyl7cmV0dXJu''@;'; put 'put ''e2tleToiZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobHEpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUo''@;'; put 'put ''KX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQt''@;'; put 'put ''MSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIENmdChjKXtyZXR1cm57a2V5OiJ1bmZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGNxKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVt''@;'; put 'put ''bihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBd''@;'; put 'put ''LmZyb20uY29sPj10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0hMCksYX19fSh0aGlzKSl9ZnVuY3Rpb24gQWZ0KGMsbCl7aWYoUFEoTzksdGhpcykpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihsPGF8fGMuc29t''@;'; put 'put ''ZShkPT5kPGEpKXJldHVybiExfX1mdW5jdGlvbiBhSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2Z0KGMpe3ZhciBsPWZ1bmN0aW9uIERmdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgY3c9InB4IixvbWU9Y2xh''@;'; put 'put ''c3MgSWZ0e2NvbnN0cnVjdG9yKGwpe2FIKHRoaXMsImhvdCIsdm9pZCAwKSxhSCh0aGlzLCJfZWxlbWVudCIsbnVsbCksYUgodGhpcywic3RhdGUiLDApLGFIKHRoaXMsImlubGluZVByb3BlcnR5Iix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pbmxpbmVQcm9wZXJ0eT1sLmlzUnRsKCk/InJp''@;'; put 'put ''Z2h0IjoibGVmdCJ9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVz''@;'; put 'put ''dHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe20xKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtjdyksbTEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPWErY3cpfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxl''@;'; put 'put ''O3JldHVybnt0b3A6bC50b3A/cGFyc2VJbnQobC50b3AsMTApOjAsc3RhcnQ6bFt0aGlzLmlubGluZVByb3BlcnR5XT9wYXJzZUludChsW3RoaXMuaW5saW5lUHJvcGVydHldLDEwKTowfX1zZXRTaXplKGwsYSl7bTEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrY3cpLG0xKGEp''@;'; put 'put ''JiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStjdyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNl''@;'; put 'put ''SW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrY3cpLG0xKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVtgbWFyZ2luJHtwMSh0aGlzLmlubGluZVByb3BlcnR5KX1gXT1hK2N3''@;'; put 'put ''KX1nZXRPZmZzZXQoKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGUsYT1gbWFyZ2luJHtwMSh0aGlzLmlubGluZVByb3BlcnR5KX1gO3JldHVybnt0b3A6bC5tYXJnaW5Ub3A/cGFyc2VJbnQobC5tYXJnaW5Ub3AsMTApOjAsc3RhcnQ6bFthXT9wYXJzZUludChsW2FdLDEwKTowfX19LE9m''@;'; put 'put ''dD1jbGFzcyBMZnQgZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19LEhmdD1jbGFzcyBGZnQgZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQs''@;'; put 'put ''Imh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIGIzKGMsbCxhKXtzbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHNtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl''@;'; put 'put ''bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gS2QoYyxsLGEpe3JldHVybiBjLnNldChmNihjLGwpLGEpLGF9ZnVuY3Rpb24gemEoYyxsKXtyZXR1cm4gYy5nZXQoZjYoYyxsKSl9ZnVuY3Rpb24gZjYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFz''@;'; put 'put ''KGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Nb3ZlIiksU2EuZ2V0U2luZ2xldG9u''@;'; put 'put ''KCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IFZRPSJtYW51YWxDb2x1bW5Nb3ZlIixsbWU9Imh0X19tYW51YWxDb2x1bW5Nb3ZlIixvSD0ic2hvdy11aSIsQlE9Im9uLW1vdmluZy0tY29sdW1ucyIsalE9ImFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIFExPW5ldyBX''@;'; put 'put ''ZWFrTWFwLHA2PW5ldyBXZWFrTWFwLGpnPW5ldyBXZWFrTWFwLHNIPW5ldyBXZWFrTWFwLGc2PW5ldyBXZWFrTWFwLGVkPW5ldyBXZWFrTWFwLGxIPW5ldyBXZWFrTWFwLEoyPW5ldyBXZWFrTWFwLHV3PW5ldyBXZWFrTWFwLGNIPW5ldyBXZWFrTWFwLGFBPW5ldyBXZWFrTWFwLFA5PW5ldyBX''@;'; put 'put ''ZWFrU2V0O2NsYXNzIEJmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBOZnQoYyxsKXtzbWUoYyxsKSxsLmFkZChjKX0odGhpcyxQOSksYjModGhpcyxRMSxuZXcgT2Z0KHRoaXMuaG90KSksYjModGhpcyxwNixuZXcgSGZ0KHRoaXMuaG90''@;'; put 'put ''KSksYjModGhpcyxqZyxbXSksYjModGhpcyxzSCwwKSxiMyh0aGlzLGc2LCExKSxiMyh0aGlzLGVkLHt9KSxiMyh0aGlzLGxILHZvaWQgMCksYjModGhpcyxKMix2b2lkIDApLGIzKHRoaXMsdXcsdm9pZCAwKSxiMyh0aGlzLGNILHZvaWQgMCksYjModGhpcyxhQSx2b2lkIDApfXN0YXRpYyBn''@;'; put 'put ''ZXQgUExVR0lOX0tFWSgpe3JldHVybiBWUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1ZRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmNihQOSxsLGpmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVP''@;'; put 'put ''bkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFA5LGwsVWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGlj''@;'; put 'put ''YWxseSIsKCk9PmY2KFA5LHRoaXMsV2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFA5LGws''@;'; put 'put ''WWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsbG1lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVn''@;'; put 'put ''aW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LGxtZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksemEoUTEsdGhpcykuZGVzdHJveSgpLHphKHA2LHRoaXMpLmRlc3Ryb3ko''@;'; put 'put ''KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZUNvbHVtbihsLGEpe3JldHVybiB0aGlzLm1vdmVDb2x1bW5zKFtsXSxhKX1tb3ZlQ29sdW1ucyhsLGEpe2NvbnN0IGQ9emEobEgsdGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29s''@;'; put 'put ''dW1uTW92ZSIsbCxhLGQsaCk7aWYoS2QobEgsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCB2PWgmJnRoaXMuaXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoImFmdGVyQ29sdW1uTW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5kcmFnQ29sdW1ucyhbbF0sYSl9ZHJhZ0NvbHVtbnMobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIEtkKGxILHRoaXMsYSksdGhpcy5tb3ZlQ29s''@;'; put 'put ''dW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5kLGY9YTwwLHY9bC5zb21lKEQ9PkQ8MCksTT1sLnNvbWUoRD0+RD49ZCk7cmV0dXJuIShofHxmfHx2''@;'; put 'put ''fHxNKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9cXUobCwoaCxmKT0+KGY8YSYmKGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlz''@;'; put 'put ''LmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2grPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09diYm''@;'; put 'put ''KGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgodil8fDApfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1ZRXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNl''@;'; put 'put ''IGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNTdGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3Rl''@;'; put 'put ''bnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmluZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuIEdhKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25z''@;'; put 'put ''KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KHphKEoyLHRoaXMpKSYmbD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVz''@;'; put 'put ''dE5vdEhpZGRlbkluZGV4KGwtMSwtMSl9KTtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGg9Im51bWJlciI9PXR5cGVvZiBkLnNjcm9sbFg/ZC5zY3JvbGxYOmQuc2Nyb2xsTGVmdDtsZXQg''@;'; put 'put ''Zj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lkdGgoMCx6YShKMix0aGlzKS0xKTtjb25zdCB2PWEuaGlkZXIub2Zmc2V0V2lkdGgsTT1hLlRCT0RZLm9mZnNldExlZnQsRD16YShRMSx0aGlzKS5nZXRPZmZzZXQoKS5zdGFydCxaPXphKFExLHRoaXMp''@;'; put 'put ''LmdldFNpemUoKS53aWR0aDtsZXQgcmU9MCxjZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IEJlPXRoaXMuaG90LnJvb3RXaW5kb3cscWU9c3UodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHJ0PUJlLmlubmVyV2lkdGgtemEodXcsdGhpcyktcWU7Y2U9QmUuaW5uZXJXaWR0aC16YShlZCx0''@;'; put 'put ''aGlzKS5ldmVudFBhZ2VYLXJ0LSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKX1lbHNlIGNlPXphKGVkLHRoaXMpLmV2ZW50UGFnZVgtKHphKHV3LHRoaXMpLSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKSk7aWYoemEoY0gsdGhpcykmJihyZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlu''@;'; put 'put ''bGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lkdGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydCh6YShKMix0aGlzKSkmJihmKz1oKSxmKz1yZSx6YShKMix0aGlzKTwwKXphKGFBLHRoaXMpPjA/emEoZWQsdGhpcykuY29sPTA6emEo''@;'; put 'put ''ZWQsdGhpcykuY29sPWw+MD9sLTE6bDtlbHNlIGlmKHphKGVkLHRoaXMpLlRELm9mZnNldFdpZHRoLzIrZjw9Y2Upe2NvbnN0IEJlPXphKEoyLHRoaXMpPj16YShzSCx0aGlzKT96YShzSCx0aGlzKS0xOnphKEoyLHRoaXMpO3phKGVkLHRoaXMpLmNvbD1CZSsxLGYrPXphKGVkLHRoaXMpLlRE''@;'; put 'put ''Lm9mZnNldFdpZHRofWVsc2UgemEoZWQsdGhpcykuY29sPXphKEoyLHRoaXMpO2xldCBiZT1jZSxFZT1mO2NlK1orRD49dj9iZT12LVotRDpjZStEPE0rcmUmJihiZT1NK3JlK01hdGguYWJzKEQpKSxmPj12LTE/RWU9di0xOjA9PT1FZT9FZT0xOnZvaWQgMCE9PWQuc2Nyb2xsWCYmemEoSjIs''@;'; put 'put ''dGhpcyk8emEoYUEsdGhpcykmJihFZS09emEodXcsdGhpcyk8PWQuc2Nyb2xsWD96YSh1dyx0aGlzKTowKSx6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGJlKSx6YShwNix0aGlzKS5zZXRQb3NpdGlvbihudWxsLEVlKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVu''@;'; put 'put ''dDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmY2KFA5LHRoaXMsemZ0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PmY2KFA5''@;'; put 'put ''LHRoaXMsWmZ0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7emEoUTEsdGhpcykuYnVpbGQoKSx6YShwNix0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXt6YShRMSx0aGlzKS5kZXN0cm95KCksemEocDYsdGhp''@;'; put 'put ''cykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gamZ0KGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxmPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx2PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCksTT1wbyhjLnRhcmdldCwic29ydEFjdGlvbiIpO2lmKCF2fHwhZnx8emEoZzYsdGhpcyl8fDAhPT1jLmJ1dHRvbnx8TSlyZXR1cm4gS2QoZzYsdGhpcywhMSksemEoamcsdGhpcykubGVuZ3RoPTAsdm9pZCBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbQlEsb0hdKTtjb25zdCBEPXphKHA2''@;'; put 'put ''LHRoaXMpLmlzQnVpbHQoKSYmIXphKHA2LHRoaXMpLmlzQXBwZW5kZWQoKSxaPXphKFExLHRoaXMpLmlzQnVpbHQoKSYmIXphKFExLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZaJiYoemEocDYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksemEoUTEsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2Nv''@;'; put 'put ''bnN0e2Zyb206cmUsdG86Y2V9PXYsYmU9TWF0aC5taW4ocmUuY29sLGNlLmNvbCksRWU9TWF0aC5tYXgocmUuY29sLGNlLmNvbCk7aWYobC5yb3c8MCYmbC5jb2w+PWJlJiZsLmNvbDw9RWUpe2QuY29sdW1uPSEwLEtkKGc2LHRoaXMsITApO2NvbnN0IEJlPWEuZmlyc3RDaGlsZD9hZmUoYyxh''@;'; put 'put ''LmZpcnN0Q2hpbGQpLng6Yy5vZmZzZXRYO3phKGVkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdlWCxLZChKMix0aGlzLGwuY29sKSx6YShlZCx0aGlzKS5URD1hLHphKGVkLHRoaXMpLmNvbD1sLmNvbCxLZChqZyx0aGlzLHRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhiZSxFZSkpLEtkKGNI''@;'; put 'put ''LHRoaXMsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLEtkKHNILHRoaXMsdGhpcy5ob3QuY291bnRDb2xzKCkpLEtkKGFBLHRoaXMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCksS2QodXcsdGhpcyxVMCh0aGlzLmhvdC5yb290RWxlbWVudCku''@;'; put 'put ''bGVmdCk7Y29uc3QgcWU9emEoY0gsdGhpcyk/LTE6MCxydD1oLmhvbGRlci5zY3JvbGxUb3AraC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxwdD1sLmNvbDx6YShhQSx0aGlzKSxkdD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5''@;'; put 'put ''T2Zmc2V0KCksSnQ9TWF0aC5hYnMoQmUtKHRoaXMuaG90LmlzUnRsKCk/YS5vZmZzZXRXaWR0aDowKSksdm49dGhpcy5nZXRDb2x1bW5zV2lkdGgoYmUsbC5jb2wtMSkrSnQsQ249dGhpcy5nZXRDb2x1bW5zV2lkdGgocWUsYmUtMSkrKHB0P2R0OjApK3ZuO3phKFExLHRoaXMpLnNldFBvc2l0''@;'; put 'put ''aW9uKHJ0LENuKSx6YShRMSx0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKGJlLEVlKSxoLmhpZGVyLm9mZnNldEhlaWdodC1ydCksemEoUTEsdGhpcykuc2V0T2Zmc2V0KG51bGwsLXZuKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxCUSl9ZWxzZSBsbyh0aGlzLmhvdC5yb290''@;'; put 'put ''RWxlbWVudCxqUSksS2QoZzYsdGhpcywhMSksemEoamcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24gemZ0KGMpe3phKGc2LHRoaXMpJiYoemEoZWQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiBVZnQoYyxsLGEsZCl7IXRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCF6YShnNix0aGlzKXx8KHphKGpnLHRoaXMpLmluZGV4T2YobC5jb2wpPi0xP2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LG9IKTpUaSh0aGlzLmhvdC5yb290RWxlbWVudCxvSCksZC5yb3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEtkKEoyLHRo''@;'; put 'put ''aXMsbC5jb2wpLHphKGVkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIFpmdCgpe2NvbnN0IGM9emEoZWQsdGhpcykuY29sLGw9emEoamcsdGhpcykubGVuZ3RoO2lmKEtkKEoyLHRoaXMsdm9pZCAwKSxLZChnNix0aGlzLCExKSxsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbQlEsb0gsalFdKSx0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGpRKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2NvbnN0IGE9emEoamcsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGg9dGhpcy5kcmFnQ29sdW1u''@;'; put 'put ''cyh6YShqZyx0aGlzKSxjKTtpZih6YShqZyx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKTt0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGYsZitsLTEpfX1mdW5jdGlvbiBXZnQoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD1jLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK2MuaG9sZGVyLnNjcm9sbFRvcDt6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihkKSx6YShRMSx0''@;'; put 'put ''aGlzKS5zZXRTaXplKG51bGwsYy5oaWRlci5vZmZzZXRIZWlnaHQtZCl9ZnVuY3Rpb24gWWZ0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIEMxKGMsbCxhKXtjbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGNtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZHUoYyxsLGEpe3JldHVybiBjLnNldCh5MyhjLGwpLGEpLGF9ZnVuY3Rpb24gRWEoYyxsKXtyZXR1cm4gYy5nZXQoeTMoYyxsKSl9ZnVuY3Rp''@;'; put 'put ''b24geTMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHVIPSJtYW51''@;'; put 'put ''YWxDb2x1bW5SZXNpemUiLHVtZT0ibWFudWFsQ29sdW1uV2lkdGhzIjt2YXIgemc9bmV3IFdlYWtNYXAsZEg9bmV3IFdlYWtNYXAsQmg9bmV3IFdlYWtNYXAsaEg9bmV3IFdlYWtNYXAsWXA9bmV3IFdlYWtNYXAsS2Z0PW5ldyBXZWFrTWFwLGR3PW5ldyBXZWFrTWFwLGZIPW5ldyBXZWFrTWFw''@;'; put 'put ''LHFkPW5ldyBXZWFrTWFwLFVnPW5ldyBXZWFrTWFwLEY5PW5ldyBXZWFrTWFwLHBIPW5ldyBXZWFrTWFwLG9BPW5ldyBXZWFrTWFwLHNBPW5ldyBXZWFrTWFwLGpoPW5ldyBXZWFrTWFwLGxBPW5ldyBXZWFrTWFwLEdwPW5ldyBXZWFrU2V0O2NsYXNzIHFmdCBleHRlbmRzIEZze3N0YXRpYyBn''@;'; put 'put ''ZXQgUExVR0lOX0tFWSgpe3JldHVybiB1SH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gR2Z0KGMsbCl7Y21lKGMsbCksbC5hZGQoYyl9KHRoaXMsR3ApLEMxKHRoaXMsemcsbnVsbCksQzEodGhpcyxkSCxu''@;'; put 'put ''dWxsKSxDMSh0aGlzLEJoLFtdKSxDMSh0aGlzLGhILG51bGwpLEMxKHRoaXMsWXAsbnVsbCksQzEodGhpcyxLZnQsbnVsbCksQzEodGhpcyxkdyxudWxsKSxDMSh0aGlzLGZILG51bGwpLEMxKHRoaXMscWQsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxDMSh0''@;'; put 'put ''aGlzLFVnLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksQzEodGhpcyxGOSxudWxsKSxDMSh0aGlzLHBILCExKSxDMSh0aGlzLG9BLDApLEMxKHRoaXMsc0EsbnVsbCksQzEodGhpcyxqaCx2b2lkIDApLEMxKHRoaXMsbEEsdm9pZCAwKSxUaShFYShxZCx0aGlz''@;'; put 'put ''KSwibWFudWFsQ29sdW1uUmVzaXplciIpLFRpKEVhKFVnLHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''dUhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoZHUoamgsdGhpcyxuZXcgWm0pLEVhKGpoLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnkzKEdwLHRoaXMsWGZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1h''@;'; put 'put ''cCh0aGlzLnBsdWdpbk5hbWUsRWEoamgsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHkzKEdwLGwscjN0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB5MyhHcCxsLGkzdCkuY2Fs''@;'; put 'put ''bChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4geTMoR3AsbCxhM3QpLmNhbGwobCwuLi5kKX0p''@;'; put 'put ''LHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtkdShsQSx0aGlzLEVhKGpoLHRoaXMpLmdldFZhbHVl''@;'; put 'put ''cygpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsdW1lLEVhKGpoLHRoaXMp''@;'; put 'put ''LmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHVtZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gRWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO0VhKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChhLG51bGwpfXNldHVwSGFuZGxl''@;'; put 'put ''UG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47ZHUoemcsdGhpcyxsKTtjb25zdHtfd3Q6YX09dGhpcy5ob3QudmlldyxkPWEud3RUYWJsZS5nZXRDb29yZHMoRWEoemcsdGhpcykpLGg9ZC5jb2w7aWYoaDwwKXJldHVybjtjb25zdCBmPXh1KEVhKHpnLHRoaXMpKSx2PUVhKHpn''@;'; put 'put ''LHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBEO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpJiYoRD1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKEVhKHpnLHRoaXMpLGQucm93LGQuY29s''@;'; put 'put ''KSksRHx8KEQ9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oRWEoemcsdGhpcyksZC5yb3csZC5jb2wpKSxkdShkSCx0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLGR1KEJoLHRoaXMs''@;'; put 'put ''W10pO2NvbnN0IFo9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmWiYmWW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgp''@;'; put 'put ''LGNlPT57R2EoY2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsY2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLEJlPT57RWEoQmgsdGhpcykuaW5jbHVkZXMoQmUpfHxFYShCaCx0aGlzKS5wdXNoKEJlKX0pfSksRWEoQmgsdGhpcykuaW5jbHVkZXMoRWEoZEgsdGhpcykpfHxkdShCaCx0aGlz''@;'; put 'put ''LFtFYShkSCx0aGlzKV0pLGR1KGZILHRoaXMsRC5zdGFydC02KSxkdShkdyx0aGlzLHBhcnNlSW50KHYud2lkdGgsMTApKSxFYShxZCx0aGlzKS5zdHlsZS50b3A9YCR7RC50b3B9cHhgLEVhKHFkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtFYShmSCx0aGlzKStFYShkdyx0aGlz''@;'; put 'put ''KX1weGAsRWEocWQsdGhpcykuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKEVhKHFkLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXtFYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7RWEoZkgsdGhpcykrRWEoaEgs''@;'; put 'put ''dGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoeHUoRWEocWQsdGhpcykpLDEwKSxhPXBhcnNlSW50KEVhKHFkLHRoaXMpLnN0eWxlLnRvcCwxMCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVIZWlnaHQoKTtUaShFYShxZCx0aGlzKSwiYWN0aXZlIiks''@;'; put 'put ''VGkoRWEoVWcsdGhpcyksImFjdGl2ZSIpLEVhKFVnLHRoaXMpLnN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksRWEoVWcsdGhpcykuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKEVhKFVnLHRoaXMpKX1y''@;'; put 'put ''ZWZyZXNoR3VpZGVQb3NpdGlvbigpe0VhKFVnLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1FYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7bG8oRWEocWQsdGhpcyksImFjdGl2ZSIpLGxvKEVhKFVnLHRoaXMpLCJhY3RpdmUiKX1jaGVj''@;'; put 'put ''a0lmQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9Um0obCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpLHt0b3BPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5USEVB''@;'; put 'put ''RCxoLmNsb25lLnd0VGFibGUuVEhFQURdLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9YWZ0ZXJNb3VzZURvd25UaW1l''@;'; put 'put ''b3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLEVhKFlwLHRoaXMpLGQsITApO3ZvaWQgMCE9PWYmJmR1KFlw''@;'; put 'put ''LHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQsRWEoWXAsdGhpcykpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksZCwhMCksaCYmbCgpfTtFYShvQSx0aGlzKT49MiYmKEVhKEJoLHRoaXMp''@;'; put 'put ''Lmxlbmd0aD4xPyhZbihFYShCaCx0aGlzKSxoPT57YShoKX0pLGwoKSk6WW4oRWEoQmgsdGhpcyksaD0+e2EoaCwhMCl9KSksZHUob0EsdGhpcywwKSxkdShzQSx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290V2luZG93Omwscm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5l''@;'; put 'put ''dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW92ZXIiLGQ9PnkzKEdwLHRoaXMsSmZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixkPT55MyhHcCx0aGlzLFFmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsZD0+eTMoR3AsdGhpcyxlM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+eTMoR3AsdGhpcyx0M3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRN''@;'; put 'put ''YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoRWEocWQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+eTMoR3AsdGhpcyxuM3QpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFhmdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF0sbD10aGlz''@;'; put 'put ''LmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgbDwidSI/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCk6QXJyYXkuaXNBcnJheShjKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRp''@;'; put 'put ''b24oKCk9PntjLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCksZHUobEEsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KEVhKGxBLHRoaXMpKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntFYShsQSx0aGlzKS5mb3JFYWNo''@;'; put 'put ''KChhLGQpPT57RWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIEpmdChjKXtpZighQSQoYy50YXJnZXQpJiYhMCE9PUVhKHBILHRoaXMpJiZ0aGlzLmNoZWNrSWZDb2x1bW5IZWFkZXIoYy50YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFy''@;'; put 'put ''ZW50KGMudGFyZ2V0KTtpZighbClyZXR1cm47Y29uc3QgYT1sLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO2wmJihudWxsPT09YXx8IjEiPT09YSkmJihFYShGOSx0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24gUWZ0KGMpe2MudGFyZ2V0LnBhcmVudE5vZGU9''@;'; put 'put ''PT10aGlzLmhvdC5yb290RWxlbWVudCYmcG8oYy50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFYSh6Zyx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxkdShGOSx0aGlzLCEwKSxudWxsPT09RWEoc0EsdGhpcykmJihkdShz''@;'; put 'put ''QSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChFYShzQSx0aGlzKSkpLGR1KG9BLHRoaXMsRWEob0EsdGhpcykrMSksdGhpcy5zdGFydFg9Yy5wYWdlWCxkdShZcCx0aGlzLEVhKGR3LHRoaXMp''@;'; put 'put ''KSl9ZnVuY3Rpb24gZTN0KGMpe2lmKEVhKEY5LHRoaXMpKXtjb25zdCBsPShjLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTtkdShoSCx0aGlzLEVhKGR3LHRoaXMpK2wpLFluKEVhKEJoLHRoaXMpLGE9PntkdShZcCx0aGlzLHRoaXMuc2V0TWFudWFs''@;'; put 'put ''U2l6ZShhLEVhKGhILHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19ZnVuY3Rpb24gdDN0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9''@;'; put 'put ''KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxhLCExKX07RWEoRjks''@;'; put 'put ''dGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLGR1KEY5LHRoaXMsITEpLEVhKFlwLHRoaXMpIT09RWEoZHcsdGhpcykmJihFYShCaCx0aGlzKS5sZW5ndGg+MT8oWW4oRWEoQmgsdGhpcyksZD0+e2woZCl9KSxjKCkpOlluKEVhKEJoLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMu''@;'; put 'put ''c2V0dXBIYW5kbGVQb3NpdGlvbihFYSh6Zyx0aGlzKSkpfWZ1bmN0aW9uIG4zdCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoRWEocWQsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKEVhKFVnLHRoaXMp''@;'; put 'put ''KSxkdShGOSx0aGlzLCExKSxkdShwSCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntkdShwSCx0aGlzLCExKX0pfWZ1bmN0aW9uIHIzdChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksaD1F''@;'; put 'put ''YShqaCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIGkzdChjLGwpe2NvbnN0IGE9RWEoamgsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpO3JldHVy''@;'; put 'put ''biJudW1iZXIiPT10eXBlb2YgYT9hOmN9ZnVuY3Rpb24gYTN0KCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1mdW5jdGlvbiB6UShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbzN0KGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IHMzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgaHc9InB4IixmbWU9Y2xhc3MgbDN0e2NvbnN0cnVjdG9yKGwpe3pRKHRoaXMsImhvdCIsdm9pZCAwKSx6USh0aGlzLCJfZWxlbWVudCIsbnVsbCkselEodGhpcywi''@;'; put 'put ''c3RhdGUiLDApLHRoaXMuaG90PWx9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3Rh''@;'; put 'put ''dGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK2h3KSx2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0PWEraHcpfWdldFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50''@;'; put 'put ''LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQsMTApOjB9fXNldFNpemUobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1s''@;'; put 'put ''K2h3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStodyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0''@;'; put 'put ''P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtodyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD1hK2h3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRo''@;'; put 'put ''aXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSxkM3Q9Y2xh''@;'; put 'put ''c3MgdTN0IGV4dGVuZHMgZm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0Iil9fSxwM3Q9Y2xhc3MgZjN0IGV4dGVuZHMgZm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFu''@;'; put 'put ''dWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBmdyhjLGwsYSl7cG1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBwbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEg5KGMsbCxhKXtyZXR1cm4gYy5zZXQobTYoYyxsKSxhKSxhfWZ1bmN0aW9uIEZvKGMsbCl7cmV0dXJuIGMuZ2V0KG02KGMsbCkpfWZ1bmN0aW9uIG02KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93TW92ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh''@;'; put 'put ''ZnRlclJvd01vdmUiKTtjb25zdCBaUT0ibWFudWFsUm93TW92ZSIsZ21lPSJodF9fbWFudWFsUm93TW92ZSIsZ0g9InNob3ctdWkiLFdRPSJvbi1tb3ZpbmctLXJvd3MiLFlRPSJhZnRlci1zZWxlY3Rpb24tLXJvd3MiO3ZhciB0ZD1uZXcgV2Vha01hcCx2Nj1uZXcgV2Vha01hcCxaZz1uZXcg''@;'; put 'put ''V2Vha01hcCxiNj1uZXcgV2Vha01hcCxYZD1uZXcgV2Vha01hcCxtSD1uZXcgV2Vha01hcCxOOT1uZXcgV2Vha1NldDtjbGFzcyB2M3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZzN0KGMsbCl7cG1lKGMsbCksbC5hZGQoYyl9KHRoaXMs''@;'; put 'put ''TjkpLGZ3KHRoaXMsdGQsbmV3IGQzdCh0aGlzLmhvdCkpLGZ3KHRoaXMsdjYsbmV3IHAzdCh0aGlzLmhvdCkpLGZ3KHRoaXMsWmcsW10pLGZ3KHRoaXMsYjYsdm9pZCAwKSxmdyh0aGlzLFhkLHt9KSxmdyh0aGlzLG1ILHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFpR''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE0MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbWlFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG02KE45LGwsYjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTYoTjksbCxfM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT5tNihOOSx0aGlzLEMz''@;'; put 'put ''dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtNihOOSxsLFMzdCkuY2FsbChsLC4uLmQpfSksdGhp''@;'; put 'put ''cy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGdtZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5n''@;'; put 'put ''c09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtsbyh0aGlzLmhvdC5yb290RWxlbWVudCxnbWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLEZvKHRkLHRoaXMpLmRlc3Ryb3koKSxGbyh2Nix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''fW1vdmVSb3cobCxhKXtyZXR1cm4gdGhpcy5tb3ZlUm93cyhbbF0sYSl9bW92ZVJvd3MobCxhKXtjb25zdCBkPUZvKG1ILHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd01vdmUiLGwsYSxkLGgpO2lmKEg5KG1ILHRoaXMsdm9p''@;'; put 'put ''ZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qgdj1oJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsdiksdn1kcmFnUm93KGws''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMuZHJhZ1Jvd3MoW2xdLGEpfWRyYWdSb3dzKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBIOShtSCx0aGlzLGEpLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShEPT5EPDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8dnx8TSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1j''@;'; put 'put ''b3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPXF1KGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IHY9ZC5nZXRS''@;'; put 'put ''ZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQodil8fHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKVtaUV07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7''@;'; put 'put ''cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRT''@;'; put 'put ''dGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVybiBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiBHYShNYXRo''@;'; put 'put ''Lm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5yb3csaC5yb3cpLE09PnthLnB1c2goTSl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPUZvKFhkLHRoaXMpLmNvb3JkcyxhPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksZD10aGlzLmhvdC5nZXRMYXN0RnVsbHlW''@;'; put 'put ''aXNpYmxlUm93KCksaD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpLHRoaXMuaXNGaXhlZFJv''@;'; put 'put ''d0JvdHRvbShsLnJvdykmJmQ8aCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCsxLDEpLHZvaWQgMCwhMCk7Y29uc3QgZj10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLHY9Rm8oWGQsdGhpcykuVEQs''@;'; put 'put ''TT10aGlzLmhvdC5yb290RWxlbWVudCxEPVUwKE0pLFo9YV8oTSkscmU9Zi5ob2xkZXIuc2Nyb2xsVG9wLGJlPUQudG9wLSh0aGlzLmhvdC5yb290V2luZG93IT09Wj9aLnNjcm9sbFRvcDowKSxFZT1GbyhYZCx0aGlzKS5ldmVudFBhZ2VZLWJlK3JlLEJlPWYuaGlkZXIub2Zmc2V0SGVpZ2h0''@;'; put 'put ''LHFlPWYuVEJPRFkub2Zmc2V0VG9wLHJ0PUZvKHRkLHRoaXMpLmdldE9mZnNldCgpLnRvcCxwdD1Gbyh0ZCx0aGlzKS5nZXRTaXplKCkuaGVpZ2h0LGR0PXYub2Zmc2V0SGVpZ2h0LzIsSnQ9di5vZmZzZXRIZWlnaHQ7bGV0IHZuPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0SGVpZ2h0K3Ro''@;'; put 'put ''aXMuZ2V0Um93c0hlaWdodCgwLGwucm93LTEpO2NvbnN0IENuPUVlPj12bitkdDt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiYodm4rPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLGwucm93PDA/Rm8oWGQsdGhpcykucm93PWE+''@;'; put 'put ''MD9hLTE6YTpDbj8oRm8oWGQsdGhpcykucm93PWwucm93KzEsdm4rPTA9PT1sLnJvdz9KdC0xOkp0KTpGbyhYZCx0aGlzKS5yb3c9bC5yb3c7bGV0IHRuPUVlLE1uPXZuO0VlK3B0K3J0Pj1CZT90bj1CZS1wdC1ydDpFZStydDxxZSYmKHRuPXFlK01hdGguYWJzKHJ0KSksdm4+PUJlLTEmJihN''@;'; put 'put ''bj1CZS0xKSxGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbih0biksRm8odjYsdGhpcykuc2V0UG9zaXRpb24oTW4pfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGws''@;'; put 'put ''Im1vdXNlbW92ZSIsYT0+bTYoTjksdGhpcyx5M3QpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+bTYoTjksdGhpcyx3M3QpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVh''@;'; put 'put ''cigpfWJ1aWxkUGx1Z2luVUkoKXtGbyh0ZCx0aGlzKS5idWlsZCgpLEZvKHY2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe0ZvKHRkLHRoaXMpLmRlc3Ryb3koKSxGbyh2Nix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBiM3QoYyxsLGEsZCl7Y29uc3R7d3RUYWJs''@;'; put 'put ''ZTpoLHd0Vmlld3BvcnQ6Zn09dGhpcy5ob3Qudmlldy5fd3Qsdj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFNfHwhdnx8Rm8oYjYsdGhpcyl8fDAhPT1jLmJ1dHRvbilyZXR1cm4gSDkoYjYs''@;'; put 'put ''dGhpcywhMSksRm8oWmcsdGhpcykubGVuZ3RoPTAsdm9pZCBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbV1EsZ0hdKTtjb25zdCBEPUZvKHY2LHRoaXMpLmlzQnVpbHQoKSYmIUZvKHY2LHRoaXMpLmlzQXBwZW5kZWQoKSxaPUZvKHRkLHRoaXMpLmlzQnVpbHQoKSYmIUZvKHRkLHRoaXMpLmlz''@;'; put 'put ''QXBwZW5kZWQoKTtEJiZaJiYoRm8odjYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksRm8odGQsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206cmUsdG86Y2V9PU0sYmU9TWF0aC5taW4ocmUucm93LGNlLnJvdyksRWU9TWF0aC5tYXgocmUucm93LGNlLnJvdyk7aWYobC5jb2w8''@;'; put 'put ''MCYmbC5yb3c+PWJlJiZsLnJvdzw9RWUpe2Qucm93PSEwLEg5KGI2LHRoaXMsITApLEZvKFhkLHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSxGbyhYZCx0aGlzKS5jb29yZHM9bCxGbyhYZCx0aGlzKS5URD1hLEg5KFpnLHRoaXMsdGhpcy5wcmVwYXJlUm93c1RvTW92aW5nKCkpO2NvbnN0IEJl''@;'; put 'put ''PWguaG9sZGVyLnNjcm9sbExlZnQrZi5nZXRSb3dIZWFkZXJXaWR0aCgpLHFlPXRoaXMuZ2V0Um93c0hlaWdodChiZSxsLnJvdy0xKSsoYy5jbGllbnRZLWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKTtGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLEJlKSxGbyh0ZCx0aGlzKS5z''@;'; put 'put ''ZXRTaXplKGguaGlkZXIub2Zmc2V0V2lkdGgtQmUsdGhpcy5nZXRSb3dzSGVpZ2h0KGJlLEVlKSksRm8odGQsdGhpcykuc2V0T2Zmc2V0KC1xZSxudWxsKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxXUSksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9ZWxzZSBsbyh0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudCxZUSksSDkoYjYsdGhpcywhMSksRm8oWmcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24geTN0KGMpe0ZvKGI2LHRoaXMpJiYoRm8oWGQsdGhpcykuZXZlbnRQYWdlWT1jLnBhZ2VZLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiBfM3QoYyxsLGEsZCl7IXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCFGbyhiNix0aGlzKXx8KEZvKFpnLHRoaXMpLmluZGV4T2YobC5yb3cpPi0xP2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LGdIKTpUaSh0aGlzLmhvdC5yb290RWxlbWVudCxnSCksZC5yb3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEZvKFhkLHRoaXMp''@;'; put 'put ''LmNvb3Jkcz1sLEZvKFhkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIHczdCgpe2NvbnN0IGM9Rm8oWGQsdGhpcykucm93LGw9Rm8oWmcsdGhpcykubGVuZ3RoO2lmKEg5KGI2LHRoaXMsITEpLGxvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtXUSxnSCxZUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1Nl''@;'; put 'put ''bGVjdGVkQnlSb3dIZWFkZXIoKSYmVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsWVEpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT1GbyhaZyx0aGlzKVswXSxkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksaD10aGlzLmRyYWdSb3dzKEZvKFpnLHRoaXMpLGMpO2lmKEZvKFpnLHRo''@;'; put 'put ''aXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGQpO3RoaXMuaG90LnNlbGVjdFJvd3MoZixmK2wtMSl9fWZ1''@;'; put 'put ''bmN0aW9uIEMzdCgpe2NvbnN0IGM9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKStjLmhvbGRlci5zY3JvbGxMZWZ0O0ZvKHRkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsZCksRm8odGQsdGhpcykuc2V0''@;'; put 'put ''U2l6ZShjLmhpZGVyLm9mZnNldFdpZHRoLWQpfWZ1bmN0aW9uIFMzdCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBTMShjLGwsYSl7bW1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtjKGMsbCxhKXtyZXR1cm4gYy5zZXQoV2coYyxsKSxhKSxhfWZ1bmN0aW9uIE1hKGMsbCl7cmV0dXJuIGMuZ2V0KFdnKGMsbCkpfWZ1bmN0aW9uIFdnKGMsbCxhKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB2SD0ibWFudWFsUm93UmVzaXplIix2''@;'; put 'put ''bWU9Im1hbnVhbFJvd0hlaWdodHMiO3ZhciAkcD1uZXcgV2Vha01hcCxiSD1uZXcgV2Vha01hcCx6aD1uZXcgV2Vha01hcCxjQT1uZXcgV2Vha01hcCx5Nj1uZXcgV2Vha01hcCxHUT1uZXcgV2Vha01hcCxwdz1uZXcgV2Vha01hcCx5SD1uZXcgV2Vha01hcCxuZD1uZXcgV2Vha01hcCxLcD1u''@;'; put 'put ''ZXcgV2Vha01hcCxWOT1uZXcgV2Vha01hcCxfSD1uZXcgV2Vha01hcCx1QT1uZXcgV2Vha01hcCxkQT1uZXcgV2Vha01hcCxfMz1uZXcgV2Vha01hcCxoQT1uZXcgV2Vha01hcCxfNj1uZXcgV2Vha1NldDtjbGFzcyBFM3QgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1''@;'; put 'put ''cm4gdkh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gTTN0KGMsbCl7bW1lKGMsbCksbC5hZGQoYyl9KHRoaXMsXzYpLFMxKHRoaXMsJHAsbnVsbCksUzEodGhpcyxiSCxudWxsKSxTMSh0aGlzLHpoLFtdKSxT''@;'; put 'put ''MSh0aGlzLGNBLG51bGwpLFMxKHRoaXMseTYsbnVsbCksUzEodGhpcyxHUSxudWxsKSxTMSh0aGlzLHB3LG51bGwpLFMxKHRoaXMseUgsbnVsbCksUzEodGhpcyxuZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLFMxKHRoaXMsS3AsdGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxTMSh0aGlzLFY5LCExKSxTMSh0aGlzLF9ILCExKSxTMSh0aGlzLHVBLDApLFMxKHRoaXMsZEEsbnVsbCksUzEodGhpcyxfMyx2b2lkIDApLFMxKHRoaXMsaEEsdm9pZCAwKSxUaShNYShuZCx0aGlzKSwibWFudWFsUm93UmVzaXplciIpLFRp''@;'; put 'put ''KE1hKEtwLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbdkhdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxl''@;'; put 'put ''ZHx8KEtjKF8zLHRoaXMsbmV3IFptKSxNYShfMyx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5XZyhfNix0aGlzLEwzdCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLE1hKF8zLHRoaXMpKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''Im1vZGlmeVJvd0hlaWdodCIsKGwsYSk9PldnKF82LHRoaXMsUjN0KS5jYWxsKHRoaXMsbCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRl''@;'; put 'put ''UGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe0tjKGhBLHRoaXMsTWEoXzMsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdodHMoKXt0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsdm1lLE1hKF8zLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsUm93SGVpZ2h0cygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIix2bWUsbCksbC52YWx1ZX1zZXRN''@;'; put 'put ''YW51YWxTaXplKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TWF0aC5tYXgoYSx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSk7cmV0dXJuIE1hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGgpLGh9Z2V0TGFzdERlc2lyZWRSb3dIZWlnaHQo''@;'; put 'put ''KXtyZXR1cm4gTWEoY0EsdGhpcyl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtLYygkcCx0aGlzLGwpO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3JkcyhNYSgkcCx0aGlzKSksZj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IHY9c3UoTWEoJHAs''@;'; put 'put ''dGhpcykpLE09TWEoJHAsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj1mPj1hLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcygwLDEpLWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7bGV0IHJlO0Q/cmU9ZC53dE92''@;'; put 'put ''ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNYSgkcCx0aGlzKSxoLnJvdyxoLmNvbCk6WiYmKHJlPWQud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAs''@;'; put 'put ''dGhpcyksaC5yb3csaC5jb2wpKSxyZXx8KHJlPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5yb3csaC5jb2wpKSxLYyhiSCx0aGlzLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXgoZikpLEtjKHpoLHRoaXMsW10pO2NvbnN0IGNlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJmNlJiZZbih0aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksRWU9PntHYShFZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxFZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyxydD0+e01hKHpoLHRoaXMpLmluY2x1ZGVzKHJ0KXx8TWEoemgsdGhpcykucHVzaChydCl9KX0pLE1hKHpoLHRoaXMpLmluY2x1ZGVz''@;'; put 'put ''KE1hKGJILHRoaXMpKXx8S2MoemgsdGhpcyxbTWEoYkgsdGhpcyldKSxLYyh5SCx0aGlzLHJlLnRvcC02KSxLYyhwdyx0aGlzLHBhcnNlSW50KE0uaGVpZ2h0LDEwKSksTWEobmQsdGhpcykuc3R5bGUudG9wPWAke01hKHlILHRoaXMpK01hKHB3LHRoaXMpfXB4YCxNYShuZCx0aGlzKS5zdHls''@;'; put 'put ''ZVt0aGlzLmlubGluZURpcl09YCR7cmUuc3RhcnR9cHhgLE1hKG5kLHRoaXMpLnN0eWxlLndpZHRoPWAke3Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKE1hKG5kLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXtNYShuZCx0aGlzKS5zdHlsZS50b3A9YCR7TWEo''@;'; put 'put ''eUgsdGhpcykrTWEoY0EsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoc3UoTWEobmQsdGhpcykpLDEwKSxhPXBhcnNlSW50KE1hKG5kLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSwxMCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVXaWR0aCgp''@;'; put 'put ''O1RpKE1hKG5kLHRoaXMpLCJhY3RpdmUiKSxUaShNYShLcCx0aGlzKSwiYWN0aXZlIiksTWEoS3AsdGhpcykuc3R5bGUudG9wPU1hKG5kLHRoaXMpLnN0eWxlLnRvcCxNYShLcCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAsTWEoS3AsdGhpcykuc3R5bGUud2lkdGg9ZC1s''@;'; put 'put ''KyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoTWEoS3AsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7TWEoS3AsdGhpcykuc3R5bGUudG9wPU1hKG5kLHRoaXMpLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtsbyhNYShuZCx0aGlzKSwiYWN0aXZlIiks''@;'; put 'put ''bG8oTWEoS3AsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7Y29uc3QgYT1SbShsLFsiVEJPRFkiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse2lubGluZVN0YXJ0T3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVy''@;'; put 'put ''T3ZlcmxheTpmfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEJPRFksaC5jbG9uZS53dFRhYmxlLlRCT0RZLGYuY2xvbmUud3RUYWJsZS5UQk9EWV0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1s''@;'; put 'put ''LnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9pZCAwIT09YSYmTWEo''@;'; put 'put ''eTYsdGhpcyk8YT9hOk1hKHk2LHRoaXMpfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVz''@;'; put 'put ''aXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKTt2b2lkIDAhPT1mJiZLYyh5Nix0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLE1hKHk2LHRoaXMpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITAp''@;'; put 'put ''LGgmJmwoKX07TWEodUEsdGhpcyk+PTImJihNYSh6aCx0aGlzKS5sZW5ndGg+MT8oWW4oTWEoemgsdGhpcyksaD0+e2EoaCl9KSxsKCkpOlluKE1hKHpoLHRoaXMpLGg9PnthKGgsITApfSkpLEtjKHVBLHRoaXMsMCksS2MoZEEsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVs''@;'; put 'put ''ZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5XZyhfNix0aGlzLFQzdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+''@;'; put 'put ''V2coXzYsdGhpcyxBM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PldnKF82LHRoaXMsazN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9Pldn''@;'; put 'put ''KF82LHRoaXMsRDN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE1hKG5kLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PldnKF82LHRoaXMsSTN0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBUM3QoYyl7aWYo''@;'; put 'put ''IUEkKGMudGFyZ2V0KSYmITAhPT1NYShfSCx0aGlzKSYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGMudGFyZ2V0KSl7Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRhcmdldCk7bCYmKE1hKFY5LHRoaXMpfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBB''@;'; put 'put ''M3QoYyl7cG8oYy50YXJnZXQsIm1hbnVhbFJvd1Jlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihNYSgkcCx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxLYyhWOSx0aGlzLCEwKSxudWxsPT09TWEoZEEsdGhpcykmJihLYyhkQSx0aGlzLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChNYShkQSx0aGlzKSkpLEtjKHVBLHRoaXMsTWEodUEsdGhpcykrMSksS2MoR1EsdGhpcyxjLnBhZ2VZKSxLYyh5Nix0aGlzLE1hKHB3LHRoaXMpKSl9ZnVuY3Rpb24gazN0KGMpe01h''@;'; put 'put ''KFY5LHRoaXMpJiYoS2MoY0EsdGhpcyxNYShwdyx0aGlzKSsoYy5wYWdlWS1NYShHUSx0aGlzKSkpLFluKE1hKHpoLHRoaXMpLGw9PntLYyh5Nix0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShsLE1hKGNBLHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVz''@;'; put 'put ''aEd1aWRlUG9zaXRpb24oKSl9ZnVuY3Rpb24gRDN0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hl''@;'; put 'put ''aWdodChhKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoYSksYSwhMSl9O01hKFY5LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxLYyhWOSx0''@;'; put 'put ''aGlzLCExKSxNYSh5Nix0aGlzKSE9PU1hKHB3LHRoaXMpJiYoTWEoemgsdGhpcykubGVuZ3RoPjE/KFluKE1hKHpoLHRoaXMpLGQ9PntsKGQpfSksYygpKTpZbihNYSh6aCx0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oTWEoJHAsdGhpcykpKX1mdW5jdGlv''@;'; put 'put ''biBJM3QoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKE1hKG5kLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChNYShLcCx0aGlzKSksS2MoVjksdGhpcywhMSksS2MoX0gsdGhpcywhMCksdGhpcy5ob3Qu''@;'; put 'put ''X3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57S2MoX0gsdGhpcywhMSl9KX1mdW5jdGlvbiBSM3QoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TWEoXzMsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbdkhdJiZoJiYoYT1oKX1yZXR1cm4gYX1mdW5jdGlvbiBMM3QoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbdkhdLGw9dGhpcy5sb2FkTWFudWFsUm93SGVpZ2h0cygpO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dHlwZW9mIGw8InUiP2wuZm9yRWFjaCgo''@;'; put 'put ''YSxkKT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSk6QXJyYXkuaXNBcnJheShjKT8oYy5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KSxLYyhoQSx0aGlzLGMpKTohMD09PWMmJkFycmF5LmlzQXJyYXkoTWEoaEEsdGhpcykpJiZN''@;'; put 'put ''YShoQSx0aGlzKS5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIEI5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGM3QoYyl7dmFyIGw9ZnVuY3Rpb24gSDN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBibWUoYyxsKXtyZXR1cm4gYy5nZXQoeW1lKGMsbCkpfWZ1bmN0aW9uIHdIKGMsbCxhKXtyZXR1cm4gYy5zZXQoeW1lKGMsbCksYSksYX1mdW5jdGlvbiB5bWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMu''@;'; put 'put ''aGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXkoNjgxNDYpLHkoNzQ5OSk7dmFyIGo5PW5ldyBXZWFrTWFwO2NvbnN0IHFwPWNsYXNzIE4zdHtjb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEsZCxoLGYsdil7QjkodGhpcywicm93Iix2b2lkIDApLEI5KHRoaXMsImNvbCIsdm9pZCAwKSxCOSh0aGlzLCJyb3dzcGFuIix2b2lkIDApLEI5KHRoaXMsImNvbHNwYW4iLHZvaWQgMCksQjkodGhpcywicmVtb3ZlZCIsITEpLEI5KHRoaXMsImNlbGxDb29yZHNGYWN0b3J5''@;'; put 'put ''Iix2b2lkIDApLEI5KHRoaXMsImNlbGxSYW5nZUZhY3RvcnkiLHZvaWQgMCksZnVuY3Rpb24gTzN0KGMsbCxhKXsoZnVuY3Rpb24gUDN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxqOSxudWxsKSx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgsdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT12fXN0YXRpYyBORUdBVElW''@;'; put 'put ''RV9WQUxVRVNfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIHdpdGgge3JvdzogJHthfSwgY29sOiAke2R9LFx4MjAKICAgICAgcm93c3BhbjogJHtofSwgY29sc3BhbjogJHtmfX0gY29u''@;'; put 'put ''dGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhl''@;'; put 'put ''IG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBpcyBwb3NpdGlvbmVkXHgyMAogICAgICAob3IgcG9zaXRpb25lZCBwYXJ0aWFsbHkpIG91dHNpZGUgb2YgdGhlIHRhYmxlIHJhbmdlLiBJdCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlIGZpeCB5b3VyIHNl''@;'; put 'put ''dHVwLmB9c3RhdGljIElTX1NJTkdMRV9DRUxMKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGlj''@;'; put 'put ''aCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhh''@;'; put 'put ''cyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKGwpe2xldHtyb3c6YSxjb2w6ZCxy''@;'; put 'put ''b3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBhPDB8fGQ8MHx8aDwwfHxmPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtsZXR7cm93c3BhbjphLGNvbHNwYW46ZH09bDtyZXR1cm4gMT09PWQmJjE9PT1hfXN0YXRpYyBjb250YWluc1plcm9TcGFuKGwpe2xldHtyb3dzcGFuOmEsY29sc3Bh''@;'; put 'put ''bjpkfT1sO3JldHVybiAwPT09ZHx8MD09PWF9c3RhdGljIGlzT3V0T2ZCb3VuZHMobCxhLGQpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dzcGFuLTE+PWF8fGwuY29sPj1kfHxsLmNvbCtsLmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1s''@;'; put 'put ''LmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93PTA6dGhpcy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5jb2w+ZC0xJiYodGhpcy5jb2w9ZC0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5y''@;'; put 'put ''b3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5kLTEmJih0aGlzLmNvbHNwYW49ZC10aGlzLmNvbCksd0goajksdGhpcyxudWxsKX1pbmNsdWRlcyhsLGEpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5jb2w8PWEmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sJiZ0''@;'; put 'put ''aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRlc0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1s''@;'; put 'put ''fXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLHY9bFswXT8iY29sIjoicm93IixNPU1hdGgubWluKGEsaCksRD1NYXRoLm1heChhLGgpLFo9dGhpc1t2XSxyZT10aGlzW3ZdK3RoaXNbZl0t''@;'; put 'put ''MTtpZihaPj1hJiYodGhpc1t2XSs9ZCksZD4wKWE8PXJlJiZhPlomJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoTTw9WiYmRD49cmUpcmV0dXJuIHRoaXMucmVtb3ZlZD0hMCx3SChqOSx0aGlzLG51bGwpLCExO2lmKFo+PU0mJlo8PUQpe2NvbnN0IGNlPUQtWisxLGJlPU1hdGguYWJz''@;'; put 'put ''KGQpLWNlO3RoaXNbdl0tPWJlK2QsdGhpc1tmXS09Y2V9ZWxzZSBaPD1NJiZyZT49RD90aGlzW2ZdKz1kOlo8PU0mJnJlPj1NJiZyZTxEJiYodGhpc1tmXS09cmUtTSsxKX1yZXR1cm4gd0goajksdGhpcyxudWxsKSwhMH1pc0ZhcnRoZXIobCxhKXtyZXR1cm4hbHx8KCJkb3duIj09PWE/bC5y''@;'; put 'put ''b3crbC5yb3dzcGFuLTE8dGhpcy5yb3crdGhpcy5yb3dzcGFuLTE6InVwIj09PWE/bC5yb3c+dGhpcy5yb3c6InJpZ2h0Ij09PWE/bC5jb2wrbC5jb2xzcGFuLTE8dGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE6ImxlZnQiPT09YT9sLmNvbD50aGlzLmNvbDpudWxsKX1nZXRMYXN0Um93KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucm93K3RoaXMucm93c3Bhbi0xfWdldExhc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTF9Z2V0UmFuZ2UoKXtyZXR1cm4gYm1lKGo5LHRoaXMpfHx3SChqOSx0aGlzLHRoaXMuY2VsbFJhbmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRo''@;'; put 'put ''aXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRoaXMuZ2V0TGFzdENvbHVtbigpKSkpLGJtZShqOSx0aGlzKX19O2Z1bmN0aW9uIENIKGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBqM3QoYyl7dmFyIGw9ZnVuY3Rpb24gejN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB6OShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHc2PW5ldyBXZWFrU2V0O2NsYXNzIFNIe2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBWM3QoYyxsKXsoZnVuY3Rpb24gQjN0''@;'; put 'put ''KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLHc2KSxDSCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksQ0godGhpcywi''@;'; put 'put ''bWVyZ2VkQ2VsbHMiLFtdKSxDSCh0aGlzLCJtZXJnZWRDZWxsc01hdHJpeCIsbmV3IE1hcCksQ0godGhpcywiaG90Iix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9c3RhdGljIElTX09WRVJMQVBQSU5HX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBn''@;'; put 'put ''bGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlXHgy''@;'; put 'put ''MAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEpe3ZhciBkO3JldHVybiEoIXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguaGFzKGwpfHxudWxsPT09KGQ9dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuZ2V0KGEpKXx8dm9pZCAwPT09ZCkmJmR9Z2V0QnlSYW5nZShsKXtjb25zdHty''@;'; put 'put ''b3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2xldCBNPSExO2ZvcihsZXQgRD0wO0Q8djtEKyspe2NvbnN0IFo9dGhpcy5tZXJnZWRDZWxsc1tEXSx7cm93OnJlLGNv''@;'; put 'put ''bDpjZSxyb3dzcGFuOmJlLGNvbHNwYW46RWV9PVo7aWYocmU+PWEmJnJlK2JlLTE8PWgmJmNlPj1kJiZjZStFZS0xPD1mKXtNPVo7YnJlYWt9fXJldHVybiBNfWZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKXtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMubWVyZ2VkQ2VsbHMuZm9y''@;'; put 'put ''RWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aDtmb3IobGV0IFo9ZjtaPGYrRDtaKyspZm9yKGxldCByZT12O3JlPHYrTTtyZSsrKWEuYWRkKGByJHtafSxjJHtyZX1gKX0pLGwuZmlsdGVyKGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93''@;'; put 'put ''c3BhbjpEfT1oLFo9bmV3IFNldDtsZXQgcmU9ITE7Zm9yKGxldCBjZT1mO2NlPGYrRDtjZSsrKXtmb3IobGV0IGJlPXY7YmU8ditNO2JlKyspe2NvbnN0IEVlPWByJHtjZX0sYyR7YmV9YDtpZihhLmhhcyhFZSkpe2lsKFNILklTX09WRVJMQVBQSU5HX1dBUk5JTkcoaCkpLHJlPSEwO2JyZWFr''@;'; put 'put ''fVouYWRkKEVlKX1pZihyZSlicmVha31yZXR1cm4gcmV8fGEuYWRkKC4uLlopLCFyZX0pfWdldFdpdGhpblJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRD''@;'; put 'put ''b3JuZXIoKSx7cm93OmYsY29sOnZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1bXTtmb3IobGV0IEQ9ZDtEPD1mO0QrKylmb3IobGV0IFo9aDtaPD12O1orKyl7Y29uc3QgcmU9dGhpcy5nZXQoRCxaKTtyZSYmKGF8fCFhJiZyZS5yb3c9PT1EJiZyZS5jb2w9PT1aKSYmTS5wdXNoKHJlKX1y''@;'; put 'put ''ZXR1cm4gTX1hZGQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPWwucm93LGg9bC5jb2wsTT1uZXcgcXAoZCxoLGwucm93c3BhbixsLmNvbHNwYW4sdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMsdGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxSYW5nZSksRD10aGlzLmdldChkLGgpLFo9IWEmJnRoaXMuaXNPdmVybGFwcGluZyhNKTtyZXR1cm4gRHx8Wj8oWiYmaWwoU0guSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhNKSksITEpOih0aGlzLmhvdCYmTS5ub3JtYWxpemUodGhpcy5ob3QpLHRoaXMubWVyZ2VkQ2Vs''@;'; put 'put ''bHMucHVzaChNKSx6OSh3Nix0aGlzLF9tZSkuY2FsbCh0aGlzLE0pLE0pfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKSxoPWQ/dGhpcy5tZXJnZWRDZWxscy5pbmRleE9mKGQpOi0xO3JldHVybiEoIWR8fC0xPT09aCkmJih0aGlzLm1lcmdlZENlbGxzLnNwbGljZShoLDEpLHo5''@;'; put 'put ''KHc2LHRoaXMsVTN0KS5jYWxsKHRoaXMsZCksZCl9Y2xlYXIoKXtZbih0aGlzLm1lcmdlZENlbGxzLGw9PntsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtHYShhLGEraCx2PT57R2EoZCxkK2YsTT0+e2NvbnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbCh2LE0pO0QmJihELnJl''@;'; put 'put ''bW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLEQucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksRC5zdHlsZS5kaXNwbGF5PSIiKX0pfSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXg9bmV3IE1hcH1pc092ZXJsYXBwaW5nKGwpe2NvbnN0IGE9bC5n''@;'; put 'put ''ZXRSYW5nZSgpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7ZCsrKWlmKHRoaXMubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKS5vdmVybGFwcyhhKSlyZXR1cm4hMDtyZXR1cm4hMX1pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKXtjb25zdCBkPXRoaXMuZ2V0''@;'; put 'put ''KGwsYSk7aWYoIWQpcmV0dXJuITE7Y29uc3R7cm93OmgsY29sOmYscm93c3Bhbjp2LGNvbHNwYW46TX09ZCxEPXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxaPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhEKT8wOnRoaXMuaG90LmdldEZp''@;'; put 'put ''cnN0UmVuZGVyZWRWaXNpYmxlUm93KCkscmU9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRCk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGNlPWtzKFosaCxo''@;'; put 'put ''K3YtMSksYmU9a3MocmUsZixmK00tMSk7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKT09PWwmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChiZSwxKT09PWF9Z2V0Rmlyc3RSZW5k''@;'; put 'put ''ZXJhYmxlQ29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO2lmKCFkfHx0aGlzLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpO2NvbnN0IGg9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVz''@;'; put 'put ''dE5vdEhpZGRlbkluZGV4KGQucm93LDEpLGY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpO3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD16''@;'; put 'put ''OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwiY29sIiwtMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0RW5kTW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMs''@;'; put 'put ''bCwiY29sIiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRUb3BNb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNhbGwodGhpcyxsLCJyb3ciLC0xKTtsZXQgaD1hO2ZvcihsZXQg''@;'; put 'put ''Zj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNhbGwodGhpcyxsLCJyb3ciLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtm''@;'; put 'put ''XT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofXNoaWZ0Q29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9WzAsMF07c3dpdGNoKGwpe2Nhc2UicmlnaHQiOmhbMF0rPWQ7YnJlYWs7Y2FzZSJsZWZ0IjpoWzBdLT1kO2JyZWFrO2Nhc2UiZG93biI6aFsxXSs9ZDticmVhaztjYXNlInVwIjpoWzFd''@;'; put 'put ''LT1kfWNvbnN0IGY9W107dGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKHY9Pnt2LnNoaWZ0KGgsYSksdi5yZW1vdmVkJiZmLnB1c2godil9KSxmLmZvckVhY2godj0+e3RoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZih2KSwxKX0pLHRoaXMubWVyZ2VkQ2Vs''@;'; put 'put ''bHNNYXRyaXguY2xlYXIoKSx0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3o5KHc2LHRoaXMsX21lKS5jYWxsKHRoaXMsdil9KX19ZnVuY3Rpb24gTUgoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBk''@;'; put 'put ''PW5ldyBNYXAsaD0xPT09YT9jLmdldFRvcFN0YXJ0Q29ybmVyKCk6Yy5nZXRCb3R0b21FbmRDb3JuZXIoKSxmPTE9PT1hP2MuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6Yy5nZXRUb3BTdGFydENvcm5lcigpO2ZvcihsZXQgdj1oLnJvdzsxPT09YT92PD1mLnJvdzp2Pj1mLnJvdzt2Kz1hKWZvcihs''@;'; put 'put ''ZXQgTT1oLmNvbDsxPT09YT9NPD1mLmNvbDpNPj1mLmNvbDtNKz1hKXtjb25zdCBEPSJyb3ciPT09bD92Ok0sWj10aGlzLmdldCh2LE0pO2xldCByZT1EO1omJihyZT0xPT09YT9aW2xdK1pbYCR7bH1zcGFuYF0tMTpaW2xdKSxkLmhhcyhEKXx8ZC5zZXQoRCxuZXcgU2V0KSxkLmdldChEKS5h''@;'; put 'put ''ZGQocmUpfXJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoQXJyYXkuZnJvbShkLmVudHJpZXMoKSkuZmlsdGVyKHY9PntsZXRbLE1dPXY7cmV0dXJuIDE9PT1NLnNpemV9KS5mbGF0TWFwKHY9PntsZXRbLE1dPXY7cmV0dXJuIEFycmF5LmZyb20oTSl9KSkpfWZ1bmN0aW9uIF9tZShjKXtmb3Io''@;'; put 'put ''bGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsrKWZvcihsZXQgYT1jLmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8fHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguc2V0KGwsbmV3IE1hcCksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5n''@;'; put 'put ''ZXQobCkuc2V0KGEsYyl9ZnVuY3Rpb24gVTN0KGMpe2ZvcihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5kZWxldGUoYSl9Y29uc3QgWjN0PVNIO2Z1bmN0''@;'; put 'put ''aW9uICRRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXM3QoYyl7dmFyIGw9ZnVuY3Rpb24gWTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCAkM3Q9Y2xhc3MgRzN0e2NvbnN0cnVjdG9yKGwpeyRRKHRoaXMsInBs''@;'; put 'put ''dWdpbiIsdm9pZCAwKSwkUSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLHZvaWQgMCksJFEodGhpcywiY3VycmVudEZpbGxEYXRhIixudWxsKSx0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbn1nZXRE''@;'; put 'put ''aXJlY3Rpb24obCxhKXtsZXQgZD1udWxsO3JldHVybiBkPWFbMF09PT1sWzBdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/ImRvd24iOmFbMl09PT1sWzJdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/InVwIjphWzFdPT09bFsxXSYmYVsyXT09PWxbMl0/InJpZ2h0IjoibGVmdCIsZH1z''@;'; put 'put ''bmFwRHJhZ0FyZWEobCxhLGQsaCl7Y29uc3QgZj1hLnNsaWNlKDApLHY9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLFtNLEQsWixyZV09bCxiZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/Wi1NKzE6cmUtRCsxLEJlPXYtTWF0aC5mbG9vcih2L2JlKSpiZSxxZT10aGlzLmdldEZh''@;'; put 'put ''cnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihxZSlpZigiZG93biI9PT1kKXtjb25zdCBydD1xZS5yb3crcWUucm93c3Bhbi1NLUJlO2ZbMl0rcnQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1CZTpmWzJdKz1CZT9ydDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0''@;'; put 'put ''IHJ0PXFlLmNvbCtxZS5jb2xzcGFuLUQtQmU7ZlszXStydD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPUJlOmZbM10rPUJlP3J0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgcnQ9Wi1CZS1xZS5yb3crMTtmWzBdK3J0PDA/ZlswXSs9QmU6ZlswXS09QmU/cnQ6MH1lbHNl''@;'; put 'put ''IGlmKCJsZWZ0Ij09PWQpe2NvbnN0IHJ0PXJlLUJlLXFlLmNvbCsxO2ZbMV0rcnQ8MD9mWzFdKz1CZTpmWzFdLT1CZT9ydDowfXJldHVybiB0aGlzLnVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUoe2Jhc2VBcmVhOmwsZHJhZ0RpcmVjdGlvbjpkLGZvdW5kTWVyZ2VkQ2VsbHM6aCxmaWxsU2l6ZTp2''@;'; put 'put ''LGRyYWdBcmVhOmYsY3ljbGVMZW5ndGg6YmV9KSxmfXVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUobCl7dGhpcy5jdXJyZW50RmlsbERhdGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17fSksRXUodGhpcy5jdXJyZW50RmlsbERhdGEsbCl9Z2V0QXV0b2ZpbGxTaXplKGwsYSxkKXtjb25zdFtoLGYs''@;'; put 'put ''dixNXT1sLFtELFoscmUsY2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLUQ7Y2FzZSJkb3duIjpyZXR1cm4gcmUtdjtjYXNlImxlZnQiOnJldHVybiBmLVo7Y2FzZSJyaWdodCI6cmV0dXJuIGNlLU07ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0''@;'; put 'put ''W2gsZix2LE1dPWwsW0QsWixyZSxjZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuW0QsWixoLTEsTV07Y2FzZSJkb3duIjp7Y29uc3QgYmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHJlLE0pO3JldHVyblt2KzEsZixyZSsoYmU/YmUucm93c3Bhbi0xOjApLE1dfWNhc2Ui''@;'; put 'put ''bGVmdCI6cmV0dXJuW0QsWix2LGYtMV07Y2FzZSJyaWdodCI6e2NvbnN0IGJlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChyZSxNKTtyZXR1cm5baCxNKyhiZT9iZS5jb2xzcGFuLTE6MCkscmUsY2VdfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihs''@;'; put 'put ''LGEsZCxoKXtjb25zdFtmLHYsTSxEXT1sLFo9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xLHJlPVo/TTpELGNlPVo/Zjp2LGJlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxFZT1aP00tZisxOkQtdisxLHFlPWJlLU1hdGguZmxvb3IoYmUvRWUpKkVlO2xldCBydD1udWxsLHB0PW51''@;'; put 'put ''bGwsZHQ9bnVsbDtzd2l0Y2goZCl7Y2FzZSJ1cCI6cnQ9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9cmUtcWUrMTticmVhaztjYXNlImxlZnQiOnJ0PSJpbmNsdWRlc0hvcml6b250YWxseSIsZHQ9cmUtcWUrMTticmVhaztjYXNlImRvd24iOnJ0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PWNl''@;'; put 'put ''K3FlLTE7YnJlYWs7Y2FzZSJyaWdodCI6cnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixkdD1jZStxZS0xfXJldHVybiBZbihoLEp0PT57SnRbcnRdKGR0KSYmSnQuaXNGYXJ0aGVyKHB0LGQpJiYocHQ9SnQpfSkscHR9cmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGwpe2lmKCF0aGlzLmN1''@;'; put 'put ''cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXMobCksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixmPShaLHJlKT0+e3N3aXRjaChoKXtjYXNlInVwIjpy''@;'; put 'put ''ZXR1cm4gWi5yb3ctcmU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gWi5yb3crWi5yb3dzcGFuLTErcmU8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIFouY29sLXJlPj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQiOnJldHVybiBaLmNvbCtaLmNvbHNwYW4tMStyZTw9YS50by5j''@;'; put 'put ''b2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCB2PTAsTT1udWxsLEQ9MTtkb3tmb3IobGV0IFo9MDtaPGQubGVuZ3RoO1orPTEpe2lmKE09ZFtaXSx2PUQqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihNLHYpKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5t''@;'; put 'put ''ZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3ctdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyt2LHJvd3NwYW46''@;'; put 'put ''TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbC12LGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJl''@;'; put 'put ''YWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCt2LGNvbHNwYW46TS5jb2xzcGFufSwhMCl9Wj09PWQubGVuZ3RoLTEmJihEKz0xKX19d2hpbGUoZihNLHYpKTt0aGlzLmN1cnJl''@;'; put 'put ''bnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luLmhvdC5yZW5kZXIoKSxkLmxlbmd0aD4wJiZ0aGlzLnBsdWdpbi5pZkNocm9tZUZvcmNlUmVwYWludCgpfWdldFJhbmdlRnJvbUNoYW5nZXMobCl7Y29uc3QgYT17bWluOm51bGwsbWF4Om51bGx9LGQ9e21pbjpudWxsLG1heDpudWxsfTtyZXR1''@;'; put 'put ''cm4gWW4obCxoPT57Y29uc3QgZj1oWzBdLHY9dGhpcy5wbHVnaW4uaG90LnByb3BUb0NvbChoWzFdKTsobnVsbD09PWEubWlufHxmPGEubWluKSYmKGEubWluPWYpLChudWxsPT09YS5tYXh8fGY+YS5tYXgpJiYoYS5tYXg9ZiksKG51bGw9PT1kLm1pbnx8djxkLm1pbikmJihkLm1pbj12KSwo''@;'; put 'put ''bnVsbD09PWQubWF4fHx2PmQubWF4KSYmKGQubWF4PXYpfSkse2Zyb206e3JvdzphLm1pbixjb2x1bW46ZC5taW59LHRvOntyb3c6YS5tYXgsY29sdW1uOmQubWF4fX19ZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RHJhZ0FyZWEobCxhLGQpLFtm''@;'; put 'put ''LHYsTSxEXT1oLFo9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdikscmU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCksY2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoWixaLHJlKTtpZigwPT09dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0V2l0aGluUmFuZ2UoY2UsITApLmxlbmd0aClyZXR1cm4hMTtjb25zdCBFZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShjZSwhMSk7cmV0dXJuIDA9PT1FZS5sZW5ndGh8fCgidXAiPT09ZHx8ImRvd24iPT09ZD8hRWUuZXZlcnkoQmU9PntsZXR7''@;'; put 'put ''Y29sc3BhbjpxZX09QmU7cmV0dXJuIHFlPT09Y2UuZ2V0V2lkdGgoKX0pOiFFZS5ldmVyeShCZT0+e2xldHtyb3dzcGFuOnFlfT1CZTtyZXR1cm4gcWU9PT1jZS5nZXRIZWlnaHQoKX0pKX19O2Z1bmN0aW9uIEtRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLM3QoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gcTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBKM3Q9Y2xhc3MgWDN0e2NvbnN0cnVjdG9yKGwpe0tRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxLUSh0aGlzLCJob3QiLHZvaWQgMCksS1EodGhpcywiZnVsbHlT''@;'; put 'put ''ZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbCIpLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGwsYSxkLGgpe2NvbnN0IGY9TWF0aC5taW4oZFswXSxkWzJdKSx2PU1hdGgubWluKGRb''@;'; put 'put ''MV0sZFszXSksTT1NYXRoLm1heChkWzBdLGRbMl0pLEQ9TWF0aC5tYXgoZFsxXSxkWzNdKTtpZih2b2lkIDA9PT1ofHwhdGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybjtjb25zdCByZT10aGlzLnBsdWdpbi5t''@;'; put 'put ''ZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYoIXJlKXJldHVybjtjb25zdCBjZT1yZS5nZXRMYXN0Um93KCksYmU9cmUuZ2V0TGFzdENvbHVtbigpO3JldHVybiBmPD1yZS5yb3cmJnY8PXJlLmNvbCYmTT49Y2UmJkQ+PWJlP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxD''@;'; put 'put ''bGFzc05hbWV9LSR7aH1gOnRoaXMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKHJlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVj''@;'; put 'put ''dGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVzaCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQu''@;'; put 'put ''bGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCB2PTA7djxhLmxlbmd0aDt2Kz0xKWZbdl09YVt2XS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJuITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtd''@;'; put 'put ''O2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX07ZnVuY3Rpb24gZkEoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIGVwdChjKXt2YXIgbD1mdW5jdGlvbiB0cHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHdtZXtjb25zdHJ1Y3RvcihsKXtmQSh0aGlzLCJkYXRhIix2b2lkIDApLGZBKHRoaXMs''@;'; put 'put ''Im5leHQiLG51bGwpLGZBKHRoaXMsInByZXYiLG51bGwpLHRoaXMuZGF0YT1sfX1jb25zdCB4SD1jbGFzcyBucHR7Y29uc3RydWN0b3IoKXtmQSh0aGlzLCJmaXJzdCIsbnVsbCksZkEodGhpcywibGFzdCIsbnVsbCl9cHVzaChsKXtjb25zdCBhPW5ldyB3bWUobCk7aWYobnVsbD09PXRoaXMu''@;'; put 'put ''Zmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmxhc3Q7dGhpcy5sYXN0PWEsYS5wcmV2PWQsZC5uZXh0PWF9cmV0dXJuIGF9dW5zaGlmdChsKXtjb25zdCBhPW5ldyB3bWUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFz''@;'; put 'put ''dD1hO2Vsc2V7Y29uc3QgZD10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9YSxhLm5leHQ9ZCxkLnByZXY9YX19aW5vcmRlcihsKXtsZXQgYT10aGlzLmZpcnN0O2Zvcig7YTspe2NvbnN0IGQ9bChhKTtpZihhPT09dGhpcy5sYXN0fHwhMD09PWQpYnJlYWs7YT1hLm5leHR9fXJlbW92ZShsKXtpZihu''@;'; put 'put ''dWxsPT09dGhpcy5maXJzdClyZXR1cm4hMTtsZXQgZCxoLGE9dGhpcy5maXJzdDtmb3IoO2E7KXtpZihhLmRhdGE9PT1sKXJldHVybiBkPWEubmV4dCxoPWEucHJldixkJiYoZC5wcmV2PWgpLGgmJihoLm5leHQ9ZCksYT09PXRoaXMuZmlyc3QmJih0aGlzLmZpcnN0PWQpLGE9PT10aGlzLmxh''@;'; put 'put ''c3QmJih0aGlzLmxhc3Q9aCksITA7YT1hLm5leHR9cmV0dXJuITF9aGFzQ3ljbGUoKXtsZXQgbD10aGlzLmZpcnN0LGE9dGhpcy5maXJzdDtmb3IoOzspe2lmKG51bGw9PT1sfHwobD1sLm5leHQsbnVsbD09PWwpKXJldHVybiExO2lmKGw9bC5uZXh0LGE9YS5uZXh0LGw9PT1hKXJldHVybiEw''@;'; put 'put ''fX1wb3AoKXtpZihudWxsPT09dGhpcy5sYXN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5sYXN0O3JldHVybiB0aGlzLmxhc3Q9dGhpcy5sYXN0LnByZXYsbH1zaGlmdCgpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5m''@;'; put 'put ''aXJzdD10aGlzLmZpcnN0Lm5leHQsbH1yZWN1cnNpdmVSZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3QpcmV0dXJuOyhmdW5jdGlvbiBsKGQsaCl7aCYmKGwoaCxoLm5leHQpLGgubmV4dD1kKX0pKHRoaXMuZmlyc3QsdGhpcy5maXJzdC5uZXh0KSx0aGlzLmZpcnN0Lm5leHQ9bnVsbDtjb25zdCBh''@;'; put 'put ''PXRoaXMuZmlyc3Q7dGhpcy5maXJzdD10aGlzLmxhc3QsdGhpcy5sYXN0PWF9cmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0fHwhdGhpcy5maXJzdC5uZXh0KXJldHVybjtsZXQgZCxsPXRoaXMuZmlyc3QubmV4dCxhPXRoaXMuZmlyc3Q7Zm9yKDtsOylkPWwubmV4dCxsLm5leHQ9YSxhLnByZXY9''@;'; put 'put ''bCxhPWwsbD1kO3RoaXMuZmlyc3QubmV4dD1udWxsLHRoaXMubGFzdC5wcmV2PW51bGwsZD10aGlzLmZpcnN0LHRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9ZH19O2Z1bmN0aW9uIFU5KGMsbCxhKXtDbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIENtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdmwoYyxsKXtyZXR1cm4gYy5nZXQoRUgoYyxsKSl9ZnVuY3Rpb24gVWgoYyxsLGEpe3JldHVybiBjLnNldChFSChjLGwpLGEpLGF9''@;'; put 'put ''ZnVuY3Rpb24gRUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBYcD1u''@;'; put 'put ''ZXcgV2Vha01hcCxKcD1uZXcgV2Vha01hcCxRcD1uZXcgV2Vha01hcCxlND1uZXcgV2Vha01hcCxxUT1uZXcgV2Vha01hcCxUSD1uZXcgV2Vha01hcCxBSD1uZXcgV2Vha01hcCxYUT1uZXcgV2Vha1NldDtjbGFzcyBpcHR7Y29uc3RydWN0b3IobCl7bGV0e21lcmdlZENlbGxzR2V0dGVyOmEs''@;'; put 'put ''cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1sOyhmdW5jdGlvbiBycHQoYyxsKXtDbWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsWFEpLFU5KHRoaXMsWHAsbmV3IHhIKSxVOSh0aGlzLEpwLG5ldyB4SCksVTkodGhpcyxRcCxudWxsKSxVOSh0aGlzLGU0LG51bGwpLFU5KHRo''@;'; put 'put ''aXMscVEsbnVsbCksVTkodGhpcyxUSCxudWxsKSxVOSh0aGlzLEFILG51bGwpLFVoKHFRLHRoaXMsYSksVWgoVEgsdGhpcyxkKSxVaChBSCx0aGlzLGgpfWdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9kZSgpe3JldHVy''@;'; put 'put ''biB2bChKcCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykucHJldi5kYXRhfWdldEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChR''@;'; put 'put ''cCx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoWHAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoUXAsdGhpcykubmV4dC5kYXRhfWdldFByZXZIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0aGlzKS5w''@;'; put 'put ''cmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe1VoKGU0LHRoaXMsdmwoZTQsdGhpcykucHJldiksVWgoUXAsdGhpcyx2bChRcCx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFzQWN0aXZlKCl7VWgoZTQsdGhpcyx2bChlNCx0aGlzKS5uZXh0KSxVaChRcCx0aGlzLHZsKFFwLHRoaXMpLm5l''@;'; put 'put ''eHQpfWJ1aWxkRm9jdXNPcmRlcihsKXtjb25zdCBhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksaD1uZXcgV2Vha1NldDtVaChYcCx0aGlzLG5ldyB4SCk7Zm9yKGxldCB2PWEucm93O3Y8PWQucm93O3YrKylpZighdmwoVEgsdGhpcykuaXNIaWRkZW4o''@;'; put 'put ''dikpZm9yKGxldCBNPWEuY29sO008PWQuY29sO00rKyl7aWYodmwoQUgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgRD1FSChYUSx0aGlzLFNtZSkuY2FsbCh0aGlzLGwsdmwoWHAsdGhpcyksaCx2LE0pO0QmJlVoKFFwLHRoaXMsRCl9dmwoWHAsdGhpcykuZmlyc3QmJih2bChY''@;'; put 'put ''cCx0aGlzKS5maXJzdC5wcmV2PXZsKFhwLHRoaXMpLmxhc3QsdmwoWHAsdGhpcykubGFzdC5uZXh0PXZsKFhwLHRoaXMpLmZpcnN0KTtjb25zdCBmPW5ldyBXZWFrU2V0O1VoKEpwLHRoaXMsbmV3IHhIKTtmb3IobGV0IHY9YS5jb2w7djw9ZC5jb2w7disrKWlmKCF2bChBSCx0aGlzKS5pc0hp''@;'; put 'put ''ZGRlbih2KSlmb3IobGV0IE09YS5yb3c7TTw9ZC5yb3c7TSsrKXtpZih2bChUSCx0aGlzKS5pc0hpZGRlbihNKSljb250aW51ZTtjb25zdCBEPUVIKFhRLHRoaXMsU21lKS5jYWxsKHRoaXMsbCx2bChKcCx0aGlzKSxmLE0sdik7RCYmVWgoZTQsdGhpcyxEKX12bChKcCx0aGlzKS5maXJzdCYm''@;'; put 'put ''KHZsKEpwLHRoaXMpLmZpcnN0LnByZXY9dmwoSnAsdGhpcykubGFzdCx2bChKcCx0aGlzKS5sYXN0Lm5leHQ9dmwoSnAsdGhpcykuZmlyc3QpfXNldEFjdGl2ZU5vZGUobCxhKXtyZXR1cm4gdmwoWHAsdGhpcykuaW5vcmRlcihkPT57Y29uc3R7cm93U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFy''@;'; put 'put ''dDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYobD49aCYmbDw9ZiYmYT49diYmYTw9TSlyZXR1cm4gVWgoUXAsdGhpcyxkKSwhMX0pLHZsKEpwLHRoaXMpLmlub3JkZXIoZD0+e2NvbnN0e3Jvd1N0YXJ0Omgscm93RW5kOmYsY29sU3RhcnQ6dixjb2xFbmQ6TX09ZC5kYXRhO2lmKGw+PWgmJmw8PWYm''@;'; put 'put ''JmE+PXYmJmE8PU0pcmV0dXJuIFVoKGU0LHRoaXMsZCksITF9KSx0aGlzfX1mdW5jdGlvbiBTbWUoYyxsLGEsZCxoKXtjb25zdCBmPWMuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWMuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1jLmhpZ2hsaWdodC5jbG9uZSgpLm5vcm1hbGl6ZSgpLEQ9dmwocVEs''@;'; put 'put ''dGhpcykuY2FsbCh0aGlzLGQsaCk7aWYoRCYmYS5oYXMoRCkpcmV0dXJuIG51bGw7Y29uc3QgWj17Y29sU3RhcnQ6aCxjb2xFbmQ6aCxyb3dTdGFydDpkLHJvd0VuZDpkfTtpZihEKXtpZihhLmFkZChEKSxELnJvdzxmLnJvd3x8RC5yb3crRC5yb3dzcGFuLTE+di5yb3d8fEQuY29sPGYuY29s''@;'; put 'put ''fHxELmNvbCtELmNvbHNwYW4tMT52LmNvbClyZXR1cm4gbnVsbDtaLmNvbFN0YXJ0PUQuY29sLFouY29sRW5kPUQuY29sK0QuY29sc3Bhbi0xLFoucm93U3RhcnQ9RC5yb3csWi5yb3dFbmQ9RC5yb3crRC5yb3dzcGFuLTF9Y29uc3QgcmU9bC5wdXNoKFopO3JldHVybiBkPT09TS5yb3cmJmg9''@;'; put 'put ''PT1NLmNvbHx8RCYmTS5yb3c+PUQucm93JiZNLnJvdzw9RC5yb3crRC5yb3dzcGFuLTEmJk0uY29sPj1ELmNvbCYmTS5jb2w8PUQuY29sK0QuY29sc3Bhbi0xP3JlOm51bGx9ZnVuY3Rpb24gTW1lKGMsbCxhKXtjb25zdHt2aWV3OmQscm93SW5kZXhNYXBwZXI6aH09YyxmPWQuZ2V0U3R5bGVz''@;'; put 'put ''SGFuZGxlcigpLHY9ZC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IE09MDtmb3IobGV0IFo9bDtaPGwrYTtaKyspaWYoIWguaXNIaWRkZW4oWikpe3ZhciBEO00rPW51bGwhPT0oRD1jLmdldFJvd0hlaWdodChaKSkmJnZvaWQgMCE9PUQ/RDp2LDA9PT1aJiYhZi5pc0NsYXNzaWNUaGVtZSgp''@;'; put 'put ''JiYoTSs9MSl9cmV0dXJuIE19ZnVuY3Rpb24ga0goYyxsLGEpe3htZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX1mdW5jdGlvbiBKUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3B0KGMpe3ZhciBsPWZ1bmN0aW9uIGxwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gcEEoYyxsLGEpe3JldHVybiBjLnNldChr''@;'; put 'put ''bChjLGwpLGEpLGF9ZnVuY3Rpb24gdGMoYyxsKXtyZXR1cm4gYy5nZXQoa2woYyxsKSl9ZnVuY3Rpb24ga2woYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZh''@;'; put 'put ''dGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTWVyZ2VDZWxscyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJi''@;'; put 'put ''ZWZvcmVVbm1lcmdlQ2VsbHMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBRUT0ibWVyZ2VDZWxscyIsRW1lPVFRO3ZhciBRMj1uZXcgV2Vha01hcCxlZj1uZXcgV2Vha01hcCx0ND1uZXcgV2Vha01hcCxUbWU9bmV3IFdlYWtNYXAsVmw9''@;'; put 'put ''bmV3IFdlYWtTZXQ7Y2xhc3MgdXB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG9wdChjLGwpe3htZShjLGwpLGwuYWRkKGMpfSh0aGlzLFZsKSxKUSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLG51bGwpLEpRKHRoaXMsImF1dG9m''@;'; put 'put ''aWxsQ2FsY3VsYXRpb25zIixudWxsKSxKUSh0aGlzLCJzZWxlY3Rpb25DYWxjdWxhdGlvbnMiLG51bGwpLGtIKHRoaXMsUTIsbnVsbCksa0godGhpcyxlZix7cm93OjAsY29sOjB9KSxrSCh0aGlzLHQ0LG5ldyBpcHQoe21lcmdlZENlbGxzR2V0dGVyOihsLGEpPT50aGlzLm1lcmdlZENlbGxz''@;'; put 'put ''Q29sbGVjdGlvbi5nZXQobCxhKSxyb3dJbmRleE1hcHBlcjp0aGlzLmhvdC5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcn0pKSxrSCh0aGlzLFRtZSxmdW5jdGlvbiBhcHQoYyl7Y29uc3R7aG90Omx9PWMse3Jvd0luZGV4TWFwcGVy''@;'; put 'put ''OmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09bCxoPW5ldyBNYXA7cmV0dXJue2JlZm9yZTpmdW5jdGlvbiBmKCl7fSxhZnRlcjpmdW5jdGlvbiB2KE0sRCxaKXtjb25zdCByZT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoRCxaKTtpZighcW8ocmUpKXJldHVybiBNLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZSgicm93c3BhbiIpLE0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksQUUoKSYmaC5oYXMoRCkmJiFsLmdldFNldHRpbmdzKCkucm93SGVhZGVycyYmKE0uc3R5bGUuaGVpZ2h0PWAke2guZ2V0KEQpfXB4YCxoLmRlbGV0ZShEKSksdm9pZChNLnN0eWxlLmRpc3BsYXk9IiIpO2NvbnN0e3Jv''@;'; put 'put ''dzpjZSxjb2w6YmUsY29sc3BhbjpFZSxyb3dzcGFuOkJlfT1yZSxbcWUscnRdPWMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShjZSxCZSxiZSxFZSkscHQ9Yy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpO2lmKEFFKCkmJjA9PT1iZSYmIWwuZ2V0U2V0dGluZ3MoKS5yb3dIZWFk''@;'; put 'put ''ZXJzKXtjb25zdCBtcj1NbWUobCxjZSxCZSk7aC5zZXQoRCxtci9CZSl9Y29uc3Qgdm49cWUtYS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpKzEsQ249cnQtZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopKzE7bGV0IHRuPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KGNlLDEpLE1uPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGJlLDEpO2lmKHB0KXtjb25zdCBtcj1sLnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKTtbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobXIpfHwodG49TWF0aC5tYXgodG4sbC5nZXRGaXJzdFJl''@;'; put 'put ''bmRlcmVkVmlzaWJsZVJvdygpKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobXIpfHwoTW49TWF0aC5tYXgoTW4sbC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSl9Y29uc3Qg''@;'; put 'put ''Q3I9TWF0aC5taW4oQmUsdm4pLEdyPU1hdGgubWluKEVlLENuKTt0bj09PUQmJk1uPT09Wj8oTS5zZXRBdHRyaWJ1dGUoInJvd3NwYW4iLENyKSxNLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsR3IpKTooTS5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0ZSgiY29s''@;'; put 'put ''c3BhbiIpLE0uc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19KHRoaXMpKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUVF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTUwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntbQzRlXToiY2VsbHMi''@;'; put 'put ''LHZpcnR1YWxpemVkOiExLGNlbGxzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUVFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3IFozdCh0aGlzKSx0aGlzLmF1dG9m''@;'; put 'put ''aWxsQ2FsY3VsYXRpb25zPW5ldyAkM3QodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IEozdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hd''@;'; put 'put ''PWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxkcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNb''@;'; put 'put ''aF07cmV0dXJuIGtsKFZsLGwsZnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBr''@;'; put 'put ''bChWbCxsLHBwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsZ3B0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxtcHQpLmNhbGwo''@;'; put 'put ''bCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxrbWUpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsa21lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGJwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''clNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHlwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlv''@;'; put 'put ''bkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxfcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGhwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiB0YyhUbWUsbCkuYWZ0ZXIoLi4uYXJn''@;'; put 'put ''dW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHZwdCkuY2FsbChs''@;'; put 'put ''LC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHdwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLENwdCkuY2FsbChsLC4uLmQpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFNwdCkuY2FsbChsLC4uLmQp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLE1wdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCx4cHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVD''@;'; put 'put ''b2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsRXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFRwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXko''@;'; put 'put ''YSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsa3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsr''@;'; put 'put ''KWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLERwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVu''@;'; put 'put ''dHNbaF07cmV0dXJuIGtsKFZsLGwsSXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hd''@;'; put 'put ''O3JldHVybiBrbChWbCxsLFJwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZs''@;'; put 'put ''LGwsTHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGws''@;'; put 'put ''T3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigiTWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5j''@;'; put 'put ''bGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5n''@;'; put 'put ''cygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIUwkKCkpcmV0dXJuO2NvbnN0IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChkPT57Y29uc3R7cm93Omgscm93c3BhbjpmfT1kO2Zvcihs''@;'; put 'put ''ZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuZ2V0T3Zlcmxh''@;'; put 'put ''eXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dyb3VuZD1fRSh2LCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLGwucHVzaCh2KSl9''@;'; put 'put ''KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e3ZhciBoO2Quc3R5bGUuYmFja2dyb3VuZD1udWxsPT09KGg9X0UoZCwiYmFja2dyb3VuZENvbG9yIikpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9dmFsaWRh''@;'; put 'put ''dGVTZXR0aW5nKGwpe3JldHVybiEoIWx8fChxcC5jb250YWluc05lZ2F0aXZlVmFsdWVzKGwpPyhpbChxcC5ORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKSksMSk6cXAuaXNPdXRPZkJvdW5kcyhsLHRoaXMuaG90LmNvdW50Um93cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8oaWwocXAuSVNf''@;'; put 'put ''T1VUX09GX0JPVU5EU19XQVJOSU5HKGwpKSwxKTpxcC5pc1NpbmdsZUNlbGwobCk/KGlsKHFwLklTX1NJTkdMRV9DRUxMKGwpKSwxKTpxcC5jb250YWluc1plcm9TcGFuKGwpJiYoaWwocXAuWkVST19TUEFOX1dBUk5JTkcobCkpLDEpKSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MoKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuZ2V0U2V0dGluZygiY2VsbHMiKS5maWx0ZXIoaD0+dGhpcy52YWxpZGF0ZVNldHRpbmcoaCkpLGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpLGQ9W107YS5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixyb3dzcGFu''@;'; put 'put ''Ok0sY29sc3BhbjpEfT1oLFo9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxyZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmK00tMSx2K0QtMSksY2U9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShaLFoscmUpO3RoaXMubWVyZ2VSYW5nZShjZSwhMCwhMCk7Zm9yKGxldCBi''@;'; put 'put ''ZT1mO2JlPGYrTTtiZSsrKWZvcihsZXQgRWU9djtFZTx2K0Q7RWUrKykoYmUhPT1mfHxFZSE9PXYpJiZkLnB1c2goW2JlLEVlLG51bGxdKX0pLDAhPT1kLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChkLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKX1jbGVhckNvbGxlY3Rp''@;'; put 'put ''b25zKCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2xlYXIoKX1jYW5NZXJnZVJhbmdlKGwpe3JldHVybiEhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfHx0aGlzLnZhbGlkYXRlU2V0dGluZyhsKX1tZXJnZVNlbGVjdGlvbigp''@;'; put 'put ''e2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJv''@;'; put 'put ''bTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5tZXJnZVJhbmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfXVubWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VSYW5n''@;'; put 'put ''ZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxmPWwuZ2V0Qm90''@;'; put 'put ''dG9tRW5kQ29ybmVyKCksdj17cm93Omgucm93LGNvbDpoLmNvbCxyb3dzcGFuOmYucm93LWgucm93KzEsY29sc3BhbjpmLmNvbC1oLmNvbCsxfSxNPVtdO2xldCBEPW51bGw7cmV0dXJuISF0aGlzLmNhbk1lcmdlUmFuZ2UodixhKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVNZXJnZUNl''@;'; put 'put ''bGxzIixsLGEpLEdhKDAsdi5yb3dzcGFuLTEscmU9PntHYSgwLHYuY29sc3Bhbi0xLGNlPT57bGV0IGJlPW51bGw7TVtyZV18fChNW3JlXT1bXSksMD09PXJlJiYwPT09Y2U/YmU9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYucm93KSx0aGlz''@;'; put 'put ''LmhvdC50b1BoeXNpY2FsQ29sdW1uKHYuY29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3crcmUsdi5jb2wrY2UsImhpZGRlbiIsITApLE1bcmVdW2NlXT1iZX0pfSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3csdi5jb2wsInNwYW5uZWQiLCEwKSwhdGhpcy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24uYWRkKHYsYSl8fChkP0Q9W3Yucm93LHYuY29sLE1dOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHYucm93LHYuY29sLE0sdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpLGF8fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJNZXJnZUNlbGxzIixsLHYsYSksRCkpfXVubWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7MCE9PWQubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxZbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5jb2wpLEdhKDAsaC5yb3dzcGFuLTEsZj0+e0dhKDAsaC5jb2xzcGFuLTEsdj0+e3RoaXMuaG90LnJlbW92ZUNl''@;'; put 'put ''bGxNZXRhKGgucm93K2YsaC5jb2wrdiwiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bhbm5lZCIpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5t''@;'; put 'put ''ZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdHtmcm9tOmEsdG86ZH09bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93LGEuY29sKTtoLnJvdz09PWEucm93JiZoLmNvbD09PWEuY29s''@;'; put 'put ''JiZoLnJvdytoLnJvd3NwYW4tMT09PWQucm93JiZoLmNvbCtoLmNvbHNwYW4tMT09PWQuY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0''@;'; put 'put ''aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIm0iXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7ZCYmIWQuaXNTaW5nbGVIZWFkZXIoKSYmKHRoaXMudG9nZ2xlTWVyZ2UoZCksdGhpcy5ob3QucmVuZGVyKCkpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0S2V5LGdyb3VwOkVtZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMo''@;'; put 'put ''KXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChFbWUpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJs''@;'; put 'put ''ZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHFvKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJv''@;'; put 'put ''dywxKSk7aWYoTTxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYocW8odikpe2NvbnN0IEQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYucm93''@;'; put 'put ''K3Yucm93c3Bhbi0xLC0xKSk7aWYoRD5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9RCx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHFvKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleCh2LmNvbCwxKSk7aWYoTTxsLnN0YXJ0Q29sdW1uKXJldHVybiBsLnN0YXJ0Q29sdW1uPU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYocW8odikpe2NvbnN0IEQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sK3YuY29sc3Bhbi0xLC0xKSk7aWYoRD5sLmVuZENvbHVtbilyZXR1cm4gbC5lbmRDb2x1bW49RCx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX19fXRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUo''@;'; put 'put ''bCxhLGQsaCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdDtsZXQgTSxEO3JldHVybiBNPTA9PT1hP2YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsMSk6Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCthLTEsLTEpLEQ9MD09PWg/di5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTp2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkK2gtMSwtMSksW2w+PTA/Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0pOmwsZD49MD92LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRCk6ZF19fWZ1bmN0aW9uIGRwdCgp''@;'; put 'put ''e3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBocHQoYyl7aWYoYyl7Y29uc3QgbD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldFRvcFN0YXJ0''@;'; put 'put ''Q29ybmVyKCksaD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7Zis9MSlpZihkLnJvdz09PWxbZl0ucm93JiZkLmNvbD09PWxbZl0uY29sJiZoLnJvdz09PWxbZl0ucm93K2xbZl0ucm93c3Bhbi0xJiZoLmNvbD09PWxbZl0uY29sK2xbZl0uY29sc3Bhbi0x''@;'; put 'put ''KXJldHVybiExfXJldHVybiBjfWZ1bmN0aW9uIGZwdChjKXt0YyhlZix0aGlzKS5yb3c9Yy5yb3csdGMoZWYsdGhpcykuY29sPWMuY29sfWZ1bmN0aW9uIHBwdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDphfT1sLHtjb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O3RjKFEyLHRoaXMpJiYobnVsbCE9PWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0YyhRMix0aGlzKS5yb3cpJiYoYS5yb3c9dGMoUTIsdGhpcykucm93KSxudWxsIT09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4''@;'; put 'put ''KHRjKFEyLHRoaXMpLmNvbCkmJihhLmNvbD10YyhRMix0aGlzKS5jb2wpLHBBKFEyLHRoaXMsbnVsbCkpO2NvbnN0IGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93LGEuY29sKTtpZighZilyZXR1cm47Y29uc3Qgdj1mLmNvbCxNPWYuY29sK2YuY29sc3Bhbi0xO2lmKGMu''@;'; put 'put ''Y29sPDApe2NvbnN0IGNlPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT92LTE6TSwtMSk7Yy5jb2w9bnVsbD09PWNlPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsYS5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3''@;'; put 'put ''LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGNlLGEuY29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgY2U9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5jb2w+PXYmJmEuY29sPD1NP00rMTp2LDEpO2MuY29sPW51bGw9PT1jZT90aGlzLmhvdC52aWV3LmNvdW50UmVu''@;'; put 'put ''ZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLGNlKS0xLDEpfWNvbnN0IEQ9Zi5yb3csWj1mLnJvdytmLnJvd3NwYW4tMTtpZihjLnJvdzwwKXtj''@;'; put 'put ''b25zdCBjZT1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49RCYmYS5yb3c8PVo/RC0xOlosLTEpO2Mucm93PW51bGw9PT1jZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGEucm93KTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRl''@;'; put 'put ''cmFibGVSb3dzSW5SYW5nZShjZSxhLnJvdyktMSwxKX1lbHNlIGlmKGMucm93PjApe2NvbnN0IGNlPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1EJiZhLnJvdzw9Wj9aKzE6RCwxKTtjLnJvdz1udWxsPT09Y2U/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5S''@;'; put 'put ''YW5nZShhLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShhLnJvdyxjZSktMSwxKX19ZnVuY3Rpb24gZ3B0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwuY2xvbmUo''@;'; put 'put ''KSx7dG86ZH09bCx7Y29sdW1uSW5kZXhNYXBwZXI6aCxyb3dJbmRleE1hcHBlcjpmfT10aGlzLmhvdCx2PShNLEQpPT57YS5leHBhbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTSxEKSk7Zm9yKGxldCBaPTA7Wjx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5s''@;'; put 'put ''ZW5ndGg7Wis9MSlhLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbWl0uZ2V0UmFuZ2UoKSl9O2lmKGMuY29sPDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29s''@;'; put 'put ''O3YoZC5yb3csTSksIkUtVyI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIkUtVyI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCk7Y29uc3QgRD1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYo''@;'; put 'put ''Yy5jb2w9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoRCxkLmNvbCktMSwxKSl9ZWxzZSBpZihjLmNvbD4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5jb2w7dihk''@;'; put 'put ''LnJvdyxNKSwiVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiVy1FIj09PWEuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCk7Y29uc3QgRD1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09RCYmKGMu''@;'; put 'put ''Y29sPU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoZC5jb2wsRCktMSwxKSl9aWYoYy5yb3c8MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0VG9wTW9zdFJvd0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNvbCksIlMt''@;'; put 'put ''TiI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJTLU4iPT09YS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBEPWYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSk7bnVsbCE9PUQmJihjLnJvdz0tTWF0aC5tYXgodGhp''@;'; put 'put ''cy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShELGQucm93KS0xLDEpKX1lbHNlIGlmKGMucm93PjApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJvdHRvbU1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJOLVMiPT09bC5nZXRW''@;'; put 'put ''ZXJ0aWNhbERpcmVjdGlvbigpJiYiTi1TIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09RCYmKGMucm93PU1hdGgubWF4KHRoaXMuaG90LnZp''@;'; put 'put ''ZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoZC5yb3csRCktMSwxKSl9fWZ1bmN0aW9uIG1wdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0Omx9PWM7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigp''@;'; put 'put ''fHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpcmV0dXJuIHZvaWQgcEEoUTIsdGhpcyxsLmNsb25lKCkpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMu''@;'; put 'put ''bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdl''@;'; put 'put ''ZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwuY29sKTtwQShRMix0aGlzLGwuY2xvbmUoKSksYSYmbC5hc3NpZ24oYSl9ZnVuY3Rpb24gQW1lKGMsbCxhLGQpe2lmKGM8MHx8bDwwKXJldHVybjtjb25zdCBoPXRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2lmKCFoKXJldHVybjtjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oLFo9ZixyZT12LGNlPWYrRC0xLGJlPXYrTS0xO2lmKCJyZW5kZXIiPT09ZCYmdGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXtj''@;'; put 'put ''b25zdCBFZT10aGlzLmhvdC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksQmU9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkscWU9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5l''@;'; put 'put ''X3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRWUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtyZXR1cm5ba3MoQmUsWixjZSksa3MocWUscmUsYmUpLGtzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2li''@;'; put 'put ''bGVSb3coKSxaLGNlKSxrcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkscmUsYmUpXX1yZXR1cm5bWixyZSxjZSxiZV19ZnVuY3Rpb24gdnB0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gUTN0KGMpe3JldHVybntrZXk6Im1lcmdl''@;'; put 'put ''Q2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNv''@;'; put 'put ''bHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShkcSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh1cSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRo''@;'; put 'put ''aXMuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO2MudG9nZ2xlTWVyZ2UobCksdGhpcy5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWx8fHFw''@;'; put 'put ''LmlzU2luZ2xlQ2VsbCh7cm93OmxbMF0sY29sOmxbMV0scm93c3BhbjpsWzJdLWxbMF0rMSxjb2xzcGFuOmxbM10tbFsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24ga21lKCl7cEEoUTIsdGhpcyxudWxsKX1m''@;'; put 'put ''dW5jdGlvbiBicHQoKXtpZih0YyhRMix0aGlzKS5pc0NlbGwoKSlyZXR1cm47Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGw9Yy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLGE9Yy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksZD10YyhRMix0aGlzKS5jbG9uZSgpLm5v''@;'; put 'put ''cm1hbGl6ZSgpO3RjKHQ0LHRoaXMpLnNldEFjdGl2ZU5vZGUoZC5yb3csZC5jb2wpLHRjKGVmLHRoaXMpLnJvdz4wfHx0YyhlZix0aGlzKS5jb2w+MD90Yyh0NCx0aGlzKS5zZXRQcmV2Tm9kZUFzQWN0aXZlKCk6KCJFLVciPT09YSYmdGMoZWYsdGhpcykuY29sPDB8fCJTLU4iPT09bCYmdGMo''@;'; put 'put ''ZWYsdGhpcykucm93PDApJiZ0Yyh0NCx0aGlzKS5zZXROZXh0Tm9kZUFzQWN0aXZlKCl9ZnVuY3Rpb24geXB0KGMsbCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtjb2x1bW5JbmRleE1hcHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O2xldCBmPW51''@;'; put 'put ''bGwsdj1udWxsO2lmKHRjKGVmLHRoaXMpLmNvbDwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6RH09dGModDQsdGhpcykuZ2V0UHJldkhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELC0xKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpfWVs''@;'; put 'put ''c2UgaWYodGMoZWYsdGhpcykuY29sPjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6RH09dGModDQsdGhpcykuZ2V0TmV4dEhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELDEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1lbHNlIGlm''@;'; put 'put ''KHRjKGVmLHRoaXMpLnJvdzwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6RH09dGModDQsdGhpcykuZ2V0UHJldlZlcnRpY2FsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwtMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKX1lbHNlIGlmKHRjKGVmLHRo''@;'; put 'put ''aXMpLnJvdz4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkR9PXRjKHQ0LHRoaXMpLmdldE5leHRWZXJ0aWNhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpfWlmKG51bGwhPT1mfHxudWxsIT09dil7''@;'; put 'put ''Y29uc3QgTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLEQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KE0ucm93LE0uY29sKSxaPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtjPU0ucm93LGw9TS5jb2wsYS5oaWdobGlnaHQuYXNzaWduKEQ/''@;'; put 'put ''e3Jvdzp0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRC5yb3csMSksY29sOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELmNvbCwxKX06TSksWi5jbGVhcigpLFouYWRkKE0pLmNvbW1pdCgpfXRjKHQ0''@;'; put 'put ''LHRoaXMpLnNldEFjdGl2ZU5vZGUoYyxsKSxwQShlZix0aGlzLHtyb3c6MCxjb2w6MH0pfWZ1bmN0aW9uIF9wdCgpe3RoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaXNIZWFkZXIoKXx8dGModDQsdGhpcykuYnVpbGRGb2N1c09yZGVyKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCkpfWZ1bmN0aW9uIHdwdChjLGwsYSl7Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtkJiYoZC5yb3chPT1jfHxkLmNvbCE9PWw/YS5jb3B5YWJsZT0hMTooYS5yb3dzcGFuPWQucm93c3BhbixhLmNvbHNwYW49ZC5jb2xzcGFuKSl9ZnVuY3Rpb24gQ3B0''@;'; put 'put ''KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGMsbCl9ZnVuY3Rpb24gU3B0KGMpe2lmKHRoaXMuZ2V0''@;'; put 'put ''U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGMsbCl9ZnVuY3Rpb24gTXB0KGMsbCl7Y29uc3QgYT10aGlzLmF1dG9m''@;'; put 'put ''aWxsQ2FsY3VsYXRpb25zLmdldERpcmVjdGlvbihsLGMpO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYyxhKSlyZXR1cm4gbDtjb25zdCBkPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMF0sbFsxXSksaD10aGlzLmhvdC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhsWzJdLGxbM10pLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShkLGQsaCksdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShmKTtyZXR1cm4gMD09PXYubGVuZ3RoP2M6dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJh''@;'; put 'put ''Z0FyZWEobCxjLGEsdil9ZnVuY3Rpb24geHB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGMsbCl9ZnVuY3Rpb24gRXB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIsYyxsKX1m''@;'; put 'put ''dW5jdGlvbiBUcHQoYyxsLGEpeyJhdXRvIiE9PWEmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImRvd24iLGMsbCl9ZnVuY3Rpb24gQXB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygidXAiLGMsbCl9ZnVuY3Rp''@;'; put 'put ''b24ga3B0KGMsbCl7IkF1dG9maWxsLmZpbGwiPT09bCYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oYyl9ZnVuY3Rpb24gRHB0KGMsbCl7aWYobCYmImFyZWEiPT09bCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''O1luKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGEpLGg9PnthLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz09PWguZ2V0TGFzdFJvdygpJiZhLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD09PWguZ2V0TGFzdENvbHVtbigpJiYoY1syXT1oLnJvdyxjWzNdPWgu''@;'; put 'put ''Y29sKX0pfX1mdW5jdGlvbiBJcHQoYyxsLGEsZCl7aWYoYSlyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGMsbCxhLGQpfWZ1bmN0aW9uIFJwdCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxl''@;'; put 'put ''Y3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpfWZ1bmN0aW9uIExwdChjLGwsYSxkKXtpZighKGQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0''@;'; put 'put ''QnlSYW5nZShoKTtpZighZilyZXR1cm47Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxmLmNvbCksTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdytmLnJvd3NwYW4tMSxmLmNvbCtmLmNvbHNwYW4tMSk7cmV0dXJuIDA9PT10aGlzLmhvdC5zZWxlY3Rp''@;'; put 'put ''b24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzRXF1YWwodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkpfWZ1bmN0aW9uIE9wdChjLGwsYSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzfHwiYm90dG9tIj09PWF8fCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI9''@;'; put 'put ''PT1hKXJldHVybiBjO2xldCBkLGg7aWYoIm1hc3RlciI9PT1hKWQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxoPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtlbHNle2NvbnN0IGJlPXRoaXMuaG90LnZpZXcuZ2V0T3ZlcmxheUJ5TmFt''@;'; put 'put ''ZShhKTtkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYmUuY2xvbmUud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChi''@;'; put 'put ''ZS5jbG9uZS53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKX1pZighdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsZCkpcmV0dXJuIGM7Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGQpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxoKSxE''@;'; put 'put ''PXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLFo9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoRCwhMCkscmU9Wi5yZWR1Y2UoKGJlLEVlKT0+e2xldHtyb3dzcGFuOkJlfT1FZTtyZXR1cm4gTWF0aC5tYXgoYmUsQmUpfSwxKTtsZXQgY2U9MDtyZXR1''@;'; put 'put ''cm4gWi5sZW5ndGg+MSYmWlswXS5yb3dzcGFuPHJlJiYoY2U9cmUtWlswXS5yb3dzcGFuKSxaLmZvckVhY2goYmU9PntsZXR7cm93c3BhbjpFZX09YmUsQmU9MDtCZT0idG9wIj09PWF8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hP01hdGgubWluKHJlLHRoaXMuaG90LnZpZXcuY291''@;'; put 'put ''bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKS1sKTpFZS1jZSxjPU1hdGgubWF4KGM/PzAsTW1lKHRoaXMuaG90LGwsQmUpKX0pLGN9Y29uc3QgREg9Im11bHRpQ29sdW1uU29ydGluZyIsSW1lPURIO0c0ZShESCxmdW5jdGlvbiBQcHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFss''@;'; put 'put ''Li4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIHYoTSl7Y29uc3QgRD1jW01dLFo9bFtNXSxyZT1oW01dLGNlPWZbTV0sYmU9Wi5tdWx0aUNvbHVtblNvcnRpbmcsQmU9KGJlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/YmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTokNGUoWi50eXBl''@;'; put 'put ''KSkoRCxaLGJlKShyZSxjZSk7aWYoQmU9PT1qcCl7Y29uc3QgcWU9TSsxO2lmKHR5cGVvZiBsW3FlXTwidSIpcmV0dXJuIHYocWUpfXJldHVybiBCZX0oMCl9fSk7Y2xhc3MgenB0IGV4dGVuZHMgYWdle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBOcHQoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIFZwdChjKXt2YXIgbD1mdW5jdGlvbiBCcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJwbHVnaW5LZXkiLERIKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gREh9''@;'; put 'put ''c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7c3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQ''@;'; put 'put ''bHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdo''@;'; put 'put ''bGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4tMT09PWwucm93JiZsLmNvbD49MCYmdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcobC5jb2wsb0YpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5p''@;'; put 'put ''c0NlbGxWaXNpYmxlKGQpJiZkLmlzSGVhZGVyKCl9LHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpJbWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENv''@;'; put 'put ''bnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEltZSl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gc3VwZXIuZ2V0U29y''@;'; put 'put ''dENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KGwp''@;'; put 'put ''P2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMobCwuLi5kKSxsbyhsLGZ1bmN0aW9uIEhwdChj''@;'; put 'put ''KXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSksITEhPT10aGlzLmVuYWJsZWQmJlRpKGwsZnVuY3Rpb24gRnB0KGMsbCxhKXtjb25zdCBkPVtdO3JldHVybiEx''@;'; put 'put ''PT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNvcnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSsxfWApLGR9KC4uLmQpKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT15SihhLnJvdyxh''@;'; put 'put ''LmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNvcnQodGhp''@;'; put 'put ''cy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCxvRikpKTp0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1mdW5jdGlvbiBSbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFVwdChjKXt2YXIgbD1mdW5jdGlvbiBacHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEdwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxSbWUodGhpcywiZHJhZ2dlZCIsW10pLFJtZSh0aGlzLCJsYXN0U2V0Q2VsbCIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIm11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTYwfWlzRW5hYmxlZCgpe3JldHVybiBBcCgpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFi''@;'; put 'put ''bGVQbHVnaW4oKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMse3Jvb3RFbGVtZW50OmF9PXRoaXMuaG90O2Z1bmN0aW9uIGQoaCl7aWYoMT09PWwuZHJhZ2dlZC5sZW5ndGgpcmV0dXJuIGwuZHJhZ2dlZC5zcGxpY2UoMCxsLmRyYWdnZWQubGVuZ3RoKSwhMDtjb25zdCBmPWwu''@;'; put 'put ''ZHJhZ2dlZC5pbmRleE9mKGgpO2lmKC0xPT09ZilyZXR1cm4hMTswPT09Zj9sLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKDAsMSk6MT09PWYmJihsLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKC0xKSl9dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaHN0YXJ0Iixo''@;'; put 'put ''PT57bGV0IGY7cmV0dXJuIHBvKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVp''@;'; put 'put ''Z2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6cG8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgiYm90dG9tIiksbC50b3Vj''@;'; put 'put ''aFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDB9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5kIixoPT5w''@;'; put 'put ''byhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnBvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwiYm90''@;'; put 'put ''dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNobW92ZSIsaD0+e2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmhvdDtsZXQgdixNLEQsWixyZSxjZTtp''@;'; put 'put ''ZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgYmU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hlc1swXS5jbGllbnRZKTshYmV8fGJlPT09bC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09YmUubm9kZU5hbWV8fCJUSCI9PT1iZS5ub2RlTmFt''@;'; put 'put ''ZSkmJih2PWwuaG90LmdldENvb3JkcyhiZSksLTE9PT12LmNvbCYmKHYuY29sPTApLE09bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxEPU0uZ2V0V2lkdGgoKSxaPU0uZ2V0SGVpZ2h0KCkscmU9TS5nZXREaXJlY3Rpb24oKSwxPT09RCYmMT09PVomJmwuaG90LnNlbGVjdGlvbi5zZXRS''@;'; put 'put ''YW5nZUVuZCh2KSxjZT1sLmdldEN1cnJlbnRSYW5nZUNvb3JkcyhNLHYsbC50b3VjaFN0YXJ0UmFuZ2UuZGlyZWN0aW9uLHJlLGwuZHJhZ2dlZFswXSksbnVsbCE9PWNlLnN0YXJ0JiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChjZS5zdGFydCksbC5ob3Quc2VsZWN0aW9uLnNldFJh''@;'; put 'put ''bmdlRW5kKGNlLmVuZCksbC5sYXN0U2V0Q2VsbD1iZSksaC5wcmV2ZW50RGVmYXVsdCgpKX0pfWdldEN1cnJlbnRSYW5nZUNvb3JkcyhsLGEsZCxoLGYpe2NvbnN0IHY9bC5nZXRUb3BTdGFydENvcm5lcigpLE09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxEPWwuZ2V0Qm90dG9tU3RhcnRDb3Ju''@;'; put 'put ''ZXIoKSxaPWwuZ2V0VG9wRW5kQ29ybmVyKCk7bGV0IHJlPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2goZCl7Y2FzZSJORS1TVyI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOmNhc2UiTlctU0UiOnJlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3cs''@;'; put 'put ''bC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRC5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfTti''@;'; put 'put ''cmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWYmJihyZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTS5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9KX1icmVhaztjYXNlIk5XLVNFIjpzd2l0Y2goaCl7Y2FzZSJORS1T''@;'; put 'put ''VyI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpEfTpyZS5lbmQ9YTticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOk19OnJlLmVuZD1hO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6dn06cmUuZW5kPWE7YnJlYWs7Y2FzZSJT''@;'; put 'put ''Vy1ORSI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpafTpyZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6cmU9ImJvdHRvbSI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKEQucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5jb2wpfTticmVhaztjYXNlIlNXLU5FIjpyZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''di5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/cmU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFouY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpfToidG9wIj09PWYmJihyZT17c3RhcnQ6RCxl''@;'; put 'put ''bmQ6YX0pfWJyZWFrO2Nhc2UiU0UtTlciOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpjYXNlIk5FLVNXIjpjYXNlIlNXLU5FIjoidG9wIj09PWYmJihyZS5lbmQ9YSk7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1mP3JlLmVuZD1hOnJlPXtzdGFydDphLGVuZDp2fX19cmV0dXJuIHJlfWlzRHJh''@;'; put 'put ''Z2dlZCgpe3JldHVybiB0aGlzLmRyYWdnZWQubGVuZ3RoPjB9fWZ1bmN0aW9uIGVlZSgpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSExLGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46dj0h''@;'; put 'put ''MSxpc1Jvb3Q6TT0hMSxpc1BsYWNlaG9sZGVyOkQ9ITEsaGVhZGVyQ2xhc3NOYW1lczpaPVtdfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJue2xhYmVsOmMsY29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFwc2libGU6''@;'; put 'put ''ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOnYsaXNSb290Ok0saXNQbGFjZWhvbGRlcjpELGhlYWRlckNsYXNzTmFtZXM6Wn19ZnVuY3Rpb24gdGVlKGMsbCxhKXsoZnVuY3Rpb24gS3B0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''Q2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MyhjLGwpe3JldHVybiBjLmdldChPbWUoYyxsKSl9ZnVuY3Rpb24gZ0EoYyxsLGEpe3JldHVybiBjLnNldChPbWUoYyxsKSxh''@;'; put 'put ''KSxhfWZ1bmN0aW9uIE9tZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29u''@;'; put 'put ''c3QgUG1lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBZZz1uZXcgV2Vha01hcCxaOT1uZXcgV2Vha01hcCxuZWU9bmV3IFdlYWtNYXA7Y2xhc3MgcXB0e2NvbnN0cnVjdG9yKCl7dGVlKHRoaXMsWWcsW10pLHRlZSh0aGlzLFo5LDApLHRlZSh0aGlzLG5lZSwxLzApfXNldENvbHVtbnNM''@;'; put 'put ''aW1pdChsKXtnQShuZWUsdGhpcyxsKX1zZXREYXRhKCl7Z0EoWWcsdGhpcyxmdW5jdGlvbiAkcHQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO1luKGMsaD0+e2Nv''@;'; put 'put ''bnN0IGY9W107bGV0IHY9MDthLnB1c2goZiksWW4oaCxNPT57Y29uc3QgRD1lZWUoKTtpZihxbyhNKSl7Y29uc3R7bGFiZWw6cmUsY29sc3BhbjpjZSxoZWFkZXJDbGFzc05hbWU6YmV9PU07RC5sYWJlbD1sYyhyZSksIm51bWJlciI9PXR5cGVvZiBjZSYmY2U+MSYmKEQuY29sc3Bhbj1jZSxE''@;'; put 'put ''Lm9yaWdDb2xzcGFuPWNlKSwic3RyaW5nIj09dHlwZW9mIGJlJiYoRC5oZWFkZXJDbGFzc05hbWVzPVsuLi5iZS5zcGxpdCgiICIpXSl9ZWxzZSBELmxhYmVsPWxjKE0pO3YrPUQub3JpZ0NvbHNwYW47bGV0IFo9ITE7aWYodj49bCYmKEQuY29sc3Bhbj1ELm9yaWdDb2xzcGFuLSh2LWwpLEQu''@;'; put 'put ''b3JpZ0NvbHNwYW49RC5jb2xzcGFuLFo9ITApLGYucHVzaChEKSxELmNvbHNwYW4+MSlmb3IobGV0IHJlPTA7cmU8RC5jb2xzcGFuLTE7cmUrKylmLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4hWn0pfSk7Y29uc3QgZD1NYXRoLm1heCguLi55cyhhLGg9PmgubGVu''@;'; put 'put ''Z3RoKSk7cmV0dXJuIFluKGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9eXMobmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT5lZWUoKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwuLi5mKX19KSxhfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb''@;'; put 'put ''MF06W10sdzMobmVlLHRoaXMpKSksZ0EoWjksdGhpcyx3MyhZZyx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdzMoWWcsdGhpcyl9bWVyZ2VXaXRoKGwpe1luKGwsYT0+e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251''@;'; put 'put ''bGwhPT12JiZFdSh2LGYsUG1lKX0pfW1hcChsKXtZbih3MyhZZyx0aGlzKSxhPT57WW4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7cW8oaCkmJkV1KGQsaCxQbWUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lmKGw+PXczKFo5LHRoaXMpfHxsPDApcmV0dXJuIG51bGw7Y29u''@;'; put 'put ''c3QgaD13MyhZZyx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PXczKFo5LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13MyhZZyx0aGlzKVtsXTtsZXQgdj0wO2ZvcihsZXQgTT1hO008Zi5sZW5ndGg7TSsrKXtjb25zdCBEPWZbTV07aWYoRC5pc1BsYWNlaG9sZGVyKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUQuY29sc3BhbixoLnB1c2goRCksRC5jb2xzcGFuPjEmJihNKz1ELmNvbHNwYW4tMSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzMoWjksdGhpcyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHczKFo5LHRoaXMpPjA/dzMoWWcsdGhpcylb''@;'; put 'put ''MF0ubGVuZ3RoOjB9Y2xlYXIoKXtnQShZZyx0aGlzLFtdKSxnQShaOSx0aGlzLDApfX1mdW5jdGlvbiByZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFhwdChjKXt2YXIgbD1mdW5jdGlvbiBKcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWNvbnN0IEZtZT0iREYtcHJlLW9yZGVyIixCbWU9bmV3IE1hcChbW0ZtZSxmdW5jdGlvbiBIbWUoYyxsKXtsZXQgYT1jLmNhbGwobCx0aGlzKTtmb3IobGV0IGQ9MDtkPHRoaXMuY2hpbGRzLmxlbmd0aDtkKyspe2lmKCExPT09YSlyZXR1cm4hMTthPUhtZS5jYWxsKHRoaXMu''@;'; put 'put ''Y2hpbGRzW2RdLGMsbCl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIE5tZShjLGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZighMT09PU5tZS5jYWxsKHRoaXMuY2hpbGRzW2FdLGMsbCkpcmV0dXJuITE7cmV0dXJuIGMuY2FsbChsLHRoaXMp''@;'; put 'put ''fV0sWyJCRiIsZnVuY3Rpb24gZTR0KGMsbCl7Y29uc3QgYT1bdGhpc107IWZ1bmN0aW9uIGQoKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9YS5zaGlmdCgpO2EucHVzaCguLi5oLmNoaWxkcyksITEhPT1jLmNhbGwobCxoKSYmZCgpfSgpfV1dKTtjbGFzcyBJSHtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsKXtyZWUodGhpcywiZGF0YSIse30pLHJlZSh0aGlzLCJwYXJlbnQiLG51bGwpLHJlZSh0aGlzLCJjaGlsZHMiLFtdKSx0aGlzLmRhdGE9bH1hZGRDaGlsZChsKXtsLnBhcmVudD10aGlzLHRoaXMuY2hpbGRzLnB1c2gobCl9Y2xvbmVUcmVlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4w''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgYT1uZXcgSUgoey4uLmwuZGF0YX0pO2ZvcihsZXQgZD0wO2Q8bC5jaGlsZHMubGVuZ3RoO2QrKylhLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKGwuY2hpbGRzW2RdKSk7cmV0dXJuIGF9cmVwbGFjZVRyZWVX''@;'; put 'put ''aXRoKGwpe3RoaXMuZGF0YT17Li4ubC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGE9MDthPGwuY2hpbGRzLmxlbmd0aDthKyspdGhpcy5hZGRDaGlsZChsLmNoaWxkc1thXSl9d2Fsa0Rvd24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/''@;'; put 'put ''YXJndW1lbnRzWzFdOiJCRiI7aWYoIUJtZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgIiR7YX0iIGRvZXMgbm90IGV4aXN0YCk7Qm1lLmdldChhKS5jYWxsKHRoaXMsbCx0aGlzKX13YWxrVXAobCl7Y29uc3QgYT10aGlzLGQ9aD0+eyExIT09bC5jYWxsKGEs''@;'; put 'put ''aCkmJm51bGwhPT1oLnBhcmVudCYmZChoLnBhcmVudCl9O2QodGhpcyl9fWZ1bmN0aW9uIGllZShjLGwsYSl7KGZ1bmN0aW9uIG40dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ug''@;'; put 'put ''b24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmQoYyxsKXtyZXR1cm4gYy5nZXQoam1lKGMsbCkpfWZ1bmN0aW9uIGptZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGd3PW5ldyBXZWFrTWFwLFc5PW5ldyBXZWFrTWFwLG13PW5ldyBXZWFrTWFwO2NsYXNzIGk0dHtjb25zdHJ1Y3RvcihsKXtpZWUodGhpcyxndyxuZXcgTWFwKSxpZWUo''@;'; put 'put ''dGhpcyxXOSxuZXcgTWFwKSxpZWUodGhpcyxtdyxudWxsKSxmdW5jdGlvbiByNHQoYyxsLGEpe2Muc2V0KGptZShjLGwpLGEpfShtdyx0aGlzLGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20ocmQoZ3csdGhpcykudmFsdWVzKCkpfWdldFJvb3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1''@;'; put 'put ''cm4gcmQoVzksdGhpcykuaGFzKGwpJiYoYT1yZChndyx0aGlzKS5nZXQocmQoVzksdGhpcykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLXJkKFc5LHRoaXMpLmdldChhKTtsZXQgdixmPTA7cmV0''@;'; put 'put ''dXJuIGQud2Fsa0Rvd24oTT0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOkQsaGVhZGVyTGV2ZWw6Wn19PU07aWYobD09PVope2lmKGg+PWYmJmg8PWYrRC0xKXJldHVybiB2PU0sdi5kYXRhLmlzUm9vdD1hPT09di5kYXRhLmNvbHVtbkluZGV4LCExO2YrPUR9fSksdn1yZWJ1aWxkVHJlZUlu''@;'; put 'put ''ZGV4KCl7bGV0IGw9MDtyZChXOSx0aGlzKS5jbGVhcigpLFluKHJkKGd3LHRoaXMpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKyspcmQoVzksdGhpcykuc2V0KGgsbCk7bCs9ZH0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCBsPXJk''@;'; put 'put ''KG13LHRoaXMpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPXJkKG13LHRoaXMpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgSUg7cmQoZ3csdGhpcykuc2V0KGEsaCksdGhpcy5idWlsZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxhKz1kLm9y''@;'; put 'put ''aWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MTtjb25zdCBmPXJkKG13LHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEsaCk7ZCs9''@;'; put 'put ''MSxZbihmLHY9Pntjb25zdCBNPXsuLi52LGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgRDsxPT09ZD8obC5kYXRhPU0sRD1sKTooRD1uZXcgSUgoTSksbC5hZGRDaGlsZChEKSksZDxyZChtdyx0aGlzKS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKEQsYSxk''@;'; put 'put ''LHYub3JpZ0NvbHNwYW4pLGErPXYub3JpZ0NvbHNwYW59KX1jbGVhcigpe3JkKGd3LHRoaXMpLmNsZWFyKCkscmQoVzksdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gem1lKGMsbCl7Yy53YWxrRG93bihhPT57bGV0e2RhdGE6ZCxjaGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwoZC5jb2x1''@;'; put 'put ''bW5JbmRleCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gUkgoYyxsKXtsZXR7Y2hpbGRzOmF9PWM7aWYoMCE9PWEubGVuZ3RoKXJldHVybiBhWzBdLmRhdGFbbF19ZnVuY3Rpb24gTEgoYyl7cmV0dXJuIFJI''@;'; put 'put ''KGMsIm9yaWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gYWVlKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5pc0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFm''@;'; put 'put ''ZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKExIKGMpKXJldHVybiBhZWUoYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCB2PTA7aWYoaC5sZW5ndGg+MClZbihoLE09PntNLnJlcGxhY2VUcmVlV2l0aChNLmRh''@;'; put 'put ''dGEuY2xvbmVkVHJlZSksTS5kYXRhLmNsb25lZFRyZWU9bnVsbCx2Kz1NLmRhdGEuY29sc3Bhbix6bWUoTSxaPT57Zi5hZGQoWil9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpNLG9yaWdDb2xzcGFuOkQsY29sdW1uSW5kZXg6Wn09bDt2PUQtTTtmb3IobGV0IHJlPTE7cmU8RDtyZSsrKWYuYWRk''@;'; put 'put ''KForcmUpfXJldHVybiBjLndhbGtVcChNPT57Y29uc3R7ZGF0YTpEfT1NO0QuY29sc3Bhbis9dixELmNvbHNwYW4+PUQub3JpZ0NvbHNwYW4/KEQuY29sc3Bhbj1ELm9yaWdDb2xzcGFuLEQuaXNDb2xsYXBzZWQ9ITEpOkxIKE0pJiYoRC5pc0NvbGxhcHNlZD1SSChNLCJpc0NvbGxhcHNlZCIp''@;'; put 'put ''KX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+b2VlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246dn19ZnVuY3Rpb24gb2VlKGMpe3ZhciBsO2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVu''@;'; put 'put ''fHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTEgoYykpcmV0dXJuIG9lZShkWzBdKTthLmlzQ29sbGFwc2VkPSEwO2NvbnN0IGY9ZC5zbGljZSgxKSx2PW5ldyBT''@;'; put 'put ''ZXQ7aWYoZi5sZW5ndGg+MClZbihmLEQ9Pnt6bWUoRCxaPT57di5hZGQoWil9KSxELmRhdGEuY2xvbmVkVHJlZT1ELmNsb25lVHJlZSgpLEQud2Fsa0Rvd24oWj0+e2xldHtkYXRhOnJlfT1aO3JlLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOkQsY29sdW1uSW5kZXg6''@;'; put 'put ''Wn09YTtmb3IobGV0IHJlPTE7cmU8RDtyZSsrKXYuYWRkKForcmUpfWNvbnN0IE09YS5jb2xzcGFuLShudWxsIT09KGw9UkgoYywiY29sc3BhbiIpKSYmdm9pZCAwIT09bD9sOjEpO3JldHVybiBjLndhbGtVcChEPT57Y29uc3R7ZGF0YTpafT1EO1ouY29sc3Bhbi09TSxaLmNvbHNwYW48PTE/''@;'; put 'put ''KFouY29sc3Bhbj0xLFouaXNDb2xsYXBzZWQ9ITApOkxIKEQpJiYoWi5pc0NvbGxhcHNlZD1SSChELCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+YWVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKHYpLGNvbHNwYW5Db21wZW5zYXRpb246TX19Y29u''@;'; put 'put ''c3QgVW1lPW5ldyBNYXAoW1siY29sbGFwc2UiLG9lZV0sWyJleHBhbmQiLGFlZV0sWyJoaWRlLWNvbHVtbiIsZnVuY3Rpb24gYTR0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52''@;'; put 'put ''YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihnbGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBi''@;'; put 'put ''ZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2Nv''@;'; put 'put ''bnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5wdXNoKGwpLGYuY29sc3Bhbj4xP2YuY29sc3Bhbi09MTpmLmlzSGlkZGVuPSEwfSl9XSxbInNob3ctY29sdW1uIixmdW5jdGlvbiBvNHQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBw''@;'; put 'put ''YXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGdsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5v''@;'; put 'put ''ZGUsIHRoZSBzaG93IGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZighYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lm''@;'; put 'put ''KGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoZi5jcm9zc0hpZGRlbkNvbHVtbnMuaW5kZXhPZihsKSwxKSwhZi5pc0hpZGRlbiYmZi5jb2xzcGFuPGYub3JpZ0NvbHNwYW4mJihmLmNvbHNwYW4r''@;'; put 'put ''PTEpLGYuaXNIaWRkZW49ITF9KX1dXSk7ZnVuY3Rpb24gT0goYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57YS53YWxrRG93bihkPT57Y29uc3QgaD1kLmRhdGEse29yaWdDb2xzcGFuOmYsY29sdW1uSW5kZXg6dixoZWFkZXJMZXZlbDpNLGNyb3NzSGlkZGVuQ29sdW1uczpEfT1oLFo9''@;'; put 'put ''ZnVuY3Rpb24gYzR0KGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxNKTtsZXQgcmU9ITE7Zm9yKGxldCBjZT12O2NlPHYrZjtjZSsrKWlmKEQuaW5jbHVkZXMoY2UpfHxyZSlaLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xk''@;'; put 'put ''ZXI6ITB9KTtlbHNle2NvbnN0IEVlPWw0dChoKTtFZS5pc1Jvb3Q9ITAsWi5wdXNoKEVlKSxyZT0hMH19KX0pLGx9ZnVuY3Rpb24gbDR0KGMpe2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczpsLC4uLmF9PWVlZShjKTtyZXR1cm4gYX1mdW5jdGlvbiBzZWUoYyxsLGEpeyhmdW5jdGlvbiB1NHQo''@;'; put 'put ''YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG1BKGMsbCxhKXtyZXR1cm4gYy5zZXQoWm1lKGMsbCksYSks''@;'; put 'put ''YX1mdW5jdGlvbiBxYyhjLGwpe3JldHVybiBjLmdldChabWUoYyxsKSl9ZnVuY3Rpb24gWm1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbjQ9bmV3IFdlYWtNYXAsSmQ9bmV3IFdlYWtNYXAsWTk9bmV3IFdlYWtNYXA7Y2xhc3MgZDR0e2NvbnN0cnVjdG9yKCl7c2VlKHRoaXMsbjQsbmV3IHFwdCksc2VlKHRoaXMsSmQsbmV3IGk0dChxYyhuNCx0aGlzKSkpLHNl''@;'; put 'put ''ZSh0aGlzLFk5LFtbXV0pfXNldFN0YXRlKGwpe3FjKG40LHRoaXMpLnNldERhdGEobCk7bGV0IGE9ITE7dHJ5e3FjKEpkLHRoaXMpLmJ1aWxkVHJlZSgpfWNhdGNoe3FjKEpkLHRoaXMpLmNsZWFyKCkscWMobjQsdGhpcykuY2xlYXIoKSxhPSEwfXJldHVybiBtQShZOSx0aGlzLE9IKHFjKEpk''@;'; put 'put ''LHRoaXMpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXtxYyhuNCx0aGlzKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT15cyhsLGQ9PntsZXR7cm93OmgsLi4uZn09ZDtyZXR1cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoaCk6''@;'; put 'put ''aCwuLi5mfX0pO3FjKG40LHRoaXMpLm1lcmdlV2l0aChhKSxxYyhKZCx0aGlzKS5idWlsZFRyZWUoKSxtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBTdGF0ZShsKXtxYyhuNCx0aGlzKS5tYXAobCkscWMoSmQsdGhpcykuYnVpbGRUcmVlKCksbUEoWTksdGhpcyxP''@;'; put 'put ''SChxYyhKZCx0aGlzKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIHF1KHFjKEpkLHRoaXMpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBmPWwoaC5kYXRhKTt2b2lkIDAhPT1mJiZhLnB1c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2RpZmljYXRp''@;'; put 'put ''b24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25zdCBoPXFjKEpkLHRoaXMpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rpb24gczR0KGMsbCxhKXtpZighVW1lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVy''@;'; put 'put ''IGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gVW1lLmdldChjKShsLGEpfShsLGgsZCksbUEoWTksdGhpcyxPSChxYyhKZCx0aGlzKS5nZXRSb290cygpKSkpLGZ9dHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9k''@;'; put 'put ''aWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJldHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE8MD9udWxsOmF9bGV2ZWxUb1Jvd0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7Y29uc3Qg''@;'; put 'put ''YT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9u''@;'; put 'put ''dWxsOm51bGwhPT0oZD1udWxsPT09KGg9cWMoWTksdGhpcylbbF0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldEhlYWRlclRyZWVOb2RlKGwsYSk7cmV0dXJuIGQ/ey4uLmQuZGF0''@;'; put 'put ''YX06bnVsbH1nZXRIZWFkZXJUcmVlTm9kZShsLGEpe3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOnFjKEpkLHRoaXMpLmdldE5vZGUobCxhKXx8bnVsbH1maW5kVG9wTW9zdEVudGlyZUhlYWRl''@;'; put 'put ''ckxldmVsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2NvbnN0IGQ9YS1sKzE7bGV0IGg9ITEsZj1udWxsO2ZvcihsZXQgdj1sO3Y8PWE7disrKXtjb25zdCBNPXFjKEpkLHRoaXMpLmdldFJvb3RCeUNvbHVtbih2KTtp''@;'; put 'put ''ZighTSlicmVhaztoPSEwLE0ud2Fsa0Rvd24oRD0+e2NvbnN0e2NvbHVtbkluZGV4OlosaGVhZGVyTGV2ZWw6cmUsb3JpZ0NvbHNwYW46Y2UsaXNIaWRkZW46YmV9PUQuZGF0YTtiZXx8Y2U8PWQmJlo+PWwmJlorY2UtMTw9YSYmKG51bGw9PT1mfHxyZTxmKSYmKGY9cmUpfSxGbWUpfXJldHVy''@;'; put 'put ''biBoJiZudWxsPT09Zj8tMTp0aGlzLmxldmVsVG9Sb3dDb29yZHMoZj8/MCl9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aH09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwfTtpZiho''@;'; put 'put ''KXJldHVybiBhO2xldCBmPWEtMTtmb3IoO2Y+PTA7KXt2YXIgdjtjb25zdHtpc1Jvb3Q6TX09bnVsbCE9PSh2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxmKSkmJnZvaWQgMCE9PXY/djp7aXNSb290OiEwfTtpZihNKWJyZWFrO2YtPTF9cmV0dXJuIGZ9ZmluZFJpZ2h0TW9zdENvbHVtbklu''@;'; put 'put ''ZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omgsb3JpZ0NvbHNwYW46Zn09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwLG9yaWdDb2xzcGFuOjF9O2lmKGgpcmV0dXJuIGErZi0xO2xldCB2PWErMTtmb3IoO3Y8dGhpcy5n''@;'; put 'put ''ZXRDb2x1bW5zQ291bnQoKTspe3ZhciBNO2NvbnN0e2lzUm9vdDpEfT1udWxsIT09KE09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLHYpKSYmdm9pZCAwIT09TT9NOntpc1Jvb3Q6ITB9O2lmKEQpYnJlYWs7dis9MX1yZXR1cm4gdi0xfWdldExheWVyc0NvdW50KCl7cmV0dXJuIHFjKG40LHRo''@;'; put 'put ''aXMpLmdldExheWVyc0NvdW50KCl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHFjKG40LHRoaXMpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7bUEoWTksdGhpcyxbXSkscWMobjQsdGhpcykuY2xlYXIoKSxxYyhKZCx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiB2QShjLGwsYSl7cmV0dXJu''@;'; put 'put ''KGw9ZnVuY3Rpb24gaDR0KGMpe3ZhciBsPWZ1bmN0aW9uIGY0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi''@;'; put 'put ''In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZzR0PWNsYXNzIHA0dHtjb25zdHJ1Y3RvcihsLGEpe3ZBKHRoaXMsImhvdCIsdm9pZCAwKSx2QSh0aGlz''@;'; put 'put ''LCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSx2QSh0aGlzLCJsYXllcnNDb3VudCIsMCksdkEodGhpcywiY29udGFpbmVyIix2b2lkIDApLHZBKHRoaXMsIndpZHRoc01hcCIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXI9YSx0''@;'; put 'put ''aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRIZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIil9c2V0TGF5ZXJzQ291bnQobCl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9bCx0aGlz''@;'; put 'put ''fWdldFdpZHRoKGwpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9YnVpbGRXaWR0aHNNYXAoKXtjb25zdCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKTt0aGlzLmNvbnRhaW5lcj10aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIpLGwmJnRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQobCksdGhpcy5fYnVpbGRHaG9zdFRhYmxlKHRoaXMu''@;'; put 'put ''Y29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgYT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJ0cjpsYXN0LW9mLXR5cGUgdGgiKSxkPWEubGVuZ3RoO3RoaXMud2lkdGhzTWFwLmNsZWFyKCk7Zm9y''@;'; put 'put ''KGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpLHY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKTt0aGlzLndpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgodixhW2hdLm9mZnNldFdpZHRo''@;'; put 'put ''KX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7cm9vdERvY3VtZW50OmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURvY3VtZW50''@;'; put 'put ''RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSx2PSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsTT1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7Zm9yKGxldCBEPTA7RDx0aGlzLmxheWVyc0NvdW50O0QrKyl7Y29uc3QgWj1hLmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoInRyIik7Zm9yKGxldCByZT0wO3JlPE07cmUrKyl7bGV0IGNlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZSk7bnVsbD09PWNlJiYoY2U9cmUpO2NvbnN0IGJlPWEuY3JlYXRlRWxlbWVudCgidGgiKSxFZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyKEQs''@;'; put 'put ''Y2UpO2lmKEVlJiYoIUVlLmlzUGxhY2Vob2xkZXJ8fEVlLmlzSGlkZGVuKSl7bGV0IEJlPUVlLmxhYmVsO3YmJihCZSs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLHo3KGJlLEJlKSxiZS5jb2xTcGFuPUVlLmNvbHNwYW4sWi5hcHBlbmRDaGlsZChiZSl9fWYuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoWil9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX07ZnVuY3Rpb24gV21lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2NHQoYyl7dmFyIGw9ZnVuY3Rpb24gYjR0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBiQShjLGwsYSl7WW1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6''@;'; put 'put ''ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEdnKGMsbCxhKXtyZXR1cm4gYy5zZXQoWGMoYyxsKSxhKSxhfWZ1bmN0aW9uIF9zKGMsbCl7cmV0dXJuIGMuZ2V0KFhjKGMsbCkpfWZ1bmN0aW9uIFhjKGMsbCxhKXtpZigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBHbWU9Im5lc3RlZEhlYWRlcnMiO3ZhciBEbD1uZXcgV2Vh''@;'; put 'put ''a01hcCxDNj1uZXcgV2Vha01hcCx5QT1uZXcgV2Vha01hcCxQSD1uZXcgV2Vha01hcCxGSD1uZXcgV2Vha01hcCxodT1uZXcgV2Vha1NldDtjbGFzcyBfNHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbTR0KGMsbCl7WW1lKGMsbCksbC5h''@;'; put 'put ''ZGQoYyl9KHRoaXMsaHUpLGJBKHRoaXMsRGwsbmV3IGQ0dCksYkEodGhpcyxDNixudWxsKSxiQSh0aGlzLHlBLG51bGwpLGJBKHRoaXMsUEgsITEpLGJBKHRoaXMsRkgsbnVsbCksV21lKHRoaXMsImdob3N0VGFibGUiLG5ldyBnNHQodGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0''@;'; put 'put ''dGluZ3MobCxhKSkpLFdtZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdtZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW0dtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmaWwoZ2xgWW91ciBOZXN0''@;'; put 'put ''ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1d''@;'; put 'put ''XWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PlhjKGh1LHRoaXMsRjR0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb''@;'; put 'put ''Zl07cmV0dXJuIFhjKGh1LGwsSDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''WGMoaHUsbCxNNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwseDR0''@;'; put 'put ''KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxFNHQpLmNhbGwobCwu''@;'; put 'put ''Li5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VVcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxUNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEE0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxrNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJT''@;'; put 'put ''ZWxlY3Rpb24iLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLHc0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZD0+WGMoaHUs''@;'; put 'put ''dGhpcyxJNHQpLmNhbGwodGhpcyxkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxMNHQpLmNhbGwobCwu''@;'; put 'put ''Li5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsTzR0KS5jYWxsKGwsLi4uaCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxDNHQpLmNhbGwobCwuLi5oKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlQ29weSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxTNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2Vs''@;'; put 'put ''ZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxENHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNh''@;'; put 'put ''bGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxSNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Rm9jdXNlZEVs''@;'; put 'put ''ZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsUDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2so''@;'; put 'put ''ImNhY2hlVXBkYXRlZCIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIiwoKT0+WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVn''@;'; put 'put ''aW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO19zKERsLHRoaXMpLnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMu''@;'; put 'put ''ZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1fcyhEbCx0aGlzKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZpbChnbGBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2Yg''@;'; put 'put ''Y29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQp''@;'; put 'put ''PT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO19zKERsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFfcyhDNix0aGlzKSYmdGhpcy5lbmFibGVkJiZHZyhDNix0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNo''@;'; put 'put ''YW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6dn09ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBNPSEwPT09dj8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7X3MoRGwsdGhpcykudHJpZ2dlckNv''@;'; put 'put ''bHVtbk1vZGlmaWNhdGlvbihNLGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdp''@;'; put 'put ''bigpe3RoaXMuY2xlYXJDb2xzcGFucygpLF9zKERsLHRoaXMpLmNsZWFyKCksX3MoQzYsdGhpcykudW5zdWJzY3JpYmUoKSxHZyhDNix0aGlzLG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gX3MoRGws''@;'; put 'put ''dGhpcyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gX3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBfcyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47''@;'; put 'put ''Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVy''@;'; put 'put ''T3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBNPWQuY2hpbGROb2Rlc1t2XTtpZighTSlicmVhaztjb25zdCBEPWguY2hpbGROb2Rlc1t2XSxaPWY/Zi5jaGls''@;'; put 'put ''ZE5vZGVzW3ZdOm51bGw7Zm9yKGxldCByZT0wLGNlPU0uY2hpbGROb2Rlcy5sZW5ndGg7cmU8Y2U7cmUrKylNLmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKE0uY2hpbGROb2Rlc1tyZV0sImhpZGRlbkhlYWRlciIpLEQmJkQuY2hpbGROb2Rlc1tyZV0mJihE''@;'; put 'put ''LmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKEQuY2hpbGROb2Rlc1tyZV0sImhpZGRlbkhlYWRlciIpKSxmJiZaJiZaLmNoaWxkTm9kZXNbcmVdJiYoWi5jaGlsZE5vZGVzW3JlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhaLmNoaWxkTm9kZXNb''@;'; put 'put ''cmVdLCJoaWRkZW5IZWFkZXIiKSl9fWhlYWRlclJlbmRlcmVyRmFjdG9yeShsKXt2YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtyZXR1cm4oaCxmKT0+e3ZhciB2O2NvbnN0e2NvbHVtbkluZGV4TWFwcGVyOk0sdmll''@;'; put 'put ''dzpEfT10aGlzLmhvdDtsZXQgWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PVomJihaPWgpLGYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oZiwiaGlkZGVuSGVhZGVyIiksbG8oZiwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0e2NvbHNwYW46cmUsaXNI''@;'; put 'put ''aWRkZW46Y2UsaXNQbGFjZWhvbGRlcjpiZSxoZWFkZXJDbGFzc05hbWVzOkVlfT1udWxsIT09KHY9X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxaKSkmJnZvaWQgMCE9PXY/djp7bGFiZWw6IiJ9O2lmKGJlfHxjZSlUaShmLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKHJlPjEpe3Zh''@;'; put 'put ''ciBCZSxxZSxydDtjb25zdHt3dE92ZXJsYXlzOnB0fT1ELl93dCxkdD1udWxsPT09KEJlPXB0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PUJlP3ZvaWQgMDpCZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLEp0PW51bGw9PT0ocWU9cHQuaW5saW5lU3Rh''@;'; put 'put ''cnRPdmVybGF5KXx8dm9pZCAwPT09cWU/dm9pZCAwOnFlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZik7KG51bGw9PT0ocnQ9cHQudG9wT3ZlcmxheSl8fHZvaWQgMD09PXJ0P3ZvaWQgMDpydC5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpKSYmWjxkJiZUaShmLCJoaWRk''@;'; put 'put ''ZW5IZWFkZXJUZXh0Iik7Y29uc3QgQ249ZHR8fEp0P01hdGgubWluKHJlLGQtaCk6cmU7Q24+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLENuKX1pZih0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihaLGYsZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSgu''@;'; put 'put ''Li5hcmd1bWVudHMpfSxsKSwhYmUmJiFjZSl7Y29uc3QgcHQ9Zi5xdWVyeVNlbGVjdG9yKCJkaXYucmVsYXRpdmUiKTtwdCYmRWUmJkVlLmxlbmd0aD4wJiYobG8ocHQsdGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShaKS5oZWFkZXJDbGFzc05hbWUpLFRpKHB0LEVlKSl9fX1nZXRDb2x1bW5IZWFk''@;'; put 'put ''ZXJWYWx1ZShsLGEpe3ZhciBkO2NvbnN0e2lzSGlkZGVuOmgsaXNQbGFjZWhvbGRlcjpmfT1udWxsIT09KGQ9X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7fTtyZXR1cm4gZnx8aD8iIjp0aGlzLmhvdC5nZXRDb2xIZWFkZXIobCxhKX1kZXN0cm95''@;'; put 'put ''KCl7R2coRGwsdGhpcyxudWxsKSxudWxsIT09X3MoQzYsdGhpcykmJihfcyhDNix0aGlzKS51bnN1YnNjcmliZSgpLEdnKEM2LHRoaXMsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJu''@;'; put 'put ''IF9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLnJvdyxsLmNvbCl9fWZ1bmN0aW9uIEhIKCl7dmFyIGM7Y29uc3QgbD1udWxsPT09KGM9dGhpcy5ob3QpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2hpZ2hs''@;'; put 'put ''aWdodDphfT1sO2lmKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApe2NvbnN0IGg9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO2YudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodC5j''@;'; put 'put ''b2w9aCxmLnZpc3VhbENlbGxSYW5nZS5mcm9tLmNvbD1oLGYudmlzdWFsQ2VsbFJhbmdlLnRvLmNvbD1oLGYuY29tbWl0KCl9fWZ1bmN0aW9uIHc0dChjLGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighZClyZXR1cm4gYztjb25zdHtoaWdobGln''@;'; put 'put ''aHQ6aH09ZCx7bmF2aWdhYmxlSGVhZGVyczpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLE09Zj9oLnJvdzpudWxsPT09KGE9X3MoRkgsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnJvdyxEPXY/Yzpo''@;'; put 'put ''LmNvbCxaPU08MCYmRD49MDtpZihHZyhGSCx0aGlzLG51bGwpLCFaKXJldHVybiBjO2NvbnN0IHJlPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksY2U9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLGJlPWNlLXJlKzEsRWU9X3MoRGwsdGhpcykuZmlu''@;'; put 'put ''ZExlZnRNb3N0Q29sdW1uSW5kZXgoTSxEKSxCZT1fcyhEbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoTSxEKSxxZT1CZS1FZSsxO2lmKEVlPHJlJiZCZT5jZSlyZXR1cm4gRWU7aWYodil7bGV0IHJ0PW51bGw7cmV0dXJuIEVlPj1yZSYmQmU+Y2U/cWU+YmU/KGwudmFsdWU9InN0''@;'; put 'put ''YXJ0IixydD1FZSk6KGwudmFsdWU9ImVuZCIscnQ9QmUpOkVlPHJlJiZCZTw9Y2UmJihxZT5iZT8obC52YWx1ZT0iZW5kIixydD1CZSk6KGwudmFsdWU9InN0YXJ0IixydD1FZSkpLHJ0fXJldHVybiBFZTw9cmU/RWU6QmV9ZnVuY3Rpb24gQzR0KGMsbCxhKXtjb25zdCBkPV9zKERsLHRoaXMp''@;'; put 'put ''LmdldEhlYWRlclRyZWVOb2RlRGF0YShsLGMpO2lmKCFkKXJldHVybiBjO2NvbnN0e2NvbHVtbkN1cnNvcjpoLHNlbGVjdGlvblR5cGU6ZixzZWxlY3Rpb25XaWR0aDp2fT1hLHtpc1Jvb3Q6TSxjb2xzcGFuOkR9PV9zKERsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYyk7aWYoZj09PW1Y''@;'; put 'put ''KXtpZighTSlyZXR1cm4gZC5jb2x1bW5JbmRleH1lbHNlIGlmKGY9PT1XM2UmJihEPnYtaHx8IU0pKXJldHVybiBudWxsO3JldHVybiBjfWZ1bmN0aW9uIFM0dChjLGwsYSl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpkfT1hO2lmKDAhPT1kKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtj''@;'; put 'put ''b25zdHtzdGFydFJvdzp2LHN0YXJ0Q29sOk0sZW5kUm93OkQsZW5kQ29sOlp9PWxbZl0scmU9RC12KzE7aWYodj49MHx8MT09TS1aKzEpYnJlYWs7Zm9yKGxldCBiZT1NO2JlPD1aO2JlKyspZm9yKGxldCBFZT12O0VlPD1EO0VlKyspe3ZhciBoO2NvbnN0IEJlPXJlK0VlLHFlPWJlLU07MCE9''@;'; put 'put ''PXFlJiYhMT09PShudWxsPT09KGg9X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKEVlLGJlKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaXNSb290KSYmKGNbQmVdW3FlXT0iIil9fX1mdW5jdGlvbiBNNHQoYyxsLGEsZCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29y''@;'; put 'put ''ZHMobCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24geDR0KGMsbCl7Y29uc3QgYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighYSlyZXR1cm47R2coeUEsdGhpcyxsLmNsb25lKCkpLEdnKFBILHRoaXMsITApO2NvbnN0e3NlbGVjdGlvbjpkfT10aGlzLmhvdCxo''@;'; put 'put ''PWQuaXNTZWxlY3RlZCgpP2QuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGY9W10se2NvbHVtbkluZGV4OnYsb3JpZ0NvbHNwYW46TX09YSxEPSFkLmluSW5TZWxlY3Rpb24obCk7Yy5zaGlmdEtleSYmaD9sLmNvbDxoLmZyb20uY29sP2YucHVzaChoLmdldFRvcEVuZENvcm5l''@;'; put 'put ''cigpLmNvbCx2LGwucm93KTpmLnB1c2gobC5jb2w+aC5mcm9tLmNvbD9oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOnYsditNLTEsbC5yb3cpOihVTyhjKXx8SG0oYykmJkR8fGlmZShjKSkmJmYucHVzaCh2LHYrTS0xLGwucm93KSxkLnNlbGVjdENvbHVtbnMoLi4uZil9ZnVuY3Rpb24gRTR0''@;'; put 'put ''KGMsbCxhLGQpe2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fGQuY29sdW1uKXJldHVybjtjb25zdCBoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFoKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpmLG9yaWdDb2xzcGFuOnZ9PWgsTT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEQ9TS5nZXRUb3BTdGFydENvcm5lcigpLFo9TS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTpyZX09TTtkLmNvbHVtbj0hMCxkLmNlbGw9ITA7Y29uc3QgY2U9W10sYmU9a3MobC5yb3csLTEvMCwtMSk7bC5jb2w8cmUuY29sP2NlLnB1c2goWi5j''@;'; put 'put ''b2wsZixiZSk6Y2UucHVzaChsLmNvbD5yZS5jb2w/RC5jb2w6ZixmK3YtMSxiZSksdGhpcy5ob3Quc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4uY2UpfWZ1bmN0aW9uIFQ0dCgpe0dnKFBILHRoaXMsITEpfWZ1bmN0aW9uIEE0dCgpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6Y309dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKTtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHwhX3MoUEgsdGhpcyl8fCFjKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGQ9bC5nZXRCb3R0b21FbmRDb3JuZXIo''@;'; put 'put ''KS5jb2wse2NvbHVtbkluZGV4Omgsb3JpZ0NvbHNwYW46Zn09X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKF9zKHlBLHRoaXMpLnJvdyxfcyh5QSx0aGlzKS5jb2wpO2lmKGwuc2V0SGlnaGxpZ2h0KF9zKHlBLHRoaXMpKSxmPmwuZ2V0V2lkdGgoKXx8aDxhfHxoK2YtMT5kKXtj''@;'; put 'put ''b25zdCB2PV9zKERsLHRoaXMpLmZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwoa3MoYSxoLGgrZi0xKSxrcyhkLGgsaCtmLTEpKTtsLmhpZ2hsaWdodC5yb3c9dixsLmhpZ2hsaWdodC5jb2w9bC5mcm9tLmNvbH19ZnVuY3Rpb24gazR0KGMpe2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crYy5yb3csbC5jb2wrYy5jb2wpO2lmKCEoYS5pc0hlYWRlcigpJiZhLmNvbD49MCkpcmV0dXJuO2NvbnN0IGg9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3cs''@;'; put 'put ''YS5jb2wpLGY9X3MoRGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKTtpZihjLmNvbDwwKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/aC0xOmYsLTEpO2MuY29s''@;'; put 'put ''PW51bGw9PT1NPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKE0sbC5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBNPXRoaXMuaG90''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/ZisxOmgsMSk7Yy5jb2w9bnVsbD09PU0/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5t''@;'; put 'put ''YXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCxNKS0xLDEpfX1mdW5jdGlvbiBENHQoYyxsLGEpe2NvbnN0IGQ9Yy5yb3csaD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmMuY29sfSksZj10aGlzLl9nZXRI''@;'; put 'put ''ZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmwuY29sfSk7R2coRkgsdGhpcyxhLmNsb25lKCkpLGwuY29sPGMuY29sPyhoJiYoYy5jb2w9aC5jb2x1bW5JbmRleCtoLm9yaWdDb2xzcGFuLTEpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4KSk6bC5jb2w+PWMuY29sJiYoaCYm''@;'; put 'put ''KGMuY29sPWguY29sdW1uSW5kZXgpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4K2Yub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uIEk0dChjKXtpZihfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpPjApe2MubGVuZ3RoPTA7Zm9yKGxldCBsPTA7bDxfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3Vu''@;'; put 'put ''dCgpO2wrKyljLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkobCkpfX1mdW5jdGlvbiBSNHQoYyl7Y29uc3QgbD1fcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xldCBhPWMuc3RhcnRDb2x1bW4sZD0hIWw7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj1fcyhEbCx0aGlz''@;'; put 'put ''KS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoLGMuc3RhcnRDb2x1bW4pLHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZihmPj0wJiYoZD0hMSksbTEodikmJnY8Yy5zdGFydENvbHVtbil7YT12O2JyZWFrfX1jLnN0YXJ0Q29s''@;'; put 'put ''dW1uPWQ/X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsYSkuY29sdW1uSW5kZXg6YX1mdW5jdGlvbiBMNHQoYyxsKXtjb25zdCBhPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChsKTtyZXR1cm4gYz5hP2M6YX1mdW5jdGlvbiBPNHQoYyxsLGEpe3ZhciBkO2NvbnN0e2xhYmVs''@;'; put 'put ''Omh9PW51bGwhPT0oZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7bGFiZWw6IiJ9O3JldHVybiBofWZ1bmN0aW9uIFA0dChjLGwpe2lmKGM8MClyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChjLF9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENv''@;'; put 'put ''bHVtbkluZGV4KGMsbCksITApfWZ1bmN0aW9uIEY0dCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gSDR0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBfQShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTjR0KGMpe3ZhciBsPWZ1bmN0aW9uIFY0dChjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgajR0PWNsYXNzIEI0dHtjb25zdHJ1Y3RvcihsLGEpe19BKHRoaXMsImhvdCIsdm9pZCAwKSxfQSh0aGlzLCJkYXRhIixudWxsKSxfQSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksX0EodGhp''@;'; put 'put ''cywicGFyZW50UmVmZXJlbmNlIixuZXcgV2Vha01hcCksX0EodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9KSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRo''@;'; put 'put ''RGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LEdhKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9k''@;'; put 'put ''ZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2go''@;'; put 'put ''bCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmWW4obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0''@;'; put 'put ''dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xldCBNPWw7cmV0dXJuIE18fChNPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxudWxsIT1kJiZ2''@;'; put 'put ''PT09ZD97cmVzdWx0Ok0sZW5kOiEwfTpudWxsIT1oJiZNPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxNLl9fY2hpbGRyZW4mJlluKE0uX19jaGlsZHJlbixEPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KEQsZj9udWxsOk0pLHY9dGhpcy5yZWFkVHJlZU5vZGVzKEQsdixkLGgp''@;'; put 'put ''LGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gWG8odGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSks''@;'; put 'put ''bH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVu''@;'; put 'put ''dChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJu''@;'; put 'put ''IGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oWW4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihs''@;'; put 'put ''KT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1u''@;'; put 'put ''dWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdldFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4o''@;'; put 'put ''bCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJu''@;'; put 'put ''KG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3Qo''@;'; put 'put ''ZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMu''@;'; put 'put ''Z2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2Rl''@;'; put 'put ''KCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXModiwxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHYsMSksdGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBNPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsx''@;'; put 'put ''O3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLE0sMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5n''@;'; put 'put ''ZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoTSwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixNLDEpLGY9TX1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5l''@;'; put 'put ''bmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhpcy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENo''@;'; put 'put ''aWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7''@;'; put 'put ''Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyhHYShsWzBdLGxbMl0sYmU9Pntjb25zdCBFZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coYmUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoRWUpKX0pLEdhKDAsaC5sZW5ndGgtMixiZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW2Jl''@;'; put 'put ''XSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksTT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLEQ9dGhpcy5nZXRSb3dQYXJlbnQoZCksWj10aGlzLmdldFJvd1BhcmVudChEKSxyZT10''@;'; put 'put ''aGlzLmdldFJvd0luZGV4KFopO2xldCBjZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsRCxkKSxudWxsIT1NKXtjb25zdCBiZT1BcnJheS5mcm9tKG5ldyBBcnJheShmK3YrMSkua2V5cygpKS5zcGxpY2UoLTEqKHYrMSkpO2lmKHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsdisxLGJlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLEQuX19jaGlsZHJlbi5zcGxpY2UoTSwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsZix2KzEsYmUsdGhpcy5wbHVnaW4ucGx1Z2luTmFt''@;'; put 'put ''ZSksWil7Y2U9cmUrdGhpcy5jb3VudENoaWxkcmVuKFopO2NvbnN0IEVlPXRoaXMuZ2V0Q2hpbGQoWix0aGlzLmNvdW50Q2hpbGRyZW4oWiktMSksQmU9dGhpcy5nZXRSb3dJbmRleChFZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsQmUrMSx2KzEsdGhpcy5wbHVnaW4u''@;'; put 'put ''cGx1Z2luTmFtZSksWi5fX2NoaWxkcmVuLnB1c2goZCl9ZWxzZSBjZT10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGNlLTIsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuZGF0YS5wdXNoKGQpfXRoaXMucmV3cml0ZUNh''@;'; put 'put ''Y2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixjZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEZXRhY2hDaGlsZCIsRCxkLHRoaXMuZ2V0Um93SW5kZXgoZCkpLGEmJnRoaXMuaG90LnJlbmRlcigpfWZpbHRlckRh''@;'; put 'put ''dGEobCxhLGQpe2NvbnN0IGg9W107WW4oZCxmPT57aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChmKSl9KSxZbihoLGY9Pntjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZiksTT10aGlzLmdldFJvd1BhcmVudChmKTtudWxsPT09TT90aGlzLmRhdGEuc3BsaWNlKHYsMSk6''@;'; put 'put ''TS5fX2NoaWxkcmVuLnNwbGljZSh2LDEpfSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zcGxpY2VEYXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RGF0YU9iamVjdChsLTEpO2xldCBmPW51bGwsdj1sO2gmJmguX19jaGlsZHJlbiYmMD09PWguX19jaGlsZHJlbi5sZW5ndGg/KGY9aCx2PTApOmw8''@;'; put 'put ''dGhpcy5jb3VudEFsbFJvd3MoKSYmKGY9dGhpcy5nZXRSb3dQYXJlbnQobCksdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpKSxmP2Q/Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEsLi4uZCk6Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEpOmQ/dGhpcy5kYXRhLnNwbGljZSh2LGEsLi4u''@;'; put 'put ''ZCk6dGhpcy5kYXRhLnNwbGljZSh2LGEpLHRoaXMucmV3cml0ZUNhY2hlKCl9c3luY1Jvd1dpdGhSYXdTb3VyY2UobCl7bGV0IGE9bCxkPWE7ZG97ZD10aGlzLmdldFJvd1BhcmVudChkKSxudWxsIT09ZCYmKGE9ZCl9d2hpbGUobnVsbCE9PWQpO3RoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJ''@;'; put 'put ''TW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLCJfX2NoaWxkcmVuIixhLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3VyY2UiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZp''@;'; put 'put ''ZXJzKCl9bW92ZVJvdyhsLGEsZCxoKXtjb25zdCBmPWE9PT10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuZ2V0Um93UGFyZW50KGwpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSxEPXYuX19jaGlsZHJlbi5zbGljZShNLE0rMSksWj1sPmE7bGV0IHJlPXRoaXMuZ2V0Um93''@;'; put 'put ''UGFyZW50KGY/YS0xOmEpO251bGw9PXJlJiYocmU9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSksbnVsbD09cmUmJihyZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSkscmU/cmUuX19jaGlsZHJlbnx8KHJlLl9fY2hpbGRyZW49W10pOihyZT10aGlzLmdldERhdGFPYmplY3QoYSkscmUuX19jaGls''@;'; put 'put ''ZHJlbj1bXSk7Y29uc3QgY2U9Znx8ZHx8aD9yZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLGJlPXY9PT1yZTtyZS5fX2NoaWxkcmVuLnNwbGljZShjZSwwLERbMF0pLHYuX19jaGlsZHJlbi5zcGxpY2UoTSsoWiYmYmU/MTowKSwxKSx0aGlzLnN5''@;'; put 'put ''bmNSb3dXaXRoUmF3U291cmNlKHYpLGJlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHJlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRy''@;'; put 'put ''YW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fTtmdW5jdGlvbiAkbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHo0dChjKXt2YXIgbD1mdW5jdGlv''@;'; put 'put ''biBVNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGxlZT1jbGFzcyBaNHR7Y29uc3RydWN0b3IobCxhKXskbWUodGhpcywiaG90Iix2b2lkIDApLCRtZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksdGhpcy5ob3Q9YSx0''@;'; put 'put ''aGlzLnBsdWdpbj1sfX07Y2xhc3MgJGcgZXh0ZW5kcyBsZWV7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZlbHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5''@;'; put 'put ''SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0''@;'; put 'put ''YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1udWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhs''@;'; put 'put ''KSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksdj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYiKVswXSxNPXYucXVlcnlTZWxlY3Rvcigic3Bhbi5yb3dIZWFkZXIiKSxEPXYucXVlcnlTZWxlY3RvckFsbCgn''@;'; put 'put ''W2NsYXNzXj0iaHRfbmVzdGluZyJdJyksWj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFluKEQscmU9PntyZSYmdi5yZW1vdmVDaGlsZChyZSl9KSxUaShhLCRnLkNTU19DTEFTU0VTLmluZGljYXRvckNvbnRhaW5lciksaCl7Y29uc3R7cm9vdERvY3VtZW50OnJlfT10aGlz''@;'; put 'put ''LmhvdCxjZT1NLmNsb25lTm9kZSghMCk7di5pbm5lckhUTUw9IiIsR2EoMCxoLTEsKCk9Pntjb25zdCBiZT1yZS5jcmVhdGVFbGVtZW50KCJTUEFOIik7VGkoYmUsJGcuQ1NTX0NMQVNTRVMuZW1wdHlJbmRpY2F0b3IpLHYuYXBwZW5kQ2hpbGQoYmUpfSksdi5hcHBlbmRDaGlsZChjZSl9aWYo''@;'; put 'put ''dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSl7Y29uc3QgcmU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO1omJnZvKHJlLFtWNygpXSksVGkoYSwkZy5DU1NfQ0xBU1NFUy5wYXJlbnQpLHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFw''@;'; put 'put ''c2VkKGQpPyhUaShyZSxgJHskZy5DU1NfQ0xBU1NFUy5idXR0b259ICR7JGcuQ1NTX0NMQVNTRVMuZXhwYW5kQnV0dG9ufWApLFomJnZvKGEsW04yKCExKV0pKTooVGkocmUsYCR7JGcuQ1NTX0NMQVNTRVMuYnV0dG9ufSAkeyRnLkNTU19DTEFTU0VTLmNvbGxhcHNlQnV0dG9ufWApLFomJnZv''@;'; put 'put ''KGEsW04yKCEwKV0pKSx2LmFwcGVuZENoaWxkKHJlKX19dXBkYXRlUm93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDthfHwoYT10aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVsQ291bnQpO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5nZXRTdHlsZXNIYW5kbGVyKCk7bGV0IGg9MTE7ZC5pc0NsYXNz''@;'; put 'put ''aWNUaGVtZSgpfHwoaD0yKmQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1ob3Jpem9udGFsLXBhZGRpbmciKSksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLGgrMTAqYSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IEttZT0kZyxZNHQ9Y2xhc3MgVzR0IGV4dGVu''@;'; put 'put ''ZHMgbGVle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbiho''@;'; put 'put ''LGYpe2xldCB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksWW4oZC5sYXN0Q29sbGFwc2VkUm93cywoTSxEKT0+e00+PWgmJk08ZiYmKGQubGFzdENvbGxhcHNlZFJvd3NbRF09TSt2KX0pfSxhcHBseVN0''@;'; put 'put ''YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYp''@;'; put 'put ''PT57R2EoaCxoK2YtMSx2PT57Y29uc3QgTT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yodik7TT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoTSwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLE09bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0''@;'; put 'put ''Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGlsZHJlbixEPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoRCkpfSksTT10aGlzLmNvbGxhcHNl''@;'; put 'put ''Um93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2godiksTX1jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtZbihsLGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVu''@;'; put 'put ''KGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VS''@;'; put 'put ''b3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9W107cmV0dXJuIFluKGwsZj0+e2gucHVzaChm''@;'; put 'put ''KSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVz''@;'; put 'put ''aChNKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKE0sYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0''@;'; put 'put ''IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gWW4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMu''@;'; put 'put ''ZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57aWYoIXRoaXMuaXNBbnlQYXJlbnRDb2xsYXBzZWQodikpe2NvbnN0IE09dGhpcy5kYXRhTWFuYWdl''@;'; put 'put ''ci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5leHBhbmRDaGlsZFJvd3MoTSxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEo''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGlsZHJlbixEPT57Y29uc3QgWj10aGlzLmRhdGFNYW5hZ2VyLmdl''@;'; put 'put ''dFJvd0luZGV4KEQpO2gucHVzaChaKX0pLE09dGhpcy5leHBhbmRSb3dzKGgsITAsITEpLGQmJnRoaXMudW50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLE19ZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO1luKGwsZj0+e2gucHVzaCguLi50aGlzLmV4cGFuZENoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudW50cmlt''@;'; put 'put ''Um93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEucHVzaChkKX0pLHRoaXMuY29sbGFwc2VNdWx0aXBsZUNo''@;'; put 'put ''aWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9ZXhwYW5kQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEucHVzaChkKX0pLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJl''@;'; put 'put ''bihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfXRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApfXVudHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hF''@;'; put 'put ''eGVjdXRpb24oKCk9PntZbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCExKX0pfSwhMCl9YXJlQ2hpbGRyZW5Db2xsYXBzZWQobCl7bGV0IGE9aXNOYU4obCk/bDp0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksZD0hMDtyZXR1''@;'; put 'put ''cm4gbnVsbD09PWEmJihhPXtfX2NoaWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJlluKGEuX19jaGlsZHJlbixoPT57Y29uc3QgZj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGgpO2lmKCF0aGlzLnBsdWdpbi5jb2xs''@;'; put 'put ''YXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChmKSlyZXR1cm4gZD0hMSwhMX0pLGR9aXNBbnlQYXJlbnRDb2xsYXBzZWQobCl7bGV0IGE9bDtmb3IoO251bGwhPT1hOyl7YT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhKTtjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93''@;'; put 'put ''SW5kZXgoYSk7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoZCk+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUobCxhKXtpZihhLmNvbD49MClyZXR1cm47Y29uc3QgZD10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coYS5yb3cpO3BvKGwudGFyZ2V0LEttZS5DU1NfQ0xBU1NF''@;'; put 'put ''Uy5idXR0b24pJiYodGhpcy5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT90aGlzLmV4cGFuZENoaWxkcmVuKGQpOnRoaXMuY29sbGFwc2VDaGlsZHJlbihkKSxCMihsKSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKX11bnRyYW5zbGF0ZVRy''@;'; put 'put ''aW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsUm93KGwpfXJlbmRlckFuZEFkanVzdCgpe3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9fTt2YXIgcW1lPW5ldyBXZWFrTWFwO2NvbnN0IHRndD1jbGFzcyBlZ3QgZXh0ZW5kcyBs''@;'; put 'put ''ZWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEs0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcTR0KGMpe3ZhciBsPWZ1bmN0aW9uIFg0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRo''@;'; put 'put ''aXMsImRhdGFNYW5hZ2VyIix0aGlzLnBsdWdpbi5kYXRhTWFuYWdlciksZnVuY3Rpb24gRzR0KGMsbCxhKXsoZnVuY3Rpb24gJDR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxxbWUse3Jvd19hYm92ZToobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhhW2EubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYWJvdmUiKX0scm93X2JlbG93OihsLGEpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJs''@;'; put 'put ''aW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJiZWxvdyIpfX0pfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShEcSl9LGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2Vy''@;'; put 'put ''LnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaCl9LGRpc2FibGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3Qo''@;'; put 'put ''KTtyZXR1cm4hZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7a2V5OiJkZXRhY2hfZnJvbV9wYXJlbnQiLG5hbWUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXRUcmFuc2xhdGVkUGhyYXNlKElxKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpfHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiBHYSgwLGwuaXRlbXMubGVuZ3RoLTEsZD0+e2lmKDA9PT1kKXJldHVybiBZbihhLChoLGYpPT57bC5pdGVtcy5zcGxpY2UoZCtmLDAsaCl9KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9u''@;'; put 'put ''cyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe3JldHVybiBHYSgwLGwuaXRlbXMubGVuZ3RoLTEsYT0+e2NvbnN0IGQ9ZnVuY3Rpb24gSjR0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIFE0dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkp''@;'; put 'put ''cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShxbWUsdGhpcylbbC5pdGVtc1thXS5rZXldO251bGwhPWQmJihsLml0ZW1zW2FdLmNhbGxiYWNrPWQp''@;'; put 'put ''fSksbH19O2Z1bmN0aW9uIE5IKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gcmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpZ3R7Y29uc3RydWN0b3IobCl7TkgodGhpcywi''@;'; put 'put ''cGx1Z2luIix2b2lkIDApLE5IKHRoaXMsImhvdCIsdm9pZCAwKSxOSCh0aGlzLCJkYXRhTWFuYWdlciIsdm9pZCAwKSxOSCh0aGlzLCJjb2xsYXBzaW5nVUkiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5j''@;'; put 'put ''b2xsYXBzaW5nVUk9bC5jb2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmluYWxJbmRleDphLGRyb3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29s''@;'; put 'put ''bGFwc2VkPSExO2NvbnN0IHY9ZD09PXRoaXMuaG90LmNvdW50Um93cygpLE09dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZCk7bGV0IEQ9ITA7Y29uc3QgWj1sLm1hcChCZT0+e2lmKCFEKXJldHVybiExO2NvbnN0IHFl''@;'; put 'put ''PXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhCZSk7cmV0dXJuIEQ9dGhpcy5zaG91bGRBbGxvd01vdmluZyhxZSxNKSxxZX0pLHJlPS0xPT09Wi5pbmRleE9mKE0pO2lmKCFEfHwhcmUpcmV0dXJuITE7Y29uc3QgY2U9dGhpcy5nZXRCYXNlUGFyZW50KFopLGJlPXRoaXMu''@;'; put 'put ''Z2V0VGFyZ2V0UGFyZW50KHYsTSksRWU9Y2U9PT1iZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGJlKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFw''@;'; put 'put ''c2libGVQYXJlbnRzTG9jYXRpb25zKFosTSxFZSksdGhpcy5tb3ZlUm93cyhaLE0sYmUpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCksdGhpcy5tb3ZlQ2VsbHNNZXRhKFosTSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKGwsZCksITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbElu''@;'; put 'put ''ZGV4OmQsZHJvcEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IHY9ITE7cmV0dXJuIF9jKGgpJiYoaWwoZ2xgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAg''@;'; put 'put ''d2hlbiB0aGUgTmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixhLGQsaCxmLCExKSx2PSEwKSx2fXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJu''@;'; put 'put ''ISh0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxsPT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEp''@;'; put 'put ''e2xldCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxkfXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/''@;'; put 'put ''dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLGxbMF0sbC5sZW5ndGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhp''@;'; put 'put ''cy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChmPT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1v''@;'; put 'put ''dmVDZWxsc01ldGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShsWzBdLGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEo''@;'; put 'put ''YS0oaD9kLmxlbmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MDtpZih0aGlzLm1vdmVkVG9Db2xsYXBzZWQpe2xldCB2PW51bGw7dj10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cobFtkLTFdPGE/YS1kOmEpO2Nv''@;'; put 'put ''bnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTp2LTEpLEQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKTtoPXRoaXMuZGF0YU1hbmFnZXIudW50cmFuc2xhdGVUcmltbWVkUm93KEQpLGY9aH1lbHNl''@;'; put 'put ''IGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO3RoaXMuaG90LnNlbGVjdENlbGxzKFtbaCwwLGYsdGhpcy5ob3QuY291bnRDb2xzKCktMV1dLCExKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1mdW5jdGlvbiBYbWUo''@;'; put 'put ''YyxsLGEpe0ptZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBjZWUoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIG9ndChjKXt2YXIgbD1mdW5jdGlvbiBzZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFZIKGMsbCl7cmV0dXJuIGMuZ2V0KG0wKGMsbCkpfWZ1bmN0aW9uIEJIKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4gYy5zZXQobTAoYyxsKSxhKSxhfWZ1bmN0aW9uIG0wKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhpcyBvYmplY3QiKX1jb25zdCBqSD0ibmVzdGVkUm93cyIsUW1lPWpIO3ZhciB6SD1uZXcgV2Vha01hcCx2dz1uZXcgV2Vha01hcCxUMD1uZXcgV2Vha1NldDtjbGFzcyB1Z3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWd0KGMsbCl7''@;'; put 'put ''Sm1lKGMsbCksbC5hZGQoYyl9KHRoaXMsVDApLGNlZSh0aGlzLCJkYXRhTWFuYWdlciIsbnVsbCksY2VlKHRoaXMsImhlYWRlcnNVSSIsbnVsbCksY2VlKHRoaXMsImNvbGxhcHNlZFJvd3NNYXAiLG51bGwpLFhtZSh0aGlzLHpILCExKSxYbWUodGhpcyx2dywhMSl9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fS0VZKCl7cmV0dXJuIGpIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbakhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dz''@;'; put 'put ''TWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgcUUpLHRoaXMuZGF0YU1hbmFnZXI9bmV3IGo0dCh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgWTR0KHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBLbWUo''@;'; put 'put ''dGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyB0Z3QodGhpcyx0aGlzLmhvdCksdGhpcy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgaWd0KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFy''@;'; put 'put ''cmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLE1ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHhndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VM''@;'; put 'put ''ZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURhdGFTcGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''ZmlsdGVyRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxmZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1''@;'; put 'put ''bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHBndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxnZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGhndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsYmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFy''@;'; put 'put ''cmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHZndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCx5Z3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1to''@;'; put 'put ''XTtyZXR1cm4gbTAoVDAsbCxfZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQw''@;'; put 'put ''LGwsd2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsQ2d0KS5jYWxsKGws''@;'; put 'put ''Li4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLG1ndCkuY2FsbChsLC4uLmQpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxTZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3Jl''@;'; put 'put ''Um93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxkZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGE9Pm0wKFQw''@;'; put 'put ''LHRoaXMsZTZlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsYT0+bTAoVDAsdGhpcyxlNmUpLmNhbGwodGhpcyxhKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93''@;'; put 'put ''SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMu''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCksdGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRl''@;'; put 'put ''ciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5jb2xsYXBzaW5nVUkudHJhbnNsYXRlVHJpbW1lZFJvdyhsLnJvdyk7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGEp''@;'; put 'put ''P3RoaXMuY29sbGFwc2luZ1VJLmV4cGFuZENoaWxkcmVuKGEpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlQ2hpbGRyZW4oYSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/''@;'; put 'put ''dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmLTE9PT1kLmNvbCYmZC5yb3c+PTB9''@;'; put 'put ''LGdyb3VwOlFtZSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoUW1lKX1kaXNhYmxlQ29yZUFQSU1v''@;'; put 'put ''ZGlmaWVycygpe0JIKHZ3LHRoaXMsITApfWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXtCSCh2dyx0aGlzLCExKX1vbk1vZGlmeVJvd0RhdGEobCl7aWYoIVZIKHZ3LHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtp''@;'; put 'put ''ZighVkgodncsdGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuY291bnRBbGxSb3dzKCl9b25CZWZvcmVEYXRhU3BsaWNlKGwsYSxkKXtyZXR1cm4hKCFWSCh2dyx0aGlzKSYmIXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGlj''@;'; put 'put ''ZURhdGEobCxhLGQpLDEpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkZ3QoYyxsLGEsZCl7cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZvcmVSb3dNb3ZlKGMsbCxhLGQpfWZ1bmN0aW9uIGhndChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xl''@;'; put 'put ''U3RhdGUoYyxsLGEpfWZ1bmN0aW9uIGZndChjLGwsYSl7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goYVswXSxsKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBz''@;'; put 'put ''ZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhWzBdLG51bGwsLTEqbCksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGMsbCxhKSxCSCh6SCx0aGlzLCEwKSx0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKS5zbGljZSgpfWZ1bmN0aW9uIHBndChjKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJ''@;'; put 'put ''LmFwcGVuZE9wdGlvbnMoYyl9ZnVuY3Rpb24gZ2d0KGMsbCl7dGhpcy5oZWFkZXJzVUkuYXBwZW5kTGV2ZWxJbmRpY2F0b3JzKGMsbCl9ZnVuY3Rpb24gbWd0KGMpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hlLGMpfWZ1bmN0aW9uIHZndChjLGws''@;'; put 'put ''YSxkKXtkIT09dGhpcy5wbHVnaW5OYW1lJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57QkgoekgsdGhpcywhMSksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpfSl9ZnVu''@;'; put 'put ''Y3Rpb24gYmd0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oYS5yZWR1Y2UoKGgsZik9PntpZih0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGYpKXtjb25zdCB2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChmKS5fX2NoaWxkcmVuO3JldHVybiBoLmFkZChmKSxBcnJheS5pc0Fy''@;'; put 'put ''cmF5KHYpJiZ2LmZvckVhY2goTT0+aC5hZGQodGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKSkpLGh9cmV0dXJuIGguYWRkKGYpfSxuZXcgU2V0KSk7YS5sZW5ndGg9MCxhLnB1c2goLi4uZCl9ZnVuY3Rpb24geWd0KCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNo''@;'; put 'put ''LnN0YXNoKCl9ZnVuY3Rpb24gX2d0KGMsbCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChsKSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhl''@;'; put 'put ''YWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHdndCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIENndChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxudWxs''@;'; put 'put ''LC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24gU2d0KCl7dGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiBNZ3QoKXt0aGlzLmhlYWRl''@;'; put 'put ''cnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHhndChjLGwpe1ZIKHpILHRoaXMpJiYobC5za2lwUmVuZGVyPSEwKX1mdW5jdGlvbiBlNmUoYyl7aWYoIVQzZShjKSlyZXR1cm4gTiQoIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0''@;'; put 'put ''cyBhcyBhIGRhdGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqSF09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEoYyksdGhpcy5kYXRhTWFuYWdlci5y''@;'; put 'put ''ZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiB1ZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEVndChjKXt2YXIgbD1mdW5jdGlvbiBUZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGtndD1jbGFzcyBBZ3R7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdzt1ZWUodGhpcywicm9vdFdpbmRvdyIsdm9pZCAwKSx1ZWUodGhpcywicHJlZml4Iix2b2lkIDApLHVlZSh0aGlzLCJzYXZlZEtleXMiLFtdKSx0aGlzLnJv''@;'; put 'put ''b3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRoaXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJpbmdpZnkoYSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhP''@;'; put 'put ''ZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2gobCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke3R5cGVvZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1o''@;'; put 'put ''P3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWApfXJlc2V0QWxsKCl7WW4odGhpcy5zYXZlZEtleXMsKGwsYSk9Pnt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92''@;'; put 'put ''ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhpcy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2NvbnN0IGw9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5''@;'; put 'put ''c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pTT04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0''@;'; put 'put ''cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNsZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9fTtTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlU2F2ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy''@;'; put 'put ''KCJwZXJzaXN0ZW50U3RhdGVMb2FkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVJlc2V0Iik7Y29uc3QgdDZlPSJwZXJzaXN0ZW50U3RhdGUiO2NsYXNzIE9ndCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlv''@;'; put 'put ''biBEZ3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElndChjKXt2YXIgbD1mdW5jdGlvbiBSZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs''@;'; put 'put ''dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzdG9yYWdlIix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgp''@;'; put 'put ''e3JldHVybiB0NmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdDZlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnN0b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IGtndCh0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudC5pZCx0aGlzLmhvdC5yb290V2luZG93KSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwobCxhKT0+dGhpcy5zYXZlVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwobCxhKT0+dGhpcy5sb2FkVmFsdWUo''@;'; put 'put ''bCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsKCk9PnRoaXMucmVzZXRWYWx1ZSgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuc3RvcmFnZT12b2lkIDAsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9bG9hZFZhbHVlKGwsYSl7YS52YWx1ZT10aGlzLnN0b3JhZ2UubG9hZFZhbHVlKGwpfXNhdmVWYWx1ZShsLGEpe3RoaXMuc3RvcmFnZS5zYXZlVmFsdWUobCxhKX1yZXNldFZhbHVlKGwpe3R5''@;'; put 'put ''cGVvZiBsPiJ1Ij90aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTp0aGlzLnN0b3JhZ2UucmVzZXQobCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZGVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBIZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gTmd0KGMsbCl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBuNmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxl''@;'; put 'put ''bWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGhlZT0ic2VhcmNoIixqZ3Q9ZnVuY3Rpb24oYyxsLGEsZCxoKXtjLmdldENlbGxNZXRhKGwsYSkuaXNTZWFyY2hSZXN1bHQ9aH0semd0PWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4hKF9jKGMpfHxudWxsPT09Y3x8IWMu''@;'; put 'put ''dG9Mb2NhbGVMb3dlckNhc2V8fDA9PT1jLmxlbmd0aHx8X2MobCl8fG51bGw9PT1sKSYmLTEhPT1sLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpLmluZGV4T2YoYy50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkpfTt2YXIgZmVlPW5ldyBXZWFrU2V0O2NsYXNzIFVn''@;'; put 'put ''dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBQZ3QoYyxsKXsoZnVuY3Rpb24gRmd0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZmVlKSxkZWUodGhpcywiY2FsbGJhY2siLGpndCksZGVlKHRoaXMsInF1ZXJ5TWV0aG9kIix6Z3QpLGRlZSh0aGlzLCJzZWFyY2hSZXN1bHRDbGFzcyIsImh0U2VhcmNoUmVzdWx0Iil9c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIGhlZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxOTB9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbaGVlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpW2hlZV07dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhhKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3Jl''@;'; put 'put ''dHVybiBuNmUoZmVlLGwscjZlKS5jYWxsKGwsLi4uaCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztjb25zdCBhPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1''@;'; put 'put ''bWVudHNbZl07cmV0dXJuIG42ZShmZWUsbCxyNmUpLmNhbGwobCwuLi5oKX07dGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEp''@;'; put 'put ''fSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cXVlcnkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOnRoaXMuZ2V0Q2FsbGJhY2soKSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmdldFF1ZXJ5TWV0aG9kKCk7Y29uc3QgaD10aGlzLmhvdC5jb3VudFJvd3MoKSxmPXRoaXMuaG90LmNvdW50Q29scygpLHY9W10sTT10''@;'; put 'put ''aGlzLmhvdDtyZXR1cm4gR2EoMCxoLTEsRD0+e0dhKDAsZi0xLFo9Pntjb25zdCByZT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKEQsWiksY2U9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoRCxaKSxiZT1jZS5zZWFyY2guY2FsbGJhY2t8fGEsQmU9KGNlLnNlYXJjaC5xdWVyeU1ldGhvZHx8ZCkobCxy''@;'; put 'put ''ZSxjZSk7QmUmJnYucHVzaCh7cm93OkQsY29sOlosZGF0YTpyZX0pLGJlJiZiZShNLEQsWixyZSxCZSl9KX0pLHZ9Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhpcy5xdWVy''@;'; put 'put ''eU1ldGhvZH1zZXRRdWVyeU1ldGhvZChsKXt0aGlzLnF1ZXJ5TWV0aG9kPWx9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFyY2hSZXN1bHRDbGFzcyhsKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWx9dXBkYXRlUGx1Z2luU2V0dGlu''@;'; put 'put ''Z3MobCl7cW8obCkmJihsLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGwuc2VhcmNoUmVzdWx0Q2xhc3MpLGwucXVlcnlNZXRob2QmJnRoaXMuc2V0UXVlcnlNZXRob2QobC5xdWVyeU1ldGhvZCksbC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFjayhsLmNh''@;'; put 'put ''bGxiYWNrKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcjZlKGMsbCxhLGQsaCxmKXtjb25zdCB2PWYuY2xhc3NOYW1lfHxbXTtsZXQgTT1bXTsic3RyaW5nIj09dHlwZW9mIHY/TT12LnNwbGl0KCIgIik6TS5wdXNoKC4uLnYpLHRoaXMuaXNFbmFibGVkKCkmJmYuaXNT''@;'; put 'put ''ZWFyY2hSZXN1bHQ/TS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKXx8TS5wdXNoKGAke3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9YCk6TS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSYmTS5zcGxpY2UoTS5pbmRleE9mKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpLDEp''@;'; put 'put ''LGYuY2xhc3NOYW1lPU0uam9pbigiICIpfWZ1bmN0aW9uIFVIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gV2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpNmV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7VUgodGhpcywidmlld3BvcnRXaWR0aCIsdm9pZCAwKSxVSCh0aGlzLCJvdmVyd3JpdGVDb2x1bW5XaWR0aEZuIix2b2lkIDApLFVIKHRoaXMsImJhc2VXaWR0aHMiLG5ldyBNYXApLFVIKHRoaXMsInN0cmV0Y2hlZFdpZHRocyIsbmV3IE1hcCksdGhpcy5vdmVyd3JpdGVDb2x1''@;'; put 'put ''bW5XaWR0aEZuPWx9cHJlcGFyZShsKXtsZXR7dmlld3BvcnRXaWR0aDphfT1sO3RoaXMudmlld3BvcnRXaWR0aD1hLHRoaXMuYmFzZVdpZHRocy5jbGVhcigpLHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCl9c2V0Q29sdW1uQmFzZVdpZHRoKGwsYSl7dGhpcy5iYXNlV2lkdGhzLnNldChs''@;'; put 'put ''LGEpfWNhbGN1bGF0ZSgpe31nZXRXaWR0aHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN0cmV0Y2hlZFdpZHRocyl9fWNsYXNzIFlndCBleHRlbmRzIGk2ZXtjYWxjdWxhdGUoKXtjb25zdCBsPUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKGNlLGJlKT0+e2xldFssRWVd''@;'; put 'put ''PWJlO3JldHVybiBjZStFZX0sMCk7aWYodGhpcy52aWV3cG9ydFdpZHRoLWw8MClyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IGQ9dGhpcy52aWV3cG9ydFdpZHRoL2wsaD1bXSxmPVtdO2xldCB2PXRoaXMudmlld3BvcnRXaWR0aCxNPTA7aWYodGhpcy5i''@;'; put 'put ''YXNlV2lkdGhzLmZvckVhY2goKGNlLGJlKT0+e2NvbnN0IEVlPU1hdGgucm91bmQoY2UqZCksQmU9dGhpcy5vdmVyd3JpdGVDb2x1bW5XaWR0aEZuKEVlLGJlKTtFZT09PUJlJiZFZT49X18/KGgucHVzaChbYmUsQmVdKSxNKz1CZSk6RWUhPT1CZSYmKGgucHVzaChbYmUsQmVdKSxmLnB1c2go''@;'; put 'put ''YmUpLHYtPUJlKX0pLHY8PV9fKXJldHVybiB2b2lkIHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgRD12L007bGV0IFo9LTEscmU9MDtoLmZvckVhY2goKGNlLGJlKT0+e2xldFtFZSxCZV09Y2UscWU9QmU7Zi5pbmNsdWRlcyhFZSl8fChxZT1NYXRoLnJvdW5kKEJlKkQpKSx0''@;'; put 'put ''aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoRWUscWUpLFo9RWUsYmU8aC5sZW5ndGgtMSYmKHJlKz1xZSl9KSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5zaXplPjEmJnRoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChaLE1hdGgucm91bmQodGhpcy52aWV3cG9ydFdpZHRoLXJlKSl9fWZ1bmN0aW9uIGE2''@;'; put 'put ''ZShjLGwsYSl7KGZ1bmN0aW9uIEdndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcGVlKGMsbCl7cmV0''@;'; put 'put ''dXJuIGMuZ2V0KG82ZShjLGwpKX1mdW5jdGlvbiBaSChjLGwsYSl7cmV0dXJuIGMuc2V0KG82ZShjLGwpLGEpLGF9ZnVuY3Rpb24gbzZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgV0g9bmV3IFdlYWtNYXAsd0E9bmV3IFdlYWtNYXA7Y2xhc3MgJGd0IGV4dGVuZHMgaTZle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxhNmUodGhpcyxXSCwwKSxh''@;'; put 'put ''NmUodGhpcyx3QSwtMSl9cHJlcGFyZShsKXtzdXBlci5wcmVwYXJlKGwpLFpIKFdILHRoaXMsMCksWkgod0EsdGhpcywtMSl9c2V0Q29sdW1uQmFzZVdpZHRoKGwsYSl7c3VwZXIuc2V0Q29sdW1uQmFzZVdpZHRoKGwsYSksWkgod0EsdGhpcyxsKSxaSChXSCx0aGlzLGEpfWNhbGN1bGF0ZSgp''@;'; put 'put ''e2lmKC0xPT09cGVlKHdBLHRoaXMpKXJldHVybjtjb25zdCBsPUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKGQsaCk9PntsZXRbLGZdPWg7cmV0dXJuIGQrZn0sMCksYT1NYXRoLm1heCh0aGlzLnZpZXdwb3J0V2lkdGgtbCtwZWUoV0gsdGhpcyksMCk7dGhpcy5zdHJldGNo''@;'; put 'put ''ZWRXaWR0aHMuc2V0KHBlZSh3QSx0aGlzKSxhKX19ZnVuY3Rpb24gWUgoYyxsLGEpe3M2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gczZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBmdShjLGwpe3JldHVybiBjLmdldChidyhjLGwpKX1mdW5jdGlvbiBnZWUoYyxsLGEpe3JldHVybiBjLnNldChidyhjLGwpLGEpLGF9ZnVuY3Rpb24gYncoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBNMT1uZXcgV2Vha01hcCx5dz1uZXcgV2Vha01hcCxtZWU9bmV3IFdlYWtNYXAsR0g9bmV3IFdlYWtNYXAsQ0E9''@;'; put 'put ''bmV3IFdlYWtTZXQ7Y2xhc3MgWGd0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBLZ3QoYyxsKXtzNmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsQ0EpLFlIKHRoaXMsTTEsdm9pZCAwKSxZSCh0aGlzLHl3LHZvaWQgMCksWUgodGhpcyxtZWUsbmV3IE1hcChbWyJhbGwiLG5ldyBZZ3QoYncoQ0Es''@;'; put 'put ''dGhpcyxsNmUpLmJpbmQodGhpcykpXSxbImxhc3QiLG5ldyAkZ3QoYncoQ0EsdGhpcyxsNmUpLmJpbmQodGhpcykpXV0pKSxZSCh0aGlzLEdILCJub25lIiksZ2VlKE0xLHRoaXMsbCksZ2VlKHl3LHRoaXMsZnUoTTEsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJ''@;'; put 'put ''bmRleE1hcCgic3RyZXRjaENvbHVtbnMiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpKX11c2VTdHJhdGVneShsKXtnZWUoR0gsdGhpcyxmdShtZWUsdGhpcykuaGFzKGwpP2w6Im5vbmUiKX1yZWZyZXNoU3RyZXRjaGluZygpeyJub25lIiE9PWZ1KEdILHRoaXMpP2Z1KE0xLHRoaXMpLmJhdGNo''@;'; put 'put ''RXhlY3V0aW9uKCgpPT57ZnUoeXcsdGhpcykuY2xlYXIoKTtjb25zdCBsPWZ1KG1lZSx0aGlzKS5nZXQoZnUoR0gsdGhpcykpO2xldCBkPWZ1KE0xLHRoaXMpLnZpZXcuZ2V0Vmlld3BvcnRXaWR0aCgpO2J3KENBLHRoaXMsSmd0KS5jYWxsKHRoaXMpJiYoZC09ZjAoZnUoTTEsdGhpcykucm9v''@;'; put 'put ''dERvY3VtZW50KSksbC5wcmVwYXJlKHt2aWV3cG9ydFdpZHRoOmR9KTtmb3IobGV0IGg9MDtoPGZ1KE0xLHRoaXMpLmNvdW50Q29scygpO2grKylmdShNMSx0aGlzKS5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmdShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGgpKXx8bC5zZXRDb2x1''@;'; put 'put ''bW5CYXNlV2lkdGgoaCxidyhDQSx0aGlzLFFndCkuY2FsbCh0aGlzLGgpKTtsLmNhbGN1bGF0ZSgpLGwuZ2V0V2lkdGhzKCkuZm9yRWFjaChoPT57bGV0W2Ysdl09aDtmdSh5dyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZnUoTTEsdGhpcykudG9QaHlzaWNhbENvbHVtbihmKSx2KX0pfSwhMCk6''@;'; put 'put ''ZnUoeXcsdGhpcykuY2xlYXIoKX1nZXRTdHJldGNoZWRXaWR0aChsKXtyZXR1cm4gZnUoeXcsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGZ1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4obCkpfX1mdW5jdGlvbiBKZ3QoKXtjb25zdHt2aWV3OmN9PWZ1KE0xLHRoaXMpO2lmKGMuaXNWZXJ0aWNh''@;'; put 'put ''bGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpcmV0dXJuITE7Y29uc3QgbD1jLmdldFZpZXdwb3J0SGVpZ2h0KCksYT1mdShNMSx0aGlzKS5jb3VudFJvd3MoKSxkPWMuZ2V0U3R5bGVzSGFuZGxlcigpLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaD0wLGY9ITE7Zm9yKGxldCBNPTA7TTxhO00r''@;'; put 'put ''Kyl7dmFyIHY7aWYoaCs9KG51bGwhPT0odj1mdShNMSx0aGlzKS5nZXRSb3dIZWlnaHQoTSkpJiZ2b2lkIDAhPT12P3Y6ZCkrKDA9PT1NPzE6MCksaD5sKXtmPSEwO2JyZWFrfX1yZXR1cm4gZn1mdW5jdGlvbiBRZ3QoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1mdShNMSx0aGlzKS5nZXRD''@;'; put 'put ''b2xXaWR0aChjLCJTdHJldGNoQ29sdW1ucyIpKSYmdm9pZCAwIT09bD9sOl9ffWZ1bmN0aW9uIGw2ZShjLGwpe3JldHVybiBmdShNMSx0aGlzKS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixjLGwpfWZ1bmN0aW9uIHZlZShjLGwsYSl7YzZlKGMsbCksbC5zZXQoYyxh''@;'; put 'put ''KX1mdW5jdGlvbiBjNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGJlZShjLGwsYSl7cmV0dXJuIGMuc2V0KCRIKGMsbCksYSksYX1m''@;'; put 'put ''dW5jdGlvbiBLZyhjLGwpe3JldHVybiBjLmdldCgkSChjLGwpKX1mdW5jdGlvbiAkSChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIF93PW5ldyBXZWFrTWFwLEtIPW5ldyBXZWFrTWFwLFNBPW5ldyBXZWFrTWFwLHllZT1uZXcgV2Vha1NldDtjbGFzcyByNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZTV0KGMs''@;'; put 'put ''bCl7YzZlKGMsbCksbC5hZGQoYyl9KHRoaXMseWVlKSx2ZWUodGhpcyxfdyxuZXcgWGd0KHRoaXMuaG90KSksdmVlKHRoaXMsS0gsbnVsbCksdmVlKHRoaXMsU0EsbmV3IFJlc2l6ZU9ic2VydmVyKGw9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgYTtudWxsIT09KGE9dGhpcy5o''@;'; put 'put ''b3QpJiZ2b2lkIDAhPT1hJiZhLnZpZXcuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmbC5mb3JFYWNoKGQ9PntsZXR7Y29udGVudFJlY3Q6aH09ZDtudWxsIT09S2coS0gsdGhpcykmJktnKEtILHRoaXMpIT09aC53aWR0aCYmKHRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25z''@;'; put 'put ''KCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSksYmVlKEtILHRoaXMsaC53aWR0aCl9KX0pfSkpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJzdHJldGNoQ29sdW1ucyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTU1fXN0YXRpYyBnZXQg''@;'; put 'put ''U0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuWyJhbGwiLCJsYXN0Il0uaW5jbHVkZXModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChLZyhfdyx0aGlzKS51c2VTdHJhdGVneSh0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxLZyhTQSx0aGlzKS5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gJEgoeWVlLGwsYTV0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRz''@;'; put 'put ''W2hdO3JldHVybiAkSCh5ZWUsbCxpNXQpLmNhbGwobCwuLi5kKX0sMTApLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtLZyhfdyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLEtnKFNBLHRoaXMpLnVub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIEtnKF93LHRoaXMpLmdldFN0cmV0Y2hlZFdpZHRoKGwpfWRlc3Ryb3koKXtLZyhTQSx0aGlzKS5kaXNjb25uZWN0''@;'; put 'put ''KCksYmVlKFNBLHRoaXMsbnVsbCksYmVlKF93LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBpNXQoYyxsLGEpe2lmKGE9PT10aGlzLnBsdWdpbk5hbWUpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChsKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQ/ZDpj''@;'; put 'put ''fWZ1bmN0aW9uIGE1dChjKXtjJiZLZyhfdyx0aGlzKS5yZWZyZXNoU3RyZXRjaGluZygpfWZ1bmN0aW9uIHFIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsNXQoYyl7dmFyIGw9ZnVuY3Rpb24gYzV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31mdW5jdGlvbiBfZWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj''@;'; put 'put ''dCIpfXZhciBYSD1uZXcgV2Vha1NldDtjbGFzcyBoNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzV0KGMsbCl7KGZ1bmN0aW9uIHM1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFhIKSxxSCh0aGlzLCJzY3JvbGxiYXJzIixbXSkscUgodGhpcywiY2xvbmVzIixbXSkscUgodGhpcywibG9ja2VkQ29sbGVjdGlvbiIsITEpLHFIKHRoaXMsImZyZWV6''@;'; put 'put ''ZU92ZXJsYXlzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm4gUiQoKX1lbmFibGVQ''@;'; put 'put ''bHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9Pl9lZShYSCx0aGlzLGY1dCkuY2FsbCh0aGlzKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rp''@;'; put 'put ''b249ITEsc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT5fZWUoWEgsdGhpcyxwNXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJNb21lbnR1bVNjcm9sbCIsKCk9Pl9lZShYSCx0aGlzLGc1dCkuY2FsbCh0aGlzKSl9fWZ1bmN0aW9uIGY1dCgpe2lmKHRoaXMubG9ja2VkQ29sbGVjdGlvbilyZXR1cm47Y29uc3R7dG9wT3ZlcmxheTpjLGJvdHRvbU92ZXJsYXk6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx0b3BJbmxpbmVT''@;'; put 'put ''dGFydENvcm5lck92ZXJsYXk6ZCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5czt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITAsdGhpcy5zY3JvbGxiYXJzLmxlbmd0aD0wLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGMpLGwuY2xvbmUm''@;'; put 'put ''JnRoaXMuc2Nyb2xsYmFycy5wdXNoKGwpLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGEpLGQmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGQpLGgmJmguY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGgpLHRoaXMuY2xvbmVzPVtdLGMubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYy5j''@;'; put 'put ''bG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksYS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVu''@;'; put 'put ''dE5vZGUpLGQmJnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZoLmNsb25lJiZ0aGlzLmNsb25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSl9ZnVuY3Rpb24gcDV0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMCxZ''@;'; put 'put ''bih0aGlzLmNsb25lcyxjPT57VGkoYywiaGlkZS10d2VlbiIpfSl9ZnVuY3Rpb24gZzV0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxZbih0aGlzLmNsb25lcyxjPT57bG8oYywiaGlkZS10d2VlbiIpLFRpKGMsInNob3ctdHdlZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9''@;'; put 'put ''PntZbih0aGlzLmNsb25lcyxjPT57bG8oYywic2hvdy10d2VlbiIpfSl9LDQwMCksWW4odGhpcy5zY3JvbGxiYXJzLGM9PntjLnJlZnJlc2goKSxjLnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpfWNvbnN0''@;'; put 'put ''IEpIPSJ0cmltUm93cyI7dmFyIHU2ZT1uZXcgV2Vha1NldDtjbGFzcyBTNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbTV0KGMsbCl7KGZ1bmN0aW9uIHY1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v''@;'; put 'put ''dCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHU2ZSksZnVuY3Rpb24gYjV0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5NXQoYyl7dmFyIGw9ZnVuY3Rpb24gXzV0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidHJpbW1lZFJvd3NNYXAiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBKSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMzB9aXNFbmFibGVkKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0pIXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IHFFKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiaW5pdCIsKCk9PmZ1bmN0aW9uIHc1dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMg''@;'; put 'put ''b2JqZWN0Iil9KHU2ZSx0aGlzLE01dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKSF07QXJyYXkuaXNBcnJheShsKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLnRyaW1t''@;'; put 'put ''ZWRSb3dzTWFwLmNsZWFyKCksWW4obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIpLHN1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRUcmltbWVkUm93cygpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCl9dHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1B''@;'; put 'put ''cnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleCh2LCEwKX0p''@;'; put 'put ''fSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVHJpbVJvdyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX10cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy50cmltUm93cyhh''@;'; put 'put ''KX11bnRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj10aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihZbihsLEQ9PntmW0RdPSExfSks''@;'; put 'put ''aD1xdShmLChELFoscmUpPT4oWiYmRC5wdXNoKHJlKSxEKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJnYpJiYoZCYmdiYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW50cmltUm93''@;'; put 'put ''IixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmltUm93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJp''@;'; put 'put ''bW1lZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+TnVtYmVyLmlz''@;'; put 'put ''SW50ZWdlcihkKSYmZD49MCYmZDxhKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBNNXQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbSkhdO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4oYyxsPT57dGhpcy50cmlt''@;'; put 'put ''bWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgobCwhMCl9KX0sITApfWNsYXNzIHRme2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB4NXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEU1dChjKXt2YXIgbD1mdW5jdGlvbiBUNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywiYWN0aW9uVHlwZSIsIiIpLHRoaXMuYWN0aW9uVHlwZT1sfXVuZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfXJlZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBRSChj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQTV0KGMpe3ZhciBsPWZ1bmN0aW9uIGs1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd2VlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e3N0YXRlQmVmb3JlOmEs''@;'; put 'put ''cmFuZ2U6ZCx0eXBlOmgsYWxpZ25tZW50OmZ9PWw7c3VwZXIoImNlbGxfYWxpZ25tZW50IiksUUgodGhpcywic3RhdGVCZWZvcmUiLHZvaWQgMCksUUgodGhpcywicmFuZ2UiLHZvaWQgMCksUUgodGhpcywidHlwZSIsdm9pZCAwKSxRSCh0aGlzLCJhbGlnbm1lbnQiLHZvaWQgMCksdGhpcy5z''@;'; put 'put ''dGF0ZUJlZm9yZT1hLHRoaXMucmFuZ2U9ZCx0aGlzLnR5cGU9aCx0aGlzLmFsaWdubWVudD1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDZWxsQWxpZ25tZW50IiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pm5ldyB3ZWUoe3N0YXRlQmVmb3Jl''@;'; put 'put ''OmQscmFuZ2U6aCx0eXBlOmYsYWxpZ25tZW50OnZ9KSl9KX11bmRvKGwsYSl7WW4odGhpcy5yYW5nZSxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiZsLnNldENlbGxNZXRhKGgsZiwiY2xhc3NOYW1lIix0aGlzLnN0YXRlQmVmb3JlW2hdW2ZdfHwiIGh0TGVmdCIpfSl9KSxsLmFk''@;'; put 'put ''ZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9cmVkbyhsLGEpe0ptKHRoaXMucmFuZ2UsdGhpcy50eXBlLHRoaXMuYWxpZ25tZW50LChkLGgpPT5sLmdldENlbGxNZXRhKGQsaCksKGQsaCxmLHYpPT5sLnNldENlbGxNZXRhKGQsaCxmLHYpKSxsLmFkZEhvb2tPbmNl''@;'; put 'put ''KCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9fWZ1bmN0aW9uIGQ2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRDV0KGMpe3ZhciBsPWZ1bmN0aW9uIEk1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mg''@;'; put 'put ''Q2VlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2NvbHVtbnM6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoImNvbF9tb3ZlIiksZDZlKHRoaXMsImNvbHVtbnMiLHZvaWQgMCksZDZlKHRoaXMsImZpbmFsQ29sdW1uSW5kZXgiLHZvaWQgMCksdGhpcy5jb2x1bW5zPWEuc2xpY2UoKSx0''@;'; put 'put ''aGlzLmZpbmFsQ29sdW1uSW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+bmV3IENlZSh7Y29sdW1uczpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25z''@;'; put 'put ''dCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxFUSh0aGlzLmNvbHVtbnMsdGhpcy5maW5hbENvbHVtbkluZGV4LGwuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JF''@;'; put 'put ''YWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7djxNJiYoTS09MSksZC5tb3ZlQ29sdW1uKE0sdil9KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1uc1swXSx0aGlzLmNvbHVtbnNbMF0rdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX1yZWRvKGws''@;'; put 'put ''YSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tb3ZlQ29sdW1ucyh0aGlzLmNvbHVtbnMuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1uSW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxs''@;'; put 'put ''LnNlbGVjdENvbHVtbnModGhpcy5maW5hbENvbHVtbkluZGV4LHRoaXMuZmluYWxDb2x1bW5JbmRleCt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfX1mdW5jdGlvbiBoNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFI1dChjKXt2YXIgbD1mdW5jdGlvbiBMNXQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjdXJyZW50U29ydFN0YXRlOmEsbmV3U29ydFN0YXRlOmR9PWw7c3VwZXIoImNvbF9zb3J0IiksaDZlKHRoaXMsInByZXZpb3VzU29ydFN0YXRl''@;'; put 'put ''Iix2b2lkIDApLGg2ZSh0aGlzLCJuZXh0U29ydFN0YXRlIix2b2lkIDApLHRoaXMucHJldmlvdXNTb3J0U3RhdGU9YSx0aGlzLm5leHRTb3J0U3RhdGU9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ29sdW1uU29ydCIsKGQsaCxmKT0+e2Ym''@;'; put 'put ''JmEuZG9uZSgoKT0+bmV3IFNlZSh7Y3VycmVudFNvcnRTdGF0ZTpkLG5ld1NvcnRTdGF0ZTpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxoPWwuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxmPWguaXNFbmFibGVkKCk/aDpkO3Ro''@;'; put 'put ''aXMucHJldmlvdXNTb3J0U3RhdGUubGVuZ3RoP2Yuc29ydCh0aGlzLnByZXZpb3VzU29ydFN0YXRlKTpmLmNsZWFyU29ydCgpLGEoKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiY29sdW1uU29ydGluZyIpLGg9bC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpOyhoLmlz''@;'; put 'put ''RW5hYmxlZCgpP2g6ZCkuc29ydCh0aGlzLm5leHRTb3J0U3RhdGUpLGEoKX19ZnVuY3Rpb24gZjZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPNXQoYyl7dmFyIGw9ZnVuY3Rpb24gUDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY31jbGFzcyBNZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxhbW91bnQ6ZH09bDtzdXBlcigiaW5zZXJ0X2NvbCIpLGY2ZSh0aGlzLCJpbmRleCIsdm9pZCAwKSxmNmUodGhpcywiYW1vdW50Iix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmFtb3VudD1kfXN0''@;'; put 'put ''YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGQsaCxmKT0+e2EuZG9uZSgoKT0+bmV3IE1lZSh7aW5kZXg6ZCxhbW91bnQ6aH0pLGYpfSl9dW5kbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixhKSxsLmFsdGVy''@;'; put 'put ''KCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlQ29sIixhKSxsLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9''@;'; put 'put ''fWZ1bmN0aW9uIHA2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRjV0KGMpe3ZhciBsPWZ1bmN0aW9uIEg1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeGVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0''@;'; put 'put ''e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9yb3ciKSxwNmUodGhpcywiaW5kZXgiLHZvaWQgMCkscDZlKHRoaXMsImFtb3VudCIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJDcmVhdGVSb3ciLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyB4ZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuY291bnRSb3dzKCksaD1sLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzO3RoaXMuaW5kZXg+PWQmJnRoaXMuaW5kZXgtaDxkJiYo''@;'; put 'put ''dGhpcy5pbmRleC09aCksbC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGEpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVSb3ciLGEpLGwuYWx0ZXIoImlu''@;'; put 'put ''c2VydF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gZU4oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE41dChjKXt2YXIgbD1mdW5jdGlvbiBWNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWNsYXNzIEVlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjaGFuZ2VzOmEsc2VsZWN0ZWQ6ZCxjb3VudENvbHM6aCxjb3VudFJvd3M6Zn09bDtzdXBlcigiY2hhbmdlIiksZU4odGhpcywiY2hhbmdlcyIsdm9pZCAwKSxlTih0aGlzLCJzZWxlY3RlZCIs''@;'; put 'put ''dm9pZCAwKSxlTih0aGlzLCJjb3VudENvbHMiLHZvaWQgMCksZU4odGhpcywiY291bnRSb3dzIix2b2lkIDApLHRoaXMuY2hhbmdlcz1hLHRoaXMuc2VsZWN0ZWQ9ZCx0aGlzLmNvdW50Q29scz1oLHRoaXMuY291bnRSb3dzPWZ9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXts''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsZnVuY3Rpb24oZCxoKXtjb25zdCBmPWQmJmQubGVuZ3RoO2YmJmQuZmluZChEPT57Y29uc3RbLCxaLHJlXT1EO3JldHVybiBaIT09cmV9KSYmYS5kb25lKCgpPT57Y29uc3QgRD1kLnJlZHVjZSgocmUsY2UpPT4ocmUucHVzaChbLi4uY2VdKSxyZSks''@;'; put 'put ''W10pO0QuZm9yRWFjaChyZT0+e3JlWzFdPWwucHJvcFRvQ29sKHJlWzFdKX0pO2NvbnN0IFo9Zj4xP3RoaXMuZ2V0U2VsZWN0ZWQoKTpbW0RbMF1bMF0sRFswXVsxXV1dO3JldHVybiBuZXcgRWVlKHtjaGFuZ2VzOkQsc2VsZWN0ZWQ6Wixjb3VudENvbHM6bC5jb3VudENvbHMoKSxjb3VudFJv''@;'; put 'put ''d3M6bC5jb3VudFJvd3MoKX0pfSxoKX0pfXVuZG8obCxhKXtjb25zdCBkPWcxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCB2PTAsTT1kLmxlbmd0aDt2PE07disrKWRbdl0uc3BsaWNlKDMsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGEpLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVs''@;'; put 'put ''bCwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGg9bC5jb3VudFJvd3MoKS10aGlzLmNvdW50Um93cztoPjAmJmwuYWx0ZXIoInJlbW92ZV9yb3ciLG51bGwsaCwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGY9bC5jb3VudENvbHMoKS10aGlzLmNvdW50Q29scztmPjAmJmwuaXNDb2x1bW5Nb2RpZmlj''@;'; put 'put ''YXRpb25BbGxvd2VkKCkmJmwuYWx0ZXIoInJlbW92ZV9jb2wiLG51bGwsZiwiVW5kb1JlZG8udW5kbyIpLGwuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLGwuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9cmVkbyhsLGEpe2NvbnN0IGQ9ZzEodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGg9''@;'; put 'put ''MCxmPWQubGVuZ3RoO2g8ZjtoKyspZFtoXS5zcGxpY2UoMiwxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsYSksbC5zZXREYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRvUmVkby5yZWRvIiksdGhpcy5zZWxlY3RlZCYmbC5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX19''@;'; put 'put ''ZnVuY3Rpb24gZzZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCNXQoYyl7dmFyIGw9ZnVuY3Rpb24gajV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7''@;'; put 'put ''Y29uZGl0aW9uc1N0YWNrOmEscHJldmlvdXNDb25kaXRpb25zU3RhY2s6ZH09bDtzdXBlcigiZmlsdGVyIiksZzZlKHRoaXMsImNvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSxnNmUodGhpcywicHJldmlvdXNDb25kaXRpb25zU3RhY2siLHZvaWQgMCksdGhpcy5jb25kaXRpb25zU3RhY2s9YSx0''@;'; put 'put ''aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUZpbHRlciIsKGQsaCk9PnthLmRvbmUoKCk9Pm5ldyBUZWUoe2NvbmRpdGlvbnNTdGFjazpkLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmh9KSl9''@;'; put 'put ''KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5pbXBvcnRDb25kaXRpb25zKHRoaXMucHJldmlvdXNDb25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVn''@;'; put 'put ''aW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX19Y2xhc3MgQWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2RhdGE6YSxjZWxsUmFuZ2U6ZH09bDtz''@;'; put 'put ''dXBlcigibWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiB6NXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFU1dChjKXt2YXIgbD1mdW5jdGlvbiBaNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZv''@;'; put 'put ''aWQgMCksdGhpcy5jZWxsUmFuZ2U9ZCx0aGlzLmRhdGE9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlTWVyZ2VDZWxscyIsKGQsaCk9PntpZihoKXJldHVybjtjb25zdCBmPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWQuZ2V0Qm90dG9tRW5k''@;'; put 'put ''Q29ybmVyKCksTT1sLmdldERhdGEoZi5yb3csZi5jb2wsdi5yb3csdi5jb2wpO2EuZG9uZSgoKT0+bmV3IEFlZSh7ZGF0YTpNLGNlbGxSYW5nZTpkfSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIi''@;'; put 'put ''LGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheShoLnJvdyxoLmNvbCx0aGlzLmRhdGEsdm9pZCAwLHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8obCxhKXtjb25z''@;'; put 'put ''dCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfX1mdW5jdGlvbiBtNmUoYyxsLGEsZCxoKXtjb25zdCBmPVsidmlzdWFsUm93IiwidmlzdWFsQ29sIiwicm93IiwiY29sIiwi''@;'; put 'put ''cHJvcCJdLHY9Zi5sZW5ndGgsTT1bXTtyZXR1cm4gR2EoZCxoLEQ9PntHYShsLGEsWj0+e2NvbnN0IHJlPWMuZ2V0Q2VsbE1ldGEoWixEKTtpZihPYmplY3Qua2V5cyhyZSkubGVuZ3RoIT09dil7Y29uc3QgY2U9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlKS5maWx0ZXIo''@;'; put 'put ''YmU9PntsZXRbRWVdPWJlO3JldHVybiExPT09Zi5pbmNsdWRlcyhFZSl9KSk7TS5wdXNoKFtyZS52aXN1YWxSb3cscmUudmlzdWFsQ29sLGNlXSl9fSl9KSxNfWZ1bmN0aW9uIHFnKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXNXQoYyl7dmFyIGw9ZnVuY3Rpb24gWTV0KGMsbCl7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2''@;'; put 'put ''ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51''@;'; put 'put ''bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxpbmRleGVzOmQsZGF0YTpoLGFtb3VudDpmLGhlYWRlcnM6dixjb2x1bW5Qb3NpdGlvbnM6TSxyb3dQb3NpdGlvbnM6''@;'; put 'put ''RCxmaXhlZENvbHVtbnNTdGFydDpaLHJlbW92ZWRDZWxsTWV0YXM6cmV9PWw7c3VwZXIoInJlbW92ZV9jb2wiKSxxZyh0aGlzLCJpbmRleCIsdm9pZCAwKSxxZyh0aGlzLCJpbmRleGVzIix2b2lkIDApLHFnKHRoaXMsImRhdGEiLHZvaWQgMCkscWcodGhpcywiYW1vdW50Iix2b2lkIDApLHFn''@;'; put 'put ''KHRoaXMsImhlYWRlcnMiLHZvaWQgMCkscWcodGhpcywiY29sdW1uUG9zaXRpb25zIix2b2lkIDApLHFnKHRoaXMsInJvd1Bvc2l0aW9ucyIsdm9pZCAwKSxxZyh0aGlzLCJmaXhlZENvbHVtbnNTdGFydCIsdm9pZCAwKSxxZyh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMu''@;'; put 'put ''aW5kZXg9YSx0aGlzLmluZGV4ZXM9ZCx0aGlzLmRhdGE9aCx0aGlzLmFtb3VudD1mLHRoaXMuaGVhZGVycz12LHRoaXMuY29sdW1uUG9zaXRpb25zPU0uc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9RC5zbGljZSgwKSx0aGlzLmZpeGVkQ29sdW1uc1N0YXJ0PVosdGhpcy5yZW1vdmVkQ2Vs''@;'; put 'put ''bE1ldGFzPXJlfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC5nZXRTb3VyY2VEYXRhQXJyYXkoKSxaPShsLmNvdW50Q29scygpK2QpJWwuY291bnRDb2xzKCkscmU9''@;'; put 'put ''WitoLTEsY2U9W10sYmU9W10sRWU9W107cmV0dXJuIEdhKEQubGVuZ3RoLTEsQmU9Pntjb25zdCBxZT1bXSxydD1EW0JlXTtHYShaLHJlLHB0PT57cWUucHVzaChydFtsLnRvUGh5c2ljYWxDb2x1bW4ocHQpXSl9KSxjZS5wdXNoKHFlKX0pLEdhKGgtMSxCZT0+e0VlLnB1c2gobC50b1BoeXNp''@;'; put 'put ''Y2FsQ29sdW1uKForQmUpKX0pLEFycmF5LmlzQXJyYXkobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZHYShoLTEsQmU9PntiZS5wdXNoKGwuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2wudG9QaHlzaWNhbENvbHVtbihaK0JlKV18fG51bGwpfSksbmV3IGtlZSh7aW5kZXg6WixpbmRl''@;'; put 'put ''eGVzOkVlLGRhdGE6Y2UsYW1vdW50OmgsaGVhZGVyczpiZSxjb2x1bW5Qb3NpdGlvbnM6bC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyb3dQb3NpdGlvbnM6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxmaXhlZENvbHVtbnNTdGFydDpsLmdl''@;'; put 'put ''dFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQscmVtb3ZlZENlbGxNZXRhczptNmUobCwwLGwuY291bnRSb3dzKCksWixyZSl9KX0sdil9KX11bmRvKGwsYSl7bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgaD10aGlzLmlu''@;'; put 'put ''ZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGY9KHJlLGNlLGJlKT0+YmVbdGhpcy5pbmRleGVzLmluZGV4T2YoaFtjZV0pXSx2PXRoaXMuZGF0YS5sZW5ndGgsTT1bXTtmb3IobGV0IHJlPTA7cmU8djtyZSsrKU0ucHVzaCh5cyh0aGlzLmRhdGFbcmVdLGYpKTtjb25zdCBEPXlzKHRoaXMuaGVhZGVy''@;'; put 'put ''cyxmKSxaPVtdO2wuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRpb25zKSxsLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0IixsLnRvVmlzdWFsQ29sdW1uKHRoaXMuaW5kZXhlc1swXSksdGhpcy5pbmRleGVzLmxlbmd0aCwiVW5kb1JlZG8udW5k''@;'; put 'put ''byIpLGwuYmF0Y2hFeGVjdXRpb24oKCk9PntsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0aW9ucyksbC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksWW4obC5nZXRTb3VyY2VEYXRh''@;'; put 'put ''QXJyYXkoKSwocmUsY2UpPT57WW4oaCwoYmUsRWUpPT57cmVbYmVdPU1bY2VdW0VlXSxaLnB1c2goW2NlLGJlLHJlW2JlXV0pfSl9KSx0eXBlb2YgdGhpcy5oZWFkZXJzPCJ1IiYmWW4oRCwocmUsY2UpPT57bC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbaFtjZV1dPXJlfSksdGhpcy5yZW1v''@;'; put 'put ''dmVkQ2VsbE1ldGFzLmZvckVhY2gocmU9PntsZXRbY2UsYmUsRWVdPXJlO2wuc2V0Q2VsbE1ldGFPYmplY3QoY2UsYmUsRWUpfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENlbGwoWixudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRv''@;'; put 'put ''KGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gd3coYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEc1dChjKXt2YXIgbD1mdW5jdGlvbiAkNXQo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIERlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGRhdGE6ZCxmaXhlZFJvd3NCb3R0b206aCxmaXhlZFJvd3NUb3A6Zixyb3dJbmRleGVzU2VxdWVu''@;'; put 'put ''Y2U6dixyZW1vdmVkQ2VsbE1ldGFzOk19PWw7c3VwZXIoInJlbW92ZV9yb3ciKSx3dyh0aGlzLCJpbmRleCIsdm9pZCAwKSx3dyh0aGlzLCJkYXRhIix2b2lkIDApLHd3KHRoaXMsImZpeGVkUm93c0JvdHRvbSIsdm9pZCAwKSx3dyh0aGlzLCJmaXhlZFJvd3NUb3AiLHZvaWQgMCksd3codGhp''@;'; put 'put ''cywicm93SW5kZXhlc1NlcXVlbmNlIix2b2lkIDApLHd3KHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuZGF0YT1kLHRoaXMuZml4ZWRSb3dzQm90dG9tPWgsdGhpcy5maXhlZFJvd3NUb3A9Zix0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT12LHRoaXMu''@;'; put 'put ''cmVtb3ZlZENlbGxNZXRhcz1NfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC50b1BoeXNpY2FsUm93KGQpLFo9RCtoLTEscmU9ZzEobC5nZXRTb3VyY2VEYXRhKEQs''@;'; put 'put ''MCxEK2gtMSxsLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IERlZSh7aW5kZXg6RCxkYXRhOnJlLGZpeGVkUm93c0JvdHRvbTpsLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGZpeGVkUm93c1RvcDpsLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLHJvd0luZGV4ZXNT''@;'; put 'put ''ZXF1ZW5jZTpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJlbW92ZWRDZWxsTWV0YXM6bTZlKGwsRCxaLDAsbC5jb3VudENvbHMoKS0xKX0pfSx2KX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0U2V0dGluZ3MoKSxoPVtdO2QuZml4ZWRSb3dzQm90dG9tPXRoaXMuZml4''@;'; put 'put ''ZWRSb3dzQm90dG9tLGQuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChmLHYpPT57T2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57Y29uc3QgRD1wYXJzZUludChNLDEwKTtoLnB1c2goW3RoaXMuaW5kZXgrdixpc05hTihEKT9NOkQsZltNXV0pfSl9''@;'; put 'put ''KSxsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksbC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsbC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5yb3dJbmRleE1hcHBl''@;'; put 'put ''ci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKGY9PntsZXRbdixNLERdPWY7bC5zZXRDZWxsTWV0YU9iamVjdCh2LE0sRCl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291''@;'; put 'put ''cmNlRGF0YUF0Q2VsbChoLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigicmVtb3ZlX3JvdyIsbC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby5yZWRv''@;'; put 'put ''Iil9fWZ1bmN0aW9uIHY2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSzV0KGMpe3ZhciBsPWZ1bmN0aW9uIHE1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChj''@;'; put 'put ''LGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7''@;'; put 'put ''cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgSWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''bGV0e3Jvd3M6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoInJvd19tb3ZlIiksdjZlKHRoaXMsInJvd3MiLHZvaWQgMCksdjZlKHRoaXMsImZpbmFsUm93SW5kZXgiLHZvaWQgMCksdGhpcy5yb3dzPWEuc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3Rlcmlu''@;'; put 'put ''Z0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+bmV3IEllZSh7cm93czpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0''@;'; put 'put ''ZXJWaWV3UmVuZGVyIixhKSxFUSh0aGlzLnJvd3MsdGhpcy5maW5hbFJvd0luZGV4LGwucm93SW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JFYWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7djxNJiYoTS09MSksZC5tb3ZlUm93KE0sdil9KSxsLnJlbmRl''@;'; put 'put ''cigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMucm93c1swXSx0aGlzLnJvd3NbMF0rdGhpcy5yb3dzLmxlbmd0aC0xKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5t''@;'; put 'put ''b3ZlUm93cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5maW5hbFJvd0luZGV4LHRoaXMuZmluYWxSb3dJbmRleCt0aGlzLnJvd3MubGVuZ3RoLTEpfX1jbGFzcyBSZWUgZXh0ZW5kcyB0''@;'; put 'put ''Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJhbmdlOmF9PWw7c3VwZXIoInVubWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiBYNXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEo1dChjKXt2YXIgbD1mdW5jdGlvbiBRNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChkLGgpPT57aHx8YS5kb25lKCgpPT5uZXcgUmVlKHtjZWxsUmFu''@;'; put 'put ''Z2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7''@;'; put 'put ''bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCksbC5yZW5kZXIoKX19ZnVuY3Rpb24gTGVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBybXQoYyl7dmFyIGw9ZnVuY3Rpb24gaW10KGMsbCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPZWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5kbyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSZWRvIiksU2EuZ2V0U2lu''@;'; put 'put ''Z2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUmVkbyIpO2NvbnN0IHk2ZT1uZXcgU2V0O3ZhciB0Tj1uZXcgV2Vha1NldDtjbGFzcyBzbXQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idW5kb1JlZG8ifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJu''@;'; put 'put ''IDFlM31zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHRtdChjLGwpeyhmdW5jdGlvbiBubXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2''@;'; put 'put ''YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyx0TiksTGVlKHRoaXMsImRvbmVBY3Rpb25zIixbXSksTGVlKHRoaXMsInVuZG9uZUFjdGlvbnMiLFtdKSxMZWUodGhpcywiaWdub3JlTmV3QWN0aW9ucyIsITEpLGZ1bmN0aW9uIGVtdChjLGwp''@;'; put 'put ''e1t3ZWUsQ2VlLFNlZSxNZWUseGVlLEVlZSxUZWUsQWVlLGtlZSxEZWUsSWVlLFJlZV0uZm9yRWFjaChhPT5hLnN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoYyxsKSl9KGwsdGhpcyl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnVuZG99ZW5hYmxlUGx1Z2luKCl7''@;'; put 'put ''dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBPZWUodE4sbCxsbXQpLmNhbGwobCwu''@;'; put 'put ''Li5kKX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxPZWUodE4sdGhpcyxjbXQpLmNhbGwodGhpcyksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5jbGVhcigpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLE9lZSh0''@;'; put 'put ''Tix0aGlzLHVtdCkuY2FsbCh0aGlzKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtr''@;'; put 'put ''ZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6Zj0+IWYuYWx0S2V5LGdyb3VwOiJ1bmRvUmVkbyJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hv''@;'; put 'put ''cnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoInVuZG9SZWRvIil9ZG9uZShsLGEpe2lmKHRoaXMuaWdub3JlTmV3QWN0aW9uc3x8IlVuZG9SZWRvLnVuZG8iPT09YXx8IlVuZG9SZWRvLnJlZG8iPT09YXx8ImF1dG8iPT09YSlyZXR1cm47''@;'; put 'put ''Y29uc3QgaD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixoLGEpKXJldHVybjtjb25zdCB2PWwoKSxNPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaCh2KSx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGgsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixNKSx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVk''@;'; put 'put ''b1N0YWNrQ2hhbmdlIixNLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX11bmRvKCl7aWYoIXRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGwpO2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGwsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPWcxKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG8iLGQpKXJldHVybjt0aGlz''@;'; put 'put ''Lmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixmKSxhLnVuZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy51bmRvbmVBY3Rpb25z''@;'; put 'put ''LnB1c2goYSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG8iLGQpfXJlZG8oKXtpZighdGhpcy5pc1JlZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10''@;'; put 'put ''aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGwsdGhpcy51bmRvbmVBY3Rpb25z''@;'; put 'put ''LnNsaWNlKCkpO2NvbnN0IGQ9ZzEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkbyIsZCkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBmPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNr''@;'; put 'put ''Q2hhbmdlIixmKSxhLnJlZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixmLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImFmdGVyUmVkbyIsZCl9aXNVbmRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9aXNSZWRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg+MH1jbGVhcigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51''@;'; put 'put ''bmRvbmVBY3Rpb25zLmxlbmd0aD0wfWRlc3Ryb3koKXt0aGlzLmNsZWFyKCksdGhpcy5kb25lQWN0aW9ucz1udWxsLHRoaXMudW5kb25lQWN0aW9ucz1udWxsLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbG10KGMsbCl7ImxvYWREYXRhIj09PWwmJnRoaXMuY2xlYXIoKX1mdW5jdGlvbiBj''@;'; put 'put ''bXQoKXtjb25zdCBjPWw9Pnt5NmUuaGFzKGwpfHwoaWwoZ2xgVGhlICIke2x9IiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgaXQgd2lsbCBiZSByZW1vdmVkXHgyMAogICAgICAgICAgZnJvbSB0aGUgQ29yZSBBUEkgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kIGZyb20g''@;'; put 'put ''dGhlIFVuZG9SZWRvIHBsdWdpblx4MjAKICAgICAgICAgIChlLmcuIFxgaG90SW5zdGFuY2UuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLiR7bH0oKVxgKS5gKSx5NmUuYWRkKGwpKX07dGhpcy5ob3QudW5kbz0oKT0+e2MoInVuZG8iKSx0aGlzLnVuZG8oKX0sdGhpcy5ob3QucmVkbz0oKT0+e2Mo''@;'; put 'put ''InJlZG8iKSx0aGlzLnJlZG8oKX0sdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlPSgpPT4oYygiaXNVbmRvQXZhaWxhYmxlIiksdGhpcy5pc1VuZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlPSgpPT4oYygiaXNSZWRvQXZhaWxhYmxlIiksdGhpcy5pc1JlZG9BdmFpbGFi''@;'; put 'put ''bGUoKSksdGhpcy5ob3QuY2xlYXJVbmRvPSgpPT57YygiY2xlYXIiKSx0aGlzLmNsZWFyKCl9LHRoaXMuaG90LnVuZG9SZWRvPXRoaXN9ZnVuY3Rpb24gdW10KCl7ZGVsZXRlIHRoaXMuaG90LnVuZG8sZGVsZXRlIHRoaXMuaG90LnJlZG8sZGVsZXRlIHRoaXMuaG90LmlzVW5kb0F2YWlsYWJs''@;'; put 'put ''ZSxkZWxldGUgdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSB0aGlzLmhvdC5jbGVhclVuZG8sZGVsZXRlIHRoaXMuaG90LnVuZG9SZWRvfWZ1bmN0aW9uIG5OKCl7KGZ1bmN0aW9uIE9hdCgpe0hkKGtfKSxIZChIWCksSGQoQnBlKSxIZCgkcGUpLEhkKEtwZSksSGQoUlgpLEhkKHFw''@;'; put 'put ''ZSksSGQoWHBlKSxIZChRcGUpLEhkKGE5KSxIZChlNGUpfSkoKSxmdW5jdGlvbiByc3QoKXtJaChJXyksSWgob1QpLEloKCRYKSxJaChHWCksSWgocVgpLEloKFlYKSxJaChhSiksSWgob0opLEloKHNKKSxJaChBZyksSWgobEopfSgpLGZ1bmN0aW9uIGRzdCgpe1k3KGNUKSxZNyhjSiksWTco''@;'; put 'put ''S1ApLFk3KHVKKSxZNyhxUCl9KCksZnVuY3Rpb24gQ3N0KCl7RzIoaHN0KSxHMihmc3QpLEcyKGdzdCksRzIobXN0KSxHMih2c3QpLEcyKGJzdCksRzIoeXN0KSxHMihfc3QpLEcyKElwZSksRzIod3N0KX0oKSxmdW5jdGlvbiBkbXQoKXtQcyhkVCksUHModGx0KSxQcyhwVCksUHMoT2x0KSxQ''@;'; put 'put ''cyh6bHQpLFBzKGFnZSksUHMoTmN0KSxQcyh1dXQpLFBzKERGKSxQcyhJMHQpLFBzKHIxdCksUHMoZDF0KSxQcyhORiksUHMocTF0KSxQcygkaHQpLFBzKGsydCksUHMobmZ0KSxQcyhwZnQpLFBzKEVmdCksUHMoQmZ0KSxQcyhxZnQpLFBzKHYzdCksUHMoRTN0KSxQcyh1cHQpLFBzKHpwdCks''@;'; put 'put ''UHMoR3B0KSxQcyhfNHQpLFBzKHVndCksUHMoT2d0KSxQcyhVZ3QpLFBzKHI1dCksUHMoaDV0KSxQcyhTNXQpLFBzKHNtdCl9KCl9bGV0IG5mPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KX19cmV0dXJuIGN9KSgpLEN3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W19XLGRoZV0saW1wb3J0czpbUmEsUmMsemMsejAsbmZdfSl9fXJldHVybiBjfSkoKSxNQT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSl9fXJldHVybiBjfSkoKSxfNmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJhLFJjXX0pfX1yZXR1cm4gY30pKCksRzk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLHowLHpjLEN3LE1BLG5mLF82ZV19KX19cmV0dXJuIGN9KSgpO2NsYXNzIFBlZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRk''@;'; put 'put ''VG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fXZhciBGZWUsSGVlLE5lZSxWZWUsQmVlO25OKCksZnVuY3Rpb24gaG10KGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGEpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IFo9YXx8e307cmV0dXJuIGg/aC51cGRhdGVTZXR0aW5ncyhaKTooaD1uZXcgYy5Db3JlKGRbMF0sWiksZC5kYXRhKCJoYW5kc29udGFibGUiLGgpLGguaW5pdCgp''@;'; put 'put ''KSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2PjE/di0xOjApLEQ9MTtEPHY7RCsrKU1bRC0xXT1hcmd1''@;'; put 'put ''bWVudHNbRF07Zj1oW2FdLmNhbGwoaCwuLi5NKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShvcyksb3MuX19HaG9zdFRhYmxlPWRKLG9zLl9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIEJYZSgpe3JldHVybiBZT30sb3MuX2dldFJlZ2lzdGVyZWRNYXBz''@;'; put 'put ''Q291bnRlcj1mdW5jdGlvbiBadHQoKXtyZXR1cm4gekt9LG9zLkV2ZW50TWFuYWdlcj1qMjtjb25zdCBmbXQ9W0ksTyxVLFksRix3LF8sSyxQLGcseixMXSxwbXQ9W0IsTl07b3MuaGVscGVyPXt9LG9zLmRvbT17fSxZbihmbXQsYz0+e1luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMp''@;'; put 'put ''LGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG9zLmhlbHBlcltsXT1jW2xdKX0pfSksWW4ocG10LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQoMCkmJihvcy5kb21bbF09Y1tsXSl9KX0pLG9zLmNlbGxUeXBlcz1udWxsIT09KEZlZT1vcy5j''@;'; put 'put ''ZWxsVHlwZXMpJiZ2b2lkIDAhPT1GZWU/RmVlOnt9LFluKFFudCgpLGM9Pntvcy5jZWxsVHlwZXNbY109TVgoYyl9KSxvcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1HMixvcy5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGU9TVgsb3MuZWRpdG9ycz1udWxsIT09KEhlZT1vcy5lZGl0b3JzKSYm''@;'; put 'put ''dm9pZCAwIT09SGVlP0hlZTp7fSxZbihMWGUoKSxjPT57b3MuZWRpdG9yc1tgJHtwMShjKX1FZGl0b3JgXT1XTyhjKX0pLG9zLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9SGQsb3MuZWRpdG9ycy5nZXRFZGl0b3I9V08sb3MucmVuZGVyZXJzPW51bGwhPT0oTmVlPW9zLnJlbmRlcmVycykmJnZv''@;'; put 'put ''aWQgMCE9PU5lZT9OZWU6e30sWW4oZEplKCksYz0+e2NvbnN0IGw9UU8oYyk7ImJhc2UiPT09YyYmKG9zLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLG9zLnJlbmRlcmVyc1tgJHtwMShjKX1SZW5kZXJlcmBdPWx9KSxvcy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1JaCxvcy5yZW5k''@;'; put 'put ''ZXJlcnMuZ2V0UmVuZGVyZXI9UU8sb3MudmFsaWRhdG9ycz1udWxsIT09KFZlZT1vcy52YWxpZGF0b3JzKSYmdm9pZCAwIT09VmVlP1ZlZTp7fSxZbihwSmUoKSxjPT57b3MudmFsaWRhdG9yc1tgJHtwMShjKX1WYWxpZGF0b3JgXT1ySyhjKX0pLG9zLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxp''@;'; put 'put ''ZGF0b3I9WTcsb3MudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9ckssb3MucGx1Z2lucz1udWxsIT09KEJlZT1vcy5wbHVnaW5zKSYmdm9pZCAwIT09QmVlP0JlZTp7fSxZbihuSygpLGM9Pntvcy5wbHVnaW5zW2NdPUlFKGMpfSksb3MucGx1Z2luc1tgJHtwMShGcy5QTFVHSU5fS0VZKX1QbHVn''@;'; put 'put ''aW5gXT1Gcyxvcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPVBzLG9zLnBsdWdpbnMuZ2V0UGx1Z2luPUlFO2NvbnN0IGplZT1vcyx6ZWU9KGMsbCxhKT0+e2ZvcihsZXQgZCBvZiBjKXtjb25zdCBoPWwuZmluZCh2PT52LmRhdGE9PT1kLk5BTUUpLGY9YS52YXJzW2QuTkFNRV07ZiYmKGQuVFlQ''@;'; put 'put ''RT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhkLkREVFlQRSk/Im51bSI6Zi50eXBlKSxoJiZkLkRFU0MmJihoLmRlc2M9ZC5ERVNDKSxoJiZmLmxlbmd0aCYmKGgubGVuZ3RoPXBhcnNlSW50KGYubGVuZ3RoKSksaCYmZC5DTFNfUlVMRSYmKGguY2xzUnVsZT1kLkNMU19S''@;'; put 'put ''VUxFKX1yZXR1cm4gbH07ZnVuY3Rpb24gVWVlKGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IHc2ZT17Q0FTRTooYyxsKT0+e3N3''@;'; put 'put ''aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMp''@;'; put 'put ''fHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVVlZShjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuKCFhfHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygp''@;'; put 'put ''KX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1VZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybiEoIWF8fCFpc05hTihkKSl8fGQ8PU51bWJlcihsLnRvU3RyaW5nKCkpfSxOT1ROVUxMOihjLGwpPT5udWxsIT1jJiZjLnRvU3RyaW5nKCkubGVuZ3RoPjB9O3ZhciBaZWU9eSg3ODM3NSk7Y2xh''@;'; put 'put ''c3MgeW10IGV4dGVuZHMgamVlLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKX1vcGVuKGwpe3N1cGVyLm9wZW4obCksdGhpcy5pc0NlbGxOdW1lcmljKCk/dGhpcy5odENvbnRh''@;'; put 'put ''aW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxOdW1lcmljKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMoImh0TnVtZXJpYyIp''@;'; put 'put ''fX1jbGFzcyBDNmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRoaXMuaGlkZGVuQ29sdW1ucz1bXSx0aGlzLnByaW1hcnlLZXlzPVtdLHRoaXMuZXhlY3V0ZUhvdFZhbGlkYXRvcj0oTSxELFopPT57Y29uc3Qg''@;'; put 'put ''cmU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBqZWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikse30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDowLHByb3A6MH07bnVsbD09RCYmKEQ9IiIpLE0mJk0udmFsaWRh''@;'; put 'put ''dG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS52YWxpZGF0b3I/TS52YWxpZGF0b3IuY2FsbChyZSxELGNlPT57WiYmWihjZSl9KTpaJiZaKCExKX0sdGhpcy5yZWdpc3RlckN1c3RvbUVkaXRvcnMoKSx0aGlzLnNhc3BhcmFtcz1sLHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57''@;'; put 'put ''dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtjfV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9emVlKGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVzPShjPT57aWYoIVplZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEgb2Yg''@;'; put 'put ''YykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5QSy5z''@;'; put 'put ''cGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7amVlLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3IoImF1dG9jb21wbGV0ZS5jdXN0b20iLHltdCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRS''@;'; put 'put ''dWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRo''@;'; put 'put ''aXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3BsaWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3JldHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0Rx''@;'; put 'put ''Q29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3JldHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDoh''@;'; put 'put ''IXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRh''@;'; put 'put ''LnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0siXS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNo''@;'; put 'put ''KGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0pLGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRhdGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5p''@;'; put 'put ''bmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhB''@;'; put 'put ''UkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wr''@;'; put 'put ''Kyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNb''@;'; put 'put ''bF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1bGVzW2xdLmZpbHRlcj0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5z''@;'; put 'put ''dHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxF''@;'; put 'put ''Q1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5PVE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9ITEpfSJ0cnVlIj09PXRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1h''@;'; put 'put ''dD0hMCksdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZh''@;'; put 'put ''bGlkYXRvcj1mdW5jdGlvbihkLGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgTT1udWxsO3JldHVybiJhdXRvY29tcGxldGUiIT09dGhpcy5lZGl0b3ImJiJhdXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwo''@;'; put 'put ''bC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLEQ9PntNPUR9KSxNKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IodikuY2FsbCh0aGlzLGQsRD0+e009RH0pLE0/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNE''@;'; put 'put ''cUNvbChmfHwiIikmJiEoKGMsbCk9Pntmb3IobGV0IGEgb2YgYylpZih3NmVbYS5SVUxFX1RZUEVdJiYhdzZlW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1''@;'; put 'put ''bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZh''@;'; put 'put ''bHVlOiAke2R9KWApLHZvaWQgaCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtk''@;'; put 'put ''fSlgKSx2b2lkIGgoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09''@;'; put 'put ''bHx8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGlu''@;'; put 'put ''dGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIp''@;'; put 'put ''LCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3Ry''@;'; put 'put ''aW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBjVDtjYXNlIm51bWVyaWMiOnJldHVybiBVZWU7Y2FzZSJkYXRlIjpyZXR1cm4gS1A7Y2FzZSJ0aW1lIjpyZXR1cm4gcVA7ZGVmYXVsdDpyZXR1cm4o''@;'; put 'put ''YSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJldHVybjtjb25z''@;'; put 'put ''dCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEwKSwiRURJVCI9''@;'; put 'put ''PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25zdCByTj17bnVtZXJpYzoiIixkZWZhdWx0OiIifSxfbXQ9KGMsbCk9PmM/ImF1dG9jb21wbGV0ZSI9PT1jP2wm''@;'; put 'put ''Jmwuc291cmNlP2wuc291cmNlWzBdOltdOnJOLmhhc093blByb3BlcnR5KGMpP3JOW2NdOnJOLmRlZmF1bHQ6ck4uZGVmYXVsdCxXZWU9Yz0+bmV3IERhdGUoTWF0aC5yb3VuZCg4NjQwMCooYy0yNTU2OSkqMWUzKSksQ210PShjLGwsYSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVySFRNTD1g''@;'; put 'put ''JHtmP2YudG9TdHJpbmcoKToiIn0gPGNkcy1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi10cmlhbmdsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nkcy1pY29uPmAsbCksWWVlPShjLGwsYSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVySFRNTD1mfHwiIixsKSxTbXQ9KGMsbCxhLGQsaCxmLHYpPT4o''@;'; put 'put ''R2VlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFuPmAsbCksR2VlPWM9PntjLmNsYXNzTGlzdC5jb250YWlucygiaHREYXJrIil8fGMuY2xhc3NMaXN0LmFkZCgi''@;'; put 'put ''aHREYXJrIil9LFM2ZT1jPT57bGV0IGw9KCIwIitjLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0VVRDTWludXRlcygpKS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSwkZWU9Yz0+Yy5nZXRGdWxs''@;'; put 'put ''WWVhcigpKyItIisoIjAiKyhjLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitjLmdldERhdGUoKSkuc2xpY2UoLTIpLEtlZT1jPT4hIS9eLXswLDF9XGQrJC8udGVzdChjKSxNNmU9Yz0+ISEvXlxkK1wuXGQrJC8udGVzdChjKSxxZWU9KGMsbCk9Pm5ldyBGaWxlKFtjXSxsLHts''@;'; put 'put ''YXN0TW9kaWZpZWQ6KG5ldyBEYXRlKS5nZXRUaW1lKCl9KTt2YXIgRHU9eSg2MzU3OCkseDZlPXkoOTQyNDgpLEU2ZT15KDgzODM4KTtjbGFzcyBUNmV7Y29uc3RydWN0b3IobCl7dGhpcy5saWNlbmNlU3RhdGU9bC5saWNlbmNlU3RhdGV9cGFyc2VTcHJlYWRzaGVldEZpbGUobCxhLGQsaCl7''@;'; put 'put ''dmFyIGY9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKHYsTSk9Pntjb25zdCBEPWwudXBsb2FkZXJ8fG5ldyBQZWU7aWYobC53b3JrYm9vayl0aGlzLnBhcnNlRXhjZWxGaWxlKGwsbC53b3JrYm9vayxELGgpLnRoZW4oWj0+e3YoWil9KS5jYXRjaChaPT57TShaKX0pO2Vsc2V7Y29uc3QgcmU9''@;'; put 'put ''bC5maWxlO2wuZW5jb2Rpbmd8fChsLmVuY29kaW5nPSJVVEYtOCIpLGQmJmQoYExvYWRpbmcgJHtyZS5uYW1lfSBpbnRvIHRoZSBicm93c2VyYCk7bGV0IGNlPXJlLm5hbWUuc2xpY2UocmUubmFtZS5sYXN0SW5kZXhPZigiLiIpKzEscmUubmFtZS5sYXN0SW5kZXhPZigiLiIpKzQpO2lmKCJ4''@;'; put 'put ''bHMiIT09Y2UudG9Mb3dlckNhc2UoKSl7aWYoImNzdiI9PT1jZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLnBhcnNlQ3N2RmlsZShsLEQsY2UpLnRoZW4oYmU9PnYoYmUpKS5jYXRjaChiZT0+TShiZSkpO3tsZXQgYmU9J0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK2wuZmlsZS5uYW1lKyc8''@;'; put 'put ''L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nO3JldHVybiBELnF1ZXVlLnBvcCgpLE0oYmUpfX17bGV0IGJlPW5ldyBGaWxlUmVhZGVyO2JlLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBCZT1lZShmdW5jdGlvbioocWUpe2NvbnN0IHJ0PXlpZWxkIGYueHNseFN0YXJ0UmVh''@;'; put 'put ''ZGluZyhxZSxhLGwucGFzc3dvcmQpO2lmKCFydClyZXR1cm4gTSgiTm8gd29ya2Jvb2sgZm91bmQuIik7Zi5wYXJzZUV4Y2VsRmlsZShsLHJ0LEQsaCkudGhlbihwdD0+e3YocHQpfSkuY2F0Y2gocHQ9PntNKHB0KX0pfSk7cmV0dXJuIGZ1bmN0aW9uKHFlKXtyZXR1cm4gQmUuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfX0oKSxiZS5yZWFkQXNBcnJheUJ1ZmZlcihyZSl9fX0pfXBhcnNlRXhjZWxGaWxlKGwsYSxkLGgpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPSExLEQ9W107Y29uc3QgWj1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4ubC5oZWFkZXJB''@;'; put 'put ''cnJheV0scmU9dGhpcy5zZWFyY2hEYXRhSW5FeGNlbChhLGwpO2xldCBjZT1bXTtpZihyZS5mb3VuZD8oTT0hMCxjZT1yZS5mb3VuZC5hcnJheURhdGEscmUuZm91bmQuaGVhZGVycy5pbmNsdWRlcygiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIil8fChjZT1jZS5tYXAoQmU9PihC''@;'; put 'put ''ZS51bnNoaWZ0KHt2OiIifSksQmUpKSksaCYmaChgU2hlZXQ6ICR7cmUuZm91bmQuc2hlZXROYW1lfVxuUmFuZ2U6ICR7cmUuZm91bmQuc3RhcnRBZGRyZXNzfToke3JlLmZvdW5kLmVuZEFkZHJlc3N9YCkpOkQ9cmUubWlzc2luZ3x8W10sRC5sZW5ndGg+MCl7bGV0IEJlPUQubWFwKHFlPT5g''@;'; put 'put ''U2hlZXQ6ICR7cWUuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtxZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpO3JldHVybiBkLnF1ZXVlLnBvcCgpLHYoQmUpfWlmKDA9PT1jZS5sZW5ndGh8fDA9PT1jZVswXS5sZW5ndGgpe2xldCBCZT0iTm8gcmVs''@;'; put 'put ''ZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiO3JldHVybiBkLnF1ZXVlLnBvcCgpLHYoQmUpfWlmKChsLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8bC5kYXRlSGVhZGVycy5sZW5ndGg+MHx8bC50aW1lSGVhZGVycy5sZW5ndGg+MCkmJihjZT10aGlzLnVwZGF0ZURhdGVUaW1lQ29scyha''@;'; put 'put ''LGNlLGwpKSxsLnhsUnVsZXMubGVuZ3RoPjAmJihjZT10aGlzLnVwZGF0ZVhMUnVsZUNvbHMoWixjZSxsKSksIU0pe2xldCBCZT0iIjtyZXR1cm4gQmU9MD09PUQubGVuZ3RoPyJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI6RC5tYXAocWU9PmBTaGVldDogJHtxZS5zaGVldE5h''@;'; put 'put ''bWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke3FlLm1pc3NpbmdIZWFkZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxuIiksZC5xdWV1ZS5wb3AoKSx2KEJlKX17bC5oZWFkZXJTaG93PVosY2U9Y2UubWFwKEp0PT5KdC5tYXAodm49PiJuIj09PXZuLnR8fHZuLnc/dm4udjoic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIHZuLnY/dm4udi50cmltKCk6dm4udikpLGNlPWNlLm1hcChKdD0+SnQubWFwKCh2bixDbik9Pnshdm4mJjAhPT12biYmKHZuPSIiKTtjb25zdCB0bj1sLmhlYWRlclNob3dbQ25dO3JldHVybiJudW1lcmljIj09PWwuZGNWYWxpZGF0b3I/LmdldFJ1bGUodG4pPy50eXBlJiYoMCxnZy5p''@;'; put 'put ''c1NwZWNpYWxNaXNzaW5nKSh2bikmJiF2bi5pbmNsdWRlcygiLiIpJiYodm49Ii4iK3ZuKSx2bn0pKTtjb25zdCBCZT1jZS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtsZXQgcHQscWU9RHUudXRpbHMuanNvbl90b19zaGVldChCZSx7c2tpcEhl''@;'; put 'put ''YWRlcjohMH0pLHJ0PUR1LnV0aWxzLnNoZWV0X3RvX2NzdihxZSk7aWYocnQ9Wi5qb2luKCIsIikrIlxuIitydCwiV0xBVElOMSI9PT1sLmVuY29kaW5nKXtsZXQgSnQ9eDZlLmRlY29kZShFNmUuQnVmZmVyLmZyb20ocnQpLCJDUC0xMjUyIik7cHQ9bmV3IEJsb2IoW0p0XSx7dHlwZToiYXBw''@;'; put 'put ''bGljYXRpb24vY3N2In0pfWVsc2UgcHQ9bmV3IEJsb2IoW3J0XSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO2xldCBkdD1xZWUocHQsbC5maWxlLm5hbWUrIi5jc3YiKTtkLmFkZFRvUXVldWUoW2R0XSl9aWYoMD09PWNlLmxlbmd0aClyZXR1cm4gdihgVGFibGUgaW4gdGhlIGZpbGUgaXMg''@;'; put 'put ''ZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6ICR7cmUuZm91bmQ/LnNoZWV0TmFtZXx8IiJ9YCk7aWYoIXJlLmZvdW5kKXJldHVybiB2KCJObyByZWxldmFudCBkYXRhIGZvdW5kLiAnZm91bmQnIG9iamVjdCBpcyBlbXB0eSwgdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZC4iKTtjb25zdCBi''@;'; put 'put ''ZT1yZS5mb3VuZC5zdGFydEFkZHJlc3N8fCIiLEVlPXJlLmZvdW5kLmVuZEFkZHJlc3N8fCIiO3JldHVybiBmKHt1cGxvYWRlcjpkLGRhdGE6Y2UscmFuZ2VTaGVldFJlczp7Zm91bmQ6ISFyZS5mb3VuZCxzaGVldE5hbWU6cmUuZm91bmQuc2hlZXROYW1lLHJhbmdlU3RhcnRBZGRyZXNzOmJl''@;'; put 'put ''LHJhbmdlRW5kQWRkcmVzczpFZSxyYW5nZUFkZHJlc3M6YCR7YmV9OiR7RWV9YCxtaXNzaW5nSGVhZGVyczpEfSxoZWFkZXJTaG93OmwuaGVhZGVyU2hvd30pfSl9cGFyc2VDc3ZGaWxlKGwsYSxkKXtyZXR1cm4gbmV3IFByb21pc2UoKGgsZik9PntpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS5zdWJtaXRfcm93c19saW1pdCE9PTEvMClyZXR1cm4gYS5xdWV1ZS5wb3AoKSxmKCJFeGNlbCBmaWxlcyBvbmx5LiBUbyB1bmxvY2sgQ1NWIHVwbG9hZHMsIHBsZWFzZSBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKTtpZigiV0xBVElOMSIhPT1sLmVuY29kaW5nKXJldHVy''@;'; put 'put ''biBoKHt1cGxvYWRlcjphfSk7e2xldCB2PW5ldyBGaWxlUmVhZGVyO3Yub25sb2FkPUQ9PntsZXQgWj14NmUuZGVjb2RlKEU2ZS5CdWZmZXIuZnJvbShELnRhcmdldC5yZXN1bHQpLCJDUC0xMjUyIikscmU9bmV3IEJsb2IoW1pdLHt0eXBlOmR9KSxjZT1xZWUocmUsbC5maWxlLm5hbWUpO3Jl''@;'; put 'put ''dHVybiBhLnF1ZXVlLnBvcCgpLGEuYWRkVG9RdWV1ZShbY2VdKSxoKHt1cGxvYWRlcjphfSl9LHYucmVhZEFzQXJyYXlCdWZmZXIobC5maWxlKX19KX1ieXRlc1RvTUIobCl7cmV0dXJuIHBhcnNlRmxvYXQoKGwvMTA0ODU3NikudG9GaXhlZCgyKSl9eHNseFN0YXJ0UmVhZGluZyhsLGEsZCl7''@;'; put 'put ''dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1lZShmdW5jdGlvbioodixNKXtjb25zdCBEPWgudG9Cc3RyKGwudGFyZ2V0LnJlc3VsdCk7bGV0IFoscmU9ITE7Y29uc3QgY2U9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNl''@;'; put 'put ''bGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExLHBhc3N3b3JkOmR9O3RyeXtaPXlpZWxkIGgueGxzeFJlYWQoRCx7Li4uY2V9KX1jYXRjaChiZSl7aWYoIWJlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlyZXR1cm4gTSgiRXJyb3IgcmVhZGluZyB0''@;'; put 'put ''aGUgZmlsZSIpO3tyZT0hMDtsZXQgRWU9ITE7Zm9yKDtyZTspe2NvbnN0IEJlPXlpZWxkIGEoe2Vycm9yOkVlfSk7aWYoQmUpdHJ5e1o9eWllbGQgaC54bHN4UmVhZChELHsuLi5jZSxwYXNzd29yZDpCZX0pLHJlPSExLEVlPSExfWNhdGNoKHFlKXtFZT0hMCxxZS5tZXNzYWdlLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChyZT0hMSl9ZWxzZSByZT0hMX19fXJldHVybiBaP3YoWik6TSgiRmFpbGVkIHRvIHBhcnNlIGEgd29ya2Jvb2siKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfXhsc3hSZWFkKGws''@;'; put 'put ''YSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57aWYoYSYmYS5wYXNzd29yZClyZXR1cm4gY29uc29sZS5pbmZvKCJOb3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gaGFzIHBhc3N3b3JkIiksZChEdS5yZWFkKGwsYSkpO2lmKHR5cGVvZiBXb3JrZXI+InUiKXJldHVybiBj''@;'; put 'put ''b25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1ggLSBubyBXb3JrZXIgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKSxkKER1LnJlYWQobCxhKSk7Y29uc29sZS5pbmZvKCJVc2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1giKTtjb25zdCBmPW5l''@;'; put 'put ''dyBXb3JrZXIoeS50dShuZXcgVVJMKHkucCt5LnUoNDExKSx5LmIpKSk7Zi5vbm1lc3NhZ2U9KHtkYXRhOnZ9KT0+eyJyZWFkaW5nX2VuZCI9PT12LmV2ZW50P2Qodi53b3JrYm9vayk6di5lcnJvcj9oKHYuZXJyb3IpOihjb25zb2xlLmluZm8oIldvcmtlciBmYWlsZWQgdG8gcGFyc2UgdGhl''@;'; put 'put ''IFhMU1ggLSBmYWxsYmFjayB0byBub24gd29ya2VyIHBhcnNpbmciKSxkKER1LnJlYWQodixhKSkpfSxmLnBvc3RNZXNzYWdlKHtkYXRhOmwsb3B0czphfSksc2V0VGltZW91dCgoKT0+ZChEdS5yZWFkKGwsYSkpLDZlNSl9KX1zZWFyY2hEYXRhSW5FeGNlbChsLGEpe2xldCBkLGgsZix2LE09''@;'; put 'put ''IiIsRD1bXSxyZT1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4uYS5oZWFkZXJBcnJheV0ubWFwKGJlPT5iZS50b0xvd2VyQ2FzZSgpKSxjZT1yZS5yZWR1Y2UoKGJlLEVlKT0+KGJlW0VlXT0tMSxiZSkse30pO2ZvcihsZXQgYmUgb2YgbC5TaGVldE5hbWVzKXtkPXZvaWQg''@;'; put 'put ''MCxoPXZvaWQgMCxjZT1yZS5yZWR1Y2UoKHRuLE1uKT0+KHRuW01uXT0tMSx0bikse30pO2xldCBFZT1bXTtNPWJlO2NvbnN0IEJlPWwuU2hlZXRzW01dO2lmKE9iamVjdC5rZXlzKEJlKS5mb3JFYWNoKHRuPT57Y29uc3QgTW49QmVbdG5dLnY7aWYoTW4mJiJzdHJpbmciPT10eXBlb2YgTW4p''@;'; put 'put ''e2NvbnN0IENyPU1uLnRvTG93ZXJDYXNlKCk7cmUuaW5kZXhPZihDcik+LTEmJihjZVtDcl09dG4sZHx8KGQ9dG4pLGg9dG4pfX0pLC0xPT09Y2UuX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fJiZkZWxldGUgY2UuX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fLEVlPU9iamVj''@;'; put 'put ''dC5rZXlzKGNlKS5maWx0ZXIodG49Pi0xPT09Y2VbdG5dKSxFZS5sZW5ndGg+MCl7RC5wdXNoKHtzaGVldE5hbWU6TSxtaXNzaW5nSGVhZGVyczpFZS5tYXAodG49PnRuLnRvVXBwZXJDYXNlKCkpfSk7Y29udGludWV9Y29uc3QgcWU9T2JqZWN0LmtleXMoY2UpO2xldCBkdCxydD1bXSxwdD1b''@;'; put 'put ''XTtxZS5zb3J0KCh0bixNbik9Pntjb25zdCBDcj1hLmhlYWRlclBrcy5pbmNsdWRlcyh0bik/MTowO3JldHVybihhLmhlYWRlclBrcy5pbmNsdWRlcyhNbik/MTowKS1Dcn0pLmZvckVhY2godG49Pntjb25zdCBNbj1jZVt0bl0sQ3I9TW4ubWF0Y2goL1xEKy8pLEdyPU1uLm1hdGNoKC9cZCsv''@;'; put 'put ''KSxtcj0oQ3I/Q3JbMF06LTEpfHwtMSxhaT1wYXJzZUludCgoR3I/R3JbMF06LTEpfHwtMSkrMTtsZXQgX2k9MDtpZihkdClmb3IobGV0IE9uPWFpO09uPD1kdDtPbisrKXtjb25zdCBKbj1CZVtgJHttcn0ke09ufWBdO2lmKGEuaGVhZGVyUGtzLmluY2x1ZGVzKHRuKSYmKHZvaWQgMD09PUpu''@;'; put 'put ''fHx2b2lkIDA9PT1Kbi52KSl7ZHQ9T247YnJlYWt9cnRbX2ldfHxydC5wdXNoKHt9KSxKbiYmKHJ0W19pXVt0bl09InN0cmluZyI9PXR5cGVvZiBKbi52P0puLnYudHJpbSgpOkpuLnYpLHB0W19pXXx8cHQucHVzaChbXSkscHRbX2ldLnB1c2goSm4/P3t2OiIifSksX2krK31lbHNle2xldCBP''@;'; put 'put ''bj1haTtmb3IoO3ZvaWQgMD09PWR0Oyl7Y29uc3QgenI9YCR7bXJ9JHtPbn1gLEpuPUJlW3pyXTtpZighSm58fHZvaWQgMD09PUpuLnYpe2R0PU9uLTE7YnJlYWt9cnRbX2ldfHxydC5wdXNoKHt9KSxydFtfaV1bdG5dPSJuIj09PUJlW3pyXS50P0JlW3pyXS52OkJlW3pyXS53P0JlW3pyXS53''@;'; put 'put ''OiJzdHJpbmciPT10eXBlb2YgQmVbenJdLnY/QmVbenJdLnYudHJpbSgpOkJlW3pyXS52LHB0W19pXXx8cHQucHVzaChbXSkscHRbX2ldLnB1c2goSm4/P3t2OiIifSksT24rKyxfaSsrfX1pZihkJiZoKXtjb25zdCBPbj1oLm1hdGNoKC9cRCsvKTtmPWQsdj1gJHtPbn0ke2R0fWB9fSk7Y29u''@;'; put 'put ''c3Qgdm49W107bGV0IENuO3JldHVybiBydC5mb3JFYWNoKCh0bixNbik9PntsZXQgQ3I9ITE7YS5oZWFkZXJQa3MuZm9yRWFjaChHcj0+e3ZvaWQgMD09PXRuW0dyLnRvTG93ZXJDYXNlKCldJiYoQ3I9ITApfSksQ3ImJih2bi5wdXNoKE1uKSxDbnx8KENuPU1uKSl9KSxDbj8ocnQuc3BsaWNl''@;'; put 'put ''KENuLDEvMCkscHQuc3BsaWNlKENuLDEvMCkpOnZuLnNvcnQoKHRuLE1uKT0+TW4tdG4pLmZvckVhY2godG49PntydC5zcGxpY2UodG4sMSkscHQuc3BsaWNlKHRuLDEpfSkscHQubGVuZ3RoP3tmb3VuZDp7ZGF0YTpydCxhcnJheURhdGE6cHQsc2hlZXROYW1lOk0sc3RhcnRBZGRyZXNzOmYs''@;'; put 'put ''ZW5kQWRkcmVzczp2LGhlYWRlcnM6cWV9fTp7fX1yZXR1cm57bWlzc2luZzpEfX11cGRhdGVEYXRlVGltZUNvbHMobCxhLGQpe2lmKGQuZGF0ZUhlYWRlcnMubGVuZ3RoPjApe2NvbnN0IGg9W107ZC5kYXRlSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwu''@;'; put 'put ''aW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKEtlZShNLnYpKXtjb25zdCBEPVdlZShOdW1iZXIoTS52KSk7TS52PUQuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoRC5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrRC5nZXRE''@;'; put 'put ''YXRlKCkpLnNsaWNlKC0yKX1lbHNlIGlmKE0mJk0udiYmLTE9PT1NLnYudG9TdHJpbmcoKS5pbmRleE9mKCI6Iikpe2NvbnN0IEQ9bmV3IERhdGUoTS52KTsiSW52YWxpZCBEYXRlIiE9PUQudG9VVENTdHJpbmcoKSYmKE0udj0kZWUoRCkpfWZbdl09TX0pfSl9aWYoZC50aW1lSGVhZGVycy5s''@;'; put 'put ''ZW5ndGg+MCl7bGV0IGg9W107ZC50aW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKEtlZShNLnYpfHxNNmUoTS52KXx8TS52LmluY2x1ZGVzKCJF''@;'; put 'put ''LSIpKXtjb25zdCBEPVdlZShOdW1iZXIoTS52KSk7TS52PVM2ZShEKX1mW3ZdPU19KX0pfWlmKGQuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxh''@;'; put 'put ''LmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKEtlZShNLnYpfHxNNmUoTS52KSl7Y29uc3QgRD1XZWUoTnVtYmVyKE0udikpO00udj0kZWUoRCkrIiAiK1M2ZShEKX1lbHNle2lmKC0xPT09TS52LmluZGV4T2YoIiAiKSYmLTEhPT1NLnYuaW5kZXhPZigiOiIpKXts''@;'; put 'put ''ZXQgWj1NLnYuc3Vic3RyaW5nKDAsTS52LmluZGV4T2YoIjoiKSk7Wj1aKyIgIitNLnYuc3Vic3RyaW5nKE0udi5pbmRleE9mKCI6IikrMSksTS52PVp9Y29uc3QgRD1uZXcgRGF0ZShNLnYpOyJJbnZhbGlkIERhdGUiIT09RC50b1VUQ1N0cmluZygpJiYoTS52PSRlZShEKSsiICIrKGM9Pnts''@;'; put 'put ''ZXQgbD0oIjAiK2MuZ2V0SG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFNlY29uZHMoKSkuc2xpY2UoLTIpLGx9KShEKSl9Zlt2XT1NfSl9KX1yZXR1cm4gYX11cGRhdGVYTFJ1bGVDb2xzKGws''@;'; put 'put ''YSxkKXtpZihkLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGg9W107ZC54bFJ1bGVzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9bC5pbmRleE9mKGYuWExfQ09MVU1OKSxoLnB1c2goZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2Nv''@;'; put 'put ''bnN0IE09Zlt2LmluZGV4XTsiRk9STVVMQSI9PT12LlhMX1JVTEUmJiJmImluIE0mJigibiI9PT1NLnQ/TS52PSI9IitNLmY6TS53PSI9IitNLmYpLGZbdl09TX0pfSl9cmV0dXJuIGF9dG9Cc3RyKGwpe2xldCBhPW5ldyBVaW50OEFycmF5KGwpLGQ9IiIsaD1hLmJ5dGVMZW5ndGg7Zm9yKGxl''@;'; put 'put ''dCBmPTA7ZjxoO2YrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbZl0pO3JldHVybiBkfX1sZXQgQTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZD1mPT5uZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5vcGVuKGYpLnN1YnNjcmliZShEPT57dihELnBhc3N3''@;'; put 'put ''b3JkKX0pfSl9cGFyc2VFeGNlbEZpbGUoYSxkLGgpe3JldHVybiBuZXcgVDZlKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KS5wYXJzZVNwcmVhZHNoZWV0RmlsZShhLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCxkLGgpfXhsc3hSZWFkRmlsZShhKXtyZXR1cm4gbmV3IFByb21p''@;'; put 'put ''c2UoKGQsaCk9Pntjb25zdCBmPW5ldyBUNmUoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pO2xldCB2PW5ldyBGaWxlUmVhZGVyO3Yub25sb2FkPU09PntmLnhzbHhTdGFydFJlYWRpbmcoTSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQpLnRoZW4oRD0+e2QoRCl9KS5jYXRjaChE''@;'; put 'put ''PT57aChEKX0pfSx2LnJlYWRBc0FycmF5QnVmZmVyKGEpfSl9cGFyc2VFeGNlbFNoZWV0TmFtZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLGYpPT57Y29uc3Qgdj1uZXcgRmlsZVJlYWRlcjtpZighYSlyZXR1cm4gY29uc29sZS53''@;'; put 'put ''YXJuKCJmaWxlIGlzIG1pc3NpbmciKSxoKHtzaGVldE5hbWVzOltdfSk7di5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgTT1lZShmdW5jdGlvbiooRCl7aWYoIUQ/LnRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIkZpbGUgcmVhZGVyIGV2ZW50LnRhcmdldCBpcyBtaXNzaW5nIik7bGV0''@;'; put 'put ''IFosY2UscmU9ITE7Y29uc3QgYmU9RC50YXJnZXQucmVzdWx0O3RyeXtaPUR1LnJlYWQoYmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5In0pfWNhdGNoKEVlKXtpZighRWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKXJldHVybiBmKCJFcnJvciByZWFk''@;'; put 'put ''aW5nIHRoZSBmaWxlIik7e3JlPSEwO2xldCBCZT0hMTtmb3IoO3JlOyl7aWYoY2U9eWllbGQgZC5wcm9tcHRFeGNlbFBhc3N3b3JkKHtlcnJvcjpCZX0pLCFjZSlyZXR1cm4gcmU9ITEsZigiTm8gcGFzc3dvcmQgcHJvdmlkZWQiKTt0cnl7Wj1EdS5yZWFkKGJlLHtib29rU2hlZXRzOiEwLHR5''@;'; put 'put ''cGU6ImJpbmFyeSIscGFzc3dvcmQ6Y2V9KSxyZT0hMSxCZT0hMX1jYXRjaChxZSl7QmU9ITAscWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpfHwocmU9ITEpfWlmKCFjZSlyZXR1cm4gZigiSW52YWxpZCBwYXNzd29yZCwgZmFpbGVkIHRvIGRlY3J5cHQgdGhl''@;'; put 'put ''IGZpbGUiKX19fWlmKCFaKXJldHVybiBmKCJFcnJvciBwYXJzaW5nIHRoZSB3b3JrYm9vayIpO3RyeXtyZXR1cm4gaCh7c2hlZXROYW1lczpaLlNoZWV0TmFtZXMscGFzc3dvcmQ6Y2V9KX1jYXRjaChFZSl7Y29uc29sZS5lcnJvcihFZSl9fSk7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBN''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdi5vbmVycm9yPWZ1bmN0aW9uKE0pe2NvbnNvbGUubG9nKE0pfSx2LnJlYWRBc0JpbmFyeVN0cmluZyhhKX0pfSkoKX1ieXRlc1RvTUIoYSl7cmV0dXJuIHBhcnNlRmxvYXQoKGEvMTA0ODU3NikudG9GaXhlZCgyKSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoaGhlKSx4cih2YykseHIodTEpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCAkOT12b2lkIDAs''@;'; put 'put ''VG10PVsiZW4tR0IiLFtbImEiLCJwIl0sWyJhbSIsInBtIl0sJDldLFtbImFtIiwicG0iXSwkOSwkOV0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5Iiwi''@;'; put 'put ''V2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sJDksW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXki''@;'; put 'put ''LCJKdW4iLCJKdWwiLCJBdWciLCJTZXB0IiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSwkOSxbWyJC''@;'; put 'put ''IiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDEsWzYsMF0sWyJkZC9NTS95IiwiZCBNTU0geSIsImQgTU1NTSB5IiwiRUVFRSwgZCBNTU1NIHkiXSxbIkhIOm1tIiwiSEg6bW06c3MiLCJISDptbTpzcyB6IiwiSEg6bW06c3Mgenp6eiJdLFsiezF9''@;'; put 'put ''LCB7MH0iLCQ5LCJ7MX0gJ2F0JyB7MH0iLCQ5XSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIkdCUCIsIlx4YTMiLCJCcml0aXNoIFBvdW5k''@;'; put 'put ''Iix7SlBZOlsiSlBceGE1IiwiXHhhNSJdLFVTRDpbIlVTJCIsIiQiXX0sImx0ciIsZnVuY3Rpb24gRW10KGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1''@;'; put 'put ''fV0sQW10PVsiaW5wdXQiXSxrbXQ9WyIqIl0sRG10PShjLGwpPT4oeyJ3aWR0aC5weCI6YywibWF4LWhlaWdodC5weCI6bH0pO2Z1bmN0aW9uIEltdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxEcigiICIsYS5sb2Fk''@;'; put 'put ''aW5nTW9yZT8iTG9hZGluZy4uLiI6IkxPQUQgTU9SRSIsIiAiKX19bGV0IGs2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY2RyPWEsdGhpcy5pbnB1dElkPSIiLHRoaXMucGxhY2Vob2xkZXI9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0i''@;'; put 'put ''dGV4dCIsdGhpcy5hdXRvY29tcGxldGU9Im9mZiIsdGhpcy50YWJpbmRleD0iIix0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLm9uSW5wdXRLZXlkb3duPW5ldyBLcix0aGlzLm9uSW5wdXRDaGFuZ2U9bmV3IEtyLHRoaXMudmFsdWVDaGFuZ2U9''@;'; put 'put ''bmV3IEtyLHRoaXMub25Mb2FkaW5nTW9yZT1uZXcgS3IsdGhpcy5kYXRhbGlzdE9wZW49ITEsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXk9MTUwLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmlucHV0Q2xpZW50UmVjdD17fSx0aGlzLnByZXZlbnREYXRh''@;'; put 'put ''bGlzdENsb3NlPSExLHRoaXMubG9hZGluZ01vcmU9ITF9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfSw1MDApfW9uSW5wdXRGaXJlZChhLGQsaCl7dGhpcy5vcGVuRGF0YWxpc3QoImNsaWNrIiE9PWgp''@;'; put 'put ''LHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5maWx0ZXJPcHRpb25zTGlzdCgpLCghdGhpcy5lbWl0T25seVNlbGVjdGVkfHxkKSYmKHRoaXMub25JbnB1dENoYW5nZS5lbWl0KHt0YXJnZXQ6e3ZhbHVlOnRoaXMudmFsdWV9fSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFs''@;'; put 'put ''dWUpKX1vbklucHV0Q2xpY2soYSl7dGhpcy5vcGVuRGF0YWxpc3QoKX1vcGVuRGF0YWxpc3QoYT0hMCl7dGhpcy5kYXRhbGlzdE9wZW49ITAsYSYmKHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMCx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuYWZ0ZXJP''@;'; put 'put ''cGVuTG9jaz0hMX0sdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXkpKX1jbG9zZURhdGFsaXN0KCl7Y2xlYXJUaW1lb3V0KHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dCksdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuZGF0YWxpc3RPcGVuPSExfXJlc2V0RGF0YWxpc3RGaWx0ZXIoKXt0''@;'; put 'put ''aGlzLmZpbHRlck9wdGlvbnNMaXN0KCEwKX1vbklucHV0Rm9jdXNpbihhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMH1vbklucHV0Rm9jdXNvdXQoYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbklucHV0TW91c2VlbnRlcihhKXt0aGlzLmlucHV0Q2xp''@;'; put 'put ''ZW50UmVjdC53aWR0aHx8dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9ZmlsdGVyT3B0aW9uc0xpc3QoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtj''@;'; put 'put ''b25zdCBmPWRbaF07aWYoMD09PXRoaXMudmFsdWUubGVuZ3RoKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWlmKGEpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9Y29uc3Qgdj1mLmlubmVyVGV4dHx8IiIsTT1mLnZhbHVlfHwiIjsoditNKT8u''@;'; put 'put ''dG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCkpP2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6Zi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19c2V0VG9DbG9zZURhdGFsaXN0KCl7dGhpcy5kYXRhbGlzdENsb3NlVGltZW91dD1zZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZXx8dGhpcy5hZnRlck9wZW5Mb2NrfHwodGhpcy5jbG9zZURhdGFsaXN0KCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLnJlc2V0RGF0YWxpc3RGaWx0ZXIoKSl9LDEwMCl9Y2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC53aWR0aD4wJiZkLmhlaWdodD4wJiYodGhpcy5pbnB1dENsaWVudFJlY3Q9e3dpZHRoOmQud2lkdGgsYm90dG9tOmQuYm90dG9tfSksdGhpcy5pbm5lckhlaWdodD13aW5kb3cuaW5uZXJI''@;'; put 'put ''ZWlnaHR9b25EYXRhTGlzdE1vdXNlRW50ZXIoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMH1vbkRhdGFMaXN0TW91c2VMZWF2ZShhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkRhdGFMaXN0U2Ny''@;'; put 'put ''b2xsKGEpe3RoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25EYXRhTGlzdENsaWNrKGEpe2NvbnN0IGQ9YS50YXJnZXQ7ImxvYWQtbW9yZSIhPT1kLmRhdGFzZXQ/LnR5cGU/Ik9QVElPTiIhPT1kLnRhZ05hbWV8fHRoaXMuc2V0T3B0aW9uVmFsdWUoZC5pbm5lclRleHQsZC52YWx1ZSk6dGhp''@;'; put 'put ''cy5sb2FkTW9yZSgpfWxvYWRNb3JlKCl7dGhpcy5vbkxvYWRpbmdNb3JlLmVtaXQoe2xvYWRNb3JlRmluaXNoZWQ6YT0+e3RoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT1hfX0pLHRoaXMubG9hZGluZ01vcmU9ITB9c2V0T3B0aW9uVmFsdWUoYSxkKXsoYXx8ZCkmJihk''@;'; put 'put ''fHwoZD1hKSksZCYmKHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy52YWx1ZT1kLHRoaXMub25JbnB1dEZpcmVkKG51bGwsITAsImNsaWNrIiksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSl9b25NYWluS2V5ZG93bihhKXtzd2l0Y2goYS5rZXkpe2Nhc2UiQXJyb3dVcCI6dGhp''@;'; put 'put ''cy5nZXRPcHRpb25zTW92ZUZvY3VzKCJ1cCIpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoImRvd24iKTticmVhaztjYXNlIkVudGVyIjp0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKX19b25JbnB1dEtleXVwKGEpe3JldHVybiF0aGlzLmRhdGFsaXN0''@;'; put 'put ''T3Blbnx8KCJFc2NhcGUiPT09YS5rZXk/KGEuc3RvcFByb3BhZ2F0aW9uKCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpLCExKTp2b2lkIDApfXVuc2VsZWN0QWxsT3B0aW9ucygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs''@;'; put 'put ''bChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKX1zZWxlY3RGb2N1c2VkT3B0aW9uKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZGF0YWxpc3RfJHt0''@;'; put 'put ''aGlzLmlucHV0SWR9IG9wdGlvbi5mb2N1c2VkYCk7YSYmdGhpcy5vbkRhdGFMaXN0Q2xpY2soe3RhcmdldDphfSksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1nZXRPcHRpb25zTW92ZUZvY3VzKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhp''@;'; put 'put ''cy5pbnB1dElkfSBvcHRpb246bm90KC5oaWRkZW4pYCk7bGV0IGg9MDtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdO2lmKHYuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb2N1c2VkIikpe2g9ImRvd24iPT09YT9mKzE6Zi0xLGg8MCYmKGg9ZC5sZW5ndGgtMSksaD5kLmxl''@;'; put 'put ''bmd0aC0xJiYoaD0wKSx2LmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKTticmVha319ZFtoXS5jbGFzc0xpc3QuYWRkKCJmb2N1c2VkIil9b25SZXNpemUoYSl7dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvY29tcGxldGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShBbXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5pbnB1dEVsZW1lbnQ9''@;'; put 'put ''Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJyZXNpemUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uUmVzaXplKHYpfSwwLHFDKX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHZhbHVlOiJ2YWx1ZSIsZGlz''@;'; put 'put ''YWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixhdXRvY29tcGxldGU6ImF1dG9jb21wbGV0ZSIsdGFiaW5kZXg6InRhYmluZGV4IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOntvbklucHV0S2V5''@;'; put 'put ''ZG93bjoib25JbnB1dEtleWRvd24iLG9uSW5wdXRDaGFuZ2U6Im9uSW5wdXRDaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25Mb2FkaW5nTW9yZToib25Mb2FkaW5nTW9yZSJ9LG5nQ29udGVudFNlbGVjdG9yczprbXQsZGVjbHM6OSx2YXJzOjE1LGNvbnN0czpbWyJpbnB1dCIs''@;'; put 'put ''IiJdLFsib3B0aW9ucyIsIiJdLFsxLCJhdXRvY29tcGxldGUtd3JhcHBlciIsMywia2V5ZG93biJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJ0YWJpbmRleCIsIjAiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsImNsaWNrIiwi''@;'; put 'put ''bW91c2VlbnRlciIsImZvY3VzIiwiZm9jdXNvdXQiLCJrZXl1cCIsImlkIiwicGxhY2Vob2xkZXIiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdLFsxLCJkYXRhbGlzdCIsMywiY2xpY2siLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInNjcm9sbCIsIm5nU3R5bGUiLCJp''@;'; put 'put ''ZCJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwiY2xhc3MiLCJsb2FkLW1vcmUiLDQsIm5nSWYiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsMSwibG9hZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7c2EoKSxkZSgwLCJkaXYiLDIpLEZ0''@;'; put 'put ''KCJrZXlkb3duIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbk1haW5LZXlkb3duKE0pKX0pLGRlKDEsImlucHV0IiwzLDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC52YWx1ZSxNKXx8KGgudmFsdWU9TSksQ3QoTSl9KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRDbGljayhNKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZpcmVkKE0pKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklu''@;'; put 'put ''cHV0TW91c2VlbnRlcihNKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1c2luKE0pKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZvY3Vzb3V0KE0pKX0pKCJrZXl1cCIsZnVuY3Rpb24oTSl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGgub25JbnB1dEtleXVwKE0pKX0pLGhlKCksR3QoMywiZGl2Iiw0KSxkZSg0LCJkaXYiLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdENsaWNrKE0pKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3Qo''@;'; put 'put ''ZiksQ3QoaC5vbkRhdGFMaXN0TW91c2VFbnRlcihNKSl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdE1vdXNlTGVhdmUoTSkpfSkoInNjcm9sbCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdFNjcm9sbChNKSl9''@;'; put 'put ''KSxkZSg1LCJkaXYiLG51bGwsMSksWXIoNyksaGUoKSxndCg4LEltdCwyLDEsIm9wdGlvbiIsNiksaGUoKSgpfWlmKDImZCl7Y29uc3QgZj1oYSg2KTtmZSgpLE1lKCJpZCIsaC5pbnB1dElkKSgicGxhY2Vob2xkZXIiLGgucGxhY2Vob2xkZXIpLHBpKCJuZ01vZGVsIixoLnZhbHVlKSxNZSgi''@;'; put 'put ''ZGlzYWJsZWQiLGguZGlzYWJsZWQpLGhyKCJsaXN0IiwiZGF0YWxpc3RfIitoLmlucHV0SWQpLGZlKDIpLFRyKCJoaWRkZW4iLCFoLmRhdGFsaXN0T3BlbiksZmUoKSxUcigiaGlkZGVuIiwhaC5kYXRhbGlzdE9wZW4pLE1lKCJuZ1N0eWxlIixscCgxMixEbXQsaC5pbnB1dENsaWVudFJlY3Qu''@;'; put 'put ''d2lkdGgsaC5pbm5lckhlaWdodCYmaC5pbnB1dENsaWVudFJlY3QuYm90dG9tP2guaW5uZXJIZWlnaHQtaC5pbnB1dENsaWVudFJlY3QuYm90dG9tOnZvaWQgMCkpKCJpZCIsImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSg0KSxNZSgibmdJZiIsZi5jaGlsZHJlbi5sZW5ndGg+MCYmaC5lbmFi''@;'; put 'put ''bGVMb2FkTW9yZSl9fSxkZXBlbmRlbmNpZXM6W2JhLG5vZSxBMixrMixxbCxubCwkc10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxSbXQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNo''@;'; put 'put ''KGQpe2Nhc2UiZGF0ZSI6cmV0dXJuIE9vKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtj''@;'; put 'put ''b25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLHY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIitoOmh9OiR7ZjwxMD8iMCIrZjpmfToke3Y8MTA/IjAiK3Y6dn1gfX1yZXR1cm4ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGE/YTphLnRvU3RyaW5nKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTG10''@;'; put 'put ''PVsiaW5wdXQiXSxPbXQ9WyIqIl07ZnVuY3Rpb24gUG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksTGUoMSwiIC8gIiksZGUoMiwic3BhbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbkNoYW5nZUxhYmVsKCJzZWNvbmQiKSl9KSxM''@;'; put 'put ''ZSgzKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLFRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwic2Vjb25kIj09PWEubGFiZWxTZWxlY3RlZCksZmUoKSx3cihhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gRm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''bGFiZWwiLDQpKDEsInNwYW4iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkNoYW5nZUxhYmVsKCJmaXJzdCIpKX0pLExlKDIpLGhlKCksZ3QoMyxQbXQsNCwzLCJuZy1jb250YWluZXIiLDYpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoInNl''@;'; put 'put ''Y29uZExhYmVsQWN0aXZlIixhLnNlY29uZExhYmVsJiZhLnNlY29uZExhYmVsLmxlbmd0aD4wKSxmZSgpLFRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09YS5sYWJlbFNlbGVjdGVkKSxmZSgpLHdyKGEubGFiZWwpLGZlKCksTWUoIm5nSWYiLGEuc2Vjb25kTGFiZWwpfX1mdW5j''@;'; put 'put ''dGlvbiBIbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNyksZWwoMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSxGdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25EYXRl''@;'; put 'put ''SW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChSZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0TW91c2VPdXQoKSl9''@;'; put 'put ''KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVyIix6OCgzLDUsYS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixhLnZhbHVlKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGhyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlu''@;'; put 'put ''cHV0SWQpfX1mdW5jdGlvbiBObXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJpbnB1dCIsOCksRnQoImlucHV0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoInZhbHVlIixh''@;'; put 'put ''LnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gVm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOSwwKSxGdCgib25JbnB1''@;'; put 'put ''dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5hdXRvY29tcGxldGVMb2FkaW5nTW9yZShoKSl9KSxZcigzKSxoZSgpLGxpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKCk7ZmUoKSxNZSgiaW5wdXRJZCIsYS5pbnB1dElkKSgidmFsdWUiLChudWxsPT1hLnZhbHVlP251bGw6YS52YWx1ZS50b1N0cmluZygpKXx8IiIpKCJlbmFibGVMb2FkTW9yZSIsYS5lbmFibGVMb2FkTW9yZSkoImVtaXRPbmx5U2VsZWN0ZWQiLGEuZW1pdE9ubHlTZWxlY3Rl''@;'; put 'put ''ZCkoImRpc2FibGVkIixhLmRpc2FibGVkKX19bGV0IEQ2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25s''@;'; put 'put ''eVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbklucHV0RXZlbnQ9bmV3IEtyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBLcix0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IEtyLHRoaXMuc2VsZWN0ZWRMYWJl''@;'; put 'put ''bENoYW5nZT1uZXcgS3IsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMubGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKGEpe2EudmFsdWUmJmEudmFsdWUuY3VycmVudFZhbHVlIT09YS52YWx1ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVt''@;'; put 'put ''aXQoYS52YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5lbWl0KGEpfW9uSW5wdXRGaXJlZChhKXtjb25zdCBkPWEudGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1kLHRoaXMudmFsdWVD''@;'; put 'put ''aGFuZ2UuZW1pdChkKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uRGF0ZUlucHV0RmlyZWQoYSl7dGhpcy50ZW1wPWEsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25JbnB1dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8''@;'; put 'put ''KHRoaXMudmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52YWx1ZT90aGlzLnZhbHVlOiIiLHRoaXMudmFsdWU9IiIpfW9uRm9jdXNpbklucHV0KGEpe3RoaXMuZm9jdXNpbklucHV0''@;'; put 'put ''LmVtaXQoYSl9b25DaGFuZ2VMYWJlbChhKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09YT90aGlzLmxhYmVsOnRoaXMuc2Vjb25kTGFiZWwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoTG10LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saW5w''@;'; put 'put ''dXRzOntpbnB1dElkOiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGRpc2FibGVTb2Z0c2VsZWN0OiJkaXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoi''@;'; put 'put ''ZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZlbnQ6Im9uSW5wdXRFdmVudCIsZm9jdXNpbklucHV0OiJmb2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01v''@;'; put 'put ''cmU6Im9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxDaGFuZ2UifSxmZWF0dXJlczpbd2xdLG5nQ29udGVudFNlbGVjdG9yczpPbXQsZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbImlucHV0IiwiIl0sWyJjbGFzcyIsImNsci1jb250''@;'; put 'put ''cm9sLWxhYmVsIiwzLCJzZWNvbmRMYWJlbEFjdGl2ZSIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMywiY2xpY2siXSxbNCwibmdJZiJdLFsidHlwZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwzLCJjbHJEYXRlQ2hh''@;'; put 'put ''bmdlIiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0''@;'; put 'put ''IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSIsImlucHV0''@;'; put 'put ''SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoc2EoKSxndCgwLEZtdCw0LDYsImxhYmVsIiwxKSxzaSgxLDIpLGd0KDIsSG10LDQsOCwibmctY29udGFpbmVyIiwzKSgzLE5tdCwy''@;'; put 'put ''LDQsIm5nLWNvbnRhaW5lciIsMykoNCxWbXQsNCw1LCJuZy1jb250YWluZXIiLDMpLGxpKCkpLDImZCYmKE1lKCJuZ0lmIixoLmxhYmVsKSxmZSgpLE1lKCJuZ1N3aXRjaCIsaC50eXBlKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwidGlt''@;'; put 'put ''ZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbYmEsUzIsY3AsZHMsWXgsSkwsc0csazZlLFJtdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxTdz0oKCk9PntjbGFzcyBje3NldCBuZ1ZhcihhKXt0aGlzLmNvbnRleHQuJGltcGxpY2l0''@;'; put 'put ''PXRoaXMuY29udGV4dC5uZ1Zhcj1hLHRoaXMuaGFzVmlld3x8KHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsdGhpcy5jb250ZXh0KSx0aGlzLmhhc1ZpZXc9ITApfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy50ZW1wbGF0ZVJlZj1hLHRoaXMudmNSZWY9ZCx0''@;'; put 'put ''aGlzLmNvbnRleHQ9eyRpbXBsaWNpdDpudWxsLG5nVmFyOm51bGx9LHRoaXMuaGFzVmlldz0hMX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTbCksR2UoRG8pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIiIsIm5nVmFyIiwiIl1dLGlucHV0czp7bmdWYXI6Im5nVmFyIn19KX19cmV0dXJuIGN9KSgpLEJtdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhLGQ9ImRheXMiLGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpudWxsfWxldCBmPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEs''@;'; put 'put ''ZCk7aWYoND09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IE09YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoTVswXSksZi5zZXRIb3VycyhwYXJzZUludChNWzFdKSksZi5zZXRNaW51dGVzKHBhcnNlSW50KE1bMl0pKSxmLnNldFNlY29uZHMocGFyc2VJbnQoTVszXSkpfWVsc2UgaXNOYU4o''@;'; put 'put ''TnVtYmVyKGEpKSYmKGY9bmV3IERhdGUoYSkpO2xldCB2PWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3Ro''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP3Y6Zn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtu''@;'; put 'put ''YW1lOiJzYXNUb0pzRGF0ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLGptdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIiI7bGV0IGQsaCxmO2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgYSYmMz09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IHY9YS5zcGxpdCgiOiIpO2Q9dlswXSxoPXZbMV0sZj12WzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlSW50KGEpKSxkPU1hdGguZmxvb3IoYS8zNjAwKSxoPU1hdGguZmxvb3IoYSUzNjAwLzYwKSxm''@;'; put 'put ''PU1hdGguZmxvb3IoYSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGgpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmKX1gfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InNlY29uZHNQYXJzZXIiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCB6bXQ9KGMsbCxhKT0+KHtxdWVyeTpjLHF1ZXJ5SW5k''@;'; put 'put ''ZXg6bCxjbGF1c2VJbmRleDphfSksVW10PShjLGwsYSxkKT0+KHtxdWVyeTpjLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH0pLFptdD0oYyxsLGEsZCk9Pih7cmFuZ2U6InN0YXJ0IixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJ''@;'; put 'put ''bmRleDphLGlzRGF0ZVRpbWU6ZH0pLFdtdD0oYyxsLGEsZCk9Pih7cmFuZ2U6ImVuZCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KTtmdW5jdGlvbiBZbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDIyKSxM''@;'; put 'put ''ZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInNlbGVjdGVkIixSZSgpLmxvZ2ljT3BlcmF0b3JzWzBdKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEdtdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjMpLExlKDEsIlxuICAgICAgICAiKSxHdCgyLCJwcm9ncmVz''@;'; put 'put ''cyIpLExlKDMsIlxuICAgICAgIiksaGUoKSl9ZnVuY3Rpb24gJG10KGMsbCl7MSZjJiZHdCgwLCJkaXYiKX1mdW5jdGlvbiBLbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDIyKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInNlbGVjdGVkIixSZSgyKS5s''@;'; put 'put ''b2dpY09wZXJhdG9yc1swXSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBxbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSksR3QoMSwi''@;'; put 'put ''Y2xyLWljb24iLDMzKSxkZSgyLCJzcGFuIiksTGUoMywiR3JvdXAiKSxoZSgpKCl9fWZ1bmN0aW9uIFhtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS5pbmRleDtyZXR1cm4gQ3Qo''@;'; put 'put ''UmUoKS5yZW1vdmVHcm91cENsYXVzZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBKbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxEcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIFFtdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHdyKGEpfX1mdW5jdGlvbiBlNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIHQ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLmluZGV4LGY9UmUoKS5pbmRleCx2PVJlKCk7cmV0dXJuIHYuY3VycmVudFF1ZXJ5SW5kZXg9aCxDdCh2LmN1cnJlbnRDbGF1c2VJbmRleD1mKX0pLExlKDIsIiBDaG9vc2UgdmFsdWVzICIpLGhlKCksZ3QoMyxlNnQsMSww''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDUzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxmPVJlKCkuaW5kZXg7UmUoKTtjb25zdCB2PWhhKDM3KTtmZSgzKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsdikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixwTSgy''@;'; put 'put ''LHptdCxkLGgsZikpfX1mdW5jdGlvbiBuNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIHI2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTQpLGd0KDEsbjZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkubmdWYXIsZD1SZSgpLGg9ZC4kaW1wbGlj''@;'; put 'put ''aXQsZj1kLmluZGV4LHY9UmUoKS5pbmRleCxNPVJlKCksRD1oYSgzMSksWj1oYSgzMyk7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6WikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixKSSgyLFVtdCxoLGYsdixhKSl9fWZ1bmN0aW9uIGk2dChjLGwpezEm''@;'; put 'put ''YyYmRmwoMCl9ZnVuY3Rpb24gYTZ0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBvNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU1KSgxLCJkaXYiLDU2KSxndCgyLGk2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCksZGUoMywiZGl2Iiw1NyksZ3QoNCxhNnQsMSwwLCJuZy1jb250''@;'; put 'put ''YWluZXIiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyLGQ9UmUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCx2PVJlKCkuaW5kZXgsTT1SZSgpLEQ9aGEoMzEpLFo9aGEoMzUpO2ZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgibmdU''@;'; put 'put ''ZW1wbGF0ZU91dGxldENvbnRleHQiLEpJKDQsWm10LGgsZix2LGEpKSxmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6WikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixKSSg5LFdtdCxoLGYsdixhKSl9fWZ1bmN0aW9uIHM2dChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1MbigpO2RlKDAsImRpdiIsNTgpKDEsImxhYmVsIiw3KSxMZSgyLCJWYWx1ZSIpLGhlKCksZGUoMywiaW5wdXQiLDU5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYudmFsdWUsaCl8fChmLnZhbHVl''@;'; put 'put ''PWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuaW5kZXgsdj1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsZix2KSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtm''@;'; put 'put ''ZSgzKSxwaSgibmdNb2RlbCIsYS52YWx1ZSl9fWZ1bmN0aW9uIGw2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLGd0KDEsdDZ0LDQsNiwiZGl2Iiw0NykoMixyNnQsMiw3LCJkaXYiLDQ4KSgzLG82dCw1LDE0LCJkaXYiLDQ5KSg0LHM2dCw0LDEsImRpdiIsNTApLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwiSU4iPT09YS5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1hLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0lmIiwiQkVUV0VFTiIhPT1hLm9wZXJhdG9yJiYiSU4iIT09YS5vcGVyYXRvciYmIk5PVCBJTiIhPT1hLm9wZXJhdG9yJiYiTElL''@;'; put 'put ''RSIhPT1hLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09YS5vcGVyYXRvciYmIkJFR0lOU19XSVRIIiE9PWEub3BlcmF0b3IpLGZlKCksTWUoIm5nSWYiLCJCRVRXRUVOIj09PWEub3BlcmF0b3IpLGZlKCksTWUoIm5nSWYiLCJMSUtFIj09PWEub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1hLm9w''@;'; put 'put ''ZXJhdG9yfHwiQ09OVEFJTlMiPT09YS5vcGVyYXRvcil9fWZ1bmN0aW9uIGM2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTApKDEsImRpdiIsMzUpKDIsImRpdiIsMzYpKDMsImFwcC1zb2Z0LXNlbGVjdCIsMzcpLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7''@;'; put 'put ''Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYudmFyaWFibGUsaCl8fChmLnZhcmlhYmxlPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYuJGltcGxpY2l0LE09Zi5pbmRleCxEPVJlKCkuaW5kZXg7cmV0dXJuIEN0KFJl''@;'; put 'put ''KCkudmFyaWFibGVJbnB1dENoYW5nZSh2LnZhcmlhYmxlLE0sRCxoKSl9KSxndCg0LEptdCwyLDEsIm9wdGlvbiIsMzgpLGhlKCkoKSgpLGRlKDUsImRpdiIsMzkpKDYsImNsci1zZWxlY3QtY29udGFpbmVyIikoNywibGFiZWwiKSxMZSg4LCJPcGVyYXRvciIpLGhlKCksZGUoOSwic2VsZWN0''@;'; put 'put ''Iiw0MCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLm9wZXJhdG9yLGgpfHwoZi5vcGVyYXRvcj1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLiRpbXBsaWNp''@;'; put 'put ''dCx2PWguaW5kZXgsTT1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlT3BlcmF0b3IodixmLm9wZXJhdG9yLE0pKX0pLGd0KDEwLFFtdCwyLDEsIm9wdGlvbiIsMzgpLGhlKCkoKSgpLGd0KDExLGw2dCw1LDQsImRpdiIsNDEpLGRlKDEyLCJkaXYiLDQyKSgxMywiYnV0dG9u''@;'; put 'put ''Iiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXgsZj1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnJlbW92ZUNsYXVzZShoLGYpKX0pLEd0KDE0LCJjbHItaWNvbiIsNDQpKDE1LCJzcGFuIiksaGUoKSxkZSgxNiwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5hZGRDbGF1c2UoaCkpfSksR3QoMTcsImNsci1pY29uIiwzMykoMTgsInNwYW4iKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoKS5pbmRleCxmPVJlKCk7''@;'; put 'put ''VHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLGZlKDMpLE1lKCJpZCIsInNlbGVjdF92YWxzX3Zhcl9pZCIrZCsiXyIraCkoImlucHV0SWQiLCJ2YWxzX3Zhcl9pZCIrZCsiXyIraCkoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxwaSgidmFsdWUiLGEudmFyaWFibGUpLGZlKCks''@;'; put 'put ''TWUoIm5nRm9yT2YiLGYuY29scyksZmUoNSkscGkoIm5nTW9kZWwiLGEub3BlcmF0b3IpLGZlKCksTWUoIm5nRm9yT2YiLGEub3BlcmF0b3JzKSxmZSgpLE1lKCJuZ1ZhciIsIkRBVEUiPT09YS5kZHR5cGV8fCJEQVRFVElNRSI9PT1hLmRkdHlwZXx8IlRJTUUiPT09YS5kZHR5cGUpLGZlKDIp''@;'; put 'put ''LE1lKCJkaXNhYmxlZCIsMT09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50cy5sZW5ndGgpfX1mdW5jdGlvbiB1NnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI0KSgxLCJkaXYiLDEwKSgyLCJkaXYiLDI1KSgzLCJkaXYiLDI2KSg0LCJjbHItc2VsZWN0LWNv''@;'; put 'put ''bnRhaW5lciIpKDUsImxhYmVsIiksTGUoNiwiTG9naWMiKSxoZSgpLGRlKDcsInNlbGVjdCIsMjcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5jbGF1c2VMb2dpYyxoKXx8KGYuY2xhdXNlTG9naWM9aCksQ3QoaCl9''@;'; put 'put ''KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zZXRMb2dpYygpKX0pLGd0KDgsS210LDIsMiwib3B0aW9uIiwxMyksaGUoKSgpKCksR3QoOSwiYnIiKSxndCgxMCxxbXQsNCwwLCJidXR0b24iLDI4KSxoZSgpLGRlKDExLCJkaXYiLDI5KSxndCgx''@;'; put 'put ''MixYbXQsMSwwLCJjbHItaWNvbiIsMzApKDEzLGM2dCwxOSwxMSwiZGl2IiwzMSksaGUoKSgpLEd0KDE0LCJiciIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtmZSgpLFRyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxmZSg2KSxwaSgibmdNb2Rl''@;'; put 'put ''bCIsYS5jbGF1c2VMb2dpYyksTWUoImRpc2FibGVkIixhLmVsZW1lbnRzLmxlbmd0aDwyKSxmZSgpLE1lKCJuZ0Zvck9mIixkLmxvZ2ljT3BlcmF0b3JzKSxmZSgyKSxNZSgibmdJZiIsZC5pbm5lcldpZHRoPjc2OCksZmUoMiksTWUoIm5nSWYiLGQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+''@;'; put 'put ''MSksZmUoKSxNZSgibmdGb3JPZiIsYS5lbGVtZW50cyl9fWZ1bmN0aW9uIGQ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjIpLGVsKDIsInNhc1RvSnNEYXRlIiksZWwoMywic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1''@;'; put 'put ''bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleCxEPWYucXVlcnlJbmRleCxaPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuZGF0ZUNoYW5nZShoLHYsRCxaLE0pKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWEu''@;'; put 'put ''cXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSxNZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP0RjKDIsMyxkLnZhbHVlW2hdKTpEYygzLDUs''@;'; put 'put ''ZC52YWx1ZSkpfX1mdW5jdGlvbiBoNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYzKSxlbCgyLCJzYXNUb0pzRGF0ZSIpLGVsKDMsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBm''@;'; put 'put ''PVJlKCksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoTSx2KS5kYXRlPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCksZj1oLnF1ZXJ5LHY9aC5xdWVyeVZhbHVlSW5kZXgsTT1oLnF1''@;'; put 'put ''ZXJ5SW5kZXgsRD1oLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLmRhdGVUaW1lQ2hhbmdlKGYsTSxELHYpKX0pLGhlKCksZGUoNCwiYXBwLXNvZnQtc2VsZWN0Iiw2NCksZWwoNSwic2FzVG9Kc0RhdGUiKSxlbCg2LCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''aCl7d3QoYSk7Y29uc3QgZj1SZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5nZXRRdWVyeURhdGVUaW1lKE0sdikudGltZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlW''@;'; put 'put ''YWx1ZUluZGV4LE09aC5xdWVyeUluZGV4LEQ9aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5kYXRlVGltZUNoYW5nZShmLE0sRCx2KSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNs''@;'; put 'put ''YXVzZUluZGV4O2ZlKCksTWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD96OCgyLDYsZC52YWx1ZVtoXSwic2Vjb25kcyIpOno4KDMsOSxkLnZhbHVlLCJzZWNvbmRzIikpLGZlKDMpLE1lKCJkaXNhYmxl''@;'; put 'put ''U29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc190aW1lIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/YlUoNSwxMixkLnZhbHVlW2hdLCJzZWNvbmRzIiwhMCk6YlUoNiwxNixkLnZhbHVlLCJzZWNvbmRzIiwhMCkpfX1mdW5jdGlvbiBmNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtzaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDY1KSxlbCgyLCJzZWNvbmRzUGFyc2VyIiksZWwoMywic2Vjb25kc1BhcnNlciIpLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleCxEPWYu''@;'; put 'put ''cXVlcnlJbmRleCxaPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkudGltZUNoYW5nZShoLHYsRCxaLE0pKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSxN''@;'; put 'put ''ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/RGMoMiwzLGQudmFsdWVbaF0pOkRjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIHA2dChjLGwpezEmYyYmKHNpKDAsNjApLGd0KDEsZDZ0LDQsNywibmctY29udGFp''@;'; put 'put ''bmVyIiw2MSkoMixoNnQsNywyMCwibmctY29udGFpbmVyIiw2MSkoMyxmNnQsNCw3LCJuZy1jb250YWluZXIiLDYxKSxsaSgpKSwyJmMmJihNZSgibmdTd2l0Y2giLGwucXVlcnkuZGR0eXBlKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJEQVRFIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwi''@;'; put 'put ''REFURVRJTUUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJUSU1FIikpfWZ1bmN0aW9uIGc2dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEudW5mb3JtYXR0ZWQpLGZlKCksRHIoIiAiLGEu''@;'; put 'put ''Zm9ybWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiBtNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLGc2dCwyLDIsIm9wdGlvbiIsNjcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLnF1ZXJ5O2ZlKCksTWUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gdjZ0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5OQU1FKSxmZSgpLERyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gYjZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx2NnQsMiwyLCJvcHRpb24i''@;'; put 'put ''LDY5KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5xdWVyeTtmZSgpLE1lKCJuZ0lmIixhLlRZUEU9PT1kLnR5cGUpfX1mdW5jdGlvbiB5NnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLGI2dCwyLDEsIm5nLWNvbnRhaW5lciIsMzgpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbHMpfX1mdW5jdGlvbiBfNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtc29mdC1zZWxlY3QiLDY2KSxGdCgic2VsZWN0ZWRMYWJlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5xdWVyeTty''@;'; put 'put ''ZXR1cm4gQ3QoUmUoKS5zZWxlY3RlZExhYmVsQ2hhbmdlKGgsZikpfSksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLnF1ZXJ5O3JldHVybiBtaShmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSxDdChoKX0pLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2Nv''@;'; put 'put ''bnN0IGY9d3QoYSksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09''@;'; put 'put ''Zi5xdWVyeUluZGV4LEQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxNLEQpKX0pLGd0KDEsbTZ0LDIsMSwiZGl2IiwyMCkoMix5NnQsMiwxLCJkaXYiLDIwKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9''@;'; put 'put ''bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleDtNZSgic2Vjb25kTGFiZWwiLCJWYXJpYWJsZSIpKCJlbWl0T25seVNlbGVjdGVkIixhLnZhbHVlVmFyaWFibGUpKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpLHBpKCJ2YWx1ZSIsYS52YWx1ZSksTWUoImVuYWJsZUxvYWRNb3JlIixhLm5v''@;'; put 'put ''YnM+YS52YWx1ZXMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIiwhYS52YWx1ZVZhcmlhYmxlKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlVmFyaWFibGUpfX1mdW5jdGlvbiB3NnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQ7TWUoInZhbHVlIixhLmZvcm1hdHRlZCksZmUoKSxEcigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gQzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw3MCksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEp''@;'; put 'put ''LHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBtaSh2LnZhbHVlW01dLGgpfHwodi52YWx1ZVtNXT1oKSxDdChoKX0pLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWgucXVlcnksdj1oLnF1ZXJ5SW5kZXgsTT1oLmNsYXVzZUluZGV4O3Jl''@;'; put 'put ''dHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGYudmFsdWUsdixNKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5SW5kZXgsRD1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLm9uQXV0b2Nv''@;'; put 'put ''bXBsZXRlTG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLE0sRCkpfSksZ3QoMSx3NnQsMiwyLCJvcHRpb24iLDY3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLnJhbmdlLGQ9bC5xdWVyeSxoPWwucXVlcnlWYWx1ZUluZGV4O01lKCJpbnB1dElkIiwidmFscy0iK2ErIl8iK2wucXVlcnlJbmRleCsi''@;'; put 'put ''XyIrbC5jbGF1c2VJbmRleCkscGkoInZhbHVlIixkLnZhbHVlW2hdKSxNZSgiZW5hYmxlTG9hZE1vcmUiLGQubm9icz5kLnZhbHVlcy5sZW5ndGgpKCJkaXNhYmxlZCIsdm9pZCAwIT09aCYmInN0YXJ0IiE9PWEmJiFkLnZhbHVlWzBdKSxmZSgpLE1lKCJuZ0Zvck9mIixkLnZhbHVlcyl9fWZ1''@;'; put 'put ''bmN0aW9uIFM2dChjLGwpezEmYyYmKGRlKDAsImg1Iiw3OCksTGUoMSwiIE5vIHZhbHVlcyBhdmFpbGFibGUuICIpLGhlKCkpfWZ1bmN0aW9uIE02dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1jaGVja2JveC13cmFwcGVyIikoMSwiaW5wdXQiLDgwKSxnaSgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5pbmRleCx2PVJlKDIpLnF1ZXJ5O3JldHVybiBtaSh2LnZhbHVlW2ZdLmNoZWNrZWQsaCl8fCh2LnZhbHVlW2ZdLmNoZWNrZWQ9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1S''@;'; put 'put ''ZSgyKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCx2LE0pKX0pLGhlKCksZGUoMiwibGFiZWwiKSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDIpLnF1ZXJ5O2Zl''@;'; put 'put ''KCkscGkoIm5nTW9kZWwiLGgudmFsdWVbZF0uY2hlY2tlZCksZmUoMiksRHIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIHg2dChjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24iLDc5KSgxLCJjbHItY2hlY2tib3gtY29udGFpbmVyIiksZ3QoMixNNnQsNCwyLCJjbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciIsMzgpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCkucXVlcnk7ZmUoMiksTWUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gRTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLW1vZGFsIiw3MSkoMSwiaDMiLDcyKSxMZSgyLCJTZWxlY3QgdmFs''@;'; put 'put ''dWVzIiksaGUoKSxkZSgzLCJkaXYiLDczKSxndCg0LFM2dCwyLDAsImg1Iiw3NCkoNSx4NnQsMywxLCJzZWN0aW9uIiw3NSksaGUoKSxkZSg2LCJkaXYiLDc2KSg3LCJidXR0b24iLDc3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBoLmN1cnJlbnRR''@;'; put 'put ''dWVyeUluZGV4PS0xLEN0KGguY3VycmVudENsYXVzZUluZGV4PS0xKX0pLExlKDgsIiBBcHBseSAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXgsZj1SZSgpO01lKCJjbHJNb2RhbE9wZW4iLGYuY3VycmVudFF1ZXJ5SW5k''@;'; put 'put ''ZXg9PT1kJiZmLmN1cnJlbnRDbGF1c2VJbmRleD09PWgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksTWUoIm5nSWYiLCFmLmlzQXJyKGEudmFsdWUpKSxmZSgpLE1lKCJuZ0lmIixmLmlzQXJyKGEudmFsdWUpKX19IWZ1bmN0aW9uIHJ3ZShjLGwsYSl7KGZ1bmN0aW9uIFI5ZShjLGws''@;'; put 'put ''YSl7InN0cmluZyIhPXR5cGVvZiBsJiYoYT1sLGw9Y1tlYy5Mb2NhbGVJZF0pLGw9bC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLFViW2xdPWMsYSYmKFViW2xdW2VjLkV4dHJhRGF0YV09YSl9KShjLGwsYSl9KFRtdCk7bGV0IFhlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmNkZj1mLHRoaXMuY2FjaGluZz0hMCx0aGlzLnJvd3NfaW5jcmVtZW50PTEwMCx0aGlzLmluaXRpYWxfcm93cz0xZTMsdGhpcy5jbGF1c2VBbXQ9WyIi''@;'; put 'put ''XSx0aGlzLm51bU9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMuY2hhck9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLm5vdEluPSExLHRoaXMu''@;'; put 'put ''bm90QXJyPSEwLHRoaXMud2FzQmV0d2Vlbj0hMSx0aGlzLndoZXJlQ2xhdXNlTG9hZGluZz0hMSx0aGlzLmR5bmFtaWNXaGVyZUNsYXVzZT0hMCx0aGlzLnVzZVBpY2tlcnM9ITEsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJp''@;'; put 'put ''YWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZVZhcmlhYmxlOiExLHN0YXJ0cm93OjAscm93czowLG5vYnM6MCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV0sY2xhdXNlTG9naWM6IiIsaW52YWxpZENsYXVzZTohMX0sdGhpcy5zZWxWYXI9e2luZGV4Om51bGwsZm9ybWF0''@;'; put 'put ''Om51bGwsdHlwZTpudWxsfSx0aGlzLmluT2JqPVt7Y2hlY2tlZDohMSx2YWx1ZTpudWxsfV0sdGhpcy5ncm91cExvZ2ljPSJBTkQiLHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLmxv''@;'; put 'put ''Z2ljT3BlcmF0b3JzPVsiQU5EIiwiT1IiXSx0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy5jdXJyZW50Q2xhdXNlSW5kZXg9LTEsdGhpcy5jdXJyZW50UXVlcnlJbmRleD0tMSx0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsLHRoaXMuaW5uZXJXaWR0aD13aW5kb3cuc2NyZWVuLndpZHRo''@;'; put 'put ''LHRoaXMuaW5uZXJXaWR0aD43NjgmJih0aGlzLm5vQm9yZGVyPSJib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyYXk7Iil9Z2V0UXVlcnlEYXRlVGltZShhLGQpe2xldCBoPXRoaXMucXVlcnlEYXRlVGltZS5maW5kKGY9PmYuY2xhdXNlSW5kZXg9PT1hJiZmLnF1ZXJ5SW5kZXg9PT1kKTtpZigh''@;'; put 'put ''aCl7Y29uc3QgZj10aGlzLnF1ZXJ5RGF0ZVRpbWUucHVzaCh7Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmQsZGF0ZToiIix0aW1lOiIifSktMTtoPXRoaXMucXVlcnlEYXRlVGltZVtmXX1yZXR1cm4gaH11c2VQaWNrZXJzQ2hhbmdlKCl7dGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMudXNl''@;'; put 'put ''UGlja2VycyYmdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goYT0+e2EuZWxlbWVudHMuZm9yRWFjaChkPT57WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoZC5kZHR5cGUpJiZkLnZhbHVlVmFyaWFibGUmJihkLnZhbHVlPSIiLGQudmFsdWVWYXJpYWJsZT0hMSl9KX0p''@;'; put 'put ''fXJlc2V0RmlsdGVyKCl7dGhpcy53aGVyZVN0cmluZz12b2lkIDAsdGhpcy53aGVyZUNsYXVzZT12b2lkIDAsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1''@;'; put 'put ''ZXM6W10sb3BlcmF0b3JzOltdfV19LHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLndoZXJlQ2xhdXNlRm4oITApfXNldFRvR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJu''@;'; put 'put ''O2xldCBhPSIiOyJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Lbi5yb290UGFyYW0mJihhPSJ2aWV3ZXIiKSx5YyhLbixhKS5maWx0ZXIu''@;'; put 'put ''Z3JvdXBMb2dpYz10aGlzLmdyb3VwTG9naWMsInN0cmluZyI9PXR5cGVvZiB0aGlzLndoZXJlQ2xhdXNlJiYoeWMoS24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlPXRoaXMud2hlcmVDbGF1c2UpLCJzdHJpbmciPT10eXBlb2YgdGhpcy5saWJkcyYmKHljKEtuLGEpLmZpbHRlci5saWJkcz10aGlz''@;'; put 'put ''LmxpYmRzKSx5YyhLbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmNsYXVzZXN9Z2V0RnJvbUdsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdi''@;'; put 'put ''b3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09S24ucm9vdFBhcmFtJiYoYT0idmlld2VyIikseWMoS24sYSkuZmlsdGVyLmNvbHMubGVuZ3RoPjAmJih0aGlzLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh5YyhLbixhKS5maWx0ZXIuY29scykpKSx5YyhL''@;'; put 'put ''bixhKS5maWx0ZXIudmFscy5sZW5ndGg+MCYmKHRoaXMudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHljKEtuLGEpLmZpbHRlci52YWxzKSkpLCIiIT09eWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWMmJih0aGlzLmdyb3VwTG9naWM9eWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWMs''@;'; put 'put ''dGhpcy53aGVyZUNsYXVzZT15YyhLbixhKS5maWx0ZXIud2hlcmVDbGF1c2UsdGhpcy5saWJkcz15YyhLbixhKS5maWx0ZXIubGliZHMsdGhpcy5jbGF1c2VzPXljKEtuLGEpLmZpbHRlci5jbGF1c2VzLHRoaXMud2hlcmVDbGF1c2VGbigpKX1zZXRHcm91cExvZ2ljKGEpe3RoaXMuZ3JvdXBM''@;'; put 'put ''b2dpYz1hLHRoaXMuY2xhdXNlcy5ncm91cExvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1kYXRlQ2hhbmdlKGEsZCxoLGYsdil7bGV0IE09dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSk7IkJFVFdFRU4iPT09ZC5vcGVy''@;'; put 'put ''YXRvciYmdm9pZCAwIT09diYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVt2XT1NKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKE0saCxmKX1kYXRlVGltZUNoYW5nZShhLGQsaCxmKXtjb25zdCB2PXRoaXMuZ2V0UXVlcnlEYXRlVGltZShoLGQpO2lmKCIiPT09''@;'; put 'put ''di5kYXRlKXtpZigiIj09PWEudmFsdWUpcmV0dXJuO3YuZGF0ZT1hLnZhbHVlLnNwbGl0KCI6IilbMF19Y29uc3QgTT1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoiKVswXSksRD1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoiKVsxXSksWj1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoiKVsyXSl8''@;'; put 'put ''fDA7bGV0IHJlPW5ldyBEYXRlKHYuZGF0ZSksY2U9bmV3IERhdGUocmUuZ2V0RnVsbFllYXIoKSxyZS5nZXRNb250aCgpLHJlLmdldERhdGUoKSxNLEQsWiksYmU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoY2UsInNlY29uZHMiKTsiQkVUV0VFTiI9PT1hLm9w''@;'; put 'put ''ZXJhdG9yJiZ2b2lkIDAhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlW2ZdPWJlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKGJlLGQsaCl9dGltZUNoYW5nZShhLGQsaCxmLHYpe2E9YS50YXJnZXQudmFsdWU7bGV0IGJlPTYwKnBhcnNlSW50KGEuc3Bs''@;'; put 'put ''aXQoIjoiKVswXSkqNjArNjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSsocGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKXx8MCk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYmdm9pZCAwIT09diYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVt2XT1iZSksdGhp''@;'; put 'put ''cy5zZXRWYXJpYWJsZVZhbHVlcyhiZSxoLGYpfWR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoYSxkKXtsZXQgaD1bXTtpZih0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjF8fHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5sZW5ndGg+MSlmb3IobGV0IGY9MDtmPHRoaXMu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7ZisrKWZvcihsZXQgdj0wO3Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzLmxlbmd0aDt2Kyspe2lmKGY9PT1hJiZ2PT09ZHx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0u''@;'; put 'put ''dmFyaWFibGUpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS5vcGVyYXRvcil8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlKSljb250aW51ZTtsZXQgTT0i''@;'; put 'put ''Ijtjb25zdCBEPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS5vcGVyYXRvcixaPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YXJpYWJsZTsiQkVUV0VFTiI9PT1EP009YCR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVl''@;'; put 'put ''WzBdfSBBTkQgJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bdl0udmFsdWVbMV19YDoiSU4iPT09RHx8Ik5PVCBJTiI9PT1EPyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bdl0udmFsdWUuZm9yRWFjaChyZT0+e2lmKHJlLmNoZWNrZWQpe2xldCBjZT1yZS52YWw7InN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBjZXx8KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykoY2UpP00ubGVuZ3RoPjA/TSs9YCwke2NlfWA6TT1gKCR7Y2V9YDpNLmxlbmd0aD4wP00rPWAsJyR7Y2V9J2A6TT1gKCcke2NlfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIpKToiIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVt''@;'; put 'put ''ZW50c1t2XS52YWx1ZT9NPSJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS50eXBlPyInICciOiIuIjoiY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZSYmKE09YCcke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVt''@;'; put 'put ''ZW50c1t2XS52YWx1ZX0nYCksaC5wdXNoKHtHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmYsVkFSSUFCTEVfTk06WixPUEVSQVRPUl9OTTpELFJB''@;'; put 'put ''V19WQUxVRTpNfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9KX1yZXR1cm4gaH1nZXRWYWx1ZXNMb2FkTW9yZShhLGQsaCxmKXt2YXIgdj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBNPXYubGliZHN8fCIiO3RyeXtpZih2b2lkIDAhPT12LmNv''@;'; put 'put ''bHMpe2ZvcihsZXQgcWU9MDtxZTx2LmNvbHMubGVuZ3RoO3FlKyspdi5jb2xzW3FlXS5OQU1FPT09ZCYmKHYuc2VsVmFyLmluZGV4PXFlKTtjb25zdCBEPXYuY29sc1t2LnNlbFZhci5pbmRleF0uRERUWVBFLHtzdGFydHJvdzpaLHJvd3M6cmV9PXYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVt''@;'; put 'put ''ZW50c1toXSxjZT12LnJvd3NfaW5jcmVtZW50LGJlPVorcmU7bGV0IEVlPVtdO3YuZHluYW1pY1doZXJlQ2xhdXNlJiYoRWU9di5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGYsaCkpO2NvbnN0IEJlPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKEQpO3Yuc2FzU3RvcmVT''@;'; put 'put ''ZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGQsTSxFZSxiZSxjZSkudGhlbihxZT0+e2NvbnN0IHJ0PXFlLnZhbHMse1NUQVJUUk9XOnB0LFJPV1M6ZHQsTk9CUzpKdH09cWUubWV0YVswXTtpZih2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0uc3RhcnRyb3c9cHQsdi5jbGF1c2VzLnF1''@;'; put 'put ''ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnJvd3M9ZHQsdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLm5vYnM9SnQsMT09PXJ0Lmxlbmd0aCYmIiI9PT1ydFswXS5GT1JNQVRURUQmJiIiPT09cnRbMF0uVU5GT1JNQVRURUQ/YS5sb2FkTW9yZUZpbmlzaGVkKCExKToodi5jbGF1c2Vz''@;'; put 'put ''LnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5wdXNoKC4uLnJ0Lm1hcCh0bj0+e2NvbnN0IE1uPSJudW0iPT09cWUuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBHcj1NbiYmKDAsZ2cuaXNTcGVjaWFsTWlzc2luZykodG4uVU5GT1JNQVRURUQpPyIuIit0bi5VTkZPUk1B''@;'; put 'put ''VFRFRDp0bi5VTkZPUk1BVFRFRDtyZXR1cm4gTW4mJm51bGw9PT1HciYmKEdyPSIuIikse2Zvcm1hdHRlZDpCZT90bi5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTp0bi5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6R3J9fSkpLGEubG9hZE1vcmVGaW5pc2hlZChKdC12LmNsYXVzZXMucXVlcnlPYmpb''@;'; put 'put ''Zl0uZWxlbWVudHNbaF0udmFsdWVzLmxlbmd0aD4wKSksdi53aGVyZUNsYXVzZUZuKCksdi5zZXRUb0dsb2JhbHMoKSx2LndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09di5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4OnZuLHF1ZXJ5SW5kZXg6Q259PXYucGVuZGlu''@;'; put 'put ''Z0lOVmFsdWVzU2V0O3Yuc2V0SU5WYWx1ZXModm4sQ24pLHYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9di5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2gocWU9Pnt2LndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChEKXt2LmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3Io''@;'; put 'put ''InB1YmxpYy9nZXRjb2x2YWxzIixEKX19KSgpfWdldFZhbHVlcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITA7bGV0IHY9IiI7dm9pZCAwIT09Zi5saWJkcyYmKHY9Zi5saWJkcyksZi5jbGVhclZhbHVlcyhkLGgpLGYuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9W10sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPSIiLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcj0iPSIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZh''@;'; put 'put ''cmlhYmxlPWE7dHJ5e2lmKHZvaWQgMCE9PWYuY29scyl7Zm9yKGxldCByZT0wO3JlPGYuY29scy5sZW5ndGg7cmUrKylmLmNvbHNbcmVdLk5BTUU9PT1hJiYoZi5zZWxWYXIuaW5kZXg9cmUpO2NvbnN0IE09Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5ERFRZUEU7Zi5jbGF1c2VzLnF1ZXJ5T2Jq''@;'; put 'put ''W2hdLmVsZW1lbnRzW2RdLmRkdHlwZT1NLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlPWYuY29sc1tmLnNlbFZhci5pbmRleF0uVFlQRSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3JzPSJudW0iPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hd''@;'; put 'put ''LmVsZW1lbnRzW2RdLnR5cGU/Zi5udW1PcGVyYXRvcnM6Zi5jaGFyT3BlcmF0b3JzO2xldCBEPVtdO2YuZHluYW1pY1doZXJlQ2xhdXNlJiYoRD1mLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoaCxkKSk7Y29uc3QgWj1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhNKTtm''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhhLHYsRCwxLGYuaW5pdGlhbF9yb3dzKS50aGVuKHJlPT57Y29uc3QgY2U9cmUudmFscyx7U1RBUlRST1c6YmUsUk9XUzpFZSxOT0JTOkJlfT1yZS5tZXRhWzBdO2lmKGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5zdGFy''@;'; put 'put ''dHJvdz1iZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ucm93cz1FZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ubm9icz1CZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPWNlLm1hcChxZT0+e2NvbnN0IHJ0PSJudW0iPT09cmUu''@;'; put 'put ''JHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBkdD1ydCYmKDAsZ2cuaXNTcGVjaWFsTWlzc2luZykocWUuVU5GT1JNQVRURUQpPyIuIitxZS5VTkZPUk1BVFRFRDpxZS5VTkZPUk1BVFRFRDtyZXR1cm4gcnQmJm51bGw9PT1kdCYmKGR0PSIuIikse2Zvcm1hdHRlZDpaP3FlLkZPUk1B''@;'; put 'put ''VFRFRC5zcGxpdCgiLiIpWzBdOnFlLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpkdH19KS5zbGljZSgwLDJlMyksZi53aGVyZUNsYXVzZUZuKCksZi5zZXRUb0dsb2JhbHMoKSxmLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUlu''@;'; put 'put ''ZGV4OnFlLHF1ZXJ5SW5kZXg6cnR9PWYucGVuZGluZ0lOVmFsdWVzU2V0O2Yuc2V0SU5WYWx1ZXMocWUscnQpLGYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2gocmU9PntmLndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChNKXtmLmV2''@;'; put 'put ''ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixNKX19KSgpfWdldGxvZ2ljKGEpe3RoaXMubG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKX1zZXRMb2dpYygpe3RoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9aXNBcnIoYSl7''@;'; put 'put ''cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSYmYS5sZW5ndGg+MCYmdHlwZW9mIGFbMF0uY2hlY2tlZDwidSJ9c2VsZWN0ZWRMYWJlbENoYW5nZShhLGQpe2QudmFsdWVWYXJpYWJsZT0iVmFyaWFibGUiPT09YSxkLnZhbHVlPSIiLHRoaXMud2hlcmVDbGF1c2VGbigpfXZhcmlhYmxlSW5wdXRD''@;'; put 'put ''aGFuZ2UoYSxkLGgsZil7dGhpcy5nZXRWYWx1ZXMoYSxkLGgpfXNldFZhcmlhYmxlVmFsdWVzKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I7IkJFVFdFRU4iIT09ZiYmIklOIiE9PWYmJiJOT1QgSU4iIT09ZiYmKHRoaXMuY2xhdXNl''@;'; put 'put ''cy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT1hLnRvU3RyaW5nKCkpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0VmFyaWFibGVPcGVyYXRvcihhLGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlO2Yg''@;'; put 'put ''aW5zdGFuY2VvZiBBcnJheSYmIklOIiE9PWQmJiJOT1QgSU4iIT09ZCYmKGY9ZiBpbnN0YW5jZW9mIEFycmF5JiYyPT09Zi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZlswXT9mWzBdOiIiKSx0aGlzLmNsZWFyVmFsdWVzT3BlcmF0b3IoYSxoKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0u''@;'; put 'put ''ZWxlbWVudHNbYV0ub3BlcmF0b3I9ZCwoIj0iPT09ZHx8Ij4iPT09ZHx8IjwiPT09ZHx8Ijw9Ij09PWR8fCI+PSI9PT1kfHwiTkUiPT09ZCkmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9ZiksIkJFVFdFRU4iPT09ZCYmKHRoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''altoXS5lbGVtZW50c1thXS52YWx1ZT1bXSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaChmKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaCgiIikpLCgiSU4iPT09ZHx8Ik5PVCBJTiI9PT1kKSYmdGhpcy5zZXRJ''@;'; put 'put ''TlZhbHVlcyhoLGEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0SU5WYWx1ZXMoYSxkKXtjb25zdCBoPVtdLGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlcztmLmxlbmd0aDwxJiYodGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9''@;'; put 'put ''e2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkfSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2KyspaC5wdXNoKHtjaGVja2VkOiExLHZhbDpmW3ZdLmZvcm1hdHRlZH0pO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZT1ofWNsZWFyVmFsdWVzKGEsZCl7dGhpcy5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLnZhbHVlPSIifWNsZWFyVmFsdWVzT3BlcmF0b3IoYSxkKXtsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0ub3BlcmF0b3I7KCJCRVRXRUVOIj09PWh8fCJJTiI9PT1ofHwiTk9UIElOIj09PWh8fCJDT05UQUlO''@;'; put 'put ''UyI9PT1oKSYmdGhpcy5jbGVhclZhbHVlcyhhLGQpfWhhc0ludmFsaWRDbHVhc2UoYSl7Zm9yKGxldCBkIG9mIGEpaWYoZC5pbnZhbGlkQ2xhdXNlPSExLCIiPT09ZC52YWx1ZSYmIk5FIiE9PWQub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YXJpYWJsZXx8''@;'; put 'put ''bnVsbD09PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhbHVlKXJldHVybiBkLmludmFsaWRDbGF1c2U9ITAsITA7cmV0dXJuIGEuaW52YWxpZENsYXVzZT0hMSwhMX1oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKXtmb3IobGV0IGE9MDthPHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7YSsrKXtp''@;'; put 'put ''Zih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmludmFsaWRDbGF1c2U9ITAsITA7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmludmFsaWRDbGF1c2U9ITF9cmV0dXJuITF9YWRk''@;'; put 'put ''Q2xhdXNlKGEpe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB2b2lkIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQ2Fubm90IGFkZCBuZXcgY2xhdXNlLCB3aGVuIG9uZSBvciBtb3JlIGNs''@;'; put 'put ''YXVzZXMgYXJlIGludmFsaWQgb3IgZW1wdHkuIik7dGhpcy5jbGF1c2VBbXQucHVzaCgiIiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxv''@;'; put 'put ''cGVyYXRvcnM6W119KTtsZXQgZD10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljPXR5cGVvZiBkPiJ1Ij8iQU5EIjoiT1IiPT09ZD8iT1IiOiJBTkQiLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9H''@;'; put 'put ''bG9iYWxzKCl9YWRkR3JvdXBDbGF1c2UoKXt0aGlzLmhhc0ludmFsaWRHcm91cENsdWFzZSgpP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQ2Fubm90IGFkZCBuZXcgY2xhdXNlLCB3aGVuIG9uZSBvciBtb3JlIGNsYXVzZXMgYXJlIGludmFsaWQgb3IgZW1wdHku''@;'; put 'put ''Iik6KHRoaXMuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0pLHRoaXMuc2V0VG9HbG9iYWxzKCkpfWlzSW5IdG1sQ29sbGVj''@;'; put 'put ''dGlvbihhLGQpe2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWlmKGRbaF0udmFsdWU9PT1hKXJldHVybiEwO3JldHVybiExfXJlbW92ZUdyb3VwQ2xhdXNlKGEpe3RoaXMuY2xhdXNlcy5xdWVyeU9iai5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKX1yZW1vdmVDbGF1c2UoYSxk''@;'; put 'put ''KXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHMuc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX13aGVyZUNsYXVzZUZuKGE9ITEpe2NvbnN0IGQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmNsYXVzZXMpO2lmKGEm''@;'; put 'put ''JihkLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdKSx2b2lkIDAhPT10aGlzLmxpYmRzKXtsZXQgaD10aGlzLnNhc1N0b3JlU2VydmljZS53aGVyZUNsYXVzZUNyZWF0b3IoZCx0aGlzLmdyb3VwTG9naWMsdGhpcy5saWJkcyk7YXx8KHRoaXMud2hlcmVDbGF1c2U9aC53aGVyZUNsYXVzZSx0aGlz''@;'; put 'put ''LndoZXJlU3RyaW5nPWguc3RyaW5nKX19bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5fcmVtb3ZlUXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZVF1ZXJ5LnN1YnNjcmliZShkPT57YS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD49MSYmKGEu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9iai5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cz1bXSxhLmNsYXVzZXMucXVlcnlPYmpbMF0u''@;'; put 'put ''ZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pLGEud2hlcmVDbGF1c2VGbigpKSl9KSxhLmNvbHVtbnNTdWI9YS5zYXNTdG9yZVNlcnZpY2UuY29sdW1ucy5zdWJz''@;'; put 'put ''Y3JpYmUoZD0+e2xldCBoPWQuZGF0YS5jb2xzOyJob21lIiE9PUtuLnJvb3RQYXJhbSYmImVkaXRvciIhPT1Lbi5yb290UGFyYW18fChhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsS24uZWRpdG9yLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSwidmlldyI9PT1L''@;'; put 'put ''bi5yb290UGFyYW0mJktuLnZpZXdlci5maWx0ZXIuY29scy5sZW5ndGg8MSYmKGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxLbi52aWV3ZXIuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLGEubGliZHN8fChhLmxpYmRzPWQubGliZHMpfSksYS52YWx1ZXNTdWI9''@;'; put 'put ''YS5zYXNTdG9yZVNlcnZpY2UudmFsdWVzLnN1YnNjcmliZShkPT57KCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiZLbi5lZGl0b3IuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEtuLmVkaXRvci5maWx0ZXIudmFscz1KU09OLnBh''@;'; put 'put ''cnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKSwidmlldyI9PT1Lbi5yb290UGFyYW0mJktuLnZpZXdlci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMsS24udmlld2VyLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpfSl9KSgpfW9u''@;'; put 'put ''QXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSxkLGgsZil7dGhpcy5nZXRWYWx1ZXNMb2FkTW9yZShhLGQsaCxmKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmdldEZyb21HbG9iYWxzKCksc2V0VGltZW91dCgoKT0+e2xldCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN2YWxzX3Zhcl9p''@;'; put 'put ''ZDBfMCIpO2EmJmEuZm9jdXMoKX0sNTAwKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uc1N1YiYmdGhpcy5jb2x1bW5zU3ViLnVuc3Vic2NyaWJlKCksdGhpcy52YWx1ZXNTdWImJnRoaXMudmFsdWVzU3ViLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShTdSksR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1xdWVyeSJdXSxpbnB1dHM6e2NhY2hpbmc6ImNhY2hpbmciLHZpZXdib3hJZDoidmlld2JveElkIn0sZmVhdHVyZXM6''@;'; put 'put ''W2RhKFt7cHJvdmlkZTpCZix1c2VWYWx1ZToiZW4tR0IifV0pXSxkZWNsczozOCx2YXJzOjExLGNvbnN0czpbWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzEsImNsci1mbGV4LXJvdyIsImNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wiLCJtLTAiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwibWwt''@;'; put 'put ''MTUiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiaWQiLCJ1c2VQaWNrZXJzIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItcm93Il0sWzEsInNlbGVjdCIsImNsci1jb2wtbWQtMiIsIm1iLTMwIl0sWyJjbHJTZWxlY3QiLCIiLDMs''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywic2VsZWN0ZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItY29sLW1kLTEwIiwibWItMzAiXSxbMSwibGluZS1udW1iZXJzIiwibGFuZ3VhZ2UtbWFya3VwIl0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJv''@;'; put 'put ''Z3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJsYW5ndWFnZS1zcWwiXSxbMSwiY29udGVudCJdLFsxLCJjbGF1c2VzLWNvbnRhaW5lciIsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJjbGF1c2Utcm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywic2VsZWN0ZWQiXSxb''@;'; put 'put ''MSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbGF1c2Utcm93Il0sWzEsImNsYXVzZS1sb2dpYyIsImNsci1jb2wtbWQtMiJdLFsxLCJzZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3Mi''@;'; put 'put ''LCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrIG10LTEwIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJjbGF1c2UtcXVlcnkiLCJjbHItY29sLW1kLTEwIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwiY2xhc3MiLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2si''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyIsMywiaW52YWxpZC1jbGF1c2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsIm10LTEwIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIs''@;'; put 'put ''IjM2IiwxLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2siXSxbMSwidmFyaWFibGUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsxLCJkYXRhbGlzdC13cmFwcGVyIl0sWyJsYWJlbCIsIlZhcmlhYmxlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVu''@;'; put 'put ''dCIsImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3BlcmF0b3ItY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xh''@;'; put 'put ''c3MiLCJ2YWx1ZS1jb2wgZm9ybS1ncm91cCBjbHItY29sLW1kLTMiLDQsIm5nVmFyIl0sWzEsImNsYXVzZS1idXR0b25zIiwiY2xyLWNvbC1tZC0yIiwiYnRuLWdyb3VwIl0sWzEsImJ0biIsImJ0bi13YXJuaW5nIiwiYnRuLWJsb2NrIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIs''@;'; put 'put ''Im1pbnVzIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsxLCJ2YWx1ZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbGFzcyIsImNoZWNrYm94LXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwic2luZ2xlLWZpZWxkLXZhbHMiLDQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwicmFuZ2UtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250YWlucy12YWxzIiw0LCJuZ0lmIl0sWzEsImNoZWNrYm94LXZhbHMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Iiwi''@;'; put 'put ''bmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwic2luZ2xlLWZpZWxkLXZhbHMiXSxbMSwicmFuZ2UtdmFscyJdLFsxLCJmcm9tIl0sWzEsInRvIl0sWzEsImNvbnRhaW5zLXZhbHMiXSxbInR5cGUiLCJ0ZXh0IiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0s''@;'; put 'put ''WzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdl''@;'; put 'put ''Iiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbInR5cGUiLCJ0aW1lIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIs''@;'; put 'put ''InRpbWUiLDMsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJzZWxlY3RlZExhYmVsQ2hhbmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwic2Vj''@;'; put 'put ''b25kTGFiZWwiLCJlbWl0T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFszLCJ2YWx1ZSIsNCwibmdJZiJdLFsibGFiZWwiLCJWYWx1ZSIsMywidmFsdWVDaGFuZ2UiLCJv''@;'; put 'put ''bklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJkaXNhYmxlZCJdLFsxLCJpbi12YWx1ZXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxb''@;'; put 'put ''MSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJuby12YWx1ZXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZm9ybS1ibG9jayIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJuby12YWx1ZXMiXSxb''@;'; put 'put ''MSwiZm9ybS1ibG9jayJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImNsci1jaGVja2Jv''@;'; put 'put ''eC13cmFwcGVyIikoMywiaW5wdXQiLDYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5keW5hbWljV2hlcmVDbGF1c2UsTSl8fChoLmR5bmFtaWNXaGVyZUNsYXVzZT1NKSxDdChNKX0pLGhlKCksZGUoNCwibGFiZWwiLDcpLExlKDUsIkR5bmFtaWMg''@;'; put 'put ''d2hlcmUgY2xhdXNlIiksaGUoKSgpKCksZGUoNiwiZGl2Iiw4KSg3LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDgsImlucHV0Iiw5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudXNlUGlja2VycyxNKXx8KGgudXNlUGlja2Vycz1NKSxDdChNKX0p''@;'; put 'put ''LEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudXNlUGlja2Vyc0NoYW5nZSgpKX0pLGhlKCksZGUoOSwibGFiZWwiLDcpLExlKDEwLCIgVXNlIHBpY2tlcnMgIiksaGUoKSgpKCkoKSxkZSgxMSwiZGl2IiwxMCkoMTIsImRpdiIsMTEpKDEzLCJjbHItc2VsZWN0LWNv''@;'; put 'put ''bnRhaW5lciIpKDE0LCJsYWJlbCIpLExlKDE1LCJHcm91cCBsb2dpYyIpLGhlKCksZGUoMTYsInNlbGVjdCIsMTIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5ncm91cExvZ2ljLE0pfHwoaC5ncm91cExvZ2ljPU0pLEN0KE0pfSksRnQoIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2V0R3JvdXBMb2dpYyhoLmdyb3VwTG9naWMpKX0pLGd0KDE3LFltdCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLGRlKDE4LCJkaXYiLDE0KSgxOSwicHJlIiwxNSksTGUoMjAsIiAgICAgICIpLGd0KDIxLEdtdCw0LDAs''@;'; put 'put ''ImRpdiIsMTYpLExlKDIyLCJcblxuICAgICAgIiksZGUoMjMsImNvZGUiLDE3KSxMZSgyNCksaGUoKSxMZSgyNSwiXG4gICAgIiksaGUoKSgpKCksZGUoMjYsImRpdiIsMTgpKDI3LCJkaXYiLDE5KSxndCgyOCwkbXQsMSwwLCJkaXYiLDIwKSgyOSx1NnQsMTUsOCwiZGl2IiwyMSksaGUoKSgp''@;'; put 'put ''LGd0KDMwLHA2dCw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKDMyLF82dCwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDEsSWMpKDM0LEM2dCwyLDUsIm5nLXRlbXBsYXRlIixudWxsLDIsSWMpKDM2LEU2dCw5LDQsIm5nLXRlbXBsYXRlIixudWxsLDMsSWMpfTImZCYmKGZlKDMpLHBpKCJu''@;'; put 'put ''Z01vZGVsIixoLmR5bmFtaWNXaGVyZUNsYXVzZSksZmUoNSkscGkoIm5nTW9kZWwiLGgudXNlUGlja2VycyksZmUoOCksTWUoImRpc2FibGVkIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKTwxKSxwaSgi''@;'; put 'put ''bmdNb2RlbCIsaC5ncm91cExvZ2ljKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmxvZ2ljT3BlcmF0b3JzKSxmZSg0KSxNZSgibmdJZiIsaC53aGVyZUNsYXVzZUxvYWRpbmcpLGZlKDMpLHdyKGgud2hlcmVDbGF1c2UpLGZlKDMpLFRyKCJjbHItY29sLW1kLTEwIiwobnVsbD09aC5jbGF1c2VzfHxu''@;'; put 'put ''dWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLE1lKCJuZ0Zv''@;'; put 'put ''ck9mIixoLmNsYXVzZXMucXVlcnlPYmopKX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMSxTMixjcCxIbCxvdSxLdSxkcyxJZCxCeSxTaCxFNywkeSxBMixrMixxbCxNZCxUMixubCwkcyxENmUsU3csQm10LGptdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxyND0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2soYSl7YS50YXJnZXQuZm9jdXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcFN0ZWFsRm9jdXMiLCIi''@;'; put 'put ''XV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodil9KX19KX19cmV0dXJuIGN9KSgpO2NvbnN0IFQ2dD1bInNlYXJjaExpYlRyZWVJbnB1dCJdO2Z1bmN0aW9uIEE2dChjLGwpezEmYyYmR3QoMCwiY2xyLWlj''@;'; put 'put ''b24iLDExKX1mdW5jdGlvbiBrNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhl''@;'; put 'put ''KCl9fWZ1bmN0aW9uIEQ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNT''@;'; put 'put ''ZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsQTZ0LDEsMCwiY2xyLWljb24iLDkpKDUsazZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSTZ0KGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIFI2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIGgudmFsdWU9IiIs''@;'; put 'put ''Zi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIEw2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDE4LDIpLGdpKCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1''@;'; put 'put ''cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LEk2dCwxLDAsImNsci1pY29uIiw5KSg1LFI2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKDIpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5z''@;'; put 'put ''ZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gTzZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIFA2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3''@;'; put 'put ''KX1mdW5jdGlvbiBGNnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksTGUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSl9ZnVuY3Rpb24gSDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIs''@;'; put 'put ''MjgpLGd0KDEsRjZ0LDIsMCwic3BhbiIsMjUpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyO2ZlKCksTWUoIm5nSWYiLGEpfX1mdW5jdGlvbiBONnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gVjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''Y2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMykuJGltcGxpY2l0LHY9UmUoMyk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSks''@;'; put 'put ''aGUoKX19ZnVuY3Rpb24gQjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMjksMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0O3JldHVybiBt''@;'; put 'put ''aShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMykuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKSxndCg0LE42''@;'; put 'put ''dCwxLDAsImNsci1pY29uIiw5KSg1LFY2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKDMpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gajZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDMpLiRpbXBs''@;'; put 'put ''aWNpdCx2PVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsMzEpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg2KTtmZSgpLFRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVt''@;'; put 'put ''bkFjdGl2ZShhLkNPTFVSSSkpLGZlKDIpLERyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gejZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxCNnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLGo2dCw0LDMsImNsci10cmVlLW5vZGUiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgy''@;'; put 'put ''KS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBVNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLm5nVmFyLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQsTT1SZSgpO3JldHVybiBDdChoPyIiOk0udGFibGVPbkNsaWNrKGYuVEFCTEVVUkksZix2KSl9KSxzaSgyLDIxKSxndCgzLE82dCwxLDAsImNsci1pY29uIiwyMikoNCxQNnQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMjMpLGxpKCksTGUoNSksaGUoKSxndCg2LEg2dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI0KSg3LHo2dCwzLDIsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpLiRpbXBsaWNpdCxoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKCk7ZmUo''@;'; put 'put ''KSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxNZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgp''@;'; put 'put ''LERyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoMiksTWUoIm5nSWYiLGYuaGFzQ29sdW1ucyl9fWZ1bmN0aW9uIFo2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSku''@;'; put 'put ''JGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4''@;'; put 'put ''cGFuZGVkPWgpLEN0KGgpfSksZ3QoMSxVNnQsOCw5LCJjbHItdG9vbHRpcCIsMTkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDMpO1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNs''@;'; put 'put ''ckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLGZlKCksTWUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBXNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwxNCwxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5saWJyYXJ5TGlzdCkpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBm''@;'; put 'put ''PVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDIsInAiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxKSxmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5saWI9Zi5MSUJSQVJZ''@;'; put 'put ''SUQsQ3Qodi5saWJyYXJ5T25DbGljayh2LmxpYnx8IiIsZixoKSl9KSxHdCgzLCJjbHItaWNvbiIsMTYpLExlKDQpLGhlKCksZ3QoNSxMNnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSg2LFo2dCwyLDUsImNsci10cmVlLW5vZGUiLDE3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBs''@;'; put 'put ''aWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoNCksRHIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlcyks''@;'; put 'put ''ZmUoKSxNZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBZNnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFc2dCw3LDcsImNsci10cmVlLW5vZGUiLDEzKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3Vu''@;'; put 'put ''ZCl9fWZ1bmN0aW9uIEc2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzIpKDEsInNwYW4iLDMzKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWxldCAkNnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9''@;'; put 'put ''ZCx0aGlzLnNlYXJjaExpYklucHV0TGlzdD1uZXcgZmQsdGhpcy50YWJsZU9uQ2xpY2tFbWl0dGVyPW5ldyBLcix0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlcj1uZXcgS3IsdGhpcy5oYXNDb2x1bW5zPSExLHRoaXMucGFnaW5nPSEwLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGli''@;'; put 'put ''PSIiLHRoaXMudGFibGU9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2VhcmNoTGliSW5wdXRMaXN0LmZp''@;'; put 'put ''cnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfW5nT25DaGFuZ2VzKGEpe2EubGlicmFyeUxpc3Q/LmN1cnJlbnRWYWx1ZSYmdGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhp''@;'; put 'put ''cy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJj''@;'; put 'put ''aD10aGlzLmxpYnJhcmllc1NlYXJjaH10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXtkLmluRm9yZWdyb3VuZD0hMDtjb25zdCBmPSgpPT5zZXRUaW1lb3V0''@;'; put 'put ''KCgpPT5oLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKSk7aWYoZC50YWJsZXMpZC5leHBhbmRlZD0hZC5leHBhbmRlZCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJh''@;'; put 'put ''cnk6ZCx0YWJsZXNMb2FkZWQ6ITB9KTtlbHNle2QubG9hZGluZ1RhYmxlcz0hMCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITF9KTtjb25zdCB2PXNldEludGVydmFsKCgpPT57ZC5sb2FkaW5nVGFibGVzfHwoZigpLGNs''@;'; put 'put ''ZWFySW50ZXJ2YWwodikpfSw1MDApfWQuZXhwYW5kZWQmJmYoKSx0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKHRoaXMubGlicmFyeUxpc3QsZCl9dGFibGVPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUw''@;'; put 'put ''LCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihk''@;'; put 'put ''LmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6''@;'; put 'put ''Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNP''@;'; put 'put ''TFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNw''@;'; put 'put ''bGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMu''@;'; put 'put ''bGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9s''@;'; put 'put ''bFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSksR2UodTEpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShUNnQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5zZWFyY2hMaWJJbnB1dExpc3Q9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJzY3JvbGwiLGZ1bmN0''@;'; put 'put ''aW9uKHYpe3JldHVybiBoLmhhbmRsZVNjcm9sbCh2KX0pfSxpbnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJy''@;'; put 'put ''YXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRlciJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsibGliVHJlZU5vZGUiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gt''@;'; put 'put ''bm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xk''@;'; put 'put ''ZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJz''@;'; put 'put ''ZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwi''@;'; put 'put ''Y2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIi''@;'; put 'put ''LCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGci''@;'; put 'put ''LDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMi''@;'; put 'put ''LCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVy''@;'; put 'put ''Iiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci10cmVlIiksZ3QoMSxENnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLFk2dCwyLDEsIm5nLWNvbnRhaW5lciIsNCksaGUoKSxndCgzLEc2dCwzLDAsImRpdiIsNSkpLDImZCYmKGZlKCksTWUo''@;'; put 'put ''Im5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsUzIsY3AsRWgsUGQsZmcsSGwsajAsTDIsWjEsdjcseTcsYjcscWwsbmwsJHMsU3cscjRdLGVu''@;'; put 'put ''Y2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSzZ0PVsicmVzaXplQm94Il0scTZ0PVsiZHJhZ0hhbmRsZUNvcm5lciJdLFg2dD0oYyxsLGEpPT4oe2NvbEhlYWRlcnNIaWRkZW46Yyxjb2xIZWFkZXJzVmlzaWJsZTpsLGhlYWRlclBrczphfSksSjZ0PShjLGwpPT4oe3g6Yyx5''@;'; put 'put ''Omx9KTtmdW5jdGlvbiBRNnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwzNyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxVdSgiVG8gdW5sb2NrIG1vcmUgdGhlbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS52aWV3Ym94X2xpbWl0PyJ2aWV3Ym94Ijoidmlld2JveGVzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gZTh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzOCksR3QoMSwiY2xyLXNwaW5uZXIiLDM5KSxoZSgpKX1mdW5jdGlvbiB0OHQo''@;'; put 'put ''YyxsKXsxJmMmJihkZSgwLCJwIiw0MCksTGUoMSwiIFZpZXdib3ggb3BlbiBsaW1pdCByZWFjaGVkICIpLGhlKCkpfWZ1bmN0aW9uIG44dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRjLXRyZWUiLDQxKSxGdCgibGlicmFyeU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXty''@;'; put 'put ''ZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25DbGljayhoKSl9KSgidGFibGVPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudGFibGVPbkNsaWNrKGgpKX0pLGhlKCl9MiZjJiZNZSgibGlicmFyeUxpc3QiLFJlKCkubGlicmFyaWVzKX1mdW5jdGlv''@;'; put 'put ''biByOHQoYyxsKXsxJmMmJihkZSgwLCJwIiw0MiksTGUoMSwiIFBpY2sgdGFibGUgZnJvbSB0aGUgbGlzdCBvbiB0aGUgbGVmdCAiKSxoZSgpKX1mdW5jdGlvbiBpOHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw1MCl9ZnVuY3Rpb24gYTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYubWluaW1pemUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMSwiY2xyLWljb24iLDIwKSxkZSgyLCJzcGFuIiwxOSksTGUoMywi''@;'; put 'put ''TWluaW1pemUgdmlld2JveCIpLGhlKCkoKX19ZnVuY3Rpb24gbzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYucmVzdG9yZShmKSxDdCh2LnN0''@;'; put 'put ''b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjEpLGRlKDIsInNwYW4iLDE5KSxMZSgzLCJSZXN0b3JlIHZpZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIHM4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5zZWxlY3RWaWV3Ym94KGgpKX0pLGRlKDEsImRpdiIsNDQpLExlKDIpLGd0KDMsaTh0LDEsMCwiY2xyLXNwaW5uZXIiLDQ1KSxoZSgpLGRlKDQsImRpdiIpKDUsImEiLDQ2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0''@;'; put 'put ''IGY9d3QoYSkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5yZXNldFBvc1NpemUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoNiwiY2xyLWljb24iLDQ3KSxkZSg3LCJzcGFuIiwxOSksTGUoOCwiUmVzZXQgcG9zaXRpb24gYW5kIHNpemUiKSxoZSgpKCksZ3QoOSxhOHQsNCww''@;'; put 'put ''LCJhIiw0OCkoMTAsbzh0LDQsMCwiYSIsNDgpLGRlKDExLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYuY2xvc2UoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMTIsImNsci1pY29uIiw0OSksZGUo''@;'; put 'put ''MTMsInNwYW4iLDE5KSxMZSgxNCwiQ2xvc2Ugdmlld2JveCIpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtUcigic2VsZWN0ZWQiLChudWxsPT1kLnNlbGVjdGVkVmlld2JveD9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94LmlkKT09PWEuaWQpLGZlKDIpLFZm''@;'; put 'put ''KCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksZmUoKSxNZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksZmUoMiksVHIoImRpc2FibGVkIiwwPT09YS54JiYwPT09YS55KSxmZSg0KSxNZSgibmdJZiIsIWEubWluaW1pemVkKSxmZSgpLE1lKCJuZ0lmIixhLm1pbmltaXpl''@;'; put 'put ''ZCl9fWZ1bmN0aW9uIGw4dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGM4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNTMpKDIs''@;'; put 'put ''ImFwcC1hdXRvY29tcGxldGUiLDU0LDApLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1oYSgzKSx2PVJlKCkubmdWYXI7cmV0dXJuIEN0KFJlKCkub25Db2xzZWFyY2hDaGFuZ2UoZixoLHYuY29sSGVhZGVyc0hpZGRlbikpfSksZ3QoNCxsOHQsMiwxLCJvcHRp''@;'; put 'put ''b24iLDU1KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcjtmZSgyKSxNZSgiaW5wdXRJZCIsInZpZXdib3gtY29sdW1uLXNlYXJjaCIpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksZmUoMiksTWUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc0hpZGRlbil9fWZ1bmN0aW9uIHU4''@;'; put 'put ''dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBkOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS5vbkNvbFJl''@;'; put 'put ''bW92ZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBoOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU4KSgxLCJzcGFuIiksTGUoMiksZ3QoMyx1OHQsMSwwLCJjbHItaWNvbiIsNTkpLGhlKCksZ3QoNCxkOHQsMSwwLCJjbHItaWNvbiIsNjApLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dCxkPVJlKDIpLm5nVmFyLGg9UmUoKTtkcmUoImNvbC1ib3ggY29sdW1uLSIsYSwiIiksVHIoImN1cnNvci1kZWZhdWx0LWkiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSgicHJpbWFyeUtleUhlYWRlclN0eWxlIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksTWUoImNka0RyYWdEYXRhIixh''@;'; put 'put ''KSgiY2RrRHJhZ0Rpc2FibGVkIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksZmUoMiksVXUoIiAiLGEsIiAiLCJudW0iPT09KG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRh''@;'; put 'put ''YmxlLmhvdFRhYmxlLiRkYXRhZm9ybWF0cy52YXJzW2FdLnR5cGUpPyIobnVtZXJpYykiOiIiLCIgIiksZmUoKSxNZSgibmdJZiIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKCksTWUoIm5nSWYiLCFkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSl9fWZ1bmN0aW9uIGY4dChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDEwKSxMZSgyLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9yZGVyKSIpLGhlKCksZGUoMywiZGl2Iiw1NiksRnQoImNka0Ryb3BMaXN0RHJvcHBlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmNvbHVt''@;'; put 'put ''bnNEcm9wKGgpKX0pLGd0KDQsaDh0LDUsMTMsImRpdiIsNTcpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcjtmZSgzKSxNZSgiY2RrRHJvcExpc3REYXRhIixhLmNvbEhlYWRlcnNWaXNpYmxlKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVu''@;'; put 'put ''Y3Rpb24gcDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MSksZ3QoMSxjOHQsNSwzLCJuZy1jb250YWluZXIiLDUyKSgyLGY4dCw1LDIsIm5nLWNvbnRhaW5lciIsNTIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyO2ZlKCksTWUoIm5nSWYiLGEuY29sSGVhZGVyc0hpZGRlbiksZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGc4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sbGFw''@;'; put 'put ''c2UoaCkpfSksaGUoKX19ZnVuY3Rpb24gbTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDg3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5leHBhbmQoaCkpfSksaGUoKX19ZnVuY3Rp''@;'; put 'put ''b24gdjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDg4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gQ3QoUmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGI4''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDg5KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiB5OHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw5MCksTGUoMSwiTG9hZGluZy4uLiIpLGhlKCkpfWZ1bmN0aW9uIF84dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAs''@;'; put 'put ''ImNsci1pY29uIiw5MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIFJlKCkucmVsb2FkVGFibGVEYXRhKGgpLEN0KGYudmFsdWU9IiIpfSksaGUoKX19ZnVuY3Rpb24gdzh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw5''@;'; put 'put ''NSksR3QoMSwiY2xyLXNwaW5uZXIiLDM5KSxoZSgpKX1mdW5jdGlvbiBDOHQoYyxsKXtpZigxJmMmJkd0KDAsImhvdC10YWJsZSIsOTYpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQsaD1SZSgpO01lKCJob3RJZCIsImhvdEluc3RhbmNlX3ZpZXdib3hfIitkLmlk''@;'; put 'put ''KSgicmVhZE9ubHkiLCEwKSgibW9kaWZ5Q29sV2lkdGgiLGgubWF4V2lkdGhDaGVrZXIpKCJjb3B5UGFzdGUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbnRleHRNZW51KSgibXVsdGlD''@;'; put 'put ''b2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixoLnZpZXdib3hU''@;'; put 'put ''YWJsZXNbYV0uaG90VGFibGUuY29sdW1ucykoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuaGVpZ2h0KSgiY2VsbHMiLGgudmlld2JveFRhYmxl''@;'; put 'put ''c1thXS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImxpY2Vuc2VLZXkiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gUzh0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MiksZ3QoMSx3OHQsMiwwLCJkaXYiLDkzKSgyLEM4dCwxLDE3LCJob3QtdGFibGUiLDk0KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0O19kKCJkaXNwbGF5IixkLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLGQubG9hZGluZ0RhdGEmJmE8MCksZmUoKSxNZSgibmdJZiIsYT4tMSl9fWZ1bmN0aW9uIE04dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjMsMSksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUo''@;'; put 'put ''KS5mb2N1c1ZpZXdib3goaCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudmlld2JveERyYWdFbmRlZChoLGYpKX0pLGRlKDIsImRpdiIsNjQpKDMsInNwYW4iLDY1KSxMZSg0KSxoZSgpLGRlKDUsImRpdiIsNjYp''@;'; put 'put ''LGd0KDYsZzh0LDEsMCwiY2xyLWljb24iLDY3KSg3LG04dCwxLDAsImNsci1pY29uIiw2OCksZGUoOCwiY2xyLWljb24iLDY5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkubWluaW1pemUoaCkpfSksaGUoKSxkZSg5LCJjbHIt''@;'; put 'put ''aWNvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jbG9zZShoKSl9KSxoZSgpKCkoKSxkZSgxMCwic3BhbiIsNzEsMiksRnQoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQs''@;'; put 'put ''dj1oYSgxKSxNPWhhKDExKTtyZXR1cm4gQ3QoUmUoKS5kcmFnTW92ZShNLHYsZixoKSl9KSxoZSgpLGRlKDEyLCJmb3JtIiw3MikoMTMsImRpdiIsNzMpKDE0LCJkaXYiLDc0KSgxNSwiaW5wdXQiLDc1LDMpLEZ0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBs''@;'; put 'put ''aWNpdCxmPWhhKDE2KTtyZXR1cm4gQ3QoUmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLGhlKCksZ3QoMTcsdjh0LDEsMCwiY2xyLWljb24iLDc2KSgxOCxiOHQsMiwwLCJzcGFuIiw3NyksaGUoKSxkZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ciIpKDIxLCJpbnB1dCIsNzgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgyMiwibGFiZWwiKSxMZSgyMywiTnVtZXJp''@;'; put 'put ''YyIpLGhlKCkoKSgpKCksZGUoMjQsImRpdiIsNDQpLGd0KDI1LHk4dCwyLDAsInNwYW4iLDc5KSgyNixfOHQsMSwwLCJjbHItaWNvbiIsODApLGRlKDI3LCJhIiw4MSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9aGEoMTYpO3JldHVybiBSZSgpLm9w''@;'; put 'put ''ZW5GaWx0ZXIoaCksQ3QoZi52YWx1ZT0iIil9KSxHdCgyOCwiY2xyLWljb24iLDgyKSxkZSgyOSwic3BhbiIsODMpLExlKDMwKSxoZSgpKCksZGUoMzEsImNsci1pY29uIiw4NCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLm9w''@;'; put 'put ''ZW5UYWJsZUVkaXQoaCkpfSksaGUoKSgpKCksZ3QoMzIsUzh0LDMsNCwiZGl2Iiw4NSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO19kKCJkaXNwbGF5IixhLm1pbmltaXplZD8ibm9uZSI6IiIpKCJ3aWR0aCIsYS53aWR0aCwicHgiKSgiaGVpZ2h0IixhLmhlaWdo''@;'; put 'put ''dCwicHgiKSgicG9pbnRlci1ldmVudHMiLGEuY29sbGFwc2VkPyJub25lIjoiIikoImJveC1zaGFkb3ciLGEuY29sbGFwc2VkPyJub25lIjoiIiksVHIoImZvY3VzZWQiLGEuZm9jdXNlZCksTWUoImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIixscCgzNCxKNnQsYS54LGEueSkpKCJpZCIsInZp''@;'; put 'put ''ZXdib3hfIithLmlkKSxmZSg0KSxWZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKDIpLE1lKCJuZ0lmIiwhYS5jb2xsYXBzZWQpLGZlKCksTWUoIm5nSWYiLGEuY29sbGFwc2VkKSxmZSgzKSxNZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLGZlKDIp''@;'; put 'put ''LF9kKCJkaXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGZlKDMpLE1lKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSxNZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxmZSgzKSxwaSgibmdN''@;'; put 'put ''b2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg0KSxNZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJmaWx0ZXItYWN0aXZlIiwiMCIhPT1hLmZpbHRlcl9wayksZmUoMiksd3IoYS5maWx0ZXJUZXh0KSxmZSgpLFRyKCJkaXNh''@;'; put 'put ''YmxlZCIsIWQudGFibGVFZGl0RXhpc3RzKGEpKSxmZSgpLE1lKCJuZ1ZhciIsZC5nZXRWaWV3Ym94VGFibGVJbmRleChhKSl9fWZ1bmN0aW9uIHg4dChjLGwpe2lmKDEmYyYmR3QoMCwiYXBwLXF1ZXJ5Iiw5Nyw0KSwyJmMpe2NvbnN0IGE9UmUoKTtNZSgidmlld2JveElkIixudWxsPT1hLmZp''@;'; put 'put ''bHRlcmluZ1ZpZXdib3g/bnVsbDphLmZpbHRlcmluZ1ZpZXdib3guaWQpfX1sZXQgSTZlPSgoKT0+e2NsYXNzIGN7Z2V0IHZpZXdib3hNb2RhbCgpe3JldHVybiB0aGlzLl92aWV3Ym94TW9kYWx9c2V0IHZpZXdib3hNb2RhbChhKXtpZighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZp''@;'; put 'put ''ZXdib3gmJmEpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiVmlld2JveGVzIiksdm9pZCB0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KCExKTt0aGlzLl92aWV3Ym94TW9kYWw9YSxhJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl9Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlKXt0aGlzLm5nWm9uZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPXYsdGhpcy5sb2dnZXJTZXJ2aWNlPU0sdGhpcy5oZWxwZXJTZXJ2aWNlPUQs''@;'; put 'put ''dGhpcy5yb3V0ZXI9Wix0aGlzLmFjdGl2YXRlZFJvdXRlPXJlLHRoaXMuY2RmPWNlLHRoaXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1uZXcgS3IsdGhpcy5saWJpbmZvPW51bGwsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtdLHRo''@;'; put 'put ''aXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5ob3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtzOltd''@;'; put 'put ''LCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0''@;'; put 'put ''ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxjb2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OiIxMDAlIixzZXR0aW5nczp7fSxoaWRkZW5Db2x1bW5zOiEwLG1hbnVhbENvbHVtbk1vdmU6ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VL''@;'; put 'put ''ZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRo''@;'; put 'put ''aXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2LHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBZbX1uZ09uSW5pdCgpe3Ro''@;'; put 'put ''aXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57dGhpcy5saWJyYXJpZXM9ZC5zYXNsaWJzfSkuY2F0Y2goZD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITF9KSx0aGlzLl9xdWVyeT10aGlzLnNh''@;'; put 'put ''c1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e3RoaXMuY2xhdXNlcz1kLm9iaix0aGlzLmZpbHRlckxpYmRzPWQubGliZHN9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5''@;'; put 'put ''LnN1YnNjcmliZShkPT57dGhpcy5ob3RUYWJsZURlZmF1bHQubGljZW5zZUtleT1kfSk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdib3hlczthJiYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyhzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT50aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkxpbmtpbmcgVmlld2JveGVzIikpLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6e319KSk6KHRoaXMudmlld2JveGVzPXRoaXMuZGVjb2RlVXJs''@;'; put 'put ''RGF0YShhKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pKSksdGhpcy5yZUxvYWRWaWV3Ym94dGFibGVzKHRoaXMudmlld2JveGVzKX1uZ0FmdGVyVmlld0luaXQoKXt9Z2V0IHZpZXdib3hMaW1pdFJlYWNoZWQoKXtyZXR1cm4gdGhpcy52aWV3Ym94ZXMu''@;'; put 'put ''bGVuZ3RoPj10aGlzLm1heFZpZXdib3hlc31jbHJNb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdChhKX1saWJyYXJ5T25DbGljayhhKXthLnRhYmxlc0xvYWRlZHx8dGhpcy5sb2FkVGFibGVzKGEubGlicmFyeS5MSUJSQVJZUkVGLGEubGlicmFyeSl9dGFi''@;'; put 'put ''bGVPbkNsaWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZhdWx0Q29uZmlnLHRhYmxlOmEubGliVGFibGUsbGlicmFyeTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0RhdGE6''@;'; put 'put ''ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3Ym94ZXMucHVzaChoKSxzZXRUaW1lb3V0KCgpPT57ZC5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9YCR7''@;'; put 'put ''YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLGQuc25hcFRvR3JpZCgpfSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9yZVNl''@;'; put 'put ''cnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgubGliaW5mb3x8W10sdGhpcy50YWJsZXM9ZixkJiYoZC50YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQubG9h''@;'; put 'put ''ZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQg''@;'; put 'put ''TT1oLnZpZXdib3hUYWJsZXMuZmluZChEPT5ELnZpZXdib3hJZD09PWQuaWQpO2guc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oRD0+e00mJihNLmhvdFRhYmxlLmRhdGE9RC52aWV3ZGF0YSksZihudWxsKX0pLmNhdGNoKCgpPT57''@;'; put 'put ''digpfSl9KX0pKCl9bG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxEPWgudmlld2JveFRhYmxlcy5maW5kKFo9Ploudmlld2JveElkPT09ZC5pZCk7RCYmKCIwIj09PWQuZmlsdGVyX3BrfHwh''@;'; put 'put ''ZC5maWx0ZXJfcGspJiZmKCksaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihaPT57RD9NPSEwOkQ9e3ZpZXdib3hJZDpkLmlkLHZpZXdib3hMaWJEYXRhc2V0OmEsaG90VGFibGU6YUwoaC5ob3RUYWJsZURlZmF1bHQpfSxELmhv''@;'; put 'put ''dFRhYmxlLmRhdGE9Wi52aWV3ZGF0YSxELmhvdFRhYmxlLiRkYXRhZm9ybWF0cz1aLiR2aWV3ZGF0YSxELmhvdFRhYmxlLmNvbHM9Wi5jb2xzLHplZShELmhvdFRhYmxlLmNvbHMsW10sWi4kdmlld2RhdGEpO2xldCByZT1bXSxjZT1bXTtmb3IobGV0IGJlIGluIFoudmlld2RhdGFbMF0pYmUm''@;'; put 'put ''JmNlLnB1c2goYmUpO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKylyZS5wdXNoKHtkYXRhOmNlW2JlXX0pO0QuaG90VGFibGUuaGVhZGVyUGtzPWFMKFouc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpKSxELmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9Y2UuZmlsdGVyKGJl''@;'; put 'put ''PT4hRC5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoYmUpKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49YUwoRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPWNlLmZpbHRlcihiZT0+RC5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVk''@;'; put 'put ''ZXMoYmUpKSxELmhvdFRhYmxlLmNvbEhlYWRlcnM9Y2UsRC5ob3RUYWJsZS5jb2x1bW5zPXJlLGQuY29sdW1ucyYmZC5jb2x1bW5zLmxlbmd0aD4wPyhELmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmU9ZC5jb2x1bW5zLGQuY29sdW1ucz8ubWFwKChiZSxFZSk9Pntjb25zdCBCZT1jZVtiZV0s''@;'; put 'put ''cWU9RC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLmluZGV4T2YoQmUpO3FlPi0xJiYoRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZShxZSwxKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlW0VlXT1CZSl9KSk6RC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNo''@;'; put 'put ''KC4uLkQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoMCwxMCkpLEQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9RC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5maWx0ZXIoYmU9PmJlKSxNfHxoLnZpZXdib3hUYWJsZXMucHVzaChEKSxkLnF1ZXJ5PWguaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kZWVwQ2xvbmUoWi5xdWVyeSksZC5maWx0ZXJUZXh0PVouc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHNldFRpbWVvdXQoKCk9PntoLnVwZGF0ZUhvdENvbHVtbnMoRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxkLmlkKTtjb25zdCBiZT1oLmdldFZpZXdib3hIb3RJbnN0''@;'; put 'put ''YW5jZShkLmlkKTtiZT8udXBkYXRlU2V0dGluZ3Moe21hbnVhbENvbHVtbk1vdmU6RC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlLGFmdGVyR2V0Q29sSGVhZGVyOihFZSxCZSk9Pntjb25zdCBxZT1iZT8uY29sVG9Qcm9wKEVlKTtxZSYmRC5ob3RUYWJsZS5oZWFkZXJQa3MuaW5kZXhPZihx''@;'; put 'put ''ZSk+LTEmJkJlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLEJlLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSxiZT8ucmVuZGVyKCksaC5zZWxlY3RlZFZpZXdib3gmJmgucmVzZXRTZWxlY3RlZFZpZXdib3goZCl9''@;'; put 'put ''KSxmKCl9KS5jYXRjaChaPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopLHYoKX0pfSl9KSgpfXJlTG9hZFZpZXdib3h0YWJsZXMoYSl7YS5tYXAoZD0+e2NvbnN0IGg9YCR7ZC5saWJyYXJ5fS4ke2QudGFibGV9YDtkLmxvYWRpbmdEYXRhPSEwLHRoaXMubG9hZERhdGEoaCxkKS50aGVuKCgp''@;'; put 'put ''PT57ZC5sb2FkaW5nRGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSl7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoaD0+aC52aWV3Ym94SWQ9PT1hLmlkKX1yZXNpemUoYSxkKXtjb25zdCBo''@;'; put 'put ''PWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9aC5sZWZ0LWYubGVmdCtoLndpZHRoLE09aC50b3AtZi50b3AraC5oZWlnaHQ7cmV0dXJuIGQuc3R5bGUud2lkdGg9disicHgiLGQuc3R5bGUuaGVpZ2h0PU0rInB4Iix0aGlzLnNldEFsbEhh''@;'; put 'put ''bmRsZVRyYW5zZm9ybSgpLHRoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMWUzLCgpPT57dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkse3dpZHRoOnYsaGVpZ2h0Ok19fWRyYWdNb3ZlKGEsZCxoLGYpe3RoaXMu''@;'; put 'put ''bmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgdj10aGlzLnJlc2l6ZShhLGQpO2gud2lkdGg9di53aWR0aCxoLmhlaWdodD12LmhlaWdodH0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe3RoaXMucmVzaXplQm94UXVlcnkuZm9yRWFjaChhPT57Y29uc3QgZD1hLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1gaGFuZGxlXyR7YS5uYXRpdmVFbGVtZW50LmlkfWAsZj10aGlzLmRyYWdIYW5kbGVDb3JuZXJRdWVyeS5maW5kKCh2LE0pPT52Lm5hdGl2ZUVsZW1lbnQuaWQ9PT1oKTt0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShmPy5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LGQsImJvdGgiKX0pfXNldEhhbmRsZVRyYW5zZm9ybShhLGQsaCl7Y29uc3QgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PWQud2lkdGgtZi53aWR0aCxNPWQuaGVpZ2h0LWYuaGVpZ2h0O3YrPTUsTSs9NSwieCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0''@;'; put 'put ''ZSgke3Z9cHgsIDApYCksInkiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoMCwgJHtNfXB4KWApLCJib3RoIj09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dn1weCwgJHtNfXB4KWApfWZvY3VzVmlld2JveChhKXt0aGlzLnZpZXdib3hlcy5tYXAoZD0+''@;'; put 'put ''e2QuZm9jdXNlZD0hMX0pLGEuZm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKGEsZCl7bGV0IGY9YS5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLng9Zi5sZWZ0LGQueT1mLnRvcCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgpe2Nv''@;'; put 'put ''bnN0IGE9d2luZG93LmlubmVyV2lkdGgsZD13aW5kb3cuaW5uZXJIZWlnaHQsTT1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLEQ9TWF0aC5mbG9vcih0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksY2U9KGEtNSooTSsxKSkvTSxiZT0oYS01KihEKzEpKS9EO2xldCBCZT0wLHJ0''@;'; put 'put ''PShkLTI1MC02MCkvMixwdD0wLGR0PTA7Zm9yKGxldCBKdD0wO0p0PHRoaXMudmlld2JveGVzLmxlbmd0aDtKdCsrKXtsZXQgdm49dGhpcy52aWV3Ym94ZXNbSnRdLENuPSEoSnQ+TS0xKTtjb25zdCB0bj1Dbj9jZTpiZTshQ24mJjA9PT1kdCYmKHB0PTAsZHQrKyxCZT0wKSx2bi54PTUrQmUr''@;'; put 'put ''cHQqKHRuKzUpLHZuLnk9MjUwK2R0KihydCs1KSx2bi53aWR0aD10bix2bi5oZWlnaHQ9cnQscHQrK310aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KX1taW5pbWl6ZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2go''@;'; put 'put ''YT0+e2EubWluaW1pemVkPSEwfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXNldFBvc1NpemUoYSl7YS54PXdpbmRvdy5pbm5lcldpZHRoLXRoaXMu''@;'; put 'put ''ZGVmYXVsdENvbmZpZy53aWR0aCxhLnk9dGhpcy5kZWZhdWx0Q29uZmlnLnksYS53aWR0aD10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS5oZWlnaHQ9dGhpcy5kZWZhdWx0Q29uZmlnLmhlaWdodCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9bWluaW1pemUoYSl7YS5taW5pbWl6ZWQ9ITAsdGhp''@;'; put 'put ''cy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmUoYSl7YS5taW5pbWl6ZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNvbGxhcHNlKGEpe2EuY29sbGFwc2VkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1leHBhbmQoYSl7YS5jb2xsYXBzZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNs''@;'; put 'put ''b3NlKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZEluZGV4KGY9PmYuaWQ9PT1hLmlkKSxoPXRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKTtkPi0xJiZ0aGlzLnZpZXdib3hlcy5zcGxpY2UoZCwxKSxoPi0xJiZ0aGlzLnZpZXdib3hUYWJs''@;'; put 'put ''ZXMuc3BsaWNlKGgsMSksdGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkPT09YS5pZCYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpLEtuLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c2VsZWN0Vmlld2JveChh''@;'; put 'put ''KXt2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpOmEuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/dGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpOnRoaXMucmVz''@;'; put 'put ''ZXRTZWxlY3RlZFZpZXdib3goYSl9Y29sdW1uc0Ryb3AoYSl7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKGEucHJldmlvdXNDb250YWluZXI9PT1hLmNvbnRhaW5lcj9kMWUoYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5j''@;'; put 'put ''dXJyZW50SW5kZXgpOmZ1bmN0aW9uIFZGZShjLGwsYSxkKXtjb25zdCBoPUF4KGEsYy5sZW5ndGgtMSksZj1BeChkLGwubGVuZ3RoKTtjLmxlbmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsYS5jb250YWluZXIuZGF0YSxhLnBy''@;'; put 'put ''ZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLml0ZW0uZGF0''@;'; put 'put ''YSxhLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2NvbnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYmKHRo''@;'; put 'put ''aXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChkKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdi''@;'; put 'put ''b3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJlbW92ZShhKXtpZih0aGlzLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoZCwxKSx0aGlz''@;'; put 'put ''LnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJ''@;'; put 'put ''ZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3RlZFZpZXdib3goYSl7dGhpcy5zZWxlY3Rl''@;'; put 'put ''ZFZpZXdib3g9YSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGQ9PmQudmlld2JveElkPT09YS5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12b2lk''@;'; put 'put ''IDB9c3RvcFByb3BhZ2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0aGlzLnNlbGVjdFZpZXdib3goYSk7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKV07dGhpcy5maWx0ZXJMaWJkcz1gJHthLmxpYnJhcnl9''@;'; put 'put ''LiR7YS50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGQuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRpdChh''@;'; put 'put ''KXtjb25zdCBkPWEubGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNlKDAsbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5nVmll''@;'; put 'put ''d2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVEYXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLEtuLnZpZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRdPXRo''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaFopKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJMb2FkaW5nPSEwO2xldCBhPVtdLGQ9W107aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7''@;'; put 'put ''e2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7Y29uc3Qgdj1oW2ZdLmVsZW1lbnRzO2E9di5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIG51bGw9PT1NLnZhcmlhYmxlfSksYS5sZW5ndGgmJmQucHVzaCh2KX19aWYoZC5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNlcyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O3Ro''@;'; put 'put ''aXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHY9Pntjb25zdCBNPXtmaWx0ZXJDbGF1c2VzOltdfTt2LmVsZW1lbnRzLmZvckVhY2goRD0+e00uZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSksTS5jbGF1c2VMb2dpYz12LmNsYXVzZUxvZ2lj''@;'; put 'put ''LGguZmlsdGVyR3JvdXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNKSl9KTtjb25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHRoaXMuZmlsdGVyTGliZHMsZikudGhl''@;'; put 'put ''bih2PT57dGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz12LnJlc3VsdFswXS5GSUxURVJfUkssdGhpcy5sb2FkRGF0YSh0aGlzLmZpbHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMX0pLHRo''@;'; put 'put ''aXMudmlld2JveENoYW5nZWQoKX0pLmNhdGNoKHY9Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5nPSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1hLnZh''@;'; put 'put ''bHVlLHY9ZC5saWJyYXJ5KyIuIitkLnRhYmxlLE09cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgRD1oLnZpZXdib3hUYWJsZXMuZmluZChaPT5aLnZpZXdib3hJZD09PWQuaWQpO0QmJih5aWVsZCBoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChmLGQuc2VhcmNoTnVt''@;'; put 'put ''ZXJpYyx2LE0pLnRoZW4oWj0+e1ouc2FzcGFyYW1zfHxaLnZpZXdEYXRhP0QuaG90VGFibGUuZGF0YT1aLnZpZXdkYXRhOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKFo9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoWil9KSxkLnNlYXJjaExvYWRpbmc9ITEpfSkoKX1yZWxvYWRUYWJsZURh''@;'; put 'put ''dGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gO2EubG9hZGluZ0RhdGE9ITAseWllbGQgZC5yZWxvYWREYXRhKGgsYSksYS5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNp''@;'; put 'put ''emUiKX0pKCl9dXBkYXRlSG90Q29sdW1ucyhhLGQpe3RoaXMudXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpLHRoaXMuc2V0Q29sdW1uT3JkZXIoZCl9dXBkYXRlQ29sdW1uT3JkZXJIb3QoYSxkLGgpe2NvbnN0IGY9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoaCk7aWYoZil7Y29uc3Qg''@;'; put 'put ''dj1mLnByb3BUb0NvbChhKTtmLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpLm1vdmVDb2x1bW4odixkKSxmLnJlbmRlcigpLHRoaXMuc2V0Q29sdW1uT3JkZXIoaCl9fXRhYmxlRWRpdEV4aXN0cyhhKXtjb25zdCBkPUtuLmVkaXRvci5saWJzQW5kVGFibGVzLGg9YS5saWJyYXJ5O3Jl''@;'; put 'put ''dHVybiEhZFtoXSYmZFtoXS5pbmNsdWRlcyhhLnRhYmxlKX1zZXRDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmQoaD0+aC5pZD09PWEpO2lmKGQpe2NvbnN0IGg9dGhpcy5jcmVhdGVDb2x1bW5PcmRlcihhKTtkLmNvbHVtbnM9aC5sZW5ndGg+MD9oOmQuY29sdW1u''@;'; put 'put ''c310aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y3JlYXRlQ29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShhKTtpZighZClyZXR1cm5bXTtjb25zdCBoPWQuZ2V0Q29sSGVhZGVyKCksZj10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xI''@;'; put 'put ''ZWFkZXJzO2lmKCFmKXJldHVybltdO2NvbnN0IHY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGU/LmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aHx8NSxNPVtdO3JldHVybiBoLm1hcCgoRCxaKT0+e2lmKFo8dil7Y29uc3QgcmU9Zi5pbmRleE9mKEQpO3JlPi0xJiZNLnB1c2go''@;'; put 'put ''cmUpfX0pLE19dXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpe2NvbnN0IGg9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZCk7aWYoaCl7Y29uc3QgZj1hLm1hcCh2PT5oLnByb3BUb0NvbCh2KSk7aC51cGRhdGVTZXR0aW5ncyh7aGlkZGVuQ29sdW1uczp7Y29sdW1uczpmfX0pLGgucmVu''@;'; put 'put ''ZGVyKCl9fWdldFZpZXdib3hIb3RJbnN0YW5jZShhKXtyZXR1cm4gYT90aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZShgaG90SW5zdGFuY2Vfdmlld2JveF8ke2F9YCk6dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhp''@;'; put 'put ''cy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2aWV3Ym94ZXM6ZH0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZpbHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9y''@;'; put 'put ''KGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEtuLnZpZXdib3hlc1thLmlkXXx8KEtuLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5m''@;'; put 'put ''LnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hlcy4ke2EuaWR9YDtLbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksS24udmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2EudGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6''@;'; put 'put ''ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRhYmxlLmNvbHMpfX1lbmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxmKT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2gu''@;'; put 'put ''Y29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8xOjB9LSR7aC5maWx0ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8iLSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYmKGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9''@;'; put 'put ''W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAodj0+e2NvbnN0IE09di5zcGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoTVswXSksbGlicmFyeTpNWzFdLHRhYmxlOk1bMl0sd2lkdGg6cGFyc2VJbnQoTVszXSksaGVpZ2h0OnBhcnNlSW50KE1bNF0pLHg6cGFyc2VJbnQoTVs1XSkseTpw''@;'; put 'put ''YXJzZUludChNWzZdKSxjb2xsYXBzZWQ6ISFwYXJzZUludChNWzddKSxtaW5pbWl6ZWQ6ISFwYXJzZUludChNWzhdKSxjb2x1bW5zOk1bMTBdPy5zcGxpdCgiLCIpLm1hcChEPT5wYXJzZUludChEKSl8fFtdLGZpbHRlcl9wazpNWzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/''@;'; put 'put ''LnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoV2EpLEdlKHUxKSxHZShCcyksR2UodmMpLEdlKGtoKSxHZShTZCksR2UoU3UpLEdlKExzKSxHZShDdSksR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3Ym94ZXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYocWEoSzZ0LDUpLHFhKHE2dCw1KSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5yZXNpemVCb3hRdWVyeT1mKSxDaShmPVNpKCkpJiYoaC5kcmFnSGFuZGxlQ29ybmVy''@;'; put 'put ''UXVlcnk9Zil9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1vZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxkZWNsczo1Nix2YXJzOjIzLGNvbnN0czpbWyJpbnB1dCIsIiJdLFsicmVzaXplQm94IiwiIl0sWyJkcmFnSGFuZGxl''@;'; put 'put ''Q29ybmVyIiwiIl0sWyJzZWFyY2hFbCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicm9vdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9k''@;'; put 'put ''YWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsImxpY2VuY2Utbm90aWNlIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiXSxbMSwiYWRkLW5ldyIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJtdC0wIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15''@;'; put 'put ''LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50''@;'; put 'put ''bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFw''@;'; put 'put ''ZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJj''@;'; put 'put ''bHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRu''@;'; put 'put ''LW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIs''@;'; put 'put ''ImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1v''@;'; put 'put ''ZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmlld2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsaWNlbmNlLW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1j''@;'; put 'put ''ZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiwibGlicmFyeUxpc3QiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZp''@;'; put 'put ''ZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9s''@;'; put 'put ''ZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwi''@;'; put 'put ''dHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJtbC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25m''@;'; put 'put ''aWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5zIiwidGFiaW5kZXgiLCIwIiwzLCJ2YWx1ZUNoYW5nZSIsImlu''@;'; put 'put ''cHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REcm9wcGVkIiwiY2RrRHJvcExpc3REYXRhIl0sWyJjZGtEcmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZhdWx0LWki''@;'; put 'put ''LCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBlIiwidHJh''@;'; put 'put ''c2giLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwi''@;'; put 'put ''IiwidGFiaW5kZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIl0sWyJjZGtEcmFnSGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIs''@;'; put 'put ''ImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImNka0RyYWdNb3ZlZCIsImlkIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdl''@;'; put 'put ''ZW4iLCJjbHItZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJj''@;'; put 'put ''aC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJp''@;'; put 'put ''Y19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFz''@;'; put 'put ''cG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1sZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRpcC1jb250ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIsInBlbmNp''@;'; put 'put ''bCIsMSwiY2xpY2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNoIiwzLCJj''@;'; put 'put ''bGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJdLFsiY2xhc3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRvIHRleHQt''@;'; put 'put ''Y2VudGVyIiw0LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3Bv''@;'; put 'put ''cnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIs''@;'; put 'put ''Im15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29y''@;'; put 'put ''dGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmlld2JveElk''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiw1KSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5jbHJNb2RhbE9wZW5DaGFuZ2Uodil9KSxkZSgxLCJoMyIsNiksTGUoMiwiIFZpZXdib3hlcyAiKSxndCgzLFE2dCwy''@;'; put 'put ''LDIsInNwYW4iLDcpLGhlKCksZGUoNCwiZGl2Iiw4KSg1LCJkaXYiLDkpKDYsInAiLDEwKSxMZSg3LCJBZGQgbmV3IiksaGUoKSxHdCg4LCJociIsMTEpLGd0KDksZTh0LDIsMCwiZGl2IiwxMikoMTAsdDh0LDIsMCwicCIsMTMpKDExLG44dCwxLDEsImRjLXRyZWUiLDE0KSxoZSgpLGRlKDEy''@;'; put 'put ''LCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsInAiLDEwKSxMZSgxNSwiQ3VycmVudGx5IG9wZW4iKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zbmFwVG9HcmlkKCl9KSxHdCgxOCwiY2xyLWljb24iLDE4KSxkZSgxOSwic3Bh''@;'; put 'put ''biIsMTkpLExlKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksaGUoKSgpLGRlKDIxLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm1pbmltaXplQWxsKCl9KSxHdCgyMiwiY2xyLWljb24iLDIwKSxkZSgyMywic3BhbiIsMTkpLExlKDI0LCJNaW5pbWl6ZSBhbGwg''@;'; put 'put ''dmlld2JveGVzIiksaGUoKSgpLGRlKDI1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3RvcmVBbGwoKX0pLEd0KDI2LCJjbHItaWNvbiIsMjEpLGRlKDI3LCJzcGFuIiwxOSksTGUoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSgpKCksR3QoMjks''@;'; put 'put ''ImhyIiksZ3QoMzAscjh0LDIsMCwicCIsMjIpKDMxLHM4dCwxNSwxMCwiZGl2IiwyMyksZGUoMzIsImRpdiIsMjQpKDMzLCJwIiwyNSksTGUoMzQpLGhlKCkoKSxHdCgzNSwiaHIiKSxndCgzNixwOHQsMywyLCJkaXYiLDI2KSxoZSgpKCksZGUoMzcsImRpdiIsMjcpKDM4LCJidXR0b24iLDI4''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudmlld2JveE1vZGFsPSExfSksTGUoMzksIiBPayAiKSxoZSgpKCkoKSxkZSg0MCwiZGl2IiwyOSksZ3QoNDEsTTh0LDMzLDM3LCJkaXYiLDMwKSxoZSgpLGRlKDQyLCJjbHItbW9kYWwiLDMxKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5maWx0ZXIsdil8fChoLmZpbHRlcj12KSx2fSksZGUoNDMsImgzIiwzMiksTGUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLGRlKDQ1LCJzcGFuIiksTGUoNDYpLGhlKCkoKSxkZSg0NywiZGl2IiwzMyksZ3QoNDgseDh0LDIsMSwi''@;'; put 'put ''YXBwLXF1ZXJ5IiwzNCksaGUoKSxkZSg0OSwiZGl2IiwyNykoNTAsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXNldEZpbHRlcigpfSksTGUoNTEsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg1MiwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBoLmZpbHRlcj0hMX0pLExlKDUzLCIgQ2FuY2VsICIpLGhlKCksZGUoNTQsImJ1dHRvbiIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zZW5kQ2xhdXNlKCl9KSxMZSg1NSwiIE9rICIpLGhlKCkoKSgpKSwyJmQmJihNZSgiY2xyTW9kYWxPcGVuIixoLnZp''@;'; put 'put ''ZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgzKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKDYpLE1lKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKCksTWUo''@;'; put 'put ''Im5nSWYiLGgudmlld2JveExpbWl0UmVhY2hlZCksZmUoKSxNZSgibmdJZiIsaC52aWV3Ym94TW9kYWwpLGZlKDE5KSxNZSgibmdJZiIsaC52aWV3Ym94ZXMubGVuZ3RoPDEpLGZlKCksTWUoIm5nRm9yT2YiLGgudmlld2JveGVzKSxmZSgzKSxEcigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9''@;'; put 'put ''aC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmaC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1oLnNlbGVjdGVkVmlld2Jv''@;'; put 'put ''eFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLGZlKDIpLE1lKCJuZ1ZhciIscE0oMTksWDZ0LG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3''@;'; put 'put ''Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFi''@;'; put 'put ''bGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksZmUoNSksTWUoIm5nRm9yT2Yi''@;'; put 'put ''LGgudmlld2JveGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLFV1KCIgIyIsbnVsbD09aC5maWx0ZXJpbmdWaWV3Ym94P251bGw6aC5maWx0ZXJpbmdWaWV3Ym94LmlkLCIgIixo''@;'; put 'put ''LmZpbHRlckxpYmRzLCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5maWx0ZXJMb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsSGwsb3UsS3UsajAsUDIsZHMsUTFlLElkLEJ5LFNoLFoxLFJkLGw3LEEyLGsyLE1kLG5sLG83LCRzLHlw''@;'; put 'put ''LFhlZSxEXyx5MWUsYjFlLFRZLHYxZSxrNmUsJDZ0LFN3LHRFXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFI2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZU92ZXI9bmV3IEtyLHRoaXMuZmlsZURyb3A9bmV3IEtyLHRoaXMuZWxlbWVudD1hfW9uRHJv''@;'; put 'put ''cChhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyPy5maWxlcyxoPVtdO2lmKGQpZm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaC5wdXNoKGRbZl0pO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoaCksdGhpcy5maWxlT3Zlci5lbWl0KCExKSx0aGlz''@;'; put 'put ''LmZpbGVEcm9wLmVtaXQoaCl9b25EcmFnT3ZlcihhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyO2lmKGQpe2lmKC0xPT09ZC50eXBlcy5pbmRleE9mKCJGaWxlcyIpKXJldHVybjtkLmRyb3BFZmZlY3Q9ImNvcHkifXRoaXMuZmlsZU92ZXIuZW1pdCgh''@;'; put 'put ''MCl9b25EcmFnTGVhdmUoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSksdGhpcy5maWxlT3Zlci5lbWl0KCExKX1fcHJldmVudEFuZFN0b3AoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVEcm9wIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImRyb3AiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJvcCh2KX0pKCJkcmFn''@;'; put 'put ''b3ZlciIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnT3Zlcih2KX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ0xlYXZlKHYpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZU92ZXI6ImZpbGVPdmVyIixmaWxlRHJvcDoiZmls''@;'; put 'put ''ZURyb3AifX0pfX1yZXR1cm4gY30pKCksTDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlU2VsZWN0ZWQ9bmV3IEtyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRl''@;'; put 'put ''cy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0''@;'; put 'put ''aXZlRWxlbWVudC52YWx1ZT0iIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2hhbmdlKCl9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBFOHQoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJwIiw4KSxMZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRvIHNob3cuICIpLGhlKCkpfWZ1bmN0aW9uIFQ4dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImNsci1kZy1jb2x1bW4iKSxMZSgyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihh''@;'; put 'put ''LmNvbE5hbWV8fGEuY29sS2V5KX19ZnVuY3Rpb24gQTh0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLWRnLWNlbGwiKSxMZSgyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGRbYS5jb2xLZXldKX19ZnVuY3Rpb24g''@;'; put 'put ''azh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoZi5vblJvd0NsaWNrP2Yub25Sb3dDbGljayhoKToiIil9KSxndCgx''@;'; put 'put ''LEE4dCwzLDEsIm5nLWNvbnRhaW5lciIsNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLGEuY29sc1RvRGlzcGxheSl9fWZ1bmN0aW9uIEQ4dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIsMTEpKDEsImNsci1kYXRh''@;'; put 'put ''Z3JpZCIpLGd0KDIsVDh0LDMsMSwibmctY29udGFpbmVyIiw1KSgzLGs4dCwyLDEsImNsci1kZy1yb3ciLDEyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSxNZSgibmdGb3JPZiIsYS5jb2xzVG9EaXNwbGF5KSxmZSgpLE1lKCJuZ0Zvck9mIixhLm1ldGEpfX1m''@;'; put 'put ''dW5jdGlvbiBJOHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiw5KSxMZSgyKSxoZSgpLGd0KDMsRDh0LDQsMiwiY2xyLXRhYi1jb250ZW50IiwxMCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtmZSgyKSx3cihhLm5hbWUpLGZlKCks''@;'; put 'put ''TWUoImNscklmQWN0aXZlIiwwPT09ZCl9fWxldCBPNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3Blbj0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IsdGhpcy5yb3dDbGlja2VkPW5ldyBLcix0aGlzLmRzbWV0YVRh''@;'; put 'put ''YnM9W10sdGhpcy52ZXJzaW9uc1RhYnM9W10sdGhpcy50YWJzPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRhPy5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiYodGhpcy5wYXJzZURTTWV0YSgpLHRoaXMucGFyc2VWZXJzaW9ucygpLHRoaXMudGFicz1bLi4udGhpcy5kc21l''@;'; put 'put ''dGFUYWJzLC4uLnRoaXMudmVyc2lvbnNUYWJzXSl9cGFyc2VEU01ldGEoKXt0aGlzLmRzbWV0YVRhYnM9W107Zm9yKGxldCBhIG9mIHRoaXMuZHNtZXRhKXtsZXQgZD10aGlzLmRzbWV0YVRhYnMuZmluZEluZGV4KGg9PmgubmFtZT09PWEuT0RTX1RBQkxFKTtkPDAmJihkPXRoaXMuZHNtZXRh''@;'; put 'put ''VGFicy5wdXNoKHtuYW1lOmEuT0RTX1RBQkxFLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6Ik5BTUUifSx7Y29sS2V5OiJWQUxVRSJ9XSxtZXRhOltdLG9uUm93Q2xpY2s6aD0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGgpfX0pLTEpLHRoaXMuZHNtZXRhVGFi''@;'; put 'put ''c1tkXS5tZXRhLnB1c2goYSl9fXBhcnNlVmVyc2lvbnMoKXt0aGlzLnZlcnNpb25zVGFicz1be25hbWU6IlZFUlNJT05TIix0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJMT0FEX1JFRiJ9LHtjb2xLZXk6IlVTRVJfTk0ifSx7Y29sS2V5OiJWRVJTSU9OX0RU''@;'; put 'put ''VE0ifSx7Y29sS2V5OiJORVdfUkVDT1JEUyIsY29sTmFtZToiQUREIn0se2NvbEtleToiQ0hBTkdFRF9SRUNPUkRTIixjb2xOYW1lOiJNT0QifSx7Y29sS2V5OiJERUxFVEVEX1JFQ09SRFMiLGNvbE5hbWU6IkRFTCJ9LHtjb2xLZXk6IlZFUlNJT05fREVTQyJ9XSxtZXRhOnRoaXMudmVyc2lv''@;'; put 'put ''bnMsb25Sb3dDbGljazphPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoYSl9fV19b25PcGVuQ2hhbmdlKGEpe3RoaXMub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdlKCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kYXRhc2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSIsdmVyc2lvbnM6InZlcnNpb25zIn0sb3V0cHV0czp7b3BlbkNoYW5nZToi''@;'; put 'put ''b3BlbkNoYW5nZSIscm93Q2xpY2tlZDoicm93Q2xpY2tlZCJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6MTAsdmFyczo1LGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUi''@;'; put 'put ''LCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsckxheW91dCIsInZlcnRpY2FsIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwiaWQiLCJsaW5rMSJdLFsiaWQiLCJjb250ZW50MSIsImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyIHctMTAwIiw0LCJjbHJJZkFjdGl2ZSJdLFsiaWQiLCJjb250ZW50MSIsMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCJdLFsiY2xhc3MiLCJjbGlja2FibGUtcm93IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsaWNrYWJsZS1y''@;'; put 'put ''b3ciLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk9wZW5DaGFuZ2Uodil9KSxkZSgxLCJoMyIsMSksTGUoMiwiRGF0YXNldCBNZXRhIiksaGUo''@;'; put 'put ''KSxkZSgzLCJkaXYiLDIpLGd0KDQsRTh0LDIsMCwicCIsMyksZGUoNSwiY2xyLXRhYnMiLDQpLGd0KDYsSTh0LDQsMiwiY2xyLXRhYiIsNSksaGUoKSgpLGRlKDcsImRpdiIsNikoOCwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DbG9zZUNsaWNrKCl9KSxM''@;'; put 'put ''ZSg5LCIgQ2xvc2UgIiksaGUoKSgpKCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgub3BlbikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxmZSg0KSxNZSgibmdJZiIsaC5kc21ldGFUYWJzLmxlbmd0aDwxKSxmZSgyKSxNZSgibmdGb3JPZiIsaC50YWJz''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQW0sUWYsUjcsRW0sU3AsTDcsdF8sVG0sazcseG0sRDcsb3UsS3UsSHksX20sQ20seDcsd20seW0sUzddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUjh0PSgpPT5bIm51bWVyaWMiLHZvaWQgMF0sUDZlPSgpPT5bImF1dG9j''@;'; put 'put ''b21wbGV0ZSIsImF1dG9jb21wbGV0ZS5jdXN0b20iXSxKZWU9KGMsbCk9Pih7Y29sOmMsY29sSW5kZXg6bH0pLEw4dD0oKT0+W3ZvaWQgMF0sTzh0PSgpPT5bIlNPRlRTRUxFQ1QiLCJTT0ZUU0VMRUNUX0hPT0siXTtmdW5jdGlvbiBQOHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNSks''@;'; put 'put ''TGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksd3IoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpfX1mdW5jdGlvbiBGOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmdl''@;'; put 'put ''bmVyYXRlRWRpdFJlY29yZFVybCgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJkaXNhYmxlZCIsYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nKSxmZSgpLERyKCIgIixhLmdlbmVyYXRlZFJlY29yZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJh''@;'; put 'put ''dGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5jdGlvbiBIOHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFA4dCwyLDEsInNwYW4iLDEzKSgyLEY4dCwyLDIsImJ1dHRvbiIsMTQpLGxpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSksZmUoKSxNZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKX19ZnVuY3Rpb24gTjh0''@;'; put 'put ''KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNykoMSwic3BhbiIsMTgpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gVjh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIEI4dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDMyKSxMZSgxLCIgTG9hZGlu''@;'; put 'put ''Zy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBqOHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gejh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWlucHV0LWNvbnRhaW5lciIsMzUpKDEsImlucHV0IiwzNiksRnQoImZvY3VzaW4iLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGY9UmUoMykuaW5kZXg7cmV0dXJuIEN0KFJlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25z''@;'; put 'put ''dCBmPVJlKDMpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiB2LnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpLEN0KHYuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITApfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0LHY9''@;'; put 'put ''UmUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKS4kaW1wbGljaXQsZD1SZSgyKTtUcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlk''@;'; put 'put ''Q29scy5pbmNsdWRlcyhhLmtleSkpLGZlKCkscGkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBVOHQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIFo4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsVTh0LDEsMCwibmctY29udGFpbmVyIiwzNyks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPVJlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1JlKDIpO2NvbnN0IGY9aGEoMTYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbHAoMixKZWUsZCxoKSl9fWZ1bmN0aW9uIFc4dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKHNpKDApLGd0KDEsejh0LDIsMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMzQpKDIsWjh0LDIsNSwiZGl2Iiw1KSxsaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQsZj1SZSgyKTtmZSgpLE1lKCJuZ0lmIixHcygyLFI4dCkuaW5jbHVkZXMobnVsbD09Zi5jdXJy''@;'; put 'put ''ZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6YS5lZGl0b3IpKSxmZSgpLE1lKCJuZ0lmIixHcygzLFA2ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1''@;'; put 'put ''cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6ZC5lZGl0b3IpKX19ZnVuY3Rpb24gWTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRleHRhcmVhIiwzOCwxKSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24o''@;'; put 'put ''aCl7d3QoYSk7Y29uc3QgZj1SZSgzKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9UmUoMykuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS4kaW1wbGljaXQsdj1SZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yu''@;'; put 'put ''a2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxMZSgzLCIgICAgICAgICAgICAgICAgICAiKSxoZSgpLGRlKDQsImNsci1jb250cm9sLWhlbHBlciIpLExlKDUpLGhlKCkoKX1pZigyJmMpe2xldCBhLGQsaDtjb25zdCBmPWhhKDIpLHY9UmUoMykuJGltcGxpY2l0''@;'; put 'put ''LE09UmUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixNLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyh2LmtleSkpKCJub3QtY2hhciIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2Lmtl''@;'; put 'put ''eSkpP251bGw6YS50eXBlKSxNZSgicm93cyIsdi52YWx1ZS5sZW5ndGg+ODA/NjoxKSxwaSgibmdNb2RlbCIsTS5jdXJyZW50UmVjb3JkW3Yua2V5XSksTWUoIm1heExlbmd0aCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0''@;'; put 'put ''b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6ZC5sZW5ndGgpLGZlKDQpLFV1KCIiLGYudmFsdWUubGVuZ3RoLCIgLyAiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmgubGVuZ3RoLCIi''@;'; put 'put ''KX19ZnVuY3Rpb24gRzh0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiAkOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEc4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtSZSgyKTtjb25zdCBm''@;'; put 'put ''PWhhKDE2KTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIsSmVlLGQsaCkpfX1mdW5jdGlvbiBLOHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFk4dCw2LDksImNsci10ZXh0YXJlYS1jb250YWluZXIiLDUpKDIsJDh0LDIsNSwi''@;'; put 'put ''ZGl2Iiw1KSxsaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQsZj1SZSgyKTtmZSgpLE1lKCJuZ0lmIixHcygyLEw4dCkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVs''@;'; put 'put ''ZShoLmtleSkpP251bGw6YS5lZGl0b3IpKSxmZSgpLE1lKCJuZ0lmIixHcygzLFA2ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6ZC5lZGl0b3IpKX19ZnVuY3Rp''@;'; put 'put ''b24gcTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMzkpKDEsInRleHRhcmVhIiw0MCksRnQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgyKTtyZXR1cm4gbWkodi5j''@;'; put 'put ''dXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIsImNsci1jb250cm9sLWhlbHBlciIpLExlKDMsIkhIOm1tOnNzIiksaGUoKSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1SZSgyKS4kaW1wbGljaXQsaD1SZSgyKTtmZSgp''@;'; put 'put ''LFRyKCJpbnZhbGlkLWRhdGEiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGQua2V5KSkoIm5vdC1jaGFyIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnR5''@;'; put 'put ''cGUpLE1lKCJyb3dzIixkLnZhbHVlLmxlbmd0aD44MD82OjEpLHBpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKX19ZnVuY3Rpb24gWDh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzOSkoMSwidGV4dGFyZWEiLDQxKSxGdCgicGFzdGUiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3JldHVybiB3dChhKSxDdChSZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCksZGUoMiwiY2xyLWRhdGUtY29udGFpbmVyIiw0MikoMywiaW5wdXQi''@;'; put 'put ''LDQzKSxGdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnJlY29yZERhdGVDaGFuZ2UoaCxmLmtleSkpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdCxkPVJlKDIpO2ZlKCks''@;'; put 'put ''VHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxwaSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIEo4dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gUTh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2''@;'; put 'put ''IiksZ3QoMSxKOHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7UmUoMik7Y29uc3QgZj1oYSgxNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCgy''@;'; put 'put ''LEplZSxkLGgpKX19ZnVuY3Rpb24gZTd0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywicCIsMjIpLExlKDQpLGd0KDUsVjh0LDEsMCwiY2xyLWljb24iLDIzKSxoZSgpLGRlKDYsInAiLDI0KSxMZSg3KSxoZSgpKCksZGUoOCwiZGl2IiwyNSksZ3Qo''@;'; put 'put ''OSxCOHQsMiwwLCJzcGFuIiwyNikoMTAsajh0LDEsMCwiY2xyLWljb24iLDI3KSgxMSxXOHQsMyw0LCJuZy1jb250YWluZXIiLDI4KSgxMixLOHQsMyw0LCJuZy1jb250YWluZXIiLDI4KSgxMyxxOHQsNCw2LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwyOSkoMTQsWDh0LDQsMywiZGl2Iiwy''@;'; put 'put ''OSkoMTUsUTh0LDIsNSwiZGl2IiwyOCksaGUoKSgpLEd0KDE2LCJociIsMzApLGxpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPVJlKCksZj1oLiRpbXBsaWNpdCx2PWguaW5kZXgsTT1SZSgyKTtmZSg0KSxEcigiICIsZi5rZXksIiAiKSxmZSgpLE1lKCJuZ0lmIixNLmlzQ29sUGsoZi5rZXkp''@;'; put 'put ''KSxmZSgyKSxEcigiICIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6YS5kZXNjLCIgIiksZmUoKSxNZSgibmdTd2l0Y2giLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8''@;'; put 'put ''bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmQudHlwZSksZmUoKSxNZSgibmdJZiIsTS5jdXJyZW50UmVjb3JkTG9hZGluZ3MuaW5jbHVkZXModikpLGZlKCksTWUoIm5nSWYiLE0uY3VycmVudFJlY29yZEVycm9ycy5pbmNsdWRlcyh2KSks''@;'; put 'put ''ZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwibnVtZXJpYyIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsdm9pZCAwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsImF1dG9jb21wbGV0ZSIp''@;'; put 'put ''fX1mdW5jdGlvbiB0N3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGU3dCwxNywxMSwibmctY29udGFpbmVyIiw1KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIkFjdGlvbiIhPT1hLmtleSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIh''@;'; put 'put ''PT1hLmtleSYmIm5vTGlua09wdGlvbiIhPT1hLmtleSl9fWZ1bmN0aW9uIG43dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsdDd0LDIsMSwibmctY29udGFpbmVyIiwxOSksZWwoMiwia2V5dmFsdWUiKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIix6OCgyLDIs''@;'; put 'put ''YS5jdXJyZW50UmVjb3JkLGEub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19ZnVuY3Rpb24gcjd0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWFsZXJ0Iiw0NCkoMSwiY2xyLWFsZXJ0LWl0ZW0iKSgyLCJzcGFuIiw0NSksTGUoMywiIERhdGEgVmFsaWRhdGlvbiBF''@;'; put 'put ''cnJvcnMgLSBQbGVhc2UgUmV2aWV3ICIpLGhlKCkoKSgpKSwyJmMmJihfZCgidmlzaWJpbGl0eSIsUmUoKS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjA/InZpc2libGUiOiJoaWRkZW4iKSxNZSgiY2xyQWxlcnRDbG9zYWJsZSIsITEpKCJjbHJBbGVydFR5cGUiLCJkYW5nZXIi''@;'; put 'put ''KSl9ZnVuY3Rpb24gaTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0NikoMSwiYnV0dG9uIiw0NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uUHJldmlvdXNSZWNvcmRDbGljaygpKX0pLEd0KDIsImNsci1pY29uIiw0OCksaGUo''@;'; put 'put ''KSxkZSgzLCJwIiksTGUoNCwiIEN1cnJlbnQgcm93OiAiKSxkZSg1LCJzdHJvbmciKSxMZSg2KSxoZSgpKCksZGUoNywiYnV0dG9uIiw0NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uTmV4dFJlY29yZENsaWNrKCkpfSksR3QoOCwiY2xyLWljb24iLDQ5''@;'; put 'put ''KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxmZSg1KSxEcigiICIsYS5jdXJyZW50UmVjb3JkSW5kZXgrMSwiICIpLGZlKCksTWUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZh''@;'; put 'put ''bGlkQ29scy5sZW5ndGg+MCl9fWZ1bmN0aW9uIGE3dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTMpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgibmdWYWx1ZSIsYSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBvN3QoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgxLCJhcHAtc29mdC1zZWxlY3QiLDUxKSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbEluZGV4O3JldHVybiBDdChSZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbCx2PVJlKCk7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCksZj1oLmNvbCx2''@;'; put 'put ''PWguY29sSW5kZXg7cmV0dXJuIEN0KFJlKCkub25SZWNvcmREcm9wZG93bkNoYW5nZShmLmtleSx2KSl9KSxndCgyLGE3dCwyLDIsIm9wdGlvbiIsNTIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9UmUoKS5jb2wsaD1SZSgpO2ZlKCkscGkoInZhbHVlIixoLmN1cnJlbnRSZWNvcmRb''@;'; put 'put ''ZC5rZXldKSxNZSgiaW5wdXRJZCIsZC5rZXkpLGZlKCksTWUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291cmNlKX19ZnVuY3Rpb24gczd0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwib3B0aW9uIiw1NiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBsN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWxlY3QiLDU0KSxGdCgiZm9jdXNpbiIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbEluZGV4O3JldHVybiBDdChSZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuY29sLHY9UmUoKTtyZXR1cm4gbWkodi5jdXJyZW50UmVj''@;'; put 'put ''b3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxndCgxLHM3dCwyLDIsIm9wdGlvbiIsNTUpLGhlKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPVJlKCkuY29sLGg9UmUoKTtwaSgibmdNb2RlbCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksZmUoKSxNZSgi''@;'; put 'put ''bmdGb3JPZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBjN3QoYyxsKXtpZigxJmMmJmd0KDAsbzd0LDMsMywiZGl2Iiw1MCkoMSxsN3QsMiwy''@;'; put 'put ''LCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEljKSwyJmMpe2NvbnN0IGE9bC5jb2wsZD1oYSgyKSxoPVJlKCk7TWUoIm5nSWYiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcj9udWxsOmguY3VycmVudFJlY29yZFZhbGlkYXRvci5oYXNEcVJ1bGVzKGEua2V5LEdzKDIsTzh0KSkpKCJuZ0lm''@;'; put 'put ''RWxzZSIsZCl9fWxldCB1N3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5oZWFkZXJQ''@;'; put 'put ''a3M9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmN1cnJlbnRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRSZWNvcmRFcnJvcnM9W10sdGhpcy5vblJlY29yZENoYW5nZT1uZXcgS3IsdGhpcy5vblJlY29yZElucHV0Rm9jdXNl''@;'; put 'put ''ZD1uZXcgS3IsdGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZD1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDbG9zZT1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDb25maXJtPW5ldyBLcix0aGlzLm9uTmV4dFJlY29yZD1uZXcgS3IsdGhpcy5vblByZXZpb3VzUmVjb3JkPW5ldyBLcix0aGlz''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scz1bXSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLm9yaWdpbmFsT3JkZXI9KGgsZik9PjB9bmdPbkluaXQoKXt9dmFsaWRhdGVSZWNvcmRDb2woYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmV4ZWN1dGVI''@;'; put 'put ''b3RWYWxpZGF0b3IoYSxkLE09PntmKE0pfSl9KX0pKCl9cmVjb3JkRGF0ZUNoYW5nZShhLGQpe2xldCBoPXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSxmPWg/aC5kYXRlRm9ybWF0OiIiO3RoaXMuY3VycmVudFJlY29yZCYmKHRoaXMuY3VycmVudFJlY29yZFtkXT1J''@;'; put 'put ''b2UoKShhKS5mb3JtYXQoZikpfWNvbmZpcm1SZWNvcmRFZGl0KCl7dGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEmJnRoaXMub25SZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRSZWNvcmQpfWNsb3NlUmVjb3JkRWRpdCgpe3RoaXMub25SZWNvcmRFZGl0Q2xvc2Uu''@;'; put 'put ''ZW1pdCgpfW9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYSxkKXt0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkLmVtaXQoe2NvbE5hbWU6YSxjb2w6ZH0pfW9uUmVjb3JkSW5wdXRGb2N1cyhhLGQpe3RoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQuZW1pdCh7ZXZlbnQ6YSxjb2xOYW1lOmR9KX1y''@;'; put 'put ''ZWNvcmRJbnB1dFBhc3RlKGEpe3NldFRpbWVvdXQoKCk9PnthLnRhcmdldC52YWx1ZT1hLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9ccyskLywiIil9LDApfXJlY29yZElucHV0Q2hhbmdlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNv''@;'; put 'put ''cmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksdj1hLnRhcmdldC52YWx1ZTtoLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2woZix2KS50aGVuKE09Pntjb25zdCBEPWguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZCk7TT9EPi0x''@;'; put 'put ''JiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoRCwxKTpEPDAmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goZCl9KX0pfSkoKX1vbk5leHRSZWNvcmRDbGljaygpe3RoaXMub25OZXh0UmVjb3JkLmVtaXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9u''@;'; put 'put ''UHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVjb3JkTW9kYWxSZWYgLm1vZGFsLXRpdGxlIik7aWYoZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2guc3R5bGUucG9zaXRpb249''@;'; put 'put ''ImZpeGVkIixoLnN0eWxlLmxlZnQ9IjAiLGguc3R5bGUudG9wPSIwIixoLnN0eWxlLm9wYWNpdHk9IjAiLGguc3R5bGUuekluZGV4PSI1MDAwIixoLnZhbHVlPWEsZC5hcHBlbmRDaGlsZChoKSxoLmZvY3VzKCksaC5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGQucmVt''@;'; put 'put ''b3ZlQ2hpbGQoaCksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9YX19Z2VuZXJhdGVFZGl0UmVjb3JkVXJsKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpYS5jb3B5VG9DbGlwKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKTtlbHNle2EuZ2Vu''@;'; put 'put ''ZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMDtjb25zdCBkPVtdO2EuaGVhZGVyUGtzLmZvckVhY2goaD0+e2xldCBmPSJDIix2PSIiO2ZvcihsZXQgTT0wO008YS5jZWxsVmFsaWRhdGlvbi5sZW5ndGg7TSsrKXtjb25zdCBEPWEuY2VsbFZhbGlkYXRpb25bTV07aWYoRC5kYXRhPT09aCl7''@;'; put 'put ''KCJudW1lcmljIj09PUQudHlwZXx8ImRhdGUiPT09RC50eXBlfHwidGltZSI9PT1ELnR5cGUpJiYoZj0iTiIpO2JyZWFrfX12PSJDIj09PWY/YCcke2EuY3VycmVudFJlY29yZFtoXX0nYDphLmN1cnJlbnRSZWNvcmRbaF0udG9TdHJpbmcoKSxkLnB1c2goe0dST1VQX0xPR0lDOiJBTkQiLFNV''@;'; put 'put ''QkdST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0lEOjAsVkFSSUFCTEVfTk06aCxPUEVSQVRPUl9OTToiPSIsUkFXX1ZBTFVFOnZ9KX0pLGQubGVuZ3RoPjAmJmEubGliZHMmJih5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxkKS50aGVuKGg9PnthLnF1ZXJ5Rmls''@;'; put 'put ''dGVyPXtpZDpoLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6aC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfTtjb25zdCBNPWxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSsiIy9lZGl0b3IvZWRpdC1yZWNvcmQvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkO2Eu''@;'; put 'put ''Y29weVRvQ2xpcChNKSxhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsYS5maWx0ZXI9ITF9KS5jYXRjaChoPT57YS5zdWJtaXRMb2FkaW5nPSExfSkpfX0pKCl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX10cmFja0J5Rm4oYSxkKXtyZXR1''@;'; put 'put ''cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1lZGl0LXJlY29yZCJdXSxpbnB1dHM6e2N1cnJlbnRSZWNvcmQ6ImN1cnJl''@;'; put 'put ''bnRSZWNvcmQiLHJlY29yZEFjdGlvbjoicmVjb3JkQWN0aW9uIixsaWJkczoibGliZHMiLHF1ZXJ5RmlsdGVyOiJxdWVyeUZpbHRlciIsZmlsdGVyOiJmaWx0ZXIiLHN1Ym1pdExvYWRpbmc6InN1Ym1pdExvYWRpbmciLGhlYWRlclBrczoiaGVhZGVyUGtzIixjZWxsVmFsaWRhdGlvbjoiY2Vs''@;'; put 'put ''bFZhbGlkYXRpb24iLGN1cnJlbnRSZWNvcmRJbmRleDoiY3VycmVudFJlY29yZEluZGV4IixjdXJyZW50UmVjb3JkTG9hZGluZ3M6ImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsY3VycmVudFJlY29yZEVycm9yczoiY3VycmVudFJlY29yZEVycm9ycyIsY3VycmVudFJlY29yZFZhbGlkYXRvcjoi''@;'; put 'put ''Y3VycmVudFJlY29yZFZhbGlkYXRvciJ9LG91dHB1dHM6e29uUmVjb3JkQ2hhbmdlOiJvblJlY29yZENoYW5nZSIsb25SZWNvcmRJbnB1dEZvY3VzZWQ6Im9uUmVjb3JkSW5wdXRGb2N1c2VkIixvblJlY29yZERyb3Bkb3duQ2hhbmdlZDoib25SZWNvcmREcm9wZG93bkNoYW5nZWQiLG9uUmVj''@;'; put 'put ''b3JkRWRpdENsb3NlOiJvblJlY29yZEVkaXRDbG9zZSIsb25SZWNvcmRFZGl0Q29uZmlybToib25SZWNvcmRFZGl0Q29uZmlybSIsb25OZXh0UmVjb3JkOiJvbk5leHRSZWNvcmQiLG9uUHJldmlvdXNSZWNvcmQ6Im9uUHJldmlvdXNSZWNvcmQifSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpb''@;'; put 'put ''WyJhdXRvY29tcGxldGUiLCIiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsib3RoZXJfdGhhbl9zb2Z0X3NlbGVjdCIsIiJdLFsiaWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9z''@;'; put 'put ''YWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsInAtMCIsImNsci1n''@;'; put 'put ''YXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYt''@;'; put 'put ''bmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLCJtci01aSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbGFz''@;'; put 'put ''cyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9u''@;'; put 'put ''LWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEs''@;'; put 'put ''ImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRp''@;'; put 'put ''b24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0s''@;'; put 'put ''WzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxl''@;'; put 'put ''ZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29u''@;'; put 'put ''dGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIl0sWzEsImRhdGUtZmllbGQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsInJvd3MiLCJuZ01vZGVsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCIxIiwiY29scyIsImF1dG8iLDEsIm5vdC1jaGFyIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZGF0ZS1waWNrZXIiXSxbInR5cGUiLCJkYXRlIiwibmFtZSIsImRh''@;'; put 'put ''dGUiLCJjbHJEYXRlIiwiIiwxLCJkLW5vbmUiLDMsImNsckRhdGVDaGFuZ2UiXSxbMSwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIl0sWzEsImFsZXJ0LXRleHQiXSxbMSwicHJldi1uZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwidGFi''@;'; put 'put ''aW5kZXgiLCIwIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSBsZWZ0Iiwic2l6ZSIsIjIzIl0sWyJzaGFwZSIsImFuZ2xlIHJpZ2h0Iiwic2l6ZSIsIjIzIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFszLCJm''@;'; put 'put ''b2N1c2luIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJ2YWx1ZSIsImlucHV0SWQiXSxbMywibmdWYWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXSxbImNsclNlbGVjdCIsIiIsMywiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZh''@;'; put 'put ''bHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJjbHItbW9kYWwiLDMpKDEsImgzIiw0KSxMZSgyKSxndCgzLEg4dCwzLDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg0LCJkaXYi''@;'; put 'put ''LDYpLGd0KDUsTjh0LDMsMCwiZGl2Iiw3KSg2LG43dCwzLDUsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg3LCJkaXYiLDgpLGd0KDgscjd0LDQsNCwiY2xyLWFsZXJ0Iiw5KSg5LGk3dCw5LDMsImRpdiIsMTApLGRlKDEwLCJkaXYiKSgxMSwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChmKSxoLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLEN0KGguY2xvc2VSZWNvcmRFZGl0KCkpfSksTGUoMTIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMywiYnV0dG9uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbmZp''@;'; put 'put ''cm1SZWNvcmRFZGl0KCkpfSksTGUoMTQsIiBDb25maXJtICIpLGhlKCkoKSgpLGd0KDE1LGM3dCwzLDMsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpLGhlKCl9MiZkJiYoTWUoImNsck1vZGFsT3BlbiIsITApKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksVmYoIiAiLCJBREQiPT09aC5y''@;'; put 'put ''ZWNvcmRBY3Rpb24/IkFkZCI6IkVkaXQiLCIgcmVjb3JkIGluICIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVswXSwiLiIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSwiICIpLGZlKCksTWUoIm5nSWYiLCJFRElUIj09PWgucmVjb3JkQWN0''@;'; put 'put ''aW9uKSxmZSgyKSxNZSgibmdJZiIsaC5hZGRSZWNvcmRMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhaC5hZGRSZWNvcmRMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFs''@;'; put 'put ''aWRDb2xzLmxlbmd0aDwxKSxmZSg0KSxNZSgiZGlzYWJsZWQiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUzIsY3AsQTIsazIscWwsVDIsbmwsJHMsSngsWWRlLFF4LEhsLG91LEt1LGpMLFl4LEpMLHNHLFoxLEdMLEU3LFFM''@;'; put 'put ''LHdkZSxENmUsd1JdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZDd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEsIiAiKX19bGV0IGg3dD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblBy''@;'; put 'put ''b2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5w''@;'; put 'put ''b3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlz''@;'; put 'put ''LnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2go''@;'; put 'put ''dGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxk''@;'; put 'put ''ZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQm''@;'; put 'put ''JihkZSgwLCJkaXYiKSxndCgxLGQ3dCwyLDEsInAiLDApLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxMZSg0LCJMb2FkaW5nLi4uIiksaGUoKSgpKSwyJmQmJihmZSgpLE1lKCJuZ0Zvck9mIixoLnByb2Nlc3NlZFN0YXRlcykpfSxkZXBlbmRlbmNpZXM6W25zXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGY3dD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFt''@;'; put 'put ''ZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksRjZlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIiku''@;'; put 'put ''c3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IHY9aC5sZW5ndGg+MT8iLiIraFsxXToiIixNPS8oXGQrKShcZHszfSkvO2Zvcig7TS50ZXN0KGYpOylmPWYucmVwbGFjZShNLCIkMSIrZCsiJDIiKTtyZXR1cm4gZit2fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJ0aG91c2FuZFNlcGFyYXRvciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHA3dD1bImh0Il0sZzd0PVsidXBsb2FkU3RhdGVyIl0sbTd0PVsicXVlcnlGaWx0ZXIiXSx2N3Q9WyJob3RJbnN0''@;'; put 'put ''YW5jZSJdLGI3dD1bImZpbGVVcGxvYWRJbnB1dCJdLHk3dD0oYyxsKT0+KHtsaWJOYW1lOmMsdGFibGVOYW1lOmx9KSxINmU9KCk9PlsiIiwiICJdLF83dD1jPT4oe2hlYWRlckJhckZpbHRlcjpjfSksdzd0PSgpPT5bIi9ob21lIl07ZnVuY3Rpb24gQzd0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiZGl2Iiw2NCkoMSwic3BhbiIsNjUpKDIsImxhYmVsIiw2NiksTGUoMywiIEJyb3dzZSAiKSxoZSgpKCksZGUoNCwiaW5wdXQiLDY3LDMpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmF0dGFjaEZpbGUoaCkpfSksaGUoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJ1cGxvYWRlciIsYS51cGxvYWRlcil9fWZ1bmN0aW9uIFM3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjgpKDEsImJ1dHRvbiIsNjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS51cGxv''@;'; put 'put ''YWRQYXJzZWRGaWxlcygpKX0pLExlKDIsIiBVcGxvYWQgIiksaGUoKSgpfTImYyYmKGZlKCksTWUoImRpc2FibGVkIiwhMCkpfWZ1bmN0aW9uIE03dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSks''@;'; put 'put ''Q3QoUmUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIENsb3NlICIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7TWUoImRpc2FibGVkIixhLmV4Y2VsRmlsZVBhcnNpbmd8fGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIHg3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImJ1dHRvbiIsNzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIFNraXAgIiksaGUoKX19ZnVuY3Rpb24gRTd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3MiksR3QoMSwiYXBwLXVwbG9hZC1zdGF0ZXIi''@;'; put 'put ''LG51bGwsNCksaGUoKSl9ZnVuY3Rpb24gVDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLWVkaXQtcmVjb3JkIiw3MyksRnQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3Jk''@;'; put 'put ''SW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCkpfSkoIm9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNsb3NlUmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25QcmV2aW91c1JlY29yZCgpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7TWUoImN1cnJlbnRSZWNvcmQiLGEu''@;'; put 'put ''Y3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMpKCJxdWVyeUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5nIixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVh''@;'; put 'put ''ZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEuY3VycmVudEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIs''@;'; put 'put ''YS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3IpfX1mdW5jdGlvbiBBN3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc0KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIGs3dChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNzUpKDEsInNwYW4iLDc2KSxHdCgyLCJjbHItaWNvbiIsNzcpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiIpLGhlKCkoKSxkZSg1LCJzcGFuIiw3OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChSZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSksR3QoNiwiY2xyLWljb24iLDgwKSxkZSg3LCJzcGFuIiw3OCksTGUoOCwiVmlld2JveGVzIiksaGUoKSgpKCl9MiZjJiYoZmUoKSxNZSgicm91dGVyTGluayIsR3MoMSx3N3QpKSl9ZnVuY3Rpb24gRDd0KGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsODYpfWZ1bmN0aW9uIEk3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gUjd0KGMsbCl7MSZjJiYoc2koMCksZ3Qo''@;'; put 'put ''MSxJN3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksbGkoKSl9ZnVuY3Rpb24gTDd0KGMsbCl7aWYoMSZjJiYoc2koMCksTGUoMSksZWwoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxLSSgiICgiLHo4KDIsNCxhLmRhdGFTb3VyY2Uu''@;'; put 'put ''bGVuZ3RoLCIsIiksIiAiLDE9PT1hLmRhdGFTb3VyY2UubGVuZ3RoPyJyb3ciOiJyb3dzIiwiLCAiLGEuY29scy5sZW5ndGgsIiIsMT09PWEuY29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIE83dChjLGwpezEmYyYmKHNpKDApLExlKDEsIiAoMCByb3dzKSAiKSxs''@;'; put 'put ''aSgpKX1mdW5jdGlvbiBQN3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEw3dCwzLDcsIm5nLWNvbnRhaW5lciIsMzkpKDIsTzd0LDIsMCwibmctY29udGFpbmVyIiwzOSksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLnplcm9GaWx0ZXJSb3dzKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gRjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiaDQiLDgxKSgxLCJjbHItdG9vbHRpcCIpKDIsImNsci1pY29uIiw4MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmRhdGFzZXRJ''@;'; put 'put ''bmZvPSEwKX0pLGhlKCksZ3QoMyxEN3QsMSwwLCJjbHItaWNvbiIsODMpLGRlKDQsInNwYW4iLDg0KSxMZSg1KSxkZSg2LCJhIiw4NSksTGUoNyksaGUoKSgpLGd0KDgsUjd0LDIsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSxndCg5LFA3dCwzLDIsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCl9''@;'; put 'put ''aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpO2ZlKDMpLE1lKCJuZ0lmIixhLnRhYmxlTmFtZS5pbmNsdWRlcygiLUZDIikpLGZlKDIpLERyKCIgIixhLmxpYk5hbWUsIi4iKSxmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2QubGliZHMpLGZlKCksd3IoYS50YWJsZU5h''@;'; put 'put ''bWUucmVwbGFjZSgiLUZDIiwiIikpLGZlKCksTWUoIm5nSWYiLGQuZHNOb3RlJiZkLmRzTm90ZS5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24gSDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw5NSksRnQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEd0KDEsImNsci1pY29uIiw5NiksZGUoMiwic3BhbiIsNzgpLExlKDMsIlVwbG9hZCIpLGhlKCkoKX19ZnVuY3Rpb24gTjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwi''@;'; put 'put ''YnV0dG9uIiw5MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vcGVuUWIoKSl9KSxHdCgyLCJjbHItaWNvbiIsOTEpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJGaWx0ZXIiKSxoZSgpKCksZGUoNSwiYnV0dG9uIiw5MiksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChhKSxDdChSZSgyKS5lZGl0VGFibGUoKSl9KSxHdCg2LCJjbHItaWNvbiIsOTMpLGRlKDcsInNwYW4iLDc4KSxMZSg4LCJFZGl0IiksaGUoKSgpLGd0KDksSDd0LDQsMCwiYnV0dG9uIiw5NCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoOSksTWUoIm5nSWYiLCFh''@;'; put 'put ''LmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24gVjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLFV1KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxs''@;'; put 'put ''b3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBCN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCks''@;'; put 'put ''Z3QoMSxWN3QsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gajd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYnV0dG9uIiw5NyksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5jYW5jZWxFZGl0KCkpfSksR3QoMiwiY2xyLWljb24iLDk4KSxkZSgzLCJzcGFuIiksTGUoNCwiQ2FuY2VsIiksaGUoKSgpLGRlKDUsImNsci10b29sdGlwIikoNiwiYnV0dG9uIiw5OSksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUm93KCkpfSksR3QoNywiY2xyLWljb24iLDEwMCksTGUoOCwiQWRkIFJvdyAiKSxoZSgpLGd0KDksQjd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLGhlKCks''@;'; put 'put ''ZGUoMTAsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2hlY2tTYXZlKCkpfSksR3QoMTEsImNsci1pY29uIiwxMDEpLExlKDEyLCJTdWJtaXQgIiksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg2KSxUcigiZGMtbG9j''@;'; put 'put ''a2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSxNZSgiY2xyTG9hZGluZyIsYS5hZGRpbmdOZXdSb3cpfX1mdW5jdGlvbiB6N3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChSZSgzKS5tYW51YWxGaWxlRWRpdE1vZGFsPSEwKX0pLEd0KDEsImNsci1pY29uIiw5MyksZGUoMiwic3BhbiIpLExlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIFU3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImJ1dHRvbiIsMTAyKSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLEd0KDIsImNsci1pY29uIiw5OCksZGUoMywic3BhbiIpLExlKDQsIkRpc2NhcmQgZmlsZSIpLGhlKCkoKSxndCg1LHo3dCw0LDAsImJ1dHRvbiIsMTAzKSxkZSg2LCJidXR0b24iLDEw''@;'; put 'put ''NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5zdWJtaXRFeGNlbCgpKX0pLEd0KDcsImNsci1pY29uIiwxMDEpLExlKDgsIiBTdWJtaXQgIiksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg1KSxNZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFk''@;'; put 'put ''T25seSksZmUoKSxNZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gWjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4OSksZ3QoMSxON3QsMTAsMSwibmctY29udGFpbmVyIiwzOSkoMixqN3QsMTMsMywibmctY29udGFpbmVyIiwzOSkoMyxVN3QsOSwyLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLE1lKCJuZ0lmIiwhYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksZmUoKSxNZSgibmdJZiIsYS51''@;'; put 'put ''cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gVzd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDYpKDEsInNwYW4iKSxMZSgyLCJGSUxURVIgOiAiKSxkZSgzLCJiIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLHdyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gWTd0''@;'; put 'put ''KGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIsMTA5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLExlKDUsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCksbGkoKSl9ZnVuY3Rpb24gRzd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIp''@;'; put 'put ''LEd0KDIsImNsci1pY29uIiwxMTIpLGhlKCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksTGUoNSwiTG9hZGluZyB0YWJsZSBlcnJvciIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiAkN3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNykoMSwiZGl2IiwxMDgpLGd0KDIsWTd0LDYsMCwi''@;'; put 'put ''bmctY29udGFpbmVyIiwzOSkoMyxHN3QsNiwwLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLE1lKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLGZlKCksTWUoIm5nSWYiLGEuZ2V0ZGF0YUVycm9yKX19ZnVuY3Rpb24gSzd0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLFV1KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/''@;'; put 'put ''InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBxN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTUpLGd0KDEsSzd0LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFg3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwxMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJu''@;'; put 'put ''IEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xpY2soKSl9KSxHdCgyLCJjbHItaWNvbiIsMTAwKSxMZSgzLCIgQWRkIFJlY29yZCAiKSxoZSgpLGd0KDQscTd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE0KSxoZSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1SZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIEo3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDExNiksTGUoMSksR3QoMiwiY29udGFjdC1saW5rIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7''@;'; put 'put ''ZmUoKSxEcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIFE3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEyOCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDIpO2ZlKCksVXUoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9u''@;'; put 'put ''LCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gZTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMjkpKDEsImRpdiIsMTMwKSgyLCJsYWJlbCIsMTMxKSxMZSgzLCJNZXNzYWdlIiksaGUoKSxkZSg0LCJ0ZXh0YXJlYSIsMTMyKSxn''@;'; put 'put ''aSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5tZXNzYWdlLGgpfHwoZi5tZXNzYWdlPWgpLEN0KGgpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLHBpKCJuZ01vZGVsIixhLm1lc3NhZ2UpLE1lKCJkaXNh''@;'; put 'put ''YmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpKCJ2YWx1ZSIsYS52YWxpZGF0aW9uRG9uZT8iIjoiUGxlYXNlIHdhaXQgd2hpbGUgd2UgdmFsaWRhdGUgIithLmNvbHMubGVuZ3RoKmEubW9kaWZlZFJvd3NJbmRleGVzLmxlbmd0aCsiIGNlbGxzLiIpfX1mdW5jdGlvbiB0OXQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDExNykoMSwiZGl2IiwxMTgpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLEd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLExlKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDkpLGd0KDksUTd0LDIsMiwi''@;'; put 'put ''c3BhbiIsMTIzKSgxMCxlOXQsNSwzLCJkaXYiLDEyNCksaGUoKSxkZSgxMSwiZGl2IiwxMjUpKDEyLCJidXR0b24iLDEyNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gQ3QoaC5zYXZlVGFibGUoaC5ob3RUYWJsZS5kYXRhKSl9KSxMZSgxMywiIFN1''@;'; put 'put ''Ym1pdCAiKSxoZSgpLGRlKDE0LCJidXR0b24iLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5jYW5jZWxTdWJtaXQoKSxoLnN1Ym1pdD0hMSxDdChoLnZhbGlkYXRpb25Eb25lPTApfSksTGUoMTUsIiBDYW5jZWwgIiksaGUoKSgpKCkoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDcpLFZmKCIgU3VibWl0IGZvciBBcHByb3ZhbCAoIixhLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCwiIGFkZGVkLCAiLGEucm93c0NoYW5nZWQucm93c1VwZGF0ZWQsIiB1cGRhdGVkLCAiLGEucm93c0NoYW5nZWQucm93c0RlbGV0ZWQsIiBkZWxldGVk''@;'; put 'put ''KSAiKSxmZSgyKSxNZSgibmdJZiIsYS50b3RhbFJvd3NDaGFuZ2VkPmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0JiZhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWEuSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGEudGFibGVUcnVlKSxmZSgy''@;'; put 'put ''KSxNZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gbjl0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTMzKSxMZSgxKSxlbCgyLCJwa1NwYWNlU2VwYXJhdGUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO2ZlKCksVXUoIiBPbiByb3cg''@;'; put 'put ''IixhKzEsIjogIixEYygyLDIsZC5wa0ZpZWxkc1thXS5yZXBsYWNlKCJ8IiwiIikpLCIgIil9fWZ1bmN0aW9uIHI5dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxWZigiICIsYS5jb2wsIigiLGEubGVuLCIpLCAiLGEu''@;'; put 'put ''dmFsLCIgIil9fWZ1bmN0aW9uIGk5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTM0KSgxLCJkaXYiLDEzNSkoMiwiZGl2IiwxMTkpKDMsImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xyLWljb24iLDEyMiksaGUoKSxkZSg2LCJoMyIsOCksTGUoNywi''@;'; put 'put ''RXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2Iiw5KSg5LCJwIiksTGUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjMpKDEyLCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubnVsbFZh''@;'; put 'put ''cmlhYmxlcz0hMSl9KSxMZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gYTl0KGMsbCl7MSZjJiZHdCgwLCJhcHAtcXVlcnkiLG51bGwsNSl9ZnVuY3Rpb24gbzl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMTM2KSxMZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFn''@;'; put 'put ''YWluLiAiKSxoZSgpKX1sZXQgaU49KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5jbnQ9MH1zdGF0aWN7dGhpcy5ub25Qa0NudD0wfXN0YXRpY3t0aGlzLmxhc3RDZWxsPTB9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5yb3V0ZT1ELHRoaXMuc2FzU2VydmljZT1aLHRoaXMuY2RmPXJlLHRoaXMuaG90UmVnaXN0ZXJlcj1jZSx0aGlzLnNw''@;'; put 'put ''cmVhZHNoZWV0U2VydmljZT1iZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBmZCx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdD1uZXcgZmQsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgZmQsdGhpcy5tZXNzYWdl''@;'; put 'put ''PSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0''@;'; put 'put ''aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10saGlkZGVuOiEwLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtaW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJz''@;'; put 'put ''T25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVtczp7ZWRpdF9yb3c6e25hbWU6IkVkaXQgcm93IixoaWRkZW4oKXtjb25zdCBxZT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighcWUpcmV0dXJuITE7Y29uc3QgcnQ9cWVbMF07cmV0dXJuIHJ0LmZyb20ucm93IT09cnQudG8u''@;'; put 'put ''cm93fSxjYWxsYmFjazooQmUscWUscnQpPT57Y29uc3QgcHQ9cWVbMF07cHQuc3RhcnQucm93PT09cHQuZW5kLnJvdyYmdGhpcy5lZGl0UmVjb3JkKG51bGwscHQuc3RhcnQucm93KX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0''@;'; put 'put ''IFJvdyBiZWxvdyJ9LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3cifSxjb3B5OntuYW1lOiJDb3B5IHdpdGhvdXQgaGVhZGVycyJ9LGNvcHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRoIGhlYWRlcnMifSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNv''@;'; put 'put ''cHkgaGVhZGVycyBvbmx5In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSx1bmRvOntuYW1lOiJVbmRvIn0scmVkbzp7bmFtZToiUmVkbyJ9fX19fSx0aGlzLmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9''@;'; put 'put ''ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRlZDowfSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1b''@;'; put 'put ''XSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0PSExLHRoaXMuc2F2ZUxvYWRpbmc9ITEsdGhpcy5hcHByb3ZlcnM9W10sdGhpcy5lcnJWYWxpZGF0aW9uPSExLHRoaXMucGtOdWxsPSExLHRoaXMubm9Qa051bGw9ITEsdGhpcy50YWJsZURh''@;'; put 'put ''dGE9W10sdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5xdWVyeVRleHRTYXZlZD0iIix0aGlzLnNob3dBcHByb3ZlcnM9ITEsdGhpcy5wa0R1cHM9ITEsdGhpcy52YWxpZGF0aW9uRG9uZT0wLHRoaXMuZHVwbGljYXRlUGtJbmRleGVzPVtdLHRoaXMuY29sdW1uSGVhZGVyPVtdLHRoaXMuc3BlY0lu''@;'; put 'put ''Zm89W10sdGhpcy50b29Mb25nPSExLHRoaXMuZXhjZWVkQ2VsbHM9W10sdGhpcy51cGxvYWRlcj1uZXcgUGVlLHRoaXMudXBsb2FkVXJsPSIiLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBs''@;'; put 'put ''b2FkU3RhdGU9bnVsbCx0aGlzLmRhdGE9W10sdGhpcy5oZWFkZXJBcnJheT1bXSx0aGlzLmhvdERhdGFTY2hlbWE9e30sdGhpcy5oZWFkZXJTaG93PVtdLHRoaXMuaGVhZGVyVmlzaWJsZT0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5oYXNBbm90aGVyRHJvcFpvbmVPdmVy''@;'; put 'put ''PSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ITEsdGhpcy5kYXRlVGltZUhlYWRlcnM9W10sdGhpcy50aW1lSGVhZGVycz1bXSx0aGlzLmRhdGVIZWFkZXJzPVtdLHRoaXMueGxSdWxlcz1bXSx0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5oZWFk''@;'; put 'put ''ZXJDb2x1bW5zPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0PW5ldyBXbix0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSExLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuZGlzY2FyZFNvdXJjZUZpbGU9''@;'; put 'put ''ITEsdGhpcy5tYW51YWxGaWxlRWRpdE1vZGFsPSExLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnM9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuZ2VuZXJhdGVF''@;'; put 'put ''ZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMuc2luZ2xlUm93U2VsZWN0ZWQ9ITEsdGhpcy5hZGRp''@;'; put 'put ''bmdOZXdSb3c9ITEsdGhpcy5nZXRkYXRhRXJyb3I9ITEsdGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0aGlzLnRhYmxlRmlsZURyYWdPdmVyPSExLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdD0yMCx0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRp''@;'; put 'put ''b25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxFWFRSQV9DT0xfTkFNRToxLERJU1BMQVlfVkFMVUU6MixESVNQTEFZX1RZUEU6MyxSQVdfVkFMVUVfTlVNOjQsUkFXX1ZBTFVFX0NIQVI6NSxGT1JDRV9GTEFHOjZ9LHRoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxE''@;'; put 'put ''SVNQTEFZX1ZBTFVFOjEsUkFXX1ZBTFVFOjJ9LHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcD1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnRpbWVzQ2xpY2tlZD0wLFplZVt3aW5kb3cubmF2aWdhdG9y''@;'; put 'put ''Lmxhbmd1YWdlXSYmJG0ucmVnaXN0ZXJMYW5ndWFnZShaZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pLHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgWW0sdGhpcy5wYXJzZVJlc3RyaWN0aW9ucygpLHRoaXMuc2V0UmVzdHJpY3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJl''@;'; put 'put ''c3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJl''@;'; put 'put ''c3RyaWN0RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9c2V0UmVzdHJpY3Rpb25zKGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17Li4udGhpcy5yZXN0cmljdGlvbnMsLi4uYX0pLHRoaXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0''@;'; put 'put ''b24mJmRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVkaXRfcm93LHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYoZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0''@;'; put 'put ''ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yZW1vdmVfcm93KX1jaGVja1Jvd0xpbWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8''@;'; put 'put ''dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoPj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRl''@;'; put 'put ''cigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9M''@;'; put 'put ''aW1pdE1vZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24iLCJVcGxvYWQgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJl''@;'; put 'put ''IGFjdGl2ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9YXR0YWNoRmlsZShhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07dGhp''@;'; put 'put ''cy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPWYubmFtZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsRmlsZSh7ZmlsZTpmLHVwbG9hZGVyOnRoaXMudXBsb2Fk''@;'; put 'put ''ZXIsZGNWYWxpZGF0b3I6dGhpcy5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6dGhpcy5oZWFkZXJQa3MsaGVhZGVyQXJyYXk6dGhpcy5oZWFkZXJBcnJheSxoZWFkZXJTaG93OnRoaXMuaGVhZGVyU2hvdyx0aW1lSGVhZGVyczp0aGlzLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOnRoaXMuZGF0ZUhl''@;'; put 'put ''YWRlcnMsZGF0ZVRpbWVIZWFkZXJzOnRoaXMuZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6dGhpcy54bFJ1bGVzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9LHY9Pnt0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKHYpfSx2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91''@;'; put 'put ''bmQiLHYpfSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtNJiYoaC5leGNlbEZpbGVSZWFkeT0hMCxoLnVwbG9hZGVyPU0udXBsb2FkZXIsTS5kYXRhJiZNLmhlYWRlclNob3c/KGguZGF0YT1NLmRhdGEsaC5oZWFkZXJTaG93PU0uaGVhZGVyU2hvdyxoLmdldFBlbmRp''@;'; put 'put ''bmdFeGNlbFByZXZpZXcoKSk6eWllbGQgaC51cGxvYWRQYXJzZWRGaWxlcygpKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaCh2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCx2LG51bGwpLHRoaXMu''@;'; put 'put ''c2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMSxzZXRUaW1lb3V0KCgpPT57dGhpcy5maWxlbmFtZT0iIn0pfSkuZmluYWxseSgoKT0+e3RoaXMuZXhjZWxGaWxlUGFyc2luZz0hMX0pfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jv''@;'; put 'put ''d3NfbGltaXQ9PT0xLzA/dGhpcy51cGxvYWRQYXJzZWRGaWxlcygpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9dXBsb2FkUGFyc2VkRmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEucGtEdXBzPSEwLHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBs''@;'; put 'put ''b2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUpZC5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoYS51cGxvYWRVcmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5''@;'; put 'put ''cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3thLnVwbG9hZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEw''@;'; put 'put ''LGEudGFibGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJsZUlkKX19ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLHY9Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYuc2FzanNBYm9ydFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5h''@;'; put 'put ''bWU9IiIsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVY''@;'; put 'put ''VDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0saD0+e2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVl''@;'; put 'put ''PSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLGguYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1''@;'; put 'put ''ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGE9W107dGhpcy5kYXRhLm1hcChoPT57Y29uc3QgZj17fTt0aGlzLmhlYWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5f''@;'; put 'put ''X19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNv''@;'; put 'put ''dXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5h''@;'; put 'put ''cHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQ''@;'; put 'put ''ZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMu''@;'; put 'put ''ZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5w''@;'; put 'put ''b3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZl''@;'; put 'put ''cnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0''@;'; put 'put ''LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShhKSl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5n''@;'; put 'put ''ZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1''@;'; put 'put ''cm4gZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdO2NvbnN0IGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZb''@;'; put 'put ''MF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiYoS24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEtuLmVkaXRvci5maWx0ZXIucXVlcnk9W10sS24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2''@;'; put 'put ''b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1E''@;'; put 'put ''LnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3Jv''@;'; put 'put ''dXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goWj0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpfSksRC5jbGF1''@;'; put 'put ''c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGli''@;'; put 'put ''ZHMsdikudGhlbihNPT57YS5xdWVyeUZpbHRlcj17aWQ6TS5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOk0ucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIvIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9''@;'; put 'put ''KS50aGVuKCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkpLGEuZmlsdGVyPSExfSkuY2F0Y2goTT0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1j''@;'; put 'put ''YXRjaChmKXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2FnZT1mfX0pKCl9b3BlblFiKCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNl''@;'; put 'put ''cnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUoYSxkKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UsZj1oLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksdj1m''@;'; put 'put ''LmdldFNvcnRDb25maWcoKSxNPUFycmF5LmlzQXJyYXkodik/djpbdl07c2V0VGltZW91dCgoKT0+e2F8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3Ao''@;'; put 'put ''KSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2Zvcihjb25zdCBEIG9mIE0pZi5zb3J0KEQpO3RoaXMucmVT''@;'; put 'put ''ZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSlmb3IoY29uc3QgaCBpbiBkKXtjb25zdCBmPXRoaXMuY29scy5maW5kKHY9PnYuTkFNRT09PWgpO2YmJiIiIT09ZFtoXSYmIm51bSI9PT1mLlRZUEUmJiFmLkREVFlQ''@;'; put 'put ''RS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFyc2VJbnQoZFtoXSkpfX1jYW5jZWxFZGl0KCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXTtjb25zdCBhPXRoaXMu''@;'; put 'put ''aG90SW5zdGFuY2UsZD1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNvcnRDb25maWcoKSxmPUFycmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo''@;'; put 'put ''dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxh''@;'; put 'put ''LnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IHYgb2YgZilkLnNvcnQodik7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSww''@;'; put 'put ''PT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNo''@;'; put 'put ''b3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsZCwxKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRo''@;'; put 'put ''aXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0aGlzLmRhdGFTb3VyY2VbZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZh''@;'; put 'put ''bGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRh''@;'; put 'put ''dGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVy''@;'; put 'put ''biAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1nZXRSb3dzU3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0wLGQ9MCxoPTA7dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10s''@;'; put 'put ''dGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2YrKyl7Y29uc3Qgdj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtmXSk7aWYoIlllcyI9PT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyl0''@;'; put 'put ''aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLGQrKztlbHNle2NvbnN0IE09dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLmZpbmQoRD0+e2Zvcihjb25zdCBaIG9mIHRoaXMuaGVhZGVyUGtzKWlmKERbWl0hPT12W1pdKXJldHVybiExO3JldHVybiEwfSk7TT9KU09OLnN0cmluZ2lmeSh2KSE9PUpT''@;'; put 'put ''T04uc3RyaW5naWZ5KE0pJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGErKyk6KHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxoKyspfX10aGlzLnJvd3NDaGFuZ2VkPXty''@;'; put 'put ''b3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldERhdGEoKTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgTT0wO008ZC5sZW5ndGg7TSsrKXtsZXQgRD0iIjtmb3IobGV0IFo9''@;'; put 'put ''MTtaPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtaKyspRD1EKyJ8IitkW01dW1pdO3RoaXMucGtGaWVsZHMucHVzaChEKX1jb25zdCBoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IE09MDtNPHRoaXMucGtGaWVsZHMubGVuZ3RoO00rKylmb3IobGV0IEQ9MDtEPHRoaXMucGtG''@;'; put 'put ''aWVsZHMubGVuZ3RoO0QrKyl0aGlzLnBrRmllbGRzW01dPT09dGhpcy5wa0ZpZWxkc1tEXSYmRCE9PU0mJmgucHVzaChEKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgTT1mO008dGhpcy5wa0ZpZWxkcy5sZW5ndGg7TSsrKWZvcihsZXQgRD1mO0Q8dGhpcy5wa0ZpZWxkcy5s''@;'; put 'put ''ZW5ndGg7RCsrKU08RCYmdGhpcy5wa0ZpZWxkc1tNXT09PXRoaXMucGtGaWVsZHNbRF0mJmgucHVzaChEKTtsZXQgdjtmb3IobGV0IE09MDtNPGgubGVuZ3RoO00rKylmb3IobGV0IEQ9MTtEPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtEKyspdj1hLmdldENlbGxNZXRhKGhbTV0sRCksdi52YWxp''@;'; put 'put ''ZD0hMSx2LmR1cEtleT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGguc29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtmb3IoY29uc3QgZiBvZiB0aGlzLmNlbGxWYWxpZGF0''@;'; put 'put ''aW9uU291cmNlKXtjb25zdCB2PWYudmFsdWVzLm1hcChNPT5NW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7aC5iYXRjaCgoKT0+e2NvbnN0IE09aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksRD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKE0uZGF0YXx8IiIpO2xl''@;'; put 'put ''dCBaO0QmJihaPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoRCkpLFp8fChaPVtdKTtjb25zdCByZT1bLi4ubmV3IFNldChbLi4uWiwuLi52XSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpyZX0pLGguc2V0''@;'; put 'put ''Q2VsbE1ldGEoZi5yb3csZi5jb2wsInNvdXJjZSIscmUpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiks''@;'; put 'put ''aC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic3RyaWN0IixmLnN0cmljdCksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9y''@;'; put 'put ''OiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGYsdm9pZCAwLGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7''@;'; put 'put ''aWYoYSl7ZHx8KGQ9YS5yb3cpO2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxNLGgsZil9ZWxzZSBmb3IoY29uc3QgTSBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBEPXRoaXMu''@;'; put 'put ''Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShNKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhNLE0ucm93LEQsaCxmKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxoLGY9ITEsdil7Y29uc3QgTT10aGlzLmhvdEluc3RhbmNlLEQ9W107Zm9yKGNvbnN0IFogb2YgaClE''@;'; put 'put ''LmluZGV4T2YoWi5FWFRSQV9DT0xfTkFNRSk8MCYmRC5wdXNoKFouRVhUUkFfQ09MX05BTUUpO2Zvcihjb25zdCBaIG9mIEQpe2NvbnN0IHJlPWguZmlsdGVyKGR0PT5kdC5FWFRSQV9DT0xfTkFNRT09PVopO2xldCBjZT1yZS5tYXAoZHQ9PiJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdf''@;'; put 'put ''VkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNKTtjb25zdCBiZT1NLnByb3BUb0NvbChaKTt0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChkdD0+ZHQucm93PT09ZCYmZHQuY29sPT09YmUpfHx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlk''@;'; put 'put ''YXRpb25NYXAucHVzaCh7cm93OmQsY29sOmJlLGFjdGl2ZTohMX0pLE0uc2V0Q2VsbE1ldGEoZCxiZSwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxNLnNldENlbGxNZXRhKGQsYmUsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxNLnNldENlbGxNZXRhKGQsYmUsInN0cmljdCIs''@;'; put 'put ''YS5zdHJpY3QpLE0uc2V0Q2VsbE1ldGEoZCxiZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShiZSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6YS5zdHJpY3QsZmlsdGVy''@;'; put 'put ''OiExfSk7Y29uc3QgQmU9TS5nZXRDZWxsTWV0YShkLGJlKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlLmRhdGF8fCIiKTtsZXQgcnQ7cWUmJihydD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHFlKSkscnR8fChydD1bXSksIm51bWVyaWMiPT09cWU/LnR5''@;'; put 'put ''cGU/KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsIm51bWJlciIpLGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsIm51bWJlciIpKToocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwic3RyaW5n''@;'; put 'put ''IiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwic3RyaW5nIikpO2NvbnN0IHB0PVsuLi5uZXcgU2V0KFsuLi5ydCwuLi5jZV0pXTtpZihNLnNldENlbGxNZXRhKGQsYmUsInNvdXJjZSIscHQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVw''@;'; put 'put ''ZGF0ZVJ1bGUoYmUse3NvdXJjZTpwdH0pLGYpe2lmKHYmJnYhPT1kKXJldHVybjtjb25zdCBkdD1yZS5maW5kKEp0PT4xPT09SnQuRk9SQ0VfRkxBRyk7ZHQmJnNldFRpbWVvdXQoKCk9PntNLnNldERhdGFBdENlbGwoZCxiZSwiQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NI''@;'; put 'put ''QVI6ZHQuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PT09ZCYmKHRoaXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhdW1pdPSJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFM''@;'; put 'put ''VUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNKX0pfX19Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhLGQpe2NvbnN0IGY9dGhpcy5ob3RJbnN0YW5jZS5nZXREYXRhQXRDZWxsKGR8fGEucm93LGEuY29sKSx2PShhLnZhbHVlcy5maW5kKHJlPT5yZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmll''@;'; put 'put ''bGRzLlJBV19WQUxVRV09PT1mKXx8W10pW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuRElTUExBWV9JTkRFWF0sTT1hLmV4dGVuZGVkX3ZhbHVlcz8uZmlsdGVyKHJlPT5yZVswXT09PXYpLEQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRp''@;'; put 'put ''b25GaWVsZHMpLFo9W107Zm9yKGNvbnN0IHJlIG9mIE18fFtdKXtjb25zdCBjZT17fTtmb3IoY29uc3QgYmUgb2YgT2JqZWN0LmtleXMoRCkpY2VbYmVdPXJlW0RbYmVdXTtaLnB1c2goY2UpfXJldHVybiBafWNoZWNrU2F2ZSgpe2lmKHRoaXMuZ2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpLDA9''@;'; put 'put ''PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkKXJldHVybiB0aGlzLmJhZEVkaXRUaXRsZT0iTm8gY2hhbmdlcyB0byBzdWJtaXQiLHRoaXMuYmFkRWRpdENhdXNlPSJQ''@;'; put 'put ''bGVhc2UgbW9kaWZ5IHNvbWUgdmFsdWVzIGFuZCB0cnkgYWdhaW4uIix2b2lkKHRoaXMuYmFkRWRpdD0hMCk7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO3RoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSk7Zm9y''@;'; put 'put ''KGxldCBoPTA7aDx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2grKylkZWxldGUgdGhpcy5kYXRhU291cmNlW2hdLm5vTGlua09wdGlvbjthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZh''@;'; put 'put ''bGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaCxmKXtyZXR1cm4gaD41MDA/NTAwOmh9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBrQ250PTA7Y29uc3QgZD1hLmdldERhdGEoKTtpZihkLmxlbmd0aD4xJiZhLmlzRW1wdHlSb3co''@;'; put 'put ''ZC5sZW5ndGgtMSkmJmEuYWx0ZXIoInJlbW92ZV9yb3ciLGQubGVuZ3RoLTEpLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRoaXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJt''@;'; put 'put ''aXQoKTt0aGlzLnBrRHVwcz0hMSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6''@;'; put 'put ''KHRoaXMuc3VibWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7aCYmaC5mb2N1cygpfSwyMDApKX0pfXNhdmVUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtpZihkLmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKHY9PiEhZC5kYXRhTW9kaWZpZWQuZmluZChEPT57Zm9yKGNvbnN0IFogb2YgZC5oZWFkZXJQa3MpaWYoRFtaXSE9PXZbWl0pcmV0dXJuITE7cmV0dXJuITB9KSkpLm1hcCh2PT57Y29uc3QgTT12Ll9fX19fREVM''@;'; put 'put ''RVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPU0sT2JqZWN0LmtleXModikubWFwKEQ9PnsibnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEQp''@;'; put 'put ''Py50eXBlJiYiLiI9PT12W0RdJiYodltEXT1udWxsKX0pLHZ9KSxkLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRlZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVz''@;'; put 'put ''IGFyZSBQcmVzZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lkKGQuc3VibWl0PSExKTtpZihkLnZhbGlkYXRpb25Eb25lPTAsZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZjLm5vblBrQ250PDEpe2Quc2F2ZUxvYWRpbmc9ITAsZC5k''@;'; put 'put ''aXNhYmxlU3VibWl0PSExLGQuc3VibWl0PSEwO2NvbnN0IHY9e0FDVElPTjoiTE9BRCJ9O2lmKGQubWVzc2FnZT1kLm1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSx2Lk1FU1NBR0U9ZC5tZXNzYWdlLHYuTElCRFM9ZC5saWJkcyxkLmNvbHMpe2NvbnN0IE09YS5zbGljZSgwLGQubGljZW5j''@;'; put 'put ''ZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZSh2LE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixkLiRkYXRhRm9ybWF0cykudGhlbihaPT57aWYodHlwZW9mIFouYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1ouYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgcmU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7WiYmKHJlKz1gXG4keyJzdHJpbmciPT10eXBlb2YgWj9aOkpTT04u''@;'; put 'put ''c3RyaW5naWZ5KFopfWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIscmUsbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChaPT57Y29uc29sZS5sb2coImVyciIsWiksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQu''@;'; put 'put ''c3VibWl0PSExO2NvbnN0IHJlPSJzdHJpbmciPT10eXBlb2YgWi5hZGFwdGVyUmVzcG5zZT9aLmFkYXB0ZXJSZXNwbnNlOkpTT04uc3RyaW5naWZ5KFouYWRhcHRlclJlc3Buc2UpO3JldHVybiBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJt''@;'; put 'put ''aXQgcmVxdWVzdCBmYWlsZWRcbiR7cmV9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVybn19Yy5jbnQ+PTE/KGQucGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxjLm5vblBrQ250Pj0xPyhkLm5vUGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNh''@;'; put 'put ''bmNlbFN1Ym1pdCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9dmFsaWRhdG9yUnVsZVNvdXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKX1jaGVja0ludmFsaWQoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0LmZp''@;'; put 'put ''cnN0LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEludmFsaWQiKS5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChhKXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhp''@;'; put 'put ''cy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpKX1jb25maXJtUmVjb3JkRWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDthJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVt''@;'; put 'put ''bkhlYWRlci5tYXAoZj0+e2NvbnN0IHY9dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxNPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbZl0/LnR5cGUsRD0oMCxnZy5pc1NwZWNpYWxNaXNzaW5nKSh2KTtNJiYhaXNOYU4odikmJiFEJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtm''@;'; put 'put ''XT0xKnYpfSksdGhpcy5kYXRhU291cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RUYWJsZS5kYXRhW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5j''@;'; put 'put ''dXJyZW50RWRpdFJlY29yZD12b2lkIDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVk''@;'; put 'put ''aXRSZWNvcmRJbmRleCsxLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9b25QcmV2aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5k''@;'; put 'put ''ZXg8PTA/dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleC0xLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xpY2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJl''@;'; put 'put ''Y29yZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQiKTp0aGlzLmFkZEVkaXROZXdSZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5hZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291''@;'; put 'put ''cmNlLmxlbmd0aC0xLCEwKX0sMWUzKX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRSZWNvcmQoYSxkLGgpe2lmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCl0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBp''@;'; put 'put ''ZighKHZvaWQgMD09PWR8fGQ8MHx8dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKSl7aWYodGhpcy5yZWNvcmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZh''@;'; put 'put ''bGlkYXRvcj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3IpLGgpdGhpcy5wcmV2RGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5wcmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhp''@;'; put 'put ''cy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhQXRSb3coZCkpO2Zvcihjb25zdCB2IG9mIGYpaWYodil7Y29uc3QgTT12LnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIHYucHJvcCxkZWxldGUgdi5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRW''@;'; put 'put ''YWxpZGF0b3I/LnVwZGF0ZVJ1bGUodi5jb2wsey4uLnYsZGF0YTpNfSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1kLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxk''@;'; put 'put ''KXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aC5iYXRjaCgoKT0+e2NvbnN0IGY9aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1''@;'; put 'put ''Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIithKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZm''@;'; put 'put ''LmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7aWYodGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25z''@;'; put 'put ''dCB2PWguZ2V0RGF0YUF0Q2VsbChhLGQpLE09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pLEQ9T2JqZWN0LmtleXMoTSlbZF0sWj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2goTSxbRCwibm9MaW5rT3B0aW9uIl0sITEpLHJlPXRo''@;'; put 'put ''aXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGNlPT5jZS5oYXNoPT09Wik7aWYocmU+LTEpe2xldCBjZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXS52YWx1ZXMubWFwKEJlPT5CZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IGJlPSho''@;'; put 'put ''LmdldENlbGxNZXRhKGEsZCkuc291cmNlfHxbXSkubGVuZ3RoPDEsRWU9IiAiIT09djtoLmJhdGNoKCgpPT57Y29uc3QgQmU9aC5nZXRDZWxsTWV0YShhLGQpLHFlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoQmUuZGF0YXx8IiIpO2xldCBydDtxZSYmKHJ0PXRoaXMuZGNWYWxpZGF0b3I/''@;'; put 'put ''LmdldERxRHJvcGRvd25Tb3VyY2UocWUpKSxydHx8KHJ0PVtdKSwibnVtZXJpYyI9PT1xZT8udHlwZT8ocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwibnVtYmVyIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwibnVtYmVy''@;'; put 'put ''IikpOihydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJzdHJpbmciKSxjZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJzdHJpbmciKSk7Y29uc3QgcHQ9Wy4uLm5ldyBTZXQoWy4uLnJ0LC4uLmNlXSldO2lmKGguc2V0Q2VsbE1l''@;'; put 'put ''dGEoYSxkLCJzb3VyY2UiLHB0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3NvdXJjZTpwdH0pLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLnZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgZHQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0u''@;'; put 'put ''c3RyaWN0O2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShhLGQsInN0cmljdCIsZHQpLGguc2V0Q2VsbE1ldGEoYSxkLCJmaWx0ZXIiLCExKSx0''@;'; put 'put ''aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmR0LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMu''@;'; put 'put ''Y2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLGEsYmUmJkVlKSxoLnJlbmRlcigpfSl9aWYocmU8MCl7Y29uc3QgY2U9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06RH1dLHNvdXJjZV9yb3c6W01dfSxiZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFp''@;'; put 'put ''bHMoRCkuZmluZChFZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1FZS5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFKTtiZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29sOmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09YmUuUlVM''@;'; put 'put ''RV9UWVBFLHZhbHVlczpbXSxoYXNoOlosY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGgrMX0pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsU210KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIixjZSx2b2lkIDAse3N1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKEVlPT57aWYoRWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLm1hcChxZT0+cWVb''@;'; put 'put ''dGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29uc3QgcWU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgocnQ9PnJ0Lmhhc2g9PT1aKTtxZT4tMSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcWVdPXsuLi50aGlzLmNlbGxWYWxp''@;'; put 'put ''ZGF0aW9uU291cmNlW3FlXSxyb3c6YSxjb2w6ZCx2YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3ZhbHVlczpFZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFllZSks''@;'; put 'put ''dGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRjaCgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25W''@;'; put 'put ''YWx1ZXMoITAsYSksaC5yZW5kZXIoKSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2Yo''@;'; put 'put ''ZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChwdCxkdCk9PnB0LmNvdW50PGR0LmNvdW50P3B0''@;'; put 'put ''OmR0KSxydD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YocWUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKHJ0LDEpfX0pLmNhdGNoKEVlPT57Y29uc3QgQmU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgocWU9PnFlLmhhc2g9PT1aKTt0aGlz''@;'; put 'put ''LmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShCZSwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixDbXQpLGgucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5p''@;'; put 'put ''bmRleE9mKGQpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1lb3V0KCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZZWUpLGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJl''@;'; put 'put ''Y29yZEVycm9ycy5pbmRleE9mKGQpLDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLHRoaXMubG9nZ2VyU2VydmljZS5sb2coImdldGR5bmFtaWNjb2x2YWxzIGVycm9yOiIsRWUpfSkpfX1jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJv''@;'; put 'put ''d3M9ITEsdHlwZW9mIHRoaXMuZmlsdGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5sZW5ndGgmJltudWxsLCIiXS5pbmNsdWRlcyh0aGlzLmhvdFRhYmxlLmRhdGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRoaXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRG''@;'; put 'put ''b2N1cyhhKXt0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgsYS5jb2xOYW1lKX1leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFz''@;'; put 'put ''aCh0aGlzLmRhdGFTb3VyY2VbaF0sW2EsIm5vTGlua09wdGlvbiJdKSx2PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZChNPT5NLmhhc2g9PT1mJiZkPT09TS5jb2wpO2lmKHYmJnYuZXh0ZW5kZWRfdmFsdWVzJiZ2LmV4dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgTT10aGlz''@;'; put 'put ''LmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUodixoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyh2LGgsTSwhMCl9fWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FE''@;'; put 'put ''X1JFRn1gXSl9dmlld2JveE1hbmFnZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90YWxSb3dzQ2hhbmdlZCgpe3JldHVybiB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWR9c2V0Q2Vs''@;'; put 'put ''bEZpbHRlcihhKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSxoPWQmJmRbMF07aWYoaCl7Y29uc3QgZj1oWzBdLE09aFsxXTtpZihmPT09aFsyXSYmTT09PWhbM10pe2NvbnN0IFo9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShmLE0pO1omJlouZmlsdGVyPT09''@;'; put 'put ''IWEmJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoZixNLCJmaWx0ZXIiLGEpfX19bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1o''@;'; put 'put ''fSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRzPT09YS5saWJkcyYmKGEud2hlcmVTdHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2JqKX0pO2NvbnN0IGQ9e307dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSIm''@;'; put 'put ''JihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9w''@;'; put 'put ''azwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JLPXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihLbi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sS24u''@;'; put 'put ''ZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNl''@;'; put 'put ''dHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0''@;'; put 'put ''ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1hLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhpcy5kc21ldGEuZmluZChaPT4iTk9URVMiPT09Wi5OQU1FKSxoPXRoaXMu''@;'; put 'put ''ZHNtZXRhLmZpbmQoWj0+IkREX0xPTkdERVNDIj09PVouTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKFo9PiJERF9TSE9SVERFU0MiPT09Wi5OQU1FKTt0aGlzLmRzTm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2''@;'; put 'put ''PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0p''@;'; put 'put ''KHRoaXMuY29scykpLE0uZm9yRWFjaChaPT57dGhpcy5hcHByb3ZlcnMucHVzaChaLlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3Bh''@;'; put 'put ''cmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZs''@;'; put 'put ''YWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19f''@;'; put 'put ''X0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2Uo''@;'; put 'put ''MSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5U''@;'; put 'put ''TVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBDNmUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5k''@;'; put 'put ''Y1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBaPTA7Wjx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO1orKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRh''@;'; put 'put ''dGlvbltaXS5kYXRhXT1fbXQodGhpcy5jZWxsVmFsaWRhdGlvbltaXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bWl0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLHYudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVt''@;'; put 'put ''bnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1u''@;'; put 'put ''czp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oWixyZSl7cmV0dXJuIDA9PT1yZT82MDpaPjUwMD81MDA6Wn0sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVt''@;'; put 'put ''blNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6Wj0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VT''@;'; put 'put ''dGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25h''@;'; put 'put ''bWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KFoscmUsY2UsYmUsRWUsQmUpPT57Y29uc3QgcWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBydCxwdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZHQ9''@;'; put 'put ''dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1kdD9kdFswXVsxXTotMSx2bj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoSnQpO3J0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3ZuXSxydCYmKHB0PWBMQUJFTDogJHtydD8ubGFiZWx9PGJyPlRZUEU6ICR7cnQ/LnR5''@;'; put 'put ''cGV9PGJyPkxFTkdUSDogJHtydD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7cnQ/LmZvcm1hdH1gKX1yZXR1cm4gcWUuaW5uZXJIVE1MPXB0LHFlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1''@;'; put 'put ''cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihaLHJlKT0+e2NvbnN0IGNlPXRoaXMuY29sdW1uSGVhZGVyW1pdLGJlPWNlJiZ0aGlzLmlzQ29sUGsoY2UpLEVlPWNlJiZ0aGlzLmlzUmVhZG9ubHlDb2woY2UpO2JlJiZyZS5jbGFzc0xpc3QuYWRkKCJw''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxFZSYmIWJlJiZyZS5jbGFzc0xpc3QuYWRkKCJyZWFkb25seUNlbGwiKSwwPT09WiYmcmUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLHJlLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNs''@;'; put 'put ''YXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooWixyZSxjZSk9PntyZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHJlKSYmKGNlLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhp''@;'; put 'put ''cy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2Fz''@;'; put 'put ''cGFyYW1zWzBdLlBLQ05UO2NvbnN0IEQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7RCYmRC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFo9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9Pntjb25zdCByZT1k''@;'; put 'put ''b2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO3JlJiZyZS5jbGljaygpfSwxMDApfSksdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKFoscmUsY2UsYmUsRWUsQmUpPT57Wj09PWNlJiZyZT09PWJlJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9u''@;'; put 'put ''bHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKFoscmUpfSksdi5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2so''@;'; put 'put ''ImFmdGVyQ2hhbmdlIiwoWixyZSk9PntpZigiZWRpdCI9PT1yZSl7Y29uc3QgY2U9dGhpcy5ob3RJbnN0YW5jZSxiZT1aWzBdWzBdLEVlPVpbMF1bMV0sQmU9Y2UucHJvcFRvQ29sKEVlKSxxZT1jZS5nZXRDZWxsTWV0YShiZSxCZSk7cWUmJiExPT09cWUuZmlsdGVyJiZjZS5zZXRDZWxsTWV0''@;'; put 'put ''YShiZSxCZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKEVlLEJlLGJlKX19KSx2LmFkZEhvb2soImFmdGVyUmVuZGVyIixaPT57dGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx2LmFkZEhvb2soImFm''@;'; put 'put ''dGVyQ3JlYXRlUm93IiwoWixyZSk9PntpZihaPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0IGNlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9PntjZSYmKGNlLnNjcm9sbFRvcD1jZS5zY3JvbGxIZWlnaHQpfSl9fSksdi5hZGRIb29rKCJi''@;'; put 'put ''ZWZvcmVQYXN0ZSIsKFoscmUpPT57Y29uc3QgY2U9cmVbMF0uc3RhcnRDb2w7WlswXT1aWzBdLm1hcCgoYmUsRWUpPT57Y29uc3QgQmU9dGhpcy5jb2x1bW5IZWFkZXJbY2UrRWVdLHFlPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbQmVdPy50eXBlLHJ0PSgwLGdnLmlzU3BlY2lh''@;'; put 'put ''bE1pc3NpbmcpKGJlKTtyZXR1cm4gcWUmJiFpc05hTihiZSkmJiFydCYmKGJlKj0xKSxiZX0pfSksdi5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHYuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9''@;'; put 'put ''KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITAp''@;'; put 'put ''KToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEuZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiYwPT09S24uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYm''@;'; put 'put ''KEtuLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEucXVlcnkpLEtuLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0''@;'; put 'put ''ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksdi5yZW5kZXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UodmMpLEdlKFNkKSxHZShraCksR2UoU3UpLEdlKExzKSxHZShDdSksR2UoQnMpLEdlKEVzKSxHZShZbSksR2Uo''@;'; put 'put ''QTZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKHFhKHA3dCw3KSxxYShnN3QsNSkscWEobTd0LDUpLHFhKHY3dCw1KSxxYShiN3QsNSkpLDImZCl7bGV0IGY7Q2ko''@;'; put 'put ''Zj1TaSgpKSYmKGguaHQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGgudXBsb2FkU3RhdGVyQ29tcExpc3Q9ZiksQ2koZj1TaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKSxDaShmPVNpKCkpJiYoaC5ob3RJbnN0YW5jZUNvbXBMaXN0PWYpLENpKGY9U2koKSkmJihoLmZpbGVVcGxvYWRJ''@;'; put 'put ''bnB1dENvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjc0LGNvbnN0czpbWyJodCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbInVwbG9hZFN0''@;'; put 'put ''YXRlciIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNs''@;'; put 'put ''ck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxv''@;'; put 'put ''Y2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9jayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiVVRGLTgiLCJu''@;'; put 'put ''YW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJXTEFUSU4xIiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJj''@;'; put 'put ''bGFzcyIsImNsci1jb2wtbWQtMyBmaWx0ZXJCdG4iLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGVkaXRCdG4iLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhjZWwtcGFyc2luZyBjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9u''@;'; put 'put ''IiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRh''@;'; put 'put ''dG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0xIl0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIs''@;'; put 'put ''NCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiYm9yZGVyLTAiLCJib3gtc2hhZG93LW5vbmUtaSIsInBvc2l0aW9uLXJlbGF0aXZlIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJmaWxlRHJhZ2dlZE92''@;'; put 'put ''ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLCJjbHItcm93IiwiYnV0dG9uQmFyIiwiaGVhZGVyQmFyIiwiY2xyLWZsZXgtbWQtcm93IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWVuZCJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQt''@;'; put 'put ''MyBjbHItY29sLWxnLTQgYmFja0J0biIsNCwibmdJZiJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC01IiwiY2xyLWNvbC1sZy00IiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiZWRpdG9yLXRpdGxlIHRleHQtY2VudGVyIG10LTAi''@;'; put 'put ''LDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1tZC00IGNsci1jb2wtbGctNCBidG5DdHJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwiY2xyLWZsZXgtMSIsImJhY2tncm91''@;'; put 'put ''bmQtdHJhbnNwYXJlbnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWzEsImNhcmQtdGV4dCIsImhvdEVkaXRvciIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCJdLFsxLCJob3Qtd3JhcHBlciIs''@;'; put 'put ''ImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwxLCJlZGl0LWhvdCIsMywibGljZW5zZUtleSJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xh''@;'; put 'put ''c3MiLCJtb2RhbCIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmlt''@;'; put 'put ''YXJ5IiwzLCJjbGljayJdLFsxLCJkdXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWyJjbGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9kYWwgei1pbmRl''@;'; put 'put ''eC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2Vy''@;'; put 'put ''LWdyYXkiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3Vj''@;'; put 'put ''Y2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwi''@;'; put 'put ''aWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImNsYXNzIiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0''@;'; put 'put ''bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRl''@;'; put 'put ''ckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hh''@;'; put 'put ''bmdlIiwidXBsb2FkZXIiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXByaW1hcnkiLCJtci0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJjbHItY29sLW1kLTEyIl0sWzMsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1''@;'; put 'put ''dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRh''@;'; put 'put ''dGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQt''@;'; put 'put ''MyIsImNsci1jb2wtbGctNCIsImJhY2tCdG4iXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwidGV4dCJdLFsxLCJidG4i''@;'; put 'put ''LCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwidmlld2JveC1vcGVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIiwic2l6ZSIsIjIwIl0sWzEsImVkaXRvci10aXRsZSIsInRleHQtY2VudGVyIiwibXQtMCJdLFsiY2xyVG9vbHRpcFRy''@;'; put 'put ''aWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ci''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEwIiwidmlldy10YWJsZSIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3Bl''@;'; put 'put ''biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC00IiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuVmlldyIsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20i''@;'; put 'put ''LCJidG4taWNvbiIsImJ0bi1ibG9jayIsImJ0bi1kaW1tZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJu''@;'; put 'put ''b3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gaWNvbi1jb2xsYXBzZSBidG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXN1Y2Nl''@;'; put 'put ''c3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdn''@;'; put 'put ''ZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0''@;'; put 'put ''bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBl''@;'; put 'put ''IiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsx''@;'; put 'put ''LCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwi''@;'; put 'put ''c2VjdGlvbiJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJp''@;'; put 'put ''Z2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs''@;'; put 'put ''Im1vZGFsLWRpYWxvZyIsIm1vZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJk''@;'; put 'put ''LWJsb2NrIHctMTAwIHRleHQtY2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBl''@;'; put 'put ''Iiwic3VibWl0IiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwibS0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWIt''@;'; put 'put ''NSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsInZhbHVlIl0sWzEsImQtYmxvY2siXSxbMSwi''@;'; put 'put ''bW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDYpKDEs''@;'; put 'put ''ImNsci1tb2RhbCIsNyksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5hdHRhY2hGaWxlKE0sITApKX0pLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1''@;'; put 'put ''bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMiwiaDMiLDgpLExlKDMsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSg0LCJkaXYiLDkpKDUsImRpdiIsMTApKDYsInNwYW4iKSxMZSg3LCJEcm9wIGZp''@;'; put 'put ''bGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSg4LCJkaXYiLDExKSg5LCJkaXYiLDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiwxNSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxNiksZ2koIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxDdChNKX0pLGhlKCksZGUoMTUsImxhYmVsIiksTGUoMTYsIlVURi04IiksaGUoKSgpLGRlKDE3LCJjbHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTcpLGdpKCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxoZSgpLGRlKDE5LCJsYWJlbCIpLExlKDIwLCJXTEFUSU4xIiksaGUoKSgpKCkoKSgpLGd0KDIxLEM3dCw2LDEsImRpdiIsMTgpKDIyLFM3dCwzLDEsImRp''@;'; put 'put ''diIsMTkpLGRlKDIzLCJkaXYiLDEzKSxndCgyNCxNN3QsMiwxLCJidXR0b24iLDIwKSgyNSx4N3QsMiwwLCJidXR0b24iLDIxKSxoZSgpLGd0KDI2LEU3dCwzLDAsImRpdiIsMjIpLGhlKCkoKSgpLEd0KDI3LCJkaXYiLDIzKSxoZSgpLGd0KDI4LFQ3dCwxLDEyLCJhcHAtZWRpdC1yZWNvcmQi''@;'; put 'put ''LDI0KSxkZSgyOSwiZGl2IiwyNSwwKSxndCgzMSxBN3QsMiwwLCJkaXYiLDI2KSxkZSgzMiwiZGl2IiwyNyksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDMzLCJkaXYiLDI4KSxndCgzNCxrN3QsOSwy''@;'; put 'put ''LCJkaXYiLDI5KSxkZSgzNSwiZGl2IiwzMCksZ3QoMzYsRjd0LDEwLDYsImg0IiwzMSksaGUoKSxndCgzNyxaN3QsNCwzLCJkaXYiLDMyKSgzOCxXN3QsNSwxLCJkaXYiLDMzKSxoZSgpLGRlKDM5LCJkaXYiLDM0KSxndCg0MCwkN3QsNCwyLCJkaXYiLDM1KSxkZSg0MSwiZGl2IiwzNikoNDIs''@;'; put 'put ''ImRpdiIsMzcpLEd0KDQzLCJob3QtdGFibGUiLDM4LDEpLGhlKCksZGUoNDUsImRpdiIpLGd0KDQ2LFg3dCw1LDIsImNsci10b29sdGlwIiwzOSkoNDcsSjd0LDMsMSwicCIsNDApLGhlKCksZ3QoNDgsdDl0LDE2LDYsImRpdiIsNDEpLGRlKDQ5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSg1MCwiaDMiLDgpLExlKDUxLCJOb3RpY2UiKSxoZSgpLGRlKDUyLCJkaXYiLDkpKDUzLCJwIiw0MyksTGUoNTQp''@;'; put 'put ''LGhlKCkoKSxkZSg1NSwiZGl2IiwyMykoNTYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSg1NywiIENhbmNlbCAiKSxoZSgpLGRlKDU4LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGYpLGgudXBsb2FkUGFyc2VkRmlsZXMoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDU5LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDYwLCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiks''@;'; put 'put ''bWkoaC5iYWRFZGl0LE0pfHwoaC5iYWRFZGl0PU0pLEN0KE0pfSksZGUoNjEsImgzIiw4KSxMZSg2MiksaGUoKSxkZSg2MywiZGl2Iiw5KSg2NCwicCIpLExlKDY1KSxoZSgpKCksZGUoNjYsImRpdiIsMjMpKDY3LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGYpLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg2OCwiIE9rICIpLGhlKCkoKSgpLGRlKDY5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5wa051bGwsTSl8fChoLnBrTnVsbD1NKSxDdChNKX0pLGRlKDcwLCJoMyIs''@;'; put 'put ''OCksTGUoNzEsIkVycm9yIiksaGUoKSxkZSg3MiwiZGl2Iiw5KSg3MywicCIpLExlKDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpKCksZGUoNzUsImRpdiIsMjMpKDc2LCJi''@;'; put 'put ''dXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucGtOdWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg3NywiIE9rICIpLGhlKCkoKSgpLGRlKDc4LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4g''@;'; put 'put ''d3QoZiksbWkoaC5ub1BrTnVsbCxNKXx8KGgubm9Qa051bGw9TSksQ3QoTSl9KSxkZSg3OSwiaDMiLDgpLExlKDgwLCJFcnJvciIpLGhlKCksZGUoODEsImRpdiIsOSkoODIsInAiKSxMZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxoZSgp''@;'; put 'put ''KCksZGUoODQsImRpdiIsMjMpKDg1LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubm9Qa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLExlKDg2LCIgT2sgIiksaGUoKSgpKCksZGUoODcsImNsci1tb2RhbCIsNDYpLGdpKCJjbHJNb2RhbE9wZW5D''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnBrRHVwcyxNKXx8KGgucGtEdXBzPU0pLEN0KE0pfSksZGUoODgsImgzIiw4KSxMZSg4OSwiRXJyb3IiKSxoZSgpLGRlKDkwLCJkaXYiLDkpKDkxLCJwIiksTGUoOTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJt''@;'; put 'put ''aXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksaGUoKSxkZSg5MywicCIpLExlKDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLGhlKCksZ3QoOTUsbjl0LDMsNCwic3BhbiIsNDcpLGhlKCksZGUoOTYsImRpdiIsMjMpKDk3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGYpLEN0KGgucGtEdXBzPSExKX0pLExlKDk4LCIgT2sgIiksaGUoKSgpKCksZGUoOTksImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnRvb0xvbmcsTSl8fChoLnRvb0xvbmc9TSksQ3QoTSl9KSxk''@;'; put 'put ''ZSgxMDAsImgzIiw4KSxMZSgxMDEsIkVycm9yIiksaGUoKSxkZSgxMDIsImRpdiIsOSkoMTAzLCJwIiksTGUoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLGhlKCksZ3QoMTA1LHI5dCwyLDMsInAiLDQ4KSxoZSgp''@;'; put 'put ''LGRlKDEwNiwiZGl2IiwyMykoMTA3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudG9vTG9uZz0hMSxDdChoLmNsZWFuRXhjZWVkKCkpfSksTGUoMTA4LCIgT2sgIiksaGUoKSgpKCkoKSgpKCkoKSgpLGd0KDEwOSxpOXQsMTQsMCwiZGl2Iiw0OSks''@;'; put 'put ''ZGUoMTEwLCJjbHItbW9kYWwiLDUwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDExMSwiaDMiLDUxKSxMZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxkZSgxMTMsInNw''@;'; put 'put ''YW4iKSxMZSgxMTQpLGhlKCkoKSxkZSgxMTUsImRpdiIsOSksZ3QoMTE2LGE5dCwyLDAsImFwcC1xdWVyeSIsMzkpLGhlKCksZGUoMTE3LCJkaXYiLDIzKSgxMTgsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLExl''@;'; put 'put ''KDExOSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDEyMCwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmZpbHRlcj0hMSl9KSxMZSgxMjEsIiBDYW5jZWwgIiksaGUoKSxkZSgxMjIsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoMTIzLCIgT2sgIiksaGUoKSgpKCksZGUoMTI0LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSks''@;'; put 'put ''Q3QoTSl9KSxkZSgxMjUsImgzIiw4KSxMZSgxMjYsIkVycm9yIiksaGUoKSxkZSgxMjcsImRpdiIsOSkoMTI4LCJwIiksTGUoMTI5KSxoZSgpKCksZGUoMTMwLCJkaXYiLDIzKSgxMzEsImJ1dHRvbiIsNTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVy''@;'; put 'put ''cj0hMSl9KSxMZSgxMzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMzMsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxMzUsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2Rh''@;'; put 'put ''bE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRpc2NhcmRTb3VyY2VGaWxlLE0pfHwoaC5kaXNjYXJkU291cmNlRmlsZT1NKSxDdChNKX0pLGRlKDEzNiwiaDMiLDUxKSxMZSgxMzcsIldhcm5pbmciKSxoZSgpLGRlKDEzOCwiZGl2Iiw5KSxMZSgxMzksIiBUaGlz''@;'; put 'put ''IGFjdGlvbiB3aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRlZCBkYXRhICIpLGRlKDE0MCwiYiIpLExlKDE0MSksaGUoKSxMZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE0MywiZGl2IiwyMykoMTQ0LCJidXR0b24iLDUzKSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZGlzY2FyZFNvdXJjZUZpbGU9ITEpfSksTGUoMTQ1LCIgQ2FuY2VsICIpLGhlKCksZGUoMTQ2LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZGlzY2FyZFNvdXJjZUZpbGU9ITEsQ3Qo''@;'; put 'put ''aC5kaXNjYXJkUGVuZGluZ0V4Y2VsKCEwKSl9KSxMZSgxNDcsIiBPayAiKSxoZSgpKCkoKSxkZSgxNDgsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmZpbGVQYXNzd29yZE1vZGFsLE0pfHwoaC5maWxlUGFzc3dv''@;'; put 'put ''cmRNb2RhbD1NKSxDdChNKX0pLGRlKDE0OSwiaDMiLDUxKSxMZSgxNTAsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDE1MSwiZGl2Iiw1OCkoMTUyLCJwIiw0MyksTGUoMTUzLCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxHdCgxNTQsImlucHV0Iiw1OSwyKSxo''@;'; put 'put ''ZSgpLGRlKDE1NiwiZGl2IiwyMyksZ3QoMTU3LG85dCwyLDAsInAiLDYwKSxkZSgxNTgsImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApKX0pLExl''@;'; put 'put ''KDE1OSwiIENhbmNlbCB1cGxvYWQgIiksaGUoKSxkZSgxNjAsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDE1NSk7cmV0dXJuIGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoTS52YWx1ZSkpfSks''@;'; put 'put ''TGUoMTYxLCIgVW5sb2NrICIpLGhlKCkoKSgpLGRlKDE2MiwiY2xyLW1vZGFsIiw1NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgubWFudWFsRmlsZUVkaXRNb2RhbCxNKXx8KGgubWFudWFsRmlsZUVkaXRNb2RhbD1NKSxDdChNKX0pLGRl''@;'; put 'put ''KDE2MywiaDMiLDUxKSxMZSgxNjQsIldhcm5pbmciKSxoZSgpLGRlKDE2NSwiZGl2Iiw5KSxMZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLGRlKDE2NywiYiIpLExlKDE2OCksaGUoKSxMZSgxNjksIiB3aWxsIGJlIGRpc2Nh''@;'; put 'put ''cmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgxNzAsImRpdiIsMjMpKDE3MSwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEpfSksTGUoMTcyLCIgQ2FuY2VsICIpLGhlKCksZGUo''@;'; put 'put ''MTczLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxDdChoLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCkpfSksTGUoMTc0LCIgT2sgIiksaGUoKSgpKCksZGUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw2Miks''@;'; put 'put ''Z2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9''@;'; put 'put ''KSxoZSgpLGRlKDE3NiwiYXBwLXZpZXdib3hlcyIsNjMpLGdpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnZpZXdib3hlcyxNKXx8KGgudmlld2JveGVzPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2NvbnN0IGY9aGEoMTU1KTtmZSgpLE1lKCJ1''@;'; put 'put ''cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxwaSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCks''@;'; put 'put ''ZmUoMTMpLHBpKCJuZ01vZGVsIixoLmVuY29kaW5nKSxNZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSg0KSxwaSgibmdNb2RlbCIsaC5lbmNvZGluZyksTWUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoMyksTWUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVw''@;'; put 'put ''bG9hZExvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCksTWUoIm5nSWYiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRT''@;'; put 'put ''dGF0ZSksZmUoKSxNZSgibmdJZiIsaC5leGNlbEZpbGVQYXJzaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxmZSgzKSxNZSgibmdJZiIsIWgudmFsaWRhdGlvbkRvbmUmJmguc3VibWl0KSxmZSgzKSxNZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCks''@;'; put 'put ''VHIoImNsci1jb2wtbGctMTIiLCFoLnRhYmxlVHJ1ZSksZmUoKSxNZSgibmdWYXIiLGxwKDY3LHk3dCxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxmZSgpLE1lKCJuZ0lmIixoLnRhYmxl''@;'; put 'put ''VHJ1ZSksZmUoKSxNZSgibmdJZiIsIUdzKDcwLEg2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSxmZSgpLE1lKCJuZ0NsYXNzIixzcCg3MixfN3QsIUdzKDcxLEg2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSksZmUoKSxNZSgibmdJZiIsIWgudGFibGVUcnVlKSxmZSgzKSxUcigiaGlkZGVu''@;'; put 'put ''IixoLmhvdFRhYmxlLmhpZGRlbiksTWUoImxpY2Vuc2VLZXkiLGguaG90VGFibGUubGljZW5zZUtleSksZmUoMyksTWUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5l''@;'; put 'put ''ZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRhdGFTb3VyY2UubGVuZ3RoPmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCksTWUoIm5nSWYiLGguc3VibWl0KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0''@;'; put 'put ''TGltaXROb3RpY2UpLGZlKDUpLERyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qg''@;'; put 'put ''c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxwaSgiY2xyTW9kYWxPcGVuIixoLmJhZEVkaXQpLGZlKDIpLHdyKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSx3cihoLmJhZEVkaXRDYXVzZSksZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLHBp''@;'; put 'put ''KCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgucGtEdXBzKSxmZSg4KSxNZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgudG9vTG9uZyksZmUoNiksTWUoIm5nRm9yT2YiLGguZXhjZWVk''@;'; put 'put ''Q2VsbHMpLGZlKDQpLE1lKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksRHIoIiAiLGgubGliZHMsIiAiKSxmZSgyKSxNZSgibmdJZiIsaC5m''@;'; put 'put ''aWx0ZXIpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLHdyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxwaSgiY2xyTW9kYWxPcGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSxNZSgiY2xyTW9k''@;'; put 'put ''YWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZmlsZW5hbWUpLGZlKDcpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLE1lKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSksTWUoIm5nSWYi''@;'; put 'put ''LGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSxNZSgiZGlzYWJsZWQiLGYudmFsdWUubGVuZ3RoPDEpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmZp''@;'; put 'put ''bGVuYW1lKSxmZSg3KSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksTWUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W0k2ZSx3dSxucyxiYSxxbCxiTCxubCwkcyxjMSxI''@;'; put 'put ''bCxvdSxLdSxqMCxMMixQMixkcyxjRyxFWmUsbEcsUUwsdjcseTcsYjcsRF8sU3csdEUsUjZlLEw2ZSxPNmUscE8sWGVlLHU3dCxoN3QsZjd0LEY2ZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBzOXQ9W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6aU59LHtwYXRo''@;'; put 'put ''OiI6bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OmlOfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbSIsY29tcG9uZW50OmlOfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDppTn1dO2xldCBsOXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHpjLmZvckNoaWxkKHM5dCksemNdfSl9fXJldHVybiBjfSkoKSx4QT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsejAsUmEsUmMsbmZdfSl9fXJldHVybiBjfSkoKSxRZWU9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJhLFJjLEc5LE1BLG5mXX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksTjZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCxSYSxSYyxRZWUsbzksXzFl''@;'; put 'put ''LF82ZSx4QSxuZl19KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IGM5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1B''@;'; put 'put ''cih7aW1wb3J0czpbTjZlLFJhLFJjLGw5dCx6MCxvOS5mb3JSb290KCksRzksbmYsQ3csTUEseEEsXzFlLFFlZV19KX19cmV0dXJuIGN9KSgpLHU5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZDl0PVsic2lkZWJhck5hdiJdLGg5dD1bIioiXSxmOXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi91c2VycyJdLHA5dD0oKT0+WyIvdmlldy91c2Vy''@;'; put 'put ''bmF2L2dyb3VwcyJdLGc5dD0oKT0+WyIvdmlldy91c2VybmF2L3JvbGVzIl07ZnVuY3Rpb24gbTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykubmF2aWdhdGVUb1ZpZXdlcigpKX0pLExl''@;'; put 'put ''KDEsIkRhdGEiKSxoZSgpfX1mdW5jdGlvbiB2OXQoYyxsKXsxJmMmJihkZSgwLCJhIiwxOSksTGUoMSwiQVBJIEV4cGxvcmVyIiksaGUoKSl9ZnVuY3Rpb24gYjl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjApLExlKDEsIkxpbmVhZ2UiKSxoZSgpKX1mdW5jdGlvbiB5OXQoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJhIiwyMSksTGUoMSwiTWV0YWRhdGEiKSxoZSgpKX1mdW5jdGlvbiBfOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMiksTGUoMSwiIFVzZXJzIiksaGUoKSl9ZnVuY3Rpb24gdzl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMpLExlKDEsIlN1Ym1pdHRlZCIpLGhlKCkpfWZ1bmN0aW9uIEM5''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsImEiLDI0KSxMZSgxLCJUbyBBcHByb3ZlIiksaGUoKSl9ZnVuY3Rpb24gUzl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxndCgxLG05dCwyLDAsImEiLDExKSgyLHY5dCwyLDAsImEiLDEyKSgzLGI5dCwyLDAsImEiLDEzKSg0LHk5''@;'; put 'put ''dCwyLDAsImEiLDE0KSg1LF85dCwyLDAsImEiLDE1KSg2LHc5dCwyLDAsImEiLDE2KSg3LEM5dCwyLDAsImEiLDE3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3''@;'; put 'put ''IikmJiJTQVNWSVlBIj09PWEuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24gTTl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24i''@;'; put 'put ''KSgyLCJidXR0b24iLDgpLExlKDMpLEd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsUzl0LDgsNywiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLERyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiB4OXQoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIEU5dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gVDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsMjYpKDIsInAiLDI3KSxHdCgzLCJjbHItaWNvbiIsMzIpLExlKDQs''@;'; put 'put ''IiBSb2xlcyAiKSxoZSgpKCksZ3QoNSxFOXQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgicm91dGVyTGluayIsR3MoMixnOXQpKSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9s''@;'; put 'put ''ZXMiKSl9fWZ1bmN0aW9uIEE5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIiwyNSkoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjYpKDMsInAiLDI3KSxHdCg0LCJjbHItaWNvbiIsMjgpLExlKDUsIiBVc2VycyIpLGhlKCkoKSxHdCg2LCJjbHItdGFiLWNvbnRlbnQiKSxoZSgpLGRl''@;'; put 'put ''KDcsImNsci10YWIiKSg4LCJidXR0b24iLDI2KSg5LCJwIiwyNyksR3QoMTAsImNsci1pY29uIiwyOSksTGUoMTEsIiBHcm91cHMiKSxoZSgpKCksZ3QoMTIseDl0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSxndCgxMyxUOXQsNiwzLCJjbHItdGFiIiwzMSksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKCk7ZmUoMiksTWUoInJvdXRlckxpbmsiLEdzKDQsZjl0KSksZmUoNiksTWUoInJvdXRlckxpbmsiLEdzKDUscDl0KSksZmUoNCksTWUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L2dyb3VwcyIpKSxmZSgpLE1lKCJuZ0lmIiwiU0FTOSI9PT1h''@;'; put 'put ''LnNlcnZlclR5cGUpfX1mdW5jdGlvbiBrOXQoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpKDEsImEiLDMzKSxMZSgyLCJUYWJsZXMiKSxoZSgpLGRlKDMsImEiLDM0KSxMZSg0LCJFeGNlbCBNYXBzIiksaGUoKSxkZSg1LCJhIiwzNSksTGUoNiwiTXVsdGkgTG9hZCIpLGhl''@;'; put 'put ''KCkoKSl9ZnVuY3Rpb24gRDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLExlKDMpLEd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsazl0LDcsMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpO2ZlKDMpLERyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1sZXQgaTQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcm91dGVyPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLl9zYXNTZXJ2aWNlPWgsdGhpcy5zY3JvbGxlZFRvQm90dG9tPW5ldyBLcix0''@;'; put 'put ''aGlzLnNpZGViYXJPcGVuPSEwLHRoaXMuc2lkZWJhcldpZHRoPW51bGwsdGhpcy5zaWRlYmFyTWF4V2lkdGg9bnVsbCx0aGlzLnJlc2l6aW5nPSExLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuc2FzanNDb25maWc9dGhpcy5fc2FzU2VydmljZS5nZXRTYXNqc0Nv''@;'; put 'put ''bmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLl9zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2lkZWJhclRvZ2dsZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2lkZWJhck9wZW49YT9hLm9wZW46IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KX1vblRyZWVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLnNjcm9sbGVkVG9Cb3R0b20uZW1pdCgpfWlzTWFpblJvdXRlKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfWdldFN1YlBhZ2UoKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9WaWV3ZXIoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0iIix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcv''@;'; put 'put ''ZGF0YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9InVzZXItc2VsZWN0OiBub25lIn1yZXNpemVFbmQoKXt0aGlzLnJlc2l6aW5nPSExLGRvY3VtZW50LmdldEVsZW1lbnRzQnlU''@;'; put 'put ''YWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0iIn1vbk1vdXNlTW92ZShhKXtpZih0aGlzLnJlc2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1hLmNsaWVudFg7bGV0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0''@;'; put 'put ''aCYmdGhpcy5pc092ZXJmbG93bihkKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lkZWJhcldpZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAoYSl7dGhpcy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJm''@;'; put 'put ''bG93bihhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKExzKSxHZSh2YyksR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFw''@;'; put 'put ''cC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoZDl0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguc2lkZWJhck5hdj1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoIm1vdXNlbW92ZSIsZnVuY3Rpb24odil7cmV0''@;'; put 'put ''dXJuIGgub25Nb3VzZU1vdmUodil9LDAsJDMpKCJtb3VzZXVwIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk1vdXNlVXAodil9LCExLCQzKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LG5nQ29udGVudFNlbGVjdG9yczpoOXQsZGVjbHM6OSx2YXJzOjEz''@;'; put 'put ''LGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIsInNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRy''@;'; put 'put ''ZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eSJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlh''@;'; put 'put ''LWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5r''@;'; put 'put ''IiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHBy''@;'; put 'put ''b3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBs''@;'; put 'put ''b3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21l''@;'; put 'put ''dGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmll''@;'; put 'put ''dy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJM''@;'; put 'put ''aW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZM''@;'; put 'put ''aW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9leGNlbC1tYXBzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxO''@;'; put 'put ''YXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL211bHRpLWxvYWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7c2EoKSxkZSgwLCJjbHItdmVydGljYWwtbmF2IiwxLDApLGd0KDIsTTl0LDYsMSwi''@;'; put 'put ''ZGl2IiwyKSgzLEE5dCwxNCw2LCJjbHItdGFicyIsMykoNCxEOXQsNiwxLCJkaXYiLDIpLEd0KDUsImRpdiIsNCksZGUoNiwiZGl2Iiw1KSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vblRyZWVTY3JvbGwoTSkpfSksWXIoNyksaGUoKSxkZSg4LCJzcGFuIiw2''@;'; put 'put ''KSxGdCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2l6ZVN0YXJ0KCkpfSksaGUoKSgpfTImZCYmKF9kKCJ3aWR0aCIsaC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsaC5zaWRlYmFyTWF4V2lkdGgsInB4IiksVHIoImNsb3NlZCIsIWguc2lkZWJh''@;'; put 'put ''ck9wZW4pKCJyZXNpemluZyIsaC5yZXNpemluZyksZmUoMiksTWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLGZlKCksTWUoIm5nSWYiLGguaXNNYWluUm91dGUoImhvbWUiKSksZmUoNCksVHIoInJl''@;'; put 'put ''c2l6aW5nIixoLnJlc2l6aW5nKSl9LGRlcGVuZGVuY2llczpbYmEsSGwsSHksTDIsX20sQ20seDcsd20seW0sUzcsUVksdEcsc2csZzcsbTcsYzEscHldLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSTl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1''@;'; put 'put ''bmN0aW9uIFI5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rp''@;'; put 'put ''b24gTDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTAsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8''@;'; put 'put ''fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsSTl0LDEsMCwiY2xyLWljb24iLDExKSg1LFI5dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIE85dChjLGwpezEmYyYmR3QoMCwiY2xyLWlj''@;'; put 'put ''b24iLDEzKX1mdW5jdGlvbiBQOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNo''@;'; put 'put ''U3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIEY5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5wdXQiLDE5LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25G''@;'; put 'put ''aWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LE85dCwxLDAsImNsci1pY29uIiwxMSkoNSxQOXQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgyKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgy''@;'; put 'put ''KSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEg5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBOOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gVjl0KGMs''@;'; put 'put ''bCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjkpKDEsInNwYW4iKSxMZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIEI5dChjLGwpezEmYyYmKHNpKDApLGd0KDEsVjl0LDMs''@;'; put 'put ''MCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLGxpKCkpfWZ1bmN0aW9uIGo5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1SZSgpLiRpbXBsaWNp''@;'; put 'put ''dCx2PVJlKDIpLiRpbXBsaWNpdCxNPVJlKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxzaSgyLDIyKSxndCgzLEg5dCwxLDAsImNsci1pY29uIiwyMykoNCxOOXQsMSwwLCJjbHItaWNvbiIsMjQpLGxpKCksTGUoNSksaGUoKSxndCg2LEI5dCwyLDAsIm5nLWNvbnRh''@;'; put 'put ''aW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpLiRpbXBsaWNpdCxoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxNZSgibmdT''@;'; put 'put ''d2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLERyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoKSxNZSgibmdJZiIsYSl9fWZ1bmN0aW9uIHo5dChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsImNsci10cmVlLW5vZGUiKSxndCgxLGo5dCw3LDksImNsci10b29sdGlwIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1SZSgzKTtmZSgpLE1lKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gVTl0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYudHJlZU5vZGVDbGlja2VkKGgsZiksQ3Qodi5saWI9Zi5MSUJSQVJZUkVGKX0p''@;'; put 'put ''LGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUo''@;'; put 'put ''KS4kaW1wbGljaXQsZj1SZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDE4KSxMZSgzKSxoZSgpLGd0KDQsRjl0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoNSx6OXQsMiwxLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEu''@;'; put 'put ''TElCUkFSWVJFRiwiICIpLGZlKCksTWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLE1lKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFo5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVTl0LDYsNywiY2xyLXRyZWUtbm9kZSIsMTUpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBXOXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksTGUoMywiIExvYWRpbmcuLi4gIiksaGUoKSgpKCkpfWZ1bmN0aW9uIFk5dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxMZSgx''@;'; put 'put ''LCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLGhlKCkpfWZ1bmN0aW9uIEc5dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxMZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIiksaGUoKSl9ZnVuY3Rpb24gJDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMyksR3QoMSwi''@;'; put 'put ''aW1nIiwzNCksZ3QoMixZOXQsMiwwLCJwIiwzNSkoMyxHOXQsMiwwLCJwIiwzNSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgSzl0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlz''@;'; put 'put ''LmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJD''@;'; put 'put ''b2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQp''@;'; put 'put ''LHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLHY9W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBs''@;'; put 'put ''ZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IE09Zi5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuLTE9PT12LmluZGV4T2YoRCkmJih2LnB1c2goRCksITApfSk7dGhpcy50YWJsZXM9TSxLbi5lZGl0b3IubGlicmFyaWVzPXRoaXMubGlicmFyaWVzfUtuLmVkaXRvci5saWJyYXJ5PWEs''@;'; put 'put ''ZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIuIitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZp''@;'; put 'put ''ZygpLEtuLmVkaXRvci50YWJsZT1hLGR8fGguY2xlYXJHbG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe0tuLmVkaXRvci5maWx0ZXIubGliZHM9IiIsS24uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0iIixLbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsS24u''@;'; put 'put ''ZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEtuLmVkaXRvci5maWx0ZXIudmFscz1bXSxLbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0''@;'; put 'put ''ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksS24ubGluZWFn''@;'; put 'put ''ZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnNlbGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJs''@;'; put 'put ''KCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3RoaXMudGFibGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PUtuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyYmKHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9S24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PUtuLmVkaXRv''@;'; put 'put ''ci5saWJyYXJ5KXt0aGlzLmxpYj1Lbi5lZGl0b3IubGlicmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihhPXRoaXMudHJlZU5vZGVMaWJyYXJpZXMuZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxpYikpLHRoaXMuc2VsZWN0TGlicmFyeShLbi5lZGl0b3IubGli''@;'; put 'put ''cmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMoKXt0aGlzLmxpYnNBbmRUYWJsZXM9S24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhpcy5saWJyYXJpZXM9S24uZWRpdG9yLmxpYnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50''@;'; put 'put ''SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKEdlKExzKSxHZShDdSksR2UodTEpLEdlKFN1KSxHZSh2YyksR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvbWUtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo4LHZh''@;'; put 'put ''cnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkLWJsb2NrIl0sWyJjbGFzcyIsInNw''@;'; put 'put ''aW5uZXItd3JhcHBlci1mdWxscGFnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsImFwcFN0ZWFsRm9jdXMiLCIiLCJwbGFjZWhvbGRlciIs''@;'; put 'put ''IkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJj''@;'; put 'put ''aCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJM''@;'; put 'put ''b2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMs''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRh''@;'; put 'put ''YmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNp''@;'; put 'put ''emUiLCJsZyJdLFsxLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5''@;'; put 'put ''L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlv''@;'; put 'put ''biIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksZ3QoMixMOXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLFo5dCwyLDEsIm5nLWNvbnRhaW5lciIsMyks''@;'; put 'put ''aGUoKSgpLGRlKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxndCg2LFc5dCw0LDAsImRpdiIsNikoNywkOXQsNCwyLCJkaXYiLDcpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLChudWxsPT1oLnRyZWVOb2RlTGlicmFyaWVzP251bGw6aC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjAp''@;'; put 'put ''LGZlKCksTWUoIm5nRm9yT2YiLGgudHJlZU5vZGVMaWJyYXJpZXMpLGZlKDMpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltxbCxubCwkcyxFaCxQZCxmZyxIbCxqMCxMMixaMSx2Nyx5NyxiNyxpNCxucyxiYSxTMixjcCxT''@;'; put 'put ''dyxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBxOXQ9Yz0+e2Zvcihjb25zdCBsIGluIGMpaWYoIl9fcm93TnVtX18iIT09bClyZXR1cm4hMTtyZXR1cm4hMH0sZXRlPWM9Pntjb25zdCBhPWMubWF0Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGE/''@;'; put 'put ''e3JvdzpwYXJzZUludChhWzFdLDEwKSxjb2x1bW46cGFyc2VJbnQoYVsyXSwxMCl9Om51bGx9LFY2ZT0oYyxsKT0+e2lmKGMuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihjPWMucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGMuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGE9ZXRl''@;'; put 'put ''KGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9RHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6ZC0xLGM6aC0xfSl9fWlmKGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5z''@;'; put 'put ''cGxpdCgiICIpWzFdO2xldCB2PSIiLE09LTEsRD0iIjtpZihpc05hTihOdW1iZXIoZikpP3Y9ZjpNPXBhcnNlSW50KGYpLC0xIT09TSl7Y29uc3QgY2U9bFtNLTFdO2Zvcihjb25zdCBiZSBpbiBjZSlpZigiX19yb3dOdW1fXyIhPT1iZSYmY2VbYmVdPT09YSl7RD1iZStNO2JyZWFrfX1lbHNl''@;'; put 'put ''IGZvcihsZXQgY2U9MDtjZTxsLmxlbmd0aDtjZSsrKWlmKGxbY2VdW3ZdPT09YSl7RD12KyhjZSsxKTticmVha31jb25zdCBaPUR1LnV0aWxzLmRlY29kZV9jZWxsKEQpLHJlPWV0ZShjKTtpZihyZSl7Y29uc3R7cm93OmNlLGNvbHVtbjpiZX09cmU7Yz1EdS51dGlscy5lbmNvZGVfY2VsbCh7''@;'; put 'put ''cjpaLnIrY2UsYzpaLmMrYmV9KX19cmV0dXJuIGN9LEo5dD1bImZpbGVVcGxvYWRJbnB1dCJdO2Z1bmN0aW9uIFE5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLEd0KDEsImNsci1zcGlubmVyIiwyOSksaGUoKSl9ZnVuY3Rpb24gZXZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzAp''@;'; put 'put ''fWZ1bmN0aW9uIHR2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5zZWFyY2hTdHJpbmc9IiIsQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0''@;'; put 'put ''aW9uIG52dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImNsci10cmVlLW5vZGUiKSgyLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkueGxtYXBPbkNsaWNrKGgpKX0pLEd0KDMsImNs''@;'; put 'put ''ci1pY29uIiwzMyksTGUoNCksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtmZSgyKSxUcigiYWN0aXZlIixkLmlzQWN0aXZlWExNYXAoYS5pZCkpLGZlKDIpLERyKCIgIixhLmlkLCIgIil9fWZ1bmN0aW9uIHJ2dChjLGwpezEmYyYmKGRlKDAsInAiLDM3''@;'; put 'put ''KSxMZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSxoZSgpKX1mdW5jdGlvbiBpdnQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNyksTGUoMSwiIE5vIGV4Y2VsIG1hcCBpcyBmb3VuZCAiKSxoZSgpKX1mdW5jdGlvbiBhdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSxHdCgxLCJpbWci''@;'; put 'put ''LDM1KSxndCgyLHJ2dCwyLDAsInAiLDM2KSgzLGl2dCwyLDAsInAiLDM2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aDwxKX19ZnVuY3Rpb24gb3Z0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2IiwzOCkoMSwic3BhbiIsMzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2IikoNCwiaDQiKSxMZSg1KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNSksd3IoYS5pc0xvYWRpbmdEZXNjKX19ZnVuY3Rpb24gc3Z0KGMsbCl7MSZjJiZHdCgwLCJj''@;'; put 'put ''bHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBsdnQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIGN2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gdXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0MCksRnQoImZpbGVEcmFnZ2VkT3Zl''@;'; put 'put ''ciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsNDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRU''@;'; put 'put ''YWI9aC5UYWJzRW51bS5SdWxlcyl9KSxMZSg0LCJSdWxlcyIpLGhlKCksZ3QoNSxzdnQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSxoZSgpLGRlKDYsImNsci10YWIiKSg3LCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdCho''@;'; put 'put ''LnNlbGVjdGVkVGFiPWguVGFic0VudW0uRGF0YSl9KSxMZSg4LCJEYXRhIiksaGUoKSxndCg5LGx2dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCkoKSxndCgxMCxjdnQsMSwwLCJuZy1jb250YWluZXIiLDQzKSxkZSgxMSwiZGl2Iiw0NCkoMTIsImgzIiw0NSksTGUoMTMpLGhlKCks''@;'; put 'put ''ZGUoMTQsImkiLDQ1KSxMZSgxNSksaGUoKSxkZSgxNiwicCIsNDUpLExlKDE3LCIgUnVsZXMgU291cmNlOiAiKSxkZSgxOCwiYSIsNDYpLExlKDE5KSxoZSgpKCksZGUoMjAsInAiLDQ1KSxMZSgyMSwiIFRhcmdldCBkYXRhc2V0OiAiKSxkZSgyMiwiYSIsNDYpLExlKDIzKSxoZSgpKCkoKSxk''@;'; put 'put ''ZSgyNCwiZGl2Iiw0NyksR3QoMjUsImhvdC10YWJsZSIsNDgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDQxKTtmZSg1KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzKSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRU''@;'; put 'put ''YWI9PT1hLlRhYnNFbnVtLkRhdGEpLGZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKDMpLERyKCIgIixhLnNlbGVjdGVkWExNYXAuaWQsIiAiKSxmZSgyKSx3cihhLnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLGZlKDMpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Eu''@;'; put 'put ''cnVsZXNTb3VyY2UpLGZlKCksRHIoIiAiLGEucnVsZXNTb3VyY2UsIiAiKSxmZSgzKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMpLGZlKCksRHIoIiAiLGEuc2VsZWN0ZWRYTE1hcC50YXJnZXREUywiICIpLGZlKDIpLE1lKCJtdWx0aUNv''@;'; put 'put ''bHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzOmEueGxEYXRhKSgiY29sSGVhZGVycyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1h''@;'; put 'put ''cFJ1bGVzSGVhZGVyczphLnhsVXBsb2FkSGVhZGVyKSgiY29sdW1ucyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzQ29sdW1uczphLnhsVXBsb2FkQ29sdW1ucykoImZpbHRlcnMiLCEwKSgiaGVpZ2h0IiwiMTAwJSIpKCJhZnRlckdldENvbEhlYWRlciIs''@;'; put 'put ''YS5hZnRlckdldENvbEhlYWRlcikoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hlY2tlcikoImNlbGxzIixhLmdldENlbGxDb25maWd1cmF0aW9uKSgibWF4Um93cyIsYS5ob3RUYWJsZU1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5yb3dIZWFk''@;'; put 'put ''ZXJzKSgicm93SGVhZGVyV2lkdGgiLDE1KSgicm93SGVpZ2h0cyIsMjApKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlTGljZW5zZUtleSl9fWZ1bmN0aW9uIGR2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TaG93VXBsb2FkTW9kYWwoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxMZSg0LCJVcGxvYWQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gaHZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwi''@;'; put 'put ''YnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5zdWJtaXRFeGNlbCgpKX0pLEd0KDIsImNsci1pY29uIiw1MyksZGUoMywic3BhbiIpLExlKDQsIlN1Ym1pdCIpLGhlKCkoKSgpfX1mdW5jdGlvbiBmdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDU0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRpc2NhcmRFeHRyYWN0ZWREYXRhKCkpfSksR3QoMiwiY2xyLWljb24iLDU1KSxkZSgzLCJzcGFuIiksTGUoNCwiRGlzY2FyZCIpLGhlKCkoKSgpfX1m''@;'; put 'put ''dW5jdGlvbiBwdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ5KSxndCgxLGR2dCw1LDAsImRpdiIsNTApKDIsaHZ0LDUsMCwiZGl2Iiw1MCkoMyxmdnQsNSwwLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51''@;'; put 'put ''bS5SZWFkeVRvVXBsb2FkKSxmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KSxmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KX19dmFyIHJmPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9NYXBTZWxl''@;'; put 'put ''Y3RlZD0wXT0iTm9NYXBTZWxlY3RlZCIsY1tjLkZldGNoaW5nUnVsZXM9MV09IkZldGNoaW5nUnVsZXMiLGNbYy5SZWFkeVRvVXBsb2FkPTJdPSJSZWFkeVRvVXBsb2FkIixjW2MuRXh0cmFjdGluZ0RhdGE9M109IkV4dHJhY3RpbmdEYXRhIixjW2MuUmVhZHlUb1N1Ym1pdD00XT0iUmVhZHlU''@;'; put 'put ''b1N1Ym1pdCIsY1tjLlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhPTVdPSJTdWJtaXR0aW5nRXh0cmFjdGVkRGF0YSIsY1tjLlN1Ym1pdHRpbmc9Nl09IlN1Ym1pdHRpbmciLGN9KHJmfHx7fSksTXc9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SdWxlcz0wXT0iUnVsZXMiLGNbYy5EYXRhPTFdPSJE''@;'; put 'put ''YXRhIixjfShNd3x8e30pO2xldCBCNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZT1NLHRoaXMuc2FzU2VydmljZT1ELHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGZkLHRoaXMuU3RhdHVzRW51bT1yZix0aGlzLlRhYnNFbnVtPU13LHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhpcy5y''@;'; put 'put ''dWxlc1NvdXJjZT1Lbi5kY0xpYisiLk1QRV9YTE1BUF9SVUxFUyIsdGhpcy54bG1hcHM9W10sdGhpcy5zZWxlY3RlZFhMTWFwPXZvaWQgMCx0aGlzLnNlYXJjaFN0cmluZz0iIix0aGlzLnhsbWFwc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRo''@;'; put 'put ''aXMuc3RhdHVzPXJmLk5vTWFwU2VsZWN0ZWQsdGhpcy54bG1hcFJ1bGVzSGVhZGVycz1bIlhMTUFQX1NIRUVUIiwiWExNQVBfUkFOR0VfSUQiLCJYTE1BUF9TVEFSVCIsIlhMTUFQX0ZJTklTSCJdLHRoaXMueGxtYXBSdWxlc0NvbHVtbnM9W3tkYXRhOiJYTE1BUF9TSEVFVCJ9LHtkYXRhOiJY''@;'; put 'put ''TE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJYTE1BUF9TVEFSVCJ9LHtkYXRhOiJYTE1BUF9GSU5JU0gifV0sdGhpcy54bG1hcFJ1bGVzPVtdLHRoaXMueGxVcGxvYWRIZWFkZXI9WyJYTE1BUF9SQU5HRV9JRCIsIlJPV19OTyIsIkNPTF9OTyIsIlZBTFVFX1RYVCJdLHRoaXMueGxVcGxvYWRDb2x1''@;'; put 'put ''bW5zPVt7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiUk9XX05PIn0se2RhdGE6IkNPTF9OTyJ9LHtkYXRhOiJWQUxVRV9UWFQifV0sdGhpcy54bERhdGE9W10sdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuZmlsZW5hbWU9IiIs''@;'; put 'put ''dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLnVwbG9hZGVyPW5ldyBQZWUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0''@;'; put 'put ''YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMH1hZnRlckdldENvbEhlYWRlcihhLGQpe2QuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfXhsbWFwT25DbGljayhhKXthLmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5pZCYmKHRoaXMu''@;'; put 'put ''c2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIi''@;'; put 'put ''KSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIrYS5pZCkpfXhsbWFwTGlzdE9uRmlsdGVyKCl7dGhpcy54bG1hcHM9dGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoPjA/S24u''@;'; put 'put ''eGxtYXBzLmZpbHRlcihkPT5kLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkpOktuLnhsbWFwc31pc0FjdGl2ZVhMTWFwKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkWExNYXA/LmlkPT09YX1tYXhXaWR0aENoZWNrZXIoYSxkKXtyZXR1''@;'; put 'put ''cm4gYT4yMDA/MjAwOmF9Z2V0Q2VsbENvbmZpZ3VyYXRpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fXJvd0hlYWRlcnMoKXtyZXR1cm4iICJ9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMH1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVy''@;'; put 'put ''PWF9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKCFmKXJldHVybjtjb25zdCB2PWYubmFtZTtpZih0aGlzLmZpbGVuYW1lPXYsInhscyI9PT12LnNsaWNlKHYubGFzdEluZGV4T2YoIi4iKSsxLHYubGFzdEluZGV4T2Yo''@;'; put 'put ''Ii4iKSs0KS50b0xvd2VyQ2FzZSgpKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IkV4dHJhY3RpbmcgRGF0YSIsdGhpcy5zdGF0dXM9cmYuRXh0cmFjdGluZ0RhdGE7Y29uc3QgRD1uZXcgRmlsZVJlYWRlcjtELm9ubG9hZD1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7Y29uc3QgY2U9KGM9Pntjb25zdCBsPW5ldyBVaW50OEFycmF5KGMpO2xldCBhPSIiO2NvbnN0IGQ9bC5ieXRlTGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspYSs9U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtyZXR1cm4gYX0pKHJl''@;'; put 'put ''LnRhcmdldC5yZXN1bHQpO2xldCBiZTtjb25zdCBFZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtiZT1EdS5yZWFkKGNlLHsuLi5FZX0pfWNhdGNoKEJlKXtoLmV2ZW50U2VydmljZS5z''@;'; put 'put ''aG93QWJvcnRNb2RhbChudWxsLEJlLHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIWJlKXJldHVybiBoLmlzTG9hZGluZz0hMSxoLmlzTG9hZGluZ0Rlc2M9IiIsaC5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCk7aC5leHRyYWN0RGF0''@;'; put 'put ''YShiZSl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksRC5yZWFkQXNBcnJheUJ1ZmZlcihmKX1lbHNlIHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkLHRoaXMu''@;'; put 'put ''c2hvd1VwbG9hZE1vZGFsPSEwLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwnSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrdGhpcy5maWxlbmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgZXhjZWwgZmlsZS4nKX1kaXNjYXJk''@;'; put 'put ''RXh0cmFjdGVkRGF0YSgpe3RoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkLHRoaXMueGxEYXRhPVtdLHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtd''@;'; put 'put ''LHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5z''@;'; put 'put ''dWJtaXQoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXN1Ym1pdCgpe2lmKCF0aGlzLnNlbGVjdGVkWExNYXB8fCF0aGlzLnhsRGF0YS5sZW5ndGgpcmV0dXJuO3RoaXMuc3RhdHVzPXJmLlN1Ym1pdHRpbmcsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJTdWJtaXR0''@;'; put 'put ''aW5nIGV4dHJhY3RlZCBkYXRhIjtjb25zdCBhPVtdO2Zvcihjb25zdCBNIG9mIHRoaXMudXBsb2FkZXIucXVldWUpYS5wdXNoKHtmaWxlOk0sZmlsZU5hbWU6TS5uYW1lfSk7Y29uc3QgZD1PYmplY3Qua2V5cyh0aGlzLnhsRGF0YVswXSkuam9pbigiLCIpKyJcbiIrdGhpcy54bERhdGEuc2xp''@;'; put 'put ''Y2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKE09Pk9iamVjdC52YWx1ZXMoTSkuam9pbigiLCIpKS5qb2luKCJcbiIpLGg9bmV3IEJsb2IoW2RdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSksZj1xZWUoaCx0aGlzLmZpbGVuYW1lKyIuY3N2Iik7''@;'; put 'put ''YS5wdXNoKHtmaWxlOmYsZmlsZU5hbWU6Zi5uYW1lfSksdGhpcy5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLGEse3RhYmxlOnRoaXMuc2VsZWN0ZWRYTE1hcC50YXJnZXREU30pLnRoZW4oTT0+e2lmKE0uYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJv''@;'; put 'put ''cnQpe2NvbnN0IEQ9TS5hZGFwdGVyUmVzcG9uc2U7dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsRC5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6RC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6RC5TWVNFUlJPUlRFWFQsTUFDOkQuc2FzanNBYm9ydFsw''@;'; put 'put ''XS5NQUN9KX1lbHNlIE0uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcyYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goTT0+e3RoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigi''@;'; put 'put ''ZmlsZSB1cGxvYWQiLE0ucmVzcG9uc2UpfSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPXJmLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29uc3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57''@;'; put 'put ''bGV0IGY9aC5YTE1BUF9TSEVFVDtpZihmLnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgRWU9Zi5zcGxpdCgiLyIpWzFdLEJlPXBhcnNlSW50KEVlKS0xO2Y9YS5TaGVldE5hbWVzW0JlXX1jb25zdCB2PWEuU2hlZXRzW2ZdLE09RHUudXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAsaGVhZGVy''@;'; put 'put ''OiJBIixibGFua3Jvd3M6ITB9KSxEPVY2ZShoLlhMTUFQX1NUQVJULE0pLFo9KChjLGwsYSk9PntpZigiIj09PWwpcmV0dXJuIGM7aWYobC5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGw9bC5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksbC5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29u''@;'; put 'put ''c3QgZD1ldGUobCk7aWYoZCl7Y29uc3R7cm93OmgsY29sdW1uOmZ9PWQse3I6dixjOk19PUR1LnV0aWxzLmRlY29kZV9jZWxsKGMpO2w9RHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6ditoLGM6TStmfSl9fWlmKGwuc3RhcnRzV2l0aCgiTUFUQ0ggIikmJihsPVY2ZShsLGEpKSwiTEFTVERPV04i''@;'; put 'put ''PT09bCl7Y29uc3R7cjpkLGM6aH09RHUudXRpbHMuZGVjb2RlX2NlbGwoYyksZj1EdS51dGlscy5lbmNvZGVfY29sKGgpO2xldCB2PWQ7Zm9yKGxldCBNPWQrMTtNPGEubGVuZ3RoJiZhW01dW2ZdO00rKyl2PU07bD1mKyh2KzEpfWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PUR1LnV0''@;'; put 'put ''aWxzLmRlY29kZV9jZWxsKGMpO2xldCBoPWQ7Zm9yKGxldCBEPWQrMTtEPGEubGVuZ3RoJiYhcTl0KGFbRF0pO0QrKyloPUQ7bD1PYmplY3Qua2V5cyhhW2hdKS5maWx0ZXIoRD0+Il9fcm93TnVtX18iIT09RCkucmVkdWNlKChELFopPT5aPkQ/WjpELCIiKSsoaCsxKX1yZXR1cm4gbH0pKEQs''@;'; put 'put ''aC5YTE1BUF9GSU5JU0gsTSkscmU9YCR7RH06JHtafWAsY2U9RHUudXRpbHMuZGVjb2RlX3JhbmdlKHJlKSxiZT1EdS51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxyYW5nZTpyZSxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pO2ZvcihsZXQgRWU9MDtFZTxiZS5sZW5ndGg7RWUrKyl7''@;'; put 'put ''Y29uc3QgQmU9YmVbRWVdO2ZvcihsZXQgcWU9Y2Uucy5jLHJ0PTA7cWU8PWNlLmUuYztxZSsrLHJ0Kyspe2NvbnN0IHB0PUR1LnV0aWxzLmVuY29kZV9jb2wocWUpO3B0IGluIEJlJiZkLnB1c2goe0xPQURfUkVGOiIwIixYTE1BUF9JRDpoLlhMTUFQX0lELFhMTUFQX1JBTkdFX0lEOmguWExN''@;'; put 'put ''QVBfUkFOR0VfSUQsUk9XX05POkVlKzEsQ09MX05POnJ0KzEsVkFMVUVfVFhUOkJlW3B0XX0pfX19KSx0aGlzLnN0YXR1cz1yZi5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnhsRGF0YT1kLHRoaXMuc2VsZWN0ZWRUYWI9TXcuRGF0''@;'; put 'put ''YX12aWV3WExNYXBSdWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5zdGF0dXM9cmYuRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS5nZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2Fk''@;'; put 'put ''aW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Lbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhsbWFwcy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3Rl''@;'; put 'put ''ZFhMTWFwPWQsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7S24u''@;'; put 'put ''ZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2Uo''@;'; put 'put ''U2QpLEdlKEN1KSxHZShMcyksR2Uoa2gpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShKOXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5maWxl''@;'; put 'put ''VXBsb2FkSW5wdXRDb21wTGlzdD1mKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6NDIsdmFyczoxNixjb25zdHM6W1sic2VhcmNoWExNYXBUcmVlSW5wdXQi''@;'; put 'put ''LCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiYWN0aW9uQnV0dG9ucyIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJ''@;'; put 'put ''bnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElkIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2si''@;'; put 'put ''LDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAw''@;'; put 'put ''IGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIsNCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2Rh''@;'; put 'put ''bFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgi''@;'; put 'put ''LCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJo''@;'; put 'put ''aWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxp''@;'; put 'put ''bmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJs''@;'; put 'put ''ZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEwIiwiY2RzLXRleHQiLCJzZWN0aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEs''@;'; put 'put ''ImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxpbmsiLCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQs''@;'; put 'put ''Im5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWkiXSxbImNkcy10ZXh0IiwibGFiZWxMaW5rIiwxLCJtbC0xMCIsMywi''@;'; put 'put ''cm91dGVyTGluayJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3QtdGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRh''@;'; put 'put ''IiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiaGVpZ2h0IiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJs''@;'; put 'put ''aWNlbnNlS2V5Il0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWNvbC0xMiBjbHItY29sLWxnLTQiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLXNtIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLGd0KDEsUTl0LDIsMCwiZGl2Iiwz''@;'; put 'put ''KSxkZSgyLCJjbHItdHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDQpKDQsImRpdiIsNSkoNSwiaW5wdXQiLDYsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNlYXJjaFN0cmluZyxNKXx8KGguc2VhcmNoU3RyaW5nPU0pLEN0KE0pfSksRnQoImtl''@;'; put 'put ''eXVwIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg3LGV2dCwxLDAsImNsci1pY29uIiw3KSg4LHR2dCwxLDAsImNsci1pY29uIiw4KSxoZSgpKCksZ3QoOSxudnQsNSwzLCJuZy1jb250YWluZXIiLDkpLGhlKCkoKSxkZSgxMCwi''@;'; put 'put ''ZGl2IiwxMCksZ3QoMTEsYXZ0LDQsMiwiZGl2IiwxMSkoMTIsb3Z0LDYsMSwiZGl2IiwxMikoMTMsdXZ0LDI2LDI1LCJkaXYiLDEzKSxkZSgxNCwiY2xyLW1vZGFsIiwxNCksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZp''@;'; put 'put ''bGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNLCEwKSl9KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93VXBsb2FkTW9kYWwsTSl8fChoLnNob3dVcGxvYWRNb2RhbD1NKSxDdChNKX0pLGRl''@;'; put 'put ''KDE1LCJoMyIsMTUpLExlKDE2LCJVcGxvYWQgRmlsZSIpLGhlKCksZGUoMTcsImRpdiIsMTYpKDE4LCJkaXYiLDE3KSgxOSwic3BhbiIpLExlKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSgyMSwiZGl2IiwxOCkoMjIsImRpdiIsMTkpKDIzLCJkaXYiLDIw''@;'; put 'put ''KSgyNCwic3BhbiIsMjEpKDI1LCJsYWJlbCIsMjIpLExlKDI2LCIgQnJvd3NlICIpLGhlKCkoKSxkZSgyNywiaW5wdXQiLDIzLDEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmdldEZpbGVEZXNjKE0pKX0pLGhlKCkoKSgpKCkoKSgpLGRlKDI5LCJjbHItbW9k''@;'; put 'put ''YWwiLDI0KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSgzMCwiaDMiLDE1KSxMZSgzMSwiTm90aWNlIiksaGUoKSxkZSgzMiwiZGl2Iiwx''@;'; put 'put ''NikoMzMsInAiLDI1KSxMZSgzNCksaGUoKSgpLGRlKDM1LCJkaXYiLDI2KSgzNiwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDM3LCIgQ2FuY2VsICIpLGhlKCksZGUoMzgsImJ1dHRvbiIsMjcp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5zdWJtaXQoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDM5LCIgU3VibWl0ICIpLGhlKCkoKSgpKCksZ3QoNDAscHZ0LDQsMywibmctdGVtcGxhdGUiLG51bGwsMixJYyl9aWYoMiZkKXtjb25zdCBmPWhhKDYp''@;'; put 'put ''O2ZlKCksTWUoIm5nSWYiLGgueGxtYXBzTG9hZGluZyksZmUoNCkscGkoIm5nTW9kZWwiLGguc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsZi52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsZi52YWx1ZS5sZW5ndGg+MCksZmUoKSxNZSgibmdGb3JPZiIsaC54bG1hcHMpLGZl''@;'; put 'put ''KDIpLE1lKCJuZ0lmIiwhaC5zZWxlY3RlZFhMTWFwKSxmZSgpLE1lKCJuZ0lmIixoLmlzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWguaXNMb2FkaW5nJiZoLnNlbGVjdGVkWExNYXApLGZlKCksTWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9k''@;'; put 'put ''YWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9kYWwpLGZlKDEzKSxNZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUp''@;'; put 'put ''LERyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJv''@;'; put 'put ''bGxlci5pbyAiKX19LGRlcGVuZGVuY2llczpbRF8sYzEscWwsbmwsJHMsRWgsUGQsZmcsSGwsb3UsS3UsSHksZHMsWjEsX20sQ20seDcsd20seW0sUzcsUmQsaTQsbnMsYmEsTjEsdEUsUjZlLEw2ZSxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBndnQ9W3twYXRo''@;'; put 'put ''OiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siYXBwLXhsbWFwLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6QjZlfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6QjZlfV19XTtsZXQgbXZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1v''@;'; put 'put ''ZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChndnQpLHpjXX0pfX1yZXR1cm4gY30pKCk7bk4oKTtsZXQgdnZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltvOSxtdnQsUmMsejAsRzksUmEseEEsbmZdfSl9fXJldHVybiBjfSkoKSxidnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVz''@;'; put 'put ''dHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tdWx0aS1kYXRhc2V0LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIi''@;'; put 'put ''XSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHl2dD0oYyxsLGEpPT57bC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250''@;'; put 'put ''YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LF92dD1bImNvbnRlbnRBcmVhIl0sd3Z0PSgpPT5bImh0RGFyayIsImh0Q3VzdG9tSGlkZGVuIl07ZnVuY3Rpb24gQ3Z0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNCksR3QoMSwiY2xyLXNwaW5uZXIiLDIyKSxoZSgpKX1mdW5jdGlvbiBTdnQo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI1KSgxLCJidXR0b24iLDI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KGhhKDQpLmNsaWNrKCkpfSksTGUoMiwiIEJyb3dzZSBmaWxlICIpLGhlKCksZGUoMywiaW5wdXQiLDI3LDEpLEZ0KCJjaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgiZGlzYWJsZWQiLG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8YS5zdWJtaXR0aW5nQ3N2KX19ZnVuY3Rpb24gTXZ0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbkRpc2NhcmQoKSl9KSxMZSgyLCIgRGlzY2FyZCAiKSxoZSgpLGRlKDMsImJ1dHRvbiIsMzEpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TdWJtaXRBbGwoKSl9KSxMZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIHh2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBFdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rp''@;'; put 'put ''b24gVHZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx4dnQsMSwwLCJjZHMtaWNvbiIsMzQpKDIsRXZ0LDEsMCwiY2RzLWljb24iLDM1KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsYS5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBBdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24ga3Z0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIER2dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQXZ0LDEsMCwiY2RzLWlj''@;'; put 'put ''b24iLDM0KSgyLGt2dCwxLDAsImNkcy1pY29uIiwzOCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5ndGgmJmEucGFyc2VSZXN1bHQpKSxmZSgpLE1lKCJuZ0lmIixhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNl''@;'; put 'put ''UmVzdWx0KX19ZnVuY3Rpb24gSXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIFJ2dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQxKX1mdW5jdGlvbiBMdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEl2dCwxLDAsImNkcy1pY29uIiwzOCkoMixSdnQs''@;'; put 'put ''MSwwLCJjbHItc3Bpbm5lciIsNDApLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLE1lKCJuZ0lmIixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIE92dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsRHZ0LDMs''@;'; put 'put ''MiwibmctY29udGFpbmVyIiw0KSgyLEx2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuZGF0YXNvdXJjZSksZmUoKSxNZSgibmdJZiIsIWEuZGF0YXNvdXJjZSl9fWZ1bmN0aW9uIFB2dChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLm9uUGFyc2VkRGF0YXNldENsaWNrKGgpKX0pLGd0KDIsVHZ0LDMsMiwibmctY29udGFp''@;'; put 'put ''bmVyIiw0KSgzLE92dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksZGUoNCwic3BhbiIsMzMpLExlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdCksZmUoKSxNZSgibmdJ''@;'; put 'put ''ZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxEcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBGdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE12dCw1LDAsImRpdiIsMyksZGUoMiwicCIsMjgpLExlKDMsIkZvdW5kIHRhYmxlczoiKSxoZSgpLGRlKDQsImNsci10cmVlIiksZ3QoNSxQ''@;'; put 'put ''dnQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLE1lKCJuZ0Zvck9mIixhLnBhcnNlZERhdGFzZXRzKX19ZnVuY3Rpb24gSHZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNv''@;'; put 'put ''biIsMzYpfWZ1bmN0aW9uIE52dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM3KX1mdW5jdGlvbiBWdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGlt''@;'; put 'put ''cGxpY2l0O3JldHVybiBDdChSZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLEh2dCwxLDAsImNkcy1pY29uIiwzNCkoMyxOdnQsMSwwLCJjZHMtaWNvbiIsMzUpLEd0KDQsImNkcy1pY29uIiwzOSksTGUoNSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLERyKCIgIixhLmxpYmRzLCIgIil9fWZ1bmN0aW9uIEJ2dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInAiLDQyKSxMZSgyLCJTdWJt''@;'; put 'put ''aXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LFZ2dCw2LDUsImNsci10cmVlLW5vZGUiLDI5KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJuZ0Zvck9mIixhLnN1Ym1pdHRlZENzdkRhdGFzZXRzKX19ZnVuY3Rpb24ganZ0KGMsbCl7MSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2Iiw0NCksR3QoMSwiY2xyLWljb24iLDQ1KSxkZSgyLCJwIiw0NiksTGUoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24genZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw0NykoMiwiZGl2Iiw0OCkoMywi''@;'; put 'put ''cCIsNDkpLExlKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxMZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSxoZSgpLGRl''@;'; put 'put ''KDksImNsci10b29sdGlwLWNvbnRlbnQiKSxMZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUxKSxMZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUoMTMsInN0cm9uZyIpLExlKDE0KSxoZSgpKCksZGUoMTUsInAiLDUyKSxMZSgxNiwiIFBhc3RlIG9yIHR5cGUg''@;'; put 'put ''dGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDUzKSxMZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgdGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVs''@;'; put 'put ''YXRlIGlmIGFueS4iKSxoZSgpLEd0KDE5LCJob3QtdGFibGUiLDU0KSxkZSgyMCwiZGl2Iiw1NSkoMjEsImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TdGFydFBhcnNpbmdGaWxlKCkpfSksTGUoMjIsIiBDb250aW51ZSAiKSxoZSgp''@;'; put 'put ''KCkoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDYpLHdyKGEuc2VsZWN0ZWRGaWxlLm5hbWUpLGZlKDgpLERyKCIiLGEuc2VsZWN0ZWRGaWxlLnNpemVNQiwiIE1CIiksZmUoNSksTWUoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgic2V0dGluZ3Mi''@;'; put 'put ''LGEuaG90VXNlckRhdGFzZXRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpLGZlKDIpLE1lKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCkoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIFV2dChjLGwpe2lmKDEmYyYmKHNpKDAp''@;'; put 'put ''LEd0KDEsImNsci1pY29uIiw1NyksZGUoMiwicCIsNDYpLExlKDMpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDMpLERyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19ZnVuY3Rpb24gWnZ0KGMsbCl7MSZjJiYoc2koMCksR3QoMSwiY2xyLWljb24iLDU4KSxkZSgy''@;'; put 'put ''LCJwIiw0NiksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSBkYXRhc2V0IG9uIHRoZSBsZWZ0IHRvIHJldmlldyB0aGUgZGF0YSAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFd2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDQpLGd0KDEsVXZ0LDQsMSwibmctY29udGFpbmVyIiw0KSgyLFp2dCw0''@;'; put 'put ''LDAsIm5nLWNvbnRhaW5lciIsNCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpLGZlKCksTWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5w''@;'; put 'put ''YXJzZWQpfX1mdW5jdGlvbiBZdnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NSkoMSwic3Ryb25nIiksTGUoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gR3Z0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpKDEsInN0cm9uZyIpLExlKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlv''@;'; put 'put ''biAkdnQoYyxsKXsxJmMmJihkZSgwLCJwIiw2MyksTGUoMSwiIEVycm9yIGRldGFpbHM6ICIpLGhlKCkpfWZ1bmN0aW9uIEt2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDUpO3JldHVy''@;'; put 'put ''biBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0KSl9KSxMZSgxLCIgUmVzdWJtaXQgIiksaGUoKX0yJmMmJk1lKCJjbHJMb2FkaW5nIixSZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBxdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY5''@;'; put 'put ''KSgxLCJkaXYiKSgyLCJwIiw2MiksTGUoMywiIFN1Ym1pdCBTdGF0dXM6ICIpLGd0KDQsWXZ0LDMsMCwic3BhbiIsNzApKDUsR3Z0LDMsMCwic3BhbiIsNzEpLGhlKCksZ3QoNiwkdnQsMiwwLCJwIiw3MiksaGUoKSxkZSg3LCJkaXYiKSxndCg4LEt2dCwyLDEsImJ1dHRvbiIsNzMpLGRlKDks''@;'; put 'put ''ImJ1dHRvbiIsNzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxo''@;'; put 'put ''LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSl9KSxMZSgxMCwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoNCksTWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFj''@;'; put 'put ''dGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpLGZlKCksTWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixudWxsPT1h''@;'; put 'put ''LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMiksTWUoIm5nSWYiLCFhLnN1Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5h''@;'; put 'put ''Y3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfX1mdW5jdGlvbiBYdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxMZSgyKSxlbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoMiksRHIoIiAiLERjKDMsMSxudWxs''@;'; put 'put ''PT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gSnZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwic3Ryb25nIiksTGUoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9UmUoNCk7ZmUoMiksVXUoJyInLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMuc2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWRE''@;'; put 'put ''YXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIpfX1mdW5jdGlvbiBRdnQoYyxsKXsxJmMmJihkZSgwLCJzdHJvbmciKSxMZSgxLCJObyBkYXRhIGZvdW5kIiks''@;'; put 'put ''aGUoKSl9ZnVuY3Rpb24gZWJ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODEpKDEsInN0cm9uZyIpLExlKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLEd0KDMsImNsci1zcGlubmVyIiw4MiksaGUoKSl9ZnVuY3Rpb24gdGJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxR''@;'; put 'put ''dnQsMiwwLCJzdHJvbmciLDQpKDIsZWJ0LDQsMCwic3BhbiIsODApLGxpKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSksZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJs''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIG5idChjLGwpezEmYyYmKGRlKDAsImRpdiIsODMpLEd0KDEsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24gcmJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZ3QoMSxxdnQsMTEsNCwiZGl2Iiw1OSkoMixYdnQsNCwzLCJkaXYiLDYwKSxkZSgz''@;'; put 'put ''LCJkaXYiLDYxKSg0LCJkaXYiKSg1LCJwIiw2MiksTGUoNiwiIEZvdW5kIGluIHJhbmdlOiAiKSxndCg3LEp2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoOCx0YnQsMywyLCJuZy1jb250YWluZXIiLDQpLGhlKCksZGUoOSwicCIsNjMpLExlKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9u''@;'; put 'put ''ZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2NCksTGUoMTQpLGhlKCksZGUoMTUsImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxMZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCkoKSxkZSgxNywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5''@;'; put 'put ''LCJpbnB1dCIsNjYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpO3JldHVybiBtaShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbixoKXx8KGYuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgp''@;'; put 'put ''LEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxMZSgyMSwiSW5jbHVkZSBpbiBzdWJtaXNzaW9uIiksaGUoKSgpKCkoKSxndCgyMixuYnQsMiwwLCJkaXYiLDY3KSxHdCgyMywiaG90LXRhYmxlIiw2OCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS5hY3Rp''@;'; put 'put ''dmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdCksZmUoKSxNZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKDUpLE1lKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERh''@;'; put 'put ''dGFzZXQucGFyc2VSZXN1bHQpLGZlKCksTWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKDUpLE1lKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJkcyksZmUoKSx3cihhLmFjdGl2ZVBhcnNlZERhdGFzZXQubGli''@;'; put 'put ''ZHMpLGZlKCksTWUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbiksTWUoImRpc2FibGVkIiwhKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNl''@;'; put 'put ''JiZhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpKSxmZSgzKSxNZSgibmdJZiIsYS5pc0hvdEhpZGRlbiksZmUoKSxNZSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjbGFzc05hbWUiLEdzKDE4LHd2dCkpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxl''@;'; put 'put ''TGljZW5zZUtleSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgiZmlsdGVycyIsITApfX1mdW5jdGlvbiBpYnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFd2dCwzLDIsImRpdiIsOSko''@;'; put 'put ''MixyYnQsMjQsMTksIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldCl9fWZ1bmN0aW9uIGFidChjLGwpezEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsNDQpLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLGhlKCkoKSl9ZnVuY3Rpb24gb2J0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxhYnQs''@;'; put 'put ''NCwwLCJkaXYiLDkpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gc2J0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEsInN0cm9uZyIpLExlKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIGxidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJvbmciKSxMZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gY2J0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLExlKDEsIiBFcnJvciBkZXRhaWxzOiAiKSxoZSgpKX1mdW5jdGlvbiB1YnQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxMZSgyKSxlbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksRHIoIiAiLERjKDMsMSxhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLCIgIil9fWZ1bmN0aW9uIGRidChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1MbigpO3NpKDApLGRlKDEsImRpdiIsODUpKDIsImRpdiIpKDMsInAiLDYyKSxMZSg0LCIgTWF0Y2hlZCB3aXRoIGRhdGFzZXQ6ICIpLGRlKDUsInN0cm9uZyIpKDYsImNsci10b29sdGlwIikoNywiYSIsNjQpLExlKDgpLGhlKCksZGUoOSwiY2xyLXRvb2x0aXAtY29udGVudCIsNjUpLExl''@;'; put 'put ''KDEwLCIgQ2xpY2sgdG8gZWRpdCB0aGUgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxMSwicCIsNjIpLExlKDEyLCIgU3RhdHVzOiAiKSxndCgxMyxzYnQsMywwLCJzcGFuIiw3MCkoMTQsbGJ0LDMsMCwic3BhbiIsNzEpLGhlKCksZ3QoMTUsY2J0LDIsMCwicCIsNzIpLGhlKCksZGUoMTYsImRp''@;'; put 'put ''diIpKDE3LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LnN1Y2Nlc3N8fGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcikpfSksTGUo''@;'; put 'put ''MTgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCksZ3QoMTksdWJ0LDQsMywiZGl2Iiw2MCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNyksTWUoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmxpYmRzKSxmZSgpLHdyKGEuYWN0aXZl''@;'; put 'put ''U3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSxNZSgiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksZmUoNCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzKSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENz''@;'; put 'put ''dkRhdGFzZXQuZXJyb3IpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksZmUoNCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcil9fWZ1bmN0aW9uIGhidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsenZ0LDIzLDcs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsNCkoMixpYnQsMywyLCJuZy1jb250YWluZXIiLDQpKDMsb2J0LDIsMSwibmctY29udGFpbmVyIiw0KSg0LGRidCwyMCw4LCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLnBhcnNlZERhdGFzZXRzLmxlbmd0''@;'; put 'put ''aCYmbnVsbCE9PWEuc2VsZWN0ZWRGaWxlKSxmZSgpLE1lKCJuZ0lmIixhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWEuc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsYS5hY3Rp''@;'; put 'put ''dmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gZmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksRHIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jv''@;'; put 'put ''d3NfbGltaXQsIiByb3dzIGluIGVhY2ggZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvLiAiKX19dmFyIHh3PWZ1bmN0aW9uKGMpe3JldHVybiBjLnJlYWRpbmc9IlJlYWRpbmcgdGhlIGZp''@;'; put 'put ''bGUiLGMucGFyc2luZz0iU2VhcmNoaW5nIGZvciB0aGUgZGF0YSBpbiB0aGUgZmlsZSIsYy5wYXJzZWQ9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgZmluaXNoZWQiLGMubm90U2VsZWN0ZWQ9IkZpbGUgbm90IHNlbGVjdGVkIixjfSh4d3x8e30pO2NvbnN0IHBidD1be3BhdGg6IiIsY29tcG9u''@;'; put 'put ''ZW50OmJ2dCxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0''@;'; put 'put ''aGlzLnNwcmVhZHNoZWV0U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMuY2RyPUQsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5maWxlTG9h''@;'; put 'put ''ZGluZ1N0YXRlPXh3Lm5vdFNlbGVjdGVkLHRoaXMuRmlsZUxvYWRpbmdTdGF0ZT14dyx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHRoaXMuY3N2RmlsZXM9''@;'; put 'put ''W10sdGhpcy5jc3ZTdWJtaXR0aW5nPSExLHRoaXMuYXV0b0RldGVjdGluZ0NvbHVtbnM9ITEsdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHM9W10sdGhpcy5kYXRhc2V0c0xvYWRpbmc9ITEsdGhpcy51cGxvYWRM''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNoZWV0TmFtZXM9W10sdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLmxpYnNBbmRUYWJsZXM9e30sdGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRS''@;'; put 'put ''ZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNlckRhdGFzZXRzPXtjb2xIZWFkZXJzOlsiTGlicmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsi''@;'; put 'put ''IiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVweCIsY2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0''@;'; put 'put ''ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1uU29ydGluZzohMH0sdGhpcy5hZnRlckdldENvbEhlYWRlcj15dnQsdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBZ''@;'; put 'put ''bX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUtuLmVkaXRvci5saWJzQW5kVGFibGVzO2NvbnN0IGE9T2JqZWN0LmtleXModGhpcy5saWJzQW5kVGFibGVz''@;'; put 'put ''KTt0aGlzLmhvdFVzZXJEYXRhc2V0cz8uY29sdW1ucyYmKHRoaXMuaG90VXNlckRhdGFzZXRzLmNvbHVtbnNbMF0uc291cmNlPWEpfW9uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPWE/LnRhcmdldD8uZmlsZXN8fFtdO2lmKGgubGVuZ3Ro''@;'; put 'put ''PDEpcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gZmlsZSBmb3VuZC4iLG51bGwsIkZpbGUgVXBsb2FkIik7bGV0IGY9IiI7Zm9yKGxldCB2IG9mIGgpe2NvbnN0IE09di5uYW1lLnNwbGl0KCIuIikucG9wKCk7aWYoZnx8KGY9TSksZiE9PU0pcmV0''@;'; put 'put ''dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTWl4ZWQgZXh0ZW5zaW9ucyBlcnJvciIsIlBsZWFzZSBzZWxlY3QgZmlsZXMgd2l0aCBzYW1lIGV4dGVuc2lvbi4iKTtmPU19aWYoWyJ4bHN4IiwieGxzbSIsInhsbSJdLmluY2x1ZGVzKGYpKWQuc2VsZWN0ZWRGaWxlPWEu''@;'; put 'put ''dGFyZ2V0LmZpbGVzWzBdLGQuc2VsZWN0ZWRGaWxlJiYoZC5maWxlTG9hZGluZ1N0YXRlPXh3LnJlYWRpbmcsZC5zZWxlY3RlZEZpbGUuc2l6ZU1CPWQuc3ByZWFkc2hlZXRTZXJ2aWNlLmJ5dGVzVG9NQihkLnNlbGVjdGVkRmlsZS5zaXplKSxkLnNwcmVhZHNoZWV0U2VydmljZS54bHN4UmVh''@;'; put 'put ''ZEZpbGUoZC5zZWxlY3RlZEZpbGUpLnRoZW4odj0+e2QuZmlsZUxvYWRpbmdTdGF0ZT14dy5wYXJzaW5nLGQuc2VsZWN0ZWRGaWxlLndvcmtib29rPXZ9KSksZC5pbml0VXNlcklucHV0SG90KCksZC5vbkF1dG9EZXRlY3RDb2x1bW5zKCk7ZWxzZXtpZigiY3N2IiE9PWYpcmV0dXJuIHZvaWQg''@;'; put 'put ''ZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiT25seSBleGNlbCBleHRlbnNpb25zIGFyZSBhbGxvd2VkLiAoeGxzeCkiLG51bGwsIkV4dGVuc2lvbiBFcnJvciIpO2Qub25NdWx0aUNzdkZpbGVzKGEudGFyZ2V0LmZpbGVzKX1hLnRhcmdldC52YWx1ZT0iIn0pKCl9b25NdWx0''@;'; put 'put ''aUNzdkZpbGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2ZvcihsZXQgaCBvZiBhKXtjb25zdCBmPWQucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5uYW1lKTtkLmlzVmFsaWREYXRhc2V0Rm9ybWF0KGYpJiZkLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGYpJiZkLmNz''@;'; put 'put ''dkZpbGVzLnB1c2goe2ZpbGU6aCxmaWxlTmFtZTpoLm5hbWV9KX1kLmNzdkZpbGVzLmxlbmd0aD8oZC5jc3ZTdWJtaXR0aW5nPSEwLHlpZWxkIGQuc3VibWl0Q3N2RmlsZXMoKSxkLmNzdlN1Ym1pdHRpbmc9ITEpOmQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkNTViBVcGxvYWQiLCJO''@;'; put 'put ''b25lIG9mIHRoZSBhdHRhY2hlZCBDU1YgZmlsZSBuYW1lcyBtYXRjaGVkIGFuIGFjdHVhbCBkYXRhc2V0LiIpfSkoKX1vbkRpc2NhcmRGaWxlKCl7dGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIifW9uU3RhcnRQYXJzaW5nRmlsZSgpe3ZhciBhPXRoaXM7''@;'; put 'put ''cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2xldCBoPVtdO2ZvcihsZXQgZiBvZiBhLm1hdGNoZWREYXRhc2V0cyl7Y29uc3Qgdj1hLmZldGNoRGF0YXNldChmKTtkLnB1c2godil9UHJvbWlzZS5hbGxTZXR0bGVkKGQpLnRoZW4oZj0+e2YuZm9y''@;'; put 'put ''RWFjaChNPT57ImZ1bGZpbGxlZCI9PT1NLnN0YXR1cyYmTS52YWx1ZSYmaC5wdXNoKE0udmFsdWUpfSksYS51cGxvYWRMb2FkaW5nPSExLGEuYnVpbGREYXRhc2V0c09iamVjdHMoaCkuZm9yRWFjaChNPT57YS5wYXJzZWREYXRhc2V0cy5wdXNoKHtsaWJkczpNLmxpYmRzLGluY2x1ZGVJblN1''@;'; put 'put ''Ym1pc3Npb246ITAsZGF0YXNldEluZm86TSxwYXJzaW5nVGFibGU6ITB9KX0pLGEud29ya2Jvb2tMb2FkZWQoKS50aGVuKE09Pntmb3IobGV0IEQgb2YgYS5wYXJzZWREYXRhc2V0cylhLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsRmlsZSh7ZmlsZTphLnNlbGVjdGVkRmlsZSx3b3Jr''@;'; put 'put ''Ym9vazpNLHBhc3N3b3JkOmEuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkfHx2b2lkIDAsZGNWYWxpZGF0b3I6RC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6RC5kYXRhc2V0SW5mby5oZWFkZXJQa3MsaGVhZGVyQXJyYXk6RC5kYXRhc2V0SW5mby5oZWFkZXJBcnJheSxoZWFkZXJT''@;'; put 'put ''aG93OltdLHRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8udGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6RC5kYXRhc2V0SW5mby5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6RC5kYXRhc2V0SW5mby5kYXRlVGltZUhlYWRlcnMseGxSdWxlczpELmRhdGFzZXRJbmZvLnhsUnVsZXN9KS50aGVu''@;'; put 'put ''KFo9PntpZihhLmZpbGVMb2FkaW5nU3RhdGU9eHcucGFyc2VkLFomJlouZGF0YSl7bGV0IHJlPVtdO1ouZGF0YS5tYXAoY2U9PntsZXQgYmU9e307Wi5oZWFkZXJTaG93Lm1hcCgoRWUsQmUpPT57YmVbRWVdPWNlW0JlXX0pLGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGJl''@;'; put 'put ''Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxyZS5wdXNoKGJlKX0pLEQuZGF0YXNvdXJjZT1yZSxELnBhcnNlUmVzdWx0PVosRC5wYXJzaW5nVGFibGU9ITF9fSkuY2F0Y2goWj0+e2NvbnNvbGUud2FybigiUGFyc2luZyBleGNlbCBmaWxlIGVycm9yLiIsWiksRC5kYXRh''@;'; put 'put ''c291cmNlPVtdLEQuaW5jbHVkZUluU3VibWlzc2lvbj0hMSxELnBhcnNpbmdUYWJsZT0hMX0pfSl9KX0pKCl9b25TdWJtaXRBbGwoKXt0aGlzLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD90aGlzLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMDp0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFs''@;'; put 'put ''KCJObyB0YWJsZXMgdG8gc3VibWl0IiwiUGxlYXNlIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHRhYmxlIHRvIHByb2NlZWQuIil9b25EaXNjYXJkKCl7dGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMudXNlcklu''@;'; put 'put ''cHV0RGF0YXNldHM9IiIsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIifWluaXRIb3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIik7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZXx8W10sY29sSGVhZGVyczp0aGlzLmFjdGl2ZVBhcnNlZERh''@;'; put 'put ''dGFzZXQuZGF0YXNldEluZm8uaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZXMoKSxyZWFkT25seTohMCxoZWlnaHQ6ZHx8IjMwMHB4IixjbGFzc05hbWU6Imh0RGFyayJ9KX0pfWluaXRVc2VySW5w''@;'; put 'put ''dXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZVVzZXJEYXRhc2V0IiksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNo''@;'; put 'put ''YW5nZSIsKGQsaCk9PntpZihkKWZvcihsZXQgZiBvZiBkKWYmJmZbM10mJihmWzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aWYoaCl7ImVk''@;'; put 'put ''aXQiPT09ZiYmKHlpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpKTtmb3IobGV0IHYgb2YgaClhLm1hcmtVbm1hdGNoZWRSb3dzKHZbMF0pO2EuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpLGEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKX19KTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZix2LE0pe3lpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0No''@;'; put 'put ''YW5nZSgpO2ZvcihsZXQgRCBvZiB2KWEubWFya1VubWF0Y2hlZFJvd3MoRCl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmLHYsTSl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl7dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0Lmdl''@;'; put 'put ''dERhdGEoKS5mb3JFYWNoKChkLGgpPT57Y29uc3QgZj1kWzBdO2YmJmYubGVuZ3RoJiZ0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoaCwxLCJzb3VyY2UiLHRoaXMubGlic0FuZFRhYmxlc1tmXSl9KX1tYXJrVW5tYXRjaGVkUm93cyhhKXtjb25zdCBkPXRoaXMuaG90''@;'; put 'put ''SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhQXRSb3coYSksaD1gJHtkWzBdfS4ke2RbMV19YCxmPXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXRDZWxsTWV0YUF0Um93KGEpO2QmJmRbMF0mJmRbMV0/dGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXMoaCk/Zi5mb3JFYWNoKHY9''@;'; put 'put ''Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwiIil9KTpmLmZvckVhY2godj0+e3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5zZXRDZWxsTWV0YShhLHYuY29sLCJjbGFzc05hbWUiLCJub3QtbWF0Y2hlZCIpfSk6Zi5mb3JF''@;'; put 'put ''YWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwiIil9KX1vblVzZXJJbnB1dERhdGFzZXRzQ2hhbmdlKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxMDAs''@;'; put 'put ''KCk9Pntjb25zdCBoPXRoaXMuZ2V0RGF0YXNldHNGcm9tSG90KCk7dGhpcy5tYXRjaGVkRGF0YXNldHM9W10saC5mb3JFYWNoKGY9Pntjb25zdCB2PWYudHJpbSgpO3RoaXMuaXNWYWxpZERhdGFzZXRGb3JtYXQodikmJnRoaXMuaXNWYWxpZERhdGFzZXRSZWZlcmVuY2UodikmJiF0aGlzLm1h''@;'; put 'put ''dGNoZWREYXRhc2V0cy5pbmNsdWRlcyh2KT90aGlzLm1hdGNoZWREYXRhc2V0cy5wdXNoKHYpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHt2fSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpLGEodm9pZCAwKX0pfSl9''@;'; put 'put ''b25BdXRvRGV0ZWN0Q29sdW1ucygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPSExO2lmKHlpZWxkIGEucGFyc2VFeGNlbFNoZWV0TmFtZXMoKS50aGVuKHY9PnthLnNoZWV0TmFtZXM9dn0pLmNhdGNoKHY9Pnt2LmluY2x1ZGVzKCJwYXNzd29yZCIpJiYoZD0hMCl9''@;'; put 'put ''KSxkKXJldHVybiBhLm9uRGlzY2FyZEZpbGUoKSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkxvY2tlZCBmaWxlIiwiV2UgZmFpbGVkIHRvIHVubG9jayB0aGUgZmlsZS4iKTthLnNoZWV0TmFtZXMmJihhLm1hdGNoZWREYXRhc2V0cz1bXSxhLnVzZXJJbnB1dERhdGFzZXRz''@;'; put 'put ''PSIiLGEuc2hlZXROYW1lcy5mb3JFYWNoKCh2LE0pPT57Y29uc3QgRD12LnRyaW0oKTthLmlzVmFsaWREYXRhc2V0Rm9ybWF0KEQpJiZhLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKEQpP2EubWF0Y2hlZERhdGFzZXRzLnB1c2goRCk6Y29uc29sZS53YXJuKGBTaGVldCBuYW1lOiAke0R9IGlz''@;'; put 'put ''IG5vdCBhbiBhY3R1YWwgZGF0YXNldCByZWZlcmVuY2UuYCl9KSksYS51c2VySW5wdXREYXRhc2V0cz1hLm1hdGNoZWREYXRhc2V0cy5qb2luKCJcbiIpO2NvbnN0IGg9YS5tYXRjaGVkRGF0YXNldHMubWFwKHY9Plt2LnNwbGl0KCIuIilbMF0sdi5zcGxpdCgiLiIpWzFdXSksZj1hLmhvdFVz''@;'; put 'put ''ZXJEYXRhc2V0cy5kYXRhLmxlbmd0aDtpZihoLmxlbmd0aDxmKXtjb25zdCB2PWYtaC5sZW5ndGg7Zm9yKGxldCBNPTA7TTx2O00rKyloLnB1c2goWyIiLCIiXSl9YS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnVwZGF0ZURhdGEoaCksYS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9u''@;'; put 'put ''UGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2''@;'; put 'put ''RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChh''@;'; put 'put ''PT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGQudHJpbSgpKSkuZmlsdGVyKGQ9PmQubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4hMH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdldCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFy''@;'; put 'put ''c2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiBhLmNzdkZpbGVzKXtjb25zdCBmPWEucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5maWxlTmFtZSk7bGV0IHYsTTt5aWVsZCBhLnNhc1NlcnZpY2Uu''@;'; put 'put ''dXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsW2hdLHt0YWJsZTpmfSkudGhlbihEPT57dHlwZW9mIEQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ8InUiP3Y9RC5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydDpNPUQuYWRhcHRlclJlc3BvbnNlfSxEPT57Y29uc29s''@;'; put 'put ''ZS5lcnJvcigiZXJyIixEKSx2PUQuYWRhcHRlclJlc3BvbnNlfSksZC5wdXNoKHtzdWNjZXNzOk0sZXJyb3I6dixsaWJkczpmfSl9YS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1kfSkoKX1mZXRjaERhdGFzZXQoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYSlyZXR1cm4g''@;'; put 'put ''ZC5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2Uoe0xJQkRTOmEsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYSkudGhlbihmPT5mKS5jYXRjaChmPT57Y29uc29sZS53YXJuKGBFcnJvciBmZXRjaGluZyAke2F9YCxmKX0pfSkoKX1zdWJtaXRU''@;'; put 'put ''YWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyksZC5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQgaCBvZiBkLnBhcnNlZERhdGFzZXRzKXtpZighaC5wYXJzZVJl''@;'; put 'put ''c3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25NZXNzYWdlPWQuc3VibWl0UmVhc29uTWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLGYuQUNUSU9OPSJMT0FE''@;'; put 'put ''IixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcChiZT0+e2xldCBFZT1iZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSBiZS5fX19fX0RFTEVURV9fVEhJU19f''@;'; put 'put ''UkVDT1JEX19fX18sYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPUVlLE9iamVjdC5rZXlzKGJlKS5tYXAoQmU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlKT8udHlwZSYmIi4iPT09YmVbQmVdJiYoYmVbQmVdPW51bGwpfSksYmV9''@;'; put 'put ''KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEQsWixyZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShmLE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJbmZvLmRh''@;'; put 'put ''dGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbihiZT0+e1o9YmUuYWRhcHRlclJlc3BvbnNlLHJlPWJlLmxvZ30pLmNhdGNoKGJlPT57Y29uc29sZS5lcnJvcigiZXJyIixiZSksRD1iZS5hZGFwdGVyUmVzcG9uc2UscmU9YmUubG9nfSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6Wixl''@;'; put 'put ''cnJvcjpELGxvZzpyZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEsZC5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl9KSgpfXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zdWJtaXRUYWJsZXMoW2EubGliZHNdKTtjb25zdCBoPWQucGFyc2VkRGF0YXNldHMuZmluZChmPT5mLmxpYmRzPT09YS5saWJkcyk7aCYmKGguYWN0aXZlPSEwKX0pKCl9d29ya2Jvb2tMb2FkZWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEs''@;'; put 'put ''ZCk9Pnt0aGlzLnNlbGVjdGVkRmlsZXx8ZCgiTm8gZmlsZSBzZWxlY3RlZCIpLHRoaXMud29ya2Jvb2tJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rJiYoY2xlYXJJbnRlcnZhbCh0aGlzLndvcmtib29rSW50ZXJ2YWwpLGEodGhpcy5zZWxlY3Rl''@;'; put 'put ''ZEZpbGUud29ya2Jvb2spKX0sNTAwKX0pfXBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGEpe2NvbnN0IGQ9YS5zcGxpdCgiLiIpO3JldHVybiBkLnBvcCgpLGQuam9pbigiLiIpfWdldERhdGFzZXRzRnJvbUhvdCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ/dGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5maWx0ZXIoZD0+ZFswXT8ubGVuZ3RoJiZkWzFdPy5sZW5ndGgpLm1hcChkPT5kP2Ake2RbMF19LiR7ZFsxXX1gOiIiKTpbXX1wYXJzZUV4Y2VsU2hlZXROYW1lcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBu''@;'; put 'put ''ZXcgUHJvbWlzZSgoZCxoKT0+e2lmKCFhLnNlbGVjdGVkRmlsZSlyZXR1cm4gZChbXSk7YS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbFNoZWV0TmFtZXMoYS5zZWxlY3RlZEZpbGUpLnRoZW4oZj0+KGYucGFzc3dvcmQmJihhLnNlbGVjdGVkRmlsZS5wYXNzd29yZD1mLnBhc3N3b3Jk''@;'; put 'put ''KSxkKGYuc2hlZXROYW1lcykpKS5jYXRjaChmPT5oKGYpKX0pfSkoKX1pc1ZhbGlkRGF0YXNldEZvcm1hdChhKXtyZXR1cm4vXlx3ezEsOH1cLlx3ezEsMzJ9JC9naW0udGVzdChhKX1pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShhKXtjb25zdCBkPWEuc3BsaXQoIi4iKVswXSxoPWEuc3BsaXQo''@;'; put 'put ''Ii4iKVsxXTtyZXR1cm4hIXRoaXMubGlic0FuZFRhYmxlc1tkXT8uaW5jbHVkZXMoaCl9YnVpbGREYXRhc2V0c09iamVjdHMoYSl7aWYoIWEpcmV0dXJuW107Y29uc3QgZD1bXTtmb3IobGV0IGggb2YgYSlpZihoLmRhdGEpe2NvbnN0IGY9ey4uLmgsaG90VGFibGU6e2RhdGE6aC5kYXRhLnNh''@;'; put 'put ''c2RhdGEsc2V0dGluZ3M6e319LGNvbHM6W10saGVhZGVyQ29sdW1uczpbXSxoZWFkZXJQa3M6W10saGVhZGVyQXJyYXk6W10sZGF0ZUhlYWRlcnM6W10sdGltZUhlYWRlcnM6W10sZGF0ZVRpbWVIZWFkZXJzOltdLHhsUnVsZXM6W10sY29sdW1uSGVhZGVyOltdfTtmLmNvbHM9aC5kYXRhLmNv''@;'; put 'put ''bHMsZi5oZWFkZXJDb2x1bW5zPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGYuaGVhZGVyUGtzPWguZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSwtMSE9PWYuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19f''@;'; put 'put ''X18iKSYmKGYuaGVhZGVyQ29sdW1uc1tmLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksZi5oZWFkZXJBcnJheT1mLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYm''@;'; put 'put ''KGYuZGF0ZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKGYudGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBd''@;'; put 'put ''LkRUVE1WQVJTJiYoZi5kYXRlVGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxoLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJihmLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoLmRhdGEueGxfcnVsZXMpKSxmLmRjVmFsaWRh''@;'; put 'put ''dG9yPW5ldyBDNmUoaC5kYXRhLnNhc3BhcmFtc1swXSxoLmRhdGEuJHNhc2RhdGEsaC5kYXRhLmNvbHMsaC5kYXRhLmRxcnVsZXMsaC5kYXRhLmRxZGF0YSksZi5jb2x1bW5IZWFkZXI9aC5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksZC5wdXNoKGYpfXJldHVybiBk''@;'; put 'put ''fWRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKXtmb3IobGV0IGEgb2YgdGhpcy5wYXJzZWREYXRhc2V0cylhLmFjdGl2ZT0hMX1kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMpYS5hY3RpdmU9ITF9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodmMpLEdlKHUxKSxHZShTdSksR2Uoa2gpLEdlKEE2ZSksR2UoQnMpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldCJdXSx2''@;'; put 'put ''aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKF92dCw3KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmNvbnRlbnRBcmVhUmVmPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJjb250ZW50LWNvbnRhaW5lciIsaC5jb250''@;'; put 'put ''ZW50Q29udGFpbmVyQ2xhc3MpfSxkZWNsczozNyx2YXJzOjE4LGNvbnN0czpbWyJjb250ZW50QXJlYSIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbWItMTAiLDQs''@;'; put 'put ''Im5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29u''@;'; put 'put ''dGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJs''@;'; put 'put ''ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjZHMtdGV4dCIsImJvZHkiLCJjbGFzcyIsImxpY2VuY2UtbGltaXQtbm90aWNlIG10LTAgbWItMTUiLDQsIm5nSWYiXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWIt''@;'; put 'put ''NSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNkcy10ZXh0IiwiY2FwdGlvbl9jbGVhbiIsMSwibXQtMTAi''@;'; put 'put ''XSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwic3VibWl0LXRhYmxlcyIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJd''@;'; put 'put ''LFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIiwidGV4dC1jZW50ZXIiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibWItMTAiXSxbImlkIiwiYnJvd3NlLWZp''@;'; put 'put ''bGUiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJtdWx0aXBsZSIsIiIsMywiY2hhbmdlIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWIt''@;'; put 'put ''MTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1kYW5nZXIiLCJidG4tc20iLCJtci0xMCIsMywiY2xpY2siXSxbImlkIiwic3VibWl0LWFsbCIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwid2hp''@;'; put 'put ''dGVzcGFjZS1ub3dyYXAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJtbC01Il0sWyJzdGF0dXMiLCJkYW5nZXIiLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2st''@;'; put 'put ''Y2lyY2xlIiw0LCJuZ0lmIl0sWyJzdGF0dXMiLCJkYW5nZXIiLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJTbWFs''@;'; put 'put ''bCIsIiIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCIsIm10LTEwIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwid2hpdGVzcGFjZS1ub3dyYXAiLDMsImNsaWNrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIiwicG9pbnRl''@;'; put 'put ''ci1ldmVudHMtbm9uZSJdLFsic2hhcGUiLCJ1cGxvYWQtY2xvdWQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJtdC0xNSJdLFsxLCJkYXRhc2V0LWlucHV0LXdyYXBwZXIiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJ0cmFzaCIsInN0YXR1cyIsImRhbmdlciIsMSwibWwtNSIsImN1''@;'; put 'put ''cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItMjAiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTE1Il0sWzEsIm1iLTUiXSxbImhvdElkIiwiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIsImlkIiwiaG90''@;'; put 'put ''VGFibGVVc2VyRGF0YXNldCIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJzZXR0aW5ncyIsImxpY2Vuc2VLZXkiXSxbMSwiZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9ucyIsInRleHQtcmlnaHQiLCJtdC0xMCJdLFsiaWQiLCJjb250aW51ZS1idG4i''@;'; put 'put ''LDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIiwiY2xyTG9hZGluZyJdLFsic2hhcGUiLCJwcm9jZXNzLW9uLXZtIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXpl''@;'; put 'put ''IiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTEwIG10LTE1IHN1Ym1pc3Npb24tcmVzdWx0cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJlcnJvci1maWVsZCBtdC0xNSIsNCwibmdJZiJdLFsxLCJk''@;'; put 'put ''LWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTEwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMywicm91dGVyTGlu''@;'; put 'put ''ayJdLFszLCJjbHJQb3NpdGlvbiIsImNsclNpemUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsIm5hbWUiLCJvcHRpb25zIiwicmVxdWlyZWQiLCIiLCJ2YWx1ZSIsIm9wdGlvbjEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIgdy0xMDAiLDQsIm5nSWYiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDEsIm10LTE1IiwzLCJhZnRlckdldENvbEhlYWRlciIsImNsYXNzTmFtZSIsImxpY2Vuc2VLZXkiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2''@;'; put 'put ''aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImZpbHRlcnMiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Iiwic3VibWlzc2lvbi1yZXN1bHRzIl0sWyJjbGFzcyIsImNvbG9yLWdyZWVuIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJjbGFzcyIsImNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXQtMTAiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lIiwibXQtMTAiLDMsImNsaWNrIl0sWzEsImNvbG9yLWdyZWVuIl0sWzEsImNvbG9yLXJlZCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiZXJyb3ItZmllbGQiLCJtdC0xNSJdLFsxLCJsb2ctd3JhcHBlciJdLFsi''@;'; put 'put ''Y2xhc3MiLCJkLWZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsMSwibWwtNSJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIl0sWzEsInNwaW5uZXItbWQiXSxbMSwiZC1mbGV4''@;'; put 'put ''IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCJdLFsiY2RzLXRleHQiLCJib2R5IiwxLCJsaWNlbmNlLWxpbWl0LW5vdGljZSIsIm10LTAiLCJtYi0xNSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImFwcC1zaWRlYmFyIiks''@;'; put 'put ''Z3QoMSxDdnQsMiwwLCJkaXYiLDIpKDIsU3Z0LDUsMSwiZGl2IiwzKSgzLEZ2dCw2LDIsIm5nLWNvbnRhaW5lciIsNCkoNCxCdnQsNSwxLCJuZy1jb250YWluZXIiLDQpLGhlKCksZGUoNSwiZGl2Iiw1LDApKDcsImRpdiIsNikoOCwiZGl2Iiw3KSg5LCJwIiw4KSxMZSgxMCwiTXVsdGkgRGF0''@;'; put 'put ''YXNldCBMb2FkIiksaGUoKSgpLGd0KDExLGp2dCw0LDAsImRpdiIsOSkoMTIsaGJ0LDUsNCwibmctY29udGFpbmVyIiw0KSxoZSgpKCksZGUoMTMsImNsci1tb2RhbCIsMTApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNob3dTdWJtaXRS''@;'; put 'put ''ZWFzb25Nb2RhbCxNKXx8KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPU0pLEN0KE0pfSksZGUoMTQsImgzIiwxMSksTGUoMTUpLGhlKCksZGUoMTYsImRpdiIsMTIpLGd0KDE3LGZidCwyLDEsInAiLDEzKSxkZSgxOCwiZGl2IiwxNCkoMTksImxhYmVsIiwxNSksTGUoMjAsIk1lc3NhZ2UiKSxo''@;'; put 'put ''ZSgpLGRlKDIxLCJ0ZXh0YXJlYSIsMTYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRSZWFzb25NZXNzYWdlLE0pfHwoaC5zdWJtaXRSZWFzb25NZXNzYWdlPU0pLEN0KE0pfSksaGUoKSgpLGRlKDIyLCJwIiwxNyksTGUoMjMsIiBUYWJs''@;'; put 'put ''ZXMgd2lsbCBiZSBzZW50IHNlcXVlbnRpYWxseSwgbG9ncyB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhbGwgdGFibGVzIGFyZSBzdWJtaXR0ZWQuICIpLGhlKCkoKSxkZSgyNCwiZGl2IiwxOCkoMjUsImJ1dHRvbiIsMTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3Qo''@;'; put 'put ''aC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEpfSksTGUoMjYsIiBDYW5jZWwgIiksaGUoKSxkZSgyNywiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdFRhYmxlcygpKX0pLExlKDI4LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDI5LCJj''@;'; put 'put ''bHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5jc3ZTdWJtaXR0aW5nLE0pfHwoaC5jc3ZTdWJtaXR0aW5nPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxMSksTGUoMzEpLGhlKCksZGUoMzIsImRpdiIsMTIpKDMzLCJkaXYi''@;'; put 'put ''LDIxKSxHdCgzNCwiY2xyLXNwaW5uZXIiLDIyKSxoZSgpLGRlKDM1LCJwIiwyMyksTGUoMzYsIiBUaGlzIHdpbGwgdGFrZSBmZXcgbW9tZW50cyAiKSxoZSgpKCkoKX0yJmQmJihmZSgpLE1lKCJuZ0lmIixoLmRhdGFzZXRzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWgucGFyc2VkRGF0YXNl''@;'; put 'put ''dHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWguc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoNyksTWUoIm5nSWYiLG51bGw9PT1oLnNlbGVjdGVkRmls''@;'; put 'put ''ZSYmIWguc3VibWl0dGluZ0NzdiksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWguc2VsZWN0ZWRGaWxlfHxoLnN1Ym1pdHRpbmdDc3YpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93U3VibWl0UmVhc29uTW9kYWwpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksVXUoIiBTdWJt''@;'; put 'put ''aXQgIixoLnRhYmxlc1RvU3VibWl0Lmxlbmd0aCwiICIsMT09PWgudGFibGVzVG9TdWJtaXQubGVuZ3RoPyJ0YWJsZSI6InRhYmxlcyIsIiBmb3IgYXBwcm92YWwgIiksZmUoMiksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSks''@;'; put 'put ''ZmUoNCkscGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uTWVzc2FnZSksZmUoNCksTWUoImRpc2FibGVkIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGguY3N2U3VibWl0dGluZyksTWUoImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxVdSgiIFN1Ym1pdHRpbmcgIixoLmNzdkZpbGVzLmxlbmd0aCwiIENTViAiLDE9PT1oLmNzdkZpbGVzLmxlbmd0aD8iZmlsZSI6ImZpbGVzIiwiICIpKX0sZGVwZW5kZW5jaWVzOltEXyxjMSxxbCxNZCxubCxvWSwkcyxFaCxQZCxmZyxIbCxycyxv''@;'; put 'put ''dSxLdSxqMCxQMixkcyxqTCxJZCxTaCxRTCx2Nyx5NyxiNyxSZCxpNCxucyxiYSxlWl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dfV07bGV0IGdidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQocGJ0KSx6Y119KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IG1idD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbbzksZ2J0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdmJ0PVt7cGF0aDoiIixjb21wb25lbnQ6dTl0LGNo''@;'; put 'put ''aWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtwYXRoOiJ0YWJsZXMiLGNvbXBvbmVudDpLOXR9LHtwYXRoOiJleGNlbC1tYXBzIixsb2FkQ2hpbGRyZW46KCk9PnZ2dH0se3BhdGg6Im11bHRpLWxvYWQiLGxvYWRDaGlsZHJlbjooKT0+bWJ0''@;'; put 'put ''fV19XTtsZXQgYmJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZCh2YnQp''@;'; put 'put ''LHpjXX0pfX1yZXR1cm4gY30pKCkseWJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltiYnQs''@;'; put 'put ''UmMsejAsRzksUmEseEEsbmZdfSl9fXJldHVybiBjfSkoKSx0dGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNhbkFjdGl2YXRlKGEsZCl7cmV0dXJuISEodm9pZCAwIT09ZD8ucm9vdC5xdWVyeVBhcmFtcy5mb3Jj''@;'; put 'put ''ZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQu''@;'; put 'put ''dmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih1MSkseHIoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtsZXQgUzY9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6''@;'; put 'put ''ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVs''@;'; put 'put ''bCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlvbiBqNmUoYyl7UzY9Y31jb25zdCB6NmU9L1smPD4iJ10vLF9idD1uZXcgUmVnRXhwKHo2ZS5zb3VyY2UsImciKSxVNmU9L1s8PiInXXwmKD8hKCNcZHsxLDd9''@;'; put 'put ''fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLHdidD1uZXcgUmVnRXhwKFU2ZS5zb3VyY2UsImciKSxDYnQ9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LFo2ZT1jPT5DYnRbY107ZnVuY3Rpb24geDEoYyxsKXtpZihsKXtp''@;'; put 'put ''Zih6NmUudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKF9idCxaNmUpfWVsc2UgaWYoVTZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZSh3YnQsWjZlKTtyZXR1cm4gY31jb25zdCBTYnQ9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gVzZlKGMp''@;'; put 'put ''e3JldHVybiBjLnJlcGxhY2UoU2J0LChsLGEpPT4iY29sb24iPT09KGE9YS50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09YS5jaGFyQXQoMCk/IngiPT09YS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoK2Euc3Vic3RyaW5nKDEpKToiIil9Y29uc3QgTWJ0PS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIElsKGMsbCl7Yz0ic3RyaW5nIj09dHlwZW9mIGM/YzpjLnNvdXJjZSxsPWx8fCIiO2NvbnN0IGE9e3JlcGxhY2U6KGQsaCk9PihoPShoPWguc291cmNlfHxoKS5yZXBsYWNlKE1idCwiJDEi''@;'; put 'put ''KSxjPWMucmVwbGFjZShkLGgpLGEpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKGMsbCl9O3JldHVybiBhfWNvbnN0IHhidD0vW15cdzpdL2csRWJ0PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gWTZlKGMsbCxhKXtpZihjKXtsZXQgZDt0cnl7ZD1kZWNvZGVVUklD''@;'; put 'put ''b21wb25lbnQoVzZlKGEpKS5yZXBsYWNlKHhidCwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZC5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH1sJiYh''@;'; put 'put ''RWJ0LnRlc3QoYSkmJihhPWZ1bmN0aW9uIERidChjLGwpe2FOWyIgIitjXXx8KGFOWyIgIitjXT1UYnQudGVzdChjKT9jKyIvIjpzTihjLCIvIiwhMCkpO2NvbnN0IGE9LTE9PT0oYz1hTlsiICIrY10pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8iPT09bC5zdWJzdHJpbmcoMCwyKT9hP2w6Yy5y''@;'; put 'put ''ZXBsYWNlKEFidCwiJDEiKStsOiIvIj09PWwuY2hhckF0KDApP2E/bDpjLnJlcGxhY2Uoa2J0LCIkMSIpK2w6YytsfShsLGEpKTt0cnl7YT1lbmNvZGVVUkkoYSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gYX1jb25zdCBhTj17fSxUYnQ9L15bXjpdKzpc''@;'; put 'put ''LypbXi9dKiQvLEFidD0vXihbXjpdKzopW1xzXFNdKiQvLGtidD0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sb049e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBHNmUoYyxsKXtjb25zdCBkPWMucmVwbGFjZSgvXHwvZywoZix2LE0pPT57bGV0IEQ9ITEsWj12O2Zvcig7LS1aPj0w''@;'; put 'put ''JiYiXFwiPT09TVtaXTspRD0hRDtyZXR1cm4gRD8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaD0wO2lmKGRbMF0udHJpbSgpfHxkLnNoaWZ0KCksZC5sZW5ndGg+MCYmIWRbZC5sZW5ndGgtMV0udHJpbSgpJiZkLnBvcCgpLGQubGVuZ3RoPmwpZC5zcGxpY2UobCk7ZWxzZSBmb3IoO2Qu''@;'; put 'put ''bGVuZ3RoPGw7KWQucHVzaCgiIik7Zm9yKDtoPGQubGVuZ3RoO2grKylkW2hdPWRbaF0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiBkfWZ1bmN0aW9uIHNOKGMsbCxhKXtjb25zdCBkPWMubGVuZ3RoO2lmKDA9PT1kKXJldHVybiIiO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25z''@;'; put 'put ''dCBmPWMuY2hhckF0KGQtaC0xKTtpZihmIT09bHx8YSl7aWYoZj09PWx8fCFhKWJyZWFrO2grK31lbHNlIGgrK31yZXR1cm4gYy5zbGljZSgwLGQtaCl9ZnVuY3Rpb24gJDZlKGMsbCxhLGQpe2NvbnN0IGg9bC5ocmVmLGY9bC50aXRsZT94MShsLnRpdGxlKTpudWxsLHY9Y1sxXS5yZXBsYWNl''@;'; put 'put ''KC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09Y1swXS5jaGFyQXQoMCkpe2Quc3RhdGUuaW5MaW5rPSEwO2NvbnN0IE09e3R5cGU6ImxpbmsiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6dix0b2tlbnM6ZC5pbmxpbmVUb2tlbnModil9O3JldHVybiBkLnN0YXRlLmluTGluaz0hMSxN''@;'; put 'put ''fXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDp4MSh2KX19Y2xhc3MgbE57Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2fXNwYWNlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMobCk7aWYoYSYmYVswXS5sZW5ndGg+''@;'; put 'put ''MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzphWzBdfX1jb2RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6YVswXSxjb2RlQmxvY2tTdHlsZToi''@;'; put 'put ''aW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP2Q6c04oZCwiXG4iKX19fWZlbmNlcyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLGg9ZnVuY3Rpb24gTGJ0KGMsbCl7Y29uc3QgYT1jLm1hdGNoKC9eKFxzKyko''@;'; put 'put ''PzpgYGApLyk7aWYobnVsbD09PWEpcmV0dXJuIGw7Y29uc3QgZD1hWzFdO3JldHVybiBsLnNwbGl0KCJcbiIpLm1hcChoPT57Y29uc3QgZj1oLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PWYpcmV0dXJuIGg7Y29uc3Rbdl09ZjtyZXR1cm4gdi5sZW5ndGg+PWQubGVuZ3RoP2guc2xpY2UoZC5s''@;'; put 'put ''ZW5ndGgpOmh9KS5qb2luKCJcbiIpfShkLGFbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmQsbGFuZzphWzJdP2FbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVsyXSx0ZXh0Omh9fX1oZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxl''@;'; put 'put ''cy5ibG9jay5oZWFkaW5nLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS50cmltKCk7aWYoLyMkLy50ZXN0KGQpKXtjb25zdCBoPXNOKGQsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaHx8LyAkLy50ZXN0KGgpKSYmKGQ9aC50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6''@;'; put 'put ''YVswXSxkZXB0aDphWzFdLmxlbmd0aCx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19aHIobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaHIiLHJhdzphWzBdfX1ibG9ja3F1b3RlKGwpe2NvbnN0IGE9dGhpcy5ydWxl''@;'; put 'put ''cy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGg9dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgZj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQpO3JldHVybiB0aGlz''@;'; put 'put ''LmxleGVyLnN0YXRlLnRvcD1oLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6YVswXSx0b2tlbnM6Zix0ZXh0OmR9fX1saXN0KGwpe2xldCBhPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGwpO2lmKGEpe2xldCBkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlPWFbMV0udHJpbSgpO2Nv''@;'; put 'put ''bnN0IHJ0PXFlLmxlbmd0aD4xLHB0PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpydCxzdGFydDpydD8rcWUuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O3FlPXJ0P2BcXGR7MSw5fVxcJHtxZS5zbGljZSgtMSl9YDpgXFwke3FlfWAsdGhpcy5vcHRpb25zLnBlZGFudGlj''@;'; put 'put ''JiYocWU9cnQ/cWU6IlsqKy1dIik7Y29uc3QgZHQ9bmV3IFJlZ0V4cChgXiggezAsM30ke3FlfSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtsJiYoQmU9ITEsKGE9ZHQuZXhlYyhsKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9bC5z''@;'; put 'put ''dWJzdHJpbmcoZC5sZW5ndGgpLHJlPWFbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyx2bj0+IiAiLnJlcGVhdCgzKnZuLmxlbmd0aCkpLGNlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHY9MixFZT1yZS50cmltTGVmdCgpKToodj1hWzJdLnNl''@;'; put 'put ''YXJjaCgvW14gXS8pLHY9dj40PzE6dixFZT1yZS5zbGljZSh2KSx2Kz1hWzFdLmxlbmd0aCksRD0hMSwhcmUmJi9eICokLy50ZXN0KGNlKSYmKGQrPWNlKyJcbiIsbD1sLnN1YnN0cmluZyhjZS5sZW5ndGgrMSksQmU9ITApLCFCZSl7Y29uc3Qgdm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgu''@;'; put 'put ''bWluKDMsdi0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIFx0XVteXFxuXSopPyg/OlxcbnwkKSlgKSxDbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksdG49bmV3IFJl''@;'; put 'put ''Z0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86XGBcYFxgfH5+filgKSxNbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0jYCk7Zm9yKDtsJiYoYmU9bC5zcGxpdCgiXG4iLDEpWzBdLGNlPWJlLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGNlPWNlLnJlcGxhY2Uo''@;'; put 'put ''L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksISh0bi50ZXN0KGNlKXx8TW4udGVzdChjZSl8fHZuLnRlc3QoY2UpfHxDbi50ZXN0KGwpKSk7KXtpZihjZS5zZWFyY2goL1teIF0vKT49dnx8IWNlLnRyaW0oKSlFZSs9IlxuIitjZS5zbGljZSh2KTtlbHNle2lmKER8fHJlLnNlYXJj''@;'; put 'put ''aCgvW14gXS8pPj00fHx0bi50ZXN0KHJlKXx8TW4udGVzdChyZSl8fENuLnRlc3QocmUpKWJyZWFrO0VlKz0iXG4iK2NlfSFEJiYhY2UudHJpbSgpJiYoRD0hMCksZCs9YmUrIlxuIixsPWwuc3Vic3RyaW5nKGJlLmxlbmd0aCsxKSxyZT1jZS5zbGljZSh2KX19cHQubG9vc2V8fChaP3B0Lmxv''@;'; put 'put ''b3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZCkmJihaPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGg9L15cW1sgeFhdXF0gLy5leGVjKEVlKSxoJiYoZj0iWyBdICIhPT1oWzBdLEVlPUVlLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSkscHQuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVt''@;'; put 'put ''IixyYXc6ZCx0YXNrOiEhaCxjaGVja2VkOmYsbG9vc2U6ITEsdGV4dDpFZX0pLHB0LnJhdys9ZH1wdC5pdGVtc1twdC5pdGVtcy5sZW5ndGgtMV0ucmF3PWQudHJpbVJpZ2h0KCkscHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFdLnRleHQ9RWUudHJpbVJpZ2h0KCkscHQucmF3PXB0LnJhdy50''@;'; put 'put ''cmltUmlnaHQoKTtjb25zdCBKdD1wdC5pdGVtcy5sZW5ndGg7Zm9yKE09MDtNPEp0O00rKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxwdC5pdGVtc1tNXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhwdC5pdGVtc1tNXS50ZXh0LFtdKSwhcHQubG9vc2Upe2NvbnN0IHZuPXB0''@;'; put 'put ''Lml0ZW1zW01dLnRva2Vucy5maWx0ZXIodG49PiJzcGFjZSI9PT10bi50eXBlKSxDbj12bi5sZW5ndGg+MCYmdm4uc29tZSh0bj0+L1xuLipcbi8udGVzdCh0bi5yYXcpKTtwdC5sb29zZT1Dbn1pZihwdC5sb29zZSlmb3IoTT0wO008SnQ7TSsrKXB0Lml0ZW1zW01dLmxvb3NlPSEwO3JldHVy''@;'; put 'put ''biBwdH19aHRtbChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzphWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09YVsxXXx8InNjcmlwdCI9PT1hWzFdfHwic3R5bGUi''@;'; put 'put ''PT09YVsxXSksdGV4dDphWzBdfTtpZih0aGlzLm9wdGlvbnMuc2FuaXRpemUpe2NvbnN0IGg9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOngxKGFbMF0pO2QudHlwZT0icGFyYWdyYXBoIixkLnRleHQ9aCxkLnRva2Vucz10aGlzLmxleGVyLmlu''@;'; put 'put ''bGluZShoKX1yZXR1cm4gZH19ZGVmKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGg9YVsyXT9hWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMu''@;'; put 'put ''cnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLGY9YVszXT9hWzNdLnN1YnN0cmluZygxLGFbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6ZCxyYXc6YVswXSxocmVmOmgsdGl0bGU6Zn19''@;'; put 'put ''fXRhYmxlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6InRhYmxlIixoZWFkZXI6RzZlKGFbMV0pLm1hcChoPT4oe3RleHQ6aH0pKSxhbGlnbjphWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyks''@;'; put 'put ''cm93czphWzNdJiZhWzNdLnRyaW0oKT9hWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZihkLmhlYWRlci5sZW5ndGg9PT1kLmFsaWduLmxlbmd0aCl7ZC5yYXc9YVswXTtsZXQgZix2LE0sRCxoPWQuYWxpZ24ubGVuZ3RoO2ZvcihmPTA7ZjxoO2YrKylkLmFs''@;'; put 'put ''aWduW2ZdPS9eICotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGQuYWxpZ25bZl0pPyJsZWZ0IjpudWxsO2ZvcihoPWQucm93cy5sZW5ndGgsZj0wO2Y8aDtmKyspZC5yb3dzW2Zd''@;'; put 'put ''PUc2ZShkLnJvd3NbZl0sZC5oZWFkZXIubGVuZ3RoKS5tYXAoWj0+KHt0ZXh0Olp9KSk7Zm9yKGg9ZC5oZWFkZXIubGVuZ3RoLHY9MDt2PGg7disrKWQuaGVhZGVyW3ZdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShkLmhlYWRlclt2XS50ZXh0KTtmb3IoaD1kLnJvd3MubGVuZ3RoLHY9MDt2''@;'; put 'put ''PGg7disrKWZvcihEPWQucm93c1t2XSxNPTA7TTxELmxlbmd0aDtNKyspRFtNXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoRFtNXS50ZXh0KTtyZXR1cm4gZH19fWxoZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6''@;'; put 'put ''ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOiI9Ij09PWFbMl0uY2hhckF0KDApPzE6Mix0ZXh0OmFbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMV0pfX1wYXJhZ3JhcGgobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9Ilxu''@;'; put 'put ''Ij09PWFbMV0uY2hhckF0KGFbMV0ubGVuZ3RoLTEpP2FbMV0uc2xpY2UoMCwtMSk6YVsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6YVswXSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19dGV4dChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVj''@;'; put 'put ''KGwpO2lmKGEpcmV0dXJue3R5cGU6InRleHQiLHJhdzphWzBdLHRleHQ6YVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVswXSl9fWVzY2FwZShsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmFbMF0s''@;'; put 'put ''dGV4dDp4MShhWzFdKX19dGFnKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMobCk7aWYoYSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGlu''@;'; put 'put ''ayYmL148XC9hPi9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5s''@;'; put 'put ''ZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzphWzBdLGluTGluazp0aGlz''@;'; put 'put ''LmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6eDEoYVswXSk6YVswXX19bGlu''@;'; put 'put ''ayhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChkKSl7aWYoIS8+JC8udGVzdChkKSlyZXR1cm47Y29uc3Qgdj1zTihkLnNsaWNlKDAsLTEpLCJcXCIp''@;'; put 'put ''O2lmKChkLmxlbmd0aC12Lmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIElidChjLGwpe2lmKC0xPT09Yy5pbmRleE9mKGxbMV0pKXJldHVybi0xO2NvbnN0IGE9Yy5sZW5ndGg7bGV0IGQ9MCxoPTA7Zm9yKDtoPGE7aCsrKWlmKCJcXCI9PT1jW2hdKWgrKztlbHNl''@;'; put 'put ''IGlmKGNbaF09PT1sWzBdKWQrKztlbHNlIGlmKGNbaF09PT1sWzFdJiYoZC0tLGQ8MCkpcmV0dXJuIGg7cmV0dXJuLTF9KGFbMl0sIigpIik7aWYodj4tMSl7Y29uc3QgRD0oMD09PWFbMF0uaW5kZXhPZigiISIpPzU6NCkrYVsxXS5sZW5ndGgrdjthWzJdPWFbMl0uc3Vic3RyaW5nKDAsdiks''@;'; put 'put ''YVswXT1hWzBdLnN1YnN0cmluZygwLEQpLnRyaW0oKSxhWzNdPSIifX1sZXQgaD1hWzJdLGY9IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCB2PS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhoKTt2JiYoaD12WzFdLGY9dlszXSl9ZWxzZSBmPWFbM10/YVsz''@;'; put 'put ''XS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaD1oLnRyaW0oKSwvXjwvLnRlc3QoaCkmJihoPXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChkKT9oLnNsaWNlKDEpOmguc2xpY2UoMSwtMSkpLCQ2ZShhLHtocmVmOmgmJmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBl''@;'; put 'put ''cywiJDEiKSx0aXRsZTpmJiZmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LGFbMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsobCxhKXtsZXQgZDtpZigoZD10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMobCkpfHwoZD10aGlzLnJ1bGVzLmlubGluZS5ub2xp''@;'; put 'put ''bmsuZXhlYyhsKSkpe2xldCBoPShkWzJdfHxkWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKGg9YVtoLnRvTG93ZXJDYXNlKCldLCFoKXtjb25zdCBmPWRbMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6Zix0ZXh0OmZ9fXJldHVybiAkNmUoZCxoLGRbMF0sdGhpcy5sZXhl''@;'; put 'put ''cil9fWVtU3Ryb25nKGwsYSxkPSIiKXtsZXQgaD10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyhsKTtpZighKCFofHxoWzNdJiZkLm1hdGNoKC9bXHB7TH1ccHtOfV0vdSkpJiYoIWhbMV0mJiFoWzJdfHwhZHx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhl''@;'; put 'put ''YyhkKSkpe2NvbnN0IHY9aFswXS5sZW5ndGgtMTtsZXQgTSxELFo9dixyZT0wO2NvbnN0IGNlPSIqIj09PWhbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVuZDtmb3IoY2UubGFzdEluZGV4PTAsYT1h''@;'; put 'put ''LnNsaWNlKC0xKmwubGVuZ3RoK3YpO251bGwhPShoPWNlLmV4ZWMoYSkpOyl7aWYoTT1oWzFdfHxoWzJdfHxoWzNdfHxoWzRdfHxoWzVdfHxoWzZdLCFNKWNvbnRpbnVlO2lmKEQ9TS5sZW5ndGgsaFszXXx8aFs0XSl7Wis9RDtjb250aW51ZX1pZigoaFs1XXx8aFs2XSkmJnYlMyYmISgoditE''@;'; put 'put ''KSUzKSl7cmUrPUQ7Y29udGludWV9aWYoWi09RCxaPjApY29udGludWU7RD1NYXRoLm1pbihELEQrWityZSk7Y29uc3QgYmU9bC5zbGljZSgwLHYraC5pbmRleCtEKzEpO2lmKE1hdGgubWluKHYsRCklMil7Y29uc3QgQmU9YmUuc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6YmUs''@;'; put 'put ''dGV4dDpCZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoQmUpfX1jb25zdCBFZT1iZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6YmUsdGV4dDpFZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoRWUpfX19fWNvZGVzcGFuKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3QoZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYmKGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSksZD14MShk''@;'; put 'put ''LCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzphWzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGwpO2lmKGEp''@;'; put 'put ''cmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0sdGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhhWzJdKX19YXV0b2xpbmsobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMobCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4iQCI9PT1kWzJdPyho''@;'; put 'put ''PXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD14MShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7bGV0IGQ7aWYoZD10''@;'; put 'put ''aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhsKSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9eDEodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0pOmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgdjtkb3t2PWRbMF0sZFswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMo''@;'; put 'put ''ZFswXSlbMF19d2hpbGUodiE9PWRbMF0pO2g9eDEoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRwOi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX1pbmxpbmVUZXh0KGws''@;'; put 'put ''YSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZFswXSk6''@;'; put 'put ''eDEoZFswXSk6ZFswXTp4MSh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpofX19fWNvbnN0IG1vPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/''@;'; put 'put ''KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18''@;'; put 'put ''KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86''@;'; put 'put ''XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5c''@;'; put 'put ''XG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4o''@;'; put 'put ''Pz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhs''@;'; put 'put ''YWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpvTixsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wk''@;'; put 'put ''KS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoi''@;'; put 'put ''KD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTttby5kZWY9SWwobW8uZGVmKS5yZXBsYWNlKCJsYWJlbCIsbW8uX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsbW8uX3RpdGxlKS5nZXRSZWdleCgpLG1vLmJ1bGxldD0vKD86WyorLV18XGR7''@;'; put 'put ''MSw5fVsuKV0pLyxtby5saXN0SXRlbVN0YXJ0PUlsKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsbW8uYnVsbGV0KS5nZXRSZWdleCgpLG1vLmxpc3Q9SWwobW8ubGlzdCkucmVwbGFjZSgvYnVsbC9nLG1vLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0g''@;'; put 'put ''Kil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89Iittby5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxtby5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2Fw''@;'; put 'put ''dGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58''@;'; put 'put ''bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixtby5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/''@;'; put 'put ''Oi0tPnwkKS8sbW8uaHRtbD1JbChtby5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsbW8uX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0g''@;'; put 'put ''KlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxtby5saGVhZGluZz1JbChtby5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLG1vLmJ1bGxldCkuZ2V0UmVnZXgoKSxtby5wYXJhZ3JhcGg9SWwobW8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwi''@;'; put 'put ''IHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxh''@;'; put 'put ''Y2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixtby5fdGFnKS5nZXRSZWdleCgpLG1vLmJsb2NrcXVvdGU9SWwo''@;'; put 'put ''bW8uYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixtby5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksbW8ubm9ybWFsPXsuLi5tb30sbW8uZ2ZtPXsuLi5tby5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4gezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0r''@;'; put 'put ''Oj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSxtby5nZm0udGFibGU9SWwobW8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsbW8uaHIpLnJlcGxhY2UoImhl''@;'; put 'put ''YWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0''@;'; put 'put ''IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykuZ2V0UmVnZXgoKSxtby5nZm0ucGFyYWdyYXBoPUlsKG1vLl9w''@;'; put 'put ''YXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsbW8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNl''@;'; put 'put ''cyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8''@;'; put 'put ''IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykuZ2V0UmVnZXgoKSxtby5wZWRhbnRpYz17Li4ubW8ubm9ybWFsLGh0bWw6SWwoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8''@;'; put 'put ''J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLG1vLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8''@;'; put 'put ''a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIild''@;'; put 'put ''KSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpvTixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpJbChtby5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNl''@;'; put 'put ''KCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLG1vLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgo''@;'; put 'put ''KX07Y29uc3QgQWE9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6b04sdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16''@;'; put 'put ''QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwp''@;'; put 'put ''LyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzoo''@;'; put 'put ''KD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10o''@;'; put 'put ''XCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10r''@;'; put 'put ''KD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxj''@;'; put 'put ''b2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOm9OLHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1''@;'; put 'put ''YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gT2J0KGMpe3JldHVybiBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgv''@;'; put 'put ''Jy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIEs2ZShjKXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1jLmxlbmd0aDtmb3Io''@;'; put 'put ''YT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQoYSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2QudG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsiO3JldHVybiBsfUFhLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixBYS5wdW5jdHVhdGlvbj1JbChBYS5wdW5jdHVhdGlvbiwidSIp''@;'; put 'put ''LnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxBYS5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csQWEuX2VzY2FwZXM9L1xcKFtwdW5j''@;'; put 'put ''dF0pL2csQWEuX2NvbW1lbnQ9SWwobW8uX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksQWEuZW1TdHJvbmcubERlbGltPUlsKEFhLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdl''@;'; put 'put ''eCgpLEFhLmVtU3Ryb25nLnJEZWxpbUFzdD1JbChBYS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuZW1TdHJvbmcuckRlbGltVW5kPUlsKEFhLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9w''@;'; put 'put ''dW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5hbnlQdW5jdHVhdGlvbj1JbChBYS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5fZXNjYXBlcz1JbChBYS5fZXNjYXBlcywiZ3UiKS5yZXBsYWNl''@;'; put 'put ''KC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LyxBYS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1a''@;'; put 'put ''MC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxBYS5hdXRvbGluaz1JbChBYS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixBYS5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsQWEuX2VtYWlsKS5nZXRSZWdleCgpLEFh''@;'; put 'put ''Ll9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sQWEudGFnPUlsKEFhLnRhZykucmVwbGFjZSgiY29tbWVudCIsQWEuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsQWEuX2F0''@;'; put 'put ''dHJpYnV0ZSkuZ2V0UmVnZXgoKSxBYS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sQWEuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sQWEuX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/''@;'; put 'put ''OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sQWEubGluaz1JbChBYS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixBYS5faHJlZikucmVwbGFjZSgidGl0bGUiLEFhLl90aXRsZSkuZ2V0UmVnZXgoKSxBYS5yZWZsaW5rPUlsKEFh''@;'; put 'put ''LnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixBYS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsbW8uX2xhYmVsKS5nZXRSZWdleCgpLEFhLm5vbGluaz1JbChBYS5ub2xpbmspLnJlcGxhY2UoInJlZiIsbW8uX2xhYmVsKS5nZXRSZWdleCgpLEFhLnJlZmxpbmtTZWFyY2g9SWwoQWEucmVmbGlua1Nl''@;'; put 'put ''YXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLEFhLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsQWEubm9saW5rKS5nZXRSZWdleCgpLEFhLm5vcm1hbD17Li4uQWF9LEFhLnBlZGFudGljPXsuLi5BYS5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMp''@;'; put 'put ''KFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xz''@;'; put 'put ''XFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOklsKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixBYS5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpJbCgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSop''@;'; put 'put ''XF0vKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5nZXRSZWdleCgpfSxBYS5nZm09ey4uLkFhLm5vcm1hbCxlc2NhcGU6SWwoQWEuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTkt''@;'; put 'put ''X10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFb''@;'; put 'put ''YS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxb''@;'; put 'put ''XHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxBYS5nZm0udXJsPUls''@;'; put 'put ''KEFhLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsQWEuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxBYS5icmVha3M9ey4uLkFhLmdmbSxicjpJbChBYS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6SWwoQWEuZ2ZtLnRleHQpLnJlcGxhY2UoIlxc''@;'; put 'put ''Yl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBhNHtjb25zdHJ1Y3RvcihsKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1sfHxTNix0aGlzLm9wdGlvbnMu''@;'; put 'put ''dG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBsTix0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlz''@;'; put 'put ''LnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOm1vLm5vcm1hbCxpbmxpbmU6QWEubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9bW8ucGVkYW50aWMsYS5pbmxpbmU9QWEucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0m''@;'; put 'put ''JihhLmJsb2NrPW1vLmdmbSxhLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP0FhLmJyZWFrczpBYS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazptbyxpbmxpbmU6QWF9fXN0YXRpYyBsZXgobCxhKXtyZXR1cm4gbmV3IGE0KGEp''@;'; put 'put ''LmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGwsYSl7cmV0dXJuIG5ldyBhNChhKS5pbmxpbmVUb2tlbnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0aGlzLnRva2Vucyk7YT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0''@;'; put 'put ''KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3JjLGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsdjtmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6bC5y''@;'; put 'put ''ZXBsYWNlKC9eKCAqKShcdCspL2dtLChNLEQsWik9PkQrIiAgICAiLnJlcGVhdChaLmxlbmd0aCkpO2w7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKE09PiEhKGQ9''@;'; put 'put ''TS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuc3BhY2UobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwxPT09ZC5yYXcubGVuZ3RoJiZhLmxlbmd0aD4wP2FbYS5s''@;'; put 'put ''ZW5ndGgtMV0ucmF3Kz0iXG4iOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/YS5wdXNoKGQpOiho''@;'; put 'put ''LnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5mZW5jZXMobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1''@;'; put 'put ''c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5oZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGlu''@;'; put 'put ''dWV9aWYoZD10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGlzdChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihk''@;'; put 'put ''PXRoaXMudG9rZW5pemVyLmh0bWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWYobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50''@;'; put 'put ''eXBlJiYidGV4dCIhPT1oLnR5cGU/dGhpcy50b2tlbnMubGlua3NbZC50YWddfHwodGhpcy50b2tlbnMubGlua3NbZC50YWddPXtocmVmOmQuaHJlZix0aXRsZTpkLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5s''@;'; put 'put ''aW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFibGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhk''@;'; put 'put ''LnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBNPTEvMDtjb25zdCBEPWwuc2xpY2UoMSk7bGV0IFo7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRC''@;'; put 'put ''bG9jay5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtaPXJlLmNhbGwoe2xleGVyOnRoaXN9LEQpLCJudW1iZXIiPT10eXBlb2YgWiYmWj49MCYmKE09TWF0aC5taW4oTSxaKSl9KSxNPDEvMCYmTT49MCYmKGY9bC5zdWJzdHJpbmcoMCxNKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGQ9dGhpcy50b2tl''@;'; put 'put ''bml6ZXIucGFyYWdyYXBoKGYpKSl7aD1hW2EubGVuZ3RoLTFdLHYmJiJwYXJhZ3JhcGgiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0x''@;'; put 'put ''XS5zcmM9aC50ZXh0KTphLnB1c2goZCksdj1mLmxlbmd0aCE9PWwubGVuZ3RoLGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRleHQobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQi''@;'; put 'put ''PT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgTT0iSW5m''@;'; put 'put ''aW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKE0pO2JyZWFrfXRocm93IG5ldyBFcnJvcihNKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLGF9aW5saW5lKGwsYT1bXSl7cmV0dXJuIHRoaXMuaW5saW5l''@;'; put 'put ''UXVldWUucHVzaCh7c3JjOmwsdG9rZW5zOmF9KSxhfWlubGluZVRva2VucyhsLGE9W10pe2xldCBkLGgsZixNLEQsWix2PWw7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IHJlPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihyZS5sZW5ndGg+MClmb3IoO251bGwhPShNPXRo''@;'; put 'put ''aXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWModikpOylyZS5pbmNsdWRlcyhNWzBdLnNsaWNlKE1bMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJih2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGlj''@;'; put 'put ''ZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyJbIisiYSIucmVwZWF0KE1bMF0ubGVuZ3Ro''@;'; put 'put ''LTIpKyJdIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKHYpKTspdj12LnNsaWNlKDAsTS5pbmRleCkrIisrIit2LnNsaWNl''@;'; put 'put ''KHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7bDspaWYoRHx8KFo9IiIpLEQ9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5p''@;'; put 'put ''bmxpbmUuc29tZShyZT0+ISEoZD1yZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2Nv''@;'; put 'put ''bnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1p''@;'; put 'put ''ZihkPXRoaXMudG9rZW5pemVyLmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlua3MpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3Ro''@;'; put 'put ''LTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGwsdixaKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtj''@;'; put 'put ''b250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYnIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYo''@;'; put 'put ''ZD10aGlzLnRva2VuaXplci5kZWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5hdXRvbGluayhsLEs2ZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoIXRoaXMu''@;'; put 'put ''c3RhdGUuaW5MaW5rJiYoZD10aGlzLnRva2VuaXplci51cmwobCxLNmUpKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQg''@;'; put 'put ''cmU9MS8wO2NvbnN0IGNlPWwuc2xpY2UoMSk7bGV0IGJlO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rpb24oRWUpe2JlPUVlLmNhbGwoe2xleGVyOnRoaXN9LGNlKSwibnVtYmVyIj09dHlwZW9mIGJlJiZiZT49MCYmKHJlPU1hdGgubWluKHJlLGJl''@;'; put 'put ''KSl9KSxyZTwxLzAmJnJlPj0wJiYoZj1sLnN1YnN0cmluZygwLHJlKzEpKX1pZihkPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoZixPYnQpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksIl8iIT09ZC5yYXcuc2xpY2UoLTEpJiYoWj1kLnJhdy5zbGljZSgtMSkpLEQ9ITAsaD1hW2Eu''@;'; put 'put ''bGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgcmU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29s''@;'; put 'put ''ZS5lcnJvcihyZSk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKHJlKX19cmV0dXJuIGF9fWNsYXNzIGNOe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNn1jb2RlKGwsYSxkKXtjb25zdCBoPShhfHwiIikubWF0Y2goL1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5vcHRpb25zLmhpZ2hsaWdodChsLGgpO251bGwhPWYmJmYhPT1sJiYoZD0hMCxsPWYpfXJldHVybiBsPWwucmVwbGFjZSgvXG4kLywiIikrIlxuIixoPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3gxKGgpKyciPicrKGQ/bDp4MShsLCEw''@;'; put 'put ''KSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+IisoZD9sOngxKGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9ja3F1b3RlKGwpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7bH08L2Jsb2NrcXVvdGU+XG5gfWh0bWwobCxhKXtyZXR1cm4gbH1oZWFkaW5nKGwsYSxkLGgpe3JldHVy''@;'; put 'put ''biB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7YX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtoLnNsdWcoZCl9Ij4ke2x9PC9oJHthfT5cbmA6YDxoJHthfT4ke2x9PC9oJHthfT5cbmB9aHIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxu''@;'; put 'put ''In1saXN0KGwsYSxkKXtjb25zdCBoPWE/Im9sIjoidWwiO3JldHVybiI8IitoKyhhJiYxIT09ZD8nIHN0YXJ0PSInK2QrJyInOiIiKSsiPlxuIitsKyI8LyIraCsiPlxuIn1saXN0aXRlbShsKXtyZXR1cm5gPGxpPiR7bH08L2xpPlxuYH1jaGVja2JveChsKXtyZXR1cm4iPGlucHV0ICIrKGw/''@;'; put 'put ''J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBhcmFncmFwaChsKXtyZXR1cm5gPHA+JHtsfTwvcD5cbmB9dGFibGUobCxhKXtyZXR1cm4gYSYmKGE9YDx0Ym9keT4ke2F9PC90Ym9keT5gKSwi''@;'; put 'put ''PHRhYmxlPlxuPHRoZWFkPlxuIitsKyI8L3RoZWFkPlxuIithKyI8L3RhYmxlPlxuIn10YWJsZXJvdyhsKXtyZXR1cm5gPHRyPlxuJHtsfTwvdHI+XG5gfXRhYmxlY2VsbChsLGEpe2NvbnN0IGQ9YS5oZWFkZXI/InRoIjoidGQiO3JldHVybihhLmFsaWduP2A8JHtkfSBhbGlnbj0iJHthLmFs''@;'; put 'put ''aWdufSI+YDpgPCR7ZH0+YCkrbCtgPC8ke2R9PlxuYH1zdHJvbmcobCl7cmV0dXJuYDxzdHJvbmc+JHtsfTwvc3Ryb25nPmB9ZW0obCl7cmV0dXJuYDxlbT4ke2x9PC9lbT5gfWNvZGVzcGFuKGwpe3JldHVybmA8Y29kZT4ke2x9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnho''@;'; put 'put ''dG1sPyI8YnIvPiI6Ijxicj4ifWRlbChsKXtyZXR1cm5gPGRlbD4ke2x9PC9kZWw+YH1saW5rKGwsYSxkKXtpZihudWxsPT09KGw9WTZlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9JzxhIGhyZWY9IicrbCsnIic7cmV0dXJu''@;'; put 'put ''IGEmJihoKz0nIHRpdGxlPSInK2ErJyInKSxoKz0iPiIrZCsiPC9hPiIsaH1pbWFnZShsLGEsZCl7aWYobnVsbD09PShsPVk2ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPWA8aW1nIHNyYz0iJHtsfSIgYWx0PSIke2R9ImA7''@;'; put 'put ''cmV0dXJuIGEmJihoKz1gIHRpdGxlPSIke2F9ImApLGgrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixofXRleHQobCl7cmV0dXJuIGx9fWNsYXNzIHJ0ZXtzdHJvbmcobCl7cmV0dXJuIGx9ZW0obCl7cmV0dXJuIGx9Y29kZXNwYW4obCl7cmV0dXJuIGx9ZGVsKGwpe3JldHVybiBsfWh0''@;'; put 'put ''bWwobCl7cmV0dXJuIGx9dGV4dChsKXtyZXR1cm4gbH1saW5rKGwsYSxkKXtyZXR1cm4iIitkfWltYWdlKGwsYSxkKXtyZXR1cm4iIitkfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIGl0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUobCl7cmV0dXJuIGwudG9Mb3dlckNhc2Uo''@;'; put 'put ''KS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcobCxhKXtsZXQgZD1sLGg9''@;'; put 'put ''MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxkPWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltsXT1oLHRoaXMuc2VlbltkXT0wKSxkfXNsdWcobCxhPXt9KXtjb25zdCBk''@;'; put 'put ''PXRoaXMuc2VyaWFsaXplKGwpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVuKX19Y2xhc3MgbzR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBjTix0aGlzLnJlbmRl''@;'; put 'put ''cmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBydGUsdGhpcy5zbHVnZ2VyPW5ldyBpdGV9c3RhdGljIHBhcnNlKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5wYXJzZShsKX1zdGF0aWMgcGFyc2VJ''@;'; put 'put ''bmxpbmUobCxhKXtyZXR1cm4gbmV3IG80KGEpLnBhcnNlSW5saW5lKGwpfXBhcnNlKGwsYT0hMCl7bGV0IGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlLHJ0LHB0LGR0LEp0LHZuLENuLHRuLGQ9IiI7Y29uc3QgTW49bC5sZW5ndGg7Zm9yKGg9MDtoPE1uO2grKylpZihFZT1sW2hdLHRo''@;'; put 'put ''aXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tFZS50eXBlXSYmKHRuPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tFZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhp''@;'; put 'put ''c30sRWUpLCExIT09dG58fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKEVlLnR5cGUpKSlkKz10bnx8IiI7ZWxzZSBzd2l0Y2goRWUudHlwZSl7Y2FzZSJzcGFjZSI6''@;'; put 'put ''Y29udGludWU7Y2FzZSJociI6ZCs9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVhZGluZyI6ZCs9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKSxFZS5kZXB0aCxXNmUodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMsdGhpcy50ZXh0''@;'; put 'put ''UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6ZCs9dGhpcy5yZW5kZXJlci5jb2RlKEVlLnRleHQsRWUubGFuZyxFZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoY2U9IiIscmU9IiIsTT1FZS5oZWFkZXIubGVuZ3RoLGY9MDtmPE07ZisrKXJl''@;'; put 'put ''Kz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKEVlLmhlYWRlcltmXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246RWUuYWxpZ25bZl19KTtmb3IoY2UrPXRoaXMucmVuZGVyZXIudGFibGVyb3cocmUpLGJlPSIiLE09RWUucm93cy5sZW5ndGgsZj0wO2Y8TTtmKysp''@;'; put 'put ''e2ZvcihaPUVlLnJvd3NbZl0scmU9IiIsRD1aLmxlbmd0aCx2PTA7djxEO3YrKylyZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShaW3ZdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpFZS5hbGlnblt2XX0pO2JlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHJl''@;'; put 'put ''KX1kKz10aGlzLnJlbmRlcmVyLnRhYmxlKGNlLGJlKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOmJlPXRoaXMucGFyc2UoRWUudG9rZW5zKSxkKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoYmUpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKEJlPUVlLm9yZGVyZWQscWU9RWUuc3RhcnQs''@;'; put 'put ''cnQ9RWUubG9vc2UsTT1FZS5pdGVtcy5sZW5ndGgsYmU9IiIsZj0wO2Y8TTtmKyspZHQ9RWUuaXRlbXNbZl0sSnQ9ZHQuY2hlY2tlZCx2bj1kdC50YXNrLHB0PSIiLGR0LnRhc2smJihDbj10aGlzLnJlbmRlcmVyLmNoZWNrYm94KEp0KSxydD9kdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3Jh''@;'; put 'put ''cGgiPT09ZHQudG9rZW5zWzBdLnR5cGU/KGR0LnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udGV4dCxkdC50b2tlbnNbMF0udG9rZW5zJiZkdC50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiYidGV4dCI9PT1kdC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihkdC50b2tl''@;'; put 'put ''bnNbMF0udG9rZW5zWzBdLnRleHQ9Q24rIiAiK2R0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmR0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OkNufSk6cHQrPUNuKSxwdCs9dGhpcy5wYXJzZShkdC50b2tlbnMscnQpLGJlKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKHB0''@;'; put 'put ''LHZuLEp0KTtkKz10aGlzLnJlbmRlcmVyLmxpc3QoYmUsQmUscWUpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6ZCs9dGhpcy5yZW5kZXJlci5odG1sKEVlLnRleHQsRWUuYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpkKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5s''@;'; put 'put ''aW5lKEVlLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKGJlPUVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUudGV4dDtoKzE8TW4mJiJ0ZXh0Ij09PWxbaCsxXS50eXBlOylFZT1sWysraF0sYmUrPSJcbiIrKEVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5l''@;'; put 'put ''KEVlLnRva2Vucyk6RWUudGV4dCk7ZCs9YT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChiZSk6YmU7Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgQ3I9J1Rva2VuIHdpdGggIicrRWUudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lk''@;'; put 'put ''IGNvbnNvbGUuZXJyb3IoQ3IpO3Rocm93IG5ldyBFcnJvcihDcil9fXJldHVybiBkfXBhcnNlSW5saW5lKGwsYSl7YT1hfHx0aGlzLnJlbmRlcmVyO2xldCBoLGYsdixkPSIiO2NvbnN0IE09bC5sZW5ndGg7Zm9yKGg9MDtoPE07aCsrKWlmKGY9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXSYmKHY9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGYpLCExIT09dnx8IVsiZXNjYXBl''@;'; put 'put ''IiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhmLnR5cGUpKSlkKz12fHwiIjtlbHNlIHN3aXRjaChmLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOmQrPWEudGV4dChmLnRleHQpO2JyZWFrO2Nh''@;'; put 'put ''c2UiaHRtbCI6ZCs9YS5odG1sKGYudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpkKz1hLmxpbmsoZi5ocmVmLGYudGl0bGUsdGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJpbWFnZSI6ZCs9YS5pbWFnZShmLmhyZWYsZi50aXRsZSxmLnRleHQpO2JyZWFrO2Nhc2Uic3Ry''@;'; put 'put ''b25nIjpkKz1hLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImVtIjpkKz1hLmVtKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOmQrPWEuY29kZXNwYW4oZi50ZXh0KTticmVhaztjYXNlImJyIjpkKz1hLmJy''@;'; put 'put ''KCk7YnJlYWs7Y2FzZSJkZWwiOmQrPWEuZGVsKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IEQ9J1Rva2VuIHdpdGggIicrZi50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29u''@;'; put 'put ''c29sZS5lcnJvcihEKTt0aHJvdyBuZXcgRXJyb3IoRCl9fXJldHVybiBkfX1jbGFzcyB1Tntjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8UzZ9c3RhdGljIHBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKTtwcmVwcm9jZXNzKGwpe3Jl''@;'; put 'put ''dHVybiBsfXBvc3Rwcm9jZXNzKGwpe3JldHVybiBsfX1jb25zdCBLOT1uZXcgY2xhc3MgUGJ0e2RlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxo''@;'; put 'put ''b29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07b3B0''@;'; put 'put ''aW9ucz10aGlzLnNldE9wdGlvbnM7cGFyc2U9dGhpcy4jZShhNC5sZXgsbzQucGFyc2UpO3BhcnNlSW5saW5lPXRoaXMuI2UoYTQubGV4SW5saW5lLG80LnBhcnNlSW5saW5lKTtQYXJzZXI9bzQ7cGFyc2VyPW80LnBhcnNlO1JlbmRlcmVyPWNOO1RleHRSZW5kZXJlcj1ydGU7TGV4ZXI9YTQ7''@;'; put 'put ''bGV4ZXI9YTQubGV4O1Rva2VuaXplcj1sTjtTbHVnZ2VyPWl0ZTtIb29rcz11Tjtjb25zdHJ1Y3RvciguLi5sKXt0aGlzLnVzZSguLi5sKX13YWxrVG9rZW5zKGwsYSl7bGV0IGQ9W107Zm9yKGNvbnN0IGggb2YgbClzd2l0Y2goZD1kLmNvbmNhdChhLmNhbGwodGhpcyxoKSksaC50eXBlKXtj''@;'; put 'put ''YXNlInRhYmxlIjpmb3IoY29uc3QgZiBvZiBoLmhlYWRlcilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhmLnRva2VucyxhKSk7Zm9yKGNvbnN0IGYgb2YgaC5yb3dzKWZvcihjb25zdCB2IG9mIGYpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnModi50b2tlbnMsYSkpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bGlzdCI6ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC5pdGVtcyxhKSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2VucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlw''@;'; put 'put ''ZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0uZm9yRWFjaChmPT57ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaFtmXSxhKSl9KTpoLnRva2VucyYmKGQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGgudG9rZW5zLGEpKSl9cmV0dXJuIGR9dXNlKC4u''@;'; put 'put ''Lmwpe2NvbnN0IGE9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gbC5mb3JFYWNoKGQ9Pntjb25zdCBoPXsuLi5kfTtpZihoLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fGguYXN5bmN8fCExLGQuZXh0ZW5zaW9ucyYmKGQu''@;'; put 'put ''ZXh0ZW5zaW9ucy5mb3JFYWNoKGY9PntpZighZi5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZihmLnJlbmRlcmVyKXtjb25zdCB2PWEucmVuZGVyZXJzW2YubmFtZV07YS5yZW5kZXJlcnNbZi5uYW1lXT12P2Z1bmN0aW9uKC4uLk0pe2xldCBEPWYu''@;'; put 'put ''cmVuZGVyZXIuYXBwbHkodGhpcyxNKTtyZXR1cm4hMT09PUQmJihEPXYuYXBwbHkodGhpcyxNKSksRH06Zi5yZW5kZXJlcn1pZihmLnRva2VuaXplcil7aWYoIWYubGV2ZWx8fCJibG9jayIhPT1mLmxldmVsJiYiaW5saW5lIiE9PWYubGV2ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24g''@;'; put 'put ''bGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7YVtmLmxldmVsXT9hW2YubGV2ZWxdLnVuc2hpZnQoZi50b2tlbml6ZXIpOmFbZi5sZXZlbF09W2YudG9rZW5pemVyXSxmLnN0YXJ0JiYoImJsb2NrIj09PWYubGV2ZWw/YS5zdGFydEJsb2NrP2Euc3RhcnRCbG9jay5wdXNoKGYu''@;'; put 'put ''c3RhcnQpOmEuc3RhcnRCbG9jaz1bZi5zdGFydF06ImlubGluZSI9PT1mLmxldmVsJiYoYS5zdGFydElubGluZT9hLnN0YXJ0SW5saW5lLnB1c2goZi5zdGFydCk6YS5zdGFydElubGluZT1bZi5zdGFydF0pKX1mLmNoaWxkVG9rZW5zJiYoYS5jaGlsZFRva2Vuc1tmLm5hbWVdPWYuY2hpbGRU''@;'; put 'put ''b2tlbnMpfSksaC5leHRlbnNpb25zPWEpLGQucmVuZGVyZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IGNOKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQucmVuZGVyZXIpe2NvbnN0IE09Zlt2XTtmW3ZdPSguLi5EKT0+e2xldCBaPWQucmVuZGVyZXJbdl0u''@;'; put 'put ''YXBwbHkoZixEKTtyZXR1cm4hMT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC5yZW5kZXJlcj1mfWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgbE4odGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IHYgaW4gZC50b2tlbml6ZXIpe2NvbnN0IE09''@;'; put 'put ''Zlt2XTtmW3ZdPSguLi5EKT0+e2xldCBaPWQudG9rZW5pemVyW3ZdLmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgdU47Zm9yKGNvbnN0IHYgaW4gZC5o''@;'; put 'put ''b29rcyl7Y29uc3QgTT1mW3ZdO2Zbdl09dU4ucGFzc1Rocm91Z2hIb29rcy5oYXModik/RD0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzW3ZdLmNhbGwoZixEKSkudGhlbihyZT0+TS5jYWxsKGYscmUpKTtjb25zdCBaPWQuaG9va3Nbdl0u''@;'; put 'put ''Y2FsbChmLEQpO3JldHVybiBNLmNhbGwoZixaKX06KC4uLkQpPT57bGV0IFo9ZC5ob29rc1t2XS5hcHBseShmLEQpO3JldHVybiExPT09WiYmKFo9TS5hcHBseShmLEQpKSxafX1oLmhvb2tzPWZ9aWYoZC53YWxrVG9rZW5zKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndh''@;'; put 'put ''bGtUb2tlbnM9ZnVuY3Rpb24odil7bGV0IE09W107cmV0dXJuIE0ucHVzaChkLndhbGtUb2tlbnMuY2FsbCh0aGlzLHYpKSxmJiYoTT1NLmNvbmNhdChmLmNhbGwodGhpcyx2KSkpLE19fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc30jZShsLGEpe3JldHVybihkLGgsZik9PnsiZnVuY3Rpb24iPT10eXBlb2YgaCYmKGY9aCxoPW51bGwpO2NvbnN0IHY9ey4uLmh9O2g9ey4uLnRoaXMuZGVmYXVsdHMsLi4udn07Y29uc3QgTT10aGlzLiN0''@;'; put 'put ''KGguc2lsZW50LGguYXN5bmMsZik7aWYodHlwZW9mIGQ+InUifHxudWxsPT09ZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiBkKXJldHVybiBNKG5ldyBFcnJvcigibWFya2Vk''@;'; put 'put ''KCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihmdW5jdGlvbiBSYnQoYyxsKXshY3x8Yy5zaWxlbnR8fChsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBjYWxsYmFjayBpcyBk''@;'; put 'put ''ZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvdXNpbmdfcHJvI2FzeW5jIiksKGMuc2FuaXRpemV8fGMuc2FuaXRpemVy''@;'; put 'put ''KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc2FuaXRpemUgYW5kIHNhbml0aXplciBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC43LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJl''@;'; put 'put ''OiBodHRwczovL21hcmtlZC5qcy5vcmcvIy9VU0lOR19BRFZBTkNFRC5tZCNvcHRpb25zIiksKGMuaGlnaGxpZ2h0fHwibGFuZ3VhZ2UtIiE9PWMubGFuZ1ByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXBy''@;'; put 'put ''ZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2Fy''@;'; put 'put ''bigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczov''@;'; put 'put ''L3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4w''@;'; put 'put ''LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlw''@;'; put 'put ''YW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMu''@;'; put 'put ''IiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cu''@;'; put 'put ''bnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLChjLmhlYWRlcklkc3x8Yy5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVk''@;'; put 'put ''IHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBg''@;'; put 'put ''e2hlYWRlcklkczogZmFsc2V9YC4iKSl9KGgsZiksaC5ob29rcyYmKGguaG9va3Mub3B0aW9ucz1oKSxmKXtjb25zdCBEPWguaGlnaGxpZ2h0O2xldCBaO3RyeXtoLmhvb2tzJiYoZD1oLmhvb2tzLnByZXByb2Nlc3MoZCkpLFo9bChkLGgpfWNhdGNoKGJlKXtyZXR1cm4gTShiZSl9Y29uc3Qg''@;'; put 'put ''cmU9YmU9PntsZXQgRWU7aWYoIWJlKXRyeXtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhaLGgud2Fsa1Rva2VucyksRWU9YShaLGgpLGguaG9va3MmJihFZT1oLmhvb2tzLnBvc3Rwcm9jZXNzKEVlKSl9Y2F0Y2goQmUpe2JlPUJlfXJldHVybiBoLmhpZ2hsaWdodD1ELGJlP00oYmUp''@;'; put 'put ''OmYobnVsbCxFZSl9O2lmKCFEfHxELmxlbmd0aDwzfHwoZGVsZXRlIGguaGlnaGxpZ2h0LCFaLmxlbmd0aCkpcmV0dXJuIHJlKCk7bGV0IGNlPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhaLGJlPT57ImNvZGUiPT09YmUudHlwZSYmKGNlKyssc2V0VGltZW91dCgoKT0+e0QoYmUudGV4dCxi''@;'; put 'put ''ZS5sYW5nLChFZSxCZSk9PntpZihFZSlyZXR1cm4gcmUoRWUpO251bGwhPUJlJiZCZSE9PWJlLnRleHQmJihiZS50ZXh0PUJlLGJlLmVzY2FwZWQ9ITApLGNlLS0sMD09PWNlJiZyZSgpfSl9LDApKX0pLHZvaWQoMD09PWNlJiZyZSgpKX1pZihoLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29s''@;'; put 'put ''dmUoaC5ob29rcz9oLmhvb2tzLnByZXByb2Nlc3MoZCk6ZCkudGhlbihEPT5sKEQsaCkpLnRoZW4oRD0+aC53YWxrVG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhELGgud2Fsa1Rva2VucykpLnRoZW4oKCk9PkQpOkQpLnRoZW4oRD0+YShELGgpKS50aGVuKEQ9PmguaG9va3M/''@;'; put 'put ''aC5ob29rcy5wb3N0cHJvY2VzcyhEKTpEKS5jYXRjaChNKTt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKTtjb25zdCBEPWwoZCxoKTtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhELGgud2Fsa1Rva2Vucyk7bGV0IFo9YShELGgpO3JldHVybiBoLmhvb2tzJiYo''@;'; put 'put ''Wj1oLmhvb2tzLnBvc3Rwcm9jZXNzKFopKSxafWNhdGNoKEQpe3JldHVybiBNKEQpfX19I3QobCxhLGQpe3JldHVybiBoPT57aWYoaC5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGwpe2NvbnN0IGY9IjxwPkFu''@;'; put 'put ''IGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIreDEoaC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gYT9Qcm9taXNlLnJlc29sdmUoZik6ZD92b2lkIGQobnVsbCxmKTpmfWlmKGEpcmV0dXJuIFByb21pc2UucmVqZWN0KGgpO2lmKCFkKXRocm93IGg7ZChoKX19fShTNik7ZnVuY3Rp''@;'; put 'put ''b24gUmwoYyxsLGEpe3JldHVybiBLOS5wYXJzZShjLGwsYSl9Umwub3B0aW9ucz1SbC5zZXRPcHRpb25zPWZ1bmN0aW9uKGMpe3JldHVybiBLOS5zZXRPcHRpb25zKGMpLGo2ZShSbC5kZWZhdWx0cz1LOS5kZWZhdWx0cyksUmx9LFJsLmdldERlZmF1bHRzPWZ1bmN0aW9uIG50ZSgpe3JldHVy''@;'; put 'put ''bnthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVy''@;'; put 'put ''Om51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX19LFJsLmRlZmF1bHRzPVM2LFJsLnVzZT1mdW5jdGlvbiguLi5jKXtyZXR1cm4gSzkudXNlKC4uLmMpLGo2ZShSbC5k''@;'; put 'put ''ZWZhdWx0cz1LOS5kZWZhdWx0cyksUmx9LFJsLndhbGtUb2tlbnM9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gSzkud2Fsa1Rva2VucyhjLGwpfSxSbC5wYXJzZUlubGluZT1LOS5wYXJzZUlubGluZSxSbC5QYXJzZXI9bzQsUmwucGFyc2VyPW80LnBhcnNlLFJsLlJlbmRlcmVyPWNOLFJsLlRleHRS''@;'; put 'put ''ZW5kZXJlcj1ydGUsUmwuTGV4ZXI9YTQsUmwubGV4ZXI9YTQubGV4LFJsLlRva2VuaXplcj1sTixSbC5TbHVnZ2VyPWl0ZSxSbC5Ib29rcz11TixSbC5wYXJzZT1SbDtjb25zdCBIYnQ9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlvbiBOYnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw4''@;'; put 'put ''KX1sZXQgVmJ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1bGFfbWFya2Rvd249J1xuTGljZW5jZSBBZ3JlZW1lbnQgZm9y''@;'; put 'put ''IERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1cblxuQ29weXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5EYXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdMIEFwcHMsIGEgYnJhbmQgb3duZWQgYnkgQm93ZSBJTyBMdGQs''@;'; put 'put ''IGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJkLCBDdW1icmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmllcyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVtYmVyOiAyMDM5MTQyNDBcblxuVGhpcyBzb2Z0d2FyZSBpcyBw''@;'; put 'put ''cm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGludGVybmF0aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxpY2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRl''@;'; put 'put ''bmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5JZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRo''@;'; put 'put ''ZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBp''@;'; put 'put ''biB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZpbGUgYXZhaWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5kYXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZFxu''@;'; put 'put ''XG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVkIGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFueSBjYXNlLCB5b3UgbXVzdCBub3QgbWFrZSBhbnkgc3VjaCB1''@;'; put 'put ''c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1heSBiZSBjb25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCA0R0wgQVBQUyBQUk9WSURFUyBUSElTIFNPRlRX''@;'; put 'put ''QVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZFTlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVE''@;'; put 'put ''SU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRS5cblxuXG4nfW5nT25Jbml0KCl7Y29uc3Qg''@;'; put 'put ''YT1SbC5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlzLmV1bGFfbWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJrZG93bkNhcmQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50''@;'; put 'put ''KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYWdyZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZ2lzdGVydXNlciIse1NBU0Nv''@;'; put 'put ''bnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRj''@;'; put 'put ''aChkPT5kKS5maW5hbGx5KCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuYWdyZWVCb3hMb2NrZWQ9ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwoYSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZD1hLnRh''@;'; put 'put ''cmdldDtkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hKGQuc2Nyb2xsVG9wK2Qub2Zmc2V0SGVpZ2h0Pj1kLnNjcm9sbEhlaWdodC0yMCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoSGJ0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGgubWFya2Rvd25DYXJkPWYuZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNhcmQi''@;'; put 'put ''LCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNr''@;'; put 'put ''Ym94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDEp''@;'; put 'put ''KDEsImRpdiIsMiksTGUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGRlKDMsInAiKSxMZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAi''@;'; put 'put ''KSxoZSgpKCksZGUoNSwiZGl2IiwzLDApLEZ0KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2FyZEJsb2NrU2Nyb2xsKE0pKX0pLGhlKCksZGUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLGdpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5hZ3JlZUNoZWNrZWQsTSl8fChoLmFncmVlQ2hlY2tlZD1NKSxDdChNKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTAsImxhYmVsIiksTGUo''@;'; put 'put ''MTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaGUoKSgpLGd0KDEyLE5idCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpKCl9MiZkJiYoZmUoNSksTWUoImlubmVySFRNTCIsaC5ldWxhX21hcmtkb3duLFY0KSxmZSgzKSxUcigiZGlzYWJsZWQiLGgu''@;'; put 'put ''YWdyZWVCb3hMb2NrZWQpLGZlKCkscGkoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSxNZSgiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKDMpLE1lKCJuZ0lmIixoLmFncmVlQm94TG9ja2VkJiZoLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W2JhLE1kLG5sLCRzLGRzLElk''@;'; put 'put ''LFNoLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJidChjLGwpezEmYyYmKGRlKDAsInAiLDI5KSxMZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQgIiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gamJ0KGMsbCl7aWYoMSZjJiZHdCgwLCJwIiwzMCksMiZjKXtjb25zdCBhPVJlKDMpO01lKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxWNCl9fWZ1bmN0aW9uIHpidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJzdHJvbmciKSxMZSgyLCJEZXRh''@;'; put 'put ''aWxzOiIpLGhlKCksTGUoMyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDMpLERyKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIFVidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQmJ0LDIsMCwicCIsMjcpKDIsamJ0LDEsMSwicCIsMjgpKDMsemJ0LDQsMSwicCIsNCks''@;'; put 'put ''bGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmtleUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmtleUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIFpidChjLGwpezEmYyYmKHNpKDApLGRlKDEsInAiLDI5KSxMZSgyLCIgVGhl''@;'; put 'put ''IHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxHdCgzLCJjb250YWN0LWxpbmsiLDMxKSxMZSg0LCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGlj''@;'; put 'put ''ZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBXYnQoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJwIiwyOSksTGUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Ug''@;'; put 'put ''a2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFlidChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMik7VHIoIm1pc3NrZXki''@;'; put 'put ''LGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxmZSgpLFV1KCIgIixhLCIiLGQ9PT0obnVsbD09aC5zeXNzaXRlLnZhbHVlP251bGw6aC5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rpb24gR2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIs''@;'; put 'put ''MzIpKDEsInN0cm9uZyIpLExlKDIsIkFsbG93ZWQgdXNlcnM6IiksaGUoKSxMZSgzKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMyksRHIoIiAiLGEubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5jdGlvbiAkYnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVy''@;'; put 'put ''IiwzMyl9ZnVuY3Rpb24gS2J0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksTGUoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLGhlKCkpfWZ1bmN0aW9uIHFidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLExlKDEsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSgyLCJzdHJvbmciKSxM''@;'; put 'put ''ZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSx3cihhLmxpY2VuY2VmaWxlLmZpbGVuYW1lKX19ZnVuY3Rpb24gWGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwic3Ryb25nIiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksd3IoYS5saWNl''@;'; put 'put ''bmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gSmJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxLYnQsMiwwLCJkaXYiLDQpKDIscWJ0LDQsMSwiZGl2Iiw0KSgzLFhidCwzLDEsImRpdiIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCIiPT09YS5saWNlbmNlZmls''@;'; put 'put ''ZS5maWxlbmFtZSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxmZSgpLE1lKCJuZ0lmIixhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBRYnQoYyxsKXsxJmMmJihkZSgwLCJidXR0b24iLDM0KSxMZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRpZXIg''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gZXl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpLExlKDIsIkxpY2VuY2luZyIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJkaXYiLDgpLGd0KDUsVWJ0LDQsMywibmctY29udGFpbmVyIiw5KSg2LFpidCw1LDAsIm5n''@;'; put 'put ''LWNvbnRhaW5lciIsOSkoNyxXYnQsMywwLCJuZy1jb250YWluZXIiLDkpLGRlKDgsInAiKSg5LCJzdHJvbmciKSxMZSgxMCwiU1lTU0lURToiKSxoZSgpLGd0KDExLFlidCwyLDQsInNwYW4iLDEwKSxkZSgxMiwiYSIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhh''@;'; put 'put ''KDE0KSxmPWhhKDE2KSx2PVJlKCk7cmV0dXJuIEN0KHYuY29weVN5c3NpdGUoaCxmLHYuc3lzc2l0ZS52YWx1ZXx8W10pKX0pLEd0KDEzLCJjbHItaWNvbiIsMTIsMCksZGUoMTUsInNwYW4iLDEzLDEpLExlKDE3LCJDb3B5IHRvIGNsaXBib2FyZCIpLGhlKCkoKSgpLGd0KDE4LEdidCw0LDEs''@;'; put 'put ''InAiLDE0KSxkZSgxOSwiY2xyLXRhYnMiKSgyMCwiY2xyLXRhYiIpKDIxLCJidXR0b24iLDE1KSxMZSgyMiwiVXBsb2FkIGxpY2VuY2UiKSxoZSgpLGRlKDIzLCJjbHItdGFiLWNvbnRlbnQiKSgyNCwiaW5wdXQiLDE2LDIpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSksaGUoKSxkZSgyNiwiZGl2IiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChoYSgyNSkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRmlsZUNhcHR1cmUoaCwh''@;'; put 'put ''MCkpfSksZ3QoMjcsJGJ0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSgyOCxKYnQsNCwzLCJuZy1jb250YWluZXIiLDQpLGhlKCkoKSgpLGRlKDI5LCJjbHItdGFiIikoMzAsImJ1dHRvbiIsMTUpLExlKDMxLCJQYXN0ZSBsaWNlbmNlIiksaGUoKSxkZSgzMiwiY2xyLXRhYi1jb250ZW50IikoMzMs''@;'; put 'put ''ImZvcm0iLDE5KSgzNCwicCIpLExlKDM1LCJMaWNlbmNlIGtleToiKSxoZSgpLGRlKDM2LCJkaXYiLDIwKSgzNywidGV4dGFyZWEiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmxpY2VuY2VLZXlWYWx1ZSxoKXx8KGYu''@;'; put 'put ''bGljZW5jZUtleVZhbHVlPWgpLEN0KGgpfSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSxkZSgzOCwiZm9ybSIsMjIpKDM5LCJwIiksTGUoNDAsIkFjdGl2YXRpb24ga2V5OiIpLGhlKCksZGUoNDEsImRpdiIs''@;'; put 'put ''MjApKDQyLCJ0ZXh0YXJlYSIsMjMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuYWN0aXZhdGlvbktleVZhbHVlLGgpfHwoZi5hY3RpdmF0aW9uS2V5VmFsdWU9aCksQ3QoaCl9KSxGdCgibW91c2VsZWF2ZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50cmltS2V5cygpKX0pLGhlKCkoKSgpKCkoKSgpKCksZGUoNDMsImRpdiIsMjQpKDQ0LCJidXR0b24iLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuYXBwbHlLZXlzKCkpfSksTGUoNDUsIiBBcHBseSBsaWNlbmNl''@;'; put 'put ''IGtleXMgIiksaGUoKSxndCg0NixRYnQsMiwwLCJidXR0b24iLDI2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxNZSgibmdTd2l0Y2giLGEuYWN0aW9uKSxmZSgyKSxNZSgibmdTd2l0Y2hDYXNlIiwia2V5IiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZhbHVlKSxmZSg3KSxNZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxmZSg5KSxNZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZl''@;'; put 'put ''KCksTWUoIm5nSWYiLCFhLmxpY2VuY2VGaWxlTG9hZGluZyksZmUoOSkscGkoIm5nTW9kZWwiLGEubGljZW5jZUtleVZhbHVlKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5hY3RpdmF0aW9uS2V5VmFsdWUpLGZlKDIpLE1lKCJjbHJMb2FkaW5nIixhLmFwcGx5aW5nS2V5cykoImRpc2FibGVkIixh''@;'; put 'put ''LmRpc2FibGVBcHBseUJ1dHRvbiksZmUoMiksTWUoIm5nSWYiLGEuaXNBcHBGcmVlVGllci52YWx1ZSl9fWZ1bmN0aW9uIHR5dChjLGwpezEmYyYmR3QoMCwiYXBwLXRlcm1zIil9dmFyIHE2ZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5rZXk9ImtleSIsYy5yZWdpc3Rlcj0icmVnaXN0ZXIiLGMu''@;'; put 'put ''bGltaXQ9ImxpbWl0IixjLnVwZGF0ZT0idXBkYXRlIixjfShxNmV8fHt9KTtjb25zdCBueXQ9W3twYXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnJvdXRlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMuYXBwU2VydmljZT1mLHRoaXMuYWN0aW9uPW51bGwsdGhpcy5saWNlbnNlRXJyb3JzPXttaXNzaW5nOidMaWNlbmNlIGtleSBpcyBtaXNzaW5nIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xs''@;'; put 'put ''ZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsZXhwaXJlZDonTGljZW5jZSBrZXkgaXMgZXhwaXJlZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFj''@;'; put 'put ''b250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGludmFsaWQ6J0xpY2VuY2Uga2V5IGlzIGludmFsaWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9y''@;'; put 'put ''dEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxtaXNzbWF0Y2g6J1lvdXIgU1lTU0lURSAoYmVsb3cpIGlzIG5vdCBmb3VuZCBpbiB0aGUgbGljZW5jZSBrZXkgLSBwbGVhc2UgY29udGFjdCA8YSBj''@;'; put 'put ''bGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJ30sdGhpcy5saWNlbmNlS2V5VmFsdWU9IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFs''@;'; put 'put ''dWU9IiIsdGhpcy5hcHBseWluZ0tleXM9ITEsdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMuY3VycmVudExpY2VuY2VLZXk9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlS2V5LHRoaXMuY3VycmVudEFjdGl2YXRpb25LZXk9dGhpcy5saWNlbmNlU2VydmljZS5h''@;'; put 'put ''Y3RpdmF0aW9uS2V5LHRoaXMuaXNBcHBGcmVlVGllcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPXRoaXMubGljZW5jZVNlcnZpY2UudXNlckNvdW50TGltaXRhdGlvbix0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5pbnB1''@;'; put 'put ''dFR5cGU9ImZpbGUiLHRoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZWZpbGU9e2ZpbGVuYW1lOiIifX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMuY3VycmVudExpY2VuY2VLZXl8fCIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuY3VycmVu''@;'; put 'put ''dEFjdGl2YXRpb25LZXl8fCIiLHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmtleUVycm9yPWEuZXJyb3IsdGhpcy5taXNzbWF0Y2hlZEtleT1hLm1pc3NtYXRjaElkLGEuZGV0YWlscyYmKHRoaXMuZXJyb3JEZXRhaWxzPWF0b2IoYS5kZXRhaWxzKSl9KSx0aGlz''@;'; put 'put ''LnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoYT0+e2xldCBkPWEuYWN0aW9uO2QmJk9iamVjdC52YWx1ZXMocTZlKS5pbmNsdWRlcyhkKSYmKHRoaXMuYWN0aW9uPWQpfSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCl9dHJpbUtleXMo''@;'; put 'put ''KXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmxpY2VuY2VLZXlWYWx1ZS50cmltKCksdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUudHJpbSgpfWNvcHlTeXNzaXRlKGEsZCxoKXtjb25zdCBmPWguam9pbigiXG4iKTtuYXZpZ2F0b3IuY2xpcGJvYXJk''@;'; put 'put ''LndyaXRlVGV4dChmKS50aGVuKCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY2hlY2siKSxhLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpcy1zdWNjZXNzIiksZC5pbm5lclRleHQ9IkNvcGllZCEiLHNldFRpbWVvdXQoKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjb3B5IiksYS5y''@;'; put 'put ''ZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksZC5pbm5lclRleHQ9IkNvcHkgdG8gY2xpcGJvYXJkIn0sMWUzKX0pfWFwcGx5S2V5cygpe3RoaXMuYXBwbHlpbmdLZXlzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWdpc3RlcmtleSIse2tleXVwbG9hZDpbe0FDVElWQVRJT05f''@;'; put 'put ''S0VZOnRoaXMuYWN0aXZhdGlvbktleVZhbHVlLExJQ0VOQ0VfS0VZOnRoaXMubGljZW5jZUtleVZhbHVlfV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJu''@;'; put 'put ''WzBdLk1TRyYmbG9jYXRpb24ucmVwbGFjZShsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0pfSkuZmluYWxseSgoKT0+e3RoaXMuYXBwbHlpbmdLZXlzPSExfSl9b25GaWxlQ2FwdHVyZShhLGQ9ITEpe2xldCBoPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZih0aGlzLmxpY2VuY2VmaWxl''@;'; put 'put ''LmZpbGVuYW1lPWgubmFtZSwhaClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITA7Y29uc3QgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD12PT57aWYodGhpcy5saWNlbmNlRmlsZUVycm9yPSJFcnJvciByZWFkaW5nIGZpbGUuIiwhdnx8IXYudGFyZ2V0fHwyIT12LnRhcmdldC5y''@;'; put 'put ''ZWFkeVN0YXRlfHx2LnRhcmdldC5lcnJvcnx8IXYudGFyZ2V0LnJlc3VsdClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlRmlsZUVycm9yPXZvaWQgMDtjb25zdCBNPXYudGFyZ2V0LnJlc3VsdC50b1N0cmluZygpLnNwbGl0KCJcbiIpO3RoaXMuYWN0aXZh''@;'; put 'put ''dGlvbktleVZhbHVlPU1bMV0sdGhpcy5saWNlbmNlS2V5VmFsdWU9TVswXX0sZi5yZWFkQXNUZXh0KGgpfXN3aXRjaFR5cGUoYSl7dGhpcy5pbnB1dFR5cGU9YX1nZXQgZGlzYWJsZUFwcGx5QnV0dG9uKCl7cmV0dXJuIHRoaXMubGljZW5jZUtleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmFjdGl2''@;'; put 'put ''YXRpb25LZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5saWNlbmNlS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5JiZ0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT09PXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoR2UoQ3UpLEdlKHUxKSxHZShCcyksR2Uob0wpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbImNvcHlJY29uIiwiIl0sWyJjb3B5VG9vbHRpcCIsIiJdLFsibGlj''@;'; put 'put ''ZW5jZUZpbGUiLCIiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywibmdTd2l0Y2giXSxbMSwiY2FyZC10ZXh0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0Zv''@;'; put 'put ''ciIsIm5nRm9yT2YiXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdodCIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJd''@;'; put 'put ''LFsiY2xyVGFiTGluayIsIiJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNoYW5nZSJdLFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5z''@;'; put 'put ''ZS1rZXktZm9ybSJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNlLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJd''@;'; put 'put ''LFsxLCJjbHItZm9ybSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9uLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2Rl''@;'; put 'put ''bCJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbGljayIsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsicm91dGVyTGluayIsIi8iLCJjbGFzcyIsImJ0biBidG4tc20g''@;'; put 'put ''YnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsxLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCJdLFsiY2xhc3NlcyIsImNvbG9yLWdyZWVu''@;'; put 'put ''Il0sWzEsIm0tMCJdLFsxLCJzcGlubmVyLXNtIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmd0KDAsZXl0LDQ3LDEzLCJkaXYiLDMpKDEsdHl0LDEsMCwiYXBwLXRlcm1zIiw0KSwyJmQmJihNZSgi''@;'; put 'put ''bmdJZiIsInJlZ2lzdGVyIiE9PWguYWN0aW9uKSxmZSgpLE1lKCJuZ0lmIiwicmVnaXN0ZXIiPT09aC5hY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltucyxiYSxTMixjcCxsNyxxbCxubCxvNywkcyx5cCxIbCxqMCxQMixfbSxDbSx4Nyx3bSx5bSxTNyxSZCxjMSxWYnQscE9dLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCksY2FuQWN0aXZhdGU6W3R0ZV0sY2FuRGVhY3RpdmF0ZTpbdHRlXX1dO2xldCByeXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBl''@;'; put 'put ''OmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKG55dCksemNdfSl9fXJldHVybiBjfSkoKSxpeXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLHowLHJ5dCxDd119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGF5dD0oKT0+KHtzdGFuZGFsb25lOiEwfSksWDZlPShjLGwsYSk9Pih7YWRkZWRSb3c6YyxkZWxldGVkUm93OmwsdXBkYXRlZFJv''@;'; put 'put ''dzphfSksSjZlPWM9Pih7ImNoIHRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLXRvcC1yaWdodCI6Y30pO2Z1bmN0aW9uIG95dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwxOSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoKTtNZSgicm91dGVyTGluayIs''@;'; put 'put ''Ii9zdGFnZS8iK2QuanNQYXJhbXNbYV0pLGZlKCksRHIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gc3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7ZmUoKSxEcigiICIsZC5qc1BhcmFt''@;'; put 'put ''c1thXSwiICIpfX1mdW5jdGlvbiBseXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxMZSgyKSxoZSgpLGd0KDMsb3l0LDIsMiwidGQiLDE3KSg0LHN5dCwyLDEsInRkIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLGZlKCksTWUoIm5nSWYiLCFhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKX19ZnVuY3Rpb24gY3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsNCksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQsZD1SZSgzKTtmZSgyKSx3cihhKSxmZSgyKSx3cihkLnN1Ym1pdERldGFpbHNbYV0pfX1mdW5jdGlvbiB1eXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMykoMywidGhlYWQiKSg0LCJ0ciIpKDUsInRo''@;'; put 'put ''Iiw0KSxMZSg2LCJOYW1lIiksaGUoKSxkZSg3LCJ0aCIsNCksTGUoOCwiVmFsdWUiKSxoZSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLGN5dCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMTApLE1lKCJuZ0Zvck9mIixhLnN1Ym1pdEFycil9fWZ1bmN0''@;'; put 'put ''aW9uIGR5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLExlKDIpLGhlKCksZGUoMywidGQiLDQpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksd3IoYSksZmUoMiksd3IoZC5qc1BhcmFtc1thXSl9fWZ1bmN0aW9uIGh5dChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjApLExlKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIiksaGUoKSxndCg0LHV5dCwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIxKSxoZSgpLGRlKDUsImNsci10YWIiKSg2LCJidXR0b24iLDIw''@;'; put 'put ''KSxMZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSxoZSgpLGRlKDgsImNsci10YWItY29udGVudCIpKDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxMZSgxNCwiTmFtZSIpLGhlKCksZGUoMTUsInRoIiw0KSxMZSgxNiwiVmFsdWUiKSxo''@;'; put 'put ''ZSgpKCkoKSxkZSgxNywidGJvZHkiKSxndCgxOCxkeXQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJjbHJJZkFjdGl2ZSIsITApLGZlKDE0KSxNZSgibmdGb3JPZiIsYS5rZXlzQXJyYXkpfX1mdW5jdGlvbiBmeXQoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJwIiw3MiksTGUoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIHNob3cgIiksaGUoKSl9ZnVuY3Rpb24gcHl0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2Iiw3MykoMiwic3BhbiIpLExlKDMsIlRhYmxlIElkOiIpLGhlKCksZGUoNCwic3Ryb25nIiw3NCksTGUoNSksaGUo''@;'; put 'put ''KSgpLGRlKDYsImRpdiIpKDcsInNwYW4iKSxMZSg4LCJTdWJtaXR0ZXI6IiksaGUoKSxkZSg5LCJzcGFuIiw3NSksTGUoMTApLGhlKCkoKSxkZSgxMSwiZGl2IikoMTIsInNwYW4iKSxMZSgxMywiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMTQsInNwYW4iLDc1KSxMZSgxNSksaGUoKSgpLGRl''@;'; put 'put ''KDE2LCJkaXYiKSgxNywic3BhbiIpLExlKDE4LCJTdWJtaXR0ZWQgUmVhc29uOiIpLGhlKCksZGUoMTksInNwYW4iLDc1KSxMZSgyMCksaGUoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxNZSgicm91dGVyTGluayIsIi9zdGFnZS8iKyhudWxsPT1hLnRhYmxlRGV0YWlscz9u''@;'; put 'put ''dWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksZmUoKSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiICIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9CWV9O''@;'; put 'put ''TSwiICIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksZmUoNSksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX1JFQVNPTl9UWFQsIiAiKX19''@;'; put 'put ''ZnVuY3Rpb24gZ3l0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLEd0KDEsImNsci1pY29uIiw3NyksTGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxoZSgpKX1mdW5jdGlvbiBteXQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiLDUxKSxndCgzLGZ5dCwyLDAsInAiLDQ1KSg0LHB5dCwyMSw1LCJuZy1jb250YWluZXIiLDgpLGhlKCksZGUoNSwiZGl2Iiw1MikoNiwiZGl2Iiw1MykoNywiZGl2Iiw1NCkoOCwiZGl2Iiw1NSkoOSwiYnV0dG9u''@;'; put 'put ''Iiw1NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoNCk7cmV0dXJuIEN0KGguZ29Ub0Jhc2UobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLExlKDEwLCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZGUoMTEsImJ1dHRvbiIsNTcp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3JldHVybiBDdChoLmdldFRhYmxlKGgudGFibGVJZCkpfSksTGUoMTIsIiBWaWV3IHN0YWdlZCBkYXRhICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PVJlKDQpO3JldHVybiBDdChoLmdvQmFjayhudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTGUoMTQsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxNSwiZGl2Iiw1OSkoMTYsImJ1dHRvbiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoYSksQ3QoUmUoNCkuYXBwcm92ZVRhYmxlKCkpfSksTGUoMTcsIiBBQ0NFUFQgIiksaGUoKSxkZSgxOCwiYnV0dG9uIiw2MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5yZWplY3RPcGVuPSEwKX0pLExlKDE5LCIgUkVKRUNUICIpLGhlKCks''@;'; put 'put ''ZGUoMjAsImNsci10b2dnbGUtY29udGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUtd3JhcHBlciIpKDIyLCJpbnB1dCIsNjMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDQpO3JldHVybiBtaShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0''@;'; put 'put ''dGVkVmFsdWVzPWgpLEN0KGgpfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDIzLCJsYWJlbCIsNjQpLExlKDI0KSxoZSgpKCkoKSgpLGRlKDI1LCJkaXYiLDY1KSxndCgyNixneXQsMywwLCJzcGFu''@;'; put 'put ''Iiw2NiksZGUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgpLExlKDMwLCIgQ2hhbmdlZCBSb3dzICIpLGRlKDMxLCJzcGFuIiw2OSksTGUoMzIpLGhlKCkoKSxkZSgzMywic3BhbiIsNzApLExlKDM0LCIgQWRkZWQgUm93cyAiKSxkZSgzNSwic3BhbiIsNjkpLExlKDM2''@;'; put 'put ''KSxoZSgpKCksZGUoMzcsInNwYW4iLDcxKSxMZSgzOCwiIERlbGV0ZWQgUm93cyAiKSxkZSgzOSwic3BhbiIsNjkpLExlKDQwKSxoZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDMpLE1lKCJuZ0lmIiwhYS50YWJsZURldGFpbHMpLGZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''dGFibGVEZXRhaWxzKSxmZSgxMiksTWUoImNsckxvYWRpbmciLGEuYWNjZXB0TG9hZGluZykoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLGZlKDIpLE1lKCJkaXNhYmxlZCIs''@;'; put 'put ''IWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLHdyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1h''@;'; put 'put ''dHRlZCIpLGZlKDIpLE1lKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLHdyKGEubGVucy51cGRhdGVkKSxmZSg0KSx3cihhLmxlbnMubmV3KSxmZSg0KSx3cihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIHZ5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxMZSgyLCJM''@;'; put 'put ''b2FkaW5nIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBieXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJzcGFuIiw3OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLHZ5dCwzLDAsImRpdiIsODApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxNZSgibmdJ''@;'; put 'put ''ZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24geXl0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIpLExlKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIF95dChjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7ZmUoKSx3cihhKX19ZnVuY3Rpb24gd3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoMikuaW5kZXgsaD1SZSg0KTtmZSgpLERyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9m''@;'; put 'put ''Q2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIEN5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw4NCksTGUoMSksZ3QoMix3eXQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDIpLmluZGV4LGY9UmUoNCk7TWUoIm5nQ2xhc3Mi''@;'; put 'put ''LHNwKDMsSjZlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksZmUoKSxEcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZlKCksTWUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rp''@;'; put 'put ''b24gU3l0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxDeXQsMyw1LCJ0ZCIsODMpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gTXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEp''@;'; put 'put ''LGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDIpLmluZGV4LGg9UmUoNCk7ZmUoKSxEcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiB4eXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE15dCwyLDEsInRkIiw0NyksbGkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPVJlKCkuaW5kZXgsZD1SZSg0KTtmZSgpLE1lKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBFeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLGd0KDEsU3l0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLHh5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuaW5kZXgsZD1SZSg0KTtNZSgibmdDbGFzcyIscE0oMyxYNmUsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksZmUoKSxNZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSxNZSgibmdJ''@;'; put 'put ''ZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIFR5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKDMpLmdvVG9BcHByb3ZhbHNMaXN0KCkpfSksR3QoNSwiY2xyLWljb24iLDM0KSxMZSg2LCJCYWNrIHRvIGFwcHJvdmFscyBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLExlKDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmdldERldGFpbHMoKSl9KSxHdCgxMiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsNDApLExlKDE0KSxoZSgpKCksZGUoMTUsImRpdiIsNDEpLGd0KDE2LG15dCw0MSwxMSwiZGl2Iiw0MiksaGUoKSxndCgxNyxi''@;'; put 'put ''eXQsNCwxLCJkaXYiLDQzKSxkZSgxOCwiZGl2Iiw0NCksZ3QoMTkseXl0LDIsMCwicCIsNDUpLGRlKDIwLCJ0YWJsZSIsMykoMjEsInRoZWFkIikoMjIsInRyIiw0NiksZ3QoMjMsX3l0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoMjQsInRib2R5IiksZ3QoMjUsRXl0LDMsNywidHIiLDQ4KSxo''@;'; put 'put ''ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSg5KSxEcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLGZlKDIpLE1lKCJu''@;'; put 'put ''Z0lmIixhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSgyKSxNZSgibmdJZiIsYS5sb2FkaW5nVGFibGUmJmEubm9DaGFuZ2VzKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBB''@;'; put 'put ''eXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI3KSxndCgxLFR5dCwyNiw3LCJkaXYiLDI4KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBreXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3OSksTGUoMSwiIExvYWRpbmcuLi4g''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gRHl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIHByZXZpZXciKSxoZSgpKCkpfWZ1bmN0aW9uIEl5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODcpLGd0KDEsa3l0LDIsMCwic3BhbiIsODgpKDIsRHl0LDMsMCwiZGl2''@;'; put 'put ''Iiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBSeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIzKSxndCgxLEF5dCwyLDEsImRpdiIsMjQpLGRlKDIsImRpdiIsMjUpLGd0''@;'; put 'put ''KDMsSXl0LDMsMiwiZGl2IiwyNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoMiksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIEx5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxHdCgxLCJjbHItaWNvbiIsNzcpLExlKDIs''@;'; put 'put ''IiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiksaGUoKSl9ZnVuY3Rpb24gT3l0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDQ5KX1mdW5jdGlvbiBQeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksTGUoMiwi''@;'; put 'put ''TG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gRnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDQpKDEsInNwYW4iLDc5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDMsUHl0LDMsMCwiZGl2Iiw4MCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDMpLE1lKCJu''@;'; put 'put ''Z0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBIeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIE55dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxMZSgxKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDIpLmluZGV4LGg9UmUoNCk7ZmUoKSxEcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBWeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsODQpLExlKDEpLGd0KDIsTnl0LDIsMSwi''@;'; put 'put ''c3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgyKS5pbmRleCxmPVJlKDQpO01lKCJuZ0NsYXNzIixzcCgzLEo2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLGZlKCksRHIoIiAiLGYuZGlmZlRhYmxl''@;'; put 'put ''LmRhdGFbaF1bYV0sIiAiKSxmZSgpLE1lKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIEJ5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVnl0LDMsNSwidGQiLDgzKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxk''@;'; put 'put ''PVJlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIGp5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5pbmRleCxoPVJlKDQpO2ZlKCksRHIoIiAiLGguZGlmZlRhYmxlLmRh''@;'; put 'put ''dGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24genl0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxqeXQsMiwxLCJ0ZCIsNDcpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gVXl0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwidHIiLDgyKSxndCgxLEJ5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix6eXQsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9UmUoNCk7TWUoIm5nQ2xhc3MiLHBNKDMsWDZlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1k''@;'; put 'put ''LmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBaeXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkz''@;'; put 'put ''KSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLEd0KDUsImNkcy1pY29uIiw5NiksTGUoNiwiQmFjayB0byBzdWJtaXR0ZWQgbGlzdCAi''@;'; put 'put ''KSxoZSgpKCksZGUoNywiZGl2Iiw5NykoOCwiaDMiLDk4KSxMZSg5KSxoZSgpKCksZGUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS50YWJsZUZsYWc9ITApfSksR3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCks''@;'; put 'put ''ZGUoMTMsInAiLDk5KSxMZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDUwKSgxNiwiZGl2Iiw1MSkoMTcsImRpdiIsNzMpKDE4LCJzcGFuIiksTGUoMTksIlRhYmxlIElkOiIpLGhlKCksZGUoMjAsInN0cm9uZyIsNzQpKDIxLCJzcGFuIiksTGUoMjIpLGhlKCkoKSgpLGRlKDIzLCJkaXYiKSgy''@;'; put 'put ''NCwic3BhbiIpLExlKDI1LCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgyNiwic3BhbiIsNzUpLExlKDI3KSxoZSgpKCksZGUoMjgsImRpdiIpKDI5LCJzcGFuIiksTGUoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLGhlKCksZGUoMzEsInNwYW4iKSxMZSgzMiksaGUoKSgpKCksZGUoMzMsImRpdiIs''@;'; put 'put ''NTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJidXR0b24iLDU2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgzKTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShoLnN1Yk9iai5iYXNlKSl9KSxMZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAi''@;'; put 'put ''KSxoZSgpLGRlKDM5LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgzKTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnN1Yk9iai50YWJsZUlkKSl9KSxMZSg0MCwiIFZpZXcgc3RhZ2VkIGRhdGEgIiksaGUoKSxkZSg0MSwiYnV0dG9uIiw1OCksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGguZ29CYWNrKGguc3ViT2JqLmJhc2UpKX0pLExlKDQyLCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoNDMsImRpdiIsNjUpLGd0KDQ0LEx5dCwzLDAsInNwYW4iLDY2KSxkZSg0NSwiZGl2''@;'; put 'put ''IiwzMSkoNDYsImRpdiIsNjcpKDQ3LCJzcGFuIiw2OCksTGUoNDgsIiBDaGFuZ2VkIFJvd3MgIiksZGUoNDksInNwYW4iLDY5KSxMZSg1MCksaGUoKSgpLGRlKDUxLCJzcGFuIiw3MCksTGUoNTIsIiBBZGRlZCBSb3dzICIpLGRlKDUzLCJzcGFuIiw2OSksTGUoNTQpLGhlKCkoKSxkZSg1NSwi''@;'; put 'put ''c3BhbiIsNzEpLExlKDU2LCIgRGVsZXRlZCBSb3dzICIpLGRlKDU3LCJzcGFuIiw2OSksTGUoNTgpLGhlKCkoKSgpKCkoKSxkZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiwxMDApKDYxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg2MiwiaW5wdXQiLDYzKSxnaSgibmdN''@;'; put 'put ''b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWkoZi5mb3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmZvcm1hdHRpbmdDaGFu''@;'; put 'put ''Z2VkKCkpfSksaGUoKSxkZSg2MywibGFiZWwiKSxMZSg2NCksaGUoKSgpKCkoKSgpKCksZGUoNjUsImRpdiIsMTAxKSxndCg2NixPeXQsMSwwLCJkaXYiLDQyKSxoZSgpLGd0KDY3LEZ5dCw0LDEsImRpdiIsMTAyKSxkZSg2OCwiZGl2IiwxMDMpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIiko''@;'; put 'put ''NzEsInRyIiw0NiksZ3QoNzIsSHl0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoNzMsInRib2R5IiksZ3QoNzQsVXl0LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSg5KSxEcigiICIsYS5zdWJPYmouYmFzZSwiICIpLGZlKDUpLERyKCIgIixhLnRhYmxl''@;'; put 'put ''RGVzY3JpcHRpb24sIiAiKSxmZSg2KSxNZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2Euc3ViT2JqLnRhYmxlSWQpLGZlKDIpLERyKCIgIixhLnN1Yk9iai50YWJsZUlkLCIiKSxmZSg1KSxEcigiICIsYS5zdWJPYmouc3VibWl0dGVkLCIgIiksZmUoNSksRHIoIiAiLGEuc3ViT2JqLnN1Ym1p''@;'; put 'put ''dFJlYXNvbiwiICIpLGZlKDEyKSxNZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSx3cihhLmxlbnMudXBkYXRlZCksZmUoNCksd3IoYS5sZW5zLm5ldyksZmUoNCksd3IoYS5sZW5zLmRlbGV0ZWQpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksZmUoMiksd3IoYS5m''@;'; put 'put ''b3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMiksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDUpLE1lKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksZmUoMiksTWUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1''@;'; put 'put ''bmN0aW9uIFd5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTEpLGd0KDEsWnl0LDc1LDE2LCJkaXYiLDkyKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBZeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIs''@;'; put 'put ''IkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBHeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNSkoMSwiZGl2IiwxMDYpKDIsInNwYW4iLDc5KSxMZSgzLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDQsWXl0LDMsMCwiZGl2Iiw4KSxoZSgpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1SZSgyKTtmZSg0KSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gJHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxXeXQsMiwxLCJkaXYiLDg5KSgyLEd5dCw1LDEsImRpdiIsOTApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''bG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1sZXQgUTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRl''@;'; put 'put ''PXYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnJlamVjdE9wZW49ITEsdGhpcy5sZW5zPXtuZXc6MCx1cGRhdGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlzLnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIs''@;'; put 'put ''dGhpcy5hY2NlcHRMb2FkaW5nPSExLHRoaXMucmVqZWN0TG9hZGluZz0hMSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29uZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2Vz''@;'; put 'put ''QXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtkYXRhOltdfSx0aGlzLmRpZmZzTGltaXQ9ITEsdGhpcy5yZWNvcmRzTGltaXQ9MTAwLHRoaXMucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlPSExfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10aGlz''@;'; put 'put ''LmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9CYXNlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJsZShh''@;'; put 'put ''KXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5w''@;'; put 'put ''cmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxzKCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlz''@;'; put 'put ''LmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EucmVqZWN0TG9hZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1hLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpO2xldCBkPXtTVFBfQUNUSU9OOiJSRUpFQ1Rf''@;'; put 'put ''VEFCTEUiLFRBQkxFOmEudGFibGVJZCxTVFBfUkVBU09OOmEuc3VibWl0UmVhc29ufTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcv''@;'; put 'put ''aGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMSxhLnJlamVjdExvYWRpbmc9ITF9KX0pKCl9YXBwcm92ZVRhYmxlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5hY2NlcHRMb2FkaW5nPSEwO2xldCBkPXtBQ1RJT046IkFQUFJPVkVfVEFCTEUiLFRB''@;'; put 'put ''QkxFOmEudGFibGVJZCxESUZGVElNRTphLnBhcmFtcz8uRElGRlRJTUUsTElCRFM6YS5wYXJhbXM/LkxJQkRTfTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5hcHByb3ZlVGFibGUoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnJlZnJlc2hTdGFy''@;'; put 'put ''dHVwc2VydmljZUFmdGVyQXBwcm92ZSYmYS5zYXNTZXJ2aWNlLnJlbG9hZFN0YXJ0dXBEYXRhKCksYS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5h''@;'; put 'put ''dmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkIil9Y2FsbENoYW5nZXNJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYSkudGhlbihoPT57ZC50YWJsZURldGFpbHM9aC5qc3BhcmFtc1swXSxk''@;'; put 'put ''LmpzUGFyYW1zPWguanNwYXJhbXNbMF07bGV0IGY9W107Zm9yKGNvbnN0IHYgaW4gZC5qc1BhcmFtcylkLmpzUGFyYW1zLmhhc093blByb3BlcnR5KHYpJiZmLnB1c2godik7ZC5rZXlzQXJyYXk9ZiwiTVBFX1RBQkxFUyI9PT1oLmpzcGFyYW1zWzBdLkJBU0VfRFMmJihkLnJlZnJlc2hTdGFy''@;'; put 'put ''dHVwc2VydmljZUFmdGVyQXBwcm92ZT0hMCl9KS5jYXRjaChoPT57ZC5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2QubG9hZGVkPSEwfSl9KSgpfWZvcm1hdHRpbmdDaGFuZ2VkKCl7dGhpcy5jYWxjRGlmZigpfWNhbGNEaWZmKCl7aWYoIXRoaXMucmVzcG9uc2UpcmV0dXJuO2xl''@;'; put 'put ''dCBhPXRoaXMucmVzcG9uc2UubmV3LGQ9dGhpcy5yZXNwb25zZS51cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5vcmlnaW5hbHM7dGhpcy5mb3JtYXR0ZWRWYWx1ZXMmJihhPXRoaXMucmVzcG9uc2UuZm10X25ldyxkPXRoaXMucmVzcG9uc2UuZm10X3Vw''@;'; put 'put ''ZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmZtdF9kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5mbXRfb3JpZ2luYWxzKSx0aGlzLm9yaWdpbmFscz1mLHRoaXMucm93S2V5cz1bXTtmb3IobGV0IGR0PTA7ZHQ8ZC5sZW5ndGg7ZHQrKyl7bGV0IEp0PU9iamVjdC5rZXlzKGRbZHRdKTtmb3IobGV0IHZu''@;'; put 'put ''PTA7dm48SnQubGVuZ3RoO3ZuKyspZFtkdF1bSnRbdm5dXSE9PWZbZHRdW0p0W3ZuXV0mJnRoaXMuY2hhbmdlc0Fyci5wdXNoKHtpbmQ6ZHQsZmllbGQ6SnRbdm5dLHByb3A6ZFtkdF1bSnRbdm5dXSxvcmlnaW5hbDpmW2R0XVtKdFt2bl1dfSl9dGhpcy5sZW5zPXtuZXc6dGhpcy5wYXJhbXM/''@;'; put 'put ''Lk5VTV9BRERFRHx8MCx1cGRhdGVkOnRoaXMucGFyYW1zPy5OVU1fVVBEQVRFRHx8MCxkZWxldGVkOnRoaXMucGFyYW1zPy5OVU1fREVMRVRFRHx8MH07bGV0IFo9W10scmU9ZC5jb25jYXQoYSxoKTtmb3IobGV0IGR0PTA7ZHQ8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtkdCsrKVoucHVz''@;'; put 'put ''aCh0aGlzLnJlc3BvbnNlLmNvbHNbZHRdLk5BTUUpO2xldCBjZT10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy5uZXcsYmU9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5s''@;'; put 'put ''ZW5zLnVwZGF0ZWQ7dGhpcy5kaWZmc0xpbWl0PXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50PWNlO2xldCBCZT1bXSxxZT1b''@;'; put 'put ''XTtmb3IobGV0IGR0PTA7ZHQ8Wi5sZW5ndGg7ZHQrKylxZS5wdXNoKHtkYXRhOlpbZHRdLHJlYWRPbmx5OiEwfSk7dGhpcy5kaWZmVGFibGUuZGF0YT1yZTtmb3IobGV0IGR0PTA7ZHQ8cmUubGVuZ3RoO2R0Kyspe2xldCB2bj1PYmplY3Qua2V5cyhyZVtkdF0pO3RoaXMucm93S2V5cy5wdXNo''@;'; put 'put ''KHZuKX1sZXQgcnQ9W10scHQ9W107Zm9yKGxldCBkdD0wO2R0PHRoaXMuZGlmZlRhYmxlLmRhdGEubGVuZ3RoO2R0Kyspe2lmKGR0PGJlJiYwIT09YmUpe3J0LnB1c2goW10pLHB0LnB1c2goW10pLEJlLnB1c2goInVwZGF0ZWQiKTtsZXQgSnQ9T2JqZWN0LmtleXModGhpcy5kaWZmVGFibGUu''@;'; put 'put ''ZGF0YVtkdF0pO2ZvcihsZXQgdm49MDt2bjxKdC5sZW5ndGg7dm4rKyl7bGV0IENuPUp0W3ZuXTtmW2R0XVtDbl0hPT1kW2R0XVtDbl0/KHJ0W2R0XS5wdXNoKCEwKSxwdFtkdF0ucHVzaChmW2R0XVtDbl0pKToocnRbZHRdLnB1c2goITEpLHB0W2R0XS5wdXNoKG51bGwpKX10aGlzLmFyckNo''@;'; put 'put ''YW5nZWQ9cnQsdGhpcy5hcnJPZkNoYW5nZXM9cHR9ZHQ+PWJlJiZkdDxiZStjZSYmQmUucHVzaCgiYWRkZWQiKSxkdD5jZStiZS0xJiZCZS5wdXNoKCJkZWxldGVkIil9dGhpcy5jaEFycj1CZSx0aGlzLnJvd0hlYWRlcj10aGlzLnJvd0tleXNbMF0sdGhpcy5kaWZmVGFibGUuZGF0YT1yZX1u''@;'; put 'put ''Z0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLl9kZXRhaWxzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnN1Ym1pdHREZXRhaWwuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYpe2Euc3ViT2JqPWYudmlld0RhdGEsYS50''@;'; put 'put ''YWJsZUlkPWYudmlld0RhdGEudGFibGVJZCxhLnN1Ym1pdHRlZD1mLnZpZXdEYXRhLnN1YixhLnN1Ym1pdERldGFpbHM9Zi5kYXRhLGEuc3VibWl0QXJyPVtdO2ZvcihsZXQgTSBpbiBhLnN1Ym1pdERldGFpbHMpInN1YiIhPT1NJiZhLnN1Ym1pdEFyci5wdXNoKE0pO2xldCB2PXtBQ1RJT046''@;'; put 'put ''IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyh2LCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oTT0+e2EucGFyYW1zPU0ucGFyYW1zWzBdLGEu''@;'; put 'put ''cmVzcG9uc2U9TSxhLmNhbGNEaWZmKCksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pLmNhdGNoKE09Pk0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHR5cGVvZiBh''@;'; put 'put ''LnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZD4idSIpcmV0dXJuO2EudGFibGVJZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDtsZXQgZD17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTth''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnMoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnBhcmFtcz1oLnBhcmFtc1swXSxhLnJlc3BvbnNlPWgsYS5jYWxjRGlmZigpLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KS5jYXRjaChoPT57''@;'; put 'put ''YS5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwLGEuc2V0Rm9jdXMoKX0pfSkoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RldGFpbHNTdWImJnRoaXMuX2RldGFpbHNTdWIudW5zdWJzY3JpYmUoKX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQg''@;'; put 'put ''YT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjY2VwdEJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2UoQnMpLEdlKHZjKSxHZShDdSksR2UoTHMpKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLWRldGFpbHMiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQyLHZhcnM6MTIsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFs''@;'; put 'put ''LXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbNCwibmdJZiJdLFsxLCJm''@;'; put 'put ''b3JtLWJsb2NrIl0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNfOCJdLFsiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJpbm5lckhUTUwiXSxbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxl''@;'; put 'put ''ZnQgbGluay1pdCIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0lmIl0sWzEsImxlZnQiLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJUYWJMaW5rIiwiIl0sWzQsImNscklmQWN0aXZlIl0sWzEsIm92ZXJmbG93LWF1dG8iXSxbMSwiY2FyZCJd''@;'; put 'put ''LFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJtdC0wIiw0LCJuZ0lmIl0sWzEsIm10LTAiXSxbMSwiY2FyZC1oZWFkZXIiLCJwLTAiXSxbMSwiY2xyLXJv''@;'; put 'put ''dyJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEJhY2siXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQt''@;'; put 'put ''Y2VudGVyIl0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxJbmZvIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLXNtIiwidG9vbHRpcC10b3AtbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCIyOCJd''@;'; put 'put ''LFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtMjR2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbMSwidGFibGVDb250IiwibXQtMCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXNpemUtMTgiLDQsIm5nSWYiXSxbMSwiZC1mbGV4Il0sWyJjbGFzcyIsImxlZnQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJkLWZsZXgiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwi''@;'; put 'put ''bmdGb3JPZiJdLFsxLCJjYXJkLXRleHQiXSxbMSwiY2xyLXJvdyIsImZvbnQtc2l6ZS0xNSJdLFsxLCJjbHItY29sLW1kLTUiXSxbMSwiY2xyLWNvbC1tZC03Il0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJtdC0wIl0sWzEsImNsci1yb3ciLCJjbHItZ2FwLTUiLCJjbHItZ2FwLXNtLTAiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsIm1yLTVpIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNl''@;'; put 'put ''bnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtci01''@;'; put 'put ''aSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbImlkIiwicmVqZWN0QnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4iLCJidG4tZGFuZ2VyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwibS0wIiwibWwtMjBpIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJU''@;'; put 'put ''b2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJmb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xh''@;'; put 'put ''c3MiLCJyb3dzLW5vdGljZSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxbMSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIl0sWzEsImxhYmVsIiwibGFiZWwtc3Vj''@;'; put 'put ''Y2VzcyJdLFsxLCJsYWJlbCIsImxhYmVsLWRhbmdlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtc2l6ZS0xOCJdLFsxLCJtdC0xNSJdLFsxLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm10LTEwIl0sWzEsInJvd3Mtbm90aWNlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFu''@;'; put 'put ''Z2xlIiwxLCJtYi01IiwiY29sb3Itb3JhbmdlIl0sWzEsImgtMjR2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsIm10LTEwIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIs''@;'; put 'put ''InNlY3Rpb24iXSxbMSwiZC1mbGV4IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImxlZnQiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvb2x0aXAtY29udGVudCIsNCwibmdJZiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQi''@;'; put 'put ''XSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCBtLTAiLDQsIm5nSWYiXSxbMSwiY2FyZCIsIm0tMCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJi''@;'; put 'put ''dG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImNsci1jb2wtbWQtNCJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIiwidGV4dC1jZW50ZXIiXSxbMSwibS0wIiwidGV4dC1jZW50ZXIiLCJj''@;'; put 'put ''b2xvci1kYXJrZXItZ3JheSJdLFsxLCJtLTAiLCJtbC0yMC1pIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC0yNXZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIs''@;'; put 'put ''NCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiXSxbMSwiaC0yNXZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwibG9hZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZk''@;'; put 'put ''JiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kZXRhaWxzT3Blbix2KXx8KGguZGV0YWlsc09wZW49diksdn0pLGRlKDEsImgzIiwxKSxMZSgyLCJBcHByb3ZhbCBEZXRhaWxzIiksaGUoKSxkZSgzLCJkaXYiLDIp''@;'; put 'put ''KDQsInRhYmxlIiwzKSg1LCJ0aGVhZCIpKDYsInRyIikoNywidGgiLDQpLExlKDgsIk5hbWUiKSxoZSgpLGRlKDksInRoIiw0KSxMZSgxMCwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxMSwidGJvZHkiKSxndCgxMixseXQsNSwzLCJ0ciIsNSksaGUoKSgpKCksZGUoMTMsImRpdiIsNikoMTQsImJ1''@;'; put 'put ''dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmRldGFpbHNPcGVuPSExfSksTGUoMTUsIiBPayAiKSxoZSgpKCkoKSxkZSgxNiwiY2xyLW1vZGFsIiwwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC50YWJsZUZsYWcsdil8fCho''@;'; put 'put ''LnRhYmxlRmxhZz12KSx2fSksZGUoMTcsImgzIiwxKSxMZSgxOCwiQWxsIERldGFpbHMiKSxoZSgpLGRlKDE5LCJkaXYiLDIpLGd0KDIwLGh5dCwxOSwyLCJjbHItdGFicyIsOCksaGUoKSxkZSgyMSwiZGl2Iiw2KSgyMiwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGgudGFibGVGbGFnPSExfSksTGUoMjMsIiBPayAiKSxoZSgpKCkoKSxkZSgyNCwiY2xyLW1vZGFsIiwwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yZWplY3RPcGVuLHYpfHwoaC5yZWplY3RPcGVuPXYpLHZ9KSxkZSgyNSwiaDMiLDEpLExlKDI2''@;'; put 'put ''LCJSZWFzb24gTWVzc2FnZSIpLGhlKCksZGUoMjcsImRpdiIsMikoMjgsImZvcm0iKSgyOSwic2VjdGlvbiIsOSkoMzAsImRpdiIsMTApKDMxLCJsYWJlbCIsMTEpLExlKDMyLCJSZWFzb24gZm9yIHJlamVjdGluZz8iKSxoZSgpLGRlKDMzLCJ0ZXh0YXJlYSIsMTIpLGdpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5zdWJtaXRSZWFzb24sdil8fChoLnN1Ym1pdFJlYXNvbj12KSx2fSksaGUoKSgpKCkoKSgpLGRlKDM0LCJkaXYiLDYpKDM1LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0T3Blbj0hMX0pLExlKDM2''@;'; put 'put ''LCIgQ2FuY2VsICIpLGhlKCksZGUoMzcsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWplY3RpbmcoKX0pLExlKDM4LCIgT0sgIiksaGUoKSgpKCksZGUoMzksImRpdiIsMTUpLGd0KDQwLFJ5dCw0LDIsImRpdiIsMTYpKDQxLCR5dCwzLDIsImRpdiIsOCks''@;'; put 'put ''aGUoKSksMiZkJiYocGkoImNsck1vZGFsT3BlbiIsaC5kZXRhaWxzT3BlbiksZmUoMTIpLE1lKCJuZ0Zvck9mIixoLmtleXNBcnJheSksZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC50YWJsZUZsYWcpLGZlKDQpLE1lKCJuZ0lmIixoLnRhYmxlRmxhZyksZmUoNCkscGkoImNsck1vZGFsT3Bl''@;'; put 'put ''biIsaC5yZWplY3RPcGVuKSxmZSg5KSxwaSgibmdNb2RlbCIsaC5zdWJtaXRSZWFzb24pLE1lKCJuZ01vZGVsT3B0aW9ucyIsR3MoMTEsYXl0KSkoImlubmVySFRNTCIsaC5zdWJtaXRSZWFzb24sVjQpLGZlKDQpLE1lKCJjbHJMb2FkaW5nIixoLnJlamVjdExvYWRpbmcpLGZlKDMpLE1lKCJu''@;'; put 'put ''Z0lmIiwhaC5zdWJtaXR0ZWQpLGZlKCksTWUoIm5nSWYiLGguc3VibWl0dGVkKSl9LGRlcGVuZGVuY2llczpbd3UsbnMsYmEsbDcscWwsTWQsbmwsbzcsJHMseXAsYzEsSGwscnMsb3UsS3UsajAsSHksUDIsZHMsSWQsQnksU2gsX20sQ20seDcsd20seW0sUzddLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7Y29uc3QgS3l0PWM9Pih7bm9Cb3JkZXI6Y30pLHF5dD0oKT0+WzMsNSwxMCwxNV07ZnVuY3Rpb24gWHl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMCkoMSwiZGl2IiwxMSksR3QoMiwiY2xyLWljb24iLDEyKSxkZSgzLCJoMyIsMTMpLExlKDQsIlRoZXJlIGFyZSBu''@;'; put 'put ''byBhcHByb3ZhbHMgcmVtYWluaW5nIiksaGUoKSgpKCkpfWZ1bmN0aW9uIEp5dChjLGwpezEmYyYmKGRlKDAsImgzIiwxNCksTGUoMSwiIFJFVklFVyAiKSxoZSgpKX1mdW5jdGlvbiBReXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNSksTGUoMSwiIFlvdSBoYXZlICIpLGRlKDIsInNwYW4i''@;'; put 'put ''KSxMZSgzKSxoZSgpLExlKDQsImFwcHJvdmFscyByZW1haW5pbmcgIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksRHIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBlX3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxOCksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gdF90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIGFwcHJvdmFscyBsaXN0IiksaGUoKSgpKX1mdW5jdGlvbiBuX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE2KSxndCgxLGVfdCwyLDAsInNwYW4iLDE3KSgyLHRfdCwzLDAsImRpdiIsOSks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiByX3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzNil9ZnVuY3Rpb24gaV90KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzcp''@;'; put 'put ''LDImYyYmTWUoImNsclNtYWxsIiwhMCl9ZnVuY3Rpb24gYV90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2''@;'; put 'put ''KSxoZSgpLGRlKDcsImNsci1kZy1jZWxsIiksTGUoOCksaGUoKSxkZSg5LCJjbHItZGctY2VsbCIpKDEwLCJkaXYiLDI0KSgxMSwiYSIsMjUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChSZSgyKS5nZXRDbGlja2VkKGgpKX0pLEd0KDEyLCJj''@;'; put 'put ''bHItaWNvbiIsMjYpLGRlKDEzLCJzcGFuIiwyNyksTGUoMTQsIkdvIHRvIHJldmlldyBwYWdlIHNjcmVlbiIpLGhlKCkoKSxkZSgxNSwiYSIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09UmUoMik7cmV0dXJuIEN0KGYu''@;'; put 'put ''cmVqZWN0TG9hZGluZz8iIjpNLnJlamVjdGluZyh2KSl9KSxndCgxNixyX3QsMSwwLCJjbHItaWNvbiIsMjkpKDE3LGlfdCwxLDEsImNsci1zcGlubmVyIiwzMCksZGUoMTgsInNwYW4iLDI3KSxMZSgxOSwiUmVqZWN0IiksaGUoKSgpLGRlKDIwLCJhIiwzMSksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5nZXRUYWJsZShoLnRhYmxlSWQpKX0pLEd0KDIxLCJjbHItaWNvbiIsMzIpLGRlKDIyLCJzcGFuIiwyNyksTGUoMjMsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMjQsImNsci1kZy1j''@;'; put 'put ''ZWxsIiwzMykoMjUsImJ1dHRvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIFJlKDIpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgyNiwiY2xyLWljb24iLDM1KSxoZSgpKCkoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5zdWJtaXR0ZXIpLGZlKDIpLHdyKGEuYmFzZVRhYmxlKSxmZSgyKSx3cihhLnN1Ym1pdHRlZCksZmUoMiksd3IoYS5zdWJtaXRSZWFzb24pLGZlKDgpLE1lKCJuZ0lmIiwhYS5yZWplY3RMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixh''@;'; put 'put ''LnJlamVjdExvYWRpbmcpLGZlKDgpLE1lKCJpZCIsYS50YWJsZUlkKX19ZnVuY3Rpb24gb190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwxOSkoMiwiY2xyLWRnLWNvbHVtbiIsMjApLExlKDMsIlNVQk1JVFRFUiIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVt''@;'; put 'put ''biIsMjApLExlKDUsIkJBU0UgVEFCTEUiKSxoZSgpLGRlKDYsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg3LCJTVUJNSVRURUQiKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg5LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSgxMCwiY2xyLWRnLWNvbHVtbiIpLExlKDExLCJBQ1RJ''@;'; put 'put ''T04iKSxoZSgpLGRlKDEyLCJjbHItZGctY29sdW1uIiksTGUoMTMsIkRPV05MT0FEIiksaGUoKSxndCgxNCxhX3QsMjcsNywiY2xyLWRnLXJvdyIsMjEpLGRlKDE1LCJjbHItZGctZm9vdGVyIikoMTYsImNsci1kZy1wYWdpbmF0aW9uIiwyMiwwKSgxOCwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjMp''@;'; put 'put ''LExlKDE5LCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksTGUoMjApLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1oYSgxNyksZD1SZSgpO2ZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJiYXNlVGFibGUiKSxmZSgyKSxNZSgiY2xyRGdGaWVs''@;'; put 'put ''ZCIsInN1Ym1pdHRlZCIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoNiksTWUoImNsckRnSXRlbXNPZiIsZC5hcHByb3ZlTGlzdCksZmUoMiksTWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxNZSgiY2xyUGFnZVNpemVPcHRpb25zIixHcygxMCxxeXQpKSxm''@;'; put 'put ''ZSgyKSxWZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIGFwcHJvdmFscyAiKX19bGV0IHNfdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMucm91dGU9aCx0aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmNkcj12LHRoaXMubG9hZGVkPSExLHRoaXMuaXRlbXNOdW09MTB9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxp''@;'; put 'put ''c3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpKX1yZWplY3RpbmcoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q''@;'; put 'put ''KCl7dm9pZCAwIT09ZC5hcHByb3ZlTGlzdCYmKGQudGFibGVJZD1kLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpO2xldCBoPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmQudGFibGVJZCxTVFBfUkVBU09OOiJxdWljayByZWplY3Rpb24ifTt0cnl7KGQuYXBwcm92ZUxpc3R8fFtd''@;'; put 'put ''KVthXS5yZWplY3RMb2FkaW5nPSEwLCh5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoaCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKSkuZnJvbXNhc1swXS5SRVNQT05TRS5pbmNsdWRlcygiU1VDQ0VTUyIpJiYoKGQuYXBwcm92ZUxpc3R8fFtdKVthXS5y''@;'; put 'put ''ZWplY3RMb2FkaW5nPSExLGQuYXBwcm92ZUxpc3Q/LnNwbGljZShhLDEpLGQucmVtYWluZWQtLSxkLmNkci5kZXRlY3RDaGFuZ2VzKCkpfWNhdGNoKGYpe2QuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL3JlamVjdGlvbiIsZil9fSkoKX1uZ09uSW5pdCgpe3Zh''@;'; put 'put ''ciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLml0ZW1zTnVtPTEwO2xldCBkPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaD15''@;'; put 'put ''aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRBcHByb3ZhbHMoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTthLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGg7bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lE''@;'; put 'put ''LHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6di5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjp2LlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2EuYXBwcm92ZUxpc3Q9ZixhLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50''@;'; put 'put ''U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGgpfX0pKCl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlv''@;'; put 'put ''blBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShMcyksR2UoQnMpLEdl''@;'; put 'put ''KEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OSx2YXJzOjgsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwiY29udGVudC1hcmVhIl0sWzEs''@;'; put 'put ''ImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIg''@;'; put 'put ''Zm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIiw0LCJuZ0lmIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1j''@;'; put 'put ''ZW50ZXIiXSxbMSwiY2FyZC1ibG9jayIsIm5vYXBwcm92YWxzLWluZm8td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJj''@;'; put 'put ''bHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiZGF0YWdy''@;'; put 'put ''aWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl0sWyJyb2xlIiwidG9vbHRpcCIsMSwiZC1mbGV4IiwianVz''@;'; put 'put ''dGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ncmVlbiIsMywiY2xpY2siXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjQiXSxbMSwidG9vbHRpcC1jb250''@;'; put 'put ''ZW50Il0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLXJlZCIsMywiY2xpY2siXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiw0LCJuZ0lmIl0sWzMsImNsclNtYWxsIiw0LCJuZ0lmIl0sWzEs''@;'; put 'put ''ImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJd''@;'; put 'put ''LFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIsImlkIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiJdLFszLCJjbHJTbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEm''@;'; put 'put ''ZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxndCgyLFh5dCw1LDAsImRpdiIsMyksZGUoMywiZGl2Iiw0KSxndCg0LEp5dCwyLDAsImgzIiw1KSg1LFF5dCw1LDEsInAiLDYpLGhlKCksZ3QoNixuX3QsMywyLCJkaXYiLDcpLGRlKDcsImRpdiIsOCksZ3QoOCxvX3QsMjEsMTEsImRpdiIs''@;'; put 'put ''OSksaGUoKSgpKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwwPT09aC5yZW1haW5lZCksZmUoKSxNZSgibmdDbGFzcyIsc3AoNixLeXQsIWgubG9hZGVkKSksZmUoKSxNZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVt''@;'; put 'put ''YWluZWQpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRlZCksZmUoMiksTWUoIm5nSWYiLGguYXBwcm92ZUxpc3QmJjAhPT1oLnJlbWFpbmVkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsQW0sUWYsUjcsY08sSnksWHgsdU8sRW0sU3AsTDcsdF8sVG0sazcseG0sRDcsSGwsUmRdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgbF90PWM9Pih7bm9Cb3JkZXI6Y30pLGNfdD0oKT0+WzMsNSwxMCwxNV07ZnVuY3Rpb24gdV90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksR3QoMiwiY2xyLWljb24iLDE1KSxkZSgzLCJoMyIsMTYpLExlKDQsIiBZb3Ug''@;'; put 'put ''aGF2ZSBub3Qgc3VibWl0dGVkIGFueSB0YWJsZXMgIiksaGUoKSgpKCkpfWZ1bmN0aW9uIGRfdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNyksTGUoMSwiIFNVQk1JVCBRVUVVRSAiKSxoZSgpKX1mdW5jdGlvbiBoX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxOCksTGUoMSwiIFlvdSBoYXZl''@;'; put 'put ''ICIpLGRlKDIsInNwYW4iKSxMZSgzKSxoZSgpLExlKDQsInN1Ym1pc3Npb25zIHdhaXRpbmcgdG8gYmUgYXBwcm92ZWQgIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDMpLERyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gZl90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMjEp''@;'; put 'put ''LExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIHBfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24gZ190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOSksZ3QoMSxmX3QsMiww''@;'; put 'put ''LCJzcGFuIiwyMCkoMixwX3QsMywwLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIG1fdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ci''@;'; put 'put ''LDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDUpLmdvVG9EZXRhaWxzKGgudGFibGVJZCkpfSksZGUoMSwiY2xyLWRnLWNlbGwiKSxMZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksTGUoNCksaGUoKSxkZSg1LCJjbHIt''@;'; put 'put ''ZGctY2VsbCIpLExlKDYpLGhlKCksZGUoNywiY2xyLWRnLWNlbGwiKSg4LCJkaXYiLDI5KSg5LCJhIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSg1KS5nb1RvU3RhZ2UoaC50YWJsZUlkKSl9KSxHdCgxMCwiY2xyLWljb24i''@;'; put 'put ''LDMxKSxkZSgxMSwic3BhbiIsMzIpLExlKDEyLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDEzLCJjbHItZGctY2VsbCIsMzMpKDE0LCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBSZSg1''@;'; put 'put ''KS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMTUsImNsci1pY29uIiwzNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuYmFzZSksZmUoMiksd3IoYS5zdWJtaXR0ZWQpLGZlKDIpLHdyKGEuc3VibWl0UmVh''@;'; put 'put ''c29uKX19ZnVuY3Rpb24gdl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwyMykoMiwiY2xyLWRnLWNvbHVtbiIpLExlKDMsIkJBU0UgVEFCTEUiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iLDI0KSxMZSg1LCJTVUJNSVRURUQiKSxoZSgpLGRlKDYsImNs''@;'; put 'put ''ci1kZy1jb2x1bW4iLDI0KSxMZSg3LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg4LCJjbHItZGctY29sdW1uIiwxMyksTGUoOSwiQUNUSU9OIiksaGUoKSxkZSgxMCwiY2xyLWRnLWNvbHVtbiIsMTMpLExlKDExLCJET1dOTE9BRCIpLGhlKCksZ3QoMTIsbV90LDE2LDMsImNsci1kZy1yb3ci''@;'; put 'put ''LDI1KSxkZSgxMywiY2xyLWRnLWZvb3RlciIpKDE0LCJjbHItZGctcGFnaW5hdGlvbiIsMjYsMCkoMTYsImNsci1kZy1wYWdlLXNpemUiLDI3KSxMZSgxNywiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLExlKDE4KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9aGEoMTUpLGQ9UmUoNCk7ZmUoNCks''@;'; put 'put ''TWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLGZlKDYpLE1lKCJjbHJEZ0l0ZW1zT2YiLGQuc3VibWl0dGVyTGlzdCksZmUoMiksTWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxNZSgiY2xyUGFnZVNpemVPcHRpb25z''@;'; put 'put ''IixHcyg4LGNfdCkpLGZlKDIpLFZmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIGJfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjIpLGd0KDEsdl90LDE5LDksImRpdiIsMyksaGUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuc3VibWl0dGVyTGlzdCYmMCE9PWEucmVtYWluZWQpfX1mdW5jdGlvbiB5X3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDYpLGd0KDEsdV90LDUsMCwiZGl2Iiw3KSxkZSgyLCJkaXYiLDgpLGd0KDMsZF90LDIsMCwiaDMi''@;'; put 'put ''LDkpKDQsaF90LDUsMSwicCIsMTApLGhlKCksZ3QoNSxnX3QsMywyLCJkaXYiLDExKSg2LGJfdCwyLDEsImRpdiIsMTIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwwPT09YS5yZW1haW5lZCYmYS5sb2FkZWQpLGZlKCksTWUoIm5nQ2xhc3MiLHNwKDYsbF90LCFh''@;'; put 'put ''LmxvYWRlZCkpLGZlKCksTWUoIm5nSWYiLDAhPT1hLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIixhLmxvYWRlZCYmMCE9PWEucmVtYWluZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBfX3QoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJkaXYiLDQpLGd0KDEseV90LDcsOCwiZGl2Iiw1KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5zdWJSZWFkeSl9fWZ1bmN0aW9uIHdfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpLEd0KDEsImFwcC1hcHByb3ZlLWRldGFpbHMiKSxoZSgpKX1sZXQgZThlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5zYXNTZXJ2aWNlPXYsdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVh''@;'; put 'put ''ZHk9ITEsdGhpcy5kZXRhaWxzT3Blbj0hMX1nb1RvU3RhZ2UoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29Ub0RldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQvIithKX1nZXREZXRhaWxzKGEsZCl7dGhpcy5z''@;'; put 'put ''dWJSZWFkeT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2VuZERldGFpbHMoYSxkLHRoaXMuc3VibWl0RGF0YSl9LDApfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJs''@;'; put 'put ''ZUlkO2EuaXRlbXNOdW09MTA7dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFN1Ym1pdHRzKCk7aWYoYS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoLGEucmVtYWluZWQ+MCl7YS5zdWJtaXR0ZXI9aC5mcm9tc2FzWzBdLlNVQk1JVFRFRF9CWV9OTTtsZXQgZj1oLmZyb21z''@;'; put 'put ''YXMubWFwKGZ1bmN0aW9uKHYpe3JldHVybnt0YWJsZUlkOnYuVEFCTEVfSUQsYmFzZTp2LkJBU0VfVEFCTEUsc3VibWl0dGVkOnYuU1VCTUlUVEVEX09OX0RUVE0sc3VibWl0dGVyOnYuU1VCTUlUVEVEX0JZX05NLHN1Ym1pdFJlYXNvbjp2LlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2lmKGEu''@;'; put 'put ''c3VibWl0dGVyTGlzdD1mLGEuc3VibWl0RGF0YT1oLmZyb21zYXMsdHlwZW9mIGQ8InUiKXtjb25zdCB2PWEuc3VibWl0dGVyTGlzdC5maW5kSW5kZXgoTT0+TS50YWJsZUlkPT09ZCk7dj4tMSYmYS5nZXREZXRhaWxzKGEuc3VibWl0dGVyTGlzdFt2XSx2KX19YS5sb2FkZWQ9ITB9Y2F0Y2go''@;'; put 'put ''aCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJlZGl0b3JzL2dldHN1Ym1pdHMiLGgpfX0pKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcmVhZHlTdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT1hfSksdGhp''@;'; put 'put ''cy5fYmFja1RvU3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdExpc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PSF0aGlzLnN1YlJlYWR5LHRoaXMuZGV0YWlsc09wZW49ITF9KX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxo''@;'; put 'put ''PWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2UodmMpLEdlKExzKSxHZShDdSksR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdWJtaXR0ZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMs''@;'; put 'put ''dmFyczoyLGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsImNvbnRlbnQtYXJlYSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmst''@;'; put 'put ''Z3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250''@;'; put 'put ''ZW50LWNlbnRlciJdLFsxLCJuby1zdWJtaXR0ZWQtdGFibGVzIiwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJp''@;'; put 'put ''cy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlm''@;'; put 'put ''eS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0s''@;'; put 'put ''WzMsImNsckRnRmllbGQiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9s''@;'; put 'put ''ZSIsInRvb2x0aXAiLCJhcmlhLWxhYmVsIiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiwxLCJyb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9y''@;'; put 'put ''LWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIGZvciB0YWJsZSByZWNvcmQi''@;'; put 'put ''LDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSksZ3QoMSxfX3QsMiwxLCJkaXYiLDIpKDIsd190LDIsMCwiZGl2IiwzKSxoZSgpKSwyJmQmJihmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IiwhaC5zdWJSZWFkeSksZmUoKSxNZSgibmdJZiIsaC5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLEFtLFFmLFI3LGNPLEp5LFh4LHVPLEVtLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LEhsLFE2ZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBDX3Q9KGMsbCk9''@;'; put 'put ''Pih7cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfSk7ZnVuY3Rpb24gU190KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMiksR3QoMSwiY2xyLWljb24iLDEzKSxkZSgyLCJoMyIsMTQpLExlKDMsIlRoZXJlIGlzIG5vIGhpc3RvcnkgdG8gc2hvdyIpLGhlKCkoKSl9ZnVuY3Rpb24gTV90KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1cm4gQ3QoZi5nZXRUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxkPVJlKCk7ZmUoKSx3cihkLmFwcHJvdmVEYXRhW2FdKX19ZnVuY3Rpb24geF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IikoMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1''@;'; put 'put ''cm4gQ3QoZi5nZXRCYXNlVGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTGUoMiwiVklFVyIpLGhlKCksZGUoMywic3BhbiIpLExlKDQsIiAvICIpLGhlKCksZGUoNSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1''@;'; put 'put ''cm4gQ3QoZi5nZXRFZGl0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTGUoNiwiRURJVCIpLGhlKCkoKX19ZnVuY3Rpb24gRV90KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7ZmUoKSx3cihkLmFwcHJv''@;'; put 'put ''dmVEYXRhW2FdKX19ZnVuY3Rpb24gVF90KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNiksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsNiksZ3QoNCxNX3QsMiwxLCJhIiwxNSkoNSx4X3QsNywwLCJkaXYiLDE2KSg2LEVfdCwyLDEsInNwYW4iLDE2KSxoZSgpKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7ZmUoMiksd3IoYSksZmUoMiksTWUoIm5nSWYiLGQ8MSksZmUoKSxNZSgibmdJZiIsZDwyJiZkPj0xKSxmZSgpLE1lKCJuZ0lmIixkPj0yKX19ZnVuY3Rpb24gQV90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMjApLExlKDEsIiBMb2FkaW5nLi4uICIp''@;'; put 'put ''LGhlKCkpfWZ1bmN0aW9uIGtfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBoaXN0b3J5IiksaGUoKSgpKX1mdW5jdGlvbiBEX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE4KSxndCgxLEFfdCwyLDAsInNwYW4iLDE5KSgyLGtfdCwzLDAsImRpdiIs''@;'; put 'put ''MTYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gSV90KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDI4KSxMZSgxLCJISVNUT1JZIiksaGUoKSl9ZnVuY3Rpb24gUl90KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwicCIsMjkpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLERyKCIgVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkLCIgcmVjb3JkcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlv''@;'; put 'put ''ICIpfX1mdW5jdGlvbiBMX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS5nZXRBcHBySW5kZXgoaCkpfSksZGUoMSwiY2xyLWRnLWNlbGwi''@;'; put 'put ''LDM0KSgyLCJhIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS5nZXRCYXNlVGFibGUoaC5iYXNldGFibGUpKX0pLExlKDMpLGhlKCkoKSxkZSg0LCJjbHItZGctY2VsbCIsMzYpLExlKDUpLGhlKCksZGUoNiwiY2xyLWRn''@;'; put 'put ''LWNlbGwiLDM0KSxMZSg3KSxoZSgpLGRlKDgsImNsci1kZy1jZWxsIiwzNCksTGUoOSksaGUoKSxkZSgxMCwiY2xyLWRnLWNlbGwiLDM0KSxMZSgxMSksaGUoKSxkZSgxMiwiY2xyLWRnLWNlbGwiLDM0KSxMZSgxMyksaGUoKSxkZSgxNCwiY2xyLWRnLWNlbGwiLDM3KSgxNSwiYnV0dG9uIiwz''@;'; put 'put ''OCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gUmUoMykuZG93bmxvYWQoZi50YWJsZUlkKSxDdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEd0KDE2LCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dDtmZSgzKSx3cihhLmJhc2V0YWJsZSksZmUoKSxNZSgibmdDbGFzcyIsbHAoNyxDX3QsIlJFSkVDVEVEIj09PWEuc3RhdHVzLCJBUFBST1ZFRCI9PT1hLnN0YXR1cykpLGZlKCksd3IoYS5zdGF0dXMpLGZlKDIpLHdyKGEuc3VibWl0dGVyKSxmZSgyKSx3cihhLnN1Ym1pdHRlZFJlYXNvbiks''@;'; put 'put ''ZmUoMiksd3IoYS5zdWJtaXR0ZWQpLGZlKDIpLHdyKGEucmV2aWV3ZWQpfX1mdW5jdGlvbiBPX3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGF0YWdyaWQiLDMwKSgxLCJjbHItZGctY29sdW1uIiwzMSksTGUoMiwiQkFTRV9UQUJMRSIpLGhlKCksZGUoMywiY2xyLWRnLWNvbHVtbiIsMzEp''@;'; put 'put ''LExlKDQsIlNUQVRVUyIpLGhlKCksZGUoNSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDYsIlNVQk1JVFRFUiIpLGhlKCksZGUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDgsIlNVQk1JVCBSRUFTT04iKSxoZSgpLGRlKDksImNsci1kZy1jb2x1bW4iLDMxKSxMZSgxMCwiU1VCTUlUVEVEIiks''@;'; put 'put ''aGUoKSxkZSgxMSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDEyLCJBUFBST1ZFRCAvIFJFSkVDVEVEIiksaGUoKSxkZSgxMywiY2xyLWRnLWNvbHVtbiIpLExlKDE0LCJET1dOTE9BRCIpLGhlKCksZ3QoMTUsTF90LDE3LDEwLCJjbHItZGctcm93IiwzMiksaGUoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDIpO2ZlKCksTWUoImNsckRnRmllbGQiLCJiYXNldGFibGUiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN0YXR1cyIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWRSZWFzb24iKSxmZSgyKSxNZSgiY2xyRGdGaWVs''@;'; put 'put ''ZCIsInN1Ym1pdHRlZCIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwicmV2aWV3ZWQiKSxmZSg0KSxNZSgiY2xyRGdJdGVtc09mIixhLmhpc3RvcnkpfX1mdW5jdGlvbiBQX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDQwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmxvYWREYXRhKCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7TWUoImNsckxvYWRpbmciLGEubG9hZGluZ01vcmUpLGZlKCksRHIoIiBMb2FkICIsYS5yb3dzTGVmdFRvTG9hZCwiIG1vcmUgIil9fWZ1bmN0aW9uIEZfdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpLGd0KDIsSV90LDIsMCwiaDMiLDIzKSgzLFJfdCwyLDEsInAiLDI0KSxoZSgpLGd0KDQsT190LDE2LDcsImNsci1kYXRhZ3JpZCIsMjUpLGRlKDUsImRpdiIsMjYpLGd0KDYsUF90LDIsMiwiYnV0dG9uIiwyNyksaGUoKSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixhLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZD09PWEuSW5maW5pdHkmJmEucm93c0xlZnRUb0xvYWQ+MCl9fWNvbnN0IEhfdD1be3BhdGg6ImFwcHJvdmUiLGNvbXBvbmVudDpzX3R9LHtwYXRoOiJhcHByb3ZlRGV0Lzp0YWJsZUlkIixjb21wb25lbnQ6UTZlfSx7cGF0aDoic3VibWl0dGVk''@;'; put 'put ''Iixjb21wb25lbnQ6ZThlfSx7cGF0aDoic3VibWl0dGVkLzp0YWJsZUlkIixjb21wb25lbnQ6ZThlfSx7cGF0aDoiaGlzdG9yeSIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9''@;'; put 'put ''ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5zYXNTZXJ2aWNlPXYsdGhpcy5oaXN0b3J5PVtdLHRoaXMudGFibGVUaXRsZXM9W10sdGhpcy5oaXN0b3J5QXJyPVtdLHRoaXMubG9hZGVkPSExLHRoaXMuaXRlbXNOdW09MTAsdGhpcy5vcGVuTW9kYWw9ITEsdGhpcy5u''@;'; put 'put ''b0RhdGE9ITEsdGhpcy5hcHByb3ZlRGF0YT17fSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmhpc3RQYXJhbXM9e0hJU1Q6MCxTVEFSVFJPVzoxLE5PQlM6LTF9LHRoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2Vydmlj''@;'; put 'put ''ZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRCYXNlVGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2''@;'; put 'put ''aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdldEVkaXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z2V0QXBwckluZGV4KGEpe2NvbnN0IGQ9dGhpcy5oaXN0b3J5QXJyLmZpbmRJbmRleChoPT5oLlRBQkxFX0lEPT09YS50YWJsZUlkKTtkPi0x''@;'; put 'put ''JiYodGhpcy5hcHByb3ZlRGF0YT10aGlzLmhpc3RvcnlBcnJbZF0sdGhpcy5vcGVuTW9kYWw9ITApfWdldCByb3dzTGVmdFRvTG9hZCgpe2NvbnN0IGE9dGhpcy5oaXN0UGFyYW1zLk5PQlMtdGhpcy5oaXN0b3J5Lmxlbmd0aCxkPXRoaXMuaGlzdFBhcmFtcy5ISVNUO3JldHVybiBhPD0wPzA6''@;'; put 'put ''YT5kP2Q6YX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9h''@;'; put 'put ''dWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKyImX2NvbnRleHRuYW1lPSIrdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD17U1RBUlRST1c6YS5oaXN0UGFyYW1zLkhJU1QrYS5oaXN0UGFy''@;'; put 'put ''YW1zLlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgZixoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhpc3RvcnkoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5sb2FkaW5nTW9yZT0hMSxhLmhpc3RQYXJhbXM9aC5oaXN0cGFyYW1zWzBd''@;'; put 'put ''O2NvbnN0IHY9aC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lmKHYubGVuZ3RoPjApe2NvbnN0IE09djthLmhpc3RvcnlBcnI9dixmPU9iamVjdC5rZXlzKE1bMF0pLGEudGFibGVUaXRsZXM9ZjtsZXQgRD12Lm1hcChmdW5jdGlv''@;'; put 'put ''bihaKXtyZXR1cm57dGFibGVJZDpaLlRBQkxFX0lELHN1Ym1pdHRlcjpaLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246Wi5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6Wi5TVUJNSVRURUQsc3RhdHVzOlouU1RBVFVTLHJldmlld1JlYXNvbjpaLlJFVklFV19SRUFTT05fVFhULHJl''@;'; put 'put ''dmlld2VyOlouUkVWSUVXRVIscmV2aWV3ZWQ6Wi5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczpaLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOlouQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5EKSxhLmxvYWRlZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhp''@;'; put 'put ''c3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Eu''@;'; put 'put ''bG9hZERhdGEoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKGtoKSxHZSh2YyksR2UoTHMpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxo''@;'; put 'put ''b3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MjAsdmFyczo2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLCJjbGFzcyIsImNhcmQtYmxvY2sgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxp''@;'; put 'put ''Z24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEs''@;'; put 'put ''Im1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtbGFiZWwiLCJDbG9zZSBtb2RhbCIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1j''@;'; put 'put ''ZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLDEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2Fy''@;'; put 'put ''bmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIgdGFibGUtbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjdXJzb3ItcG9pbnRlciIsInRhYmxl''@;'; put 'put ''LWxpbmsiLDMsImNsaWNrIl0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhl''@;'; put 'put ''YWRlciJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWhpc3RvcnkgZGF0YWdyaWQtY3Vz''@;'; put 'put ''dG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJsb2FkLW1vcmUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiYnRuIGJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''Y2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFncmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbMywiY2xp''@;'; put 'put ''Y2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xhc3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4''@;'; put 'put ''IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxndCgxLFNfdCw0LDAsImRpdiIsMSksZGUoMiwiY2xyLW1vZGFsIiwyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5vcGVuTW9kYWwsdil8fChoLm9wZW5Nb2RhbD12KSx2''@;'; put 'put ''fSksZGUoMywiaDQiLDMpLExlKDQsIkFwcHJvdmFsIGRldGFpbHMiKSxoZSgpLGRlKDUsImRpdiIsNCkoNiwidGFibGUiLDUpKDcsInRoZWFkIikoOCwidHIiKSg5LCJ0aCIsNiksTGUoMTAsIk5hbWUiKSxoZSgpLGRlKDExLCJ0aCIsNiksTGUoMTIsIlZhbHVlIiksaGUoKSgpKCksZGUoMTMs''@;'; put 'put ''InRib2R5IiksZ3QoMTQsVF90LDcsNCwidHIiLDcpLGhlKCkoKSgpLGRlKDE1LCJkaXYiLDgpKDE2LCJidXR0b24iLDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vcGVuTW9kYWw9ITF9KSxMZSgxNywiIE9LICIpLGhlKCkoKSgpLGd0KDE4LERfdCwzLDIsImRpdiIsMTApKDE5''@;'; put 'put ''LEZfdCw3LDQsImRpdiIsMTEpLGhlKCkpLDImZCYmKGZlKCksTWUoIm5nSWYiLGgubm9EYXRhKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgub3Blbk1vZGFsKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSxmZSgxMiksTWUoIm5nRm9yT2YiLGgudGFibGVUaXRsZXMpLGZlKDQpLE1lKCJuZ0lm''@;'; put 'put ''IiwhaC5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFoLm5vRGF0YSYmaC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxucyxiYSxBbSxRZixSNyxKeSxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxIbCxvdSxLdSxqMCxQMl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dO2xldCBO''@;'; put 'put ''X3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHpjLmZvckNoaWxkKEhfdCksemNdfSl9''@;'; put 'put ''fXJldHVybiBjfSkoKSxWX3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLE5fdCx6''@;'; put 'put ''MCxvOS5mb3JSb290KCksbmYsQ3ddfSl9fXJldHVybiBjfSkoKSxCX3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgal90PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIHpfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDYpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIFVfdChjLGwpezEmYyYmKGRlKDAsImRpdiIp''@;'; put 'put ''KDEsImgzIiksTGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIFpfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCksZ3QoMSx6X3QsMiwwLCJzcGFuIiw1KSgyLFVfdCwzLDAsImRpdiIsMyksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBXX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmFwcHJvdmVUYWJsZVNjcmVlbigp''@;'; put 'put ''KX0pLExlKDEsIiBBcHByb3ZlICIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJkaXNhYmxlZCIsIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpfHwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVE''@;'; put 'put ''ZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKX19ZnVuY3Rpb24gWV90KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMzEpKDEsInNwYW4iKSxMZSgyLCIgUmV2ZXJ0IHRoaXMgYW5k''@;'; put 'put ''IGFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgIiksaGUoKSgpKX1mdW5jdGlvbiBHX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLnJldmVydENoYW5nZXMoKSl9KSxMZSgxLCIgUkVW''@;'; put 'put ''RVJUICIpLGd0KDIsWV90LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMzApLGhlKCl9MiZjJiZNZSgiY2xyTG9hZGluZyIsUmUoMikucmV2ZXJ0aW5nQ2hhbmdlcyl9ZnVuY3Rpb24gJF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IikoMSwiZGl2Iiw3KSgyLCJkaXYi''@;'; put 'put ''LDgpKDMsImg0Iiw5KSxMZSg0LCJTdGFnZWQgRGF0YSIpLGhlKCkoKSgpLGRlKDUsImRpdiIsMTApKDYsImRpdiIsMTEpKDcsImRpdiIsMTIpKDgsImRpdiIsOCksTGUoOSwiQmFzaWMgU3VibWl0dGVkIERldGFpbHMiKSxoZSgpKCksZGUoMTAsImRpdiIpKDExLCJzcGFuIiksTGUoMTIsIlRh''@;'; put 'put ''YmxlIElkOiIpLGhlKCksZGUoMTMsInN0cm9uZyIpKDE0LCJzcGFuIiksTGUoMTUpLGhlKCkoKSgpLGRlKDE2LCJkaXYiKSgxNywic3BhbiIpLExlKDE4LCJCYXNlIFRhYmxlOiIpLGhlKCksZGUoMTksImEiLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku''@;'; put 'put ''dmlld2VyVGFibGVTY3JlZW4oKSl9KSxMZSgyMCksaGUoKSgpLGRlKDIxLCJkaXYiKSgyMiwic3BhbiIpLExlKDIzLCJTdWJtaXQgRGF0ZToiKSxoZSgpLGRlKDI0LCJzcGFuIiwxNCksTGUoMjUpLGhlKCkoKSxkZSgyNiwiZGl2IikoMjcsInNwYW4iKSxMZSgyOCwiUmV2aWV3IFN0YXR1czoi''@;'; put 'put ''KSxoZSgpLGRlKDI5LCJzcGFuIiwxNSksTGUoMzApLGhlKCkoKSgpLGRlKDMxLCJkaXYiLDE2KSgzMiwiZGl2IiwxMikoMzMsImRpdiIsOCksTGUoMzQsIkFjdGlvbnMiKSxoZSgpKCksZGUoMzUsImRpdiIsMTcpKDM2LCJkaXYiLDE4KSgzNywiYnV0dG9uIiwxOSksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTGUoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxndCgzOSxXX3QsMiwyLCJidXR0b24iLDIwKSxkZSg0MCwiYnV0dG9uIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgpLmdvQmFjaygpKX0pLExlKDQxLCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCksZGUoNDIsImJ1dHRvbiIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGguZG93bmxvYWQobnVsbD09aC50YWJsZURldGFpbHM/bnVsbDpoLnRhYmxl''@;'; put 'put ''RGV0YWlscy5UQUJMRV9JRCkpfSksR3QoNDMsImNsci1pY29uIiwyMyksaGUoKSxkZSg0NCwiY2xyLXRvb2x0aXAiKSxndCg0NSxHX3QsMywxLCJidXR0b24iLDI0KSxoZSgpKCkoKSgpKCksZGUoNDYsImRpdiIsMjUpLEd0KDQ3LCJob3QtdGFibGUiLDI2KSxoZSgpLEd0KDQ4LCJkaXYiLDI3''@;'; put 'put ''KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDE1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiIiksZmUoNSksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQkFTRV9UQUJMRSwiICIp''@;'; put 'put ''LGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksZmUoNCksTWUoIm5nQ2xhc3MiLGxwKDE3LGpfdCwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVW''@;'; put 'put ''SUVXX1NUQVRVU19JRCksIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSksZmUoKSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lELCIgIiks''@;'; put 'put ''ZmUoNyksTWUoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpLGZlKDIpLE1lKCJuZ0lmIiwiWUVTIiE9PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkFMTE9XX1JFU1RPUkUpKSxmZSgpLE1lKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKSxmZSg1''@;'; put 'put ''KSxNZSgibmdJZiIsIllFUyI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoMiksTWUoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFi''@;'; put 'put ''bGUuY29sdW1ucykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpKCJhZnRlckdldENvbEhlYWRlciIsYS5ob3RUYWJsZS5hZnRlckdldENvbEhlYWRlcikoImNlbGxzIixh''@;'; put 'put ''LmhvdFRhYmxlLmNlbGxzKX19Y29uc3QgS190PVt7cGF0aDoiOnRhYmxlSWQiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMu''@;'; put 'put ''cm91dGU9Zix0aGlzLnJvdXRlcj12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMubG9hZGVkPSExLHRoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6''@;'; put 'put ''W10sY29sdW1uczpbXSxoZWlnaHQ6NTAwLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkfHwxLzAsYWZ0ZXJHZXRDb2xIZWFkZXI6KEQsWixyZSk9PntaLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNv''@;'; put 'put ''bnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19fXN1Ym1pdHRlZFRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlX2lkKX1hcHByb3ZlVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92''@;'; put 'put ''ZURldC8iK3RoaXMudGFibGVfaWQpfXZpZXdlclRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9Z29CYWNrKCl7S24ueGxtYXBzLmZpbmQoZD0+ZC50YXJnZXREUz09PXRoaXMudGFibGVEZXRh''@;'; put 'put ''aWxzLkJBU0VfVEFCTEUpP3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2hvbWUvZXhjZWwtbWFwcy8iK3RoaXMuaG90VGFibGUuZGF0YVswXS5YTE1BUF9JRCk6dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9ZG93bmxv''@;'; put 'put ''YWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVk''@;'; put 'put ''aXRmaWxlJnRhYmxlPSIrYSl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e2EuaG90VGFibGUubGljZW5zZUtleT1kfSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBh''@;'; put 'put ''cmFtcy50YWJsZUlkPCJ1Iil7YS50YWJsZV9pZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDt0cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5mbyhhLnRhYmxlX2lkKTtpZighZHx8IWQuanNwYXJhbXMpdGhyb3cgbmV3IEVycm9yKCJqc3BhcmFt''@;'; put 'put ''cyBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7YS50YWJsZURldGFpbHM9ZC5qc3BhcmFtc1swXX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0U/aD1kOmguTUVTU0FHRT1kLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNoYW5nZWlu''@;'; put 'put ''Zm8iLGgpfXRyeXtsZXQgZD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5vcGVuVGFibGUoYS50YWJsZV9pZCk7aWYoIWR8fCFkLnN0YWdldGFibGUpdGhyb3cgbmV3IEVycm9yKCJTdGFnZXRhYmxlIHByb3BlcnR5IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTtsZXQgaD1kLnN0YWdldGFi''@;'; put 'put ''bGVbMF0sZj1bXSx2PVtdO2ZvcihsZXQgRCBpbiBoKWgmJmYucHVzaChEKTtmb3IobGV0IEQ9MDtEPGYubGVuZ3RoO0QrKyl2LnB1c2goe2RhdGE6ZltEXX0pO2xldCBNPWZ1bmN0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX07YS5ob3RUYWJsZS5kYXRhPWQuc3RhZ2V0YWJsZSxhLmhvdFRh''@;'; put 'put ''YmxlLmNvbEhlYWRlcnM9ZixhLmhvdFRhYmxlLmNvbHVtbnM9dixhLmhvdFRhYmxlLmNlbGxzPU0sYS5sb2FkZWQ9ITAsYS5zZXRGb2N1cygpfWNhdGNoKGQpe2xldCBoPXt9O2QuTUVTU0FHRXx8KGguTUVTU0FHRT1kKSxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImF1ZGl0''@;'; put 'put ''b3JzL2dldHN0YWdldGFibGUiLGgpLGEubG9hZGVkPSExfX19KSgpfXJldmVydENoYW5nZXMoKXt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvcmVzdG9yZSIse3Jlc3RvcmVfaW46W3tsb2FkX3JlZjp0aGlzLnRhYmxlX2lkfV19KS50''@;'; put 'put ''aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dCYmdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbIi9zdGFnZSJdKS50aGVuKCgpPT57dGhpcy5yb3V0ZS5uYXZpZ2F0ZShbYC9zdGFnZS8ke2QuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0WzBdLkxPQURSRUZ9YF0pfSl9KS5maW5h''@;'; put 'put ''bGx5KCgpPT57dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSExfSl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHByb3ZhbC1idG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKGtoKSxHZSh2YyksR2UoTHMpLEdlKEN1KSxHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN0YWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0''@;'; put 'put ''LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImNhcmQiXSxbImNsYXNzIiwiaC04MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEs''@;'; put 'put ''ImgtODB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJk''@;'; put 'put ''LXRpdGxlIiwidGV4dC1jZW50ZXIiXSxbMSwibXQtMCJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1yb3ciXSxbMSwiY2FyZC1ibG9jayIsImNsci1jb2wtbWQtNiIsIm5vLWJvcmRlcnMiXSxbMSwiY2FyZC1oZWFkZXIiLCJweS01Il0sWzEsImJhc2VUYWJsZUxpbmsiLDMsImNsaWNrIl0s''@;'; put 'put ''WzEsIm10LTEwIl0sWzEsIm10LTEwIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1jb2wtbWQtNiIsImNhcmQtYmxvY2siLCJuby1ib3JkZXJzIl0sWzEsIm10LTIwIl0sWzEsInJvdyJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNr''@;'; put 'put ''IiwiZGlzYWJsZWQiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzLW91dGxpbmUgdGV4dC1jZW50ZXIgbXItNWkiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRl''@;'; put 'put ''eHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwibWluLXctMCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiY2xh''@;'; put 'put ''c3MiLCJidG4gYnRuLXNtIGJ0bi1kYW5nZXIgdGV4dC1jZW50ZXIgbXQtMjAiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hI''@;'; put 'put ''IiwiYWxsIiwzLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJtYXhSb3dzIiwiaGVpZ2h0IiwibGljZW5zZUtleSIsImFmdGVyR2V0Q29sSGVhZGVyIiwiY2VsbHMiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJpZCIsImFwcHJv''@;'; put 'put ''dmFsLWJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tZGFuZ2VyIiwidGV4dC1jZW50ZXIiLCJtdC0y''@;'; put 'put ''MCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgw''@;'; put 'put ''LCJkaXYiLDApKDEsImRpdiIsMSksZ3QoMixaX3QsMywyLCJkaXYiLDIpKDMsJF90LDQ5LDIwLCJkaXYiLDMpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLCFoLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsaC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxIbCxqMCxMMixQMix2''@;'; put 'put ''Nyx5NyxiNyxEX10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dO2xldCBxX3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLHpjLmZvckNoaWxkKEtfdCksbzkuZm9yUm9vdCgpXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWF90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBWaWV3ZXIgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUo''@;'; put 'put ''MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gSl90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyks''@;'; put 'put ''TGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gUV90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBTdGFnZSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3''@;'; put 'put ''KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIGV3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFu''@;'; put 'put ''Iiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gdHd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIiksZGUoMiwi''@;'; put 'put ''c3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIG53dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgVGFibGVzIGluIGxpYnJhcnkgbGltaXQ6ICIp''@;'; put 'put ''LGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiByd3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIFZpZXdib3hlcyBsaW1p''@;'; put 'put ''dDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gaXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0''@;'; put 'put ''OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiBhd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE5KSxMZSgxLCIg''@;'; put 'put ''UmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksZGUoMiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxMZSgzLCIgUkVGUkVTSCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLE1l''@;'; put 'put ''KCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1bmN0aW9uIG93dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGd0KDEsYXd0LDQsMSwiZGl2IiwxOCksZGUoMiwiZGl2IiwxOSksTGUoMywiIFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLGRlKDQsImJ1dHRv''@;'; put 'put ''biIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5yZWZyZXNoRGF0YUNhdGFsb2coKSl9KSxMZSg1LCIgUkVGUkVTSCAiKSxoZSgpKCksZGUoNiwiZGl2IiwxOSksTGUoNywiIERvd25sb2FkIENvbmZpZ3VyYXRpb24gIiksZGUoOCwiYnV0dG9uIiwyMSks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmRvd25sb2FkQ29uZmlndXJhdGlvbigpKX0pLExlKDksIiBET1dOTE9BRCAiKSxoZSgpKCksZGUoMTAsImRpdiIsMTkpLExlKDExLCIgVXBkYXRlIExpY2VuY2UgS2V5ICIpLGRlKDEyLCJidXR0b24iLDIyKSxMZSgx''@;'; put 'put ''MywiIFVQREFURSAiKSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKDMpLE1lKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZyl9fWNvbnN0IHN3dD1be3BhdGg6IiIsY29tcG9uZW50Oigo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWYsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xMi4xIixhcHBWZXJzaW9u''@;'; put 'put ''OiJ2Ny4wLjIiLnJlcGxhY2UoInYiLCIiKSxidWlsZFRpbWVzdGFtcDpJb2UoKShwYXJzZUludCgiMTc1MDQ5ODI0OTAwNSIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIil9LHRoaXMuaHR0cD0iaHR0cDoiPT09bG9jYXRpb24ucHJvdG9jb2wsdGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFs''@;'; put 'put ''b2c9ITEsdGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITEsdGhpcy5yZXNwb25zZT0iTm8gcmVzcG9uc2UiLHRoaXMucmVzcG9uc2VNb2RhbD0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnNlcnZl''@;'; put 'put ''clR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLmxpY2VuY2VJbmZvPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKSx0aGlzLmVudmlyb25tZW50SW5mbz10aGlzLmFwcFNlcnZpY2UuZ2V0RW52aXJvbm1lbnRJbmZvKCksdGhpcy5zZXR0aW5n''@;'; put 'put ''cz10aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy52YWx1ZSx0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyYmKHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDPWRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQykpLHRoaXMuYXBwU2V0''@;'; put 'put ''dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnN1YnNjcmliZSh2PT57dGhpcy5zZXR0aW5ncz12fSl9bmdPbkluaXQoKXt9c2V0dGluZ0NoYW5nZShhKXt0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXRBcHBTZXR0aW5ncyh0aGlzLnNldHRpbmdzKX1kb3dubG9hZENvbmZpZ3VyYXRpb24oKXtsZXQg''@;'; put 'put ''YT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxkPWEuc2VydmVyVXJsLGg9YS5hcHBMb2MsZj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGQrZisiLz9fcHJvZ3JhbT0iK2grIi9zZXJ2aWNlcy9hZG1pbi9leHBvcnRjb25maWciKX1yZWZy''@;'; put 'put ''ZXNoRGF0YUNhdGFsb2coKXt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaGNhdGFsb2ciLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlz''@;'; put 'put ''LnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMX0pfXJlZnJlc2hEYXRhTGlu''@;'; put 'put ''ZWFnZSgpe3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNodGFibGVsaW5lYWdlIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNw''@;'; put 'put ''b25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKGEpe3Jl''@;'; put 'put ''dHVybiJvYmplY3QiPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKG9MKSxHZShCcyksR2UodTEpLEdlKCRSKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJhcHAtc3lzdGVtIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxMzgsdmFyczozNixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVy''@;'; put 'put ''IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbMSwidy0xMDAiLCJsaWdodCJdLFsxLCJjb250ZW50LWJveCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJzeXMtaW5mbyIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQt''@;'; put 'put ''Y2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbGctcm93Il0sWyJjZHMtdGV4dCIsInN1YnNlY3Rpb24iLDEsIm1iLTEwIl0sWzEsImRhcmsiXSxbImNkcy10ZXh0IiwibGFiZWwiLDEsIm0tMCJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciJd''@;'; put 'put ''LFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJtLTAiXSxbImNsYXNzIiwiYWRtaW4tYWN0aW9uIiw0LCJuZ0lmIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRu''@;'; put 'put ''LXNtIiwzLCJjbGljayJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoNCIsMiksTGUoMywiU3lzdGVtIGluZm9ybWF0''@;'; put 'put ''aW9uIiksaGUoKSxHdCg0LCJociIsMyksZGUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpKDcsImRpdiIpKDgsImg2Iiw2KSxMZSg5LCIgRW52aXJvbm1lbnQgRGV0YWlscyAiKSxHdCgxMCwic3BhbiIsNyksaGUoKSxkZSgxMSwicCIsOCksTGUoMTIsIiBTWVNTSVRFOiAiKSxkZSgxMywic3BhbiIs''@;'; put 'put ''NyksTGUoMTQpLGhlKCkoKSxkZSgxNSwicCIsOCksTGUoMTYsIiBTWVNTQ1BMOiAiKSxkZSgxNywic3BhbiIsNyksTGUoMTgpLGhlKCkoKSxkZSgxOSwicCIsOCksTGUoMjAsIiBTWVNUQ1BJUEhPU1ROQU1FOiAiKSxkZSgyMSwic3BhbiIsNyksTGUoMjIpLGhlKCkoKSxkZSgyMywicCIsOCks''@;'; put 'put ''TGUoMjQsIiBTWVNWTE9ORzogIiksZGUoMjUsInNwYW4iLDcpLExlKDI2KSxoZSgpKCksZGUoMjcsInAiLDgpLExlKDI4LCIgTUVNU0laRTogIiksZGUoMjksInNwYW4iLDcpLExlKDMwKSxoZSgpKCksZGUoMzEsInAiLDgpLExlKDMyLCIgU1lTUFJPQ0VTU01PREU6ICIpLGRlKDMzLCJzcGFu''@;'; put 'put ''Iiw3KSxMZSgzNCksaGUoKSgpLGRlKDM1LCJwIiw4KSxMZSgzNiwiIFNZU0hPU1ROQU1FOiAiKSxkZSgzNywic3BhbiIsNyksTGUoMzgpLGhlKCkoKSxkZSgzOSwicCIsOCksTGUoNDAsIiBTWVNVU0VSSUQ6ICIpLGRlKDQxLCJzcGFuIiw3KSxMZSg0MiksaGUoKSgpLGRlKDQzLCJwIiw4KSxM''@;'; put 'put ''ZSg0NCwiIFNZU0hPU1RJTkZPTE9ORzogIiksZGUoNDUsInNwYW4iLDcpLExlKDQ2KSxoZSgpKCksZGUoNDcsInAiLDgpLExlKDQ4LCIgU1lTRU5DT0RJTkc6ICIpLGRlKDQ5LCJzcGFuIiw3KSxMZSg1MCksaGUoKSgpLGRlKDUxLCJwIiw4KSxMZSg1MiwiIEFVVE9FWEVDOiAiKSxkZSg1Mywi''@;'; put 'put ''c3BhbiIsNyksTGUoNTQpLGhlKCkoKSgpLGRlKDU1LCJkaXYiLDkpKDU2LCJkaXYiKSg1NywiaDYiLDYpLExlKDU4LCIgRGF0YSBDb250cm9sbGVyIERldGFpbHMgIiksR3QoNTksInNwYW4iLDcpLGhlKCksZGUoNjAsInAiLDgpLExlKDYxLCIgQXBwbGljYXRpb24gdmVyc2lvbjogIiksZGUo''@;'; put 'put ''NjIsInNwYW4iLDcpLExlKDYzKSxoZSgpKCksZGUoNjQsInAiLDgpLExlKDY1LCIgQnVpbGQgdGltZXN0YW1wOiAiKSxkZSg2Niwic3BhbiIsNyksTGUoNjcpLGhlKCkoKSxkZSg2OCwicCIsOCksTGUoNjksIiBBZGFwdGVyIHZlcnNpb246ICIpLGRlKDcwLCJzcGFuIiw3KSxMZSg3MSksaGUo''@;'; put 'put ''KSgpLGRlKDcyLCJwIiw4KSxMZSg3MywiIEhUVFA6ICIpLGRlKDc0LCJzcGFuIiw3KSxMZSg3NSksaGUoKSgpLGRlKDc2LCJwIiw4KSxMZSg3NywiIERDIEFkbWluIEdyb3VwOiAiKSxkZSg3OCwic3BhbiIsNyksTGUoNzkpLGhlKCkoKSxkZSg4MCwicCIsOCksTGUoODEsIiBBcHAgTG9jYXRp''@;'; put 'put ''b246ICIpLGRlKDgyLCJzcGFuIiw3KSxMZSg4MyksaGUoKSgpKCkoKSxkZSg4NCwiZGl2IikoODUsImg2Iiw2KSxMZSg4NiwiIExpY2VuY2UgZGV0YWlscyAiKSxHdCg4Nywic3BhbiIsNyksaGUoKSxkZSg4OCwicCIsOCksTGUoODksIiBWYWxpZCB1bnRpbDogIiksZGUoOTAsInNwYW4iLDcp''@;'; put 'put ''LExlKDkxKSxoZSgpKCksZGUoOTIsInAiLDgpLExlKDkzLCIgVXNlcnMgYWxsb3dlZDogIiksZGUoOTQsInNwYW4iLDcpLExlKDk1KSxoZSgpKCksZGUoOTYsInAiLDgpLExlKDk3LCIgU2l0ZSBJRHM6ICIpLGRlKDk4LCJzcGFuIiw3KSxMZSg5OSksaGUoKSgpLGRlKDEwMCwicCIsOCksTGUo''@;'; put 'put ''MTAxLCIgRnJlZSBUaWVyOiAiKSxkZSgxMDIsInNwYW4iLDcpLExlKDEwMyksaGUoKSgpLGd0KDEwNCxYX3QsNCwxLCJwIiwxMCkoMTA1LEpfdCw0LDEsInAiLDEwKSgxMDYsUV90LDQsMSwicCIsMTApKDEwNyxld3QsNCwxLCJwIiwxMCkoMTA4LHR3dCw0LDEsInAiLDEwKSgxMDksbnd0LDQs''@;'; put 'put ''MSwicCIsMTApKDExMCxyd3QsNCwxLCJwIiwxMCkoMTExLGl3dCw0LDEsInAiLDEwKSxkZSgxMTIsInAiLDgpLExlKDExMywiIFZpZXdib3hlczogIiksZGUoMTE0LCJzcGFuIiw3KSxMZSgxMTUpLGhlKCkoKSxkZSgxMTYsInAiLDgpLExlKDExNywiIEZpbGUgVXBsb2FkOiAiKSxkZSgxMTgs''@;'; put 'put ''InNwYW4iLDcpLExlKDExOSksaGUoKSgpLGRlKDEyMCwicCIsOCksTGUoMTIxLCIgRWRpdCByZWNvcmQ6ICIpLGRlKDEyMiwic3BhbiIsNyksTGUoMTIzKSxoZSgpKCksZGUoMTI0LCJwIiw4KSxMZSgxMjUsIiBBZGQgcmVjb3JkOiAiKSxkZSgxMjYsInNwYW4iLDcpLExlKDEyNyksaGUoKSgp''@;'; put 'put ''KCkoKSxHdCgxMjgsImhyIiwzKSxndCgxMjksb3d0LDE0LDIsIm5nLWNvbnRhaW5lciIsMTEpLGhlKCkoKSgpLGRlKDEzMCwiY2xyLW1vZGFsIiwxMiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVzcG9uc2VNb2RhbCx2KXx8KGgucmVzcG9uc2VN''@;'; put 'put ''b2RhbD12KSx2fSksZGUoMTMxLCJoMyIsMTMpLExlKDEzMiwiUmVzcG9uc2UiKSxoZSgpLGRlKDEzMywiZGl2IiwxNCksTGUoMTM0KSxoZSgpLGRlKDEzNSwiZGl2IiwxNSkoMTM2LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzcG9uc2VNb2RhbD0hMX0p''@;'; put 'put ''LExlKDEzNywiIE9rICIpLGhlKCkoKSgpKSwyJmQmJihmZSgxNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTSVRFKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1NDUEwpLGZl''@;'; put 'put ''KDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVENQSVBIT1NUTkFNRSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNWTE9ORyksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVu''@;'; put 'put ''dEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5NRU1TSVpFKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1BST0NFU1NNT0RFKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZv''@;'; put 'put ''LlNZU0hPU1ROQU1FKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1VTRVJJRCksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUSU5GT0xPTkcpLGZlKDQpLHdyKG51''@;'; put 'put ''bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTRU5DT0RJTkcpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpLGZlKDkpLHdyKGguYXBwSW5mby5hcHBWZXJzaW9uKSxmZSg0KSx3ciho''@;'; put 'put ''LmFwcEluZm8uYnVpbGRUaW1lc3RhbXApLGZlKDQpLHdyKGguYXBwSW5mby5hZGFwdGVyVmVyc2lvbiksZmUoNCksd3IoaC5odHRwPyJZRVMiOiJOTyIpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uRENfQURNSU5fR1JPVVApLGZlKDQp''@;'; put 'put ''LHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uQVBQX0xPQyksZmUoOCksd3IobnVsbD09aC5saWNlbmNlSW5mbz9udWxsOmgubGljZW5jZUluZm8udmFsaWRfdW50aWwpLGZlKDQpLHdyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJ''@;'; put 'put ''bmZvLnVzZXJzX2FsbG93ZWQpLGZlKDQpLHdyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnNpdGVfaWRfbXVsdGlwbGUpLGZlKDQpLHdyKG51bGwhPWgubGljZW5jZUluZm8mJmgubGljZW5jZUluZm8uZGVtbz8iWUVTIjoiTk8iKSxmZSgpLE1lKCJuZ0lmIixoLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jv''@;'; put 'put ''d3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1oLkluZmluaXR5KSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0IT09aC5JbmZpbml0eSksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8iWUVTIjoiTk8iKSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkPyJZRVMiOiJOTyIpLGZlKDQpLHdyKGgubGljZW5jZVN0''@;'; put 'put ''YXRlLnZhbHVlLmVkaXRSZWNvcmQ/IllFUyI6Ik5PIiksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkPyJZRVMiOiJOTyIpLGZlKDIpLE1lKCJuZ0lmIiwxPT09KG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uSVNBRE1JTikpLGZl''@;'; put 'put ''KCkscGkoImNsck1vZGFsT3BlbiIsaC5yZXNwb25zZU1vZGFsKSxmZSg0KSxEcigiICIsaC5yZXNwb25zZSwiICIpKX0sZGVwZW5kZW5jaWVzOltiYSxjMSxvdSxLdSxqMCxQMl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dO2xldCBsd3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKHN3dCksemNdfSl9fXJldHVybiBjfSkoKSxjd3Q9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGx3dCx6MCxSY119KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9u''@;'; put 'put ''IHV3dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBkd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmdyb3VwU2VhcmNoPSIiLEN0KGgu''@;'; put 'put ''Z3JvdXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBod3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJl''@;'; put 'put ''KCk7cmV0dXJuIG1pKGYuZ3JvdXBTZWFyY2gsaCl8fChmLmdyb3VwU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LHV3dCwxLDAsImNsci1pY29uIiwxMCkoNSxkd3QsMSww''@;'; put 'put ''LCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmdyb3VwU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGZ3''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5ncm91cE9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29u''@;'; put 'put ''IiwxNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7VHIoImFjdGl2ZSIsYS5HUk9VUFVSST09PWQuZ3JvdXBVcmkpLGZlKDMpLERyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBwd3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGZ3''@;'; put 'put ''dCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gZ3d0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9''@;'; put 'put ''ZnVuY3Rpb24gbXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI0KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI1KSg2LCJwIiwyNikoNywiYiIpLExlKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI1KSgxMSwiaSIpLExl''@;'; put 'put ''KDEyKSxoZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoOCksd3IoYS5ncm91cE5hbWUpLGZlKDQpLHdyKGEuZ3JvdXBEZXNjfHwibm8gZGVzY3JpcHRpb24iKX19ZnVuY3Rpb24gdnd0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBNZW1iZXJzIFByZXNlbnQi''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiBid3QoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzEpKDIsImIiKSxMZSgzLCJOQU1FIiksaGUoKSgpLGRlKDQsInRkIiwzMSkoNSwiYiIpLExlKDYsIkVNQUlMIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLExlKDksIkNSRUFURUQiKSxoZSgpKCks''@;'; put 'put ''ZGUoMTAsInRkIiwzMikoMTEsImIiKSxMZSgxMiwiVVBEQVRFRCIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiB5d3QoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzEpKDIsImIiKSxMZSgzLCJJRCIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxMZSg2LCJESVNQTEFZIE5BTUUiKSxo''@;'; put 'put ''ZSgpKCksZGUoNywidGQiLDMxKSg4LCJiIiksTGUoOSwiVVNFUiBOQU1FIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uIF93dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInRkIiwzMiksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzIpLExlKDQpLGhlKCksZGUoNSwidGQiLDMyKSxMZSg2KSxoZSgp''@;'; put 'put ''LGRlKDcsInRkIiwzMiksTGUoOCksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoMiksd3IoYS5NRU1CRVJOQU1FKSxmZSgyKSx3cihhLkVNQUlMKSxmZSgyKSx3cihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLHdyKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIHd3''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInRkIiwzMiksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzIpLExlKDQpLGhlKCksZGUoNSwidGQiLDMyKSxMZSg2KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihhLklEKSxmZSgyKSx3cihhLkRJU1BMQVlO''@;'; put 'put ''QU1FKSxmZSgyKSx3cihhLlVTRVJOQU1FKX19ZnVuY3Rpb24gQ3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDMzKSxndCgxLF93dCw5LDQsIm5nLWNvbnRhaW5lciIsNikoMix3d3QsNywzLCJuZy1jb250YWluZXIiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDQp''@;'; put 'put ''O01lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iKyhhLlVSSU1FTXx8YS5JRCkpLGZlKCksTWUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzanMpfX1mdW5jdGlv''@;'; put 'put ''biBTd3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSxndCgzLGJ3dCwxMywwLCJuZy1jb250YWluZXIiLDYpKDQseXd0LDEwLDAsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpLGRlKDUsInRib2R5IiksZ3QoNixDd3QsMywzLCJ0ciIsMzApLGhlKCko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDMpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlv''@;'; put 'put ''biBNd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyx2d3QsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNyksZ3QoNSxTd3QsNywzLCJ0YWJsZSIsMjgpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLERyKCJNRU1CRVJTICgiLGEuZ3Jv''@;'; put 'put ''dXBNZW1iZXJDb3VudCwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIHh3dChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gRXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLGZlKDIpLHdyKGEuTUVNQkVSTkFNRSl9''@;'; put 'put ''fWZ1bmN0aW9uIFR3dChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLExlKDUpLGhlKCkoKSgpKCksZGUoNiwidGJvZHkiKSxndCg3LEV3dCwzLDIsInRyIiwzMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoNSks''@;'; put 'put ''RHIoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksZmUoMiksTWUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gQXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLGd0KDMseHd0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIs''@;'; put 'put ''MjcpLGd0KDUsVHd0LDgsMiwidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSx3cihhLmdyb3VwTmFtZSksZmUoKSxNZSgibmdJZiIsMD09YS5ncm91cE1lbWJlckNvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24g''@;'; put 'put ''a3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxtd3QsMTMsMiwiZGl2IiwyMCksZGUoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikoNCwiZGl2IiwyMyksZ3QoNSxNd3QsNiwzLCJkaXYiLDYpKDYsQXd0LDYsMywiZGl2Iiw2KSxHdCg3LCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSg0KSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlh''@;'; put 'put ''KX19bGV0IHQ4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNl''@;'; put 'put ''bnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9QjAuWSx0''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgp''@;'; put 'put ''e0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksS24udXNl''@;'; put 'put ''cm5hdi5ncm91cExpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9S24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Lbi51c2VybmF2Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09S24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlz''@;'; put 'put ''Vml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFw''@;'; put 'put ''KGY9Pih7R1JPVVBVUkk6Zi5pZCxHUk9VUE5BTUU6Zi5uYW1lLEdST1VQREVTQzpmLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1oLEtuLnVzZXJuYXYuZ3JvdXBMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVs''@;'; put 'put ''bCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWEuYWRhcHRlclJlc3BvbnNlLmdyb3VwcyxLbi51c2VybmF2Lmdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHN9KSk6KHRoaXMuZ3JvdXBzPUtuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9''@;'; put 'put ''S24udXNlcm5hdi5ncm91cFNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK3RoaXMucGFyYW1VUkkrIi9tZW1iZXJzP2xpbWl0PTIwMDAiLHto''@;'; put 'put ''ZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPUpTT04ucGFyc2UoYSk7dGhpcy5sb2FkaW5nPSExO2xldCBoPWQuaXRlbXMubWFwKGY9Pih7TUVNQkVSTkFNRTpmLm5hbWUsTUVNQkVSSUQ6Zi5pZH0pKTt0aGlzLmdy''@;'; put 'put ''b3VwTWVtYmVycz1oLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1oLmxlbmd0aCx0aGlzLmdyb3VwVXJpPXRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7''@;'; put 'put ''Z3JvdXBpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGQ9Pnt0aGlzLmdyb3VwTWVtYmVycz1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx2b2lkIDAhPT1kLmFkYXB0ZXJSZXNwb25z''@;'; put 'put ''ZS5zYXNtZW1iZXJzWzBdJiYodGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5HUk9VUE5BTUUsdGhpcy5n''@;'; put 'put ''cm91cERlc2M9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5HUk9VUERFU0MsdGhpcy5ncm91cE5hbWV8fCh0aGlzLmdyb3VwTmFtZT10aGlzLnBhcmFtVVJJKSl9KSkpfWdyb3VwTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmdy''@;'; put 'put ''b3Vwcyx0aGlzLmdyb3VwU2VhcmNoLCJHUk9VUE5BTUUiKSxLbi51c2VybmF2Lmdyb3VwU2VhcmNoPXRoaXMuZ3JvdXBTZWFyY2h9Z3JvdXBPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJh''@;'; put 'put ''bVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLkdST1VQVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIithLkdS''@;'; put 'put ''T1VQVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWEuR1JPVVBVUkksdGhpcy5ncm91''@;'; put 'put ''cE5hbWU9YS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9YS5HUk9VUERFU0M7bGV0IHY9Zi5pdGVtcy5tYXAoTT0+KHtNRU1CRVJOQU1FOk0ubmFtZSxNRU1CRVJJRDpNLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPXYsdGhpcy5ncm91cE1lbWJlckNvdW50PXYubGVuZ3RofSk6dGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOmEuR1JPVVBVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWEuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9YS5HUk9VUE5BTUUsdGhpcy5ncm91cERl''@;'; put 'put ''c2M9YS5HUk9VUERFU0MsdGhpcy5ncm91cE1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGh9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKShHZShCcyksR2UoU3UpLEdlKExzKSxHZShmaCksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNl''@;'; put 'put ''YXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxb''@;'; put 'put ''MSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgR3JvdXBzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwi''@;'; put 'put ''a2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJj''@;'; put 'put ''bGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VycyJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwi''@;'; put 'put ''Y2FyZCIsImdyb3VwLWRhdGEiXSxbMSwidGFibGUiLCJncm91cC1pbmZvIl0sWzEsImxlZnQiXSxbMSwiZ3JvdXAtaW5mby10ZXh0Il0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUi''@;'; put 'put ''XSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMixod3QsNiwzLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwyKSgzLHB3dCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxnd3QsMywwLCJkaXYiLDUpKDYsa3d0LDgsMywiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsaC5ncm91cHMpLGZlKCksTWUoIm5nRm9yT2YiLGguZ3JvdXBz''@;'; put 'put ''KSxmZSgyKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLmdyb3VwTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMxLHFsLG5sLCRzLEVoLFBkLEhsLFoxLGk0LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9u''@;'; put 'put ''IER3dCgpe31mdW5jdGlvbiBhdGUoYyl7cmV0dXJuIG51bGw9PWM/RHd0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gbjhlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIFJ3dCgp''@;'; put 'put ''e3JldHVybltdfWZ1bmN0aW9uIHI4ZShjKXtyZXR1cm4gbnVsbD09Yz9Sd3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiBpOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gYThlKGMpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgUHd0PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIEh3dCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBWd3Q9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBCd3QoKXtyZXR1cm4g''@;'; put 'put ''QXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBvOGUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gZE4oYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9''@;'; put 'put ''bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gWXd0KGMsbCxhLGQsaCxmKXtmb3IodmFyIE0sdj0wLEQ9bC5sZW5ndGgsWj1mLmxlbmd0aDt2PFo7Kyt2KShNPWxbdl0pPyhNLl9fZGF0YV9fPWZbdl0sZFt2XT1NKTphW3ZdPW5ldyBkTihjLGZbdl0pO2Zvcig7''@;'; put 'put ''djxEOysrdikoTT1sW3ZdKSYmKGhbdl09TSl9ZnVuY3Rpb24gR3d0KGMsbCxhLGQsaCxmLHYpe3ZhciBNLEQsRWUsWj1uZXcgTWFwLHJlPWwubGVuZ3RoLGNlPWYubGVuZ3RoLGJlPW5ldyBBcnJheShyZSk7Zm9yKE09MDtNPHJlOysrTSkoRD1sW01dKSYmKGJlW01dPUVlPXYuY2FsbChELEQu''@;'; put 'put ''X19kYXRhX18sTSxsKSsiIixaLmhhcyhFZSk/aFtNXT1EOlouc2V0KEVlLEQpKTtmb3IoTT0wO008Y2U7KytNKUVlPXYuY2FsbChjLGZbTV0sTSxmKSsiIiwoRD1aLmdldChFZSkpPyhkW01dPUQsRC5fX2RhdGFfXz1mW01dLFouZGVsZXRlKEVlKSk6YVtNXT1uZXcgZE4oYyxmW01dKTtmb3Io''@;'; put 'put ''TT0wO008cmU7KytNKShEPWxbTV0pJiZaLmdldChiZVtNXSk9PT1EJiYoaFtNXT1EKX1mdW5jdGlvbiAkd3QoYyl7cmV0dXJuIGMuX19kYXRhX199ZnVuY3Rpb24gcXd0KGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBu''@;'; put 'put ''Q3QoYyxsKXtyZXR1cm4gYzxsPy0xOmM+bD8xOmM+PWw/MDpOYU59ZE4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkTixhcHBlbmRDaGlsZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxs''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3JBbGwoYyl9fTt2YXIgb3RlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBzOGU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOm90ZSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9Y''@;'; put 'put ''TUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIGhOKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLHM4ZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eShsKT97c3BhY2U6czhlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gY0N0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiB1Q3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNl''@;'; put 'put ''LGMubG9jYWwpfX1mdW5jdGlvbiBkQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBoQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gZkN0KGMsbCl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiBwQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gbDhlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5k''@;'; put 'put ''b2N1bWVudCYmY3x8Yy5kZWZhdWx0Vmlld31mdW5jdGlvbiBtQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gdkN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rp''@;'; put 'put ''b24gYkN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIEV3KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0''@;'; put 'put ''UHJvcGVydHlWYWx1ZShsKXx8bDhlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIF9DdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gd0N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1s''@;'; put 'put ''fX1mdW5jdGlvbiBDQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gYzhlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBzdGUoYyl7''@;'; put 'put ''cmV0dXJuIGMuY2xhc3NMaXN0fHxuZXcgdThlKGMpfWZ1bmN0aW9uIHU4ZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9YzhlKGMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gZDhlKGMsbCl7Zm9yKHZhciBhPXN0ZShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEu''@;'; put 'put ''YWRkKGxbZF0pfWZ1bmN0aW9uIGg4ZShjLGwpe2Zvcih2YXIgYT1zdGUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiBNQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZDhlKHRoaXMsYyl9fWZ1bmN0aW9uIHhDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXto''@;'; put 'put ''OGUodGhpcyxjKX19ZnVuY3Rpb24gRUN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP2Q4ZTpoOGUpKHRoaXMsYyl9fWZ1bmN0aW9uIEFDdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24ga0N0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMu''@;'; put 'put ''dGV4dENvbnRlbnQ9Y319ZnVuY3Rpb24gREN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIFJDdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIExDdChjKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmlubmVySFRNTD1jfX1mdW5jdGlvbiBPQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIEZDdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRD''@;'; put 'put ''aGlsZCh0aGlzKX1mdW5jdGlvbiBOQ3QoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBCQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3Vt''@;'; put 'put ''ZW50LGE9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGE9PT1vdGUmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW90ZT9sLmNyZWF0ZUVsZW1lbnQoYyk6bC5jcmVhdGVFbGVtZW50TlMoYSxjKX19ZnVuY3Rpb24gakN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIGY4ZShjKXt2YXIgbD1oTihjKTtyZXR1cm4obC5sb2NhbD9qQ3Q6QkN0KShsKX1mdW5jdGlvbiBVQ3QoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBXQ3QoKXt2YXIgYz10aGlzLnBhcmVudE5v''@;'; put 'put ''ZGU7YyYmYy5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBHQ3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMSksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uICRDdCgpe3ZhciBjPXRoaXMuY2xvbmVOb2Rl''@;'; put 'put ''KCEwKSxsPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gUUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMuX19vbjtpZihsKXtmb3IodmFyIGYsYT0wLGQ9LTEsaD1sLmxlbmd0aDthPGg7KythKWY9''@;'; put 'put ''bFthXSxjLnR5cGUmJmYudHlwZSE9PWMudHlwZXx8Zi5uYW1lIT09Yy5uYW1lP2xbKytkXT1mOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLnR5cGUsZi5saXN0ZW5lcixmLm9wdGlvbnMpOysrZD9sLmxlbmd0aD1kOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBlU3QoYyxsLGEpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3ZhciBoLGQ9dGhpcy5fX29uLGY9ZnVuY3Rpb24gWEN0KGMpe3JldHVybiBmdW5jdGlvbihsKXtjLmNhbGwodGhpcyxsLHRoaXMuX19kYXRhX18pfX0obCk7aWYoZClmb3IodmFyIHY9MCxNPWQubGVuZ3RoO3Y8TTsrK3YpaWYoKGg9ZFt2XSkudHlwZT09PWMudHlw''@;'; put 'put ''ZSYmaC5uYW1lPT09Yy5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXIsaC5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXI9ZixoLm9wdGlvbnM9YSksdm9pZChoLnZhbHVlPWwpO3RoaXMuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihjLnR5cGUsZixhKSxoPXt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSx2YWx1ZTpsLGxpc3RlbmVyOmYsb3B0aW9uczphfSxkP2QucHVzaChoKTp0aGlzLl9fb249W2hdfX1mdW5jdGlvbiBwOGUoYyxsLGEpe3ZhciBkPWw4ZShjKSxoPWQuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIGg/aD1uZXcgaChsLGEpOihoPWQuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYT8oaC5pbml0RXZlbnQobCxhLmJ1YmJsZXMsYS5jYW5jZWxhYmxlKSxoLmRldGFpbD1hLmRldGFpbCk6aC5pbml0RXZlbnQobCwhMSwhMSkpLGMuZGlzcGF0Y2hFdmVudChoKX1mdW5jdGlv''@;'; put 'put ''biBuU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcDhlKHRoaXMsYyxsKX19ZnVuY3Rpb24gclN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHA4ZSh0aGlzLGMsbC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX11OGUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYyl7dGhp''@;'; put 'put ''cy5fbmFtZXMuaW5kZXhPZihjKTwwJiYodGhpcy5fbmFtZXMucHVzaChjKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGw9dGhpcy5fbmFtZXMuaW5kZXhPZihjKTtsPj0wJiYodGhpcy5fbmFt''@;'; put 'put ''ZXMuc3BsaWNlKGwsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoYyk+PTB9fTt2YXIgbHRlPVtudWxsXTtmdW5jdGlvbiBpZChjLGwpe3RoaXMu''@;'; put 'put ''X2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bH1mdW5jdGlvbiBnOGUoKXtyZXR1cm4gbmV3IGlkKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sbHRlKX1pZC5wcm90b3R5cGU9ZzhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aWQsc2VsZWN0OmZ1bmN0aW9uIEl3dChjKXsiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgYyYmKGM9YXRlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELFosZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPW5ldyBBcnJheSh2KSxyZT0wO3JlPHY7KytyZSkoRD1mW3JlXSkmJihaPWMu''@;'; put 'put ''Y2FsbChELEQuX19kYXRhX18scmUsZikpJiYoIl9fZGF0YV9fImluIEQmJihaLl9fZGF0YV9fPUQuX19kYXRhX18pLE1bcmVdPVopO3JldHVybiBuZXcgaWQoZCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIE93dChjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9u''@;'; put 'put ''IEx3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbjhlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOnI4ZShjKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1bXSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgRCx2PWxbZl0sTT12Lmxlbmd0aCxaPTA7WjxN''@;'; put 'put ''OysrWikoRD12W1pdKSYmKGQucHVzaChjLmNhbGwoRCxELl9fZGF0YV9fLFosdikpLGgucHVzaChEKSk7cmV0dXJuIG5ldyBpZChkLGgpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbiBOd3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PWM/SHd0OmZ1bmN0aW9uIEZ3dChjKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gUHd0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6YThlKGMpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uIHp3dChjKXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09Yz9Cd3Q6ZnVuY3Rpb24gand0KGMpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBWd3QuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzphOGUoYykpKX0sZmlsdGVyOmZ1bmN0aW9uIFV3dChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9aThlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5n''@;'; put 'put ''dGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxaPTA7Wjx2OysrWikoRD1mW1pdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxaLGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyBpZChkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1''@;'; put 'put ''bmN0aW9uIEt3dChjLGwpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsJHd0KTt2YXIgYT1sP0d3dDpZd3QsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBXd3QoYyl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGN9fShjKSk7Zm9yKHZhciBmPWgubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpLFo9MDtaPGY7KytaKXt2YXIgcmU9ZFtaXSxjZT1oW1pdLGJlPWNlLmxlbmd0aCxFZT1xd3QoYy5jYWxsKHJlLHJlJiZyZS5fX2RhdGFfXyxa''@;'; put 'put ''LGQpKSxCZT1FZS5sZW5ndGgscWU9TVtaXT1uZXcgQXJyYXkoQmUpLHJ0PXZbWl09bmV3IEFycmF5KEJlKTthKHJlLGNlLHFlLHJ0LERbWl09bmV3IEFycmF5KGJlKSxFZSxsKTtmb3IodmFyIHZuLENuLGR0PTAsSnQ9MDtkdDxCZTsrK2R0KWlmKHZuPXFlW2R0XSl7Zm9yKGR0Pj1KdCYmKEp0''@;'; put 'put ''PWR0KzEpOyEoQ249cnRbSnRdKSYmKytKdDxCZTspO3ZuLl9uZXh0PUNufHxudWxsfX1yZXR1cm4odj1uZXcgaWQodixkKSkuX2VudGVyPU0sdi5fZXhpdD1ELHZ9LGVudGVyOmZ1bmN0aW9uIFp3dCgpe3JldHVybiBuZXcgaWQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobzhlKSx0''@;'; put 'put ''aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBYd3QoKXtyZXR1cm4gbmV3IGlkKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAobzhlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBKd3QoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTty''@;'; put 'put ''ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6''@;'; put 'put ''ZnVuY3Rpb24gUXd0KGMpe2Zvcih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCx2PU1hdGgubWluKGgsZC5sZW5ndGgpLE09bmV3IEFycmF5KGgpLEQ9MDtEPHY7KytEKWZvcih2YXIgRWUsWj1hW0RdLHJlPWRb''@;'; put 'put ''RF0sY2U9Wi5sZW5ndGgsYmU9TVtEXT1uZXcgQXJyYXkoY2UpLEJlPTA7QmU8Y2U7KytCZSkoRWU9WltCZV18fHJlW0JlXSkmJihiZVtCZV09RWUpO2Zvcig7RDxoOysrRClNW0RdPWFbRF07cmV0dXJuIG5ldyBpZChNLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gb1N0KCl7''@;'; put 'put ''cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uIGVDdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIHYsZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykodj1kW2hdKSYmKGYmJjRedi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv''@;'; put 'put ''bihmKSYmZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh2LGYpLGY9dik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gdEN0KGMpe2Z1bmN0aW9uIGwoY2UsYmUpe3JldHVybiBjZSYmYmU/YyhjZS5fX2RhdGFfXyxiZS5fX2RhdGFfXyk6IWNlLSFiZX1jfHwoYz1uQ3QpO2Zvcih2YXIgYT10''@;'; put 'put ''aGlzLl9ncm91cHMsZD1hLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBaLHY9YVtmXSxNPXYubGVuZ3RoLEQ9aFtmXT1uZXcgQXJyYXkoTSkscmU9MDtyZTxNOysrcmUpKFo9dltyZV0pJiYoRFtyZV09Wik7RC5zb3J0KGwpfXJldHVybiBuZXcgaWQoaCx0aGlz''@;'; put 'put ''Ll9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIHJDdCgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gaUN0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6''@;'; put 'put ''ZnVuY3Rpb24gYUN0KCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciB2PWRbaF07aWYodilyZXR1cm4gdn1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBvQ3QoKXtsZXQgYz0w''@;'; put 'put ''O2Zvcihjb25zdCBsIG9mIHRoaXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBzQ3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gbEN0KGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIE0saD1sW2FdLGY9MCx2''@;'; put 'put ''PWgubGVuZ3RoO2Y8djsrK2YpKE09aFtmXSkmJmMuY2FsbChNLE0uX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBnQ3QoYyxsKXt2YXIgYT1oTihjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0''@;'; put 'put ''cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/dUN0OmNDdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP3BDdDpmQ3Q6YS5sb2NhbD9oQ3Q6ZEN0KShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24geUN0''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9tQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YkN0OnZDdCkoYyxsLGE/PyIiKSk6RXcodGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIFNDdChjLGwpe3JldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjE/dGhpcy5lYWNoKChudWxsPT1sP19DdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9DQ3Q6d0N0KShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBUQ3QoYyxsKXt2YXIgYT1jOGUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9c3RlKHRoaXMu''@;'; put 'put ''bm9kZSgpKSxoPS0xLGY9YS5sZW5ndGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP0VDdDpsP01DdDp4Q3QpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIElDdChjKXtyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9BQ3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0RDdDprQ3QpKGMpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBQQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/UkN0OigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYz9PQ3Q6TEN0KShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBIQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKEZDdCl9LGxvd2VyOmZ1bmN0aW9uIFZDdCgpe3JldHVybiB0aGlzLmVhY2goTkN0KX0sYXBwZW5kOmZ1bmN0aW9uIHpDdChjKXt2''@;'; put 'put ''YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmY4ZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uIFpDdChjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M6ZjhlKGMpLGQ9bnVsbD09bD9VQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDphdGUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxs''@;'; put 'put ''KX0pfSxyZW1vdmU6ZnVuY3Rpb24gWUN0KCl7cmV0dXJuIHRoaXMuZWFjaChXQ3QpfSxjbG9uZTpmdW5jdGlvbiBLQ3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KGM/JEN0OkdDdCl9LGRhdHVtOmZ1bmN0aW9uIHFDdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJf''@;'; put 'put ''X2RhdGFfXyIsYyk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIHRTdChjLGwsYSl7dmFyIGgsdixkPWZ1bmN0aW9uIEpDdChjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGwpe3ZhciBhPSIiLGQ9bC5pbmRleE9mKCIuIik7cmV0dXJuIGQ+''@;'; put 'put ''PTAmJihhPWwuc2xpY2UoZCsxKSxsPWwuc2xpY2UoMCxkKSkse3R5cGU6bCxuYW1lOmF9fSl9KGMrIiIpLGY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoTT1sP2VTdDpRQ3QsaD0wO2g8ZjsrK2gpdGhpcy5lYWNoKE0oZFtoXSxsLGEpKTtyZXR1cm4gdGhpc312YXIg''@;'; put 'put ''TT10aGlzLm5vZGUoKS5fX29uO2lmKE0pZm9yKHZhciByZSxEPTAsWj1NLmxlbmd0aDtEPFo7KytEKWZvcihoPTAscmU9TVtEXTtoPGY7KytoKWlmKCh2PWRbaF0pLnR5cGU9PT1yZS50eXBlJiZ2Lm5hbWU9PT1yZS5uYW1lKXJldHVybiByZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gaVN0''@;'; put 'put ''KGMsbCl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/clN0Om5TdCkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKmFTdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIHYsZD1jW2xdLGg9MCxmPWQu''@;'; put 'put ''bGVuZ3RoO2g8ZjsrK2gpKHY9ZFtoXSkmJih5aWVsZCB2KX19O2NvbnN0IHE5PWc4ZTtmdW5jdGlvbiBjdGUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBpZChbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBpZChb''@;'; put 'put ''bjhlKGMpXSxsdGUpfWZ1bmN0aW9uIHdzKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgaWQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGMpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBpZChbW2NdXSxsdGUpfXZhciBzU3Q9e3ZhbHVlOigpPT57fX07ZnVuY3Rp''@;'; put 'put ''b24gbThlKCl7Zm9yKHZhciBkLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IGZOKGEp''@;'; put 'put ''fWZ1bmN0aW9uIGZOKGMpe3RoaXMuXz1jfWZ1bmN0aW9uIGNTdChjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIHY4ZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlm''@;'; put 'put ''KGNbZF0ubmFtZT09PWwpe2NbZF09c1N0LGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31mTi5wcm90b3R5cGU9bThlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24o''@;'; put 'put ''YyxsKXt2YXIgaCxhPXRoaXMuXyxkPWZ1bmN0aW9uIGxTdChjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093''@;'; put 'put ''blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsdj1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitsKTtmb3IoOysrZjx2OylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT12OGUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT12OGUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8djsp''@;'; put 'put ''aWYoKGg9KGM9ZFtmXSkudHlwZSkmJihoPWNTdChhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBmTihjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tj''@;'; put 'put ''XSkubGVuZ3RoO2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8''@;'; put 'put ''ZjsrK2gpZFtoXS52YWx1ZS5hcHBseShsLGEpfX07Y29uc3QgdXRlPW04ZTt2YXIgcE4sQUEsVHc9MCxFQT0wLFRBPTAsYjhlPTFlMyxnTj0wLFg5PTAsbU49MCxrQT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx5OGU9Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oYyl7c2V0VGltZW91dChjLDE3KX07ZnVuY3Rpb24gZHRlKCl7cmV0dXJuIFg5fHwoeThlKHVTdCksWDk9a0Eu''@;'; put 'put ''bm93KCkrbU4pfWZ1bmN0aW9uIHVTdCgpe1g5PTB9ZnVuY3Rpb24gdk4oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIF84ZShjLGwsYSl7dmFyIGQ9bmV3IHZOO3JldHVybiBkLnJlc3RhcnQoYyxsLGEpLGR9ZnVuY3Rpb24gdzhlKCl7WDk9KGdOPWtB''@;'; put 'put ''Lm5vdygpKSttTixUdz1FQT0wO3RyeXshZnVuY3Rpb24gZFN0KCl7ZHRlKCksKytUdztmb3IodmFyIGwsYz1wTjtjOykobD1YOS1jLl90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZvaWQgMCxsKSxjPWMuX25leHQ7LS1Ud30oKX1maW5hbGx5e1R3PTAsZnVuY3Rpb24gZlN0KCl7Zm9yKHZhciBj''@;'; put 'put ''LGEsbD1wTixkPTEvMDtsOylsLl9jYWxsPyhkPmwuX3RpbWUmJihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQsbC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6cE49YSk7QUE9YyxodGUoZCl9KCksWDk9MH19ZnVuY3Rpb24gaFN0KCl7dmFyIGM9a0Eubm93KCksbD1jLWdO''@;'; put 'put ''O2w+YjhlJiYobU4tPWwsZ049Yyl9ZnVuY3Rpb24gaHRlKGMpe1R3fHwoRUEmJihFQT1jbGVhclRpbWVvdXQoRUEpKSxjLVg5PjI0PyhjPDEvMCYmKEVBPXNldFRpbWVvdXQodzhlLGMta0Eubm93KCktbU4pKSxUQSYmKFRBPWNsZWFySW50ZXJ2YWwoVEEpKSk6KFRBfHwoZ049a0Eubm93KCks''@;'; put 'put ''VEE9c2V0SW50ZXJ2YWwoaFN0LGI4ZSkpLFR3PTEseThlKHc4ZSkpKX1mdW5jdGlvbiBiTihjLGwsYSl7dmFyIGQ9bmV3IHZOO3JldHVybiBkLnJlc3RhcnQoaD0+e2Quc3RvcCgpLGMoaCtsKX0sbD1udWxsPT1sPzA6K2wsYSksZH12Ti5wcm90b3R5cGU9XzhlLnByb3RvdHlwZT17Y29uc3Ry''@;'; put 'put ''dWN0b3I6dk4scmVzdGFydDpmdW5jdGlvbihjLGwsYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTthPShudWxsPT1hP2R0ZSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmQUEhPT10aGlz''@;'; put 'put ''JiYoQUE/QUEuX25leHQ9dGhpczpwTj10aGlzLEFBPXRoaXMpLHRoaXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsaHRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGh0ZSgpKX19O3ZhciBwU3Q9dXRlKCJzdGFydCIsImVuZCIs''@;'; put 'put ''ImNhbmNlbCIsImludGVycnVwdCIpLGdTdD1bXSxDOGU9MCxwdGU9Mix5Tj0zLGd0ZT01LF9OPTY7ZnVuY3Rpb24gd04oYyxsLGEsZCxoLGYpe3ZhciB2PWMuX190cmFuc2l0aW9uO2lmKHYpe2lmKGEgaW4gdilyZXR1cm59ZWxzZSBjLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24gbVN0KGMs''@;'; put 'put ''bCxhKXt2YXIgaCxkPWMuX190cmFuc2l0aW9uO2Z1bmN0aW9uIHYoWil7dmFyIHJlLGNlLGJlLEVlO2lmKDEhPT1hLnN0YXRlKXJldHVybiBEKCk7Zm9yKHJlIGluIGQpaWYoKEVlPWRbcmVdKS5uYW1lPT09YS5uYW1lKXtpZihFZS5zdGF0ZT09PXlOKXJldHVybiBiTih2KTs0PT09RWUuc3Rh''@;'; put 'put ''dGU/KEVlLnN0YXRlPV9OLEVlLnRpbWVyLnN0b3AoKSxFZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLGMsYy5fX2RhdGFfXyxFZS5pbmRleCxFZS5ncm91cCksZGVsZXRlIGRbcmVdKTorcmU8bCYmKEVlLnN0YXRlPV9OLEVlLnRpbWVyLnN0b3AoKSxFZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2Rh''@;'; put 'put ''dGFfXyxFZS5pbmRleCxFZS5ncm91cCksZGVsZXRlIGRbcmVdKX1pZihiTihmdW5jdGlvbigpe2Euc3RhdGU9PT15TiYmKGEuc3RhdGU9NCxhLnRpbWVyLnJlc3RhcnQoTSxhLmRlbGF5LGEudGltZSksTShaKSl9KSxhLnN0YXRlPXB0ZSxhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18s''@;'; put 'put ''YS5pbmRleCxhLmdyb3VwKSxhLnN0YXRlPT09cHRlKXtmb3IoYS5zdGF0ZT15TixoPW5ldyBBcnJheShiZT1hLnR3ZWVuLmxlbmd0aCkscmU9MCxjZT0tMTtyZTxiZTsrK3JlKShFZT1hLnR3ZWVuW3JlXS52YWx1ZS5jYWxsKGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApKSYmKGhbKytj''@;'; put 'put ''ZV09RWUpO2gubGVuZ3RoPWNlKzF9fWZ1bmN0aW9uIE0oWil7Zm9yKHZhciByZT1aPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxaL2EuZHVyYXRpb24pOihhLnRpbWVyLnJlc3RhcnQoRCksYS5zdGF0ZT1ndGUsMSksY2U9LTEsYmU9aC5sZW5ndGg7KytjZTxiZTspaFtjZV0uY2FsbChj''@;'; put 'put ''LHJlKTthLnN0YXRlPT09Z3RlJiYoYS5vbi5jYWxsKCJlbmQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLEQoKSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgWiBpbiBhLnN0YXRlPV9OLGEudGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlv''@;'; put 'put ''bn1kW2xdPWEsYS50aW1lcj1fOGUoZnVuY3Rpb24gZihaKXthLnN0YXRlPTEsYS50aW1lci5yZXN0YXJ0KHYsYS5kZWxheSxhLnRpbWUpLGEuZGVsYXk8PVomJnYoWi1hLmRlbGF5KX0sMCxhLnRpbWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246cFN0LHR3ZWVuOmdTdCx0aW1l''@;'; put 'put ''OmYudGltZSxkZWxheTpmLmRlbGF5LGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpDOGV9KX1mdW5jdGlvbiBtdGUoYyxsKXt2YXIgYT1DMyhjLGwpO2lmKGEuc3RhdGU+QzhlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1''@;'; put 'put ''bGVkIik7cmV0dXJuIGF9ZnVuY3Rpb24gczQoYyxsKXt2YXIgYT1DMyhjLGwpO2lmKGEuc3RhdGU+eU4pdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGF9ZnVuY3Rpb24gQzMoYyxsKXt2YXIgYT1jLl9fdHJhbnNpdGlvbjtpZighYXx8IShhPWFb''@;'; put 'put ''bF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gYX1mdW5jdGlvbiBDTihjLGwpe3ZhciBkLGgsdixhPWMuX190cmFuc2l0aW9uLGY9ITA7aWYoYSl7Zm9yKHYgaW4gbD1udWxsPT1sP251bGw6bCsiIixhKShkPWFbdl0pLm5hbWU9PT1sPyhoPWQuc3Rh''@;'; put 'put ''dGU+cHRlJiZkLnN0YXRlPGd0ZSxkLnN0YXRlPV9OLGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW3ZdKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gbDQo''@;'; put 'put ''YyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIFNOLE04ZT0xODAvTWF0aC5QSSx2dGU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24geDhlKGMsbCxhLGQs''@;'; put 'put ''aCxmKXt2YXIgdixNLEQ7cmV0dXJuKHY9TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPXYsbC89diksKEQ9YyphK2wqZCkmJihhLT1jKkQsZC09bCpEKSwoTT1NYXRoLnNxcnQoYSphK2QqZCkpJiYoYS89TSxkLz1NLEQvPU0pLGMqZDxsKmEmJihjPS1jLGw9LWwsRD0tRCx2PS12KSx7dHJhbnNs''@;'; put 'put ''YXRlWDpoLHRyYW5zbGF0ZVk6Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKk04ZSxza2V3WDpNYXRoLmF0YW4oRCkqTThlLHNjYWxlWDp2LHNjYWxlWTpNfX1mdW5jdGlvbiBFOGUoYyxsLGEsZCl7ZnVuY3Rpb24gaChaKXtyZXR1cm4gWi5sZW5ndGg/Wi5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKFoscmUpe3ZhciBjZT1bXSxiZT1bXTtyZXR1cm4gWj1jKFopLHJlPWMocmUpLGZ1bmN0aW9uIGYoWixyZSxjZSxiZSxFZSxCZSl7aWYoWiE9PWNlfHxyZSE9PWJlKXt2YXIgcWU9RWUucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxsLG51bGwsYSk7QmUucHVzaCh7aTpxZS00LHg6bDQo''@;'; put 'put ''WixjZSl9LHtpOnFlLTIseDpsNChyZSxiZSl9KX1lbHNlKGNlfHxiZSkmJkVlLnB1c2goInRyYW5zbGF0ZSgiK2NlK2wrYmUrYSl9KFoudHJhbnNsYXRlWCxaLnRyYW5zbGF0ZVkscmUudHJhbnNsYXRlWCxyZS50cmFuc2xhdGVZLGNlLGJlKSxmdW5jdGlvbiB2KFoscmUsY2UsYmUpe1ohPT1y''@;'; put 'put ''ZT8oWi1yZT4xODA/cmUrPTM2MDpyZS1aPjE4MCYmKForPTM2MCksYmUucHVzaCh7aTpjZS5wdXNoKGgoY2UpKyJyb3RhdGUoIixudWxsLGQpLTIseDpsNChaLHJlKX0pKTpyZSYmY2UucHVzaChoKGNlKSsicm90YXRlKCIrcmUrZCl9KFoucm90YXRlLHJlLnJvdGF0ZSxjZSxiZSksZnVuY3Rp''@;'; put 'put ''b24gTShaLHJlLGNlLGJlKXtaIT09cmU/YmUucHVzaCh7aTpjZS5wdXNoKGgoY2UpKyJza2V3WCgiLG51bGwsZCktMix4Omw0KFoscmUpfSk6cmUmJmNlLnB1c2goaChjZSkrInNrZXdYKCIrcmUrZCl9KFouc2tld1gscmUuc2tld1gsY2UsYmUpLGZ1bmN0aW9uIEQoWixyZSxjZSxiZSxFZSxC''@;'; put 'put ''ZSl7aWYoWiE9PWNlfHxyZSE9PWJlKXt2YXIgcWU9RWUucHVzaChoKEVlKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7QmUucHVzaCh7aTpxZS00LHg6bDQoWixjZSl9LHtpOnFlLTIseDpsNChyZSxiZSl9KX1lbHNlKDEhPT1jZXx8MSE9PWJlKSYmRWUucHVzaChoKEVlKSsic2NhbGUo''@;'; put 'put ''IitjZSsiLCIrYmUrIikiKX0oWi5zY2FsZVgsWi5zY2FsZVkscmUuc2NhbGVYLHJlLnNjYWxlWSxjZSxiZSksWj1yZT1udWxsLGZ1bmN0aW9uKEVlKXtmb3IodmFyIHJ0LEJlPS0xLHFlPWJlLmxlbmd0aDsrK0JlPHFlOyljZVsocnQ9YmVbQmVdKS5pXT1ydC54KEVlKTtyZXR1cm4gY2Uuam9p''@;'; put 'put ''bigiIil9fX12YXIgX1N0PUU4ZShmdW5jdGlvbiBiU3QoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P3Z0ZTp4OGUobC5hLGwuYixsLmMsbC5kLGwuZSxsLmYpfSwi''@;'; put 'put ''cHgsICIsInB4KSIsImRlZykiKSxUOGU9RThlKGZ1bmN0aW9uIHlTdChjKXtyZXR1cm4gbnVsbCE9YyYmKFNOfHwoU049ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksU04uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGMpLGM9U04u''@;'; put 'put ''dHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/eDhlKChjPWMubWF0cml4KS5hLGMuYixjLmMsYy5kLGMuZSxjLmYpOnZ0ZX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiB3U3QoYyxsKXt2YXIgYSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXM0KHRoaXMsYyksZj1oLnR3ZWVuO2lm''@;'; put 'put ''KGYhPT1hKWZvcih2YXIgdj0wLE09KGQ9YT1mKS5sZW5ndGg7djxNOysrdilpZihkW3ZdLm5hbWU9PT1sKXsoZD1kLnNsaWNlKCkpLnNwbGljZSh2LDEpO2JyZWFrfWgudHdlZW49ZH19ZnVuY3Rpb24gQ1N0KGMsbCxhKXt2YXIgZCxoO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1zNCh0aGlzLGMpLHY9Zi50d2VlbjtpZih2IT09ZCl7aD0oZD12KS5zbGljZSgpO2Zvcih2YXIgTT17bmFtZTpsLHZhbHVlOmF9LEQ9MCxaPWgubGVuZ3RoO0Q8WjsrK0QpaWYoaFtEXS5uYW1lPT09bCl7aFtEXT1NO2JyZWFrfUQ9PT1a''@;'; put 'put ''JiZoLnB1c2goTSl9Zi50d2Vlbj1ofX1mdW5jdGlvbiBidGUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1zNCh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0''@;'; put 'put ''dXJuIEMzKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIHl0ZShjLGwsYSl7Yy5wcm90b3R5cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0cnVjdG9yPWN9ZnVuY3Rpb24gQThlKGMsbCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtkXT1sW2RdO3JldHVy''@;'; put 'put ''biBhfWZ1bmN0aW9uIERBKCl7fXZhciBNTj0xLy43LEF3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixSQT0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsYzQ9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMq''@;'; put 'put ''IixNU3Q9L14jKFswLTlhLWZdezMsOH0pJC8seFN0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke0F3fSwke0F3fSwke0F3fVxcKSRgKSxFU3Q9bmV3IFJlZ0V4cChgXnJnYlxcKCR7YzR9LCR7YzR9LCR7YzR9XFwpJGApLFRTdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7QXd9LCR7QXd9LCR7QXd9LCR7''@;'; put 'put ''UkF9XFwpJGApLEFTdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7YzR9LCR7YzR9LCR7YzR9LCR7UkF9XFwpJGApLGtTdD1uZXcgUmVnRXhwKGBeaHNsXFwoJHtSQX0sJHtjNH0sJHtjNH1cXCkkYCksRFN0PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtSQX0sJHtjNH0sJHtjNH0sJHtSQX1cXCkkYCks''@;'; put 'put ''azhlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJs''@;'; put 'put ''dWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNy''@;'; put 'put ''aW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2''@;'; put 'put ''NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5''@;'; put 'put ''NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0''@;'; put 'put ''MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55''@;'; put 'put ''ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMz''@;'; put 'put ''NjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4''@;'; put 'put ''MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1''@;'; put 'put ''ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIx''@;'; put 'put ''MTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkx''@;'; put 'put ''MixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2''@;'; put 'put ''NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxw''@;'; put 'put ''aW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQx''@;'; put 'put ''Njg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25v''@;'; put 'put ''dzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3Nzcy''@;'; put 'put ''MTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIEQ4ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEk4ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEo5KGMp''@;'; put 'put ''e3ZhciBsLGE7cmV0dXJuIGM9KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPU1TdC5leGVjKGMpKT8oYT1sWzFdLmxlbmd0aCxsPXBhcnNlSW50KGxbMV0sMTYpLDY9PT1hP1I4ZShsKTozPT09YT9uZXcgUWQobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgxNSZsKTw8NHwx''@;'; put 'put ''NSZsLDEpOjg9PT1hP3hOKGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZsKS8yNTUpOjQ9PT1hP3hOKGw+PjEyJjE1fGw+PjgmMjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9eFN0LmV4ZWMoYykpP25ldyBR''@;'; put 'put ''ZChsWzFdLGxbMl0sbFszXSwxKToobD1FU3QuZXhlYyhjKSk/bmV3IFFkKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLDEpOihsPVRTdC5leGVjKGMpKT94TihsWzFdLGxbMl0sbFszXSxsWzRdKToobD1BU3QuZXhlYyhjKSk/eE4oMjU1KmxbMV0vMTAwLDI1NSpsWzJd''@;'; put 'put ''LzEwMCwyNTUqbFszXS8xMDAsbFs0XSk6KGw9a1N0LmV4ZWMoYykpP1A4ZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLDEpOihsPURTdC5leGVjKGMpKT9QOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCxsWzRdKTprOGUuaGFzT3duUHJvcGVydHkoYyk/UjhlKGs4ZVtjXSk6InRyYW5zcGFyZW50''@;'; put 'put ''Ij09PWM/bmV3IFFkKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gUjhlKGMpe3JldHVybiBuZXcgUWQoYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLDEpfWZ1bmN0aW9uIHhOKGMsbCxhLGQpe3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgUWQoYyxsLGEsZCl9ZnVuY3Rpb24gRU4o''@;'; put 'put ''YyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIExTdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERBfHwoYz1KOShjKSksYz9uZXcgUWQoKGM9Yy5yZ2IoKSkucixjLmcsYy5iLGMub3BhY2l0eSk6bmV3IFFkfShjKTpuZXcgUWQoYyxsLGEsZD8/MSl9ZnVuY3Rp''@;'; put 'put ''b24gUWQoYyxsLGEsZCl7dGhpcy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIEw4ZSgpe3JldHVybmAjJHtldih0aGlzLnIpfSR7ZXYodGhpcy5nKX0ke2V2KHRoaXMuYil9YH1mdW5jdGlvbiBPOGUoKXtjb25zdCBjPVROKHRoaXMub3BhY2l0eSk7''@;'; put 'put ''cmV0dXJuYCR7MT09PWM/InJnYigiOiJyZ2JhKCJ9JHtROSh0aGlzLnIpfSwgJHtROSh0aGlzLmcpfSwgJHtROSh0aGlzLmIpfSR7MT09PWM/IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIFROKGMpe3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxjKSl9ZnVuY3Rpb24g''@;'; put 'put ''UTkoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8fDApKX1mdW5jdGlvbiBldihjKXtyZXR1cm4oKGM9UTkoYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygxNil9ZnVuY3Rpb24gUDhlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1hPU5hTjphPD0wfHxh''@;'; put 'put ''Pj0xP2M9bD1OYU46bDw9MCYmKGM9TmFOKSxuZXcgUzMoYyxsLGEsZCl9ZnVuY3Rpb24gRjhlKGMpe2lmKGMgaW5zdGFuY2VvZiBTMylyZXR1cm4gbmV3IFMzKGMuaCxjLnMsYy5sLGMub3BhY2l0eSk7aWYoYyBpbnN0YW5jZW9mIERBfHwoYz1KOShjKSksIWMpcmV0dXJuIG5ldyBTMztpZihj''@;'; put 'put ''IGluc3RhbmNlb2YgUzMpcmV0dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1jLmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgubWluKGwsYSxkKSxmPU1hdGgubWF4KGwsYSxkKSx2PU5hTixNPWYtaCxEPShmK2gpLzI7cmV0dXJuIE0/KHY9bD09PWY/KGEtZCkvTSs2KihhPGQpOmE9PT1m''@;'; put 'put ''PyhkLWwpL00rMjoobC1hKS9NKzQsTS89RDwuNT9mK2g6Mi1mLWgsdio9NjApOk09RD4wJiZEPDE/MDp2LG5ldyBTMyh2LE0sRCxjLm9wYWNpdHkpfWZ1bmN0aW9uIFMzKGMsbCxhLGQpe3RoaXMuaD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBIOGUo''@;'; put 'put ''Yyl7cmV0dXJuKGM9KGN8fDApJTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIEFOKGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsY3x8MCkpfWZ1bmN0aW9uIF90ZShjLGwsYSl7cmV0dXJuIDI1NSooYzw2MD9sKyhhLWwpKmMvNjA6YzwxODA/YTpjPDI0MD9sKyhhLWwpKigyNDAtYykv''@;'; put 'put ''NjA6bCl9ZnVuY3Rpb24gTjhlKGMsbCxhLGQsaCl7dmFyIGY9YypjLHY9ZipjO3JldHVybigoMS0zKmMrMypmLXYpKmwrKDQtNipmKzMqdikqYSsoMSszKmMrMypmLTMqdikqZCt2KmgpLzZ9eXRlKERBLEo5LHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVj''@;'; put 'put ''dG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkQ4ZSxmb3JtYXRIZXg6RDhlLGZvcm1hdEhleDg6ZnVuY3Rpb24gSVN0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gUlN0KCl7''@;'; put 'put ''cmV0dXJuIEY4ZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkk4ZSx0b1N0cmluZzpJOGV9KSx5dGUoUWQsRU4sQThlKERBLHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP01OOk1hdGgucG93KE1OLGMpLG5ldyBRZCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9w''@;'; put 'put ''YWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgUWQodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBRZChROSh0aGlzLnIpLFE5KHRoaXMuZyks''@;'; put 'put ''UTkodGhpcy5iKSxUTih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0s''@;'; put 'put ''aGV4Okw4ZSxmb3JtYXRIZXg6TDhlLGZvcm1hdEhleDg6ZnVuY3Rpb24gT1N0KCl7cmV0dXJuYCMke2V2KHRoaXMucil9JHtldih0aGlzLmcpfSR7ZXYodGhpcy5iKX0ke2V2KDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpPOGUsdG9TdHJp''@;'; put 'put ''bmc6TzhlfSkpLHl0ZShTMyxmdW5jdGlvbiBQU3QoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0Y4ZShjKTpuZXcgUzMoYyxsLGEsZD8/MSl9LEE4ZShEQSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9NTjpNYXRoLnBvdyhNTixjKSxuZXcgUzModGhpcy5oLHRo''@;'; put 'put ''aXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgUzModGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgYz10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGw9aXNOYU4o''@;'; put 'put ''Yyl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsYT10aGlzLmwsZD1hKyhhPC41P2E6MS1hKSpsLGg9MiphLWQ7cmV0dXJuIG5ldyBRZChfdGUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksX3RlKGMsaCxkKSxfdGUoYzwxMjA/YysyNDA6Yy0xMjAsaCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgp''@;'; put 'put ''e3JldHVybiBuZXcgUzMoSDhlKHRoaXMuaCksQU4odGhpcy5zKSxBTih0aGlzLmwpLFROKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkm''@;'; put 'put ''JnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgYz1UTih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJoc2woIjoiaHNsYSgifSR7SDhlKHRoaXMuaCl9LCAkezEwMCpBTih0aGlzLnMpfSUsICR7MTAwKkFOKHRoaXMubCl9JSR7MT09PWM/IikiOmAsICR7Y30pYH1gfX0p''@;'; put 'put ''KTtjb25zdCB3dGU9Yz0+KCk9PmM7ZnVuY3Rpb24gQjhlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIFY4ZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOnd0ZShpc05hTihjKT9sOmMpfWNvbnN0IGtOPWZ1bmN0aW9uIGMobCl7dmFyIGE9ZnVu''@;'; put 'put ''Y3Rpb24gVlN0KGMpe3JldHVybiAxPT0oYz0rYyk/QjhlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9mdW5jdGlvbiBOU3QoYyxsLGEpe3JldHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBvdyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEpfX0o''@;'; put 'put ''bCxhLGMpOnd0ZShpc05hTihsKT9hOmwpfX0obCk7ZnVuY3Rpb24gZChoLGYpe3ZhciB2PWEoKGg9RU4oaCkpLnIsKGY9RU4oZikpLnIpLE09YShoLmcsZi5nKSxEPWEoaC5iLGYuYiksWj1COGUoaC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXtyZXR1cm4gaC5yPXYo''@;'; put 'put ''cmUpLGguZz1NKHJlKSxoLmI9RChyZSksaC5vcGFjaXR5PVoocmUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24gajhlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgdixNLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXko''@;'; put 'put ''YSk7Zm9yKHY9MDt2PGE7Kyt2KU09RU4obFt2XSksZFt2XT1NLnJ8fDAsaFt2XT1NLmd8fDAsZlt2XT1NLmJ8fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1jKGYpLE0ub3BhY2l0eT0xLGZ1bmN0aW9uKEQpe3JldHVybiBNLnI9ZChEKSxNLmc9aChEKSxNLmI9ZihEKSxNKyIifX19ajhlKGZ1''@;'; put 'put ''bmN0aW9uIEZTdChjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBOOGUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsy''@;'; put 'put ''XToyKmYtaCl9fSksajhlKGZ1bmN0aW9uIEhTdChjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBOOGUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxd''@;'; put 'put ''KX19KTt2YXIgQ3RlPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxTdGU9bmV3IFJlZ0V4cChDdGUuc291cmNlLCJnIik7ZnVuY3Rpb24gejhlKGMsbCl7dmFyIGQsaCxmLGE9Q3RlLmxhc3RJbmRleD1TdGUubGFzdEluZGV4PTAsdj0tMSxNPVtdLEQ9W107''@;'; put 'put ''Zm9yKGMrPSIiLGwrPSIiOyhkPUN0ZS5leGVjKGMpKSYmKGg9U3RlLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYoZj1sLnNsaWNlKGEsZiksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSwoZD1kWzBdKT09PShoPWhbMF0pP01bdl0/TVt2XSs9aDpNWysrdl09aDooTVsrK3ZdPW51bGwsRC5wdXNo''@;'; put 'put ''KHtpOnYseDpsNChkLGgpfSkpLGE9U3RlLmxhc3RJbmRleDtyZXR1cm4gYTxsLmxlbmd0aCYmKGY9bC5zbGljZShhKSxNW3ZdP01bdl0rPWY6TVsrK3ZdPWYpLE0ubGVuZ3RoPDI/RFswXT9mdW5jdGlvbiBqU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpKyIifX0oRFswXS54''@;'; put 'put ''KTpmdW5jdGlvbiBCU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShsKToobD1ELmxlbmd0aCxmdW5jdGlvbihaKXtmb3IodmFyIGNlLHJlPTA7cmU8bDsrK3JlKU1bKGNlPURbcmVdKS5pXT1jZS54KFopO3JldHVybiBNLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVThlKGMsbCl7dmFy''@;'; put 'put ''IGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9sNDpsIGluc3RhbmNlb2YgSjk/a046KGE9SjkobCkpPyhsPWEsa04pOno4ZSkoYyxsKX1mdW5jdGlvbiB6U3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIFVTdChjKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIFpTdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEp''@;'; put 'put ''fX1mdW5jdGlvbiBXU3QoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIFlTdChjLGwsYSl7dmFyIGQsaCxm''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbigpe3ZhciB2LEQsTT1hKHRoaXMpO3JldHVybiBudWxsPT1NP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6KHY9dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBH''@;'; put 'put ''U3QoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKToodj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KEQ9TSsi''@;'; put 'put ''Iik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBYU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBxU3QoYyxsKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uIEpTdChjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBm''@;'; put 'put ''IT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIEtTdChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBlTXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXttdGUodGhpcyxj''@;'; put 'put ''KS5kZWxheT0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHRNdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7bXRlKHRoaXMsYykuZGVsYXk9bH19ZnVuY3Rpb24gck10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7czQodGhpcyxjKS5kdXJhdGlvbj0rbC5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGlNdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7czQodGhpcyxjKS5kdXJhdGlvbj1sfX12YXIgeU10PXE5LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBaOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9w''@;'; put 'put ''ZXJ0eShjKX19dmFyIEhNdD0wO2Z1bmN0aW9uIHU0KGMsbCxhLGQpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bCx0aGlzLl9uYW1lPWEsdGhpcy5faWQ9ZH1mdW5jdGlvbiBNdGUoYyl7cmV0dXJuIHE5KCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBXOGUoKXtyZXR1cm4rK0hNdH12''@;'; put 'put ''YXIgWGc9cTkucHJvdG90eXBlO3U0LnByb3RvdHlwZT1NdGUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1NCxzZWxlY3Q6ZnVuY3Rpb24gdk10KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9YXRlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3Jv''@;'; put 'put ''dXBzLGg9ZC5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDsrK3YpZm9yKHZhciByZSxjZSxNPWRbdl0sRD1NLmxlbmd0aCxaPWZbdl09bmV3IEFycmF5KEQpLGJlPTA7YmU8RDsrK2JlKShyZT1NW2JlXSkmJihjZT1jLmNhbGwocmUscmUuX19kYXRhX18sYmUsTSkpJiYoIl9fZGF0YV9f''@;'; put 'put ''ImluIHJlJiYoY2UuX19kYXRhX189cmUuX19kYXRhX18pLFpbYmVdPWNlLHdOKFpbYmVdLGwsYSxiZSxaLEMzKHJlLGEpKSk7cmV0dXJuIG5ldyB1NChmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIGJNdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIGMmJihjPXI4ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9W10sdj1bXSxNPTA7TTxoOysrTSlmb3IodmFyIHJlLEQ9ZFtNXSxaPUQubGVuZ3RoLGNlPTA7Y2U8WjsrK2NlKWlmKHJlPURbY2VdKXtmb3IodmFyIEVlLGJlPWMuY2FsbChy''@;'; put 'put ''ZSxyZS5fX2RhdGFfXyxjZSxEKSxCZT1DMyhyZSxhKSxxZT0wLHJ0PWJlLmxlbmd0aDtxZTxydDsrK3FlKShFZT1iZVtxZV0pJiZ3TihFZSxsLGEscWUsYmUsQmUpO2YucHVzaChiZSksdi5wdXNoKHJlKX1yZXR1cm4gbmV3IHU0KGYsdixsLGEpfSxzZWxlY3RDaGlsZDpYZy5zZWxlY3RDaGls''@;'; put 'put ''ZCxzZWxlY3RDaGlsZHJlbjpYZy5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24gdU10KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1pOGUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIEQsZj1s''@;'; put 'put ''W2hdLHY9Zi5sZW5ndGgsTT1kW2hdPVtdLFo9MDtaPHY7KytaKShEPWZbWl0pJiZjLmNhbGwoRCxELl9fZGF0YV9fLFosZikmJk0ucHVzaChEKTtyZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gZE10KGMpe2lmKGMuX2lk''@;'; put 'put ''IT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5sZW5ndGgpLHY9bmV3IEFycmF5KGQpLE09MDtNPGY7KytNKWZvcih2YXIgYmUsRD1sW01dLFo9YVtNXSxyZT1ELmxlbmd0aCxjZT12''@;'; put 'put ''W01dPW5ldyBBcnJheShyZSksRWU9MDtFZTxyZTsrK0VlKShiZT1EW0VlXXx8WltFZV0pJiYoY2VbRWVdPWJlKTtmb3IoO008ZDsrK00pdltNXT1sW01dO3JldHVybiBuZXcgdTQodix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gX010KCl7''@;'; put 'put ''cmV0dXJuIG5ldyB5TXQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIFBNdCgpe2Zvcih2YXIgYz10aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1XOGUoKSxkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0s''@;'; put 'put ''TT12Lmxlbmd0aCxaPTA7WjxNOysrWilpZihEPXZbWl0pe3ZhciByZT1DMyhELGwpO3dOKEQsYyxhLFosdix7dGltZTpyZS50aW1lK3JlLmRlbGF5K3JlLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cmUuZHVyYXRpb24sZWFzZTpyZS5lYXNlfSl9cmV0dXJuIG5ldyB1NChkLHRoaXMuX3Bh''@;'; put 'put ''cmVudHMsYyxhKX0sY2FsbDpYZy5jYWxsLG5vZGVzOlhnLm5vZGVzLG5vZGU6WGcubm9kZSxzaXplOlhnLnNpemUsZW1wdHk6WGcuZW1wdHksZWFjaDpYZy5lYWNoLG9uOmZ1bmN0aW9uIHBNdChjLGwpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/QzModGhpcy5u''@;'; put 'put ''b2RlKCksYSkub24ub24oYyk6dGhpcy5lYWNoKGZ1bmN0aW9uIGZNdChjLGwsYSl7dmFyIGQsaCxmPWZ1bmN0aW9uIGhNdChjKXtyZXR1cm4oYysiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGwpe3ZhciBhPWwuaW5kZXhPZigiLiIpO3JldHVybiBhPj0wJiYobD1s''@;'; put 'put ''LnNsaWNlKDAsYSkpLCFsfHwic3RhcnQiPT09bH0pfShsKT9tdGU6czQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9Zih0aGlzLGMpLE09di5vbjtNIT09ZCYmKGg9KGQ9TSkuY29weSgpKS5vbihsLGEpLHYub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gJFN0KGMsbCl7dmFyIGE9aE4o''@;'; put 'put ''YyksZD0idHJhbnNmb3JtIj09PWE/VDhlOlU4ZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD9HU3Q6WVN0KShhLGQsYnRlKHRoaXMsImF0dHIuIitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP1VTdDp6U3QpKGEpOihhLmxvY2FsP1dTdDpaU3Qp''@;'; put 'put ''KGEsZCxsKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBRU3QoYyxsKXt2YXIgYT0iYXR0ci4iK2M7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIGwpdGhyb3cgbmV3IEVycm9yO3ZhciBkPWhOKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGQubG9jYWw/WFN0OkpTdCkoZCxsKSl9LHN0eWxlOmZ1bmN0aW9uIHhNdChjLGwsYSl7dmFyIGQ9InRyYW5zZm9ybSI9PShjKz0iIik/X1N0OlU4ZTtyZXR1cm4gbnVsbD09bD90aGlzLnN0eWxl''@;'; put 'put ''VHdlZW4oYyxmdW5jdGlvbiB3TXQoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9RXcodGhpcyxjKSx2PSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLEV3KHRoaXMsYykpO3JldHVybiBmPT09dj9udWxsOmY9PT1hJiZ2PT09ZD9oOmg9bChhPWYsZD12KX19KGMs''@;'; put 'put ''ZCkpLm9uKCJlbmQuc3R5bGUuIitjLFo4ZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gU010KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9RXcodGhpcyxjKSxNPWEodGhpcyksRD1NKyIiO3JldHVybiBudWxsPT1N''@;'; put 'put ''JiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxEPU09RXcodGhpcyxjKSksdj09PUQ/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX0oYyxkLGJ0ZSh0aGlzLCJzdHlsZS4iK2MsbCkpKS5lYWNoKGZ1bmN0aW9uIE1NdChjLGwpe3ZhciBhLGQsaCxNLGY9InN0eWxl''@;'; put 'put ''LiIrbCx2PSJlbmQuIitmO3JldHVybiBmdW5jdGlvbigpe3ZhciBEPXM0KHRoaXMsYyksWj1ELm9uLHJlPW51bGw9PUQudmFsdWVbZl0/TXx8KE09WjhlKGwpKTp2b2lkIDA7KFohPT1hfHxoIT09cmUpJiYoZD0oYT1aKS5jb3B5KCkpLm9uKHYsaD1yZSksRC5vbj1kfX0odGhpcy5faWQsYykp''@;'; put 'put ''OnRoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIENNdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9RXcodGhpcyxjKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fShjLGQsbCksYSkub24oImVuZC5zdHlsZS4iK2MsbnVsbCl9LHN0''@;'; put 'put ''eWxlVHdlZW46ZnVuY3Rpb24gQU10KGMsbCxhKXt2YXIgZD0ic3R5bGUuIisoYys9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZD10aGlzLnR3ZWVuKGQpKSYmZC5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihkLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihkLGZ1bmN0aW9uIFRNdChjLGwsYSl7dmFyIGQsaDtmdW5jdGlvbiBmKCl7dmFyIHY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1oJiYoZD0oaD12KSYmZnVuY3Rpb24gRU10KGMsbCxhKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwuY2FsbCh0aGlzLGQpLGEpfX0oYyx2LGEpKSxkfXJldHVybiBmLl92YWx1ZT1sLGZ9KGMsbCxhPz8iIikpfSx0ZXh0OmZ1bmN0aW9uIElNdChjKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIGM/''@;'; put 'put ''ZnVuY3Rpb24gRE10KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWModGhpcyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19KGJ0ZSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24ga010KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikp''@;'; put 'put ''fSx0ZXh0VHdlZW46ZnVuY3Rpb24gT010KGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBMTXQoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gUk10KGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRD''@;'; put 'put ''b250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gbU10KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIGdNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9y''@;'; put 'put ''KHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIFNTdChjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciB2LGQ9QzMo''@;'; put 'put ''dGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigodj1kW2hdKS5uYW1lPT09YylyZXR1cm4gdi52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP3dTdDpDU3QpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIG5NdChjKXt2YXIgbD10''@;'; put 'put ''aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2VNdDp0TXQpKGwsYykpOkMzKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBhTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9yTXQ6aU10KShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBzTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIG9NdChjLGwp''@;'; put 'put ''e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtzNCh0aGlzLGMpLmVhc2U9bH19KGwsYykpOkMzKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIGNNdChjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBsTXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7czQodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxj''@;'; put 'put ''KSl9LGVuZDpmdW5jdGlvbiBGTXQoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsdil7dmFyIE09e3ZhbHVlOnZ9LEQ9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgWj1z''@;'; put 'put ''NCh0aGlzLGQpLHJlPVoub247cmUhPT1jJiYoKGw9KGM9cmUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChNKSxsLl8uaW50ZXJydXB0LnB1c2goTSksbC5fLmVuZC5wdXNoKEQpKSxaLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOlhnW1N5bWJvbC5pdGVyYXRvcl19O3Zh''@;'; put 'put ''ciBWTXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIE5NdChjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIEJNdChjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEo''@;'; put 'put ''Yz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfXE5LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gdlN0KGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtDTih0aGlzLGMpfSl9LHE5LnByb3RvdHlwZS50''@;'; put 'put ''cmFuc2l0aW9uPWZ1bmN0aW9uIGpNdChjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiB1ND8obD1jLl9pZCxjPWMuX25hbWUpOihsPVc4ZSgpLChhPVZNdCkudGltZT1kdGUoKSxjPW51bGw9PWM/bnVsbDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2Yp''@;'; put 'put ''Zm9yKHZhciBELHY9ZFtmXSxNPXYubGVuZ3RoLFo9MDtaPE07KytaKShEPXZbWl0pJiZ3TihELGMsbCxaLHYsYXx8Qk10KEQsbCkpO3JldHVybiBuZXcgdTQoZCx0aGlzLl9wYXJlbnRzLGMsbCl9O3ZhciB6TXQ9W251bGxdO2NvbnN0IHh0ZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5j''@;'; put 'put ''dGlvbiBFdGUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gWThlKGMpe3JldHVybigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0IEtNdD1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsdil7dmFyIHJ0LHB0LE09Zlsw''@;'; put 'put ''XSxEPWZbMV0sWj1mWzJdLGJlPXZbMl0sRWU9dlswXS1NLEJlPXZbMV0tRCxxZT1FZSpFZStCZSpCZTtpZihxZTwxZS0xMilwdD1NYXRoLmxvZyhiZS9aKS9sLHJ0PWZ1bmN0aW9uKE1uKXtyZXR1cm5bTStNbipFZSxEK01uKkJlLFoqTWF0aC5leHAobCpNbipwdCldfTtlbHNle3ZhciBkdD1N''@;'; put 'put ''YXRoLnNxcnQocWUpLEp0PShiZSpiZS1aKlorZCpxZSkvKDIqWiphKmR0KSx2bj0oYmUqYmUtWipaLWQqcWUpLygyKmJlKmEqZHQpLENuPU1hdGgubG9nKE1hdGguc3FydChKdCpKdCsxKS1KdCksdG49TWF0aC5sb2coTWF0aC5zcXJ0KHZuKnZuKzEpLXZuKTtwdD0odG4tQ24pL2wscnQ9ZnVu''@;'; put 'put ''Y3Rpb24oTW4pe3ZhciBDcj1NbipwdCxHcj1ZOGUoQ24pLG1yPVovKGEqZHQpKihHcipmdW5jdGlvbiAkTXQoYyl7cmV0dXJuKChjPU1hdGguZXhwKDIqYykpLTEpLyhjKzEpfShsKkNyK0NuKS1mdW5jdGlvbiBHTXQoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKS0xL2MpLzJ9KENuKSk7cmV0''@;'; put 'put ''dXJuW00rbXIqRWUsRCttcipCZSxaKkdyL1k4ZShsKkNyK0NuKV19fXJldHVybiBydC5kdXJhdGlvbj0xZTMqcHQqbC9NYXRoLlNRUlQyLHJ0fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgdj1NYXRoLm1heCguMDAxLCtmKSxNPXYqdjtyZXR1cm4gYyh2LE0sTSpNKX0saH0oTWF0aC5T''@;'; put 'put ''UVJUMiwyLDQpO2Z1bmN0aW9uIHR2KGMsbCl7aWYoYz1mdW5jdGlvbiBxTXQoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0''@;'; put 'put ''ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwu''@;'; put 'put ''Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IEROPWM9PigpPT5jO2Z1bmN0aW9uIFhNdChjLHtzb3VyY2VFdmVudDpsLHRh''@;'; put 'put ''cmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0''@;'; put 'put ''Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gSmcoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfUpnLnByb3RvdHlwZT17''@;'; put 'put ''Y29uc3RydWN0b3I6Smcsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IEpnKHRoaXMuaypjLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgSmcodGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlz''@;'; put 'put ''LnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0s''@;'; put 'put ''aW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2Nh''@;'; put 'put ''bGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlz''@;'; put 'put ''KS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgSU49bmV3IEpnKDEsMCwwKTtmdW5jdGlvbiBSTihjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFy''@;'; put 'put ''ZW50Tm9kZSkpcmV0dXJuIElOO3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiBUdGUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBMQShjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBKTXQoYyl7cmV0dXJu''@;'; put 'put ''IShjLmN0cmxLZXkmJiJ3aGVlbCIhPT1jLnR5cGV8fGMuYnV0dG9uKX1mdW5jdGlvbiBRTXQoKXt2YXIgYz10aGlzO3JldHVybiBjIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZHRWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1soYz1jLnZpZXdCb3guYmFz''@;'; put 'put ''ZVZhbCkueCxjLnldLFtjLngrYy53aWR0aCxjLnkrYy5oZWlnaHRdXTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gRzhlKCl7cmV0dXJuIHRoaXMuX196''@;'; put 'put ''b29tfHxJTn1mdW5jdGlvbiBleHQoYyl7cmV0dXJuLWMuZGVsdGFZKigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6LjAwMikqKGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiB0eHQoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRo''@;'; put 'put ''aXN9ZnVuY3Rpb24gbnh0KGMsbCxhKXt2YXIgZD1jLmludmVydFgobFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBdKS1hWzFdWzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1bMV0sdj1jLmludmVydFkobFsxXVsxXSktYVsxXVsxXTtyZXR1cm4gYy50cmFuc2xhdGUoaD5k''@;'; put 'put ''PyhkK2gpLzI6TWF0aC5taW4oMCxkKXx8TWF0aC5tYXgoMCxoKSx2PmY/KGYrdikvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgwLHYpKX1mdW5jdGlvbiAkOGUoYyl7dmFyIGw9e30sYT1jLm5vZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29t''@;'; put 'put ''bWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGwuYXR0cmlidXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52YWx1ZX12YXIgcmUsRD1jLm5vZGUoKS50''@;'; put 'put ''cmFuc2Zvcm07aWYoRCYmMCE9RC5iYXNlVmFsLm51bWJlck9mSXRlbXMpe3ZhciBaPUQuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OlouZSx5OlouZn0sbC5zY2FsZT1aLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4''@;'; put 'put ''LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgY2U9KHJlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc3BsaXQoIiwiKVswXX0pLGJlPXJlLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMV19''@;'; put 'put ''KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLGNlKSxCZT1NYXRoLm1heC5hcHBseShudWxsLGNlKSxxZT1NYXRoLm1pbi5hcHBseShudWxsLGJlKSxydD1NYXRoLm1heC5hcHBseShudWxsLGJlKTtsLmJib3g9e3g6RWUseTpxZSx3aWR0aDpCZS1FZSxoZWlnaHQ6cnQtcWV9LGwuY2VudGVyPXt4''@;'; put 'put ''OihFZStCZSkvMix5OihxZStydCkvMn19InBhdGgiPT1hJiYoKHJlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSxjZT1yZS5tYXAoZnVuY3Rpb24oR24pe3JldHVybitHbi5zcGxpdCgiLCIpWzBdfSksYmU9cmUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQo''@;'; put 'put ''IiwiKVsxXX0pLEVlPU1hdGgubWluLmFwcGx5KG51bGwsY2UpLEJlPU1hdGgubWF4LmFwcGx5KG51bGwsY2UpLHFlPU1hdGgubWluLmFwcGx5KG51bGwsYmUpLHJ0PU1hdGgubWF4LmFwcGx5KG51bGwsYmUpLGwuYmJveD17eDpFZSx5OnFlLHdpZHRoOkJlLUVlLGhlaWdodDpydC1xZX0sbC5j''@;'; put 'put ''ZW50ZXI9e3g6KEVlK0JlKS8yLHk6KHFlK3J0KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1l''@;'; put 'put ''bnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIG52KGMpe3ZhciBsPSQ4ZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxjdGUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbigpe3ZhciBkPW52KHdzKHRoaXMpKTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVz''@;'; put 'put ''aChkKX0pLGx9ZnVuY3Rpb24gQXRlKGMpe3JldHVybiIjdGV4dCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKToiI2NvbW1lbnQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVDb21tZW50KGMuY29tbWVudCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3Lncz''@;'; put 'put ''Lm9yZy8yMDAwL3N2ZyIsYy50YWcpfWZ1bmN0aW9uIGt0ZShjKXt2YXIgbD1BdGUoYyksYT13cyhsKSxkPWMuYXR0cmlidXRlcztmb3IodmFyIGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgsZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gSzhlKGMsbCl7dmFyIGE9d3MoYy5ub2RlKCkucGFy''@;'; put 'put ''ZW50Tm9kZSksZD1rdGUobCksaD1hLmluc2VydChmdW5jdGlvbigpe3JldHVybiBkfSxmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKX0pO3JldHVybiBjLnJlbW92ZSgpLGh9ZnVuY3Rpb24gRHRlKGMsbCl7IWZ1bmN0aW9uIGl4dChjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxjdGUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe0R0ZSh3cyh0aGlzKSxsLmNoaWxkcmVuW2hdKX0pfWZ1bmN0aW9uIE9BKGMsbD0wKXt2YXIgYT13cyh0aGlzKSxoPWMuYXR0cmlidXRlcyxmPWEubm9kZSgpLmF0dHJp''@;'; put 'put ''YnV0ZXM7aWYoZilmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIE09Zlt2XSxEPU0ubmFtZTtpZigieG1sbnMiIT1ELnNwbGl0KCI6IilbMF0mJk0ubmFtZXNwYWNlVVJJKXt2YXIgWj1NLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0Q9WltaLmxlbmd0aC0xXSsiOiIrRH1EIGluIGh8''@;'; put 'put ''fChoW0RdPW51bGwpfWZvcih2YXIgY2Ugb2YgT2JqZWN0LmtleXMoaCkpYS5hdHRyKGNlLGhbY2VdKTtjLnRleHQmJmEudGV4dChjLnRleHQpLGZ1bmN0aW9uIGF4dChjLGwpe3ZhciBhPWMuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpLmNoaWxkTm9kZXN9KSxkPShhPWEu''@;'; put 'put ''ZGF0YShmdW5jdGlvbih2KXtyZXR1cm4gdi5jaGlsZHJlbn0sZnVuY3Rpb24odil7cmV0dXJuIHYudGFnKyItIitsfSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHYpe3JldHVybiBBdGUodil9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNo''@;'; put 'put ''KGZ1bmN0aW9uKHYpe3ZhciBNPXYudGFnO251bGw9PWZbTV0mJihmW01dPTApO3ZhciBEPWZbTV0rKztPQS5jYWxsKHRoaXMsdixEKX0pfShhLGwpfWZ1bmN0aW9uIHE4ZShjLGwpe3ZhciB2LGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQp''@;'; put 'put ''LGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxkOysrdiloW3ZdPUxOKGNbdl0sbFt2XSk7Zm9yKDt2PGE7Kyt2KWZbdl09bFt2XTtyZXR1cm4gZnVuY3Rpb24oTSl7Zm9yKHY9MDt2PGQ7Kyt2KWZbdl09aFt2XShNKTtyZXR1cm4gZn19ZnVuY3Rpb24gb3h0KGMsbCl7dmFyIGE9bmV3IERhdGU7''@;'; put 'put ''cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBzeHQoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPUxOKGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gbHh0KGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxj''@;'; put 'put ''Lmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIExOKGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT93dGUobCk6KCJu''@;'; put 'put ''dW1iZXIiPT09YT9sNDoic3RyaW5nIj09PWE/KGQ9SjkobCkpPyhsPWQsa04pOno4ZTpsIGluc3RhbmNlb2YgSjk/a046bCBpbnN0YW5jZW9mIERhdGU/b3h0OmZ1bmN0aW9uIGN4dChjKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5zdGFuY2VvZiBEYXRhVmlldyl9KGwp''@;'; put 'put ''P2x4dDpBcnJheS5pc0FycmF5KGwpP3E4ZToiZnVuY3Rpb24iIT10eXBlb2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgbC50b1N0cmluZ3x8aXNOYU4obCk/c3h0Omw0KShjLGwpfWZ1bmN0aW9uIFg4ZSgpe3ZhciBjPXRoaXMsZD13cyh0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoInN2ZyIpKTtpZigwPT1kLnNpemUoKSlyZXR1cm4gdGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9ZnVuY3Rpb24gcnh0KCl7dmFyIHJlLGNlLGJlLGM9Sk10LGw9UU10LGE9bnh0LGQ9ZXh0LGg9dHh0LGY9WzAsMS8wXSx2PVtbLTEvMCwtMS8wXSxbMS8wLDEv''@;'; put 'put ''MF1dLE09MjUwLEQ9S010LFo9dXRlKCJzdGFydCIsInpvb20iLCJlbmQiKSxFZT01MDAsQmU9MTUwLHFlPTAscnQ9MTA7ZnVuY3Rpb24gcHQoT24pe09uLnByb3BlcnR5KCJfX3pvb20iLEc4ZSkub24oIndoZWVsLnpvb20iLENyLHtwYXNzaXZlOiExfSkub24oIm1vdXNlZG93bi56b29tIixH''@;'; put 'put ''cikub24oImRibGNsaWNrLnpvb20iLG1yKS5maWx0ZXIoaCkub24oInRvdWNoc3RhcnQuem9vbSIsR24pLm9uKCJ0b3VjaG1vdmUuem9vbSIsYWkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLF9pKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdi''@;'; put 'put ''YSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGR0KE9uLHpyKXtyZXR1cm4oenI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLHpyKSkpPT09T24uaz9PbjpuZXcgSmcoenIsT24ueCxPbi55KX1mdW5jdGlvbiBKdChPbix6cixKbil7dmFyIElyPXpyWzBdLUpuWzBdKk9uLmssJHI9enJbMV0tSm5b''@;'; put 'put ''MV0qT24uaztyZXR1cm4gSXI9PT1Pbi54JiYkcj09PU9uLnk/T246bmV3IEpnKE9uLmssSXIsJHIpfWZ1bmN0aW9uIHZuKE9uKXtyZXR1cm5bKCtPblswXVswXSsgK09uWzFdWzBdKS8yLCgrT25bMF1bMV0rICtPblsxXVsxXSkvMl19ZnVuY3Rpb24gQ24oT24senIsSm4sSXIpe09uLm9uKCJz''@;'; put 'put ''dGFydC56b29tIixmdW5jdGlvbigpe3RuKHRoaXMsYXJndW1lbnRzKS5ldmVudChJcikuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoSXIpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''ICRyPXRoaXMsd2k9YXJndW1lbnRzLGVhPXRuKCRyLHdpKS5ldmVudChJciksZmE9bC5hcHBseSgkcix3aSksdnQ9bnVsbD09Sm4/dm4oZmEpOiJmdW5jdGlvbiI9PXR5cGVvZiBKbj9Kbi5hcHBseSgkcix3aSk6Sm4sTnQ9TWF0aC5tYXgoZmFbMV1bMF0tZmFbMF1bMF0sZmFbMV1bMV0tZmFb''@;'; put 'put ''MF1bMV0pLEh0PSRyLl9fem9vbSxIbj0iZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkoJHIsd2kpOnpyLHRyPUQoSHQuaW52ZXJ0KHZ0KS5jb25jYXQoTnQvSHQuayksSG4uaW52ZXJ0KHZ0KS5jb25jYXQoTnQvSG4uaykpO3JldHVybiBmdW5jdGlvbihhcil7aWYoMT09PWFyKWFyPUhu''@;'; put 'put ''O2Vsc2V7dmFyIEhyPXRyKGFyKSxxcj1OdC9IclsyXTthcj1uZXcgSmcocXIsdnRbMF0tSHJbMF0qcXIsdnRbMV0tSHJbMV0qcXIpfWVhLnpvb20obnVsbCxhcil9fSl9ZnVuY3Rpb24gdG4oT24senIsSm4pe3JldHVybiFKbiYmT24uX196b29taW5nfHxuZXcgTW4oT24senIpfWZ1bmN0aW9u''@;'; put 'put ''IE1uKE9uLHpyKXt0aGlzLnRoYXQ9T24sdGhpcy5hcmdzPXpyLHRoaXMuYWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWwuYXBwbHkoT24senIpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIENyKE9uLC4uLnpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFy''@;'; put 'put ''IEpuPXRuKHRoaXMsenIpLmV2ZW50KE9uKSxJcj10aGlzLl9fem9vbSwkcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sSXIuaypNYXRoLnBvdygyLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHdpPXR2KE9uKTtpZihKbi53aGVlbCkoSm4ubW91c2VbMF1bMF0hPT13aVswXXx8Sm4u''@;'; put 'put ''bW91c2VbMF1bMV0hPT13aVsxXSkmJihKbi5tb3VzZVsxXT1Jci5pbnZlcnQoSm4ubW91c2VbMF09d2kpKSxjbGVhclRpbWVvdXQoSm4ud2hlZWwpO2Vsc2V7aWYoSXIuaz09PSRyKXJldHVybjtKbi5tb3VzZT1bd2ksSXIuaW52ZXJ0KHdpKV0sQ04odGhpcyksSm4uc3RhcnQoKX1MQShPbiks''@;'; put 'put ''Sm4ud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbiBlYSgpe0puLndoZWVsPW51bGwsSm4uZW5kKCl9LEJlKSxKbi56b29tKCJtb3VzZSIsYShKdChkdChJciwkciksSm4ubW91c2VbMF0sSm4ubW91c2VbMV0pLEpuLmV4dGVudCx2KSl9fWZ1bmN0aW9uIEdyKE9uLC4uLnpyKXtpZighYmUmJmMu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgSm49T24uY3VycmVudFRhcmdldCxJcj10bih0aGlzLHpyLCEwKS5ldmVudChPbiksJHI9d3MoT24udmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbiB2dChIdCl7aWYoTEEoSHQpLCFJci5tb3ZlZCl7dmFyIEhuPUh0LmNsaWVudFgt''@;'; put 'put ''ZWEsdHI9SHQuY2xpZW50WS1mYTtJci5tb3ZlZD1IbipIbit0cip0cj5xZX1Jci5ldmVudChIdCkuem9vbSgibW91c2UiLGEoSnQoSXIudGhhdC5fX3pvb20sSXIubW91c2VbMF09dHYoSHQsSm4pLElyLm1vdXNlWzFdKSxJci5leHRlbnQsdikpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVu''@;'; put 'put ''Y3Rpb24gTnQoSHQpeyRyLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLGZ1bmN0aW9uIFdNdChjLGwpe3ZhciBhPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGQ9d3MoYykub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtsJiYoZC5vbigiY2xpY2suZHJhZyIsRXRl''@;'; put 'put ''LHh0ZSksc2V0VGltZW91dChmdW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gYT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUgYS5fX25vc2VsZWN0KX0o''@;'; put 'put ''SHQudmlldyxJci5tb3ZlZCksTEEoSHQpLElyLmV2ZW50KEh0KS5lbmQoKX0sITApLHdpPXR2KE9uLEpuKSxlYT1Pbi5jbGllbnRYLGZhPU9uLmNsaWVudFk7KGZ1bmN0aW9uIFpNdChjKXt2YXIgbD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJh''@;'; put 'put ''ZyIsRXRlLHh0ZSk7Im9uc2VsZWN0c3RhcnQiaW4gbD9hLm9uKCJzZWxlY3RzdGFydC5kcmFnIixFdGUseHRlKToobC5fX25vc2VsZWN0PWwuc3R5bGUuTW96VXNlclNlbGVjdCxsLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0pKE9uLnZpZXcpLFR0ZShPbiksSXIubW91c2U9W3dpLHRo''@;'; put 'put ''aXMuX196b29tLmludmVydCh3aSldLENOKHRoaXMpLElyLnN0YXJ0KCl9fWZ1bmN0aW9uIG1yKE9uLC4uLnpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPXRoaXMuX196b29tLElyPXR2KE9uLmNoYW5nZWRUb3VjaGVzP09uLmNoYW5nZWRUb3VjaGVzWzBdOk9uLHRoaXMp''@;'; put 'put ''LCRyPUpuLmludmVydChJciksZWE9YShKdChkdChKbixKbi5rKihPbi5zaGlmdEtleT8uNToyKSksSXIsJHIpLGwuYXBwbHkodGhpcyx6ciksdik7TEEoT24pLE0+MD93cyh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTSkuY2FsbChDbixlYSxJcixPbik6d3ModGhpcykuY2FsbChwdC50''@;'; put 'put ''cmFuc2Zvcm0sZWEsSXIsT24pfX1mdW5jdGlvbiBHbihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB3aSxlYSxmYSx2dCxKbj1Pbi50b3VjaGVzLElyPUpuLmxlbmd0aCwkcj10bih0aGlzLHpyLE9uLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PUlyKS5ldmVudChP''@;'; put 'put ''bik7Zm9yKFR0ZShPbiksZWE9MDtlYTxJcjsrK2VhKXZ0PVt2dD10dihmYT1KbltlYV0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KHZ0KSxmYS5pZGVudGlmaWVyXSwkci50b3VjaDA/ISRyLnRvdWNoMSYmJHIudG91Y2gwWzJdIT09dnRbMl0mJigkci50b3VjaDE9dnQsJHIudGFwcz0wKToo''@;'; put 'put ''JHIudG91Y2gwPXZ0LHdpPSEwLCRyLnRhcHM9MSshIXJlKTtyZSYmKHJlPWNsZWFyVGltZW91dChyZSkpLHdpJiYoJHIudGFwczwyJiYoY2U9dnRbMF0scmU9c2V0VGltZW91dChmdW5jdGlvbigpe3JlPW51bGx9LEVlKSksQ04odGhpcyksJHIuc3RhcnQoKSl9fWZ1bmN0aW9uIGFpKE9uLC4u''@;'; put 'put ''LnpyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLGVhLGZhLHZ0LEpuPXRuKHRoaXMsenIpLmV2ZW50KE9uKSxJcj1Pbi5jaGFuZ2VkVG91Y2hlcywkcj1Jci5sZW5ndGg7Zm9yKExBKE9uKSx3aT0wO3dpPCRyOysrd2kpZmE9dHYoZWE9SXJbd2ldLHRoaXMpLEpuLnRvdWNoMCYmSm4udG91''@;'; put 'put ''Y2gwWzJdPT09ZWEuaWRlbnRpZmllcj9Kbi50b3VjaDBbMF09ZmE6Sm4udG91Y2gxJiZKbi50b3VjaDFbMl09PT1lYS5pZGVudGlmaWVyJiYoSm4udG91Y2gxWzBdPWZhKTtpZihlYT1Kbi50aGF0Ll9fem9vbSxKbi50b3VjaDEpe3ZhciBOdD1Kbi50b3VjaDBbMF0sSHQ9Sm4udG91Y2gwWzFd''@;'; put 'put ''LEhuPUpuLnRvdWNoMVswXSx0cj1Kbi50b3VjaDFbMV0sYXI9KGFyPUhuWzBdLU50WzBdKSphcisoYXI9SG5bMV0tTnRbMV0pKmFyLEhyPShIcj10clswXS1IdFswXSkqSHIrKEhyPXRyWzFdLUh0WzFdKSpIcjtlYT1kdChlYSxNYXRoLnNxcnQoYXIvSHIpKSxmYT1bKE50WzBdK0huWzBdKS8y''@;'; put 'put ''LChOdFsxXStIblsxXSkvMl0sdnQ9WyhIdFswXSt0clswXSkvMiwoSHRbMV0rdHJbMV0pLzJdfWVsc2V7aWYoIUpuLnRvdWNoMClyZXR1cm47ZmE9Sm4udG91Y2gwWzBdLHZ0PUpuLnRvdWNoMFsxXX1Kbi56b29tKCJ0b3VjaCIsYShKdChlYSxmYSx2dCksSm4uZXh0ZW50LHYpKX19ZnVuY3Rp''@;'; put 'put ''b24gX2koT24sLi4uenIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgd2ksZWEsSm49dG4odGhpcyx6cikuZXZlbnQoT24pLElyPU9uLmNoYW5nZWRUb3VjaGVzLCRyPUlyLmxlbmd0aDtmb3IoVHRlKE9uKSxiZSYmY2xlYXJUaW1lb3V0KGJlKSxiZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YmU9''@;'; put 'put ''bnVsbH0sRWUpLHdpPTA7d2k8JHI7Kyt3aSllYT1Jclt3aV0sSm4udG91Y2gwJiZKbi50b3VjaDBbMl09PT1lYS5pZGVudGlmaWVyP2RlbGV0ZSBKbi50b3VjaDA6Sm4udG91Y2gxJiZKbi50b3VjaDFbMl09PT1lYS5pZGVudGlmaWVyJiZkZWxldGUgSm4udG91Y2gxO2lmKEpuLnRvdWNoMSYm''@;'; put 'put ''IUpuLnRvdWNoMCYmKEpuLnRvdWNoMD1Kbi50b3VjaDEsZGVsZXRlIEpuLnRvdWNoMSksSm4udG91Y2gwKUpuLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoSm4udG91Y2gwWzBdKTtlbHNlIGlmKEpuLmVuZCgpLDI9PT1Kbi50YXBzJiYoZWE9dHYoZWEsdGhpcyksTWF0aC5oeXBvdChj''@;'; put 'put ''ZVswXS1lYVswXSxjZVsxXS1lYVsxXSk8cnQpKXt2YXIgZmE9d3ModGhpcykub24oImRibGNsaWNrLnpvb20iKTtmYSYmZmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIHB0LnRyYW5zZm9ybT1mdW5jdGlvbihPbix6cixKbixJcil7dmFyICRyPU9uLnNlbGVjdGlvbj9Pbi5zZWxl''@;'; put 'put ''Y3Rpb24oKTpPbjskci5wcm9wZXJ0eSgiX196b29tIixHOGUpLE9uIT09JHI/Q24oT24senIsSm4sSXIpOiRyLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoSXIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyk6enIpLmVuZCgpfSl9LHB0LnNjYWxlQnk9ZnVuY3Rpb24oT24senIsSm4sSXIpe3B0LnNjYWxlVG8oT24sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20uayooImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6cil9''@;'; put 'put ''LEpuLElyKX0scHQuc2NhbGVUbz1mdW5jdGlvbihPbix6cixKbixJcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7dmFyICRyPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdpPXRoaXMuX196b29tLGVhPW51bGw9PUpuP3ZuKCRyKToiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpOkpuLGZhPXdpLmludmVydChlYSksdnQ9ImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6cjtyZXR1cm4gYShKdChkdCh3aSx2dCksZWEsZmEpLCRyLHYpfSxKbixJcil9LHB0LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKE9uLHpyLEpu''@;'; put 'put ''LElyKXtwdC50cmFuc2Zvcm0oT24sZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6ciwiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkodGhpcyxhcmd1bWVudHMpOkpuKSxs''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2KX0sbnVsbCxJcil9LHB0LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKE9uLHpyLEpuLElyLCRyKXtwdC50cmFuc2Zvcm0oT24sZnVuY3Rpb24oKXt2YXIgd2k9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZWE9dGhpcy5fX3pvb20sZmE9bnVsbD09SXI/dm4o''@;'; put 'put ''d2kpOiJmdW5jdGlvbiI9PXR5cGVvZiBJcj9Jci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6SXI7cmV0dXJuIGEoSU4udHJhbnNsYXRlKGZhWzBdLGZhWzFdKS5zY2FsZShlYS5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIHpyPy16ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXpyLCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBKbj8tSm4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1Kbiksd2ksdil9LElyLCRyKX0sTW4ucHJvdG90eXBlPXtldmVudDpmdW5jdGlvbihPbil7cmV0dXJuIE9uJiYodGhpcy5zb3VyY2VFdmVudD1PbiksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09''@;'; put 'put ''Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oT24senIpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09T24mJih0aGlzLm1vdXNlWzFdPXpyLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhp''@;'; put 'put ''cy50b3VjaDAmJiJ0b3VjaCIhPT1PbiYmKHRoaXMudG91Y2gwWzFdPXpyLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMVsxXT16ci5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPXpyLHRoaXMuZW1p''@;'; put 'put ''dCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihPbil7dmFyIHpyPXdzKHRoaXMudGhhdCkuZGF0dW0oKTtaLmNhbGwoT24s''@;'; put 'put ''dGhpcy50aGF0LG5ldyBYTXQoT24se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0OnB0LHR5cGU6T24sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6Wn0pLHpyKX19LHB0LndoZWVsRGVsdGE9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PyhkPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETigrT24pLHB0KTpkfSxwdC5maWx0ZXI9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETighIU9uKSxwdCk6Y30scHQudG91Y2hhYmxlPWZ1bmN0aW9uKE9uKXtyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oISFPbikscHQpOmh9LHB0LmV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOkROKFtbK09uWzBdWzBdLCtPblswXVsxXV0s''@;'; put 'put ''WytPblsxXVswXSwrT25bMV1bMV1dXSkscHQpOmx9LHB0LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZlswXT0rT25bMF0sZlsxXT0rT25bMV0scHQpOltmWzBdLGZbMV1dfSxwdC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPyh2WzBdWzBdPStPblswXVswXSx2WzFdWzBdPStPblsxXVswXSx2WzBdWzFdPStPblswXVsxXSx2WzFdWzFdPStPblsxXVsxXSxwdCk6W1t2WzBdWzBdLHZbMF1bMV1dLFt2WzFdWzBdLHZbMV1bMV1dXX0scHQuY29uc3RyYWluPWZ1bmN0aW9uKE9uKXtyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD8oYT1PbixwdCk6YX0scHQuZHVyYXRpb249ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPStPbixwdCk6TX0scHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPU9uLHB0KTpEfSxwdC5vbj1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBPbj1aLm9uLmFwcGx5KFosYXJndW1lbnRzKTtyZXR1cm4gT249PT1aP3B0Ok9ufSxwdC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocWU9KE9uPStPbikqT24scHQpOk1hdGguc3FydChxZSl9LHB0LnRhcERpc3RhbmNl''@;'; put 'put ''PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocnQ9K09uLHB0KTpydH0scHR9KCkuc2NhbGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQpLnRyYW5zbGF0ZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQpLmludGVycG9sYXRl''@;'; put 'put ''KExOKS5vbigiem9vbSIsZnVuY3Rpb24gbCh2KXt3cyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpLmF0dHIoInRyYW5zZm9ybSIsdi50cmFuc2Zvcm0pLGMuX2Rpc3BhdGNoLmNhbGwoInpvb20iLGMpfSk7dGhpcy5fem9vbUJlaGF2aW9yPWg7dmFyIGY9d3MoZC5ub2RlKCkucXVlcnlT''@;'; put 'put ''ZWxlY3RvcigiZyIpKTtyZXR1cm4gZC5jYWxsKGgpLHRoaXMuX2FjdGl2ZXx8UnRlLmNhbGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1STihkLm5vZGUoKSksdGhpc31mdW5jdGlvbiBJdGUoYyl7dmFyIGw9dGhpcy5fdHJhbnNsYXRpb24sYT10aGlzLl9zY2FsZSxkPWMuZGF0''@;'; put 'put ''dW0oKS50cmFuc2xhdGlvbixoPWMuZGF0dW0oKS5zY2FsZSxmPVJOKHRoaXMuX3pvb21TZWxlY3Rpb24ubm9kZSgpKTtyZXR1cm4gbCYmKGY9KGY9Zi5zY2FsZSgxL2EpKS50cmFuc2xhdGUoLWwueCwtbC55KSksKGY9Zi50cmFuc2xhdGUoZC54LGQueSkpLnNjYWxlKGgpfWZ1bmN0aW9uIFJ0''@;'; put 'put ''ZShjKXt0aGlzLl96b29tQmVoYXZpb3IudHJhbnNmb3JtKHRoaXMuX3pvb21TZWxlY3Rpb24sSXRlLmNhbGwodGhpcyxjKSksdGhpcy5fdHJhbnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1J''@;'; put 'put ''Ti50cmFuc2xhdGUoYy5kYXR1bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gbXh0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gTE4oW2RbMF1bMF0s''@;'; put 'put ''ZFswXVsxXV0sW2RbMV1bMF0sZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgpe3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1mdW5jdGlvbiBKOGUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09''@;'; put 'put ''Yy50YWcmJiJnIj09Yy5wYXJlbnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIFE4ZShjKXtyZXR1cm4gYy5wYXJlbnQmJko4ZShjLnBhcmVudCl9ZnVuY3Rpb24gZTdlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRp''@;'; put 'put ''b25zLmZhZGUmJm51bGwhPWwsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLHY9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9bCxNPXRoaXMu''@;'; put 'put ''X2F0dHJpYnV0ZXIsRD10aGlzO3ZhciBjZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7dmFyIGJlPXRoaXMuX2pvYnM7aWYoRC5fYWN0aXZlKXJldHVybiBiZS5wdXNoKG51bGwpLHRoaXM7Y2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtELl9hY3RpdmU9ITEsMCE9YmUubGVuZ3RoJiYoYmUuc2hpZnQoKSxELnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1sJiZjZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtELl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLEQpfSku''@;'; put 'put ''b24oImVuZCIsZnVuY3Rpb24oKXtELl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixEKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsRCksRC5fZGlzcGF0Y2guY2FsbCgiZW5kIixEKSxj''@;'; put 'put ''JiZjLmNhbGwoRCl9KTt2YXIgRWU9dGhpcy5fZGF0YSxCZT1jZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW0VlXSxmdW5jdGlvbihxZSl7cmV0dXJuIHFlLmtleX0pO3JldHVybiBCZT1CZS5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2UoQmUpLGZ1bmN0aW9uIHJlKHFlKXt2YXIgcnQ9d3Mo''@;'; put 'put ''dGhpcyk7aWYoInN2ZyI9PXFlLnRhZyl7dmFyIHB0PUQuX29wdGlvbnM7aWYobnVsbCE9cHQud2lkdGh8fG51bGwhPXB0LmhlaWdodCl7dmFyIGR0PXB0LndpZHRoLEp0PXB0LmhlaWdodDtudWxsPT1kdD9kdD00KnFlLmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOihydC5h''@;'; put 'put ''dHRyKCJ3aWR0aCIsZHQpLHFlLmF0dHJpYnV0ZXMud2lkdGg9ZHQpLG51bGw9PUp0P0p0PTQqcWUuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOihydC5hdHRyKCJoZWlnaHQiLEp0KSxxZS5hdHRyaWJ1dGVzLmhlaWdodD1KdCkscHQuZml0fHwocnQuYXR0cigidmlld0Jv''@;'; put 'put ''eCIsYDAgMCAkezMqZHQvNC9wdC5zY2FsZX0gJHszKkp0LzQvcHQuc2NhbGV9YCkscWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypKdC80L3B0LnNjYWxlfWApfTEhPXB0LnNjYWxlJiYocHQuZml0fHxudWxsPT1wdC53aWR0aCYmbnVsbD09cHQuaGVp''@;'; put 'put ''Z2h0KSYmKGR0PXFlLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLEp0PXFlLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLHJ0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtkdC9wdC5zY2FsZX0gJHtKdC9wdC5zY2FsZX1gKSxxZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAg''@;'; put 'put ''MCAke2R0L3B0LnNjYWxlfSAke0p0L3B0LnNjYWxlfWApfU0mJnJ0LmVhY2goTSk7dmFyIHZuPXFlLnRhZyxDbj1xZS5hdHRyaWJ1dGVzLHRuPXJ0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKHRuKWZvcih2YXIgTW49MDtNbjx0bi5sZW5ndGg7TW4rKyl7dmFyIENyPXRuW01uXSxHcj1Dci5uYW1l''@;'; put 'put ''O2lmKCJ4bWxucyIhPUdyLnNwbGl0KCI6IilbMF0mJkNyLm5hbWVzcGFjZVVSSSl7dmFyIG1yPUNyLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0dyPW1yW21yLmxlbmd0aC0xXSsiOiIrR3J9R3IgaW4gQ258fChDbltHcl09bnVsbCl9dmFyIGFpPSExLF9pPSExO2lmKGgmJmwpe2lmKCgicG9s''@;'; put 'put ''eWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJnFlLmFsdGVybmF0aXZlT2xkJiYoX2k9ITApLCgicG9seWdvbiI9PXZufHwiZWxsaXBzZSI9PXZuKSYmcWUuYWx0ZXJuYXRpdmVOZXcmJihhaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9s''@;'; put 'put ''eWdvbiI9PXZuJiZxZS5hbHRlcm5hdGl2ZU9sZCl7dmFyIE9uPSQ4ZShydCk7aWYoIWYpe3ZhciBKbj1Pbi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoSXI9cWUuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1KbiYmKGFpPSExLF9pPSExKX19aWYo''@;'; put 'put ''X2kpe3ZhciBlYT1LOGUocnQscWUuYWx0ZXJuYXRpdmVPbGQpO2VhLmRhdGEoW3FlXSxmdW5jdGlvbigpe3JldHVybiBxZS5rZXl9KSxydD1lYX1haSYmKHZuPSJwYXRoIixDbj1xZS5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgdnQ9cnQ7aWYobCYmKHZ0PXZ0LnRyYW5zaXRpb24o''@;'; put 'put ''bCksYSYmdnQuZmlsdGVyKGZ1bmN0aW9uKFpuKXtyZXR1cm4iIyI9PVpuLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksdnQuZmlsdGVyKGZ1bmN0aW9uKFpuKXtyZXR1cm4iIyI9PVpuLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihabil7d3ModGhp''@;'; put 'put ''cykuYXR0cigic3R5bGUiLFpuJiZabi5hdHRyaWJ1dGVzJiZabi5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSx2JiYicGF0aCI9PXZuJiZxZS5vZmZzZXQpe3ZhciBIdD1xZS50b3RhbExlbmd0aDtydC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixIdCsiICIrSHQpLmF0dHIoInN0cm9rZS1k''@;'; put 'put ''YXNob2Zmc2V0IixIdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcWUub2Zmc2V0LngrIiwiK3FlLm9mZnNldC55KyIpIiksQ25bInN0cm9rZS1kYXNob2Zmc2V0Il09MCxDbi50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIix2dC5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsQ25b''@;'; put 'put ''InN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsQ24udHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7d3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVs''@;'; put 'put ''bCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKHYmJiJwb2x5Z29uIj09dm4mJlE4ZShxZSkmJnFlLm9mZnNldCYmInBhdGgiPT1xZS5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgdHI9d3MocnQubm9kZSgpLnBhcmVudE5vZGUu''@;'; put 'put ''cXVlcnlTZWxlY3RvcigicGF0aCIpKSxhcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxIcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCkscXI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgtMSksb249MTgwKk1hdGguYXRh''@;'; put 'put ''bjIoSHIueS1xci55LEhyLngtcXIueCkvTWF0aC5QSSx5bj1hci54LUhyLngrcWUub2Zmc2V0LngscG49YXIueS1Ici55K3FlLm9mZnNldC55O3J0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3luKyIsIitwbisiKSIpLHZ0LmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihabil7dmFyIHNyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoKlpuKSxOcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCpabisxKSxNcj0xODAqTWF0aC5hdGFuMihOci55LXNyLnksTnIueC1zci54KS9N''@;'; put 'put ''YXRoLlBJLW9uO3JldHVybiJ0cmFuc2xhdGUoIisoeW49c3IueC1Ici54K3FlLm9mZnNldC54KigxLVpuKSkrIiwiKyhwbj1zci55LUhyLnkrcWUub2Zmc2V0LnkqKDEtWm4pKSsiKSByb3RhdGUoIitNcisiICIrSHIueCsiICIrSHIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe3dz''@;'; put 'put ''KHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBwcj1kJiZsJiYicGF0aCI9PXZuJiZudWxsIT1ydC5hdHRyKCJkIik7Zm9yKHZhciAkbiBvZiBPYmplY3Qua2V5cyhDbikpe3ZhciBk''@;'; put 'put ''cj1Dblskbl07aWYocHImJiJkIj09JG4pe3ZhciBJcjsoSXI9KHFlLmFsdGVybmF0aXZlT2xkfHxxZSkucG9pbnRzKSYmdnQuYXR0clR3ZWVuKCJkIixteHQoSXIsZHIpKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT0kbiYmcWUudHJhbnNsYXRpb24paWYobCl7dmFyIFVyPXZ0Lm9uKCJlbmQiKTt2''@;'; put 'put ''dC5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fem9vbUJlaGF2aW9yJiZ2dC50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIFpuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHNyKXtabi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsVDhlKFJOKEQuX3pvb21TZWxlY3Rpb24ubm9k''@;'; put 'put ''ZSgpKS50b1N0cmluZygpLEl0ZS5jYWxsKEQscnQpLnRvU3RyaW5nKCkpKHNyKSl9fSl9KS5vbigiZW5kIixmdW5jdGlvbigpe1VyLmNhbGwodGhpcyksRC5fem9vbUJlaGF2aW9yJiZSdGUuY2FsbChELHJ0KX0pfWVsc2UgRC5fem9vbUJlaGF2aW9yJiYoUnRlLmNhbGwoRCxydCksZHI9SXRl''@;'; put 'put ''LmNhbGwoRCxydCkudG9TdHJpbmcoKSk7dnQuYXR0cigkbixkcil9fWFpJiZ2dC5vbigiZW5kIixmdW5jdGlvbihabixzcixOcil7SzhlKGVhPXdzKHRoaXMpLFpuKS5kYXRhKFtabl0sZnVuY3Rpb24oKXtyZXR1cm4gWm4ua2V5fSl9KSxxZS50ZXh0JiZ2dC50ZXh0KHFlLnRleHQpLGZ1bmN0''@;'; put 'put ''aW9uIFoocWUpe3ZhciBydD1xZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gcWUubm9kZSgpLmNoaWxkTm9kZXN9KSxwdD0ocnQ9cnQuZGF0YShmdW5jdGlvbih2bil7cmV0dXJuIHZuLmNoaWxkcmVufSxmdW5jdGlvbih2bil7cmV0dXJuIHZuLmtleX0pKS5lbnRlcigpLmFwcGVuZChm''@;'; put 'put ''dW5jdGlvbih2bil7dmFyIENuPUF0ZSh2bik7cmV0dXJuIiN0ZXh0Ij09dm4udGFnJiZhJiYoQ24ubm9kZVZhbHVlPXZuLnRleHQpLENufSk7KGF8fHYmJko4ZShxZS5kYXR1bSgpKSkmJnB0LmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuIiMiPT12bi50YWdbMF0/bnVsbDp0aGlzfSkuZWFj''@;'; put 'put ''aChmdW5jdGlvbih2bil7dmFyIENuPXdzKHRoaXMpO2Zvcih2YXIgdG4gb2YgT2JqZWN0LmtleXModm4uYXR0cmlidXRlcykpQ24uYXR0cih0bix2bi5hdHRyaWJ1dGVzW3RuXSl9KS5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiJzdmciPT12bi50YWd8fCJnIj09dm4udGFnP251bGw6dGhp''@;'; put 'put ''c30pLnN0eWxlKCJvcGFjaXR5IiwwKTt2YXIgSnQ9cnQuZXhpdCgpO00mJkp0LmVhY2goTSksbCYmKEp0PUp0LnRyYW5zaXRpb24obCksYSYmSnQuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4iIyI9PXZuLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCkpLEp0PUp0LnJl''@;'; put 'put ''bW92ZSgpLChydD1wdC5tZXJnZShydCkub3JkZXIoKSkuZWFjaChyZSl9KHJ0KX0uY2FsbChCZS5ub2RlKCksRWUpLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvciYmWDhlLmNhbGwodGhpcyksRC5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixEKSxudWxsPT1sJiYo''@;'; put 'put ''dGhpcy5fZGlzcGF0Y2guY2FsbCgiZW5kIix0aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9Uk4ucHJvdG90eXBlPUpnLnByb3RvdHlwZTt2YXIgTkEsRnRlLFN4dD1BcnJheUJ1ZmZlcixJdT1VaW50OEFycmF5LE9OPVVpbnQxNkFycmF5LE14dD1JbnQxNkFycmF5LFBOPUludDMyQXJyYXks''@;'; put 'put ''THRlPWZ1bmN0aW9uKGMsbCxhKXtpZihJdS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIEl1LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDwwKSYmKGw9MCksKG51bGw9PWF8fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IEl1KGEtbCk7cmV0dXJuIGQu''@;'; put 'put ''c2V0KGMuc3ViYXJyYXkobCxhKSksZH0sUEE9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoSXUucHJvdG90eXBlLmZpbGwpcmV0dXJuIEl1LnByb3RvdHlwZS5maWxsLmNhbGwoYyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3Ro''@;'; put 'put ''KTthPGQ7KythKWNbYV09bDtyZXR1cm4gY30seHh0PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKEl1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBJdS5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5n''@;'; put 'put ''dGgpJiYoZD1jLmxlbmd0aCk7YTxkOyljW2wrK109Y1thKytdfSxFeHQ9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFy''@;'; put 'put ''IGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLGUwPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8RXh0W2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxlMCksIWEpdGhyb3cgZDtyZXR1cm4gZH0sdDdlPWZ1''@;'; put 'put ''bmN0aW9uKGMsbCxhKXtmb3IodmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0sQXh0PWZ1bmN0aW9uKGMsbCl7dmFyIGE9Y1swXXxjWzFdPDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWEmJjI1Mz09Y1szXSl7dmFyIGQ9Y1s0XSxoPWQ+PjUmMSxmPWQ+PjIm''@;'; put 'put ''MSx2PTMmZCxNPWQ+PjY7OCZkJiZlMCgwKTt2YXIgRD02LWgsWj0zPT12PzQ6dixyZT10N2UoYyxELFopLGNlPU0/MTw8TTpoLGJlPXQ3ZShjLEQrPVosY2UpKygxPT1NJiYyNTYpLEVlPWJlO2lmKCFoKXt2YXIgQmU9MTw8MTArKGNbNV0+PjMpO0VlPUJlKyhCZT4+MykqKDcmY1s1XSl9RWU+''@;'; put 'put ''MjE0NTM4NjQ5NiYmZTAoMSk7dmFyIHFlPW5ldyBJdSgoMT09bD9iZXx8RWU6bD8wOkVlKSsxMik7cmV0dXJuIHFlWzBdPTEscWVbNF09NCxxZVs4XT04LHtiOkQrY2UseTowLGw6MCxkOnJlLHc6bCYmMSE9bD9sOnFlLnN1YmFycmF5KDEyKSxlOkVlLG86bmV3IFBOKHFlLmJ1ZmZlciwwLDMp''@;'; put 'put ''LHU6YmUsYzpmLG06TWF0aC5taW4oMTMxMDcyLEVlKX19aWYoMjU0ODE4OTM9PShhPj40fGNbM108PDIwKSlyZXR1cm4gZnVuY3Rpb24oYyxsKXtyZXR1cm4oY1s0XXxjWzVdPDw4fGNbNl08PDE2fGNbN108PDI0KT4+PjB9KGMpKzg7ZTAoMCl9LHJ2PWZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0w''@;'; put 'put ''OzE8PGw8PWM7KytsKTtyZXR1cm4gbC0xfSxGQT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NCsobDw8MyksaD01KygxNSZjW2xdKTtoPmEmJmUwKDMpO2Zvcih2YXIgZj0xPDxoLHY9ZixNPS0xLEQ9LTEsWj0tMSxyZT1mLGNlPW5ldyBTeHQoNTEyKyhmPDwyKSksYmU9bmV3IE14dChjZSwwLDI1''@;'; put 'put ''NiksRWU9bmV3IE9OKGNlLDAsMjU2KSxCZT1uZXcgT04oY2UsNTEyLGYpLHFlPTUxMisoZjw8MSkscnQ9bmV3IEl1KGNlLHFlLGYpLHB0PW5ldyBJdShjZSxxZStmKTtNPDI1NSYmdj4wOyl7dmFyIGR0PXJ2KHYrMSksSnQ9ZD4+Myx2bj0oMTw8ZHQrMSktMSxDbj0oY1tKdF18Y1tKdCsxXTw8''@;'; put 'put ''OHxjW0p0KzJdPDwxNik+Pig3JmQpJnZuLHRuPSgxPDxkdCktMSxNbj12bi12LTEsQ3I9Q24mdG47aWYoQ3I8TW4/KGQrPWR0LENuPUNyKTooZCs9ZHQrMSxDbj50biYmKENuLT1NbikpLGJlWysrTV09LS1DbiwtMT09Q24/KHYrPUNuLHJ0Wy0tcmVdPU0pOnYtPUNuLCFDbilkb3t2YXIgR3I9''@;'; put 'put ''ZD4+MztEPShjW0dyXXxjW0dyKzFdPDw4KT4+KDcmZCkmMyxkKz0yLE0rPUR9d2hpbGUoMz09RCl9KE0+MjU1fHx2KSYmZTAoMCk7Zm9yKHZhciBtcj0wLEduPShmPj4xKSsoZj4+MykrMyxhaT1mLTEsX2k9MDtfaTw9TTsrK19pKXt2YXIgT249YmVbX2ldO2lmKE9uPDEpRWVbX2ldPS1Pbjtl''@;'; put 'put ''bHNlIGZvcihaPTA7WjxPbjsrK1ope3J0W21yXT1faTtkb3ttcj1tcitHbiZhaX13aGlsZShtcj49cmUpfX1mb3IobXImJmUwKDApLFo9MDtaPGY7KytaKXt2YXIgenI9RWVbcnRbWl1dKyssSm49cHRbWl09aC1ydih6cik7QmVbWl09KHpyPDxKbiktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczpy''@;'; put 'put ''dCxuOnB0LHQ6QmV9XX0sRHh0PUZBKG5ldyBJdShbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLEl4dD1GQShuZXcgSXUoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2''@;'; put 'put ''LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sUnh0PUZBKG5ldyBJdShbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1KVsxXSxuN2U9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgUE4oYSksaD0wO2g8''@;'; put 'put ''YTsrK2gpZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJuIGR9LE90ZT1uZXcgSXUobmV3IFBOKFswLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDEzNDY3ODAyMCwyMDIwNTAwNTcsMjY5NDIyMDkzXSkuYnVmZmVyLDAsMzYpLEx4dD1uN2UoT3RlLDApLFB0ZT1uZXcgSXUobmV3IFBOKFswLDAsMCww''@;'; put 'put ''LDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksT3h0PW43ZShQdGUsMyksSEE9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPWMubGVuZ3RoLGg9bC5sZW5ndGgsZj1jW2QtMV0sdj0oMTw8YS5iKS0xLE09LWEuYjtm''@;'; put 'put ''fHxlMCgwKTtmb3IodmFyIEQ9MCxaPWEuYixyZT0oZDw8MyktOCtydihmKS1aLGNlPS0xO3JlPk0mJmNlPGg7KXt2YXIgYmU9cmU+PjM7bFsrK2NlXT1hLnNbRD0oRDw8WnwoY1tiZV18Y1tiZSsxXTw8OHxjW2JlKzJdPDwxNik+Pig3JnJlKSkmdl0scmUtPVo9YS5uW0RdfShyZSE9TXx8Y2Ur''@;'; put 'put ''MSE9aCkmJmUwKDApfSxQeHQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTYsZj1sLmxlbmd0aCszPj4yLHY9Zjw8MSxNPWYrdjtIQShjLnN1YmFycmF5KGQsZCs9Y1swXXxjWzFdPDw4KSxsLnN1YmFycmF5KDAsZiksYSksSEEoYy5zdWJhcnJheShkLGQrPWNbMl18Y1szXTw8OCksbC5zdWJhcnJh''@;'; put 'put ''eShmLHYpLGEpLEhBKGMuc3ViYXJyYXkoZCxkKz1jWzRdfGNbNV08PDgpLGwuc3ViYXJyYXkodixNKSxhKSxIQShjLnN1YmFycmF5KGQpLGwuc3ViYXJyYXkoTSksYSl9LEZ4dD1mdW5jdGlvbihjLGwsYSl7dmFyIGQsaD1sLmIsZj1jW2hdLHY9Zj4+MSYzO2wubD0xJmY7dmFyIE09Zj4+M3xj''@;'; put 'put ''W2grMV08PDV8Y1toKzJdPDwxMyxEPShoKz0zKStNO2lmKDE9PXYpcmV0dXJuIGg+PWMubGVuZ3RoP3ZvaWQgMDoobC5iPWgrMSxhPyhQQShhLGNbaF0sbC55LGwueSs9TSksYSk6UEEobmV3IEl1KE0pLGNbaF0pKTtpZighKEQ+Yy5sZW5ndGgpKXtpZigwPT12KXJldHVybiBsLmI9RCxhPyhh''@;'; put 'put ''LnNldChjLnN1YmFycmF5KGgsRCksbC55KSxsLnkrPU0sYSk6THRlKGMsaCxEKTtpZigyPT12KXt2YXIgWj1jW2hdLHJlPTMmWixjZT1aPj4yJjMsYmU9Wj4+NCxFZT0wLEJlPTA7cmU8Mj8xJmNlP2JlfD1jWysraF08PDR8KDImY2UmJmNbKytoXTw8MTIpOmJlPVo+PjM6KEJlPWNlLGNlPDI/''@;'; put 'put ''KGJlfD0oNjMmY1srK2hdKTw8NCxFZT1jW2hdPj42fGNbKytoXTw8Mik6Mj09Y2U/KGJlfD1jWysraF08PDR8KDMmY1srK2hdKTw8MTIsRWU9Y1toXT4+MnxjWysraF08PDYpOihiZXw9Y1srK2hdPDw0fCg2MyZjWysraF0pPDwxMixFZT1jW2hdPj42fGNbKytoXTw8MnxjWysraF08PDEwKSks''@;'; put 'put ''KytoO3ZhciBxZT1hP2Euc3ViYXJyYXkobC55LGwueStsLm0pOm5ldyBJdShsLm0pLHJ0PXFlLmxlbmd0aC1iZTtpZigwPT1yZSlxZS5zZXQoYy5zdWJhcnJheShoLGgrPWJlKSxydCk7ZWxzZSBpZigxPT1yZSlQQShxZSxjW2grK10scnQpO2Vsc2V7dmFyIHB0PWwuaDtpZigyPT1yZSl7dmFy''@;'; put 'put ''IGR0PWZ1bmN0aW9uKGMsbCl7dmFyIGE9MCxkPS0xLGg9bmV3IEl1KDI5MiksZj1jW2xdLHY9aC5zdWJhcnJheSgwLDI1NiksTT1oLnN1YmFycmF5KDI1NiwyNjgpLEQ9bmV3IE9OKGguYnVmZmVyLDI2OCk7aWYoZjwxMjgpe3ZhciBaPUZBKGMsbCsxLDYpLGNlPVpbMV0sYmU9WlswXTw8MyxF''@;'; put 'put ''ZT1jW2wrPWZdO0VlfHxlMCgwKTtmb3IodmFyIEJlPTAscWU9MCxydD1jZS5iLHB0PXJ0LGR0PSgrK2w8PDMpLTgrcnYoRWUpOyEoKGR0LT1ydCk8YmUpOyl7dmFyIEp0PWR0Pj4zO2lmKHZbKytkXT1jZS5zW0JlKz0oY1tKdF18Y1tKdCsxXTw8OCk+Pig3JmR0KSYoMTw8cnQpLTFdLChkdC09''@;'; put 'put ''cHQpPGJlKWJyZWFrO3ZbKytkXT1jZS5zW3FlKz0oY1tKdD1kdD4+M118Y1tKdCsxXTw8OCk+Pig3JmR0KSYoMTw8cHQpLTFdLHJ0PWNlLm5bQmVdLEJlPWNlLnRbQmVdLHB0PWNlLm5bcWVdLHFlPWNlLnRbcWVdfSsrZD4yNTUmJmUwKDApfWVsc2V7Zm9yKGQ9Zi0xMjc7YTxkO2ErPTIpe3Zh''@;'; put 'put ''ciB2bj1jWysrbF07dlthXT12bj4+NCx2W2ErMV09MTUmdm59KytsfXZhciBDbj0wO2ZvcihhPTA7YTxkOysrYSkodG49dlthXSk+MTEmJmUwKDApLENuKz10biYmMTw8dG4tMTt2YXIgTW49cnYoQ24pKzEsQ3I9MTw8TW4sR3I9Q3ItQ247Zm9yKEdyJkdyLTEmJmUwKDApLHZbZCsrXT1ydihH''@;'; put 'put ''cikrMSxhPTA7YTxkOysrYSl7dmFyIHRuOysrTVt2W2FdPSh0bj12W2FdKSYmTW4rMS10bl19dmFyIG1yPW5ldyBJdShDcjw8MSksR249bXIuc3ViYXJyYXkoMCxDciksYWk9bXIuc3ViYXJyYXkoQ3IpO2ZvcihEW01uXT0wLGE9TW47YT4wOy0tYSl7dmFyIF9pPURbYV07UEEoYWksYSxfaSxE''@;'; put 'put ''W2EtMV09X2krTVthXSooMTw8TW4tYSkpfWZvcihEWzBdIT1DciYmZTAoMCksYT0wO2E8ZDsrK2Epe3ZhciBPbj12W2FdO2lmKE9uKXt2YXIgenI9RFtPbl07UEEoR24sYSx6cixEW09uXT16cisoMTw8TW4tT24pKX19cmV0dXJuW2wse246YWksYjpNbixzOkdufV19KGMsaCk7RWUrPWgtKGg9''@;'; put 'put ''ZHRbMF0pLGwuaD1wdD1kdFsxXX1lbHNlIHB0fHxlMCgwKTsoQmU/UHh0OkhBKShjLnN1YmFycmF5KGgsaCs9RWUpLHFlLnN1YmFycmF5KHJ0KSxwdCl9dmFyIEp0PWNbaCsrXTtpZihKdCl7MjU1PT1KdD9KdD0zMjUxMisoY1toKytdfGNbaCsrXTw8OCk6SnQ+MTI3JiYoSnQ9SnQtMTI4PDw4''@;'; put 'put ''fGNbaCsrXSk7dmFyIHZuPWNbaCsrXTszJnZuJiZlMCgwKTtmb3IodmFyIENuPVtJeHQsUnh0LER4dF0sdG49Mjt0bj4tMTstLXRuKXt2YXIgTW49dm4+PjIrKHRuPDwxKSYzO2lmKDE9PU1uKXt2YXIgQ3I9bmV3IEl1KFswLDAsY1toKytdXSk7Q25bdG5dPXtzOkNyLnN1YmFycmF5KDIsMyks''@;'; put 'put ''bjpDci5zdWJhcnJheSgwLDEpLHQ6bmV3IE9OKENyLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT1Nbj8oaD0oZD1GQShjLGgsOS0oMSZ0bikpKVswXSxDblt0bl09ZFsxXSk6Mz09TW4mJihsLnR8fGUwKDApLENuW3RuXT1sLnRbdG5dKX12YXIgR3I9bC50PUNuLG1yPUdyWzBdLEduPUdyWzFd''@;'; put 'put ''LGFpPUdyWzJdLF9pPWNbRC0xXTtfaXx8ZTAoMCk7dmFyIE9uPShEPDwzKS04K3J2KF9pKS1haS5iLHpyPU9uPj4zLEpuPTAsSXI9KGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PGFpLmIpLTEsJHI9KGNbenI9KE9uLT1Hbi5iKT4+M118Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8R24u''@;'; put 'put ''YiktMSx3aT0oY1t6cj0oT24tPW1yLmIpPj4zXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxtci5iKS0xO2ZvcigrK0p0Oy0tSnQ7KXt2YXIgZWE9YWkuc1tJcl0sZmE9YWkubltJcl0sdnQ9bXIuc1t3aV0sTnQ9bXIublt3aV0sSHQ9R24uc1skcl0sSG49R24ublskcl0sdHI9MTw8SHQsYXI9''@;'; put 'put ''dHIrKChjW3pyPShPbi09SHQpPj4zXXxjW3pyKzFdPDw4fGNbenIrMl08PDE2fGNbenIrM108PDI0KT4+Pig3Jk9uKSZ0ci0xKTt6cj0oT24tPVB0ZVt2dF0pPj4zO3ZhciBIcj1PeHRbdnRdKygoY1t6cl18Y1t6cisxXTw8OHxjW3pyKzJdPDwxNik+Pig3Jk9uKSYoMTw8UHRlW3Z0XSktMSk7''@;'; put 'put ''enI9KE9uLT1PdGVbZWFdKT4+Mzt2YXIgcXI9THh0W2VhXSsoKGNbenJdfGNbenIrMV08PDh8Y1t6cisyXTw8MTYpPj4oNyZPbikmKDE8PE90ZVtlYV0pLTEpO2lmKHpyPShPbi09ZmEpPj4zLElyPWFpLnRbSXJdKygoY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8ZmEpLTEpLHpyPShP''@;'; put 'put ''bi09TnQpPj4zLHdpPW1yLnRbd2ldKygoY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8TnQpLTEpLHpyPShPbi09SG4pPj4zLCRyPUduLnRbJHJdKygoY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8SG4pLTEpLGFyPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1sw''@;'; put 'put ''XT1hci09MztlbHNle3ZhciBvbj1hci0oMCE9cXIpO29uPyhhcj0zPT1vbj9sLm9bMF0tMTpsLm9bb25dLG9uPjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT1hcik6YXI9bC5vWzBdfWZvcih0bj0wO3RuPHFyOysrdG4pcWVbSm4rdG5dPXFlW3J0K3RuXTtydCs9cXI7''@;'; put 'put ''dmFyIHluPShKbis9cXIpLWFyO2lmKHluPDApe3ZhciBwbj0teW4scHI9bC5lK3luO2Zvcihwbj5IciYmKHBuPUhyKSx0bj0wO3RuPHBuOysrdG4pcWVbSm4rdG5dPWwud1twcit0bl07Sm4rPXBuLEhyLT1wbix5bj0wfWZvcih0bj0wO3RuPEhyOysrdG4pcWVbSm4rdG5dPXFlW3luK3RuXTtK''@;'; put 'put ''bis9SHJ9aWYoSm4hPXJ0KWZvcig7cnQ8cWUubGVuZ3RoOylxZVtKbisrXT1xZVtydCsrXTtlbHNlIEpuPXFlLmxlbmd0aDthP2wueSs9Sm46cWU9THRlKHFlLDAsSm4pfWVsc2UgaWYoYSl7aWYobC55Kz1iZSxydClmb3IodG49MDt0bjxiZTsrK3RuKXFlW3RuXT1xZVtydCt0bl19ZWxzZSBy''@;'; put 'put ''dCYmKHFlPUx0ZShxZSxydCkpO3JldHVybiBsLmI9RCxxZX1lMCgyKX19LEJ4dD0odHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQsZnVuY3Rpb24obD17fSl7dmFyIGgsZixCZSxkPWwsdj1uZXcgUHJvbWlzZSgoWmUsbHQpPT57aD1aZSxmPWx0fSksRD1PYmplY3QuYXNzaWduKHt9LGQp''@;'; put 'put ''LHFlPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkscnQ9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxEKSxEPW51bGw7dmFyIGR0LHRuLE1uLENyLG1yLEduLF9pLHB0PWQud2FzbUJpbmFyeSxKdD0hMTtmdW5jdGlvbiBDbihaZSxsdCl7WmV8fHFyKGx0KX1m''@;'; put 'put ''dW5jdGlvbiBPbigpe3ZhciBaZT1kdC5idWZmZXI7ZC5IRUFQOD10bj1uZXcgSW50OEFycmF5KFplKSxkLkhFQVAxNj1Dcj1uZXcgSW50MTZBcnJheShaZSksZC5IRUFQVTg9TW49bmV3IFVpbnQ4QXJyYXkoWmUpLGQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoWmUpLGQuSEVBUDMyPW1yPW5l''@;'; put 'put ''dyBJbnQzMkFycmF5KFplKSxkLkhFQVBVMzI9R249bmV3IFVpbnQzMkFycmF5KFplKSxkLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShaZSksZC5IRUFQRjY0PV9pPW5ldyBGbG9hdDY0QXJyYXkoWmUpfXZhciB6cj1bXSxKbj1bXSxJcj1bXSxOdD0wLEh0PW51bGwsSG49bnVsbDtmdW5jdGlv''@;'; put 'put ''biBhcihaZSl7TnQrK31mdW5jdGlvbiBIcihaZSl7aWYoMD09LS1OdCYmKG51bGwhPT1IdCYmKGNsZWFySW50ZXJ2YWwoSHQpLEh0PW51bGwpLEhuKSl7dmFyIGx0PUhuO0huPW51bGwsbHQoKX19ZnVuY3Rpb24gcXIoWmUpe3J0KFplPSJBYm9ydGVkKCIrWmUrIikiKSxKdD0hMCxaZSs9Ii4g''@;'; put 'put ''QnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBsdD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKFplKTt0aHJvdyBmKGx0KSxsdH12YXIgJG4seW49WmU9PlplLnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKTtm''@;'; put 'put ''dW5jdGlvbiBkcihaZSl7aWYoWmU9PSRuJiZwdClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocHQpO2lmKEJlKXJldHVybiBCZShaZSk7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWZ1bmN0aW9uIFpuKFplLGx0LEx0KXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gVXIoWmUpe3JldHVybiBwdD9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5kcihaZSkpOih2b2lkIDApKFplKS50aGVuKGx0PT5uZXcgVWludDhBcnJheShsdCksKCk9PmRyKFplKSl9KFplKS50aGVuKCR0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgkdCxsdCkpLnRoZW4oTHQsJHQ9''@;'; put 'put ''PntydChgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHskdH1gKSxxcigkdCl9KX12YXIgWnIsYWEsQmE9ezE3MzA2NDooWmUsbHQpPT57dmFyIEx0PXYwKFplKSwkdD12MChsdCk7WXQuY3JlYXRlUGF0aCgiLyIsUW8uZGlybmFtZShMdCkpLFl0LndyaXRlRmlsZShR''@;'; put 'put ''by5qb2luKCIvIixMdCksJHQpfX07Y2xhc3MgSW97bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IobHQpe3RoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2x0fSlgLHRoaXMuc3RhdHVzPWx0fX12YXIgWm89WmU9Pntmb3IoO1plLmxlbmd0aD4wOylaZS5z''@;'; put 'put ''aGlmdCgpKGQpfTtjbGFzcyBwc3tjb25zdHJ1Y3RvcihsdCl7dGhpcy5leGNQdHI9bHQsdGhpcy5wdHI9bHQtMjR9c2V0X3R5cGUobHQpe0duW3RoaXMucHRyKzQ+PjJdPWx0fWdldF90eXBlKCl7cmV0dXJuIEduW3RoaXMucHRyKzQ+PjJdfXNldF9kZXN0cnVjdG9yKGx0KXtHblt0aGlzLnB0''@;'; put 'put ''cis4Pj4yXT1sdH1nZXRfZGVzdHJ1Y3Rvcigpe3JldHVybiBHblt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KGx0KXt0blt0aGlzLnB0cisxMl09bHQ9bHQ/MTowfWdldF9jYXVnaHQoKXtyZXR1cm4gMCE9dG5bdGhpcy5wdHIrMTJdfXNldF9yZXRocm93bihsdCl7dG5bdGhpcy5wdHIrMTNd''@;'; put 'put ''PWx0PWx0PzE6MH1nZXRfcmV0aHJvd24oKXtyZXR1cm4gMCE9dG5bdGhpcy5wdHIrMTNdfWluaXQobHQsTHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGx0KSx0aGlzLnNldF9kZXN0cnVjdG9yKEx0KX1zZXRfYWRqdXN0ZWRfcHRyKGx0KXtHblt0aGlzLnB0cisx''@;'; put 'put ''Nj4+Ml09bHR9Z2V0X2FkanVzdGVkX3B0cigpe3JldHVybiBHblt0aGlzLnB0cisxNj4+Ml19fXZhciBRbz17aXNBYnM6WmU9PiIvIj09PVplLmNoYXJBdCgwKSxzcGxpdFBhdGg6WmU9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9d''@;'; put 'put ''KikkLy5leGVjKFplKS5zbGljZSgxKSxub3JtYWxpemVBcnJheTooWmUsbHQpPT57Zm9yKHZhciBMdD0wLCR0PVplLmxlbmd0aC0xOyR0Pj0wOyR0LS0pe3ZhciBEbj1aZVskdF07Ii4iPT09RG4/WmUuc3BsaWNlKCR0LDEpOiIuLiI9PT1Ebj8oWmUuc3BsaWNlKCR0LDEpLEx0KyspOkx0JiYo''@;'; put 'put ''WmUuc3BsaWNlKCR0LDEpLEx0LS0pfWlmKGx0KWZvcig7THQ7THQtLSlaZS51bnNoaWZ0KCIuLiIpO3JldHVybiBaZX0sbm9ybWFsaXplOlplPT57dmFyIGx0PVFvLmlzQWJzKFplKSxMdD0iLyI9PT1aZS5zdWJzdHIoLTEpO3JldHVybiEoWmU9UW8ubm9ybWFsaXplQXJyYXkoWmUuc3BsaXQo''@;'; put 'put ''Ii8iKS5maWx0ZXIoJHQ9PiEhJHQpLCFsdCkuam9pbigiLyIpKSYmIWx0JiYoWmU9Ii4iKSxaZSYmTHQmJihaZSs9Ii8iKSwobHQ/Ii8iOiIiKStaZX0sZGlybmFtZTpaZT0+e3ZhciBsdD1Rby5zcGxpdFBhdGgoWmUpLEx0PWx0WzBdLCR0PWx0WzFdO3JldHVybiBMdHx8JHQ/KCR0JiYoJHQ9''@;'; put 'put ''JHQuc3Vic3RyKDAsJHQubGVuZ3RoLTEpKSxMdCskdCk6Ii4ifSxiYXNlbmFtZTpaZT0+e2lmKCIvIj09PVplKXJldHVybiIvIjt2YXIgbHQ9KFplPShaZT1Rby5ub3JtYWxpemUoWmUpKS5yZXBsYWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWx0P1plOlplLnN1''@;'; put 'put ''YnN0cihsdCsxKX0sam9pbjooLi4uWmUpPT5Rby5ub3JtYWxpemUoWmUuam9pbigiLyIpKSxqb2luMjooWmUsbHQpPT5Rby5ub3JtYWxpemUoWmUrIi8iK2x0KX0sYWQ9WmU9PihhZD0oKCk9PntpZigib2JqZWN0Ij09dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5n''@;'; put 'put ''ZXRSYW5kb21WYWx1ZXMpcmV0dXJuIFplPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFplKTtxcigiaW5pdFJhbmRvbURldmljZSIpfSkoKSkoWmUpLFVzPXtyZXNvbHZlOiguLi5aZSk9Pntmb3IodmFyIGx0PSIiLEx0PSExLCR0PVplLmxlbmd0aC0xOyR0Pj0tMSYmIUx0OyR0LS0pe3ZhciBE''@;'; put 'put ''bj0kdD49MD9aZVskdF06WXQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBEbil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCFEbilyZXR1cm4iIjtsdD1EbisiLyIrbHQsTHQ9UW8uaXNBYnMoRG4pfXJldHVybihM''@;'; put 'put ''dD8iLyI6IiIpKyhsdD1Rby5ub3JtYWxpemVBcnJheShsdC5zcGxpdCgiLyIpLmZpbHRlcihjcj0+ISFjciksIUx0KS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOihaZSxsdCk9PntmdW5jdGlvbiBMdChHbyl7Zm9yKHZhciBIcz0wO0hzPEdvLmxlbmd0aCYmIiI9PT1Hb1tIc107SHMrKyk7''@;'; put 'put ''Zm9yKHZhciBhbD1Hby5sZW5ndGgtMTthbD49MCYmIiI9PT1Hb1thbF07YWwtLSk7cmV0dXJuIEhzPmFsP1tdOkdvLnNsaWNlKEhzLGFsLUhzKzEpfVplPVVzLnJlc29sdmUoWmUpLnN1YnN0cigxKSxsdD1Vcy5yZXNvbHZlKGx0KS5zdWJzdHIoMSk7Zm9yKHZhciAkdD1MdChaZS5zcGxpdCgi''@;'; put 'put ''LyIpKSxEbj1MdChsdC5zcGxpdCgiLyIpKSxjcj1NYXRoLm1pbigkdC5sZW5ndGgsRG4ubGVuZ3RoKSxScj1jcixYcj0wO1hyPGNyO1hyKyspaWYoJHRbWHJdIT09RG5bWHJdKXtScj1YcjticmVha312YXIga2E9W107Zm9yKFhyPVJyO1hyPCR0Lmxlbmd0aDtYcisrKWthLnB1c2goIi4uIik7''@;'; put 'put ''cmV0dXJuKGthPWthLmNvbmNhdChEbi5zbGljZShScikpKS5qb2luKCIvIil9fSxKYz10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2Rlcjp2b2lkIDAscXM9KFplLGx0PTAsTHQ9TmFOKT0+e2Zvcih2YXIgJHQ9bHQrTHQsRG49bHQ7WmVbRG5dJiYhKERuPj0kdCk7KSsrRG47''@;'; put 'put ''aWYoRG4tbHQ+MTYmJlplLmJ1ZmZlciYmSmMpcmV0dXJuIEpjLmRlY29kZShaZS5zdWJhcnJheShsdCxEbikpO2Zvcih2YXIgY3I9IiI7bHQ8RG47KXt2YXIgUnI9WmVbbHQrK107aWYoMTI4JlJyKXt2YXIgWHI9NjMmWmVbbHQrK107aWYoMTkyIT0oMjI0JlJyKSl7dmFyIGthPTYzJlplW2x0''@;'; put 'put ''KytdO2lmKChScj0yMjQ9PSgyNDAmUnIpPygxNSZScik8PDEyfFhyPDw2fGthOig3JlJyKTw8MTh8WHI8PDEyfGthPDw2fDYzJlplW2x0KytdKTw2NTUzNiljcis9U3RyaW5nLmZyb21DaGFyQ29kZShScik7ZWxzZXt2YXIgR289UnItNjU1MzY7Y3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUy''@;'; put 'put ''OTZ8R28+PjEwLDU2MzIwfDEwMjMmR28pfX1lbHNlIGNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZScik8PDZ8WHIpfWVsc2UgY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnIpfXJldHVybiBjcn0sQmw9W10sZXM9WmU9Pntmb3IodmFyIGx0PTAsTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl7''@;'; put 'put ''dmFyICR0PVplLmNoYXJDb2RlQXQoTHQpOyR0PD0xMjc/bHQrKzokdDw9MjA0Nz9sdCs9MjokdD49NTUyOTYmJiR0PD01NzM0Mz8obHQrPTQsKytMdCk6bHQrPTN9cmV0dXJuIGx0fSxFMT0oWmUsbHQsTHQsJHQpPT57aWYoISgkdD4wKSlyZXR1cm4gMDtmb3IodmFyIERuPUx0LGNyPUx0KyR0''@;'; put 'put ''LTEsUnI9MDtScjxaZS5sZW5ndGg7KytScil7dmFyIFhyPVplLmNoYXJDb2RlQXQoUnIpO2lmKFhyPj01NTI5NiYmWHI8PTU3MzQzJiYoWHI9NjU1MzYrKCgxMDIzJlhyKTw8MTApfDEwMjMmWmUuY2hhckNvZGVBdCgrK1JyKSksWHI8PTEyNyl7aWYoTHQ+PWNyKWJyZWFrO2x0W0x0KytdPVhy''@;'; put 'put ''fWVsc2UgaWYoWHI8PTIwNDcpe2lmKEx0KzE+PWNyKWJyZWFrO2x0W0x0KytdPTE5MnxYcj4+NixsdFtMdCsrXT0xMjh8NjMmWHJ9ZWxzZSBpZihYcjw9NjU1MzUpe2lmKEx0KzI+PWNyKWJyZWFrO2x0W0x0KytdPTIyNHxYcj4+MTIsbHRbTHQrK109MTI4fFhyPj42JjYzLGx0W0x0KytdPTEy''@;'; put 'put ''OHw2MyZYcn1lbHNle2lmKEx0KzM+PWNyKWJyZWFrO2x0W0x0KytdPTI0MHxYcj4+MTgsbHRbTHQrK109MTI4fFhyPj4xMiY2MyxsdFtMdCsrXT0xMjh8WHI+PjYmNjMsbHRbTHQrK109MTI4fDYzJlhyfX1yZXR1cm4gbHRbTHRdPTAsTHQtRG59LGQ0PXt0dHlzOltdLGluaXQoKXt9LHNodXRk''@;'; put 'put ''b3duKCl7fSxyZWdpc3RlcihaZSxsdCl7ZDQudHR5c1taZV09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6bHR9LFl0LnJlZ2lzdGVyRGV2aWNlKFplLGQ0LnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuKFplKXt2YXIgbHQ9ZDQudHR5c1taZS5ub2RlLnJkZXZdO2lmKCFsdCl0aHJvdyBu''@;'; put 'put ''ZXcgWXQuRXJybm9FcnJvcig0Myk7WmUudHR5PWx0LFplLnNlZWthYmxlPSExfSxjbG9zZShaZSl7WmUudHR5Lm9wcy5mc3luYyhaZS50dHkpfSxmc3luYyhaZSl7WmUudHR5Lm9wcy5mc3luYyhaZS50dHkpfSxyZWFkKFplLGx0LEx0LCR0LERuKXtpZighWmUudHR5fHwhWmUudHR5Lm9wcy5n''@;'; put 'put ''ZXRfY2hhcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBjcj0wLFJyPTA7UnI8JHQ7UnIrKyl7dmFyIFhyO3RyeXtYcj1aZS50dHkub3BzLmdldF9jaGFyKFplLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PVhyJiYwPT09Y3Ip''@;'; put 'put ''dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNik7aWYobnVsbD09WHIpYnJlYWs7Y3IrKyxsdFtMdCtScl09WHJ9cmV0dXJuIGNyJiYoWmUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksY3J9LHdyaXRlKFplLGx0LEx0LCR0LERuKXtpZighWmUudHR5fHwhWmUudHR5Lm9wcy5wdXRfY2hhcil0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgY3I9MDtjcjwkdDtjcisrKVplLnR0eS5vcHMucHV0X2NoYXIoWmUudHR5LGx0W0x0K2NyXSl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfXJldHVybiAkdCYmKFplLm5vZGUudGltZXN0YW1wPURhdGUubm93''@;'; put 'put ''KCkpLGNyfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjpaZT0+QmwubGVuZ3RoP0JsLnNoaWZ0KCk6bnVsbCxwdXRfY2hhcihaZSxsdCl7bnVsbD09PWx0fHwxMD09PWx0PyhxZShxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWx0JiZaZS5vdXRwdXQucHVzaChsdCl9LGZzeW5j''@;'; put 'put ''KFplKXtaZS5vdXRwdXQmJlplLm91dHB1dC5sZW5ndGg+MCYmKHFlKHFzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0czpaZT0+KHtjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAs''@;'; put 'put ''MTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX0pLGlvY3RsX3Rjc2V0czooWmUsbHQsTHQpPT4wLGlvY3RsX3Rpb2Nnd2luc3o6WmU9PlsyNCw4MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKFplLGx0KXtudWxsPT09bHR8fDEwPT09''@;'; put 'put ''bHQ/KHJ0KHFzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSk6MCE9bHQmJlplLm91dHB1dC5wdXNoKGx0KX0sZnN5bmMoWmUpe1plLm91dHB1dCYmWmUub3V0cHV0Lmxlbmd0aD4wJiYocnQocXMoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKX19fSxWQT0oWmUsbHQpPT5NYXRoLmNlaWwoWmUv''@;'; put 'put ''bHQpKmx0LFVOPVplPT57WmU9VkEoWmUsNjU1MzYpO3ZhciBsdD1XN2UoNjU1MzYsWmUpO3JldHVybiBsdCYmKChaZSxsdCk9PntNbi5maWxsKDAsWmUsWmUrbHQpfSkobHQsWmUpLGx0fSwkYT17b3BzX3RhYmxlOm51bGwsbW91bnQ6WmU9PiRhLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUs''@;'; put 'put ''MCksY3JlYXRlTm9kZShaZSxsdCxMdCwkdCl7aWYoWXQuaXNCbGtkZXYoTHQpfHxZdC5pc0ZJRk8oTHQpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTskYS5vcHNfdGFibGV8fD17ZGlyOntub2RlOntnZXRhdHRyOiRhLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjokYS5ub2RlX29wcy5z''@;'; put 'put ''ZXRhdHRyLGxvb2t1cDokYS5ub2RlX29wcy5sb29rdXAsbWtub2Q6JGEubm9kZV9vcHMubWtub2QscmVuYW1lOiRhLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6JGEubm9kZV9vcHMudW5saW5rLHJtZGlyOiRhLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6JGEubm9kZV9vcHMucmVhZGRpcixzeW1s''@;'; put 'put ''aW5rOiRhLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOiRhLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6JGEuc3RyZWFtX29wcy5sbHNl''@;'; put 'put ''ZWsscmVhZDokYS5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6JGEuc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTokYS5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6JGEuc3RyZWFtX29wcy5tbWFwLG1zeW5jOiRhLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOiRhLm5vZGVf''@;'; put 'put ''b3BzLmdldGF0dHIsc2V0YXR0cjokYS5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOiRhLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOll0LmNo''@;'; put 'put ''cmRldl9zdHJlYW1fb3BzfX07dmFyIERuPVl0LmNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpO3JldHVybiBZdC5pc0RpcihEbi5tb2RlKT8oRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmRpci5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmRpci5zdHJlYW0sRG4uY29udGVudHM9e30p''@;'; put 'put ''Oll0LmlzRmlsZShEbi5tb2RlKT8oRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmZpbGUubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5maWxlLnN0cmVhbSxEbi51c2VkQnl0ZXM9MCxEbi5jb250ZW50cz1udWxsKTpZdC5pc0xpbmsoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9w''@;'; put 'put ''c190YWJsZS5saW5rLm5vZGUsRG4uc3RyZWFtX29wcz0kYS5vcHNfdGFibGUubGluay5zdHJlYW0pOll0LmlzQ2hyZGV2KERuLm1vZGUpJiYoRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmNocmRldi5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLERuLnRp''@;'; put 'put ''bWVzdGFtcD1EYXRlLm5vdygpLFplJiYoWmUuY29udGVudHNbbHRdPURuLFplLnRpbWVzdGFtcD1Ebi50aW1lc3RhbXApLERufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTpaZT0+WmUuY29udGVudHM/WmUuY29udGVudHMuc3ViYXJyYXk/WmUuY29udGVudHMuc3ViYXJyYXkoMCxaZS51c2Vk''@;'; put 'put ''Qnl0ZXMpOm5ldyBVaW50OEFycmF5KFplLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKSxleHBhbmRGaWxlU3RvcmFnZShaZSxsdCl7dmFyIEx0PVplLmNvbnRlbnRzP1plLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEoTHQ+PWx0KSl7bHQ9TWF0aC5tYXgobHQsTHQqKEx0PDEwNDg1NzY/Mjox''@;'; put 'put ''LjEyNSk+Pj4wKSwwIT1MdCYmKGx0PU1hdGgubWF4KGx0LDI1NikpO3ZhciBEbj1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksWmUudXNlZEJ5dGVzPjAmJlplLmNvbnRlbnRzLnNldChEbi5zdWJhcnJheSgwLFplLnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxl''@;'; put 'put ''U3RvcmFnZShaZSxsdCl7aWYoWmUudXNlZEJ5dGVzIT1sdClpZigwPT1sdClaZS5jb250ZW50cz1udWxsLFplLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIEx0PVplLmNvbnRlbnRzO1plLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGx0KSxMdCYmWmUuY29udGVudHMuc2V0KEx0LnN1YmFycmF5KDAs''@;'; put 'put ''TWF0aC5taW4obHQsWmUudXNlZEJ5dGVzKSkpLFplLnVzZWRCeXRlcz1sdH19LG5vZGVfb3BzOntnZXRhdHRyKFplKXt2YXIgbHQ9e307cmV0dXJuIGx0LmRldj1ZdC5pc0NocmRldihaZS5tb2RlKT9aZS5pZDoxLGx0Lmlubz1aZS5pZCxsdC5tb2RlPVplLm1vZGUsbHQubmxpbms9MSxsdC51''@;'; put 'put ''aWQ9MCxsdC5naWQ9MCxsdC5yZGV2PVplLnJkZXYsbHQuc2l6ZT1ZdC5pc0RpcihaZS5tb2RlKT80MDk2Oll0LmlzRmlsZShaZS5tb2RlKT9aZS51c2VkQnl0ZXM6WXQuaXNMaW5rKFplLm1vZGUpP1plLmxpbmsubGVuZ3RoOjAsbHQuYXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5t''@;'; put 'put ''dGltZT1uZXcgRGF0ZShaZS50aW1lc3RhbXApLGx0LmN0aW1lPW5ldyBEYXRlKFplLnRpbWVzdGFtcCksbHQuYmxrc2l6ZT00MDk2LGx0LmJsb2Nrcz1NYXRoLmNlaWwobHQuc2l6ZS9sdC5ibGtzaXplKSxsdH0sc2V0YXR0cihaZSxsdCl7dm9pZCAwIT09bHQubW9kZSYmKFplLm1vZGU9bHQu''@;'; put 'put ''bW9kZSksdm9pZCAwIT09bHQudGltZXN0YW1wJiYoWmUudGltZXN0YW1wPWx0LnRpbWVzdGFtcCksdm9pZCAwIT09bHQuc2l6ZSYmJGEucmVzaXplRmlsZVN0b3JhZ2UoWmUsbHQuc2l6ZSl9LGxvb2t1cChaZSxsdCl7dGhyb3cgJGEuZG9lc05vdEV4aXN0RXJyb3J9LG1rbm9kOihaZSxsdCxM''@;'; put 'put ''dCwkdCk9PiRhLmNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpLHJlbmFtZShaZSxsdCxMdCl7aWYoWXQuaXNEaXIoWmUubW9kZSkpe3ZhciAkdDt0cnl7JHQ9WXQubG9va3VwTm9kZShsdCxMdCl9Y2F0Y2h7fWlmKCR0KWZvcih2YXIgRG4gaW4gJHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5v''@;'; put 'put ''RXJyb3IoNTUpfWRlbGV0ZSBaZS5wYXJlbnQuY29udGVudHNbWmUubmFtZV0sWmUucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLFplLm5hbWU9THQsbHQuY29udGVudHNbTHRdPVplLGx0LnRpbWVzdGFtcD1aZS5wYXJlbnQudGltZXN0YW1wfSx1bmxpbmsoWmUsbHQpe2RlbGV0ZSBaZS5j''@;'; put 'put ''b250ZW50c1tsdF0sWmUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKFplLGx0KXt2YXIgTHQ9WXQubG9va3VwTm9kZShaZSxsdCk7Zm9yKHZhciAkdCBpbiBMdC5jb250ZW50cyl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NSk7ZGVsZXRlIFplLmNvbnRlbnRzW2x0XSxaZS50aW1lc3Rh''@;'; put 'put ''bXA9RGF0ZS5ub3coKX0scmVhZGRpcihaZSl7dmFyIGx0PVsiLiIsIi4uIl07Zm9yKHZhciBMdCBvZiBPYmplY3Qua2V5cyhaZS5jb250ZW50cykpbHQucHVzaChMdCk7cmV0dXJuIGx0fSxzeW1saW5rKFplLGx0LEx0KXt2YXIgJHQ9JGEuY3JlYXRlTm9kZShaZSxsdCw0MTQ3MSwwKTtyZXR1''@;'; put 'put ''cm4gJHQubGluaz1MdCwkdH0scmVhZGxpbmsoWmUpe2lmKCFZdC5pc0xpbmsoWmUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBaZS5saW5rfX0sc3RyZWFtX29wczp7cmVhZChaZSxsdCxMdCwkdCxEbil7dmFyIGNyPVplLm5vZGUuY29udGVudHM7aWYoRG4+PVpl''@;'; put 'put ''Lm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBScj1NYXRoLm1pbihaZS5ub2RlLnVzZWRCeXRlcy1EbiwkdCk7aWYoUnI+OCYmY3Iuc3ViYXJyYXkpbHQuc2V0KGNyLnN1YmFycmF5KERuLERuK1JyKSxMdCk7ZWxzZSBmb3IodmFyIFhyPTA7WHI8UnI7WHIrKylsdFtMdCtYcl09Y3JbRG4r''@;'; put 'put ''WHJdO3JldHVybiBScn0sd3JpdGUoWmUsbHQsTHQsJHQsRG4sY3Ipe2lmKGx0LmJ1ZmZlcj09PXRuLmJ1ZmZlciYmKGNyPSExKSwhJHQpcmV0dXJuIDA7dmFyIFJyPVplLm5vZGU7aWYoUnIudGltZXN0YW1wPURhdGUubm93KCksbHQuc3ViYXJyYXkmJighUnIuY29udGVudHN8fFJyLmNvbnRl''@;'; put 'put ''bnRzLnN1YmFycmF5KSl7aWYoY3IpcmV0dXJuIFJyLmNvbnRlbnRzPWx0LnN1YmFycmF5KEx0LEx0KyR0KSxSci51c2VkQnl0ZXM9JHQsJHQ7aWYoMD09PVJyLnVzZWRCeXRlcyYmMD09PURuKXJldHVybiBSci5jb250ZW50cz1sdC5zbGljZShMdCxMdCskdCksUnIudXNlZEJ5dGVzPSR0LCR0''@;'; put 'put ''O2lmKERuKyR0PD1Sci51c2VkQnl0ZXMpcmV0dXJuIFJyLmNvbnRlbnRzLnNldChsdC5zdWJhcnJheShMdCxMdCskdCksRG4pLCR0fWlmKCRhLmV4cGFuZEZpbGVTdG9yYWdlKFJyLERuKyR0KSxSci5jb250ZW50cy5zdWJhcnJheSYmbHQuc3ViYXJyYXkpUnIuY29udGVudHMuc2V0KGx0LnN1''@;'; put 'put ''YmFycmF5KEx0LEx0KyR0KSxEbik7ZWxzZSBmb3IodmFyIFhyPTA7WHI8JHQ7WHIrKylSci5jb250ZW50c1tEbitYcl09bHRbTHQrWHJdO3JldHVybiBSci51c2VkQnl0ZXM9TWF0aC5tYXgoUnIudXNlZEJ5dGVzLERuKyR0KSwkdH0sbGxzZWVrKFplLGx0LEx0KXt2YXIgJHQ9bHQ7aWYoMT09''@;'; put 'put ''PUx0PyR0Kz1aZS5wb3NpdGlvbjoyPT09THQmJll0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYoJHQrPVplLm5vZGUudXNlZEJ5dGVzKSwkdDwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gJHR9LGFsbG9jYXRlKFplLGx0LEx0KXskYS5leHBhbmRGaWxlU3RvcmFnZShaZS5u''@;'; put 'put ''b2RlLGx0K0x0KSxaZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChaZS5ub2RlLnVzZWRCeXRlcyxsdCtMdCl9LG1tYXAoWmUsbHQsTHQsJHQsRG4pe2lmKCFZdC5pc0ZpbGUoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7dmFyIGNyLFJyLFhyPVplLm5vZGUuY29u''@;'; put 'put ''dGVudHM7aWYoMiZEbnx8IVhyfHxYci5idWZmZXIhPT10bi5idWZmZXIpe2lmKFJyPSEwLCEoY3I9VU4obHQpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0OCk7WHImJigoTHQ+MHx8THQrbHQ8WHIubGVuZ3RoKSYmKFhyPVhyLnN1YmFycmF5P1hyLnN1YmFycmF5KEx0LEx0K2x0KTpBcnJh''@;'; put 'put ''eS5wcm90b3R5cGUuc2xpY2UuY2FsbChYcixMdCxMdCtsdCkpLHRuLnNldChYcixjcikpfWVsc2UgUnI9ITEsY3I9WHIuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmNyLGFsbG9jYXRlZDpScn19LG1zeW5jOihaZSxsdCxMdCwkdCxEbik9PigkYS5zdHJlYW1fb3BzLndyaXRlKFplLGx0LDAsJHQs''@;'; put 'put ''THQsITEpLDApfX0sWk49W10sakE9KFplLGx0KT0+e3ZhciBMdD0wO3JldHVybiBaZSYmKEx0fD0zNjUpLGx0JiYoTHR8PTE0NiksTHR9LFl0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoi''@;'; put 'put ''LyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tuYW1lPSJFcnJub0Vycm9yIjtjb25zdHJ1Y3RvcihaZSl7dGhpcy5lcnJubz1aZX19LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxGU1N0cmVhbTpjbGFzc3tzaGFyZWQ9e307''@;'; put 'put ''Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChaZSl7dGhpcy5ub2RlPVplfWdldCBpc1JlYWQoKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9Z2V0IGlzV3JpdGUoKXtyZXR1cm4hISgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc0FwcGVuZCgpe3JldHVy''@;'; put 'put ''biAxMDI0JnRoaXMuZmxhZ3N9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhaZSl7dGhpcy5zaGFyZWQuZmxhZ3M9WmV9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihaZSl7dGhpcy5zaGFyZWQucG9z''@;'; put 'put ''aXRpb249WmV9fSxGU05vZGU6Y2xhc3N7bm9kZV9vcHM9e307c3RyZWFtX29wcz17fTtyZWFkTW9kZT0zNjU7d3JpdGVNb2RlPTE0Njttb3VudGVkPW51bGw7Y29uc3RydWN0b3IoWmUsbHQsTHQsJHQpe1plfHwoWmU9dGhpcyksdGhpcy5wYXJlbnQ9WmUsdGhpcy5tb3VudD1aZS5tb3VudCx0''@;'; put 'put ''aGlzLmlkPVl0Lm5leHRJbm9kZSsrLHRoaXMubmFtZT1sdCx0aGlzLm1vZGU9THQsdGhpcy5yZGV2PSR0fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoWmUpe1plP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlz''@;'; put 'put ''Lm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKFplKXtaZT90aGlzLm1vZGV8PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRl''@;'; put 'put ''cigpe3JldHVybiBZdC5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBZdC5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChaZSxsdD17fSl7aWYoIShaZT1Vcy5yZXNvbHZlKFplKSkpcmV0dXJue3BhdGg6IiIsbm9kZTpudWxsfTtpZigobHQ9T2JqZWN0LmFz''@;'; put 'put ''c2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0sbHQpKS5yZWN1cnNlX2NvdW50PjgpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgJHQ9WmUuc3BsaXQoIi8iKS5maWx0ZXIoYWw9PiEhYWwpLERuPVl0LnJvb3QsY3I9Ii8iLFJyPTA7UnI8JHQubGVuZ3Ro''@;'; put 'put ''O1JyKyspe3ZhciBYcj1Scj09PSR0Lmxlbmd0aC0xO2lmKFhyJiZsdC5wYXJlbnQpYnJlYWs7aWYoRG49WXQubG9va3VwTm9kZShEbiwkdFtScl0pLGNyPVFvLmpvaW4yKGNyLCR0W1JyXSksWXQuaXNNb3VudHBvaW50KERuKSYmKCFYcnx8WHImJmx0LmZvbGxvd19tb3VudCkmJihEbj1Ebi5t''@;'; put 'put ''b3VudGVkLnJvb3QpLCFYcnx8bHQuZm9sbG93KWZvcih2YXIga2E9MDtZdC5pc0xpbmsoRG4ubW9kZSk7KXt2YXIgR289WXQucmVhZGxpbmsoY3IpO2lmKGNyPVVzLnJlc29sdmUoUW8uZGlybmFtZShjciksR28pLERuPVl0Lmxvb2t1cFBhdGgoY3Ise3JlY3Vyc2VfY291bnQ6bHQucmVjdXJz''@;'; put 'put ''ZV9jb3VudCsxfSkubm9kZSxrYSsrPjQwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMyKX19cmV0dXJue3BhdGg6Y3Isbm9kZTpEbn19LGdldFBhdGgoWmUpe2Zvcih2YXIgbHQ7Oyl7aWYoWXQuaXNSb290KFplKSl7dmFyIEx0PVplLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGx0PyIvIiE9''@;'; put 'put ''PUx0W0x0Lmxlbmd0aC0xXT9gJHtMdH0vJHtsdH1gOkx0K2x0Okx0fWx0PWx0P2Ake1plLm5hbWV9LyR7bHR9YDpaZS5uYW1lLFplPVplLnBhcmVudH19LGhhc2hOYW1lKFplLGx0KXtmb3IodmFyIEx0PTAsJHQ9MDskdDxsdC5sZW5ndGg7JHQrKylMdD0oTHQ8PDUpLUx0K2x0LmNoYXJDb2Rl''@;'; put 'put ''QXQoJHQpfDA7cmV0dXJuKFplK0x0Pj4+MCklWXQubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoWmUpe3ZhciBsdD1ZdC5oYXNoTmFtZShaZS5wYXJlbnQuaWQsWmUubmFtZSk7WmUubmFtZV9uZXh0PVl0Lm5hbWVUYWJsZVtsdF0sWXQubmFtZVRhYmxlW2x0XT1aZX0saGFzaFJlbW92''@;'; put 'put ''ZU5vZGUoWmUpe3ZhciBsdD1ZdC5oYXNoTmFtZShaZS5wYXJlbnQuaWQsWmUubmFtZSk7aWYoWXQubmFtZVRhYmxlW2x0XT09PVplKVl0Lm5hbWVUYWJsZVtsdF09WmUubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBMdD1ZdC5uYW1lVGFibGVbbHRdO0x0Oyl7aWYoTHQubmFtZV9uZXh0PT09WmUp''@;'; put 'put ''e0x0Lm5hbWVfbmV4dD1aZS5uYW1lX25leHQ7YnJlYWt9THQ9THQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShaZSxsdCl7dmFyIEx0PVl0Lm1heUxvb2t1cChaZSk7aWYoTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoTHQpO2Zvcih2YXIgJHQ9WXQuaGFzaE5hbWUoWmUuaWQsbHQpLERuPVl0''@;'; put 'put ''Lm5hbWVUYWJsZVskdF07RG47RG49RG4ubmFtZV9uZXh0KWlmKERuLnBhcmVudC5pZD09PVplLmlkJiZEbi5uYW1lPT09bHQpcmV0dXJuIERuO3JldHVybiBZdC5sb29rdXAoWmUsbHQpfSxjcmVhdGVOb2RlKFplLGx0LEx0LCR0KXt2YXIgRG49bmV3IFl0LkZTTm9kZShaZSxsdCxMdCwkdCk7''@;'; put 'put ''cmV0dXJuIFl0Lmhhc2hBZGROb2RlKERuKSxEbn0sZGVzdHJveU5vZGUoWmUpe1l0Lmhhc2hSZW1vdmVOb2RlKFplKX0saXNSb290OlplPT5aZT09PVplLnBhcmVudCxpc01vdW50cG9pbnQ6WmU9PiEhWmUubW91bnRlZCxpc0ZpbGU6WmU9PjMyNzY4PT0oNjE0NDAmWmUpLGlzRGlyOlplPT4x''@;'; put 'put ''NjM4ND09KDYxNDQwJlplKSxpc0xpbms6WmU9PjQwOTYwPT0oNjE0NDAmWmUpLGlzQ2hyZGV2OlplPT44MTkyPT0oNjE0NDAmWmUpLGlzQmxrZGV2OlplPT4yNDU3Nj09KDYxNDQwJlplKSxpc0ZJRk86WmU9PjQwOTY9PSg2MTQ0MCZaZSksaXNTb2NrZXQ6WmU9PiEoNDkxNTImflplKSxmbGFn''@;'; put 'put ''c1RvUGVybWlzc2lvblN0cmluZyhaZSl7dmFyIGx0PVsiciIsInciLCJydyJdWzMmWmVdO3JldHVybiA1MTImWmUmJihsdCs9InciKSxsdH0sbm9kZVBlcm1pc3Npb25zOihaZSxsdCk9Pll0Lmlnbm9yZVBlcm1pc3Npb25zPzA6bHQuaW5jbHVkZXMoInIiKSYmISgyOTImWmUubW9kZSl8fGx0''@;'; put 'put ''LmluY2x1ZGVzKCJ3IikmJiEoMTQ2JlplLm1vZGUpfHxsdC5pbmNsdWRlcygieCIpJiYhKDczJlplLm1vZGUpPzI6MCxtYXlMb29rdXA6WmU9Pll0LmlzRGlyKFplLm1vZGUpP1l0Lm5vZGVQZXJtaXNzaW9ucyhaZSwieCIpfHwoWmUubm9kZV9vcHMubG9va3VwPzA6Mik6NTQsbWF5Q3JlYXRl''@;'; put 'put ''KFplLGx0KXt0cnl7cmV0dXJuIFl0Lmxvb2t1cE5vZGUoWmUsbHQpLDIwfWNhdGNoe31yZXR1cm4gWXQubm9kZVBlcm1pc3Npb25zKFplLCJ3eCIpfSxtYXlEZWxldGUoWmUsbHQsTHQpe3ZhciAkdDt0cnl7JHQ9WXQubG9va3VwTm9kZShaZSxsdCl9Y2F0Y2goY3Ipe3JldHVybiBjci5lcnJu''@;'; put 'put ''b312YXIgRG49WXQubm9kZVBlcm1pc3Npb25zKFplLCJ3eCIpO2lmKERuKXJldHVybiBEbjtpZihMdCl7aWYoIVl0LmlzRGlyKCR0Lm1vZGUpKXJldHVybiA1NDtpZihZdC5pc1Jvb3QoJHQpfHxZdC5nZXRQYXRoKCR0KT09PVl0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKFl0LmlzRGlyKCR0''@;'; put 'put ''Lm1vZGUpKXJldHVybiAzMTtyZXR1cm4gMH0sbWF5T3BlbjooWmUsbHQpPT5aZT9ZdC5pc0xpbmsoWmUubW9kZSk/MzI6WXQuaXNEaXIoWmUubW9kZSkmJigiciIhPT1ZdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCl8fDUxMiZsdCk/MzE6WXQubm9kZVBlcm1pc3Npb25zKFplLFl0LmZs''@;'; put 'put ''YWdzVG9QZXJtaXNzaW9uU3RyaW5nKGx0KSk6NDQsTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBaZT0wO1plPD1ZdC5NQVhfT1BFTl9GRFM7WmUrKylpZighWXQuc3RyZWFtc1taZV0pcmV0dXJuIFplO3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hl''@;'; put 'put ''Y2tlZChaZSl7dmFyIGx0PVl0LmdldFN0cmVhbShaZSk7aWYoIWx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO3JldHVybiBsdH0sZ2V0U3RyZWFtOlplPT5ZdC5zdHJlYW1zW1plXSxjcmVhdGVTdHJlYW06KFplLGx0PS0xKT0+KFplPU9iamVjdC5hc3NpZ24obmV3IFl0LkZTU3RyZWFt''@;'; put 'put ''LFplKSwtMT09bHQmJihsdD1ZdC5uZXh0ZmQoKSksWmUuZmQ9bHQsWXQuc3RyZWFtc1tsdF09WmUsWmUpLGNsb3NlU3RyZWFtKFplKXtZdC5zdHJlYW1zW1plXT1udWxsfSxkdXBTdHJlYW0oWmUsbHQ9LTEpe3ZhciBMdD1ZdC5jcmVhdGVTdHJlYW0oWmUsbHQpO3JldHVybiBMdC5zdHJlYW1f''@;'; put 'put ''b3BzPy5kdXA/LihMdCksTHR9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuKFplKXt2YXIgbHQ9WXQuZ2V0RGV2aWNlKFplLm5vZGUucmRldik7WmUuc3RyZWFtX29wcz1sdC5zdHJlYW1fb3BzLFplLnN0cmVhbV9vcHMub3Blbj8uKFplKX0sbGxzZWVrKCl7dGhyb3cgbmV3IFl0LkVycm5vRXJy''@;'; put 'put ''b3IoNzApfX0sbWFqb3I6WmU9PlplPj44LG1pbm9yOlplPT4yNTUmWmUsbWFrZWRldjooWmUsbHQpPT5aZTw8OHxsdCxyZWdpc3RlckRldmljZShaZSxsdCl7WXQuZGV2aWNlc1taZV09e3N0cmVhbV9vcHM6bHR9fSxnZXREZXZpY2U6WmU9Pll0LmRldmljZXNbWmVdLGdldE1vdW50cyhaZSl7''@;'; put 'put ''Zm9yKHZhciBsdD1bXSxMdD1bWmVdO0x0Lmxlbmd0aDspe3ZhciAkdD1MdC5wb3AoKTtsdC5wdXNoKCR0KSxMdC5wdXNoKC4uLiR0Lm1vdW50cyl9cmV0dXJuIGx0fSxzeW5jZnMoWmUsbHQpeyJmdW5jdGlvbiI9PXR5cGVvZiBaZSYmKGx0PVplLFplPSExKSxZdC5zeW5jRlNSZXF1ZXN0cysr''@;'; put 'put ''LFl0LnN5bmNGU1JlcXVlc3RzPjEmJnJ0KGB3YXJuaW5nOiAke1l0LnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFyIEx0PVl0LmdldE1vdW50cyhZdC5yb290Lm1vdW50KSwk''@;'; put 'put ''dD0wO2Z1bmN0aW9uIERuKFJyKXtyZXR1cm4gWXQuc3luY0ZTUmVxdWVzdHMtLSxsdChScil9ZnVuY3Rpb24gY3IoUnIpe2lmKFJyKXJldHVybiBjci5lcnJvcmVkP3ZvaWQgMDooY3IuZXJyb3JlZD0hMCxEbihScikpOysrJHQ+PUx0Lmxlbmd0aCYmRG4obnVsbCl9THQuZm9yRWFjaChScj0+''@;'; put 'put ''e2lmKCFSci50eXBlLnN5bmNmcylyZXR1cm4gY3IobnVsbCk7UnIudHlwZS5zeW5jZnMoUnIsWmUsY3IpfSl9LG1vdW50KFplLGx0LEx0KXt2YXIgY3IsJHQ9Ii8iPT09THQsRG49IUx0O2lmKCR0JiZZdC5yb290KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtpZighJHQmJiFEbil7dmFy''@;'; put 'put ''IFJyPVl0Lmxvb2t1cFBhdGgoTHQse2ZvbGxvd19tb3VudDohMX0pO2lmKEx0PVJyLnBhdGgsWXQuaXNNb3VudHBvaW50KGNyPVJyLm5vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtpZighWXQuaXNEaXIoY3IubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpfXZhciBY''@;'; put 'put ''cj17dHlwZTpaZSxvcHRzOmx0LG1vdW50cG9pbnQ6THQsbW91bnRzOltdfSxrYT1aZS5tb3VudChYcik7cmV0dXJuIGthLm1vdW50PVhyLFhyLnJvb3Q9a2EsJHQ/WXQucm9vdD1rYTpjciYmKGNyLm1vdW50ZWQ9WHIsY3IubW91bnQmJmNyLm1vdW50Lm1vdW50cy5wdXNoKFhyKSksa2F9LHVu''@;'; put 'put ''bW91bnQoWmUpe3ZhciBsdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighWXQuaXNNb3VudHBvaW50KGx0Lm5vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgTHQ9bHQubm9kZSwkdD1MdC5tb3VudGVkLERuPVl0LmdldE1vdW50cygkdCk7T2JqZWN0''@;'; put 'put ''LmtleXMoWXQubmFtZVRhYmxlKS5mb3JFYWNoKFJyPT57Zm9yKHZhciBYcj1ZdC5uYW1lVGFibGVbUnJdO1hyOyl7dmFyIGthPVhyLm5hbWVfbmV4dDtEbi5pbmNsdWRlcyhYci5tb3VudCkmJll0LmRlc3Ryb3lOb2RlKFhyKSxYcj1rYX19KSxMdC5tb3VudGVkPW51bGw7dmFyIGNyPUx0Lm1v''@;'; put 'put ''dW50Lm1vdW50cy5pbmRleE9mKCR0KTtMdC5tb3VudC5tb3VudHMuc3BsaWNlKGNyLDEpfSxsb29rdXA6KFplLGx0KT0+WmUubm9kZV9vcHMubG9va3VwKFplLGx0KSxta25vZChaZSxsdCxMdCl7dmFyIERuPVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGUsY3I9UW8uYmFzZW5h''@;'; put 'put ''bWUoWmUpO2lmKCFjcnx8Ii4iPT09Y3J8fCIuLiI9PT1jcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIFJyPVl0Lm1heUNyZWF0ZShEbixjcik7aWYoUnIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoUnIpO2lmKCFEbi5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgWXQuRXJybm9F''@;'; put 'put ''cnJvcig2Myk7cmV0dXJuIERuLm5vZGVfb3BzLm1rbm9kKERuLGNyLGx0LEx0KX0sc3RhdGZzKFplKXt2YXIgbHQ9e2JzaXplOjQwOTYsZnJzaXplOjQwOTYsYmxvY2tzOjFlNixiZnJlZTo1ZTUsYmF2YWlsOjVlNSxmaWxlczpZdC5uZXh0SW5vZGUsZmZyZWU6WXQubmV4dElub2RlLTEsZnNp''@;'; put 'put ''ZDo0MixmbGFnczoyLG5hbWVsZW46MjU1fSxMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO3JldHVybiBMdD8ubm9kZV9vcHMuc3RhdGZzJiZPYmplY3QuYXNzaWduKGx0LEx0Lm5vZGVfb3BzLnN0YXRmcyhMdC5tb3VudC5vcHRzLnJvb3QpKSxsdH0sY3JlYXRlOihaZSxs''@;'; put 'put ''dD00MzgpPT4obHQmPTQwOTUsWXQubWtub2QoWmUsbHR8PTMyNzY4LDApKSxta2RpcjooWmUsbHQ9NTExKT0+KGx0Jj0xMDIzLFl0Lm1rbm9kKFplLGx0fD0xNjM4NCwwKSksbWtkaXJUcmVlKFplLGx0KXtmb3IodmFyIEx0PVplLnNwbGl0KCIvIiksJHQ9IiIsRG49MDtEbjxMdC5sZW5ndGg7''@;'; put 'put ''KytEbilpZihMdFtEbl0peyR0Kz0iLyIrTHRbRG5dO3RyeXtZdC5ta2RpcigkdCxsdCl9Y2F0Y2goY3Ipe2lmKDIwIT1jci5lcnJubyl0aHJvdyBjcn19fSxta2RldjooWmUsbHQsTHQpPT4odHlwZW9mIEx0PiJ1IiYmKEx0PWx0LGx0PTQzOCksWXQubWtub2QoWmUsbHR8PTgxOTIsTHQpKSxz''@;'; put 'put ''eW1saW5rKFplLGx0KXtpZighVXMucmVzb2x2ZShaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdD1ZdC5sb29rdXBQYXRoKGx0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCEkdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyIERuPVFvLmJhc2VuYW1lKGx0KSxjcj1Z''@;'; put 'put ''dC5tYXlDcmVhdGUoJHQsRG4pO2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighJHQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuICR0Lm5vZGVfb3BzLnN5bWxpbmsoJHQsRG4sWmUpfSxyZW5hbWUoWmUsbHQpe3ZhciBYcixr''@;'; put 'put ''YSxMdD1Rby5kaXJuYW1lKFplKSwkdD1Rby5kaXJuYW1lKGx0KSxEbj1Rby5iYXNlbmFtZShaZSksY3I9UW8uYmFzZW5hbWUobHQpO2lmKFhyPVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGUsa2E9WXQubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZSwhWHJ8fCFrYSl0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoWHIubW91bnQhPT1rYS5tb3VudCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3NSk7dmFyIGFsLEdvPVl0Lmxvb2t1cE5vZGUoWHIsRG4pLEhzPVVzLnJlbGF0aXZlKFplLCR0KTtpZigiLiIhPT1Icy5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0''@;'; put 'put ''LkVycm5vRXJyb3IoMjgpO2lmKCIuIiE9PShIcz1Vcy5yZWxhdGl2ZShsdCxMdCkpLmNoYXJBdCgwKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NSk7dHJ5e2FsPVl0Lmxvb2t1cE5vZGUoa2EsY3IpfWNhdGNoe31pZihHbyE9PWFsKXt2YXIgZ3M9WXQuaXNEaXIoR28ubW9kZSkseG89WXQu''@;'; put 'put ''bWF5RGVsZXRlKFhyLERuLGdzKTtpZih4byl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4byk7aWYoeG89YWw/WXQubWF5RGVsZXRlKGthLGNyLGdzKTpZdC5tYXlDcmVhdGUoa2EsY3IpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKHhvKTtpZighWHIubm9kZV9vcHMucmVuYW1lKXRocm93IG5l''@;'; put 'put ''dyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoR28pfHxhbCYmWXQuaXNNb3VudHBvaW50KGFsKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoa2EhPT1YciYmKHhvPVl0Lm5vZGVQZXJtaXNzaW9ucyhYciwidyIpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4''@;'; put 'put ''byk7WXQuaGFzaFJlbW92ZU5vZGUoR28pO3RyeXtYci5ub2RlX29wcy5yZW5hbWUoR28sa2EsY3IpLEdvLnBhcmVudD1rYX1jYXRjaChYcyl7dGhyb3cgWHN9ZmluYWxseXtZdC5oYXNoQWRkTm9kZShHbyl9fX0scm1kaXIoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9''@;'; put 'put ''KS5ub2RlLCR0PVFvLmJhc2VuYW1lKFplKSxEbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxjcj1ZdC5tYXlEZWxldGUoTHQsJHQsITApO2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighTHQubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0''@;'; put 'put ''LmlzTW91bnRwb2ludChEbikpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO0x0Lm5vZGVfb3BzLnJtZGlyKEx0LCR0KSxZdC5kZXN0cm95Tm9kZShEbil9LHJlYWRkaXIoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFMdC5ub2RlX29wcy5yZWFk''@;'; put 'put ''ZGlyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU0KTtyZXR1cm4gTHQubm9kZV9vcHMucmVhZGRpcihMdCl9LHVubGluayhaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGU7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ9UW8uYmFz''@;'; put 'put ''ZW5hbWUoWmUpLERuPVl0Lmxvb2t1cE5vZGUoTHQsJHQpLGNyPVl0Lm1heURlbGV0ZShMdCwkdCwhMSk7aWYoY3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoY3IpO2lmKCFMdC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0LmlzTW91bnRwb2ludChE''@;'; put 'put ''bikpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO0x0Lm5vZGVfb3BzLnVubGluayhMdCwkdCksWXQuZGVzdHJveU5vZGUoRG4pfSxyZWFkbGluayhaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUpLm5vZGU7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighTHQubm9k''@;'; put 'put ''ZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBMdC5ub2RlX29wcy5yZWFkbGluayhMdCl9LHN0YXQoWmUsbHQpe3ZhciAkdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IWx0fSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQp''@;'; put 'put ''O2lmKCEkdC5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gJHQubm9kZV9vcHMuZ2V0YXR0cigkdCl9LGxzdGF0OlplPT5ZdC5zdGF0KFplLCEwKSxjaG1vZChaZSxsdCxMdCl7dmFyICR0O2lmKCEoJHQ9InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5s''@;'; put 'put ''b29rdXBQYXRoKFplLHtmb2xsb3c6IUx0fSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7JHQubm9kZV9vcHMuc2V0YXR0cigkdCx7bW9kZTo0MDk1Jmx0fC00MDk2JiR0Lm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKFpl''@;'; put 'put ''LGx0KXtZdC5jaG1vZChaZSxsdCwhMCl9LGZjaG1vZChaZSxsdCl7dmFyIEx0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO1l0LmNobW9kKEx0Lm5vZGUsbHQpfSxjaG93bihaZSxsdCxMdCwkdCl7dmFyIERuO2lmKCEoRG49InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtm''@;'; put 'put ''b2xsb3c6ISR0fSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7RG4ubm9kZV9vcHMuc2V0YXR0cihEbix7dGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNob3duKFplLGx0LEx0KXtZdC5jaG93bihaZSxsdCxMdCwhMCl9LGZjaG93bihaZSxs''@;'; put 'put ''dCxMdCl7dmFyICR0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO1l0LmNob3duKCR0Lm5vZGUsbHQsTHQpfSx0cnVuY2F0ZShaZSxsdCl7aWYobHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEx0O2lmKCEoTHQ9InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFpl''@;'; put 'put ''LHtmb2xsb3c6ITB9KS5ub2RlOlplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc0RpcihMdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMSk7aWYoIVl0LmlzRmlsZShMdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigy''@;'; put 'put ''OCk7dmFyIERuPVl0Lm5vZGVQZXJtaXNzaW9ucyhMdCwidyIpO2lmKERuKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKERuKTtMdC5ub2RlX29wcy5zZXRhdHRyKEx0LHtzaXplOmx0LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZShaZSxsdCl7dmFyIEx0PVl0LmdldFN0cmVhbUNo''@;'; put 'put ''ZWNrZWQoWmUpO2lmKCEoMjA5NzE1NSZMdC5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO1l0LnRydW5jYXRlKEx0Lm5vZGUsbHQpfSx1dGltZShaZSxsdCxMdCl7dmFyIERuPVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pLm5vZGU7RG4ubm9kZV9vcHMuc2V0YXR0cihE''@;'; put 'put ''bix7dGltZXN0YW1wOk1hdGgubWF4KGx0LEx0KX0pfSxvcGVuKFplLGx0LEx0PTQzOCl7aWYoIiI9PT1aZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyICR0O2lmKGx0PSJzdHJpbmciPT10eXBlb2YgbHQ/KFplPT57dmFyIEx0PXtyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6''@;'; put 'put ''MTA4OSwiYSsiOjEwOTB9W1plXTtpZih0eXBlb2YgTHQ+InUiKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWxlIG9wZW4gbW9kZTogJHtaZX1gKTtyZXR1cm4gTHR9KShsdCk6bHQsTHQ9NjQmbHQ/NDA5NSZMdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2YgWmUpJHQ9WmU7ZWxzZXtaZT1R''@;'; put 'put ''by5ub3JtYWxpemUoWmUpO3RyeXskdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ISgxMzEwNzImbHQpfSkubm9kZX1jYXRjaHt9fXZhciBjcj0hMTtpZig2NCZsdClpZigkdCl7aWYoMTI4Jmx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIwKX1lbHNlICR0PVl0Lm1rbm9kKFplLEx0LDAp''@;'; put 'put ''LGNyPSEwO2lmKCEkdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoWXQuaXNDaHJkZXYoJHQubW9kZSkmJihsdCY9LTUxMyksNjU1MzYmbHQmJiFZdC5pc0RpcigkdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7aWYoIWNyKXt2YXIgUnI9WXQubWF5T3BlbigkdCxs''@;'; put 'put ''dCk7aWYoUnIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoUnIpfTUxMiZsdCYmIWNyJiZZdC50cnVuY2F0ZSgkdCwwKSxsdCY9LTEzMTcxMzt2YXIgWHI9WXQuY3JlYXRlU3RyZWFtKHtub2RlOiR0LHBhdGg6WXQuZ2V0UGF0aCgkdCksZmxhZ3M6bHQsc2Vla2FibGU6ITAscG9zaXRpb246MCxz''@;'; put 'put ''dHJlYW1fb3BzOiR0LnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gWHIuc3RyZWFtX29wcy5vcGVuJiZYci5zdHJlYW1fb3BzLm9wZW4oWHIpLFhyfSxjbG9zZShaZSl7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO1plLmdldGRl''@;'; put 'put ''bnRzJiYoWmUuZ2V0ZGVudHM9bnVsbCk7dHJ5e1plLnN0cmVhbV9vcHMuY2xvc2UmJlplLnN0cmVhbV9vcHMuY2xvc2UoWmUpfWNhdGNoKGx0KXt0aHJvdyBsdH1maW5hbGx5e1l0LmNsb3NlU3RyZWFtKFplLmZkKX1aZS5mZD1udWxsfSxpc0Nsb3NlZDpaZT0+bnVsbD09PVplLmZkLGxsc2Vl''@;'; put 'put ''ayhaZSxsdCxMdCl7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKCFaZS5zZWVrYWJsZXx8IVplLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKTtpZigwIT1MdCYmMSE9THQmJjIhPUx0KXRocm93IG5ldyBZdC5FcnJu''@;'; put 'put ''b0Vycm9yKDI4KTtyZXR1cm4gWmUucG9zaXRpb249WmUuc3RyZWFtX29wcy5sbHNlZWsoWmUsbHQsTHQpLFplLnVuZ290dGVuPVtdLFplLnBvc2l0aW9ufSxyZWFkKFplLGx0LEx0LCR0LERuKXtpZigkdDwwfHxEbjwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3Nl''@;'; put 'put ''ZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoMT09KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKFl0LmlzRGlyKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFaZS5zdHJlYW1fb3BzLnJlYWQpdGhy''@;'; put 'put ''b3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBjcj10eXBlb2YgRG48InUiO2lmKGNyKXtpZighWmUuc2Vla2FibGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49WmUucG9zaXRpb247dmFyIFJyPVplLnN0cmVhbV9vcHMucmVhZChaZSxsdCxMdCwkdCxEbik7cmV0dXJu''@;'; put 'put ''IGNyfHwoWmUucG9zaXRpb24rPVJyKSxScn0sd3JpdGUoWmUsbHQsTHQsJHQsRG4sY3Ipe2lmKCR0PDB8fERuPDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmWmUuZmxhZ3MpKXRo''@;'; put 'put ''cm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKFl0LmlzRGlyKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFaZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtaZS5zZWVrYWJsZSYmMTAyNCZaZS5mbGFncyYmWXQubGxz''@;'; put 'put ''ZWVrKFplLDAsMik7dmFyIFJyPXR5cGVvZiBEbjwidSI7aWYoUnIpe2lmKCFaZS5zZWVrYWJsZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9ZWxzZSBEbj1aZS5wb3NpdGlvbjt2YXIgWHI9WmUuc3RyZWFtX29wcy53cml0ZShaZSxsdCxMdCwkdCxEbixjcik7cmV0dXJuIFJyfHwoWmUu''@;'; put 'put ''cG9zaXRpb24rPVhyKSxYcn0sYWxsb2NhdGUoWmUsbHQsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihsdDwwfHxMdDw9MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7aWYoISgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJy''@;'; put 'put ''bm9FcnJvcig4KTtpZighWXQuaXNGaWxlKFplLm5vZGUubW9kZSkmJiFZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighWmUuc3RyZWFtX29wcy5hbGxvY2F0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMzgpO1plLnN0cmVhbV9vcHMuYWxs''@;'; put 'put ''b2NhdGUoWmUsbHQsTHQpfSxtbWFwKFplLGx0LEx0LCR0LERuKXtpZigyJiR0JiYhKDImRG4pJiYyIT0oMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKCFaZS5z''@;'; put 'put ''dHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnN0cmVhbV9vcHMubW1hcChaZSxsdCxMdCwkdCxEbil9LG1zeW5jOihaZSxsdCxMdCwkdCxEbik9PlplLnN0cmVhbV9vcHMubXN5bmM/''@;'; put 'put ''WmUuc3RyZWFtX29wcy5tc3luYyhaZSxsdCxMdCwkdCxEbik6MCxpb2N0bChaZSxsdCxMdCl7aWYoIVplLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTkpO3JldHVybiBaZS5zdHJlYW1fb3BzLmlvY3RsKFplLGx0LEx0KX0scmVhZEZpbGUoWmUsbHQ9e30pe2lm''@;'; put 'put ''KGx0LmZsYWdzPWx0LmZsYWdzfHwwLGx0LmVuY29kaW5nPWx0LmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1sdC5lbmNvZGluZyYmImJpbmFyeSIhPT1sdC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtsdC5lbmNvZGluZ30iYCk7dmFyIEx0''@;'; put 'put ''LCR0PVl0Lm9wZW4oWmUsbHQuZmxhZ3MpLGNyPVl0LnN0YXQoWmUpLnNpemUsUnI9bmV3IFVpbnQ4QXJyYXkoY3IpO3JldHVybiBZdC5yZWFkKCR0LFJyLDAsY3IsMCksInV0ZjgiPT09bHQuZW5jb2Rpbmc/THQ9cXMoUnIpOiJiaW5hcnkiPT09bHQuZW5jb2RpbmcmJihMdD1SciksWXQuY2xv''@;'; put 'put ''c2UoJHQpLEx0fSx3cml0ZUZpbGUoWmUsbHQsTHQ9e30pe0x0LmZsYWdzPUx0LmZsYWdzfHw1Nzc7dmFyICR0PVl0Lm9wZW4oWmUsTHQuZmxhZ3MsTHQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiBsdCl7dmFyIERuPW5ldyBVaW50OEFycmF5KGVzKGx0KSsxKSxjcj1FMShsdCxEbiwwLERu''@;'; put 'put ''Lmxlbmd0aCk7WXQud3JpdGUoJHQsRG4sMCxjcix2b2lkIDAsTHQuY2FuT3duKX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcobHQpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7WXQud3JpdGUoJHQsbHQsMCxsdC5ieXRlTGVuZ3RoLHZvaWQgMCxMdC5jYW5P''@;'; put 'put ''d24pfVl0LmNsb3NlKCR0KX0sY3dkOigpPT5ZdC5jdXJyZW50UGF0aCxjaGRpcihaZSl7dmFyIGx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pO2lmKG51bGw9PT1sdC5ub2RlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighWXQuaXNEaXIobHQubm9kZS5tb2RlKSl0aHJv''@;'; put 'put ''dyBuZXcgWXQuRXJybm9FcnJvcig1NCk7dmFyIEx0PVl0Lm5vZGVQZXJtaXNzaW9ucyhsdC5ub2RlLCJ4Iik7aWYoTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoTHQpO1l0LmN1cnJlbnRQYXRoPWx0LnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe1l0Lm1rZGlyKCIvdG1wIiks''@;'; put 'put ''WXQubWtkaXIoIi9ob21lIiksWXQubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7WXQubWtkaXIoIi9kZXYiKSxZdC5yZWdpc3RlckRldmljZShZdC5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KCR0LERuLGNyLFJyLFhyKT0+UnIsbGxzZWVr''@;'; put 'put ''OigpPT4wfSksWXQubWtkZXYoIi9kZXYvbnVsbCIsWXQubWFrZWRldigxLDMpKSxkNC5yZWdpc3RlcihZdC5tYWtlZGV2KDUsMCksZDQuZGVmYXVsdF90dHlfb3BzKSxkNC5yZWdpc3RlcihZdC5tYWtlZGV2KDYsMCksZDQuZGVmYXVsdF90dHkxX29wcyksWXQubWtkZXYoIi9kZXYvdHR5IixZ''@;'; put 'put ''dC5tYWtlZGV2KDUsMCkpLFl0Lm1rZGV2KCIvZGV2L3R0eTEiLFl0Lm1ha2VkZXYoNiwwKSk7dmFyIFplPW5ldyBVaW50OEFycmF5KDEwMjQpLGx0PTAsTHQ9KCk9PigwPT09bHQmJihsdD1hZChaZSkuYnl0ZUxlbmd0aCksWmVbLS1sdF0pO1l0LmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRv''@;'; put 'put ''bSIsTHQpLFl0LmNyZWF0ZURldmljZSgiL2RldiIsInVyYW5kb20iLEx0KSxZdC5ta2RpcigiL2Rldi9zaG0iKSxZdC5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rvcmllcygpe1l0Lm1rZGlyKCIvcHJvYyIpO3ZhciBaZT1ZdC5ta2RpcigiL3Byb2Mvc2VsZiIp''@;'; put 'put ''O1l0Lm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksWXQubW91bnQoe21vdW50KCl7dmFyIGx0PVl0LmNyZWF0ZU5vZGUoWmUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIGx0Lm5vZGVfb3BzPXtsb29rdXAoTHQsJHQpe3ZhciBjcj1ZdC5nZXRTdHJlYW1DaGVja2VkKCskdCksUnI9e3BhcmVudDpudWxs''@;'; put 'put ''LG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5jci5wYXRofX07cmV0dXJuIFJyLnBhcmVudD1ScixScn19LGx0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKFplLGx0LEx0KXtaZT9ZdC5jcmVhdGVEZXZpY2UoIi9k''@;'; put 'put ''ZXYiLCJzdGRpbiIsWmUpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLGx0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxsdCk6WXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZG91dCIpLEx0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVy''@;'; put 'put ''ciIsbnVsbCxMdCk6WXQuc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxZdC5vcGVuKCIvZGV2L3N0ZGluIiwwKSxZdC5vcGVuKCIvZGV2L3N0ZG91dCIsMSksWXQub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WXQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2''@;'; put 'put ''KSxZdC5tb3VudCgkYSx7fSwiLyIpLFl0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLFl0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksWXQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksWXQuZmlsZXN5c3RlbXM9e01FTUZTOiRhfX0saW5pdChaZSxsdCxMdCl7WXQuaW5pdGlhbGl6ZWQ9''@;'; put 'put ''ITAsWXQuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKFplLGx0LEx0KX0scXVpdCgpe1l0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgWmU9MDtaZTxZdC5zdHJlYW1zLmxlbmd0aDtaZSsrKXt2YXIgbHQ9WXQuc3RyZWFtc1taZV07bHQmJll0LmNsb3NlKGx0KX19LGZpbmRPYmplY3QoWmUsbHQpe3Zh''@;'; put 'put ''ciBMdD1ZdC5hbmFseXplUGF0aChaZSxsdCk7cmV0dXJuIEx0LmV4aXN0cz9MdC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoWmUsbHQpe3RyeXtaZT0oTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pKS5wYXRofWNhdGNoe312YXIgJHQ9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJy''@;'; put 'put ''b3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSk7JHQucGFyZW50RXhpc3RzPSEwLCR0LnBhcmVudFBhdGg9THQu''@;'; put 'put ''cGF0aCwkdC5wYXJlbnRPYmplY3Q9THQubm9kZSwkdC5uYW1lPVFvLmJhc2VuYW1lKFplKSxMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IWx0fSksJHQuZXhpc3RzPSEwLCR0LnBhdGg9THQucGF0aCwkdC5vYmplY3Q9THQubm9kZSwkdC5uYW1lPUx0Lm5vZGUubmFtZSwkdC5pc1Jvb3Q9''@;'; put 'put ''Ii8iPT09THQucGF0aH1jYXRjaChEbil7JHQuZXJyb3I9RG4uZXJybm99cmV0dXJuICR0fSxjcmVhdGVQYXRoKFplLGx0LEx0LCR0KXtaZT0ic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpO2Zvcih2YXIgRG49bHQuc3BsaXQoIi8iKS5yZXZlcnNlKCk7RG4ubGVuZ3RoOyl7''@;'; put 'put ''dmFyIGNyPURuLnBvcCgpO2lmKGNyKXt2YXIgUnI9UW8uam9pbjIoWmUsY3IpO3RyeXtZdC5ta2RpcihScil9Y2F0Y2h7fVplPVJyfX1yZXR1cm4gUnJ9LGNyZWF0ZUZpbGUoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1Rby5qb2luMigic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgo''@;'; put 'put ''WmUpLGx0KSxScj1qQSgkdCxEbik7cmV0dXJuIFl0LmNyZWF0ZShjcixScil9LGNyZWF0ZURhdGFGaWxlKFplLGx0LEx0LCR0LERuLGNyKXt2YXIgUnI9bHQ7WmUmJihaZT0ic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpLFJyPWx0P1FvLmpvaW4yKFplLGx0KTpaZSk7dmFy''@;'; put 'put ''IFhyPWpBKCR0LERuKSxrYT1ZdC5jcmVhdGUoUnIsWHIpO2lmKEx0KXtpZigic3RyaW5nIj09dHlwZW9mIEx0KXtmb3IodmFyIEdvPW5ldyBBcnJheShMdC5sZW5ndGgpLEhzPTAsYWw9THQubGVuZ3RoO0hzPGFsOysrSHMpR29bSHNdPUx0LmNoYXJDb2RlQXQoSHMpO0x0PUdvfVl0LmNobW9k''@;'; put 'put ''KGthLDE0NnxYcik7dmFyIGdzPVl0Lm9wZW4oa2EsNTc3KTtZdC53cml0ZShncyxMdCwwLEx0Lmxlbmd0aCwwLGNyKSxZdC5jbG9zZShncyksWXQuY2htb2Qoa2EsWHIpfX0sY3JlYXRlRGV2aWNlKFplLGx0LEx0LCR0KXt2YXIgRG49UW8uam9pbjIoInN0cmluZyI9PXR5cGVvZiBaZT9aZTpZ''@;'; put 'put ''dC5nZXRQYXRoKFplKSxsdCksY3I9akEoISFMdCwhISR0KTtZdC5jcmVhdGVEZXZpY2UubWFqb3I/Pz02NDt2YXIgUnI9WXQubWFrZWRldihZdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gWXQucmVnaXN0ZXJEZXZpY2UoUnIse29wZW4oWHIpe1hyLnNlZWthYmxlPSExfSxjbG9z''@;'; put 'put ''ZShYcil7JHQ/LmJ1ZmZlcj8ubGVuZ3RoJiYkdCgxMCl9LHJlYWQoWHIsa2EsR28sSHMsYWwpe2Zvcih2YXIgZ3M9MCx4bz0wO3hvPEhzO3hvKyspe3ZhciBYczt0cnl7WHM9THQoKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09WHMmJjA9PT1ncyl0aHJv''@;'; put 'put ''dyBuZXcgWXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1YcylicmVhaztncysrLGthW0dvK3hvXT1Yc31yZXR1cm4gZ3MmJihYci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxnc30sd3JpdGUoWHIsa2EsR28sSHMsYWwpe2Zvcih2YXIgZ3M9MDtnczxIcztncysrKXRyeXskdChrYVtHbytn''@;'; put 'put ''c10pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gSHMmJihYci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxnc319KSxZdC5ta2RldihEbixjcixScil9LGZvcmNlTG9hZEZpbGUoWmUpe2lmKFplLmlzRGV2aWNlfHxaZS5pc0ZvbGRlcnx8WmUubGlua3x8WmUu''@;'; put 'put ''Y29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGlu''@;'; put 'put ''ZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO3RyeXtaZS5jb250ZW50cz1CZShaZS51cmwpLFplLnVzZWRCeXRlcz1aZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cg''@;'; put 'put ''bmV3IFl0LkVycm5vRXJyb3IoMjkpfX0sY3JlYXRlTGF6eUZpbGUoWmUsbHQsTHQsJHQsRG4pe2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVz''@;'; put 'put ''ZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIFhyLGthPVl0LmNyZWF0ZUZpbGUoWmUsbHQsWHI9e2lzRGV2aWNlOiExLHVybDpMdH0sJHQsRG4pO1hyLmNvbnRlbnRzP2thLmNvbnRlbnRzPVhyLmNvbnRlbnRzOlhyLnVybCYmKGthLmNvbnRlbnRzPW51bGws''@;'; put 'put ''a2EudXJsPVhyLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa2Ese3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgR289e307ZnVuY3Rpb24gYWwoZ3MseG8sWHMsQTEsVDMpe3ZhciBXaD1ncy5ub2RlLmNvbnRlbnRzO2lm''@;'; put 'put ''KFQzPj1XaC5sZW5ndGgpcmV0dXJuIDA7dmFyIEEzPU1hdGgubWluKFdoLmxlbmd0aC1UMyxBMSk7aWYoV2guc2xpY2UpZm9yKHZhciBrMz0wO2szPEEzO2szKyspeG9bWHMrazNdPVdoW1QzK2szXTtlbHNlIGZvcihrMz0wO2szPEEzO2szKyspeG9bWHMrazNdPVdoLmdldChUMytrMyk7cmV0''@;'; put 'put ''dXJuIEEzfXJldHVybiBPYmplY3Qua2V5cyhrYS5zdHJlYW1fb3BzKS5mb3JFYWNoKGdzPT57dmFyIHhvPWthLnN0cmVhbV9vcHNbZ3NdO0dvW2dzXT0oLi4uWHMpPT4oWXQuZm9yY2VMb2FkRmlsZShrYSkseG8oLi4uWHMpKX0pLEdvLnJlYWQ9KGdzLHhvLFhzLEExLFQzKT0+KFl0LmZvcmNl''@;'; put 'put ''TG9hZEZpbGUoa2EpLGFsKGdzLHhvLFhzLEExLFQzKSksR28ubW1hcD0oZ3MseG8sWHMsQTEsVDMpPT57WXQuZm9yY2VMb2FkRmlsZShrYSk7dmFyIFdoPVVOKHhvKTtpZighV2gpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDgpO3JldHVybiBhbChncyx0bixXaCx4byxYcykse3B0cjpXaCxh''@;'; put 'put ''bGxvY2F0ZWQ6ITB9fSxrYS5zdHJlYW1fb3BzPUdvLGthfX0sdjA9KFplLGx0KT0+WmU/cXMoTW4sWmUsbHQpOiIiLFpzPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoWmUsbHQsTHQpe2lmKFFvLmlzQWJzKGx0KSlyZXR1cm4gbHQ7dmFyICR0O2lmKCR0PS0xMDA9PT1aZT9ZdC5j''@;'; put 'put ''d2QoKTpacy5nZXRTdHJlYW1Gcm9tRkQoWmUpLnBhdGgsMD09bHQubGVuZ3RoKXtpZighTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3JldHVybiAkdH1yZXR1cm4gUW8uam9pbjIoJHQsbHQpfSxkb1N0YXQoWmUsbHQsTHQpe3ZhciAkdD1aZShsdCk7bXJbTHQ+PjJdPSR0LmRldixt''@;'; put 'put ''cltMdCs0Pj4yXT0kdC5tb2RlLEduW0x0Kzg+PjJdPSR0Lm5saW5rLG1yW0x0KzEyPj4yXT0kdC51aWQsbXJbTHQrMTY+PjJdPSR0LmdpZCxtcltMdCsyMD4+Ml09JHQucmRldixhYT1bJHQuc2l6ZT4+PjAsKFpyPSR0LnNpemUsK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpy''@;'; put 'put ''LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzI0Pj4yXT1hYVswXSxtcltMdCsyOD4+Ml09YWFbMV0sbXJbTHQrMzI+PjJdPTQwOTYsbXJbTHQrMzY+PjJdPSR0LmJsb2Nrczt2YXIgRG49JHQuYXRpbWUuZ2V0''@;'; put 'put ''VGltZSgpLGNyPSR0Lm10aW1lLmdldFRpbWUoKSxScj0kdC5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIGFhPVtNYXRoLmZsb29yKERuLzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKERuLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitN''@;'; put 'put ''YXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzQwPj4yXT1hYVswXSxtcltMdCs0ND4+Ml09YWFbMV0sR25bTHQrNDg+PjJdPURuJTFlMyoxZTMqMWUzLGFhPVtNYXRoLmZsb29yKGNyLzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKGNyLzFlMyksK01h''@;'; put 'put ''dGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzU2Pj4yXT1hYVswXSxtcltMdCs2MD4+Ml09YWFbMV0sR25bTHQrNjQ+PjJdPWNyJTFlMyoxZTMqMWUz''@;'; put 'put ''LGFhPVtNYXRoLmZsb29yKFJyLzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKFJyLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzcyPj4y''@;'; put 'put ''XT1hYVswXSxtcltMdCs3Nj4+Ml09YWFbMV0sR25bTHQrODA+PjJdPVJyJTFlMyoxZTMqMWUzLGFhPVskdC5pbm8+Pj4wLChacj0kdC5pbm8sK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80''@;'; put 'put ''Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0Kzg4Pj4yXT1hYVswXSxtcltMdCs5Mj4+Ml09YWFbMV0sMH0sZG9Nc3luYyhaZSxsdCxMdCwkdCxEbil7aWYoIVl0LmlzRmlsZShsdC5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZigyJiR0KXJldHVybiAwO3ZhciBjcj1N''@;'; put 'put ''bi5zbGljZShaZSxaZStMdCk7WXQubXN5bmMobHQsY3IsRG4sTHQsJHQpfSxnZXRTdHJlYW1Gcm9tRkQ6WmU9Pll0LmdldFN0cmVhbUNoZWNrZWQoWmUpLHZhcmFyZ3M6dm9pZCAwLGdldFN0cjpaZT0+djAoWmUpfSxFNj0oKT0+e3ZhciBaZT1tclsrWnMudmFyYXJncz4+Ml07cmV0dXJuIFpz''@;'; put 'put ''LnZhcmFyZ3MrPTQsWmV9LGU1PUU2LG92PShaZSxsdCxMdCk9PkUxKFplLE1uLGx0LEx0KSxaaD0oWmUsbHQpPT5sdCsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhWmU/KFplPj4+MCkrNDI5NDk2NzI5NipsdDpOYU4sa3c9W10sR0R0PVplPT57dmFyIEx0PShaZS1kdC5idWZmZXIuYnl0ZUxlbmd0''@;'; put 'put ''aCs2NTUzNSkvNjU1MzZ8MDt0cnl7cmV0dXJuIGR0Lmdyb3coTHQpLE9uKCksMX1jYXRjaHt9fSxZdGU9e30sVUE9KCk9PntpZighVUEuc3RyaW5ncyl7dmFyIGx0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3Vz''@;'; put 'put ''ZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsXzoiLi90aGlzLnByb2dyYW0ifTtmb3IodmFyIEx0IGluIFl0ZSl2b2lkIDA9PT1ZdGVb''@;'; put 'put ''THRdP2RlbGV0ZSBsdFtMdF06bHRbTHRdPVl0ZVtMdF07dmFyICR0PVtdO2Zvcih2YXIgTHQgaW4gbHQpJHQucHVzaChgJHtMdH09JHtsdFtMdF19YCk7VUEuc3RyaW5ncz0kdH1yZXR1cm4gVUEuc3RyaW5nc307WXQuY3JlYXRlUHJlbG9hZGVkRmlsZT0oWmUsbHQsTHQsJHQsRG4sY3IsUnIs''@;'; put 'put ''WHIsa2EsR28pPT57dmFyIEhzPWx0P1VzLnJlc29sdmUoUW8uam9pbjIoWmUsbHQpKTpaZTtmdW5jdGlvbiBncyh4byl7ZnVuY3Rpb24gWHMoQTEpe0dvPy4oKSxYcnx8KChaZSxsdCxMdCwkdCxEbixjcik9PntZdC5jcmVhdGVEYXRhRmlsZShaZSxsdCxMdCwkdCxEbixjcil9KShaZSxsdCxB''@;'; put 'put ''MSwkdCxEbixrYSksY3I/LigpLEhyKCl9KChaZSxsdCxMdCwkdCk9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBEbj0hMTtyZXR1cm4gWk4uZm9yRWFjaChjcj0+e0RufHxjci5jYW5IYW5kbGUobHQpJiYoY3IuaGFuZGxlKFplLGx0LEx0LCR0KSxEbj0hMCl9KSxE''@;'; put 'put ''bn0pKHhvLEhzLFhzLCgpPT57UnI/LigpLEhyKCl9KXx8WHMoeG8pfWFyKCksInN0cmluZyI9PXR5cGVvZiBMdD8oKFplLGx0LEx0LCR0KT0+e3ZhciBEbj1gYWwgJHtaZX1gOyh2b2lkIDApKFplKS50aGVuKGNyPT57bHQobmV3IFVpbnQ4QXJyYXkoY3IpKSxEbiYmSHIoKX0sY3I9PntpZigh''@;'; put 'put ''THQpdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7WmV9IiBmYWlsZWQuYDtMdCgpfSksRG4mJmFyKCl9KShMdCxncyxScik6Z3MoTHQpfSxZdC5zdGF0aWNJbml0KCksJGEuZG9lc05vdEV4aXN0RXJyb3I9bmV3IFl0LkVycm5vRXJyb3IoNDQpLCRhLmRvZXNOb3RFeGlzdEVycm9yLnN0YWNr''@;'; put 'put ''PSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+Ijt2YXIgUU4sY0l0PXthOihaZSxsdCxMdCk9Pnt0aHJvdyBuZXcgcHMoWmUpLmluaXQobHQsTHQpLFplfSxpOmZ1bmN0aW9uIEdOKFplLGx0LEx0LCR0KXt0cnl7aWYobHQ9WnMuZ2V0U3RyKGx0KSxsdD1acy5jYWxjdWxhdGVBdChaZSxsdCks''@;'; put 'put ''LTgmTHQpcmV0dXJuLTI4O3ZhciBjcj1ZdC5sb29rdXBQYXRoKGx0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFjcilyZXR1cm4tNDQ7dmFyIFJyPSIiO3JldHVybiA0Jkx0JiYoUnIrPSJyIiksMiZMdCYmKFJyKz0idyIpLDEmTHQmJihScis9IngiKSxSciYmWXQubm9kZVBlcm1pc3Npb25zKGNy''@;'; put 'put ''LFJyKT8tMjowfWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybi1Yci5lcnJub319LGY6ZnVuY3Rpb24gRTMoWmUsbHQsTHQpe1pzLnZhcmFyZ3M9THQ7dHJ5e3ZhciAkdD1acy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3N3aXRj''@;'; put 'put ''aChsdCl7Y2FzZSAwOmlmKChEbj1FNigpKTwwKXJldHVybi0yODtmb3IoO1l0LnN0cmVhbXNbRG5dOylEbisrO3JldHVybiBZdC5kdXBTdHJlYW0oJHQsRG4pLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSAxMzpjYXNlIDE0OnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gJHQuZmxhZ3M7Y2FzZSA0OnZh''@;'; put 'put ''ciBEbj1FNigpO3JldHVybiAkdC5mbGFnc3w9RG4sMDtjYXNlIDEyOnJldHVybiBEbj1lNSgpLENyW0RuKzA+PjFdPTIsMH1yZXR1cm4tMjh9Y2F0Y2goWHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVhyLm5hbWUpdGhyb3cgWHI7cmV0dXJuLVhyLmVycm5vfX0seDpmdW5j''@;'; put 'put ''dGlvbiAkTihaZSxsdCl7dHJ5e3ZhciBMdD1acy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiBacy5kb1N0YXQoWXQuc3RhdCxMdC5wYXRoLGx0KX1jYXRjaCgkdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09JHQubmFtZSl0aHJvdyAkdDtyZXR1cm4tJHQuZXJybm99fSxr''@;'; put 'put ''OmZ1bmN0aW9uIEtOKFplLGx0LEx0KXtacy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtzd2l0Y2gobHQpe2Nhc2UgMjE1MDk6Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUyNDpjYXNlIDIxNTE1OnJldHVybiAkdC50dHk/MDot''@;'; put 'put ''NTk7Y2FzZSAyMTUwNTppZighJHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIERuPSR0LnR0eS5vcHMuaW9jdGxfdGNnZXRzKCR0KSxjcj1lNSgpO21yW2NyPj4yXT1Ebi5jX2lmbGFnfHwwLG1yW2NyKzQ+PjJdPURuLmNfb2ZsYWd8fDAsbXJbY3IrOD4+''@;'; put 'put ''Ml09RG4uY19jZmxhZ3x8MCxtcltjcisxMj4+Ml09RG4uY19sZmxhZ3x8MDtmb3IodmFyIFJyPTA7UnI8MzI7UnIrKyl0bltjcitScisxN109RG4uY19jY1tScl18fDA7cmV0dXJuIDB9cmV0dXJuIDA7Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1MDg6aWYoISR0LnR0eSlyZXR1cm4t''@;'; put 'put ''NTk7aWYoJHQudHR5Lm9wcy5pb2N0bF90Y3NldHMpe2NyPWU1KCk7dmFyIFhyPW1yW2NyPj4yXSxrYT1tcltjcis0Pj4yXSxHbz1tcltjcis4Pj4yXSxIcz1tcltjcisxMj4+Ml0sYWw9W107Zm9yKFJyPTA7UnI8MzI7UnIrKylhbC5wdXNoKHRuW2NyK1JyKzE3XSk7cmV0dXJuICR0LnR0eS5v''@;'; put 'put ''cHMuaW9jdGxfdGNzZXRzKCR0LnR0eSxsdCx7Y19pZmxhZzpYcixjX29mbGFnOmthLGNfY2ZsYWc6R28sY19sZmxhZzpIcyxjX2NjOmFsfSl9cmV0dXJuIDA7Y2FzZSAyMTUxOTpyZXR1cm4gJHQudHR5Pyhjcj1lNSgpLG1yW2NyPj4yXT0wLDApOi01OTtjYXNlIDIxNTIwOnJldHVybiAkdC50''@;'; put 'put ''dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnJldHVybiBjcj1lNSgpLFl0LmlvY3RsKCR0LGx0LGNyKTtjYXNlIDIxNTIzOmlmKCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIGdzPSR0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeigkdC50dHkpO2Ny''@;'; put 'put ''PWU1KCksQ3JbY3I+PjFdPWdzWzBdLENyW2NyKzI+PjFdPWdzWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaCh4byl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09eG8ubmFtZSl0aHJvdyB4bztyZXR1cm4teG8uZXJybm99fSx2OmZ1bmN0aW9uIHFOKFplLGx0''@;'; put 'put ''LEx0LCR0KXt0cnl7bHQ9WnMuZ2V0U3RyKGx0KTt2YXIgRG49MjU2JiR0LGNyPTQwOTYmJHQ7cmV0dXJuICR0Jj0tNjQwMSxsdD1acy5jYWxjdWxhdGVBdChaZSxsdCxjciksWnMuZG9TdGF0KERuP1l0LmxzdGF0Oll0LnN0YXQsbHQsTHQpfWNhdGNoKFJyKXtpZih0eXBlb2YgWXQ+InUifHwi''@;'; put 'put ''RXJybm9FcnJvciIhPT1Sci5uYW1lKXRocm93IFJyO3JldHVybi1Sci5lcnJub319LGg6ZnVuY3Rpb24gWE4oWmUsbHQsTHQsJHQpe1pzLnZhcmFyZ3M9JHQ7dHJ5e2x0PVpzLmdldFN0cihsdCksbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQpO3ZhciBEbj0kdD9FNigpOjA7cmV0dXJuIFl0Lm9w''@;'; put 'put ''ZW4obHQsTHQsRG4pLmZkfWNhdGNoKGNyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1jci5uYW1lKXRocm93IGNyO3JldHVybi1jci5lcnJub319LHE6ZnVuY3Rpb24gY28oWmUsbHQsTHQsJHQpe3RyeXtpZihsdD1acy5nZXRTdHIobHQpLGx0PVpzLmNhbGN1bGF0ZUF0KFpl''@;'; put 'put ''LGx0KSwkdDw9MClyZXR1cm4tMjg7dmFyIERuPVl0LnJlYWRsaW5rKGx0KSxjcj1NYXRoLm1pbigkdCxlcyhEbikpLFJyPXRuW0x0K2NyXTtyZXR1cm4gb3YoRG4sTHQsJHQrMSksdG5bTHQrY3JdPVJyLGNyfWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5u''@;'; put 'put ''YW1lKXRocm93IFhyO3JldHVybi1Yci5lcnJub319LHI6ZnVuY3Rpb24gZ3IoWmUpe3RyeXtyZXR1cm4gWmU9WnMuZ2V0U3RyKFplKSxZdC5ybWRpcihaZSksMH1jYXRjaChsdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09bHQubmFtZSl0aHJvdyBsdDtyZXR1cm4tbHQuZXJy''@;'; put 'put ''bm99fSx3OmZ1bmN0aW9uIFFpKFplLGx0KXt0cnl7cmV0dXJuIFplPVpzLmdldFN0cihaZSksWnMuZG9TdGF0KFl0LnN0YXQsWmUsbHQpfWNhdGNoKEx0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1MdC5uYW1lKXRocm93IEx0O3JldHVybi1MdC5lcnJub319LHM6ZnVuY3Rp''@;'; put 'put ''b24gWGEoWmUsbHQsTHQpe3RyeXtyZXR1cm4gbHQ9WnMuZ2V0U3RyKGx0KSxsdD1acy5jYWxjdWxhdGVBdChaZSxsdCksMD09PUx0P1l0LnVubGluayhsdCk6NTEyPT09THQ/WXQucm1kaXIobHQpOnFyKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2goJHQpe2lm''@;'; put 'put ''KHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhyb3cgJHQ7cmV0dXJuLSR0LmVycm5vfX0sajooKT0+cXIoIiIpLHk6KCk9PjEsejooWmUsbHQsTHQpPT5Nbi5jb3B5V2l0aGluKFplLGx0LGx0K0x0KSxsOmZ1bmN0aW9uIHN2KFplLGx0LEx0LCR0LERuLGNyLFJyLFhy''@;'; put 'put ''KXt2YXIga2E9WmgoRG4sY3IpO3RyeXtpZihpc05hTihrYSkpcmV0dXJuIDYxO3ZhciBHbz1acy5nZXRTdHJlYW1Gcm9tRkQoJHQpLEhzPVl0Lm1tYXAoR28sWmUsa2EsbHQsTHQpLGFsPUhzLnB0cjtyZXR1cm4gbXJbUnI+PjJdPUhzLmFsbG9jYXRlZCxHbltYcj4+Ml09YWwsMH1jYXRjaChn''@;'; put 'put ''cyl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09Z3MubmFtZSl0aHJvdyBncztyZXR1cm4tZ3MuZXJybm99fSxtOmZ1bmN0aW9uIHpBKFplLGx0LEx0LCR0LERuLGNyLFJyKXt2YXIgWHI9WmgoY3IsUnIpO3RyeXt2YXIga2E9WnMuZ2V0U3RyZWFtRnJvbUZEKERuKTsyJkx0JiZa''@;'; put 'put ''cy5kb01zeW5jKFplLGthLGx0LCR0LFhyKX1jYXRjaChHbyl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09R28ubmFtZSl0aHJvdyBHbztyZXR1cm4tR28uZXJybm99fSxvOihaZSxsdCxMdCwkdCk9Pnt2YXIgRG49KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGNyPW5ldyBEYXRl''@;'; put 'put ''KERuLDAsMSksUnI9bmV3IERhdGUoRG4sNiwxKSxYcj1jci5nZXRUaW1lem9uZU9mZnNldCgpLGthPVJyLmdldFRpbWV6b25lT2Zmc2V0KCksR289TWF0aC5tYXgoWHIsa2EpO0duW1plPj4yXT02MCpHbyxtcltsdD4+Ml09KyhYciE9a2EpO3ZhciBIcz14bz0+e3ZhciBYcz14bz49MD8iLSI6''@;'; put 'put ''IisiLEExPU1hdGguYWJzKHhvKTtyZXR1cm5gVVRDJHtYc30ke1N0cmluZyhNYXRoLmZsb29yKEExLzYwKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKEExJTYwKS5wYWRTdGFydCgyLCIwIil9YH0sYWw9SHMoWHIpLGdzPUhzKGthKTtrYTxYcj8ob3YoYWwsTHQsMTcpLG92KGdzLCR0LDE3''@;'; put 'put ''KSk6KG92KGFsLCR0LDE3KSxvdihncyxMdCwxNykpfSxBOihaZSxsdCxMdCk9PigoWmUsbHQsTHQpPT57dmFyICR0PSgoWmUsbHQpPT57a3cubGVuZ3RoPTA7Zm9yKHZhciBMdDtMdD1NbltaZSsrXTspe3ZhciAkdD0xMDUhPUx0O2x0Kz0oJHQmPTExMiE9THQpJiZsdCU4PzQ6MCxrdy5wdXNo''@;'; put 'put ''KDExMj09THQ/R25bbHQ+PjJdOjEwNT09THQ/bXJbbHQ+PjJdOl9pW2x0Pj4zXSksbHQrPSR0Pzg6NH1yZXR1cm4ga3d9KShsdCxMdCk7cmV0dXJuIEJhW1plXSguLi4kdCl9KShaZSxsdCxMdCksYzooKT0+RGF0ZS5ub3coKSxwOlplPT57dmFyIGx0PU1uLmxlbmd0aCxMdD0yMTQ3NDgzNjQ4''@;'; put 'put ''O2lmKChaZT4+Pj0wKT5MdClyZXR1cm4hMTtmb3IodmFyICR0PTE7JHQ8PTQ7JHQqPTIpe3ZhciBEbj1sdCooMSsuMi8kdCk7RG49TWF0aC5taW4oRG4sWmUrMTAwNjYzMjk2KTt2YXIgY3I9TWF0aC5taW4oTHQsVkEoTWF0aC5tYXgoWmUsRG4pLDY1NTM2KSk7aWYoR0R0KGNyKSlyZXR1cm4h''@;'; put 'put ''MH1yZXR1cm4hMX0sdDooWmUsbHQpPT57dmFyIEx0PTA7cmV0dXJuIFVBKCkuZm9yRWFjaCgoJHQsRG4pPT57dmFyIGNyPWx0K0x0O0duW1plKzQqRG4+PjJdPWNyLCgoWmUsbHQpPT57Zm9yKHZhciBMdD0wO0x0PFplLmxlbmd0aDsrK0x0KXRuW2x0KytdPVplLmNoYXJDb2RlQXQoTHQpO3Ru''@;'; put 'put ''W2x0XT0wfSkoJHQsY3IpLEx0Kz0kdC5sZW5ndGgrMX0pLDB9LHU6KFplLGx0KT0+e3ZhciBMdD1VQSgpO0duW1plPj4yXT1MdC5sZW5ndGg7dmFyICR0PTA7cmV0dXJuIEx0LmZvckVhY2goRG49PiR0Kz1Ebi5sZW5ndGgrMSksR25bbHQ+PjJdPSR0LDB9LGc6KFplLGx0KT0+eyhaZT0+eygo''@;'; put 'put ''WmUsbHQpPT57dGhyb3cgbHR9KSgwLG5ldyBJbyhaZSkpfSkoWmUpfSxiOmZ1bmN0aW9uIHJJdChaZSl7dHJ5e3ZhciBsdD1acy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiBZdC5jbG9zZShsdCksMH1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFt''@;'; put 'put ''ZSl0aHJvdyBMdDtyZXR1cm4gTHQuZXJybm99fSxlOmZ1bmN0aW9uIGFJdChaZSxsdCxMdCwkdCl7dHJ5e3ZhciBjcj0oKFplLGx0LEx0LCR0KT0+e2Zvcih2YXIgRG49MCxjcj0wO2NyPEx0O2NyKyspe3ZhciBScj1HbltsdD4+Ml0sWHI9R25bbHQrND4+Ml07bHQrPTg7dmFyIGthPVl0LnJl''@;'; put 'put ''YWQoWmUsdG4sUnIsWHIsJHQpO2lmKGthPDApcmV0dXJuLTE7aWYoRG4rPWthLGthPFhyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9a2EpfXJldHVybiBEbn0pKFpzLmdldFN0cmVhbUZyb21GRChaZSksbHQsTHQpO3JldHVybiBHblskdD4+Ml09Y3IsMH1jYXRjaChScil7aWYodHlwZW9m''@;'; put 'put ''IFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4gUnIuZXJybm99fSxuOmZ1bmN0aW9uIG9JdChaZSxsdCxMdCwkdCxEbil7dmFyIGNyPVpoKGx0LEx0KTt0cnl7aWYoaXNOYU4oY3IpKXJldHVybiA2MTt2YXIgUnI9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTty''@;'; put 'put ''ZXR1cm4gWXQubGxzZWVrKFJyLGNyLCR0KSxhYT1bUnIucG9zaXRpb24+Pj4wLChacj1Sci5wb3NpdGlvbiwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0s''@;'; put 'put ''bXJbRG4+PjJdPWFhWzBdLG1yW0RuKzQ+PjJdPWFhWzFdLFJyLmdldGRlbnRzJiYwPT09Y3ImJjA9PT0kdCYmKFJyLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goWHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVhyLm5hbWUpdGhyb3cgWHI7cmV0dXJuIFhyLmVycm5vfX0sZDpm''@;'; put 'put ''dW5jdGlvbiBsSXQoWmUsbHQsTHQsJHQpe3RyeXt2YXIgY3I9KChaZSxsdCxMdCwkdCk9Pntmb3IodmFyIERuPTAsY3I9MDtjcjxMdDtjcisrKXt2YXIgUnI9R25bbHQ+PjJdLFhyPUduW2x0KzQ+PjJdO2x0Kz04O3ZhciBrYT1ZdC53cml0ZShaZSx0bixScixYciwkdCk7aWYoa2E8MClyZXR1''@;'; put 'put ''cm4tMTtpZihEbis9a2Esa2E8WHIpYnJlYWs7dHlwZW9mICR0PCJ1IiYmKCR0Kz1rYSl9cmV0dXJuIERufSkoWnMuZ2V0U3RyZWFtRnJvbUZEKFplKSxsdCxMdCk7cmV0dXJuIEduWyR0Pj4yXT1jciwwfWNhdGNoKFJyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Sci5uYW1l''@;'; put 'put ''KXRocm93IFJyO3JldHVybiBSci5lcnJub319fSxMbD1mdW5jdGlvbiBNcigpe2FyKCk7dmFyIEx0PWZ1bmN0aW9uIE5yKCl7cmV0dXJue2E6Y0l0fX0oKTtyZXR1cm4gJG4/Pz1mdW5jdGlvbiBwcigpe3ZhciBaZT0iZ3JhcGh2aXpsaWIud2FzbSI7cmV0dXJuIHluKFplKT9aZTpmdW5jdGlv''@;'; put 'put ''biBiZShaZSl7cmV0dXJuIiIrWmV9KFplKX0oKSxmdW5jdGlvbiBzcihaZSxsdCxMdCwkdCl7cmV0dXJuIFplfHwiZnVuY3Rpb24iIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fHluKGx0KXx8KFplPT5aZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKGx0KXx8ImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIGZldGNoP1puKGx0LEx0LCR0KTpmZXRjaChsdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oRG49PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKERuLEx0KS50aGVuKCR0LGZ1bmN0aW9uKFJyKXtyZXR1cm4gcnQoYHdhc20gc3RyZWFt''@;'; put 'put ''aW5nIGNvbXBpbGUgZmFpbGVkOiAke1JyfWApLHJ0KCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFpuKGx0LEx0LCR0KX0pKX0ocHQsJG4sTHQsZnVuY3Rpb24gbHQoJHQpeyFmdW5jdGlvbiBaZSgkdCxEbil7cmV0dXJuIGR0PShMbD0kdC5leHBvcnRzKS5C''@;'; put 'put ''LE9uKCksZnVuY3Rpb24gdnQoWmUpe0puLnVuc2hpZnQoWmUpfShMbC5DKSxIcigpLExsfSgkdC5pbnN0YW5jZSl9KS5jYXRjaChmKSx7fX0oKSx4N2U9KGQuX3dlYmlkbF9mcmVlPVplPT4oZC5fd2ViaWRsX2ZyZWU9TGwuRCkoWmUpLGQuX2ZyZWU9WmU9PihkLl9mcmVlPUxsLkUpKFplKSxk''@;'; put 'put ''Ll93ZWJpZGxfbWFsbG9jPVplPT4oZC5fd2ViaWRsX21hbGxvYz1MbC5GKShaZSksZC5fbWFsbG9jPVplPT4oZC5fbWFsbG9jPUxsLkcpKFplKSxkLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPVplPT4oeDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVz''@;'; put 'put ''dHJveV9fXzA9TGwuSCkoWmUpKSxFN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9KFplLGx0KT0+KEU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2aXpfMj1MbC5JKShaZSxsdCksVDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJz''@;'; put 'put ''aW9uXzA9KCk9PihUN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD1MbC5KKSgpLEE3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9KCk9PihBN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPUxsLkspKCksazdl''@;'; put 'put ''PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9KFplLGx0LEx0KT0+KGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPUxsLkwpKFplLGx0LEx0KSxEN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPShaZSxsdCxM''@;'; put 'put ''dCwkdCk9PihEN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPUxsLk0pKFplLGx0LEx0LCR0KSxJN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2FjeWNsaWNfMz0oWmUsbHQsTHQsJHQpPT4oSTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGlj''@;'; put 'put ''XzM9TGwuTikoWmUsbHQsTHQsJHQpLFI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdHJlZF8zPShaZSxsdCxMdCwkdCk9PihSN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz1MbC5PKShaZSxsdCxMdCwkdCksTDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZp''@;'; put 'put ''el91bmZsYXR0ZW5fND0oWmUsbHQsTHQsJHQsRG4pPT4oTDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel91bmZsYXR0ZW5fND1MbC5QKShaZSxsdCxMdCwkdCxEbiksTzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfbGF5b3V0X3Jlc3VsdF8wPVplPT4oTzdlPWQuX2Vt''@;'; put 'put ''c2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfbGF5b3V0X3Jlc3VsdF8wPUxsLlEpKFplKSxQN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9KFplLGx0KT0+KFA3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2xheW91dF9yZXN1bHRf''@;'; put 'put ''MT1MbC5SKShaZSxsdCksRjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9WmU9PihGN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX291dEZpbGVfMD1MbC5TKShaZSksSDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFw''@;'; put 'put ''aHZpel9zZXRfYWN5Y2xpY19vdXRGaWxlXzE9KFplLGx0KT0+KEg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPUxsLlQpKFplLGx0KSxON2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1aZT0+KE43''@;'; put 'put ''ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfbnVtX3Jldl8wPUxsLlUpKFplKSxWN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX251bV9yZXZfMT0oWmUsbHQpPT4oVjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5''@;'; put 'put ''Y2xpY19udW1fcmV2XzE9TGwuVikoWmUsbHQpLEI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9WmU9PihCN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX291dF8wPUxsLlcpKFplKSxqN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBo''@;'; put 'put ''dml6X3NldF90cmVkX291dF8xPShaZSxsdCk9PihqN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPUxsLlgpKFplLGx0KSx6N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX2Vycl8wPVplPT4oejdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9H''@;'; put 'put ''cmFwaHZpel9nZXRfdHJlZF9lcnJfMD1MbC5ZKShaZSksVTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9lcnJfMT0oWmUsbHQpPT4oVTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9lcnJfMT1MbC5aKShaZSxsdCksWjdlPWQuX2Vtc2NyaXB0''@;'; put 'put ''ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPVplPT4oWjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPUxsLl8pKFplKSxXN2U9KFplLGx0KT0+KFc3ZT1MbC5hYSkoWmUsbHQpO2Z1bmN0aW9uIFk3ZSgpe050PjB8fChmdW5jdGlvbiB3aSgpe1pvKHpy''@;'; put 'put ''KX0oKSxOdD4wKXx8ZnVuY3Rpb24gWmUoKXtRTnx8KFFOPSEwLGQuY2FsbGVkUnVuPSEwLCFKdCYmKGZ1bmN0aW9uIGVhKCl7IWQubm9GU0luaXQmJiFZdC5pbml0aWFsaXplZCYmWXQuaW5pdCgpLFl0Lmlnbm9yZVBlcm1pc3Npb25zPSExLGQ0LmluaXQoKSxabyhKbil9KCksaChkKSxmdW5j''@;'; put 'put ''dGlvbiBmYSgpe1pvKElyKX0oKSkpfSgpfWZ1bmN0aW9uIHNmKCl7fWZ1bmN0aW9uIGVWKFplKXtyZXR1cm4oWmV8fHNmKS5fX2NhY2hlX199ZnVuY3Rpb24gR3RlKFplLGx0KXt2YXIgTHQ9ZVYobHQpLCR0PUx0W1plXTtyZXR1cm4gJHR8fCgoJHQ9T2JqZWN0LmNyZWF0ZSgobHR8fHNmKS5w''@;'; put 'put ''cm90b3R5cGUpKS5wdHI9WmUsTHRbWmVdPSR0KX1kLlVURjhUb1N0cmluZz12MCxIbj1mdW5jdGlvbiBaZSgpe1FOfHxZN2UoKSxRTnx8KEhuPVplKX0sWTdlKCksKHNmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNmLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXNmLHNmLnByb3RvdHlwZS5f''@;'; put 'put ''X2NsYXNzX189c2Ysc2YuX19jYWNoZV9fPXt9LGQuV3JhcHBlck9iamVjdD1zZixkLmdldENhY2hlPWVWLGQud3JhcFBvaW50ZXI9R3RlLGQuY2FzdE9iamVjdD1mdW5jdGlvbiBnSXQoWmUsbHQpe3JldHVybiBHdGUoWmUucHRyLGx0KX0sZC5OVUxMPUd0ZSgwKSxkLmRlc3Ryb3k9ZnVuY3Rp''@;'; put 'put ''b24gbUl0KFplKXtpZighWmUuX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO1plLl9fZGVzdHJveV9fKCksZGVsZXRlIGVWKFplLl9fY2xhc3NfXylbWmUucHRyXX0sZC5jb21wYXJlPWZ1bmN0aW9u''@;'; put 'put ''IHZJdChaZSxsdCl7cmV0dXJuIFplLnB0cj09PWx0LnB0cn0sZC5nZXRQb2ludGVyPWZ1bmN0aW9uIGJJdChaZSl7cmV0dXJuIFplLnB0cn0sZC5nZXRDbGFzcz1mdW5jdGlvbiB5SXQoWmUpe3JldHVybiBaZS5fX2NsYXNzX199O3ZhciBXcz17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBz''@;'; put 'put ''OltdLG5lZWRlZDowLHByZXBhcmUoKXtpZihXcy5uZWVkZWQpe2Zvcih2YXIgWmU9MDtaZTxXcy50ZW1wcy5sZW5ndGg7WmUrKylkLl93ZWJpZGxfZnJlZShXcy50ZW1wc1taZV0pO1dzLnRlbXBzLmxlbmd0aD0wLGQuX3dlYmlkbF9mcmVlKFdzLmJ1ZmZlciksV3MuYnVmZmVyPTAsV3Muc2l6''@;'; put 'put ''ZSs9V3MubmVlZGVkLFdzLm5lZWRlZD0wfVdzLmJ1ZmZlcnx8KFdzLnNpemUrPTEyOCxXcy5idWZmZXI9ZC5fd2ViaWRsX21hbGxvYyhXcy5zaXplKSxDbihXcy5idWZmZXIpKSxXcy5wb3M9MH0sYWxsb2MoWmUsbHQpe0NuKFdzLmJ1ZmZlcik7dmFyIERuLCR0PVplLmxlbmd0aCpsdC5CWVRF''@;'; put 'put ''U19QRVJfRUxFTUVOVDtyZXR1cm4gJHQ9VkEoJHQsOCksV3MucG9zKyR0Pj1Xcy5zaXplPyhDbigkdD4wKSxXcy5uZWVkZWQrPSR0LERuPWQuX3dlYmlkbF9tYWxsb2MoJHQpLFdzLnRlbXBzLnB1c2goRG4pKTooRG49V3MuYnVmZmVyK1dzLnBvcyxXcy5wb3MrPSR0KSxEbn0sY29weShaZSxs''@;'; put 'put ''dCxMdCl7THQvPWx0LkJZVEVTX1BFUl9FTEVNRU5UO2Zvcih2YXIgJHQ9MDskdDxaZS5sZW5ndGg7JHQrKylsdFtMdCskdF09WmVbJHRdfX07ZnVuY3Rpb24gbGYoWmUpe2lmKCJzdHJpbmciPT10eXBlb2YgWmUpe3ZhciBsdD1mdW5jdGlvbiB4MyhaZSxsdCxMdCl7dmFyICR0PUx0PjA/THQ6''@;'; put 'put ''ZXMoWmUpKzEsRG49bmV3IEFycmF5KCR0KSxjcj1FMShaZSxEbiwwLERuLmxlbmd0aCk7cmV0dXJuIGx0JiYoRG4ubGVuZ3RoPWNyKSxEbn0oWmUpLEx0PVdzLmFsbG9jKGx0LHRuKTtyZXR1cm4gV3MuY29weShsdCx0bixMdCksTHR9cmV0dXJuIFplfWZ1bmN0aW9uIHQ1KCl7dGhyb3ciY2Fu''@;'; put 'put ''bm90IGNvbnN0cnVjdCBhIFZvaWRQdHIsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gcm8oWmUsbHQpe1plJiYib2JqZWN0Ij09dHlwZW9mIFplJiYoWmU9WmUucHRyKSxsdCYmIm9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksdGhpcy5wdHI9RTdlKFplLGx0KSxlVihy''@;'; put 'put ''bylbdGhpcy5wdHJdPXRoaXN9cmV0dXJuKHQ1LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNmLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXQ1LHQ1LnByb3RvdHlwZS5fX2NsYXNzX189dDUsdDUuX19jYWNoZV9fPXt9LGQuVm9pZFB0cj10NSx0NS5wcm90b3R5cGUuX19kZXN0cm95X189dDUu''@;'; put 'put ''cHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7eDdlKHRoaXMucHRyKX0sKHJvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNmLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXJvLHJvLnByb3RvdHlwZS5fX2NsYXNzX189cm8scm8uX19jYWNoZV9fPXt9LGQuR3JhcGh2aXo9cm8scm8u''@;'; put 'put ''cHJvdG90eXBlLnZlcnNpb249cm8ucHJvdG90eXBlLnZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdjAoVDdlKCkpfSxyby5wcm90b3R5cGUubGFzdEVycm9yPXJvLnByb3RvdHlwZS5sYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoQTdlKCkpfSxyby5wcm90b3R5cGUuY3JlYXRlRmls''@;'; put 'put ''ZT1yby5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihaZSxsdCl7dmFyIEx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0PWx0JiYib2JqZWN0Ij09dHlwZW9mIGx0P2x0LnB0cjpsZihsdCksazdlKEx0LFplLGx0''@;'; put 'put ''KX0scm8ucHJvdG90eXBlLmxheW91dD1yby5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0PWx0JiYib2JqZWN0Ij09dHlwZW9mIGx0''@;'; put 'put ''P2x0LnB0cjpsZihsdCksTHQ9THQmJiJvYmplY3QiPT10eXBlb2YgTHQ/THQucHRyOmxmKEx0KSx2MChEN2UoJHQsWmUsbHQsTHQpKX0scm8ucHJvdG90eXBlLmFjeWNsaWM9cm8ucHJvdG90eXBlLmFjeWNsaWM9ZnVuY3Rpb24oWmUsbHQsTHQpe3ZhciAkdD10aGlzLnB0cjtyZXR1cm4gV3Mu''@;'; put 'put ''cHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSwhIUk3ZSgkdCxaZSxsdCxMdCl9LHJvLnByb3RvdHlwZS50cmVkPXJv''@;'; put 'put ''LnByb3RvdHlwZS50cmVkPWZ1bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0''@;'; put 'put ''JiYoTHQ9THQucHRyKSxSN2UoJHQsWmUsbHQsTHQpfSxyby5wcm90b3R5cGUudW5mbGF0dGVuPXJvLnByb3RvdHlwZS51bmZsYXR0ZW49ZnVuY3Rpb24oWmUsbHQsTHQsJHQpe3ZhciBEbj10aGlzLnB0cjtyZXR1cm4gV3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1pl''@;'; put 'put ''LnB0cjpsZihaZSksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSwkdCYmIm9iamVjdCI9PXR5cGVvZiAkdCYmKCR0PSR0LnB0ciksdjAoTDdlKERuLFplLGx0LEx0LCR0KSl9LHJvLnByb3RvdHlwZS5nZXRf''@;'; put 'put ''bGF5b3V0X3Jlc3VsdD1yby5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoTzdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdD1yby5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9ZnVuY3Rpb24oWmUpe3ZhciBsdD10''@;'; put 'put ''aGlzLnB0cjtXcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxQN2UobHQsWmUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocm8ucHJvdG90eXBlLCJsYXlvdXRfcmVzdWx0Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdCxzZXQ6''@;'; put 'put ''cm8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0fSkscm8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGU9cm8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoRjdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRG''@;'; put 'put ''aWxlPXJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksSDdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlw''@;'; put 'put ''ZSwiYWN5Y2xpY19vdXRGaWxlIix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlLHNldDpyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZX0pLHJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2PXJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2PWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIE43ZSh0aGlzLnB0cil9LHJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2PXJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2PWZ1bmN0aW9uKFplKXtaZSYmIm9iamVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksVjdlKHRoaXMucHRyLFplKX0s''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwiYWN5Y2xpY19udW1fcmV2Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2LHNldDpyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldn0pLHJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9cm8ucHJvdG90''@;'; put 'put ''eXBlLmdldF90cmVkX291dD1mdW5jdGlvbigpe3JldHVybiB2MChCN2UodGhpcy5wdHIpKX0scm8ucHJvdG90eXBlLnNldF90cmVkX291dD1yby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIFplP1plLnB0cjpsZihaZSksajdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwidHJlZF9vdXQiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF90cmVkX291dCxzZXQ6cm8ucHJvdG90eXBlLnNldF90cmVkX291dH0pLHJvLnByb3RvdHlwZS5nZXRfdHJl''@;'; put 'put ''ZF9lcnI9cm8ucHJvdG90eXBlLmdldF90cmVkX2Vycj1mdW5jdGlvbigpe3JldHVybiB2MCh6N2UodGhpcy5wdHIpKX0scm8ucHJvdG90eXBlLnNldF90cmVkX2Vycj1yby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyPWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFpl''@;'; put 'put ''PVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksVTdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwidHJlZF9lcnIiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF90cmVkX2VycixzZXQ6cm8ucHJvdG90eXBlLnNldF90cmVkX2Vycn0pLHJvLnBy''@;'; put 'put ''b3RvdHlwZS5fX2Rlc3Ryb3lfXz1yby5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtaN2UodGhpcy5wdHIpfSx2fSk7ZnVuY3Rpb24gWnh0KCl7cmV0dXJuIEZ0ZXx8KEZ0ZT1mdW5jdGlvbiBOeHQoYyxsKXtmb3IodmFyIGE9W10sZD0rIWwsaD0wLGY9MDtjLmxlbmd0aDspe3Zh''@;'; put 'put ''ciB2PUF4dChjLGR8fGwpO2lmKCJvYmplY3QiPT10eXBlb2Ygdil7Zm9yKGQ/KGw9bnVsbCx2LncubGVuZ3RoPT12LnUmJihhLnB1c2gobD12LncpLGYrPXYudSkpOihhLnB1c2gobCksdi5lPTApOyF2Lmw7KXt2YXIgTT1GeHQoYyx2LGwpO018fGUwKDUpLGw/di5lPXYueTooYS5wdXNoKE0p''@;'; put 'put ''LGYrPU0ubGVuZ3RoLHh4dCh2LncsMCxNLmxlbmd0aCksdi53LnNldChNLHYudy5sZW5ndGgtTS5sZW5ndGgpKX1oPXYuYis0KnYuY31lbHNlIGg9djtjPWMuc3ViYXJyYXkoaCl9cmV0dXJuIGZ1bmN0aW9uKGMsbCl7aWYoMT09Yy5sZW5ndGgpcmV0dXJuIGNbMF07Zm9yKHZhciBhPW5ldyBJ''@;'; put 'put ''dShsKSxkPTAsaD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZj1jW2RdO2Euc2V0KGYsaCksaCs9Zi5sZW5ndGh9cmV0dXJuIGF9KGEsZil9KGZ1bmN0aW9uIHp4dChjKXtsZXQgbD1jLmxlbmd0aCxhPVtdLGQ9MCxoPTAsZj0tMTtmb3IobGV0IHY9MDt2PGw7disrKXtsZXQgTT0nQUJDREVGR0hJ''@;'; put 'put ''SktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihjW3ZdKTtpZigtMSE9PU0paWYoZjwwKWY9TTtlbHNle2YrPTkxKk0sZHw9Zjw8aCxoKz0oODE5MSZmKT44OD8xMzoxNDtkb3th''@;'; put 'put ''LnB1c2goMjU1JmQpLGQ+Pj04LGgtPTh9d2hpbGUoaD43KTtmPS0xfX1yZXR1cm4gZj4tMSYmYS5wdXNoKDI1NSYoZHxmPDxoKSksbmV3IFVpbnQ4QXJyYXkoYSl9KCd2NyNhU1hVbmBEQFE8LHozXlgma1UyaHR6OHsvcFlEbW4/eyRKanoycl8/SmxeKzZuRm89eEk8JkI5RkJWK3diO1hhfHFv''@;'; put 'put ''UnpnYmVLc0JTXn5deHp2Pj18LnE/KE08OEdENUdMI0t7c1tTNCFeQzRMeXJOYUxLb1JrRUprTExse2YwVjkwPDteUXB1Z3k1QSUpJilaOnNnOmgufWA4dXVUW1dCQSh5KXV5fEJVSCU4IUUqYGYxd0JfeFsmQDVxRzUlYiZ+amUmN0RiSiRMbHpVQz5XXi87Zmh7PHxHQnkiKX5sJXNfMWE4bT5k''@;'; put 'put ''MFhQQXNUOUxiVyhpakJlTldXW0BebSQoOnZ9b3tRay50aH49OygxYTheMW19TX57PDU/U1AoXilbMkxzYE1gdTkpeVp9Yi9KRH42Rkx0WnNtXkZsfGtIWCw0RlV6cSpPYXo9Ql82czcpU2Q0TF1MY3xseHp2aGg/NnREOCVOXUAmPzhpTzxVUHNbNUpxI1pSZ1p9azNEcUg9JTJRRHtEdGZ9b3dF''@;'; put 'put ''SjZJZHJZRz5WdUUkTVZ3XSwmfk8scUxpQiY1bT8hWUdnaSppVysiUVB5JD9VWmtjYT4wZ0RvITdHfH5nNWRLfFszL3s1fm8kMHYlSmwxODJBcX49emU4fkV6SGVfW1FEY1kxfShlLEtIdTFVOylYWFdAfTEmZ3QsfmAycC86fVhkWW4hTkhmXWk3Nl5YI1FxeW9ncD8lNyRYc3ksWiZ6XyMyZzsl''@;'; put 'put ''LCVuOV55ck5fdnkoKzFTcWBkaH1dJmxha2hMfXImeDM1KmJzeltbd113fjd8UTVscitydmt5aTVUfD1aIUs5fUg8PXI2U19GOGpOUyl9PVJfU18vT2d+Oi9qPGY4RD9CX219IjQzdGgqZyFVJkpXMyRRZEA9dVsqbVhOY3B7O3VjJkpdT1BRITAkZlc4KWNKUTZlOms1QCIjJDRzNjxQNk5iMDBB''@;'; put 'put ''cSRvY1tNJkNqSENfYjdzYWBbaEYvJHc1V3ZHM3RIKC5iKEtlSFJ3WHcvKnU+PV1yI3BMVzw3X2xRVG4oMT5ob0FlemJ5dT58ej92MkpyPUUlYyJmQDguXU0qWVUiT0d+MWNiMEA4MypbMDE5dyU7XW1vdGk+dURzP3A9RSZjSFF3TzI/eSZxWSNkI2N+cW5EUndPQGE7XnlTdUIvX2o1SUhaeGEk''@;'; put 'put ''aUVzKDBqbTxZc0VIbTBdaVd7YzJyQS4oeSlzQE5fYzpnTmpdSmszJlopI19bI05eRVpiTyMiYEJ8N3hLZj5eNlR4THc3RC9eeWpyWVU3YmlnMnNUQExAQVttYUVzO00sYj9tNnZVMVJ3eG96Llp8QWErYH5xVF1ALztuXnkqZDIjcENLOTFnWE5HUG0ibllBViFqe0p5NWF8fHB2b19EajdRcDQw''@;'; put 'put ''fCtOZlFWWjdEeH4/d2xRcCFDVU5rbHBFO2FaOm9jQE0hJDsvP2FTKGgyb25ARTRjSFFKRDhzUVErQ3E1LE44OklmcntPbj42XiVKbjtVMzwvLjxtNCZYT1c9N09TWyxKVTU3UigvJmIwN11bMkFGWnhhSHAzNWF4O0llc1RARjJzU2lbaEcmOn57SXBzTFlFLno2VHxFNXhhP0Z7T1dRKjheRCUl''@;'; put 'put ''MmRdaFhCNkUmbVU1fWlrTV8rdmZqei52MHdXN35gcFdfbSRJUyJ8PVQjPi9aVn5COEZMPDZATlB9LmdXMStMPDYqY1hnU2JzY0VKVjd4b2xTRTYkYyN4KHA/JEhMTilCfG42YWg5UF9qKyolKiRvXTNYIXZFTF1dJFhfdzZkNklsIWRAUzYzSCZ7L2RGMzNlPzkqZHhJVzdoZFVEOF5eel10JjNK''@;'; put 'put ''P2MwNiJiP21DKEMoNXNZVW4idn1ROjpufGEhdGxWPDNATlN7XSNCNHk+eTVeW34uXnlIajkqYHtDOEpMKyNybit2S30vZj9TPkAmPDRAMU9CV0hXbmcudH1PN3dwMFQ5TDU8UDE4d1sybTo9OF1fITsvK2wvdEVaaWg4IVZUMypAQzNIUFB+SGlaL3Fde3A0ZTtLbz9AdVo9M3kjZXpzPXBaTVND''@;'; put 'put ''NVtCfihgN14kakBuVGdlajM5M2g+Q3ljJVYvUXklbkRKUWFCM3spMHZDMzsjS2tpLkE2bjhHP1cjKGwkfCI8YX5YfkpYbU82OXlMO3RfWXQ/V3dZWnhhOT1Ldzg5ImA0eUF7Oz1jJmcubUBUZXNHU25tImdkOlk1eDl8QjVCTWFZWDU1TGBIQUQuZlMyYGtjdiVscyNfa110TVF7c3NZJSJ+d1M6''@;'; put 'put ''dHxbOFNOfkhOOFg1Nzl8cX44ZWxsIlY9V3s7K2gsRC40YlZnQHtpVXIuWDlDaDtJbns6eztJXi5hWkdMU1o5cFRnU3wqVVN+RUtROSlfX0xeeStbQS9oOlJVUTVOTEV5cV4xY21kUlM6fVYvQzhGajEhdD5WS3t5fF5OXl1fTkcpd0l2SUNPbzs7bDlYKVsmZH5ucERGZj1PeS5DZjliKSI9PGc7''@;'; put 'put ''bW45X2tDbk99WjlhWUlyNjl1aDR1X1NUOmg3ZDduPk5tNTZAZi5CZCE+WVo8fWtLQDE8X2E8NUg4Yms3ZCNvSjNicCo5TGUvU10jbiQoVm5nMyZMW01xY1hWVHM3RFFHcFNQOEkkJTJSTD1QU1pSJEh6ZSV3PyxgRXx7fGwjOk8lfXtDc016QXBfeiNuansqc2JrSE1kS35rbThBTDg3SzkjaE1e''@;'; put 'put ''cFoiK2B5VWFJezsvaEdFKFU7ZVt1YURWbjp+cXsrZDhFVyRlWFVRNW8yNVhwRyF8SDJQcDM4IyxMZC50anBYTTw6fGMpMCwvcEdfZDZNQ1M6fShLOHtkWWN7eyk5VEhUO2RWKzhfakw2fmFJRChkO1dlaHJkO1dlcSQqQV06JEgibzxibDtzfWpnSC9kOF1leGlTVWNkeiN7QFZlaV9iZG9EZj55''@;'; put 'put ''WmxaMWxjfjNWPjhhfmgpeyYmVmZRbl1bdilLR3w0SSRHKWB6d0EkSGchby9PI1ZLWDZyZnRMRTA4XUV3bVQ2VnJdMiM1dDtHWU09YVg9LyRIYDclMlIhczlZfmYyKU1WZ15fPyYlQ2cqPG5SWmVKMiEvXUhVWnZJW3lvblFyLlVDPnxMQENUVUB8YEwqN0BidT9eKmN+ZzNSVVdqVFFyV0Y3KDMl''@;'; put 'put ''c14+eCVjRmc+JkNnNzloNmVsJWNpVEJlYUZxKlswQn5WK0RbM3JoLF92eWU1fnw/blpbR194JD5NJW5HV1RCMHs4Qy8sOnNJUks2KVJZfCFJQV1URmc/L21aWDRJbVo6dVNWLm9XMzA8Rkw9JGRCTF9MZXBXbUI6OnhleDVUTmVGOTk2dUQjKzhVNDV8THdbSXJJWj5UeSVVO11gdSUoSitlPGRb''@;'; put 'put ''I2t5NWBEPlRIU3twdkxyeHJIcHxJVjc7VEFuW0xLZnJFYTleZXlQZF1NOT5qOnEzLEhsNG03MjlJcWFCMFcuZDhfbXohW0sxPmQhKD1zZXY6YCp2eUd9K203PXpsYTh4NyUwNVQ9a10mSks2MjMiSnMvUmcyL1t2d3FZbjJqZn4+eWVseUpmLylEOFszW2VdZWI+U20rRnFVSTxkImI7RzhEOHh+''@;'; put 'put ''WXdUdlFaRFlvNStJVnFLc1FWfkhSfTpqbFNoX0xbYkw2SE05d2x5TkYlUnMscyYsNCtGKEFGRyV0fWpaT3AjdlFaX1hrNmRQYiVybSJ6aDMzakF4I1lKfXAsbDgqS3lmcWtWPXI5OUxXNyEjYSV9UFA9JWNubTM3VFQvZH44bCl3bzJdZV1Se2w1X0ptPCpQPldtKWEqJjdUfVl3JWx+b25ReTtq''@;'; put 'put ''aF8yMkRPYj5HJTUiSTg1UzB5PWVrcFUvPTZXXSZGRnlpPjl4cip5NnYvU1tdTV1jcEt6X11ITHRZJmhmJCtHeClnfipnOSY0clNtdVpIUHw8NDVmd1FAcSl9YHVNOXFZZHxDPnhVeyJnMz1sMFtQI34yTUp1T2ZKdTJIKlRGZ3lyPl1LXyt2WnUwOitsQldLNXVYYlgzU3xhfXtsXUNRJm8hTXd+''@;'; put 'put ''UjNaYToqWyp6Zl9hODVBOVpzIUNVQDJOfnh5LjVgZHppN1VbOk89aTtDcHJGU1pEQlJ6I104NixGTF0kRStEVzErPnR6O0ZZNzkubCRFcGQrNSU8KHBrRE1kTHNEUWQkUmZuX11tVH55Jkpvd3pSZnBUMldLMS8jLH0oblNqPlgkMlVEfU5QMTZWYCk0K2c2JTx5LjR1c2Q3b1chYSklSjglOFJO''@;'; put 'put ''WSVeNGpNS2BiZEBAL1FvSF1RREtxIWFAdEhaPFprXVl2YzRzNnFpXT86YyU6bXh8Q3twKUpkRlc9VUtJb3w8ck9pYXR9P2JKJDpjU2JmN1hLc2c3eyh+cz9KRHNjZjA7O0BxbHIlcy5afSQvKGhXQ0AuVFpZaWs7VX4oKyo4c0RRXWx5emw3JihKW1NlbShndG9eMStEMXd0cUZ4bEQ4cyh7OFZh''@;'; put 'put ''eHI1T2I3eGpSY2FsQUs7e3dvSFBofS4jSzh0S205Zjl0Mz9ZUCpVVHBnXVt6fkkmYSllKHRLR15GX2AqajcyPj9PXTYqXi95Z1tlPFEhfHBXaiF4RiVWdXAlMXMjLD81bTdlK3lxe2lgU0Q5dXxgZj4zW1BVOkt+TWpEdFJfb3kzb1Z2QHB9UHY1VlhFPjF9YGsoS3sqVz15ckJ9XllCZDY1Tmxs''@;'; put 'put ''fWBrLmZNPUt4WVpKeXl3VyRybVFkJTosUDQ5WCU8KT9HS3tNIygidj1QWCYrYX59JF55JiZ5M0Eley4kSmdgR0pjMkVxZHJgK0lKYlo4MntaW1RBPjlfWitiOiouQzI8dn1aPF0md1orImEyfkUrX15adlJaak0xU3JCKDU3VFNfLmR+IUMxN14+NnBEM307Qn14RixEP2t4TWppY1pOZmQobnB1''@;'; put 'put ''UUdjfWdfdm0/VHB6PT1zY3FvSioybWtYazFUMUwqPmxaaH1pIzpDeHkmM29INHZ4fDxKZSliL2QhOm1WM11yQH1OXjdCeChiRm84Vm08Z09LUTQ5eDNdM2opU345T0d0JntJSmMmPypWPWc+KWBjWC9BOSNROSVaUzkxfTElZWpDZV9iaFZmW25vdGlONUI6OWVbUFNaT2RuLj1qTGsiP1ZMNWNE''@;'; put 'put ''XzZWOU9rMGBOZixJRlphZkckcDxjQThQRTIlX1tRRHpWWF06PX1OWDdwNGBQamBYeXRZMD53bHk9Iz5VZj9TNk0+P1BnKk4xPilOcGFYWTokKFZGV0xkb1s1LF1oUi5jSCIlMEJSRTRMPG8maT0mNEw3cnNWfltyLmx9RGJVLDg9dGU2UWhpWmsqdCtZPUB5ODdiNHoqL3ZhZ11rVCRZZCQsXjoi''@;'; put 'put ''KDAsL0VGSyNtIiYsNikpLEZnUHZ+d3cmOSs4bjB5Znc+YXVZSmNfW1J3KmxdXjpjSCRmNzQ9NElJM2soc1YycVY9NlIveEFPZyxpVy4yVmtKaj1tTV5LfCVGJWhiQGtnSnF9bFpvQzZyRjltI3s0PTAwVDFWd1QuZDhFfW5KNTVEJDYvSGRUMD0jbi5He1s4XX5tJC86MkBoMkdMKCZ+JGZlQiY7''@;'; put 'put ''VF1PcDJtP2YxfXspS0MobWlAZmdzYWY5Olo6SH4sR104JlZzaURJLDYheVQ5ckYjUyE6L21aeCYuaUBuZVYuYX4oS30+P2QxcjdsPF50JixuTUp5NWw3aF0hPSE+TyNoPChwPUUjY2pPLl5qWztUVF1ufnAsM2ViWjxUSFExLmI3eCUmeDplSnFbNVhwbi5MI203STVVPHVfP0dMKm1MWDkwSnBS''@;'; put 'put ''bVNXZS5oIkFESTY2dTJbUWQiW3dqZSJoQkI/RWI/e2U5KEZCaklxcXM4MihLQ31LRkJdUXl0aXhdUE9HfGVTdElEJC5Mdnw5MXRjRDo6Z1kvaH1BV0hpQ0JQMCkmd2FxIkF7SHVtcElZdEpFaSYiXTYoS0NXaWV1XTkydHdEZjdWeDcob0M7Ukd1IjtEaUVEOjpdNmBRNCJDRi9IM1A7I3ExY3Rb''@;'; put 'put ''RXojVmxWRTkodUMwb3UyXzkhIm1GK3A1N2M8KXkqd2llPmkzISsrRk4iRDgmYzx6K0d1aFJwTlNqeXpYQz1ra0VhanQpakYmQGJmMStXdXdVJSpveCJRIihyQiJXaE5UamJNY0ZpS3xlLihXQyZNaWFdUW4ia0QlMX5sTnQjdCRQczxZOzp5I0MuKDtIN1IyTDBGMCJdYWJqZk08RnRmSVRUalhY''@;'; put 'put ''U01+UjQhNkxeSUIuVkIzUl4oO0M0enFDVGo7dDhGbDNyQ1RqZVh3U11nJipUamdYLE5WZGY8PXl3RHc7cE5Val90c0w/ai9JP3kreENlfGpVanFYeFBuLDNSKUxESWBuY2ZbeU5FYDwye1VqMFhiUnNvZjxdeWxFPyFicmVmXnl0RUU/VHZWajhYYFQ1N2Q8X3kqRXBAZjtWaiVYMVRLdTUhP0xG''@;'; put 'put ''S2EuUG1FIXN1WnBJJD4xfHlXRjlfN1BRdHZYdlZJb2Q8ZyJ2WC8zOHA6YzpWIig0ZERQO1YkP09Qb2k6VmJgfURHbzpWRCk5ZWhCNnJIQihKeXxeMzh8U0NILl1LRj91UEIsX0tHPz5QKjc6VnYpdXgwJXRbWnxxQ3ZAXUtJP2xLQClzRjxyNkB6UVt8X0tKPypLaEJfMmBUfF95RmNHezNjPyoq''@;'; put 'put ''YFdWWmJ8Yiw2WG9ZOHJ1dSN3cXkxX1hHKU8rSDVffkkyTF8zUD9FTilvP1ZeP1VOQTA/VmgpZ2x0ZDhyXXUmM3BGNF9NSGolckYzX21KOFpfM1U/L09AKT9WcilDZlMpSjdCPyFQNTU4ckJ2fiZwRjhfNUlZXTNSTXpDeGNVUzp2OGkhcHY6Uj1SdVBpaXhFai9MUEQhdHYjUyZpdVBqaS9FMz02''@;'; put 'put ''XUQhdCo/SmwqKjBHaUdGXm9HZUNmKmlTRmBeP0RGIThDQ3I7I0NmaSV7IkFKdGVGeHFnWm97Ql81MWxSUUM/VFF1OldRQ2lvZ1IpS1JpPFJkeW4sQy8hOjoqYUspRVEoeHdeN0Z7Zzxpan0zO0ghSVBMSX4kc3VXMX4kd3VoZXtnYylCTTtEVDlPaW9wfXF8YFk8SVd7ITM7Zi9TKW9KeGo9Wkc8''@;'; put 'put ''MTs/VCl6SyFdL1chQzxZIWojQiRJUUglQUlWdWBKPEUiKC5EfVBgZm0heVNwbigoXiIuQmlQfWdCZ05GRUcvLmB2SzJ1dVNQK2lMSTJnaSk/U1tuNDs2bmhFJmRPOHtxa3x2aS5GNipRUE86VDlTP2RIJHEzZTdubmEwSSJWJH1+NEl3Zk1AQyE/djtSWDQwP0xpR1ghXnZnTUpET1ppU0RnaUcl''@;'; put 'put ''emlxQ01Ld2VYWkosZXcyQVEjeH5OWFhXUmB2YGkjSkwldGNgdm5YeEpIZUFJYHV6UE1mNjp0P0xSR0ZJW3UrfVgrTDt4TlJCeDFYJUpBanY7Ulg8SX0hPiZDOWlCTz94MSgqSlJ0RS9IM1BoaGZEeTE0dTBiYzlOKX53e0hmSWZYJUdXPGN7KF47N1JkS3dRTUlhdkhuZTYhc2MwaSlGRHVOZypD''@;'; put 'put ''ZD4sam1nN1h9MCxUfGZsNk4/XUlDKWNQPSRBKyNTK2lrTmBuL0U0PTUqNTshbnMsX1Q3elU5dVImeF5vT2VuZzopdVM/PUpJJW5lRkZ7L2w0MTh1alBNaT1adGdoKSNTQlhLMTNuJEREODpdOiR7dUxnUDtsZ30/cUlUJUd4MTFRNkVaSnlRS2hVSy4rZX5YO0w2RXRsa2t+WFhHb3YzVDs3QXp9''@;'; put 'put ''diMpQEpab3sySDBwcU9CTUxiO3o6LkZZTlRGRHE6aTYqQUcidjxYK0sxO0AkUVY0Ij5CdWVWeD9oXXQpRC9IXk9YcltRWiI0RH5IWHJeOXEiOEQpOCJdNSh8QnFtIUdeUTR0X0RBU3pYXzkyIn5FKmwoSDxofiJMQyZpJmExKHxCbVFLXXw7UHQ3Q21IQ2UmcXNQW2gjQTtJcDlvb11ROCJPRlkk''@;'; put 'put ''KiVeUVEpdEgxVmc3fUBSaklYeko/P2U8LHkzQ0Y4XkQzUlJ6Mng0Y1R2PUldeXhFMCNoNTxWYWBKSSp1cUYwXy9JRFVeS2E/SVJNQHk4SilNS3ReSThMMWAkRXVjZGJwMCxyZ1MpOExOZFQ5fG5nLGZTalIzZTNuX0QjLkVFPiRYTklDbkBkeHM/dm5QQ21qeixedkFANkl9ITY6WSFFKnpMNENh''@;'; put 'put ''VnRCIjQvRihZeUc7MSpbfSkkTC9Ec2ZIXnQ/QEZNdmJxb2dyaSxXIkJsa2R4WiFsNHNZXmJ+SnIvaixCIWVDUlAuKzM7NG5NQmlFZWpFODNSd3R7QkouXnZpbE1vXVIkU3MpUiNLNV1gWXUkUUlpekFSOmthbF9uSz1OOiZTdShHIWFDZkt0QD10SmtuV0s/RmxoK2k4QmM1T3NUfENJTU5nSW07''@;'; put 'put ''LD5HZmAxJTlpITp0THN2bVR8e0V6WiU5bTxdKGZvOlM1cmZDVkMkUW0hZik7a0dlMTM2Tm1oSClSRGkjaj9OZ3NJe0VGQ3ckKClUKXYidkJZLF9PUSozNisueVV6MX0oQGJHe25ufmg3OVRkOm1FeVEzJWUiK2pLTTl9cEorfkt3fEM6fi5yVUEuOXc9ezxMYXUueUFlQjgiZz1jQW4hRXYyJGVB''@;'; put 'put ''bilGZThYL3pdKWVqSj5jQVB5Q044QSE9OnUkXmwzRDRpPWJxPyNBY1ImfGBJRTJMaVklbTdwNjNMQjxsbFpnKHFlUnROImEoN2VIOWk6VTxhYTFjSDF3Y0h+U0ImYmdmMncmJWsxYzRMIW1+YTtlSDdhX0VMflMuSGwlSXtzOiwzfGQmN2ZoMTYkO3dNMTZiOjJTfileYWpRKDtQXW5waywxajZO''@;'; put 'put ''OmhjNmdnOWk+OldsMWNtcUNWPTxSLlFoYzpjMiZJUGwuMiQ2ZCghO2dkdHtdYjE2NSNUJEFlPk4/MDlJZypLfHJkNGhoMm0+eXIsNDlOY1tJODVROFRiMjw6e0tpdXpfKSxKRkEyOm4lMnlGZn4pVVJ3QUQ7Knh3OUFOWHhyckByXy4lJXRNJS5jQTgpX2dnZWw5MDtBM1csY1E9JkVYfUVeJT0q''@;'; put 'put ''fHo4YF11JGh1Ny9gVUoxKF1Nd0lAdUBQalVjJD8kNUdHTi9KO183UCE/RU5VIzt0JDsuUXJKOElQY1tBPiZbTTh5aGM3YG1zYS47cGpXQkg4R2owcFtOMkQvLGlbKko6XURtNENTOjFhUTVNRSlCOG9zNEs7PU5LaWI+djA8bDN3fHBoS0Ffd1YxdGAodz17JUFbXVV8JGlKQyRyWSwmLl5RR0FH''@;'; put 'put ''eXs7JkYrOE5DVzVqRkIye3BeIixnRVZaNSs0Pkl8RCV5fExTS3wwNC5CRSUiKHVfJlY9YlB8aT5MQDY5eiYoeWw8MSVrPEJCRzg9QHdtV15neCRpM0haPG9EWHV8Ll92RGckOWhsYyRobHV9JSVSS1FdMSlRaTY2Pjt5bm4+Qm1zW2poIiMsPnhGNkEkdyklPVdJUCNVXSMrTzZ5WnU6eXxXMHMy''@;'; put 'put ''LjNte2p5fFVYV09TLndncFlFP0pFK3dkRXpXM0NYKXFBT3VOQWJyW0t+JSpTRjRebVgkQ2UmKDI2Yj1JeU5FMjtYaTVtKmkoJVlKYEBXLy5MaURHQHkoYztNbSU1flhVcVh2QktsX0gsJkBpT1leR2AqP2VZZDhkRUtWRUo3NXkmS3xLR19mNiFfO0czaHNaWno+VlN6M1RAIlEhQE5mREZ6UmVQ''@;'; put 'put ''e145bytLcV1GIzZ1dj1USE1BJjpwdWVhTUgqQixiVTBDXjNgWEVwS1NPQGk8RGFvUkhZLDJbPGEubzBSbkckOWtuW25TaClNTVUrXnpNekx4e1hreHheIVtufC5ye3lyQnRoe3xma0tsRi96aypRfGVfJWo9ZzBsMHBOcG5vZzl6dWhzSzNIRWQqO15ERjo0PTpzUy8vNVBaPjM0fmRfdFoqKmhE''@;'; put 'put ''WFZ+NGFsYEYxJD16fUV8Kyx9LiZWa3AqbC50IU9CQEk5VSFCblIiXk08fXwobHouQ3FVcSxVeUAqaSp0OXh8KXxGd0ZBUzNae0QlJm9UXyM2UksrO0tgTnJ5LCM5bnAxKUgxViN2UnN7IUNYfDQ3LEcidiJRdyZJUy9wXjt6TDVqXiRHNCEod1hge1Izcm9oK11FdTUxTH09I1V6Qz9SMFIuViV5''@;'; put 'put ''O29ZJnsjLmdsdzpIWStZQkdgSnJZVn04Z0JfS0YlZT1LfGUkLHA9Q0crYURndFAod3lnMUdAbnluYCwxIT00NW5eKG9uTGlWb1ReUzEhbHlfenpIaXVuXS9jIUt1R3pSSDQuJTVLU19hMXhxW3Q6amlxU0xTP19OM14vM2g9WHwhbClhdkczRFR0JEJHfCVZJU5wd2o9KSQ6d2g9V3Fsdmg9KFRC''@;'; put 'put ''dWg9c0l1WGZHbUQ2a1RzeUtmVCReM0NmYkNxNnRPdCRCPzx7KD50UWomQm1EZWdPdCRCJW1+PmAoWCE8WzA3V0toMENdOjZHcWxAe01MT3FsSjs7OlE4VktoMDI0YDd6LzRiMUNjcVRvPyJOdkRkYCs7Qk1iJE96YXxXOUVSY3MyWnBedDMlYGNMdklPZzNVYU1iXSJ3RzNuIzh7b1kyI0I6JE9D''@;'; put 'put ''R1pDZiVXTHlRYWgyWyVMYU41VFFEYUtOVTxvVU5kdFUiWy9CZkgvQiFONUcmV0RdXVpkRVI4Sk9rXjJOayleVzddXVNad3k1RWQ2OTxIaTR2RFBmSzVhOzRiX1pUJighLC8sK2x3PiRXS11be1N6XWRwZmJYPUVnTXlWN3NPemF7ZCghLm5MNlFiLDl5Rzt6ZHcyP2k8VWEhTjVHKjJOKnAwU289''@;'; put 'put ''QWo2enRCJipGeEIzaXU/ZERFdl9uZW4sXjQqNkZ5Z35xL3QuVSV+cV4yTG0qVnQ5YnRndWhlSm41UjZ3OT5TJi8+M2ZQLngmL3NxRCF6NkxUNnFvIyR9KE1BNkNMQjB0Xil4dDt4JT9deWooL1pUPDo5JG9MK0ZZRnl8NXx1X3lycztjXzxqb3dXcHtMc0wpYnE7aDF8TCQ1PF01WFtqdmBMY1U9''@;'; put 'put ''JTpWK3cxRkQ7JUswcyRGJllgfigoSC8mVixLUi5TZjdofG1nLHFRODN3Yjl5ak1yfWgzPzUjdWIody5SZUwmMD15aF06OComeVlgPDtUfjBJUGwyPk8odXFLVGx8VmdASWx7PFN0PHJfSldZIjcrI1JRMX5SUldNKFdBMispMztqUExyNElVP0lvdV5TVyVeMEtYLC4wQ0ZQWWBpOm9rI0JQVHYx''@;'; put 'put ''QDQ0bFpGaVY3RElbPk5mPjg+WnUsMVJWUl1tYiJ7dzFRUlozdXY+KFRrYjF1NTZ2X0tAWnhkSFRpWVhdVWluIlZBVnBFRDx4dSpGL1hXZDEjUmB7XlpmKnRJRVc9XXdnNFZaPGEwNyU6L1JseTpSbWZVXl9IWE4iYVIxRHZLQm5NdXwsVzxBZ0BQfUp8Q3hKX1NSbW5KXWNEQjZ7Pk8oYkxYQ1FT''@;'; put 'put ''NEM6UmxFL2F9WE5yIVNPNWlPTkgxd3xXTkgxJGhKfUske1E3JHFCK2ZTUiZYKXYuN0lCTElSSklOZVp2NT13KW1jaVZNRWA/ckAxKzciIWRLOjQ1Ii9nPlohfVZ5fTtmPDg6Ly9HNnlfbikrYF5ZQ3V5PFdNWW8yRUE9ZiJEUndoe0t8TmJ5dCF4fC43PUNTJGZHM0J0MlNJOTZsVm9FIlgkTCVq''@;'; put 'put ''QltyNyImI3BqO1dXNzZOeENCWEkzIzM2NHMyZUtRRSw6cT4jVGIzS1U8aFFwfCk2QmthWiJUe3B3P00mTjQ7eVI+bkBHOGV2Wj13SiNVT0pETVVKWGhQR2J5VmU1ek1scFFkOGxfYnlfe1tafFRwVDkmcE9vRWpUQEY5TW1nQEw5R3NZWkBMRnN3aHBMMDN0RyFORDQ0Si8lbS5KbyM4Lm4zUzkw''@;'; put 'put ''XzFQPXVhR3NvbGgoSXJHYjk+IV0lZXlvaH0zTkd+SnNFSGcsZ3ZWdT0uX3Y3JHFMJT40XVteTXRJJD8vZngoe3QmTmpjUS91K209IzN1WDlGWX52JTt6V3k1cWorbEpvb3cxcUBHW3hUREhoW3RbKFhxVDZTYzhNIy41JW5pVjdvTFVdM05TWihKVD1OXmxKT3BuKDxFYU5BalNTMnV3YEVVUS5U''@;'; put 'put ''MVA9JEQ5bU81Y1ZMeU1LRmY2XiIyckRrMlBjVHtxN2RVPjxJSjVxNTd3QzVkXS5ZekE+X3soTVB9aHxyRStec0tzYmprZUtjeGw2dnw3OU9pMDdrPzA3cHlOa2MpS2QsKUxkRF9faUUyMXc3ciNTYDJUe0NobF06enFUXXo7aDg5MFVFISk0OklXOCF8Nn1qaDp2c1pePG5eNE5bNDw8O1U5cVRY''@;'; put 'put ''OiUjKzl0ZGMxeXxJcEw2U289ODF8L2hEO2UrKTQpO1RqUipfYGsjdW48QGVWd306NHZ1YV96Knt2TjVkUl12RSZGMFU7MnZdanMuXTxWVERKfS89UC5BM2plUDwwLkQ3UCk6VmMrcVRZJVd+az1na29iLChQUUl7bndhWSpjPz1mOVp3KyZjW3Y7fUJUaWckcCUkKlYvPypea1g+QmV7dHQ0WnU0''@;'; put 'put ''Lm5wRjg4c3NZdnpDOG0+JT55cnEjd0dMRjtWdFssMVNALkdGKj5qNXR8LDBJTD0lOlc0Y1lJRDF2ZllPNVA5YU89LGFPKTJPSzlJKU56L3R8K3hIU35bKWxIeXNXelZfcGNbTCg5Lm0lS3w/M0N6TFs0cz8jOk5wOytRQDZnO2tmP00iOEE0byl+UUdfZD9ONStQRHQlWWVaIUwqS24uaGp9MkJi''@;'; put 'put ''SFo8Wl9TMWlWZShiPGJzNkFFKXVxbFNwS1AqYHYwdzc4YllYVTAwXWxNZDRUZEsrVzAwXVZicWQxKD9EWUA5OyFiMDJgUUk2VDVZYHlvOzVXRVtJaFQ7a3RuTW86U2AiY0ZoN3xCeE5uQiJCXihYXWA4Ik0+SzA3az9GRit7KnQzL0pvOztjNGdrTzcsbnEjcWVuP2FGVzdra1VwS1B1ZHB9VWVU''@;'; put 'put ''I3w5L3gxTF03N3Y6bnFlYDBYflh0azNjNlU4fS5YWWVCVjhPKyE6bGY/STBWODAoVnBlMXNjWmsqejYsTyxCVmY5Mzw0TWIhYi9IRiEjU2QjMUM2K1JmX1tnRFMwaSFASmJLaXUpNC5IU0pbZUs7ekwmdmlRZXBOJTNRdWlseyRIfG1NWFJyeDVSaj93SytdVng9NT5dJGVyIjJMdj8sT2c/TVU7''@;'; put 'put ''QWUsZlMrV0BCbnIrRVhsclFmNTJDc3wpQjgjOUIlKXloPilRPz9EcyFaZT0mZ1kqaCtzVTdDKTp+cSFScHI2L19Ua0JdOEV2Zkd9OjN5NiR0SC5tNTIrU2x+KCF5NGsrdTt2VlozbzZYV2x4UG1OZ0AjIkgyRi97Qn5qdmBkTjhnQ2habVdXK0g7OVo+PXo7LkcsKmR9MVJuUn1OWEB5OGFzWntr''@;'; put 'put ''Z0kxNHdUaTlSfk0mTX1GPG1ZaE9fbnZKayVTVWxRb3JMIUxmR2ZQNjlhJTxMUjQqWjA+MEpLSn5ZO3FnQE96QTQ5QytwU0B5OFdzWmVgX2BOUmBLWCNqSThAaHgzITEvO2p0Nz0pYEp8IldWKjc+U199Nnh6N0hoSihJJWxlU2NYcWJBMntjRlc0bXUlLFZ5ZmduT29vbDM0VXpUPDR6eTZdNEFo''@;'; put 'put ''PC98JjxJUHBSU05LVndHSlVPfXt5PVsyaklGVVJFLCQxJShVI194JiwlKEwkQ0tkPWUwMFh+JnpscDlIMHYjTWllI00jRXhsc0hBeG91Q05SdlQoRndzTkRiciMxdlZ2NmUwRyg3Y316Tm0kKG5TalBreiZiflI7cTJISmxhQi80VWB0aDo8fkRWWzddU1BTdjEzN2h8RH4ofT5oKCkrejloI2Mz''@;'; put 'put ''VjJ3dDRoLiUxX086TXMheGI+PihvKHV6M2s1d28pIkMzdkddcCkiLEkwaT1HZFkmdXozdGJOaHlEVzA+cSV5LlsxXmMzcXM3VDw6X2JkWVgySCo5YkwwZUBXaHkoWF11eE5QM1RhK1VQM1RVblA5fVlWMEkldj51X1Q+MUArbV9LVjx1eSVuIXVKXmhjeXhBRFFzMDRreC9fWXVCbmQzZSFSKC99''@;'; put 'put ''fktsYVMrXXxJdy5vbGBlTms+cyh9PVhzMkRCPEtwIVlvX3wlTGpiREQlXm8qQnp9SEpCRzE1N3RSXk1qYkRAfSpVU08+eSNWKTc5NmA2KnJxXS53fFlPN200Qz5eIW01eno0PkcrQyxAS2djOS82cTM8aC5MX3tYXkdbYztKPm1oc29SOHVQWFRFT0Y0X2E1M0RrbkBwMTR7QT5FQSZxXUQsK31t''@;'; put 'put ''ViQ0biw3flRmU1E8NTd0QVd2UXFlN1RzYztXU2RxQWcoMGRtc2xxNERmeU4sKClnZHFBcGtGIWE0d3gmdXlLPGRaYjF6R3NtOHBUVVhiT31oMHBfL3MwfDIhV1I/cEJ3On1rL2pKX2Z6UWNWWU12LCp8eldwaGJkL0gsZmYjYEhRTFJbJGglbndrcVMwX2JnOTteZTk0XkBicngsMTB3SjJHYUE/''@;'; put 'put ''WX4oMmE5Zk90K1V8TzxNe2VhemplTXZqPU9FMC84azAoXkBidFlmVWEybCZaUzFAYCtnfUxrITEjP08+eWZwVDJXSTdBPEo6OmFEOVVJbGwxa2BKODBHPFpBPF17UTBYTHZ8LCtQT0ZwQ0skenVxVil3dEEsJDVWaHgsOD15OGR3SWRJPkY8T0pSb1pwWmQobVhxNEViQS98bjpMMWtaOmB7ZF9I''@;'; put 'put ''ZVR0OHFFeCh5I2k8K0c5NmsyJV0sO3UvdDdmK25pWyUlXT8ob0N4KHlmXyJKP0Zpaj9VJHlwMkVnKy9xMWgsXkNlP2pbcSlxMyxKeH1yYURTamVoWENZRFozdVVbL3NpQGZhc0VsZ19dXko9TVVaUTFvRFU+akAyJS86d0U5KmZqUW83TTpRUHImUTw/QS5eO0o8JHEmbHZTP0h6KzF9OEVrdjhA''@;'; put 'put ''VGp8SWlAM0FROyJhXXA2akNuZFB2PCR5V1BwWiEkYF11az4uKEo9QEVvJkxBMVIzQ0t+PGl6LmwrQyQ7UG5jMCVGSXpXJDhiUmBoXUtLIVo8Rk4kcVJWbzkvQVlBd29PcDtHeyVGIkZuL3BaIjJDS3A7MllMbW1zUWo8TDVwZC8lanxDZUw6OUFZPj84TTNZQXd2Ly57ayl7ZEAsO1Q/eyQkd0gx''@;'; put 'put ''fDpUZEJbJl84VXopTDJ0fUQkO3Rse1syWlRmbntHJC5nTDlve0ckOXhZNVZyWmV8cHp1ODl0IXtALHI3IlVwIV4sSkFCPCVZJXwqaDdnJWZvJCNlPzM3YylDVy5MITokYCJHSzdIen4rOipiVTNYPHM3InIwallTN19sdWdfMzBvdXlhOG1NSj1xUU0pM1ViPUYuKVQyWUdsQHtfRnp5WXM5UnZG''@;'; put 'put ''aXp1VjtoaCE/Kn5sVz16c3dSX3l7byYlWGcjeHE5ZXxtUFZneHk1KytwPyF+X3o3N0I9RX0pI25ZSGNwT2c8Kl45Y00zO1N0MUgvcmdlLF48UnIlU2kxSDc2TEI1V256ZHhbbXp8SnNBVk9EI0paLD17c0lxTEgiPzNtRWo3O3leQSxeU1t7SF17aFVORV1WKEY/S0BsKF4uXzhoW0xlQVcmM1cr''@;'; put 'put ''eVpkXWEhcld8VWNXcDokP1tjRWx8bUZ6RGwyQG13eT98KDV9O0haaj5GJVNBc11jRWcycyszbjQhSVYzMS8vVD9UajtjRmFuQCs4filbVlV3dGE+cX4wS0tyPWM8aFZ0fW1UOVJkN3BKNFUuUV9IfGk0YylKNUNWYF9rQFQ5OjN5fXdbN3ZVM3FrXUYoOnk5fj4vanxXZk83MT55Mz0pRUlUdmZq''@;'; put 'put ''fUZ5KDJYJik8NlUoW0MyTGl1bHFgdjliOi89SDp9PWUuU1B7NFRRP35aQV5SZH1YKCVofE9JOUBVQGdIKVRSa31IeSUkaFhiTUZTYn4xUDNmOEw/Yyp2aT5hRUZQfkN5d2pqKyw9VW1EKEpvWWQmWkFLIURrNTNoXzkxZ0VTZEMmZGpMOT5LaX1GPWlAXVZ8LmQrIyNWRGp6Knd3Wm0qPDttQVp7''@;'; put 'put ''KSElaSRHd0t5JD55OzxQYmRAU0Y3YjpIfExSPF5GdiNoaDhNVWNbeEZ8eC4yRCtsLjNXN0p6fFZYbls/M3dwQi8zNVlaPEdDcEp5emhiKnlub2dUb18ze3k8TkJ+MlRRbyJ2e3s/Omt+fFU5e3BXeHJLI2Zob152JFpVbXNeMiM5fW5eRU9AN3BoUVhmYFtEVilgZ0RfYUc9ImNrJGdhZ3BhNjNg''@;'; put 'put ''PUZMVUpvMXkxUGVzcHVTR0lFLGYucGJHNkEuQzJfMkNIaWVeYzxbZypGRiU7ITwmTnYuYXZAe3RPL3k5aHdiOX4zOVc0VToycUR7JXNWd1dqVFtPZ2A/eWErO0l3ZX5bNT5Za0lsOThhWGFxXUNRKD5GPCZxLGQjbT5ReCEvfEJfRn4/MCs/XUQufDJydiFEQEJjfCNhaHhfSDF3U1k5d1tTN3Vu''@;'; put 'put ''I1RiNDZyLDJNYmY0RVBXcXk9Nkx8N34yNW9WaTs2eyxUMl5GPzt7djEoVltpcSRrPi8ybmxZe0I0byRSXVtXV3A2JHlVLFU4N1VAYllLNXcmS3woJShVNXtJTj1HXTgpTCRKUThhYkU/UjpKYnZZTzVHc0B1VTtCZVN2VGVZbkRlUzVaMD01TmIzNk5ITEdXTUlsazt4dWUwK1ZxKVZbcSlRXzhu''@;'; put 'put ''KylPRmxNQltCdFdpekhAQl98K0FRWU8keVdVMGNla34jaDJJbDJyczFZP3o6KiJRSjJjXmQsS1svTyh1ZH4pOldNYSgrLiJpMVU9V1dzWndXU1BVRyVMJVNlans7LD89cFpCdEE+fVQxbTUlJUEqZ0o7YDR+KUooS2pEITM6djZYfH06USVTWWtIa14zdkltR3JdQSU2aF5MJEUrcVQxJkI9bVQi''@;'; put 'put ''Zm9aa1c+KUQmYihHSnkxKDE2TDRWbWgme3xnOSZZKElTRGJwNSQ6Zzo6KmxKaWFtPUg7LF9Cdj1bPUJORTB1MiVWPUN6cHI1cE9kPjk/ejg9QmsuMD1sRnFEfkUzRU47XVFdNjZgYywuP21jZiE7YnA9Mk41KkhRWGRjMW07c3JsS1FRPn4kW29SU0gmMn5pOy5bKWw/MzRaWyl6by5mISllW0Ql''@;'; put 'put ''eiklOn1vQjZQazE8eTdsIXI9L0Q3aDksWGVZRmNaJSZOfDFtUl9uZVRfUXBGPj82Oy9MPVBSNTFVZV47IilQeT14ck1deylsSzdzdXlXPHJSWENvSktRRV1dME1zVStJe1srcVU7IjJxOnt5QExpR0NidFYwUTI0VmVPXnxGTmJRXX4xbmh2aWJFelolNmlGLDNsYEBiL0xzXlJAZHZ9fUd8TVhF''@;'; put 'put ''TU4yVTFfenVbQVBAMTlXO3NAVk9fYzAoUlBGTUtvP0B3RWI4KjF0KyIqIitXdkxsRTRyPUx1I0trZX5VTGNVQDg6Vll4b3h1MX4rcyk5VExpfnEwfC9ASXBFenR3JGowTlBFOk4vQXY6NXVYOClOa1psYEdaajlsUWxvYHNxT2IlQndST3YrJTp8clMrfmx4a0kkaXRKOFZpTnsxYGoySDRAKHp2''@;'; put 'put ''aXUrUkFnfms5PUtldUhhd1c6cFpHI01Za1c0bjUzXTh0KWReVX1xMFFvSDZpfmNeVWpGamR7SCtCIzNtRTtVW0NNcztXW1UyOnd2WkcjRCMlSUI5cmN+OC93Qjg/Kl5fKil2VSNfaj88P1JCK1g1Xj5oUUgyPjdWMUw0LnVxTmpNIiJHLnc6Sip+ZD0mKDNaZCkqWlArZ3F0fkByfWVSV2FnQ1FB''@;'; put 'put ''V215ZDBbIltNM3YyO19iTFAjRm5daEZlTCVMfDNXZTtYdm5GO2FLS0p0TVhdQGImNXdqITtTP1ltRzRuZSZ4fEArfUEjK15+IXZfaWk7JTcsV3laK2xGd3FkIlhjfm96dFRFJVUsVz5FTkgvZ2tPJU5ZSXR2W25zdUJOQzU4W3NqSXNPN0hIYFM3OWJ9eSZuTUAiRF8zP31bcHw4OGZ9YTxgbF0l''@;'; put 'put ''djw0IVIxKzJfS3p4V0UoX0RlUHleY1U/NzlALyorXWQ3Y2tKPVdpUGJyd3wrbWhLQE0kNzMsNipST1NAW0ohIVI8cSU/ejpJOWc+XiYyW2FQXkdMYi4zQi4zbjwkYn5VVV4mUHg9aEVIZ0tJP29pTnlDX144Uj1YVDlzaG5EO1h5NVs0czorMz9kLExVKE9KYF16VHQlLyk7bTJrM0w0a3B1JGM4''@;'; put 'put ''clp4VC4qZUtiZjgxRXRnOXdPOmZDdGI+Pno8MlgpOjEmXW9jPSxHRWpnVm8kOS9mOkxxbldWe3hnenJaWkZAMipVNSQlT304PW97YjJBXUlRX29SeyQ7W3c4Mi8/SXh4W1p1QHE4bk1VdTBzPUZGV2MpYjVla05aJVBSP0d8JWdPOVU0TCFkKmc5d3VLWDlQYC5TOS8xbGJKa0psWTFsXj9VQGk1''@;'; put 'put ''O3FfXiJWbzs+Z15ZT3JdSSZnT0wrSlU9X3J5Ll8jPV1gYjMlK1pKY1dsXkY2Z2RFUUBbVyNVcE82ISJnc0wyM1Q7cTh8cCRpUGgsTVg4a3khWiVga3cyb098TFBAMS5+NDxGczgvUl9pdU5eP1ROXioxMm99PEVXP20lVUFuLl19e1Izc1U8ZFJJYnowWzBzJTBhYjVfZjNUNzhka2UoUi9bVFp2''@;'; put 'put ''QDVVRlNUYz8lN2hBRnk2RElAMXJXV25DIzkzZFYsOHhUc2Jkcm4jcypUQyV5PXYkOFBxXU0rV3pqd1hRKmNbWTVdWjEvNz1CWVhLM3pndnlHaiRaTXw8b2FEZFspIU1ILml3P1ckfXNeSWBLRlteMT53L01LL1s0aHxSTCo1TSpDdjVgMkR1Tzo8VEN5aS5EcDdSJE1scC5WQTFCYnY/Oy9WRW5S''@;'; put 'put ''JEgsXllOKH4jcjFGRyV3Zmc3d0V8MnJ9YUtSLkpwXV55cl9jaF9LPDg9Mis0ek19InI4bjJjLlRUOjEjVyQiPjU1azFjPCZ4W0ZpQG5yWz9mdlFZOVRJJD1tVV5KVmI/NUBXOmh5Xnoqc3NqYm4obFlRbGxJYGZTZmYjKzBpeGY5RlsvS11FNUV6UXo3alosI2tUI1BoQ1MzNSkwWi9zXVVdWyp8''@;'; put 'put ''en05fGUhNDNCTjdYRT5IWUhIJWhZOio8Mj8rPnlUNERBcVtKSFlISCVSWWJDZXZbWyRXbl9eP3x5R0VWTE5JVE96VU9kb3AvRngmY2IrUms6THtqM1JTY302Vkl0VEcjWCttOzI5PDl4NFAoZkY5ZkFuTUMoPXskTzlbfDxgPVRRaEBNOmhHYVp+OEVyWkMmbHNsZlFUdFQxUSJGLlIvNCtafGBw''@;'; put 'put ''Vi9ZQzwyeXJFSy5MfjhQQTpZU3BWWixUTz9KfCNhMWFPaSZNO0QhVG57P3pbcEJMZU5+WUA3QXFobGsyVW4sVil5JEJebWNMWUY5NTIlVmdnbEBMZnAmLiE5MTZ0MlQuU2syTTBoQ0g1YSRZIypXTXFoV01TUFAlTUtqeSxkSFI+OVQub0NLb01eU1hYNWpKQ2VsOWg7KyMqcU41e3Q1RFRnSSVR''@;'; put 'put ''U207RFtbPGlWNGdqZCokXlV5VFZvVD4mdj8/enxRNk84XjQzOjdxKTBybHx2R3ZkPWo4K04rbXRRKWcwciJEKFhSazA8Ri5VbTFVWVc6V21NWEJhS1s5ITR3bmNdVWU8Qz1FNSEuZ1tTTEZSb1JmdmcwSkRMWjw3WCJMNWNXRDkuakN0RllLejBNYlgqUXRhfio3YWlmPigzaSFwKix2YyRzKW1h''@;'; put 'put ''cXtKRFJ0XXhHQmB9XmlOUjptL008Q0hXOSxyQ0BdOk93SHZxOj18b0pAd1BVVyVaYDold313e2dWcE5tSTwyYS4pYi87cilvTVhQPE4qeHxOYmVeWWRvZWwwJjQxfHcvQW1ZYW5kMCx2SHg3I1pMNkxeT35LTGAweXg5aTtVMzwheExeMig7L1tHd2ZXZykkNFl1P2B4cWFxeHBgMlVuUkdTcFd2''@;'; put 'put ''PFAySFdiPXRwMDV7b0cheH1Dc0tzRChXa1ZLPSFfMighMnR0Ln1LP25MbHIudUkrRkBMUFpXNjxUfiRFYGh8QSEzblReWThNOTxNOW9nQ1A7RHp4ZV03NyRwWi9PVmd6Z2JZdHF0UDlpJltlYSFTMGYzTDdUW0h5Ln1lU1JWYyk1UzguXiF4aHgjQj1ZWnZsPSNNW2R5XS9baWtgW1g5dyRpTX42''@;'; put 'put ''ZD99d35udSpMOjc9Ni9mW2hpOjUsSkVzZ3BpO01QbXN3cCpeSE1tcFhrV3BKXVZ3Nz8uN0FVbzI+WFVILyQlUzsvSEpwI197ZzJ1RSMrJjpvY35dVC45QD5uWlVAeyhLVjcuIX1FbDJdeEghLFo3NywzM1hONXRLT3NAKXJgQC9XRjcoVDlZOzw8VDU3KitNZzdhbVZSaWVKelpJbG5gTzNuWF01''@;'; put 'put ''QCQvN04rXXw/fXxJM0QhLFFibTgmM0kxMnZxSWBbK1N6UTw0VH14bXxtZWc3PHZfQW1WJStnVjAyWURDVV95KSVsVl9PUzNqTSFXOXtXbXdDMEU0LkdIY2pyMHwkNDx8NHhYdWJPYHE5PCp5JjFwMTQvUk1vKjVCaGIvUHNlP3N3RExIcSxmJmx7Lk11U0NWMDQpX2o+U2R1eSYxWmkrfFJzazNe''@;'; put 'put ''Qi82UlR2T1JYa3NZKSFEMDglO3JsemZiV3A2LFhjc1tUaTUvdWNBVkV4ZDdwekNQQlo9bHcrQCx0XTE3NTphWmhSWDVMbVBpc1k6W25Ob2hzWS9bRlRNVkxHKj1zaz9mfnclVlJgTnw7Wy4yWDZVdV1TMSkyN0dKQUZyRmxdSHNORWl3S1lWS01OYlE5W1dSbkZgcXV7RH5IJks6NzNmPD0vaDE5''@;'; put 'put ''diYzPDQ8YjVaTFJwMD9xJUIvUGFTMGc5OU55W2RCSUk7OjdvcH15Z1kxZFYyUGNgT115fkxRbGtTK1EvNGRwU3kzWSMzeUw3MFJ1cUFpJG1UQnY6QCtoInp+ZUM0L2xsWlYlLmdRd3B5bVQwfUxXN3JoaUIyOD1xV2hdZCQ4Zy8pL3pWOS9bKWRuOnNJdTR9JVprZFVIUUBNdlMrZGclfkZIYDVj''@;'; put 'put ''Lk40W3c7QT4zbHtvcSRfMFZ+RFdqeUM2SFpZOGMqbkpwZWRYY1c5LDQ7RnpXJHU2U3RjZ0VWXmF2b1JzJTpjJXokZzIsblZZQjZYcH1oQDxLRyZhMWBnUk4uOEBxdSFeJXlsRjY3LnBAb3FNa3BVPVlwW249U1JTMyM8PWUwOmUkaFA/OVh2LlVsOThmc0skIjo2YHYjYC9XJWQkZzJrP19da3ks''@;'; put 'put ''ZDRYKnZ9YCZhIShZRU9EWmVoclpgMSpZY05Fd0g4cTtxdHhpSUBuI1Mid3k3dCZrUyRNa218ZiM6VGxeW1pWP3xtIytHRW1TWWMsUWZ+SXFYJUVOSGxEKmksPDZ+eX55fnl+eX55fnl+Yj5EYiV3NjVeTU9JQEIrNkldfD84cl9zIzdAVi4xJXFbYUNVXWFnIjxARmBQK1JSNEZjVnE/JD85WW5x''@;'; put 'put ''UlJ3RmNWLjRkb05WKDcuT0hvRCVaJlI3NkN3SC9lbDB4fCx9PW8ien5LUjtwNm15eTEwaj44Sn0hIzdmUXAoX0V0O15IVmRdc1ZiXi85ZkBTVWUlZDh9MGo/I05SakNEQG19MmJqbT4qdDlGV0xAcH5YMHJKS3ZFJVVBJnU6U09DNztASVNCL0JfOXY1WGI3Q0Q9USlbLDQ5YG9pPm8xVV5LbjEr''@;'; put 'put ''dkt2TXtHfH5JJlkodSx9XntnKCgzLGAxUnt8MFVZTCYsUkAsNEo2ZFBNMUI6VlBMST5FSl4wdzFVa0MwS0Y5dVY8VWh8b0lwVGFSN2IlcitDaGtgc2ZeOHY0cV8pZnViOUV9ZWBoKEJkIz5lI2Qsc31OW3AlX2d9W2VyfjJdPmApVj1AejRycF0pOHlZLkVBK2htO1A8O1BzaG03UGVWQGltTDVf''@;'; put 'put ''SGpCS1t2bEZyL094cH0sMX1Mb2AieUhgeHxDci5dUFtaSS4xPE5sS0glKFJhXkZgMUoveFRsd0NrXUdkdmdtNywpPDshYDlqLnhbOHZ7TkZ6ITk8JlNMb2BpYEVhZlY/LnBySHt1Q3YpM3w+ZiUsbnMoYSkkUHg9TDs5VF0wNThvSFIzVzlxX0FVekY6OFc5cEhFeCR4cWVeOGclbCZZVSZ7PVtD''@;'; put 'put ''OGF9OD1CO2dsNXJ0Xjh9VXphcE5bYF4wLmI3aX0wPSkhZmJIKzxQTlRJbHFiUT51WCZgOXZsN1opWkZAT0ZgNC5keXUpa10yPCZDcDA0PVFWInd5N2Zrckk5M2svRV1pZHFGeHlaKyEjfUlyIW9OekV8JX1Bc1ZneSZDQ3V1blJRd1lkT1khd14ud2w8TUg7MzJVQFBGSEVMeHZSYF9ASG8mbiwx''@;'; put 'put ''IkxlQmkobFZGTEdYMnFLQEhveHFDUylNLFkoUnd+UEp4cj9IezVAekh7LjEiMU4zdTZ+S29hcD9qNV5AXWpdVlEybz9zZixKQ1lZa3Y6bndwKWh6MCw0a2R0K25geF95fEhXNX4pZEpiVj44em1BUTxMSShTIWc5RTQsRn5dTl4zd1F7XmtbJF50R3g9cTxRM31dOHh6TlRhaDE8ZjNhMlV1dzJT''@;'; put 'put ''cDYkRChMVCVQLjo+PVZmVWlBeDJBXTdPM011fW1yLkxoLzUkPD96KUgxMl0weEVDPjJTJCNwWUZyLkVZNikmVU56SyUiTEFeOjNDajVPeUspaWNIUUh4MkFrbD5pUnpDcUgpaTdESStWaFJ7TEpzeCwkdWhvTUxrRmZlc1pzMmtlQyRHdE1eTzgpTDJeaDc5Ymg3fDJTaC5dPFcua303U3JSeCxO''@;'; put 'put ''OV14UiZgaChDOnsrRFBsM2Vwd3FpVk1TQEc5fXZiNF9iWS94RiUxRy9uSjVmXSldail9dEY2RyN4PFdmRTNQS34hKX1bX085KDtoS3VpIUlaVUh7c2p2W3UwbkVfJUN5ZHBkPzlUInxhIWojK0c6cDA7Z2xpOSQlKXVaVyZXU1dNOzlGOHxwWTttYG98On4mTlR5KWd4NUJePDpIY2ZrRWN0dFkr''@;'; put 'put ''O3QkaSlSakB3QFdebzt5aispRVFpJlJvWTt5ezlNR3FZbkVhOUohKCMsVlNadV9LNV1dUjsoTSojZV5veSVKQCpsMj9rVzhzJSRFJnlRRHA7R3NNMFpkeSR3XSY/NTUkOT8xczJgZlRZejxyN3tQJileJUQlQktCIyZZJXFBa3F4OEdBLy84YkhsU040ZGUmaVtYUWUyUnZEO2Qufi8vJHpOR0M4''@;'; put 'put ''TWVDZVYpfFdIcjUxSTMlZDNzcWVKbHdILl43Li95R3d7NnRZOTZwezZhMjEvOntdRmUxRCxSSCpNaEkrZTY/ZHZoKVElcT04Uno2SWorK2Z1XXIoVmA0Z3Z9Ojpyamk+c2AoUlJuckVxSF01MzF4SUAxJUsqcUAxZzloa0BxS0QpOkwpd3NORGp6KFpJQVo/OFsvN2NMc1N9SGRZUDR+RiZOazQ9''@;'; put 'put ''RSxYLExvN0VaOD82W2l6U2JUOV1zK20kM2NxeVB9dUV+RkF3Z0ZbVl5zREI+Nk89aHZnOyxfO1olOS5AdmJRa2luRlNROmE2NklUR2QvRUssJmlBT0VdVVlTZ2RhOX1YRWt1NjBESk5UeSFob1QqKmssR0ZgfUA5PCUpVENkemBfP3JEJjxUbCZwL29EMCg0WDkqNExGdjRjKSRNRXxpQHpuR0s5''@;'; put 'put ''UjZlc1l2IihvZT5QeDtxNTBLL3pmVU9DTmslTSpaN1VmdHwvc3YxZDRJZ0csdDhLUiNtM1VTPzs2fVlMUSsyWDdWYTw8YGVGM3tpeSptZUk0bTlRL0ZZZWJPQWUpRFcpdEhxdVRfVHtxSCVLbCtwMnZnZFZlKFldRElYK0BYdStvZENXY3p3e25XPiEyYkBYbClQZHx3VjByMDBEbDZDUzYkVC9o''@;'; put 'put ''XUVKfUd3fjNGRmo8M0grTypEKz9ONyghYUsva2xAMEkscklsI1RkJlc4W1R7QC48aE1GNHl7OEtVcl0rSyVJREpARzxzK3hZcm1fNmRmWTZqU2wsJV9bbHd3eUpTJUIlLk45ZmlSa0cyVThTYUlEWnchM3F4NEltT2BPaE1GTnghelE2TDBXQnlaPGJ1N3k4cC5ubldgR1BpX0NRZEorPWNrSzF7''@;'; put 'put ''SCNZe0t9czFsI0JUWTMocnt5aDMocmU2dkY5fGIxO0taeTNtV1ZnS0plez97JXsmPypNMU9mez9yeVZyQmRldWV5WmlBZTQ8UWwudUkoSWRSK0xfbSU6bCEoPm07RFdudTF4Yj5JbTt+QH0zOVRUYUAxZ1YiXkR4VnhgYXd5WzN9b0ArbS48TSk9K3VdPEIrfCpwYFdfcWh1PkZQdUw4QTs2Wigz''@;'; put 'put ''dilhVHtVYyg3M3dwaDcoa2dVcFooYWJuZE1bI1g1PCRVUyozZT0qYTlLW2hmL29NVSFifTpQMkUoTlRGZDJ8YDxTYWYxSE9PV3Y8JXgiRzhVVTtWLnN6QT5Qb2g/dVtUMyEwMDxbTlFwRlt9K1F9QDBOc3hmdjFPdzMmQ10kMCUjbjBWfmZHbkZOOC5JVmpLQFI+PXZvOChzPk9KOjBFcH1Taj8s''@;'; put 'put ''dCtYJmxLIjA8Xz9QO2xBK21hc1l6ME5vZFcjZTx1USw2KVh7RikxTlQ/fSZTTCN5W0ldeTQ+RCw3bkRqcEZXfEZ8OXxwZmtxdCZ+c102Ly9qLCt0c2dbSFFHTDsoNUM1fFZUPkVsPDQwJkFlOWl7a3o2NGg/UHl9e3dbVnd6NF0uKXRZaiRqTkpgdSUzJWJZRyxkXT5YZVhoMDo+WFo6dEomPzA6''@;'; put 'put ''T29HZlAoeXcrcG1HTX13PlM4bUwoOixFUl45RWoxJS5Ke18mZD95QCI6UkNMQXhOO2UzLElAMm5PdmU5cHA9SU5iPE0/Ons7PVh5VlV+UWV2NUJMKkBNUDlJaHc5I2t7PCFgaklWdzVdKmV6Qjx5OnMyLCV8LjtoXXZOazpdW3k4TX1peSgse0NPaDAvTz0zWik4RWJScEx1NHNuOGtRcThYUlJ+''@;'; put 'put ''KmJoLE9Nalk9VWZVNGk7Iz07OVhnNlpVY1JMLExbMS9Jb3VUalRjSDhZOylnPE1LcTg3MXtYdDlCIVckdy9aRUg4Tm8vTCpuRnQqbzJCVzkyLDpUa0d4PTFPcTNJbEt+YGsyVmRGUURoQ287ezxHRSpGOlNUOUFINjFbSXk6Pj1QZDBGbCxkNyw4OzZWdXJiOzRaOTd2cjhGX0FjSz5XdmkrfG83''@;'; put 'put ''e3FfZW59bz5pS0p9bWY4eD1tc3Z9aFBoUyhedlBnTWd9YkgyITh+aDM4d35NPS9RN1ZmOWFXe3s2SGc0MmB2VChDK1BNSWEwSj5ycE0vJmFrQS9ffnJyajpqUTs0Uz98WzQpSlIoUntdYSYsTmw2cTQvVE5rPyN5NSVSezxwcihMSG9lalJBei9GZ3JWJVZYeilNJHNIYHVXcFZ+Lj5DQHNAcUg0''@;'; put 'put ''Ims8XjNnbGB8eVlGPWJ7bW1Wa3BVKFU0NCo9LmReWF9tVzw0IzQkflU0M2c+UXp6V0BVQDhWKGc/SVQxN2s/YHhwMDQ1Q2F4bkVidVU4MEN2MnxkYmMwfTZjaGxlK3t9Yno4Vn4ufjQ0PH5JQEckcUEmSkpwMGdWO0BxK3RfLkBTZGksLFlFKlV2RkBxOTsudjcyQ3gwJStDUWBOSUouRFcsXXZl''@;'; put 'put ''QDQpOShadkZAIkl9R1NVeUMvQHZSTG8rVWdLWUZAT0koNjswLG0vfj4wLDlDPS5aMnsrfS5dMmZ8dC9dSVlEP0lbeVYiTC98NCIrVThMRF1UOV9kdVosS2Fjb2BucHgkZlVkS3kualosKEtyNCZ6S21vNVtAVSl2L1AwPi9DVTRAODN9R3lPbkc8SGk7RXNNO3QqZ1pWK2I5UFYjSm1dMXk+ISE4''@;'; put 'put ''QFQiZEhZbFN5Ul17XWIjYnk1SlNYfGtsWnhSaXFIVGhtTWh4I05oTHwlPE9JZGQ4Ump1Pi93VGldJVtNeyZNOWY+LjRtZSwuVlg0T2gvOXwyLm5DSUlvTVU3eCUzPnZyel95UmlPMl9oUlg1ZmQpdTV0IzZiXVR7T1MsRnR1UnhdUWE+NzZScX1QeHImZ1V2TXtwWzNwd0JKcCxUVVgiJDNgVlJ2''@;'; put 'put ''bDYxNj0kOTEmbSg3NXxVPGBYNVs4bkolK046eiFUR191SCQsdEJ+VEdAVVd8SFBAVVFaMSYlOnY7NktlPXNpVCsuR15AUDl4YXA6YjJEaE1LSEZmfVdIPHxUO1BzWTVhV09JT0hJK1hnJFlxaXRPWV8jNzxWWVokOno7ZiIwT3wzTTFFaFlVeX5OJSx5OXtYPk55RTNhJWxRP015Pk9VMD9zcXk2''@;'; put 'put ''L1tHOGUwQ1dBTkZiQU4/OU1TY1J3V2A/eUJYN1Ywfj93TzsjWDkuNmFQL05PNWs/OCsmZjZiXVNYUWFILG5lPTlfRkBzVmJeaj9SLjFvNjsydmQmOzR3S2QmWSUzMVZrayRZJXY3SFdecjkrKzl9UihNIiZONDpqNndrU2h5TCpzTDBdSzQsbVNqalUjI1NkaTg6azxwOXwubFc6Z2E6JT5NOzx+''@;'; put 'put ''THVUTEpyK1hBNUxWWzA0O29JU3E2U0cwdm5+Qm48RTMpKkZgSFlCa2MhaE5YUTdkKURWclF3V1c/Ulc9Mmo6cHBgQ054bC91eGRwMGI5aUkydysjVVQrT1NLe1Z9R1ZeU2twYTk7Tn1ecmJqamghJStlRXR6VTlsIj02LmBVejBvZ1JJPEklW3p5djttO0ROWD8oaDJYYFMuRWd2YEVxIiwiaj0+''@;'; put 'put ''aEcsU1E7aClWYTFIQEpeK1B5eHZYOC8rZ317cmR6dmsuITRjdzlKWU0lcU1EO1YrYU54XUVOejZ3SzswQmNUZ2k/THIxbl1YQmJzcno7Ul03O2w6fmwwcnR6OitxXVIzRXptMGdNWl9mKXlkUlRUN3wrYV0lPiQwUm5CcSomOnAvVngvQT5sYzVTbnt3dmUzJitlRVB5R304RWBrMGIuXk1bOnJx''@;'; put 'put ''LkZwdn5zU0RTUnNkJUxHN2ZVUDYsRVV9MHI/O2dEVDxjUWhkSit2fE1bVn5bWSJAI0JHUlMyOGJuIVl3NmxwW0I7bVFDRnNZeWFjayo+dzxGeVBUVDNDJD53eFBHNk9KQVF7U2NjNlgxbz51TEFoNXV6SmdgYHpdJlBsSzxrXVtHUXplcndxMDNAfEZkZH0lc0tQflB4PTN5fERocSRvPTdeIyZh''@;'; put 'put ''ZHVbOHVNaG8jZmVBUlY6IXIwPW51dHcwREcwdFAhbEt0NDVecVZYXVdwRXU0V0liWHJ3fj0lQW9oenJJM3k5ekJWXnZSekFxLCJNN0RJaVtJbW4vVDhabClFekVxfT13a25heVQuaCxiRnh6O0NzM11qLz1iS2l7QEB0NEU8PVBlOG1WT0NhKzBYQ3c0Nng/UTYrSFVpNm54PzRAQyQxJVhuKXku''@;'; put 'put ''UHBoTHtuVDE8VCtobzlsZ0MrXVFwVnVRX11PLFJmW018bUlUQXtLcismeV5bKWxmYTM1MjJxWlk+OXNEVyhmIlZWYj9KaVB3enQ7TyIhfEs8a3dAcHc2KWcyNWhDdEZ9XkB2Q05laDZGSCUhO0Z2XUZVaXBhXisrPiM6e2RFdChjRCI3O2cyPlJZQDlCSW9sejlIbX5JWWI/YUNGOEhaNl95TGkz''@;'; put 'put ''Zm09KlV6YW1reGBaTyRyMFJLKmJ1PVpBQCQ/SCxeOEleJG89OiRkOGxMdVtjaFVYOkw+NyFdLEJ7cFVlbyhxJCV5L1dTfip9P2loQC9DOn12MCVLSUQhc0RvV2pdM2BVOH1YaDJfL1kyQ0leSyNPaU0pRWRCNiZMYHlvdlkuYD14RTNRN1Q3dURqT0BFWi41Pk8pRitjLjNEZzw8blpgdWlXS2xB''@;'; put 'put ''S04uV0srIlF3czQjeDttRjRhSkBmfSE5Rjo/YjFKK1pnWmg3RSlybGBwMkIsSHNybUFGNVR3cX1sTFdsVk5eM04uZiZyXlpxOzQmInd4NWt+ImRAIzFWV01nVm44elpIVks4Tm81JDVxcztffEF4NS91OzsvWHV3S3BAX3w+JFt0STZPZyVaa3BBdjE6KFBXdWNLPVtBcHlbI3RscilyZWpiRTt7''@;'; put 'put ''X11zZiNIP2dtN01qUSs5Tns/cyo/XyEwS2guO25xS2gmP1o6YVprTmcyO35WW1ZjMDUmZGxoV0ZpXzpSVTtuOj16fWR5Yz1uVTByPUY2NGVDZG9yJmwhL3R3P3dLR0lTViwlOE4hfm9SJk4hRTNjK05jdDAwdnlIbSg9NlFiP2R1NW5YQUhvSGwjdEhLYTM6IWI5O2xPaGM+XSZHc3BvIWVLS2p5''@;'; put 'put ''PE48IndLJHpaS1hOTTxyYihCKGxUMGMjI2t4SnZEeCJ0JVNgREA6eWdPU1BTV0dsV3R4VGwiZ3NMQ1RsXS5FTmZYOGBdfmhoITRlRU5nKTB3ZWVdMGI7KXZbY0NyYyljeFNiIiUzWmU5UDFJO1t3Y29dTTRVM3tkN3gzN2ohL1khLCg4ZjkqbSVjTWg9WHFCdHhCKSlaRjZ5fC9GWzB3NnckOjdp''@;'; put 'put ''enUhfDxBanoqWTdlMSNaOSxWUVYmbXlCVTtoayMhLFBZOXF3KEZLWGt7PiR9b1ZHWlJbeXczeUk1T3RpYk53M317KmJ5NUolUHduPEZzVF9USFElMSNucWh5Z3pPfEBPMWUvL2M/TVd+NjlJRT0iOnBjQS4sbnppW0hzUmdnVU59Xn1vXzkpN1NMWWJGbjpYJWI2eTZUVEdxfW53NyFWWT5oInhY''@;'; put 'put ''TE9MVGFbUndMUyM4eS4zTm9aZVEoVGVDQ3l7W3FfLkU4Z2VuRmNsLCUqZHZbYUZXN0pgVCw+YzRTcitJXk93XjUsTys8VHl7TmVleH1SQGZbcHd3LyJZM2NQS2Awd09aOF8uTmwvQkRNaTVvTlI1Ji5oRjtfMzY2OEEuYG8hWVdnKFVkPCkrUVRnIUBOaHFUI2pAKTBmeHdDP1BjTz9bPzpKekdV''@;'; put 'put ''ZVlNbTIleUg4SyZfLCNkYDZqW09FZFEoN3F5U0BhI1guOkBIWV5yKyRrOm1URyt4SjBtW2ojYkRYTk9pRitGVVRGQllQLFEufk9fNChOQS86OT9wcnQkPy5ZKDBiLm0ufk9uP2AwRlBNZG9kallrXVVlU1NwMEo8UHBrKm5lUyoxS0RsOTNFPmo+KDcxMyZmZyM4SyJKdH0kYDd2fEpmeU98UzBk''@;'; put 'put ''ZV9pRz8yNWVgX09DN3JdUSx0UzZAYWA9KmNwTTZ4ZDh3PmQ/Ln0rWThpQyNjfVsmKE4zX2J0SSxSJEo4OWZwNTdodno3JDpKYnt4QkZRKVF0fTNAL0hYOVlVXXhsO0JYVjh0JlgsbHpaakF8NltELCJmPGlRc2skY1VYT2NyZHxLVC4xYFtvUU00O215WFVPezxZXlBaOThMKGZkV35gIn13L2hE''@;'; put 'put ''UG4/bldOaFpQX014YlpvRnVlMnhpYWpyKUB9O1dmRi59O11rTUhxZVRuR3NCWUd4L0ReeEhxd0M2K0V7YUdqIWtZU31wLG5HN2lNN2x0cmRHbmM0ezZ7Y343OTRvdVpve3kxbDN4TzlqU3l5RktYQDtKfDNWY0pwTCVPbmNVYHsrKn5XaHgyNVd8SkVeJC5TN2loczxWUHwxZ2BvMEBoaWNLNlpj''@;'; put 'put ''bn41N1RUSEc8JVViYEElMUNyPSt2OEMuLF1XWEh0bCkuLjB6cUlRc3IwcFQ6WW9JdUFPTiZLfHhYOyJScTdkUnwiUCM1WzZJPCtDeXZyM1BCJExwZHRlejtTeDRwenlXJFUxe3tAX2Z6UU41Y0FkPFNFS2dLQ1ltI2dkS0tfSGohY29dW3N2aVZoVX0kVCpMRDdhP2FXcF9pa107eTFdRlpybVpd''@;'; put 'put ''UilUKToxZFRyZ1pHWCE4eUFxQyJddk9waCtsSW5kWSptW1I3bFtZY2lGcXVsX1tEe09hfTIleDlCT3ZSZ3pkcVtAdWFlX2s5RzMuXzleRG91PEI9PDBBT3kwakZrVytVWXNkNDk4U1Zjd1hSczFBR3ZxVDQwbiVCWWM4NSVCcFpZem5jLmthV0dbZzhufHt4KHlzZERYfk0yRCg1N1RhT0Y/LnQ8''@;'; put 'put ''KSpHZVhHdDNDRF43YnUkXSlkNkclXiEpaipHbDIoR1orcVNaKTAuTCorOVFdbnFHNUR4JD5RazA/TFY7b1BiLFRde2Beb11sLjEseWYrcjd1TSM8diYjRzxuVT4kdXZLM3A0SiskOEFQa0opOCR4L3hLPDN2L01eN1AjSE8/YEpod0txSG8obFY+c1NkYiY5S1g8RUZxQH5vbVVHQFRsR0prQ2RG''@;'; put 'put ''L2pAVGomS3YwQzZ4eyxBaEE0c1V+cHk8dUpEJT5sLlNlV0JwKkVIVC5MeyhAcDtxRUBFbzMvNmBwYEcrSEAreC9ASGIzL1ZfVloyYksrVFdebExWWDE9Nnk5fVIuRUcrbSVBSyNmQ1p1Q0ZpQm0pRSZjSUhqSzd2TzckW2FjM1pSOz5aT1ZIYDErO28rMSM/I3NXWjJiPEAkZy49cm9OT1lWcyEs''@;'; put 'put ''MV80MHF3cS4pSmomd3c9cj4/KzFxeHxNX3RffWc7Ly9HVFVSMTpMMXIkVUZMOkwyQHRwbFZXX3phSFpWQD58TlgyKiI6Yi9ldDNROFtSTTxaaSphW0V8RnBvKSl6dW98d2FTKyN+Pm15R3w8ZixnPlVMOnRdPyNnOytZXVAycyQ+fFs/IyhLTUBRcH1xd1tFcWlTK21rVkk0dW5LaUtHP0k+ZShS''@;'; put 'put ''XTZAem51aj96Ym9Bc3RjXXlLNzRPdHh3LGIrTnRdYEEwTEBPPE4od0BtcjVqTTBjQyZeUyttMVllOG1dO3dBZSUwbkUqd0IsckB3PiZnR1duZyNNYG1pM2FLQG14SF1nSzo+KkV0ZDhNSGhYQ3M8cTFEMEpydEB6JHJAVDlfLj1tbj40K3EuZUFyRXhHc1RsQ1l5MWd3Uj8vMHs4aXN8PDYpNSRT''@;'; put 'put ''N0E1aXM9KiI0IjhrIT0qWlMxYzg0eSYqdi89KzQ0S1p2bGhgfUZTaFpaQXkseCNAXUovbztuN09Lc14hczplaGtDVU9ISjJ5eTFMZ0h9UDE7MWRTamxEY2wobERleGY/OiwjdlM0LCY3eUxEakNwaXB+QlZfeyVYc2AmbV9tWT8jMGosJl9wfWdNZW9Ebkd+a2x9ZmomTV1STUlIRl9eXkldNkFh''@;'; put 'put ''JmppYk8hYFE9MWVMUDI1RG1+fnFFLkk3MGNDKFU7IjlxXmo1LDdLI35bQ1AxWDA+MXsoeih2NGVaTU44NE9qUz19V0ZIVzRtXz0oTTs6I251PVUuZlosPXx5eGdEeVBlbTZYTzkhYmVDPmIoJUI0d2suSDFXZmJdQEdtT24udERKZDtXTjA/OmUhUihGRVQxUiJrVGtZXiEraD54M2NTJWszUU9A''@;'; put 'put ''MDlmPDY9TzNURDdvUmsiYDolSXg/cCluWitYe3R0c18kNCVfJGwmbmt4Wnsldj4rTWZUSTNdYXtifFQ6MWZOMDMxbWBPJj5gV3IzLzJFWkhhMzx2ezNUO3U0YDJJeGM6dWg6NkhQb0Zxfih0IW0uIXU3ZC4vU1ZPamJET25kM3IkOVRJWE8wdzhifiwmYkd0NX0oMVpVfFZfY0gmaVlPUk17fT1u''@;'; put 'put ''MDtVW3wqIyJsLjJIdFQvS2s1N14qKjBjKE5XOlBvM1IzU2hYWjN8d25EUyo4dFV3PHFyME5XbTVVXSFZMFVScDNUNEh0VDV2dXMjY0ZOJSRtcFc/fWltVnpAMXdATWZUdSQlXkZ6LlQ6MXRUI3V7TTIlTzYvPT5DTzVnKShzW0xyY2w3X040bjs0MXY/TTcsXmxtdz15cCR2ViVOOUYjTl1DLFIk''@;'; put 'put ''al87MW0uOkgrbmxeL3w3cGk8NCU7VDcyRTciciRORCUlKlFXW01xYGFiKnNLbnFvKWB9dzZ5e3ljPT0saVlPUk0mMkVKIzVxR3tkKXc+XzdCXVQpPncrS29DYTM8dUIrPFR5TzwiVEwlZk4rPCRiQSFYXThIblojdVc7RTpMZ3BYRWNzWXV8TTU/UyZsWyg0Kz9WVCtFQSJOQl5UNzAvZ097aDZY''@;'; put 'put ''MTRqRj5TT187QlFARihdQnQ8JWwrS2xXMns3cCE2UCxjRm40UWZHcDdlU2kqMD4wRUYzKllMUHNLQFBdRWVrRTI3O1lPIWw8Uko1SkVnLEhTUHJtWEpKMntwTSkrKD5KPDU4d1dIaVBJNmNiY153a1RnU0ZFKkFoJk4ubjNwaHpOUTxYJVBMPEwxNF4+U0dsaGs/IzZkJC54JTZSSSRDaT84eFU9''@;'; put 'put ''bTwhLjBJb11iTW4pM0hbel10Yzw2bShdaSZsLyEiSytnQTMqMXd6XVNwV0lSaXouc2xFU3BTK35sTCIySmwzQFBXOngmRnIsTW02MFVRWClpcSFzWWAqJV5OKCtyQmBMUE07RkZ+NlhGS2RYWWldU1J7ZExKIls9LjpjYXJ5ekE2d2hML1ohI09XTXo2QUJlTkJiWDVpOFRbQC4sVCpjWzxOdnBz''@;'; put 'put ''MUJhOU4hZCF4P2tnKUJRdjZscDtCYj8jT1FuOyNoPjg4N1JjTUxQWXUjPF8sS1JZXm9VO0FwezsyVmFzRSU2Y1FpUXI4JE5MODVTKGdzVVFvO0h+cGo+OF0vITQpV0p4N3B9OkBYXkpqYyJ5Mjd8Zjd7Nis+K1RHIjhmejcvaktEKSZvc1l+L1BSPTMhZi89KWlwQiNDbX5MVn5VZD8lSnghZkBY''@;'; put 'put ''UksrLz06a2Y6Z0JeQF5RMFN9RjtJI3VOamNFWUwkdFhMQnRvd3UrQDhRYiJDZU0rQUBRLFEyWT1GNT07a3o2X2JRZTxvNDxsYHBkaVF7Y28xQVt1IzsuP11ZSUpFQkdtQW5mWSxyQzpbOmtTcC4yVTY+U2NSNTtvZ0hVPjNWUFdQJj98P0hGVjF1VX1UY1AoUmdNbUU+bjg3KVk0I0toYzNvJF1T''@;'; put 'put ''PDZjQlVFbkZiVmw3cG8zPDJ4SXFSXU1PLDUyd3c+bT5OOmIqMCVQMCQudGlNIlJbZHlJTlc1UnBZc2ZYTk17PW4zQSpPYTBjbzAhXUUoLDowRHp1MnVhWVc4MyR5dV9Eb09hQ2M1VDU/V0lRbVY/Izc6MERXPSZsemc8a2Y6MD9pLm1bWz48OC88Vy5hJSx0YVc5YjcucFFERiFNRyY6PT9GV0Ul''@;'; put 'put ''dWN6RmBWSlFfJnlGYEBJfEZ9OHtkb0VPYl9YQzg7RFZXQzNdRnZXaiN1V0lBbkwmdEhGXnk+dlVSM1hBU2FMZEdmeDNJcUkuMUIufmBheVdeSkYwWn5WUCE3LGlZYjJ0RToydXgwYHxgbzc3QFF6LmluZ3QwITtmQDJnIXh0T1NFVHtZJVU7Pl5damxaKHZpKFJYbiNRXVhZdVViLEg/KFM9UDE6''@;'; put 'put ''LD1fa0FfT216bl5Idy9kNTQ+VEc9P3ZldXA4cVo/b2AyK0VYbVlqeyRXPkA3Yz5ZQ0JnKFQ7RUZsTnMjTGZ9RnN5dl9EKEREcHJQRlB2QU8vTUZ0Z09uSGwoJnkodmpHRDw3JjpAZWZsLDNhXnZiRzJRXTpJIWFySWxaY0hGSWJ4dTA7KzVGUz9QYjtCKWoxdDtxeTIodi8uU2ZGQFlXZD5lOnRV''@;'; put 'put ''VnBOISVnenRaN3hsIT1Ue1tQU01gTmklYGQ0OTMxX1M2cDY5UiRabFFmbD5pYGRHNXk6aCY+U3c7dSJkcEQ+WWFzWjZLRSpRaW8yRG16ZGApLCpbTHQ7Y30hS1hEZElBRlZuTjdBUGdGS1JgPnVwcjRoaiNpbTd+KT9dTXFGWTY6KTtsTTN1dmdNVz5na2UlRW4zbns9Zj90VzhHdzFEZ2orQWwu''@;'; put 'put ''PE01ZFdAL1p0QkE7MiNNOXVXdm5BcW1nPWdPb2lyKVs4Uy9qOVIwTj9dTjFzdk5tfj9uR24pSTIuJXNaQjU/L3N6WnJXOU5bWXA2N3czKjhVMFJTRFdiZEhYP3lVei8jVCNYWjxaQVksUyh7cHEuN0chMDlZWjFwZDtwYXk1OCtyMnFqRkk5WUtwODlKWFE6OiJMMUpTcU8/Q2xRMyx0aTE6bDNB''@;'; put 'put ''T3BKMkI2OkYvfltebWZtYj5wWklDZUczRW1CY3BmOEdgNkU4TUZOK1Y2VCtEOmhtRm1jXzlxKWRWNDt4fC9ERWRHSl85fHRZY0xAdCZdVzU7MlZSfHk+VXpza0JkVGtyJWMsckZTW1E2RnJbYXJKZVZtJCIwVV03aSpaYkBqdjxmKzYzZFtTZGAhekF3VUpyUTFPcDtre1VEKDcxbGxFOn0rKldN''@;'; put 'put ''JWZLT3JPW3ZDPWJLNmg8a2hAYHNWNXxxNCI7VSY3cHl6YzxtY2ptI3QscTlMYDs9QWVyIiQjTXZJXypoT3lkbl5jZio3bSg2YXgoLHJDWnFyZ0gzO1NvTz0pQiUsUnAqQVEpRX5fcSU5WW94NCMjcm9pNzU8N1dXZVNbLytfaWlYTzYvOltIR09WeE49dE4wSlpqUmVqK217KkxYJXNzYGRge2Y3''@;'; put 'put ''IzkqRUFkJSpVeXsvSHFKXSohNXNZLGNjbjUjNTlePU0hfDkleEcyTVBmb15Kai9gSCUpeGBHaXlXM3AlamNqZmB+PDIyQlFSVVg1fHlXUjJZTGtVI3s5RV89bDNUWSMwZ3RNWDUlO1pqUU1lWX5oSmI4RzNYa018ITghKzk2LjNfcDE9bDFUV1MpXVBiI2ZGOSViUW54bDtAV2RuSl1eSEVwMzNw''@;'; put 'put ''Rjo4U3l4UV9jbzY1ZGA/aURKNjhdbTA3WUY2TCVuWUVPcG0rfXA/IVcsd00kLis6KyI6KksieD57THIyXXhESWtlPDYwJTdJTEchRH4kaklNenxFNllFKm46PD0+PGY1eiUySEJTWSFdbVMiOEdCP0UpSmVRQm1WZDQzVVIra3ZKanEwPyM+NzYqKmY5Vl1EIWU3bDxJYzJZYTBHbk07RGVVcWJi''@;'; put 'put ''SkdxXzJbOHo9bTdfW345U3pVYkFGPEMyYTBKZHUzMX4kKFdfey4vZ111Z3A2KFtLeXUwKFsrdSZsRGAmeHZSQCNZS05Yd0pOeUtORjtgS1lLSmVfMkt+VyVSeTZKa15KMTs/JiIpRllULn1AVHpWW05ZWWZMfTV+X1kwOSR3RDJAVT9xPSxpJngrTlNfcSNBeUBeZSVFWlo4dz5fM3d4Ik99OEly''@;'; put 'put ''MmJ8NTVEbXlhWTN1Sy5hKik3cEZ5VUNsJVNFWlkhMCtyaUxHfWxXOmtwMzR9e2UyI1oqS1krNCtDODo0SXAhY1lIdF0oVEZzZ2swTStzdXgwazlXLCU1OmNYXW1RXTE2YFE1bClydGMwLz46dGcld0U4TyVEOGU/dXtObCVyVTxRO2g4TjAjcFIjQE0rU0pMdjwlQV0qJC5kVSlwdG1VO1l+WTxK''@;'; put 'put ''NElCT1pRP3h+Xl4oNWpBR29FeVt1PXdJbHp5RSVdRTtsYGJXLDI6VCEpeUcmZDJ5YyVQWS9AMm5sWkRwdyxCfSgsbTclWyFFXllYa0ZeWUBROks8ZTJoRDJ+KjQjWEohSjBRYzJOTnQlYyUreSYoU2sodTJ1JD94Ki5XVDc7UzwwbU1VNjsvOnkoI0x9KXVbdTJ7cV4pd09wb0JAQ2NOcT4/MDYk''@;'; put 'put ''fkVlNUd9RC9fVGxbfEo4WVgmdHY3Y1VkZSspO1FMfC94elt8bltBcHlbIzxBYyEwUn5ZXyglPnV9b0wyN1hTW0d+b3N8T2ZscGVBL24jK3dNMm87az4zK0cuQyZgfCtZUnV5SHZDSm9uSUVeOm0lWjtJUWorKzZLTCNSSX59a2JhbXlZcH52TmFtMilzLiE0aE8zZSI6YW0kRyQ+VWxhbSI0fC5z''@;'; put 'put ''Zz5bYXg/ckI3OSJFa2RGZlhgXSxYb1JwIUV5biwuMVswazkpYHxYN0Brc0AxfDpBTGVITEs4JTI2JTJxNlpRVVtxLioxQWJLNUVzWXdrc0RoaiFzaWRKNDNzWUJ0eFtpKF9OWExdfDoyIytoSnlwKl53eCE6JSpyXj1OVFYyT190NDNaRn4mREhaKSg4LEQ4bjo5ZyxjNzpsT3NHe2tCK0hvPHIx''@;'; put 'put ''aG98ISxlbGo+Sk5UKGlkXklgZHlgKnpmOVBbRlklXzEvfnNmOGpaYjhbSSVbSVhfaFpBaTRAdXZ4NGNFWC9vKWlYe0JiNCRbKWx7cjhFOVomWjpIbiszZGMrNXBJTEMzXmZeZiRvIStXRSFWellAKVEySWBdMFdLMTpjV29pIjFJYEVrMC4hJVA3KzFWTV5JInNHeTtScXc8fD5dc28jdDRnQDFF''@;'; put 'put ''a0FrTV9YUjF1cyl5QVY3VF9CbGt8amxBa0h3cEljS2c3Kkk0VVFPQWluXktIaUQ+IyFbN1RNI0gyMDwpd2Z8SWIpOGZ8Jk9vSjF3Qi5ma2cvMmA3NFY8ZyNpIT88elNbPXpQQUNoZj42PmcvTVM8ZkooSS81b3hVSU4zIjJGck95M2hXWlFDckkxLlBWP1IoTGdsPmlnd3h9TjNmcSI0ZG9mZk9A''@;'; put 'put ''cT9+fSV9QzY2SVs3JEQufU5UOEFEJl4pPC5pUzFSVFN0M3U2ai4jbik7X0UkLndVXiwjeT4lRjplRn1qMXo0OjVIIy9oXmZ6dnFNTDtzc3QiJG9lZzUvdmsyNi45THhJMTJEM3hGKVskdFtqQD98RnAwKF8vQyIlYWtnL1RBV0I2dF06O1I0Q0YsS0x2Nz9eVkwpZCFLeDJXT3s3NVoqKHFXOTta''@;'; put 'put ''NC95RWI7QEkzX1RFbH5vZ19kamQlPm5VNSNzK3IkaTNwZ180UFdNd0gha35VelY1diEhdDM5KDNkNzlfZWQpcEouZk95XkNZQyUuMHdqNyNaOllNO2AhQUksOl5jV2tLTDRdZylTMmRCTjUxd1RVLi4kTnx+OiwvOD8vUCtvQWpdfGY2JTQjMVU4YT1QWXt2SXdFWUhRSE16WSZTNHNZRWBDND1Q''@;'; put 'put ''VXlhYjU5XTBXazgxN1Ujd2IuWiY8cTpUPGQ1eTUkWDlwQm1UPzdMcCI9NntyRUtIQ2NgLixPciFRe3JJO2VreSFaM2JlRllHMFZrK0pERyhaVTEyKF9qJCJLYzFVREcocyEqcS5XK2F0SVlBYnZAelh1c0g5XSpLUC5jUi91dSZ9VXdnYEc6bmx8XWBwZzJhOkM9Li4xKiI1dE9hUHRMdCpCOWZN''@;'; put 'put ''dktBaWlyanUyYjRaTGxMakUiMjNpXj9mSzssaDt+QmA1JWNCIn1ST11JYFVSUjJWTHIvJGtQcDY0fEBxVlAxTlQzQGFWTGpiVDtkM0pheTl0NnlJaFJ2dSRnKzlGV28vWW87Lz1AR1F0eERyTlVMRHRwK3VgQHIjVGtuLz4wUmBxPFg6Sy9yPF8lZ3QrPVhqUVY5Q0Iodj9YMlN2QShrP2BgfFhY''@;'; put 'put ''PVtDRCNaWFlBd0FjUmhBY0VJQUhyPyhxJGsrR15HcT9KYC5gcz9LYFdPLzh1TXFYJjMmSzZBKTh1TWlgWVs8LCVHT0NvQSZ0WTQvLmNBdT9BSjEzeGIpbW51eEIrT3xMUko7RShdNEM3NnpGcllyanhWcDFIVWxjQEZWYXJqRXNlP3k2JWMkWFg1NENBSGBZVmFTUk5UP3wsT31yc2pWRndOSjVT''@;'; put 'put ''VldPYHxnRClOW3siYSRPc2ppPjZnTjI9VC9JNGwlWFB+P3ImIyxJUm8rclIuOG5DZV1edTkzL1U4ST1mJW9mT3RRUCVmOmt1bGN6ZzYydHh8KUhLTCZRazE4UmVJd3FTWktLQXEkVn1dOi88VkNhVVJOZUtSUGZpclZzKipneSQ5OktSJj9Ve1IzI2VWcFBkbyIpZStWK155TCp0S29aQn1Ma2NF''@;'; put 'put ''cXkpJUVSL1ZASUVFRzNBOVp9d2Y/U215T2YjKSkraHY/bTc/b0hUUjAxSzlwXkV8d0A1b15KMjQ0Q0s5UiFqMVNyOGxSJD5AeUxPejVfb047SHU5MWkweFBTeC9lcDNlWCt3bGk5bnNBPjsse2h6QlB5THlFVWt0O2VnRjI0LG5meXQyKFJtX2s4LiVjVjNlbVNuZzt1SztbQ1ZGOm8oKzA7fnE6''@;'; put 'put ''cTdhYWpJSHMmVHF7RyF2VkxKbH03KF80WzgoMjMmbkVVanw4dlBkfS84NS5OW2JXQnFBT0pJfjo6T0I8UCpAUjJwaTcqcjYuMVFMNWNHcjUsPmpYeiZXcGgvUTtZcV1AYjl7QzpOeSh2P053T3lfNiE3UlhqOUVNeW9CdyE6a0FGL2pPSHEqLHZ1SEt1JldoTGIxKmQjRkcvLGRnSzZoWDVldV54''@;'; put 'put ''fC5qdiFjazZYNiMqPj87VCllSFptTGhMZ1dQJU0ySn1gO2Q7VkpQRnlncHV6O3ZPSC5pUChScHlAciMpfkByV34zOG4pcTRGc0Z+MkMhXiMmTjE5V1F+MmEmIiRBb1ZAYmhSe2phMHIoRV59YEouU3RtX3dULiwwM3RXOUtfKzx9dzYkeUYzfW9KTlRuIV92SmokZmFoY3BWfWNnRDdmc11TWWVC''@;'; put 'put ''OEI7Qjh5WUJZJlksbFMlOSNBdlMjNGRxM2kwNTRoYm14UltwZERfTkIuNERgbCVwPFM9S31SfCt1e2EhWj8qX2JWSlVhSmJLcFNddiYrbC9CYzN7PH5HSiJsfiEkbGdHRmwlaFhJQDlYZiNAR2l3KW01MlE4VlRgMGVfJEtdU3c+SmtILjdIIUxTbjxUenFLZiZ1JEUhcTYpS1theGlQLlNsZVdp''@;'; put 'put ''S2BOfGdoZjdUXztUNG5BZU05MEckeV5aNTI0UTJgL3lVejlvM3Rgc2ErYClzL21MXSxudThDYEp9QF4pdE9zfnt+aTowPDJTMSM6RWEmZXpiLkFzLixMN35PKk5RQEhvenxZVkJKQEdyP1RLUlZTK19AM0A3eX1WKH57UmBOQSJJNDhDJH00RiNAUkJLTytkWXp5T1FXY2NeMUAzS2VdY0JUXjhS''@;'; put 'put ''ejcxIjg8V2lNai9LfXs4biU0PF4pJkdRMl9UY1c9P2tLYXpeImhsNVUrLjR1dyhCPFZKWHA7dnFlRWp3W0coO29aK1dFamRLW2drTFA7MUwlWn5aLyhHKkYlWXxYU1lFRyxHYD5rI3p+XU0wbC9VSlI5NS9mKyxBN2RyWWtwNXlZdV1RMm0zQjQ7dUl0JSNIQjkwUkB3Q3ArMiVuTT1rL2ZNKjlm''@;'; put 'put ''InFXNTgxfGhbUiVOJm06eU9vOSlLW3l9Ji9RcFE2bFQkazlTTiNwQTRkZFUrdVQoTFsxQjljaVROJjg9R2U7KWw8TjNiLmRMJXU9YnFfQW5bJHBMayRKI21DLHVqaj02TTUiWW9IbXp0NWxGJkpLMjMoJEwmUVtvcWU2dmZtJntoTUMlc00sM05yP3Q5XWo6KW59ZzNEM3UiWFVLNEgqLnZXTnZ8''@;'; put 'put ''ZTs9S2VXQDNqSF1iXWsrKT03UkJHPzlYcz1PdX1TNTRZUnhKWWN9KkklKkgmQ2UyNngxNDZPQyVkSGgoUHRoWFgkZVMhZ11oRjwlWj8hPyZJIUwzJjZvWHtBZUk6QFdsdDA1W2MuYnFKQTNEIUtyQFRVKkx9XlBmQj86UypPW0IyWjw8fUJTMjRJXkIyJlZ3MnImOUtMQCVbMVVRXn4uV1kiVXpx''@;'; put 'put ''eT56YmQ1KGR9K1pKNiomKnY6RlYiS0Bfc1YsXzE7JT1wWX5Wdk1AMU5fSVpea0FLMEl4Qnw/REZNViQkQUZFZGhdQWU+U00oXTBhW1o1V085LmRVIWNoXUFWaCZARyVUbG98MUN1VVFIWV93dzBmRFpPIllIa1JEZ2tdS0BOMWRuUyFMYjdAL3FTfUdTQHp9eU1iU1FAWV9RM0l4JCttKCtXNDEj''@;'; put 'put ''fiV8Q1VvZGlrSThid2NTRERDdWw0WllRSSJuSks5VVdVcVlIJj5jMD0ydGZdNWZPVW5mZHhlfE5iOmpWKGpzXSxBaEZqdVE4N0Zuajg6M2A7cyZOKCIscSgzMk9uRTwsb1dVMXxAU19tfCZAeT85RF0zWDBiTyNYWjxqU1IzblcvWGEiNCFQdDhmZnNyRHoqVix3aWNOZW1kI2JjamRkI2JmOmJV''@;'; put 'put ''TjFkQSNyUD9wNkpAN3J+SFtUNT93NmMpVEwrbUEjQHlhK0lBRHk3MXRdN0lWNnZYKktYWEBhZE0/TkpYLiZXfjhfaExQVzZweUw0VGdHNWJRdU5WQE5EY3YkMyE9fHNOUTJlR25ROSVUSTJxWWQzfFQ+LEduUCxefUN8RWY+e1s2KSMrXUw7VFtwKTVfdkxTaFR+OVFsO2xSOVFqUm9MSWZFVkM6''@;'; put 'put ''fTtaIi5rUU9vKC9wRzVINzttOHM5elV+SGlSOEIiZGxrNjIzIV9TQmVEODA2eHYpYCl1czZIU10mSzl4RVE3bXJWQVUkd0xJOV83VzgoKVZQUz9TREJjS3gkTTI7SkJnendOW156TDB6dFo6b35re2ZVUmA9fiQqMzQ1LiVCXyhWYCtQWFN7Zk5XTUJMIVpnRX5DW15EVysqfjgqej9iTEc2L1F5''@;'; put 'put ''ezxwR25NO3N4NSl7czpLMVFvUk1xMD8jUl0zNkFMM2FIa088aiZbJklvKXc1ZWpoTT0wQzdbMFgrbWg4VDlLNmskUm5eKHtPL3JrWm9kW0M5YClYKCsiM1hGVHZGKiIzWV1AfmgpaHVzWSM/Tld5MnZDMD9vKldyY1lCVXlzMnxQQj80c1NHczdFcyNFPGtofFgmNjl5RFd2S1diQXovW2hGKk1v''@;'; put 'put ''dkFIRW02WXclTzJDTmk5LGNNPU4qSmsvdXxqeCRQOUxTYHYoalc1U3BMVHBHcTd1MyE1VH0vaz1GYGN8WTV4fTAjamZKPjhRYns9Nmo7bUtbQWhBVEhOKWdBZkdoPi9iRyxySlMubi9jTChnLjE2YjpsajZoe0ZmTWhpcEt1Wi45OVM4TWtJVixHJWJSUjhuaFNfRUN6cUJZTjwxfEIzdFFER2pF''@;'; put 'put ''WkxOV0QyeH1gTGRzRnRATTVGX15TX312fVpAXThXPkN2dU0jYUYrOT1kJW9mSGF4b3hQI2Z7cDAvbmBuTntETyZJNiEpU1BVdVp7ZGg3Lzl0N2ZEP0lVV0p6cHkxcWx6Rig4bmVZMVkoaWdrejtrdjN4Ikx6Jk9vJTdtcDU3bEV0dzZLRVBtelAmWzg0MzZJSjI9NjRxRFYoUm5Rc2o/PX1qZDFu''@;'; put 'put ''ZWN6e159Jl84Nyt9TyZPJHg0Nlo+ZDJoJSQrXTJ0PTYvKjNUaHghV1I9aiYsPmMpbG87VlNBJndzckNzdlszUHs/NCRTJWN6P2tPUigqVUJjSiFIbWc2T2xmZDV1OWY1MixsUnIxJFZhJEgsYVJ1MFtTMG9sIkFrYkUvc09eQll2UzReeVVsYXdEKD5qbzdAI1tvIyV+cHEkVmhVaVY/dyViSHU0''@;'; put 'put ''SWJoNjg+b1B7PWdgd0hzM19IfmdhLn13YTAhajxUJjA7W3hFXzFDeUd3Ijk8azRldk1OOklkbXBYTTFtPEk5KmdARktrJEF2TWliVEcwPDY3KU9wdCV3RERjRjlBTUA5JXN2VE1JRGUreVU4c11kciZseUxybSNzPyMmaG8yM184bkNLVnFtTSlSekxJOWMsPFNjSzU+RHxlIWNTIm5xSCJpSVlI''@;'; put 'put ''JjdlZGBsTFZHazAyRWNEU0ZVRTVxM0NLQ1B8Q3NBXThSfjZtVHx0cD1ZX1RwV2chb1t7OU9KX0R+KTNVIiZva05TMEx0Jm9wT01vVnFDXTByJUQpeTJFNnFNVHU/aEY6blZpUl55WlohanRUKG5ZfDdXc0w3ITBYfjlEKzkvRUFETU8uTE5lIVYlMFNiYCRLOFhwaGVGak9sZHNPZn5PIkE0PVBy''@;'; put 'put ''ezokaiRIUHkkZiRmSjFVKlNyRWpkN0tNd0hBWCkySGpse24jN2Q0VUIpVnVyXVEkSlZmZG5lX0hPPjUlPDchZileJTVVeHlvIjR0XWVZJnVbfkwodFN+OC5WdU57TU4odVNybVVOPnBiWj56TDozNjFQaU90aXRKM3RSUll4Zm1nLkl8KmV+TyFvIkN6KVgiLE8/RF90I249XSpYSUR8KVlJZ1lL''@;'; put 'put ''Ui4sZ1RSVSwqdUxzJUVVXkRCYCltQjd+d19rM1kxbF9tRH1qbmR1PzhNWDpkPDpZaXV1P0lQUEVVZWZlWmcxNWoucnVGWGt5Tn1ZODElVF5CcHdFcVNZO0ZMcUQ5d0VGR3FnPX1fWnhySGYkeUZTdmJIZ0pvPVAuXj1lOz00bExUL0c9RTxkbF0wMkFEKDVBd28sJWovdyMrdj5hUTVOfkQmTnR+''@;'; put 'put ''bDh0JTU8NC93blhaKjt3W3RRYU9dQ3pAW3EzLFtCPForIS9+eTJ9RyJVIToza1JfKT9zPyltQEZ0aWc0TXFILyRsb19hUEkiW0JAQUZ4Smc9SnxIPiRqSCJEXihgSG52cjkmUkd5MnNkKlYkOm9iPmw5NS9oQitqdzs4azsyITUmRF9LYmYhKkwlO0JAOihLMl9eXlR3fGIiIShmeTtYXkBKXXtW''@;'; put 'put ''VT44eHc9W21DZVtbdmRzOUUuLE1dbXoxQj9gJmZIMFdzU09bVyIueFhRNzd2JkYuOTNFSndgNHh+Inl3N1hvPDBvK15AMUxmQjVjbUMwe3VWQDFfKVF3QypuN0FMPGwhS2skdSoiYWZ1ZWFkTW5idWtVPytoIV5dSUxxLFFkeDRtaTl9e3VuWUl0XT9iQVskd3oxLk9na1g2Tzdpa2o/UDdqW24q''@;'; put 'put ''M3ZpP2VGJVgiJUhaeGFLR2FTUnM+N3diPjR0RFdSJE0kaFpQYG1IWTdaRnNqOWwib2Q5Pkk/bWZBTyYlK1NYNTlvVV9JO0NTYzNCb30sU3UlNGleWUEzW3lMTktgT01AYEwrcDxtUFVMcShCMzpzQHM2KFgyRiozT35tWVIycDdMJihkI2lBZUI4QWVCOClpYmBqI0psYVs5Tjs8Lnp6QH5QNV80''@;'; put 'put ''P2JkZUI2YzdETkhOXSxWR1Y+STIoQiReSGohT1ZXTUU1IzE/Y19HL3IpaSZmIzp1Y2A/IXc8PF4xVGFWKnI2YVZ1NDBEblJydSRTMkVDQTBXQkEzbkVNTENdRF5KOmtwYC5CTkplOHo3Q1dkMnVDNE8+aWNFVkVBQUFBQUFBQUMiZUc8IXlHLipeP0ZnUWVaVTZpcjcjbkFVPG9uR1l1TSMhJSxe''@;'; put 'put ''Yjk2T3pgXmtEKUg4WHV2NjNIYDlIbnkqcU9SP2khZkl7bEN3Njl3alVKbnZ3V2xXdU9OTjRyYnAzfmY0bHZaTkZWYjxILnxATVtPfixxb3NYViRdbHRtNnxGWXwrQXVObzZxUklARn5lSHlSYnxKN286bEMzWlhnNytzYHFuNDxWPUphRnVUKTJzWEptajZbW0oiMTRTJCtEP2VWUCpacixqb01P''@;'; put 'put ''NWtTX2taV3kyIzhVRzs3czlwZGJfZ2JCWmdIWXhPWWFFOkVpWUIyWDh5c0BpOypmViwjWVY7WkpWckxVTTluc0hwaGgzYG9ZPE9tZ3tDWU5XIyYuYEVOME9qYEFDKCN5Z3UjeS9KIiMhfl1YJGZ3VTtbQEw3RF1RdzlLL0lOLE9CPCxoSlFTPlhvRVtDUEppPSZGSSpJYH4vK0UzR0lbVUIsY21I''@;'; put 'put ''WEY/IVF6Q0csbEljPio6eEZTKH5DSzR5e1JOW0QhbXg5LF9Od1tJW1FIPjMpb2wseFNzX2FtaHVmNHNgRmJaM2UzYSUmWlM+UDt5fiQ0WldPT0lOekR1Qj9QbDhGZkYhYHh8aUd1dyMhJHltb081MFg8MSx4a04lPFI5Vm1RZjA9IzRQVVVpZUYzU1E0Wys2cWcuL2JZcCVfT1N3akVbSWIpODBJ''@;'; put 'put ''JjRZJU5Hbj5ORnloZVZSfDA8IioqSTxrOyRuNW0kbH5vak9ab1tPMXpVVkVANVhvelpxUC5rVVtGanh2MUFIaW0rTn1bNUR3VSJFSjRWdT0ocEJvTFNBfnRnRnVRNU4/LzN4ZiV7eClqdXpKMD1sUmsrYUZhRXAkWD07M358PmBaaVJ2VnNrUTBVYDg6eFlwJV9QOkluIlFmY3JFMC9LeCxZciZK''@;'; put 'put ''LzdNNFVeeSY/eF1kaS50blpoeyp7T3NqXUpJfCVYczBfIU15eHJWR1dhOzhGWn0jX0ZNNmhleDU4R0tYSUhNOmIkWXdpNmtZZCooNVpOUy9GW015LCU5fUl4Ik1AW1BHOTV6bj8qPHs6OWR7eUpbJFAoW0JGMUZFVEV4R0wxaiY5SCJvUCFydyFFSl1bY3dVNV0rJTdgR0Q2WEhMMHpUI111bTQl''@;'; put 'put ''YV0pRUh2Qis+V1RgeEkjJE49KUA6czVxTGtSaFRSdjZTSTVQWCg8LE0zQDUwXXNTJX5eeFpoWEJMeV8ia1hFYVUwY0ZWeWFxQCM/JURXVFtPVGpMUkJFaEdkSk9NbU5Qbl1He3M/Y0x9cn0+PmA4MXxdbyplb257Q3JxeTxyenptLmtfPSNQdmJUfmYhVmQ6eGtDLjt3YmkxNlFqc1UlOWtnQFZ1''@;'; put 'put ''T3k4SVsrKn4rPksuO2Z1bipMJUBKd2AwcV9qeXRINFhhOU1aS1dwVF14YGhjVXR6UXsvRWc4XiV3MkU3c0BifC83VzoyI25mYSphTDhiQn4+d10mT1RFTHlfX1ZeXSpKXmV4WkV5VlhnVSJIOVdUakhLSU1IXl05L31pI1thbEMmMCglTjxNPEl7M0wzT3Z8UU0mSCtdMyM7bUlbe3ZJVnZjb25J''@;'; put 'put ''amY/YE1Cc2J1MHJnRWdgKjdqSzViJHdTLk96OmA0ZyQ0MCl8YnNiMHRWKE9Ya3oxOCwlTm9+LEIwaTshOipxMjs5eUUhOn1tLnZ5dTQ6Mk1LblFDMFNFQXQraEp2dT45PUMmVGJudSN9VyQ+eH5qQXc1LnRsfnBvUHRAdmdKbl9FcGBHQkA2JE5NP0QvKSlydDV4c0tbKSU6TSpue2hOblJ2d2VQ''@;'; put 'put ''QmxyZnczWnJKIWB5bnEiPnJsezI0NS9wd28iR0E8InNTMXwreWZgNSl1I0duaWMzTT1qZnE5Lyx1O3dHLFA3L2U+W31HWz1Xe10pUG98MT5aQS9VVUB3JU99LkYlYnpYYTNMJW13cG88RVIjakUxRHwhRV5Fb2smd0hqVWBfUnRLb0l5cFMxS3w9KkV4VFVZSnNSaD9maWd0WU45Uj1rTSJWfV9y''@;'; put 'put ''TUtWe217Q24uZkZIbHZ7PW92dEMhe3EheXVNcDNOUD9ldm8rU1dCM1RyfHkvcVN4RmBtY1RbW014ejZROTpyQ3lUKD1eOE1rbUB+VH1JL1BjOnd+YXJpXW9WXjlhImMiTFJOL1RkfUEiVVk1cD0/O3hUU0pdflBsNiJYIigiPllnPF8pSEo4dCosT2w+d0hEJjpAcXtGdj5LZF9qJCZUWUE7RFdX''@;'; put 'put ''P2M/RGFQYjszRVZveEZeT1ZPQ0ozTCg/RGZjZUR8bVNmQnEpJXROMENwWCheQEVRR1A9WWg9cEgxQVh5USwzeks9OF0/dlE+eSxlLGRvLyMyWkdkY1ZOQixNYHlpYiMpP01MTFdyI1V1LEo6eChdQEpKUHRjRClqPiMrblZVeDw+STchM2lhe10weytkbDMvYXdrWCVqJVQiOy8rN3xsYi9KYHhu''@;'; put 'put ''a2ZgL3x7NFc2cz9BYCV7OVI1Kl1SJn5PMTQ6LDtid0dKR3NKWmdZPGEjPE1OPSg3XSI1aW1xTklebGt+JU9Pa3ZNXy55TE8uVnkoRXdAQThnR2EjPUtoczQ1LHcjQXBGdE5nKE91ZTcoZnZ5UmNtQ3l5L2J6algyRlA5UGooWFBoVD83JVhOMVVqdmBuTj1oMDRZP08rKkxsYyJSbkZySEdqQihE''@;'; put 'put ''RVhEMj0xZG86dF9PKlBAZilaN1lhbj1Ee1YhYU8vYXdkNSRlPDBXSCh0Xj50dVZhOG9NNkdiMjEiYHNqIjRlfnIwJjIhS1B2cGFUOmpgLy5xRS9HUUc+TF1JZGoqOChULz1SR2ZITTRCOHAqVE8zUSx9aXk6WitUZy86QCJ4cHN6U2B7fU9JW1l9VylMQk57UH5OIzI0NztxU0k8aFFjenpWKEFq''@;'; put 'put ''NWUsT2VRI1N1fjlTY3JsP1ZTd0x2I1slYUNjUnhpYFUsU0tvJCYlJGs6YDtgL2Q9PDU8MS5AWGMsajcrM0JLIWw6Oz9aR3krKkgmSk1fL2ZycntAcl87KkslajlOL3JgeG00fDZPcVAhJU0oc196MkcyI0dle0M3OENsciZnUSVnXWpVRlVYZ0I7YiJXJSVnODwsQCQqeHd3U3I4aC4sJjQ7KTpV''@;'; put 'put ''Ll06UGopTmMzbyJnZl9GI3clNCslfkEwbjVqMWtQbEdiVyprUWd4SjI+dkVmMkNKTjVZM3kzeFVrSTM4I0dQUTxvZUtzaURhNlshYV9lOjlzPTNIckRIM2NOanBINndyKmx0b19nRGZUeWx1LFYmIkFAKm1iNVtoOEgsazl2aWIlZ3lDVmlPcTg2Klh6K0FPWz9La2IwYkskVXhaY2xsQ2UheXx5''@;'; put 'put ''MlF9VjQ2a3BQclc0OHhFO0pjYnZiTz5vMVVUI1l3RzlCTCsucF9sPX5TcT5aOTVQX0BbdSs5NCM3NkI8YlJBWVgodTRlS3lAXXRDS0YlV25GS2BHRnpqMy5YR2U1fnopMEJHfFUlV1ZBLDlEQEh0KVBDPnleL0NIYz5jLmVIfDBPdHkxVHxYOFFUY0hZWFEsd3dUM3cxU1pVYjdHQ2VibldebHBq''@;'; put 'put ''TWQhPSNTTE17di5ySGJ3bENETCl8VSNPT1Q6Oi9aQlVGdylUYDhRJDQ+bGp2KTtOZ11PVWN9cmYvNW1jW0xBcnxvYT1eNm56ZkQmbzlleDFrSV5wVjk3R11EdiNBKjVXKDQ7Yk5XWm1Hd0Ihd3FPZ0x9KmR2MlFgfUNkcSlaKjptWklOfEFDdzx1QzMoYWZCLkZEdWZobVhAYTdGK3NOL0xUY1Nw''@;'; put 'put ''ZCs2YXBBUkNwaVdBPzlxTlpVOmNHMnt7eEo0TTpjKEAuKV58a2hCK3h4M306YHg4XSpPUkM7S04oW1cxezRRRUkwR0MvOC5ATiJFK0dBNTh3KGtrV0VZUjZkZE9WOjFJIltmY3pkN1o0SmxFdE5TLyRTJGF6bU95fH1HdStKUHN+eWU+Vzt9O3NrbyVsKGBwbi4xTCw3T2U/YXJlWVU0LHFMNSUh''@;'; put 'put ''cixIa2JnazxXI05we2A+Z2A8dl9EIUp4ZyRsWEYzcyZbaCNAUUNiaFc+NkA1S1ZxeVVba3A3aXI7fkcjWG0mMmRvVWJTW0wzXU9XSS5WMHVdOV1kQSZ5KypQI1hHIShoOGIsZ2xIPjJjREJ9OUpdWUQ3I2xgRFEyV3dZPFY1Z3FLRFtrJTVKY3BHTWF6bjZOJElqIXtAZ1NiKTMwbCEjI0ZfNkc3''@;'; put 'put ''bnUoV1A3ZEdsWD9dKW8xNmxjZEI5PXg6dkdXLH1pUiZxLnVzVTxMMF53VyEsPTZ1JHd9KiNjLitqWUE2SzR2NFk4JSpaMThSYG8jLEhqNG4mKnRBUlVzWXk6RjdTWzdtbHtvWXhIL3c3bDduXW9qezZxeX5uSF1rK0ZsVzNHKltMd0NlclNUSGNPcHZnfjhTbGhnSUsjbW1UWHdjaiVGW21hb3E6''@;'; put 'put ''Zl9JM1JFSUZ9VFBqcSpOI3chd1tUbUt+OCleSHZoO1JhOWxkQUNEPy9Jb3pOVyRIUj9uUVFkOl55WX1QcUlPKGI1XWY3bXB3ITMmPUM9Wy8lfGZ5NWphWE0lfGJ9RUxocFs3Ik01OVEjQWBiN20+R19EZnU3aGEmWExUYzZRPFc8Ui8hZzpfWzhtVWo6LFVIbllAVypieW5tYltNUTlkUEcxTjp9''@;'; put 'put ''PkZtZ0FDZk95L1IzSXo5cERkaUxpYFFAZnBYMzhNViFaNFRJcnNgP2NEcSxQUnBUPik7IUV5MTEzPy9eNF0mSHtwU2FudzFCP0ZGK14/R1dIW2pMeTJWPFhjQWRxSHNLITBEO0l1M3xxbV13MUNULlNdOmVYdWl2NC90c3JvaV4zdkBxa1E5IWViOSZxNXZJW0c0TmJ6MUNPVF8pV1hkfU0iQENg''@;'; put 'put ''U1QpTVJXU2QlXzk2d15HJFVFaHk/VUtkPWYpdEFLbUleRl11XnIkST42TitARDxlcy8jKHZsKlNlfko/VkRocnUpS2dxPyxkciVtaztYd31nNzMwUk14SjM0biZHTFF9RXEmbU4oa0VJVyJVK1B0KnxWYWVDKzluJWFnOnZtPXtZKHw6M1FkZCF0R0UueT5PTjVXOFNLLm0yS3VwUEBkSTBObiNW''@;'; put 'put ''IWxWZGlxXjkyWilhODo7cF5GKH1SYH5HJiFtV1dYejpIVDJ8NUJgZ3ZKUWZ8KEgzRVMzajN7KVF1KGR9QTxxZ1dAcUFMKmxMbGlFayVsZT82TkhEayZxeE5QPXkxQm99cWZVX3VCY2VHNEJPSXV2fFgoO31sQnVlaU9YP0U1aiFQO2VKUSVqMlBAKWN+P2hCUF99O3FGNX1Ydm9VPS53IWtfPTk7''@;'; put 'put ''MEt6TzJsKEhEMk5GfUtoan1oQWcyaXY7OCM+M1R7RWBDSW1hMGxAN107ZXFlV3hrfSpzPEEqPldhI1FvMC8ua0AhZmV3Ji9gODlZanJifjh7ajw7TmB2fXU1fXlhWz8xJnhUM3tDUU9yUm48Vjp9fUJpaTtbS0UmMVtvRlI4UWtxSHc3fithOSx3Z2w4VUc7LkJnR1YvWm57OEZMR15yMjcxZUNf''@;'; put 'put ''OEN0Yyp9Y20xVmV3RSEjZGp5YDxJN25lLlNNKzFRPjA3QGs7ZV94XXtqTEU5a2Z2JEFefDAuTkczVGMqM2gpZ34iQHguJCZyam57Kl0kOXluOjguXkNLY0h0VmkxW1RFQGd5b1lYRyhaI24oVEpWfiRDdk5eSXlWe19RJCUzdD1OOUh8amkrLEdddz4rREx8P2ZFfFUmKi5IfGgvTTc1QGhwNm4s''@;'; put 'put ''XUpoNCp2LD1dLC9HaUR6fmche0lQKTJSezJjSXFnS3R9WU4xKmw8MGI2TEdWIVBgJDRncmpMM2Z2VzVObF5AQ2dbNnlmc3tMMXtaRGhPWy9maEJucS9QIlJYcEs4P0dvey9GdDs5aiRKSXRiRig/PyRwZk1iVGF4YXhtZCtjRGFmNU1iL088RE5yLGNBaWFGWVFfY2puOFgkXj5GXjVCVXVAPz83''@;'; put 'put ''K2R7T0hPcjp0KCk5cD4iP3RhZl5kTWM0QjJwTV9NKnh7fkhzKj4kZDBxc1VTfmxlOzIzKEYlbFR3bExodEZ7VF4keH00JT4mO30/TVM7TSRLWlJzJERtOHVYdG0zRj9pfkRXRSM0WV54ZDppJndXbmx1XiNYblQ4bCE/NzM2WmIhSkZ3ZytrQHRzbERJOzR3ZzpsITREPE9neCwyR2hKN0lNcmY+''@;'; put 'put ''PFlnYjg4fSxBMVJka2h8aDEiSTBgWmF1WCYscHt7Jmw9bllSbklraEBnLl54blQ/I2ZuYmN1ZCR8MlgocGM8I3thLm0ocWQoXSEuQihwOlddVDFdSW18fW5uIVt0KStBS2BwQl80QXxifSteTSIoYUgkVDh8NyYyaDZsK2M0MSQsMW1YLCRuY09zV3kqSjJjbT5uNi5hdWUmKzteTFA+WHhUfTUx''@;'; put 'put ''WlZjRWdJdGp9dS9hbDA4QjNDPGVoM2cpfiwwcmBJWFMoJnZLJEtbbDBHRmV+YF5aWDI8LHNqMHNDJlRNLFFxb15eT3xrdSRLZUB9fiR3K1Z7JDg2X2hrcSY0OHBQO097YFBfdnBqWUh1XWF7JCNkUWdBLCRZLEtpTXp3I3FdRkRzdSRheXlJWlo8fS9MVTFpLDBALiNaVjpATj9EYEV1ZDR1TWZR''@;'; put 'put ''TzZ2JD9ScyN7TF9rL0BHNn1jISZMK3l7KDxRSyNqNzFHIiJzIzBpQ1lUbjxoS05nTXFJTUUkRk4jJjJwcW9RdTpgYFNxdS9wPGpHdlNDJn1WIi9eeFZyb2okKmVLbTt2KWI3dSl6Zj9jNHZ+P0UiNy90bEdtNHRbaz86fldlWG1ZbzUpSzFgZ2QqM0VaMX5ORHdbPHlqVTNaW1hYOVo0KlIjM1p9''@;'; put 'put ''LFYqa0hqIiM0L2JFUD49MDchcWBmYDpNK0l9JW5NVGI+Wls1flpPb1A2eTlVVmghYjBWTk9sfUZ1M30xYUkqJVssalEyRlVteG4zbG80RlVxYEJUflc8O3wjKEguUzNaRjE3UysmaHNUdWZQK3taRTRHJU03dWYmNHxAaHZ6MjVNVHxMTHdGQk8vbi5GMWRDc10pJUxZVzpzYV1vdmc5LjR4TGBh''@;'; put 'put ''X34lU0k0biwlISRkK25HcFg4O1RLZjliTWp7QFs5Qjs3LzxkYVJWbSFVPDpVQzIkWzRAMkxRInwyMypXQ3hqbypgeGQ5REdSL1VLNzVnXjdUQDhec31UR1gyNkNhRH5BLkl0eEI1VWNSaH1PN0I0cEA7NGEoeiRIWyRHMF0jPkh9P2JRJUIwKDkrWllPREJRZUxnVWdKSDJ7aWwzKzV2S09OXyhO''@;'; put 'put ''LjZHcmJ2OHYxcHYrL2ZxKTF9aFdQXUx0WzcmY20xP19TL1I4I35SP0VTRn0rLiQ6eDIwcGsodV8sdUFrUGVhfGs2UXdkeClpJkJVXUBjQ1BVeHE+TEAmUVZrQzlFTDUoP0hZV0BQQHhAOCFxcDxNZVNve1lCeEU2V1pDYGtHS3sjO1tdWS9ifigvZW9pPTAqKmNre2pWdDJma09OUl4oa25JWVVn''@;'; put 'put ''WTRiaHphdjtmUi9UUXM3JVA3eV01WG16WFhHLnlpKl9POEh7ZmkxKVlLZjpmO2ImViYwL1lLRVlmeiRjZiFVZERfZHBXcXh0JXV+M3ZKZ141R3V1UGg2aXNKKHcuP2FrRzJobSsuflFkLzV3MkdAbyhyXnY+MCNUeDg2dEVuM2poV1Vyc15OJTtaXWB6cVJaPW5weGMhPSFUSmllMk1waXYhJmsp''@;'; put 'put ''NzJeJkJSJT5+S0xAO1FlWTF6QHhbcko6bF84bWVvdmZGRFouUjo9VX0sNH4hJlJDKDdzQU5RUH4oJjZAVGl+UmErSz1eaj1aZT5FPjhwO3ohNG0ifEdmRUt1YkdeT31RZy5CRlsmQkFkYXhMTXQmUDt5PmJ4NlVoKlhNQjFBc2Q7dlJ8dHA7WTQ/THZdSzA6U31iKGM1dDMmbH4kdm45Oj45MCRK''@;'; put 'put ''WEIkYDdpTDMsKnVDSTAlRjc2VVpaU1h+eGEpKnxncyEsW2VgfXA8TStqZTlbNyZWfnpnTGEhXyk7RkdbXUVJRXxPcTBPajN7R1d2Q2l3e1Q+XXsxM3U1S3ZINSZzOn5CQEhPSkYhP18xRDFQczpmejZlWSo1WWhjfipUKVtaSmQjSGhkOjQhQTptNjhVTT1TXkpyUS48MnlrLnRZKz1sS0VleGFu''@;'; put 'put ''dXZqPWd8QHUmNWIpOS8rZGNqUVZwQ05FME1YKTFXOzR8Lzd0UjZ1ImYqITA7ZGVMSWByO3svaEFpQzdlTlZ5Z0MpUzd5TE49L08kflNTd29DS1pRfDQ4dCRWbU9fNWZXNTFfNUtMVlteQHdLNmgkTVhfJn5dZ1NPQEMhb31aPEd5VyExdl1kWERtZkZvKFUpSyM5NCwlbnkwInVOOlYmYispRjEl''@;'; put 'put ''O2pGVk9bYmFxPzliOkpWTDh+L11dVDYwIiM0ZT4yLjBrTlpjcVg8S2lCZ2UpQlkvYiE4PitYc3E7KFN7PiUzbkIua2c5NCJMY3JxMWMmTSouUW5hSHRRZWZnUXo4VjNsc1VUKSV2JTMrMEdkJUlibWw8aXEyITgodld1dldtQlJHN3YvdHFFWnIuOmFrVHAvZTd5Yn4/X3NNZ0VUL05VRlBZYTMz''@;'; put 'put ''TDJWVksyVVJ6WzBiS0g8PipPPW9wKEduJVlfTno/L3k5NVRvKkh0YV4xVlhGNHhwPjJpSzBYUnE5I018eXsme0hgaXF0PEZkaD4ybjJUeiJ9YGpMMFU5WjZQZmNmaHEiOXRkJHQxMUV2WDdYWyRYTDQ2PnkoV0NTLGllVWUwOUxQRllHbl93USZZPzhVNlgmSDBRdnx8aj8kK0g0Z01IXUJJXy49''@;'; put 'put ''e1RfY05XJXYlfWNUSXNyKnwpfHxGfVdrXSJ0VnJwO0ZkOXRNNTVWeCI8aDxXNEBtb2ExKXc+SWk0JkEqcFBRdXpDd0F7czJzLmpENGspfjpzdj9FN004NUJXTUp+RXpAaERGelAvbThiYng7OERZSnR8PmUlMkI8cHAkT2tuKCp6O0pRRUNSKTtFcWlBVGxOVGBsb3UjQ3pENiQoUWNtY2J2VSVM''@;'; put 'put ''S1ZOckJPWiRwLjRMdTFMayZYYz1SZjNWdVRDdGgzSyR9Wyw1SUNCaWdMRzdlanYvXlJoMzZQZWVnYFosaEEoNVF5MTM2PzhjfEkvPkAuVyJocFZRP3tUZHswT31YIy9VNjxjSiFweToyX0lKV1ZzOl5yZT5QdGA2dFEqUy5oLlleT0whcWxkQ2dBIX1CK1Q2VGJuW1QhWlZuLklYWDtufms7JE4u''@;'; put 'put ''XS54I0RlVyErXkYmQkY4LEBEVE5ycTJXXzkvKlo/Kl1jaV5MZHBeKFVZemckejRSMCEucTM6ezpxb345ZGp6dnNNIW4uUWk2a1F6IzpFNz5wcEdzKXpleCZ9LjFndlNpJHZIUiNkK1QzQjBWLFtAKDZJWzQjZkM0WUtJVSpjX0IhN3EjYWVAUCN5Z0dMVT9PUilhXSQsfXZeK2ckej52MXh+UTkq''@;'; put 'put ''NDp0WHR4Mk0hfUdAW1tGS2h1RjgibDxHKUFaVS5OY3tKMWZTcXwjeVtCZVpbVU5fbl1VInB3REN+T2BHLyImJlsifm4lLjQkKGJNIzBJKGk8MSw1NiE9ImtSSkM3b2todzJPflYoLldKdzI2ZHguV0RtZldCTnZHfmApIzRiaGVpekkzS00lRigqdG82Vz1KZjdWIihWMzVkSzcqSTNWIk4+UHs8''@;'; put 'put ''MUBsL2ojRlBTK35PKiM9Ojo1XygzWyYkWXJiJnBecHxnVG86Uzw9TGFbY0BEVDJuQWk8YXU0QVI2OkkhK1RvKWBVczFmaTB+NX1NfGA0LFZqRVl7N3c0WENRX2whVmBPPUUwNzBeOWUhbCJYPUBgPlsubFhMdTVUbllqQk91InZ5OlZaVTh1KiJKJGttfjd9P0E4Y1JFZ1F5dmV3SCpicihHX3si''@;'; put 'put ''O3FCMElRKjxpeV43VCh6TGtfUzx8YzE3cVRxXz9oKkNwYWlUWGU9fkdZek9GV1lvJTFFSlltXl4vUkxgNS8/ai52ekFScHIhVFY0dCRwYkU8OSR4fik+byZqPFRWUjByTUlUVSI7JGxBSnJJQVZbKz5IYHhwL1NxL3o7WipSMiYlU2spYiRXXih9RG8lbyQ1VixJIkRjVjNtUCE3LntHWyFXIUd4''@;'; put 'put ''QHRdOHhxREBEcmNwZjBOOHh5diZAZjhdMnVJQ2o5eHYyInVAR0dUfDgyQUtCaVFwVjkoaW1YJT5ML0ZvPWNudzd+JXdFdHU2VkxIUH54Vn5PfUppIkk7Pms9KU5DQzFgZmUvdy9XVUkoKW5MeHArR04rUyR2dVlgQWhZI1ByKyMiQGtBYnxLWTxaLE5oWWlqVE9JWChOZj9lLH4rMFhOe2lIeCIw''@;'; put 'put ''VUhJMDxHO1p5dCh+Ui86XlB1MlhZfWZdP1VYWmJIbltLfGRieUNSYSN5Nz5yJWN+SGltMl0xT19MSj0lQSNrOmtiZlV7cDc0ZnRZQWE3IztdQGxnZ29tRFk5KF5aP2tFQj1RTTc0ZGthdDJTNjlPRS4qTSNCWFMwbGlmWCZ+LGhwW19ZSEFQOEdHb3E/IVZpdVg9TCImWT5EbDQ2dDpCQXdXUmAu''@;'; put 'put ''V3RNbHBdc0UvWCN2OnYifHJuWjZGT0RJNXozYnZdWVIpUVo8TG1wWXZSNHNfLyxMWURAeW40P1ZnbzF4ZF8rcSh2ZmM0ekZQVkl3MUhpanFYe1owW0JLUCpmOioldkpuPTd6QnUwVGF4Mk5JWUd7OG9ZYDlgUTxTcE5KYXgoSTB6flo0XnBib1BiRFJgR208InY1fS5udFtPPGdXTCFaKlpFLHJY''@;'; put 'put ''NWN8RG06YHhQM0JHR1JkOCNwKktTOWZqQCtaXiFZKzQ9ez1VciVnJGpBN3F9ajp8N1UvUE5ofTtFLlNVSWF1P3pkMklGY1g4IzRRWFpSdX17aXRSZ0lAX1hUZzUxckB4XSFddG8jPkRyUFsrXUpbVXpyM1QqfSlaOC5ZNk1FLn5sUENwVkw7SjRBIm5sY31IT2M4UnA8PGxjVEl4SkhgOCYmZj1H''@;'; put 'put ''NGo7JjcvSTRSI3w0dFQ9a3p0WTY4cyQxcnRrbFdMOCxyTltdfnRjaChKSC9XKko5YzE7bT1xXnQ3UWdBUkZ+aTFUdUNDZl91WmNiUkp0dkhUQDQ3T2ZhISJrUVEzZ1kmfHFSMXIoW18iMThrOltWUlFbfEZ0Wn16XV50QzxjSz1aIz4mRkwzRDF7YjFibk9MMFZkI1VsTG1EIno6bj5ZOlZJWjU5''@;'; put 'put ''Sj59VVU+PWhDaHNwOntEPFRDJj5HLD1vJXtsPk07cTdYYkxafDohfHxDO0NQNWQvOHxWUHEoeXJ9dW4kSy8pWW4kKEZEfnJZUjM4IzdzKnUsTGtSYjI6X11VKThZTnYwYTt9LmVqN21WJCVJekpYcXVybiYubnAqV1AhKzwuTGp7fG9RYyxiK3xJX2wqQHJOPHwjfl5Va1VvUXgwN0g9XjRsfn18''@;'; put 'put ''R2JjUUBnb0ZvTEQsSGhLPH5ybGY3RVo0UnVlTyt8VyY+Z1ZkJGYyYXdvVGZCWHF4KWtSQWpqeEErJlskfl5qbjx7Z00kYWF4Pj97dilqTlAiPlAlR1R9L2BAMERWOEpuT0JbQnFIMCZ7NzhyeyMsVX5XU0JJeT1OYTRtTi8kb3gmNl1uMCUzdXU3M0dGcXBYKUhkM0Vyc31FK3RBXzFPUDBLLl9d''@;'; put 'put ''WVdnTGh6REB5U3xGL18jfkQ0JVJ7LG9vbS5OInQmZ1dwQSJoTXtaUV46WU57fCNtLDx5JVZTIUhANCpTPk1LdHt7XXJfWnwiWCZyO3lsTE1+MmMpfDVZbmNpd0NgUiY5KUIqdXk3ZF5FYGkrR1RPKDtndkBQPU1hTUB4P2JRRU42eiFeJCZveGdhQmhCT1dOb2cldnAzLkltczY5YiovNzovYWQ9''@;'; put 'put ''VWZ1IywlbFpiJnwvfGlkfDdsTjgpdExRcnNbR1A4QHR6YDBJT1c+V2M9SmAxbT5mYjZvRXgjOEc0LlouOC5+aDZwPHVGWCFqQTpOZz1qZ2E7ZzYjNXhgJHReVlhONnVnd3luV3NmT3s2bilqNXt4Zjo3JDpuSCRjKy8pSVlmWlB6ODJdJlIqbTFWRykpaTlWNUYxbn52NENxKkYxOm5mZT9CS2pz''@;'; put 'put ''eTIrVTZHOjZDPkA+Q1FmKURWdl1YMV0rK3Z9UVdBX0JhUGQ6Z1Q2PzBpLyUrPCJqOEYoMDIlRC57PFBtUiFHTjAhSUZAO3E7OUFJJGRtblNLJm80SkF9UDxec3NEa29GVTxSIWxHaXBJZGA0XnBveDlQPTJVMzd+RkprKHlVd3QlU2RNNSM3dEJwJm0rbzQldFtnM1swK3hYND5oNDc5fEJRNTZ9''@;'; put 'put ''ZWFqPGg4bDo2fFJUWVZlRG9QZC5WYiVeKHVtRCUkKWBUfFZjdGAoNER8IWFNdVsyRmc0SHIsYyNfZF14SXM6dUNOb2xVSWFQKFgrJlVFez9XPGZgfiN2a2YmRHAldDIuMyEub348c0s1XUgobTd3KEFNZ2NsQD1Pc28mOlI/O2ZFZnpUSF1vcldXVXh4UnU5bHVMbXYvSkd6SFJiKXgrRnspcndz''@;'; put 'put ''Skt8cWV3OEp5ZV5PYnY8XnVXI2tGa3Q5eUgqKkYvfkBkeTxzb1VFZDlrby8pWCtkTHZHSCI0R19obTA2PCRpbzB7T0xISjRZdyIkMVh9PD11Y2I6JGc/dmFJT34sSVV9PW09N01sKEtNdU9TWVtCJi5qY3glTHxvbXQiZ0chX1s9USozJHBYQ1cpfXA4KFphNERdfHl0RitOM0w6UXZCMCtlbT9r''@;'; put 'put ''e0l3SCl5MUZKSVQ+UTIrLEBEMWhmJClRenpFcjVHOmZEdHxSRmB6ckkoSCRHX1Nqb0BPYGU9JTtZU3dASDM4dV8rYXM/JSM6Q2RDaS87Nm9xemRYQCh8Mz0rRSpgJk4/NDNYNz8/WVI9akRucDN3InFEXXVQPlZHZVg8bDFyNkFkT0JDa2ZXQTQ0YXB1eSRLI2UkI3VkRXtNeGtObGVzaTx+ZHJI''@;'; put 'put ''PTRgQT51Xyoxc3VdQEJ+fFpsKC94cSxEZnZTO184V3FlQGg/VyMjZCNEQzA8Q0JzT2RkZz9LKjlfYWFebTZ0eT5EbmNPT1Z8fE4hWlojZiR1REJxREFKX0t6KCJ+RVFAT3VUT0dFRC92R0U8ZV5wa3o7aE5lI3t4fENtInhfLDNpbT92P0RFOGVfTHVBdHFVYGpeQlddeHNJeyN6Y2wsOk5Xdmly''@;'; put 'put ''JmFaciJvbHN4PXQ1RTcoMVkoWjxyfjojcFZhS2V2fE0xeHs2RXJlImBQdCNRPzdAT0BgOjBDLn4rI2w4QWBHSz5Yc3gsejVGNVJIIV8qSE9lOyFKIz5HTjRASkhwYTIhS14oMCVPKVhaOi4vMmxAdWxCVEkxcjUjNXQ7PWpMM0RxMEVFRSFoPWNpaz5GXnhBLGQsaF5XNiF7WlQ4TjV3cnhGdV83''@;'; put 'put ''QDtSMmEqSnMjSUlFWnRVdlh3JENxImBuYHtadj9lZC9MWV0zNlg9ekQzMXhfLzV1YiJvRiVlPmlSUFV9PkJeLz9QMywieio/dkFYeEo8fSo7ND5sLGxeOm02KmZwWm5gQHEsZHFMckc1VFcpIUJlZGVTNEJ0PmZfVnssV1dSJEJiLGN4KXchK0wpcEN0antGY3Y9OmRvZV1PUjJRTzU1JUhMOEdv''@;'; put 'put ''ZlJadSxZZHtMMDF6JX0qO2QyJTc+Zjh+flBye0VDT05DclcxcTpIVkxpKUhya2h5LyEkb0xtLnVpUFM1XyYjfXZmX3lNbE17aSpfXXltPFpQNiE6XWgrWDBaQ008bFRtVTpLZD9lXkg0KiRuNHR3d3U8RDQlb3EpIls5fFldbk91fTFrKy9laCRoLDAwbDg+LHRJK356SX58InA8OTt6SFVka31P''@;'; put 'put ''bjA6U0shQ15XVmNEYWA6YClTRSxdW1s0ZExKWUVPNm92VGdLT00kU2h4JUJVOXB4Tkc0e14lLDVPOzxLNHBROTNaTXR0SzlNIyMqaCkscG4vfSZCQmMvSGZqYDZDOltWMSFVdzhmLE9uU0o7UWdgO0shZ0tVT1NffDZoN2dUaVRNQD54ekNBIzliWWleWkY/WTQxcE8lJjVgXmZdZWFlLFNmeXZm''@;'; put 'put ''KGJ3VGBAI2pmRSZ7IlNXVzl7Ll87Q2djVTdTaVR0byRyNmwzIXRpTCxjYEJdRFRDPEopdzpdZ3U/Nnw9M1Z9eHZNb1tLOWBhRjBMYEo6TXhHcyQoXltXNGooWzZWIWshJkg5LixrKTk0QywzVkZYIUcoMm4+Nj9iKmU5OllIcGlAOFc4QTtVYl4mKkM6XWdWMT1nbDVZR3ZTSHhqY1Z8KTtzI2Bd''@;'; put 'put ''Xm89T04vTC57RChLeUlJM1c5dVQ0QGthNkB5OGdYSjEqNDpDQDE9PU04b209TVQiQzdvKm55QElZVkVmPW5TMU01JTFfdlouNk1LMGxgTmhheEFROW1icW5xXiY6VlFwYENeNG4/KjpZbzVYXz9NXXxrTTA8LF09U2hOVHtTdlJ1VWIxY3JMbk4kR3BBb3VWb011RTBZT0QzSzw5QnB4XUxPWEdv''@;'; put 'put ''WGsyaGNFOE1VbjhKeDRxO1twWEEoJkkjT3Y3LldEfDNTPnc4OW5UTHFKNiVBQDpgaE5GNUx2eVNncz1yck5IJnAsUShIUUYoeERSYG57Vy9jdSIsTyFDRzcpM0J3Mjw9Ji5vTnhxPTxlZzlbZzAyL3pKbTBaTihbT0A/RDAvK2RNWjl4NDgrRW4wbzg8VlteVDY5OkRsdTt1WDUjP2h2dl8wX2JS''@;'; put 'put ''VS4qQTgpW0o0U2l8aFU4ZlQiTkNKcEZJZyspeTk3NnUvbzJuZSIpVShmS1JuOjE4OT9Wc3U4NVpTc2lBbiFLbitQRFspMmRhKykmfjRMfSleW3RDKHRlSXc7cUlqUTdAK2NZOFA3X0NQN1EsOVgrb005TUVkP2hSXnZKN2pMYiMmZD1MOnVQOn0mdG9HNE1YWlIhL0QwRSg+WkBHOUZCa0RSLCMv''@;'; put 'put ''aWo7W3FMKkRWfEhXIT5JK1VzW3JnWy9JWWM7bnU9JTVxTztlbDd1fXAkdjI0cSRnWDFvWFJufilaTjtjR1FsRT5tSHVhQGdDeFQvU29TdkAuKm4jfWpBMkw9MEpVcWEwQnAlUHI0cHBCSntscTZHYGg3ZWhJdW8zNjE7d3tAVkJyKVUhPV9XZUQrbTguLzBOVTdCeyV1M3Q0dUxgRXE+Uj0keHw0''@;'; put 'put ''bXFldkkiRz5NSWEucTQoW2c3SkhTfUUwajEkJCQlWzReXXRKaV58NWUjUiVbQVBrVGB0cm8sakB6X1coQHwiXVBdKW0mdyhWWVU9TllARD5UXXxCXkp3PzN0SEkhJThLWW10WSNHWVhTKkA6czhIXl9rXV5ETT05N1VIVmY2ZylZOlpXUTBiSFBucjt7SVYhWHFeU2VgfHNQd1EiJnVmeSsrRXBy''@;'; put 'put ''O0U1cTNqMD9ZJXVPPERrXV1mdFU4dlhERH5MMyFEKWwvZzRpKmx0cipnNGpoPHx1OXBdSFB+ZDdOc1gvY1BYLiReZ2ZCdjorOF1qR0sqPypyWVZMXV9TTl5INnFBaTF7e3hWb0JhQEhMdStjT3ZpKmQ6UFhHPnVKZDVMeXI1KS43OW5vO3cyTUxRaE5Sc0VgTCxuR1hXT0g1ZGIyOyZ3b118QjxC''@;'; put 'put ''IStXfXs3T1M1NihQazUkLyo8PTlTeUFgTEdXaz13SjB8Lk12UE9uWiwhUDpxQWAiemEuNnNQcEVWNzNedjEkOGgyMk5KNmZVZmkrbVtHdHN8UD0lPnhHaGxvZV1ZUzw6amdseXtLWTNYZGguaW9Ma18wSyxYSktFcXc+a2F7N0hscnx+R3t1WFV+TkdoSzdgSlZzImxsIzkmaGpATCR1dWlxNilC''@;'; put 'put ''NU1pKyxhJDQ4LnpJNEJEME1QdGttP3R9cjA5Zk8qZSpbJj1rSipzLy5GOHpLUF9ZKHA5OCxHTUJBK1BYVi8pSF53QmF3fS4vYjFlflo+fX06LCNbYkQ5bFJjYjtecy5jVEBbM2crdywkN3lUOHtZaFJKKjpAM24yWmtLIXsqWnxleE9pM3htZStbanplb1tFOjpVZ0E5alQufV0kbEpWLkNVdntO''@;'; put 'put ''QGReaSFRWVtyWiMkKnRTTV5FIkg7UVI0W1BWKHQ5Zy5vVWQjR3RNL285OkFAfENUYFd9Mz5RPG1IZ1h7QEUoTGR5YVlrXT4rT2M0SHw7QjdNVlYpSjZdbCteKV5TIXMyRHNHZEdNK3o/RFcmW2BGRk4yWnFzQXdKYlR3ak5zKXV5cWR5REwpZGtsI25ifjU5dmlmM2V2LE5GczdTcDd8SXA3RlU+''@;'; put 'put ''SW9LZ2dBZj1fUXUoQStfQVN+OUNvU0FiUHssUlhDK2JbTUJHT1dYaTFvYUcwcWp4SnBZbFpUbkNlPjg7eDtaKixAJjolNUliOiQ/PCZtdEkyfCNGezt4Iy48PnEvIlg2NmdQajZzRCE9Vj5VPEpQQHYqXmxRVUM7ay48cF9tJCRrSC5WX1tkRjgwc2F+cCZPXjsiLjhXUDRyIVMvJlhfN19waWYk''@;'; put 'put ''Lih9K2c+TU9zSFskWSMuejUuRTA9WWFWJFZMQnNEQltdRzk8PT8wZitYWW1WM0xtK3RfZzA/X24kL2s2eU43ZShEZ155WE9XQ1o3TmE7KSMxWGspLjJFSFBfUiFyaGRBfUdZI1gxQVYjcypKMiY9NDc+Q049WGZTaWtqKyhNe0diPV5UNlMxWTp7VSxWUDdkbjYyRmxxMCJES3ooQW44emwyM0BA''@;'; put 'put ''Rlh7XVRqMEZ6NnhTVCZba0xFOE13diJrTFU0ZlVhOD9fNmJTXTQvdW4vTkNFbGpUeElxOjphU0RmNkF8fEouTCUqdHovRiJieT4xWHsuJE5GcTJkUD0hYSx0dHMqNURoOnUiOE9pIVR3czxxZU0/MXd9Sj8vMXZ6RE51alVwI2w8NCNjcnBaJiF5PnxiLmQ3MSU4PWJEeTBLQnVwTCpOZ2Zpfi8w''@;'; put 'put ''ayIqKFdPe2tvcVJCLD92VSxYNVJlPDx8bDQmNktvXjx0e01gKDpTWzxMT0EvOzJCKml4Z3ohYzAodHlQOzJMMmlSYmFCK3hFazwxdElCZ3J5cDJucV9xKWRFRixTU11xMyYyMFRieEpPQD0+SzRtPzE/b0hRK1N8W3hkLi41V0FHZihvPTQ6THRgcmNQbHhVUWE7bj5RXShsIlBleyYpImF9Rl5k''@;'; put 'put ''dVQ1I0JgfChPVFt5Q2d9UUtXbj00REFlLFQiN1toJFh3JjYhPStwZEVGU2J8dGhKa2JqfTZPfDBeQlIke3MqYE43fVNjX3p3SXFIWTw8diYibVtKXU5YdEBrX1AxYSpYISUzQVllOnEraz1hIXhKQCRMQT9Mcik6OFI6KEIuXX1rZz5YVHFMVzYqKnBPaE87Tz1mP0E9ejxiUmQ9KiN2P1AuQENw''@;'; put 'put ''STpdZColSnhXSTJMbjtNNjAuPD0/XUhxdjIsYC5XK1hYVmpQWjl8WXdaQE9lVnh5eSxOOig7NjRCbko9WFN5PDBqeEc5LjVHd3VyR21JbS9ITikmKUVId1A5Mk1OV01mLnoxTmM0RHNDLldsM2gjYCtWIyE0dTE5VixwLjJ9TnZ9bmU/QS83ZjFHOHEpc2x9L3hNZXhMYTAxdGEkeiRfeyglPHx+''@;'; put 'put ''PUVbPVdEKnI1dFBJYl9AeCVEI1AiVkVZaitBPmh0TWxddD53PW1CeWR0OHgySTJLMWg8U144JkAuSmJ3UEs5NCFOK3x9Ln5aflRJfllMKTR7UT1rKjdlWVhUMCh+anxdNFFzeWAmTXhBK3YpdEUwLFRhPmxnfjVHTSN7JGFXOyNHSGEjeyI5UnJzOmN2UTxEQGRyYWk2YmQvc019K35mRiN9cV9x''@;'; put 'put ''PmYzRjBAeEYqZSp1Lj4+XXF0Ni89NW5sK2csYmZjMUMzSFlKQEQhcD4uT2Vday9VYVJVQEZUPn5rc3JkbW9mQnR5U2BnJXwqL1VPWHhWNFA+SGNITldJaTlNRGNjMD88PXUhaSppNTw6JG9Rcko2flFXZDRJK15+TGtNUSZ2a2U8QkU4cUl1U3BdeCVeZSQhJSIzVUsyOz54XiQ1PFA1UGBiRFRU''@;'; put 'put ''cnUqXiohLnQhVTk1VU5BaFRgcnwkcnlMInEzXzJfRy5LRnpUVTJHP0RiJSFLbE1qZ1gkVHNdWD8ufTNMU0RfTCRJV05FTFFjNmElIV9JMSJnYDhJSkZAfjhCYEY6TUwqXTdCJENqXzhkYyJRNjVCTjJlYElqQ1suK31jfSM+P3R7K0siLzpuWjhwJjtJNEU1REkoZkFORiJWWnlme0gsemsqVSVS''@;'; put 'put ''MlkyMUlOflA/NUU+SD02IjteKmUjUVc7M08xWSVeTDIxYkpFRjB6dXBsVSJEYkVTL2crTF96M3ZMZ2dRYjBCTWg5cU5iaCxHIlRyVWQqXytTUFRPKkE1N2dgeVFYfl1kOlomKGo9JX5TTXM1IUcial9IfF9xRzNJJkk8JnJIc3w7S2cqL3Usc2JDQV5aU2tkWVt5byYldEhEWkZ7RCQpaUZmfV82''@;'; put 'put ''b2gwM1AsXX5rJDIwT3p0QXhqU2treDMyZ140WFRdfUBjd14raThFPUN6IXkrOG1EQy50ZHxWdF5XUzZ4dHs/eC5DaERXVUJOOC47cl9Xa157KFZZbTJWSyhOb1RGM15fZ1syZWZOX2pLMlQ6QDI4OEdeP3ZqUTUxeyMsMyxwKGxRXjdpOU5mREB5Mzs4eWM2UyNmQSYhIzEmd3pDTzxIYFptfW1i''@;'; put 'put ''YD80SXxYQWliXmBaTW5KKjhNLzl8NVhyTWs2MzNnPT04Z0A0QG1lQnVGJWlSeVVPVXQvW0AkSWZiTFBabDJMPVIxelldJH5bY0hGQWFTaEF+N093aE1LW15kd28uI21dQj1aSjZzXUVNWislKXlpM35TJHU2QVArOlVRcFkmK1Y4el1DYll2ZXdIbi5nRHRuSTBeVzlTcHw+Rmt4L3NlZSgsYlQ8''@;'; put 'put ''I1VJbSZhN0hvQDZfdylFJU5nKkBiPjhyM3UsUm1FRDxrRiZlNTV+dSZ2KithVzdeRi50d1RHQDAkYEdIIlphRSZ6KVltLCNFOXVpPGk/KzpISksySWx9ZmdXJTdAPFlAJmlwMWhgSDBNR0Nde0I+XTRKWztRd3o0L04pYDN1Sz5yTyVVMGNHIzpjZDdjPXEwPEopNTY9bFszcGpdZTtCVF5lcy46''@;'; put 'put ''N1U/eDNZJXBYKFFaYmk2Tj4ze3QiSlQyP0R+VU5IZnx2fD0jVmAjal4uVShkMzZSQW4yR2kxN2B0ZGcoNlZlTStAcXM3eHglcUt9OUdoVjMscjBRamR4XmNaKDR+VXtjaTk+TFNxLy5rcSVfeG01c2pOT0RJVTNvYGxqd11RVEA7b304KlZsWV4oSl9mPD4uJH1JMDxgZHFuL3hAeEpDSVc/Wkpi''@;'; put 'put ''Lld0ISN1YG5CRXQ/fnFkL2F0Rnk2fn5CXlcwTlJjfUZfcEFTRmc/MWJUentANCR2JE01OzksI0Q3UWRjLyR7YyRhfUNTb0o0Tj9AOEB+ZDZLPyRIOXVlPSIvPFBzdUEvTF9OPiVgLHIxbHVTaiJpa0xAKkJrPlE8aGIrJUBrRWg5MG1EYmIyPT5YLF8zRnByY1VQRGN2IVZgVHpydXhUdXVMIV9p''@;'; put 'put ''TEFhdH0mblRsSSkyNG9Nems3bXQ4JVdaSCUwYkVLbEhze2gmYS8uSyJvVjgwR2xsO1pjeUBtTX12KHUyLCYoPU5LdiZYW1N1YSNELnouXmdrXWNJU0t+NksrfUtvaDVFZUFhWDw0TH1oRihLPj4vWmtAcXNEO2VNZlJ5U2JmZVRJbiFWbCxwT0hNN2grM2giVzBCa2wzJWpSUlhbZUdPb0VwZihC''@;'; put 'put ''Xkd5KGh6eD0xW08ybER9YT1sTjZmQzVzJFhvSEowPHM4RHkrdFhMc0UqS2VgNkwoR3RjY1Z5W1NCcD5sSUl6YHA5WltSenRlfklzV0dEcihvRmtEai9CQzZ6KHhRanZjcS8kOGkhLEZVZz9CaiwsRnUraWg/U0hBQlluQyJtdWFRQlNffVkheTlhJU1hWzJaR0VTOUBhPVZDeFhXSWgxP2Uufnol''@;'; put 'put ''UUwmcC4sJDE9S1k6P1RAazRbbmhpMFdXO2BJX1YkbCFsdVt4VDosdjBwZylOWzRUVSRXLzo1KEJPQ3RfRS56ai4uK3hIOjJdd3FqZ3tVWTR8WzVwfSFgRih8PU44X0ZgQ1VuRm1HaHhzeTRGbWR2PD92UFZzSklLMWU9a1okdl95fmRwXXZOQ2Z6bkpwNSEqWG9NV30ycUEoOVt9OCpQdkY8b2cj''@;'; put 'put ''MTw7NXQlcUIwUzo3TVFfe31GUHpzQ0whbyUoY3RMaXEodmQjK0xKK0h6VkFfJFVsNyk/OjRFUTl4SzF1e1VSR1tVajl9SWRiUSpaPFNiejFiXiokKWwlfHdafXtfRWxidyJ1RWh6QjskUVZuIkN3IkhKMGlmTEJSclhiemQvLE1LYDA9UXRgTlAzeFFLdWk6SGVmNkx4PGkpcjlSIUtaPTRuIyxv''@;'; put 'put ''dGNHS3k7fHQwXXloS3d3dUlPUUQ2aikyPWNhazhjQ0I7L0I1OXhnKTFzfWt2dXdJLFt8Wn1fRE8rWi5mUS8hMjtYOzZOVSh1WGlHMkFkbm1KZ3peLkI3VXlRZ0EkTjdpcz06TnlFRVdKdllxJEVJRUUoUkZYXWAhViQ/In05LiFDb2VBRE83UDsjP0lDfE53bkYmSnUpUDR3M3g9OHohY0lkRjBn''@;'; put 'put ''I3BqbT9acH5tS0gmRz4uazpXNUVlUT8xSChodER4OCI3blhEKCsvRHdkbntuVXFSUi4mWGU0WHlXYGRzZ19fWl8ua3FLKWxNWz5sajRIezhdfH0+Nz9zJU9uNEM3dzsxSDphUVVVaVpTPGMmTDZPZV1jWFF9ZXNbeVcvSkxKT2c7WWBaTmZqNmM9PzQjLDl2am5KSE1tWFRdbz9Way5LWThxMDdG''@;'; put 'put ''OTUyJntgW3FRVnQpckY5cT5NekpRRHEscWVbZXpRRHtPW3hye0Vmekw6ZFomO15jaUlDPUNPRExRb1hUMnx2dyFYbThMeSRfK3U0ZEIoJEwqIU5ldEtLTjR2Q0lAP0p2OXFSQGVaXyMyTDdrfW0se0d9Mzs8NnM2dHw5allANytwQnlBLEp4MFBgUXt5bjg1P3tpOCRaOGNWRyZNRmg1WmtQOWxM''@;'; put 'put ''bjA/KEVERjN3NiYwfGQ7a05GL2NNKiZTN1RwUVBgMEZ4fj5ZRnd7MktZLyRPPGYzITRqUkduK2Q4Jj0lTnRZaDZsKXwqcWheLkJYRz5yQGVXMiMoP2dOaEwpPD8qQileZTJuPzZ0RnJHTVJ0aDxoMHxGNWBMdykzZVlKXlglNERtPlcqKFV6aiM9MHp2MEEzVDlNJHBhNGxXUF1IZSxTamo4SnNC''@;'; put 'put ''QjpaOiUzRD1AVU1gdThzMjFyLCI8Sz5Ad0whPVs0RU1Gc01RSVQvOzFBcjFEZzZWb1hnZHQ1Rk5uY2ouejgqQ0BsP09BbS9hOEIhLjxbbnZEKCs3cX5gZHRGX1Y2Tl1Paz5zb2E6XmY+SyFTSyNfZFsyfHh7WVlvSm4xKnRxZTB1aGROOnVTM0k+cUM2Sk9QfVZeR2doUGxOSWU7M09bSVE8Wldy''@;'; put 'put ''MC8hbjU1aUA+YDA+SWdxJiUlLEx7PjEydTJ4MiZTZishaSY7Tmd6cmtzISEuNnV7LkQ3MTlVVS9YJFckLkUvcXZROiNBWT9xM3YyLGVOcVl1QmwxRF1qNXhZYVsiOlIkQ1ElPDV9WCpCWTBpMWkwVUFKUFhiQEFJKEhbbDhndlhCTGxKe2pYbEg6YyNmZHx5X0pJXzlXZGszUSM0LEBjTDMjKTQz''@;'; put 'put ''Zzw5VUUoTDVPJDopQS9rKWovJExxOEl9eHQjZWRtfTVxJmpAI0tPWS5IaE1EUC9gPn1fK1o7dF16JiRPPD5XQ1EieH1hSE9LJSxlOEJxdWUuVVg0PilQPmZ7ayZPU1dRVDJHcTlWfHhiWTshUGpEOjJmUStmdTtaUXUoOiolbmd1U2N0Wnp0TilGSF8qWDZQSk1mZUY6Li4vbmo3L0FRZyZpNTMw''@;'; put 'put ''T0J9eHxtUG19cUd9M3JKOnw4aCRbR0YjdU0sISJLOlFmYWRpKyVWWT97UXE2UHZKen5CbT9uRWE0WTVEYk8pXXI9dnhlI2IpPlpCZFJCaVVCe0AsaXB3ZSwyZEhMZjtFN1l4PD9Dd3l1dHg0Xi9TYjc6MzZEfmBmP1E0c1hTIlpDTXgmcSE7UiNsfTgoXTA7eG1nZDZxaHBMI2k6JkYmJHN5MzdU''@;'; put 'put ''Sn5sKC5lN2U7T0M3Lzw6Izx6b3wkbWl2JWc2blFgSl0hQEpYX358cVltIz9DcTt2PHZsZ14+V2I9UCxVbXV0L2QwfGlmdGtbb2MqUkVDMns2SXJVS3ckZygoSGFfWUlxXjE7cil0VFQ9KURgK29xWWF4Vjcua197XmtbKjNhd3I8aU5ZcGJWbkNDbWtAX0t4VjVJNz5jUkFtLl9DeiJsOiVORSI/''@;'; put 'put ''OTpSQjx7ejF0eCpOY3dFVD5dZnMyTS9eUTM+bllZOS9fQ1s8Uk83VD5+dCksYm9AIyp4NyhiSTA3MSVYJGd6Q3RAIWlWSTQyJEdZMmJVc09RNTooWXgxT2NkZj5rVl53KFI6bnQqWlEsUzdea1NGUSljI359YSpifHldLGRwRlZ0Snk5M0I1JVA9I2JxRXJCSDBycCFQNGRFVUs9Izd0Z3Y4JSFx''@;'; put 'put ''QChvaT9lOk5wTTB7e2JCLyhvT1haIVI/OCNuRmQyVVArek97UjtsRl13bn59YmwuRVdIMGx6ZzgsdjlZX1tLVzxDdGhJPExIdTNENE5HYUFvJmtAL1dxOlt+c2BjOSk9cUVlOk5dXTwiaFhHbUUrJEU0T2NlcDM+dWdoVDxFciJ7LmJEVlEoOWpnYDs9Q0YhcDFXVkMla0pHWEVBIjFiImhwaG4h''@;'; put 'put ''amlyZFlgTTc5eio7UUdBPm1KZlBZI1k+KEBwbjQoWDVTIUwid14xOl5BalcvO3ovWUlJSmQ/O1IjNX5XeW19Xm44aVgoWl0sbEVtMXl9OVZWUn1HbW56T0glPGYrempDL0RhT0hZOFhEJmMzNTkkLmA4YUxoT2w0X0JiKzUzUnF2Q0JVdkRTR2Jpaj49TWtBckY6ZD9YQ045ZWhWPEZ7PiVMMiVn''@;'; put 'put ''cGZXd319Sm80KTNwMjxWTGw/eVBma2omUTtAfD5paWkkYmF0bGlCMzVzUStjQUpGPW8uU2VvOjB9ZTwhIzs8ZzBsUyl4JWJndjh0RSJZSXBLQSk1KmVVbGI1Z29ZfWpQNFFbOUd7VWYweVI+akVVYyQ+Qigjbj1uVHBZTCVSUiI7K1R7UklUS2p9aklgU0QxPz9ieC4vOkN+QTdZWFhzUnd0UDFW''@;'; put 'put ''UXQpPzUrIzMidikkRypxNiV3K20qN0pfTV94VXQjOjJEO0E2aC5aU1tZaVAvSypwJClqKFIobFZfLzJlTHg/KzxTNTs+LFdjelN8UnFCTip2P0laclAmfSlEZEUjOV1tP3x5JXZVTiRtT1R7OUJ2KG1OS09sOkpoQzF9UU51aWBHUnpdaHdLRl1TL1t2ZU9BNUQvO0ppfDpNPXZTQ1JtXytQQFsk''@;'; put 'put ''PikwbGNtfjw7WVomJHQmfVtUNiI9WkgyOmQ4XzsjajZMSWtFZ0dpbGs2Y1s3XVVZfmN+JCNSTnAsYS58dEZ0WlZLK2x8KTAjU1prVTRjVFM8eVImRUFydEZ0clcjNjhBWnc8NkNLRXhGKColJEZATjUrPExnY0NqZiRgMmsjL2NrQXBEU2V5T3NeKnUjZXVkX3J0XW9aJWs/JGleak00XXBUc2Mo''@;'; put 'put ''IzMuclRKOmxHI10oLEdidHgkST1XLCJ9TFV7ezA/a2U+XlZxTSJAcT0ldylAIyVXV21aMy5sTFY9bjVYfDhfMUdlZ0JFYGo+Q2NQTlhxMUducEUiLHI7YWNSQWg5KGJ0a2dtb0w/VCZwK21JSjcwSFFeL2BZViVmZVUheUw+JnApUi90ZStrP091ISNdPX4oZnlIZXFzRjFZMjdDUClhWzE5USh3''@;'; put 'put ''RGAzYEQiSXJZTSxhMFdrLzhNe09GJVAoUT1LKX1CdnVXJExSKSNnZDV4eFJYM1QqLGVeZFFVO3hLTHhrQi5YdT5URS9RfnwqVzdVJV8lPkJiTHx8JEJFajghYDtxXytZKHo+a3pNXSMjKmJnXUlUNHdiLypJLD1OSTxAZ0llVTNOOy9gUmJULytqekEqJC92X2E1ak9yUVZUOEM7fWd9e29fMk1V''@;'; put 'put ''O2B9OF1ObFhjIit9PD1pO2NXRXZyLEVDZzg4KmVwdkxuQzBre1Y6JWovNXxJaS5EeVZHJGBnaStBSF9yVytFczdgP103NVdHfmshazArXkM1TXR4Nng3NVFwdSZDIShbNSp0L3c9ajVfJi8yRGNlQGhdJlYvVUcuInpiPzVpMFFEImAoYXZgYjlbcnVnd29KfmNJcj1PZj9lYGxVNXt3OG0sels8''@;'; put 'put ''OzBOcH59OVA7b0N9VSJ2fGpoVWl7YDdrdHBxZ3R2Mmd2XyF2amI+N3FlekZ+TXVqfC5HJTd7YkJFPW4qbHx1JSVnd3Jxb0suWiNqe2BVbnZRMTgiOFssaXVQT285W3w+WEdGIS4uVXQjMTxicDlkRCpiRFhqZm17V1J0d2libiIqQFM2VCRDJF9zaitCK19kQyYwb2c8b3tNMHFOQn0zOXA4MTRn''@;'; put 'put ''dDppYzt9OF5kdW1BRzBaTVJVNyR7PFU4cl9PPltxTHd6d2A2LjUmNjNYJTcvK0syb1lvPn4yMVFdcDBLQj0rek1uRTp1TjZ5L2whbHkofV1OdWNHJn5yV2AlUGdEXkYkNVlORj8yVUVkUj9dNEhRPVYmV0BgN19MSCVGMzd1I2RZaztAQFUoMSU3RFkpdzUqaT1KQDQxMUJ0TXtuIkg5PSEjJlE0''@;'; put 'put ''NTQ8cStmL2IhdG5tWm8pQCxRTnEwJktRfUAyS3EmdmlKV25weiV4SjIrOlF9ZD9dZH19IWUzLDAmKlA4fnssOT9qUVF3PVhWR3QsWHAiLnJaQEFHcmY2X2pRRjFWSWV8QiEvYWZlXjZFOD9qbmhdX3p+KS8xQWYmJC4jYCZ9YSlATnJhUU4jRTtTXmNwdVJoRFd6RDJHXyVfTDVQbFV3ZFdzNlp0''@;'; put 'put ''VVd4dHhRa2pxX0YjcFNHV0lFXjxnYEZ6S3NYa3wsK3U3eyxDKm1ZOn1ROitsfHxNYXA6WCl2YFlvMm1bTiwoXkJoJnErdnt3WntKJUlyRFtHbnJ1WS5IZjlnZEMldWdJVHdaXnFdXXBqRHEvPn0hLlMlWClfLnBmKCMuMnFdR2k1LyNoMnwyJDhhdVQ2VXw1d0pDU2Vfd01wM2pPd3ZaLzRYRU4/''@;'; put 'put ''aV5kPEQ1PytsOXRSMFpVTGB9dWpZKWBGbSRRYzFBaX4mUT5bS1JqaDFQOC40OH1rTy5nZCl0bH1yRXpqaGkxTWFBZl9LUUkwKzgwKm42XStsZks3WG48MGhmX1Y6Q15pdHUwTnEpfltQKHV5PGo/JU9pcGZARWk8dVFhb34rQGIzbls4OUVtIj1rbm0uNXw0S34qZz1kPlowYVgxKWtzYSg5JE5A''@;'; put 'put ''WjMlbTpJRnBGQlsjbk96WkUuVSguLl4pInJjdktwQiVhTW58W3skNXxXJC57Rjp2Xj9zS34+MDMhVHpjVnxsTHkhTntFJF40WyFsejRsXltRblssMUFIe3V6JktdQzttOF1iPVA8YTFTdnpCejolU283LjdTTypBclB1OnFhbDBJMlsmV1ZpMVc8NGhNXWhIfU1SaHVlI31ZQnNvM35OZ15ybCFV''@;'; put 'put ''eT5xO2dlWiZ0NnlTRjhSVkshJClhfFRSXi9FPTMjQCszUFdeWWUrfkJEeFY1NmdmVENsdTohSUFMQH16bmluej03WDVmUiJLTyxlTThzNz9iJSJLJk9SaFBoWW1MQS5KOiR9QSJnKFIjYFZPKTBbYWpTJCRVIjw0VGFod2hSZVZKeWlMVGFwaHFEQiR0bkhLZWZ5KlQ2X0NwbDFjbXt7a3xMdCQp''@;'; put 'put ''e0hfZDtOI0hCTjZbMi56YkR5ZEhVT0RJc1B5KEUxdSpgfCh5b3h4Ki52cFlLXVRkQl0ia2BSM0EhcntNdnx7Ml9Bd19VRShpWV0lemckY2pncWo/InhtWkQ2PD5GMEBIKD9aNHc0dk5eKVZEdTNFZVZnMUM/amQxMEpMN0t2OHJIPH5obFp3dTQzUCFjYUl3QW1hTCJNPG9HT0M1TWJvb3xocjFj''@;'; put 'put ''bytMcSxEQ2dFeUdER0ExWCl2Y3QlW2JWWVhaRUM9Yy5UMHswJixHIzZUO1VdIV0lYig6ZFBVRlNwMFI3MEskZ2NncXJqLmsieUIqLFNHIywqSWxATVZOSUlJfXVKZ1NEV3p7fCtRaWA0SUFmcVhMVzdNKWxVbnV9a34wfE9eUXA3SW1vMlQ0Z2FrUThpPXdkIzxNSWYzdFYzbmwzMm5KL1R4amZU''@;'; put 'put ''VixpenN1QldgKV9lNCEuKnpYYWRzaGtteTlXWEFdc3RyOFVpYlpvazt4N2VoXm5jK0I+Oz8/MUwjS2dCUCZubmFgeTpObzQuJiFAdCQmZ15mVGM+Ki5FTmpEZF45X0lqYUZEWHNXYXp9K2gjMyo4NUAvdy9ndXhCKGt8SXZpWWE4WUIoTHlFSUxiKS4wLFlHSTJzPjJTdXtwcjB5Zn1wPWh6SCxU''@;'; put 'put ''W2FTIXVuRkh4PX5sWkk0JHdnZyJrNVspOV5qKkojT0dHJD9Vbzd6cWx7I2FvJFE3Yj0pb0ppPnIoZ1RBUU00X3UuZDpbdTt8K1spVHtEWypvPFZSMWF9KVlCTGZzZG1CLn1xaWRvXzdjPldHJG12IkIiTjAsVT18UmpXZX1IZFN1VlFQNGEveWRvbU9iU1dzfT0vcTt+X0h8TjBCYE8yZEohZWFm''@;'; put 'put ''N0hsaEJ1WVVLeSNEL3xzW2VPZUxwbmBdeDY5QHQ2MHg5TGBZfkRrQSo6X2tZUn1uPmN7ZGBSS3N6VlJ+KUVnWTw+SmhjbndsdzxRRFdMLnlOKnZHNWhWQixQP1heRldwKk8xUGRxa1g0KHNlLiR0OXc7OUVhTlFTOHZOSHFbaDVUYVl2Uk9qXz9NNGFSJGNMW0dHY25lQVVUWWEifX43eX04NSxm''@;'; put 'put ''U3F4M1BacygkdltFdTZPRzExKnN4bHBBS1VjXTZyeV1pKFEyRmtfL1UhI35+bS9SdnNmWzxIN3AsfEZhZnNPMEpYLFZ7UGcvRE5LLyV8a2kiJixJIiIvLENDImI0ektBdHx+TF42OiJ4MmhmfWJOJUA2enNgTkVtSW8ze3cjXyVJIVEoN3Y2W21KezQrdStEeGJXLEJbfXFUYXU/KDdZekJZc2Eq''@;'; put 'put ''LnQ2Q0A/S0c7QFJUTW07fEUmWk45P2QjOmBCckdQfTZdLnZFJm5Oc34zUjB3NHl4RE93dGVJczdxbFF6Lz5VeGpYUTBBQlVMPEQ+L3NKLlBaZFVIUCo0PyYzNlJ5cFZ6WTpFRV8sciMmP0NrRzEsaClXU2Upcno1RjlfS1Q5b3JYa3A9Lm4zJmhKdDpGJC8jRT5ocVtQZkJySF4zT0ZYU3V4NUJt''@;'; put 'put ''eEBnRSJ8TVtnOihgQy9WOlBqdFRENigkUSkwflA0a0AiU0x9MSwrUVR2c1JOVi4kfWUjZE9wezY1K0JPTys9TnQ7M30pdCo5UH5ZTHxBRXozW2FdZWQqQVVhLjIhL2BNcUI0TDc3QiV7a10xKTcvb0AjOlEoPldkTCVWLkgjNiM/UUArU1NWPWZaZkJ9fn0kVTZSKSI8eGtAfXF6OS92K3NALksq''@;'; put 'put ''UlU9TDlKRzFTP1FKelJKRDc1bmt6Rm11TiQkJWVdZV1xeSlBK1dvbi57XVR8aF5kPkxHa09LJEswL0RRQT9GZn1PQWRyMTBAPzx4bWtxST9MTzFrfVFlQyojYE5xZHhyPSl8XlhGa0VxOldWYlc9KiEsLjxSMDxqYnVJeFpxUn5GK1dlUSpTbzNnP0J+OnpJc1NUaVBKY0Z0U0B5TzUuNCFAWU4+''@;'; put 'put ''NWE7RUtsbkZ3VnxwUHZ6MT1KPlsrSnNkfGpVeHV8SnBAK3VnT1Vadl9aNEFKMTw8LGBacmhSU2gmcSVhImVaYDJwJjg1MDEsbGZeaUN5dWo+emJ1I0h8bFk1MyQyN0w+aXJPS05bVGhOX0lySkRjX2NVSEVRJltJfDU+I1Q/T2BdLGZRdChhclNQRkJoZk04Mnk1UmcvL1I9LDpOZVNzQ1VFIkVZ''@;'; put 'put ''PVpSeCVIX0lMTG8jIWpXY3Q7SmAiWTtzTCtNI1cvSVJBSytJOmtqU3pjREx2cU1rRiwmK2kheCRlPkRsQ21kezFiVFp7XV1AK0I2SSVxck56Vyk6KHVdVXY4YThMcTNod24uIUFsOFhlOlksbjxgUFR2K3deeiErVzxdQ11INzZLN3oqOFhuYCI1cmwld2xVfWdrRkNsXS54ZiNIJkZ6Wkt0JnMs''@;'; put 'put ''aXV6PW0hOzdzJmAoYiNRKGsoUWJmQzs5IyYpQl0hZW80ZnpMcj08Y3BhWiJQJC9HRXp4aXV3LmFfUi9zWHFRc1kkWEM6YDNeWls+OW8sZyozejxUNE17Vmk2X08mMXYhU0U6NHZ6dGppYEtAWllERTlMKUZPOiEqfH1CZlIpRXB7UGEpe2h0UFVzZ3w2ZT81Pz9QWS9lRi4uUl0kOnVXQT9UTXMz''@;'; put 'put ''YzowVi5Xe0dPaVAqeTJ2bjF0WWZQV2hPTktNJTFdYG87OlZUQ0pud1JWdzxLUlgrdXAvRmdEfjM/T2g2eFIzb3UweSx6SFVyTXwyZyJrL0cmS0RjTEZpdWxBJEIze2FtYFViS11HITRlSmpEKk83QzMkMSZ3JjIvcWspZ0kobkdPVCt1TWx3TlFrVEJuLHxoNnpjZ2hAKmgqZXMoNkF7VF9fMXlm''@;'; put 'put ''aTVPXm47MjdnfGoqSzZZVyw8PDFWMzN6VFRoZk1FTCsxQ31+cCFgd3t6Y1ZsXVRIIT1fT1slNkxRVGhoTDRRckRvKVJySEczdTwjKVcqXnxqVmNHRXB8PFEidk5DSjJ2SSE0a04zfGVFNyJkZ3p4R2kmeUYzOFUzSCYvIyRdV1lJTSJvVllCaCR+UWpGaU9fIT8zVFNEW3pKaVg1JU9PMGxscW04''@;'; put 'put ''UypLMVh3aiUsRWA4IkBpbk0/bDBUXSwpMVFGdE9sOVU9QCFjP3JubHdYIj5uTzpudCojLFlgL0Vsdjl8eFVxdShmSzdSPWBwO1Z5dk1OOHs0cV45RDNyXk0rZyhiakpneCI1bGc9QF1YR1BtbTUiWUIjeFBlaDlzdUlJSl8wW3lNYCNrTihAN3k6eXohR2x2Xn1CNEdwRCk4RChfUCJMZFRPODNz''@;'; put 'put ''JjZUQjIlQWVGN1tkWVJDO2pubHJQQTF5UC4rYlpvRSJAY242SUtqayFGd0FYeFpndmVZKkUoKCZ0XnNVLzZPXyQhcUwzTG8kZk8uaGlyKnEkPFVmRChjNURLQG9lMlFZND1gV1pJKGxiW1JpayspcUZTOnRWLFhNQCthcnZOYHxmRllkXzhjcFR2RFMyanphYm8vQ1FCR1txZUs8Z2ZpaiM/W3gp''@;'; put 'put ''M056NkkqUGhod0dRdXY0UkYoPXZ9XXtvNyVlV2NDP0Ila11NeTNwTmJtdVA1Ym0zd1s+OW5WS2kqfTgheUI0Mzw+SFFAKH5tfmF6U2xeQn12Y3klMktVJHtCVDpgeS53NmptQHM8SD1yTmlwdUZgIUlzMFtqRCYuNkhmUT5zfkw/bCg9ZkFQY08xfTdSS0FJOT5FVDdmdmxTYVVncFZpZElrTExk''@;'; put 'put ''V2grJVpPS3xSZ2E7az0+eXttUUcmNEp5R0hbbFN4OGRTIUspZio3Xn52eGZzYUYySGNgdnk6MTBHSmBSeHJ2Vzc2fDB9RkRibXdjPUpvMzleMWU4OHtfOldbcys2MSQ3YGslODBjaFZlO1I8dCo2Z0JNUD1KfjA6RSExbkhnaTplOT1TfEt3fSw2fDFfNzQ6VDIuQVhhciVRcXA4ZVdbeD1sTX0y''@;'; put 'put ''SHM/cnVKJGEsMDZjI0JhZnQ6WDdDNnhFKE0pNEdTfFFYe0dSMWp9e3o0YXJ9dzZIQ2hxUENCPFg2Y09NXyFYTTdJUWUuSSNHIUNYa3BxRi42O2AmfDVZTk9fVkU+Y25oOSg6aUBrL3xQUkssYnpWeyxJJk1hZyxZNGhbYE1FLjxOZU0lTEZIJWtmeytlUHpsZzgmcmsxfklhWGJyMUZLcE02bzc6''@;'; put 'put ''OFdmKWcyMCtEdmBWMTlYa05eNG18dDtDYSNBdTJwbUJXTnw0JDRjInJldWZWJUp7SUZ5LHtZVl5CPE12Y2ZsZVpKVHZHTS53RFA3Oj5CMTd5NSZLTlJOPl43P3ckfUpYOUI4Z0c1OTxZVWxNUGZRUHRvIkklPTw9OzRTakxvd35jW2k8aDZnYSVRRl86QXddbkdCXntnJmJAWzBXe3cySShpVis4''@;'; put 'put ''b0ZfUFtoPW8jVW4oVEpHLGxlIk5sPmpMcUdgVyxrdTBlb0csaVZjWyVKbTwxSGRYZ0Z4aUF0WyNUM10reUlkYV5ib0tDSmJMYipVSl45ey9hUX04VV8vN1BtY1VjK1M0b08hUnRTbldVfFc2T1lrLEtjaWY0c19rWlJdeklnLGI5OVpzMm5UUyh6enB7Zk5NIUJDOyJ8YDE5d0VQcFlLTUZ9RWNu''@;'; put 'put ''PzpgZkJaQGptPUZiKmcpeTN9KXs9d1c1TXJmUERMZCtjYEd4aXk7b08ia2pgczZlaD5OWTFvSUJTdDYpVytSIV9TfW50dGhUNEZ9fHNoLy5kdno2Y3MyV201VG51PDM5TXVeenVgfDd8UE5bP358VFhNYzEpKWMlNEZqSXMrP1szMmpwRkVFMXE8Q3M2RnREZTlrQ2BNfEJ+cCVuaWY4MHZeSTwz''@;'; put 'put ''bnNnNl9SQGNOVy9ZJFM3cktWe3MoLzJCPU9+QCRCSzMvTW5nfHpSaTY9XmlWfTxvYT9sPSMleFJpTF8vcXloMGpWdE0zYEQjJCZSJmMkWjJ0UWhhT0VXX2pZdXRYfEtqTiZ5Z01tIXc+IUhDPilFLEZJZTw2KGJ7X1hpdndaPT9reVc7ejhONE86bTR7YXBbSTdoX1h1Ny5PUzRAOGllOFMuXiw/''@;'; put 'put ''NisySF1EOUcidWdQSDNTalQ3KXFtPGg+Z1M+MHQoSUpYNDRJRTZiWTQlR15gMX5EMDg7Py4sUUEmeXFmRTEzW2huJmhicGl8R3A6SytGSCslblZkYmxYT2ppYTxyRzYmcjglTnlBWjFqOFI+KUl9JGB+OW5vNCEzTWBvWzVDfVc0bCRsXXo2NWs/aj97OSRsI3d7ZHVMKE1COHAiVjJwZVptKXRF''@;'; put 'put ''I0ZCMms3ZUp3MXs/e3RPeG9YcktYPltxKXE2Kj1qVmIiWEB6Ji9jSXcrOnc9K2dfJUcqXWRzLDBKYy95RiUpOjNmNXE/fUxWb243UFd0a2hDU2lIYFVPelQ/clB2QWl4R0lzYjxYamRxOGolU3g6fDF3K1B3PXx3TE8kLHJHISEkZGtEZm0rIVRleVsuJF5IPXR2YSFXdGU5NHYkXT5WZzlvKEZf''@;'; put 'put ''KiI/R05Ge2BILjNfVHJScXJxTmtxZVRZW2g9MXNLWXB3MD85TX1UZEVQT2J9O2smIVhOekkpW3YpPXwpXm4wYHJlJjEmQjw2Q1I0MkJaaUF2N2Bke3JNJn1wdnIkLldoZktWaWRMOXxxUFlqWHZSU2xUbitWTz1saUoqKWw1RGZ1LFI9bFh8cjksX15OQEZ3TUNjVjxeL2NyX1dSKyJIeG9IYyZN''@;'; put 'put ''bypVOSp3OVBdUShYaEUjez08fm1oeitOZCRzUX1AKkJaVT1WdE5bcXlnMGZIIXZFPVMpWUMqeVp1WGpSRV51R1EuaG4xbmVQbjI7JkMyUD1YU2BpeXs6P0R8Kit+QShOMEU1cWdjW19mO0Qze08vaD15N1p2RUQiNXY9PzQ7SGhlbCpXUWlOdClhbVZYSUZWZ09zLkhOZyE4WlczTXRMczd8ITEq''@;'; put 'put ''QVM6PEksfEwqMX5TS2dIZk1Zc3UmcXRQKXZFXnlkaD48JChNamttQ3ZlJjRtYH0sdDE3Unh8dl81d0k+VW1fS2lHJj12MDNZLG1WO2diOFBxU1thSSZKfnAvXzpgbk9tSSpuN0EoOk9gKm4wbyxaVWApVCtZJUJmI15iY1V7QTZELC9TWE4jZzwzUSxWentBJSFJRG42aDJ7MmlCPmRGNFg8WUd8''@;'; put 'put ''RFV3TE9hT1hBVCxiSEN0cVZgaUptdHs9QWlpJE9xTzNaeF1mWnBFbztZJEgxTkMhLCR5VTBvUUteJF9FQ141JkdqOStzVTUjYTFdP0VEVkNuSnppL0orST1AN0RUTDVgSzA2ZXZJNm5LPWJJYlJxS19kb3d9YWQlX2k2PE1DbFdqdW91d1UkV3FdWixJPTxKfjhie2tfcD1oa1o1Tng1OUZVeWoi''@;'; put 'put ''cz1uX1NBeEBUJWF3VS9rQ3VjTXRzbVRIWzFGUXpNfSp7QFldVj1KL1AxTSYmPXpkIVRGcFVnayFUdWkrOylsM0JBU2RwMyV5azAzUmNMOVpdNStoTkQ8bHxTSXpaPT1EIjg1KyhVUGNYSXV3d25DMW9ZKGFCWnw3YF5YWDBuMnIwYUNKdFpzUzhwLl5+T1F4KH06czxXIjF3ZFo9fGhrTHRxLnkl''@;'; put 'put ''bk9dRkJATmJfa1RWJiR6NWBCdiVnbmVENDJHYWxvST8mIWRzXX4yWHNubkxWclkjcT9qLlRDTmchPDp0OF8/I3BeQ2w2bE1CZ30zRHNnUncoQCN8NGdDfDFrYD12ODIuS19XaWJfO1Z5X1lTKmplZjozUDJMK1VyT2xZbX5NOXh0WTBeQkNlYlRhclQzMFFhOi9uMD9wZkNzWXZvdlRDUltkLzY5''@;'; put 'put ''VW4pVSsuXlssYV8/TzI6MTNSQUpbQDkyTXMwLHskX18uS0hwIUc0S199aEd7U2dsI0ZtQ2o6RFpmPjhNTmZfOXBSbkFRP2lOfV50WjA2S3o5NX5MZUMoakU4LipidW5uKU4qOHFJOnx5TlhTdUBmSmZsczM+Y2pKND5Wb0JaUXt7b2UwZkFQNnM4Mi5PMUR2UzdMI0xPVjsudzBASjhMcjwsLl4r''@;'; put 'put ''PGUxXiFQT3FhPEE1YGpKcHEzZ2JbWlJHeEpILzdDe246TXZ3NU5uKXMobEVYQ1l8Nmd6Uz9OLE1aZXluYWZyaFRrLD9WOmBaQC4wQFtvdTx0Lk0xK2FLdX43PjZoYU42NiVaZTpOZk42fGc+fTl1QE5kMUU1SVtRV0d3VHhia2o6YEhtd007OD96ckcsfix2KGZsWjsoPV1sSmQsUD9hTEJ7NFUv''@;'; put 'put ''O3cvOy9dcnAiclZgQEJ4NDYzYzdQKjtbKVFQT08hW1FGT2NLPFdJeys3JXdQUDd2by9PancoWix2VmxRRV0oPFIkJnJyKDs8YEYqX2ZpdkM4S0k+VCFzMXZIdl9yJGxvRVJBXVVyb0cpOjEocUgyejJOcT1eYVsscDRWaHJdMSMlRDZCPzZGInFfeU03MHs8UEAueHAvOV5PX0M/W2JvSGxLdGZ7''@;'; put 'put ''ZkxKZClmdn5uQEcoe3NpQ0dMRVZEQSJwNm43RCsyN2k7RHxjKD9tMTk9fkAkbyZlfjZgOTVdRU4jTzRiPnJZdiJgUVZadCFRYHZ6ZWVNTU9NIXBmQHE2KChKcUtGRTQrLGF2bnh0YV0mTEB2QSpMcyY5M1coRC55bXp3YTM7e3hvRkhCV0hiYCo1aV9NW0Z4XlV8a0xESDwrKilCfX52RzJWdjhK''@;'; put 'put ''IztEJkppSCNOPFQuZi82Zmg/YDpUZCo6LjQzJjVleTM0OEV4dUVxaF1mMVJRSE00N0V6bjE6UXJVbDMyYHokQUcmWGpMYyUjemxmbUAoTDxNYDRwTWAzYEQxZTxgb19mWyM9YT1CSEQkSVZgUy8vZGUuQl47LypANjdybkAvQVdIS19ROFRDYkVrdm1tbDNGMlEmVHFvVilTKlF2JCllMDgwUyM+''@;'; put 'put ''O2RFeSJneERtZ2JhfHhtNzc/L1pTK0ZdfCE3RCRzYFt9UHdzb2FhT3QhQUVFSkddN3M4UmxYcDg7NV5teU8zLlQ+dzwkfTYhRlkxQyRMJDMvdz1QdmswOGJrLG93WixHbFpwdHw3dzJPPCp1WSw+fUZfciYkZktUMClqTFthbzBWRVtWMUc0TH1gTU12bFd8M3REZE5IQTV8a3FLKE0zU2lCfkYu''@;'; put 'put ''TDx6NDtPOmJROXZ5Ty9ibSklbEQhL3oxbnBIcyNgZEw/dilZcVt+RVZYOlIrMjV2LmBNXTB5Mnk4SWs8NW5TLHxuZGh4Sj1WbCx3RjlzajpfPWwrPUN4T1JfbFBGUVNxaG07eVgxeGBZWHpdakcjeTFXLEk1dWIoI2NCUChQakxZPEUmZV9+LlhXZDZOJGZDeCFjZit7XytRUCpPYmxWZyF0Yz0j''@;'; put 'put ''YS9YITl4T2FhTmVhSE5WViV5N3RDTDhkQnBxK2xGcSU8MzI5eGA+N0U6NUY5bU9wNmJmSn1jZGIhcGx4Kk1heDZaSXF9Ol12RnhVRiR3N0B9TVZTRmNIITBkNnNAKmM2eSkxW3AxLkE+S3B4IihJMkU9fTlfKnxuczVRakwpfjE+fip1WkpAJF57QW4pTClZX2Q+K3JVM3JTeXt2NS8kV1ApYH5I''@;'; put 'put ''OGVsT3VHYmU+ayU5JltTJVdaWmUoWSohVT54OHNgV3hJZylMcmZleDRaKF82QVVrRDNCd3BrUE9VWy4xc0xrcitfWHpwOmpYcjhPX1M2TVlqbmlQSVQkWGRZREo0NFtIWUQxcUx5SWl9PF0vUzdjUVBFNDhqO2AxMzohKCJhelMqdyZKVUMuNXhiKDxlfjd8bWZRWz1bLz5jeT0/ZnVXWkVEPWN2''@;'; put 'put ''UysuSFdgd11jJSE3Vld5eUcuTkoiR0Y6Yz44UWkiSTZMblssdj5jbXF4KkVNemw0U0JwRGpFSFI7YnFRMD4wdUZlRTMyRkAhS1d4M1tKdlBnc1d6JiQ2czdWU1gsOihZVWE9d04jRCJ9LEBhMlo7PFA1T3peXz9sRygkeGJCLyVDXWlOcCZFdy9+RV9sIlFTflBHXygrdjZBPzh2YUF4Uj9uTDp2''@;'; put 'put ''K1VNaFVnNGdTKH58UWV3NWQiVWdCZWE3e0J3e0FxcWlHOEhsXkMicDxFNmFNbWslRHRJN1gpdEp0I0I6S354XkZla29kVjImOkZLWnsoN3wyMyVyc2ZlWkQiZVIiVUp+ODpGQFYvb0w8cTQydCQrM0lTPWg9Nl4kRUA6VV1DbER1diY8Q0JTMDdyUHI2XmBxSmA4LGZHVD8lKV9XeGZ7Ikk9V0xe''@;'; put 'put ''an44b2lAYnF9el5Gc0g3bj9aTXkmOHVTJCRVNnRjYEhfMHFMR3pjTGh3MTw8UzNyXmJ4eHhhWWdSb3pTbWZ9Zzc1O2lzRS5wa3g4ME50X0d6IWhnKU1fI0Juc25yWWRIbS51ZGo0cE5oNHZIRjlTN2YsSj5EMlo/X0pMOkQ0PzNeP0VeUENNazl7QlgiKG0jXzkyKl1eRSRXcDU3T1IzZUAzMyEk''@;'; put 'put ''IzArflpVP1cmTzFMazc9VTIrO1dJLE1jb0c9XUlGUHEkWUJTbF01PWl8VEIzJU1XNyJGSmh+OloxLG8ia2NrMEwxW2lsejh2bjFmczFxekhYWjVWWTBbSzUmWmkyPzx7e1NpNnJtIk9kcUV1QzkhRy53SmVxMTBBQjw1Kkg5ZCNCLzwjUSFYNlduIXYpOzwoX3g5eCNfV1tLO3VJYjsyWGxPQ0g5''@;'; put 'put ''NU1nc1M0Y3YlUFkpY3RWajk3L3lWJnRKLDpvbiJMbTwldUI0NlMwRVBkRyxrNFAyazBaNTQrKjFiVms1VkNFei8lNT1fenE6NHVMPDQ0R3EzdGZTbFtJTWZUaS4+aiw+c1RaYTdIN2pycFRQdH06WjpvaHhARDtNNjJOOzQ/KF8qSWkkUHlqVEJ3Pjk/WCVtUlQxYDBuIkxMd3JmKT9nd0hNTTMy''@;'; put 'put ''bGtNbDIqNyN+XXlnOVFeSmBgfnAxM3Jlb3A2UkZ6YFd7I15Yb35eTXdnWUN2Jl5pWXg+SCh4dlNbaW9+JUUjfD8/bHFpOltrPWgkU2YqWHo2Vj9tPVZ6fjJjSUspdSUldkw1OT46dVNFIy5BXThBMCE8K3EuN0V2MyRQNjhAOURYNXB6b14jdX5JPnhhL3I2S083USJifXJwMy91X3BVZDBTVztY''@;'; put 'put ''d1dBV1heSVJ1V24wWzZ5NjFwZEx3XX5Ccn13Ol9JT0AiTyxDUFVLXSMhcFVhdEJJOURxPWU4djRGQnpnMUB1UTlgL1dqRTIrVUB3STVXUUV0RG42P049aGh5bk9CTCpbajoxJUpRQmxsdzZIaGElJFNmQEQuJjFINkZ8QWQxOz0kNU5QUDVFMGZuTmJffklqNXVeK1RaNG5HX1c8SWRQd1NaNjRr''@;'; put 'put ''InZFbEV7eTZnbyFrPVlyTnQwTCR0ckVrfj9Cd1M/bFBOVEpkcU52YmlCOV5HeXgjRl53fX5ufCxhVERrfCgkM3R6K3cyMnslfkJIdkZ6bzA/XU15JkRAU2NrU0l3S197ZWkjOFRlYnlWMXgmWlBUKjVwKkJqcEdQIXw3JER6e11rNkRTaV1AZD1yOGA1PnBEeW5YWT5YWDlSaUo/YFQkTWxXfjF3''@;'; put 'put ''SG1BKyQ4fEZhKml0TkJ7PmExZEZFYVhrOjBDJl9Xd3UkTThCSCNkYFRXMEJNV1Fmdk8/UHVfZUhlOTtxdl5QI3x9MzpiO1g4STpOc0RycHh0NmVOO29zdHhaX2hOKCwwTXs4PmpjdmZDYzVAZnskUUEwRmlnVWUzWmRgTlU9XkF7Q1Y1XTJgeDd6d1o9WzBNMl1nMVZNVmx4YDd8TjlhdnBGYn5p''@;'; put 'put ''Uy9CQmg8OT1RaGA9N35ebn4lNld6TDlyQyJfOTx9XnZhW29NWlFeQ19mV2lRX3xdJChmXUNoVl8oSzhHeGdiWHx8IzhLRSUvZn0rVFNkOyg/REFFVDl5cSZUIyNGLzJfN1UrYX0zbi5oMD09IiFRIkUqQikyTnFtbCVRaUNJdUhEUFYySW1qXnh5OH09ZSpXZ3ExOVcuPj8qSyNPQDAvMClDXjNL''@;'; put 'put ''bj9gcndpfmpIUVBARUlpe3N7MyU+bjZ8eUIoSk9SYX5qUEtpM3ZhX0FSJExpVSxbXXt6XltrK0hgeEtXVUw/MXBbPElLdDd+QjFbNTcwJlZ6VEQpfncodTdQJk97aFBRTG82fUklYSVAZmx4JG0zelFDIUxPeERCdHdnRH4zO2wvT0AuNDI9a0tnVlk5dkt8QlRfNDtOZG9yZjpxKTorPTZ6LHs/''@;'; put 'put ''Y0dNWip6S3UxLi4yRCNzdjl2UypaKXFqa1twJkd2fkBzIUZ2fmVNRkg/cTdmPHxQWXNaKjRGOn59ZCEmcl9EOX5oUnw0aG5VQCxUNiJvPiQzSnJ+RndVL08haSkwMCsyc1NnWHBheT9rVl0qNV1zTT9EKER4NWdeXk0qZ3BgOHdMKkY3elFVJlg0fHxAMGBrdDhvKkpFQGMpLzU0V3oxQVFwKCtZ''@;'; put 'put ''YkVFY2VPY2smdko8cXxONSsobVArdjgqVSpoJj5dSCVTbEpKV3laOCN2L1pfRllseG45aCZyJXx9dSY8ckZzQnMqPUtSLnJ4VVU0d1YwXXRQcmFAVSN5MnRsR0tCMnhyKjBgb2kvMWxuQFRDU3t7aCV3JVpGey9ISURsYVozN3o0SXckSC5zdGBgbDw5MEViSWIyciQzRGdJdFhkQUZCdWRvPSM1''@;'; put 'put ''e0U/Rkk/cGdwNilvU0JqNXtTY04lbi9gMihyNEI0W1lhRnArR35lOkEyXWw4Pi9KYGJmR3pqRng4aSkleWZVVGglO3N8MnllJXFwPShkazB9I0oxeHY8M3g3RyVrSlklJVdzcEk1TkJUcURNQWA7Mj8zc1dpI3NUay9uLHY7WT5nLHppQ1o6KVRDRUQ6ZEg9TldlSzBwd149dX1yMTdzVzEoMUJ4''@;'; put 'put ''WEVpLjx3ImI2NktDfkxFKixhMkRzY2UxTDNBJHkvIm9XLmUkW1ZhRWduYTQjO0tkImN3bVdwSkVpVTJLMkZwTCZ4cFNOQTNWNWVlQn4+RkteUyIuMmY1KVZuaVsrfSopTi9pb21AaXhNfnhOODpCSWZARX45OXcyVDM5bWhfRUlSS3ovMz10eHZ5cFJALGY0eUpQLyYhb0tBeHRbbH19cXViZkRD''@;'; put 'put ''SFFAQyFvaXtgeko8el1mNFRdKjVrYEJDQHRTfjt8fSx2NlIuJWh0VS81UE5MVTljVn0uaW4ua343KkJedz5lSzp2Rl13amtuRiw/Sz44Ol1OVWVtfDJBSz0+ZjNjTi8yIm9kbEFofFFbbXVnOll2a2swZGguSXtbSWJAMGtAUVZ6Z3V1V3wibV8pL1twJkMwRnk+US9TPjdLY2hefExoKjI5RiNk''@;'; put 'put ''TF9EbXc/WkJXLkBVKlV+MWZdV25VeUNZanpNWHZaOlNZW2ZFLDByU1F3bHZqQ0B5VShwI3JwMTBIP3B0Smtab3poakQoKjdvezNYaTllU0lHKW11IzM0R31od35RM2wwPXUxZ15LaEFXMiowL0Z3VHBNPEBtNGR8XWRWIj5JPHF6VTxrNXx2bVRWey4lYHt4c1dbPXxISCE/KT5QaT4lX21gPnoz''@;'; put 'put ''fUx7YkkzZytRIWBtdWkrMHMsN1hDYHpXXmEjQVlDRih3LCwmYGJAVCtsLi9tJlQ6XWReIntOeXZFIWRzMkhTbzomdyZnJTMuamZ8SitZW3JCLFVtMEN3dE1xKC9PblE+V0lrPkdfYyw2ZGo0MEM4NmwmOmdjJlVIdUBBZTBqL0FieVhFYWBSSi5lPHxZIXh2QnR7R11hN2EvIjNqQy96fEhtJipJ''@;'; put 'put ''eD1xJWdzR0w6P1drdlJacmYvVkNFOjJoKCxva2ZlcEN7X1RfZko/TmchdkdMZyUqK1JhOEMlZUdHOkB5Q0Ysa0QwaFZdamhqOXhJRX5RUnBWemErZkxxSjI/Q1I1K1dGVE5CLCtlcDBNdixxL1lWbShUW1RxeU57JTB4XjB7NFcoYFU5VDdtKmVpQTZyM1Quez9OLHNDRnVpMmUsdl0oRlouWEJG''@;'; put 'put ''K1Z6dmEya3BhOHxqYDtTRE4vbVF+JCZgbCt3cy5QfntfcTJuIzM6cjswNkNMT1VSMDIoYzd9fVpeY1BJJiMkMHMmfjskeTIpV3VxSTxFLEl0TXBPan0/a04wVzlXbEorUm5ZdXtbZWcpRWFsejJYVlBTR1RAPy5vTEQsNyRCZG4/LE4qImU1YEV3I0A2eF5PRD5pQ3RiaVQpSUo3QGAyZi5ebjtz''@;'; put 'put ''WU9fbzYsQTw9bzpZNz9kcS42dENRcyIqamZjOmVgLzg5OUlkfjJVTkNscmIuTFAodXEuazFSQUJwdEY3ITRCSVhBSFVPbSQ6KzFicTRHYihzQmNaTSh8bzI8JnE1ISI/LDBhbD1VR2tHSHA+JWp3TV9ZcCg7cUVpT3NwJSJNY0pjMXo+O0UxS30lJn1IcyR3YnlFQkkiWzoxRS49TitrVncvRzo/''@;'; put 'put ''fGltZyZaYVpRRSI1TEE9Tj5ZRH18WShUU0U1a014STlHK2VuYWoxJX1ySHNCQl1HQjsoTkkzRiRoPkkoayZ8OzljYUtUI3xBazdsVjJ1c1VrJGxKS0JQMWR+SmR0LGxldSkyeCg4fElhW0pnVTJjIThycXNbI0oxTFdSKntFTWhHeXpIXnZfdnI4Pi5FLkFzIkUuJlohZUpNeHFgeVFFKVYmMTlq''@;'; put 'put ''UVJuX24jJUsodX1JMFgybEU+X2AqdlVXWXthQnEwIztdbkgrKy4xa11fekJZLCo7YXIrQD9vZFg2ck5NZ35VbnZrK2AzSGc7MzldI0Ria1VNREUyQ2J6b3hgOHciUilWUXFQeWwucE9kdTVpQGkoQWpTKCZHa2s9clNmIVV9JUk3JkddXyJnZ0d9L35TQXt2S3lTX0JoNi5ZcipxQDUjNDJ5TWR8''@;'; put 'put ''YUQweXpkKmh0ciswZ2g2PCorLmpFQXxYJEBfa0Z0UHNbNzlJSSIxa2xpKztQJSpGcUQibG4pLkooQkR7Q25DLF4vYCN2NiYjV09UJX44KXVZYUYkcmdEUVFRdHdgKT9eV1U4T0o0aFI5KiIqQSNsV0J9Q3BQam5ENmRfVThBZkdkUCsrOEdJJVpZR0Y7Xm8iR3ZONllYRUx1SDZTdmx1dU9gVm9e''@;'; put 'put ''IXNudUcqdSY5UDVmayR1YmNoKl0wWX5jeDx+VmszY2c6UilbOjcxJT5sOltuNztvSS5ZWV56cHZ6TEhKanx6OVssT2UufEF7cGNuJmNxcURZMCVqb3hWS35mW2tML3E0QH01OSwsQjRISn5kRjhXTGRoZElaX1JpUi5hS35OPiw5KzEhek5IM3Uha156RCI0MDZVKW5HbnJLZHRlZ2s2U20uJS9F''@;'; put 'put ''Yz8pbTE8VDFxKnN7REBAYkpHXUMxQSMraU0rJj12VyY6czhxS0w4Ymg7N1ZaWGFjRXFsT0B5eCN0endWb3h3YDlgMEtVNjpCMW4vZ017byp9cT4hRD9CVXlbeXlLUEhsIW88ejkwc1pbXlQifnlzR2RVR3B+PTZyLEAlN2ZGLzkkeVV5cWE2ViF8QyxYfGhsPXlue29UWCE3YD4+S3NFVnVveisq''@;'; put 'put ''UDIvQCF3IU9SaDpdS2V8bkRMN2o3IWJTdi5iTC5eenhSOzZmdUwzM20rSlshU3VAUG8lQXlyPnh2b3NMLz1jbjojJj1FWW84cyRgLEYoc0wyJEc0ISIvTDxNUU0uYmUyL1hKN018ZGNAV3R4fWZRQTx9Iy5Weyg8Ulh3OFMiM3xhS3ExUnVScWh9ISlzSUxuSkxoVG1mUS95OWRpQEdTLnJyciJe''@;'; put 'put ''Znk8cGZpSHlyKTshfXUmLDlQeS9LfS9QVXtQbiVDIi5KKFc4cCUma300WDpbUT5lfl96YC4iZVUyYSs1QHMsRUYwZFosKj54b3VfKS8ra3B7JnA8ODBCNz90cUtHTVNSeGp4LmxxMX15UD51OS8kPjohdihTXm4uNHl6LkI+RkFRRHIkbiReQCpyZ1p+UzglMEtuO3smcmlaby5BUjV5alY/fExJ''@;'; put 'put ''NkgpYV9bYGwkKXNTWGkvRjI0KTBaUktMSzFFKHdWPXglNFpUOGYpXyx8b0l3TFVXVzQvc0BiZikwWS4qRkt7fWtxUyIwaTB5fU9lJnJkKXVDMlZPQ2hfaG5pJnQ+Sl0mITlmdywwXVc+K2s9eT5FWCViNHpTSlM2Ml9vfX4ySz4oaT1rS0ZiQzc3NFRUSCNiOXg3RDh9cnh5Zi8lRSFtP3wsOnUx''@;'; put 'put ''Kzh9ekJwLkx3VU4xYnFhbV0+PFNVaTRbVGIpa3N1MDY4PyhKWTMqPnd+b1o0OiZXOTtCNi53ZDh2b3ltLjtRVjElZVRpdEM6dnAvNEEkWXFWRlR2JXlIMSYiQ05vKSIuJi5tWXlXXUUlVllyel9lN2puOkhHKV1nMXtpZW9JeVl8bWdMR2hnb19qbnY2W35OTlRVS11fOCN7ZnY1PzwuWSE0bH4q''@;'; put 'put ''ZW1Td201VF97ZkZCNithMWJNLiNaOHR6YHxqd3JwV3wxMTxkP1ZQSzdRSnNLJFA1VlZDczRmfXZPaHxsZH5WeT1OM21CfH0pdFhIS3Jge2FOcjBdKipqSV16Skgpa3VgNkw1SHE3ckxQbXB3NzxIblZJeWFrWjNrfmsmIlRidHI8MEx1RVhgeHhrQnRvaywyKHFQI31IP1ZrVEIkLng7QngzKysx''@;'; put 'put ''SG9TKyt8cD4mWko5REhJSnJBdEU1SyRxS0E8XmVjLjIvRDIieDY7OX0sY01qUWxGM3MxbXhVSDx5azltbEJVcD9WNGwmeCZCNUEmLm18TXpINldqPy58KjlpWypRIzc3UFhpQjMyai5dcXE2czhbdWF0KDdbRWZhLyU+JTsyTD1BVUJuLHwqN35IOTR5V0xuVzhDPFAiTCRdbzNJSF9ZL2cxQldP''@;'; put 'put ''UThARmFTfnU2ZkVlbHcjME43O2BlUCNlS1h9bDxwT1hnLHVtaSYodEJsMHIhVF53TEVDUTsxPHxIaStCJXZvfV9RfmU5Q2o3R11BTlB2QmclWztCPldzT1VNL0pHdnplfUN7KnF2bmJ+OENvP1F2cTdCeG89W1lsO29IZl5sc2gsND9+emNhXzUmIVAxeShoYSkoVypFME48fl8pfTFNUmVKLDEi''@;'; put 'put ''K2t4X2Z1fmcsLkZDYUhXS2gie0NRLHQxTDBsXk9fV0ZGQnk7a3R5aFVrYz1YPS8+RkVydWguPDtFITpqJUF6KH4rVDBmfH4lflFjVFgvPmlUPDJ7LDwoV0guNGlXIUdwPnFUI31BYkQlezNaXWlIXzsrck4zNj5gQHRWdnMwdjlPcC9jRWh5YFk5Q01wdS98RWhFc2EseHJ4anFtZFdQSkwjWSJP''@;'; put 'put ''bzw7T0o8YXt+cSRxNTJCX1tpO3VwcTFkKkxgY20hcDJHbkN2dy9tJk5SNkwoMUlxfG9ufmlmSnxxbk0hRm87MyJPLiJSPURmdSJbSiJ9N1U9YCNmOmhAKVNFc11OcTtvL3BeNjhiJTpDRSpdRUJ5am4jPnwqekRZJT5mLmdZQVRYajIrfTBjaigxVn16NDd1Ql4+IWdPXUxpfU4rbSw8MzIvejUq''@;'; put 'put ''QmYjfTJXP18zWmE5JTsuOyZjeEBiIUp3WDZaKTIzM2l0eip4PCRMIyJOPWUvQy4sdzBpTzZ0bUVrWUA5aG5TKUNZPFd4IVE5SlBFcEwzT2lxRz1XS3FmVHRReD0lKXpIb2MrLjVLTiFwc05aS0F4eXJ2MVVHSlVZNEFwdSg0Qz5ZaDZaUHYsU2B3RShzTTIxPE0rIVQmc0JRV2ZNTGZJP0FsJld8''@;'; put 'put ''JWxbIzh1OkdWWDJ7SDFFVk1aT1dCXmt8UT4/W3QmXW9kWWdlUCNlYUxDLndKbExiMk8kSVQjX28vISN8YVEuaCJ0ZjJgbk0/UTMoUHlgJmhBcyRxSGNdVj5nY1VaSV9KbDd9Tz8pZnY1KUxKdXdJPDcpPzNVSyU8dCZYSDdoNFpEfjhbNlJtMUQzQUx2PnBWRkFMUkNyQmdPPlR2aTNKJUQ1TGtD''@;'; put 'put ''NStQNnckRT1OQjQ8dShrT2tDWk1vNEslRiJ5N0NTOHtjbDY6Kj9NRz1haW5qWjBuUWo7NlFoeTA7NFZwITtZM04pVjMrdngsTENNVGx+cnlnej1iYEZ2aE0ie3NoeyZMLDk5JjtzJUxqJmYmcHBHZysmJVVELnIjMXt6ZjI7YyZ8QVJsZTQrUzc9dmM8Q2NmaUpZQ2YzVl1COTVRPEVVUFosKlVh''@;'; put 'put ''b0xDKC8lVCFwT3EsSlpsMi9aci5aLikhfTYkTV5ARjhHMUBpMTJ1UyhMKGdBYyhMclZ0UzdTc0JkM3ElcFFlel9APXw/eGBNbjJgMUgzPS5jd1ZAKC5KOEwsOVVYMHtgej5kemFxYzl7ajFxRyE9SEQwLl5DX0dkYjV9L21ULCUoVS4ldE8vL1cyOnVBNDc2Tio8LCs5QTZsPDg1ayVzPEosOyNS''@;'; put 'put ''emZpKjAuRDtbUSVBNnRfWEBZSzF2bmZFYSlkempVI2osQ2EpZHhmcFBHXjR1d0lZMjZlNiZxQHpIU1JlSTh6OWwrKSZAbSFRJXp2cSw0SC4/K21bTGJAd3BGTTxGRWw+MGFlNmNnLCxIJiV9TW1KPnI2WUlmOz9ZIVlNQG0hbEF9Nm1bNFRiX1ZGU3chKzh2WF5mV1pRLndjSmpdQ3c4aSFSUmtv''@;'; put 'put ''eGdNR3NnTjEoQGkhWU19JD9iWURLM2RZJE9pdEcheEcoPSlUTkN+dFN6bGY5cW9afHdGTllpW2h8SytOWkUpQHNWR05BfXkufFsjcTcoU1VhIk5WTUN8dEJ1KjR4VVdyOnBgIiwxSjcqVVRZJWwhWj5ScmxvVVEmYkYkTFgyXyIkOm1deV5bTW1KdVp7NWg0MDFwb11jVHRHeG1NI3hJSHswbyok''@;'; put 'put ''S3pZdGUkdWs3XUY8alJtUG1rKiF9MX1XKWQpfEtQS0B5XU1wSVZYMWZLY2hTV3I8ZV4xfmVkQikwOEdNdDJSVEQ/TWIyYkVEYjBTQnU9ZzRALiN3cH5Mak57QndwM1JDJCIoQGdiLjxNIVZDXjNCOVcpSHFrPVkhJj4kO2FqdCIxaGAjcnh6Z1IjKDxjY2lZKk5vWkV3WW1nNFhnT3dtZjQzRkxY''@;'; put 'put ''OytacjlALGoiSmkxQipIUV5VVjFpLjxRPFF1fXAzQllnbH0iayJGUmVaX1hPIUJAInJEL3ZJPTY6TGllYGcwTlVRTCxRajlAVk5yYC52Szx4WHxUO0AmVlZdZT9eakpmc3J9UjNLMjBTT3JZSGYran1GJWYlRiRgXmlJWDd1QmlzfVYzcVohOH1EZkNBTSYqIjslS2w/PWkkKkBgQXk6InBJeSJB''@;'; put 'put ''RFczcDhuZUpHRzBUYlJPNCsxIytHeTJpZks7UjE+RFUvZFlnVkVTfXBALGVhTSg4JkxuKGlKZFImN1ZMbik/OmZxVn5uVVl6cHoxdDx2fD5rcy9eaygwT0w+P2YkeVZ6IUJlUz5JOnN5SEpBWTdfJT1rMkBQaVA+bjM9JThALm4kLHxEa3lbQlAyWz9NVSlBNj1fWzIrSEBzZnpPZExgTEMzTE1h''@;'; put 'put ''aVU1OUZLUjF+cTVCN0x9fT9NMTVKYXFNbl1XRF5bYjZ4SW11ZU8zWlRpdnMpd1tZWmhMWz9zPEBbbGdCZXxbPj12RDVEPl56YFQ6Q1IvflcsV1guU1UjOSZkVWFwOT5INGppeF4kZ3AzSChZP3xlW3Rmal5YMWc7LCNaXjlWeGIlYiNOJW0rMnA5bmA9RlRoLCUpMiViOyx4aSxRRktqWnJPam1K''@;'; put 'put ''RFBzXWdXZkslcS4xWz5NJEldcTJDTSUiP3FLIyoqaG5VclQ2eE1wU1c3KzBzdX10azxTIVU2RFIjMTFifmpXT2RDS0U0KFZ2MjZzRWJYa0Q8TVc0XjYpUzFeRnZybnlWXVI6Q1UzU0QvVXBKbmN4SjZHUlcsM210JlZQZX1Sdmp8ckAsak5rP2xVc0hTTnpbe1ZzZ3JbWy4sRDlEOlBfU3N4Mzt4''@;'; put 'put ''L0g6MUtYJH1WfSxnK1suYE1wQk0lSDldOWA6KSklbksoO3lwJiUkYjFePjc/cl87PDJATGYzSXlEJUImIyMrXnFSaSQ/REp5QHhDdS4sMHNONCRKc0UuRnddJnxhbG1TTSE0fHVPQVpkcTgwJi58QGoyS0tJWU0sIXx9UmFuPnZIZU0jaUhkaj9gcTE6aj51LzRXY3BaTClbanZMWkZkbGhlNUJZ''@;'; put 'put ''RzdycEZ2MHZ8bUx1TF81clApM3kvb3g4RCl0ezJTQzpOUzJ7RypjUy99eVtPXVEjdnZ8PCkmS2Q/K2w9T0NlRlgwenpNX0QlKnJJezU/TiFEWmB1VzBFVUVPYzFCQFhJa2RFLHJ1S21PdyhWUmcrPUNWdDU7aUZ9fCw7ZkNmUHoiKEFrQ0tDVXw9TkRWaktMQzwxTis4Qn1MckpfP2FlTXxwd2NO''@;'; put 'put ''LzBKR213KVdkQH40XWh5akoxR2NhM3FqTn4lakZKdTRNTlNyUSNAclAzYjE1LD1FKip+fSlvfFhjWHNzP2RCKkVwblU1UUJyQ2Rhd2hLMzYyXjBkJl4ia0YhaSpXb3pERmxFXn5YSiJATFQwWDNGV3MpWWltK2ooUTZOIVdfXTVOIV0kMnp5KU9AbyFnMUFVZSxdP0tpOGNwNH5EM0tLd1gxPGJJ''@;'; put 'put ''e10lRyZhLC5KQFdqSzYpN2o9JFgkeT4qI2o4ZlFiZXAmNl48RDhvXS9NP2EwMCUwWiJCaF4lVXEjXXVSeUdXfihPektCMlhnKGZxOGtDQDxifGtoYi5UIT1xQW5ORiZzKnZLUzhCRzZoKWpWUWdYdnBVOjR3e1A6eWEqNUZbKF1ELElER3JoXygzSUAlQVchcGFWPjVxK2JiNzN0ejQ5alFeMjU9''@;'; put 'put ''L2hCW30xdXtLYmByRyw6eWZyXzZUNj87S2pHXjhXd0FUQDowKldWaCguWFEiYFcvJWtMYC5jZzN6L1d6bSNETXVkckRIKkZ9W1pwJVZmMTA6W2ssYkBfc1VCMStNZl1QQS9tWX1AJC4iWEVQPVJKQld4YjpXMnZbNmNOTWFBVipXeVhSZSt7fDkxQSpOR0JzZngkey8lWFIpOXxOKXpWOTBNKkdy''@;'; put 'put ''OlVAYTIieThMQyMqdFtWNCssWjB1d0V4PTMzT29nU31Oak1ifS9OQnsjTjNBKTtNQ3E7QjYpXz5GSUk5X0VNVkNCdVRqPmVBQWNCI2xJdVIwZXFdW2dKS189eFt4Zkx4VFdrMHVbeHZMeFRPWUB5PTl1eHxCek09Yk86ViovUDV7a0VOMk0jfHxZVS8pYGFReEY6OSRzKy8qdntjMSNzWURnN24q''@;'; put 'put ''aT1FM10/cFpbOjJeQmlseVlKX0NMaXZDPXBPPkEmcjx9ZiFYI1tnU0liIWMiSjsoMisxaUptO1FqMyVWdlQiMmw7V3hpIkAoNzVEeTZvRVNueG41Yj98Mi5IcT1vO3xOWHo/fCVSPFNxSnQkOiM3d18yb1BTSkx4WCVUeikrYUMzQixuTGh1KzMrY3dvZ2lJO01yc2N7ekNiRmpKUWBXMlVXITB1''@;'; put 'put ''R1FQSDJ1T1doa3dEYl5iXUdIMj5PfWJZa2pWTWZ3Li94JSoqUiFISU0hfDtEPEdbL1RqTiQ/WSY3JlNrezMjUmVITXpMYGdSJlc4SEJgOGVPKjgvRHk5QCFrOGBUZE5Bb1ZaKmxFO2x2ck1iMj5yMDFTL25Te2txQCkzMDFPfFBaaHEzeEpCZGZxO3s8Y1tlJldnQzdQNT5ERllORm5bWUhiMWhQ''@;'; put 'put ''fXRRRVF4Mml8VHRmITt8cVQ6ZHpzS14xJXdfQzRMcXUqSUdyPUtKaCg9PSQkPFUxVUBGdmMsJmsmfWYhN2tVJlEmNHtxR3wvM3w5aHhTek5yOiVJYiFyIyNJNDcqeCpSRmdoNXlZdF42e3xIPkZyaEEwTF5VfXpePXlNQFhXI2tTekc2T0t9ZVAqPXQ7cmFaNEsmX0EwLmovL1sqWWQrQkxPRiVY''@;'; put 'put ''R21SIypgSkZ6cWhMMGU/SDFlP0FANUlFM2kqPlpjeXcuRFRiJnNQcXdbeGlYSFc7M0xeTTx7WHZOUE5VQkNieiFlREgycE4xJFlqYXB2Z1gySDszSFJZJHV2S1pQdFM6JUN1PDE7MFdCXyZ3cU1ve1EpZnkuS3U8U3V0VWVmZU5aNixXMHpIUkt3OFBQT3dpZC4oUSZtIkd7OXgsQ0s7JWMzN2NQ''@;'; put 'put ''bUpoTEB1fGkjezcjXyV9PCV7PEk6WXVaMC9KMj48Z2MpWilQens+NiIsOV5GOVVeNCwuJSYwRmovOiFjI2hfJEg2MzBTeiFiYmlCbGkuXkJJej9VQl8rNEswPHYlditWeEJEfXN8VEkjRjw0KjdVY0xZck4qPGEod0J0cTh8KUdRO0N7QDdCLGtXfkFGaV1FMnhpTypTL1ZmbGJ5QHB+eDZ5WV04''@;'; put 'put ''RmdBMTNiX0IlJVp7RXJuUXpEXmdQTVA1NGw9dU8/Kkw/aHYyPndAKGNKdyU8LnhCOmNtcCNbQ0hlVV8oNUV8aEdjKWc0VXVocn4uREs5UWt1Z3JQK093KjZ+YD1bUikpS2UzXmF2YzZddClIKWFqcGdKZX1MZGh6QXg8OF92fURhbX4zWEJXLHVMKmk6aVk+KUk8ZiFUSVdOW3c8JnE2WTAkXStm''@;'; put 'put ''Z1l+ckI3IS5EOzopMk1BTzt+e1NwdVBMPjtCJmJESCpRNiohfmdKcXVeQUs6RSlsZVB6PHIiMjhCMl4uQz17dTU9b3BNOUE5dFEuPUNaWjlfVllqNzFFXkRRLk5kTGc8Q2xkWDNMSDwzUWNObFU9dVZackdxUVVOUndrai9QPjYpcCNiIjlIbCRuc0ExfSlXZE5LMChafj4hb2RYIVJqO1pFTWJx''@;'; put 'put ''eWcqV2lHMmpEJGl4L01XZEdSX3MxSmZBPX40WCNFfVdjJW05aFM+d3FNOXNiJS48LCE+XixpO34yS0t0b0NHKyFbTzllImN+Yj8mIzBvb0MhTm9WMWpOSlMkTHI7PVsmKGp+W0QvTHxWdVJgZnMpVUpkRTIhPCgpOlBmLjlPSE0qYWlqS2VmVWZURm4wXTpQalphcGxxaWh4cFEjZXMpSHdYSCxP''@;'; put 'put ''d0VgXT4wP2c3Qi8iQjRCI1gpPnVrJkUlfiZuNXtNdyZgIURyNCtDJlRiQiZQd1pdfGpILzksUzcyfGVmWSZMeFhFK1khRT0yYDxKX08xIi99Vk55R3lwQ1BXZDYxak8sWS43dj4mZDZyKi9+TjV9V21RXVohODZsYDtZP2E/NW48LnpPdiouW1c5bzNhVl9iQmVmSiNPKF12MXtyX2BfJC8jSiVk''@;'; put 'put ''eF06fDlSOHo3Uy9yVkRPSzhFXk5SfDhhKFJsTDBoZmFkZmEjUkYjbCQxSVYkc1lHZyZFNV94dGF6PDFHQklCeVguK1BkWiE4dmFPe3VfQndiXnFdUWpId3A5bWAydWVMcGteV05Sb0ErPigxP1AkPEYxc3x5YWprISQha3JQYXBtd3l6UkRYT1h+a1hULHAhMGRQX2YmSWh8LnA3LCpuS0p2RllR''@;'; put 'put ''Q1FWRkx8QFgwdSIxPHhVdjF1Pyt3YnpgRTJYVClDI2BPN1Bzcmxha2ozKlssbVE6MHAkKk0rWyp0MysuX1tEYlNFcSZBd3FjKVpCQGoveDAuZTI9XTB8U31jPykyPmRUPCx1aTh7PiQ0W2ZuUzgpJkw8QndQWzE/YzhBd3Ivbk0hTFB+fDlrYmNFdiJoRkdWRn04OSVnRy8hOzR5OzdxJSU4eVp6''@;'; put 'put ''TmlrbFlzUzZOYTtIQl9HIzUkQ2VzTEA2QFU3fU8vY1dLQU9Dd2V8LGNAM24uPCwhJS4lfmFeajVVfDxncXleI1hiMyUveksre3VoOmk+KypDJj5VITpUUVZBKU5MdHVjcXpman0hL1l1X3J6PjlVWFRoUCNiMUZ7d1hmRDxPQFUoMjAkQ2pePyZ0Sz9pI0hlYGVgZStBSmozOGNoKGV4fDpYclBq''@;'; put 'put ''Y19BOF1LP0dCMiJLJCZjRW46SSombjl6I3U7XjcpeU9mQ1Z5bFJPWisqRU0meyR4NmVJfTI+TUMlK1BLcykxWlREWXgoI25FQk9BP1JTRFlaVmxFaXxTd3BjNUJhRzdyaE4/WGByZ0xxTGl1cD92XVplb0ROI1JPJlhhPDxqa2pEUCIrb3dHZCYkPkNoImtORkIqR2FEIS83ZDlMRX5bWzRZZlZj''@;'; put 'put ''MmF5dUNiUipKbEUwQmkiMClrKTIoT0JHdURIR29tYFpgbk4oXnwofE5tZ3JWKCg2PCZPKG9LMWRSZmp6OF5OY2k1X2g1eHZZQDtLVTZ6YiF2UVY9RXRCSU9INSwufj5QPnxHTE1hbk1IfkNFUEdkcWhEVV4oRlk0SyZfPkNlcUcibEIwQ3g/cEwjdnZIdzBHemIhLnlieVchWzc+Q0N6JkZ0TWF5''@;'; put 'put ''eDdrOj59fHhdNjF6X3FlJTVRUkY3XW1uZ2xGc2NVNClOekQrOXV4KzIzIXE+T09SU283KE5UfGJ1TS9KRXEhXzlvOll1QD0wQD1TZFBWVjFGS1g8bixjYCkjPGJyeFBYTHtCXmEzLCpARDo3MF85YDVCQFdQVmpUXUIxeVd2MkxrQFdtRjpuRVNkNFg3IWxsbE9sfmVWNGlkOzk+dnlYPDJAb3Vn''@;'; put 'put ''LmVGZzduLHIuLCtaYCY0OG1GOiFQZXBISik2NHd0eF0jT29AWyZLLiQzRVp9d1QoSjkyKjNNQT42YHBVK3hGeTxJL2BMIk9dJUQveSNDPV5qRTg9ajsrPkl1LnFXfSRLRnl6InpuTSwkS0YwejB2dUBzVWBONnZTb3M1PSZIVEw6UCREbn1ALnJWKVdtLFhsQE5FaD5xVU9hXnhsUntfUT9RMFBT''@;'; put 'put ''LjF8IV1RX05aLG94LFI3KlssO19iMVM4KUBwPVdfajwsQjRKLEE+W3NMLll5SF1gPE5uWGZ5MTdgWCVZQmNITCtWQjc6WW1iQGQsMFsvfnFkTjYqQG9ZZywwWy81MjlDYVdwQGhRNEJuK01dc2xiLFZaZnRRfC8vRXo+Q2Rfc2xIKDU1cilxOXZmI0ZJPGR5RGF1NHphQHU7VHszWHUlLCs4MFFl''@;'; put 'put ''KnBaVkUqdSFsalNvTHpOPU4zaGp0TE9EMG14RGJeLEEuPHk0dHY2PmgqdDdLLzI4OEsqW19USD1OZGZBSklRfXl7a3c+VzImSSxOe3ckKFR4Z1U8ZTMlMU5PJEtYc3VLbFNMW3RwWmhyS1MpPHdwSnc2W09aPT9oPFlnJGgqeFM1ezl4Z3MuO3hSdWxaKUJ5VCQkXlElRzVMOVFAJlt1c1Eje1ku''@;'; put 'put ''WGNtSVIoNC4/LyglOkwwQSZxcEZoKFcrJC5UeyxVUiNLR093aUUxQj9WV0MhJGwuUEM8JGBoS3V4Pkxnezg5Y2V2TENVen5EM0ZRVW1hYC4rMTBfNnk1V2YrLj5pS2RGY3psPU1FJUd2MTRLSENlSCJTfGB7YkxJVGsiSlspa29OP355WzRraGo/eT8rT2tBVUk5OzdIU0Bub3clJWdtOTpeajg2''@;'; put 'put ''KmcsXVtBK1lqa1B8Kk8xTVR8YFphOHk1fjIpQXkiVCNSPE5JO3FycXByMmxvQVNvUHw/JkN7RTI4QEo3cSZGZkxMcUQ4NT02fmZ+b1VNMGpoWiJEVFZMb0tpbHFXMClBeU1UIlkiKGhtIW4lWz4zNXNUIXZzbiY/S3RfXz9YYkxJIlN1Z216flRdaFsqTy9oSy9pS3BSdjgxWzx+UGl6XkY7aT9M''@;'; put 'put ''T15BJiNRcXVmRF84aUtYUWk7dFIpakxTSVsqJEZtOyhkP1BFeSg/REtgPWVvLCFiVF9KRXhYOndPMU1UYi9GQyp4PGB2WWosVXlPZHpyQ0JbKkFebShMbn1FI0Y7JH1WT15yWGQ2aWlQIXVmVzR9Q3ZeMFk7KihGfmUyTX5ITEZ1ei8uViR8eSosLzpJbEN0N18sPDIjKzNxQj9ja0VobTtmO2lY''@;'; put 'put ''PSh2fFBLb2xSc2RHNX4lbix4NXdYdiVgJiM2NHZrTiM9cnVad0FZW2t9YGNmZlUkMG5mR3N3ZS5OMXpJd2UvYGlMUEBybk1XaEI6Kl9QfSZsWVMpbTRFPGd1dztpX1h0TG1CeUxPdDdmS0B2MW07IndkMSllZ3ArQFFVZzREJnpsOWpsJGFQNEtySUxoR0IuTlFofHUvL3R5dCVDOnkyey5CM0lw''@;'; put 'put ''OHBVKk92OVY6akU8bW8yJEJvU310RkY3PDEpNXV2UlVTMSEsKGRfMiJZbEBjQ0Q2dF9OIWYvWU4/JDlzQVE1Yitje0h6SGklclMjaikzfnE9I2lvdVs0VnpSUTo3IXw5TXpUbj0vVyhaREZDMnopZXpqbjJ+JTp3KF5XbnksXXBbQH5mNW8mQEYhZGpbSDA2IT1lPSh9X3A2Mm9KcFQsU0JUMUlZ''@;'; put 'put ''TG5tJTFMIXJmKmpXLDxHPiQ7JX1UYixeSVcxdCxncDRXZDlSeW1NQnZkaiIkdCRrPWpgem84O3kvLms3ZWV2ZzpRRmEybC8lJDVrMG1NUj1lQjBZdm07JSlXbSlVLFV8LEdtMCM2SmYvRGppVDJCKH1HWihwJXt8PSlSLkdSdlQ7dWdePENaZVZIeTIkWFNhO0NGRjgvcjxqV0NmWlosSjUremRJ''@;'; put 'put ''M1d2T18xLmhsbE8qRnw2O2UkIU9sUnxiQTZMNjs8SlhgMXoybWBQYnFqdFJfJShPYjxNNCEmPyQicDJFPS80UzQmQzQldHhxaTlYWU1hbGM6KX02cE9peiRWPTNSPispME9McjlWNCRPYlN3XShSd0pafiVmdD8rUHpKKkZvU0BRXj07OCJjNigxOyxyfnshZjtLYzhSRHBkZnpXL0xnemExb35U''@;'; put 'put ''QGAzVyZWSnlken0/ekpNUyo/T2lQPFoqJCZEP089MWFle204KlIqYX1kW1p6OG04cExzaipLUFtocSs4XV5qOyFpQWNUKHFSZTUpRSlFNVdsX0JOd1hseyNWSWU0PDk3NTtROSFoJTF5YzklYDwzTTQ1KishYDpGOmBXR1cwcjdwMX5UOjJqXjBxMyMrSG5XekN9MjZLfUE3NkRzbkllQWM1Ymdv''@;'; put 'put ''MmQ2IVtPVDR6ZTRnNDUvWVB3MHUzSX14QisrMEBVdzV1O09qek88X1U5P3RePUY7aThJZTlWO1FMJEs6dFUjN1IvMTc/PXBvI30jXWUyQk06YjUzLjxuQ15wXn5hYTV8ejsmXzglI1AsZCE8TVZwJFc7ZFlTUV5DImFraUFdOCV+NVt8XWguQ0MjMFtsPCllQmN9ZDRhQl0zVTxRb34pVTJwNXwk''@;'; put 'put ''X3E5bkh+LyglVj5dWk57X3pTNXUzITlkNmpAPmc6WD9PUzRGXT1Wa0tSdmxnO0IjJjwlJFBOIVIpVCNCJnF0PURbezZiYHtmcnNWOEZRbi4pRHZMS0VGc2B7JVVeR2UkIktkP2hGRj5wZSJiXkllZiwlTHw7N05JZXJiI3thKSZxRX5sWTxLNXApOCY7OkFSdihZI0shWSVIfnhxRT5ZOVZsNDE3''@;'; put 'put ''SkQlTU5VOilsUkllRnRnRGs3c3wvaGZYPi94WClbc2xXI0Z7d0pwLFtxM0M3NC5wKWdwenFNZ0VYdyJ8V2dUMFtbZmhqN2dvaSY2KihHRi5UITZEb0V1dko+M0ZFbUJtazt4WHtndEhUd2B5Z1gyXiVEJHsvNylufm1VQVk2QiZfWzRNZmhpeXphOyE2REEkOEksL31kKlJlLDAsIiEzL1BfI1JO''@;'; put 'put ''RVQxKiM4Y0pqcm82KENLaFc0UTlsL0NFTnpvImx5TUNNWWRaUjssRkJfR15qLGJDeld6dyx3JFFofDJWSU5EcUtPUllFWFNoXihdX3lwPXRyQlkjYzY3ODkrbiJeZDk5cSQrKkhQPVcxbXAiX3dAaDhTVzxvPS8lZFJ5JDwle0dmLikmTGkiWU1qfXFXO1d+cixbPDJrUDsvXlFDcztXaF4+L2dA''@;'; put 'put ''c2BaS2A8Uz9NbWA8LzwyLExnMm1ENVZqQUI6WXIkKVJJPGg4K05jQH58d3M/RS9AZC5zam8zMHtdS3ReZW8oWi85aF8/TSFuVGo6fl51Sm8lVzlCIkNdL3BMWz9VelhFdEImbjY0I3JzayZDIisxcSxfP1cuKjNTMHEsXzphWEdHLGIhZT4iSUhuND1aUHIjbV4vO2ojbV52W2IhKms6Zml+d29h''@;'; put 'put ''RXx1SD0pbD0vKVpvTXAlYG5CYSkrPHNXflE4VHZKXWt1dnpgcXQ9L3liQFc+fCV6O0pTQkNqOGZyWGI2UmNnZCgqemZ8SEc1XjgvSj95QlhIMC9VbDk4Mko8NklpcWh7UnVGRzQ1enFwPk9qMnxyRCQ3MiErSDwqKyE/ZjNCayFeQVR4SWg7Xkw5U05Adjg+cEZtUjZycGJyQ1ZCVyxqVl1FNmxx''@;'; put 'put ''OGBXTlBFQ2NkaEA9cl5HaE8hdjBFOkZ7UjJuPWApXU83UT5LIn0yWCx7KkVgT3VbVkYmLDlualBbZnRRUFdqUHZaMDZrMUJ6fitMZDZbJkQ3QGNLT11xTEVHdjpYYD1GfDl5cWord0hbcHkrXmVgW1QkS1dzJGMsOFJORU9zcXkjUEB6Q1pOe21ONkZBSCoqRzN4K2NsNmZZZ0dKSno8MV1OeGl+''@;'; put 'put ''RCZqJk1CbTs/RDMoQGxiQ2AhL3Ihez9UZkhTbksmY1NjTGBPdkc8aS9wWD9yMWlzZnVbK3F8emZZV0lmXiZUVE9BQFMySjcmOUtMOWYsZHIrZlY7U1hiOFs5U15Bdj5gTGlxeSg3K15hUEYpIlA8YFhzYEFFbV9xeURQTmlZM0heS3BGYldVayRLZz1yakwiU0phaFE5bFAhXm8zcEYqPyg/VkdF''@;'; put 'put ''YEN9Ujw1aSVROD0/LkguSltoQ1o0PHIwM1Y5RE16KjZhS3F9RVFQOFhlcncreDQ6UGIkIVo5Zl5TQ15EYjxwQVo8cSt+ZTArVl1pQ1gsOHEuNSF5JkYjdD5fYVZKWDJvL1ZCWndFMkt8Tk5DXks+JjEiT2EhY29NbGx6ZVRZbjEjaXdpcm9Zal9FKUlkPzNlS1lrXjlpTn5ELDR+UXZvWmxSJi4m''@;'; put 'put ''dD1wQEUoSlEhbn5ja0dlQ3NoW152Wj0zLGdiJFJac1sqaFh+VkYsJGRobz1GUHo8bnxRTEMxeVI+X2dtPyliTyYyW18ze0VgXTVfPypDK3xWVUAyNnYzMkomQ2dyVEY+fCJLW2pyJFtRLEw3K3J5bnRzYmdqc0g9aCpzSkVaSEh3OFQ+akohbStUVDhAVmlodSpBKzBTV1VORjs8LF9NWix3aG1S''@;'; put 'put ''UjdMZlJIdntabVVtPC98OXt0ODtfIWozMDxKdXpJYig1PUl1On5pO2pkMDBHZHtkMXY0c2JjYGlbUDc2KndLTWprR3clM310dEp5Mz1bX3FzN1dDeFl7XSwhcTAzSyJaVmtkeiJqO2khJiJxTEB5XjFGRTl2SGJYan5zdXthc0lIRjExfE4pW2csZCFdM3VWMlp9KGlzbjFAQWl3akY7MTo7Kkx6''@;'; put 'put ''I3F6OmlUIz9saXBYejdePWhLSF9YZUQiX0BSTHptZSkmVGEpOn5ZZTgucUpbe2FiVjRWYEM8aEZVfiNANWlYPWZNTlZEP2dzVjQwX2B6K19dRiM1NV9gWVBkPnEsUHExLjkwSllyVlY9alZBRyJHdUBCYiE4eWx0bCFsKkR7a2RILCYmJU4qSTJoRT8wRCtha0V4Q183fWR9KlF1djoleHBmOnlh''@;'; put 'put ''e0xPIztVV3dbPFI+SDRSPkkmNy80dGVXRi4iJkgmfV1kJHJzOCoiOF03Z3BZWCI7NXZKTkMjfntnWyxNK3Zld3BpTDVsIU8sWzBAWy5TYWd0JUtoe2A9clUoLiEiclUoYSJdWyN8d1BXW2pvTyp+QFpvL31MeDgxLk5FMngpQDBSTy5mNF5keio3VjJyJkkvbFt9JTw1I3dIe2lgIXJROFB0bEBt''@;'; put 'put ''Zkh8VFAqV0xidk00TUxiWF85XXNdS1dBV0BqTkhQcjtSUXV1cUxLITk7QCVOcCw9dS9lLDI9XSQiVSNDaG9DU2BselpGeyhjYTNVTnV5VCE7eUpIbXk/dS9ZMmVVVnpaTVY+Xi9xK11UWXgyeCR7JDRaRllgfGhwPlRqXk9lU1ZYLHVRZyZTKVVaTVZYTUFNZTE/ezJFNEFISmEzMilLcDspMT1W''@;'; put 'put ''ZGhGaWYwdUA8a2EhZU5tUipefWNATCNSOz1AYytINSh8eSZYcTEicntNYlNCJCNXfj5VQm1sLFdMfTVNeE5OW2JTeks1a19pdUhbKiQqNUtJNzZYTTdQc3ttUT5YbmozQkRIIjtXWSFfRnh3akFWRmV4SllodV1MaF5WOFdfMytRfF4yRFA6ZFR4O1cleTssc3daVj05ZGVzM15hYzQ/LFN6PiVo''@;'; put 'put ''ImQ/UX5rJixuOFhrfVluYTY9PWFaYUV8WCE2cXBHIi5MK1VTTTFpeDFzYEQ/YkQ3Qk44JkciVnM/SUFHalU6MUcjMj07UkFNKzB+NXFIRGl1JmlkI0oiRjEvbjw6OCErUTBzd2dGPVR2Lyh+Vm1TL0VFWD03ezd1SjdzfHk3IW8wYGIhfVhPL18hUm9NRXxLI09GVzU5KDBxZEtvWVhWK2FBeGhj''@;'; put 'put ''JiJdcWVOfGtxZ2NTJUVlRE0hUyN5WDUpblYuekhQVl1mIXQ2b0I8MFdHQWBPdSx1VXI0YXwwPTBbJUBaW20wdUwwcWtOISgpK3NfOzVFLDA6Vm4mNmNhJlRIK0pzUVljKGY1O2M/b3F+WiF6fHh4eyJlSiRCXUEwWGNIbCxXPFsxd0Y2VzJoYjZpOUxwdysodWNwNyRVeGdRYFIuIzhraW45Jnpg''@;'; put 'put ''SFlWPnAwTE1FcCUjNWh0a1VTdGlLUi8ka091WDp3YTFPIiQhOFtFbXEiV0YwMUMzU3M0NTJxRW94QCN0O31tN2gpM0s4ZWEpe05YSilALGJsejJxRUF4NjNvb2Vhc2VeL2JyQSNzeHFFMCohTT0pNFE9XXttYjg1KVNpZXJaVnZ4YE5oIVdUYElOPW5ZOmY9XUp8M1hLO1c9QCVrTXN6c2U8Ok1+''@;'; put 'put ''YlBZVHVaS3JmNUxifF0+dGkkO1htc3ZNYiwxTFkpXm09Mz10YWl+JHZ9ZX0oO04oWXkrLCwjbn0uSG49YkZvQTN7PCQzS1t0LlhaJSMrNUdOISxmXkw1RTxibyE+UzIlNSkrLmI/dlNFSTlXa0hjUFlUJHg0Izk7fGsvSG1OWDJ6altbOCFTOG9xM0Q6NUhHeVo+WjU3VUhNaWtyWF01Jmp5cWxF''@;'; put 'put ''bChQTStRZ15MUVBpW1FnISIxLFcyTmxrODExTXJXSUR4KTVPNmRncUVLO2JGfChNV1hndiRxXl5sUCt6Z3dWOXI9PFR3bkcvTV82MFB9TD4vWFVzQ1suTXcsXzdnMkQsLFtEVlNaSlBIcyoifXdQeUR9e3h3S002WDtJV3d7UHlOb3VYamIyWkZLKklVa2EySzd5RVVlPCZbJSZjSlFuI2gqe3E4''@;'; put 'put ''SGZ4U0lUM2xdalp9OjVTYE5SOjVSSWdhXWooS3dQVyx7RUxCdmkmV10rVVl7TX0xRnopK2RhaWpLKCpHIUJZQDM/JllxOjZxTVNSXX4/WGZESUtNamZgcUghUjdrfTUrRWlSenovaD4jOGEqVmkoODZsP106M0FjYmk+azJUb2ZITyhQcmR4SV5FZzRbdUsudGNjKGJqamU9W04uW0V5OEw3U09e''@;'; put 'put ''eVBue1JxR0VKRiUyW243MFU0IVJQOmtMYn19Xi9SLzFQMlolV0phI0J2eEB2a21vJWA0amZ9aVRtWSZifD4jOXtWMERleGZCU19+QkkjMndKVDkqTExDaDBNRG1gfE94dnFNSUMqWj1jXWFHdlovfnFnO3pSRCF0eVpuUDNLS0w5NEg5c3NmI3ZkKFBVUko2PTdmT01GN2VQX2AoS28lV2xtSzts''@;'; put 'put ''LmtkQzAxcSo7TDwwNl1LImpEbUpfbUFZZ0NUMiJ5VXpYRzxTIXEwNmZMPFNfeCRFLE0jSFdsNFBnNDIrV1JSUT1LbHdgSzp1ajxaVEskaFdvakpGR25KQlRsSG5EYSJdZD1ROlpmV203c3QqXm5HOXQicEw4TGh+OUxlKl9bQCQkKTk/NmEqRCRwMi58VmxQdjtjZSUkR31YbDBKRWtHISF2NSl6''@;'; put 'put ''K2RtOHUuTGFEe1JOdVZmXT9IMyZkTix2NypQJEdZcDA7WURWdlZ0V1ZKSi5NUVs3SFliOzUyKjwxOHhgLyZVb0NsRzRCRE0uckBFOmkkIWQ4dC8jKXgrOj9oQDZNL0ZfNUB0Im58SyNXaD07Q30pfjB+KlJNUyJMXTp2UjBwR3BASVI8Q09aKHp3LjtQOzNndFlAZW59IVtQMUwoTlVfN0xnaU5h''@;'; put 'put ''N1A7Q3pXQU9IVDJDV342TCFYT1QvWjtGb1hgWTNOX3ZgVyo0IyEqKFNqPmVaUURmb1FRdTxReTA1dUx8Pj5OVjVYIilHIURvOV5kc3RJUzJaNTkjezxgdWlFZzddKkVsWjlSKTZiTHFzWyIjOjJpZjouamZLaFE6PS9MZnFpYVZAY2JGYCkrX3NicnZqUjJkPFg6On5XcytzKXoreWc9MExARyNL''@;'; put 'put ''KSxCRU57K3JZKitbfkwsYE4wI3ZJVkVPJjpzQTBAPVV7KTkoPU5ZPFtHXmEiPGhJbldlYktpWW9DRS5gPExQZiVgJk0yUUl0SWNLIVVJdl80UTgqUXFJJHpneEppUFNZJTx4OVZ4YmZsZmVnJTJQVD1BfXx8aWttMy9aIjspUjpkPyVjQElNaC9+VnV3QEVLdzpoMmcvdzlQZDZjIUlmZWUwK1Bi''@;'; put 'put ''eldEWjgzN2psRXQpR1V5dyV4MGNpWVphZW81LmU4UFAzVGIsPyFNJiJ3WmtaZyZnUytHekNKQERaPVBvNFpyJXwvc3kmME1OQilLWHh1fkJHO2NhSlZzOk1GJV9Ya2ZmfEZAczd6NClqcmZdIjQ4L3VAbyVEVXRqT3hjV0xaVTZfY2c+OWUwUT0zPTkkS05+NmVpYDRPSUlob0RXOlpAZHx4Qz9L''@;'; put 'put ''bzNFOVgmOE1QTyheKCJhajliX1AwQXshMSJHSGNxTyQlfjU5Vi58TFp6TTlpLFNeTn0ycHtxMTllIUAyT1pBYCp3NVdIST00YXdCQzUrK3kkUz1mQDBxZ0l6PGJscWV2OnU+VylDcF97eEJ9LiklPW4mYHgoRV5uY28sbXxAW1VdPkszUn4hNVZkdnQje1RYJT41ZllZKlZuMT50ekFlTiJGV0cz''@;'; put 'put ''WkEqI1VBZEJSOUAjTzgxYG1eZiVjaDNNNlhaWXB2NXgwcU1gT3tPPixycmtxJjR4Ni5hcykjOUtuNVteWWUlPH4yImE5YUI3an0xXns9cVokK09rPWs4PEMmQWhrP3RtIyFScC45RHF0VzQ1SVVLP2E8U3BfP1hgbXV2dV4qc0pfcCslIk9gO257MX01c0UlWH1HK3lYO3NUXlMyd1AmU2RjcTRE''@;'; put 'put ''LHJPXnR7TlFoZ0N9L0JXVkFFMXpqP2VXVjQ8ZUBpXVZQVmJwanRyXk49V0VIPTU0d2NeWV5KSWJGSFlQb2g1cmUoNHN6ejJ7dWd4U2Y4fF95dl8kMVA6KT8hODdtVyNUMzZeckpObz5JSjBaN3cuUTg/cS9AaG80KkAwZm8pVTY9cGlrLCIzY2gqbkFHXjplWSp7elUqcSI8cSVJMlUjQyNHc0ky''@;'; put 'put ''QFJnaVBTVGdfayhVb0cufC9RVypKL2w1cn1+Ong4I1sjfDhieXZLPHBBPn1tLHRpdiEmalgsVDljP05mZ28vfk8iSWNpNFs2Zm1lNkxARXB5ZTR7OHhfKm5vUmdOdEdgYFB9eTVMMF81XUR5Un07c3BKe0R0VyJKP1EvJmNQI2pdKkRAWD9eQD9TcGZDYD5Idm4ia0lPMSwwLCN4IWpqJCopXSE/''@;'; put 'put ''OXF5QT1rb3ZYLEd6dmguTGIpeGM1S1VBJTNUdFMvKX19Xntwe1teeHlFYT59SjBZa1dyKi5eKFd9MC9nakdKTDAqcSpeI3RiZzZjMW5oJkZaUDtLKFBCKnw6UXZIWVEyXjlpVH4sZz1IV3ZyTykqd3p1U1lpNGNiUEBJeSxET0ZQUj5vPU01KStLNHB9alNUMTpnSkltP25QT2QyaCEmfVBUMW1F''@;'; put 'put ''S0dJenYlaVJpKlJvRDdhdSozYUkjdmk7d35hbSpKQytVeHpQZmgpfTRlVXhiK0heUkJ4WWo7OUQwNWs9PFNPRSp7Qml0PkdGNSo3N1RINnU3Six7KjNESH5UTyRhKl15cD4vL2h2dnxfNFMsXjNPQ3x5Oy5OWSlhOC95KTYoRlVEaC8qb1FCNy5mQUVDYGxYRkMuTEBWQ31sOTk/Tm89OUohbiFa''@;'; put 'put ''fEdVUTJwb25eYDhxSTJ8WVFBT1JpWSpxOEEsVD1pcnspWmFnZitvYENGMHxHYlRRY3FZRUlBSC5IQUhRdj4zS0N3XnppXUduMkIiRnIsY0A8fTVgOldMcl1WZkVeMGkwd05CWWttazZUXi4/Vn5JMiIvMTIjNm1iJE89MG1iJE89MG1iJE89MG1iJFRPSFtlYWpMQ0ZqVys1cns7aSJjXmFBdiRr''@;'; put 'put ''TXtJWWc+bWl+VmdyfXRCLGVMZD8pI2g9Y1A1OVZ4Ulh1ajhpY1BBT0JiSl06W1JCXzpsbiZmcmdFfj43VzlGLkUlQ19SIWooeVhrSW1ZTXAlPCJydn5JMiJ3MXJBZV19bjo+bkh1NE86ayohfVt0NEB0Njlmcj1mI15aKlYhc2xVbnJscEl+Tz5SUzw8L3RPQlQuJVlyNDtTNmlYcFlVO3A4Ql0k''@;'; put 'put ''RVosSjJ7WnY2ZFIjSGwyUDxEVFliNUE9SXkpcCYzZnY4QmpMa0FtQCVOUywqfVQqT3J6QkB5Kz9PdS5ga1JhaUN+cEJsWWVjU1Y7In5ZMDZdW1NjYXJYSVt2bSx2Ty5aLyx8eTRAekhiQUp0Z0ElfW5WX1U4OXA1WCMqJmFWP3s/PFtDKC5RSUNIbEwxcmhUKn5MIyokSU8/InhSKTNoXmJGTH02''@;'; put 'put ''SH1ZIWEzZWwjWTlQJjU9Rmp3fnA/Q2t6dHVeSERQSUI/RkMkMW0sNTQpQE5Hd3JUaS9kdVt5flckdklednBhRXZ6WVIhS0JHMkl1TWxSSndobGNSe0BPe2tWcXUvRn0mOFlYaWNGfTs5XWZybkwiYT9nbGRHMDolX2MuT29QJTAqVWI8WlF5Z15sJWlAKGVJWFVOeFBgNTl0UVN3K3JxWVA8R1Ft''@;'; put 'put ''dnoyYUQrOSgsaHBCcGkqR0clXVYqMThfcWp1N143UEZjdjg9VVkkVHUzN1FaOHUmQCouQmNxJjVtQjZla0twKWJDNG9HYX5SY3k9eikveW9wJWEpQkhfUnwheGpaLl4zMUIsSl8jOSlSckMiPUNCNWVycjtpb0taVWkqKHp0RExMOUMuYmhmVE5RbkRXJGoxd1Q6U2gybVFNKjg7IzZGVzVtckJ5''@;'; put 'put ''Wz9faytHXW8hQWRmUlo9KFo8V31+WUlsRjtOOzE3ME1uS1k5a2x0JWxMRkwwVXl8SG50bVE3JXUuaDY6KypYZSg8TElBK3FJW0NmZ1RDK2B8a31wMD5hJi8lK117QS9vUHh7UlpgeHglIWpeXWBmcU5oXWdWJSRDM1smQGNJcV8+TEZdZChraklLWlVpYHdyRXBmIXdZQWNeTC8rRnFvVGJMUFIs''@;'; put 'put ''LGJmO2JZPGpednVkXXIlUi5JRjdhcHYqd3YhPSxKR3ZuZHd+L0RzJWE+TDV0dEA8VEAremNPcy57aVEvRUVbdXBAW1RrbUltak5obltGdVZVKUg1I0haTEBHdSUvfSw5Z3opLDpvSGJZO1orJEVwY1BWSmZ4aFRxWV0saFUyelJTZzViM1JReEhuTUcuU2pvKXQ1XzUwSVNSPyw9O0Y/TG5ZdmhR''@;'; put 'put ''dERrIV03KmdkM2pedWR0c2Qxa3VjeTMxbWBycWF4TzN0eGBLdk4pdysvPWhtXTNJPHBSYV8lbyNjKiN8IlVVeG4wRUY2NylbYSlTXUdldDwpVDJ3LihkYy5FJmNpNmtsP3AmJT9bUmRqZ1FOTUlOenFuTk9SSGo2UDMpWytAMHxBfmh4M1JTbzspTlQpcU5oQmo0blROJiVgOmpvW3BxS0M1bnIu''@;'; put 'put ''ZFBIT2RjUCUxNittMyFyak95QGtaXV9AbUxKVWUrJC9OJlU0I2BtPWhbSU9kc3hBV25DKit9fGxOfSFNSSFjd1k1U2VwcHA0dCZgP3NvVG9VdG4jezRRTjEuYlczUnk8aWB0entsU1g9YkpaSn5GLnpRO2h8Sl85akM6NnpTaHkkbWpUUW1yeXZ5JHxmQEp3VVlpamdgbzQjQCR7e0JaLzpQM2l6''@;'; put 'put ''LHNJSXVkcmtkJDEuZFUjd2Jne29ubWhVW2l1b202YVRjNitjPT9uNl03WnlBV3FbLCw1eGJ0eUZPZGhHTm97UTMoT3JtUlRCJl4/N2k4Tz5kMDZuNUsub25tOE59YU4vR05VOWlCeG5vUEFPPGs0ZSFmaF47JlBZeXJncn0xN294P2B4SD9JOld9Nyo2PnIpa1E5SXc2MTcpTTsvYHdaRCImZlpg''@;'; put 'put ''KjdKeThiUEJxZEdjYXE2ME93WjVVX3U4VyFPcmZHZS5vUi43aVhCSDchL29MTyluNjd3VWVEc3F3TEFPZCN2Y0RCTXx7ISZ3ciN5OVYzVCJWOk43Li9rTHMlPC9HU2ZNIS84TjNlT3VXXzJjalg+WFNqRCRBaixTP0UhZzA3NUIubVNSMl5bMXhwYF8yfHBoSi4wYFs9eWBwJDVUZTJNIlZTeFBT''@;'; put 'put ''UFVoXkUoWT5eeWQzPnQ9YGE0YypGcXZeJDBqWT17XVFmRmxCbmIsPTo2QnA/OGEqa3Q8SFNSMyRRSW1GTWFMJFBiKUphPWNCIndZPChDI0g4Jjh3WXI2KDZaOmAvJGI0KzM5PyZYLGo1UHx9amxjNjpFbk9tcnklIkZmdXV0RDwzUkIhNGk8e0hwc2lVRnxgKW1CZG1rbyZrclJ9N2Jma1RRKzNK''@;'; put 'put ''X0k6VFskUzUqRmgubU14ZUlsUjd2RiJPbiIxMTdYOUouYFYiP0IzelJHTyY4dkpSbmxrWD55WCl5JGgsYl0wVGp2V1hMJCRaNFtPUSIxNzZLKEw5RERPUFpiSDNSeitwbFJGOjRZdFpHJGxCTjReQzVdOX18a1FKbG9MaHBXbkRdME5HLkJteCgvWWVxekYkYlohdn18T0cvYlUhbktdcmxOfSZf''@;'; put 'put ''L0tvdiNEeCFeVDQyZnxxNytUT0VxREZaIzIxUHpibHNwSVd8MSZDNGJkbVI5SVVkP0c4Q0Q8Si54V3o/VXRPWDZ6LFVGSi5HTk1WeHlWRVN6QmxSYndKSkdoSjpVcDs8dVA0T3pUdEQlMS9UNSpfd3toLnk8fDw6Ty9oQUojJTNsaj9zJU9aLEgkZWEwJWU9KlV5fENqMTI/NiVgVEc2WXh9Z15l''@;'; put 'put ''Onw6Ly5fJSo6K1R+Xmt1OT9dREgreTVGb0tgOj5IKlV9QkxbW0EzWHoiOT4rPVNMUFN2W0o9cD5DOFpBJE5hRF1uTnRYdHk9RWdmQHd0L2pnUC98JnJZWzpNTXAlVSR0IUE0MG1XPXVGbWZxJVs1MD1GeCZCdEo0RlhqQnxoUWxBdHRBNGJwOVZCWGZocWcjSFVLdC52QmYwSjwpME5YcDFYQnhp''@;'; put 'put ''UmQoQUVBdEVhUyYpR3x3cHt1UVAvK0VTPmsqXlNqeE5tZypaezE3YSNlailSVkh1MCgqQXMvNGdTJSFQQnl1Ll8zKyxCb2JFN3hDRFlYQisxdDA3NkdxXnFSVGpba0JLVGI7WzwvRjgoUE52cVh2XkR7S3E7czlhPjdAJSF8KGUifDJxIzkpbjplTXV9Kz0oIXVjNn0iaHdHcSp6Ijw0b095RzFP''@;'; put 'put ''NG40PnFJbnY0WWNKOm1pMHtMcThVPEszJH41W15XVG1FKDBuY01qNHNkYzc7KSpLXl1QRHo4XXMzfWtBPGUyckkiaDxLZSF6ZC4rcEhkbGY8NzZ4Sj0pJSZSbCJsXUg+fGx4VVU7L0dXYFI+Jl5gViU+fF4/Qys8aEgqdEdrMCFvdUZ4MnMzV2NJVDl2cjZibXxuN1UuMVdeU3UjMl9ya3NhfW17''@;'; put 'put ''UjN6Uj1VN2doJmdrPV11ZDdnYm1TOjFMLjxHdmZnKEh3QEJYX01tT1cmOmk9Rl9iVndkbjUmKi9OVGMxMUl1Lzx7PF1ndmk+Lz9MaSp6IXthez4zPHkpO2chfGF2SmUuekolRzdxN109LjdQfCVzOX41M2czTnREa3t1WmQ/VkloY2thdXFSWUd5Y3hqT3c3LEhGbn1tSndCQEYjdCYrdTdIPEJE''@;'; put 'put ''PTFUfl04U1NQODtrN315e3BIe0tOS143fWBASFl+cnU3VWkiVWppS3Z7blA0XWVYWDg4In1RZj5FY3g8MWoybXwrY0xZeTJBV2tqODE3U3ZrOGhVKzFjaGI6Nn5DdUg9dSlpXV80SHc6LnNHMTJvYTVTWUhSI3cie2NbSkVpLGlFSlVWWUpQV3ZBJDdMfFI9OXJMeVhLYCMzJDlNXV4yXz1wSzpQ''@;'; put 'put ''Zz4wZ3VaOmhaSiRwTl5pdSlqI012Rj9GTzBdezRMSEsuXnF3TD5zajpbbktpWURVentdTUtPfSNOOm8jMUtBK0NsXl9QWz5sZWJfWWshQSVSISUibX11Tnw9K2ojYlBkIzUxYStPNztyNXFWLF5sTEFINTlqRXoodHJGRl1wIV9Nb2hbXzlhajthdDExK3EmO0AiQ1VJd0w9ZFovPiheYDIvQTZy''@;'; put 'put ''emVSfHFmZTkmflJyNmJIJEhoM2s4SXF+d30vbV5GPTIkVlFCNFo/Wk45UTtRTDMvLnArbElEQkE0NTxxe0hheD1ibSEmckB1TlI1Ozw4M0phJlUkSDlIOUhfQ3FyMWxVfC9wWDB8WHUjX1pUKXx9JCEvfThzPEt3bEhZKD89ejFUWiIuJGhZYF1LVT1ARWU5bkk4NTx9bSR7fWcscSk4QkA7I1so''@;'; put 'put ''cXMoTz0zN0Vaezl3dE5BeWllVXZaajUlKSF0cE93VG02SW5EL2tRTjFQVjl+U043emQ3O3c0U2BXPSIvKCUqTSM9MG0vZW1vZithaTEjZGRRQ296NmpCQ0o9Ll1uOjR1PntQOy9wPVRfdSYjbk1nN1FMW1QhUlJicG8hTDh1PTA4dzM2VHZrODxleF59a11IfjlFWFUqYGpLS0I2YDRVVz0rbGo5''@;'; put 'put ''Jl5EXmxFNyZqZC53R15gKjxecSZwISMsb1lSL3dVTFc5Kz0yaVgwK1VBNiZ0InBhPTkwX0MzPW5PQDEjJmRfcmJvVEI8ej5dJThJNyQ9YSFnUWFFMn1ZSm5LVzNPa1RWcylPVy5qXn5APFRZOkAoW2pAfUV2YDwxXlZGaz9+Yz8lYyRPPXReJDJ9YW4zZ0VjbHo8cSVTLm5QcFdzUjRwdk5dfGVm''@;'; put 'put ''dDpYYlpKe0Y9M04kZ0Z5YjFOMmpzTyhJXzJaTyZqfHIkaUZQOEAyaip6VFpBaCU7KHo6KDMrcVJQelV9SlFob1I2VnsiXSNJQENGVV5aLHdtSlFTJn14ZGNpMTIlK1NLeHModUlPKD88bFU6WS59JThPM0B3a0J8eEgkbitEL3tpMj9LSjZNNW8hN1V2fD0xQkRDYyhDRCRJOWg7eCh8Vn16KmZX''@;'; put 'put ''cnlwdDhqNU41cnBMJFN7VE5Yemo4azhYOWEkbndQSzhoNHMxKSh6JSllbzlORl4jYlkodjxTNTdtLD99aE9kUyFJPD9yLylJXmY/L05ae0F7UklYXTp1UW5QZEljYTNjYnQ8ZFk7XVh2P2dgRl1kZzA+bmI5Pk88SzhoKnRPPWMqOzt0KnQ5fnJUMVMkSiUsKlJkJHNMWFFEUUNDXUFwNCk/KlJk''@;'; put 'put ''OWxPZFA8YFMqVEVLIjVRQ256JmpXR0UqYCgxXm1sQmAqPHdbJnklWih4fjRaOWd0YFlXZG1hYTk4QlRAbU91ZDdFTE1HKHpZajByezlRQjc4L1hdIT9vNUxZNGNJJX5OMzdEUDgzeVcoeTB0Kj86V2g8ekkmOENAJWpTVEJ7aSs2PnJ4Rz16RFA6InZoVn5xeGt6fWEpImFfQG5tLGB4fS4za3U1''@;'; put 'put ''ISFfYXxncjVtN254IXg3fU9IOjsmKFlnP1ZJKHRFZUIyNTFmYzIzYCt0aHxrVFpyTnFvPGVELkloMTZXW1I1Q3MyaVRpaihKI1JTQ2VQdjtHLk5CeXRDX1NKPHA6OF9GMmkzOWp0SX5uPjZeV3tUNGlpXltufSFQVjg1KFFJPFpLR2kwZmx6NnA7M2JLWj85ZCwlfU8jfXdqejRVInx+dVsrWG1+''@;'; put 'put ''LFA9K3BySiRjPm17aCxwfXc+bXpecFt7SlBXfntAejRtK1BiWz5ENXVJblZPRTxsJnhAe1EubCZ+NUlkKDE2WnRKQFZkKDJ9O1RGRDE/OFRhPH5BamhEPjkwYiZPM1BlVHRsPUl2QmhFPGBJU25xPyV8KW00Sz0pMnlzIjA+T09fYjhPdj1oXk9oIT5fSXBeNSFOZSJ8LHxNRWpueGlIKnxZJTZs''@;'; put 'put ''Xjl5cHhweHB8NzssSyY0KiM4NXsqN3EmS2RZRUFRVUVTM1drTSI6LzgzPVkyfnRPPWZrMGg7VE9RdGUjQkMkJmRpSz1Jdk1Hd0lzSlciSCNbfUtmbj1saD4iUTReND40T2M8VDRFWU1pZjojLkkoM1ZiNWFKd1JLb21GfUN8bSVSIjxFNyUwTHBGNUV3QnRrcktZOHNlaUgqJmRhaVh1SEIyKXYz''@;'; put 'put ''MTs5TVZ4ZHA5aj9tUihmcmRJfllsIUJeNlIrYXpQM11mWl0ofFpOKihVbERSQjk4QV5wdys/VXw4UWFuPUtIR0htdixZLncyZixVaV5LTkMqeFd+M3x0b0kkIyJzSUV0S2EiQ0I0QEtaYnBqbVFUQ318Pl0kKlI4fiRgMSZrO3ssUE1hWUNCV14mdyliP3U4cihHL2x1LnpLV00kUzZTfGY6Q0Mw''@;'; put 'put ''Kylye2VwQCJwOyUraTEqaThoRnh6cmdjaGpUe119XVloPEs3Yi8yUGJYUjVvcmB+KUl8cDpraDBATHM/STJyTUk5UW0/ZTl1W0JGdV5EOiRVInBdTzwkVEV+XUdTKTFxVXJofSkuYWhyMWhncn08R3ZxWCp1bEl4WVp2Kzk6WzBUMSRuLCYleWVmKGomM2g7RWVwZiVnYHx7cl12PSJ4O159eF0u''@;'; put 'put ''fXxJRWZBTjo6eVZdSFpnZnBALDtTa2twTmx4NSF0Oz9mP3g1SH19PGI6Om4pcD8oVUtyP3NGa1oxZnMpckZ0VTYiQ11WRisvS0NOYmdCL29HISJVaD52STFtOiNwXSFWOzVIL3RhYmgpQm9XI2dWYktqbXVqMng0RU4oIkBnYVdjKE1seWh6RkpLYXVXSTM4dnBLRFtERl4wYjJQcTtDfSIzJWBE''@;'; put 'put ''WnQ6eDNBTFA/OygiPEBwIVFkJF11KCh7a0lmYTMiIyRVc2ZjTEhCe3Z6SVYvUmlXclpzRWgzVFpfcnBPZFlyLlZmKDt+cDM3UjtYUlA3KTBkO1g6fTw/XksoSEFhSWFyUjlQQnk+WG9jbnlXNEAlRjAwdnV9MmF9P21LTkNOUDk+UT49K1V1QWNeZi9JNCpGNnZZKVV1Xk0oVTs9LDcsRVZnbngv''@;'; put 'put ''bXBEYyxwe21EJjJRTi4vOTVdSWIpbWNYJFFCK3N4WkMjIXVJP00/ImshdlM6YElGIWxoQmhGVUxPfGJzUV8rXk5sI1E6TEVOaiJgPF07YTg5ZWtwMDUsI0hzWktueVpmbU1fSXtnSDVxOUBvTmF1JnNOckdme3F9RHxeViVOXTlCQEtEPTZGdSs/bk97bkJsQkR4OmQwRHEjO3d4fE1ATTtNUSl9''@;'; put 'put ''W1NEI3I7amMkMTUyYUJ1QVBeQ2IzaSZrLDlWSmpMaUkqYHxJNjNYZ09RbXlQOFQ5c0IwUCFMZVc+NEohSUV0XztaPCQ/R2UlLkx7PiFVSUJ5T3YmJSNqd2wiV080flZUM3s0JCVkLDpEYTUsbyVpWmd7clY9IUgoWSQ9T1ExeWI/MmwqJDUwRUQxNEJDeVlyVkBzdF4hbC4wLiRWSjIuN149Oytv''@;'; put 'put ''fl1YMnk8QWNBTGY4eSYkRV41WzljaGhhPG5yWkNJLzxFamRPQkVnM0dsaC5IbnpyXiZobFhJKzZaPCZqUGYvRVt1Y3JiRTIzXSF8YyRwNHdnP2BWe3V+Z2JEOmkiSzFZSks3Z2gmdU9lKjciMzdQTG08b1MheH12LFJCMFYxbnhNWmZPWGskd3VQa05VYS8saXElcWdyVV1LV3Y+YVdPb3Z7Lz9j''@;'; put 'put ''N3pzeyopSVlOTT9IT3dRT0JhXlVpOXUyWn4rMXRRfGJed2V4VHlBa2s8QVFRZ1glZ2dmK1tfOGwqSHhDOFczLiteVklHP0hBUldQVTMuK0thYSlMKVFJMVk8dXl1JWlwLkhiRyhXRUlidjQoa3w6T1AjaS9JcnVgaV9mLiMobF57RW4vQGBuQWkodn0kUTBRZ151ci9JWnRlZTpGQjpQJiwzXXBQ''@;'; put 'put ''a3hLO2N5WT8yW15LWSIoYnkwR2lOe31qXy4oOH1EMHYydEsxWCk4OTg4KytaMG9wR2p3cDJXM1AoOSZJbksyWWQ2X3F4MVg6YHFJNV5vb1F0X0U4Q0p6RWllaUY2NV0jLztZZ1RVUz58W3xfJGkrSUAwc2dPJnpsfUhRaF5RMzFRWkRrZyQ0RzBLJlg6W2BrSjk5WDF1WywjRmE4b0BTPEFEfSRI''@;'; put 'put ''NkkwQG9ZYTRsSW5hcEdubFlHbltZL10ySWEwNzFNIz8/aCFOOTRuTjkmS2pOdDxBazIxNTA1OSY5eGwqQH1yTGVePmljRGlfNGx7JE1LRissdCxoPEdNaWUyUClbUFVONllOY0ZNUHV4X2BEIUZDQzYlNClSLnoiQm1VdVMpP15sNX5PYG99cUdxMSUmMzxCW19mQD1oOVt1KCpTcWBOR05ZXUth''@;'; put 'put ''IXBvO1BrOTshOWIwaStxOCo5bnZhL1QjKm1iMGA5Yk02PzFQOXtwTjxTQmBteUtNez81PGhxREooUDMrWGVGPCthfHhBJSo0RDk1NUYmfThLOkpMR3VWUTx4aTtWUClbS3pHSV1JdT1yZSo0PSMpdUlFRF1TNWs5X3EwOCg0RU5hanciXTB7akhhajhWZmJoQToidHgkbzhWZj5ZJixob2ppblBt''@;'; put 'put ''K3wlXkxDPyhAKT1fXmZvcnxrYDNnYTBrMCEqWyl0VSNSV1E9SGw+eGVgcGBzNUddUkZMT2cifTI5KD1HISk6PiF8dGQpQzosSFI+TSYkMndYZEVMUHMseWw5QHMmJi90VTN2dldKTiR8YFAkTFhaYVBQI1hELChHWEFSfDgzYmJOe3BMZU42RntBaVJSQTpvJSsjTVF8OClpN2FiOHd2R3gmMDl1''@;'; put 'put ''bUZWcXxLdTl2bGJDI2x9SHQ9UiYmL0g0UDJwMyokekcjbHM7LiRNO0xubDBRKHRJSjlRZkdJXUl7d1prMGZbWGE6fkhyek5sN3I1NEd+eXJdckxXdlgsemxmZk5gcSl9X0NPOyxbJWd+JV47YVFTKCUsMSN8dDBscnV1WF9EWk1pZXgxfnFZaSY9O3oyV34kb1EyXX16KStnT0YwUWlxdl8jUGgv''@;'; put 'put ''djgxWmluMjFfKVMmOGpYcGF1eXReKD1kLEcwajswK0lKeVE2REJRQk5AVm14PmQrSnBJVl5OUndfJissVyxUNGZ0Izw5PVNtNyp7bS48LHtUU19sQmo1bXhJMzQ7O11LU1dJKmpUZUJrQVVUcTJmYlp9KlhQNylMeyxuRUo4ZC9MY2RnV2RrOHtwOUFZLitQYjpoL2JdRilQbVtTI09sKyM6PDUq''@;'; put 'put ''LlRNP30pe3BCYCJWNm1WWzVCVVh8Xis4Qm93JHxJV0JJKzYqQi8vLnQ6UDNdenRDek1Tb0lkJTlYQD1wV3UvNDE9XmIqPEFIdC5CI0hXVGA4OjtCNWZIXSRPSGx2ODN6NVY0YSw8NVBIbXwjQz1aNW5RPGFWSzpXaVBNZGI8LDxpRUZ7diF6c3IuPTNLIWUxemk/RyhRUDNkKDlUSV1CbXled3xa''@;'; put 'put ''cHdbNU1+I3sjZGszSj1UUiZ8TippRmciYHFre3pPbGVjZXJCci5SKnhSIzJqZGNMc3hTaXEzNkhpZnkkZUtbKnNzc1hwOTwzP3JUdWREWyp3fEclNkEse1tAVlt2ZnIkVzl4UlQqI31gdl02YThXMilQb303NXJPYVhxP2V3STYhSSRNJi9pLix4JEFlRF8uO3FfOmUpQ2xMPyxeOG4hfDBzdXF7''@;'; put 'put ''YEoqYSlvUExwJmUqeT9bSFhfKm5JUEJWfTExS0A7ayVBbnVsPDl1c3dzOyhKZiFJZEQ7SmREYkYlUW9hL0R2JHk/VzwwcDB6KCkwRl1MWDlddzlfVyljV2dLNTt8bDh9aThSVHVpMD5RPWk/SWhqfiRwZV9eanxtQipzaipKXmlyKFZWR0p5MGRfI3BgRyZqOHBJVT8wSVVdTCVSQ2VNZSg1Y1Bb''@;'; put 'put ''R2kzIXF4dih5ZD9SWXFFeTk/YyIpRlJ3YCsvcU4sNmRWaWV7TjliSjMrfEx8WCZbeGxSb3ZodzZgKy8hWkdUYiksKDY/YnhQbVsqWXpCeT5LfHpfel57Lm5aeGApVlV9Ky9MPmEoVU5rWnhXeEleSWBWXWkkKjR0ajpiYXJ7MlQwPDUsfTpiYVt2dTsxSzMudjtQWVoxLnxraEtIZUxsJUkxOklz''@;'; put 'put ''NHVESzBzPiFPQ3pNRiwvKFlxfTsmW0Zob0EhfEJIIl9PU2VHTV1DIUV5IXRlVkxmNyxmT3RwY0dIPFcrfSh4P1RKXykxLDdPdFBoTDs0P2hUOCE4MTVUOEd6RWBJaFt0c0UoS344W3RBby5hUUQqQlY1JmZtZmJTcEp4eihGbXRda1Arez5RYyVGQyJpTDtgWkZTaXVufUxJVFJCP1dxIyU/M09q''@;'; put 'put ''RCEoI1lLQDJbbztnZWN3Pj5BRDx0YFFdcT8jY3l4cSQ1WkJrWFB6XWtPWmZBOjQqSzBDMlZeZFQsRzgzS25rPyY0LEE/e2YuRFQ/fnE+U1BnZThucXN3alhjZi4rXnE/IzFIV0dmbyxHdHQqNCZmSnRyTF1qdEJvdV9MNVswSElSPzIxa3ZEYTJBbWl5UEZLU01Fd1Ixa0JReFp0K087SUclSU51''@;'; put 'put ''UjsyOHNlfjg5QisoTUgwMzIvVHxwVmBmaiJxVGlDZVhFRFQ5aXkiMGhOZHUvKHNJSi47W3pxcT1aKDI7VFZXdT0+VHF5SzZDQXddazhqY0x4TnBaWjJLQ2RCOi8mQTpYZix7ZGosImBBNDNLbz8oSyVJRHU1emxnOlo2SUVIJDM5dHM2cFtkcWhRRk46JGZyRlhgaDYsQ1o2ajtLNml2JVMmYjFm''@;'; put 'put ''ci5ZaCpsUyVQal58QzxAfGg0dnVlblRqRCpJY3BpQFlRcTpwT21GKG9HRiR7SEpaOmFqfVRFcm04M1hSNikwQyoiMkl5JC5gOSIyNzNNdyxjT0N8O3tbJlB5ekJqXlpCUS9yZlB+RjkrT2AkUTxLVFo6MjFUO1VTVl4oVGxoUlo+WzwrSHNkOVZoUjIpTj1DRE1hbVFXMTlTbG9ESWZWZk5VVjVS''@;'; put 'put ''I3E9MENeYUZyU2pxOFk+TSEoYWl2cVE4I3xAYSJJUlkuQz40ZnNpdyZbcVZ0MXMlJj11czlgbyQlL2tgI09ZM3AmKHAmJUxxMmxrS2g7d3dDXyg0TjQsb01hc2ZYNV87eWhaJTcvcnBlbjZHWnheQ2J9JDRLXjV0Izo/MnNvI252KmgsQ2c0VnxHVmBjNntGcEAwKz8wfVlpb10xR3lAcEJaPzVy''@;'; put 'put ''KTlCWm1eTmlgIU5BOkRPNFBjQ1M3PUNydilydjJQZjJGOTk6enkxJmlxSEdWXVR0ZnxRRDU9cjh9YEB0czpuWlcyfXs1Vn4xMD0qdzNqflFKPTI4VUE1JjkwZFt7L3ZDdjxKbXJERW49IkJEbmB3IVtBYGp+dDMkeDcwWDJeP0FYYWRwPiI2JTM5QE0/QD08blBVK31BP141KCxuIShkdTp1cV5o''@;'; put 'put ''YF57P0IpUlIpODVTYU1AWjs/Vzw7KCFxMDxIdVJ9V1IyRCFzIVVpP0AxeCYmbkNXbjJ6fnNkcXRPakslWGV5ISldbUkySEsmTT47VmBqYEB8bn5oam5ncDhVK3wsY11nRl8oUlJ5TjxudSp3QDttNSltNmZhSFt5cHA7ekpfJE9gLmJ+QVR8RnBAKTMiPypqUmM8PEFoMVBfZ0skZnkkfGxRfUhM''@;'; put 'put ''eiM7JCYpUmZJcksxRXRlbDAmfnAuRz5GQkUzIip2TVEhXTdmfVN6b3A1JT5iRT01PTlGS3RALGdjdVkzezd9eXM/cjl9SGRKfFVVLkd8UVZpe0M1Pl5vW31Ta3JFNVZkOUAqYF9qT2hQcXFTLGpoI0hPQERlUFNXbEImMipoPWE5ak9pOChfeXMwaC52NzBVNm9yPFs+anJQIkpAeHJLeXB+MDk+''@;'; put 'put ''XkBJfmg9RnxjNVZDe0BsOmE2clMrYCU2QF9wb3xJQHdWX1gyQHEsTntfLCZfOigxMH4sOyJ6PTQuO1ZDTFp0e1R6MnReXSxzRHZTOTw9XkB8blN8cnVEJltPSmFAQEc1cWZVYkNOcT9RLmlPRjBxelpsblpST0B9Wk41V0R5LyF8JFFQM0JZV3tTYkpFaDh2SGlAYEVeMFpgOlNHOjsoX21uO0Q/''@;'; put 'put ''blp+e2ohfmw3M0ZARj5ZIkpuZDhTQUA/aF8/eHRdbH1BLyhYP2A6VyVJOkxyNGdmVkRiO2RnKERrV0o6RT45OT5KbTdJRTkkRSp9KFFnVz5qcX4+Xmc7NX4yLCNeKCxTMzghRSs/X2lLW3xJdmREPW9BJXpiMDkibnFYeyoqVW10NWVZfSJmcDEuLEZ8YFZeP1tmUUUhaiI4Nk9xJTIwcjkmOz9d''@;'; put 'put ''VV1VfTNmKTs/XW5wJiU+Z285X2xvOWd+VCxOVyMuMj1dSCNNPzAlWXtZVl5QYDghXy5LWXtZdExwQEAwMDA6TGh6RGJEd0ZgWWszeHBOT1h1QCVSMytVZjQrXnldcXA+dy5CVmRmfSpddndFNkdNU0p3dy5YVH4uO15VdlBgP1Y5e2VbOTNFOG5eKE5EWnxecyUmPylSdTtpYU0iKXIvSCMzZE4k''@;'; put 'put ''OHlGOixLbiFsS3VyKSIsKk0rbz0uM31mLCIoUmJEO15WeCZmJS5lSzxwQS9+ZW9teTpsOW9nLG5qd215XWYsPn4odmNFKks+KltTJVBsL1lnWXpHbm1OSm5qPnQxaHtuX3s4dWxOOUMiYF9gUHVxa19nJklwdXFYODVuaT5UfXklb1R8IVZCYUR1VXx+IX4/ezoscnt9aVRCITJNMWhKeFMzVmFk''@;'; put 'put ''I3MiTDU+dHxmNjoxR25kOU9KRUpgfSIxbT8uYCYhTT59Ukp2fT00V1dONVEmQF55diZUdl9ye3VBLEpvI2dgWmFBfmVWc2pTQysqNUNRXXs9LixySiVxazIuPSlJP1NpJjIwUV17XWlzY291RilbPXhYJTF1SHpOXnMlVWNieXAsc2BZUSkvM0pebjNmN0w+KyVXM0NSSFBHMDYvTWBiPzNSMC92''@;'; put 'put ''TCZJJDwiNDYvM3gkemwjVzkwYzxLUTNWNWJpLj1te1M1Ni9sbSN7KnQke1JKLz4qcj4hXWkydSlaTG5ifkFIRGE9cmxTO2hSNFVjOWpYYXY6bSMlPCxrKkYoQ3BYbyY0UEdDdiE2REMjQXZyNE03XixEPFo7bHhUKmVbbEQ8dT5xbmNlWWZsNyoldFtRNzNGT1NJVTVeXztDWj4+Ojl0bXNPUz8m''@;'; put 'put ''TGQmQHNwOXJOYVBFVG1veXdFZGQrW3NTeVM8ZyF2XSgsJSJKVHwqKyFQTGM3WmZWa3gzOzUjNXFNb1NjKFpSMVolJjxNKF8uN2k4MCs8IVAseyE7UDZDOkE2eWcrSytKTk1sSFU/WkleL3ZNKmRJYTlQKk9RezY6UDw/S1AxaFtZWHRQWnozYzBzUXtuLFs2I1Euflh5Z0VFZi48SzxkQT1NUnRC''@;'; put 'put ''WH1YT0dkaTQocVZNdXl6eT52QFEiTUR4N3FYY0okemA1VWRpR2VHQUF4MkFBTU97eSZpYkNZeDVLKVdRNER0X0NIOVloR2JSMEIrL0ZuUkFNZ0FBQUFBQUFuQiRBQ2ZhUn5dR2hXay5sOCEzR0BJfm88QmplT09IVDpVSzt4eGs+cGsqQFFrYD96fDtlVnxzWz4udEQ/YTF2K30pbEc1byF4ZCZ5''@;'; put 'put ''SltzUiUqeHc6O3xmWVRRUzUlOkV4bX4/Zik/bDg9YjN+Q0w0VklSfjkzdkk2dy5XODFVdllgdjVXZnR2MlpzJSEoPT86SCg+aU0lajN0byYvQUJTdHN1L1RZIUNVJX03e1BoOD16JX5GUm1VLjYmMDdTbHo1c0REPmQpTWcsNDRoKHNpIk5yZFJ8bG5zIV5zfDJ8ZnA0PEBbLFFeLFFXdjI0JGVH''@;'; put 'put ''dWklWltqW095RlZYKVIudlBjYCk9aSFsMD42I3MpXzpbNiJKUnRjNVB0U10uO0JPL2RXb0oqPVVGJmNMMXM8VThbckxbc08+TmdHVmtXOk44NmVaRzpRTWZ3TF1jS0o1ayIoXSFacntfIkNqZEFCX2w6ISxsKzBBR1QjUjFwTiFfMk5oNXB7cWJaXn4qaiU0X3pEQkloeDk9RUVPUmQ2dW0uNn5M''@;'; put 'put ''KnxsfHBEI11qVFdLTnFKQipban5BbjtGSU1JZDouZzZRSU5jZVNtfWh6PVpxYCxNdHl6dkNSTS40QzJ6JUpBVkEpIV0rXy9malBpeTVwRCwmI2tpOiheUVlUX0VGQ1RXV2FlUGc4cDkvTUNnU3ZSN308dEFJezgmODQxaz51LFtMOH4+VCUuZlksfnFkUjY7X3ZyP057JWBDRDhAQzZLfXJUZmJJ''@;'; put 'put ''a3VLJTRKPFt4Kj0xejVQbmd5YkhkZjdgam5zbkNNOmZiM2ZJaih2Kk5pRkAxO2wsa0ZaKDlIRD4zVno/ISROUy5oNFBHXzFBRVQ4UVN5c1ZVX3dfSUE6MTNXNnp5dkhlelRGb0skaW1jUFU6QEwxUXUvP0QwVG5TWy9HVnAjP0haaWB1VEV1NyhpVj16PX5AWWNCWU49Vm90Q1opM2EzbyYuQDhZ''@;'; put 'put ''SlkhPSY+SUlZVTI8OUtlSk5lOFteZzEjPH0rbCRbZjs+UGlhREB+R1p7WmFOeXd0X1RDRWFgVVZQcyU7d2RYVnA8cWdtKVV9aWgyYyo6aGkxWDRRK09EO2wmPGElOiRXJTRZdzt1QD05fnlhMFkmO04sYil8eHErekAsakghfX0jVTk3IThdd3J3NSNTZ3xaK1BWcnVERVhXXnJRcyF6JjckaE51''@;'; put 'put ''YiNNLzUycShmKzh+NGZlaW1rYWwwbFtgMSlXMWZIQz5SfEdsR2BTeXgyfCM9d0paWVp0dEJLdlhHUEohI2dPaTosMiMqblhHcjI+Sm0sbSQiSGwrcWxvLzRnQmZ2fmI7elgyPk88YktFIVp7Y2lTOT1men48R2J5dDVVMWk/W2JhVEkiKTpIQlhiTXdoM3RVLFkmcDVlI2IuLFg3Z3ImazNCdXJx''@;'; put 'put ''NShjW3MrKVtNTD9xR04iZmhKNTEwbkF3Qy5YW294NUJVbW43SmJCaDRfejJaaT9DUyVFWTU1TUtbdjlZLjp1dSF5Mk1XczFCXi90ekp3UjJ4bDZ9R3VfRUZGUVE/PnxENHZUa3p6WH5HOVpKXU5pcSsrVDM2cVpvRmR1PHksfHN5aF9DJHglXXEqI18kenczWiF7OG9lc3AlQHFldmZxIjBTWVte''@;'; put 'put ''V1NNO0tdT3N6ZVo0I1Rbelg6SWBwMlBCYmRjV3ooM25EXXFMV0s2YTBrYDA1I31Kc0BPfltaYnAvbkUlWGV5YEBuSTtocGUuV1ppKm5HV0oidiIpYjppaX1FMDBmfHo6eCokWG11Llt3cmlQVyQ7Sj5CRE9NOzs2LEheYmh7OVhCPUw7IU1xZklhSCNhU2FbQEtiTDBMLG18Niw6Z29LTDU9VXVX''@;'; put 'put ''KUJbWXdEd3UrRHdgZGBTSW43S01kVzlDbiUhbGhGfTdLNFZAUyVKQmhRL0x9Xiw4ZkAxViZreTt2PkRhR1dibz1UWXx6O1F2Y1A7dDBGfj9XYzRdNiQzUlEmaHVBYSRCSD58YUJHRkA0TGMlcH1JazZ2ZT9bR240d2AuLCZpUGFUUWlUWzYjdSN9LitPbVc5SCY8bXZLVGQ/PUI+NythZix7Uy4q''@;'; put 'put ''Znt4dmJbbzx6UCZ1T2RbMFkwQWUjT3szU2FhcW5BQ18sNFcoWzZ1fVZBREhKIzJmR01hUztNRlYpaShwNiZDPHdMd01Cci9Ud0VIJS46Q0JuaXdAPGQ0R1EpJDhSKClNa1IyWkhsYiV0dnpzdDF1a3I/NzFMYEciO3FefFRvNkprMz5QXSp1L21wQyxaWnJaJT1EKGRyTmZXMUU5SS9JMD1Ue2lY''@;'; put 'put ''TUk5bV9UdmxTd202ZS5gLGkzIkBRP112N1BQL1VQWWs9Q1AhT0BSeyJGdGYpfF4qJmQhempfcFtkI2A9I3d+ZG8mUjpsMX49NVZebD9nKXJ+ZTo6YlovOWpdSG9XIVEpXkQ2fURUJHEzPzJ+ayJwTXVwZUdqOzhkfHxtY2FgXm8jRCx6aHg9enN8OEJ9ampNdzsiKDF+NnlQQltwISt5eTw6MnFy''@;'; put 'put ''OH5DImVMVEtkPEEhU1ZAOFUybDs9XTwqNS8lRkJaKEtsRV9PI2dkYmBDVDRyP144S0BVRiFMby55JS9jP3hTSj5WantpWXg/VyUrKS4wQzxYPkFga09rdjZEM3w+ajRZMkQlZzd6M3RbOmk9N3tOa3AzaSYrbClbcmRXYkRsNHN2cmBiZ1FeSmZWRFRnR3J3KmtzUkRaOC47I2dMej5rIUVxXi88''@;'; put 'put ''cUVTcFcoSlVIVCJxZFJmb3Q/fkdHNHtoa247SSN1RV1kX2R9Z3kuNEB2eHZxY2E5X3RQKSQscT0jdnlfdDBSZHM4NGw1XVBQW00kYXEiXjteNzkqTVl7UWg/T0M2WUNfRW8jRyF5NSomcXY8VEEzP2cuQz14YVlxVlN6UH5jN0ZrSlIuZCk9IytHPSswWjM3YztyZkViWygrNn4yXWNaOzh5JDhr''@;'; put 'put ''RjJLPGx3NjpvRVRLRjd9KEl1UHVYajQiUGJ+IU1iN0NOdH4qSCRaVXZwdDN0XkouXUhCKkROPWwhYiExVFc2eX5kZXl4dE1hMV5vPmpHPiQqQl57eXRnQUMhd1V2Qkl6TW90Yil9IzI2OHtuVFpWRmovSEckNnpIIX4pOz9LNzArNU90UUFYVlRVLDVpVVQvLy8mdHQiRHt6Pi5TekRLTD86X21+''@;'; put 'put ''enxJX3guMndGQ2xhPH13UUVPKUYjbSRzKmpmcHsqQio3JW9PLyZbNVB4QW14YkJraCNxMnNIPn5FR3tZV2FGSTU7KWh7NF1AfEpyUCheUnFLIWpAfGN1b3psZDkqPDs3VWRRRSF4TXBsVWtzQ115eHtjb2dJPHlzSFowLD08dDdZcTVNPyIxb1kueGF1S191cHlQPGUyIno+T3RtfDhqdn11bUpR''@;'; put 'put ''M3RuXTl7KjR3Qlg1KGpybkJ4Qz5oM00kazB5Qz85aSIvY2UzaFVYW1pDTipwbiMrYj9Te15QRit6IkpkRUJEbnQjaUJkKDt2QyZeVDZNMU5jJVtpJEFtNGp+LFpSQzhvOlRGLzFLVU0lNDNWKmtoUng9QGN8RjsvcFN0RjQ9eGlVVHB9OnFlXSJqQGp+R09pRV5bVjheXjlhbyg9cipoRXxzLzl8''@;'; put 'put ''eld3L2BoZipKN09vWFc1NWB2L3dROHBfLnNzPF0yYS5Ad1EwOkwleWVNNE1pJW9seE41akZHfm40U25lSkd8VDFzZEhPP11HWmRTa1Y5Z3EsMk92IjdFTzM+T0IrKjJ6WTNdQ1dmUVlLQEI3YS59U25bbDJkIz87UDc3QHB4Vmc5JCUsVmF1PW5ofGw5eGVGbzxGZGBCZm44Q2hOYHFRWjp7OTtR''@;'; put 'put ''ZXxrRX10PyJBeiFQQENTPSpyIWI0OGJuSEZqNW91XXR6ZFVlTEV7PXZlWyh6Vm1Wc3ttMFBsNEl5UHsiVHslTnY5Xys7KllgZGo4YTI3KzBIWHhvTEM7cUh+KzI5MzZBZyxCZEZyTC5TcTVgd1pLYUMhKl1LazI7NEw/K1h0eiRGS0lpbW9AKlkkRlNyMllrWGtiL2gub1Y3bW9JYjZZZl4yVl54''@;'; put 'put ''VH53VTI6OHtjSyIwNCRnbTdkfiFGLCU9N0JHIU1JfVZnbTQsVnh4Kyw5cnwyTylaO2BrOyYmQypqUUs/KywrZ0ZxcC5fNDBUV2BiWEArKnNSSSsyLFU/NHxKPStAVmtwXTAkU1thLz50YHojXjl0IW9uXXBSRVB6RE9nOjB6PGUhLmcsOExsc2BmbztPan4mbWJQQWJzTHNvRmFMZ0VEdTskN1Ft''@;'; put 'put ''fktQVXVBTFZPRFtHUTdUTkJJSGlpOEwiZ0IvS1YiWklvPXc7cj9SOGFqPl9HPF5AYStMezYyWjQoKi54U14mR1ZPeSZEQzp4KHkpVCZCUkdwPW5EcEQ9RH4+Rml6Q1IqJThYQyZnU1AqbzlHU3V6d2MmPUdpMmIjZjJIU3EqaDB1P1Z3MXVKK0EoYD9uJF1jbzArZG00ej18OCtTWTBSJDgubX1x''@;'; put 'put ''LDxwM3RZZmt5TEBuS29rSkRpWVpLIjJHXSg1JU5jQmN7KGZVKmFDXTt3cDJGI351fjwuWl52OylMUD9XVSo8dHxMUjkkVVhqWlZvKXdtZkgvUnN6JF8+eTxYRlNTMT1vWl43QkEkeV8oNGp2R15aW2pMZH5PLzU4PjYoUUdDITEqTH5YVkc3bXsyMTxiUVBzNG0zaFY/T3lNU2B8OFI6MS8qPzVA''@;'; put 'put ''a2JWUCFbIkFnIj9aP2FlY3FbRCovbz87S3xUPmE3RTFpN0w0ZVsmVTUsRlQmcCI2PmhMIl1uUno6IXU/aW1SezZyKEAiXlZFS0QkbyxwR2xIW1NYVVJyR34zSUZCaEh9SSlnRDxNcEZWZyljNiRxLi85ZDglP3AqNkpeKGB2P1VoVGYkV1pGfmxtVGI/V2VJeHMkallBZko6PlB1Y1IiWUVaRH4p''@;'; put 'put ''WF56W3hmJXpBSWlpWn0jW1N1I1Jee1I1VmliPzF3cDF7dlttdmYjPUBiXV1zO3Nie1olM0ZDW0YhKEYvYnhtW1FQPElHSilMW1FscDltZ2chdWR8XW1AbWh7LE1jaSJUd2lhRHsrTGhQSChocV1hSnJxdyVhP3hGbVdKR1J1dE9iWyhGaSY7NENmLCoyYSMyUVM8MVdiXkRuI1dmZG0meTg2TUUv''@;'; put 'put ''WWA1LGpeWH14OUJEMU9NMltAZDgqVk1WTWsrd2xeKCNDSXVxLEg1MVFAZG0vUWk0fTUjVjo8N1ExdC9LSz8kMkUmUFZLRUY8WUAxYS9IYzJKWX1LdXU2YGQsSVpjYXhBXUhVZio8RmIkdnhIPFpGUnZecHt6bGo9dmRRI29sST1SeT0yayY6cjheQnNTJmRCaVJnQmlkfWElWFo7U2dLUyhrd1hR''@;'; put 'put ''L15qTWs+MHRCLmNfaVlYaXVmbTA5aSt+SzomdXxRYyRtUyg5RyU/KHszOkhZPXkjQ315fDEkIT5fQ0kqITUhV3pYdD9lSGx6KGovSUxnO3g/YFFPcFRbeVZXPCVnYThEI2xfaWY4aGB0YSt4Oi5XRWFfVkFLfTdFTiRXeFtuYWxfW0FAPCZWWldTOCRfbHR6fDVxR25+U2p9OFpHZCZCWl1fZmVo''@;'; put 'put ''Mk4wKFVwSmUpTXMjRUBkaXNybV08QHlwYE5pRVhndUBec3wvbzhBaWUvY2xWPjN1T3xvVDk1JGJvYil6en1HQzZ7ZHRvPHxwO14xRGMkczJrdiR3aW1+NWBVQCk3TWcyXmVVRFIuTkk6fFcvUzxzZipKaEt2MDBoTmhrQ1hTQF1KfCNmMVJQdE5mRzw4ZnprMCIqPSxYT3F4cSpOSjU0SS9iPTE4''@;'; put 'put ''KXBrUFksaH1yZV0pRHBiT3gobGQjUG1JRH48TWVCdkhCM0J9NCttOi54ZEhCU1FCSmNeey90Rk5sYD94JjRyVDFXYytkYiJ3bGVAVkpPPWcpXyRmc3U3UlJnbF9jfn4paiYhZShReGc9YV1sSVBRO3kkfW4pNiFXIjgoVWJYdmxJTT5Gamgqc2RDMWVwJXZ2SmhQMEN7RXokO3JHK3NxcT0vZHhd''@;'; put 'put ''bGVFVjMmQzhiO0VuIit3ajZMMEJOdz5FIko1OlFFQUwwJUBse0wufjdLO1dOaik/MV13XWtZY28rKyM1ZGNXNitidy91e0BAMFdmdyEvZXA5TWsoMG51fGIjT256YzkhMVNAOD81LGFKPVplVyVxTX0pclEye2Y6PGxrdHBsZm9DKT5icnIwb2Q1V0RUbWV0aFZieU9kdTs4eHN2LFhnY1J5MG5m''@;'; put 'put ''aUdCeGltQkMmIkJwX2xaZVJeTzFXfG1XQmJFVVp2U3pTSUtdaFNLYjFAOkl0TGYkfWVJMzQlVFM/VjZ6U1EsX2BULyNPfT8yV1ssUTc4IjE4XjAmYyUlalMsLj1sWDE8OWc2MTFreEpvVGJDaURlZkNQJVNOPz1IIVswfFRieSltYEM+S1U9Yktyd05Dbjk9Wlh5P2YmJF95QCUkO2FTPjxUblc1''@;'; put 'put ''dWNFVk17ZztIY2EsNUw1VWpke2hhIkUueUdyL0ZHY0dmVkhdbTJ0JkE7WWdAenomZU0qVmwiLyE1OltCRCRRS3A3SHE2MTE2RSNoMUolczNAQWdvbkYhUW1XcHBPSjxpeD13dEA8RF1Hb04lLGc6M3FxOGdkPDltWzouRF5GLm10SWouLlIlWzZ8WkwpfnQiKEh6WH5aeUAxJDxdWHxYYFVURVYx''@;'; put 'put ''LCE8X0prPUljdzZkbWdzRyxrbzRGKlQiZyYpPmU2JU1ocG4hJndMU0F9aylNaldgajVfbl9RWWxHISp1VENGNW0+OEVpKFo7eyw2cjlqOWp3alpNSSlxL34jKlIvZmZkTz5QV2xAWEp8bjkkfWxGMDo2YTdIeUlzO2pmdyx0ZHB5dExETXszPUo/KyZsWDdbV3pjcHVzTkl5KGt7PX06fmQzKWpy''@;'; put 'put ''Yk97SG5oPyRkVCRqTCNwcVhkISFObC8qbkFjW31fKmFXXmp8ZS9CYE9sPUljVz8yan5sRDVfdmdzKD9MYm8xMFlXa3hjSnRfPFtAeklZSGUhSypnT0kuUiFhXm5ZXklCVXAxPEJIJEk8TWtsYEhHN2NiM0A+OU83dVAoSDZrZjcxdkl8cmdURWVCMntqbGQzcSs/bygsbTJUSy5dfl1DbU9PYzw5''@;'; put 'put ''PiYvMD9oXjskOGd0IjlrMFEwXk4/eWE/QkNNTigvTV06bX0oPn1mZWVRVXRgMlhAI3NrP0o6TWJkdTshcGYrJjopJVN6XTUyN3FkT29zWDJwLjI7V0k5UGR8OGtaLE5EK0hWVixzZT44WjVqRi57JltyKz8qQHw9VDl0emQ1KlpUY05ZbG9WNm1vTmE0ZmQ7Qkc+IyxxInNWPVAiSFM5cFQ/QTEk''@;'; put 'put ''ZnxEJGx8fX5VLjQoZ1s/VWNlQVhbUmRidlcrL2BfTm5DQFRVL3tlMnddXkt1e0BzLkFXX3Vmel1wRC5fUkE6biZKcSI4USlsN2BlVGYxQyxTIkVvL2Ewc0xSLzE2LDJFTndyXSkwak00TnQiQEcrJHwhOGpbYE9naT93W0I7bTYmQWldOjJ9cCVuak5ZXnZ6OnRPb0soV3M3Uk5MWnBaaDk8di9v''@;'; put 'put ''Tn1HLj5YUUttaXFuPVR6ezVNVClkfmtJZW1kbUtwYDx3cTcjOVEmRURuJGA9WipZXyQqS0U8U3ZiVmgjKHVGNml2KmdJUVA3flg3QS9SYDVjfC4xa0wkXyovd2Q5MER6InpYMH1LVWs5IV9uPCpNaDU8d1JkVSN7UyVIbEE+IX53RENNcjdrT3J5ZjJXdHJuNDddYnQ9UmlaSWlbWHkqalM/em0j''@;'; put 'put ''V0ZLLHojSjswfn5abUlRaGJKMU9gYlU6KDZHJW10JCo2LCtWd3lgQSNbd2hVUksyX2A5XitIdD5pVXk2Typ4Y2pMZzopKl5kVHUxRHIoeXtyWHw4fTUkVW1BLmJ+a2Z2NmBiO1dxNkNodj5nWHMuLFRZIXM9QEpxcFlaJV8kM3ZQfk5GPlJLeXhQW1hBeWdkR2lCZkU9On56QEx8c184MiQmY05g''@;'; put 'put ''OUo6aHxuQ2dHRn48PytJLFZlUlN8YCkyYkRGbypZdzZIIiJleXJObFZRSVlPKEV6cC9iMV1JTU1UTU1DJHpzUHVsc31gOm8+Pj8kaiI5YCV4ZCN1JVE1KlBMI3xpbk1iS2tpaTlLYTJbXipJXzEoXVl6ODhWbXMhQz5FRjxiTilaXltva1FxLH11MmpNcmNUJW1zRiJndDc0UH19MmlHbWEvbUIp''@;'; put 'put ''Y0UzUEApZiE4XyFmVm9OdXVwcjpZbTZYWUw+OHhaenY8VDJQND9kdXx+YzZCRnAqZilSX1hSYGJGRyJzRHVoPGZzMjN8RCxvOipPbE5GczBXZi5SXWZAPGlSJDh6NWVYZWtjKUBrWDptQFdqUXlPWSRLI0EyKnQyMkx1UFpReD16PGMxdyUqMmwkei52JSxTKWsofGZFSyFMYitLZTZMZntVcStU''@;'; put 'put ''PDU9I0p7MG87PUA8KmFAcC40TU9JSUk4UjM5TGQ1SGw6Wj1NQyVGPTIzIVE7KzYiRU9QP3B1VWxFSGFJVlBPbktld28wZ29EKjxVWmkoc25XVzEwc1N9LEwuK1NUaVBKdUIseStWZkBhcksmTUdPQmshLkk7QkIye3dmZGNseFY8MExPW2AqcTVDQ3UvKjlwJEkyW3VSIUZZLjs9NjViREEyLjs3''@;'; put 'put ''NipYVS5hVCJUX19zVER+K2d5NnNjRGRIQSp7UWZ0QUhEKWwyYU47czhyZlIlSWFXdXhgXjI9TEU/ai54V2lAInleRV12TThHKixOJG40ZUtyRT9PRktGa1NHQVVJdn4rVUZ4KzJUMzxCakglYjJVP0FUbFphUkRmfFohdjF2aG9OYkdiVVQpTktXWU1EazBrNT9qa20sTyhrYXRBeHYyQlhrZyFI''@;'; put 'put ''PUh4eU4jbS89cEVCfT9JYzR7RkBNWENxWTBge29DLzNFfHAlbiVhQGNTLEkkczJNenFTR31ZOEUqSGNWeTo1Sy9UeEYvdDYpel4kXTdgR2J9c0paMChoK1tVSlJDSSVWXiojX0FEKCJdQn1aNnRAOjJNbSJSVkxFTC5dc2VsMEFkMlB8X25dQUxXKnpANEVCKH58emAqOzJEdC5EeXYqc09aYTlU''@;'; put 'put ''aEU1UX1HV3BUPjd9W0hrQz9qZDR6fmc/anZNKj9ndkdaPFJ8eS4zLkIsTmExcj81O1YvUXJRdCMpQV9EZHw+fG5gWXdVViZfU0wkZHhNOTN1RDs5I0JvX1FbcyM/JTdVI0VTfTBuTl1CWEVUMms8djhjdEY2QjApfTdEakxfM34yK0NzYHUhKSNTLHh9W3E/LmhgaUJHdTdzYkl0Yz1TakVgej9W''@;'; put 'put ''OCEjWVR7VCw8Qy5MIzI1NzhgXVYrW28rL0B8Y216SWUqXkw5S2JLL1QwcjN8OktxdStJWFk/RzBMZkpgYHsra1RZbjtBVDBveEcyKEMqOiQ3KUl5enlENzVRN0NSK0A6USZpO2lFJGA2QjJ6WCxbUnVBKWxaL1Bwa1VVJiMqTTN+JHx6fG9lKl1CREpYPGZTIiE/YCxrQ0Yjeis4Z3ZZTHxKOCph''@;'; put 'put ''VVV2a3p6I288S1JDVkFIWTpdPzszIktbVnJDN0U2YmF+dipkLyYhU3w6Z0ZbUWVkNi9LfmNFUEJTYyp4eyh4bGdqJlI3QFc3OGkhRnhLZi82MXFOeVhLTkIqP1Y0YVVmMXpZdigzTjVQYHdkISxac2FjI1FUKH5DOikmIis5U2c2QFkkeGpHdFZuWVNFUHt7cEsvS2MxSD0uNyZvUi9sOGo1V2VL''@;'; put 'put ''NE4xfC9+djRJM31tRzROOnw/U25UT09pMFRnV24vfSoqS3N1Oj0zRCM+Ul1uRiZOTDEzYnBNTyFaRTdpcENkYWYiejBvWzVfYXo9RnlkUjZTOX4saCRsQlYhLHgldzNEO3UkNjh2eyN1YiIhYjhmfDdwI2V2M2ZVNCVsR2ZYdldTZ3d2IVl4YDxQSWVwJCJyUF8vWDpiOX4sfDhFJigmaFtbZUdS''@;'; put 'put ''PiF8O35pP0AyKkxeYTZLJGl8I3JNeEdUfFs+bkhdKW1vSlZCIVlOSXlmfV9GTE0/VU91JHQrayZzQm5BZntme21iZThSXW4qPikpYUcoXn1zVVh2VHohaytrVWR6PmRbdH5vVndXVl1MUXE4ZSl2dVc+ejVme31ZeGVEOT8jPDAyd25DOmVNMEg9eiJfRzNrR05FOldYZik1VEY5eHU6dFk3ZiU3''@;'; put 'put ''eWErLFZvS31HaF90Zk9wYERddEchWG5KaGp5NDJjcj04cCUxSVh1fnJMUFY7P3NtMF5meHpJeW9FdGJHZ3praS98fFFYODZaaDVhNUNrTFRRUFdUPno7aVoqLlRCWClSSXYjb2Vbanx+W1IoR2BPSlJhZ186SyQ3TGNBZDBeOjMzKmM+QlN5MzpvMDdzQDhELyouVy8uLiQvTTpVIzkmeEtFQDhU''@;'; put 'put ''IUUzNVhWSSU8YUQ7SkAmLFVucG1MO0YiU2VhLnFgUjAuQUlZJmBKQk8pJnVjQ30hNXglcEM7S3hqKCVddjNWcCU8KjtkcUdzbDx1cnYiSHRRRlRxKWBkNktKK18pbz09ezQ6NktKUi9edTlrcTFTfWckQTtuZXgiQTh1JG9eWjVGJk5+dipuVTxoKlhpVDVhSjBoQVZSMVdIdlZ3OUd+RSN9Ol91''@;'; put 'put ''ZVtIKiJjI1JSUURWIUBLekdNMGBpXSpxckNeL2VdQVpMYC5EK21BUjs8SF10WEdwTl5OOWhwTVpxYiRMc2g1P1Q7cjpIRVZYRTt4bGc6bj5HN3MhPS9LYillaTVybjxibG8pLjBfK3I+aWsrb0xyL3IvazBSLClWZlpfYEZ4UCEmU2ZVaH4jQ15mSzdKPV9pfkVKIj1hNGlwdj1HT2c3UUpDJShG''@;'; put 'put ''PXFuRVN6Um0sVzU7S2thLmhASS57NCYjdEQ+MCM3XVBiKX1daV4/VV5BPUlUczVjRSR3SSl2YmtYT2xyZ3I8WHAufk1YXitgfFtQS3RDSStLRDs+ezsqKz89QjdUe0c+STRmWkUmU19oeW1+IjJtdnUyJiJgVGQ/Ty5HZzo7Q21AajZyaHQkRn5BbHxUX1l5ay5nWWAjfkpeVHtEKnt6ZjBmLDUz''@;'; put 'put ''VTxgd3tgbmZeTlg8Z0gxfkBfbUFMVHZ9IVIoYD04X3VCQ0F5T19DKWxQX2NlSiNYM2pfRSVMRElvX3RrJHJvT01OTjVRO0lAOlgwdGdGN3VUdnh+S08kbzhZWlZkUHJgKF5mWG1zeT08WmNNY1VZQ0NbPls4Rj52LGVIM15NO1pBKnU0KU1GN05xLilXfTJZZkohSlRvLCgzeitQdmlUKzdofkNU''@;'; put 'put ''VVd7ISpEaV4xNlg9PkB0KD5gbDIkWmxzcF8jWzlFSDw9SlZrO3BUP00kc2R8QHh1VVNPYE8ubn46LHdNc3w3UXcvJC8xb184KlZIIUUwUWE7KFJrLF9IOX09a0pJXiNkU2JnYUhmTkc5Zy9iRTA/M0xgV0kva0JfdVkkb2B2OXc8e2lLdVN1JCQ4UzptKUUzTzh+fXYmZEBwaX5KM08pfjRbIklN''@;'; put 'put ''OWl0RWB0OHwhWzI1SyshNTwhTVpden0/Jj47InQwNF0jd0shai5JMjB8fWBYa3ZHPzgxOWpwY2dTXzg6RCY+S0pTcCFgOjpdOS8qS31Oe0N2N3d0Vl0uQjJvMzhscnZaQSMzTSFMY1owWlFRclQ/dH1hOkd4dHhJfUcoe2R+TEw5KSE5O3ZTKCxTV1pzPnozbCliSDUyIkFwZTo2NCQjVk09X0pI''@;'; put 'put ''bV83P2xoeCQoOT51YG1PdUAoNDshMHNpQHV3b0VnVjFaTF5BTSRJX3xCVGRxbGdjQU84fl5ROWguMTJ+RSI1X0tDdHdgUmlPUj5iOF52RSpRdmV5aitpV0NKb2hRYms8WUNZcX5WY2p2PU0kIiZZUWBMeXU+I1kpUE8sP250Y05tWmZbRFhiUGhwPnFSUT84OU53SmtLaUFmMH5BOEl3Y0U9XmB9''@;'; put 'put ''Lms3b0B7ZjtCP3MjJntUJl9fW1lkRWZNWjNUPTl2SChsNkxXe1RgajgvWjt8VzlEP2FZK1ovMisjTkd5Z3R6TFQiZldsZV9jXV1QVFh2VVlvWDgpTEx6bWNmYDVCZT1rJTRGPG5Cc1sqXlM4WVRfKXxhTyF1dyZTaCMwaX5UO0okJkN5W2UwIi55MjQibkk9Vnk0Ykttd0lARzx5fF5jLEdFdUpR''@;'; put 'put ''THNpNTFPZCVYZGRobzVwbyhbZzBHMX0qRkJxP0wrMDV6Y2Nxe1J6dFt4NVAram42anUpa3NGbz1rUHwjL2x+dDg7T2dEbEA8eDtLXW09ZVhnNzFbT1BKI1A7JH5yQjBpM2BvJX5GbUJ+L0dDQzxrWlFbO31bajF6NHtVJltYcXkxVV5LVUNeTFowM1M3T0BHYFQoVyE6RU1ncyZZbH45LEIyXiw3''@;'; put 'put ''dkpvI3VpNSRCP1ZyTEFKWEwwdHUoJldhISR7IjcpYHRNMTh2NzFxSU89S01adWddczw4IXV4I0FXIVJ2bl9JKEFvb31RVkBHRUxeVFFdJXdRcGBaOlckOlBKckFGTWF1WEZ0JCxHZiYiM3o5eDVFIlEyKnJGQWkydElXOl02eFoqRn44ImVEZzFnVV5ZL1s3QSNkKER4LEQ1aGNKNmY5dDQydW0x''@;'; put 'put ''JVp3dSgvOGhJQjlDaG5sc3Y9YiRMKkVBMFdNe3p1OklDZVYyYCw2SC87JksyfUNqVTRfSEpkRnRNdXU2JTRgaTdDb19FSj9fUiNEWWxKa3dZaXVlXlokc05dMDxtQUIuSm9CaFFbakRHQlpneWR4TX1KQ3xTaUcyUVMxIWFbaWBsZiM2YF19XiE8LitFZDF2RGo2TmArYzJRO0ciXS92X2B6OEdj''@;'; put 'put ''KWAifDlRak5JcSYrblNyMEkhcSNOcmQ2cHhvfV1jVTU1cUQxO2tYT11pdUQpQmJ8WmI4TlkjSi45N2k/PCxtWS5lNyopL0xiTFldYlhzMCoza0FaNE9rLnhlIld7K25CLCh2NmE9dEljU1MyNHJ9KFk3VGN3SCtAUWVyeW5eLCZxaUQkdGt3JEY3PllJOitXSWZ7ISM4NzJMNWgwUD15fXpIe1p6''@;'; put 'put ''ZSxOeEtzT0BjQ3Y6QlErRWZ5dUN9K2QpMFNjTV80amFmOVByX19fKWpseURZW14xO2FrQXwsXiZpOG5zaz1vMj9NLFsrWy9KYVBtRVBgRVdkJnU8Q3JyN31UZ2IzOmNxcXU5R0RVW3hgPHRjN3ReVSlDKlZwTnAiM1V8KjZeRWNZYCkxRDViLz5xX0tNTkJSNmdaVXlaRnldcTtkJDopfVBiMUMz''@;'; put 'put ''bmBqJF9PT3dsP1I7dV5CTmIleSshO0ZAQ2N5fHZ3eXV6YFNZNWkvcSYhQVhLKGEmT3ImNVZnOytVRjFxRTA3e2I0dzx2JWdEb2dXc0RKQUVrdXhDX1dCfUUjV0chLnRDL0hHekFRSC9JP1U3SDIld3Y2X3BDU2lKXTVuS1hwfWBde15gdWshR20oSk5LYFphV0oxIy5dX3I0ZjRQayNSYzdwPlpV''@;'; put 'put ''VEMoZj8lJUxPSWNKYUJTfEcsPkYueS41YkNxTjo4IzsoaU9vO2t0Q15IZHZJXzh1THhOS3pheWx6a0dudVM7S3FdKGhFVzwpSjdyZklaZjJtNy4jMWZwYkBdbVlvI3tFfXljLyM/XiQxKVU0K15CYkR4TEBLKDJvcGI2L3BBZF1dQX5eciNyK0A2Y2x8bylsa2UhMmBWXz9mL0R0Z14+PC56YSxN''@;'; put 'put ''RGEsJXNYOmUoSV1VZ1BmMzI9VjA1W3Y5Plp7an1Yal9vSiZFYjBYNUQmUE4sTzxtS0RrJC9QQFsyXyZuVm9GOUo8R2RZUFchbCNXIXBWJU9pSUJ4NFpUT05OUnldUWJTVFMmb1ZxTi4uMXNebkZfT0orYSYyMTtoJGlyPiYhc3FoPkIsVW0zYyl2QkduOl9XMXxTJmJUc09zYlpoX2FDclQyaCkz''@;'; put 'put ''SDt5Q3gwKiNZKTRGZDdadl9bTVBEc2NXUV9yT3wkKUROKG1GQiIucWNmMT07eyhjQzR3dl9UXX4weyNWYTZGIyNSRn4mWEFASG5zPDIlcEw7R0YrJF9zTGpOZzl3UHVpX1hSJkhmfVs1cFQmPUtFOWMobkBVcXI2UmVsWD0pa0thXSMuUEQsaihCM2lNa1smbERdLmp9bU5bWyM9QDwxa106M2Fi''@;'; put 'put ''QHBbWVAyblF4VWlLRnI6NFBqflZnUlU9dTNxKysqOyFFSCxtd0dlI2R3MmB7I3dCb3czckdWUiNySVtSPGhfTDIpdlRRKlJbUX1GYWxFczBlWjowSk9hK3R9ZDlTaFQrRnQ/V19sJDBvWD5MZX1lME0lPE8wR2FpMUpFKj46UDdKW0xxdV9NJTQyKixVWUl2bnI+dVZmSVJrX0k5UjBQMCNfWndY''@;'; put 'put ''QGFETE1+UjVyQ29GZT4mOT5tO0o1JWhdRmdPRHQ+cyMzdGNuZDZwKFlidXZLWyo7Ql0/MG1ENStSRSl3Y3xRbFJCXjhGKD8ib109VCVXeXh9KTt8eSxWVnsjRnw8RHshYzUyZkZXUGd1eVFGZEc+Xi9eP15weUQ1Wzl1MVtFI3dsPDtzeS8wNTIwfHR4aD10N1N0bFZ9KS8od01fXz9iJSZWVT0k''@;'; put 'put ''JjdndXt9YmdnSDJdOl4oO0tAIjdUa3lgaz0/flRHJDlOMj8rQn4pZD5GNHZXW2hUPUJMQzhEOERkWSUrLjhLfFcydEo8QzZvPEhbW3Vta2c1Pj9ub0NqKnBEXnFtfH1hVyZpemtiW2N+SDZGVndZVyk6MlRjNCZmQDwjWDpiandqRSl8SjhjbGtuIVB7OEB1U0p6PUl7ZVFWYlpZSzJSfiUsSVss''@;'; put 'put ''b2xEOmhoKHdSNjtQYj89Z0U8TXtUdT0mXV9efF5vaEhyRD5sMzUhYHJET2R3ZGsicFEqeUxpT2Q1aS8sKzhSN2N2SzVkIUVIfXZCJWNQOH1Jd1VJeUBAPFsufUtaWyNOcnshTyFPUXR3O0UxL306bnBUSCttYnlqVEQrR21bKDQrZ0UqMXh3QzpTQ1pmIjd0XitWPmNCPUd4TXJ1c0pdd3l3WyFq''@;'; put 'put ''NT4/PVd1WTIiREx0bTsoW0xAWjNjNVhaLEpVRXMzOitwREJQdGNqbU48RyRrVEBoV3JPM1crWHQmRVVOVTAyfWFgcjAwZGBbeFIrPSJMUHwid3trO0pFcl0iaUY0KD9MQFpvTlFKek9KQ2FPaS9eaz4xMCY5KTBxV1QuVio0aGU6JTRLZ0l3KFA4eV1DcEokR1VXJHl3MD55UGhCIXV5VHZhRWVE''@;'; put 'put ''VlkrdT9YVzU1cW8uPXQvUzNlUTdkNjYyemt1aVZpXTZqeHFubWArZlhJUyRAY1ZgdCw3NXVoWWZ9PWRuLiFpKm4qUUxpKj83Qns0RiU8RE05c21mUEtyRUBSTTBVcTBpNiEuQkI+QTE7OyJ6clQ1KGlnaXE6X1coMCMveSp+LHJTZSp2YkxSdkhTfilRP2RweThGNHJ2YHNfRUM9cz43M2dNSyhx''@;'; put 'put ''LjQhSEpbWG41YnNOPG9PMkk3QyQ5RTc9YiFzUDVjRExCPGtFX1pRYD94dFlwdjsobiYlWmdncjA2P3s+eEpGYjB2eGwpcFVUJmsqPVZVQCpZej5zd2c+P2B+U3RFWStILGVLK19NckcvMHI0ZiJMXVlabzhRNF0/VkJfcUohVjBPQV4/VWdlJmU6dnQ5WERlYF1kI0J2MEIsfH46ViJPXWxXaFU0''@;'; put 'put ''eFNmSiJVbHNQYDs7Vk98dnhbTXgmSVJwfmQyZCtHLiFvJndmcklCfTEqUVA3TWIyeTQ4TyNWUmdEXmVpJHlUUTg/U0RuOE4rfHJwPHdeRkRxSU1FTF9nRFspT1RjcFl3ZmhUdWAuL1Fefm9vWnM4OztpUCQvX2RFSWdBS1g7PXcuW1gzKFM0VVtmWmIoayRoRlBoaks2JU5bZz9Ca1teLzJGS35t''@;'; put 'put ''TXZDLGphP01dNUAxX2N0OyxHTyhkPFd6P1d1eToueHJBWD1XNjRpKjhpfmN6UGhYbzZmMkJpRVZzMk1IWjMlSTxicl8pOlddZHAkWjh8TnZDRit1b3x1MGFsUSZ+YWdJaW91WFtXLktAR1lqNGVvNCw6STp9KT1UNmN7RWxoPytnVkRaezUhc2ArOkp7cF1RZSw5S098fGV5QiZobmhPQitSKTVx''@;'; put 'put ''JVlxb1R6Y1khbjVlR2g0ezpOVVVtbm94WENrZSxDPiprOU1zSnh8fiJ+SjFFQSpsaDZeJUBRXTU3UDspNHpqcXB8X2osTSpgKXtHbTksMVR5PCJKYnE7PX18JU9IZGYhOFcuYTgrfHtTV34+UnFmWDp3XmAzZDpMb055P2AuOSx1blZJajI8SGBUe2s3RlBTRykwYjo/PChHclRkUlFiMVdWeys8''@;'; put 'put ''YmV8JF5sfkh3JDVCMEpRSiJLMD42V0BhX1VmR0dTfW0iSDFae1A/eFElSWRdL0xJV2NGd3ptYEhHVjtOZEpmRnR1aV4sT3FGQGNgbE0sKCZ7PyVZKTJHPTRGJiN0SkhfUFQudSFMSzozYjI2UnM5Nj0qezkvanFOT3ZJbFVqY3I4L1hDTyQ5Q0VISysmTCJMXlErRUBdeWk5ejAsb11OOlRDbiN2''@;'; put 'put ''dUNRamxFNE9HQFVWP3wldC47dngscy9KTF8iL0BDaTdxJDIxKnZ1e2IvcG4wWnMkcipKKUMxUlQ/ZnokNXM5PiU4K2dPI3Z4bUNkMUN5Lm1heylGckdELG07SkF2SHteblEvSj5kZ0NqdnQzPldXY2FIKmVUQGlUdDY8UHNaL04hTztlRFF1MHtleyw/W1opfXolVyspeTk/ZFJ+VUIjVUAiRCN+''@;'; put 'put ''a3RvUTxJRkN0amZHaDFpRShKZE9PMjdGQzE/M2JQU0ReOmlEMH5GayxUJit1Vz9SbSZHUWpdVjJ1d05mcyopflBRImRCJHsobW1HTUBpbF4uME1pY0opfEFleysvOHxlSGp7eigjQHRdSUFrQEhZK1JnWF1iJnU1ajUjI19jMEckeUZYNmdYLF4wY10/YX4rdEYzQGQkLjtMSm5lNFNZdEN7dEVW''@;'; put 'put ''OWllSUJnWS5ncTFoOkR6L2M1V3V7YWFDbiJeflhZVSg/LmMzOkA0TjNWQC8lelU9LF19QlhGODF1ei5xZG8uXn53Q2Z+RUQ7QzE7QlYlZnhoM0UuS0NaI11RRjw2cSspTFAhIWZ1fjt9TnxRc3U8YkNYNCN6YGZ9SF98ZyMrT0BEfXpAKzVqaWdxcCM8K1RfOkIhayk4eTdbejQlKVhjd296ZiVR''@;'; put 'put ''ZVN9W1cpMmxhRzouYEJ0ez40YEduXjNgMygheC88cjBKKTooTlMkZSVrO2EhMk5aJDZrWTt9JGorb3UkUGxYPyI6cn1XajZgeGN9ekFDKHRmUiFnLHgxZ3IzKGI8ZDxkVyRtIl9xTmNPcyRWLjY0cW5vISFMPkRKfl9yNTBnVmlKR3g0WE07X1MjZkovSCphdVQzRGwzPkM9NWRLSGFwa180cH0r''@;'; put 'put ''Yl4sYlZXYnFlPlYmUFtLLnxCVGg9RFI7YlR2MUl5KVVjfSEoeDY7SEcvSUROIUpuOiluejVbcm1kRkAxWzdadD9sUEcqYz5tYSpKQGZDeX51d289MTQ/bl9IZ343KHlVb3BrUzY7bENWfUs4d2RxfjIycV1IMEthTWFCZF9xQk9uXi9rSSt2Tkw5ZkUxRHtSZlMrOysiMSExOTJBIU4qeC5WXVk3''@;'; put 'put ''JHE/IXV9K1ImenszLGJ6cFRCcmlXT2BrVF5DW0skYHNZNFpYZyFkM1VyQmU8b2tMNCVeTSQuYnh3aWA4RTJXYHBKUHNoQ1JxYD09R1p4W3R5fWFKUC9GQ0BFUHlnWHFJQ0RDczJaWkMzVy9LYVlpJDhvVDM1P2A3K3hrVUhQLk1dZXBVdmVDS2oqOz5KWW1ISDVqcF4pakpiLzxoYzRSVlB7SWps''@;'; put 'put ''aWlyUU5aPmtONG8qKDBbU1hWUlI1JStReDQ5bjYzLF1eUUo9fXZgKC8oIUNOUkslZXpDOzRDfEAoNyJXRTQkdCJBS2FSZlU3X0pPeFdlO1Vua0g9a2I6X2xHNCZmQnk9SmZzezlAOWhwOn4+M1V+d2lhWGxZcUdwbTtEeWdAfWFpdEArL25WZi5Eb1Z+S1ZxUHtFN3skNT5XQDJgay5HLGhVWWl9''@;'; put 'put ''ZXtRZzE8TjM9d11uVk1Ob0h8aDhrIXF3Wjs2UDo9MjcoNW1YZXdeSW9XajRRJm1SfVRoZ0ZXPjhKRHU9bkV1KWNsMU1DbCUwaE1BWDlIR0ZHQ15GKWhUentpX2shQn0/MElQfmtpfkRlLygzQnhsLHhCSiJLY3g/RmRmL3R3YTV6QyhEZUlrZnMzPzE2N1JlZXFhXSN9ISJ2T1Uha3t8SC9xdyhH''@;'; put 'put ''YkYlWWtEN20wemA4Mnh8PHwxNH5NLlhgPVdfUltIZDx0M1I0T1k7JXc6X1FndyhQNVkve1dqOXhgXkE7Zk08RkVXJiM6S0xyXlI8TT8jMn1JREcoWkxGR2xBSS40NDBdJCxNams8P0VQdmhdWDp3UWBjaG8sQng4PyVHJi8oaiQhMX1jME45Mjg9P1dwajpSc0RhInZFO29jUk8+RGpQcWwhbDRO''@;'; put 'put ''ezApYig8WG5zWjUubSE/ZGJFb21SYjkucCMiVXdLc0czekNdLzJ3bCw9fTE0LGw+Tl95YiFQcF1LODMvdzlGQyNnOXd4PVhzYjMkSl5zRz1MMlRJVVVGYldZU2NlbVFDfkw4RGdFUUgzfls7PUZhV0xEKHxJdmV9LnI6PS9MZjh7TVIjYVVaWl84c1AvRjs6ej16ZltJb0pjSX54ZzBLPW9bQkE9''@;'; put 'put ''K2FrLFZxVW0jKUI/d3pPajFoTkEyeGVlcE1vRiFjbUg8UzVBelRjenxyXUtVcnk1Q1MvalBDWjJWNE9+X01kPj9tJChEd0lfJW0uMTA4YDhZdHJIPFhlNylreHssVTpLXllUSiZnWFNxPVorJTg1XktXdG8+NFZpX1RkNzpsR3hkeW1oRWxTVmxJKj5gY0V6NTFSK1pHXyg0JVdhIyxldGZ+Pz1Q''@;'; put 'put ''VkpbOX52dzpdODFpUWF1JDArMFg8VjVDODFIPk99NlhQRDM8P1VBRjBCVlskUHRkQylub0Q2WHddQHM5WiFHJWBVU3hsPl4wPDdleSg/NFVyYXFXbGFLbjhJR0dgRTprSVdfNHYyVkgjN2Z0SUR0VmlBPGB6UUEhczI8TnExdEx6aTVJXT5XIUMjbiNCQFUzVG9pdHRuPnVJZ2FCQ2d8eklNZnZ0''@;'; put 'put ''KD82ayRDKSU9ckZiUHxCdTcsSj5GImFWW1UrelRtM2Q5dDhse0N3YlJpaUM6JjFlNGRNPUp4InVgb19dUWh+JGM1QlohVUQ/Wj5ZLCksRVVaTHxrOjomS0lMUyh2ai83UVkmczpDb1ZNZCtGcGUiKjFtI0J0cGZlVjNPJVVZTTgyRWVGK0AzM3IpNTBYayVHKDF8PzZXMUxLXWQ8d3NRcVgrLiI9''@;'; put 'put ''RExGKW1mfEJKOEVaTGlzQVA6Ql89ekVBKkViI009Nz5JZT1UUXleLk4va0pEUkR0VGp4Zjs2ezo4Qk8qKWdMMXA0RlJJRHIqeyF1ZnsoLGQ0SXZXQWksYVs6S155bUFWVG1FaUc1LFJFdWFefUZZNihlbSg7S3opQGx6S11jblNWV1cpOz8qeUNSI117T1MjeGlzQFokOltgIWFPaSszOz1DTHB0''@;'; put 'put ''N25Fal1WaV5wXj51UXZbb1R+REVqfmp3eU47ektSaVREJjtbTDkyMUZ0NzFXZVs+cSUmS3lhNzxUenBAUF1QcTcmZi99cHE+QzBbXSVgY296Qno+dl0sRW1WX1MpNCs7QFZhd2lHTj9EPDZ5XzdacWoqcTZ1PzIve25GP1AubH02Rj1yK3JqYHpBdns8aE9kRUw/JlowNGhUWGc4KF9wXXAia1Up''@;'; put 'put ''R2p0Lys5Tjc/VWM4ZEhhUyluZWlAPWVGNm8yV1okY3tkKiIla2ghK2YhW2pVTV5XI09oZ0sqRCorVGRUM1VoYl87aHdSQ244O2wzImdgbms1MjxWQ1NNQHssN2tkL18jN3VSNztZZSNIZl4mT25+eHpYR2BtUVJlPlEydk5HNT8iUFZRc2tneWIpfkF2QkpjOy98Km0rWX16ZmFdVE93ODVVbF0r''@;'; put 'put ''PC5zKDJgaWZwRCpTSXs/RUw8QFVjRG5kV2FoWlRiJTprWGIhNVBBIVkpWzt7MDU2XSNCIUhxREM7XyYxN1dbdFBGLD96Q35aX1llPV8+UFU0PkA+YGhpeDNdeU86bkNPdDJhI2x9VXxYPjMpfVRZJFtgQ1gjKUFFcylPWCpNX2JXdDlKNU5uUjRbSV5iW3UwSWM/I0xiSmROJE9tSXdhNTJ4PTJT''@;'; put 'put ''OTdJcVNSdGMrZjZXYClnZnI3TkVxIl40Mls3dzhGYUJ+REtxOTk4bEIzOEZZIiJVeFd4fWlGaHRfOEYweihmUGcoZVlXSSQjOS9bITBNZlAsXTZmUmtxbFFRLyZiRkBIWWZsdD5TP0w7KFFkTkNqZ3JtQiYpPW9VaV9qKEsyOzYid0tkXzZ2NjBManU4ISR+fGYvYDdAJTFzI01GYSw9InAwQzhy''@;'; put 'put ''KVZYRkt6UF45WnI1RH1FNz07cSxrQyNKQm9WSWIjSltZIlJTWno3IlRCfShheVQpUDQkN11nLjdDPDNCQkFnZHYlNH5qMDZwdyFPRnwsT3o3akhkSyhOVGFoaTg4akRmNiU2clpSUFgjZTAra31gcFdPTk5wZyVROSZqSENyfHM1YSF0KjdufGU9eHQvUT40IXRjJTtffGB1VWhicEMpLEk8fSkz''@;'; put 'put ''VVJ9e0hgek0+SXxNOCRRUTlubnt6cz0jPVp2Q1YjO0g3dWooKDRpUXR1Vmt5P1hWTDZvL2xkPHNeUXRBflJSXll5JEdiTHQ+VUV9KHZATS96ZTp+aF1uXj5+QXYjZzUzVStAel8yX3NNPDB4PDQuTzVYQDFGWiI0V0IjbmtSNHs9ZSE6OjVNJkdDKUhRZkxNKTRyVF1DPkR3cHRYIU9fJHlAZDps''@;'; put 'put ''bFN2cVZTbmp8TFl9OyVYRGVTWDlgNUB3KFZfalp8K05maEUuJlRxLz1AfThYMC9EVGB1dD0pZ0JoVXd6P2smYzk2en4/TCpqIi9NbWI/MSQ0YHRgNU8iaW5QWFB4PGVsKVNoUT03UmR6P293cyMyRyZLdFN2JWVYR2VEPTw2aGEjfG1scilHP0BHSW9eOVJxellYeW5RdEZWbjppQCttIWt2dm5g''@;'; put 'put ''Yy4iNl5lejNua3pjajIrZSkhT3FeSk82YVBVbjhoUGAiMD9HO1FQJDRVWG5XY2hrPVo+aih0SyxRSW5Hemt0aEIhZHFSeX4+PUc1fi5adHBsWmVYUlh4LzZQT3BiXVpeWD9qN1Bfcjh9NyxsYjY+R2E2cmt4amQwP3RuayFmWj5KazcsVj0+SzpeQy9Pb3xjdV1zIVQuZDhscj5ZRkNePzA3dlY5''@;'; put 'put ''clt+Tz9pUlJNRXJ1I0pBaFZYRzRQazFPcC84IzpOPiw0VH18RyJ7Kl9VS01nN2xIQnc0KCR6bU8zSEluPXUsejR+VEBNTWx1dVkhPXFsNiV6anF7LyZFKGlMe25sTls/P0Z1dmVCTn1mbH5WI3B2WyV7UmBNWn57diJmRT10ajRKWnR3PVh3eTtXSCohYUkmWnJSJnJQXVEvPGN4KjQsWlNjMC5D''@;'; put 'put ''NFkwJVkydWxTa1lFe2QoSS4zRj4vdi4kIzNBKyIqNFNySHpOK19fYyVaNXJqXVgjcXdnTVFgQmNTV2s2NiRJcHpNe3ksbjw8fStsYUFxU295LkEhQXc9c35Jdz5XKEJ3N2dPez1AKCUkWjMqOWZyKTwlRUdKaHpnTk9wdzN8MV8jaUtQeH00SDlGfjlvbnFNWEg0Y101OUlqNjlDXXR7MXxVRmpd''@;'; put 'put ''MVFNKDRwUnhQODxLYTFTIXQwOixgOGdveHxPREN3Un5LJnJII0VuaWFgeHpIc0VOQWF0JlJBeE8mSHQhaG9TSyhHMiNKKntsbUJzSDBnd19CNjciQWU+eDI6Tyt+ZiNxN3RtSExwPWZyMWk4NnY/fDYzdW5fQTd0NDZ8UHZTKUoxQypWKlQqcV8kWzV+fVtyZXFFR3BBdndNW1NBYl1GZzp7eVNr''@;'; put 'put ''Ijg6SmJuUn5vbTJQMjYoKHw+U0xoJDN8MD4mRkQ7Qkl6WzFTY28va1prQD5WdUgsSmZJM2ByaFIoK05TcFJSe0tLZ0M4K0gkUSZ0aWFadklubXw1cTNtPkZJMHp8R0VbQnshTVhwUUpIezZLIXpEUVVdYENbbW12YnZvNXQ9N1R8amtNWz17UGMrSnJiWWk8QDw4PXFwaGVmXSZffn06dm9mLk5K''@;'; put 'put ''KTlIMzZ5REArWX5zP3gpezAyPmd2ZDI+MXxGa1pbSUk1OlsldFIqWj0iQCo1KEc+NlkkVD9ZYjEpdGY5WikkNDlwTDpZV2hCdGcuK0t1ZUxhO24zX0VUVE5fJlQhdGdNWDtWekUudip7TkREekt1eVp5UnJMQHk8c3xCVmBxR3BfK1RaLF1TbUZTTkN3KWpsNGhLX1NWKTsifCE4cER+XVZJNGdb''@;'; put 'put ''KilWWmlZSjFlMW1NKXtGdm9KfSw/M1ojYCYzVEFLIkF6XmlWdDJwU317JDk0MTU7SFVmaFJmI1ooeFpPLEYjOWZTI3shSCZ6RC8ueyZwcj1tenloanxGbCwrc3A1eT9zWS87K3lXMTlsJT5qZ3ZrJUM/NWdeJVNvKC9XVTh0X19+ZTNSRUB8dy4pOXA8a1REc1R2UkI9QCZleXw+bnQ5cXRkQ3Bw''@;'; put 'put ''SG5ISmJnLz83MVRiIUw8JF1PMkN3em9MN2RBbyRhR0FNMyNZSnJ+eEVaS2FIOz9sSGUvOEJrIUBmSGNuYF08WylhQVZudFYhRy9PIlYwZixqeT5KVkZlSGR7PDVfanhdSV9eMX0qODJ0P2t7SEZuRHoodC8wKUhgakUia0wvVUkwX0spTExGYi5MZn4xfUZrLjFyVVtEb1FVPndwcWU9KGQxdC4w''@;'; put 'put ''WWFSYSxAcTJqUn1wUkgvSShnTFk8LkJyTyp8IzReeXIuQkNMMSxJLjpRbmcpZk9MYE4+L1lKKUIkIXAzPUdOVHZrdixiTjZuRGouJDgxNlZvMnI0VWJFOUk3dyN4NHc7Wj1vQlF+dkVDSV19bHAkZmVTSGErT0tqOkt5OD05Py5EKlUpMSlaZihfOGtrZW5wS0o5VSZ2aTBjdG5pPDZ8eWQ3OmN2''@;'; put 'put ''Q2EkRVd2OzI1LGY/TlE0ZlQ0SmpUL2BOey5zRyspU0JjMldufF5uXlhpWkJneCwvb0dVSllhZ0dVQDc8Tn12KGtkZXpmYFtBaCpebjN4MXRpdUJpKE5yR3hNKm9eIXVDPzpCOUElKkNjKjUvdmspWGdeWlo1KDIwQm4qNilJTTYqOl5DU2MmWCUveChOaW8rQGQmSHQofSZFdD1Xak97LFtRPz1+''@;'; put 'put ''X2s2QCtaSVRWLyZdbGNtaG4yJjhZdy57Kn07alVOYF09cWVlaC4jXTV2UHUlYiU4XXU8b0BeLltvNDk2TCt8XileWH5lVCQrWSRlTm1PfHxjLHYxKi9PJihoLC9NSTQpcVlXLCZqTj1nW2dFUVNCZXUvaz58cV02Mjw7e09SVFt6PHN8NjBNYUk+ZWxpcH5BbzdadHh3P0l8THklWHRwQyRnaEgr''@;'; put 'put ''ZEsoV0ZaS1BlNFZJdz1WV2NHZDdwd2tTOEw1a09rfD1TK2UjeFdxWG4qOnEuYiV+LCFiUDA8RE9DRFplQlA4SyQiV1V4dyJMM1Q9PD9WPnksKXg9STEmPl5TO1Iid2dWIkMmUWFdSk0+dkQ3aEd+dkhzNDt4ZCJQK3pZKVttIz11QzVQfSVTckg4ZmgqW188QyhiaStfWHtJXyV+RTt3fV9SKENb''@;'; put 'put ''KV1XQ15aUTIvPmFFYCgjayEpQj5lYTxtM1NJfTs7XixUaCxXJHMlVHRSfTdZQEN1SXcvS2Q/MEMpVC83W2lvaHltVjc5LnpOb0Fze0wjdzo/bD5wZT1CRExAOjsyJUx2NzVUN2c1Ll8lcCUpS15nK1BAVHQ8NldoYUx4WE04Wy8qcko1ZHguWX4vdkJJPjJbMWIkVGpRU1oqRyxsWCgma3ZAXWR3''@;'; put 'put ''MixUOzFdYTpwR0NRWU97YHYhOXAsU1AxeXxXUGgvL2hLKiNEcE1SKWp2PFcvR3hVMipodEVIVEk4c2o0Tz46ZFglUnEmc2NsITlbKkBdPTtNM3kqQmshPTtsJk1tZnw8NG1kU2JJTE9EZjkiaFhfSFIyQXd8eHI0LG0+Xy5SLzBjWF9pcCNnKUBUTVVfR2J2Z19KQ3RkMSsvcGZkVD59akJ1U2Rf''@;'; put 'put ''QSgkPy89JmsoR1c0Okt1KnMoK01LTilgW3chJihnKXlTeyF3WVBIJHhCSW9yLE8rNTdaNyI3TWpBUzBvRkRoP1lWNT52OXI2fDdybCwpWzpVeDxmIyspVFpdJTZ1ajhCRS4qVDltMClxdkNHb2ljX0hrKylKdEw+TW1XTDw4Uy8udjNiYiZwdEZJVG84ZHppLl45RCJsJS5gU1RWVk5FVFlyVVhx''@;'; put 'put ''KHlgVENWcVQmRGpGWnc8X0I3TVVHUC84X0BCRWQrUnwoQk1Manxie2tAXzMqejxqcHdKP0wvWGlnKTRTRjEwMHRAY049WWdwPndrdG80ZnosOERzJWZ8PGxgRDsqLmJDalZQNSEoaVg4OHleR3M0JkRMPHFxIl9xNmg9PHdYKWYzKixSfCJHT2xeQWFvRWNVJGoscl1HKF1bY1txLGBLMjpzO3hO''@;'; put 'put ''XT97Ml9adFgsM2teTW1hanFhZkR5ZzZiOWdwaldTZ25pIiJBKy82b2ddMTlhanAqQyNzJSxWNT9LJGpOeDxfKGJ0ZWB8ZlJLUl1LIj5wVk5RTlAzczF5Wjplemhzdy5mcCQwMFtiWWFyO3d4ZDJiMU8uaE9qWW1rLHZoYl5gODJSX3RkNFI5WEJpbU1GfChwaGFQI3EzOF4qW0l4WTZ+YT8qZCFg''@;'; put 'put ''UHskJDMrLCRkM3leXywrJXVaVVlSMDtnRURZayRpK0h4fHpvczNjPSY/bWFpd0lWIVJLVSVRaCJzRmhUST0vMzJKJjR8W0UrUGpeYDg4LGx2NH5jZ0YsQGAle3slX2xkOmI9SUAqOyIhb3Faal49OyFYXXw9Q0cjRldfTTtsbnljLGAkfj1nTWkkJjU4dXFyTCtfcVRdI2cpdG1iRklnYkYhMX5P''@;'; put 'put ''P14qSSg4MEwkVDI5WUwlPXkufnl1eyhZcFs+Q09JdjdkPS83aXJMRFZpImcoKlVaOyNJRkhWLzxBcnZBeiF8SHkqWUlHT3BkfCp5ZW46KGlqR05sXX5pY3xyX3koVEQ0MStdNkR3OzZCUm9NSGVWcj95S1VVSHclejc7NExEX15GSERNVi5FSHMqZGopVFt6REJWaVRiajgmSlQ/Rj9hQyxFNDFk''@;'; put 'put ''dlB0bS5VLEcoaWZKNk9UbHg8Nk0xYWpOP3ZIaHApeWsrIVc0bkhWWHhbTjEye2JuNjFnWFJjNjVFVEorY2grX0poVDxncj1AMTBiTHlIPnRQOnR8OUdFRDkqUTgrey9BXWVbaiVbOTpdVjFTakpCUEAkckhEaSZnVC5UbnImK1o5cmd6fVRARjhiSHk2ZUxIYmReLGtnJSt6QGMvNkJrVG5lUktN''@;'; put 'put ''cVJLXkBLXzRsdjdwOCZ3V1dPU2c7MSspcmtUWCZfYDk2fmRSI1tGQl5vInhHR2BZNnBrJi4zVkV+RTQsTlFFW1l4ZXs0cF9tKmd4MntRVTR3UEhjO35uX2FobEM9cEl4cTsrLGp9Yy5saXs9Ik4kOnF4NT1GSUByWTdSaWR1V3FNLCsuO1ZdfE0ydTIjSEgxZ2dNd15VVjkhREd2YnFCV1cqe0RS''@;'; put 'put ''e24mfFM6aWVpI11FVGhGXTdHQkR0R1lRaWUrXnp5Pj19Xi4iQzN2PnZuamFdJFRNfkxaelFAZCRKcFRpNV5Ec0NFRX1aR3BoUSFTZVE/V35wMn01emFrQltMdWouQTErWD9fXSJzMnMvYWBPYCVPSEAsels4NjZYU1tVa2RHeF8wP1p4PEIjenEwVig2IltQVz53NTghUVs4dnReRCtTLiFYJGEq''@;'; put 'put ''RUh7elQwdCEmNT5lS0pKZmVVcDpCUDJmPVh5Wjg7SUZbKVMqeSo6Q05XfHMkNnxJSkZ5KH5gUGNnIWY1enAxR3ZlOCMrSE5FSGUlenYxcU0kQD1APDM0UChHaTtFV3Y1TCI8Yy9MUWQ0XjQ+OlgvcDlZfkhmc3JDW1ZsOXJzREkyfH0xYmNjPTdZNFluOmw9PGVwTz5majRFKkdsMlg1cEdtZEo4''@;'; put 'put ''Q1pCe1N3bD55eXtuKzFhLnBzLyJlNmdWamp2K3M0JWNxd0drMSpibjc8JFJ0d3FbNWldfmwxTEJoMHQ2cHVdfm1jRzBSeGl3WWUoT09ad1JRRVZiQGwkcn00JCgoPmhbRUszeUt7e0Jpd0ckNFZ8OihHPT9dLjw0cVYsYnY1fmk8JmljTjJVRFBRbk8me0N6cVtiJTs9aVNFMHdJP2E/LyFTQ09f''@;'; put 'put ''VFg0QXdTTU05YSV6IipHXUJsWmBFPjA1PjVwJFhrbmVpeHhMXnxRRD8xVTpuVTt+W096e0FtXmpHYEhsdjIvO3QlOm15UmlQczlmc3hfYXFMIWwkSHtkel1TNDBkcSQuQ2JKWUxVVFsqQjxZKCp8MShGSEZNaGxWY35EQDh6ezVsdFtEfChdKFY6ZTxRRnRtRnB7UGBxXyRJX2UrL2BISHVfakFD''@;'; put 'put ''cWZOLmshWHdHVmk2KlRGKlR1a0pHZi9IMyxhb0JPQl5QQTo3cCs+cUVkb1ZNJj9iIlg3QiFAKzx5KEhkbkc9NWtRITpvRzYkL3ZbQDE6R3lxPlA5TG4jTzJSVTkxJnt9K0VxfXxnelI/a3YxRzcsVlBkL0I/dHQjOCJzN3YxOCMyYVtfTWRMaHg8ezpfaFddSUszWjB5KyZhPzI8bkQsVzlAaElb''@;'; put 'put ''PVBGb1k0WW0iL1U4V2FLVG5ib34ra3ZxWTY4Mk8uVyl2TXNMV0JUTkNJaS89WDwudUtsZnk/JTcmbzpyPWRzfllhciQ5K0xhenpUTl9ycCNNb2ljaURVeVYjQDskd1R1MFh0WXtZVTRhWlV5bFt9LkhYPE5zaS5WZ0dMem5HREAuY1N6RVhGR05eIVR2Uz81UG5pdDtMOmcickkwUGl+QmosYj05''@;'; put 'put ''bl1KTDZvPSMvbXlhMWlmVjpmWjB5Nj9lTzd8WkNyaio4TyNOTV55PGtLXjNVYmREaTpXQkl3LkB5c2wkQkVeWW9hW0U6PDJCP1B6YHc2LFFOSTFiaXM0PmRzeX1JbjtYLyxre1A7dyl9JDVqfjJjZWFYfmhsV2d8IVNELFFAaXlVN3Q8dn4+X2A4L3E2XVo4PCFEYzxlPnV2TyQ5O09GT0xKNXNj''@;'; put 'put ''KmxlRSVvYXo8MWkqcF17T0Y2TUAlNlBmOFdzTD5FSU41eGd3cjM/W1lxWnFUN0oudTV8KFtxO1EsaFtMMmlmaXJwQGV2bV1UcllyeXd5Wk4yNzpLQkVRZTQ+cGY4UUJRS1NIaEJeXU9DM1I6Om9aPllBOiVvQ1E+MGF6eW4vXSJtNXx3Wk5QPmJpSGVIYFZKYm8/LDR9WlR0enp1P1EycFh5UVMo''@;'; put 'put ''cXx3fmB+MUw/RGJxRSIldyghP3pyeXxJPndRJlU5NjkuP3xCUXgvWHArQ1lZITMwKzRaUjh+N0UwLEQ/aVspW2VmQVtucWY1XVEkKWUoU01PVX4mTD4zIjlLZFQvIWtRWU9wV1J4NmQ0XlRYLF9aZUhYcE9dKX4+TW87UEskMFFLeC9kNGhsUHF0R3FaS2piPC82OEQsK00kO0dQP3RGVXNjV3V2''@;'; put 'put ''UjIwalJldlgmSlJYOFNpLndTMWhvaWdbWi9dQXJvLzxzRl9aTjhOKz07RUZoc1QvQ084fkF3JShhISg5alc5KllyP211TlMqYGEmK0d4ZlprYERyWixaUSE1dyh7Q3s0R05JNV9IO3xRSVohdlVacV9aZ0RPVSU5TnQhSj57ZWZUJX1hMXBmMF98NURZaUtXfjsoTmA9U2VibSl9Y1A6KlJyaUVW''@;'; put 'put ''YkxWRkRGN25YeDImYkApWnxVL2FvYSx+fjhoN1siYld3S05jQEJvPkY8KndAUC4+UzVbOEUxOy48Pk4oMHphSShdNHg9TXpMeHYxYzVNImNUfTx3T01meEVHcS5heXlbbipsdTgpU193R2tDKHFhVkFFMnxKKCpGcjo7OHhdMXpARDphPGxZSmJyal9LYjg+fEhCb21kaWFzZzZkV286JDJmYTRy''@;'; put 'put ''SE0pK058QnRyWjZHI3M5NyZwKE9fX3UiMi9mPnZDfGdTKll2bHVxcXRFWF0hdHF0KWxaVz0xS0tiWDYzUWEoL2cvPyglczBxVH1BVjtMb3d8PkdFK3MuWSZISWlnZD9tWkxfXXVVOlppPmZGNSg5enZNOTtbWjc1OUp9L0Qrd35lSiFBZzchPy40SVFQZ1ZrdER6ZVVVYGJNN2dXciI2P3FaMXg+''@;'; put 'put ''RWVFPT1hZmVkInM+YWFsWDV3MHxObHMiKzhhVmE3cDdjLn4qJHBbdU5FXl9dNS41L206XWk2fk9ycVN1Kz5NfSUiQzMoS15UPH58K2hKLGRLRG4oK2NxQVpvcHsmRTU0O2VIP35KdEUwe0ckJGNRM14+PkJ3Li4rRmN9VmFmMncwSVQvZk50U1hzNF1ROU1CbTgiSEYmc2p1ezNdVyFhLnEiUlVk''@;'; put 'put ''S1ZzXVRnLjRTcDVNL0pqRVNdNno2ZkNjJSomMy9lNW9aOUJ+PCkvOEdkIm9iP0A5cHNSMjA1Oj93UUBJQXwjI3MuPX4iN3hiIV5VQyN9X053PUk8N34iVXdAZkxvfEd5W3JlM1RtZmZ8OkQxRVl9OmlLO19bTiJRMz4xMWppVj10dmMqVCF0aW0vRXc3ZiFEJSNOJUpnRkhkdDRsY2BZajpJPyRS''@;'; put 'put ''WH4xenJ7NyhLOSlAdGJLQywlYztdZ2owISZbPyNoMnhlfmNWUE1kNm8ze1JiV2BOd2p8PkdAeERne1VZUVVbMU9fOnwsaEVlbkY0eDVFJGlbRXdRRSM0NEdSV1BwQSxlVzA9NlFWaDlobWhJfV8xMkAlfGUrbDdfQHcqXUt7LiFRfTJPeVAjcktjI2RkUDIyWFNwWm4xdXFjRVMuY1FIUHRDWU9G''@;'; put 'put ''I0Q2ZGEycngoMDZQYUlRVF9nfk57WDt1TXZlVSYpVHA+PC92eUZfTEtFZnoqNEYlQkdBazolRUc1THRfeywzdysyJm5MX2YqLi59fU9JQHMhaHY1QWpRfXppYGAxWHJNLlU/fDI1YGN+SHlOSmpTbEg6cWVlTGk8SV1NaXVIaHZwbzEqR2I3UFJMM3Z3RTg3WWF1dGFofFhIWEFZOjtoaFN4PE5s''@;'; put 'put ''eHxDSzpENEk0RixAQ3lmPjFOM2RXNltISC51QkZHbTIoNF57IzteJDlbaFNffHFdMSNHbjU0RkJGLlo3VztCa01ROjtfRkE8KyUhOjNxbE9pSGI8R1AuZyMpblZbJVlKYUl8JjtBUTElI0AobmZlO0NKeHJQJnU8OkJ+RlFsNz5YfGo7aUQoQXdGVklUdCtzV2lDMFBicDdTQEheejU8Oy92O1o0''@;'; put 'put ''fkhrX31NIisoSTRtYF4kPSFCbzUzLn1LJUpqWE48THtyJD1rVTxVcCMqMElgZmMoazc5IXZ3dVs6N2UxVlRoc0okRik7NVZ8UT0meWozWlY7c2hfOz83fXx3Y2lXezhsI0guRS56TnNJKjpvTkxuL2EiMSVhQmtuYUElL1J6PSxZPT84dDU9dFdSPT0oRFtyV21dOipYM3c1Kj9uWFV9Myl8YGEh''@;'; put 'put ''Rj0yKTdXNj9KdERQZnMxN2F4RGhQJSgoOGRYPVNQWE9LeFNNSmlaL3pjckdeKDM3PjJ6Um8iPEA3Ll9jRW95IlpvQCZdSm8lYldPNWBYTk1IRmBbXndMZFFoNEhwY20zPCh1Vjk8ansse2l2NFRYVj9hQmB7PUZLUGZZUC8sVzF8a2Y2az5wIXIme2lRcD9EdXA9aD1FIVUyImk8Pjc1dzQ6OyRY''@;'; put 'put ''Six0XWltLHBlWDZFeE1+K1E+WWpfRGVqUWtaTFROLE1LX3tyUDB6aj0/em17eGd2NV9fQzo6dFhse2tHQU81SCs1SWp4UGRucl5KOjB7PmcuOi9WXWRFQFApM1JzZU5YV1Y1dTgkMk9VbX11NExISSEuRk0vNGhHISx3V0ZWL2xXPH14TGNGRFshdWA4KFEyfUpSQiZveUxqNiQ6PiJXaFNvKlFC''@;'; put 'put ''cGYwcUdRP05APE91UFlZNTo3PSVAbGg5PSVoM25YfjteazM5WipHM3NdOU8yW2MmcltvSDEsYVVQWmxlL0kiRHlWVyVAY0wyP0w5L0B0Oj5TfHYzQ35gIWkvODMjSEk8QVtZXzcqQmYuantuakpwYG0+Q3FUTSE/NWZkImNeM25OW1djalZWfUZwITg9LkdIKngyPlNuOWA9ZTd6Wi9qTVpVeX5A''@;'; put 'put ''YkpdcDUmYnZjcEgkdTVbUT5dV08+Ym1TeSgwPjNqWjA4QkU6XjViMyxkbylMPyF7fExRMnI0JSRIOyt1R2BIIU0lWzZ9YndQOUJ3aHJIPE4jI1RGRkFtQHJMMysuKytEcmVRNz9qdElvZDg+RzVkZU8odzJXdEl8UDwwM18/Vj5TUl5+N09lUWd+PVdYN0tlK19AfklyOGliKyVJMD1XWSQkWi5L''@;'; put 'put ''KkAqOyVAMG1bUTV5c0BKZ2U7OWlUdUl0aWJdISxoOlQubzI7UHBxPygzeUhkKCR+dXk3YzRuKjhfW294RW5yIXN8JWhdRkdNd3V2d0RrUTw9L2EiNWokajsyY2pmeDw4ZkhiVjQ6KFF9VHZZZEpDO1RLPkMhb1shRnw8cFJMNU1lak4oQGQyZVpmPXk7XlphLj0lOzcoNSlCbnN+akV4ZSlLfkdR''@;'; put 'put ''Zi52dzRKTD9bZjVvUk5tTC9OYEZCQ2lvdnJVdnBUU3B6L2cxeHVdY11JNDF6dDBATSZ9LzB4RkskUmY0flF7bkxASm4pb1JKcC4mQXR8KjhJRVpwZktJSGd7XixJRCszWTh4eSFeYHZafWo+X1EhIVlJWSpPL3ZVa048ZzFdaSFORm5zLjUxM21rTUVTL2s8L0NHZDcjU3hrNmU1O0VrOz4/Mn4j''@;'; put 'put ''TEQ+cTckXTFMY1EzT3tgQVp6eEYpYyNpN1N2JVdKKEdDOCFAc0ZTQzAiWClZJVUmSHZhaWpQWjglYzwsaWt7JCh9Xiw8UDQ5QGIqJWJyfF8+V3RNTnlRKnZjI0lQUmI5SUwlIipbZk9tQm5wfEg2T0l6MUdZeTlGYWRXQ0paT2JGZlNudFgvJk0jb3g5PEhWMDJMPmc4O2VAeUJpO0NkU0RjaEE3''@;'; put 'put ''Xig3JihlWTBPNkMxPSJKal9HJnIqWFkqXm40KihKdmskREYwaTtSPnwhWkQmYmU1dUBRUjAwdVhXWlk4VVpPMTJdSEkmenNxanxvSisrQ2w5Pm04N0VLPnpmc2h5QmxSWCNheFB3Mn05RGBIR3piNUNiY1Y9KjJlOilHV35+N0lTSU1WYnBFeCFUWE1JNjM0Wn4rVyVAalVrQm0yOyRWRlc6b2ok''@;'; put 'put ''YH0hSEw7MHhPXV9YLjB7UTBEN31FUTlhaWF8ZFNBZntndGd4e351X0hwU1UzSUgveGNWJWZlQVdDYGBwfTgiS0lTc1Zqem0wWWdOe1VDZCQ8Zy5mVzd+NGVVSltkNmR8UCJscXBoZzdwPzkhZl9YQXZwY3B5U1FWZStqXW8oO3RZeiFRMGN7Rks6YFJ1JEJzeXREbW55WUQ7Li5GeExuOGRXY19N''@;'; put 'put ''YG92dDRZLGpfWW5JUDI8TFI+aGlDN1o5PUlRYUQkOmRbLFdgbU84XWI9SDxoSTRMKmNiRncsKCpqIThPbTRAbX4pSGhOPzJeWG9WY0M6bzZfKDdXLlJyelM5ZC4/bXtge0ZMUi9DLyQ9THhNaGh2KkRpQFhfYl8kYVUzJlV7KC9YU1h1PChwMGVle1B0NlQ5Q1MiWjZtY3RlXjsvd1FLTU5odSYj''@;'; put 'put ''KXxFYUpaT3ppZkQ0alhUZz8pfn1KSGh1JV5idkZBUj9deE0sfF83Rj1kfkI5X31kVUFDNmtNR2ZNRmcuQ3ZgXm8uVHM3NDdYNXNQUyUwSnZyWG9FQSg0LDYxXnNuVUZ3bCMzWEVYZ1ZwSylSSGZAOzZRZFUjZTNnbGMmKyxKIVs2Z1VKJEVAZFU0JENpNzxQOC89SWl4PXsxV20vaFB7UVgvTUlY''@;'; put 'put ''K15IcWtoVjN3fDVecWAyMFFtIW9LVEI5VXdVK3gjeWpudXgwRztBc2JVdG9AR3hRcGFHPXp0ZHprWyh8UWo7IzBdL3YmaGZDP01YN2VdcTNvTyJ9L0JUOGJ7UmVOZCl9YmhqQXRBIiNVcHN+UkhdYGtGKkhiUns5WiU6RGUmKGtAfT9iMS9ZRHxMV30lTiNMXUdAcmZuaElyekBJeWY5cHpPRWlb''@;'; put 'put ''Tzxxcnl2amNneTpOSk48cXBISH01MzBRMiFrcWc0R2N9YnFxMHlwc1t+XkdnPSordk5tWCZZUn4jQFFzdnRzKDg7ay5JVjU0UFlLMjk4LD1rYCE/VnxWelc/WGE7MzR9QCxbM0NmU3pMMXFhay82eD0lQHxQI3pONy5yVUZUUT47TWsre0tjYD8sLE8zdn5mY2g9bXRvRkM+cjVfO1Y5SlZofVNZ''@;'; put 'put ''diRMOV91VCZfW0o+Kntaek9tekl0KyU8VDZoXiRLTmYiayQiTWR0VnNkQy4iNjRqdT4oI3ldOXFGVkg7InYjeGE8ZFszZClANExaZTtLQ0M6fWE0Zz5zLC95PmlYS1pLL0NseCxDQG8lPzpZMHBecm5LKmsiZ0M1MVUrOHMhVEAkcU9wV3dRMShoUS40NzhSejxgYzxxRWkyeyhUcU5MeTk7fH4m''@;'; put 'put ''Vkt5cVcyRCUyRVp3PlozIWAsWjhiT04hdjRBdit1RjpSQDFBNkxUOjB2MS5vYyRkI1dAayRYZkZQfUs5dWBmRl43Y2huVUArN1plNmd1RW8pL05iOTdkMUI4ITAwZihbSTNCVjFFZGwoO0Y8aTtXO0NXNl48Y25zSUdpJF9LYCZeS0hZak02YHNtZVNoXW0kMEthNEg9aHl+UHFEenk0YGdiZFMi''@;'; put 'put ''WElYZkoiMj0+W3RhYCw9SUh6SW9STj5GNG8/M0RCPF1oSUxRdy5tST9KTllCNXY9eFpnVzsiOzQ5Rl8+X1daaHlrVnh9VjpvPmlDeWpDd09zNUsrYDA+Q1okLkRaZEBEO3h5Yj1CYjFZcGorVVk/RmBSMH1NJSEzU1tRLHZWS1Jhb2J6fTEoJTQkPVZnME5EL0smZShzLng8SiRdQWBbYUE/SCIh''@;'; put 'put ''RyFteyp1cTVGU0BGZEpLNkwsUGQ6SUw0R1dqL3VQJUQoOUZONFdYTixSZjY0UTYwej1DWkY2dGd+VER0ZGpyQHc8SHg6NHJ9NmJaWHNjU0dsNV4kVVQvUVF8amtjU0dAR0deajtYYShJMGdRe35QKzI0REI1QVpQKn5+Qy5mekdSbSNTKWY1Pj5XPi58e1pHcjcpSkxhdiNmSX1TNzFAP0NKQlNa''@;'; put 'put ''TEpqOTE0JH4jRHYoNk86aztGMzh1R29SdGdJWStIZV9LT3VGKC4mVnNreX4wSV96ZEUwPmRVQDs9WWwuTlopelJjOkxVcl1XX1dTVFZDY1QhNE5VPzA4cEczYUREVHpqKGFhbDhkOlVaNkRrY0AoMig0VFQ/Nzw4LD1pM2Y/dD1HbExyaTNjSVdNbkdCY0F1aX5HQCEoKT9dYmxNUGVufUZdey5B''@;'; put 'put ''X00xKjEiPDBMWmJSP146XzU8VkF0elc5Sy57TGQ9JjN0bCRQcWRvLkJaVXZDWTFQWl97cHouRVN6Y1k4bXJURDYmclk9enR+alFlP0UmZH1vQHRxYzdmL2FkM28vV2VYOVZBLH1rWilpWVlsR29QXyE6OFtxdXdNP2hvJntgKEYhaXBXfV1KSDtqMT1aaC4xYCIhSCZGWV5aKSQ+XylVeWRWUD9U''@;'; put 'put ''Zm1UTW1qMXM3ImR3eSQyUE0+In1UU04lYyU+UkRQd1BZXU94X2YwRT40QlNVVDxKaiUifmROdWo3ZDViQUlJbjNAIXk7YmxkKX1DKTF+Y1VfWHlEQFRNd19fcnhgPHMoeFBLcDNgOUA4dVc/R3JBOHY/SmE9QiQ3c0JtZ3JlKVspdSo0MT49cDMwSyYxNSU0eUtAdClILjRiPHlrOUx2fSZVKWJk''@;'; put 'put ''WEdTX25IeVN+QkU9aUxIIj5wN3w3InksWG1aaT4hPHosLnJxK2VFOnlUVmxGO291bX0+JF11RHtxJkBdaEVwUWtYNXc1UkpERnxlRj1HNUN4Tm0hJVJhIixiQ2hhRmcqYiZ5X1ZOeERIb2BuImp3LjU6eTtOOWpCenZCcV92YTRsXUcoKFF9Vn00d0sqNjpFe0gwT3hiQ08+SEQ7ZzE7enx5YT0w''@;'; put 'put ''KiFYZlBJKUs+O2dFZjBFUXNoR3ZRUm4jJm0jWl17X0ZWP15MX1ViI0chWUNKNGhpTW5SNFpHdWNyVTAjVjtAaEhDQExUO3sxJC88c0V1b2lyXnZnOSskayRDWipVTGB2T3tzYU1mV3ZQemM4fWVzRkp3fEQ9USM1RX5KXnlsVFR2QkRIQEFvT1t1Wnh3WVh2SmpffFpyR05PJE85eHd9SlNiRl0y''@;'; put 'put ''YFckWG5MbCNeZnpmendHdEJXRCE5P1RTVFZHVX40aV1EJW9FKXsuU256XSx7JEQoRn4lZzk5cWNhYyl7WygwNT4xN0ZJQmZ7aEA0KnFtT1YjcW1OcnorQ3xEdyJ4KHokNXpsNWFLJjVmZnZSJDw6SD1Nfm9lMjF0cGBhMHomcVhjPlB3NmMzbHE8InZ1Wmp1KH1vMUJ6PWZxNSpsRF9XTlYwYy5N''@;'; put 'put ''dkhfP2FJVWR+ZTklezFFQiNEN1hiQTFjamxuMF5EJktiMzlYeC9hNEd9Lk9IPnwyWlldTlg7XncmIT1FXyEqYipCIyIoMjFdQksqW0F1b3FlMTImJWFQQkBXTlZOMihqLEB6YVlAVlZuSWdaVHJ0XSZLW1lnQmQ8WV9aOThDdishWCwoUTxSYE0/PjJsez5rQ0BtbClMUEdsS2QySyk+YHZ5eTVP''@;'; put 'put ''O2B8N0I5QnlPZFJqcyxvYEpFd3BlNHBrKCtFOXlGWGJebissPyUrb24rW3FrVlJtU3olLm87eW1wTSpZJG82XnBMZEViN0E1Y3BUSVVeeXdhNUlETGoxd0R2Ljt6OkxWP3ZseEVaSDhRK09EUVhiJF5SYj5NUElObFcmOn4jRldBbV4/ZT9zL0hHenZKeEAqKCpOdHluTXkzTERkbHJYTz5RPiFn''@;'; put 'put ''UXcrVkBmIXhLSHVrWWBRbVR6b1olZWoqaH5ia1Zxcn0wcDhpcH1kODs1JHQlSGRtbUQ8JUZMeXp0TytheX5GL3l5YE96SEovUG1mOzdQTWJqMiNYKWhEPGNMITJscylMRl1dWT9IPkV3UE5Vfk9ufTlzQGlYNmM3fXxJZXs6bDZdaz5GUyJYMHNFN0k8QExUTzpbWFhFQlRQb1l2RXN4SXRWdyNw''@;'; put 'put ''MjYpTSVbXW9+YTNZXWgwZ3g7TXQuJWY/QF5zKHhJPCxvXjM9VV9qaSxyZno4YntKMUxyQj5CaUh1KXkiNWN2NUpmVWQjVl0pbUtRQW9kfFFLazs3WmpIQ2IwLCxUcHp+eCpLYCohbyR3aFlSWy9xPE9MN0EhISVsWml2MT5vd3wvdyt3QWVbYVJkJXIhWDRKSTNWTnNNcDJtJk0oUj4oRTZ5Jmw2''@;'; put 'put ''TzpSPUFpd1ZyZlB0KGRZSmAvfUc+I35xRzJsNWFbezApcXByRVpELmxJbFsrNy9NVn03KmN4OSk0RztPPGE5OzA4dDsxTVJNYFYwOz1pbTpsNUtoREElQnB1REZIVTIlSnBnSFVFJVZyd1grfTJhQ2R8ajdydTp1cT8yWUhERTBlTj5JRVNkN0A8Y2tHK2NvVzE5REwjKytDe0VLTVpxJTghbiFE''@;'; put 'put ''S112Omk1VVQ1emt5a0NXclB5aGhGfj0lXXIrd2AleEpka2kjY1J7cGB+fWcpUl91TV5wMDlbKElELkxINXgkMnhGQ2RkQi5VWi5fM01xVSh8Kn0uTiZNZHx6ckJwfGFkRUxiXWRCOXVCTC4oOW18fT1bcnZtYGtXd3heYFZSbCM6Y1YucGA0U0U6cmx1NFN6L1EqaT8ibEM4XkpBVSNXUTMha1tZ''@;'; put 'put ''aC8+YUlAYCZDJFRDRVk2RG9XRV0qbzFwLj9KZjlCcDlDbTgmaFVxSEVSNl9eSG96dGlHQUpAV2AhSVtiOjkmTlduPChUPVpvXjhgQWRoNHZWbz9FfEpOW25ockxbaCFsIWY1ZWxyM3prZ0BydGMiIjNBTWBScyI3NyRqeSFlQ3dORCU6fUhbdHRydFFgUHtuenAyd2A4YXc5XWkxY2pEMlRUbDQx''@;'; put 'put ''QyU7KT5Qa3JGSyllWlszc3E1LzIkREAvZn0mfn5CT0BsNVJsYltkQi9TL2JMMkgmSGJ2QktQSFohSy5rcGQkejswa0BCYzsiZV8vXmR7blE0ZUUmflhuTVArJG82STQlbjAxL3F3P152TXVodndAZ11AcG09WHxAQm0mIlV8OzRXP2VGPmw1dUIrbHhMXml1SjpWdFhtTihdS245Jil4TnNzUFVh''@;'; put 'put ''PHZ9RVY7bF5jMTV0NE5ZOUU+SGVVbW9dVlN9YHIlL2dNXyw9PXtud3BjNlhBRz59e1RDZ2kkX111ZSNNSSt8eUhReUxIaFtzXVI+SmFMWDtafSxMTlhMZC5bZVUlSGYzQjkpR3tgVnlHUHF9UFFwZXlKJlVoWmM8S2g9bSo8TCx0aFBTZ2A3OSI3d1ZVdXx2b2ZYK1Zwblpdd1BJVSRZezlHXWlq''@;'; put 'put ''K0xwelFMek9QSyF7d0tdbTIsKSxfPkQvRG9WKzxbNyhjRUhPbEBwOXhgX0lwcmxGVjF8dUx1KEEuTXw0RWJ1Q0xbcFNYeD1QS2MlZnh2I1NuVDYrYSRIWS8iQXVicVBrXUZSWlVVbEhERXEmRkg4VU9yY31Zflc/Smo5JHZCL1lkOihYMz4+JnVlN0ckP1o1KU11bn1WRU1iNiIrP2NXcjEyUXFs''@;'; put 'put ''PjhaIzlZYkUrUG9KYzNNPC9FKH5tcHolREdGNjQ6fjQ/ITZHbTozTDFlOnlYfSxAQE5xfm1vUFcjNChDckhrcTxJUVNQY2lZX1RIS2MrRjZVPU0uVjx5JVR7W3ovI153UiU5RGpSbnFCUmUzcExFazFxU25ZaEBdSWJrW1NrXzxFaVROd0VaUiZNPkIjKTVwUmplMDY8UUVzXy5tSFgkX2BgMWVS''@;'; put 'put ''WHQkP3R6QE9KJlI6NGpvUnRFVyk/c1A6Y3B6JUh2flhhZ1RPSVpNaj8wZnJ8Zkp7eWpAO2x8XjckSk82S3ZxVks6bCU3XStVIVtlfTM0Z2IyRzlPOX4lJGF2YXdONyhndyNJd0wvKGQpMDFoeCZMfkBRTzYlIjRnUD9uSUl7Pj9pTFVbWDZ5T3tDZlAuSjp3Zi5rJFgrN31eOlspPWUoWGQ1SSxT''@;'; put 'put ''ZC88dFkuUlddKi9FWC5nKm5HYDdDd2BXdkM6eHBGc1UyQkxMK0pQL3k3WFljLGd4UG1RKy90VU9JZGtuJTA+KHYvOzZCO1tSRzY0TSgyJXhXWyJnNm0sel5nKm1eaEdGPyF2fHZwZD1kTlY4QTNbQ2FOT1R2O2BDZ0VdcVtsLls1TDt2QlpUJEtMNDtpSGp7VzooazFseWYqY1lDXiY1TyJaR2lI''@;'; put 'put ''ODZaQDlrRW1lZ3pfd0suQCNqdDBsfG52KjdaR0p7e0s3UyxtYSxJJXxHdTdYPD5hKmFPOCQ4bCQ4JTw2OSZpQ0drWSFUOV8pQmY9Ym0vW3xUfVNzKWRyLksjeG5be1pFZ01+Tn5iZGAmLilBZVpWITtQQDxTaXR8KHdlNWgjZGQ9RD1zUWxFW31YO1hlLHF0d2xkXiZvOjdMLyEoJjNFWGp6bDpI''@;'; put 'put ''YzZGL0h+RllpQ205cVAqQC9uW19PKCRLUiZUZTMyQkldPlJ4WzhNXSVeb0tXZyxYNDNgK3tRWiU4KmdKQUtoKU9VNjphJSFbel90KWd7SlpKMEowJHZLKWp6b0VxVlRSfiNybkJheWJCLERIP3VIL1p8W3Q7Y1V3NjckQmxKMXkiJExfPk1WZz5UdEdrNyRyUkR6QjFOIj53Y2xWakIhRD5ZWFIw''@;'; put 'put ''IVVhSzNzK140SnxENUx0RXl+JmpIJVRDSGRqXTJdRCJMfVJVSSkoSXZ8ZCIoMilpbipvYTBJbnglQW8lej8+cnlSIV9aN093e189UT85N0UvTWFKRGsqemZRW1c5OCwicXYmVDtPMChOcDxGPzFrdX5afWFhfEovNUlaUjcubEg4YDl8Rk9PclIjTEx8JjJEVUs3NElmbDllUHo2QmVOOSpFejp1''@;'; put 'put ''R3ddNnFnQFhiJiovfENMLis3RWojL1FgSCwyXm5wQ3FDIVZEUjJeX1YkYDV4TT50Vi97UndSRz9+PDppOGBfRlp9OTArb2chJl1oN2x8ImxfKER6e3AuMVlzW2kxT2pAcWxRd3B8OHwibjh5fEthbl8zP3l2eTQlO2BfLjdMY0xbUihEflVWYmVXQn4lXiR+VUJZTjE7ZFl2JDleanJkVjR0RDZU''@;'; put 'put ''SkF0OVkyfHBLUF1DJiZLLnFCbUZtRylwSGNOMCNFXiRMVXxnODQsLGV1TGMmVTQlcEhhZnZTQ3wkeyg6ZFFwN0pOYDxGYzJ8d3JRSD9PUFQrMjRpVmcrcTArJnE5dEZ2eSt9K0JHNjxXbmskZjR5ZiFIe2JfcDtVRVMpS0hZRGZtS3V2eDJVSGE0c1k3NjxLVDxFUWU5aEE6c2U1NTI8fEBJfnFG''@;'; put 'put ''TFdSNik+TmJdLGk1SzxwcTI/N1FmUm0pIX5ISDNqLmA2Qz8mTjQoP3UsVmZPKzlLe2g1RTdFTEFmeFM8ViNtPz4zWUZhUl4rWUZEMWVXcVNLJlp8YkpocDQ9LC5QU2Q4aEUuZTtHb1pTaix7cT5GOV9sT3tdfEs5SWshSzMuZlduYUBqZT0jcG51UC9DazMqL09mcjlfQi5yV3FYLy47PDh6b20q''@;'; put 'put ''TGojLE5BbnJSN1s0aEV8S1dmU2ZlN1dCZEVHUT5LZU9SWjtPK0t3NXxvOkElPDM6eld4RWBjTjFgeTloamdwNFg5el5UK0RAVkdSXSZGOF1GRWwuVE5SYXF3cCRKXWMmdFExQH4+aD8hVlI8fkltd0BHd1IzMSgkWShgK0YmM2BfJSQidSEvby5EWWtDYU1KYUJnPiJAPnI8dHtUNnohblpmNCRz''@;'; put 'put ''fFlIXkJIYlAkTmdAQyt3ZGRtOCNka14lMVosV3ldbn5rZmckQH0/emZrekBhJFtqXnNhZE5ddThIbHJ8e0Y6d2V0NjhjOFJWOzZbR3xsSXVPXS83NiJKZUxLRFolPT5NM0R5fUsybmt0MGxPM0BgPEArVVhOMzx5I3tbcj1TeTJlMTtOcmd7UThsK3RAfVZoST9NKm5xUShEKCJ5PVs9RCFdRWg9''@;'; put 'put ''QVNCK0pQIWpVLHVuNDxFdigiKTNKREpMSHNkbztDIitHZlBjQ3tTWS5lTT1ANE99bSZyVXdeU3pVS1IqOk8qKHImX31MOkZsfmh3Nm98ZnRUW05ed2BYZzV0NV03PHV7Q3R5bk4kaSxPfSlreCw9dHNoYEwwdHhNQEdGX3M0dzo9KXA3WHJMLnhgK0Q1UmJzMXZ7QCVbPXxqRStGVWMrdF95TnhN''@;'; put 'put ''MGBIcipuKDlgdzIySjZQd3h2KThCJHRPJm1pPFEiVH1LL359ZyE/R1FQS10uQit1WGNQcz9oNXU5dEJdMVBvKCRaV0BDfUNoPyldO0psMGEpVT9+VTJ5JnFYLzlzJmQ2OSs3Tn0kb09eTSMsNiNRNT58Imw2KypoXlR5Pys+OyZ+JGQhTllLU3lYS29xX31pcG8wR1ciUkRqKEt0YWkkQUdiUSRk''@;'; put 'put ''I3BTX2k0UG5NYSFvS2JySEhrSiNFVWc/aC5mZ3p3WX5vTDM7UWNPOks8KVtaXnE+RkRKdX5kfWdOMEw0dml2SVoqSm5FfmUyNzFpRU8sN25dcEksKiwvPmNKWmJvOEF1R0A9OSlaS3gjW3tEOiNjeFRvbyV8VEswbnQvPStrfFpwWlJIVWNsOUdIdlVlS0c/Om4kMDBIT0E8QV5LYy4+eHVEbWd0''@;'; put 'put ''Vyk1KTQpXTRsJCQqIz9eOXdDa3hwZjw/TFNBbWYoaUg4PVRic05AYkshOlcqVDxRK25ZamhuRT05dkojP3FoSzhFT1BydHJpM1MxVypKNkdIc2MyYDBtcWIselRYLz1uUC9mQm02NmNSRm1OZXR1KXMmY11bP01YeVRaUDlUNSEpaldnbURXMSR0ZC8pPH4sQEs0eGhZP1MsNThdXVRWJTY9MGE7''@;'; put 'put ''PSgrQSIoWyU/dS5bdWU2fWpqRUk7K1VhcURWK0dqOEFabEg4KyMiXkNedz1nZndYSGlMZGBYTlhSTG4mQ1pefngibXd2XWZLWzk6amMxfUBWI1R8MTpsUkVvRzklNTNUYXowSFR4QSRkeSQ7KFQ4MUd6JUZ8RXU1WzMqS2k1RkNUe2s7OVtTdyZNRSp1PnJnVz91YixGZkZsMXd0TkZpWCF9enZm''@;'; put 'put ''aEM5ZD5rNmUvLzl4UWsrRl41NlFtWTwpRzN5Ll80SXlGUlIudTBHMXw1QzZtMT1WOHQyWihscTZhZSomaisqYFteYSVsPHlta1QrSlJ3VnlVPVlfS3pYWWA9eSY/T2s8cXRxKCshUSZRJjd5cFowaHkzWXBgSiEra1ske15daklae2o0eUg0OH1tMUNhL20jbDJ1eyRfND54KnshM2JhbD17N3V3''@;'; put 'put ''N3c4b3VzNllVe2FvZnVuQyNaWD13flUjIkdxZlhlKj5YKWR7cVB6Mi9DdmImdmB9SChCZjJMPXAuPTF9WUM0T0l+aWhgejIyZmJmW2csUXYrT1tfJTFMRColSU5MKmxHK2JQdk08Wn4/aUQxQE4xOj1ROWE1eW8jP2ApYV5DIUlVUD1XbG5CNyUrWSZrQXdaTkMvRnJJOEkkRWY3QjR3YlRrJlE4''@;'; put 'put ''czklMyF5RTtjWGFgeC5QNDsxUnkqfHRUX3FweHQwdC4mSWVxZSEzXlh8SD86RSMuMGh5JEwpUClGb20sVH4uUXJuY3xNWlFHNW8/LjA7cFBpJlgmfShEflM3UTh1VzlfbkNBYyRzWXtNd35PbW4yOCR4OUpgJWhfNCsuWXk5ayhjRm07d2YrVF5ZTFZnP0BgbSslJT0ycjE1b1N3OnQlVTF4WGpB''@;'; put 'put ''a3pCfC5KK0o6ODdtJEo7MkRHOG0sTUlyKltRWmAjbHZTJjRUP3g+a3JfUk53SjpES0h7M1RUL2NIPk5ieS52X3RUV318eGhJWCM4T2Nyci5aYzQoIXZFbEUjajExcDlBNj9fYmc/PSFCRWJMPyNNNz5HT1l8MXhqO0g3ZUdvKSVvPnA2ZlNeSlE9KktxP0ZTU1lESzt7LjR0WHlRU0tNJHlzfCJb''@;'; put 'put ''JHtIbnIkbm1eQGQuYCxmd0h3cnowbjlPInJPOl56Nj81eUlyLkMldWRvIXhQbE58IUdvMWx5STEvPURVTGVARDVmblVeOjM5QThicURHMWdLUV5Aa1N1LnlhQEFmMWRPQntxWyEoZ0kxT1FPQlhEVEomRG8sZHh5KlI9dn5PbDYjR2YxcFtzeDJAUE1XYj13ZmdiR0hsRi9zXXVkeUdZSVkxLnlk''@;'; put 'put ''NHNMWCM2WTxoPWhqLlBXSX5bO2opWFBzanMkIV1WT3gjIWZJdmJZYkUxWSErRmxIWj17RjdvPCIvMVNWcSE5fDUyVzs+NS4lYURIKU0xTUw9KCJefTR9dXp0SV00Z0tnPzZTZlZXMT9gZThWQkg8KFl+UytMJl9afmA1RkwsUk00JV59YD1PcVVRaiV2cDQkKkNWXmBSPHxqcG4hTFB7IlltZGN1''@;'; put 'put ''PjYuMDZsfjMvPXh2QC8wcTdEZi5sfGU9Okg9TzZtWXVEZUl5NV59ZmlbVVFbZDpJYXAiMUA8UkJYL2dCeSF3e1ErJU1yKzsoYWg2JVhlc29vKG9heHt2Tn1WfVA3Sz15P3ovMzxaLHshOzd+IW9oSlh5IlFySmosX045PCJhSXYxaEI0PHIiR0U1dSJEKnhDeyYraCt7XXhmX0xPZ00oaklANEsl''@;'; put 'put ''fWp0fSs4OEBVT1p4Q31jISVpNWZeL2tdNU18PSZhWEsrWyY2WDwmPFpYT0dNe31ePWthUGxvXXBKY2pwV3lSe1p4I287UHp0SXowSWQzRDRBPDttNXtmOmo6IT1HfG9gdkZpWissIWopIkMuOFZ9TkIpZW8sd3NeXWBEUU9dWSk8JTxKPjtSXVJVdG8kM1c3djUiKGpZMkgheDdOOGtQRW1PS3Bg''@;'; put 'put ''Vj5eZjpBcio9S3h+Lk1WOktnYkBnLndXUWh0SV4hVWVpQXg6T0wudCRReEZSVyQvd2wkQEJoW0xSeXI+eWBBJiNIKFFbdSYxJFhbTWo5Vm9WVDUxWldjYE5iW1dZZDZzN2JZQEVMVXNJU2FDPnsvfikrK3ltRjxwaVtPXkJnJW0hIT0qRHAiTjlEUDEkIzhPQywqNXRsdy8wI1gpa2NyKC5mJWxp''@;'; put 'put ''X19LZn4mXVYvT0p0YlJVRjh8XTFLJltiM0s9d3hjTU0yL3okNyxIT0RJN2s8X3Z0UmlEfGQoeGtGLlFETE53O2JbWil8Ij9+e0YjT25UcXN8XzZmI1l9TEQqI1J0ME5MbWtnO2ZzQ1c7XiVrXWpXWCV6JFVQSURTaCQqMWQ/Z1Y9N3AvbiJ2TVRpdkx7PH1gd2ZRUF9WLltLSF1rX21uQCUwOTIw''@;'; put 'put ''NGV7OSVyV2EweFBmPFMqTjY1O1U0NkRsR2VqLHp+OV9uMDp1Uz9lLHhqLz1JZF4/cFhhPiwvdD41K2dPfU47UkNPeWgmUzZ0UElEIy9HTyx+dTtZQD8lLFNhZG0hOWkzYiUkRUAxYEoyS18saUVjOUVUbW48MTtTdWM2RWVLZEw6QiYsZVgzQi5JQUVLZWtSS2puKzU5THpSJC9uTFE9IyNpXyFi''@;'; put 'put ''blJnPXZRZyt8alE4IzlMWjVvTUYxOi5eN3JLQncuKTVTe0tJbTJGR3ckTXIqaFQ2Snc9MWRZRVtFJTN9PiZPZkoobmh3XW9QaTJQOkQrZWwoU3Qhfi4+QkVmM3tBTmxXJilWeHJNOFJgZis/KTRvYHw7Yn1WMENrfVFfK1NbNnVfVmMqK1UhV3pyMT5tSTZ0XzRZTlZaJW84NHBfN2EwKn0/d15J''@;'; put 'put ''Xy5sRHg1KmJOSW9xKHImPygyKUswJXtBTHVtX0x2SlorJmtQUWQpTXROXz5WW0pWUF1yLE1qIVh5O0NSQ0h9Nz8ha3UjWXZNbzopM1NpUWVfSENpPl0ramdSZkUyUlpwVF1QJUN0bkRfQF5HL0cuKHIySSNubDUzJGQiOi44ODpDenpUbVZGQmBNU2g+PlA9RF0idGA6LlM8JV48TS9vJmI5eWp7''@;'; put 'put ''Ky9FUkglMnFYYn1TdjBdanRgLD89XjhCQnNlMFpPJVd9W2cwU0IuTyMma3tRbVRHTW45cE04VGNyMH4iIjU8NTBhRigjQyRMKCt3OzpXY0xYfTFhU2k6WlUoUDdtSjBAeElDeXQ1akNuLEBidyREU0x6IShwZVRWckdNLCFaN1tIYl9+fXNhZjhXUzdhIjAsJk8wenkyLyRSaHtpWCNqK2Y3djxQ''@;'; put 'put ''floudCp5fl1oLEF6eVU3eDlMbCQrNDhqRk5zYSFDTkwhX1dsKTxzKiNeTmFdK0E3Ulcjbmw8MnxmZiJPKzgwSUpkdHhmZGVWRUZDMFlreT4mPUpERXJGa3c0IXBNJEEyXWQwfUpJSHU8VVJXaUxVJmRWTjc8RU1lQGd7KzNUTF1mKWY2IlgqJDJXeDZWI3FnJEhDSCUmMGRmb0xlcWNBQFJ5QCZt''@;'; put 'put ''dUZFIXxBdy5YR3skfHBPQXtHPFk0clkpSGQiPEAuMjRCTjErRXo3JUFDW1ZeX1YhZnd2eTpyKGRpbzZPPDhkKiNPP2ZdUzwreD88VkRIN2VdT0IqQG9deHpXKzRmY1BHVjhEJUxLUVpSOX5CSl5je2JlPGkpWyRvUDAkelhId3pwKEZLWWZaYzVUdDdDYz44Qz1aPE1SVGFLQXlfYFpvQVtRfFJj''@;'; put 'put ''XkJoWm56MkFySmdJXntBa0ZbUk90K0g6ZzhRQkA6I2syRzB4YWR9T35aUl9FQ01COVVWNylSTl4vImBqIUlBO2tyRzVrWmp6Vy92ck8oMjIweTBaV1I/aVZqMFh8Z1l3ITk7dTRhKEdSbnJaRzpCbTlzVyRScmU3e3hdcVUvYGk/XWcrYiF2MnMiQ3J6eGN0Qkp2Ri5MXn4rdCpgQko1SXNpNjso''@;'; put 'put ''USw0c1JCTzpHZX4pVVcjaGdtVXEsK2dwZ3hTcnh2NlpuVXd6UTJfNmZva3VpeF1xcGJ+SXNISDlJX1BKZlIkWztycU5iVWBYdUJ5eFdFeUQjWHRvLHdkaD8jT0lJKCkxYWJwZ3AvdzNZKEZ9TXY6YDFBVDA9QXZodDM9dUksRCJEfnRmIXNaMk1tKHJweiJ+JVVGd2E9TFU3JFIxSVUuQERCUkx5''@;'; put 'put ''XzZUbChEJDJSdHxnISthJEEpJFtgXTRgflZzV3c1WjBUMyh6aG43eD5iIi44OG5OX05hOHdSV24lV0lvTGorclg2OCZKWXhFLHVpVD9nOHR5IVRWeH5Zai9TeW0oQyYkZyQ2KEJvNDd1K1Y5P0hfOU1YJHFzK0V3fjd+RntvcXVpOlhyT3cvRnxjSlorcmw1RDNeVH5MaHdOZTxlKWkrYWFNc3xC''@;'; put 'put ''UHFhTUQlaVFlandySEkiQWoyJXg3R1t9JEx1MWY0SDEibnp2VyZ2VWxJM1M/ZE90U1s5dGZdKyZBSmJNNjNjMFdYSGA8JUlPSl9jfDohWmZwL2d+TXFocmJVYTwwcnlaaC8kLGQ/PlA1YTspPmU3WEg1TT4sYVBuVGpJQj1jWEVLLCFaSFQ3LCtoUEZBUDhfSHt3Ol1+fVk+V2VIfltdWXxBPUpm''@;'; put 'put ''OVVGWCtqbkxifV5rTig/Vy9JVk11dlJeS0xoIXl9aUhoandqUHVOdGF6anVPPS5YYTh+dGJ0dk1YRVEhWV9QVSV4SE09KyF5LFB4RU51PGZuO0E0NzkuVUFyTi9CdzhDW19aMlYuc0t4UylDfWd2RVRENnRaZyVOIVlDZ2MxfmF1Wjg1VkJDeF0jczR1Q3pqKVV7MWpuMTdbXldeRnlMQSkuWG0p''@;'; put 'put ''fGt6eSNgKX1mN2t2UXtfUTJZZC51c19+cjppc1hQe15+NWg/SFF4RHlBWXpIcFFfSjpUMz1GSWM2b1ohRHNofiZXLjtiSCFJIypzLltdSnhJPik/NFs9TUMsVz1MR1dmbz9Lel5FWF85Vz1TZ2UxM2EvViwyTHxELiE9OmA8Zz1UVkI0PWhCQz02dEd9dEA/SGx1akFuYW8kSyVkJnteRSsqeGVB''@;'; put 'put ''UTU8WnVIO0IlW09mZUledE9VRjVaSUB0eGh1Y2Y/I3NDMT43MXc5L202S0ptZUg0dkszNU1RZCtRWyFeKlhgWkB6TUNvcj8kLDBwPSYlUShWeUZ1KzcrOTh5O3xvUTMoXnZ6OTtVdTNVJG1TIzM2WHBKcC9LMn1AQGxFcUJpWEZKOHxRQHdETipHSTFTOmgxSz1YeTlgMTMuenczIz14RSpsbGtQ''@;'; put 'put ''WGc/PC92WUpsdlpANkhQeylQKHV9WSY4In1UQWdjbDxGYjVuWCxhQl0yR1labzZQS2RwVXpnNSgkT2tZZEM0dzdwSVRddSN8ZWQ+P3pRYHhYdXl+b2Zqd2VrdW5fPkJuM2txR2FBPyxJNVp+dzFyc2R6UzpocF8rN3ZxPkdJPl4pPjR5UEZaPz11c0l4KTM5cFVwcUR1N0lPfmgwQDl5QnZZXzdC''@;'; put 'put ''cnRPRUlTaT1uQHNRQ3EqQTUmU18reUxtNl1jOmh6Nz5yNWVZXSVMIXI9XVNJKFRGUChOJSJWZVZRLFBAUTdZPF9XVXEmeGYpLz14ZzROTkdOLCVHIUU/LmU8L3g9emZnJlp6Y1RTemciOTF3OGFOZyoxR21Gc0x1bzw6SWVmciE/WVQyOUB7XTJfYWM3US55Km1hXy48PXZmL1l5O1lnWWxrZUxJ''@;'; put 'put ''ZDVtZyhKTDc+YkB8RT5qQipmO1FNZWZTZkwsQnd+PH1VRDZocUguPWlPVV83PX5FYnUhZUlzX30pbGYoSWh2WSUwPjJ+QipbbEVBLz1DWEJJeFMoSkdbIyxfZjpqIjgmTz9TeiU1SSZGNVQ7fXYlbFckQ0lgXSN5QEY2KHhkMl95Un0iSk5OZ1oiSFtpJDR0RXcrdVIpKTZKT2IoRS9YZTcpb2dv''@;'; put 'put ''fXhVUVFyK114Kl9QeWlJcUhkaT1wTX40WXZKIXcrRmJFUnt4Sjs7bXBMUFJgdzJ4VWlxYHJeOCxkTSs9U3hSVCs0WTpgNjQmISReI2tPTHtTd1Bhaih6YjFQMDM3VGldSH5pbn5CKyphQC8pI3M5a35jcmc1UmZyWlloWDtyeSYoIURiRygpbTkhQDdncWJ8c11qMjpdIys2Z1FkYlJ5fWpRW2Vg''@;'; put 'put ''aXlRd2dlYWF9XlpJREVdMy89SiJtTSJKelVKTFFvQ11JVHUuKFEmS2FYZjd6dmFGLkB+eyRzd2o7dDBqfFNFPUMhYTFmfXFBYUpfenE/dU55aCs4OmRXaUokMD0/ZUNeRnpZR10qZUB0WG10I3FDSUQuJSRleTI7bjxyelNec1kyWyxFPCxTbEElbTI7dDUhLlB9SHpoc2lVLmQxJjlYOEw2azFQ''@;'; put 'put ''cjYyMXdtRjFRMHRINTNBT2BGI1J8QGQmTmkyPztyfEhWPkh8LnRYOmthJTZ5Sl1zKUBXI3dmVktobGd6ImA6KkhNZ25sI1g1QUdYNjpSPiIxPD5JOWxlQUBrbHBNOGh3YCVmWmslKWFrXmR8UFtaOFtuUVN2R35kc3MpfG8yNUR2PVEqUUxxUTBLWzJmLikkVjlxbDd+ZVF0U1E7ckJjZl4+Ok1s''@;'; put 'put ''UFY3UUJpbT08YTVwLDc0Xis0WVlEeytzMyM+MFYseFg5SSt7RDNdZU5BRz5yTmouek9fZmh0eXUmRz59WjolZTM4OltKcE1IZSx8X05ufHw0UShKcjYhWiRrZFpAZEk+dGtaW0M1N10wb2hPQjQ5TSltVWB4N1ckM0BATChBaiskeyZoWmklJktuV1VGRSpybzAyVVFwTXJydGRROjg3TlJ2PHl4''@;'; put 'put ''Qj14RWRNRmhsTjpwTitJVWYjaWlLVHM5ckdmUGU/SW1NY1RPbTAzP3t9VkRIJGckRj82NnNgXzhbLjJnImtbWyUmUUxlOzw8Vk1wMyZBSUs3MjZQUTtWL2lyJSYyX2V1NFM1fCJ5QixZdTcuZE4iUmlaTC5udmZ0dSF6YX5WMFdlaTVia0NrZ1NpOTR0Xls7Y2crPGlmWXpkdH4zKVsmPC5UMkt1''@;'; put 'put ''M05SdnQ2blFVcFkzNCRLIlkxPWg8bl9rZTxLNXBsPl9vWEZjWHUkakw2QjcqXSZhTHIwUStmND9MdmAydS9RfGNMbitJeUZPXW9CbWxxWEhPYC47UFsicH47bkVAflpzfl9XWChGcipfPDtGdSl+S11xMis3JUtSSGkiIixOfn1fSWpEWWAwJiZ1LHx2XyZLOHo4dWM4WzZRU0BGdUAqKklaUy57''@;'; put 'put ''YjZUNVh0WS89WFlYbnNfMDlfYU1pQFUxbTA0WCs2dGJXNEF6VyxuWTtGa2AyYlRbKXV4NlhFTUA9MlkxWj9xeyhmLFgsPWZDQDpGTTBjTlF8PmtwREc3VkZxV3VZaDJuSSZyUWVKRnlmR0hFNzM3fSNURkluRzJ+fGs/PDUrV0JZOEFHRER8KEN7TDsod0VuPUN0Sl5aQzF4aURvPERCcy5qWWU7''@;'; put 'put ''ekpzek5gLj9IOj9vLm1ZOj5oaVt5KzYwXiE0XyZdTldDWklOS0ZJWmdfPCpGXWBnMSV0Z0NpKHZnbktJe3Uld112P1Z4eShgQmMqcGsjYWlEPDhlS0AxcmhbKnZXM2xSejkpYkZZM2M7QkMpK1c2P0hOV0NKUng0fCZFT1l1dWp+cjMiWWhAPWx1a1RIcnJhPlF4RDcvTHE2N15PXXBuLklibjIm''@;'; put 'put ''cnAuYiV6YzZfLzB+bzdAe0Y3aD8oW1hbamcrbX1sJnsmTEVmQDFpWWNQbSFDdUMzNGFMP3M7I25kMVFXdmIlYjlWcDojK3NWUzt7VGBKS0cqR1ZRZmhNP0IrPE1GdThkQDQvWUlkcSVjYDZ5PVE1S2x9MkJ8NWR+QlVQdUFZSTo0OEk2VzFPbkdraFtvQE0pQ3R3XUUyKDVhfkZ3IkszajclfU1N''@;'; put 'put ''PHFkPDUsIVYxYjZXLGBgSyg8OTRbKE40aHp1cSh0S3VIZWB7Ril5LyhRQjtCL1t8JWdTPjVpeUExSWlzLFYmKCVJdCw4P10pTWVFbjxsbndGOy8uXyM5eitLInYpSiMoI3ZodC9uQi8kODlNR1VIcyxwNUVfNTR8KDlrTl0+TXUqcXY2b0MoUFtlfSNRSnpbOV1UJlcwcTVTMChzPl1ndFhfXlNA''@;'; put 'put ''NyFHc2NbeWAsL0poW2xEZmdPeClMemJpcUpBIS9GSDIlZDB5R0dnUCI2LzJ0X0REbTtTVFk1KjE3TVoxPkZEX2RnQm4sY0JDU2VFQj94OklHTDg9RDJ7d3o2Iz17TXJzcGRsYDNjVio5WT5tYEBqNipOMUBfQ3o3Vj1WZHhGYktIP3w8bFdSRX12SEczZElOU00mPDtNXn1FUToyY1RreF9iWT0m''@;'; put 'put ''dzQ/Jl1EPlkyMlU1aSZze1EocnhISTsvLEs0JXg4Q15HOXF9N2lNIkcici9QdyI9fFtoRGVHNUBARjQxRWx6UjQsTngicjwibXNaWDAjIm0mYXp6Unohcl9TdjNkVXszWyExNVVNMjBZQkdvM1ljflVjeFBwXkY9QjN4WWxAQk1tcWJ8XlVNVXt4TFZJZDdhT0Nze311PShrUlEidG1yS2xlblt3''@;'; put 'put ''TlUiV1tkQlRHMF0wQH08dj53VyJDTjdXS25aX3o5OCRFdTswIVkwcFBDYWsqfmMsQ0dKY014emVrLlRZOXliJXU2WV5TT1NqSSg2ayN7QWpVN1YvblZyKUY4OVtJW0U0aFRbZHc2QnUwY0dCUFAvRCJxcS9UJjl6PlMsSiYlRkJwdHglI2x3QjY3JGcmcXtEbSg9NVZRKnFdfTdhbXRROiFvTTBJ''@;'; put 'put ''d30rPnRTPUcoVnk5aEpyU0hQXiFrbVpHZD8jIXsrTUVqeFhrcEVtMVVsdT4sWVtmKV9hazclZTV4YiVlTyhpQ2Q8R3RMJjhLUE1kQmU0aWR8anUuSkt7Zl5EI1diS2FRQShJXT4oXjpJeWloTHQ5KloyRChTJUR7L08mRCMlWjNfZ21iMDwvIzYkRExvWHcybmpNe3lYX04hYkhoMz00cCMqTXhC''@;'; put 'put ''LCNySW02RldtazxkMXxlVGxoSn14cjd9InwyfiJ8XmtbU1ZYSkQ0TGJyL202PSxfTURqWmpyQUQ3Zm56dyJsZ1pZSUllRzJ2KjVAWF5OKmtkS2JWOCViLjV9anw0XX1ETFFtWGRLNGU3Mld8fE9PVH05RU04cDMlZ2ohOz15REQjYGRAZiUsKmBQRSshIXJkS1tFRDclVlVaZiN4SThKZSpaeSFT''@;'; put 'put ''TU9nKnF4fWhzQig5L1c3QGJDfXB+XzJmeCxyVlVsLDBNN0JjYHw8bDZNISV8PGFvX29sc2hXJXgxZyhQeCR1P0FJSGc1bF5yUUt0M20yfkB3PmV5ezdmVVAldlBZemk/JEVmZSF9OXA9KiZsMVkoPVRiIU1oZlsoTiV2WHt0KiV9dSpTVi86PF0/al5EIVk3aDBTNzI1fEohLypyN1kwYS5zKSZ7''@;'; put 'put ''REV+fDpAOW9fTSt3LG11RGV8PWNacjQ0UVE4SDZWWGIiTXh2ezk/PmhqRjVkZ2FCbSQrJXVVNXV5RnppZHJLPTBtYiRZUGoyQF5IRHt0OS45b0dUeUdaTjZWViVjJFNCcGJzVGtjVU0wQ0REdERvXTg2PVVFWzFefmsqZz9Za0JveHlGZDc/Z2UkclpGWls1dGRYVWoqMXVAVSFZNS5pOGleIi47''@;'; put 'put ''Wk9QMl5oa1t0LzV5T1BEV00uLHNpd01mU1AyS3kzYVpwYHR0YVRyK0Q4I0tLeXhRe2l9QmNZNlV0dko/aV1pQzlgYyk0Q1lsdFViN1IoRWpYO1UoREU4IkpuU2dPIyorbmApPXxgfVRWMjBBXT5bX2pYd29TZnh0PG9wOWNKLGU7MytTSiR6ZG1dd3pOMTFdUEdZV0J1I3FxOWkpMiNqJks1SE9h''@;'; put 'put ''WF43MXwscip9Y3dpR2RMbjwlKiEiajA3UkYrQklaSWBfYVJMUkxWLlZlKT9CXTp4bHQ+dHwpK2twTyguKUxxdXllcCFfZjBUYjI0OTQyJCkvcHo+OksvL3w9Qip5RUNwSnI/N0FzK3Z5e29zMXlIXio4Ikx6Rm08OEdWd15OLE5tSTNCQ1YwISVEfG0jfHpucj0+VGlON1RTTS5yWCNSTEJ8Vksq''@;'; put 'put ''LnJzSXNhK2VrNyQ0LFB+MHkhK1hSZVUyNG4/VSRIWWxdKV9sZjN5YyhaSSQ+RnJJLzVqPXtSIW41OEpVZHdvJEJBa1NkXSJaLy5wJktAXkNpUTJZeC9GYUlUdy4sc0ZWRiN3alIyUUFAaDN6OFpUfXI1d1Z0JGpXKSRJY05TYUU/VWlyZT8+WSFEaTd1T0VEQUxzUEQiezN2Q0wqMShIPUtqR3gv''@;'; put 'put ''MmlpQmg0WCNTMGdoI2VqYFt7SFMpYlVXWXlwYzBdUV9TaVM0clssYjNaLm9Bdm1lO1VdPDM/dCxuOGZ6R15YJldVQHN8Qj04InRnNUplITRYNm4/KnZ5ITB5NyQ2dmRofV4pQ1VgT355YDxNKU1zLCt2OW14SXYoYUVyP1lsaGFicFE5O3JXU29pazVDWExpPEoqdk1sIntpTm1CRl0qMUdTNEdh''@;'; put 'put ''cVk+N2s/djhENm44MHg5V1JdQHo8bzkqeXFvajYrQF93Q0N5VyFPbU84XTY7RSpmW15GTD9sOUdERmNkNiFvM3NaMFVkcShKPGdUUGJ7b2lbU1djfChuPVt3Ni9YSTwlY1ckYjg/bjxwcE03SltmMF0vVlMmYDBfXSMiSV4zYnNFLC8zQy4hdmx8bnxxZVNtWXJ9Tjh1RkNlSiwme15AKUM8STkp''@;'; put 'put ''Z0V8Ml9hKH1KaExLKzh3Vz0oI2c8KG5FQzhJWmdTR2xlZUNTUUMrI0ZHOTNgaDxrPC9XV1hbeEI3eFZ6T0Y9TnpdMktwclpuJFB5PmlpRThUOyl6MFNubWhBJiM/QStuKyg4di9AXlRBSzVpKiFQQDg6RnJGaiohdiQyfXdyXjgmcDkvc2UiM1hCb2xSSENMYTFeR1lqNUsvJG9oL3R7TmJyfnwk''@;'; put 'put ''W2EveiZVfVA2IVNqYXhOSHw0I29JdnZgaFJSaGk2QyxTeHhaUk92KzRpQmsjTC8wQ1tYUnZrL1NmVkRIP0RDbWg6RiIwMEVLTiJ2N2tWSk9SbisyRWFGLy5gVkFKX0NSWEBWan5RZWF6IjwrWF5DMUNBbUppPUIvSXQ7QGhdeFQhN1VkS1dKOHdhL2VhTlJqUHZuJSk/M2lWR3FQV1BKdkdxTy5f''@;'; put 'put ''fC9kOWc4MjEwIT5pcWZdK1RRaGllc2VTMlkxdUQ1JF9fYFRgW281eE15Q0skZkNMckhUcXBfWEo4TEJVdTFXOVheckc5ZDplbEYwd0tae0VwPX1MXk1FTWwvZHBAUl4ucSxVNzAocDFZMERkPGk2SVlxRltFKTxgSmolST1pUTAkKTR1ekssfHJIeUYsK043TFAxNCIvIiRWLiIyQyVkekFKSUIy''@;'; put 'put ''NGxlcGtLKkxQJTB8WHlqWiVKOEtpJXBuKjJ4SDV8T3xDc3RrY0BCcW88Uk5EIWRLPVZgI1J7UF9kczpYZG8mZEVmXTNpMGNmRXMiYS40cz1jfXcsTzplblJ4MVIueUoudVszeUQlazxMbi83OUdUXnY3L21lZyorYWgqQnJTc2JZaVo0ZFBtMWVTdC8kUz48TCp9czA3Z1c8Xlc+e3VwK11FZj8m''@;'; put 'put ''QDI7KiZRTjtbZUJIYDcoOUZCUmwqLlguKUMpL25XaztIJDo5X3dXNik4KSEjeH4wdUdIc1A5WzFHOUBmYmZVVUkxW01gUTJMdUBGNUpQd1FHQ1Aha09ITFVCXWBsK3dRcHRWJFlhUTVYbmVbIUkjYCQ7OSEvT3ZHVyE1dFtUMWt6V15EWipZJkxESEhbOHhjZ0dYRFJ0fXk2SztCWk0/I0p+UG1r''@;'; put 'put ''IUwkd0dwempQQ0VnSE9pTFhedzlpQnZLWWFnZFtyJmoiVFhfLzlpRSElZUAzVEBNc15efTl4cUE1dWE2ZGVIOWNUZm56T3tDYURtTS5tO2JqSF5INWZPSXhiOjxCYlFeX0VJTkN3WDdsT3Y5aVVoTl5vPTdgfSRuan5nfV0uWi5GPWlOUmNFT3Z2aUFJS0RPdmc7UXcwXiE8WVojZjxeO04wT0gj''@;'; put 'put ''Vz5NJCpgazc6eXhYVSxQZGdIWTM0VWlaQjYzakJddiZJSCU4VF57OkJHN28pNkQ5eWAqPXAwV1dLNjFRUjx1JW5OfnclbytBT2xDTX02MVE3IzVRaWtedVhGcX5RXj8hJXMjOyMmMVFTfU81IWQoZ2FKfjZ6bSUpPXhIejssVjBAW1VPY04mL3lzYTpObHYoXjkwIUdGRTpdWHdwWDo0YTRYRTIy''@;'; put 'put ''UXtPMkV8MEs9cUleIyVYc1ZUSSZqcno3eCo8XT9JZ2htQDBvKmFBJmFHbEYqU3RLSj8pJVU4UGtoc1ZgQHt1IlIldm5kbXlYK0NVI1NCOlJTajw6YXxGbWJydG0sNF5JdyNpNj9LTTlsYSF1MlhAXyRZeCY1UEBMeWQrTnk/fTYzLE57cFp+WUlyfUwrPDx4TGEuL11TdiFTKD16dj14OS9nJjEv''@;'; put 'put ''NGlsO3JndXE0R2hNVnlkZ3JlRCh6dkFDMSgiL1tnWyM1PHd0OzNUNSFxekJ9Pi9OYkdWVUEwU2lGPyVaRVp4N0c6IS9mbWQ5QXBOPjdoPHAhS2dDM3Z1bCxPS2FZRn0jYTRZTjZVbEZvfWxFS2I/aU96UUdSKSZ3MTwqSUliYkkjPHFJdEo1SVRFeXtmcmwxSF5+d15ZYEddeipUKV5vbWFaQCVE''@;'; put 'put ''TUUraGVrYGFZcmorNTYuVzZMM11sZCldWz9UR0wwenFhcndXbGIra2VEOCMxbXx4RkleYUZYKmReR2VrS2pvSEpsOj48czh3NjdVNGo+XzVmSz91MmQhbz1KKnVxc3heOURgOG1FIXhlcUJFfEJ7XTc5T0g0VlVZaG1WYEAjM1JKJVpCOyM3OVUkNzYufHVnTVpyWlokQC5fW1o+fD5Tb1puOnBt''@;'; put 'put ''PUVCIXgvJWA9Pj44TCxlZTMqZWU4IX1PYiw8W25DZ0QzTUt6eEMlZk1hZGFpLzZmY3FebXttfGtpeThAPWFRRDB8NjxkaW8wUzUmL1ZzPSwoOzFMPjMvOCopOzoiOE1PPXYsMiM0OSEmUXM6YWV9emZZX0tUUn1uSnovYXdiPi9VMVY9LGVlYXZbNHBKUHlqSTwzbjAwLy45V3RAZTtPV0xuTzEv''@;'; put 'put ''NDZzKWVsR1oscVB+LClaWjxCbVg+a0JKISExV3wiKGYhZjd1OXp9amw3Tk03eVRhWWRXSDI9dEsvQ3NlPT5gZUY7XnkzYGYva0EofDFEa3F+S29idl0ieyw0OUdZeShGW0o5V15RZzB8ZXQ9eEFHbDxZLiQzN2VANkQ7KiMmO19qK2c0UWJsaUp1SChjSWE5VC9eS2sjLlpva1RhUWIpYnx2anM8''@;'; put 'put ''Q1JsV1M9MioqJkEuQWt+I0tea0crRUFVKjhfdyE0LEZySmNDQUtNRjQ7MEVMPEFqKXduUyF1PSRmQ3ZNOTRfYD1YNUw5NVJ9Si5RMW9vYT5LXzBDZk9fcWxPIVlddk0/LldIdSVXQ2Y3WDRxR2s3YSRQO1k1aCFsaForYUJuPzMhTzl4OmFuYEpJS29lVmlkekhMYFE4amIhd1pZU1tWZHovQS8i''@;'; put 'put ''OVo1fWhUeTphU3lWR0N3SV5bcnchLGt9Uz5vJEc8dXtNVGRSVG9vcDJBaX4wX3EiNE94dUYuZnRsdEddV2cpLjZ9RFpjIU81Y2JJZEtDUmsxX2o1IkBefV1zUV1DbyolMUNoWixAe2VLJlBgamcocElPKWlZLzl8TkM6Ji5nUm13Vz1kKmo7PHpxb0NiY1NeOGIkVz1nXX5uY1RyOXJ3ZWA1P18k''@;'; put 'put ''OG5xZ190eFhIREZ1Rjx1S0hkY1lLIUA4b1BGTSspNVtpLzssY0l1OH5rVUZhJXx3dUw2IyFMJEdDd1A+MUpWJXsxRm9tJGEpI3p4dVVHaVdFLkx5WytONHxOImJ7PGglRXAuNEJRVGllUDshKiUsfDYuZGdjKj5JMz8+RytjeHgvLCY/JlI0Z2s/alNqPCIvRD5GW1c6S3BOM3glR2whWnQjOiss''@;'; put 'put ''UjxNdz0vXk4sNiMrcG5vN0pSOj5zTihge0B5RW9CPmZhRXZgLEJKXTUpcEImQTF5XkosIntdbXkxYTFWPUJbcyEuLCUxQi45SXNPWXhRekVvKTNGISsrY2k6aGA/TkhFd0Y8VW40Ozl4P319W0Z8LlEpTH16RGQrKV5uaHhCLipSKT16SjFSYlRebDVQKCQ+MkxYMysie1gpPG4lKVhjZDF0XXA3''@;'; put 'put ''KSssK3M0cEs2MWpJK0IjcXR6OyEzT2pZX1Y9TEwpfVlMbmVWaWRwSmByQDRnLlY9byQrL1Y9YzpCd2N8JE5GZmN2Yyk0MGA7eTUwY0dqdyM2fFRCdl43LkNMSld+PCM4bUx4d0E5Z2wiRkYjLkt8eXNtMWZPNTBHV20/fG5yZi49LCl6IzFoREd3WT5oOzw3TkVfSzMkV1FieF9HaHp7Pyteel9I''@;'; put 'put ''TF08TkBieDozVEpDL3xHQ0c9Yj46X2lFTWxsTk1uU3JVdCkqSE1hR04rZnZYSzUmUWd3JDdWamUyMUVwMHdsI1hlUjhhUGhSenZPVX1RdyhtPXIzYyhANVZrYVFILFNST0ZTYFlKUmI3aiJXeFE4V1kxdTlrdnU9YCU1Vk5iTFlZUzwqIj01RzpDWDEmdlcvXU4+bGpYMnt0fjM3Z1VHWiVTaXN1''@;'; put 'put ''Qy5TITRJd01QcTR4a248Wn4yeUsoZ2B4WVlZdWovJFVza3R1XWlaPz5HWiVEKyIxZk1LbnJuNXMuNTVaQyVheFBHUGBKemV5SSRkTXNRYmpOZltXRjwmYC9nKjF4XUFGZUd8eyVAYG1FJmc1WGZDZmd2UTwoejcvVypgUCVDOUZ5XVZYXUM3QEhmQjw0SXVGbDFvcCQxP3wie1BFbSx8K3pUX09t''@;'; put 'put ''U2lZcDU4a2JZRn4lQGc1dVJSSTc4MTQ/Ln05QStgKk5IPWFEVD9fOTZGM3NTdVphLFpePjhIMGNJLmZre2xFVH10cEpzN3pDTG5SKl5HZjxTcz18UF1gaWYoQHo3ViFVQnM/bHByXj5mQGJ6UGNyMyE0KUEvOW9aVkxEZW53WGciVEhiaC9GPDkuJERQbkwoXzM4ZiRVQmFsWTF0aWEoeklaS3ZI''@;'; put 'put ''R1NSSSUwTkY5RDw6JmB9K08iRjwjLC55eSR2ZiR1IUhWNndQRj9fbXw+NFJYOmcySXhaUWByaFAmVl8kWVVoZklPazE8alhCVylqdTszMmRtaWVTJmB2ZURiTTJfUj9KbSpnd0grOm5DImpYdjFgUShsVj12eXhMU3A/T34qPytDP2A1YHZkS0Z6JlFNSylkSi4/KzxbRWJOW29AXm9nQCMoNFkm''@;'; put 'put ''ejsqe3tNOXt0d1VAYTh1Lm41YU5TVzMoSCRPIjdXT2NeaGkmcExuVF5VakBgKW11YWtaI080UUM7e2VHW29AayNvWlJka1okRFNROGZQLlRgYUkxL0dpOmljUyQxVHQmNyhUMkJIeWsjd28mLz1jVkRsUF9QNmcjOntHMGI3UlUwVll9JSFKKi9zdkRNWXpxN14lRDpmLGswSnZOODJMYXh0P002''@;'; put 'put ''SFtuWihZZ2R9eWxaMmA1MkdMMTtkV2hkInQrT3RjJE8lbm08eEcxSFdYTzl8KEomeHJneTE4Qjdxd059W1hDI2k2OTl4TGVTJj99WTIoc0BGWlpLT3c6NkIrbWFdYyI0UlpkWHVTRUpCUCRZPXtWNTJ6KS8+L097WCYsaEI2NF5KRj1md14ibUJaZUBDeVg8SzZlYiVrTXVtRXJaOHYiYF52cUhT''@;'; put 'put ''KWdEPWEpdS41Zyk2ZTF0MmUkW1ZAMFhZYGxxN2VqVktlZnZ1WGU7RWkrNTJHcUs4bSQ/eTEudyp6NC8vK1ZAbj4+SU9hZVBQVENpQnI3VT1LWShZXlhaOGQ6ZXk9S3NgMUw7SDpmWHxxe0JBcEdbfFszTlA8SlF0Uy56YDBIeXkxZDFuKyVsYDZ6RnpQQHxebj4iPlNJUjkpPUk8I1dKP1pDakRO''@;'; put 'put ''fC87KHdvfWN7ZE1LIVB4byYhP1A2NTpvT31tKjBEZT9pWlQvMDdTO1VuIkRFNkpfP0MiMG1UfHt2Y2xqVXhKQEhNU1EiM1dIKnxsL013MCxbU29OP2c3aE4hcmdbfFhoeDddKUs2UnNSSlcsL0RNYVhZMkJrV19iU1lJeFtqTTRUdj1NPz4xVEBkTFlHKzojSGtsRityejV2eDF0Vy9mVyVyV0cl''@;'; put 'put ''QjxUdThxJlold1FgQTpbLzl7IVIzcW9aUiNCMEVZZnlCJiNqRWhqP0ZiZnFFbmxbeWssakgrdzoxZjIlZCFPWVFbMlh4bikvVUlkIW9HW0VqPVtiTCN1YUJ5TXIlOkdEUiVGI1Z3SWxJTXg9L0dtUHcpK0JQMmRwMCFDaX1BZFdKcFclNEckRTA+V3FpKXc6aGB3Vkd+S0tnQ0hBPEt8bXBLTnpP''@;'; put 'put ''PSpjaXg8TVBeTGYvT1NjcXVCWGJPQzlZYEQybXY2VS47NUReLCVHdiRmZ3RBLF9QRT9GZFpWaysuSXhSZ292blpqcmZhaTdEcUhCZktSVj9LISZ9NSEzVnRbfVIueGk3d3hKPGNVZ0ttUFkhL0dpXmwmWyhfL0Q+LHFNMmc7Y10/SnMhR2E8eGBxek9ZZj4uJmYuOXlRaVg1KiMsMy9sbCsxSzp9''@;'; put 'put ''Pz1vQzcicHYjPTYuekNRQEZPYX09biUsVWQzUys/KXwpSD9qZG8mPFd8PFYzKSsheDE7O1tGVSM5VGN7ODhbWHRJRi5HXWBqPFg9XXJbT3FKKTlNTCg7cENRM0IuYS9dXSk9XVMzPS5RfiwxQkZdclt1PXJfWW08QCE2RUB3Tz9CWS49K1gyMHkxU34vPUJZLnklO21YWkN6fjdySDg8VSU1NVg4''@;'; put 'put ''Mi8+bUVGTlNHXkJ9IjtBb31gRkcmZmpmKnhvaEhZVWtCSDFWImo8bSRTYD9AaykmIkUhU35fMkdJRX1uTlRJP3s/L3FrSn1ucCN7LEFrV1Z5d3M3emFZYT9sOGdLVXosLC97Uzg3YjdJWj1VbjViWW04e3AzbTBjeF1yI1U4dT9eZXtGVE9ybCtoNGhmLklsMkhoNChNRjE6QDBncmBSTXduOT1R''@;'; put 'put ''eXAwMmpdPDNUSFkqJTJmU2lVPXchPm1tdjdKMk00IVBXe3xQPEJgYU8jZEV3dHBtXWpkQTJ7RUZqamlTVT4xRzh3KD1TcWZ1Sj93WWRUKUcuc1hUKW9hMEpPM3dQQDBXdndydlAqfDJjPE48bD9AQ05dXk0oOko/ZlVaVzcqV2hGJWNOLjZ1KmUkRDU7QSp8YGUxd0tnfFEhT0o4fURTTC5yMjlf''@;'; put 'put ''WigwNjArNkxoZ3ddOH4kPzFGN0dNYyJ0OHopL3hNdiYpd0lHLi83dlp5TT9RJnJzY31NcTNqSHRvXkBnaG1kU0c4RmNmMF97ZFIvQn44UWFteSM4dEJ3aEl+O0d9R2ZII29bQ1YoZ1g8Xj80VE5dYW1YPng8TzxeXmE3SCRjSV5pRmB7Y15tezg8S0l8VyI+d3JASz1qJl9bJS5LL2pwY0h+KDBE''@;'; put 'put ''ejpZZ09IfHJZMHkhSzlUWHk6OjU+TFluLjRCPEpaRGBAQ3JTdkUhak80ZFUzWSVrN1l4THlCbjc5M05aeEteP2AhRVI/c1tvXSpJQlghbyU4dmEpQV1NfnRhdTdyYTRfRTg3c2Akfm9wczM+KDFLMz5qOGpsSXBHdXA2NTxjLE1pSio4S1tCc0VxSGA5fDErPT9hPjpVdV9hQW9kcW5HKVlUN3lX''@;'; put 'put ''PCtXQmhrWSFJOy4/SmguVGx3eClSKkkwQ1B6eiw2Xj8yVGBNQTVNUDFPMUA7VGdmYCMsKXFvLmhdQEJHVyooRUJMUExYKTc6Pmh3OjJYdkddUWhjTXNfel45KmFKRlBEaUFRckxKUl40eCZpVSZCSFo4SHRGY1ExWVgobkF3R1JAQyRrQVJTRkQ2Uj5mWjBYMGxpTkBwYip4UiVxZUkkb3pJQT5P''@;'; put 'put ''JG53OmBSbVpXRUcidHFKUGNETEwmRE1oYHxPVX1lR215VClUMUMqLERNNCRFQ2JDTyMpKmV+S0R3PUI5PGU/a0BvZGlQfjArLkBQcV4qdWt9aWY/VUR3LzxmaGJfUGJgTlIsXjJoRWMkeWZAL2lYalA0THhwJVk4SjdVNklhRXhlNF1sfnlMJi8xSGBybzdGRXhmbFtYSiFWYGtFI29dPm54TWJz''@;'; put 'put ''e3lLZjcwPnlMfXFuJmspZTQwVWU1ZVNQPTBNTG1QSmJ4NSFMRjFGR3hdKm1NX3tzWTpJTSpqRiR2TC5hMikxfGlHR2Z0K2Zbamc8KGdbZnBXPlJ0KlhYKXFobzl4WkEpIS9tal9Ee30pRiVHKSFHOlkrcXw5aF9fbGt1T2BrLlQzXytpUUhXSV19MzZ6SEtCcHhmLzVrSys1a1BETWQ7KSlleDhJ''@;'; put 'put ''d3MxWTUlUHB7SWpkOEEpOGAzTEF5JjslWWBWMlNvbSVHJEo5TnFUZERMKyxqN2olOF4ue2dEODdqLGZIYVRSenBwakB5bjZpOWc/Mzx4UVk3OHlGbH5PbVpMLmBZTERtIm12SyZWZFZkU298L1Q4cGo/MloleUQrWmxGSHkkbmJxWG49TDp7by5QVyRWRVEpITFLP297VDwzJmB6OndvRGZFNVUz''@;'; put 'put ''R1VSSGdIQW9FISFIX2p8ezNGISFEb1gvMTJXQzBqQEM0THF1UllndyxDZ3xaTzg5JFl+OyF2bTVbUyUsR15WLHI2fGohb1MuYmMkRnlvYUt7SHc1XVZ4b2JFbW5ERlN2W3h+RmhPQ1cqZEd5TzZJYnhFcmpKbl1kK0J+OXNgK0JiaW9vZmRDO3dAM3FvLClTNiVMOXkxU0Y3b1EuSjNTams5Ok0z''@;'; put 'put ''VUUrVWpqOWgmSipMRD5CJUR3MCtON0xzN2VNWztOOFl3ZTBAd29NXip4bzFKZ2lDVFN1TWVsOm12KmpAfmIlZjJpN3BiJVVsLkNsdUgwaV88IltMRX5ibWppX1UodHp6YlppfVYsbmMkKUQrIypvcTNWTjFpcE8xQDFvby8sMS98Z3IuPFlZUjJlVEVRYj1lbU9bU1psKVpQS05+WEhJa1MsWFhu''@;'; put 'put ''S1tZbkdbc1JnMjxLPVNlYmYmI3dGW0VzVzk0VEY8WEgwaTpjM3ZwTSlqZ3hEZDpNa1JbfSJsXV5yey9xXXNpT2lPd0czTVlhO3JVWmF3WF1od3chZGVJXmp5TGFBTlVhKVVeYEQwPk97eHlULDZ6cFFhW2RUfU81QFsqU0t2RTZuRy5xbWxfVjA/dGIpOSIzT2k6O25QXUU8SzhWa217aTo7IXtg''@;'; put 'put ''NWdeaHdnbVNwOSx9aiQ6TFlhd2o+aCNqMjBbamBhWSpxWldEKnVwKFJsOm5QS05XZzRkPV1ETWJbI2gkJX16OGMsWEE7LDFwPC85cTtpYzlWV3c2VVhMMm5UMVpjWXdbNH5LQ0VSV044RTZ+S15db3s/Sjh8bDplen1dKVQ/QFdaO2dERW93T3Y9XXBEI1tHUH1xaiVmW3VZL1BbISRKXTQsMUNg''@;'; put 'put ''dVUrS2A2S0svd0hfMGMyeSRhMCo6cm9Efmt2TyQja2NuU0wuVnZZXkJgZHR1cHVlbXlyOiVXQVQ6UVp6RUZMSSIsalhFfDA0b2NILlh1VSt4L2JjSi41dU4pT2dQPmppLH03KkZbdzZZZUNWZ3lBU2w2dGI/JllffmdvOVRvOG9JMVI4OiJ8XWptIVVHNCVjKnNpYUIldkcwbF14VypubUMyJjE+''@;'; put 'put ''fiRzKTZgMz1ZVj9LIWBDVl5pZEU4T3pYSnghPDpKeDxbcmRFLjtOOyVlJmReXXhfOmdFUTJGOXl7Tls6S0lIPlhPXlRhWnJOanZnTzxYMCZbPyw5OFpPeGJvTjc5N0VQeVgyRC5NM31TelQ9U2YuTiljezw0emtDXSFYMmBQPys8c2A5VnNPbnkySjxLNjdMMy5zemJPNHFvT3N7QCEha0lrSS8h''@;'; put 'put ''PDpaK0J6RkhQPC5oIW0weyg3Z1hANEVZPTp6eHhqZzxlUmpNKXdYcjAuRytUeF5kcjdpRXUqcnhNe1lwVHhdVnlvPDlCaVdnVlklMVZqeWc1cCUkRmt+fHVgdF4ucGdrQ1h0JSgvUDd4PkJ8YGBdRGg4ayF+cT1jOzlZMWNyQ3hNZ2d9LkhyX2xAKkRBPHFtcENNZTkoXkpDWzlFPUtaLDR7fU9k''@;'; put 'put ''dXNLMXdIVFEuXiIpVSk9bkNzZkkoUWpIS1hiWH1ZLCNwfjdHRDdsPUZXJEJkLCVFdS5tciVAQUFGXitSYTlTU3B5VD4iWkZPWGxYZTp2VGclc25pKilUT2ImLkY2RDR0YF1wKXpwPlBtMXt7NW9pITc9dnZvey9Vb3Z6aVRvcEE8I1NRRHR3LDxRUC5VcTk5MCJnUWtAMUFic2dGMmhATnM6cioo''@;'; put 'put ''Q1NmeSgyTjglalVYOmpjemhRWC4iYit3VWRxVCM4TkQ1LHdgVkJKVSlrZGZYckB5aGFTOFhVaiE/TVk5eVQ2IWhMPn0vZzUscSxydCFdczdGPFk5VHMmWiNmTCtRZyUoQWoxVjZaSUc/YWJuUj5hek19OmdeZH5YWEsvK25UMnBASWghOktMW24sT3lxLElrPzpkIX58YHc9MzcrIXhjXkVEKXdK''@;'; put 'put ''RjFYJEY0eGs3InkkSH45aktbZUZYbCpKRjkqYi9DUHBuRiNKO3Vsfl15TEdlRGVyJT8yT0sxajFOZ1Y4QWRmOGw/WzlaT09dSkh2T3VVSFFLZGwvejlLSWliIlRYc3ExTjU1OTFlMnRiYTVaSUdFJSNsP0N9IyEhKHhZWjMlJT5DSVZxIXRGNk5sJGVFeTtNLDgyRSQ/XV8rfjdSUyp9ZyFCR3tt''@;'; put 'put ''MFFtRCEsaCk1PXNAdHgxWSRtQiVEIUdOXiRpOC8/Ok00cGV1RDxncTVMeXVXPj5aYHR1e0RGMktQaDdaZVZFb084Z281UWojJGR9cCEmQFtYMGphWyM/VUsyMGlyeUdlaX1bPERxPVpNeUhpQXtrakQzTH06KVRRLmM7KERTIy9baWVAVnA/aHdHIzBnLEdnSyg+KmZpNEsyKTlqZVZlVjNMdjNR''@;'; put 'put ''ZyxoZTNra34+bHQ1Vld1JTBCJUw7QEQvSk11MDplYSNFOzsoQWlMKUFBaVJvNjNxMTNyOXQ5QmglSHgodGg+aXVlbGlbRj0kUTM5an1UWlpeVHlYWHRKK3d4NHBROy5+MUprZSlpZWFbbEpCd1lHLjkqSlVjXlV1RDt9ZEk5bS4xWGVbY0VQQ2VPfVhSJigjIW5aOUJ2XzRgbUJPRCheNzJWUmBG''@;'; put 'put ''N0ozTUIhKXU0L01kdT1lUChtSmBiRCVxej9TRFZDbHJdRTdoTHRoPkthIihaUTBIKGl3a2BmWkwzXS53IigpIyFPMFAhT05Vbk5FRG5oeykxUE9zaFU+MksifEwpQyMhdEMqLnk1Vz54KGJHaE1RZXAifExmPUkoXUswXiEsOlooZkNhbkw+V1hwbV9MdDtIe15VVEBee2VXIWhUNWc/KFJFcCVq''@;'; put 'put ''fTJNRixqRnRjQX5WcXRJaXJaRWVKcmlaeHMqczB6dztjKTlUKyp+dHAxRTdVTiNnakBDc0xUbHk+YWNGdTpHKVlhTmApci9pYmhXcCF2SHEyWXckeGw3eTFJZVA4YiE8Li5BWjtsa3dEW3N4OXpIaEA0cDhXWUttO2drfGFEVC9IUkpibFchTTw5TUVAOTBCSDIqdyN1eThwYE5zdzhlPHlpaD5Z''@;'; put 'put ''TjAsRyZLPl9obVhleDUkKDgzWHo8Q2hESHA0PClGYH5kQjM+UzhUSnkufUlDQDwpcSNsZ2k5cWlVSzhuP2dvOTJQPWluLHhxa19NOUs/PypxOiMqfSQpSWgmbVJXKXxJWmJHYllmN2U4UE4yN05+QHRRKm0lZzAkciovQ0VbVT0lJE5OUVlWfFE7NlVmfDs8WFcjKEBqTSlzd3l6PWRJSyMzIzdX''@;'; put 'put ''dEEvamRXaEB9MXRxYGJkdXhNKTZvIlEpbEdrUUolemUhdzpqVmckWkpBdklBQmAkMVoxdkhbaHs+eylqZG5leV1vQXBHXUIjTEx0fWU8MHgsQ3xgaFRoVCVgd3sjSFlIb19bO25pLz8+clhHTVBLUEghUD99LzBrWlJ2TF0kbkpRVkdpaC9hQjFaPClGNX5yJTUsQSRvby9jIVFKWWU1X01aPEc1''@;'; put 'put ''UDJyUWJJbD1pJlF3YykuWlpSdGNURjRaZylkbjtZdn1JR11VW0NgQFpuNVUkSmgjVTJzb0l+OyUmO3U5N2koKVZWQmExVEJVdU9tbjA7PGhQZmd0Lk00WXBJOmhiN15kcCoqKG4rbC9zTkk0RytQRStWUTJYRWBxN3VFK3BjPTlsL2NOPDQhTGtLcUJqaTZDWnNVSyxzRWMsfCR1KlA+Qz11aD59''@;'; put 'put ''QDosKiFDYDRMQUZ5TXk1fGJecGFCKUZBKVBGVT17QSUjdEE/PFM7KztSLDZ7ZHg7JUM8K2FoeCthUDtDOVo/eyxMe2pmLDk+TGc3T31+UmwjPDVfXiY/OUkkfXtobVVTZHJOWiwyKXhwRkxsKUhpQEdTak1JcU8hbVI2ZklWbW8za1RGMVc1QjAlMEN1OHNFaURSOTAxVEtYa1orLEt+IVN9UUtV''@;'; put 'put ''MDE5UzZ7KztGbTckS3ckbnM2WlpxLF4/Y2lUPX1dYEtocj01UnRwYUZTSn00RFclIyRKa2ZvN2UuWVNufG41KD5ae1ZqU0pGMWp9KTtEVyVhSH4hYWZ7Wndlez4/NF0pTV5XeVN8KEczOTtzTVU8OHtYP3loIyImXkIjL3hsPitHQjdrYUUlIzhlcVE/STpxUz0+K2Y1RXN8eW0qTFRXWipIZWNY''@;'; put 'put ''N0xubXkjTDpDYEw7T2Y7WS8uWTxWN1o6dXchWWVURH14c3lfI3VNRUg3OXJpYjddMTlZPGZ7WWFvR1JRWVZ9SWczen4jX2RDWFR0UjNpSzpPYk5TU2Q4I3NlUzp9cVdTcE9xQGNrTSVsbzF0JGpIUlpCdVgvPmtyJVJKXkZTWUJQVSlnJV12TVB1TFFEXkN0ciZBcmp9SENlVSN+UWglZjJWUmI9''@;'; put 'put ''cXVMeXs2T1J4cmdaSFFJej5dSyNTbGswKH49MTNkeWA8eig1Jj0vaDFuLllhMSsoQHpleEBqOVNGPXllTzdGcGpOd3Y9QzBFbWUuamgpalQkeiRCXXZLQk12Ll4hOVYia0U+QnViRW1tTmF8MlBXSDgpRDE0XjhLYEZgQn47YnZOTE8wPXJ7UHN0dzJFbEFZQilsR2p7dGlkQiI0eXNQRHM/MlE4''@;'; put 'put ''VWNQVFhyO05tXkt7V2dMbWt1VzY6ekY+KHhHVWJSQUdBXnZTfURLcEJ0Py5hU1NFdCpbOzBeRGgiN1NAaHRjUWhqRGxYblp5TjYpWEF0Y1FoSng6UHBvKUVAfTpDPGZEQmFxPFMhQ08ycUk1RjkjMFlCPzpvT0F1TC9hWUxOYGBYIkFAb0ZWMEtRQDAwSj1sXWJyN2NFJE5QOWZTOWVhb34xL2Yx''@;'; put 'put ''fFpYOHcsT0hjKEcpMWdUJl5OZix5WjJbRnddU2xaYlgkfE97U29CKkBMPSRkUDsrN3UiQTxlVXU8ajNjJE09Kk9Veml5dV85W1RoWy98MVpwaDJxUFU/W29PZXgjQjc6aDQ8VVMxNjxzKGEhODlmPSNOQmJIUUklPm5iQDBMRUIxL2xpaS9gUiN1NEE7dF0hcmA/N2U6dEhyUGhlM0t6Wyp2RTMi''@;'; put 'put ''ZzdHT1pvXTt+ZUBhPiNWTXt2YiJMXlI5YHZiamVJVmpkNUskN1F+Nkk3dGwvbFVqWTNLUUNNOFpUKC9FNVFbXWlAQlEzPEhgcUhMPDQ6b1tvfV1YK2lddFpmdzR8S0Y9KVRpeHlPPCpBS0xkMjYqJnt1VzdARml0P01jamB5L21gSnokPHgkc085Z2NJVjZHTDIqOWxNO1pyJWBsMVs3bFlsTTBA''@;'; put 'put ''dyUleXYvYmM7cVBmJCU4MFdXNEBCKiVuWVAwRyxDNV8yP2JKZjhZMGZwdTdCNl8/JCouKlgqbVlmYGVwazpJSz9ZMEBpUDs1ZypQM1M7OENKJDY6Ujg6dlcrYmRPMypuYEhzIz9VUiQ3a0NYMXo2RVQ5K0NWOTorUjowQD9dUEVXKW09TkhhRTBpdnopMjFfazoiUWpyfjwyPXhoWG9RP3MqOS43''@;'; put 'put ''KlB5ZSY2VSpSYnB3QFdJZFg+YXRbOik4JFBNZFNubmlHQVE5az5RY016VCIpUnk/PHdIcjQlaVYkNjQoQ0JeSU06S0xNYTFMIWk0c3xrT2hwR2V6ND51eTUxZ2xlfW5HPFEoJjYhXTNId11BT2cqb14+KytyVTkud3cmZ0RoNnNSa0prST46Yjs5ODRQQStHeGBuZCE7L35AKnYjWEsuM0N8IU48''@;'; put 'put ''VT8haVBxTkU8XXdSQ1k6KWl6cElmbHFodDEjYl8wI3F9KHFZUXRoMk8hKDtGQiQva0YqRHIwTE8rLCxCQUt7dk1yXVEiQDIkV2VGWT9UPFdlM2BbfHRbaV13dUYmKW9SKyUvRnFIXzU9MChea3cjUHVKbk82aCUhdTFLUn5qQVJSc2JHZHNwYk5veEFFKixiTUsienY/WDJtZjJMYFRYa0t1NnN0''@;'; put 'put ''QiNgWkA9fG1laGRgOmxzcGJaOEczZ2Usd3ojdGhnY2xQeEloTVtWVjpPeV09PlZufDhjXkZCcmpkaCokZzw0JldFKWdSa0luOjthKzJwdEIrIiMqWCFPSD83aEc8KWk/JEI/O21aM0k0eVpRXXc4VjpjfGcqZkhVRDIzcW8wUVE5M1JVKEd1eFspQ35wYSF8Kj1aIipoPnYvOElqPjkwanV3YntR''@;'; put 'put ''TC5ecTp0PG05OHFPPGM7eVNVLHsiRj4lWmFUXjNdWEgxXUF3UDtFO0o7cl1RQy99PUlMWVkvUXZOdUBwJTJLPzp5MnglJW1LeX1QRzN2V3oydiw7RVh6Oih2V2h4Zzhjd1FSYnFjVVMyVVl4OlVAMCpJLnh8ajNZfk1bWGomLElteEdrZFdsejJaNHF3XzUoXyZUdDllNjlifGRwSyUiWjU9cFVB''@;'; put 'put ''TStfUldyb35bV3dnW0FPJCxTejQvKzdaOkJPbmVPKmlrQjc0eUROJipePGB4dnVQPmloRCUqO3NlXihvXjVpVS5HSzA3KkR2QHJffC90aGIpKzlnSUdSZTd8Wz1eM11WRn5VNGQ7eVNfYGRjcCo1RVZ+fnkwV1c+dUcsaGxMPW9PamhGVlRmMkJVcFksTXdoNEsuOWdGSWduXTh9fEB1JWksRXgu''@;'; put 'put ''PkBJQmxsRlEpO2F3cmpeNERMZG0rQkoyWyNMRyxDJThfNFRNcSY/V2o2aT5EKCIhd198YyxKbVNmZ3JqOkAjcUZqVCV1enkmXTcjMUplQlR5LEIwZGxWTDJMIkYpLndGVkhkNWZ9KWsiM2RDJjB5R2hDYD0xcEsqVHZpU04xQVspdElqTDV0cVJjIlg8ND5yez9BbzJFZjZyWl5wZ2IsWFJKdCx5''@;'; put 'put ''WDw0Mz09Ln07OGJ2YDIvInc3WEZHfENVV11SemMqfSZaVyt9ajBlRFl6d2JdUkpNXXpjYFJHOVtmSCwxVTkxTXAvOlNbIUtYYVtKLlh9ZDcyQC9VZHptSmZ8MUE+ZzBMNWg3NFJTUnhhQ0JuR2BZe0ZeN2UuelN1bE8zdCMuYFBkKjJpeiR5Jmg2SHxVPUghRit6OyQsenouJml4UD8wRShtU0de''@;'; put 'put ''NypHOHdsKy5hciMlJWhxc05iai4jT3g0biMjdmpOUGNHWlc3fTNVdmt4S3skaWBMaSZNPk1dVSVSPik6MCFxMCZtS2dVJSM6fWF0ZUxnfGR7PDhhViQ2dEc5PmszbUtnJXxXcGJVO1NHOTo6aC5UJmxdVyRMZH1wWUJBTmZEU3c9QEI9MG04PSQ6eHBLPEg5SX5+dFJVYlFGS0k0LzZuU2YlPj1r''@;'; put 'put ''PD1hViU1YVZSL2EoR1B6e0BZM1pzPXZGcyowLylfL25XYmVeXSRUI2ljW205XnNWTWx4OGt0ezJXOlVBeTdaOis4ezhubjU6ckVfNn4/OihncGppKDo8WHdVcnhSdCM4ZHQ2Wyk9Xj1Ibmc5MEZdLjxhZCFIXW43ZS5ZMDR4QG8jYEkidCZSWG85TmxuVmhMMyZXKH56PG4oS0tAeHxuYCxLTGZy''@;'; put 'put ''PzFNLjVyKipLTGQ9cipgNlJoRk9qezZoVD0+ST9pQFRHP0cyKlJ3akxNR2dRbSpNPE9mN0xQTElTTWtZcDluOW1RIihTLl5we0llTFFicUVZYT16a3pTSktwZChBb341bDIyLC5qKlNlYTt8VFtiJE0uWm9RLjYrJjlzb2o3K0pKW1pmYmpEZkRsTXV6OGlPLmpnRVBLJm5pa1BpNG49XmROMWxK''@;'; put 'put ''MUsrezRidFZ5ImZubGAyRSQoajhbY2craTlVWTgpJW07W2s6azJJRl8wIz5NZnBARHF9aEJsLjg1amY3OlUvW2ZwP2JVQ01DVSFwRlZkM2VDLmN4WXlgT2IhJnxvZyY7QFphL3k7KVBZM1lwfFNeTktsUFg7dTEpW1ZfVXNZWU9NRm87XzpWVVkuVVdvUCp8YGo4NW9LW0FGSzc0LmUlUjxsSzlH''@;'; put 'put ''a0pzaC47PEZhVjJDJG4vfmlLI0IuO21hUUZuLlNCYnVtbG06TXM+XSRRbmtXSz16Inw3dXFiJUcmXykve1pRWDReU0tHRVdWZlF8bjJ4KjI4PXp2LGQubFsmTTFPWDFdbj41byF0WlBOUUMpdFZNWU5zR0tHbDRyNHJ8ZnlbcHJETClRTUVNQFZgVFFFMFlXay9CcFZEUVEkJHFXUVlzMUVwLFts''@;'; put 'put ''RzVhR29BXTtxRHQkZD5YRjpGTUsuOFtCIUN0OCUzU2AhbExFdjViKz5OSyNZdjg0Q2Z5Q3Y4Mk92OHY1Q082SSE3UTd1b3s0YGlvN0lkfF1WQzBecDpNSC9eej1eTk8hRGt4YEoiYy51L3VbdT91SjZWTnJHKilDOUZ4R29PNUtZWllZd3RHbkBsIzV6WU9ZYDlZeG8ubmozVW9qOypLJmZrdSMq''@;'; put 'put ''YXdqP0NVfDkhTzduKTYjZjBQLDUxM1V4ZWxAYSY4XzlZSjt7Yy8hRndjQC4qXno2PG0jWm5uQ0dzNFElaXd1SkRDInJyT1d4RGxaT2ZDKSxxM2JbIVNWb1lVSlk0YTJqN2F8Lkk7UU4lTCh8YUVJfnVveSNbUlAjZj01aEJ9eTYxcjBqQ1s2PnwzYHlXWjBUdyIpfjYmSltnUk8wLCpkPURgUk0o''@;'; put 'put ''WzdoT3VvfU9iNWhGTE91TDU6K0dBZVZJZ0FlQylTV2t1dFczclRPfT5iVF9pcHRUKHc7QkAoLFpjbS81U2k5M21RdUVPV0puVj9eTzIsKTE3SWpMSDp1Nm8lNCEzZzlvMlA4Q0ZsVzBzXjp4UVtbPS5yVVRQSkBUVTloeG54bipybnFOWUNIW2VCM0lbdGtjLkpHXzZaPiZgQ0YpUiwkVTFFUnsk''@;'; put 'put ''U348KlJfRXckL2pNPG09alRSejZHdyQvVkdqTSs7Mz5pPkd9JF93R0tCX3NHJkU2czMwRlB4Yjlhd2QlUnY/bGwjRypuZUVoYm9jLFM1OGR4SFpVUkxQZk9IIUhAVEtXXmR4elNhQnMrbls3R2JKXVVSN1MzR31jKm5xS1AwYEo7fjsjZmYleTNGNnpRQ3lKZ0IiemBKQDZrP0pSUEB5KHRZcC8v''@;'; put 'put ''SilYTH0rZDlNNDVFW1VSPjE7Yyt4JXdQYX1Fd0Y5fj1zVjVaJW0zY1ExQ0FXZGRHQUNCdDw+JlNGTDFsY3d8UCRBPUl0TT8jbDBGRUNQL31YJWBLRjE0QzJpKHN7ZnQqU1YrcklsW3tMX2dFIm9QXkN+cDhCeSZQZWMxTT0uaXhsYWtPYlgwZUtfX25mPGh6PFVlaDJNPyUsbmxkUiNeLzprdEFG''@;'; put 'put ''RG1YYGxPN1ZgYVVOc2x1TCwlR2EvJTN5UmBYI3gmbTo/ZEhZWzN6VTArbHJCMU1uVUFlZkxna2AycG5rYChoLzwzcnZoPC5sWl1ZVU9sW1AqVkJdRXx4OVU2PCM6LiJjWWx7QGBgI2lbLCtbXjh+cW40YntucmtPWlpAPDtFNzphSUVgaTlfXit1eyhIUDNwMVNpUiVddFY1NWc9M2RZNz9YMV9L''@;'; put 'put ''cUZWMmNeLz0mSF9uPnxPWHFXYV5LTTYpODk/OTFFOX1MIW9jZzVRZyx9LGxVZCRadU9nOFtabm8kRXAiVFZ5XX1mMm9jY1Y3dlFOPSlmMlJ5NmdCVXlvX0o4NztvSkZnbHNDODdaMCFmZ09LSC5aWmV3IXA6YWkzLn0vNm8uPF81cVtGS0pSUEtsd2Ylai9GIWtge054cEtRbiRIMFk5X0hdKnh4''@;'; put 'put ''Z0NCbEFsUCtlKjlwbFZLZyVIfnV0byJ6cTZoblNEe2pFL2ZLKz0jPX1fb29kNkVwRCg+OiFgQmRpfDU6UF9eXU9wTyR6bCR2IlZSVDQ1cDpoWWpkJGRpYm5aa2A3UzMxWXBNM3d4XW9SVkY7dCFAVlUkQCk2ZFlbcl1OVmVRb0ArVGU5dFAydnVUV0l9W19IIkxfQGBSUER2Ik5aJUU+KW57LDd5''@;'; put 'put ''YCF4K0ZQKz0pS19wYDVQO2NuNComa0h0UUpFTi5lTFlUQlVvUiVVblB2RkppcnREPT5dbzgrR1Z7S31XKik0Z2gsZUJRVj05dHNhWzJAezE0aDc1PXAuOjl+fSJsYT08OHBSaVdINnQ1NDNiY11fNTVCMmgmPEAxUSVxcG9FYCw8bSNoTCUsUWhuYFEyaCZzczw0SmlkQ0FTWSU/LEFrPV5DMkIu''@;'; put 'put ''YnYmc359RU1+PGN6cnR9Z006YnZON0IuTCxqY0JiSDJxITlrPXlofDlMcGMjZ1IyZld3MV1walJaM1A7WkY4blEudDVOY0h5QSRaVEdpVC4hPXJvalsmU01UMUhRUE84REg+elRhPE9jLD14dk9tJTJPWHpIYWNPSShCRmBrPG4ibmpbbV0wbXYjI30/W0ZNYX4/a1NnX0wiWEhdPzd3dzhEM3I7''@;'; put 'put ''Nz1zKiUmMilzSHRJXTJTW3JXbFlgcmFMLlQhdyVTTSF3Y2xSbl5mNmhUSnRZYiRuOjNYKVo8cHliVj1sIiwlTUleTVFebGBGa3c6KjxCYStxYntyclhVYjZtTn4+b2NmJTRiNj5BTF8uWzV6USVxZFVuJjxAL3A3LGwoN1RDZSZlQyxCfG0vLls/LkZxKSZMWWQzd1RdVEY6T2Qkeyp8KlgiUF82''@;'; put 'put ''WTI0XkthSl0qZ2YyQk8mcH1xKHw9VUwuXztOTnxRPDxwb3lVYFJGWV45VnFWeDspN1Q4dGdqfGEyMVlCKmhIKlhuO1UzI2xydHlKNjEpUz1GOU1UdiQrcENYWXN9W2ghKStSLnUkb1R7OCEvZjImLio0bF0qbUpLfXx0c04ofk1ebGs+OmRzcFc9JlJ4c3hpMXZ8WyYlIVhjVDYjdGtEbE5idmlQ''@;'; put 'put ''Qz5XNFcxRUkjTDJ5UyRNODRUPiZ7dmMkTSpOZHYydWYjJmAlPzFVLislNCwxQCp+OXhVOz1YNnc6S1Ezd3c6aDc1U1JzfEd9SFF0cSU7RyYrMihwLy97ekt+OXMlNDpmMmM3e0pnbHwqaz80JCZQNHo0cXx7QG14MVI7IlR+PGQuQFFkK1g1MSlbX0Z3NXRqaTQ6MSwvSnZNLCk5PU84aW9MMzMx''@;'; put 'put ''NSZOP3kkKmBpaXs4P3dQOmxRJmRBM3ssWywvUzleJFB4MCExQntaaHA+IztfRkJ+PiwzVShTSnJBM1M7cmFTNXNVO3ptb3JGQnFyW2s5Jjs/XW5wVHBrKV4xVWl+UCRDfXt5ZD4sYl05OnlYTTVGM3l3T1MzbiJRM3c9IyY2cGBSTTBQTmsmVkdjZVkkViFFTmZwcGhlVDYmYjNVRSEyLCVpYlZv''@;'; put 'put ''RypNPWY0bUR+TGhTX0FgQXwvOnV8SnptOkwyV1dWLkdremFgdztHOUZySmwkNlYpYypuMCl3R1dCV24mYmEkdTV9b0wzSDZOdjVbYEEmXy9ZfFsoLjZneUhheU4rciZlPH03YEBOcGw3KWlsO0pHYiVabko4bk5CPWJbU11iNzxVL1pXL3dQWi5wb1hWckR2bGdpPV5la1FKZnZHSjokOkgzKDoh''@;'; put 'put ''fipOQStPOiFVZEk2Mig2QyFLYSolKGw2cG9PZ09ifXBEZWpkZ3RwM0xkSG8ranYuSF9ucC5nUFZ3S3x9OXplYDVmSn1wI2t3WV1aVm5ULjZVQ3k1MWBLVE1bP0NLIUpUOix+Z0dlOTdlSy51cj1sZk41Il4sYjNpVDJDRGJSejR5Si9QNkhlOSlmZTkxOHZELzBie2lmY2w4Xj9SVjFiamx0all8''@;'; put 'put ''aEBkInR9ZkRTZ2ZBQDw+U2QpP0RdOnhtL2QyITF7STpAd3NsWUQ7eUVHbEdlNzdiJE56JSZSRCpsPC9dJUJINnojcHBqY2t8Jl5PNW1EelRKT2BELyplQUx9P2ZWXWBkIWArJFB1W11AV1pwYmt5QnZhWGhGS3wkTDsvZnJTS0tJOXRxMWxbKDdUKXNyNTQ3R14zYl9qRn4lI1BDMT46c0x+PTZv''@;'; put 'put ''dDlacSt0TFE6Kz8qKSNWWzNnZ0tvdUVWUWtwI3gjZlZILmIzMnZZMmFkOVN0b2w5e3xlWzJzWm9zOUlyX3BaT1pvIzx0U31OdzAuVEROU281YFdzMzdJNkxFLEMwbGgmeWp8Onx5MntuZHo+TC9yPkVANH5OZ0JQYj5Cbk1qdXNgU1oscj5POmwpQWRTeWByWXdDKyw5eG5XfXo5KH1gQDg7c0x3''@;'; put 'put ''Mj9dTmw4LFc7WCNpfUxqK3NhfWxDMDozMG19YlFuWWNzVHdNNEgoaU0sQDRsSDFMMzsvVzsvSiYlbno/ZX04OTs4e3RkJStqKnAvImJXJmg2NXY5Mi5pcSo7fFNPM1MlX1hKTj57OkYhdFVJRSZwJGQuaGdYaVg+cXR7bnF+e0EoIiosdyYlKWVPRj5yMihvXWh7Q14hWztsQTtOcDlvXyMsQCt8''@;'; put 'put ''fHt4WGs5cytPPiVNcVM2N2MpVFVSTUhtITllSlM0YW92M3tFTUsxNkAqKzpGeGM5VFFtP3g/KDUhZFoqfVtUZDlNM2lFKGk3eGlVXXdNekEmJT54KFskLmdxNkNocWpCWns3K1BBR0ImUX5YYHZWeGJMfkptUmdBLFd6ZC81c2dbZEgqM1BOTVQzYUZhYVFtXkZPOCQiN1ZdTk1ZNmRqSDorSFIk''@;'; put 'put ''eiJrV19mTD95IXhYODAsblBdMW4vT0NLaXxKTGFeY1EzO1c7NnNIPUR2NmRsRVNFPV0qZjJCMmFsYk4+b107XTdRYk9iPm9tfUZqemA/TU9kSmdeT2skUyg5emp6bTpgOFo8YFhkPkU3NTYrZ1MxI3siIV1wN2FDfE0zKGxXV3A5Ui5RZFQpJSxfVlV5QyghPWFjey9zb3xAT1hKWVsjeXJMZzYr''@;'; put 'put ''amRHYilwMT5qS34lJnwmL2Q5IU5PRTNCNzx6Nmt1YjJTdmt1KzFMM2VRP2BTXjxrcW0pUXFIQS9HT0ZqQTpqZCt8ckhlIWQ6JmJoYUd3Mm0qUH1kZ0ooVmwpPDpGITBgbC9rUip7LltEPHAiLCVELn0/PzQreEhwQTJkMEpYNlk3Sn5uJDpyJW12VyQ1b1VUMDwqeGFYU05naVlbaHAyN3VqP0Aw''@;'; put 'put ''LyohR3Ika2xtIjw1dyI5UzQrUyJ3NiYreTI/ZmVBQEE9eyppaCU2Q05xflA9N1BgPVFRQmJJJGpibTUzZ0VFNz1QYHh4KDhnenBjQzB+YSpyJDAiM2BAMitHMkgoR19nOllJIV9QNSJOeF5ZSC8xPHBGQi9IaE9mRUR0QG5sZjUqa0J+TDxRPEQ1SD5YSmowJUxwbWQqajVhYHRRZyJeamhiTmJ4''@;'; put 'put ''TkNNKmE4UnZlWD9rY0xnMHtTR00sWGpoMHk6SS47MDl3YU9TRFpSZUxAUi51I2JXVSs0MlpWX1BLR3lsUTBnO1hKTDgrXzg2Wj1WXihiUC5AXjl3NyV8b1tycyVpQGF3U019WEolWFgsZz9ddE4jSmZUODF0TnZIbGYzeTlMN1M1LG0kYWV2MnVpL1oqLEdsXkdMdURDO31+Sk9DNExQdnpLdmw5''@;'; put 'put ''SnldfjEwampqPH1ETHNUPDo7NzRrZk5UV3pAQ1IzQnU7O19AKTlyPl4oJk1KaTVNWFhEa1RhP2xTQjJDWi90WHRMdV1CNjN5KmtAJEcpPlIsIWBdJDJ1QCZCdyk3dHxtPy9PSV5NdkNCVXlhNiNpVz0jPHUkZj1OX0hVYnwlb3FGRUt6R3tgcWxEWW4wLH53ajllPmZJXj9yT2UqbjllIlhEXiM8''@;'; put 'put ''c0chcFMjMTxWTyomczpUWmxkMG89OzhxYVVDdTF8bEhCYHVSVG1WNSlHZHdzaTV1NjZHa1VLcXJGNiFCKyR0dW89JTR9SHRGOnJuVypAWGAvcmJERnZwZHYrWzJaOylhM1ROMFJefkE+fGlkcVlYIy5AKXFDRTlLTUpCZkt4OmhHZWRoTTZHZXlsQTtdSmIhdWJ5aVp3Rm8+Y1dkPCx4UUleKjhT''@;'; put 'put ''JSE2S0x8TSV2JCN+MF5AWlo4I0N9NDxKMCYyamZBYXlYImdxYWJFbmErZlAlTWFHSy9tSUc3Ln5iP3JeUjIoMXZILFprZj0mNGtTfGgiaCQxIVdxQ1Nvc2NCSysrbUJeZUZYM3RgSnNzUXZEdWh1RGQ1RDxuSHJeUCVWd091NCFXQUB5MCwqeTBld1JpPVloT2dmTWEuVHA3XzlFI3paTV8wQ1VJ''@;'; put 'put ''YWB0YC4jTVEyaEdlblhzYjZVfEw5MTE7b35+OztPQ0JHeFQ9QTZGMmFpZ2JtZXBGTENBMUQufiJoZDBJY0s4YFVVUzdAYTcudU0iclc6dypja2s/Img9WVozbjZGIWNqQVk1PmU8MFhwN30rbWkxdlg1NzFDXl80YmhuMVplbVtsNlhlXVBxISExZ34jayNIaCo7QFJVUk9nIWU4aGQmT1FVXkBW''@;'; put 'put ''MX5rMnhkWHZjUm1KMCxNdGA3fXEudGhLSH1HSDVeOUJMZGFRaE9AOSNkVmdFSHZycGpQXXV0I21ARWZ2eWRDaFJzWFhvcW9YPHR1eXpEOm5bKTR0VUA+cXwudWpgNklHPHxrQGlxcDo6IWFvL3F5Mj8rKV0hcDBeUGJFaypoKS9nUTFEcmNRS2RWTVE8czFjSzZiaW9bXlVRJixCcypgIjt3aV5H''@;'; put 'put ''bm9hSHJhUj5PTTE3Sk5LMTtAJnxvWi5YcW9uaCRlKjQiTGY2MkR6e3hGc3RmTSV2NFVbL3hvJGEsXWZ5YyNiMUZmOTE9JnNIY2EwLiFgc1g3YXFvM1ZLMDhYc1hkY3AqfWhrM0xyZEJAVGtYY2M2ND1WSV5vNy4+SltGd3oha0RkeCVFdVtfL15DUTdXSjxfQVFkbHchTGhOPFBjMGloITxoKmRJ''@;'; put 'put ''Oy5qezlLYXNVKWR1KmUiQHdmRmcqcSloZCpuaDNpKmZbOz1gMFRYSzFgVUQ8WGZULz9FdUhKeVIlPV5IZU1Fb2lkejlUaylxezJ7TlA7RWpRWVgoRT9zIll0aFZYfFVZcFh1QyUmaWlKYnhjOilAIlNdb0x5W0JfYEY4fFlqIyklRkZWKDNTI29BP0ZeR2U6PzR0KV9vLnFlSWpGVy9YY2wmOUwz''@;'; put 'put ''RkZeM2tFMk0iKHMmTzhyMyFPRjdjajxib1ladUlXMUg3LzF+Y2pBZkRqM0gpNFZ9dFNKel5vYDhmUyM/UDo9bytTaWQvNmU+azs3dy9fSU0uSntJMkZoMFlVT09eKHBwT2gwIXBAb2JiaSM4bEx1U1lecGsrfFlPRzhnO1c4QChbKH1JcE1EUEo/TjgseEouITtfLnZgZlNHK3A2fXU1LlY1JUl5''@;'; put 'put ''Z25vWVdHZXJeaVl3bXVNLHhwVCtodWxAMVJNb2I+JWpMUlJmLi9PN1pVT09SOTFjXSR2NTNNX1UmXkBHQFYiYHEiWztJQmYlY3ZfTS5KS3Y4UkR1dzpOQlAqNiNdYGB8UXIpUj99MGEqJE10SDI6P3E6UjkxfWJSWl4/alMyXll6SkttJWJ2fHFZZSR6eyt6KlVpOHI1PVYwQ1FGOHA8K2p9Rncw''@;'; put 'put ''KnV3SnFgdyFBLzY8aSRiLDY/Oy45ZW1sOSNmU117RCsmaTZqN105PEAjc2w2aG9xZ0tnXS9ZPGdqfjFtXypgfV8uTW1FMSpJWH1GamVQYGhmOE5ScjVLJFtAQzg1T11yfHEiLkM5TTh1TTw0RFpOOHdjLkpSaDc4RUkmI0Q4K1dyLj5tPytvSXdNcC8xaEElMEUiUH5CKig0ZSU5XkhEOz9hU2lT''@;'; put 'put ''NU9DVyNLIUw9bUVEKWBgSWVyUnxnVXZkVFpaIVh2U1JPVStMYVpybSZhIV5jQFRJOkFmb3xLS2ZYSiFSNyk0TiEsNUdCSmxle307ITNMM3IzTDMxWlBjbVIjKnthZDB5IktNPmhnITAhI2lpQk1hbXk8eWZOekdhcHJQO3kuUTtackV3XThkezBLM3RQQWdDZWAkRFhmKl9ffl88N0d4U0doSDxg''@;'; put 'put ''c29WPmI8Z0o+O2BILChHJmppJmx9UHRlU2R2W3dgSitPeWJLMTZJWy89STZ4O1JoQS94O3QyRVtoS3xbI3xCNGZtJmRzWHxaMFR5VHlUMTZDSTZRM1NHOX1PPGZ1T29yKXxRbTF2dCVRaEFaUiQ/N3x8LE9lXU0zLlhUJWUuMnA1YnA3fnYlc2RFIltNLl1IVF12JlFNfW5bbV5sYTpObDg0dkJ+''@;'; put 'put ''My9hX1ZJMX4mRzpLZDRsYVlJRDAuKylTNl5kbTYsQGlSPUAqOkZkY3g9VWA3MmYuZ0lnIktsOlNSNzdMM3R6Y2BxVU99RVRVK041K01+M3tyY1F6d0p6KWQrUjsxO0Awd3g3Rjdyc31TSmQiN04lSWsvNFUlJGshZHtgdTFEOGd6bjFteiN+MyVyPUlebzcsKlYqUWRRLHA2M09MMWZEPEIqLF1u''@;'; put 'put ''KWZ9eVB1RFY6bU5hM09LSigsfEQxSWRhTDFOcDJCa0VUI3FKbD1da1c9WWFMTCNYUEFpVkRHOURbaCZwazAzdndWKVdVfWw7eT9aaU5ZYExwOTB5RHNOVnhFMFYxM3N7Jjt6bnBUaClAaDtvWWFhIT8+eCp2cyZ0V2dQZW9FcFtscWxRQS9Pc0xsdSQ1PSEkZzVbe31AMCg9X35reCh6IVEuXShT''@;'; put 'put ''IiE/Mk1nQWcqOUc+OjtFWzI1WTF0TUZKP1pmVyFCMmtkOTo2dTBfYmA6X0BaUlVvM0hMRyZ3YiNHJHVWRyhVZjJIbFBRSnU+UyZbQHZnMkVbMUt2OFhEZX5HQyowfUxOQyIzdUY5L0JPOzshWy52R2VwSnJ1bX5NZUJPfkJ3NHIhVGAiMl5pRVJ2SCw+JEk9aWpqWmVbTD8hOiRpdHRYbmB3MWxS''@;'; put 'put ''ZCF1X15xUE4zOnldQCx1SHhESU5MQzpIVlBvb113OzFUWGdHMUhdQn1jRWlPdHU4ekhTTWtNPjQpZnExclJTdmsvTDYoW092SEt0YGx6d3lbdDhIcXdmPlI2ZlZOYTJJPUw+OnwycXd5eitwNEl9QDc+I0RbMEc6NzQsT1JVQUA9P1c4LnhuP0shbzxMW2g3Wntla2AhbFAsVFlLJHthcE07Ly57''@;'; put 'put ''LFkqISMwXW15JHtnMjxZVjgkI01bbXEjN3xFKTdlaFB3a2g6X3cxPjN4JkgsLHVKekoranhEakpdME85ZjpVIXp8VERhZmFhTyRhImZ8R2lJMXdLenkrNCwrdn5dZnBJX05bRTV8fCxPIm1FRVN4WTZPOV4uS004LF00UW5gVUYoakIpYHM/NlVATmxJK050RzF3cWY8Qnh5PDZhJjN3YDNGXTIw''@;'; put 'put ''V1dFWWJHVlVRVWBHbyxjSF9dNHVBI315aFpFI1MkMG1vK2s1SCgzMik2YG85RDgsczV9JVQ2PW1KZjtaOzxTITdifUd9ZGYlK2t9Mm91P1pCYCVNUj0zUDA0bGU9PmxXPyNZWmZVNXY/bTowYHFGNVNoOF5YNSFXOC9UO1QmUm9GOGNyej8kWl1AWCtUOHJJc0ROMFU5SmhMS1c8OTAwOikzdSsy''@;'; put 'put ''LFp+ezZudVQhOjNAJCgxIUxbZ0lJMyFTTWFPOiwyeGY6VWkxe01AS0xmWFtXM2suKT9GOFY1amo2PThmQzVJYmdCYyxyaUspNUBNVGVnUUNdKSR2eUYhOSEoTlpYWmVFJlMpRispM0QzclNEVjFIMC83NE1QYkd+VDl5KUdKfGw/QCRncSoxUHp6eDh7OUlQNW5CViEsQlFkaGE0eHU4eWxseGwq''@;'; put 'put ''alNnU082RmduYjV2Xl1eTmRKNVQ5TF14LCsiTEguUl9sN1ZZMSh5ZUJ1QSlvY3d5JjA7RiRlayNoYkBFPm1BTmo1WERaWVsuMDJbWXlqXjBpW2RhVkNAI3JSejhoSmxibXVIZzl9MTMmSihwbWM1djVlPC9WcGZgX0A/amIkO2RGRmo7QUd8I1s3YEBJb0hSazkyKF9QSTszdTFlTW49a0IzSFtx''@;'; put 'put ''JjNdOml3MCRgcW84IjR+NjI1TGlScl8kUWJUT2ksSnheV1Zxb3R7cnQxTWRyV3VYQFBqUTZoZnY/Qi48d2VmKilXMFBDbi8xUn0/JlssRzFhSGE6OTN6WldpQ1pMPjpbJlVvUnhRenNYY3I5dGhkP1RjYCJUKlpGeVBqfipKQ3RgXklRNUhmY0Ndd0JnN1h1LlQoNjttdiJUVUB1dkhQYnU6dWFl''@;'; put 'put ''Un1WcVpFV0IwfH1SWCloMT1YIU8xNU5QUyJoZGAlMCFtM2pmKT82ODYjJCo3ZEoqVUlYeEZDUDh6NTouVmVtQlFmd0JeLCFqT2F8b2dJZntieTlrd31qclVJY3hHdGN2R015c3cveGQuV109cCkkaXc2ZXVqPVRbSm0rOV9JJjFHP3krUEokbTh5LGFARGJ2c3t1UCYjKF1PSkJEeCx9US53WWFb''@;'; put 'put ''R3d1M2RrTmcva1hKWGNseygmRlFqV05EKXNTLy4iY1ZVfmI8QXpfUWNackVNbEUzcz4rZ0ZRYUhWUE1nUz5xMGlaJjkxfC84KTY3eXtCVipZVmlWUEp6dTcrbHhIMTRJYnFTX3lydShGZktKQ2BxNXVrIVt2SilZK0VzSDZhJXFnYnZuKTRFPlQyZDhZMUsmdz1rYHR0cD09PTRCaXRoZWNPYXh7''@;'; put 'put ''XV10RV85NXFJT3ZHW2NvMEJGZnF8MTJ1NUJkRDZHNU5BUWB0MXBQfCRbakducF1VbUVTMmVNSCpFM2ZbeGZrNGtIOUQ0NGJ5VVFNPEhFZTNtdlE1I2s2YWFOQ292JStZYmk3a19jWSg4Rygrb3BLTlA1Lk9xOD1gYUVRUm9NcDwzYTdSWCkpYjhpKWJ8IUliXTpKM0NJVENEbDgwUzVdb0RbM2FB''@;'; put 'put ''XV9xMHh7di5pQ3spWXlMSSxiSGpYPSxmbWlEPEJZL0hleyMlN0lPZj9hKmZERGt1cEh2Il18enhRR218R0dDNkpBMztOQSNoYjhbUCVzS2xrSUMoY253cTBFZDchaE1lT1tXTmByT310OSpJdzZSYCpKKlI7Y1A/YFhqWlc9KSxGcGY7I1gwTllzIXhxJjhteUkkYDx6RipqOFZ+eXxPaksjWV9J''@;'; put 'put ''fUxCcnREQC91WExSNkJiJjE5NC9pR1RJWWFuLDVDZCkuWmckITc6Skh8b3B6XTN2NCVXSjdtI3lSMnpRQ21wYixtIihvL0tXVVVDYnRvIzdTKG9sUVY5U1BFaDU9IUk5VWtIfH04YVllKDVyTyZTQTZVZ1dkZm9zeE93fC52eXtheUBUWSFTdlF3Okt4Pzh5alh4WG9GcUI2QixaRmc7aU1fOEJN''@;'; put 'put ''TnokO1BwPVR6RHp2bnB6fnUzNHh5Pk0vOS9kbnZtZzBxbGc0YztbaFU5Yz5gOWohPWFpIVt5W29sOWtwdXImLk4iYkRiUUljRVlmO29RMzhYO3M/OCVzeDlDMldtUjRVaDdtTTd3Mj54dEk4ZiEuXlVCQkhgSSI8UDdjQWM/a2BKOUJDaDREVCM+Ml1RenlmcHhxRGElSWc1VF58Y2g7dFNWZiVD''@;'; put 'put ''JlQzK1YxY3JYZEJ4ISpDWH1xQiZxcVNdfkY6JEJiVXJOTnlvdn0/Jjo2K3xFOGFybmhVK1goWXkwPF5wbzw3cDRmQCxpTnI4WGthcG4hTCxHTT46e2BHO2g9SWE8NXxYeG93JV5iRjV8PTA7NEhOdyphei9zJkQ7SERMLjBERWw0JVA4fnw0ZVJaOj9tU0ljOzRHMj8pVjBbTjM1Wml2JjR0SFBM''@;'; put 'put ''KEx9SitlUjRFeXUpTkZ7ZWREQC4kO2ZoZTQ3aWRjYy4+RHBMdT9SZ1F0eCk1OFMjO05sZTI7LEB8I0g6bVNCbSRJbjteJkNjJEIjNmtQTjN2YHQ1VTxdRkEoJHYqQXt6TX1mVlM4VTxaIXh9Qz80RyEsL3tGMzh5VX5OOUxGa3hSJilIKTVqZ1YoTVpyamA6TVQ7dXRrbiFmWEdWVVo3VWBFTSRD''@;'; put 'put ''P111UT5eeUBxVTAkdDhmOVB3OzN2Inx0MSluRkdlL3Q0JWVrT1Zyb3RHU1ouMXY4PUh0Sk5JRCh3QW0oVjEveWlHPjpKSj1kMW5QVCVQJiRTUn5nO0JjWHJ9ZiFRYGhtYHtXKl1rRitMMjxZO0whJF12aCRlPDE3aH1uTlFeWSQuJUdRZDNTTyZfUko2fSJLYlZTWCFLMVk9Ny47JHosP29RM0Rm''@;'; put 'put ''IT0iWnh4bEhWalZFRU13RWRKSjN4dTdscSNgeSpzVWN4KGR6MlJocT91JWZGeXtjTXBrcG1gVUFMTzx5XkJ+VjksW083fjVmWUxMblh8WnZROU1yJWUvQTomI0g1MzRbej03QXNkIUNmWiZ6KkZadXkwZjhMaHFPelY5WmVeX3hXfi42TXZQSywhIU4+TmhwKE9EMCxMOkdgU3A4N0ozJn50ZHtz''@;'; put 'put ''JTUpd1tyaUY/JVI1TGR6dUxAS2QvTSFnKE9hazM0bHp5bHs6fVFMdGhxJDRYY3UhckIyfUNBUSVMK0shcTVob3pIR0ZpdzwrIU5OR2R9aDlVMTdoKXB3Ui9aQHtgIyxrIWUxZ3FjRDVgazF7d2pILmlpZyh3JntrSURHbEt2Sno/bWVfW002VUc7TGkoMk9GVjhVeV02eFksWUMpJCsqI2BQZEU8''@;'; put 'put ''YyVbdyFJeHp4fXdrP3FsKFlQeiwjaDhPOD9bYjJid3JndmJkKV4oNEFre0s2PER1bDJhJXppRUZrZ01BQSpoe0dCdFZFKE1lYyJ5cyk8diwsR3wqQklJVFBbT3p0S1UoRlB2cHhtUn5YQUFBQUFBQnQmRipoRGxxaTIreiNsdlRISkZBPSE4Q0tXOzNnUypwcnhDOElJKGQ1OFd2UHt5bjRUeGI5''@;'; put 'put ''UkY3c2o1RStgTSkkIj9ieitfOE9hNVskTSlHXTJCcm8zfHwxfGYiX3piVVZaQ0ohWDc8P0w/N307JVBMRHJtSk82ayhpRWw1cDsjMC82I0BVcz94eH1DNWNAazdiPkV5YmZqZWhteE5WVGxJOWNuV3FaTDl4UVUwbE5JIyYoJGh2OC9tJmEsczEpZShIT3RScm00U2F4YnE+JmA/diE2SHh3Jmpz''@;'; put 'put ''dlRObGdvKVBwVDFadU87aF80LzN+aDV9bFtxYiFRQCljT2dwbGU0eDEqKlhXcGI8ZFl7MFtAalFAPDtAYyExeHtMWX1hXlhDQ2sjcDRWJHA8SlJYe1VZdVY0PnN5ZTJJYXx4ZXlIPUowXlhodzwuMlEqIWl2VUxnMiZ9JktxNjkoWShqYDMlbHldJjI7cjNybiVLSiZ1QkopTiYwXn4/UFhrMCU/''@;'; put 'put ''QTtbI0UvfGIyYn0yLFc3XSEialIiTUd3TGIsd19FOCQ8I3lnczlwNjR+fWxJRWovR3ZmdmFFSGMyI3c/RVJJTiRJR1F3P0NPJmd+a15ONCg+Q3AkOmBle2hZZSwoZyFiaj40fCFzWW1POn4pOn5Daz0jQHMkdUhiak5mYUlZd0s3UVV4On1TSTMoaH1dLlgzL2grJClFW2JANk9mUjM/QXRNZzc2''@;'; put 'put ''QCM6ZnoqT0xBc0pKMCJRXmIlcGB3aVFAc25UK3VrYWssZ3IsUV1xWnl2bCZFNFE6QjtyXzB7LkpwZGdPeig3VDMhZEpsN1diamNyfD50KDFZOkchVzZSfn1uUk1BYCUyR0JyemQzWnxbe0FUPztVcjkvNUttRixKT211UjMiJihNaz0weEFuNzhgdjJOJXo9SEAqWykwaVBbXz1DX3Z1M0lZUmk9''@;'; put 'put ''fD05eTlYYlI+NHoxKXkiVjZHbEJ6ZWVbNUd+WkBVeCZFKiM2WkZZTTojWHEqWDs5WT1ffGV7TGIsQ3k4fVVxTDdnOyVraERhdypASTdxJHpOc25vYTd7LyhCPkY2XUg7cD14bE52OF8mVlMyeTl7czwlSl50X3dqU1RVfVBaPCwsbH4kUm0ubkxuSTApc051fiZmbmFjLzlkSUI4MVs9fE0rRVEw''@;'; put 'put ''dXNWVT8+a0Jhbzs3KkhtfWVhLnVrWXkyTkdLIzxbT0daITNQNFA1S25NUjFjaTFaSj11ImpYOkpLZlBoeygkN11nNGUyYm8lOnFIU2I8XVo8Z2NsMjMoaTg+T2Y0Qjdjam04OmpIJjJLJDR0VChqc2NKcFFQOz9BKlpTbmlRTGd3Ky96dSRiODZhOEJpTmFIdGUuSz4qWEgjL1tucT9bRGtfTHI9''@;'; put 'put ''Ij5ZUlZWKSE7OmxHKlMzXz18fENEQ09IJE0icF9FeV9uQGo+P311JHIxPXBFY11hJjI6fntKYmR3dCUwNSNTbShUaVFrJDUrYktMNDxdLGc4W0UzR0FOUXFuPV1Yb11VLipUdmAlbUpxe3dAVHMqdExlbiZEO1ZOaWYoO14vdn1bKnxfb2ZoSyQ5R3hqODh2bXJsKC4vU1k7W08vIXBOX1o/bD4v''@;'; put 'put ''b1Q+NTomNixLO3NiW0l9OCtobSRQSHtFei5zS3dOWywwbzIwVml2YnZzVy5MaTQpVjw3O2JTY1g3aXd+cVQuVkh1aUxdNX47eDQiRil1PExVcFI0Qz5bQEohdFYhMUwoN3Nxa0x+eDV2cDg3Wkp4eVJqe2QwKl5YOlNOKX5RN3suRys5dGljPiVbKDtWej97MU19TTxyUDxNWlJaQj4rTVslJmZJ''@;'; put 'put ''Xz5Ac0RWKUUhZis5VXVAaTJhRDJ2QFc+JHg2QGBoZCx0cUIsVkBgM1FqVzAveVU/L31DQCkyQ3tocV5KZFFCZSJHVE01QzJSLjhSOzVFSjl9Nm1rSndfV1hdJWB9dCszK205Q1RgIXgyKGAzIXZZfXtedmtwcCwsMWlCVUA9Ly9CKGNqeXVSUV4kI0g7ZVMpImNObzVCSUB6RCxyU3BZVjNYaSNo''@;'; put 'put ''WlJjaGNAJVAwKmk3KEo0ZkxPWj8+biFZZzkyLHx4dVohfXlaYjppO05JeHRSeUdSZTIqW3d+dX5BVllyZnk3eExkTCVUdlJpPHZkWGklMUl2LkM1QFpjLCwxSjFAP1c4dERiMjVLd2x4WDZ+TmxsJTs7YUNaQUVLISh2anpWcWBvTSRZej0sWEArK1QqXypwVFkuMFM2ejFsMmd4YzM7PHhAN3FM''@;'; put 'put ''e2pBNjA7fVd7eW8sVD0xYyxVMklqUVAuZiVtMmM5cSEjW1pjWWNDZjl9LH5LaUd0cng6cGwjI3oqQWI3aThyKHkpe3t+XyFeMGV4Z0pvWF9Yd2I1KV1bUUBhc2RgUGk+Pmc5UDFmVGV7TDhdJEM6dFZvYHQjOFZ+SkU6QGxyTz9fak1mMWcjJitMRjwuVSI6e2VKWCs/Yi8sSC5eYVZdUVo7LCE0''@;'; put 'put ''YHgqIlByNlZ9Pz5yJUYjO1R3Um1HbXJ5QVkiN2h9b3xSUCRFIi56MXZFL0MuPXJfLFduPUROWyw+UGg7SjBBbnFLUjUjTW5POmMsNHoxMVheNyxMeXdCVGFRbDMxNTAobXdqOmJ8LD9KPEx9bXFWRFldb0VpTTlralJ6JldVfWlVeUE4VTMxPitOUzo1QlpjMnYvRnhEI2EsNjx5Pz9MJGddPHo8''@;'; put 'put ''LiFQSDMkYn0heTc6RiZ7Vl12U01aeDUrKj1zJkc4UlBdPW13SnU3IjFVbHwsKUV7LiV4WyklQEVGcmVyWDhjNDtYalJ2TkQkTlJjOnZzYzF1R2dqdVROdF4vfUdNJWxAflBCOl1HXnlgeGtqcWIoQWc8Z0V6fD57U0JDQUNAJldralFZUiVTUiFDS3I8Uj08LmRzJHJpbEZibkcwditZUSYxKHxe''@;'; put 'put ''U1FyOEl9RFB9XnBOKmNjW0dPP11Jdk9bLz5QKFhoQSRuaGRtc1NpVEdGXjcqWlY/LFBpP3xPLl5bR3g3Ni5eP1hEOkx0cmtRZCIvRVsqfHNLMStNYzhONnUsK0BFYCJ6Qj9jQmxSZkBiRypSY3FfbGNHSCE1LmJ0MFVxJW9GMjoyaDJINlFEVntTYHdmSFssTFskd0p2Z1oicDExK0g/QE9LeTd9''@;'; put 'put ''eG1xTntzZFcie2pAfjdKT2RhLztKJWdncVsoOFhlcjI5PHZxODlHPStTb05tcEE5cS4sWj48QFtReHU5aio4alFDcXpwelcyQncwPWhRIVt9e1FIR0MmLzJzKWEjbFVkWVFVT0NRIzp6PEw/NzssRDAiYkFEXTV3NDtfYGo8en1uUzBMckxxeGkyc11VQSJvPnhoWFtZMiEoU0t2MVdHKEZ6amM7''@;'; put 'put ''IjtQOV5DZG5rXXRsIzVDb081O35TY3BrKUVzSmIxYClIWTNPZUlLIj5ZKHxuYFJKIml9WF9iNGdqcUhNMDxrPS9lKVRPcT10fSJnb3wrV3ZdQGZYNE1CLnV5UkNNNyNXKkMvTmRhVldBNGhVSm8wYW9UNmRDR3c5QWhGUnMlNGdVUjMxaDhdeSx2SFFnRF1CK0hwdGZPSVk/RUM7fFVkViJUSXB7''@;'; put 'put ''PSUrV3RJYkZbPkNnSy5lL3t1QGMrSyYpNW9hXzFzI0hSJj0kX2Bta3IqYF5ASUgjI0tLRyJhfW1tJEswdjBBQj5AfFV0bF4meWlxVCwkbmI9ZG5BIWJ8VWxwMz85dCQhUURCeHVeIzNEdUpvNiEqUyw+KTkzbXV0LDJGOVVRVEsobWNYWipSdFUvNmRwSSgzL0tCWUlORlclP01mOmgjSF0yeEZU''@;'; put 'put ''RCpUfUpaYnw2JnV3QzlYc0BfK0N6VlV1NmhSQmlSL2ZBYCo8NGFdOVlvWG8rRFFNX31tfTZ1UiQoO0ZPUHEwU1IvKWtrO0x5bVtUe2VmdypSNDFAZ21VSyZ6UjtdbTVdL3JVW0szKnUlKWtoc3Q2ZU9UUWxBVzApcn1pQigvc1hMV0RDbTNLR2VdaGYvVGBUbUBCJXhFd1R8Xl5lM1JyIjhiOHtI''@;'; put 'put ''TTVQa2dAJDZLQEQ2RUYpc2xlL2p9TnMlcVFQRlV+S2dHVTJbNG4hUUpadU8leF81eTZsVzRqJUp8L2gsdCNFLm45Q2JBbTZkNSRAcysvfStQKnMray9aWnY2WXNfX1gpJHgpV3pnLlBMW09haVdBfTA1ZTpdVG5AJUk2UTxmO1N0RTJQWCt9fXcsb1FvJHpaRysoST1HMGNkbT9HWjMoSTIhfTV9''@;'; put 'put ''dDRqODw+c3lbZlZwNChXIVlMeVk/TW4pXj9NfmE7P1UwOldQLjhUOkpZZmMlRVBBTW0hPXYjOlo/UiU+IX0yfFEqeE53Y0tqVF1SXSxvXllwNzpjak5JRmVzI3h6Y1AqImxIVmpXUjpTPmNNT0RgIU88cih7Y0dZNTdMIUwrJnQ+YnYpMT01dChRfDtpXjVMaTdpbkxXUGk+U3gxP2BvSzpdOlFf''@;'; put 'put ''K0tQZmgsUlVMSSFJZiVdQzhUS3JwP2oybl5GaWRnYG81eTxDT1pxQ0JiX3N9dTFlMzQpWV93PW9HaGlpPU1hIklUbWgrTjRhbF8mXWsoIVBCVmUldzBTZFBmK15BPDApPiojTHpqb2c+MDF7RHl8Si83SCEpSnZZOH1BPHMuVVJpRHdGOz9hcCZpMlJVZlhMR3M9SyM/eG0rRjErLn0kIVY5N046''@;'; put 'put ''Qmh5M08uI31bVWRdfXd7X3xGeFdiR1pCdWNNU3ppfltqRUolKUBLdXlOTGF6fEhPMmZpVlFWNXshcFo0WTtVYEJpanMwODh9NXt8eGhmLEFYTFp4Kmp0O3BmMzRuK0JeWz9WPm1xTkN1MV9ULFNjWUdsbEtwRTtFR3cmOl1YVCEzTU5WMnYve0tnJX17d2U3UTVvRjV5MXBPX3JkdTkySzgvLG44''@;'; put 'put ''ODREdyRKNCtVKEVibTBMWjYxW0A9YHlUJTZRVS43I0RlLENrSkN7M3JgIU5+N2k2bzNgUHBrRlcqblkzcWt4OU9BWEwwRypmKT5tWUBwfl9JYVJRWnI9IjwmfT9HQ1gpdD5NIUpyPWAmdT8jPFNqSXQocWwjLndHRDpBQi5xclR1dUFEe2gze3NfZ159XklTITh8WGc4aTEjPkl1LG9qPyZkNjVf''@;'; put 'put ''KjEiNyx9cTlfQEllMDlrPGUoSGZXRlJVb0M5YGpde2hDMk9aTTg/NX07QFE1Vz0rVU9jJHJmV2V6VzNNZSQ7PGZLTXJaOUFoPHBhMlVEO314TzJnJnIjSyRSem8wYTRLLmRmbHAyQ092KXM4N1dFW1pCNzgpLilleEU8YjttTkIsbVl2PTVZPGBiQHgiP0Iwbzxlb3JqXz5RXnVrPSJyO3h1V2RO''@;'; put 'put ''KGIlc3JYKn1aTkkufkNqdjxRLn1WWV19SStdaEssaWFUJXtaMEVxSCVGay9wJllKSXIiP1Y/PEd3fHh6b34iOzZKK100clBiOnZPcmxQOVl7bC9tMlMvUF5WUlE8eH1WbmtxfDlGZn09d1ViYzNdT1pTc1s2QV1vbExjcWRnbT9RSURXZDd8RnJral0ydy5FJSl0d0khJENRYG0sNWM3eF4heGpS''@;'; put 'put ''YG5USDJlfmYoT0BiPFhpNC8oTnJWVS57RlQ/QitAP3p7LE5uUFBhKFRgX0RNRyJscmtfPlBVUkpgdy9rUSJSI042bCYsS0RGNnhuayFfVEw2b11lR3lmP0ZVZ11uITIsd09WWSR+WztHbSMzd3VhKlQmKVNlY3dubUZJblA5Z0NxX3NPPkkmU2s1dCFAIlM7dHh3XlYvI186bCt0cTJUVk0kIXU0''@;'; put 'put ''Y1ZwbyZIa1s+b0g9TnxqW0ZCOHUwImlpd1ZXYGZHaVpTKncuO2ReYUJtK0h1KDJYVz1tYDJkPV9rOlBXU252S0EkVykvcGlkNFZ3UTBXZmwkJkYhMGV2OEd+PHo8YnNTRV1IOGMxa19PWVE9e0xZQHoiVj5xNkhwcTI6YzNGQT9hQ2k6NXQxdHJsbnhBOCZObyo2Ji9tczhaKlJDZCpvY109UDpM''@;'; put 'put ''OWJvZlI2OFp9NEA0LmZ8fVJyOmVVPyppTy5he3dzcWxQfGI/bFVVWHhSWWQoXjR+cyZUQ0VQZS9IWTt1fntxWGdhVU1ORWQiYVFtPF5qSUE8cEw5LixyaDNoUG5meHcmW0R+K2tCY28jUTkyRztkIykwdXZ+eGpjLFdfRTxoUj5IVXNBNkBmZ3RDWSslbjsraHQuNSlbQW9hRSRxdjlrbi81R1h8''@;'; put 'put ''X3EuYkV3IV9le1dAPTpjXl1XIzdwMGgmKHRYejsxIixve2VoSWZodF5mZzkqP1EjIjYsZjdKZCIyWTd4SyxqLEdGRkUsdEc0N24jIiImQkoudEQ1c2J0blc9P1s9a2dPXT47LFBITjp3P3JuYDs5MHFOUXI1NHhaKDV3aVMpVjomYW1ATllmWWMiN1Ysdn5TNnA5S3IuMz9jentuR0RXWmN8OEQy''@;'; put 'put ''ZmdaaDVaUTlbJHhBOU8mQkRzaiFgakl3XU55JHkwcUsuY1dZWVUxdi9UYT45IzUoaE5gNz80WGJLdi5WPnxHT0MuPElMOl5aS1ZDIlh7JVo/ZD5RRl1lKktIJG5DUmYoWjRNcj9UeF43X3R4Oj87cj92MnhLRiZwP2kyJGclVDh4Zz1qVWE/e148LilhJEkmMF57UlVSSX59dVVfZUQ+Q188eDJW''@;'; put 'put ''eCkiQXspdDwpfGkkIjlEcD55YD5te3pYLD1hfHhbJSwrSkNQIWpSRkY0bF9jQmRCMyJdRVc9ezwuKFhNMlE6b3J+KXprSSwiRnV7SykkcjZMS3xzIjZHTEMoOVM5SW84VXYseTleVnUpfmNvVTMxOUlwIyJBU2t+dXw/KmM4VlVZaV47NzVxNURMfFB2eVhvI2VObH42e2x2L2AuJUR9fCNNRj5s''@;'; put 'put ''KWteNzNOQmQ7UWN7bltdSERGVWBUSV1ZcmlVaVJqbHFOdkk4JFRUSGMzfmAsZzIiNHQvPFNMNz9SeTRPI0JlayJgdWRzWCx2Z0FRNUI3VDlGL3JaPF03SDxma0QsU3RDZTdNSTlkcFh9Rk9EdWljKVVfZ2BPYF5tRV9rczAiXncxRz0hYSl3R1A9eXtdTGVfOit0VERaYFclLEBYRHtBbyhbSDN7''@;'; put 'put ''XSkrdCY7R3V+Yiw8eFBWY3w5PjdeJj1DP1E+alUjaTc0W0RXbSt5ciU6djVORFl9OGdkVCtaXy9XdmMuWEIkSkY8RGlmJGhdUFFjNEJeKjV4RHN5LyZEMGVPUV1laGtNQUIsXm1hKjhdR3xnYHlgWElgZlp6TCJ5L0RKKlc2fiRmTHZAQlp8T1tedFFYLGJtVFsrb149LHdEdXx7Zn5dQCNNMDYj''@;'; put 'put ''YF5bIz8+fSIzSyg1VzlPZGRXZ30zVkhFfXxFdXVRMz5CW1ciPz01NWlDeGdTdFtXZzlObEJqUDU9bDdSdlREOkE2Knx0WiZqMTtsU11jSkluUSxDRmdDQz4pTD1DPzN0dkhibEIiQDFvTnx4W113Q0hRXSN1cEVqeHpndmQwRHA4MSomcSFFN0ZIfiZsZThDTnM+NE9Ob2c/bG5Tck9SXktjIVF+''@;'; put 'put ''KyVgT1hYZUldRT17W2NZKn0+PUc5bV8pdXZ0THQhYWxVMihiTDRfSWM+Wjk8ay8vVDV6b3RmOFtGQzlJN1RhRk1tP25GTHt4IVYmPGcmeCNlJU1hfW9GXShTZ0c2Yj42Wk1SPEk6WXBRKl1pZ3NHKDpDZzFEZUolW0tsJko8QU97bDRPbDVHX0NDUX1ZZW9HW1B4MENHSF8jRyolNlkxKjF+U2sv''@;'; put 'put ''UFpxZU1nLz9KXTV6R2A1b2woelRKSSIzJlN8SF5CSDhPNGV7NWUqN1l4VSIja0c2Tm95REB3RTMxNlpELDBFRlVUPmxiek4kViFYN2BLQHRybTgiN1pRM3lwdTFGPkswLzY+ZDQuYSYyQzdjLmJ8YjNmbjBVOClULG9eXnsvRTk0P2sjUlZCSzI5bVN+W3hAYVYwVEQofktmU192WF8xdGkjVns3''@;'; put 'put ''NntoMFV1Wj5ATCVbNSF9JHtCIitGZCZxN3pGL1d7UWhNdUc9WG4icFt7YVl4JFJATzc6W257UUtQa3RLXmRzU35FXzU7XzZjfkdMQCNMaSJ2ZE9aXnd7dj0zSCNQdSw5KW4sciMyc3JXRHRFJjpucDokKVJnSFtgInJ6Mk1UNEh6byYmc0NhfXVnYU5jKUZUXiUrK2FFUWF3SSFeOjx6WldTdUJh''@;'; put 'put ''Rk5MbX5oem1PaHJMO1kyK057VG0vJWIqeCpIWVdBPiM9KGxDNSVGTWhneExNPGZqVHxrUnkiJF9JL3VaYDRec1NoVUM+OnBUSVRgenNnK0A9LihdRiNxOUZFITJoSytKRk8yMWQ3U0ZNV3xNL1ZTMS98Vk17flhTRFgpaTFoKVRtMCRRcHU+dVIpYk52Rnw8aXZUSVlhYEA0TGFzciwwTmFeQFc8''@;'; put 'put ''PUw0dFoxQmhXMGY6bFRFRU1jakZtXzB0clUvP0FwbyF5Pjo2PE1OUmoxTSZPW3llZytHT0A/ZzVSamA9MG96QkVtY254eU0hbS5wVVsuSFRMP0NpIU0qRzRnRCY+MHxxY3Ajdk8sdXwxNSxnNVQ9Z3B1OkB5UWViIXVBOV0zZ1VGYSFEMFpVTmZddm4mWCZYIkVTY01GSXB0Wj9NSH1gcklCfUh3''@;'; put 'put ''VzxmO3MvVzs0d1RONUBjfXt5SE9YRGdyXzd5RyJgOihIb1J5KCtBPU8/UHQ7LCteUXd2UCN8Y3RRTFoiKUNrSjlKWCNscntAUSlae3peKjZHOS9JMyp7bXY5fHNHLGlDUzFgT0ZbJCNpYndzZTtXakIvQnlVfHUrPnlbWlNLcXhgW3o9N1RiMi5IQDxtWlBAXTtQQiF1UDBKaFJLSHMoQXBEbDlM''@;'; put 'put ''XTIzNkdeVGE4b0c+OW5wcSYlMzBgeGQ9bVZ+SHZLQHtXSCtGNjNhTWguLlh9MmFWIUZBVmV1aGRhJl0re0VATkZdRTw+YFJ2O0IlU2dLWjkyeUFPSDo1TDxONzxpLkxRRihWRW9JQjpRUUU1Y1NtNmkkMlVlSmdnLlNgS25tI1k9b29UPz5uIzhuWi5nZDhVM09DRlJyaVhZY1VTOiNefmx1OW5K''@;'; put 'put ''Oj5DL1E9YCRjX0x3Zm45LnVeT2Q+RFlWZjcvXy9sS2xBSGpLK3NobzV7NUdNKmEial1tWlg/Xy9SO117MmhfaCFvOT5WUClGaXckZlVSLD0kd00iYlQ1S18jeDU/K3I1eXVrQ2xySyxZZSgpdDIvNzowfSZNRGp4fjU6WWRPJVFCQ1t0OXRMd01UTCtibS5YYClEJiUuY3d6TiVAXUg4L3RTUHtH''@;'; put 'put ''JENheG4kKElKTEdYKkNzS2s5YitTSz1OSEMkbEFGYzc2X3dSUVU2QFlAPWYhYjw+Jjk0Y3NLbDwrQShxODxxKVVkJGhzYlZVdWx1MXRXbHR6U2BqVnlIX1NGKT5JPDQ0aDFvOksuUFBoTW95c21NWkNWbltffHxDKEpIYEd5flBxMF9db1hBZ09QU2U+R0F6Zmw5WDpYSi9ZJkRhekk3PmZyelhl''@;'; put 'put ''NVVBaF98XnhlOW5gfEhbQlVIZzJYcX1ZNGshdFhPdiY3L1FBQk5RNS4mJkxaNUlAJnBgIUpdKHRzZWMiTyJNcCt3Q31sJThEd2o7WEpbdU5IR3VnY3Y5JUB0KT0/RnArXnBQL2IjTSZ+UXttUHRnKkM8NmswYHldcX5xYEFyTyMjfDQse2gsTjJUJUtVMV4+L1p3YVFsdWVpSEdQQnh6RURkNWJv''@;'; put 'put ''X2p2eyxXPzBtLjl+YjNtRT5QdHYrSXgkSkpqVHFRX0leW0JSKS89TXIrSyhwezhieyExOmgjd2lLRnJYcW40WWVDOUtKYTpALGk4JkxAK0E5azVHWE5jL2N1em04TVV1Si5FJnNgK1dAXnJ3cWw8ZXR9KXdydDsjS0khWX1MWThvTU1eWjolbE9dNG4oaGFYWWV5MHJ6Xi5GViFrXX58U0o+bXIx''@;'; put 'put ''YiR1Xmo2MU1WPEFXRls8b3BSPjBVaEszV1dVOXNIODVaclN5Zih7Z34wNXkwSWZ1W3t7byQofHU/NWBNaj9dQ2djSFk/SHQkIy9WS3Q1Q1J8VWluMjxgSmdqLkJkZFpCL2JvaWhdQTlMNW9oa3tpMUN8d1QxYHtzVEQrJkY+b1diRCx1N3t+e0JuUzp4cjgpPURFKUVRIyVoaTl4QkwrU1s2eUt2''@;'; put 'put ''SXhvKS5MRHUxP21nQXkzb0E7aDozNDUhPUZpRktHfWtOTFgyTSFXdiFjWEp2IT56bDd2ZFN4Iy5gP1UjQl5qUHF5VDhGZW8uIztXTVI1WFl2elAsdGpWZ3taZi5peHchdUUuMStrbW95bzMsKSl6VnEhNS5kSjRxcktoP3d3V2o1NGEzMHtVb0VINU85KXxoS1NmQz1SRUZ8eUc7aU8xSF9QTkt6''@;'; put 'put ''fVkpKXpJS14mP0xwbEEmLEI0e3drdF98NXJ5Tj1WSEB5RFlxNVtIfnNaUzU5LD5gKi9DeyV+dn1aIjlyeFMuOERxTCw9WitAMVJUSF5obnA2RG8hRSxeUG1XcDleSl9QKk9AQ2JoKiZUNW5XTjQsd3h3WnMjenRQejBYRGdmYXVsLDV4KzdfQzVNTVRyXiMjal1LTWh8SXBbQnJwWCNLIUx+ODZv''@;'; put 'put ''e0I8SjBiOHdIT2VeS3gmQyVlR1VKck1bJCtJYGJ+QDAlYVhCT1tITT9gbmkvfkJheClER2A2VSttZ1Y5Omo5OyNKWzZ4NExIZW0lOj09WnlrISgkdFs6U0d4W0g6YD4hQ3dpTjl3WllGTTtRfnB7MnwiUVVObFEuSiomR2RFcG9kRSJseW1EWFRFYWwib3hrWypIYDFrLFZrbzgqUy95a3M3O1p7''@;'; put 'put ''NkxGaUc5RkUhRSpfNGE8c1JRR0doQUF3OH1tZG15fEN2bigvfTZPWkhqXmRQPDRrV0FydFI9VE1jYTZgRXp1PGM+OTwvLl9rXzNkQXhzTnAjQGhzWFk2OyNkfS5RRXlbOXhfWDlCRyJnOUp3VlpSQkp6SllUTW42V3A4KkxoOSVeNjIsRi9kP1lWZH5sQXo1TyMhX286OWQ4TXBuW3s0QkBwVHEq''@;'; put 'put ''aUBycH08ZmVlZEVCXnNab15BekE0TmghJUxhYzFRQDd6NH0zRkJfYnFDWCVjdnI1bj5LRH0hdyYqSn01aVtNcHwmQz80RCEhQTVVd3V3cDNFfHNWR0JgS0FTV3Y2V1tXMEo5RzZ3Vk4vMCE+JjNGcG0yYEJMeVRTQmIlbEt6KGVQazMkQG96UjFyTGd+IzVneVcpP09QfF13I2JLXyEqVEdQPng5''@;'; put 'put ''YCRhMn5zUHZiOjZSSF1HMDc6S3R1eHcoMUBaR1JELnJpKkxKT28kelQsLEBfeiEkOlc0ZmJwYypUKkYsSyVoRDRPeT1KczRYRHlUQjZQJVtDPHVrNFtIXzxHM05hR2h0SixdIy8yOVUoYlNwSXA5U3k1QkBlSXJKRjlTVH1rMVIzLjo9blc6YHtwfWBjKW85YlhfTSQ7YUA+Rk44JVJIMWZadSJ3''@;'; put 'put ''W1dRPndsc0lZRzdGPiMkemhxNml9Kk4yPy4wXlYka1NeVWl5XzgkN1ZXRzFnN1lBOXtJc1FuOmE6JExYJUpvbEk2KnpdU3Jpd35HJER+a0xicyM1cExgY1VGL0BTMyt2TzowcGoyTlEoM014X3BOJWVQZmVZW0pBOjdDKyNNXzZdXz47dkc4KT9dT1Ywb1tmcUlWbGAzJXRdbiowY0wxJHElVHhu''@;'; put 'put ''bW40R08scHg7aGAySixofmN2MkM3MzxtOXspLjomYGl2RDFXWjljZVVVe080Y1JKYC9paCFLcjc+dVhMeSlEayhwfFd+RX1PYUlyb1hMMjU1ITU0ek4ofUAvNyo8fCQ1K2IydURZfVFmYVBhJHQlNnFdbDFtRGtPOVJja18wTHJJO2BYVUNrZ2BSb3VTdjMucEpCMSVmfSRnIS8qZDJAXylmNF1X''@;'; put 'put ''ZjBkSmBmQ0h7Xz5MYUN8U1Z2SFZIRnE6KW8lfTl9S1t9PnB1OSlgV15yWWt3d19aamgjcDlGNXlWYzpzYEswTzhhfTUxOU8rfih0YjohV0BZTyU8Pm1DXzB9bzo2ZlNBengzaEBCbihzcCJpMGo7JC9aWnhtI0RKVEMhKmpkPnpbMCVrdS5eRWB5JDBqTFYsZzNrbmlqUFtSKWZhWWtjX0AhLiEj''@;'; put 'put ''ZXgrJjMqY0RLRVVeby97MUwkcEszVjZBNnA6OnxqZDE0KDYmMVomXmpIQER2UnNfaUNEOGJWd3dVU3p6bERHcngxOGM1TDVuIXtaZ1ApJjY7QTo3VSk0NDFjRV5sTGB8MktUOT9xbU5DUTpoYjMrdDhRbD9iP01vYG9PcXw3eDRnciYiUCI6TT5qdiwvfjh1VE9OLCxmXiMqLGlOemw0clYvYzgo''@;'; put 'put ''JjJHZEJuflM4SyI0a2d+ejdMcTxreV4sOEo4IygrRldlSFIwMDg7RlFheysoWDZaTXBycEM8OXZDN2pYPDd6KFhHKkAyNUhsZmY7UFlUYmV4KF5yNkVjUXM/SDAqInxPIktBbWBLM2pdWH0ySWk6Xm9fUVYyOD5zPmxzbEpEaThtbWtLIUA5cDtTXkRyenpPLF1sJF1XK0djOj8oW3FJOzNdVkde''@;'; put 'put ''OEo0R3V8WEtRdz4vbDcsXTR8dSsjJE5IIVFpMkIwXXA3YntfbSYmQ1k6e3JqMSVoSmVDSHoifV5nQ1J7SiljLiksWjFQKVVhJmIybERGQF5dfHE2fHtubSNlTjdJIl5TKHZkaFBibmBKLy52VWROVyt7Okg1Pi9KNUlFZHpeNkQ/YyM0XVRTbTNoc3IjflEsP0UiZDFpZHFaKzFlU3BZfHxXaG1x''@;'; put 'put ''OFhSR3RIdDd2ZUR1RjNkcXUzclcuZ3BMJWBIazhveXVnIyVAUjVMM0V3MG9TL0BYbl86ODI0bHF8fUN8NVB0dTtHN2cyYkI1bD9CNUp+X0szUlU6UXRQb2glIzQ7Zm94bk9baD12c2tjX2V0eGJNQ2plMnh6dEB+TGc6bjtjKD9KVyxnUngpUltBP0JdbihLak9ufkF4P15TMzdsVXZZOC9uZWlh''@;'; put 'put ''TnRNIShUfHFFVzs+OzxjPl1bUCw8ZSxGenkvZTV1R1pgM29ja357R295I1dwJVlbe2YzVCxWdk88VmNhWXxUa2E/MCtVcEAsW2graSw0SlY2fWUybGJeZlN9X1FNcGx+PD1WeFFoc3orTm5fel1va0RSRWEhQmNsUX5gNVgpVW16MkUmYzYmMTZMI3dwbTB9bnBGNWp1USMvJF45VG9QaVZ0eTox''@;'; put 'put ''QztORHR+NjZ9RXJTQ1M/ISVKJkYhaElueHwyX31tPDh6VjdzZ0VHWFo5V2NZR2FHMkhgb0J7Jjg+W3pVfmBdPH0uXkVafm8yUEtmTDEhVjdTaEZEMz59NEs2OG8yVk4hfi4lOC5ZI34rLiNLOCU+XUcvXVl2ekFnUUAhLk1KPn5dbSZXLyVVQEU+Vzc0QE4/SXg6VVArVkgpWENIel1ZIVA0Rkkh''@;'; put 'put ''NUhZfl1FWCp9SFc1Q0xgPUo6JHtnfEpfR3hBT09RcU1zbmA7dmhNS0k7NTl9Xzs1UCldJVNmPUJmMilqdSEsdlElbV5nZTFzL2Y6Zn0zPD9AJCxgKXVPRzh1Jmo2JlU2d19YciRCeWEjdDlefC8yTnoiT0dfeUdqOSF6ODhlYS4sbitVPi8pYU5TYVIsTHB3WGddKCxKVmB4c3U8KytyO0YlND4s''@;'; put 'put ''b0kpV2FfPSZzQjR5Q28/K3NkT2JXOWloKGt1S3FNJiIrdmE6eUhvOzVBc2tvL2N9XnxFMi5lTyhFX1BjdWdpREJQS1tpR2giODFHIT1FUjNdJWsxY3JOc3ROV19yWkEsQyoxfUl5JT9OP0RNOURyKVdQKiM8JlVWak9ZT0tsdXQsZilaZEAvQ0VgIVdnIX5VKGpLTTxjIVJVRE50OU43Okh5ZCMk''@;'; put 'put ''MFdMKmhSJDJgeCxzZDhqTCouWl02TTl1XyV7L0h9KUUzLGpxMStFKGBfcHAkT2BAYTBMaVJNSWUsNC9ANXI/ZzAxTGBiLCZhUmpSRH19Vzwre1M7PnRmPXhacD9WeXs9VltGbExpYUxid2VNZEM/IzlBKXcxfXMkdyh0VFhqTTkmQzZWWH40XjM5cWpYSH0+JT9GbjdZK2lDXnN0VFlyWyZ5R3Ni''@;'; put 'put ''dTROSmd0b0s6SXNbdz1lcH52PWxxMW9QL0U2NDhkTDFwbTRgeHJ0IjhZXmhPR0MyemczLyNHN3A4RHRJRnUwWkNpbDBZQ1s4KSMjQjslJEk7T09pQTN1IlpqYTI0bSxYNW0pPV5ZbChvLD9BdUJLUW9Eb1YzVSxzN0RdJG5LekI1S284Z3Z4cVB8dysrVkIhS2c0OV9jY0hVUjZYdCw8XUQpeF43''@;'; put 'put ''W0tkJTU4YnskKTdHd0pqSlcrMDZfRnM3OjxFTV1RLj1LQypNUyVeTD5qVE8kUUJmZXgvRyppSV9mU045akIvWTQwYHMpcjN1WjNkfG1tUCljOm41KnV2eF1KdGBEcz5aUWkicGU6dzhkOXw1Z3R5aSFrOGRhNlVmdjdJMCFlI2pte35LUmk9SV4iZXROQV80SkkvJkpXLyprRDp9W1RoX1lqZ3ZP''@;'; put 'put ''X3R+dGFxcF5tfTRdOH5FekEmNTxdVCNvbDQsdzsrTkVrdGpmKTRMZnlXNC51XXIjJHAmfCZqPls1O0AoI0ZLQ1ZtWVduPz03XlQjRjh7NE0hNV4xPWE9Pyk8OmBDUyYqbDlDS0JCcDZMXiJlPUQrWzZbdkI7TVg4UE0yNUZic0gqUC47OXc5dipuI2krNXVtfHt3Mi9bLmBGazBfens3S25oNGMq''@;'; put 'put ''QH5aa2RWdT05O297dEIoOHVfKXpVOloxVjZXbEdnUk8+NjhOJU0jQGxWUWFkT25AQyUoNV0hWkYoP0lATFJMbEFdODUuSnFUT0NnbjU8YUo5XU9AQCwyKzd7cj9SQCRjfS97NE8kfHs8Uj9ec2dTI2NNaCRPbytCUFEhMl9Sb1V4WUtVIXlkcnZjTkVZSCNeQ0FRS34vWW9Ba3l3LjQoI2JjYz1x''@;'; put 'put ''VCg+RnhgTE9lTlN+W10wVEBmImswOGlNT3tpekhRPHcjXUouU34ua31MWyw4WWJuUzhtJEVueT4rUVdoXl1qfl5gRkxlNHUzQCNVYyJ9SlkmYko+cS4/OldwOm94S2tZY1l5c21qa3NDLjYxUUJFSWFrPFt1ayJFJiopSkNzRjtOcW9Afnc5eSw8dUZkdVs8PE9xejQ9YmhAckQwQi5ZRztGSVFL''@;'; put 'put ''R1NgUGpWUCEkTUhMWCxBRClRQkJlb1VNOmdJbVUrU3xAOWlCciZZI3kiRnM3MDBDYV5gVmE9VjsrUCFWJXM+UztEUUB+KXIlIWEoLFsmPSt5ZEUxKiJSUTlJckZJUCg1WyQ5V0ttX3EuPEhVIkYwKTVnMGJQOXV6aGpaRTQ3LjNUbWZ3aGlWS0NfZiUhMDI+PncyTnIwZixkTD97Mi9zQ05aKnd9''@;'; put 'put ''V0dtZntAWWhoPE1IPzQlZiFxY00wVEd0Nm19YCl+KXlWN2pWfFBva1luYiZSaWMvfTs7aCN8cy45QzB0aTBbM0Y6ZTM5NWdAQlY4Vz4sSCk6OyZFflEhYHhTRThyZmc6ciJoU09VUT1BYFF4WzVTN1lTdDpvbEdTRkRWZSl2KWErWUFDUXpuK3JOMCxETzMoUTYpXTIkaysvIipvWU5+KF5nPTpa''@;'; put 'put ''YH5aeClxaDh0JToiRn55YlslW3JaQD9mVCxDJkNIZylyN3JJOkB6Pnh2TVJ2XSxbW08qRFVpJUBZJWBsSTxuRy8oUT04MkFUMyxHNnJ0bVJrLzklT1NlX0RAaDsrXVNGS3tEeFRKVGp+dD9IZnYkQU02dSY+S2tVKGlFQiY/dmJ0RENdOElZZSZrezYhPVB2dlJ9Tmcpe1FbS1toJn4kbmkhZVss''@;'; put 'put ''UDElcSJXL0dnLlQ6aFpBUCJeRVpNa2RpNGQlc1BNPFg5SzdGSjgxWnJUakdkJWtILmR5YTZ6dnVvSXo6IVtuW2M2NGAmb0Frb20/OGxRQWF0PyxEXlBSSUt6QFh9KlpxIlducjRZT31MW0t7RHJERHNDeX0ybipLOEZAelAofWcqLC9dem48YTJMNENOPWMuZm10RFYkK2V1bkxhR3p4ZkwrW2dM''@;'; put 'put ''YD83Lys9KWhMVFRPKGZyVj9gK1pYfi5tenk5OkFgaztXbl5rJDhoLilVQ35HUUkjUkVgJm9CKnEzYT9lX195PWR7KUdMV21Da0ZAbG8hXiFtOXBQeGs5JWc8N3BnNHc+eDJZSHZPdXtTdGo+bSV9Y2kobDBWdzAiRTVBaFJHVylfPzdXUmZTOStXc0cyc2U4JV46Nj5aSzoxW0NbfHpqXmooTDRF''@;'; put 'put ''R1ZsczJxT1RKTzM9KCViRnRkXkRsS0wrMHFfLHFoZ2RfN2QoJD1gITw2ckoqbUEsMVhJZE5od2cjSFVQNGNnYTdCIjNxLk9xTFRkM0FeOEJALkQ3Ui8vUkhJdjs2K1NwYHUxO3Nid0wkVG9nJFNFWk5aNSgoblohciNLc1VwWFFlZjpxI2wvWkZrflpTMV9zI2ozb0hxUSFhPFpJY3djaTtsKF84''@;'; put 'put ''QzdUYGJZNUNWKUlGJklCS3xBSnBvTWpoVFRkfU5GL3A3fm1SfG9NU0RxL1ZIPjRoQTRnOnFlRWkxIlBraWtfVCkjaUZaIj9JfmlKPX4jNmMjKyh4X10kSWQpMkl6V1kyQnI4MzcmXUFFIWRXVm0yVGlPfSVVRGRgMFZdRTQsKFE1JlIuWGQwIk8/QjQja2V2K255JDFrJWZqUy50UmshOkZ9Y3Rx''@;'; put 'put ''RUBWPnZScFhsUVQ+MEMlbG8/XWQoK2wmJFNlQVRtRSJxY0R9WSRjRl8+PVZvOWBFXWY+cD8jeVlXXTgwbCZiPDg+Q05OejQ1JjY6SjNPNF07PkpQZ151Y0l5PThWMDBmTDdOIW5HYTIsbVtyJHVNWywuUiI/WFEoc1kjXip5RGZeMlBEW0YkPGFka1d6cVBIZ0hbJDN6WUl7WCJvKn5qLzUpVm9m''@;'; put 'put ''K0pddDosfUd+KCZpKzx5RkB0TmhrVyFsSSxXUmJxKkNBMXhxKDZ2SWt6VitBd0Bjdj9ybyt2OWR+cFQvVyxUOkl6LClERlhseWIwOnk9RHJucTs7ZDFdPmBkWiF3bVZZcXZfJG54S1pGSVMyRSkoJHdVfntZfDlWZU9CYFF1XWtlbEBdT3h7NFRvSXNJaT8jVDlPbjtbSHl8ZjgpVSkjNTNKZVt3''@;'; put 'put ''JmV4QFkmVTdZK1pSfipjRm4hQGZDb3o7LnBDXUdVOkM1Ry5TWkYiZHY9JnheaXRFTD5bK0FYeV5KI2k3aGg1OkpdUk0uNHhXWFQyXTY2KFNAWThaKFc7dmtmd2pnP0BLfmFBMCp3aVRuOGZvN0RKKU5QLE41Uig7VDRBaS5pUCEoO01PPXNqLEx3cGpqZF4reCw9Xk9hI3lbMltnWGZpMDtOcX1l''@;'; put 'put ''KTluSDRdMiN9d21BdV42VCZWV1VoUHd2YTNzbDhOdCleS1N5UVJvdTVvW3hNQjkvYzM0Kzx5NndPSyw+bF5aWDRkZTgpfmVkTXJHeVdyKWAuSXx9PT1lWDBwLiNjcU9Kdyx1QFAxJFF2Nk42UFJBY2AxMDJlI3tvVlhlKjVFIWpnUWIkdHY3Z1Z0LztoeG5PQTZ4cjt7VyokQGJ0ZGo/JltIVTpC''@;'; put 'put ''Zz10TVd3R1skQGtkVlVeJmhxNzIuNCFtWWVFS0E0cGBdZngxSDVOdDU8LjVJfEZsSFk3YElwMmB5SyhZcWszQ2JAMzpHJjZRYWYvSCFYfj9vfm5SO1FoKChjYipoLE9+OU4uXWAwSWEmRThwP2hhUl0xYkBNJWFzbGNYelF+KlN4WXhPWjgsNkE+RnxjYSg+ZDs9MHlsXyQ4ekwjZko4ZV9zOT9o''@;'; put 'put ''TXAhSjQvS1pgYjZJXkBLNXsiY21dcCFrSjBwUStMUitaWjh2Li40R08zemUhJDdoaWJHU302ezdqTnNnKFltZzY/O3p4LnkpQUAyVmddTl10Q28vTHAzMWYwRkxkMSNYOSlqd3F0Ty9kKTs7S2slXmk1JEFHRUNUJHkjMSNXUz92I0YwcWo6U3dMfE4icihrI3o5PSo5Qyp5fldrPCtbW0c6UWJd''@;'; put 'put ''eSFaQGxfdzZyTDRofmloWUEhMnJVcDRGPzdOWndGYEM9Ql1bTVszPSxGKjZ7ZUY2PyVFVUtJMm8lW1Q9bVlDaWJhOXxHaG4wRj94LGBeSExCOi9DRnNJVjdudVJaTlpdLG89QW15JHJTYSE2Y3l6akw5V0B3QlMufTJ0eCRCYjIrTCtTI0YwVyZ0UnciIlM2eHcwa3pFd3ptKj8sJTt0ViI/KDo5''@;'; put 'put ''YF5NNTtEeXojdzQ+Ln55bElZZVlSYGsvVDFNLmV8ZjB5MFVPdVpnflEuMCRNQmlIcmxiRVhBSHkscExYKkx8YCV6RkpTPmhGTlZVZ0gqbkZuQnlKXnhSX0heWFA8eC9oL1JQYHBhYHV3PDIqWGVNY0VVa3A5Zm1KUGZxQkZCJEliZFd+RjEvZXxbfmp0WWdydnxiKlReRV1WWT4sdFRYfEYsZTVh''@;'; put 'put ''dVhmeFZ+OXZ0M3deQVJwMGljKiRdKGQzT203dzw6QE1WQGlyaT1tezl9M30/RTR0Mz0rcUMvdV9TYCRwSDA/LyshOThjKiImJn1FXiIobXYsezJ8ODk+e2ZVbDB6JVh8KnlTYU9LaVM+K3A3aC88KDU/WX46IWpMXll0KHlVS3hbQDVeJDBTZlRVPCRQSnk4RU5rPDRBL1tldTVoRlV7algyY11R''@;'; put 'put ''NEQsX15MYWk3ezpdSjBEMHRTLFI9YltrVyV5OmNYWDxgJXZoKUs0XUBsNj56VSRNXTk7QVo4fE9kMDRXeTxvJGIwNUwuW1V4Qjt8TFMoXT1tNX10QjhVayNZTUtWd0toJGNyc3o3VDtvTk01Wl9lbC8ldHVYPks3RGxdcWp2cC5gPH5tdVZETyR3NERxbWpwKUBVP0xBbz9Od2slSWVgc2UzKSZi''@;'; put 'put ''fD55PWhOb3lUO19CJjkhbSlrP0dEeigxPl0zTTRUMUNxclkyPCE6I3BdZjQ2fFdReW1OPXNYKXA0UGI+eCk9WUY2M293bmxsK1VGdyRGUDM3NTNPaUl+fDNMJV5NN2w6LCpmPy5VVVVRX0phSHE9L15wVGRkSkR5OmBETEcwImhuXkY9N1djU1s3YjFmYTZ8Mi9iMCk1dE4kOGRzVkshOWckP2lS''@;'; put 'put ''dEI8P0YrJSshNjhpSHRDIW0mJiQlZzc8ai5RbmpWcnM5RDNWSVhwNER6NW5YK3Q2Z2okfj9QX0NYaUw3OnBPS1c2fl5+K3pudmIwVn5tTj1HMy4+UndCUyhTUWdoX0ZgbFZ5cj0mP1krO2tvNCVCKzUvcmg9YXE4PGFQKXV9VUlraGxsVHIhcmtXL3Q4UWgkUkRiZDlOIyN1bEtCblIie0I0NXN3''@;'; put 'put ''PVlAR0AieD1ddEd0MiJxUzdTcTRVN3JpTEtER2JMQy9MS0x1dmE4SHFhc2huSGVrPCxmUE51eC4mOF1DODVnZlMzSnBARnl6T05yNHZLSzhfb2kyJE0qV3wrd2YwezMqZig6dFo6PGYoUyskPywyMDF7LGJeay8rKElZUm4xJkgyXUErN2VORDw9fU1bPDFOcmtpLDtAJXIlX3R+I0c4W3JYZj9O''@;'; put 'put ''YERXdWQyVnpXMTtfUV45MHpkaUclXnJ4UkRxVj4sLFlJckk2NWoyWVc6UmdqLHEiTit3YF4vZTNaW25UZHdZO0xSWUtQaFtuW00lYDcybzpVQCYxaTxoUnghLm8kUyZGQ2VQUzh6OzhfIURMfns9eiw0dVI2UkZTSHdpemxGelRwQ2tqMm0ydT4icENkK3Q5ZG4/dy4hZXVgeCsrRHQrZUNCVHc3''@;'; put 'put ''NCkrQHReU0kqS0BhTSEqNCQoeWpSSmZlUnIoKyVlaEJSXTNoNm9UQGQsd2pXTWlDKj9BdXpfQyRtZHtOKXBTVnRKXzQvbVZAfV4xeWBYen5CMklFeSlTNXN4PTIybUo8bjxLSnRJVGxyYCpBdXJ1XigrQD44S3svJiE1RWlpXWBYeFNAWVp2azlUYlE9YShxezJ3PytJZGpmQ29iP09Ec0MpaDoq''@;'; put 'put ''YHIpdzRLTWZrdztJKXooZDt8RkdyY3lAazJ1YltpK2pGeWciWjcpYnQ/VjBjOSQ/Lil5bTJ0KiV1KzRYWFYmclslRkEhak1FLmY6cl88IT1WJEF6cT1oREc4fnZXfk1LQmdXSkMkZE9NUSlydn0weVciNUtQPWdtcitDLDl0Nk1aTVImMik1UkE7XyUqLFtsflBVOlElOEd+N3UvblovLDl0e0RH''@;'; put 'put ''KksjfF1MWXZrJlIvdV4+OkJuUjA1Rl9geG9CI2R+Q11VWWZwNF5rZGBjJXIvOXJyc21nUXh5QkQmKVAwempoVFNic3xnPnxsejJXcXBGKDhKIil9RFg8JURgK3RvJi9JVSh1LmQ5NltoMFdgUCtDPm5NfUxMQ0l0Ozwvc1Z+OVBkPjxjVk1SX3NmQFdWMndAWD4vSVVhMkp6ezFGT1NlfFNeYC9E''@;'; put 'put ''NXs3WyRCJClJNHExUXVeZWZFc1NnNW1RdT8jaTk5S2R+OXVsVF5YN2ZYWnhsXklhWCZZLlRAL303OW5aSnBrS1E3fDdfKDxPTXl7NHApSE1JXT1eRkp1SV03NFlwREA5WEw+P3EiKCFPS3hWJVFpTzprYDFETC4sSzE4Q09DRzY3SnA9biZ2WSkmX2VxJXg+T3hEZDF0OHVhJXVtfmg2OlFpJjBd''@;'; put 'put ''Pm48IUlBKDtRXm1gY0hBenp9ZTwhY0EsfC9vKCtzJiFaNCpmYXczSlpWakN0UD9LPEV6cDNWbnBRNUZINzZQKmdoSkt6cT0xXW9dbH02aCl3I31ZYzJHWzJnRmF2QTZ3KWNaTTBbVCNNIz98TlV0Vlo4UlAkQCh0TilXOVFsd1dTUXhwIXN2OUIoMjQ4ZltidSUyUT1KYjlHUmwjL05uZmJLKWMu''@;'; put 'put ''O2hYX0EzZCV1QzdfJDN0KEthT0UlQyxaQDIyZihRYFUuYmFIKTk/SThrdyJdO2ooZ1YzJmNWRGV3aDNxU0pvfUoueH1POk13LmdddzIhRSJ+c1NSUXBMIiNKe2NkVU5KaWFLRWZHTUxCenJ1MjFOcDd7eCYkeGVUKkJ5SkBaJTUkNShMZi9jLzopJjpoVSlaUmFGLF9mZXpyUl95R2kxSlk1TlJt''@;'; put 'put ''Ny4xP0s5NUxVRyQ/ZWJzfHpJaztsL3FbTFJLdEhHS2wmOl59Kyo+ZX1TIklWYnFlfERHMjlOX3c1PWg0fG01YFQ1d3YuUmgoSzhENFUvPEBDYSlZKyt7TGt6OyZEeF5LUFU6STZALFM3LzBlezRwQk8/ZnxVUWUvM150OC5+cm5eWmlFYFNgfXhWVGZ5WWksNGp7RUslOmdjWWVXNWZbXiJDNV9y''@;'; put 'put ''Kys1XT5vKm5qU0U9T04qYGs9eW1pM08qUmpSY3RaKmdtck1yIUN+WEFmWzptOmY8aUZ1bmE6dEA0byhrRWI2SyI9dF5xYEBNXXt2bEwlJD5XRUlkYnE0JiZMUjFFanB9QCM1I3diNTImTSk5fFBgR3QoZE93PVc/dCM/YDJZNUM8Ylo3N2g9eDAva31qWnxxNmsxMnIxRE19IX1db0MyaVJhKHp3''@;'; put 'put ''WTYrayRtLCFDZG9TP1soWG4qdkJCPVlRSF0mXTlTJShJOm4ucSpvJGM7SEp6aXo8UFhlSURnRl4iOD5mdGQ+cSM1WmR3Tll9ZyZYMzBfQnBhWUZEVlhxV11FPUU9LiRqK2lGaEMqYWVDNFk9N3QweFRBR2htU25VPShtNDI+bX07UDZGcj5NKlh9aE10YVF7QDRLeSV6UVppSixfKjlFOm5hdHYk''@;'; put 'put ''M0pMcCsrcX4iem16QTpNfmg8UXBZKDZlUkhkO35GLjBJaUpCPkw2KSs/ckJTXmszbntKfkdNaSZjVnlhREcjYkx5ZHpGaSVITnJNcXZJITtFOmYhaCM9fUlhQlh4fmY9RC5SfE5rLGFANURhT1JnZ1EwIzRKWmNxWCssO1l4PCNQVXEjaWFmMG1ITiJLSDskP2E5dkh4RnVzUD94eX00UVkoNVgy''@;'; put 'put ''YzZaTlFke2NkaVdCYiIxRSIzK2A1ZTZaUWhgfSJiPEUsXS80JFhfdUpdenNDdVM4TlpdW35WNT9aazEmNSZVdHg2UjhsPERbdmgzOm4/IkEzWzw0VkZpTio5OTcmJSwlbj9XSzNXJmdBI25Sfn08aCpHNW9NLiwvV1dubk1USEBOL04mbXR0VXAzODZMXVopZC8uNXBnOEhmU0prXXVCd0hiOjI9''@;'; put 'put ''QyEuYX5CTEZZI1IxPEN7YzNDSXx2P2giZCJMSjg8R31IWXIyaXd1NV8lWD1hPHRVI1BZQG9SdkcrW2gyPjp0WU1EcjVCYys6Pjsid0prOHc1aS8jUXk5VjhRXkJkLndVP35feXt7bTtVbU1+ITteM31dNF5eQWN2Qlg2InYkJl9iLlJDeEs9cE1VKz01fDJLVlBDaTpCXU9iQltCY3E0KXkwKW9T''@;'; put 'put ''WEglaz5UYCEjQCskTl5RLk0zLEYqT3A2TnNRaSF9KzM3QjRecyVYQGs2Snw+YXBeJEgoIipQNVFtR0t6SkRqNGEoNmt5OGFGIzFOVzh5WmpVfF13enFnLHc3aTN6Q1shZExiXXc8Tk4hbixOYDtFa1QiRCpKVTc/W3VsbW1HPGQ9KVpkN1BuQ0wzMD9iYnwvPkllYmI/SjlfZlQ/MF1zK30oZ0RP''@;'; put 'put ''SU97JEtLWX0pay5HM15dZn0mRjNhUDJvMGlgfnxIZywlLEVmWSQuUy4rMmoiPGE1cSRxTSxjPDsoRXw9VWlFTWNQRXMrMTlwMTgxZDNBYUJZOmJ1YHhQJik/V31meEpRejM3U1plejNvQz8kX09zc1RSOHFAWmBROD1QR0JdX3JKMigvKFB5RnJLcF47dHRYTEojTDdJJlIvLHEoUUhNeV9qWXR4''@;'; put 'put ''Q0coQ15YT19xa1c/Q0spQ2Z0PT5wSkE9e1M3UC9CVHpXZTByeGsiITtXYnEoYXw3PV8hXWxefHR0cWtYSm95RzFXLGIhWjU7cnFONkB+MHxAQm07bkx7LiE+fXBoWSksSX09MTFTSXAhOEk2WWE3V01lbz8rSj1PNFBQcTlRZkZod0NyWXp9cmd7PnpEQSFWcUFrQz0qRFBdclROemR3KGlpUCVB''@;'; put 'put ''WjF7WXpkcFtvZy9EVnNxdi5UfVV4STJ9MXtab1BwJlRGa2R+fjZSPFR5MitpRUQjVG07WHtfVVgzWjAxYFZqM1ZdLzxlMS88bVlPITskQ2JhaX5idT0qUVRrdH5US0BTdiQrKDYxKCRiRSJbVkhiODNZOTl7eG4sJiR4VTs2UFlDJHhDcW1PaiwqMllSYGk3ajZdOE9ESCo8RztNNCssflp8ciZq''@;'; put 'put ''L1c9QVtIJkFBZSY4KElDdl5sJEMjNzRTe289UDMuTXpGUTRBSV85eWdETnpIRitwZStUfUR4Si4mOVltfX1XdFc7d2dyLHxed1E3Z018YXdAdztZPHJaJXxndyV3eG8/UjdxLlpreit8YzRmYVM8YnM5VUJFdD8zWm1kNGM/dENvaWRZTEl1JUJKWiJMVms7YztHNlZQbioxSF1ROlZST0AvMCxx''@;'; put 'put ''cW10K3xOVCR1SVoscERqaCttL3AiR3dyMD52RDhZd0xUPmNJVD91IlVoLyV+JjxmcVV5OlUiJDtWV3N5a3gubUw8JDxJVG5jVHZGWCkvVCNoJTVCdn03P21EOUE6V2UqZiZvQk10MTgrLzBuaWRuUHxZaWkkdF9taDkhN1dQaUxnWk4ibDkvSCl0fGc9TypdJWE3UkU5YDxuWE9PRV4hOjlre2hk''@;'; put 'put ''dCxbRW9sI0Q+PDkkNUtXKlU+c193UXl2Iks4Wj0qSnwqSiZ7TixJMCZiJHM3LF9ocGx2MStzQGB4dj5wZUY/TiJjeykuNEg/PV8xUSgpckd4N25bWl90a29efX1APUloenlEK0N4SzYlOX5YcFJ0SDl1LlpXKEhSUzdnfCR4eDNCVXdFdXt5a194SVVFaCUjZjA+ckNpOig3ZTNyMnM3YGl6eF5R''@;'; put 'put ''bCo+clYxIiIzb1I+M18hTTJBI2VdIU1XZj9XZjlQTF5gW0JySSxNKiRsKl03bktnen1tRzh2IzwoYyNmMDYkL3VUaTxie2RMaDFiRUB+TSFfLDdhOyFjbCVgV3gmZUwjXnBSd2x0VnY/RkUuUEdZdFBoJmRaSEEycFQ3SnB5RnlBKG8sRWpHZylJQU1MVEV1TH5tM1Y4ZlRWa29lWyV1IypMO2or''@;'; put 'put ''cTBueSM8SElSbV9kMzY0PiRaR25EQCJnSD9rbyJlLn1qcixbSWMjel44R3VjTE1WRzNRJEMrMVkreCkxSGJiQE1LMCFWQmJONSUsYC5aPk1LK2tnb0ImWHEsMz96Rilrcm8vUi8ucWZ5eyE3ejZKITo8YWx4T2wlLmZ4PjVfYzBoSi9uMnVPKC5JeDg8ZCZ4bXolWEMhSkovWDhLZ2IqbGhZRWk1''@;'; put 'put ''aiJsRjZ9KmVMeWpZVj16KHFFTDZEISpQJVBzZXBwKTlEa1cjUHVdX1RZZilpcWVEelRKXXFiRnk7fDt6fDhxKXF9Lzx4RncpTDhjLENBIUdkOGtYKnRCT0N5QyF3U0pRYUlVZVcrT25pI1BUbDNpJkN7YUI3X3B7fEdIUl5peTt8UjBPZ3R4aEdAanl3fH4hdUJYS2pBOm1neXtPNFpgbiNxUyJE''@;'; put 'put ''OUgleDkqMm5zR1V9RFFVOG8yJksoSiloJTMkY185LlJBcGlJdipAV1A3JlpMa1JMY286Qyp1QkJXJnY/aXp2Pz8mWnpQJD1yOTxuQlR9QylDalZPJj9XPyZGSiU2SVYkOGxsLDM6ekRXaVkoX1ouITRhKSZfN3V3N20lXzd6dzNJW0wmO0l3VjhFdCZBRzZ5SGExQUZ+MzckSERnVDUuSUs8cjxe''@;'; put 'put ''aHF2VyRBTS4sL0ZwfTJWOmZVISI/YXUwNF0vbzV5flUyOjJXI09OOHhXRlhRezI/Mjl9RzhRY3oqMyl2PFZoOHUjTFEsIWs5aj84eWBGQ1d1ayRReWhJIXlULy55X0NlRGBhKTYiKFM/JU9RTldsOzpWYEBOLkgvRUtsbCFxdGIxM19eOSF7cXEsTkVVVDtmc2M6Xl5MMU1sdk9UTGJAPU5tU3ZU''@;'; put 'put ''W3B2PC5VYjZCbkl7W01xKTF0JXZkYyp7OF52a0lfQDQjJV11ckZHeCFaZFVwXyRMeipPUCprYVg5PltyJD02LnpMVW9rTiFvWSZTN2xSKDk8aXYobV4rM0BXRXBbM3VPN3hlYCM7azozTUYkJXBBJDdDLCoyTzxxSTZadFFge0I7dmx3W2skQHY1U0hxbml3X3lmWnFgTXY7QVN1QzlGbW96KHFW''@;'; put 'put ''VmhhYnF6JkJhd0khdUBoWERvZ25VeU1NaH07Q3RhWWtLSThmST89V0BuT3NdPnRyJChkJXdVREdvKGM/TztlPiRBeD5gI2N+MEkzN15WdmooZWhfQFNSY0lgTkI5Pl9tJHhhUXtAZDJCUSZrKnRNLGI6SSozOl8rWG9eMnVENHZqQkhgKHlEMlliM3hqPDg1fj13X35yOGVWVU8kSSU3eTVBNzM4''@;'; put 'put ''Sms4eE8mUEh6UFRgU1dEOEgyOEBYTmNWPVsxbiU9NzNgYH40an1EKzV+Pl99W2M+PT5GLHVkamRIM1VScDQhRzlnUm1yfVY6PGJ5RVBKTHZIMkF9QmQ/XnhpP054Iz5VekVAOzl6MSQuKCpraC4yP3glcCF3YGB0SUowXXxkdj5fJmZSRkY1a2NVd2lOeWZ0VXdOST9YYCk+NVtHeyg3cmdGOypN''@;'; put 'put ''eFFWZnh6IkooTnxtQnpiLGxUIVhZWFZmdHxuaVJyNT9eLmx5eWBEKzlHPWtQV3Msej1Xfl0zPEgpZj0yRkJQblRqa0pqT1NOOzBtail3PiZyVTpMP1FvMnRDQj9yZGR4Lj0qcHkwbn4qK147e0x6WEhyZ2pAMyIpXUUsJGV0P00yWkAxcHRSK2w0TypkQ2g9dzpJJks5Z0l8VDt3eWsyaWUjJn18''@;'; put 'put ''Z2VkX34oYiU3bn5oO0dUbmtxUjtVaz1SYTApY0s0NTBVXVBYIilSWVg7W2RXT0FATy9zUkx5Zz95ai9idElEKUc5LlNGY2pzeF4iLktTVmBYJSVCbyZETXJDXzs7USZHQSU1fT9vOEorVXtiWW5yLG9NKTZISlt2S31vJj5iIXIlLCZqY1lCNS5kVkxfaj9edWEhalVDZzxzV1k8YnFxaXV6QmJn''@;'; put 'put ''P15hIVsxZGN5bE9ZUT9lMHtyLndqLFM6aiFmL2J6YCkxMmlgLyVuUCFAfTRYU0RobEJjWkZnTCRMQHhRekwiT2JhOnNddWJHeXdINlgrcEtrdylMdWE8aTM+QlZ6en57TWRBNT0lTiIwUiUxWjZmJC42JCMhZU0mInFLSEpxQi9iKihVPz1MTj58fTsqN35XZXQqKn1PTGJsUCVjTFI8P0A3e1Vj''@;'; put 'put ''WCIkRn1AYH05d1cpQW12cEtfN2IqOz0reCMubD11bUxwbGM/S0Y3UW1FREsyVyJaaTsrU08yW35eXS8mS2skNDg8VmJ5I3VIOGw+dTIoX2xYIWV0LGU/TCoxMUdpNkNOcmAma1I8aFNBTj1eeiF+PittQjx9Mkh0UlVBdyYzbUNCVCFjNE1xM1NJbWNraG9QUkJoOFJtNHsjLn5Sfkg5YVIyWDBx''@;'; put 'put ''IThTIlkwaktuL1J6VDQ9SD9JLipxTEM5NXFXNiJ5fGsxNkF2XVJJXT8kOjxxTWQ5WT4rTnpwYno1MX1YfXsqcmhzT05PKnxRLyk2MlVndW5gK2NZdnNGc0orYml2Rkx3WkphKzJeKERBRilEUGVbWypeXWQlRG1pUl1fRGtUan4laEErNTxESFtQd1s0QTV+YnReaUBqdXxAIXE6YXtIRCYyWDJE''@;'; put 'put ''ZjYsKyNAZXFIZTUhcXBYZDI+TCR0OlUydHxXOjNITkBwQFdOUDFNXnxSKiptTGRnMmBdc1BlMlR0eEZlYWlrJFhpZjVxT10yO2NZK3R0QTxPR0FCbEMiZyVAcmZGZTZlIXg3KnR+R0R7PkdNJWc5cmxYcCtYZUZsdE5jb1lKM05PVVFWKVNkTWVFYFgyR3BZYHk3Ykc9TVpCYz4oWT9qbE1CNjw0''@;'; put 'put ''aTRdXS81PUZPfHR0QjpOWkYvIU83bjp6SE0mWU01N0xKZjVra35xSjApSEkwTX4jQFJkPlhUZnRYJSFRPmR2KztKTXtZRGEyR3pITW1pdDMzLn16TUlqNSl2RTJvNzB0SyQ4RjhmcE9xMHBAUmVRTHQ2bDB0T28kN1RlInxaN0Y5JlhTfC91dzUsQmhbPGNUPE1wTWJpVShbKUs0Tzh5P2ksNDhP''@;'; put 'put ''eGtDeV03NykhcnFWdFE8Ki52QSIzdylILCx7Z2ghM2lANkJfblopM0Y2UygyITxMOUJiTDpiNFZwd0AqPXI4S1ViKm9MVShrVUt1Zng7XSZOZHd5TmJvbUMud01wWltgPlpTZE5YKmtjVWc0eyhVLCtofUYwOD51OSUmJXl7SHQhZil9UFslYCZ2R3htcSF0ISFuVldAYDV2cz1YJDY5OE1rOjsm''@;'; put 'put ''NzckcHByIXptflF4LHUyVn1HfmxIZzxWJFNGX24xJmQjZTw0elVIXXlQUjIqQmB+USNfLF8rKWJNOzQ1bDhYbXBiNFdDTUpWZ2ZhJGw9USYiQ3lQNF04YzZ5IT54fDQ3W29uJlV+VzhjKngwTjU+fkd8M1h2Wyg2NE5EY35sY25FTCgvekUsQG1bdUtDWmxBXkJdJHhITEc6TCI4SXRxQCVuYkos''@;'; put 'put ''JSk8SmlGQUNFcV0qelh0Lz8qP1V2Sk01a3FuQUVQZlQxQkkqaGt4WTRRTEREWkRyVT8iUlkxdTt7JHZMIj44ZSl6QGhmRT14dlRoYixySE9yQEFeLyk6WGQuW1d9O019Tn1PLCtiWVtVTyUjbyxFJTh5aF0iI2RXQWMpPi5jJF59SUZpMUFvLC4wK0lsUF4rUV1tc198JHEjPFQqIVQ1WkM/RCld''@;'; put 'put ''YThmTnQ3KStmLzBIfk0sYGo4KVltejI/VHhnZzFMJiJrZVBYLzpDV153UD1+VUJaeUxNP2UmRnUzTUp3bE08ZjU0Z0s4UXo7KG11bl1WTV40PkojWG5JaVJBMVE8ciRaajZ3My87c2YoKDRlZEtBVytqaCVWfix5W1txRWs4LyJAXy81alJVOEVAQk9oSzlHK000JXVjRCFRVFJvW2dnSz81Qn0u''@;'; put 'put ''VlNbVDoxdyUkbGhuKFhMNEEsLGdZPD4xd21gWGJrV0whe0BXZ2czWlp6QH4oK1cpNWpLcHxwfFRqZ2dgfj0ifDs8Ln5JJXNFKGAiTG9KMmZhaVokO2VKd0JnTjhacyp+VVVkVWhYe0ZpZ0QrKj9gTT9NeEl7cmxBaml8XW4lPCRuVV52UH5yNylmbSohZl98OE4xPV9jJVZbW0BpNVBxJUZ8UTNi''@;'; put 'put ''WGBWOUtEZ1pEeHpOWDd9aSk9YCx8VnJSSDRZRilKeD9NISQ+OG44MjFZL3ljOX0+WzcvbGBzbVAjXWwqOCR3I1ZpKTZtfGhoJCN9fSRIUkMpUHxlR2xDVl8zZ1d2JjxoUEA8YnBKVGZELj4jbH5RRzJLYjt8dFFuOHpLRys7OXUmdisxJW9KS2BPJEpsfF9VXiE0M3ReeUBCMXF6fVI7Wzd9Mns+''@;'; put 'put ''el9qTE5oTyo7PThiVjRfTF14IVBVYyJ9L2FdSlZFVypdfWt8SmExdXh+dEtQU1hMUz43KzJkakJPPmN8fF5qK2ZqKzd4WUNUIk1hd2ZpWl01R31HelYreXRvNSUsbl07T14veEZ9S1M7aVp1WXU1TTxfI1VuRjVjaG1qPjhKejtycWhzeGdMSjVpR3NgTGFtajRmQjhkWk5KVWhOImtpP1FIXUM8''@;'; put 'put ''YVRUXUt9YD0ucnglPnQmbi44R0hGS2VkTV8vSjp+bitKJThzeF4vdSYiNjFDRDA5VkAyI3ohVEhsK21NcnIqaDosMzYuWCp2LDgrTjhiZ2hqeFcoYStzKUF+KDhNM2BnJS91Xj5UIyZ6clh+KU1hS0xhQnZ0Y3I9d01fSjA4Xlg5SXopWiFtfmNuMUtUOHBOTjNifnUwWTdmKD46Pm5iU0U1I0I7''@;'; put 'put ''bnNtaWpvXy9INndrJnBRP2ZSJGNpdi9mO0tWbEx8djp2ZlM5SF17JHhWOmlbZT4wSj1LQ2NAUlIib1g+Q1BTOl1+UTdSU0E+RytDaGd2biF7Oj9rWH4sJUgsZ1MzbiwxN2JmPD43YjUzR18ldFdUV0dtNDphSCkueUMycUZsUTtYWz8yW21RYFVnYkc0OEdaNWUsU3NEZ1NRY2JDdiNifWZNcElv''@;'; put 'put ''Jj9SRnwjU0peQVUsT3Eha3B8QjVUMWQwWWg/RFZdT1V2U2JKWixSXzhhUVVNKj97b0guSXgoc2lxIy81K357ZXR1dC5RTHxDezt5UHh2aUgwMW4rcW02Njl9LH1hZj88cFIzU2ZHOiRdL2ZLZEM3YTtoZl07VkNhJDJ5YS53NC8vOGxOVEsxcUcmN1Y8YyMrUWxnR1dAblRaa21eYlMhc3pkWyJm''@;'; put 'put ''KH55T189WTYxJmkmPFZbOXVHRmtdP1laOkxUZFtWb1JLWnZXS3BVfjIuIXVAPXVQZHw7Y1twM2lyRiRga3dUNVkwV1JreUtnTktnTDd1fUY7W3xAXVBTRyR+Ry5SXktSP0hYbWxONj5wOnY8Jkp4N1BdVyM8Wl5lTHQ6K0UoT3M5e0cmMn1aYFU0MXBZWSRsZDFoJEt0JXhZMyUvWjYpT20kUFtW''@;'; put 'put ''TUMvRWpdUWppLGwjLGs1JjJHNixkZUxnTXpSZCE8LkRudyZaPTNdQzZ2L2F1ejdFMVtfcTVHeyZGLlVJPSlIeWQ9K11hd21zOCU2O0JJSlMjKjlkcjssIyUvR0J4QzlrKEBiIWcvQ1Z9ZXA0SUJyRTI6WjQ5UypvcjJWMW9Ed31Ad3heLG4qP252Jih8MWJjQnEyPltDOUlpTmQrR1lbbWoiMGhi''@;'; put 'put ''XkVRW1IlTUVBI25vRiR1dU9dPEdHUFRNKnJFLG9kNlA0YzN7RnZoWj8uQFQ8T3IhNzphdl0jXiExVT4lbmtRVHw6QGt1fi4wP2hEeH5fan5VI3h5SEBUWnMlI3VTWDtrNnpUVkk+cn1jZ1c6Vnh8WjMqVEdwMlVXSDUzP340SyowUGdqQlZiMEIud04wKGxbd2tLZztuUl9YPz01MCQiaz5xNU1R''@;'; put 'put ''I0NXO0I3bWI3YDI7OnlBKiVXZ2ZeejdiWjd6fDVLbWpAV3x5NSNkVE91SUlwNUdsZU5DRDEwJnAvan0/RUJhKlZJLDZEXSs+UDhfUEkoY2c5T31PR2ttKCN9KFVeKDNJSFokc3AlVCZKWkA+YFhfJmtiXyIkTStneGZUJnskLisvW1tROEpsb0VAVUgjc3NpP3dFJSt5c01La0JRfmlXSj5pWHgp''@;'; put 'put ''aDFJK2ohMGFIOkkqcVlvK1AyLkVkOjZobzA3az8jKWxObFpXLDUzfmklLnZzW2UyckYlXWZsRVtZOChePj1UN2lOQHE0NWdFSj1NWzB3LkN5W3F4QWklPG1gXnpGfFc0VVhDKCRtVCNeSmJQWjAyJWpFMHZyX25tZz1VeyopPENIVDRoU15SUF5Gdmt5KnopWDRWMnZnbTBwSUM5QyNnWihSI3t2''@;'; put 'put ''WDxEUWpPcEVJZGYzbDAsYnF1Tig6RzhtI2JTfGFINCx2bUovZ2BzPGxMQGR6KlBsdypedUAlOGxxcl0kLi9kaUB8dSFePUpAJnZRZyJCO0leaXB9eT97N05sRTt0XlI1d0VqcWhsNkk+NE4kREF0I0I+NmB8KUFtKmwvQDF3K2hgaCQrUn01XmBsSTIwOlphTWVzOW8lbWJuIlt5ei5GWTFFL1hr''@;'; put 'put ''aSQ8fTIreU17MCtBM0d6eXM6eXNQaTpuRFVWclBkNGM9fWFxYkguVzVMfWBgaUBSIzo7Z3Y8Mnh0ZE9mLltgLFpqIlJFRWdabTI1TXBjOzQzKH4wNnpgTHldTjhnNyhJPnQhLHZzU3smWyZnO19NNEFhRlVULHFCfEtQKkt7blRRbkx1RkxLIzx8MkVVeTc7cUlDfTNRVythTCprNWNpQnB2O2k8''@;'; put 'put ''e0RpOEs9SG80c0lGMGQlfDNId2hsdzdMJmpWWyh8bj1kMkB3L3ZbTjB4cl1HQWE8cWVNbyhzTTdCeHk7Km9HcS4/MDpSOUlVTS5MZDdnOXlmVFBbKVclJWZiazFOWzJiQ1YwTSYwemBCUiYuPC80PTl3dl5QfFozPztKYmNYRnEiLjNFPXgodD5SYSlAbzZodzA+bW8+a1ZlblpeYE8lKn49MDdC''@;'; put 'put ''TVJtRDpRO3Z3fV04a1VNJTRleiFQeH0sKVBfXS8iVXRDKnBIOFBpVCJfNSx9Ii40I2s6eUk5a0R6P3BmdlRTR2ZlQGcyaFd0PmA5a10iSSEia0xdOjVXRXc4OXpBJHFoc1JGMlkoOEQzeE9LaEJZaExnVUFGV2k1cHE3Zkk0fXpeKFR0eFhLcGp6NEFGdjNYKnJiaF18eXROblkyX345NXNXQlFF''@;'; put 'put ''V2YsbiNBWjVMPGNZJE5CNjxfeEgyNyg9Z2VgMVB0ZzpYNXlETGtuU35AYm1we05ubDV3XXtxbUgvIz1SKGo1UG55JEtjTUsiIUxaV10mKmAjR1EzT1ZiRlYyOn5uKTJwJlVFLChPd2l2b05ZakgoZl18XjBrXk8mdE1tT2kyez1LbCU+Ol0xYXJFJUBTXmpWQ1M6KiQvRk1AOCpXRGZ2azltIXVo''@;'; put 'put ''Z1JubVY2WD87cns6YURvWlJHSGMrbDFFV3gxbkRdNUgqbUJDVSN0UmY0dntMR1ZaIzJ0aF9tM1VkV1UyaUcqK1hzPyhuMWYjIXEjSTlacFV1UGxaVUM6SipLL3w1YSVWdTZBfEw5IUwmdXlWRDE3PTtmXnpwVj9aeCV3MntkM0g9c1smPSg2VTh0S0xbY1dWZ0FlW1hTKngqfjpLXXNlbjI8Yltp''@;'; put 'put ''Jjg9ZyRSc259KTJOaiNGXVZjeXNmbFRuayNnQ0BTT2ZFWCZBWjZHeio5PzxidTVdPEh6W14kI0ckVGYxZ25nO0dSOUR5fSloK3R+TCwmJCxlfj0/TjBTVkZSTW5FNkl6L2M3bkdgJDB4YzlhYD05cDRCViIjaihSTmlGNWNXSExHPmdxTEFQMjhZcDJsZEpFN0FnKldFc1gjLH5UWVM4aDVWcSJ6''@;'; put 'put ''OTIqTCExM3NNeUgqfF1VdXlFNy5bNXNBW0E+ZD9pUHdoUjw5RSspK0tyfnZEc1pyRCNRYixdIzlnJn01bHxiTG0yLGxgNld3TE0rditZKF45cD55fldSdjZBa3RDYkRObDlqWz98aWlqNEBaPj8xVz8yd0haXik8OUlrViMhblAzYVg0M0V2SkZIVXMoYj9rZ1t1SlIwSGg2QytSTmFPZUpKKVYr''@;'; put 'put ''aGJUN3RmaSEufUtNK2slP3d1RDx3YV0sU1FxcF4qemxlJDJfVjIlQjVsVl1TcyFYcX00N1dQdXNxO2w5S0sxRWJnWF05UXYlVUJBSkRPcUEjNDBMfSFvPEg4WmVbYiJDJHo1fnp8O30xTEBvbVpWR0B6P05+PXU6OU4sVzMqeD9deEZWXTt+XncpU3BULFQ3K3cvMyFWJkxjez5mTENvcjc5OXk+''@;'; put 'put ''UkZsP2t7RyhzMTlLcCoqPUtqdjJqNFk5bi49aD04a15lOD42OCVxYGp3VmtlSUJ4YUt9TSRdXWF1WlFEe04lNXpublJYSSF1Vk0mcElROFFwTihfKDNmSSZuNkxLbU1jejJjUEwqfG1Haip6fihKT143WjZSIV1QQiUsKklXaFk2NyUvYjd5OTZLR2JEQ255ImtTLjVqVHJTYnVkM2w2SSZdTF1m''@;'; put 'put ''KSpQaz5HV1pqTV9OMkRWWkNvb00xajxQRUd5JFNeKDZOXUMwM19OQl9iMiouKFA+IzgielNRLD5fKTVsQmJ0bmB8WzJ3JE5VRHpXXXd8PGRjMj1lUCx+OitNcEM3WmIpWmEweTJPcDkmYHldPFpFaWhUTzBTPDd7bHdGdXxMeD9PSl9wejx5OUJXOStxQSlRKGgmdGlUWlcpRFdgISFpTUlie2Ix''@;'; put 'put ''YHFIRD5xWjY5OC54ZWA9ayZiNTkvMDovP2lwRy9eOnRiMXtEU1Niay88Q2xIQFgyITtJajpTczZTaGE5ZipHXndAKDkoO1FNLz9IOUsmKiw0TExSY20hLEo1W3J7OnYwO2pxTVE6bVpXJFVodyZMIyFPQm42PXIoSkRieDt4Uk09KzZsMkU/Kig/Qi51RmFWdVAlTnlEIjdQfWh1L3RaTVZdY29V''@;'; put 'put ''KSVzNEwsVWtrQ0NbTW5PdHdvdSg1eURDTCJ7KzVAOW9pe0MwSktwW2hpfl5EQVVRQCpmKGReZCUuJTRDS3thOXcrbkowSjdXWTQvQEhYcCpYKSg6TnBDQ1swWSpgYUp9Mmh4fWVjSnwrJiN9YEEmNXQ5VHVSZ3pAWVVmKzNfKyNfUSsqQCVxO2tHIV4+WnQjfHxgPUhFXjNJalgxNj1qWmtDNnVF''@;'; put 'put ''fShyYC4veU9eLD4lOypXR3RxcldzMG9nent2KEcuTFhNaGAqV0VeUW0/elFxV2MscC4kOGpZMSMhfkVSYihyN31YfV82QnIzKihERXRYdlpbZWxWPyhZbS95aEpPJiJpYFo1ei95OiU0flBQbTUjUH5ORGF1OjFbUXFdeyM+K1FpZnIvR2ksVSZEOCk6O3xpXVJOIi5lan57ZXgiOTl7Jl48NjU5''@;'; put 'put ''WGsveEg/W2MvZ09MLFUvWC4hcGwqfXwvbFpjWXVEWn5vcTMrWz5ZQClTaUk0cDd6K3l8KXtPUEdFJUVOUV9YMjtiUV17R0hbLkNwLjIlKlVJeXI6MWt5fkh7ND1dSWpCdFZzUUw6IXRqZCgxXntZT115JlZLbThlXnVWPS9zMXpaWHMjNkJrNTsrQz93UCFRIUZrVV0zb2s+ejQsbWhsT01YMitG''@;'; put 'put ''IkNYSykhL3pJTWFRbWNJTnQzUDteUXZQXzM9WGU8KSt3Y1hvJCRYL3ZVMGM7c2h3WjEoemVsYnl+e1RaOG9AK1k7I009MVd7cCk+Wy5AWCtyL0A7IkYoYkArNV46cWc5aTx+bFJPLF9Gd2BzbmVBTkZgSDlGbHB1PVNCLkw0JkdMRTpOQjAkcTZgK2gmNEBWcD1bPWRbKC51VDh4SS56PT1sclhK''@;'; put 'put ''KmRuNWU9aVI6e0NXNTBWPUI4Xyp9PTFmP0J2UlJZZ1J6JntxWTNyNWd3I1BZODU4QCpmIW0vd1RpcWcwRnJePTFGSk90OTxLRD88JVsrUDZGUFJbITw/e0JoJHBDZGA+dyJJMk91PT1qXiJdISIrKi9UN3AsP3A4TkZLcHZweHZdeWc8bHdAaFJTNjJEKTBBUD9CXlhMJEpaTjVKZVI9SztqZT8s''@;'; put 'put ''OSlKc2JRWHozMko1XXAhe1JfPm9CdkY4L0BPXz45flRqb2hSLnhoOCQwOWEvS001P2QuOzdZa0w/UEZVRG1SfXpiSndWM35ROXR2PzhyQW5NQyk6d3RJImlacHE6LGUzeio5UFluLFNYTFpKRzhKdyV2MmhJV1NOQW8zOWUvVy59VXg/LkIoXWElXzBoZUlAPWdbZCQ0WDUmXVFNWlEmZGpkTEtV''@;'; put 'put ''ck9wfF5XP0Ela1l5KlZ5Z1NmUSgwQmgxeWwhbFsyRWZWVC95LG4meDJDYzFmYnkhPGwvQiFESD0vLi86JFEpZ3AuWW1QaGZadlJLX308XkpSQCNBRXk7RyU1bjBgKUwvSWNXTDYuMmhNKXVqVC5KTTlGNG1UJC9lZ0N1JXZUc2shQVdWfmE2PVFdS35uMW8xYjBaY24vO3l0ey53aTplQ2EmO0sr''@;'; put 'put ''VXw/MkBVa21+M2cvNEAoTSFNOXd6WEp8LEB2OjtLK01kclR4a2UuTUt1YSRjeyphb1tbR1VkbFNuNkZOfkYvYVEjTiVqTjFPQUBNLj9eaG9QRWZgaXkhdC4le3Vbcmg6KXVreG88TSlQLi9iRlg6YUU8Nkp7d1tRJkBiJUtYW0dAUkpqMTc0QmNSKSpbJDdELlJHWFhiI1EvVHxwOiwyWzcoSGEo''@;'; put 'put ''NSp4SzkkRlRIXzVQRzlASC5qS0A+Tng6TW0jcDJnQyF3Jm1nQ3AialkyOj5ITyM8b2gzSzZtWWJZLjFJS1poQGJLNGRyd09HMWtOQDpaZj5dfCxONjsqXyJmIV8yOn1OLkVvJS5oUEtDKTdmdSRXOEwrdFRQVCNvM2hdW2YjdU5kJDhWQkAldVA/aCNHN1k0d2lINmoxZSxzX1lLLjF5X0FodXNm''@;'; put 'put ''OkQuLGh2cH09Yi5lQUY5R19tanpxKkNJPm1dMDhedHU+b35lNVNBUjRnOyNoTEN2SUBRaSxpUkZCKTlVWGxPMzpFODZ1ST9ELjZAJH5LPkN4RF1TKUZ9SloxT1FEWmMmZ1RGPHRfcHg/QnNFNi4zals7MlVVSmkuTHo9UT9EV1BTZjZdJF5KJVNARD9rSD4jbmBqd0Y3VlVHWnYhVmM1KHRdaWpx''@;'; put 'put ''NWJYNVJvTUk3QF8wPEsqQGx4OVlZLF9IP1gsODRSMURvenxTM0d4bEsuUkZQdEV9NHh+OS8qVEkuUFZ4XSk6K2FkOWVOXmIlVGBtVGZSaStHKUJNVVMyZVRXfDU1O05wN1pYWkJPJTg8e0RpO1ZfU2JhLzE9JkpMQFtEQSE8VlBpOlt8RUZLT2I3Tl4mSWE4NyNqciwqJCs5aGc/UiNCYHtJZjVZ''@;'; put 'put ''LHUvRjhKTENsSCp6YStgO09pa0BeUXpdSEZjfk0xN21NOj9IUi82eCspc0xvNHdNKnk2aUBMfElITWhSWDVBfkExNSwoITVxJWBMZW8hX0VqKm97YG5lLHN7fn50VHEzbGQ2M14hTWVqNEhPJH17ImE/X3tCUnwoOlIkWnNXcGg7UiR5UV5BZmBVU19BKX50WiRsS04sfUQ4fShueilTYj55V0hD''@;'; put 'put ''M3ZBMVVXOSIyNGUhR1ErOT5DZXdwSlAwMyRXJTs0P1Nvbko8fkxzVlVqNUEmQV55SEVSQjU1KGYuMXpGXWtHZiYsdHM6Lk5nJDRQRiU8RCt2QkVLWlNTK091W1VhcFZBPC9uVSFBSHphOkRSOnxvdEp7ai93QWcsdnFJc0QoTm0vbUljKmZPPXR5TF4mazZwIlFfQSJWckIzdnNiSCEuNCoxIlZq''@;'; put 'put ''Pl0oWD1aZjdHO0pYRUo5QjZ1dUxrSm1DIXJ0dVNtM2NneW5ebVJGKixILFhIbmU0XUEvcDhMMFdfLy5dYjc8cENrUXdBSkt1ZElTajUraTc2JWFpSkByMW1QJWhyP1FMIXZ5WVI4OkghbiFpLEAjYD5fTFZ+Tlt2O1VqT3R2QjFdZGcuVDxINHdyR2hCSV05IXFjaSM5ZCRiOGQ4X2AlUUNvPjpR''@;'; put 'put ''SGppYnZtKlZnfWttWTs0M05RMD1MKHhtVkBILFU1VGNwTjhuaCJ2Q1c5TndhK2A+WEFHQWdEQnZwZTgiZFJWQW1naj9SUWtwYUY9dFpudmxEVVlPJl9NbW49VWVZKjZKflA2Ii5UUkQhU0ljVT11enZJVmcpZWRuSn45flpWTitlTW41XiNDd2B7TjdCe3hNe0VSKzA1ZDlrKWtDKUNyWzI4flE2''@;'; put 'put ''ZkMpeTtXTUNgRDxAMTcmYFJrKHlwNV9tdWRsYFs2TypOPHV0PG8wOHhLZG0kPzNqfDdrISElWD8zdEh4YnF5eTojLnA4MTwjVVZ7TFNyJk9nTlJIZ2xpbz8pUWNbKmZtL1ZpTCFne1R2bWBaZkBBM11pUGolZjc4MmNdYU89cS5ZcithLHhLfjQ8QzUpKEwjSTdoZi5EMkdDISQ/Y18pKENWSVcp''@;'; put 'put ''QTxjTlMsO0A6ZUpOZ3B5VyRtZ1tHWV1qJWt1NyJHITMjTkhpU1IiZ0BsaF9QYyNGd1E0eTM9anlRYiNkeHMzVSMuZ00mWnRtPSJ1US5NQXVefj99YyZVaDk4SEI2eWZnWXlPSi8seEtieG1SPkVPTj1AZzJSLDZpOFEyY3Ricz0zYkN8P2N+MXYsTlFCSiFdSy9bRlJLU2BWZlRTMn5ddGkmRHps''@;'; put 'put ''X25kPTY8dWFDNzhnLzkjOC5bUVQ+MVEmKTpXbHNvOmdSL3plSipscEs7MDRKZmFZOHR4M1FVdCYzK2lvV0VOWnUyfCFRajBXdHcvNE1uLjAwSyMkSWZDMl5yYVpWeCshRlddUlIlXXdAVT9qRSg0JDJWdiZjd3MkRWI8MUw3YTUiZz4rPXQ3VUMvLz4mUmQ1SGFgSUQiLjJMU1VUaH00ZGdkSzdn''@;'; put 'put ''SmlVNFhSQFB5dT0hV1h5VDUzU0ZiLzorWWpQYyx4P1hEVTQkYzU7V2Zjdn54VCwvfFMhTSQhQCFoeXloPT9wU3NOKmMlTlF7XnRETyxPb3BURVIvVjpKencqXWVSRCw7fj80P282RHZSK3VYKCYoZ15+T2hLcixOI28xdmwzSUloaVB0JkhGTFdaW2B4OEhNbV98TlEhOERDbE5GM0ArZ3RSMFUm''@;'; put 'put ''XStbNT5aUSxRNHNWfUI2cVplOC43ZEM7VkxifTx4VGNKcTdCUnU2cSI5SGxtZn5TXygjdS5GJWU9ISo1Q1BZWF46dH5MJjFpIWdkJUA7Vkl6NFtmb15UOUleO1h5dT5zIl4hXmJbQlR8WVAyWSZKUDB4WD9VTmRoajRRU0E9d3wyIUlIUzVVd2w7TXdUKUkkQGkrYEpdOjxgQ0ZJWD0xQ3lzaFom''@;'; put 'put ''dD55cEAyZDBdfGM6eGVnVGR7Qy8+Pnx+MVdOL3crb15UbkwvfDEhP0B5Yno/ZTEkfG4vczl8S1JKIkJ1WyEjUF9McDRJaDtATDUwJF9lNkhCSWU0UVZ1WFMqZkVuLEVaNlUhWSZbNTRjWG5JUm9NWE0zOFJSK0pOdW9dK3FCeTFdWHI2Zlkoeys3MSJFTmZIPDR7IXJsMCJgQDNUeTRMVUN7Qy58''@;'; put 'put ''JFRAaFgwb0FxJVAqdVhgXVVyQkluLjojRXRyUiQ1UzxYan5WZik4MyNsZ0VJa0xzNyV7eT9udFB0Y3kufjt+S0M3PlIoJDFEclhTY01AOTVEIy8kLmV5YyUvS1htbCNwIm89a2U8Uil3NWpRRSEvTF9LXjkqdClue3glTEtVcVgsNHBCWyN8Z1hnOEVsIyQvIlViflp+Y05pbj12Mzd7aFZPPFl8''@;'; put 'put ''MDtEX3M4TDl3MCk0ZThKX2lCM31COikmYmFiPjVsQmVpfEUkUytEPCk5I2gydFt5Z1FHWHB3Njckeiw4R2ooKiFPXWVjSUV5YWJSWVpKQHdYQDQ+TXhfSl1uSmpVMSxFQHI+RUpUKiNSPWJuUm0jTlRSZ0tRalEoPylrVUl3ZXxEYTYvJm09VE9aYDtSVFhYM2c0a3ExaXF8SVRjPU8qeko9Kz8i''@;'; put 'put ''RFRvXWB8JHRweCt7enYzSXR6Qj4hMiJiQ0FpcWZ9dEMyOGkoIUYlJlV1c29tezklWXllN1NOaFtZMkxkRFh4aFcmRyREYW5LZmdoLERIZHBJNmNMXXhEQlM6MjA4e2xiYlQobUZzJTk4U1YlQDt5d0lRd0d1KytlRFppQEtqKVZoaHB9fG85fiNZLG5MdnM4UFJlNEZOSUQ8UGEkNml7d0B3QXA0''@;'; put 'put ''TD5GUVRWXX1wKjFMYmpONUYibXc2Kkt5eSRyO0Q1TyNmbkMuPUV8dT0uZndhQ1ghUjp7VnJBbVk+YGU+dnZGM0Q2NkVFQmw2bys0UVpgU0VLI3Jad3Rdbj1dbV99VEJMRXB6ajckPUxqfkZpQU9nKF1Ye01MX0NIX0JJaGZpaXkzdCMqRSYoIXQ0Xj4+Uj5OUm9ieFRPMVdHK1s4eCozVHxie1ZL''@;'; put 'put ''eVk2ZCVmRDleZ1R2ZFtiQXJgO11hTVoqQTIicXc8S0B3MFsreWx9L3R7b1dPdCw5Sn00VGRqPC8pTGVoTmt7VWtZIyl9OyFpX0RQQWo8bUpMX2c4WU5UcGt1ZTpaREQ5OzhXSVAvanlfY2JVbXBgPm0pV04kbWBfZkZALDxTQkNmXjhrfnhZIW1HKDtkaSt2UmNgZmsuS3w6bSVib2VhUiljcEsr''@;'; put 'put ''PHVMLEFzMjtiY2p3UUY9NTBTK2YuJjRpcj56Sj5wUiVvNig1U2R8QHVMNEFJbkNRKEg8MGYlSi4/JUovSU5FYmQ7ekZJZU5kOW8pbzlRfEdmTCVsKyx3e0kyPlYraGFSbDJyMWBNNHEkYnFzYz5faEMwMEV7JDJOdyRVa3ZXXW40SXFaJFVDUG17bEZpOm02KSo/KF5lZ2RKQnZ3dXNkbjdjQ0oi''@;'; put 'put ''KXBjaG44dUwjdVIuez4xX1VNb1NfR3QrfXlNfF98dzNSSFR0KDtBRD55ZT9JYGlQVHRQYWU1d1FwYktYYFh0VmhsYDY8d1dYNVg9TSYlRD0sWnApX3RvNEtwIn0oIWR7aWNZXmx7KEZDITgyRVlhN11EJDlnSS9ATGQ0fTQmZ2dhLDVWZEwwUHhGeCQvN298V2dlMGpVSnNaJHouaTlIay91PVJ0''@;'; put 'put ''dT5uW2tnZCQoVjBTcVV3bykwdSo7fXNpeUp5KFckYz0sSyVQNk0sN21KJXxfW1h3Wltne3M9MFdFM1FZRVQ0JHh5MV9FcHU0NVhefCorYlA9IU1xOyFrMXwjQ2xEOjRPTnQ2c1kuXSZZQndbNjEjdT5Tb0tBO1IldENFVnZTI0Y9LjpUOHVsYyV9c318U3dFT0RfWiosaHVXfj9NOzg3NSxaRCs8''@;'; put 'put ''WDNAMX1WWXxiTGtOJSxHMTF9bH5NXjV3bThbInJIJWByfkptTmtBdSwqKFRNXkkpcWVDbncrQ1tIKGNFJlZyclgqeVhdVjZJUXo+TCQrYEYqM3lMOyw+JiE+eD5HSmU0fEtzOD9ZKTFzVGoqNVc8WWN2dCh6fDUiWFhFNlV1Vmw1RlBvXXMoLkhZfkxtaTxfSmU/KWsoOEZTalFoZzpSbWt7Yn1h''@;'; put 'put ''PkZvOXA5NGxmJDFsPHZJOUdrImdWPDpuUT11eCxEOCwhcUFWajYjby82LEtVNjIqb0FDVEE1LEZhfEMkZkhyY2VscmcwZllHeiU6RmdvY2ErfSZdazRbIzlHV2RsZV8jWDNgbzdfclB0aVtLOGVgWjxJK188SHFaOzsxPlV8Xz5nRDNJP1JLQU9BZX4vPHttSzVFUXJYeTA4NlBbN3dZPy51azUl''@;'; put 'put ''MTI7RDRSZSh6PTU4cj96dXhdYHV1cihsZmJZTjR8UUUhU0Z8Nl5Oa0c7VWhWT2syLjwvT1t+PVRVdX1sKl0sPSk0Y0d6OHk6TVs0MSIxMnNMfkFsOnw5RWY0Vz14bVVYaGR3W3xpaGNGSnxIcFgzN3wwPFFYbjxEdXFHfk1JMj9LZ0JaNjZYPTAhUlYvMjtKajxBKV9qdjNaUyUsajBpR2cxNXpH''@;'; put 'put ''Kms2TTxhKjAsIyFITl4pUE9+OTxWYzY9WCN1SlVVXXxaV3tyInU9VSxhNEN4Rn1aY0t5L2RAOylHbnpDWnBrR019bkwqJjVHJixqWzdKc1BiQEZsWG9saG1bdDthdklbLE4mWmYjQ0hSaXRFSEhEOT1MRVkrR0BRJSNDaTo1OSRMeHQ0IzZxMXhCRTthLl1obyRePyV1RGFgcWl6RCh3eiEwQ1c+''@;'; put 'put ''SkRdPlhUOlddKm1YbVZSL3FDTlBYTDpdWlZGKUgqKEtwOStSQjFaOlt4PDx7aV94TlsyXVtHUyRgVW5jalQ6TXVhckslYTRkJjB7bmFZVF1VdDhHcX0sIl9rcklkaF1mPVN9WiJYIjh2WHwyckNfUSIyNlNEKV0odUMiWVkqVnc5L2AkKjslejZ9dGx9M0VsSSFATUIkenN+JDB8cnJNLFdKeGJt''@;'; put 'put ''allWbWpCV2phamYmaXd3PklMaVBLPzpESyFmQmpIQVE3WiNnIWpnWkYsOHhhMz1kJnZJNjtQT0xVUGF4TVp+ZzY9dVJkcm04SHNLYHBkLmtpY1guZlYycy85IVF5bkJvX09yMWAmZ1R0O3k9P3klVXhlPUQ8Vll6bVRacHxNcll5WDpSaEFzUzMmfXA3WjI1Kjp5Q2NYOE1XJFdEdSNjYkMiKWFV''@;'; put 'put ''W25mNjMsWClfI15SfVosOCZaZ0dwLElkZzsrJCRAIlIoalk6UDp3ZHE4Wm5ScGl2OWMqYjI3QVVJLmdabjpFMEtOOD0/NFZGQCg0cjI7RkJ5cElPcWg/e1cwa0xXOXh7dHxPPU1gLExVMmxpQFRObltOanlAZTQ1K2BGJGh3I00+RDIoT1BFMyI6Vzp5N19eVj1pIjZWKz1KRXl3L0MiJEUzJSlr''@;'; put 'put ''YCFUTSZDbDx8ZGg6cyRrPz50flJxcSNdSj9KcCFGMntIRiNQWDY2T1tiaG03K2VJJGc/JnE/cEk0ZkNwM1gvcUNWaUpJWXtvaSRHQGA0Jn1uOERUbDV+Lm4yeXsleDgue2c+W3UiajNxa35RPEZXe250PWcxKG1bdEU3Skg5PGQ0PlEpSTV4MmVNblB+RncqSiIsXUdbdmlSLzdaUF0qRGN1TzxG''@;'; put 'put ''PkgrQjRXeSF7TCIyQyY2YSwkelBjYnd7dnxARyI3LloldyZxYjVDWSUmLz1OfXYuS28hbXtfOHdiVFFTd0h8dDA4YzY2Zytka29dZmAjMThoWkZdTSQ9ZXdqSnkyKz9ndixfNUVFL29WTVtueVFSfXk6aDFIbDpgPnwxPk1bNyxxUnxiXUVoMHJ0I0NbUW5zKD9QfU41RXxtY08qeEpjWVR2KHBd''@;'; put 'put ''eX4uZ0EvLjJpZiliK0FnSF5jTCRUanMiJHR1UEZxbn17fUlzV1NKPFYzcyQjKENMe2VWXWVzVyZFdX5gUDsjU18jTHRNImw5UXlJZkt8Sl16UEhXNHdgQ10xQEpjWnlUYGZheUl5WEU2TkRnK2ReKk97bkJsQGpxfVphTnJ6QWpmU3VQL11nNld1byhiUXduOUBPNiRrV3NMSXVHckxFMiVFTD5o''@;'; put 'put ''RXg1PF5kdyZsWDQ3KExeWTVKVlo+IUlWVFlJKEZRJEAmSWVRNEJqY1NQIyZSSjpsazJgfColWklpPT9GSlE+Z2woaEVMMmE1dEF1U29yZnYsbjYpcF8rVGo0RjM2LC5OPGxdUHpXZSg7KzZWVyVYKkUoKUc0RGFNWjdYNnREZH1AP15hRHVAPXcjaTwvLG1jQDcxQ0NIdUtoWSp3OzVpKCsrOVJP''@;'; put 'put ''bE09RnNJI1tiO2RlRzMoTF1nPmRHIitvQEgpTUp8PEJuMDc8W1ZzP09TZllqQ1d0YGl0PmVhMS9KT3NpdTEvPipJPjZGNTQkY10sYjN4IiYuelJoWVcxTj5mQ2Fka1BFaDBmPm5zK007MSUkfElPQzpUSDhjVFE7T3JMNTE6MGooOzwlaU0oQF9kQDBSejp2QEdSfGAsPD9yZ2J6b0JCJUxZZyJP''@;'; put 'put ''c2BEcnVkPjJmaj5HR0JDVW5WZyJrIWB3P0FRTzIrTHk7MXIvX245Qlg0KkkqQmJmIV8iRVU8XzFsdnUrPCZGaEk1RVtKRjY2Z2J4RlhsXyZNOCo4TCF+OyYvKWxBMXUrPk04NkBGIyN+Rnt4R3c+KCxpSGwvaWUyQio6PWNsTi9JPlpqT29QNjgqJDZ0fjxuIjMsSUdSJFBmVVlqUXdfK0F5MX42''@;'; put 'put ''IlJAN25eTndDJSNNOVEvfHckW21NTy9PYjYwc0dqL1MoYVRfOjN0RnEpVmdHfTV2clRdS0xrPHxLLnk9PmhJfXBNY0IyIzUlYCo7V018clI+d3tgYkxPOlRxRGZwL2FDNlhpUmlMPDs7V2R5Xz5QRjN+R1dSOFcpfS9Gfm1ZKE9QKTBNMz57MDd+eEhdY1pNKlp4VW51UWRlYEc6dlJ8ezYjUU5h''@;'; put 'put ''XkIqWnIxb3I6O0YoMjgqVHouJmg5cyI6dHFvR1pjN2RqcnRsW3RHbTkrVHI1dUpDJERTOU0+JjEwRHlzQWczeWl+Z1RTSzFdeXBlLmg7JFVndCZpYEw6TU1tc0AlfUU/bWlTWTE4Wio9MDRvamhhU1JpZDw+ellDN2VEWEo2KThda2wwQWlhRDxScmh7T30/ciVtQlgpS1NDPWJDfX4lNGdRdVlf''@;'; put 'put ''Xz40YGg6Q0NpOz91fWkiJkw3KjJwY01tWTcmemBdZVdvKUtHU2xtZSs5MihdTHlHVU55NCo1Y0U3TH59SllhJjl4MWtMUERAI1E9azhdL0N+QHlJJCtAVnxebSxxO3RfKnI2LmN7PWkhbWVZLDJgU3YpUChlLHA8VHkqRSUoQ2cuRloxZXtwdUB1Rkk4W21kbmF6TU9mKz89YkopcmRHMXY3T2NV''@;'; put 'put ''ZiZJZiM+QldXLytVfGchJTJkRT9EQHZIYWk2JXcyY3hEak4yc2tqUyolKSh5KEVGV09gaD8/bSNPdilbdFJDQ34uX1I3VyZ8VnRUV054ZE5QMjkqNWZjOW5DO1JsKz1KWmdGNEhQTHsoN0Y6LlE2Ri99JEdxUlEpMkdFRXFHQHF2bj4xQnNQKTImJkReY0wqRlRGO1RCcV96REU6O31XXVciNiJ+''@;'; put 'put ''MCE0S2k0anlAN318elt4KVldIXs6TGlXRXJfQTwmU1ViWUA+SmFFe0EpTjdQRHZFOktXTHkzKj5QdnwmYXYsb01aWD9GKzMkMD9GV3pJPFJQUC9acFBDYDwsYl9bZS9SOE91Z0pdV2t9TU92cC4rRG9CWTk2SG46Q3wsJElBfE9gbSlHezhSNy8hQEFHYUl1OFZKTUJATUNoZzk8aFc6JU1ELn44''@;'; put 'put ''fFlbZUIhZDlOe3BVdCl9TlRkNzI9UXNASlpSV3JLJlp0eilFalFiX1FIe3dmITYwNjt3RS8+cCFSKmN6OV5oRT5saHx3aD4+XnkwZHo0YGswemoqQU5vZjo6OT9KeEpYTE0uJEg1cVNIImIkYGxrUSwmciZlOUBycGBMRDw2MihrfHQsYjd+XThTeGdga2ZZMzNyPmw2UGElSFpVQVlfXnUrY0l7''@;'; put 'put ''fDl5UHgifC9nM19BRDledWoyKms5NWVbOF5tfmk7QU03SFhPYUtsUjF8YVZzLzorOHhtYSMhKkRLRlVHQHo2cjRaOGF9MUZFa25JMWtBUzJiN11tKUQlSk1faV49VUZxOHVWOy9tZHx5cHBeVXdGKG0kNSExYSksTl5ucnVPR2c4K1hDRix4bGZFS0lyZTRLR1lpQz54Qiw0N3Y3YlJyYytTTUZ1''@;'; put 'put ''XjhlT1RdZnJgKllgTiVBZkt2c2YpV29EUShuLjV5OUhaa04wbUlnQ0A9cF5TY3h4QSR9UjxqWiZCd3c7XnJdVnEqbHtSYTkob34+SVUld21oNSxgcXNLTDVsPDs1YHZbVHh2OFhMfUNvdy5zWlA6Tm9QNT1PRi9ZM1ZJdSV6bnddXjEmSFttWlFHd244N3I2OSsyTlQ7emp2bEU6Jjs/ejxZW0M3''@;'; put 'put ''eVg1eXAyWEV4JDp0UnlpW01MdFBEXzU/NTg3X1E1dz0zRFh5e1UxKDAke1hYMmguUFV+Kn4/IyxHRmo9NUshakxyOi4+Ln1QK35WOmg4emo8XnpAMkNpI219RFE6QnQ6LkVNYCYrJWA4ZTJEd2p9PkVFYWxHXiNxUmlXMVlmMGVVOV5YSHl1e1JeKjRNd1U1aiMse18mfFRATWJmMn5uUXsuQG9B''@;'; put 'put ''N15FTCZKOXM2NnQsWk8wIVFPMCY4aDlEdS8+O0BHX0wufnY5NztiSzB1V3Y7S2YjIj16WSEvYzZ7cF8sZl1NfX5XPjNCYkA6P2p7czx5WVB7fjBJcSZaQXxPXWFde1VxQmMpMkhXVGc/VkwpeUlYPkNNJHNKWmkuYGxTOG9jVzQ4Xm0rZVQjQlZIL343TkVVJk1IWnQxdSY0RntpY2BlMnI7YiUo''@;'; put 'put ''S00zL3BIW0cpWHBleWY7OClmW0I5ZUluSGJOI154fGxlKmA7NENUZm1TYDksPUtYbFpnNlF5XT02WUAxWm5GRHYyVVlObSY5cD40Kiw9cVo6KmB6KGgsMiEiTTxTOjspTSRzOzNTI19kKGJIYWRzQj8rLzFWRFg6Q19ZbiwxeUF1VXdqKD0/TUpzQnE9WnpqRDlpcWhGI11WSEJDWnJWJlRfM3N0''@;'; put 'put ''OU10ITFZMVttI0dYQXh2VEhdKVpAciJJI207RFVRTnFDbyswXyEzPWNjbztWLltVOVNWZ1l2bU1obEZkTWR5dilESVZIbmIhODx+cm9jJnU0UW48QyQwNWxAPFo3LiJWUzZDLjcyLFleK3lEdXR1YT10T2F4Pn1URGBHWkIwVE4jUDV8ZT9wKjEkcjRRcmVYfikjSm82UDE6JTYpRSZpUUA+RVQ7''@;'; put 'put ''S2YkIkl5dD5iaHRYUmAyMF4oWHFjWylEd10mNXU4ei8kbT40O1IpYCVebHZYVFAlPl9ePit2Wj0mX2BPKE9BcFlecz8+cCNPK0pkSkY5ITs2WTJbeE08IX5vUy45aXlhRX59PltoU0puRUM1YWVpT0lEb1JIPWt5NkZGSnx8aEBVekA/Y0xXVXpTNSZmVTVQZW5YMVsoVkklNG1wYiZaMCFPWTNb''@;'; put 'put ''TihFSD59QG9iInBQe3h8NkJTVkY9Uj83MmVyMVdfOCE6Lz10NG9VeVlpZXc+MiVXYVtsZmlFTmE/M1EhN1Z9Sjd7LDtJITZabWN3QGJofUdwPjg5Ji8rZTBYTyYkPzdNP0c8bl9lOUVZN1krKyM9Ty5sS35TJmNgRkttVjJwUzklWSFnM3tDcWVCcTYuQDojKG8+TkNPKnNwYjs7LmNhJiJwSylT''@;'; put 'put ''e3Q/Kn5qS3AjW2t4bnx8PSheOChXZ24pX2lwVj9DUVtzNmt4YUU5TEBUeHRfI2xKOj0rQlRZfnIhbGBnKn14cUpZPXRbczJMQn4hUTd7Q3QlWm9MbTkhSDBsSyFLcUxiK29jMlM/SFB5UER6UjdPSVJRQTVOPmp2SHBSaS43bjJoRS5QRHNiTkBdfUxZU01zfEIyMT04fWFGfHhHfHk3bXZ6V21O''@;'; put 'put ''d21jLChddT5BSTNQfmBxSlR8bGNtbl9MUVAlaXd3OXYpayJlakthS002KklbY0hGdTR4RDtoJnAhbV5kY0RmaEZsL0M1N1h8Q3RQdlZMLzM8QnEjT0c3P0xweTZ2cSRVIXghXT57ZjZsNExfJEghSEg1QCFOQVNnRV5sO1hZKGFtJVBhWnI1YFdNfW9tKUczbmp8d355WzxfUTBbbTtbTWtrKSlZ''@;'; put 'put ''ZGZwJForVW94PEhvLHltdSN8KV9CKEx4VUM1ImR6e0BSeXZKUGNxbiR9VWEpNXEuV2p9UmhvZEZQQTkzXUM/LzQ7NHYrVkhDQHNfYD1mfFdZQEc8bHV0OTpeYz9zc1RxMkBMKlNFP11nYTBHaD53fSVjNk4/ckJGciFWSDdvLnMmMjtGKCM5byQmbmssRmRySGczeS49VWRzMWhwQFhjJTQ0LndD''@;'; put 'put ''ZjpkX01jclZbaTd7LyU7R25NflhdIUpUWl45LkR7I3IrRUJ5PWZhRVVZUEB7NHN0bFBFSWdwKDRMbyp9THUpIjNtdWN7NHxQUlN2a1JfVHA7X29TdltySThkZzpjS2lkT0x8cDpReFk1ZFhFMDs3T2koJixbT2s4bXR1IUpIailpSEJecmY8Tz5FV3gsIzRDO2dAeShlUWIvJUpCZT9IWk5BJE5s''@;'; put 'put ''OlpkOilNa1EwL3hRc2YoYzhQRyVlfixlZEZGSTkxTS9tUUFNX0U4QXdrXzNHcHAyYlZNIXp0TF46XkpBbn19dmlRRWhwRzcqcHlLO21UbF0lVDwpMjd0dSxmWjE/fSxxI3MhXU1Ybl5QQm0oY11aZCF4I2YzIWs4O2Q7NGopcVg3TVFZUGU/O3RvXiVqdyk2dWdTY0RsfTRfW0hGdyIxQmhxeUx5''@;'; put 'put ''VXdSKXQhNF5xViZJTyUqL0tCS31mXl8vU1Y+OExgamZvTVtxe1QqNGVaZ0JGeCZ5fE86UW1dXiFNQHE2PiE9fSNlIXMiKCF2Tyt2QE9lcyksakdMeX1GeEEiIW97Qkh3ZVpDN0d8UlIuJV10bTJXblt5eUhhfVF3ayFKUnA/TF86T1BEKW88Pmp4b3RheiZbQkV5OWdJb3RJcXZOUWVJWXI3WGFl''@;'; put 'put ''K1FDMDE5UlRrPj4uNzRdcXtZNil0Km5VJCM8Im8+SWV3dmJoLFshck5FPT0qOWg5cnY1NVk6PmYqJENjMVF3eGI5SzdpcVRwOXJUXU05cDdHZmU1InNrYlpBOHA4K3lzL3JFJCkhV1s3e146SmUpI2lYR2E2XTh1Tig3YTJjIm9qclYvSWQkMU1he15KPWZ6TnpXW0REQlc6IUwrbCZpTSROTjFH''@;'; put 'put ''TEF5RHhwLnV2Y11EfERnUTx2dXtxYjdweEdjSWQvODQyakhqPD95NXFFem89IXBLO2JwfVIxL0BeMCJTV0JhL2VicShsW3dxVj06TWY+RkIwZWNgUiRUVCExemE+bzp9ZH4zaiNQWStAWz9SIWppNkgwT3RlNm9lVnh5T2hvcGw/WEt0VTIiTilXKSw0OFpJayhRZ1pDL2MwcTdaVlBwSi98JkpX''@;'; put 'put ''Tk47YVd8azUofntUT2g3U2ZGRlJOOVsxQWx0YzxCaFsyRHwiNCwmakJWYnI9PWg2ZGxAfjRfWk45KDgmKipUNmRDc1ZFYzRsNyheRlVtJiU5OnhASUZbVHJvP3NIZT5UVSRka1ZeQ1ojWWhMbX5kN0AkYyZJIT5NJS9UUUt3bnZJcXRxMzlfbzJOMGBEbl09eVNqNX12VEF6YHc1dmE7QV8vQ299''@;'; put 'put ''JUtwRGtsSCF5cjU2KkwyN3kuSW5iPEheU3pfYyQuUi5wfkhoXXZWdlQ2WGBPbHZGV3M7QyxPP3YpJWM1d2VHdzJpZFMkRn5PNFYia0lFRT9WWWRZMltWWVs7MmxAN0tQdkkqPEJqb2p+XXpZOEkialVacE9GdnElNjIqPWpUMHIoT2tCJF09JEtGNz16QEIwe087c1ZsPH1dPXw8YUY7V2tXSFpJ''@;'; put 'put ''fVtHd1p5TjhFaihiZENuYEw8d30+TnJAcSFdPDgrOTxuaW95ZX0/dCFnZC5sOVRdZ1dGIXghY0RhMExrYjQ/KSlIfndsKyxGOkUmTHR3Qjk3cGxbNmYwdSxkKUtZc0d7NV5HPFBvPk0rc2dtei5gZ2dST1BSZkc9TFYjKXhQfFhNXz4iPzZ6RCtYXTN0anxzOnd2TEIrKzwlLiROa1kjP11IJV05''@;'; put 'put ''a3VVKiJWK2hNWCV+c1RDPEl1QWloPDtYMW4xY19gQ0dDRSh5OV0pbXEyKnFJWltVWm5XUmhdVzAzfnBJUzU6SC5KfiNPTSk0fiEkS3xmbER5dj0jQzI5O1BUYlM/TkRlb05hWEM2InZGazRsbEw6fl94VDU6MlN9NF5PKkA5L095Zj5nUERIfEZhYyolfkNbU1ZIMypeKXV+M294KFhETX1hKnZg''@;'; put 'put ''OVMwNzZPeTBzRH0xRFZwb31MKSpBeXtbOlkxSWxFQUBsL1ZKVFZZW2VKK2loWm0oc107NH4sR2J2fHUiXmovbUZXbCNDOUZ0N3B4azdRPmhrTlBZSFFDKzlXUnIuVUU1PHw4bHNBQ002QCReZjYrdnB7Ynl1fixHQltfWWkqL0dFMiF3bz15elg2SGJRX3NjRWNHYG8odX1BMzFecXMibnh9JSZ0''@;'; put 'put ''QGRpOFc5VGBWUmNXY3FBUnZEVXo8flUxTWpzW2NaaUV+dlBsaytwYFUzNWpKRkBGNzFaK3VqNUx2LGo1KSo4UXpHWTUkJiFORUBAfXE9PnNAZVlvIWUuZF9TQG1XW2x7cixxc2x7JSVGLl1gWiZBXV51fF1aT3wra2dRcENgU10qSEsyZi5kSi5IK2RRUUVibDs1K3I7OWMlO0ZHIWNFZzJZVW4l''@;'; put 'put ''Mm9yajM9Lnw7OzFIMndESmgkVCZkY2NDR212PlhZdnA7MyZ+R2s7LjpmLnxoVSx9LGorX0U2Yz89L10vNTpIRmB0NEUmUTk/Pl0/OldxQmkkQXlaJko5JVldZ3dtW1tGc2x+Xz0lITxzNC5XU1MzeENxX2hTKjY5dXFXTWhSLCIjSkVvSSl1PVVHYTBUQzhnSDZ1cjYiXWAkVGEpW1FyPUVeXn1R''@;'; put 'put ''OzUidFowYG5iciZ9PzdFOVBIXkNnVylaLzp4KU9RPylrRyg1JkY8ZHY+fkVvLkJyOFc5eyQyTHNZejtZcG4oKXcidTAqZnZdcD1xcjROVXF8cGNoOjk+MzYkQ0lzOH0sd1ZbZEYjdSxNSjpgUmM8WkI8WzEoXSopUCg4TkdRWmY7T1kzRU9vX18oOSg6bWNrV2JhaEo0fENsTG1MQkQqYyQ4fD0v''@;'; put 'put ''Y2dMaCJOY2YkNiwoa2s/MCZjO0RnOGErOHU6c3p3ayFnckBkRiZoJX1yTT90OVFxdzdlcXsvYkBiRmxeNy90UWh+QT1iK1VLQDl5Oyt7JipiQXUoJD9ZNzROczY9fU9VVUxne3clKHhYXypoKWE/OW41LFlfbklNYVVKM15YLmEqREJnTllMbjRxX2RVc2poQiZBR3ByP15UQkc7KF1AcEs+NH5p''@;'; put 'put ''JUxuZ0ptc2dzNnZDY24jd0Z5WUQzdiZBbG8uLiY6Pyh+d0UkPXg2VEg0P2xxOTlRWn1dezg/bDdOLm1YXTA7SUlXMHEudTRdMiM2VCUyRjdfM0w5dHZeRHwoeH5sajxRbDt8aVNQV05WPH5GSmI6UCkpb2siWUdSLzxoQzNbWF86bXN3TyQsMkAxbU1hOV1KUjtxe1FqNXFkUS8rLC9fWTMzfFYs''@;'; put 'put ''JmVJcVU1MHlPVmkoNmlWdkQxLyNkYFJHN2d6Z3I4MGJqd2IwKjNUKWNrVChKQnB8ditWbHkkPWg+ZVRNa3AhazpqNUVidDAmMDt0JHxQW0xSJWdQZCxNUlk6PkpOdD1gKmE4dDEzem1IeX1jdnhXbEcuPl51JFRIIW0uLGJrLyNDKyl+b2JUSUE2S0hlMX5MUlUhLEM3VFNNTFBGVnp5NX5jfjJo''@;'; put 'put ''YStNNnxnO3d3JTZpfm44TntQVXclLj5oeSgkQHQvZEJFUm5IKX1ZVmAuckRLa3lAL1FldTMoWH1UKnF+WGVJP2lmK2FESilybWlIfD5DcGE5ZHdvd2VMdFJ4eytZRltuPlFBKWpuM2NKSl5MUW5BK3VjfmkiaE5FQV0pX3Q4aH5jS0s2NWdSdCtzP184ZWchXjwrYEZVJWoiLHJvMlBBI0dKYHc9''@;'; put 'put ''W3QpJiNEdjEmRFdWKmw7MS5LUT9xVTlbWjBmVyRYPUJrYTQ+Nil2QSlEIS89XVBkYyhiNXhTNUMpQkhAZ2J+e19+PCM8dF5VJV5iLzd6JXhlZzBvIiIqdmMueUIoelRHU3UhJjZUeVJvO354VWFmPSQvZjlofHVCfitOaDM3fnNdOTZVby9rdEdSQ1VWVHlHJDZFMiYjP2d7KDQxIW8ydkZ0Milb''@;'; put 'put ''cVI9Rz9Gak89bmVGTDY8azs7NlksJjVySiFqLFk+NFZxb3RrcigpXTQyTW5VLyQ/MCtjZj05RUB8QF9GOEJZe2FnUHcyKHhvaD8qOkxTNnZsPDRnU203fVgsRyhvdFpRfWNXbk9gTFZtKEIjPWI0Mmoib19WN3siI21oeHhmckpzZTQwdTdsVXpYdWdoIWdhajg6TXtiPy9CVkMpeD8mNUhGWUR0''@;'; put 'put ''ZjtMIkpRQ3dDJElKYlNBW3M3N14vKTd1WEdiakZRTl9qIlZXPHcydUFdW2FbPEJfKX4jMzI5MXt5MWsudD9UMSk+a0NhRiYiRCJTV2pMfFdIKWQ9InlRO1NUIThrLHIxWn5VeHFZa0B5P0opTm9fSWhQdWNqbnReaG1OSW9lOndfSE5leTI3PTFbSEF1ZGh+ZixwZDZAVkVmfUMjYClyOllfa0xR''@;'; put 'put ''RylHckYqNSlrcywvaiFHaGRpbEttQVtTaUQpXn43PD53QSM2KjcqJFUyX1NiTHhDRTE7PWM0QHQrLChQSzlDbCZFJjp7O1glfHBodEcrYH5AbDR9eD42ZTp6ZCQxQCZYKTkkLjpsJWZkcjomSCJ3QlRPXX5JI1hmQGYzZUFKR005YTpHcFU6e29QNX1kPFV8Pk9bek87cF9OVkV8U1IhRktaTmw+''@;'; put 'put ''Z3d1RX5+T0olKklaTFRnZmUlU3I/R1BMTzppZEpIY0YufVk4bVZiXUZrRzFGfXtwKyQkJFEyeCJPUm5PYT5jQXIwL1Vkc1d+IVAhY3FLaCprXn4ifmBZaGJQYiRNLlVnJFc3V0JkS0Q5bDhjMWc/biZ1YVM4e14uO3lwNyJOVXB1MF8sRkNrUXBrL2RVUiZjMUk7cm8lUC9tNT9aZ2NbV1k/Tkor''@;'; put 'put ''Q0U9bTZFdkdfV3VLNiwqJkE+bThFYURdaDVXJlEwVDBEZGRYfERuVXtUYXI9U3pualAvISJ1MVJZWzlGQXFgSUlaVik4VUNoTlhuRCtKbyw2eCZAUXFfSjg3JX4rTWp4Yl47VFJ6P2lRPChoWjZPI0MxPXZMaFowVVJ2TyJ2PFI2aFAjbmYkZypKMk83KS5acVc/ZGFLfld+OGxRVylrWk0/bGkw''@;'; put 'put ''ckdMQCEuZzQwaCZ3cSIqUkZtMEBdTG1pIkdUSDQwY1sqNUtQT2R1aFY5JUImcC8zSDN7eWJpYkpafFRXI1tpOCpHSmBTIXZOPG53XTg4OEBTRG85Zix1VWtDbT09aXptMWpKM1RueDcvL014cGhFY2RHISF4UHBWXWdKSlR1Jlt8aEI8JlEwRHxmbWo6KXdPIWBrQmFOOXc5Sz4reCF9eUVHKF5O''@;'; put 'put ''RChZQzx8RG19RkheKE1tMmQ/NzBCaksrTEJnT0pHMmshaTdePjRaWWAufHNgNSteP3FKJlY+U1I/TUlidU1EN3dWZ3oyKDpMKER3RVI1JH1va2NASTcjNE9jbmArX3FML1g6V1ZFK3h1NEhId1ReL01NL0JtIl5KUlFFdylCdkdKdkFKOClKPHl3d31yc1IqWXEsSXsoVWpEPDRBWEg3dmo/IX5n''@;'; put 'put ''QVlSVnFgSmlZSSZmR3hjVD1tWygrWlddNFFlUH1SKlcrcSNMXlhXXTJkZ3MydWM4WUE0c0lfMDwsKXlYVyFYMVRIeDFEMjRYPGNMWngkKT1qY24pPUhgdG1MLHF0fixTLzY5LjB0Wm06b0J7MW1YNj59ckF7OV89MSUzPlFsIzJpWVlEfiRFRHVoMXp2UFlPe3cpS0xQOjFEcypoUVFIWGRpODQv''@;'; put 'put ''TXV9I3tSJSgkdmttXThsLmIxYDAvb3dtLHE9fXkyMTh8JWU6R3I9dyk8KGVoSipvWXkzNzpdP2dQXjEuczY7QEk1OE48cT9CYmtVOk1wTFdMKTpvRlJfSWhqKTAvWWRVbTVJOGJEbnhKLCI1N1F+b0JrfGJwbnlSREE6eW9gcWtVandnO2c0XT9KLkI5RjtlPyZAcSIzXT58WEtocHNVKiYzbGR0''@;'; put 'put ''XSUuVCsyNjEjPVBEUUhhIVZCfSlQP1J9LnFnb2prS2Y9Pkh6U2NOe2Vwd15ncFlbPV8haCo3N0BhdF0mYCk3P3VBI3IxVTI0ZzNATWdGOmwuYixiNHcmZUBGVSw2U1VdeCE/IU9Gb252YlEkTT54MCprVHVRMUNHPmFdZVk+M1d0UiV3PFAzOWx+PSg1LyUrPUQhIyF9WilKX0lxOVAuV0hUUDJk''@;'; put 'put ''RnoxcS82XWVANXoqNnVKQFpzZTFzSlR8VXFJMzpiX080eyk6LiQsJmZmL0RrQ2NHcTNseWI+Mmx2WDFiZDF5SDpsUWQiOUIsQTw8WCJHeiFke1ROdXdgM3o5Yj9bTSkyNFZtbUx7dFFmU2xzc05TRU1NdXJIKDc7eXZgWXxNaXZCdE9xUyhHT21rMk9zdWVBRzFrRVFAenB4JDJ6VTVLQUNgTl0+''@;'; put 'put ''TCFDWmdnRVpna0kiTWJ3bzx+d0BMXjR1Sj59U0VZY3o9Skx9OFFFWWNueHF4KitwVmI0Rjwie3JrWkNvfXghTUJyMzxQKnhMemdSLiZxfCVCPjIqYnUmKFNbYnpUJGV1cnpwbFZuQ3B1azt3UiMlbCEySj4xIXArenBZK1NeOkw5azFGXyU+eXJWaHRwZE0wXXBIPn1UcnIsfShISncjZnxGXUgv''@;'; put 'put ''PyFkbk1Ud2RlTUkkZ3FrdlpNfjpGRyxaIURbS01kM1pqRDw2fWhMX3UkTmd9dnBMQXdbU1F2JCxUbkMhaFhhIUw2Kl9zOiQzc3FSNDZvdGpBMTRiRSEpVnczTSUyNT9pP3FhRXRxfSR5OD1xKGokcSRjdHpWOjBjJmVNMWFqYUVqLm9EMyskN3tJUjBzWSUwQ05EKGhbfFgkLD0jSkhIdUdha0BT''@;'; put 'put ''NVlPbHNnfEowVChkQ213aUB+NUBNLyYqJkB4Q05kVS5jOn1xTVo1YTZOcDZXNDswVEk3aWJYWyYucVJtcTY0SHpDdn00fWJXTzI6IjleNT4qUC5Cdix3ZypPYm9NQ3FSdWkrLGwqWkZ6S0hkRnVSd3V9Z0dHRW5RY000b19PWEM+KE95UVJkaGwkTit+U1Z7W1VsL3QsWmJWSXRsP0ZHTkhwSzhA''@;'; put 'put ''aHYkV1hPc3VAJClCa1hdNElYU0AjcnhXMC8xfSp0c1U/bXlTOz1GWXBKaU1qOHB1Vik/KiVjaCpIUE9wbWl9a0pbMjkyPSJJIncqKWU2ZjsoakxhdGsxVWZ3PTFUOzhQJkhiJkFfPmM+Q05oM2tSNStrIz9QOlkuL0VDYHtsVyFOWUFbPGpSd2l0JWlvanFtamI9TDxnT1BmM29lVGVub2IjSjA3''@;'; put 'put ''USQ5OnsvYnB7bHY4XSlxKnhaLyl+dF5iaD9peE10K3ttcy85JiNGQio9W3dUbHxrWGVJaHpHV193bjAmIn19Vi8mPWVPTzgwTkA/OTEzKz5vQChOSDVec3pJWXZGRE9+d0hDYXFJfCl2LG5QSF1GQTNHZzJHV0pvfF9dZVlOSzQrT1ooZFhWUXk1X3h6JUlZJEB4NCtCZnJrOHRuKyQ9QV5OTH1e''@;'; put 'put ''ZHc4KUR4W1lPPnBKTGUzPUAmO0hfOkRPXUwuaUReUDEieyU7bW0lcSZTREZfaExgZUlFVHp1THRlITEmVkZuYnhnWHhWczkrY0omPnRBXUZLIyksMWlKbkJValR8UXokaiY0RypxMzBYIVpReldmRnpyMXQ8RmhYNEV1KW9aPzBwME9LR3pAUFtJQzwqNGJeVUYqZ0ZeRXR9e2VNOEAsVXArLFFu''@;'; put 'put ''WXgrTHdIJks+JWpkNCJnblZoPHQzN299dCIlJW1KKXVVfWptNVY4RW5KKWVVWmY9QCoraWsuVU9LJChDYEN5QUVqdzdwazhYWkQpeCx7IXB7c1tVfXl9WyN6cVhNbll4SyNgQ3xLTkk/RWlCXmE5YCM+U2lKandpQypWZz8hLktjNmFYLEcoTj0ySCI9MFdEMUlUXlVRZChZUT4qai9OU2swNkFK''@;'; put 'put ''UzE+cWAhTmY+ZnVJdFk1IUJjL1Ila10hNlFpYFI7Sl4wXUBpOF85azJPcU1uczk7UDN1O3FmcCZgTD9ZY1s8aV56dVdJV15VY1tIYV04I3E9MFV4MTNebVp2XzNte19Vcls6N3tkQjNseTVjVVY9ME5gOVBOMm0mKlpbQE9iN3hbWz4pLEpeTjVKVD1yK2c5ejhVelUsMmdqZG87SHEkRDhicyQ/''@;'; put 'put ''fWdDM3RzVX05VHMuJWU7QSx1eyk3NzVzUEApdDh2Iyt3dHVeNX41YW9JfHVbWlI+cVs2VDdtQV01aEw2b1F4cUVWXlRbazZtSU9SZnFjKCFvI0t7MSlkTDxde3Q7e21sI3s1ditfR2VAQzdwenBXL3csQCZUPXF2eS5xOSokdlAwQiZBME1AWm91aCwldTJCPWlLcFF+an1mIl5IJi5ZI0hINmlX''@;'; put 'put ''e200aF1WLCVSaFIoQD9dIXVGSGU9Z0xObntFIyt3UWxJcFpBWD1dZTo7SiNve0YvRlU3aUguem1+dnxRRU5yTlldM2RTYENPPmd7Vk9RL3heZFFtRW5ULloyQGdnT3hTe2N2OS9iVn07S1pKP1JyPDJFdC9sNTl6N2coakojQ14lRm06QWJqX0BHOz1QQ31wKT1ZfXMkX0lzNikmZCx1UGpHdyUw''@;'; put 'put ''OkI+XXVOdWZ5fmBdM2cjeT13PHQpMTNKczJwVzdhYjZPZ3ZCcixHbTk9PEg7XUkhTGpoKzRXLFprJm50P05JbmJSVjRjO2ddZ2dPX3BlayZdP1YqMFcvc3czJjpAIktCTzBkL31ySjgxJm5ONkQ5aEMoMmpgREI/RUZZLG0oK08zakBLaSJCQEQoRj1MUERaOz1YZE9kOiprYFVZYFA2QWN9JS9t''@;'; put 'put ''JW9uezpaeStoX0UmRE8hVykqLlRSQyhqXjMlIilyM0hOWGN1c0g3WDBtSHswRTouRSlMOVFeVSF8RHheKlI7N11OQHRzfDEzbU9rJH5UPzhRJlU4aFFKNUtvI0VZaSpULG0mL2lUa0VLOXk4VThTTnQpcT1xU0JON1d+SW81bm5fSzV2UUcyKFFqc0VDQjNfZVMwSGZ2b0xWQGpKbilZWCttfl8k''@;'; put 'put ''ZnFabmV2Y0w7REgsU1s1XlkpeGpKeFhANlFUNEVvayIrdl97OXh4KDtgbmVzYFI/QiorbXV1QFZKKCp7eTh5e1I0RW50ZHxQMihEUU0reUEwUjpPR0p2OFcvfWR2cXxQL1FJazUjIVo5OmY9QmkqTTNtUixEPjFlPClqOnVSUm9ufE9iKkw8MXw1RTxfLzsxSnlPTWBvSjU/MzpWSk1CJCErV1dq''@;'; put 'put ''aFNrSypGYGJySD10NkF7OW9JX3UsV31RTikhUnNJYV8yTmZML3g+RUh2UnpKaXpufkxMMFdbJnV1R2NPZ1s2az9XXSYvT1E8Xlh9QER0UF5YMU46MmQwfFNSYDY/K21oNztPP3xYekdpY350ZD9UcihEUU03QEZ2RDcmJF1ka3NjKV5DUGlYeVB+VHFrc0V4eEpfbURSTWBAeG5EPnA6YWg8QGdw''@;'; put 'put ''MGF2R3praE0qQDNEaVdGYmdeSFFtRUU/VF1ZK2tSWWlPSng9TiY1YmZvIy48dnp2M1p2MFg0K1NfMTF3aEIzUV5sdmF0dlk1LCZ8fkVoWEpwYkl4Y3kkUF5UPW5eczdCVDpEX2coM2R2JkReTnxuNSkib1pWJkYoIk84Vil+aCVrMFNeKFQkIzpGQ1N1Y3c9eVpJPWRRTiIhfSUmI2x5PjY6KnF4''@;'; put 'put ''eFtKajNReDZVck8yL31gZm81eyVMYEJtXUNaWU97JElGY3sjUEVNa2NmIit0Yys2V2tsaFdPOml5dnZANUM/P3taVj5rY3BVXURvKUJSPDdkSnZEez5Sakk9b1h5Kz4kdUByQnpMfkM1dDdvR1FPTTtAPkxxQ18jLzNYP3FHWD87dV1uT299VXc7Pn0pVUZPVCFGIVErOnVPeiFOKmI3VUhTIjks''@;'; put 'put ''VzFOW2duc1s9T3c3M3BTQ0s+KS5damJIQjddXlsiSS5XcytqcVNKQkZdRjo3KjBZQFVKQkZUeSpUTG9JR3x2OzFsXmxqSiQuIXB1dXQ6Rk1hXUM0THl1fGJZeGk5dG54Z2Q0KzZfSzhvdFREQ0RmaDExbGlZcUNmWUV3Qnp7RWtlNUB1LndPVU1RdSZUQl0seUVYXUNXW1liU2VDY288fjVLWD5h''@;'; put 'put ''SlBtZGkpWUkuVWI/cit3Nkw/cXVvK0xvZD5sViw0fjs2Xzc7ZXxHeFhRZ09TbXhvWjlnZChqIm00MztrVWY3L0ArTih0cEJ0aXB1T1d1KDsiOyk+d0pgXlZsQl1oUU95SE8hdytVRFB5dyYodHUyQ0lMSTdiVnpLeGM+TW0wWER4Vz50Ml0uRTdTYWxXVzIuUUQhTDNJdD9wNHFrUDdWYytCc0Rj''@;'; put 'put ''dSQ/ZCJ5ckApYFc5TEdWaTlVMzB1Q2pTcU1ZI2s1cm91UipXRkZPIkJYRGdYd3pXM35sWk4/eSkiW0I2UHt1U0w6XkRuQ2srfWRmaEhFPjF9IV1DWFIqKW5CbypmSElyQygrOHQ2XyxHWX41QTtBbWchI0pPVUJCPChDRjA8cTMmRCleP2NFMTlKbjNwPTRpKilMamJsaUM+MyNTKjldM3MoRlcp''@;'; put 'put ''KF0lWEtdKVVUTHQiY0pBITM9dnlgXWsvQCtYV1cjWXdZT3NWUHlZT3d6M1MqM2VraypJZHhjRE5ob0lhTVl+QDwsUTpzbGkwMWhJQktgZmZXOTJpPUlTRVFIPEZHYFU7Tl4pMUY8OT44XzYockBwOmBNWU18Vjs/RjcjIUVjcVM4WFk7QT5yOjJPQF5CYT5jXnQsb3JQMDNlJHZzOVBMaU1zfiVr''@;'; put 'put ''YW8mQ2h7VmhmfiVbcjZ5ZTNESiQ/NTQ4PkQlTn1uMlUhSGA0U1VRSnVzdFJRUnhfSTdldEYlX2c6TW1ldkZFWU1vbEVVN3JeRm1EOkw+d1FDZ2JZMDJWVHg+NlohbG5sTCkuc0JAe1BffntkJnooNG99KHdSK3VwRzMqbiwwOSZrUSZjTDVmVnNOZGc6a0JBTXtHVjVvPShaR0c4cX0yKnN2VlFm''@;'; put 'put ''ekFnOmNgLEkmYVY1Q0EkJE5WTU1jb0ohQkszRjBucEx7ImljbU95QFB5PnspbUROR14zMDNAJDlKby45LD96eEhPMmNYR0ohbGU8c3V1OTNqPUtMQT8vUFBXUnQ9VyVHOyxJImcre0daKVZZVGRhUzdCVnpRYyt1REdpNCRAWEZGTXw2c0g2QjRQPnBJJCx0czRhQUhDS1hRZllPRiolTS5iLGZ+''@;'; put 'put ''T2F3NF9lI0JRVkZaWDVIa1pXUmwzfHopWjNdNXF6TnBxdEJBRH1PR1hCNlpaP3o0NDJre0JHWUdPe0Vya0k8P3tyWm9POWVSSiVOdlAiKGMvTGg4dV1MLk5GNUdhUFYqLHRKNUFaRyRnVl1Qa0xIZD8yWCY1dkN7dXpATEpwdj1kaUdUSz1sX1oudXxEJk5FSGheR2x7Rj9wVHRzaTN1aEZgb2xY''@;'; put 'put ''Q01lc09jbnpyRHEqa3RjdUA2dEFpUUg2XTZgMHlNbW94YGZ8PltKTkFNUi8xL315MWh1YTR0SnwreWtBai5SRWUyU3RTNjdvOGM3Li5NKHh7I0JPJTV5TFlvWihVQjNiXiJIJjR4d3t1OSs1LkkyWGJ8Y0hEdT5GdHZmJCFXfV94R0hUdnY9ZGFHYUdQL2UzYXUxW1lfQjFCX0RCPS8wTXI3ME1l''@;'; put 'put ''aXFMIkNvREZzLFdqPGxNXjZnKWREMm1hM3VwPmpgQ1VAYVIqRlBSMig+QyRNKXs+ayRmUXkwPz5rMUBQNmdmdV4pKzxGPSRFZi48a0Q9dklORXFdYEk5eDlpYi40L0c5RjpBRE8/MGQ2VVhJPE9sVVh3SUQwSmhUWFtDcmtjTWc4Nk9kcHg/aHRgcDk+bDpFZztvYF9xUS5nOlpwR0J2OUJ7WHpu''@;'; put 'put ''Z1hwX3hHL05fZ3h7aF5TIX5HIUxxZC5iRVguI1hSIyp3T2JreDBvanJzP25efmZyRTwmKlVmZXVrIWJ2MXVheF41bHFLMkBnM2Q9NiFkMyRoVjEye3UiYXMpNHBIMTlZLyglaU5lbVIoK0AvdlBVTDhydmY/MSNdcmtkejV4TFZKWmZPKnVTekI+ZHdHOUA6T0N0O3I+d2pzeFdWIkdzWXlFI0Nu''@;'; put 'put ''PDYvbnlpRjt7NDxtRihGRH42WU1lImZGLG0jPjRbR05pR095cSVJSChudlVYcWVDR09RRmVgdislIyNVZm9lcilBTyFDVFNlMEM9PUsoTF0yM3REY3NkfFtqaEpWNClmd31hRiFveVJVclAlaDlEK1FyYjtvKUxKNStOd3FDKWFqOC5jRWw6QnxCJnM2az8yYFZddDlYSHZaNDlNV0NeISpeekJr''@;'; put 'put ''bjUsJWBTaGV4ZS45P1NRcngpfV08Rno5aUs4aW9AZzA3XzVsdCkkZEgocEo7WWBAenx1Rk9EKE5UalVvcHgiVjpzJGNgME4qcz8yTVRSInZ2SkZLJjM5PT89fDVCOEw6SFgoITRMfFgpaklzREtodXVxKktLTE1kOnhIQ1M1PFJ4SVZIczFdI1tpQ2FdeWFpeWlfRXNbdE9QP0ZucnNIMUt1JClY''@;'; put 'put ''TnpnfW0pUkVkMlF8XXlwKWxPMSoyYVF7fGRyVz47ZFIlJVtTTWhAIU56MCQleGUuXSU9OGJpfFdRO29WbVdifjAwbCxzQ3YkQWhHb2tSX3xldE51TTtvJktkLEEsYWcsTi5hMVF+JWMxPj1kVVlxbFB+e3JQdE51TXkzWHFBOmRVdE95cGJpPVttRnJ1N2F7WldqRCR2dzpsSnMsPSV4UU9va2RP''@;'; put 'put ''eDEoMyNKbXJzUUwlaVVOWDxbbWQ/M35bWndyVSM7e2E1XitdcjVWSzJhQFpDYkBMLC9nUGF4NkRlNSgrZ2tDWGUqUGFqSXdhQDswLmJhcWg7X1NvXnsuKCg8WldXfC9gUG5CIUxSZXE7aGYvaHVMV3BWPXFqYFRCS01aQ3FHe0UsX1IpKSl8YklHal47JTw7PkNCMiJaNHEpVSx4YGY6Wl1DPFBA''@;'; put 'put ''SWNmaGYiIiEue2t2e0pOV0pZfEdLVDkvL1JaXkM1ND9DXz9waHUyZTheO2Bpe2lMelRma1lQKmZrZDA6OyVwe2Z+dWNdTSw9Z2wkdlR3ZztaXi9FOE9CRjVSSm5xc0hpNGwpSyJuJnxObTVmNVMxYm5rI35HT10/Wm5aOEA/Wm5aSk4zOnNpWlg9QCp5JWNjTzZLbylFMT9XeWFeeVVAP1lyNmdM''@;'; put 'put ''TWAlPjosQUJsK3B5cyw1JXliLnJqMEdheCwraCZuWXZRdWRAUjV3LDhvOFVOWDcoT0xSdig7aXM5JS9oMFhxJm5fODJdelswdVohfD9QLlUrRmV1MHFOW0lDeSNJTTliQz5mVTk7RFtYJTUyfmc0TjkwfVNxeCs6Q2RNYUIpJFdQVS9MYCYhcSNnWVZ+VC5ML21uUitqKHA4IVZAQV4hTzUlU2ZZ''@;'; put 'put ''YGdmdXhfKVdJTlh1SyJxYHt5dUo+KSwxPyQ+dD4wZCVebXEsMHZRaFtKaF84MF9tOD5GKGZ6IShMSTxyezpZITVVLCooV2c3IzAwYFV+NzYrNi52aURwakJ2TU9mR15VaWQuY01eYiFXOFhYaXhjVkdtc2lyKWF+LlN2Y31Yb3s5U1VKLCpuRGQ9UkJJT0dTTndZanFqS2BvMUBzJWwhbCFgTGY2''@;'; put 'put ''PDVWSHEvOHdAYms2Y2MoNSxKVn0xKiRJMERFblBLTDl3SmI+SkQ+ZlRmIztDWj9tVT4xJiNBdyFTTE5OKXtQXz1rSkMpJmphLzZESjBfSWZISjpaMnFabHpvZHhuVzwuWmVQIz5LNn4yfH0zXmF6UnEsJWo/ITk5RlU/ZktfZ1loUkZUdlB+PHMlPDttcm1aK29VYSFyPmAwUHAoOlNhcV44RmE3''@;'; put 'put ''c2V+aX5vP0twXjVpUW9bYDA6V1V4O0RYUDx7RDk7ayhKOyxWVHk2OHg3L0NYKExgI01kX2RINilFWk0+cS5YPV9rU0Y+KEZ5W1B5N3BuYEd5ejssZStxcW5hM1ZXdk1sKEBfbTQsYWBYIWpUaGEwdiZ6P1N5JWhUeGB3Ni4lRytWTUo0PzwoK108U0VDYTtxJTppej9YKS8vTiV+LFJKWD88cHsh''@;'; put 'put ''VTRXbHd6L2orRlpjTF81Vi91ZUc/OCshaTtwM0l3RTtsRk4xKiFqUjFvJmdmdTNIMCw9ZlskQXF2LEhndWZ+SWUqXkhGXlh7fClfPDMmMz4wOztsdyozdm1gbGpuNUpufWYqeElWcHBrbDUlQlFdTVlWU3NbRS9FR2N1NEYzZC9MeUJzaXldVFlfdjssZnZrbzkzLiklPU5ycG1wV3tpbFNHbTF1''@;'; put 'put ''Ok11Rzk3Z181TjlqWG1RYVt8I3YpdU1ETHtgKDElMDlYLzdLWyxbYWBgJCZfMT85OVcldUpXKW16c3FrYStdMnMuYkhTU3liQ2ZofCRPU0NWU1t4eGNgR3FPMzw2VmZ+SntgXVArVTxZbSUjO2ltZTRHWTBmNl9yZz8kL1ksNHd0XnoicXxDfVpYbm5CezhjI04/OT0yJjtVMXlZPmFwekJVXStq''@;'; put 'put ''QFJyRF9dLywlTkdDQ1g2Nl0oXkMwdDRddDlCdXIyTjZfVm05LHFyNTVHKDZsYC9XUkYkJUNDdjg1Yk1hdU9GTUpjU156cGk5X1BxZip4UX19bWJvXk9yMjBRd3RiQFUmOSwveCZvIzpgU0paL2JAYlNEbiVqYVRnK2ksaVA4LldNWT5NX0J6a1FyaXF5cjhJVl48U31qTFJSTWZeXnFHKiojLyY8''@;'; put 'put ''aEFnYkVgPENLUSZWZzdQKGVwLGV4QGNkWnYqIlFVVXYzOEcsUkAhdyRlcnIkNXZLL35mIm5RZlZQTDEqNiIyVW48VDA3dU5iflB4aFE7JT4xaDdidyEuN0JDbDR6Q3wzYVI7JiYsNCokN3tYIXxjcFkiKThmeGtuKXlhQmMpQ19ecztwYjwpM2ZFI3FCOypNSjpiSDFfcENmOSted09ASGklPitf''@;'; put 'put ''VF84TnJHTUpzTlhdM1k+SzgsLio/Wl5gIkJSZmooezlkeDspNl9UJm09TDR8fXpqOy5xTzxLfH15aUFdd34+JlZXMWNBXU9YaFZfQz1WIn5rd2BpPihFeGtHYHttSzVvb2l3K3RWcnl0dVUpb19WNVN8bi95VWhpRSRGUkZSRlJVNVliRlJGTXghVDcqOTAkWkB3LnZHIUwoeU1wPmlpaXx9TSl0''@;'; put 'put ''RDp0RDc7SWNGd1tBRnZrIyVjTkQvZTYlKH1dN28vZiVQekl0RDp0RDc7SW1Ic1tDZmN9K3J3QDlzLl9HNFl6UEwkciQ3fEQpUSJHM0JGYzhSZ1NFNHVqR1dIJipDYX0vVj5qNktqdlI1OkAjOCQwMk9uVSszeXBxVihEKE5BJFZ9ZX50UWdRV35DY0NbSWUlQ1hFXkshUXdpVExSMHpfbDUxVnxR''@;'; put 'put ''WjYoUmVVZXBxb1cmWUpuYXFUKUdgfS92Zm9Mc2FxNU9AYGoxRW1DbEs6SiwzW2ArTUlZdD53Oi9dVWNbOT0ieC4hSDZZMEU6NipjdX48SDomSmVVZnw8XTZ4RUM1NHYsWCpuY2hJcDNDdTt7X2FDLEI8djZFfXVAeXIoOXZAZ3A/XnNdc1tmMyFZS0s6V2xaXnFGIXU1eXJXYngwSj1tcDk+Mi55''@;'; put 'put ''KlBZW2tMOFtDcWxbQ0RfJilmRilQR2dENjZvPiRSWl83e201Sk58UTNiQDM+KHpyZz0/Zl1ULCs6RWF2TzlxKE50RC5OPTplVVtnYW9kWE58az4xJmYmTH54SmlyeTk2c3M7TjZmWWoqRXtbYkxJeTl7dWdWel9Fc201Z0t0M1g5e1tYeS9CLFZkMlhUaC9nYlh3YWdXUXksUz4jaHtxUj40UCxb''@;'; put 'put ''UXwrdHpTVVlIXjRPMmhlV3VkcmR1dStgN2RRNk5kLHdjJXlTcmR7MTs6NTcxdC9GVlhdQ01kLiZNfGpoLyY7NUlkUihMcV4mdzlQX25pKnYwelpOTXxoW1Uxd1FtUms0TTRPU1hFKUBDc0RaaGA8fXdNflBSXWY5eVBEUCpwRz1LVCVjZ2ZQXzpRUlVMWFcwRXBoX04hPTo1N05laGJmJVs5QWR5''@;'; put 'put ''MEVbNWRpMEVbLGg/ZXdBYCZKTExdWTNtTjh3RmVySmIpZXg/eCx0STZ4WmNgRGRAT1p9NTlodyRqOi81NjVzeFpiYERkOlFOWUFqaXkhZElnMkpOJFFxdGoxSSo3NSxkcVoqZjxMOXo4fFssdXNHbTx8Wn5DI10lZ15rJDhBcHMlSmZkWE8pZEhdLHNLOGBQbWUlZlVjWzhne3BQTldjdzldUl1Z''@;'; put 'put ''ZH19S3c7WylEVlcjcDUjVylweWZaeWo7YWlOUjFgYUk5RmZMJWREZFU2aH1CWWwlNkUwd0tKLDBCak9VRl4sWitaeCEsIS9aNHFibEZ0KWY8U1QxY2cxNUlyKjBHIUBkZzVoN2gxZWlQOmgqaGpve28/OWJmbDEuM29oOntaTWlHckc5ejZVfTk5ZlA/TVskc1tpPjJyRX51M2shYEk2RDxDT3ZE''@;'; put 'put ''T2N0VSlyZlBSdCxsaj4jdkgsd3E5MFtdcSk8R2w+YjI2RE8ldT8vSFhUY3Q3UFdkaUNIO2JMakI6dnVYU2xNRnlIMWdPTU5rJm85U19ue1spcyFDX25RX2YpZS9ZTHExNkghR1lOVkQwRSRme0dZVj1ETUFEKC5feCZJU3NFcDc3JXcjMUU8YW9mJit4fHhrKCxZM0ZWXUhEb1pTMll6ST1rcDAz''@;'; put 'put ''Tm0iLC5bJTNmfE5OQz9kUTBpb2BDRnYwcntxXjxAW2heUTI5QzQsQzFwLDJYe2BJQGhDK2Q+VUk9WTZSOjF3bD8zITV1UHJ1dj4jaG5WV0tlSywsZjF2fEklQSNPWjt+clUrUUQpbStlPV9hbWlRbnIqWkhNWjpjNDxBZkVHL2VnaENAeikmXnkvRCs9Njc3ND5PczhSQFJ3P0UoViN+NVkwWnJW''@;'; put 'put ''Xj9WVXZSWU0kV3VdU0BqM1IvUyRWM3d3cXV8aFFydTN1JnFPcXNvKD52PDImSzRIenAwTWtSJj5zM29CIUpjcyQ+Z01bP11fU2JrMWxUZV18aUwoZSNMdXFDQlY4KnQ3JiRpalAybjYmN1UrXXxXKyMxQGtTfVolSUReQ1A0ejVvIVklSS84RCZdZmZMZGY0Z34sMGJbXStjQ2IkMDdxQ3dCTzFy''@;'; put 'put ''RTtBQEFTMVFINjBnZDBnVEJoemkoUCUhW2ZNeWNAWGdZZ2llPytlKGRwSlIyQjE8YERhRGJvbHE/ZSFqbXNkL2RVPzBaRVlCMWo8MHx2MnpebXY5TyldQyM2X0Qicig6QnVwISJSLk4xVlJ9fCMyZmdvblZwWTdEQSRTcSt1XnAzMTlrckp+Ojg1STJZRW4iIXIhVzReUi44NTwmO1YsRkZUKkdP''@;'; put 'put ''R1FjbiVlOXB1ZXh1JH0uQmx0PUouOHFUN1kifFB7LEB2TH5fLD0sYW9nMUc8NGlxSl1wQmlxSDgscjx0KXpYdXJ7Q3NkUzYmT1U4QTM5P3s8PV90KWUpWHk8Q2BeJHFKeiZjJHFrKlE7bGAleFIhO0xyeHNtJHE/KiQsN08oaT0/PVIwXSJabzpmMmdba28jUn06ZTZzcDsuWWhdbGsyc1JqIW0k''@;'; put 'put ''LHA7OzRNQiV7KWtEK2BhJWhVTnckZT97IjYlU1JhYiZQMWBtIzVRKCgvWXdgPzN7JnhJYUgzUFcmL1l3QDpsSlc1bXJwTTk6Z09OIW95K2d1QFhobiRAOj8rNildNFZzMFZ3JVZnTTE3NClFOUAzZ3glIis5cTs9ITdgSns3eSVkY3xeXV1VKDNoJHF2Ol5SY3FLbDd0clBbRkVzPj10PD9TWTF+''@;'; put 'put ''OnxXQiVwd1okWm9zMys5XU5BPkRZeVVecFpoLzklJWFpJGNYMy49T3pQRThVTk9XOnp6e1tFa35GZjNqKGU/MGF5Qj9FYnh+LzJ4XWFgI0k8VDJaVkAqInpyTDY/aD81RXsxOyhoUz9SNjdCXXtiMjQ9ZGVeMi9UeGM6dEpaZWd7YW8+TWJ9SH5Ccmk4ODFjYDhxWUoyQmA2NkVlO09hM1RwNUZW''@;'; put 'put ''T3YuKT5XTzAudX1jXWhSLGxvQSEuaGxvYUhVaj99SHoqJWMxYXBWXktSeTxOOFdHXWdbdTZqLlkzKzBUNTB3dzxPVyMvOldVTDZ8cXwlSTxHVTVtPWhUXz5IIWQiVUdYVDdkXktkO3tELG5TdT9UfVQlUFN4NWhAPCwlfWUmfDpueSx+YHNBQ3F+ME5LKXcvOnsvKlJzSWljfFNofSUvXlIxMWYw''@;'; put 'put ''Jmdrezk0U1s3TjN1YWw6aFNmLnx1cHVjLGxvRWksb0g+ZGA4JU0mXWAiPmh4PFtvaX5OeWA6NipzWj0uRXlwSlk2NjwqVTohZSgmIlVzPEg+Uihbbmc/THpEbWA6SH47K0dyT0BtSGU5LnszKjZEQ2VOdXRqUzVVOm1mdF40SFM4ZHdidS8wZndMaTc7IixzanBoMVgzK05Nfjp8VjYmUHZQemow''@;'; put 'put ''X0UkN0NFeStCY1QrIzp1WyM0TUUhOyhfNlFDZyQwPTlpI01YS2lfOjBMTSRfSkE+aGNFbjh0aTF+JVQxKzI+LDJoaFM7QDFUa28vT3ROLEZbUDpIeyRdcDpEYVY2bTw3cV49I0NiVDVkPjdlPXd2VFltMU9fXWpHRW5OOyJnfCREbiRxZGdGO2J1SmxIPkN1Lm5eaCQmWHN7X3YmSzhySntiLFI6''@;'; put 'put ''QExwZG5ENzM9R2A7PTZiIjZBaTg0UGU3RSVIO2UvQEUrWWpuOGshbSZSNjAkfTpIS1VwR1IhLE5SXV51Nipma3UmcGcmSzBtTlAxU1ZGY3J3O08zVEZsdUBORVJrN3EockFraFNgKS8xOTljXlVyM1VoZlpwayo8Rnw4Tn5BcUQ+e2BtYEZjcX5gS08zNHdWRjNzZzZHKEVKbWBbOjhATG9oJl19''@;'; put 'put ''U1A7WCF3JSZATGxXXUloZ3JkRTtOLl90WiVPTkZSYSVWYG1IR0lyUkB7IlhkYFsoVVRhbj8pcURPW302R1Q1eTw2L31XYTU/fjhJVWQ2Sk1dN3pQRi9yPTxeYSw7e2d1UW5RST9sbGFRYVRyZ0x7e0lVJT4xK0tkN3R6U3BOTyx5QmcraWM7Nm1ua016c306Q1k5OHNdZHY4ZTovOTVMOjp7ezZ3''@;'; put 'put ''VnxuUTw+Q1hFRXgyIllAVFdyTHM7Ill7N1UzQFsyQFAxeitIJTp3THo/Z0M7cClTTVpqZzElUldnX1pBXTNidUdTQzlGdlp1VHMsejNPU2BCUkhsNW5oYmsuS2smUEBrTkh+aFM3RTE7T2dWcFBFb3szeG5wVTc0U1l5cSR8IX5fXmhiOVdwdDpgOl1YbDpxV2IlTG0kQTFFd3lwdWVaV05SMFhz''@;'; put 'put ''PHRjQmJvXXpySTNxeTo1WEo0P3lvUms1NzBOKHciIj1wUUw4WH5xZEJeVj84KUk0aGNdUnp5fEVKcnkqXzc/a3dJMDQ+bT04Zzh6emNneipuZGIjdCN2Rm44NFY/cCkld2huUTxBK1NuUzsjUnxEVnVDbldeSHs1XkBnZ2skdSNEciVsZGhKOEhhbE1NMEhOdVY6Z3dQWSVRJDwoIVdIcE11Qmd7''@;'; put 'put ''PX43KVpEYjdod0dPdnk1NV5yXWhZbi9ROEJqKi5wQXE5THRfQUx0UC80MUVmV3Q+dXBAMER4MW4hMD9FR2E/ei8yLnkqfXpYNmo8XipGaTldO2pebkkjXl1oLnZodyVbPXtHV3JOX3ouRV0oU0EsRGQ/KEh4aVFURzxnaWtoJj00KHpDKUt8fU1QYkNRbV1ed0NGc3o4OU1OcC9DeVFIZUB2W2po''@;'; put 'put ''LnQ4KyxqXXQxfH5NI0g7emBNZFZ2ITVDaWljUmpVelNsVmo2OWhoaCQmKStlezc+eStdY3xVfjZoN0cofl5fdVIicWlpfCZuJWJyUjJhTGlDZTAxSHFoZSN2ZkBNP0UlSXk6YjY4Uj41VXxjd0lOPUw1dTFgIWEucndVPSZtSW15OTI8aF8rVm0mYmZWcXs/IT01XiQodSllPG0pTD95QGdTUDYu''@;'; put 'put ''W3FWaC9YKVpLdzdfdz0pZ0NEfk0xeVA2UW1gOlNpTmVwX18lZ21GZHs+SylqUX5dKnJ3MCNUJjgxP3dgcTZIO21OMzQ/OTlWVEloPUB5T1phMDlQUkFmQjwlanE1QkloLHJ+LkRnSTUzOlt4fTA6XmA0WTYkRTIuTSovTX40R2Qxejk8X208KnM+TmFrfV8zNXpZL3MsdkkwVz9nL10vcnRHIXdw''@;'; put 'put ''U3piYEZSN2A1bmt5c2hBNnw2bmksXXF1WUhaenhnd2pYPzA5dUc4TSxYaTdgQWB7UnJiVWBuWUcrdnFjU35JTDplVlpeelszK1dHez1pPHZpS0dARUg8V146cEo/Q0Bwd0k3KFcpRjlLXis9dCsrbm02VD4uQDk+RjJvT18/eHBWdWgvWzVjWT12eS9RbnRrI3ZaUDhJZkxmPFNySDU2RCNHVDl1''@;'; put 'put ''RF5ObzA7L21GJTRfbFc7QW5EZEVNb3xGdmtGfHpHNFd0eHRKXUJ2Nl1NOGYpYEouWWJwZ00qJmMhMTVCJHFDLEtJLit5UmxHWGtxVytTTHx9OSVONE17PkN6ck1zekw6bVJ3Yno2S3kpPUtgfilRNiNEaU9XK1dALD01Vlc4VDt+cSFyc20+eT9bW3VGcnU4SExzW1BuTFt0MEwlWyh3UW9TZHdJ''@;'; put 'put ''XmxNKiEpaTBATytkXmx3LjclIW9QcWlrL3ExOCtYS1dgPG9gWGxLKmpxPWZDYllUSGJ2X14oIm5tfX5CVj1DKHskMTxUPSszTXspQDc8cCVlbEU5X2A9VzA4VWRYTiNaPDlnW3BKSSxnVzM9bz5yI2FeWyNtWFdiRl0iQjwhMSxTXn1NVkNoTXIpUnYxKTNsNSkyPFUyXmcsfHVqeSw7X31hY318''@;'; put 'put ''MHtQU2YidXBnbiVvJENQKUt+XUhwRCYsaWJFQWVrUF9POllOSUE0WltbJHlpSVVOUVpdUyVqNEs+YlNLaGxyTSVdXkNGVHc3b2h8OWVMWFFZKS8lbzg3ZWtdOFozcnt7NkljdkV6PXgzSDE6cSRmbUltUGxgVDxzdCNzNyZoVHc6KmlIeCJ4fW9MbiU1SHtrOXsjXmExVHxRNDlVQ3R6KHdPJWlq''@;'; put 'put ''QTFGc3BFJllfTyIwUV4/Uk8/bkY3ajFSPF09MGJqZzFvZXw1NTRsPzsjOmk9PXo4M2JAUy4qRlp0UTosejIwcEEoMWBCcHB7InAmLz1peGIvak1hXU4mJV9xdzw6dThgXVYoQyZ8Kno0KTwlZT41JilKPj9oWTd+NyNZaFM/cXVCX0hWT2hdV3Y6NiRbP0NJaXh2Zz1xLzAjZmgjJEtleDxLR2xC''@;'; put 'put ''MlI8TVBMbj55Z31KRURrOzxYXS90d3cjKTxBbl9iY1NiVygweF9JdHgkKE06R1VWKD47KF1AZnwweXUmOEx6NmpgUmU4dm5QYHFyZ09OIU4rRmxIKVd9KEt+al9SLjdDL3AycTNLWHdAXzk3djsicit+UDlDYn1Vam87dSIkcG9fOkpdSTMqfk51aiFXJkZ4KDMqIlNeYnp7JVJfZlkyWSMzLCpp''@;'; put 'put ''VzBGe1lSLz1FZ2xhJFZdMHhzbDxkLi9FN254JkgyfV5oe1FlLFo7cER+O0gzJmtEUTh1OU5NM3VRbEJWe2xENU4+RH5VYz1sczF9dDZ0Q2BqcVMvRzFsJEgzMU9kcCFXUGQpVU01OCxDYHhGb24jImRfUCNNN0AjelJAOHRqKyNVMTYjN1U6QHs+KktoUTwmdEtORHtrbT5YJEFKbUpkaFlhKTN3''@;'; put 'put ''Y0JTLkthM2E7RCZiR1lqZUZSVXJQJSFESTF2ejFVWDhhVVYyWDVmQjNUdiY9bSY7VDMmR0cpR2M/RFYjKnUmPyg8PSI7QGx6bGJWKXVgW25jJG5Na2xqblRTK2RPNExOUUFzYUtLUShbXl4xWWMzfVRHKFpfKFR+ZElFYTdhPERHWHtGRXo1X2BIPGI5JEc1SCJoTiElZVMxIS5Jem8sVE57TUM9''@;'; put 'put ''UCMkeSZKPyJIJjQ1YjBUNUUqP1pGWCgwZCF2WWNwdnhIN2tCRGZafSgvKi41dSxRR2A8ZENxK2NhMHd1O3FaX0c8JT9KOD4jLEtnNHU/aiFoLG96QG5MLlU2NHFrM0VHZGIiREdgK1Z+OD5gKXslai5sWV8pZmIkTmczWWx5IUA3Oi5VRn04XSo5LCFLMCtpP1JiMVRjY09zWnYjaiZhZlNmRGRQ''@;'; put 'put ''aEImSVNiZ2MmS2wiPnl7L1lwLiVJfWZBU0tUdnV6IVdmODUmfHZyd2wiNT8hISQuJW4qKW5zNUEpQXFTIyo4VlEuOjhSOVFEQ1JjPFlWQ1tHY1JmPHF8QFc5cClhU050L3VnUHBlMT1TY0tifU0yN10raUNuOnc8QDBTWnZMMnkhX0lWXk8hO3c+KkU+R18lfF5RfDlGbmZXby5wRk1DZ2lBbUdo''@;'; put 'put ''P0QlNVNIU219byFjSWZjUm0oSGEzZ3sjOW1VKjZgXlNLZ3A1UGxwZVhuXllmJGhzYiR7Vkl1Y0dEWztGQUN1OXJgSUhseGpCTSwsd3M6OEY1W0w0JGdGbiY9Z3JrN1gyUHZgfD1IKTVFbm5AQ0xDfHVAMD8/aT4mPmdbJDIqInBvOz0xK11OelkoIyZxNjYsPmdOaHA5KGMvM1AhQn53IT1tS2Yy''@;'; put 'put ''Jl9QQVpEXmVbLmo/Wm5sbUdRY2NFR3pqS2t3ayxUeUl0SHl2fDs3NzM1eStXdk9INihqNU9zYkh2Mnp7enJ5bDEkaHk6NXQ9N3xFMDFvRzBfZVcmUVsxSXZgMFF6MUREZCg7RV4zK3B7e00kVStmT1tGKF8saSZKd0lNLkdLRD1AWFM6WVtAQEBtIk5KWHF6IjFEPHs/ITd2bDV2SDxQIyM4OHNT''@;'; put 'put ''OnczTn1hc2V+RDcpL3gsNURzUDUsITo/WkFUSWh7OT1qVz1fZkJid2loKjJPJWF0fixLVDxDKGouaVspNnVgZlgzRV5eLmRZTWZPUy9mVHpEZE1FbGluLz1GRH4pRiI8PE9IeGVnIllPKE1FRTBudig+aDhpUyU7UDNpZlM0LCM0TiRmcnlfd0dxKUtOX3FwRTs/K0RaYm5LaWJtc2ZeaHYjU043''@;'; put 'put ''Y3s6VF8rVmlJQUkvWVVybWwlWkosLkpmam9Ydlp4YUp+MEQoKCR2YHlgIWhtUT9EQiZhXmhLb3A1RGx7aF4hUj4kR0tMK3RTWyF1e100fixGYG09Vmg3LmRaPWB0Ti58SXsjO1VRSU1IIU1gY0RdQ1R5QXgxY244dFoxenB2OUhmL3JQYHhbKUw7cCVEe3dMbkdaVHd2VDR2OlNnUyR+di86NCVv''@;'; put 'put ''KmZMUytIe3xqSkQ5XXpxVXlQSW1GUFtIeDxrbFN6UyR8UltEPVNpXjp5S1koU19QViY1ImlHKHl8fGFZVkM2ci9YKmt9VGQhc3pwY0RfYU1hWz5sNXpHUjRLMCw0YjpAcyVwIXl0eHQqKzxZcz9dQ0xpdyVHZiZDMjwqbzVYSW1VNn5eZWlgQzZYUCUucGJgW0J1T0AiVileQ2NPPUQ2XiZ3Wy9+''@;'; put 'put ''bn5Mfks+RyUuVCt4Wy8yMmY3Lzw9YH0iJVpiVGg8R2dSKE9Cbz99NnQ5Z0JLeGF+STxuVkgqK3xeITIoLEFxSD4uRDIuIyx9KFI1VE9+P0gvbzU/MGQ6YXAjLl5DOWdEczs1bDVrKVA5Ylkwe250e3orfGpkLEw3dUVZWUZvVlA6fjgjd11UcywmT1s/ak9rWWAwVUh7MWN4cmV2ZVpsfjA8eUp8''@;'; put 'put ''az5Ic0N7MVk7Q0RRTTRBODJyfSNoOjsjMjhvRGlkfFZmXktNY2g7VTluQ2tXOWRWQFRiVXlZMj1MOW91KkAoXU1Udi57K2A2KT0vMmIjaC5rUk0+ZFUrcHtvbVVjW2k+InJzNTVvODBveyJqQSNKfmdNXnxie1NxPF0hPSo8YSx4ZnZ3cThmdVgxUF8pZjlyYipSR2VDbVZQcTs4R09ZQDBKc3c9''@;'; put 'put ''ZF11ZXBWaC9ac216c25MUDc5eVFeRXV5OWJgZzxIK0okTTReYm1RW24wLEdHYSkhbzxtJGM7PVNwJCVpYSpnTTxNKD1Je2B8ZXJFe0JCPzJNSyFaMSs9ImdySlgyWHc6ZXsvNnphTi9YQDcyenIsSzI6ZV9JMHZudE8hZWZ0VXJEPHVlamBkdlpgTSxNdlpXMyFxcXt5MlJXISV1ai5SWno5dF1x''@;'; put 'put ''KmtuTFVjKlg7a1RXdzs6dzEpeDk0VCFJP0tSQ24+OyN5LjNqMjlxZWU+PmVhOn1ifF5JQEohcD86UnU0QTViUztmNnxefXckRG5VJSw2UGV9Iys9eFBWUDs8dGd3JkJUKl5SRj99OikmYyJufXp+PHt1Oiw1OWRwIzovXmdPQF42cnBkPERDdl14SUIyUjNYXXkrdndMXnlYJEQoeU9dREhDOUx8''@;'; put 'put ''QHNCL0w4WygjLGZiL1RTayQ2WG5CVjdLN1FRPUJHdEhHTWBtTUs+Ii45Wj5fOGtGO0cqaixTJUxeIzFZYyFLPUM7NztvXjhYcGp1InJXMFM/QTQiIW5mdlBsSF5tb2xGOylsdUFpeVRmZGZZJXVjXWh+P2d8QmBmaCFNKEJrQVk8N0FBK0oqUkk+PlYmIipdPSttRzclbjk5WGdPOWk7WiEoVGRH''@;'; put 'put ''WCYiKjZUcHI4YSEqeXNqKm9yU0JgJU9RcjQlOzM5dig7PX59Jnw7NlshYDtHKDBJXkpMWHxYcCo8RWVnPGltVjVfYF9vS3tKVzd6VUd5QHAhLGlpcS44LExSfVRMdFFWdkdzYld7UldCazwidUx1Yl17STRpVUsmd11oNThQW10zNEtJLmw/SFZSZCFjZ0hCVTNQSHxLd0ZARXg4ODFHTDdjMkRf''@;'; put 'put ''JXgoZUR4TlVFLDtNcTMuZFVjW2lxZiZkQlFBV1QmcT4+OGJvRjlPQlMuJWtuWUJSaksrYlV9STh0WUFaS2E8M11qKEciUU1zQUFGUzQ+ZyxGaERnSF1daysrQCJBP09uJWEyVTw6e0B3IzJeQHI1byhAJDEmVExlQUFxOlFvP2JwfClxeE9BODhKei8jYy5lUyRYOD4vWXsqaUJeNXQ4YCZ7JTNm''@;'; put 'put ''UlY5MC5uO2BxIXhsPD1HZUxyRi9JR3drTmUsI0NZaTNjJWpXIkNnOFgyRkJ6S1MyXnFdQktCaFlbR2NSYjQ1cWVjU2MzNEpDWjRdZiFXeUh1bCk5dTFFMmhuPHNqfFI1MUpja15XaHFCP2czaG9JeCk6REtyaWU5QFZ6K0Q5UlpNRlh9TEcjQD88OWQ5SGFESEs1ajtPMCgqfXcwSTFnO35ocDJf''@;'; put 'put ''bUlISyQpajU/cUssLFhXRW5EcylUXm5BVXckPzxIbXc8ezZ7a2dvLDJ1JDwoNERVP3hdYj5kLn5dX0xnX0lmOTN5ZjYjVWYsdUVhWVhUd1NHKzFucTldbFR7VH1fQCEybyUyNFU0SDIkbmpKaismP09odiZVeT9UfS5LdE0lWFVCLmZ2IWc5OyNyU1I+O3wkXWQlMXdIfW1gVl55VFFmQTxfUjop''@;'; put 'put ''NStaRVd1bkBVV3U5d286XnVfQVZGUl89UCh0OHg5bmBUaHN7cyQ5VGNHbGQiSj46Tl5ldHdBJEZsbWJhTSFWWyM3cDt3bVkvcmNMUC5VNyZ1WFc7bUBwcEZRK3p4b18mY1tJfHh4Yl1oZj9lMGBMW0xbe2xiMiZpITBCMmhLTWFUbH4hN3BOU1BXdClbXk9nfHd0XzlIb3s9KG1RZEpMcmFoPDtZ''@;'; put 'put ''fGZza2JNIWZILD4yK2t8cHM2cnZCMUIlKC8iVXJjeColWEZHaWQ+dis8XW1rQElwMEs7S05NampJa3tLMD42Ijt1PTM0QG1rZn5ddSNXdD5Cb0E7PmMmdVFyTC5NM2BaTjBOQUV7VzQ0TUghVzRVMHZeQW51LE5UZVBTS2lzVWRRQDVKKiVXXXlUbDpdPi9tNXl9RVc8MTplS3xFSytCakAqe0ZV''@;'; put 'put ''dEQzTD80KTplLjRAfk5AWSt6fFJbYixeKkxGYUFbWURfKms8NStLYGJ0PGMqTnEvbCNlcX41XWpgMCFbQXNeemFvNWJdNDtrOzpBcC5RR3VfMER5OV86Jk44V1tzamxLcU9LUFRZNjh7XT1BKTlJQlZZMHgwZW5tWDkwZSgyJUs+ZH14Onp1fjUlQj5Cb3cqT0thSD5tKEZyeDVIQ2FRfi9VL0tq''@;'; put 'put ''PFJbakpRSE1uQmx4Wj1HVVVGeUhzXiF6ZTRUc3MrMTFQRGZCJmR7PmxXI1ouPShfXmlrblFXLFk8ITxMbFsrPFB8QCZwKjJwN0ZZe2tZMCJWJC8/XVdWOFlZPSlzIXRVO1RPYEl9emhiQEA1VE1uJi8wIl1na3AkOHF3RHdpR30jTm9vT0xhPFFqR1U7LFtXUVB4YkhdYGxQTl1zJnRqKiFqe0Vn''@;'; put 'put ''YS4/YngmdGpib1B+UFdCSU9XKT9dXWdQQXUpO0ImbCo2dkl5cStfQkJ7Z1VOYFpiP2cvfVBoQmpxVW1EbyxEbnFmLE5xaXJ4Oyo0QVFASm5XIUwqSyNLLkVxNDd5MjoqWXkuQzNMcCgvQGZhW2BKa3Fabz9hRCEyQ0R7Q1o8XVFGdDZ5cT1AITx5TjlQR102cERKOXI8PWgxKTJTJThIQDZgTEcy''@;'; put 'put ''am4iW09VaTdCeWUxTGx8bS55ZjBNcS90ODsuIjhCeT0yL110OFZxaE8xO0xJOkcyPkFVVXNEPCxKXmhJSFpMT3JzfDdFOTBfZE13dEM4Sn1MQks+Yj9dPF5kUXhuKXdMVUNjeGxgYjhfVUhdbHMyR0R7LmRRSHQ2XWRHT1A0SVUpL1QyVCI2OD1OaGAhN2dffTMyMkJjQC9xPW5FR1B6WVs6PElN''@;'; put 'put ''ITJEVUdAMzs/M0p+XkQkWnJzdmR1UGNle09FWU8iflZHcitpViU5KEtXKS56OzU4OD1KeiVVJTNFTVVuZXRBVH0lPUB3cSx5cUhZZG5ubUZ0O0EqbTZVSlExN2QjMllbTH5nWjApeGQoRCxuT0s+aHZxdEZSeWVEW1R9JjhZPDJERXo5L3FrN0J5WXJPUkUpLDhSPiZPMDgjWUF+eWMjWT5yJk0m''@;'; put 'put ''d0EzMV1gPXMpZyhhKSxYfFEwMXdQcUkidH5VbW9eUHgqSE03cls5Kl1wOHA+bzoyMFl5cGBWMUV+QC4ySUFycWQweVgxZGlKaXA6MU0vVDNCeDVee2dUW0RMQGM/Jl8jO2pmamRuaFRSVEg0Jm4wcj19PHtWYFhrN31xWlMjPkApV2RdNGc1Y2hvcEVrSHxrX0Yicj5HRSxifUwkJGtHOXsjRDg+''@;'; put 'put ''PWQhNkI8JnhsZzVvbFZKbGRgOyQ0KzVvNE01SX5XYCQ6VnFaTjlCJSZKJDdQelB3dENvaCRgUSk2O3FoW2NVbl5DR0k7XWpveUJVc29EM0Q2KVo2Z11gTnB9eSg3QGBEIzJCMmFGZEZ8JSxDSlB3Q0o0eyJGN3pRPHM4LDgvdXFYPSZeNzcmSWlXM2xeK2MyaiQqdnJFU3FUK1JtU1tfQHBGeSMx''@;'; put 'put ''VVFYUWsjOlkoWCQxVVQhODs8MmNuJHxtOnd1JXZxSF98ZFF0NHk/UkU3czRUQWB4SFRnPk0rRjhmUUlUIkA+V2UjTFI5ek1ocmMoWmtoXjpSRkokNysybkZgT291fFlLcCw+eSw4NzFVJHZVMWddTTRhTVlCYCoydys9eTgyZio7Rn48YiR2SThLcz0lV2djUnQ7SEhfQ2t+YTwqVjpnNTBvMmVY''@;'; put 'put ''X01tUnhdMUFycjkqUl5QYjdyezdCI24pN2dnIVREfHokfX0+flp+KlhGbnlKQWV2YmlqQUI9Wzx3VDlHSFUlKFl6IlM7bF8zMVAjSnJqJiZwT1EsNTtfOEk4NTJdNzxpZUF3XVIsNi8ibStTRGRzKz5YOjt7QyFJbnd3VDZfeWdwZDNOdWJPPm97fi56STpiKChwc3ZCKnY0N0lDRW49PTklPUUz''@;'; put 'put ''JktBNTVeQGFhc09ncm17ZnR8ZzhVNm56O2E/QEhbLHpqcng7KlMmRSwlZUBdJlk/KT1RMTttbnQ5ODVKXmhGb0YqSn5FKFcrPG9PLGkuKyRdRSVoLnc9YEYoKV5LZnJZOXV+b2NfIyksJCJrSmRBMDQ1ZytyWUJTQHVrXjwwYmAsR0NEaz0ueyVlQiIrPzhyJU5AfSNyP1Qlam5WczVjKEFzL3Vu''@;'; put 'put ''YDZvTy9GU3R8Xj9TI14+c3BkeTZVMUMqdl1yPk9lZ1ZiJT0/VVc/cE9PcX1+PXhgPlRAJEFBflV1aVRCUzorfSU/ZWVLcmh3K35STiVXZXFVdiQjYmpIPU06NVgyWCFyXSs8YkksKl1MaExwMzoqeiNKWiYhSns3ISNjSFR8RW19RVNPWXI0aVAqMmZzZWdxWUJFOWVWTVc9cmVZLlteaXhBYyVT''@;'; put 'put ''WD07ZGhmaVdXUyFrXiV4NzlqJlUyVVo8O2FDZ3hlPiEvMEw2V1tDVUIqSSFJNCZnNTFfJHkrTkQ5KF9tJl8qVDtqMks4a0JuOmZ0VWZxUklxNWg2VHA5MDVJbk8+c2tJYUduXTY+JnUvbXFiOWM5PlJKWUc7R2F4WU5rZyNQblZlU1RlUDxiWGVOUGhhOz1CUXxrcWJCZWYsMy8oelg2cjt8Qkcj''@;'; put 'put ''a114aVslbSRkZVY5bXA8RztUODBeeCJqZk9peHZLMWgkMnB7OSheeHV8Iyh1aStDJGIkSmBtKy86ez4rdlkwYi9lb2doXk17PFlnfkxDZFlJaHMzVC45M3QsYl9WZyJuLDY5cVJicXJONmxWInV2WWI+cmVaMCxxNlFmUFlgMnR1OVZzNyYvNzQqPURdfXp7Rzw8UTxlSltiJVolMVRsO21DRUg6''@;'; put 'put ''VE0yZVZCPmtVYURYZyg7OFM7WyY9K0c5JWNOa2cpI2RwNWFEZlUrQT5GZzklY05xa0dAbzNHcF4hL20iYDcmMl1KZXVrNHhDMGczaSNgKUgyWXoqX2VsVzRqcF9nOEclbzQhMH1kfGZEU2hPL3tpVF1HZFZ9RlswJmhTWiJrc3BZdjM8Rz54fW5VJTFPX2hgISt2QV8jfFpaIVZSaV9FTnZFKy83''@;'; put 'put ''W3UhKnZaSUwjIz5gfCpGfHhvXjZxREFoNkVHSVlVR3JOJnkhLE18Vnw0TilseG9qIzFCa3hhN2o8ZjFQSFM8bmMlai53SDt8PF5vV1d1SHVfKEJvPHNVRTE2NVFFSX5xKEZlKSM4Sz40ZS5ZPTcoeDxPdVh9SH1QWiU7Y2FaWUAmPzIpZlYqM0gxSiFAYVhHOjdiSmRvNEBWWFZKTVFMcilEWTht''@;'; put 'put ''Q1p4XU5BfUNeeWJ2I1FOKndzNyNKSjZpMn1zRmxeTiRlNiVyeiJLJXwxS0RnPCRZeXVxdiwyRitRb1ZDTUZXTWA8XWZzVCxVN3lVODdYLEJAKjQsNV4xOmdge24kcU5EfTVEdiQ0eWNkW2w5KS83ZjcxI35kbjdLLylyb0NReVtJR19vLn5CbENiW00peUNwL05ofG04dEJvSWRPcCQ5Rix3K3Ei''@;'; put 'put ''JVA1e1djZX04UT1QODFvLDk9fGF5bzUmRlhsUWs1VWFwMDlkUVg4bzNYUUU1X2ljMVlhOEQhRXl0WCtXOkdZRSE6QzJ8UHtkaDBkKWAlTzBAdTlZIzhbYmFsM3RFUFdUYTdkZ3xZYzhnLmhZUWZlTVZHVExWWyx9YER1Py9gMm9HQj8oW1hJLjlnL0N2bnNGLjcoKTdaNiFHKkMqPj4sSSFKVkVt''@;'; put 'put ''Z24wKU42fSJMRkdCUnZKSEs5fGRRRlJvZkFRYVJFc2R1UVVZWjUyQnV5c0V9PCNATGpwMzVvSEVdPGtTYFlvUEYqa0FBQUF3QUZBPldMQzlGKk1SZl5MV3A6JW40dihnWlBhRiR9T1NIVXd2Tz5pZ0VDdGxCQUFBQUFBQUF2KFpKdi5jMHN8QHBFRmI6OzlESlJDQnlNYzJTXUMha3wkW3J2TU4x''@;'; put 'put ''cTx5eXV+PiYkbHd6O1Y+ImYydUJqYDN1XlUrITJocUJTL2M+JTkhUkJ0aXBrdUYlQChiVk4vKzdSJDRBQlRtZ3JNTCU4eUxQWyhXWjRmWFBsP2RsNSZdWVtDO2EiW3tdSShZd1szajYocEhKNTwxWi9uSEd6LjE0UHp6IX09dzNVJmlhXjVFMDZPXUkrczgvaXU6TmghKjt4akN8XzgqUS4kV1Rp''@;'; put 'put ''JUtgUExrNG9KUyNfSC4mJmw/MiVuTlhSPWJPJGdJJCpKSCVWUl4xI2UkL1lNflI2dXNOUjBgMEZCTDlCV09PR09OSjJmW2I+VTMpTGtAI0wwbC53K1c5ez4yczxONHx6RyF0bnY+WDRVJGxIVDlIIWt6WkRKciw5bHRqKixxfi9pbSgvJVo1fEVmQmlwVm95JishLn5qL3AzV1RjUF8wWnJuP0ck''@;'; put 'put ''blZFPEhDdEJZNFZNQUlFPHp1aCxkfEd6L2MzWmQ6fitdZCg+cE5dKjtWKn19emZKNGY0Vm8rdXE+bH1xdjx8Nm5QUnZLaTMxJUs5WXovfndDeV57ITM/UWNbWm96TyIsMDA9VEViJUAqOF97Knp2a2lBRVRhXyhCQ2c3c3RyQEg5U011U3VOcXNvUXRRN3EuKHFCMGRbZWtrNHs7WSVLZ19ePTlt''@;'; put 'put ''TSFZMlNfYXcydy55OkV1WzNUX0dxakA6Z3dlSzhBQzpCb25oIlR8S253KF50Lyl7Vmc0Nyp7dTBXTUM3M34mYCVRejQ0aVAuIU8zTz4sS2Rmfj5QVmVNSld2eWpIOUAoMyVqaTdndH5saHAxXlFRTzo7Lldgbl5wMHVoODw4USp2Y3MoR3BOLjYvWHFtLmYqV1FVSX5lKn5oSVp3Zj82bDQ0N3Ay''@;'; put 'put ''TSshNzRgQnlXT1Q/VG0kLjp7VStzc3hYYEw+UUd3W2IsQl5fXlE9XXsvRksrVkt2KVA0JmxjKT4qOmJTJHdtX2NGVWwrdUx1MUN7bCwuRUhVRXZbW2wqUFBefFt+RFh9YCFkNSkya1tFZ282ZTBZVUNyLFJZeCNWXnBsK2NiR2tVaHElXlRqYFlIRF4uKC56OkgsPzZHWlJ4VGpDWUYsVEQrSnZD''@;'; put 'put ''NXZVZi5TVGRsOiY6dkJOOTdQX0x2UkNTXmhVa186JGpoc10ldEJMV294UWJQNE5aMDB0eDw4OD8sQFNHTXNpPnUlaVB2bCFEdFUhVGB2NHViPkMyayRUeDptZXBeNlUzYF5YOGFOUkZjflpzVl9XJX4/aEJBMU1LMEwqb29qNDFUbU5FbnE1NlNheE5RbE8zeytRPFldKE18Ujw+WTByYlhJV0dT''@;'; put 'put ''QT40RldYSitzbF1WVylEcmZ7Ryw6LGxZd1UxcUBbREdKZWdDRyt5dV9KcWRldCw/TyZAc3RSQ0ZTLHYod256ekRjNGFDd2RHSkxCIitWOF09V3ZHYll5aSswekFnUWlZX0hOekE3K0lHcVs2T1RQfEgrTmg+KDg5OjR+QXY3TE11JG5XfUZJTHwuWCF+enFiW2prS3lFQVc3W2FTaiZBSUUrUVI0''@;'; put 'put ''MSxIXzQ7KTxlMyxAQGI5aF97Ly5OWHRlPGRJZXVDPio8I2x+Q3toM20ob0VyQGdqWSpaVGRSNXdXNy5ZR00+I0RReGFePjloZjRCcX1ddi9hbkJxUC41WXFwR0dNLk57LmUzX11wSUlbP3htOy4majRRPz8pe2lbImQhUk1dcnhyZ1l4ajsrbHNmLzZ2O1A1TG1lazk9OX1SXWpiaFBJVzNjVnpT''@;'; put 'put ''Xyl4JmJSUDE5RTBRVXs3bW9Efn01TywmKlB9amg4L3EiUDQjaWNFR2k4LCNMW0c5WXhvfkBoI11SNjRibEpEZjZRISVwKCx8JSM5VH1CZ0JvLnteO1NhRnVqZyRraWJoMmtabkkxfSx6Vmk6WWkiZnI+UGpOOV4saiovOElnQ3Y/IWBsbSpvQjxtWU94IkVZNT9OdmlFb1RLalJ+LklPK3gmO0os''@;'; put 'put ''ejt6cWArTTsmeHZrVXlEdG91MThteD1kO2lzdDhhI1hdOXAvejo+QlpodjAvMkdnO1ZXS3lta3ZmeSxFLDk6Z019NXtxWkZdfigxRi4yQGpUS2JYYEI3fSg/dT5QIUZiYHA7fj9+aUR4JWMmOWZ0WH4wbkQ1eiteaEFLdlFCdnopUGA4SngjTjJzZl4xWEtgLk8pL2ZdQHUwZDd1PiZbMUNRZzJg''@;'; put 'put ''MV5vbGlZMlZLRHY3R0YqT0svSV8iWj86RUhEPz9qMFJTTm59JS95S01xZSNbNnwrJGMhcjg+bGt9cXFrQmomV1l2RWc8O3x2fVcuODVWRFhDOlpFWFRnY1h2IU0pO1syXlk9fV9bOTcuQFdPW0FAMHArUXowL1ZsJHI5QWRGJj40Z2U4b2ZRYilqSCJRPyQzSGhLOEIrWGx9KC87IUE6bmRVVWJn''@;'; put 'put ''KVpNLGRbazdHOCNoRCpWW1pSfjI7KiM/bCN0JV9Sc3MjcktGTlshbkcwKzJyP10iclM0Z2ZWXykmOEc3PTJmcy54eUVjbjBpMitUSUVpJEJ1M310dX1ZJlQ2bUh1UTR9bTlOJSpvYyJva1B3KFFXZTVOc00rbXQjcEg3YTkzZHJUOk1NdWpyQjleSmhkdzlKWEAsXig5QnAxLCldan54VGIqKGVi''@;'; put 'put ''az4uRHpKaXZjX25CTFNPKXk+KDZ4eG9zUVlYb1F9S08rQyR9KkgpZ0ZsKm46VH5YPGZyZD49KlpLNzBgbFQqYl82XmQ5WFNQYmApP3IsOzY4OCwwfTN4aV9Makc/YllxWFQ0REcvaHloeXwsIzN1OippLzwoe0VjJXN1bGshYmZENi8saVp+NDBaa0E3cTtYLnMsL3JaaVRLc3Z6VGMocl52PEZb''@;'; put 'put ''ITYlSChyd248ZkF9fXIqUkJ1OCZkQlhwX0NIQlFTfUF+b0ZUX15tdUBVaX5BV0h6c1NlfFE5W2hYZ1JBLEJvLDttbGJmPUt0KC5gOiRsTiFUQStdNGo0JGpdNk1VUCFzNk1dVlIuU048PF9+KE1GK2djbzEuQXp5cjk9ZWhiaHxhM189RnA/Skt+dyJkJSk8KmtpfWdQbGBeRUZSRUwmeTBePDh2''@;'; put 'put ''XkBmaW9FU2NSbXIzUyE3Qy9AUHVqemtOazt9XjgzY3c9L3d3dFBDYXFyVixJNV9FQiUpNFtwbDtqT09XbihseFo5W2xHUjI8c0ZmKlVeWkpuKjtFSF5acDNPImc0PFZ5fCYuL3csTl1uJXlASnxwIzsrMTdabEZvYDllOWBqOTg8PGRkJC8sMUJuRWxdV2BUSnhSRiZIJjdvPzdeTWw9SlI7YCUr''@;'; put 'put ''VDV9MSgoJEE7a35uPyhWblMwMHQmXyg4KExkQkEhQVRDXSVnQnwoTEp9b2MvZiE2cShxWnBFLk1hLmxITiR8ZypvUm8ra3RASXE8SE99JURHZzs1QUBCYGQ/WkIjImFpeyJ5NzxLN2JXdDFiTyJVQG5uUlBCNzRoakxmV1IiT3FmaEVxKSt3SSF3RDkpXUQhfjYrTnJ4KGMuTyFZRDYxXVFLbCMv''@;'; put 'put ''MT9mNDxKbkZRZ0JQUWIlSWM3RCMkLjZEclUvJEQoeCpELihXYCYweGhMZmRWPVdHfSheczcpWVlUay42dTYsfm8hYUBjMyVoKV81QEglSjBvZER6Ui5bakdUSyZkK3B+M0ReTGxqJC9dPDFGLGE5MU1aMFJseih9WStnM30xaGFjVmgsVWEqOy96fjBHb0FoLn5ocipye3tVLnJVUlJnZ0FNalVg''@;'; put 'put ''XSRYVWRrYzU9KzlQRWZpbkJle0leSlVfaWZmJmFPY0g8NS8kKk5xa0Y4RyNKd2NGTGkjK1V+XigxZF1OWzIjRW00U2tRPTBLXXkoOzYjPUhqfSVXazFRZl19IlhyW0lWIy54bmBlc2Jnay9CKktWTHczN3lDWC86ZGFMOD9AaW1PJVNVSl9yPFZiMk1gdDNVUVNCUTNwVHVLK0YuIWpfSyU0YzRy''@;'; put 'put ''SDh+Xl9QJiZFM0l1IUYzcyp9PUtoQGUsUWdOOFNOOlcsPl1WLE1IamAje2hzQG1ZOWtOMXRDdGBYWWFyK3VSd3ZfaDYwYW5ERl11aE0oZjFyY0tSMHY6fiN3ZkhmZGJ7aDJNP1M6KWx9eHZQRm1kSyZHJDorSGxZbVFlQlA2T0tiSzo+bmBHPVsoZl5fSEs/ZilseXFRbltOMGxmTCwjYjR1Oj13''@;'; put 'put ''Qyg3TEtiWFI1NVRnYUN1a1N0fXpfXnkwSlY8RSJsTEp8enImQylYWH5oeDVFXm1YQzxba0FnLHdlPFtLVHQ3biNoVTZiNC4wOE9oIk1dUV1gdzBiMFJtP1orV3xiRntSXj1oZSFOP19tSTlATS9DdlBOViVESUxKKiZeX31IRl5yNDFVfTBWPWhudXBUNGhaIXhyT0grcU4uJik0bFkrZ2lqdTNX''@;'; put 'put ''QmwpcVFMPj9QUW5+VntCNDpJLip6ak5IYCtkeGwseDEoVEd2WT4/JSZoLGlZRks+UCNnL1NLbigkZCQrNylyMjI4fCtLZS9FZlMyWSN+Ui8la3tbbnFmYyROXWdPY2w9V04uLF49Nj5KVTtjXX5EZSQ3ZTFBd2ciM2dFcC8pKjFmUXJAYWVOUl9+Kih4JHlsN3hzYHgpXXc3RCZlLkxlemEuTDxY''@;'; put 'put ''W0c1fkIlY1ZAMHddPiF9RzBtLz5dc1JofD40bXMpJmMlfk5hO2lSJjZYJld0U2cwbTd+JjIwSXdgL3BKRChRTEI6Mk5Ga254K1RXTkV3YkxdQ01sUztJVi86O3pMbihLJDp9KUVsPVdRTXJuNWpUVVtYWXkwdl1mKWlIJjw/JjtZQTZFdCxbJDldWCpCdSp6ZHZHT2l1JkB9YUBOSCp2Tn16ZUM0''@;'; put 'put ''bnI7KHB0WTp5QUExXWY0UUZuRWJsZEZ+cDtBSUR6eD1pcG5ZRTh7c3htfGlSRGlNZnBOallTZCxWKTxPfGhWJUcrYkA7USEwTytRTlFiPEtiTnk6KnxFOllAajkvSkB3VEVVaH1le3FlZEF1JSN8RUI9YEkoNG48QnI+T05DYWJYR2xdKkBbMm0sRWQ/dDFDfFVyYlBvcXQxZHtGe0Esc0NmQDNp''@;'; put 'put ''PikvMyFQZ2p3ZnBleywhfjJUXz1BfkJBVyVuVT59NWhodSM9Vj4pOnkuMWN2cUZUPEpGVHsycn1QZy5xQWJDNUtlTEY0ZzxuJTRDfWxxYTN3QyM8e216OUR7JFFHW29XRFpHUEZrZ1t8ckJdcXs9QF9qTWV1TTRfJTwqRlUifW1LTyR0T2cmNDtxYmFNd29EUXJiXz1tcGRHMC5ZQDdvbDI2e2FS''@;'; put 'put ''VmB+flQ4OFZyaCkzTjhfSmoycm1CYjBtXjFgLkRIfkpLdkRwaElAS2hXfXoiJVRtIklpQys1TCtseXN0SmgkSkxQNilwfDtSIXQob3o4OTsyTzRAZH1bfDFKa2l5Y1ozVTokSUhiRG0xNytUYWMlVUsmfFF2RHNpO2RsUzlJaDwheEh5PFV4MW5ZdVhrQkQhM05aXixbLEBUV3kjeFM8KzZ9aHBB''@;'; put 'put ''YmEjdVRlQzhMLjQhNiZyRjspeU9xPUJeQilXVyNvQGhTdEppKTxWSzJmRXZ0Snx5XywwYlFhcGtlQD08Yj84NCp5WGFla0laREUlXXpLNUBsZmhWV0o+NT17X3spcCheVXh3ZkR7LEJXQDYqU30qXjRKPkIqKy8+Nk9FKSFwJW5qclJoQmxEP3BXRERfbz54MlMsdzxjci94M3hTPi4kXUZFJjhf''@;'; put 'put ''JDZlK0N+QEssbVY1MHoiPUQ2WzNbP3ojcUZzbFd9NXN0Vyg8MW8qOHQldVdvWVV8Pi56NVheImQ+K3ptSFZnXkUwe2wvXSJtQzNacmEoPUkoKEpLKVpqO21dfmxBR2RVbzZsI2EpdzU+a1UkQnJvSEUjOCNTYCJ0LFY+Ij5EIWolUnlvZzQ6Ij4pa0BrZjtHc2RkTTk7fmNBO3ZaLzZMRVAyTlg5''@;'; put 'put ''RUpYTms3V1gsSjxrOjFURj1dWDYkN2xwQldLQFs+b0UjVVp8cU50KT03dipwd3ZpQU8iLDxCUVBqMnBNMDs8eGtqfklPMHhVZCZDdkZ9LkFQTWdBeDE8VWx7TTFYUFFVKUxSTz9FNmN4c256XnJFOSU/T0o8UmIicENmPEpZJCNSU2FNWGAuY1QwJiFFO3ZYYXQxJTR8KUw/fl4zdm9WbUR1Qmxn''@;'; put 'put ''VXh2RDJBKzhNOV57RGVLdzpxcjd6QzskbGg5Y35yM2E9cUsoIjJqY2oweXJ9M0dmblN+ZH1pZFpteyQqTWowdEojOVosd3JMUiZPXyJ4K1g3ajh3TUt4czVHSV1yW3xPNmF+Ki9IfE1VdlhrQGsza0klOmMyIT5DP0ByNEElLjVQXz83dXExREF0dnF6eFVleG5oNU87Si8rJE8pN35KL3EmXTwm''@;'; put 'put ''NTBeQWcwL3FmLjdPX2g0Tm8jfiM8SEsua3ZiYUwmSCkhdGs9JGFOMU8pd0VAWClPT2pwYjJTQFQ/aFQrbl1tVmc9MHpzfn5ie3doKnVDSjk9alBDXz00fV1OZ2Z6blFWMlFpYnZFJDJLTjlMRSRrWUl1dyI2RXd6cXk1Zkh9X0kqYlt2Kj0pJVY2SFpra35CJlduOSpLdm1IeCMhfU1mbyltRXVR''@;'; put 'put ''aUtOY14rc15pLHlMTTpyQ0FWcVNoaWNROyFxSThYcSteeEVEd1gxSWVtOn1QdU4sbyVfdzlMJmFUU2Z9YE44Z1UpQClrPEskO0c4QEZbMS5dSDBRQ0kqMHRyQFclM2orSnxkNjtaRyhJNl1weltofXE0VDFhLlRZKVJoOio3UmhGQ2RZLyloRWMrfSZvZngxSSN9UCJBfSsqNH1iWis5aCVIfSks''@;'; put 'put ''R0FzR0tkcWlgZVlvS0FVMiFhKiokVCJJc0BRSHFDQ3Elal4zJTg8QXFZK1FUPjZ+czR3TTphVWRSdX4zZTR3VUVHa0Isej86ZD5aVjAvLiVSREgmJXRvVS86bHl3VkAzb0NnaDhuMFN1YG1yYUJ4TVVCckpoQWciPXM2ZHdqdVoja1dbc2tFPG5qeSFae2VFYHJHIlE0fjFbKkZnNEs2cmRVY3Ux''@;'; put 'put ''NHZ4MmZIN3I2dSRTbFZ7RCt5I29+azFGflEmYnJNJWcyTyFkSTkvfT4vVG1uYD9NdFU0LktfP0U6USQwW2giOkpnU3o9T1MpI0U+d1cvb04hTX5+UT9RI1c0ZmA0PVdfK2daMD1JKm1HUDErdjtvRTpzVTE3W0NdRzhnPjdqbmNwOD4ibj5kUk9lKnd+RSpaZFN0YktlfV0hMVg0XzlQe15fKlFp''@;'; put 'put ''Z1RjX2sie359Yyt8Q15mMXZMPHxJd1kjTGxMLz9WKktpbHUjS1lKdjp2cCpDPTY5UWJaJk0kVVhYPixTXTUpcVp+RzV6WzRuWDtkZ30vOzYlbHkwTSxvSjBnWU57VW1XP1F7NTR9NCxbWz5mdyRHTUAxa1dMWFhhKzlmK3IhZzNMTzxUM0VtbGNHT1FsRkwjYkMvYU5FMyFLeGxpPmI7Vlk0Yk0u''@;'; put 'put ''aSg9SSU5SUFRLnZGcjBVfkg3VTxPIm59JSU/fk1IV31haylQKTdkIktfQUxLVHArMXxiJTwwdmVsPE0vZnkwLGVmM0BoTXhNNSMiS0RrM2g8TnI9U2BySz9PUlJdc19qUVVQQk0sLjE4JHFMfmA4VSpePmVIZFFlZEVkL0dLRjkkPTBoeHQ0Jm9zbEZfKT5PNlpFOXJuSFtXT3JGfjlwKVFxaVEh''@;'; put 'put ''fXU7T0xDdWYoY3psSFZ4X1lKPEZfblosRnRfZk9ZIiVJUWMzcDxPaCgjbl5QSEVIYX1eTjpAckRCMEROfVsqKn5eL3ZRUjdJeixaPzEpLjR7ZyVndU52T0lxa09YYzJEQmJCL0I5cTh5PyoxJVt0Ln5nfSIkeiFKaCV6Tlt9NDo/clt5eDd3Vj07fHJsYz9EUlZtRykjdCMxfTdEJmxmPE5MdTE2''@;'; put 'put ''RkxRcHY4RGR8LmUidktCcFNDVzAqSDxZM0tmeT1sXz9mNiIkNChaSXJqI1lbMzk2bXxaej41L19XSD1LOTJ+LE1zVHQ9Vm59JDcrc3Qyfmlfdz5EW145PmdkbGxbJVI+eTRLKnNtQTBnYmU4L3Q6b1oldHVGWFtPUEJUbzUxe1BQLk1JbTBZYT0pdXB1cXI8JTB6SU4qdGhUayJlfi99emVyKX5Q''@;'; put 'put ''PVByPUk2PDxbOnx6Q0YjIXxKMTIxR2ZOOzdeMSgqdmtJQCxzQn11Rjx7bHtuMnVpR2gleHNge1g0QUk9eGlTWyxyTGZoXjBHTThKNC8mL0xeL2NGJE4jeCFxbk0hOyFFL0dFdlg4YDYvalYlUWcxfjpWbU1DaUtKSjV5UyZZXUNbKUtJczRGI2lyJX1bYTJHazZqTWtbbGZiMGhAcmJYOHc/fT9T''@;'; put 'put ''P04vZzReN1R4ZHZSK0AocHZnImtXN1s8LE53QCZmSV8xb357OzkxM3V3QSUuNVk8alZASCw4a1ckVk4jeFdrK3RrXXVCOVNEVjlTI0FMXXooflZVa2I+cjtsT0lEIVFgQXo9NjYwOD55RldFOyJiQz5pUXRNP0w0am1jKHIpNl1CTkBSeHsjO08iLjtvV1opJVQ8Mk0wO0ZGRFYzNWgxNlJlO0JS''@;'; put 'put ''XzM7NyNYdWk+X0RSQ3UhL0ZMSHtrWCxgRUR3JWMlYzNTMzxlWVVrTCpuVk8rcmtUUC9TSEh9JnJ3dG1DNzBMT1tyZWlUeXFJMFpbOUdeeTtEZmUkUyJmcENSe01XR0J8Oj0zeng3VmtDY15rIkJJXVpSI1JgSkJkZ1kqWCpPTCJyRSVsOmhXO0oqLnd4e0NvIyZmNldvbFV7XSVmakV8NzpFTjNv''@;'; put 'put ''I1Y2bm9jdGQqI3NQbmRUejQqeysobGdNUnF8WnlYSW81PyNpVEwhS0JzQ19lZGIuP05hW0ViejJyR0U2cDRpZ2ZSZmQxeWlPKCkxM0w/RDdBc0cjR3VuQmlCTVVhJGkyMj95W2ZCYVtGVy4rYD47TzpUKVFtS1ZacklGVmNkPyZac2g9PiMjS0YhJFBle3h2Zz1+OSU3X31dMTB1MGJ5a1sofmg3''@;'; put 'put ''cS52WEI8aExLNnBZVHpNbUJ9WWJdVklabXxkV0A/JnFORDk1PmEweDcuandkXWA2OWtoQ2k5dURHW3Y0aHRFRkdQV2oqeyFaWVFkJmlBTF0vX3RCQjswN2xddyg3KGtVZihyKGw2ZmhzZjU6eWtGZWNIRmc7R1Yxfl81TGVRQDx9OHNBWi80YFI2MHlsXWdFckBtY250RyohZ3h8WFVfLlMxW0xk''@;'; put 'put ''UkhHMC9AeWIqSTxdSl8rSXwmamhXamB4Oz46TGxnLlVkRX1VNm1daGhMYD93bmR0TDxPZFczWlVhbjFkfTRNe09WU2U7PWtpOCJtI15jJVheMjM2JHRnS0N6LHB3LGFVMCZbRXc0eXYjQyQwI2UlXXA9UCM6QGR5IW9uen0/PyU0PGZLajM0VHZqXWUvQGhSZzNdRjY9ciNfXUw2PEBYYltHLD9X''@;'; put 'put ''MyVzS2dlUXdwJVs6SHIoKG14MGUlVWA0ejJlW1hZYjsvWU9je2xnSXFDXy5sbFM+SmAiTl5SQS9dYnpnO2EwcTNvcDFJMiN8azxNRz49KWkkJHk9L1Fxbkkmb18hJSZMSHhPQ09QWytZPWwobUVGel54ZyUzbyIlcD14eXYkeUkkSU1fZklNbXlXTzd6fFE/VGQlU2pAU2p7ZT18SGdzR1lebnlQ''@;'; put 'put ''N3t4ejpIaS8sfWZTQj5eUW9qbyw2WChgVE5xWUFFbzpVeGFLOnFRLzZYKl9RUD9PST85TkolZHNxbXVOJXFWRF8yTUApS2wjbFp4UWd9TjlfezxGRilhOiJhOVhPMTZJaVlaRmclcEczKzM7UC8hVy58VmF1fF8ySDo8SFFQWWd0NVpDeFNkWChEYnxddlhaUStdeUF9RWkjMkhNPkAySGNJWzBJ''@;'; put 'put ''X0AvfEVVZEAlekN8ekp+dy5QKSZdcXF3VDNkc09hc3AzQkBiJnZkKl9YfUdMJWYiMDp5KTdtK0Vub140cXFvOWpIRHtvXjt6eyxNXmUxKEEpI1t2QC4jTytYSG0yZU5Ha0xRLGUhJl9uUTowYU90PXV1RX5NNUdLd2c3Xko0XzhTSlJNaVNvUlc9Py54WSZifGtTbyVJUWIxSlheKm85Rz5CQVRq''@;'; put 'put ''MEcmYSlMV3FxSTBIMzojPXNUMWpEbz1AZ3YlY3BBa1JdXV9fNld1ZFklcm1qWDtwRnp7IWouKjhsbHV7PV5Aa29SRz8jWkE6PyZHV1V8RWdZW1F3NXpgUW18aVdua0BaPEJwIzxzWCE4NnQvI2UpTSFJVWlUMEhzd3JVZXNTcFM/fTtTLmxwXWl1QWhyekJWaUJ2WGZwMVJkWzglVnBLO2FdcjdA''@;'; put 'put ''LjFAK2QreFI9TCk2O2pte3BSJmkpYCFhMH0ja15BV2FiVitJMlNSQ3Y5YjBWeU9PMjVsdDUoYDtlb0hMTV8zJCVpW0FjXTFGMkJ6Szs+RD9QW3hzbzdzbmpeeVFvP0kvV25FKiVzXWVsZFBtOERaUSFFS19jdFA0UHR0ayNoMSpaUG8yYEN4a0J+MD1aXkNIZUJ4bWQ8QCM1b0g0X0pebEJBRH1e''@;'; put 'put ''YUdmXXcveVUmaDhuIk18XV4yJEZgTilrbyFMTEdzKU5jUSk+fXpBKHdXSWE6V3czJTRaVDZFKG8yW0FiUnRReUF3OnVSZFNQLy9GTGZCe0w+akN2THJ0N01ZWmNuQ0FJc3xuKXBnXyMpZzc7WVJqVHtPb1BjbkMsc1J2L0ZzfmgpfFpWKWRnJC59KjNQaTo0QW05RVJRVSY0UDJjJWFgPz9XSGQ1''@;'; put 'put ''WVoxc1pub2BleCRYY0NZT01fPCRzc1J1N24yITJzc3xJfjR+YkNEJnhQXzA/aWRbSiJ0TTprT3RwTGE0Nix2VT9tMD9NI0lafGhTNWAyWmlTLFNIdURGUGEwNkNOMD4rJnNRLFtqJispb2lNI0xMYTZeUUFlOktGeDUiRWQxVDVdU20kTGI/T2xBdDRrPFEmK1JyR3tHVW9rRlo6eWcxNigwWnJs''@;'; put 'put ''I0pnTHN6L0pxakBbR042TEd0NDciS2lWTjh1I1J7MGojKj41O3cvWW55RCpAO1k6Iy9DTEB7WDIiRH5YYUhdUHopTFdrL1cldkk3QE4+T0kzUStfb3JnVWJlXUhDK3omMjBwd2hxe0E0RXEkNHNnMVpTMytHZmh3Tk1aT0gyXn5mMTFxfEtvPEVlIkd9IUhELE5ZdGtQQXlieWdffH5ALGJrMlgy''@;'; put 'put ''eXFHTVhgNm5RblV6SjkwQG9pNSIhSklwYXA+RHYyWi9pPkhFUndSe0JzOE58OGUqbmEzXS52PkZMLzU8SDopc3wrOWRFM1Q8clEsbl9pMEVGNWNoRFU/QHBPaUFQNVMyMDhIXiJTJndPfVsjSks2S08kUXlRWlVKQnI1PHk0cmVHVm84QiFdLC8mflFkJDM2T2tRTi9gYmVFTnY1cDpMQXx7Jk5S''@;'; put 'put ''JEBZbDs3XT58eSNYYWtLfGE/Vk14ZWQybjZCdCNgbVhiUD1LZXhwX29aOTJeSzZSPkZRbGJJX2lbbzNwKUMpazBBPUIvVHljZF04Q1E8fTU+X3wxKjY1RiE6eFNaQlhLK0RbIihzWzpIYUdIUSROQSZOfmJSMiRZQm1CQT1gNXFFOyYlVUFeYVFLeWdpQkBhYnFRMS9VdlFaIUJRRzdmMGNPVCs/''@;'; put 'put ''cVB+SmZZQ1RpRX5VSWM+fDtRMD5+OCpvRX1ISWwpN15dPmQ0Q09iIyF8bmtIbCNFZygyWiQmPEpTXTR6PTViWVI1dTB8Y1N5MGRGRC90fjliOm9GK20mKiIkcy99dD1fKTg4Sjt2VTVdK1B6RyFeK19dcltWZUVzeiZUQiY2TnwmaXpuT29mMllxLiYvVnNET0kuJlhVNDRFeUNWW09COi56JWN3''@;'; put 'put ''LmJeJnZ5RV5FZkFYI3EqcjdzQ15gNURQTWNQJSswO0RZbHpUcVVpTms9PH1vN3JLQSFjSHtNMWBGX0pbeU5pNHI1WEAsaSphOC5nOjgoNCNtZF1uNUxaQGJASnR5W3FLamRjTE5MUm9jOlFhMGBZP3N2ejI7TnJIQk1VfWp3aXtiPz1oW0VaQE9FK0JhW0xaQ25tQiUueURIPyhTdzpFaDQqTTtB''@;'; put 'put ''R0pVN1N4I3hhWXh2YkpIRWRZRV5HIndGTT50ajczdFkjZXYyUSp8STNmJStVaC9ddWpiTy5LKSVXZG5xZXlwTilCV0E4OSFyTDNTUz0yKWx2Pj4vV01KOUhJKDxwQSNOSCxvNCRtTkApdVlMVi4wRnNDLDl4UH1mcV5JMHs0c0Y4cEUwUWkwUDs+O3FafFpAbzdZIyR5YmtKPi9hbSxuVzN7JjBF''@;'; put 'put ''TnlwRjRMXnpfLkJsPmwwNVteVWBsNyJCZnshK3peLFAvZyV7RnpLMlVab2o/dHtGfHVAKGtTJnEwa1JJQik6dGVVSntsRng/WDJVeWpAXUs5SGolSktCZm0zLzApMjpIWUgma2QwP2d9SS9oUGBYSmcoZDIxamxedHJVTHJqUnc7aH1BJTBFI0heTyJ0cDd8aTN8RGNDcENpTChBN2c7Lkg+Skcm''@;'; put 'put ''UChFQU9FUHkzZik2fGRafF1eLj5HUFElLit3KztAemhDY0RTWWluOyZlLzIkTVlvYlEldSs0OjFXVy9GXVF+SjkpY29LZiYhYEB3IlVlKyVoTzBWJCx6ZiYhYSldKCY2LyFmZndZfF5NajooQi9QPlQ1RD1MOylOdjhoQW4vQmokcms5bC9Obk1nSXB1OU1mS04oQzUqITtiMk97YmF5WltWMmsz''@;'; put 'put ''WFZHMD8zXXNkTXtdMEBlTWRNJG06bi55WTpOfUghb3hiNTImOlVXIjRZKS93dXMyX2BNOEBKQEJeWWt1V0xKXmgrbT5vaHlyPGN7Y1VzT0RDKihhRi8rOEdRanYyK2J5KVExeF9OMD4lbm9wWi8oQG0hT3dvMWNDIXJ0Ui4zZmw/dS9TeVhkbG4/Qzg0aWAiRSQsdUJXVGVlRSE1Kz1MSTAlRzp7''@;'; put 'put ''Mjt0KUtAOkV3PE5oQWZDXnoqLmx+ekQubV1MLkh5VGJYJSo+PSpfSWkkMCM9eHtlK2wkM2k/Xz5YYXdzZSZYV0h7Kn4+UVRPUyxMR204bGFgNVE7K2ltPyZidFp8ZzY0VS80SGBAanNGMW1ZS1ciaEQ1cDlTPEVYeko4STU3ZlJSc0xmPU4+cFo5biljb0dZZTlZVTZieDBaKEd0dylZJFV0Xmks''@;'; put 'put ''VnVfQTUvK2ZYaHcpTWFiOG5dYzskSnhrWC59WEVzQnt0QSwrPVImQiFFPlhwW0hyWUxUWSM3cFt2X3kpT1B2ZkchX2FSSyxbY2M/ZlJgT31oPVM3OjY9NVdYTntEQnJlQjZLYHl4S0dsPkBAdW9oVz9DfEY1OiRxc2JLV104OHBtVSNfbmU7ZldIQCNONE9CXig9TXJOKl9zVSRKUTA4bUkzPCVF''@;'; put 'put ''QHJgbm17bVBkaSImRkVzI2htLl4yJmBrYXlaT1BNblN6fjtWIXJidDNrL2YxNjpIciJBYU9zO0UuTVpaL1JgIiZGPUI/ayNLTlNWWE1TSmZ7X3JaY2pkdiZJTndGLkUvYFFSR2VRNU1zPDVOaW0xKXloOUs3S2BjTCxYTkZlS2AwTEs/TSZnc3w0TmNCal9EPW0lXSE1P11UbStdXSpCfFM1REtz''@;'; put 'put ''JHtdWVdpRkVAbEBqUnUuTERKT0dCfEZBJiJdfiUjJWBgSEZmckQ6Jk8yP3VFTnVze0xEe3Q5aSh4WmVlKFcmeF89LDcjNl40THo2TThXQFZIJDckIUA+e2U2QCs+RFJOP3tyVSo1Q0oqPGI4e0NqbGwqfUAzQHcieiR4a2ZHemEvJns4c303VmNmWyEyY1I7OzdsQn07U1R+SUM3V0pSbm5xMDRI''@;'; put 'put ''dzssJCRSOnZofXo8V1hAdUZGIiQ4RS9OclJzTXlYfj8+NEhqbSZ0QnkycTtGZ2x2bzdDTylidEFVTH5lMDwjOVc8Kn5NdU1yUWkka2FmZFFoJmQoalRWKFN8VzZmfUI+NCpCcCgzRE9LN1ZHXVFQalgpdVV8RDBVVnZ0dVc3R18oNGJAezVZOGczXXVDOz1DWmRIVG1UPFEvIlltemRXWX5sNlso''@;'; put 'put ''VH1OO0h8VTMpT0NPKE0xV0R4LEBIRXlgczRCMUVqYjAmV0ZweTMubDpeIV1AT047W1lsZkZkflliUiUyX0tiIUBdcixiU1dmWShFY09II2lZeGx9Y0hSNjBAb1k6ejJ7MTguVkkyKVN1b3AjaGsyTn5DU2Q5cEVXNlojMmQxZDl5QjFEe0I3SVNkZ1c7cnJaVzRtbnR3eFlrcX1TQXA8Z0BGbFBU''@;'; put 'put ''aX13SDBaT2B+XT40MW5Acy4vPUVgW34+RTdPNC9raH0/XW4uYFhGd09iZW46NFI7Rl95RVdwOjllK3tMK0tPQjkyaCpScitLQyoiTFleSzwkSiNIKT08PSlxeHVRdnVbKkFhNVliWE9dfkUzOkB+cEtnNT9WOTReO0FxKDw6fUd5LFJpJHBiSzI8MmYhfjApXygoQ1ojS2ZaTTR8RFtXNXIwOHhk''@;'; put 'put ''UlkwO0REdXkjcExwTXcpOlNNIlVmInAjbTguQldCQytyV2dALCJ1WVh7KH5MJUQ8ei4meWpde35pQjd+RkJlSFNGWyVZX3RHVmorSmpHNnUicU8jVUtBNCN3Lz1KY1Nybz5KMyhdKSRaPXlyb1lHSHJMQWFtIj0yb1pAQjhaLDpHZ3FLTjJ6JU9uc0EuJDJ9MmglKHNmLDVDamt1KnhCO2NMVzhb''@;'; put 'put ''UVFWLCRpfCgyZCRUR1Q3OFl6KmUqUko2MG5AKHNWQzFQOUV9TkAiSDE1Rnw8dlJBTUhIaTIvMW5LdkRQKV1vVmc4TlM5JWFCSnZUO1t2cUlQQmJzfTxoeHhOYF42ZE5vODo9UGI9aEM0RyFteXA8cU1bUWUjKzcjJVEjYUcpXmB8O0c0eDA5NTRLe3o8MVs6cVlAPj1eQzZUQ3tFLk1XbWlQYzgp''@;'; put 'put ''RGs0KXk+ZDdkZGxIU0d+fHlsT3JdbSpoY3dUWSFuR0VrNHw0ZHs4ezp1M09rTDlTPSNOPGk0WDBQUTFTMkhCOjB5PWZ7cExdZnV8JGYsUyhpTm9kSGB7Kl5XamJNKVk4PWwyQmsseStbY1lEcnYmLFhENypORHJLQ0o/TTsxfnhYKntjJkVqJVc1Q1VEbUV6OiN5KEpIKyhoc0pbe3NPOUBEOnBn''@;'; put 'put ''fDNZVnNlZVd1Q2pRYTtIPyxaQztISio2Q3h9fDk+OnNqN1MiMFpRXVJxZUg2K11odVEjYVAiUS49cUNyaDJDV3t3On0iV3NZNyRtN3lpdUchRGROUzx7Xig3bzRiTU8yR15MVFJ0XUVQLjNJVTJqNE9HPDhJa2AmI0R6dG8pejM7QTNafmh9Nj41OVhvNFJnO1pjUGt8IXJHRF4lXU9NNHRkVlZR''@;'; put 'put ''Kkt4eUd4RCl7eywwQFs4MXo9YnVRTkszfUxsWCVeXUZQJlF1Pl84WlE+VjplX3A+LmhrZ3BMQy5hV2xVS00qUT9lRUIoaExkc0lxOlFURXFqRCxOWDg9OH5HOmcmenVKQDc3bUdMN3hxZG8pQGlDfEdxMiw7VlZBfmRfRVVYRE15LGM1fFhyaF4rRn0lbHBKYH4+ZiJzYF9kZUM6JV9AZyh+VltL''@;'; put 'put ''SC45UHVmN3I3QkQiUWlqN0w7NFtYMEVJY3NYSDpoW1BQbkwkQD9COlAvdmN2O3dpRzZeSSomLFcqU2haTFUxLDMqbUJXYGJZfWJwPXE9R1hAQyl0N3lacz9YQnoqRG5ofEluQT4ka0FfUTh8aHgqRDE7S0l+Mi4xY0xqMD84NH50SWhbOENbRyMlfixhPSFEd1EqfWhRYzxKfF0wejU8O0tmYUIk''@;'; put 'put ''alVRMVtRMT9UYGxJeHohRm5CUGQwYC96RXRMVVkhOWE3aUkyeU5DNGZeSCFTVE1WQztCMnE/Kml5KGVCOm0sRHF2RFNZcy5ZZldWO1Z+PkNrZ014NUgrQkp4OWlDVjdaJFZ0RWAuJCYkdnFbK0ciN31IVnFkOmhWYil9VGJJfSguNWdLaks6YkRkJmErPX10ZG5pYWQlWFphfGp6LExncHhQfGw9''@;'; put 'put ''KnlCLHlaemVpTytXdEh0M2l+OlA6WHN3QE4kOXFmQ0BBaC4wSDhGJClvSVptXysjSGNTMCs2UkZ8LkUoRXMjImkzJlsjR05Vaj1IYF1HakxPOSxeYUc8bTRIP2hKcWQiRnRnOSR4fVRhaiZqblJ7N2F6Sl5fbltobkNsJUxkVWBWSlptN2lTOi5MVV9lMjY2dGFESzBiZiN2WjM9SXJud2AjRUZp''@;'; put 'put ''I2Bab2d5X25VeVk/JTUvbkh1XlE7YiNQLiQlM2srfT98LmRzW3thfjFnLj5kW1ZITnB2KGIvQ0tJKkZ2cWo2VXdQSiRLOW94PTFDMTRIe09OYSksdjhjKWJpT3tvUldqJEdqV3ZuRlsmdXZUOnFRMjw3eEs/YnohRGtwRyo6MjZYeUhGWEVpX0RlXjlbS2liRF9uU0JgJEQyWSwpe09OKi4qOigm''@;'; put 'put ''XkEkLytDJlV9Wkx3bCl1Qkx+WkohYUBKL0pkKkhiT3tCajY9QmRGSSxjbVR4dGRlPjZjY207enk9enVgR11TemE0eWUhPmJie2xBOmhjdWxGO19fL0ZQdnF4fjpoU0pNdFtbJTJlWGslYilvWWNbd1l8U3wmVjZtMnVfRSNGJWBeKn44bkIuVCI4UGFVNC92TT1FT3dEJjZ+PV8hTU9GLmtLQFBa''@;'; put 'put ''YD10aVRlPissQHRCfFhhfHZvJDtfQCpRbFFQeDZ7WEh7UF5jU3I9XlhpalMqRn5RSSRpWC5pMWcza21mbkJQK2FESV54aShCQWgoQ1NbMU9yVEtSKVUxaEpRRTwmKyEzNSVzMnF8UTZyJXEjaTQqUmtGW3tPMTRiV3AxY0A/YVAldk9adGZ5RjZ4ZCQxODxhPUpQTF5KQ1RDLCUlPmNLdDRfLGsp''@;'; put 'put ''XTZKZCRxOmllSShMVi4+UCYyZzdGcVFfKXRTbmJLalZtJCZ8XmNLdz5Qa2xCZDQmTythbyQlVSpsaSZDPC5hR3EyMS8wdkJ7PGtMSTN7JjIrUVU0RmhoT0NQTjQ4USUoen4kYHQkRHp+a2xMQHFoISI3ZyNxYFdDWHFwR14+O35IVlBfUCQ4SzFxTkxqMy8+KWQ3R19gQ2xsIy87fVBpOSswKlFC''@;'; put 'put ''emJtUE0/dVE8NDpITiE+SnxwbjJlY3hMQiR6XzlAPGwjaXZOSTlMIUIpI1NuRXg2RWBdRD9rPlgzODJ2RV5FMCRidz9hVGtYeSV7MHlhcGEqY0AsIS9vMWMzR0ZzOnV0Vlc2Nngpc1IjJGlObDkkWVNIKDtuKEMxaT5aJEw0eC96Z0NjblFXPmBbZ0xqJC4reVMsOVFRbVVCZ2F3PW5FKWI4fStA''@;'; put 'put ''d1V+MWJTP3FaRnIpKGU7YnVrTFVhPz9xeT8mJCtUcXxwW3ksXX5nPns9ZDZhSFV1KiVWRDpZV2FnbkNnXVJjQ1hIbmdLbFlnYlZodmU+em1aPVo6RVM1ej55bHtrPGN9JSIufDV5RGp4Nm09ZWgmM0F3fHBkNUx0W2o6QDEod05gRlldc2NPO286Ki5BaltUMT9LTW82S3dZWnpaJStMP0okb082''@;'; put 'put ''N05VL2cjTUZBVSlYSGQofHkxcUNCMCo6IzI4M0BTZlVfc0VhMmcrZSkkUStxK2EpUzUzLnc2fmh8XjoxVExMUHlAYEUsfkQpITtMaEtbTHxlay43WHV3XzljQ0t3I2ROKVA5JTZHS2hSN0VUJTtHfnVCX1FYd2EkaHheV0ROSUkmWEM4PHt4UV1wXjQ+UyN6JDo0M0NLKSJJJF9zJVdMN3tXZEZk''@;'; put 'put ''aFBedG5QXU1Yfmt7blFBdmM8QndKby5wWiQ1bTJNWTBAIiNUJDlCRDF1OGYqMlJJcSMzeislIysyakV9U3dkVilHXX57Rl5FaWI7NitIPmYuWE08OFo7cFlhb25afVBxITRhI0lsbV52O0o0P15jTyR0diUqWkBtZGRgTTI+N19pRF9EXiNFOSl7eXQ0eXE+Kjl6PGNwWixFZWRSSUBuKHJ0UCVn''@;'; put 'put ''T1d8c0k+QU8wb3x1fXQyXT1LfTpqXWNiKH1fTHk/PFUkYXdJYT81WzN7I0lqXkVGbnw/SnhRYyElLyM/dkB6UXcleC4hKFYmPXN6fGRORT88YGo9IXUxbVZ+QVt1MX5XXW9pXTtVfHM0ZVlfbmJocHdSfnw1RT0kTFdoNmBCMH4+SylmUT9qWHNOS25veFp+KnlBOV08PyMrM2kuRTVSR18oZnhm''@;'; put 'put ''e3xgITlneG1WZywrJWdiYWVeMGhuWTd2ME8vZntvZ1FUJlcpTUl0O25jKk44KVRpTjRSVVEsMXhsTyouTjJuZFlOYEEqe3pGU0I0RiNTJlYoc3NDWjh0RUt7dzk1UHhLdXk7Wl9tW0l1VmQ9L1FPQl0rMXhYZzpwdSxkb0taISgpbFdDZn1VIkpDfVEhYilaZzg7N213ZkBpL3sme1c5JHFwdiJP''@;'; put 'put ''Rz5BQE1ifChNckBdc0ovaTZSTS5VcDtLaztgQ0E/Nj9CUiVaR1JjWSt1cFZSX3pfRTR2WjJARVQqR1tmXzxYbCF0fkhJOyk1MHR1NFpLSnYsNHg0Vj5iZT9SUDVJNGhtQTJtOmc0OD9GWU03V180Zk5zKlFUT1M3LDVoVSNGOFpjMGViKk0wMCtWdFtWY3xAKllse3VnQWZCbih0R1g4MyUyazsw''@;'; put 'put ''JE5tflZXYXYkUHtqbUtIUjpxPCE4ezhUO1YiaysqaChgLDRdUE5yKkspN0kydH1TOyRhI2A7SFMwXTkzJHBNYENCPXc0Lk1ATUAkLlMyLEc2TyJZPj8mRXYyLGBZIzAxYXFWUE5HNHQwPGVqdjRnQW9uRyE9c2tPeEc5Mm9eS3p9MiRDMSY5JTRvW3Z5OGMwX29dN0VEKHNuP29JMkd4c3M7dzUh''@;'; put 'put ''PVZ1JEFrSExPVz91SE5xRS84NG4qWTdbZ04pSEFIYnNINkloTDUuPjpzUT1CN3J8SGd5a2FhMCo3Xz40RW5fTlQoc2FWMmE0SS5XTDZPJDo+UDU5P090YXZ4Xk9jPCxdS09eaTNtVTR2Zj5UciVuNVIwVUVlVlt9TWR2bWs6cStMJHklYSN4RWkpK0dCQ3Z1cEA3LG5PNjg6ZUo3ZnozWXpENDdq''@;'; put 'put ''Y3Rrd19pS1N3YGM7aC5GclV1IWhNZ044W1tPdnxkJGRjP1JdMTtjN31dcm5bXTw6eWNvZ0UoTkNPNVJAU2p2PGErfmxaOzBsTSkpZUtibE4rL3BYKEAmdCQhRk4mW1N+NGRrZW08UG19SyFVJCpwZnByNE50KWBDej5FMkc5O01AR3ZlRVttMlV+UkwpYD96R3Y/Vj1APH4yKDtZNyMzMzphXlok''@;'; put 'put ''SCo5amk0Z3BgW2k1Zm1+aGtjbmJATSNCOzN0ajwraz1kYytETCRTRntPaz1zcm1pVT1hZGo0WkZUfTtKQX0yQiI0aldsYjtCeEJlWzJFbUEjRUpFYSVhJD5FWmBDWlNSZD9fWCxtM04hKjI4cFM/VjcqSCMqbCtjVyp4QF9VbjI3fENfV1U5QDJoYzR3fE50Qm5gSXE5aj5PYUF2MnN7YCZJTGZr''@;'; put 'put ''fHo7VVgiNV5JezFCKmNMaXo1JTcqV0pOVUMkPzN+KVNgI2xtPDVbZVkoXk1ePjJVYy8wL2NgNUdYTGZyXURHSGB7LFoufGZ3JUFmWWUyK35HZyk0e3N9TD8yMH1ad1FFaEFESyJXa1ssb2VWfTQwO2BdTzhKQE5KbTtHMEpTRls8Ymw7cl9yNV4jVz4+UDNKans5cEZtXSo7c0ooaXddV0gvcjl4''@;'; put 'put ''TVUoU09pKjROSC5YPGM0OGIrSyk9T3NMenR6P2kkNUxxOW4zdmtrNlc0LjZwbH4qclo+eVJZMGZoREA1VXkjL1AuNTNVR2hYenF7NWFjKj06QD13aTpSXT58UiNbbyk8QGFhJUg+Iy8kbkIxNHpeajd2LF9DW3Vnay5qXW5ETjNkPHY5fng7c3BdIV50MkI1LCNwNnF5PXxgbWptdXUoaUo+Sj1R''@;'; put 'put ''VHp0cF44fVV6fVorM2pQK1Y5JlBdTXJROWpTM1BfaXVjLkBwIyxmWk0uOm00ekF3L0VrTSghN2BhMjtlXmA1TWBsV0RPMHsqa3VQP3JIVzRMS1lbVy9mRDxhYE98V0NIZmc0VEFLMG1odlJzOUJkOk5zWVJwRUsvcS95ci9XPGhlaypQeWJUZTtqekBPW3ozNF5YPytsKFp1aH5eWylBWFY2elZD''@;'; put 'put ''OyZvTWAxYjBkZ3xNUE07dXwwI2wxb2dJQE4wTCF7U2N4RWYxUls4X3Z3VWYseSxmLkhqUCFvYmVXVSJyPms+d2E+UjtnYTMlTFYoWmhjP1cwSVRzRDMlZF55STJfQUxzTHZ8djpzcCwxdD9UYmJ9RjpeR2Q4YypTVV0hZS9FWktpW1VEOiFoJS9hfCo2bUQmcSwuNXNNQHBZJXd1QDtQX3N2L1hw''@;'; put 'put ''STM1Q1BJSFBWLFojKnEmXjRZe0kjM30pbElWQTlrZFRVU1RIfjtZdlhWLC9VYUlxJU5fWWx9QGg0Z1RVUmo1bjVgbmImRX4wZ2pVPTN6SkZdcjwwWyJ0OFFAfEBeMUhUWUVsVjw6bWk3a219KThsTn5UYGBXeHVtPiUiJDc8WHwmbj5pPERJO31QbD1fK0QyaFVxVSU7PDtMOyhLYyk8bV9uZFQ5''@;'; put 'put ''STJlWlsvYzglXVRARUJLeUAsNHYrUT10Rys5WD5WbTp2XStDK21tJF5tc21XREVdMXNgaFB5MlJUIVUpUWsuN3ZOX2t0NlspfSJld2JpUUtaU1o5fldwfXpedXl0MGx7MSJ7PFJ2KDdkKjdxWi8vcExiXUtEdD9Sc3VNcllsKCx8PGl4R0Y0VEtqWFkzJXRiSFchLkpbTGNHb0h9cX1WS3x1O0lp''@;'; put 'put ''TGR0KF5CJF9xLmVGaVp1XjhBKFJZWlAzOyM9Yi9xZFJKUmtIemp+O291aFBROyUldy44bi9mLj5IXUJGUUFBcylrUzI/bj9fWF89V10yOGpTUS81TilmPDlDbFV5Y0VjaSJ9MmZYUnkpJFo2eDtEJHNLQzY6YDVSdm1LN31WS25wRz1XS1I8Yzxda2ddMCwyfENTLkNvI2dbfncyU1Z4d04rYEJh''@;'; put 'put ''dEpVOGomJDp8cW9ZU2MpNVIyYW9PUTorWTJXYmQlU2RXQjZZdj8+M35xTEJeeEt3JUo/QFRuQWkhPVI5YGFwSSR6NUxQWyVYMlBsfShUWyZHemoqVTBGXXBFUCZeSFUkWjhlMGs1OF1tfWd2aHdpWHl8P11RTns0QC5eaVZXJiJlOm4wMnM+TTdpXVA3JVoqPChEQkZWJVIrZ213VTRFcVVYQnYp''@;'; put 'put ''IVJpUkR2SkBqU2s5Rm1ZKkI3cHI1JWEqQSlQKlBAemtBNCM4Yn5jVEkuc3tdPjNpdnUxSWN+YyV5L1pCeXd8SCUsVVc+KVhFfXJ0OzFYJjA2bGMve1k8YllGcWtEdVpWNHg1TioyV2hyNnYoUik+JmhycWR8eSRkfXhXTDxQYTBgYlUvT1FRPkhAUT80QVQjfHZHP3hULGsxY1RWLyFCa3pVJmhj''@;'; put 'put ''O0V3cDBQJVFjMzBCWHxKeE9+SUFOWGEvOTQxekVUSkw9MnAjVVRlWzFSQ0l3UzBzUkhsTXkqSjkjISpKQnkicXxHfFojeThXb3VJcDg1NjFBaGpRRFZUemVza3l1SUYmKVFOd2MvOkQoI35dZXwoVzNRXiEoRm97cnI6YE0weHpYV2FrWEd1XTRDL2h5WiVFW0JwJigkRlEzUS9zWTksKFZmQFI7''@;'; put 'put ''ci5JY1N9Wkp3VlREa2dsRTdncWY1bCZVYDZzP0dIP0BXKWJnNDlZIk4qRmJeKFJOeEt6RWZ1Sk17QmFje1FyO3gsSz1hR1k4SW5DYHF5Plg3IkZaPjdiUEIhdUdURENkMTJCU3Y5NXhrPG1gVFR+VzpYMUxXOFI+ZTguT3l8RXZoImw2P1pZV0N8MD1WVXQ5ezk5dTpwaXVIS3JRZi5wSWZFb2JO''@;'; put 'put ''SSY2e2E3dFhRfERnZUhaa2NefDZiZ3h6NElSXzEsSmZ0PDhQZVgrMTxSXmhYNU0oQ1RlbTBtN3VydmpKIXo4LCJpdiZyWSYvfV5DKG51TjFjPzM9TytjTGJ5Xld5WClZKG9HR1RWdkQ8TWV4ViZuLHxDfUlZeklYRH5bKi5Cbl1JKS87cT11RGFUMEJBazwuUUZ5dDxiIl19eGIxLGt4USlDNDM4''@;'; put 'put ''Tyx+Wn0wOktpM1QzeDZTY0JeZjNiblBAWV9aKVYjOjsoZ2d6TEpgOGA3cTpFLl9eODY7JFJCOlJWMjtkNVpZUntSZG9zWG5gZEsyJEdkVyN1MTN9UyF4b09UMjgjVXt8OGk4cVpadVdbYWgxP2BdUHcyQmdWSUBoQGJOPWxrL25uYCNGY0V4bDFWe1FzMzZscjp0emklTCNvRC9PKDRQSWRuXU5u''@;'; put 'put ''bzVofWg/On4oZF4uIz5id34hbH5tPUJDc2xqTnszX2QxYTFJWzdOV0A4aXpFYUJIZWVBPnhiaS5zcmN+ZVZvPiNwWDU8NEVFdmp+QE1dWmQ4ME96fWBtMmwxeiF6LEY6LlIpVD9oa3ViRjk5I3ozZiNEXnI9ej8jPStLYGJjKjwzRUU8RlopY2tdSzF8RmR5Z3EkYEEuYl83Ljw0XmAmSiQhbkRM''@;'; put 'put ''bl14QWk6Ny5PYiZNaj9zJD1gfEV5PihsKFluRzVeWT02PzpPXXtsY1EwV05iKEFYY1V2eCJ9fEouVnEoUy5lRHBLa0F9OkwrfWlSI1dsPGthXihlbiY8ajxqby90OCQpIW1LZ0ROOTt+UlQqU2FCazA6Nzs/OUV7cUI/JjFKdWZvOitDa3I+V09AIXZAWihUVDBpcWFYKitHPiZmWnNCe1FjTFlR''@;'; put 'put ''cWd1RFVxNVFlT14oKjYxZy9ETXlXIy59Xi9WQGU4TntwcV4ifUVubzZAZXorZm9IWmxWI0FvZV0vdEVDd0dbKDw3Q0V8JkQzaWx3KGJVZGxgOG58ZFA3VEFBKltzdktaeURhSGYkc3wzSTcsXUVYZTR6Z3IrWnsoeHxyWSlYQjBKQ3VdRiI/YU5mSy9XRD9HTEI3Yy5FPHZyP01QWmUlJHBJWGp0''@;'; put 'put ''RG1MIzVxMXN3OUBGZFVHfFJbT2xaai9aXV07LnM/SGlpRCI8YktJNS5+KTpzfVB4XWNGaD1maD1yWz1kcTc6Uk1BNShQOWFiJnRqWCMyO1AwYU1FPSlKKixCYHwuW1IzWkt1aUlYMVRdVGxtbGBoKyxsKn44OnpoKVhxUVNWQyNXXmIsKFEkPyh3RX4wdm5iXnBme0s/Mzd4PG8kIVo/X29MOEFT''@;'; put 'put ''VjpiY1c2TllpN2YwbHEkQnQxYWw1amAzXlQwfWlnQz9yaltpQzcvUmtyWFh2YXZtJHRTQ0IvJDw2R3JfI2ImSn59NmhiZj8kS2c3OT1MXShUYWFvZmV1ajxSRjltYkB0OVolVXMwYk9gQWdPPE9lXWVJRTtoOE4mfFFtQ3U7LDBYfD43YzMrN0YicD9JKEV8XlNWaiIyNW4/Yiw9Tzcjdi4rQixa''@;'; put 'put ''anpJWT52UWRfPTZLU1hmS2tMd2xnO0pIT1k6LEc4Q2Q9NWlSOlIsSShMTTNdWl1oRUU8NChDMGprKkhqXTlkbWdrQStOQTU4MXloQz9Hcz1Je3ZKMnExZXwmeDw2Ui8rRSJNelV3dmxGN2E2dn5yWDM1ZDlZd1pBa2twYFt6eUshV19wdlFNb0w0b1ZpI0N6RDVdVltxcFQ+VnE3V3s4WnQrTiQ1''@;'; put 'put ''aCNPVFJyS04qajN5Rno6aVVeW2Q7JjNfVHxqWj5NbHlZVVhUJio3bzVid1FzclhkS0s6a3ohX0k2XkN3OXFWU3JwdE03QkpqZG9AQ0tIInNec3l8dEM5UnpTVXpVaUcsb3A/JT1pLnFGQkojVWt8aHJ4VDI/MVgxYzI6dVVpdG44eXdVVEwqLF46cmNHTkg9LCleWSJRc3gwdChOM2shfXspPTBj''@;'; put 'put ''MjMoemFEYzRfb1hpT1IpK3s6JEZ4fCYpfTc3dUtwVTZnWm8qOjhDUlN9JjgmNSh4PEZJfT1UI1ZjKGtvb1dJc0E3YXVoe29kTU5WQ05rQ3hpNXA+LGVgeig0LF1RN2tmSCFiRns6fS47UUo8UVBuVHVIIWcqRXRkVWk+VUlOZkM6R3ohMyFNeERbVCpBPzx4aUVicVo6ZEFTSFhAZEIkPip6byt5''@;'; put 'put ''fl9YZmM4KzZaSVYoLC8vUFBpKEdgRnopSCllR15RUWtMJDJ0RiFMZU12Xm04QWZANU17Izs8InYxMlciRGBMcl5dZjYuNEh7JUUlfi91b0VGJk9icS9ETz41TUE6KWIzO0wvIntPTV5+dDY2aC5nZ0kleFMsTDp5aCJldkh6dFklPVgrYVFeUU1RU055ZDNUa0olaFNEM1IpTjUrY0leJF1fO2xn''@;'; put 'put ''Ykd0LmAhSzxKNk5qJC9hQmIrJT1LZlN7bjFASWFfZ3d8XlFaR2t3KFd6aVNCSks2alYmckpuIjY8eFRRcDAqYmdxdXIxfD03OUAiP0tTPXlFb3VNNysuQDZJe2FAaXl5Qyt0X0puYTpgfipNNSR1ZXFgQ2U7WkVScEVVcSYyNUtwLk0yblQ2JnFQbG82fUgweWtzZnpxWWA+Y2dVNmU1UDtjaURq''@;'; put 'put ''JVI2dCVNcis8T1MlYzRPeUlEaW9VRXVfVD9MJX4+MkVUKkt6a0ledCFHZWl7RTtpfUNXR0shNX4uZ0QpQHNAb2VvWCojaCJ2d15hJis2U20hSko8RldFaGxCPF9bTC59MGAzfShrWUAvZUAmS2AycXBTZiQ/X2N0byQ1RyYrV3dwbnozTi9AeXBRR1o4TFZvMUUrQzd6KWk8MEgxND9VPSFaUURI''@;'; put 'put ''cT5PXWQ1UXEvKSRSe3gsITNJTjdtQ2IvNlIhRkVEdjA9WSxfaVBOZHNkWElJQWl1OzNfNSZ1TSJBXkFSRzN0JikkSSR5aEJ6RyIuYE0sLjE+R1p2Ukk2elVtZF0ma1cufFV0eXg4ZGs0TnxTQGZaW3RqOCwhV3spVVl6Q1c0QiNkdllxX3hXbHk5O18yUiNnZjhqQyloWVp+KkdWSWk7bWV9fWw9''@;'; put 'put ''XjQ+K0Z9IzNmUjYwZ3kyZzxiL0U+NURiKWlBUSFReTg+OkhZdiI7fDlKTVA3YlhNVVg5fGp6VyFbR1tpLCFob0pnIS5PLGljfWo2eUc8Y2IjRm9ESjpQNlA3IUY8KixUeDNiaEYsdUdhdnV4WmNOPzUlcUpbOnBZKE1hNiY4fEB7bFpbYHdUbVlEWi9sKV4hKzFudy5aSzIzOTRaRm1BczM7OnA0''@;'; put 'put ''bjJRJSsxPSg1Zj1DJDcqUFFdITFHUUxzb0Upbn5EQDZZJUBva3IsPFEkJVNhdHEmS2I6TGVgRn45XTJHZiVuZktHVXpiN10ycXAuW14/TU43SmZeK0slKzQwJkppYVsxSyJqaCg9aW5dfi4wc3Vwb09nL2UyKig0LDFfRD0jUlFYQ35gU1o3O0lveFBTQjswa0k4cEVfLHxFQGE7eHQrKTtiO2xr''@;'; put 'put ''LkRwQW1WI0VESjE+bCw8MiQpdWBObygzMTp9fXN5Qn03LmohMnlbeSk0TkhEQl4zSmQqTHB6Om9TJUA7VDpScWp4MHVVPiVvKyRsQE9heHluJDp0dyhuLipHXjQ6V3tSMCtFPEFSe1VgR2hkPHAqX0daIWxYU3ZfKSkoOCkpUEl5ZVAkYz9mciNYPGF2TmFJOls1cT1KT117dytrYGAhRzZpPDE6''@;'; put 'put ''NjEpVkM1PX5HfEQ+ND8/ZlJLKldWN2ddP2F5NE1gUnJzNkZ1RnYyS01GS1doYkBENEZFW0NUIS4pXl4/JEIxWDNAT25FI089SEE2QWwlSkxFVX5Xcj1SMXViJE9kaGpDZ2wrKHNoWjs6UE9+M1dVdSRDVDZnL2BQWyhYU2hOUiZxdWIpcmIsQHVnTGtkLEM6I0FgS2NmLD8jX2M5NzIqZ1godHw+''@;'; put 'put ''JF5GSiw4IlVUey4sUGcsYTRjdEYvNDRYJDlVUSgwRXsvS3gvTGdZanE6cV1xLmBbTCM1UjI9SFp8L3Z4VD9QMG9lKG0vTCUiSylRWEBIaFhbeH1uVm1nbH03RGFJa0JAJitCXUlCSDBaN018V1BtSm00X0BFP302KiNobj4sOjlLKmkzLChmWG5kP2JkIipjMldmVGpEdEQ8Tn1FWjcmSmw5QEZy''@;'; put 'put ''aF18KDhkPC52M2h0aTtYTTFJaT8wbTg2ZW1lUngoXVNoIjZYfnExM35MVCVxOjdJMXxRbHVGWSZaL0I9SmQle3V5NUovJCFWW1Q9N1dhQFg5bEJEJSldcitXTUR+IzY8WTpOanV2SSt8Ul9SMntbbn5kQ25HJS53fChzIzcvVkhnIUV9djNqXWtSQDx8a0Nxal9LVjJ3VTYkRy4rSndRfkMybCtL''@;'; put 'put ''ZHpFa156anVjcXcxSko/PzdZeG54a1AzSkZfYVF7eWIzaSElR3ZAVzBXJi8sdT1IMH48Rlc8PldVWX5LdHpvLDB5S1MkNSF0PzlZSV8yIzUyIi9WL2dSJGtkV11jejlDciQqSyR+KTk3OEV0VW46cHMoQW8vRCU2clAlc3wpVEJXO2FzdUgpPCNrS3VNKUtfNio4aU96QGxieXlbNTE5al5rfklP''@;'; put 'put ''dE8hUUVRN1k+YT8kPElmLD0mTSUlfU5PNSMyOEJxZEJ2PFBFdEFGe11jdV1NQ1hvcDY6OmUrLjdUfnpCO0BVVWpKXl9UTzhseG46TyJGPnk1Qlc+d2pAejJXPU0uXkxqOGcrRCVkdGI7NmohKnVMbllxbTteOVlkaHB9UmxiVkMuRGV1PiR6fTtDdVlaa1tuKmNLPH1+R006az4vbHZkQGA5V2pA''@;'; put 'put ''MHwiMlo4NmRlMWpaakUmQVlZTl0wTUdRcSE8Lmp0U2I2NnpCQ1MzMV8ocT5UKFdeOG1yRTYlTjVTUVBpZyl3d1NIKjRUUWFyNjdaUVhtTXVpISYubyQ8YnUhTjFaVXFiZC4xXktYMmVgXVN7VGJRXV5XKCx8U29IfVVyOD0sQU1zOlpOVnBWOlQldFlyd2JbZ3NkPDptX2F7PHlYV1QlUm9gTkwl''@;'; put 'put ''IWZKdDVrbTF6RWNPeCt1NF0rdXpDc1d+U0thVCxKXmU0NWFlYzRMJXA8YnE+ZE5wcTp7UHVjZCJzY3t+fk41YmZDNkNrQlZ8bykkMjYyaTd4TSopdEF9bzYqR0x4WEhNKlN9L0J9U3QpLy5kcnF7cSglSWxUUnlVNkNfUUJOXjx6PkVdZ2U5fGNPRSkhYCgueURJXmslX0g3X2NVV258cWlpZ3BW''@;'; put 'put ''IlIsNnkqQigjaVZ6fFRyPXpWOExaZzB9T3JvaHEiZU8vdDs2cyJ1YGdwZH0hTUkuUU9wYktMcFcpYVFDWnl+UCExQVFbbGxpQmRfVnA4YzlfdiQlSEdgWHdHO3l3cS5lS0FFSUxhbVpRd2RfW1I0Z3VxITU2QDN1JT5GZ3IucEhFVXp4QEZDaDQheG5JUGloWWQ/TyJfNUI/TVkkJGZuO2luRTBB''@;'; put 'put ''am8oK3E6WmJBRWFObG1NXlJwfU1gVyI8T1RDXkNqL2J6ZV10Qm8pMFRYfXpzUW1VeH0hIi4zPmU2dm1aQT9uZWk1SSFEUCx7NS4uIis1N2VQIUM+ZTxhbk8hSns6MFE9Ji8wUXI4aVZ4P3x4T11yaDlefTNgbng+XisweDRKPDMhTklMdlVeN3VeOEQ/UGg+NHpRUXlDMyU5eFtCaGhTOFFCOlNH''@;'; put 'put ''NUMiMnhCVkRwOWlDLjdKXW8scyFddT47IzpfNE1TO2w3XyxLQnZVNjdpZyUuejloTEA9TnpQd0Q2aHY5T0czSUxxY0pkXUpgM3szVkprYVF8ZEVVUWc+TjBOem96Uk5SIV1CMD51LHteYnNrbnx3MUgjKndzUUFBPG1vIn1jIWciM0cofD8hVWVbenpjT31qcG5jYWBkeT0yUEJUbGIhPEJRYnBQ''@;'; put 'put ''YS9XUHNFUUIyX3taZS9kOk0iKV57V1VzNlpASjFAVT8uRTBmMEFEVVRSWi8kWmZsTyNKZ0FYdVYrdiNTS1dyZ11jQCxLZDg4cS4qeWBVLHNpS3dvaTM0Img7PldAMzxvfmV2XjVXXip0QU9ieG88RDdLZE1xXjpGczpPSkhmV290IlJycyI5NzpdcThAfjFaOitHbDcsW0hPfWxKVXMvJDhGQE9i''@;'; put 'put ''QT82Snl9ZUZ2bFVxbEJFfW18PD1PNzlhRn1FeHJLYWlOdWddSjoxdzNwPHttNDl0UHYkUkk4Qn1tYFRsKChkbDpXWXQ8UlAjPDxLO2FxLyR2NyRpPCFwNEl2UG5FVWlvVl4oYlQkWWI2PXdRIkNFS05kYzFENHw/W0FlMyMqS2FjU1UlWGhfYk5teGd3TnZfYVhFe2E2MUghNk94Xkd1bU8mdWpL''@;'; put 'put ''dU0qZXdJYWE4TjdEPj5AP24pUEZeaSE/bCZ0TTJDVCZIdXUyOT91ckksXytMLzF4TmEmTUYke3szeTYzL3NhTEFPYjRzS1pqMWRGVTxEbUNRVHBQdzxlUFJrQ043Zkx0K2xTW0pKcyx8UHhETWQ0cyYobjFie1Y8eGcmSzg4e0BkdHRZc1t5fEQxWUVSeUo2QnhvRENzT0hdWX0zVXh0R1IhOSQ/''@;'; put 'put ''NkZSbyNeQ19UKVtPa3xfV21hZCE4TX15ezJvalhPTjUxQjVGXSRoMTl5QzlQdm9zdGorNWcsc3pJdEtJRCFeN3puN2dBOXMxNS80RzojKUVNT1E5ezdpR2dUNDooREJCe116JnIjO1gvV31yV0djMDBWOnhvcno1PVVARntYOjdRJXx2QC8idFp1Q1o7ZVckUG1eOkFxREVAOClnSklKUCooL2VC''@;'; put 'put ''bmVZI1IrQHslXmojblkwS0IzYCs7dHE5QzVPQmJebG03KSZgcWtUKjpOL1R0SzlGRVFxZ0dQKXZGb0IlbW9fQV1zIVdAcXQ0L3lLJkJGbSk5Nk12U2xlek1IbFFIfGcyJiNHbnkwMFRVP05YdSVTbSw+eVtDZEo2e29ZWl8ybSt4L09ZXTF2XWZDb0szZjV4VGU9flcxdTd4XiNQQG5rVzp+MCx8''@;'; put 'put ''fjc7OkZCQWJQPHhYPUtqaGAlaTNRTkl4fTQ7JmMwUmopY2VtSnV3fjNMYlQoUCwvQzIhUWF5e0c+UV53QkpiIV4+PUwhSmtyKjkvV1Z4IkAiOm1dV1ByeFBKcEJiVCwsM1JtTUV6enB8WDtrb15ASTY/KXB5WS9VTGQjPn5ndlF9QnBAOy5MZjslcnN1Lk8vcWh9THpbKit4dGReTE5BNiteIlFm''@;'; put 'put ''V0JtJDMlUUM9TjBbVWlVTTUmcUZrOChnWShUOkp9QjZUSHYqZlNQZGhJMUt8RlJZbUpZK3FlIk87cHVKWiR5VWZVL3dNTks4Kzd6ImNJdjFWWnBJRyZ5MFI/dDJOZlpjJDRWTlsvQyFsdUJ3PjwhTT8icnBEaS9fTG9Pe05pOkQ0T3ZHanpuIzE4N0M7SVczYGlDaVkpZiJsX1M0ciZGcFlVbSZ5''@;'; put 'put ''LntVTDksMUN0fkM+KH1nZyQpfUd8cWN6ezwhOkBUODt5JCtaakVoI0FgXmI+XUFdNSJsUGU/W3F4ITAobX5jRTYubzkwMUtka2IjTjNNMTVXMHJmRHBrJFAkSDtXeW96U0E+JCleX0ZSUmU+PFEzWEB9TXRtNkNtU2JWdC5IJGojOyRsKm89XzlqPVdYa1MzTGhwOyw/U31kJVFldGxvaV9fbFE3''@;'; put 'put ''RU1bQWUzPTt5P2Y0LEE6XVF1RyxkLltgZyZ1fmtjPUQqYVFnNTNjTTIhY3dsWCFeUjhnbnpgUUNRdkljfWpZIUZILHZXVDgmV2A1MEVRSndDO0hyNTJHKiFzYzJefm40ezg6elNkZnlRNm1LRzElT3pgZixzbF1bTCYjQFcybVp5XiRtaHhLa3A4S35VJGZ8STlpLmhZcXEuVWk8Z1ssPkt+cDdU''@;'; put 'put ''MFRJRytGdmJgaEAxRjwpPmdeUWk4ZjxuR3tiLjtPYjticTJ9VSxFSkNuTGk+MmFKe0MyLjNtWSZkXWlkR2hOfno2TDFldnZWS0dKIXpSTzdSIyI0b15xekNDQ3omNkhJV11JOThwNVMvN0RnIV1QXm47KD5Qeio0aHR5Oi9dYDBjLCtueSYxazFwfjFnTDtrfC8qZCM1VzV7czV6TENsanYqNXZa''@;'; put 'put ''Vl9TRVtiRENzLEA+ST56UT47bVExSn5bWTU+fElSOUpHcnJYfE5VY1RWZWJfPmpwTWppPyVyX0ZEM0JTVSQ5R0RGMStVTF4oLkFPc0JAZ0xlIyYuJTdaNjVlNWozL1RwXTdjQ0Q0Iz4zdixuay9YVGRFRWF0PDBHZEA4e1RqfDgsenlNT08vcDtfSzlCOTNocysoYWNpRHZRMmg2SzJ2P34hWjlm''@;'; put 'put ''Tyl0Xkp4alovSW5HIVNaYzVZPSp8bVorc3UkcHsyZGhmWDR1Mnw1NUhOIXU5KGc7JjFFOldWTzhNRldKSTU2TjMvZHk2NV5NKHg2OktCZ0xqalJZL3A8VTVyNzZXKUlgRT9EZVFKfE5JdE8xcURtRz1oPHc2NTNOUT1pKy9oQkJwaSt+VFVpQVZsPTdMfjQ1dDlUPEIlZEBIX35OIUdQb0tzPjBo''@;'; put 'put ''WWU0V2xEZVhTOyU8PGBDMGE5OksuUWJrSzM5WXhXaEwuTWZ7ZDNPRis/dVNkdmpZNytiPF1hWz8mdCpBUHsrPHldNEZwX2NKM29FbjQ9IyhJe3Znfkk0RERKYCkmM3lxbUckR1J7a0pGbSUweGd5ckJAM2NKNiJabFJNMStpI2FKZmJUPkFCbih3SjooKHx0b3VpeXs/bjBhUl8+VktFK01CL2Q9''@;'; put 'put ''YUF0NnIwUUpEeTVOfE5ULnJ9Qz5KQ01WbSosQ31oLGxfI3M/PntfeFlVcUBbOko9XlohaGg8QlNjLG53Si9WeW5ITyNja2ZCQWtbUSszfSVmKj5PT2UrdzZVVkZPMCE7PyMyU0NufiU9PWNrTH5JXVk6V3t8PiYxJlpLQk13aXtXYHYiPUBga2FnTiImL09EXkc5STlwdWd6I2VLKDtZbGluSVNG''@;'; put 'put ''dE8yezleZzNrNmkiI3RlaEVUMFM4NDQueyRHJHV4XUFUSX5xfCVoMHxOOEljRmVSdnkwayNTMHc1LjgsaW4jNkAsUXx9a10kQSM2Nm4qV1pjJUJaPGVmcSI0dExMSTt6UylBN2F9M212SigwKVIsMn4wRT9ET3M6JT1oKTt5SVRlOjp9YzZRW1klRSk8QHxHdW4zVG9sKENnWVpLcSZpTCEyWzZi''@;'; put 'put ''TDlqLmg+YzgpbktCI3pgIT5PLDlOJWpCT34sNio/UTk/d2YsVyFyQ3N7W0wqWCpqY1FqYGJ+LjRkUGkmNVFwUks4ZS5gIkJ4RiEwKzRqJU5xa31yZ1oiMC9SdiEyU3ttQC92NTM6XUYjQj1fXTV4cjpQSitRcnBvaWJWUkQmMnE9P1FWcyZHcF0odFhdcVNSeGZePlRwZm0yXn01fmI/NnlKZy5k''@;'; put 'put ''QEZkTSVra3RBSEBHPzhqWXV8W1E3K3cmQkxxYTtKPkU/aXl8Nyw9P3AoIz9rbyhjTj8mRUQxNEhoVGtfO3I2Z2BkZUU4cns8dHAmeCVod1tTLzpmcXU/O1hyN0FkQ101NiVPUE9+fEE5bHRsZnFbWjAuJH0vSjxWSi9eaDZzPVY9MkJ3Jkg/Y0I+aGtuJnUsTXdOKnA/endVdGlhKVBUWllpLF9k''@;'; put 'put ''Liwyd18xcWFDTShyMFQ3N2MrO0g+ajlpLmM8SUZBdDQoeDwsPFRlJiUxMkY3Yj1EN35EYFlOJjBURks2JGRxN3k0c1cjYF0vJkh6UzAmMzdjfmFxS2dleDpSa1NRJT42cVBta21AUl9BLzdWM2RCSVFZeHFuOSw3Vl4rN18qJGU4O2FZJTY3SnxnKEhaTTp2PnltNVEiVVMxbCFbIygzfk51Q3Rw''@;'; put 'put ''KVd9N35oIWx+UVpjQy9Zb0VLTEUhQ0I3ejNVbzlTejYrQjJBRXw3IixRQGtMKyV5V1YvWy9Ea1AsRFkkanY6JCJmdXVBJjNmZlQhJiF1MkVNS3pgKjlue3t2QHhAIzduX0J8YVB7b2RKaCVBP0gpUCpXeGF2I1tCX3NXbCQ6diVITWNWe24xfGkuTUR9NWA9OHlETDtEb2kzejNEMSswRm1PW1dV''@;'; put 'put ''OUBbWHA3Kk4oeWZJX3xOc2Q/L3RWTU5UanI8ZG8uS1R5JDZNYl9YRzx1KWghdixDMCliWHk9Z3sxSUdjMXl+dXIzU0dgcHovZUYzd3VsZzRPM35vbEovbVMwUXl3XlF1Wz5aXjl9TiszeU4qbDRdUEQ9bCxzd0FYWC5DR0Urc2ZUWl9hOkMjL3VhRDZBW28iT0RjfWZzOkRPbjQ5WiRgeGVyNmt5''@;'; put 'put ''Z19GIXw0UGAveGN0NC9vel8+UnsuVUIhYzhPaHZnN1EvPkxKemcuaER1JmJ7eHpacGkuM2RwU0k3WXoscEEqNXg/ckRKTHVRY1BHW0w+PHI6aWMpPmhCPVQ3RkkvO0pBaXVpNXRbPXooOSRlMkp6XUYvdSpJenQsO3hkYndJYEV6UHtZSXssV2lAOHFidjp0KDlqR2ZQVlNrOE5iTk84Vis8eFRR''@;'; put 'put ''XVQ4dz1sZTcyW1NUam8qQU5WfUJZTSRfZHgxeUpVfWY8O1VNXjhyXUc9aXwhUkJibiokNUtMa0t4MDQoaHx6YzpjV2lxZVlvZHt8ZVpwOlYlRV9UImQwOkouMTd7ayhsQGYzNWpIOVt4OCYlMWhUT3gsTzBRWCshdXlOS0s/JF1HbTY6PVgwJWpYK3lgQFFuXmB1RDghOS40SFVue3hCI1trOGky''@;'; put 'put ''e0hLWGg1e0plW1tjKTRxO059W0VOeUJ0cVpPWFl1fjVCQUBgTyt7LHZOOkZUa2RARSxQKHEmKWA1MlViOVdVeH1DXiJDZFBGeUlmSkIqaWdCQ1clKVJaVWAwT1E2WWV4VGhxNyM2MTtCaWtwaWp+RWRONT1ZTl1qam8zUU1lQGxwW19tTUI6bixXYUJ+dHZuU1IoZjo2a1dDUT1IZER5fCM/Oncp''@;'; put 'put ''QSJKbCw1JWlJNTdwPzZfdEZ1bEU0aDJmVH4zUzYva3QzL25kKyRQQEE3ajhjVGJVeiZkN3lFdjh4Y2pHTG47bSVFU0NyPE5YNWApZVQzfndRSjlzUWd7I1F3dWlbb1Z0JSFuOlovSkZQNnJsWWpHKFVdOkRLd19BfWxANCRqflJSdkhBcTcrPz5LX0xtR1h4KFRjO1B0YWUwRDpOLlsoWntVMkpi''@;'; put 'put ''d3Z2OjZZKSU7WTAxMWlnZkR6fUtqY345LFMxUD5nfEdTJnxaQkRzLzRaPGRHbGxuTjZyfkwrSU16aHMuaypmR3R0JjRLayN8S2cofF0sVyhwbyhKUV1tJltURTJkbiQ7PnJ5N3BjQngyeWZ3VXZid3VtW2NbYGtMRiFaU3lqRCUmbmxIXm48MkxySWA8dnRlWFMhfkNDS2hxLld4VWBwJHVLTWAv''@;'; put 'put ''SmN0Uilbb2tWOm4lWywid1lDI3JGI2ZoKGk8JD0iTE0/c3c0MERbVCEoIyg8NElNXiliQz9vS150TTZ7NDheSjVRe0QpUyl3byo5KnFSNGpuaXhuTkFvVjNocG5rSGl9cV1FSnJWMjRYdiY7MHxrNVtSOUB8JSlsU3U5NHYuem07aTwsYi4ya3wyfnY4clA2MFAkUzNdYFosd3hUPFZiYmYyOEl1''@;'; put 'put ''YCg7IkFjSTJPUyxLVzRrUkVvL008YmcibHt4UVFzJmtHUEdGNy8vSHElISM5blB1ZyRdPSNMI1Z7MjF4a3ZtV3NgRk1JcWcveVhLbG5yOTE+NDVjOkpeVy5zMyQlbUBQI2tfSHN8e31bc200QGVORV9GMn1yUmBVXikoLiEyOlAmemZGdkFjQnw0MzxbX1hPODBYbloyX2Z5X0xVdHJBXSlRViZr''@;'; put 'put ''KVZCOjNJfWZkL3ckSS8hN2VITUl3ViNJW3N2JXVAVioycktkI0lkK3YyR1lyY19uTTYrST08Ny9WVWBGUDhlaV9AIVIiPmBkQzY8ZndjfnprYV5beWcsLypRb1U1TGdNeiNmdCQ3clhCeGFpX0Y3KExvd2tHcTR4I2pwVmBYbCFIfiNpbC5UTmhjQGxbY2s1aHFdcnZ+ITc/Z2gmYiV0ZV4qK2V3''@;'; put 'put ''PStdJDlwInhObzZYPEU2ZFNEfCVWXiRZWm0qLH1GX1I7KnpGYmUxdUZzenJxaUtbZH5IcVljZUs9KH05Wk18c1FgVENUPS9YN1I/Zn4/W018SU0uTUM0MUReTlZfPTEkb3F6NUN0e191JkI4b2Z1T19+P257N3ovamNrSUo6SHB3clBvTUJjXiM3YT1KTHYkcmI2fjc3cTwkQm5fXyhydzUmfDRY''@;'; put 'put ''V0M2MSYsUndBLEE7S2ROI2swS3lqVkosTikucSJgeFlYajAsIiI+fWdFXUVxX15DUC9QVU1vUS5ZUzw1c2JlL14mKHkhKjBRRFh9Sjt1US9wJGdCWWU4Zmg0T34zdHthVyRqSH5WTFRtaV9QW21HKDFdRGhMez5AbGo6IS5bXk1ndFtyW1Q1YVllOEtFXmQmYFsoOjJGQDtbfnoldnhQNmpYO11j''@;'; put 'put ''eTArKD88dmdjcDFkO3FnX3E5c2Bkb31KMXplNylQOnFuUWg/QHxOLHF5YS5NPUxSe10uayI/N1Z7VCU6eWQ7MWdAVVZpbStxOj97eCFZbi9iYl1pSyY5XWI0WFtRLGFHMERkMFk/Km4yU0ByPkhrIkF2eFVLKmloeHpEUCwoNl5hNGZ6SmlNSCkhb3B+JnVnSWZ1Wm9KTlhhcGo+LnlYMDVaNG9D''@;'; put 'put ''YnpvaDRFdUJEfnNkeWxsMHdEeHFCczgmRHo1N31sZGNNSHhbU0JFaSsmeWk9VW50YzhMXzUxRVYmb3ZGdHU5US8hM0Q1LnAmTkMrfEw1MSlSKix+LnpVanw/UjRfYFZwWmt7bDJWZV1PQkgwfD9HSz5ib3Y8S1kqZyosTTtoK01Xbi8xTm1gfH4se2VOLiIqV2liJXYka08kW2VYeV1AWj5DNixY''@;'; put 'put ''fmd+b2xHIVtMUCg4Jng1MjM0N2tlUDF9eGIhYXhndHsvO24yJVR+XUBGPCZxbXBbXnRwIl5VcFdGdXZKVXpTUjxWcFZ5KiZeJlZSLCo5Y35oeTEiaTt3dCozO0x9MXtgXks5OENIVEplTkJARDpCX31YQ1opdXZHW1YwLFUqe3hpX2BLKmooWEp5U2liXip4OnNpSm5KOXFgYHA6W21lSEt1aT0z''@;'; put 'put ''Q2dXOmRiWFFLME0vXkZseWQhSkpEWSYuSDdYKSJVO1AhYkExOmhZYFE1NzFmTXNbZEg1LE9HZVk4OGMjTzBkS1tPXTgiImxweSZhZSJvWl5SKyYyQ09ve1J2TXtmWXUhOCQpNWNFKEJEJjxuVjckKnpZZW9SKFkwMUtuUy5vMmhUYCNdbiYuRC5DcH5vSmZLUUJPWCNjMn52dHdKaXJlMlhUTDt5''@;'; put 'put ''VGl6bH1tVk1VL3VwaGE8PFg8R2IqVlQhM0lgMllgbTRxKGRSLEVZQzx0SFghO2VgQ3ZsMGx0RUEjbCxubFQ7L0wiTiNyQjslc0h7NSoxfkVSaj9ReyZGa1tkYU4rdUdoLzhiKU1nO24xaTh0aXNzRiYrJVgvOVt4P1RMMSwqW0ljOk5iUmxuOkwjWkxhXT88IWw7WkRVSEhne1FoTT4wN0oiZXB7''@;'; put 'put ''KlI5ZD05dDJJZ11pZj5+WSExNXNeW0kmNj1wNGVMXipvPXwyfkAqYVBYLkowKUZsbiooWDFrTmw3ZT9XT2orcCwpMWk2Zmx9RUM/dEtSbVtNJk1xKlF1O2taJEUibnp7bEVmYHFgaX01LEFVSnVRSVQvQ099OmtPSlA8VSNIZiUqZjs2W29rcSZ8ZU4vUnIsPypnTF1te3BZOSgwcH14U05gWFVF''@;'; put 'put ''SXBpfDgrVUR8YTpFPzk2aEBpWGdfXjtCPnU5KlomKGQ2ckRxTSYiUF9RSkZ7YVI/ZUY/U1FnJnBkJGZlKjIpcV1uT1JhSjIwe0c2SWklYEomP3U9KmljVGljKzBYaFhURURQOnV3WyNRUTVoKD9OVXhtRSNMbDFQYHJlSTtfaVM+STNkL3cuJSh0TVVqYG5bUiQzZlVHMzAmaXFaWG8oRiojR3Fi''@;'; put 'put ''di9BPDpzZWE0YjA9Y2V7SSJUWnx4Pi9xP35pL2god3RseCJwRy5fbSlvdkohUzEwNmpCXzkoc35vPjFPa0ltbER2NU5vfVEvdmJjNy4qVWxuaXVGKW9iPyFFIzlpdVhOIzkmUnNUbU5tLE0oTisqeTE4dF1NcUNnYiUpQ3FDdyslaHgqJWlFO0d6JEJzTDlyQDtzQC9LbkpgSnJBZn5AXmhqNSN1''@;'; put 'put ''KWZIaXR5RHEwXjFvc1pkfWByYTglSW4uPTFlOjZHNUk8fko2ISh+TmcqSD0zdF5eeXRUPyMyaDJSdHhtflNhSVEqX1ZRal8wI0ghe24sQGBVNnQwQU50ZEQjTFtfQjklRUxOfVhzLzByYltuSkhjflZwSkVYSD1veyVnZkxjKz9VeGNCZ1RrTz4keGNmVGN2ZSZUYipRJHhIZ0BfOVJPcX0oaC44''@;'; put 'put ''PlZAV0AvQnM8YDgkRVBLMipSLkhwJG92XSw7MXx0Mz1+VXZ9Yk9BXT5RWz9gY0I3IXU1dCpkZmsmciZzWlYpTV9vQ0AzeENwT2NWRy5Kd083eW9zLE5GdV9sZS8kST1kKW5kIXk5NCptYWk1fUMpTEUxa2lzTmF+amkzfSVvP2Y3WWwlMypGdGQqM1BYcXJgJjA3Zj8pa0Q5fl9vSGA5UWM5ZTUi''@;'; put 'put ''YnRhND55e1R0bk9FRUJkRz1yWXBOIX4/R0lmKUQ/NyxdV2Vwbz0mRkJiSSI9Wz01OytPYFJFUkFZYyxXcUMkO2lGSXkqZ2BqO3AqKHZBKWtQSWxJYzhhczx7MS5JIkhIRTd2c1lrO2VqMXQqPSsyYWdIOyVTTzI7OyY7KyMkYTksWjksUyw4QU1GZS5kPl45fmUucyspOVVSUD5Wb0d+ZEV6UWw2''@;'; put 'put ''QE1zfWpHcWlHMWk0fE8pYF59fTk2PyZvUW87L193ZDIvT0kic2Q2cV0sS2IkOTh0QyFxbS5hcFpjfkslQiYzXm5TIVlhcShFK2dVYytGQS48VWdBPkkiTiJlVnQibl06U0V3biZuayo7R01IYnA9aDg4WiwmNmVHISV7SnxFMGp7TGVCdmlocD1ZaiVuPyFzJkc6Xn0hMkVBI2kwdDkuMSsxTCRt''@;'; put 'put ''QGAjbzk5c1JIWW5lUyEiQ2NaTHd1aiEiOihVVFhEekFqfDg5bkk1fTooTzN0YEY3WDd8SkJdTCxad2Q1W1NQdVY6NUJFfmFTMW9CaHBsYzkyXn5vKlFZbHtiTS5tdXlyYXZIPVRJfTAlSEc/YGw0TXtFYUFuRE5LSFBuMTIrbi5tO1syeVM+b2phNjZSU2ZnTDo9JXNpP1hdajZ4UFdPVTVPVDF6''@;'; put 'put ''JS9nRSNOKU4ie3V7U01gVEVIRl44SUs8OWQrPjJeKyt3amMoKDdLL3srISFTViE6eWo0MTh6WDNlS0VGQ3c/VXNbak1vVTY0VWBCQ0VtJH5DYS54MW9ZaXteWSVxUW5dZUVJPHxzZXJMSSFLW1VZQXVAI0RTZHs5XmVhSld9YCZaZHYxTEQxKnt3Vn1RaDdDbyEoLHBXb2BxTCx4PzxpWVlWem5a''@;'; put 'put ''YXZZaE5qK15VbjpGO2lVR05DJk4oUmZIXm9ZMU9JR3xGYSJuaVFWd1ZFY11INm5hamteYFV3U1pvOG0mflomM0BnYHV3KzpWVFZXPFE1Q0pOUHxIV2EzV0QuYWpgPUVYMEohKGwzOlZ3KS9sVV4jKVsmSSUoKSVkRFdzKWBLdzchbVp5V1kqTk5NUkB3M29Maio+LjhVKXR+QGpfM1g1akVfcXMk''@;'; put 'put ''c29CTz54dnJ0ZWlldFQkUjwvclFWMXI0Vmc6PH51KFdmVWElTC4mfFoqTnA+SWchXyVMZ0pVamRlM0Y4YWJ1d1ZPTyVyUXMzek57VD1oel90KzBoJDdwRGhUIUhIelA8JEEzLEE7XlBtfGIkL0RyRStHP0QsRjtpfW1ieGBLcXldanAyLmp7bENaUzV5QX4/XmRxWyt6XVUwa1cvWEhIcWdpKTYq''@;'; put 'put ''UVF3KDphfVo3RWByNERqVSUyNV4udVF8Tj5pLklte0IyS1NgWGFAYl56ZVhLTj0jXVtVXyNOLy5QV15IaG9mfSVNO0Q1fGZqfXc0W3MmOVZUd197MnVdSUVgZy8qUGosKHNzdmNNSXBsSj5AYUZGYSxUS31ST35nZ210ekdEU0Q7I2NrbHgxbHopIzBedTBwTC9bZWFnYmJIKiFgLnZQIWh4XVRM''@;'; put 'put ''RHxtJHA+VGUiODBDWmNldmI9eyw1LztdbVp6PkdkXSl8WFpGUnc3c3tPayM4aXJ3d1BlY3ZiSWgwVH46fHUpYkBsZXptNCFJSC8oN2QoKXw6TyZXNlAlZG4/T01UN1svdGNyciUzS1s9IT4jRzIrRktjKnBCc2dXSURoN2hOKlZLRHJ0bENDeDY7KDtrL3tGKGFIM0FCUTY0MWtHVnghaFdEXVBL''@;'; put 'put ''YjsueFgzI2YsTGsvU0BMK3ssSHFZPDgrPDtxZFpHQShzdFJvP0gmVDJ8eURTZy9ZXXNmSGo2MU9kXmcyfmdZS3R7YXNVLzZ+eS5BPFVCYzpMMTNhPngkOmtwM2E2UUVSUkE0MTlTL25OXWFMKko1OEwkUjlOeXk3fHFZTmQhYVt0NCNsUCVUT2siNDlkNTtwWTFFciVdKnw3cEgxLGt+eFlCSy5L''@;'; put 'put ''eFB0bnYqc3BiRUVJVDU7VEgyXzdIIXZ3aDViMF1lR2lqSDEsIyM/MTdVQSgjTH1TXTU2dTB7YSRAaXE5InY0RyQsdGAyPUsxIU1lTEpwU05OPXtgOlpbeGhlcHtzK09ETXQ/KCFpSTthLFljMUF0Vm1ZeUhka3NCeVg2WE9GR0pWayp3O0pEVDNIJU1jTmZfVVhwZnJgXnklcDguJGY8QGtyamJT''@;'; put 'put ''X1gkeEdKKjR1UWB0ZDNqVj1McUBtT1JkR3RoP19nSCpZSjpSNHIiMmYlbjExV1pneHxfNFQqZ1FaMEBfQntTdU5vNWpKXktSYigxcWMjcTd0Rnc6blhxUFdPfk1tRSZvYWp6MVg2a0suMHEsMSUlMzN7anl2OHkzUVopdC5HdGozK246NCJndEFobkQoMCxpUWNObDFBbCxZMTE+QCtkZSFwT0Ju''@;'; put 'put ''fDFaOHQ2Km9YInohI2JUST4xKWBAJT1afilJJVZiaVd7Yy5qSihXYjQwRWE4X2EsTigwKntGWXNqXzJTOEM+USZJfWNfXkBeTmJGXW5DTy4lTFg/NVNJUSl7eEw2OzAsaFl8bHBsQ29TNnE+JXNOLjlzKT17LmI8JXZIUmpKbGZCZ1N5K3xOcGZpMmk6R0d8ZCZHMSguKUkoazZeI2AuRElAPm43''@;'; put 'put ''UEtrPGBlI0BDKDxJSlhUImdhM19IKUBwOXprWlFMP3B8PXd3aGU1ayNUQjpRTFNocFkkY3JfLDgufFokdzZuY1tsIUs2cjpwZ2pPND90RzZSaSFiK21pLFB0SWJTeUsjWF9FeTd6QTBYcztwVldtQVdje35VPmhjM35WLmZTKEQ4RCZvTigmM2xlI2hIV3VUaGhnKjNXSTUqODA/e2BWa3A5SCpY''@;'; put 'put ''dChtVCRCPTEwNj1hWkt8eEhiQ1ludFZsfEp0NkJ8czw4ZEJzYm1KcFdFLld0Z3w0Mn5zOiZ4OWdeUVZnVHRATVJIX10ha04jTGMoTSw8OWd3UyRkOytScWMoZ11DOUZYLFdtbj9uODZnfiFeUHs/Q2gra0lVV0okKVE+RkpxdGJ0SExoSUQuSypAYT9jaThOWF5HNVNDWG9gSVAhNUI8Ym8mb2J6''@;'; put 'put ''MGoxQzpbYlFoZXxNdCxFbl1LRHZxLHIxTmZTeDBlaVJ5blpsUmJzNFI9bi4zblhgSk03IjRse2ppSz5ifUx3QClbaSpbXllIJlEqe0k5ZDtWUVl+YUt5SDp1anZjP0ouKXZFT34yPHdMZUZOMXFiXUBiP3FyRF5LM0smbXJhRT9kfVk3LFQsOzB+JEo6Xz1BX04qW3srMEQ+fEM1TFM5RzRDZSVU''@;'; put 'put ''UihwRF1qRiFCa2I9MWZVJiFNa3EyMStmK3t5b2YxaHx9XnNoPiZQZ3UpSDd4VGBXdHMxTG03X0VjVy9yI0lfYUZgdyI+aEF9dDhpLHczWzpybXp8N2ReLHEkaSlifXRJQm05KDo1e3YyfE5EQkNfPVNEbCt3fHZjSE1tYileI2xwPUEuRGA8V1BqI1JTVUY9MGJhYVt0SiYyKV80YDsyc0NqTix0''@;'; put 'put ''ZHE6S3RFdE4kM1VvbUpGdXl2PEZHclBJV340bCZtRz59M25VRz97N3gqPyZHIiR7TX5wMWRzdGhwZmwlRXNmTHgva1B5cihfdS4+MEojMFF5XSZ2e2RXOHJmQWFsSj07eXB+PWtSLj47JSU2enhtWHtpUyZCaWI7SU9jP2Y5clYsV1RVMG90RXozN2UoX24rcnpMYUxUO1tdbFckNDMwLysjKSRz''@;'; put 'put ''MTN6dUYxV0Z6Q0dlIVoqOCNuKSIwal9aUiFNYzBHPTdHYi4oViwkL2lnY3M+UUBGND1bQkZeeyQrSmU6Z0koSjdlWm9kT099KiUsb1t0fGNRRlRuUC9JQG9oTU42WlZsVzBOJSUydWAlJDYyZGVYRkQvUi5BVVo0aVNmY19+YkUlMUE9bCklNFBrbHdXSiI5TUJwL0smYl5CKm45a2ZtQHBzdytE''@;'; put 'put ''U1NZNV5xTytxUTY8dlBFK1hOKkU1RGZuVTwoOF0sXkZYRzd3eSN0Ukc0ISNCRS5zPE5OISYqTmdrTSYmYU4ocE81JkgqbyMvVGNsQkZOQlZYOXd7U2pEQXVETGw7WF18MGJyb0ovcnIrVD9SN3pvWFIkMiw0SShdZXk7Snt2anc3WkgrJl5BKyEwVHc1QW1gdVd3N1B2XVtMcH1QTEw9YnI6Mylt''@;'; put 'put ''IiVjc2d5Q0grK21DLjt1UGckRH15WjB1aEtiOCYhYl9jUWQjVFZ0UXImVnlBOHMqXmR3Oyo2KiptZjQuMXYvZ2ApdGBDUTQsWFhFX2FRT2hTbC8xZnlUO10jZS9sRWtHJEMseSlJKns0NntxRm8oUEFuayI2ez48K05rblJeKDE+My9rVjFTZWk6WGtFcTFlKkM2TFBZdyhsREw4PXlifTRJOylm''@;'; put 'put ''dDpoIkJtRzJPdkFtUk5EJnA6RiltSURZM2hnKmgmP2Q/bjRoLmh0SWZ9RHJDSTc2WUJkInFgUUdHIktXcmtmXiR+IWdHQiZTUnhmUWFdbncvQTxWd2FRaSFXaXRZMGZPSzNKeCM4ZkNNdkVCOng3TVtLOFlmM2EkeHVKe3tbfkV2VmY3dHFBP0AkME5WYml2TVR+ckZdeng2PjBWezgoRC59dUBy''@;'; put 'put ''am5ybWJsT3R2cz5hbDQ1djJTTkNqUW1SZGZhd2RkbmJ+PCpxJH4hLm1ucytZY3peUS9eP1VGeFcvPVZ2dU8/dG1pT0JoY0gsd2g9OEleYkJ2L3g/fHE9fj1PdHVgPmZOZ1k+PmFfdzNhYHd0YS54OEBkKT9XT3IoTFIqI18lRXxmQXptPSxXRF5MbkI4KT99M0x4X0x2WVVrMiJvfitXUUJeL3BG''@;'; put 'put ''Oi4kOjlMQzF8RU45THtRQiNebkdweExzYyEpTWlnNUJiUGdHNTR2LCx4RWh2VF9eaEg2ZkhRdjZ7NEU3cUVwTHVxWjdwWTZaMkhfKlVmQTVtTXM9MG99K0xTdDNbOkApUy4pdUVnPCR3YzsoUF9VbEZaeHYmX19fSHQ7U0gzXzNdNkNRKF5ScCQpJn06MHp0QXw/OnIkKl19RCEiSDpCKTVTNl4s''@;'; put 'put ''InFQVX57ITFJdElvRzRTI1pReyg5MGlFfTNvQUZFKDUwOkJ7ZiVQVitWeF4uISgsSVYhV2RwP355Y0sqY2c+LkhqbX51SCEvMkRfciUoJHAjME8lfltWLnhJcl1nWDdlL2Y6XlpDfml2Zz1ZL1AmRkVod0NDKlA4a1VhO2g9MTV7eU1FcDFWRU5EUFRUSD8/PUN+VFdjelpQNXwoWHAoS14/Nnhz''@;'; put 'put ''VnxSSiZVaVB0W0REVy5NVztdaX14fWJ6JS50UXFXVncjaVZLP0crSzdlP3ZLYjc3OGY9VzhLNGB8QDsxaU0qJE0oa1VpYHp+X0VYNS5oYVcuez8hLGJHOihNWHhlWyhPIl1EQ0IzZmMhaC9AQFdaTko3WVUyPFtaMi5BXUMvNnRAM2RhO3UrdEppNnxQZyZ2SHRaKyhrMEpNKFBhQy4xd105bzRo''@;'; put 'put ''QSR3fiUwWSNkfVAlUWVwSjVfcVJGT1BzIXBVK3haOTY+TjU7Imp6aG4zRGZCfX1fSF4yVWQ8X0RwSiJAb3cra3VdSXkzdyNHIyVEejwhYyEsdXpfZDRrJi8kMVs3RFV+Xmxqfn18JVlIeldvb1tlQ1h5ZUx1UnpdaVt9M2tTIWk6ZTMyeC5GOXAwO01CPFcufkFGe05xeEJlRUpxU2YhdzVXV2l5''@;'; put 'put ''b0dxMiYqT0JQUCgmN3AjfU4zNC9PS0hETXw5VV18aiFqcCZ7ITVwdUJdI257e3VNQXZFWy5pI0UucEJDMD9SaCtxW1VrbT1rTTk4Y1kzIVZsZ2BbamRaLlAhfEV9eV9VaEgqKFhPViJ2P3RfRWdvX0Iib2xZOStMe0NrXm99fXswSWddYSIyNkI2VSssJCk/IUc+Y3kwZXFEaVdNR1lHNDc4UXts''@;'; put 'put ''VUg7KSldNytpXXw8Imw/KEddVC80N0hXQHVLTWVgK3k4e3ByRjMkfCo6bzpbNDRaMDhsTUVwbEMubz54NmREMjlVby9uKWB9RzlTIyNma29zZkRKImc+TDQlTkI+PVZiUT16NjFsUzUiTWJ6RHVxVFMrdXtUWzkmXjpHYDFCPmh1fEp3PklLSnYhN1dwbUtWaEJYVCZGYCJUdWNJVXRAdlNtaFA9''@;'; put 'put ''UitlXlt8cHJ7TzBHOWV3Sm5iOHpQQHAiMTUycT5uM0csVn4yWW5oNlE5MmFXb1pIdCJ5d208ND0yNSE6M3gxckR8RE1saEpCeSVRUF42WiQ5X1ojP0suS3l9RFY+UXRNZmwyKFtIdk5xaCN6MnFYPD11MnlUfmtrfXl2fTx0XUl6TW05c2ZFMnpeYmBNSyhMdyFkJT0sNTFORlpOVkhQLkEhVyx4''@;'; put 'put ''TiJ+WWdKJmBnfjMudW9Kc0h9Kmk8P2hCTz9rKVMoRVhGKyk2M1dGUiZ9QVMqKGxBQHd+Ind+MmJRO1JHaCUicCVhQ250Pk9qVSNHP3xnU2tXaHw8UW9DeEsxMkdoNyRGU1pCXyh1LChnO05tPiJienlfWlUqP3wmOGp0LzRhUGRAK15GdXciQzhUMSlkJnNpKVsqd1Mld1BTLjRAKytMWEolRihe''@;'; put 'put ''ZyZ7U1U7UGpjPGteVXokVlRhUG1PNEEheXw3M3Y2S3hjcXs+SEA+SU1FRkZHN0luNkZPOUJsKTkhV1gvcTtYWypRUDVxKUZfUzdQVyUoNjl4azhufUIsYiQzdllvUlooTGVZdEE2bz0/dUMoRUhYNkVOOnElYTp3S2siNDhmOSFMRF5NUSk9c09FaUhuJW98OTx0O2tOWWRVdk1efXNGLmF+Ryk0''@;'; put 'put ''b0U/Kk9LXSV1OzRJNzhHcnM5PEYmM053PjZIR1lrZGBIQ2JKNntvTXZMIUlCcW9nelZQWUVaUSIhflBkOC9AWVZQJjlabWcySn1dekR7ajZyVntULGNGdT1IR017ZV5ZTTlbcigpVFo9MTRyJFRyeiVsIVhLaUckRzcjIy55eCE+dHRZbTUyRiZXOFVddnt+KWV8e3peQ2g/PDxUcTEwciVHSlhf''@;'; put 'put ''MG5KM0QrUDl7ams9IXhodVsiSXNadHVGSmd7RXZ9fTFwL1dPelRSd1QoKVQlXUNOM2BKVEVaNENDRixpdXhEcjI/SHN3MSZbJll7aUR+I11fNmxBa0hjXiV+Wj0sfUheTEJxX2Y7cHpTLE1FTHMlJiMrS187fXQvNiMuZXJfZl5HPmVdNlVHQiZkZk97fXhKcjU8JHxBKTZMO11dI2FFVXEvWE1P''@;'; put 'put ''L1ZFKnlwfm0hXnNfLEhfPWJURXJRZ3R2S20yNTdNcGpjWjdUaCZqSUZwcG5wWnJiKD9RIXA/YXJbbihXQnJPSy5AZXd4VDdiNmtzUHduRlohUTsjLGolfSJmU0ViTHMufk91I3E5I2lRMkFdQCwzIjc+Uy8ydVVKZ2NNOn1+T0dhWHsuQHg8Jkt3UE9KYGBafSRgJSZwZnlFNHdKNC4hN3ZiL0t4''@;'; put 'put ''PCpVVnImRWRlL0hvKUckOyZERl8yI2hUci9oI1NdUiQ4SV46Sm88PmcpcGomNlE1PE1AYUBlZTJ1SHtSVGkzI2UmZjsqZGh4Z0UlMy5dVXc+cTM+I2RrX11pVDRiK1lEUjJpXyx7O1k5TGxkYSFhMU03SF87ISM/VjQ1PG1fN1lYS3lOfkxGTFRbP2VXUURaKXh6SCVAR0NlJUYzOEZgKExnfTpb''@;'; put 'put ''cGs3SDAqe09XIWVRaVlCSk1TczRXWnlKTnFuenQxQH59dj53bkBTSi89ZjJ9JWA6fHYlXTV3K3BTQGZMRUt3MjpkelZGP30kRyM2ZmI8Q2F7YUJ+OHp8XT1AW2E1Xk05anZ2PUsxYWNKa0RER2pkPj0qKTx+U1F+N0J9anJWTkVbQkVFU3Epczs8WmBULllGKEAuNnI/WE9jSTwoaGgobnZSSi5A''@;'; put 'put ''ZU9PPVBJSHwoaHlrVnIqUzomaUFHWmE7anNkI3BRPC5pKSxTbjNmWCxRdzdNKzBPRGdQIzM+R3wjNyh+VGZMYFlmWmlvRmRIYUJOciMqdDwjdFZdJT40aXxpQGJMeS9ScT4wSFlsOVFbQT1qOWkuJEBiZEF+RzVyXnRwUihCY203OHZJPDBaeV49WCNmVVBSPWk9ZiR6aXVlPFpteFMuKFpHMD47''@;'; put 'put ''Z01FTnJuSjBBeUhbXix6SFA3Jj5ySVslPSJrRndaa1JiZXI6WW19JURKfkFwIy96OyMia081U09acTs4IUcwVDJkNVJ5YUZuPX44UnsuMltgNXY0Lk1DRH1vUHQyWDNIW0hxbnRdOlY7YDAreHlBZnYlR2FoRVRjbEAhcEZ8VG1mPExHbCRuIX1eKmk5anlOR2I9VFp0b11GemBwbC4kNll1aXtw''@;'; put 'put ''aSRWfVIvWltwcWJDZytWVmJ0O28oQXo2NyI0UVQpPkwkZihSdzIwJDNUdHIpa2lGQGx7Y1lEV0U4RjZoQEJeUjV9Wk50PEYiODs4UkRLW2Y7YGpMTHo1Qy53R1pgYj5eVEdtbTdrcVd+dXh3YUR4Vyt5Q3xHJU0mZTxdcFUmQkRCaXx8Zj9GfHYqQDZkQ0B+TC4lem5QbC5UNVVbMWwlM1MqZHdm''@;'; put 'put ''d1E5VXBITjdeL15ARSoxUmlKPXAhaD49REkoTHVyNSJzIWlsYSJXZFo2ZmUrU0lkdSN2anBGQzFjemtlaXVrXnRKN2FVKUFuXU5kUzNiUCQ/YmR9TlFdeWNVYzZzTkQ0UVhEPD5yMSF7WTo5dyRweCVLYWZKPz1fbmguK1ZbKnRVcihmKylPNHtFPEFuMU5bVzl6cVJzYGpTTjVpNE4lY2QxKyQ6''@;'; put 'put ''fmxwNCsiRFJ5WTRWKGc+dn01TTZeNys4OjBjOStjSHArfHJ0e3smJl1VMixgLEE0aCVqbCJqKF1oX0BiTG11YzpMPHMvJnN2SGBROG4lRUQ1a2NnfS5YanhLYkpmJj1JRUJlakRFP300ez9SQkpldWs1Xk0wOmV9akkyVXgyWTcsVjFvIW1WI35gfigpYUNefll7V0IrQHxqdEVyZi9WOmI4MVV+''@;'; put 'put ''WFNzc2s2KD1xUTppbnNrUUx3ZDdWTCkqN2Y9I3pHIz50T2c6cn5zcjY4KG5gLjpVIlNZIz1JM1JpemcwNE57MGp2Kj41Rl1LME8+Rk15bm0uIV8hcyh6RCl3SVRgfj9CcFNPTHwzMnF0Xz4xTWM2bjdAQTdQemgoTEtVTEopXjdMVldjdENyW1NYIUhFMG4pbUlDW3UxVENGbV1wN31jI3F6KGxg''@;'; put 'put ''dyxSWWNuW1NNIm09WGdTQHpaTnNVWTBRckFJKj5JWFFoLnxKQ2ZwTiNMbCJLQlJfbmhwSjw7OWpAUSo9XTp8RU1fdWFRPCxtQllOLFAuQn1tYj44eklvSHVYM2whNXUoRlM/Uns8RXxjTi5TYEopVlhkOWBBJDxOK0pTQSVBeG9kcTUvVW8mZ1BLNn0pJk5NRXxmQmE2aE4wdmdVa0tiI15MVzlb''@;'; put 'put ''ME13VTlRP3tjKVE+UFNHLz0+alpASkxwPTYicW8sPGFXZnFgJjBUNTF2Iz0kakVFYl1vRHxvMFNmNFdLb3dDUyxOQmsrUzBkNWtHW3V0W0s2OXkmKWNZfj9wQThFYmw1NFBVUTxeLCxbaGVHSktdSmxMcEh4XT5QZ315a1dqU3RoI1t4XVM7SHtRUlI/UGlHN20uKC5vRT8/STwyZy9LXlQ4PGw8''@;'; put 'put ''PyZPeHQuQ2hQL2NuN0kjN31hTnt+Iy8yP0wwTF5ZUVUweC9Cb1BseEJKNXdhIllxSUh2NFpoIS5gclNdTS5fL3twYCwreHwufCsjdVF6TyQ3WXJfbX50P0l0dElUPT9NLltAOixsb0BecWBDeXhDfip3OGY4a35WO3QmZ0U5bClqJCljenpER2FgZ3pdIjwqQyF1KTN2RyFRJmtsQDhZPFdFd0R7''@;'; put 'put ''TyRdPlJNXyRtdSFtOGk+fVJzUChvbXZdbldwVnB4Y0hTcSNBbEVhcmB8PE1GOFB7bXtkVHw1QHVDSG9jbE1ocToqUkZyOClwRVUuJEFfPHBnXTEpP0csYzpUSW1AYVtsa2FGd0RQalhteyEpOiZgIyhUSGk3fUhWMD8hcE5FKHpLZiJnW1gvcmhuZUI8IUprMXRVSWIodWI9aEs1UVBAYDpnTEZ5''@;'; put 'put ''ZkduZ0hUblZJXlpGZ0FfI3YjdkUjLzBhbyhiJWB3W0QwK2Vpc1czc3FQISZdY24hSzhUeT4uSjgmfF9XTTBXYztCcEEvYVZOKmVLcjAqa3tSTmhFVlFOIU1UNWt5aXpVUDM2OFdjL0I2a29JIyIjbm5zNEEqY2FudU4yKnR+VGw+Ri5GaSZteVp5Mzdva3VeQGUxMn5ldlVAdDYscjd8fDRxRFlL''@;'; put 'put ''VGFvYmJmeUZTcjkmNlYwJnh9L21BWDV4anp8IXFROlhDX1h2cWtaZV9YQmUqJCIpfnlQamMmU18vNjd+fTN2OFtOVE1pJSUhRyQ5L3x3JEsycTVhY2YoY1Mpc0ZKfChve2BJUzJWc152QWk9bnBOPUAvUV8+bmV9aGVkcjdMalBmb1JMYUViNnRHeURMTiltWXA0Z11keG9rRTZqOUJmQ2hDL1Bf''@;'; put 'put ''KGpVRmkuNl82dSldNSg3VHtYflNTOlRuIWg5d01PY3hQM1ImTTUudktQS0A1IU1lMzlxdWlIQzc4V3VPeyMvT1RlLDNDWHkzUjAyfUJ7fT9FLGJQVWkhals1aCEzX200LislQG44KnRWSU0wRWxNXzhddjM0YVM3bl1yVGYwOksoayE3dDN9SjxLZ2pqaVMmZ2VZMmQheVlpfjxDJWpWQ2REMX0z''@;'; put 'put ''WGlzSUEkNHV+eTk7WWZLVnpwaV03SXclL3pvdTpPP0V0SVglPiwrP3cqK3ZCd0dgS3x3e2d+PGFCaXNXR0AlQj9wcFBHKG10KEdCUzRYTnh2SGtUaDooa3E2dGx6WiwzT3hOWldvVEZbPWBSLzpBdjVrMHQmZjR+NjEqeU1pcE1eRk1uMnZ4bjo7S0BpLllgXVQ1PGBqWnIjO2ksV2A0fU9mdy9s''@;'; put 'put ''I25vWVB1M28zQ3t2U0Y+IV5WdGR5Ujh9KnNrfEg1NltFMzxUUEh6ZjM+W04xI2x5cUhza05BLCZBKyJ6dEYqNGBBWnJAaF15emJvI21LaSVxVGZGKlcyT2REckRZQG51UEwsRWZjKkpbKDtYYztJbiw1XSp5djFBfGdtUDx9b3RBV01JbSM5KzYhPW1KY1Y/Qkl3OXYuYG5ScWohPD1haUFELDwk''@;'; put 'put ''MltvVG16cEdNS319RUouPXo3JTovOn56RGtSbmUkL08+LHFoPVYzdD9zO0YjWzxgQno6RTUrNyw9YV1XS2I8cjJJfmIvczJMdik0P0diMF9kLDczNG9mMDNEMF5IZ3tdXmoyQWMiaXpTRTo0WVE3IkdxcVg4SlVFQ2slUHBWX28pP1l+PntSIzNsOkppN0IwMUY2S2EsfSV3PGcrb1trRDs9MFRd''@;'; put 'put ''PzE4JG07TTROTlFFc0BVPW0lSGM2K284Il1GR3FNQWpQQkFJMlF6ISY/SkFoOmFgeCVEWzsqLHFwKThHZ1NVUmdRKkZ0eHQ0b0RpPkQrO3JkVT5ITFZIXSNdMXcyZG97Y0RId3JhLH40MGBMemNxKmp0Qi4weyIiKjY3KGMlKSIxWVpUT05AdnxRSjZmKCxOK3U1dWFIdkomRHthKkFqN3BbW2VG''@;'; put 'put ''RC5FK1NOYjQ0W1dvVjQ/UkpmQGMsZ0JlXmF1LiYzRExeLEg4dipQY3FMYio2NGQ2XnFqVX1JS2Q/NGIyeWhzN249T0QuWy9VY1Q2UzVnYXUxTiJqPE0paC84Y11IeDZHMCl5Kl9ONHNQYytAMjFKVV0mbVVPczIxVX40T0wxUkxCOSF7dD1VamBxOShGSzRPYThATyp8SWkhKW5PalM3bGQ6fXUy''@;'; put 'put ''NyQpTUMlaGJMNEhZaDkzPSwicGxwPmp0ZTxqeT5OfFFEQjFKLnldMUIvPX1QN3k6fXFscCRJT1F4cS8hZ3RoRUIiNkNYaWxGMnQ+O1EiW1NfSGQ5e2hFLG9gNi9gMFczYkBTZixjNEkmL2Jtc34+QGMhTll5N0YkU182SCIkUn55dVZgJmI2N2BTWVJCbl4iR21KS2chKXlITnVZSUthPUxEM0dz''@;'; put 'put ''OlpjVj1Ibih8QGZ1Zn5QdyYlMWhKSG9hMlFGdjI3Yy8lSCQsTDtmaEpNTDd5Tig4Y1dPLGxHUUVmREVySUNBW1YjelcxZCFHL2ooPnlve0FBMjYuKCNmKDcvX1RWXzF5WCNBNm0ubnFkTCo9JlE6UEZiXVldQDtydkU9KSUsSkdsKit9YXY1I2hsciI/QGBLU2RMeWsmZVJtKVVNW3V0eF9zOk8x''@;'; put 'put ''Z0B6c0hefmpZITRpRjA/YUFdYjw8d0J7YW13WT5MTlQxTytZalp1Oy5TYV06Z1BNempFI3x8fG9MeXtEIm9mIlpTaiFfTjpsRTRpc3Yhd0pVRzBmYkNmPTFZKnBbZy5mMSJlSjpzejRSVDglZW8lT08vUjpZJm5sL09od3tjOyw2djAsX0s6VkpTP2JOMyJBRnlLbyl0IWBWQipjM2BXR3QxenN1''@;'; put 'put ''eyk8clBIWWRLcDxNWyY8eVQqVm1XQSRvTDJ2X2d9Tnt7ezguSFhjfU9XeXY6e0x8LyhZP0ddTmQjNGNGMGRYXmouMGxIdCZhIy5kRndaVEp5PmhASTx+Qz1FfUAqdld8L194aH49eS9YfENqOFRXJXI4fl9NZF9RWyxYPlkybVBicG1BUk9UdGdhNk9NZXF4SkM2PGp5MWRwKE54V3U9bzZyXkVR''@;'; put 'put ''RnhqPzsrTFYxJWkmYCxwUlQiNllSXTpPUmFPdkpPalZ0RD1lXTFQU1k4TmFTQEp0IjxKbF5rY0hIa3s6dUFDYkU1PHtWJnN0TVVjaiRTSTkmOmNXeU9APnZWI1FBN3wiUFVDTVdjWyQ2S01acH5YZDU3R0Q2azAuJElXQFBJTS5ua2Ipbjc7X21wSElJcjZiWVh4M21GLF9SQHNWNGl0L31RTj9E''@;'; put 'put ''bkxAa0QrUCEmYT5zfjcxaXA8aWphL0RSKEhSUjpPRWRjRDkzKGM2WCZMTmcoZmJYPXYkNFo7KGlgLyFaW25gcVMyKmUrdSI7eV8jWlRXW1JjYFNtdVd1OjlDejNWOSFbVEw9aFdbT1YyVSpFcmBLQyJtVXRPcDNacVFjOGY/WXx9Xzc9QUY6WFRuMUJAUVdiYC9wUE09amA/dFk4Q1tzd0didXNa''@;'; put 'put ''aWRCTWUzWkI5Z0pIJHY2fjw1MWhvPyEwYW9UZDU4SGNpZTZQISZlNV9ucSxCRE1VRDR6UHNjQiQ0filHZG9Sa2dFPW0xTz9rWDtsV3sqdmEpWVVJN0wmOU5qPks5b0xabUEmdyN3d1tyYzlwYH10SGJtRWpdSlEvKyooZ0dSUXIud08qeHRmMilwOzNGTHJmd3ZlSipTITp4bTBMbnd5SV9BRmB5''@;'; put 'put ''dXhgRE1+cHIjQj98eUYpWzVJXy9uSl1CX1QodHR+SyUwdXoiYmheLHkjdmk/NGx+MiR8ZSQjaj55XmleYS9NbTRBa3IpcjZ1SGNxdTFlbUgxJk0hdVZXVU1PPTZxPlopXWh3cEEzO1hkMExnMFdlK21KTy9FRzBxXiFqfG5kPltUN1UoL1lEOlprTERCcjdla0pUKHAoP2UlKDVheXZkd18hPEI6''@;'; put 'put ''JDV+cyQ4djNhQ21rW24qMVIqfDZdOXY6cDBDZUNCJEJhLDNecV52OlYzNnJ2Iy4yfm9HfTY5IkdeRnxufTI3fkgwZz4kOTFvNTpDI0kmYm5xT1FMQ1Nnck0mLjpZcnAxWXIvLEdUUT92dDtpN2ByWVgxTXRKPTByfFk5VSRoLHxyJkxDbCRKJCxXJlcoakJ8KEt+MnR9RFYqKWJBYHE0dSE7MXg7''@;'; put 'put ''LCxCS1siVUY6MEI2cF9VTUtsZzVQZmArdjp0ZixfV2wxPmFRJmU3amY9JHBsS0VMTkkmZnJsb2hlen5ZJDlVSH4ud3JdO3w/aFJaX1B8JisyaS5SQlA5MnA9NihBPks0OnFuPGtSczh3dlNSTG5mX2M8SD07Mk9vZiY/SEdxKnpuKTZrd2w8b0w2cykxRCwhUylgT1pFfHRic1glZz51Vy4jQWB3''@;'; put 'put ''VFQkMipNIzBSUWFgPG9+ZD5ZampmbmZ1ZWhJVzVRQ2RYWCNNKnVwLnZZYlc6MTVdOSQ8TUQrUlt9bTJ+e1ppc2VNdC9rS0FjPHQrZzIkZyNxNURre1UzRkd6a194OSJVWShleEQmN0pELE99KVRpX3RdKyZ0OSM6JEs1ejplPGE5SWJETVJyd0R6RmQ6OEd4InBHaHBpQV9pWGZJI05QYHQ4Tl9e''@;'; put 'put ''R15vLEx+YWc7L2oxXjMvcEl7ZV5ZfCpSbWo5Q2ZmfkIwM0VQNkNZZDhfXnhbMUtpPV4oe2N7NWF9aiNnaCRrQi9PWjwkOEVSIVhEbl0kaV8zfT5OO09Gb3Q3ckNvXiNWZyxoX3duTnBBdHZRJThRbTxxWEdtfDRtdURQYDU3PD1nNjchLyJWbWR5VGp0bDRqSj0+el81SFY/anZAJFhRJGpFJE83''@;'; put 'put ''NCVnYG42Tk96Vjl1K3lVWmsvV3BsKU1VWEQue18lNUhnNmc/R2UxeXRsQksoYk1ra2V8Lm91KF1fSHI/WSkxbDoldnRhdWxidUtlUGlUaUpuakYuaFY6MTpgTn1hfVcwYkR6UEBRdGFTZz1AbHUhM3w6UmJbYmZ3SkdZUCQlTCJRU2UjYzJHYEtGWE5YNkYkMEpINHheLFJudmJOcWZ2OG97YTJA''@;'; put 'put ''SXl+YEZEclBWQ3MzVUhGPitBa0slbTE+dFpXSmx5I2dPfG5hYT1dODZyUjpDTUtqb2EkV1ZLL1t6VnY1fH5bTnAmZ11zM1VkIVlyfmNxNzcvT086YF5gSVt1dCJNTn1fdnZ3dVJMUVF4fXdDYylbbFUzeDVgUUZFLFR4fHlrbTpIL1JMeSNYfjw8dF1nPlI6fX07fT9kOVozTUVeWTBnMGUvJWRH''@;'; put 'put ''fSZRJkolMj4yQmY3OC9bPCxVe1guNDJVaCtOVTIuNSZMRUFPQltqZEBbIWdSdlsvZDMwa2MjeDtwU2MmU0V5Q2RQS1hiRkBiWiRfXmExS1NNUj5YWlh2ezRuKzl+Z0woX00yVjJiNTgoKl16a2dPMDYpPkpwcy4pS21BOzRLY21EU2tGNCQySm88JS9MSls1OjpxTVElKlJmInhjRzZtdzkpZnNs''@;'; put 'put ''akBeWUspfT9fZE5OQlZnZEBSbVZpN29HLkxLR1csQC9IbFNRYSpzclcvfitzTGRufHYwXyE1bnJLJk9WSj1HMi9SJT56dDVFbClfOiMral1xQDpUR2ZKWmQlYWB0TG9qVn5MKHUwNiM4NyRzZFBMQHUockwlMD1fcWFlIU1je0B1Ql5fIitNXmFqakdYa3hPJi8iXjdXTTllZmxEIkhAcX57bk5k''@;'; put 'put ''Qlh9Z315NmkrP25YODIuKiFnJFhUVypqemwzVzEoc0lkTndLRmxKbk0oWnxoMipGcylzcShdaiI8YHZAXWE6TW47ZmFGaVFAWFdrRXhDbDw6Tmh2cHFqdVU9akM4QE9gPyQ3Um93emV3dytnWiJkb1FlUnM6bm1dTnZ1JS41L1hfT1EqRG0mb3UyW2QkXWgpTERsS2VEQ2o3PFlnM2BpKDV4Vlk4''@;'; put 'put ''d199REB4T1ZqbEJITmcyX2s9RkYjdCFnbGNNfEs7TTVtZ2BJTWsxezVPXz08QU5IZCErLDIoJDZkak0mcHsydmdYL1doQ2hPbWkoKFgoTXJYUUI5V2s0JCRVUCYyV0ZFa3hIImhESHZVPSxYT3c4Qlopdm9EazZvSEhjJCNYQ0BEelIiNTJ7MWQjPDU1OXRWTGlHM1RHQGFhbTdYOEhTRFIwTjlJ''@;'; put 'put ''LlhUYTciUlkkVUN9VFBnT3FiZkpFSUY2fVc9eX1sWSI3YEo0NFBBTFJOcDJ1Q0hFNTFGPmhfZERLJmJbbHVpfTZ1eD8qJEJNX3dhKmk5Tm9zMCYpVWFzcVYzN3VYdncvZVRGK29PTUFgaSl9SyFxO292aHVPQDRrP256RzM0cU14eiQwKWZjbUkwfn1bVVszLkluLzNWSjwpakskYiUrOFFuKH5B''@;'; put 'put ''KnxrdjUwXS9UbTFgdm17Zi8wQW5EVD87PTw1U2hYbzw8NnFSTXFCVCo3OVhqcCNJXXVHJXh8ND9mRXBrREk8KGApU20oREdXOy9yRU87Jk1GMXI0RU49JUghQzY4Y1h6Tys9RzMqOFkzfWw1PHslISI6SSg8YFd8SSZiMCpoZ0I1NGpeZz01V3AvamZ1ODhzYnd9ND8jOHUsJGc1fncpRll6cGlp''@;'; put 'put ''K1RNaGZpLm1qanNURTg+KS5McCk2cD5RRURiVDUwWHpEMmtEOHRVLGg6UFh6ZSJndUtgZW8ydWNValA7aCxoeD0mLiJuPUNibWEmQUI6cSsze2lzRkBMfTF6ITQxM3hQJUx7aCl1SjgoYyw0WmZJKkspbCt+XSNAI2YjWzA6eSwmMUA6TX5ML0Z9dDlodTY8QHo0JWhdVldUL0AwRVd4I2tQY3Rr''@;'; put 'put ''YTFUZlVVYnJvbzlScTNLfC81VTZoRn5XY21QX3lSKnc5Uz42JS4qdFlyTGNofEh5aU8ydWpwZVA6NStYY202ZUtjcj8xSnVNKXUzKm94XU4zKWQpenZUcVkqR1JUVzJmOml+LHZaK3VKU08yX2o1RW1PLGQkMngxeXooel9GcHVyeSI9fXZWKWY7JE9SRkc0RyZ6ZVRRdkU3XzEiNXYiPUJrM2Bl''@;'; put 'put ''QCNXLFdwRkZpZUNJWGIyeXNMU14/JGdWMGBDSz82cj5tUUkxbSsqUjhZSk4zSmVkREgmXSxaUmVSVTZsZHg3RmRMNmdveDcuMFJUOVQ9ZnNVNEJVZE8jQCZOI3BuRDYvaG56RUUxZip8VndaXU5meEk0Ojd4Vzp7UkhmeTEkc29MXys4LDk0R2A+Z3lrfFpGR0EkZTFxdip9MWA8REh3ZDgpLEAh''@;'; put 'put ''VF51K14wTXNQcWxgT2lYfUFMQCF8WnRWQm42R2Q3LipfeX1sOT1EIVRvX0wxVUpIeFBIVkBUa2M0Z1FjRTVNKUVZZnIkRT0lLzhkRCptbDlsYEImRkhiX191S2F7cnBLP3ZOXSV6eC93fnV+Jk4pYispYHBFcWFbKXN4bzJmVUtLT0csVCFuKmRaPCM5dj1QbjQzPWV7dmpTci9AMmp+OEBaXjVF''@;'; put 'put ''XkVxfSNOYD0ifWwiOTxadUNJV21lU31bKm10MkV0RzZpIihYJn0uOHU0W3k7YyZYMVVYc2wpencvLEghcFRAQmtJbnlaU3o2QzAwNnFLVXd1KmN7ZFhPKjJEbUdwUiFoOjZYfS5GSiV0R0VvQkZhJnJXUXNnK3NYamBKQDN4M0YvUEduPW98MmNeU0kzP2xRaTw2fFpwXl8zZkc2aU9vSF9wdXVZ''@;'; put 'put ''QGc+TTZEfixQcEhmNSwrejFTNlNOYT9ZJDZoZSFQUmMhI1tVWVB0KXxVZVsqWnJpJTM/YmQyNl9RW24/SkJ9SyxTeXQsVjYlXkZ3VHw2d3EmI2NpNmtpTHouSl4oOl1lMDczJiJrMyFAMGY6byQubGsja2swZj1RWnQ5UHpFV3ZhSTJgZ3gubXV5KixIKURXWCN+aFFeWXxIPFsoLlM2TVtNMGo9''@;'; put 'put ''ISs6ITFmXnpxandSJDQoOHNAXllnay47P3JOVD9aZ2suQVE2REJQUDZgcGIrNyk6NDR3N1p1YzNgUmMwUHN2PHJHb1NyaF5lYVo4cWhWcyhQMyIpLCUmJCN+MGc5PiQ2JChAMUJqLHk7QFBUI18kSHZLdjF2MG1LZCJnMVBtPUB0aFY6TnBMdVE6TilLO15MNH1NXjw/cEZVaH1GfXxRNWMxNjUw''@;'; put 'put ''U1tEflohbHVaZUJ1RlAlUHRJWE18XiJKQk8pZn1hZ3hLb35qNE9pMDs6YTMpT0xiKVZjb1pkaE1hRj4yMGl7eiElUHBlYzU3VDhbNTtAJXFlWGFnKTBuMTtAUl1HND86RyU4K0t9VUA7WHwuTXcyQ0hWOXZhSVd2W14uIWA9YjZNPlVHSkdzJGddKiY9PGJGejZ9RFQ+akxBJisxS0JSKG0qZ11E''@;'; put 'put ''a0tSNWVMT3k0WVAwZHY1MXpzVnFjL0xZVnR0dHBPNUpAOyY+IURJYzVJczB5ZGUhaH4lNi42aUJtYkYwQE5IXXJLWHh1I1IsbE5rayROeUBHMi44U3s+IS9maV03WFNGKGFESHNoRkhzR3NyKiRJeWooa2EzUiwpIVIuRDtUKjBfQEMuRUMseW5NZnVhbFkiPjZ1eTtDZlR9NnU5Zy41eGF4ME5s''@;'; put 'put ''ejReL0RnaU9UJUthKTRfcmZnVnVPOWJZXW9OT2Uhc2NJWEJoQXEvcV9vJDNHIUBXPnJeOFYvU3gyQi83O0VNVE1nRk1aYF5rYFF4Mj8jQ2NPLDcsQlhSNHAicGYrUmc0YVp7cE9pPEt1Oyg9Z2opajchPnl1MWE1Yil0THFaV00kSjtWJHx0Klk1ai4lbVomPHIiOT5DRikkWGZebi5tbTVXRTFa''@;'; put 'put ''JG9mRmpZRjslIiVpZVBjfDJEQ2pRUnldQ0g5UzBbakVGVG9MSzErOCtgJFkhWkArT2shRUUjSnZfPGJFPFomVTo6JE1pcGlpOUJnKGhEJVY/OiRhXTJBNEx5dVRhZ30vRlcpSVF1QF0rYnBUPkclXlsrflIpKkNWWCRJcD4oQFNZSH0jUXZbLCZLfC8/Pixreyxje3Y+cHJSMVZBfThAYVZxdT8h''@;'; put 'put ''b3ptRiwyViRSc05OQWBBSmVDXlMpMzMkX2JWPjxEWHMmZWJ6MT5Ffk14OnB1Rj93Zk5gU19RZTRsQEFqODw2MH1VaTQ3MypqOyZrO3N5fiVMUW1Cfl50VHhOYUguLHB8ZkwzaSZlPltObkNOdTl2WWR1IkgvKWdreTlJQkJYUiFzWG9NO307YkE+TkhLY31VMUo9aSJHdFE3UjVJRipRLk9iS2lB''@;'; put 'put ''cHxROWg1KkxbbHErP2RlTntpeGpKakVKSDIyT0whVWEpbltNbU9lPlR2JUdIcixhYEMuUlI6YVd2Sm9helB6dVImR2J5OSFqSWVPI0w8eEpgeyRgPWQjPlREKHRGfDUwYGZiImdYPUgpdkVpcjJrYi51R15faz5zTmJpRUtIJCF+eXFFR3dxRW8pR0NEU09YeU5XKT0wREphe3owPVJDYmkiLipC''@;'; put 'put ''a0M0a19bdT5hInF9eHxLcGd8Qn1uOmdYKTZYd1sudmQ3R09pSWp3QEY+eSMjKF17NTxDe1YqK0k+LGNpUlsqK358KD0/bTsmVTp2NXdASCkoSEZVd3lYamAyTDo1dnQ8aHhAXlFZRnVEL1Jqb092Pks0Z0VWTSImQzdvRFlNPShzTkk+STx2YndAUj9iJklNdHgwSSVQT3ZibV5eQXF2fTEyQVR8''@;'; put 'put ''cHxJaHhyK2EuR3gsciVIVTVdTGZHSVUiRCtBaiFCP11bPiNFXzhzXm9KTXkoQnVDdiVbR3YmdHNuTlkyMH4lKmolbi9DX1pkdUBnbnx9Pm5NRFk2P3Vjbk8je3ZVQjJAckxONTdtWWhiQnF1cmt6S0JCbjc3dyswL047d3szekNaJj05I31wP188dFhAZCt8XUE+YWVbKTdpKj1RVEZhQGxKVzxe''@;'; put 'put ''IzBMOCNxcTo6S253NipmPHN8QnZXal1fL3JZWWR6RmdRbWxTdGVPT35SfFVBIUxQZGt2IkRoR0hhOiM7VkIyU3p8WlUmKkolRSsyUkReQmdBRSpDQi5VNHduQGlSKmlhKi5hIS4hVWFsSj1pWHl7cjkpRTArTHI0TF44UTFMQCpiaGE3ayE9eEQ2MGAwQGlgQltyQi9YQDBGQ014OWp6ZFJYSUVF''@;'; put 'put ''R3JoOj0xWnojdlpUdHYsXWpnKV17fF1qVmVJPH13UzNlU3FGYFo/QmV+VW9Bd3F1bSZyRkE0ODpBay5HPk5PZiRgdHtwOnk5K1hQKmhHV2RpOGpuWylfOllBUmJpbltoK05PUVM3eEBjc09LO11eJEJ1PkgmSCF8OmA0e29KPGxEJW59QnhKVD9MQDZ4Qj9ZNkxJSGA6Y297Si5lVkh9blJPdCwl''@;'; put 'put ''OmYuSWJed0NgRkg0OF9tPVE0Wz5LJGpEJUluRStnay9ZNjFKfDVPai9qTz9ka312VikoUGYwRGROLFsxbGtNeHxuSEFaOGNCQT82MD1seVl+PmQ6aVZzdj9ydTQpW2gzJGUhWyxzeCUhXjhCZk11eV5XOVV3QGslRV8wMVQ9dXFtOiYlXUJheH0kYGw2YzdwXTBJTHsvcCpoUkooQ1hbS0lgUEV6''@;'; put 'put ''LmIjWkNsNmRzRmE1NlpRMH1gYDw/I0hKU29kLz1CJGVjSiNhU1pmNyhGdSJJazQkLFRFUEU/Zi5ZeGVtRGcxQ0VsQitiSWJJPD46KTxLMVQwXjRQZ2IkJmRFJig5dX5vLi5bOWVpV3Z0RjJJcHViN3VbN11tVGY1MGFpZ08icCxRRmpYeTNqO2QwZU9fXTdrMFMuK1UyeWdCaTJ7VTJDc1RzKHgw''@;'; put 'put ''Y24kMzZqall4Oyt6PWx7LGlPZlFlWk1bQ0JadGUrfG9HXlVxXzRlNXhAajQjTEBPOGJQRFteSmwrKHZFOE9TbV9RODBIOS5OaUtwJXdwJT1kanVvL3E3a3tNRnEvKkJbSWkuRm9pM0MmN3A7NDZ4Tj1dQ1ZWI0pifDFDemAoSjJUNS5eNzt4c25qVX1IdmdeM1spIVpFNV45PDJFWzY7dUlncE06''@;'; put 'put ''biReUiJKRlFvQD9fOUoxWHEvdzh0RT4uTig8MFg/fXNSMXZTRXlnOTtRSVhvZiM1VyVpK0A7TmksWnhUP093bSJ9bEZIbGAqVVQ/ND45KXNnT0A1OG5QREhLMUxAOEQpKXwkWHpsWGtoM0plQFNZZm1HdWB0M3RPbzFKI0xLSzBfPWg4V2VFR0h7KVZFa2UjfU5WPXYkSmkjKik6ek52Mikoezk7''@;'; put 'put ''ezBfKkJALzRCeTFDcyg2JEA2UVgobnUpQW9lZ3dPI2Q9cl5QZV4hOVFVI2RdZltIYnhAbl1GPlJTfXp7P0x2U29NWHlVbHldJDt4WzhEaztONTVtOSZDMntGKXVYaWRFdU1RWVgmVzYyOVUsYEgwK3NxPHxUfWdTIXxHZmtvTnJZNiFAJWNMWWAmMjAySE0qMjhtPFVtdGF2XXo3JXxdN1FoUjJZ''@;'; put 'put ''e2lOM2RYS0VRUUZCOyVpSWouZztKPHhjSyNQUUZUMV8qa0IiWS9VZDFoQ3VnM3Y1JXouZEc/VGohNCZFOCEpX2kuT1RJNkQ1KXEsX0k7bXU+VTkoY3E1MUg5ZShXbFIya3lUNWtsQmQvZzRbaCk0bWVWVHQlSGtSLzxPS0tUTGMjekN8KWNdang/IiZDWV9YX0w6aSh8cjpQY3lHVHd0RUNTbUJ1''@;'; put 'put ''bSU3YyFHIzkkRTBLNi4pWDdzKFJtXnRNfSVsPjtyMCwzd1Erbyw/dEJNSUpkUWAqNXBDL1lpL1kjbV8rLmRETngpKiQ8MzB3d1k8UW8hSiEyblp0b3VKIyNWOHlGXTNjfi9HJDtlWlIieFcsSn0od0ksdipCSWV4Z2QxamtdSExeeGlRMEp7cGhkJjshIShqNnc0Q1BldUV9XyEldlVYT0B6eEx3''@;'; put 'put ''Nm80YTJELFJoQF5pYS5SOFAyR3BmOmFxJUR+aVREQV9nQGw6JT1xSlNwZVZ4aGUqRkxUP0ptfW9NREpTT1ApcGY7LiExL0UiQH5YW3hnRllGTCZDOW1zek9INmt9IUd+aWcmUXNKU2pRXjFTQG49YWNKUkArPjw/IkEyVTVTcFFPUTBoJDFdTCU3dlViJWc8KUxbaGNBdlVqZW1hSkV2Lmw2d2V8''@;'; put 'put ''TWdTI2w7YDxZNDEjOV5oZVZGQUZzWXc8JH5lQCNGeVBINFJNTGReWTVWSWcoZWBocG1IfCthL0AsK09CdzxWQTEpRkE7ckhXTU1fQkpTdmE8NVVsQTU9az5GVXlnNjFrVXMuKkkpXyRpWGJfc3tEJG8lIlJAVSxeaUtIL1o0K2B6WUF1UD1BQyluLmlKd3o9ZDV7UGg0bllQWG5tWHpoZTlWe1V8''@;'; put 'put ''Iip0R3RxJTl8Yl5JIWl2SDF0RFtPK2RCN3o3cHhwWU1uYXdgLE9OWWhBT0o6bjoscUtscSpvJCo5Iks7RmtWOFk3SDt7Lkx5LihOYkRfOT4uSGZLMVVsKG5ecD1MMFh0ZCVsPShaQ1MvZVJLaDlDcnwkWCFpTnNBSkRUYD4idkIyOVlBdzUiSCRBfXJ3SzZ3V0tNYEx4NzVGR1BoKmgvR1NwdH52''@;'; put 'put ''Q0Q7SiolfEJCKnZ1b0h3P3AyQGBHIVBNVEp1SmtWI2ZsWXxIeFFvJmY0UjFrZVVaIltoNDoiZUVkPGtCaiNJZiVCRFoqTWo5RkApP1IvMzlZQl1ZZ1tqI1QkLzBNJUN+Zzw1U2pxR3paRDF2U0RYL016W215bStfdUQpLG5MRnglPSQrcjU7R0ZxcmAlMzdlSXpVJntHPl8oPSJgUGE1O14zfWNw''@;'; put 'put ''eDJmQFpSUWokJX1wQldgeUklKkMvPyQuVDsmNVIvc1gqbVFJXW9eVlZ0M0JQZl06TSxkYFB7WUhNRHF+cj5QImAmQm9gZVtmeHFIeEkjfnxPMXc8TWYpN29GbGo5U1ZLUWFaW19XKnRndW9ZcTpuTElPUUp2YFJ7RU11Yz9td0NWIUokYGlSe0RLPzFINjUlcVhxWytORHVmYGFrSiJRY0xGNlhV''@;'; put 'put ''YC4zM30rTkMqVlZHWmplUzReZyhrb3wrfF1aUXN+MSxRSWFRVj4jcyNDLmguP1VIc0Bhc19jLHpOcTlMTmNbTmZ0OSJgKzByNlBHWj96dmssTSQiM1k+XXdwIyEsRD4paHFyUCh5aVQ2Im9HbCVGSHM0R3RoZndAa1BGbnJOYCpvWzEsODtSdDpxMUxgO2ZFKHZLQHhSIzVpK3V1SCo/XSNzL0Aw''@;'; put 'put ''YXJnSyVeTG97Pi9kY1Y9KktrMUw8UUZ3OH5XSChhIjBufVUrS2o4R14mO21OfnFwb0JNXmN2TnVDeEdzNGM8bHQoc1s8L1dJajN1MmMkTWZHQiomYExpQEIua1JVNlNtYHN3bDosbHIvSnpEd31CW2kidj0zNFtaJnhDV01bM0s3anFJRjI9Uy9EVUxFc1k5PVJjK25XSTFKKiUscV4zcD01ZHlT''@;'; put 'put ''YD5Id2NLI0tgfnJdUjJ9OSVNUHAjcmVva311ez52T0YuTHEkZkZKV2NkW0x3TGF4M0RTdE47Xi97bk1sQG1XT1kyU3doPHFnUXVtTEx8W0BGR3BJWE1TeEBHYl5gNHpbRD1VXUlNZ2tmKHlqIyl2NSQifm5VNmt7UnxQOWdkM0tSPmB8KjduX1g/SyYoMn0vJkJlNl5FL3guaCMmTXdBbEU8PjZP''@;'; put 'put ''I3gmPk9qVGFlcyswIzo4R2UpcFN9NlM9S3NLalMoIjtWcztOYjVtZ1Jyb2ZbZzl7U240Llo0I2o5QXdTbSMsISZKSiNeOy48MmdqWFY+amJbKywyMExAZXhiV3Y/Rm9dMHN9dEQ8QkdONV5wISJEeipNNitPc306KVBuL31WSzw/e2B8a3lVO1dpQlpffnZrfURrcj5LZHI+NmJeOCFATXcqdStC''@;'; put 'put ''ck5jbUtPbXx+T09Eck5ZNmJ7VnZ4Z0pIKC8kSGopdVplan1ee2RIeCIvKjNMeUM2WTBYaE1xO0xaKTEpUm5SMENkSF0zY3pbQTtoIzdrPklMSVUibSsvdHEvYl1HeXRANUVFTCFNbSszckBBJDQxOjVteldDV0Y2b0dwR1UuWGlXP2dNSVVgekYyNmFXP0JrRm1QJlMqPj8+KVNrb2olUFhrPyFu''@;'; put 'put ''Zl0rfDM8UlA9ZTh2VGxxWkhbMXFLKU1wVXIyeyRHPGpCTXFXYFBoYjRKR25PcFksI2pHQythckFyRyQrZ31aa0QsajNWVHRtdEUkUHxdM1g3XzNNUjd6Zj1uJGoxeXtXRUI8Tz1PfV4lW1BKSFN3d1lrKXRnZUlOR0dPUFFFR3EzfEBNQDMsYjBhUD5Xe0t7MGFqZWhBUXlEUHwwbXY/Z21rUkds''@;'; put 'put ''Pz1yP2N3R3IkcnxUJSFDbVQ6PGBQS2F4eixnd0h8b2JFLE5YMGdpdFBObyQzYWMjfWo6e1U6cyZeVTtebGdNT24uVVhpYj52VU4jJWM9ZXgzI1cqIldyKTAsd0BkcXpZP31DcEQ8eHlqOUw8WlFnamIjLnBBcn5Rfi9Dd0EwTV4kelRfPiVBTS9RRnxEI0t8VSE2SnEzNix5Qz4vUUxidHF9M145''@;'; put 'put ''LyI6ImdERTkpXjIxdD9MYDNNX1svQWslLHY6ajMoZmE7QGM7N0teQGM9YDhLIzhVWGw+YiIsVkM7MHIxLGdQVVh6KUx1RT5bbV1USkl5KVhvX0w/QVkvbG5oJGFUYT1eL104e2F3aUQzaUZ2blRRU2VyMiFFNUt0KztVMEl3KGReQWAwTVZ5Zj1AQzVNPCYvTUlFS3V8JEtdcGZ5dXtbNypiYiUk''@;'; put 'put ''NUo9YEopJGdQZVFRU2JKOzApbmRBSlJIcnVFaTEoWHhlJDtQJUJOSFhlXXkybkA7WHYkK3k7eylCTiw7V0NuUWZjKyxNYyxqK1Blb0JrL0ZTRDJuVj5RXkMubzRrMS9xe2ZBSW19eTRbWz5AY1BFNkM/ImVXKVdHeXVYIU9XbCpRdWY1ajQxZ1RQdT5mbzUkTmduLlhGSFtnbik1bHQuIi5OVX1C''@;'; put 'put ''ZDcqZT1BLnczTWU4eiImRHYvRmhEOz88ZCRlSE1FWlNQYylVc2ZHNF8sUldRaCEkKlVzXld4S01hTyFPL3QrK3VSL0JmUUBfRX19ZiFbaWR1TiM+PyVPRU8zTl4pXXheNkJNQHIiMVJUZ1pwZlp6fH1ZTDJiQm46MmVHKj1aKUxLIXE5VURAWCUsMVpgOyRbX0A/Nm5FSHlXdnQ1S2BINkshNTAq''@;'; put 'put ''NVd0RGkvSiFvNEMhencwe2dMcjJPfWZadn1BKCsoQ2IpQW5ZVylaODFTUXNlRnhxTCZTKk1wVEBMMGQ2WF1uVXE1Q3NxNnMvZjlvKC9YJD9VXXlILjdrOjVeaXtIS3soVEtAe1ZhcDBTb3B9TkxTSTJGYH15NnEvZX1qViteKStpV0F4W2Rgc3p2KSF1Xnw3P1g2Pkd9VH5QKzpidD05aGF5e2pI''@;'; put 'put ''NjFlfTVRZXE0fH1fZ1VEYnBbTTBVI29pOER6ZiVVPVNzXmdSd0MoZT0qIW07NSVnRy89KzpnWEY4dmpJKVM0fGgkNi9eUWcvOHc9dj55VUEsJmtmPV83MTd5PE9EbTBSYmhuT0ApM3A8SkIuKEduKlQwVEpTW0Z2VENeZnB9cCJtTj4uO2ZhWHVoUSR4WVhmRyshW1B+IXM9bSgoNXV8eVV4YHIv''@;'; put 'put ''U35ZOlEqdz53eCZrRyY5ZGdUb0M/PU1FVGs2XS8yOFhednppXzY1S3FxWWtoUlk+IjtHcjl0YmFPTXQqTGxQIUFrYUNqPy5OMG5qLC9pSX1jRmpbey8qV3ZRMUBlSCF1aEh1YzprYF9kTCZ7WHglWiR7UFpuRnBsXyY+JipCZmhWVi5bSVNROmQ0My9CJj95YVdRJHdvUUpUeG1SOjAzXkB3ZSp6''@;'; put 'put ''UEckWFpSJEVOdU0pNnZFc0YvbiU1amI+TGJpd0c3WTpAQ24sTT9XYlZEL3tnO0MxZ0pQaFB2WiVaZlhUbmgvVjBMSmZ3ZThWL1NRezJjQnI9ZjlXXylbeXQiUVk3KmZ7ekg5IThkL3EyQ1VmeSRGflYscExJK1VsbnYpSDEqM347YWBpQTRAZk1+SyxnWURdPV5CaFouWnxWaW03d0taQUxMK1Zk''@;'; put 'put ''O3pxXnR5bHlLRHJOSCF6dyF9cihFXS49PVcrP1lSemFJIUVZTCpmb24jIzwvO0Z+ODkpSUVEQ0klZVI+TzhAZT8lQUZbYHM7XiFCZSpNPzZoUGdgfTtyIkU+ajQ5eFJgezpEcFFrRGl+JD4/V29tN3pZWkl6VEx2JHhydUJwOU9TI0Y2UnVbVSxpSEsyYmxXb2k1L3o1ZmpRYz1yWDBydEhDdURi''@;'; put 'put ''byJCcz9tQyZZJl95N2F7VkpnR1lHKlJxRnNDa2tOYUphQVZSayVjYjlefjxNX0l0PDN3QlRBR24jZ1deW2kwRjJDXSxGUixkeSFPYntoUV5iUV5CbERdRSFxQmFSRzByP0dDcUJYRmNxa0JaOC41ayREV3QsM2VofGB6M240RV48a11WUHMvMVAmckZoZmVuSHFiMilyUlp2W2U9NEdPTWNJY0lF''@;'; put 'put ''Q3VGTChGdz52fWdtP1lmTz9jPmlubVZKMlRMdmQiSzFkeWQqI1NFZmEpb0h7YUZWKGd8UGswJFBvXzkoS2lUWE9KW2RHe0pvajRUXyZkX1E3MSgrQmdMKH1efldOJk9tOUpveWpCfHRYdi5JTCZqbUF2cHZPfGljT0Q1KyRZWW9xTzMpR1Zud1JtdGVvPlo/dXdhbFVzKXBsaTtIRk46ayk0N20q''@;'; put 'put ''TjApOSN3SXN1IUl5QHN7OmsrTFp8Pns9USEseG92enR6S0o1Kk16PWprIj5yd2RpZ10kXm8jSzJuSil1V1VzeENXYEUzeClYWylTWzEqYmNJc0ApVDVlS2pAKl97cS9NMlhPYl8udDNXQGsyNyVmS0FZdU98OjF7T1VzVDgkRko2an0kZFFPbGE6MTM7WylqJklxMXQqL0E+K0M0PyQqKjo3Y19a''@;'; put 'put ''SClyem0oZzBJRT11Y2l2W2hAQGtxOC5fN34sMWNzd1tELzx6cUJBIzMhMWshK3s+XncyZT9sY1glaFMkVWNETHd1TzxDeG1oTChzQixYWl4/VThJXVhUeTRmeSFOPiFJPHVOcVJPNSlCLzhocGAuXjB9MlJsZVBuMFguKEQ1RTd5el9rW007dGkjTU5nXiZMPi9qS15nUndAbXVqPERZamJYNW1T''@;'; put 'put ''OHxwInsqUjxSXjREZktIPXcvWDd2NDYpPUdKW1tMSndEJngyeHJxKGhHfUdFZ3ZNPyxWMlluV11RKDwuYVZoZElaODFDMW8qS0tLMX1kcEMxNCF+WVVzXmYubC5ARj4uaHA/IUJreF5tZkV8KDEuUG10aCN8R0dkYF40UlRFZkhNNFEiMF58aix6OFEzfjQpLndMYjliL1BdTG9Ib0w0cDBNc1ZM''@;'; put 'put ''QjJHJUlGNG0keHBibk9qaEVBMHIyXnlXJjVQKVtTPXV5PW4oRW9HbFB+LjZkL3wsJEwpXndCTkpqVWF4YXs2Jjcma3goLixFV2U8WXpoSCYhfEBnRD53NjV3dmswJSF1UH46eSRMKV5mSEkpczQkXnV2LzhHNFJQM355V09qPjQjRCxRTkdvfG5xbVMobU1jbj1BbCVKVHV5MFdTUTxWdHc4TCxP''@;'; put 'put ''VjRwYTRMYHZjPktzMyE/SF56MWVGWXM/d1AuPWUpLjxuTD5uZTM3ZGtRUHM8elgkK2c4enpBbjlbIjt4MjVGTDtKbCx0eU0jLF57VkxefHIvaj5rOypSRFk1WVFNa3k7LkI0O20qZ0pPR04kKW1NSk5DbUIxYmBrRyExNSl3Y1JVTktjY01IS04qZllqKTVbNiYyS2dWJS44IitAXTgyZVYxJGxS''@;'; put 'put ''IlBAbzJUNVs+dHIjdWhvQ3FRSCt9VilfQDJjODRJO0VsJDc8RD0iV3chcUguRTNXQX1fWWZtdCV5V3BvdjM0a1IybCY6W08mSDMya2NnK3F3d1dfSVs/Vj09RSt4NFdmdyVkaEwzdz09eE5HVk14JDx8R0dWOHNEYl8xWUppfFZVN0txNDhWJUdxPUxIbyQwXyIpXXtJUipMSjZrVSszSztnNGZu''@;'; put 'put ''VDJDJlBFbjlKW1JdVkRQaDlBeUk9RSpEJTlZaFRsYH0zMSlHNnwjY3hHTjFeT3AhVlNMQTFFSlcxe01VLjVIdiU8Q1ZPOCp0RlN6TUVNRDlVOEU5ajxyKzoiR1Z1ekw4IWBSLkBOYVhWbCVreExWU0QjbmkxekhRTzhPKipUZW9GP1ZQNzMhUSFERi43JV9sSXBsVUd8ckFgMFVrRS5vSmU9ckgp''@;'; put 'put ''a3V3TEJuRDBDTE9MdHtLaisudXo4PEd8PDhgXkBLSG9XNngmPj0obUkhM0dnQnU+VzcyTkNONnVvZSJJOjQ0KVpLYTAvcmVBPitzWCssRXxnI1VzdFE4ay5pSWVNRnxyUlUuPkVIQmcwdT0wbD9abmR7JGUje3dWZ21HJmcqYl4xW2BeQXU/dzFXU09rNWl+d1dFWGRwL3d1bU1kfVVQcEJdPWAj''@;'; put 'put ''MWtSUX51TERhPGlBbkpQTkM+UlQ9V3hib0xlQVJaNjJIPSlCNWo8ITJpTyNfSiF8aHssSzM3eExnU1R6VlhNRHFzPTZzayRrQ35nT3UmY0EsLypxLE5eXl5TV0JzQzY1biNLOkZqTXpMS0smeDNIRWtVJE9sMzp+SzQ7ekxTXy54WSR5PFN3RlcwfSM0a3ZWLjF4RXg3dWVedWVfZVt7cl1qfnBZ''@;'; put 'put ''IiV0KjU6OkBrdnBaQSZoYEohJVdHcF11RVhnL3R4R0pPI0JSKyRSUTNjZSMwdlM0O2pFczklQyIkS2xpRkFWPWVyTGhFeUYwSEkvK2h1Rn5DcWQ0NX5ybEdodVJrKXcqPCIwbG5Qc2hBaGtvOS4peCxkdDRpZStpOyFNNXMrbDQkM1JsMnVZdVJ6KXgsQGQzYVtRT09TS1ddVTt0YmVPMU1aVCYs''@;'; put 'put ''UDlHfW5FKEVOISlRdWQ/PXJKYSJ1Vyw/bEhlRVBKSTw5SmRASSFrJTQ1MV0hU3dfUyVjak5vdTlOIzpGY343RVdIODQwZ150aUBqcFJNQTlweVBJcEpMQ3xGRVlvW2dKSD1EI1hgPUBLZlJSMWombGdPNiIjI2JeJW8kPE41NSFXIX5KWHpwL3U6Q1dKfXhjKSQxT0BfR3o4P3t+TVd0bERZX0A1''@;'; put 'put ''dGMuc1VJSVlNN1RXZX1WJi9NPlY2KWBiJkBsIWAzaXdtPEBoQDg0ZzFQSypqWWEweiF5b0k5MT1EJlVoNEl4eWxYIS95NCImbnRXX3JJWV9mZl98QTo2VzRYQ25qRGB0ZDoqY0B3UzdrUyM2ViQwMCh4e1N4RVQvPk1ELCpXQGxrRTA+aXhbSSVkS2kmWU4rQ2JNYHxrOjBrYSVabSR4KzhWYmts''@;'; put 'put ''XlEifFY6VXlNYlIpfFhWSj93fHAjZj1tUntVaUsiTWF0a3tWeSpIcWU2NVRVIypvUTJ2bj0zUT1bJlEoSnJ6fUFoayEldDJyPFJCfjF+ZzosQXIsR1hTKzM3XV0/e2dUNF8pXSp9dGZhbWBBNX48eTUuekQ2ekMuJSQ3V287ODZPU15wZ2t6S1pqMk9laHJGSDRmKiZ0XSNLXWJDczFtIXJbQy8p''@;'; put 'put ''WnVjWW12cV98UChuP3RgWl1acnNyP25qOUNMTzBjK0N4RmApYSpMXWtrKl8va28vKkI/Q1l8bF9oaXJ5cUtBYXltP3RoIi95NUt6MCFnbiYoU28sRTdOSGxZVTp9NyEhR3BSciZAP2Q6cHVdVTRNTzIiOyN8SGxYMm9PbFd6fkklMG9WbX5QN31nJERdUjNPJjVMMCw9JHYmUUcmclc2cWdobGdT''@;'; put 'put ''I3FnUz1mPGYpc1VIPU15TFomeiVzLFZULk5eeCYwZmplTE9ZeCtnN2I7KUVNamV0TV48ZCZhLzg9QVZAQmAkOSZrcnt0cWd0PT1UVzFNdzlwJT91SG4lYWJtM0Y8QzZIV296UFJvZlFTaTlEJmFJRGR3YF1RcSNCZVU8UT9QOCN8YVd7NV1lS1IuX3Q3PUVFUWxRSz1teVNfe3preHQ0VH1uITYv''@;'; put 'put ''IXxFSnN8cmhBWE5ocGU0e2FXNWkvKTpXU2gpekM7NjRlM3RJWSo3e09lWkV3MWU7L1FFM2Y8NjQwVk52bCFKKEp3UTQ+ITBJW2lEWF4yQEFkejU9S3UsZUo4JkVkZ1RVajhgP3Q5JTs0QDMjLiFnW1YoJDs4QEN+K2d8MGZ9eSV4UCI6TnBqMWMyPjYkO1JwXU87MElQMjJOOnY+VSI+OG06RGQ1''@;'; put 'put ''YTFecTkscGFXRD5NZz1kMnNeTzVhJF0pcXxgayEzTy5rfGk6YEw2dCxfI045aFtYNVNScUooO01nbCE/L14hJEA4ano3L0p4PDtSJkwsaTAwYmRaZXQlIzBmJjBedWUkIWxrY3ghZHFaM1hTUTk0OEx1OXtTV2A4SytndjxAMykhYj9tdEYjQDxIUC8kJDRbaFY7am1sKEVvbSF9V1MqIWp6Oj0z''@;'; put 'put ''SHtWO01nS107NX4hPy8pYlFoSjcoUy4mV3dkPWx3UURrU3dnbjdFUmI6bHd3NE90akJvI3IvVXpCRSYySz5vL0VRUz1EXTtzJWs+fC9PNCN6Xi5uL3Q3PDheJTJVVDcyNUdgLEEmTVVNbDNTIl4mJXFVQCszdktwRlpoQ25UMmZ7NGxpLC9UIWhYczJEVClHeyY9VjJmNVc7KFc2OF5nfkg+SUw6''@;'; put 'put ''S3syJFBXaEwjb0ciX15tLDBvQUNxWX1xZ3FoT2VmOkliP046e2heJnxZe2VOfUw6OWtlSEA8KENBTVopO1FqYCprLl4jVV0rI3k+QyFHKERpSm97N3tqT2MmQ2Rjb2RAM0VdViRAZTlvayNmd3N3I3ZCfDwmRiJre3tvOFYlREwlQC8ufHBTYCYrMEhZZUU9S1ZaSiNMJUhQSkhrKWJ9SGMrOVFJ''@;'; put 'put ''SHNhR1h9NilCS0dfJjwuX2F1bGVqc0lXLDFxUXo+Znx3d19IfGlCVmlLYF01UDx6eS54XnIiPWxBNF9qfi5Gbjg/WDlreyQ6UHgxLEpgdGlCWnA+REtBd2tXaGRJNjVIQ3Jka1ghNmk6TipAUyVGYCU0W0grRV8mbllyaTMvbHd3RDVeLyZWYkw2VTxCX0E4W091MDNbK30uOj1Xe1h7VHFmZU5I''@;'; put 'put ''WDMscWc7YHFwMTBbbi93KCtLTnt6KGNLJWwqPk07OD9QW1V1YG5DWjArL0d8OilkeVZMUHZlbDhOfWhyVlhdKSY5XzJ7M1RhNz1VNWlnUV1lV10kZ2d9dVB7ezlFLjk9JGprV3tTMGw3fGNbZWp4PFVXOUtYVTxYLkAse0t7NDJpKiNIMGsjanlsRn1XKG4iKUx7KlhQYnRMcXNyP2ZIazNhU2NO''@;'; put 'put ''W083YXZMKi4hXWtdV19WMC5GYEo+VVkwRXo7MjV9M2JdNj99Z3FientGXVoxY205TnlkUHk1Z3VVXTNiLDkpSTVvS3B3NiMwaGIzemtjPjBMT1d8OjE9XmM/ZXR7TDdtbWp0SEhZZHVFUiZqJXplZT98SD5VfDVMQihYXm08Kk1GREM+IXA1IzdWVEZ5RlhGWEZbbChXQlZeM0RXSyZuX0EpInZC''@;'; put 'put ''K1B2V1crOklyZUtvR10weDF8eUJ8eTp0eTxGImFsUTxbWk1IL0F3UiZbT3VEcDZAJWtTRTF9b0pxIjc5OjwrTXBDPloweGM7MkNWTWpeK1c6VmhEfnkybE5ITU0kdCVnQltiY3tvP3ZqeXZxSz5sP1QvZ3wpVmsuP0A6R1NxTl5rbFc6ZzczfTomdjpMU15QVWEzPWdaM3p4TTF4Yk8oVClbM3I2''@;'; put 'put ''InZSdixWUjw8V2omVk9SOEY4fnQpcTh4Rl9PZSIlcUh1KzZXI1NsZjRnNUA6X0dkV3B7JXB6dFttZVdJajhiemclYmQsSHRVZEtxMzpnIldJTy5rPERrIyhqJjs6Nk9YNyU8YCY9QiQxfkUwQV5rLGptVWAjez1VZHJHfHIsK3V3RnFKUjxedkZoZ3Y5KT1sOGNHcHE0KlJJdytDe1d4U1txRjpj''@;'; put 'put ''JihKRyVGa0VyWVZzVXE/Zl5YUV5RTGEiY0NAYFpdMVo8P2UiN3wpPyshPGc6THJbMTJALGAyQFl7Nik7Q154PHhXeUhOazBuSjlfQEt7OSxCeERPQzZGaTQqJjFpfjQucm03Pj02UyF6MDsrMSZMXypgW1ZiL29YJD8hYndRWEE+ckBlT0NfaG5RbF4lZUY7aVQoJjcmU31qaiVtNHEjKVZ6NE5s''@;'; put 'put ''a017Jno0bVIhWUclUGVudTZjT1RkV2tNcVpQUXZ+K0l1ZXVaLzxrMTI3R3cidSN7ZyZZbTh3Tz5hOFpUKUc/RWBvPjZRblFsJTc+U35wQiY5QCtqUCFzUj0xaSJoP107eDVEQCR2SXl3RmFTZ0M+ZyEwKjtyP0QvUnhaQVJ+ME1PTSleS2pMM2JJJkgsXW06Q2JTfHZ7OXh1enw2ZHFrMj0rWFBd''@;'; put 'put ''Ni8/KzJMJiJrLy5wWHQ9VitQaSs1O3IkakZ0V3NbMWFjfDlPN0E/JG08PX4pRkV0KyovMjEuLGVocUlfbkY2LGp9YVdYdllYRjNiUUhIVE43RXdlem9fdGtKdzlIUCRgdVh8PytoQCFYU3djUyNgb0A8VWQpeER0VCMxSy9sVDQqJEkuJXpSbkV8X2o7cGYhRmQjXzM0fSJXQTxtdy5PX3NJSW5b''@;'; put 'put ''UC9ack1Bb2pZIyNtQmkwSzxdL0hoSkgmWkkmLlA+ZFhxYj8xOy5DYjlrWUV0TzFFYG5lWHFiSGxASXp1RkU6KiVXSFgqXmAkXTQzPkVuSVExRUJdKExhUVJ4U1JwcEBIVHZoPzlEbSVeVUE0USFrZz1qWlIyTHZOflpeO1I8UkRgLkZ6ZUdkVTR7Ojo6PzwhJV5pM19LVXJiNmgoI1ZUUnxGPkBP''@;'; put 'put ''RSQ2S3ZLQGZtKFNFWjBnR1ZeTzFUa2Y7ZG5ALCEjYnNCUSshcl4wMmc1MFI+N2BLZGZvMGZlb1NOMEskZ3skK2ksaUdQKkhiKFNmXzx+ZXJIfEJyLzo0PlduZywwb0hvJG9IIWVOfWZ0RlgmZDBwcEkoQGd4bVI7dDAsWyVKZ2hzTWF2T11wPFMzbS85SVlJeXc8PD4ja3tuZzR1NmtLWXZAOzdP''@;'; put 'put ''L0VtJT9nZzU1R2B5Kl4mOzd2NnoiPkM1cVN3YW1YXyRsKWE3WmBTTyguUWdmbT4lOmYwKWFpbDNjLjh+N1Z5b2FbOmEuV0dSVzQvT2hVYilEXXYmd3pRWjYlVn5uOl1QTD1wYXVqLnp8TmBFQSx+dj1TU0YrbDViLmAyQHF3dCRlXktlN2tJIS5FTzleWCNgbE9lM1pjOSxKWG01bHlIfGVHKk0+''@;'; put 'put ''NkFXa2wzVl5bI15rOkE+TGoqMjVdN2hNXXJsO1ArYFFgYX1DK2R9VCY3PCV9UU9LPSY7UzZNYGxFNUYwPXIselVfSyVlM3NXc1NTJHg5e217TUUvbWwqViQ1PlYsTW57cVMrMjc7e0I/KEl9OmduSWNYJFFZdCVEP0MvTkt+P2kxbntLcTM/Y3k+Km1maDpmYTc4O2wrdUomYkskaExrNSMlMC8q''@;'; put 'put ''fiR5XVlWRnhPZEtxbldYVldERjBGXl1nMXFAdSxZcjdLXnxULF9BU3RHT0wxMU9DV2BxRnI/Q0ZzUjY7I018Vls7M1ElazVaak8zM3FxWUJiL2RlPDJaWVhraT52cjY3O2ZUQTt7R2QiNz50JnwiOlIhd3ExaCtNdWNWJjwjQk1lPnpRdT1gVlB8eHZ3eHc7fDNzUkojJCpyM2AxImsuKi84TTU4''@;'; put 'put ''SWVjN15GZiFwYiM/b342VC9vL31VVlJzKnBHeUZ9SE5LOmVsZFtfeDNrc058VllZQCtUUEhzfWN3SmgscGtSMlc7THJEMkBFRE92eWxCSy9SZH54Pzdmb0hpR1BnTWEpOD5CTypAe0toe1IwNnB7eDQ1L154c20xIzswc21aSGZtLC9hcEooYWNjIVZPUSFFPn4lWVNIcEcoSkpATT9hPSY4MV5q''@;'; put 'put ''WysyaSl3OlQiWDAsQE5ieUw3cF5BZWA0cHs3XTJPTzFZL3NSaltLTlNHXns0RHRuSU5HRU1xVGtUNUN1RSt0bzdUV1FOV1s7Lj1HPTErNWtbJHUzMDBPKDE5LEx5PnZPOV87UyJqfXoyfk82YFMvfVpbND53VXI5Ylh9SjAkdl1+UEpoJG42ViFrOUNvNTgwfXI3X21OcEspXk0xV1E6MnR5OU9A''@;'; put 'put ''a251bVJKLiQxK24qS2smdFQ4eGNLdWdAVDE3bDdqRi57NDx3I2x7ZUAoRk9SSE9scTh7MldTKm5HYURaT1YvbWcmbVErU2lreDA8d3E8VGJSSE9bMnNUQlUwT1JxP1Q7ZzRTP1Q2YzJGP2RIcVoldmVVcnN2b35bRFtFJjtQMCVzaSozZG1Jdz45XnRJJjtXUHl+dCxGfUNjPmZgO18mKm9wUHFQ''@;'; put 'put ''WW5SMiw5KUlhW0QjYltXezhSWnBLWSppSyUlUVYkWzNIN3Q6QW8yeHEvX3d7Ri45UkZfN1JGYFVuSzEjeTRaSk5PXUxdMEYsJSo/WWJHKlJYI0dPKWwpQUxoQiM5WEhFXWRUSE5McTNYZFJfWHtrPnRhbFomTFolbWU4azA+eG0ybDlXXl9QQ1BGKFFdOHJVNVtlfT1sPF9WRiNzeURBIy84TDgv''@;'; put 'put ''IzhKODpnOjhsWVEyRHBrMmgkOyozP1dUSU1AQjpAOjI4eE9TZjxnIXEvcCU/XWwkbXVaXmtwOW05NjBCbiJVfkdaUFksSUo3MGA/aDBkYTVfYV9NJFg6JWpOZnUuSWkqbWMhQThKZEUsZ305Vz1rMWU4Qmg7JkpASWNRQ309Jl55OzYqUitYUUoxLFAjOSVvKXAyfUlRY0k2VWFhVEkhRCxTVFVx''@;'; put 'put ''STdYI2FeRHpwSkxWKjJxS1hwLzw7IUR+SEspPTRsKXBKWjc3W09RVnVuaGAmZUt4UnJqQkErW01GbFE2aHxlVjF5XyljLDhWZkw9VF40Jl1VJm5zVV0xcy5XI245ey9XMyNydmdwb2pdUiVfTiVEKFVzbVpTLCEwK2NpLHklWzdiL1NmVmYmZTxnWUsoMlpmbD47NnVWR1l5QUpjTGMsfVpyWiZR''@;'; put 'put ''P30hUDVSMWojRGdrajZCSmNPZldKdUkvW3paLC4+LHp0VCUmSWg7NjdOREBJKGVRYlM1RGwzYUxPKywpel04XnowUUtOS0RvfSFwIyF6KHZFX0dDNkpEO3ZZJkRpeCNVbHxvVi9lNH04UDUxYH0/aDt9ZyssInx1a2xUblZlamAqQ0RjYzU7PmJ0PSNnZlQ8V2hCRldFb2BLMnxSendQUU97V3h3''@;'; put 'put ''dVkudT14P2tAWC9qNil7Xm56KzhkNzYqS3x4O3xIIXooTDNXLkBLWTpZTzhhekJIR0g2T0R4PFVFQksxVC4qdn4lL2J+cEdwLlVnUUokMF5ZOk1neVRXI2hSPyEuNGxpKztBdzxJezxrIVVSJjxGP1l2RSVAUXJ6W0IzfnB1cEZIIlM9amNtSHh5ZkViaipGNnhoZX0pR3UoZ1k/VylHRy9qPExW''@;'; put 'put ''XnYxW05eJDo1KGQ9ZmVOM3ZkVUElSjRrb0IlYWQyZkl9RmZqYDc6RW81JTdUKGxiVEFlL2F6e0I4NUhFJlZyIWhYZDdvS1RaXU84aChBOktNfm8uOkIoamR7ZENoQSEpQ3hYNXpbRXwsP0V8LEwuWjIla0E+S1c8RTIxIW4ofltYKjFSfCxGbz1VNWdHUWFzaERvITY5SEw4Y3BicGl+MHY1JDlI''@;'; put 'put ''flM3Sjs4P19vYHRxV3BGJHE/ZDZocltPcWttOUV3WHJjOXRRdWpSLl9lSyt9NzhUdmg3Sj9TMzFzOkQ4elY0NnUwYV00Jj9iNHZ1VUk6dDIpUW45ZTdgfXM9cT1RZHYhTntTXnRaTGtVcm57PF1VXkJ+Y2IjRSY7LDxsKERyNGpVcjolKnM5QFN5PjkpSWFbczAwJH0wXTBOMyJycDBTY0tfeDc6''@;'; put 'put ''fFlhNiVXN2Q2NTxBaSJkSDAuclc7bWp8WFo0LndwPmp8LCUsd11uZDxON0tJNHkmRi5NZilvUHI2Q0c7NntKeXVaMiZFdkgkPzxdTEBba1RDV3c4bkVQNERgJHc9LzIrWlI3RHZrKDp3bVcmT0I5eHNoMXtZJj12U0RJeio8b3ZVRXcyPmhsYHxzS0BCNmBhJFpzYG9ONj1uLkZ6fXlPJGVQVE9F''@;'; put 'put ''TXFTcjs/T28vV3QmPXgiPWgkSEgvW18mcU9uJU9NYmVGZHt7Uz1uTzk/YEQ/L35APixIbnE5Rz15bWEkVmJ8fVFjcTRrVWV5OmM1XjsybjlLKmNNTW5OWXA3aUdMNjViUmI6PXM/STRxWiQ7NDBaYkQ0OnFraGw8ZS54MUg0IkdGYHosanVFdTQhKjpheSwkaDROYjtZWyE0dyh8amRuYn40fCRI''@;'; put 'put ''WUtxdCVlIXUlZVkrTTs+fmg2Syx9Ol1fVUhuUGBvIS89XUI/T2dtYjowdTF2PUZwclEwY2d0UVUrdi84PCEyZjtfYn5adiElMnI/JVtIS3E3blAxe0xyJGkxdUpeRyFTdWFDJllMZG8iRylrZXdwXkp4ekMyfll9RXAvQUsxI1BvRlZSOmcwRnhPXnpyUT9eRmRrLkowTS90KSwiUWY+L1g2akwo''@;'; put 'put ''KTYxZFJhIjlIUDYsSlFEOGoqeiphLCxpM11vS3ZoUSNlQ2p5ZWtxZDlHaSFdX0hjISUueyw6fWZjRCkrNjkxflZwbSomMGZNazFYOF8ocU9vS3NdPTNCWy5wWVEyckEyU1BVVy9iIUM/XkddVjZiTks6TiNCaFhrfncrayVlTzwodmRgVl5Zd2cmeTg7NV9pJWxIUFkpNTsqfXlKeSx5LjRzUCpB''@;'; put 'put ''M3I+IkZlPDwsXTA3LCM+M0dqIWhpT2QhaGdpaWpGfkNXbzBAKjU6JlAqUTVVWmRkWGFbdkdjM1FOQGVdbGooME42dXkuMUcvOEd3ITUwZXomRjBaQCNgMGRUMFMwSy8razBmUE4paSomTU5gdGl3MmY5Zk5PXiRFTi4hO21KNlklbE8xMFZ7XyhTLHFjSWFwKlRwRXo4JiRETGVnbU9CS0IoR2Zt''@;'; put 'put ''OFVjLmQvODx+KjA5MHlMcFBUWyJSe1QvJjxqcUsyWUByQmp+VCZZOUAmcTxTZClWb2pMOEtjaTxCOHpWb2o1YUJzQCt2ZDt7L2ohN2hyXVJFMWQvTlt5OGd0UV0mRm15fWBDZjlHPTNwWm9Gb0UvWERpeF1Vdj1sWmxiL2w0PnRYcnJzLHosQUxTdEZgKWQ4NHZKcmMmZ28iaD05WTx5Ll5aZGBP''@;'; put 'put ''S1Q2UlhCLlQ1P15SR29TIU09OU5GKCszY3p2VkhxRGY0cjRiZFNpJS9QJmUiLjlINmBwIVlZNX1bbDVfVmFJYEtVbW50XSlOSDJZUlE7elVZbUhxV0Z4SVVxOXY5JlFVI1pwYXwvVy4oSzcoZV9TTXV7NFNrX2sobjNgeUVZb2Njbk5WPW9WZm4yVXRkcT98V0EoVitHTFc3bnwpI1o0NWM8bndb''@;'; put 'put ''JT1PJTc2TChCTX5MJTlUPjtUI0JRfnE5ciJFPj49a0QkZyp9UWMwUDR3ImoqbkFmZG11VGlLfXJnPXM+IS9FMGBDV3NPakByNjZ8cmdNLyRSNk0leWdZSUN1eWd6UjxbYmdhMUN2e25ZVDVEX2dNN0tFX0BnIl5LUWpsSE94IUh0ST8icCIsOSU7fCMidix0WTAyX0FkMSp5eFBHXkB2aVZWQCs6''@;'; put 'put ''KGNFc212VEMoKVtHSVBpJVo4aVkwNkl5MTd4QDgvJWFafVUqODwkSl0zZUooS3pxL2Q0NFJ3fVNVNms1eURGZ3IyU2VNMHh4T0hEInkxIkNPeFI3Vj16JkVuLmIpbGV+X2BSe1E8eHhtLHw9MnB+TjFGMHVeUWhQZGc9ZXttaGB5YUZWeiVAKUhxbnFDe28mLGVrOTx5NjNRVXhmMTZ2ZENQW1Jr''@;'; put 'put ''I31aa2BAQyZicHU0U2hPXlY3d0hUJmhpWylqOEpXaF1pfGN7RjtAYCVifCp+bm9oLiM+RSJUPm5oeSZiZU54NF08fT9zUlBQZEtCXypndXIzbVsqfiU/fXVWJisxeG45Jj8wMW4mWS9ve1tqOlhiTUkoPE1DSSxPPWduW2ReRnFpfkVeKz1ZfDBaZndAdkZOfE1GbGpSQ0YraWAwbUksPH5aKlE3''@;'; put 'put ''TEl2fjwmP1Bke2AyW1BVbHpLdVUybUkkOyZrJVU9UV8uU30kLFhdVSVUVWghaTE/ZnhwNEBfVkUlKUJQbS9eSyRifGN7WjxxeSQ/TyouNW90OkAxLE8xVztiMW1JeWI5LE8xW09xUGUxbUk7Tj45SWoiVSlRLGQwJjUlZF1URlN4U0o9ZyU5Kil9QnV2USEjIVE4cXJOIV8mT3JWd1BVXSh9Vm9J''@;'; put 'put ''P2ZiQ3lDdjk1WkNOYEpQdl96RVgzUVNmfVc/YzlKOk9Xa2RbSTN+cEVIKXVwbitLSWtVMzMjRkJmenFjbmJmVEV3bkJOQiFXOlhmLyNHdEFtdVRLa0U5SzZSM3IjaiM1OGM9b11va19CRjVCMC8pZy9aQ0c8aDpoVTlTS31hfnQ0MX1MSFA9UFd1QFEzZEp0cT1rVUJvZU1lQUdofCJjcTIzbkJu''@;'; put 'put ''Tz9ibjRGS3h0OXJnXnguekhOQmhsfm8+RVUze3kzZUcrTzBVTyowSEx8REBxIT82Wz1aUyFHdHpYKHQuTDxoWkl4ZCNNMEVpeTtXTFVbVz1Gcz8sTDtXV0EoQWZEVC9UQGFdQytFZk5NU0NkUnBCaHgiKH1YZFtDRC9OPmJQdjVQRlIiKU03b0lOWikzd0FxdTMxNEUyaj5abGMxSHMicWIvP04v''@;'; put 'put ''VikzYkw1YkhqNHN1L0JQaXcxeSkqZCZOb0N0QDB3aU85RWB5X0g3SVFqYSJ8UT92NjRHMy9uOEhsZ0lJcilgPjUheEZ6KEtPOm9SKndfNUZTZUd0I0dKTjFXamkxd3VHey9XM1MhdEpiSHFYeVg2enU0e1h2TEFeVDMsUFVYdz9eOVs+fGVdTChGKHRpQ11bLilURkhCZSJFS3s0PUNoRSVfWFsl''@;'; put 'put ''VC4pcGhqRDxjLGh7QVdIMG5EZ0xIZzV4SWtVamlFLFlnVUhqdG9uSTdxQ2BgaCt1XXZ2ZTRZZVJGfT50bk56cFZidCNXOyQvTjpIIUdYZGdKTXc8QkUhYzRrSElFXVcvYVYqSDdxaVZCNytsVT1aPnV9eWJJamM/alQzTER8QzhBNkk/RDU0V3wjMX1BJChZND12XnpmTUNCPywuYn5GcSJUaHZH''@;'; put 'put ''TDdXUjIoZTRrTjh0e1FQUHpEa1I0Llg4K29JdX1ffDlzY3JERXBfTXgxX3EsYjBfOmlKRnJ6Uz9GQVJRLkE5MTRifFY4TWJ0SkJSdG0vTCZYOE0yU0NaWGx4JmFTYU8vI0c/aHxqUUNoImV1VGgiOEgvKUhrKW9zaUNdTE1GRzMwaz1CVEppQypCbiZ2bCxNQ0BCWlVBanFGLEJObXQzMV4jOmh6''@;'; put 'put ''WGRjLklaQihrP01geV1lemklTVVNdFFiaHElI1omTV5rezMkPHdCO3s5JW8lLzhQcmMseSIoWjUsWHc9O31HW2hhTVQ/I11VTyVoUmhJc1IzbCp9JWZebChaRnI7b28/clc9eGw3Pjw8PXhfKkpUVjtKPGBCRz5LQXdgdEshS3k6RnB3MUYiY0tXRj4uMXZ2djlWNW17XiN6TW8uTXhRNDFAQnU1''@;'; put 'put ''X2Y0Z2xYUypzKVF7VGlJczdYLHVbPnYlYzwxLF9bKCpPQ1JRQVkjMCU4SDdZfnNxQiYiRmhxNy9hNSlWUGlRe1p+NVdESW1EO2tESVRFbCFnbVBtfEd8cH1PT1VSaF5GcHVCUSIpK3VGK2BmMHxJUjAoS11RQCFJfVU9dDpVcT45ZHMlcHtkWmBxPlh3bDxmakopbCxhMWs1eU9wYTpGJVBDOn55''@;'; put 'put ''NSJJO1s0Kz5NXlpJKlIiPWxQYmA2ci89NFphQzZ4dCZGaGg2PDsiTkxSQHJsODAlfE1ATGoxRD9nK2RSYiNHaWt0IW5mWTJhVWVkYDRPWDFJNlciWCk1N3R9R3xkVWplUixmU0Q/IXo3bSxVNjR1XS9CREFHLHpvOF1qLylKZEBJVTxwMmkjOGJbXVRGfWlSSFpXWSwjSS5hbDYiWiI+PlpKVVJE''@;'; put 'put ''VHUyQ3FjfkBxVF9lPnlKPCZjbiZyXSx4IWpUUUFVdm5bKlhKRTtFU11Va3ZQI1ojbDs2X2dKYldPdl9TdVNTT3R4eW1pYkFsTCRzIzEpMGVoJG5FNkRXdlVYbFpMMS9vNDNiSGZSIypfdU4ibipDKFFyXVUzSlFPeGUwWVtFdVg0VVokK00+VSI1eTNNZyI0fFtBbl8/MWIvW1BsSDAobHZPejJA''@;'; put 'put ''b1VeR35BRFdrVTheQGU4XkBXUTQxUWVgNFh2JClwdn1IO2J8OWRAfkBFYiIrZH58ejRyJFt+QCpJcTMubjMzT2FMYlNUJVJ9NXZMTzcuL3pPR1k2XXlrXS4oXis6a04/aSFTL1VxXlllbXksMkhXIlYqeXVNcjFWSWJiNltrLjk/VTFZKyRteVBKWHQzYmhHT2w+cSF4aDBrenphRHVCJkJ0RHB4''@;'; put 'put ''fUV5R0BJOk57Yko/WTI/KiRnekcqL1UoVz87W1dJUmNpTkVJL1JHPkhvWm9KeCRESihBOHVBTGlXU1A3dmlYYyNrI21ZfHZ9UUpzNCRnWThuKDw0S3RMWHZdJV5fPm9wWXxkdlI/N2huL2tnJGlMNlVhdjpLZTJjUmJ5cmluS3tCOHIwbWlWMEBAMnVlXX1bU3lGUk5DNkI4NntYNGtTVE9NMjJq''@;'; put 'put ''L0Z5bnRRXTFxQ2AlfFQ8WSorZmd1Om9qeWpibU44WVM1fVdFPyJLPjd1PVVFJVtXJmc4JFBKMGdienJ6Vm10Q2AxO2heKiwzTz93e0s9VXQvY1JAdTlXZX57Kkp1NlVTRyk4bkJoTTxiREZlI2VFeylsYyUofEwoYW5MTW1nX2p+T30qYTQseThLVEJ0T0Z0XT94ciZCaiNQLH5eQCZjQGBfKnM1''@;'; put 'put ''fUNqc29oNiU3Si9hSkVHXlBVbHpxNC5wPjw1aWEpfUlnXSs4YSI3SWhFbFJjZXR3WGJeM05KOlZ3O2gwcj9scG9oSy95SjosZG1SRlQ2NSopMm9RPEhtP3VUM3ZWWipSO3M4anpZKlJOKyslZmYxfnY6PypjQUA8WWBvS19pT2djQk1ja0ZhUj1ZVkxjdSVzNS5EcTBsJX5eOm8hZFthNlBveyMi''@;'; put 'put ''ciQpaS9EMmpYQl9mYSQ0TnF0byZxNWUrbylGUTFzTj5PeEpYTkUuO3xuRF1FfCFpSk93LixIPl0+Ynl9VT9PJG9ERlpGejA3MCFKeER6SyQ7dUNZVnBkZ1lYY3A9RSFJPEYpV15ibWNMa0tWU1pjMS89PlkjTUM+QnpKI3F6JSpQYUdmJlZpeV9pTSs3IVN1RzF+SmJBPm9wSWdhNXU0aDlHJi5n''@;'; put 'put ''Wj50UDB5Umd1ayE2S31yNT5GYnp9T3xLXUZ8UHNLbEU2KnJWcWYyK11YQEgxJCkjTVFlVTUjPURfbClJRjk9PG5ocH02PHpPUzN7KyJgZGBgJDNSRjlBS2p2YVR4clo8QW58bXttXzglOi50RSxFU1Ffe2pyITJqXnU6eXwhbmZrZjBHJjhGZGsjeUc2cCxtP0k/fHh3UXpdY18uJWowal9mMihq''@;'; put 'put ''UkhmYUVWQ2JpPVJIZmFFZTRsRTZUOkZhJEojZ0RTeSx+flVWRDx9Kn1BcUImQj5CX0FxQiZ1Sl9TLCxBbjhla2AqVSIoT3tvTHR6Wyp1QiluaGpeR1IpXW5bd0c0JFgyLzl9Vlg/VDoiIz5ieShuW2ZVWGApKkV8TV9JIUo1ImBaKzBTdDwiWWIrMFN0KnQpcVFWNHVxSXBsZGxzY0IjaGVPT0x1''@;'; put 'put ''SVMobV5IOFldQ1IhVk9RQG9JNlciUjlxRno5KlBtdHgkLEB+Wz9ePiEwQ2QmWSxmJFU5PD90Wmk+TENtPjZ0IjtBT3Z9dm52MSlnaW9RZjE0ZzFQZlBuY0JfUD08VnxNMUZ9djFvekJpbGdYY1BpQjxaMXUvOCMhQD1WMDBEbnVvQHQ+eTdrQ31Ia1tfQFhFJTQ5Wj4+fmtzblRrbD5NPWkxVmck''@;'; put 'put ''LGhnPzRkOChvSjFmZUxPMXFbbUB7NzBgaG0udEJbdio6YEt4cVQqfiZ6b3tab0gpPiI/bFBkLnpOLDp3amw3I2tLXkgwZSUlOzJQbjl0ZVV1Jnc/XTJkK14oLjpfN29XcS91dGhZKlVGRz4xSnRLZUxWLmZDPyFuZlEqYjBTfVhuPmJmTl0kRX15TUd4eWhicDN7TkllW30mayRbMG17IUNqOm45''@;'; put 'put ''VjM8Z3ZpLnptUXdTSWo7RmRYMTFGalpecSNaPU5Ne1cpL3N5Q3EjenZAQl0ySUtHamhnUXhtQEI8fXJgOEFfL3NAQzIhJm4kW3lPZUdjX1pQc3kqTHtmaFcuWWhIMDZJOmU+eTpwLiNQI2hUVTFdYzRmM1pVKStjdzExdC5xVjJpdnk0ZC9YW002fVZqT2F+ayE0Wnx8ZnYiVGI6IzYraTlJcWs5''@;'; put 'put ''SVd3YWw8PC4xL1VVbWI5ZHIwRTtqInY0dEJKcXw6a11VSS9bR0R4IzN3dHRwXjhWPn4kZmY5O0duc2dpUUw2Q0lgIUAmNXEubSEoTWlRY1A4N1RLYmNDXyEldio7My5jRmAvK1hDXi49RmlmVlByaXkjRjBoJl1sRXQvekhBUF1OQlIvaTp3V297Wz06RSh+cnUmTTchRUEjQ3YvZzFtSVc9PTVU''@;'; put 'put ''VFF3R0VMdCxad1A1Vzd+az1ZRjReTC5kXTAwKkcwaEB2e0l0Y0J2XXl3UWBBc09POXFzUzUkRCMyISosIUFlaEdPUWRBMWtzdjdkNnwlS3tXT2djKTRLZS8wXVArSkg+a3x7W0s8dCN3PkMhNTRWMUQjdz9efCs8Wl11e3h+a19IKks7MTdje0QsekRuZX5vY3g6X11jL3poUF0xbTlDV3tWdFpo''@;'; put 'put ''YXxNKk5hR0Qje0xiU1BzIi9LTEpvYzRsNFRhYik6ejVCeGJSQF9VQSNKT0IjVyV7YyJXOUAyL0BCeVBuOSJoUiZ7Y0FQWFBNRXRQZDQyVk4lXWFxK34+VyE4XUNiWEhPYVchdypdQSNNcSVFR1pEQ0d8SDtmbCUxeEt1LiJXTTtvTEN9RDFab08oWVN3WnhEXmltMVpWeWssRCNgMT82c1BnJX5K''@;'; put 'put ''UDRsM01nI1J+UE5JK0lDIV9jZUNhdjJ1ZW11MkBAbXVAIlsiPE8lUVR6MG5DdT90TEkiRzVOP1RDKW50enRAZldwaHJKQHk6WGJUMy9WYlNkI2lGR3lLOjllSlI1KE5wcXxaPWZ4RTVjTEtNTzVdJChuLnV2anpCODZBTlpEYmJoT19DODZ+TVo3QiFbJHJndTA9JjM6LyJgWjJaTm5rdHp0Zlko''@;'; put 'put ''TyI2TD1Yal12UUhUVDJrZXZJT2x6blJNPjFsX25NTDMqRzZaeCg9IlpuSnFCS0IkLz1OWil2alRuTENJOzJzYWFHamo7NSU+dlIvTnJyZ2FxXVV8R10oI24ya2V2dU1KUytybmN3QDgzdmpnTV48Q0ZPZENWZTFidltPNTclSCY/MUg/K0dXOXZBeV0hWFJWPCRXTDswZkxAQW48ciZiZW14YDhZ''@;'; put 'put ''NjJXWTAvXylZbjhFaEJSdzcla29UMUFPb29LQyl2cj8rdSt8Vix5WD45a00wbTc3c114RHBnYjM5RFNKbjpFeU02UG90MUlARHFXUUljJXZjaUhTRVpNTXY1Oz18aiIuYTpEMiNBNlt2WnRXdkRpLiZlWntDci8mPn1TMio7YjFSfkEpVWYpNXw1bTkkMSNqW2A7fXs8dkVYZDlYT1VjOVhwcSou''@;'; put 'put ''fHNjKmB8b1k5aHIqcVZ9MF1QaHpzbF1bSz9dVSRIMEJJRjl1ZkBEfHIyVE9dTCZAT0t9fmM7WX5UO2JIVDt4U0p4bTRjbW1edzBLaU4sSk9IbmBCeGsrMCswIztTbGFbIW16QytsSnBqQEcqZ15rbSVWbkdbV2tkOzwzVSFucCs7YTt6XWMjfTdJL1dISSZNWkdrKTU4VCpSUk5dTDlRcS9Gdml6''@;'; put 'put ''S3hXcVhhXTVOLGRTYVllLER1Yn40RWw/fmIsTEpbSjhyNWVGSlMhS18sZ3pyR3sscEs0Y1pgcHUuPVBAY3U/flBqQ2YqRUpbYyE4Q0EjaVE/TjB6WitpW11gWnB6L0BPRzs0bFFmSXB9STNCWD56KVlWNlJVcy9wbThyZUpsXX0/K1szQnBRWGxjMDYxRipWOHooLjY5OGIvYXtsOiVjWSw9Qk1Q''@;'; put 'put ''big1LDE9WDpZIllTd2p6dGJnQiNSIzV9Qi88VjsibkJiRGIwU2MyXThOT15PQVVBS0BPMSN4IzFXPVMjNW5WQk5bVyQrPENaTyowcCokaVQ3dGF8WFhzWk5VYU1eKz1PelU2NCR8WjQxVlAyMU1lckdCens0P316YVNRVTxER2dXSGl1NFM+aXV1PCk8OTcuZyVxZE92WiE3eHptdUhAMn5FX054''@;'; put 'put ''Q35ZLE0rXSJDcXpEOyZUKVpHXnU9bFgoe3w/YkZzNHkifFdVblR5Sko+ZX4qeVQzI2dpOVpkfnlWYmVbMFppdjlgSkhvWmg4VmFoOFI2dysqZmExWVNTVjFMQigwP3Y2TGVQImBbWl5faF03QCVbQkROIU9jYEBRYTRCaiRGK0F2eFNDXkFsYzt7VzYyMCp7Um1NaHp+RV9xeVckaUh0dkZ+W2w7''@;'; put 'put ''bVtlM2F5VTc/eEldemc+ZF10UVVmXTQvcm57QWNGdy9JQy5CdEJBQUE4X0VBRFhyQ31FKk1lY3kiMmkjXSlDQEFEdmIsRWE9TlJiU0AyT3F1aHg2RkFBQUFBQUFBRUE5PCEzRnBJcm5FJi5ZL247ZGR5WDJNdzNiPkk7KDU/bW1iWEFSX0FiSCVfbEZfWkYsbUVjWl87SWBIQ0dJQkhXKXwvUzxs''@;'; put 'put ''VG55UENvIzZxVzwrVzYqX11WSyUxdn5aMVJCSiJnT0J7b3I4SXlUMGkjTmIpZkdHLjEydkMiOks3fSwhSiFycGUuLDgkTz99ejtGUntqaCFiUlNPT3B8OSVWJX1JWHx3PyVYLnRwZWg4S0VwYyRIL2BxQDcmXS5zRkd3Iz95KVZIW01RJFtlZGlvbUhuKypnWFk+SjNXezE5ZVBhUj03Mz9rP0VI''@;'; put 'put ''SkQ+Z3d7O1dIWkVSLDtHWnB7dWFUKmVWcGt8SmlCXU8iRUdXemlrKXc1aiFnfUtkLG14OFE2X2RZZjdTM3RUZHlmcno7SiR6MDg2RndwKzI8a1g7fDcqaGZnbXV6IVo0T09FV2J5Nn5yZiV+SUxuM1dWMy4zNzM2bnl+QjlbWTNAOEQ1fnNyQD0yc0YpYExPQD41LkIscVo4U0RGRzBeZiM6Qkxj''@;'; put 'put ''OmEkRjZdTFpAeXVOUENvdDtkTyxaJVksUWE+ImhOUyk8Sm0uMyl4JXFoY2ZyQiZmOj5DXXQwQkQlXl5ONjJyc2BebylkNklYcWpYKipBRVVFYVM6MV1XWi9MfnV1cW8yKyw5fV5+MCkwbzlOe29EYmJrNFdjbFhnTFdfanpAYmQ8czorS2coPGxvN3IuWWk9M3tIdGMpJThnX0NOflRYW00wWUt4''@;'; put 'put ''Mzl8JlF1XTBYW2ZzZkgqRGpFR0NxKWNEOyR+R0pwRSRRKWc5RmshX15ad1AsYmhGPHs9RnZpSyJPcjdUc1JUfCpORWsqeTNSMGpKO0JnIi5xejd2aUheOkp6YDpQUGU3LzVkeiY2U3lTXTYzTm1jfFFzbywqbGE/MWt7YXwqXXA5N1A+ITwsPiomWSJLNkNoQDtEXkJKVnY8bkE+b0xTWztMXk1N''@;'; put 'put ''ZllzVC5qdWwqT21lQmo6eXFFY19uKCs0YkAmcTltb0ZELHkve0t0K109QE96SmNFYWxidWM3V0UwTGpeKTJQeHNCLnhbemNqfC4xOzl6XkRYXnkvKFkyN0VDK3s/W3w6eWJ3IjhRZD5qaD1yYl0kSFtFX2xVUGM8ImpUVWUxUnpgY25qO3tbfHs/a35IQGFybTN4PSMrR3t4Q1kzIjxeJSRVRUwu''@;'; put 'put ''SUJoX1NoPTdMNykpeFJrZENpOTpqRnxzfkQzQEw/aGF3MC92QnowR3UxVUAkcCsud1AuNU8uajNuTzB7STt4QSRVYk1zPS55cFN4LyY6YTIwfmQ3d0AqaFhPJVt+LjJjN1ZnbCR1XVhfQFpjKT1bb1c3JDZURF1dfD03OiFZQnw6MnpzdWovaGxtPSY3RWF0aW5DdSw6e1NKV2Q3aC5KLl0hLl0h''@;'; put 'put ''fUFyQFpKPEZEYl1HN3c/X2gvfjM8eTQkQDxhSXQ+e0JRQkJbMTUydW95b3tfUytCdF8mTEJUNigze2t5RjN1YjZzWy9pQWpqV0JaaD4hNyE1OjhXbEdiR3liZDVpbzFFKFh4ejxoSX03V10vZnlFUWh0VjIpIXo7c1c5PHpgViooLzhmOF9DZmZ4UzNgOztyKGtDOXRASylIXyttaTZkaFMoeWEw''@;'; put 'put ''V11iaT0yUjE5K0JwNiFJeDc3XytwUWJ+TCZPYzNiU3RucVZEPkV3cl1wN3h9VTJRZENCY3UwQHIkeVg8X29iaSF+TmU0dDlsNC4qYUVbOWZJQktIVVNaTCshKFRgYzs1VXJYKTp2UHQ5S0tlO3RPIU1LITRsdTVdQno2Z3IoX3s3Y2ciOntxKFVEWjd1dCopO3owLjdZTTQ4aiNxV2Z4QnUoVzt6''@;'; put 'put ''WXFJdVZLMypIWSRda2JXZjFAfTcidSlweClLdGJyRmlzV1dTUkVqUzd2UFlwYCR0Ij8rQmBwcEAmUjJvQ3phQGwxS3RHfCpTKzhYeS8sZVF+IlgmTChmZTI6KnJLRXMqLGhibCZzRnF7OU08T2ZYdVN8Xm5eQ1JJQSFtfnhiJTdFZDVUTTdWKFZmSHQ7ZWQ+LjE6U2pqTXkodCprO0FRQFJCTVVj''@;'; put 'put ''YTtiL1UjKFQlUGFldGQpYVAlal1OOkNReTo0IzorOUdyI01aYnw/SlBpSyM6YkdacTgmKD12ZXw4a1hedVJ9eHVTWmVXYzthOSojKTZgWy9jXyVVRT5bSEE+U0czWDkmOnVHNGxbdixMe2wwPCgyT2lDTmk5S11FT3FySTpUbWtmN2RJbDFabU1mMDlvcm9BeU8oTE9WcEhiR2FlbiZpeXcsOn0k''@;'; put 'put ''KUpTRzM+W3M5cnBgNH1ydzF+fkdSPSlIWDpiX1M/dWBuey9hcDpRQDZ0cEtHQVUpO2F4R2IzN0Q4S1F1ITxrSns1MismQTxkPWwzWXo9P3RCZyJsSz9KdTVbaH0mfGliO2lNQy9Ufn5oY3ouZ01mZl1VRmoqR25vY3hve2N9Om1NV0xXSD9CeExTdGJNU3gzWXRwNWV+dDA8MFZRZHQ9UWwuNEU4''@;'; put 'put ''RGpJcHVXMng0PD5Dak5oZnk/ZGYzWnx7QyU7TGkybEVzOzthI1ouUXclTnAuISooQyFzNj55JTB0KHRXWHlTMkhRY2lTYEA/RFBxNE8rdUshdk1bRCFKSkE8Qz1uRShJRXtNIShveHFHZEN+SFliKVhgIkxrIXc4YjA7Zz55XSF5anxGR0tEbkdKJHdLWWw6dSx1LDMhYHwlQTBOal49bTBOaU1l''@;'; put 'put ''bSQ5UF5aeS5laXVUdG5hbFk/JEJDZzBYN2hUKz9raGI/JVguNVowX1VWO0BvMDkuVTJIK2c6S20lUDg2O2c+Z29iVjRoZ2gvWVZqKE5HbT0lOD4rVT54MVFaSWt5OT5GZUwxTn1RbHYicmR6IzM6LjxkVkxMK1hHfUshSXlacnU2UGhnbDIqRn5mdTx9aCwjK2d3RT4kQDpFZDVycj5EKFBqckE5''@;'; put 'put ''Rz8qRXowLzI0I2ZWWHJPTEMuY24hZl5MeD4lcyhPNTVmaVo1d259ciErcltJSyFDJDRPaEtdRGQ6PHQ3dHohIl9qKjkwWT4uOT1iXVVYMWN8PCtSPTR2U0U+eUpjTX51di9PImxmKXVKZ0tKOzUkX0hNcUdwbFUlS1AqQE1YT2BLbTFUPW1pRng7NVhWY3ZdXSlNfnFKPzN2bUBgJDw0TEN3SH0w''@;'; put 'put ''LCUrRyI8fWVAYz9eWEgpelEpaX0wUFUxISp6ODJkQ0k2Wzl+LiNqSmQwPlY/ZDU8RCNfR2JDNCw7MG19fEVERlo+KVA/MkpUPDdYMTU/PmgjX0VtODJ9aWx9UEZVUGBaKGBCQlBidFczeW1XVVZ3OnxRQk4vVSo2ZXsmR30zKTZTUEFMbVVnU3YyVWV6LG5feERoX3x4IWBwfiYjXkFbdFJmQio7''@;'; put 'put ''PipNcTZRWFdIT3Usa1siRWNbY3Q3YE55Q1Jndzk2MDhiTXsuOWFeISRBVW5DMU8uKyRTSjVqYyU5PCMyfihHWCwweS8rXWdFQG84YV9QM3Y0fiEyQz4iNl85QzspSlZyU0k+dHlLe1s7W0ddS1l+I1kmcXZLXl1iWnVnWDYoRiVQNmtkZTFdTSRVWl1gWW8hcWY0ZihSMSYuSjNEZkc2YiF1bV1W''@;'; put 'put ''KGZ2KC57ek0yajxDUjl8fiFFX2NrNTZXUUxKW01FOSpFZ19hWFg8cllLUiRVK0czV0JCKHBJZVoqJXJvQ28kRXxAdn48NW1lPU4sendoT3dDNHxqXjI1Ql8qIzB6UXQzM1UyeixUW0kqKV1EIVBJSWxOKXt2JUksM0orYSV2PnhKOVR5S2F8OzEuQ11hUzR3fFVpdSZhMHp5RGJybm5qUndqQVop''@;'; put 'put ''SVEwbWAmSmJ6VEUlfW5wQkkvQ0N7PHAvc1EqVUR8I2E3fW1Ia1NMQHlpYHtddy9QanJYTWJQM0duWFl4PipCdC98X0VMQmlSfm4xdCkqJjlnQXw6OT0yemhPTyFeSntpW2ZHPz96WHRKdnU6SWVpUmo8eyJAOnI7Ui9VS3FkOm0rMWcpKD58fVJiaTxseW42YVNpU31TZmp8elkrR3BbTkphKT1a''@;'; put 'put ''IWh+OnthVTtXO0BQLkNPc3lmOm4hXj04azVtekYjSEY+SzIpa09UdGRydH1lJG8yZlp4UVVJPHpQQUVCMzlfe1ZMPmJwR3YpUFhCXitVZS5qeGE6TkpKMHM0bnFMUTY8OVdwL01WTk16aDoxVklES2x0elJ+P15JSFA8fGxHZ2g+W2dNUlgpfTFafEhye35EfXJhS287MkA7SiRGV0R7bCIjP2Rg''@;'; put 'put ''JT15MVo+Z1l3MWI9Zl99cG5tJFdJaWZ4VmVtUmBsezsiQkh4bzw1MntbMSxEei5delchJWdvcjMoR0xMTmpUfHooRFZwLEczc2RLRXduL2VPJDR4fCteMDoiNVlHMXRDKzldN0cxZ01tK2ZNNXN5THlhU2hpITpZb2pmaFcyYUBsTzc1W0hwaDV6LkVfOjBvUGEoSXB7fmpIcSVnZk9QdC5HWjZg''@;'; put 'put ''cWx2cHFpM0pvdEp1I0EoKHJ8cVAkM0U3cXp9LjJGN3BUaiVOZTlbSTgjSGthIyFtRy9+T2Z9dzo2KVU/PS9QbysxQ2cueGI8aGg1Il9ObjpSdllYP3tLOTpDYltYYU4yTis5aGZmI2hiKEF8JVg/Q0w+VyYoWzwzKFFCfmQ4U041NjxRdFZPM19mODw+eV42S1VkYXokYXUzOmNlSmEocyFOamMo''@;'; put 'put ''M25jU353UUFZSmxfSnJTe0ssWzozcEtFRS5nTlBRPyh2QGVBXWw/ZWdYODYyYk5SXlJ0dGNwY3Q5KFFtYGlTUnlYME9KZEZmWzJ3Tzh4IkR1WzI0UE9bVDN8cjttKG0rM31EY1Nbel5tVGpPU1d1V0ZdLlA2TCwvd11DNiE5eVtIcktjb1BNQU1DJF86a0klJXxMX1F5MFpzQTNvMnZLT3lpcyE/''@;'; put 'put ''b2Y4aWolXnIhcF1jU01kTHtLQDROIjM0TzZWeE9WVXs5JDBFWmpSeXJ3N00obXJ0aTJMMmR0Ql0pRWJqcXUuNXpPP05+TDVdeD82WT5WTmpyJlVje3pYWHNHb29hXiJsMDc6UUs+PDd0NGlzPWdXUzEvJXkseT51LDxTKH49VHw9WCNZazZKMnlebzgmTGZvcGwjSnFJImFPdXheX1tuWnx8NWI1''@;'; put 'put ''XldkXUAzR2g9JnIxVGw1dkJ6TExXN0t2NnEvKXhKP0BwUG9tKDojYGIiYmNkcHMybS97XXdXe3hxZFBXUnJCcUUlZGUkYHIjfnRJWVY0RUNkODRJKHVEfXFtRWdsVVYodmQ2LkZZS3ltKSl7Kj9zSSVBYV5GeUp9bWwxbFI6Vi8/byNFJkYoNUR3eWY2Wjd+cis0b2ByUyxdeGBneCopS29HX1pm''@;'; put 'put ''aVRxcCNScUQsak51a3ZXLjpgWipeT0ovQV5QWXElcEIwIVZZOSRBT3EqX2l7X2M3WSZHMm4vLjphM1N2Uko9c2JzOFQ3Ql5Aa3koN088WmNUWzZCMCNHKTRaMVFOeE1RRyUhXytIPWZJW10sW2osYE9NOlssd0hAPXVQeyE3K0RhdDlfWCw5OTI5QDheWnBUXl9fbj82YUN2YkMhaWVfUjhEJiE9''@;'; put 'put ''fGRpSjkybWlzKkNZVWRfNVtVNVplVzpAZytSZzsiUGA6ZmhuVUtmZ2RKRUxaW2EqKihHInouP0MvektBSkdTPGFoMW5UXXQ+dTpFPjxLYVY6MV8iL2JNXnl6RjZXejQ/Vjgscn5VTGQwYElQNDMvaiN2S2NOUlROTHpkfXU5cTFCWlltY2l9Rz5acGkwOWFhVWhIcG56MCgqOnc8MEtYdD9TLko5''@;'; put 'put ''YCxBQ29OSmZ8N35FSzI4aSUvODIxNFhyN2p0cywlbF13UWcjVHM2QU1pYTxEeEdZa1ZLKUp4OSF7Z211UyhCYF53LHV1bCldbUFyWFtsI10mdjB1aTNzZDImT181b1poQ3MyI3V1ImIpUkJiRlpzQzJQOnhTOExyVDt2cSVpWyE8IXVvVy50ZStgQFA+dVs/fEc1djUlPyY4TmwjdjVjejApS0Q+''@;'; put 'put ''YnZ9QDh8NFhUbFF1I3hQQDxvInE8RSVjPisudVNxfGliK0tXKGRERipucVteRE8sLHFLP19bY3hac0RFVC59IUE0STh8UEVVOGhiemheVS91dG5WdSVhVD9wM21aWSYzI3pFTEFUJjNlPHkrP0teXStDS3h7Ok56LGF+XyRsMng0ezNJYlNyfjNNMVdGcHVEZnIyKnNOSlV4Y1NEMXA/K2YkYjsv''@;'; put 'put ''WS8/Nm96L2lrX0NCOmYqX1Y4R2B6NFshKl0/bl5AQVEvOV4vMnJfdEJ6SyQwaj9yQ0tpfi5odXowLDpNej1Yb01vJDg+QyJMfjpSW183RUkwO2pCM3h+WVkvVy5EaC5dYTR8XjRGZWVJR01mYyojVlthekRpZXlSZEpxfGN3P2Mqe3pOMTFOOXBzQmBdIUBATFp6Lip7bkJ+dHwjanpPOjVeRSFq''@;'; put 'put ''NzdGWHkyW04/bSphQWh8QjxBInd9WlZtTUFVa30/SWBIZGNyNy9IKVJaVDZLW2FfUDtUYU1zXi58LjgiUnRHT2pyaildOHR6MDlEQ1VbeFt3I21acSReJnZXXXA4enRzW3ZWLjQyaTNaLFBSNWxKQ2MoMmxdaVdzaVN5KEMvfEtMKjA7dG5HMUpKSVE3L0ZDOGd8UjFeLmZbcH5aenZTWiUqcUBj''@;'; put 'put ''QUVyW1hMeVIzLlFIKWF6WDJqcCVYTVNGQXFMcCNpVn0zKC8hTk5OfSIqcjpDU1NHeUguMHc8RWk2T2F5W0EwJGxaJC5gPFBnQWZndFpMKWppImhJYEQ9dUpyNiV9UiIrWjReczhScn4keUY0e0xTe0FlKTR6T1I+cGokU0dgKzVbJTpnfDlfaD5BQ0p2cTpgMC4saj5JXVZNdTRqXWR8KT45UlJJ''@;'; put 'put ''UGl4Kjwqfl09SXhDPzxVMEc0fDFJT0JhLiskfVpsZVVIYFtwbnIjeUAkWH0ubE9IeSVlX1hsKnw2NmdqKlJpUSpDPSNoWjBEYkZFaXFyK3N1M0BmXzFoVjZgVT1IbDdXeUkhZkVkSSFNVjwzL3hGLGI4UERPUmhuUm59WzpsLDk9XS5bfFJ1OlI+PUVuMUF5PkY6NW04ajUySChDaDJlKkZqcG5k''@;'; put 'put ''WkB7YmBFTXE9T2tfR0VQY3hMdEBpcDREIV9gKkMsXW93KzZ8KjMpR2UqNlNtdE05QTRZV01RKlY6PEJJNncyPi94V3Q0I3d4bV55ZHVaMDh+YVJNSUcpdyp1bHdzMTZoKXg6czJ4fiMwNFViUk03d2BpXSNzejE0NGwuWFJedWUhMVd5VzFwU1NpL117cT50bigiSWFyPEtzO081Ji9WLHs2WGRG''@;'; put 'put ''LklKU3k4PENmbm4lYntrfWgmLlJheWxKe1c5RThzQmoxSERTOillfUQzZDVHaCs6QmsvQlI1W1poS1N2ckBETjwoP186RGt8Vjp2N19RdD5bU2U4akRBYmA4WEFdR344RF17aiQvYz9iMHV+QHhVbiFNYDI+JmlaJGtHcWtUajZSfSsuW11ZX1daZE9rJVZ9JUMhNHpSZ1hyV0JTKjZAaX0uKUp9''@;'; put 'put ''XloidigzS1ZtIThUWzZERkF3TX5Ia2JRWXRrPnQwO01sPzFMLD99Xi5+RWRLc3c1YWVLfDk6UXY4fTJrfnUiO3pPRjFfIkExTnJKPi4mImp4LiQ3Pm5BbnZIcXBAd1VsRW4zcFQkPntOS1IidH5odG8kUVBBLGc1OXFyfXVOXj9BS3NJIXtRYnpyXlFGIj58L3JZcyJRLzU3UUx4Nj8pUSVpTHBh''@;'; put 'put ''U3dCIypQOzo1MXJaKSohaFFzZ2FoWjMvLGRgT1tAQ0EmZU5PLCNOeDR8Syw6Jn1LbkJjc1ZJSXt+aCF1X0FwKFd8NSpLeiw1JnsmOShKUXhVQWBRbnlOTipsaXduezBeUzJAbyg2Nz1mSGNbJClkfj0yaElmaDlvZzdkcndFZVpMaG5oNXojZ2lhSD5aMVlaO3ZMeFFXdDAvcVp3JkxWWURpaCUx''@;'; put 'put ''Uiw2ZWJrXmlsYj5VZFgvNXF5VVhvWStfND44YTFPPWd2RU9SdDsybSZNRipQRExQO2V3cTdybUw/KFpERXdbPGRlP1FXRUpgPF5JcjNjLGFAS0hma3FhbzdNeSolWlpER0x0MEJ+bFdETUBsP2MhaSJNd2J5PlFfeU5udHhAYUVhKnlReC5EP3RvKEwkKXw2OlVZbUxKPUwjTUxnJDxLIkJCQnla''@;'; put 'put ''O2IhbDhhVEJVKkMkJSN7aE9oWU8/ITpIOUteX3lYRElKR2V2I2lZeGdpLyZ0LiNzfmAifSRZSTs+bm9FLktKJEN2USpeZyVjNCg2SkZvTlUpK2EqUlo3IXRNeE9zMSt1fV1TVXssbk5nK0xGWUszcSN5NUEyeWo9U3Ekem0zTiVtNDo3em5YOSNXOUwkUFFNTS9sMCZZUygvV359b2pgN3hDbS5u''@;'; put 'put ''T2tPfCJDNzB9Qlo6fFdYeU9rNnRUeFdLTCt6eUM0eys9bl1kMFFPPXAxOkVqJU9ZMTY/XVd6UF9VOXFOS1QyJGlpTjw4IlE7ISYrRnB4YHp6RGUxaHlnVG1bKVYjKnhvck5WPnJWYF1kVmNga0JbbC82MEh8W2JSTCZ5LHwrdSFyZVsmQW9odTM0X05hNj9ETjo5UCFeam1KSkdlckc7a2ouQ1g2''@;'; put 'put ''aTo+RUkoSFFJWjFIKFoxJG9+fnpHdWE+QXQqRkVmNVJwOEMlYEptIigrVFkyWjY+RXQkLHJUfFhUeVlhWmNlRipZdCR2Nk9iUzZPJGR6cHpicntlRT5HR0pXeUN5dThZR34xU3I5UipVNldaWF9ncV1vMkssej5vd301bSgiTF5TZWlQR3d6QFNrQ2clS2l9LmxPK3cxenpLL0EkWXgrSEMoaXNl''@;'; put 'put ''eFteS0QzO3x8MjhLKGIrbFpRcDlgYUYoeCI6djksJkRTWG4/Jk5eeylfLHtDXXAoM3c4SjxdYFVdVm0rRmJWUmo5ejpyUUReZztHU3VXZHE/aDwvQ0FabmFbYV1pVk5KKj09YnQ4SCI0fSlBI1h6R1o0SnRuKm5YJkslcUMqaDlQXldtdTVdczlocEplfVRVN207OGcyTjwvbnh2T3VGJlFxYVN6''@;'; put 'put ''aGUjR0NZTlhBKmFTQEQuR0V3eWl0UiE/SjYlXytsQURLNmNdYkFUPyVPWClBdjxZN0tBX05eK3B1RjxeUXliRnt7akheNEshZ0t1JikyL2diUUlzeU56LElFZFFTPHN7c3V1SEYySEtsUEkiQmVXVT9LS2dzI3ZbaSVaWy5kYG5VaFR5d34xT3V0NVR2WmBmLEhfVC5GbXVuRXc7Mz53fnZAOkZ9''@;'; put 'put ''YiNUfDhaM2xdcnpERXlbO31QYVguSjguYiw0TDRRbGVvfmtaK1t0Oz5UNWYleyo5WmUiRTNERUlJWS9NZWVbaCV5I3NsQnwhL3xgOzB8UF4kaGs5RkJSY0hvYmVMUlo3cWUxY2g9RU5nXyx1WDBKKjF5WzltRSs4Qlk6W0UxPi9IQFIme29IOEtAKXA6Uk0yVCw+TWxpPWZ6Z3I5anQuMWgvPCI4''@;'; put 'put ''UlM7P3x9Zj9DcWEhVjdJZ2pjQWRrWDg1KUZeO0hgMyhRTSo/JHhrWVdPdCo9SW9RSiUxSGksbG0oayw2ckA5Nz8zeGhOeW1hLnV4Lz0qXiFvR1d7Lz53SmZORio+RXhAPkQ/PU1Pel8kLE1OKno1RUtAdkx4VGMhUDA2PD9uOFFYRVRNKF1pNj95QmEwYHMrMDZ4KEZBPDVlI3k1PiNNfmU7JWxp''@;'; put 'put ''NWpRWUh+RzxRTEF0UGE0NkJVPF9dXUl2MEg4eTApKH51aTFJNHdANls+VG9GPW18Q0NYNFpnem5mSn5HO21WIVZXakgqPHxEWk93MUF8S3BqN3o0TXBGdGhPd104fX0lJVciYCNyVjxMfDt0L2dCMzVOYDR3bGFKQmJvbk5+JEBxWjsxezVZci5veiZbX0ZsbVlyeTZsOENDWkIpYk97WjNNenxL''@;'; put 'put ''PmRocj5uUHVVcSFscHRCPiosTl02fDltZ2F3e0kiKC5FLkxwfW8oL1RmS0tmUHpGaCZBQF41JTY/ezpBWismWlk4cEEjLmt8eD5PcTZWZk1LZFZIaVk3SDBObEVnOjl9ZXV6ZV4/by8vRkRxNFc+MSU1dXZeTVJdbWlVUUlzeklZX1NVcjwlXmhFQShgUChRJmFhQU1XIigxSXUzYywvQ1N3c3V1''@;'; put 'put ''ZkVTUkRuI314Q0NVc0t+PExIdVE6QSh2O1MwUmMqWXduWyliZGs0RWBHRCY0fFowaXldMCM8XkFOZEVpZS5ZbmRUe0BMe298X0wqQ1YyeCswTDhZPWI5QlMvVGVjenFQeXRHP1txWzhCSDI5PCFyanEpLmJAQzsidDo+aX1ZSSNoX3xsQ0NQamtVZiU4NnIoMUZzTEZZbl54b35VdiE5Lzp5OTJd''@;'; put 'put ''NUloJF1BYnVLeE5UXlJ0fV1ZUz4mUlQpVXV6ZyluamMiTFp2dzIqdm1rdV04LnR+KVB0UGAvTVQ9S31LdkNCdS9pOzpDfWZZOkxUREp7fSJJVWJefXswPUU8fndmOF9dcXF0SCxEeltoKTI1cTFheH0hem9UciVMOW8sSFdqVCU3NlA3c2NybiFYTGBENjQjT2NpV3hGMXptL18iTHt+QzRuU2tq''@;'; put 'put ''ezI1fXlMIUsjOS9qPmFJYGhyTThxcmhEIyNfenE3bUxfKGhNaDE+N3BzSmE8a1BLbFFQQjpdbi9hYlhqLDFYKjBJSDVZXy9qT1A5X3RVbjo7Lng4MX5xJj0paWk0YFtvbzd+cEVNNCkpJGcpMT05Sz5zYHpdZ3VeTWJoJitURlJOPyJZOzwifl4uWGZsUCJmJSVgWzhIfE9fPEErUU1nRVReLjZy''@;'; put 'put ''JnZWPlgoWGRkbFdrJG5beFc8KTVzLyQqKlo8biNJS2xAI3ZyNHtoTDMvMU5EfkJIeyJxSmo3Plk3SyRdQjJbZjIxKXx4dytbQkd9ZVoiUFdRRmZKP2ZqVG1gSGtEVH4pR3N4aGI6Xn1WUm5zSDA8ISNOUFs5JV5idXkuO0c9ISwvdDIqcGBHMTsydWdVdy4iZEp2YW9kMChLSXg0cUg0InZFQHZ0''@;'; put 'put ''dGk3ZFhZKmQiYFA6cHAhUElJMHdxJENJQ0giRzZ5bG5aMSZrZnh7RWxyW2ByajMwZXwuR2N2V1NlWEpXLCxFN3YqKG1QMnIxX19pNFUwTFdAVClMeXkyeTdua1U+YXJlTmhVTmZoNFF7OFQzM0NTZjgoNUVPLkR1QDF+ZCZHclEmRlJwZyM8KD5Qfls8THQ2OmdQKkB+LEFQMyV4MXh5cClrfG03''@;'; put 'put ''bjZGIW95KyxtSUZZRVZWQk0wfVlFaEhfaGkhU3pdSWM/SjRLSkJ6WUNKRGB4Mnh4MjE5YWYxYVAvKkJLRjNOJldaejdUNnIlfj56S2E3RE1URlhNS3NrZXdne1RQKT56PXNXckl+eEw3VFhqQEY7N0BpL1MlRyVwQDpIVVhQKVJWR0ImcGVkOCJUfnVteDpGfEI2TXFiP241ajZ8dSVMa3xDMHpB''@;'; put 'put ''YXh6dSFsQC9rWk9qdntwcmJqc3dnUGZiZVpKJiRfIlVAMD5oUXU5a1l5KzlXfUxHWFhAWXoxMFQ8eFNDOF05Pz18fmtEfDhXO3BlXmckSktVajh2ZnlqSF93SUU9b0RqOTAkTWheamRgTjR0eVUhUzVYanNwKDsxL3I2aW1MdlczUHsjMWhON1p9UE0kVEIiZ0VMbityLCp2UnxYVk4mOT0jSlZY''@;'; put 'put ''YDwuYHZ5PzZkdDI9T2IoaDB3RW1Qb2x4ZUg7KDs4aG0yZi9pQjh1RnY+dXlRSW4mKW0/cVtraHhhSy5LSDNyfGUuYktKamJkfXUwOGl3ZHw1aDROPGAoTWleSGN7UTlfQCtqW3tIZVchRUBvPTIpPXl8JFIjRG0wNGZ+bGM1SD9YUXhWUl96dSwmcCJzSDtTam53W2QkV158IyVVSmQhSkwwMG5P''@;'; put 'put ''e15AQEZedWxKJlNiUF1wekBDdU04UW1oRmhTPlE/X2x3Wjd0b1ZfbCxDLzxhRzBWWHUuVGdrdSo1OWVlX3B5ZDZWbT9ne11vMCE5MGZXO28oN0VJa3hXOWFmcWVAVThhRE5YWjlyM35RJk1nPEc2eUttTyooRnBJRWYuX1Z0P2YlIU97VX0yT0h7Yj58V3MvOUp7ZVB6I0BEZClmMyk5UFd8dWMh''@;'; put 'put ''bHdRIWU2UkI9WipmfSVYYkZELHU9QFpxellJKFI+RlJ9amlOfmhgLFA9PmlKMiZ+N3RvWWovcDYlQWR9LlZ0KUlfSSZKWTcvZ30ydShUfm4jYWdzfHw9TlUhaW9IR3dgeyxfek5MQXZWck8sT3drL04uLnE0JGtJXm50dDFvTCNbOlQhUnB5aHdUWHIzfiJzLGhjS0tnMEVgPSxMUUpXTHJDZ0FR''@;'; put 'put ''P3hPRkM0VHp9cmhmO2lTNHBUeitZdWBEalo9N0BXMkV8ZW9uQEJdTVQjSE8lVU1DWHtUTnd1dzwrX2hSa2BdU2NGLj9odUxOMk54X2leUDAob2hpRlo3eHIuOSp1Rzt5QmdoITUvTm1qY1FVZWxVeW9aTk41dj1aKUE+bm01b1hIWChOViJfZUxoRzZTKFVIZnJXWEg+N0xUfV1UWTlGcE9DWz40''@;'; put 'put ''XmxLbURqSC4/eWohbk1KLkRZdDYiYGwocmZQLD1IO3dLWT1hYGFXSDBIRURtVmBKTUkrZTNZL3hkQyYwJG5EcEYkQHQwfD5yK0t9YyxpSUpVbFJ+bD48RHQzW3s2b0pwMzJebCR8On5VQG01dUkjI0dMWWNoRCJkPCFrNEEjWU4jN2ddNCkzdykhUnF0TzlzYD5nd2FwMG1UNTxGZk5jVlpvREtQ''@;'; put 'put ''JVMkNmtHNDo1QnpBJll2ZDRIaXIpWkVaeVZHPm85K1BdM2c/O15GVXtAekNlNGF1O1MoUFVvJjZuKT9TXTZFKUIkRUVqQ1AkX3pGZmdrX2dmOjpNTndGT0grJHRqY3wrXyRuLj0sL2o3QExhWng/PnsoeGNtYjR+OC5bL3hwQVlmcUo9L31PV3B+N20sJllYU3RCS2Baam41OWBtU2dyTkRmVF1g''@;'; put 'put ''bVlWfWl5ejB6PS4iJmY7LGc+SCUqN2hXN2xgTjdpa3FdOEpXKyFHSiJfZjgkMVB5PF0jPntVJF9QQ0MoXihTVFk8fFhiUjIkNVdSIjlCZVloMTwpdjYmJCQ0dCJkQlt6NmsvekM9RVovW2ZdUiQ4IikvaUJmcGYzNmpoQ3ZCfjsxLlhiem0rP3g2NXgvWTR2bUwyQj96ITNHfF9mO2ZWaj1IYkhi''@;'; put 'put ''cClAMzhWPiFaczBFbHFRMGttT0kqOTZMcDZbYiNTWUNtODZWJUR3cGZAZWYsP3V7IUNfJS5PQykyMF85LFpaKj8uUjlaWCwlJDVqQyszSzxMInVfUTxHa1ZjMUAmTyp+TERxMzd1OXRrbWxBJmFiTD1NVjpLNn1wRSorZjNQOHwxZzZYVkteL2xYcyhgc1JqIm1RMCt9RzNbTj1kbVNjSHt8WVlp''@;'; put 'put ''N306ZDZOL0pfPXxAb0R6QURrV2kzPHVlbCo9WGZvSCxbNDx1Uy46Zn4/NH0qb1dTcUolL2hpdVFBYW91UE1oV0A+Vyw5dzRzdVNVdThTP089P0A/bEVKZW1We2klc0lEI31+eGNKJVhmbE17L2xUIiIpdWFKd2tfaE5ZQ3A8VEBZPHdkNngySy5tcGNnTFdleDhpTVBUZC5DdiMrVz5jRnFNcDop''@;'; put 'put ''UVZNaFUkMXMvR0g/V0ojK11+KjNeSlcqYFhSRjxLQ1IqdlJMTm06ezY9KTE4IlN6P1o5TWIxQVcrTXNNYDFOa0N+akc0biM4KXh7ezNdIVExckdjakRWMVlTb0N9bGVLRHM3QnVId2AvKDc/Iz1mSCZZYG5xLGJbRnlOTSx2SmVLKjkjcEdONiVKSkoyQnV8U0dhNl10USRNWlFHW2dkVE1pfHtq''@;'; put 'put ''bjJXPE1SVSFoM1ZrcXR0WlVVfDp4diw/d2VHQGFyNWtdPyhhOllXPWcxIXQqfkdMbixMXVM6W00sQyN2UFJeeU1jTyV1I25rfmAkelEoaH5DdSgkL3VsP25EY3kvdTdWe3VwYFFUaHVZelZ9fVU1NUhiZH4qXlJ8Kn09VGQxe1FRQ05BP0J9cVErOl5lYGxLM1JhZnokISFIWFBLd35PcSZ9WlJ2''@;'; put 'put ''IWtdR0FIJU1TM1hLbHlGMG1xNDsyZHovRCg+V09VQHZ3c2FDJVJtLzRxdUBpbWldclV4JGM7Y3wiZzxuQ2pbXz5Rb0lISzljd25CWyR0KzhlLmxHfnF8NGkkU0QmanwoQHQ+JjZ2aF4uXlpFRT1EMDxGKHR9PXM1VXleMC9+KkwwQ0UjPH5kYnY8cXBWfHpBSXdGaHN1KjRlVDNqOU1xOzBLcWda''@;'; put 'put ''QUhxZHhZej9Ecl8qYmIsTUI6RXhjclRecD9XQXclND9FYzVmWmt3RCgsYm8lcHYoXlJ8ejhJOU5dOCtBSDZQRi5dRCsuXShvYntocVp0ZngzeS4vOCF1QEZLaCJsb3B+ZmRTUzQkN11xO2E9Wkl8IXVrLDYsfTA2RCt7PG9EXz01TCtqS3dBVCVzJWE6bVJYSTVgKz83REpGUmB1eG95PCpoSGxt''@;'; put 'put ''fHZAMSk9YlZWPWleZCYlSVA0Xiw2fHhHUW1qcEA2JSRpaytHISxjPHR9JnhxT319RmpvMCNFazU7NDhmITlJWmhBYWI3VVZHTCE6TldJbCtEbS45Jjd9M19SZV5OXnpqZEE3RGtaQ1dTK1JlSTZOUEs5PF9wMk8/aSVzSmZ9RzVvaXgpOnJ2O0xxVG06O0kjWSl0W0J1OCNAQnpQZTAsOHZdJjou''@;'; put 'put ''X3tCOX5Mck5CKElaKTw9R3xEK0R4YCpGO2UpVFMwZX48ZCxxakV6d08lbFRVYD9HV1M4THV9fEQvNTdTeDR1Q1hIO0RKUD18VHtsWms1Lks3ekpWQHIzQmEoYElXeyNtTyFaV3VmPnVsRXs/N0JDaVgiJilmKEBrN0hQd2omIT9WWjVdeF9dODJkZTJAKHRnK0Z1PlMofSFfOG9GLG1aNENtYXxk''@;'; put 'put ''JlgwSzdwP0NQeGNRKGNeR2JVTllFWjJGX3o1RXdSXUZOeT9MWW0mNjI+PkZUMytfKCslNUdIaD5mcG1kVlBmTl1yaHR7PGZKaD5qZ3M8MiFSMUY7RTR4I15yUnduRk1gcUd+XkhtemN1VHtnYipIM1JIZDlJVzpOKyhBLDFDVDhdUHAhSFp7PT07NS9lPXdmV05DbFpvOHY3TVlIVzFAVnUpZixO''@;'; put 'put ''NHMsZzdKeixTUzlAUXw4XShid1Y/MkNmR2F9JCJaeFp9YC8rZC81XkguPzxWbW9FNyRAXjMyNmVMV1AwKFpQWjBmbntQUDtbeTtyZ0gkPSgsTUlrZFU1KSlSVGUve21oYDRzfnl7Wyolal4haEVpNHxYKT0zLnl9I2d7Ln5bb0o/SDQhWUJ0bkp4PypoaSYxbC42LGIjVkYleDlsTCFjfj5PM3ZN''@;'; put 'put ''MUtITHtCOzNRJHVRRlQ+YltCRywsVS5GNC9tPXM2TylTXz92JVkkZmk7RHtQbS9zcEBldkNwS1t3SDw8ZTFyV2M6Lz44ejomfkIuIX1pRFosUl88M1cyOz88bDB4Ui46e1g9PnhpMX5AdyRJKW5hLEZZV21sXSw1JTtMYD8obCsiZjBsXS46dzJqa2N3fj1+dkVIWmFOYnx6P0dbOiQ4P3c6NSow''@;'; put 'put ''ZUVBIXwkMk5EYmsxXlc3fHwsIjV7ZXF4L1VpcldATSh8NXBIIzlfPnBhXXB4OThzKUM0PWZELmVwSERaOnBteTNePUlHU1RSQmwyKnx0Vis4REdUbiYhYiljYjZldm16ZXp3YnRpVXBNV1JqNkdVPStPQUN7PXVmQmt8MmVPKHxYWjhfNj9leEUsRnp5QTNOUk1OTDtiYG4ucy5qSiFeVEd2VyNt''@;'; put 'put ''LlUpb21HaFVAQ2xvND1RRyYlPyMhbixrP3wqNT45ZlpCOFBBY0JCQi8rZFM8MUg1Ul1KejRmRFVMeGlRODp5PSQ2S2BbQDhkViFxWlhCZll4NXFLMj5EfEFzckghRk8wb1hFPzM9YV1ddk0vaVFEYH4oJkVndiMoa3FVRENycmI7SHFDUFciNmUmWTV0dVVecFE1T0EhUT89dHpFZVkmPC4zYkY3''@;'; put 'put ''PiF0YyZ+SSZRJjlNMnBMSEJrcyI1R3lbQ3RSYGElc1RKZEJnU1BiKFQ0KFprMzdjU1hyZWFSUEFUX3V8STQ1SEthMkREME5bN2w7RFI2c282PVltaWtlfU9lJDV2Ui4/akJZW1lFaiF9VUQ3fSNmVmRAbXxNVkw0KSxAYS80SG4vYWcmUlpac0pgPmwwcl1OcmZLQG0+NDQ3e0tnNlBKOno2K1NY''@;'; put 'put ''Q0M0bDwqInJRWl00ZmRHak8uQmd7Izt0bzFdI0dsUz1UNWJTJEUlbXdgSE80L00hREN+ZDp1OnpVM001enxlWFZaWXdtdVEifjhRTExkKDtpXXFIMyIreWdrMFIrTWxPQHRlW2o1R1loYHNkUldKQEdDJlhCYVIrZWE9aDhJUU9LNU9tTWJgRWVpKFQ+c1k0QDVPbEhmU0pgNUY0dGQlS15mc31U''@;'; put 'put ''I3ZyezBJckU6PTp0NF5GaVEqSz94ISRBZ3omMSR4cHJJOCkxRGQxVlBRZFMlKTVCYipNI0VrJWVnQ3xkZ0Z5VT8iPGFUdzwuX3NbYikhSlFMIjZkNXRda144TUpEVWojO01EPVNbNUJdaiFzaS5pOXIzKCsoXnNUaVh3WGNZKSh+JWhfKCY7ZyIqRX06WUt4ez52QCo6RXVvOGtqeHNpQD9UYjFJ''@;'; put 'put ''WTguWH5tZXYqVFdqZ0hNenZpTSJaOklaSj5ocUQ6WSVxNWVTbkJzQ0w1YXxYP2MveDB0YVhkcFJlT29DJTxwMDVxI2NnPzxrX2M5VEdeZWpJTCV2R1F2MV9vNl82WGU6dml0dkRfOVskY1pCdVJsPyUxSUtSMkBEW0hTMlp0TWVKTXteSSUsRHleUiNsfj50U3w4MjsxKDhfazpdPXRQIiExaV9Q''@;'; put 'put ''dDB9MyxVKncwMyFXLHlnYWNxTTF4Z25ZT0ZoJUJfNC5bemcrSFoxcndjfTFkWExdVDNSSlgqKUFGQjo3X1dOcHZXYFBNM0UhSXBGd3JHVG9EOkp1KVQre1dQcFRxaXF+QiYvRyshUkk+cjlkR1txO29tTno1WV8iV2xGWmhSVzpZSkJmISYwW15CNWZmQTo6KlIoMFhaSGI6VXxUIlUlY3BrYnAu''@;'; put 'put ''a1swd0tJNT9hbmZaJTV4MGZUaW5uUV9sZnpDVXZOIj5pUi5QfjZ2RjsrOE8oPEhKelpVN2MpSG9FMyI/NFcqXzJDIjgpRkVCMz9UfXV1TUR8YDNnYC8zZzYvbl4mez0qKTwuI3dxS2x4PT1bUj1QUXMiNV9faHxyOkk1TSEkIntYT0JrRixwO0UwV2h2Lk45MWt7OzclbyYqVyolZDJkaDxsYzJk''@;'; put 'put ''bTxsJD1JJHhjUCZMbUJSbTNVX0VSWi95LH0uZjYzRlFEZy4+PGYzR1lFSk9gLk56K3ZiS2MpP3V6PHNbY2w/UztjdzRrZ0JPN0NSXmwoRm9dcXFAVDU7N2lAI3ZfVCNzMmVkVE96UHE8ZSgrZ2I1dnx0aE1fTipbfDN+KmQiNnVuNjhvbEBdTTxzMlVgek0hRjhEOnNtUSFTOm8ofXtzQ0dOd1Rk''@;'; put 'put ''cWQxKTQhWVk4Xm5wKEBeN2RtOyRXPDQ9XzVgMmdVZDpNS1hLI3NwWksveDlNaSU4WV1VMkhkUmkyVkEwTTo5KDxyaVA3IW1TbVBxaSFlKUY9V1ZHPWhnIWwpPU42QzBhQ3hiQ3xMJTpaR1Z7W1FRTm5EOnJke01aVXN9SnYmcTxwYG06cC5FfXNWczlmSnY9aj5WMmUlfUBtdkFvTX1fT2k5Mj1A''@;'; put 'put ''K31KeTAzaEkuMk5YPUk7U3dVZn41a0Vjbl4zJiQpK10xPFgqO050Yl4hUz1Bai5TdXRKaChYSHdEWSFFN19+KXpoO3NhIkR9clVIKjwsJlt5Vl1eeyUjN3c3Y11HY3EpST4wfCNTSmxvTXtLQjZQJVhnJU9RKDsvX3d0W3VJfDlVQD1KVE8rcnl1MVR1PVBoQ3QqXX1fcl81Q0Y8OkpWOGpfX0Nq''@;'; put 'put ''LzdHNlZeTH09XmtrYytUaT4iWDVkczEjWWNOe0MxPll7Y1I/PlprN1hZYlUpVmRhZGZgfjVRVSRzUlJjQyxKISZXfkwhZXlIWlN5eiJkflVafUxAS0tEaDAsJi9nVHJTNDVvSzojc1lRTU5KVkB8YyZQUWF2Yl5DWiRYLjJqJXZ4R3NqYy8qcmcxYUZEN3A3YV1KcFtbRVVUbkRJNj9FOW9FWkxB''@;'; put 'put ''T1FMMzRIJHRvanoxdEBqO2N5L3ZxZ3c3cHJOaHFBQmNuUl1iR3xrfWpNaUMpdixvO1ouVjA/JiZ1MGZPbnl5KXVUNlYuRylLKTVaWnJqeHM2YjEkT2lrQm9qbyx1V0BuVilMKT9eWEd6XjA3VjxGITFINV9fWUl7Y1R6OURSU1dRQ18rckB+aCE2Y2A5dyEvXypMWj4iZHNdKEJhTGY4Ln1NRk87''@;'; put 'put ''dlZ6clp5IkgpQ2I5YDsoN2Y/Nn1YaltTbSspfEVIN350K3N8WFZAPFVRbmZ0SGhhKmtyQ1lrdjxnYWksO3QkUjR0ZnE5O0Z2fGtdMTpFWTNHPENYTGZMdUIxVCh8SXdUTytEajN8OFY4NHZtU0hYYiw8Iyp6KHdfUkpya01uRkwqUFRiN1U8K016SVJzKz9RNWRiPHJFJSVlcXB4TktAMzlQZFdG''@;'; put 'put ''RU5fZU1YU288SVlFRC9pOzhsQmZ1Z0FDe15keHx4NSo+M0YlbksheGhkRHxLIVs1dXk4OHc/LnhLS19DN2dGKno5Mlp0RzphPnFJOGtSPylROUxlOnRLOlE6IV0mcUBOa0ZGPWYvVX1TTT8iNWJZM3A3P0k3O0Vme2dweEpzfnMjNitLP0xBfHt1aCU0YFhTKnl7KDR4akYhJndXJWk7fmdRMn5u''@;'; put 'put ''U1tsMiVjP15nQzBnfmhvWVspQ304RSU5JmcqP3JjOlt8SHIqMnpAV0l5IWRQXUpxcFZoMHovRWxvVktLSChxdjhjMDsvT05pcU5HLkNGfihCJS4ieDUkX3tFcHhiZSU0SlFOdTNkNmVgKHckJE08cVRMLjBDbCZ3ayFTI2AySCMwSnBkekxAITkzK2svQDB1KFN6Pz5VK0xiTypSdEgqMUU7bEI3''@;'; put 'put ''RFliV1I8RzZTQXJCSz9FIWVXYG1neDkiUjJQMVNybURub0MrR21jU01wcHRDQ0pQYWNrcDloaU1BOVUhIVpCcS9xIWJHV0s0ejxBcVVHfjUoanJGUjx1TyxjN0RAeTQ8bWdFQytCK3AqO3dUTDRPYDspTE5HdTxIUFZmeyk3NSwjcW9BSzp9K2hMPUxCdy5uc0x9aFNUSWJYVVZRK2QvSjN+NylL''@;'; put 'put ''Lmc9PyZxRFA9X1Y3UFhqKVREcz5eYjlYJiYzcnY8QEw4bHhxPyFQci8mKTpxPXBmMEw4LHhESERuY3gzcGNbUG07Jk10YVhCdXQwWGVoZDkhP0RmVUs2TUJFdWd4bmlPQD5MYTw1fU1ESDE9WVMzKCgjZHZVVWh0U3M8dXlQemFPVlY2InEzcSw7YnMmIXN5Zi5QKnR6UUN8dlF3XUFXWExSMltv''@;'; put 'put ''eXlHdzUyWzB4PiUpTHE5X2hyYHw/LyEqQ3F3Sk5selIxZSNofEt1YVhGPSxlJFplZDRLSzlWeHZ4eUpRQ25RK1lJMHdxPilmTkcsUSg/dl5KPTYxdHtTMGg6aClGYF1TXzYkVk8jQGYrOStaI0A4aHw1OmxNLDlFUEdwRm9jSXBbIylYXzE5fU49Kks9fHtnQ1FhOD5BJnV0WiRRSExOLCFnWDZ1''@;'; put 'put ''JUxATikvTGFDKyRxPG4+MiVbSUZWV0RGcmVnSzsyOEMqWWhJVm9AQTFUYmZASXxdOyQ6U2ZCP3dnR0d1YzlTZEk3MlRVVlZ4VTBKQD0rSDMjQnpjfl0oVSg2T2hzL29rRWxBaHBeSGB2O3oyU15tVX0hc2AuaTIjVFEiSHIhREJtVzEidW1SKEJ4RiJhfXRaMDNQMERwJEdFcXN3JGFbY15FYz93''@;'; put 'put ''XndOdnFYJWJJTnxecC8jQ00mKmgiJkVaN0lafkV+WCh4JTZaRztxc3dCVCJ7VF9pNXJgMV4vWyE/IVNHPlpsbjx4alU/NGsiYD9veXQkKm1ePG42RVo5ZS9oOT9jZV4oTF8rOj94N24ld15kRDV9OHg0VkQ3KV1XKWxdMGEibWFPN1hAcGR3PH1kPGxfenZNenJWaFs2Vks4K0VSPFtWJVdMKFhH''@;'; put 'put ''PTxvRVlDaC8pYTgxNWxQQyh9N3x+cmw1Oz58K0o0WkBFdCJueCkiUFBuPCtjOH47YUllfDB0M2VfKHA5I2tWMjhDdHN5MSs6RGRjaGJYbXA4KGhKKDtGaWNxWj1FSDJlc2ArTTk/fF4zej5FUjZAXlhkIXZuZllaVW8xd1clcjpRO0lyZGhBMkY+SWMuUDl5ITt3IzEwJigqSUcpKjpiPUx9QF1X''@;'; put 'put ''aF0xU3w3Y14/dXI7PlZlUFgjb3UoWDd4PkMoaWFGQHdJOy91P1MuJjF9UkpEUjU3KiZlXjlfP1ldPyR7dVpZRyNnLFgyZzE3eGt5MjtBYks7MTFwU0l2TkwoV0hYfmU7Nn18entYLi53NT57PjtNLk8+QjxXfjNDTGYscGsqPVMvJSpRQzNzaTd8PnEmYWdLdSIyQH1vM0E/Z01ue3kvSF9ieVo8''@;'; put 'put ''SXVHQEMzSENeZm1GOz5xclpGb19HTXN7Xyw3UVdUfEx2JHM7Y00yaE5idXVjVzdFLGRuYjc/L2k1THEkP1MxIkhvbGpiIXwkY0Y/O2s6LFZzeEB7YUhlLHh1aDlKcFs4ZzFuX0tYNCVVelY4LGlKbD8veG0+O0gpNWBfdXoybjUyQDFKMT1MXzNULDouSzlsYkZFJG55PTxtbEAyeigsK1Upb2o5''@;'; put 'put ''UjttJEcrWjUuYyw+WUQlPURbYnxFN31FLzl4VXF3Sk1rN1ZmJD5Qb2JkIUR5P0R7aVQxM316L3hjSUAxUiMlYn1ySG9TYDB1M3E+Vkgrfmd8I3J0O1I5KFR4STNwXyU+M0heQVkzV0FPe1tFeDdLa3BOMHBYZ1dUT3JmL1t9ckBhTjhzbW0qKmptbDc3O2NSQFU5YEFbeUZTSThDYEZLeHJ2c299''@;'; put 'put ''Y1dqc3k2U3JKS2hyQ2VUP0F0Zj4kPFlJXldRT0whKXJafmY5WDVgb0o4JExhYnoyUkhhdi9bWH1PJUJ8fERyMFRXWFlMYS9zYT1NJFBmNFpXaS8yZFVhKXlZL1E0OVpifTlnZCM+YGx4I2liRjFwQGVCRDk6UzxvTXlVSG5pbiMyeX1nXnVNWWFTVm15LkpdRz9hK091V3VZd2lpbXswWG5VLCtK''@;'; put 'put ''PlZebWJUKUtWbnFXNVBbOiI3S2MlJmBIOiJ4UGBVKlo5Wl0qZG93KUswMlQjcms+QGAxdXZkOWQkajpmVU9WbS5Bdyt+aik2JkgpOGpfbHpbZEw1QVh3ZXJLNClsWHx1JnpsZyluT1M+SntvQHN7R0V5THIkfCNBUiJ2eHB7KjdNPUZiY29jeHIrPThXPUkwalMwTFF6bjZyRCVsV28+SVAkUFgj''@;'; put 'put ''ODFOezthOEwkbUZbVzxMbzs5Uj04VSpZSiMwTD8qQXApKklYZmFTaC48fjM7fGpOeDV4TVRoOCZdPSFETDUoPDJ3IjF7Sn4xRHBUNWxjSCx6IU1TMXdJUEcwREZbMENje3pjdE50REltMjF9MGslWlB+T3hEVi5CVDk6LCguKUpIQEkpZSVudyVmN151e1VuOiRPWXMuVHkyQkFGZ0EzJHRwd3xX''@;'; put 'put ''NkdrVV5tQUF3UldPU25nTDR4aVtYSjRHU0tVX1VmWEZgUUYlaT5VQkwhYGcsVnoscDNMRXEmT0hyNmoiXlUpUlRjJGAzPlNkc3drVj85S2pbPnhzbS55Wip+cW4wVzMwQEtbfDFqemFmNkYkRD88SERgXk5gSzl5R2IhIj1JQ3VjTk9qbCU6MWd4P2FufTlVIWEyeHBTJFpSYW5NSyFlbUFKKHx7''@;'; put 'put ''WmdiMTJbMnRjO0ciPzR9eGlPQ2dzenUsd1lHWD5pUStNP18oYEpEXjh3cD17Z3U+JCVAJUc5WFEhYDpYNXMhfHJGaEVRWV17W2MkZ1dPU21pPjdnJmRSY1A4ND5lZ0UyNWxtXiZKLiFlNl05MD9zVlAzU009XlE1QjYpJGVsXm45ZDNie2Mpb3JDeSE0VSl9QVQod0g0OXI3QzV5bmhneWhKW01q''@;'; put 'put ''b218RzA0cGQxUWhGMmBZLnYxLkZrMGEqdkVXfj9dYGJXYnVXcFQuNFFYcURxcT04U1pGaHx6Yyk8d218YGdje1c5WHhGcjdLaFpNM3BiSEZSdFJlVWUke3hKRXtbZWtaVVArM2Iid3tKeHNtSGJQIkE4WDU1azhPSihRSlpwT2BfRnAmRjRtS1pdJDU3WWw/LHh4ZyNzTVdfc3AxISp0dERwVFY3''@;'; put 'put ''T0BKPShzPXZeVip6Y1pXYmFeNGt7ci9aVG18MUxXVm4kJHluWmpANTdKT3g/UyU7e0ttc2tZbWAzYiV5T1toVSZnbEI4SzIuYDIrOzwvXjVzcnIyR01oZTlYbj1QX2pVK1FgR2BJWDZ3K1o2S3c9Y01uNGptLzBFX1JdKXo5cm9xPVgxOEw6S3o0azR4MlgkNmA8eH04QHY4YnZVImw3WC5KQGQp''@;'; put 'put ''MEZ6R20mclJHKkpmdSY+YiV4N1d1TF9wQzpoZ0lSUz0oYSs2Py9hdyV0LElINHNeInt+dzFgbE49VCVNZFE5XiR9RSFmUDBOKzJsZGFpIS5fPkM0QFgsYTxXPEt1K0lbMDEqPyhyPy47JmwsaitlSyozJl5nb0RCPmA7KHFkSyt1b19DQj9fL1AvRmdvZFM5enV4VEx8djZvbC4zWlslRSwxSjwk''@;'; put 'put ''JEUlWmEhQmVVYmUuWmAkP3d5Py5oSyNXKkREOUtpR3ddPD0qPFN2LmNjR2xQTykieWt5UG9VK3xCOXF2Pk98YXVVRllCeSkwVVFpOHooJEswL3AqKD8jSkN+I3FGOGNsUlNUZnBzcTReSjAuVEwiJns+T0NGOzxYfk9sZ3NIMTpzfG02e3dqUUd4Kz9MZipFczp7eHE9RkkvKUlyPXB7JVpoQ2Mp''@;'; put 'put ''ZjJqUXlkaDZBb2IzTkRVTCFkNThTRyNUZVssNENlTkhGJEhlQz1YYFV3QTgldThhPSYyczt+RHBscVFWIkhEaHh4TjIrT2BqJXM4WmcsRXRrLjVXYVE3TChIZVFTfWs1fl5aJEIxNlJ3W2ZTKl4xKjdIQnJ8IXBwQ2gvI2RaUigxUzFiYkY7Vm1rMHd7TWIvdXosTml+WjU2ejlALl92bkdzSFNp''@;'; put 'put ''el0ld1Uwc2B8MCNdYHkiWTh5eERmMVR6fmpFeCszLGs6IyoyLDtsPUdLfXhlaHhRP2FMI34+O1chJD1UZiJ6fnR6RU1jRE0vekgrUj52I0h4VFdhPCFXTXY2ajZkVyVFM3ckYm9fQ1AwdkRobEJVcTg4Q2JeWCtKJXwoXlh5dG5yUzhtcl1qPyJASU1neWp4YGFTT0MhfHdebEE3ZTdqMyxGUHxP''@;'; put 'put ''Z1dYezY7eF5XM34hay9UYVAwXlYmOEJ4ZW9sYWF6MT9OWXhEJjcubXA+SC5YPXhPVXZvfD5WQVBGbToiYjZSdlpBfW8+dDBiSUFaOlFhbj9JaU94Zn1EQToxLjdzP01gfllkLlhxbV9dQTg8Q2QmMCZySVBpKkBVQ1gjN2xmfjwsZHpedUh7NCRzNT97X35Cb1EjdEUxYCZ3L1V5VG1lTjB7UCZW''@;'; put 'put ''Yj44fnc/I2dRPkBIaTNFXU0rfWIsRHpNOlpVbH0+bVNZRzlFRmZqenl0QWYhLH5vJEomVkMzMmxnR2FRVVtGWXdTTUxqPFIpNGJda2MkXVUqR1ZEWCpUKmwmRjo1WzZfODB9YTJXMV5xLlE1IilaIXNVaCNseEUoTDIhTm1MImdbN3ReXz8qMFMrcWpsTDlxU0gsJntIW1dieElfenhVYXZeem0+''@;'; put 'put ''MH5hQFpxakRqOXghPm9JQFUrbkltXk44Mkh2WGh6W14+LnBQLyIvaykwTi9FWntlVFdgRGRdclt9VkdCc009UiE7T0J5LkA5UVU+Rm1UamtvITRdVW5zPV9neCZRZ3UvQEN5VDdMdkokSHpCfERFX3VVVkc3PFVRW35qcilLS3xQcXU7TDhnfmR8byN7JVJ0ZlpRUj4icEV3NEZ1LEF3a3Vfc1lT''@;'; put 'put ''cHVCKGdAMCY7MSVSKH09Ky59U1JrP3NSIWVBR2EoV1BtMXZRZVpqQipbQXNocFhZMGpiLiQ1RHJoVD8uNTokYTQ+QWx9d31ULGUrIWR7O01nL2hWXz49YU9gRUt8X3UuKXNzMSM1UkBhYDFjNl9mTTpmSTQ2RFA2I2tTeltGdU9lUG5gSEswMmxVN3pGYzpHNiF0XT9JTyw1ZFJKTzg3diQ2eUlB''@;'; put 'put ''InYsdjdLOEhraz8mQ19QdlRUJmpmaXI4T04sQmRwdikiTHJ+VFlqLHVhOU54QXJJbWIlKWBza1lwZ3QhZFo7dSIiWWYqbWNMVC9YVmg9UGsvNkx0NiIyMjhuX1olJGNHc0M7eXFAeVFCOklvZiYqVnMqKkpxTCVlYUZsK3pbcWJvb2M2Xj94fk01KTpkUl9JdC5dRitJY1NuM0dhVyp3eEYsbFpa''@;'; put 'put ''MSxXKHZJRC46SUFHKklXR2FrP0VAZV8/Nng0OXFufUY/S0FPQ1ghNlg3OS8lNiQlcSYmYjcuamJ7eE5kJGlsenwqSzszMldmJGUpU28/OSF7Pyl9d2NIJTNeYFgwZ1osNzdjRGZvQ0gzbWVPPDgqbTs/TT54L3MlfTYuXjFQWzxHN1ZQVHJxYD1CTyJlX0tNVzxbP3srdT1xWmBjM0A0WTt+fHAo''@;'; put 'put ''SEo5bXt2NCJlNEpBdWc/N3I+K0B1T30pRTFnLnAjM3dIMz5GSCtnPXtLKD9kSndMdyNDbX42UH47XVFwK1liMzY+OGY+NkJFM3FIc3IhZmYoYlFXTHZ5MH0qQ1MvOjlsZHN+PnkkUiZkOjdvIi4vIWo0QnZ2PT1Nd21AK15oRzdYNjF9UmlFJHwiNm1nemowUElNc3c8PVJ3QEAjJFVRVERkKlhy''@;'; put 'put ''SV8wYj9EWzA6I215dSIoWjZxR0hpYWhoVVUxdDBsYzdNUypAb3cjZ045Rkk9MHhePyYiWmI3eTRJMUR6JVpQbCZ1ZzVqUjZ0UzR9VlZjLmZBOTZHZyRvWyRlSXNkOUIoKHZsaj5laWVUUH5KKW5LZ0lLMitfRl9BdkpMPW0wUmt+ZG5QdCo9dzVIMF10KTRhaUM3fSk/MUc6eEQkdERGV31mcXxL''@;'; put 'put ''LjpaVVF3TG0vWFF2a35COHh4clBkVFVFSmZdbWI/RHh+KDgoJD4pZiU1fnxucWg4VSkwWSQ2SXg3bkRedFBXXVlpUFUsajBRKG88YDFJWVNQVSE3VVB4VFUoWFdXWyRgXUZtMCNRPCFFfGV2O1IzU3x5aW5DbUh5Oyt0Q0hAKSFTfkJHM0o4SGwqOE97JVJvWlJZQSIhKDo6RSVnWFUmcCY1Jm5s''@;'; put 'put ''ZXooXX4rb0JtPSV5IjIyei97b3JYY2pSfHgvJDkhVVkjKzBMMiZpZ1RoNm5aaTo6KGldeFIvVF8zcHlwZj06OVhrSUZySWB0MUZ+K3dfalokW2x2Z0tRSUskTSldVnhPVF18JHgyNmtRanMuKlksJVFfWGJZKEJ2OEJsJUpZIU45M2tmU1RTWUZMLFQsW1NQM2VLMF5FTjFZLiwhbCgzYTBLbXx3''@;'; put 'put ''ejlOPGYvVD1rSjVEJkkiNEY4VCp8VX4lTlpMRDdbRnhUPktsPU5pK0BIQj9MI29oRSpSMncsZXJfPmtGfm5WbipnSVJsL2kqUkQ+e0tER1huKiRAR2g1e2UiblZtYnBkSHlzY2JnWFVkSUp0S3NgMj1bKnooRiF+dTQvTmo7WVhHQyhVVSxOYU1mRy5rdzQzK0RCZUNUM2Y5KU9IU0NTKWQ+bV4s''@;'; put 'put ''ZFBXUHg0YF8wLDF4UDglM0FgWU1lX1kyPTwlOGY5YjN4OWQzK354WiRIfVhMYklHOSM/cmJ+XVFHPjc/PjRuNSZBWTZAXXomVzMjSH5eaTdLUndOMURCUEtUJEViRUZdJDFUJHNmMT0iZjd6W2RrbkpvTERbZTs/WW1IKSpzOkRWfFhyXkwrJm1IL3NEaWlHNTJeWC46LylUJS8lemhhJjppWzJR''@;'; put 'put ''SFA4XiRYU3xlbkhVXn43TlllaXh6KWA0azFkcUNnUlFJMUhSbzg3XShCaW5tLjVBUlk5InM2JS9AXj46KFhqU3NKImg5Y3p8TVlrO0VzLEYxVEgySHh2NzU3cmM8eWk2Ii48Xy4sRT01e0lJVEdFNT9TZU1qelQ1VDxtXzBrUTZZR1JaJDtTblFLSUtiaDMhaHc+VUVZRXZ2PmxabDppIXlLc2FY''@;'; put 'put ''aFkrWDc1ImpvTTFvNmU1Pm1fUVcwU1dCbThHejlwclZZYztLXUR+SWRjfVJLPzdfQy9VaFlpU2IzUldbP2toMUhldUReekZiIjJ7LDV7YW9JQSlfI2xtYWc/UCp5b2JTOytleXQoLDxfakhoX15VUWEwKEpbSX5pdkBGPWg5ODllfG1rR30/O29OJUNwYHNKVFNoU0koX3VHdi8yTyFQdHRZb2td''@;'; put 'put ''MkJMX0ovRG5YKGNkXTo2cUhyJGcuUWZmZl91JSF+OipKLDV4NElSUXpkalB1OTA0Y2lQZE9BZVgkRHdgTUhlYV1xWHU9PmlMXzh0THcxb291NGVqYFYmKmRGdipIJTFGRXdnbCUlQ0xwY3UwWy4pQlEhQnY8aDdNb1E5fklOWGlUalRGWF9zQEBpMjkpIW9GTENdSGRffG84PkpHWG9XMGR9d1Zx''@;'; put 'put ''aWxDVGMmQ1V3RDd8Nk1tfFt2S1o8e3FPYUVCR0JzPWpHSmtSUXJxVnRnNipSQ3dGVl9hKFp4UTVuR1Z7Wj9iV2hZbVtnUEU9SWxAUSx0SzAsWF4/QmVDWCZzPG8pZTJCdSlzKGAwZ1lCWXc1V1lCYyZKam4vYSpnV0UqQDRdZldpJEpONkQvdFJCS1h4Xlo5aGAyeX5WYTpPMCREfVg5ekBOTlh7''@;'; put 'put ''VWlGNEF4M09seGRjKSxxWWFxOiVSJVtJRjs2fUVXe2FYPEZOPkh5fWk5eT1VRjJrTEJ8W3gpTVdMMVRxWV06PHEvTCpTR3RLYi5oS1Q+Qk17VWYjJmtmJi9APGNhOm8zNzsjKnlDRHNlWmh3RlI4KjR9VCUvdEhTSmIvLlJicGs1OU5OW2d2aGk6RGRddTI9cT1lbWhaRDN5XXVHSENdSzgsW1go''@;'; put 'put ''P3UuMDorOl1hcykoN0hSQDdIfFFvfnFOcSgiSiNkdHY1RDI7djAwMllSaCYvaHhIeTJPbX5LWj1uOl9AWUZLI349NCNMO2NILH0sJiZibWRTIT5ILiVNOTV8NmlAWWJwU3ZJMFFqNTE2MUMwVlBVd1Q8WjBGRkVnIlg6ajovTUF5QyosIkNmSjVdM0wuPyIhWzVEIXVxX0lCKnhybT0jRmIvQFdd''@;'; put 'put ''Tk8wajgjOjBDM0JeSjk9Pj8/amM3UihddEpQd0Z2fUIjaF9TZWojPyZuTUdten5WYFlfeVl5OXZXTlFVbk9sPWs+ZF9fQzchN2NZKjR0b0EqeFhLaTg6ZnM2eXVlW2wzSF8/Q3B7NSZpaj8kKlNSLjdYWVVbWHI9cE9EUW00eHxTNzdGKUEmPmhMNHZQYisqOH50R0F+KVg4M2BtZXhOOVE9KzVO''@;'; put 'put ''MClTbjBxVnYhcjAkfmBIN0ZMbmcqcW8kMm12YDlKMCViJkBLQlpmSDZSN2hjTTxmPEdZS3BKVywpZDk+WExnXyY0bmZLWEJiWzpJXmkoT2gjQlc1ayRzZGtaYWFyNzJOUUxpbEwxRENUejBjNnk+LlFMQntRKHViNWYuKXh0SUlQU3NweHs6bzhZUnojTmB4T35gQjFLInIzKURaOlJqZ2o2PXQq''@;'; put 'put ''WH0uL31TcWQsJUoieT1Jd3VNKjMudmBmPnw8S1l1cmcoZHQwR3lPakZyQ0N4b0VdYXI1e1IiTE5OeXR0cEVzYDo6LDcrfDRCOGxWNEo9IVlkO2JVSFMxdTVWJTtFSzhFaGNATD1hWVEwOntxLzRMWW8xc2dkemJsb2o6ZEQjWWtNaS57Mkokemw5ZTxZcTwjKkwvdj4kQ1cvIzREeH44OT9DTk1e''@;'; put 'put ''aWZJMypjKSwiR3A8JmBCfUJLbXR+M2s4RFohaFJXPUUhTnt7YC82cll5W0phUlE5K2p1OlpsTkFhQH4iXXVPQExPPkpdcV9xQVgmcW1waWUvfGBMPV8sSjZNSE1vUWliJWtmdTVtWzNxSFF4Yj8xO3M7alJ+Zl1FZFRuJTl9V1RyM1QodjpwbFN7L15sSFhQdyp0KzIzX3RaMk9ye3FYdn5LIWdQ''@;'; put 'put ''T3dXOGh+RVdibW1qaW1NKGxZazlEJXh4TGZheTVjIk1jTEVaWVo1aHREMCllZSJIRFYyVDJ1SyxPbnJ7fjJbI3A4LEIlJGc9NjYqZCE0fTg8TUA4e0cuQio8OF9FNk8iZipkUkpPM3k6PmdeOVN1WmBNMEheQlVTUEQmMTx4RntWa3RRP0JPWVtYVVYwbmM/WHg2cXoobGZpfmE/W3VGZlBIJlt1''@;'; put 'put ''XXgoVGxTY1JLPyh6KFs8Yz9veHp3RUdrKWpXYWA1dXZLZmswO3dDdCl1OFVVaVNpcExeejNQfV1aYC4vQk4xcX4mLD5aRzFPS3BRRTxJS1ZTIUZUYXdqTU5iWDxYanRYU1UySSQvRXQ+fH1ZZisjT0I/XVBrYT03YUNFLmMqP3JRSFd5NndAckhLenZCUT8hQUQxQG1IZ2YwNGY6Jn0qQVQ/OCpY''@;'; put 'put ''d25jQEAoUSpWWCgmMkRxdTA6Y2d4YWwjbzppWTh1Oko/TzU9PzA7MkowLHxJXnk3aHQxPDgmZ1kzVFVKVU1iTGdWT0lUNi8wSWNeXX07UiQ9VGZgOjFefGZBRE58YndwPnM6VEUpZi8mYE1tIW5ERUwyKjtrP1kkPCF9NW8uVUZbTi9EVT4jeDUxRTlrcCZwenswNGR+UCphdXc2Jl01ZUUwT3VM''@;'; put 'put ''NnUzbChMN0RwREMmQkpXdHlMZjl3aFNdW0xXUmEwb3pVPVA4NWBQLlovOjVyTW55YiJRbis+Uz9lJExCdV55fCF7dVNEWEkuOSY9cUZvcEMlWWJUcXAmWyVUKzUqXSJyUmorSz9idFskSE80V0U6SjBRKUpaUjhWXWBVOiVFYWc3cStxXT4qWEtHWVJLLzFDYnw2L1ZkQCloK0dVLnBTU3c8fnBK''@;'; put 'put ''Vmg0alh+P3E4UVF4V29ZSHQ6RCpRcE5XI1B0bGBiTV1NND1SZ2oifnIvLlhsJnFbbCh+KFtKYzIyOUcsQjdSM1pyeGYpZW4uKDIoc0l+OWZrTDpzUH1fe19bcV1ncFlDbS5PIWdhWVE7R2s3TUgoQ1E7KGYyUXlsSGUjb3NdP0A5Y0t2U2gxPy47YjFSaC5XImdaTkEldFJJQkY6e1hrWVZtekBH''@;'; put 'put ''QWlzP19hcnFUYkhyUmA6QEExKC9kYUFabCVYSUZXcWNpKylwYksrT3g9L204JlorM01BckZRIzZ7O317akAiVnxdclkzOlkvd3pmMGBCIXFlayxeKGpMWCU2cnRQVWR7fGUkfVtULHd3RGNFW29CeUNlfVNodEM1JUFPfn5KO2JIaj9WPjg+fElkaTlDdlc0Li53dGJqLnV0Ym9MTH1lJCtgb3Mu''@;'; put 'put ''Pk8zZ3hvSF54eGdTU0lWTEV8dnRibipxan17OD99NXBWV1I1OGE0fD5OYm9bdm4wXmosKG92LEdnfE1ldS8+VUolUEkzTT4mbXZzbXY6PT8yIXIuNkpadCVyRFF0ZUxKWzZDZGksMipDZCwhWlNuU2ojRGFEND93MWIuTk5MNS58V0RNZlBNZ25ib2lFXjpkSVdBbj5fZixCQEUqMjk/Nygpcnpo''@;'; put 'put ''VlFjT0NBNj1lTEYmbXlOTkY9SnxxciU3IXtjSH1Kb2pPYywqUjo+bCFqN0JkbHFzMG1PKXBUb1E1JHlGQl5Ib0pCeFVbKEZrdDlTSFQoOSNWQHo4SSFJeWw5MklvNkZHYFU1UGlWL1ArcSR9SF5oOTVCakc0NnI+M1kuV29OL2A6azhOfHZTS1ZLPiY+dE00OWMkJEkkM0w1Y0s/Pjd6Wzw8IlhG''@;'; put 'put ''QG8vIT14TW99b0t3YTxFNVRSQV8jdkZeMHlhNVdkd0FAfnJGfW9rTHh2SVBGfkxEZ1RKPzNrVmZzU1ZHRlokYy9JJiZKJUVsP3BtK1VeSmlyWFJQZHhZXXt6S2B6PWRpbGVzQmNXRWIxdHgmOzVoI2ExfjJNa045MiEqZTZsLiZGai5BKyxTakA/YCxYbXohZE5MJip8W3Y0ZElAe3djZz4oQXgy''@;'; put 'put ''bVBoUjhnIiNEZVo4UFZAbFIqKUYiLjA2YVV3MX5DRSpTQjByUUplXXc0OU5vdnhybFdLYExqIkc1QT01fk1AWj52RyRKSEBzNWI+cFI7ejwlKV5EVm9Cc2preD1JVUcoeEVRVHd7d3RBPVNfXXFtJXdTVXViVUsweEB1c1o0XzN8dEZdc1J2JHVnXTs3eyNYQG13fmNhMkpuJCImIUVyTilhcmoj''@;'; put 'put ''R15sTGVURHl4Qywxc3I/MSZ0aWZ4fGsoRlNjc2l4QklVdWVYbjldakEpe2pHWHY7Z2BsKXtVfmF9X3I5RixCMS4mQnJaVlAuU34/O19zRysxM3pbVkUkbmdIZXdhM34xXmQub19lZVAjJSVmV0t2eCVGJm96TjRtWW88NnBVR3VLdmMxWzhUQF8vdy9VaW90RUhDdS5wSWopan4oZXxoKU98IShD''@;'; put 'put ''OU46I2dHRUUxNEokSjUjeiNVdW45MGRMUlZ6RmgkeFF0L2koeVlvUUohO24yc0EsdXk/IjM/bjIqWjAkYy5ZfjpxIzRTLmBCPiowIWhgUjlZd2tebSFtRyliXzF7NU11PFMzfEUlajE5ZFNvVzVNJFpvUGtFZ2hbcTRedWRzRyE/cWE9Z1NdYl49cWUzTjdNIUhxajg0IUlMUyZoYWw4ZCNAeyQo''@;'; put 'put ''KD80VUspJV9CYzRsRDhhNlVpVkBse1kkR2wlSlcjZWxLcWMqTz0xfEdZPXwyI2NeS3FzY09FV2c8JGlAZj1DUV5bRDlxSXchMzBsRmYmNHFTUyQ8LDw9cU5HSkhPYil8fEFlVlMoTVg2fj43MT0zb1ZMPWtFIV8pMmJ1fEhiLCtLWkxjdj52WXRrQG0+NWpmXWN9L2VNdX1fdnMka3I3cGEhJHI7''@;'; put 'put ''TDJNPzlsVHxqaH45TjZLUyEraH5MJHFNN3hfSHxBQUM5cVtaUS9iaWFSLlIjUCY/T1UrKDJ4VUVDcG98YDpuQ0dTWEpKSSpNcjt7UGFrNnE9TU9ld0BaZkw2cHpSWF5dLEAjTXg6ZihBKzIvMClaLyNZVS5jP0xwY2poR2tvZF9BS3IvZzVVQ1MoIWclTG41fVU6PCZUQnI9PSUoUSl7NyxFR3Vr''@;'; put 'put ''LFlNajA0KCFGYXVVZVsiP2gxOjAsdS5PfHtiIWNxeVdOUXs5P2x9OTclKDFnel9jM15tSlgqS1trVywzIlcwKXRKPWhiZHROOiohPU5rKWZ9bnpWODNUTl4ydkN0IWJKN0J7MFh7ZVspfmdsLkNsYUdVcWVET1cpUmdqb3BwbjpHRVcjZy9RSXpgXj0kdjNDRXUuWSp0XiZdZnJSY1A7MF0kWDM7''@;'; put 'put ''ODVPYCg2Z1NPVlopd309eHtZQT1ZQm85NiRFKDNzZnxWOD1sVipIQSU9MDAyaDFwXj8uX2ZgUWUiX0ZQVS9oSjchVSFPcElYciFeKnt1eC5wK18vPTF5KjpGITYzJD1GJiNnQFdCRmZfIk14OWgvejxnIStAPV09VjY6fGNzKml4ZWQ3XU0yRmIlYXtqTjNhJllDJDtLVH1We1JsX0Q0X2E+XjtL''@;'; put 'put ''Q2JSYU5HZSI9Q3d4ZnE/SXQhbWF+KldVcVhfPW94ajEzfHVfYk07RTRiNU8sRkdhXiZFbnYqYk5eLEVURjM0MyNlbG9Zb1MiRio4S2w5TXgoRywraiNvVXJFMzdMJW5PNkkpX2F+dXoiVWRnTSpWRDd5UG1iSGJfRHFCYSpucjpVR3R6NyVDQFZiSz8jQGd7MSpIQmkxRlQ/IXd0flomRkhuRUZC''@;'; put 'put ''MjMoQFBMfE4vb0g0PEN7PyREQChxLEw+RDZKTSt5R2F0Qy8jczIwV0BzOSR4LzBXKT9uaFEkPi8iJk9OVyxPT0ckc1ZRKzVMLkIwSklNNDNMcGMvOVBLdSI2dHgpPmk/R2giP0BSd3Z3SSJQLmlDUnwvMWs6WVEpeCVwV0ZDfUk7bXNGXjliWmo1MUIsTndiJDFeIWI9SiV+QXMoXXZJald2IT5I''@;'; put 'put ''Y0xQeCtrRyppPTgobU86RDhRUWtETCxOSHB8SksiUjRtUlZjYl5BLHl0IV9LV2RuOzVkJDsjJHlZM0hNSVl1I1psfj1jYThjIyN4dExGYjduKmcpOUNKRnE6UXR7U2ljNT1vX3w7SjlhRnhAO0dTd21pbShSLEVHLDQlOTN7Zzl7YnFYZXxZMjlpVSNILFVLOyZscl8hKFpVeTUzQ0V1ck56VS5z''@;'; put 'put ''angvNHheWlAkUn5RfTYsZ3N+Tm5MMlJESlYiInFScGhAQiYuaSVIfVg7TFU8ST0+PzkoYTh5Uyt5Rmx4RSJuaEVtWlJsIjVadylQU3poaVN6P35tPHQyV0IvfnYoeXtyby4rY2BbQV8rM1MqTSZXK1BYWjdjZUJIci9FbDkjPVBBfmUjSj0oIzoiK2soIiElVTVWMFlkYG8ybEB6VilgJUYrODZC''@;'; put 'put ''ZDFOIWtbczMpVUsvcWRRZXNbS3BhW2QhSTpkV3pWcHpUYjRtTkdJPT05UDZvUitUeU5+Yl5oVkJIKkNBel5VUEF9LDh5aUx5Rn51TW83MXF9d1Awd1EjdmJqOyt5NytPYGptL3k7MEVZLkltWnpyYj1fVWVefC5KNmxAOGsjYll7cjtsQGp2I0ZnL2xSQCE/ZFQ7aVBvTXwhKDtyVnloO1p1bSFy''@;'; put 'put ''Ly80PWpMQk10dUAjY1NpdVlrK3FKKk5XfTRLemddUF9INFg3ZF5TY0V4UXoiYWAxe19pKzpRRmR2cXxEbit9WC44PmZbd0lrPVBFU0BZZExPIVlmVkJVfVl8MF9Tb3JgcHdSWWZiWChrVENScGghamc1dX1FJUlbd0xwTzdoWVduMiVOZyxjLGcxM28qNTQ1W0NgOlZUREMpamN1NyQucUZzYF5R''@;'; put 'put ''LG5UPF1yQHZwJWokR0JffEl4VmJMO0w0KFBNOyFTQGk7IkxfOUJVWnptQmhlNjtUOUR0Jk1Zc2lNSGcqTUJZbz9pXXl0azl0W3FeYXdeP3VEcFRybTdZbXNDIngwcGFtcz9FL2ZqOjFnci4wXiQvJC5qS2koVTZ7cShTVE8jI1osejk9MntZZDg3Zj95MlM2enpzcDs2VVJlUHAyZVlmOCs9Sk1d''@;'; put 'put ''WS4xbjpMaXhgO3pjOUE/Q2VeXVpPKTtPTmF4TH56dkZWMVdUVTlda0Z9fCMrflN+fHBidEN0WUdUWHowSXB7LmcvUDlWR2YyW3NVRE4lbywoVk5UeF41Y2d9PHM9LCRxPy9weSZvYjJjamFVJS9fbDckL3Q/bHtKa0dOY3tFRXkzaXNrTHd9KW96UEdEW3g6PDJFWElkNU1pVjxeT0VOPVhCOSgw''@;'; put 'put ''JHpfV1opT1BEZVleKUowZWU5TS53cltLalN4YFo2K2xROFkrUWpqMjJyZU89L3wsSlIvPCxjN3o0KkJ4JX5UKDRhX1QkITQrQHJURiYkRWxVWXh4cGw6YChhI10xKmZ+Lzk9MzV3TioidFtWa2RJdih4Rz5AKXB+b3lndlZTcVVxIzpySjNKP28iPS5oTVohSjl+L0pVR0FlUCo6QypaZ0xUfjh7''@;'; put 'put ''L0o1TkZtNGttaVFpKUVuVCpbPmY6YyU4UHlNQyV5YiYuSixmJS9gfVVKRXorRyx6Si5dekUodzJscX1uYmgqVHQ0RS5iS1VXc2B9PSV2dS46LjNLTUkjb2Q1LFJHPFZ8PFZOLiYlPiFyeyViQSU3PklLdW0+Wis/WVI4UllPaXtVNWdjTFRJaCtmQ2smdXlxWThUZHBMYX1sZ2JhMkpgMCl8JVJL''@;'; put 'put ''bzZXdiZBPUQrOFM2RGx7Yi4kZyJARGJKUnB7OCk0Y0t5aD9YcjRfaC9gOl5aOyReM0FrdEtAMjhzRiV2XSNhY1RZKFheWXF1NUwjK2dLekN5X0shW01SIzNuJEJye1NjLjQzWyZ7MD8/OFRNZFk1MzV7eGVIQmRscFtVczpmd280SWFwalt0dD5jNzBqNWAsfmorVXN6MWM5PUoqIjciQD4wTDdZ''@;'; put 'put ''Ji9FQW9uT2N6Zml6SkVkUiEkNUVIdWJvNUQ9MC4xa3s/NUhealMxNTVGR0VJTDJAUj16WnNNQWJ5IzReYjZIWlssYEFZSzlqVWdjRF8mckM7YmRYZlM2ZTY9R2UwPSNVWURnSXZ3am06bUtpLlhUZlA7MVUzYCM4N2VRZkNZIXBwTEprVVFjWEM2a3tqR30hSGteOzh0Sk9ieXZ1cEdvLlJ3eVdO''@;'; put 'put ''b3hIejtsNT14dSFBalROOC8+Iz1qZCxrTUFyWVVRaDlnaSZxWVAmI2VjX1U9dSQiVHkwdGhCKTMqTkw6L3E4LnZFdFVuTl44bGJ0QSIscnFzTXFiZT5LWnA4RDxzJDdZbTtMOC59TXc5IyFtVjVWWUNJU0FiQ2NHZ2ZbRFRZVyFQLnBPZlNjSTB+R0NtInh9NV4kR2ZRSVUwayVmeFE0P2NSJDg5''@;'; put 'put ''djdxIjEwfj0hLHVhJSNoaXNDIT5EI18rY1pHdm5vM3VFMkBFKDlGaHVPLGVnc31TWSZdYyshKHthO1pMQCVdVktPT3pMU2tKWVNdJXAhQV13MyZqQkBXbzhZKGQ1OyI1T3RUayU0Q2RtVEczM1dBdCIreGdbPzYpOFcwTl9xfHBXMGY2UHZzWWlvIzxRNjB6ZDYvdz1CL2lbcD1JO2xRX1NqNlRR''@;'; put 'put ''MldCKm1EJV1Tbmg6bHxtSXFKI0kuUnwvUCZdSi8zIVtnKH1bQyVXdSgweGQ0MiUoTUA1aThdYUFtfk89Vih6JXokKEwmWWpsSTNYSjhuK2c8TEVGRVdoV2NVdlFBJk0pdVIzbTA5OlNRPCR9a2s0L2siWDlbUXdbV2QuSV4kVW49dCwxR1NIR3F+bihfeFNyVUB+ZWN1SWIlIVA2NGRlYF1xTHcm''@;'; put 'put ''RixUSmpOW2MvalJpVz1qPGYpcGhzIWgyQUowRW9iZEooXkRUfktVUVYpbnAifklwU1YzfGZUT1J8PEI3LHB7WFRnXk9Ed35yKVRdK008WjlPcz1oSVB7RVNnRzwhMl9YSkR7elM4KVo6emImbXwqMXRxV3JaSnpPPztaTXdMYTRuLzVqSzRSN3RDdnMhNWRHKFZbZlhSQ1cjNSJPPyx2b3BpRGt0''@;'; put 'put ''eTk4IilYeG9wLF8+SFNLdTxxen5ZVjFUJjouY1V7WzBGVTokflh3LFphMS5ec0FqPGkqSkhxPzdjfUVWemJDXjd5UTNqRiVjITs5eG9sYCxyJjVlbjk0TUQzdWJEZzVYM1tGX3I+a0N8Wj1WWH1zPV1IcnYoT1FBPjRiXmEofCpbPGF+QU9bQV0hJjFMN3VQQyxmSTMsTylTLGdzNS51ZTcmNj1f''@;'; put 'put ''UlZgZitKIltOYzFkMHtIOFRIZVNHcEhVVWMoUCI6WVlFZENeaUZwJDUqeVYwWlJeUTpjfHZ4Q1NZNklFSEt5JlFTN09+XVJPWFZpWFU9ZjFMMXdPcllOOU8lMHUvTX4/Ink1YmwpW11NPGpSaWFqWXQqKlkkWDZbcG1MSEN3L1NTb2g2Z0VuIkFjVXdxZ1h2N2JAbmNWcmVEYCllSFZganRMck9v''@;'; put 'put ''Km1saldAUVdheDRsaiVVaVN5d2hCOXg0SExLUnlzKWgwW1gyWkhkblt1bT9aR0BtcG47MlteLF1fJiokMT1rfkEjKjJAVGVFZm5jRmt2P0VTK3djRjFvQk4vQEslZChxY3dOQT9lZEpDfEVqbVZ0JFo8NzteUShoNlM6N2ZRYklebkB4ME1rNGN9PVtPZXxFKkpbUSFjK3Eja01jdE9KfW5PTiN7''@;'; put 'put ''Z3pLVTdkVllzbzYkJCguNSw8SCRBYDhDU3MvZHFOMTdDU2guWWlvRExnKmdlNUUwa3NIZGo3d3dYYkU6KS84dylBXjU8SmZDYGQxQ19+dnxLPHxhKVFkMUpnOTZ0Wjw/I3ZxNEJEVlJ9KVkyQl0jI29dYndecTksb2NYcGA3XnE+d25zOWxhU1JuOFdiPDQ7d3NtUGZhQTU7e0lyJDFBL0daK3Q7''@;'; put 'put ''YHNVaD9aaWYrOUBOVEloKUhjdD16YjE9OCxXdEJLZzJ5KCpyKT9YYHpEWGdBXVg2SkpmVT0/W2VxbTpHWUdXYmRFPVE4eUswbXhiQTc0JXxQTlVdfHxbZC5ufTFCPUs1eUVHITF+XXEqZzxEVEhpY3E+amkzUnZ9Ky4rQlNaNnJRRV48PDoyUjhvRHA+NkNAWm1nRX1+XnlubFl2KCpnQj9uPyEq''@;'; put 'put ''K3hAbEBUTmN6KzAqMUopK000ZEw9XTcsekVrbCxkWyxUMFZXQ1Y2X0IpI2x0QlokIVZxV0dQS19hWFpHSEdMeEx9cWxeJCQrMDA7KWR0KEpXd3NEZjVvXyQ8UlZ5cEhFY3U3QjRvcUJrZEMsRGJ3Wkt2NkRSZEtgKGgqPls0MEVhYXgwJmlVQzE3bUM3eFQ5QmliSlg+SyZ1QDFrK3g6NilRRztY''@;'; put 'put ''Yyp3NSg9dVA7WDooJj1uImAjcFdiRkkkUj86PGxdUUFKTDhofDQjZExIOlhrVFBzKzFmTT0saS8kYD10UzROIXBoUmhGMEk9K1QrMEcoeEF4IlpsIzNlX3ozZUZJKz5DYWcxeCYvLnk4OHxxRnlTamBELiMvTDFoKmYoQWk7c040QS4hWyVpQyF7dyopUz5aP35DRHU0KWMxYCNlQUBNUk9mSVcm''@;'; put 'put ''aFJYKGxrUz45RzBUPUtPK3EmfFIwdmdNbVFzMjh3dmw4eXwzdXclaHdiLHNddCFAYnpPaGxnWn43VF8lSkQybzkjfGR4WGVxbmUlWllEeU46W1M8K0hWUVIrVFVOLH5LZiFIfEpCeWxgaXY9XjFqaTVHVFFHZD14InhWSEBhUFtXbylJVHVFZlV3ZTVSaktGdGVjSHBYN3MqQ3c/UlhBb1NkSith''@;'; put 'put ''eGQ0e1tSYCRvQ3QoNU4+bClINFJHRTByV1pPKi5YIV0qclY1Omp2JmA9aGs2OCo6b3EvMF9CbDJfTiVURnJVaEgwKnZ6KVtZVD1bQnBYJk5uU35RU1p2PnZXPXluQlkxVUxfRyFzV3I/emZ+SSxqbkpSYyhrPzshZCF5QS43JVVrTHFwVVkzYiN5Ll4xTkRqcjZlYXFXTXpxPz5RaXhkaUwuYkl2''@;'; put 'put ''QlopaThyQmtFfS5jR2dPaSZoQW1oRFhrSGEvJU1fK3BJUUxUWHJFTC51XWB6ciUjRUN6dWNdJiszZEJOdlRPRSI8fk1zPFt1UiNDMT4+fUlYWGt7Q1oudEFzMEloREZlTip8RkBYSEl5LGV2UE9Za0picn4rJmwuZEE9eVs7TSRGLjBpImFeOlB7WG1ES0MpUkJkU2ZQQlEjcX1UQXVueCVtITB2''@;'; put 'put ''bmhPOzsrMCFzZEpwP1lFc29TYWQqWXMuRlBfME8vL3tZSk0lZ0R+KihXTmVeIWIwcW86O1FyI25GIiNdS3c0NixDd3ZCVytjWiMjXUltVzVGYzhXakFGenN6Jih3amxDY20rRkdIS18jZWN4eTFtWC4xdjtbQzJBRF1oKXFPJVBpciprfHwvYH4waGJTMHJBIj1PSkt4TzwxenYkWXRURmEpMnhm''@;'; put 'put ''THFsTjdKY0Zab3JjKzVGSnpARENGSH5hVChXWV57c0hzVSJOSWNafi9JU0d+eEUwbyRUKllMMDA6a0xbcWRuPCxWXncvKkJGb1l1RDQlNFhjVjUhYWNALndRcGQ+fnJeZzBFZ3xGU1V1YDosdU1kJFRGYEl2M3g8VGxTKU1FK00xK0hLbyhpM0tSfjtmXysqOFRdfXBsa25oOW5LbSN4bFJaRTco''@;'; put 'put ''aTd7JCk6KFpaKURHY0hpbSVmaF82dUlWLDQ4bUMlbD1EdnpCYmsuc0VUY3RPNy8iZXFsJWUuMDI7QExGbHRbWWokVT1pVlhQdjh5QkxZdVI6V2wvRDQwKXFsSF07fVIxJGJYUmIpKUJBckQvMkNKcHlGLGUkIT97Z0F0KGZFfnRIIVcmR3RHOEg1fU06VUxMeiE1JHcpeW5ZNi9SVnd7MShKZXYz''@;'; put 'put ''QnMwXVkxMSlraktyZW99bHlOfUhoNGBQK3tORWw5Q1Y6YkNOSHhiMVt2TCtPUlQvVXh+a2BsJVFCY05ga3JbNXp+biF7IWxKSkxNTCV2ZFRRLHZrTnFZIyZkKGs3O3g8Y2UyMGBjNG1JPW5FIWp9aSNJfDhFYWwyJnZ6fl9KO0ooZDVWWEpRRkYieWVTckBVQjBkbTh+SXs6dEl1L0FZMW9HQFZH''@;'; put 'put ''ckRIckgiUW1mLEI8M3JKdyJyJDVfU0VLTGVYWlIqJEtvam03d0Q7Rkx7aE83WmN9RGdKZFhheGA8dmRiUlJWOEQqWCVyUXB7KSE2N31GbmZCXlA7cylfKms0VTBqfG5jNn5WSFM4RT0kMihaNi5ANyQpYmRtcStFN3YlUjJ5anJ+NFBLQEMpQ2lSSTIzPzs5bzh8OEg4WTlZNDFrQXNVNjZYZ3gu''@;'; put 'put ''SCFOTWQ2PWAkMSJhQnkheXx3flZXOjwmPXpOeG9Oeklsc1k7KHY1dHxYUylyZD0va2M/QkIhcGNxUi4rQVJgWyRbZlBZdmx5PyNQZCN1MmsiTkNbMlY5XlFefjFFKSwuY30hTip4QVspdk8/LDo/WGt+JERkQStiZnZ6VHcqK0ZOKEpxLyF2bz9pWD03MURNTiVZXl58MWgmY2R5M1leMiN5aDNF''@;'; put 'put ''LEg9SXJBOmVWQyV9PXgjQCttVkt0Sl5+PEFZSE9PJiV3O24uNmxIcDdJbU1vOnYiX01weEg0aiw6REZIZzI2ZFtZL1R1ZFpfNEF4aEI5NCEwImxgPzVESFRwLDJVbVJXLmovJVRNSkZEWjVGb3VlYiV9eiJNTzhJM310bTJhMy5LaXJIWW4qT2J1P1hbKyxnPD0hLFdpbkpxVS50QmkuI1s2Ryhl''@;'; put 'put ''YVpqfTJnVXU0NTU9SXYhKmlyPUgzT05gRTAqc0IsL240THtWNkt9e18kI29URDdvXzE/PlZvS2ZGYS5HL147L3N3OjZgIylybEhROjU/TXJaT0NOMDlGOFJiR0R4JW49Nn0jLjpEYXx6a3pSQD9jZERJaH51Z3cybzZUN1JxQilaVS9LUi9rbSVPIU84clR0S1o9WipiK1RtZEBnV3l3Yi88WUht''@;'; put 'put ''bDVON2diNSxTSixJc2xxKmhEY0RAOjUxdVVuLmRQYXk5cn1rNCpXbFB5bTYlPEo+eUNQK05edGFxJEVPcT1EIjM9e1lKUUU4c3ElYTFTNGJaWVJJSmpoNEgyJk1WT3hPRDYoSCkiJTgyR1lGbT1gTyxzU3o7VXsoQndWU3NoSSg/QXxzQUZDPjFiJkU/b0owKEVFel1UXWhoOy4oV2NORjYxVTV5''@;'; put 'put ''WSE2PylmeEI9O0lUSHxWUCE5V155b2MieTNMdWJnbSlOXyREVU9HPm9uOSZKL2hhaGsjbVg0aV0hRCszNH10TShYWkkvRGkuW1g4RzwuckZSc2tQJE5Ybj5OTW4vT3VkYktfK1piVmNSNCIhNT9OaTluOnNvVkouMiMlUkgzSkxRT3wkJSpgRXZsPFJTKmIqXiJFMntVQ3BkOyJBUGFsQU9uUFch''@;'; put 'put ''VGkvc0tdZ2Epcz47UWBLJE1LZFVIYnJfZjR1KU9wJVlvVjpzNyREbU1lVCtwMzVEaS47YSlTc31USUMzWzI1b0l6L0pLVzl+KD1dfH1VKGY5U300NDA/WzUvNkozQFFbfEM3XyI3OGU6dEhDbTJvK2dPPSpiK0JkOSEhYj9uUXUwXkNrcnhobENWNFM2YmkqbGc+dltyaiRWIVBld1NAKmIzZkM8''@;'; put 'put ''IlNYO05PQiFxTGhiVnxhWzlRaVg0JWVreHpNO15qbXdabVFRWlRMWG81ZHlyPywwUnRrPFEpIzNlXVMyZVs7YCxLMWBCPHpuKF57SzNDZjloWjIwRj9hPmVSRXRpaytCeEdwcHwkc1RrXnVEb29GREFvIWVEYW5+bFtvY0w0OEBCcUJFWVEhbG1+TD13SGFUNHxsaUE8KWYzUiN3NGUvQCFsLGZJ''@;'; put 'put ''fCYwbnw5XiIvdnw9LEM7Qi5qdl0oRlJYOm56JSE4ImgjPU12UDxaTmVwcCg1Wjc3QmRkO0BjNHxUUyhabUs8aTEpdDxVOHMwXjB1N05mX354MSk/Qn08NUZ8SUp9JV9eeVF+STh4PXJKOywmLytELitUO2xqLyRGalJyYlh2fmlbLmB2ZmZLaE13b2BSeF9bI0NVOW0seWlmbCQjRDE6UzdIel5p''@;'; put 'put ''Pm5bakVULnFNVzssLExVRXBYZURZOF59aXA7ZWpRSFdMK3JAQkY1fjd9WTAsfW9XZ3hVXk1re1daKk1qOW96JXBTPDw7RXtgNEV8TVVuI14pb1ZkVkd2Sj5+Uk5iUTZsUUJPfHlPQEBFPDk4K1peJVokenBCcz9DajJjUkFSZSNmVVhraTdgIUsxeU96Ul0vZ155UXtVSU8xa1FzUlt9T3QuIltp''@;'; put 'put ''Nyg1N1ovOEFFPXcoaklEPGFYbEZRLElaR3hPLFNdIy4/RHdZZ2MxWmlmTC9mOyU4OjArNlZSN2MlYm5+PCtXbyZFPnY/LFV9Rm9TOTN4OCVGckl8PlpFM2N7bkhCRW8wcjIjP240MGA2WEcyNXIxalZsdV9YJWxSbip0KW8zdkU7d21yPSYjS09SYEsyPUY1TGMqa1I0eGcxQk43Yyl5VTx4X2s9''@;'; put 'put ''RlcoPENoTjpHJFd7K0NmaUx3b2NTS3MxRnFRT2NVKjE3WDlTfWhvVF5tOjd0I2BxL1k4Zys3VUBTMSpVYjlZbC5NJjRgQF5GbSpQUWdlelpsUyRNWj58b0ZfJXl+ZmRlVTFhTj9ocmU3K2xvXldTd1VPRj1vRXNSU0A5S0ArdSk/PnQhVEcmZmRhcCpvYTd4NklUJmR2UCJoPVo1eHl6LlpLOCx9''@;'; put 'put ''UDB+X2F8YCE3LnI7KlE9KmksMXRdb0k2ZVIiPGtoemZpTn1NW1oqU2BGe24odUN5S0RifWwpckN2LmdESjtOQ3ZGa2kyISh2IShZRTZkWEhreWhHZSQ+KnBTWGp4SUpBKUxgeCVGRWJKMUNfdDRrZitLaTxvUnRGIj13OV1MUiZfanRrMkZ8V3d0R2B7ZnM2Q3EkXnkmQ21iXyw8VXNZU0BCZ11i''@;'; put 'put ''QFdRXXZqM2ttbCtAMT1FPVVJITZZVnBAT3B3WSxyI2pERlF7TSs3KE0rMGdzaiJNSCkySFsjal92SXY7UGJqX0pLcSR7JT46eWlmSjYhWC9IRXIvP3grYX59RUcmfE59OTQiOiImaylRdV9NX0ZaKXNIIVk5LkxVXjBxOlRYU0J4TD5WV3RtQjhnQipCIXg8ISQ4YWhhbWt6WWBKOyRoRWphUShK''@;'; put 'put ''LzR2d3dnI2opSjo+XVhjXTI9X1VxUH55VjFsVDFscD9RQlFtRnhZPHdpK1VVTFd5L2RaWTpiUUN5NEs2eEQ8bD06fTZuRH19UVM+SHM0Xyp3Tyk0fm4jblVaTm5Me3J+Qj8kMHMhaFYhc1JNUS5mLlJ7S2IjTVpvYFU+ODY5KjJVMyhCdDEvOWJJN0R1eEBaOFJdTlA6fX1gL1dnVS5MZCNPezNA''@;'; put 'put ''cE0qRT0vRFdNQERTIjYhU1QzWjxUdUFYS1VUeWQ8K1hbYnFQfCY6bTU5TjMsVWdAUil2KzB5JF5XOTdwdVhWLltAeDF7eDQ6O0hhd1ZzbE5yW05HQzYocjB3cj0jNzVgQ08rT1lhUTBSbWI1MWh3ZXlafTo2XjRfNSF7YDM6ekxyMWNWNnN5fnd1eEIoXnYsJjcwP2AuY3pIMFc2fkUhaGdMcC9F''@;'; put 'put ''LFk/cVcjQztHWkNmU2l0ZGwyXmxRJk06ZkU2dkgkVUR6L0VYWCJSTyFaR093RHw9b0FBezl9VkczLH05bS9oLCUyXSlKM1VGJGZzWFVEL1k1MDFGX0N6eHBZYj10M1N8TTptaEdEW0FiJG4yM15zUUQzYiF8QDQybHd0c0NRK1NKVkI3KSx1ZnJSM2N5Ilp7emAwSylBPERUOzVdVlErdiRFT3JQ''@;'; put 'put ''cEYiT3V0MTdibUpYP0NsUlNHVikxKCQ1IV0qTlA5JXk+Si8xQCg7UmxHK10/fS9ud1NXLDc0QVEwUmk7dzVUWEsmQVFTVlBbfUpLP2Vhd3JrYm9OLFYseW9qfCNIcTdaaFAyWE5oYXcwT1AyR0IxWH1mUSpLZHRYeGM8RS8kQy40KSxzVilCbXhvYHNWU1I3Wyt6WWpmTEcmbyN5YXU3eFoxaUE7''@;'; put 'put ''WXIzYTRbRndeS2RGbkRqbjBCeCZvVm9gfG1PUFZJKTluMzlxdXZ1STomW2p7aGxDSH4mcmFMTHJAOSs9X0A7UkAiM0VIcEx2eFZxeiV2b3UybSlrO1pWMTEzUEcuRSlDWkopJnlJTSomI280SW5wMjklc3ZdVyhJRWZoWWYwPnEjeXZVbCZseV5pJlBDS0B9Mio1SSxxTSJxMm9dZnkhLyRrdUVE''@;'; put 'put ''U3Q9PSExVFVMZEJldzoweFhObCUlUHxGN355Vk5aMEd9TlQwZjF8Y1cyP0h8TXwjJTtBPWhPYERFXUNqb2JZRVZFTGkxUUF3QHFQKHl4W0c6UkQ5TTpySVAlJChiPissUHFwY0F9Y2A3L0pQeVQrZ3UjX1JgckcqP1YiTjlGYGBteCUvVz9GSChBaWQ8NX4xNyMxQEZ2dzY5cFsicjMqXUE/cCI2''@;'; put 'put ''ZTlSYT5waThaJG9YVi83OEwzS31lQDNQSioqUzwvW3dfWHteUXVlOjBYeT5fdX0/UFolKl1WUnFKVng4eERhXX49LEFNUDNoLDxwbXVPKV4jKn5JYEI+Tihmd1l9aHExOilwdCsuV1A3O21uTmMkKUY9ekg3O0Q4XWt7fi5sbG5KRD18eEdrXVM2OmRQeWJjYjpVS0hgfmVxOD5wMm8qejU+aiJw''@;'; put 'put ''WUo0WlR8dTxgMTxtNC83WDg0Py5ISCE5NGoiP3ZQRyVRK0BqakZKNWk8XzFuQjgyfVV3OVJxTGVTXkxPbzZfZGBeWVdkOyR6cn5XOnRnQjpvTU9OdU09V01CZlpsaFAhTzFjOyhWanZMamchVkpjQnR+PXg0P1h3TiVzR0BHYlVYNCNtI3FpSWZ5Oj9EVTtXKiVUWll8UyYxSkxDLEhPfEhIQH4z''@;'; put 'put ''IipUInhAVCgmMmM1VFVYP3ojKU8pJV4wbHFDM1VDMCNDMSxVI1kzaEhvL3owMiRZVDkoK2ZnZiR+TmFbRWJKKWM1RDJ8OT82OHBNaXMzOTlvSXVpMUdwZFYqaXtQV20xc1I7YkV7VjVDO2Fvc0dGRyhfIzx8IUJ0ODhEaGxMOkJ6YWZLazk9JWBdPHNXfVZPPyZAdT8sQHM1P1MxYWheaF94Ny8r''@;'; put 'put ''M1c+U2c2XSZIT0puMkYzVTM0dUosb0daYGx2XihELExGV0ZUek9BNjVrcWp5TnJhX2p+Wy5fOSIzZnsjNyxaUiVeY094eTtARz0kWighWFpERWBQKigvNm5DPzlNU1Z0ZDd7LD16N1NWbX5GbmJ5RH5XOURLPnZDaXFIcjMiTSg4MWddXilKd0MrZWdRaEpRYmh2WFpOaktkQipHQzJdKXRjRTJb''@;'; put 'put ''M2V6P0hjUWo+K087YlV9P1RKbnZfLG09NUlNRWpGXm4lWltJSVgwZWxQViFwajk6UEgwMEpZLix7QDx5UE5uMTdwPjhAUT84VEB8cnxpezBsYnVzPDgxRDNdW1tEUiZtXUkxQD1tPUNTc0VwKXh4TyM0YiFhV3JUPTc7dyZqJVdvPkVNSl13U2g8UFpFK0ZaKH1acnBxcjNyYDY1bG5+cjFJNDNt''@;'; put 'put ''NEo+Q2U6blFZdWI6fGIrVHZXT3w2Lj91Y2Eic3tuVGF3dFJ+PEZGKzZecVkmYTBCdUFBQ31jNHZ2KnVfIV03KW5Na0c7eGcuR0wzRkM9Pj9UVVYzayNwXjZleGVFP345WW0hPVJeUnEvWSVzbCVLZldQb0BORjojVUpOQEJ3ZTwkJj1bImouZjpAS1MqdWg5WVlPRjIkbiRvJG44MyV+RSQ9I14w''@;'; put 'put ''QEN6bFlNMHVEND4jIkkxL2VDb2pubEEmPE9uLklkc1tsRno+Y0huISpwR1k5fmFvdVA4cCtlMnhReFYzY3VaZkgxdTElL0ZqQzhIRFNdanZFOHxZd1M9KUVlP3tLU31lcm1TM0RKUTlAaDoleltAMWx+YFMse0hEfl5rfCY7LFlpR0tOT31WaXJhWiw4IzEuYStfQyskTjZKNyQ7UnM3LllmT0Aj''@;'; put 'put ''Nnx8RTVoMmJiTTdmPCRTOHU1cHFBPF0lSCkrSVdLUVRmUGRwQ05SOTdkZEdvLGYxIUIrbCFyVyVeOSlxYTZgLzg4YEVIWE1NLjJCbTNzN3EuQHgmc2l9JXJ5PC59Kj9qVk1iVUByKXMifk0mKlJ1PEZyOkJjI2trdmpVS1VQKkgqNT0xX2wifHB+eENnQE0sfW5VaWshbmVYcCRwfjU8bHxLImo2''@;'; put 'put ''cF41dDo9dzVMQ1dWNjVPZ1dhUEIkdEMjUH1Lej1JUF4pNHEsZiJlKiFnSjthZ1puUVVFVUtkNFc2MTBMSEshSDcucjpTWGZ9fEc1MW0kIXQ2dU1VdFA4KThaalJzS3Q7QT1dZyFgX3c3QTwkIVlPJE9AZkk6dnlrOyVZYUcvKV5GdD1wPHNnM3czUWg3YHRiWGRjYX0lKl80UH50K1V5PWciQlEj''@;'; put 'put ''WlNTM0w5S3dzTTlDOWd0UDRuW19qSTg2NCtjZE57YCl0WWF2NENjekpvJnMldVJZOEZrUGU/VktQRTBxVlpxXnMyLCVOdUglQ2VdUElQeXh+WDNJTkd0am5KaihGUi9Gb3s5cHpxUGo4WXIyKDt+MnpVMnNsejl7bl5UYHI8dWFBQ2kuIUZxK0ZEY0pQUj1ofk5nSyVWdi9RI2ZEIWJifVRnJGBO''@;'; put 'put ''YTtYIXRRTTQpI01XOFZsZG1SMjVNZGswU05hKzwyVDx6JGpKZk9aOi97OHY8YTwlVS5ZeU4zZDtgVyshY313IktXfEVTKXQkYUY4NWdrVWwqW0R2a0BgNCk5VkhPUSYjRz0zUk1WT0Vze0o9VThIJTdTU1oqVkRXISUpIkZ1VHl0Pi9XQj9JMUkmZns1T3ZZOlNuZXxyd0k2TWBpKnZkRkpmJTpJ''@;'; put 'put ''PVFHN1NjRn4pYnRPcS5nLkEvY0ooQWdNLH0/W3lRLkFycm0yK2xTbzMkXWNzOWxqLG1EaVVkYiYldnwwOVglZXNwK14xODhDd1JsN3A+az8oazAxa0FsWm48YE0xNV1UYyNuWm8mWHYrPjx8ZnV5VUFMSiQpWHoraiVWUz5kJSV4YFVFRVo9aTdgdVpuJVpYO3V+JWpUK0oiV31hJWgsTX5aLld3''@;'; put 'put ''PEpqKVtfeV1YWlM6Y2FvKyU1QXQue0VWVTJgV3Z6PzBhcHgyIXwmclAlfjRIQHNLcyxpWWN9N31dXkUqMnJDfEtXbHtIPjNMaiJXUDVEOWBeaD5NPm1US051RmtQd0cjTVg4YEs8QjEkTFhRWFBFMjZ1VXVWZUxNV1A3PEN5LlpsWyFwanJRemNmUSJPVkNWPDNlYVYzWEppXyNAeDZJW0ZvJDxU''@;'; put 'put ''NmJvQmRoJUYhI3psbjQ0cj9JXl1SV2RRT0slJnxbeGdqQlh1S0I4eXxZWTRxPkRFR3dnRlgpfDldOU09U2shJnhTRHcrL2ZxbnhUJkxtRVY2JCwveCxXRVR9OW5hXWUqQls0RiwzPChJRCwzbUFIVClWP1NxQCRFNiN9VSh6dFFhbTx2dUtSZkZBYURZRzA1emA4SG9tfU1FfHU2W1Bkaj0kbyQx''@;'; put 'put ''RjUpRzdJaFRTeXZKVmIofU9iTGUvMnc7T3ZSb0MkMV1LJFU1P1hrPSQxPmh0eXY2YU8mPUA8JDEoUl5Dcmd8JWB5alBBS2hfM25KSFtRYVFycXdiMW0lYjtBaHt1ZzVKV3BQenlTJj1CP0J7ckleSEdzfHltdWI5amFEfF9iRCpOc3FzKjdYUX0xTGo3TWlDUnhrOm57SEZ1ZlpLRSIwazU7Lj5H''@;'; put 'put ''fShocXlxWyQpSDIlR1VIenlxTGFXLHhbOjBzN2diYHEqI3Z6eV5NXjJ5MENJdT09KzRxM0A2cCVjZ3l+cztvYUBSbyhOZ3h0M1k9I2FgaXA9TVhRJEZVUjBdblk2cCZCNTs4Pl9+TEdPNilkUEo3aWdiZC8yNyRVXklENE5IYHZvbjg/PkZuXVc9cVErdiFOM3s3bTt6YVg4YFl7PnFAcGQ1YmVx''@;'; put 'put ''KTphejlqR2wjK01qWWIraXAyYHdnLmt7a3xaT3FCVEY3XT5ZK2d3S1AjKn44cy9oRnE8b05teSk5RDg4K2NzTH1bdHEydHMuK1IvaHt3TTpKL3tvUmUsS1pxV3RgY11yQmRNVWg7bCs7WVc2P2t3bnRvJixqdjRnN0FzXXlyN0IvbE88WSQ6V3YpdUxQPkxFY146TUNATD1bak1pI31DL2lNb2Bq''@;'; put 'put ''PEIsNnxuYHRCa1R1dXBZPHdhekAyRjN6WzJxJFZISmAiYkl5dmJaNEc9ZDlIZyZHRk5zbUtkJiY+LH0uWWJ8PG8xOj1JMCYvcWAsYyFLLnBwMTNUa3FhNDI0MkI7Z3laO2BVZys7OyswamNPcUMoZ2B4KVs+IT1LVyJ0TUEwXmU8OEw2JFBqYTN2RV84L303VW48SCxDbVZOQGozdXxYMDNQYXA0''@;'; put 'put ''YERjK1pdbCxEMGpYRHMybiVvZ3RWRlhKX3NIZnxoRzhpeFIvfC96allHUFF2bVpCWiYqMk8lamU9S3MjfExlRXVOdytOZilGJiJsaF8qfCZJVnpNMjAxayRXTzReSF5xc19ge21oL3NmOiVWWz9YZG5PaEYyWF9sRlY2YGtZVzpqQltpRmA1R3s1Nk9Tbno+Kzx5dHFgN3l7MmByTnl4Xz0/IyZ+''@;'; put 'put ''dWI3YEFsJD00XThsan5nJk8iUjJOcH1bfFZtfjtjNSlPO2VwTW8lVV94Li9rIUl+YGtEbkdxQWI4OX5wV3JHeHxmLnFXMWR1eGpvNXZVSmxvRTBbKXdZaDUkNikzUTVWdEomdHBnUG9bMUU3ZU1oaGRUI1UvXndpaXRGYjU1TDgjK2dILGs/c2FPbiQwdVFhZXUhVT1QPj5KR2NhPm0hRVNzUFAo''@;'; put 'put ''QDw+ZUtbfTNmOTh0ZiYzWy8xa0M8SiFMRDdjU31qTXhBMlNyOjE/XVl6Vz03XTQqTCNvaE9fPC80UUc0L0ZdWE91WzBAUWlHK11ybWhrVm0ldz1VT2Rhay9aa1BLZmE5JV50c2NOZCZYPTF0UnxqWmZdMkBbN1d4UVZ+Ry85d0V4ZFdjS19bPDowXllOal4pNlZLPyYjOSlUImxQZnJiN2dZNys3''@;'; put 'put ''WUVBfkxXRW98OzFheUZHSS9EXy97dnltUzp0XUQ2JClfQzZ3dEE3MiwhQWs4QD9PQ3J6Un5HSjU2Mm5tb2R7UiEpdmUrXj5HTHRSJkhkIlM0d1haIj87Kip5aXphUWJUY1RQUlN6ZClzdGwoaCpkWSNpb3pOd3k1QXFfXjJDYVMxZjx3bz0pKlR3b01jRC8oVzY/Uzw9TD02IUJgJCJkYzwqT0dM''@;'; put 'put ''eSRwTGYmaEFqMHo7VnFWX3Y+JFlbKjQydFFJKl9DazF3RmlXUEBiKUV2KS45IiNWJXwxPmchMmZOSyldZlVkVCIvN2FvMVIpc28vbU9qSDg+fGIpKz57cXpIRXkzUERXelhyRGRySV49LEQqPWF6ejsxVEA+cWM7biZBaCY1VFsjVzJzIyRSL10xdkZEK0t+PzFAOWxTfTZEPXg7fW91Li5PQ1Fl''@;'; put 'put ''KyM1MntHfDJFPj1gPUdpUF42Yn4/I3xjNndNaVJGY3ROJit+OmA9ODthKXdVYjpTQTtuMClzcyY0aVRDQDdTcEp1VT89c2k9L0lQK3d2PTx2U2g/VzRoLlMmU2ZWYEp+KXh+Il40KjNMUHxyS09VOWEySyhCImp9K35gK3lGRH5OW2IsIUZraGE+RSprOlU7UFM5TzM+RHU3S01MYStKNDhfUitM''@;'; put 'put ''TWJuWmBTUG1FU3ZmK04oX2xObChUZUJ2Xmp8M1MvNSRZIzJ+b3I1TGo6R1hTUkc1cUs/O0kyeDQ+LE9KfWFSWVYjbi9fQzFGenxYXWsxOGhrbjlnVUo+WTcqUnZseT99bCtsZTBLQSsiXkdOI2kuTCkuOiImP09XUHl7Ym4veCQ5LyxiT01keVJ9X0hYc1kqbHBkOX01MFpNX1lINkglckMuQkVr''@;'; put 'put ''eDQrI2kwPmJNfDt9Ln5RUV4jNn4mNX5QYykxeT14PkYvTH5dV05hSEhEaDBhO3N4eShAOklvSFlKPnc6cHJYb0A4ZmFBMjcpZX1NTnpRN308Qlg2R2FaUiZNQnJUMk8lTjxjWWY3WEpmOl84JkpQV19RK3NQbmdXZjlLenpHezdDdVZdZSFSZWhOKFpERFo2KjNuQkRRIU42P1RQfj5dXThZTypj''@;'; put 'put ''KmtjOjtVIWBLeyRGSmA4KH5DXiUhVT0mZFVSZV9LTSVNVj1zXlEmWiNiTW06NW5beG5zW2B1MkUsdEB1fWRCRyw/KGtJPWtqfm06K21gWmNLck9zLykzUkI+flQmKj43bi9GME5zUyV6ajssYXl9Mj11P3MqQ0RHTUg/SGRoJipeLCE8MzQwfTwybix9c1t4byRHQ0ZBdXwuPH16elhTV2dGN19R''@;'; put 'put ''XiZmNyJwc2V4Rn4kTG8scEp6QzIpajBvIVFYaWhoRkhnTTs2QUEuQz8mcDpnY3piQ2VvM01Bdj5KKFhPcElya1tOVy48Ly9rUFVEW0lUZ3dhSi9tZiYvJW57cDZxaUtGfm48MDdPJVIiVVJ6bllPTVEhKXomTnhQaXRxdD9EKmdxNi9DQklENVRMU11oQFRHYTBNWCI5PzdFe2JxRkpWZUFlMz9r''@;'; put 'put ''fF1zOVFZX0pTPU9TaDNHbGI1MXpOeyosQ3t0dltlISQvZC9PYD1WKVhfaWZtR215UF1CIyQlU0BKemswcXtzVi5EIVVKfWdYOyslKzlqLmQrZDMpfFU8SFdVcTBXNG89dTtGPzlZISNEcVFtK2Y/OTBRal5kPCRSe10vUStaVW0vTiJdUUtmVCQiRDN5aj1bWT4+d1JsaGY1JUxHcCwqRUddbEZL''@;'; put 'put ''KXBgPHJKR0teJllOcjFMPy97Lm03KFlWZEdlI100bC9RK0NJQjdCS0JuWntvPldHRW9bdiRYSzVidEtFYHlROT5AKG9FajlBNGhHMnlJVFc+dTZmKjptJVZ4bnB7VzE3VG1wYyltWDhofV55bU11K2xhMnwxJlpVTVhRVXhTN31qdnYhPGZqIV15PVZGd0xXdlBLK1phOjZgRlZHJERyPWdzWmJr''@;'; put 'put ''UmtseHZLNUN2O2BHYWNwbl40a3lERzV2O0owI35ZeSFrQXssdUBwVnhhISQ0K0IifnpqQSFnaXFeNzQ8ezhEbitrbDhjIj5FUiV9M0s9aDc8eHM5eCx2O1VVfCpTc25JcW5KcjlsVXcvT3Z5ZG1FInw1azMuKHVVX3kjN3wqNUptc0Z1fkBnIzVWX2RePnVYdXFsKCsxekQzXnZYdSwvc1ttTjk3''@;'; put 'put ''KnZjRG91QCF6dHI+MH5pd34mZjV3eyNCW0I7elFdbU9lNVk8WFRCOy4qWTI6MGVycHxtMWdFKldOeCgmakFdRFAuQSo2eSk9cThEJHljPyU0TVhPLkJ8czVpSVV+V1lZemRFWmBxKmY/cEtTcy8+Z0VEcDZwfFVDXihFUVR7JHF2UUEyPG9PTlFre1A9OGBXdixIajJ3Jm4kfk9YT2dmNGQsRCNj''@;'; put 'put ''Rlk6ZHY4fmZmNyx4bTs5UkVBJC41WSQkIVRVQTZbUX5TdU9EPGIwUi5BYVhpWmZ5LjFWU19DRmx7LD82K2xXNXpecyt6Oi5URiw3aWpfJFIoX0V9cVdDOCZUMjpTZnRiWU9LUSRVSjdZVS8rW3tVVkhbP3lBZnEhe0F8OWZYeGhePlJyY1s1Q0V1NSpLR1QjP2EkdHBXOzpnIU1PM11eQGEyVE5f''@;'; put 'put ''TTRrM3ppSSo1Vjp7cCVzMGo6Mk1KKl9GN2c2ZitMNzNUJEZqblpfaExpXigsS00jfjwrWS83NFV+U0AjcHxRR3dgLDQpQHVQXUs8X3hmdVAkPUxYZzdeInp3bitjXkNCRiR1bHxLRD5XUnwpaT5ON1RsbiYqbkRvKUNpR3FRS3Y1PWgyVnxOPjw7ZEUmazJfVCh6ZlVHK1ZkSWlnbUxGU00wJE0x''@;'; put 'put ''MS4/UUxVZmdFT05yOWVKLkZSLGQlU2B3VCJsR0omLnZeMWh4QmU4K1dqN09nP0JSd0VHKn1DamR5cE1MNyFidDZ8RWQzNT5STSJFIm58KT9CKyF5TjZzalAmYE12dzc9VFtEbD5CSSZhJmpBXiZDZjglQUp9PlI3ZzFRLFZCMCJHQTJybyFRLk9QRyl3QHBVdDU6aiJ5U2c7aWhrRzQsYF1IPiJ0''@;'; put 'put ''ImI1eDt9IWFCcC9MODFKKyxgdjc1Olg6bThCIl5SMHZte1Q3YVUvKEReNjA3VD84VjooeG9Pc15SJT9jNDYqNzV3MUAwcUEheGhbW3JnIjReSSpzN281QlUxS21UJFMkWm9TYnczLkNtJkgiWkFFZW1sO1lHeUlfcyxnO1UjZCxmPm5xaTtFPmhufGI3clopfS86PTdMfXV0RGU0Y15GOVBKUHBH''@;'; put 'put ''L2IzaUA8bSN5bTZhZDFlKEt0emFzSWErTzNyXWpHTDFOLj1oWmpjMEwpU3N7ejEhWXE8cyw+WX07aj9KVmNaakZYN2dWfURQam86USExMCRSPFs1KDAjV0YqW0ZwaFd8NDNiPlsoaEt3LEF6b1JgLkAmQHFDP0g1NDpRYXZXKmF2cSZWVnh4cz5ZOUJyUFF8aGwxPFtVc19jeDdZTUk2cilXYF1Q''@;'; put 'put ''YD8+SS9CMXUhQTc0OD8vMCp8eEc+fnVIen0odHdfM0NGWFcucHVzVWBRUlg8Un4xKFU+PSllMz8pQyQ6eiNDTW91cCRkXXYzdnI+cSV7OXdDNF9yOk9uNG13fT80PUxBWkFuc19NLjdgNWo9Ryw5SFNmWVR8KGp7NDU8ayF5NCxRJFhjQnI2YEFDSSM0KzlEeERRJDg4JmBFbUpNeTp9V3xTT2Ul''@;'; put 'put ''bmokcWQ7YHlOaERKdGldS1RoPS8meTk+NFlKS1RoeS9zUXdPUClLYFt9KXokPUxHKy9GRn0iaXUvW0B8TUMyX0tNQSY1U016VSVbejVEcyFxKFdTSToxPUdsdzNvYGcpaVU7ajROY0J4fEBEXi4yO1IyNVNwdXA+bj5bUWlhVFNYM0tZMCthNW1zUXcjeUNdeGUxcXliRF49SzNaTjBRSW4kZ20h''@;'; put 'put ''VXg1RHdjfFlTIV8jMmlUPkJ2TGc1YEtCT3Zqbm9aJERIYjh5fXJKRyZlMi5oUk45PzQ/QE46PkF6K0NHOmFES2EiakZzdntyWnIxSFlDLiZFWGtOP0JxLn0yeDVOVTU9KikqMCJ0MV9qLDVgQF9eSmBsT3lSVkZpPjhfSVVvYlEpc1VYVi5gKmFBJWQxdUApL2JbZDpCWV42aCZQOzMuSSw+R1Vl''@;'; put 'put ''X3xxRV5Zcj5Ta3t4ZjQhXkNkPHlyOl5kQSROb1MpWHBndkcieHIpXWM2RzpFellSOEhuVyl5ZzpIamI+N2VMbXcyOV9OaSJNM2lkRkpbeXQ/Vz5mSTptSmYhfCQ7alNjeFp1em9JS3kpZz8/cGgybmxIY0djU3c7O3ltbW9AbVohTT4sNSFUUWFUQTNES0J9YFQ9cDB0VSU7W29LRTE3TzF5L29g''@;'; put 'put ''VmEzaVIscjJGUU14bVhJJF1PTnZ9enFEQzFXZi4pOUsqMTNYWkZKe2pvZkguWHB0JFlmKkdLWlZFW0RQJW5fQHN3cjpIZW4/WCg8LD4zPHtBUFJUW3diK2JqYEprKjR4WFNvPGF4XURbRDs2TDt1T1pUM0hMMEJEdFRAPHMjbl1NTmJFa2xCJGc+JnZXM0clbXk/YDw7M2FMTj53VSpXRHM4Yjkz''@;'; put 'put ''QjBhfCVKQUJQc3AxMDRdcDAvTnxUVip7KFJOSGk0OTNocksiIzxgUGc4e0ZpcFNWPTNFKTpxTVpONzI8KHwlNCU7QnM5L0NiKTlSNVJebzxrMGg7W0x4fS9LaDddUlQ2NEJXVFtDWTViU0pLPS5ZfGs3Z0dXXj1DZnQpQkYzeUJHXlQzWkAuNTUoJHxGSSYydzs2XUtLKmlTL3NQUmFHXmJjSEd2''@;'; put 'put ''YmF5bXAzSlA0YmtyTkAseldoMmtabTxbWGhoND88YFJ4UC9vTD1IMGJgUXl9fElaI0MzSzt7answQ2JbYCV9aF0lamxbLkZyb3BvUWRpRkooWzplSHxrTVFlMm9sSksvW29dMG5FP0B7JElFaENKRyRhJiNnVHZMUCtAUFJXQmN7bzw2Lmk4YVs9MlUqdzdCZXx7emtuP2BsZDE3XXFRTmdtL2VD''@;'; put 'put ''bWpfNCF1e155SG1jWkgoZEd9TGFJa1UyMEkqRHUkd1o8WjBhVlQoZGI9OztZOE5VOVIudF5PUmBvMVB5L0o8JCxvUXgwQUo3QmA9SHBrU1IsRUQpOGhVTDtOWzF4e3ludjE1KSxbSG1OWU9XdjAsd29waEJvNXN6S3F9ayZAcWU9PmxZMUNUNF1YPX1qXVV2NTtHJjkmMW9VLnwpVW94eXohNChS''@;'; put 'put ''LiV7bFFrYXJtVlZGMFp+UzpRPX1ucHF4c1VHIUAvRE1RSGpLUm94VT9dOF9gU1o7L2dJKkpsPl1zOXs1T25VMVNXPjZSJE12dzllbEIpaUpzKU9MSFU1RDpIRyhHPHcvTUVZXTcicmRRW000R3MwMFNmb21rOWY6STt9PSJpfVklUEI3ImdlKFd+NWxtSVJ2PnA2bmtabj5QRF9OYVdJcm8/bXVL''@;'; put 'put ''WHk0RW00OyhHT3tjXS9kJDg8SXsiZywocCQleE91bVYzRW5XOHdCWX1GZFp5em1AS3NIcDBSTGhgekdkcEUoQ08jRVl9SlBmeHlbUDkoOTE3T3IpVSRkSCF5PE4uVCszZitlODszWFNVUVVvO2lGdEUlcSF6Vz9USnZFJjNWYkUrL2hlXVBvfnQiPTw3MldOeElHLFJNTjxaQz1Qb3koSFBpLj02''@;'; put 'put ''RipeTkw4Kkh3Q2c2OUQ4XVJbVWdWWTdJM0I3fGhVXUxJdigrMT5eS1hwZ3VmW2Rfejd7RCt3R2d4ekclUHdWcytULG1jV0R0TChgcXVNT0xLUyN2TWpEWjlOMWAuSkNKLERPUjlbMyFvRyM0ZXExZHVrOHBBaXReT3NhM3ZwXjo8YFNGV0xTRmVSQiE+STlbYmsvTC9LcFNqbztecjNhJX1SezVC''@;'; put 'put ''OnRgUmB3LnkrMGpdWFNaJDR2PWkzW14xTj52P1ViZCJ0Q1ZWXUpScjM5RCI3X3BaVG8hXiRzITZTNzt6SlUhbEpTcGhLcnZ9ZC9VI1VoeDViYGFPdjh3OD9sclhgPGJvODBeVz17bDIqTTpKb30jPER0OG84RSFbZmRhPkwlYE84ZzJIPGJdYlJPYXxsN2cwfHptUHZOejUhXiooM3FtJGshbEhC''@;'; put 'put ''amozaUlJbjJOUkpVKV5peG5MW3Eucjc2aEcxdDYrOiI4TENYNUxVaFZkJEVHQyMhRl5mbUd8TXFaVHtPYUsxdnhbZWw3bEJwKTtJUWtVUXV8YUpddlowdkROYUdGWiZ5dkNQZXhlbCE1bndnJTwyUWNRMDtMWWRhZWJkKkFnNG0jL0k6PHpNUmFsbUlLPUtFQEJZb0JFXWh3ZVdzWFRTd2I6JH03''@;'; put 'put ''cCtNZGUhfCF3R0NmZUNzL2FyaDN4LzlGcDtTRypaPlRPZ3RtbWgwMExLJVVnYEc2QjVMN2suI1BNVmFgZmdEMGAlVXpxMVhaLFZAMGc8L0RZZ002WFg4fT4qWSFiT10zUWpUY1B0SForO0lvJjczJTgqenBOOG5iQHB3PGZHPnM2JUs6RGs5fHAkaWwkZU1LeXxhUVkrTSQrVlBoVnVaQlBlTklN''@;'; put 'put ''VWhsKio9NlI2Q3NYUSU9eUtOOUBORXYrdy5tZTNWQCxxW2FkTXpoIWJPSVBgTWF5a1l1JixaOztbXlFhK3pWYilZV1lQKyEzWSpiREMxZiF8OUluMiFJbl0vKz0jSS9Zbjx7Z0BJZkRfIy5FfEtDSipdayteZlNNTywxUk8+Sz0hbSpnNzpgRHhtfCpPOil6aVFeVipqajFLTXhlUGlzT0FueTdI''@;'; put 'put ''blNpNjBrITVuOnE2WENzSF1xRCVFXzFjK1NaM0UmYFQ/P2plUlsqQE4hUzdqOGElbyFMbSFoRHhTRT1LRS9NaytIcUZdSiMsUXErZVZYUG1gPnFJO2hYOmlHZDtZe11oWW8mPyR7V2Bycj0lOnN3W19QRilsaStjMT97UlckKTx3SS5tfFMyXnl5ZCNrfWNnN1UvQVlnL1RKO2QwU1UyNEQvYGxp''@;'; put 'put ''eSlrOk1hZmZuL2J2Xkola2w1NSk3LyZDSUQ4Si9GMFZWZGpMSmp9UEokW1NhPTUwMXw5WWwmPDs2aGh5TkZVPjx5anl5VDM6ST82c3ZRQktDISE4fCFpMF1hUSUxbSYmQm9xS0NrP1p1OWNocTM5KWRaYGFjP0tiJm51UXo9Q1tnQmNKWE5XOHlDMFQ6V2p6RkY+cS99YCUjKGtzZU9FJUZIWlJ9''@;'; put 'put ''QUhNQSVGKmJ+MmQrdk1NYFQrbSYpYXVhRkouaVd4NVQyPy5BbVg6NGxTUUtNQihLa3lMSHd+QXVFRXkoUExLam0xcjF0VV0iMWt0O25zQFtYZFpLb1B0Sm5AcUxSQkdVWFpWX3o4MWVGekBzXitVYCYiPDV4e08uVj5XPmJQQGg7R1okTjd6Py5hLlE8QypaSmArZT5zd1ByZm12VGwoeyV9Nzo/''@;'; put 'put ''TEA9KWNZMERWMklSN1JuP316KiluMEZWPEBudXZXPS41RC59MDxvXT1JVWUmMkklWmpJJTdkSSVrU21zMD1PdF1LajVaUUttc2NwczZKMys/WV1QdEVvb2cwWF9aXi5UQD08PE03SVJ+OUk0PnM0YF4meHszMX5lbld2T0pdImgrdjNiKVNZLjNrTTtIQjBlMCRXRXdZSkNkQmMufllRYT9PfHdd''@;'; put 'put ''NnJlJWRtRVlneC4hTzI3d04odVRPMjp3NFoqKjQpVCR5d0VfRzdbVXYrKThGQVF0UiY2YHhVSCpwWW89Sm1uKmYzTzZdQmc7XX5aIjRQVS5tY1ZxWDBEaFNNb2duKURBYENlTU5fSnRVX1o9VDpmM3ZwcDk0TFApLzwuMit1Yy5PdiYzKGdrcFcrUUk8JlAhTGQ3OGBPNHMuQmhzODx0Yix4NHcy''@;'; put 'put ''Nj5eNjZSX312VURtLmkrUm9RdG1vRX1hbCwoamtSbCFXQE9saCYxKSFvZzFUMVchczl+cHluLEMjMTJuV0BHbTVkNy96JlJTb0V5PmlhfEkzPEQ3PDYkZ0M8UF8rQHU7Y3lHVD9wZFFtWTk2bSMqIm5XMX4/RH1+KUhqZEdfcjJiQDQ9R1dETDY4L2hhRmpLQj06VmxzWVYibHU7Okkid0xIKnBj''@;'; put 'put ''YzRReEp8PzdneW11WUZhWUVAZzxbOSZEKnd7XSl3RCsvZDolbjIhYzwqU2IyOWJBbT9JS3UiV2woX0o3UEI5eC5iZlBeYWpbeXwyRChXckxYS0J5UzhFNl9CRVdeUltaYkMyIlYlZXVKbFBAXX5ydSs4SUpHfTBEJDtHNTxxMzIzTyFgXSZnL05qdipidFA+OSJOIjpjJSsiSF1FZkBtcVNUTT5n''@;'; put 'put ''PFtLeC4hPF9IYXZPRUk9TGJUdVB7bHJuSjduflRWOHJOVzZhIk5RP0ZDNDpxcz1mZEpCWHQiVWA1dG9mIjtUTipreExwaWM+WiEofD89X2R8Q2JqbXFNUS9JbDd3cWFNc0I3UkZWcDQ0KWN+Oi80RTtSZHsvIzk5cExJbWpjQ3NYUVttPlQ9WHZWay99eHI6Wz49UUc4Uk93NE91TWIvLCsldFFq''@;'; put 'put ''aW8lVG9nbzVhSmZYOENoPzJGcjYiQVFhUXsiPXkrIlYyL0QmdTlGMTU/dTBnTHZEZXg5X3RWQUordEo6RWZFX3U2SkJpaCRDaUl+aysjK0VGTzlDKX0icE5fPGVMRUMlT3MpQlA+R29fc01VcSovRiRaMS5rUzZLSUI1RHRkXT8pWjRLVE54OHZBYlFJWmBPQ05xZFJzKTdZQz1VdVAmanpVfTxF''@;'; put 'put ''YDkoPUpVSlp1WGJeeD4hTiI7cl1EX0d2bjJKfElqP3che0ppUVI1QzdeLzpnaVtAa3F5Plg4STB0UCJPPyp4L0E7b1tJNkVlVjNwXk1ZKS9+QkwmPi9BO2RPYU1jaGc4LG41Qi55OUQ5a24uRiElKz1LQm01cTN8c1VAdkVIUm8oYXVwcWkxODJgSzhBPEpmNCY6YFouJGJwLHs5RGwrKD8lNm0r''@;'; put 'put ''KDZAPyVJZSNqaH0/MCw5WmFHd0ppITlnVDUuWnBARG9gO08rc0BAPj56NjBWLjBoIWRiMS5ZJjdELy8rS1pLVSUrVjA0OlJDV2wrWHVlN1c+KVtCcShhQV5MPDQuYn1CbVd7b3YrKXwyP3QwO0E7PjNbREhkJEBOc1guajVpdTs0Ris/TWVeVHtyJEdJRU1dYCFYfC5BJHQreVIpeXozZEB5N3RK''@;'; put 'put ''LGM1SnBlQVQxXmFCUiUxQypwX25+bGwyVX0pO105bG83O3xvZiJQJitrSXB1Wj0jRlcpPFRKWXl+KWo+MCtAI31TbSs7IVgwSCVQZHltbGglcU4xbUdpSTc5LChSWEZKdlNDIU9bYzttZCFoRnVQNkZCMVl0TTZfOmhPITQrV08+VHoqTSF0MURyPk5+NE1wWjdHOEU4U2U7Tyo9WGcvWWchVzNd''@;'; put 'put ''L0VMemlfWER6XWthKVN3a0dzdiI8W0AvWTR4bVlXUjF4WVZTISZnO0gvZE5ISXUoNHp6TDYpUFJwQjwoV2pdMFRdaCwpPCYqdThyOzh3ezdHOmNGZkZKU2F0Y01zVnpoMGV9d1FvSGt9S2VNcyEvdTI7ZndqUX46TmVhV3M5V1tOTU42YEcwW0spclN5QToyRmt7KD1qOFtwfW8iVHxbRihlTEAp''@;'; put 'put ''PkBHY3RqN1p+TltSOSYyY31VOm8wS2h9b0cvJDwvbmFyaEJDPF1oKCFbKD1beX5oZ3RNXTNRYFVqUXBLdXc7e2gsXzMqJX0jSz99aH5nPFtMTS9ORC9YblR5VG4/YF1rITAsMUFPZzNCWkFPSChhIXNRQEIwMTVtRVBkVyVAeTBNTmtCKH5qLElQfDI4ME5LdmUqcj5SKzd7IUZsVWMuQlhpIWoi''@;'; put 'put ''aFRZQyNoNVl9bS5uZHkleSh6NF5OQmFeQ2NSV3lNZm5CWUh9OWJgcWU5JWdRWi53e2dEIl8uK2hTcylZPTd6QkdBITIhQFh0Uik0WWNTMWYofE9yRyk0VmRfKFZQZSNmO1VDTnovaSEwQmcvJX00WGVeSXNZZDsoLzEqaUBvKHFxPU1uMjxrLzc0SURCIyFiUiF1eExQRVhNL0dQY3AqPUZQY0Uw''@;'; put 'put ''bHd9TEBFVnNSTFVGe0h1emx3XU5YKTlJWHhde3JMTm9ed11OQCJXKWlALEZITlo2JFEjSmp3e1QhOGV4LldneGVKTng8IWJSQHUxbjJkM09uMiUxI1ojeiRMZ2Y3SV8ic0k1STk/YWozaUhEOnljRVR3IThNLDIrXmRoeE56XVorSjB1M3FiNDlsXUE3WWJIS2RUdigrfDU6Q2xYP2A5bGJgM2s4''@;'; put 'put ''UEtobnpUYmI5Jks0dzBnZVo8U1U/VGRYJT9iM05zYldzPGclR184W2ZQKXhiM0J1UThXeHkpSHg5S15GJUB6UERCezlaUFV8ellSfXhhXSZhVTY+U2dmeklfdDNrM094ekF2W1F7KTYwUnhgKjs/YWpYaU54Lm5SXkksZ1E9I2I/QWY9TWVoQEksQlFDd3plbmNROk0iRCFmSUVNejkidkMrUzo0''@;'; put 'put ''JThaRUo/IVJKIXJmeklVTS5SQiRYSXRSa311Wk5YJissOzIyP0QwPXc9QyRPXjcqJE88KGpOUyN2Xk1OZ0I/MWl3K2xJXVs2SG15UClKV3ZveldSSiFsJjN6TjlTQnoka3MiMUtCampJaWRKZ2NKaThuVWo4ajdIP1g5fSM4JXFmRV9NOnYoMVtLRFNxRWQkJDFrdkh1eWhSNSpwQFJGVl9JZyJN''@;'; put 'put ''M3MxJU07ZkchS1VETXdVWEcvVTUufS5RYlIzY140a2Recy8uTGpgcy5EQ29Fe0w/UilvXkI4dkFrUz1rfEA4UDMhTzhqPCQsdXRoQ0A1SXJ1dmp7K09aZEZHMFZrOXtlbm1Fd2YpcClxIyl3VztfKWY5VWUlRTBuS1lTfFpRJVBFT2NReVdvdU0lXS5OOlU6MVF6cX1YR3VsO1h3b3g1dk01SyIx''@;'; put 'put ''LHE9WDIxZTRlRW4+TTx9RkJiWGspJGV0JlZrMUlmL2BvdCgxRX5kXiNgViojbT5ONT5PJlcub0QzUTksZ1s9PmB5TlcuTl0yYmllaWEiL0EwNT5BLGw6KG5sYkA7WD1iKDFOdXspazY9Q0NXS1V2dzcmMGhEMzQwLCkjZjlfUkVDR01XM0cme1JWYjtSLlY+XjFZUm45SnllQF9JNjg/R2MqWWlq''@;'; put 'put ''T1d+XXk+cXk1OkxZVWNSKmY8WGUuMmJSWyhYRlVKP0BiMHtlRVpXaSJuQDE1WVs4YkdZRCwrL214OHpPdnBTcFF1eSZXNzhuWzc7eHk4Rl5sVGZxSHQrPCojViY0SjszfUhzZFhbdGZweDU6TGpvQTZMOzhLPmNgckNrR09FWjhScXBNX01WdClzXzlackJnMjwyWCFDNjtiVjF7WWB9XXllcX15''@;'; put 'put ''O1M3YDAzTHpGVV0oKzNxK3N2d1ZkVUdNN1k4MyFYbyZwRlMmek0leXYyVUZ1ZUhGUWNXQHdEUytdSXVRQzNBRDdGZUdTfCpubWA6cFQ/P2p5PXBTeFl3SUZjfFFRWklgVylqSiYrOHpEJEU5Q3QrIURkNiZIKiJAYGtXR0U4JX4uaWBTfGhsdWp1W2cqcCZpTiF3bSssNjpJd1c9ezk6Uz5sRzxK''@;'; put 'put ''ZmRiaWNFKDpFbUY1SndDZHJPVyFHNDVUTnJ9SV1XaXFQX1g7R0YuX11hPk0hO3N3T1AyfGRLODorRDdJOyNmOXZbO2xEYX1uMT1ZSClfNjUwWzsiX2xfY1R5KEdAI0opKjEzN0VvNXgzVSswS19WKjB7ZDo4ZmgoSUI8UFN1N0FmKEsqdSwqJmUrVFshZm4sbmFFez8vaz06Ri9+TiJtNCZfSmEx''@;'; put 'put ''OEJsdF9PWzlgVGt8fjlnb0EwQC9XNGJyI0hFSnVOeyV2cVI9P1VOcnlpL3NbNEJ7eGI4OzI/Zzo1bXlvRWJROkVwLClgdltHUEtbRzcqYykubFM2QmAiOWpQQUA6W35oSG8hWnQ5fGc3ejsoW25ZeHM5I1khfV0+ZmZZQ3R6Rl89cWpWMl99dkY6XjI8LjFpR1BATThmclBBRSZgWTNROlZ6UCFT''@;'; put 'put ''Yil1ak92O2YqN0pGZixTeVR1Uz9EJkA/eWRLeEZZVH5icSxyOlM/c0xMUGFhV2F5ZEEpTmdXS3slU1kqMG0wJXNeamIoQyp2P0QrNjNNJUN2dyNzamQ7UV1xPjx2IitxJHxlQUlWbik2YkhtRH40M3clblhueGQ7Tk1lRGhTRHZGQGx4NCtITyk2M0B2bHUvaGw+YXt1fENmcXRafVckWUQsI1Bf''@;'; put 'put ''VGwrO181fnldMEY0dkE+b2YiY1J7V2d6TWBmRUJQQkwoL2FqJCwoL1Z6SGx9ZVVtdFBDaEYlRC4hP250Jk5mSmBAfV1iaHorZCRSW0dlOCYmfHZQSU5TT3QuV0U6NTslaSolcT84YiRULiNDcGc7Yls3Z0crKHQ4PmNda1A/RURlW2I+TG4sVSVLNXYvLyROQzR7XztxLFc9QHkmTnBmeUgsRU1B''@;'; put 'put ''YktzMDRgbDZ1PCRwVS58KHgrPE5QJlBvWCRiOUh7ZXV+LGpUM2g7WnNFM2dUZjdrNm12KyFbVHhEOmdfU0I5aTw3MDpQZTZaL3pnaCRtJn5KQXpkdX1kVChzKmZ+VENBLFhJYjZRQmtGUTgycWc4YF9UTiUyQkokMmIxQmYyc31mOjVdLDcvLGYveEg2WTBFOjNEQFJVYSJGVSZyL1BfTCopKCtV''@;'; put 'put ''LmFDbVpCfUwuL3ElSUorJS8wMSlYUitmYnh1UEwkbyFjRUBWci5FZUlzWXM5MCpeYFNdWTwxbHJKPWxeVk1TSjopdlBuKGEwYk0qcTdMW1h6dXEuJFJCW1pnK1ZhbiNXTHBRQipRe1lHcipgTXt9fiRyeXtfP3h8PiZQd0QwKWAoJXA6dlQ0SCtvUjc+V2hGS0dqaG5HNUxfV31vbylnWEA2YFtD''@;'; put 'put ''cSl5UnJ+QzlCe1hRZTNIUmhVK2JJLiNkLGwqRSUxdktpOHYyJVNWditDJSFZfDhlbzkqN0ZgOiVWcCp5IS59RFQsPmIhdF93S0VNJDMwdWVYRypsb0d1WXVoKmIwP0QlUV8ofEImanZoXU9VYG9GLkIqPS5tVmdgY0lyJixaQWZOVytMOV56YSZdeytuIUw9KytlYFo5NnB1aSlEek0lYiV1ZVEm''@;'; put 'put ''JUtyMToxekQreF97WVJpKVdjU2o7S2wvQn11RkFhbENyWkVaYT90VT4qY0RDYl84JUVjcUVxKnwwLFdPWVpvKmlqRmI4azBkTX11PXcpMEs0ISZ7SGNBZzl6PVJuU0ZCIzBJWGEjKiZEZyVTbXNDYF5vL1R2ZzY7aEgkW1ZAQjEuLHRHbEJIXz9bLmJ9UV1VN2FlbVR3L1VGZz4pP21OcCRleW11''@;'; put 'put ''PlU1S3J2WlBCKDthVDE1VHU9SHtMWlQ1WGtAME09TVpUK3FLb3tdYzt9KCY7eDhQbyJzNiJ6eXNWIlo5NkI2S3JkVmgqN2wrNjBsTD58SlIuW2JyRHZxKmMyOX07MGNKZUFwYmBtNDpJUk0pTVh8YFgodE96KiZUM09XLDUwVGgqaVRKZChDOmY/V1kmKE9VQzdbcytxImF1M3ZAa1hAT08wamQ3''@;'; put 'put ''a1IuZU9acHhxND1daj5qakdjcFo0KWtHOz5tPCtbYWFXd1c8fUFHb2dIMkg7PlRgfW1VencvMTA1NWdnZH1oMjcxOVJJTSIvZSs2M2ldIyZBfVVdT2w1JlBgOTU5U0BLY1BxYmU8cD5RWHZHZ2RmP2pMfmpGRD0vaHxjfE1pMEtNMGomcV9HNlcvZD87XyM1XzM6XUdSaF5yeXMzQ0J+Z0RvPiVW''@;'; put 'put ''bEFteHhiel83MjpdYSF8bjhAYkksfSliTE9oPFhvbGZ4aixvUHx3blApb1AjIjsheHt7anZGRkhANnMwdn1OTX0hcUFFPip4P09aIVE9KCQiIk1WREtZMlpKM08xNj9MT1RQQ00hO3pdTzp1bDM9OzNaTitSJHE5S1kqRzVjQG9Ub1AsPWc0SVFESEZDTVk+WyVGampPUk1dU2I9IXBhWCpBckp2''@;'; put 'put ''aWpsPGJWOzFpR1lqN1FATm5vcnVyR1FvcCsqTFpZM1tvWisrUW01Ril1ZW9JYCVKPj9vVENoUTBfW0UwUl9FNm4sTG9OKTV9R3ltYixFJXQ8RjE9ezFob0g2Zkg3cVI+JVk9MCk1Ql5icWREZF5WMDlQVEVIPDFNaiFDPl8uN0k4ajUkKGI6bnMzWG9BPDxyVkRbVD0wMVhQRl0xbnpxaEFyJjxU''@;'; put 'put ''R3ArKW9reSYlNG8+R1RVbDAzKWoodHY0QCIrOjtRN3t5Nl5jb21ZflpyNmY3MTFHXmJpJixOUl1iYmppa3MzXXF8OCkuTEciUm90cz5RMEBJOjkpLl1uLjBORCtsUixZMGZPM0chRko3QElEcjlPWEt2YW5aNCRzJjEmZDlZOXNSaUAjZE5JfEtdK1RGTlNjT2lATEgkOHcvfHlfM2c/NnBYMT1J''@;'; put 'put ''Nj1DTFpxPTxHeElIb11ZWk1EKzNye1NGUmQ0SFElUzE0d1tCXSNNXTlMK1tNN1NkcEJfMUNxLnU0OHMyQnR+PUF3MDouX3xtYU9ASVlAZHRTY0clNF46YX5IIzhaTXQkPzBWTT13YEx3PThXTGltWkNjVklucWhrbyxTfW53ZFdFNXdARFJKPkBAW2dNaSFFMml2fnY1djQuYW5lX3V5TEh+cGYy''@;'; put 'put ''b2JmKXsobmcxSCx+Wn1aRXhTYyZ2MjF6PUE6ZDRSeEJsPldNSEgzIktSKElNI3pBJS9PYEd+TGA8KjRKeEBJIWg4dDl9dWNlWUA+fW9vYVAwS1dAbV96VHpLYU87ej8qaF8xSjEvVkB6dEFqRmt6UixLdFR0WFBeJCMpcSk+XXkibmUsPVhqXlM+SD1QeEdzUGlEbUwiQChmK1JuR2hNInZgOXM3''@;'; put 'put ''Y3lbMUNHaE03TXhqPC59T1tPWE99Qkd7L25QL2c4fTtSNWNAOEorUm1rdVBuP2BoJSZTYk9Zb0RYTSN6ITlOQ0VnOUA1KC5tTzBWMCZiPjV5eiw9NkhSRVt4e3B5UG53VWF0VDJ+fnRORy43OEc2b3B0e11ud1JdXmQoMH01KktFaUA+VWozI2k6RnZ7RmlmUFZzLlpJa1dGOC5efFhdTHRiV2BW''@;'; put 'put ''ZzBINUwmSVY8Zm9jQl1mZ2IzJiNSclVRRl9uYFhycCtNNzI2M3RiV2BTSkBOaWFbcTA7ezJOdDQ2Myw4JmJ8OVl9ISwxOE16eUEqYm52OmV8MWdzZHthdmIhKSN2N0pSdWVGIzY6RFkqRzVNJDZ5Jih3IlpMN3x1Y3hCV1BFfW1zRFY3SDtUdEk1RGkvbFlCLnNHZmYqM2M+Tm5uOm1gZiZCNiI1''@;'; put 'put ''PjVCQz9eeFRGaWFCNW9rOjsuMj5hMWliTXMxJnJAdHBsNEQxVD1SeVhyJV5dX0M1SCxTPmwkRDZDTnEzaixMVmp6ZUtRJWAqVDVCWzAlT1p4amYqVHZmN2Q0SV5mbzQ1TUA/aWghTSYwTiV4eWtZaENHRzVTMT4+czYuJTd0O1hheVY1ZG4xTSN4aWApTXBxTThbV05aIXFxWTtmXTBsTVdLUzoj''@;'; put 'put ''dSlUV0BMeUEkeGozQilmQ1hFLExWIihWd0EyR15nemdFK0dJUi5ybzNlVl5gUjcuMkMwMiglNTwuMj1OZSE5anJoIUwoUk08QltCYk1BbV5MYU98O1ZQQlZjOEhLdEs7MSIxeUFjOTx5WnI9Q2Q8eDJpYmlbVWU2Ly41NXF4JTh0XzFoLGU4TzBYbS9APU16Ql03NyMmKVQ9VXFFJFprSzk7aH10''@;'; put 'put ''YTV8ZVQhRXRbZn5nPVRBPHNHcWZgTWV0V1BmY0dvSSUhXjFWWT89bGYlb1cqO2QqN18yJHpCZVpJRT1dLix1PUxXN0doZz5kcCJnSHgpIUtySz1TUD1vTHByZ2xTZ1B5dHp4cWxwMmxGKUs4ODBWUCJhKSleYV4lQHNWS0x7eWEoMHI1dlRwMCxjP2BfdTEvWzRHPjYwZDouSChHYWdJXiI+KF1f''@;'; put 'put ''TC9WMns3P1t1UWlFR3RvbC5lW0VHQ2ZBeUhGb1VTaFlVOGdoWEhGUy9gR3t1MkRoUyIrXUY5ZndAMklZTSJuUlYyQzArNDM3aUBRMjo/ZWpxemxsLj1xOzFmZ0UoRkFOWXFaUTI7UHd3fmhDZjNpcDd5bCtJVylEJlBNd2VXblo3Z0R9YCJwTXh9NEEjemBtez5HT1I5IXNNUFFFX3Z0SnA3NVlq''@;'; put 'put ''Oyx8eClJPj9ePilYMD0iP3BER1crWjA6TnwpUEVZKTVdNlRHfCNJZnteLn0lNzNoJVMiZWB+aSI/aFBvIlhFLEEzdmMrIV9UUEpqWW9NdjMlU3ZQYFNJb3U9biUmfHFbM2xLNFk4cEV+ZS8yUXFjKElVRFVsSTJ3IlgkVjBZI3s0SXxLJFB7Lig/MUtkaixRXlN4ZTJMRDhCRTx2PXJUZWAmXkJ2''@;'; put 'put ''e1B4Im0icSpeYmxyUStZPEBlfFgiR1tMc3sjRGkmLDc/dS9NfnlZR153XnlLO2ZdRnw5YXY6anl2JnwpMGBTcTI5RHB7YC4mRSZLMnNrLEppJiVxa0h3ZHlLM21oI3Q3e2Z8MDsmOyRxO2wjajJDcixOc2x5O3tQfCpTZ0hVbW9wSFl1bks1RVkyXWRiR3Z8bSteanw4eTBELFRQSEZWI2tLYFZn''@;'; put 'put ''VTled1laZEdaP0xacjlLJjFnOV5eZDYkSSp3dk1oKXtYaCI9IUl6NTtALD1PMHQuRkVQWm96Vz8oLyp5MW9NZ09SNE5odkFSWyRmbkVeLis7Pl51YkZxNWlySXh3bDZvQyksYzEyXiV4Z1BeKFRQS0sxJD1EbSZWSCV0LGQiVTg1bilKQk5FWlNtJGZncSNmQGcvbDJvOVQzcVM7KjB8Z3pZRURu''@;'; put 'put ''ZnsjbSwzNlRtdG0sMFJfIipLPXVQN2YkJmxKMz8wOj07bER8Uyw0KFFyWCF8WVExcEs5TjA1QDVgXXV7XUMvezwsOlI8VTFmLEA+bCMlOHMuaCxnZXBYJWl9UE4kLCUwcWU1ZW8xZ0gzY0xAQmdaN2VdTnRLIzZheip5NWM7cVpsJD9kdGdnJTNfbi9xPmpKaDpFdFAhKiM2NVh9ITY1U34pbVRj''@;'; put 'put ''QDt2XUg/ZkJ6SVZNYEc/SkA7USU9KH1qVTssTzhffV5VYC9eaDhrYTZIcz5UYj8wL0A1KXJUOy8/aixDYkw1NVR5NDRtYHBoYlUkTyg7QmA3LE4/ZVh2XnVNNV0hImQsclFDd1VnYCFGNXBaWXp6KmJeeUBCUlZhWFtXalhAUUBzOU8kazVmWmtFOHZ5S2FrPjtRIyFnMz44RmZveW1QbkBdTHg5''@;'; put 'put ''X3M8OEZnVkA7KV5sUFlFOTkyLDt8bkR+IVZ+akZue3Q/b3klIztWPDoydi9wI3ZlcUpFXzs3Z1goKXc/WXEsaVs0UnJbOjZwN1gyPjxaJjNfPHZuKGN+blR8dXIseDBLRyQsITNDZUYqPUdYQis5S3Q3eEBbI2p7MmNGW3Bmb2tfRVNfKXNxQEF0QjgvdEUxNlg6PmldanojSTxwT2FleFBMTkZp''@;'; put 'put ''bm9TeCYvSVZVRVoxVks6JV5LVTdma3RCZnZtSWcvZnl1SXlZPW91QFZoYGdjRTZeNyx0RjU8O0lLVSE9L05IT0lQMXs3NE0mPDFIKCpRVTpqKX5jQVc4YW9tclVvKFZgL2ooPjtnNz1uXSEzZU4/Oj5xLyU5enMkIUFYcmRraF1GU2hILG1YZkM8NCZXSzhxbDdfSlN4Zl8iWyxtc1UoVU1EWkUs''@;'; put 'put ''WV91b0pJPCp+QjF5MCklKzB1eTo8SiJtOkJhUD47SnVrXTVITU9VZ2NAajxdbkhFUFdELi4sNXxZfFE6P3pdV3MqP3B9PU1jb0xGOEhRVFlPdVVNbl1XUWVxeTZ1JEI9cU5yZHRdJm57UGN8OERwJl9gaGB7fWliXzx2KFIsRkhVOWVfR3VmRGZ6QmNPQkcqc3w4RERofCo9OTtKVnBJS2UybmVE''@;'; put 'put ''MSt4Yi5HPFhtWWAlfD9LfCNYK3lJYittKGIqNWdVdzBGRkFSa2wvQVhxSGQ2KkJNL214L1NRYyklT0lQYSw8eiRhdllGOSJxcn1RXl8rfXAlQ01JNilSIlJRI2Yxcn4hL3ohVmNXdnpBMWVGMTw3VGR4b2NGJUZUbnNNaD59S2JxcyNRI09YUmlgOSJLZCwsT3NCZXh9PSMzUE5XdXFvKj9ncmsl''@;'; put 'put ''fV1rRWVic2NmNj51dXhRRlkibT8lWFJiRlhRdUtfaCUqJHNCX2RCbW5OKF1hO312emU3SnF9SW9pbFYuNHxzYiMmRlY8UEYyUlhvc1tvVCFdLyVjayRrZzhGMUlTdFR0RnphO3ZacEVEK1FJKmV4XkxzWjw4OlJrZV1DOiVaO2BmQCVJOl9GODliQF5PN2dmKVVveDhBTEx7L3BiejB8KkVhPVRJ''@;'; put 'put ''eFQhOjtAIWA3aUl5dStsfGF9Jjt9UTZja1taUW1FTyhUdis7RzFzPDtyRGR7dz8hYDFZMG9qV3c2TC5LZWMwXllnTG9ubHwlOyh2ak5FYDBJLy96UT9zXnshdSZxRlJ7OXk+MT9FNlZwSz8rVUw+Ul5qZkNoLGw6IVtVdFdWWXlmdEtMSkw5ck9dMHxHVndSRWJ9QSksZDNzOHpySSJJdWRnPyZH''@;'; put 'put ''b2JHclhYR0dXR11HVUNmQEY0YnBVdWh4WHVMSWBCWnx2M3w4djsxYUdmaSt1L0R0S0xqcm9XekFkUylgal1kfFgpUFFVejhtKDh3NHp7RHJoTSEibTpeQEtHeEpWUF82QGxXQWlNR1ZUQzt7bCpxUWk0RUtpYTA4PElheW1sdElOaTA6NmVfdU0wNVFjPj8+bFBsQiZOT3xVNiQ1WVljZW5EV0JC''@;'; put 'put ''KnZ8QVspbyYjSDR9Smg9NVcmIitdLzl0fEN6XjghU1J3aThRTzd5VyZfT3Q9VltFUlZrcXdEUW16ZHdXbD9iQTB2QlY+dH54MzNnZypRXTtbPyw1WyZFOVkpbWBaMVcyUEQ+JFp8VUdpNXFgTTBAciZ6XWtmJUdqdFBfYHBhQk18elJqKTtGNVEuUmIqfjxvJF80KytbRTg6Y1I5X2ciW3dKVzlp''@;'; put 'put ''aFt0RVVKZllqNlNWWiolZE9qPkRHbih3I0hNSzVLJnNMRnpDR3M4WkZNKkF7YTpUR11NXU5EcSNCbitBYDdwI0JdYGBHPyZPc21iMnVMbnYzMFd6fVFgdlN2M29PeiskNDI/KklNSDRsO1UiL3k6YCYoeVNdZ3tRYCU4PGV2M3A3cHltfTJuVjBUJTBOT3RhcWZZciVaZXQ5SHg3LyMmZEdOemox''@;'; put 'put ''QnJoRmsjZk1RYE5ZU0hMOCh5PVtOP2dISD5IRyEsWzZXSi9GKmImZE5pOlZVS2lYbzBfV2Y1dHVvZCxIOStJZGlOJiQmLjdwR1lkZSg9Q3lHK0BPU0hiUG1MfmpsYmMiQFg+ejw+XSZ0di5CO0Q2TVlNbHxdJi9EUkhiUEohYVZxJnJ5bzhIUmFWXm55OEBfL2ZNaVtGUkhiUCJoRUciUixjQnpu''@;'; put 'put ''Z2J1c15bWkYiLytbNih5PXBUJmgrMSlXWUIuVFFPeCI0S1IkKEkzflp4S18uNW5JT0NCc181V0YwJVRgUUV5TjlxPkRhYmF2SlhHWWZVelI5fFp4anM+VmdmZ3VaPSs6Z1R3ZGd6aXxbVCl9TChITXVkJmlKNSsyQk04Vlp1LytNb005Vys7V2x0JDVRS1QpJTNGTnBeS0liNjtDImFnRChGLF4o''@;'; put 'put ''S04xdUsqKGNiKUVNbShWJG5NZ2hqJEF8TE8wY3psTURrdHlRe1dyPzBtQVUkRUdIU20ieElrNHxBfDc6Qk8sWCFYK1tQN056SnVJSDh2TGBzISZNVkQmMFRMSkgrISJ2cDpjY0dfO0xYRi9bPSYrQlovK00+ZWJiOH5LPkMqTjV0PjVzWDMreCtCfn5EdDpYWThAJTtWbSo9JjxhVzhnIj9ZXUtl''@;'; put 'put ''bHtBd1FTcTUmSWlLLEFyfikqLGwlO0pEbSwjME5NUnk3b11tVm9ZSWdOREhLKChaZnJvOjw+bjQwZCpKMmtjdj98eWxoIlYiTUpsRncrQj5oLHdvVnRfbFF1S2RFaVohbTNxVSYhdjtfNVAoKDFoaDJ+Onk8RCo3QEc0YUVnPCsjcyRdNyVxe3c5cCVDdCEjYl5seDhiRjxodzEqVVZdVz9LNm9d''@;'; put 'put ''VDpvfXhfQiRNNEolN2dFY3AjflV4RUh3UipmS2BbUjk3I3xvN2Y2NT5yKTJKOGNFIjxkYkhHZFQ/Tl89cyJbITd3KFNvPHc3dlJLVFZ2KVZ3Ln0heyFIJjUlfVR7OU9tTTNGKig0K1ZHaVtAVU9LP1NrP11lXT90dTFobyVAK15vNnZzS3BoOmwuRG0pJmEqU2x4b2NVTTwmfSV8dG5mSGpfbU5r''@;'; put 'put ''e3U1cEtlOTtQMDNJPiV8YzZCYExGeU92JmZ7Y30qIU0wJjtRYCViTHMvYjdjRiFYfS54NHRNUFNWT31MeWo+KytRYDovVkxOdzxddltyVXlAYTR8fUx5WERGb3RfcU46cCZyPF8uKyJFPnZ0UllhejkuX285R2FuaHl0JEBXfTA4Rj1jPyVuc3glQCRRdX5pIWhGY1QlUCtkRW9qenU+P31sUE8o''@;'; put 'put ''d3lzUllhe0tRTmt8O19MUz00fjY+Q3s1YndlLkVGY1RyJmN2dWo2LnY/Y2pzRlQhbnEjPChBTjhRK2lMR100OWloImhQIXJzQVBITUpQfE9Wd34/YC5KJDNRe0BoW29hLHYvYiJ5cHcmVjp4eEVYVXJCRmkmfnchUyRkNz1ZQ0ZrI3llcWhBUU4jIiNNXi5LOEAiZHJGX0M0ISFFYVJefSt1M0wz''@;'; put 'put ''KXxibH57JV8sTk0vWH44PlRTdl4jQzxvKyI7Ri8kYDJ7YVQlUSJdUj5LNE8heFc9KF8mSypeVkxoUWBSXW4uOmFPM1s2T1IoNHFsZz4mN0tyQmRwOShIX3t0SltLeT5xKk9PdUNGOFkmPmNoSFpPfmsmVy9MNkpuZlZ2YDsyUjVnW15aTn4vdHdMPjhFdDpbKSVEfGcmWn0yJGJPTCplJSxwckh+''@;'; put 'put ''THlTaVZzfHRbKSg5RipMbE1xKGBSLDRzb1Q7MCYyb1s0Sz9tbWZ8KzhpTSFnVT5YZjk6e05OXy9LcWp3bDptZi9nNF5rLGdgVSNWOV9ZIm1QZG50ZylmZlNRSz16WEtVN3ptdH1jQypfIjdQL0AhIjNoXWs5NU5vREdDcjchb3Mqe2t1Ml1hTEBubnBncnEhcmN5OGkoZHhAeGFVLzZvOjkmODBa''@;'; put 'put ''K0BQfjZnSVhrNy9eQEh2JjBCTzhVaS9WXWFUaGlZTUh3UmVoJlsqMC9Tai5fQVQye0tWPDBgMl1RWWp5cDR0UnJiaU9lQ2ZQZVdVLCh6fXcrLFJhZSJpTkoiKz1xLEp0cHU0InY0b3BgdlV+MGNWRV0sIXRKdXw1TiRFOV9OW31zJnNqM3NXMX5DXjozcjZiZjQpdWomMyNkSnJILiZEWStQa15D''@;'; put 'put ''PDFoLDBNcHZiQnJYeHhFeWdYfHkwejwvZzdqdDEpe2Nvckx+V3NXV0tsMEVzW2o8a0JfdyJ6JjUhIl9+aylFNEcuc2BHLyg3ITsrYDNYJEd0S2J1PU4mUFt3XSpkckZGNXpnSClJfU1xPzhRTHtTJG9eTWZBakJOWF9iJixZY1VTY2l3QjZbSyV9PVZ8Tm1Wa3JtaENQPyU1Iyw8MTYxKVdVKUhI''@;'; put 'put ''c3NRI14jXz8pMG0/NDVXYExbaDl6YiRdJVd5T0NrPk45KlVzLyVFJjc7YnpGR1ZUPWAudX1CcGE9eV5EUShJdnJyUXkzd3lOXytbV19XWyxFdUR1fUBhPylfZ2Q+XTNEVVttSWZrMSxsU3k3LyVFcXoiUSQ7ZmgoZTsue2lwdFswKEc5UEhzQF1HZjBMSj4zYW9mM3EvZVdQP0ZvZkM7PXpxaH0w''@;'; put 'put ''eTUwVUJ1MipJfk9MPClvPFYmMG1CJXsxIVYvVUwrN11qLD5SUXhOKFNFYV5MXWE+MmRQPmN3cy87UCN9X1BwS0B7Ylo4VT4hI0x1JH0wJkksazw8Ii41I2ojJStFcSFuYG00XkBiMzhkZ0NmMV4vPCQsdyZvU1VdT2l0JHssSHApIT5kQnZ1VUVmZyplPTMmY3xtZEEpW21lUTM9OyhVfStkPiQ3''@;'; put 'put ''YlM9YDtvP1J3bUpWK3g2KEg8OXZzIz1NRiwrZF5VbE93YCNIJE9dX0szdlsvcXw8KmN0QyxTN2NoLCFTPClqIWN3Y1s1O0xEIUBbN0xmYSZQc3ZkQmhUVV47MGRVQkRWJihLNndEOnA6IyYuYCRzW1h7JUF6Vk54N3VjJDQzR3ZfUnhQJVUlJXFieWs4PWQ3flhQJUA4eD1aPHgyeihNUnhSJVQh''@;'; put 'put ''TjZFJWByOCx2VWg4Pl0hRUIwaWZNK2d9Xk9hdyFKSX5teU13Xj9mfFElMThUeFE4MnFSaF9wZGRWPX1qWGhiOGssMWdbbSs1dDpKZk49ZiFMdkFDQ2xLcmUlND5tPXwhZjJ3c3IqbT5tPyw8dmBJbFRZZXgwRF07M2lxYFlgQiR7LFBHOl5bbUhHTmF6NGRyVExLbS81bzwjd1J8O2ZkZiRANnws''@;'; put 'put ''dkI8PU9xLHVkVixnYDtZMXtnJilRVDpEfWVjVSxBcjg4SFBuMGNvJlBgME1waGIuPSFDcyxIfXxoeC5JIVdlYWlgdEcrPGZkZit1KWBjMVorTTRsUn55WDFpUUBdblh7US5NSiFoJmwqaUdeSiJ3W2h+eSVIKkt7cHZ7TF02L1BPIzQoMHc6XilxfSlAWkRRWC4pQjxWVylPYitJTiQwWVpCPGoo''@;'; put 'put ''QEJ3W0BWUFU6TkU0Pn15UEdXUSU6ZlhiJTF4aCxaM25UfjpKUzhDbkdJZENSKVdrLH5AL2QpQHFMU1BTUFIwWThfPjAmSmo5NV9gelQhQXJbR2ppK180T2RMRzFkLzZiM1QoX0EzVl8+VUc5VEVhcm1qW0BPZywsSzh3akc7cXZxO2IlempiLDx3NSkubTZKIkpxRTUyVT9yT3VqfjpPUk1eVWBO''@;'; put 'put ''VGE8SDljXWMzLitsLDhQNHBTbWY2amx0VnxdYGdTdk1DQHh8PDxybSEkcUVIR0J1bGojRCFGMSpkJGhFfUtgV2tnbzM9d35aVF1zd1RHfXhiL2RwW1AjMnlAQj94Tnoqc0Q1fXRKMjd2TmBwaDR0P0IxQkozQSFQKEZKSytgJTFfSipjd0FHbCE4ITNuUD9EUkJ7bk1WRjlLW1l+Y0MsYX0zOERL''@;'; put 'put ''LHRGSH1VTDsobFpFS0g2TzY9Ul9uS3E0cl4xPT0kQ0Y9aGhheitLWSI2dS85Iy9eMj0zQ29vOTpwOGpJInYkYUskU21aISYlMz1TR3BtITQ0KiN1YCVBeiN8TW5+Z1FZd0VkZzNWP1R7fGs5Q3c7NHEsWENXa0xuSjRteV8lbzllXVhATkt6aFErRHdKYWI7JVZiUCY3LzMjeFIwIzlFKVU2eS5w''@;'; put 'put ''ZmR5eGldaFAlcilYcjYhWHc8ZnZQdz45JlQ1UiUhM25KNEw8JW8jVD5vL0hIRXllR3ppRHhETiFNVlNQXlI8SnxyZlVVd3N2eWtAXnA7ST1YPnJqKk14ak8pMXlQUWU9WGQ2fThaYT5ZPTAyZ2R3M0k0fiJ9SyQjQHhpWTcqe1krLnZUWj9IO3JweTxMW3M5V0JMPCNMIWBCWit0SS8yLkR9XStL''@;'; put 'put ''ZSR+PFJzPylzOSE5KythcnYjSlN+YElgYl1sLjZpRSVHV0Q9XndQWXc/L19Ta350bC5UckpTTiF2ZyRAZyYzaDF7Nik2fVJOPURAeVJVbUk/TjFhWiZvM0clST8pKXpnbThpTGAyazhSUnkjQTU3QHc9eElRVlZNTjl+T0o4PWJtNXpNaF8zL0s4Py8/YkNmbHpiXm92ezYmYX1lJTwyUTwlMV56''@;'; put 'put ''bURMY08iPTkqen0vYlM8LDA2SnxWY01QfTNENWlDR21rJVorfTVZT0BqQm9hZmVLeEY9c1psQ0h4Yl48V1FbUkVCLHBANC41WDB6dlR4QjBme10+O301MT1qVEBPYCtSMC5te19VKCJWa2kybzpxVF9EKT8/U246X0lgbEVQfGlNJTorYFh4bC5dJlJZN1RUa0VfZFA7Y3BaZCp+NVdIZmM5ZDxY''@;'; put 'put ''YTM+Z2EzKH52JWI5Tm5bYTxfJilgXys/YHEhW2EzbiVvOWxYWmFSaUBeWW5hYXAmN18mPj4mbFJXaCpIOUBNelAlaTMjWl9jWW5QZWdXdSkyME8zS1QxUDlib3JWQ1siXi9QbCRMKkdvYkQzfT82TUUrPnpRKzlYKmowUVNOJF01TTclZ1s4TXFvVTVIKGA3LGN4IVtVe3owVSx+MCxEdXd7aUZM''@;'; put 'put ''RUQvQ2hjK2VbMVFOJXZ8VXpveCkqLmByMVZDQ2M/JCl9QlNtSUU0cSgyeTZiIUtpKClJd1tvRkQ4XT92W3pSOixCY2l8c0prPyR+YFUwezgsc2B1YnZJMFIjNzF7SXBDNjdAZWAzW3lGRkZAfioqXT9AfGFGZ0ZNL0IiNkNETHJxPlR3X0RrXUt3W1UodV5IU0tzbW9KSzk7OFIkOjUyNmJ5Vnw0''@;'; put 'put ''TFZ3QDNoWHFTVklBdXt5RiEoI3RkX1hTTTE+fiZDJnN6eVhTSF99O3c9S0xKSiRJd19SZXgwN2JLaEdfaitfaEZMYT5uXzxuQVNDPE5PZkg7eEcycWRwSURMaCYzOylVSnEsOUtGb113OVsyVmhDM0t5ZTUvWDpjUlB6S0RNQ2tLOENHQlN6RVM2REZ3RGtxPDhHMlRTdE1uR1lkQjZ+QlZOQTpf''@;'; put 'put ''TkxTQjJtZWIsKXUlQlA3RmFrPytyayk4Y1drQVNHTEJpLlFXa0puRG1faitfejR2M2UjWWV8UmpxdExKcSVnRUdZRltOKFVqbUFiR05gREJbTUN4XjQxbjVvdl5qITRMe0NzU0xjZUwmRkpWXixmWysmMmc6en1yeWJRW3tPeG5zSDQ/fXQue3Vaa2g0bUkvSllmSUlGPmxuZHMuUXhYYTVGal1q''@;'; put 'put ''MDtUSTR8YzU7bm80fDchXmBkUkhHWmBvTVk6S0VhKVRVY1A/eXFJRF12fHZXdWk+XXA6OVtoOFUkUUxpM1M5Ym9zZkAlLi9INHF9ejFxa28xTTg7MGJXJk9qWlRaaVlrezcyYChMMEozW0M1Rj0vTGZ9bm1BSjgiLDBNUCxNPkhKVXghZS5pdkRiaWJRIVh2InRuaSQ7PkNlVj5SfHpUd0tgYVJw''@;'; put 'put ''aGU7YiVJWD5AelEzaFBrLngjR0RXeSkxK007emNdZ0ciP3ljb0lxaHpOSChkcTBnKmh6fmo3S3F9eEFGQllpV0BkeGJWY0lNXU8qYU01XTo0TXs9fW8wfSQhKlBiJHgqSXRLUDh2S3lSZmx6bDRFfU8/aSQqeGMiUElhJUk9aTBwSytOXjxrXSV7byJ7e2BTSVlhbE9MTjY1dXl3Pkx7UnJQdXt9''@;'; put 'put ''QUUkSGpkY25XITgxRTM2TGVZSXpkUk1hSllQJTNLZjZFK3pRYEN9V0VAXlA4UGMhcnNePUBgWXdNc0MwWn1gVlhzIksoRSt2czI1MWh8YVE5W31bXSRHfV5XOEJEL1RrPCw4LFtDQ2MuW3FtQlg5Vml9a15HKGYjNCpLKzwyRXpaa1lqMXt+REd1QV89XVtyfDNFbkxmRGJ3RVc2NUxaPD0mSksh''@;'; put 'put ''fHt8XXYma0dXSWBjMy5RLCpuYDAhfE5lW29hX3dddmh8Q09EXjFxXy5Nc2dLfjJMXXw0R1dbVCwqLCxbel1Fd1tmeFE/QU9DQj0hMjBGV1U8cXgmMEAqcE13MHU/QG1NWkE5JEprJCtIcDpfM3l8aH5sLkBAUyklfHl8dj8yVEFKc3BKaVU8RC5dPiVYYSFRMXt6Uz1JcH4kQSlVSUAwYVpSXShK''@;'; put 'put ''OzFfYjJNX0oxeTFoVntlOE4/dl85YiJaUFlHWTtqNF9EZkluXVUzdCVMMjN9cXxvSkRbXXZIbzxmIWMkRjFxKS4lVTkoaTosPShjJixeLzovIjMzJnJNc3Z6UCklK1BxVlhmd3ppWUFhYShMdXk6SDh2P2pgSk9PbnszNWs8MjVoUmVvcXx+dnJ1b2lTaTU0JT9dJkp6NHFlVGohbEo4Y3hqIV9+''@;'; put 'put ''MjdsQ2FOMCQ7PjJZT3ZzNkhYOiYvLnQpZ0c6WmN4bFc1RjFEZCYpZS4qU15ZSXpwbHMzaF8kbm1+OG9scS9ST19DUTQxTmBaXyklZS5SaTRWUUt5UDRwSjBBenltZDVsZC5QTXh3aHZeKiUsXnt6Xnpde2J5eW11bzkrOkU3WmwkdFleWWk+dz9pR3VCejwiW2V4Um89VF0kalk9dS5fL0hZfWAl''@;'; put 'put ''eEhiK25TZ096QkU1djVacCRjcFNKRD9reW1UejFUX1NETWx3Z0AldV9laUBgemRRd3RNaXBWeFAsMEwvYWp3fTBZWWFUWiVZe0d6TDlpKXdldW1FSDYxMSlWenlXai80S0dkfUAjSl15dzlNQT1ATHE1JFM2Sik5al1CX0xaInE1KWwsV3BTLkUkeyxTVG91RDQ+c3B5VFtCVT5UfFE6Rz58LmB4''@;'; put 'put ''SiI/UHhjX3dUZ0twP1tbTHJdOThJS0VqS0V2KD9VMyRlZjdrPC5kIik6NDxedGhRSi9TfExDO3xXVF4qW3JMbC54Z2wkSzxfXltJTT9NSU84KnEzNTxYWj1tWjgkejhaUVVvZik3UyxWP08mOUloTSF8dk9bNWZiJTE9Kk81IWV3UCJ+KUtvVnZYSTFFJnVRI184blFhZ1JCQjEoOUF4bSUqMFBo''@;'; put 'put ''d09Jbm0+Kl9DVC5OZDdxTDw7YU04Jj0yeGNuIUcyc0UpJVhhP0JOODpPJl9NZlBoe1UjS0lzMXc0bWUzR2QubUg4LjgsUnNOazExXXM3NDA8NSRjXyZ3aSQxK3lfcmROZWxNQH5FT1ZdeH49XTFWVF9KUVVOLDcsMyZBbnsxLHMvS3NmM0BLcVZHXVAxQFBWd2RbeFUxTyFIV0Q9WSphNVtLfU5K''@;'; put 'put ''KSM9PV5VdXI8N3VMLldKY0NSLDImJDFtZlJwLFt0aWJBXklsTzciMC4lSWBVOSx4T3tlPilea1YzZiEyQzdTXUV5PGx5MSliZDcyPFUuMWEiTThkLjE1MzU0KHxebDhETSNGeVZNdz8hJEl9Wzw5YUp2bVArfSFoUnRiI09Uc3wqI29ZfXFPSDZZMERkKzw2dCw6YExZdSg1Zm4yaGo/M29IbXU/''@;'; put 'put ''QGhfUnwjZ0gjMVRFeEtEP3p6IT9FfWJrcSpSWTgkc2AsP1d5PSQ1e1Rka3BNT1YkS3JfPHtRR2Y4LHdhOFc3TDYwR3tlNz9Ee0xZdXFVJHZ6USQqUkJIKE16dG9pY2JpeSheJVtCKTFWMjBQcE1QVjt5dTdfSlYlbUxIbENmYnR2SktsLllXYHg+WEtDZkpbazM/aEdXU3lmMl1YND9JaVtzZyw5''@;'; put 'put ''RFRoN3FqKWlJWjtCRkUycVVZfEhwKEYoVXZeL3p8KUNmRGIlSnk+dWw/a1ptO0xdM2NBZ217M1F6SHMhWSpiPC5QeVR1WCZDTjFzSmlmPmJpIlRXfFpScEcqMjZgW2poc29pUT05cHFEXmRIXkxvQml0QHxzOXZ7RGA7PjFlRmp1WXYpNTdvYHohL3l0JEJ1Nik4cWRCRio1WVFEdFI4SH1BeXYo''@;'; put 'put ''PilVLnA9LnYoXlhSanFeQSQuKzNxWXslTXw/RV5pZmI5YF5qZX5RR1ZuVjMhJVM2NDhlI2BPUiR2RzZKaDQyYEwqVz03bmpUNntWQihwPSFUTHJ6I3x3Q3RNdGk1VF5ramB6NjY7eD1FYEhONj9JTlpUN19kak5aWz1NU3NRPipKbHojbndGaWtNLk9PX1ZfQXY2fG9EdnoxTUpAQ1pLPFpoVXh6''@;'; put 'put ''Q0Q2bCM/YWBmVE4jLk5nfWNeMTdANGE/dkB3fVhJTGlPcztNXXlYbzcsbjlCfXlwXlhbejpie0x5b01VXlJ3Vyl+PSRVKlM9NHVKQ2BUNXxDK18iTlIkSkFMTVY+ZzpOJV9dLz8qSF5wTlJER1hYUVk8PlZFJGIoWTs1ZWR8VS9WT1pTXilYenByMkNARGluTXw5OEIxXUpbenZRbyNhWlQiOjxY''@;'; put 'put ''S1VeejRePVNRQnZ9U18zRShaKEViUTlFWlRfJEY2WyJ7JSRifjolIVM9QlFxWF1VYGYqJTAmantWQnZCcFM8M0M9b0ssSylRRXBnJj0zOCZiZUl4VFpFZjF7c3t8JC5aODtCciNhcjNBIXVJXWxaS3NXNztVOUF7UndvYEZuPkNOTlBZIkgoZ30hOSwwSS42NUMoS19fc2c7aHBmWj8sTG5kSjM3''@;'; put 'put ''ZV1aTyE7YUBwZmM7MnpPfGY/ZTdaeyUobnlZJiNOZDxGUCFAJFFNU3FAJFRgS0wpbkAoSUQ/Nmo3a19+UERkJCRRTSQkcHpoU19JZ2c0fDpGclg1bFdRMkxzMjQqbmNwTHMyXm9AT3wpJnBzMW5mQCRYXSZGYTNHfU9ERkVBXjZyZXhidX0zU2lvNCN2OXYxPiVDTUJQJFJSYXdtaiZpVk0oV1gx''@;'; put 'put ''KDdwTUJEV3ZwRUdgKW5tRHguXTFNbH4rXXZodENIMktubjF1KTBweD4zUElhRVJPIlheTmBqQnV8ST80NC8pN0k2dGRWe2xMd2E/OndrOnNVczs2S18mXnZVXS94b1I6XTFxVWpuanU/eUQ/ZiZ9MUhvV3pARD9GLzlhZSpVbVJeQ0MycnhkN007TTovXjUwVl0iT3pWNHtMTyJEPSltRjAuSk9M''@;'; put 'put ''bW5mIjBFNTk5bFBzX3BvMyVhUkZPJXwvXT5sb3BuaSI2RkpyPV0lc21PISlMaFZsPUc9JmNzIl1sfXFoVkQkVSszMSgpTFJ6RU49eS95L0RHdF9zVU59Qzt5P0NeJDtNR0I0SUxAfSVea00qMmgzZndqQkNqfWdAXSZnVGAuKkZVdXNjLnR4MjFKY0NTMD5veElkVE8oZUxlPjUwMWxvcWBjcDNE''@;'; put 'put ''KjI/KG1XViVtaWtANFMoLG5PW2hUUiJUeG0icnxJcHY6SjV2VDp8K35YPVhxS2N8UHg6TGU9ZCljVG84RGpEaWBaUEcqcEJkNCl8a1VPNCtDTkcwbTBXOHg9byMjeG41OVBDezNwJiVDZXE4dSx9WG0/Zl9xPDViIj1CTzRzS1FwfS5tbEwrXiw9OyhoN15keWokaiZpfTEicndUNUI5OyksSmY8''@;'; put 'put ''YWIpPzs4PyQ6NHZVKEdDV3Z6e28hTjpNSDozKlBeQVNEI0xZSSJSLk5WRjJdSSw4dzJ8IkY1VilPIkZXV1txKHdqd2RjUDdrdGVWcmAzTjpCISJ8dFNZUyo4aHJzcVlUXl0mdF1qdnhYQnMsMlhfXiZwcWB2VDJbS3klVlpfTmxPSDYuZShtMEhqcTU3WzVGZDsqQ0U5V3VPeyk+ZXJdQ0RHXTwj''@;'; put 'put ''WyVib1YqWS5eQzNRVHlzTXNVUTVPZkksP0J0YEpgQUBaJG1sOS86Nj5nSGZaSHczWXZOO3gweSkpJWFJLGllaGplRyw1WHQ1JjtNNUBGKClrY1M8SiFWJSVEQV1YZSI8MT5ANShnVV9AZ0xKOnV0JmRNXTJZdSQsVXBvR1ZYcGRnKl4mbGQjbm9kK30pa2wmJHl8VEFNXTc4Sz5kV117Rj5kbj9p''@;'; put 'put ''dC8vMktTejFacWM0RFliSFdDKXIrVUdWdVMraXZqWjVPIzAmTCVLKiYzUiMzcEgwfDRIVCQzdWVjeFo1KGBXMihgV0oiUGJBeDFtbVBqRmRJVWQ1STVIVSp6d1k5ezMkTzxhSGcudVYzTTRtYnF1RW9Fbj9zPzZ7dUEkU0hNan0mZ2kuYzw2aXU8OXopVXB8SlldXWAveD46SlBaTS5vdDlEPnpu''@;'; put 'put ''PlIhcSYlOlMxb3Qsb2E/OmxWayQ2YihpKVFQdz8sRWZ7R089fGNWUEpUdjE9aHM1LHVnZ3Q4aXFCYFdfLjFvZG93TUhyMVBtWj10XVo/dkpzaWY8cWhjLHBtSz5peWBQVUdzNTtjdWwkQ1sxR1k7Jj8kWCYkRDNyVSt1LiZTTSomdypeaUY1eU5eej8/alZtOHQoRis+VVVqbkQ/ZyI6cWldMjdP''@;'; put 'put ''SGRqU3suKEwyRXxCW3M/QFpRX3VgJm4kRGE0IT9rNG1MP2hlNSJAJkQvZUhEKik9ZEtDKnt5Q0Y/ezNNe0tXX3tHL2hfMFt4RlM+ODF8QFldV35ALGFCeF9pRmljI21BQUh0Pk0vbFtgX0AkdElqNVBYdmZBJEo7IlVMMWFASkh0bXBLYV9oVzRtR3Mpe3lseWA3W2ZCTVhGd0Q4Nj1WVVVGRiI9''@;'; put 'put ''enZWZzRMQEtGaXFvVCMiWSYwIygrQVp8SmEyfVhER3l+aXFgNCNfaCxMP2hnQlIrJFUxclplKH55ZE9Dd1tgM1drT2ljKyFOfFFDOy40JDlRZ1BINCFpWSo2SU9CNVJJXzo1aEB9eypVUlRmeHhsXiN9dTVpbnJzaiZ8UTRGeDZ5cj0zaFJvPX42QFYofHNnVnd9Oyp+b30kSjY9QU50cHUuSWhd''@;'; put 'put ''P302QlNQLms1fTNwfUZ4NEd8LiFye1E9SHZyJC9GfEJbe25NcjhlYnFSRj5Ncns0PShuTzVlfkx5cHRYZTBLMzFpTGBiTFNmMWQ4L29QOUsvSjk6YylLJW4mX2c+MzVYWFBiMmo0MVRzcGAoXz1KUDg7N0I/di47MyFycV9GclAuJl5ObXh4dWRMU1Q1ZXQyNXA+KEwvX2BqR2FfT3wqKX0vY0x1''@;'; put 'put ''VnNHdWp1dC5AVVM+TDQpTnBJIUtMUzR+RzJ6PmdvNSt+YnQuOSpzKX4qeV1GL19oWzNzfCl9fC5faHZeTm1YaypueXhDTD9uUGB7bjQ1fkR6LnZzeHh0ZDR+Z281VS4qT0ZJekhSP34jczlMVlM1ajReYFIvbVQ6VnF1ISxVZDlRfF1Lb1YqVlo1IzVfSi5WKUlfKjMrJW44dkteT2hWTF1ESnEy''@;'; put 'put ''N0NWNTBAJUxdcWU9Xj12bmx3djReQkFHTHR9TU4pUmo9VG5AeSMvdWwmbn51MGciVGIuVlFaeTMsdF1xZVFxV1ZtOSZkImp3dmFIcXQ5Y04qNjFTLkI3Tm9OJDIqRkJMUmI/PEhGOlc4dTFUfWs+VFlyQ1k6I3NnU1RMS0teQG1BTEBvVnh9R2BUZV5OKjl4PW5TYjJYOWE8aXh4N0FQNEhUb0Uz''@;'; put 'put ''YUBlYGF3I2k5THc5SlAuUWVvc3lafC4rJjMiJkJTJDZhM3ExTkNtSH5SMzEuKkh1NlB6TWVSbjlAXmAwNW96IUMjQjZybCJvME4kbUMkYjVAYDMvREpIMDI9enpBTV8hdVAvNXJTKW19blZUMSshTmBdRl4jIXQhUyZNWmJhOSxFIXI8fVVyNjkxLGEuJndwcChVSVskcUBAJFB3d0ReRnFLMCNq''@;'; put 'put ''PD9BZTxzKWZQUWVbVFd3e3FFRHFEVH1oOT9bV1lCLmcxVHJ3dCZbJiVNJUxoZURFL3U7NiR3dlVxOjMvVXJ4dUhkZ3F4NTZDd1FQZSphaXVTLzxtNURmX1lMKUJWdjs2M2NsfFE1VVhoMi8kLEAhSTlBd1t3IU8wRUtefn1bITNeMikhQStdbyVjLnN5JSMqNyNILl0jKkUocGVCb1pULzxUWmN3''@;'; put 'put ''JD90ZzlZJnBxZ153ZTNAe2gsZiM7KTRQJTdxZEwoNTs0KExeN24kSEI6JmkyKXAqcTN5bXU+QX4lPmYwdkc8VlNbPzpjTiteSDpfZm5FfmdZQSZpcWpkSlFBYV4oUT06SCU4SG5PMT5VbCFvaT4/Z0FgMj00VjIpUXFZcjpINSZLfE5kVntrKVZyZiZLSEZeUnt+KGo+aFlJPFJEfVsoPWMpZ0tk''@;'; put 'put ''eW9kJlFtdzc4Wl1oMHJiNU1ld2NGSmp2O0pFJnJKIWU+XkdTPGQpX2daJEx5WzBMKGQ4Kzsib2lRcyVSakJ9WVpUc2MqQG5KKy9ZRHpMWjVWaVg3KGkwZSl+bEY8OzgjYStRSSgoeks9TmJiJERTT2glLkQqYDFEJVdGZGtgYStyKX1rKCxQRkMyakEhcnt8MXw3MiMhOUh8W25Ufk9oXSQ4LnJR''@;'; put 'put ''dmdnMm1nIXpsTEMzdERSY3x6N1E2L2xfeTJfZzdVNT17MGwmZzE0XTd5MEBtelB3JjJGTFRNb1VBdzhHanlDbUc3UShsalJpeWgrYyViMHo/RUZmeThgVih1KDZsZGRiQnBhZyJ0aWBGdmBxLkswclp3VG5kT3I6Pk5CYz5RNE40fmphfGZrMzsjXVNfNnZVdX1FZUEwNHp6UEdGJWpDc2YxLHMs''@;'; put 'put ''JipHTDE0Tj0rVElLSVR4WzxuOEomLCFscntib2c9M1J0KUxxdUZsMSYwbURzcyRoMGR6QWFhT1g2cDBiSnhyfkxzTjdjblNGNkliY0hjfDN8cWhtYWpMTiFIXXZjTmFbK2AxMFlgISVDO3dTNkZDNndXaEksRHAiKjczX0o3NH4mbypSPG5lbzVLMzNLWSY0PF5nfis0bjVibzNNNDh3JkBHVmlr''@;'; put 'put ''T1pBSmh6cUxAbEFsaTdIUCs7WWdQYV1GPkZiYDlnbkhAMi9GeVFJRT9HSWZ4UyhGPilFdD19PUk4eTEqRzg8LCZZRW9JXjhZaXgzISQsPC8pVUBEaEtdT05seUgxJHIuTEdeRTxIRk9xKjZhOXpvTmhLd3BzYkhmKCpgWl0zam58ITRRN2NCYj5AaVI+SERTOk5qciI1V2lOUn5Kang8PHhtc15M''@;'; put 'put ''NC85RGh8Nl81fT13eCNALl1beCIsPCwsZU9ob04uJXtbelt8eVJ2VyV9PHtbfU5eZ1pYTUc3WSopTHttZDgqXiFISndbOWE5KT5bYF17N30pWk1MZjUxKV56OWJpJExhMEYhVjcoOSNROmMsYEs4Sj5MJW1kRUw1TlVeP2RjKHdDIXxCMUc/bnMreDJMPTk4KlEhZjFLbThFTiV2YVR9ISVlXix+''@;'; put 'put ''PVJgMXtsbS84bG0vY3w9WDFKREkuW0w7YjVAKVBoSnhiRlFUMElkPWdhQF45YnoyPmNkI01qPHNdbkhgNUk9NmRSMnNCcGozKzsxY097bTN3QzE4ITZwIjcuKDkhNkMoO2xWI30vLiw2dHtlQkhFR3RdInxjZ0Z3TkYkKE1XK1lvKjshYXNUcykkcntZT2I8TFBUVjBtKT02SmNlSUw2OSw9e2sq''@;'; put 'put ''SCJFbz0/X0F5PWg1PTt3YEM7KSlxMCkmUWh7S1FeZjwza31ebEUhVFVHQHEqSnZBRDcrIV9efV4vPmJaS2dlRDFxcncsenthayNmYWlOUjBJPTtQI3s/c1VAODY1fSVZZndRIm1CKEcqZE4yJDAmPmcxPixadj4oMEVudVNELm0hb112W1cqOFV+a2xnZHBvIzppfj1MbnMkdV5tZGRISjFaNlkx''@;'; put 'put ''RTEsTW1vY280dVI+WHhQQm1vN2JMNz9ATmB2NWd3JE14Y0tfdFl8NXFONlFwNyJMMlFDM1BuSFAmNzdwT2hhdk1gTDFARUhhTmhsZCw0UXAxZVUlTmB4amhgTjBqeDJ7SkBuclN4akRzPXg+dzhZXllhQXF0eVZWd1UqMmlpT3hyRiM5eXZvJVQ5MGB4NH0pO087eVU8OX1DVSJoYVB4VXs0YEs5''@;'; put 'put ''V2lgezQickpAUUR8R1tdMj9qWFg1ZjpKZEdDOC9QJldPeSl2X3VjSHY8X05QWk1nZTBHYEg/OnE7YDVzQlUkcywuNUVmUysjTlRiRGJgRkdEPEQuIipAUDk5WFhNVVEodGYvc0w2WHZYWnZfdVRPPSh1Pj9MQ11uWFlNZlBsZE5Sai9GRERhXWhfW1VEdk9vZHh9KXhANylwQUxAezJnaEpTRGE+''@;'; put 'put ''eSRpT0lNPXErUkNdIkNFNEJ5MH1dL0xiXmZQPm08WndLX0V6NDEkcUhtKzBkT1VSWnMzX1EmbWRVS3pZV1pWXkUmJGpzcDRTbj14d1oocjZ4M0Iwe3JKIVkrWSt3JDFnVSEzPTcwZyFWPXFCPH07L1ZJQ0lkX1Eld1haTXkzbCQkW2JAajg8QDdKeyQwbTxJTU9wOiJNS3YwQEUqc3F2eltLQ0k7''@;'; put 'put ''U1lZd0RXY21ld1h3eltLU0k7UzJlb0ZITzpAemw2L0VpbV9OM2I7XlB6TmgpalZwI2Z9ZSxmeUJHdUhsTThmaS9zOl8rUXEsU1EkaW1gSyRiI3ciWy80SUBCV2chZSZYVHxGRGR1JC5LdmFrWWJRQTl6LExlaTlfSF47dTwhKXRJdSxqcl44ays7c1BxX3lTVzpaND5uSyt+SE9IJGxMPyp0UTBQ''@;'; put 'put ''RzZEcnoqQ1FvYVUrPFlqQ3hHcUIhfCxuZTgpInk6Xi8ucSUrJU1xZFY9K3tVUnQ6MkxiKFdKWn1fb2AqQ2NZaiZhKzpCX1ZiLzwrZ2hiKXBDVSg9Ql9OPnUhLFlgT1p2ZDE3fm01RH1SViNIJVM1SFQ2OTNhUFUhXS9+aUBNWF89S3hofkpWfW9rLDMpM3JiVV1xa1p4TCp6VXhqUGhkb1hTXS5i''@;'; put 'put ''fHJVYipyMH1VOGFzNU1FMF4iV31YeVlqMjZjSVdoYil4MEtILEh3KS8iLlo+MGExZWU6aStiZjghKW9VKGo6RVpCNm1SZSkqSiFxfkpXWi5wTD03R0EpP3FhLG8lMWkqJG9Db0RWK3UuMzNBNkAlMlI9LER6dnoubUFdUkQwWFt0bkJJMFdWNWJvO0pbRTZuUVs7LiZMdjJWcHEkNXd+Qip6NHRP''@;'; put 'put ''eHVUcmN3PT11KzJQJEA2OCI3WCVmeyw8OVZnOnltKWk3PGZ5PiVoMz9FQF1YSno5dWlYJmpMZ0NuTk1fa25eOF9ILzNLMS8oOyZ+diExITlmRjN2ZTIyIylMYT4ibXxuOCgoUzRLRnchOFBHeXJxVT9PUCUudCYydj9jQEJnbFltUy54NUl1dV4lLlM+IztTa09pXkpkY0pBMGJeWj1BQH5vRVNE''@;'; put 'put ''JH5yOEcyRkRmVFA/NDYrcHBAXyk8aGYxdltqKWU8SHpPXWtWKDRSSCQlN3FkbDFhVChxbGJEPH5QNlJEY2JFYyt4KXdYKFBHUiNIVXpDXjQsUSZ1Y3RuMHxEViJAS3hyVSVNc3Ewd3p0MWQjUEEwPm57dVMpQ0RndE9ZU0ZpOXgkbFAuNz5nWTBEZHVFTiY+Sik2eXhLRilIcH5UKzRefTJEOCZE''@;'; put 'put ''c1pia1s7dDYyPEE4dF1eTGV3aXksKmdxYFEhSzA0YEZXdW4mUTBwIXwwVDp7Wz5PPlpKWztpRSFYLHhFXmlQaS9IY28xV2ReQ1N0RlZaTnlEUT5YTHhdLyRRIypdXThhNTk3NH5wKjJAMWxHOD5bTnd7cHFBNUdQNURNfStbTj9yL300VitHSV5ZPXVDPVY4WlRUeVdsZmhpVE56O0F3Lzh8Lm1i''@;'; put 'put ''QGZkekBAa34jKXNIOlNhKWkiT0R8NnNXYXlkcXRKVCspNGl0L1Iub355WVZ9N15rVHMpIUxsSC5wT189Zjo1TzVTKXMpLChZRChVXlU+a0Jte29HPCwhT35bWjcrK1R4TztqTHRWQDN2aHkqSkFhQ2dIWW1XWUc9SVMmSUw1LiVfZykzazZaQEUxXzxIWHN5RmNOTW0jNXcuQUAvTVQmZS9hRn5H''@;'; put 'put ''VnVsaXFnSUh1T2JNPlk4Wk4qP1tBaUh3MyJgIjY8SmwoM203LnNTc3h7LHtXPnlefXJtPyg2S2FARW8vXk9EW1pFVUZ8WjlyNDhafWEhdGJvPVkhXWNSUmQyVWFWPDNuJTN6UFdGJWp0VDV4YHdwS2RAPEVANUUzVGZSZz12Jm1yN1tFN2RUaVAvIl1LQCJKQFRGcX0ybkdINUQ8Vmk8OU50MHJ2''@;'; put 'put ''UXtPJWB5UXZiVFdAMDl8clVXQ1toYEpAVCZeOi8rJkpxSXp2XUJHIj81QDcpSzNWdlgkM1UmSj0zUE53T3J2IWI4Vjc3T0h3W3JVaEZ4OnxvSCwsRVhKMilBYVFecU5hMVBmcTo5eGQzM3h1MFc+YHEoWyx1V30wUUx4XVVOW1RSSTUoMHtxNjl8bWZAUHNHfWosKTZJPTJ8YmY1NUpyVFNURzAr''@;'; put 'put ''dFVlWTtJSkFAUWlEdigrdThGUU9nY20hMTVHRXQ2UXREdGR8RlFpaiFaUjAqNj55bVJBTUNBQUFBQUFBQUEkQU5KIntKdGZyR2w1SH1OYGpCaTh7SmF+NDpgTCglJF9JZENJTlZEZGZfZWlULmFHWjIycH53T3NYODdmQ0NtV2NOa0dhOFIvOW5FWHJlND56dCYlbCQ2ZltiLlhLOWkuYDdneHZi''@;'; put 'put ''SEtUXyZpVHlXV2BpU1s0bVNpWUNtYW03YU55fXk/SE4wJj94NDtnV1Flfm9dc3xrSlZsbTdRaCpaaVpTPlM5K1ZwTXxQUFpLV2wkVzFjaiIsYVImJk9NKjJ7P2Q0YkBMeGA6W2ZJOEJte0QzfFUrMiFdTkpXalZhaEI2NmA5cWxjIU1VW2tIT1g5JjNZa0AkeiJbaUc4cVE+ZTtrOXJTWXIrRFlZ''@;'; put 'put ''Py8pMURaZFUyPj1SKWUjM3hUQzo8KCpkRUJoaUBKPltmP195a1ozJjhnVyplXXIxXyRPYmZLL0BCMkZtSGJrd2hNYng1X0AyI3NNK2hybUdwYGIjZmN+MVYyb2FxK3ZYcVdFUWZEXnVKU3Fxd2VSLHNXcjJMNmYoRXF0S3thKjoqd3gjIno5ZEFYInZ7fEBNb35laiJffT5HV29RK093dTRrNiVk''@;'; put 'put ''MGNsJjNASihvfU9VeG97Wzh6R3s+TmZjbCt2W2tZMm9Ve0BQV0p4VT9wL0cyWUJfNFhtTmZdUyJxPThRSkdtMDFZQW1oa2kjPyFMKSEiTXBMPEBbbTo4RzN7YjRSfVZjWTQ4K3MpI2EkU3RBOmcsaV4jX1tPUUs1VEZ7NHN8TltqaXpvdEEvTSFNQkRnXSpmZTpDbzd8PEJwUT48Xn10ckZxYDYq''@;'; put 'put ''QCtwUTh9a0M7UTo8S3kucG9eKUt5JXNKaiwiYVgxOVgxKV5Ad2owS3RTXSVXKVhmIWZRQGF5djl9Lzt1PmxfISpHWyRQSDVCVn0hTmZyREgsMGIvJEZTeElfLGA2RUtyU2FOK2ZGSnxGODVQbnIvZEJbKVkuYzRVd1ZyRFRrdSJCI25CX2J4ZUdEMFBIZW8mcF1zVX5TXit7ZEZGTSFHMjJqeCop''@;'; put 'put ''Ym94QmpaUERefGxLIl1MZkFYWFgkX2tLTXxqbEAjaSorQTVCcH0+M049bSV6NXV2cmQpMXdUKm5ZaE9ZISUyaW4pVjdda3xXcldFLCFWSkhuM0lEPzppWHp6JF8wa0gzVW13cio2S0RkfiVbLilwRjVdWShHVSR1XX0uOk9jWWFsMnxNVitOVzA8XjIzOHpwUERYajpFJEt1JkwwQiUvbzU2QmFC''@;'; put 'put ''LH0yQTBnYnFFPWN7QE0yS1o0SkdsejxLI3ZEP1FDUEUrVms7WHMhP3B9InwlJEhoeCN5WWIsXnE+LmBJQiJUNiMwZi5qdWtpTzdEdlkwRWNsQGhtTnI4W1R+d1Z4I1dzd0M8ey9eX354azV7UGR5SjozRW81S1RlSWttQXtNNF88fWNMfTxudCl2WGs2WDJ3WVslaG40ZEZaUn1DJl9WQDRXQCpS''@;'; put 'put ''U0lkUT56WzJbMEMzfGxIbkpbdj1Fbj9yLGxLMUFrb1c8Q31zOCV7eD5nJH0pO0NoMl94MVhuQ1JoZXN2c0xHYlh0JksiL2JpLksheVovbnRnImtlNkMhMUJhaHtEIj1xIzFUe2p7WVZIYjgraTlRQHZ7OzZgYUldYlBDbnQvdlZENXxnK2E5RXs4MD5sQSoqVlZ2SXhfLFlbO3UrTFFbd1Z1Lyp3''@;'; put 'put ''TVIwQF9gW0J2MEAmSG99UT9dQ25gcWxrYjd4Tjg9Vyg0Y1FfIi92I1NxaShTUzokOSZKPzJQQzU/QFg9Pl1KQ2N6YnxvOzFLc2NYL1h5fiElI2h0eTQmP2IrQT9XR0l9IUg4bkZeLCMoY05mMHU3Um1KVilCR05qOTtwSSYjI1QxUncrZ0drfVlzdUt9REtIVDVAKFluTiVxKXNyamc/cGl9Tylb''@;'; put 'put ''USJrXktDdU9rSWZBN0VHXlJhP3hBWn5xMXlIPio0Vzt2aG1AY30/YVNBbU4lJlBtQmY0VnAmTSx+bT0oWzVsMWlNKlprdlImSCo4RDg3MnNpMXBtOUZIPC8sdVlmTmcjbjxWOVhyO1kjSnxQZ3FFazJ9KHNdQ005TFZLImxQT0lGbllSJSRINjMsVUlsfUouZSolLF1zInt7PmRnWi9oRSxhYHhh''@;'; put 'put ''Rikse0JrIV1NRVVmam08ezF4al1fdEJMV0ZEPFA6cFgjdDUxS2Q3WzFffTVjdzByZUhrZjQ1WV5dQ2JeeExfNX1oNUZTM31mM3BTVyR6VHxyJU0+LzhJPEl0V2YxfGYuWC5oZjN5LnVpX1J0ensub2xFTy84X0JAYiZJYXhRLi9YXi5BSmh3RDdOKXRJZVNDYl0xWntSTUAqSllPWSY7fXA/cSQ8''@;'; put 'put ''Wz80fWdtKWwyX3NUSUE8TlhxajRMQ3lpImAheWErL2ZTbkwoUClockV8ci4pZ0pTKHhJd04jPXF4O1JhbVlQLmMuUF9sOTZ3OXx6aE5ob1g+NUY1P3hEIyN0U3ZmYXw4ZW1aRzM3YzgmMl8zP31afj9ANTN0c01zaH0+RnE1OnAsd1hNKiI7U15nR3s2RnIxbEE/TmA2amk+QXVaVGY0bj9oOixH''@;'; put 'put ''P1QvNEdocXFNI0U+Q1tZR2ReYTJhO0lzRSU2bzAoYD13byk4QE4oYzh2dnU9MUQ8PS9aNj9TdHc0JlFDWHAjSiJRd1d5dFQyYmElO0p6ciNAandbS2Q5XlojQCVaQnFefHNyOHx0RXAlWDpCYjZwT2kqP2hGO0E4Wnd+bFVPazx8ZWNEMz4+SU53IjolUWdAbWhQKStWY3xkUCthYCRyfXA2enRO''@;'; put 'put ''aWdqbHR2KHwvRDRvYSh0U0RGTSxSeU1BNW1EQX1YXkhGOHZuZHhmRGArQE8vOGQ8O1VAWHwwdGBJZV05OVt+U2Ave1tQbiJBNGVUWTJdRyUvc2ozaTRSX1ZMaFdxRUdddyNQWyFmVFlHUyNyI2Jdem5BRzYhRGJ6Rio6c1YvVkpyQkpIfixIIkY3O34vems5c1RvPyxRPn5BI3ZHbUNQZl51RVYu''@;'; put 'put ''Lnw8clZrNmdXTSZGVT9mJnd8Oyl5eEpEYG93fTNEZFBAI1JYSiRhJH4sbVokQjlOK05pfmpIcz9wIiw9U0tOaTQxTHdbYSEydipRYU9MOEVeVmxpWDtSJnw3eiYyWW1ERSEwcn5jfDB2KE5uaW8ocDdWeWc6MmRySW5wdFpFUU0+PnJEdyopRl0wbTdiZ24/TCU0JlVWcitBV0NVLEt3bGNHcSth''@;'; put 'put ''b0EvLyM0cCNDTEhwfi9GcG9kVEN7Wk48anI4RmVtU20pZGw4TVpZMChSIU8wNU8iQX46akNIK0lUNWY/Tjo7VjU7bE9fflpAVit6flEpT3cxUFZ2WUFWYCNtXyZRb3FyRC5dMnEvWyZAYHU9Mmt0bkZaJiU2UUJFUn5kPShtVjd+TWxsP01ySzpteVZdT1A/Qm5bMG1SPWFOSG1Aej4hOnozQy9+''@;'; put 'put ''XzAmZnwydEFfQHJbLz56Y3ojcV8+Y357SnBjWD5KIk1gaDxTTmFIQnZSJCEyVCoySGRLPGR0MWBOLGBZT0NfLGZKSWxeUD84MEgjWHk2RntkJWpFXUxRZ1BRTFNIYUViUypAWVEkRz5WSFNLZi5TWndMTE0odCswQjNvSHtrMW1zfis4VFQ8diNBLDFEbGNHODFbL1NQMypKMFcmNS9iRlMmSH5L''@;'; put 'put ''amglX0BbInpSWTljNTdSREQrSStTVSNQby9+fDBRTHFzdSJNTkhHVVMmWnhHXWpmXyN1O2t7YUpsSFUiRF8zdV1WQCsvIkc/c1JSLjYzbnx1YjU2Z1BaI3Q2MlR0byNkMCtvcS9mKFprWEQ0bzhHL1l2c2QvYGhSdVlsYiRDVz1kdWYqdD5sTyslSCZoaHhHXkpacEx4TGtzfCYxQSFwPXhbaXxh''@;'; put 'put ''IWRBalI5P2V4SltfRWQ3NHRmbm4/eUQpcktqNVouQlF3Om44R3psdXFHdClvPntmdz4ofSE0aCx9MUIhLnxQdmQ3RE48bS4pakdCZXZYcnJOXTppQXFgfnYvVS9nZjkhczNeVFhCdFc2SEh0aVBPYHMmJSQufGFaI31gT00qdWgsX2pdazFhLl9yTWx5MntYWjQ7Uy4jRjIoQDMrUkc2bkJXJmk+''@;'; put 'put ''PjM2OSx3K0NOW0wuS0s8RzFkV15fVDs9clY7ZXkzYWhsLyJSPyZFPjxDUE8hKnwkTiJxQl1WUCV4N0V8Y0lYSz06enlWdy5sOUlzJWslSW9YR2hwSEwweXhyeXY7U0ZAKks0SjtzNiNATk5wX3tzMTEiJWVQa1t6Tmg6RC9kL2VLMTdQVj9CVSZaUD9Qd0toZVMkW3wrLFZjNEN8X2RgVnZROCkl''@;'; put 'put ''YVNlK35LKXxYPXBCeiN3Z0QkQHkqcmhDbVpKOEpKIXZdUX1pfnJ1fmtlamMhXSRnNldjRUE2L300PX1jRCp9JCtLbz4vVitCa3xQfShMZEJtaTw+KFgqMCRPWXM1ZkJeUX0jWGgyPC5+cnBAZ3BhaF1BJEtrSmx9RiR7X30hR0UlXWEqTipxVVNlXTU0cHdAU3tWLF4kMjZEdy9naURgTjxtZGor''@;'; put 'put ''N1J+bURGdW5ic0lkMWdKaVIiR20yez5ib2U/SzcpaXA6akF6JjY+VGJgQWxoOFVZcj8oOnFlfXQpK3Jad1clSEcuXkZlQSg/QSNqT091Kl5tZ0JHUVJtKyFlODN5V1V5Vk9OaismM0Y1I0dWSmpkYXNmMElUVFdYal9hQmkza0IiZ3BseHchbVtjOCRFN0oielAvRlIpZz5HVE4sXjxYRXY4NkZ5''@;'; put 'put ''SU9ZaDpOeChUfUNJak44JEpke3k1blZdY1pCXVpPQTUuPktZUy46YCtlWHoqeVFLdFVbWnhGVz5RNjRnT0Y1XilQNmNNbDNyUXR9Mk0ldHpXZzYoeixDaW0iTVRRIjx1b0guQmtGeXVabTJDP11NSnVtM3g+Q013MyJIL2lNJDUuL3hlVSleMzNpeXhmJkJHQDAoVSJ4ZStXOyFmeWdzUlokdiZV''@;'; put 'put ''MVpIJGBUYTglc0tpY3hkd3k7Zk53YVRwYC9NbGs1ZD17SGhYIWx3S2JScV4kK3YrX3tANWJ9V0JIV0NFYXJJUUM9fV5fdCNiaFE3STc6VHRBVHVKWjEqRyJLdikkcm0id3UoQFckVk1pZVQ4KTo8KGl8OnBoOCtkblFxTlVaZiZ2L29Fbmh7VlcpLEpMbyhNYiMqRyRnREBJKWw/dXIuOiwwNCZ4''@;'; put 'put ''e0FkfnsoVHM2VT4oVSlVbkRwbWtIJCsjfD9PKmN8SEklb0diPWU4OWFTfSxSelg+ZnZtU35EcS5QQlsmT2lDYVdFKzZOaT5HVnpeSDl6JjpiMXs9fkxOWj42VlZ7Sip0QUNvYCx1cSolWDdpPW45UEpYUjNXRClyYDopUV89WSgjRmpFbFFeX0FwPE8iX2ZHOyVuQnloSUVvV3hNVGptZDNEZSgl''@;'; put 'put ''KXtmJUg6NTc6VVVKYV1tR01LNU9lcH0wUjkqaEtIZWNDQGpqP3JLYUxfS2F1UHMwbzxxPlpPMy5jfFl+R0wqN0pyPWYxRFUxcHZ9XzVrRE4sOFlgcm9ie0F2R19KcGtabkJpWG9DRD9hbE0jOSpPQHpUbkFUNjIuaEshW2VTTnxnTjJKdmhSL0wmMjhXPTBlZWl6aDdKIzBKPDF+amIqaG05OWJK''@;'; put 'put ''QjY4KlhdSTY1Ojd8SU9RcWtsZUBSb1FwcTx4ejVKUChzQiZ9Y2lNfWs1KFhjPFdmSCtHfFMwNzk0YWBzODteOWB1RkhMN0YhUFZiZjt1L2xXVzFER0NtRSJVUHxNPWQhdUttWG8uWD9OUkVeUHBLOEBkOSVTZkR2YTE6dilhfnJ2dnVweDJ8TWBaQUBobWc6I1JnOyZiQ1V1e2o+LCN5NmVjfCwr''@;'; put 'put ''USptX08odERrZClRSl5XKXUpKWMveE5gWTB6QXNzRnNTMnJLNFY4fVQ3Il5UN053aXkkVT9yXl9XQUZ3Ri5AKXJvOz5GSl0icnhGZFtqcGtrMS4sUzw+RSR9JTNaekshNCRXPG5+b3RlNkBqc0VCMWN9KEFQa2I2SHU+YGQiLHJzXzxrckI/VjVoLmhDdy8/RWNSWiRoeGQzQEE1KiJXVlI4U2Va''@;'; put 'put ''PU1QXWJbTlNFRU5TU1taMU1ddGxwV1ltNCx9MEk8ZDcqWl9AS0QjRHFgT2BTS2pQIXpZVCEvQDYpYGU5cGh6MEJmM2lANjkxVXkuRCJhPGY5WFRIaFRBSX4iIjdUJHNWSzJ7IkBYXVs1PGBEUU9HYS5ZVzt8STJOezNJIV0qeV51R3gpJUxsXmNye00zdiN+ejIuUDBGOE9+SFBqJm8kVXAyY1Qm''@;'; put 'put ''QE1UVV9wVDlfIk8uZ0ZRTDokYjRROXBOb1ROaVJzcl8+SXN6XXJdV30pcW93PT4hQ0Bhdk1oNlclJVokWDUwY0dbfmdHa1VYRVQ5dzVNZVcuSUQkOnUqKXF2cztNbTFPT09LLz1Rem9DbzlJUnF5Qy4rK3tqT2VMYVsrQS90TlRJKylXbUB5I24lW1M4T28mU2I0Z21SNyQiSH1vNyUwYGVqO3Bu''@;'; put 'put ''bjVCWDlJbzYqLzh6U0N6emhPaFNJM3BTUjZmd11+eDIuSjBfQX4jTShhK009XWE5YEtSMTQmNn0pNnBNdWV+UzJOSGQhQDVrMjdCOzxeX1FXPEYjRi9bd31RZnFffmBtMzgyRCJAfCRJNmx0ZEVjWlRRInE0PWdFT202WDFXVUZrSVgwdCpLejhGRUxHSkhrKXpyTj4jZWg6OVBsbmcjTCMmUztT''@;'; put 'put ''Im90UkJXMk95SVg4WXZiKHlEXzkkbTVUMU1rSy9oKys8ST1YSHxPYnRJR2lPOz4mWXAkWTtKbTcvSnlBRnJgW1E+eVN2IkdZXkRYRjBHY3R4UypZcj90KlJyYXlpSiZIT3o/Z1hhfjZXPDFFXW8xSCVhZiZRKW9PL3tQNCNPYEs+MDo4P0R1WGxfZzQ4b3A4OlNBPTdiWWhzNmJ4UyUkfDo8K0E+''@;'; put 'put ''elNbMDgsOnt3N308elg0UkBKNERtP3IpTSp8ZCgkaCtxWzt+cEMxWVVvJjprMjphJCF+QT0kNGNHKDF5ZTdqfWUlSEZBLGEpXWdwKysidW9dQUppWFpAU2d6djRCNjh2fXUhY0hTQXhuVUFbeU4jWy9lLio+PmBvaHAiRUYveUtyaEAmfT80b2RLWiMhKFA6dWJUJHQ0SVgwRiolIjtaY1g+NGxp''@;'; put 'put ''QHNnLG08IW5ZYHV2NnhdIytSSCVYQiQvcU1jY1NYZ1NLb3dsdFJgKy9MV3lOYkQ2dSF4d2hFN3dObj49W2U8fC4rJSJpYVooKT5PWUdFWFBZK0g5R2B1a1MqVUV7ciFzYStDZHlnQjc8VSM4U34meCVKRGc6VGtJandWL2xTLH5XcjM3Klo2LGZSNkFLYDQ3Pnt3TXVNZV5ud3hvYk5WSj5TampP''@;'; put 'put ''Yk06On5ycl1GS159KzFjPVI5LHhDfEFtJERAPHpDPVI6TUAzTiVsYFIuZFtKPig1akpmezU7eXE/MHpobmBERj9feyF9IXFsU3tER2VGPm9tT3N6KnZXSkh6QCxpbik4fWg/VCxJRENSSXFzbDIuT21fOzAjdmYyO3goQD9xcWhfMEtGa0suNi9iUEZmN30+Ujd3b3d8ZXNVUmtMfnFadUo1W0d+''@;'; put 'put ''Mn1EayhYNjgyVGxPfl9AeXV8VVJHcjFzNz0wdzAjfGV0V2RQKEh5QzZmcVAsMG8rZFJjQVdiK11WKnFoQDokdlp5dF1CaWA9RkBTPX4zSndzRmE8KG1nfSZUfkVsP0VLbF4vYyxydjh0NlNvVnQzUFgiKXszSTh7NnRYdjlAb2tsaWowM1ZfJVtJR0U9d3R4P25TfHlHZi5KdSQ/Wls5X188b0Z0''@;'; put 'put ''VU8ra3d6eVJUNGhRTXFjSzJkRVVBbnRdbzVAYz55T3xlTElLLiVrW1IsMHAzeS5WLDVAYExXPVNuIVlPbnokZjBuJl5yaHNZOXp1Zn4qfT9Xb3c/Ym9kNUFzdzA7cnY5aG5tUFchaCJFOXJ2Sls7fTZ4Yn0/Z3EqPW1fZnwleVgyMT1iNDozQDJiVGNrT30xbyklV0x1YT0xbn4hfT57OWdZKzJp''@;'; put 'put ''cSUlRC97UDg5ZkczQHRwa1tRLCtESypAWEFNIUVOREl1SHt2TXBTfU01WjdwfS9NYD9nV0tfY09QQXpqXz80MG5gSV5sNW4qVTdPdjlnK092WGU6eDZ7cVY9VVJpL152SHRiTWx6L1gqM2okJWAwMEdWKVJPaH52OVMrNio2JVlOdUh5fkIkU1doKj05fXxWXWduZT40dUl4NE8iSjUoSUpYLztH''@;'; put 'put ''aXQzN3h8e0s1TnA9KCpfWSJXZmBifUMqMis8JS9IKWh+LkppNm91M2lhIXtMYCl0XXIzZ0gsLGVGempRcHJMTUhbbDo4YU99NDhBZD10SFRKXW9DfnVZelVUPTYlYD4vT1cjKjJSU0YlYTlhIm8rNixALnh7MHcsTVYoU0hwd2c8NC4jJF81SlpZUkFLYEBqR1FnZX42SHFpfm59Z1l+OXkmPUcv''@;'; put 'put ''X21IR3dFW35bJW9jSHNKakt5RXxDIyNPUiMwdVc0JDV4ZnM7Wi4xPioyZXwjXjtOSWNTKlJ2M0xCMH0lPmE+JEgpcj0xdV0mdyIueCgzek5kTjx0UHVzMCJfVmlNKypocyF8d0UhZWo0cW53VnRaWnAmV19RJXAlSHU5cjdzaCwuLko8JGFeZTxyUlo+cFY6ZSMzPWM9PzxLKG8qL3o1e0BXI2Q6''@;'; put 'put ''Wy4xOnBPTDprSFFNMjp6I3QkTF4jSk4kaDNfViZObls+cUIkYEd+Sj0wTDldblB0PlBsUEBkXlZza2p2Ol4iWjlzUV0sdHlgIUI6SCk8dn1MYSpSPy5GcCouTHJBdDl9NjZ+TUBzPkphVixEPkBXbXZgYVlGLmNXe0N9PG9HSiI9RGpseWYmSVo+YXpzfSQiXktVMTwweihLKn5sI0luXlR5SjxF''@;'; put 'put ''QCJIY0Jzdy54SHhlZl1eZ25bbERjRDdDW1cqRVZXL1BwY3x7dEEmTUA6PzRqV2VRZHhxYXlzRzNDbkRgPDpdOkNxTl1+cjk5NnRHRj5fZjBPTW9PIV5tTUEpNXZtPDtGPDNYdjlFJCtGPCJMIj95RnJAXSElLnBncik2anZva1pRLDU/fGR1YVpYPiRXT0NkdU1pSnIqX0t4Uj9ac2VVNzYlKS4r''@;'; put 'put ''cyo+aX1aMz1dcz9BMVNCLjtfJX0rJjBwOTBlaXZAUndROitWV0I7I19DOkUvfWs2TywrQ3ZvKDxdLD81Ryt9OzdodE9fREZ0JEQ5eTExPEBqOGE4M0ZBOFBoJThnQF4lKjBUWHwzZVJOYkVIKkk4Pz5bXn1HNXBiVSR6VDd8e21CflZyS2NqQGA7Tj9TfFpPe0Q7WV0zKWJnIlJOPioySE52TXRC''@;'; put 'put ''SXEpZFdZMXQ0YmpVND1NQ0ZvI1dGRXEhXW00MSt1P1ZqS0hIWHJWMFR7YC9gS3l4ZUZ2ZXRHdjtbN2NyVUU9TmwlNjxnL2MqaUJja2t0cHIjRnRVenVrfXVrR01IISVyd0BwQEMheSUuVUYwfmplNj00Ryw3ZG12YC4rIyw7eUwwNCJWTi8sX2lBb0MiW2h1IX4oZVUrOj5uPmBtbHF4X1szYkw/''@;'; put 'put ''OUBqZU5tVXU7VWEpQF53fT0sX3FRJGRrcDRJInQpbjR6d3FxLzJGPktGZUF7ZHo2YFByMVEuTyp0RTVyZlpEVC8mKkE/U2RBcVFdQDZSNDU4UENxLyxZWEpbZWFSXTNHZjV7XmFabHxofSh3e3U5bT9kaH5CVEdVWDFJL1QheTJFSn1mRlZZfio1JT16VWZHKzlJVyxAfHl4NE1QJE1wPzolX144''@;'; put 'put ''P0NGUjkqZ0hRaDcjLGVAMGo1bnspQmEjeXs0TXB0YioiWEY7KHtJX2BAWF4uLnBvVyZQenB7PFFYfjcoMChFXmV3NCUiVGx3XnZQQXcqdSJUMVU1LlBlNTlRWFhCMkA3Q3lwWV95Qlg8U0teMm80Y2VNdGdWdyxbYkh2UWF5NyQyKWgiaTRFdFBLSUMqcCpoSXl2RSheMVBSb2ddV0xHPz0udnRJ''@;'; put 'put ''JUpMTCsuekVkeForW3ZxMmNJWy9YY1lNYEVaLiNnOUNwOzNtVzF3clYoKF5MJX5OS0NSITwvJjJLSXhyZTVIRjU6MEhIM3l6IkFaWDp2SGFgejY0MUslOSxSQnZfdFYsPyNbJF09TDJ6bmRST3g4eGpSfCxNMylCWGIzYDVMOWU0LmA6VThAZj9Gb092OHYpaTEuUSs/OkQ3XmtQW2lGX11CWTVS''@;'; put 'put ''Y0ZoPXttbkNYMG1bbFZQWzQqaW9EWUtVdnZPSWhZQnVicG9aY2hsYncsZXR5RihQbUp6fEozLExVQTNNVHU9b3s2cSgvcz1Ie08mSHtWYCE3b0YwTzc7amRDLGVyQk8ma2gjI1R1RHZfeVVAOjJWeFU4IWNLUkU0M04lS0hGYEV6ZlJoZ1N2STojPzZ1d1RYa3dmN0FvL0FsKlh2LiFsamdxXkQy''@;'; put 'put ''RCU+eDo0SlBdMyRdd2UhWD8uUnMzXTFoSjh3WCRjUEtgUnx2UEk6aU8vazk6MHQrdlkjTFp0XlUjPGpqdVh0NTQlLyojTz5uMCZHNE4vTykpPmZtJndmSmpXJFJuS2VnQW06Q09vciZQTEJzKChBVD54W3VgJTUhJWIkZ0p4d0p7TVN8fSZjSEAvYX4hKzo/T3huY2dldCF0VD00TUg7LHhXLkd0''@;'; put 'put ''dUxbcWVWTzgxSn5UZmdjZkF8NCpuN2Y0WGtiXlRNV3Q6Jj9jTGwyQk07P3QmI09FblUsUlp6PXpgYCpFPkgod0U0Y3p8QCRQUEpvM15zX3xDeyRZND9IU2lHRV0jZVJbN1QsVF5yJnRNdXVUWjRLbypgREowSyU4JFhYKmB2W3pKX3hHIUZZZDlWO29GdltaWmFwI1RLY1lIejxTODFTIXQqXT1N''@;'; put 'put ''fCMvcmA0OEMhPExERzJCRHAxK3hSdF82PC43RVgmajZbbUsscmBWYUJpOj8zN1dbclFsKHNKS3IsODosYE1HOjEkaEthXyFJODhGUTVhWUN+XkwrRCt7JWNDYWJHUThHMGlfWW9eOUc8fSJUflBvOWVwKXR1bXx1LjBbVChtJUosZkx1b3RIV3RPaFJuPHpvQzIhYUhHc3wicVJjd0RwLzRaQls3''@;'; put 'put ''bjFmOU1hdlR6TFl4SiIodT9mNmBaUyNFbD45Mmh5VmhPI1giYjZRYUlaeV8zUk00QjxOTng0X0AofHA8PFk+d2s0KStGO3E4ans+b1lYLDtUWGFHIUNwIVUySjQmQTFMW2lEK0Z5fm9ReXBZP115RXJTLDV+UWBKWUkvJEFUKmw7N2FzIUo7TixQXm4yLltkezdvaGwoSVZQT3pGVyx+TyN8Z2Yx''@;'; put 'put ''P1tudG5YaV1lWFhMYVlqYEJRbFhwRlBJdGVdVF5gfkwmXjxoeF5UfDtLfTZwVzwpa1JJPEVnZEU3WV5aaE9fPjNjSnA4MDtqLyNARDVgcHpUPz1WTTFhYUdPWylTOEorX3o7bnsmPUU9UEwmUigrN2IqcXZrVWYpQn4kd0IwS3kjQ1pTQFsrS0dVXWB0Wy8sdms/QC5fKmM4d1p1Ji91MWc+Ulpv''@;'; put 'put ''QE0hLGteQyg6TlEhYixkT01hZl5sNVF0djQqPz8uSjIpKHlxYiJiMSJ2UCRRKmRxT3F6alQ4SzUsZGs7LnxudCFlU0pUVVpOMD5iWXRvQ0BPWkVXJU86cCMkWj5EakpKZy5+ODdpUmo1VH5HRUZQV2s7TUVrJXV5Xy9TSmE8UV1HPHpJMHFgJlJfRiFASVNZIS9TNTVfIlRrQC9WUCFGVGkpRHou''@;'; put 'put ''ZUNqKkllI3pZNS81ez1LZVMuRnE+MVtQMCJ2N0A4TS8iR3B8UnxDZHdAVEJhfEsvaUtHSy9URnhnXUV9NnxtVS90MVBeSld8I3kuXXMkRERyIypZPCt3bFRIXkg5YE0sJWd2NEBjK0FGZ0N9fm4xYiNwIk1oK01za1loOCt8L09LbkE6S3xdKVZ8eVV+OiY3RXJrKUQ2SE0+cXlYR1JkL01TdXI5''@;'; put 'put ''TTp1VmQ4ZXFmbjshaHFKMDN+Z19tUFhyemN8ZX0mOG1OP2ReNGRaaSpxeiovRCgvMS85NCw/fnY/ZW8meW09b1pWZFFpeitnX3xENm5IWj1+O0s8SSsuLHdpJUdNWHNAP3kwK2pgSyxuWDwvQEhiL2QjeCklcWc3Nkomb0x3cTh1LGA6dF8zKTB6MlBaIys5ZVgyKmR7MkVvTkYzMFBodChyb1F9''@;'; put 'put ''Knw/MCtZLGM/Vj1pMV9GZ3FaRT1fU0hge1hSLkY7aHE8RjokTzteRT95Wy9kUHRLZyFaWTlIT0ZTOHNVPDlTODhaNSwyKmA3VnFqN2ZOVyFzeUp6RWdvX09OS0NnNi5iRUhaMj5Pe3VYe3d4bkkhPl5feTtuSXMyYUtIa11YJnY9ODFXcXxaUkA3OmAkVm45ck9BYzsjQVhocCQhW147eUFALy4o''@;'; put 'put ''ZXFuTDUqTmBxL1kvKDJ0WzFvfSY2TCI9X1NZdGpBOT4sYU1DRGxJbHckSiJZd1hWTi9BUUo/a2BULE9maj5tMU5lU1k1OjhHN01mI34wQmp9UUdVPiM5KSx1eCJNfllQWlNObiF5bDp7OixAR2xFJV9JQEhsOUhkPjxEISRrcSkjPnFdWHsuViUjMkZLITRQYTdvdTtqfVJlai90TCF2R09iYGlf''@;'; put 'put ''LkxpU2FCOm8yPVVYN3RvcjtbWGRRJjJkPmowJEUidiRlPHUuQVp9bHFiMTVXTHFBOkM/YHdTO0NYb0g3PyNbeUNZbU1Za115djplcileNiRMOHQsXywlOTl9KWcqRks6ekVzKGJMU3svXVJrZ1IvK0VBV35fbHR4d3B9VWNPKX1ybm4sVlgsNiNldlYxR24/fXFucWhlR1AlP0BKfis8IzdiaGpG''@;'; put 'put ''e0FDdD9fRXozSzwmbD9NcDZvRF9kQU9ocFQ4KU8+VVNfOXwoKWxSZEk7QlI9fkpyRio4THIwdTNsQlQ5SG06V01kbEZGXXw8fjJKJT1meGl6XnxbfWJDcGU1XytRQy9LWkx7W0tJdTEscHRvWF4vNnFBeiFOMGw7Q3JOO0B7ODpxUEJKLkAkTSs5MkwzcDtCPGRrYFJteE1jOX5yZzs9R0VYP2hi''@;'; put 'put ''cms6VFNVYW9mSVpRJktTXXZaTVM2MXBbWWc2dkYhbXBGV0xpZVV4MEhlMHZrY1AlOmNBSE8rTmRROkZIQn5xXz5VJls0Wm9ePSROQ1hOUSF4Ri5QRTksa0MmT1ZYIyJvQSIlb3B8JiMsbmskK3xaQSthJX41cXEkUzdsWk0iMWJrPXo0OmxBMUA5a1B+bEMjVTsjbGokc1J3NWRoMzQqWTlPVlM5''@;'; put 'put ''dDtWL1VdM3ZwPUN0KHpCa1YlSlZhPHsqXmB0Wy8uQ11sa0ZFcGI1ZX1KLDAyMmsudXp+VilQOylrSmpIJXJfM3FOXzU+W1ZnWmZPanppP2R3Y14jQGc7UnQ8c01XT2d8KEpqUWNyPCZGMHw3Ll4iLkdCRG9nY3FlbUcsV1R2YGs3MTUqZlg9VEo8I0QyYVpNLHRCM1ZzU35OY3kuYVVRUzdOS3lq''@;'; put 'put ''Iz46MVcmLyM7bWVMZzVLd0wvPl1aJVttPUxkaT9HMUZraDl0ZG8qeXk/clo7amhDMixHZGoxJEIqTmI2cXU5bnZpYjFtU2kvQk0lRi5RaDpYPGRbVzQwNzAqbFM5M0c0PEg0MU5tfk47fUd4OzM3NVp4WGRbNTIpaisoXXtOSz83RChBKnc3LkI7ZU9YN154a1l5YXZ4bFIrKFY+Wz0uaVgrYEpA''@;'; put 'put ''PCQvVy4uYHJrTG4/NTpYcT59Pi91RzFxcSJWQCFkKlswbDd1UjFLM1tJND0oJlY6JD5FJEByUjpyKkBqV0J+YnFKNylSfFo6aHU4XypTI1VBYER0PFRRdWs8InwwWmNzYVhNSDJkdWRMKEdycUkmRiosQ00pN11MZlBFaVgpPGl5UyRBPUliWzVjUTVJQ0JacEA7YyRIRCMvPlVLQGdgb2A2Ukxj''@;'; put 'put ''VXtTU3Q1N3leLnlTWzZmNklnYXhaK3VeR1BIbjY7eWssQ0oudH5OSmVwTlZfKj84aWg7W1p4K2N+Rm9QWXVBZGooOzQrS0Z4ZHk9aDEhI3RJWDlLaWw3aTY8N3FMTDZuUUFZT309RjhiYnUwR0lwQF9QUDs/YmFzVHYiR1ZdejVnbz1qRyxqJWpVNDpURCViM0JNSFIqUGBgTEBqTyg+LlZdL10/''@;'; put 'put ''fD03PXxUSEA5SGhrfTlFdl9CRiZlSHlxJkhgMzYrfFQ7Kmw0TlgjPENMPSNxKXM9NC5FTDhLXiRpeDBZJmNhRXR0JH0lQSxSb0lrQSRSXlt5RF0pdUUpMm1ecWg3LGxhWl8lTndPOlVSeERXU2E8XVMiWiVfQXRYSDZuXmFwO21qZXI2YVZqL2x8PHNvWF1CLHlKJFAsUl17UiNGazZbUShGVFlX''@;'; put 'put ''Z0ZUQnR0YkZrTCFsO2lXQlpLfn5uL2A4OGYzU2FNfWJqOVghNzx4MlJ5K2NDOiVqe2REYVg+ZCp3dFBHIjwrfWFhOnFbJGY5c1k3QWwhNyUqKDEkPXg9ekF1Jl4iJEIuM1ZbYHZKLCMpX0YjQi9fIyJkW3lpYmw3SDZgNFc5VCFuPmBrVjQ8XTJEJHQoNmQsZ0JQPkE5SDxNZFNoOmdsW2ssQltw''@;'; put 'put ''JkR3XyY4d3RVOCE6WiJlMiV7V3oxQ01abGBUfFBuUE1gOEckXSZTOnQsTyo6MHpUTzcoTlBxcVdLUWpkTmpANm1jVShkSUB3TE1RPkQuL3w2Xk5yeHk2eShzXj49fm9LZXpjRjFdelpDaFFLJUEifXE8fmxgXVFnImhTN1JvTllIeVRYaXchfH1weXhxJShmdmwlMjslNz5aOGd4dXVvQmIiY1E3''@;'; put 'put ''Y3hsIVAiZis/IX52ajx3XnNOV2tlNnVXVkdAU0gsQ253aipdW0h4dnd1Pl50X1I4QU5Rd1E6IjM1eWRfRDhAZGApOzFXYUxmK0o0LCFvSDY0JXBYUUozKUZvNlM9ayxjdk4sI1p+bVVjKkUzX0tUUFBka21GZiU/Kys2dmJ0VFEvPCRzTkFhciFtLiZmeEw3W3NvMGdqRjBCU2x4QXI7akpmc3tl''@;'; put 'put ''fShhekIpP0xwMkZSX2deP1MmNyE1ISxNIzFga3k4RVAlS0l7PTRMSk1ZITU7YHk8MSV0KC9wL2Y7REovRjZ+TChJLzMoM3d7W2Fjdzd7N2hIWzIqbT56eGxvJG00SCE8SiQlenFmMiMqWFRHRHddK3p3ISM3P3h7JFleMCo6OHZac0Fle1lhT3ZlJjV2Pzp9U0pVd0VWWjt3SUN5aCM2fEhIJixb''@;'; put 'put ''KXR6LCRDOFkkLzdmSFt+eGR6YldHZmVSM18kenpoc0k3KS4oZUtHcS9eRGZzbGVZW2ZPL1hHcVVKJWlNUSk+clopbXxNRmU5K0hvfXo+MkUieSxEPDlaZHw9XTNsM118X3Q+O0lQY1RVR1ZiJStMe25iRW5kTUMla3QmYV5SZW93R2N2elQzXzJCTVcyXntHSm1EUGwmRU8qSyJFL1RJVnIod0Jg''@;'; put 'put ''THttZTAubl9IS2JRbjhgeEMxdS97NWlLRSZuKVVNYCYmUHQ/QilGUHUmZiEsWXY0NUB9ak98WTdCL0U9V3hhLmE2a1ZtdjdGfl1KdlplTExWSy5kblVnfXpiZ2o6XkdCYTR6SmpzY1t7JWBJQFN5MzRzaF9LWjtVendQentdL1VbYUhPfXZUSVQ/ZDxdQVhpVWUsQ3tBQjs0ZnhWOWVGMndLZmU4''@;'; put 'put ''S2s/dTghajV2I0lwenwsImVIe0hvandgJDw6ZD9aOU9AWzJiY0tkd1hFanhiej9eV1Z6Wk8sWDswcFouWHBOIn1MKVcqbTBdZXB1Ulooc0A0PTFmQ3R9LGQ3YkdKfm9fUiROZUZhWyg9bmdTQiR3ZUx2eTNLZnJoYnpoTDghekgle0ZLP2hwdEwmSFI+LzxQV1p1SXomM0coNXA9bEA+Q2xVLE5Z''@;'; put 'put ''MEJHUzlmVXpXQkxCaiQjdyF7ZltwJmshJCtbVSY6dUhYNmxYUGpSS0pbdnx3SjQ8RG1LTU1yTWNoMTpJNyk/JG5WMDhUMVp0T1ZKVV9ndGk8WldvNDdPMERoaW5JMFs5Wi9pLkkrL3RnNy95NCxdMl9tXzJfe1cjc203N0xfNDNTfTosbFl1ZyRkb3I5VilpQnBgbTU4b05dcGoiNytXcUAuUVgq''@;'; put 'put ''TGlfJm9iOyZOXW4vQkc8e3dtK3tzJVNnS0FUTUtdPFZ9R31sS1BZVnwodW1fRkc5bGJEZmpXP0E3dSo9Z1ZGSz4iOzN0STJvb2dGPzsuJUNhWlJiMG44ZER9NC5FQzJOI29QbXtzJllBPDglMiY4TTYjIjJVZWlRfDI6S3kwL1YzXWlYdzY2Y3dHPG5xLHtmbnUoa2Y7Z21EdEF0X0dQPWFXfkZU''@;'; put 'put ''MW5qXjtYUWZDL1l1UCxdOzBoL1hQcHMicmdJOEciT3ZUdjcqJkdZcGcpNnx9KS5dMzNiRnh9PC5pZCNefVowV3RKbihbSWlubCE+dGlmWFpxdC9QKXVrWCxnZSNFZjY3MWh6Y1JDUEkjVDVXO2Z8Y2hUb25uYU9UWV10JTZxSDR9U28pRGsvQEJNS2hHel0xaFphKG9xQThtQXFWOFVRKG8+LG48''@;'; put 'put ''dXYvMS48OmZUayk/NXEoQnd3Tk47MTdrL3l6dkQhZk11MDp8OmhBR0Z9JHU3dSZoQnplVW5odTtaJDxpQkR5Sj5NV3YjUDZyJjkzd0xZU1tNRF8zVltVQiozelNSW2QmVTpdWHtweXtKa3syXjxWaGwkckJ2OjNBRz8vYFB9cHwhcD1PPj1kc3xoLj50TWw1PER2IzJPMV0kTHl7fHg+XjRQTUNA''@;'; put 'put ''bV42Ij1VYy42e15vMlJHUnxXKmJ3UT1VWFBHXlIwQUgxXTlWbXVQMUpzdWhafDU7QFVJIWkmUDA2Vj5UQk5FZmtJTSV6NnZ9bSU9RlgyKDI7M1IvLEtXXV17JiMsK0t4NVQrPmFNcyVhcXpMemhedHhBbThBMjVVJFZsa1p8bHlie3FIUSs7NzZEb251ZzM0L1tjPV9dIUMySVpnc1A/Izg6dSR1''@;'; put 'put ''VmIhW2lhUXBsJi5rYUl+dGd5NCVEayYyelZXfCZYW09iNHMzSCozOFowez5MKCxGWWBKcn0lemJkJVIiYXJWTVNhUn5ALjZgJXd7WjYoTmhIRjwkOS40fU8kQUUkbUZkNyk9K1tRcUx4JGZ6MTswfmAlOURkS0glUlJrVkNeIWdgSVRfVHNwVGAzKEBUL1R0SD9lI3c5QChVSSMxWnN4TWhHXWc2''@;'; put 'put ''USp1YUdFbXB+XXwkcWh4KVV9M1BuO2pJeXpIIlhjanlvem02T0B9REZfa3NCVkIxUU03NkF5JTxoUFV0U3svMHlDNEBJflhYMWRGNyl2bGk0bCNTUVZsYyxXfV5fWllFX3tEbG12Nz5DRjdIcVkwL2Yyd2heYGNETWxEdFk0SHxNM1EyK0NCfEUwNW1GV31+JnRRREtdcWBXbV9rYDo0PXIvZGBa''@;'; put 'put ''K104N3UuKUBHWS9kPiZRUEhLZVhPLGoxRkxuTXZ4bVNIbVl+cSlQZ0lKXnR0WDM9Umh9TipCPUpqTmkkK3YoZ1s+MC86SV0lJlJkNHVQSyllY3J+djRZKktmQ09QI15mfkdlL05RZFA3T20jdE1FIURoRTVPb3BBRip5ST5Aaj0kSkBTJGZGRjIwcDF3PmtJOnFnSkc+Qm83aip5a14kXW1NQlB4''@;'; put 'put ''ZzNXdF89dH5ZcXtCdzp1SH5BbkUqJEp9bFhLbURydjNRPEYrciI3YUI6TCgwYkZCYDZyIkl8fkhhPSs4fWNISlB2YGFVQjI0RmUjTElhOEc4QixsWTN4WlpvOmVCOFBJdiZLOSVpLCRXY2I6Kks8R1osaWA2UWMvK11odkhZZzsvLzhYelEwcU9HenlvTl9bJmU8QF5vTmtGUCNtWipMa3tGeng4''@;'; put 'put ''ZGU0XztBLz1jPDJ6SlJkJjlJcEVuTy5EWmBwQ2h3e11tdCVRfl9zJHU2O0hlQDBveiY1QFFNNFlhcXxCYCY7XzY+SypVcG9DcFoqL2RsM2EyOl93UWZPUz5oN2NPYiJzYmAvKDpdd15NQyZlMDpsSGBIT1FRKV92JmI9Y0k7LHRwW0JUMDlUdmp6eDlyMWVzT3opZGZNY2E2RituRlBgUCtlN3Vx''@;'; put 'put ''ezc0bVEvPEJeIkxbTnFPcHgoa0xiTyNDSVlZTWhDJkQsTTlbdighZUZqdEdnODApdlBlWyVVdjxHKzVxKWEuWSQhW1BfQ3JRVk9pX0t4JkpNZCpSL2gyUCk7Y1ByUHFsXU5zPFtGb2JIRTFVej9gWSVPaCo7NXxaVGJ9cG1+SW9HVj5jUWxhfnQoPigpNy4mQjpScVlgPEFDTlMmL018ZnwuXmol''@;'; put 'put ''PDNaTlg3Z3FDI2JCIzZaaTNrMSljbjMsIzsjUFEmWCRGKVU3M0MubyE/UmNFKS90Zzo3V3BUTihQLHZHWyhPLlIudTRNRVVxTVYkZCx3OmQoOkcxZyM6QzJsYm0yYGJiI3ZpKldTcHEzezFpd2YxaiptUXw/XUhfIilBcXJeaExGaVhJYzxXZTpLd0A5PyphcSp4M2N5TldtU2x0UENkdHg7XmVf''@;'; put 'put ''V1lUJiglZVsyXyZvW3MhYHlIWHE4KUY3Q2hnSDZCUyZDTlhmW3BiOkM/bnddTyxDZjxmUl95UG8xJmw1UWJTW0VEbyFIQGhXKjZ2VTcqNl1UOFleOkRqKGxQMEZFIVtsZCtOVmA/Tkc3QD93WmY6aVZSWmx3YmNNdjU0aCNpWzAqaCslPUNWcE5SaGdsQ01DUjY4d3ZhMTJJTDczUChILzRYcTJs''@;'; put 'put ''YSErdm04KXZ0aiRJI190O2dyYFt4K195ez17JXx8WXkoOWBGSFR0VkRRbC9IO0FLUjd1Ym9+ejAzUzQjXz5kdGIlMUU6eyx+P11mT0pJLDEyR1AkMCVKeWslNDxKPltOfCNtYCtofHRNWnpMYSooI3BRNT9jKztgNTE7ZyNNMEdYaz40IztbVHp8KHgoW1FVIXZoYEFtXjppamR2aE57PXQjQG48''@;'; put 'put ''THFafXxhRD0sMkZqVl0vPDF5RytTfFB6YWo3RTFXYUdreGhWQWAyO21NSDFwOntfVCV+S0pfZCtUSWFwMltDT1Z+RGQ+eGBFKXZDek0pLGxSTldSNSEkZUEzdSN7OEBUYnUiQjxdRCpmVEgxcF0qaT1MbjZnVHJiNjVhQlQ3VmhCRnRAYmVPNnIwc0NMOUEmR1ZuL05iPiNSXz8yJS43a3xWJCNw''@;'; put 'put ''fHkzV3hpO0pkW09zQVpxUihpcGcwM2ByWXJDdCErcj91TENDOWkxTUI+ZUJIcTtwZllpOjg0SDdmI2Y0W30+LEZkTSpmc2BaUDQ8b3xHOV86P29ueGpgPzo5Yl9zPVtoc3YlMjV6V29kWXo/SiV7VzZibilqdERfKjN3MzxvbEg5YjY7dSZ3QFhZdC83Zkd3IiF1UHZxfW5JMnJ2PV56emtMJi57''@;'; put 'put ''YFp9PE1VSVdXe3kjNDBJKyZ1ZVhZaWErYHlnZzpCXUZbMC87Ulh7VCtbbGhueUNtNn58RmYuLktuMGV6aisrJSxbU3p4QnJCOD98R0ZqNHYpIUZMKCRtamcuL3FMOXhafVQrM1RbMEFrWDt2OGh9NVNGL0tiME93PmN+OXQ4K0lDVHlLTF0wZlF+fHZbV19kXXVMflVaKkJ6aD5JbUUwQVB+flg8''@;'; put 'put ''VmJGMEdzR2xIRW47K2kqVUdEYzlwKWBWWWR3TUZVTXoha3Z8aU9bSXtoYXt2MTBkfV1kVmgpUXZrTih0Ly9URl9vQFh9MDdbRX12JCI0cVheWUp3LGNfQSVYdjIqVHYvTUlDe0hgWUVBWT0uaDxxZWpLTkxCeiNkQkJASWFXTyh2TF4vLzdSUSYrSEoiRVUwLFA3KXU5aHVKeX42MnNobTIxQ0E3''@;'; put 'put ''Z0IreEB7KFs+MFMsdEZsUklEYjZJZU88fjgsNXVpY2d3eyI+XjFWW2N0d3R5T18wb2RtP0lncURiSHVnU2AzMlR3T0BicGhKcEE3YlVpVTx2My8wR2d4MmQoaVVkWkFfdWVtYGNpQ19rYDd1SGwrN1tELkxwa0JgW2Y2UFBWIUIuWEAqU1RGeGl8cTkrX1BDNkEzO1c/LExDYmtWZ3JZO3VOMH42''@;'; put 'put ''VClCJDZqRFA9em5LS3pbLFQmIVErV2sqJTliVEkxPVlNVyltIkBKZWRnNnwxTD9Ue29NVjYqVmlhSzN2XXJQY1RMTGtSYFp7KjtWWDhVSzV+RUhnOnVNYiRbcDRKRDJQSyosPn1BcEAyTTg+dFQueUZRb21iMTZYSEA3IXUpNCM4WEowWyM4RVpCUT9yNEBASGQsYjFLe2pLUm1qbUp5LGo2R0N7''@;'; put 'put ''Li8pUVVgPmR+Kikud2htNG0pQzl8MUw0fmY5cmgzMVdqdldRKzVjVzdOaWlzJVNlRXRKPHAkd0FwWDRnVEdfdXBWVXBSbEg8VlUsSHNsKmBwejtPe25aTklRdCU/YFFMS3VKMGVmfHZYUDg4NCI0VVNIMEN1Z3VGciowZj5nezVtOTtxT2IuPFF6b1V3algrQEA0JT8odEsvczZhLCR5JGR7e1hM''@;'; put 'put ''Nm0iQ2chVU5bOS9EOD5bZ1hISHhROFQ0Mzc7Pn5VdF55QGxeWjZmIjEuanRHRlckN31gKFMhUkckJXB4cU9xKXhXTGIvWGhKLjVhI2V5VF93NSZkOltwI2FQeFl4STl2Y0cobmUsfCx1P0JRfnJ9KnZ0fUw6KzVkYkNsRU9mJjh7Jlc0eHpXfUhFYDksfjk4dD9UekJJeWt8diVVQyVZLHh5NDQ8''@;'; put 'put ''KF49Ikx8Q2x8VnE+JCpGSXVYemg1fElDRzMpandgVj87VDVUKVtGTTJZSyVHe0pIUThZMXc6RnQsbXVZbTE8JXJXTlFtO0tgbz5fNHkqTEwxVCE9VXE/ezgrdE8uY1BoZU9fVyRwM0VOcUxjKnFNcDBYR3ksO2RReXVIOWZDSEhqLiE7P3ZuZiFpXl9ZZSMjeShjNlQiOmREbnpld0toQThfVEhK''@;'; put 'put ''PVVNK348fkc+T2RtUV96Rns7Pn5FWHJ3KWlTJCVocFE+Y2FRTG1MZHE1RnY/MilNMTB7YHQlNEZAbiJ8XmxDZW9TUHYmTSZzcitwJUJOdXZZVSRCZEdvYURybEI7bi5wbl9eRDNnSUJxKDdFfDlYOl0rVCspL3QwNXxVYChbWGheMVRIe1Q8V0pgSSRvQytgPlBlcXBbPilpfWtIOjVUU2tTUUJq''@;'; put 'put ''NiJOalNCWDZEXWQ8X3lQK3xva2NheClsLDYvOWdTSWZYSSVTJnBaMSZqMjxGQWR1dHs5MmM4UWtfMyhNdEIqXlNKV2xwMX1tWXtHPTkmPkkqdjN5VGI1XjYpSSlAWlIyRWFXS0tqfVQrWjo9P2BpWn1bZ0ZLKUp1Qmx2c3lbOWw9X3h8fDg2OndIL0Zjd0hPYmpRXnZdOU42TSZ0bEpGfjtsRVkl''@;'; put 'put ''IXBfajNaKmUlJV54TVIoVWlxTSpWMSVaQXhZNmdXdWxUTmx8W0MmVVZUT10xRGphbnNgeiF7R2FHTTlpWVZXbTUuQ0csdUp8JWF0dFJ+XzgheFVEOiF9LEs1cmJRdjxvOHo2PyI8RT49NkNAM29zazRdNTBpeD5rSX1bPUZfdkRJM2tVP20rSTphVmhYektpQUx9R311QFFPdWRsYSxBK059OV98''@;'; put 'put ''KUFVZ3hPOkspMDZQZ0xWK10kR0JEcXZmLzRsc1pkMT5oIkt+fHxpX0kmcTQhVUIsXzt0NjUoMyljdmBjPD88MnxiR1g0fTh6IXglZSJ0PytteFQ+dn0wLGNYb1JZcjtxKHQxQGY3fVFIT0g5dy5ZKlBubjJncnQ9Vk9GUkhHWl5oKk56PUslOzQ0TiE8dzRrdzFrZnVxSSZ8U0YvZzZWSyFfPSVt''@;'; put 'put ''NDt1NC4mcj11dzpsYl4rQyREXzpSXmVFPjMuUm85em10VjFwb043eilGQGxtOVl+dms6ayQkWzwuQDB5IkRqJVFFJUc6aDw6eWFSRSY1JlM4RTQkaGwlWmhXZT1AbG5TSjk8aUNrWzpCUU53Z1IhYHIrbWBOKyh8O0poVTkvOV0/P1dlYFhhdEVwOUY4VTxTS1ZodlAxS2kxI2Y0ZGo3SkVDa2BJ''@;'; put 'put ''QmNjL0t7P3NWaVJ+UFciPlBJLztbd1NNKXNaeE8iTHZ7Rzhreio8VkVNImQwOGxDTm1Ydi5kN2VpQTcyeX5aW1FkRUdeYUtARzxbIUczfTZpdDZCbWpLYU9HNUtefGMzfH0/T15oe0RZYEwzQmt0WjYrPzpGYGdKWzZTWUVyST59aWczWXlGPDdGPGorYEtvd05MQDQkKXZNJjZCWGB7cXM4UGxU''@;'; put 'put ''WCYoOX41TiNUKjVZa3ReZmY6O0g6K19BUCgxeEpdQlU7QE16Qn5peGlNWSZnWXdrX1BvMVpCbEY9IWpJRnVPSjc9RUc4a0lgZkwvbV1KSUUkPFIvZz9YOSxJZWU7e2M8S1ooNzclOVRhUVQ2PkkicE4hNWAmVCRGTm0uJUIiYDNJM2d0az06KT52NF5KcC9QY1lpIXUoKjFZbHZPTDgiV1Irby45''@;'; put 'put ''MUNaVWhMTClCe3BlSmc4NjJPXjpqZmhoUHM3RiNCV0hGVnF8aTl8WnVCcC5KQWlVc1VofDluNmBXfkBUWTY2MXYmJkNaXSpGI3pyTUUuIyZwXXAwUDNzM3h6KWVFWFhKdWpLWWRhbmRiYTIvbHgmQXRMSVEpUUJZL0JvNEd5ZD8rSkxjdHhPJDtzUkU4NixWOXBFRnFuPH06dEdMSWVYUzw2eFlt''@;'; put 'put ''XmdSTUBKJmxaW1tqIzFiLElHLjtCYGtaSlhqYz9DVEFXeWdSbHReJjsuaVJCQiJIcF5KN2haQWY2Uml5QGk8ZThHIiMzXkwjfDwrfTRkbyUuQzw6TSEzJXJ2N2Z8UytXT19LZWM1ITY9TkkhdkMwR1lCTjkpU1gwT19RKjQpWV5vZnI6S0ZKUV4uOEl3X3w+Zy5DSVpNUS4yIyZiTShPWzJzPW1a''@;'; put 'put ''L1huO00sVm9XbHklMVAlL1s/bWdUSUMzXXAhbXhYU3JSVzVYMCw2K007RGxWJUB9YDFCSyEqTVN+djxQR25PS19hVVByVGJuP1YqI0AxdzNlI1dDQE9tdCN1Z0k2R2B5UzZDUzVILHRePHhveDZ3SzNIZld9OiV9PnprL0dEclVqZV9RS1l0UkdVRkVfZHRWOTl0UX05OSQ/Zm5jeF5oQEpENT9E''@;'; put 'put ''VWgufUpWM2kjRSt4TmQhaU1lMj58Rm1EKXx1c19RcDxONS5CaFlKJFAwcC9Mbiw2OHRKUF4vbUBXQ0RAUTc3RnY/PXp3cXl2NXdSKjFnejdLS1t1W350KStOciswdlV9UF0xWi5adiVLTyJdQ0RtdV5GeTUka1ZuclBHeDspQDEzJkZmRjRCMCkyajRGZm93ZWQlOjcxPHdkT3J8KixeJHBiPVA4''@;'; put 'put ''UkZbVTBPey4vXWYmKUdPUCNKdXFEJCEsNkB6KEUqTy8udVpaMjxjQkAxTixgaDs0fER7JXEydG0waT93TnJjQG4/QWx2UTRCcSh+Ni9TLlU+Ok1dJn5mVHBvKmNVayYkKlA2cGg7STd9UXcua1VXRXBDNH4kaU8zJVhGbEc4ayt3JE4pPVNpaU9DMDp0Q3k7S1p1QFJfcEZxVVY/czVRXTZEWVBP''@;'; put 'put ''PCxLWkFwWUxReiVFX2FRQEZWfU9MN1IsVHhgU1kpOyh2WVVtLj0sakwyMCUwTGhDdmhbdUpUUXVlYWBuIVN1Oj80OGxtJjIhcnh2Zm0vTnIhWGJ5JTN0SihYSiFmd35xIXouTmUsfXVCU0B9KVFVK1NCfmhSLkpJe1N4IXNkQXZyc3R+aylLYTV0JDpVcUAvLlJ0Myk7Vyg3RzJ5O29hJn05LG4i''@;'; put 'put ''VXpEez8sN1Y4az5scHZaXTk9bUp6LllIUEB2a3R8Nls4bUdGQkd6OW91Q284M1JeNk0hSDAldmt3UVsxY1FeOzRxSlNaU0YoYXQjeGt0O3FlYXJte2tPXmY0REhpaXNodG1nM2MyUD07ODQ4WiNFYSE4a1kwUkJyV2M5d3o6WXRbV2Rmfl9HfVpvZ15GIkNmXS9sUmJTWEkyfWsheGszc2FNZGV4''@;'; put 'put ''KC51bHwhKSUqd0UkKTB7UDpsWmJFRz8xJVkvYlg6I2I1IlgrbCsuSUMhYXY/QnZDWEQiNj57SXdrfSpfMT1fQ1l6UmNyPnIxdXAxKSNySWZqSFRkUkBoTTd2UzJwQmN7bDopSk1PenBnOEZXL11JUVh1JnttNSU8bS8zTV1HcS9Hd1Z9RThnOyxgT1p2RTRWPlVgdGcsYzhMNHQ6UmAhQFsoMTJR''@;'; put 'put ''S2RuYDZ9ZD9vO2o/IWJgQkhXQHRvVE4xRmMuOTsqK1BYPCQ8MF9UKXk/aWQ8Q1svTG49MEwkfXhwTVtHZD0oQE5dRmAjUm59azA7ZVlyVSRRQFYxISxpIiZVTVVfa0NhRWRLbC91XXdmJS8zeExubyVyajhFWzAuNlpTPyxZLn07WSI7a2x8UVVlV3p8Rm96bDM3TTtuK05hX1dmRVQ4UWRaJW4m''@;'; put 'put ''LGpiJEdNWDBMTyw6OmM3dShuJFhzZ2ZDMjpjTFVkLDQueTgiNXZNWEJoUEZyK0M+el8ya3NJVjVoWVhgWXA8QHNjMTUwZU10Uz5qSTgpT2p+MFBKa3NpNVVxUUdYbnhQW2c0JGs7Y3dhYiF0JHheX2xnRm18ZElXWHxiSFBkPiQxX111ZipWQFBid2pyNnRGcSNEWD5sSUssIzFDZEE5WzRjJW1g''@;'; put 'put ''RWFIVz47I0JOdDxEWEdnPmg4OHl0N35RN3pOYHxFcE0kb0lEYWJdW2BWMTksYTlPJVVKQ1UiemQ9MUs+e1N3d01TS0Y1MFYpSyNXdE9VOU9qc2lmTTh5NUU0cFU/eFs8fHtgOndAMUhqZ0l7OG9MMUJFRXQ2Mlh7XkpKMG9jWjpCbjQwSklESys2JTMhfkFhXmdVPnF7ZkRhd3JPOWhveSFTRzl2''@;'; put 'put ''JlNQXSs9fHVubVM9TUw+QkNtd1QxSWpCUjB8UiNyZmpPTG1SPGRyJmFCQmIpZCxIQDIpSTMxdlh7Tk52bFUrQEUwbzJhPHdMfld8T2haeHpoTVBpIkY6e0IySio4ZVp6TmJWVCp7bUZ3bVdpRE1ZNmY6X3gwUSEpeG9XI2BOWXtSeS41Ml8yOSMxel5IJHxTZHxqayZvLGN1YnlDcSlxNT1JNUQq''@;'; put 'put ''LHpoaE5rdCs+SyUlPWBGYDMoPXtIPkN5bGpYZXBiZmw3ZyNVeSFiM35yMFtHSWRUVDVYQiQ+OkouYWR0XTx1MXF2Q3B1K059WWBdRHNMOEh0IiFKRzBefEE6dWpPeDN1d09jaGFPX0M7cCNVPGdXQmAhWlNLZFolU1R3P2hLe19CcVhIPSM+QjYlKjAwYjFTZWEzWENDOiQ2KzI3U0tPfkQrR11Q''@;'; put 'put ''YiZFQW1zaUguc1EhcEVLLmJaRGZfLGxSKjJQeT45RzBOKTl1RSM4JnRSIkNCbV9rcmx3Km0pdnlZOFghcGhgZms7dEFwPW9ZXlI3XVVETjh3KTV1eXRrYigyUz9uI1QoMCo6fEE7PkxqVkByMndXVG1AZClrJFYhYzcjJkwxJSJaPVpRVVUldzU2LlpbNmAxX2M8JmF+aDRNPkNbZ2w4TWFRVUBd''@;'; put 'put ''aEBAQnI6Xn1aaGhPOH5WYmBzSGIsVjt0X3JUVzxbSENYNm1XSXo9VXV6YGwxV0BMWkJSIUpxSGt2XWtpMkJQPFI1O1I9QUtJWmpgTSZdTE12akIqYklTQ1F5aUNEfDBNV0loeFR2Rkg5X096M1pYYDxbaHp6LCZBXUFkJGN3aUdBW2pQL1FgP15mZXdDPThsZWBgNGNobnpgdWFfZzx0T1hOdkA3''@;'; put 'put ''TzkjKCtJbWVfMjBJVn5AYmlXXnwwTlhOS2oydEZ0MShhdX1LWSxNVnp1NDpoVjkje3FyMCxOWn1mKEA/QEYsflZPTW8vSGtuYXFfaENPXkRCfntwKC48YEdddiN4L0QpLzZWLCJmIkA6JlgpSjwkXkglRyIsPVpAfG5LRSx1eUVKenU+MzxrQ3dPZSR4XStVSXtAN2FzTW5TVnBPQVZjd0o4N3t2''@;'; put 'put ''JEhZYE9ELygrLFgjTCNvX25BMy5TZ2kldE9UekNXMGUvMGk0QV1WOWdsRzxzPlNmNjM9MCpTUW5VRyt7PjRqfnxwRnw6QGhgPTk0MllzNHUvWC8sOWhZRUhrISVyZXtdWWRqJTpBcnpTU1FXPlY/SmhrMkQwRmw4fG1RVlF0QmZeYDNAUUE9VH0rb3Y8QVkhfFRqMGNiT3p5U3NtVzI/aX1nS0ZJ''@;'; put 'put ''WUBFOTFFKWBod1tiIWY5KllaTFQ3NChxMXx9OnBYfXI2SnJfNXcqdzZUZ0IwND59Ykg9STVCTGJ2XiMoRTFXViJeV0VpQWI3QlNsNUYyKy90SWN8bC93WEdbWDN2W1IuQDJuLzVYK1krTyNhNG5AfjZvWk1aVkRze2tgMUFLWV80VkQvPypvL0QzRX1XdmV8OW9NNEp6Im4sQm5dYClTSHhbLFgz''@;'; put 'put ''SWNFeEEqYSNZaGVtbWNCI2dKJj1YM1plQDs5JGcsWSwyIUB8PX1tbjNwP1o+XiQocT5wcXREY106ZUs2THdpW2RZVFVIKVR6cENuP3pdRzd9RzUsL1Y0QV45cl9uQXg+Y2VLMUc5Wy4uKWowMjBtOmNZMSFhKnJDU202O3YpM1V4ezt6QU55Ji9mc3Z2LEgxVEdzL1NCPT5+fXlSb0BbN0FJcHRh''@;'; put 'put ''dntRPUAldFUyKT4vL2wsbWlDP2ZPNltWIVRRK19LIilzJH5CI1RqdVlfW0d3LFNKP2N8YyVOQFt+LkQuTHZ+blQ2PChpM2JXO1hUdWgoO0ZvRSwhIW4/PXBodnNuVlk7ZGY9LiI3cHhtdFY7NmpWZH1AbzUjRU87alhiKG5uOUZLRGQzJnVJWSghanZ8NVRvcVZaVVtQRFsyKz0vaWtkKEd4TH1X''@;'; put 'put ''Z107a0ZgU21NUDBAYCpbYCk5SzFaM3VAUXUuWFt+YFRLfUx1Z05XcT4qdXZaLDM0OzpaKz53Tlooe2R0cSNteTpETGtgPF1OOH5QcVRbXTFjT146OztwTHI3KC81JXIsaXFSX3BMck9+bU48YkhyVHc2Xih8RDc1cWlTdiV8OVghQCs7K31ULCtDOFFKMyN9MTtQJkcsdHs1PUVSPip1WGVrb3Vh''@;'; put 'put ''YX4vJj82dSE3WyFbQlB3bGlyZW1SLnsmTUY7aTBPQ0lHUngiK3VXJn5ieUJiT0hRdV5iIUNaLmxiQyJqVl4sXUJpPjtdcWEjcyNgJnNbR2RGSlYsaTtwTkJHNX1kSDgzOzhxYyluVCFBdW5vSElqflhoaXI2bF5MVEIsWjlzci93WG56QVNkNT43WzI3bTc2eDhYQlgpVEomOl9SJSguRSpaZkNa''@;'; put 'put ''bDYzMXsmbC9bVVdpIz9nOXJATHVTNy9XOFFaPmM2W29OKEJQeFpqJH1bM2VxQlpELjV6TjR4SylCZ2NRbFt0bFVOXUlHdj4zcnY+ZVlZYClfSH1MbypqUHREZHtJP3Q7VUkkdGtEcnQmZ185fUhUUmFFYUJXKEREV3sucUJCN3shMkVDPUEwfj46Ojo7ajU3OkpGQnt2UyVmVihBX2d8d3NTL3Jl''@;'; put 'put ''QHxaUDFTYjA3YiUwSlNHaVUsMmMhdWIzc059QGVuMSpTVkxlTERwRkd3TX1VLmBVbGZmfmVnXzM9T0NkLjhdTTVadjAwLHwyPTgqZ2dwfU52Yll+LDQzS1c6QWVtUGpkTjVOJiZxeUQrKXBiOzkzYEx2S2s2PzwsWCQ3Yix9I3lrPF8lfWciaE1iIiQvPWxYMm9NYzpHMVRwNUlAeDluVWZNWlsx''@;'; put 'put ''Ln5JJXROPmYyRzNXJTpkfUNLKnBycnJPKXFSMSwpPnIzey5Xc04ye09OLCpWMlhQRGdgQytTeTBAbnJgez4pI3gjVmNaMnE8QiU2dHZWTzhFM0VHaW09OzBiL04kTmdlOXUlSF4uUiUxW08/QDh3LnUsMG5sc3tzeSNvSHk7Ql9Cclpid245eSt7Yn1vckVIUFs+M3lTaWU3YiwpLi51ZXdOZXA5''@;'; put 'put ''XjQsezU5R0hAd3w+JHhiJHJQZ0pCKik2dF1pPnhyT0Z2eE4/NT1jWmd4SFZtemAxRUhgPHBaV11AR31uIWBWLDk0VEtneHtlYDpvX3U/dWZuOnJCPDVsfXlWWEUhejNEezZjJV9yRko7bT1tekVZM1tlRDpLK2F6Lix7UiNQMnd9c0AkJDRvJTV+OSF2NyVOPGI0O1RHen1FNjpgLERHYT52NHwu''@;'; put 'put ''KiVfL2Y7KnpwdnZIY3ZhcGEhR1Z4TV5ITHs4XllFdWomaUw6d3l+Tl5sWldnYEB3Y0hIKXh1bmsjPGNsM2MyIW1wNUNeeStIY1kjN2g8P1NGczBBJm9AOFFuLjFeMG06NVRPNC4rZVpAW19QNUtOdWFRWTp4SntlfV4xUH5LY285dSVNRmkxR1dZRnlDYzhNZj4oXSxUPnBuVmVzRjgwZypZUW0u''@;'; put 'put ''UWxLQGRZd2IrT21MXjFkTHRPP2FxIV5vQG8qd2U1fTRVelJyRnlOVTt3Y3llVUU8UTQrbz9NWV1yeC5BeGdUaj07THohWDZSQiZqKHtULD5RPVdEMHRRQyRQckYwfXlMRDFnQTA8Z2JBLyViQDJbMSgoUUsjXjo7Nls5JD5rRl90LkBoaChFSm5qXUtONy8qI1RjWl5SbmgvdCxzfSVqN0w7UU5J''@;'; put 'put ''SG1feDMkTV9DQD5VLF12SHAsK3l3bkZGcSx8THdQOHAjejNLRE9FWzs0cjlwYWEuTXZjRCt4fFc2UjlYSig7Z0RgeTNmbEdlPksibGgucl14WlZ+WDxfIjAoYVNSfks5UTU6bU1MMGVzNW1eJkRyKElFWj40Nis5JFtYIkc9RWApVytYR11TP1Jia3trQ0x3JHdfb3JqTihuMHVVRUM3b1t7cVBu''@;'; put 'put ''Vk10aTtwXmohWWldI3wxVHF5NXwkaTJrRHx1V2g3NkwrQj1pXyhxWjw8NDpwXmE0P1tUI1Z2fks5UmI6I2xrRW9PMG0/d1olRjNjVSUhcyN3em9jfX1CL3JaQG8iMkxYInFBRFBAd01mWFEjc0pnQ3B9ZkNNZHkzPUNLWWJCZ2tTaH5rU0BpbC53UHF5OHZ0IXRrc0pWYHJSVis4dnF5Tk1jNlEv''@;'; put 'put ''Im4sYEtbcmdTfCpCMTkiVyViTTFDKnE6ITdeWHA3TS93JCFJL2o8Sz4uTXdSVD5iak0iTUdqWyNybm4/dSMqViNaPWhHaFtOTDRwOlYsSCVVOCYmfT0le1g1MzpFdD09WDFGd3BWOkxNVHF1L2gqR15zWUs1fFJMbnhXSXc1V2JoZ3dlO2IuR3JPMGI7PVheL0R2Z3pbTUltb34mZDNJMnJORGNa''@;'; put 'put ''K05la2tuY2Y1VnwjWX5yPGFlXykzN29HOj9SPlE2RztFUyV2UDcqYjcvZkkqN1V7I2VIUlN3KDFPKzZaTjckbTN8fSE6OypXdik1YlEmX2BUZHEiWTFuWDUuRmFSUTNxPUs1ZTN1WjNlUFVzX09yN2s5fFFARyRPWk14KFl5PGVfMT0jWHp+LDxmIVQiZX1DMkomMl8pKSN+NDl2alZXRW80Qnti''@;'; put 'put ''Lzh7a0pEN0R8ejpKfkdgODYiYU8lWXRuaHlFaUs9QyxUV2t7YUU3ME4kS0ZSQipaPXBSXzFaOXIuZj92b0g/bV9UImxWcG9NPFo+WTdrYlthSDJJQFtAPFFndClIQEtdMnVbXjJjaSNxfiFTKit6ZU5bXSZMbjNzUiNWInxFaSh7akVrYSw5LjY9M1gqN20zQnQ7YzZrY0BPKnwqPmV+RihNS1p8''@;'; put 'put ''NztiTHZSZHBpK0cxT1BCNyRbcG1tbWpjYFZ+UE9Na0QwQW5zP3VVRXYqZjFSZEx1NygmT2RyUVIqUltmdzMzaG95RT5+ck1NKjtaU15HcDVmaixVUTJdOjk3fXVaUS4+eF11LlBDKz9wLzJqaH4uNXNXYkpjJmhrZngkZnU3WktKR0I7cHdKQTF1MkVGLFE8S3Z2JnhiZjA/YnB+WlV8RjQ2c1kz''@;'; put 'put ''Uz4/PyFBNGVFb1RkdUl9YylmTDU6fjV0dVNlakp5ZExnM1tZTG5KVmBJMW0zZiNAbzNMPFs/VFBTSiNkSG0zQSwhZTI6VlM2N0Z6WFZnV0dmO2FPVV8vUCJLOSxtVE5WRlskOT9ofFdka0VvcHRaKFU0TDh4LH5mOllpbVIrcD5ddEI1OVVTb19GSTRIeFAzVl0vKDVLfkk2fEZ4YiJqJFR4I1h1''@;'; put 'put ''fUxAKCpKJjQwXXd1ZEd2dmtwQk5ySChHZGc1Vil7cyJQNTFCREdodGwvOGNHfGVnUCQ9Wjg2JHFVPSZ2N0IoLEROMTc/IWFpa3xJTVczYF9IOThkPW01NkJZclt3fVUuZFY7YTg5PWc6WG5ITmI3NntNK3ZPXnlIS1dSXiVyOkk7Km14d1IrXT81Q1t+bD4kZ2FNJTxHcS5+QGBZVk5TbD41Tj41''@;'; put 'put ''aTR3KWI6TzRQayY7U319fUpDOnFsVW1AaHM7P0llPCpjSkpHVmFvYXNIdCZiUDplWHhLd3Y8Q1JJWGhNZ0syeF88VnA3UGtWbjlfJktPWCxsTjE8X1hNXmErfSxwOE1wZHpNJFZyNE9TV0RZT1VZRkUrWFNTZVs1SkRGazFielROcHVUIyx8byxkVDU/eUxvMWAxNzlIdmJYLyF2V2tlM3ZoQ2NV''@;'; put 'put ''JGhxekpeISR2NT5bJCFgcitUKUVDMFJWSFchWjBhUnpLVygodGk2eWJPO2djbk1oOWQyellNRWsrQmhiRn48b0NhRVFXYFpuS2tGXzI8PitNPyg2dHc4WlEwTU0/T1AsbnE5cFU1I3NYWGRCekcmPFY/ZEdYUzBDK1NMYFRXYENUe2ZjSGIiYXYrI35gJD0re3hIPFEvMlo8fXpCdzElW1FaPlZx''@;'; put 'put ''MWsuYy8hUE48TFJ1Y2VTKF5uTGliP1Y9ZjRGMjMlUmA+dTpZSlplQFpRUUBdcEdeX0g1eGt+KG52ezc0WF88azI9PkBraTgrTTppai4rbFVZXTM8eFpXM0JKTy5LRmo6OHchPTEhcFRrRmZvcGtNIUJ2RG5oVylsKklhKCE3L0pSMngkPTZSblRRYnhSJGkuKVgma0hAdF4ha3QuMT9TI3IlcUk0''@;'; put 'put ''clpsYyJoRDEvaUx4e2tHKiFRImRNPm5sW2hdJG46W1N9b1A1PiwiWldyOSMzVXFKdVU5N2RVJk00SEMuOGpOPEUrMjdFM2ZlPWBsKGJQQlUsezI5YUlLdyg4R1ovZGcrUUEmKyl1JSNkPjIqZk0jeSI3LzxvJWorNWYvemRqfCExLFRpK0N0WDRXK0Jlc3UwUkR4RUU+SW9TW0RkPEpZKCZtZEw/''@;'; put 'put ''N1V1VU4mJDxlalg5WUM6fHlHKGZgO0leLD9oJVoqczVkL0BpbjxQdClqYVJ0PkdQcVFGblUha0p1M0dTXXUqeGxeX2dZUnAke0JidCgyQSkjMmdnWShtSURhWiFMcVskdiEhPTN3Ml4xI2thbjdFdVckTz5jSTlYIzR9ZSI5bipLSn0xVEY8SzdtYXtxcHkvM11UKEhgfjFEcXs+YEIuJS48QFQ7''@;'; put 'put ''fjMvbGkkR0wobS88cE9sVmU0RUZkMClAfjQ6SjYhRWhkNVt8OyUrWjxEMkAjIzA3QXVhb0dIbXtEMz1BVVVFRH50VEYua1I4MzxGN29hKjBiO2c7PnE4NFMwa2YsMFAqJCl5Lz5pXk4jXjwkPlUrdSFIM196TCpTNWxyJGg8KWtZTjkiZFdybW5MVk4qe29NViNtV3QxQEhyWjlfVkcwZzFbMmJ5''@;'; put 'put ''WUtJYmwjVHB2Q0c5P203VWVRJDZJOix6WEp+RSNbZDx0RSRrUSp7JVFaaXcyLj9kd3U6L0xYQjBgeGckUSkvSlVtRFlXV3hZY2xrNHFdZHkzaTEmMVsjREpKaXxWR2Q7fCZqTjt1d0t9ZTdgbUU7VTw/IyNfPCQ5KGwjKiVeSXReeWwkLnd5PFBqXjxkbl5+SjtYYTg2LyhLKlN0R1hUX0VQekFP''@;'; put 'put ''ZlU7K0FqcSo0TSl0fDNNTUw6fDl+OT4oYzN2MSF2Q187dH01SmY4NUZQOD8mam5eYkpVNyNrJXx0RSt2cjRIaTNzVkJYIzF4IjlMM3lRP3c3P0h8WihwWkwybTZGMTksX1ljP25jWF9QdihUSk52cVNaYE5HI2wifFNNJGpwN1drc19mUntIVTxCIjM6LHJVMzpiKihyeUxGLn1mWF5MQHE1c1g6''@;'; put 'put ''cD5UPXNnWkdiV2ZqdmRvdnZYWDFnVmlEUX5ZKnleank1NzptTElvflUkQ3lHdnQyQDNaQ0lwV2hZRTozNEB0XXhgKHAyO1c0flQ0VSlYLyozK2I9bjhZU0clfSp5JXQ1aS9UMVhhXztnLzNQVCZmZ0o1d0Q5aGoxRX0xTXBCJS9teTJYcD9DZy8jVnhtcGRIYiI0UjVqZCwwNXdWb20jX193PylB''@;'; put 'put ''WzhBW1BNYSM9fUkuTzt9RHAvcilgIywiflpSeCMwJSttXWV5SEN0IS8zP2p8ZWElN3MpSDFYRFVwK1ZfVlc+d1BFVFFKJDd5V05RQXV3WVMoRz1NNWZRTzZeZ2pJOXNTW3k4bXhpSWFfRT1VWEEqS25ROT1YKGMpXjNBeEdARGp1T3E+fFt9Z3MqQCJRbXA1YSg+SXFDcChtNi9+bWxhV0s8Llhq''@;'; put 'put ''PWYmIiNSbExhdXdkdlNEfT5vdGB5VlJmQzhJa3JDVXlaWSRwaHh7Mz8uaUdNYXpFfV9weVo4Om5LcihuRm9iW2tIJH47bCF8b2hZUnV3NHdaLDJOeD41fjBwfSt5Z28zMDRoNlhWTmB2d2I3ZjFuX21nWnE3UHcyaE5rQFVnakclVj8lTG1EelFbUVJIVDVwU3JSMyp7LnZrdTwmLDw7Nl01Pntn''@;'; put 'put ''fVQrXT9NWTl+Q1liT0VsV0A3I1d3V1FKMyZpJTlaSTEhNX5SRXl0QzR6TjVOdjtsckE0YUpvZTtFSEJJQzxqMyF+YnFoWXI4P3xpYVIvcDJlcEdBTGZsSSNrYjJRR119VXlEdFg2cjVMOk9yQSJMUD4oOl5JZEQpW3E2aG91ITckaF58SzpxYWhtNXFzUWUvJihnJT42SDFfOmtFOTtrfVU1XztD''@;'; put 'put ''eXR8XTAzRiMxbGhZS1dMd3dBeG5afmxTSzQ4I3pmaCxadE4rdFFIO1YoYTxKIzpPSDN4SlRgTG5GVTJLVkEuQUhLcjo2cVl2JkNWejxbUUQpRHd0R3xqNFN8PWhgUyM9UiIla1M9TmExY1BpdHU6OFRoO3VjZywlITE5PiFpLlM8Rl1HdW1XP0M7fjw9U09ZXUNpc2kke11FNVcueSp6RFhiSS86''@;'; put 'put ''IyFwJFU9Sm0vc31GazYlWVFyfUZ0ZCY3K3lmaTJkKGlmeXllXltpXWwhIzxffD86YVR+Ykh6fEA2TkQzWF5ZVDRufno4aysxdDMjUlJ8ejd4aHlMOW1QTipMIzVZUzRsVldVUiJDNlMwK0dwb1NIQ1R2ZjVjLztrbFpramVpKmE/eGQpOU9vdSs2dWdeWDBTfHI/Sj5HJSZOQzBoRlNAbDh9andg''@;'; put 'put ''cXw/OHIyWFtRZmdbbGB6NWEyIjJIP3NiPFV2bCMxYHMzcjw+SlpNM1EiJisiP1VBamxAZztwL0k9TzQ7a1IzOnhNT0suTCx0KXF1Uk83fSNsKjZlbzFwVjRUVzIxRHdzWkFEciVtbilAbDhQfCtMRUVOUS9QZHA+LDlIOUJPZ10mVXZVMDBCSzxPbit1c2Ypc3tqdG9vPlVyI3t2eFc2XlhkTjpF''@;'; put 'put ''eGdsez8jc0ojbS9ETkRIT2BHYSQyKVp9JWQmeW4pPGE7TUhVfFJ+RCVXPT1PM2lWbiVeWGtRdDRIPXorYnc1O3xgSE00Vk99IjBJU0FZX19Kd1RzdTVpLzVkJUd9e35qIjNkTzJDPndVbnJ8JWtEQFtyP0oxOiM5S11RSTFGdjs+dDpYMjg3RlJfcn09b2dEJE4qSGYyWi4zYmM8NExLRFdIMEAk''@;'; put 'put ''fl5NaWJVUUwzUzQqYm1NRU9IZmY4NyM3PCRNLy4sLml0MHBKYD89bV5rP0h0U1VTWTYqJmZQfCVfWGg5O0peRENATW9SeWdkRnhrY0ZXcW9SVHxeQ251ZH5hRykyNjNKfU1semdaRUhQIi9iZ1tERHB8WSl7Tnhtei8sPUNAQitMWnF9OlZLJnZWPlJla0xWdTJ3RUQ5VlhyeSZgMXFIPiNCXl09''@;'; put 'put ''I29MRGIydG4rQjwoYVZASFQkbVZjNEoqcWFXSGU2UmNLYzNqaUxMKWBWVTJmal48JD17UDAzbE1XMy8hLkFzTDpLeURoTzMuXlpoMjlDUDd6UFJHfX1PWnF1eHBOUGFQKjZldGlXIWgyQWRTcHdFOnN+S11OPVAvb0kuUTVZdDh+QX0/OVdFT3FAY0hJKUdOY2s1MiVTKEhlPnVoKDkyfUxOX24q''@;'; put 'put ''WjsoaG52YUUzRip3TyFeazVPUEp2L3R8R0p6S21JejQxTVhqJHhvd1tAcGUlL2N0aVEsb10sQmBPPVJIYzUjSXh5RWd3cllBTGxzdXEjcSpqKXRQUFZKNGhnSmhQSTByMExPfXEiMEglbSMhclJ9T0RaeVZ2UFV1djc+ajFtPXdLUFElZj1XM1s2aGQqRWZbKEdhalZESVpYZ0lhP0k8dVVaMHJm''@;'; put 'put ''dkMjR3soVy9kT0xYZGYjMDBGNGkkY15kNTl2JS9XZVlYcHFEYV1SSiptZk5be1d1ImZlWFc/IlpJamt9a1A1ZVpkcSNHP1lhMmZieE9nKWFXeEpxNk1wW1o/WytFMnJJMG5UbH1iOiouOllYOHYzaGJvUFgxWl1Obyl0LjVwNFJ3X3YpYCRoPHxHSjlaVnBRS2NNWClUcy5nPCYlVV5gZz13QzM+''@;'; put 'put ''eHkqYlU+W3JjQ1ZpQGEqK3ghSDoxcm13RyU5fTEmUSkrOCVOSClXcCRESFFwZExgKjY/MTlwIm5KcFBtdCJ8VFQlUSUoUTp1LlMudUFbQ1IzfkxTS301WmtBJGUzYTtgWDFle0A5JTE+M0RqRDJLSFg5PSJ3OERZMm10OjVjSCxoQE5lNCZWdGUzKWF1ZHtVfEcjImptQn5vdEd8LnUvLGFMbGdd''@;'; put 'put ''cnJqVCMkQiFoZFVMWl9LR1l0MkVTWG8mdntILyUrWnJ1Tl5aRCZWOTM7PmpBaV9JfVtaIkAhIyVgIXs+Pk04flAsO05ENm10bTg5TVRTejFvMyg5SWRnTHtfPFRoMmBSNzB0YnJDU31wMHdwT1piTVd6Ui5aTG05LmhhaTkyfnEkWzZxOm9QV1MieSohQHJaQnRwalhqNzskWUxUb04pbUtlKXxt''@;'; put 'put ''ezpaL19bR2gvQy5XbSxTVm5rUCxFLnUqQyliQUgpOi48MHlYNE1SNlhwWU5jPVUrNWEmWi52cCMuMiZ3TlZbPT0/PkNhLkFQVCRmMnArfUtmbDk6cD8pU1Z8PVBUSHwpaiU1VTcyP0RYZn4oWyI0ZGpmXWE/XS5GM3dacStnQm44YWFqSDh3SztJW28uW3JGKyJQSTtmU18yaiFGO1pFZlJpTnJH''@;'; put 'put ''QTdLdTArTmJaTGs2KU04bSYyKmpYPiFLPUhxI2UvTmRuSGZLfitYYkQhNyQsIXUrZzwlW2ZhSSp1fWtJRm0lI3JBZ0IuSTVYQG9oOFNtJGohY3w1ZHthNHxSP24/WWdFVC46eCtiajl5KlY4ZzM4Pj8uNmxCZ34xXWZTOTdoQSRZUTVUSWQpYi9NZ3R8Vyk3LkRZXyY4NitzKlpINyhheWRZQ0Vu''@;'; put 'put ''N0U5eUhCL0dxSlVmb3I+UFlOcG5sKSFHJi5XLnNscGJLVi9HaC55OWwzKT4ybUljUSkqSTBSWDF7fVVBbTgjNXF6Wkhofj57YkR3RjBQTTMsdUZBMVgkT3U2Rlsxfjh5VFZuK0ptdS50aXBeTntSdXo0ODZYOiw7XiFrLHNodmhgI3JaNHlkQW1WQUp1YUh6fjdsK3hAUU90PXd6fiE7dXBKPFle''@;'; put 'put ''cWp0VCMiWnBmTCMhbmxQPUlXdEFHQSp3fHdmOnBsU29xfnk+VVBGJihZL1RnPnY1JlIlUmQzbV5XMiVpWVUoUUowV1B1bUNjO3ZeakNNfi9rOCNNIlkpKTtkfW0mWSY/JEhJSXA+RnZOdDAvfS8vV1FTQiVMSmNsZHtAQWd4cF95dEI9ZVcwRi55cnk0NGNwTHhfSTU+N2w4KnNzcTJaMHk3XjQr''@;'; put 'put ''KTxkRmVaL189R2JpaE08RGhfakFud1kzcWlvXShhJW9jSUo6fVQ2JXQ5eFpZT318TW4oUSp3eV9tZzZra1BkUGlOLl5PKGo3ZlAyQlBDTUlvQEtTMEBTdz5qTVVzfFk+N1tVSTs9cnIuT2ZbMitYX3czUU4/YUQvRWZnNkcyMnkjKjlJaEc4USZfWDtiZ3YrRk01ODNUSW1EX1RqLzkkTVQoeFdA''@;'; put 'put ''YmFQbiRLQG9sXyFBYzV7KnJYaEtkZWNaNnRiUUMqV00rW2hxdXRAMC80fU4wb3dqPk0jOmp6Q0c6MGczeng8ejowTn5YcW0wNFQhMFVmNTVyLFU+azpyIm53OyhmMjp5WHZ6ZDpjZC5dQG5oYmNWMyEiJTNiVkNERHtdKlhka2BsV1ZOMG1ZQ1hva0E9QUhKTj5Eck5AQD5OYWMqcU9sJWxleHhR''@;'; put 'put ''eFtMJSN1VmVNV2p6YWFZTjR1NjQoVW50Z1Z3fHZFKyhnNEJnSlp4azRMSl1NVls2LCh5aTlWeV08RD1+S1pwPHFCaTUkO0RBcUNZI0hUPzBjPUJMVFg1UnJJOVZYV0V4cmp2ZWFIck1EMjBnPGxrKEsyN3EvIzNYWXg+IlpITFpDdC87IXpBIns/V2JxdnhPOlAoRE1hYVJCZiZ+NDpMVFVhNy84''@;'; put 'put ''ISRHSGg/WFA7Uns/UCFBVF8mLkw+el9wKllOaXkrNFYlP2BROWE+dThvST44JCJsflgyTyFteCtIfjQjQkhmNlNFVjddOHhnM00lUzp5U0IpXV4uKG5CcXVlZU1LPUw/PjdfZyYlOzYkQFI9YkYpNjpac3BpS3IrMk5Hek5QZnMzfjZmb1ByQjFYVGRLTyphWDUxd1BQRClvfFlvQ1pmK30/PHNK''@;'; put 'put ''Zk55d3NOcnF5NWExZCk6Yn5vXmxwXUVLUjU6b0JHZEV6KG9gc3BSdlQpYHw8YE9VVDI1OC5rOGA6a0JqXVBhcWtaZFB2YWwoL1RSTitSVDkzMnZ5eXxidnkoVXFYUiNUVEZORiJ0bX5FdGloJC80UypRMkpkVjd+L2B5ZippNmE/cklhREJNMiszPn55SSFQSzxHaFhCKz1JUDNFUylbW14reVMw''@;'; put 'put ''IjBCSWA7NylRXSUiMlUifDQzRSpaOnRVO2dXZndWWFlnVUpke11dQm9fTFVAZmx2YiVlSng9VEVVNHRNVzlyYiQudVQmfGMkYVkkWkdtOWdzVTtabl1ORywkc1UmNjtLdXE7N1lmeC52ejhJNl9KM0x7YSspIVVfPDxlWERhSjZ8SDFYT24qWFI+L2grSEheQTBMUiIlez5namFJdiQ+dFpkMk1F''@;'; put 'put ''IU9wS017Qng4Vzk4RmBXKVk3LzVlSX0uJipVb050RHdRdXZeQ0NdVyo8LipzZ2QjYVIpY2w2fThVUmpeN1RWM3tTd01PI2UwPWM4eUBNWHpEPGhfb2llaCFLPi4vNz5ha09AYWcwTE9nQG9pdUo0bH1LLjh0ZWkoYnh6NGMlfUY1O1lUKHREQzpnPjhmWiFYYWFyOk9xRyRPenFvcHlbd00xPyo9''@;'; put 'put ''P1t5WlJCdzVfISs9JnZtd3xAYSQmQDdbaHxnUlFNL0pnRH1GNEJIQS8sLHgvUkttJVR+PzF0a0lda2ssMy4jfTosK2JQVHNgeGpkPnRfWCN+X31mWiQlPFcmVys1XjtUMVR5Kz1eYCokPCohIVBWVnxqZTR1aG0wfC9OfEhpUUR4ZEl9Z1JNa1gmbEtneUxwJSh3UlZCcWZAeEZPNUV8dzIxTC5Z''@;'; put 'put ''IU9UQSEvZUVzJlFGMkJbZm84bndbLlhhNXJOZWNTRUVRO09ZdVFsRFA/UiQwMWspVyJeX0s5dXJuaGJLMiYqKlFSSSQreyZoanVuZFgibl1MYW83bz0reElNeG9FamZbWSNLQUBvSn1qM1J4eVhmPDJ0Qk5vMTA4Sz5iWVQwaFAqN14/TyxFe2M7U05SSU8mVGVFamZFIj5KTVJWLCZeSmZseEli''@;'; put 'put ''Z3w/Q15pYFdEbWR3YWssPGVHIlVrPGRHPDVKMCZJbWUhTWdqPz8rd2k9P1dXWDMwIldwellvbktzRU9rOC9uQnE6JFdXalc9MX1WRGQhcXo4Tjo/JjhtLEspLiNWV0YvPFU/ZCJpRTF+M3hGdTorVl9zJnBiMl17QzJ4X3p+a0l7eGxUL3oweTdTYC9RcUJ9OzZzPGdBO24hPkVSWUVRPDVTUG1S''@;'; put 'put ''KEJsanI8QkNrPnkkMzpiYm52cjd7YVoiUjpnNk4lOShXZW85a3UxPWlrUTI+Sk52X3R9K05fJjdQdEVhaCtwbEVpeWJlYXpDNF9nLEYuLHh8Ylp4enE6blczYiFLTGZ3RmFscjJGcUpEJS53dUspRmExXk8/SU18KXU8Pk5pWzpQOi5ucSokZWptbzAjLH0kdHU3X1AhIzsvfEc5YStxemBWXyYs''@;'; put 'put ''cVA7SmJeMDd2cTNSKFt5ImBCKVEpaD9ncmRzfjZoKWZ1V14uXk9td2x0TXo+bV1hckEyR108PywuYmdsUU50QiZIUHBzb21UYyFifXc5REhZXSt2MFFVMy9ZMkh3L005fm5GaCVvWyo+c09fcHdyYT8/VTczdWRTLilUeTxHZjsxOjA8JVA5RjRoLEAoRCRZPkcyKWhaSmloLn5eZCtSYlsqLmY0''@;'; put 'put ''JTh9RTNGeWJKJEJ9YXZYQT85ZDxPbnhPYHt8fjdxTkF5L3pCOyxLWjZQMG9aVkVPQkRvKWhrX1lVeyRSXjBnJXFMbk0kVngzYUlYLkdxJSxGUHp9WWtsbzxuMF5mTDVsRTZobEVYQEArSTA3dV9hPDsxL2opWHR+fklsVE4+UC5CV2piMV04WE14Vl0wRGUwJXE6VmN2RlBIZDZYJHE0e096I1BA''@;'; put 'put ''Wzl2cDcrOzsjMj5mRDVucjBFamYyZDxYKXY1ZE1NWXlwbm1SL1BkY0wmfTBvZiRFY3VeYypvSkBxWHowckpWKWkzIU9jQ293cCNXZ1IuJFM2aH1WZjshVWRMT19UQXBCUTtaU25dYCk7c3Q3PSNSZzhxIn0iXzJ9eDxSR0xWYjUwSCFKSSlDckMrdEZBVjliVF4kWSZOMn19bVBvV3lWUGIhbiVl''@;'; put 'put ''RiNzL2A/US4xWmZZSzB1Xmt9V19FJXVVfT8uQFRCeis6Ky9FTCJtJGt6UClkUmV9OVRESzIxSURwRFVjJkR8Ii9CTk05RVRCeXA1fV1gYCU1PSJ5fXxEbFQ8fSt+Llc/Q19mZHU7Km4xMFgiezg3eEw3YFJmZTJoY19KeSZiZ1YqVj51Q0NiKDlsNDVBfWFea11UK1dpNSgqLzJ5OCMhK19AMHdC''@;'; put 'put ''dFoyZ1pHQHkvRSJTUTVQalJUdT5uKDklazliR0lHdFt7NTJsYHkzXUAkXmxqdjZJayspb0BYYHJpbTdOZGowZDMzdHR2VFhCWUpdVlZ2ZihveG46MC4kVClxRFJ8aVF5bUcjNmFwZFkveD1TXlguX2UicXJaazRfNn4ldClQP1drX1M2TT17WWRROmRHSVglSUNSTDN2ak9mRGJiWSVqM29ZOnB0''@;'; put 'put ''a0hzPz5oLz8wclM6dGlONEJgbUt8N2ZGVUtJPk1NRSRiQkljJHwoRl9jXi8xWCROOzFQWD9nQz5vIXR2VVkrfFFiKntwQl5RfGlIcnlKWSRBRTljWWM2JjNZdVpEOGBYVmFHO1lzKEswdHxSU2JgKlAiaiZvez83ZXl6MD1QcV14NWIsMi5KZXtpOHNVWipZdnJ0aXN4fVpneXxSRWpAKVAvaiNJ''@;'; put 'put ''fm1DP1hTSi8hazN1MDRFUTp2QkMsPCJEV300eS83cV5hUSJ5QnVwVHFobTJ9UnBUSUsubX1FWStxeS5mVTJHQkAqUUd8cWMyNCMwPUJVMlUoUnY5O1l3VVV3PVVwa2hbNk4xND5wSXYhaC5FTi5bKEpHfSMiUUtCblUlc01qbD5gMHpdZVZ4ekFiNSordE80Z0AzNnZbbl8sSEkqNzlmWyN6UEIj''@;'; put 'put ''Mk92P3ZZLiswIkcwZ25EZyFeISt6e08lS1pTb0UjZl1fUUIiY1BxLEp3PVlEazI0YW94KjEvcUhdQDhATkdHeDNRPGorVG4yTFhaa0k0Y1lyVFlLRXdJKl9UMylFQ3g0O2l7eG9rNVRGWXhAcEI5RWBuWUk0NW8rY0glKkdEVnZYcyNkaGpDOS9GdXpJS1lwYn5XLExzX0BtYUhsR2p6cVFrcUd6''@;'; put 'put ''XzpFMHRjaiVTTVd8dSEmJjNYa1JXKV00V2ssSj42InpGZCk6YGhhUz9bZmNmUF0yTGpkNnRKK0RxPTt6T3B8e0gqdEMuYjBEVTpzKCZSW05oeHYyZmdSJVQxeTVeZTtvWThfe31gK3VOeVp9ZVl7aUBnN1h9aSU5dD02QHxbT0s2PnQkWUJzJWw5XzNzJWxkQHgsXWcsOjxUV2pebVdHWCtMbXl7''@;'; put 'put ''QUdVOGBYfDFRVD5ISE8yZzxuPW0wdGxoWm51P3BOS0lrSEUvPClzQykuP0ZgSy97V2p2bDV3PTl1Rk9TeC5UaVpeblZHOkcmJElFNUBCX1o2dCNQL3gmRClSWmdEaT1RbzF1Ljd1fTdQaik5KyN2dGxqNSEwejY3SE1ONSl2NCk6LHlGZ1gxalJsQ2hMYFV2MGhJMG1NPGtaWUs5bjNrWjQiJUFa''@;'; put 'put ''cSpgMCo1LEMybX19Kn5Tby48JHxndFVZVn1ZfHxlWjQ7Ny5rbklFSC4jNjZ7cXp4ayV0SnIjbVZLWiwqaiVCd0tra1VZfDRwUXw1ZmNHcGs2dmUyWkorUVFuYkdUSGlkYygiUEI3UkolYm9VMWF0S0U0K3g9dnZVekk/N0EiREI7IjllKSNIZGtrY1IqYkRFQS5eZDNFMHlFaDdrKjtXQm5SXjxA''@;'; put 'put ''VDM2VTVmP29RNklwMCR0XjMsNFtdZ08wMjRgKj1BXW9HYWpUKUwlK09BQmwoJSY4bX5eUldlVzdwI3ZkVFZdfGFiP1B4WHM+ZW8xM2UibjFwJWxoemRqTF59Yk8jblVKJS5HejVsOjdwKSY3UUZ0e0RwX3MqLiY3c2BfR05zaGBZa3Qzfnd+a21UKkpKa051b3wuQFFBcjBAOWdrZSRrPT1PSFoj''@;'; put 'put ''TU0+dyhQMVBMJGZmeEcqRHUsbD9USz18OXkvOHMxPntocXZqYk1bWl02fC8we090alsxK2NAc2BrWnchOz82OFFYIyZjZHA1KX5LP2VRU1BIaWUoR3poJUA3byV0X0A7Qm82cTJLaXkiVFpML25ZSSIlYS9ZQDBWPSpfd0BPe0tMZWRwJiEhZnlyaDZZbUdDQk0hUVclaFpvYEg3QnwqfVJJPWo/''@;'; put 'put ''JmVROWR4NEY1b2d2flRHZ3A/W0cyJl90VzkmKDlZaDJfO3tVfHQ/SEtvN0FnKVgvck95Y1tiWUxhcnh0Pyp+c3UlPHg/YExYQGYyfj9bMjBCVXY6XmtYJGhGKUw+Pyl6ZipCQXUuTC8oby8hbmB6RWIoVSI6NGVicVBeU2xmJCIpaS5sPDFxW048aFowfFRNU2xDM2JFcFRPRHtXTV5aMHk0WEgu''@;'; put 'put ''bkhrSCFTRW1DWXRRV283e2BPWDkqTz8qN19rQztpV3EiXmN8RHt0WlcoJTwiPXE6SSZMQGB2USlJJGUqPT5nOkpGJWYjMzVUfmgsMzk8JkdTeSlzNFlVRXEpMyFlZSZQam5LNlEzUGRXZ0s8Q2plNG9RQT8sQ2ZPcHRNL1daZk8iSChbY0JYUkNeTTolUz0mWHZeP2Y8ak4qZG5GKGN2SjQ6Mz9Q''@;'; put 'put ''O2l3a1MhL2Q6JUg4cjN3bHtMa2VieEg9ZmNCbDxzUltPSlYxZixYPXoyYG1SezZ1Z3s8fF80dyx0Km0rZkwseDJvI1R9ODxdSiFZPkMhJDVmTkdRM1dxb3shdCZzMCg4SmlNZ2BwU2FBQndjPDZNdXo0SntYbi44WTNYQGdNSFdZcSJiVkhgeWk0YzEpIU91aEV3dlc1MktjdXVQYSNULjExb1Em''@;'; put 'put ''XSVjdXF5dSluN2N1anNeOiM/TWZUfV8wXXtaeykpRihzSD5TZilVQHk9TU1TTj5XR3NJWDtDTVNzenFJJnguLFpPTE55VV1TV0U3I3pFPGF0PERld3IsLDxydlpzLG59eX1INFVXI21VUlN1cm5MeXFtUWZlKSg4cVBLOVIuRCJMdiprdmJCaiUrfS5lXSZAXWtlVz89eHZsbmtBM0V+UH4+b1M1''@;'; put 'put ''bHZXSHxVMHA8JlFNIWUyRiZDQlJkIk4rU1d3MCYrZ0FkRC5LIn5PUnJEb1V6b058WjY4Jk5WNj1gIXElK18lcE57YyZPMEddMlI5Y2RmTEFCPzQwNjdEJk4sbUdmI2JyK0dqcH1uZkt6QThsSnhNN1F1LldqLHttSi4wSn52cVBne1VbKykkJj8kPmx+aHA+PHBoZTx7Z2J9Kix+N2BXeElgcUJp''@;'; put 'put ''TWtCWSpJdFEjVV1qOklCU1RufWxJQmozMF86Ki5aeGlnKDxyUjJNUF93eks6OStaPldpNkpMLm1JdUJLeXQhQENZM2VUS1pNLnJ8cUMvKHkpZ0UhK21yUnxBRDo1eERTKmdtSHw0WDxiMWs8VnpqakE6SGRhVCZMJUR5ITIoOjB4UGROPjxkPGVhYHFHUiRJTzhCOT5wckVnP20vM0lqV0h0ZTxJ''@;'; put 'put ''d2xDfT1jYXhCKHd+W3Izajo2eUI+TCp0fF5pJTVsWTM/cj5qMCI0cl1tRyJ9QkU1enFPbTN4bXpNe1FqKjtlR3ZtU0hCIiRxcjZ9WG9CfFk7WTl5Il1RNUZFbDU/MXV3Xj0hQWRTXlo3UENgWGxQbmd8NjdPfVZifGMuKDA1KmUrPEVOT3NAN3ApKDxRMzs+KnVJfjpEPW9EWW1YZ1ltPEQxVTBi''@;'; put 'put ''IWEkLj9YcW99QCZzRlFdckJvWnkjcz57VGs0eXIuMD9tQEx3ODsyUmopeGRBaiNfNi4jYzZCXzckOEQ1In1gZWZnSy9kJXU/bWNuRnJ2VXdURTFwbH5YRiFfcTY5cjR1PjFqRXApUlU6LlhSbjs0Uj85QDNyNzJedDBCa18+KW02UixIIyw5RDtGMy9gJmVWJj52RCxpbWpaU1QyKWVdMjtXR1BC''@;'; put 'put ''T0x1clIjMiIuI1t8VTY3YDZ9V0pVKkp2fVkqKmtoTFlxRkIhN3osSk8yWGVFSWIlTix8ZXRpRDx3IkwwIVt1ciIwMDV2ZXJsRyhCIUZNMXZeMXkxbzR8LGgyWDxgIzdycm9ydWA9OU13QkcrYjFtMFIkKDUqeHRfOVA/WGVQJHQ5XmtgZEU7RXJePkloSDtnUE9uUkRVN3JXYmQhZmcsQylGRTRZ''@;'; put 'put ''PmkyaF9aT0IyWXtNN1UuJUAqdzI1KztWIy4+bDZFNFM1ZG9kaixOXzN9d3MkKGZ7STk9RSledklQQipFW3o2ayxAYXtFZXRqJjZpaFNgWHJHVS45RVtmNHBUQGBeRmxxTDgoZkgwPGQiQ3lnaT1VRm1gQzRSSTg3O3M+d25odUEydnFXKkRnSUl6d0F3Zz96JX50cyk3TDcyNlNIUUUofE9JfEZv''@;'; put 'put ''RCs7XlBfak0oc2gkblZAKCgsWEtSNzFMQld1QEdqbXBuRX1uOWZ8Pml9fDY3TG5iNEQ2I2M7bk9HVTs6VHlfOmpDYjw2NiorNX1iSWB4MVVrKl9JJkxyeXY3XkdFcyk6VDpsMTNqNSkpdFQzKVEzbWchVzYvZVNRdzUsfUo8KjlyIyM/b0hvK1hyK0BKW0tmbDI5P0VYWV8wRF0xLHJ+aDlzb044''@;'; put 'put ''dEZ5NVVvXWhHOlN6bjB4dnhWW3MqTiQhZjFDVGAyYypRKC40Unt1R3dqRDVxdSM4PHVqT1pAenMkWCxVKTBbMUEuWmZ8YmwqcENZXS5sLjxmZz18TFImdFE5KGBjUWQlX04lfTg5RFhaTXdAMyZ+KFMjcSx5bE9zdGg2ZzVLNjlCY3lUZDkqNH0vQFJfOWchSzhwOHkjZ3AzRWRuN2ppKyp+dWhf''@;'; put 'put ''JDhgcU9aOD9qNndnLlAhbzdyQmhUXix7eFJ+JUpuKXdBSy8rSlh7K2V5ZW8rQU5iblRPWFY9VVBXckNoNXc0OyRdLGVwcU1qQiJST0htRypCPE08Xi5dbjt7azhwfmY0WDM1RCJbbkRfTCFHNkNLW3F2ZTJBazYySzRiQC4+XXFwW24odCRfVStxNTRsZVdeflVFWmk/d2Y9VlkwJHNfe3M4MEtk''@;'; put 'put ''SDksdSE1PDgjXXw9XSs1SUYmOiZZOHtRfEJsQyttN206Qy8iX0RYVUlKV0tlMz1fTkY1RjliWDY6Zl9uWVpOXzomKGZ3Z2RXMk9yLyV0Oj5+UUovSl8kVEEpV2EsNGpkXjQmPzZ5bU1mWkpnI2xka2tqOnxjPW5VV31BQHpJXzh7SXBMejFUQ2U1PyFMY3Yye31Fd10ycmR6P356QCFQLmlpdjxK''@;'; put 'put ''e2xCJGBANXpkbnM7RH17I3tdQzNrWUdmQzFyalM5ajElV0ouMWNFIlg5N294SmtTUExPYEB6PyVqQHIjZUYkaFVRPSIuTFQrdFllcj9KSClDMkEzPXBXIXdMNng2dHZ+cTBMN195IXR+VVtjNz5CSWZNPnBJW1FMIU19VitpNipNcGIrL3tpW0A7fC58UD4qZ0xOUGlFIktnQSUqR3Q1Qn1yMUUw''@;'; put 'put ''bXExbFkyQzE8bXVnNWUqKFdFYDB2OFJteilmTmNDYGhNQkBeJWNwJSgwPTZvUlZgUk9vSU11WygvMnEyd1VeUDJ8NnhjKXZIP2g6ejAsYVkzan1fLEJyYnBKTyJhL1d4fjV6SFR9ZE1pW3t5b3FAeHBnXTphfGVWdytFSn4xVlhLSyJhNT50czVjVVlUc1Ezdi8lMipkKXtPdixILElmbnYsb3tY''@;'; put 'put ''byRPVUV1X156PE1JVkA4Ik5YV0NzPS8wVTFiTDQ7PyNvJG5pO0E5eXk8NmZ4UTw6TmpJZGg9PFBrSixPJFhTa1hKWyJWJnthIztTOUxJVGoyOWB8KTU+R1B+PWBHY0FoTUw6O3A7PnlyOzckVSg1KTM7SUlaN0NCaTZncnpSYT49IztBeUVWQjVPVj5LTHV6aUJxVStWKldCfjFHUE5vOXo8NDJt''@;'; put 'put ''VH1TO0NDYEAwTD46QHoleUc2VzsuXS48TGROISl9aXVCVlc0aSRycGxnXXM5MjFxYDk/OCljRWZaXloyJk4pVkEidXtydTNjN0U2ciEvOiRZTlQ4Tjw+RU1FKXZGR0khPWYuNCE1JUx8eEEySXc1bHBOP1B5OV5Waz1rOW9ubT1sTFBAY0BHRUZyJFdOY08wdy9KeTppQ0tGUmtdIWFoKik5ISpT''@;'; put 'put ''VltQOnhMUiIxZSNCSkFMdHQ2O25bU007KWd2SjNuUzU/WShKYkhQLkIsTldte08jWzg4MStaKUU2dExZZEdoR1AvLHpVMT1HPkd2SXV5YDRdb08oezhKSzh0Szw0YUtgISwkPURARlJtQnw0K1hRQXwsMyo+bGA5YXRuOUM9aTh8M2woVSFMK2pDb0s4UXFddFRLTmNpQGFAPysvJGguPnhweGFz''@;'; put 'put ''ckZxfGNJUjEhUlM+IlAjWzwvbW1wQmhNaipoV345MmFqQ0RjUk9KMTx0V0shdWBveDZzMigwTWlHMjJkSkhHY0AsOSV6T0xUVipmPG4oUnNuc0VdRlI0UGRvMTlpeiU9eE4/KWZzLC9kNlsmSDZle19TVChnREFye2h1KzpjSHB3Z09lK18rK3Z1YnNWRWNQTHlZfiZHVytGRX1Pd00uMHxoPmd9''@;'; put 'put ''YGhvWXptc3UoclorbyEwdVE0TiFOSVBYOlswW0o9Qy5FSXtZKW03aFF0WltCXmJ4MVheTkhWPT9vdnR1QyUhfjBNLFQrMn5+ay5ZfVl5XzgxVU58Q0A0R2ZReHxNM2JAWT83fmAyOWl2JSo0Pz9raEBqLE5HJmVxWWdhZiVbKT88PFFhZUUpP1t2dmdLWnJLUVUsYFExUHAka1BUPmBKanRSPl5m''@;'; put 'put ''eVppR1lFQXQsTjZ4TVsuOFB1VWZnT1Q3VU5pQXlpPD4vJmxqdWhAd1thTkxjfnwmRWNuVntMXlFxTEBGfUUkeDA3diFBJFFIJkBmXVEkcTF6flEwcVloS15GUypqRXIyO0MyZS9VMik8akUhL2RyU3peTmJKNCxIcFVkeGgvPit2VF1qbl96YkE5TXc/V0RQZXRuVip1KFhVRF95eCszXXJbZFRX''@;'; put 'put ''OGdlKWk5Z1EuNVA5YU0+I0pJN2FyYzRMQEF7InQuL3p9bjlCSjtqbGZCbCw2UUhYJV12XllLSlQ8O1B7ZH0jLzZNI2Q2X2FdSmtZb091UnhpSTdzZih2cz0iRmt5ODNdM0xpPEJwfVpJM2NKeHxWVkk2KlUvWzU2STl4d057ZV9jLkFZIlZIKVdRfEJdLH08SUJ4fjAxcHkiXX13JkJzaFhOeTRl''@;'; put 'put ''MzdlUWhyQ2c2R0smRi5LZT98NyVaKypwb0U8UHRvWUlOMlg8PTxCekpXYDFsL2JMVzQrdUFYPk1kSWY7P24wWldHWXZnXnUjdmA/d0w0aF5zLGF4KFZaOlhdU3dsJl15P0R9Q3FoLGRsdS5hLy9GYlp0KWlLdy4kSERee0lfLlA9MzVYbm9kVGhGKEsxM0opa1Q/V0hISzJrYWh+bUZ0ZHZWSTc9''@;'; put 'put ''JH5JKDVRW350XVtHQCUyQ0ouKjZgWj5kb2U5LF1jPl14en1tLG8+P3AzPytnJkx0VC4vfj09ViF3MntvckRqVGJLMHl+YkxVKkd9ZGJqRFp2NDVLTFVeYmFrQWUwZyJyQFY5ZFBHIytQSkQ1ZG9gKFtvPkQrcUs0d0tsVClhTUovZ2Y1RXNdV0ghI2RZeSYkYnspQTo4c1lFOjp0T34rWFllKD9P''@;'; put 'put ''R1QoVVB8amV8Y1FRdyk1bl15dU93IVRhfXgjTGdDUVM1IW1tQCRNMiJGck1xbyxUbSRrdFE7d2RzU1J1MF9qbF0hbHVSUmVHcEhSYzlyNWFfMyleNmQ9bm9pPVZ4UiR2Vjg9RmBrZD49ZnJbXWI0O0BEZSs8Pi8rcGRALnlXM1lfb2U8ODB8TEN9OWR3K1tCVHxtRHtCYz97e3NSSE1SLkJMSHAm''@;'; put 'put ''bWZKbiZFLiZHeiRpdXJQc3R+WyZ4WnR5dj1Zcy5aeG1qWG8rcWJMT3dzQ2Z1SWE8KHpqe2JaY2FOcC5KZzgmVmwiQ0E0Ozk2R1k1ZiQseHRmJVpjQCU6JFg4JiQ5Y3wlMlpPTWlTJWkrb1l4MyI0XlZiLytyNEh6fHNmZVF1ZW1YVUVrfWczZXdkaUMrS0JpK1d4bUhmUmhlIiZUN1Ndb3w0cFQh''@;'; put 'put ''QjdXdTtDdj5XdmZ0dkA6UH1mVGN5aCJUV0dGamBeKXk4VXlxblpKUF9lbyhReW43JDY7JCshP2Vybk55TVVgJV45OyRgL1MoN2tlOkx8P0MiUnQpIjM6YGh3PEVYOHpjc19lP0VpKGNwOWMlU1t6akVZeHl8MEx1IThwNT50cDMiY1pVWWVmMnBiMSpdNCpCKUU1c09SKUNfTElNSHI/d0hmbXp5''@;'; put 'put ''fFNePnNeQFBfSWFtelo7NW0jbnRfMSR1bFh1WnoodGYre0lJOHFfbzMuSlhbJkVXdWVNel9nb0c8QEVRNWplRixfaSNnWHkoNjUxdCNrK0JTNWtkI2o7W3ZuITBVQyZTMFJVNDU8OWBnTWxHdVpEcWMyKTQ5KFtRPTNXRmgrdGl0Zn53fltwP3dQa1M9N0hdX09CUldEdyFGWERhfW1ac1RdfU8x''@;'; put 'put ''NnZjZiFULCwhZXwlMGhgWEkqKXhiN01saFNFOHVGLDQjOEE6aU07YltXbEs9QHA2WXJ9XUpNW01iOThOMmVbdUJEQUhUPFZhaEp9Nyt6dFdQcCloZGguLFRta0ROS3JVIjp4JEpxYE1daXVAYFtPMnVMLHhERDFrJktMYyg9LkJEZFdVTFMuJW5UZng7WntwO31KeCFZbSI1TnBEKFk+P2h4T1hv''@;'; put 'put ''OExSMTdOZzVrI2kicSF4fmpZb2YlN191ImNweUs+aXQ9USo1dT1pc2RvX3I7eUhBUj1Jc192S0cuem0hbnNueVFbN3A2I3ZHYER1M0FBRm5nM1JoUG1tU2FHdyxEUGxqKztsI2NOSVEvdClnd0E9UEAuMH1xamAkam8iM1cuYmR6MVAjKEI5PVF6b0IoZzkkLl5wNS5bVXUofHplb0BiSy59Kk8k''@;'; put 'put ''ZnE5KVFhJmR9eEQrIS4jM09nWnpUOGkhVkpfSTUqdSV3OzJ6VHIsbGxGIypvZ1piYS5iNGk1S0MoLF96UX4jL15NRV9dVldoOmwjcj8rNS5BPl81Iip8WDAwTXVgNSV8OT5TWWp4TyRXdjFmSn1DLDN0UHdsPS98YzxDSHxAPCMwem1WK3lBVk8+UHNPSDYsQU9qM0hRVUI/ayJXM1tRYF8vUD0/''@;'; put 'put ''eTJAQX5hOEFwWDhZPVE6SFVOQDwiYjNqNHVxbzdMLi5RNERLfH5sRU1ZNndiNG0xOjs3IkVNe111VmttSGNNfVlJOkYmTH5DXl4sYSswSW14bThWbVdWeD0zcUYzbS4qJUFFcElbMylgTE1IWEhoMWlFP2NHfXVdXyFXJH1jb2AudiwxbEVpb25PT0NxNW4xfj4+YCV3UD1ndD9kbF5uZX5xcEtC''@;'; put 'put ''TChCPyVmfj52UHE/OFl5aUdIeWRHaEJMKTBUKTxFQUVleHU0dC40U2NSY3EkJGsjL3Y1RkJhSlQ2Vy5HO2lpVTl7NCovLGQhKyEkOXooYkN0OHh7YDlSaUZ3M2k4NDJvKVpIQ1F3STY9OjF4aE9vZGd0RF5gMkIlMChUeSNpQlAqbE9SLHRCJltEdFlQcmApVHQvMD4pWTc0OkxqLG4zWHsqTi5J''@;'; put 'put ''LjlLPkZoNHxlXWttZWxHNGNwTDxzTzpJR0VILnplWHVkU2oxNT42SSw0SXc4OkJUWztPSUUxQnk5NUBuaUNDTSZ8NlIzd0hNbzUwS1g+ZTFCRFk4PiImQ1lxQ0IjI0N9RlQ0b0A4TDN0JUFKPFRBVXYhbztILjRxViVqZSFtbkp3YH1GMTg5OTJUKVBPUTxhUmUhNyE/TnBaWCE0Wz51MEwydSVD''@;'; put 'put ''SSV6JWZSQDkqQU5zV1ZBeiMwakoxJUNAZiE6NSYoXVltaUoxaU57e0dWUFRPJX0pRD1eTEB8cHolZDMoOnZ5fVJTVEEmIVpzSH4kZWdiIXpPc1AhZXRAOU9GbExCWT5oLHhRWis8TT1afFgxSzRoZlpuO3R5OTNJfk9NYD9EPll8SmNZRSlYYlJ7YmppRElobWoobW9Fe09dWWtkbkJaMUs6eENM''@;'; put 'put ''THJQQEV0Nz5YdDZ5ak1BZUN0eF1adyJQUENCW199OHd5alN3VX5hQlFjNUcjXWhTdG1HYlQ2Sn5SUDU3UU9GXXImO2lZYGdybzIwWmlUI3xjdCIxZlcpQS5LPXB0WjRIdktNIjxHTnsqVHNFanElKG5pbFNOdyQwbWQ+WGszPTFNY15FWG04VCRdMz5YQCZVTW51MXU0Uik6VCFHJkV3S2FFKSJP''@;'; put 'put ''ZkI3MHZBQExMSFZTbGxTJHBeRi5pLDxyMD1uaTJdMz5hbHgqaTVzPFo/MildKG5vTV1IWWtLYjQ6cyNpKldkUXgwaWtqbSEuZT9Ecj59RVV4Lnx+ezJ7TWIlZHNSPkdeKmdoJTY5NzYvbVUmITVyOFAhWk5aWG8uLG5eSVU9T0RjPGhPT0JWMV5NbTBAeUMsWHswWSRNJVsxQlNsXVUucDROcno1''@;'; put 'put ''IXJGZm5+XlBLbkpKYDg4MVg1LHtsUDkhMmszU15qPEZPZExkYGJnK0JjKyx1Ong9fXJ6KUhITEkuNyxHX3hoSjhmVTQkSmlYTkVfNnNOZ2pKPHJGJGNiJXkwUWR9KFYuMWVjWT40bGozRVI+NnxEWy40WTFhOUtdTVNURG0vWUNQInhpdU5yTzY+JSV+X05KVlNJR2VVe20oSmFdKnpgITtpPlkr''@;'; put 'put ''VGExMj8/UV5lZWlINE0hdi5kVTdpdDt5UTJLdl43dURNbEcuUyZUfEx6aFhOZTF4MytrIV5QezAwMXc4ez1hbWwlUnFpTGcqQzx5UmM+OFR0Ri41aGZBQ2p3MTJDM3d6NWNhcDt5PmFoc2lMfHBlUi4vNW5WWUBCRDdbM1duQUVXcCZFRX01NStkLFNAQjEuSSZYND5Rd1tpekduUkN+RzY1Nkly''@;'; put 'put ''fUFyJSlbTmMufi52ajgwOGIzQz9HaFYyfiFPdF5bRnZyYGdWYGU1cTMjWUY9NH0pQ2R8OixwbkJpNXZufihLUDdgbE95SWAiS3tNeG00dyw+ZUlVV0ZMTyk4PmBWXXB7Jm4hJVE0JnkkYHVASz5NN0dhfGtuI3VWX1kvOVZwW29LUVVPMEZbITs9OjRbPERIJU0zWy90NCQ3VlQhY081XSx8NHxj''@;'; put 'put ''WkB9KnZOWEVBVSxGdi9sVlJrZ3dYcUxISVNbdHNNaGAxTDEvNFQ5K3BrWDI2MDopZWchJUFZRSUmdHN+STImaysqLlBIQk47S35KPF98PlM3JE9XP21XPH1TNSU8SndMLkptJHJUZ1dtJEw7Vyg4X3Fbbm5mRGwsXXZyZkppdzVaKy5rbilMOlZZSHhEM1trdisuXzFYR2RGLExoaDUrZXVDYlko''@;'; put 'put ''WWNkeEptR107b3BAejgyJk14ejQ0PiZ7PywmPiZYfjVCYEs/T3tEZmxAdjk/by9VY09Ha1ZEKnBJdnBUQEorXSFhRXpoSTRNNGBqbVQ0TDA2WF1HNiJuYmVoTnFQUCVqO1t1QjRqVShEYUtbbkZ3c3RxcEAsa2prJmUhIVk3RUlHRXFTRjhbXVRtRnRXOVtbISpuQDhzamg6NXNVVzJ2WVpwS0xx''@;'; put 'put ''OyJAWnxSSE9UekcjdFhtXVE9P31AZFY+W3F4WEV3cG0uKHxxazshV1c1NChSaX0rRT0jWXw2Ym1LOkpVJGViT0dWbEdOWGdCcFcmeTlISUtVMX18Y0dPP3IvX28yQjhSJSszKj9ufV4+ZXZHfnNyXnEySSxqZjFOR0lhTy8vTjRFcDhYP21JdyZ8NUZpJDFfK2xQPitkSVhMaGp5RkkpQkBZeCt8''@;'; put 'put ''a1h3WGIuIzZHOyNHYn09WSo2eWNPJXl4aHRqNDZ3SGhDL0R5SDJWMnNbe1N3YGsvRSkhe1lbQkkvT11bZGM1WixTPFlIQk0+IUBKMnklJVJMej4qOiZAUDJ2RitoVlhoRnRdJH5HK1lMM3dZQ2o1YUIsdiRkL2RydmkwaztWS1JTVS8mKk1wOE8qNVY3Uy5WK2ZyRnx9ITY6d3YzK2VCJEdKVDo3''@;'; put 'put ''IkkiU08yWTlINzNkaGM5VzBkZXc9aC9ydF9IKzduMUhhWTpgP20/QnpFbigjbF1LdjY8TGVmJCZFPG1eVzBBJHppcFh3c1hEQ3VuY1l+TVFzZU8vOlhbW1tyRGR8fiN8THZKM0B8P1BSO2FeQng7NnFpXylXUUZmc31zVkpGbFZ2cllWcl8qdUpSWTwjN2RtLl4yNSYyQFFwW0RgSWcwZUhWWChQ''@;'; put 'put ''MDlNVSNuRW0yPXosTj47W3ZQM3U4dEdRNGltOlE+e2tYXUxrZkgmcEMoaGkpZ3tLLy5mJXIsckh7aj9BdT05KSsiM3Fleyt7ZHgrZF85WnVPVTIpQkB4UHY/YCh4V108Myl+KXtkZlZySmh4XlMsczMzajA3QHZ0d1pTbnJLVFtrZDx+RmBHXXNHVnpnPWksanxuZmk4OnoyY1F6dz5EaVcscDYr''@;'; put 'put ''Zk9kOnJnKX4xSmJWVGhPPCpaTUBraVtHJH00dHZ4fipuYHUybj5OPU9jNT5Va35EUHMuMVpdM0VAI3wrQEsoPFVSJUdsWl1sc3g9SmlGYzsmIm5OOFkiXkh4b2N+UGhwNVdiOD1wOEIsOj4+QjdtPGh2en09RD1ULHd+aENpTW5teG9zSW5iP3N+bzk5eTttRXJBbXVIR3E6eEA5Ik5ZRiJaUzEp''@;'; put 'put ''WT4lOCFTWkFLODBSaSphbnNlLkkqQXIwQmoxP0xKLCxDNH5pMnZLLjFGbSpwcllyP2ZSOl5MMTZ3citxSGd9bz4sSCVBPmswKlYqUCRmTH1+b0RPW3ozJWAzZiQpOUw0V1FjMWhjTXpOall9Lk1mR0pTMjJIJlQ9Sz59Y3Uva100UzZhRXd2L1UrRWZdcSteNH5yI3NIZkhFQT1KVWdRQ1YoQSJ0''@;'; put 'put ''VW1oP2lySz81XS8rXV13I2d3LkZJN0FHTCwlaTQ+R29pJTNGTltzMUI+PyRdJmtbXygkLG9bWihQeDt0Mm52RDE5dV5SeSQofWJmW0pme3U6TXo2R0gwMTg2TlM7VTwudUNvUWwpRTQlYDdTOF8/M201Xy4rP0MmUTspODY6InIsZGVvN3AwfixZLmdLaSgzV24rLntpWHhuSGlCWFhOdXtlNCs6''@;'; put 'put ''ZD1Je1dPcV9YdXs8TmRbc1RpfWtnQ11dI0IyOERPdUxpIkIqaCRhfU1fVDJGYkh4ODI7cm1AYVQjLG0lQDAuMiQ5ZFVBRzZpMk9AJH0ub1FIfkEmUWNNQkplSVsvPmRQXXhtUmU7XT45KEZ6I28udCZvb0pCL2dGPiNxXldlaURfVXtXJSFYP0ttL09wL04pPlRHfTA1VGEwYFErQFMkKEBReDsq''@;'; put 'put ''d0JWKHNAZi8kdjJOTmxrUVR6RiN3fEVGQ29xOzRUVjdOTXxlfG1HTFUle3BmdWIvKSpadDl1Y2o1YFVtZXEzbTlvSj9STnk3PjZvNCpaVDM6SjFaNXtyUntwfnhkZl5RdXJ3YSw3YEM2Tzs+PXwsPmAlR0U+amQsc0x+Wk4kMVlWVDlsR3lpKCE5TD02UkoxfDBGYnhgPmQ0NTF0PjJTV14xakN4''@;'; put 'put ''NGV3WXYxODlaPi9+dCV9UDtjMC4+MnNBVEtrZF88Q098WT4jYElILjEpKTl5dFJpMDtQWHAvSVs1MHQiTTdmdm1BN3oqMithfCxqUzdPYjcoXyZdZDZabT0rVnJHcFhId3tkSjxddU1pcWpPZkNYWUB+OVNjW2p+Syg1NDklSF8sUWx5JWJ8OkNkNU9fJilvNUFAbDFUXXZRZnY/W24wO3I3M2xZ''@;'; put 'put ''QXNpYy9NRCopbVV3eEpuQilsOy5MP31+NzptIXk3O3wmTz1sP2BseFImZ0cwcCs/YlYpIl1wI0NiZjpuN19dJmw9fng+NHc9Q09ja29ocEJaUUp+NXI+OEZnfW0/MVBqQ0RAeUZIX0ZUKTlpJnliZ2lbLzI7eyhDZSlZWisxMlZCJlhnKXo5M19VVHZ4MkZhIykoMm5vVjwmeEJaSnpEdkNmdShM''@;'; put 'put ''KT9saUJWYjcmMV4wMEp7eT1bTXY6JCJsfiphaXs0fUN3VmVLKUZsQnskfHhTNCMpfHNiLjRrWSsjOSV5KFpHeFdydTA0dEVUZXBOZ3RDV3YoU3tpeigrTzcwRyxTXz07IWNQMVpFJWs3bmZKZ14wemhwZHRpI0RRfEBnV0JVSHlrRnpJOCNKdE9iYXdET01qYUYsWH0kOUozek40LyovUGM7VEJV''@;'; put 'put ''YmIkSztFTj1OVyI6JGpHdHN0eyhdNjdnM1lVSDw9dUFoQ0l3dm1jPT4hNTZvPGJ4XTNVSmUvW0toe0lmV2dKd1Zec05hISNWWnI6ZjRNV24sZUp2RkVYfnZ3d31XMmd2e116MTclKVl2KWZxV1oqUix5dEwlPCw4OCxVXXI0XzBfWCpeJDp7fDBeWm9+MTNta1dTUUJbajV3KD93Mk5rJGd5YmdF''@;'; put 'put ''LHZuKU5ARTQpdFlKRUJBP1Q9PiRGcy8/MU5bSyg7bz8pel9NRi8kVWhQOG05WCtfYy9lQDE2JENzWTBvXyZJQ2osaD9SdkRnUT8le0MlN051YXpYZ1h6UzVvYzM1RCFYZjs4fkYxME1gTyo6OiFWJTltLntGJGdWJkxHclsuUk47N3RUQmBzNlVXbkZdK1ZNLHtwX2FKPlMwbzw3e2F1ZWdsMjdD''@;'; put 'put ''ZW9CPkRabkBMTUJ9P3dQaz5EOHYmViF9KWhKSD91UEFmdlFUaFlfMXYrOXxtSXN9R2tXLnozN09sJS8hPGReOjxYNSpzI0A0bGQlIXNELlpJbVkze1IkWldTcjZPUmcsal0iIVYlNVBXKWd0NV81QU86RlsrIXFQUiE9clM2Oi5taDZOJEl9Kyk4MWpHcld3WEh+WyMvSjlAK0FhL1NGfldXRE0z''@;'; put 'put ''XVRGTihRIShiQHZJfFZTOy92b1Zfflh6K2REPDVZdnZNZT5eKUYsJUxXPzU5NH0rLiNgSzdZYHlQW3xeNmYwMGgyNUxmTTJbd3VmMUhRaF1maWQkO1E4NT1gNWZmSjRbNEgxcWM0dG4+NDE1VW5gam59IWB4SU5JdUs3JEErI3RVOXZhNDFlTHR3LHtpTnArZHBILzNATy50YkMqM3RhUmxmXUR7''@;'; put 'put ''fSUqL0EuOiMlXSI5U3RjKCooPDhwO3l8STFAZThJc0JVTkR3UW5IYHE3QHhIXi5dYFltKzlMJXVRX1MlOlhyQzpUOSVaNDcyKVNwVltlRy84VTw4PE13e04jSUksZWVQRDBleUJpcVR8K2Ile2JndS8hLF9lNUJ6Mj1GVmVIdk9Lfm5hOlQ1RCF8U1ZJKlJyMWNHPCE4OltBLzg5VyJ8Mzp2eUVx''@;'; put 'put ''fiN6ezVgLkF3ZnYyRipUemNJanF8SltZdX1CWjxUaWsrLCVuZ3tsTWojOlBmQCE7ZVFmNC84IT9iMlZnQ3JYa3U+Ul1qPzZ4Jn0wZlVecFN4WnoscFZQQzs+cUw9OUN+Q3piJmBqZThLRGI9aDtFLl1kP1JmajF7UHdISGtWU1V6Rmcmaj8hb1dNc3c7e0JjZH01fSM2ZGsqQm1zNiFxQH1MbFBv''@;'; put 'put ''JHZDdS4sM35AbClwOWlePjQ6Y2Y8MDx6OnhCKmRWck9wZHljKTUyR3Q3fH05d3I/PWI8RXNZSFJYZTdEIXRZNGgmWlU7WFBoYDZ6O004emA5NEQmSjoxbD5rPCEzbW9ZUyFWMi48W0t5YDM5SHV2ZCV4PEIscno4Ii5Ye1s6VUIqbykmJDl6OCN8SnB6cnxDPFAoUiRjZk1wTDthR1U7VWI5K2Yv''@;'; put 'put ''WTN4Q3VJT0wyM1oza01ZWy5pKyJ6PyxkeG9rWzMzWD1mQj5MWCExQzlaUUEpQSxscVZCfDguMHJxUmBHZzVoelFdQ0Fed1dfWV9gMzxCO3orYzJ9VjAqWWJLPXxiVUgrSD4lWiVXP1YybllpenJobkNaaiFrQXFddWZuK3UzcCl7IVlHUVV4S2xvYk9OZSx0bjR7eVlyZGMyNn1QZSZFIjdgQmZF''@;'; put 'put ''JTBUPTBec0Z8Y1tIZkhEY099MT14Nn1rYGpYZm5IZkVMOWQwWk9sOChdMm02cU5aZjp8SEM6cTlhOk5sI2csY2ZoIyYsNl8jUi4pbF9paDJXPDI2KlR2ZCx3bVklQ3xRTEBeNkBTWVZgTyxNaS4zezBNR2NPWEB8ZTNYWHdYMTVoKFRPPX03YjNtRWVEb2wmU28ufF4yVCpjJFIwMTtnPmcuQ1tP''@;'; put 'put ''S2Y+KHozYFYkKW56bkc8fEMhMjg9aztUQlM9LjZ7PSY5OG84VDZub0s1Q3E+NHI4VGo4I0lRL1RzYEpsVERtInc4T1huYEcrPGgvXT16U2JiP1cpbiNpaXdNJTIybiVpcVVlJn4zSmRkOll+Qls1Qmd2dkA6TUlATEkzUFJsbVZwSDFTWz5ufm46KDxuMDw3V3xuO1RzYmY0Kml3TElSQlsrclRA''@;'; put 'put ''OiUpcHRiUVR+TD9AMz0vW3FbUCVqUWBbKmU4LCZnfldHY0FWYlV1Z3tbNS9ybV84X0B1P1o7KTB2KF00MUUla2ZgWWhhP0gzKSEldzxUIW5oPyQpaSpbUCxaNlZ0WXFEM0hZOH5vc1RofT9YWXtPOm9sd0RBZmZWZXZHLiR2YD8mSjRXREQvUVpDQ0Q1K0d8TChyemBGQ1c+ZkNhRVs1RVRnb2sm''@;'; put 'put ''QH5WRXZpU253ZjJ8czE3KGYwUF5fPXovSDIvIk1AYEdfQDEvOHlbQS95UDBbRXM3L2NSeTBZaHpVS3BVXWJwR2NZT18uTXQ6fHNAMFBTV25gOD0iWF9mdyZ5eFdPQCVOJWZsfCt6VDtyaUB0Y0xbNzohSncwfC8rbXB2OGJlaCwxQ2ZMRj12YjUjN1RvLikkZ0x7O1REbUIreyVnYikyQUsqMiFu''@;'; put 'put ''X1pHQjJGd1tUZUhFKDJla1pQXjBAfGtSbzYldVcsVXNtPXtWO09HVVh4UT0yb0dkb3ZOXTsxcU1Wdlg0b3tJKCQyfmphP2ZWeGMhTW1HJUducD42UDFETS9NSStubH4xbE4jdlt8fjtlM0Q8OlR+a0lVSUVTPTN6eTBlSGllayM2bjRJWEcycXlXKU1XXX47XmxHezFjSWJFPmgueG9uUFgzZWBA''@;'; put 'put ''NVcqZ3o8XU5bbndRMjRKWDxfWTs7KiVPIzhlV04wTC89MG0wcC5jKEk7LjglY25kcHhgI1dPWGhHRTxRO35gIXhFRHJ9UWtqWm5+SDFzfktmXyEjOzlmL301OTttRWVedElCJTpjIT1gO1VKeGtJJlhyeXlQT0M6OUZ9a1lid0VUTzFlZj4zTSwuWiwraTAuIUlOMjlibWtfOHtiJDo1XlVMPTZq''@;'; put 'put ''PmhhKGd2dCtiVGhkczx0YlRnTDRIblZyfSVLOzQ/WExMSHIxcVZtdSluaSg3VzclPkp4YCpQZjJJW2hjai4zXW1nUlspWkJwRDdXLnVsTWgvZVB4VGQ9fE5LcWJtNTQwRU1ieE0rL2lDIUtyK15PPEhQRlIuLEZUJTpNK3pNPUlyUj9kSipUI3V2akp7Lmhkcy8vSXQpOT1IdXhHL1VFRHIwQ2R1''@;'; put 'put ''cW1WW0B5ZS58PDY0KllBVkIjVHRJLlM1YW9tKU9JRzExfVFaQ2dnRUE3dkVrQ2lbKGdLci5RXlImTSIhP3t+OUpleWh7fDc1NS5iImgrUD06eUVKNkh7QWRBbzRDKTduZCk5fSkvaWBWRzdtJFouZU5nYFgrOGVwMG8jdWxySmVLSk00PHcyeU8zMXlpLnlyfF9Wdj00SjJLeG9HdF12SE1XJUpH''@;'; put 'put ''czxxcjMxZzU7Tz5lPj5GZl91Rz5aPCRVX3U5YFE+bmNARk4hfDlVZjtVPDJwdDJ0Ki5bb2pzbEh8cGhoJEQzdndua2JUXj1aL21jbGY4NEc3PUNNMS9+S24vLmMoSSZeZTNCSDlie1ZEKjtreW8vaVJoQyFWaFhUa1Iwb1NJUG1CJHBpOjtqMWVkaUduQ2NkPTp4KGM3LzxRSzA1UGwmXj4oW2o/''@;'; put 'put ''NUkkTEJoPWthdVZMWF58T1gmK2lPVWFsaThWT2pXQDI9c3EoL1p5NTJDcjNvNDFRPFVzQTdpS0FObDI5N21MZXchK2c7TU1UKHxAQ3ckMXJLOzF5ejZAeTZCRlhTYD9qWl5KPVt+P19DTXc0S3N6N0hhYDpBSipwSUZKflg7VWQyfm1VYztjKTlyNWBRPnB3c2VDaURwc3ElSS49ZyM2RCFvTyp7''@;'; put 'put ''MGd0eypkKlc7VD4xPlpmJj83QFZnKiU1OVJ0cn1dKz86L21LNWg6Sz5ee3tXOS5tKmZ6W3YmNTo1W11vKDwwdTZlIiFrK2VuY0FjMCZAP0MyR0pFMVZ0ezxxP2dRdTA3RzpvbDksPGxMOnQpV1Y5P1ArS3J4e2wkcGNSai5QLy49N10weD12ZURdND5EQHVPN1dQLil6c2FEZUZsKipnM3BuRVM3''@;'; put 'put ''dioqazUzIXtxNVpZIiYzQlU+OzMqb2BLfnJ9Z116aDZHayM9bigmcVhIbG9QZ2M8MGZYNSZyLyNHZn5NOC8zXzZuQmZzO0dzbiElaUd+KU5PYDJla3hPUlVQRTM2cDtxKGhEUURxbSpHZFBiVV0wU31+dVBNYjFGZUVJeE9HPSNoJSw3cSwzWjJfUnJXa1ZsUThxXjZxVV1bKiRLdkEhNjJjb2M3''@;'; put 'put ''NTVAMnBvckBKSHU9SX1PXTV7bEI2WSE3PUJDKCglKjl8bWNLNmFvQ1t6bntAWWJpbE0uXVAvPjk6P3ZkLG83bWFUSC9meSMobEYyX180dTs0SWNjRklBR2VqPVkqY25PVixkJGFhQC5JWkV7eUg4YFNTPzR+PVVhTyVncWorKVZrY3Joa1t6STFrTH1QU3s5cGxqM3N0MGJPKFppYUBFa2tAZklb''@;'; put 'put ''YzhgUUpxRUw1T00wSHNYXUNWTVUzdnIzXyxdYDBwZX1daksmYF0qdSNLOFVydHpHJVA7Q3tbQEpwPzojOTcrXlQ5LkpkKHFnYWN8RzZUXjYwbFI/VjtUUmd8MC8yVlFkPy5KWVYqK2lxUT4mTHd+MHc5XVt5MlZfNHo4LjhLa3BMMyQ2TG9beXA8P3lpfURWWE1FVGhvOTBgUW04OThJYUV+dUkv''@;'; put 'put ''N1tPbjZRZXwxeHBATEJnKWRVZXJxa1kwV1U7OlY3YyJ0JTRLN1JCUG1uNmhzWk07MjhqJVY7R3x3MTRHSkVKWl9zYjBVJVdTZDlfX0ppKnxBJW4kM0k7RV5RMklqayt0QkBvSm8xfDw/ISE6L3dsUmp+bkdJYH5mdVBYbExeeGhuYGIxImZCbSVobjFrMS82O1VOOjM8ZyZbbCwuKCh7VVJoNEk3''@;'; put 'put ''MXFgU3VnJVo+QTZwUkg9MW0qM2lIez9oREd9bDpAZSZzXiFgYHdRM2Z0Jl1SRXZqOlkqOXE7LkkzfSExKmp4aktuPmI5bW1iVkpjdyxebHtEOV08U2ptXXc8NTY6Rno8ZzcvPH5VU1QlVldCfXE2ZTw3eDsvITpbP0xjQVdWZmRiI3x4eEwwMUhKSjY2aUg3R2E7VF9SMWptcyZuWiZneCNmZS5t''@;'; put 'put ''MUBiaFosZCssaihyVjthJHIxL3tDfTpSMzFnaGksell3KWFQaGB6Ujh4Vkl0dUtuYk5RXSJtI1IoWSl9R140UnB+O0V1MUlwU0pRdlZqV3k4NlcrSF5sMH15O0c0M3R0RypSSyRoM3piR35HN3dGNT9ddSN8NGkobUlnPTBARH08fVhyQmdQc2tLNXtuPGFqYEw+IzNZcjs0QTlEZiYiVjkrbilN''@;'; put 'put ''Ky9ZcDxIbGokSHRbKlFCI0BuUStZMClGfCVRTzg+Ol4qOF52QjFkKCZEQk9Tanxwdy4/fUBSX35oLE5+ZzQ2RioqIjY9Im5uUldrJCpNI3l1fDY9fFIrI1U2VkQ8Jk99S0dXOXRHTk0vbSplKSRyQygiUGVWOHhOUUpdXUlyQ2VkdSpoZGJiOUkmdzFneCM4M2xYcFZoL29KV2MiKSFXKnwqMGov''@;'; put 'put ''MzwueV5gcFp5SH0jWkh7ZTUufjd0Ll1fUUd4RURWP3AqQUdYOFsrNyg2ZXVpYyYrKjYjI3p4PFlhZGExUkRYR0EyXnphOGhvLGlxZDMvYHRsLDB6JURUfnJiUyMlTkosfWBpa2ImU3lUdVc1ImZHV0VnTSFmLFRPMVVfeSE9dUc6YDdbKldfWTlxIjE7alEsP0whPUo2SmMqKiRYLDoyRVpQP215''@;'; put 'put ''IV46JG1aRz1lVFQmYFp5N05JRlh1enhtVCllejw0IVdgSXd9V2htfmUoI2x1cC5VUD9nd3JrIUAjdDsweXkmdH1RZjAkIztlYHlQTXFfRyZ8Vll0TnttPiU9bmgmaDg1ems4ZUVyU1c4KXdENj8zQmQ1VkN8fX1KPmVpdUVqfUhHd1pzU3ZbfVR6VSZfSz5YVjE3bVlbNT46aFchMS9CWVtQVyN8''@;'; put 'put ''P2E+cUg2WncqOSVLIjJ6ODU8IVY0W1AlKTJ2dW8lLCsiRCt2JDBBTn10KmlWd2FdKywqMz5wXTtPQFRSYzcoITxwZ2xTXn5neCM8SEphQmc2IThWImxiVjA5Ym17Y3h6Ii4kLE8lYmYlT0dsZmh8SVBHI3giPCluclA7QiEhO2xNQkxsTGVDOyo1TWxmfXlRLz9XOSRYSENrTSNXd3hJQXs1WzY8''@;'; put 'put ''SStRMFtGSXIsP3h0cVRUIVkpNjs/X219QCojU3s/VnRvY0hfLHwxe1p6VSREfkAsVioock57QCM2eSs7OlMsTG85VGV3aDJOU3xxISoqc3Mxej8wLzMseUxQRlFuLj89IVslclFubHk3d1pORixId2t4TW8rW1JBQFJ6Uz0mP349NHoiVGtfX112KFN4TF19XUVdWmE8PT5lfis9dDpKMCF9SnNk''@;'; put 'put ''biNIQUJhIk02QkJ0L2l3VWcwNnhCK0c5WSRePEU7NGFte2Asdl1XUUZxMD9AJiRKfV83LDssMT55YjFicnhbJDFoTTE/O3BdeTRwJixSMiloWXRFQ1QxZENHUix9ITx3I31oeUxSJnFxV1QhbW0zW2IhV3lnaT14SUVkaTZHOjFmb0ZWY1k7akhLWDpub0EsXiM4QHBmPFhxWGEpMChoZV5dcz1B''@;'; put 'put ''NykuWiEiYmtQU3gxPW5mbWYsSlkqVGkocDlCUWAjfCJKWEVVbXFWXTIlKTRSQE9NczpNYjtPOnF9dVFVb2pfUiU+In5sIzNyNilpcHxwNUFfK1I7aH1baHYpRFN8dSYlczhkY186aUFQPUB+bU14dG0+YWRWflomKX43NWJhZ0Vlaj5OI0k4MGkhaEVlJV9RaD0jPGpqOWl4NHJHZnpoVmJtUnRt''@;'; put 'put ''fXVzKVE6MnF8I1ZjfCpZaS5SSENHW2dtPUhvcjlrLlIqOH0jc0lDPCooclJwOiFEVzVibFIlZlU3OmNUV31feTdMPSFqXkdlSnp0WDwrdXNLWT86PERgZ1MlKiNkTi8oY20ha3lnNlJRa3c4PDBxO3doQV9+YDYlPCprZV1uc3FJYz9baX5+OyMqTCx3OV4/fV89RW9IRVBeOH5eK1JMOXVdL1Az''@;'; put 'put ''aFhGTjYrSD9WKU49UVthIlpOZXo4Uj4kSCpeMzpXSUNlI301O0M9U1IsbGQ6amFFJj9AMXZxeHxAUz1lYzVZIjI4STYsLHUpfUolMWQwdFJxLlErSX42aV8/Z1ZibVJ6fktJRCpbUiI4R2NPYWVGOnB9W0xXKGVQP24mfCNgQ2VEMWdySnk5NE9gakFoPGlvOC9XT3hAOTh2KzRKRihyTGhTKE96''@;'; put 'put ''QV03STQrSUglfHM9JCpqcnQ9LipheFUxfS9kKThVeHRNQkFwRHVgK2BKMSFWQnlNX3JxZC9mO1NBcXBgNV9eXzZRbk5lSCJNRzt5JFk8cTRMJiRKNV1NPkU3Z3EuTjxmN0poUjU8NF8zfFREO2JkZVQoYUshcThieis3YyZmY21vK2U8aC9HNnxvb2B0ZyhaL1EjLDc7cG9gTUFZQUY/SF1CPzRi''@;'; put 'put ''YnxtQHB5MVtgMT09ejhPMmYjUiEqfSRPPVtQWnBsXTo7QD43ZXNybT07Zi83LEBKelVPUjs1dWxdVTc5NCZ3KjlUQjtPMl9wVEM6PVEjd1lNUTNJXVMkS1dvNkU+SUg8cTduTD4wbTxkUGU+N1dIfDdFTlBlSmFFcT1KcHpiTUchNkBHRG5uYXlXay9gZDNJel5ZUzZuUSFLR10xd0ZufiojNm9v''@;'; put 'put ''aXV0dGwkb3I0TVYraVpHJSRtfC4rJEFONF5ZLlolZEMlKyQ9VVoyQkR9YDheOF44OHhlM1Z0KzI9P0pZTkYpSzJYMEshKk1vKVpYSnMpN0BvM2wkeSQiQFtncVQlY1sjJiUmVWpGVFBzTVFhUGgmOX1DK3dRXWBQYFlEOjxhbmh5fTx1N214ZDc/XjJtX1dRdkhpeEpJUDguJC4lJDkkWkdENjpr''@;'; put 'put ''SDh5TTEpZ0xoJilKejhHcCR7dTczM3wqSmgwS1ZIZH5sU0t0aS9hV2l8eUBLTDQxR3RWcEhoNUZsVjkwTFNIVWQxVXNVUzF3dFVEPTZXS0B5Izk8fTQwJStAL1Q5eGxYXVl+PT0rVVQqWF5TdGohaFBzdFk1eSUqUitJeFt6JFNaKTsmfSJOPjE9VlorKzZFXkdSTm19em1lekZ1SHcjfDYmT3Mm''@;'; put 'put ''L1dqMzF7IypMeS5ybmYlUEFLQnl1dnQpKV1Ec2NbayVdVDdlfiUyMCU4QUBBb3RWRXtZUSVmX25Pb3tIWGcoYlBlOzNYeUspakBxekZIdWhOLl9UemlRYVZDL2NeLnMpKitxa2lLXnpGTCpNeU9uZE52bUVANVJZRmI4YmlANE4vUTRaWixdO1AzMkhYMlo5IUpjS0t6QysoLkRNYiYjMl0mNjI/''@;'; put 'put ''P0RebzgzMWtzdlJ5ZzZUR1FJPGZpZT4yXklyejFHVSMqcixDeTZlMExEeVpNME4xMC5WaXhReno5bD9zSzBNTSgsMFI2LDB1cnAkImdrTW1SODFdcHUlLFVhRWBTdjVBczlsPWksWGpHSzh9WnAmY0RHO09KNF5nJDIyW3w7Tj9ySm5CPnQzU18lSHouRTpmKXs4c1VFZmU7K2FRK0pvMWxCJk5V''@;'; put 'put ''S3cyeE1RRXxDcWA1Jkh+PmpyaDYzZH0zOUhxa0dqJmY5Y343bVlZMHYlYlBSTlVUeT40PTljOllNOigmRHBwKUpdcThVKmZHPitncSxoUER8dnooIlV8e2ZdeGx6R3AsQ3JSJmwsbGdzUDtEWFBxZWYkMDFBcnAkPGhHSWJ1OG9OUklUOShBJmt5L1VTUiM4fnRvajlhbz08PHV3Vi4zR15gNFV4''@;'; put 'put ''dEFCU0o4JWZHKnIqaWBBSVBdOSh8LDVGe0dtOE5pUTR7aEg8OSJbQWcoNDhPSnZQMy8sMyZqZkIoNEIzemI/QGhqbzglRUhPcUJdJWpKNihAKj1oMEdlWDNPJiU1aCt6fXBUalgiZ25DdV95VUAwaWt2IXJaTXg7PWhveVo2LCw8Q19TJUFzUXhnOEtnVChhS1E/Xm1ZWSZKNXxTZWJPZ2JAeFlS''@;'; put 'put ''OWJHZn5FTXdocGNOemVOIUoxOTVeeiJjZUwkcXtwN2F6IzF5RXAzPThXaGA2LmIxLDV3JWtSJk1ZT2JKQnIqVEVXLzJdLEM7T2A7MDdkUUUxVSJxSXE9eSI4JC52SWRlSTpfPTBLQ0B3SG57Zl1QRGtbeC9MTjlON2FRWWRiIWMiWl91M1pec3x7cjdWOU0wKismI0h2ZVpee1dsKntgLGNQelc8''@;'; put 'put ''XWI9YGZeLk5pJntUYWFAJi43WmVIR24uLy9mKlIsKS95cyxCfHhjKlJCWn1TcDwmYj5ueURQMGAudTV5P1lpd1MibHVfUmBUK0FxQiZIY21LXTlnPT94VDZRYFpqfjtfPjU8K0dfLytnRTUxKUN6YmBRRyNaeWd5YVBOMzJtQD9Da1AoJVVpej1dXVV2VWB8P2lBOCM6MTVkT00pJVQvMHR0TUtK''@;'; put 'put ''KFA4dHZyQXMpTUFfaTt4Kjx5OFZpZkNNQjJwMEpUMTJrVjojS2VJL0k5LElGOj4vKS8lMX4mJEgzWmVIeX0+YHI6KlszZChmVzJLRVt1TmJPdnl+OmIqb1MpPVNCOXtjNyEkRlJvTHhXdW84citYYWlZflhyMXZ2fC9mK3MkKzhiezdmVS4zcCFaL1g1L1N6YjFIMyJKZmghI1JfRjRKV194c1VX''@;'; put 'put ''UDlEKkpHZWJiSGQuWUhOVHolMU9RME1+SCVpP31IITUxQ3RUOmtZfTU0P19FKjF7T01FWWU/JTFkMDMlazU2WSMiL1FBQ3c3dFtKWDd8RWR4RmszNVhWIVl3aFYmUWB9bVhgcis6blJqT09KbFVFOyQlPEY9K2dadHpLTGx9aCxrfj5YdFQ1bWw/NkN+MywxIz5naT4kMkJXOFlzKzhjNl0oMyN1''@;'; put 'put ''WXI+QkNYRUAjMmZfSUBMJSMyVVY1K3FvIls1di9VIXEzJEFfJEAjcXtweVBGbDReV3c/KyJjSXFVflpSaTx3JT1ROSohXVFecVM7SG1rOz1JVVcjaTJeby5bTEtEUykzSklDWDxAUG5tWFgkc3p2JE89MG1VVlY5JjtIOkVML3RZNXZvUEs6OHNQSTx+e2J6SV54OHJhUSN3LiJNZn1LbzopOig/''@;'; put 'put ''Pl4+ZmZXQyhpaysmfERtL0p0SkNuJUsiP0I+WHkjOl9gZyR5KzJ+RnZ8eU1kS3VuJXcuLGxHI3YuSGJxQ0tKTyE1X0hXenAmYjsoPkptZTtqTm1NaXJIOVU3ZE4jQkRlQjc0MTNZQyw5PnRaKS4sVH5YPnRPam44SVd8a1BiaVpPNzFQPFpWXzhMITwlfGtPeTh7VFkze0FYOTZhTmlZT2gpM0hW''@;'; put 'put ''VmlTdi9pXjdLZzc7PjZ1PDVAYml0NEsqTStnSSEjang8S2J9YGZma1FmcVBlcXBhaUtRe1J7TyFtTXM6fFs/TWRYZVV2OVpGazVxUkpbNztYOS4zcGY3QkpNYXgmR0NWTFRnZzNoNkciTjNHemJ+QF9PbSRoeEIlOyRvaDArdnVJUEd1TTB2USZZRSx1Mm1oWF17NWBYPH17SWw+IlBUNUhmLix7''@;'; put 'put ''VytVSyY8JndzMV1UPjNFIS4+VUdAYSVwcEM4U2xWO0gqaSYxMm4uNTRdbCYwbWxPdTFvU1Z0bTZjd1NYLj1Bd1NrOEpHSDBJN0dpSUoxdHRjVks3OHdQKSNEbGlbLmt5KnI9U1hTLn11RGVnMDswK1RfRG9scSZHXllSWTpyaFNbJWNhcHdKKmxsOm84XX1SUF19RlREMnghOzdUWVR5dEt1bHMy''@;'; put 'put ''MkQuUFRhfDpXOFJtfCZLLnlgVG1VZXpnaFNmLnV6MGlnbEVlPTRrUi9IIT8mcGF5dW1oeENbbDo/IS9ZIjBnXUpGMGIwYHdbdy5NW0A2VihTbEFxUXVtKlBxdlhwYG9QQytMK0FQL2FpXmJuRWUqfHBzYUA/PXFYQXxVcEtFUEM6TDQqQXpva1tYbzlFVjQvJXsjemBYX2FBPUJJUEdVYCNZRlNb''@;'; put 'put ''NzpCLkEqM3ImOkVieU9NZjFONmJsWDdHNyh4ZnVCa2I6c3VTa1FaMTZiOmdvQ2wxYSglJikkU2hkL2U7eFFJUihOTWsvZkxnL3RoZSZZaSthNVpDc0EhWWpIL3psKTl3TVVRLHhLVTA2bFlGOVtqQHh1MDdwR0B8OFNNIW1VPW5QIU9ORU1MdT9FYHZVdT84dEEqU3hodztdLHAsU1A5cV9kLyNI''@;'; put 'put ''IWFpcyJ3fj9fX3lJaSxxJSVjdEc/S11yITFSQzNAOCxWej48RlFQMW8jMj8uOjxFQTAoJSlhTGIoVj47SXtLM2cyfnBFQyJfPyEmaHBIYjQ4IUdAWk5CVD0jViJTO2JxR1RQLnklc1FFIX1vWWFNPGgvK2kpPTM5fDBteTFveCxsW1MrOmJ1fVROYEdqcWdpK1t4MnB4ZlJESnwpaV8/bTpTNipx''@;'; put 'put ''eH0kRmxBNzs7UWIzRS4jZzQjV3ovQjJyMFZ5aSZneltZNDZ2U2NZPEBKSzB6U2MrYSZLbXdHLnQ2SCg2O197a1QmdkliUV43WEl+UUVSNEcsKnc3ZDI8bnl3IT5FNF9HJTUzcitQMEluJn5VaiJhVlNqfF0laiFNNH1WcCZTfXcpTC9zQkU3TTpXaUNSXTB0ZUtZUzMmZ1lUe2AjSSI3WVI4bUJN''@;'; put 'put ''c3xLQiIjZVJraytmOV48O2BLTj9CSUFCME1RK2JJRWo7OzNZazc2filLQS88bTg7c3l9MltEJEMzcywlfkVMaCtzJiVTeUFIZ1p3Yy4jbCVlTEZsR2BQIyYiRmAlYGBmQG4sQHlOez10YUFzdmJtW245VC96b2tMMFUvI0QqRkA/JWAxZ3AjS0B4Y0l2LyorSyFiYn4oV21NT3puVzhrXnVtbHMz''@;'; put 'put ''WH55P1VsJi8zO2xRMyk3aDgxYk4zKTZ8fD1fJD5kKiM9IkVgNkFAcmZBYmImVCtIO35TWnxHV0hnQDp+eEo0eyxTNVNsMWg+YUJ0S0JPdnJvc3wiKntMN1JiPz9VJUAvOXJHWzlsKkR0bjx9OltsXno6MWpZLm9pdWwlQWowcyslW2h+cihoOjlyLClsKWVudzQ3fGUiO2N0YlNgbnJlc3w9K1tS''@;'; put 'put ''dGBBUkpQczE2OT54e3gqMGk5I0puSjR0X3Q2KiM3NVAjN2RFSFVkQnY9fDlhTyltYzlSMVFQek0kLmBmKWxsfW9gZS41O0p5aFUsXT9rRWVka0hXOHAiVipxcGZKWUlxNFNufS4ySUdtfGssLyNgWHJtLzh3NV5VKm8zVnRRQHw1LGliVHs7O2J9Nz04bDtpQXtXVV98Y3V+dHR1e3d2VGs0ZFU/''@;'; put 'put ''NSVDYEtxVVhoRzpsWCFAPW1zK0d7OFBbRW1MaWRxdHtyYmAkanUqd0M7R0N+cn19cT4rb3ssXjBNVihjKyVqUFB+RHw/dlFkOFs4eXNsN2RTWSp3bzpUbmFxYmU1MUUla2V3RjouUzxeK31yciRxez1OWytxcHpZcWJPMG8/NkM7dWhjRCQzeEtEOHd8KVNzfmU5OXxjJWU5ZFhiVFI2Ij1uYCZB''@;'; put 'put ''PkFFTWVOMDl9KTBgXyRgQ3VLbEp2OyoxUGh6b2UjcFRsKTddQjlscGgrTCZmMX58enpEeTk4aD4oenAjSyhBZSFeLGR2JFZyITlBPSR3aWBefll1PVY4TEpgVnI8QDJ9blFWU0lkWHNCcFZKM2h9LHhUJHZ3Y2hdJiN+Jj8lPD13dyNGRWp9eGxITVowXn5lPXd2UzRJMnxdbDBaQkJtUntfSzd+''@;'; put 'put ''bXxpKj1qQlhuX3BZfjVWWT1EQGBiZUxwJlZMTWcuRkkmbF5vcWw9PHYhO295SGFSanVrNXdpZDgjaGIqeUxaPiE5bGJiOmt6eDBKeCNoN0w2Z0dtUkZ8Ryt5OE15NjUxWyJUSmZNcklmb0h3STx2UXp3KnBSX3tMKDJWYFIpSl1KNEkyfF5sTVptUj48M2RTPjElbSR9eTZAO0w1S34/UndhIU44''@;'; put 'put ''ZW17Pkl9K2kwakx0M1hva35aQl5IRUgjfFdVJmtVYipMenk5aWo3YXRMSnRZclVkQCtrOj0xZkxJWXdFKG4xa2t4UEdwZ0VfPnY4cDkhMCFxcGsqSEdpViEqSXdYISszfTlwMiYzdWZwLDxxJSVPVmp6OFs7LjVlclQ1RUJZdk92JjIofmUwcF9yVSlUXyphL2k2UTFgOjM9X2NgY0huPjFLWkYm''@;'; put 'put ''UTI9Pm1bcCNLWkY4QS95ez1IaWFbfHRBenMuQUl+dWwwOUQoQyZHN1pNOFF8YVQpJSpuUix9LkRLUno/K0BzVHpafE06R2NZUH1HPzgrQGdyRmBiO2owSFVaalt7LCRdel45Ql9+NXw7RFZJR00zS0cwRmd1fGFtUmxbUWpRMGwiIXdibzFKY2phcCFVLjRoJj8lfUlVZSRtVFhwT2pwVlk5OHtj''@;'; put 'put ''b3kzUTUzUWhpSWNGIXdCeDNhLkRzKS9YckJDL3ZtOmh3Yixza1ImZ1FgRyhNeW09Unk8d0RNZkh1WjI9Oy5bK2Y4KS5VN0YhV1NmdSJWUig4eVlWc2FQcjJLISopKTdCPlY7eGM/MlE5Y0s/YiE9USQ9Qlh2QC5TL3N2bTtDO284RVN2e3FWL3gvbFo1ZFRqYjJHViMwN3A6ajIjaG9ePG0laD5x''@;'; put 'put ''fVNnLl1JNz8iUjM+Z3kqKSw/X1gsRy54UGZpPGE4TkIzNSw6SlVtJVdoUCpQOmtvWm9bOVYmXjEjKEYrXktnNyZyZU4udDhMX2EyIjtJRm5rJUJ0TEhaP1h4eWFLLnZnJHdjNkJoUEFeYUk+TTImQU52dm0rV09RXm9QX3wxNSZNTkk+TTQmK0xkWCtJOUQwR0IvR18kRiVHeX1QQm1SdS86JDdT''@;'; put 'put ''M1FjN1NlNFhDOlgxfjpofTlLY3JhPG9SXXMrIkpoTnM1QCQjTHQwJH55NlpTQDhpZ1p5ZXI9SX14ZyQjY1dtbyMhInI0QGRHcFdwdFBUZC8zNHU9JVFROl03U2c5Imx+Ln1RREBjPXZNTG45VH1ARHpQT24yYFZubDFxO2A3Ijt+Xnk/a2BrTFVuMjVqQlRCSkxjPjJEej87UTEkUHdQZyI/Ykhg''@;'; put 'put ''TWBkTC89aWJgZTAxPTlRZ3IwLjs2YjV2dkA6MUsqWHNbcCZnP3NjL31xe3RbW3BIb3QvRjhlcDImKDA1UHhbd01ReSlvcX0iPCM2bEh6TGpWQTY9cCNBMjBmOXYpSTJ2O116cF1TLndQWSRXYD8zQCUyI1FocF5bWHhySSQqTTYyUS9PWjtLaDlsb2c9bXU7KkB9JFcuc2BdUzlGSlUoKCFmOm5J''@;'; put 'put ''YTYvNmpvNzlMKDptYDlzZT5SX2BJIUoqWTxpPnd5OXpUSDxIWkAuN2w9W0RGZzleYiQvc095VTFqJF82JjZlVVUoLGxLOml2On52WyVFS15maU5pR107aVFSUzw7aSNzdj1fNykzK0pdKnFxcjMue00kfSUsVDx7eGs3ZWxabmI9aEZMKzY6SjpKX086YXg0SkMkYzdaMCQ1OWJoT2dUYjoxZD9u''@;'; put 'put ''VDJUb0wqTkJEOUZmTGZIQURoLnVuMzhHWklBVD9DbThrUU1SfSRDUk0sPC9XJm8xeSRyVVRQM3gmYz4/Z1ZdQXwmcTpDMHIqTilwSmBUfnhGUFVhTjxFMDhzfnt1dk8hNjVbVWImfTxpKmJaTTxEaTNwR1JGIyJdZ0I+NzlpaHo8SjpuezkwcCNXckphfUM0V1B+MHlaV1RObEV+JiltKXQ3Rk0r''@;'; put 'put ''Ukh6biQ9SX1gRX1Aaz97XjpaWHJtUjJiYSwkWEl9QV5RWmIrQy89Q0NjRiVNMl9Ra0lzYDMjIiVLci84V1dXO1ZnUWZAYG45andRI2smeDhLO21kITZoYSg8VyhWSyE5VT09ZzshUjZ5XkcoVzNGNCFiV2cyc1EjP1hKP315c15YaCZJY0ZWYi9NSn0+e14sWSgkK1c8WmNbaWsxdnRnL2U9InN6''@;'; put 'put ''ZUkoVFVuSzZhN1tjXnVVPUYzM1AhPCVwRT5ITDkoM21aI1cvXi5QbTVTI30kWyNnKHpiLzNnQWFjJStzOmVoPmdAU0lLIy8wXmIxeXs6VGNiMlk+QDZufC8mLjpeYUlAX25weClUaURgUzo3Q055dzFYVkZwUSl+VDxiUytKYWEsPTpJOjk6bCQ0UkQ5bVFTLHUuWypqZFYmM2ptKjRSXyYkJjZe''@;'; put 'put ''VCZXOHhbXWYuXUNRQGRQKiVlXU9BWVhUVnRDQ3lZNXV8dVFXM1BfJGN4SUgodnx1U1FbJjhJL0VIOGdHS3lPSC5BSVkuTDBhe1Q/W1NNXyFlMUM7QVJOZyhyeDUlMVZtVFVHOUhqX1tSc2RVeG9lQ2pVY2BUMX5tPj1xPClNNzU3cihqZnRnYj9na098OkJaZWZOYXw4QjNNXnwlYkkiMiRJPWlo''@;'; put 'put ''eE81QXhnMiFlRl4qJFpZRiwyQFpPKDt5TTpRcWcvYmtbOXc5UjtxdG94JlRVNHBdMWlCNWdbaWdvakRqdGZzbUwhV2h0JiImImwlYlREXT02Xlo8UDpkeDcvWyt0YjFCY3YlVDs3ZSpmK1paMDxNWSpBUWllRC8mTHM8TDklQ2ElRHZYNUFvQi5AZ0FxOUJ1UWtRRDh7eUpRKE91KSlnRWVbNntU''@;'; put 'put ''VjB4WEclL0xXQzhdbHhFPT40LDxdOCFtRTVsXW1jMls5QHVoMVEhKChMZ3Q1SVF6cEwkKi82ZTVWcEpPR01WeXAjLjkzMGwoQGZUdltkWjQ3QmRYT1kpcjwiX1BCemNYVih2RS9WZ1B8VmcwVEw1cHFKdzJAPUQqJTdhKEI5SHNBSThuZms3e3xINWliQGgycltmYyNnN2pXOiY4ZTNMKiwrIXF3''@;'; put 'put ''SChZQX06IT9AcnZ0Ml1jJHVgKjhoeFBGKXA2b09TPCZRc1VSPFVfe0VVcXxEe0AmXUpRPiY+Y35Jei9TelhPQElAOD86PT8ufE41Z3tKO05QOGomXSJNQypHdmRKZF4/KG19IygzWVo8YzhwVCwhK2FWKE9QOUgqKWsuLzdCJHhHVUAwb3x6O0RXI0VgdXBxR1N5JGk2dSlaUDM+QSFKKyhTL3dX''@;'; put 'put ''Z0l2diI+ZUwyIU4pYUBTQ29rc29pRyouaWkyMEtrIm0kWDdpSHMiJTolajJuPE9uME1wOzQ6U2BeJm9wLzdCJGJNQzpSai4xPSZPbXZpMz9iLlhlU3tETjF7MnRGYlgvP2hbUWtzJVJkbUUhOklDME03TG8va2lqZl5uYyZMOlssWV47bFI0ZDh3OHtBOyRTblp7VVM3d2NgUEJ3W0wuYjFfUVMj''@;'; put 'put ''OnpxTkV+ImU9W2RtZURObHo9aW5vTUledDgkX3Y2SWxzeUxwU0IkZGl6T1Yyb29ZUXIxW21oVkNXU2ZXUFF7NC5LOlk5UlF3fWZtclZAWD96RF4xPEFVVjFsdSl4OUZEeWRbbXlSU2A7cyQ+bC9PI354ZDJFQEJIWTNsO2E5OjFFL09leEFMMUt5ZDtPd2JHLjhhciwiPCRgfW1uQ1V+anZxZm9H''@;'; put 'put ''VWRKaD1WfFIwLj09Q281QiFSbjlhQ2IjO0c6KXZhOiZPQUU5YE1QIVBPZ3pJOGhaOjRFS1JEMEcoK09OMVVHY35iLHhsMDIhalQvVzchPk1hOSlFclkwYjZASmkuIURCRSRKODZ1KVdxXzk9UikxPXtsIiRGeDgwITdfa1hHSnhAQDxZZU8hYGg4PSlNVS80WSN1YXs4UyxId3BbODE5ayw2Z3tV''@;'; put 'put ''Jm97R2YjNHR1cWhaOnBTakZlNyYuKHpUJF1WIy9HXmozVTl5aU46UXt5KiZZT0I6JjgyZ30ue0hOajMyKS9SdT9PQV9OaXhNLDtWKWo8cmQ+UVk+aV5mUVl2YEZgWDNUX1hmKzExOlB9KGooYygqfHp5dXVSIlUjKn5eYDEjXXQsezxdfjx3fj19bUU8UGFUaVNNYjIvVXJ1XVZ+KSksLiJzMV9S''@;'; put 'put ''bz9mISRtUGI8KDpVXkwieCE3MTwzbmR4WlZFb28+eSRZLyRndj8/ai9NcTZAVH1nbF8rZUlNRHFETmdbcCtUXTh7Rmt6ay9bUz1RdF58SCxgTGc0SkZIaHFCM1tzRip+JFVKLixNdlolSldzOiF7OU80THNhdm5gJGNfJGVaKn5pdTBGWn1oWEZXTEZkS2VWI3ZHYSgmJWcvazN+UGx1U2gvQkQw''@;'; put 'put ''TChMeT4oQ0ladXk8aXtXfmFOfmY4dy88L29ZJmdzJHs5YDZQRzAqKSxHIShJUiMoSEVPNmRzSmV9MkpFalNQWmE1MCFlP2VwVnFoIU4sWC85eWV1figmTjBSNzpgP15LNUFfbEJRY3V1eTVXRXpXOFV2T3A7a0dZajZsXiR7P0RVL1goK19rM185Ym9MZ3NyPUxzQHFNbkBCXnxGKzV9MEh4MT8+''@;'; put 'put ''e29bfDArPXxhQ3Z6M3ciMU9NcExKPiswPUdlOyM0R2FYJX1AMHEyZj1KSFlMMksoYnQrO290V2o+M3x1OHZNd2Qua05qVWlVUUd1OzAvT2BeN1BzNCIsb3hKWj5WOiNJKCRZRHR+O0M8NShDJDByaVZ2PkIzTzFpITk5enZ0QjBPK1BteVEhUjhZPk17YjlaU3NzPyZ+Tj8/RlhQYS9Ob09WKHIi''@;'; put 'put ''WXByVEk7TTRafV0sV0lNcmZFV3lOeXU3WylhbWErKC4mdXdOej9nfmRNbTQleCFCQ1NWSCxOJXV3W0wpcD9GVylBT1s1dERkb3hndiEqSXdYYVpMInVZQ0VTMn1yJiRQR00ick09WCFiPWBDeSRwZCEoOWk6USlXQGkzNFJbbG4vajFvLCVqQkBuZixLQH1TNHcxP2k2W11UYk88I1Jje3pUWCZI''@;'; put 'put ''UGApdXNFX3E8RipVdS8/TTxiPFg8Um56ZSY7YDpOXXFbVGUvWClrdHl7flZtJWkpS3RGYEYxZmNQZTVWTk9ee09sbkhDNSY9S3wpdWx4dkdSKzpMKXFNOXNOLnpLfHBCZUBVKT5BMkU9ZElLaSpvZGNoOGdne19TNztTZVR3NzdHSzsxN3U1NmlkeHA8P2NzIjx0MVFdPExYMExEOEBxOmtPdDBv''@;'; put 'put ''dF9yLEt8RyQuLyZrWkg2XzRuYT8vaT9Xdmt4aSoiLH11PWc0NldpOlduPGAoY3clKVNWVUIrdjVZNUFCNHt1dV4iVztQU288ZSgrbVVqfTUoKGA+VVAjY218T2I9cVZhVC4kcjpvJkU5Sy9bSGlVSFJAJn51SzVgS01CfEZWWDtNSTAxSTU0KTUoQE9pbiYxaWFON11kTmk9QUdWWCQubn5YcDYs''@;'; put 'put ''PH4rKTBCeyU+JW5Nakp3UkI7RXEoYjpeMWI0V2YjXUZBNkVaPCZzfUFwVWxYJGYidVVTJW9+b0p9MSYiV1R6MmRdLn1KLCo9eV9YM2wkfCk8Y0hobkNdbyxYMWZsTDp9bltLfmFnPmNWfVhiOjR6Kz07cll4NnRVdGlZcn1lITFrczhYaWozdll7RX1IWGlqQVh7UXt1YiRBTl89dUcrTFFCKnQl''@;'; put 'put ''X052RUxIaCxBTyg/c1JUQzFqbiNrUm0+aD9xNmZOSjJbcmIlajduWz5uXmIxT3YqaWxTZ3lJeT87c00jOGVsMFNJdzNrJDlfVGxCMD9wVjJ8fWVPISZoZlldQ283ImhvYHBXLHUrZSVnaC96TUN3IU05ND9DfEI8QzpPdk92Jjp1THpAWmphLF5xWChXYkB6SWJnIXU8JC9oODUqMGtFMEJHa0dt''@;'; put 'put ''UFZ4VFZAR2pZKkN0aWw4ciYkMCh1JDdPZXByVEVJN05+TjVfODNRKSo0Kk96UWgkUFRNTD0iInB0MkN7fHAwcEImPDlYbG10WjBNXkpeT1Q+U2JpSCFgOUJfeHkxKTpTcHxgJXR1Img2bD1EdEAoQ2FfMF9pKV1CR2QqRCJfVF9+PDpJNURvbTRpaTJNYio6Wz9AaHhpbUV2QThASz9AaEI2MVJx''@;'; put 'put ''Q210N3V0OCVoTGZSbTtVVChoXTgjJjAlRDVIdl47KF5+IkEiXmZkKTMjZXtlOXVuWD9kYmJiKUVhPWRkTkgqLy9oSTh5bm8vQ18qTDR2IXRKVTdSc3RWV3xEPHtIXTViYnghbn1ZTUEmUVJ7dzhPelJIPEpLZzVaYyg0fCxCIylQc05INlkwMm5EWUw/fGVPP0B2PSk7TEAqR0RIVTJTa0B6MSg1''@;'; put 'put ''YGtfKWcpXlZFYSxZJl9dIlVfUm9TXVZsaFptV11DTz82L0MhJmowbiVuRmF9NkI9YG5iNSZkR2twZVVtIypbSWVybHlxcT0uWCRscX40Um9BfGF9S0NOenhRYDY6SmQ/SF9jTTlfRE9+Kzd2WXVuY3lJQk5sV110JnQ6fmgsKFdzMFBKO0J4WWYwaj19ZUs3VF9UXykzTHw5bFFaZ2tRVEhhKUY9''@;'; put 'put ''YWRSWyp1bHdQdD8/Q2QhUXYhdlBmcykvbWV7PHp0cSRVZiN1PnY7fkBJSEJtNnUqQUBPXWRKbiE/NDAuZk5rJVBhXnkxPU9rQkNtYFdxa3BsS0o/ZnEwbWo6c1EuJCwrL2YqUyxDK3soST5vdW5RVFBkPy5LUDxCXjFKQ1QpbjxoKX5oW2EmOE9kS3d1ZnwzUV9FU010e24jWjl6dyxyaWp1TURk''@;'; put 'put ''IX5vfCY7P104ekk+bzZgWF5EP0VCekBJZGUqRlpvJj5vSnRCVD9JVT9wa2Q3bFhIYzpNaVRMMX18VExSVT5LfmtiTj1CUWc1ZTZmOlJ4On4qTVdiNzRjXUdDfTsiZXl7Qk9bSEAiIz9bWTU1cV8kKVV5PXpNQUlBcVNKU1lWUnRmTGVLWUl3OF9+dVc2eTJRLFEraF8qXmFeNSlwbnVPRl5zLl1p''@;'; put 'put ''fURLNDNjcGNDYHxhRXc4TyRgbTBbWVNuQ3V8U21lLE5lOFdFW10la0BxPCM3LFFtYVdNUTNyeCs8fmdTL1s8KSFWSGc4cjNnWjcqaipgOXM9b1tQZWp1M3VtbjA1QDM7b1JfSlFxWyojTC5LOHo1N11IOzR5PiRENDx8NHBrVFJIfS9yakViOTp3MXVFY1BgMys+em8zRkNSOn1VVyo0O3J+Ylhs''@;'; put 'put ''IU44YEc8THw6RyhJRWpZRnMlPG4oNVVvTzo+N1lzZV1DQ0hIWVpoeDxRT0tfTFpDUFhoZnEwPGBgdyNienBReDsyQWlSdDI6cjpYZTUyYGQ3PjNMaXV2TGBET3Z5cCVdXll3O1MjaXIzKXooYF40KT4ie3JZemY0MXwkWDdtLy98Rzl7IlNAUDdZM0JVVSRpI0hzSzZsL0NlfGF8OEdbQkI9L0Y3''@;'; put 'put ''KlV5TGtLK0kma0g0d1hQdmhPIV9IfXBLK05eQWFveFlUSFplTFlGN0VpSGZNV1ttVGZ0JlY4QHMvPE0vOzhyK0xKPnQxdkwhSVp4T0daWDtLOnxSVmB5PVoyZUxQcm9nI04/bEZlSGw0JjVfIUhMVVMyL1tbMyt0NjBCTF59a3FMMCtVcFgsN1I0ejExT0JMenhRYEZfaz18dXVrd09UPGhteHRL''@;'; put 'put ''OFArRGBKeGtIVz9CTGJeTFFRX0UhPVhta3NmalBEb29yKiYzYnZHMC5iMEY9MzlsSl16ODQ5PDxwXSVdJiV4fDUvVVNRRThPeVJIZjMpJlNaSjd4Mik9WixGLFVydTlfS0BdPVF9P19MOV5VWCZ7S1V+TDpxbWdZeE93X3tGPXVnckxmRD16OWEmckU3UUo8O3k5XzgjP0c2SWxQZCRaWSEvOE9V''@;'; put 'put ''Z3Q8biRbXzVDJH19eFp9Qm5oUHVgSDdBPGVWMTtOZTEwZTBqanpTRlBPNjNmYUk0W1d5NHAmfnI2PmoidD41Im00ZiNSQiZ5KC8lZ0tPSTtURXk1e1hoNyI3ZWhvX3QpUH19OW8lcC8vYS5eOSp8MXcueWYhZmV5OE9HSFhgdU8hXWtuWDBUM3E6fUc6ezdNUWx7NVoyNDhxUmdfcExLLEEvSE5E''@;'; put 'put ''cTgyXzBTY29rTW1SfigwbSosfSg4TFJ1QTpAWl8jfFYvUFVTPERrMFloO08sQTFOcEBWbTs6VHA5MXhpRH5bPipkJnFPU0JFNENSJS5WTklCI3E2bW8/fU5YITdodVE6Z3J1SWlQfWZ4NndbJnxCYmcxKGY3YVRfOjsrNnZybm9AeG4xQSMvbUUvSkhdZmxHfSNHZFNKUEddV2F9YCFlMmxeUWZj''@;'; put 'put ''N3IxVUdoRiRwJFgrYFRJJVg6JWohOCZWfSQwVEYhWy8vVzU/PCI+QllmUGFlKnJ4ezcsWU0/b0xAcj4lZT1AXjZySi9VeWRAOz9dQjtDQGlRdUZMIWFxcz9aJHNIN1k2QkIhYHZKYFU+Qy58ZWtnVCJHQDYxSS9IR0V1KCx4TSgsZ15mRnZWMX5eMzE9NDRuZGFwKT0wbVpgcCl0T3tSRWZHOzVK''@;'; put 'put ''PjYxJUBxamx9O0JicnUwSW1RSTpLWVYpTyVrWEZjcEdeVnQwRVp3WSJxcCUvMGsrSVplSmhxPGZib0ZheGIxSUM8cEZXJCkhY2goPGMqZX1NV0BYJStWT1R9c1RdOXZ5TVJhbi9NdDhXfH1lW2suUUJtc0VzaXFaWGksISJYcGc+aCVQd192TEM8Y2NIc3xvalMkN35lSmJRQChETTh8NURBZztC''@;'; put 'put ''dXMpPCUjIjhwWiJQYW9KOzVZUVNBK1hZUnU3XiN5O196W1cyNHRGTW47PlFSWj5ZZjB8OE8pfGhKSjY2IS4lcTRvKlVMKXxiNzdeWT5ITmFpTTo5NiRNXSksK2kweXlJXlF4fUAyXS5LSFo1bFRDbS8raFsuP2piSHMjYGx8LHV6SmlMOXNsMkZzTyVMYkE4ZUhya0YrIVQrNS9yP1QiVis0cWRQ''@;'; put 'put ''NlBZIUdtOEMubS9uQWxaT2Q3emFMM0t1aEY1QDJAR2shSkZ2Pig5aSZOZjpOOWBDUTswfFVMM1QuSDdiVVNeMDNab11ARDg4VloiNilAfkh8TWp9IlMmNDEjYWRUdk8rYGNnMGhtdnhSVHBzJHNxLno2clY6TDRvOTNCS3JWOjs8YGdKZWRGdU1zKlFPT2tkPTp7TEFhd058WiJHTSU+aSw6PGdX''@;'; put 'put ''NUVyS2Y8LiNZTSV9TV5aMn1gaDMyUEJdNUVyLlhFW2M7aU5JSXlSWUZ1US9RIk42ZGBALGFIZn50TC9SXyN7TUtXL183UGBxVyE3Nit6JCE3fDV0YE1gTUAoNC5rWj5aLjMuQVdzaGQsblR5d2BgcXh9IjZVSl4pKko1VzM2JkR6Tmg+eXp2czhXU09HZW9rdHV5fDFMYjY7dXpSdHp6RkohYlNR''@;'; put 'put ''MUhGbCxuWDkxdWZ5cy5te2ZMWmoqOXYzdGRQWig5SU5kQSl5KEFhKW8pOndfQDtdRnY9Z2wsaXZvc0N5SXshS0IwTjVuZ0EuaVViLlRTWzl4MTlvdyslTW56MWRrKlFpZ2MkJVcqJVlVV1NTfjhZI1hOWEw0YyFVO3IlPWx2ZCN2dDJRdUVdd2AoYEI6a0JeMUhmaXNYIyptXkFNPG0qWilJclJe''@;'; put 'put ''b2h2VTMqKkVaMGk+TzVMOSpobUU3Y20hJXFwI2hpeyElZWgxaTMyPjhfVnsjaHxLZ0s7IjtxeCVTVHp7KHJ+bEUuWE1HTlJoZT9sR3I5JmxEZiY0OE5ZfGpleEg2MiZ8QjhoJEp0SFN2VGViOHJoZE9MPjMxfHFKSHdSOEtTeTRrb3Z2Wz90djJJa25jQ1BkN31tTUBGRC9NTT5VOjFaJE1eaEVH''@;'; put 'put ''PUJIKCVdUndOXzxoOFkvNVFjIl02VFlRXk5NSWFgXksiV1swMXclPHQxRzB0e2cmcTw+dFghdFthM3pYQWx9aFtIeT9ieVciSjBDJHhVd3tVKDRjVFk6aHFwYnlkXlMpNj9MfWxdUGIwKDwmODlYYng5UGswcC9OMjFbZyxEe3VEc1dNVH1JSk91YkRQclpgOm92LEBLa31GdiRmI311K2FzI1VE''@;'; put 'put ''UyVwe0x4cSJ5b1luL3w5dSJVWDY2cjtrRHJieDlQdX1DQDBldE1ZcywlajtYVltZMD8vI0dibDVJMTRUKWNZR3ZnRldQLDB6WTJyRW0kWTk3ek91MGFyJmdQISJtP3she20vSXFzJnh7JDp8W1g9PHNATWZ+S0ZnfiowQXAxbjN3ODVAUEEpU1I5RH05aHtNfHUlLlBUTC87fCklYjtWPDdjOHtU''@;'; put 'put ''UEtVU2lYUU5sfDZjaTs1R1k+bF1nezRjTlJqcT9LLHt6clhJIm8vTSl5bmZPIWx5YXNuYG1pbzlVSXJfSFM2NEAlU341NSJgcTRfa28ybXwvam8sPGdDfnljKDVPJiU1THdYPjhbO2BVMSRQZ3BzO1UxWzAmJTdqblFuPG0md2UwbCVlb0V1SF1dfXtjJDttUVswbSp6TjhqZGUyaUcrNXw8e1tu''@;'; put 'put ''d3hea1o2YVh+bW01UWJ5PGleUFsuM3lGbEZqITdmT2MpMlF+SipNezx8SEZ6S0s1dz8oWSZpRyVNelp9Q3xvfCk+YDMwdiNzZ1FZU35GeTdPUzNyWV1XYE9YbkFVK2Q9XyFHWURKYkJ8QD8mZU8kQlkyPGpiXiEiMHhja3tmJW01WSpUaSlSdkZAWE07IzpucVg+Lld5V2NQTEhPKF9iTSlrZChZ''@;'; put 'put ''UDFqVndxPnFTWlkzVTc+QEE/PjAiXiRldUhfMndlTmVnJntuJVBNIXt1VShoZCRQR2RsYSs8aG1aZ09deGx3IUhwK1NZZnhVW2ZdP25mJiVoMz13dUZ0KktpXnNZXWhIQ2NCTHQzaWtrP11NKVV8PCIlNmNIZigrRTptOCwlNTkhUSVdIWNyOVZRSl1tSXkjXzBbbix0NS8/Wk0hLy9TX3MpNyEv''@;'; put 'put ''KmUmK0A8THc8SWUhal09fHdRbyVnWHBzZWlxMDhdO1RwWnUwX0h8UjglNSVvbD4oViNVSm1nRSQjaGBWKyhAQDZ1MTA/bT9nMDsrR3s5ODpnIW9vOW09OnBzOzJWUSN+Ml5JQlBKaW5jdS9rQDBZWTd+QWBAOnpYMnQyfi9kVTl3XTR9I0FlJkhbXSVgI0skMHRyfFBDOHBQaHwpWDg8bX1DNGdC''@;'; put 'put ''QHt3I0ZXK29lbiQ9bHFkSzNDSVAhOShfcSZsJWt7JDYlMXo4NUAhcGlyQ3BDOHRlWH02dWtPPy9yLzg5Oy5ePER4UyM0Ry84U3NzZCtlSVBEfDBlJWMoP1VUJDBsXlB3K2VgJDI0WTVzJChvViI6cFlYZE9eLlFuLGhSKW0/VjsrNS9XQiRHX0xlIUhyMTlRLypzZT4mbDtLI3EjUyhyeyNdemQk''@;'; put 'put ''IW52K2NiLyEvakxBQXYoS09DIndEX0p0Wkh6R3VmK1BQOD08Qj1KIitATzxMcWA9WjcxbFglKl15PHZJQUFBQUFsQkBRWjB2Kn04YnA/XV5pIV01fikwTFdPQFRNPXxiOSltcVB7ZEFZQXhSZk1BRWdfN0RSTjhneHtGb1ViMn01fSVHbyM4eUleN35LNUgmaHNGM3EuQ2lZUVs4b0ljYiVmLE9C''@;'; put 'put ''XzA7KlVsQHtOZzVjZVZITFcwayx6RkhXTHZtST10c25nT0VSNmk/UFAxSmVucE8uNyEuIihaU0tSbzIhZm4uWFFlelAkYXw5OnFQZ1JDQTArNXshTEFENGgrd2JoSENTP0UobXZ0K3YxVld0VDI6KHhqTCNEfWlRdD1JW0x5ZGdCcypJJGFuYjJeP1hWPURudSZMNnVRPE5tOUlQXjUkemJ9RSIz''@;'; put 'put ''Y1tIfXY3WltmeHhnSHJJNVVjMnJqQ24pfn19MkxLJkpMMG0xNHBQS155T3g8e1JWSjhZWlJiZF19I1RVJiY1eVJPST8/WC42bDtEd29BVVRSY3B7MVA9X1dYdkdKYT1PR1cudXB+XkAufSEkcXdka20iKnsxUSkhWz9gQDRkY2RbSHcjSnZNaS5WZWZKekpaMUdIPVdTVFdyOWs8K0tIfF8/IVgl''@;'; put 'put ''YmkkMHdLP2IpeGNFeCxvR19sbChrdzEoS3BAVGQwLH11I0lLTnQrMFpGS0lPQWdMN1Qua09nOXpQajNSOUthfVhhNFU2Wng0PUVlfkQ+IyxIVlFfVE56ZlIvcj4pOEpsTzV7Ql9dWmJKTVtIUytrZDM7VmclMklvcUxGZjxraiwyOzUzX35dXShDU1dvQGkwYiRzcCpgYnE/QkNDUUdwX1olcCVI''@;'; put 'put ''Tzl0eCkhZH1jVDJPe1p9SiE9UCoqMF80a2N5XVNUSiQuaFo9bkkrJkFjUChvNlRMS29IRkhULmo0M1hZIyhPND0ldGtmT0MpLkh1NkN5SWUjfXh5SUs2SDcsY1FGeUdGUj1VN1A8eWpHaGciR1dxUzlBKm1eJXh6OkdiaFFXL0w7UW9nfG99JTQxYn5zXWA3VmtCaXB0QmtRZEl4fUhCNjQuY14p''@;'; put 'put ''WFo3eSsvamk2YDw/ekd0Wyk1ZFg2IXg5Yj5PR18zQjU/UG01Z3tOUD56VmNjfjdOUGQpayRdbDpkRTdtXWkoOG0rek45P117cXc9MkZ6ZSVvJFpINFlzPHB9SiolUlUvXSQxdm9AOFpDfmh7NzNtRm9kXXdLRms8Rl5vMG83PkB0NF1ERUNrNnNydUclL0liI0gyNCoweWRyXkk0NT42WUQzOVpb''@;'; put 'put ''djpmTmopRiRVcV9NdV1sS3VPPyFeUW13O11DODkuaHhzKSFkemljXk40TiZtK0phe1ZMNjZXTGBIZVRVV2ghUHRxRHRZWzN+JWxtX3BvdT1MYGJiXllOPipoZEk/O1J9bzBaJHlpMUlDNVlFdiMjWG53YUB3JTVecV0/ZUsrWntIPC9HSXAkLnh5NFs8fjpyTG4wWkplZmk/XiNVdSRLQFZqeUBY''@;'; put 'put ''X3FtVjo+PH5zQjModzp4WC8qWCQlOmhiOVJzW0UpIWhOZVJkMkdaaWdnKlA+VyVYSlAmUF1ZfERyRnt1fEp4M2dEUnUqd2NUXnNLSkArQDMqYHdNNHYjRlJ4T1R2bW4pRDJLb31HWlpTYSUmPDdbQHk9VUVhJV09MzQsXlRoeT9rcmhIZy9nfi5QeC94L2VZfk1TIytIflt5WiNFYl9dbkkyflcu''@;'; put 'put ''NjZvNUNdQ1dVVEltc0h5MEA6WEEsVnoqflRsW2JMaU5ELGw/T2V3T0gjQC9XbmsjL2IpaXxmejZnLzFTOWQyX0R9Pmc6NCJvSmo8VEJXb3Y6MWAkPm5oUU5WIll9YXxwRkVNPVcvKXZ8K0NPY3pYMCMybmcieHh4RWVMT09+Ll0qXzs/Z3dOd1t6aU1VWldea2xyKGtxel56QVpNdCtPTHgjSUto''@;'; put 'put ''JFNEd0RZQCQwRnJFOHUicEszKX5vWXh5bno/fk1nYkhJMlklNHNne3lGR1p0KUIpKjhIVjNQXUdnbltvTHk1b2J6ZSlVa0xFW1NxbFh7R09YSGZ5Qzc5VWdgUi8/SndBKXlnN1lOdXZvOyg7QktMWjRjbVRWay83QX5Pd2dlajZDT3hCNlZbdilsdDxyXV5wTmtrXVpxKVhSOEJbJVozaFtJPUJ5''@;'; put 'put ''WWtwLGxaRDJ+fXl7eklLeFk5ejVTdHEheUllTCtdanBMeVF1K0ozcWFUdzlPLCMsRjppNHBDdkl1Ik9WTEhiL0MiSD5Wcy52fFA+L1leQEBPdC5fRi9VKChNUWVyWz5ZJkc9aDl1TT9PV0dYOSNtQURrTkdfS1hMeVlrdHpRUkF4bEZiajhkXX4sbixxVltxIUQ7VFVUXn5TdkkycyFkbkRERGE3''@;'; put 'put ''QGw2PiltOCVCLmU4I3hmRlchT3BTK1BpNWYxOjIxSTwyZHc2SDV0NFdFWHgvQy5FV0dqVilsI3oiTlpYNjNUaSwsRFFHRU0xU0gkM0NsMEJVYExoUWp6cF1yalhkWzVqaTEmNDNTfig9TzF4KjhgfkZ3RztdPGVdSEtVUUt6aTk4MkpVKXFpKXxGW19UbDF5KT9iM0d4K2oyLGFgLk1iK28ybjVM''@;'; put 'put ''akRGMnpRJHUqX2EsPS9+N1h5aUxQJUcqb1hVcVd8PkJqaEI5bnlpZ0AoPU5WeD9kPlkpJXF7M2AqKDBhU0xJJkkpWU9WdlZ7KUx2W0IiSWVudyZPLispNSorJXw2ZjN+Llk4ImpjWDJHdy43K1NRRHZNWjh3TmNQYX1dIihFRyhRTlE0SiwxLnJwQmUmKV1pKzpPO31GNmJTKGRVcHFDcHxeViE2''@;'; put 'put ''UU0pX1JLMElzQFJaIkA0c0B4P0BTN25GRERzKGthKXllNjZALHdmY2pnQThdOkM2Nmx1PCo5aDIrY2tvMChHYng5fEJ+OXM0JTVFLGlsMk9lUkV3fUMzKVVkTkFkRi9RSl4uJEJOZDxrRShreTtJYSYkUFFqPSIvMX41VkFyYEkrWHddKT9ANDRIJDlLMHo1dHIoLix1bHtkO29OJCkkNUF2W2tG''@;'; put 'put ''V0BpdjZFSU9JVFlLJX1yW0crPG07cTY9Qyk+V08/WiVGU2pXRjNCaW1hQlFndjNocWBYZlpFdyIsSFdHX35UZnYrdXYxZChSRG9sRF9feFEydnN2P3F6LHd7OXJJQmBub0U0QSlrJVc0NjdeOn0yMmtWYFoqJXt3eEE3NDJIZ2Y4PFhvT0poTG1zOzk4I0tueltxcEtiQFosKyFYNG9RX2Q1KmE0''@;'; put 'put ''ajJ+JHZqbGJoR0RIVnsmfilgOXhBVkU+NkZeTkgpUzVRdztgVGo5dmBgPnZMKjtRYGUranRWP3VSVXM6OmlFMj4xLChpMVdMR1s7YFZnVTw5SVZKRTclYmFpMSN6ITh+UFtfQCgsT0ZGbUZTJnNMbSlSXmNpaT86Vm5eI2dlKyZkUFlRdXtOdUM2bXNWMl4zYHY8KyFVeXEkYTV3M3Q/XmIoT2hw''@;'; put 'put ''a14xMXpQTSVmWVE/ZW80OyklfiIqQkR+NHdAIW5bIy5AZmklVSgsalJDL3lMa1NTdkcrLlgqVlFHPStwTSlwWU1iYmQ+R3ZrIXxaOmQ3bi9AVHlHclN1eDw3UEpPTEoydUopKD13d08+MGYhP0V4M3k5M1N4eXZVeWQvIyhJUXxVJmVqQCoubHpBU1BdUmgrSXN6VVl6byoqXWFgaF9DWzduJTpL''@;'; put 'put ''IkE6ancwYGQ9WUghOD84Q286b115Q2FSZ3tKfCtfVkt4SkVGZzRpbSReTVRaUVtNI0k9eH5qQ2M5Mj9Ic2deS1JhPFN2OkIjfkBgMShLbFl9IjtBSXhYQWhKWE10P0czc3hPJCtMWkxAQl9UTFRnVlJiUXlkc30yIjwzXT5MT3Y4Qn18a0tzMHB1KSEsU2kiOSlIVWNHeV5UX0A9Wm1rVFJ0Im0m''@;'; put 'put ''Um9ERHd2aj1VPnY6fXFkdEl7cnp5PS5fOFdEN1pwdEluTj9nanhMayJQMks2Pl1ePDMlajY/ZSxiaT9kTChzUVs1RGA+bmY5RXR3V3kzRSVafHM9cGldPkxLbVNjYmdxJklldHp6QHZ5ZWpEIWU1flZYdnhhdz1fOGVuO2xyWDlrQG58ciVKRVcoem1IfWE4W3pFYmpXVj1aW2AoKUBZX09RPShb''@;'; put 'put ''UilJO140aEZTRGE2UDJGWWZMezI3bn56d1hrZTtyYmg3N0BufEV6aTV3ZTVZRHUwRyYiUzo8NzhhMy9jW3gvWHU/V1dPeTsvI3JZZHchTU0yLzx+XnouS0IyNHZ9dks1bz4kLmx9MXMlRmkmemJoU0x3VDQhWnp6SXhUMV1XUC8zYXQ2bCFgdENHU3R2ZEQ8KylPeUQjV1gkI1tYQkIiYn1bKUVd''@;'; put 'put ''UiVvfFp6KmspQmE6XyImfkJZckphYzx2KTFCZz9Zb0gwO1F4Z3s4NGBBbyVIPmVIaDRrIkl0QmVbZjdobVd5P3EmQyNYXitlU1ZZeVlORSY7SyJlOz5seFYkVXluLD9iKSMzM3ZPL18+XiRuWVREIiJacGNTXmxVX3xWPTF4Q2xiNUA0S2RPO1oocl8pMUYsekUpWT52I0RGVVAyMWgvO25oYS9L''@;'; put 'put ''S2MjOSpDMW16QSM0ZGgsc1ZKeVl0d0hNNEZgSjhPLnpfd1lse2RTeVghfEwqWUFKbyhPOX4yaFosNHpQRj8mKmM/Oi88Ui5FUmZaMXB1QzIkKSkxY1hYOCN7JTpCVFkzZSFgOTtLIUA/YCVZL0pDfUJrWnA8Ri49OCE5az1bT306VjVKclk+SUgxV1ducGZAcjQiPDAoQmF8Sn1TXVJTd2ZXJkdK''@;'; put 'put ''JDVWc2lxaTFkTGM8cl9EUnddX1lqTU13Mn54LnhqVWxGSzcpKXI7Ln1UfFdybHF2PSVSWnB5QFR3VnUhfkZMT2BLJEB4R2Qoa2Y+VCZBYUk4UlhtYUw8ZHM5c2laR0craCFCSmI0TmVROEdjeEZYcEQxM3NRKzp8QjNfIWM3NlR+LGFeVHdue0BPXXRyeUx5YjdWRUJzZlpWXyk0fmhtViRlO0Jn''@;'; put 'put ''MVI/ZUA6XyxnNEZpW1hRam9veHV0ey5eayEyI1JqZ1lJaGorc0pOanR0MVQ1VCJhcm0hbDUqeypXZm1gLD50bWIoS0AsNHpkMlQkNUU7MEMiR110YjJFTDxwcmc7byVqcWppVG1VRi5vcnxHP1owJUhyfHx9dG4jfUxuVVFyel9HeTltOmNaemxsUTNXaHxyW0Izb197ZUgpWk9QWmFnM1VmaVd3''@;'; put 'put ''WEk3WDdANiJDMmYuNEBVdUhLMSE1VVYmUUNUak44Xyt9VGFqeWFsIVs0Nkw3Vy9HV1IvU3pHI05hOHtzTjNKPy98WDxbfEIlRVZxbU9pLj9DKkdMcGxYP2h2JTJRMGVvUmVoQkI+RHNkdThwWTxrLDtCfDRfVjRUKj53Vk92eClSMShTPTY2TDtRXX43TFJnZWNYYHRfLDZUdjJkeFAwTi8xZX1V''@;'; put 'put ''I31BO1VENWJBK3JJcVpOYyVKWkVxcT1SISY8WTh+REwsb3leaGh2SXhrfCZzYyx1QFY9XTtbLllUd2BxXnEyaXp2K1pidjxUey9jVVNBQnRrMEwqYGZPa3pkbUp4cTRGb2kqSG9AXyQ/LilkTEZEUTNLKlp5e1dGQVZzMXticTY9NXMufHJXcHRdbW44bGpseHV3P3Ajc3tGRFB+IncpXTNWKDg1''@;'; put 'put ''Pk1lYjYpNUN6Xms/PGNNYFEkWVNDR15EQzR5YlJwfU5pPisqWHZgYXJObFM3KSwyT3lQQ2RGNDcrZG1FUD9vdmJDM0MmW1B4e3M/Yi49K19JLzdvcXo5THRGPmdNRThkPzpKSk8oXW5pZTR+TV9ifUV0NDB1JCVYL353Zi5xVjpmdkpdcUAkN0lyXnhIezg5SCMjanBUOyRSIjhbcyY6IjJaKyM8''@;'; put 'put ''ZXA+Ki9lSC9SOmZqWnQjKShGbjVjUkQpYkBMaHw6KlJEcmQoRnpWX2ldR0YoTjFdO3QybWBCbjYybEtdRktxeSlfW2R8UV5qRUoyaz0xLlE+MzZuYXpBayopRkAvdnsybWl2cWAzL3lDWlYofXdVUnNSVi8iZTd4LFclSz0qRGk5cT1AQ1hnOXdwKCYzOk4/W1JrXTh1a1pUaiw+TixEWStJV1Fb''@;'; put 'put ''a1dhTWpkMlFIK3xHZSp3N1U+ZE1hUHxJZUU2dy8iUCtXJmZAZTk/WGRBVGJjeUo5ekgkXUxoTjFGdj1OKjd9LkhWUVk2RUomUzkvTWB6dzZ5KjYqXWI7aSszX1JbJVt2NkM2PGd4I0xVa3Nbeks0YWhsRX5eZSVzO2tqdFBHPiZJdSg8QkcvYWl+eV9PM2JYRTgvWUVRTERDdmxDOE1wNnJjeXc/''@;'; put 'put ''Kk1kLEUpc3piTE91L0VsOztPSls8Y3R3NDUuZHU5ZHpTLlo5VTdtMHMweytDbGdaQWwmKE8uSyI8YE5PWTJheEVlMjNXblVdcipxTyJNMT1HM0R+PnRGfFU/QGMoISM4UGhwWnh+eXdCd0xxZG5vL3hpUFsrL2g4YmAkcVBRTzhdPHwvQmxiIyp2UHc6KV03cixRKn43RzpaQ20vPEN7dEdRWG5N''@;'; put 'put ''UW8ubHJsJXNYbyZPSVdxRk1nS0g3KlZMLFhIcFkxaUhdeXVVaEhRbHFDQkBkISoiYFp2TWpVaTUiXmslZXhvdkJaV2cieFRzKUBpaHlFb31NKVVxXSJzMjhsR0kyPzsyXXZEcU9RY0wqe3MiKiFsNT9ITjR9a2x+JDR5S0NjLkJCV1pecVM8SCRlJT9WZUNCZmcifWsyT2Y4bD4odyZRU0V2Yjw7''@;'; put 'put ''NW1BKFNqRilIczMyZi9eZXVEQlclN3RVKlkocyN5RUpYbjxMTG1JS2I6QXErXnAwbmw6dXZMX2sxa0FxdSloLHdafCMrUDtlTHpOR0c0RWM1QlVXPVptPHp3NlpPdTZWI1RMSmtUZDE8OzRXZCkwb3hLQUFTalRXU2JOWzBsfHFRNTZmNDtWaTtgIkNvQE12dCJSamFqOH5BYUcjV2AzTiowbmJN''@;'; put 'put ''T3RLcV4rK2kmQj07Vnc7NTdhPF9aNkosenY9OjxnOV58W29tR2NpYzxsLDopKzlmXUxmJk8xSzNnXm9IOi90ei85OjhVSWMkfSUhWTBLTy5zNGdoVTUvKUBWJT0jcDReP2l8K2dIeD42V2lWRCxHKnJmX1pVOGdaKXRde1R0P1B7anBhanlXPllSO3JlX2ZZbkI2YEsvalB3YT9Ic3Zyc0o3PHpv''@;'; put 'put ''R1hpdGkqMV9INlJSTXdkXWIkfjZjU2xodHY9X0NXeVROQEZke0hSK0FDYExFZTFHeStrfi49S24mNDQzJWxWMDdqck9BSylQNF08KT0jQTdmKyJjM1FLKiZzOixeT0wifjBfY3ZlJmZQXV1DKWZWTGVRd1BpT3FMSSltP0x7akdTal0pNjdrXSRRWV81SXFqYSkyITxNeytqaHpDQTBBSFF8Rjw4''@;'; put 'put ''YFljYCsmISZUQmpVYiFNYnsjRFtIMTplTyJbYioqaTZ+VHR6KnsmTGF2dXk4Ni5YVkZiV2xERiEhXSRVTjU1bHRPKT9wN1NIVzhZbS9GfDw+KkxBcmd+Vkdfc3hhKWlmKjZnPWhgMzVPPUxmUy9jeksmOEMqOGVTWjV5KmRdcDdaZEc5OnU9NWsjVF5vLD1tK2gocjEld1NJUyEsfHMwSC5CMnUm''@;'; put 'put ''aUQsJn1dcyJtcTZfSENqRno6dHlSbmJfazBAIUJEZl4yLnFdP19JLj1jQiJPPj5VQEspRj1nZS9yZy56Mm1nR09eSSozWzBXclBMJDFPIyRwbUxvcUNoQyQ5V2h9Q2ZORSVkOz5TeyVyKHhGJTpeZDU1NEpgfk9SLjsuQX1+KVcjSF43MlRyZHlEay89NllANlh9PSp1TWdqPT1HSyxnVT5xSTxb''@;'; put 'put ''YHJXaHZeS1QyezxZTSx0THZZVix3NW5QOHssOjZyYVEke2U0LjMkMCt1d0pGRn5jSFRvVkQ8Ylo2X11lKylPbTFdeXV8QUsxMXNQfkNyeDpfQmxHNTcrO0Y/SVgqRGgwV3FOQFBMJHs3M2slaClPRys7T3RRVUpbbXxUdDZdTUdxJlNvPiVhV1ksN2FQUmp6MCIpfEJeRDh3NSMsOGtfJWpQRTQm''@;'; put 'put ''MndfL19zP0Yid2NIQkZZYzh9TDQ3TFdod2hzUHYvRXZua091I1k2am45cEh1eXExUjdFOVF3QW1Me3dDYXtlKlBJXWN1RCp3SHtrOH0+VEVdQUowLDoqJGFzZjJIMDtJUnplPFpjODVXK1VzNnsjdnxGJWNUfi88bz4hKmNXTyZARiR1THdeL1VPYigldk9QM24rdzF+SzUqcmEycVViWzA1Q1NH''@;'; put 'put ''dXw0OjFhdSJZVnx0V2Bma1JUTTwwVyU8d19SVGM+fWVFJVcoWXNDT0ZoQVtPXk02K1BIcSpHcUhIKkZaSWtNSGorcn5kYmo2XUcyU3tqUj1uP2lsdUclTFAsaDJ5SnhoQiIyaXoqdiI/Jkw5aFAlNTFOQHttSTxqN0F6ZUFkd3JoRyhKNm9NPyptaDJDIUdkQkNfO2IrTCJFRHZjTGlUL2FgRU9M''@;'; put 'put ''WExRPVIhe31hUCteSGovNGBDWzFGT1FaZXlVOlRSOnhjYyl9T3srRnh3dlB0b1dla0VXbyZweWdGci86fVAvMmhIUmp0LkZNLnpZNjArdTJSbVpgUS5nN2FAbTsuREEzX0U9OHl1NkVBZ1B7akw4JGBXTkh8MnxeVj9KRVtuWmVEUzBHY3dZWlNRSiEyRVVuUDhPO2VoMTV9YDA/MlRYNXpkWyYm''@;'; put 'put ''THIkPlMqUURJKDA2OVFXYDc4aDNWcD9rXWpEIncwcDFdO3JzMzs9Wz1PSTNpKDJsWHlqUSlENnRJYkIvLmFdfFc2OThfNCM/XkspN3FEcV85XSZhYjxSTTttYztJJmk9V104Xl9qOWczMjlCfGhoajtsLE9HLll7Yjh7M1hVS0pPdjd6fThrMi9wbmE4cXNjR10xYComZktUanYsOyVCaHBfcSpb''@;'; put 'put ''UW5uMVtPIjxTenxYOC5vWXheYUVXQzJtYndOViNJIix6d21uaUt7WkwoK3Y8UkpkYlRtQCV6ZWpfazo8UlphVkFVbDVUe0BXJSklPU4hQ19fbHp2fVJDdVVNJHJOXXU9PSpncERZd0RQT10/JWlSaUBCRnlnQ1Q1IWRSdzljOSxgcnhfISwvPHxpLj9hYWpDclAiUzRWb3QsOi58WUBHVl5fdX19''@;'; put 'put ''QmdDTn5zOT19cjZSSndfdm5IPWgxMEtLMEAwMzJffVt3NWBAYj40cWFzO1RgJFBpXTpFRDE5dFQ/KkFUM0RAM0gqZ3lKen5JOV16bzIqIkd7NW06SUEzXnMkPEdrVi5pKmVvTzhzajVjM09Gbi4uKT97W1RZPnpvLkNxP2NpaDEhck1AKXc4N2BNXUpBWW5SSjosS0J3eVk6U1ZyTWpKOSRbd0Qj''@;'; put 'put ''cy58eCZaPENhZD5ofCkqLy8iNEJbc1pfSkZCNTlPPCZPZD9qN1cwKjZ0cGB4OUdqdiRvOGxAeHVtTkcsKDY4T21oPG83OFlCWjp9Jkg7W0BPMVp5I0h8SywoL2pqZUY0UmJ6Rjt2SlZVJihAO0FBRlltWCJhUGJ1b3lgZy4mW2ExKndYJFpBODh5aWg8cXt3ImBBazg8PENNMHg7KG0xPnxaJkdG''@;'; put 'put ''Yzh3Pz0kR0RGMV1ec25PenZsTCZQTGpMamxLOHBjUXEuRl9+SWskfGBsfTdWcjFkdEkjUXMiSjhCc31kOXs8JXBAXnU1VytLNGUic1RqKH1zKEpURCNpQUppTCwxLlB+YSV+XUM7P0BMbyt5W2Yqe0xgYUk7Sz5aM0lQcV05b3s0WWMwelM/aExScE5CO1gsIyJTYGIxVEBUUklLa2pzaDUoZnop''@;'; put 'put ''byF4azNqbWJ9Y3AoTStkLiprTDA7TzNnM2o3OFJRNE5RaktGQEw4VDlTQlR4UzcwISZQfW1RaXU5Knc3dHVxUU5TNFciViU0fjBjKiR9cVcsbTJETyk4UzRHQlQ3cENFZDxyPmhiblohJlYjKURJI1NSPDtxNnIxIkF1WW48VGh9fFV6dz1dY2NVaCY9NnRzJDJyQ2oiRTxHPzZPISl4fGpLUmx2''@;'; put 'put ''LjFFTTx2U0tLPUxkZj5uKm4kLCV8d3ZrRyVeOiYrYWIibWhEak48dEZnU1pZQHxnPEdbe3FQQV49WzQlLnF2aSxTPnU1TW9WWG0lQmEpTTYycUVgeHZzOUJHVj95bDYsOyJleDU+VTh2RVt9enB0bk52IzQ5VDNwc2Z0R0IvcDZbVCJ7Zk1eJTB0RjRtLiEoTUlxZFl7Z0ZRITN7N1EvJTBfRTRN''@;'; put 'put ''dWYlMElYRWFQeld3Wz5pSFtEUzhXRXdydHVeRXFKJi83PyUhZk1JNyE/TS5FOS5nNUpRcVU1bSpWcU14ZnF7KVoobV4/YzZOVDwmR3JVUm0lTXxAOTpzcHMudkhLTWpQdmwhRD5qL2Faai9wQ2F8TnRFPSlTc2VKSG4lRD1daG0qcnBucXZPSjdeV15rbT4+dzF5TlAxXWJiI1p7JEJXOWk3L0Ep''@;'; put 'put ''W2N0KX5FJFtwKmtdNyp0PS5tYk4yKi5NW0l1QmdjWXx9a2NWVW43NltafntHd3FhYUBvSXg1N1d4cl54eiVVRng4RDU4Kj1UUFB0YmlXOntJQEErWW9kSiNKQXhSXl8vYyRUUXJtSCw4Yyk/TTkzfShdfHZUKUEzNj5xY11gYX10YGoqInZ3bjkqa0t2P0xCNjQ4RzxUNzkhUmtReDlwcVRUfEYl''@;'; put 'put ''NSVjITk9NjMldXIqSCNffHJIPTlMTTg2cn5tblk/NTVqfCpHXntlXyRNbCRvK3dlWjI9aWBESU5BeCwqZ2gmd2JVbDp2N3xVYjF0WHNnL0UzXWs+JjRqKXVmREwpLzJRT2Y/MEgkek4sUS96RHNXcTY6OyZqbW1URy5TaUxDO3MlVGM9IWMveHpvM0g9Mkp6Ul5ETCY5ZU56S2x7byFRb30kJHxt''@;'; put 'put ''eSlaWCV4cFJ6UD50NHd1Kk9DenpZb15pcCgzSU5WUDFMX2p8N2N4aFZvaFZ2WWF+JDU8JF1XWncrUT5oTlQiWE11RWRKR1lHanguVy9WSD9hTV1nfSJ8NTdBQ1cyWFFfKlpvZWhzLyFaRGpWUFAjbiJrVGF6SSttWiJeYGYqX1Z6Wmw7aHhWeXdSWkghNz1aaW1AUmIkSCJBQTV7PlpyLkZbZGpU''@;'; put 'put ''QD9Vd3VFMTxDSlldYF0lVzMoa1FeP0tAPDprIkpZMTg+U1t9K2RnczRIPl0qV15SSjhgSCE3RkBiUW1VOjZrdm87KGIkNHk2QU9zXTJzdnZpdml5QXpiOT5dZF0sNyR7OXUmNDtWX1BbSDt8V2w+PWEsKWddOGd7SkgmZGBjXnVsZXAwJDRfcTp7eG8uWURtOjFHQCF1OV9tZT5ycTM2RmJ4T31P''@;'; put 'put ''JSFTbV1jWEV8RE5UWmNdTkVwejEscjd5NUVVUFBAN3xBfWNiZkNodzRTaj84VFJ9IWxHc0x9WkViSXlMazN3Nip0P2UpS0tacm5RaiJNSDpdY1ImbVAyK2pNYSFXUkZURjFqIi9PMHtMJWg6WlNbNTB6ZT5ie3daM01OYF55RyZ4ITRDdEhfWWIsfWZRKCt4O0gvNltkLk1ge2RwImM8RTE8ajxG''@;'; put 'put ''dTMxdjRdUFB+N0tTUmNbYXl0NXZMcDw0M0s2Mm5vfUcuMkw3akRCZm5dOV5bW21CL0NnYVc6R3Q3M0BIdl1sUEBnfXR9IUxDfiVAVTYkKmRDZytZaXprJn1TQEIrJEU1YnMmZWljWjZmSjJTI1IkM3xpMUhCZmFIMF9aaG1KIXhCKUxUYiZIR3tTVlEldENqRnRWWk8kakgmeVtrUCFhTF52KU1s''@;'; put 'put ''UixJZEl4NHJ0W0hgLDUqQz82R28oa3lAYVRnP3E+cWokcHZaZiMzSHxMYmI6SHZhKm8rQm4/cy4wN0Q+IWBYby9td0lsQ1N3P2hGVG5+QnQsUCV1KixCKEZtMmZuaEw6I35DaHo1KDhYfDIhNUdjJFtiWnR8YkdmQUBkWGFedDs/RjdxODR7OEYhWz9xT1dDXjsqZEJpQlhLYUxAYEA9RDZ8WEMi''@;'; put 'put ''IzNxd1ljaH5iITsoemI6cTFUOSw7X2NMSUUuOFFnczskR1Z+eEdMOihreChMOCpdP0lmJV5LQyxuImtxeEkieldDeUlQQnF5Q2o+fjJDNFVER0lmal8qOkskPj0pLD98b3Z3KSE4I1JHP24sR2p8aEFDPjRPSklWT3tHQXlVfUx3W317UEl+YHxfRVpVR2xISV43clArdmYsfHVSe29GfW5lW3Nd''@;'; put 'put ''KSpMMDdlelo4YHMiSk9YPVJeSjI4cFklNX05RWx8UXY9OjB8JF5oTGhKRXJLaChzZWUwciV8S3RoJFlTNlhGaCtrZSxvJSVKMXsvdl1fVHlkTTFBZWliOSFHLHBtKDhgbU1mTiwwNFQvZH1fXmJ1TmhRcVd0Yk82YHVzN3F+eWI0fUU+NVNHbDlUSFZNY3gwMVZOOWwwOyluKGtIbFU+fS9qaXRQ''@;'; put 'put ''KldXNSZWQUNmdzxhR0QxeXwxVy9XJHQ0US8mb0BnUT9HMGVeck9rdjh5aTtISXQpZ1tPXzs4Nm97UG1Kb0wqQCk6VTZ5TDd9KFslUVJ5PTo2cjErfU1GWHUxL0hHfWFkPmErLypLYGd7SlgmJE0ybHxfZHlNN1JONXl3ekNrKjpqWFh4QmQiWTB2WlYoN0RhcDYoI1doUT96M2ppUEE1JVUmdCIh''@;'; put 'put ''VkxrT1csKSl4aXRyX2E0cWo/LGR+NXpfL2pQN0ZDKiluXyN+RHA4Zz5SJmIrYUN7Q3BabEdqKk9DIyl0dj84YjMhMGAqMW4oZHR4eCI8XXBxdGZlfGFYUyY4RlV7all1WE9eZl0uNmM7Szp7V1FMZzcuNyNNWk5XdH1JK090a0dqbkQ0c05lNT43YlAqR0o2PTNKME1nfSt4c2U4alU/TC59d2VX''@;'; put 'put ''Niw0PD8qWmBAQEdeWDtHanNdYFpwLDpnfjQ6T2VEKG5JU0FZP2kxfG9vTkksb0I4V1BISDp2dFJsSXssL1R7VX5WfnVJNz1ZVmtgND8ySFEzL20vTGddaWJOY21xV1BRd3ppXzNVUDUucjFpckQlMGo6fmgrWmdedjc2dSkpd0whQllXQ1FMWV5MaW1FZyRsZE9McWBdfi8xVlJme3UyaElffSZG''@;'; put 'put ''MWghbkc1L3olZ1JCMXFAQUt5blB5eUZUUkd0fSEsJXgrTGAsb05lUGMzVExOYywoMXI1RzkpKihBcCUlUypOMUssPH0mazkiJlI8Q1R2eDltJHpjKjM3QmNVPElmQzg/K2FldHcqeHN5MDBRZUo4bSh8ZEgjNjgpOj9tKH1jSkg8LmUqYWpHU3whPjMoNXhMVkthPlBlLDpWPFduT1kuVmZTMHly''@;'; put 'put ''V3F4dGQ3R1Fra35MMD9mR29HMntmWGc4d0NUXWJPcy9pSjFxZlpRbjIyZTpjd0ZXUj1aWW5sO25DUWZlUGxkJGtTOFhyeXJ9SDNoKV9AVVtjPVped2FuQHpdXzA4ZnFYW0d5bkAzL35EfFg2XyF2ZjN+TDliImUqLGN5e1AoQmBJRFlZKmVnM20/Z2ZWQjo6by4ucj1WeSpjLm9ZbGsrPiFFInZs''@;'; put 'put ''Q3FOKCF2VXV4W118MGBqY05PL0heKld1a0taSF0qYDFgey5QW0J0YHBkRXowKWlRfGpPOX1CQUNMKVRkYi96bmg6KWtKZF02Vlo2LlpKZVNlQ1RUS0lUaHZQYVFUdFtsYTA3TCE7QitVOkQ7OiF5YVV4JkwhKlRIKjh4Jjt1bHM/azQ7WUlWQTE4QyFqTnVfNTw0ZFlvd2R0c2U3OUZsSX5ubzts''@;'; put 'put ''dHBdSy9OPDwrbl08b0o4OGA7SERnW2xycU5+XSNxMEx+M3Z1NUJsfWpMVC4odlZ5KCFac31ATHMmR0t2fE0yPFksJlJIUCJLRnxvLjw7MUZKRll1fEl5NzZUWiplXzwyNGFXV3pJeWt1NDBCV2RNZVdIPGxoIUNkLmM7Rm9DbjI8XTAuQkp8Wm8xOkdEP2pKPEp9XWlseSNJMTpReGQwJl1+O3dl''@;'; put 'put ''aTgmOWpfQ0NNeUVuUHc3JXFBKTxVN3hgTlBkbnBXfkZGX0JrNHxKfUYvSmx6ejFPJkF1R0c/SlBWNnliQFJIVD8ran07S09WTlI/ZUNGO0VJaiYrb1U7PHdWM0hDI3JRPzNQSmA9OiVXYzQ8bCJjZTVyZi5NWkx3M1d3fkJuc3lnb1I7MVApYltCJm0scS5qMjkycmd1Ny9AVUw2Uk09Mz52U3l8''@;'; put 'put ''ISVPQyF0XUpkazAzdDFPK3pSV0VQPnU8InZUMGNsP2FebkY7TGFRJXg5X3Q/bDQxZUVFTnx5STQqMTZqIkBaSGY1Z1paVHgmYWZiSCRVU1kqSU0hbyJ9MX5BfXVxQFk6YkE/fkV2STNtdlBPLjBiOk0kbkc3RmYhZGNhOjY0ZHRuRnVwVHQxYDxSI2p+Ti4pP2s8VjVyKXRePFc1Pz4ydlFJRVhb''@;'; put 'put ''Rls0Zm0pP3JwNiQ1RDk5Q0FfVkZObFJyMzpyM2Bmc1dHcDhMW3pteUx2PU17S3l4JiNtVVR3WmVKdTRRczdPeytbTjR8WkBYMnhuQnE8KUZFbGMlMlMoUlV+OHFZXnl5dVYrWTo1bzQkfHJ7Ii5MajYiendGOGYrYWdSS3dsKDVwP3R0Y25gSU9zJEdTZkdeNDslIWBNYEdSNXx1QFBbSmlJUXAs''@;'; put 'put ''WjNtQDArfWhmUkgzITRKam1EN2pOWF1rQj0yPT1Gd1cicXooc1pha3N7L0ViNF50Z2pyPXl2dTNXJHo0OF0mXWZDQDhlNENFZVZQKWFJTiRMI2lUNFcyVXN1eyZbZE4rVGpfJW1jcUYzSXcyKSQydm49Rzw+MkAwPV56VDwsako3SF5tbUwiRm48OUM4cCMvJTAxdXQkTmo0ZSozVk8hbSM0Oz9v''@;'; put 'put ''cHk/Vz06USUsYF8kWjptfiR+aCFdTGkjZmMhb3F7Z3s/I3l4fkZvUzZ0QypGfFB0bihGKWtKISkjWz4mJDZgOiFlOFdCb2hSP14qYTpIemVMUEorTUkiMzo2NnxDXURFTHxqXVI8ZDZFP2I4IzJiRkU8blJASCxveDMiO0IsOClkeGdSfXsqcUUoMUBkNiRSejVGTTp0RXZrdEt1SF1vIzNBQURo''@;'; put 'put ''OUNIK2NvTS9RfnU5OE42e081a3RhNlpNRGokLngwKyQhMkYvUVR1W282TktVMjJvTTxQOiRTPkorL0owMC5ITiErfShPV0lNSXVAZShPWiNVeWdtaEFRJjdpJl5CblVfREgqMn4mJlQqdzhkd2JTLGA8ZkI5YjcjR1VoPkBpbEshLmsmUyVkZF0uXVVHYTR6PVo9TEhKT2NvWWZsbWdsV0JAe1pz''@;'; put 'put ''YVNQKiZLVXVDIzFpQk0ocm9nKDVFal92PmAlJkNDIl85Nz9UNzBxOmBCdkZydGRBfGVHS0B5K1dATmcwNV46fG4qUnsrTTVGSH1bZ0xSSXZ8eG0lQm9SLGYkbm81SmF+ZDB7KEBtTG5ZbmE5eTE9bE9ReS9CLkJ3VjFFVGVdMSM2WT1tN04wb1kiZ2gieG1SUlBaYCNNdGUsU0hMOmNocyExWDBR''@;'; put 'put ''W1MxY05rZjA3RVpWODxvUnQjRmJRPUEqfENfZDdqOSZbNng/Xk8iKmw8ZjdfXTorVG1RZzh5dDppLnNpO0EweG9IUkAsREIrR0xDZGx+bDxhdlR5W2Uyc3VTZ1prNm9QLDU0NHhoO2IicVlqQDVaLitXXi5wLyRRcSMrKT57JXZLWV9hI0FHK20mVll8bkVDOyp6UEwjSmR2IXxBMXluUUJKfSp0''@;'; put 'put ''LlFOZD0pU1I8LmNGSlREZz9vIXttOVgkJXJJZDlqOW9keXJMMzt9VSg5VXhHcDNaanBQKnJlVj9CIlBZZS95ITQkWj1qT2pMI2A1PGk3MUdSInJYWEFzfXRvK0tuUClPIV4rNDgrKVt2Tkt6KzB9PGM5ITokUkY1WGAvWlsqRmQwTU5QUDJ8VHJVTlJtNVUzQkpzcDFUYFglZGZlUkFhN0hQWGtP''@;'; put 'put ''Tl54e14zTWsibE44YzVIbEZbY1tvQDgqND9wJkt6JmM9KDt5UndMZF5zaGVjJFNDdTRLUjVrMUh0aXg3ezQufC4lUlZPZilUIUM5TSFCLyhaZjt9WDNYcSIpKXNRIjRrNEdIMipoPnt5JmZ6c2ZVIyhhfCR+JCk+cVpTUzk1c2x2Wjl5e1s3KFMuYCRJVUs6MUQ/YDFXa11IYH4mNXZ1SX5wU297''@;'; put 'put ''SWswblc9S2BPJmImJTI0Nyo6Sn1gQEtdWG84N3FxYTg0MX1EXj0keStMNHMqT1hAOmh2bjZrdSFney93Mio6WncuYzA1S0dkTWc9cmJXQzouRnFlbnZmMyEjPEcvQWAwQndLfD9UIXshaEkrNkk0RkB3VCVJVlJQOj4vSEd1aGI1NHQ8MzZCJjo/NEZwY3A7LDIhZHM6Ukt9PDBMXXtMNW9aVSkl''@;'; put 'put ''Z08pWkZnRHQvRWwwJTFIYXpxYmhObGl3SEk/TDw/PC9qQkIwYU02WTk6a00+Sn0vWSk8di4jPSZ4JkU0RSlNfVtkL3M9ZElEX3pNIzdlUlJfUkpmTWlSNTNlcX0zaj1oLyVCYz99YmY1RClzNEl2OS5BLmVvK0JWNUZ0UDFxPEtCImIvZCh7V1EwSkBdNSY1NjNqWmRPZ3s7c0EiOkUofDtqaT0w''@;'; put 'put ''RHguPD9JeDQ6WWBESmBoQ3YyYTdYYnElRCN9WVU5P3UuXm1bfTssRGdqP2FjMG94RVgzdngqXjFqdy4wOCg7TlJIdVltNkUlImEqYzRGTGRCRiNwPFdBUSNfJSRsajlxM3Q2O2Z1cTZsKytyU3dJe3llL2hxdGRoSjpaRGcpZDVbTjJXUng6TixbMj5MRHdRbVo9TypYMWFdd0Ywb09bY0VhRWo3''@;'; put 'put ''UWtEVjksZyo+RiRaZTtGWUF8KWU3X2lPKFRfJUJ8K0UjSSFQIllCRUorOU1vImFtNisvTVFVOnVTTixLdzRzUCRsR24hdUl9ODdKS3J7K0ByMmkra3grVS9hJnE4ZHVAfVEuK1VnO2xrYywreG04SX43PldTPXxlJFNjRElweyRdRExUTF1oPHFuTlFfQGV8fWMhYl5wP3p5VkgsNCllRjwjV0hC''@;'; put 'put ''Vi83TWk+cEh3amhlbSxZMSgyNndgelF8Smgje0clfXJKdFhXYlZLfnswXWNeIWhwe193d0pEYj1FUSZtTEQ3IXxeJkFNIXBpXlVbWiZteGJnWFdvSEpKflJhRU5GTi81ciksRl44Y3NkMCY9fUxYYkliLDpxXjFRVTZFPjxUc0NhdmU1ZlI4YWZbPHZpJi9gUzRyMH5hfHMuYUkxUUhLXVUuTDVw''@;'; put 'put ''MUJVa1heVl5vMEgjSXBQfl83K2k8M2lEPnRyWVI7XmpTYzY9cGNMdzUjbzB8LF0yMT9QLzplVUh8I0k3SylEWHRhJnI7Yzd6RjM5Jj5vJDArdTJuKy5PVUZBSkg/MS5wT3k/eGorVVpZTSpoKEUwKlI5TSw3fDkpKF5eS117RTE8Lyova1puZGFNSXYjdTpbWzFMRVVSR2gibCtPWzZHemYlT2Ms''@;'; put 'put ''Xjx8RWldZWZQK2tSdWAqLlBpTnU3ciVyPU54ZEBOQ25Ma3o5Z2J0XShdKGkoKkIuay9yPE9zOk9mdXl3cC86c15ueUN0MlF2d29bPEk2d1U/S0NkfCVDNFdMb3k6TzEjNjlUPygmVHBTOWM3TF0sfnlBV2FfS1p6W0tnTFlJIS5Hd2dbRnJMbmFCInV9OU4lNX0sdnRWKjV7Y2RHKjtnTS40bUJt''@;'; put 'put ''NHlUU3c+XksjZ3xPcEJ5cEtjZy9uVUNDWnVbdS9rK1BXJmpSMmZNNUMkWkpGTUdCIixFPTw/enw/LnhDRzp3PFolRXtxVmltYiExKDZoe30sNjZ4aFU8JXohdSllb1ZZIXomU254JUprVj5yKiMhMSwod1MrP3gmNnNPakcsYWd1d1Q0NnRuSTFyXWoyNDlBK0B3RVFERXFFL1sjcE5STzZEVFdv''@;'; put 'put ''VFFoRGhLeG9rLnRaLDswYG0xZHc/YHFTPXd9KkpNMUpLd30sZyJ4UCQ2TlVAPE1POU4/aWh1aFAuS1Z+dVIvMF85b1IvciVyfjsrUiFHYl88OlV8Q201NS9Ua211LmxAYi86W2ZQYjwzaGVocW52KC5XZk5bW0ZhaGxiUnA+RFpLRDhZbitJIj9pS1F5SDZZYj03fnNWPyNgdFpAbX47KzFGKWhZ''@;'; put 'put ''emNvb2NhYkdsaCUpXiJscTIhMnMrK2lDc1ZXWzpNM3NhSysxPCsxU2QjbypFWCl4dGJrQDI+eF0ybllQXWE2NEFFNXNtSThdVGRBR0l8fj5Rb1FPIlg/OUwwZ0NeNC5jSypORlJlektyZUhiPXMpSTA1MzhuQDBaI3IhKyU9SCprOj5FKU9vNTJ2cm91VCNJUnNVUzc6bXZ2WG47SnJva3F8JUB2''@;'; put 'put ''R01hI28jekpqSFR0MDQhaHdbPyJIY29KfDAuRFEleThHMio2OmRIOy91cWMsSVReYXp4ezkyMl9MaDlgd2g6Q2ZWPWh5T3gpejBbUlJ2YmsuXTdIVUBTdFtpOWJnbH5afnw/L2lPWi4vLE51Z3FJOilbPysuTHlWLCFZMH02ZSMzVCxVWnBDbXo2MWZmOVIpdlFhW0Y+UjRKcn1VTk9jfXhRaTdN''@;'; put 'put ''MUVOPz9CR3VqKktYJitVUHlJcjx6Z0ZbeDhMa2xpMFVjaGoudHt1QmtfX08iOT1raWBFLyhCaX1AdykpOj90eXR8TFFhcG9wUzg5ai5sYlZPMDUySGhKJTZEQVBLeyRnOVYpPC4vKXJ3TzxqKyMqPXh+MXZIaW5GWE5hcW13a3syPkNoQT4sd2lpXXN1KDFFZUlWSHU2MyYxP2IzUH5Pe0J7bTha''@;'; put 'put ''PGRuRkdNTyQ7NVJuODt7RXQlWHdNdD5GME4xfkRxTkkiJiRzLGwkOFVgQ1pvdTI1fldRWCs3OFRvdmd3ezNAPmE+THAoe1Y5TDprd2ZZWEkyKDR+fi4lbUwyIzFnZl9+LzU7PEVzSCJDRGREeT5dSV5aN3VQcCxldzlofH1bbCwwIWZ9UXRdeyhnU0N1VjFqMFlORip2d0Q6eGtCOzBuWzFBcyxb''@;'; put 'put ''YEFTKSxKbilAdikoVUAiVSYxe1k1SE9ZaTNzYTM7bGlCMjVfIiMvSEpzI0puP1tFUFRPTmpYS3l7XktbN2NJOSRYS14mRHY+RU5NQ3klM3tqKWo/N3FLN31JfmxsXl1deH5CWHglekRsdUJZRzNpR0g2ZS96K2F9dzZzREpjUW9yKVVfKVVSbUE2eC9hc0tjcFJbWTxiZzx8XmZgQGVXNztkXXkh''@;'; put 'put ''ZFNsdTguNzBGKGRrQW9JKHl8W1VfSVhWJDwxent6ZC5Rdm90eXcxZVsybFE7ckk0JkQ6UWFRblRUNzYidHpzSjE5fCZqNGdmfVtgRm1NeXk6aFFqRz5tMjo3aUVdO148Ryl0cEJkZi9tInV+fExkMGhuRmFHJG0+WlB6LCNIOTwzNDcvei9fa1h6Uz1yTCxsdmRGYUh+QXNzIyRHbTF6aXVKMXBm''@;'; put 'put ''Z0xzVUlRLigwayMsazJ1eFJ8WEYuPVI5K3c8TllJK3c0RUJvJDwkNHpMSU44UF41MG03NlUmeDtRMlheXV5jQG8qVCNnXkIuKWJ8aGtBLz1vd1AlfWA9KClZQ0dTcWo+fmtKU0grR359LjxSIz9admUhS09FRlF4enFwOiQ5UmE+PygveTo7JSN7MyVZejMuX3UvMzVnTXFVMTdANSRleH5jajJO''@;'; put 'put ''YHs1XUk2PnRGM1cvJjtzN25hPDlCayVPUCU1fi5xVWBmXVpQQTprQ2FldmQkJGs+XlI9WWQkTEhgIWFNSC8vdEFWbiopdTsqayxDaVtZWnA5UnRIKXhLV2skSiJDdFV9LDJLa2VtbTg9RW53JHZ4fnN+ZG4jbTMwZUlZOjdQTGAhTz1oW3Z3MTM+QnFYb0BtO30rKDlmajZ3JihvW0NXb1N0QVNJ''@;'; put 'put ''dS44YWI3aTJ9R1QlRmJtdisxWzB7NztOP0gxPnpgVmFeM1dDVm83bGs0OXImSCtWYSpoMWtseGE2W3p4KG5oIkN9X3xUK1k2S0AzQFhtRl9LYjg+QkJAUlhuWXhycCM6cEZTZzVfYkouRVhIV2xtQTdwNE13WFJMaDs8UlsoRk1UazR1Om9eKjFjTHYwX2Qpdk88IWx1b2IrUklFQWNlbTQjVkIr''@;'; put 'put ''JFchPndMLGBoLyVoQkhGRFZLSDZpTUVhbHhNQ2pzX3VPXSUxJW0lZjQiLD9HMUN7SXJeOWU1UW9YflV1LC5Cc2FbPCYkN3MsJEFGSVVEWXFgSStfPEBfRk56LF59ZmVlKGIvYkB6fmdaVT97W3hSUlo/PmZhXmhoe10+alZZazM4S0c3O1hpQ3lkfmRhVVg0OFRadzBNb3g3dmluKkN5XSExW1ZC''@;'; put 'put ''MyhZQitPaSF3QTZVOypqPnt9V181SHxsW3s4aEwrak87PHldLFUoeHdoTXJVU2coUEQzTlQ1On5Se05IPDdRU0lzQE1laXB0SG5rMT9WPX1XKklCfUJ6Vi4vXXxpVElpWl8iKi4rQFQ6TlRvVnFGcSJbbihMemtWNGpZSGdNUS9DbDVZWnVEVEpeZXVUPDFWU1lEZkxiaExBY2F3WFZRWj07UVEq''@;'; put 'put ''Nlo5OlRlMnlFMkdVcihxRykmMXojWGpULyV4LjFZOG82Mz5fWVd6Vk9VVmdkdnNMZ19rNlglUGsobXd+eS8/MXtyJS55cmdzT15Yb1E9Uy9meT8ha1tbU1ciUGgzPWV3NHhUdDUoZ1A+Sjo8MXcvSEdVXWlgY1FUeCRFelV2NGQhKUEjVV43UF1ESlZ5L0U6KSx7XkcpMnEhS0wsOkprcUxARl9M''@;'; put 'put ''NmpKJCw0L2VfX0ZQO1dAb2lrYkYjSjMzZCt0MltFZiosZCNKZkJYdFUlYF4xSCZ8eDVxQkhbPFgzRWhBNHF7RDxjKj5OK2xObnBmMVFtWSt7KDE9KmMqMkw7XW5mWEdxbF12USNDXj03OXEuKzB3PjBrdj8yS1NoOyo9WVQqOyZ9KXshWXhHeURra3B5PSxSbGxXQDp4aUh6dUxIWz8vYk5BTURw''@;'; put 'put ''VyV4aVZueTkpRTpSVExaTzBnc2B8X2NLOkhiMXhPUCV9VWZ8OSlMPjc9WHI3NWdpW0s3bU04eXhPdFQsRDlWdVBaTSR8Xm5CNiMoVW5uZTY1LzRRa2RLOSRrTyZIOFZYUGYwQiVjLmQqTSE6bDdJQC85OnNuck8lTjVfTVo2dTFkbjMzV05ve0xbeV11SF0iOnEse156MyRNSDUuW1Q4KC95VSZ7''@;'; put 'put ''ajs5S0FRdD4jZlF2YUxqcHMrN0QmJX5FWHVUS001ZjV5eHVoPElpLlVJVXkoNzwufTh0Ziw0WFUlNGwrR0p0YDRxYUtBXmBbVEFoQDVsT1R0TnE6eTksLmw5R1g0IUQ7OEcmbGhlRiMlbEswOTlrUH5ST3oyaHdCVXcoY2Y/PGF+T103P180Xz9WIiVPUi58bj1FcXo0UGRtVVJ7N3pxWHw1ZSxH''@;'; put 'put ''MGowL00zLmM4VSNZQCtMWW5CemRUOyU8YkNlKUYjazU6Tk5aPFF3dz1USWhHcHxJST94LlB9WXQ1TVtHQzE1YVhUJCNHdVkkVGBfMklob153fSxuTC9uJjNUMW0/XmAqSmVeP0BdJmhFc1JlayUyJGJhajt0W3UjNWBqdDBETGIwMFF5KSJNOTYsLmNKMFBPS1heIypKLGZYSj94JVN7KGhHcmEk''@;'; put 'put ''OzNlRG9oSW9BRzBdWk08TW4/ZDhETCUhNSNoRHErOkc6N3heJm8jc2Y7U04hfWBEZUtFcys7QzguTHQqU0ArW2ksUWkjZnY2SE1+MDImQEFjW0FpQytNYnJTMjsrcHx2ZCElKm1Mb3FSQywuRm5DOXReWjA+dEtRNihnOzp+ZUduJlZmaD13YE4xJW9QZ21sMlAoMz4lZUMvemdAYGN0IjwhTHlF''@;'; put 'put ''ZVo+K0JHNGlialc5YmNTUVs9KlA0VyFmYUFUUEYmQj9zJSwmKyZ8T21JNlIuZW94WHRtdD1FfUJdeWk7JUthbDYxPzdyLll4WEcrO11DcFBPXkVjMnNuY0wzNzNFRTIhNUJhUXNMVFBodUgyOzpbPnpVMH5FT2wkcE4uImlhNnxscDxzQ0B8YyFldkEpNHEsVVBEJHp6WGIvU1puditCQFE8dmAu''@;'; put 'put ''YypdWzU6Q0Q0cyRJfHtHYDUqNlBlU2N1Rl1iL2I9NUQ8PTNNcUJZOEg2ZkwuUkE8K0FGN2hyMHZGaHQ5Rz5LI35NZzNdN084KC8sQk5sYHR5OzhHU1djWXplNip3TzBYVkAhW2xRaFFBRytPcCQ6VDxkMns5cztqQHQ4NmYjIWw/aU5JRG16YEw1KiJ1eEguRERvcjhFbWMmQHoqKmVpfFVyPWhH''@;'; put 'put ''Xy5DclU+YWIjM1VGe1lMREJneXhrVlMiS25DPS5wMnQyJlphSm1lbnsxI3pmUHJXeDZlaixtb0s+ZjJYdDsjd3Y3Nyx1NTpYRWZSXjd2R3MzW0dMNHxHQGw/TkIpS0NfNGZNL2BdaHtOMWN6eEFzWXwkblY1RyR6fis6TGtvKl09In1UUWFvNm1MJVhVdEY5VHxRTyFmbSohQ2B2W3RzQlhiPEV4''@;'; put 'put ''W3F8MFQ/YU10Iy9uM2tteUB5a3ZmV3M9Y2w1T0Y6SkgjXVFQXU9WbTw4JmVXXkU6TWN+QDh3d1BiMSVLUTVMdTlFaFgzXlJifDleMiJ3empQV3xwVkpiWDFuYD9NQCxZayooW3t1ZmpMQ19id21jZS56M20mIUp0YyEyeVVFX350R3EkUE5vP0svMXgrSzU3fCMiTiNlSlVdXW0heGAqaExaZnw8''@;'; put 'put ''SzwkI3IhTzVhST91WCFjZUUuUG9aTj98X3t2cnNFe0N+dk1Na11vQTw3bH4jLjQzdy5UQVErQnN1LF9KazNrJSMyKjIhZF03PVFlRjljcUNraCs0ajRqUy9ZWmhEQn09fipCdWNrfEZ4c2puMD0zWSE/RktEemBtaFVRRElhSEJJPH1sQHZMMnNLWGZiW35rL056YEI6XUBEOk9ISVs8YSVtQk9S''@;'; put 'put ''SVQzU0pnO24waF55ZkVJOkNtQEV9T0JsKFg3OT8oS2k0JkJ0ZmJ0Pk1nfjovdntEMT9FXURLISpJdnBfaStWeHgvWDpBZy59c3dSPUBDfjJaY21CVzAwQDJGdTk4XWFaU2FfNXl8UGZwPDlNdnY5Z25ldUtPTWVvUXguUnwrbE59OEl0PWssWERWbl1zanxAPGhLLGZ9THZVc3M9cTdGRXQmOG0s''@;'; put 'put ''bWMlJnYmIkslT2R5aUBqZ2lPSVpKdEVDXzleX21+ezFAW1s8M21oXV50K2N0Tj1QejcmL0VGNWQuJk1tM25TaD99IWF0MiZ6JGklJkY2WFZYeG41LlZkO1NeQE5hPHo2SDpsTUQ3a1pudjhFZngke0V8MEB9bHdQXWQjWlp2UXhDdzZ0TTl2N0x3N0VUTT5nfXY8SSNJcEZEdjdqI05LLm9iVUJ7''@;'; put 'put ''V3xkNTB6ZmpEMiwpe1s8aURRKURkZTt3Rz1qeXhOfmd7YVA+Rm1oJWxlflNRbU5uOW1uTWZ3aXw8QVA3TTx5PURxSWZPZ1BDP3g7TWEibVssNC81ZT1dfXhHISliQkQhLyI3WzdpbEBWVUpzWVIkQlAwVWN8VW8pWX5uN0g0ZUJ8fGh5fTR3Mik9MTp6a1dZeFIpbkl9PUslZ2xJSCFGUE1WI2RV''@;'; put 'put ''L1RMYEMjNlpRKW4sd2t1Ji44PnhrQFcxRUpoellAXUhtXWRVKzZCSHVaR2Q3eltWYn52eyxGQSl2ezlhSCRdU31NLiJkKyxhYVpyRFByaGlTPyUlTHxkOkNpOmldYi4lQEsvOXhEXnR7PnEpRSZsUlVGQS9qXkAzLDMjM3s7JGVsNipjK3JYaz1iRDFuTGlbY0tqZj4sWTB4cjQwY1l+MW1eX0FN''@;'; put 'put ''UUVSOzhSJjd8cU8hKTl8Qy86MG8hUmdTNV9Gb2Rfc2ZPX3BsJjE7YStuJjxNOF0zMH1OalFBcmFKaV9XY2NFbEduVWsvVnwsK0RuRnwpb15lb2xFQyZtWGBWUlpMIUElaTZFX3tDWDxCfTNLO1FQOVVRUHoqR2Z4eHkucl90QE9RW3I9O0pHW0F9YWEofjAqeHNXaCErfUZlKSE0MEg+NHFrfCFA''@;'; put 'put ''XX5jRylZZkI4XktaR3pVcXkiXzBUZT8jelh1L3R1MW1dQkQmYTw8TD1OQDFwQ2RSUTtRQDx4dE97IUBlWyw3KGBRfU8iZ2o2VytWXXVoMmQ+PUtWbkFSNGl8UnpzaERoMz5fUkE5Pll8L0tNNzghN2UjeyhIPjpYby96dS5jRDJaUzVkMGJrfUs2R3I/ZUhEKWc3TW1kRmpIYWlyc09PI1dmRlhl''@;'; put 'put ''b0B4bipYK0NodFRWMyl6amk8NkxBQVJ2THZQKEdzIWI4PnpjbiskfWcpPCMkQEpPcUA+U3A5fGZzSzRxR1F+LDZRM2EsKSE0TlMufik5dWtpKWlwdlZbWCVkJDxgSzhQbnlXKlFvdj5gYSJVezx9TFI0aCxfOD9ZamdrOkRTe3s9THQ2KTFddyg5UEFnVnYuOmVpMShIVnZVKjg+bFhNdCwyY31X''@;'; put 'put ''RSxRUm5YT2FeNWxKZkYmX30uZ1FKS19UMHxtfjByajw3WCs6My5sdExWPERKPC8jXyk3fEtLa1FuT012dS8/Kkc0antOcWEhSi9lMURkUCQ7dVheUjBuVTYuMiNlX0QkMDghIzBCJSE3TixpdEA8Uns6bFRyKyxGPkErIih0Knx6b3hlRSVqPWF9OWJJJl1VSj9UNloyRTdsajtGKEBvbE5EXih+''@;'; put 'put ''KyVsOl5MZ2IuX1ZjY1U/LmNwYiF4Tig9YSNWQ1p8M2IzPWM4Ulp5bixHW2pzVndmZTxVZFl5bWJCR1RYSFMqaTRbI2l9YnFyJih5PVFqaSV8JS5FKmdIcTp3WkxCUzNxTEl3N31jLChOUFdUQmQzO3tsOXJkZy95ZCxGUn5uSW1Xb3x9ZnlEOHkweEpwLCxxR3UhM0olTz5beFVCX0Zld1EjTHAz''@;'; put 'put ''T3N0V199cTA1JGFOSzlYZDBBPHFsfG43Y1JVKmZoOUp8LC5OZkhCKDZadFk5UntWT1l9UzJIZXY1diN9MGAlOyV3dGVkRDxbal0yfGRTR3Y7MlBffnZoLzRYRXl0PG1DdGoidzx3Vkt5U2JjTzV5WithZVNzRyRkelIzaDg6TjVQdk8zQEtEQE9HRjFxdCEvelcuITpsZGEhd2c+N3RJa1ZtMVtu''@;'; put 'put ''eSpeRyw4TDc1KF9bVExPbVhMUmJMZD9CWCtYWy98T2hCSmw6QTxDS09zPyRtXXlyfU9RKkhZRV9xZig1clNUQ0Q9ZytkVnpUV1pxdiYme2VZVDZgcXZ8bkZZMX1OISxwKyF6fkxDNXZHSFlGRl1HbFRpdWVGTiEzTEY4KnIhOClTTms8L25pejMzO25Semhud29gSl4oNkVkcjFeZzFMNzp3fjBW''@;'; put 'put ''Y3ZUL3ZkPk14VDVjLigjL0lyOXJ9anM7c089a18+Ok4+Tn56ImJiY2ZVbkVjQT1nY2RCSVBaYk0vYCwuODNgJkohb2tpcHt8NVFPRyslRmthIjtmJitKSDxQKV9qUE5ZVUg6Ymw0JG9ZO2QoNkUyS2RjXldLdGMpPEdsOXM3dkU0RnpGSmJqLHI9dnxRWzQ1UzptIT47YDojZ3w4dEVXJEM4VU80''@;'; put 'put ''c1MjKyk5Jls5PUEhbzVIY0UxYyVaLm1OaV1Ubyghbzt8ZC9lNWFMMCw8aj9hNDRWbFNnIyRSL3NKMyk2LCpmVEg6V2ZwJk1kPjFeSGllL29vXjUlVFlGZH5pcU4zJCt+IiVOa0lpWjxXKnFOVmU+XVdhUzpsNTtpM0liRXVFWFZfbkU2O2JuVS9bXmc/bWM4U0R+UnhWXjFTa2d2Zm9NJiYsVXFS''@;'; put 'put ''L1Vgej8hUml4TkxSYCNFXj9RUjkyOyxxbDlgNiMzW2Q8S1E7eH1TbTxBeytEdEJbVF5JPj81a24kI05HVSw7P1BKLHQjeF9GVHN8PnxPOmFuMXt1e2pRalFjQyFXRCxeJX1oYippNlg4ezhCRUp3KFQlbEAhNG0vX3Y0IyhBZGwzTWkmaGZlO08mUVYoUz9lTmlRWzFVekZSM1skMzhyfG9FckMj''@;'; put 'put ''TzU5dlBZdHA1UlNoNn1NQiomUFp1NDVpfXFxLEV1YzBWe3A2MnA/fFEhTS96NGRlW0lsLCRCQGYlc0UicVN3SF5qM3Z2KjhQK3leKVZxWUNafVM1TXJ1aUhFMF9ycjlLaUZbc3RLYHFRPnoxIz9gLDErRHBJTWx8cXc8aF4yNmc2TlJtNTtxMih3YC96LmBmLzIyK2g7JHllWSwzdGI1SC5qSSs2''@;'; put 'put ''bHpwVl0oVEdxZGBiaEFjN1NpdU02QWMzWGZYcik+R35INWh4NWA6YVtNVWs6IzdddSo4VTc+XXlHKUxXaztzWG9GeDBORFFhLitpNUttVjkkZU1LSH1SJEhmTGNqfEhOQzd1dCliLyVqODckPy8wQTk1L0E5Kjt5UkJtaSkuXVtFRSM4LHBrZ3U+Sld9ITdbWjwoVnhDPHNvfkZHNHx1dUZhP0h3''@;'; put 'put ''Tm84RkJUQHdPNDlNcUNeYDUoYmspP1R6RzN2JXtdTmc0aG96Rm5MQzNkRElUQntyXmJeYGdYMiVrfWlTNXY6UTQ+Ty5EY1A5V1tOMSErI35IVylIfiNLaEk9U3FuM09tLEYyX3ZrZHJneD8mMnw3aGE1VTVwfS4zKmo4cGMpQXBXeTE2TnpGezVjdjFzb3RHRGR0RUMsM1lOT0RVdl9vcWtXbzp3''@;'; put 'put ''UnpBR2FTJW1obzdtOWdUMj8xZGJ5NzY+N2ZadV5jRGhkR1c5akBzUXUiXlBZYVJrakh6Zyp2X3V1OE1zQyEmfj0+eX1vKFl7WCZrek5tLzptNGE5clArYCE5JE0hRk93QmdxKywpKUdiMkoqJV95S15aZEJFOHFuNlEhdEI7bD5LS2lsJXpEakxLSzRSLi5Jc1N6cXp9Y1twLjd6YUohUU8rXlYp''@;'; put 'put ''M0YlTy5dbV0iaDxbLzhuWGRjPmQuMClKWzMyVyZGN2pSSyU4Q31leWp0e2srSVJqXnJHMitNUkgyRWUlfTd8cXdaJjBYUl9ZR01bMkhnXz9FR35wVkJmMVZ0M25WMUJANnxbLGBCNSY/dFdtTzVKckVEKm1fXlNAQlA6YTc/Jl93Nk5KTXNfRyIhSlMiKmBfXy9jW2Y0Z25idy4uPUI1fjZ1R0VU''@;'; put 'put ''bUpiMXpEMWxNUmRxOS4rSSFBPXJ5MTtETVZjRGRKYk04X2RYWD0vUmB7SUp3cW1DNTdPSjxlKyUlS3w7Zy57c0hwfmROfmRwTmpKVn5nMk1dSXtweX5SWUBwPjcjVXh4bmpJKkRlZDhKVl9ZOHhTXWYpcXZmKys8Wz4rN2NbNGs3V3VifnFCPUlZbSZWbks7KzZCVzVvfXwzdWRZQTE6UCRyZmA3''@;'; put 'put ''VStpSFJjNV5VIl0xc2puPHtRcixLaUhiUSpaaWNrXXAzPDgjPzlJNSIjUFdWRCpUMj82W3A4fitXZHReNXJrO3IyNjFCYUZFO21LNDddbihwQzQoNyoiI1A7Zik/RHdtYzNOQ08qUk4iPCJOTTU9I0Vge2gqeWQhc1NhOXImYzNDRGF7dDNCdXtHKl9WVjBKamo3e1kmLm9XSDJHPmouPV1wWE1W''@;'; put 'put ''flpOPVhLP2xvKChCTUk5K240dVd+RkkxbHk1U3BtbUQuYlNSUT5+UixZJHl+Sl9yJiNmIVhmbn1uTFBQXiM1JTNFY0F1MHRMcU07LElBcD0pY0YmMWhDX1JvISowT1hEMTQzY2U6TWJDfSVoVSV5c1F4MG53aVpSTWYrSkFHPDR+UT8mYUcsLCkpLCEoPHgpT01Aaj1yaWRyb3tuZzl7YmA5Zksj''@;'; put 'put ''Ql10QWVEfUhiaCV1XjxfS189b283KURiZkIkcFg0bGtMdDJKcEBHcWovWi8zOHE2OXluPSEzWkUvTTVCIVppL2BGSGJESV5uOXJUdSMsPikhLkRyUXV1RU43PTFrTC9KWXlgZU1sfWQwVj9ne1kzIz5NbHFEUF41XUEjJUxoIWlQRF5uWihXSjQ7Z2d4cDtnb3d3MDElRnw1KT8/U0xTflIqZF9b''@;'; put 'put ''fjZ8bDhUQjJpYjFMMytyYzwkfkRJZlRoQi4sTnVESSRMJXs6eE5tUzo4fmdQYVBoUm9nU2I+U2QpPk9FQFtPLC4sMzxqVHlAPkFXXUwpS1lbRk1GZSN6ZG5GOnomZWRKQlFTWjghPkc9blJETyxyaUpDe0ZPfVdMIWxHM0JiNzdlbHdxPCUoJjxGV341WC9MKlohJGFlQ0FLeSF7SVh4eUBMSllp''@;'; put 'put ''PUUzVypBS0ozajt2SlE8TW5VQSkzQCRAKWVpLlQ+RVl3W2YuMG8oQjNNeiw8JTp6QSVwR1hwZz5jeGhCTjZzMyx6T1cyNCFQY21OWlVvJVpwY0pEeWIpe0pqdV5seSx1I1pec15QYSZHYUpAKVJ8YkRfalE7eGdNQiQ1XzdPQFNlMVZ4ekx2NGFHdHc2KE1MWW1RQlA8Nnkrbmt0bH1eNSUmKi56''@;'; put 'put ''MCgvZjxIZHpmLnV0ajNYSSpoNjdOejFdM2YrREpGZWk3VXxTay80SW0lbGcuTnhIbENIYigpckF+byVHR3YwXWw+P1tOQ1suZHkpd2haQ1FaPyRPbmR8WFAofFdwOW9EeE5sbjR3UkMlaXp9dil+WUJ7a19+dEo9ckdFfmJad3wiaD9hK19KKEJBQjBoIy5aLylyJVBPfDJoUVolQT5zb0VbQj5Y''@;'; put 'put ''JlIqMmJ0XntsVGlQdVk9T0gjYUk5YFpGaSFpRWQ6UndhfU9UUlkpZXUiZDFOenNqaWZVSFk+Z3R7cVBxZWldUTJINVJPa1ZwOT07bE9nODdHUyg1PFo7JDc2YzdRfiZyajZ1JkdiZVh5SHZFbS4iQWBKZGxUYG1mQDBmXVB1QGFJdCJ2dHszZEhFW0NlKiNBQygqbGA0a2dFJHRyL3sxX0VKQm86''@;'; put 'put ''ZiVyRVhvSSZBaTdPTyg4I1shaT03LzlFNEFIPTRlZGNVXnJ6eFlld1l9ay8kZ3pTVzBufXErIkVNWyYkaEFGSX1WaVhFc00iQXhqRjhIUFBSQHE3SVYmN2tHSy9tWTgzNHw7UmgofjF8anBSM0gzQHMxMmAjamVreSRtMkI+eVM1fHlqfl16dEl1OmZQISp0bjNxdkNPO31Xd3h9aEI9OF9TMGdm''@;'; put 'put ''a0MsVSgyQi5qY1o4IntIUT0/TCtfeGh1T1dzNzFdIjw4bUVwbmJsM3ttS2sxRGxwaTgjbVB1Q0I7aS81WH56V3ZzRlttLnEpeTdVNnxSKl44XlNKMFFIKiYmX29GbSgufX1qd1B5P35idkZEcHI2OkdqW0dKanI6O0dyKmlNY3NlMDZNSE8oMVI1Tl57PiViIV8qXmc3VGs5dn1QJTZ0XlJsNzsx''@;'; put 'put ''WT8ycz87aXspITB0JHBnel9HQjNTRlJbNHQ9YFBSfiY0WkhpIjcxUz1DNVViVCx5VGI6TylXUTRXUTI9Im56MWFzbT5PWjAkUkFHQ28hMmk0V0x1T0Y/WnNyPi5eZE8kPX41MihPVFNVRGokOURjSG5dZlkvPHRoWHxiS1JHRDF0aWNfSjtmTyw2VkowZ3BrVERUKFlEJlpDfWJRQ0M2KTovYS59''@;'; put 'put ''YHk4RX1tPH1eXTkvOVVJJHtYYzlFc2g3bXdpZyIxc2NtKkByTk8+aG9kaF8/Z31SKSo3VTVeekoweWk9Mk1qbXkwcEMpSnBlcUh2flQ9Vn0mJXhXUSovNUNkKXZCQGcid0BQTlNLZVJudSpCNTImR3N1SV4uNH5mJW9RJT8sYEtZMG1uOGdeVDJ9SjIzQGs0cDAjPXg4dUh4Ik1Qdm86Ums2QHFC''@;'; put 'put ''YS5ARFl2Zl1XWHR0UkE2JjViUU9kaF5Ca1hsQzZ6fDRWRmEwWklzXlpEcHc8OCpoQ0FVOT9SZ04jST04bFAjQCxkKU85MkdaQHJIPTkwOm9qMW5GbnIuRVc1XSZAUHQ+TSkpPSJBYURIXVMlajNiWzIwb1YpO1E5MGw3YWw/NXgxMTMlM0oiKGM4fW53WXAyYyYyJk8jSGh6RmBIVXtdM0I6YjNe''@;'; put 'put ''JToxS3Y1PDVKYGRvYUBTdyFNKXFLMDQuPTgjTz1iWz1TV3JoMEhjZWJMKiRVO3pnWnReckJ3Y2hwbC88JERWeSRJIz4lU1ZGQHkxU25XMzV0VC9bPUoyN357VVYoYmZ1VFZzTE4uXl1sbzs8UlEoY00vZCxgLG1jRm0wOyg1VTRibzYxWDwhfHtUV3hGMEltYnImWW1UV051MFRmb0NjeXJhZyFe''@;'; put 'put ''MH5udXBiJS8xdlYhekkvX0d4Zy85KUhOUn1seHlUPHtSR2EkQTxzKVt0LyYiIjFubFl1ZCNMSU4waDYrc09vUkdzX0RVbnduIkZ+JXVUVFg7bFJSdl40dz8+ZlVtY248L1BzSyklZlZKVzElWmk/c3NXJUBIfF1RSyhdTiZjZG1MSmtWQVNNe08vJW8re2BNQzsqKzY1alNHKixIIWAyb3FBRGJh''@;'; put 'put ''X05wazlTTkNqSnY4Oj1HeW9ZKnp7en4uOnlhWVRsSFR0QmNJcFlIe2pgWVYvV3p0dWc2aF1FZ0t1Yl4sPFlONHBpYCF1L3NQez1kY2ZZZnJbQ35UNHdnP190Sl9acTUjNDNCR318L35vTC9tQjklKHkhNHlXblJifF1WKl1dMmorRSw5Q2dlUSolbUUqU08oRWEvbHA4JjJvcXBPUz5uPUc3eyxr''@;'; put 'put ''Y3FMPytANHZnL319Q3h6T34jRSEvcSY3MmRBLC5TJCMyZ3dtK0gySW0rdU1dfTtSTmY6QXs7IUhmU0AuP1BEWVBmIUcqaUpmN0tZQF0lVGpFSkd5JnoyYUdoVUB3P0B0TmlTfm5pL0YuPkBnOV9TZ3YjJXJsRHdyLiEyaDhfT3ZGPCE9OHtTLjhocWFke2k/VXNTanRGPFoqSU0mNjU5UH5RWCl+''@;'; put 'put ''ejg/JVc5Y2FTc1pQTjhwZldVc0VvVjxAYDZRQmw1NUBmY2dWKl9nU2IlVlRCaS5iNT9sd1tydCpje207MWc2cEw2PjtjYWNgfDIsdE04dVZOO1YhKFJII3ljTXJlPXhZa30oZ28hfFdnO0BuMi9RP3l6cVprIzxdKW49Xjo3N0lGaXhRe2JVQkMvKSYpazl+NnlLYjw9LHYuTGdaWGpLZTBbfFci''@;'; put 'put ''OV42Yzo2eUcmfUp1Jip6MnwofGQrY2FFP3JjaXRdUSFsSEhyJUNVa0Jfe0Z9M3ImSDFUUml8JEFgIjttcWElRnY1WWZYfEg/Tz4sNihEKVR1Tkk9KWs0UExOLjVHUmp1ZWwmIUtrWkB+Q3ZMeHROe15HMmtDIUUsYFIpRFoscjRIMWFpWlcyb1VDZDJEQjE5LjU4e0NuSmhGak9IO1NPQE49eTxQ''@;'; put 'put ''YWBMbzpvR0FxaTVaQ18+MFooP1IxOVc5TmQ4WkliITRHMCRDJFAhVEt4ZVp8KEdhSi5VM3tbRDpnfTR6TSR7T3o1fHcuXWFMPClRX2ksKioySTg3clpld2dvUHckUGVKbCxEOmhqKzJKY3RVcClHd01lSmZsQDNwXjE6NnRMcFhgTipbNlQ0IXk1PVNAMyx5UCxpOSFSSTBAVU8/JDo4NThKI1du''@;'; put 'put ''U3ZIKk1UVUpwYGBTR11wcSovZz9JWEd8Pm1YUD8zcC9iIU1JeilVe3lvOz5yaTtJVCNqflhjdnxBcCtjUWZDQ3NlX2NUWikwOiNFKzYvfHV7fTd6X1MwfjkoSXhLQzlTRDMvK1IkKXhObEM6L2Q8P2QsZTNzc3xxSGE+Mj1vKTg+NF5NL0dCWiUrRiUlWE1kWyNQfUkxLG4hPmoifGJdLmB4SCxW''@;'; put 'put ''NXljczsqZ00pWC9rODZbMDYzc290TmswVTdvUiY4UGlub3Rpei4+eGE5SV1dcXJXaTFyaT4lfngwbFg1OTlZK2VMUUVpLzZtQE1FUHVNeG85XW9eNm0xfF1ETjZJLnM8diQkdyIuZCZzY010TVl+PDpzTUM3UiUpQUxhZV1BQ2ZVZ0l0dSo9JEJFWlZIQFA4JU08TFd1Tj51ZHNRMypYMnxMdT1Q''@;'; put 'put ''N0UjPUJsRSFGcWFqXzZAbyp+U0hrInZZZyM9PjEoWXRuLzI+dTBIOE5yaW4sI2opN2thNFU4KDtBanR7biwpU2ZAWjdNe1dmdVdKcVh0bmM2WksqJGMpVTtPUFg3bks+UVpubSZ6RzRYb2QveHFeZF1OI1AsIjxDLixSPmViKHd6QXQ8al9ufURZKEpIYmNvQmteNWRMXkhFVXc8XTx5ME17cDtM''@;'; put 'put ''alpkKUdpNEBaRTI9djU4aUFhOklsVVM6WCllaUlKbi5nMGF0Km0wLkRibFh9dTgxaFAjcD9JeSJPPnI1IkAvKT1sa2wwNGEvajtwYmRib0VIQ3RhVkQqPCQjQyosMypSOTUkNyovREBTLkI1Xl1mend4PVg2eVAhJGdiQk42U3oiRCNFZ2RAKzhtXzRJS0lkW3NvKiZQcD5YWjJeZzxMcFQ/Z3NR''@;'; put 'put ''Lj9bJGxYQztmfVh2Z0x8aiNtdjo+TjRFYCVtfTVjaitjYCMwdH4hYWtxbCQvcXh4ODdNbnBXTG47S0Y8aFpdfX5BQFEuRkx0JWN8PW9SYHpeWTgwZEd9bnZNOU04P0kuTTVwWDZzMXtmMjNmekwqKFJaTUYhNGtYdnR4OD5iTUZYciI6anA8U30hKVpNNFFCTmM4YzFMdXVVW0pNNSp6LnwjemYy''@;'; put 'put ''d2w8bDNRUW9LISs4KkM1fFpXbEUuMCk4bnpQTks/dzpbX3ksKUg+UChMXkpqb3A7QGovJXRQeGYlO3ZacGA9K1pIQj5gKmQjQz4jPitVZ35TaEx9THk/Ui5RWF59Ji5UZl1KQ1FgQFo6YEQsU21dP21KQDMwcylFQDokQjxIZmtKTj8qMU1hXzUiMjJ5NShiOGNmbm98PEhCXXwjLG1xNmwlTHtH''@;'; put 'put ''KjFyN34qQVIjIWY+UDFnU2tTRiovZkN0fWU0NzZpOjZtPDxVbmszMWF+Y3BnIlYhd0NNYiY2bU53ekRCJD1TSlVuUmw8dWohR2oxZD0rPWU3QG4pK1l5WT4xfGJDez8kbzxsM3pSdXVHampqP3ZJeDF8d3csZytROVlWR3xKWVpyWiVyeVNhY3plLHFZPUR9LDxPLzcuYHRNYiluYzspJlMiaCJz''@;'; put 'put ''Q2d2OykpUWJTYENjUllBYHUsd3l0cFsoPDd1YDhdOnBFQkw1TSYwKSpFfCtJYFpGUkk/eVdvKno0M0dqYGF+JDtocmUoViFKZlV3KzFSQzAkRVtnM256N2Z1Ni5DQFpNfD1bZkpfU2dTOSVQRVtERChYUytgeHp4YVpuTmtpQkRzenl6dGhjMlo8OixEWkxzcHMuSyt6USZvd00lRXQ6Kj16SztH''@;'; put 'put ''cClHQ3R7WjlVTipiM2J4fjxRaUdScl1SSyZad1JPPkF0bjthNEFMK0tQeD0pRVdeI2xmSHopRiJ3fkMrMihJakM3dn59WmlZPktpZFEyUnwpUy5IQzl+IkBNYmVnantEcX52enxmJWlLXllnRmBrKU1MTXs2ZXskb0k3SmV3TkU+cmtgRDp6Klcic0tbc1dFNi5mRS9KTUhLVWJuNCpGKXVjKl4q''@;'; put 'put ''XzFydz1OKV1kU25YSG1Ld2NIMF90ezQpNVYiPjk0KXxOM01OYjNBMlVLOz15SjhUMiEiVmVMLitNSmJzbUxJajxJRTEzcT9zflREYkNZM189MENvMkY9blZhfkYodzpLKF4vMTxsNUdWbExJdjRYeDUjQ1RTPUpobnU9RFg5fjE8QnFOaHloQ014dmZjdC81NHFAJnZJInA2Yl1NUXtVMC9GJXJM''@;'; put 'put ''LnhuTXc+VHxOViY8cjpHV2tmRnRmeyttVUhtfmkxKTtsW0J1JmBhe2gkRGckWXQ6MyZMUXJmYSRnQVtCb0t+ZVQ7VGpZL1R2LlhlIVolRnZkLCpKSVZKQ1AmVW0iOVtmcDo3eyghUT8vVDI4MGAualQ5bG9kMXojbXgldTs2fVlqbGkpMXx6OXlrRilqNmExbDU5SUk0bSl4KzZiZiJqUHwyWUol''@;'; put 'put ''REIzYj9oI0oqLzFEZitDd0IhOCpdfkBaWnxxam5QfVMzPUIiJTZRQytOLkBTTUlHWTc3a1JxQjI/cF93OHMySGxDZnxzMilwLj98MmdGTndYYFVvQz57MDUoMnl9PUJxNjssNDYxWy5nc11hbk9CTCgqQWVLeXd1NnE+LD5IX3FzN3slLlkiWTNjVSk+PC57SzlHdmc2S2lvXmlOXng9Rnx0Jjl5''@;'; put 'put ''d0djWGYlalM3UWdLaVRTLDJMVitwb18vX24weEB0PWMpNz0/VUpUbypWeDlLVk0xX0taXXN5e2k0dyZ+ZGdSa1BRZWpZeTwyLjhwVlEvYlcrLik3UFZSc20qIiEpazV7Sko9K1VVTDpOfVJOSzk3N3AkLj9xTmkiOD9SNyRTNzJ4WGRSMiJNL2MjeGJKMz9DLmIhOTdRclpPOFQrQn1dNlFiPmJl''@;'; put 'put ''L0NjdnBLOHdAND5eVl4haTNsUWlHPTg/MzZEfGs3N2p4dCp3UFJtUVQqSV5MRW1JZW9yNnEqd2h3Ky81ZDgyQUpKIiFpbjZZWz5zdlM/b1FIRCpnLDZzJkA7RCNCKkY8KHNBRnUqXzBUKGRbO01fYXd7K1lzd082WjN5ZVJDeDB7RER0NnVZTVR5OTBNS1ZNRDdeI1A7OlJzK28jTDRjbGlFWDkz''@;'; put 'put ''aV9rWSM1IyZHKUIoRU4yT3xlNzZ+R1JXa29FIn4pNz5bWyFqbmxCPDg5S00xXnk1PV5uI0BGWGhYZ15tLE9kdUNaUGhOVk53Nip7XmFbbXFndGFlVlo2PFRrWVFRTS5SYEFdX1FYIVhHdz1bZjpYWWVkPEE0bFsjMnM/O0l6KHM4XVdHJWcuZSI2UUd1Ljlwfj4kWn5sV0VFZ3hbTTs9UHU6VUx5''@;'; put 'put ''IUBGNTM0TVdyOH1iUGZXcT1QYllufVkoIl9HJG14MVE5Wk51ZndWS0pMUTx8Kj9aXj9YRUNqaTlkOTN6Wz5SWXIycCMrUnw/RjAyKHZBP29bIVl6fXY0LCtIIUlbXT97NENAWV5WQkVCNHwpelgsM2BTIU4jXXV2fUBGOSE7M0phMmQ7RmdrdmdQdFM4eE8yTFgjUzJuUC9qZTFXWiYpWXNlWmNm''@;'; put 'put ''UV1QbWR8aCtnU2lNOEklKGRoWiRZW3l+QXBOYWcsS0xsUWEpZ0VBRGU/TSxTMGU1OSN5X1tacHwzcUk8MSQ4VmZwPDxZbmI/NyM4ZV44eTwuLmxhcWMvaCUyKFc/K3VGYTdPL31qbGpVbzghYVNxRmx4PDBERXJ2UGc2aXVGT1BRak86IiFOTWJtNC9EMHdDQWQqcitLQS58UDd7JDQ8RiE0P2lG''@;'; put 'put ''PWYoUjJKKHllIyVzVXxXLGphIkJIUTlNTW15OkJlVXo8SX1BbWMsVS5VV1QsSTFEbVNyeiE/UmloRV8qazgyVHRBeXh3e3hpT3wyQkNaOG5LQyw9cDlgeXZUOnkoc2ZILHVnVyJkQmcuKnVxZVlMZU9qTz9WM0JDM2A8JXshT0dGLjJ8TG1BSSEuaGFXb1haZ1EmSWJ9ZGxxeT1EeiYrJH0oQXly''@;'; put 'put ''XnM6M180M01GPTsjR0hOL3RTbl5mP3s9fHcoLntgajFKTEtgUX5nKCQhR3J2OTJ0MWo3R21SYENSIUhvczpvJXQuenNkLChuajslQF0/PzBKXik1QzVmW3tCe111MCp2KjdHLiZSVmxPPilZQ2w4dHkuYFksemRjYklfYnklSXRhdDxWbk5TM3teUURXfmgvTnMkRyshbTtVPjhSR1FIYmRSW2x9''@;'; put 'put ''NS5hLlJKSy5aY2wkQj5FfldZWWVKVXUkRH1ac3d6RXZyYVtjWz1zdjgpYGFlPG9SVEsjJExUfTFsWHNmU1AyOGwyYmpiVDtAc3p1XyIhS1BgXk1vfjVQK01ocE42RSJBTDppZ3ltIylkNHU4JWk6VztIVm1Oei5aLy9PQUdbK2RJMHYkKCElTXFWMW5VTiNvKCUpOkUwRUoxa2BGI0trQFRjdSs0''@;'; put 'put ''VTtvSUsxRSVeIiteVXV9U2lValB6PE1MOkpUdmg2dV84PiR0VWppXiZkJVFkRkdAfGkxfnQiNHIuSTNTVikuUilZVHohdG8+dUBLW198OT0rXTJXKTFpcmtkNjA7fChfWUAkaVMhVHFbJkxMan0rKStzQ2VTMTFKTkhhKV81X3MjNjVGQlFOPi5edXF0Qj4iKnQ9KU4xM1tHUUpedGFgO0dNbnRh''@;'; put 'put ''fWRhOSZAXVpjWzhtJVZZLDE8UmR4YFNuWEJUO3w2XUIwPlM/PihWbltiSXQ1fWNaPTkiTHlxcGBRe2A8KHB9TE4uc1ZiTXgqaHQ+OU01Mjk8M3xqbD16M0JCeWpEYCN8ZUZ2N3V7OlZLZGFMX3BpRWJQSnQhbDNTdSN4K1pCUC9qVUYmVmVYKkpjTzt2JUtjQ2heNmQlXVUwbFpdRk1RJFJsUzB5''@;'; put 'put ''KlVbZTNNYVArMEwvOVVUV35MW1g4RiJBaTxJaUhtdlQjMjxeQHJyI1ldbCw0fTh4MnQ7ND5gZClIVzliV3dCZU9IKip6dEclOlA4eFZ1cj5hSyR6VW8ySyRqJnsmPSk1SCZLSWVlIzlyNFQ/K0lkQkhibTU4YEdNYXsoIy5fKmJHKHZ1UyI2QClfW316MWxzVHU7WjptdGg9SkN1LClQWipmKjF9''@;'; put 'put ''dD9lJih6cXgqWmBMOm1bc3VsVTVAUSxhM1F4YWlaLFJSQnVjJVpufnBPITF0RWBHKVE1QkBaanhoUDhPNSQlQEAscE9OJnlRWTB5e05IfFB0ayEmelVEZEdnZkx0WD9IRlgzT1o+YXpeTiRwWU8/VjZHZTdPbG5ldDJ2en4vakwuUS94UkIuTGYpfUdAYzsjLGJKM0FlO258VzNdXkQifjRiaFRa''@;'; put 'put ''W0V6byFzOkVLOCl9eHUuKV5PQGIpeUtCcX1QeEIlJD40fkN3d1cwWERYMG1oQl00ZnFfOjFxWnIwYmR8QlRMKWVXZkV6Uk5OLHlqbVReXytSeHJRNGkuOlkmYCZLTX1XakY8LmpJPFAsUVd4Uyw0Q28rRU80UT47LDAsZ2IpbmN1QEIiTUNzIlsufTZ8PGQrUXlkZ1V9TzBGPDoxbEtOSEZ5Xnop''@;'; put 'put ''JmlDLjNhWDxTJX1naEtkVWZ4WGlIMCxAWC4yKnMkd3MuTSlNOiFoV11ZdWssbjE2TjkvempNJF1GcUFwY01rd2dAZip8UDUlVU18UENeTTRbeSVAdXhjYH0zWE0qPWBkInJPJkVpZ291UGl7UFkxTGhqSjVsPWo/OUZwSkNHVzo0Xm99e0BJWGE9dC8hXjN1cWUwXmxWdnB4UzBQaTF+VXRAa1lS''@;'; put 'put ''cHx9ZHR4flIvWG9JOzVtMSRDTUIvKVkzd3ZSRGpKeitxX3dVUi9AeDM0VTZXOG1uNjJLaHMiVjNjNGBnOSJda11yenR5JWRyPWo1OjNUUHx+R05LLlJ5PShiWihAY0ZtbjAmeVhYQG0zIVhwNjJzPVJlLHVHR3ldZXRoU2JWe0hqZ0ZQQXNhdl42LDNLUERUOVdpRG5lJkpiYzk0UFRtKFh0K0Fz''@;'; put 'put ''e1kpR0pBai50K3gmPSN2SGYvUExFbGomPSNyKVAoOj5RTyRHeGFzQ1gzJnglK2UlJTg7IWEsNlZzUCppR055eG5RaXF8Yl0xLk5YOn47N1t1ImFgbS46bWcsZ0daTkZxTTk7c0Z7cklWKXErIkY5ZTNNUkpqZXwsajVNVTI7YC5TVzo4OEA3ZmxabC43M2JHQjQkZWRRQmZeNFQ0Pj4kSn52SFUo''@;'; put 'put ''UXEhVC83KVltUUBTel0yLEZjZylOVDZVdkZeVCtPW3NGdkw0dXA6Y05+fFAjTDlVYV1lMmE4UDoyaC4iJjxha0t0SDd0LlgsU0E6bFhuK2Q2ZFBqNy8hPHZIM1V8SnswJUJmVVt9dGhOZyRAdUJ5US8oNHYjIVZUO31eez14OypMWV4lODBfU1pEZH5tRTJqelVuXVJeVzElQSNsUUxuQmJkS2sj''@;'; put 'put ''JChrMlNQYEQ+RDgwb29hP0dJMEh3PkUkPEhfO0NYNGhJZyxMS00+Sm1fUDpOIVhyZkFoMzEoaVNpMFBpPiZSUz97dE88TmVpPktebTFMOGtFdHh3VGYjL2IkYEUxSkFxWHFmN2UleF16SSFiWitPVjtXTCZVMVJWTExdK0NLNS96KzA3NkV6d3g+azs/UlVCbmkhflVubXFqO3VxZCMocSlAPWR3''@;'; put 'put ''XUwmamxbWTFkKyFOcUd0XnNQcnx2SUpvInJZamNueSg0bVkoNFUsZn1VeSw5RSlIfkk6SEAzbTcre1F9a30lVTw5ZEczOlVqK0N9cCpmM1o7fGFnW3B2RlM7NDI6W1dWTT9ofCl2Zng3ej0waTErMCtxL2ZEVGR+VFBicyp9TStiX2goX3xbbkt3bDh7Xm1WZldAZHNiV2ErajFSW1JqSGxXQzIh''@;'; put 'put ''RSZXalA5cEl5bHprKEY1akNENjEzcVJyUlhHeGxeJm8uSV1sTTNKTTpEJm16Rk54RGVnaENyfHlebCooU3JoL3l1dEVqMS82YUshe0NxKDZ5dl1xMENDOFFITEw2cyVTV1dWZTZnc3UsUWg+Qn1EOjApOUglO1hCL0dLSVN3TilgSGJVJjp1I1MyfmI3YlB9b25HK1JFcWw8Ok06cSEhWCsvOmkz''@;'; put 'put ''TS48NnR6cWgjZlJIQmZNX3l0bG99YzRQVkAjVktPXm9uQ2ZxcTdqbFRoTFUqd1gwbF19Pnx4TSlgWDBNYlMyPn12Z3xNYVEieHspU3JHP0JKUHhidmNJJSheTnRhLGVHZS5hbldJdFRBdnA4OWdKamhWOGAraiN3NU9vQXVPYXxROmNFW2lrKiNfI15QZlVudEU2TSlEJGlbdXgjRUguL0AyYGw6''@;'; put 'put ''QGVdU3FeXnlAbiUoMiwiR3xvZz4zcSFhTHg6PCh7N3VJI21haGZdWDEwRi4pc1NefFREP1hbWz0mcXdePmA2aCg4PkpFdSwsMW9NY3FqfVpVVT0rKTl3OWtnU3gwTCo1Oz9jUWE9YHhGSGJQIm5GI2doQkBhN3I4bkxrZFZyMVJlQjZffFkoR1dNV31xOER0bkk8X2JbRVtlJSUsKikkMG5eTSt9''@;'; put 'put ''NEA6PUIlY1NkOH1kLnpRXiR1Nn1HNEV4aUU6Yk1eJFM+IzkoSSp7OzNlbTYiTy42TkdlaFltb0M8WlJfb3E2K2UlayZ0OWIkZTlzLC9lYFJ7aHlFN1pte1QxYChIRik4dlZdZDd4aTpVfEJKW05ObiYuOntJJmJ5TihCbmh0UlFNWUo4Q3lHJiFRYkYva1l1PXh+R19wdlp+P0JXPHU7Vk91NVR4''@;'; put 'put ''R0tkNzFCaVVCVFM9VyV7blZ8RFc0SzUkQD03fFVrP2lBRT5Maz5vcUtpeHBAUllDVEA8JjxOV1t0Y088SlBuQm9JW3BNdlZqI3BbJmJdMERsbFI3SXdCaG04TFBNOX5YRG9GalZONCsve182fDp5cmFseiE8ZkJSIU1rYFR3NlcwbkI6fXVeX3JNVCh6P0J7cWl8IkF0RDxiQjlEY156XUtuUU1e''@;'; put 'put ''S3NJP1dBM3tseGd5T2o2O3k7bll8dFMhPn5oYD5VbyJhc1J0Q0dNYTs/NTRVNHFaRE1qVHxEXTo1dHZEMkBmS2pVcW1Rejc8QilNO3VxM3w7JjMxblN7d2g9VnsrZStQQjZXNF8xUmxSNGt3N1pXNnk6ey5+TT4sUWpNeClQU3VYSikkbm42Il5eSDFgViVjZWZAIX17NUI5XWlkKWsiZlY9SlE+''@;'; put 'put ''JVRLNyQvY31EZD19Jnl6T2k8VkU6IUwvK2RsVT1HJmVbQyV0bSNTLFtKXWF0Plt0Q1FNeUtfViN3MmNzOUNjXyE0USo8LChGNGBacVFkdUMycTw2UT9dfkohZ2BSImxCRCUiVXFyTylsZUpEMjtRcSFdV2ZEMGVaM2RYVGNbaS9jaiVnJkd1ViNlIV1TNExtcFVOVGVyUE5ZcUxMTXpVfSQvNkZS''@;'; put 'put ''XXtVfVk0MEtIYD1iQSRIQVFjITNtT008K2hdIzc1WC9Udj4vSDxAP2JpT2JQZW49eUdHdUFaOEp5KGFyaEVecStRe1AyampGLEtsTG5sczssd105cGJ3eGR4eXsqa3JjOCx6MiJiZ2RyZSxabEhzLzEpVVgzfn5jfTVNRkJbPjFOXyNsZW0zYDAzPzFVZG5Ub01OdzVbWWxdQWEyeVdHeiJBX0Jx''@;'; put 'put ''YDo6d3MkQ3k2bVVqQ0JDXUN8Z208dFFgOUlfMCw/PzxHYF5gPSF+b18pKUQ2TDNJeV8zfEl7IzYlNEF5SlN6X2hjMG1nVTM4OlcidUhFP24qfi4hVDNVMSJGP28hYnNIcTpqUTJ2QXcxNXAlW1tsTDZHe11naiNqbXM5eSlKYHNuUChdcC9lTVNkUnR+aURARHEySjlUQHxxfHViVSNZSnNZVzF6''@;'; put 'put ''KTI7TEppNmNKdWV3KzY1NnA5ZzxVbnhHNTFHQ0M0ST1aQGRdXzVGJUtVY3FTQiQmXikjcnpIK25TPXU6YkYmVzYxPkhtTnRXV1BFOFBeSVdJZHZFOHJZXlMjeyVnSE1bTV1RIylNQmU5WGhVLjEoSWd0Sk0za3RebzZ5WzlsUWBtfGtvKzUoSj88L1hjTk9oVTdHVE5gWXZpbj95LHJ+TVhIbU5d''@;'; put 'put ''c0JxWytbZDhpU31lcl5kKEArLDR1QEA3cEtLYT18MjlldHQqSUw9KlVbN201PDYrWVNnbCglZEx4fmpyT0MuZDhWPHlMeTE1RkAiflZGVi5YMExWKlAqdC8uOlV8ZF9AOEJkK0xLOCNqaUMhK1dwcC9MUilEeUUiUXgjPUQ2Ozx+OnpnY1R5V25DdE9iZERTKlo4KCQpNGd1Xi84Y3ZrUE5RbDUs''@;'; put 'put ''PjolVE02S01WNWdgc0ouP2Q8fEhAVi5beCo0VmlefChNc1luajV4eUtxXn5Fenw2LEVDcUZkKk8vJXdjQW1aQlN+RDN4fHEqRFZvQ1MzKHY4RWUxSm9aTnMva1IxSzc5cGpuIjk+VU9VJW1hQV0pTmdEVGlqWUklR31GTTxdWUQ1dDt3diZ3YlVGamF7cmFiYmQ8ImQjSyYkNVFAUHR+bE5kODYy''@;'; put 'put ''TmlzOjVLNCQ9ajl2fV5Ddy8kVHYiV00iOkdlITokPXhWcWFJMSRXPiJjSnAvOkg/bSM2QUhPOzFSYjl0QmBaWGx4KkFuOD9nb3hYI3tPcCE1aD9hVC9DPV1tXmN+TH0lKXFzIWJ0fmEkOmBSVkZaXWx5dHBDPUEvYiE0QipQVlE0IXtCJiJrfnFBYGVpfi44MEZydmYlKG1nNUN7dixfVjpGK145''@;'; put 'put ''fmMjYXkzVnc3bHo3fDRzfSs6Ky5YcUlTUTNeJFNKNjRtfEp6SXIwNjp0Uy8xQSJVezcpWTssVXgqflAwbmRLUGddRCVPS05TaGw6ajZ7MyE6fGUpTUtfMW9QNSg/XXkvLFFxRzdCaUZxTT43VTtwLEdaSH4+O0s4OjxpdSg9SDtAM3g0JXFXPHE+ZjFtLllFWFRrTGVBYE5gYVAhczx4QlNXYXRj''@;'; put 'put ''blRnYVQ4c2RmQCtFIigweE5+Zm1ATG9IOCY5WEpsRzJ7R0lBInglX29WTFQrLFo3NF5AanlJMShJeDx6QWc4U3AsWX1yaTI8K2hSWyo+dihiRkBkTTguJl4kY25mUkkmUGVESV1TMkZzNCR0OmIiTmRwWipEUUpWfiF8VD1xfCwsVkRQYT1OVnojcV9wMzRCNXJTd1QkMVFgdSFmZyhkaSxJX1NB''@;'; put 'put ''U3BAWldiKXR1bCVuJENFfEt6KGU/ezxkKmNrZUU9d3xEeVFbaFVVfmlXMnt4bFhncG9rYzxKPHUkIktAUUErJHA9PXJ6OEN1aj8vSy9sLFd2NTk+e25HYWZsfnB2L1JEUUdbNTlgSTA8OFoqYC9qaHZFNysqOURvTGcmOEBJMF8vbWBzb1ZBQFZlYWMvO2pNLkBebU9dbCRQPmFhZ0V6cEgyaSIj''@;'; put 'put ''WzNpYC9TQz8xcTV0KmhkQWpBd2UhZGQofUwyeixmJUtUWSMmQ1EjMFcyel0rZiNNbDNvTV1yRGdxJjhUfXRASi9aKEFCe3ZHL3QmNT1Xbl56NSppXlddVWEzdFBkdiRMNTBAOENqNn1lKX1uYzxeX3QuM1Fue2JBIiZvMFBOaVYpeWtSTHxiXUouMn0sVE8wZUN3JWRQPCwwVT14YX0xYGApaipi''@;'; put 'put ''dnNCUUM3PVBBVEgxdFdAeF1rVWg7eWp4JFpWOUkpOmh9ZVthXUBUa007aEhSfWMwej5vbXFLZy5XZVkubS49fVZaYy5NTDhZITlbflE5RU1jSU83TCFCbFlDSDViT08ldFErcGE8RUclME5rVHVnTGFoemhrZiZSY3ojMTY3fnNXIkM6U0tJYm86UW5McG5NM1JofSNPX30oPVJ9YzNYcSV+IlE6''@;'; put 'put ''WTRnKyZTVEQ2ZjpaVjE5a29ydTpgNl49OXRWRipFWiE4fix6Y3x3fldtdERrVjddI3o4QlRHU0w3KVErL3VvNWA5JDQlOGc4Uj9BZ1M+M1N0bltSXkpNQlEpLildVmMrSy9sd1RmQ1piN05KT2YkcGhbOUFIbUN2dkQrPltqciRabGZnQ1ttam1mOGFzQyp2Vn5ITFtVR2ZyQmZ+S11NIk1sK155''@;'; put 'put ''Yz8leFk4Wm9vXXBeQl1uXi5UQXx4P1E4XUt4I2RTRm95NTtKJk4ldHVXYXNxPCNVOzhWcHpHQSUrbWxXTUBXM0RsYX1Ce2s2JjxkVGZ3L24+eWp5ZDJlQEY9WzcqaTNwdlc8YClOSGNNXy41RHFHKFk+OUxPejNWKCEoPmlmXWBqR01mezgwPDFNVjN5SWBoOEpKNi9WWz8zMWRSOUEvITlCUWk6''@;'; put 'put ''Qlt3cFtaaS40ITtbe0R8Lk4zN3dBLixuNzQ4Nkd0OlR9ODR4KTJzTWFSXkxNNWdjYnBbLmx3XipkUWU+X15jUXEwMFVaPT0sVjRmW109KngvKjcxSSZqUEl8SCFBOXApUjY5WUgmJDdDe1ooWExPS01eSiludn1KLExOZEouWTdBUlRuI3YwMG5MaFZ2b1tZalJLZltUZ0xqYG02XjlnfSUjMXI4''@;'; put 'put ''LkkoKzs9czpPdjx7PzMuW2ZxQlVNfTQvRGBwPDVnfH5vajNybVtrMG1aSTdaQWk+TXJCUCpDSV4vQT89UWxWQ0RMQyp3YGs7QCkxT0J0KHA6RFJrPjxBJHtkTEReYDNqfmpDbyxvPTU6U09ERiozP3F5UXt8flddQlkkMnh0Xik1P1BaUUhyP1gvMCZyYlJ3YlIlUyFnPkxGKEZ+Q29WVzZhRy5E''@;'; put 'put ''a3pJZkxnN2dBRkxxNFRiXkd3X3FjdXBNSChQU3dmYTRnJWI1UHNhI2tuaXIxWTdhW2VibCFZRCM6Sz87QjQ3NT9Ud0p8aEl2LlYsSi8wSkBXVVYvbjwhfEUjZlhHaG02KiV7P0hXcS9SY3pLWGZvQFtgWGA2P0A7X0p4bVsxRTdLK0AhQ3ZKY2BwTTtme0BHLiRWOzN+cT8mbnRzWXw6RmtPbkRZ''@;'; put 'put ''bEFZUCxON2ZBcyhCOSI0WnRuNyp3QDcxQzFCJUVkdkZPcFgiNTR6WStLUWJkdkxudWYjRl0mPEs5STMlRVVtJntXRVFwdUIpPD5wO3Q7bmRxbVR6KltKNkR6LjQ1ZHckN0BTPkYlSGZ8d2R0b31EZk1JUG1ZTntVdVolPHlmQlQjVkJFZExsMVJgQl00Sy5BN3JOcGk7fEtkUn1RJDZaa0QwdDlY''@;'; put 'put ''TWo6am5ifVp1TyglTXRCaWY2dFtANXNiJCpDPEVrInw5MzNKOSJtaSpoI1FAOSR0PnR2b3xgOyNRTE15MTNYY2U/O0paLypkZHlEaXw/Ln1ZSyZlfkwsdn1LfEFMfSRgbTIjJUYjKERMJWwkc2h3aF40S2xbODJjN2xVJDglXXRmTT5KIWMsdU5lI2l9UWBve3NlS2ZLIlVbOSxHS0JhbEMkJnBk''@;'; put 'put ''blFdaEwxQ3QpPy9ecSkrc2V+PVoqbGRXZVN4RCwhZmk2UV9uX0BKInReMjFmJEpiMT4/TWdlRFpfcSRLKXdPX1ghQS5LJW86eFNadz09dChLLGIzViQhT118aEs2RXNLNHQqJFNFRU9pV05zfHIpOGwpXn42ZHdHcG97fW8wNXYzQVl3fjtVQ0s/NytMJiJXOHNafHVNaX5SI0R4IVZkJGZDSHxF''@;'; put 'put ''T0tZRVo4a0g5bzBUZGZfSkUwfDVleC8wIWc6Rl0/a1kkRz9SWl07U3RWXSxidExmQ2k3Vyo4NFhDbT9sckRLRzg3KyR9JDIkQyU6T25daz9yW0M9c3F3NCF+WGpycVk4UG5rRU8hZ0s9P19NOH4pbmQ1bW4pa25GJHdOJXNUfWBnbnlSeVJQcmlQKnlaNVdoQGNJVzxPa15DdF8mJU5hWTZadzIp''@;'; put 'put ''Pkx8VlR5KzpUNTwwcmBeLndKIU5EP1NUK29za2JDbktkLFlHXU54O3BIdS8uYlJreERVbTJzKURvQ3B+eWtJK3ovUk5DZCghIUwuVSZaUyRqbHVjUEhaW3hHR0dQPmtyLDlYZSZYNkxbfFNzR1U4LzEpLmEhKj0oM1VgTTRjfWkoXjRmdkw3V0khJT10NEwuYTI6VTxzaGt1OG5WKisubUI1Zzch''@;'; put 'put ''WWppeHcjSSVgKUVVR0JjfT9aOyZXZkgpMUFzaykpaiMrPUBnIzlzNTNaU2oyXndXXVl4UChDLyE6aDBMUUZnTWJKMSNnKTkmeHAhSGs2b0RNRHMqRnllaylmKStbRkR1UTxZMmwrJls4WiJsPSxhTE1MMSRgL1V1MU5qdUYvZlpgWSl8RHwsSD91KjlbSCE4Zmoqcik/OjdlVTNSQzZMRixAVHgo''@;'; put 'put ''MyNrTTpaLFY1VVcxSjZHMUx1ITtRcTF3OTJVT1BuSGxgLi5nUz5DJEldSjFKcXF0TixXeX5CXyRpQHZKWTpES2NPQzU0UUA6UC42Xyltd1U5eiI8KVV4PzkxMFVEMWhWPXBScSo9WXkzJHksQmNGJXF3WmJ1cEh8ZW9kImk6JEtFQzZOQkBTcDYxX3tCQzZ5PSpgUFFqVml0KiQxTFtAd3NycmZW''@;'; put 'put ''a1lzXjRIZjZtZlF0V21wamFAOyhyYi5nRyU8RHgxdVB8dj5gQHJhU1JQLy9FKVtdKjEjbj9ANDZrTXthUERnWTJdQDgkPCZqLFtPTUgoRm9Bd21gWVVQI35oX1c2fX4oSFJoM0dXTih2dVNHaF98WlU1U34jZ21mT1F1SUp9JEpxQ0I3I1R6UF5JaWM+eXIiXnF8d313MkspdC9RUHhERyVMdCo/''@;'; put 'put ''alVKeilVOFlvXUI3b21PUiEvPSNXfm81bSkvengrKltfK0hPJlNQTklTblVkZClMSVIwLHNCNy41bENaYFVxP0VNMX1QNzNXenZQZ3Y/Y2d+Zn5pVEg+aS82TWFHI15qPllFSHA6bkIzJU1RJUY2XTBJMStuQiFGbykzWXZjdmIubXooQGw1UkVFa0RQYWNGP1RTYFcrTW4rcyhzY0kkRVdXKTBR''@;'; put 'put ''dy9FKyZ8fTR1P05xY2tkVDE9YjQ7KklVKDN0LmB9Y3AvVlpTKmJzOkRIUkBuSG8yO2lHRjxibnEoRUteSmUuKyUvRV9lOCRDYmF3Nj4rR3AlK0tEZ3k7JD9GXTRLaUt1cyl5VzlCUGFzIWJ1diNObV1MdHglcDsubkhzeiI+NjJsJCx4bVU3NUZNaG8hMm8hVFchIVhCKi5+Liwleix4RV9yWG9y''@;'; put 'put ''OzohekhOR01EVkhVYltVKCwoZWQ6M1NCMFU1QUAhW2AjdGxOPVAwTSE3Z35IeVBfQ1QzQ2NZIWY/VkgkVzdiRUtIb3V1c0tLYS5jOk1HYkAqclE2eEtyNG9QPHNWZC4sRkFQWFI+LC5rSVhKQX1We3JYeGYzdVAjd3J0fj02RFVuc2l6Lkt0bWxNUjB7KixCRn4/I2pYQnhSS0MsUik6eTA6ezxv''@;'; put 'put ''NF1yKHNveWxLIWkuOXh8JDlqcDl1Xj4vRlopM2Aybj5vQ2JhPEohVCJXTUliRiFrMCZbcyxoSmA6N19hZihYPm17UCQ+YFJXZ00zV25IQT5uYClsb3hpdCVDeEZvRnhRQiNXMnxpJEZJUCIufjxPZGtGV2owKTdJJVh1WX4zcmIrL0VfQWksVDhuPyhVUWJHVUxbMXVTNitFalBuJnNJdFZYflkq''@;'; put 'put ''fVRLIVdDNEpJezQ8MmFKa2ZiTS9gdSJKaChvPERoTDZEI2Ihdk9ra01pSypxanREdUMpM3dYMX1oVkkiMlpfVTc3UihXPCJIdC9dY316X1N0Om5qJC5GfTtJbFhPVTprPX48YTldVlNaaSJXWUFuNXd0eX4kQXVTNDNwVlYseCRFITo7UnMqbkIvP0dKYERjaEJkcDx6KHx3fkcpaVAmKitwSWZg''@;'; put 'put ''OU9IeTRoP3EhRldoKjpeTy9EMnp5RVt5aWVwdGRXPUhvSS93cH1rZSkwISpiJTdlQCleN29iT2lCOGVJX3EsTXVFe20qfVhWOG5odUlnPzM7cCZQeTQvXWo4Q0ZgQUFSM2JSIjR3MGtnfX4wTnBdSiE9WUdsdlRkXk89PihbO2UzXVQ+JSNVLyJAW01tOXBBe3VJY0QpanI1Z0RwRXwkenhRYEEs''@;'; put 'put ''Un5WQ10hXyRkPmlmMl91YllnZ1Z0W1hTIjlPfV9LXnMxVlUxZTowPmB3eyJsX1oiTHNJeE5Rb3s1N2pYMFlZPFY0dSlqbSg8aCUxOHtdW3tYaD5kQ3UzY09DPWBBaHFFclZzYi8zej1+JnQ8VmdUQWFhKFt8P1NZIzwhTTYsKmNgQUZ3S2VqTDJ8SHtSRGUmcVIpI0Zjb2Q8OzNXVn5leHh7WGl+''@;'; put 'put ''PDxVNX1kZU5ucStWJV9+VXJJZlN3ZnZoKkklKlNAKzAoKDM0JS5rVV1MPHw8V2VaKlExOW5AeCZXPX0vWH1KcSFtQTpSU0w7cj54O3l4cyQkRDUwL2RhU15SRSgqK2dgI1RkQ2prOCJvblg/dVlbaGUwanBHbUlSOmliQi9rOTBOTnU5a2tHO0Zmc2lqIzw4cmpbP19+L3FrRF8sV0BPKEpzZ05y''@;'; put 'put ''RH4/KCpYbnpWZUtzMHxzWmtVK0AwNDQqTXlZekhQR1pTbW0kMUdILFEscncxb0w6fT1tNio2KnhMVSx6NF1WUUleVm0vdSJNYyFPUWxdJStGXnpMSE50O05VIVM3MXZDPkF6PWFofSk8cDdBOTVbTVlpSmtCVSw8UWF5cjhbLlVwKi9GKSJTZCl3cW9laT1pVmImc1BzWDx6Z1EhZjA6aXNrInVO''@;'; put 'put ''bzxad2RbLClZNi9fLmMrRmBbVXAsOTFCX0slbWt7Ikc7LjhpWWdyL1JYLnU3OVdCS0IlbyhPU28ianZVM1p5aGtacHpfSWx4YDU0aXllIXEsY1gzNUdKdjR3Om1MPjFVaCFlTWJHP1N5OGQpVFFuTyVZRGYmYUExJTp+RW5CfnEsRmZlNShiMG50PGFRPFpdYXJDaSNNSTcrd0p+ZUtxVFR5aklq''@;'; put 'put ''YEUjbGZhKSIhPURKJigiUzJacT5yP0ZSenpBIWlNMWFJeX14Yks+c3c9X1psVV5BMFtbTSxlcUtTSkw0OFVycTE1cCtzWyJjXz4yXyY8PD81PDs7Y3o9QDtCdDEud3JyfHYqZWlBSm5TPV1yVHh1JGlGaVBuezh3OiosIltUdWxuR1JLQ007Kz9CVUNyZE9RISZ5VUhwNCVdbmdPT300ez1wanNz''@;'; put 'put ''MUNjL2Q2OXIqPWk1UEJeSGlrVyV4N0ExbWl9SmxbOD4qaGVYOmtQVjRUe1NUem5NLiwjKl4/JDZBbFYpTihyKWxaME9Pa0dvTm5abE0wczhdJW9KKipTaU80VWJ8aV43NVZKc3heYndyYXxKY2BJdGY1c3xQR3JINDR3QiF5eGl9d31CfXIsPmRlUzdsXXdGUnl3RG9sOSZaJWFXRT9QMiVjMnhD''@;'; put 'put ''My9RZy4iJndwLFVlQWVxQUhpZCRxQSlVKGs+MjhZLn0pQTU4LjBgcVUsbF44PHV2dz8wQitYPlRYX2RLYzReKlZ0MnkrYiM7NlE2STl5fjU8YnZCRHNlaTQ4OGh6VyY6QWQpMj17fVtlUWYhWWp8TXI2YSVweW5BWjVqRzpTY25XeCZMWEhTRFJ0VSRGP3ZqemBOKThlbGYhajYmYGZ2b3NJRlg9''@;'; put 'put ''OTtoTHAhb2NWUEUwOElnW29iOl8hQHRYTVYkdzhjay5rbWdab08wXiRDY1V1UnNoT19XWVpbZ0Q7dz9GQyR1SmJmY0Eocj4wQ1FMYig2JWAuN1ZdJVF3VF5yZSVybEsjS2Y0OkE6JlJ8X11eQ1Jtaj0qN088IUlrRTduV19Be1F0N3lKO3B9STp8R3Rge2JLTjlbclhDKUJRITEvYiRTPncybDww''@;'; put 'put ''NlI5KTxMRWlnTDlVOkR0Ikw3NFBJdT5NOSleYDJsP0EsPEYzL3EuRUxyNUlhTFVhO3Fkdmw1LExiKzNvV0psbGQsVzdtPT9tWDo7fW98ZEZsYTtEZ1VPTyxvZUZNTl9TZH4ldER0PV9uM2sqNFlLWzRTLjwuai86fF5WUnMsTXlDfSQ3a3grWntBZC5GM2dSVH45XlM0KGM3MDk/aSZjPVVLMEpP''@;'; put 'put ''MjlyWEwxYDY2bn1bPGZwJSNQIlRKYFd6KCFUJkZXYS9sIVtdMDksViJlK3NbTl15OUI/MGpQZy9Pb29Lbmc3KEtMV1srRUcpW1BNZ3pSKn19RCp1dS9jSVVSJTZESVUhJXBTOCN9Vm1fPl0yfC5IT0RBSUFxMkszIS9NMjJHaU9fU0lwZnJKcGR1clNzKlh0MjxEMEVXTjBTMXFYT3h3Imh5SlFq''@;'; put 'put ''RHVRZ3hVNktuVXNhY3xyOyE+emxNV1oidFMhcU1waklBQW9SQEA0P0chSyxaPX5CdU1iZFI6PjdCMEhLRyM/MDpvTzh3cDxqYjp6TklVVk9sVDgufSRVMGg+cFlIUykpJUVzRjcsK0tdKk5APSVbKDV5cVc8dSNhKEhaM2Zud21AfWI3NE5jSU8sSkhDaFozL1NtXWpLdnRpRCZgfjtFbU9HPUxp''@;'; put 'put ''V2swaWE6OXt9WTRgXm1rNHsoNnkyRm4lPzV1Lm9UVjJmXlBPc1I4VjpdVU97bih6Xkhpcl9AZkV3QmhIUTo3R1hILFlpVD1IREJ3fjZYQCpKKjk9KnNsTTxNOkJ2MCRJfHhBP3t9bEE8diwpQTMiL1FtMCMjfnJgRy9MM1pjfWNlN25yQVQpY2FmMDdMIlduanNPaEYkKkc+W10kLjQ/WVkjM1km''@;'; put 'put ''MTdXfEUuM00/OFc5Jl1OZjw0P3BdUnl5NixKTHtxJGBobE9FTlE2YzwrUmdldjZJRUolJTolPHFOeCRbVUlxQ1EyQGwlTz5NViJ7cVBKcHRJW2JgIWguRX5iNEVGNzIoamksVFIzJk5KOWJnajNCOS5BRUhALk49anVIY2xeRCxTbkpSRkZOdDZydjttd1QjLEpzQEc9VDtDM2V6T2l8fX5AZi9Y''@;'; put 'put ''YCRaP3J8Rzx9YmlvVVZ5UE1IdHZqcjVdcklLeiQoXVY6P18+WU4xVUhJPkIhRWxkIyxTTEJoTV1yX2N2YCxBTSJDQStyLGQlPE5TWEM6SjRLdE83R0xdeiRgSSFlWHlVRSY/JGZWKFMieCNzYDZWdG02JG5tVVciZ319azVSUit6dyxUb1BeWDpCOn46dmwqN0ZtVy8hSUNuSjl+S3I9byx8cyZK''@;'; put 'put ''dUZiQnw4IV0/Y2dLdFhAYXFwSUgoRUxlckd+L31dPmpzIlt7S04iRjVqTUZ3cSVwYSs8VXRvPzJdPF87KmdIWlVYN09JaiphTW9IQTMxcCZkPnk4OjR+cnFafkxyQT5rSlVCYSF+Wl5JUjpUNm0xJXk4SE04eTtSVlJ0fGooS1hpLnphJGY4eXZGOiU9Nz97cW9ubzhFRCptbGBGNSx8TlBPKWJz''@;'; put 'put ''ZlM4OkEqVkRwLExZRGJvI01uKlReX1N8OWlzPjEiYStbSnJ2P29vT201KkZZLkwsfXFGPHpJJFR4RXljY0hWc2ptX3N7WmpnKTIqM2xvNDVsKkVzYiNnYjclWX5xXigmJDhqREdIZHYrUVB8ZHowUCFyKUJ4QipAQmxKamR6dzEoeHZYdjVjVXcuZUU+dG1DblA2ZyEvXjZ+OnNbVm0qZUkkVnFj''@;'; put 'put ''Njh4LEchN3dmKyE8ZmN5YGl0TWQ6L2F9RHFrPiZeWzYrZEFhXy8jfERdIVpGSH1RMiokNnNiV2REMkBsejpxKGx8STlrZDY1ODF6R2BQejowNXhwMFhlU11iRng0QkZJKFphcX5hLyRaWVRaS0VvWig3fmtOSFBoKXp+L3pYc3BybFtHdVMwP0NsXiRWIStmcjdrLyZpaGxsRUBBKkU1QWAyUzlM''@;'; put 'put ''KTNuaXhBW0lMZSpSeiVAJkpqPDZmb3wpXnBVdXA/U01xNFcoTj09eyxfOjdTUEtRRTh7bjRwT30+NEUveWt3N21tWmRPUCJ4WER4WFhMKmtZY2cjKEdPMilNeWMvNCRWQS9uJHgzSGEyPTl0YGE9PCZJODJoVSE+bCt9K0QhTzI5Yy82MTheQ05RaXB5TmRbKE8mcF84fGs/ez9TQGRgJE1HXnF9''@;'; put 'put ''OFUhUCE3REtxX3VJOm48Pi9TKU1ZUkFBRVY9Zk9+cnFoYT4sT1hCQWNXXWJSakU/aWNAdEJ3Qk9xKy5yKWF2MV9QSCpnUXMlKSp5N3JDcHp5czFDSzliUipdTjw2elp4ZSx2WjNjZChCZWZIPSFsVDw0QGxUVmFXUW1uJDhLdyY0ZEN+ekVjc2dzJEEwditNbC9we2V2VGJ6Uz05KihFV1diSzx+''@;'; put 'put ''SSVqfFNiO25nWihRMWhUX3ZzY0Vea2pKOmMiSz5AaE5RemUjUEk2b1VuWGI/Z3tobXY+eXJye3I7TlBoI0JPIjRyIi8ub0VLWV07RyM6JCxzT3pyMUt6MzRXZXAxSS5aJjY9VkEhUExTdzRNQC57S1c7bit7TE5QMH09a305MEM/ZUBhQ1dZV3tAKXUhQCFqbkBoTlBdTkg6RHA8QFYlZz1OM159''@;'; put 'put ''WV5hbFYyeytXN0gxa3Z1Z3B9dl57dD9WbzQiXnlTQjpbbjVqLm0jSDFjNnheflhQc019R2RfVCpVQkg7P0NfbnB1XUc0Uyk8a0Zkb25ab154ciEvTDFDV3QzYig6VnddX3M5V11hJlVVWzR2SHRYVDJtPG90OCJ2KVd+dDZHfjFrdWVyUUc6WWshV29aTUI/dHlxPFsoY1Qwd18yOm0pK1U9V1Au''@;'; put 'put ''cHdYYilQcnlPaW4wL3FIby4yaXF2KCNTPzxmZSFCWlBAND9LVl00JDI+UnpbZyxvN1ByQHMmYiMkJmZYNmQ+QFtUWk5HUV5aa1RdbTgwLz5HS2JoQS5PSkk0QjY/KlJpa1RpT0k1S0hPMHlJLyE4SjJsZCMqTypJKlFNZWZwR3RtO0JecFRbLGt8LyRTdGpsJGwiQTtJQDxpT15hNHglelVUKChx''@;'; put 'put ''U0J0cnguZT5TZTRNZiQ8bCRvRi9bNz1kbmQ4UWZydGddbWV0aVJJLC5IQkB6UTwmaVd9X2llKiglOUJBNiooNnZfQCVYJlckMEg6UkBWNkJEeiUoei9pRjR6P1c3aVU5UUlLZVtTREJ8LGVTVCQrU3lTP0RUa3xAWU0yVmpeNS9eMEZLMnkpKCRwY0E+ZjUlLit6L1RpITU7WFkuWjJ7az5qb05h''@;'; put 'put ''ZDBoaiImQENLKT5FUXNzREt6c0tdRDxvfEBXaWZXfjJ0SS5hTixNa0ROel48MyxIIXtCe3BAZE8oTkYmNnV8ZSI6PGxmXkVbUihMSTB+NHs3Nj9yWkhzQTImNHw7UiJqSHhTKmopZyhuYU8zO2pbPE1nW0VYVkFiRksufF1yMFU+MEV5L3JISy58fVdtN3U1VChBeUMubkcpUlZuNk5dTit8UGc3''@;'; put 'put ''cG86UWtXb3JeRn1lQlE8WyEqeHxTQiZMNFolc2MqOF1VSlYpXy4hL188Rj5WcXA+UjRiMF9LP34rODFFKWplRndHITlAfntCbiMwYDtgXkFNNm1RKmc5ay5GWEQ0SnYsZUI+Y3AucDtLOXo7TVIobEN7ciY1bFdpe3tbJlpDYyswa2MpJmRSQW5BL0c6LzRJNFAjKzJjMnVMKXM2RVlfKFVLeEkw''@;'; put 'put ''ekJVNHo9WEhDOmIwTVNZYnU+OkpoXkFsY1dkVWY+bFlCUk06YylQeiJnNjE0UikzfVcrbnM7KjNeRU1WZHQ5UHFyRE1lITVmTkMqOG8yLE4vNiImfm04ZVh+d2pefDZnVmQ5KSxiei9IL0JaK0ZyZjMyU1R4bX1sPlg9e1tIVW1FV2p3MTMwInQsZjJSLGd7cFlRUUlKRmIzQCsvaFk9V25NUkVE''@;'; put 'put ''QFR7Z0t3Q1Avc0BhMnUjVzZ+Xmdzei9DWmFOSms9TlQ8JDNMKF97Szh6eHAzP102UDtZYXclZmBmTE56RyVVZ1Fdc212ZHBNbCk4VnlKU0NMfT1LbHFmX0cifU4qbzxlPD1hcnglb2s0Pn59ISgwOmwlN0YySSV6XXk5fk8jSi9II2luOCFheFs6NCMoOiwleE5oQDBvMUNwMUw/flMyZldVYWNP''@;'; put 'put ''X29CMiU3KUo3KV58SEg0KD11R2wzJnVsKS85OzpJVjxlUUo0Kl8rfXswd0IhclFMWTMmWX5ISiZCRVgpcTZkUUosOlNhJWdJM2tUTS8zcEBUXnZgcSpFLiVqPyFKYmhSbD1qPkJ8YHJkXkFxMy57YkFWazFGL3J7R1FiMnVMIldeXWNDdlF3a25QaWNOLFNiOFZ+emlkO30wSmFISTApLEwpUDNU''@;'; put 'put ''TTB7Q1tfRlNPWEl9KTRNSnNdS3B1TSFifXRATkQuIz1rW1VMc1lBezNmfDJgP0kxcmErWFB5WTttaUVSfmRpXXl+TmA9XkdqOVkhb2Znclp3W0N8U3pSMC5EeSY5ZEd9UzcvOElnfUlQXlc5czczY0BkNjFATiV7RWcqSkd7LDZLVj1ramEzcERyX3MrbkVNRmFgfHdDbCFRYWozTzI+P15TX0Bf''@;'; put 'put ''OCY+TEJ8Pl8iYUM0QnMqenRqTno5SUJDMElkTHJMMldnSGh1YFhzZlEhMTg/YkYvNzpHaSRabCssW0gsQ0hCY3V0K0AmUmt2Pm99USFnWWB5LGQ2e2RCeSVqRklEJUpkYVJuaVgjTFs+PF13MTpyPkwxWUY+N11QM0kxPlFAKTdpT35rRCYiTzAsLEBlWTE1QVo8IjM+fllONHJVOzVtNjYsJW1K''@;'; put 'put ''YDpkN0pUPG5Pcyx0K1NjYjF9RnsmJn5rSzgybk8wLHQrU2M2SXtMVTxLckRqXW84d19WeD9DTX40QVoxP3N5TVA4SSw0TyFDdUcrVjApQC9pPmBhSVB4YitwPSVgK1VBWmI2NWoxPGd1PjUvbmgoK345dklyVD1TZkclbmp9WExZPGx+K09mIiZ1VGZXd2A3UWRtTi5pbFRtPUlNYDNYUEddPURp''@;'; put 'put ''YDFZMjBWM0MuVmVnVHl5PitMRkwwZzJiUisreVolOjVKJjpMSmJjeTIyaWBnRS9AKz8uZWBIdjRiUzUzWV9iZ3IlO19TZSgpIzFMMV5VWUxDb21LUkhmZ0NlUkhYd0UrIW9HRVlfPCVefHZkI1t9fj5pVmlza1ElUmBUYW5Ld2kpJCEyRzNrJDFTMzIkXUIybnNHNEp+KUBaMFpfd3FXbmNxL1R7''@;'; put 'put ''dmU4ZEJ+cmA4IiZTRiJAdSQ3ZG9VV2R+dERDZUlVSmBIY1EqcE1zdUkoSVNhOD07eixzTXltdGpeZF92M3dDZypLISYjcDkjQiJzbThRaS56cmdvbno/Tz1ufXB2PzhwW1k+VlFpOEVHVDl0UEdRaTglbldhfTY/VSQ6ZHIvamNCdGZ+MH5tVGZZVXhJT0dkTXtXN0oxWnFJeD0xMDxCLk1KNyhq''@;'; put 'put ''WF5aVUJJaEhBTVQ9Vk5KXlZQPnJLVCozTml2Pn14clY7JnxOSU9SLilOfkcqYGArVC9xWE9lLDM7UGUvZ21PN3kqTUI6ZCV1dztJbnx+Tmw9XXgjcDk5REZ8OHVdMTEzPVAxQWtVJVFsYGt8YjlgJnw6eXBlMUw4Sl8pS0cxPEsjZFE9dnUyJXQsOCokbFd+LkdDbWI2Yjppb1VYd0lnUEVEbWVS''@;'; put 'put ''QThnRGsofnJHKVJCYDQpTz07Uk4jNnlfKnlwMTJmU00oVFROMFNQPzpkNkZHbWh6YjtiaCN2NUc+Z1J0bTZXTk9FUFpPdmJ9eDpZKTYjRzFzZDx2RV9dO2xLMyImP309TnQzLE53KkBIPG8zQjV3OnBxRWBEU2lgaTJbdWY7aFV3MmQrJD5QfGpWanBMaHhbMHZadFYpZF5sT0t1QyZ+c0EjUHdA''@;'; put 'put ''TzslJVRCZ01dY0JpPTg4dEVZW0lRR1JVM1d2UXprbVpdOkdJM1dAO2EzQi4qUDp+WW1uNEM6Z3V0P19VR04uKmtqSnFFZ0V6aXsoSnFeX0lyRDR4bjssUGEoPVVyO2UrZlRYMl9vMCt8SV9JYyQ3bTYzaXA8NmV0bn1kNUZwbTcyT3ZYdk9VKHdWPF48dmpPS0YhIkRuMVVqJHxRJHRoKC8yWCUh''@;'; put 'put ''Tndpfm1NaURefHBOM3peejo3dGVMcUtDXSlQbi5Ba2M0XlNAMD41JkIzWGMlKUt7PkRmaS5sSmFHLktXKSh3fHIiNnxOTCRzRntseSwsKlYqNE47RSprTWojYVt5SUJfOG1MRjlHT1gjeCslbWRHLklnSEVRK3AvL1IuP1ImQ3lIInVFLks0LHVifFMwaTpHQ3ExMl5Efj8hd29DMDJQVHdFTlBR''@;'; put 'put ''I2BSU3A8eGJzLEozVDJlI0lPXlkjWlNHVU0pUmgoSVtKJVEuZX5vayxXTldVZDFiVktdNHp7Y15hPllAKyp5fFU9fUhxLjJtfWRCPnxTSUdFSFs8M218aUc+ejVPTSlSVWxbLEU6ekxUYjxsUFVFJFRQcDJKNntaW0h2aXAkRS4xTVY+IyMmTTslQj4vZVE2eFlxOShyQWJTbT0+UGtTT2AuSV5r''@;'; put 'put ''eyU6c1dSPVo6fD0hbUlZc30/ZX41KF9PKmZ3WTJvcFJZfHpue1ptUj45OWdudkYiJnIkendvfTImRlkkUUcmQXBNNlJiQms3MV1acVNCXVgzIVAjUCk0Ljp1JXdAOiRnQEpdbUtzOSVlPW0+WTBRSWNmJiZWfDhCIyJ3N3w9Xjl+Y3JNLiVAaTx2eUZvR3heK1FNRm9UNkV7Wlk3ck1+KVJuOEEr''@;'; put 'put ''b3hwK1UoSXNnbzU8RmY8Z3pyNjssYnhQOlBNVi9MKVJZaTMyYHk/SWxqW31gUDFvKUo5PCo5ImBTT18vYyRPPSF6bTE/eXxJWlVoZVhrU0VZX3gyaE55b1QyW3EzZU84aWUvUCh7bTsuPXJzYGshXjJYSjB8Uzp6RjY5JEooN148am4uTT5EVG1xenQiIkRodHg5Jn1hMFRsfTYlUTRDTX0xSTF5''@;'; put 'put ''SkQyYUBBS1hHcUEzbTFYLFdiYlJ+VSp2ez8/QEwrMUVLMTE8YnhvKFghIl41STBgTU1FMT1haXVjVC8pciRnaEhlOXo6dnxXKkVJYUskeVJeKF1yOV9KaHMiTjNxaEdoXzZAQ0Q4ezM8NUJjelc4ITklbDYhe0p0YWRSRkN1MDJubV9wOjM9RF5xfjlNcndzQCxoWkVxRG5+QDZSKHJVK04+cjZU''@;'; put 'put ''WThwMzNUM2JbJTsuWW9jOy9qW1l9Nl1iTi4vVV4hWSlWLz02TCsqUzV9JHBCaD87U05QLHk7P0Zwbmw7OGMlKkFQM3dyOCM+eWxCeSx+emA/KWJAU080P3FmL1cxLmpTTGtbV1lBYXBOQ0FiN0pUS3U1PTlhfl03OzNZfnw9ODxLckVNfFtPO2cuWXtyR2UyQH5dPHJiOiFJcl9sWC4vI0FaNioq''@;'; put 'put ''eylnXi9GV2U5L2JjIVBaMkhqRnZ+SSNIaWEjMWUjdXNOIkM2ey5mIlcjPlhsJEIxRlckfnQsZjR9UG5LZGZSbjImM2g4VmZoOF1rTUcoXXQ8OUk7SCVDMV1wTntEU21hWitXOjg2ZEJLdChlalBMa3Z1WHJ4ZHI0MmwvLn54QjlNcHg/OkkxVChEUTRacE5oXTgleFhzOXxAWV1fKlBkJCFCY0BS''@;'; put 'put ''QHNlLGc9dXUwfUM7Z0ckK2xEKzdSezlwVV56PHtbYzA9RzlmT059azpkQFklS3RLI2RgbFlhKWN9Ymh+WXtbJGRRJHksISZJITBrVy5PZFFMZFMqSjdKJj8+MXkpYz1zI11CXXglaGhCcH5TMHxQOFdiUV5tZGMvXTshZmtNeSQjdnFFRiRPSEFHJmxda093WU9DTSVxWWVCSEBoVTBMYEI+XWFN''@;'; put 'put ''aWp7PEspNWRXcyZkJVY4U09geTFobktufXVqIyxuKyN+alpSaDpgQ1YvZGtpYXZGSEtaT3ZQP1MkKyZEWjE8TGF+VmFESTJ8a3xgb2hhW1BhYzh8ej5+ZlFNeE8hbn12TF57MyltZD9zTi5idUs0WCtYTEwoQkhpaEshTzVWRHRZYjIhSTA5WVVaK18wXUJ5XnY9VSgyYGlNPmVfdTlAQllBU3t8''@;'; put 'put ''V1g+PV81cEtoP1NqfGpvYV1DNExvMFhkIS8mIT5ZV2pKU14/dkUobDBXNj55SF5ienNILy89aCM1OjYka15HW0JVLm1FVlMwL1soNm8/OE9wfT0pfT93ezF1fDpHcVE8QDYqY3xrTW1CUT5EZGFVcEM5RWtATm1fMDtEc1A6WykjdCN0diRwRk4uPGZDemcxSTlYbD0+PGwxXlZvfmhPIzImUnBK''@;'; put 'put ''WyRCejJmcisqfllJeERMZ31kUWlzRyR8ImF9Y25+R048VXxMNGlFPWUoQyUkQUVrVEJIQzt2bzh+JF5aJV55Jklpaik/R0RUdDh+dnx7I1ptbmQrQWN+K3Q4fU5XMEo6RiF+fU5tX3w8ZlNQLzUjYTtZI0ZHN11uPkFtalBIc3V1RXhjdyNnKU9qSSN7Mj9fcFA5OzE2X1F+MFZBI3lpMn14PEBX''@;'; put 'put ''Zn5jVm88PWUyUjRfdlNLfEl4U1JDUygmTTIsV3s5L302a2NjLHNWM1N8ZnQuV0FuKClOO2pPe2E5WUdGT3ZPKkFrJmN3NUhlIiYlZXhpaEVIRUttWTN+YmUyMkg5W1NRUmRtXixyZj0rWVFVR21va0ZdWzVGZ3hvUiRSWT09Xy5bNXVzQns9eCNAMDJjYWBndlVdXnU6YVc1PDU+S2Zgckt+aHBP''@;'; put 'put ''Wl0kWiVlJkc2UVBAIWtjKkJZWn5HL01AMipJb1ZDYEIuYHp4IVVGeEdyWmkvZDQuNGxnbHk6MXBXfHJ+V21lMFU3T1MvZWclUGk7RlMqcTlERVdzYH4wKUZ2JUVFWXRNWERBTCsyaVl8THMlMjg9ODYyZVM5aWd3UD5OLjBoUSx3OWpIdHY1Oj9xekBSZzZ2OHFLVTopWl16WHx4Qlg0JT4zaFg9''@;'; put 'put ''VEJqUVFkRDtTV3U5ZFU+czRzKG4wZXpvT1IpXWElODlUW3AoWm0scHB6R3FxcUkmdnJ0d1hqaV99R0k8JG54UTwmK2xEXl01KGgjJWMjTTUoSCMufm1II0xFZiRdWzJyYHlXV29gTHd2fXZzbn01SCJafm1VPnBhWlhlKH1bcXVYcyROa2Fufk9TPmYpZ2lvRDQjXU1uSGY/YWFqd2s0S1V8OTs3''@;'; put 'put ''YjVBbig5cnk6VkI1bHA7M28uLy44S3ZBclN4fncpa2tlQTFycyohL1VaRUl+XnA1cntQZFEoJTwseyxneD9TV2tnYkMhWDt2PSlqLi9fe2s+eXIoP3t3a2FMfi5CRnd6ZGMkRURdaSVuc2hXNnVWNC54I1U0NTI0T0NiQnRwcFRVNFJ2b3BzQ2hke3w4V09RfitAUjo6c3F8VyxzVDA+QEtbPmlb''@;'; put 'put ''Um8jJlI+Zm89OmRwZXNSXzI/OTc5Yj05PlJUcXQyXi4ufmA7MkteP3daW2lgSWJqVmhEOnJVX1NGSz4ha3B1ZlthTmhqak1SNGMhJkYvVXh3TkguaCZEdVBBX0QpX0VONUNKMCxzL3pBKDpdR2wpIXYyJkRBV2VxNEBUOHdUc0p1OmMue2pgJk1VJCRpMFF0KnIoY09BbTEoOmt+PjZOKH5nQTlL''@;'; put 'put ''cnM5Ti4uZmJ8QThoN3pdNjM7OUp6biZuWT1BLF1bN203MGVDU1JIcjhoYyJKdC5EaDs0L0ZAKDdsQXNVJSpKdj5tRiMhNiF8fFN9aDNrZk4wVzVxJWR4X2BOZnpMa1BpZGxobnx4JU5dR3dHZi5weFsiSTxjREdyJDl9TlRrcipfKl1oOmk+eFhJX3tvMjhxbD55PmM7NSxtLDI1LktsW25NV2gy''@;'; put 'put ''S15oVlVmNmNzYGU5TXJTMmRpdmVMTXYvPDJIMH1Pd09ZZHwwLm5pN2lPVytQZGlZbl1+aCMzJVMkOkZmRCQwXnhQTVNIa2Z4I3wkSTNHTFdAfmU6Xl42Nj97JilLLlM+eF9MI3pFTmpzSyJeaHdVLCwhc3tzKllVQVJBKVAqVUJZWj4wbDxaey5td0pPXjlhYlR7biQ4YTxCOT5+RnBjS01uVilz''@;'; put 'put ''VF1XbFNBeHh2UEdpNGdHRWFLSChCJCkuZioyciV1YjV7XVAvVy9NMTRzRzJEeWJgY0RWLHBOLmpWLk5sTWlibDxPI0lkKSVwUG1DOU9gZkduUFFmUDVWY0V8P0pXUVkiM2FRQSpqPXk3LnU0O0tQPHhHKiZDYj41On5UaDtwNiwqLCFkVE9VSmFbfEh4VElQSmZkYCIhZX5kUTcleloocURZb3JX''@;'; put 'put ''QlpiI31PW1BoSigwZlI7eGtndEdhdUxnJGJpT3hobjBRKmwpKGhBYmlPeGg5cSExLjpOUFJpVE5+KDRjc3dXZn5LT1FYZ0NMWGdOe1swbywlaj5SRDQhXn4zMEJfQiVGcD8vfTw+ZiZNLE9vKDFTZTsvfi9QVGAsR14uTWUkdUY+Iy53XmB0U0RtT09bd2BbOGx6filzfjdhNy4mRW1bL2x7KktT''@;'; put 'put ''KFN6W2xRcmxNLGVfJikqKDtgY3paJjo/OyV5PHh+fVRzUiFMWDpaQDk8ZjJYak9+N2osNjd3bzBfUnVENjlzJjYmKzI4OHV5MSw3cmxacSFDVU8oRzd8RXssYzFYZUBSSnVCSG90X04lTn4hJSwjcjl+NV1YND9tSHR+c31lYF5+aHhKOm54Pm14dTB4RytTPDRlYSI0LFQpY2ozWzhGYXIuUSo8''@;'; put 'put ''XV9LUXhCI3hlOzA/KGNZRUtqIyRGczZ7TnMjOlhQLEI8ZklkQHY/Z3NIcCVIJHNBOkNBWHVXViNHQU9BPGk9bnI7bC8oX1luPm48PFo9eztsL3V8MnI4N21wSWYwfCU5SUwmZVMpUnYxdml8KF9maVplcD1fKko8X1QoSWNLOSElUVQ5OXZ6QDhKMzZyYz8pYWB3Rn5VcVJqVz05VmdEN19tQlFA''@;'; put 'put ''ITIka0x8VzRPMlJ6KngzSVUqL3p7NXIzXTpgSSwwcixlOyYjen5wMS8vVXg9W296YHI2RjV7R3lmKns4XlNJeWYwJGl1KEx1W3hFSjp3K1NleH1ZKjtlUzBQdUM/YXNQMUQxI2EpJlZjNmhYfldrQl5CU15ycHVkPEorRW4salZLejZqe28jdmFEQGJRVXlzaDl5fGZ9bmtAcjs9ZFJUflhWfk1T''@;'; put 'put ''T2xoMjxVJDtZQltMbDRSUVBIIl1pOGZEKS9ibXt1cjo6a2hkXlY1WXteRzR0TD5tITdJK1V4SV53aiplMUQpXTBENVQve3AofU4rLG82fmdmYGRvVy5VbiY+TW96MCwmK2pVYGh0PiR1PzFzWnVmbytvfTNdM0E5Jjslc2w3Ql84e2JdVnBIKmxOVygudk1uMEZUSUVGenIkZnYkY2lFSzd8UHMl''@;'; put 'put ''MkY5U2s1ZkFzWWtWNX5AeTZJLElbRitGLisqMSNAazMxeWVTLGk6P1Q7SnE7Lz8uP3t0OnxNbkg0On56aEJaT2pwOEcmSmtOUU4oQkNBfDAlYmc6PERbNmhDO34mRCsvOFAzdn1mPTteMnkpdiZoRWJJeHguSnsxOlpvPixIOUhmaDJDXm9+LFIsSmU7a35hbUxTRV8lIVlhPE1nMip+OXBoWVR2''@;'; put 'put ''Rm9sXk5AQVo2fFgueUJaX0h4Mk45X1V0ZXFTbnovIXJpYkhbYEdVOk1EJHFRQ112VV9+JlRLcVdSQ2FVU3MvU2BuQTU5dVJyJVI8e3k0aWdlT3k6KGBQJjZNVj9BOmMjVlM8aiNYYi9SY1U5SDo0JSZbcTs5VVkqZT0pKTs8UlJJdCk6bUBzc0JLUm12YDY1NV5ZRjdaIn1zIWs9XnNCX11IZXpZ''@;'; put 'put ''VEtVTTBuTTVNdGQ9QnMiRn05T1s9YVhITiMiZER4NkBVZnohQj1NS2FmT3pAb3h8YmJSMyowbzZZOGt+bT8hNlBnW2hXaVZ2T1YhQnk8RlpYPzAwcm8hM0ZwYiNPQlNZXjxqfTFqV1MqcjguSzJIbj5QMCxYXXN8TG00UXE9c01KbmdfYiVyQX1SazYpamloKUdiSzxLPDs8UW5aK31tcG5weysv''@;'; put 'put ''R358Zk4ySzx6MlJXejxPdGF7SkxmLzM4RjNwYGt7PEBJZFZ8VSg5LEVodF0sYzdWOWNfN0QwPkZbaDkoNitieUNkUVN+ZFVwLnskLDdfU3RvXWMuV2taKz17V2lxKn5JUC5AdGZUSVtBKTxARn1RRD1APj9xQmxhak8zXlBWU25meCRJPHlpRmJJZng4eHdUO21pP09wIj5qKUQ3ODd8OTFRci9k''@;'; put 'put ''IzVCX11CIjU7PmBxSWExTC4lQGxpWl1Re1tKQVdEaFpoOlNkLyxjJXsvZ0ZCeio6KW1JNixLNG47YEM6SCpTPF4oRmZjRyhVfjtqaWJZPmVsTl9ucGtiYG45KVQlOWhsOiZAcjFkN2VsUFJAMC5hTl0relY6WHxreGBMYEQsSUg9YHc8Zjp8JVR+P2l2NzU3T2RyKDsuMmg1RjpIMT5OW0pjZ10s''@;'; put 'put ''bVVUT01PbD09WV51eFImKFFjXVhEUkRaWnUqLzMjMElsXlBzSi9ZVSoxRHl7cklbNCVTaHIvNSwsMThyQH1efHlANSxddTBZOEhhSU8xI3ZNIVIjODwsSVc/dm4iWl1+VzptWnhVQiVDfjhAVl1UemExQktOXTNuWVVIMkJyMip8SjBicWtta0dOJWhobl4uNUQ+Kz48MDVtYXBdKGMjaHAzI2Vq''@;'; put 'put ''JV0kflRCa2c2PnI+ayUhKHVKW11KYGo8MDxqZDIqW019bzpROkY3WTBZeiZUQ1VOM28seWskTzRwTy5uNi8hVH5jJSRSTjNyeyZQJClsVDhgdzxjW0hRVS9EWiwpd3JOWzxRT1hJe0hNKTdhWi5qc101RC53OWxWJDR2ZU5CUE1vZ2l4X3g2fntZPlVONzRNeCRReCtncCklbWg/Q0A7fFNlZXxS''@;'; put 'put ''NTJgZnIzUiglPDh8N3YpQCMma35MQC9wUXUoT1Y0cHwiPT9nQ19zW21JRTs0VEhye3drO2ljalEhP2R+QEtxLDQieyY6JU15WVJ0ZEphfEVkfDpmODg4dTkwRHkke0dvYlhtZXA/JTtzWlIxU3A6IT0yLysodlZlWlszais3dGB5QlFTVXF6PD5FeV5rSSp5RlVQV0xqKEFDSFRZanJMKmRtSk9j''@;'; put 'put ''Tzh3KUY0MlZ6YEpgTHF7ZXBfIXNGbk1raC5zMWt5e09eRikpazRRLEk4Y15kQ3JRNFtYN2NxSU1KOTJMPDQuekg5LFI+UFA4SS9YdlJIYXpYPmglaF5SZjd9OlVadWttMW9PMU9JR3grJXczSWlPI2RyKE1ATnV9PS4vQkVUP2g2Zl5+PTtzfjp1TjpVYkpnYS5UJWtgWjwpOSl9bm4vVytRNGNK''@;'; put 'put ''U1o3VCFzdGI6TEVKfkxadzhSZVN5T0lvOW5AVCFrUVklIUV5WG8xOVBRXm1QZFtNOXIsMSttMzBpRks7dj5aZWhmVndJTE1dPD81KVM4IzhMKjsjN1NSfTEqX0MyUSNzbFAmYSpCa2lCTTxFdXRMZkx7bz9zQmNGRCRbbypeQ3A2KzUlUHA6IWksQHNSLkp+czZEa1VsJXFJM0ZAVkpPKG5eU3Bz''@;'; put 'put ''VWYqQi5nOVcxP315PldfaGBbVF1fe0xrITAhYV9EX1JoSTpxOzRMPyFMRGJXYSVyU0dbfWdKWnBwWjk2K3wubX5jZCgqVkpXJC5NV0p9NXU6PTVqYUZqVEBxamtXdXpdK1Y4b3AmQENLcT1YQjUmbWJ5KzkpbHpAeko4QXl7TWZ4OHZyeUp5TzxDXnJOSDw7cjddQjJLXm4hWWdSQnFjYU4mPDh8''@;'; put 'put ''SExvL1hQLHN3eW85SC4+ZzQ2ZzAke24sL2pFN2VYPXJieDZvNWY0bjc1VyMxc2VeeC4+cmkxYSk8UjJZVW0/X3VrNS55ZnpeKFB6N0N+MTpBNnI4O2ZadVhVfV0uMldFcW51cltxMGloeEUlKDYhalN+IkVEKjhGVlg5cj8rUDVVX1g1cU5oK1NWbzhKWDxwKVlvVjkwdVsoXXJSNTM3fG9VTS5a''@;'; put 'put ''X0ptM1tBWk1CPiR8LnN3fDllLCU3QF87SWdleE4pLl9acVVNTD4sUlZpZV1ZI2tTMkg1XkgjLjxlTH5SWXYhNV5DZE1LNSthZzJJaDUjVyZOYENTYywpSXM1JSEvdjp5LFJZaDB2djBYSCpFMUtOIWswLDJ3NGU5akgmTWx3QCpTIiYveylHeEBscXc8N1N1L1NWY2x2NXFeRkAwY1tbOG1SXWJD''@;'; put 'put ''QWY6Vz1sXnsxdyk9bmZzNCQybC4rdWlPNEApbSVVflYieWF4b3k4OFhQa1lnKnx0bFk3b0ZISCZQTm0pKypCdTxTXTd0KjBSYSlkXzdLYkpDJS5Pbz8lL3RNNjBCVWBvajc8UCRCRUI3bjMmTXhIVVpYMisrKkEuYVVXVy5pOXFpS3xBTV80MzlYUnhzI1pCckxiWGQlfH1FLE98althbVd6WG85''@;'; put 'put ''Zl4od3lALnBibkQ7UUZqNzwkeEI1dHdybm1YQVNbIUs2ZFVXJDN2Sn5OUmNFfCkzTFd5WFlKTzBSPGtRY1J8MX1EUyImWVYzW3Q6SGlKek1bUHwyYjs4Q09EUF5qK1t9KC9GOC4mWnJoa35ZckJYPF1MUlooNllxaHRdR1pzfT4pSGo7OHt3LiFjSV5feVElal5feVEvPz1IWjI3b0l7djUmMTYq''@;'; put 'put ''cHFENE4hZHplXjR4eUtRXjpqcVBuSndiK1F1KnZic0ZHVypHbzpVQlF1YT0iaTRUdiprc2d+OjRHcSEuYyRIREMkcDBpfGYycn4oXWBDZnd4QkZ7e3QxMGNwMXZEan0yVVF1NS5pdHVjWnJ3UXV0c2VpX0tqM285VTFPNFRVazpiSG58MTZOcF1mV2JZWjRQRGlEKFAxKDZJbENVdzpLM319YTc/''@;'; put 'put ''UE5ZPD8jMHJKWi9ZT0g2OnlCKEdkbkd0Yi9SMEZdRWRQMy8/YWNIQyJ7VVEiOE1yNCpCPGNNYTdhcVVUeWRqLmRWUHdRaHt3Xj90dVlUbnBzTmolWmg+Xk1udWNjUGhCc1decj5JTkQ0eD5QfWNwak1vektRZHt6KyIhaXNFSWY1UmxaI1IvZFUiM18yTUVQeUMvK2JWeS5KVCYsNDZvUixmTzdG''@;'; put 'put ''biEmYDpXcD5LTzhRYFd6MEtRVyNKc2hgQl8xPEZsIUlDPVZiOlppOzhoOWF2X2lvK1srMCNdZWxWXiJyakJaQHtxdSpRLiQ3YEZZSmVDcWZoYG0hSkQ7am8oS1pVKWx7LkZ1WVpXX2B2XUpLOTxOISViQDxYWThERkhxNX1UMjE5aHNKOl9jMk14MCtBdzFtTEE8cGlSW3ohSUBEWV8/bCEvaygq''@;'; put 'put ''aD5dYzRFYm0laV9lTWE5Zz00S1NsLFhEWTNHdXUrQlJFbkc4fSxfNkN8fD4/XW9ZVzQ0S2ZkXnldR1cyRFN9Zm4ucHE/Pj9rUy82L3coLHhlVVFBay5NdXg9TXZRY2V2UTowVX1NeGlONT4vXzJTJlp+OnFbUDQyfSZSL1Y+UTxrWERJYF5LMllnNk90QExlK1dpZGBqe05feysiPzd7MUEoN1J7''@;'; put 'put ''N2xMODhPdFVLQjpxXUV5M0FMU2pkSF9XNS56P28jZHpFV1VuSFpCV28yK3VpRk0vKHpWVGorKHpyNj5XREslbGRINDZ4L2RfbFtnQnRWKDcmNyU5XUQ9NlhXSmpfUHUjOys0MjpLZ109bVp8W21gSygvenlpI0MlK3I5blYzekZ0cTxQdT13fXpIcyZ1XX5XSS52Qms0aTZ3eCZnYSN6Z2pfOC5I''@;'; put 'put ''enpAaTNISk5vayY2KygpOH5kUDB+VSkpMm5PTztRUzJbb1dKbkoyZ0AkPkckdkUoZy5gOldPfiMwQGdaL11+TnFUVW97R0wzT01VQFUuUm8jSGh1SGolOzoybU1ASldJbGlwS2REX1k3YlQuL11sJUtvPyJfSUxIYDJzNktTaGQvR29JQjt7e29GajdVPyZRPGRfenJuVjJMdyFlM2hecn5NaHNV''@;'; put 'put ''bUx7TGdeaXVIdjlgSGAuKDd3Nyg5ZmByJUsrbURWVV1ZeV5oVXosTlNYKGw5NUxOP2cpN306MDUhb3I9Ui5ZM2kzRTVkOjlWPyZKLzRGYWdVPUdMZ1BdXjIvQStwKHh2RE85RyksWU9ZIzlHayVnZlF0eThaJX1EOW08NW57WlZIezkrXXBPfnhlfDtyOTNIc3ohdzZrYGpCaHtOODw0Q2cpdjEq''@;'; put 'put ''eHJpQCZQUDlXQmh4OnBWPyhQWShCO1hFNChDSz82cnBGezRAYCZLPVghKCxmMCNve29OZUY6YUA7MmV9UklYez8yal5SU3xpM1o7eFlZMkZxTnpsfFlNdElhRXJVa0NhLzBFeTR3VDlAK3FqJUE8bENhX1VvQl5JdF4pKEJHZWFyPVFEND8wJH13aWAvV3BiP1VRZ10yNiJwMytsTmgwRz13I3M2''@;'; put 'put ''cyNGdzFec19HMV1+bmF5KVgzIzV0RW46OEEqQmNzMlU2cG9AZj9yeSU6fDRLaXU6RW9VKUNdMFtvT2JKUWl8fTw+MmJMXU1fZFAwfj5UPzlJeD9tT3FjZ3RZdGo+OGd4MClhOUY+MGlEI0JfQXFlWGs8Wz1hK1U8SiNTSnFacDZ+NUU9dyF2YX1YSXhYRFZRdTVzUV9TISx0TDwyYz5ZQVp4IUk9''@;'; put 'put ''ViY3QXsxXWpXVllleVIxaFlzPk4jSVtQfmMyRl13JV1PNmc/T3VsL3pqenx6I3tOUTd9dT5UIzhsNTcicXo1bGFyY2c+fT0rQyU/fHoje0ZQJi84RmhdampFM0FTa1grNkNWajpSKl1XMD93PDEwZXY7MFJsPilzNTh+QHlFUV96QTpqNTBiZHJoMS93Iis1QiJbTl93MkRrQFQrcHdOJl9YQDtD''@;'; put 'put ''Yn5jc2AyRFomXz0pT0JMVlRMO0NPVV5FbldLfXlkO31XQGp3SEpeRS8kZnNpeiN9VmpiY2h9Onx8cz5kYEcrfTRDMz9CNmtvMW1+K0olbjEwP2VpR19VJSthRChJMyp6fDIoP3poZXc8KiRibX13ZmFOMS5jfn5hNDN3VVNWSHtifWBKKVI1TT4hO0V6Kk17XV84cVg3NXRzUiEkYHpwJXQob15L''@;'; put 'put ''dUx+S3QmLmFPMH5CO3c2SiVpXzgjYndhOT5qPyUlZUx+QFgzQ2daTH55NSFvel0jaDY6flBzJWMrPTxMQ2g5WWw+VWFIVn1fZFApTTAsc1k0Y3V1NS5+OjpJUzJAfH5mbEVKcyVuMT08YkNoOWslVXkkeVV9dCJxUUQ1VX06dnFRMndJMm9Ae3NIN0ViZV1dT297R2Joa2UwLn5jNFFTXVtSTEk3''@;'; put 'put ''LGlINy5aYjl9bCVwdWUwfjVXNHY2W1JMdDd8SitKcD4+PGQwQ15Sdkw7S0Z5dURkWlh3SXhAVzImcmVdcE5qS1hZfjpyJSs7NlJ9PiU7UH0qX3RCaXJ8cihnaUkxa21LWWkyJDNDXkBYV2YweHZRUDxde240KHFYfH5HTiReTXJVeS9zIn5YaCJoTlRMJEh4QE10amAzaEBsM0R2RW5Bb0ZlLEoj''@;'; put 'put ''IVYwOEk9aXtoIyRzVDcvQWRpekBVI1Y8TClbQmo5SipjTEopI2l0MD5pWyJZPm0ibkpJI0EmJUVFQHlKMUVRL2Rjc1UrT14zfHRweiQyIylAYEc7aUBoOWBeNjo4R0BDXToyVng5LyF4MD82cXg9UlBiKiVaI0ppJmQzUENRN19KNHx3IUVYUzB4S2ttJWcxW0I7Y1BlYlJta19ldzk2eTFLT1d3''@;'; put 'put ''OW1tRGw2TCg1Y0wsQEgmNUJbUlFeYjQ8Xl1PcURqPmBIXyR+PFZddU9ATkB7fnkzbiYlMylgP3wmX1IrY3s8VkNlaTNuSj1PUXFhJF83Y0h1czQ5YDZSSHBnN29VfCY3JTdVbFssXy9IP0ZDVGJ+aUFTTmFBU0IyfVR5VF8yJUYwPihKNUxnRHZaPXR+UUZrIU1tVld5bmw9Q182fiV0S1lSY3d9''@;'; put 'put ''b181dF0/MSRVU0RMQVBbJDZMKHJRfFo9dFQqbnN3IkgpdDVOPTxlfGlSUHYvNzBFUy46LjV3SUR8aVNnWlF7K2Q1Tytfblc4fUZjN3JOQHM7SC99Ti5MQ298Ok9hLjpJI3YvWntBc21qYktFKCpVcUd2aWFzajFkbWxpa1tzdUchcDxLS0dGI1JCMlBzW104I1hnfXlWNDY+ZlZldWM7I3ZZV28z''@;'; put 'put ''Vzc8K0IoJnZMPS5TOjN0az5nbzl5a0xKOHAmJTlqb1BGMl8vbnZKOT9dP2VFWWwoQiM8eCR4OlM8NVNsdngsak0vLnt2PHtkOTgpVmJUZ0dOM3Q7TitwTTN8cV45W1hqMUAucnFMeDZ6QEhOR1tCMVYyUlduLHpvOzNXT2BtQ2I/WkY/IzR9c0RkbWdXSio0N0M0a1c+NkViPUVJODE1M0V9ai5e''@;'; put 'put ''fHx3aV80US9DZn5SR00pUmpDa1FTfX4/JiNdK3xmV0xpRk9NdCM8cV5NX2FWaVtLQzpwWDdYIz5hQEJWaXhTS19heWE8dkdMbyZtZENoelV3WnttcmE0UX0oXWgpMGVROWx7fW5ELjVdd0dLWzolW3JRcT5GNjlxOVgoQi8kZVokVFkubl9LUDlALzNPZlZqN3F8KVNZYSlsUGEjSGk/OnlpJWRR''@;'; put 'put ''MWA4fitwa0d2TTFDensqY00yYSUuOylSJkYrNC44b1JHRjRfRSU4TjtYR19nRzsmSFtdaWh4d2lxbn0hYSNUTTBqTipQR25QMGJ+Xj9qZV58RW9gKSg5fEV5IlNwZzQzUz5+W0BuIm1kdSYsKDlDT0IrcEwsc245cCI0bywzUF0ifjFZOyhib3NRSDJUYlJIYnNKR1YqXnN8PjNeTlVvdnB3OXtH''@;'; put 'put ''S3NXW1csXzVpcnc5SiNEP2EuUzhfUSQidW5sS2wzYHElV0YxS1QxK0QpNng+JGxMQ0giQkJHel5sOn49P2EzPm9WO1lteUouMTJyU25OfWhHQHVvRmEoTGhCPFJKJjBZUz5kK34hLz18PHJ3NkxxYUF9LkA6T0J8O25mJVBBW0BTPzBkfWAoZkdaUSJxNm4jOyxQcWZqSVQqL3xWV2csI315bnZ9''@;'; put 'put ''fSVtRD1UKUBuQEwkcCZ4QUIjSChyY2JLSXx7NEFXPH1aOHI2TDBwV0VtRjIvZGk3dEY0fCVjNGxQXUNOYDg2UGQxXnRCVGhoJUt+X0ooaSNaeXxkbVN0cShfaHdvKDw6TUx1TTdKNyQreCp7djhKPHtyK2drL2AkRGlRaDZUQnBFU2Q3YjNWI2MuVk5+ZHBGRzBJXywmMXJUXywmS3wjQk4+eXJU''@;'; put 'put ''fiY0cjBiNGphYlQsOVhTSDg7RnF1PnQ5U1ZDJjJGODJsIz99fSl4QTlMWGMoYXM5eH59d0YuMSZJaX0+WiFwdE5ePChvK09oaERrN2wkL2g5LnNiWChwPE97WyljJUUuOUl+c1pMbmtqWEtnbDxDSUU5bStsLGtueW9YTSRReDN9S3M0Nys/JiNFT1RwMDFNV11tZUpNZFpoSlJoaCs5e2x8I31s''@;'; put 'put ''XjBGfDN+KWxuNXc2emBXMUp8ciJtPVYmN0ZSdHx0NDRtYDtuRDYjRH4/KEpqdGFCcDgqYWJCO3tHbFA9LnEiWC9HbTRRIkFDeXJYZFd2cFordm07VS85O3hOXnkoa10zdD1Fe3YmaWUpOzEsPkJSIWs1KzlNcU46L2c5bW89IkJGLj9hcHNTc1B8aj9ZJS9KTWlFR3d9dGpeI3hgdmBmY3N9az5J''@;'; put 'put ''WixPMTdxYTVxKD59L2Z6O1ZHPmt6Pzo+cTlPaCJbXV9tRyhoS05XQ0xmLkdAUTF3OTU2aEJDQ04iUjRfOyVWI3ZhdkxPYjNve0ooWll9ZEZLPmQoc2NHey5AOCY6KEhvN29VSEs+ZC9hQWYjZjZAZm9sZEFjYSNCN1AxYXNqLj84eSpoQlkjbzlJI3taZTdSa35zIWR8cyFgUTs5YSpWMX1bYVVw''@;'; put 'put ''I355VlZVVCshckYuXXAkaG4wJD1GLn0/OSpGNyRIJnluYFImO3JCV0FTbkA/WTp4emxvaCEjVWVaVigvNGxSS09GNTNSS0g6N1lNVDFhNWpTXyp2dltoKj0qKHp2eVIxeTdoO29zR0olcHx4OCQ6M2pkI3hVfkp2Q1ArMjo6QVZrZHJ+QDNwZEIiJSxzUndmIkpMPlRMXndbbT1QLEAlKiIreyZf''@;'; put 'put ''KiIreFtdR1toYDd7KH1zWj0zVGxFbS9lJFAzSzhyeEIoWG5QSjc8Mi8wMGVEOmJhd2sqX3x2OEo8aFZ6U3A6QnszNyhxTV1xdUs7U2k2bXRSfllmPXYqPypyKCp2KXhOfGkuOCw1OlMqV1NaSnh1SltVOmhgZGhTYk1ESVNeUFcsVSw4U3Jjb1hJajl8fFM9YktfVjpHUTE2YWs1KU1zbjR+X3RF''@;'; put 'put ''RGVjWkNAOCgvImRyT0RjRnJubmx9OGxVbWAmRyZuKlBVcyR0bX1CTEIyYDxeayokKmx9WjomVEU7TzF3Uk9tZ29RJF4lPmEyQCs3ZktXbj8uJHl0RVc0XzpoJW0wRz0yUSZQU1Npc30qQmI3QHttZDc/YTlnKnp0SF9mIlk9IUQ6QnEiaSQ2Um9FeUddISVbZDlTLlZPOm9tM01Vb0FaYG12OF9V''@;'; put 'put ''dWtjUFBVckRHR0krP3ZgalZydlY9Lip6S2lxTjVibzpeTFhxRWZdU09deix8cUJBfDg6aitLVlNTZilJPD1PKzRMdHk6Uy9vXSFsImgwfTtwa2R0Kld4ZFA0a2JfUTJzbz9GZ18sNCokKD5sODRlfUg2fT1OaXViJF4vSEdtYCJ2ez5iOD1jLGo+V340QVtFWiVIU2o3JWNwen0laltrcz08bmZf''@;'; put 'put ''Vm51SWFzInBoSHJ4JHFwP1VbNER4MyYvRHNCNzMubihTPXVFSkhneWtEIkFnPnx8XXVMKVQxPEJ6V3ZRbSgqdV5+el1BcU5lQjJaZ287Z0N3KXkhcWZQc1NgQnBufnNIX0RhSDUvJSx2R043XX0+Xj5RLyw4Xnx0QSZCPl5lSz55dUBfaDQxPiJtSGdZOENYOTwqSUl9UyNOJXBiSltaflZNen13''@;'; put 'put ''Xzsyd29SWmVZNnd5QDosaUdsYTI+bVFhdH0rUDNUfiFqNUZFZWhraGVsZEI/bGxda2N1dlY3VEZWYEkiKz1+OVk7VjN7S0czTDc9JGh6Ij9+K1ZDRntER3orVGFWX0BfQmFgbSxmRDVAdyNxaH49Y1lDPGpvcVF+PWwqO3t4NCZzZSRJI3QyS0hhX0I7L09hYmEjY1siX1t5JHZ2YWRSYmxHLmdo''@;'; put 'put ''O3VsVzlhO2A+P3hFKV1UMUlQbGc7WWc4YGc9SjVISWRbfnRIfEJXOWVhIX5FUDxJR3Q3YElDfEZrIVFWdTghKXI5NHFsJDIqVDt4RjpHRFF+dXVMS288emMqLFleNE81cmRmZWR1XnV2X0o7Mm06RzRGSm5DejleaGEvdixYSGQiPjJgNC85WGVYPlRyPUcpbkVZaHVUYHlqV3p9e1B2aj1qVEJ0''@;'; put 'put ''am17JXlIVzJ7cmBrPj8pMTtbITtnL11Oc2Z9UjRpOH1eejY/OnleO1VYMWJzLkRxWnA2LjRrenplT2J2U0hwbzFCLl1lXX43e3I0NHlaeW9wYzpkZXd9dkJfRm4rblIrVzh+ZkJKT082bjooQGIjUGU6K0Ymaz5WNi9GPndJTV9zNmk/ZUI5JmlMc0tmWFNkRlhqTS99OFtWJSEpaig0QXMrfllv''@;'; put 'put ''cFdENHAsSXhwcTk8OGd7IWY5I3QpSiZ6Ml1TVHZKaGZsYyEhZWhye2o1aXxyfmErJi5nTVFzOFcvMll+dDxnNWh4PlpsW1tTUF9PaH1iMlleayZQKWpFbDhHT0F8NkUuYCZ3VG0jIjBhI2Ivb3hNZlpOdkxpajcpdmB0eSRPSj16P0xaVSxCJlpsVXNbYU5WUllCI2srT1JlZDE2XnE4b2RpPWB9''@;'; put 'put ''XWRXQ0RCa35EbCt+XmUkbmZSX2Frb00mY3FyQVNpN20xNFd1eGlaWlJmMldIPjBGfCVpTDZqOSVlcHxRS1QsXUgxT1N0dE4vXWlUUyFramhVTSUyO1NyNGchbktHaCRIM1A6YDNRQjpYP296djgyeHBSQiUqI3tXVU0hZm0rT00vZFgmfj8hdlMzP0lLTCRwPEFxW1NJRjNqbF50PElTSWQ8KzlQ''@;'; put 'put ''UWpKTDhDVUBRM1ldQld2OlpLNlk1SEwkRUtmPVhCL3syV3JoR1t1PD1OWE4wS0MxU3I0L1tZO21CR2JzcUYwfFMmcVs3elBpbnQ8I3ZDTTJBfnEvPFRWaDs8OHYsXThIQStveF4rcTsoak0qM0hEQDtSfjI4bVhmLDh7d1MoXXhwQG16dkB+em9dPVhzTnkuZ3Z7Vnlva3JnbkQxfG9NLDJVZSk4''@;'; put 'put ''aUw2ej1JUE1HZnRHK1ZtMHc3dkAvXnU/LHFZRFtGNVMlKUJbJG88WWU5SG9wTk9JUGtqOGYoUDlxenNFZis+dj0yKm8pIWlvZmA1XUs8Y2BCVHxaMVBNMEtHIXFNd3lUbT5gUURDSE49Sk9HJj9tZGk7IUE5L2BMMltgUiYvSSRkbGVWRHY8Z3Y3anRmVXR9TTlgZ14sOHh+eHFreUFLdGtBfUxp''@;'; put 'put ''Zz5pbj00Ylc9bHI5SkhPfjg4THwyciVYLDsoa3NfOi8uU3dzaSMjRTZoL3Y1N25CZ0NKUjBdKi95ckI4bWFPOD1tTmJKKixrOmFoOTQqM2U/M0NTPDR1MU5NNS9sVmM0ejxCKnJ3N1J4b3pbbnpuNEBNXVZLTk1LdkhZX2F3d1d4c0FrQVNQb0VnLCh9VyZWUz9fWT1qJXdWKnQxb3dtOlZdWFNZ''@;'; put 'put ''PiwzYkpBP3wpNnVoJHQqY3U7U1Z8Z1diWT10Wmlpc3oxVyhfUHN+VldFSjchQDMjZy5wLDheLC9wMj9QST5zMnd+fjppai5jMERJfm1ieG1XRjRHPVhDVXQrdDxaNW5eJUBqTEFYXStiX0k9aWh4bzsrdlhhOkhZMER6eWlIJSoiTH5HWFRQUEdHR2IzRzA7TypINDZPYSVTI3V0VVYkVjNNJkFZ''@;'; put 'put ''N2I2bGkiJTcvTkxsbFVmK280UixZLE5sTjl7MkE2XUhTKGxzQWxuOmMhNnYrcCU5ZSMpWExMSUVoeFVwZFZPM1JpK1FWMiplREh3TV04MUJqWixUWkZaQjVDL0xAfCZOQGMlWjl0WW1WcT9kX3ImZHA3SGA7YyRgKTcxPyk1alshNXV9bTRuWzZ0eEwrTCZKJC5RQjVVI1ZINGhMekV4fmdJOUVe''@;'; put 'put ''Tkt9eHssfC4oNStzWiFGdDppey9RVl8rT1UvYklzXUtiL3giT3FsX2VKYEpgSTVhdy5Ha3N+RWdVK2VgRVouVjR5KlY0TXZwM3RqeCNyRyV9dnhLLjEvUEhtZCohRWFad0RhViE9U2EhUEx9NCpLY15SWil+c1Y0ZmIrInY0OXBPSDYicCxtVDNUMEYvYSZXIXh5YlE2KG9+ISguKHVhVjVlJWg4''@;'; put 'put ''TGgpaTlpKHMyQllfQSZfbzJGZXpjNGQ9dyNucGwzIiRMYl5mbFp4YHN9YjRYOD1pL2psJXdtezNyVTw7Mj5bZl16Nj5iOkVALFVJYDxWejV3fmpLenxrMy5denJddSVgPXwyXj43MnUodkZyXSlyKktMaEsoNCpfcHBzVzlUV114fXNrSDV0eU1UfS5bJXgvLjhoeSF3clVWXTNqMCFlKWhddzU3''@;'; put 'put ''VlBeMjIjZGFfdntrR3hhc2lLSDE5OV0uX0djJkw2ZyZmZ2RebD1jTlkpfjsuIjdvVTliP1hhWCJ1UDtjXjBEZy8pSlhXb3h9YiEjOjZJMl4lXlBIaklIbXQhQGh1XnxrIVRfPSpZd2FvZnkrcDljIUBjWjg3O2x8VkYjeWN8eHd7ZGhNX1NpUCErRDRDVmFTOGx3WUNzfW41KXd2OF5vRUtaPTxK''@;'; put 'put ''JCtMJiFwVXFpdyNBdGpRVz06eTBiI1diMzFCa1dUS3tpeHxQVE0zckExRl1hS2I8enk+W3h7KWZ8fTQxZWBqUzYzJV9oW1spUE4lfm5VN0FhRmEmVT5+cVVdW1Y5TXZaKGB3IW1VT1p9SFlmeGNwQGJJVUMmVTJMbUxoUC9fPXwjX1AjJkF7fnd9Ri8rI0RvdEp5Q0dJIm9vbTkidkNoW2ZxNCIk''@;'; put 'put ''I0p5KE5KWXREeXxWeV4ucS8yTGtyMnFWdCt6MVo2SXBHdmM+aVV3el9wWylWVmw5XzM+bDg8S1IvJFtVZGlPeDpNYzdiQmM4Nzl2JjpMe3Q1WlRLNz1jXUI4I19lczR6fn5FX19FOEB3MzhnZVNmKFdMXUhldS8xIT1uS31FOHN3TWpwKWtBeSF4NyxCSGojaU5veSFsZkhCeSFeMThTNzhwek5b''@;'; put 'put ''SGVFSHI/SGUmRiRLdjBHelIrQHVKXkhqYEFeRjZQbExhWXhSOXFAe21keD9zZnUvfF1PeWVHXSxpNHkie2p4Y0lAc2Y4SC45c2w9Sk8rOEBUcWlldUBycCxaJiJkZURHMUIsMV9UcH0lN3dxQ2VtQVJjaGdheS5EYCRpM3xCL3xjX1lzSzohTHl8THt9c3pyXSlSNyl+SF88VkhWS2BKYCVBLCVb''@;'; put 'put ''YjJ5dHxjX3BwMWBEJFRxfTRYWlViWnxmTjlwI2NKeEtWUCJkKjs1fSpSMGtdISRCSllCY0EiXiNUczgkKEptMndOfk9DTzZTeSpvbXEsMShlOCZ+NXF5Py5nfit2ZGd5XyRgSGA8cXBkdEZ4TyNgUFQmRUshfmdLNW1wV1RvO3NIbEhpd1VwJGZuXU9FZDQrO0djb3Rpb2tLeGx4Xl9bNTRuJl9P''@;'; put 'put ''eTV8KFpsRTdZN040fXRTfUZTNyNuVlQvcXFJfl1XUyJbI3dRYlQ0Ym8sLGB2XVFpUHVnfUM9d3s7fGRrfmE3ZjdWTUwzOH5hXXE8M0QxYnwzWmJzRmRDfXlDJT0rZztsWSMoSEVsZTVgJiY4ZCFRQio6Pkd7dDExdjgzekl6UWM/djdAVmNrLHxKIUAmRjREKChFbk0wJkx7WElNMGpmelh3Xjkw''@;'; put 'put ''MHkiJHldZHQqQEpbQnt7WSxFMzgwQmN0SS5ockhoZStDVj9jYWdRYCQqVyJCVlBMUDBPMFVOYzRefE9zJVR0XiRTdFgiKkx7Tyo/V3diPyQiTSVPQSxteShOMVk5LGp9NFlNSE9VWkwsVEdwJVopOTNaTjRlNXZgSnQqV0YlPT1kbFZGRTs3bWxzenBKUmRSWzN6QUIud2JBaiopalNndkB4M3Ey''@;'; put 'put ''QG9FQl57YmVNUmchLGpBOzpnOENuQEpJbFRiKXloK2ZBeGIxZE4zUUI0OF52VlBpUXUobGpSR0AiMlpvSWF5MXgsPiM6Nl5mPHd+byZZUCo4RjI/cU4xciVieTFAbE5RL20zWyhJcXUiRGxkdzQxW3FvVDlVfT56emNVMXp1eFJXJjV6bnF8MlpCPXxpTmVdWmxZS3UzPmIybHAwWy5AfnJdelFg''@;'; put 'put ''ZEBvKTByVT5fUkJvRitFZStmOmF+T0JxPVBWVF82dXN+PjdNbXFfIjQyW0ZaT2Jva0svIiRFclBkKCRAam5vSltUTDRCPDp1cipjWEhWfUhATyVPYDJncmFjSCZjRUplbF9IJTdNWj82Ky8meV8qTF9jSjA/JmNHX2NKUSUpciZlPXwvUCNHOW5pJGJDN35IWGskVENddURqKTVVZGtNcj1fV01X''@;'; put 'put ''N1k4MnhxTS83SGYuTDxGdzIiaS9aJnFfVzQzTzdKeHFNL1h6UGtMX3tMInBNS3U2Ik5ZUylFKERlWylgM111VSNWJjMhMDtoSWRuXWA1d0owUVUoKW0qSzkoI1tqc2dGeHBZM3h5eSNhei9MaVQsYHdpJCJpeD0xbk9ne2dsPlQ+VSQ6OjJlb2FeWEQ5a0oyN0I2YlViXSQpcjVOSF5vbXpNUC9C''@;'; put 'put ''VncpNl5wPD1XbG9JJU85RllOIyYlOkBDPjNTNixZOlFzeTpCdVAlWFB0fjRNejQ7MyxmRGhUdW1VRlVfWTlNXjwmTUVKN3h5Zm86Vyl3NjVVbyxTWS9WVXxZQTNtJT9NfFp+SUJxPT9WVUVgUmNKPnp5PVM4PFA/VzxXN35OYlM9SkIwaDIwcXY5bWpiMj94ZlgrZCslPjQwWlNuTFpfaCpjXzVA''@;'; put 'put ''R35xbHY1I3wjYjdPZmxvWXQ3b2YyTGZub0tNeH1eWiUpOHxRJHp9VFlHK0YrWzhkNFVXZFN1emRZUmcpdGBWNGpDQnc4JjxVV2gxakxMbGFPISxSTj1uOVAhYSx6PEdNOjJUZV9fMW0zPmUqY19pUm19WT1JIy4iR1JTZ2V9d0A4bXwrMG11bU18bz5NfGBbcntgNSVKLHB7MTxdNDFlYik+Sy9P''@;'; put 'put ''XyRoeTVnSlFkKG9QViN+RUxFSmNVfilKK3h4UyUpNiNHTm1JT2VlVzdva0RRcTVOZDIvSUFBQThNQEBuQVVFUU83biYiYlgvWU1JYTI8ckRIKmh1T2YzYCozLEVOSm81RCVJZk1pQUFBQUFBQSRBJCQpb050cVBEZHNhMX5US2lXWSlycjN4QHFCQTJ0VF5SJGMsUmhxY1dHTktuZ3psQUg3YUph''@;'; put 'put ''RVFfV0JzJUlJT1B4WlZ8MyVjOW9ae08uS3o7OyslSUc7YXhoOlM9O24mRzI2Wmg7RTV+PDUzVHp7UTBxLlU8QmsmRU5xM1g8M1BhWzolYG0uZGBHUCkmYipCP2tkJTVfMiV3fTxbUl5WM3NZP088VDlxMS9qen5IRDM6eTohPzQ5TndzRTZkSTsqPzpiNik3e3Q3WyU6cXlRXUVUbypeN0tyXSt1''@;'; put 'put ''bGdyXT13Q2pqT1pyYylDU3ByMC50Vzw9Nn5kWnozQDx9KWBVS2xhIn12KSZNZHRYSkRKIjFCeSxmZUVNWHhRMVNSOy9qfjMpdW4jXXIyeHBofXNFLklqLkhDXzJuTzx2TW14JlQyYndEaG8pPXBMJl4mZClvV2J7ODZRS0U7KzE5QHF3I0JEO1tWPU5dYzZvVEp3SEpGZE46Q3guZXVvbCgjU2Vs''@;'; put 'put ''JE55XUVMWko+I0x5Qj00bSFScF1jdyg7NEJHZnwuenc1K3p9ZiReP2UwJX5fdFlFdF0xQ0pLLDtCYj1pOEtNTlpKPWBGV1lieiN8NCRgO08qMD0sR357XlNGOSF0ISJeJTJRfjQ2RH0lJFBiKjpESj5POjVJWiI7NyE7eHN1WjRCaT5AIVh4Qj8haHZsJSt5IzlKRVt4XzNMMDdoT3xXXjQuTS9u''@;'; put 'put ''RCF6Q3xOKS9MfUhvYVc5LmEobDt7TFI4JEAuRn18IS9xRmR6JSU8eUA4WnBSL3x1IUBiRT1QbUs9X0NxI2hmc1k+TWJXe1YzbUJwRz1ITks7Z0tBMUUzaUtdSjs0Tnl1dzJvbjhjNlU7dlszdyRRQEx6VSRUS2pfSTFgTSYuNSI+ayJlfmwwJW9jWzAobyNmZn42T2JhcW9BLysmTFM5QnJlMzou''@;'; put 'put ''KENiYiwyREIrKktWfT10R2V0cVdHMERMbltHQ0EoKjZLImcpU1tVT0ZjWTAxdzh6RW9ONUNsYykxZmdbaykvaGAwJD9EcHQjaUxnISJaNFdjTjhKX2BbPUNdIWU7d3JtdCtady9CcUVANFUzWzMlaj1udFFxZHh6O2lffDpwI2ImfnVHblcqWjkwMHlYXzUsVyxGY0dnYG5DMyEhOSh7RGxiNWp7''@;'; put 'put ''ZGJyPmF4WSx1ZigifVRNc0s7R0I2WSprNGljImZVMW1ZXltfJH1RKTMqKTpeUyRfKDMjLGBgNEB7TiVZT0pvIiQoK3QvUj1zIz9JTTZZPm9QS3tYUSlNS2AxPDlTbjQxPyhFM3VnIjh5PDFrUG9GK0FaM0t7ViFNM102ImhzPTtZW2IjcSpsZ1VyQnZERERvTzk0NFFLRkVNSC4lajNfekUxM0Bw''@;'; put 'put ''Z0dBOEZIZUpHK24hTzgobGdHYVkjTi4wfH5mZXQ6V1VrJXpPSyhBLilCSncwXUFXPmwre182NFplIXpHdTEkNVh6czVUQzEuUShUMUY8MmQuei50N11iLlBXZ09YQCI5WnQjQl5uKzhpPzhoKSVAQ35BOmtnMEZvTzklJmUoTGNrLG1ZRV9dcEhibTB3OkVQRixkWFA1MHhHMnd6T2x6eVZvdzRG''@;'; put 'put ''ZEBPLlkqNntBbnNibWlYQDZiX11kTFV0VjFeflY4eHYlbGo2ZzlpSH5LQ29JJXgvJlJLZk1zQ25FP2I7cm9hIiZqeW1UOzowRHlVNyJtNEJJTEc/KDZvZVkzOyFKYDhxUVkiU0M6cElxO05fX0xUQUlBait3XU5OSnhmZWFWb01bIXBTSyFPPnNhRjAvU09sJVMyPT4kIWMjZX1WLls1Y0BKQ3Ev''@;'; put 'put ''ZDRSQ2oyQF9BRExDNHxBPVlLU0RKX1hRYUlwZT1xbmFxYFVnJCk3fntZamd2MikueytCX0RAbCxGXkt+KVpDeiMuIXRvbTBiSDJ0SzFjR3pLOWJ+cVhdXzxkOHY5O1dkOThbfD5jTjpGQjVwbXh4ZFN6Z1Q8VUtiYXYqQ0QpVnJEQk0xS3c0TENjR2ckL2NUbD8xWTZGJXFDRnxRM1gxbmlfJWc+''@;'; put 'put ''Wn53cXBGejh3UDlRR0FHN01RRVptPywvXj1IdTx2Ukk+Nm4pMn1LfldgWz4wQyphTnBvPkFrMW9UNkRXJT9zIjVwX2Z9ez9hUTRjdUp6M1dgSEBYa2xWSlA7MyVjSiZfUTo0WkIqY15nRmsidmh3UH4vJTk1dXFWan1YcjRLQmt8dWhqJUk2NG1CaGMqRmdTMEoqYjZOMUBVQC9mY3YiRSJHUztt''@;'; put 'put ''NyZoV2U1Xkc+T2dJKTMsV2FSYHsxbnA4KFhAYEpRKH12VkZOWkt4X1hraC5sbDQpdihLcXUrX25mLlNTdyNkKzpAKypQe2VdRlJ5MFpAIlBTcCt+a2dnRHJlL3ROYUNJeW1+P0UiL0o+VWhxZXVJMEVkVkpVVSkwW1ZydGBxanZOQTF0W0hpXSokMjY/O0VVRUVPfEtLR3NgbFZ7SXttTFJJXjxN''@;'; put 'put ''SXlbI0BaUm88QTRURDs6Y3pJM0pydClhUFU3TSgoWyJiS1tbSFJeaiNTZGNsVUp+OWZwTHMjbkt+QXF3aENjTXpIfWssMTE1I1tJXkg7ZXQhU3hbX3NPOEtJbW1yITZkYz5zNVk7ck0wQ3JBTWUoXk1CcVtgJjVEXT8kLiV6WH5QZmhdPFlxQmFCPTFETSZDbH5XfTcycjtIRWlPMC8pZSomP0Mm''@;'; put 'put ''MV1LSXVtbiVRcW17VC54aT1SN0B3TjQiZylhR0RQQmJ7YlczYUphPCMoYn5SSTB2S3owOzpPal5KdEVGVW9ZNlp9YChId1grTnNkWjIyaGhDfXNjNi5geUtWdlppeUNKIUUwJCV2WXZyaD9ZJS8mWS5zU094ZH18Ql5fYClgZU9WO15lenFEYSZSaiJaTWc0ZUJ7fkdnO0JeZ11acnxNKzt2Jkxl''@;'; put 'put ''Jlg7NCh9VCxCV25OJXdUNis/T18vVCNXeyJFW1Vfc3JTaiooTnB3PmNsWz5lW0oqMWI7bmNGPURoYzA8TE9vZXFjdm0wV1tWWyE7dD99R0VANzVOdHEwQXJVTlskZzA9MmY2NHkjKGxrVmMrU29OL0I5V3BhJG1oNldSZHVAIWlzWk82M19iJXBOeSo7czl7KWFAZH5nUmllezhia0A2LCEkSEpK''@;'; put 'put ''KWFrM0dYWk03O2trbjlRQVtnYXhoZTFTJHMwYlNtJVU4NnI9PTszRFlzPkFaZCI6RTUyZCgyT007aGxvJS5VQHIxSEx7SFpPaFFBQk90WjJ+bzhMMH1gOXcxMThVTWRPa1NdTEhvUnc7Pk5GL1MkdzIxdz1WUSg+My4jQH0vcilEJXlATVdgT2h6NCpsbnhMNlcoPVEmbnE5OGtnOH4md1JpamZG''@;'; put 'put ''ailGJkNKaD5WMktuaU4xI3ZScjlpcypYZD8mYFNsbDFpI3Y6cVRQfjB8TElLOD43K2AzdHF7fWFkTWZLNTJ5RissfC5GZ0Zib0hlaERWX2lbe2dERTQvdzxtN1QmWj9iSX1SY0VHZ3BMXTkjZCw2cn5eU2gjXSNYSDpXOk5WRlAsXUIxO2VndH19bk5vVGBtYjwjbF55QnQ5LCkzPDZhdnNYajA8''@;'; put 'put ''S3g1bEZIJlBWPyEyby5sPCR9ODsuMUdMVD1LIjdvVn1RYnEmS29EX3c4bDBsW3F1ZkNCUSRpbWA0NigrVilXbEVGUUA5bUAhXyEwcklpVGRzYzZ+Un1ENzNNKkFjdzNLV1REQV5aY0p2LFhuVUNYR0BnTHUzJSw8c0N6bXhrSXljYjl+b0x4bjJIQFJCTTxlW1hGYDsyWzVQKytbZUFzZjxbfUJm''@;'; put 'put ''JW91aTM6NyF3bWU1VVUkVW9yMkwoMSNeM1tGbXEvWy5FJWN1QXR8JW1ecCxHfX0ieFEqU2NmWjV3RzpKc2RgXTd3cy5zRys+fDZrUCUmc048JFZ5LHpJL2FrISNoYktxVDk1MzhJP0tKOWYiTz4hKnpTaj85KjV4ZS5DNl5tbkk7TURATGZLc1lUfT1SKH5kJVQ2QFFUTS5KRjwmLDdrdll4ZFJE''@;'; put 'put ''bCkoaTFvQkVYXiNKeHRoVU9LJE4yMkJraFdneDU0ZE4pVDp7YzsiK0Vhb1lkcGp5V18wPTZGND0lPm5IayVlT2UrZGVkezpDODR3QiV9YzlfXWh+ZlB9SCQ1O2FFOzFeWzJ4MSQxLDt4V3liZnNdMEJXb3NdSS91WUpTQz9Ue2kpMHdjbXwmN0RMK2duU1omYyFRajg9fEViRFFsdXNjfiIqSXp1''@;'; put 'put ''bT5yTnNCInBVMF9FR2w5YDNmYk9FK35QWU5KUldUWzh4YE5rZj5MO1swb0lOd3RmfCo+djdUN1c5dj5aamE9VDdndnM3cFVSXmtedmEpcCNKb1pbSmt2NF8wWlp8YG4/PzVaIjFILnx5bWFMITRIUzgkRmpBSyZrTmZ9dW5DcVo7NXssW3IrT0AmYzo7Inx2OWk8L3lZXjt3L2o0MVB1X0tpZUde''@;'; put 'put ''eys0Vy4rK2BCdjNQYHVEJUBye0kjMFBQLEVgV2t0NmE6LF1fU0YrRXYhPFcuUVIiSUNYcixyNkdBfWVadyZaVE5APWFrTjRROElKWFZwWiZ9KStZPUNWW2pJTCZPbDdEPU59dmlNQ3dQdEh6ZEZJZ0FQVm5zYWB4JVNrRFR9Tk87d3QlLGc3JTslaUhUST8oPVZ0OUA7dUdrJD80STRZLyVCMGc7''@;'; put 'put ''SGMlP2koWnVnNnQhd3xMU2tXdyg1WEJBIl0uU3hHT3l3K242WDB3OjpQTzxwO0VffjYpPioxMzVIM013fiQ0Wn1dZkBnYF5Xdk8mQXY4dG5vZiFuRThnXVc/QltvPE5tZyJFIXRoN0l2ZDkqc05AfjJoV0M2RWc/PVJYbUVRQGdZMiZnSD1FLDVvJnQ2XUhSOnE0bFkyZ3htLkxuQCY+KVpbanNd''@;'; put 'put ''WVtGIVJPVTVtbVYzM2ljZj5pekxLRjM8ZWZ2JjxYTT1tNnImIkJaWkJeNlptR0d5QDY5c31zSys0bWJoamtTS2w/MT1qWDp5Zm5CUyleL0oqJGVJP0UqaT4jajhzeGpmUDBmbk9RYWo0RE0wMyQ8TzEzQnxFOkxsJDs2PVNAJXBTWHBBczw8d04kZ3VlVyZqbllCIzplJiZXbXR8IUIlfGB8Xk4y''@;'; put 'put ''Ti5LeWtbU0JNOS9ffExJezE+TnFlRHpdN3pHMTZzIy9TYigreEpiI31bUHApTnZxVjdCKDk3W2oxYltCM2YuSzw3eXQ/NWxMKE89QTNgSHJPTzIjVW1Xfix8RHFPUyo2Zl5fWVZtVzU3Pm5OVHckKWs/YXdxRWhjcl1QdThFQ110S2xYYjw4QVdULFBgMVBwQks8Q1k/OyIsImo/JTJFXkQ6L04j''@;'; put 'put ''VFJsV3dnLjg/SERfPk0iPTQxVWosYUVrYi4+amtTaFlXbH00QUsjZFU7bkNfZWxuMkhTelNDWzM9Z1pPNTlNSHkwKz5RaTdaRlI/X3VNdi4yaEBJeCFCW3dnR3Q/MH1ibSRQTH5rcmd3ZyVqenZUej1ibmI0WFltVVtdMCNPUjhqViN4dFpvWikkXVhsVzBlJkd8fTwoREE7UUsoaWk2YzFLXVck''@;'; put 'put ''RCkhMUlaO0QuP2RmNFVLUWNieWg9eG00PX5wXUdpcipyQk5zQzx4OHo0e0QhWlM5RD1VVW5AY2xGc1IrU0tidk54fCZmRzREdjBwMGJXKz9vcClYKy5SdyZsPFhgRkgkLltTQkt+KSxbeil4cyopVVYwYn4uXyQ9RExuJTMkKHc6bm40RlNwWlhrLiosdVhTT25fOTchU309XyxSTz9URTBsbHBQ''@;'; put 'put ''fWR4JmVJRXR+Q31sXVEkVng2WTFbd3Z+QzVTclNFfjoqZTIjYCUkaXFQeTw+LmcqQUV5dWE1dHxvPWl+SGElTm5zNjQ6VTl2RjlseW1MQW9aVyJwd2J0amYpcDpkVTxEU1Zufj5SLHUmbDNCTk5OPlBGdGsxXTxVKF1bUk06ays7Xk9LYH1tPCZ8Nkh6dk1DXXZAUVtwRzhMRjY0ZD1tbEVpfjx5''@;'; put 'put ''JF1bYmhdMSMxdipfVjdJQy4rcnUvKFhhSWs7fTBqR3o8ajZ7MVssITxgdllIZEk1ajtVIWE0K2ttI2xwVEIyUldGaVJAeGpANEAoZW8pTlFVRCR4SDNPWnRtPWlxcFM+WCN0JkBZPHw+VSp2Ok01Tmw5aD1aQTJ0bnJvImNgS0NKKjBzP3ckcWNxLCxUYnx9eSh5V1QwM3t+eDV+bldadil4bitd''@;'; put 'put ''UU9ZbzY3JWcoSnwzLCJFanlTXyRAZldKZi9XOm58OmB4UEJaZz80fSEqV2VPVzZ6X0xlQGJCbzFzMmZOdCk1XXF4JVY/aS5SNXhHP21SeU03PyNHVDdLIUt3bSY1KGJUTUl3eS9JJEJRIk91aXAmd207LCglLk9mbXdGIiVbW0l1MnlQM2BbS2hSa2giSXh4JjJxNSVUY29scSp1VCMsXWgoT0du''@;'; put 'put ''aEA8JHJuZX5+Q2FBXWVIPnF5YCtDJWtTKCFhP1tQVGBfSCphVnJ4L0Z9WCpfL3dMenNtOkY5SUFBc2lXNGImYlpjNyJne1RSQHBpd0MmRzhGZDp6ITReXmVHUHUwPXd2aTBDcml+NkcwOk16cnJEPFt4TDM9YXpDOSFELmIpTGk2bj00aERHbl9Fa3cxWjZAM3pDImVvL3JQPGssYlp0cmFma31y''@;'; put 'put ''ZzFwb0ZrInh6SFh2U3doaSpuPmEqRnwzQF9XOmkpOiNlcTdla1NvR2trYjxnW1RzeVErYUJ2fTszLCg+YVdWbVV2MzNpbChXaEpiKzdsOGNWZXxwZC9tNDdmSlAyTEVOQks4JTlwY3k+JG1wKXtIWDwoe0g0SWlsVWheWUxYQWR2R2ROZFhET15wczZHSF1GYkF3U2Z2ai9IRiJ8czg6bUE4TGd5''@;'; put 'put ''KF93YUEhN15YSSN8RWZPWiMwfCYqQ04pc0JsKl5AS1c7QisueF5aQmZdL0N3SXM8Jj05IkdET2V5aG8hamtmXlhNT3tqQ2M6NCEpWSNZREZxdl9wX2RsbSMuVkdZbGNmdUI+YXMrNj0yYmIhVkE5MFVebX5QMlprISY8eU1IUCRKVz85fEFJUDtDUUVAcilaTiM+dSY5JjNgMXB0N206aCs/b3Fr''@;'; put 'put ''ciZPVVhQZzBra1F+RnVUe302JSh2VD5hWmc9Kmp0ZX1YMmw8bl85Q01xY3gkMm5MO3g5VFZpZVt2IikzMnA9U3MsdiM0Yl86X1JQRDBuNGtBS1k0Sl9oZiNqIyMwR3pWZkpUakNheiZoUkowfnRSQFtQWTl7WXtKQlJKXkFZa0ZDTS5JZndTZjwyZSomKFI2Yi81IyU/ISx3JVlzc3teeiZMe3Al''@;'; put 'put ''PCNOQ0gzVWxnc2BiRGJ+d35HKS8lanlEcC5TRGt6K3hfRjJiLD9ONVs7UFo6PlQuViR2d09tVTUjW0U7SkRYdF8qNUE+WWEhWyFAT2F1UClZLzJRMjloNU5iMSk/JE1QaihDW25yS3B1YjZOJDpMMmNWL3ZkNGYkZjRlbllvM3NoKiI+cSRnWG84e054VFVdaGRJNmVCTng1UDp6KnBzWFtQKDJx''@;'; put 'put ''IkZvdTNsKiwpaHVIdXd3KGEoQEFtP3JHMEsob2NbVjglIyY9Y3ZGQG0icTJIQUVTaz9ZUDEoS1ZdQ21AdVB6WkhCMyhtaUJDNXptRTV3fjc3P0VCcEVXNH1DT35tRXR0RE87e3ZFdWE+QzY5L0F5XUR0YU4oUncoOV5xayQkSmp0SXgmZitFd0lyKkNVeWI9KyNWZUVUQ1NBW0g5UiI6MDhVYiNd''@;'; put 'put ''QjEmVCV2SyhpUCZ9QEJyJXg2TzFvXUpOWWhYY1U9ND8zU2IuNUs4YTUzfl1xIiRndFRnfk4ha1F1UE5KRiVLTjQmUk0vJno/dnc1cHMvVCRJUm85bF1UQTw+UCNFQUdfSixiei5mejFffVtHdUsmK3lTYW4xTzpTRHImKnMkbDJfTXRpR3VAPl5LTTMoNTZBe006RVpUL3xZbTRzOWk1SD52NUg0''@;'; put 'put ''VlAuJDd4a1ZXSzNuRmFlOVlaO2FFKltJUENBIUQrOzxEXSUjWj1nS0FOR3liVUEsdVZ8cW4lMktyR3l7aj9PTkRCUz0sTH56e3pxfW1hPHh5MSw4b1s4c2dKQkBdeDZ4djAhemd6NUsyM1ZDZztOWC9pTWBmNCI8PjpOKkMidz9VaWNZR2ZTPV1qMTR5IUxlZ343UEMuZ2ZrTi9MW0lROSxVRD87''@;'; put 'put ''e0giI15jc2MwQW5ReTF9WU4qP2UhIk0laXk8bDc2VFt7OD42X3dSISosZnVIJlJJXkYyMipAPWNZPjhbQCtQa1VxdUl2dGArK1YpT0YqMlldSl9lPz4ob1F3XTw2dG1LSUBKSDtefj1ZNVNqR1kkQWJuTV5Vb1NyUWlIOz4zVjUxK1tLaD54QWVNLjJjQkJ2dmklQSJ8Uz9zI2k+SmNKNmxvWGk1''@;'; put 'put ''YDg3KkhOdm1gJCpodVZXdEhNJjs3TkE5YzgsU3lFaFVCWjw7dEtJaCpxNWFYI3QrbT17Kk9jXl9PLmRUUFAvYDMwNiw5bD1CYVtaVUhSZ1FiS3FvazczKWEpPHR6dH1aVSZ0fE0kUGxvRWhgQFt9YkRSejxoRDY4WnowSnokd09vX0dENCIwY0lRNi40MV97TWs/O0VjfH5NeFlwaW49Yl5lcFg1''@;'; put 'put ''YilsaGdweXsrbmF2ST82MEFoalFzOmtEVkxDRC5MZHYmOS8hXjtKIkgwJjYvTEZZRk5kQjpYPUlRT01Pbz5mZktoLjxhOFlRWWcyV1g/LGw0MSEraShAMWg8XjA3fEVtK1UhbihjbzVrQ2lgfi48KSVZKjIjbSltRmhjX3AzW1I9QiNwInpCXSMva0I2JmwxPnU2OFsuenouPyskWGRuJVdZNVZf''@;'; put 'put ''TzRRKCFQRHdpKlBERkt8Umk8IXNFOzx2SCxVLCVeTFJ+TE4rZF9HbitUSiRELDRmb0lyUyJTRl9IaExkUlh2UDpTPUpseF4yI0pNQzBmMl8iUFZjNk4wdjl0bSV0e1c1YTZ3Nm08by4xZnI+bmxsRHR2ZjhbdF5EdVklRV1LSmpxY3JbU2ouSz8/aVBHK3pWJTN2JkBiPldNcSJjbmQmSm9EL2V8''@;'; put 'put ''VVhqX3Fqa25sPk0qMl5CUUo1KFcxaTRKV2syNEdrKChVJXttTVN5JG56Smw9RHFeVj02W0ZlY1l6PEVbfjdkZSopNzNwaHkxajw8KzhgTTA6d1UvNCgzYXFdUmN5a2hsZCEoLlUhUDBGQV0hQGVxUVlNWnNpUWxfSXMlRSxtPXtlUFI0W0hFRChKeGRSdio8dWhiXW4hOWxdeztwezozcEpla0tA''@;'; put 'put ''VmcxNEVbM3Fdfk48KF1NPkZQa01McmQ9PzBQI1E+SmNqTXYkLGZ1V2gkTUhQdXNQKVQ7fTVaZHhDek5IcmsuUSNhenxGJDROUEQsdGpKfCpoakRkej40TGdFdl1rP2N7XkN9SCJZWDJyY3xIcXYveihjdntublRWeE9PcCh6ckNUOnJXJFIuXihfdX57MCZSMiNsX1FgTU9TT0BtJkZsODRMKTQs''@;'; put 'put ''WGwxWEgvdG51WFAvfmV7TEcsKnpjaXtrYHVOfSohVXAmbSZmeV8jezFZL20yentaU1p2SyNGYHlrUHd0IWB0SlZpZTRRNE9LPn5+YiQrSFVKfHV6Zmk2WlFkSXJwKC4waTJaPyhgPCZIO0B+UFhKQmUlWURYJSpoSUgwU0p7PzxYS2x3dXY3Nj1WSnx3Lm4ydyhsfllfb3M5QVJSVi5NOjJXa2lW''@;'; put 'put ''RUg9KDpzTCVLQXZJYGZXZSg5OTMrLjZ9azBEX1gjKnVzU05aTVBIN3ckL3dVNFhPdTR7L0ZfJmFCdkREVUtLV3pjc0V4ITg7d3J1XVVyXy90NH1JaV9iREk+aG42Si91XyNZISg1L21yekdOWigoQS5aSENbU0lAS09QWlBeO3dzbSRJYTRLX2U7O0xgX0clenU9ejVXW1pvRFtTJT89d094NV1G''@;'; put 'put ''RXJYUUFjcGRnajxRVEdVWT89RDQlOjFJfkBidUNKcTgrOEhbWCE1cWNic2hgMiMrO0AmYFVDYyVSPng/aWorakRAYis9SUovUEFZRTE/YTw/Pm4iLks9SE17QlYpUXElcCEqdGYvPF9pLz8sIT19P09ral5DZU5ZUWdrJlg6JTZqI1JlIVZ6PV5kNlJnPnN9UlVqNEs0UVlFLG9pbXpbUmRRaik7''@;'; put 'put ''ZERyUHJ1ZHptJVRKQ2JQe0U1WFZGZEdLeHpXeiNtfE9LOGAkcTUpL35QL3xbP1skXlohKDdtalopZElsYFgjOTkjQ30wLFNENnJkLi5pMWNqa1VPbCojZjV9PnJDdkxFJHcreTouS3Q1N3grL0pqNy4sblheJix7fVBDUSxqRHB7MHw2ciFKNTZAQE5OXkMoSGAzJmJaPk97bD8rSDwrd0FtVFJm''@;'; put 'put ''I3ZDLHZicnxqOl1VK1I9TWhCckJ2KX5lVGRoNnMlWkV4eDtSYCQhPHdARChkcDNwe2lHb1kwUzFtLlp1O108e3U0fmZaaX1gXkdfW20zfk5zLERxVikjeX52ayZlVkpCbWwoJTNDVlh9M1laY140TjROZy81MEBESVZrbm5IfGgyWiRzSERSPTQsa0FiLFh5Q2gqX11MQmZXelRYN1pqUSlUa3le''@;'; put 'put ''W3UvMmhgY0w5OFhjK3xWdnZZez1kUHk4fkdxLEtCXU05NCFDfnRsZFRkZlUifSR6ezApP1N5UitCPHouSEAjdEpKaWZ0PVtIKkVsIkF6THBifVlDPSJ6dHliRjNML0pmOElCTjEuRzkzPCJIWXZwTUsxL09tSVZIXylfKD10czVBXU5WVEVmcUh8eS89VSUkUlBnYEBzY1kiVD9banZCfX1qQFs2''@;'; put 'put ''aShsamk2YkttbyxLQnw5IihGXTZHUy54ajtDX24wR0FgJn5EQ09xd0lLOCtCKUxzVS43Zz4kSEVPVS5lQHEqZXtzLiJBPGUjOmt+JWhNczBKVSQvPUh8RH5jaXRuSyVYYiNEMXJ1dWVsIXk3N0ZjeV1wfncvQThfOD1kTnhzMkQqfDB8ZXxlR0JoPiJncTNXVz5HYjxebnpvdjFTdTUqZF89fHt5''@;'; put 'put ''bWZDZ3k4SkhlRGk5PD5TKkBQVmUzU11uWXNzJHkyRUFweWNZRi9gT2B2cVk6e3daen43SWcoeiQqN18zZzxTSm5VYnttMFhSczckPy9PMl91bTxxW3MsQUMialVRZktVQlFvZCxLYDUuOkplRjxUV3g3fH0qTG5Lc105OXU2TVp2OWxqSiREaH55R2g3XXdFKX4mcmJUQ3xJUkZYamU5X3RpQG1o''@;'; put 'put ''JXtxU3hYYXVLIj5mSFR9QSxQfHRuXWd0RklYQjQvbERXRXRDbUwpfkRAay85O1Z5WHprey54PFRKeHhtPUJUaFUyajhCTjRKaURITzQ2OSZDVD42dCpxXUg6M1UuKT9dUUdgWUdtYHdqIWMjIXFYQWF1b2dBQyp0a1M9U2QheWxKOXJmcUN6c1MzXmVJMHJnaHUwZHZXeCZWQEAyMkFgYzNbRz9i''@;'; put 'put ''amx9MyZ9dD9iX2g0JjBaSTM8OHNYXztkMFBIJmNCIURDRnY5bCY+S1NdYz95N2NNaTdVdDg0OFkoTixaW05DWjU7SHxNVCJKREJYYDV+YFMseC5RQC9HfUtLSShRJF9TaytqYTQ4OmF3O2k1NHNUKk4qc3dlLz54ZSE7SEghYEV9aE5hRTZScyQlO3RHRTdiM1YvTXlxT1FgPU4jZntlbzxlN0J8''@;'; put 'put ''c006Z3xPSDkydHk3dHROPndCWEE6cENVN1ZpbSVkLG1QUXFSb0RQfT5OaWhgQD9ZZWpLKCZwOFkpLHJBeUQzYmAmS0hWSn4mcXxEJEBiSCsqb2kxKUUzfkJnSVUobzlCVUo6YGFhUkx8QmwoTmhAWXYpLisjSFRpQm9jNUddNlckNjE1enE2QSJNKkl9V0VgSSU3VUpBZHZKJnN8e1IuZE1KKyxa''@;'; put 'put ''NEtrL3l5OjdpJUl1IUAuZFIvSVUzMkJSSmlidmxgMSkrNz9PYUBDRENUVj9kQERmTjo7aihZPjBdaiRXcF0/N2Z2WlNQQjZ+RWIoJCIrPVRXWEpdWClEKX1EQUMmY2QkRVNhXWQ/K2hnQ2JMdGhkUj9Ya3c6c2gzN0l9JngwJlNmSlhTNitmOVtkPFJKKmR3Qm5IN3NmPUpkRlNeLnVDQEZgX29q''@;'; put 'put ''N1ZAMUhYdnUwRX0oJiZDQTdUMUVmNSFLaTR4RVArX11IIkxrTWphOkomdXdhR2YxKSRtNEJWaztKNXd8WTo4bF9YSWtad3RuQW18S3FNTSxKSUcxYmQ2bGA9U1g4WnxyenBGVkYlOi82ZzMmUntEO2xSTHpfQz5FS3h9L1Y6TmFOP0wzbm0qIlJ+UHpPVVFHYVApNStmbSM1diVTMmBPRXF0YXUi''@;'; put 'put ''WT5zIS5mT3lrZVk1a318ajowNU8uIzBteloiNFFFKTcsRW1HZyFOQlhQS0xkSklHSG0yW35ZZWc9NXBoUzJ4NDQxZGJrN1c/WXFSdEpkKTdTdVZ7O2lwX0ZPTn4xNUU5Sik0N3FYNDFiW19FTnl8ai57MHZZcVhAekg9QlU+JVJfKDR+MVA3NU9Bc35KV0x0Klt7TUEuRmdDSHU1WUUhTiVSYl5s''@;'; put 'put ''bHxFSGZ3V1JDOz5bd3dMej0oSUUrQzZAPkhCSG5tKm1SIlBOKT9zaXBIWXV1bzEiXlNsQXdxaXBRMUMzVjIyQHQxMHhDeF9dTFhNNlpkW2pGb095dD9OIzduISs0d08leGRPT0N5P05lU3kmOCg4Rl89NDZ2dFlYTjZrdjg/U11vciQ6M3NzQjxIMTdCLiFSd01le04pOm5SNURHdSJDRXo8SEB1''@;'; put 'put ''UGxoP21fbF1NYiFzPitXUnB6QDxKZHdPVTk5N2l3NzR8OHVoazA6OXdBT0RJKX4+MSRBfVo1fEZBbEF4ckRITCIvRS8mJi4uUENIVCZ8NH5zdUZCYlFAKXg9QkNKOWxIPEA4NzNIS1VLZERQOl9ARWEmL0VzN1ovJU9YNlVmOkpbP2dhPUNHQ3JmOXUoc0Y9U3c/KGt8aWZDclBiSUxhVyxGW29e''@;'; put 'put ''WWh7RlRic1NfRWd5SiMpfTMxJTFWekRMSUlkfCEyUighSW8yZXFucWImOHkrL1Q0XldYbUI5SiwxRWd+RHZWVW1mXW9peVByfHomfCloJHxJTklYRV1JXmtHYW9oc3o2TyUuQ31HSFFXbXxYcy9qbTNYOHM/Q1RrSHwjbUh1dTorayNQP0skOH1CSUdYVmJoK2A8UkYxX28+cStkR20sXjxEaSVq''@;'; put 'put ''WnR+fDRTSVE5NzFTISp+TkhPS1lmalFqYUBUfmQhOFhodn01Yy9jYlpmN2FoMmNLaEYzbG9mWU5xIldzai8wWlk3aVpKSFlgakJHYTNPfU45JVYsV1hMZDY4O3ssOl9Kdks3UXZpcllGazpLSVM0Kjw7QDYyPUEhNH1De2gjfjwyME9tWmVrPGJILkhoSTM9MGpyZU5zO2pWfEExKH46Z0UjJk5v''@;'; put 'put ''M3ZbRV0jMGMjLGZeJUgsUGBtcHNQOG5zVlAvVyZlfTUpTTdjMHJ4KWdNSTVZQ1M7S0c+PUVYVCJAWTViYkJOc2JuOE5UVV58I31vXiRzIzVnPXdlUFR7cXdXSSl7cHZeWzYjMmpvajRgJldxbGBJZFN7KnY7fT8uWDcscGMvbTI8ZHZXcU1EdEwmZHk8fXspPX05Tng3W2g2bWRBXmNhZEF7OT1o''@;'; put 'put ''I35WTnlIMyhEIWUlenI9JnE0PU9UUDJ4PHlzPi85OkBfZklSXlNSYzZQZ21fQ14yIyFSMmJjcWBgWFQ6dTYlXkZndUojZSFPSDw5QGorWjZlZXZaMiN8MH5uaDc1Rno2Ti5FcXJaa0ojUTcsXTNqVD1VJCtiUTxWW0JUI1VVfiRULHZyL0wuOEAvdVJnKmdCUC95RzwuckxefVJoLnlfXnRsS24+''@;'; put 'put ''MWNmIjZFSFZHJXRPR0VMIzA9X1Q/RSg9Kjs2ejcsc3NWYGBOWmFrdzN7eH5JPXI2Wyo0PGR0e0B0a306Qlp3K20kPC94RjBdKWtQdEYidUkkY3RfRTFXdD5HdmApbDNPRkVyYyZmazE6dy4rIWtBXSFWTHBNazQyU3x+eCt6fWZ4PDcmVCNQO05SO30oOmxrT00udjA3NF14aXd6MCFrO2twTWYj''@;'; put 'put ''QW4vT3drTDxJWy9eK1MkVjdncT88RnA7UHN3IlRMPEo0ZSopeTRiZiM8fW14cXs+Wyw/ZHFsV3pHKklLInMiLn1CaU8yLyJxKiNGRXpVI1oyaj9Kb30mK2g/RXImMk8zbHI6I3xXMF1AInpoTmtPemttXz5wSmsqNTJ7KHc5eCs3Wmp2dnhJTV5aWlU+TSVXMHNESlNGfjR3STdLRDoyeDljSEIr''@;'; put 'put ''fmRPaFMxfF9td0VfYD9PPnEvS28/R1h4O1psWE17YzBKU3BpZnk/NGd5O1FpaURlc2lzcD1CWiM0PWM6SWhJUCpAKS9dSyNLWWJobzQlN0lpLGhNK0UhUCFgX0xtUVFkWj4kdDImRTsyZjJbIUF5ITM4Rn1GWnkkVXxvXzw9S14/djw8K1RYIXg6fl1MJVUrMHdiVl1USTAlVjlsaWJiSlR6YWtm''@;'; put 'put ''PmpwUSxkPFteOChaU1g8UlMkT1BxNWgpeEZKfCpRS1hWdXduTlJNY3M6I2h7dT5tR2EiJmBzMklQLGNPInN2Z3BRPi5ZfiFIP31+STtZWCIhJSM3TDZ5JHdGaWhiNzBURX1aME4kIzVoKHAwRW5LVzw2LDsqTklgPHg4fFs9Mk9XeV45WS9CPF1fJmVzdWhGcyYkfnc1WWR7WDw9TXt6PV1wMDFL''@;'; put 'put ''dklwVzRZWEFIemBmSnxANGx6MlZMWDpeZmtwOy86RSQjUElYQiNueEBwOHI5JE01aUA4fXVKQHhveXdyamxpRitFOXl6Sn00VzhnR1lWe2peJmRmN2tfZ1ZUTHBadWRpMm5LaEwpMkE+ZDw5eTN4bHArTClwLk09cFZObDxUJm4mP2RUPVQrXT1GW3VLJDRsaWAzW28ycFQ1OHlMdmdPWT5oemF3''@;'; put 'put ''YDc2OFpNKStLRFI0JEhSaTtkbil7JFNVVHh9fmlAWWs9bUk0NnZGQ3dtdCheRG5hRj1feX0jRXoxa3QzfjU9O25AJm0rKXFKbkxieCN5L0dAMVJUNGZnZkA8YHtjWjFxLCk6eGllbExNV3gyeWYxOlJaYS9TZkpDdXEhL1dKfix6Ulh2fVpbdSJxUT9DbWVSc1BXNiR7VzJmbG9NQjglSXMhcmlw''@;'; put 'put ''cG16MDQybCFsezpqcWZQRSMkUnlNKD9uW3NdSltRVGskfihQem8qN2ttPjpHeTdabyt+PzddPmM/PncsXmQhInBRWXtybzN3Uz5CSyZwOi8hdyRvUEVfQ19qQHNgUldAdjt7bTN7OTN+ZTF0SF9eRzAhPSJ8KmleNXUkdj17LDczbVghZ2NqaUkjXWdWPWd6bSxpbTF9WHBZeloiO2lIbGtEJXM1''@;'; put 'put ''IyM4aEV3dUtYdXAyeHQlRkhkWDY0SldqTnl6NCVxMiRfOH42KXApelU6YnJNLDBbKSVIRnJ6RFNXNEU8M0sxWUJFK2RXRlU2cExxZmVoNmJdMCN+TjtSd3xYJSY3TXlSPEBrKU9UYWw5IjF8ITQrXjpuRElTaSQwZXBSRTlqIU1eYUR5Z1k6cEV6Wn5eVW9MUlU0IWhdNzszLFZEQXh6ZDgyJE5Z''@;'; put 'put ''OU0mdjN4LEdaTWJoZDFSVmRiIkkoe3lxKFJkeHFvI1FmUnprYG9dWjJISncwR1c8O357cyJXRXBedDYlU0xoRkgjY1J7eD11WEoxT0YubSFNcjspIy5ZZjJHfDNUN19PWSZWUFpJX0VuX1t2UCF3a0kjfV5lUmZwWyZsS359T2xRKG16OEheY1c7fj86KClrTHkhUnRFUUBtal1LeX5DSTJOai50''@;'; put 'put ''PHVEQ0UlVjpbXyFxOm1maUQ3fDo4WzY4cEV6PmdFSk03KEptTHpTfThrTT96JXRVZjk3XyFZSW9+QD9Jcz1Wb0I/XSE9ekhKJHBOOWViPGBHZylzIzNPMEI1WVUydExAPHUuZWdPcGY0V3xOfl1meHgwbVpdRmdnbSpRRVlROEk/M0J8Vmt0NW4mL2hhRn16V1BiLj0uaEZpZHI+LzgxJDJxOSJG''@;'; put 'put ''eSF3OGclRmc4M2cyN3pPLkFML21gVlklMzt0QkFNYmBIZzdyNiZuay5gXVRuRiV1ajRuKX09UlleZjcsJiIkcD9ucSN+RDRqVjF6W1tLVTI6PmoiVEZKNUZBOGFLey5RW0AsYGU5dSZuIlMzZm1OKEM1cTckcE9bW3xDOCwxImxTYTJ3fGlzSGojaXkyQnY0NCZQO1c8eHVyKHd1SnAhWyRQIzJK''@;'; put 'put ''eyx8Lzp+dlRuc1tuZnpfOG4/fldzYTFeZyI/empndjMyUUY5Ii85TF12Ri5lOjZiYjJbP3hHM3BVJjErOTl6WTVobTFAc0RAdCYsbFs2U2Z2d0ldYVJmaiU1cTckMytIfnNCbjJgR3dQUkNHV0Ekd1V3cFplUCpIZSEiTTlrVVF5P20iXnR6YCwhUkQ5bUt1RVJIPCoyJVs8YTpJPmxdbUZ6VDZx''@;'; put 'put ''YF0xbCwkMD0+cUU0SkM0OW9BOU97LGlCe0RfKnMjKlozUC9UTyl9LHM4N2slNiQ4UCVTOiMvLFJWTyE+dDJEUHUseCIqcEZrWDFdOToqWnFYRUk6U1ArXnU7MHpLJmE9ZTF+QS5peXRhNVRoLE03TW8zLkV3NG5RZDF0emVlUF5NbEFvMDswX2BgR0xiQnkoUzAwYjV9R3dAK3deL05BXTRKZUNs''@;'; put 'put ''YWo9ZnpEaX1XQktRTHwjWll5ZiJsNnIwZXNFJEhkQDdZRT57QWs3UXwoNlBQejYpYiltbkdTT01tUWRmY3s7Pz5oSX07I0p+Q2JOcCxVR1huMkk5c3ZGTHN2UGBqdk9kSnB0e3J6cV9rV29QYEg3aVg0MXw5d2tvZEFlZFtOTyReaVtMVG9NdFJCMEU2aXFfdTE6IVhyZ2xZUX1gISlDJWtRUmo7''@;'; put 'put ''aW5eNz0wI3pEfmpPJiZ2dzFsXWhYQ1V8SDNXOzdNL3BGPnJSYmhPKXoqLjJjdHJbZEo8TkghSy9SWEVDbSlLR0hnS0BJKlBpQktlQ2FkfXNlSktefGpmTj1YODdjJTo1VlRaXkdlLFZnM2RIZilad0JZKyUqTU1oUDQ4YGgqN2xFbEY4JCJbZCFdRmljXVRYZCsvX3QhZ11uPHlHTVtaUDM9OTM/''@;'; put 'put ''PS56WnZiVHNTc28lc1hrW3olbF5raVl2V1VYcmRKUlcvK21QWUtWW3RlYHRTJFM0aDNpei9QUD1eVVt1e0NMKiE+IURBRW5TIzU8UUY9Wjc/cC4/MHtHNzFnMGBIbjZhSkV2bGpXY1NKLkswc0B2XUp6KT5BVCYxSyFZO2d0UmteSXo6KEBzM0dxP2RkN21bdl0uYl1fVVA5LDcrOVlFYTpQIiRg''@;'; put 'put ''RCYqW29UKFYyJk9BVHh1Z09ZNiFRW29kP2E8fDV2VzZzQmdNVFhQNFZEWjp4VGdKOmByOVE/SmlMRDx6I3dzKFFGJC9YYHZTUjV5Rk5taj93MWRsTn01WF5MQCVsTyEjekwlbiMkNltdIUlULCRNe2pmTC9CYlE1P281Mi5PTEk3IlhMOi89TD1PaFNWSnVAcnJ4SnlAPSRtIiEuN192SilSZXNL''@;'; put 'put ''V2osXnQ+VFMwImEmMVoxK09FXls7aDckUyw4dnhpdF1+PnF1JTR8fF0hQH1+YW1CLiwsczsuKnV4LkJDIWVtNEx0VCgiQGhfKltkMnB9Zks/Kng0PEAmeDZbXXl5bGR2KXJxMEQ5STU6T1ReVVt3eyZpPjhzMTYyfF14UkFHQWBKJU07L11OMUBKMHwhPVFqUyF7YS4rUSt+SUt9VCk8RG03XyU1''@;'; put 'put ''byxZdX54RGRyd1F7Nnw+fV1Wb258PzVjRmZlWjJ7NmNeXm1PM2s4LkhuM1I7ZHc6VnM2IUI4eF8sdFhBR1RaeW0pR0J0S3h0a1E1VnpdP3ZTRTY2UiR+KVZ+YEZsKiNzLGx7M1Q4W0cpR2BYZTowTzpaLzQ0fEpSY2ZFU1gmfj5uPm0qZzVHY3RFMTZbIi40czdGZTxaNT5XRmErY3NVI0BLaGg3''@;'; put 'put ''KnQja1puZTF+TnJ7fGtoJmhhQTh8L15Kd3tLal48UH5qKnZRMDh4SDBeJD5kLDB1N3BEOTU1KyUzYWkvVz12Nm9mRTdGOj9wb0txSU46XyFCSGJTaSZSfmhoaks+R1RyXyYwIWsqRWNjaTJScV9VUW93S3RpOFRUM2p8MFZiUVt5WlRMc3d7UCZZZ3cpUiw/Sjh3MFMsdVBBQyQuMjBnfFZaY1tK''@;'; put 'put ''TzFATiglRmosQH5QY085SnYhalN+ZTZnJjZ0SWx8fG58V2E5LnZickE6Y3JdcklpeVt6SUJ1ZSp0cTtBaGRzaWloLHBkcjl3UkJJLCVoNC8jIkxkMTRUPjNnNzNjUTNAalE9MzA7aXlPZjlhWW9rbHJNTzMlfl43XjVnMG9wO09qN1h3Vk50eWxwa0BLJGhkUiVieUgzKFs3QjksWDEvYXZmRU1q''@;'; put 'put ''OlRWdWU3N1llMWZoN19nbUZ1SyRnMSRMUjh2YTVmIml1NjokclFoTDRreWBGcHp2P211KmJbbzQ/LikySiExXkpIMis/JVJlP141MHA7SmkyIzt9fVRCaiVlNCp+elRYZ1l+RWghZDAsWylMZG8pfmxdXlU/Zjg/QDc6JEhEfSkuRz9RQ3BfTyJtXWpBNXg8cGF7KHtbTXMycF9qQmZxMSU6ZXB0''@;'; put 'put ''NG12TTdoNFQlcnU4dTFsbnx3cXNiJmdCaEhONVQ6OUZ8JmVTKmM1VkcqT0h3YENlSHpbVmtmMVsxbEtnciUvKWUzKF5COzw/NHw6Rl8jJkMyVENOPHw4O0d1VmtuM3FsNGhVKlU7e2lzPjxpJCx5OGpjJHlxJCFrMmBKSU9OMXl8IjFjTlN4UD9pTUZfbFApLG5sYGFEV1VsRWU+ZjVTKytAdmwr''@;'; put 'put ''PSRndD9yMFlsOkNjMSo5UjpnT1pgXX4xUGVUej9WfUwxP3ljODlOMiVeQyJ2PW1oNi5pOGpYMEV4a3E6XVpWbl1xKWZgME4vbC5BXitAWSFrcl9MIkIvUz1GLjhWKVReUnJVdl17SmYjfXk5eT5AQDQmZVJIYkR3KHo9cnFYKTF2LnZiX3Z1d3I3NUljdC82TjchfUc2YmFmRCksdEEoenNBIXFA''@;'; put 'put ''VExSfVhxTTdiL09wYyFCJStPUndiXVlzdEN+NnZpLlg8RDREZk1Te1QpXU8zYVZXTWRaSyVAVCt0SV1ranZ5SUFCdkF0JWxZfFkwV0pqazlOJnFHc3IwKzNTeEF1JV9Yej10N2dDM0FkZmNgVmpOQD97KzsyaU4mIStSe09DWjxffUlaQiJTdnl6blNDUHR7Qn09R0tJVEwsKEYkbDNQOCkwMnJ+''@;'; put 'put ''P3pFcTFmVjd3b3A6PEY7fEFAJH1jVHd6PllKN3hXZ0RCc3g2Kml8MWhtfk1+KXYsMGBASipJWV10dTpFUik7MHZgb25BUlZMQTR5RVVtSUUvOGRPJXA9e3R2cypNITxxRHNhd3IjcEZQe0MjOF9NfnB9cHZEZTFkKmJOaCpLWlt6OiZqO3UwO2d6b2ZnbmQvXTxKZHFvRSFMX2wqREZiZWVNeWtH''@;'; put 'put ''WjgxKSMkRHxWJGIzcSs/dHlKSj14WnBfRiViTCY+RncpWUl1YyoqZG8xRWIqUn0/T1Y2I2tUP1hnPiViP0h0L0B+RjEqPCs2MmlTWHwjJXsvfmAqOjtnfV8zQClmaylgIlVhIjNlb2FTY1olUnQkaUx1ZUY8ZFdjc2w1bzpxcEtmVStWOSFNXXtkT1tVY15AVjYwclM5Vk1tPWZgakx1MmBtZ15q''@;'; put 'put ''Syh6bCJqO3czPyNvRCRpO1g0M1NtRkkjdlMvRGY7NHd4OWxOVG5MU0hAdyV8RlAod09PcC5DPmxudmttYWkxKCleLnE5fTM/NGtzOHhncjZFZzg2JG8raCx8eSEuMGdbVUI3Nis9V1drVkFxczBidWR4RHY8Xi5yKFYiSmhNcHAiNHl8YHpqRypHTnYzQFEiVHcyXmZkcn1edztkSU1LJTguT3JG''@;'; put 'put ''fSFdLyY8K0s8Mnl9emJ6a3diV1NAQyg/ejAxU2UqS103RHI5N0FoT0Qzdmp8T0JQc0Q/YTBAfWN3KUpxfjJHRm41KX1sUzN3ZihDd19uWj9zQ00oKnx9c2EvZmIuXmpeU3dyOFJBKn0+LD0xUlFBLGx1YFBXQXBYWzspYXVNR3ZRfE99MnE3JFQhTHtnJXZQKW5JTmU2I09mXS98Y2lJXytVUTgp''@;'; put 'put ''dGcpbj8xIlEjTmx2JSxpSnZENCtLOks2Ozs+KGhTLHR2MGd0NXRxOU5zc3UzNyQ6QjEjNWF0NV1jR29YUC9XcHZNO1ZLfGNOK1IlJFMyamEvPWIyYlB0MGNnYUtDaUVDNGZdYiNFNkxlNlg9SHo+NiFtOz1nd20sRTVTLmljOEYyYU9WWE1gTzBaOWtoZHphWnhNcm9kfEpleWo1U2VdfTt9QTQ8''@;'; put 'put ''SU4+R3JxMFIpZmVdMU9oY1JWMUJTIzwiTTx2QGIwRHA3LGxHTTF1P3h+TEdnVylrcCxqdFp4PmhucSpiWWJeUkBUcjV8YENCN0Z4dF4yTW5qVm0hQ0N5SFs2VzxtO3l5aDVGPklOcVk5ZzZzU0RVcyJMLiZZd10iR2Fwb01PazU2XX1yIyJWLjxgIncjRFs4WHBadTVKZDp0dHBXR0JoIyElTDJK''@;'; put 'put ''OChsZnAxbCt0JnNuIkhyUkhVcklnTi5ecCFjN3xiY0cvVjg1PVczKjZtNnZheUJJXmw+NUs+LjRmem9fS3pqVH4vJld4IktAP0ZPL0FXKyxJLys6Okk5a0Y+MShkRFlbPnpDN3pQPUUie3Mmci8wL1c5VVN2MVVxdk4zKUpneHhNbTM6Z2Y6TiI2R1E0a0poRDtJe3oxfDp7enltZ1pOQ19jbEJ7''@;'; put 'put ''Q25FUGF6MVlIZCtQKyQrUCxhNWMydlltISRJK1NsW3hlckJAOz50JHJoJUpJSWhLblVse18+QSRYT1d6Vn5WeiJsRyJYInNPd1dUOl5MUVJHdk53Q1J5fXZHJStUfDApLG1LZnZNeDd7fiZJdGZqSnV+UU5UQWNMRENhR2V3PlJUKFguakleSShoM3hofT5XbmlheWlLZi8xRG19IilucVhsSjlg''@;'; put 'put ''ZnM9fW9tfiskQjk6WyY5KWFUKXIlPiQlXXtBImBrRDI1M2NFTkJpMWZhOVc7QDgoVDl8P2p6cmFLNmt6UDAlM15oViVVSylIJEQ6RWgmSn5HdC9WaHEvQG8ue3s7aUBLeXp2WzclWmtSNFBWLEgmK0E5XXE7Nl9DTnslMywld2pmaWNpS25gRlpNV1JHdUlsXUNZKTwrJCV9QndaQntHek5QfS5p''@;'; put 'put ''SVh3PXdXQUpTPCVhcGhkUDExcTBCZXx5NyhVYV5+WG5XNjlaUjxXPFR3SHd2diR3b2JkKH59LzR+c3ZwViU5KntGaXZ3VGEkSmU2e29DW1hFJlc4bzJjUTErWEw1PSZ4YEkuTVViW3ZMI3QueH57LmtBKC9ZemdbZmFGYXdTbEhlRUo9KyliS1EiPzsuelJvI1IqfGd1JVhVLDxRfHxrVDY5QkZx''@;'; put 'put ''Tzx+SmFCYFEqTnc0PmdpYWVSeDAjenxqalNdKE5JUm9CdypwPG1nUU18Xms5SihXVTo1MHsrK2p+c3xXcjFJIzNydEI0QiJwOC5hK1FBKGhrZGFEOj5HJFs1bmZeKExqdEZmXitnSFk1NFZ2d19gUTY+QFV7fV0hcEE/PT9mSXYvVEAoZmM0QDkpN01ZND5EZm9LTjNENExLRF4uVytNRVRUY2k7''@;'; put 'put ''OjVNSm1RPio/NT9mWk8zd3dPMUh2PHM5SnxdPWRMWDpnKmR+Z318TzFWTi5rX24wTWhKTHNHJWNRaz5mL1lQRnpBXnB9VH5yUCZoInxESS9YNXsrInpXRXFBLFg2MVhISm4zK35ONnBxWntGUnZsMDh2UkYjaF9pZS8pR01ob1d1ekxofDp1LkwmPj5Re2NMMmBSJiV9XzlUJHZWMkgvKH46V3Bn''@;'; put 'put ''clBAXj1JZGsjXkxUe3RIMztveVZ9V1tXXlElJm8rZDhGWnJJbGZtSnUjWV4kLk5yKVN6YmZDZjEkVzM5c3lUOWRYTz8oWGNvWEdBQWN1SjswQ2BwUkZiV1h7NGlDQTlwQUZ6VXV1YXRfYnVEM0hTM2tFZzJPVlY7OEs1fVgpWShmJnFDXXMkdUleQTJYSGJoMFhRfWUkNE1rJFRydGcyY2N+b2Za''@;'; put 'put ''YUBCOHdQKjVtRHE5Pn40eDdkcUsrJFMueix5YVhOa2NNa1BwenI5cmElJiRiWTBWRXhoJiNFXlBjfX01fSFSb0dma1N4VGFIeyxbYilhX2l5fHZlREooYSsxaTlEW2liU2t3RVBFaFYwc0NqQVUrQCJ8X3Z4I1BlK1FFZ1Q0YiFUJGVYMnxEVWV3SmovckdOe3A6TTg8XXB0ZyQsZFsoXkA4UUxy''@;'; put 'put ''I1BlPFRwPz4rfDV+TUg3VGVYWV1PcDZgbzs/eyosPDp5NnAvQzYxSm07OnglUiZVKVRIQ0smbiRZZ3M5fCVmYm1xPG9BazsveFBUL1tjOmtvKEZ6a2tCKCNaSD9lIURVeSh8SXN3ZC9CTi48RF5YMk8lVDhCWyJ9OXcmSTAwTmpaPjpqc2hlJWROb01jaVYwOD1kJX5mTFR6QF08a0trdmtNeFpF''@;'; put 'put ''SytgQzFaYlRyJjl9PEQ3c3hgV1BIfDdOZW98XmlZZyZVLkp1TzAsKy9HLD4qWDd6Xzs6YVVEIVtbLHJdcFdhO0VJej5IRCRKKylQSDVGW3ExP204KmdKOCpzM2J2RHFrU11FUksiJSxiKzhPIXg+fS5qWmJZV3VIW0k5KGBlekA5MldJWyY+fFdmIW1VS2NncklTQDx2dl19OUBzeTVIcmZ+dCMq''@;'; put 'put ''W0tpNWRfWy5tKl1zUUhlJmd6R3plRWdKTG1yOytHPCx9cU9bTWt1TVVUdltHRmI0LClIcVNHQXNad1orOXdzPjQlbUdzRGBXfXExSnxkYzZDYTh0XUttRz1jO1dQQGRgfn1JVy9kTFY0SHlTeUNQJEE8bkU+KFR5X2BZXThbcUl9RTs5WFUjWXddeHF0fSx9QX49c35+MWFxPmAzJklkdj1UfSYl''@;'; put 'put ''ejkjaFJheFBPRzhYYiJPLnBaV3thL2ZWdVRUXSsmVGsjTnBvNWooWT09fFB1c3tWTExnJV8oIkBrbFEkOXhQP2ZQQy40LjFqQmhYI2U2MUlYXWFMeDAlWXROU19kM2BNZGwyU0VtLmMzPypdXiIyLHJPNUZrJFpJTEJXMnRkViJTQngzWC96XTV6Oj1oLztgYmwjPUhWfGR5QHRtW292ODEycTRh''@;'; put 'put ''RChVdFBecXlOS15kO0hdJEBpPWhTbG1bXzVjZXB3Zi5EeFBIcW4rcWl7LDE3VTVsQk5UVlo/R1VQPzBlZlJfTD55UlU1VXxiUHtgcm85ejkzPHdVUC84TWVxcV8qOHwudzxpa3hAaz8oWUdTOW5Wa11mNG8qRiRidCs3I2pDVXwiJk9FIyRCaH5QLjpoTGVJJTpreX0pXVthZCIqOiNxPDxvWnhB''@;'; put 'put ''TnNhP1E9dVE7Rm80UDVCRjA9Pmw5Ul46fFhAZUxtdz5SI1d9dEd7YzhBKmcoLCtaSW1WUCwsNC9JLF09U1dAJEgjYmp7ZFRjc2AiVnU8dFo9MWEkczI2L1pkNkd3IilPWTRIOyMkSjRHYlM3TUJwNDtIelNjXVhsZ008WE5Wcmx5InFlP0E2SGE+TF1kYzRmZW19JW9VSFVWczsraXdMOU94b2Rz''@;'; put 'put ''ZlQ1Kj4qTVBrZXx+fUl3KGxpYDVbV19AdnNEQ2ojOVR4InROMEM+dXBIK3UvKTBtIixPa3RZVUJ4TDhUZGQ8Yk8xIzZyV3d2YEM3PEJnKFVzUmtWYHR8QmtGRWpLRzFlaStCUlksWWNXeEU/UVd7bV0+Iz1BcV4sZXZKaUtNRyVHaVIlKiVkQG4zVF5DMlBpYTBwNTcubE0xdHQrVH0qR1RPbTwz''@;'; put 'put ''aTRhejhmSiMpJSwrb1dQOm5qfnp7K0ZPIVpFU0xbU1tKZF88P1ZPXStOXVpZKGIudyF9KmghYmdqQTt9aixRSXtsSz0qfHAvNjJAeTM9Uzh+cCxiSHF0ezdKKW9BO3pqMUomK2tBKiZ0V1dQczo2T2ZEajNgaX4kJDtUXStudyskdC9iVVB7WSRzWzxFYns3YzNHSHhgXloiZmk4RUkrQnk+KlVv''@;'; put 'put ''Wyg8Pn1bZE15QytnWGBLPH11YGh5ciIvejlKfFg2czdPOEFlS2htOUA+UClpKlsqLGIpOFdHIyo1SVZJO29kdVg6OW5NYSN2Uk5uNlowKkc+WVBdV21YOiolZDAmJF07TDlOYmNTLCgsZFNWQTc+U0BDKHdbX3FKNHxgJHBOQHchRk9MaDo+OypzakIwcS9dfF88UDMvRCZ4a1BHQGFaZWc5Llo7''@;'; put 'put ''VEhPM1tjb2ZmMl8xQTssVVo7aTVib0Jneyh6YWxtVjNrLDpLQlMrOCpMUTJaPVt7MFp5Y0x1ciFzNzVkJmhndiMhY09gekY4RyI2RnckYX4qYHpQTFdRWHFJMnZSczsrPU1FQ2RReTBNVl58bUgoJXVtQGA8JT8re35SMj5jRGtuXylfZT9LN1RhITtBVThzeVV9Njg+SEghPH5kamVDcEgwL24l''@;'; put 'put ''JjNhfiY/YVg1elc8QzRLKHExNHJAI3hpWyk4MzY1Q3syIT88OE1GbDJLbmg7SkAkNU9iOEt7QTIvNG1JP3FVKlApSl55ZGZEIl1valZEc311cS9eIXtYKSxvfltQN1k4Ono2flBQMlgyVmwxQmxxNUtgSWUld0BNIU83aH4+OVlvfWczZTh9biZhP2xENVglJkd7fSRwV0x0YGE1Z0RsfitSVExY''@;'; put 'put ''NSFnS2g3cSI3Vit2XWg7dVJxOlpQJi92fXAvMnhtU2hsaG5kLEEld345Z2csS3RGJVcvJnApL0E8UU96QCpGRl16PkokZSRrVnlNVSQ7RSV8ckchfkt0VlFQOlNheVlPIWZnd3EiditWeXMub0whPCM3Mm1AeTF+STpSbXpOMC9EbEVLWHhdV1EibXVHUUUyQ1N1al9Ka3ducCtQdjs4N3wySDpt''@;'; put 'put ''RjBuQ3BuI2NOKz0hYD9YXi5FaGleLGdQKzY9bUBKSHY/UGRUJG9STGdySDM1UmU9fW1yMTQmfk1zMEQ1bVp9QEhxbUVpfCQwV2tvSTxNOUo3IyYyVH00T31gfjNefDJRL3xkfUduUH1eO1JXezs9c3EyI05DZFdocXJKPlZmc1JmO0tVK1dFaC80Y1h4WjUjYCRaSltze0JHbk1leWJfIUw2N3Qu''@;'; put 'put ''YStAOVhGXnFDSl1vZzRMKjIyWFY7dCkiQ3wici4kNzteQ087a3ZYRUpYMTZqa3UrbUF6bj1vTWNtKmo8aytGLHM8US4uYnxBa0ZWMDY8ZTlZVFcqbkU1U3B6cSF7VTBgYyoyUEtlUntVPmskP3xUIV05OmJeaCQkM3J3JGo4VjlsRmMqMWhHIS93PDIieGFBM3gyIVU5LH5CIThvJWBqRSs+VG83''@;'; put 'put ''PWlmbn59Qj5mT1c+b2R3Lzh5XyJZbnUhdFNdMGFhcW5LLjR4TDpdKitAOFtTPFdefXg0KHskSTFzKjhtWDchP2BMMjNvMFBWQnY0OXVxKl5ma14wKGFYOCJBRG5GOWl4e3gsSm0hO2oiV0MkSnwlMHwwKWdzSHI8LHNeZUxtS1FEK10me25wNk9lLlB1W1Q0KHNadj4sNXA1cnEvNVFMYXtHdiVE''@;'; put 'put ''RiJHflplSGEsZz59K1Y1Oj9VJkFkOkxfaSYoZG49VytmaWpnRCxeTF0zTkkmKXkxaCxuYXFUOmJLKzZCZVd8PVlQY2pnR1RhaUk7c05Cdj1uImQ/TTw6TVFBNElxempXLmk3OkolfU5adkIoZVRZPl1lJF5fWHB2QUFPMjtgZkJQZj46ZE9PdCtOZ1lzT2sxWX4mcV4hOipUMTBqPiYuLylxfjE3''@;'; put 'put ''Rm9qY1BaM01LalByPGRTQG5LSWdkUHVnOEhrMGFGfDpZcH05Kk5jKiNaeGM8MWJWTzh+Y1FyJFQ9Yj5SIX5WPSR8T0I6TFJDNk5kNHBIRVVleWpFSFBWbjcoZHR5QXNLNHhmUm9qQjElfTg9VyZSL0o/KjMiIXZ6ZX0zO3VIfCo6MDhJNGByWVV2OEZvRmMiaz86O1VIfjZAX0tlV2kqPTFiWUpC''@;'; put 'put ''fUUqOUJRJCw2UXtAW29IKSR5enFaT0UoaGB2cHJ7fjdjIlhGZi5DSWdVcWZGeEBQc1sldGlJTCZSRDU9eiVaemduOWRJcWhoTHl4ImEmR1ZFRkt8Q0tMWj1MZnojSH5tQmRyZSxMQjYpaV87ckd3eWU2QGloT29MZXNxI0FJdzhuc1g7Vi8ySThqRCImb3R3Qjd7WjdeYkcqVEQ+bkMqNkNYZVlV''@;'; put 'put ''XTVAUXhlZkB2bSwpJHUwVjhLRyQjajEpZCgsPElFeDRGXWJXUHpxMkp1YCEsPVdoJUtvVWIhQkpefnlRWDJTc29Ce0BUfG9TejJ9TC9eNnVsRGZgUSwxcEY2K2lyS218S01jbSM1VnVJeHd8Njc4WU95cUklQjpyLkpbPSg0PCsie0hvLERvRXxhTHp0L19qP3csNE1pbH0hcnFYOyxaNGwsTCRX''@;'; put 'put ''PnxCXWFFaWtEc1dYPzVzKkViVEsxO3I5MztvP216PFZudHZJIU5rNDUuRUA+dyU2Yz15MFBYR2U4Q2FIfi9zd3l9JUAhMVNYO1k+UHsiIzpnfjxVcWtPOWF2VHN1PVZuV0NVXTJaelN9NzAmaG1eW1N9NzhCXWVHZyV7I1c8TjpLTlEsNTl3YG9TZzliVVhzc2hpUXxWYH4/MG5DIl4zd3chdWo6''@;'; put 'put ''Ujw7NDglQzI/aUx0Ij9wJG5CKF4kPUIzYSt3SUg8SXo0OU5HS2V3diYxclBTUGhhbjw1QEBPVylgfCpOX1FkLyU5V2xiZTo9QzNJRWVNPUFdKTVOb3RIPlBQLDZFZGJAcWsxfENKeSl+KmgmeCp7QztsaDRRdWtOc1M4dHpkPzpPWmVdbCREQ0RzTih6YTtAQS9ZYU07IkhNPFVEUi9XdGJbXS9J''@;'; put 'put ''bSVkLCoyUDAqe0dTSX5jSigybTJdZlM/aTt5d3lQc0xNeCFpQG1UMGlaNlB5dyk3a2VOXnBCdElMP0NXQCU4Ri44Qk85Rm5tbWosSkJOYm9UK2ZAQVI2TGlgKjFpRmwvOlZAPEhsYWZhMyNoQnoqbGB3Z0UuYUFPZUE/QmxzV0M+VF5wQUU/RkQ6ImVifCRWRF9aRHVgNlJIaVY6eS80I31AL21r''@;'; put 'put ''c34xPFovbS4zOlR9RHF6Mm9reVNETWs6RGUjNG01bDlkQCljJnZEcyM4b0Y9NjlHRFcmNkN3VWoidlB5QnUsNi5QIzI2d2NxQCQ6KHo1U3tXa08sKSNMI3BAJXt5Y0xzZnMqeDJOS2Q8SlFFXUY7ZiYofE0sSFdVNSNjNDskUzhdR35waEpjM31DfT5HYHd8VHI3LHh3PHpbaVptU3Z2ZyNDUDp+''@;'; put 'put ''PyVOPkcwWH5YRm5jUWhBOnRoRmdwP3gkJUw5MkM7JCJoKFpfQGNKX0VPPTBQQmVNP29TRHV3JmhgMWgwWVo8SC99aCt5SmFNPlFeMF0ibFpDPChUSEBGP05WVGwwLltINWc0fDpvWitbWT45YnlIKHMsfW5WNXtUeWd7TUFjOnNFMGNLW2F0W2h+OyZgJXdeeShYSUkqaEpFclRmKm4uJi47cGha''@;'; put 'put ''Z2VRMzJGeXh5ZWpPXS9IYXkrZVNzM3xyazVQIX1kcy8+WSR9RDYzPVdLN0tkQC81eCtqWV5tWVg1VHUyLHtoVEJAdDZ3PSYlWnR3VGwjfHRVSTMrZ3hSLEokQHpybmJ8YUo/OGYzfF49PSVQVExfSXhtYUZNVGtBRUhXfWJiRl9ZMUhxMUVsSiYhfG9FZ1Z5IjxWKiUhTGljZXI5QnE4JnYoJFkj''@;'; put 'put ''UCE4fmpXJlI4Z2BXQzJCXyxrQj0hVlRSUW02R1RiTSs3SG1TeDVZIXEveztadS5oRVRyYWRHaCJKWUFfQUB3eEpOcysmIXxGKSVLLEIuQjM4UDlWTX57emVTNmxheX4kdk8wJFMuK1I1MHRkTyxyfjJ8L1hlOkBeLDkifUs4PWchViJWUk9peE9hSnF0OHY/UCtOUyNiO0NgZ1ltPCViYWFGQjIu''@;'; put 'put ''ZHpdMShObl1QaV9PLFtFUTY9MkkzKyx0SE5xPCszYy93ZXdlT3RHVFNSSy9PX1c1YX4seyFpeSNOUGtxN1ZqSDtVUEIzO2R1WzZyRiEuQ1BAbDUhYHx4V1Ilbk1XPG1GN2JbQHJEK0Y1L2pMOGp1ciZKcG1kdUF6K117KGkoXyU/VkhgKWJCRC9MUmNfeUA/W0RiUSxYYnBAbWZ4NiIiTCFXd0py''@;'; put 'put ''TyNGYVUvQ2lIOGs3OWErOEouZytIfnAyTFN5XTMwQmRfT0kuJiJ5Y3MyRHZRWGZvYmFdMEJ0WG0hOllGMF1RP293JnVXejNMbiNYfmYkTlNdXU1DS0IoVlorTU5bRGozMG1CKWdgbmBaSCxWM1F7JS50NnBDZnheN1t1Uz9lYzYzMW0kXW5FJCxDd1pXYSlYfTp0dFc7SiM7IWcxMUJ3IjdmPFQ6''@;'; put 'put ''XzJBTy5dQEVPRDZBM3A8KH0/ZUJtaUZvNi5HTygwfldqdnZhW30vVk1sTi9oWlB8OXQrPGcuXXIzak5XUD5YTDVvYSNbRSooakgkMCVqU01WJGF9SzRxNSZSOypLaTthRU9BRz10VD9lT0JiYFUhRlBsWGs+XTcseDw+anZxRCxqaGZuZnRJZChraVVkZzhJeGxwTUcjbC9VZ25IK09CUyw6c0Jr''@;'; put 'put ''eXdCXU09SjdVIilaMkp5O3RLWEN8XltEQitXUHFIZHVpSTZ2TDF3bWI5bkU3ZC5+X05aeWhsQE5kWzZQTCxyRGsjMlp1Q317L0UrPWVVQ1BzRWpqTmZDKTlgZS91N302ZF19aDBQMUd3b011WShJW1VUQF9ZKyJYbSZAcUxncUJYeCNVYDxUYClpNlkiRTUuMmpaMzI6dXdLVXZiXlByRFluZ1BG''@;'; put 'put ''VzhELiNsfUA8NWw1U0xCeTwmMlVxMVFwcj4oTmNHOkZPUzR2Qi5eJVRXdGFQIT9ve3JzQDp2NEQjfmxWQSFZaUEhdkVadDVUY3F+JFomT255ZyMofnpTJXc0S1ZTIy8qOVVRaVA+cGBBL353RnxKP0E4NCE3WmppYDM8Nyo1UkZ1eE5MV0xlSi5lN2ExZjZNQjZoITImP3h1dHglSDlKWVN0U1pB''@;'; put 'put ''YHMhQ2ZeWz5aaiVbWDo7RmZVeztVQmc9UHJiLHZISn5bYkBPdC9AUmBYfkVCRnpFSSkqOmRZUXBmNCQ9X0Nmayk9SV0zdUUzWEc9JElwOXxxPGNDYm9vJUwrQV4sPD8wSDwzIzRBKCIiY21zLzNZa1JWVi8oeF4xMmM4KkxEKEBWVEp2M25jbl5TZE44WSJYRUVwPys8Y35ZQC5LfkZ6RW95QCNl''@;'; put 'put ''TDxndmtTKT1kcVEscWImaC9veCZiRDN3fFA6R09oailrZnEjNSpMc2FxPkVpY3U5fisqbU1mIi9jZXkmJEJhTlJ6XVRMKTNKamZGYzpKSnUhZWJWXk9pME0pSjQ+RlV1Q3AvIWF1OGZUSSZ1OUVvT0tsPmxCZHM7XytJe3drYEA/cXloS1dPXUx7UnwjVnQ8JTB0JD99byFpJV99Tk55bjAldkNv''@;'; put 'put ''TFdEKiRjUyhJWW0odzR9XXUsOiFkPyYkP0RvKDMvREI0dlN1OHVJWSMjJSt8MS50UDUhcm9XV1dHb0Y/TWttLGxGcmI8RU0lQjh4fHxLX2t7NU5sNGo7VDhAdiR4XWFPWD8vK3s9ayQ5VmoxWWFyKiVkRUVsc3YvW1ckcFtQMSooRlA9UD9FYHksX2RnYl11RExJczh+aGZYPEFGVU50Rl44VElI''@;'; put 'put ''e2o+TlA7Kzh3PGI+WFVGPVhBb0hjUGUuKj8lKXpLc0NiTD5FUkZmJjY6OCtJSmpyMSF9SU08PnYweixGK1N8fX1SNT87UWhKY195XVN9Wjw1Pil9d3lGY2sodXU8T1orIW9ATnVLNWRYVGw0TGdMNmsmNXJSTns3fnpUdzElPmUoaGF+eHNRJV14bEIoey99T206IXE+ZWAic1pRYnJYJkplYjR2''@;'; put 'put ''dWoqQGE8LD0xOkd5VHE4QzVIbzI+S3kpMTpjLjgjalRML1h5KkFnaD98W01ZSUYvIUlLQEIzTUJoSF1VPS8+c2gwVCY9ZyJwRiZlVXhfbGMxYEIzeSpUXWAmKUpZb19YbkxCVnR6L0k4bSg2RkBzTn06Tks4IjFRSUUsbEAlQzApfkcwMnhdczIrYld4bWlgVGxGJlB3VG9iXzwydHBbbk0iTCF3''@;'; put 'put ''PytZLCg2ZDtWSH1BRTVXTD4uTCJoU3luaDZBUkZmOjFuZz5ANjsqaVpbL11vU058N1h8fGxkfl5aUT4lJTlYPXZNPjh4eXdrbzsjI011YiMrV0s9KDZUPVYjJEhndnlMXl5wcTFWN1lwKX1pWVtydmtsfS88fmNYc30pKVVycSVIMk1HZDJHNTF1SXMpOSZNMTFtZ11dUkBSO2QoaFhkT2s0XXdl''@;'; put 'put ''d2t3NDtsZXxuK2JfbywvcSl8fl9QPT1lU2o5a1lBXW5CdX4wL3AzS3g6TjI0KE0rLjU9PTAvXmlkeXh4VWFFfnpQP3ZfQ2RhRWY7NV12dWoyOTw1Tz4hOTJKcGU/TkNzc09JJmRwPlsve0xbRlBkZFo/Rk04Rit+fD99My89NVAqK1Jqd3NdQjhfMyZRa1Q3Xm54OiF7UDdtZ0JnRCNELDhqY3E4''@;'; put 'put ''dWYoMD9tNEdCXjNYLEVpPGxwSTlZSG4/KVUoVXdhKkRTPDphL0RIKmVfPENCMEc8dFgsRnguTE4hKWEjXz5jcF9PSWVaOiVZfjdfXWsqfnFiRVVZWn1+dCIwUkdAejRYa1NVTFNAQjE8ZkppeUVrST46dT50dkhuWXFPSEwrL3FuLH4oYFspNXNuejowYjclTXgvRlh4TVsyYS5MXyx3bipxXS5O''@;'; put 'put ''a1NWRWZwV09kW09FPTROenBKM0AwN2lRd1RAcnQub3p+JTRnLEwxbyp2WFRrdlZMVUFqIXRvY2xIIUJ+RlQzcl4xRyRkVzQidzwkOWtxJGRNdXRXJWFfallnMW4+MVJke05ZVDs1UmZLX1ojPnBLOEBDdzQmYzgmNUxse0ZncThvPHowX3t4V1lkcm0oOF5wOm4mJG1bdGooISE4NGRJV3E9TUEh''@;'; put 'put ''W0dHfU87WzlVVHc6MWUkTU5tWip+JD1LVWp3LE5uaXgvbHYvck85Zkx8ZVZmK1FQdiImSkZ0KWhCeCFKT1l9b2VXTH5uSGBOJDM8YztoQEprV01SYUAoaG9ncjtOblVrcnVLX1VFNXJ1ODxUOEdiRGp+SFpYWFJYaG4wa3FmPy54I2RAPFNfPnNXNHlBfSVwcTVHflgkfUZUeHU+S2pGXiZlfko3''@;'; put 'put ''dX15TGhrbzZnb3JnVmQmJjdsbFIlUkM9ZHFqKXFsO2o1I2Z8d2xhXkVdUjYjTGQmel5nUCUkdC9jdj1iU11qXiFpV0IpISlJeSFeWWNCe0xvb0VhXVIoZTM9YT5rbkI5eUc6NC5hc0tJel1MNEA+VzoxNXo7eDtrMyE1Vy5mUiY9WVA/TTE/SGEoUHVMeDE3eDk5UmQ1c1E8MTZzeXg5Y3lVSG9S''@;'; put 'put ''OUZSfHg6YEZlJjIxP1ZqYj84Nk80cUtVaTZRZTRhYDFdI3xKJXc0fXldPHlNTUduT2JhNm5Ta0NeJHljNV5eMD9vU3Z3P1lrcGt6fSZgPzY0Z0RmbmNFMTI1RHM1ODJRVHd5WURsNnd5TTppSDlIW1ZYZlkvNiRlaXRPWyx4emgrTyh1JiNLMFIhZj5yUj04fFlsXklpbF9QayVpN0lTdlJQbH5S''@;'; put 'put ''dDVMb0slWUc4SGRAK0dnJjJVeEl3d2dPLypmcTNibkUqZCFbKW5gPXtHfWxUT3x4VGBsaW8zUDxnZ21lWjMrIUs7Pz9gPkgxXn1ZLGEwUXh1I1IzUjcpYSlMeiokSj9ufjNpKmNZYiE6JiZfaDxMODM1OC9eTnN6UmhgTjRvSF13bk9WdVZuKW1tfHE9IkdbZkwlOFNrYUl1WHN9STpHKFdmRjt2''@;'; put 'put ''bXt6WSZUdi5RSkMzVDZwIkZqYzBjO3Bjd1hWJHRgO2ZkbnIhdGwiKXA4aUJSbipicjt3YTl3IiI0ZCF2eW48OlRLbyxSNXlJO0wyUGVVWUpGR0JzaDBuVG9PXShtRzBAKldtITowKmRpMyM8QWBWQm07XU4uLnU3WGVsdWglNDFbK01ZU3V6IT52WE9+JT1BRHFkT0M8bmtQdUNGfmJvK1U+eGFN''@;'; put 'put ''ZSV5PWRkel8rQmFRPCQoa0VpK0FeeldOSlJndHQjI2k0KWopVV95SkRUd3FsYGlwIXpTWm1pUyZ5VFFDOTRCVzB7WzpOOzJnZkg1OCloem5pdkZNM1tbNCFMbVRePCpCRndXbV9lfCQkIVZxbjNZO25YYkJeRU5IRChuQDBaeyV9WEYlYXRVaUtiLFRlMXt4fmQ6M2djfEUpRyI1WSw9aEkyQlVD''@;'; put 'put ''RiVefFthKyFkYzQyKCNWOCFrLnBhVyNlflphXih6MkRFTWEqcHRlXVpCKXM1Zm5mP3okWmRlOlBQY2d5Nyhzc3F5REJHRCh0eFZYQXw6JnRidjpZQF1leT9ASkRldzN0fndHPCosfj4/REhDPWByVSY1ciNUTjN6JCM+WiM6L0ViTVg8bTZLMXRUQlR9S1tkNipUUnZ3PE5VJF4lbnZoJiRKUzpQ''@;'; put 'put ''Z2o0cnRnejdqc2k/YGhkR0xCZmhsKDdNM10/TSx+XXwvaHt2I24vTH43Pjd6eGJpWTUmMEF8RTdKWjpVPUAuK3BDaGA6SjBONmZfRGV1VS9HKVRScHVWU1FTKmVrdzgxNmE2QkImeVhgbXkwel5GejliVytQX0ZVPzFpYTcvVCQ4ajd+ZSpGUmNOcjYoMXdVJDJNSG4iRj10PD9maHZVMj1gNUI8''@;'; put 'put ''WzlqVCVvPjdJX2NLPDY1IUZ3XSwyYyt5TUBienVsYE9wJiZJUTwuXX5dVj4zXko/SkEvOVZudjl+Z1F2YV4hejxZd2ZNdnRUaEx+OzFQITpxRXljdlZjTTF1NlQ4NXtkNVIqXV5HdXdDTldePFgqfi5lbHx2Pj9ASjF+Rkh+dz0pP0ZHdStEcyY1d0R9SS4iPlVJNjxtITROND9hLkNidTVvaFlA''@;'; put 'put ''dFdeQTUkXnF9MFpgOmExN2p9LG1ec2RhOFNjVCVQdzE/YTFtMkZmRE0lYThCdVZheDg6dG5FOCU0UDB2OHVEZW06bXEhbHpNc0lFM19KR35yIkErKDhbP217KDlEciVAY1Q4RkN4MndGRDpSZ3BMeEUjQTxEeGhJXUZ5fF5ULlk3W3JQN105UUR9KFhpfm9UZFF6V0ZxSVp4MkhCIjgjJD9SUVR6''@;'; put 'put ''fmU3emhPT2FQXiJjam1ZXnBUOm9RRjZwTmJNZjlueSFhU3UpSixwQ1FganI6LnVTO3Y9RUl6b2tCLjxid0RJdlswM0g9IzReOz9ofW1kWlpNI3gwUV10US5RaXkiWisjbVJdckJ9UDN5Z3tIbypNejY5SG5qRmBWN3Qsbml3emREazRhbihTendLb1lAQDBPc2E8dHVSNGNdR2AoPXQkfntDYkt8''@;'; put 'put ''KUl4UTMwbU95QUhSSiVLIjpeOXJBTX00W25xdEp4dkpOcFdmdXpCXzBwQlI8OTRuNTxxPkQoOUNlN3gifHk3VD5COzIzYXYpUnk0OH48X35wfERWeGJ4JXF6djsvIWs1JDNoellfemRQMlUxSlVDKHhjR3ZiKFsvTFNRcFtvM0MkMm9rdiFOakxfOVhjWT1IVFAzTT5LdGFPTEhpMWxtcT8yXjRq''@;'; put 'put ''RX4rJD4vT31IP25eQWJOJD01M01+WVpraDElL1Z4NDh9WSFGazBYOGFlcnZCQixrZUhXdT9YS1Izc2NdO0JBent4Y1pNTWEkSV8uZnJkbE1dU2wjaTVhQFZhJHg7VzArRiRjQHhmdmtdVVlqZHhDIkVhQUNAVUY6MUorbW94MXdZTHlMa15HUF99Y1ZubGc3dH1sWkZtP3lmP0s7VShYQFchc1cz''@;'; put 'put ''eEJmYU1zSXhTYnx7cHsqKl49MS8uWlBROTluWXRpVnJQMDB3M28haixjdDJjXzVPfTVpOjJ5b0dHOFspeiJ4ayNMdDt8InM8PUwpYUlAPkxnMT8udjFUfG5CV2lWNiQmPyo4aVFYdltVWnxqXjQ0YHEuT3pfV2dZdnhFQEw1fEpfOTk9QX57PmxDNEIxPnRZdlEyPF54d3JeLEVqLmtaMUNxcl1x''@;'; put 'put ''V0MwSV9majZwfk9+N0xgLiFDODJSZHtHPiQ5ZDxfUks/OGZzKTErVUg9WUFwfX5oJiR6IWFUOUxCQkxBczFrKzZnYjBAJjQzS3k2flhnSiRYY0NnOm5OLihNOyUjT3xEKENjUl5OSjpdYE1YRm5WPCN+KEJOU0kuaFBHYktdVm89VzAyanhwQ3dFNl80NlduOms+Sls7M0E8Zl9peWAoQkNmaV9s''@;'; put 'put ''RVZASy56Ni8uMG5oeGQ+akt+WlhHfEpEYihHX0E4Tk9PQnBtM0dCI1hUXShCOnxkXnA1NkckNHFbWV0uO28ldltPUGR8OEpgIkFTYEtkU15RYzojZlpWM05jSGhPW001UCIpYiRHR3JCL2g1bnwuSzwrem1WTmZfRnRpd3xXJSRuVCM6P3gweDJmJmJrIXd5NHBYYDEscC44fldLbTMxYjk+YEFJ''@;'; put 'put ''V1EodGZRYz80I100I3siKklXNER7bFBwYF5TeVFKbSlgdGEwRFNqKlBjPkhZcFAvcndFQEtCK21SRGMyKHUzQ3ojM0BselBsKSVsWFVyOVF6cEY6PEVfX2peYnVSeXdVa0hdbU1vIiZ7RlNSTiNqa1g3LlBSQlNCZi40PkhCSEouWjxId0ojSjh+VXciJi9zcSUueUs3IyxNYV5aRlt8KVFlLj53''@;'; put 'put ''SEJZKU8mcUJqI20qQ0VoZHsjMHRAbjc8ZEMqV1BOL09uKlp8WyxdP1B4KGtSUX5nZzgrTiFwWGdmPWh4RT1UT3shK20jO3p9UXwsKC4xS1EvdjcyJCZRbjVmKFdbcmA3WSw2Xl5HW1Q7YigxMlA+fGRja0M4Nnd5Nyk9IyhEJmRjQEVMa0A/MVFpW20kVz5Hc1p4M1Z+RmZiZkoqJldUUncmTWF4''@;'; put 'put ''UCVnTWhGZURzYn4sUWdjRj41TkNyfG9lbHlhO1lWd0JfWFNdcl5jREhQU25OWSUmaD8yTGBsN3F1cHlyI05reDA4NCZaOHc9ITshJUJGIStKJGIxaCV8Okw0Qk4wKj91L1h5WU9vImIvXyshXVdxWlNBLmQrYjJ+LzsqYSY6Oz9LaWBMYHQwMzU4fGJrLE5naEMqc045RlVrP1kpXiNvLnlzVlAq''@;'; put 'put ''dW89YlVNV3hFP3RKbkJrdDJzRjV3WU90aCNOOHcySUxjNjRGbXB3XXpOaFBne2V9JDZZcnt1OkF+IS9QfnR7Xn1xM0pxQH12bDFyL0ZXVjxeIUFPTVJGYkFNMDU+Sj1We0hmdV9RQ1o9MiVUS1d4al92flU6QTt6TFBvJiIxWyE/fWYuKTxGfEFPRnF2d35YbjZZY3NNXixHfkpebihWOltsS0Ix''@;'; put 'put ''cFE9cFJCNGVkQ2A2YFFvaEk9Qk5bUVtQMDIuJVFJNkpNPFdvdkNvPSMvfW1hc2FNQDpqTDRKLnUvaitdPio5cE1NWGJnLiN+dHh1YCRSQVhkfFYvRVdCVkcsVkxEOSV6V0V9SExjPVRxLm53KDlYdV80YSJDMSIhdDJ+UC9AQDNbLG0vSWMjd01vcygjOyksKFRlczNQL0M5dCEsaj47KyosdiJv''@;'; put 'put ''dnJHSnBoWFUuTHdZTF9mfEI0N3VmLFhSKmxIPHBUZ3hZe31RPUx4Zil8VSNPKCVsL21NTGRbZyRNISlndmc8ayMufnlfR34yLnRadWg1YmFNUHFWTyM6dmZEen03JkdDOEUlPHV0eDB1QCQ2Qj5YWi82UHdXPm9LNGRgfj5pO0o7e2JBQkd0d3RzVV5GWVVnVWEre1F5fVczfER3IWBXUnY5fiNO''@;'; put 'put ''e09LKVUuZVMlTjkpbj9Ac1VEfWUiR1hCQDdeTltiQ2BFe296TU1mSzk6Kj11biN7a0hETlAlMXxrbSY0R3UoTEh3fTJGc0FhXVREbVhWfldxaF9DIlFmOn0jPmIzYk1DX2g1S1d+bVNleWJrXSpDZFp8O3wpbzJdQ0UuLFA+c1MwKX19Jn5CXkdhKl8ybUE4NlNlV3YqWytCcWE3YDNVejNoJStb''@;'; put 'put ''MWFELFBKK1B1KkdqMHx+S0xNSmxpUT5CbXk0SzpSOUpyREt2Qy9zakVDMT4zak1qOT5JMWt1cDlpYEJ9cU9YImJ5fTVNLFlwbEo6e1k4djdkLHQzR0pRbS5MNC85TkJpOSVkZGpQI1hhdDMlcFpxY300bX5+XVtGKUxkKH1UL0QmdUZwIjNKSkBTaW9hLF8iMXp9OkMlb3F7Rnl8TzhDKFNvQ303''@;'; put 'put ''YHtuO08jTGNiSSl3UGhTW2BkUFVob3RkSCF1OlFnNnY3L0dOW3ouJSUmQUg9USVkQ3dNLnk5bHleMiFHfSxzWUo7UGBPJCsjOEN1KCQydjhGSj95IitZUCguLyMmSngrWlJFfGBsWEsvZk90PnpST3cyRkVzc1g4NyxdJE4uJGxnXUh4MH1lW3VoZ0IjOlhAei5TLHVPTEl2ImlDeVM+VFVjaENd''@;'; put 'put ''Ol8pQUZTPz43KHN+eU5vZy9MbDt8UVd6Wlp2KDFnan0kNiRhYjNpX3ppRn1KZmtqM101IiYpNE4oVHIuSiQ0aUQqMyRgdGp3UDhTfiJdN3I6b1pRN1k8cEU+Jkk9U0o7ZSpoNXB9cmRwNkpjJkt2OzE+M3ZKWyYwZC4oSC5XeXNsWE0hUUBqakczWnheSSVaSFl6e2U4PF5WJlkwOENTUlAqKF82''@;'; put 'put ''LjlXe0VqLE59OldeS05UJHpPZ0NleGNuZm9HNls2TCl5fGNSdXF0R1pYaVI4OXJnYj5PT0swcEozQEdSS3pjZSlJaUVSXT1ZL3tFUkZ5QUc0YGJZOmQrO0NqaCR6ekNQNDtBYSNLPipJRWwmLGFMOVNCSmQpc1dwUDFJUmxySVJGfS89dyM9bUcuWTJseDdAfiE1NVM7UzhBUWZlMj9gNkZ0bmVn''@;'; put 'put ''IVNVW2dzPzwzUTRkIXBPRns7U31yUndYb1tFQTFLaWMhN2JxNmtrV2tAKV9EWyF5MGElKG1Jc1s1bH0wO0ZwfUtVblVeQHdoam1AWVhFMnYoJG5AeGM2PygxbCowc1MiMF1yJCZRXkhKSV5AUVNdOVtSdk5HVXk/NT1MPjNnJGckNV50RT1XQ3NIL3ZfRTIvUiokJjAsbjN4OH5CWzBBLy9oKldJ''@;'; put 'put ''fVcpSnZbW2sqY0hUfi8xIyxXSmhjdj9uV3BaKU9FMUB3NnJCKDtVXURlfnlIYkB0QVYlQzAvYkhAYWxjUmYjNjpAI2xeYjgyOixbOzdGeXdUUVp+eEUse11CODVIeCIpZSRjdCQ2ISYwI0pdVyQ1dXFINzAmdndCPj5Ob3JEPURfJmNVciMmIWpSQUZSPXw2aE99cXVUZmlHMjN1LkdPPUdndnAp''@;'; put 'put ''QGRLTEBWQ2tpS2tFN2tsVVVvSSV+dFs1TyNBdyxnMnRDMWNnYFBjU3Ypd3w6PjgiTWhzVmJZYlZpPD4mdldtUWZGOUlFaW9ecHN0QU5YejJuU2ksV2R6TTdid34rPTxQVllCO1BecFdFfGVEOHo0bXs1NFVqIzdMYkR+VkMkWTVfPlUkW042OmtCW35gUUUzQiZTaXImWXBLbTxxYmc2OWc9ZnIm''@;'; put 'put ''QHVBcyokfnFSMiNtcnZfVEtmfkc3ejY9dGJ7WDN7O0tlZm10QDU1WVk+ekNAWSxKKSs8U0xCN3VbKD13XXBgRk8jeClXOjJpOHM8dV84KDg1K0tfaWxQSGdYSWN3IUAmeHFtbXY1MmA+PVMyQkA9TCZXJl0pNEQ0PHljJFp3bVR4TCYpZV50JHxee35oYm0zVDBgYVtqKm0xTFI7RWZ2WWQoY2xz''@;'; put 'put ''P0JpakFJZiVAXmdadGhoMU8sTG1VMCU4WzB9cUh2ZzxIfERhODB0Kyshbl41M1k/JHE3cG1ieC5qfCMmKGQqTl4mVVhiR2w1NHpIekplSmpkc1FYRTlbWkUuO1taOnNFRSh+VDByRWNLZjZAYTl1clpAaj0pN20/MVFvciNGVn5MN29wLiFCYV1uYntyOSN7TTQ6NTI7VV9ffWssfDxZJXxyTmpH''@;'; put 'put ''ZSJZUzxjRzQoKS90WWlBPUIkdjBARkFTNjhFNDAzTGFrUClQaD9kU1NJM1h6bkBZbkwkPlNlVWVjV0skbDdsN1pRejIlM2djKTJMI3RuWCl2KEdoLkQ+Vz9LYVQ9NnVmKnpWXUxmXUwoYXYsTlRsW1l4dWZ3I1dYdlFBWnNoKldhT3suI3N5T20hZVJ0U3dMVG9feX1qTHAmSUUoTTJpSitnV1FK''@;'; put 'put ''JWBaXThWPSw4aVBXL1dBdV5UTERddE4lLyY2b0U0NiIxRmlnfEUlUG80SlQzdy8rfiE/dnwwVUFXOStzZyN9T0I3Mmc9KHYvQUBXVGlCTnM3Wj07Z3hNaW4jN2YqUi91Iyt6e19FfVYyZVNZS0BmXUZ6Jn54Ukpyb0hTNkMwPjJNSCs0PTZYIkdgXyFCKE84dGI7Wio8JkUhKTB5NmBwQV1qSk1U''@;'; put 'put ''PCQ/UGhPKHIldzQuWSRWQ2p2P35+fmBTPEolQlRrSDl6MTE2ZXhmNldbOVM6PjorOXwjQTh6YiY7UTx5Q0NrR1EoYm1UU0pQejlhS0RXZSZQfnA5SGh0Vmw7Q3drLnlKTCRPKl5UQnRDJCsxTkt3SEBFNio7UF5MX14hWF9zJWVkUChzSlRGUWZuazpNOzhqMXB8ITgxbzdqYD8hOkB+W3grJTJO''@;'; put 'put ''ck04VD40NT0lRjtUP1ZAZUY+TDpVcHFgdzx8Yj5qUX4vSEtmelBrIVZoSDRnV2ZBYTJVPihmJFJmc3IuU21EKWVAUGpNd1ZoPHRIXSptKHRnUy9iei99PWt8QnVlaiZOfSJ1U0tSTElHcVolTkJlYjxVLmxhPTwhbH00X290P0xwUyMmI2cjK2ZhNWMsSCpxT3Y1Iks8dSZCPkl+KF0iaWpXVGpN''@;'; put 'put ''UHRFSC5yXn18RDIrYC8uel9WN0taWWFAXT5KVjg6eUw4QjFfXixTby8oTks/R3NOOi8wIXVDRTJoVm9kTGs6KnYvfkcuZCpsTzRiYTQ2OSwzM1o/cTNMQ0JCMD9WWjVpKitMUmQwRit7M0VbZW1+PWI2UyhLaWgiJjBsIW8vKURbUiwwSzJ9MEdSYnZHc01TIkl7YXV1a1RBWV5VMEQqaWU5KiZO''@;'; put 'put ''LjxlTVJ7NylTWy4hcj1NX15eXSp5REtzY0NlIi5bcCV7UzdFayRYUmI5LkIiKiRAOkswWlYwRH5zVm9dIyJWLiNWJHtIW0VFRFVldFphS2UiZFdMdSNDQCF7T0F0c05jaDB6MCN8RGEvKihwSmkhZF1QcGZoZEkoRTopWVtLRVdpQ0toS1MyRlN8bFUrVEhjejRYTUNSSSp0QG9QSil9XXU7cUVP''@;'; put 'put ''N0hNLiUwWEVdZms0LGNdZCFMTH1Da3ksXU4/Pl90akM6alFwOTF2L3JdVFU3Tn4jQVB8P0VCcisrKiltbz9OXntsbS86dWcocVJpP09KJjE+UClIN1ZKOkZ5PCpYPU5xeWhzQFRFQGoyUjdWKTNwfXRyRn5UPW8zcUlXJVN4RSNHJE80WVQ4O3FRX207Nzl7K3lxMyRlQDNuMCV0RSRqJVdfPVpT''@;'; put 'put ''fEssZm01I2h+dCVWd0hjYC43Szphd1FIP3xnbl48I1slOVVhdjk8dDV1SzohRFplZH40WHpGI3lRPjtkRHJnKy4rcHx2Y209UnVpTVgmaHhobHBneCZhVnhbXyNrSEhEKTNlWU01QktyV0Z5ck5yUSghKXdmWklnNEljPkkpZiN9Sk5JMU4hMj5HKjNyflV0fmFoVmEyV2gmQVEyJGl1XmhqfTUu''@;'; put 'put ''LCYrMDNxSU5LKjJpbC5ZYkZiJk17VSxgXkJtaHB4RXhYTzlaZT5Dcjd7c19WQVR0OHByQE49KG4+OVJfWiQsS1oxTysiQkM6YDtLW1k1S15CS3YwSk5UeE1jdjJgNHI/Y3ZrTGFQRVg8NzxLZHNHViMqPlglP046PTE2VzRTciRNSH18QnNQRFI0QXteaFMwekJHTV4/WEdzaE42SnMvSWUqXkJk''@;'; put 'put ''MDJ3cVNiZ21WayZgV01hfTdUWGh+PnkseTV6V089e1ZDPTVmcllnelFmfF9CTCk7M2hrPHZKbWxdVVtiOi9efFh9L2JZSSR5bTpbRVs6WkssdTN9RE14OkwwZFFsYDEmKEo3aUkkK0E3fUpNOVs8VW0hKjcoIUNsPzUsXXZee25NQCgkNERLcU9vZ09YYCljcE1wPGdiNmR6enU7Xzx6ISl1fCtU''@;'; put 'put ''TmQkRW44LjUxM1Rnd2UoT29pKTNqfF5zb3cySzQvWFFAd3BANUQjQDUob08wJVU2RkpFSEVFYH42fjYvfVF2eFk2VUREPF00bj01TzpARGZGSTs3ZVpOc0NEPnFVcjZaLjlUOFh9RFFzKyZLenk6TT4qeWlALmdwaDhKNC80QEQxVm08Qno1M0hacnV+SzxqUkokLmdTOGFSfkMwaDhpSjphIlhS''@;'; put 'put ''Xn1BdzAkbVdRPDpATzMvTGhWSmVlX2hBfSpIJT83JXVIWFhQPzBvI3xYY0RidTRUVkx1QjQ0ZVo0MSNlNDJJM0lQRSlQK0Y4eGpPN0A7UnUzT28yWXYlMnVmZWFvZCwje3VnWExtNDtWYE5ReE4sR0BKYClaZG5bNUJQN1hHZkU7JE5kXyg6OW5XPmtISGZIJHFiT3t+eS9yW1A+JFhIPk5WTXV7''@;'; put 'put ''bGh0XXJvUFciZWZjc218JVE1STRPemo5aDhpM1RScGJoMTZPJE8sRS8wP2A4RE1eeTJ4dihvMypSezVKRj43ZSg5aCpTeCI7eH5McGBZLy9QUiJMWiglVlExW1tLLyM9dEleRWkzMGo/O01eUWBFSG8zSVhyPFptZXNHTldTfS8kdSJjTGBGKzc9ZSZDOn1ib2BrJHRJRHo1NXZ5aVlfWThjQntr''@;'; put 'put ''fj1JKHY8JlFTM1JlL2Q0cHAoNUxVX086Qzg0eU9bfCZ9PUUmZzlUMk1MN2NNdT12My8kQUNHSlN2LkBQQjVddjJqLjokWnFBOFNIWVBFWCY6WzBhcmgyaD4xSGxQdW5IOEBgWlB2ZTFHLFB7PlhJVkNyO1QjOkJsan5mUlkvI1M3MkJ0VHlbbTw7bDU/SzxHKT5PQVNsfCN7MmNxIyUxfWd1Rn5K''@;'; put 'put ''flF8OCVRY1RKc14zdSssNTt4aEBIU253RiFfUVNRSTpaQE1ZP3lUPkI6NGY/PjNuQCtIdHJVc05lKSNLOXowMmcvOiNAMGdfZnRdcF1MeD9jeFtZR297aVg+R18iMnUrQGxIbVg2LzRtKWlWd3w+aSVUWyJvWSMkIVNwSG5TRjlvJDlMKCx8JDJRfUNgI0dZWUFZZlhOSWBXaXkoJXRAOXNnZSFP''@;'; put 'put ''WjkzKiZzdjpkTk95dE9ZLjpGekQpOGAzNHcqYUlzalNnZkwkQmlRcWdUU3VyVl90b102PV1uTFZyWmdWflluKVsjTm0jK1BrN0ptISNAan4oanJ3Pz97Q0hgRXY2a0dCakxzI0BNWyJtcXlSQz59USV8dU86NStBW2EvI1hiMnJfLiFNZWwlW2kjQmVGUHlxUmBIfi8qQG4+IXcmYnUvWylhXkos''@;'; put 'put ''M29rS0lHQ2s3IWJDWiNAKjJkK3NdY3o7LDhpZVZYXTtFOCorWntTKV91eDJbdjVDKjNfOT1pbjB9SDJ9aHk3YmZAJGVKbHddODw/PjJAQEFkTG5peXxeVyRDSnVfMU1gUnxvN1BKPShAW3g1enBYMlVfa0UseDhZSGBzfDlHaSZpW3hJeHlQYkpSb0h2VmpRSU4raEIxdTVDdWReUlVmQl07KCpH''@;'; put 'put ''Q0M5LHlAR1l8PWc/czkpWX1McV1fN3s9XSxuL0QyUGhUIUg5XnEyd3k9NlAkYn5aLHlATilQcXEyTUksZj8ubFNafkddbCZtdl53blYqVDQlJnpvTS8/M0lZYjB1WjVTOWo1IVdfb3BadHc5e2wkdm0pPT5xWkczU3c9RnF5e0BiIVckeFB8ImM7aGM8UjdnZ0pWWThqZCFIcGg1Xns3c1lJd3R1''@;'; put 'put ''Y312Rjdna1hsSXgwbFEjZmRINUcufXJ4cE9tWW9zVUA5UEs6YnJITiRnaClyayEqOjI7YUtbemd3a0xVKFdLfSpBa20+TVM+ODYhK2hidkAjNSlKM3w3TUh6fiw2U0NaaD0kOlo3ekZWJURrYT1kZEYlYnxHNEt3LmRVTG95TF5tWHlMfkdwc1REX3MpL0d1e1Q1XU9TYlVzY1c1JDNVKHN2KmJR''@;'; put 'put ''b1U0MGokNkV6KCRSbS5YTVtgXilDVilocnhDTmFOVCh0RWVwdU03Il57RWFyeHtFZiZiIzk4SylmNT9gdTFNY0EvQ0g3PiM1VXdURyMve3lZRlhPUFl3UHZ2IWVbfXYqc2NqX2l9fXpfPitaVkQ6IzVSQGg3JUM3IyUpMHA7KTw+SDNiJlBFOSVFJVRMPWJZQ3ZqWmE2MWlfcGkydHtSWjZsNXdN''@;'; put 'put ''SlFJTnYke0dDdltAXnwvWCVyKFNvQztySUhYTiZbek8uXz15OVFIUigmXlA2QT9QMTw2LlIyS25RfHUuRiMkMG1jQHNpRktuOzdfLjp1cy93UWo3b3FkJGNZIkxJai4hSSsjZkNVfjA9aVBSbXBhJnJrbE9BQ1ROcnwhTnF7P21LaiVuR255THZvZClRMWkqT0gwa3lzJnBmVSRlcyM6NUcpfnFq''@;'; put 'put ''UGw4RTVDeHt4b25GYzlQeFJRcSJNSDVGMn1yXyNjbDhSazIqLmJZKyNTfVMzLil7NXBsLj08d1l8PjZ0RWFbT1pdMjBeLHMyZjMyfGYvd3d2NG9pPjp2fUYjKWopNiNlXSg6X0g3WFFIfiw6NldXcVZEYU9fcSN9ZnQqay5DPVI5VUt+PkVZOnE6TEl1QU96Yl11Nixfc0ZbcntYZWFhKXVqfDUl''@;'; put 'put ''LCV4fGVrXWpLPUU1OXZ7T1BWIUt8dD4pW01LK15OdUVVZj9JSTIkTitBPEJvT0dTcDFnIW43TEVYXXFFY2NoWEtGW3hbN0JpSCwuLGNYI1RPamUmTmtbU2xNPCsvOVBuM0p7aUk6PFhwd2NUaGlNTSJEMkosUWw1bS9CPT10KWV2PT9AL101Wm4kPCEyXz1dSCk7ZmA1Yz04Z3RoNClwRzBbLDdj''@;'; put 'put ''S3UpdCkvTUBGOkkkMX14cip3QC9GIlU0V2YvLzsiNFZlUEMlIU9lSDJEfXg2amVEZHBOfipmSnpwTzV4ZVNhbGtRKTpsTlJHWVBGLEJtcWlXKiEuTjp6fklsKlpuXVtlcVAoTFUsZTRWRzo3dzxER1Q0RHcwRlRHUzRpXjVwVStQbk80aVUhY2gpPzBsWl5zWlhxXTtZLFcvdEp0XT1Ra0JXPixo''@;'; put 'put ''ZG1JUVouIjJgR0BlU017VkIqW2YvMFhIamAofi9rUD07YG84b0FhbWlFezBqTndxb1FMTiVyL3o0eHJZcTcvTn04bzZbS3NxJXNgKVMxc3lLOGAjfkpSYWopW1laRlo5QkMoclZkckMjYCZnKjVLKClQaDtSV09VVmEkeENVS1Akdz1GIWQlSS5hISZgSSI6YT4hcDpeTD9sWj5tVzYpVjtzUjd2''@;'; put 'put ''Jix5Q2R9XzRLYVlMYEVFflJ9NVd7Q2BdQ25CcXVGRzRNbTw4UXV7K3hTZ3RKRkNCZzpCYE1Eb0o/QXZ+bDohWz4seGVufGZtZm1ZZXB0R0YvdUJiS14mTzIiImpbPlpedDciK30mQncxe0ZbPD8jUSU7X2FDNTFjW2pbSyJqeC9hYW9IMFliU3d8YWlDdXlUdUozQ3V7KD98P1kyLj9mX259OENb''@;'; put 'put ''X1BwP2NsX1BCTjZxQnd1MjAkXTh7JCgwbVFzPnhNZDEmTWQjSFFbUi8qSSFRKDNmRkloeklaRTxoIUU9IVIiR1dLZH0/QGJuKU95VzNSWFR3NjQvKGBSJmpWMDkkUyZnOzA2Rl0zUyk4SF5kQChxcCR3KFYzd09he141Zi8yPWkwaX1mSzdlPWAoNil2bUpYUG86VjxtYnklTCZRJUkjVVtWek82''@;'; put 'put ''MzwwMmt0RTU4bkg9bD96LF8zKVBLaHFEQEdqdEhaenhYXm55dSUkSmZ8Wyk7WD46Iy9qcyZkLnl3MUZGbF1GNHM1Q2tQK18iKmdFJElmYTxAZzI4VmxMN1ZnSl9eOjRtUFBIaWt4VF1QdSZRI01mWXkrLilwNHZffjdKMC9qVkYrelgyTm1SazI4d3YoRFAjWzsqUmgoI1ZSUiRHW2pfWzw8bD5C''@;'; put 'put ''WlsuMjFVWj1sSiZScnJRZ1o+e0g9X05gdipIUnQ1UDc+MkIuOl9xdW5kfmdMUT1UZGdeQjEsVTF4YHFjaVkkZkl1dVU8bSZbckBlKDksSlJ5d1V5PndAXldiOTM/OHxJZkxXeEZBeHtmNX0ie1ZnY2tucnYrKjdrcis5YUdmfH56fiZ7IyhpOEQ4ajFsUWNhWHVCdGZSRlJoalpYUyxzZFk4W0kp''@;'; put 'put ''XjhOWntXXzdOUDNseV5KMU5jTnN6U1tPNjskeFEhbEJFc1JyYFZvZUhRQ20kTVteUDRFZTxlVzd3Ty45W3MycnF9SClAWUNhQz4pQXJpTHhsI29IIlRCZlJnWUg4fU5VNXJ9YlkqUGxwM1Vxa2NMeTFJfUM8aVIjOHBITm1ITk9LZlJYcyZmaiEraTAibjckfjx5IW5wYWd4RnRMTlg4PXJBZF1p''@;'; put 'put ''cytxWXdsTUJiMTlKNj1mbWAmMywhRDB7RTNfZyRhT118RWpyQ1BUUFVsO0E2KmNkfmRxZjRAQHs5VGI3ZVsjN1hURyljQDw2bEhrTTYuaTVZUExXYmE7XShVYnReNnBlXiokUH12dSM5PixGbDRfKUxKZ21ZPEVAbng9Xmt3eSt2Wkg6NkZYent+XVN0b2IzRzY6P14odWNoTEN8KW8mPD04WklX''@;'; put 'put ''bHYuVlJnZT1hYSRXajNZNE1beHZOWSJvVVlzcyRxVHE3TWFHR0RoLG5kOkJFPUF7dD09OG52ezlEKmJmZkBYbVI9JCNdQGlHXytKblIqd3ApQkx7WUdKX1lJWChLT1pLNWp2SGg8REFKbjJXJj1aW0gpLmwuNkdZNW1hbSk6ezQxdFEvJkRuZWh7S2ZOdkpLOEdiMG9iQmBIVjdgP1Q4aH4iIiJl''@;'; put 'put ''cngmM25sJCwvSm1zbWBrPnw+aSkhU117RDZpUj5fem8wXShXRE14KVg/ZyRGSCRvZFV7fWBeNldbKmRESj1ZLlc6U2BbRzJ1KEMpUkhYY0VRNTFFNXtmZVkvPjAmfkZKe18hd3FlIls/aE8hSCZPZlZdLEMrOjslQSFNNkRqKGlBR1kmfVIoeTMlPDhGaEIrdXVHcGE5c2osdm9PMXxhdDpZSjo2''@;'; put 'put ''VnFaKjNlRjZfeUgvcyovNXJ7dkZnPHRYRzZdezVsVEM+T1JYWlRxMSxtaUJ7MS5lLGlLYXspL2oydlteYWhxZ10+alM5byVbMDRSPSFTIThEbXk9Nkh0OFhkNl5rfjRnUHR8ME8oKEZ4OCJMP2lpRHpWQzoxKDZ5RG8uemszRSlzfCJxWGZCSGlROjgmdU55SHQvNTUxQl8+KXVgMEs2fExIXTZn''@;'; put 'put ''LiMyI0c3V1JOPDJRQ2hjK3YqWntaS0gvMSQ0XmNNK2NvI3gkZlYlSVJqajo5JDIvc0NEWjRaTGB0dkBvTWAsWV0wJG8pTnB7K3Q7Xy5+dzw+ZVBfe2kkPm1POkRqcHVVciNzLmxtSUhPcj9GIkgjVU5xeCszL04iK1k9ZS8oYm9AVDxDRFtqY18idl1BR0xFNXhAU3NrXkZ+Q1pva1UsdX1xdEtQ''@;'; put 'put ''d15QSyZ0YyowdClyJlEvWnZqUkRGRzNve045fSRJMVtsLEo2aFs9PDMzd25KQkgwJHFbJHlFJVk3V0BhNDBLXVUqRDJFNTc+Z1ljPUBBc1JrRUxMOXJlcXI/bX48IVc6UlhlOiU1VUBaPS4hXkAhNighKyxxLEw0LGZdd0tSa1hKVlAjVyl1IVJ9fTFjZHkhMGMmX0U0OmFYXzBVWkBoWjQ9Q29z''@;'; put 'put ''OWBedVBKd2U7QC9mbEFYJWUmcnh6YW9hZ01ZK1dgSXRrKEBDSXh0LGVvSGhmTHxHaSZfWD4qdlY8VUJGWl1aQ2x6YDp5R25EJmZEZiFGNm5rNjVkcm1dSFFpRCs5W2d1LkglLH1mRkxTMzpgPCxsJm9jcVU7SyYsWkxQYm86RjFbbVBfYEA4RH5Nd3lYZWN9JFE6MkUhOFM6OjJMJnRAP1ssQ2Fg''@;'; put 'put ''SzpfOHByeXdmW0tQYnNnRHZWNXdtbW9dNzI3L2Z5Qlt+RTpGd2tTZkRQR0MvUG1zc05sQ2dOZGZjJF1gM2lMa3Mraz9jO3FPZkI1KGN6MC4kPX46XVdTYD4xSi46ImgrSGp4fXJiRTdRSWImMjhyUShMITdHRV1adCltKWVadipXNVtEKyZsKXM2PW8vdWxaNSIkVmgsK1ptRFBpKkFAalgvUXcj''@;'; put 'put ''a2VDWyZmIllvNzVzUEJSUGxkKkdTY0kyPX5eUWBINmpGNFVOd2t8al8zZWJPQzlsRihgPmZ0TTF4IjVHa2M6JllPdHskfil+KD8rTThtTm9zNGYsOl9FQWRMRntqfFIjNm5eSDQuIyM6ISlYaDBkSnlETCw8TU86JDlZKj9NU3F+cGpgSFtjejt5JmhWb1siXkQzNFpmPVhsbzBpI0xxXn1RXnJO''@;'; put 'put ''WDQ7JD1xVFlZXSxIUmpOXkRtNX5oSUdtP11teiR+LzZrUlJDckpaTkc9cCowWihfQHpVUj1NN2tpcTpaR01zM1k/OjB4aT9hWnB0PU9OOTQkbUdWaSI/SnoqbStfNVA0ZHsmJkV8NWBeYVovRTJQfHBtT3BLVnR6RStgSiR1eGpUQjxUNjh5YHskKlMqSXdGJXtqZHRVUF0rK3ZTMTlvckN5fTpZ''@;'; put 'put ''M3Z1MGUqYmxRe3g0VWVIQklScT9hYTtvaCNST3MsdGlHQ048WTImQ3g5NCFoLGFOUFZJYjVHMS9vKTY+VlB6JU5jP0w4QkViXnQ6RzsoJkQsek5maTkuVDNqeGxMPmZZTzwsZmwlZlMwfjVZUXo9YEtRZzdOOUpgel9MbiFwP0NKTWJJdm0uVUh5eHd7fnVaO3Q7QGdqMDwifE1fezJ6L0JWVGFs''@;'; put 'put ''WzFEZml7bU19LE8ufksvciJSRFA+MXFEdnxCY1FKbWE3PTBofkpEUGZuVjNVc2dGLlFNfVIpPEwuOkpSW3QlQUB+JnkkK3skcj1NRy4hLkVQSVRPVlNLXl98eTBVJTZrSFJKWzphOEpjcj5PVWhiZyRUSHF4cUBoLi8qOzpHJUU7W1p5P1s5LDtXV1BoS0dxenU+Z0pwa110eFpOVHJXW35LWU5b''@;'; put 'put ''fD9iPUg1YFk6X3FBU0MxR00wS1Q1U3hSJjpkOWI5OWdfdWUlXjtELkguLkFjOnRXIUVhVSo4VG9jKTs1Z1FHUmhOOSNpNC5MWyxfXm0uM19Da1ouKlcyX2F1NFhyN2NPJmY1SnpeMTpKXSo/YHxtbCssLlgxemkkUjsxVyRGN102SmB7e21kN256clBzNGVLNWR7ZUNMeXxII31Ka15Ca1tPc2cz''@;'; put 'put ''Ul5uYTIiKmNqMUpoQ3E9PjxtVF9PYFR2e0RJXU92dGh0TV1sPH1XP1BLJSxCPVtXeGgqQGVbd0xEaExVV15wTWomel4+b2UxeSk1Wk07XnxtOVhDYUB4OG43U2gqRm4maWZmeGZOaj4mMEY3L3BoRzBrXjh6SDtdQDNLbnM3P0JEVltZVl9kOWV3IkhFXS9zfiRUTillKFY6cThsTXgjcSY8UH4u''@;'; put 'put ''X2kxRj9pKjQlSEhtLlR9Mkwjak1EelBgS1E/SWdnUUswWDNlcnRHblR2S0tyMkxqPlRTa35CcjBOJH1USGpCUSFeUi85LilEYVBsI0l6b1tVbzM+QTI1RnhrNSYrRiNJeyhoZz9JPkxWYzUoKjc+SCVLUSVfflp7KlVTSUIwZHNAVkUyW2UsWE8zVWdRUEJUOE1BeHA7O14qKUQvJG9bUWxtSHB6''@;'; put 'put ''fnphNUcsK1ZPIV1FbTMrVSNORm5fPE1hWEVvfW9AfmZ8Y1Ymd3s7ekIpSStZM2JGLEg2T2owYl41QGdiWjYrSEFRKFMkMEkhTzlOXStGRURiPD5wR1tfSHQ3endCcn42Y3JXeW4vY0hqQUUjRTNGVmp7XWZTKzkrbXB0PWB7N2QpRjEjWXlbTVA3ckVUOV5rLkclT3dpemtgP2N3MGhXSlBDcnVN''@;'; put 'put ''OXpiTnxaZVAoPCljXSQyZlltS2g9NkpIWG1hRTJGbU5HNTl6ZHpicUluJkZ9cC5vQj8ufnJVaSlaZD8xNnRnZ05JbnIqYz9yWTQ2e1UlUmdjJiVwIyw2UEB+QkckU2dfckIhUU4md1VvbXA9NTRNM21BRlE9e0o1Q0Z7cFUyLypFfHx3bGZxaF09R0hkW3FZVn50UF9Zd00sYjYwXUQ5T0kqdXo7''@;'; put 'put ''KnxVJDRtUylEKyVYai5nLFl9NG87dDU8cU4zL2NLeVRid1MwVjRJRU03Uih1K3hyMXJfKlY9cFBPPlZZdE0vPTUpLF45MmAzamk6PnlvLiRJY21vQTQjNzIoOWk+IT1eKHY8cUUvN2JVe11UWF94XVc4Vi9ifGomXjh6VSx8XjFpIT0+WGpIRiMkb3w/YW1JO2gjKGdAZUlvV3srcmpAU3hYLEBZ''@;'; put 'put ''PEFbPEN0Jm5yS35nI3VMJGV7VztAJWsmPCV9anJpdy51KSpoQyp4dz9MfTxEcWtNPV5CQDE9UUV0I3Q0VVpmdHo+e0FsfDg1VypITyUhY2AsW3NrPVZBVG9bPmopXykvP2thPz8wYytUUyxbYm9tbSMua189PTQkfWYqeksqdGZEcS8lVlN2MV5LfUM1KipNfVFad0QsWGE0KVBaVzhTQ2hAXnx9''@;'; put 'put ''X0NVVkJRa2IldnFqekpwOHF0VV9oUFtmbC9HUGNJTG5kdVp4cHNWVU4xY3Q2PDBmdjBVcUFRYU5FZnZ1USgzJHRpd0hocE1KO2M/IndSR2JEej9uRD97cEVUd3ZDOypgJE5zcnxMZHlHOmwwVnZbSS5zcCFqU0QxaEp3NXBYcGd4KGxzc2JwSTRsVEx0WkBJcnZKMS5USkdRJkNmbXdsRnEodElK''@;'; put 'put ''WlFXbS5LIik5PTlQVz9kRlsqalFpP3c1SSUkP0hkc3QrI3N9SylVRjtpfT1jTStCY05uVCU3P1F1bGA1fm0hYDFQJF5MQE43NyFOImFFbD5nRkRfPlAyakx9JD1wQ2JmOjIkaVJnXUZHKEVdaWE+XTB0bDR2TXlPYStgaGpjVEJrYUM9fEl8dGNhWGlZeVtTMHMjMj86RSNbaGYmPCxCZj5wbmQl''@;'; put 'put ''Xj5rWCF5PEA7KjgpZ2JfZFFKTi9BfWxbfFdtIlQ+cGgmQl88c2EsUktOdT9gN25WKzs3Kzo0WD0xWClOTSJlfk5DTTcyYndfbCUuN2JDInFWKmx3KGN0X0d5UWxmSDUwSFU8fVdmM3dGK1BYVyIiazdDKUIpXzU3JiEuait+SFMhSDBXUzlkQkolNygxaHx9W3ZKP2t5TCh5SEUmUmk+Pj4+ZWVs''@;'; put 'put ''OCUrRChfZFRYVk1iZkREcVk4dk4qUztQcC5zdEg1ezJAMnBWUFtiPiwlKE9+aldJdkVCLzQzaSNpJCI4YDBnR09eWER5WHAqcm1qQG1XeGpmPmdJa3NgQWtUQ30qdjZXVWJMaUZicnsqWVN2TyZ0PGBmPmt2XiFOIzd4OCZhd0EqbF5kcUNMVldPcGU3YUM5MHVmKi5ocDMsW3l4dXFxdy9EKlFq''@;'; put 'put ''YSpSbnlrZHAhWGNxVEZmVWlnendNaHxTVHs8ZjI7PkhYVEgiQSpAallHQzg4OnQ4NlFXJTdaZzlZWVtEeUo3YiFaMWA+Z1ptQTFiTURhNCoke1tNd3FsQDU6b3pUOV0wKCRgMWpXbU1LKkI4fDBAT09Qdl99fnFHci5RLkwjJFZNSE9MZHY8cEIxUnY3IUBYeiIwfWw1dGtLO3FSdnptU2RUUTUl''@;'; put 'put ''JVFrPjMrV3owUnh0XWo/Nip7VUhzPSwqWFBHbUlTTlJJKzB2OXksOz91UF57Y1t6dGRZQndCPzBsZT1RTjV8bndRaXlJL007USNoWj1razY7e1B0WEJLa1AodEspSEl8NSNFO29HTiMxY0N8VGZ2O0N3c2l3bF4mbDk6ZzVnJlc9KnNENkdbO1ZPOzxhMSJFYXxkWGIsZ3I2N0YhKnM7UD53S1Vs''@;'; put 'put ''RHNhVDxQbGdfTFpmZVZdYSVQT212Y1tYdCtLfkl2IkQ9UE5rbDV2W1prWShIKCV7UD5rMz47SGQ4LCZJYlFkX2FaTlArZWc9TyQoRyskK0NEJUtvWGZaKW9SUSsseSpaRyxGMy9KNXooR2tBfmBoRz5eVU41aEIuViZddkRBdEVqYW5YYnlDQT04S1RZa2BkfmA1VWs3S2htMVF3NW9fVW86aSI4''@;'; put 'put ''VmpLaEIqXnxWYTldYz4hQk9pSWYzeHxZWiJGaSRPeXY4dlRPJGoxfHd8OiFWKFZbciVfYT80eCs4Yn5pPXFtK1YlZF4kJFswJVBTdk42ayMvTTRTKDhOdm8qVjR9KGFpZU41eG1EUFJFXyMrIVNSUXZVQ2M7ejFCNXlLajBxL3IwYWFJXUt5Z0l0MFsxcCtWalcrWExediwyVENOODF+cDpDT3A6''@;'; put 'put ''KyUqX0l1OmFKOTRhJntqYVErfChGeiNHaDhYSG9tJXhEfFNmcnNDLnprUTt0VDJWQH5eNV0lUXE0OFFwXSJ2K2YzdUxoWn02S2pFM1N4WDFkeWBEaWkvWU5pbCRwYT50clkmPlk0M3QqTSpqWm81PFpySWt7MilRR31scHxwQnB2TVE3JH4oe2AjWVJiU2JFOkB+UXZwYFZWSld7W1JFdDVJa09i''@;'; put 'put ''LCw7Yms+RyViQzZwYX5gOShuQW1TWVNgRnZtMj5PMHpnWi48SltyYmhMeEJvOlk0QSw8XUljMzs+MFY5TlhUNypWUGt+XWMpPyF0WVlnYm8sN1JdbG9tOERyWXBGMG5STy85U0lfUmRzK1Uzdl1jNHYpKHpuKTVraV1fPnE1Ulomfnc/Nj5VSn1oaypGMDh7eWQlTkhkN3QwX21rWlBfKDxbbyZ7''@;'; put 'put ''d1ZyZnkqZyk3QFZ8PFtwdS8pLmAmLHFhSTxUeDBdKStUY1U+LjBNeCtbfVVYUWxxeS9EZCx5PUJhXXpGOWp7S2IyWUJdSXZdM3pMWDtOelRGY2t8X2VRczlkSkQzL2pXUV8ldU86JlpXbUl4cC8wUl9XYVFvIUJbZFRqLkVWZjZ9Xj8hMFtPPCpCN1E6N3ZpOHtKZ3Z8MCF2QWFHIXNNP3xucE5I''@;'; put 'put ''cjUrKGJLTHR8Y1tTYks/cEFYJSRUPHI4QUguczc/TiFAKGwkSVZFVmErI1pURX0mJCZQK2JtVD0jPDwjNEtiJE4vVj4yPWUkXmYkUGR6Zy5kZk9uKDdrRyZiJT58bWdPeF80UVt1UTJsXkpOIiluU2JkeD9nJn45YUZLb3pKT2ZdVyw/JUopITpxLzhkP2tKdntLWTNsdWMhImsze0pDfFcpcnd5''@;'; put 'put ''S3AsWnZoem09QD1EfUZGckBtZURuQlZDIjhoeEQwXnxTfT59dUdFaWNxb2E6Pm9JUipGKm88R05EcFNmfEh2MXdDYy48XTVCK0NqRFsxPTwsbDJfQX5NQEprYS9kc3lHO2hQMTNkWz8lUyNjYGJ4bVIzdnduZW1Nc1tjNXtXR1IhbmZRJGw7PkdlWTtzIXsrT2Y1OnAsQSM4JkwjdTEvKXMmcjw0''@;'; put 'put ''VVN3dVR6RVR8XyhgQ1JaJH5TVVhyLz1SRFFhYUY0QVU7R2h8LjAvQltddTgrZiZmLjhKSjZ9U15kalMqSFM2PjhpRldpVmlZSkVBZVkiUn5DKjltKkA6YmVJekpjREtFXmtXa0FhcllieUVzcFFDeUg3cDI/dHhqNi8/JiJaRl14YXFvQWksWjVhYzJUSFlxTjFbSGNsKnAsJntEaSRII0gwMWMk''@;'; put 'put ''Ul07KGVmLHIsanNiPzVqbGpNJkBfPV8oWEwoWHVocEt1RERacUdocUltbmo+Pns7PDFOfGA0cXI/UD5IRXQzJiQheFVjY1s6L0c5KCQhVSlvfFlUTSl8ZSVMQXtZbFc4NipuVHoyZXZMKE9NUCo+U3xLT21HV25oZysxYXtHcWVPUiZkWlMpKGBre3ohXSNhIylCW2cxMzpgdkxDPD0vMWVbUGhm''@;'; put 'put ''dXFqYnUkLiEoZkBoTkMoUUZNVnxJaj82XiNDJU59RTowL3czYG98Lz5eYWZ0Y351QXxiJmNHUyQvWmd7cTtsdVgpQlloeypUKmFbbHE+b2UhQjAjZXkxQmNuOTBSPGUmckdmNmZENSRTamF4Z20mXX1NSVdocWg9RGMsfVh7PCo+LzhLMDppOC5lUHR0O3hfQzRCIyJ5IVRjcXlpfWtAMipxcDYv''@;'; put 'put ''aFVmaT1JYzs3L2FtQllKWEs2Jiw9ZVhecjRFL2tdZHlOQSM8ZXpSdFBYJVVyaUMlKzltQCJfd3haQVJNd0lWNkdNVyZ5QSJdKEpGUVNCKnlufTBSLEpYfm1mMCVdeHsweSJzP01icjpeTlFINnthdk9kPT5wTDxsdXVEKyo0S0U3c3FpdTdDIjFXK3VIJkBCdHVIOkBMJXVnO0o8JTBtfnZ0MyJq''@;'; put 'put ''YHl0PTYlem1vKzo5Z1gvK0kuS0hUfG5halp+eTtRTGs/ISt1Kk4yYHgwcUI3OUJXVEBiWHlELDd5K2ckKGpxOFVPNHcpPHJYSS4vWi9tdG8kTHo9L1E1MnRGZHtTWGtLQEt1cW59XUZKJTdvWig6RVE7UHsjRFhDI29hLCkiNnddcC5de1UxRU0sRGosbCJbaXo0T35bIXVecncycW1Yaml2ISs5''@;'; put 'put ''ZylmdlZEdE1aQy98bHV+SGcjdnU8ZCowYXpFclFWZXNYQzZHZENlMzRbXi5FZjI/OH12Ki5adl0ldTp4bUtLfDYlJFpjU281Mj4ue2d1JGxAU2dKZixLeG1gL1MlTiRDcCh2IzUmUz1jdDEkWEslNVVlKil2IU1DZlt3P2REXyldIkZKb2A9R0F4ZStjJDJIOT16PFZGMkFAalhwPlJrU0FjMltM''@;'; put 'put ''LkRKVWBQMm52ajAyL0F1NlY3NSUzVmVvYHlQZnpbantrflc+IkxEOzU0T3VvRUEpdFB+dEtoNkNdKF1xMGlkUGtEZjg1NEtTXkBDfU0rKXY2aTdeU04kYHBkUytxY1RIISopPVt0YjdleTgyQEgpXSJWXkRHbkUlQHVgclI4YnBhPXFgJGVTPDQ5WVB6PWEkbngoa2p+TTY3XnhkJD5bdC5rX2Mq''@;'; put 'put ''fFt0eStyRnd2ZEdGMEpSeGRYQnAlXSFvK0FNS0VUMjBgRndJTSwlalgqNjRqaXREWmJlcilzUXokbCszdWdTfk8lTWIwSHs3VXJMWlQ/RmNrWUh+N2JjJExiVyoiSlF9RkY4Vy8sd31idlE1SDJReGtEZmhjOGcqdk9lRDZ9Zjg3V1E5MXdPNiFkcj4jOmRMfTc0fjdzNFdpLlhWNSRZeHRhYWFL''@;'; put 'put ''S0decFQvbmRLfGhoNl5lOE1MUmhvOW47PF9RWEsoWmVuKH5XRCZBaDBKS1lscVRfLCZzW0tZYTcyLzx+VHpPQUJzKWNJLk9LUy9bLnc+L3l4UWV9cC5lJVQvRkpYLG9CazJNUXZqRmwuLHFWZXQxIzdwJDRrZHVreG9xYVBLMFN4cGtwd1A6TWl7N3UkZUpvNztIX1NCMyE+VVFGNyZoIXZ6RVVQ''@;'; put 'put ''L0tzSF47d2JlbkxJTWs3dUwiQWM5P1A5T2ZHMjwiRkkyZE1rMUBYeD5bTCFvY0RHdzpzN0J7Qlh+Kn5PL1tZJld4aWhFdkROUEkhYU1YYipmWHthbTB3KXk3OSx4cHRqREp+RF0hM0ZZRllLN08qJlZLaWlvMCFjbT1EPGBtazo5WyxaXzUmLHM5aCo1ZVRKUyJuPnVPXkFxMDVRMDVzQUtWPywm''@;'; put 'put ''ZkYuVmZSSldCLltMZW5TJUFxLilya3Q4cCMjKGdIUi9RWlV4RlJVPllBbkoyMi58UyIkOTdwbyZUbHtWeihfPWVVNk01QHJebX1Rc0IwbTtbcmc5cHI4PDlePm9yLGdXe1BwQmYoXmYwXTloOFddZloqOTIrRzQ/SXJ1aTJbM1E7aUpiKjdCfEN6OWVwVVMrSVNuTnFASXI6KDArdV1NQzlKNSxt''@;'; put 'put ''bj9QXjFSXzkoU31MbHFIcHtBR1dkWCt8dCFqOnNnNzozIW42a1kwXjVpPlcjbmZXaC8+YTI5eHxQeiNQUSt8VXFzR1Embn0zK2MrTEpEVyMyW1lbRnU8QWhjai8pNy8icjp3XXFXPn5mMF11QzlLN28/PWlbSihRSjdtSndCOFNZLHF9U1p4fUgrdUFLOitKJFo+IW9SMnJVVmokblFnW1RLK09v''@;'; put 'put ''eWldaT46Lj1YK2JqV1N7SX1GVyZXUTRkVD1zVU0kUGVofFcmRVFnUzo3YkshRU4qNmF4ZW12dmpTSmN4NTZWN0xoazokWDk3QTU5enowVFFGS08zRXAoS00qTWd6NklDbntzKSljVU4peCQqP2lAdVNvcnwmYUo4dnZkYzwsQV9DX2FNbFU6Z3pRPHwiYTlnMiUocmgjVU9YajMjUE5lXXxufiR2''@;'; put 'put ''SDc8XV9xMmA5MDg/b0daN21hUz16bDRnPyhyVWdkKztiJCtsSnFTPHdFKWl4MC94IS4sQylqcWBfe0thVDY8a3Z4VlFWU3ZTb0p7bEJoL3ZlUkJwRXUpRmEsK1QvYEkuaWFiUjdldnFNazZIaz15KHJAJllbfVIvTDNSWC45THFxKHJ1QGhCP1Y9P0FXfCF9amp3bSsjN1ttYFJvXXwsNDEySjF4''@;'; put 'put ''bkBdK0sxbVs+R3BJL2REd1Z4eFNiLkFNXj97bjtkZlt8X1dta21WUm9dPlN9Oi5FOSo3d0hXSXEkdF8sfjNCQDVsbG8he2BLTzRMQ2NlWXVMPDs4YyFSZSx7OFVdTyQoYzdZXXJGTCtUK3I+QVJ0fn5aQU8/X2lJKUBpZm9wYXgxRzZXakpfV29AfEBVam1pa1crV2EibXIvSU1KIlU2fEJURnR3''@;'; put 'put ''NlUjNzhhajUkdjQ+Xm0ycV52dDo0I3oycjBeXkooe2d5X0YjPUgwQl8iOWVzZTMhV2liYFJERXxfXVkwUCFeND5CX3J+cEU9al5IdF97MERkP20xYnwvTWJYTnc4dkhdalkoMFAhUShAcTsjMGcuRGYpT3hAP11iTlRVIk5INjhvYS5eSV9jcmk1dlg8R15IODAmZEhXU2F6Qzl4KWJQLjJMQ3Qh''@;'; put 'put ''RWdqKVNHNmZNeVQwInN2UWhtQU0+XjcraTpKN0J3PylzVzJWZE1fQ28leENNPzBgcHZuSGhoSi40W1tnRD9OcjBKTEQ8cHZacEdXSHxZcXV6QTZYW3ZMdTEiZngqJj07fmY6TiY4KXJ8LkdgMipqVy5gaXglUSpeYF11TFl1TTxpeVhNWCFCPnsqQTN7YltgPiVGaztmW3QyUyMrTj9OLHU9YTVo''@;'; put 'put ''YkcmbCl3TGZvQiZUJUQlO2xtMGFNW3J+PE4sRTtMakc2RkdxfCRJTT1kck5SNE5BOihee0ohMUZffjUmYEovYm8/IlJyKC9dM0N8PXsrVjROdjpZcEAiZTI/VG5URTpdfHxVZyE3dHdLM2pKdnlqRSwlanZlKlMsRzBJLyxtUl5oQWYrZFtAK3ZbVXZVWjI8JShJZzUrXjVGdmZzY25rdn1udEd7''@;'; put 'put ''YlUqb3pldH5zVEx0LkMzeV48bDtbWipzPXE9cT1xLGNePWRUNHgxX0pLUGt4OyxrSCpnKGo3Y1s9UkYzRzUsc2AxaWhpd1J6XyxNU1tfJjN+d3RPTnI4aXtOYmVWYHApYTcxM3JIWCpiVnUhaH57eC9fI0U1UFJRMzMiR1VjOy9pOUEmPmd9XUJ9O3I/XS8ifnw+SFpkYTU4U1Y+UXhqUklDTkB+''@;'; put 'put ''P0osO2heRzNjflYvY0BGLykhe1M8OHNSL2h5LFBMN3xHcXRXRiVlMGQ8M2JeN1VNYypzRTpAP29LfiU0cCEzO2w1O1E4XzkpNV50UEJbeGU0eXk5PE5vYkdiLnwhOGpqJHAzVHJTZWY0RkZyXyN6eUhGVTJDI1tYUz1gJUt3WEk7QExWKCRfWGFbeTxndFVxaGhPKW8/KElTSlJ7VG1RKDR0fk86''@;'; put 'put ''JkB+Ykg1YDp9TzNEIUVPbUBGaTgrLFFINjV+IUc2WTBNbzh6LGxGXTBqY3o5LjRDWzp7d3svVyVGUkBgZU8lZVYjblNpSTtfKkg2NDY6VFR7PXJGOV4mPHA5NmQ7OWJEQ2dKNiJTQF15KV89T1gjIzZMNDxHaiRmbmU0MEEjJWpUNVFPIWlGKmY1UVBAIVkhPHsmdVd0R29vKD9AYUloeHFmbkd5''@;'; put 'put ''b2BJRkQ0TEBFIiZOfk4xVVI/LElmPSM9ckImYzJfaHttJUMrLERuKENfVTU5TXpvcUtFTXZHIWJbXVY5dVJOeDoyTTRMZiNbIygoQCYwNlRaa0FWWF5DZk1oeHVHQ2oiODU0NDE2diMqVCNuVVtibGohJXpqU2BMYVBfIlp2T1ZzJVFiY2g5Jjs/XT9CVixSMn54RnplYzZZUE9vZnswZ2ZEVnxu''@;'; put 'put ''TlZmRWZbeiVGT2JlZz4xRUo/Zj59QzFHOy5UaFksSH1QdHxPZmE5aSJ9aVd4L0xWLnhAX0xRfj8uTlQ4Ny5xejUzUTNOLmlEbj42ckVSYSlIRGw+LEVCdl49MytKXiU9Vk19cztKMmpzeG4hbiw5SHEqJEkkMURtRVhNRUV1dUxaeHo0JHZoQE5HeXJtUn0iPzdVZzI4VSMpT0lPWChHSHZNSTtu''@;'; put 'put ''dTBfMUhHOmlqSENeaHhRS1hQT1BpWTA+Xy9GOWZFfGU8Qk5mWElsM1tYfT1ic0Yzc3RyL1lCOiZoMCYxMTZjJVlVNH1WW11jNiNNUnk7PS5paWsxeFVJc0VfcC5ELHBgcDwzJEMwckNnblZifSZqNGYvM082d1tgclsjcixMOFQ7TCZSeDRLcVtyWV85cTwicjM3QUcsOTErS0FoUz9gRDRDcE5p''@;'; put 'put ''Kz14YSJsbDE4VFIsQGRrX31WIX04YGovflVSNix0M2gyamc/MWQscD1PMEB3RltkeXdXcXo4V2JsOnJMQXUsOWkofTtxL3U4X0J1SzlIdF8rT1dnVilGcTF+amVKR35XVCNfflM4QndsMTQ5e2gobj52K0o4eEJxUmNTPlJsbDQhTitANFpGZFpUfV0kM1g9aTheQEt8eC5nKU0kSWB9eHszR2R9''@;'; put 'put ''azNZMzpgc1o9Ty8iMzZKflZ0R1hudk1YVnRjITNJRE9EXktpdUYhJXVjZTc0dGRAeGdRK2ArSS43PD9sNEZlWztsV0oqMzRFUmJnfFJObnZSdjxjPU8pfXdLZEAhOF8sJnNbWkJ8QCxefGpFTX5WLEhkXmtFazkyP2hGeDpkKy57bkt2Q2tRZlgiZmtbZ1B5SWlfSWRKLFRmIXhaMzhXYG16YEVf''@;'; put 'put ''STNzLGlSaW9pO0UoOitJcyhgWTw5Kyg2Mn5JLmZbfjxvQTZ+RG1FbVo4PXIrVlNldzR1U3pJNnBLK1hWKC51NTdvaFs9P1JyeyxBa016ezkvISZVP15FW0tsZTUpJTd7JXk6aVBuemJmTHRodn0mVnNbaGg8YTVbTSppJXhDUktdMkAvajxBY1FdPzx9bGgrQlhMM1pKaDl0MkYsOV4lVUpuSW91''@;'; put 'put ''NmlOQnFsPmM9OW86SjBCY2thdTRMYXVTX2klYmtHWnl1LmxXfGs+KT4mci9GUykxMnAvXjhyTUkwbFJhKWJ8Tm4jN0dyZjlhUnxZIlM1OEA6aWYzNnhIV2tzSSEhblk7QzU0QzdwVnZDPl1SbUs7fm9NfWl7RS46c2c4Q2VeTSJKSzM5b0IzKjchSCttaGBGbygsd2RQcDYiQVBGX2FdMjM4QGhn''@;'; put 'put ''akREM0dBKi56JEd5VHlvaVk1TV9iXlo9KSZLfGVfZyxFPV5kMVQhdUN4NXFNZ2krTz15YCYyTygibV5XU1ZCMlNmQkhYYzUiPkUzQS5VMiFtM3REPEMuMnZGdjpqVXl2QixhfEsrKmVHVDkuXlNZOSZ9cEdecGApOjJXfjsyfjJKezU+YFNYfVd+ODYuRy9vdDp1bHJLSGdHfUxyemB4dDZdbSE2''@;'; put 'put ''cGhreWxXVFc9PmxZV1lNc00haiQyNF5+UDR6Qi5SeFgvIn4lQix0bUJ0SzkhdnRBIUh2Tz9GQ1tVJEhUKjB0fEZTKV1QbiN2WHBxK1EmS20reTpHZEI9NlhZcVFTYlZjWysmXXE0ZHQyX1lQY09xOFtEPTV8WTNyRUs/aVR2c2VfKGplNFBHYGBRW31iIzRKX3k8WnB9YVl4XktRbG8/fXJQL2hz''@;'; put 'put ''fWkrQChsOTVna3E8KG9+aUx0U09vKTkmNSI8VyhqODxZSCRnYmt6NDNXOVtTPWFjIks5W31xOS5GfV1gVnpyfEdJfV9qWCpAISpMfThJV2ZgXnkvKFdKP1pra3htST1pI0gvcVBDST1SJjNPO0Q9bzRdXSYkNFYxVF91JXI5JFdeMFJ7RjtFME5PR19INlBddGZESU5JSjBgWXh0ZHBYTkg9Nl4m''@;'; put 'put ''PDU9Vn1dekcwQl9kSGE+YyUudVJYbnRlVXBeJT1YKzRmPnxwUUhuJX1xXlhMamRCNjMiOilRVTMsMSY8S2FdfHAxbFtGcE5GW0FjMDwpT246ZGVfa0RYTnc+cWpxYnNUIk5PYkY7SGpVZ0RsV09AVzMhPUpzRyg4N3BWcF5zRSF2JXNSLzEkLzNWfSQpaTFwd25SVll0c1k0Y1cvW0o4WFcsREUm''@;'; put 'put ''VERdSTdzOSgiSX05JG1wYVQvXXRIPWR9Rn1JTk4ve2ZtYjtjXiUjXTlpYmNPXiNWPz9EYzVmdkBQLyFsUmBEUXx+PHMlfklOTi9mODp4aylUXlJ7b1FUMzY8I284R1Npb3FUU1NXVz5ObTE7ZWt9RjlkbGshRHJPMWpfWSF2Y3RuVmk/U3RUazh2VH1QWT8kVCtjbE1YbnE+YkNOamNWWHNOIV9S''@;'; put 'put ''Z1pWL3A4TXBvQXFXayxnOUxKZi8hITZ9dlhEQ3toJCQ4MlN2Z043fHFjMlo6WltUXypiMEZQUW95Xyp1KE44N1lTcTF4c1V8LHxeQ2AwRmJbRXUqRXFyN2BLL0I0M150by42PSlRfkIkcC46Tl9wV3M8IjAheyxSIUlgZnM4LFA4byxJO1IhLnY4WkFzU01mVGRwMX5pfEV+c2UjfVFdSVIhZ3Va''@;'; put 'put ''UzgvRSI5LEpDQ1RlKClJZlQhbCIzeXxDeV1qMzU9NHpTSEtDO0h4S3BLI19SQkQiRnRLPC8ycn4scU9lb3xCJT1pSTBRXWNSdD4kV0NCI1tPfSlRMnV9KjJwfjQyPmQlQD9tc3szcTZCK1ladk0uNl1gTGhsNz5MPCJnWVpdKnQ7YDRpbHMycE14QkV4aWMvbEskSldgb3BCYEorX1l1fnpKdC4x''@;'; put 'put ''PmM6Mzl1dixvU1l1O0xUZ0o8KDFFbV5lIjEuTkFCNEpYYVVFSU9hNUM3fFFQM20sT2RnS3JxP0hJQ118LFpwUjNZPTxUJGpyZlVtISwsTTAseFhGY0cvQnxuVjF7Rm1pXyREXUNmbVYsR0MjPWxCZSJlVEB0Wlt0MnRPa3M0JkZSOjQ0Zzk9bnZnS254Ol9wOWd3bmxyKmUiLGtOW1pwQytqREhe''@;'; put 'put ''dVREPHRMRW1+WU5tOlQ7OXY2OFgsfFRbUD5SSjdyW0ZGWlNCfCwuVS9GRDklQ3F2Pn1NVGtVZ3QsTEQ/X1Eucz9OKDElLm1YOTA2QkpENTQqUzFVYHtBc2o9QjRwOXtCPH13QUI0dkJQW18/WkYiSWgpWG8oMz1RYXwheT4uYVtxMD43VSM3TH5vci9uZmhAQHZmNFRTbjxAWCF2aTJeJlF2UEdK''@;'; put 'put ''ang0NHZQPVQ+dTRFUkIscno+ViwrPC46XywmJV0qY0JOJDN5UCZfVUQpW2ROJDMoTV80PU93VDVPMH1xVmU7WkgyL0ZNY3IvclIjRjN4LD5pWTZQTDwxZkZWb2E2amtuVklVKHwlc0Q0aiZ9UVZlOUFsd31RKDBVIylDPWwsOHlkK2NwU0JjTkk4UkFQfkR0MXdyblJpe0JjQnNdS0E0fHJ5VXk/''@;'; put 'put ''Z0AlQjlnbSw9LlpvQjFaMUEqZn4zLyhLQ29CQlJHI3Y+Qkg3WS9AflYoNXRCLmQ6NCl+MVU6Ty48bClxMW0jWkg6TWxuKF0lPyZwS1AodT9UYW5iS1pvLF1qQDZNN0tfSDdweHt3fmp5UnUkNWtzPl8vKVdIUzJkfHhXP2JVSWNpb3tVWVthe15KWHZCUzMwTEpBbHdNVFJGN2ZNQ3lQYSspfXR+''@;'; put 'put ''JERJKlp+VjheS0BLQEp8JVpkPXA6SzI0fGIvMTQ2fGMkZFNFKzF2N1VncFVCP0tLJiJwODlvR0FjZFczPzhiY3BrY1AqYDpRKWN1NV52alFGQyVaTE9xLll+XUhHO3N+ZzA7ZUJaYGw0bHlyRypaTntMKntaPnt0ZWQxcjA8S1Y0WDRgNitxdSJXa2IldXQiPCZjL3JbOkImPE4sITBkUzRbLFpw''@;'; put 'put ''SGJJVVlsRkFbNT43X2ByQXg1VSNfK3AvQyMxIXE/cC9hJUxJNzckX0I+fGFuXTY+S3wuaWJkRGB4PnNBIXAyUTE2ZDw7VW9UaStha3Y6fUQ0e1B0OnchL3FkbDVqQE9nZmIlZ0JYOzhBUnwuRHVYdVZFIjIoQDhlRzM4VlB8Q1YqaFR1d0RHMWlYNnkwIV8uODdpVi42XShGcz0sQEtpdXpfI1Mj''@;'; put 'put ''U35jUixPazA6SlE0KmMhV2IkVTlGJT1mKm5AOCFFJkt7ZVJ9M2Nbfm4udDA+bEBRJkkkSkEqUHs/ZW5Wc0RVU0wkSz5CNFhkJTZ0JTN4RG1maDRBZGF7ezpdbXNraFUsLEJISCpzNShbNVRPJE9UKGskYS8pUntxdTZrJUE4KWhLJWtibn45TDJJUkw8K3EjKysuQjhCcl1fTlFqczxYWE5kcz0p''@;'; put 'put ''JmUiVlJzanBCW2YuJnpUaGsrOCRyOl5RL204eGBkflFWZW1aRzwvS0JaZGlVTzR3cVEiUitYL24+VytNaXtFVXUwbz4rMXlEPy81flEqPn5GRU0mUX1NaStWLEw9W24mJE1kKlsuWlpNQkN+eSNMRFtuRWN6Km18Rj8jLlomfCIzM31mYGBdbmpPXUVtbWlhLmcvMF9jJW5dS3pgPHM2aGhdOTB7''@;'; put 'put ''NT9BJEQvMCZRK1BDfHkjbiwxQzRMIkcmQzh1Sl5zPDBXOWZEUGlTVWhLeW1XUlMoYDYjVCl9LyE/UnlOLERWXm4rJC9URl9ZcyMlejQ+ZzE7SVtaaX5ZYXZjdEwvQyouQzhbbyhETThEPEZhY1puKUZbYyR3ZHdPY35adjQ/MnN3TztmWXBJQSksNDgkWXFIcyNKS016MX1JJGshaz5jaFp2MTxp''@;'; put 'put ''a3d+aGpOUEJqZj5jX01bdlRORClfW1NGdjhEM2trTEVkVFpgREQyMypjJEAlIWpWdU4/UWcpMyNqVn5NJSxbW15ybFcoPXwrZWRaUER7R1lUTDpmLlA5JmV1dTxofD9NZ1tOR3lzWVo1UmxXcD5mdkpETkhVejlGT35SUV0haU9sYHVQcWw8W2o9Q0JbPkdPTG4+JmIoV3U+dT55YEA4bSlpQ0NH''@;'; put 'put ''QjZfbGY0QVtrenhtUl1ZXWlxUmt1UTVrd0svUDV0e2ZwQG9peTFdd20+T0Y8aChTdzg3d1N3e1tAbjE6Y3hjSjshJWdjNWgoX1godXYlKThhdH4rXmAmIUMqb2lQez9AeDJLWV9xWk91XnhhZUAkbD5lTSZCdygrI3QpeCtBTSJuTlk9Xn1nZlgsLms7ODciVSM0ek8kRSFaNyZTY2E8PVdGfFFY''@;'; put 'put ''IT1peD5fd10/Sj95dHE4dT0qJFZmeEhMUDFxQUNgcWRRd2h5MkZ+W2h5OS5fQ2Z8Q2MmQzQ9PE1BP3R7N1dNZGxKOXsrSXJ9O1JGKXY4anZXTjhwd093dStoTkg/Q2MxXW5QNV5OYUh8NHB7XTpDY0c0cjkiYzxkd3kiTEo4RjRoaEpnVXNBKFhqSiVKXTAvSHc4RUxgST1ndHBpPmpPUnRRdjpK''@;'; put 'put ''fWA9SHlpcE5wL0pzcEd5SyJYIWU0Oi5dMDYqKTA3c3RDRm1hOytCOnQrR1pCO1c3a3tlK1QhenVKVXNpMTVDNXduT3BvaW49XjNVViFYW2x5IWY3fiZaJk9pKDt2Yi8iP3VHako8JkpjUW9oVkhiWmsxV0x8ZW1gR05pbDF9dmhRWmBwcFMoa086dHQxWitxZFIjYzFOeGpAdW0kezFzIyJDYSN0''@;'; put 'put ''ZjRvbHYvVXAqW2dKYXFwRlUpe3xDVz5OYDJvOiYjXz4pWSJ8Slt4Y2thYWFBYzIxfVRIXXtIcTBCfiwvOm5WSTA1K25HUkFZQnMjJVc/STZ+WTYjQlhdPDI4QWNXUEFVfFFOXUczeFM5e3xZNiNzK3pzKHx0UkdHX0d7KTdtXVBrIWI0XixxI29sSzNJcyl6YDwrfHpgZzs0LkJ9Nld8fVd8TzJ+''@;'; put 'put ''S35GQjU8WHlXNUZedlldZn03fVEsYytTPnkwd0QpUFdgNX19KnBmQW4yfXtSQUoocFEoIm1gV1VWQWhbaXwxby9eUzo+eyxLOSQlRWohb01VYSFUKVI+b3tOPj5naF5la1h9LjBpME8jeGUwXXM8QzQkLnM7XnxHJlU7PEdqXjc4cTNgdTN7dC5bT0hOUWQjKl1Dbj4ob2Y5dTNAe3t1enY8JVlC''@;'; put 'put ''d2ZseT1dNl1hPVkwUEc8JmB7amJvM096S2NdMHB6LmQwJHB4UEchWUx8NlVHWUdvQ3pKcXwuYXBRSyQ8K0pZbzFoRlkjfiN9KmduOEFaJX5VR0Zjc3hvan1zTWtHJi5ldi4qdUsiOWU0K1Q1P144SH4lYEo6JGZ4Uj03T0ZbfVkwZkY0I0g+VVA9UU8oKUkzZHtTIV5CVCF9Q2ZDTX1TYSw5dDlw''@;'; put 'put ''eyRAWSl4eilwUyl7eUhpVHhDIT5ULEBXJD5bUT1DWS5AR3d6LD08WXVUMUE9MXZddVA6UWpibG46bEt+S3FeSTRkPnckM21Lbyw4KWpZRH5wI19SKHZSbHs2SVReXlVEImtLfVFmVHNsMjdSfkFeKHVbWmpecSMqJno3UiF9S18uZTNPRk05VHdsOSNBd0Rye2lPfHQiJixyWkhdInhER2JCPCRv''@;'; put 'put ''Sjp+SHJ9Ml1LMng2aFZiNG5vdVV+KiEsW3VDNDs5TEJfaSNkPVNmZkhfJj5XPFJpaXNMW0tFZ3AkUHRlNVJ6I0gyRjduK0V9T11xc09mRjpKNDx7JjF3OiYjdjNbcWsleCEsLCMwe19je1ZvTSxBTzlzMUR4KGxlcl0rM30sXnl3b1Zjb3M7cVZjIVo6RnZsYi4wVy5pRV4oS0RnT2g/d2QuRmZP''@;'; put 'put ''ZzIlMjR2OjVHK1o5RiJ7fCxzYj5VRW1hRD9xc2dneHdfei5lKzAwdGdLZltye1c4OjZ8UVt0bVFdS3JKS31YPzxrWSNzMz17WkldOGR6bmdQfktYeG5AKzohbCRlbHcreEUycUBGW3c8Klh0dVRONCUzeC4qY2RKOldTeTxiM3NJcWNUSHIrclNxT1hEX3ZzSXJ1UnB7VnxlNj0+NDd1JTUkN2BD''@;'; put 'put ''L0s2YFROPlB2XygmSHMuP0BscXY9NSQrNEIkK2wkTH4ofEU4YiQ7Ok5jKit7QiZLekpVTzQyWVBXZVExfDwvYCgoZltrOkMrSzBseV9WTTFCSWtnSFlBbElbOmVyZX1wK3l7bH5AKE5uS0Z7RlVMMG5bI0ViZUclRlUsQD4sazc3UE5OSCo9aWN5dGs1NjV+XyM5KCFob0giKDBNVWJ1Wl1WaXJP''@;'; put 'put ''LGxZYmUzVkVzJl1mQlk6Rk1+Z0V4VXNdMXh2QkJLcEVwRitGcmp4Qi4uWnNdfnMicSlHOkU8M3M1JCF1MC9lPzZNO0ZXUzVTcz4wXyNVN1Q4UyxhezNXLGNlPChYTDMzdjBWcy9XOEVVZi9JMllmajdZIyh6LFhiYV9jTnI4e1ghNGhER1dhXUBZUDglYX1tZSFmaitsTGdNYkg3ckdpTEM7UDBF''@;'; put 'put ''e2h8MjFCQHVid2JZQVhOXk8iYT83Un19cWlPNkpCTEQxV01WcFo2RlZxMUI6dFtjRlIqRDlQRkJySX5UXUEzSUZQOGt8THwqS1l5dFZxbC99Vyh0bzRMeDMoVypPdipEfEI2Q2Q/bj1xQ2hWJGtzTG9SKWFxKXtSPEU8KXZ6UVE5QmhYc0xbSnVHN3YocyM8U3FjOGBxLlhBaG4rZmZxdFdGIVcw''@;'; put 'put ''dU41UHJvNDdDP3YiVGxhJDp4KCtNZUttbSJlKjwqY2szQ1B5ZyJNMD88TVs7Syp2LmU7ZyVnQnBrJV0sT3RRLiRmWk9AUX5MX0ZjRSNaNnEyKltgPH4sfkZRcX4yMDBZPW0+cUk5XlliNkBMVUptNE9ULnEsdS4sei4zPlM7ODdfVTt1SjhwaFtFTSkjXj8jcXRTJmAvRzRxIWZIMWopVkRWI2ZG''@;'; put 'put ''VCxxdk5jLn1dMTZSeFFROnYxKi81bTA+ZTNMSlVoVypTZStQTjkmdk1IYGBQPTlDXj9bNnhOPXtwTl5gWmxIUURoRWIwWG5bT3pZaiM+OyNYPyNAMTIiSyN1PX1VZ2B7T0tgUypNKHtXJnZdZyRwTjZAMEhFX05jT25KRV5JaHVtcHA/VUtgakJTKFtATCJFQW5lSEl7Om1Xflh8KXU9WkxpaHpR''@;'; put 'put ''SzdwWyxAdGQvRS9TJVI7fiU7ITklSHB+VE05IzMvT3Fldzx4dmA/JTM2Six4bGk5Nk41L21mOGBWJUo/QGs6WmlXLmRNVFVzZ2Y0b0A1fCs8QFBDeWVTdmZkWS9qS3kiVG1dW3R5Ky94cUIuMndPSjtPNyt5K1BQNXhTQTVAKmwkYSohS3lSOlFaJkB1eVFvTjFAOkAyZ1FaOzh5RE9Nej1eRnVW''@;'; put 'put ''ejRlQWJQSz07eiosJHwvezpMK3Fvayw4O2R9KEdzO2ZeWytSfC93PCkya0QzOiw8VVVLPVVncWpeO1FdWlRSaDpAc21NbC8sSX1KT3hBL1YzVVE4eXc+YXVXSmNtXSlrNThFR0VIOUl5RDlQe2M8KndAY3xeX3g+eWA2MjFofnlwVFFjei5kZXZzeDBKUWZBNGcpQ2d5KEtdMl9oaDgvNmZwYVsw''@;'; put 'put ''XTg6eTVRNmNuSHRQOiElSFtOYlpjUUssNWAmQkxsOW5aQjdzYHVbNDE1bUllSk44eClkMUdDQTdKW2EwbThMZCYiRU0xUGs9MHNGIyt4YEpBZHkqTD0/O1MzMS82cnkyPWQvcmI+VFBUeD46fHdZejF5ZjxBTTdGcUc7c3ddbDNlI097e0xAL2ovKWFgbGpkLCIhdXdCRHxROmBVTitfMm9CKiQ6''@;'; put 'put ''K1BpKmtoeERgTmcvLk5zc297RislbUc0bW5FY3RFfj8qdW07YWhHLks3KVBPYFZjeEhNWXhodDQmSCY9LzhXb0I3MlNBZFN6aVgweiFjeTZVVVNIZ14yJExRejpDI1prQ3NPX1pwX21PUERAfTEoaztmeDN+YjtuOXA1LHtXRWpVVz50PHVlI3B7O2FNLzEyXWYqW2FmIVcwJDkiV0ZKOE5WL09s''@;'; put 'put ''ZkFILGN9N3V1TltuJn05YysofmIjXWpjMkdUa3p0QyheYHosR3Y6MEsuNHY6am9nP2xeWXVQPmklMithUGl6RVN2MTpmfW9jUzBeKWRvanpgOF5eZVhqN2lJLlhUYnNvdjF0UHZqNl1gX0R8biRtLHxmO2ZCLGE0P0dvaHtRfiw9JW1kP2lUP09xJilQOi9JakFuI2RyfkpKPTVUcURAJXsxczVW''@;'; put 'put ''fUUxOGRwfilMX3Exe1MxLnguO3R4TTZgTWlGcWpXODxoTFZSLkI+aUl3aDtXVypiajQxcjd9Q0JaM3Y+Kz9YSSJTYjMlRyh4WF8pO1hvMmZ0QTFybUJCd3JDfTc3Zj1rKFojUDtSSDVeXzFkTjA7VE02Wzcud15fKSRqSGNmNnV3KyI0Rmx8UlpkWU0lSCoqeHZgSkZOQVlGTkIqMXdaZG5QdHg6''@;'; put 'put ''K3BMXkpoKV1KJDw7VC9CdlMvOj5EPytANmJ9V1goPTRESDNNeWhIPl1iWDZbQ0VUUXVJJklaPFoxWmlUfDtwOzlgaHtGSEMqTD5FR11mNTwrQjdZPzRXXkl1TlQ2ZWUyd1VqcHhKRzolPHdWaWtRK1J8cUB2JFlmTyswalJaenxhTSledGolfGA9X1tgR0ppO3FVcihwMjhicnFMdSx4UDU6OX1k''@;'; put 'put ''NGg1dEFmR0NYVjd7ZGVjfDw7dSEzZmJTRVRUMUF+cnhXcn14ZjFXIX5HW2BnW29QZV8vaXo0SE19dzBVQEZ1MGp9KV1HWCE/IXF0L1ZiKzl6SCQzQDw3Q0VqZ0Zla1UoVDU9KSFWP15nJWlyT0R5SWF4N3Y3aXFbZXRXZ2E0IU5EMStwP2tvJjJbY1QhXz1LNDQzW2dDUGAsJXVeL1hpJiljK0J9''@;'; put 'put ''cXZ2V3J4bmlpMHBoYF5UcUkrUG81WH19OVVKMEMlRVJIMzkpYyljKWMpY2pQJUg+dy91OCV4XnM+K1BSXWhubkVsPiRzdXROcG47Omlwb0xSTFJMUjVuTFJCaWE/V2lYP2N3OHtMRiYuJiN4LEQ2akhoY1k1Qmk9Oy8yeG5UWjdbYk5tcXVVbWNaZC5LZiU9ZlFqPjdrQkZJb3s+V1hXRTI0KnIo''@;'; put 'put ''PzZTbjBzdnVDMUdIJDR3fjtvYHNfZT5mLkw5RGQpU0RxP00rKFtgW1d1Mmt3ODh8LDQ9SV0vMmBKRihVWC9GV2hFIihuYD1USysueUo3T2M3S0FPPVtLbC5ZK0QkdkA6SHhgMnBQNDZeWEs4ZFg5XWgsUDhoWVh9dDRHcjNLOnc1N0Z6ZWM/XyZLOj41UGtQalZCUDJhUD83OCkjKEtiPUJGR15S''@;'; put 'put ''RnNzNmVdK1c1QEJkMUBCfEhXL2cqPVd1VjZFXUkpNzpKX1s9YTQ2e2c7L2QhVmdZRyhkbTdkNjpmPSsjbHwvfGdCN1goO05MRVEsRk9YSTtkNiwifC5xSk41MVEoV1Q5NDxuQmR9UF9bMDRneXJAJDRPJUAxTy9zVixUYEZmU28zQzM5c0xxalY3biVgckg0V0Q+dEIicEFMNjVPSHU+LmswS2N8''@;'; put 'put ''IWwvXl1WNXY6RG56STFjUX0mZTJgdGVgYDgpWmslO0JhWmspPVdVM2NCI1smdEUyZzRCUExFJXxBNDgsPXhWL1dpTFY5WDA0IS84eUR5ZFMqQXgqM2RUfl9sJlViby4mR1tZTkFJT1UwZEQjdS9bSjtMNTdRXmJqWG1lPHxCYGokUXlZPnliNHlOSykueUBxdXRHdTRQSl1FUlpqI3VOTVYmMmFl''@;'; put 'put ''TzlqYmpBNTgzRCxPSjsxNCs8WSRTNTdeYSVmTEJvdF12S28zTDpDSylFIUx2LighWz1QWEJsdEEhdXBkSj8hZkZBRjtkR1F+JGg1X2F2MX1KI2ArV15TIyo6Nmk2MSs3RHVtfEZnZ1plL19CRndAMkVQNUVUdFhfLChQKlIxRzVnRS5Le11DLHApR1ReUWx1dDNbZ25rMm80Zyx+X3o6Snlla2lY''@;'; put 'put ''R0BYa1BGPVFgRHVmQlJCMlJUUG03K2tsbzRidGE5IUZHU3NYTGgkT0kwSy5eclMrYWEzayRLRiw2UVhTPzA0ez98Insze3s4UyM5ZXRPflZ0YzdDXk9jRkw5KkNQOCohcW1AIVFScjRpTG5wQzBMcFIxbyRzXTU5ckM4bFVlKUkwVjxZU2NuQixhQzZoNCIrKHJfYEBtPltZM15bKz17UWFASFQw''@;'; put 'put ''Zl8sPX53cmJKUn50U2hvalZ4Ul5Id2pOV25qPVNXNSlXPHplbDgjZ1VKXWw8VmwpR3MxPDpqO1U4ZmUqcTM2Y2U9JCRTZjlaZ2gye3lRYm1scWF7OjI2JFN4bGJkO0lRQjBgISlDTHI3eGY1NS9Dd09dcD0jcDReVVpIfiVCby5QI10/PEFgbUZbRGJCVDJpQ2hWQjM3KVlyUDI8Uy5SQ118fiFs''@;'; put 'put ''NFNuNEs8MFVzdEBxMmpZIytdUGcpSVpkel5aNVUuY2xUMlAyQmMzPUh4IiI/bGg7WTFlNkR9Ill1b3tQNjh1MDt3djF+VmphdEVHT3Y5VHwwVENWSlNoQyFOUF8qejBHS21feiMlKV0qZUEkRXVJUkk7QDIzRDw6T0VFWFt0RXVGWHRdLm5qTmNhZkREbEo7dSMra0FdKStAK0g1QWJOKk1+MFdL''@;'; put 'put ''NiVHXlB4XWFAO2R7RDolPGJhJXZBYG9KblBYKz13ZTFkRihHWChnaVVzPkpgNEQlUEY3KHprME4oVnhqM3I0MmZKN1V3Un52eyR7SyxIYmExXjtSVVAxTk5oKiV6PWIvMmUic2JPX256QC5YKF0xJGdSY2IvIyxfQSFgP0dmSy9IUT19Oj1HTTRIaWxbQjtaRF57cDQ8bmx4e09IUCZPRilpM3Z1''@;'; put 'put ''PS5gYiZPND9jKkhiJEhlKlY1OUtyZ3RxWnFAY0YsKjkhM1g+REtLUntUblhTPnJmRCxaZlBjZVs6Zy5QSWd2N1dNIk9hLGRTOzkpQ1lxKyEvbVlYdVJrNER4OjsidEhOY156Jml0VH43bVJHWWNSI0lOSVBBTF5IMnhiaTBVa0JkUzxxY0Y/W1BgN14wJmo4djwmND1xX1YpJTcjYnphQl4uJk97''@;'; put 'put ''e1czc0I7ZHFre1dWS0UoYUYmSVBDUSxZLD9nfGQjaDJoZndaRCU4Ui5eO2NgTT97Xm1ZUitZMkRzMjo1KlpMfTBwQ3NVYEpQJl9RdjJ9eHx4fHh8eEhoNDdCOVoxP2pWfHlJWUouNV1pa0g6MDowOjBYP1hSc3w5b2VKdlV7djl6VVV+aUJjeUxPZS9kO0o4VD0vXnFKNzJfRCEwZl0/dTJFTkg1''@;'; put 'put ''R2F9dSUjV3V8KTt0KnVVQiJFcGQvZCVCUHlGcmpIcEh5MG1JV3RpQHMiSXUxOkhwV3R1bzhnQjQuOlh5e1lNcDFAdHszbk0yaU1WU3JKYy9rUF41OUNLcEU7ZmFwMzlnOjlsZUt0RzhVInJsKy8jXzNoOlA7R1VLRV0le1VjcCRMTjVfOFcjcW80PG0zNkg/LzlVaHk7RncxWHpkaUAyMEd2QnJw''@;'; put 'put ''em1zRzF8RSFKcDR4VmVmI3E5NH10InFXYHNOdHs0TiNLYW56ZGFqMWgjcVMxUU1rKiJFIlhvJHEpTSw6WzB+NFtPdEVrdHNdakk3Zzh5OjdgamNvdGhiMCxIUkFPenRPWmRjKXNuc0hPcTRdNHsvVXgyeyl9NVVzbDI0On1PJVU/T0pIOmwxOUNDcDcyZUgyNGhkQjchYCt1bEw5NCg+V3IsSGUw''@;'; put 'put ''ZjApJW8wV3I0MFdyQlBPL0dLMStIUn1dTlV7X0Q0JTJ6bmhjbVZiW3dEb0JgSSplc0ludlNuMnNZdCJOMHtYW3hkaVNoc2J8Y19ecWdlI1dldGB8PHFUSUshVTUkW1JPVD9iMVVVKVpFaCQkSChfKmhbeHgwLi5YZV46dkQ+dEtTXkcmRUw7LFsvaVVTRlJ1fnJkXzc4PFYmM2p7YkRRbDpaJEFd''@;'; put 'put ''fCh0YEZSWSU1RE0wND9nL2hTWSZ6bCUuJkgqO0ZXYDExMnZOS3FFcUA6YF8peUBIak4yJTNXI2crNHFeKTtMIiVqaWBrXkU9XWVTIWxRdCg0VWdHN0IvQGJeLjlmRT5ndCUsPjtJK1pvZUpNZmxYL2A3JU9venBDRUFqTT1HNlE0Wi5xJlRkJD9bYVkydm9fN28vLDdCd0UrVVVXPmQ0dGUyOzZT''@;'; put 'put ''ditbTz8pXnwxclRkPnRSfGllV3M2MihGS1kkK3tUaW1EJDRbcntMNnRIUCZCJHtLKHNnJVB6OFI9RGVYVUtaLE1fZ2FrSl9CQjhGST1pR1h7VGtmV2A8M2pAWSR5Yjg2XUBvMEtlb3xNO0pSbTtuP01eZGUqLlIqeWkyVkJXbiRuczcyTW1bT0F5e1pDYkMoRzt7NkthJlp6a2ROWCQoU3NsfmJe''@;'; put 'put ''YD4/W3IvalhUcSZHUT9WK2p1ZGd5QklSQzNwRHdyLGU2VzFSe2d1OFksfHxQIn0ycTBudl9JVXhiKlNecThbPnRSfGtvQDw1W21lO31LQXJeSjNYaG9dfUpPRVQvfil3cls4MS5JcnloOyhKaDs6TXxOTF5FcW9WIUcoN3RJb3lmbFlAPCo3LFZ+fXFpQ2lfQ1BRfXk3YWFnZVFZPVYwdzJ3RGMl''@;'; put 'put ''R1gzaTswMChsa0Q4WHlQMF9mcVprdSVzKkx3d1JofFJORHxIfUVtO0tAOz5JOk9UOEokbXNGX0AjKHoxXWkhVz1ndTxzKkhidHNxVX5daShwaXM9SHovRy9qZWZrLit1JD9XVldRdj8iNEgkV2Q0QDF1SStxcSlZQD8xdWE4O1AsMSwhMnk0LldDXSxvZzJ5WW9AaDNLU3pjNyhLeFJ2Y3xHUHZ7''@;'; put 'put ''ajQwNV90eHNAMXVMKk9WaU01fDc0ZSpheUZFdnw3NER6UCsuQClzSTBlUytJO2tRTENOQERreHArUEw8UCJCa3hCITJ5dnp+Kj4/fkw7STMrWmQ0QGgmKiR1KyRZcVUjLyhLRTFnIUpiczA7MEswK0dOckZsTDc5a1ErLyo/ayh0K0lQUlNJfnEka3B4NmNTKy5ZRHA4UGpFd25oUTRALzRNUGE1''@;'; put 'put ''N0tRSmNvKmcrSVZmPERwcSRreysrZFArYUN6ZyR6e2ooVCF1JHEpWUphOmI7KilkMEg+amhSK2NzcTNoKzF+Vj5YLylkKz4jTkR7UllFQnRvL2JTYTJoVCJ0U09DVG4pUzsuY2dkNSo9cVorKiFGJm9vZEJhJSN1MFA1ODsqa3lDeDFnZldGLHFHTVZtUSU/MXUoKlVWbVFjYGFYYUoxS1UxTiVk''@;'; put 'put ''UFpmeFNoSVpmJlBRTCVnYz9leTlFRCl0UHhSJi9lbC9bMXVRIjZxbGxaeGRHOEs2PzQ3Y1A3TW9Fa3pIamA/Jn1lLzFJfHFsbFgsT0QlRT4/NDd8T2JaJWxJSVthV1ZRTD04YlNIajlYJX1lL0Y/M0tnSl98NzRbNDJLWUoiPzF1NVhjeTVFQX5lL2N6JktZSkA/MXUuOjJLWUppYGFYR2oiQzZQ''@;'; put 'put ''d25mV24lfiI4S1lKZmBhWDJqTytjQz19ZS9XSnkhcSFTSVBwQXoxZzM+cWNWZkpFMiVtYW1qSWp1WFVRSnZlVkZUKUA9YUlqU3Uocl1Oa3hdaGhJVmBVPCJ5N19RK2p2NV82WWt4P2FaST8/biFYT3A1YTl4UnMhYWVhPCFfNE9ObWBvWklZYHY7MS90cSpsWnghcSpsZWFlVkBTXkJMUklqbzV2''@;'; put 'put ''JXkhJWNqK0hqez8vJEhqIVhFZlArPllONXkhJHF7M05jL046KzldZjUhNGl5M2E9az12WmZtanVKeGlBWnY/UihJUDh6RG1bWzdVYyFVR3M0SCQ3ZSNqYXFxbVl3ZEc+MENneSFVR2BOWG9BZjtgOkQ7YnxsVCpeKm9tYXtZJG4sY3hfX188azBaQ1Q/fCRRK14qb21hYVIhSzRqbSp1dmFmVjZR''@;'; put 'put ''KX0hQXFtYXtlLHUidTB6IWdpVSh2UnlIYHdyTDl9fCpXSy4mSCI+RDhQM1hQMEhqdVhoI2x4L2kvZVUsRkpqb2lzM29jN0ttIS9nJnxPTm1neCtAKn1NKyFJQ3gmUDBYNUlhPG9xNHpbX2pONGlwdVArRHZ8Mk9xSXRuPzFeX2ZDMyVOLyRYdEAzMV5qJHZxMm05ISN6L2k3SWdWc0grOzxvMCo1''@;'; put 'put ''X30kflpWQWEqLkBsc1dic2c8dSxJU2ZVbkdYRW4yT2t4dDYuY3ZnbCpCcVM+cmZ3dzAsPH1xb1N4NUI3VDssM21bJjtFUCg1VypPbT5efVBZXnBsb1I9L2A0KFhvbEsxXmQkOn4vfGJuYFFaOkxVLzpFVlFGWyxSMnlUPGw1WUFGKHxRS3hEIWBvOiZlQmIpYSlzVyk2N2tpNVkifCs6P0V8SU9G''@;'; put 'put ''U0w2PFptWVVQfD5mJjAjb0IyeHhGMkYqNTxkX0giZH4zU0w8VC9DSn0/TzNEZ1lVWyYzVEYrNF9HKWFKVnwpSTlwOEAyb0ImOmFjX0g0LnFxQTZ+eU16QiprNkw7SDdoTUVpdWI0MCpMVns5P3YpT2taT2M4W0didENHdHtXd0RlRWN1OGBiXj8kJGBTIVQpNnZQYyYhPz9jbj8hPjhyLCVqO0Nl''@;'; put 'put ''S1N5PUVDKUElRzwzZF8uaFt3WTI8YUM2Yk1hLzRLT11eK3VjMl9fL0dbMD4wQXMuMjRpbnpZXSZkIT8qKyVqaWB0ODtELkIvKXYqbiF3OEZkSG0oXSEocVkoTkI0dGpXRGx2Mkk6aCtDI0xna1JvQV5PXmpVeC9qVCpWLiR7NWdiVz4vUHYjJkEyc19xSTRTa3wuSHx1SXElTWQwe0MzXndQaVQ+''@;'; put 'put ''WTYxN2EzKWw7bXsuOG8lKGBXPzxBYH4mcHRseShzWV9dJVJOK29GTyU9NiwhTSxWPFUreTFFek4pfThnVW1gT3QzNGxycStkc0M7cT5EZltZPEh1SEZuJXJ4cDBJSTtAT0sxKmBsQ0pCaVdvRjJsJk06b1ghYjhuZTQxPzNDMXtBSGQhaGVuI2wqZlJURFZma3QvYDV2ejp8Uj95S09nYHFTcXVV''@;'; put 'put ''XnJieyl3ImYqWGBXKWg+VyQsP3FyWz1nfFUhaj4/MD8odl51dTVbemdCMnp5dzt4cFFyNSYzM3NMaGJ4KFJpPlZFZkw4R1NCMnV4L1U+VmhFcE46Wj9fKF0ucnJmX3taXlc6c0MiWkJGdThKYH0mdDVkcV9rY20qdUd4M3F5dlJyOlE2ckRpJVB6b1ckXyFfST13fD1BcV9CUFteMXc2Si5Oa1Y7''@;'; put 'put ''Q1smO2g4Qj5TWzJvQVZefCoxLjF0RT9ney5IMnt9eWxWSksrU0dCcTE8SS8lPzZzVVJsOzIue1pCXU9LLyZ8bykhN1VpZF9gNHpeOWw/S1ouIU42MTF+MyhofG5DSklqMW89amhbY0tQI2l7aUtoUDJvX0JHUyRYJD5vMEBPW01xek1kS05JZEw2VWFEPlVhYm9UeWskOlohU3s/RzFLPXdtUkVn''@;'; put 'put ''bXBdKy9QbmJ3Iy4zYXAwTnpTSzQhQCNSUnFPRUtaXTcuV0xBSzZmb2ZsdnJyJV12UnU7T3J8cncyN28yKWFpNTE9TFBxQVAxLi5ORTJjcnd4RWN7Vl87XTwxYnswUHZjWXZaXVduenhPMlhdQyVdclJVQlkjZkZAKjRKO2FTd0BjKjo8TXZaelpEekVNY1hgL0RAJnx0I3trTWFofVJUYWVWTkEx''@;'; put 'put ''UjhvZipdOyYvXip1TlIhWDlIMHtZbENNTSpTKm9YTWVGLzohU3ZeIV11YTFtUlVWenJjUWFnO3Y0Y11FLE1Ka3NXPFFzfmlhIjB8cmwyXnUlXzE8Ziw2JDM9NmgxJkFyZVJ7NWlNO3NBNyVSWjIwJSYlXl9sdmBkITopTVVlK3EmXVhwZTNnLmFwfSFuZlosI2RSOj9YVkkwLCZaTTNpTU1+QEtB''@;'; put 'put ''aDRuLyljOG0sJWpAI1VQMD0hczV6JVBpOyNdJWo/IUgvInRRVHI3TWlWZ2NeKShGPS5YRlluaC9EQ3xrPWtsPy8lUFYmc20/IVRibHwhOWx5Wmt1SSRYLmkuRUB6eU5SbWtWRlIwSFcpPUI2ZlJeXTFoUjpSRT9QMShdXWAzbW4vYnY3UlJ6bEVvI2BrJDswWWhVYld+JURJK0Q2cE5TOjFwSFp9''@;'; put 'put ''aWspOFFfIWBuT3pPeTB5RkE0IldGP2o0Lz9HNmskQjJqLi9wM2M3S09hd3RoM1kwcCkpLkQsTH4rLiw6ZFhPd3YlRSwzMDI4IzU9aFpRI0QubyFUWGBZflFIVSk/c151RV4vaiVZMTFBKGB9IXlGY1peXWclPT17RWRkX1dobFtraE56OUBicTo5SlFLJTlnZUgrJCtJJCRZMkBWd1tFXSRwemJH''@;'; put 'put ''ekt8OD1+JnJeaXssdipOQWFSM0A5fjlyOD42ZFV6c0dLbXIlS0JlXl90Pl9Gak13QHlUZi4rJXhDWig6clZ0IXJ6JkVaWzBlSVptOlY8eGAwXVpfeWpzVF9XbD9xWGJFfS5zezxmQUk7dmUsd355NjM3T3dRL0ReX1o4N3ZRPU05OzVKfFlAKypOPlFJZl9aTS80VStIdi9GQSZCTz81VmV2c2B+''@;'; put 'put ''Zk0pLi9kI0MsOSVDWTRsdn5nW0Y5JGQydD86Lj16QllQOyRQL0tdZUdrQ1UzJDljRixNJUNkcHImTUBmInd9VChzXU1xQkhjeEhNWSxzaFlTbks8ejpzJDVyLEA5MnYuRWJ7NDo5U0RwJnVMdWs+KGkhaWh3KTIrTlhWLGF+YXJ6emhdMlpNeEA7VT4/WFp0MDcrd2w4UHNbOkNjeiZ9VyRyQXsh''@;'; put 'put ''WCozKF9Id0NjZURPRXtZNClOZVBeWVVjW2VfTFpuakRHQWMjcEwvYW9HJj12U0Z2ckFbRDsyKGplLFF+bX1WPHRWN21aKWhMXlowW3JrQXhGeFJuPztOU31TMVdsdD9gZTdTYFY8eEUoNGxIYFhnTHtFZ1lmZG9MOTJOaSpkbU9qTldabHhTXmtOUl0lWT8hWXJ7MVtTXkJzTlcqdkt+U2dUWkB8''@;'; put 'put ''cSFkVWQhPCwxLi5ULk5hPy8ycDt4PEZ6Y28rOE4/Yz96ZWNSIypVOERCaUBPTzAuXj5yS2pxdyNdME9AUX5uVihuIXYsR3plRDYycHcvdTltQW9nbEIvZC4vNVllZyMsP305YiZwXT4rZWlbRCY1dHs6VT5TbCI0TG85N3NreilXVCZ6RENNS3Z0eHY5ZUlyUV1FZGRXaTVhXUk4RGNPfSxIKTo2''@;'; put 'put ''O2F0UDJ5fS82T3p1ZjA8Yjw4WiwzYiYkYEkyN2syaF5oPlBlfThedSRxNTsuW0V0LHtUJDlLP2hxQm5PaiJXb2ZgQyVneyNSZW1zbV5dLCNlWnNnZTVdaH09aWswc1g+dHU+cV0+Zlo5YzkoJlMsQWVGfjNhb2dLcDE9fitWJCpXYjI5ekZhVjg/XVQ6MCRFI0d3REBwSTc4dEQ7QGk/cC5NcjVD''@;'; put 'put ''Nk96fHo1ITY4cGFdLiFXWTdqIzh5fXZmTDhEYzBINzN7UHVUMlFZSENQNyZ5bWdWYElKMFs3bDksJGFCfl5BcUImYXp9I1EzN28yLmRVPCgoSiE9Zl40e3tbOyFCe2RCNFdkQjRXRC9EZDZVcXprUVpFN29UR29MbCk3Tk9kbmAlZ301bCVzJEg5KD1ZdWpZfnl0RmZlPmdbOiQ4MnplTCpwXnRw''@;'; put 'put ''bislJjtDL2BuLylkVEVDQGUzQ2VXPilbU1l5WU41dVslUiU4JC5lR15bZXlLXSZHOXE7Vy4/V0BsViUidDdffDw1aW8qPnx8bGFVSjM0ZnxZZERDfVlDRWJyME40fHI8SnVJMU5hX2AmcGdFakZAY2diKiRbTjRUdTVxQlNASUttbj48MnxXYnFCU2s8W3Z5UT5CTHVFLCU2aHozVHc0L3xPSTtf''@;'; put 'put ''Qi9CM3VJeCo0VmBEaj9TVzV4Izx+IUhiSCtOe0hjbyh8d0Qke1c4ZntCIl9VZm5XdFI9LikpVFY1NlJCcCF+M3NbYW0oYDZrXS4zSi9vKjtyXnh8UjNxe0E+MTdPaG85Qjs0aEA2VGUuOFJ7WUBTLnB3Qi5Ba0FTcXUvRlZYRGZAM2g5Yi5qb05Pe3t7XjIiMHN5Tnc6ajRqWHByRjBBTXg3KTwk''@;'; put 'put ''TTplWnNtODNdVGJHTnR7d3osd0JVOihpRDM1MUdDZCJkYlhuPH1nfms4Ri5tXWJfIiRxWzgyP0BqTW12NnhuQ0JuXVBxOFReOFBzLFY1dW9vT3wxfiU9MGRlfmolTWU/K2Nfcm9XLDRzd2JzRnFzXWBUfUZLUC4hO005KSFQZ3pEKUNFSD10ZXxsMkFzWF9COyw2O2U0OSU7RChYXkpdYmtXeng1''@;'; put 'put ''ODlMNXprIjM2IUF+ajxnSzBUMTlCKjRGLls0fmFMbTdJbWx6LG5iTVIoUDo0YCFdOHB8PV5rdEV7TjlsMkJVMWUhLmVJPWpXeD9bPGk0T0AkRzQ2MHljWVF9LlhuYyFian5HXjw3fEYhZVk7LEkpSFpeKDQ3REFzOm9KOSpvRWRaKU4zfUZma0RyR30iczIvJGBlYmdxZGAyfjw9LmJUOm1LYFQy''@;'; put 'put ''L0pzMmRBfmBFUipjQkRvS0NrS09JWWQ8O0FsPy9KXWY5SUY6Ty9tOkBIND9xOlJtYCZodFlyWHo5MFUyczUsS35ARURbQExzcCUxVF9BLFdEK2AxWU5hOit+JTdGPURXNjo1QEhCe1cvem1aJHcxbyReNUB0YTB2cnwuI3E2R1BpMzZ4fElnIzN+QDJIWmg0LilyRVEieDQ+Yj4uR15NQ2FpJm50''@;'; put 'put ''QCFoKkFfTXNoMl1uSnJlYEJXUlU/T3twQH0pU2UlJjIiKVBld0hUYno2ZV8pdzdPQmVrejgqVyU8bDBTMk9aNmtXSUFWZWdXPXJnNC9YfFhia0lMQjx6OkdlezxPQHh7biZWV3p+cjZCci9OQjhnaWB5NWg6QDlML1diYUhUVU9zJHU1KXVsYFE7SCN8Q25LSyxOa2NsPU8/LnE4eitHJiNnPUdH''@;'; put 'put ''InV6a1ZCL2xgN2g6O1VwcTUxeDwscUhSK0ZWSkM3bCZtfVFGZVJ3fkpBWmFsdWBwTT0vJmo4MkJZWCU9LnVtWD5UUSUrNSUsMXc1NlM8dmx5dVJ0e3laLk1UZ0ZMJmNaeC9yLyM9VyJZLjddb3pmU1dwJUdJJDQ4Sl05SThoWUVNaz8mTUZXfXxDKG9bd2w4OjlnOXdiUjMxd3FuJiZ9bVJCOGl0''@;'; put 'put ''UShnITIkdkRZW3lkVGgmJC5HRUElMT1YVk8xa2wxaTtSSzxYRjdYI304dzFbN0VNQitOZCUsPnIlSSwxTT0vYDY3MFZvb19wMzZVITpnQGR8LDJfalU5dnUkWVBYZWtGPz59V3JQPllVIiNhT3deZV1iXTEvU3xHXWVgYTlvLF9dcWQ5RjdPNzhzd3IuQEk7LCx6eTZ0Zk5OL1h9Znt2ZyFzJEBO''@;'; put 'put ''a1FrQnpgcCllNDo+R29gL2Yqa34waTNyaCRYTXN5SmZ9eCN3RDVtSlhaLihyTTsvZEZOI281dVA7TWkoRlppPShfeUl3bSRLVzYuREl5Oml9O3lgcChPQjgmIlMrKXc9LypxTy5FJjl8RWUhRlRyPy55bT91MztUOG9eNkJ3MzJqX3l4ayZFKXdARlVgb15TZTozezorcnd5RXZSJSlvT2U1fC9+''@;'; put 'put ''emxDTX5XIl0rPSxTWyhYRiRoL1d6LFt6VmpuXVdSKWVzelJnXTV1U3xvUnRqfnl6QWhhTVolKyNkTk4vWHd3Q3M6WFBRMiMwN1NVWVBrUnpdN2Amfl1ab3U8VGosQCtYKSQpTzlfS0tkSUJlVT5aT3plckFFP3FecTFULkxILkl+PyE3O3QrYThtYkxhZy5JRW9kdTJKYD5POmdNQUFTcUdLd2JR''@;'; put 'put ''KyIvdG1Ack1fUCZxQ2wqZSV4VGVXT2NxemJkbyIwc3M+JDkqN2B9RGpDYjUhWDQ2bXRoNDNJW2ZlYEFdSypvKWw0IXMpRVpqRyx3JVNSOWghZjhLR1pke1pmMj1YKW8yVE9CZ2tgK0gyVSYzPldpY3F6ZzN5VUFRKDEpdTEmOS9laVd+KD5ybyhWe3V9aEtUKyJdcHFXL1R4JVtQe1htei95SXFW''@;'; put 'put ''Om03dlYwRX4xRXJOQ1RsdFZpTnI/eDRYakdLOF1lQFFwYnhJZFJOVEI6MzplOGhnbHU1ciQhLmFXLndyeTYwcV9lKndgO3soRTghOHlIJnlxZGV9MWs/ZCh3OnFQXXMzW3UzOjM2ekYufUhPRjpgVj0yLHZ8VnNoIXZUL2V9RlZPbF9OcDBsOnZIYkV2OE83Qn5ZMFNNVWlUaTshKTZhc194Kjcy''@;'; put 'put ''KmZ9fjR3WyNuZSZsVml1UnFyJT5ndn5yNUdII2gpZHpLeWJXW2EyPmIyOE4oNGtHIlRWPWwsODJeKndRblE+a3lDfTkxKTdBNjEkSnMjJjI8eFhvKD5eR0ViZ3kxO2QkS2M2PS5sOCF4PD8heGhTcHRiQjdEJSNTWFpbWXNVVXAwS0p6Nj9kbjtpXjpyM3JjWGU0O0VBLzVxTyx8On5aa3Z+dUxK''@;'; put 'put ''NUBrMDdmLylaM196SzZ5WF83fk8lelFhQmtQREFBLGhISEJ0O0NeSmNjODRHdXJDIV19dVIiQ0FRJjdkWGoqZ1RSbnpsNmtFblJQdnVXKUF2KEp0eU52KH45c2N6ZH1YTWwxZE1UMTQyaHYpaE1obCVjRGN6SClSREVydT5rTFIuIWk+S2lITCRLfXFTVW4vbC59VElpPk8leUVEaXQkfDdbSF1T''@;'; put 'put ''M3dQeXUwUkREdipTb2N3Rnc8QzMofHliXldjdVdmIy90W1d4KVE+ZGhgMypKLC5UZUF5Slcifi9SOURUVm5fQn1UN1Y2fXJsNT97P3Y7dj1MQDNeRCNGVGNTdEo6dTJxfnRaUVgqKVcjRWlFNnFhPHtzZVd0Y29VblBIeUx9bl14bk9RSXhaTXA5VW1yLDJsJVJiaCQrQWVeVkxqMVMoKzdiLD8x''@;'; put 'put ''SU9wNjZIVTNgJnJLY3c4cTVLXjNWcngoWlk4KUc6STY7Jj5eRFR5P3ZdQHpdOUVLTG8lTHFffFJYQ0ZwYX13Mn1EeE80PEkuMmBkeGVSYEhzci9gdFdnJCs9QDdrI2RJJiRRR0tYV1c6byM0a1FpJnJedGJIVX4pSFZ8dWdULDNAcTNdNFl4OHouQF0xUEImQ0pDPn5BNlBvVFdxeG9ON1AjRk09''@;'; put 'put ''PlpLQGN0R1tkPUNvTixXWGolKzRGZFB4I3I9SUssfjFPOipMVH4pXTFGantpXXFfY1JAdS89fn5KSVU3Ymp0cj8pXX5xdiw7aWp6V296IzZGbWVDJXI/fGhxY3xbUWB0fXwqMUZsUmRTY3AzfUIodWxic3t6O3J0SUYkR2NvNXslO2gyYiU6Y2d+MX5AVjpRbDRnWDNuQyRMSmgxSiQrOit4L3VZ''@;'; put 'put ''Kks6Znd+Y0VmbTlVWDt9dD1IczQxfFdkJGBKTSJ0WGpSeSo0PEJTUmpiOCxCIzVEPE4wTG5SSzdoemF2bmQ/P0VNYUpaTmA7OUZTOShPLmBZUF5mWz1NXk5HYkVMPVsoa0VoLmEkezA0aE18L2A4X0Y1WG5RNFk4V0NgentOP14iRiwyTU1eZWpNfVRSL2BZPHdVRXsjPn54dXhzZEU2XXtfd3A5''@;'; put 'put ''Tm9ve3hdSiwxLHJzZmdoTjJDVnIuIjVRPlRffjV9Y3c1Uzl3PVAxZlp4NS9bPFQoKWtiTEZnbSwoTT1BY3M4YmtJVzxQc1tBZ1JVNkQ+V1ZhWUtCdXNYNHcjVmF1eVleMW4ka0EkOmVSb1s8MjdrMzZROj1WJHEvbkV0NjxSMyV6WU4kJHpOQD5wd2RXOz88bkphMmEwU2lrQSIuLjB5Zj8mZDta''@;'; put 'put ''OVRDWmZCNDE7X2wsNyNyQ2EsZGxGWjIuSz5NejwqMEtPT1N+Z3pDOkYvaFQjeXZ0Lz5TR28kfF94eVlAdUN1Tk98QCZ3K0ZaNi9NaVZuNEUhKGdaVjZbbGRbNjIqPCVeXitGbDJrRyR0eHRwVH1ML2UpRnRGRWlvV3V3MEwvSUpSTDVUa0FITDIja3gwQSVuL2tdVT1sajNnX2NjcmMuRmNEQlEx''@;'; put 'put ''MjZwYGNmcWZWSVBPVSYkOmBtUkdAIVFvZ0ZrdUtUUz9lXzo4TCQkXjt+aSxdUEtWXnoveU5DSjxZaHRrT0BJW2BRN1MsQVg+MjxlT1VYdVt8U2UiNmZycFUid19AOCZhMTF3K15HIipFbGg+Yjg2TWslPEhhYFRPOndnTnUmRH4xPilUWSx2Wk84KH5CcSZ0LzdZPHcsfHYzbyZKfVlMOlNlOjk6''@;'; put 'put ''dzN8WTduT0t5NXZTMjk4Jm46SEt7KWlWI2tZbXZtJD0sRVNGVEJdZ0wpfStEWShsMFN5aVhSdkxiKWhAKzdjSGo2OXI2Xk5QMSg+THhjRS5YdndiZXcsRGUqeW1vZH5IKjReZWsmZmlKZk1QRVBPUjdGbzNSKzFxelA/b1AvX1RVYnJqMEhKLitTY2lnWFAyNXNhcFQpVjRicExlTWVuMkxXdm4m''@;'; put 'put ''QGlMb0NGUVZdPXhvWjw0bGlPeVA1KE1eKWMpJFdhKGxSZCYvR249TWA4XVtRUXI3JjdGPVVOJFVkeSx1VHcrbkJTLyFMKXl4NDU/dFdyYl12STR+bEdAOjBdTWhSRGRMYmVZdzFWekNWR2hKTE5ePntEezs9OntVckVRJSkycDZVS1ZNWG5yQjNiaW9qcV5XRnIsdzU6Uj9XRUVdeCZVViYoX3te''@;'; put 'put ''SXo5UGtKLng5IXMzYGQ7Yl5YZXVbU3diOEQrb1Z8KGc8c3B7XSlYeHgsPUdHInc7VU5kfCgsYiNFbHkjSDR1ejZ0alJdQE57LChwPCRVbG5oJDhpeFl2ZGQpKmx6Kjs0TnxLLjZOeTEpTHcwODgzJlZUViJmdjYpTEVOJkx5VVRec3xbU0VhWzVfOExpWzhNP2JgbDx3LEhzKXxzPyx6KmYkQ0Ep''@;'; put 'put ''I2wqTEtaTXAmY2MxeUByekVVPkEqbShXaiY0LllYazptKytmREpHaGsyc2dMKSFGRnlJPHp5WCp5fVhTem5fRXJyW1pwfHl9Rkk/NFJPKGMmNEJ5QCVoQWYwVVB7e2JMRH0uP252PCMkQSREU0JQLGZCOXhtIikkcSE1KyxRaX1UQGpqTjNgbHBMRzZTcnFDdVRYJnExYUU8cV1UU1gzQEFuYkgv''@;'; put 'put ''O1dVI3Q1a3ZaOzM0blI7QiV4YXhFMzB9W1ZPQnohcCh1cXZuNEtYZl9VRnY2LF5pIXtiMS5eTmtsRXM4ajZCQnh0OzR8MktBITdPOjlkaSlHMjwzR1hZUWhlL0d6OHFSNDV8cDlQKFp9ZiRVKElyaXk5XTVDfUghZEIoL29xdn5KaW1bZHUiKj1mXUA4MiU9cGFxLlFnYGdqPWElL1Yodj1DP3Uo''@;'; put 'put ''IWdaXn58RiVfbUpfK3t5bylHZTlkemxwTHZ2JGJGbGR0PV1vbnB9fjNPTV80clZwdmJ6I2dNZy9nbVIsPys2eixQL0RyV1A8TWtDLE83QSsrdntjPzYzIzVsfGkiRDlHe2o0e0h6LlQ9VW16cXYhaEpMLCJdKnUsVVJleDNuQjpFZV04eGJpSiVwcmNGSFhrOko8N3ZLNzo5a3hqMG8xfDRIcyhn''@;'; put 'put ''XVl2aFteQ2Y3Ty8ySmxtYUNtaSZkfndDbkxhT117amRGc08qP3JsT3xVfU42aEVvVkdHY3pjXmtvRlZoLzVicThraH0lTW1iKnRlOkBWMDUpbCxoN2dtLjB4azQkTCZoeE9bTEY8c2ZyVkpOUypsKU9aSzc8KnBbcGFfVExLUGlhPE42KFd6IUopM1Y9Y3M8cHcpdEpmYTI2RHNDR3BEVmVCM1By''@;'; put 'put ''IyMlVTNYe15xc256cFl3aSZrRzw4Imx5InEqZXY/PUlCcy53eH5IcEMpMV1kcWd4WUZWPUk1S3JIbCpMKks+QV1JUl05VG1QWWJ3ZjdHJHtAdUw7NlZvZ3FTN00zKFNAc0RVeUtEWltGZ1U9NW85WW17XnNJfFd6QHM7dmJebVMiKkY0QlFnPEw4UDJdI35rKXJRJXk7OX5UZklsRiYxT25OfCg2''@;'; put 'put ''Ing9OzVwdUtSdFE3X3Z7RytfdHVFdG1oa01KTGBvX0Vtb2d8cS4qdSUlaTplNl06ZiokX0lGRCRpbyEjflRpTE8iZ0xAezs/REwqIWYrK1MwRndpQUQidDBPZj1GVCVxdmJaPF5ad0dxL2ZqP0hBTUtoTn12W1tVYGV2dyk4SDp4VEQ9ciU5Yz0+c3pedSU9MF8jOllqe0h2d3FKNGBlTEV2Uy45''@;'; put 'put ''YlYkbTlFNGA2PC5MZiZEXkczNDJ6aXlWc1BDazYoWUNaekhtQU1XO0huZVhzU2RSLjFfckBkQGxJUyg3Rj10djFFfXMje3kwKTpheFU1fHVOejVRR2k3Unkke10/YW9nSWcxLF8rUkVDMlI5TVo8RlQzK1hjOCMwP3R8Oi5xfU8jOlhWTm1XPSlFLD58Y3trNXFydzk4VElxMEFoMVE+Vz0jMGtl''@;'; put 'put ''TSNQfHkzOzt8QzcweV8/IjYzbHwxZFhFMjl5a1FjOVBKaUtUb25vZzwiYHF2IUJbR2pudmcuUXk4VGA8OHdmazA4VzspX0V0MTIybHFqU3wlLmA+Uj00bjZJX2N4cW4vSXlGIm1nd1R0ZTpDOlRsa0M+MXJta153dEdeTT0oWGxZU3RYOVhHbUNvXUNyOGBCIWE1NW9MZS9+PFo4YGA7b1RTdnJw''@;'; put 'put ''XXJfeiF2VEVgS18rJVBiJns4VDE0ZkJpL1FoRHFzPUdgezQhOGZocmFnOlt6NnQ6SD5HSkx0bWB7REtHYlkmUERvR0YpcVFAaCNtcCt2OWtbOFNEWG1TbTpoV2J3PS4yUmEmISZ7U3ZVKWZ8QExKQy5PaTI4LmR3cWBXRHUqRnV6MTNKVFU+Q1UqTD9TdWNpSFVsYnAsVnlnc3FbMUhWWFt4XyhX''@;'; put 'put ''czU+ZjAuTSlBeldvaVk7bThLKlN8Vy8paXAyTyJjUTZGaVAwYnkwcENiOFZFK0dwd3JZKHc2V0hwcFI+N3lUaS5dWVciR2NjOT5fclExOWk9ajlLZCNIWyFzPGkjZUAoamFYQ1lhQTJqUiZnTVZGVHA4VS9nPjhTeXcxRGJgb3JQTnhRTjZ9cExRPFY7XT5eR3YwJVJyPFZ9YF4yQFRlKCYsYm0x''@;'; put 'put ''SXplJGhTLyhzNk5kbiQ5T1BffTtnIn1rWDhYJk1sOTFFbEtDaTJVW100UiFDM04wXVRsIVVocnhSOGtsX30sSHIuQ2U9TllIayR1IXJGc25XMlk3d1UwL055M1V0JWpjIyJgU04vYWJ1SWRnKX0oS3dDImhtZyIrTmZkUXgmRWhlRGlJbWU4eUg0RUgjRjY9PDkwc1hteyttSzE/UW5XMm8vQGsq''@;'; put 'put ''MDdSfDsjR2ZLKHhoZmlIa0o3Tz49ZV1bRDsvSmwxMldbJkZdMiEufTskT1g3VTd0I08yWj1PTGpzV3JLZXs8QzhpRCEhMksyJERwO0J0a35lbX1NZVQ+W2BTQ3xxQyZAKDVMNi9ReCEkOiErMXVxTn5sPENwYyR1K09WOmNaOWtdNm5ZN25SVE40W1ZdRihbLDd3KVVdUG4qVWc2anNWYixLQDRi''@;'; put 'put ''bkFGSWYvTSNNUSlzeFYlMWchRjZnJHpoUDc4Int1aGhKVFciWVREfklqdC9hV1BGbUdkJiJxdF5CVSMmX058Y1NLRyheK2ZzJXNEajN7UWNqPTZbZzx9VChJPGNxKURmaXRDXjZKVlpVKGMrUVgwXVR1NyNHLD53c1djYy9ReVVMPnE/QmgmdisjOWBGT2VJRTxJZXBOVGZLYkg6Ki5TbWZFJH4h''@;'; put 'put ''NTgjXmo7NSlwYmxGK2JnaEMwRWpzK21mSHhYd199MiJ1ZUwkOyJyLF9tdzsiVldOfXJSQm10Iyk9QFR3KCZ+RGw/dHh7VXo7RU9rdk9QZ2l6aVYiVnVdRHd6KlFOczV6ODVjVWh6T3FWNlNMNUM/O0phNWpra29OKCwzcHl4JSZNRHk+WV56YDNEfGEsbG1XdXMpfDpyfWxkOmVpfTZZSjBadDlh''@;'; put 'put ''OzN7SS8qJFZLR29kMzJmNk5iJk15MUlXNzgkQD4oT35CW3AocSV2Vj9+bzEuUFJqWFk5ZlBra0Noe2E9PmNJNCZjOiZZQDIwVWpCTFsrbTY6M0tYTzs4cWpBRitEJTs8bWlLOzZvd2RyQk43IUMrTFVhOTc0TlZuS05SViFFI0dPOHRYZmFLZ2dNOW5qJkBnbjd1bzI6SUZ0PU10UGxiYlVIKEol''@;'; put 'put ''dDgsdk9rKytadTZUUU1RQi51Sm04RXojLnA/KCZsVGBMZVlSVFBLU2xERk1bP0smZzclY2dsbk5sQztbZTFJPW5LSCZufipDcSJ+JGtTM0xdQzYiempOTUN7JHpJLjxadmpmVTI9fWh5VGpENnM9SiJ+M3poRWpnZkEpcU1MM1tASShZMV5aNEddYTs2YT1TUk4wQ1V6TzgxImBMWTVpcGUpOXg8''@;'; put 'put ''KD5lY3JKLmEzXks6N1JieClafTprRVFnMGxVIkx2Kj8lQD4/ZHlPSXBqW2QucDlmeVI5SF5BdXlQOGh6fVgld0tbYCMjUyl4TClqP2ltejUoPEQoMk5FIzQmQzIkK0l6PGpQYyJLSCh7PVl0dDEvfUl2cl85OlNmMFRIKC9MdHt4KDwqSmkrYUNWOTsje31VQ0ghcCFsVmBZdkExbyFFMF52RF9G''@;'; put 'put ''Xj9jfXxBdFVqZHZUT2NicjNJI3FMbioiP1VHS2EuOWZSUCJ5aTg7QnVsZVhCZjlVZyF8Q1hMUitdbHk0a0RYKGFNSGoqPXhkMjF1clFHYCYyL1pscC9aRl5jS2U2XmZHP1o5RkZ4a1hTTj89d0pUUV9wXkhhdXoiLE1PX1ZJNmdqX1gxVD9qcCk2Om9YLnhvPH5EOHZ3bmksISQ6LEQpbG9nOnVX''@;'; put 'put ''Z0ZYLl9iYj9uZl9bWjI3RD16c0xoYlddMiFbTHdSOnI+I348OiR8Y1RmKzpIUE08Tj1HQnVWdGJyaFtUTU5PfVsiayRubSlzIW9IWVFyPjFYU3ExNWl7RUpKKSpaaFN2dkosdDV0R05JdyRFYkh6MjlaWkhZTUNoMm5EXlpTaSN9TXlBLl1ESSRPVGJCTCMpe1F9by9WR2gvT21eNVZqRlUrRX5P''@;'; put 'put ''Yn5PQmN1Ont8NCIhYnRFVlQhL0p9NiIub150IiVKSEcmfW8+SyxqeW5eZUlSa3QlezYjXVZYYWY0YVM6Ol5CUV0pIlFDUStYXkhFayUpMWdzRzA5Kyk1cklAKSkkIi9PYkU6N2E4cGlrYWkyQilmeGFFYm50XWhwcU9FcTpgRWReS19QUWpVKyJ+ZUBlXT97IVJDelE7ZzNkNSxMfGM/dGomSVRD''@;'; put 'put ''LExOJkNgQ204MSkicFI6Xko6OHZzOFhCKEcjNFguPU9gPDpeK0VSSC9ddC9Qfk5jdWNWNykmLD5lV1JHbX4+UUpIZ2d4T2YzMnR7ZUFkZmJsXzR1dCZbRkxbaktgXUt8MmU3fTZBakNxYi9DWEBwYm1WZmg/aVFgbFp2ZixPVTApT0puLmtFZldma1hqZ0sxX1ZMeWpBSXNLe1ZOb0lmKyoqb0R+''@;'; put 'put ''aW5bQ08ze3JjTnFfXUQuSWc3aHgoZ25bV3w1UDJSakoiOio4anFuQkVRLGkpJUtTQSI2JHZGbUBRZWJ0aUczQC5OV3JRUG1eY3BjfUY0ZTQ8Vix4MmIwQE9rInBnUyglLkUpJlNrfWhJNF5tPFkwQnl2UkJmezJVNVtkVFd3QT8lIWplQnd2X0c+NVArek5bRUdYRXNUIUR8dFMwZVVlVkk2VE9F''@;'; put 'put ''ZW1rVTw9O11oIiROSTlwKTxSLk9AWUxiNzopWyRRcVBXL31laVZsTVc1VTBdQCpAR3UhYFgre0xmOHolZlBDc0p6ei5mNyhxK11IZyV1QlozbkVHU0kqQ1EiMnpZSFZESGA/L3YjXUc7NVA0MF16e19jcG5xa1RRK2tlL0lHNy84MilzcCN0XnZeOWwoZFRLSFUucHRiRV5UREtmajlsI1hNVV8p''@;'; put 'put ''cmooJF1hZGhlZltOV2J4TSJ+enJSeHxYM3hRITg6anhVcTgmYzo1bWhFPUMsbD1LJEhQRHQ/ekFkNERxIVI+T1p+Klh3bzlfQ2FqY15pYE5reFB6fSY5fiVKXzpJMTE1K01VNU9IUFpKcVtlXn1qS15oIlFZYHtRcEp1bHdnSTptYms8R1ZbRUR0ST12SnAmcCx0OCVXfTo3ITFqOmlsXU0wfmxr''@;'; put 'put ''WTAhTkhpaHdeNT9VPmBINlhYdT9XfF8rX3A4NUkkJVZ4PTIyYWFwSmRsMHpiMi52W2olJDQ4bXBqWStKeXNSeShCWnRdIVBYSX0wTXxWaj5OXTMsY2dybTJWTXhbMjFXM2l5UWQlLi9qNWM1TVUoZEdrbi9dQGt1OyNyKD8yL1QsazhgIUpabF0hZ0FsPmYzTVl8UVBDKHNNKz4jWGFSe1k6Oiso''@;'; put 'put ''Q2YxLkJmRGt1RyJ4eEo4PEdmPlcoZDBTZU47e0dSXjB3YVZ3UXVFaTh1YD1gaHY1YVMqV0p7U3FtITJ0TDVoLH49W3xpWEEvb0xJeDgpdm1zOmdWR2kudz52bUZycHdeTGB9I1QoIXh7ZHImd1hsV2lFejAwYUdHZHBBIkMwZlJdLFpHNX57RXRrJU4zdVhTaH54TC5QXSFYfjFHYGExWixCRHBF''@;'; put 'put ''WFdgdiR+bXtzNCkzflpiaEVAb3l3TH5Ud2Z1OWYkc004OUJjcnpIcG19cW88LEMiSFU+PHR1T2VMMVNqWl5+NkZwXWpfS055SCg2RUB9fUw+fVREa3QmMEIkfF5HY2V5SFd6XmpPbjF3YU84Ky49bTxaPHRBfllSTTVhekhlUzhRQ3gkRyhbT2M4UEVMcWpvbU5tc1BkO1V7flRxIUkjYlBVWD0j''@;'; put 'put ''eFEhbXsiVzt4bDxTQV4xO2pJSk1VO1Q5XVt4cCJRQnUwJk5DaEQ1MzchO35BfnxGbUFBVHF4fWomYXtecT88aWU5SyNUZEBbJHt+eiJTcyZzTigmQThHNWhmamlpLE4qYyF0Oj1EdXkobS98TkxqemJueSwkL2RTJUxeZzpjNkxOPm1sKyx8W3JwTzUlTjopN1thLjM0JjZ9dix8RHBUemg6eHAx''@;'; put 'put ''XmVPKX1xRCxaZTF1ZmN9V3V9OjhtbkJ1dCxuMzUhaCw5RmJheFVqUVV8RUFxY0czPVM5b1JvOm9mfXdDeDVPLzxeJGFDVXJmJWZSIUFfN18wTXA7fSR+eixsfUpKfGNSbUJyMGNMOCY5Sk5uV2pJJHZjLmRsPSIxezgzS1YlTWxmUlYjZVElRG4xZVZ9fmBOTTNVYF8rIXZCWj91a3UhZDd6cFZG''@;'; put 'put ''IVdLLjRTQnE1SCpCIUpkNTkwTUM+Nkc1T2UxI0J9d3khUnhQMz98WHZrJlQ3clpPPDtHJHlQMi5wO21YLmtuSU4/YHJDRF45cmBPLzc0QV5DOGg7ZGZpQHxxQV46aW90KlFlejg8Z1oiUFMhQjFEQDt0JWRkXSZ1JndRXVdIXk5EMHY3e0Y+MDZYVWJxLi8reXFsK2J3QjdlPVVUNl5ITyl+empw''@;'; put 'put ''MmhQZ15mODlOZjQ7M0J9UHNmLllSKkxtaEBJeGlvWkd3ME5VcDFGRWE0V3lrZUIyPmM0eig9PlBERWp1Wz5BdEQqU0NmWl5hRnBFNGQ0NWI3cG15N1hjbiVxT1poaSM7dDYoJEJvUTEsIykkK2c8TEVmPG01Sl1DXUI2SWN1VCJdZDZuMis+SXp5VjljI2U4eS8/dD5tdTAsem5iaFN9NSwuQEFT''@;'; put 'put ''enlZPiFQMV1oY3FkSDBDZls+I3ouUWYiJV5GfT5ZO2VSLCZYYXt0fnBVJUo1LnkrdGY1cD9fXSJAOjMvSS8zOTg6Wl5vZ2cyQnlMU3RmYkRMe2JfaVk6QXFRLys/NUR2JCY6RUhRTCk+R2d6KXBqZ00wcnxuYFFXcVVyNFR0QXVLdFZzQFg6I2lzem49OS5tQXtMOzk2PTRZUUEiJntLVFlCMFpU''@;'; put 'put ''bDtJQXhRXiwpQmZ8L3l0O3k7Qzx9QCF5QlJMNGx0eChJaHldMDsvbiVaM2U3Z00sUyNFO1dKVTJbNH5LS2pZRitSMlhmVjlZPzdePDxvUWopLl1mcCNde2gmJGIlNlFESVkxZllpSGE1d1glLjp8UFQ4SFliW0d6SnxlZHhJKT1hKVtQXyguSnlDZ3Y/eCpMOCE6Z2k8NiIia0ZmbHwyUStgbmBW''@;'; put 'put ''WCl+dmdJd1IqcXYzP2FeUVdjQEVHQnswaFNUUGNHbTkpWjprfilzPkJSNShzQG52Xy4hS2drSG5reVh9Nllpb0kvc01fLGd7LGB6Qzd9JVlhXjxLSyE5UzNbSDF3UChRW2xIbjhsY31mWEJyKHR4Kmdndl01PHFeOnlHITR2aGJ6M3B1Q19AOnNhRkhJQj10P01jenMyQTx7JTJmfjUxXigzVURK''@;'; put 'put ''VFVEI2xwP1M/WzY2b3pabEMkeGtfJEtZLE5OdWprM2Iqc285VUAheFZ3b0h4K3dDR2lxXU58d0x8WHZhaEIqe29zfUJlPU47JVJMUSx7fSF6dVN7Oik6dl07IlkxIVNTZylre0tSXmxZe0x0flhjclooRSZNeUNjeF1jOl1OdFtXY2NReCFMTEAwSCo0VkkpSjB1VyxYOVNfQ0RES1d4KlU6I0Iw''@;'; put 'put ''S0RodCZyR3hSaGs7Xi5WMlRmfjdEMSRsYFg+Rl8vUWxbe3duIilQNyZeRV1tPC4wUy8zflZoNVY0OEI+TTJqXjR6cj9Ia3lOLFg0IS5KIiNMT0xSLFs+bTdFYEooJDUpJiMhaGVrW0U5P1AjP2pQU2xeVTpPblQ4bFJiOH5AM0VDXV5qfEZpLjZdbkphSUk5M2JOTnQ8M15VRlVkX2J+dVIxeFI+''@;'; put 'put ''JXhFbWhhX0pVVXEzc1ZFXWFyYHt5TDlOYC4lTmklbWIxZTlYSUUpaT4xb1tQcGoqb351cX4kQE13IUksVUxQdHkuUT4yS1JodGRnT3N+MURfVHQzUy92MCMlOS8vLGhZYU1pWGN1WXkiJDgjaWpuZ21YNzJvTGlsa1FZMjImTVpfMElJaWF5LGVoInoubkZdUkYqdE4/X3huTS5ZWCI5Wn05a08s''@;'; put 'put ''aFJsLkMwT05PdWIlKENqeHNkdXM2X31Rb257N088aXBDcGgzWCt3b3RCNWA+YTdNbEMhRSZXfDd+emdwLy9eV3w8JSZYKEpAPltXakMkOnh5NTN4JjU9cTBeW1BKUW47Qz5SKzJIKUkzQCQ6QV1CUVMzdjxeMlRHUjFJPVBJSEBaQCZUYilwbWF2WCVRZTU1R2JjSy8hbUYoRWNkVlNHeV94d1JQ''@;'; put 'put ''RDdvKnNIPEZoNCZpfF5YRStQNndKUD0jcFprMC95UTp2OnRsUF5Jc25jPjNSRW5wOTcxfD9Ob300SGc1WUl3dlY6NStKaEk4K2F+Y3VdNEFaW3FiTU1VKXQ9c19pfXIyfEt8alU/Yy51QkUkPSpRRiRSTGxZMzgoTG1bXXI4Lmk/eXFCN25kKSh4bFN1WSY3TU5naCFNcnR8aWtCNSRXVWkxY3pm''@;'; put 'put ''e11uOExtMGNdeU5TLHRlaj5wOFBLWl96YT4jbUlhPD0lNkRwc05IPW8oK1ZafHVNUUl3UilhSW8uYFBpZEVDRjYjclghL14oXyprfl5+VkZ4Yn5jWjlzR2x3Ij5gYV5CY2liLCosPHU5fS88L0JeYiw2SFQ0I0ZoUF56ZXBbbGBLMX4pMkV+SUJpVWF7MjhyJXJAXjg9Wzs4Y3Y1MFQlJHpOIVFU''@;'; put 'put ''JGxkdldle1AlYS5Ld0krKyVSbF5GWl52ZzAreD1JeWx3QW5jJX5bZ1B5e0MlMTp+VzV7a3pfaSs2LkZQajxuVV8uT1NlUXRyfSV5ZWZ+cj0xcHs1bnU0PT95Ii9pWV1sMHlzJExtX1pYbSFIe3dwNSNUTDFuRHN4PD8uaT0/emBwfW8qYXRFTD8qcTF2RGBYWC8rRSlXNzl7R1VYV1NfXnJrLzVa''@;'; put 'put ''P181Jkl8Ji9SZUEod2xyeHEzL1VDVSY6WlsxUnU3MU4iYmgkZHh8UnNNLD54JXJ5bHh4cTsmZ3pKIlV2YVEzWXw7bz8jZ2U8T3g2L0AzdE9ae1M3KjxdMS8xVk80aGQuYT14MXNzVCQ9eV8vRTNVKVdsRz1OU0xsSlc3d2BPK31nJDJ5XWp9eGpnRWt1OG86YDA0VGc/bilVKiFiMGg+JDMpPFgo''@;'; put 'put ''dmB0fG5UezxFckV5RmNCOXAzbDR6M1JqV2Q3W2xrV15MI0JrVTNqZUBHUVQ7VnFGYnc7eDkrQnFxWGhbdmZiL25bPDQmUkFUX3YoKysvYzgxWSpQTG5GREJsSUhrZl5JKHVJb20/JHshJW0mPmYwaGFNSCs1UU1NUHZobHdBYjpGOnBzITV0KEUiV2BDRzViaF9QW359NT9CI0U9PHQvdzM0RzZE''@;'; put 'put ''QD9rPUdmbWNLTWA0OVgmTmttPkZxbEI7VCw9ckdhJFhyI1BXSUJdIS5mSG1ZfiF7fVBSU15HVE9SaDdfeV4uciU/YCN2VHswWG8zT2d6MzFzPkUwX1U5eHh3ci9hKk9RUkw2ek16SyRNflIpUmV6fUA4cFUwP1NzblZiMzYsXX5RMXB+N0VWcVA4UiJHO3ZnN2V9KTtxUDtRKiY6TEkmUiljME9u''@;'; put 'put ''e1h5O2xSVyVGYVF3NXZYaGlVQGguSWpmbz9QSzpmUmRxQDRFbXBwWmtUSE9XYT1iSWc8TTx9Ojl7SnMuWG4pJiNgVlFiV084KnRfRS5sT0wsS3lrI3JXbV1sYiteT3RjMzZNK2xtY2JRMD14JmpAfVtiIU0hYEBPJiloISRqOWtYP10oeF46eUJFZ2psRitVX0N9UygkUDZJUjBPSGpicElLc0lF''@;'; put 'put ''aSxgU20uaGBeUTY2ZExQVlJbRldbWTRZOnZrQk01flgkKXs7fGR8Zm01dzt2bDhBdTR8RHA5NHY6PFBGMzpVKUBnTEYpLnFfOSYqV3AofnFRdzVoKkpASjJuUCEjKzpCbU8pZzdXZnRmcyxlZjQ/c2Fob3VWJDZrfE14UStZVmlKQksmW2lWfVt4eG55NFs5TzV+WEElVzE1JlQsTVFiL1U2Y18m''@;'; put 'put ''UH4jd2BCWFtwPmBeMF9UNkQxLHRLWXdiRVtrdENzb2BVVHhDTUFKO0Z1VVpJMDVlZD1sZDV9ZCRbRj84XzYlNX5FQHdLSSVGQThGPUdzaHRmLmZ5Z0h+KDRxM1FdPiQybE01TjFEWXp4SWUxLDg4PCNvJVEuTmpjMmFvalZwZVBjSC56NElFbEJXZVhAbkw1W01aYnElSS5gejE8eCNARTAjcmFl''@;'; put 'put ''eV82bWR+Mkh3U3JwfUomRkBrVitoa3FMP1pmU0w9JXs1VDFHbWdvSmhhREc9aD87UiN6KlZaNDdadGFPYjxDSyNWSSxReTcxXUQmRzE9UkpTQG5SPX1saGhNMjAhXyMkd1RGZ0ZaYyUmLiR9R0p7OGVSRE8lelhALkBedkswNjZkbz9kLEZOfTVgRiRmTzNpNXcuYSQ9dGBjSiRgfG1ePFlJIlg0''@;'; put 'put ''QDk/eXVZJWp5fHRGeFF4dCt5e007bDc/KFlZUWhpbV42bzpHWGh3K05rKk9jU0k/KGtqWDJ1UlAiVVc6Y3A/N1AwOXY6QjZQYy5LSUdIWl89U1J5elNHLCYzdEA5YmUiY3VvVCpdKVNkNVAyVzhgXXNKKmksXTRsTkU5VSVbJXFlY0ouaiI8XWldUmIhW0JxLE5kPEUiSHo8LCY9MFdrO04qKkgx''@;'; put 'put ''Ojp8RShYVG80Knxba2I0aW9ROlpLS0pkSXUod3I6KGF1QjxGTFZVRz57dTpUS3tyMSpYXjlGKSsheEZHT297UTtNXUNiXS4rVT9JUU1EUml6I2puP2hlKzFTJTYvLFVsNlhkNz18IltPOnI5JkchRTRCPXMiNEEwd1BFZjokd0ZmPEsmUXhIY1FOazpJKk9XbGFxSHJnVE9GLHspdj9WVkY6RHA7''@;'; put 'put ''Kzc2MlkrN0FPbCpKRzJ8Z19xOy5hZCF0WVtfYUR3V0IydF5LOGhAeFVvW3dEdD44WnNSKG1eSiE6cnM+cHd1dn1lIUo/ZH4kX0pGJW9GdHwkTVFgNDJWMEVoVEg9JlZVJlUrWlZHeFBZU3FwNEtWQEtyc21xQ2QvPV8kI2gpbFlZWVZ1TEdzO1pwQEBmeylKSCpIQmpFakhGTCY6NXg/fWVJNmV7''@;'; put 'put ''OE5qRWN0YnVdQm81Q3UhMlFJJjE1KFddfj8mbTZKIUIiPlNKNVl5XX5VRSpGW3g3fW0jLyx1TXVkZmRJaFNGQyNsakNBQnFLZz4zfj4xcFNedEdDWUNrck1EVHlxXnQiamdoTkdDMkVlUTAjJnpEZ0U8d3V0OkJMVl5QXSVOOSpTWG4ocFV1NUY/TDYzbTZ7cFJNL3JuZm1wT3ZET0Uua0g7fnkw''@;'; put 'put ''PV09VloxL21UQFNAdHhIYV9fJE89K3A0IU41aXRJNjF3eGkldltyIkE8SzlzdXoicz5FUmlRImdbKUByT0Q+emIjQDd9LzJtZWpveDZ4NnYrJiw4c1dOZW5pNEAsO14kIz8hSXtWPERhKmNOaHA3fTRMSXRQez8lZ2xgRTYyXXxpaWZLc0JqJCJJIWxHWl17blV8Ij52PSxkYCliVXZ0bStDPnlO''@;'; put 'put ''T0BVYUg6XSVsOSRvLEM2P2csbks/REA/Yy5ePHtMIlE5Tjs0K3peR0xQcmFYSVV1ImdTKW9jKnxmOlZdW19PL0FUJTMvLkNhezc5LCltU1hVT24mSXsxemhXcXVoYjo4VWx8VlNNNGkwemMxO1VvITgoSVROLnBJVDl5TXR5V1UwKUZ3Mys7W1c8RW51ZElWV3VWL3I1R2BVcjo+NEtPRTdkRjR9''@;'; put 'put ''RSNQcHglTF1QOipASVN1IkxmYDg8ZVImVnhVanA5UCpISDVeODIrQmtmI3lCJDBuO1lBNT5zNzkjT153OTM0YFI5cHZiKDM/Rl05WD04azIofEpVMCJqc1h4cW5kSU1BcEM2TWNJaksmNWYsSEg7RnE3d09oV1o3PCU9Nl9WdWQrOztpZ1t+diN5XkpGOnMjSDk6YCRDdXJuRmxDcTFQK1ZNWyNN''@;'; put 'put ''VUM/VSQ1UzJaa000IXVFKUo0LyxMR0xSL1JQQk1aOXZ1SSFESDVzWDI1Vy87JEVsI0dFO19zMUN9bVVNeEx8eWZpYEo3PkhtV2YsVlZrJns7akBNY1Y9Qm89YFIpZjsreFkoa2I5a2w1M11YZCs6OT1OUCNLP3l9WEBPW0tibEdfLHtMXXBoW30qXU1dWnJLcD4laWw0UzUsTXlyMGAjQ14+cjo7''@;'; put 'put ''V19jJlYydzh+bjN3KS4/a0AyWDBPVV0uM2o9Qyg+TW5PMDlUMUFjcytDOyFCTkdhUGRseCp5Nm11SFdBI310fnxoVD8jTCVGViFAdTApd2BXVW5yT3xUMy84Y21SMXdJQFJsbU0hazpiIjJfVHNad3ZAOUpRWGFSQmhYMjAobUFpVTBWUEl3ajolX2lwWlIoJHM3YFIyWF0qI2NNJHZGOy59aCky''@;'; put 'put ''TnNHenRCbWVbNEtpYFt1WTNbXnppTTcxQzlbY1MsUXtRR3RxISU0OXxYMlYic3ZmXTNbJDhlT34lPEBBUll4UXNpakBmNWQwLFF+R1ddSWgoQDtWWlEjMSFmVy8iQ1pRLEZrVDMsX0lFZkZUJD9LZGIxaiFvfFVrb25xfnxQSHU2Q14reXQ2akM/WUxHdj9JR3QrKilRL0hxL2A0Pl55al86OGBK''@;'; put 'put ''ImNmdVA6Qz1XRkxfSmVnfkpTc1hCayFsSWloQG41VnYsO1NyV0JxNix1cF1gPGtnaigvaEd3eUZzc3dpV2VAe00wLmNhJEskJj0vYTthXit2eHRtcHRqL3diJEJpfnksMVE7MmBEcSlMOkdXL3tUd2lGVTB4ayZkQTN6bmZfQDk+ZyxAIUVZTit2JlFNWi9LZkBiNSJxZkVmbkkvXitDZWJpeE44''@;'; put 'put ''cFRAc0NaLmttK01QNHdPQ3s/RXRIWE06YyFpLGckWlFJOGtkSHNOKzEwPWh8azoxeWkvT1s2ZSFFSHQvWWROVFNWczBkN31RQklSOWthRyVgWG5iZ0R5Z0QlUmJ4d0BuKDc+V05QOTF9VHlzVDB+Kn5ObFpRMzZyK0pgcDl1amQuaWVaU2UySDNqJUo/Un5QV3RDeW0jYzckRSV1eS8jQFkrc29H''@;'; put 'put ''XlRVKFVbTjhuaSEhW2VlM0lVJCIzOU14Qk9lVlM0STtleDsjNCJ9fDU8bEs6TEVmUTgrclY1PkM4QENWZjMsUz5jYXwhdjclNXZPcTMhd2MidVlzTVg+STNsdU1hITE/SGlQWT8ofUhvJV8oYT1MTUhkZC8raWN7KV1OJj9HOiFCOlYoeDJKPzVNc0FmJShLXX4ydUc6Rz58JnIqa1BjS2hFKz54''@;'; put 'put ''LEM8dGc3bGZzUXc5RWV2bVhLQkZWPFpePGdFRisqdntjU2QhWDgxP3FhQVcpWlsoaXNbZWcmNDdgam4idzVqOGZoZWlyJjYzUUpCalgoOFUmQCtbZSZ6ZGUvcj5Wdk9femorfERGX287LmFzIypiR0YjfHNLWjU8W21Ae0lyQVJDPU5DV0o2dGMpMnJBbU5keWhaJE5NRjQqcE5iQFBxRFN3T19i''@;'; put 'put ''MjcjNCw7XnBRZnZ5YS5JU0Q6bk9uKyhbfSN6SX06LkhoLilyKEssKiokY3dRempOKlIiYTlIQDZFI1NIazdnIlJVRkNNd3FJYDwyRGA5eSRIZ3t9Ll5LekFCKj56Y1MrfSI2ZSF3eDw9YGxfcDdyWSlSNlddIzBKLkV3c3F8alJfdi5gSHc+KnQ0Ki5adVMsUTQue10iI2MvcD91R1U1dGd2Rl9i''@;'; put 'put ''I0xfRF1hMyNjREJGckA8OjghZlBFREQ2fXA3IkohZjw5Qjk9WXh9W35iJSRlLDYhVltLKj5NZlRAdHQ0RHkqeTBpQF0xd1dsNCNqL1suXWZ0fj5ZT2loLEF9aiUoOCk+NkZ9d1M0Wi8jTFM6T20oL2YjTyZfMHhhQX1dcj8kUEl2VjclR0t3MD07X3phdztMWH4oMS84N2hRI25yL0JDXnkwfXFz''@;'; put 'put ''eXMoIiZsKlhBKyxqKXBMQE56fHY/QjdSWzZBKSw7Iisqb3J7VkBOPnsjSWQ0Z3FjZiIoVGxuL08lZV1wSHl9S1h4SGpjPiRZMiU0SGpzcV1yTD5XaTBeWWVWYDxqeH19LjpYcDQ1KXhzYlM3ZTtAYWpjelhzMWhFRyJ7YHl9fSEqP2VJSnRuYmpOLyhdbU0mQX09WFFAMlFSOUN+fFdYY0lNPE87''@;'; put 'put ''I0t0QkNtN2ZZaX5IV09MUExadzJ4RDVXU1hjISx2dix4TEM1b2lkTjlkV09uVDlRJDVbMV1FajRvOFB6QHddTFNgd0xnK2swN2hVXSYjXjlRen41L2dAM2paUEN+KVFIbio+L2wwekJNTWhJNDg6cTozX1FTLi4+ZUw7VlY4TEtsW1d8LF1+cnt6aUxBIUwwN0JWTWRMaF5uVTFBWHFUTDo2aURK''@;'; put 'put ''VyIuWGFoREV5TnFaTnxRczUiPm9VJkRLNXhyNEBZV1NYVXc5OyY8fk1jOGh9cFo7eXQzU3tdZj8jISt8WUx8KTBnbCIpJGROayY1MTYsI01EKzlxRH1YUmkza3h+TzZrNjtnNWJwcVlDPUAqdCg+VXo9Xld4JXNhNGRKSzM8UWZALykzT1dJM3djUSY2TCtCPHkvdnpTZzpxYGM8OXBfPUNgUWA3''@;'; put 'put ''V1RUT3l4eXIhbVpoeWY8YFlPfHVtbSVdJWYxRXFQaG5NdEhMa1lmdyUrIU00JGV8OlozenM/MHdKKmVeQipabXR1OW1yO3R3JEUwJEVObFBiM0U4VzdvY197emNjN29FflUscTdTOURGYWJzX0UpZjsoeSVhRnVQZCllPiVYKWdSS2VTVGNVODlkKn0zZS87TmdXK3MoRzomLkRfMHE+eypVYnow''@;'; put 'put ''OCUlQ3IjJGYrMD4iejM/TVsib05jdlYvRkIxN1BxdlM+bWx8fEpYcVYrUHNPWV8pJTBWM01VKUtUW3lZR3JDUWltbGMoMDdQMWRvIywiOEtgb29GTExEPExafXdXfGw5NDV4PGNdai9NJEl7YEh9VHY2YyRsd2Bha2VbbEdoTG5fVShnV2ckMktKO1I1flc2fmNjIiFPU1poVXRPUXZnaDZsfVEr''@;'; put 'put ''MjgkP0EqWU9lPShJVVpRYCpbMX44RTZSc3dvWC9kN0x8NyM6Zkdwcz9TVGRmdlA2U0B0NGBfMTFbdERNSUdUZVJ0ZyVgUTBWVTF8e0Z2VFVyfHZ5PE5OQV4+I0g9ciNVOC5fKUtueyltP0B3NiMzZW5KXmdKYHVQW3NgV3lLMUBSSUFZPlNeIyZWJnp9aUk+Z2A/WmBlWHpJXzRzMSlndE1KPCtk''@;'; put 'put ''YGJrNFlSaz4sYX1tblV8XXpbT2ZhI1FRfG9+LjpZdXRoPnlweyJbZiQ+SnRQeWx3Y0YrWnx4MSYpfXphZFcpUWNdKUkibTMrK0VLd2tiRmY8Y29RJnhdc0d9a1ZPZHYkVEs4NlRVJnFqbVNJU05nQiIkUjI0K2M3W19ZKjlfRihdXzRdej9JI3hZNyxwMGM/RT54VjJZU0tTe3hNYEJpckBiKXsr''@;'; put 'put ''bztCfmF6Mj9rSGRIIl1WKStfPTQ1d1ZyVCZTYD54V1NfNjhxSmA0cj52RzQycEI3YXdsTDYrUGlRcXt4KSp5cWQ2LGNSbXdtU1BtOiQ8bS99PncvO05nOGlpWj5uL1lPJCp6RExUdHlhTUl2WixlbXRfakJRL25XZ0RtMStoZ1A3cjZrMFhfcVs1MV8wL2NIMSE2XiZQPG4haGtELm1CYnd0L2l9''@;'; put 'put ''OU1+IUttU2kvN3wzK0QjcTZCPip7ZSJzdXBDYShNXXQreTNvJkJSTDx5SjN2a1J7YnViYTdiYUhsW2pbeCUxbXlafnF2QEM0enUjRl5Ra3BxQXEwJVYwdTRDOkIsZ3d0Ulp0MHp8X2FyTWlpQzNYQFt9OzVrMUJUN0d8ekAvKz0za1hyeXFkOCEzJFFJKTx5Py5oNywhY3lMVmY2NS5AN3A1c19l''@;'; put 'put ''LyNzOF4xVFZkeiNwMiJtNUxfUUh3Kl5gUDAmVF1SOjFmKS9gI3BxL1t5UyE1Py53aHRjVUE8c2xUUmJUbWlKSG0jMHNwZy4vN0VsTikvITF9Z3AkZS5NQj5tNFc2WjM4fD5fKXArRl8xIWhyITdyPzU/VXokKnZxOE8mOD5OaTxefmZtcW1MT29teyNrKUlmX30/cnNHM2lxW2YmWj5mRHoqcGpi''@;'; put 'put ''dlVIW0R7Ql09V1chT1ouWVhwKDdCVnhxTkdDQD5+ayhdVn0kZ3wpbXdoP19zXnkjPzsxem1IfUVVZGBuaFovcl1OSFgoLD9ENUJVLyVKN09GWlk0UmhvLD4mNE9yP35aTGdCaDMmUzNMVEwuUmVJRD9lIzImKHohXT5kQTp3M2Z8TWg8dS9+eXdORlVnfU87R0kyUUpgLkhxJDNtT1B2b3VfI0pE''@;'; put 'put ''USR7TH4mJVl9MVlje3opbk1jN2pqZGoreDJhP1BTd1F0dV86KmpoJTB6fD11ViV8fGBKUkF7Lik0YURgUiF3IVIheDJsS11QfD4lezc3Ul9QK1ZDQW5kYCNLLksyWiFRQEp8X0Q8WH0+NkIzLnl7Rjg2PFs2dVpCfm5vQEBTPkw2eSMybkwpRTRJeV1UO1QlJFdHYmVKJmRjWDdfb0F+flduOlpz''@;'; put 'put ''VTZ1NDlxdGBTIkleIShhOVdjOCtVLDBkZkRdKz46WEREbk5qPzxXTDBNSWxaL1V3Y0lXdDNDW198WTp7a3orZjBIKGdSd3FFNn5rLklySHNnc0NKd0l8TGE+Z3V7aDJ8RFsrOkd+fCpkPkFVI1dvPiU+XlNAY0NTNjhydyg6YnsrU3x+VUZIT0kjRyJfNj5GQHZLLCMyPWFEblRrVS9IZnBMWHNu''@;'; put 'put ''U2dSUlU+RklPaVt+aFo/Li4zTDxMayNpXj0ufFJ2XSlpYVd3QiJRR3xIZV18OFs1Xkheel15TlIxZ0p4JCRQOj5ubCZgdytjRD4mUCsxQEIzdmZaTileUWx4bCpSdzVnXV8kc2Uxb2RPI09DWGpfeihLVnYyQGw8fEFjfXJXU2ZqIyZKW1Q1YTlUWzxCeD5ObytvbVRTYCtaQlkyQSNrYzMuS09j''@;'; put 'put ''XiRiZTpVfDt9LkxHd3hbSjAlOV5dIip6Q0psTmY4aFdkKHw3LCRmbm5uQm5ZP210MTZfVDordWAvL1dyRUt5U0FZdCZ0KWtscTIlYEQ2dWVlZnFUY1hWd0JQXitLLHVhU0l8KVdTbiYiRFBQQXk9bE4vaDM+ZFNJNzVXTnBCZk49Qi5mb0pvRms3WjJZL3IhJE5MXik/WG9TZClQXV5kMTB3I2Mk''@;'; put 'put ''bHQ6QmJqQHluJShzWThJI3RHNGhJbSVAeWM7L2RzYjUkKiopTF1aJkxHI1RvIi8sNmtAPiExeUZ6UXomeXYhYm1AJjpTWF8wIT4rSUprOjxtamU2K0ooKi55QC5GVDc1YTNOLHxofUZGNHNOZC5zTXdWQkVfN1swc0cycDBPXnUwR0BSMlBQPG5zOywheXYwI01BcU08NHEueXJVN1hARmFUZXVG''@;'; put 'put ''L2wha3JCeVkrY3RVYiNDUiY+W2siZ245Wz8qaSQ+QVd0Ql51NjhIP3VbbCg8ZnFEMj1dTlNqYnMsXVdlRi5jfEUwb3Bhc1k5eldlP01gVSJUZExqdTljR0JFYU5sbmp0dXMwVU08UEtXN0heMzcuaDdRXXswZHAhOFZ5KmZuJUk9YWpxck82eiF9Uyg2QFVTV3tzbG1+MW00RngjNCRWa2YhUG9h''@;'; put 'put ''Ujd3ZyRRbDs0cDwkWSV0Lm1VTkA0IVB6YGgyX3hGZlNhJTYyMyFubXMpfjAiXVtJOk9kVFQvckNvISsseCw1THQ3PyNHM0F4d3dkVGs/WEh+SV5qZH1UP3xFeFswSTI6M3VYVWxDMGYlUXI0OSV8ejw1I3FEe3pqMWhHImVFbHE6ZF10P2lGYDY7VkQicWZTQGZLM3ZRdHQ3N21gW0NuaiguVzco''@;'; put 'put ''ZzomR0dtNm4iRDkkVixFTlBaMihZWGE5JFdPPVtEO3YiIXNsaXphWSNJNE8pe2kqVDsiVDRANjB9PEFNcWAjLGFlXzl1bGcrKUw8W2hpMHhxPEMoM1ZhMXpffkR4d0csT2J9Vz90VFgkIUhTIV11RW0iI01FKW5ZKjspUy80OD9fQjJWXV0se3J0bG8uamA7Mz9ZTlpPVUZtUyN0ZWkhQ1VLeVtZ''@;'; put 'put ''Zyw9T25yaHJGJXhVPGJkUVJoO113ciV2SF9pV1ElO1Qpb2JzdEtfYlN3Q09hOm9zcXAwPFYxbm5xKGVUYDgwWkZEX34sNENYai80fDM7InM7K0FeVjskWz9ea3Q4QTZtRnIhJHB9ej0rPyk5NmJfYH5bJldhcUpofmF5Vzt+QihgbmshfCIvVzs/W0hNLGpJfTtpOkdIUm8zOll0Mk1EZHVaSUwh''@;'; put 'put ''JTF0VjJDSk1JUlE1eyF9e2s0cWolXltXPUUiO28mfXwuajxscGxubzJSZUpgfHFsXzVHVU5xOzZsOER7VDlRIWtbZWJXaytnQHJTSCpVJTUwPHA+fTVuOW1kaG5pfkksPFlfK1ZjNjhWU3FGaUc9b0xsLiE4d085O3hQQHQmcFNRRWBXS05hKEhGOWVUZitTMl9jTC9NVTsiYHlnWUU6SUdQY0x5''@;'; put 'put ''RXE2Q3B0TGZWNiJpJH10JktPa31lcDVXUk55KHxtOH54bXAhPUJ9RXtkOGJHejsiN218enNOOU02QVBfSDVRSEUoXmJ9L2ZkKi85L1tWKWdGTXdEZDErel1UTGsjeDR4eTMmI29vJiJme0ZRWEJGc2lzbj1HTmcoXTlWOWdmVlpCfGR6QXN0QkNMdy83dH5kQEZdcEU/SV08P2xyOGJnd3lqK29X''@;'; put 'put ''L101M0QpLGxuUkp8NCV+SkIhcip6PG82LFs4aUVIKE42KitsZ2pCaEh0OWc5Z2UqVEZ8PWpSO3VZbi98fDpqekB0fVkxYkA0MiZjV2lZMC8rb3QwWGZsQ2xAbS9zOU1uL1t3dHB7KjB1JDdCfUFfeFs0b2tTJCYxMjAyI3hsO1UqMih5TDMudVNgNmZ1QkIsek83L3owbzxoUTo+dGVLNTE3LCpI''@;'; put 'put ''MlslZF0iOzhkPDxwZSF8aClJMEdxWmMzY1hvbGokcGxPMztxM1QqcWM5dlBLTjJ8enwrWTpScTs4IVFEU0l0ejB8KH5rbkp8QEk6bnEyOkU2QXAjWUQmUmZGbkhHXVZNKkxQKXl3P1hhbjpAR1t0aCJmRShfYywlckxWXU5zYUQrfXZzVVA4I3RffGgzJkMmZktdYz1fd2xEITZVLC9CV28wLGp+''@;'; put 'put ''cUJtdyJrNjRkRix8d3tBcnl+UTcrWSxxW1YxblJOQStmPGNdem5sVGZRVkUwZDphb3tqeT4scWwlKmFDckNuNCRxViNhbilnciM7bE1QLH0lbyRpbkFXb1VyfWJAcV55c3ZJMll1X1tFQVsvVC5WSktZPVpHWUs4W3p6VH0hVFYiTkI4b0Bvb1lbZG5ecGB8NW1GKlt1bm9vJEsjXXV1T0Y3dChT''@;'; put 'put ''Rmg7YmomRWNbW01DW34mZ0QlfEVrLldeeV9tMEA6YHo9IzxmSHwmLDc7b1FiI24+WCFTTVsiVX1Sbig2QlVrUnEvW3dVYFtPQ1NldDkqL3VhJEZmbSxqfEZiaU5eKl9ScHZKPXpiZ2FKbENnUXVMP1VnaXxRZzd9Rn1ONnAhIkVBbTQuMWRrP3NqPEY8P2NZRzZmVWhVRERlKlZWRFUmcnl9Plcr''@;'; put 'put ''a3w+cC8hfCx1LHRxMVA4YUw6XTh7TWp7b1JfdF4+UHM8YFl0XmZ1LGlze3NAXlttVWtNc3xKSlZxJlo9dX1ARzc0Qi9OMCNdRmEmPj5wXTtuZ1NJPW5nIT9RS1EselBgJllbI1hmQ3JpOS5zM0A4TnJ+N2khL3Z5dCEsYjFPcmIqPVFbTSVYJDVCUUc/dWFHKWlAfV5rPDMhKSs4MXB4W0NTTGV+''@;'; put 'put ''YHdDUXVFfkRdVFt7KVYofSNUZUJNVW9qOlJbQzFEJlpEIk9GLEVoXzptRUlhUm9ZX152OXhYWlVxKXJqfDpNZywjeSQ5RyI+elt2LjwxQU9FVGZ0PGBvVm9lZWQrMGZCNlc3Z3xPV3MxMT8zc09OQEJ6aVU0Nlc5aXFCcHQiOk5oZVo9UihYQzBlcnxhVTwsaDl9PH5VblhjPmx8VyghWF5ARU1U''@;'; put 'put ''WjhHZ2U9bE5COyJQdHRIZWY0NWVgb2B4OzYiWzNSPmRhTUdySExOfWE2UzxyX2VGbGpbJm9hUTx3ZU4mL3NMP2xxYWlPNGskWFZRfix9bCljKjhHQyNXUGtWSnB0IUJ0TkA0fHxUelU/IWp1SXQ4cUN8Wi8kLllaY2d0Oj9oaShqXUFkP1cvU1tpRTBTJDNPRTFyN2k3QHA6X0dxOnUrViNaVE40''@;'; put 'put ''NigjUlN+M2UvYXhranJ7YkhUWHhOMTh9YVlqbmxzZzVRfCYxRXwlIVA1WDp8SD9zKkVYeldHKEt6RHZjbUxpP3ZWJTBAYDBEaDE6Ui5LbDQxZFA1ISh1O2EyV0pBKVp0VzgjdlRrOUZTZ0pNa1FCN0xnIVtUdDZJI048SjUmcXMsfXM7X0tIQkhwK2t5REdXQnZ8KmF1RCZ6XzMvaVpTJT10S1pG''@;'; put 'put ''QzhrSD14QkopeXVVbkkuKCRfS3NXMCJAaW1OSnw4YVQuM309ZEgmRzFkQ3YlbHx3TT4jaDNNbHBwc2BLP0FQSzdkdmNoN3lOJWNLMWV+dTUxKG48T0FXc2xrbjVkeFZURS4wM0laW0giXzA6MmIvMjJKVClBVFBIUGl0IWg0WD48ISVNSEUoP2tAa3FoV0YpJExYNVguKCFCfjtmTH5lS215Riwm''@;'; put 'put ''RXpvMSRnQGBCMy50JE83ImlOTmh2VDsxZlltMiwiQFlSLlpMPWlobkpxQEo2WUBZdkQ/Ij1+LEdlYzxOS3pFPnE3dixbaCNSS19+TGNGdnhaPVlHXW9gKFhCYCpmbTMrM1opWVh5TSQ4Pz9YYEZYdHk6eUBWJmhvUm9OeiR6SHg4Iz1RWEgiJlsrXjE+UGw5JX1jRnB4V0JbNSVdclsmUnZITF16''@;'; put 'put ''Qj0jOSI4Z1JsK2I6T3UpbHhLVF11bzwwWF1LcWQiXWEjMVdQYlYrPj9AYX0mUTMhUzFSNUU4aH5jT1VJSmlSbCpeJlY5W3c2XXdxQisrdW5GVXhEW0twa0s0SD4lNH1EQTorTyUoM0Q1UHJqaHNUZURPcUBWI3xtZ2NZa2NVfEJpeGZiYUsrL2liWjhZcUdoWlFdP0Q2fC4zbUJbTGBFOmFpXWI6''@;'; put 'put ''RTp2L0A9YGxJMCE9VCY5fkI4T1pWTD42VyN3L3Y+UUlOM19lO08lODpSYm4kOVcleTpgeDUoQzJgYE8jU1tCRWB4eSYhTW8/S1Y1eVtXXW89azAkKz85dCR4cEo0NGVmakVGOj1JMiRQMGw/cXF3ZmVEOSoyeVhrPS8oUWQ9UT9yfF9GLCRnfD19M1BjfXIuVEU9bnk2JShVc15RNywwYVJObndE''@;'; put 'put ''JkpJOFp8a1dbOX5eUnczfj9iP2UkUUNKX0tyLitkXWR1dXw5SCN0OitJdUh3XjUuXXVEZkFZPzwrciVCWlB7XkA9ZTNQX21nX2RsbV4pa2VrWVJSZklBX25HN01KNXorTz02OnJbSExqRXNePn06ZFtWIy9XYn00ejRLJjRBaVgxPUhrVD1qXkNULDI8aiRrPkMyTTBZVz0jVStjUyZbfDdZaHtB''@;'; put 'put ''V1hVeUJCVVtlKjF5a0UyaExPRTNOdjU7Ql0iQWZuNCk6fD0qQFhOVC5NQHJbOlgiQkNzSjphTnhwSnpzfmU2KS5bNjUmJDluKSVQdVk5ajNKMkZtWENjTnRNRUF7UXxEOFoqeFI8eWJyRXIhN1ZHRzkkYlZTMDAqaGFwSDJiNHxISW1zfmpwSCIrcE81ejFJckxfT3NyWF0wJUxtNUc7Zy9SdntV''@;'; put 'put ''M255OmNvM31AfkBbJWc6VTwmb2ZxUTJXaGFHWitlfTdTWXNgfn1GJmEjPUJJI0xUIWNUWF8+ai8+cnFMKUpEUFN9SUtXWTp9fWFFLk52ajcoZiU5WllhWmxFcT1uI2shKSNacUw0TWVDTntrQ2NVJixEcmpuSnp1QjtjZiQsaHFmPFc/QzBLel9Ea2x+bz9uOkM8IV8jUGpDR2UqU0xxTn1zIUQo''@;'; put 'put ''RTw6WWI1YW9hOiN5NiZtezlTdzsxRWhUKT11TUR3Z258NCVKNC87KUF1dSFKQHtDM3k4WV5nRDF8dFR4R1RlUHRkeD81Q1U5SHpiKSNbUmg9cEZ+WzFlXjJONno6czw3Q2NiO2IoaEZmfF52QHxtaz9GWkpWNkV7QG9fdG42JndbeDxnKytZaD1oTVM4S29HbjdyJTNeeyU8R3hsPSFifVRsMkl1''@;'; put 'put ''QFFfXWUySC5Na3BqcyhPeiJOUk4uSWNLMFk+RXVCKkMwPXh3cG8/VjtkK2gjPzRZdV47PjUscEk3SEB5Tio3dzpgRkR7b1oxZyhkPXEpenxmQmczQkFQbXlOdiJyOCw+fmZsPkRxOE5qL3ssX0c/Py4wW0ZaaVpOeXdrMjY/TmpZVDd+Knd0PENwcG9uNXhfQDhmTmM9djcqNVlFTkNTcS8kSjUp''@;'; put 'put ''TlksKGhHOTFXIng6cVYhXyFjNlg4T0cwZ2QkR1Y0Q1lVaFl3amliKTBbV2RoKVlFSCRDKCVYXmdbWSgxQkhnRmZLV2xJbCphfE4hdXdgJEgzem59Uy5jdWciOW9NUXA6cW1tVHJGaXVrJnZTJSZjXkJNOCNtJnFvVkdQUXN0JFJyKGtHdz81aiMjMmxjcXlIdFI3fXp9Xzk2Uk1+OEJpKzZZOyF+''@;'; put 'put ''UWcwVXsuekZAOVB2X0hFOyZMaEUxM3ZdU3g0eWVuIyZ5YV4zQFQ/cFRdSGs2UmBbayM4fHBKZVhjUip5NnE3R0pCdVpCJH5HbVtsWXxgd0QyZj4wZDg9clBwQmNwWTZXcjFYdXtYKG82VD1iRFZtU0VUZWVhO3oieGZkV01+bjomdSM0OmB5bmN3PE1jcSVGQ1MqRDN7JCRvY2ojIyRGQE9DITU4''@;'; put 'put ''N0ZCY3A2KWYsXihANHtvXzYyJVMoYlF7ek09TzNvNTxfZC5FOzZfKztpTGRHZ1BXKkZ7XVBsQWVsSUwoeDYzTyU1UixAcn1idHlQTzxQZzoiSSNzJkRhPFdWOD5sUzErazxZNz8vPXMlOHIie29UcWB4QH1ze2l0OUpjaXpPM1MpY0lga1pePkFaNEskaWdsKmcsaigkXyQ0WjxTWz9fUjZkbkRI''@;'; put 'put ''VDtDKlpoSmwoc1MuI1dZMzlxQ3Y/PVcoLGEqOzQucmh2TyVVeDVQUURAd3U1bT1QP2BBWiorQzNRaWNGPlR0WUh0eEVFOlhXTn4jX11ee2hRU0BVJSxePy94ZWRuRS98Ukt7bV54cmZpIitZNS9XXntSKSE4YywkW1o5cjcuaWRBMXFdfG5uW3Y2KUdzcis2MUpKOXIuIXN9KmJHZ3BOeEJ3e1Ex''@;'; put 'put ''O2A9JSYjMTciRTUybndNM0xeLFlJfVtrJjtOaX1vUXcmIXBFST98WEgqZ193OHRPOjJzNCMkPDpUezBSVnowMV0pSW9IcV82X35uYGNLb28vO0VQVkwqYF1tc1Asd1YyT2k0PW1hflpFI0B7M3dkWDE5PiwvWFRkeWZnOFtMcVZgazclS0x4Kk40bl5qaCMsUWg6YU5kSyFAUStDTjsuLkIieGk6''@;'; put 'put ''InpDO2kxcXxhSmp0MTpQYmpqI1ghWGMlR2tTNj5AOjRmSU5uKWhXdSVdbyZtW2pnLyg/ImxfdzBybD5jald0OSx4YTFAP0Q2X1lXdlFfX2I6czJGK21LeHZkOmJ7PkImbjZfY3RxelgoNmVaMVYxK343YGZ4b3p+cFh4QntMSmV6Okk3d15ZTXViI0xoPVJkNWIrUCpnVSowMz00ODs7TiY2enUu''@;'; put 'put ''OS4vYEYud0l5TzhaaU9wVyQsLCp7blpjJEMyRV1PLEVVQClNbFo0KXA+Tz9wbmBWOVRkRHw4b0JRaVFbcHBuNDIyUWVaUzs+cV54b2EyZDtwaGIvYShPTnlyT3VbSiVmJTMsdjJFJGRCRVlxKTh1SS9hP11pbWFvSmYieFpwYEhYfG1wPHdaWnpeSlROXkd+NjZnZ1FkUnUsM25KMzQyejVvNmJI''@;'; put 'put ''KktEeV1iT1lrPkUiMlgyYjFeQG89b0BLLl56fF9HQUZXM3hlYVZHRGddW2RANntFeGJZan5WLEZJRkp8Q2s1YHlNSXl+bzpOYzlxLEFlJSl0SVYyWWJdSztzZFJDJCE0JDMqUjQyTnxhRVhZKVo3eVdNNUhGIlY/Y0wyXXJNLjwhTTdJeTlRVEVjQGl8Z1tqYzxud0A7SU8kPT1VXV15SkgqcnVt''@;'; put 'put ''Ung8ey9EYVskTXZhSnlVXk1RcXheZ3UmPyVBKXo1Z1NeeCJIV2NEemZdKCt0bT5wUFJ5I2lLNzJTNGY6UjRrdXxZc2Zac0tgRCFpem1fRW1hd0skR2hSIzdEOykwIllkZ3BecCpCVj06OH5waj1nMWJQQTBSXjhNQ2FgLipKJCQ3d2RSN1g6cDpPYDRAU1s5V2oofXJQb2EjQFAqSmtnJilbWE5p''@;'; put 'put ''fTxJcXVSRWAzc3FTQFk8S3JCWiE8OSFfN09BWUdxXU5qTyU/WHAqRWdfeSh5bnlve3dBWDpFW31iN3I9ZWU6NDhuLyE+JGAmb0ZGRChdNzQ3QHo5I3gpV00jO3cpPjZ3antFNFo3ZU9saHUiKC5zZVZCIkNjek5lYipkMUl8Z1RHQEQufF55fGcuSlZLWTkzJH1sRnlPYE5yY2BmTmQsaFE6ZGFR''@;'; put 'put ''UzhDb2ZBXzBdM19aNnt5bkYqLEBaYms9XWlXNm12SXlEO1ldcGlhQW9SXzZZcyhVJGpJYkVAViEkYGhOcz0+YlU1cSwjUEl+Ul9iY2t+TmhTb19IKEJ3aUJYNjF6U2N1VGRkMzM8YXxiN2s3eXddSTZXdW92WzQ6QjVuOzFkIi9feWQmWTZOJT5GTUs0MmBrK0VWUWcmfkBPekxSdjFtJDw7LiEr''@;'; put 'put ''MWJUbVh3KFMpbk9Hd048U0w+bCUjISNnOD9IJmdfblVVOVJfL09FRDljS3tuJTFIM2tEKFk7THElaSFDekshMH1LflddWFROTTFGQF1+WTxFNTtXSixKKipSblk1QTZ6W15+Z1Y6Ri5Oe3x2fTVQeXpYXyNMRVZnK1JxPkV+ekFxaSh5eXY1MXlEPHVzWWZAfml1YSghYUl4PkVFcWx4a2N8YjIv''@;'; put 'put ''Tzg7bWdvcD4+bDBuNXo3Wlp5QSpuMTVWIU97OmgmOHVyfFApR1FCPDxZUl1SYlpUWyQpbmM0WTVOU3JPd1NpakkyUDJ9QER5QSRrKEk9YFBHZl5sYGV1OSg/aERAUjg4MzhBZUhzSzd2Z3lRcGMzQH18M2kvMT0pbVRlT1ljQH17QnwvP2sqMUsqVS9fMGV+JFpBbXR3ZWFtbWdhMWNRJVFNaD80''@;'; put 'put ''bVQhfTFpISVFfjQ+d2R5IjZtYyZGR1pnWlFHJmFQcEEsbCMsck4pSlVvLi5YO3BsNF1nIlo6JE1XRU9oVmtmcGYqRH1tJiVzMCNIey5gfTFmX3NYY0FeUyFiX1krJE5LU35RS3NpIVtwRjcrV0VxQz8rIzMrR2hPYEQjdG8zUERKQE1CUHRwWmJiWmgpYTxlVz1wPjM4PEsoKzY0UH5aUD0ydE1W''@;'; put 'put ''MHBjLDo3cyRRN0RkeixBYlshOm9VNDF7eSFOYXZVVVFyND5URHBCZzdsRD99fF1oYTBRaW5YbW1+W2Q/X0UyYldXYV9xITpsIjY+Ik9ZazVXPyJ7VD0wcF1vbU5KWnhfQyhiR0k4USJaZmpNVHdQZFt+QVVQV1ZVOi9zYFNJe0BSTyw4NThbeld+IztTPDYxI2wrVDgpd1pFPjxXSW05KEQlUDY3''@;'; put 'put ''bDV4NlB9WEloNkNBZmJAM2hAOWtMIWp0JXckNVQibnJKb24zZF4wYTtGQ2tmPShsVlYvSkRJOmc8LmY7ejNOcH5QTCIuJms0XjBMc1J1Kjd3QCpCLnp+fnVLTiMoYyY6ZFlsYGJ8V1IqUSpHU2FzP3lIKkM+K1ZeQCRjaXpiQj5YY0pGb01AKDNsYF1dSkgiVD12IXxxKXFRaXhkQjNUMjt4Kls2''@;'; put 'put ''N2Y9RENnR3xPX0hmU1srPnReNnV1UCZscFk3TlBLOmRpfk90dCJVUUNbd3J4SVIzeGcjQGBDIThndDhlJC58fTI+M1o5cyQkQGtjIzM4PGtFcFp2aGZKOmdIIzY8fmlZdVRvMzxvPnJsYXlvK0B4L2ArLFJnWEdpY0g1azRTUjFWdm52R0JsY1diOXklYng/OjRNdj03bjteUTIlfH5leUhdUVE0''@;'; put 'put ''YXsiXiNmQ2R0OTt7L28pQFs5RkQ9IXc7ODwrazl7aEJhe0VLRGd7TyRDRi9TcUpja0M5QWVhcDcxJmt5WDY9X146IkZNfWEkNTovRmt3RE0sc1R+VDNSX0U+Jng4b0xeWHdlTWtlRyYub1lLb3RDey44LDMlS3lSeW4vR3w1ayw3QVd7M2xJODRuQEZyP0h5N29oPEl7NEZ7Z3ZHWzguVlJYfGw3''@;'; put 'put ''JHFZPk8uMlU/b200LnpBOmA2IUZFOz9eeyZkaUV3VH5aUj5rIT5Vd0RnU01mMGBjMFYxV3JxPVAkIyIlVDl7Q045Ml9Ray5HNUpHZ09LYXd8ME44PUpBZGdrWXc3OnF+RHhzUUxSUkxFN2U4OWpxJjJddSEhS0smLGllOGE7eChYZyU4ZCZMOGJXbyspeFRGMlpQQjROSTp7OiZNYiRbVnwic285''@;'; put 'put ''T2koKmtiSkZ+LnlJRG05dWlxPnZrPCIqRyYxUT9+WyVfcHhURzRBb1ttYTVMbk1HIUx1eT96eUQrZDI8b2NfKHswQSJ0UnMwWnNSLGZBamxVTyhrQmFpe20uTUJXaVMvT0Zaa25dSmFxN34lbHgkTToqfExWNk85QDp7TitCUkIyN2hNNzFqMUc2T19jN0wqTH5FMHVFSU08WE9OaD56eV55IXEk''@;'; put 'put ''YTAra05De3RlbFJnd0JXbGN+IkpyTll3byxucSsqVUIqdi9yeVdWVEdheXVjPkohQyJGKjZAPGZWO3MzRzdvdjh8SVh+dShWWmtjUypyU24yKTJDJCR5U2s7MShnQTtGZ242OGZaX3RSZ0BwV2F4KHpGNXovNFRXdDtHL3w3P2ovaWo/JGk7I0N4IX13SSRvWW59bkBsP3UyJHoqKjN5XkdbWjF9''@;'; put 'put ''LjZaM2ZHX2JPPSRaWilFZ3ZbbkZoZk9dNkcwZ0p0ViVfdUBEXmJxfkY/SkBAQH5zfEJ2SF4oK2Z6K2RTd3ZteGUwd0kyKVF2Y0k8LzN3fis2UFNTJTlidzY9Mld0Q21nUlM2LCIlX2JsVWplZkI7KDsrT3NAQElHVmRzUjMuSipzSjFAKU99IXAlOUdAUT1bLDFyLyY6Z2N5ZmRfS1pKaS9WWWR4''@;'; put 'put ''Yn58QHY2eCQvXXthLGsxV0RaQGs4dC8jaE1FNT1LPGp4VihmMDNhQit0UUlnW1pAfHosPEM/KjdyX0VONEtFN04lSnxCS3R4cDpae3w1L2dNM3YjM3szeU4vRDhEUGw6VztXXiY6REBQTDVSQFEiRjdNWHFVUiI2O2R1NyVDOn5QVmRYNUdPNTdSaE87Unh5YFF8ZkIvV2ZzeEgseWNSPjIuSyEi''@;'; put 'put ''VHlhNU5Ddls+K297eTE+MGl0cDluXnIye2hOOFA5JmozNG8zM1ZdMF9AXzpnYzNDbWQpYU07PUcqflAoXXdSNH5lY0wxISY3V1tkN20lamVVMiNHNmJhNkJLeyRucCQ/XXEhWHx+dyFTNilvJlB+ey9MOjVfKjE2WmJqMT50SVVUYFpGTzhuYl8iPVtqWkhfYnhiJT04LlpAdmJGX2VMYlFeayJu''@;'; put 'put ''PlshK1szfClDOXtuZCQ4PEtbbCohTUU7ZGUqPkxxQTN2KTNoQmQoVHNYbno8Qz0jciIjTykxUjYobkshZlFWJkxCI0dGMkhfeSorQDlrZnojeH45UVdReGRjUkJpQl5CMiZYKEV+O2hxUVpMSWA+TSVjI3E7WilXYEMqc1hMaW4vdF00JCs2NG5rTiREO2d8ZWhOXz5VT0JuWkVmZGw5W2NNXyl9''@;'; put 'put ''dWhIWEZHYltIbDYjQUxgIkJ9OyYlMjU3ODhkNUc1ZTUuWWp7eD5KYypiRDkleEdvRiowPV5XeGQ/d3p6YC9VZylPMi5oekU4Pz5yTm0qdkp6amVqJWVFfT4qVGV8MENdKXc7QUJPIzYqR01kIjguY3BIIyl+ZXZUKCNMdDtUcW90InNiMShXKz03RGVjTVQ/bTsyZHVFYVBOemQ+WFB7X1A9N05S''@;'; put 'put ''dmEoK1UsbnFxejxYNV1sQjgjeDhITlRDbTNAIkFaQVNubXV4PX17Ry5+XlZqPUBtNTN9Rk5VfE5gU3JrVyVFUG5EV25GXyxgLlFsJjVNKERDOU5tcCUsLHQxaUlOYWJpMy45fVoid0ddX2c/W0kiODxraChKUXIvTHkubkBKfW4xaStqRSM4djFEeSNfbFQ3ZmwjaSRTLC9pdnhici9JVj8zVHhk''@;'; put 'put ''XTF4SVgrNVN4aktWTkZUaWZlNG8sW194KkEoREtZWkdDPHE2bDs0XiQxU1k0V2NfWGRkKCwzY1t8czB7WEokJTwoYylPcnVYb2JiVnphSE9ueGBlezVlfGVNWkFTSChdQEhkPzVUVSRnenxYLHsqfS54VDQ4SHhwK1FeWUZfdSFwNXpUczcyO2FZfWg+TFUkNFp3bmkoOmFdNmEsWD1XWUc4VWMu''@;'; put 'put ''UEdrUWxVUnVgfVc6b15+ZGg9NndFPDMqc25tTSpnNVg+JjkmSHYlSSlVJV4oPjFeVnljJi5KcnUiZXVeQzFTJmsiW1ZMZSRBL1lSVXpZZVpQVzltOFZbOCJMZ0M3WjE8P3VYR3V9YzJLOGMwXi47XktuaX4zbzVxYW1gU0lhTDxiU2ZoLjsoInU3Y2ZsO2IqWVl0anRQYUQkWEk/W1ooWiM8ViUj''@;'; put 'put ''PzBIVipYfCwsVTpzXVkidHNmdV9hdHksLFU3cEdyMG5zJTBTclZkZ3pYWnA3TjJwb0BqZCVqaSp9ZVJufGR9OCY4TEg0JTVkb059M0ZKKUk1ZVNQT3ZtWkhHa0JWdm10OUdpSXhAQndQKH0pc1YhWG0zaTF8KHs8YSpsKz91aGV+OXEqRWlVKEplfFkvTVc/XT9DLzxFY0lwS25kMFN3dVNxVGZQ''@;'; put 'put ''MSRKREdlKDxAUitRQHJvQCZTciZMblBdfFVxOSlVOTZKZyszOmh0fDo2Tlh6JT1tS2peelVKXjZzJSR2c2xfWDJ+RU5NT31QTXZZWGUqdHtzMCg2eGEwP1VlS3JmWXklLj9DJStyTXooOXBGSnVFK3NlT2xxRnlPIzM5SThMe0ZFTCFDeCV6cDN2cl1feHAsPzFxRzJ4JEVlSThOVXpYQ0Q+dkNm''@;'; put 'put ''Vy9wKTBeMWNKS1BrWWU9byU4Yi5KS2pJU3UjKSo9YyhlN2dQYnEwKzpqNEQweXBEOHxmQ2Q9TFdvIT8oZj99Ll4qQnpAbT48TUB6OlZ6I1hMfGJ4YUZoRXU9SypjKyF5eXRwRD0kZTdydmY7Q117aDVAMnYzWG0iRENTeSs+QHw2NDl+cTYzQWBDW1t4bGIyUWwoRj4jUTE1TTRCNnZ9YkAlPk0v''@;'; put 'put ''NDd8ZXRgWmkiKDZzWkV8anRWITVCe3FPMz4pRyxmUipLPlcqXVJGQX10fn1YYXdbYT0uTVhFTCt7XjFqRTk6bXRHJG82SGY1I11hUVlxKGtiKUI9IUJCdSxaTV1Kdzc4ImlWbmB2MnY8XV13bFNtOz9CP0FobV1NKWVOa3xRWV5uPlVtYjhQQUFVUjx0aX47LyxbLFBUP3tIJjxrZEAvWytIVixh''@;'; put 'put ''N0ZifF0mV2omc2N5PDspQzFfRyNAWDxUd1IjZkZ2IUI3NTticntCSlFeRktGTkB9Mk1rU0xodTtiT3RIP25EaV5paTxbXXZ3a0dfOyZGYXJaKS9ebVVwYTBia0BzXXc/aWJlT3VFXWB5PW9wN1lYN0V6TXtfOUooKXs0XXBvJmAhKWM4Z2R6OCU1LD0zOjRvJWtGRWd2d2E7N1NSO3lSQCE1cmNO''@;'; put 'put ''Y2V9PyY2SVdFcjRSV3lMUV5LTDRKc3dlOnVHVWppLjF8KmJhQztJKGBQYXcoal9ybz5rRk00VUJBP15OKDM0UUldOF0oZjI4KE1Kck1LZ1ZaXig2Z047XjMyRW42YFJFMykwdS4vWltpRTVCNHx9NDU1fGVXeW8kckNxMDkjJmhmPTpNUVNEaVdzLzFbKWZKKXReJn5YbEt7SmE9dDJFfF1vWmR1''@;'; put 'put ''WSkqRTw1fTRFNjYrRmU0aCtQb05vSkdxNSomdTQ3Oz8sKX1veT58ZDBpaWU9cS92M30sViUoZmNTWVE6ajN3JF50SSV+elRYWE40ey59amgrNVhjZWg9ZHUkNkw4fVQ9dFMhVVBpY19oLmF9c0U0NDYlW29pa1RiUHtiNSokUEdbNFFpd2pIL0F5RXhLI2tPVyU1U0BkRVFRWShEdyZaTVdGJDo2''@;'; put 'put ''JDQ1PDxKdFB1bSY3M3xDN2g6aTVaaVU7K007UDNCNyg4ekArU15sLkR9JVc+W0ozeU9ORSlxXi5lZmpIIUUxOnZJQFF6V2MqYCpiWEhJdGl6bXphaXtOXjQiPFJ0KSpZfS5wZ1JKKz9yJUspXjNKOlcoUEZRWUlpPltwLztgN0w0e2phcF90Tm1OS0J2TUhreHJuInx5Kix4cEF+OmlrYFg4cl18''@;'; put 'put ''PnpQMCFURGpRJX5CWUszImlfZ2t7Zm5+OiQxQTJ8JmV+fldkSGE/ZzU1T0dFLE11bXd7KDBOdVk7VVQwOmwmQjs3UCZNbVZvdXhMUXNBdSs2e2RPP2B6YEQ/azprZWF8K259LGFMcW1jJl8scUp2ZXhvY0tsdyJDXSZLYGx2PzJkMTJSYFRtNm9Odi9QfG9QcDs3TzVfakg7OT5hcDo0fGJ7YX1z''@;'; put 'put ''elhRKFlVQn4yfWxiQF1gLHU8TG0kUj8qUmVGP3huUWEwTjcuaUB6WCswLCtFaltTNFE7VXhUdVU9TVAuYkdIJFtve24yWEI5QFRBfWxqWS4jajF9clZ7WHcvaXReTnkiX1JxUjgrRip+XVtTd0JkbSpMOmokaX0zSjBeY2chaE5TblpQOE89ZUI8Izh3NFkpei8rY2Q1eTpPNz0oY1VZYUZgU2dJ''@;'; put 'put ''JWl1LCozVWU9OC88T2kqdUgyU3k5TFUuKS51WEt7O3Btdkc+dXtRWnQoMVk9XVpWaDp3LEgrXlZZX1pXY3tFaW80REtPOSliY0RkX1o2UVUuU0htOVdLKEVXP1VDIkQuWzpTPkJLQC5jMHZTOkNKbns1cUIxZVJzPzpDJTlGVGkiO0t8JC59WC9KaXR1c18qVT5KOk4lQDg2SXcmdi42WUtVdlt9''@;'; put 'put ''dU9BR1U4TjEzbG1ady50U1FZcFtiMVB0MzliVm0qWnE7OmhoYSU5fU8yQCxodipCPDskdjtPUEQ6KXpQSX5SKERjfWpSQj09JDJYTTFpVyRTQyV+LndicHlocEcmXmNydn56ZDk3d2s6IVFGOEREcUU9PkNMMzBvNkNIVDFeeV5BTF88R3lWRnBsbndLZDJKfUw6eXZEeGMvZ35jelMrL08zPnVV''@;'; put 'put ''OmpBLjxKKShsfDd0Uj1mJi5wI3c4VCRKYmBvQEU9PFpBM3t0d1tDX3wsYGU1KEMrXmVjcWlBfFlCby99OmNPNyU1RW1hO0ZFSzRDJD5XfVkkUCxfL0lWVk9kLFRfME9pQjBmWEJ3alV2WU04Ozk2YSUkTkxVeDxZcl4uejlTLGlzTSEzPH16P2FVPCpwak8uaCRVQFphR1JLYk9+M1UoWyklVFZM''@;'; put 'put ''QypIdXUsYVJ7cSw0RUAsMXtofnsuX2wlRVlnTWR6PWxgX2hnYC5MeD8pT11fd0JXdHxkKG8xVkVhdk1wfDBEY1pwcVl+M2JGfHNaQl5pamIxW3UiXXBPK2ZiKGUre2lpOkMvZ1Ardiw3fkNGc2NXcEk3bCtaVnBYVXZhM2A+TmAhbCE4IU4+N31qQnEofn5tI1FlK1Y+MTMqM2l3dTZNO3FTeFpw''@;'; put 'put ''SV1EfD5XNzdLSHg1YCMrTjNnXkVCZlY7NlVdUiUyK29MTF1bVkgvMmtsR0JJIyQjJFh1R09bNCI1OnhpMD9vPk8xOiwrYlhIPjJtITk8eGlhJnxBUVROUGAyZiVidXtfeV9vcSNmNE9raldtYVQscVk4Z0JJaSI8cD95OmghbHFDfHE7V04vUj5yNlVGPUB7Sj92LDAhWn14YEVuV1prXyI5VCQo''@;'; put 'put ''YWhecGRaZFM9QHRDam59bF8lemFHazVUYjFNYWc3KVlDRHRzY0ZOTXVwNnE3YmltQm11OV53fUEoalZHYDZEJT5RNkwudDxESSkwLG8hRVNTYl5fMXZ9eXRxSz5dTHF5b3I8dEJvKTgmcDsqVDV5e2puSUt1XWZHMCY0d31ucSxTTnEkJUZjQ1N3WT8jfkNVaHdCbkQ2JT9MO2pKMX1sKCJnXS4/''@;'; put 'put ''NWJLUGd2NGdiQHBvQ29CJHU8Z2Y7dTU9XlQ1UHJZISJpVSQlYTtzK3JzNFtCMUJGcktaKkdSI1FXK3liOygpTyt3XV5ETXhMZiNebmVVOFNycmE4UyZUS3VSb0VIWDF4KEEsKTV9WEZlI1QjbHQ0Z31dbmomQGB5K2t2YkZ9JnJHOFksTExHJn0iVGRYMCtDa2A5NzpvPlVHKWtsYXImYmpeemFs''@;'; put 'put ''RUV1PnUzKjo/WlY8V0UrYS8vWXoqT159MW1bMlJfOHl6WHRMUnhldV06SFNrOTxsNz1NYkoyK19UJS5wdzBsRz1FaTRwQTQrP0oxT15uPG5mME40cypRKnU0U0ZlMDFuNWJBKWd5MDpQU1tJSnl7WSZteyw2UDt6Slc/LHFud21UKyZ9YEhBVUdMVVZVb0pDWyZdaHkpInZ3Nys4ezFVSmUySlc5''@;'; put 'put ''NXlSIjl7XVcxIztafToqaVVRciJOInJqLlJHZDZmeEQhL2BMU2l0TEp6RSp3cGpdK1EwZHxbNkNLdEdKdSxyQ3VWO2wmVz9oNT46Vjlzd1RYMipMcjdeITVYY0ExS3QqXzJDZjFNeyRJYjYxPkg9QCZsKS4lVW1oNj4+dHwqRnB2Rz5xL3wjckVeKU5xZ0tIOHNERCY/VDYzPTlRWjpNXXsiZTlS''@;'; put 'put ''NV1ufENdX3NuT2M+JWwudSlISmJDNCRpTUhUQmNaUHxVWCZZOFJQcjRhXkc0Pm9KeXkvcDdeZVBjaXsqaW9BSn1lS1dTM3BfdnJDWlM5Ql0wcWZdJC5xO2R5ZjtdIi5NLlhjOGUsS3NsRzAqNWxoL0h+YGIjUUZSPStgXj5KT3tAOSNiLnRLMG84WTlTTEJMLipUdXBBKCg+YmZxPHp1I0YwdWl+''@;'; put 'put ''L0c0PnlTZ0tWKEgqfkEqOyxYKHRTeyt7XlYyPF9RJjJLe1NeTGBYfHRVSllufTxreEs6RDtUK1pyPnpEQF5bLlk7WTYmdnJFRC9CcD14fU08Xl5BPn1BfXdFSSYqeyVHZTdzcGo2KzxvPk48aj1Rc2prPCM1e2E+OXA5ckllKkFUamtSNDZQSEopWTBRIiw9TGlDSWBiZDQsXzNsKjxxRklwMGF1''@;'; put 'put ''dT9MZihLMT1uYSJFSVlrT2dlYWlBYVRtQ3VDR0xDKkN3TSUyKltYOFshZ3xLRlF1YXVSXVpIRmlrNUJHRjohQEBVaVBqWkRvdCoxeHQ0QFZUeytnfjMxKzAzNUBjaldreGNBYkZUXzRwKlVtSF9YUzI/NXU5Z1l1Ons3KDdPKm1FSGVYemtxP2VmTixoO3Q9SGFkO0drUm1vMj5oMGlnOTNIYzp7''@;'; put 'put ''JGBuIyh3M0Mue1RoOyFpR3BAVyNufDI/TyFWTSlsejQpWXRTRi9rUXtjbCFPJlk4YEJ2fG05JGgzUkU1OTBNYWw5fH5XanNdUHkzPC5jNGdGaW1Jc0N+XkM/MmE9VixuMFNmJSZabDhoQD9VTFlQXXZJamApSjtqMDRVfFtCZVleSyEjTTxvOkg9aDgkSTkuLCNeIy88YipUMzlMXjZza0w+YEhv''@;'; put 'put ''IlEwVTk+WTNBQz17WDVgRyFVXTZ+OHZGSWBZUztiTylrM31wT1NyRX0mUV5qZ0VHTllyOFpSNFZ6RjNQTWwoOixxO2FyWXJYOXc6KzdbUzQwczRQc0A+KWh2Q3VNeCFCVjtqeDR7dXJ3JWsqVnpFU0NZREZsUVUmUGJGKzoqIXEyJDF8OV1zVyUsP1N2Ln5fK187LEdafjBnYkkwTVlGdTFBOlYv''@;'; put 'put ''WnErcywjO1dfREVrPnF4fUciMlQpO2MwZHt9OVR8M2lpQnl7a0tUenRYJCZ7P18ieiV0VFkrRHtvJiNiZThVWFIwaH5aVVo2Vil1fHlzYzNLbDBxdD8rSVJnOGhgblsqLz87VTB8WGo4fXRGbXs5IiR8Nk1eJFlYNSQrKDU3K2FmVjlBY1pjL3EhYUk5WUBKNS8lXVZWbHs8IWVVd1VmPC84bGBG''@;'; put 'put ''LzAmL3okSTg+I3dud34rWyNUcDYiV19JPmZPZ0VHdFIxOiQ0W0JJYmE6bXtbdncpUyh9aC41Qz10ZTRYZGJaXT5MTltYLl5sW1klVksqMzp2QyE1e1k2KUk3JnZFNXNtKkAofkg4NEJYSSEqUX5fbVlEfjtJKlhkZzRkYkYiKzxgWi9JNCUvLGducn1IaCpvfVM8Yz1GfT45QWJOeG51a09Id3Uv''@;'; put 'put ''L1ZORUxeIm5pPXQwQ2F5TmRZJXkodyMobjVvX2N0Q2FiOTJCfDAyL2pQMn1eVG5Aamt1YVUkbV5QaVs9NWU4IXswT21RISUrVnk0byF4QXE/dkNpTHMhIVFwOFJmS1lHVGF6bmA7Y0JtXmxTblp4eGlyS2suJDxMaVJnTFFtOnREajRqJWR1bT5CODYqNC8oPXF4T0wzYCgpSnVbXXhobk90MU1x''@;'; put 'put ''emBDYmRGaj5Abjt7TDg9QHIiUlJUIkdUN0Y/MlkyUEQlTCZ5bEpCLFlzayRmWE9ReV5JfXE6ZkNIXSszSiEzakQ9dT5mc15ZaCZbbEBVW0Q6NCY1RzZoakksRlVSbzhWaz1vO0JVdn0yel40UWZue3VvIjlRdT4jOH1nY1Y+YnYpLClJMXBxKUE6YVMmTX1NfnZja3gveip7a3JmVTB7Wj5USkB+''@;'; put 'put ''WlkpclM6R2hUc3xXI2oqLGpzQCtKNFpuVHlgZXs6M0FnTXR+KVBpUEhFRilYImU8ejpLdlp9UTlZIiFMRWZRWlVoLilQPz97O3BjbT5mP21uLEFdVChWWUh4MjlgWEdtWWFGZFshNFI1LlRnN2h1c2pUTlNsYT5LLmpmLm8hYn0pZTFdcS9IRFlfNWYhfjlPe11UeXU+Kmc7VEdiQE5SW1lGJk8m''@;'; put 'put ''RzEhe09BZ1NHIypZZGssfWI1akR1bjFxdjhNSFhoLEc2VSN9JHFHNX1sN2UkRGpQMyZaNiZPSkEqL1pOKEpSLmAmPiQzd3ZRaW1neiV9KUs9NkV9ODEibVJgfiJtT15nPiQ3OSNYJnd9KjNZdzBTVWpRe3RmOjxFT087YlhQRV0zaDprUFB5TTQqQiEjIWIjVUQ0QnQlMn49bylnU2FWX25QNXZZ''@;'; put 'put ''RU86ZEU4fHApQihDXiFtaiNQSW8/bGU4UCtkbD52WH15OlRsPlk3TGhsMnA0X2x7T3FDVVBHXUExfUljVj4/TUYkPVQsRHQyYSVsKG9lNmxGKWc+VSlVKmR7L1ZERiYjWG8rezNWTFBvOitqdTNddEBeekheYFU2Pl47IXxtamspPE5ybUsicUJQWl4hZkxFLEZUOUNjNVllfHtCeltKV2kqVihS''@;'; put 'put ''LGt2M01RTW1fJHFiYXZGcnhrMzFAa0QsSSpHfjVFYGlNK2RwRlRTPFtmPFpINU9QTmpncGxoakEyL2I0YmMqNzwleHRlTFcsYm0oUD86UDRzR0U7V0RIOjVFJnFISnMjWUV0PF9wJkdHNWRWLCMsM11MXUxlWVoofjx0dXdXMl9hfndRcEViVmI7Q04yYWs1SlhNVFhbJD0jUEV3eDBPLFpCRXAx''@;'; put 'put ''LHYlUGg4MHFAS1swRHdbam99Vn5RKDN3aSo0P04vMkhTcT1jNmE0ST1lWCFuTSwweThxIzxWOjwjfV4uazZTWTdzVHJuYm9dMzMob0BKTUdvJXN6UVVUOlkoKUJjQTMoTU9bL2BxU29lTzhsP1RxdFQ8XiJrc0Zoanc7eClANzV9VDgze1ova1ltTClyUihbKWpQQUFiWVNHTjpdOCR5T2spb2Es''@;'; put 'put ''YzApVylLXjpoN3B0SztWI2ZuU24hQkQ6OUBnU0xuN0YoaiYoUU08WTBLNCR3SjQwKTIsXlNwMUZKRCNFfktnXUZHY2taUFFaLHcoQzlXU2NgLjRFZzY5dTZBIUtoRmJpMXR4bitjWStARjZROEhkfCFrM0N5RygwTz92e1UqOD1seiZ8U3dTb34lLmAxXjoiJGY4R2l0ZGY0RWk3V2guNFQ8VjVw''@;'; put 'put ''KyRbOE93SD9gfkk6N2pdWjgmVj1UX3t0T3BiektJWE85T3R1WTZhMiVJQ35YdHFMMUBdWSpeMFh6XmFBK1dTM0cjTXYjSF8/V3l1US9zeW1FYiFrQzg5S0tbfmFgc3U9bzlzQnA4PGovQnN1NHAuOnc0T19rWVRfMClpKURAMTBKTS5nbUdJS206VEleKVsmelIsREVAfTluMHxIPW8pTkk4Yz02''@;'; put 'put ''ZVo+UlUqQj59OzpSW0BFPWNHNEUmX2B3Pnc+LlFITEA2ZUYzPkwxa2hsSlhLcCNTeTZueC8kKjUvWEYjQFg7e3J8dF8oY3plUy5zfm5AbG47dmFLOCEsbSVFPV46ViE0WUNOaUxEX2ksLkFddDpiUEE8Tnh6eEpOY34rUF17Y0ZPMFl7IW09JXJQNWN1OnV+eSNaRy5PLmBgPHZCJW4rO2ZdWzZW''@;'; put 'put ''XWNbYmxIaTU8MFVNNVNrVzVsPCVuc1hdI1ROWDlBLkFSbVg9bSwwMFNHdyhuLHRJYFo3ZHJpPntePmQveiVPZT5VLE9aMio+dVd9YXoqflBwZGoyU2dwcEN9I1cqa1d2PWd6b1dWYHFxOUkyWFpsWypWXz9lJWBmL1Z+Kn49Y2NYa2d5Kks0e2VSSm9eZSxydDlze0lzMGtlfFA1KkNlLzdlVHFe''@;'; put 'put ''d0d4ITYrVElNdzthUSg5I1dUM2MqeEUhcjRiRUwrQ1J0Z1A+N25yOXkwWS5oWV5zT2BvLm46UlkiPG95WWAqT0ExIzA5cUxoNUlaLitBVjcjSWk9WnxiTFlTcjBCXS90WmEiYlshRmtIZjw1bz9sMn1hfFpmeG8xe3tQZVE6OjdXKF1NPnNrUm43b2REOnNQQ0N7KVUzMHNlckkpbHhWbiNaaE9Q''@;'; put 'put ''IXt8SlY9I117Q0s4bVtjemdvMWp+K28iSTBEOm5bXnQ4b3c0V2l9XngkdFZIdUxvcF5IJShQcE9gLHV1VVBlYFpKT00xQzlAUCh8fkZMLGlROzRVNjwsVnBnfGUjSyhVRWZAXmE3PnVzdWchTUtPLmVUdHJOW0dLYyN3UDJadSgvJTNQJnZnUVo4c3dNbS5vfSojLmV4ayIsb1hwKmslS3ZuKEht''@;'; put 'put ''JEtxNy43JH5VRTFbeClPQj5lfiQqd15AZXdjL28mY2xnZG5iOFBkL1EiL1p7L0NGMlpsITlHPzJiOmRVdCVvK3ZFVWtUPVN7UWlURzIvYWt8T3tAPDpoLHpRKnd4YThDVmFtRytaM1JMcUpgfnNAbCtjbl8udWckJHVKVFR0aFd5LkE7Tn5GMU52IzZlWkw+fXFuIkg/R2ghdnttRWF+Ti5rLCRX''@;'; put 'put ''cG08bGwzcVUvQyMrWFhkaSRsY1cmU29WRnl7X2Qxe01IIUBtclpgKHlFRGRCX09IT1dlLm5pTDpkI3NEYFB4bTouYWlSVFpzX2NVZ2FpX3dfPWBQIXI/Yz5qdW5kanQvMzVEaF5IcCtrVFJhOlQjTixwLnJNK1VKSnlLO1pVeFgycEx1dVRnSnNMeFh4byNIbEpFb21JPjBDaG9eSWNtaGlGaDhU''@;'; put 'put ''JjAicHtpJEx8dzhAflcqUG8ve2Y/JDBUUDR9K0JdPFE3eDpfX3U6T2phSTVuQywubSg6NHtBZyVxRyh4K2JERCxwdXJseEUhP2ZKM31jUXA7NWhXZVVYKXp1b3VxZlZsMFgoX0J0cEZ2JSNmSnJycUpRRmsqPGZmUUxFYTRrdzBgYjR9PXFZaWhdVCtsS3w3bzEva144TmN9Nk1CKzJVInlBdmVk''@;'; put 'put ''PS8wcS5wU1c8Iy85Kj8ieURjWCJBcVcvWX1HJjBLR2klczQ1cUxMcipudCVMWk08MURIZypeclhZRnxNaTVLa2VjTz1uXSQ2ckw6XTZeTihaQkh3YiQvVFlXOzlCayEjV0lvITJxckRaJiFgfUkhZlBKRlcoNzh3RzZ4WSsxYkVdcGkva0MmY3csNyhzLyRzcyVkdXk8czdFPm1TRGRzS0p5bUF0''@;'; put 'put ''MEFxLjIlMTkidm1YRFFnT2k9Z1gmNEo+U3FybHIzLih4OkJYey5ofiMsPFQoOEohSjd6UngqMGZjZWVpMnRvLmhFTVcmUCVJKTxZNzJWbnZAcigoZFFDXU8pdVQ0S2pkY0Y7THc1ZWNTU2hSTU9RVCJXbEQ3Y2dlTXlMUjhlZlBaOjopZH5vVW1+TTt0Ni4/ZEcyWXtXWzw+Qyg1YU5LISFlU3tv''@;'; put 'put ''N3k2bzhnc2FqIWUsWEleM2NMZCJ6YElrcGc0Kk52dSxwPl1acUpGKmN4MFEoWzc6V1hqJXI8QHw2SiNSX2NpIVMsd1RnXTk6JTdeKElobF1YUzhUdVIhKX5wJjchRUdnZGJMInE1UyIzIiM2YFFNUFViLj5OeEAlPDRrRXFKX3Q+WUxNbHF2JkR2ZGFPJHRALFFTOiRpekZGeFVzLFYsNHFfVXh6''@;'; put 'put ''IXwrRyMrdEVsTE08SGBRVXB+RVYxNGVONmhmNVtoWF94KF0qRTQrWUVaOCpsbDcmaU1ZXTVgTWlCYWxvUXduUzVDLHhfRnZvWzE4bWxKcHssKGBxdTl8NVVLZG8+Nkh5RUV6SkB1fEshaT9mYmBHWU8+NkxXejlxaFc9NCIuZnFmSEVPZH56dC8vWGc7UEAqZ3xTRkYva0oiSHYpXkl9ZzY0NnJ+''@;'; put 'put ''Z0tMK1hYRilXSXdOUWl9SFVPOkNPTWVlbEFrXkpXdXtpZ0N7el1fe156I21iOXBARi5ASWMoKE9aNDpbO29ASTxqXTl5LilDXSkhZEhfYmgsT3tkZD5eWVd3cl1UXy9FblF8R09bOTpSMzIveG5TdWNOent0KyplQmQrXippeVp4Mk43SzIqXjQzO30vb3ElIltDQn1IXnt7cFBOWEcmRkR7Yz9o''@;'; put 'put ''RG5YWHNfJlV4eCUjYW51eUJhWW41IU1BU35nVmohJkQ2Q2pYKn5qPWI4dUZQRVBKeihkaV19UjhxdipsP1FUIiVHalg/Um5RPEdDJFBpV0hsMmhGLH5SYjpMaG03RzJlRmhTL1pEPnV3Zjx0a006NC4mcEZuRG8laiMkTHkrVUY/fVlDfFM1OCg5dlYxTXxFX3hwSyZ5Tldudl19V0tkWGBNfWdy''@;'; put 'put ''RG58WVJNYiJVM0NpZ31MRihBc25FaDgqejdgMyZzZUp3K21wW3ZSTiQzRHVGWF5bI3NpbjZOeT0xIzcxNXNpPCFqSkJDW1Z6cVdQOGBsaSpFaTJAVjkqI0p7XTdLJWV1SzU5YjkpJGR0LHcmd31+fClnP3ZlZXdFUiUvO0duUT03IittPX57VEhVbSpZXXMjK2E0YmUleUlQUCxxIXJ8dSY/bChh''@;'; put 'put ''OlYxajghJlc7QytfX21sXWlAX2N1YVclTTszWUs7PjFofFBVZGgxWnxPRVdoWVYzIVczZWtOWl59b2RbRnZWMnQ5ZVs5flNQRlVKMzFSfWtBPDQ9dm1HLHo5Iy9WUiZVImEiJnFpPktUInUxJnRFVXgmeW4wUjBpW3dzODxINkIwP3RUfXJlZn53VWZhLz9DbyNoeEx2VWlAcU5iV3xoPT1GPF0r''@;'; put 'put ''QzMuUWdCdT1QfVMzUkg8WCxIdCVFNCNtKyJ5SGl7MVc/fUNMSio/ai9sdihOK3RSUnpOSlZLJUFOZVIqeFdwaXduZFE5PWlNRWxjMXZ2SGIya05jdXhLQXwsWlI9Xj9NIl5rPUJSW3JfKklSRClXRztucllHVTd1QGk1a19LdT9XQjEoR0dmOlFdeG80cnxKN3BFbWd8PiI0bEx8VDQvWSlgdUVm''@;'; put 'put ''KzdxdD5rfTh+a2Aoe3dqOzR+WXo/JCIkUjU8Wmp7aUU1Wl1HMmB2dDoyXm5STHw8WVlzYipCWkpxbCswaCpzd1g6fGhKNjs6JSo9c2hJI31YekoxamlOWTxWd0U/ZGlUMk8kYH1fRV1dP2J9REdUaGU9SF8oS31rdXI9cDxBVCtCeTtGKDNfVz0iJFJ9JCFXdDlUfHozZkBzeWFzP3F+WFpFWUwl''@;'; put 'put ''dCRPLkV7TDAufVlZMCQlc30kdSRJanQoU2NaPVYrWjs1SDsuS307bGdjaygrUnxHNCEyNUJaP1RaOGleUjUxS3o2NiooKVJbfTFhfU9zbllLVmp5Q3xvejhIPyVgdXlHPk8mNG1IVUc8fTUyPXxjTHREX1daUUs8M2N6SGBQTWY2RVpyNCFdSkRWailVU21nUyZbUj5FKDFrMUpEZ11fI251YUcy''@;'; put 'put ''PD5ROl4oRXl5aDQ4TXEjaSM3U2AmMVdgI08xKTNaWXE6ZFRFQF1DOEpYPWJFL1AiS0MkJlVuazRLNnc4aHF7fW4hQ2U6YmJNWXptSlJ7XT1kXWJjLm0+bXszK187QU4ofF8+Mk90QVk4UmN8MlpfMFdmbD1JRzldWSY6S15JZkd0RXRKUW5BRXdRezU+TWlEa1BgclBgaExMd1A4UEIzcm5xfGZu''@;'; put 'put ''RGVZKTR4Z0RlazEoREc7KitoPXQ0R00qby5Sdz98KFM7N1o2dUZ3eS4sbEN8N2dXXmsqQUc7SmI9cSVHXSh7bmghR0UzNiVXbGNFNEtzYkRATDhBZnFFJDUzYi5XdmhPSW9bPURDPko6VksrWHVLUHdqW2RXXmQ8NFErfHArR3doXjBYZ3BnLmhhZkNRVV0yQ2R5XTExWzJqTiRnPD9VRjVJMzxb''@;'; put 'put ''U1ZSQyk2bGQiaj4vZl1TIVJGPyx6bkJXTTo2PkBoRGgySS9wN3Jmd29dfHoxQmxvP31DLn55IjRzTSMqK1ZzKzxffiIrUj1+JEExK3Q/c2BwNlRRPjlAUUhGbzZjRW1lfERrNz4zLHMmcX5BVEZyRkp1Wyoub1B7OlNOZjpTfkphT0w1enlwQThrXyN+fVpmaCF2SEddZ3xDfTB9NmhTWmY0Yytt''@;'; put 'put ''X2hqPSRYXV91e1hUVDlzVj53Uk9AbVReRCZSeXAkaVUvJXVxZil9JC43Yy9UdCl4SXFaO2VRY1Eke1EpVTQoUjt6Nm9UNGhKJUZUWWgkbVdmUihlTilGLmZ0ci5DR0BCbjsuUEs8M2RNQD0/W3djfUteaXB3JmQpN0c4XWdeNmBUYlhMMTkhcVdfRiZZXXhWeCR8fU9NZjZxKSsod306RXFQMy9i''@;'; put 'put ''L2wrQE8ldkkvdXYxQnZWQDQsb0g3eH1WOEI4O0w+cX02Jj46bzJgTzYhPHkjb2pfZFBoLERoXWBUV2RELHJ6YTV+elQ5Yjp8P248YUN3YVskaUE1W3w7T1cwKDhoQ1pZfDNdWUFjOitOc3tAXUcpMD1ERCJ6dFg1MC58ODUpdlgoaGo1MihhciJBOnBtYHxebiFkKlk6VHY/eDtre0NuaUouJHM6''@;'; put 'put ''PVJaWnopNEIqKlMsUysvUGJyXjBZKUUxNjNvSj5uMFAicjhUdlM7NVJReSFMOTdZNCpnd0NYNElpQmZzX0RsVjBHcV0+MU1RJTNfXyh6aSJRPiFZO1hFcCxATjEpfmw/LC4lUTh+P1ZKVytubncqYSwuYl5AflBCYiYhPE5kdzciIk9vXipKfHhoSFRjRkxbR2FhQzo0JnkxVnR2flZIJUJXQn4l''@;'; put 'put ''LGJUWlh+TDRAQF55fHYmeXp5IixBWyNBMTZCNFRUOWdyNSFzNXxxUkRGMVE1K2lhaDRTX2RjMl8xaiErQFZpVFcsMnxSS3VHbkpbe15PODsrJmlXYys3TU4lImIzfGYsLiNCLlVCRFRlYzVOZVhAVENCW05zcF85WzxNYWZ4NmMoKj56eDpQd0FkRCpAOUljIm5ZaCMjMjkvPF5bKzhQfjB3LzI5''@;'; put 'put ''cHl4PWE6XlV8cj5USVArX1I8dSg2QFdkeCZ1bEBVP2RYbm4iK3hbSjJ5STUkbCU5TGdtMkdXQitIbTd1SGNDRHA2TFQyaFluKSwzPDohVi99QXIoSjwwISk8QllYTVtNTUcxZX5DVTdOPmhFZHgsWSw6dl9RTTBrN2Q8XUFwZHFqeTd0TjRVUSlKZ0dwaFZ3OEklT1h5XyY4VGUlPTo8LGZVe089''@;'; put 'put ''fnl1Un5YMG9KJHV8PF5rezYhcSoua2ZNYXI5eVh0Vk4iRXt2bEojWyl5e3RlVX0hVntLZGJoayt1NlV4b3VhQUk4X0U9OXwqSm8zNkcjMFBZUDExM0heZVlYMEVFN1NLJG1bNWhpT2ZLUVc0PyRpTiI5OlpwOjRHVjIsVUNYPmQxdSEybE48MGFZQD1wRz5wVCx1Q2ose05PTXZGNytSNTRQbipW''@;'; put 'put ''UzBGcH1jKUhbV0l3NnY8by5VJUQzQGpHOEs4cVMiLD48NTBINjxWPU8lSXI9ZEdVZUx9K0UkK21ISUxuPmk5I1JqK3hoNHpkfUV3e3BAb3t+QFViNVpXYUZ0fUJCWm5iRSYpJk9QYk5PLmVLe1NKIzc5IX06NERqQG40e3REUlR4YT96Nk94ekRaVXR5el09UFh8aUJNbipnbiRuJm8+bnYvXUFM''@;'; put 'put ''KFs5Y0tiMFdTbXJBdj5UJGFeeVQhJEE+W2k3emssTCtASHJtP0ZuJF02KVV7UkouNkcwR0BIX2RLIzt4XzwwRHRZKD48O3k0KH0velY2LGo8SDtIX1R+ZX19SFl4OSF2bSM1RjpFY3A8JE1hWDUkIWR9OFIhSjlTVm59U0RPd0lYbW1TcGZYZyVHKX0/TFdZU3BOaHo8RTN+d0hzd3t5LyklRiFD''@;'; put 'put ''KlJjKGlOPWBONjdbclV1UW03aj1ufVAzXUAzcUZJZiNIUHVBTCFtNChEWyNvOF5II2YxMFA9RHJ8Nz8lOEV1OSF2aXNtTSRyJSJ6UDJFW2I5Zjs7KXpuLj5USSlkRWJJQThAZSRtSDxrRkdeVGxsVEcxPWFNXXVlOC5sQGRYP1E3MjdvYWwjQjI8IlBdXjJGIixKZyVpPWd7bS9pbytQWTRsQ1VJ''@;'; put 'put ''Y0QpPyk9WU1OVCNob2RZfl5EZilWSFs7U2RnfXtJTT42VkVaQnZRXX1XXntmQixOM3QvI3d4LzdlVSxkXShgT2R1OyRhNn0vK0I4MXksNylvXXFZbXldPChNS0g/KUhea0xCfTJ3QzhBalQ7NW9VWyNeYGIia2QrKmU4RlZQe1lCP3crVnpvYG48UF9wfjY7dVhWZ05eSntndFJJLEQuWFM6a2FD''@;'; put 'put ''Vl8xInVNZzYzKXNkTmxzOzlVNT19VFUpU3Q4SE0qWyw8PnpRSWpvPnZOdEQkRFkjWElndjsvLiRaNXk5KlF7YmN6S1pYaEFyKzBwQy4xS25AY3k7NHFkYUUlWzRJdXo6fGt7RFozXX5RYns2S2hScldJLypScktXVlhacUMjLCx0RG54UyFfZzd+RyNKazRiKnw5Zmxxb1R3T0BzL0RgXmY8Rjs7''@;'; put 'put ''SzFReyF5QU88IzFYZVgrO2lmYDFLZ0s5Mi9yZSsvKlhBSngifXFsLiR6KzV0VUh1c2I+a3t1VW07ImNbWnsxcmxUKFBNX3RiXiZddSRObUBPeEs6VHZoe3A0aT1Gb0UwcDQ5ZnRpSGd+cCp6ek1+bVJlYkhBdU9uWDNoI3ZycWM3fXdiYUMoUUt5azg7bjAyeyp4PWs2RyZHR0wvST1tNigoMU1j''@;'; put 'put ''fWNGWipDaEM3IiVLc2tRREZhfkttLHhKXUhQaDY3Wk1jPWVPc2FQcWgmQkhCeDs5eDpqfiJ0JT8vdDdBPXdCcz5BXTIjTDZdPW9qTERzW2IwVlF3TXdqKUx1PEl5cTswRSphW3wzJGspUiFeMz13Q09EJXg7MkNteixhRn1FfV10OmwweUM2djYiQXdFWT8qOCU5YCQ2V1Q/JiRRN0hMSCFuQmwv''@;'; put 'put ''YzpBVDVxNSYwLHVyentlSDVBIW9HQjpWJX5zbnhWSjlUJU41XTcsUi5ucyZoUnZaRU1FSEtHOV1ZKmJrWHQ3ImpUeUtVbkh4K2NfKzpoaSE2R0ZHWmFOZ0ptPnosJkt8YTA/WjtCM3RmYkkwKl80Y100flZ0WUFKZTs/WE5XQzU3RGxzIjB9XUQ8JDMuVjlZSDp+cixSKG1+YTlufkxwODxVN0BJ''@;'; put 'put ''MklQQGFDL147MzQzMGVZYCEuVjdxc084ZHNIaDIqXTZ6dHZFNG1ZSnNAZnA4V01mJkNQMHtjemxoZFttWSk2QG0iNm1ydj5fMmV3Ljd1P3Zoe3ReIzpjbzBjfSxNITVJeCFhbDNAKzVaKHd4dWI5VWUqa2VGMn4mUzErYlovVEtaKDM0ZmBTZkxyfj9iTDF9XXRnU3xhT2VzKmBrSWYrZnxzdzs6''@;'; put 'put ''NVJaNUpCRkReQnNEL2hjeyYwVmRHNyFycXIpSlltX1h3Ryw3P0MjXl1lT0c3IUMzRFApLlhZM2VsY29bfjVCM2UhclldPUImYmdST3txen1TSHMlfW0ue2ZoYE9+NDt8X0dTJmt+aiEiUkp5YmlxaDd1YV1CV19RaHYmfTg/VlpBanFoaml7azomfW83c29GMXNKbUhSI2JqTChrNE87a30rLlh9''@;'; put 'put ''eSVPO2spT3lyXXlNYClreU5TPDMxZExTRVF8ejg4dl54K08wfVNfSkJyYlRSPG5PXTVQQXpeQjB+VSJJJk51QEk/TmtHS006KHRGUnFrR2lfTipMeHtrWXNlcj9OQlQ7OjtNe1IjMz55WzVwSkx8ISRuQDBxfEdJNyJWYGMiOFJWd0xQOSEzYkskNXc2MHUjezI7OiUqSTI6S01yUF17SHc1cX5u''@;'; put 'put ''KFZDL05iVDpke20/Q2k4fnQ/KFJGZFU3VC9sV3lXJVFYRlhsIkx2PW9Eaz0lLHsyRClgLl5uJT5YKjs5eGFVQzV5fjFJJmh1SSZBamJpYmJ8dyhCK1F2c1lbIWVKWVdYVV1XcD9NQkRmV3xKMkgoRFA9YHAuJlspZGVgcnVFRiVXJXYoQnt1JkdYQ3VhWTZnSXs7dykuezEwcTt7WCFuVGc5cmVe''@;'; put 'put ''XiVmNC9zJGdNbVspPlc8VlN6cmdGUD1sMjdKZiomS2hGIUMoYH4zdTZNc3V3MnZCSGMoQk89WCpvY11PfEEsVnl7NGgpW2UldXIpR3UrcF87N3I4TyIlant0cHImTTN1KkZ7VS9UP2N7bEU/aUdsQEl+JHQ9WH4sJEI+VjR4X0RXUk9icEUrZy4sb2V3TF8/OGVwW2E1Sm9VaVlNd2wxc3BQS1tk''@;'; put 'put ''QDhvJilmYDZMXikqMik8JmdJPWM9fCslRlJUI2JzKyZ3bnl4Y0pmSmhTdllvOEI3QTJzNGJqZ01BSiheQGx0KzxZX2NtLi9veWhERHtBbGZoW29FZFl1QixjVV00ci99P34rOCV0REVQOSlULiYidip2VF9qT3hUakV7LkpBaT8heVZfKG18dzh+ZUBoW04lfkJwX2k1KDlxXVojdG8oKno1Zyhe''@;'; put 'put ''MDtZc2dFTToxXkkzKz1sbDhofnVhPyRsZTJGJlckT3cpY3NXKjRpemM7YUNOdGZMSmpxKUMyTHB2THJqLjglP2U/N2UldWZbeGJ6RmVdTH1uLH5SLkR2LDZZXSYxZXdJdm8rbjp7WkJ8U0A6UWVNfnJvPm8hOU9uVV1edHApVWozPy5vWyFwMCJSem14U09INm5WJUt+VSM9I15zfUFjfkkwLi8x''@;'; put 'put ''fTM3b3l9aSQyO2FAZV9YaVNAbWMvNnVHczN1Mzg0a1Z+MjEvJFUsfH51aSQ0WGZ9OzxLJThJKHAwXT40aTYvNVFfPzFxRnY+aUdnfFhMYkxEYXt9YktbcCo2SiIpc0BeTm9URz10ZVo3PzFOUmllR2pqdlJkTHR3UE9AQUdIRVZ1Yn5GVC9hKylJJmAjNDtifT5GJG0rZGRSUFQ0bWtCK2ZVMUI+''@;'; put 'put ''MSFvSU0wYkJHMzJrc1EoR3g/MW5be2hxKk1WOVglaz46cHl4N0IjbnNFdVNuSVtDeUF5XmV5JDo9MGQkVSVSdWpXd0wuTGI+MWVYMiMqKUlOLyZgWj1YLmUhW10kQ2suW3Y9MC83K2tIMC93fC5aOm9acXsrZy9NRGpOc0t2P0Q6aDFVV0syL3Y9al4pRnhDU1R0VkVhOGBwXXVCZy9VclR+Jnpr''@;'; put 'put ''RGJrS3hNSmw5WClOfEA4WWcya2BpeCFTLH00S1lPbChDRjc+L3xWYUZ7KUdZcUhJYkZCQ0FgSX0rbG9NTFJjfSpuKmtPd2Rzd0p6VTB2TTR3WSR8ODpueDEzYilEOG85czFpRGVkI2s5UkRUfmAuKnJjZE9ZYWpHJVlianljK3kwUFY7Si9wWyRwMllWMyZjQnFPVFEzYD1YXS9mZzNTRXZSWFBt''@;'; put 'put ''MXxxdDNbRERwOHBrcEJbYHtITjsqfDZiNnMzcmNrOHdMN2lkZ2MiSEpYezU6SjZjZCwkaHt8XVM8dmF5YEBKQmhNdE9QPyJfPndGWHwidDVsTiRANjw4cGVmX29bfW5KPXFyIi9vWyxDSDR7Xmp5MzUhOSlWYyheKk0zak1aNl08SnxzcjZ9N2ZtZTVbTDp7fXFZUH1OO2p4UCRmaywrZF89Q29l''@;'; put 'put ''ND57Xj4jM2wqNkBdQFU+O1s8PmdvOVcjRTl0OyNgTntRTHpMcCQ1aHteS05gQnclPCV3NSNwWyxMPUAzTTt+bjslajpAM3h+YHFqeG1Sckw3b2Z8JTs0OjQqKVsxL1Y1MURoVW9CKS49OWJAZF8+cn49LkNYTyo4Qkx8NWBiPTNgWTtsRU9RbzFOZ2x8fFVGRjhzK18mXX0qOyouZl8xLkFxLyUs''@;'; put 'put ''cz8uT3xeOjova3QwfVQ8fjxCYHNLSSY6bFhrRD1BeWhDZHM8KF8+P0xOTEJvYU9xOFIoNnY5dip2Q3d4REowTTA0d3hEYHd4RDM6fFE7N3U4VlJRdl4rSVNLSCVePjlqWF5lKmNGS0NKcUlTaEB9M0ZxUkNZeUV+ezo3M0lhVkNUR0tHKHVFIi55WFImcCgkd3FYeFRlcnt7eHl9UU1ZPFtWPnsl''@;'; put 'put ''cyM7dmhVPCUpVmNbTWc7ZE97dj5KN0dXKmgvVnRNdzgvRkc6bDg5Yj1xcztncltmbV48M29daFVgZTh4PSl4XUFxTVp3Nk5lMm01fGJEWy93a3xxYHF3fi8mWkRPfklHQzxbN2s9S25XIU1sSGxQPXU3PG5MOSY3JHB2I2JobTtfTkx4fE1UcG1lIWFoT0FWLiNLOH5xUEA6dz5TYTZjVj5lNn5J''@;'; put 'put ''YVpWKjdkUTx6SDxxR2BvK15bXX4jPXB7dyhfSHMvVmdmT35iV2EyRUdTVysmRWJ9ITM6Rj9Xc059UVVtR2MpNjl0O0gvdD09XnI8ZiRBYjh0OExmSkZ2SXxFOTVdZT06RlNhclRodlNycG13SGIqQF5HaEFed3siPWIvRT5BSzg/e3shPW1abV49aHJfeVhaUzo9YE9EcTVvQ11iWUp2Nj1hSWx1''@;'; put 'put ''L3lEQFlHeWBOaWtXX1BAKzlMYGVaZEZiNlAweTw1MitSYGBieXBvcXNGJk9yWUhAc3lTa1k+IU9hLFFme0xSfUNlekY8LCxmTmFEPiI/Py5ZeSl7dV5LeFkhLzlpaWorQ2V7cjI/UXtaT2dXPWpdI1ZUW1s+ZmE7QGdrV0VLKFM6cFFZM1owWFUyUD46cD5LMkoremoobnxsYilJPyVbWFg+Pzc4''@;'; put 'put ''Qyo/Zmp1Z0NXK154RmJNSEcrOXJLYWZkSWRQYlZTQDpjZmZ6VEEvIn0+Nm56fkhGa0R9IVpMcy4yL3dYQCFIWU5SOytiLldDSDcheD5EVW5WfilnJW1oJm0sSnxicT8/dlp9NWZYIUV1OkN9NCtvYXduMSRhNS9fX2QhOn14aSxQZ2U4a0p8ZDcxZ24kdEU0RXkoQlFjPyNyZkA5Y1VNKkRyOGY+''@;'; put 'put ''XilSPENZc3pYYXpWVj5ARmx3VSpEMGhUUHt1cVVZKkliVVF2UEs3T0pwcDMlNyMoMHFaWEB3U19bbHZhQiEqIyo/Z2p2PUNXKm1fViteeVtscHp5U0hMSyxRUktNUlJLc1JSS3hTbDdJTnpvTH03PT1yPF5fOyUlZ19gJk9JcmgkSik5YjYwSHBaTkRUPTNSZllbTEp5JFo3PU8oNzh0QDBNSks8''@;'; put 'put ''Nk5TdCpgNjArY2Z3cllFe31EMiJzVjozTzYsWT90cmhMOHUvcEtwbCF0S1EqMkU6WnhRcFluX05mZj9ZPjAuZXheRiFiZyxGQFdWMjBBYCUqS3x8KjwxRGc9MmBxTH19Kk8/XnE+ZiE1ZkYzKyRtNkRCIVtEMyRqK14kXXxQaGdJdmlyWE9LczttLEEqRkA5cyVIZHhBZUdFY2R5PTZ0bWVhOWks''@;'; put 'put ''Tm9GJHh5eERtRHZoanNtKkNgIzdYW0lAP2YwYGI5S0w1O1IuJj9uPCFKfmx3b2JFaU50UlhHKGVpfH0pL3NEPzIhK20kO3x2cXh+N0VOfjJ0VjhYLyVsZUM4SiEycXxgPXNmVDteeyI2ZkFhbTA5JiwqMUBefjhGVX43aDw9ZVtgJkM7ejAxS31Vfl9BLyg9K3h8fTQ0cndHL0NpK2k0U011WUhj''@;'; put 'put ''MSNtcjFzeF1oK2lUUl18M3dwLlArdWgoJDlrVltWNWJ5KDkuNkMhM184eHx9L1F4VCpIa0xvdCZJZSptaVBCRispTipnXXlTLl9mK2BAdnpJXUlJfCFjXmczOn0qZzw1JCFSfjlNdVFVaEw/TX53a31AS3N9eHB9KE57a198aFFAWUN9TGJyRmVCW29CZyg/cW8mTW4sSk5ARDVReCQjLDRhPkwp''@;'; put 'put ''YH1LTn1VeHRHfnhJcXFKRW9EUlgjUW4maCY7amF3SitWUUMsPiZBPlZfP2p8UTpxPX1sQEovcmMpYkEwbXd+e1t9VHJJVj1vb31sJSo2Qj4sb2w7N2lVYkdOSTplVS5+cj5rdFZbO2pCM3szfTNHLyx5ZzRBaiU+ZzFAT30mNC5pMWRWQjwxfU9IRj5MZn0vPTEsS05NRG1iW2srdVJHT1BxaVI1''@;'; put 'put ''O2ZYWGZibnpLZWNwPUtkVW5FaF9KeU13aF9VeDMzQmhYXnhvVCl+SE54RllUXzU7bXJrKUQ6cEMsSH5yYkN9O0xUYkVUbHBiKG9nbVQqe1B1PUozejZxN2NILGZvYTN+fXgzPU1LSWZUeDxiU0pmQDpeZilkSHVeLjo9TFcuTitGcXd2aV1eQytpSUslcyRgSnwxLmdKVTNOcVlTIUMrbmJ1ZXBn''@;'; put 'put ''WyREenU1YUk6bFNRWWpHUm4sVTE0T3MzTFFEPzpbQmtdXktDYEN6V2tAUTYxSHQrQTNhN2Mwdz9YKiJYUDNwbG5oTXRaRzReOCJBdWtmfUVWbUUqX2JoSV9Malk/bEl9OilqelJPNjhNPCZWY30uUHo5S3k5fSgsTkM8PkZKRiNnRlBvNXVQe3VCRz9QM34+KFRdWTlYfWF7cm9pL2EkYUF5a31M''@;'; put 'put ''R31uSCxxXk1hW1VkSD82Qmx4N2FPTWIiTiRbeXtKeHJnK2l+ODNDIVBVeSlPfXtzdGpAWl4iSFJ3bC5pJDN2Im1vRXp0ZkZUeXMmXyU0aXwlJDp0RGhrXSVPM08jMiNXJE42KEw9NDNgVzUpJUxvbzxLLHd3cWBlYW1bPyMxTG5WVj50TmVZSHhAbjJ4WixHQVc2cTBKckY6K0o5RSksLzd+SXNR''@;'; put 'put ''ZlFjc0cia0tXN3BNWTQ7VytmenRQTHddLl1BM3hqVyElTCxvWEMsTl5+QWN0T25IZWVMfDBEWDBbNTFGYHU8d2UzfVVtZEolMEI8XT5XLFImNmNnKUQ4SDtreng+VXt3JHw8QWxmJEVbZyM6XUMjJT0qUWhEQmJJL2QiP3A1RGx1PV41VjtWQm43enEkYUxaNXY1L0p9YSleSDN8cjsvRCtIKjVR''@;'; put 'put ''bE1xZTd5X1RDQVlpJWZiMVlWX0VlTGVGOGNvPipDbzBBJj9lRGBhQWwjbT5iNXwjdCNnLiZ6cj9ySF1ZaUZCYkJ3QihoOiY2KG9TfEorP1o7ailNUHZiPnA6T21LdXFWaGtSY0pQKUhXbjpRd2ZZI25ZKCV2T3pJcCVTdGBAc01yRT9uUnNKVlp6VGo/KXs5SiV+XW9jUjpmLlp+ZWZGPElDT01M''@;'; put 'put ''N30lJEYlPzUoeVgqJCxbTV1hSWk+b3UyLGpZK19hZjJiYT1YX09FXlksSnNNfkoqbSpgYVAxezJUKU09W2YofTouQUMsbylLWzRdfUNoQkYkLDh+RUsuT14pMWEvLzV3aj1NS2t9N1pQQDt+WXI5bHBFSmleJHZ8NlEwfTxNUVV3TDFEP05uMTR4KVQhYkhxNztxKm5WOHR8MkorIUg1XTxWPF14''@;'; put 'put ''KmA+NGlzSG1OdGNVUSNeKi9mUzhMW2A9M2FhcHpdfG5yRC4wdyVZfE84M2Z0O241O1g5Tl0lUWFDWlkmWXVNdVt3V1hVQl81Zl16MUtOXjc7Q0gvJCghQmpUNDdKKFZzTy9eayRlbnJAdnB9YHdweDNxWUZ6c2NXOS5BOUdGPV4pRmh6NmNnamVCbyVfQHdwdixWY0M0LntGTmEkT04zVVhgRz1g''@;'; put 'put ''WjMrdE9tLHV0Yzhyb3M1SWZHZDNHZis3aytDYyk9MDNEWDhycH4rW3lfVERXdyJZL0YhdG5MWXwvZFFEQFd2Kmc7PCw6bU86W1dsPDRdPVpialQ0aFhjQnpbfVYmPTAzXjEveUUuQCx+OndXVWd4TVBTajA4WCttQk9aQn5nTWwiXWN3U0orc3Q3MldLWS81aWRdUjNecU56VEJjUSpEOG8xKDd+''@;'; put 'put ''eFJAQG9acXJCK19PaUVFSmliTDtWdz4pdFoyWCtNb3JJYWFSUDJiS2lMRFVYb2RbM25PZ3QqSWo4clFXKSxeT2J+cEt4d0dXfnc8dDYpQi5ZWFFXVmR9VyNHRHF6Jmh1Q1hVRV9lbTA8em0rbGczSk1nSylYJFUyeHM4L2ZpVCxeUiomeHlMSGtuSkwpXmN4YCZsQUA1PXVKQVV+M3NDZS92cT1u''@;'; put 'put ''IlVzaWhDcl43a2BEX15PL3E9TEtxRWxgfW9hbz1SKSlHVV9JYiltK2ssbUcqOEJMXSE7fW5QRyk3ISFXVEBCSFFDYzd0UC4hO0w5dDdMXnMpZnkyM09aNWgraF9CenQ4QTRoTmJyLE9tdTIvaDBoeHk9RzQ6aWBeKXx7YXBlSk5sV1g5UUpgW1lpem9YVkZybV9RKk58KW5KNTpgdnV0KFI/dn1H''@;'; put 'put ''XSpYOGdnSU9qYkprWllUfUt2PXN7aHpSM1lDJmBFVE9SSCUhVCZzY0ZDRFVxbn10dzNybn1rLD96RExQTkJXOjFZUyY6empSQ0ppNzg3Y147VFZORi9oYjlMPE4hQlI4OzZQLHZEUWhOUEJQLG98Xlp8SndKNzN0em4uey9jOXQme3trSyxEaU44LixuRGFWUUtPXzNSP1hqMEhoTTt2LzV0OT04''@;'; put 'put ''ZXR5XzVSQmtNQlJYTWxTI0BwK141OkgqRHNsInhLWmFeS1AmTElFd2R1YDJ8bDlUNSU/TWl8WXtpenEmYU5fXkFYO3dUdENQPyVmWzcrYSp0P1clU3VHRCZbcE9wNjMmWTxMcytdRkxIXnNxalc9KVVBNi5iLlRzNmc5L3RSeVErbXxoaWVqOnNJfWhXYSZCNHh+T2tlR1pAIUBfc0leZmBaZzpP''@;'; put 'put ''YV85UXtONCQkaSkoRTU7MUUhZXArQzc9Y0tfM3U0LFd9alMwIylAcWhjWkhRZHcoYXh6dGAjSis0MngpMUZkfSQuKFsqOVAwSGghNE8uUmJlN2pzNmIsSlIwSGghNE8uUmJlN2pzNmIseStyOzNERispTkAxS01jMV0xTDFKeWRlaHRAMTRPY2BDYCxEIXllMDI2QEBEQDBISUFgS3ZwdGA0dG9g''@;'; put 'put ''OEE/QFB1bWB8bipHcXI9aV5RSmxAOyIscmd1b216ZX1TInhVSl8vKkN2flhefW14Q0ZTekhQe1VCWHVNYlpvT3pVPERlQEpVQnVoL19SJDxPMCVgZyFxTzhoXTVGTk9CUlhsaSpfXkw7UmU9ZEomTS82biMvMStvOWBiOV1eSEA1P1IqZm9GfD9eVSZ2MGc6YGZkbU5hfjg6OmYzbDdeQEAvV0hd''@;'; put 'put ''N256YUVRekF2RCFheEkkV34oYj8mSUdCTWtCV354flA1N3A5d0pEZlcsXjZIYEdlfC96JXJaVTZYdC8vRDRGWXA2eUpPSXU1fkVHZU1ffm5OTDddfGs/PXxXdT9wUzBqRGAiPkhMdndDWlZlO2Q0fDh7ZyZmMSYpWHM6eGo7NiVdXmcvYyJEVXtyV31aOnR6XTZyeD1xdHpfTmU9WDt+KUR+dDV+''@;'; put 'put ''ZzFpTl17eXZleEYlL3VHekkvL3oyK0RPTDEodCxeVkcjSVFNUDRdTUR6Jlp5aT0wYkRZTXFEbHRdVFNkfjVhdzMoWlJNWWNXUkhsKTthPEVxfTUiJnlwV2owNVIwYTRHbmlzbiZgSmMhRzFiK3VSPythLD88aC5HVW15Tl1oL1R8JnlEYFcqM3JQKWZhST92bXRrYXF9LnolPSNtKEJUTUNMUWFp''@;'; put 'put ''KTs4cjwrSCwmaXl9RV9KU1UwKFp8S1ZjWSFQM09SKVB7TVc8Qi5BOkxtZzcqYG9+emxQJHI5NHosIipPUF9XWG9CYD5DPmNLTFhiUERgTl9KK3JITF5CM09IeigzdXFhdV9fOVBXQSZbWy5ffispX3YhYyJ6fXg0ZEV3VGNkTVdHLltEeTtVK0dYYmhdV3hALl9+VkxlUSx2ZCVHTDhHNjh0Yl9Q''@;'; put 'put ''al9mc0FSKkxJeSNZYkg2dEAmKVZ1T3Z1Xk5yL0wmNlBwSUtKc3piNHRKfXdkL3JJWFI2WShWVGlwIlFMemk0Ty8sKlRBSVZNZWNGfEd4WFlpRX5GWHdsNiRZQHtwVW5aLkBGODF0eUVITigrbmcwMFlzTChjVlVDT3NwQnVrbHhTZjxmfXtYRFFzNX5tXXY7YW9rPj5YcWQ6Pnl4e25XUUJIVFJh''@;'; put 'put ''SzpnUms+KiJYJipNUm1NNHU0cztOZ2MyWWNXKEdXRjphezNjSj1vak03eCR+dGhRXklkK2IhPkloXXdDPGBHaVdkMDNvZTVVWCp5MzJ+My9EIWJPLHFuTm9LfDB2XmVjMGhvZGEiNXhXUnAjP0Z3aCkzK2duTipgKEglPHBFWXk9SiZiO2xFKXJlXzxubT0iMW9ZMVR8UCJSW2B5ZCNqY0A/OWBw''@;'; put 'put ''RE53fnhPI0NJVF14IktKTlc3UlhzLzE9djhfd0xZZHhnVTRpNFZyM0MzVX1YaVdjO0ZgWnVJY1NjclNYR2cxMX4mYy82eF4sNnYqInorVFJ2PUJMZTAvNm9nYWNBPl1sMislSX1MX35JfjI4TX1ba2VhcTZyOElfRjRVZUZPTlNddEFkUCM1VUV9XUcsJS9IdnNRb3pyVmQrciVPJUtXKzg7R2B0''@;'; put 'put ''aWtvYFkqb00oOU9EfFl4cEs/ZkF1b3JCd3UsRisxS2Z2ZmcwSF8xNE85aWJlMWoyOFAsZ2VsKnM2UCxQZjEwXTFOUHl6RzM1JUp5dWJqPlZRfj07KWA3TzZuYm9USlVaZm1CZipMd3BUKz07clhWfSJqbkNgOHdGL1AraEx5NnVMVnsjSSsmRD9OQy5gRXVlSjdNMURgdXc/Q0BhRmZ0T3dEUFRS''@;'; put 'put ''RGFYRDk0STA/RH1HeHZ8KmV9IVdYWDJ5JDYkUyVNfjZLWXNCMWNzQkJ6fHNyV1spSUFLb3NCfFddc0JFLmlsK1loMHc/fGlpM0QzbUciNzNhKVcvTU08UmRFW3ojYVpkT0ElLlh8Lm9lcVJkOFsxcF9XWUBHemtifkY8P2B2PzJGPlEqcjFMLiReTmZ5aSQ/a29Fb3xwQldYPmJiOE1xfVlCO2BQ''@;'; put 'put ''MyVVVWg/LisjU2suYDJTdDcwfD8+QU1nWVJeOC8rVEA/VH1QZkl3ITZhRzdvITVpQ3ApXzVXNng0ZHg8Yyt1T3ApM3xHLkVneVFZeTVWJFptaTMkYF8uSG1RRmo7ImR0eDV+PURFNnxuRn5KNmZYajZ2T0VkPzEhNFM6WTByNiFVSDZTNX4rP3tSKSNuUigrdkdMXz1uSGpUVjxLYERUNTs2PTAz''@;'; put 'put ''XzE4d0Q9M3pkV0tIb05mKmRQXVouQFlZQ0ZSVD9HIj1YRjc6MyY1PVV8PnxvaVkiLF59ZF9hd2R+QFAzQWltZTtdT1N3NHt0KWImMFhFfjp5SDVdJXJwVWQhWXhBeXc9PHwjY2Bwcj8jbl4jUSloOkljMC9ba2MhJCQ8fG9VXTM2ZW4lRktkMjtWMX1CRk11c3dwbzNAdEAud0J3RkU1b1hKOj9S''@;'; put 'put ''eyVuUWFPV31zcHlYWyVpSmNNXVQ0NEBrWEhAa2JRTShkNjVGMl4jezo1d016V3A7dnVdJDYqNT0iaSsxYVRNUDR5TSZibSt5JThNZWBSKkFEfkU8YTxseXxMYWBwUXNuRCRONDteVW1PPn14PTU/aH4ySypnS25iOSNOcUh7emksNDloV0UoakVRRjpHVG9HVmovQyUwZllEc3pXRGl0WFsjIyU/''@;'; put 'put ''e2ZQX29wV0BfI3Q7YGZuSHl6K1JDNjQ1JTI2eWRVXT1sc0A0cjNRNC9bQWQ2en5NdWRKXk1NKStJL3FPM0djIWBUM0lFK1VENXExbml3MWNTWT5WWWlZVVRIVE19XX1WM2lOPHFPai91fEs2TlJ7elV9P04kS3VLSzA8XVQ0MSVpQE1xOTRQKWJZdDVPWCthdz45dXNlMk0lQj1lVShZRXk9QWR6''@;'; put 'put ''PUtQZDBUeDhMaGlQKHhEflhaRnF6NG9tT3F9bTVeNCF+VSpYPiRNOnpMblM2N0AkJHp2I0dWZGowIl5JU2ZUU1B8Sn5VaEhoXVY3O24jP3JRJU9fYF1kNTdXRzhIQTtdMUAiO2g8Rk5Ce1JYJkxIXmF8dSVGNCFUdis1PUFhQEtjeFFxfV0vTXpBXk5wYip6Nm5YKVg8SWFYbitrZDssKlc5dThX''@;'; put 'put ''TDYpVmFrbUl8YVV2PHlZNT8kQTIkWDkzVzUpW2U8V0ZHUElbRyt7MiFoIjFGLDArSFModDRzaGRqW15zW2g5cyNJSU1Uc0ldKE06YilQKEVFNGlqOzg8XUNWMXFVOihuYX5fNUsyK1hwdTArZD56clUhdURjQix6Z1V3M112JEwhN3ZuMTIjXl16bUMrT1AhPz5JZV10UmpLUXlBO0cieDd4eXdu''@;'; put 'put ''MEtPdjhyfFFPQy41YSMxRFM9c1NTdGE/WGYqIU1BWWxAdVRuUE1ZJm40fDFxb1B9bW8rK0JFdHA5WyRjNGFdS31BUT0wMH1tNnN3X3lCSGpqekZ1c1RkbmRwQW5oSWZmIS85flZYPjtEKUdRWDpzWyRadkIqQmZ3T3lpUiZ7ckclR1khNk96SGNAeChCRlhnOmlDeitET0F6c2hiO2RmJjIzP100''@;'; put 'put ''Mjw2WV17MG5xLyQ0byl3bDkjPCYoPSNHYktLflV8QVdOSV9XcjVpeWswPzNAV0VjTXleZCtFPT8oNCh4fkZoP142dnRNZkcwNX4mSD1JVUAqem0mfEwwcmBUXnsqK3Y6dXxDIWs9KWA0d0Ngeys3MlI9JjU3UFd+PTJHZlB0OyNqTTNzQVhJMjN7L0ciLl5+ezNtKnFqZ2ciITYpbytBb2pAXytX''@;'; put 'put ''fCwldll4XkU4W3xENjlmUXZ0fkVlcDM6fGF3PiNBTzxEeVlnOnFOWVhqMGB2eU1SeXpmdktyYTl2KVImPUQ6cjBgLFA/fVcobnhgK015PTwrS2V3d1FxRmUpaHd2Tk9RUHQlQlksNXAzRVlqI0VOQjg3I3Y5d28rKTlTXnZTZXxncGE2eiNlclBJY2JpQzI7Qk1YIzlBOHtjKF0oejBdfF0uOUB0''@;'; put 'put ''eEo9YDB7ZXpMem1pVjhwTCt3Pl84L0xSL0JVTV9+LjNxKUxvRWxQPiV5bzhienxnd2xAdGdSTGAoei95JT5JfFl7VmVXb2V1c0xYWGBHRVdeb3BnQ1VWfVJibUJ3Ky88WTdTfktOMmFmTjNlXXtPUHpPOT42fVRuLmBCWStPNFQ5ezdWe3kqRi4yPmchTHlBQzNsP30rZV19YVZsYXxeQlVjVGUr''@;'; put 'put ''dVJPWGFDc2JkZmRhaTNrVDYhNmlGQ1Y0TzxrN2B0fjMhXncxTDJmNF46ImY0Mml7Lzk0Ul1RTnQwVz5NND81RzVSXS5HdU9ffn1+OEldey5OZitMNEdPfWI4SHVyLkZZKFtGRyJrQHZOKl0oeGNVZVRITUNUamlTQ1ddeHw/fFJvZiFXPkp4Mk9NYG48dWN+Vlg+T11pL0p7R0R5KTM8Y1IzUGhD''@;'; put 'put ''RyJMUmkkdVpmJEtCZmRiNDs/aittP0RbPyR2TGZRc0RXfkVRVn5vOCUuT2ZObDIrMEtCZCtkSzZdZzVXVmtzUHxmdEElVCtYUERXfl5kLHs1bzJpMDJbQigma3pLU3RzOU1DOlR0dXNmR117TmR6X3VCUyx9KGZMUGpdSExCZWxgZSIrOHlZKFNvV0w3eGJ9cFB3WTpzI2F1djMsfT9saHA5WiJb''@;'; put 'put ''KGxAfnc2WmNFJDIkNjpZcWs5TVtwY2o6SEJYV0lQMiV9flJxfUcqLlhdXkF4YHhMW19fUkA2Y2U5K3xrMX5wS0l+Z0slbk5XI0xIV34rdDN7KExUQGRfU3poIWR8Wjsjd21VKXJZZnBCJSF8M3toVUBLY2hoJCFCcGA+RX0rXyZ4PHlwVyI1dXNiMng9Tih2cGY8MnxeUz00cHdrMWN6RjJbPDo+''@;'; put 'put ''dys+TjFqW1RZOWQyXmshTCVpbEckWXFreGc3aDhQcktKTyQyPXxTUDpPaFlKU31CbGNlRVQ9P08rbX46L2AmaEhEWTIzeUReaXtjYS8ic31+LlQhIm43dF4wTnl7NHV2cWV7Zik1QUs/RW9eKGxhcHl4P2M4fmx9UigpeT5vTGd8OEh6Tkgxd1FNe05OSHh3YVk6RDJ9fHxCeFtrZkpWMyV7clk9''@;'; put 'put ''PyI2YD1XbDd3LFtoYn1kYjxHYEdsTDYxITQ1ZHU5VTk7b3l4SG57ezllKCFNbzh2dzhyOGI0a0pwN00lQlokcCR1dCY6WlZQfXpfW1NCV0RDV35Sb3JARnlFfVJvKyVHZHA6JSg0cyZJLFhZQDV9XmVxQEtxcFAmeTZSSy97SmUhRSQiVjBAZFV3UjFVOHkifk52W3pwQF1ILkhiTHghIm5aMyRG''@;'; put 'put ''YFNLcSlPN19JbzFgYnxIfldUN2k8bHJ9P2VwUGt1NHM1cTMyaGx9YjRQTlhNe2ZKfHBFMzwqKilrdzFGcTNgYmFkYShHej5YYXs+Q1FoN2Vde0R3MnZSN3RZc1twYkdHZSUuW15PdzRZMERkdVVma0g2WTBFOmBmdk9INnYjRihHNDxVdEhaaWx9NjBXcyN9SDooUl84NmgpbC4jYm1dZilsfjgm''@;'; put 'put ''JUgucXY8Mz1geD1+PDxoODMhaDg9LmlsK2xJaUJsaltnVFFae3NkIVg6Rl9QWGhzcl5bNVU/SUZzenEoe2sjb1cjeHd7fjgoZWclZlRuOC9Ce1o/TnpoeGMrbTFmW3VwOT97IVh5fDZ6NX50NmdVdFA4M0U4YXQzcFEwI0BDWEd3WW5AMW4oKDdheCxebEd2OjQvVk4xej56OUVxeSV5UltKUThZ''@;'; put 'put ''QXFGcmR9JSZQflt9ZTFUZThAflUsSH5XRXMmRjF8Vz1MTXc/OnR1K0FvYSh5azQxJFJ7WGxqd10mR11QS2x9dGIkWCFSdTNCRXNLfUIvKXV0P2spKEVNeUNtMWJUfWlfM3VjKFVOKl1MX2JbVERsXVg0RmUsfHdpMHw1SFB+eE9rXjx3XW42Y0hXe3U+L1hdRzBHO3sweCNXXUBJK3NNeTw3XyNY''@;'; put 'put ''dSg5MFNSMmNITyUwWHw4XjxNTDpnfTc4YGNsdEYkI30qXmQ8V2ZzQkUqL2ZZVDIyfjldVjVhXkdMX2BAZlN9UGFlenRKUUV4NTlXJFU5P2hmV0xVRH1dfTluQiUwVGRKelJIdWgyT0VmNlF2cCIjfFtFS2R8LlBKT1N+QHl7SH1KZHxOU1VeKF81WnhLPG52VlVDSGZ2aGkyVF42ZlgsUWpgZSJP''@;'; put 'put ''RjxXXjF9PiZQcTg+KXJmX2dAVGRYfVYwVTNQQ1FEbF1XKEBlRSl8cWtMNyEzd3ZjQCNAbnd+QGtYMC83WF9zaEkod0kwckxINkUpc00sQkp6Yl9PMT1ZXnMofS5qZCoxblkuVjhEN1kzTWQvOWgxMXNoZ2NBOygsaXYiUTNua1NbY1ZqRmshcCJdaShrN2hkVGU3OFtKJDMmc2lUXm5JKUNgYiw2''@;'; put 'put ''eTlDUyJEcEAuK1sjZD5lIjIvVDYzUSU+L20rV2YqNmJ+LG1ffmJ+Km5hNnNpbytBPTpaQGFjci43fD9OfVUlQHJ5SC9RcV8oPno5KGMlUURkKnd4PXszIVFEaGI1b1pgWz9IbHI7dHRKTjFCamJDMGEiPUlAOClNPD49Pm9yL1VIQyNsfGI3NE92fXc2QylJfGs3QSFWVFo0KyVDdV4uNDVhdWxG''@;'; put 'put ''LFlxYDRmJjM/Lm5rXTV9eDtDbnR4WmlOZkQ+Imx2Kl1KTUdVTmMsTzlwJiU+Z3JVMSFRUl9xJH41TDYuZkBZcHc5WENnKEB5NnRhYDYlIj84cFZfakkkL2Rlc3xgQzVpYCZjWkV7LC5Dfix+P1d2UTRGZjI9JjNbNSRpVjkyfEdQfT9oMyQuZy4yelteNUskfns2WnpVMSV6RVFUQio/RkZPTyRf''@;'; put 'put ''bHNyWD9CV2hWSmNANltsTDhAeUZ7O2h+djshVT9DcmJ9ezNpSkRkSTxeZXJdZEJINis6eE95cFVwLntMTmBBdDFbZHVdPGM6dTd3eV9kd1RpKzBjMCFLKktMSGI+QU1XVS8qYSp6TURrXiQ2T3VrfGJETTZyZ3tLSUlLNUF+QFZaaFlFeGUvQ2B2REV0RytIcXRkbiUlR1VWUWJwOio9WHc6TiJi''@;'; put 'put ''YHBXUzUoXlU8RzAvOWdFfEFuPyVXWFF8bWlBKTdyYHhDei5PWF1iQlhbZEIkZlREM1MyUj1aTF5DdjxfTmZCQV9aMnY+emREI3tyZyVwKk5lZSZ0JnlMUTFzL09jTX0qblB2bmZVVjp0fjpHRnpBTE1lQUN0dS5+MkldNTV+eGFxfSNpej1qXyUkRUlMSC5ITypDMURXLm43aCNoZzskcklpQ25C''@;'; put 'put ''UHF2T2lmNzpfeXxCb1p2XTVAPiVDbHMzXmJ3XTRsOjFMTkgyOyppPC9qT1FyXjVkfFldek11PykmdWRvRlldbz1hbkhyZ0B6Pjh9ZkBHczE6M01hell7WmN1VmE+MnNjeEsjXUkzS0ZvfWtEQFt1KS96Qz02YilWInQ2JDVfIy4/TmpSOX1scjVvNixINDt+U3h7JTRgcGZKOlAjN1dqb2NZMTBa''@;'; put 'put ''KE5pX2ZZOk0/Rzo/PSQ1UCI4a2F6K3lod3Zga2FAWiRKX00rOyNjYF9icCsjSTFHb2hRI2gkT3ZPWkJ8Nmwjcl40YXUhS0U4fWd+OEAjbmRTJFQ8bWdMOGxpJkl2V0REXSFvdyk9cyxwIiZsfjhHOXpOZ0tTcmBVIVQ+cWs+QT5ecSZfKzlGUC4ySDQxfE9MMUQhekFKdXkrdGNVPTBaWGg6JE5Z''@;'; put 'put ''WGg6R0x0L20oUXRUKjVvKXJpYCMhcT0xXl48IjhCX0Fxfj00JUh3W0wkZ011dFt6fV4kUWBwKWMkVlpmJUJjenVBemE7Jkg8VlJgKTlCWHBxdncmNWdRd0tURCU5Zz5RSit6V2NvRihncDZWRlJWd1JNJElkPz03IjAwcX1PQHhPN19sKVhKZldOTkghQjc5bzR8VWV+Jnt7Tm0vdkIjQCxGN0t8''@;'; put 'put ''cSpFKFYsflMhckBmOWNVZVRhOlsmWzd9fT44NT80Rns0OjJqeEZJVE18Y0dBfWFANk5OVzxJOn1ycHFzREBnRV5ONjhuWU1HfCY/ZU9MYmE2QCFOR21zS199O3VhaTBkM08mWXxDS28oN35nL2JsL3BvN1swUHVbWyw/TStNe1FFSD0+IkEkN11xRlZNWC5eU2MjWlFTS086QzBLdHNYVjo/Znh7''@;'; put 'put ''T3ooYFghR19MKjMwPmluP2B2SE5WVlhQQSxVRGo5a11xJj54WlMrX3hjKk1YTjA0K1UifXg4UGhncnYlV2R4MEhTK2pVN3w8JkZLMT0mSytiWFZ1WEtBJlMjQiNYQktmd3tqQDApYW9sRkopN1d+bDFiKChQdTFuViU9QitdNzJtQWxbRm1QJSVWUCUlbGk6MWhCV35FcEphKCFjeXRdXV5ddTxY''@;'; put 'put ''N15rT1h4VFtaO2JKZTxvZ01oMj1CN2I2YyV0aVt3ajsqRmx7dm8uOV0zIlYjPnB+YWkqcWR8bjhpJDpjYWEqWDRjYCw7b3ViVDdJL0V+ZzlHbnh2TStkRXwmLlsoYlE0OV5SeCh1I3pgbVVIYiFQbGo9PUUmQ1lUPDM9KmZXVzl1fiU6akxjVmFDcktlOSI7Q0cyfnZOU0ZefWQ8ViFhTjJ+Mkl6''@;'; put 'put ''O28xMT02JX42RzdkVWA4ZkN1QEZhTHVTO0N4SUxwQiZoLkZ4b2tYKzU0XlV8O0x5c3Nzb0dZMms/ZnIsSj4xJSJDZiZ0c0ZzLjxRaiklYmdiKG0zKVszbShPVTZGbTBaZEIvaihXNjU0QWMze1hzPEcuWlA+N01DKjlbbWxERCREUWZzP1FNeSJKMkcjcyUrbnZ8cWMqbiR+YTdLd0g4OENLTiRR''@;'; put 'put ''YlovTEtOU2F3eXZbVm4/VFo2PnJ3PjhDQ241b0NyNERgKzMkZmJCTEpLXyRDcUtzMHdVUTYzcHRGeW5nVyJgckRvNio7dSR0Qnp3JmF3VkpQfSopdkNkWUx8aVQ1b3VHYFFqcW07WHlNfkprYjhwL1o8TnwuY0khYV40clZfRHVUX3o+ZXxaXyhpdiYsdz0mOSRdOmtXUXtvb103SHpKUSQ/IT18''@;'; put 'put ''fiEyMH1yPVN7bSo+Wz1wUnd1fENgYkReTV8+RitVTilNWnVLfSMrI25ZUiF3fUVofmVXLEpVXWVpdnI8IzVTd054QXVFeWJKfHI0XyRbPWZAa0pNWjVkTTpkdkJkPWVbckkvayh6dW0rM0xxQjZ3ZV8jJFYzTTI9dnc9VytSfTA9ZTxVMG9wT19IJlRpMl0rI0dIdDdDR24kMjoofVJhWiFTeGZi''@;'; put 'put ''OiYobTJfcT9NWj94PDUiXmBrKFZ0MTt8b05ONGUpaVt1RVF4WFhIQCk/SC9pKmZHPT9uPzBAXVVDYCFPYXhGeXViImRnX28/dXFnMG97Pjp4NkpyfHQ/Xil3JCFJYGN6OFpoPFN8fiorXlA4K0BidUtqYCNOMVF9UGBydkl+MDRRRU97dnJyZzhELytMQC4mWHlkeEVkUmJZcz5lcioxPEZkVGlK''@;'; put 'put ''RzQ9QihUczFoVSo2VE5zb0ZkN19eNyV7JUJ1X2BATFdKU2ZnVkZzbSlucEUoRkwrW01Dc30qb0N3KXM0Yl9TRjdFOTpmSVp7ajQ7WzpbKT12M11qPT1fMT1WJSRgYms3cEVlPlNSOkdKWDk0TmhdbXFCYlY6d0x6c0t+Y2E2TEFKLm0kPSowImFDRENHLE9eOTw6bE5yMFlMX3AoPVJZSlZrZn1V''@;'; put 'put ''QF5GWz9vd2JbfldKbVhMJipOKH5xTnxGP0szMHNuKXp0YmZnTlArWzFMJF5KL3RVcXBrZTBjYSombXxWMTg2PzxvVjJ0dlZhWj5Ecls2P1p3dWxRRUgzNFdlNkJfcCg9MHZuQGA3Zlg9bytUYEcpYlhWSHVfJDBnN0c8X2gkMGd6R1V7YW9YYW9AWXBnSyJVNDtGNnVxVVksdUc7dzl+LzovWiVb''@;'; put 'put ''Ol9ONG5jXl9VTl1FZFN9RjRvfF8rL28lOlgjQG9hVilpXV9VQGY5VFN3SDokVU85ak02VDk3LkZuIm4jemI0c3JxZUl4QiNXOn5UNz8uJF9bV1ZMIXppPHpXTShWYU0mfWBwJjJgcHYjY31pX2U3Vk5bVD9RMXMuTi4yRnpfT3pUYVhMR0EzXSlkM1twS2g6Z15ObVclX343KGQjNFJdbHtLTnI7''@;'; put 'put ''ST8qYkBfP3x4ZjBPfSY3ViYkaElUOE86U2Y/cTNscDBAXSo1TzUuXmw9M2BCPlgzPiNVPnB3SXpWfklieTJoTnBkO34rT1QpYUBAXXF1RWFxWVYiKz1hQnQ/bV14biIzIilxTn0qNj9rTkBhdkpQfmRePHxeUWJtZmRoYWlaX2pFRDFFL2NkM05qMjgmUzg6bG0hU0Y9WVRmYW9IUk1lU09ye2FF''@;'; put 'put ''flZaYnNDe098Q2Q7OXopelQzaWYyVGk0T3Q0fU83aWlaZzlXMy9YYFQldzxIQ2wsa1A2XzpdWUM5aj53eDswYmVnIXg1NzhGWiNgYl5BJkI6NDxbRy5FcmhAVUpyTSZMJjMqRGBwNj8uMjN1diVKQ1RgV0RpUnImQndqb3VoRFohWEVmWF5Ie1FbbjAscmdQZF14eHRka14mVCg3dmRfe1t0MH1K''@;'; put 'put ''XkFYKk1vM1lkR15YSFFlMCJ6YUdAdVo5QysqNj4kZV9IMUZGQSFSXnlyYl55ckFYU0AxcnAmYzRQKU88dXEjdzJmXkxsKntvKHcuWVpHWHl3eVtrXmt7TVBwNGlwST50YGg8JittPUdsQlAqL2BRN3BiPkdbWER4OkZde1R3OyxObzNZW1cwV09wUyoxK2hfLE85QElQfGdzZ35UdT8lN1VYe308''@;'; put 'put ''YWFMdCV5P0hbOSFwOTtdMHN2OnxmS2Z0KmQlN0BTVX4yNEB2dk81XTE1VW8lbXpddj02XkBtaDl3WjV8eWsqXiQoUXFraGw6eT9fJjoiTXFsKW5pcyheeFs0fjElYlhQPnMlbEdUIU5IInxsKT80fmg5UEw1OVh7PysjRzs5amkhcypDLlcrXms/ZiJRJVlFcX5gPmVmQUhJRyVFaCQ5LH43QCs2''@;'; put 'put ''OjtBTSpBL2JxfUcqJTx3emhqbkAmemtlY3VBX1Y7VkRyKSVHX0RFJDB+XUtxfU5xWXswO1cheWRmbnQxQ31KPzdzUjZgPmtKZWxRSHYjKHAkOXNlQV82VWhxbFlWMzE9PTREdUx4alZCImopfj4iblY6KitzdzhkaDw5JjRbMiF6VXBrfC5HLlszQHxhfTR2fUlYKWpMfUgkLGVscC9TfHRGMmxp''@;'; put 'put ''QWRubkBSb3dDYk1KeX5MPWJVU2UwW3cuLDl+PkhCTXBpN1BBa29tYng1SmFvU1h6RjY3OkJ6Vzxidn5MVmNmS3t9NlZqeV5yMCorPlJJWWlrQHo5IWZTb11JWio2T1E9MERHWWlaekNMfkg8XU1WVDlSXVc9ZF9oSDd0dTtVe1hCY0N0dnM4I212fUJ0MDBBX3ElKk93Yk0sWiVRLClhOT9RYyJp''@;'; put 'put ''a2FGKkxZNz1NNk5Lek98KCkoTUQqMSFHfCFNd0N6KiRyZlFZQj9RWUI/Unpla1dHWVQ8LHEzYGFPe2g9THF0SDNAQnxPdTpGXTcpd0hrelAwKV0xNWJiP3B4aEpDXnd+a2p9LzI4JlJTQDdwYnR4Z2dmY1l5TlM9fXxfU2xwSnFRM3kpejc5UDB6N2VVNmFqQzgqIVdhXXNFWHJ4ektbdDNjOVAk''@;'; put 'put ''Ii93KDkoVmhvMnFbZVE0RmVfdFBpQDJyNEM2W28zLl9lSnVyY1t2O0g6K2ssdnojNHtlOHVveittc0tRKWYvUlYuei9rPUhWTT9IVmlUMltqPEhRLEpiZGB0KSJRd0QoWlYwcmYqQn5oejFbY19NLGFDZHBPTU1tI3IpWDI+R3B0SFJaMitHc0dgRF5URUg1cSNKQzouMCx2YVI2WSwsSkxdKTR1''@;'; put 'put ''KGkuMEl3UGk2SSxfNSE3di9aPUhwTD9IfXkmWnwhMUI0eiNQTSxETjVqUUQ0T2ZGKT9tbnZpJUloYE9TK1l6UD1pVlZ+KU1TaTA3b3ZvelBTLD83SCl6aX1qcztMOD4xWGEodzdNLjBTekgrSSRTV3J3NEcmb0ElLlY6M2A5bT5jWnFEIz5wTzNzaTlWWi5EVz8yKi9TM01oQEh6WXt3KXdZMStM''@;'; put 'put ''THAsYm9yXTVPVVsuNEslT3wjTDsrJV9eY05OcHt0WnduZXQse0UqKyRqeDdIc2U2VGdnTWhTczdaXnxvWz9dLGUueixmX0pwSzcvZjZSXV5xXWFKOywma1tyZTRJXntJJFtwTG0mUF1vXjgsZlJZJnAhKEpKIjBQLDJLNClYKEFoMykhS09zaExHbG9jSiVSbTxIN200NTR+Vn1PcDVtZl9SX3tZ''@;'; put 'put ''NkdmeCkySitfRjw9SztxTFdYMzMhYnpXczdTVjg3c11iIz9vYkAweWA4YXtpK2lxKSV0RzxdTGtIS2gzXWtvY2JWflRERF4/flZGJFopXX5zKylRVSt4WTgxUSlhQjk7QGRtXyxzTnhwK09fL01dZl4uIyV8TD5lfWUzWUAzRH1lUUxOJWlKenJdRHksPjgiZj4+TDcleFN1Z35UQTMlbklMRj1d''@;'; put 'put ''VyQhND02JXxuflQ5STd4JkRaK3ZQJERQPXB1SGkvaSJITWExcnFTLjh3dHAoK0h1OTNicjA3WyRpOilLPGZpTyF6SWFFZnM/U21LKTUlPFsjR0B9bzxld2AoVE80UFZLSTQ6RERUWTUuUTYkNF0iWndeMGAyKFVYVyhLUmJvS2NCZjJ7WWtWW0s2X15CLCNkYEVeW0JBSWN6WSVYU3Q3JVh7WTx+''@;'; put 'put ''UF0hSHJja252SHwvfXh1dzx5ej0lZ285aV5pWVskYHlsXl9TKlVXI1BQTHtCaT02YH1fOHRbNjUrOiw4Q24mU3QhYHApZGlZbnxLOXlDXnRzNC5KMXZ2MmtoJmUjKWtYcF4iS1VpNmo9Rn1tQWNweDBSWGUmMyMufDhgcj9sZXs5b2V0IW90eiZwX0dRMktaNXEjc29zTldkbTJzInY/JXlVIj8h''@;'; put 'put ''S0ZVNmU5MG43PFg1PncyKVpHUmc5PGlTOn4xfkkvK119Iy9PYlRNI2NobFBORFMpWXJjfE9xUl9DQCwvTj1ZIV8vL0s2dVNYI1FCX1B1dn5KanUhKixlW1JuWmU5L1I3QGk1ZC9yeDAhPVBjMkZ7WT5FSXZUPnVPW10pOkBjYV14djxTXXtXYXQ6UUJMbjJuKXA3c3RmT25IdnlNLmBJQFhAUFA4''@;'; put 'put ''Xmo9Rjg6Xy9YXyJLPm45KWBRdnQ9OHciSTFfaCZdTDtQPClfV2NNJlVmTj8hb0lbJnc4NkJwaXdwbmo+SDRMNiRefjZ1TnQ3PXM+KEFWZFI1RjtUTTlqekp3aVVSS25MWWcySiVGSGYjWkwkaHQwKSRfQkNDaG9JSjczLEQvRkVBPU4kQmk2QWFCJGs/KT85O0VLSz1qO2ZPXWxad3gmPCYhWiEh''@;'; put 'put ''W0k6RC9ENkZTR3A3cksoREpXPj40TmtfcSV1NTA/IzJvfWp2ZiZSYypacjJbOTs6VFkwJEhNOXpeS3RJRiplSCMxcU9rKUBPK3tSe1tNRTA7MkVMMCZAcXl6ezh5ZUAsO0ZFfT17d0p3WChFZEkkMmdEYDQhKkBMOXpeOGBYIlZ8JF80JncyNzZPP2V6PEBPRXlbNEBHdlAuWVF+bUo5YmJQb0F1''@;'; put 'put ''I2thWlVmWldPQVlqIjROaWc0ajloeUJ5MHU8fF99MWUue3VmbyNweWdXQ0pCay5aWCklOTFxW2gpMmghQHJ1UzMvaCE8MSRUbip2YEo0JWk+PVVAIWwqa1RKdDVySWFxUm1lNDVhZmBoZl9mKlkjQUNwLkhYOERKJktKT0N4NkJfXXhBSFNJVzxoWkZHOkMvbWg0e2JHSkxEYD1POHpye1o/WnU+''@;'; put 'put ''bWd6cXhXbE9vYU5QRWlTSSVvaWh8RT86Q0s5JDh0O01UTUR2UX1zKlRUWDRTQX5QNm5fbERKPkVZISw1RGAwWFhEYEl0NkZLd3d5QXYjI3hUZWg3MF98Lz5YTC9WVldASjNMMSlffWdbWEx5S21fTHkoWEAjTEh4dkxFOCYsbHxDKlk3MFFdd0k0e1djMU1pdHYlISRwJlV9c0BTIiFeNDkjPSRd''@;'; put 'put ''THlEWHMqUzhCdzk5azBvaXgyNmNMa28lc2UlW2BmLnQjI31bYGY/aVpdKEtqbWZLPUVlLjRdYGZ+SU03fTgpbEZrZVAwRy5nYXp0Xl1QIn1UXj54STpIT2dqPklgI1BaWGpnPDkrcyRILk08Nlc1MGAvPSxoPGghSVVOZjhAMCVJOls8clR3L0lTKzgsZ15JczQyZ31maTE0SUt5TVRIY3RlOllh''@;'; put 'put ''XjZYYnA5QGJXRTs0R0gvZTttOGZgPTs8ZmVdZCxxaiVzOF1kLFBrUzI9WXw4V1BXUD1NZjEuIzNnTHVYNT5sVSUmTVg4bjlZN0RKfFByVjMxfUh3TXEqREIhOEA4PnpYQ1BmMU1tKmAjTmt6InpgSzlaL3FaRGRESkp9XzhxanppJjtCI0prTTR0eDt6VTtkLixsM3t1YzlAPWdhXk80dlpfU2lv''@;'; put 'put ''dGU0cD5sKWpPcC4jWGZ0ZWM5PmwpalFwLiMyZ31mfVBPcC4jdmxaXXpsYEk+bEVKPmxVMixDaiRNVFtLP2klJiEpMW0vfE9rLnFabUNVWEJJdDt6eFd4ZkU7eTxBMERUS2JJJDJnIU9oU3FeSD1qJE1ULERuemRoZGw7Q21UTmtefGUuS1VaVEc/TWtUJFtZRm0oL1IkNzZuZ2IlZ1R5bVFddjJ8''@;'; put 'put ''JkkjNkZPL1VxTlszUXEmZjVZN08xOTlJRmMqbCxGRS98M3NoOzRdTXxfRVltKkRSXigyKVlRfkNPMnJ6O2heM2pQa3gyTG14V0IhSz1IdEFpUitrP19IO3ovYCZ5OTkwbD49PyU3InVtakEyQV9qVCQ0SEQuaTxhV089NUl6e1QkbntUJHhZVSRQZVptTzRIOUovciRjYX1rZGFdZiEmK11kLCFu''@;'; put 'put ''IzxmYEBmJExmaDUwaHBSNDprKmUqTTUwNjBScyU0PUtEIzFPYV48JSQsMnxIOXdjJSFxajEiOVh4ZSxbVz1xbS5aP2YrSk4kSDlUXlFmTCpqNXptZnk6VT9KKUdEOVlQQDU7R0w5JTxUazlxcG05THtmfklET35IUS8kJj8lSXY2IV48dDtjOTFeJiNhdGEkbmo/I01NSHdSci9AZSt8LzVYPyFl''@;'; put 'put ''NFBaPndOa3dNe3FnO18rQCFJRClmMDAvIyZSOklFVEhjOE5hXlc9TCQ9a2FmODlnaDgmUlg4Jl4lQ3A4PEUyOTl8PERKOGo7Zntxem1LOzVEJTgmWkt5UT5aVFJyfipiJkNnem1pe2dBKC9aVFJyU20/az8rbDU3e04yLkhYOFUuR2doITYjTiR2bF8veTxoO0gjamUxeThROSM6TSEhT3JeWCls''@;'; put 'put ''Mmt+bSpPKWx+bTIwekREbGsxOCZhfUlVK2NMKjV6QEhdMjVnPE9xNUIwajddJWZldlp1NFZtWyMwIXZaKCphJEZYeTAjJjFsZSw8a2Rsdzt8PShsWUhMPVBIaG1XJDJaZUk9PF5KUzhZbkspRDI3andnTHVxfShKTEJSXjI9XSNkdFA5R2QsVG52KGlabCFwfDNXXmsoVVQ0eGlNSyglU3BbYUVk''@;'; put 'put ''RU9gNjAjJjlkOiErUUZTTDl6R01fbGZ0O1V+WHY5Xl1QMnNHODpwOFk5KGtMcUlhJGQsfWtjO1V+WzV3O3c+dmRzZXlePEwvNE5oPTtaV35rU3NmalUlZX05OHk+dmR4O1V+U2V4T0VnVWZ6PTBvTGVSNyt5Nmp4NGBmNzBgfCEvVjBNO0M6ZSE8MUl2ayRvIWBmalVlTVR9STppPEhzRWx8ODk0''@;'; put 'put ''Tns3V3d2bUNqdH1yWS97PmY7di9Fayt8MEU0dD1oY2NJc2ZjVmgubnt7ITl2bE87aU1KTFF7OVFzJn0hZzslJmBgPzxaV2RnSXN2Y304d2xieyghZ1c/aSZ+QlNHKGZgZTR5czlSXShYanM0YGYrO2ghQHkye3c+UFB6Mi9ZdzxIfWhmX2ZsU3FqRTsuXXFqOiM/JTZOYV5MXzl8OHkhOXtmXytm''@;'; put 'put ''dGxiPTtuIzhteU0uQSRIRmQuS2EuOWxiKyVmSDJyJG4wZCVDW2pGVER3PnVvbnt1Y2VUMiwrQU50Qj8kbVklI2RjQ1Evfld+az4rbDUpSCRNeTxUUDckNWdoXVM9ZDlSe0hTUn15PCtTU3tIU21IWW5AIyVsXWY7dWg7UlhxVVZuQ2gyMFNzSmc2am4jdi5oJmlweV5XUFo4dFlGJlE+dmQjcEZk''@;'; put 'put ''ajVkaD49NiRPa2A9KmxJN0sjQXZdamZ7TiQ6WXxxP0MpZj80MEc6LCx6MVlEKCx7PF0jMTxmK08zXVptaEtDcHVOeD5ZOEhDRWd3TGEsbS5qNS5JXntNVF0oNVR3eGF9e3A8cGRgYF4hblkuPCEpMmNEdT4jZCNObjg5SXJteEojbk5rJkpIIz1FTztqNW92JmMkayUrUFRXOGgjPGZdIzN1OVho''@;'; put 'put ''TyMxcHNlOkNNM0pnOz03XTV7KlFJWS5EIU9bVlcvTWFsQ048ZmEuOWwycW87UmAhY1Usa0dlaC9NWysuWSJJMlZmaiVmJSsuI1htIkp+IyN1Nk0iRHQ+QDRmUExhTmsuT1dqez9CZFtmP2UqWVF+JVteOF0oO3kqWW1LcXhJNyopaFJdOkdNWV5XUG1CaDUyfHd4LHpyezUwQCtTfXdeNmBkLlc4''@;'; put 'put ''PX1eZl0jUUArOGhmI2VIIyErPjAiQmJlKFpNJF9GZzxiUWEsNkw4cXRpS35TZTZeMmo4QHxDUl5pSk4kIkVbKyQpfCEyc0pCL2ZbcXplI1o3akoqflRpZXw4QGZsTyhzSDNOS3ZDZlk3YGt6JTIkK29ibE9mWTdgdShvYjkrQjxDImNHK2hEQVhaeVdNbUJ0OmNEWTwrbVNaR3V4WFp4Img7ZnJ1''@;'; put 'put ''eEojSndFc0MycSNtb3F4bFVYWit8X0VxaGAvVjI2Wl9bRlo2NUolfllvekRUbD8seCxGNzZANTM6V011YysjYFt5eUFLa1BZSz0jKCp3OldFSTRqMFApLkJFRUMpdihGRXV0MGttQkVFRGBoMnhVLik8IXJeOGU4UVZLTHkwRSN7I002IUF2bW5TdVdbVldqREgrcGxlP1NLNTBAKzlkTnlLWWlE''@;'; put 'put ''R1opWmdSU2UxeShpL05zLD4xcWxyJSpAZStIUGt0Olk9NEA1TzEsU1NEZ3Z0eltmLiN6bE07VzhAZn44dHo5K1E+anI2TmFeOSF6c1dXcyo5VE5rMyJmakNNQz98eDs1fUU6NypAOHFXUEg9cGxMRz1AbGZZL2dYXnFfalJHR1M5VUt0KCVnN2Vgc1V2dStdPElEOTF6QVk4IV96eHB8WGptWyN8''@;'; put 'put ''Wl13KWpSNWwzWlJ0JjNiZGZJWjdsX3pQVEhjYDxhV189RlBSODcraCFuYyFTcSs9JD1rXU1tKiYpSFNgbVBec0xjKjdYcExfZiw0QDUiMHFsXmNiWilaSFNtMDVSKzhANURKYyYqbCFOIkRiM2skbWp4ImJyUGU0e09jUzEpWU8yZ25AI0ojZ25LfkhTZWh5PHIkX209T259T2t7TC80eWk7K1ZQ''@;'; put 'put ''XlV3Ty5aYi5JJDltPzF9OEUlaDs6d0U3Pl1XUGFQNzp7OCU8NXtzOm1TP2ZEWW9gO1JUSkZrZXo8aiQvJiF5bGB8OFBIbWFwej0oJWZlQzByO1JeeE03PHloYlo8ITBHM2pnM2pUS3dHTVFeOGIhTTsrd01sWmU6NGJ2NW8heXMrXUlVQmJvJE9raXtwX2dHdS9HOE03d3QoaVJFeWV1LGdZUEs5''@;'; put 'put ''VE5rVSk1JH52ZVZvZTdqd2dTcF1pRG5iLnl2Zi43eEQiazpBbV54Ty97aS54S1RrP0JFKV1fMn5pIlNyQFc+Jj09Q0liUFh6RU9VOVNzXylffGMqO2dBWENuTE5UQ2spemNgRDNddl0reiFYdTpzd0tCK11+VjlvUmgzelt4N3NRTk0qRnFJJTVzZTJoT3Q9RDpXeyRfSEhbMFJdSFhGYDZ4fXAr''@;'; put 'put ''TnNAITtWMTEqdipfI30uPUxxcSs3PSwoODhFdmxFbjJeSXorNmcsS1VKY0o7WDApKlY/NlkrVEhdMzF9UlY/Y0I8OVomVGN0Ry9vMTpiVEFXK0NPQmVCKlkqWGI8eFRJaTdhbDxWd0pFc2tOPWIsJjNmN0p9a2BsYSZaSTJYT0lXbiNeIUtWampSNmEocWBeQyF8aFlTLEkrRUR2WGVUcXpCWmF9''@;'; put 'put ''XyhxKz08KUVvUkdeTnBgb3coYTpuRTZnKzs6SUB6cjRFailAJjpoQ1dUa10zYXZPS1M5UW1WbCQwYD8iPz0rdi98W1pWOHYjbDIiP3M4UzRTInVDSDN0YGlPPmcrYFcmVHwzPEVpVnBaZG99X3lUN1QwU0xsd2czeHJFVy41RVpKPEpOMXRgfFR+YlVlYzVXNXx5OGpFInsmL0ddcm85UXh+clZq''@;'; put 'put ''PF5vc3RCLGIhOGFOXVhOW0lwbkF0WyJAcWBqaVsyRUZZcW4kNEt9S2s9Z2dEaVJbcm5IdTAsPipCK3l2YkEkPXZoMDldUV9PKW8ocSw+UUI1ZXszUUJzbUdDZihnKHFkI2c6KDA8PztrJDh9RSJSQn1paVVPPkNLZSs5Z25WfXY1X3U/YEFyaDNFRHZKQC8xZHl2c05vXVZzUmNVQ1VeZVo9UXdG''@;'; put 'put ''eXViSilDYG93KFM2YTVpOj96RFZqYCs9enNvRW99Ry4ydmhEOj1xJUcxZSZNb1M0U0pQW1RqJlJocSU8MUI2SjRHKVA7NyxhQ0l5dWI3PDN1OCxseFUjZWtqfGxoZ0V4SV0kdHxzcX03NEo9U1M4LlYvUzQ8e09LX1BDQitve0d1QWpVcnJZOHRBe15MdXwuU2RUNG9Fb317My8/Ont7LkxhM1N5''@;'; put 'put ''WV1WKGFeODIoaU1BOTVyNGRFTlMod1s0UClgQEd4WGVgLFp7O3RYK0xqNHdhJSsvKkpENjFATHJEV1YyUC5vW1pRayZdLkhoVVlLWzsqcDYkKmgzVHhAank5QEooNUBtTGphTSx5eDc0U34jJjVHMl0vYmZ8VVZZbGdlUC9lVCZ9RG9ZRnptYzFvcFd6VkM7VlczL25jc3E+fXNPKTVdTm1McShD''@;'; put 'put ''LEQzKVIiNUAmZERDPF9wQGJETHJoLyZnSig/XUczKylvNmJMbnc+elBDbEA3OixWQ0YrSk9ydkUiMnV4ZChLOjphLGlsNCwvSiY9TF0uVX4zNz9RLnJ5NzNgfjRFRUw1aVAmcnMxNWpnYSt1WlVaSXg0TWksITV4WUNzfFsyNDd5bkAjPjsxV29zY117MTZ1STQ8dXc3djtfRk9xKXQhRj02Z1M/''@;'; put 'put ''XUh+I15wQzxfdk5TI2U8LkolZ3EiYWNXIlFYLj58bSRbdkV6MzIxaTRtOi5iUiZ4Q2FEWzR4XmB4UFRIc2ByUjQxN0U2PSI5dDFQLlJde1Y/dzR5blA1VSZNNjhwL0oqZnsySVtUalZ7dlJ3PixOQ3RDIXZWRUBoV0VXLiJwe2EkV1lpMWFqNXkrKDVWMXZnNn5LS11CTmI7UDZxYE06YCx5O0Ao''@;'; put 'put ''Rz5Nc0Qqd3MueyU/W3BULHlWPzFsZmQlPyMjfF5TSWY0ekhCVFhDNVEwQStDNWlSb092bjklYFJaNVUzbXguUCtWYzRAfFZ5WyJHem9hfn5xPmZVPXlwensxKzMhaXBtcmM9Rkk5Q1h5Y3gpSF05RS5pQUpvOVJ5WUNFUiliQCY7fXJBUlk8Zll4PClsd18/fHZzJVkxK1hgeTwhIVpQOHIkfk98''@;'; put 'put ''cygxPiloMGJlNkg0elFIOSpPdyxCdUg0akkuWi47PzZ3SG4pJnFgNyV9PFY3OGVzKFsrfUNUUyp1ITgyNmlYZj80VTVkQXsoITZKMjgxUnJmLmFHd3BHeHhYbiRHdWQyTlJJciorcFlaZXlTYnBNW182e2VecTtmLkRyZ11yIV9bSkYrVyoxUXJzKXM4LDFLdyJXQUZFJXpgcSVCciJkZnA4VFVN''@;'; put 'put ''cFZwKVI/VCxfcV5LTlJNZGdpInopOHx+ezsrKy4hSUQvVkEqOTc7eVBNJWNGMH5QS2VTfG47emdzdWYwSVBwVTkrfHZNUnR3PG0oYW53XiN0P3haMEd2WGVXRUhGeDhJRVllaFNZKzxlL15jK0lGZ3lFJkxQODtHYHBtVEVzMXYkQiFbXnVyPyxyZ0l1WjBkXW9gZSVTe0QpWEpiaTZvWGV4RGhp''@;'; put 'put ''aGFJTGRDSF5IayFUamBxP3I6Oyp5LGVEQmM3bXVuU1V6VHMoZEc9U3lrKjU0byZxTipHSmdwTXBSNjEmbDFuYE5ga2ckYXlbdHNPfVBNMEQqfVhmZWkoaGAvfWdJJCFHNipJRGwua0lyJmEqUyglTSx+aHpZOiVNWVczKll6RmRFKkB5LHxzfH0xUE1vI1M6Q09zPnN5NSQuY31rLGBQWiZoa09h''@;'; put 'put ''PmZTNy95eSxpT0BSQyx9eFoiJG5gR351bmR8dCYqOF1+YllVZGxlP3lBaUM3dEV0UkVoZGBSPmNaIj84aCJ8NnVkPHI3QU4kQlZqW2I9KytLV0BrYiNPdiZxVj1JfkpCeShxSjM5O1QyZl8rdDRBc1VTI2B0Sk9lZkZOfHFuViYzRkdKYW1JTVhTPEUzaCp3dSkmOjRIVXBAWENGMjB4MEo4Snow''@;'; put 'put ''VTdkVHhgdlN9JHJxWH1KelpYIj9eXVtyR3VOdS4xRmVGOGElWXMoVnIjUWhhTzIpJWxAXk9IT3ZRKGl+QSt7dVNpcylEcGZObSM0UnNrbyg3M3Q7JkReQGx+VGY6M29gOSRqRCU5WnQiXnVwZ2dweW9HZDskV1M1OW9pU2lBQ0FBQWZES0FsQnxFZUxlY2UhfUE2ZCslT0sqQklJRixyTmFVXVJ3''@;'; put 'put ''ZjMxVlglKmEiSUFBQUFBQ0ElQUMiWDYoQSQlbSUvKjNhUnJKbzJ1SE15WCYkVlhXLmZrfFB0dER3SUpFQkFEckZTakhnTmFFM0J5dlkkbmI8c3Z+Tmo8U31tenEoTHUsW1ZYKXMmOlZOVD0/R3N+TkltYD4zXnUrfHkwUmkqNz49IS94MzlTfE5PTkw0M3syI1syRTliUFYmZjNlQFJXRSxyZ2c0''@;'; put 'put ''JmcpdmYsLEUhXmVNY2g/P0pxX2NNZXcqQXIwem5XRHViUC46bTIwIyxFfUFoaFFGV3JiN2E0SzMvKVZBNWJCN2thdGlLZlYyQlBVOmA+SCMrN0IzeUIiNlJdQFckeFNseEw0T1FpfVs6I3p6azptZDtfb2R1aE59fH1se1J+fSh1W2s5OjlrTSJIOlVCXkw+IUp8UVpWd3QrPjZnUHdiNUEjcU57''@;'; put 'put ''c34vUX5hI2xBKmA/bTp+NixTKGxFSTFOX3NVRSF0IURlVCxnbkpWbiZZZUshb0JycitJOD9FRnxfXzBISW45OVMuKV8/SCtxMkg3UDdUKS9zYkx2K2JEfVNHSWtETVUkeGw0OGFENW5jVWFNQSEiL1AmIXN4TzUiczp+ciwwaj1OeUwyV1hjXTMzYmc8a3NLVnlOQ3piPGtNelc+U3E0b3Q7OzZa''@;'; put 'put ''NXpNWiU+U0ROJjxLWVl1eSp3IkA5XzU6NTF3aFtrOXAyO2pjYGs2TCFkQFBhUDVRZ3V2PF8pUz1tISIjTCg8dURiUkZYQDJLRkFwSj0lTCJfdzlMZSVhSHdadmA1TSlobDI1RnJRPVB1XzNUU19xaFZ3Zzl8ImkycTBJVXNQRlgzRWo7NEYiLiFTTDZiSTp7YmglRyo4b0hmMn5zd1tDLGdGKk4y''@;'; put 'put ''TF9WJilbZFooaiZ7TC5HO1NSQSxbNyF6Y2YrbUxXVH48OGA3c0ZOcSpVVnV9NSF1bjhkaUdyeThsdXNJZyhqLzEwbGBtUFE6ZFpGOlRVVUVEcnU4Ok9KcHMmezAkbTI/e09uMU85d1hFRy9eKCZEW2lhTCZaMFM7ekZ2TCs6cTx1MFFwN10ueUdpRjYudHE3SjZpMiMsfmdAcXMiJDEvKSJ9PHhv''@;'; put 'put ''Qjwib0B0IUFFUD42KzVhJDEkdDh9aTloSzdEMFQ+ZyFEQltHfWYpXzlRMDcxWy9DUEhDYl85ejQkOyxAc34uRmpCQ2lSPiVsNit0TCRPPno5VnohU1tOdmc3OkY/NXZtOG4iXXtzU3xvYH1MdiR2azddMSlJb0VFYW5aflYkZ3xJUnc6PHR9OUpESndDakBCak48bChuPUQ8IlM8ZUdeLDBaNGBy''@;'; put 'put ''K1NiZGVQNSNHUkQ4aV1PSjguey9JTlksOzJtbCk3VCYmLDBiK19RbnxxSndMcX5fOVRfXXhZQWZXSXZWTzFSMSF2PlliQFN1PGEvUClINXQwY0g/fDtVZVJyW3V6VTg+NmhVeDoqO0ZOUTtRKV1RfnxVWlduTkczcWddIU1wSTVfJCViI1o+MlJ+Ri9ISm4oZmtfZU08RXolMiE7UERPP1lUSGs5''@;'; put 'put ''STB1XX5qTGwmVXkzOzxgYi4hNDZALiI+Q2VRJXgpJSpXTCNUaSlvZSRYVy5IJUFXTlEwbTxyKTBPPDo3NV9meFJ6JS43VCpOOGRbPmA0O3JNa0c7fXd8MmJ6X1s0Q21Zd1pYfkM/YDdSV3xhIlIifTNPJEYwUyxvR2BTUT8qdDdUb0lDOGVLLlZGZHU6Km9kXnZqNTNocVU4dld6ekdmNzdPe04y''@;'; put 'put ''Iy5mcCtGR0xWL2xnMCNlUldJYWduYnFgT1JpLmlzNilIQE9ud2pwMmJSTi85QjpBJV0sQEQyTnFoRVViRD9JK0ImZXJOZShdPGo8dFBCVT9PPUZoRmJ0QjIoQmJrVjwmMEVqeW4iOTVITHFbMGVffTkvdm0rTnkhJkM7eTQxTyk9PnN6dj1NRzs5TCEkdHF7YXlxSHRBQCR0N01gYVppeyp2I2E9''@;'; put 'put ''b0F2KVhORUwjLmomd0MzaWRyQUxeJm49aU5FRXcyTTEqbkB5N1tuXTwzS20yelQ0eUxWc3VKZ3ZgRjZ3JFR4TXpTYntARUtEdUlvfXZgZlA+cmkpOElZbF9JRWByeDdgTFZXMCslXkBBaHdOdzVjVD4/emg8LD9uMHQ0UWY6LEJuNVQ0JHx6RzAuWzZTdC5XX3IqLmpCWGpWSTQ7TiNaJH1YQyhg''@;'; put 'put ''XjR4RyMzT3FZb1VDYHtJdi5TW3gkOF19eC49VFl9Rn0kdUoxU0tbQndfYV0qbW0sXlJKLkEiUFdtS2x6RFhDWzEiVjRTT3BraXFhc01aISZmUC5SSF1YLnR1Zyw3OyFVdC91cHx2VSUhTmJkWU8rdU56ZyZwe2Y+a3hvNnJqWyMid0Bxc1F4PHM5UCV7XnEkTiRibT96S2o6JnpxZmlVTGBMY3RO''@;'; put 'put ''KmRDcHJePngwcipYdDlbN0BuZFdWb0laUVUkJTMuXlRreXtgQDExSyxfUnBMdixLP3UhVE5gWHYyN0g7TGolLzs2UFdDWk0idkVlbnUhOj9PLFhxOmIvc2k3KThfYiszaF16RDB6WyRvJlhqcy4wPjRgZXhIc3xdKSNifk1zKTFfd3JdS0MocCtvY187IWwsOnpjcHxreXt3N0lUNyw/fnFkLCo4''@;'; put 'put ''bG1KLjpzU0FLPzxAX2hZc1NpL3ZNRS9oM3lTJHFHVENtZUA0JVBRYiJ8PyRdbWpWUU57PXtCPEE1aDlkdFVHcVtteywjMyk3XVdEanxYSDZYL3BEd3pbdWVXd3J2Nj1NXl54cGZZY0tKYD5KJGs9X0JMI3kqek0vU3FGe3NJI0haRTQjez5rdEpyL0Y/PWpKQEJ0WGQhb35FIm1aSTBEfmlRJkAy''@;'; put 'put ''IUdxXz8kayhOREYpcihwUHp4ZT5qKnJRRDZ4YjAkUjElSXxRUFJFTX1HJElHQTguXkIiOnMqPWgxdTBDTmhRWyEhaDM6OVJTKDMhJSJsOSxOaVN1KEAuZUV7I0wsIWxufX5DOCtnOkg1amlNRiEhSGJrPWArMEhedz9ebiVPUWt+UzVUQHIjXzVfO210YStHNWpUfE98NXFNbGxPMH02KVhWbEds''@;'; put 'put ''W2s5KkMuTF9iI35gMiRnUEAlS3pJaFBGNX44QVZONiM4NFF7SShNODxRKD9fP3JySTYrdT9+RDNtWFAueSh7YTUiIVs0RjNjfVd4L1RuRm47SDVkMVchQ0hYSCE6eDpnNUYpSUgxITBrIT59TCZzeS5MNk4sZnolU0NnTkJCPT1CMVIpSnglUjVgM2ouWlNoI25sV25MRDhOQUQmOUV4MlhjM29d''@;'; put 'put ''aV5rbGZXZ2ZIOTRpenZvJEdmO3JuWl06VFtbT1ZkJnNVVj9HaHlzWEpvI3dwbFQ6QCZXY3xmR1csfE45VVBNVS5RaWlkekAyUDdHRFB1RDM/KnthaS8zLCVPQkdtM3RJMmJMITpXSXojWn5ZUz5NeD0kN1RUUXpCTkxaTWhRZm07RWBKJGswSXRwIXMwTlFnQVhpMT15V1NxUi59dElLbz5Mb308''@;'; put 'put ''Yzt0Y3l6Sj0oPURwN09LPTtRQUA1QmswbUNtYShGcjV3ailCOzk0Zn5ddSYrcTBvIUZiJWlwXV8kSF9ZY3IqQj5XXk49VV9CaStfQDwrWn51Z2sxZWwuZlRSRkpiQXkxKTM2O01KQExNdihNU3ZkVEdGVTE5azxjRUs9Im1WNSMqdXFvR0Q2ITB5ck82LG93alFnNkhsUE98elkrKld7OlhfdT10''@;'; put 'put ''fFQ6JjNTLHImYS84OGNhV2t2MTV8blFvfippOn4jXSMhezt0YkJ5K1hEd1tqOShkRzYyZDgoUTBIdzQ3RzN9cnE8djUrM3x+PDdGI1lrWylONENlK2FYe08zaCMhUG12TiZNbj46Llo+ZkxLeDlIRDB8MHh8NlJPZFVhbDJfdEgjeHZDZHQ+bCR+enB9c0FgUVVJLjBJS0g5O3U4bS85UXRWNFk9''@;'; put 'put ''QTA/eWZTNztSbCM0cEx4Ik1DMm0sIzNPWWx8STRPYSpZemBCMzo7LzBYS0V7M2NeMXF6aEVXQnozZFZBYFM5aVhuNHcxN0VnbTdrU0Q3bFMqcENTQEUjQipqbGFNKy8pPSJJc3RifWVUMi98d1AyISNPKEhFUT1ScCZ5cn4+fT58bGdeVjBjMnNMcmFzQ2g9MnFGQjxWTSJaW2JGfEsyMWBLfCNT''@;'; put 'put ''S3VOWTE/bUlJeT44OFY6OG1YTE15ZDJlRSpxKV5HK0h3IXpKeG1VKUtjQixoWihoJnFASyVxeEtIdS4lVUIqWCsmW2Y5PU0zTiJFUltOd2kwPUZHYGhXZ0w7MT5rNz5PbksxWkZWeSF8K0wsa05uPHFldmpqWzd0Ljx2JXheJkshQW18UiV0eUBpcWIoOVopPjFGdmJlcChZZGBGXW51WToxfUx4''@;'; put 'put ''WiF0fT47QG9scSspR1BLS1grRXhXP3htKCRjfShAcGVxLHJMWGY1NykzVzkmViI0Pig1TD83bTBRLHtkNC5icVA2SU0hall4QjtVSmk2Tll6dEZ8Uj9oUX0se15ENm1NVHVwaGV8KkBvT25qXklAb29RUSooS2QkbF5ra188Y3ZqRWlUa2glPml6KkdSfU5uS1VEXVtrdjMkQ19mPW52L05qYCZd''@;'; put 'put ''TSphfiJtXnBNTm0hXXQ9aFYxVnNCejhVZyxFM3lSKiRFeT5WeURuWXIpcjlvW0lRI1ciJnQ1KEdzSC5Le2F3OyQsUFljWDsodyRrJUEwQ1ArZEg9TmYjRiloVGBCOCJUMytnOlBWbjkye1cic0h3WGo8USMmOEJ0YmI6b0hrKzY2UC56bCV6YD47M1plQEM2OXxZLnY7bTE9UWhCQUdpTUNKbF1K''@;'; put 'put ''eE4zNVZCT2JhOk4hPEZpJURxYHk4OWI4YGl0UXZ3Y1creUpXTGJxaiFIWlZnNXs6TCpVaVMmfTZlcmRJZEJEczAmWklPYUJKKXlAKyFqeE1AUmw8UnBpWltlYCFxUzEuR30wR19DanA9czpgSj0/OExkWnBqKmsvI017SSF2Pnw+c0JtMVZtaj9USExCWnpgVENnWm5pfkRhOVZ5OSMyMVpWKEk3''@;'; put 'put ''M3lUMDBDOUJ+bWAxODhAVW41P1pUL09RP1VhTXZWWnI6KDkle28pOGpwPUplKTEmQUNwSTUkWjRrTFNHKG5KV3I4dmJ4L2xmTlBAQm12T0RRbyZNeCg/V0l1U0d7cDRaY01JO0l3NHBQKS56ek4rbmVycHJoVFRKYX4rZSlrO0NaOjxiSipVO15oMFNLTkFuZkJEUnZyLyxDXUE4UGx1WSw5LGo0''@;'; put 'put ''RUZkI20xWHFEPmQvPl1AR1Y8TzpfR0I9OC5eTyg5Mk8uYjZtKSkvO2hfU01vSU9yM11BUT1LalkoQDMoNTN1WWEqUntoYjkrbm03ekpRYVFgIzk+N0IiY2F5SXVZIStYJTIiWFZRLyJQaFQ9O0FWMDFROUFhI2Vrfk1OT1ZQMGcrZUU5VCM5b1lweVU4bDIyczM1JnFMMGxkYTVXTnQ1TDU7VXol''@;'; put 'put ''aXFPOTpmJkB5KW0lM1hnSiZJPypgLy5qLHRkYzlQLmlAfnE9dHJZUlMsUVZVS1pOfHR7N2YuQ2V3KCsmL05mRSxDO2ljPC4xZixKREUyV1AwenhrYyFuWHV2LjVHZFJEfHFdeEpvfTYsUD0wLDNyUVF6eClEelQ6Vk9IRlg/Vm9scng7fUB4S1ttQGNwfS9SbWp4SkYuaiRxeFBfUSJkM1ZUJWZr''@;'; put 'put ''KHVUKkoxeEpzTE9ETXEvcmV2djEhT0A3VWIwTyhhR3BgUElNOSQrbSpbMk4maDNmZkJMNy9qLE5bMTZlb2Y/clolNW17WjYmLzVRTiM0ajBdOTFRb2lIdFdSUzNATnBKZWpsTmo3N31FWCQrUngqISgzO3V1ZVQvPF54USk1eWl1NVEoRGdzSEN8VGdRKFF8K1BybGNsRHZwRzIuIj4odHE2NUt3''@;'; put 'put ''Yl1GWUovJnZ2bF1+ZHxFUmZ1U3ptMCwqdCpeJExtTC9EM3Y1UTVoMilvIWt0WTt2KXJ4UF5udDNhX3ZuTXpvZCU+ZF1PVzM5UWpyZ2ByRVYjfnd4cFIzITY8KCltellDZl5db2c6QzZ3OjFFWEteUWteNSEzaFtbJSRaUkZuP3I2RG58NmVQQ2JfcUd9ZXdpZzBSUFAvPlgqIithVCVqbyJTPkV8''@;'; put 'put ''V29XSXg3YEA7KTUrIVVyJD1GJl1iWHZmaTdTeG5WMmIqWTNtMkV3P2hNIUl9IUUreCM6eWFaJSxyflpSYllvSU4zP2w0WGV9LDk3OEdmXnxQZiZrNjlMb08qLnxWPllMZTBJYUp4eiU1UTJZQllJTyUqfWZ4cylHTztSeTJ9cFUpNiQhTEdTfU55ZGdkX1I5P15tYz9vcGg+Yl9LYWY/bkI+PmVJ''@;'; put 'put ''QTM6Y0l4KElrPEBiZHtWWUAydkV7ITEoaVJvMmtZa3VATEIwXjt0a15PbW8mVksza3ZtL2d9cGIoKWgmJl82cUJuPCJ5Q1QxZFg/aixsbzxDakB5eTRjSTMme2ZUWV1sU2hKM3JLVj9ZYn1sSDdiaF8wdENadkA+KWJoOl4xOFlqbk1vITlTNkVLOU4+QilEUChbXlY9MEtwOTp+cTJYSGZiaUxR''@;'; put 'put ''VkJoSDc2JSFuY0hjY11UY3RTYGp6ODl1LGpqR04pZkZLQTBfIilHRD9iUmFudzZfSzg6QDRnX2V5ezIsZys4OF5Qb3dsI1h8QU5LSzM+PjFgIVpKU18wMHUiSEBCQjhqbEBHTyVbWS9XJE98aHNDcU4sPzsiNy5wWjZkbE9BRU8iUmZoKk41b0UlT3RzKjpbWT44WF9QTEhNVnBlfExLN0s8V2Zh''@;'; put 'put ''PzdPRFJ4SEtpUmtHT0M8ZjJFZ2VrfXxLKjdNZjJZQXRbRzsuOiZFJkc9JUZAJXtZaStaPyJzW0lzMVAmfCJSMCF+X3IwOW9AXzxYb25ZS0s7Jn50Vy5MNTUkN2huLDZdSTdEXzBxIl9SNzp9RF5CVWBDZXhrKFVWWVskUSU0Tj5ST2R6Tns0b28oIighaT9FZEpKTFFUfk4kbF9nZDc4S3Z0TzJQ''@;'; put 'put ''JDZnSiJ2ZD01THJsZnRwcW4yTDRHT0RGUk1xQE53LDlyKCx6XTs2Ynh3eDU7cWEyZUpiKX5WQmRiK3VGY2FVPzMzP2tAcW9EeVc0ciN0ISVqRTFNMnNqYHxGJHkkcShqc085bypdUlZoYy9BbVJ3NSxTUyM9TyU1JHYzNSpaKV51Zz0oIVh8LzxJckoqWEJ6W29aKjJBcjZFUihmd3pGZlFuW3Us''@;'; put 'put ''U1ooPiVgdXouOEdrVywwRWVQSlhtV3hPPm04Qnk4fn07TiNQZiNVJWJNWF80IWxWMVt6TUBMeUwkSnh4TjltfDEhLztIdkxge1VTLkZzaU9fJWtybz9JeWpXMXZEKzJlQHRWS19wOzhZLF1gbCw+PntALj9ddX53PykzeixrTEdHZH1qJEldR0FiSXpIQThXMHVNSzdqOXsuUmVfaFZuVWJpZzMj''@;'; put 'put ''SjNQTGZdZmdXJFhUO1lwK3lgSVZlRFZMcDtXQHY3fGV+fUBhPUExc255Skk7WmJlWWZkRF9YQDtGXSl6UWlrMmo4UUtjbncoT2M2cFIlcEErNn1HaHhoS05iX1UpT0ZHSj1QQjFTPTxST0pOZC9jSFZiKSRaRT5RIUZqTjYoMXBFITI6MyIoPlVIRD1bZjdAKmMrXURtX2xSZ3MpYUJsUS5XJmFM''@;'; put 'put ''I1l4WldveTlZYSV7KHdTeFM/NT1JM3BZM3YySyJTZGMvK0A4Q3gpcEtFZE1ZN0YoYndHdWw5JlFCJEVzIkN+eUAkdkJ+aHZDKlNKRE8jY105cXk/JiQjLz59TkhzaGlVZVpLUyZ4SyMwd3UqdFldQHRWZmU6X0w5d11bQ1BLdDIkaWwrfF5VdzdCLm4uWy55TnJ6emZhakdjSjR8JDt3P3ZrSD87''@;'; put 'put ''KmtnKS80T1phMGBAfSFCXXNjQ3JwZFQlZCxbeFtqUWh5QWM7UXw3cFdnLFBPZEhXVH41QiVYfjFGIlYsWT0vajQiYzBGTUZIfmYhaTBZOjBBKkg8KnY8P35pWFZDRFNSZFo9NjpfKUNnOX5oWH1mS3BPSiQoRERpczsrSU8jUEt+ZV1IY0xYYl4wLiwkPTF8YE02RUIuSkMpYTskMjFoPkQqcnEp''@;'; put 'put ''N21ReColPWx8Zn1MdVNdIkZVQnVsczVgMjltVXU/Qm4yRTxuMCNnfXgoc3JNKVlEdzg8Ql0wZXU0YmFeVEk/aj4kc2RbOjghOzcqTCQza0UrbUw/ITpfOTgoMjt0ant5U0pYcjBzRHhtMlFZVlJRM0tNPUZUSWUzOSZKKUNhUWd8bDJPK1lUYypDYHkzY14/Z3EzbkE1aGpyWkxQNT1VJkN+PXpZ''@;'; put 'put ''PT11WS58aVElUiw4MCNjcyE3I25FamFbfi8yb3xoeCheIyUmdFpTOkhybTBQWS96ajB1MVtNRyI2blJIenM/YVAvfkQwXnEhZFN8bEljLjRfXyo7RDsjSF1bRVBtMTZXbTMyOVVxaTFsQHF2WVQjWmQrISxDWjxZSU5ldWpdLlN0Z1tAa2xAaipHWkZMOXlCNHgqQiIzS01NT1EuaWBtTGwvcXQ+''@;'; put 'put ''QUpNbSl2KTJDNm9XSigwPW8hUCU8Vz50UkZPLmttPkM5eHVAIiQ/QSRzOm9VO0BVUExoUUpiSzVmXm02SExOQ0pRXS9sbm1VVUpVSVlEcEMxPkp+fms7cXY8XXQjPyIsel9VSiZeNjtvJExlYSZHOE1tZDlkdihiNkY4W2xNbG5DQzJhKjRlMG9lbH1ifE9XXmB0VFQ8QkU6V0JVXW56NFZWfFRe''@;'; put 'put ''NGl9bHBMLzx+ZD03KlRlOGRnZz1NVnckYGtDaVJQSj19b3pSWkR+cWM8XWJLbXs/YUxIVGRJYyx8eGJ5R3IwQ2ZTeChIJGE4U2NCbEhmbCxJX3ZTQjkwXTMoRjldUio/VEgxOVQxJWZyQXtfSDVrVjt+KjxIRCgoK1ZBNFFacl9NN11aNERld2ppZ30vMj8zLkFCc1NHRktVKzVtQEo/MFAkVU83''@;'; put 'put ''SF1ySFhDO2NBc0VIT218WldYbTRYPEZ2OktNe2gjd1JubylHc1g2LEVgRXgrL000IUpybjIqaCNHbitOeTJeW0k4ZyFZR08/TGZ2Lmo8Yz1DPmFQMSVsXnhGfCpOPztqKzFVQzF7MWl0clFWfVspWW9aakBXOi59TjRyfGYzcS97YiF4YERxOTBZXihaRHNJNDpgbThtWUwlV0dwezZpcU47bGlR''@;'; put 'put ''P2RoRUVLO1JAJSgzNSxGYWkkMnR0QlM8OjNXJkVXWnJVdkB3Iz1DLm9ZYn48OG1GfjRNSlRgYDBJNjArNXUxbDN8Z35QbzhoOXBLKm4oUG5xaEVuaFtnaHZTZXg2PVluNEJdUUcyIXoxUm15WUJyQVVgazJuSC4kR1VnOnBDUHxLPHZ+ZFtPTClfVHB5eS5uOjBCKEAuVV9SbX16VyFPbjEmIy49''@;'; put 'put ''dCMyJnV5NGl9dV99PkZ+JiZqJWFDaix4VU1gN2Ajd05lXVA6Y1FMNFpSPW9XbUJpWlY2Ync8N3VedjsmMiFCQ3YhW20sQDR3dVRtXTx0WTgyYWZWWDBGbi9kIndOPVk2b204aio6YEhHTHgzVS8pLixGMlIwVzpWc1s7c2d+RUMhNEdOV2d4TEYrX2wsUUUvV31aaVU3SV5nL1Z8YGRxST5tMU9N''@;'; put 'put ''QTYlVGZNJmo5UWkpXVlPLix0XShsWkY2ZXE0dEBUPkA4Km9MUDQkKj5hbCZSdSU0L1RrT2k7I3ElblB2LlY2Ri8xWG5KY0FSIlkiP041VDo2JDNpVWM4U1lSXXkldX5ofnNARTpMPCh5aCxHUH1mcjUsS3wlZD9Wd0JKRXs4V09PLkVUMVB0VG4hSUMxR0lYM1A0aWJ0O2AvO0E/TkVzIXpOP3g3''@;'; put 'put ''QTg3MD5yNmRsTmUycjE3REpRa1V8I1k5IV5VRERZPExfXl5NX19wRU5veTozVS5jWmFZV1ppdHcycHp0eyZ2Lj82WVVaUWRPKE8yd1lJZCxfZ058ZTQuUU1lVTAuaT9ffTdAVCVoeEdtRzVqXmY2MUBYVSN9OnNbUCQwKEEqdW1ENlVySyE+Q059QkNPSCF0amN+eVYsI35lMVBoWjAkP2w9Z3Bg''@;'; put 'put ''fit9TWtYJUNMYmMuTj50Pno8W3xYVDR6Plorb1ZoQ3RLckNfKigkOktbanAmJDgkdGt1MXdAL2swO0tGUkp8Vzo7Syk3ezpEI1YobkM6VH48NHFZMH52SVMwfihZfUpJTSYjXVBWLHQvVkMhJjVCaCtISiJkRD5KZSFbX0llTDU5KVRyIzFRRnAmXlpXWDVqY15Bem9WWyVDeWJuQFk9KC4qTGV8''@;'; put 'put ''XkxdcixPYnJXOEt5I24iYFUjS0AxJHAkMTRrLkxyYkpre1A3NylORSI8VHJmYTFfbDx1OEsoQnV+K3NdZV5fQCxtcS9jMF4sT1BlPWomfmJnOmNwK1FxazgrIjhhdiZTaS5BXXRDLDhEJUtpd0BRJGJqbiNiTDhEW1Y0VT9ofXx+X3MsUCUydChiUVtEJU9Ld1lAPV1ocXY7VDMzUEVVX2g/X2tW''@;'; put 'put ''WzNfYklHWXRCPWdVYFJ1WG1xLH5wWy9gfVRGPEQjRnhLNmR9Q2pqKWtqd2RqZ1JqI2QrWUc9Kmk1an06PGhzIXFJIVJJdThndXtgWWZoP0x9OmxlNlNyfUh2MnUuRTRbbUJ6em51RF1kbl1xaj50b3p8M1FISjh7QElnNnRAJmE7PDBXXitQQ2FgRzIiJklSOG02LGQxfHIlZXAyRkAxVypMd3JE''@;'; put 'put ''PDBeMzx6XUtPKDdiUXI2PzVkYjJXbWBHIU01Yj9yTyU1ZTw/T1tQcUtNOkwqTnNzM1YjKzx8MUUsYVdTL2IqQ3ljcFpIZ3Jje2lYcWQwJCFqdiNPTkFSMStFIT1gJXoqcktWJkwqPCNMVV50XT0mdTc/am5+dyNdUk14Ymg6c3wyfGc/PHFlelUqU18wbG1CUFA+djRFJHVhZEw+azI3a0ZrWVVd''@;'; put 'put ''d1pYcWc+dGRTMlE8NFhYTy4uVn4qcmwqfWkqNTJ3OnNVRjc6Yj9vNHZjL2o+ejpRUyFTY29ZJmlCJW5BbHRCJiF9a2p8KmgvMEFFJTBfKVdGI0V0U00wMChvfUNOOTxyNyQ7a2BIPmhPdlFjaltaa0VgYlRESkpHZFg3TEVYdD5Ccl5bKnIjLyRSand5YTV1OCRfdyk3MDdYPExkMUIvYkg3ZGJk''@;'; put 'put ''XSRsanJIYmlWLDRiPWFvZUg+RWpSTiMvNSp8cDc9UEt1dXZiPWtRanROLGNkWGNZN0tbdVN2WXoiWm5jQT9LUV94VVs7MDhkX1RlKmNoZTslVDhFR08icHM6VlYvR2ZMIXJIPH1kT21CNXcqN095JUdHPjZ0Nkt4VDVPMEl7QzZALF5fJiMrY1dALiNJY1FxXiQvW1VeTCFaWDB5fk1qSkd4KnxC''@;'; put 'put ''Z3h8eC9Hd35KXXJwdT1CK3x7dil4TFUuKGI1Wzx3dihRYWNNYzJ3Nk1fb0xGfEklNGJsUj0ja0xyOHBRaGEpO245WjxXJVI1MTcuRlBfenBsbj9WaHNCIU1QbFZnPTVbO3p5TVZjeVlPT0k8XT9MejMiPkJCWnV4Ok5+PnY7PXZHeUhzcSNpZUVqT25NTzBdZzl4MWNQWEQqO35MY3dCdk0ubWxD''@;'; put 'put ''UjZbVk9MLyZaVj1UdCpWY3BjZEYkblEkOTYuOD94ZCRSZXJLQmVudmNAZSk4XjhkeWMiZiUqZiRONFJlfUpyT3BEUmo5Jj0lQnhbUH5MKUk6OylUUCw2b31qeXVgfTEqQ3dsaWRlTzZlI1BUUFJdV1hzOnR0Vmp2c1B7dCxySTF7eDw6KmhPbV06OFQ0TnQhfkF9ZnwqIXNnITQ3Q101cFNAfSY3''@;'; put 'put ''Xmo7X3Y3bkBheTFgUFt6cUZ4ciJycnx9P3xxbjp1Sno6KWY1T2ZabDEoZUx7aXA9YTxkbSFiW0JhZjN4T1kxbFJXPF1mdld4QyVGckAmbSMrdXA5ZjR3Ni9qaFJWJV07NzUxM3VvQFsoOWQsUFJ6REptaChaOiw1O180Py5MRUpbZjhRbys0Qy4oRUZ+ZkswTUI6IWsrOkh4KENgfm8lV2VqOHV7''@;'; put 'put ''bnQkZ1pUfDcmVzs/XmZAe0Z+QllhbSROUVhvUzpnXnlOeW41PWcybXptbSgjJTNCaWVeWG5vdXlmTVhFRF0/Y1Rael1iVFRZPkg3R1FUUUo/M2d5NDVsOnFNMEFFUSxeV14qMCFEUk1WN2wjdW4wfDBdPFl7bkMuWH4zYEFNKGlxdFBHbEEqQGYwRGVGXiJqMWsmLzMuMVpuaHxwU2c+ZnpBQ002''@;'; put 'put ''dmU8JjFsNHNtazxhKSo/Q1k+fD9YelNzNiM6QT9LczUxeCJkY30pdDx4MEY5cFt3QzE/PjopW2pRa1Z1c1hSKjZjRERCTiR4QGQ8NDVOVl9ndCEobl19VHpPekVnfCpnKyY5WEBqY35CQEpwJFpXT09Rd2NGUiE1IzhCT2VgJGFoUn1MfWM+VHpyW3R6NTBZSEdZRXtGXmQrLnhUSSZiPHcsTU5x''@;'; put 'put ''MmgxVSxHWVtEYVNSZ05IZCY+a1BOWHIjUD96LDlJITU0VTN8WXIuSXRoMGdddSNxKU9DKy9QVGtrVDZELHY3WVohIU97W2JhdG9QaVQybEJwTlhRL246Pj9bYWAhUUF8Y25eQUlhfmo1Iik8fWpKaS85bGJbbCtDYXglS2F7bG9zXjh6YXJNLmk6VHQ1PG98IzVCSTU2MU9TfldeTDU2WXh1dHdr''@;'; put 'put ''KHZuYj1ePEQ4P1dWZlBeZ0N6W0M8KEd8NUVIeFh6ayZUbj1eLzQjQ3s+OTwkQ1hpa2B7LkNOUWxuVU1vajF3PD1+fW0oU2hwJl1ILjJENHI7Lix5My8hZmBIKUk5bXlzMHU0SFdDKWthZWF1bzIyej47RjRNU2lbe0cwcHxWYSwzZ2U4TCEpKURgKkRtcTd4cVZXMDFEVFJ7N05HeihRSnFZWTNn''@;'; put 'put ''RUslYl17TEE6eHJJYCsqbD5hR1RTNGBnQllfJVVNTThEdXUwZFVYWWsjWmNbOnl0eG9XdTNVVkQrcDFWNmReMmYlSCNzdVlEKUJ6JlY7MFlCOj1tMGRmSU9mQEEwOl9hNTB9aT4kbTtzdWVEe2hVXjpyWVMoeX5yPXRVRWohek86Llg2N1hFSlZRO3RabFMsQjcuejdGYXVQWTVAU3Q+P19sP2lU''@;'; put 'put ''KDQwZjBmakx5V0d4PkQrXWJ4ODJJI2YxLlZ6WihXUT9QLHpPLi9VUz1zPzExOkNGUW1RQC85dUB1cVVIfmZQanMrOnJFP3Q8WylNc0dYJiNPemYqSl19I3opQyQ+TmBaMERKSUNYJm83M0x7SEJQUitXKWpMVWghXz45Qj4sbT8rMjJaW18iZ3clcTk2OTtYODREKXE4U31mJn0qSj5wKHRgXjhA''@;'; put 'put ''MCN8dTw3d1RLKzxVQzpPNjdMYDBxPSUvRn1TL3xZeDpxNEM0UzpRZlQzbHNBWG5ST2pCYEpHR2kzfGFWWTcqbjtqPnU0eH57SFJnKVorOj4kKiFjPDYhbjM/KlR8UiE2N2giK1FjL31XSjphPDRQa0NHYGVaYV0pejQ/TTcsb1dgOTBPMnZ0U3ZtMVJyOSRpWis7XSQ1IzkqdnN5bFFWQ2AvMT4m''@;'; put 'put ''LGI0cWNLRlNEckZpKlB+L1MqI19SdWA2R3NxQ0NfImppLik8OyM6bEN8ZCsoXjVlN2NFcDxCYUV9QEBGcUFpN0NuVHxfZEJqcipzN0JyYntka11XNyNybXdoczxHXmlxUytKbSFBV3xLa1lDQCROaSU9L0J8KDhCLyNhQU95ZjFxWEMydjRlcVsiVG5JWkVjbVNCL3UyTD1fK25BWWFGZEt+QU9Z''@;'; put 'put ''bFohV3o1X11Ubz9BJEBmRmRnWXRnbisrdThYb09CRjxwVm8/VCFafGpUaTssVTtrZHd6QkUxbT0pQFltfTx4fGV1IjkzYSxQOS9dY293an4yVFVxQ3YrLEtMXzFQelhXfV5iPEleQ1daSW9NZmYlNTF4S2hgIiNSck1eez0/PTN4V11Ka348OztqKHVpJCZvV3xLUC5wSm1IczpgR258VURlNmRX''@;'; put 'put ''YGY2W2JyZ3pHUD53VU1ydXZMRFI8byRtYWhAaShsYnt9YWBockRrLjxxMXVCOFIuUSsyUjxYPnd2fXBLeStOVlk6SHhEWVoiZDg9eUVdU2YvWk1fRno+a3U+enxvZ3I7eHJ1XnE5d1ssQiR0MDcoYWQ6Q1FeREJNa1E0IXZIL3g7QTw3eGBjZW8vIX04eFVAelA3azo8dmYmcWpsKSpITU0pT0l+''@;'; put 'put ''N35uYVRxVkIsY2ptInQ9eDpYLjE+MHY3dyNHUXJocmZTU0AmQ0h2bXFmYFlYKmVeOXRkKVg+ZDRAfmA1O31EIXN3MVltU2EiLyN4WjtheUpqM3YqOit3X3ZYWV5Scz1yemZbMDNbRCozSl4/IlFBbSg0T1pUa3BFPlU+ZyMpTF9sLlcoVzV5YEdzJUd0aDFWdUdnIkUmVjZwfFlHdGRTI2hWKStN''@;'; put 'put ''QFE8aGEvKXtpPE9gSUtSJGtbczheRmJwXXQyPGtPclE5cE9HdmEvPm82PlJrcGI2WzliMHZLVHczakJafiFhbE9VNDJQS0ooWmJ4a0ZIdG8mXWdyOjJLV0U9L0Zwa1A8aThMNGlQR0d6RzNFUi58ODdYNSF7dUpUVyJpN1tgdS4ibT44Il47X1lZK2kxKFhLOzBnLCMsMGUlY0ZEeEI0RFkhQDBu''@;'; put 'put ''UnxwaSFgMW49YjxucTA3cHtRLnhSZXEvK15Ad0Y4KWdZKUU5cGlkT0YmVUUvJmx5RipPOW1od0MkRHwkbzw3YkIxcGtBQl17c3x3L3BWUkBqP2Y9fCFSfDBuVVAvTl1oZF5IcnMhe148ZTxYZ2UkO29ZKSpIVn1LPmVHa2Qzb3BUZEFsOnREXyZ+ZCxYMyQpK2hVNWZgSGleXXR0YTchL3FsNjJI''@;'; put 'put ''cHR4fXJlWkQpb1ZyNDMqbDE7XVpHOzpnRT89ai5+QHt3MD5CdG5iP193SGM4P1RQbFBOSEMxUCJOXm1fXiZaNzdtWz5temJlWnt3azNkJDxJMyIhO3JjIUJ6NkUiemAzTlZjTXc4fEdEcCVrUTVwJXxUQlMhTmgrLzRsRldAbUl8RHh7VTw2Yllmej9EMkskVmkhbysvdUpeUjZ2UEIyWUVDSTla''@;'; put 'put ''VWV6U01sRmd+anJ4L3RFd21RRl94aUlLJnNWelcieFchXyZlPTBKZTJ2NlBWPzc4WiJUT1N0Olo1ak43NE40d3VJJXZjNEBOJU9PXW1ZXWM9UjdPUn1tX3ciTyxffUtmYkZjSXlPQlVzZSomWUpdOnlbWDV0VnBES081PXJtZV53UXBqezIobX5qbll7ajFMP3NVcipKeS5gMHolekFAMXdGWj9m''@;'; put 'put ''S0o2T3FvOnwzJmBmQGRdQysmPk5JVmQ4X3VbITJnZDo+O18wPzl+dkl8dHkieVh4OTwzZElaX21fQ3QzISpqUCwhQlV8eHI3Y11bampAelBYfmBVcC5IUy5wWnFmSiUue2B2c0d1KWNDZVZtOXY0XnBXL2Ahd1EiQS84WnBoPnxnW15gZV4zZ2xTSiZed1dQbGJKQy46czVFTHw/e1FIXUIzJGBh''@;'; put 'put ''MmB7aDZGXXNXZ1hsdzM4TW4idTFsNi9vdkIqdVp4RE1kOiJ9QWs6MEU0LilxcDU3eldzNmZ4XUlvVjoqIVIibmYzfDttQDwxSFRYeXoucXRAYSlZekpKSndTIk85X3s/dzJkaH06JG06OmoqJEZHNUAoNjIrZz1tYHlOS1ZLcFNec10sT1QoWXVHbG5zK0lDfSEqJEVBZm1DTzhyXzR7NCgwWFJv''@;'; put 'put ''UXU4N3h+dTN9Vip1LlJ+WEMrbTUlY31zOzIpRHVCZT89P3RSSF4xKSU7Y2JqYHUsUi4rfV9hNUtEOnBzdTBJcSpbVF9kVm9pYWFFaHA8VC5veEZTT2Q6RiwoRiZkaSV0Mm5aKjBPJVY5W287I09Kd3ohUDNEU2clblhPYVpFaVtHQHcvVSJPaldBTz1ZL1ZUQlp7SkVQPFNvfmBUcWFpOXxaNURo''@;'; put 'put ''dip7MD1qYiUsMlszIlVYUVlTVH1gNTo/MkN1UUQ4U1Y/eF02JlgzfDgvOTR5YzJQWTJBQDFFMC5MJCROUHlhOWRRZEIvTz1KJkdtNjdZMTtsa2w8MkM1ZHBIM153JVBrczQ/YU9QIVgrcDErSFF2LFgpQjExPyp5eFA5WGFhRC9nVGU2ZTloVUtGRUFRKCFwdU51NVRFM2Y7PEkjY3JNLD4oISt3''@;'; put 'put ''REhYYGFiOnZyUXopaCh6QlZfJTM8OHRVR1Zge25RUTt0eFsvTEQjXmR9OyM2I2dRWUhCfFtXQjFAXnFWdnx7SHRfVGdObFBEQ159KnIpaF5CKiNrT1MqbUI4Xnk7dElrcThEfEtIdzB2VUJlP2pMRUhqZV4zST8uPD1xJip3VyRjMmAzUitjRix4dkxabVosYCFFNGMlRCpsIlUxbEFNNEgmYC9n''@;'; put 'put ''IkJeMyksY2FkNzNqakoxTk5hPGBhdyJGfG5dbWhNTUUwKF57dFIvUDRtXjYyOSRAYWpQNEFqV3YlTCI7amU7I2NJUHB8P1Fpd25TVi8qWj48dmwkOHcwdUxeQ1NDRV9dRXJmd3RSTG0mYVlxPURNMjdMNiVRdFdIJDsqYStPOF1tSCh+YG0jeUNvUzJQfkBxPVd7KmVkKkNNXjxXaDZRV1o3fEtS''@;'; put 'put ''bjVxdkoiPzg4WFpoaEt7WjZiKTROV1NVVkhOSDhuRCUyV3BeKStgaTo2NDxGZyVKV213YExoSUoqSkQ1e0hAYUNsX1U8MldeLzk1XjxZJHFnSyR3R0YmNF4uT2cyRTtONiNMNjgmZiRqKW5WZDFITTwqZXBRZVQvSEAiQGgsQmtuUkdeOlsjSk1PTXN0Wyo6Vi5GZzdRUGlDVDJfX0h6T19tWjh5''@;'; put 'put ''ITh9KURGVXE1SltacEJ+QCtCZDxvJDJNfjt1V25IIzgxYVZNYCxjNkN9ZyRfL1U6TEFKSilsc2Q7cnszNF5CPnJMIW1DWVZwZTY/PjozSy4iP31VUTJLW2hCISNgKjE4Iyt4S3kxRSpLMH1HN1I4P3RIRCEyUVdGMk9sfWc4MHtfY2pRPGFfQEt9IiFjMXo6UVU4aDl1JT9xbi5hIk5gaDo7IWgs''@;'; put 'put ''S0dtdzMoKXE4SWF9aVJmTCVHKT45VyFsR1VeZDomV3tTTFQ7OWxNLGMiZXkiLCZxfGw6fDRFezN2fVY0SUB2fWNjOSNOQzA7bCgvdz9oZCE8MHtDW205cn0le0dEPS9BTz9oenlOSXE+SzA0bTxGJEU1O01YPjt7UDpfbThGYCxAZCNoTyR3R1VlRCVyMGxKc2R9TH5eZm1mNEdvbEZtJXh0cjQ/''@;'; put 'put ''YyFLfiQvamEkdk9qLDwoN19bKW5sJEZPcmZtb1RiKlJCaDVTdj18UUcpXXwkNDgxeSJXKVd6ZTFzVW5lI1NpTClFVnYsTDZRXzZMU3FkLCM3PHklWlYkcVZ8am5YX3FzWyQoSTlRY2E0KEl6UX04Pm9uQ0B+TkEzQmRYcjg0dTxgRG1IKVVNXkFwYjYuLExkQm90NCg2Qi5vZH1OKV1iL0lLVGF2''@;'; put 'put ''ejdfK204WD1IYG00RylaJCs+YlRmZ1hVNVM1NDo+RlBSVFJWJVEvNFtiUj5hL251Wn1qYXhNT0NQNVReeGwqKTxQMF1SYipkKXVsem0wR2Y0R2deZVYsSF5YNWIuZkxaWSJCYWdzRzRtSSMsLENZZTgxcC9XMFVbekpdXyFzck1WQGgyNC5VZT5lLDMwQGFKOyMmNCklPWpoNl96VEhbXlozI2Nb''@;'; put 'put ''dG9XZCtKTEBefXtrVVtGeFNwbTZkfTZtJU1aMHw9TCwhcGRKOkdfRChVTVFHI2gqbUxFSSpYLC8lLEZ5U2JrcVkuXiN+RV5qMyt2cDtVYUc7Xn47cFFmZnNHQmN9Qyt4RmRIaTRsZThgTmJmIltsW2UhIlpZTEslPGguNjBeKFlfcWVtUzZ8JUkkTlB6cT9TLC45VHZ+QitfQHg1aDI1XWJidzku''@;'; put 'put ''W1p0dmo4KGZ2QVpmXz17V0ZsYylWbn4yITBjJmdDUk5gMCpNeHx0TigjK0RYMnFlSnNuWmNlJUFGbUB8Zip5P3BQR0B6WVJGRmloTSl5NXdTJmpKOWR6ZDdeIXl4JTh3emVENXFUJD8hYV9LeWhpYWF8TjM2aDBBZVo2aV5kSH14I3w0MCpeV305THBrZjs6MjpfSVd4VGEjaSopP045NUd+LkJk''@;'; put 'put ''OW8kKSlKSU1UamB2Ny9JdzBfdXEpM1hjaHpPKGNaO3o9Qnl9eEM1OEFUIVQyPFdWcz09Iyp9KyhtcnRwMz9KSl1FTn55bndtW3dvRD1yUDZbaFUpQGImLnwjOzAzU2Q/TlJ8OkR1JndALGlhUD8qfVhUV19uPGRjOF1dIl9wZVpPTXJXZU9hUkdYWXJ7KF5WXzk7NiYzRmhpRWx3bSNgUyxaeDVe''@;'; put 'put ''NSo/OWc+R15lL3NeSyM4ZVhnQzZrM2d2fE8xbHh9bEdZVC5eOVRqbV57Sl5we2N5XXdrKEFLQWpQWGdbP2FFdndsRHRGQkk8WmhOVFFhYFZSSDM6VkxbUV90LmR5KV9kTWk9c2lTRHxvZyQoWnk+Uy9SdSw2fmJMWmx6fThRbVFjZipdUVMmLHpbcnBQP2ldTTRPcE4oV3E7Pn10PGV4dnsqdmNW''@;'; put 'put ''eHBmUDVgIl9OaDRgPDxPensxNm8pUXQ0IzhNW0xkKiJwNnpbT1tfMUthfD81dD1KM0AmM3E+dGZ9MlR6K2h1KVQpNS4ubnJ4M2lpPmtCaiVIUiFIZVhDP1MjZFJIQks5RGxbfDs9fDFGWH4lW1MvSWp8cWZ9LjAvNGB9bHJpYTpuUXp8JjVTQ0Zhe196NyllJDh1OzRVL2pVUVQ+Z0JaS3FmLGFD''@;'; put 'put ''ZF1kYFt1LEBYV2cqbl1IVnlbR2UqIVN7d10zaTlkb1VvaDFaeEd7OHJNb3M+aVp2NDdrOTV6bSZ2K3t4eldid24zcDBpXiNBNXcwVVkzKHk7PUlNZl5mLFAwOE9LYVpFYFdrZEdpKWhYX2A1Kz4jazhTM00jdWRdeWozUnV2KmBOInpYaWJebjldUkRHX3k0MDNibmtDL1kvcTF1SWlFYy8jR3pp''@;'; put 'put ''OChCfH56NlNvb0NlL2t8aEF2b0VGfVp8djIwOGEvP3RXYTZwPiwlOzxZaFE0VnVDYyQ4R3sjMHl6NCE1bHh2NUJXI2dWfEU9fTxkeGkvIkUwUDFkTmwxam5oTE0yajcqen5AdyJiflV3dyk0UUd1XXBwQVRMOXF1bWUoe3xZR107Ky9FJHokMU9kcFRHVFFvczwsN1RhRzpSc1BFb3N9dVV5YWtF''@;'; put 'put ''VyZMOF4xQnEpe0koLHBRcDl5I28/WFBiQ3EvKzRyLD5wSGljeVtiM3ApKFpgI0M9S3Y1MGwoWS5xe3paaUhUQFFhWSRSV21FOT5aZnU6LnVGSzpzJCkwPXxKdCtwLzl9OURHZmZ7L1NZfGAwaDtFQHhAZjUkSilGT0xabHxoI3olVTgiXThBKmQiRSFPcnw7L2k9cWYoI003UihNRl9mclMkLk9M''@;'; put 'put ''NHldc3opMjFFbUVHKHNFc1dbZjxFMUFMM1t7dlM2YCxZPVdVYXNueXReP21KZX5daUghJFRNfE1ZT3k2Uk1pcWVOMXM0NTczSXxFXyIkO0NoNF1+dSxhPElfZiFMa0QsPWEvOyguY3NzZStaLGh9eHZnO2I+JSpoIU9YYTUrSUZvKlFRXko1Rz0zUDRVRSFuLjgjJGZecXcpTU5dJDRSXzswanxw''@;'; put 'put ''LnQ8SlZbNnwsPC88bSxoPHdzYyYhOismeDZ7eWV2P0dObTFSRmUlcG8xL3RXTmpOaERwMENfRSR0c20mZGxtaE1fV1VmfWtecjhHQiJlRjtHN1siQndHfmw3bGlzM3VDSVl+VmIib0h3XndOVnZmJC5BOH4wX2QuPjk+SVB1eDUpNSwyWktgMyI4UEltSGp6Z0ZpZWpYdTs5eSVJb1Z+NEVXUXNN''@;'; put 'put ''bis8SzxwWltoKFhseVIkYCFNbmpFdm1NYCgoJFA7PX5oN2JBe0FAaWBpMmdHdGg6QmoqJi5MTndvTH14V0owRHA1MnQ1IUFLKSl8b0l5djFEdFdWbnI2WldQN29xUGtGZytKRnJ2Q2tHZUxEOUxjeSxqMmtoOTNuNEJSJWtIaVVvUX5dVSNZd1BoWWV7NDM2bHp1byFbKmRRSDJhfGdnek9gY1to''@;'; put 'put ''WlI8S3VyK085b0E6XztaPS4jSmJ2eUchWjI9ZU8wQUlLS35jbiNAW08wTDs5Q1I3MCVaLFA7eS9wTHgjTCt1SFJrcHkqV0lVZTRSREBjcSpjLHo2WkN7KWs0fiZ6WnorMikvdmdTQWc3XjxBYVN0MVFUfmwoNT9MSCl5UG9+YEA6IUFhJHw7YlNfUXojKjVOY2h6bHE7VChqOCZFanJnfld5bDJy''@;'; put 'put ''b2EiO35RO2IqPlBsXy5pYCRkeWdSfUF2QCo0KixeYF4wcGJgWS54a3BpO2ZELiRKUn1XLF5VLmBMZUtdKH07MSw2ZjdXPWRFMm1xUTpkIkkjMmBaaUFOOmpqREc3VTR3c1k9W1pSeVJbKlIlPWNbVUdxNGgqSmxqL2V0T1tMTVNuUUF0NyllW1JORkckTSQxWUJYUTBUW0lbNmJeIXtMWClZQ0F6''@;'; put 'put ''UmVYZ100cHtLLEF7R2wyN0V1KE1JTTcyfVRgO3FaeH5QMDNRKVImMihxPjJ1bT41VzpJK0xOeHx9aT9rRm4kQDhrTmFjcmFpLExQaSlgNHhoNX4+ODchSVtjQ20heCZPIThfJVZKOC9McFNRYyZwQl9YNUFmKFdUMi9dRVJHQkU0YEAvcnUheTdNfXkmc3FaaS5WWGUyYzZGUzl2aFtJLD9UJmtr''@;'; put 'put ''ITVnW2Q/dCQ/d0NRMiFzLFVIb2ZOWXlHalRnLzE/cDN5bUorVEw7ak4rQ31iYDNoQjNhTVd2U2lySWZ9Wk00ZFdCaFghRE1oP3hQYCxHMGkxLEcwMlpfYzlGaEFuJlVDJnQ6RjlySDRRS0RPdlNyZG47MTpaZjp7fWlqcSFfLmo4YTN4MFlxSEw7XndeOTw/KF5ELGhKQzROPnt1M29dIzxbfHo6''@;'; put 'put ''bSZ+L3ZMQ3tUZDRjKn0pY2lXQjk6TU9NeCVWeXxgS0RaInBUZGkyOVkwMUYjPkV8TTlLMlt7M1A4LkV2SFg2NT9QOlM8d25PUT9jLCRVeT15eFZ3SVdvcGk5MmNBSkY2UClnWi5LKS5IeEczQlFWMTNONiZkdHxQUmlkbXRsUG5UQihhRDZ2VnpKMTl7eVhdP2YzIV9MLnU+ZT4md214ZUxZZHxn''@;'; put 'put ''JWExLl8zc0RPKUlaTX5rTyZIQzR9YXBmMkhCOl9qc2tOWlI2N15nWXUhX0NlPz0mP2VwJT5VfThsXV9QVTx1OFN6IjElMSNiaDJBUyMrW28yWF5wJnRlVmQ4M1hmYEg2bl8ofEQxfjddT0w7UHk2aihJN2UpXVdVQmJufiI3IlNheWwvJFMzNWFBJGoqQiRfUylDLm0qWHJiTG95PStOSntpMjZQ''@;'; put 'put ''YiJISDNCVU9FYmUlcmNLVUJMTlo6Mjw7TVM2LmdCN3M1Y1k6XWJYejBfNlc9bVhmZXIscyJZezYkM2huOlVGZEpMQE9XdEYhZ3xwQjFuZkM0YnowTUh2aiwuUCJAXWMvWHJpTFI/TW5OXlRDRHQ8fjEySTJ5PD5AKnFfKDUpOHl1cXtpN3ZAbDJ3cFphKShKc1BHX0M6XlAoQShxPkp6NTFbUEhe''@;'; put 'put ''JDtFPiMpSUtaaUFFPytxYU81ZU1BPmRGJFF+K0UycTtiSSg9VmF2NC52eX1YdF0sRzNGWlkwLjBVdFlJOEo1ZEBSRzVHSHQ7YykiYFV0bWlna3YpVEI6OlN+QGBgPk1nKTVMUCRxckx6e0VuYHYzUUN7WkFXPT8pSkZZK2BrVHVeZUAoMUxdaGJyd2tucTN4ViJgaGo9PVRAYUMzdUdedj1FdTh3''@;'; put 'put ''PGxGWzBMVSZBZUlTYVpIZUc/cjxmejpwXlolWn5pUVFQNlIifHw0cWFlKjlyITJ2ZHNzK0M4OEVuUFQuYGQ2bGI1RGdxbCViZyRXRyp+fkhlcDhjYntfbiZLLiZFMT9yTG94L1M6Y0pgbzJ+RVhCakZCbkZ0W0QsKWsvLD4kKXRSVD49aE9XaDw4W0NrKUpVVFgqTWlZfXpoVDBzcnNsJDVTOnFJ''@;'; put 'put ''PmRJOGRCKXdeZnFkdGN6JDtXejZzbTlWe0RSUFlGKlQwSXouQ0I+aWAwe0JxQHwpck9OZi5pJjF4QHkuZkhPI1FmZGUielQpeWAsSFczPEVdX1trRkJjU3pAL0hLOWBsLm0rJj9IaXh1KjdSR3M5RFNOX1Qjb0ZqIVVNe3Fja3heb31FQCR0emxtR21CJWxJamVjZEpQKnhjcFV8fWFCJnF9ZEpg''@;'; put 'put ''bzt4TkRxOz5ZaXE/JUBPUDA8ZGkhcW09dTpoLnxAITAobHNtJj1vR1skT05nNCJOciJffCFSU1ByRWRvRU11YkxDT0d2bUUwcSZSMEA3Y1o3a3J4ZTdxTnBAdUg3cGp+YE1lTDdJYj1aYylwbCl0ZTBINGAodSQ8VDg6VUZdcWMhLmNfUE9KcjBiJUM/K3Vfel9EMFdfeEMwWzNZY2x8MjJNUER+''@;'; put 'put ''dlMxeGZNMXdvb0E3T018c1ZeS047V3xMWjoiVW9QdGVEcFA3R05xNkx3QH07WVlHN1d6YE1HPzhKV3khSG1EellfR1B9ZXFiPjdJYSVlYERmXSNbOkQvfDxaJGU8KGQ8W0dsanl4azRFSzFVTm1NQns9QT1sfDZKWWYyJHBGOEMubit3N3xgJVhweGlNMj5Abm5MMTtbXmxFXTQ4UHxvan5ZfVM7''@;'; put 'put ''NEFfVU9+KnwheyE7eDwpUkpDXl05V2NPR0glZG1rNl1oMiRuez12XVZbfCVyKD9RZipxYTskcUsqMmJ0L3JaLF1ndG1CdUt8ZDtPITJOR1MmMUA+al9qdTtDe3V2SkIzMm0qW2ZpfGxIXXlqTCo/RWZ9KVFHXXdLPzVAK1dAUSomSDZoRWwlPipOYGVhImJYeGZzL1ZsKzo1RV5AQHxiSHx4R1NU''@;'; put 'put ''JkcsdXdmYnxBclg2VnVAKV1YJk9NOVImYiNQPjRiOUUxZUcrWWleJExGd2t3ZG9qMGFpLD5TN0xyUWxbW31GXUJmaTt3WGRyQ107KV5VfltKWUpKUWF3fmFVXUZ4Y0hPVT5VViE4KykofmlnIUZ3LHtrOUhXNmFjd0lnaXg3TG5vK0F1Y1tuXSxRIT5kTzVMZ2Q/MHxkLmxkPSVaNnxONjtdJCQj''@;'; put 'put ''LktqMmhoP2RoPj8pfCI+OVdOJEdrL09RJDpqTldiISRaUltlPE89eSFFYnd6RjczeFV2SyQ1e2BANkMjYW1qXS5tNzY0bEt0Uy4mTSokT3dnWWEvRjoueG17O0M7aWt0TG5GenFMLGVbazQ7NXpQWE5SeXIzdiIlczo7R2VLOk0qXk4mW3plVUpmTlhCZUo1NDM4fDs3dnJbLG5QezpbTmB6ekRJ''@;'; put 'put ''Rj5iXzpzeV5NIX48NWdKc34iL1RWVnwwblRRN0J3OTV9ZlE+VEQiQXc9QWh+VDNONCVNNkMjYHFgcU4+Jl1UdHBxOFUpNCgjdyRjKTpucUNvK2NSMXBKQT5oJXEpMzVsV1JrXjp0IUVfVFc6VU9nP15oZGFSaiJ3YSombk03K1QsbkYjQ3JsKUApITdZKDVEZ2NmYklgRlJeQCM9X1JLUTc/Slhs''@;'; put 'put ''XVFYPHdSJitnZXZwYypsM35pez8oOClXWnFHU3t8dD8/bD4lPGRdIzM1XSRtVCYwdDA/aW9+eiF0Q11fRnk5fjxsWHZgd2B1WyNLIlZEU1dEaipbXWJaL2VMS2QjKz1aWUspXkt8eFh8aG5XOEI/ZT1wTmdIQzJNOklJOyt8aHVQRktEa3M5bWhUflk5fGV1MzRyOjVQLkVbWWEvPnY3XVd8W054''@;'; put 'put ''OUtpZ3Q+IzJnPkohdVptVkxqVXx4MDYrTnpiTnVSVHFfIyFuZVpwPSNsInsraWg2WDF2Sm1NaUt3WkYpPjJJLF9ZM3B7Vz9IQiM7Ny47T2MqYCgpMTJ5YUNpKHlzUWtRMVVRSDZgaFQrY1NbLHkvakYyJn09aTRRTzxARUF7QG9+bUx6RD1MenF+YVElfWM1TnJaZWNGXSElc1s0Zz5RdlRVQVdT''@;'; put 'put ''Ml5GI28lS2djUTFRVWN6fVddO0N7LFF9QzxUdmA0THR5O2s8RTEkLDZkaGxxN21ReCY4VS9MLDkjO0peLEREaE5vYzpdYEReT0AzWDBIbXJaa0UwTTRHdzVEfGg1YXcjQWtbWUZIW1slcnFvSHxFUUAwWnd+UCZWLDIqUVVMSkFqN3hqdm4+X3VbbHBXbGxTaWZiL29WSExlJT42IUQ5c0ssRVMo''@;'; put 'put ''IUgkfEc0ajAxRj10VU40X2RrR35QJWI2b0Q1WmNHeFsjVGpgY0I/ajZJY1goW3xIYVF7cEZNKEszYkVSbyVzbDplTSxabnMsP3tHX1pwJWExKlN+TG9KPDIhWWt5K3g2RWFocFhpKS9be2dlbGBLNkBXZyNKSjdlT3ZySDJhYjUrIy4sYGFZSVdKLlNjUlZtWnJuX3BMPkVlYCoqbEhUKjVJIUJl''@;'; put 'put ''YkYsRi5bYGM8X0VIL24paERPPGdxJGdaI3YxLlBydFQ9TFEoOERKfWcvUn1hdmY5IyIvaVp2Z1ZWLltsQFkiXkwpMnZeTCUuYXA0TnNvTzEvImVEUUphRDRoWHRqMyJJTVJNdENzYyNKRitNaFhWKzB2ZHZSVVhAWC9oeHNIZXB+LDczIk44IWtSSGNkPyRgIXszbDV1V2FbdiFLd35nJSNoL0hK''@;'; put 'put ''Ki8lV2ZyfGtESURjfC4maiouTTxQelQ2dElOTHZaO0NCRVV3d0Y4fDF3KmJ7RWd5UFtIQmojQzYjLls5M3Vmc3NNUj5RbGtDdEE2THpXXSpEamp5eVpSVnBWUkEoQFc7PS8lRExsIlNhfnxNfHUhaVg4ZldLUyEzWzNWPGkwfmhiWil6VSxpUlI4KHNZK0VFUn4jcjNGWUFFUV9oV3NebWVEQWdq''@;'; put 'put ''UkBybFZRSzBufEtFVTo+LHNON0JgVGMzdmhnYVYwVDUlVjxqKVIyVyxFX1VtKiJnMlVzR3hfUFpJZ3VycSYleTEqQ2JwfHI1PFIzJHZSdkI/YighSkI/diQ1T1pZdkNqbW8ueHpwM3BmVnx6WjIuTXc+fFVuKk8ocDFgV0ZsPnowZmopLG5kaHNnSDw5OzcyRnsrWSVTOmJKMjNpO3p4ckdaJGVS''@;'; put 'put ''MTYxKT1BMXkjKnM7UzM4SThseHRZP3YoYGcsUT50XjJqcW1bJHF1NXlgNn5mS3MqPyt1cEpiaTlYc3FAenwyXiJsSjF7X2BRMGF6NG1uM3xCZVp3XSVSJGVxI19CUStvUGZ4MU0lLll7MGUsRGM+cF1HX2V9UG56UnZtY0E5PCF7KzsxSHJWVFFsP1BiJE5MZy5XQS48SVlVRW95TkhHd19aQSVv''@;'; put 'put ''KixmZl45RkxtdGA0SnY3IWwjKE5vW1BXTWNkb11faV9ibDxOY284NXQ2I1lXNj1WOzo7QWJAOzNuLi9MeTNLTzJKQlNLKipYSnEzOzxDIyt2L241WXE2UTIqPkcjREZLZjslOmQoW0slVSJhe2FFNj9mfUliRlpWdiN9fiwyOCRaRGZQJkJtM2RFRE09Qkl1Mmd3em9aRFpZTGlEb1h6VDshZFdx''@;'; put 'put ''Sn1fYyslT0BdelFfIVEpNUJEcWhNaitnIjFNYEhVNDMpbDxpNEhoW19vQ2lscnt7WCtYWVBnX2ojWy55T3E7XmV4THdxLl9jMiw1fXZXK29VWURheUt8OCpgL0czKGdAb0V7Mk5lZmVZY3lOfXhidDdCWzRKbHxZY1hIKUIvMChrJH1oRDZsbFFgTFlsITpFQFEpZDV3MCpVTnZYJVlDVj42Szc1''@;'; put 'put ''dXxDSVkva35FIS88fUBJQz0scGRDVCgxelFCMlNOQmMpeSFiaCZTN3YvOjM7I0NBaEhTTGdZOWUwcDVPQ341LyJvYUMzKSpjbSkvIiV8RlBQO2NLciMvRnhsVWwudiowMHloKiNFInV+ZVpdNGcjN2VOeDU8ekVbc0o8QFooeWg3MCJlS0JGNz1SPz19NXJYOi5KWnU3IWtsdWh1ek1jVyxAQmIy''@;'; put 'put ''XVdoUXBVVTp6M3RSKTBBQixLUV1MNkN+OU1kNnYhalshIXdMNm8yIzlrKnopJTxOJkB0SjF0OmMoSD82emxSX1ZhTlBiTSJCZm90WTl9bURxRS4zUEhPbnxYdnBiKEQuVk5uKXhtYE1sd2lnJFJlYVVjUHdTQlopN1k1L2tDfHovO315R0IiRUNid1Z1OVFafTsyd15vI2U9VDtiaGt0UzlfNEt8''@;'; put 'put ''YFI1XSkwR2MsIXw2MEhNbGNXbi5hPl51WUBaVDxlU3MqTXN2ZGUqWjEoW2RAPVFQWHZhfnQjRUxARl4xaWxDWHlRKmpaJjozZWBYUWNfW0NyJjEiOkJ3aSNIRzdhO1Q3blVASCJQMGh9eDY6JldwTzcuSVpqUjQ1MnFEcF5gJDgjSl5jeiZsJklydE90UjVUPSF0OUlyOjMoOm5KfURUaytTdjgz''@;'; put 'put ''SWxYQHVoIm0sMiFtQmdjQGhZRihRfFBfJkRAeyM6WmVvMVMhRFlxYiQ4IX0vMUdiLkg+VkskXjkycCJoOWEuJmxob19DLjE3T3t4eHEvJVpQdzh6Z3ljajBFekFCZDVYc3AqNCp9cSRXQG5JZ0hEfjd2R35EPWZZOHwxaj92bkF4fFlJUnNbKm1KQWREWHhaMiNzN3A0WCJvdTx0JW9kSlBKUC5f''@;'; put 'put ''XVt4S0doQ0VrM1tuJi80a3ZWRSNicGAmb2cvSGtAcFpOfCtFZyFpSSNtNWx5PHlTVV9mZ25oV2BXRUduZzd7UkY6IjU2KXdnUikmRUVVOkNvaCxNfShDJiNteX4mQihodnBGcE1JPl5OcHFMTmoyUyE0TUptSihqNTpgfmVbOl0sTF9qcmglT1JJMUlHMjFkazV5SFh4JjJVRG0zYmI7NntZQHpZ''@;'; put 'put ''WnwvQn09NFVmJkVLKkUjeWhiIXl6OmAmbXAsLlpMcTAmNXNAVl4+PjghKkZzNT19X3Vjcjo3I1czWkpwc153WT94Xz4uYD5neHIzY05VXlc1RVFmPnZUUlU2TmAlJiYxb2o+ZzZfWmtQaXhTZ0khZmg5IzVJX0MzK2BvX2VsZ2kjNDAmOSEmZDk2eDZVdXhVbGUle0NNV1QyRH5DQk91OWopKTJD''@;'; put 'put ''Sz8wTjlWJXVuaHRWLi8lMTkvYmUkYjh1MExGXjA+emwqVVVFZEc9M3xZa0BSKzBFYCh0P1ZnVz4kMzB0XiZAezpYXmhWUCYoSVMmTk1HNnlDNH0vT29bMUUkczRPT1IjNGd6QWtIKmZRPV0wfV5VU2FIU2kuMVZucnU/U3o5THtLdzFqW2FuQGpgWzFpPjE2djl4Kz9hPDR2SywoMUNVLyUiNGdM''@;'; put 'put ''ImQ+VEJwPmNIR0w8Zj1mPixyZGZDcUMhSmxRTERiWmVBPk9qUnVmPVZJSHZUNmp2ZSl2dDtGfSwha3EscnRUOWNHL2FSY1lPPUZhWU52TG8lb3RqQS9IIUd2RWg1MmI/UEFHL1g/VDFrI2J+PFNnc141dmgqL0dfdjJQN3w/TFRARV8xUDZfTTc/W1RlQnxyZl1jY005PUNzP2FmXX1KQmxmbW0v''@;'; put 'put ''bWs0YEhncz1TdTQhZ3lAJFVIMSZjTyZbfW02Z3lYSCk/RE9ZcTwoMzxbJG1EUWBSSn5QXnNtJF1LQUJrUyouZDtiM3pIOTZ3ZjJJckZGakc2Pl81UlQkKlp7YjkuJnMwalNTKmolPlQkQnhhWloqTTRrb0cjcihoKVBgR2N8UT1ANkdedmZjZTtraXsjfHBXdX4wal1ycjspaGJmJShpZGV6Rnt1''@;'; put 'put ''VCZLT3tfQ1YoVGMpZnhMY1hVcVJjayxSIiZOMXt1a1NUOXMySk0raFs+SjUqLzg/eFhMWHF6KWtuQl5pPnhUTixXVVBtWl4wYHldKUxQaygkQWJ8dHNUXko2Tkg0W3Q0IXt+NXV3NzUifmxnOWBqZnRtSUZCLjsoIUFEKiFVImxxVzdxZyRFZF1UT3BBPE59SjZPSzh8UGFXOV9yMz4kI21QJVt5''@;'; put 'put ''SCZSQj5AYz93YDlrcEgqO1F2OyRBR0NxTkw0YUF3WCR+XUMvVThWW2p0aUBLXmNzeXx8IVNLdD1fOTYxc2EqWz88LG5XKzZpN10qXV9TMlZ7bHNmPTYyTSJ4M1pMMVZIcVdtTVApVXppeEZqSVh3THV7W3Fjb25YTCRVRHRlOW5rUVJKI3BDPjo4aGxKNFd+QXVfKEMpa0dWfitMUTw8cC5pQz5n''@;'; put 'put ''Om1gSnJ2TDpgPFoiIW1tO2ciVnF5UTBSLEJHPiVPKGQ+djpsZHVMQywrKEE0bUQ4Y1Q+L2c0am5tT0FxckssOjVQbX5Aa1Nle05zdWQuWHB3QlUwWHljd3I9WCYvTFZRe3YhOFU6cjFdRFhsfV9PKzopPHJLN1F5ZTFwX1E+JVY9eCh9SClWOG9Gdih2UDwyYVkjLCZDX3xndDZROFA+JGtmbEk7''@;'; put 'put ''VFNMOWJ9eDQsNEEuI1tZfmYsdk8kJnREOlVuRyhhVz9fZTRIWS5FPHRfVTB+ZHZdTis3TU81eXh8USE4d3N+dSU+OkxuU0VnMEJaWTA5KjMjMD1tbS4zdkBpWDkpZ3ZSUn5qb05TZSRLJUJIQlRjVlhWbi5ic3xTM2lHWTYsMj8vZGEvUitkVFV6VjVkeGEoNlUkU2RIZkRUZll4JTNAImhjTyh5''@;'; put 'put ''TGA7eVA9ZUNWYWNoJCNqPWRjOk02ZWM9cmllUzkxOE5ZPFF2LHZnXV12QzoqSEJNTWhfaUhYb1sqV31HfnZ+aHh2SjZdN1dERX1JXyFQaDp5K2xmLE59d2hVTl8rQ1NiSW9dYCMhOWNfV2grO3F1I3V4b2VDKzhtaE19UCIpSF5bXj9iXmxINWo3PWRxcXpAdVc6OnpqWHBbME5FdiJLKHIkI1Qx''@;'; put 'put ''WTRzK3shRH56Sl8lRls3fDNMckBkaD5EKks4RyFRUU5Wby8uTGs0MiNFS2AodCpYbyMqJUwrJllmM0Y8KzcmSl9PTkx8PDA0R3lRPFtxSCpJYFY4X2w/V3peMFMwTXVwZTl+eSI5ZUElflZseEZFdjI5P1QyeDQ8P2Q/R28lMFpAPUxLR2o8RixOWjFtfFRQKSw5ZjZ0TUAkJGB4KnI4Lih9Q19D''@;'; put 'put ''QzRrVT8mdmU6OzUpSTQ9cTRwQkYhcjtPdDVYRXJFKXoxSntHSHomNz9TQWxNZllhNVA1KVZvV1dNJCZWIXciWDFecTlZVXJKOjUkPzpFWEkoQlgucWZ5ZnMzO04yPjR8XkQ1Q2xhYVI8WlBWUjJjbzBiMk5TKHxkQXdCdTtbZzRbTGEyVmAoKGxJQU00d1AxTUl+dUhoSkV5OHhCM2l7WkJgWnlM''@;'; put 'put ''fE8rOWFHWWgrbUBqSD0wVyojcEpHQStBQyRSdDhtOkd1ZyVDaiZMZzZGYmJIc3YyRSNIRkwzRVRPN2hec2AiKi5ubn1ZQztXOStuaDsmRH12KW5zWVArXXUoZmAvOV1RaFs7Kks6UGoxZ3AkM2pCeSgyTHFMU1NKM3IrXXpRZnR0dkNpMmlKTCN+dG5pLEQkVmZ8R2F8X2cpX08sVVR8WV02SXt3''@;'; put 'put ''dH0uK2kjNkJFVEJUTjooLGFmSmNJcix4LnJ5a195fl95ODtjLzo7UExaKXdBRmZbRV83KzdhRXJZWUJII2lyXj47fDNFNjo2TkUrLGpRd2FPJE5aYSwrKzJgRmIqLzxNIm5SQD9nVnU/a1s4a0A+flEmQCQ2PVhkdiU8ODd0ISs7MD9jPnpObjF5UjpiW0QlOU5GKz95QDA7T3J6ZiErYWJ3SjA0''@;'; put 'put ''cmdnaWclb3BVaXVSZkhoRz1mXjdLIz9KfHReU2l9PHg3cWQwJH03L1M7VjsuSmRYbm44PUN+XnswdkB3WH0pS2JGVHprJCR9WCgjO2dxOG0hWTthTUorO3V+PFRoMVAiIz56KHZ7Oj98P0hIU21MfSoubiJ6aGs/WEpVOFdsfD9DKzFfMVpVRDFqbHshaWA2RUF6NVleYmlXY2xCQzpuZyUqdHYl''@;'; put 'put ''JmVGIz0qUU17ME9de3smMkM4TGNHOSFvM2dicmJIQ3tbQjFAUFlbLkljPXNLZ0w6Qjx1WiFGXn5XQDlzcmBdZzNiPnZ1KTRVOl4rKmhbR10pKDVlXWkiNSYoV1lqI2JgKXE4fnBZYzZ5eGZmWTpiR18vXmQqW3hiOzcycDJMPHJ8YW4lQCN1fWRZUiZuZyE3UjlIWzhEalUvSCtyWXhwWmNqZDVQ''@;'; put 'put ''V0VlVjdfPWpnb1hXW0dEZ3dPU1diRU9nbmF+M3R3azcpTUBtN0wyN2F+SU0zNn1vSltGXiJIWnspc0xeMTtxP00uemR4KV8oW0lZVzNETVoxXiMjP1o9VVJKVVshfkFQMTR4IzNqYjx9YiNnNzdTfVY/UHkxXkk9KSxkbmp7dVdtKShHKTwuMDYkJE0+MC5OeSgzIm09V2lQLEhNNHd2JjB7ZE9u''@;'; put 'put ''UjgmQVoxbUd1OVk5a3E6IUBeSjlOVk9gOHI8OjkjbjByMV1FMzZkbzxvNHByYCpyYkNke0dhSk8uO0x7RnFlZDIuY0VkJn47W2N6THZFQTJbaGcqeTA6LHxIbT5dfGF7JTYxdltoKkU2Sn0/aUhpcUdPdkFYPmN2Yzdndls+RyZoLm9LS10yZl0lNUV1eSRaPXhVVkVwT2VlRToiN2I5MEpkal9z''@;'; put 'put ''P2hJeCpWfV4obnZXKWVgRHciQ3lCUVkjNXdZJTEmPDE6NH1BNU5PcXxUQ3JYSlRiUHEiT3k1UCojO0Q7JEVuIjNzfmBkekRvJSklPjliUCwzbWREbHRWZGBRcU9yM04zMC5pJV5YKzY1ZSNYcTN1L15jUHphPGZUKGFTPDF2MUNxLHU8amErOWRaRD1kX21FWkh8YEhGYG9vOUJzZnRsOyNiQyI6''@;'; put 'put ''QjNxSWt3JHpMXU84SyVaZnpad14jV0pPfllNNTEmb0x0c1cjdzpRX1oqXyorQyVNW3A4U0RGcF9BT0VwSTlCKkFCfD5hM1YmWy8kdFg7fEwqTEJ4NmFTJSx0XnZHXT94MkN3Kk9XK31FNT5GYDkidkMrXyoqfTJ3O15aX3VbOmZje2JRJVJoflBGZDFgTUc7Qzc6NCszc1U2ZW1bKD5MfFJ2Ulh9''@;'; put 'put ''TzVKZltIJFNtal9fbm97ayk3fHdnUGxaOFNebUNTL0lQfGF3bGIrKHNMZ2JRPkksNn4yMm0pNlA5L3lTUVlrI1h8ckBNTk9gLD9FZEUrSE88ckdpUSY7bHZwZjgrfStDKnkwIXRoRkUpNCVRTWZERytAPiwsamlmeCtXakxnb2xMUnRkQUBYaDQxQ2NHTFhAYX14S1A5OWNgOm09NW5bJmtPMlc1''@;'; put 'put ''LjBdeSRVWmp4VGRrI10oXXBTP0sxfHFSS0goPUsjZ083RVQ5cytYV25uR2QxOWx3PDxpJlRwYiYkclJLKjBqU3F1OkVEW308K29fTTYxNElLIU9LRU1pSz4vJlpYYndsY3cuLG1mYkd7azFvTHgiYXsoWDZfM1lNNWI+PS9BK095OTBwVlJtdy8oSGNfWypaOShhfHZEdzx5P3VPYHYiK28qJE8l''@;'; put 'put ''RihWSltnKG8uYGp4dzU4eXdqUTQ6bUJ3Im4kcEllWiZWfkF7R1pIfGpZbEEqYWlNT3Y1YUg/dV9vVmsxPkxdPzdAWnguR0U/cmVvbkVkIVZ8bWdkanN5VDA1fV1nfGM0d3YxJG8sWzdlSWNHIl5WSFlaU2VIejZOMzp2d3NOfDRFM3RaI2BuXUM1MFd1R3FQdG4oZWVRWWk1YEY0TFs0LnRgfn16''@;'; put 'put ''eUA0SXovNTQ/V3F5bzs9bmVYbmhbIVMkKjpsamZtQDBsc08yV1dwYUxOXi9QTStlTSxTKXpMVE8wSmRLK0YxWWAsR2YzIlJOVzdYa3wlM2MuUyREM21NKTZfVENlY0pMQFZUQ3R4JGxIQFd1MlhAJXhILFtzX10+b2wiVWAod1lmNGIuKCQpIip6MHVAS3VgcnRETWpvbShETUR9KnRNTTFmdVo0''@;'; put 'put ''MTxiIShbODxXPChpKWxrYFcvbW90ckBnIlQ+PUNTKVNeS2Uhck9lPC5+Zil2dSV5ZE4xSThtZlY1bkU/R1lMO1JqdiZ4ODMkR1RuMEJOfkhSP2l+NVdvU2s6P3RMU2d7VEo9NnFkJTYjLypvOk1UYXdmVCs2KD11SGw3eG53Lj4yVFZpcml9bHloVDdHM1hmWFpUbnBWe1VILFhqYCopdD46JXhd''@;'; put 'put ''djp6VUpHOmFudmoieCxbVVNXJSole0ZYTGZ6Vy8kO3NCdy5TZk93eThPeXgvUk40YU5ZNEE8KXNieXhNVHZ6aiMve0RFWmcxdHpEPWpYXilRSXwmWWteWlRhJX02Ild2VHJZS3gjNmM0OTZON3RuWUZlSk1mcFQlQSk1ND93Qi92WD90al4zfCx1fCp5Y1hzSElSQGw4WUVoLmJjUmIzVHx7RmNq''@;'; put 'put ''Uj10OVQ7JlA0OTB6PU9OKlN+X0V2NDA7L05vazJoKVM9QExSPnx8PilHUihWWF1zOHNfQi5kTmB1ZVJ3aGZAZHhxfld8OiUlaE5jPGF1ciZReX4yL3pdPz59W2t+bV5oTmR+bC5JbXlVbDF6dzRKND9wJlE3KilHXyV6UHY/RVckQWlLRD1kIVV+VVBON2wmd3FUXSsscls+KWNeUFhabzNgWSZa''@;'; put 'put ''JD1WeH1YXyRINVFCUTZYLmY0JC5oZmJrJjdsT0swcEwmKFdkL1ohNiYob1sjM25FYGphWU9udjpCcmZqdXVhbWZEe0JbXnRzayE0JmNhTFZpUCUqPzMjLmE1OWJhR2wlUyx3VyRCPmBJZGVvfVo+O18+dllAeDRfbyE3UCU2fGZzMGY0IVVqVkNTVWh+P1QpfCphdCIhaDlIXypTUV1tLE5Ve1Bw''@;'; put 'put ''P0ojfTFkck8uIWZHQVRyKn1+Ti4vc2tiMStvfVBKZkM4NkNELyhESClPVjRaWzhmJSRHXl5pNkt6Tysma1A7Q1YwYXx5aGNbRDY9TW94cl1aXn4/MitocSpuZXU3UTlycGR1WGQ5Y3RDUW05P3sqYXFqNWIkWVdaXmhaPXRmK1FJKGFnO05peWxiW1ovV31udyp5Qnd4P3k3bkxPQGVka25Fb3tj''@;'; put 'put ''JkBWRUVuOEwrRyNaPXlVbGFEVXUpQnw2VWZjXSxdQ1lvVnRaK1AoXzYkaGJ1MyxNb1QvP0pOLERfPUJ0XWgobSpKIV9waWljRWtreVJ5VWMqSlRLKXBxdDhTMFoxa1opdUpGL3xAVHRsTFJtIURnO3FlSDoyL0JbVXloVTwmVSQyZj89XXFaTSpgUmB7bkxrdDpvfD96VF9JJEAsN0VANTU5aHhr''@;'; put 'put ''Y15Sfmo7LEk7Wl9eJXQoRVcvdG1Yb0g0UlFIZj5jfkh0O3A9en0mQlB9JilZeUReRyklaGBQd2xtWjRva18xcytON0skRmFpRGcrcXJdJjYmKVsqVWd1TFgvUXd2Ly9laEZEZWRJclRMWEtxKikkNW5kIm9kVCtXfGx6OSI5Q3lmYnp0cE8wdDNXVzY/UGIrfE1VWTtaWz5vLjFDc2NGKm83PERL''@;'; put 'put ''NixgJndoJW8xKnIoZGlVXUcpPjF5VW1LTVplPnZeNWBQRlJpRjUpPkx6RVtMXm4mOlpkeFtYe117Slt5UFFfVD54WEo/XkoufVMjVktJSGchS2tOKE5sPXhqOWJJWHFXLkRucmhaJCRAa0lkcU5AVWZWbmlxcE5FQzAvVyp1WFBTXkt2XlUsMG0yW3lVYCt1RytHKDw8QE9pNE4vWD0xT29hIkw7''@;'; put 'put ''ZXV1ZX5+fWtKRTJuM243NFhhP3Aye1taPklraksiY21SU20wYC5YU3NtUSVVI2o1MyYhdEB0Kz8qfSt2bUJTYEFGLyJBWTFyZF9tZnl9aDdwP3leflMsMlolTWUvKStoY0lRbDVvbUBiW3U1cko1aXhjZkF6MVlXakdiI2c7PmNRPVE8LyZGdS9VbURKQTA1ayprQCNnbTBofkhPSmNqMk9lSWth''@;'; put 'put ''cCwqSlM/KT95KVJjLio7JGxJeGRRen0uWyxxI0chLEd8RX1ONmw2KzNCU2lfMFpIY0NTaT9YY2wlITp3NmFsY2kiJHhaWEIuJikvYUBZLlY9X0Y4PTRFaVNGdlQ0REQ9JDRgWi4oTFdBPEpHbERALi93bEI+eC5ZUjRSPVAjY1ViLHAmVChLRzRyT115NFVBWCEiPzwlZH4uOXlGZSltcT1FQ3ho''@;'; put 'put ''ejt5JXxvP2EyeEMyKGdeVzx4bzpxdzBQfW0+cE4iQEVvNG0ia3N+X2UmI0tyMUlZTSk0RzRoYzM0JW9ndC9ofVd2Z181KnM6QCV3eSYyVzk7Z0FhLEd4QipTaWtYajxrRGBJZXguT0oxIzkhU2whb2RqckNdZihJaHp+czRvdlpHeDEqd1hucz0oK2dSZHpfVz12ZSgob2RFNS4mMDomdEtNLmVr''@;'; put 'put ''UU0mbWo0V30zazk4S2N1en49TTtCYUQlMFc+M3VbOn1kUldldGQldndHT0x7TVVXcWMpWH57dmN2VCEmSnZCOGdacS9Aa0NlTHg6MVE+OW90cXM6ImZTTCN5VmEzOXZ3JnQ7K3t8YHEhO1RpQmlwJXlwYVIxfmVNWkdYXnRMX2dDbTU0RypeV0ZtP14+SSxUfi9KeDJscGpTeTBCczRQLDNGXUow''@;'; put 'put ''MHtHZ21hQyVYVUNKakIhOXlRIUh0TkRaOShjSjI6S3F1QmFuTiFqIU0rZC9rblhCeVJvYEp8Pn1Uclp5NWlgYklTaDE/OUUjVTptV1ddSml1OXpZSWVTMyR3NE02KnlGKF1UMHlDIyIkVT9zWDxLbEx4fF47cV1zNFYhY31PZHRfSCUqSz8uPXUmT1hRWjB1TixQd0VWdCxpeisubjZgS3pMO2ta''@;'; put 'put ''SVh7amRhaDc2IWlIYCNfWjldIXhndlY6RGVpMWEpZHdLPkU9JkVhS0Q1M2Bvak0jfUFAXVQvZklOWU5gbl1FTS5tPlVqdFdROE5HfkoyRiM0ayZmR0V9PnB5fWhtXXZLRlZbJGIzeW9kd3k0MyQ8aGljbjAjNFB3RUR7QWMpVy4wRGMxdV1KRmtUOm5ZPy5rSEhGQWt6LndLbDEueUtYUG96dTMr''@;'; put 'put ''djB3Q2JTIV9BUkpMa0R6I3hDaVc1dlA9RyI4a0JAXWNifVI6QnQ/eWZSZ1pJdEwyfFNYLFhaRC4sPl4lP3BtcX1lSHAhWlIvMjljXmpfZTR8ZHQzU2hzd2tCRSs8ai97W1koRnBUQmprdEdkaSgmNEE/Jml+Pm82TUw1TWY4Lmw3Uj07ZDkkTiUkVzVaMlM9Z0sxby9sL008c31lR0Vsb2gkKmBQ''@;'; put 'put ''LiRKMWpSezM6THY+YGZ0VyMoYlFtPT4majh0NiNsPjJ3Pl0qKGFEcFtLNG9Ta2NiQSx2QDIrJjJXKkpWIzolNjA3Iy5PZjpCT292IksyflhMMC5KJWVbRT5lNkouST5sK2Awa3YuamNTQjBsNjdSYWBBTWMqQlJfNUl2IVswS2tpdEZEbS94L2l3QWooRnM0RFdSVSUkbj5vY3xGLGVTRjt3KjFD''@;'; put 'put ''SkEiJms2OV11YGU6YSYwRUJfKj1gUVBTbiRmeWZ8SnpdWFJUdm1VXUpoJSEub1Q/THguZDUhZGtEXlpfYUVBZDExV0lCPjQlW3RrMWMoe19xIkolU3VyVSZbTWNKWSw+TGxNYF9rOV0pW0t8PiU5en4+P0pXLG5ya1duZjd9P0R4JSQ6TyNRTFFUdlJJITVWIX1xSkxmOls0XWB2cD9uLiRaIkoj''@;'; put 'put ''Z1E6Izs5JT5gfTEvTnNVJVBjXkBvQjR8UEcqRkt7KDpUUVNvdl1YQC50cUxjUVZrSzVueVdxSFhWOnFQSnJZeX1hMX4jaV1IXiloTDZJWHgrRzduKkJLLiVrL15jT1BrSiszQHBZfk1+InclZmlnMSszLD5vK0hMI28jPkpuWFpdeHN3Un08M01NZCw3N2ZCJUBoSiJtRF41MSJsNE5ITywqWVFW''@;'; put 'put ''amJeWk1NPiY0Qis5MzU9KFddXjw9ejp5bz4jO09Bc186RClwMVRfSFFNUlciNHwuYlAsZmZjLlJ9WTJ2dGUoa048bVUzazJFXzJiM2hCZWh2a1NuN00qVVlyPjpSVWYkcz1tQkozbnYoRSl4eyEwYEBLbWJSIUtWLERne1Mvb0hvMmpUR29kI1tYazByT2ZnOCQoK3NHNHRZVHUrcHYyN1Y+M01E''@;'; put 'put ''cnJCWTl0TUY5USYkYEl9MTs6N1g2ZDQ4b3Q8Un0yZXssIm4lQDhKX1h5JWo4czpMbCtVRHsjLFVaWyt4SXpKWjpadzRwPCl5Tnp7I0xTUFpIJmN8RV1CKnplbWNVOyg6PmEpVCRXfGwucXshIjd1TSood3B7O007IXB4K0xmOF5ecTtFZ1FMKWQkaClzJkcpYDJVT34jV0tgbWpHbyZyVE42Q3lw''@;'; put 'put ''cCY7KGJ5Q3JdPjdzNzp2PUBvbFIwLixmfnUhOH5Gbi48X1tleFRzeyJaNCsvYFglejRQTyZWdVNlTWclc2MvfCIhR2ZlWElTR3l7VkR0VVRSQSFTdn5hM2Qxa18vVD1yMXlmVTwpVEJ0XVZ8KHo6fnBsU2AjcDR3SlZ4LnBLMko0Vk1mPjhqOSNkSHw5KTteWD5YUTZyUnxDen1DSjh0eSx0LD0w''@;'; put 'put ''THI0ZithN0JQRVJFPCJTcEpvSkl4WjpbNkwyQG5ENWJoTFlTdV07YzxHXXBbYjY8dHRlfX11aFZiJm5gKTA7alhmbj5AOkBRZWhNLHFlQnEqVXUkY2A0SDFEOHwhOlcuM2ZGOXUrUyx3PTA+KG5PRzVSWn11aV40eGdWT2FKTUMlLHdEU0hUQiowbiNgPEExIyl4YTxxW153PEgoYjRSbUl6Vm9v''@;'; put 'put ''M31IYCM8cll2QUcjVXtSb2xkVTleKXxpeCpFI1QvTGBJNnoyZ1Z3ZmA3XzJlYntgKyJTYUZPPWhNPVhtZChLU3NVKlo1MEQ2aFh+P2FudU5Ldzx0WG95aUQmJV1RI15CZnB3RjBgVDRoamBJa1ImPyRVOCt5T257dzI7cDozKS5RX1Y/SV9zMkFMYzdVfilLKDxHJUBYUC5EPzR7S1VZJml1N2Ri''@;'; put 'put ''NjJNbVpsdGlUVml2PSlYcWpfbFJHSmk2KEU5WjpyOix3KTw2M3BsPW5xRD83NEVEMlt1ZHVqO2BvZVBHZDFPKj5sKnUoPWJPcV55O34sRTZ4RS4/JE9Zb1NYW1p0RmQlYSVEbVRNP25feGA5YiMub1UhbHZNdCtRJUpUYlc2OnY/fHxXI01ML3E/dXR5Z3xiUUtgSl01IUIqNWopemNafFMxVVso''@;'; put 'put ''X1tLRHdzKFB3WUdEfT91ZClgNHReS3Z1PDNEUCRmT2FFYns3cmNITSglYTlrOmMsaGxZeytiZHluXkp9R2UrNCVdV1VIV0AzLFFFSFgjRjM/JE1sZE99I1czcWE2VyR3Rk5NRlcwNFMyVkIiUzhAaDE7TUwxKD8hLCooUkEsO0c6eU1+Jl5haHY8JmgudTxPS0ZhWllBRWk5X2lRSTJSfEZiPDY+''@;'; put 'put ''Sm48T3ZnVVVhSF12UjZgeWB1ak92WyVAUDRgS2F7Unp5dD8vOihoMjp6ZTdRWnYpZ3c3R1dzbmUoN3UqL2NqNm9RaC5CcVVJNTQpKCZFKWJGalc4eTAoXT5ILjxQTjRBZigzKnt2S2Q4Y3t7VTN8MnBacFdLWS9gfFB1WDVoImZ8KSpDYEl1JUxJJltjKFgsSDtCOzJ4bDlzeiNuSURqKTg3fkZs''@;'; put 'put ''ISZNSkM1TE1jR0FIajZ0SCU4SiR5VnprfmY0TEc+SjYkcCwvTkNoaG59Sz5FMk1nWThuMVJfPUguYE5pWWYpS0dteEhOL11NXk5tfFRxdHRSTnBqYnU/PFZ0NzNNYHZFeXZ6QHRPbTpINytBRSNLeWNYbmIjM1QoJkNCPls/ZzBBYmRfPV1+XSVFT1txN0FPN353cXB4bFpyZkRtdFdbXXRMKz5F''@;'; put 'put ''YiNvKmhmVWRacj1MKVhvcktFeVRFbVMqS1F2WDl9dkEmOkl9Z0IzQClwRlpnMl1xUXFbUCNuYiF8Tj9Ze1V7amgzKks9MzVgSDMwdVRRamI+JD59dEAyaFA9OXxzRTF6KWRAXltjRm4jKElSY3ZmTWB7e2s8IShrLkRIdnJ5PCNfVFc2OzdUQyRwNENPX3xNIzw0a0JIPkM4MW9obWQjNCZaRU9n''@;'; put 'put ''I0tqP2FSfDFvdCVqZG9JeGleeWRSJXQkZ2xLMCRUNlNRXlgyMnE5KTkuPUxTemlGQWspWm41VyRUfENeTk4ldX4hWWM2RXZAQjZKK0htdylSTCYuUDRXVXQmPi4kMjtaZ2RvajV0QkpGNkVdMzRNbklVfSk7M05MfSouOldFcXt0fjdGYnsxKnpxKSFaSTEvZFlzcFJ+bzlmeX0sUCImIm02fTZT''@;'; put 'put ''MV9CYl8hVEdQQGVBbiMoeSZJQ00lZElmJE1rUDd7fFcyUy5NLCRCck46dD4kZ3IlWX5VQFA0IlEzLG8uV1srNmpmUShuT21YQVQiUDNjS1o4KVVufUp4QmtlWSlMRSF3NkxidzIxWSVZdHNOJFtBZjhbNmFwU0QuMWlpKjpIV3B1ciMpa3hYXmYhKW5jWns7VVAkYUY9Mj89fXBAaTZVSzZ9OS8h''@;'; put 'put ''MyVwYCUidzdRO1cuPHoxX2lpRkE+aUJuaWF4eFg/OEFZQmlbOVVKW3M5LFNxUD98QlVxIVR1Z3QpKzBXdnVpZjZzdzhpfGJ4JUN9YUI5P2E7ITMlUXo5eVdxdm59XTprYzAxQTlGPUtKRX0sdG55N2EsOk9sMCF9I2JfZ0VPPFRlT1QpZVE9QSNKU1FUQS49MHN8JnRVMEtZSVl8Ukksa2NKakBs''@;'; put 'put ''M3BNOih1WlJHQ1RzQUQ6dWZXdH1uMz5hbFZgUHlDKHtNR1grZUN+XXFJRitzUnRFYUlEI0VjPHBCPEM8W1AoTnlWUjZDazQ9PDM2b0llfXIuOiwrPGZlJXZkWVVnc2BwJmQ/aHM/blFyKn41XixVR14pNmVFQi5zdVFiZld0S1JlJDYsfC8mNXJlKVAraC49eTc5Q2kvaSU+O3xYRGU7OmJZZEVE''@;'; put 'put ''WGsjTj4xOnNnTmF3cz9kamklRXBGUnhsSiFzcmg/e0BTS2ElLEA1NHF5P3wmV19FenVrSCRPe3x9bEl4ayJ4OWF8NzIpJjFjWU0wN2tsZDshOyRmYUJnW0whXn5kZF9aWlZyNis/LyQ9Iyo+SF9rVVEjNVBjOyFLOj9GX2QmKikyUlkoJCFlMCxjbVtyPzUlNHZPQkhqW3JAWlg2b2hkVWJEfj5w''@;'; put 'put ''YkwkdHdLNE9RTDhPLmVjP1RpOFJSK09hbk4ieW03fVduLmwlaX48ZzJxcmYyWSs4IjlzUW5GOXF9N1RkSWM0RHY3Z2Vjd3Y6MWZhcVkxaD17LElBWE1bInN2KkJVWFIvX2M0bkMuWT1YSUtbRzI4Ti9LXipOI2psPGFrQG9zcUYiT1ZweXZHVD8rO11ZdTVqWy5QP3dyOTM2YEwwY11fNSMscT9B''@;'; put 'put ''SWc8IjlZZWpFNShFRUJYIldjWlguR1Z6UkxYUERAOyUsMCEzRFtSZkN1aGY+XWBhIWRjZkE+X0J1aFNUNzlAYFk1e291TTZCJigueEx3PWdzeiZ+KTB4eGA5a09hNThwWFM7TWozbmYqa3khPFBnMFkpJV1FbjgvPWIpXkU0IjRhVD8mKDNhNkskKmg8cVY0ZDxeUkFxX15gMXslanlGMj54cmci''@;'; put 'put ''JnJUciIvRDRJNy89TltOd2F2NDNsS3ZARmROPG4sajN4KDVDZXc7OGdNSFZ6a0dbQzM8dCszeHt6ZktwKTRBaWlxYCg4c0Z0SishY2hnPkolLlVeaXhTZlV6Pm10L2BVWDB0L0RMWDRAJmp8OmBiOVlGb3FZImcwd19tJTEuc35+SSozVl9MMlJbRXpDfSN6RWcrNmxvb290W3ZlLE8kN2QzKEcj''@;'; put 'put ''YzgrZz5bUmZJJWJURT0kaGBSLEZEOH4qdlNfaklRJUcoVWxYZSQ3ZXVCXjJdeERDOy55d148b3hGWFE6KiUvK31AJkE6V091TyN0QmJQVmBmPndlcTEvOlVZNSlidzwvUlc3Wl0zMkhpZWA0NX1eYGlsS3JMc1ZfIUR5MSlwYmwoVllhJVJ7cndyIUY3d1NlXnR+XndoJE5xWiZKZiJlL0dZeHVf''@;'; put 'put ''M0lpLmleclhUMU56VSFZfm13T3ouRD82MHY1dTJUJX0pbUthTDRoK3l0Mk16Z2oidWtvTjlgdiJ8clI3VEp1QFReTHpALG9WIVF4JTs8VGU4b0w7RENYVGshSlQiOVUrQyFHNSk/UyUodWdAJn1XZEoqTy5Kd191TFlkQHdoVjd4Yk4pZSJqLCxeOUQ/LDIqPCpMOFopJnAkN0djakYrUHl7OEhM''@;'; put 'put ''cks/K0hHVW5VVnhdcDtLKT5ffDomJXZHQFVUZ3EmRVldcVlyOSJKRXwzWzMxcEZ4UEJbVksjfVYmKXxUfDx1X0xZS00lI15SdDpNMH01KXopfT96I2wlV3FzVGshcXovfG4oWkYySF17V355VX54Jmh8YnYrRiI/SSZHJEYqRmpCQFFmNXwpOkFFMHdGOVFBOT9qW3IrY35HOSwiKHo1S0pFSjJI''@;'; put 'put ''UkhrRXksYzdFJHo3bFtWeDpnQl1yaDZWT1p7QDFHTSZlW350dHA/eFZMZz1OeTVfT1goUWhXdEpHcnYwfHZFKCwmJTpzNnV+YDdneGBJODtnY3dSfk9WdihKW0h0KF80aVJzSF5mWE9WYSpMNkkzcTw7PHJSZS9IWD54KiZNQ1cmelZEeDh2bTN5PUw6JnE+PF1gcjx7RShKX3d5cS88NV9SMCFi''@;'; put 'put ''P3xpaltwYHJzMzE+Wj1JOXAoZTl9PV5Oajc+QDFqcXpJfT9jQWpeMyVub1B1LiVZPzxSPHQ0dTIlZXJzeGI/JEtUZUhRVmhlOWpmVEA9ZEZZeXEidnttSHUmZXM+eSsrazFtSWIjTTswUixBSihyZnRDTUtaLzZNXW01MltvUykybHhiUDR+ajxfK3g3bSUyQmFDezhuNT1AQ2Fid2NSPWdxREcv''@;'; put 'put ''KFRuVCE4Nlgkbl17QS88ezU7ckNQUDk4eDNgUj1tVE19bnwoeiY4MDpZZ0ZNKmNvdjZIKld9VyhvPzFwVHRETkgyNEBaNDIwPmJHSEMvdTdeRnsiZFR2TkxsUkswakQwaGNSUkRIVnIqUm1YOmxOW1l6dXZINktmO3ZdM2IxKDgmKG17bmVVMDkxUEhVeV1+OmgqRFNFZHoiOnhFOWdIX2dOVDdm''@;'; put 'put ''VFNPLCFjTzRafmkoLHJSd1MpOUUlP3hSdyhfbX55aFpxO0hINSgxIVRPc1lDWHtYPnxpWTo+eHRBV2RPd2d7OWRQe2NXIyZsQ0ZWVEQjS1dYOFpleSVPWntqR3JiIWwvSG1SdzxBVXpZc05uTGltQHc5c09vL1hBcU9CeCsqNTRpNjBHdSFGL054P2RDaDRsI2YwWnB7NGRzUDRmVXE5JnIhMyx7''@;'; put 'put ''NDxtT35WeHM5QTZfcypofUJkYnNzT0h6NHVeVERGTC9pbCR9Y29oSzI5LGJZU2MqOkZGdVNPNSw8UHtDPjh3Uz1FY0VQWjpoZVJwdTIzJEtjRlJBQz4pJC9XbCRNb14hZ34+RntZTmZ6Wl9hREguOyorQG5vPEs5eVckNkUweHFELnIqMjhMLGxkPHI1SUooSVNgMnxjb3k3PiFHTWwpTWslQUIk''@;'; put 'put ''TjBwXVRmUEJOVj5MeEswaW1IJUJsVU5xQVszbEModyEpWy5CTGUpIiM0Mjs0MyFhRyNTX3hYIX1aSVtmLn1ObihfO2pRZGIqTDx0QjlednUuXmRPTGkyTlVMUG52aFdgWEs1V3ZUJHk7L28iVW1DO1orUlFYa1h2e1BKXVt3cGNGaGFoI2ZFTE5zfGNbUXdveEF1SU0jaWpIPEk/JT1ZRSVzaiV4''@;'; put 'put ''VGhwNn1HMiRaWXQ/dy9dU1E6ZXVpNzxGNFAsd2Q1fn1hJFhWPyVAdyVLakk6KnRDWUdge3h2W2k8WHEhdSkienA5LGx3JGpqRWQyZ11QUHIvVit9WVp9MlAsZWRNcWgvRWVZJjFjNHNvenBFfnFBRGVwT0M4bTpyKktNWS4sQCtZWVJ5Xm55T2lzXlImU3tvOWNDbDpyalhEP3h7dGxXYH0wWEc6''@;'; put 'put ''Q2BqS0dZRiE4bU40cX1CSi9AWDdfTVZpQGNwT040Tz0pKjZpNyojLk13PERbWSFyQy8wLl9TemhZK0pUbjFyWiI+T1luZn5mcW1ZSEE0X0pTUC9+aTY8OSMkcjlyWD9SYn16WWdSSUY7dGQlTXtxZEtddTtDZ2JDTiw6V3R4O25kd31ES1F5OHl1a3xsdkJiKDh9UkxOYyleL31Xa0Y8elc4Qnpz''@;'; put 'put ''Vls2OkJ0fUMhRjMzVmNjWUVTaCNFPHUjMjojTishVkQifjZ9eShlO1ppUFZKZi5afEZHbEN6V3F9OFZaRzBbWjNaYFN0KCNYJGpUT2szdSE2cyFAUH5yK34kOXRTWy9je295SWlLckJFWTMiO1VTTW5NXyYjUTEuVn5DbkUmd0ldO3o6JEtgVjBGQDJZRyY4dEZEZXxMTk1mZUdHWiQ+O1A0QlBi''@;'; put 'put ''KjkoIyphNz5iIlgoJGIpR1J5QlBhelNfSSx0Q3B7MUxCPT02d1UyYUBvOzo2P2YpPU9gc2hkI2UpZX1dI3VVZWFoRmRNKU95R0s6TDhrL2Y5MGU+dV0xPU0jQERrMllwIUFmOkY7WHNCQmRAUFtCflBmI31RJkQrQHRCRiVXcXdsZEtfc31iZlU2Lls8fnhNeXUpeW5uQU1Idzkjd1BpOW9gZXpY''@;'; put 'put ''UjNpQEpnYjpDRF8iV2c6TkB4Y0pDOmAlLFIvWFhubGg5TCR4b0tpTl1nNCxua0k6QEQ3Q0htSVU7T2dQYihfelJHMlR4UFJAVG0mRDJYZGoqJH5KPzY+S3pec2FuMkFKRTdjPCtiQjt3JE5tQUFpeiw5dD9jLm46NTtxJX1efS5xUix+TX5mW3dKK0BwSlpoZDtsYk1TTC8oJkdpbTw0UHgvS3Bu''@;'; put 'put ''d0NtQHdRR3QyVCUsNXIyUngpM05tZXBnOHklYW1AZ1lqZm5FNTgkMzoiXks/NzFhVEtJfklFNVVkMnhgMyFQcnd6ezY3Qkd6fS5MPjk6WD9aYDVqZGwsRyZROTVuVl5ZZC9aR1s2d0woVXg0aW8hampvPzZPUmpWMFtlVEFdek9ZN21oUWplbjEjT2Jlal5kNCk6U21OOFs5djgjNFYmRF9ITUxh''@;'; put 'put ''QyNFZVkrOjZdVXQ8S0V4NTEqVCFRRHgwVnkrLDVFKl5VUlpGTHJ9ME56Z0BZbytZcUlIeHd6PWlEdSRMVTouRUJ1LDUyWFRwYV57ekx1QGx5YjNQZXQpS2dzbHh8Y1J0M0ZAXiQxOnt6ZXg/KixpJDUrZGZMRzlEej4yeXV5KyVJJSZ9PDcpLzQqSl8laHlffE9bKCVoTWk3cF1ZbDpnd3ZfUTEo''@;'; put 'put ''WF8kZ3l+ImlVV1EpZEJoeSR9UTJhKnorRSxeU21dYXRxPT0jdTo6JFBeRH5WfURMb2Y7XkU5SGNmK3ZJZ3NNSjRxVH1JUmg+RDNTSFUifHNCZV8pbls/dEplQio+TiheZE5beUhIV2pKWWx6N3hWVExkeD58cU9ISSVeRGcrNlNmS3spZTJraWtXMFJHTyN+Vms3aXldMX1gP0l2d3JSPzB1Qihi''@;'; put 'put ''dldjb3NDRUcvJHx1LEBbVzY7QilEUX53djFjNSxRfihTRU90fkR+JHowMXtGbjNtMmQhaH5XV3pFPyVpMFNqcUdEbHBYXyUoPEBnK1ZKS3Rra1RjRSo3Tnx9REZfU3MxMig7WGNdKCNdaEQlMEpdbkwlbDsuaXRfXTFYWit1Uk9OJlYlMlRnbnI0NX1KfE5vLE5fRlBWOTx7TWNYIy9UQ08mSVJi''@;'; put 'put ''ejIueUQwWT1ATCEqZ0NLaTFbWFMkUlE/eEtFSDBsVUNeKmMheiw9N0JAJnZkbHIvO1N6VEQoM3pERllRQXo5M3J1VFtFfixjSzJFWGY3Mn5TLk5TMGtINzBTdnAqLltAdlc5bT5ZP2llekZkOUd0YSRDUUNHJmE5SFZ8I3Q1cyFQMVkpX0U1XkpfdC8mXlBMKEthO2hhIXREYSZ9YFRuRXhjPF16''@;'; put 'put ''dHdvZGx2MypxWXtNRG1BbmM5PXxxNWo1dEk1Uy40V0E1dVZjOUpkUXBoYGJydzlPblohNC9WPFpqemQ8NjB6Y1MrZGxkQzsqbzVFSSxHLj5jJD1iNmJ1OWpJMSQkZmlqX21MKkFRViMkZ3VtQFFyKmhddU0jTF9XM2Fhe10+Ll9jJSo/R01jMEBhTXI6fjBITSEzeXRyX0osdUg/Z01zNTZXXldu''@;'; put 'put ''UFdXWGtvWXRrTnUvTHE1fSJVZF8zMlYrcl0lI3luKl9XL3BGNUBCSUxeTEh8VjM2ciN7WTp9Z0MzYUBKUiVuK2tKYHoodEVbfnNkayt0T1RyO0g8cHRgKilGVVdVJT1fdkZeU3VRPUBLWC5pfWptRjtBdSwyYTFzX1t3ZlV3UW5Mc1tEfCYucUNdVy9Sbmd9Oj9mJWhOSEU2b1Q7SGw/KjdZbyUy''@;'; put 'put ''K1p5NnFASVIsWiU1LEEhR29oMX49KnBmXi58MENyQDc+KyIjd15fcS9Vekl8RXY3ODBANFNfXXZ3ayIpLEkoTD12IjtsWFE8Pyt1fExwKT9Nc2IhMl4lYiMmYzE2b0w0LDpxV2EhWCJGJUN+c3YrJUlVV1YifiFqZ34kPzE3Z2lGR0dCYXlpNz8kUDVxRF81Y2J6cntXO2RkMSp6QD4lWV9mfiFq''@;'; put 'put ''JCZdfkx+T0o+NnNnXzp0eilnVyp1T1Y0PXZ0a1kjXz5QKjdvWXdAJXZiNGRHNXMzMVBtQyxMTD9jaDBgfF8xJEQyN2VMVF1OaGl5elNXMEJFOzY+OUN1c0dgfVB4fiUjSSYjN1ZjKnApJnh4M1kyeWJFPD85dlkxMTZmXmdHWEI2N2MlRGJYWUtFWTlWLGhTcW9SLmVefDZXfHRqb2NpezRkP1h9''@;'; put 'put ''U2ZCeHBPYz4vdWdyWCh3fEBVVFldPCJfYzJZJX4ob0UhVFJRKms2L3JoIT0yP284MH1nNilFYTNyaDZUb1gxal5vIU9NP341KDNvaFAyIV14QWFOU1BrP3V6VExnbnY0d01JanIpYnV1W0hPejl7dj1wRjF2eSZCSTFFNlAiWWIoKUZwXiNBTk1Ca1tqSXJTNFFbYSphcTFednVVP0lpNG5vU31u''@;'; put 'put ''ZVF8PyhUQENsfVRWUW1ESlp1TWc5OWt6Yzk8UjdZeD1DSXshVmtddms2cmgkRShoYjE4IjV8S1ovMFRaW3JUZEliLm0zQUVGZTpPSnJUfkk0c0VqUUspKWsoUk8/SzFoMiVSfHEuUlVIdntEfE9eKjAuRW9FXj1taF9+SFRXUVFqW2RnYSZxQE1pY1Y1N1FZYkp6KFkheFdkV0V7ZHskP2Nocnw6''@;'; put 'put ''JWFuRXR7PWJQe2dnTz1McjRUeWc1NTl9O280ezFybUJ8c0V6Pi4qa05YcjdbZX1LcSYkSWNeVzxNXTgqPHhZIWtuaEJEdk0qTi80eUdxMlcmcmBGYVAxNlA3dD1Lbyh8QWNkelhRSygrNTciSE9kUHA8OjoyUikjXVlLSTQ3XjxRQDE6cmFfKDghPTQ/bkBQfmxdUkFTfX58Jj8qU3JhM08kMj9i''@;'; put 'put ''P0ZJdGshTERffXgsVkU8Ok5oWWpPc0hCPDRPTk4uYE9yMUAsWUVaYlBjamM8alRuPWhNSng6dW84QHpAcSUhY3IpKktXMXg5LGspZG9XISl9XzA4fTlXKUptemZRYkY5WCtUK3U5UCVCQ1h7T3l1dk88InxeVDVfP0JrTD9pPXI8W2dsdEJgaCY+KEViSF1rVysvPm1vXVZVOCQ1QHEmUEEpbTtD''@;'; put 'put ''ISVdekYyemNIM0VOTUVldjFUPSpEcWh9YGA7M2hSYHc0K193MCwxOktOeU0qdTx2MlYzQS5+ckAia1NzYVY1IztFT0RoJEVAbXBlKS9ZL3coZ3wyTSFwfGZLWmtxISk2flRkeyMyQ3Z+TkVoVmlmM0J4XilnQDtxYzVwViU1VjNKSW9DenFuTjE0TCE8LlYkKkJGQ259eHo7VDxIOHxuMVNGLHdX''@;'; put 'put ''JHokSCwsOFpsPk56YFlYaT9zcFJsYSgoWzxUSyxvKmwsOHJVRjA7dyFQbFFjUm1MZENmZHFaTEFlcmA7MUBFLGxXbWVCdnMwKD46WHRSRT1SMX0iPFY+Nll7OnFoO0xyY283KmcuWSZzOWwoekliQyxuI3chNyx+ckgoazs2K3huPjRkcWBLOzlXViNVWCosZCRAZkZMbmhwVHlTMDk2W0ZrWiZK''@;'; put 'put ''akJxKiJ7JHBOSyRYV0BlRVR5I2c/VzhnKDUuOGFfLyFWVE88PEd+ZW95N2hre3BDWnxrJis5XildN0VqKkosc0pbOTJyPC4xRXM8fC9SQm15fGxGbDRWW1syeypLK1hyQmg5WCxKUT12IVBvJEN9K1Q0Ol1FR198bGVbRld5MjRpajxgeXAmSSV4Sk87fSZ8Y3VRJlJqOyUheilmIlFtM0ZxR29Q''@;'; put 'put ''QHo8cHBDZFkyISN8YyZya2o9V2F9ZzhbZGx7aGtkYCN4ZFhRO217SD5MNFs5VCl7OGk6TUNWZXR7WjI5PSpibGMhPXcuaWF5NGJIOD5UUGg1WyNQalV9YUQmJXUyLHhFeCFuTXlqNGAsbFhSR0oiQXBOTHR0e0x4T2YwXSFjXlssYUxEMzJLZ3o8eStuLm9YVD9kOCZNSyhqY0NZZ1hsSChDZlI+''@;'; put 'put ''fTxPeHY7VGNyVU4qNyM4VCgqITlAPDNlcU1IWHh4PDpZM2w1Sl1jPEsqUXMxISJVUUdgd0NGKl48dHZRO3dhMjxWMiZEan55UmM8U1BhVDF8L3FHel1IZW0kKj0zVn10aGRhaDtUWkQwcW4/bjtCIUdhaClqVWBsJSVEQl9kIWsoNDhjQCUjNTQ7eUs8VCRFSWY9RHR2b0piUXE8Z2spUmghN3s4''@;'; put 'put ''KG4vNV84c1JeJHdxIy9fVnEoXk10IiE9eGYjN0IpWCUhRmIjMEN6U1s/TXk7Mz8zQzJJL1RXMytWbGwsR3pwJHVDd009Vm9VdVNmMnt3PCh6cG03biRDbTxZO0pKVDdhaUllQyZ4LyNNa3RXRjEiVGFkcyZaRSJlVV02Iy84KThIWVZ6M0NdeG40YDY5XWArUUhJW2ZSYzRuRUsuOFZQdCghUyZb''@;'; put 'put ''dHtBM09aKmo1U1VPWU8rV3l1e1Foe3haLHUxcUduN1VmXzJiJWR3SlAmOFAhQ1dTPDBOR0RXJDthVmpySjk8fH1HfDJ7czIsK2MwMitfcipYRTV8REtaQjxjTGYjZHJRTlNCXSo0c21GTCZxXXdrWTxHY1cpNjl1OmQlUiNrbiomMkV4S1BzY1R9dVlWeGN9alEwXzxAbU9+T3lES2tEajpyeFJv''@;'; put 'put ''SDYyR0QvKC52eXtJbFMrL3ZNbTN3QXNNTEBhM0leZkNUMn00djVyZSFtXSw7OHM0aihJaDF3a0lTZkVRRE1SWDRZRF1we3JPe0F4bSpfLyV0QlteOCZDUlJwUCFgTFBeOlJjd2U4SW1uZWFsRnNJe0ZiVFN3SHhWOSQ/YXswSlRlakU8dDN3VGN2PGMjYXYzekZrZiNvVn5yLm4hdTQoVCJIbTV1''@;'; put 'put ''IkRCVzR9MkJETE55QnksYUhHZHN5MVZ1NngyXUVxIXdrXTxGO3lrPVlUWndjfDpOXltVVVR1TH1XbWImK0hEU2ZXNTk9YVYkeHt3O11pYGVCOmpnfmBQNjN8WyJWQilmYmsoaUgjKHQ3Zy91PmcrL3w/cXRraTVSPSlNQkA2ZDJCdTNhSzx2YkhKKCQmYTN8ckVkJUx9X1dJPUA6R192MmEjSyU+''@;'; put 'put ''YDY/TC52QEdlTStvRWFnQjEhb08oNEVTZU04PnZMQEVvXnUlc35qTHheRUB5PiM2WmdtYUZVJUpaSCVNbnJfOHVyQzF8XSs3OSxmLkV0S2RgOiRQZmRxUWBbVGxvNS83eWk3eSJhZWVNRTEpaHVXJVQ+cnM8QE1RPGRnSlZwRzFycykkamZlJFFJRCFVRnBkSlZjOlt4fV9CI3ZYcm9CVjVESz4w''@;'; put 'put ''QjFfJCZwbE81TjlHazM6JHY+e2F8MHNDVVB5VVZGSHBbejl5ZF0wMn5BNy91QTA3KmRmdWxkRiZdMWNddFFdQCFdTHJ4di9ULmcqQ15RPVYvUCRZNEtEYVFJInxsOjh7bn1KNHBYLn4jfmk7UCVWKFFOVVg0ezxjW1tvYFNaYWB1PmdHb3VHXS5ATHArej5oXiE0N3BdIzkuUGVKTz52ODFlY1Rn''@;'; put 'put ''MEA4Inc/JVN4R1pldTEzIkhZU2VgdCRMZTlzQ2chMk8uWUEiMGF5IkMzMlJNOWE1UjdsTkluXX5VUkNhcmo2NlEkTXhEQmN+JmFjRFZNS1hMKCQyejhvcCszKjFlPWQxdHxrYjdWekBXTHYiJHNxYVo5ci9SczJQQCJqWm55a2pgXmduOTp+M31ec0o4NUxHfWhHXjQpKDxKaUciRnAyfkMjLyRN''@;'; put 'put ''fn0mQVsjJlIwYTxgWUh1bDBZNm17L150THY2TzBAOTRXeGgkams1YTNAfltyaHFSLCNEeElRc11OcSh4VF5fU2FzdSxBODZbYmBmPl0jeCUuN0B1cHBmOSlESXJjPEJwakNXS2Q9JDhEaCRtfjJ1VV4/ITU2clo6emYqZH5UbSF3MF0ubGoleUNSRkI9N0xOQFZVX25mVWJWXW0kdl1EaD94YiRi''@;'; put 'put ''ZVU9OG1gXWs2MylmKSxdVmJXcFhheHNwJFA9JGBEOXYldGdFKTBaLmFNcl9re157dDQyJWpKZC5sM0B5bDtUQTtrcnJ6MENMRiV8bERKc2BbNyNROmJkNUB9UyVUSGRQYC84NiV0bzJndEMid2FjM0NMRkxGTEZ1WTk6fDd+NzZbQWdQRGc5X1JTNTtXS1hpLz9pfG1xXSs/UiNgUCw5N2BBW29a''@;'; put 'put ''eFlgeVIsX3pJZWVfYm8xXThPWSxMZT9pNyxHPXs6dzc2PkV6K2xYWnlsOjUpOUBtWnRuM09vdDRpSWJKV1JRSSV5Zj1WamkhZ1pLdm4kTCtXOmMwOChSZG5Dez89L2VrM0BHNnlDWShrW3psSGZDeE5kczskJVc9XUdLMC9dOF8vbzNacGw4JEBudz53USVTOCFgPV9VKFl7Zy98a2VKNk02UyhJ''@;'; put 'put ''JDJvSDgzPiJuNz5gOjVeQCtnWkhzdSxGO05SO2soV2lvKklZYTU2MGRYMDYlMGhDUDJhMl5yXSpkJWwjYlE/PDF1dEB6VDhiSl9IJWtmcWN8LiQkeTVQZXY0OUJCQG1MOXFaMm0wLGthMjNjNUViJCx7YWBtMlllPEdzMXUqans4YiRyZWI6Yz9EcHtPciNPVS8jL1s3Izk1bk0pJWpPPVd+OnIi''@;'; put 'put ''PWwjQyh4anFXe2xnYVRpcEUqQ1hOT3BVUUkpQGFrdiFoTHFdV193XlJGQDxtQjh0RkBrcF9JV3BKM2xgT2BYO2JpZ2JBYEwka3AuNWwxRHhfUXs1aCVdPGR2LjdgWyxiQ2Z7ZGk4Vix1PTA2fSopXUZ7USs2X0VJb11geVI9cSRFXT0hXkk1Pkg9fTo/XXJZVWlgOCZONjs3cDg7SnohMkI7fmo+''@;'; put 'put ''UH1POUB5ZTFnX1Qva2s1VWFacTF4TEQyN2FRZkVldig4aDBCOFJyLC54PCUlbUZXYU83UnZ8IkVdW2QwN3Q/QlI2OjMrNGcobHhsLiFAITRbWWNCODxXK3o+Y0FmWmtsNHhZe1N3NH01N3RlUS5kODtFXXM+MSN1a3Q2dVVzMHJnZlteWjpSRTt8XTRtQ0w6NlskVXVAemQkcTU2TkJ5VUtRMHp6''@;'; put 'put ''Pmx1Mno+IlR2XkBtUHw4fH5kNThbN2FwUVtgeVE9JWQzKSZLKURLTi5jbG8uVCNkUiUkZzowUjpgN1NkeGU7JHUwcX1dMFI6YDdSZ2BkUD9xME02RTg1XVtRcVI6e1dkSEtNRns4RCsqI1ltLHtwYnZgX3I1bDNAOGEkLl9ka3RyQ2Nna3BFcCZZcUlaZVY4LzdOZGQkTDRzeSRGeTRsUDFncnRq''@;'; put 'put ''ZFNCTVVebU9tNjJSOmtlO1dHSkUoJSppW1puYi5DODYkWiQla1RjZGpUMVk/Y25HMWg0RlBUbVVpRXNBZXIkanIhUDI3blo5NHAqdzc+PH1PJiNgfXU8MHEieUBJL216bz95ZFhoYlozPjdqZGNOPnkkNHdPdCFyKjNjPWdzO0wkVDl5RzVqRWRYYDdkLzcuNDVqRShnWEcjdk91N3hiR2RzR0RQ''@;'; put 'put ''Inl8Ozk0alhdZCt1W2NIZTBYVzFvWXFPRmZ8ZkVnbWE5NHdPLHU/ZlYmMmN0JXZQVWF+ZGRYLGQvN31PblpRPy46bjBKZSx1eUdqWkRRUm1BZXUqNGMvJDlgMDxfZlRtTmB8T15uYjFPLGVkRDhzXWVjLDpBZWUpLiNLVG51XnhFZU9Ganpaa31kYjZUZSpqSl41JCNGRjxMKHdVYjpEZSQ3dzxe''@;'; put 'put ''WDkjZVhbdz42Rk5nY0A0NnUqSGBtdDBXLGRMWjc2QG8pI0spTUp6US5tMHFdLDxvakkhWXBwMHBsd3w4ciIhQVB9ZFpQbExaN1VhTjdgN2ZSMU5IMFU9dTBYOCgqLjQ9XT52PG98YlN9PVlmNn1IYV43ITtHMmAsPGZPNy9nP3hsbjVtQ1okVDt4OW5sa104YlBhRiRPbTpyWG1BWko4VDVFNk1h''@;'; put 'put ''cmU+eWlbaDVbcEBmfTd7cklaSjhMWzZuJGoxOW9tJTdoXiojeUNGZV03LGQyVlY4OTJEK3hzb2hPMSIkMmBbOE9RXiU1ZWBTVHtEbDFsdClDa2k4PSV4TChscT5rN2ZKNmV7I01neWJ1M182Q1dGTXt0L3p5Ny5TQEx7dGwya29TaXw3V19COCo5SzhtOEwkP3pKNlJEMTQhNlpoVTtlM3opUGBs''@;'; put 'put ''N1FhVGVPKTNadl07M0Q4SzhHWGp7NVUvTXJIRT9EVy5EWzJzXVR6YFt4OV9xdV1sdnRIMD5PMU16TCRsO2RpIzdqaz8ueEgoQCVvOjo1YTg0fV9nWWQ4XyFOfXkmKlJ+ZHg0b3tXWjpsPmA8SCRlOyFDMTJKQUJMeFhgIiVTWmNQJGVseztuY1BxRUl4NzVEdk19O25oVXE3Z104PzA6aUpQaV8k''@;'; put 'put ''P2RPO2M3K3VUMlB5L3pueUtJUCNoN2dsbnlDbzh8blQyfUldRnZBYnVJVlF2XW4wbWEiaF8kckooYUd2M3tUUXRsWTA1WTtdKFNZe2sxKFMuYU5MYmk3VmMqPUk/PTV2Wi45N0lyOTdCUnFnSXJBODIwJThAZkNkfHh5MGpYZDx3T3EsaEpBeT1uR3hCZXcjKzhyJDF3Xm9kTiJidnldfVFdV0tX''@;'; put 'put ''OXxaMm01aDVecl12UWQkWyZlWG12Sn5mOUdaY3ZwNGlJVXV0WHJsfkAiNzE9YXlKRk02MjsmSzYlKkRSdlM3JGRkQGZVWXtjJFlLVzk9T3FnU0gyYWguO25ubSwudCQlSDg/VGAhPV04dypaMXs3Wjg+M151MlA7VWZBel9AXz9GYEhoR14oOmtsVUFJZltabmF7KzR1UUdrPCF6WV8kTDMrTlhJ''@;'; put 'put ''YT83W0ZuZCRmVkhzeyVNRXBxNSFVYnhtYHorfVA5SyhTekMpT300VHpKdGxIZmpHQiNoRXR9YFhwcTUhRm8uanFqImhfOFdFMmMkRD03YCpAPV0jZ2tqcTdhVWZXPWw3bThxJSJBWTohKjwwKEpLZ1ksOF8/fTskMyFqZUA/K0xdNSVkbSVOeE8xLCpdXzZuUHtfX0l3ZDZ3c2JkZyFCY2ZDJC5M''@;'; put 'put ''VnM7VyxHVk5lR1pIYUhLfDhtVk02eGV9eCI3Z0VeRVokdSU3MnVVMUp9ZEElQCE/fGszZltBYE42blJwSlFLSnEuVHNIZiUuUGArY2ckeGVUez9BOCMlWSsrI0tFKFM+OjQ1KDshT24zaFlZSVFPM25JdlQ5PzxYIV0xSWJyXiVMUmUkNGpYLHVpazNlLHV4RElIUU8zbklQfGZiZU9lT2VscFZR''@;'; put 'put ''VX19PGxnPSEpNGB1eURuZyFwOVtFMTlbYiQ5W3k7WC89ZSImc2lfdjRIQEZHZn50YXN0XltqbmFePzxsN19eLmBnVkpnOXdYNVYpcDEpIWdHdn5ffTwsYUd2QCUlOSU5VV9xZ2A1PVokej5uLHUiJjMwVyxJR0dmR1NSMkgob10mOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkm''@;'; put 'put ''Oz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5n''@;'; put 'put ''bzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmO0xlX2ZvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11vOSY7Pmxibz05eFUqcyYlPmdGVyp7P10+MHw6ViNuZiVQPzBvLCVqPyFu''@;'; put 'put ''ZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVq''@;'; put 'put ''PyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQIzBnLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyE2MkNAJmo/IW88ITtdMC9VI25q''@;'; put 'put ''Pykpc3Z8RV9KPVQjbmo/KSlzdnxFbmc9ISUyMTAzPlczeSUhdk5UUEsvNyNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxF''@;'; put 'put ''X0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSktzdF5VOW1mOilzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8p''@;'; put 'put ''KXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbjY2QntfSj1UJF9fIz5Ue3k/N3tOdlpEekVNSllTd2lHKk12WkR6RU1KWVN3VjluPGguYixjXzUuLD1SWTEyc0ddZFBOdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHo4MEVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZNGVTd2lH''@;'; put 'put ''Kk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpR3BnKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUsqP108bDpuZyx9dTJZcDNSbXR1OG12dThteHU4bV1CMHI2WzJQIldOVylwfSE7LHtfXyNtfHFbJWI1eCE7S007Mz9VYmln''@;'; put 'put ''OVcqc3F0XjMze0dObTwlO18zM2Bwa2Z8R0xNXU5YKm18cXN4ZVkqbHEvYnN3O18zM3tHNj9TVl1OWCpscS9ic3dHemVbYS43SUk5NWlFSWFAU1ZdTkFXXU5YKmxxL2IiMioxdXdnOVZZSj1jLHdaUnhCO3tUeUphfVB4fk9SZmkhJmlxKl13LkgyUFJmaSEmaXEqXXclZSFvcCF7XzQ1YWIjbzUu''@;'; put 'put ''WjNZWCRQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhVjV9LkAjKDRQZ2ovMl5k''@;'; put 'put ''L0hRZS8xbWUvSTl0NCQ5fHJ8dTZbd1tmaGllc2ZTSiNnUXhXcnReXS8kbzlRQl5fIyNJcltmaCV4ITtiNTJfJVFqJWVJbSMyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZnlsZyw8bWNlaXN8b1FdTyROIzs2dDQqZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdq''@;'; put 'put ''UVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4LCNqJShwPmB3LGB8b0tgfFhOYHxHUWB8WyM7YCRIKVFNIXxyI2dNOSVqJFBeSSNnTTlze308bFk7Lns9P2hnOXplWXJ0XkM4bVt9bXFbfW1RUHs4Vztt''@;'; put 'put ''OWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlJWUhb3Ahe180NWFiJGBJM3hVX0JlYCRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdKV08bChldT4lUFhuXUxYbkhNWG5YTVhuV1B1Pn5XL2lARE58''@;'; put 'put ''XyNLUCVlISV7X18jNV1eLlN+a1MhZzw5dXt9PHlIclsyc2lKZzleZWc5XmVsMiN4Nzcld0F5N09XaUBER2ZzKSpITSF7dXdQV2lAREdmcykqSE0hbjl5Pm0kcTw6UW5pbTEvUGVEflUzPEVvOmNQT1JbUWtOTiZbZyUrfVN3anJQI3twOjBhYmQhW2RbREdmcykqSE0he3V3UFdpQERHZnMpKkhN''@;'; put 'put ''IXt1d1BXaUBER2ZzKVN9fGYhSDYkX0RlPX1DZT1CRGU9RkRlPS9ETnxYL1NmfnRhc3ReYixZZU0hKHJ0XlF9Jm9MKzN4ITs1UDVWKXBddWklRmpndldtWGZ+X308Zns4XWM7IUhkZU5memlLJUErJCEjYFBydF5zKTtgLzhnYyQ0Ol02YFRhVD9AaWFbPyFhYmh5ZVhvOXtPKi5hO0lsaThOcVEm''@;'; put 'put ''Y2dbbTdnejhSOmprMm1rOVErV1o5NCEyTCRjMTElb1tAaVkzclVPM0MzMVFVMzola1sjLmZ5PDRqa2Z5ZVgqLjEwZVh8b1FdN3BRXXkhXS5BZXU0diVmODo4Qy9AIyg0UGdqLzJeZC9IUWUvMW1lL0k5dDQkOXxyIWpSTSlYaTh9LipITSF8ciNnVyMlailvYC5bOzxsXUhXVip7dHRpJXFrRV5f''@;'; put 'put ''I1Q4NTNpcnU0aGt9MzZbMmZdbFtJT3ZNZFtQJFVXOWdZZDgkYUAxJDg4TzU2a3A2LzAuLmw0KyJmUSxPbH4ke0NnIyMldFB7SV1qXUJyZzJ3VjlAdyhZaHYiKEwxZ1Q3SHN4PzFvZltSVlApPyFjPStMMTxmUiNEZltSeUVqJXRQUDk8bGdbO2BkZ1pWQ2hJcjU2dVFTNlo4S2dNZCwuW3pweTs9''@;'; put 'put ''eSNrZCVARThqL3VReUxPZlYkdjlRemteRyR2OXd8eDsjMDtSSzt2O3sjOmgwfi8jXm1QJG05Mm1BcEo4MyZ0YUJgYz5wVUo5YF17bjVlN2ppJShKKXJ0XmlzaSUoSl8/XyNLRHJbfW1JPDxsdCFjZTdqc3x9PHR7cVszflNKZzkmaFhydF4+RChvOn4jeCE7PlE9NCZoaCElailvPzYmOSE7Ykp9''@;'; put 'put ''X308T0JfLm8zYSkhZ1VsPSo8bFh9fTxNdnFbVEYmOCE7RFJ7Mz9VSCghZ1ApXj9fI1hFXy5uS1dpTFBoMitwR2krJWJTXShFIVM2Ti5baENmOzM/VXhsaCVjdUhtQWtnfVhlTSFHdUNmPEtre18jYkVtZmlzfF1fI2N4NTNpciwoaWVHJDRWW2hnOW5pWXJ0Xk44bVs8S3JSfDgiN3JTIVZ7aV9S''@;'; put 'put ''bF51SmsxcylRQ3tRUXpIbV8vVSF0PFsxS2xfRDdJdHhsaWNGXzFjLFRSL3hVZmNGUjJdKl4/U2RWeTlWNldQdjk3NDA8LGdrTDxKKGolPTtQOzxsKEUxVip7NCsmbyE5PD88bCl4NFYqe3k0bVtmaC5oZzl8U3d7fTxvNSIpR0AlYzsuIyZKLHl7UFJHZkUpQCo8bDtFaXdjVH5qKUkxSWF2e1F9''@;'; put 'put ''SURreWpEPUxTYD1KLDopSiwuMDtSRDJiQzFJRGtvS2l9eUlVPDZNM2lVUHpJTjpWVnR5Wz1kOz9qUyhyUzsub2VCIzNaQUowc3xrIUdseXxZdSk7SkAlUipOQisqJTRvXkJgdnwvZFA/Tjt3bWpiPXJOZDM9Jk08OlthQjhVK1Y3TWoydykscUsuMWdqbGk8IU9eQ0wpMVBtcFJ3eThQc1QwIXBj''@;'; put 'put ''WDxWN0xtNTpHJGNsRGd+K1ZWSSgoUlY2Ti54aGo8ZWhAaV0qKVl6UXxfJGtuaW9LfTFXbUReIihsaG9LOyVzIyg4Oiw1Kiw5Vm1zVEkvQDBPNDlFYldnSksoWVNPRG9wRlZze01EIjszMXtse2llNVZfRTxSKnQ9cyNHdVp5UzYkUG1Td0tBYHtGIjt6TXo+eks8LzkqeWorVTQrMjYvWSQueTZn''@;'; put 'put ''U2FVM2drK302PVlbKit7TCF0cX1tanYqcHZeXWJfMXlsVmxDU2h2eF9fX3UudD11SitHckkucHc4OiwsKjtSandOLmZMRD17UlJSbngla3xEVnk8NFdsY0d4I2xtKGU9cSpWRkwxWHY8Mn5pVGlFb21NVlpWNzNlMGQ6SXJYNzp3VUsrOXNeVlg8N0YlQCQ/ZzMrTyVVPUFDRXY+T1tWWWs0SlZR''@;'; put 'put ''TiFWI1J3Rj1PW01Pa1RIVE8pR1FHI2JtOmw8JXg8S01fJW05dllbajhtYXJ+e3xqO0BLKFRnOSZlYFdkIl9PPTZnU3NHZjBmfGxHblQ6JFhJMmxgWFRlZ3EwOS83SnksIiFlYH0/YF5sMU4+QXl6KThvNm1iLlpuUT1QRmM9TDlnJU8ueko4ITdtUXxPbmEoSmBre0tqZz55c3lCUG43USklMmhG''@;'; put 'put ''Z3M+bSQsbChpUGdXdjI7Vk1PPWcuSG9iV3AzZCRtW2I8NDYzKTVLODUhfFsmfl9ZW2NaQl1WWkh0O0l9PGxFYHZmdmhadFowJiFANyxFPThhJF0kJlc9fTNPLGMpP09+WVE5WGRxODNQJHBHI3RvPmdJOTJFK3xCUH4sVmRWXnBiRjhTI2JqYzdjOmI4aSRLVHhlMW0wcWJ6NktoSWQ5dnxIOkdW''@;'; put 'put ''allnNjJOS2RNNyldcE5eYTsxPHdTRDVtNyl7JiFHZjxzNDRoPz8wbSRjZWJicXdfM3U9OmdHM2A5Ujw1YlRoN08oKVgrLCFhOFozbWAvNT5dI0RNMVFoRTgxOzpKKCRASFU3WTxxWWtYWkBtJV5mO3o+YiViP2pqOTpuQ3VsPDdqeHhKWTV0VH5kXWIhaCgqWz0jYiFoTENYRUJucGxJPHduPSwm''@;'; put 'put ''NjZNQyY9Y114MVEucmp9V1FQPU0uQSYzIUtGQ198YlgrIixFe0VxSygxb0soWF8wbXY5bk0oLkNAMD5DJTckfEBKcUtQTSh7JTckcithXzU1aUk1aENpT0JXLGRWQl0kKz4hJD5lPVRKaUU1cWJfMW5xakhmdH1XVXlibmwvQEElWHNNKENAWHNtLC9se21fSSQ3TzFVXzhtMTNkOnZ9dzYuJWtb''@;'; put 'put ''ZDY5c3hzfGkuai41MWZQViE3SV1yekR+U3deel08Q18+fDFvcVRQPSpAQ1FCeypkS1hWZ3Z9XTBPUE44RWR6Q3pDOS45Mm5bPzFaclZtTzNSOjJodCFjQE0oTmxBLnpqXm1QfDx6RWZ6eHYsTHJhbjRmMCFEPi45NyRsXk49cltGJmE/Li5APSomTU5IJkdlUD9meX0mZl5nbXcuV197SVdLQz5W''@;'; put 'put ''dyl3e2hsUk0mO0BIUllFJSxPZG4xZDZNQC4hW15iYH5LdVReJU5gfj9lLnQ+TSElIW9wZiQvSXxnbDdFeSVTX1QiZCpydCEvIVZuSSQ5ITdtLl1FeTtvMTxKQGcsJTJBVjx4K1A1cVMjY0BKMi5zW0siNW5JWVRvKEkkdyVCakIucjx4fHcjM1kpbWQ6Wz02bktdc1JvOF8mYlEhfl1KRHJka1hf''@;'; put 'put ''RyZpW3tzeClXdXFKImpWVChoNWFeI3IoOWpHZ3x3XzhwJEA3O2x6bWY7QUBVOGFvMGQ8bS5kOkJjIXd8MHlGaUdmKnA1eF1oPTdIK08oXX5KdkI+ZmA+c1RtcyxyODh9bDd0PV0wMylUZyJuQVtPKH1qezBScXc7SCZhR2k8dlFFM2RNKGt5ZWhFU3ZkOkA9RWhdSTVtU1BScS5UbXB2OiQseEp6''@;'; put 'put ''NDRoXiNFTVtLLC5bJm9yVm03cHhmVTlScW4ybj02VV1VaGVNKDN6QTcofUEjKn1+YTcsXmdIYDYySyhiaU8pLmx4LCtdTHpyUi48W0lvKCVARmcibnAyNkVpblFVKT4jYilJJT5HZ31rIm47QGVUYiR1fjk2QntlVD04RCtPK0QoVGd8d3hOJT4+UnNdYT56XU9QVDpJVlVsaW1iJHM+Rz1RaSUu''@;'; put 'put ''OzEvOFZtNXVkMDZYZDp6JSVhL11JbHQ+bntGMW5kN0oraV9zciRPLEwsJFhFeWhNKSVmZ3EzSitPeiRqJX5VK2ZrJChGQDUsUiM7ai4he2ZeI1M9NGV8MDk2IWFUc3UsJTIkai85NE0/fC5sR3tsMWJxM2AubENgJCVqR18hOzZxKG8zYik9XUw5Jkl2bDExQS4me2leR2YjYC5sR3oqNH5dLjwo''@;'; put 'put ''VT99Z0dfITZKMl9yKGVRdVg9LmAmLmx3ITdUKEpNJUw2bjwmUi9QMnw0bXhnX214R05eW2oqXnU9MH1Xc3QmYUc6JHJSQltBUjkmPTBnTkA5clk4KXJVITtSdjwsbGx5aGhgeilvM0NwPlFIPzQrbmRURXo8Kk1yKC4iM0Bhc3BiOkVlJSNhflNyMXxsYSE/fH5OMGRiNlVlVm0zKTsiVENjKjVr''@;'; put 'put ''MUlaJDdxdCxRP3s6LmdmNlZIfU9+Ti5Ec0hWMXg3dnZYLHRuSVphW0xVYGRwbDIxdFV+Tl9Kdl9EeW1aQT96ZyJ6ezFlKU00Vj1BMGlrfG03JCE5W15yQGclOytQP0ZjQV1II3IrWm5AWmFhYmJMeU46ZCk0aHpsQmRYb1okX2IlfHVzblJDT0QrXVZ1JU18VUNBUE4mOGFrZmBkK2UuXUskTGVh''@;'; put 'put ''bmB5Vmcia0EuYnckMCM5e11pX25QPHJRTn1NfU19TX1NfjVhMHklJUlCIzxlSGgmMFFOZTZlLzFHL1BpLEA/I28xXV5JMW1efXBiM2BdSnNAcXhyUSFqL3A4ITx6UD1+SkxVZWdoW3F4aCR+MCJSPiVdN34/d10vZVJ2Vm0mZFJ2Oy5rcmYsN257LEFpRyQ8UiF9WTM2PmMsN25BUkUobTNmKTx6''@;'; put 'put ''MEpIUjt7alBtLE5oVWZQZCRQdGViWXZJe2R8XV0hXjJqMTUkcVpZbUwkP2dLcSZJSWhSdjc2W0o5JHAkT2lxaFE/VFB+WSF8UCNlPUQzNno3bXVVPS5aOFZ7UnZfNTZyZjAlQEJvX2k6OTZqPyl8MThKMDtMbTIkP21fNVUoe2A6alZuaV5sYEtxNGpFSSFnWXAzKSxtN21XPU47NzJvYDM+cz5P''@;'; put 'put ''fXoyL3s0JH4wWVZYI3h7KiluRjx4IkUyXjN2bXZuP0BTMjsxXkNSKFFDaXJoJnZzYGlpdiEzZm49Z1Q/S2ZkdWdbKTxsJF80TTtqWUovYWVeS11mRltxdypMU3wldC5sflZqTEAwflZqO0B2bT9zaEdgckZWcWJvTyVxL0pvfkUxS11UIy5NKz98Kmpycz1JeS5KOzB9KnwmQD1kbmM/ITRjKSIv''@;'; put 'put ''ZmdlcTdKTiR3KktdbWI+fTg3e156O2ddSVF4eD0yI3xuKFswNjtWamQkbyh4c3w4MSQjaCNWUGg5fEZnMEBVKGt9cn54Xm9KWD1yfkNRTyN1cXJ4XSFeMjxRLH13K3NoRTgve089LGtjTWBdfmpHc1htNVFnTmMkN3hlRFhzSlklfFE/MSshaFtqcXNefTJfITY+fjEsMW1WPUZ7MGFoeWQpYVFN''@;'; put 'put ''M2gkVzpfP21qSEorUUdwSl4kUjNTazF3VSh7PjFyfmgxd1Uzc3I2WF9tanBEJWFaM2goVzplW21qcERtMWBWfSMqUXxLI3VoXn0vaVtUKEp+WTNBb0g9UlNmcDExK3BIZG5gbG8rcFA9SzJpa3RrdnB3TkV9Y1EiM2w8dT03cCpEIzlIODVPNTZWWUcuOCxAWjIzPTpoO0dwQlR5JCtwJkUjSU0y''@;'; put 'put ''ZVFxanxaR2IlXUo5cll2TkJwVH1OZ1hTRDY6clZtRFUjTCREPFMiOnhfTn1NKU4xRGFLJVljXmAwOUZvfUpeVXE8Jk15NG0zRkB4U0B7fWFscn02KG1kMEYrXXhFJVgmcHhNQGUuMm1WfTFvfntTPUNvIj9pY2ltUXM1UWFUI3U+cnJDMU85bS5dQXlAJXRWUTksVS97Ym5GfS5QKitdR3V9Knxg''@;'; put 'put ''Kzc+cWhRaXh5fSoyPih+LlFTKyZeYmlhW31hXysmaiVWLyxMamcuU3ZwJEVNNSlmP1N2dSxJTEBaZyUxYCRqN1ZKM3FHN0pvIUJbO0A0YnBRYmA6ajNfJFVmPT09IWExITdqd1tiJDswN3UwT2MlfHFTRV1mdX0pfTEzVShmVkk5cyx8JktlVjp4QjNFXm09Tm8hQFp1bDcucmh8MzojKUA0NnEs''@;'; put 'put ''T2x8Xm0sL2xRMU1dI286Ok1XZyYrYVJdM1BZJXVhP2d7cm5mIz0pcS9KaSM7MG4kYC9kcm5mXlB0IS8wRFMvLncuVD1ZV19HNUtyd1UrX09bS0g6Tz0iTzMpT3olQGEsMm1geUJAS3V3XlFVdVEmJTkyJCU0LmE/YCpIXUFvbls3NClAPFhIdUAlLk0jLFt6YmkkJnYlcjxPWTdaZXlOYDIwWz03''@;'; put 'put ''bi5wa29RW19SM195ZTVQNU8sWVtqbmAjfHNVbj1PVT58bW9HMU8lMmd9eC5QO0AmLjUsSlFAfEF9YTY9cTgsW0hxVm4uW2R+QnRZdTRQKjVyc2xAVUZ5ejwxfEdnejJXMTRoeys5MnsxIzJ5JVlEcyUpekojKEdJU0dnImpEUT5mT1RAUi5yUisibmg6c3o8MjgvVFtdO3ZdWnxdMHV4SDpyVVko''@;'; put 'put ''NSRpMTNgKz04fTAySl0wUzxAa0lhJF4jUSROJGgpSE14UVZtVDliMDg7Kmw8K0xbIi5gK2t9PzFbJnFOQnA2VEQrZ2QjPToyPF0ycThgZXx1PU8zZVQkTk1qN1REU08odFVuPU99eFUucjZiVSNWbnxaRWg8REtJX2k/TEUodjsyZ1poNWphLFJ3QGV3OzRqL3BFUGBbMFo3bj9nP10vZG4zIXhS''@;'; put 'put ''OD56R2xGUVI7fUg7PUo5Q0l8PCJ3JWJMZTRoJWIkN1JgcXNESUNQVls2LFE/MFNCUn1uYiQwXTgkLiN3MHt9eXNtVD11UVNlX2AsM208ZFEhNiRKUUBaZWJaXz1OYntkZyJqOmxzQCVvR1BJWFtkNGV1Mmw7OC9gKkBEQEMlSi9hPj5VdChAcCI1MGUxQHpWbVFdSTB0VUVmakckN35pJDclQHMi''@;'; put 'put ''R3JQL1lQcjx0RFF9R2RnUDY3aXMzZylCYl42IWtdRFFKZWU4UjpgPzVhK3VqLENZNGNpKm0wPjB9V017YzQiQylEKURUQEBiWDs1aGRvLiNEfjhtLl1kM04jTmh6bHxiS2AvaGImS2VQZT54Ujo/QUUzSDg5ZlU3UjdfdWtlUzMpQmNnfGdAdUdzdER+Tl4zbFtLUUEvUGU0Lk1yT2NubDFdZGIk''@;'; put 'put ''JiYyWjFgJlo4YVRSOmIxPk84cn1HWW84VFEmLjhkfGBONDRRLD83RTQoQmtvN3FaLExOWV00KD9ZUzp8Nyl4aTYqdWQzfSomanwzUXU1aTEzXXJeVkM4aGNtPTRiemxibyJiR3JtX2QpelZwSXU6KzNaW154N3VWbUBCV2FpdlksZz8/PyYuRjtodC9WfTtXQFhfVXQwYVllaEA0KFMjcTJIViF8''@;'; put 'put ''YE5saFUufmNCWHxFV3BWYlt1RShGeGElcGQ3LHVyYnloVVtRNTduRV1RWUZpIUQvUUQ8Pm5MMGIjblc2elFSUTlfd2pXXSJpQHsjaW5PYDJQQXBDbTA/YlFEeXVDdjlpb2x0UCVgKio5cmVaWjQ0dFpsLkZ6b24/eD9ZOXxlZXtZPFtvXlEsQH5DNGteIykpOXJBW1FAQVNdIyQqKFdbUjV0XUpW''@;'; put 'put ''SEF3VmEod3pSTDomUWBuKTdyRF5KXiQvKjIqRWx2TmFAYVtlTWZJb0JQPjl3dXV3KkN+OERqKXkqPG5jQi96eWtWNjBPTEhdcDlDaGBRc0QzQnl9fSFoI15NU15IOm4ycVA8dml6V1d+bmJOVmdqKS5eMG8rJCpfUFNFOn0pKTRCI3MsYkhyMyNbPSR3VF5JeWorZj5ZfTxUX0BWK1U7L2k1OiJN''@;'; put 'put ''OT9de24rIjI9Z15gPUxnW1pMb05bKTdjPUc9Sj5dTkpxVlVqczMsRVNmZF8iNGBWfFlYI2ZHQnJ2KHlxQEt7OjpIdSFwfTVkTm5+dUFVWEliPzpfM19GOERdUzllYERzMSVjRk0wMGZvNz5zZFEmUT1ZIz55MXRxO2hQQjZIWDw5VDtGXnsxSFM+ZXlRKUl2NVdhNlZCM25SInNxTEQyW2NObjs8''@;'; put 'put ''QnUmWWZPa00yPyUrZTEwXUxeSHRxd0wsN3lidiJVdH52SzRGUi89JTNXe3hIZUJRMWYkc1FfQTQuJXloW2VQQXpBYW1gTlp8V2JJVVE8X1RvOX5tZyZhL0NacjAsMUV7fCZGZldsXVBecGBDRE1XPC9QSWdKJV9faCJgQHpTS0pQKUxJUTlKfCQ+Rj50Rm1KN2csMihSKHl6OHFgW3dEbXp2Nm5W''@;'; put 'put ''LFcjdCR3VXxCe2RWSyQ9M2dMVzIpWno7PEc2NlkoXlE9b31uLD58V3IkVXgxb1tYdkIzUTBAXzJwbmAqZ1gyV11OVEs7cUxmezVGcSphTmp8UXB3PFcjQ2U1anFPM25ENzxPd2RCUURzVlJKdCkkYmVXQDFocVd1W05bbkh3fEIiSHNmKVFtRXhxQmY9Rj5MZURSNCwjN152Wz9OclZ8b3IidXtA''@;'; put 'put ''PiM6Vk91QjJtSmRtJm1GViVuYzN8fSMwLkhPUXdEQVJOUUVkKiZIT0JRKzhEWXE8OEsiUDgqPE13eHQiMkEqclsxQn5MQEtEajZlflkscmYrSS44Kn0kZ05YejVNPUwkM24lRyl3dHI5IVExb1ZXW0RqW0hvKHZRTCl8KXclL1FCODN2WFNFV3p9Y3NCNU1+S2hHKmBdfGxCYkp5QVArUGE+ZSVy''@;'; put 'put ''ZHNrQS9wKSh1TXVEdU9fM2hOJis1MGIqInZRTzU+W0V0Lm5nP256Wi8oMSt4aCxGclhuckt0UShMe3xzfWZbR2pGXSQ6SVs5TXgiOXh9YHg1dmlOSWBOQS5ifktrXjdKQFhvPi9PXlVqcUYlJHBTRCxGeFI7Jjk3Ok4pPW8+aFMzJCpZSTNFTEJbRCl7K09Ee2VUI21LSzQrMn1xdzRNOGJjPzpR''@;'; put 'put ''OWRaXmw3eikuPFZtaFlYWD9AVW1PTUdTa0I0a0tpbzJqRDo8dEIlOFdPP2s9QkldPjpHU2Q9ZWhqXkJpZUduI1cwJTZCdzRCMiosTUZKdEVoX1RyKDgvbnJlaDMsM0Q1XzNmUlEjTnA1VyNdIkpWPWEhezdqTEMxMkBRbGJ7JHlUXkM6PnRsKmgheihON21FQyRtc0MxKk5dOFluRH53fDJHTVdd''@;'; put 'put ''ITphIVV4P0g4QTdsNXNGUFlJb1lePns1aCtkQyFJI0F7IVpfRzVSV0JZfHFfYDQ0fClyZ0tAenRba30ibX5gKyRWfF9ZVVMiSDd9Rj13Mz5BSl9MWno8SUB1Uy9FOVozYiopTVJjY20yWi5NNmRhaGA+NEhMWkcsSU80RD0/PkZlNjtuPH16bT9qKyJlX14scnwwMl9SP3FwRnlwJEtvdW9benBw''@;'; put 'put ''MEd8RkQlM0RJKkVFZjdxbXBtMW9bZVlbcUc/M1E1LmM9VC9PVyJ2LGAoWysmbit6VlNuV3ppSlgmX1pSOCY8d3JtdndfIXZzUEN1b1YjPCY0b1Z2X1FaZFtPOVdFI0pSP1sqQFNRT0YvXz0mMypCWnp0V2EyTG00IWglal1oJT50b1Z0X2JJRCIhNiJzLGB4WzQ5cnN4fCV0fD0xUnYuJEt3VVEp''@;'; put 'put ''Om8jPTd2dkk1aWozK1QyLjZyNEtHU2dGNjx3bXd8QSN+VWw9SV81fTdeRy8rM29Wcl9jMWNbdXBhI31qYnl0SiV1ZUttVmArKCFCUV4uOjsiVUpdVSswMmxWdCF3Xm9tK24iPCNwIz12TmJUWW1IIyMle0UwIStgKk1YPGtnNHBrPkldfCNHdG9bJjhZLCRPcCklb29KOD0jb2FUWW1vTW08UiZY''@;'; put 'put ''fntTSTRSQyhoZjs4e0pCT3suQmRqIityNTsqWTNbK2FNTEM8UjMrPmp5c3ZTQSthLiRaRmpALE8kMHgrJF8yeG9odWJKYDw8a0xTfkIsYGxbPmI5TV9VMUs7cXBGOio0IU9vfEN4WyouJjM/OkpvPm5bVltuaWQvbzkoJUsqSXNNSUtOQFQjPlAwLiYzVio7Q3U1XiR4KmdiSE07PmdGVT5uM0dS''@;'; put 'put ''cyFybSo0REdFb0w0V1QxYFFQOkZuMm9WLnw3YUw0aFNbcXdgbmtVVyFqLGB9QEtue0MieUp3LE0pfE5FTDR8UVtxb2BvW1RXP2csYDEoJUs/fTZtYDBUbWlgIXZUVyplLGA4QDQ5bXNsN3hbQF5Lbm1zQTZ6RF1yWS5XKSpIUj9BalQ5WyVbV0cvInpvVjZ8XWxLNG9OW3FVYGA2U1czb1txRk1M''@;'; put 'put ''dlVRW24oQWl6Mnx9ej1xaEcjXjBvMEQoOjxGcVIzW1Y+b1ttWk0qbitHKlZRaFhAaV5PKF5nRmNXMy5wJm9XfWBWPlU0VE1LbndILHxfTjBbaX5JanpbJHxHfE80bVRtV3RtS253SHIoeF5SJU8uJk1YPDVOIV1ZWzpWJDgjJmcpciFZZzM8S3dJQypNJXM5eltxO3MjPW9WJHNZeVtxYC4qeTY8''@;'; put 'put ''Ymc5fWFHRy9FPVY+Ln1yREcvfDxVaC59ISJhKyYzQzN1TCtgNXkpRlB3cmdDdSoqL19GLz88VWgyc3IvLGBHQD5ianMrLldDeEowPDlGcUEsR2JmM3BsRH1rMiF3altxY30rSkkvRnlvVnZ8fEdJL0B4b1ZpNyFaQiJWfmUyeCopXk83YSt6dXlbQV5oeWJ4W3F8X29bTjRvOW9WTH42bXlbVXZ5''@;'; put 'put ''c3gqTTV+Q3ZKWyF2W1txY0dDI0xUemY2aGg8RnB7QF9LcSxIL2E7Vj54czo4LGAmfTFNels9JHpbY3wvZTtPfUZvXT5iWVdrUnNXVmhtJnh8YCVGL0F4b1ZGRHpbR3RSK0pPfXNMKGxWJSY3UlIjcjZvUkB5ai98a2lkK0goNWU+NV4wYTMrWntGL1RnYGFXbXw/UCsqVD1tR3g4YGMkdjEoPCU/''@;'; put 'put ''M1FZV2BPLGB4fmU2Ri96d3AmSVJ6SzUiW0E0fSQwRi9Ud3Ama3x8R0o0QEZbcSlfTXYlQjNFJSM7cUYvMnZvVmh8YT1JNDdFW3E5XyF2TCZYY0N6RzdqNktFSX1lQnpbWF0/LmVzUjMsYEl7R3x6US9NdmxGIzcreEp5O3laZCohKTB8ITBiJmsiOVYmYHlbSXxSK0kvfX5FfVthYjB9SyVhJFZa''@;'; put 'put ''YnojfXZQPDhOPlNyKnZmWkZ3LGpfMUVBZnx+Q30mSChoOX1KNkxjIX5CXTtjYH4zXyROfXNjfDxaUlNqKFR4NjJAXzUwZnBnRmAub1s7W0QwNWBRJEFFPXQweU1UX187PURnVThvJGtbQX1kRyhoOH1+QzRGWkwiflczL0tkYGx1UnFbfntgW0t9czxoW35IP3F7VjVgZVt+Rz9DSHMoWnxIWUF0''@;'; put 'put ''QElxVypUWVZLNmxHT3tZSjhSWV1GMzBweC5YRU4oKGBrXm0xKnZWY3Z3ZE0jc2V+by9uSXtzdl8qdXQoNn0zNEc3dHA/UWRbI0NxRlt+fj5nTjpxLmNHaEZ+NllueGo8blMvWWJSIixndEw5KXlJTkl9VkU7SWAhJml9Lk4zZUV4cTV8eVlhPF91ekY/LE1ROTpxcUJudHhiY1ZlKUgkfjpeZn1L''@;'; put 'put ''Iz9RfHNQfmI8MFtfc3Z8bCF1KD5+Il9+U3NXbVNBIi5+KX1WfWc5Kj57c3N8aHs1XVE5JH1xP2EjdSh0KD1+WntAZHRXXX5LfSxJNEYkfjo/RWh9cyh9fHc0RiJzVHwmSFdMXX4+XzVdRzdfc258Q0hpbiN+dygwP2NafSk/b2J2TS89fjhfbkk0fVk/eTN0KCt+LmBdQkZ+JnVneExfR2YlNT9u''@;'; put 'put ''a0VFditDSFhXQEIiT0RSYlhjI2FSI3ssZ0loSStTR2t1VSp9W1RsVFdWUDlQK0BuejNvNUR4YWtOOiZVSVsjZnxJK091TnZSP2RuPz08PSlCRCUzL0xHeUVKNTI6YnBCUEx7MXJLMFU7XjNYMUZXVEMsWyhBX113bFRNNzkxW3RxRlplckVpdHUoQH5OI11dR3MjPVRoM2dtJk1HO3FxSj1xVn09''@;'; put 'put ''fiNgc3BUaF48Snx6QnlyLnR0Vzl+ZVtwcDZsSjNFVDQweis1ZVMzbVQ9KV14NXJLblUxVzRZOU1VPW1pcjYuPDF6PjRlc21tVih2c1dXaUBEP2Nfbz0kOWd4bVA9V0AhMCVrNFhmeHFFfHd5Sm12Ji8zcCglNVtFb3QpJW99fmN0WXpdVCloKz5+fk8zWFE0PH0yeiQqUWpfKH5RW0VvYSVLfGte''@;'; put 'put ''WnMrfk9beztsVi5TKWhxflAuODV7fjVPQH50YE9qVzQ0fSQxNEY/c2BzVFV2Z2h+Q0h4KWNgRXZaK1BJQEsjZzpxXj5lc1t8MnRzflNPTExXfHIoL1Z8NHRbJXlzfjtfY240ckhWfi4kTlt8UEBoV30zTldbfExATDQ7VXUoKHNKXnp5WnJXNDszJE5yW0oiQHwxaXJzTzw/c3l7a0k2Vl1YXy4u''@;'; put 'put ''RilgXil7fVUhKHNHXkcvWXJobjszc0pyW2F2QHxiaXN+SDxLTGhyakJzW3g6e31NIVcoJXtmbj0zdShAfF1eZF8+My8mYCsvNjlWKmJlTUFNeVdpdT9ve0dINEw3YU9uengkSDdhT354SUxKVks2JDRleCl4eHQ6KnN4InZ7THQ/K34uRnYiQnIqSF9fQCgwZH1HQytfc2B+XktNe25JNkZTYWgp''@;'; put 'put ''Il8+KDBkLkc/dD1zVUNLNm1BV3hmd1lPPn4vXzspWUY8KCF+SUZxImpsM1sockZtUyghfkVtYnZbfjFBT2NyYTNMUyhLVks2XyhreEt2bklaPzdLQSJlQUk3Vk5OeGcoeUtHOiRXXT9lP2F2Wl1aU1ddYX43bnBMZkdhIlVDV3RAT3Z1KX1HNTB2ekYzNkV+bCJzOkQmVXRkelBEU0FLVntKLH5H''@;'; put 'put ''N1N8Rk9mRyxuYjNaeFNhfmssKipDKTF9Pz8xaDhwam45b3tyLGUkekRKfGVnPn55P19aST9vMXwxYFNgbHUufkcrfCppZnM9V1s5cSUyJEZed29EUm1rRHJyai5HWUdFXVQhcXE3RUB6TDMmQEhILmZJYjU0bkd2VClzPzw6P1B3XWV2Y1NhUns1KiVTKktHOnVPX183cSMjcyM1Tks2OD9gX1Rl''@;'; put 'put ''e2RGRVNhQX49PzxYbHk+LmIyKChXdmtKKyZkZTlIcThrXU8mWFNZI3lUJktvZ2t+K3EvSjIzVHImbCgxY0pNdztKbj5icW1aZH1WXjsrIjVOISE0NTk3fSxbQiZFQjBUdmJTYSMrIUw4XjRdJm8ldSxLTHJ3KU92WjNNWE0uRz5xX30sLjljdCJrTytzVTRyZCkhSDRdI0JyPkJMfHIzQG8+alNn''@;'; put 'put ''REQpbTcsdlNxQXtgW1YuQXQyfT5JU18ie3hFOnxRRTsydXZhc1Z5WHNxVEByciRTOUVwUl5Gb1ozWz1bIz42VjcubEIuQVY9am9KUGElbz4jeG1LZV95dDZfcT9maDZXdmB6SGlNfl1FXTFZS1plaE04O25bSClmNkhJMUtWXTErJGJgI2Ngc058ZnE8WG1CdTNda0lzR2dLc3BgQHgzVDo/Z0Zn''@;'; put 'put ''SXsianU9SCZSeHQ9fFtkM30qQHpIOlIsYj8rLmZ9OlRRc19HKzVBVTJefntxWkh7Kmk2YTVhMm0/NzEsdSRfO3EsNWhEOF0hNWFgWl4/fWE7ITMjMWo3YXlaQFlxPjcpfWE+UCw5TmVxLFM4TzxlVGdUPioxPjwuWH0sPEJ9Y15fU0dvc0AxIy9Kdn0jcGhmJU86M08oXzcmS20sSmxHaWowL3tY''@;'; put 'put ''eVBRUSY0VVQyZlY8Kj17ZzYlZ1tqUDk4WD1VPy4vXSZpTDAjYFd7ZHJXX3dtMDtwODk9UStWOFkxL2xwL2hvYHlBOjZAXj1kZ2BtWl56aEJgJWU0UHJzOHAmXXpsKyMyZ1UrRWA3bnQ2QyE7ME44MSxbM1ZWe2JMeGZJbSx2MXlkaVkkKFZjc0hMeU9aMDExSWN2TFJQflJGVjpZZUFTfXVOLnUh''@;'; put 'put ''IjFiQz9rM1BiamthM0V3XndJOzooKlRKYn1PVCZJLEVLNmN0bXhoeXg3YmNvVDpLJH4+VGdkdCNLfGcibUtkN01oSWxaJlQiWzdpPUIqbzdbNC4rTnAqbmxfQ3VvUihUTWltQn5BeVdDeXVpNEkseWM0K091dTQ0PldOSFFwXm4jYHcpNS5BeD8uXndNdEo3MXRiWiRNOkNUdGdRQFZUN1NHU3Vq''@;'; put 'put ''VWlXUXQ7fjNAaDZ9czx9TDBBdD9+WGBtYlc0bX49K3FQe35XfnV6bkk5fmhANXllQ0ZkZXo9VksqUElyfDd+Ol5feHFXW358fUUlOnZ8cyl+MH5IfTBbP1E/fnF+P31JYFpTQXRLTkZkfjloRjAubVdfYkU8KFE1M2c0MlVRUWp+N3FLXTVjPzVKYiUzWUdnRnc/bFZxNGokOnZ1KFEsTGNBIn1+''@;'; put 'put ''O34lK2R5clVLNnNyPz90QCpOTFU4N1JJK09TQjdpUFh4dHxoPnE1eSo+YUV3T35lU3FYNU83bXEiInsoa19jKnkxQyIyX0pZMVdlKn1SaXNXcV50WzdsQnJxfD4zQ0c6OUZ+X2hBKEtHOlFjV3g6dj5YKTVTYVV0XlFRS0pYNFIwKXpXVXw2PmNoMVdNYj9qVyZ5MVhEQ0QjR0xpaUFJTSthIVNx''@;'; put 'put ''RldSak4wQXBFcXBdQ30+dUcqaEM1blg4RHdfLHVicUR2UCJheXA0WT5oSSR+TEwlRlNYdiZFTjUzUDRWST9+an0yTDRGJX5QQGJzfXMsfWh5YGV9flJ+KDxqX19zTndoPmQwOHd8MXt+UGRYUGwwJi44SWtoNHFoaylLXj4pVXFMfUlmJFE9Sm1vIWlqVWxdRERscS9gX11yaVUmRWAzS0pZKX5F''@;'; put 'put ''dFtZKX5Ffk57cz5eREBaTHV3QHNzRmNeZztJMyolcl9XdlIzKls5aXwuWlZYY28rQF49S29VMixeMXl3KT5lI2wpan18WGU9fTxOcUsoR1ZSXyJYIjtFMVFTLG1aJjoybDpGeiJNeGRQQnZ0LjtrVU0+aUxrMGFBIUlpSGNAbjM8JkV9alVYdHVVcUhxcTtfazAyLitJMSFRPG1PQFNZY0ltIlNF''@;'; put 'put ''IUt8cHZ5XjFRJXFRbj17aHZ3cUxSeG99PjJVWHRnZi4qSjJkTC5iejksJnJrSzZrOiQqNyRKcWxeX1dwMChRP1YyZEhmMWIoWkEhbnNoS2l6UV93MypNazBBeTxJMT5ya0txL2EuSl1UY005QUpENyh6V2BgYHV6ZTFCLjxFMU8iP20jfi59eHk7YXlyeldlNU5xX1tyKHJzSmwkOSpSYGBPKCJ+''@;'; put 'put ''aCFffngrdjBjfXsyQCt3Yjo8LzI7VVNhTEFqeCNRM3srLnwzaENSX3JHQD90Q0dwSjxjMF1Nemlnck51T1IuT11KN1JNVzRuPHtOKGhwVF8qWVEhM095eiZ1LCZKcVJeIn46PEoydmpqa0N9eUREe15PX18vfitSJH58a2pNSDxGIXZeNTFIcENtQUZMUit4eXgyaW82SUQ8IUZtOix+anRpM0k6''@;'; put 'put ''OiFZeWpacmQsNllNIXx1V2wrR1dmTTpWVnQpZHZOTGd9YSM5fkFjeDpIfjRqSWN2e1Z7Mz5MVjgkVkJzVz0uRk9BfWApUzQoYVFxVjUyTDE/W0NtfERBOH0sT3pGP2NjK3p2UWRfPmowXX15ekw0Z2VyODh9Mnp4azJbMWUrfWhhZ1djeEovTEM0eSEvMFJ6XyM4WVd3O3VqSmBSbWJXKT9DMF98''@;'; put 'put ''eyxtc2BuRmNtUUMsPkBpZkB9YHdnKExUbjF1fkFbJWh8TiYseUByPGB9ejJQKDhuN1RYPEsjUH4kXTM+VW9uLlUpYSNHfit6UChHWV87YyMoVXlAUUZvXzJ2VnxFajV9RG8mflB0byh0aWlfbDVeayVgUVpWfCQ1UTQpTWduV3ZtYi98aEBpfjFjUFdAfTkyPHwkTnZ+S1hQVylJekZqTSx2Lls+''@;'; put 'put ''VFE/YDIzX0J5fH1YQjZoXmhsMXE3bm9Xe0Z5bFs1KVt9SSJmflBjKH52cWBzdUlNL3pbUnlufEZAYig9VDo5UXBGNylecHk3fHB1OH0+PWZuajROe3NXOFthUGl9NCglPjU4N1RDRE0vWXtvQiV9WUdjc3BjMEYmXnpFVWBRWnx9VVhSV2dqJD4pRz0yK2BUdyp9SUVJTFljZm5dRDwyP3V6a2Zg''@;'; put 'put ''Ozg3fWw/Uih9Qzo5VWQ3NUsvJUteYF12Kn1rcmc9Nn1OX1E0OnVfZXoiL2lwWzkye3xtO3xzR1FNL15bUnlHfkNvPTk1ZTc1Uy8lS35gbCsxfjliZz07Py49I3NFSyNoXXBUeEI0OW0vW04yd35Qczo5TiYoVTF+XTQ9OWpnNzV7dG9WfFsuRnd8Z2ghPkM4Tnszfndjaig9SC5Ra0dmbmNGVzR4''@;'; put 'put ''KVpTLnx5NVkodWdfOyVAaEtwYGleNn0uY2Z+TD9nKHd2OW1oflY9QmFRKUtQXz4jSXVfO0VCfl0/PX5Qbn1deTpoS1R9eTVrczBMS0xhSnhbVUguQyh5OW0kfXcsR2M2fFdEQn5wKVcoYkgkPkZ6VzR+KVpTcF9KKyF9a2k9OW1uc3BNLnBTeV8hdkN+VVgkc0xBZz1ve3ZzVDREel9ldUI0KnAv''@;'; put 'put ''ZVRRP01KVHxsZThoMVdeO2VKc3AsXlFGOnxGa2Z+OCtlVzlbUFF5flFdRWNNdEJhXn4sWjVoKVljX0FdWlNdfjtLLzlFTn1dQ3koVV97MnZffWh9aF9rSGx1IisyO24oPF56VW9+bXA5aHkvL2lNXSlKa3wjOmVfMEQoaC59LCkofXAhUVdMUkpjRF1zUitzQz83VGQsfmldfVZ9b1dCbUwvWTQr''@;'; put 'put ''N199Nl83Plo7WiMwX1pDN34idVtYVF1kZSl9byFkfmljYytxU0t2RGAjJFIoajJGNy4+L0MqfF90L1E5eUEiR0BzeCV8K0xtc2FEQDkuX14pOX02Yzp2QFojJG8pb0ZCYG8xJX5fI3Rge357dHlJSzZLdSEqK0RtZl9mKlM3UkRVZCwrMF1qbE1uPF9IYyE/OGEpYkIyaXcxMX5vfE1GKERPOldw''@;'; put 'put ''aTg3cGxRbFF6ZWA4TiM5WGpXTX1zXykwNUZCbVRefWNtNDZRcGpBZXg3LDdVQ0g2WWM+YCI6YjYsI15vUWdydGtYUnZoWXNwOWc6SUloV0IsSz5lVWZuYC9jL215ZXVnZ3wxZy9tOHRvb0RKLFBpZjRwKnU1dTkudjV5QzZOQTF5OyE6PnkraH5FRF51c3k5NXR9N0lwcVRJUH5ZL10sN1FHWWN4''@;'; put 'put ''X0EkbHhAeV9IYXV1dExeOGc+KDZuV0I6P2JlZTc6JXc+eSN4N0BTXmVMNnUjVVZJN2dDJC5HOjA+MStzaEtROGdWcCQ1MGRoTSI6eUp3MEtUKCNhcCk5QmUubXx0KV0jYnpTdGwxWUdYdjR6KWc/Nm5TKFZnamM0ckpJL3ouN05kbkVvXSokJSVEZX1QfSpTPT1MbjR6NDBnLHVDWDhbLk93K2gr''@;'; put 'put ''eTVxJHpAamNuQ3FYWlFaX0NRJlFpQmJNaz9ZLkZ7WUo2VSVPVzlPMUxgU1FgWFhhbnNsVVFJRV1gWzJlOlddK0hlNi82aGVGUnhMdSs0aiVZRUh1IUQmcG1sWC8yQG1wUyEmSSFmX3k1WSJkUnZtLEVdWltUWkAjLlJ0bEkheDd5JiVAKWMzMDFVQmR9N0Y2VlBSYnQpcClvWHZ4N3RdQTFAZERJ''@;'; put 'put ''OXNKKGFoXTRZPChRLls9cSJhdTE+Ki87ems6L3Q2QGxMYWg5cC47XUo6fF4yN1RxPigvNnkvXiJUOCw+MShSUFdAUm5FJnc3ZGs7KUB8ZEw5QnI3a11PMmd8ZCVJI3RSNV86X0lvOi90aTJVYVk5XVJBOyNldH0kcXVhd3A+KjE+KjZHOnwmVj10LFsmdmE4dFI1ZDo4PHJxSjk9SVU3JXk+Xzk2''@;'; put 'put ''aEwzYnBjTDZiOT4qY2klYkNQJWRnUT1VNSk0aEZQMyxEZyFfdDZtUytkSjhoMEYrSTRzeXc+diFEMVE9T19TYTEkQ0U9bTkzWm0jViVkd0QmNXwlW1J+ZCpTbEwvazIvKCpHZS5kT115alk8JFRlRm5IJlsyUytkUy5sTC9rWkQ5MCQ4Y0xjNyRnSU9YLCNTYTgqSGhQQEw7IXw1bjQlZENlX1NB''@;'; put 'put ''VW83XzIhRW4zLGEhdGEoZDMxUVg6MSVCO3MmeEhVYU9lVD9URjl0UzZOKFswKjZ5c1R7eVFHOm4lMFVdIV1KQmVnIWZ8dH1oRDozSl5sVlFmWyxvXTIhaEoqI1ghVmZXQl9KVWFySG5KWUtROV53ImRSdkAjZFZSeWhNejpGM2dFQEIpXVpsZl1ELE54X3coREBPISU+PXU0JUxpQjUpN2RVOTV0''@;'; put 'put ''e18vTyVPZ1AmZC83OHo0TFRjJHkhMiZqNmg5QStQU2Jtc24kXjFRPUkrUj05NCRqUEQhN3VdVWVpc01kIVszZkR+PElhdUR1c099YyFkRSl6OWIqWlV3NHAqcSI9d1B4IjtiT10jXTdoODFuZzgpMHw5ezg/ZjZqTVZtZVNKRWZgUTVqTjhCO1s3Qjh4X08yQSExdEI4a1NGXn03UmJIYTVFK3gj''@;'; put 'put ''YWhrdTB0NWd2Y15fLzgpW2hnIWFCYFNvSGdJfTljZEVkX2hEOEROQHBEKzg/TkhVNSU1bkpWUSolI0hUMjghcWcxVUBnWzxiPTBqViQiXVc4W0pSayJqViRLOHYiSjh4O0FeT0VqY00oOzd3WDxXVSVAPWFuXyR7aTJjRV1IPWUufC5GZDU4NlUyTnZsTGJuXW9KS0AxPVtkaktrTWl4bm1sRF94''@;'; put 'put ''Qzg2JWBRZ2tfQVZAWDtwMUUqY2Q8Tj5CUkpSazIxW1lTKlMkXWpfUnpWflZFMElMK3NJc1AvNTpibjBsdSphREtONSUuSDUvW01oQm1CQEl8NC92fHA4fEBJfDQwYTJGQmMmIkVzNVFMOGNHYzdySTs3dmxEaVRjNWQlWi9talpAJC43aDI3dH5McEombXBsWnt2RCZGcVJvKTp4a0hSLElRN3U8''@;'; put 'put ''RWsrOTomQCRuW1FuY2Q2YHZGaVg3Q1g4W0FtTFAiNzlJSD0xLEpPQGMqI200em5qK21CVGxAYzF0YXVVdWpGTHpGZj5jPWdZLDc+Z2JaX0VJLyQ0amNQN3VBQF1Za3BIOi43TDsmVDFtOTpWRXVJanJYOXJJZnNYTj9FXm1wbGJjRHlLUD4zVGVEVyF9XjVwSkY8OyEhdC5ddD57bXtPaT5nYl1a''@;'; put 'put ''RVBIaUU5YiQ1JFtQKFlBZW40fnBCSShKQTgjeHhReXguZCJCSCRSUz4zezE7PVtkcz5meW5bfGROaUZLeV4lRUp5WzJXX2FvLiN2PW45P1V+aV5gdHFtfXtkIXR6VT5te09ie24yMXJ1XU43d21fR0E7WmNzOy9vSDBVS3VdR3M/S25URFBLWF5td2d1cG1sZSVQYGwlSm8/T3dMc3hpNmBLVnB+''@;'; put 'put ''RXtdJlk6RXc7JCxsPWV3UEgxSShESWFJSHN8Jko5bXJwMk5SOH5XLlZPSGpPSHB4T0AoMDZSdn5TTkw4WFhFQHU8dmwvKEh9S084K1JfRikxYVYmWSUjIjFiQ1JyV206LG00W2VaOWdZb153dz54aE1SOlE1RCtrXmwlSl1GJT4yZTB+TzE0MT0iLHMhX1UyNj9se2lFXTBtNmh6bDglKERdbF9R''@;'; put 'put ''ZmhHPUplOj1DSWlCbSw/Z0JvQ1FCa3V8N0cmRUFDcyx3JTM+TyFnV1VfUSs0YUlRfTwkLmRfXjtYJi9SYnhiQiRYK1NUNU59UnY+cm0sdnR+PyVDPShTI29SPFRbZGh0L11ibkZJP2dVLlhhU0o2Y19pR3s0cngpTDs3bmlMQm1NZjNDfFtzfWtleilTOWphSENWSWBVcVM9JGtrfDpdZltpIy4u''@;'; put 'put ''Kz0lIUtuantPUUZxZUUpS3UpXWIlKEAxQEc4RmlIP05SMV1KUU8jcGp8NypTeDQsNXBqcV1xbEZYMF4oYU43QWVtTGwyeDB8UXdMJj9CO3gzSDhVYXRiK2RGWDFnTD1TI3dPQy5bU0Q7bE1gYzwoOWxWeHEwRSpjZC9ZU3BAYWhNSmxeI156KSIydFRwQGEkZjNgWmwlJDpndWw8KF1kZG8oTzo9''@;'; put 'put ''MGZMfnZ2X0FtTFU3eW8mXT9lQjg8VzpRfTw1YTk3akZyeiNMe3QqIzlQfU9ySGhrTHJXdGlYJjVbRCJHI1toVztyYn15eXhxeXdRRWRlbmxjJFA9MT0wfSIwRVByPnJYQjgqI1M4eGJlYG8kNSgocyw3KnZBZSlETn0iR0JMNVV8WjtFdVtaez43aTBZVlQscDcoRFRLK3lkeVRjK3B7NXNxa11h''@;'; put 'put ''VG49KnxrZUg4KEB9a2xqRDs/IVFlMHJCUi9AdyVvVCQ3eytuaz1pJiN5RyZwV3AwZGI2dXNKOCZqNCZkPFBsVWQyLmZbblF5T1IxYT8zO1lKb1gzOkpRWmAvWW1kRWQ4OyFAa0skSWdTUD1WamZxTDYha0EldCFNJEtRbCxFZTh4UmxdVzZhezpWcSU9MGo6UjFkbXA6aXldJSU3amNlVXwhSSwx''@;'; put 'put ''QD40YktlOj1EMUhlQWUrdXJIW3Y7OXg3My9bajgqSmVzSHBMQzRoKGUwWjpzMHhMfFFtbFQ4Xjk7Zz8leVlVfk88VjdYYTA7LGR3Y1BoSDlOOkQzeExxbkJJPG1jJDZbQWc/NzZbQWd2M1hhUGVIW19dfmpsdiZJT314RDd6NSxHS0hzJk5kSXN8W0UrZEFqMlpRIXYweThSYllxSjFgJj83fFFu''@;'; put 'put ''ZE5JXWFBbEI4X2EzKzNrX1FCZW5aZmI5NF03ZWlAZVAlMiljKV83NmhHODZ1Y28iKl5tKT1YIyl6bF1tQmI5LEs2NnEyI3QwLlNnQ3Bae28uWmllZiRtLzY8KC9RO3tkQjVAWWMhMTxrSS5gNTNmdHozZCZdPzF+P2twUHEyQ3FzckM4cHM7aClTelU4cyxZZDkpWjhvWCRkW0txSEZ5T1tpc0lI''@;'; put 'put ''dEg6Zy9LSTNhKEtlNGNicV06Z1pPN0o3cmU+YFd7YEBhLEl7ZyU6SmM5d1hBMzxANDUqZnVnOSRiezpUWCs6a2s1MVBZcGokZ1EldTdRc2p1MF5sX1FTJUJQQTgid1FuemU7NippMlp2XTokLjc2aHpsR1hvWDJTfGhYN0U6Y0tWZSltWDhKckpJKiNUVFUoRUU3XzdqO2ZhdSFAalBXRXVJSnhv''@;'; put 'put ''cV9IazN6YVF5Ly5oKSwrNmtYPCtwQDt4PDZqVyNHdUxDKDZyTzdfVX0sNzk/fjdxW3AyU0VaNjwkTlI4Q2NDPkVYcFRAYj1mI25kczshcXt9dTAoPSNQPVdPKTEjfGZ+MG5SOCQzXnJUPDIqPSxQfDhxdjp4WXp4Xyk6M1dPaGVhb0luVSUibys1TCsqKXJ+NVZOJilGfCkxZXdIUlBdbHM0T24+''@;'; put 'put ''dygrXixVUjQ9ZyFuQ2pQM3p0P1FUTTNWbmpSaklMJC89TUdScEA+QiVCQCZsTzNCW2MjP2hudF9GRjQkOTF2bzZ8Km1nTStfVmR4KnsvKSk7KW8kOm9fPjloW24xZT1DNHUuLjF8Wlk3cmdCYmM1S0RQbX5sXzsmOlojeWlhXUZVKGRINFRvLzNEQEhaYGFIdnw3QnNCeHYpKSM+ZikuJmpOanU1''@;'; put 'put ''X05jPzk0TDxMNjVySlVLUENiQmNidno9ZVhqSU0sQ3FJd0crbWckPSRLMSlFSjNdMWYhMytNOWg8aSRNYnw1T1Y2Nz5NK2hdLl9OYFpTZz0zUURqZEhEPTMxRmdWcVNjfU1HUz9vRF9XJiwkYkshUUlvfGV3VW01TkV0LzlPb3dLX3BRQHR6LF5iMDtfRE43c2lbSkZ4dyV9U3VLVnsiXkQxX0x8''@;'; put 'put ''TGJ8NUJ9cVBqMEhdWjlpT3BCZXVBYCJTTT8+WGlAM3FHWixgaDEwaGExcyZVLi99S2BZXzxoYlV4IUB8Q0RZfC5DaUFFTWBCaih4em0uZUw6dSZXMHdtYiQ+OiI9Sld1PWJaWik2e2Jad15bbUIsXyN3WnxTY083U2FVd2B+TkljZ0o5LmwrXj0yJXxLY3ojYD1DKmVUYygkTiJ1PHgkUXg6YjdF''@;'; put 'put ''NSFYWkcvaEQ7ei5XQjQvOmk6fXxPTT8hTT8kYl1IM3hje0IzclBnRTZCRWxgYGFdcjFhKFB5YXRfPnNVYyEyOiZjWmAmeltEIX1zQTVpaSN6LmpFM31UPUkqLDFWWG02WU8oSTVrJWZFJXxXTjUuN3w9QWtpbUI2dWxfUkNLN0AzV0MxK05KXnwuInVjbUJ+KD59JDI1VHYxeVQreTZlW1giMSZY''@;'; put 'put ''VUNlQjZkZ2BSIj9ySDRgJVtFdWBTYiZyPy4hOHFkJlB0SzxBR3BDS2ZgTXhCc0Y6RGZHYWEhJn4uV0xxQCsoekIicy8zTFV6ZW8wRlQ4OitvKncrRCx2WT92XltkTWh8QSp4PSRxQUJzTShhKU08dG9FQXMpWnV6flskV2B+O0IoWn5aM040NTVFeHgpcjcuTmZ3TU1oYytqWGFbNmR1QWFTMmBD''@;'; put 'put ''UnlyV0RTKFJSRCxtQ3g9e3ovdER6VFgmeyR4Qyh1akVSU2RLVzJ5NlllVFlVOSh5Ni8odlFdYH5NcEwqTS9GU35vNTs7KWJsQl9uZFllKWovMXI0WUFHcU8oJSQ1ZjRUaiRAUSQoTjZSPDB5cD4/IiVZKUlVeig0cmIzMWd6IiUra019PiIlTSIqeWlpcCE3TzA+Tk4qTklyKi41aTJdaEU3LGsy''@;'; put 'put ''T0M3XywyJChfXWlFQnRJZ19rQlFXPzNVTz8oI3g5SUo5Si8heGpRN3YwPHxiRlQ1a0dAPSF4dlc5U1Y1Yl1fdTJVZWF3aj1NQD1heEpmYTRtUkJJbXwqTSpJWSVTJjV2MmRJWTQ5SyE1VSE1QjViT1ZAIiV1N3FGQXAyUTtOYFFYdEk8S0M/PiIlLF86NFYqQjl3YXZ0L1QpYklkXV1wI30yRz57''@;'; put 'put ''RnZlLGthWiRfSDFJaGR1OStQWWYzdixMdGJeTFY7UEJAflV7az1GVHReJl1tIyFseEhKRDp4OT58SXddaGlsdmpZcH5UdUpTVTp4e15XQy5IRFg8YWFLQWlLS1FVfFlSaFMjM08jblcwcTchSFhHejlmYTgmaltMT2tEXzNbNzg9cHghR1VYKEhdXSllcFRxSyooTWRsYnNhKUxRVEA9KndaUT50''@;'; put 'put ''cEJCdm4zdyhsZlBPcXAiSG10elZPT0gkJHVpOWQvdnN+eHtefEhBJDxEYmpoZUt3fWZEaUtJQD0zdWVPW3owTEFnRUBYR2J0QiEwOW9wbEJnek5jKDdwZlErfU9zLFEqLjt0USpCbUBkQkFpWntZQzIhSXpuJkJ8VksvLmpEaF1UTmpGVFtVZF5gXW9yLiJlXkZpNzRKMFd8ZU4jfVhuWXIpSFBL''@;'; put 'put ''P2kjMXZlbHp0Sm1tKWVxfHFQL2F5LFdKZD86JkNqcVN1amlGaC9ZTHteZCRXZnBVTWlQTFhedi4rM2NjYztoOTVnQEJ4TWFyYj0ic3V6OTFKa2IhRCZCcTc1R15oM1E7Ul5wI0hhNSE3eHdBck47bm5NKjF0U3lVNUFZNEtmI2BLdilAV2FEQG8iQj53REI1XWZQI0w0LGNDUDdxXWFBTyY+OHFp''@;'; put 'put ''UkRwNm49VjNTVmxNRiFEQm5ZTE9OVTB8RG4xNEVjaDdnNX5ga1NaTEc1bmVsKiMxdTRSRjk1Y3RVNUIwbmE6WUkhWThjRWE2Mit4RHUpNC8oT0ouPz5PQ2ZbJkdgMWd6MXpJaEdbNHp0ZjohSzt9RGEvTEhGZmtuI0hLQj9EREQvWGRdMmcwSHpCPkh4Rm5ZKSg6WyQufVZiM2EmektLUTg/UCZz''@;'; put 'put ''JnFMVCxQflVwa2BYSFR1aWczPzpbcTFeUX5GVDg7KzpCNXw/R2lDMzk4RXRKPENWeGtdI058THoobUxrclNKfktRRS8seC9DOHB0elY5Wk4/WSYudXhXaVMmWnM8KkgqY2paLmEoJlBwe1hIQltQODR1ZyVbM3Zfe0heL2tmMDl4VkFGM2kucVosa0sqMURuWT9ZNShoeFVxLz0qKGg0aSs3SFdo''@;'; put 'put ''fTd+d2hwTlk1Okksc3x0MHhFajFVNXdvdThON0srMyY3NEdIVUUsZC9lb2s6IlM/Lmh3KkV6Mk9RLD9xL2VvayN0TkRQWGMzWTxEIWUrTFtPJjhTIjtCeH0pTGdyWCYiV0BVdm8rNC8iSUtWZzY1QnNyZ0c0Y25eejZqUD9ScG84bFs1Pz1MWUFqKVsydVkmPVApTl52RSRucHg2YlBCdD1sYSY9''@;'; put 'put ''UCNNflcsJFtaU1s0IkVsUEhwVSNIezEyPGFnXmQuWDhxUVZ7Jjc6M2NOXSVOdVMoM2YlYnU6Vyluc1AsZUlrcE5gTWNpOCVqIXxVS0pZTzdfXmAhOiRrUG5MblQrMShNM1hMNDszY0kpNEd0WUFmSFEmVykzbj88ViNIYjJ4TChGbTc+bGQjSjY4WXgxMDkiOklBW2tSLmpdM2pXV2BuOFJBYF1v''@;'; put 'put ''eFV9QTJtXTYrY3RNQGtMQzlqI0g2SndMQloobUJ4SDwzdz5wI3c+d11FPWF6eW1jQWcpQXwrMloyeXNfbCMjVDIvOjUyKk0hYzxLVmd3OVZrUE9VSGlOaDpDVCRdezBEdGxEKnhbYzddOU1QUi9QSipsN3dfeGk2W2hLaChLNlMlV2ojN1hAMyxYRll6PUxkK2VHcUl1JCpXbWpdIWdpVzI1fGUx''@;'; put 'put ''YGtTMWthU0gwXWUxNEx6ZW1BUWxNMzlRSWFLPXgmZD06PERARmJNXmlLaG87T0ZDaU9NSTxEMXgrUkc7KjtuPndreSskV2U5L0NnKSl4RGJ0NUlrVT53ckZwWlVDZyNJZ1shbSpZSk5YNTkqfjBFVXFBZyJoaCFOcDBFLCpPN1U1JihtRzU/eiFsUV1WJVkwPT1xSGFzUHRaeE8/PDJFJVp+RiVG''@;'; put 'put ''X0ojSDk0Y1hPU0FgMyVDejZJZSpNQ1NxMXdDdH1XNmQ4Y35LMW9rVFhYO3RqUCFFKzB1LkRiXW12VUF3WyRKVktoaFF3MmVwVlJLZyJjbFRrQyMqR3tsI3o2VytrPWl1N3RRREkheURBQU8mLnVNWWdzKlIqZFRNcEJuJXgqPUhqUDNaLClnX3Z6YUIpTlZBa1UxaktoYDBQVEo6LjIsN3tIekwm''@;'; put 'put ''dENAcW0+dztCcGl8MDRPT3B1enVvY2leV0pyfHE8SEkrfXZPOTNjI1BuT25IKSl9cHtTSWwzdl9tQSxwcTFMb10ocXU5XTFnZ1ZBRSQhdXpiIy9yIjo+IiVBUkRuUWUzSzt3U1guNVt0bCV6OW9wPkd+bntLVSRgcFdOKFFTcU1oKUo9TShXYUwrMENvP3VjMDg4cjBwcEtIfVJ2T2Q3Qm1jRFNw''@;'; put 'put ''QEAmRHldIiV2KGxVX01vMGw5dl93LmpZV2lTJldJTmk0VldHJTxOM0cqaDFWdCZHcHA3MHIxT0Z0cUJFVnZ5dVE3VUJUJjV2aE1rM3hpWjgzOFJkSSUhSl1fdDNRKnxCSVRSMVYuMyt8b2lPakdAPWd2RVlZeiJRdjt5Kyx0KkVAZC47NytbSDNhQG9QcH4iVk46YCJlPj8iJUhYYDxBQ1VrVmlT''@;'; put 'put ''dzMlS2VCTSglKUZmbCJvWXYlO0B2SUFBSy4iUCY1dit5b0wleVRnXnouT25gYVNHYHQzeGUoSCtkQUQiJVZIPzV1WVIlcHBFSlAkSVlYQHBUSEEzTFo7dixmcSouXSYqdHIhVUtwMig0MUQ2bEVTRmhYZ0hSOGBYZDlkJlB8aC5IQ0MjTE8mdFQzcXFrUGVxXU5UQVZ3T0NEemBBPjZffVdzQkx5''@;'; put 'put ''PkV5SzkifTciK3g5cnd7L1BqJUxNY21UUHdedGFSZSZYMUZ6QUk1THc8VDEvPkYjdkI6eXteIlkxaU0kRGFbIW5CZFhBUkJfYyY1djNyUiUjNTgpZyZZRUtEI0d1UnFweENfU2V+JUJpPCswfG5yTCtIcUlAPU5jQFkhT0VHQnhPTyU4NjVWL19deEg3XklIO3U8N1ZLdTE7dyJocDBwcCJYbGRm''@;'; put 'put ''TH41R0lRZmlLO09fdFpxdTkjV211YFp+NUpmIilIVENhNHVwcDBaVDpgJF8jZ1B+TDxXX0VTQipfImdAPixKWUp7JGFSY2kwR081ZCFeTWxrW0ksN0l6MCt2cl9QXlE3MUxsbHckMTdiXTk2U3ZOTmg2YGBERT9PYyRBN2NwVlUjXzU/QV1dWTcmMHQwZnAuOWc0W0pMWChTKFdPJj5ZbWwjTVhS''@;'; put 'put ''VE5OZy8/WHJTblAsY1YqV1RpSFo3Ulc2cW5NfXM2Q31PQkQ0Q05FPCpKbGFpdyVLNHdiPnl8WDVhWEUjR2tlKjZ3MzZUZkUjUHhuaE5sPXJZelJQamU7KiN5LitTblkoMn0zPkMhRTAlIXRWWD52fEw1eEMqMyJxb09kWk01Q2x3P31CQGJoMUV7Wy8zX1RIKHpZK2prbTVmPUgvTTdINSVWNjwx''@;'; put 'put ''JEBWOXxudFhvJGE6Vih5RFo7c2NnRVZ1U18vNVo9MERafDBOWl4mWi9HSFQwSFskUUhyd3okT0dGN3NNLm4+IVtZREAmZHI7Pyg0a1FTJFNsXi9xXz8wMU9nST1jNHwhWjs5Sz96KWUwXiZVZHxbWWI3Y0VoeXk3ckJAJDUzNEBtdVZWSEUzdlA8ZUgjNkg6LzdtUyIoQkRudHN5YEZDfS83SW9D''@;'; put 'put ''THF6JjpfYXRzMkx8PCZ7XyleUVZeeExhUG4qcjMvJEJad1p3ZiF3R3JAOXY0cjkpQ0RtaVUwdGhOe0QqcGFad3dLeEdIJnEmTDt1dzU5Q2MrclQwQnZmY1gzM2g7cmZARzNDV0hWN3hkbmFXPGtVQ3REal1zJkVdTWJKXUxFQixxRiU1VjB0UCN5b2s+OjtWOj5kNk4vTiJCSiJHWD40Vmsmej40''@;'; put 'put ''fDE3e2pbYVd9eFsxRkI6d184em8qWCp2VHBOLDcheDZnMmg9NTAoWy51eUMwdHlfL3laeHsjXzkhOVZ3Xyh3e1lpeTh9PH1me3dYZltlamkqZWdKJngkaSFiOnZTNnhHdGV4IlhpbH1rV2I3eiVQMjFnIjU1R1Zfaz41Kno1UDNLd1ZIcXxrTnIoXWNiUTFQdCsuTHxBbHJ8dk5BM1B0RmFQKTZ2''@;'; put 'put ''e11saGF8cSlEa1k+MUdCNDcxKFpEVj8iJWRtczNgfE9kdylRQkhiWlMoanxwd003K1YxaD9gRDc2WH5TTnklUUZwbnNuYV0/dklofUJ+RGtZU3A+cHxjK0hRflMvUWYyYHIoOSpNO2Rjc3R+VlR6bSEwT0RhOnZTciI/Q0lWek4rWlgrJlBfTzp6aFdUfkQ3PG5lZ0hibi99RWA3N3dKL29zdmBC''@;'; put 'put ''MiJNe05ZKEh+JjY+c1hhNFtHVDZ+dVtLRGRHbT5Oeyoqe0RMMkcvKHJaQERJZiQ7O0piaTNNe0x9QjJMTCpgcGtRKHxydz9Yc3c/dUhBTjpCUnxdJj95LmErcilvdWtxNz41NXovUEtCeiUmSzs1OF1PWn1WMyVqXXImX181YzpRezQ/Ty86Py9uSTxRdT5lPXA+cGVxU3VzMShNSEQ3M05wWmlY''@;'; put 'put ''K01feHlGJjVJP0tIMSNwYnhhJltTUE9CcEZUMnNAPCUxdHc6OlF2cz9fb3hxdiFPRC9zc2V+Nn1CPDdnM28lNFN7QnthSHtjUDZ0ektRdjpMa15GZD0rM19gNTdQSUpDaUJxPkdWREV3a08ySE4zQ0pDJCwoSyNfSmJ6RChyYmNEMT4va3t6dG9sUyRpXTM2VTZEekRCQ25+TjRyaXojdDtyNi5B''@;'; put 'put ''cj8yUDtDekJwYkdqeWAvKnldODVhYzNBTHxiQ2RBYT1XbTxoaSs4YTwzVHRWXlp0TSl6RXc+Om9Pe31CTjtlYjlHS2wxPWMufEx1byI+QWRDbVhreUVya2AwMVMzU3tOLFJXWjYyTDhEflNrRC5yNW90JjRaRTFlLj5MYmFsQzFGYzJ1K0RyKi9iaEM2LF0jeUZlbzhvaH59ZltlM2pqeX1fS0Mo''@;'; put 'put ''MVpxTj4xeFp4emFkVHtBKWtaNGZALj5jP1pgXVp3d05GTm9oYDUoenxabTwiSCNlI3ZzVnB7c007ZTg2RVFTWUNdZygvfDBPYjJaLCtybFh6eXJzVzo0VUlDa11QbnxxTn0pfCUyUXQmdy5RSF1+NXBMTXptQXVbNDZzMlMkcGtjaEtyZCkuNXltOj1FJlg+eF99e3tmOnJpbTtROXJ2LzJ2QF90''@;'; put 'put ''WVpUImYmQ0NsXTVZOnxYVjhQfHxLRChUYEouOEpmPVRIOX0+QE1ZJEhYMl9xXS9Lek8oMlVyeUBjcV9tdmBOZj1+YCM1WkB9eDVoeiEmOTFWXlp5TnY2eHEjN2QodjIqTFQyeW1GPmE6Ln08OjtMfmMoTmM2WGAyZk5tSmoxNm58UmNwVDI9T3o2TUlML31WKmFkY0dObn5xV3p7dyFqRD5MbkNy''@;'; put 'put ''YXpvYWAjOEc0UTpgUjV7cGZSWzAvaSZDeFZbW1spcHwoTDcyXUgpb243JjU1MjIwZjFzdT1EV1pbVlM2VTA+Y09FZHYmNnxbN09UITU2czJkdn5gZGhmWj1NJU1wQzt1WTBRYUAmO1oyNWhTIlpqRiIvL1pPMW54PzxiYDo5QmRYZCE3OWtueDZ1e01LYkI/JDhFUWR2Vz5eYD8/a1omSFs3b08o''@;'; put 'put ''Pll8eClGZTltaTpDNHZIKTd0JXVWal1oWVBnNmF7W141Ll1xWiZYJWA0aDZrVDFVZ1R4bWg3JjpbQFhGVTs/aHV+TGx5d0E5eXBWUGwvOHRaVCk/dTF5QTpdfG98OEZSaTI+ZVdFYFVielZVZWVfbnNvYFYiZV5yWFRydH19dnFmVTt4a1coXl9TfmNeLFFIR2NfbnNIYFczeXxdWlJMQmFkX2RT''@;'; put 'put ''UypHM3BqSmJTYEl+MSJDczN5ZEN5eVMyZU1NeixYcGpPYlJgK25jU0ZZIzhnMD0vYFNvektmb2k1LldiJm9waDdbKmM/TWFaQl08NTwvJTJ2VmxuWVdUbD81JXBAKTc5I2QyfV1LXX1gTEV6fC9YfkspIkheaXRbRXtFOk5hLls7RSF3cFZQbFVybjQxeztFNVE7ZT4vQWExT2l4ZDFEZDFoZzR4''@;'; put 'put ''ZzNac35ZT3tgc1tLZjpXU31yVVI6M1RMYn1TNjEqLGNKI0JTKCV8Nyt7YmRxJUxLNV9LdHxGW0BGezQ1UVh8eTZARlNZVSgwXzJ4KGtKajJoezkkQUt2K0dvfEErOkhUZSFXQ2p6cjc/YXJOeSVLRzZWMGBjS2xIUmRnPDZSYVJ4cD5eNXFMJkI2OUxiek5QXWZhY0smMExufi8lWigpKUo6PXNd''@;'; put 'put ''JjklNX56OCJyX35Bb1ZpXVgoKHNxVWV+KV5KS0MsVHtlKjFOMFo2KGVqSSZ5TjVaantvLy9hV2xiKzFGbmw8Y0B8OFhuWj1fNEVJYmI/PTpMcjxzMWBsQyo3UnMwYDAsJVN6NzNVMTY1ZlhLbF1YbnY9aVd7TTN4P1hZMG1GJVtMfF43dlNHXXAyKzBOUEtCQWE0VE98d1NBOl9aQ05DQjNpYT5N''@;'; put 'put ''OmFyW106MTZBYDU6ekdZWlRDbEk4OlhEaHAwNkQ+Y0A+TkYjZWJuSHskNUJ6KC9dbnA7Ry9vc0dgNkRTMUtOSDYpM3lzc35CMVh0S2VTRWBba1p1W0FGPnRfMz81RUA2RERgcHdkczFgZFNZM0JwRSZdYkpycmYpQnRrPy82c3woVkcuISJOfEs+ckZ6STJJMkRaSyR0N01uSF1LcltdYFlLJE5s''@;'; put 'put ''PnolRGpdKVEmNXc2MktbYkRkV2QvWnFUZGM+VXVEazlxRkNkOnxGUW09Pl5QQUMwV0g/Y2Bfe3Q1I2Y9ekZ5VV1PWkglNXBMSjBtcSNCc1ZMYSx7cjcpWiJaOi5pczt6cVF6MnheKGF1emd1KXZoeG9GKCpJcXBqcGpfOT0/aHUiST5qYzNhTV5ldTdefWN7UEVNJUVoXmVbJkVhWCsqR05qT1dx''@;'; put 'put ''X3F6NV0iIn5xXz5wS2hVKDNXfDkuakV+Tk9MaFckeTd0LEkuUW9UMVkiLnBzdX1SYzlpclg3U3JtcHpTM0lgYjpsU31eZlkoIWNkQlU7dThaTmxkaFR7eDdXcGUwVShWfjU7IVNIb3hOK2t6bC5iPio/NCgpYCFjSV1WfHJtP185e3BvZXVbP1ZSXT9tTE5vWiYsMDZ9WjMpR1QiWnk2PnxCWWNw''@;'; put 'put ''Qkh+b3ojSGxyMlIxYF5RRlA5Vko8VnZ8WylHTHVzMWgrVFJjcWYyL2QxYWh5cyVfK3ZORDZ4Nj4pNW1+YEwmNUVgZFljcCFhSjRPOn58eC4kTCtDPVFEOn58WykqZTBTeCNlMjB7ZDZfV2tdSi8xJmp7dDt2IzkpZWklLHk2cXw0LHNaa3V1KUtyUF1Gcm46ZTNYWTpld1Zve2g3cyUsPUFyUWRo''@;'; put 'put ''MXMmdjIuQEpSdndhOnd8RSslaXxvX3omKiVDQWZdKDMkSCQsUW06W1ZfW3dEYE9iY3E6cSYlW0ksJiM0U1JaTiZDYCYiZE8kLzgxW2FvJixKMDMxPnR3MSRNPjdWL1soQzZ2KGBYPnxKOCxHXzszfmB6O0IyaVd+enBWYy9+IXwkVFtXK3FWPl8pWE96KW9LamdCSj5iJjJfXztnNWE8QDptOCwz''@;'; put 'put ''Sns6NiRGIWFLJjxjM2VjZitEVDtQZUAuWnFdKXF6bkBpWDNJS3F1e0hQXTZPSklxfVYwTUk+bHFZKXo0VnJuaXxiMVZXcjlxWCkxQ2ROVyMpM3tgezosMH1WJG96S2NxV0s9YEg7fEU4K3l9KDN4X043MEpxcFpGcF9qWH1WfHp6Sys+JVllamY2MFRyT1FyZjQ6WCMiezZQbkRyKVZmcilWUWBT''@;'; put 'put ''WjFPbFAwS3FxcXtwWDNJY0ldcSgvNDUrLns2dlZOYE9GKEVXeUxaKz5IKiUyLGN9VmV1SlZdX2xwZl1qIihrKGApM3pfeUBIKmx5ZD5zZ3RFZHFKN2AoUURAJk5PazYvWHJZQCZOTyoocj4rNWdkSGRUbFczKTxCbFczNFF4TzQjSXI/eiZjdVVOXlJUIzVoIlFFK0tLezFIeCZTXUBYXW5BV15v''@;'; put 'put ''fj42Q0NdZUIyS3EmK1RDbFtLO0g+VClELH0wTTByUn03eSY1S2E4eFloTnJjLDZRPm5GVkhPSWBpOis1bGQpJlovaGVxZjBYV3hUX2RFUl86ZX56SlZZXTp0ezZiOjY5N3Y2YmErNHhldVYyOU5TYkFAcndZcnt8P2AodUZlbzhKTGl8aipgRzxqP2VnZnY/cndfIUZWL1k+dHUjdHN5OldXWmxA''@;'; put 'put ''MkN7WVZvOClLMlNuNS94MyNFe2dOJWFuMTxRT2gya2dlfj40JGVJfiNheStyQVglQ1smcjRCVys9K0tLezIwMDZwOFcwR31TbVg/RF1oImUwdyNmMnIqS2JiYTE+alNSOGtmMkpiK1JXXnxOYz41R3IiW101SjpbMko/ZWFxZj50XURdL1syWzNPLnJFTUVvaHFfWSxRdEZWKEsyU1I4KDhBKUFy''@;'; put 'put ''TDghQ0JdMHJwVlNdUjgrVDJKWGFGNkBzRmBiNEN7UXRqQis2d1pAWzFXeDNoRnFzL2BiNEJwXVkjQWIrUld4fDd5ZXY+ZXJPQntKO2hlcWYsJitUK1Ypellfb2J5bmpQMDYrU2BFUHJpOnZrdHgpVHlkdSM2IlZfIlpQM2RPVj8wWWU1YklER20mJDQ4YHlAei5QMHMzZE9bVTdjOHtnMWsoeVBr''@;'; put 'put ''UmRIaTIpQEFyUH1XIz4wOXhwOmtoPXNIWWB1QFFUOiNfcHk8O3hJLiZbc2lYPFptRSZTX0QoSU57JDkrcyRkLmlLTyZTYHdEe1V7fU5ZSFB4Zyh2STl6S08mU2ssOkklS2JjaCklRChyKH13cGwvP2MuZyh2aWN7R0xpcSpaRWI2K0hHNm9IQ0UpV0ZmeFhQXXlJc3xzfC9LNzA/Y09BRE56ZHJM''@;'; put 'put ''aTJfdWp4OkhYYzdddFdQUyMkJntScU5uNGBqQihLSHQuR1VeYF8wPmV2Skk4Kkg3eWMhSlJ7YC9yNFNZKmdXJk9FRzdWWyx3IX5RPFB8bXRqVTRPTjcic3BzdUxoIXFzUkttV0tCcThJd3FQMk1SdmJzLGBDdnZzOlA5aERHUXpvY3ZoZWBqWT59e0Z5d1s+K0RgfFIpOGhDNSUsT0d5X2YoO0Ul''@;'; put 'put ''LHBgWlNGc3AoQ2dicz1gOCo+fXA/bldzPmxPI34wZjJ9dlt8UVVRbjM7Y1pgUDgoTX5ibzkpaE9XJTEzeSV6cVBXezN3ZnNrY2hXW2JobjtdJTo6fTZ0U1cpRkcvU2RiWixdYkUxXypDZHNGKDcmbHcieFFqYlpHL1c3MigqbnE4L183a1Eob0drQiJDVmVLfkBqLzkhKTNJfWBPfGR+KiUlaEk3''@;'; put 'put ''W0s0Z0p7W3UlfWcyNGh0dyNBbSkmSEh9ZzVyc2kvaCgmXnQoNX1QMm4oXVFTRWRAJGQlfUkpVyhGZjI+dVAsN2IoTkdVNGQzO2M7X19CPnN1UyY+PHlLUFNMI0V2LGYjMX5bKTl+eEdRLGQoO3N2ZGUqbTcufCVpanNwKTBSblskZGRXTipzVzV9VjplRUp+YWBLNG5VVHZmNyVbTUp4RmtOfThp''@;'; put 'put ''V2FRMXIiIjtjLz5aQyN8djpMND9DY180QmQrTltePE1MdW5eSjokOiZZNiVWYnMmYFd8b3hRfnFsZ1dCeTJ5czpYST50MHk7Y0l9Zyopc0V3YSsxM0w4I31kYExQMntLLCt+M3pQfF9eVS9mflZwUTRTZChoNX1JfXFMLn1ZV0Q3PEM+KFFJOShjcGh+WExZKCs4U1hqfEpreEZHSDFGP3QqTzJ+''@;'; put 'put ''WXd4RntDYGVUfD5YclcvXkE5I3xqMlBMUVEmaEBET2o9dEtQJEA1Qz1GITomSF5fMDFUKChFVExgIktQfihvRjhfWitkfihxIn42fkQ/UkxfREVodyl+XXlGIUNic1s+Snl0Xz1Pan5YY1NMSUhFaGZ8QEIjfTp3VjdyT1UoQEAqQV5lKT8/d1t8KT9WNCVncThKMXhLcSl5SD9gPlg8aEVfJTok''@;'; put 'put ''aE1OUHwlLjBSVH5+KGMrQyJScU9XW0V0KDpzTHsuYDgkWkxFWCRsM343fGpCVVtrSihzOlM9Py5+IltyMC59KU88c05OYlpTfk1wZHN9RiE+UEpxOGF+fldTKHc+JkhBYGhdbFcqb14/YSx4WlFqdH5WTWBzci4yfWpbSUYzX2lKcThCMXhLTV1EOEEibSFLUCNbJUMwblRLODU7Pz5ESn5ydGR+''@;'; put 'put ''fnZ0KEN9bUhsKGNxWiNKYHl2Onx6fUB+SHMyfTFbfjpxZ2UyZCtoVyJFOVlZfFJ7IXNAUTVoIzosSUVCOkkyfWZbLjEhfTJjMUZlSUNUaDVrfi89bihsLHBeO2Mrc0M9MnkidyNnYjl4PTE+VXw6SFYoTkheKSU9dlQrNCM9LH5vMnlRY19VMU9qKF9HfFRMPWkobTI+OFIrN1sqS3lPKC58dVhQ''@;'; put 'put ''dmV9cyJ2SlF8JCwxIUV+Kjd5RmN3YG5kX1oyT2paKXZwMn1EW0VSb3MkPVU0PCI1XWVXLktjX0IyQGRpfjAhRmN9SGpFeHxURSUsW0ZMTmVfXzE6UEpbYl9xfnEqXnlbJjhXTk05W1cofmlqQmtYTT5OV21fSzdSKDVpNHk2dE8oKHw6SCFJS2AqQyZzaUUqdkxgOkIxUFEoUGc0eV14fUxic25g''@;'; put 'put ''akVpc3BDIT5vT3NXNn1vJWksYkl7dHc7Mn0uQElGNV9CZT5+US8yfVBbfWQpfWY0MFJHKUg0Pn1mTT5+K2AkKn1+KmApKj9+eVs3Xzk+JlBkK0FrNCQ6djl+cXx+fld8cz1CIlcoeHRmPyNRZ35UUlFfOF5VdShXeGtveihyfWghJG4yU1guS25GMStibj0iYSsoW0ZKfTJbMS8kWERSekN5WyRf''@;'; put 'put ''SDtpT0pWUltXXkI8OEE/KUVGP3xzUGMkVnhDOHM9MzdvJS5BOE98a19hPC9lWnJbNld1TXNncjh7JF83QlooMGk/P0JrPCFSelFeIypxTSptfip9dmt2SjxEZk90VkVtU14/RlNgYC5lOCVeIz1JRzhfOls1bkheUUZCTGhZRVooTiw9P15dLjswOXQ+Qld2Ol07SF97UytWd3Fye0lAdVs3UVlj''@;'; put 'put ''UTk2Q1ZWPSE/Pz9oPjtNSk87N1l6O1Q2JkoxcyJCKndHOzozPTdaPyN9Tjdidj55TnZEd0ZFQnRnWl1Pe1hLQyZXR0MmS3MpQml2NHZkbk9xcWRxN2NafllpLmJyOFl7QWVZLFkoMXVOSHljNUx7ND0maUFLOG9rXjJmeHY0MDpgTzIiJVF3K0ZmODdxcT1zO1Qic1A7TjcvQiNzdnNzYSI7SntE''@;'; put 'put ''fWcjW35nPk00U3l9cVBdeSMmPDcvMyFhJVhqKHYhNi4xPEd4akxsKlBNaWQ6N2NJcnpAdmNeIkksM2NVR0c5SWsjKH1lRDJnUEFBelhBQUFBP2IpRD0oNUQiPHZIREcqX3pLNkF1e2s+PUtraVNuQURgRUs/VEsyJEpBXUNNPHVtQ0FaPzIzSnxobjBoZT5KPW1BelgzNGNDVEFFRTAhKnZWdHIs''@;'; put 'put ''WExGUn0wZkRBQXBIZkcrblJRQXVWUXZEc2I5QkdPTzxhZUwhM0pJNldSaj82UncpIShfJG9JPUhBTXtxaXU/bz96XUhdMFhbYitEbUZ4QWl7aDFbUF12V15lRWFfXyhvfWkzLndwVjxEQHlRfmZPIWNbPm4+JEheZFVLXmRVX145Vmh5PjNJeF4zYi5nP29gPyQpLipWd2txdn5dN19heUF6eUUo''@;'; put 'put ''b0dRYC41NC9DIVZlckhGckRgLkpRNkNhNEMwWVVHbnxlW243XyxSaFVfIWJ8XTJgfkg4YDBkbDt+JGpdV1BTc1dxekMifkAoaDUzIzV7WCJzW089KiIsfnN3bFhiIn59I3pkSzpGKkl9WHlleCNnR1J9K2t1ajgsdUNyIm1vYj12bHVzWSlyTV40fllxbUBdY2dmK3osLE1KZWliMW5lcCZUOGlx''@;'; put 'put ''allsbzcoKjBHQ1tCbm4wTDtTQDE2eTNJSnUhbUNOaCpSd0BWeWV0NzEudyI5ciJ4SnRJJU0uQHQxT1M7MCJQcWMpXV5GSHpeLz5tPX1NWk5kOWFLL1Ymdyo/L1c1Om9jbXpWV0FnbXsxWkd8MzV0SSlPe2N5WXZEP25nNERXM2d+cl9VQkxjJVNtP3FXaVhPNUNgNGExJjpzUXNSfFR2IyFudnRr''@;'; put 'put ''XXtfOk82TTxUUjR5eSlyUHR4L2wrcFM0czxXcVY8TzAsM0AjfSJHT3VTVm9fMX5IZk88fXZgVlBMVXpIM0htIV1bImtIQ3ZtVy5TO2hdZUdhfkp+Yzw8L00ySVA7dU9TI20vRDNZeHI2fWxLT0E5c0sxbHMhOyZFLCoqI2kiJkFVT1l1JD5QPW5KRy9EZzFwWWE9R2F5Z3NdWn4qfU9XNFIrMmd0''@;'; put 'put ''QCgxbERYWFEkeWAocSprYT1UPld6PkFnO3JrQDZdK3dXMElGTExsMVQqMDlgTmV9QTZfLDQqJUZLSiZ1eHFxWmkqRGtZRTdIUyp3c2JZL1tvLy5YV0x6Ly47U1osJHJ8ZnJhR1FESSY4Iytpa1l8R11GcSVQRDtDcSNIKns3SCpBZCRnZVVnQTokcG5uenMlSWhGR0tpeyVEQXhxKlBEcVFEYUs3''@;'; put 'put ''fTwzVUJKKUNDO08/Nl1RY3IwPTk8dCs7N3RUUyFaQjxaN0s2RkN0KmF7OWRUQmU4QltjKHVzJiU+KS52JmRFcnVsXVNWRzJjaWwkSEhPKVdCejFCWHw/PkdvSSVVd0VhPVl0ZUV7WVVBUDEwSzJVNlYkc3tjbD93TE91ekJSWzIuJW0oW2ZgVFEiM1pOTVFRaz1RN2F7cltRbCVnQmFZTDlFQXRz''@;'; put 'put ''TVJEJXkoK2FgMlYwPFhHQ2tbPzVUfGF4dno2RF9RdGRWN3V3IStacSpoT3svNFhWbHA7RHdFLkElVGY0Oj9KU00wdFRofDIsPF5ZK0UkYF13LmdocCsvfXxlQjE0RnovJlZRZ11lVENPfDdZNl99IWx+KFRaNylCTyIjdiZhXW5DXSV7NV1pdzRCI2pEdntPcn4mZiFzYmB+dGIuKSNAKjY6NCR0''@;'; put 'put ''KiNeT0pgL0U3fD5geUkqX3IwWXwmNkEifXdnKXxIJVBvOmI6QzBCViJHaDVRM3B3RGc1L21kUzIqVjwyLFpkTjNFW2xfQyFISF5FUF1qUDszPHFwL2wwbi5UJiwpJSF0RytbfEdVTXRfemNRTT5idDRQQUxbakJxe1Zra0ZaVT9rRnM/eTEpSEFjY24oZFpZcT5kOjohNV0sdFR4dGlUVGcmYn1x''@;'; put 'put ''KihOXTh9TDV5K3NEWHw6KWhOeF9Ob01jSlB6cH5nRXNRNCM3amdBVyYrKHt7JFA3cl16b351YURCYmxbQndtXyV5eWk9RGNBN0tWSikpIiMlXjpXbzdPRTJ4UEtqO3kmVjxZXmgyfE9TM1hJRCVGSXpNPmV4SFhIaFRaQlkpPVl8ZUo5OzM8fDguJX1VN3NAOk0+eURRJXZEY3hJPURCQm58LDo3''@;'; put 'put ''cDtwKCxKd04+ayFlLmArQ0lJUXp2R241IXI9UEhmK1trIz5HW3lvLGZdLl1OMnU8QlBhWUlsQ2NKXkE9WFZCOXM7SV0re1htO3BhNUFdLCQwYkFnPHhZNktQfiVZNSo0ZCQmNCUsP25jS11+Rn4rTzMmO0pdYjJmTk9LKzFkdGRWeEdNLExdMGRCNygoKlRfb152SC50K0tKcUNSbilOd25bUUpL''@;'; put 'put ''eTN6JnE6N1ptPmNTO3EkSTFoIigrcWZac0khRFUpTVNlN00mLGxWclFZUDVaYTk/aU87Xj1tWlhDXUY/NTNFbyspKHMqaDRAfk9yQ0NPMk10RnhMcjM5TVdbNFc8YFZzcnZAfU8/QnxXITU1Wi57ckZEN3F1VXJLWlBsKkF8K3lSdXY0fVMhKGo9U2g5Jjo+YC8kKGVFL1M5KDFLPCY0e2o8el18''@;'; put 'put ''QXBWLlM6KU40c017cVE1RV1+RkNdYCJwejZuXkJPS0J4KH0oVFZbKyh0bnsjMG1UcjE1WFEwfTRlT1cyXyYraGh+ZUZ2SC5ffX5XV3VZdEIyNGh5L0JzOFsueyxjaT1HRG5HUT1hSDlnVzZoPU5uXltBJjQyWC5LTyhvdy5wJnEjfi9wdUlGMExaaHIzP04xQzMwcWR1eHFxKXl7NkBaZH5xfHIx''@;'; put 'put ''eGEqRSwvNytZfFhXZGd4KFIjWkd3XyorO3JzQlR3fXFzST05aUBpUD8rTVdXRVR4PzIoclNYLC9MeVZfaSw3cG5HdD4weGw1ekd2aUp2PiZtTHg1LDh0PmBHMzwoKyhycGkzeCt3X3YmZFh8UkhIaTVeWTs7PCxaKChdIzkjLltJaT45Q1FEX2c+UX5bOVR4V0p5KFZYaSFzY1UyW0tJT11bXnA7''@;'; put 'put ''MjdwZ2tuQS5gWFNHSGBva1pEN2NTU2Q5ZXQ/am9iWHMlbXxWNF59K0E6aDwlM19sSStPZD1pZylrKmRTT35KPER1T2VKRjZMaTwyTlRxdUxaKCg2Zn0mKTtzTy9YLEJFT146MDVfME1ITUg5aDAoVF9yT3RKTUguUUhOPHt5JV5JJWc5Qm9XRjoyXkdATl5oTnR+MnFIVkpUeXcpYX19MHphX35N''@;'; put 'put ''aG1mRDVoc2d2WjFrTlcjQl1bZyt1fl97dCFIdmNeaSt0c2x0V19VR1RKa0wifFJJcT4vWGk+UkBXVyhQbWJYWF00fUJCfHJZdS9pcyJeUiNwR3NfXVs0eCpESndMS2UvVU91PlpYclVfU30oYl8kLjdwRjVwPkhIblN1VSJodyl2Pl56PWElaT99UVpkPX1DMXg9d25gTiJAcmdsYl09UDksYE9R''@;'; put 'put ''YEQ+aU5vUTksVVJHOlZOOXJ1VHFqQitSXUJaPG86JWgobUdlPWREKXdGLjhAWEFUKD5QIVNmMmcsYE9XfTx7Lm9lLiFAM0lqd2YrbShndXtvdz9ZX24wJC4xYlo/bXohfG5WfTRRVHo6elVeKEpbbT5yPEZaUyM1XzBaO3JQQVI8fV5YUGtJdEpPUTdrM3gxdmR8ZVt1PkBoOHtReTVfKyw+MT5l''@;'; put 'put ''cUoyKlYrNnV7bzEiRT5aQlIjdCYhc3o9THxRbXtPLD5JcHMjW11vfFF2Y194Yy5rQ3smfSNVPDJ7b1pYVE1IYFtVQj5qS0hSTXEkY3l3W145KFVjXlFWbnZSMkpSa0wsYk1VPy5wfkd6cHMyM2g6Q1VfTVViM2NrUCxgT0pgWnN3VlZTMkAzSW53THFFZEZaXSNpfjF8VV9VenRwV2cpP2xHbV8y''@;'; put 'put ''VjRMZ09HPzAlYCgqWkV3Yn4rYUZackV2fWFqNHJJL185XmdqWjpRVng4flZ4M3ghKTVzcyJ4MW9eb3pZMXNEXVtrJDloUnBsYjV5Y15rJC5RYiM5XmV5M3h5PFFXa2pMfF01NiZabWZXSGZKKkYyS3l7b3klTXxfOW0zXVI1KjtNYF8qWS9ZVzNVYVM6PGB4NiwmM0khVF1hW3J0YV5vRUA/fkw7''@;'; put 'put ''YjhSLjdwLz5EMEUuV3okWXpAP357dHE+Mm9oPmxgL2lpWTRybTdwVUNvQURVeCYrdCFBd2NeQk51cyw+WV9+bmxTRlBPPyxnfnIrYismclk4fW9vY1M6MiFbIXVXLnx8akJ0cnRweDROTFV2OjJPNVBIKz0oKFBmPUo+OVhKWzApVUhhVkV2elFWWEBpTltJey8zX2xCWS9mQ3NRKm41ciw+VlB0''@;'; put 'put ''QnUjIzcoeUFGVGJRfVVUclVjMzdTZCpLbSw7XUZ3bzV7cXFUZCJSUGpYKSxBWnZyMVF2NDgqRVROdGN6ImtHOVBaLlEpYSlWKTtiYnEueCVub29NNTNVLF92OktwQzVwPn09NHY/dmJ+IktZM2R0SjRZdFhfdyUyYTl1VUdEaHQweDdKclJsWiQlPFd1dj1fWlBEbHQkTSREW0tkTXl1ZGNRdl1F''@;'; put 'put ''d1c6Qz5XfkoxfTZycEYhQUMoWVh8WHRCLntHJmVKJWM3NFdkJHI4Lz1QWDUzfEw1R2FNWXpsPXl+aVVFd0FRL2NgJFhWalR2d0NZbn5MWFgxZCN5LFZPdTZrSip2elptTHwhcih2YD5yQ09ROU0xQnBMdU5dRUp0OkNIcm1dWHNCN0h9P3Y9cihBRnQ1RlZONyReWyhLV2w6eitJbnw0S1EpTVZH''@;'; put 'put ''ZHY+SyI1RiRBOmlHJm5VLFhzQjQ7Ul1KRnEvV3h5LERLWXo7SXZRKkJWdCxocz5+PyltOU5dJmt2SjwqeFR8YzJbWnRTOz52a0RbMC5pXXFqVHZxK3MpbURnQXdXNFlmYkYoSVhkU05CWTdxU0lzSEU2bksxfEZOcWxqPTBiRFdVTyhkUGZvQFBmbiY0Lk9uWHI+LlJXZDx1REJTfV9HOm4oTipf''@;'; put 'put ''ZU4lIW1hKD99Wj5Nb3pbKnNSRkI7aElnI3JTRHBMZ3p0fFVHWVJlTTovcD59VntyalpNKEtwVV01Sk1SQ255PDpHIiZCK0JAdXxmPWg+R0k6Q3QvIzpdRTlGPWhNRj9Qej5PPTBtWiZbSy9MNFJdV2AoPjtXJFsjOWJiflJXT0AoPFJbKVYzNX5xIiZtPnJhK2ZQW2V1OSRCLkFrK1FUKEIpdFB9''@;'; put 'put ''QWV4fSo+SjV0QitRPSlFUiFffGxpQERIPH1yfl13aEE9M0JtLlZRW252dXksa0VeeT97V2ZzKVo7KHJlLGdlNlVPfCkpc3ZUQlF8ZShfW2g/dVgsdUJUbWI7TzJjLCtHajhZRiomeSJ8VHhwcVpJYC46MkFmYEJtI0MvY0JLIjVGMGs1X3dIJjQuTyZzZlksNTR3T3MldXkxZkRdUUhuYytsNGQ9''@;'; put 'put ''IjNfaEQ1ckc+R0ooI0FOeWJKWipqVUEoaVhMXj42TmNJYz0jTVopYiRjT3QhcyJoR1YmQzIkMFcyaDptcy5iX1dLU1syXyQsazM4enB+Zk5pU0ZQKEc6THJ6WWtFZCgsRyZHYUt5VXV0KCk8OjJBZiQuVXUoaHhkZGd7Yy9ZOFsrN0x8KjRucmMvOnZCQTR8K2dZVD5tSnZRPSxLKlV3KHI+IlZo''@;'; put 'put ''d3Y3Qkp1b286I0dsYlgkazliWDQkeCkvcGE0XSY/OFFaP3VXaSRNXSZaQ1dLWk0+L2JNa2A9JEQhbTNBQVRuRF0pa0JwTEUqNnc0PlVhbiwvM0N+PGlAPUc0ciguYWN7IygrO01RfW9TRlB8T2pAYTNDKDMkV15YTnlGVEpgdDlUd1VGcE9kJGgoVE9RenA8aW5RU355aTsmQE5EViFwb15aS11y''@;'; put 'put ''JHQsQ0EmJntZeFBjI1ouYHklKCM/bXN+RDczfW9LUVJYPWhXRDAiKzA1RzguW3t9IWhEK1RfSV0xczhzVHhMS3A+M0ldW0pYVTQ6KFA0bjNjVCR9IyFaX1RRP1tbdlZlWlhzZy4uYyVRSV1ebCNtSUE7NHRSRk1ebVlaV1lPVV91WVRJJEhLfng1TnFxckJeNC96RiJrXyIzKGoiTn5CRUpdL05Q''@;'; put 'put ''T0wvRT9qSUh0Y15URGl+Ll9WXyt5LGt6ejc/eUhSKGZpQV46WjxfZkU7MzxBK3dtKzJefnBdTChDWnl+fENdV0F7Q3BjNT4sWVRLYTUlP096KXwkIj1oPCVnWWxJPyhRPW51bDVKR040WlBZRSwkdXQqZUt4e29nOmooNzNZRilGMzxrYiV7Nj0zeGxidnNISjVUXSx6fUEza3UrNV0xUEBCT3Qj''@;'; put 'put ''bTM8PjFoLm9Ubld0bFNTWSRfVmFgckl0Zzxyd2o/M0lBaE58UklyJX1eYW5fNSZCKjVkVzokdjcqdFVVdEYlNn5HJS8oKyV+Uz4yXmErSF5qajNoZFpMcUxMYWFbWjV8NUBRfEE2cjwjUlFMdGI7fGpKeFVbTHc/fH11PjoiLFVdTHc/dEdVKHMqTTVOTXc/eUh0fCMxITxzOSR9SXVnQy4mTlBG''@;'; put 'put ''WnhDdChzSCxWcC83cChgOFpfe2BJUUchZHN+alF6Pm9SYXJeLmx1K0ptOVVmLGh+JkF+RjYmQSNHZ2x+Sm0+JlhtVVRsQypiTT5gJlI1KDdwL0QyaGxCNSQmJHQvdjdIUEttTXd9ck55QGFuVFMsMl4ieyJdL0xtfn5bVV9sNVBIcDA4KSZHVXxWYk1SaS56K118cXpKKl9+ekRkT3xhNzFKaV18''@;'; put 'put ''QzAhW1FJVEcwW3Z8WjN6IV5nNUYyaERINiQobilrMEF2P3FIbl9WWVk9N0F2PzNJaFVGQjoyPlZjJTtHcThUXTpiVlR8eFhCfiI2N0wqZyx4Ukh7RXR+WG8rdT40QU4hXyh1UEdAWW5wfCRUWHJ1cyZjbDxoaVReaVFeeXd+YHcmbWIyeXVvcX4xP1pIRjV1fX18KzU+KFh7YWNITE9obn1yZX0r''@;'; put 'put ''UG5WVSNuKSVxVXpEY352NkQ1RXJAQ09BIS4mX1dkMDlrNT9ZMVEoZmtTbkcpLzl9cVA5VnYlWlA1N3M4fFdfSTtyNl43UkcvJnYsZi4ydWwuZDdkbTk/aWJpTlgwWUVXO00pRTVnQ0NaRilpO2o1MktQTjgqLCxtTCVNWkxnKlZvYl5pYWR2X2ooellRPHdVXyhrXWM6dUpGbzFbRmpNMD08SC5o''@;'; put 'put ''N1JMKmlOQS97bnJGLC46WWQwPCxufHZZci47LG9kWyhWeDUoZVdwMzFfQTZPST1rR10qJmdEcTR9LzFodF44aCZhMWpFQypfend9cjpEeGpzNk5iVExHdThtZnIoKVZ4NGxTQElKanZedig9MWhgdmVURDRQLEpCMz9nMUdzUnkke19lPX4wU1RuRFVARCQiNVJ4OnU2QUZeZmojNTpvYWg4eHZj''@;'; put 'put ''ZWBqUmgmQ1REJUkiSWMkPXwuKyVnJTRyTWc+K1A7Pz9JU3Nud2tRakREem5XLG5gKmw+IVBkIXl2e3tQUVs+LHYiOSVqPVIoYF50bmFTUzVOb2BHVmhBI0xUUGIoVW01dzNvV1JZUTM1JnNlSzBVP0dMIStOSGIvcmouSVlnYk5wY257S0cmdEdtIWA+XStWT0hgR1ZGP21TZ0k/fnVXdEN9Kj9N''@;'; put 'put ''bSk9QyRAU0g/fFRCNGEsJSEuRWhoWypDPUJxNHspen57P1pfR0Q/KUdANGxwYDgjcVJBQCQoV2RbeSk6N0hCK3xecyVedjFAIUpdKFspJFcqMDR8LkN5cjRCKX0peiJsS2BYKk1TNGVpRHpqN0MpR1h3Xmo0UypOIl8zUzR1bnpFQCx+PXJ4RSN5ck09VjJKQlh0U019N3hoZnlOUCI8UVhRcXZM''@;'; put 'put ''Lz9zSTgzeSk2VnUxTXNfaGxWfWQ2JVNTTUksUGdOTSpjckxZfT1AY19vbk4wZXdvNj85XWAsOHgpe21GIUkmI3ooKWB+a1FAbjEwV3xwM1QyW1pGQjhzYnhHVmJOL1kySmxQZDVEaTVCXXs0bF4mU0IoJl42KnNKKkdMKjNuVV1HP2B7RHo+JTJ3W2B6bDFnMmdkcktAaD4veD9VeEF9eDNzN2BV''@;'; put 'put ''ZjUlc29MeDNjfWM9On5VVkgmfU9SXzh+dVh8OVZuYDEvR103OG1lTEojeXpweXZEdmp2UHx7YTdQfGRePDNpJW0+Pzx7Umo1QFFUTEZ5TVpBbFNucnYwUkZbKVZGWnBVKWMic01QJE44U3EiVyk8KUppNj5vW3g3MDZCfnQpQihfTF9vVj09SlojRHZCcXw7UkYhV1t9UENVX1ElMyVDb35zQ0sw''@;'; put 'put ''fTB4MHwjPW1UMW0pc3RMTHxZUlYzbXp5TnZ3QGBsWWo1NHchKXNzN25YXzg8OSYxWSt+XyQ5XitOUiNXM2l8dWp2PjVXQ15xSihfTHNtPkM/bHIzWSV9KDR1Pk46SjVvVXdHMXJPfm9TUEJFNj1NQDkkc1V4QnNTTndsKWg6XSFuVFglL0ZpPXNyZ154UDIuV2grSHVFaE99XSlKfDQ6TUooXz45''@;'; put 'put ''Zj5iQXxsfi49ZWIsLDhsRnp+ZHRYXz1tMm9RUjNGJD8xeVZESVJ1QlR8NkhwPnJ9biRXW0h9Wm4wZiEmYnVnc1NiNFRsbiEmYmVSKHVuS3FxbiEmTk1+c3p7IzB8TmJXNF5reE8ofE1mR3F+PzJZKjV8X0dRQVpMUG82PjxOT1F1dVV1PDwhK3FQdXwzMUJyam1vKDAxVV9KPU1JJEg9fCh9Vl9Z''@;'; put 'put ''IURRPXF6QG5JbH1MNW0keC9YT2VXLytYSWZKSk8pUTtgW109JkF8fm1yLjVpY3xeSmNOKGVhXyxvVT1NL0ZIQythfDZNQDdXYWZBMz5jO20uVXl7PWw3fnMuNztzMnJxXjpIfHIkL2s+ciI+fnomI1FCTDFmQjU/fU9gfDU3VFFZe0pDaTAsQE5lfFBOTSJVYVRoRmNBPGk/T3khVXF1JX5TN2U9''@;'; put 'put ''OyxRX0wlSTRmU0x8Z1pYcj1hOX14R1M5fmlNSEk1RjtJJl0iWEkmNC5Pc1lmJGsweDd5ZzUqRzdrXywmPWtmWTp9T3o6Jm1UKVpWSF9+YW8yfUtGeC4xcU0sNWk+cnM5JHtoLCFzeHVVX1I6eGc9MzM+WkUwcj5NUW4seU00IUVHJilLL2NCcz4yV0xjQDxkN1o+TT54aHNHczQkal5POVtRQSIr''@;'; put 'put ''cz0rQ2pJVFh8I01YX0c5JS4jZCk+WXBhc3JfQ187RktjVXw6WjZ6QFNuXkNIMVN4Lmo4K0AmZS5JWDRuP1Q0d1tOO3QobTJ8LjttMm9kfTclVEpOQlhYPXNwbWJ+QyFLfCZ9NkdtPkdQPnU+Tjt8OGpxPkZpQm0pRUEiW0A0JH59cm9XXzEvMXdsciZ7RkNdcnxja14lRTpfZGF7Jm1INVUuWGV+''@;'; put 'put ''cF1dJnQhWio0Q2xgN0k2Kl1FT3YkelVfMlZsPmNgeCtwPmtgWXIwQjBfI3c/JiRbTmQxSnNzZXFVbiI0JU45Vl9+KGxzejckQi41ajFqOn0oUlVuQ29uQ3U5WnQ0KiE+SWRpUEZAPjxuSVFgcE03R1ZYREhRNDlZTHx6VTVeU3xmQkhJLEh4QmAufH0saVZfVyxrPitfdSx9Jlp7JSN5Zm87bkkv''@;'; put 'put ''X3klTnlQPXR+UlJZXzlPWlZ8R3cqezc3czB9U19hOFBxL1k3c3lUNGBxMF1Fe05ldV9wPF94YV4mR1pwOkcvUl13Omd8LnUuJnVGRml4VzVENmY3Xi5KPnV2S29IRzc2czV1LD40dWNETDRCVk5XcXo3bVk0JGF8KyhjQSQoSE5CaHxsWXY+K2I4JnJ7aGE9Jll2STwpWWUlWSoufEpIM2ZzWTR3''@;'; put 'put ''big2Ql1FXlFLayJKX3NgVFVuLkZVZCEiQl56eWNmYDI0Kip8fD1FPG1QJX19PE58SyFHJkJLUW5kd21XdD0yVGA1WDJ5R19fKWwiJjMkaW1xWj9+UGg4bTxVM3s8d2ErcX0sJi8makBKeUB8WUM3NH1PbSokfSt3WF93SH1rIyk+fXZpZUpAcnErdHxbWyZtM3Q4bmdFWnwrUml6MXwqbU0/YDlo''@;'; put 'put ''OUVZWS4kLGthLkwjR00sUUd0TjwrUmltLih3XTBYa3p0Q09PP1YzbG5ZbjEoWlIrVyNnL1FzUiwhJWd3QHI+a293KEJCTV0uUU4uKGNiRkxBRjB0JUFZcjVqP3dJPHYhbX0ifENHVk01WS5kQyFAaHk3IjZ1YjhPNWE0JFlRfmp6OiY+ailLckc5OCgwS0hbcHs+UGsmJUlJKGJDfiF6dD5daT1M''@;'; put 'put ''RCN1Q31zdk04fmN5cSshR2N8XllzZ0xqenVTcXJMS3FmOXZ6VCU5UHNvUVdda1FveCp2VE0/c1FUQyZpRSxwWlRxNWdrYVV9XSt3IzpTdEN0I1VkcTR3KFQmQnh1NHh3QUoueiM0VVE5THlCRDNiWWp5cTw3UyxNMEQ3Yi86OldSPGpYbStgUnNyVDZ5LE9pfml0XzcwQW9+P1NjW0JpbSxkL0Rf''@;'; put 'put ''Sm4yQWxPY2VSTWszLmxXWz0qZ0FlYnwjTT8meFFsM3xxPjhYWVtbWitQKSthYkxofkBTSCZKRjRnRyVoYDlPcj5vWzorLFt2flFvbz5idCRUMEVjUzl+eFo2JGNeK1Z1SXUoeXVrWzVnbWBKWn59SlN0PnhkfmRRT2AuOW1Ae1tVRmowcHRUfWslWE1RdW5jUWRNL1ovUm1zMWF7cnBGbXVnc3w9''@;'; put 'put ''TkVZTlIqcTl9an13MTFaNCpldS92OXNjRDBadDhIVDNAR3Y8WFJhOm8+PVVEVChNJWY/QFVSfU9Zb2shdVNaYHtWYCJoWnRVOlFsRy51dCU/di5XTXEvMXQwfExsIlFkcltaK1AlMmFIQjc+WUpMfC5XPE1XcXJ+XSojKlcrTEQ4dnpRczhAMkRkLFIxR1ZqKD9TcjZ1WU93RGVzISssTGA9bz5o''@;'; put 'put ''QiNkbGpsYXAwfXpfJVpGZ2k5Q2Y/SGdyJi5oU1ZHeDFOZTpaTHZgdT4mXk5RfVFFT3RPTkRHK1VZUCR3QTw6Ln1UejV0VkhiNFsvWS5wOlRefS9dK319UG90Yz81Z3hUYkMoKik2eWF0QVg7UV1KL0owQjdIQDpgMGtoSSllYjZ1SFUwQ0h7YWI0PjducDBtUEljL3sqRXpvd3F0SWhsM2MxMzFn''@;'; put 'put ''KDE3fFRLaHo2eTAlZXhadW1AR2ZtezpadSNbUzQpKVJ9PihJRFJ7IUhdSGcuJEBgek9+JEFocF9+c1Y2T2VnRHBqJUkqcT1NIzFLYCNIQl0xfVpKYTYrZkd2ImZLXS81L0plU1UuLldrNkhvRXRDX0R5WU00a1cpRGNFWSpCZU1FfVprWm4jblVOJSEqNnJjPyhTIzAuKmc0Ryx+ZStXbnx8LzE0''@;'; put 'put ''T2NFVztIXitQJSN9d2B2OGhINSxWdSwqZyg9dnNUVVVuNihbMT9aeUk/OStKKWooQzY4YXRed3lhTURNWVg5LEQ2fVQzdFo0IXY9dUFgYlRvImU0ZT9WcDM4XiNqX25+MVN1Ois/al1hQ2tQdElOP3pybThIWSppajBRSyJWJmwqPHhPZCZnQSlnKH41RCx4Y2ZKNXxGekUsRlhhYDZoaDtlNlVK''@;'; put 'put ''b15UdD1aQ21xQHdfbjlLR2FDOU46fTB9eGgxPzZEOHxRWmdudGA9MVRjUn5KYDsmb3ZHbSlrdSVCSD8yaDpXRkBeYlQ9OXM0aDo5YzFqVjMhc0hrUjBfRUx8WzxlJDkkaW4rNiliaXxtSm4jMkIhWGFKMWFXZTkoN24pdlVEIkZoNUVJLE5XYXxbaExsRV9MTEA8K3k7X0U2MTNQSm17YXImZnQj''@;'; put 'put ''PnVmckcmZlBbWHYyaHwoIitvbj9HWW1McTh5KWRVcWJmO0ouRCshY0FVKD50NVJTQzBMd35ZVW4+KzVpZkN3WTkyeUBXQ0IlbHk2YERtdVt2cyl5RXJ8N3VjZmp4MzRtQil3IlQiU3JgR1ZadioucXFHLyZUbGJRby5HSnohfCE1NHJzQjpPM0wvKjx9NVJhbjRucUk/dUJ3M2hqU30qNllkMGVS''@;'; put 'put ''Jn1YQ0Y+SEZRaSgxaXxlajRyZENaTypCOEFMY2wwdiRGUlNqI0R5fUpDXyZJdHM7TmM4PH1zPj95ZmBsS2tCOmVUJl90JD4sNkp0fnZmanl0Ziw8S2N1WEVzcW8maT1vZk07VnZ0KWt2cSxtVT9TMjp9OTByX0FIQmwwaFR2dWpIVE9pdDllPXt2LDUjcl5bZmclKFNGSiE7SGJPSFUvXW1ALGIo''@;'; put 'put ''a15ObD5SV0VwSmdiflg1WWtiP0RvSkpRenclOHM4UUJsNXFFUWYiLyxERUc+RS5pTn58OjUiJng2UjBCbEk1fDQ9KmZJcUslISVKRntSIjM+SWlUanJOJihlV01eLFZGQWErT1RsNTtjTltLRHthe2RuSmR8O0B7JkZ3R1Ikenc+flNWYWF6bDdwTCE0dzMqakdPRCJ6WzZyfSkieFsoMUlXJklC''@;'; put 'put ''JFlSdjB3fUp+aUcuN2s1MTZueCMiel1mREo3dzxCLF1QdipqW3R6cmBqKiowSWVCalhDZVd8dUl5InExVD9kUHVXTEdkWlM8P1pJMzhlZH4zKF0kazMjfD5JMytIakAmK0JpNEQsVXxMQk50W1E9fkZHVXNSR1lSZjV2QUZCN0JeJjI/fml8Nk9danlBISRpTmF4Y1ZtbkZhYXsqYCpwU24rYHli''@;'; put 'put ''b0oyYWI2dWo5OUJRR3pYZyt4MCkvPzJZUmp5bzwrUl9gM0JsVHJEM040V2xdRGImPyE0bU1pZzgiVmpsYmZZTjFFYW1DQH1ie31oQW01X09iZVlUQyxpOyZDM3wlb3BFdn1sflhDeF8pRVlTKVRgWkwmRDpDd0ltRERUMmBCVUA3YEo1KFRXel8zVGRtMUVYbGVQJHROL2ZJenklUGt5OXx2dV8m''@;'; put 'put ''Ils4Rj5NcmVwUGNbY3RCRElSYmFnfjk7I1FtSlZ0dD9iP2RHXXw+SXtoVUVIW15zXyZGViFZN2JibXpIInNDMXYkZn5EMWdRKj4kOH5jL0ouXiVNU3JGNz1jVzc6U0ZVO0I9OTluSEVYZUBrYTJlejhMS3VDR3NSaWRzUFZFYkQ7SiFQN0dVe3BbQDFuX0RPZ3Q6YnMrNX1pei5eYHJ6QWAseEEq''@;'; put 'put ''P31zbzVvdyN6LCsoTjYpIVp8YXNxWDlCWUx8Vi9OSnl1UHQ0aF9WRzIxfCYwelojMFJjbFdiSkNTe0dIP0hSO0xZXyUvaCRDMj0ibm9QfXpCMFhFR3FhcXNwdFdubUwoIjl0bituV1g7OjI+TSFCU288IjRseXNndGJVUXR2VWg2VHxbRV82N0o1W1YoP30sVipNIm05UCkuflNpYGdISWQzbWVz''@;'; put 'put ''RlFpQmc7USlxbEZCb21MYW5oS1Yqel0pVkUuRFNXKzIwKCtsZEUoSDt8PURwdG9leXlzfm8hNiQ6M2dmeU14ayZ6aGlMJCJ4YVNiQ3RBdjZxeiMpeEJVaEBHIz5FaXBJY0MoTCp+eyQ7dWg6bigjLDs1YCF6SWA8bkVMMTQocD4vL0VIQEEuJDtROCVoOjgsJFRUM0F+Q2RaX1dYLklwL09IJD5g''@;'; put 'put ''UTFONHJ2LkhIMi9TdzFoYjkvSkAkOiJjNFZFMXJkMDE+YUJ0JVd2WH46R2JsQj8jTTNOYHgwdHJeSGFLJjQ+bmp5Rn5GclY+TyMyflQoa1JvaWEseXtCdWFoJHVQOWk+WmYrQlQ2KSJrVzorYH4yWmxaMitZMj8jdEB1Im5uRz9hM1RXbXxDSXd+QT9AaEI8IjEoe3I6OzsvTml0djRsR0BdcltC''@;'; put 'put ''Znx3OHFzWncpSF0zclM5NGVTfkZ7O095Llc2eTJMRkg6TCJiISgmeXM4IUo3KHdDRlYqZj9QKEY3M29WWUBEb0Auc2JaXitDVlhmJCpCT3lNNzgiWFk6QDNNT3VRSl5LTFsxR34mViIrUlg6aXghPnB4ck03Q0lSZXgkfThSdT5WIVp4SERxdW1XNWtFPntLRmp0T0ApP1FzYFBLQGRNbVt8VVtb''@;'; put 'put ''JkFYbHolWm1LISRPeFBnZkMvUzorIWh1TkxqKGxpb1pKQiVFQ1hEcWdSd3NmS0x8dWgvam4xS2pNY0RSIWUrInJILj0uZU5WfjVKdDMpQEIqaXhdYF5EXlFnSkA3KXxXU0IzZCphMEZKL3w0eTNxUWhyPXl8bHh3KT9NSkkkWjE2e2J3eiQ2Szo6fVNnT1V3b2dgeURVL20+QnBhSCsrTUNeZWpA''@;'; put 'put ''TClAd0t0PkJVYDd3aCYmXTZ6UFglWlZ2c19YLntyKkNOcjAhVDlJY2MxJW49UyRrTzd1TklrVlVtIVNRZzVZK1JEMUUkczJvV1tlMFovfGFUbkk1ISYpTDh9NClwPmRQImJfT2Yse0xfP2J+QEtpITxLOmgmflk1UjlAYXUwYFFyTkwmWiM+Q2QyLHohfDZNLzdheWEpcHN7MU1TKl9JUGZ6KkQq''@;'; put 'put ''Z1FMcENSWnNAT2cpQV4+bGJQLl9bQzo9fTghOyY4W25dYWxwLFZPZX00Q3BMelVFRSl8SEFbJm1YVk4vQkdmOHNFaVdPPD5ydzl2ckcwLG9+dnRXblYieFptQWVWezthYWdYVVIoeEh5cTV8OEphZGg7OihQSExITSF5LHJpVCZ0azEvKjcxXU9aLk0+XVBkWSthUU9ST31JOVpbalYscXJyaklR''@;'; put 'put ''NFVOQyJZUUdWZ3gqfC9OKi45eUAsITt9a1ROT1JpXlhuLng4QiU9eFh8PipdJiw2KVohQzFwbDFkI09zImI5SS9WJi8pfj5rNlNUQSFNWyRfRStwZHdSTS5vITZfOU9CTyh9R0pWRTdLLyVtQ254Q31Ady5qczlaWG5AWkRUdUJSI1hZQltHdlREPU1hKjBzOEwzVH1RaFpnQSpIZm5GXmh1Z0NX''@;'; put 'put ''RV5GdH5bV1lfUC90MVAvRXRLY3wySlNWRXRSREt1XyVhbCZwfVBLMHhZPCI+OTJeOl8pTj5zZXt4IkFrdFtMKytyOVMreVMweUZKe0U7SFNnTHRZeD1JdVBRZG1BdWVJX3lhT3dlSGAoI1B+KGEySiUuLG9fRERLTUVnLCpoQEZSP0p1em5nW044KG0uKm47SChzfj9KS1VZcHd7SVVuSTI9QiJo''@;'; put 'put ''JlQ7OWZsOV5xRXZOSk8uOzFPej89LnhhcVM0TFp4Pi9PVDdxcEIhV0F6M09tLF8oJHIxeFBqdlQqKF5KY2dnI11hKH0iXWdGIXxzITtaSStMaCR0LnNCYTIoTUZrQEdjQXNEaGlOOi9hIWx4aSwifHdLTmlrNkNEOXMzX1tTOiJlY24lUyk3TUd7aFVSZ3NZVkIhfipkVG5rQU9XWiN6SyJ+JFck''@;'; put 'put ''TmgkbGdfTH1+Pm9sPjAzUWZqNiJ8OTZqcz51IkZoVEw+SUMsJFVEfGVqN2EySElkRmRYOWtmRzc8bltzenkvfUVkUzYxWHRBYll8UUtKIWtwbCpBTl12aHVkLFA+Qnh5NDFfNUd+L0tiZEh5c1dafVtJT2NKX2tFaTUkS2JESGpYO1Q6UWFILEJXSXdsflt5TEN1JiJUSHJgN3dYfEFLbGlqTkk/''@;'; put 'put ''Mj5EfWQ9JEtTeU5PJXxiLkkoPnR+UWlOfn4+Kj9WVnQ1MUFveT0kb2Q3Jm1QTnIrdV1hejBBSVJsWWJ8X1hQdk13czldIzlKJmEoTCZydG9yPiVvIktoQl0xRi86RTl6aWBgKX5jdSN9REdrQnxBWHlyfnVmV0FiSGUsNyxOe2hlfDF4SShqQytSKXpreC5RYndvTEdPalJXZTV4VXx6NTdmQloq''@;'; put 'put ''aDZ9LEFYT0Q6LGE+WSQ1bEJJbFlfZSVsYSxkcz5PVFU2VlopOEVMZkF5TUVaWER1OXJER3B5eVJKIklsckRFJV47MCVGV0FwRUMuKlZJXSxuajQrNVc2LiwjYjtGKHxaNFA/MWRBQ1gvO1h0eF58RHpDQ0U6XzBBNUBJVEluY21Yajo1WE07LkQzdFk0SFAlTExPNyxNKC4/QUY0QTwvMj4qZmMl''@;'; put 'put ''NUlOKTVGLkxUTnhLcTFwMEZ0YzR1MjNfaEVlayxob0kuYDlDW3J8KTJMJl9vZkVSVDpGd0VjdnY4bUROaDcxVXE2aSxDfXYxbSFtYWx+PUdeJjBqNVhIKWxLZXopKX42V3VsPzw4Pn5eVE58bVYhPzlEayw/UUg/bGkuQExSOz9kfmJVWF9ENX5sSkRpZSEkYT1ffiVaUH40bDhgOFB0YX5ZOXR4''@;'; put 'put ''KzlFJCE2ZTJ1IzNdKVdFOEhkUGsuOj5PJDdycCo0cmxHa15XRixfckUqci9DXlF9fk9bSl8rcn0qRiZTO2o6P0BLKjRiIzheSEpSJlRaUUBASHRVdUlSNFQlSWpOMmlMd2ZnRUFPdDh+TCs4eyYsQFJIW3RTTDFIYWokWzZGUlNqMEUwfTdlOyY4NWFROHpFaVBMZlMsVit0ZkQuW2t8ZDZ4PilN''@;'; put 'put ''XTE0TzJHVzs9dG9GdTVlSkcvZShbNUxxdFMmYTlCJHZraH1AWkdtdVAsUFBsfGpDQCZUJG56JVpKSUY3JkI4WmhDLEltbnpdPjF8TUt6cFJRYE5pKSJUQEBtJj98M2IhKzA3Pk5pJHsuQ2p8cU5+JjZiJERoY0Z2ZG1jc0ZxVTl8cmdCNkc7dEU8PX4icFJnaU44emdmQltqejhpWl5xTnN6PCZ6''@;'; put 'put ''NixoazZpIi85R053RS9ydmtFVGRkeEljK0dBcTVTP1JRN3Qyd20uLEVYWCthOF9GeUAmTmV1MWZEbG54RlVEZD17SmhORHJdKSNBPT5ReGJYMWpzXVEoOW46SjE6Xls9TTUpMU8qXzkkTikrYSs/USg2bjNUWHF7YWBNP3Z9bHtAfndwVilrPWcrZV5eVyU+aGhzIVlqczZ1PE0+L25UIy5xZklP''@;'; put 'put ''Rmx9K3Isem4+e3smYjpPXWx7PzI/aHkkL1pyeG1aUStPIkRzW1p8ckJHNUx+TCR8TlNFYEhpRSk7P250Oi5NKklJKVczVWw+akt4ISR+VSVrfFgxSV1JT3N9dExmR11XWWBQYU1ZTjBBImM6bj5FTUpZQSJ5ajdyPmJ1QDgzQXRnVjYkJVo/NUQySGtecSUvfW1MRE5WNiVRM2NmeDRnREpMdlcq''@;'; put 'put ''NS8xJW1rM0QjYkwjaj0mQl1ZTzh6W21DTyhBVGtSQDIhP30oTSkkOz51WEx0e0JrRS99czUobnlSTFNaMnRvK1pkUlh7eSFaUUx8KXV1Vz9XWmoiI2B0dWYySCNMfHpIJV52VHBKfW1nWzp2OjRLfDROdFE9dE08PmVlZH1IQWAmKXRoTCxPT3Uwc3FSVl9XNm4yVHArfXlqQihQQzUudC9BM2hf''@;'; put 'put ''I1pUa1taSmkkV34qflNRYE9OZGlEYSo7JXMvRGl5TDloWV5ZITIobDBiNjhnLltGWyk+Q2lGJVoybXoucTAlLyRQNiQpZ0U2dyVCOXVqOnsmUm9pUWpnKT59QTVnZ1gocCtSLG8rLzV9c2pBT2VoTlR6KmciUkdoI2ZROm4pKFpXbk1KJnRhKSp5XzszUk1CcD5qOmBENW80ITJ5aEMvMDtfdmEh''@;'; put 'put ''NGQwXlUrT2M/NH1YLHJNQXtMVyFNYFcjQFtYS2BvcEgqPUp9N2t+W1FxPktpaVovREdpVTRDTXpyYTQyeEwiL084NX0uVkdNTShjVVFUfi4/OiYuW19RcERaUl1zd25kWltMWz1xcV5JRjE6K09pPjVXVVdfVXR3SnMhQUFaIzp0RXB6LnwyN2s4U1JVQjJ4X2loVHFSWmIwIXN1TXMuMVtLM2h0''@;'; put 'put ''KjRkU1R9MUReWlpiNls6UUdUY1NAQXhBYHlyQnpyUGhlR0NHX0M1eWNJdC5IbFMuQnMmYjZibGlHM1FkQyl1ciNYfFgvOlEoLmRVX1h6QkE0Tyx8MTJSc0YrJVlTc2V+WVVqeWREa2EyYC94cl00MUdIbWZuUkU/KXRUakdgKSRydV1UQE1nOVpGSCh9Kn1KUjpZfChNcmdRc2d0KGM1QVFGfXNA''@;'; put 'put ''Skg/PitZakp3IWM6O10wRD8+aHFMTXxtSCozfnFEfmNHWmNETmYiZX51ZTElcHdnbUBMfG4uViMqQEl6QX4+V3p0X3JXd1glc1ZCcHNUP01xZjwkYm1IKkBmQWF7THEjX00wVnpENDtje0BvSk95bVM4RSV8O0BgJmtYWlJ4RGd0Jn4jQlRuQUFQKTg+NGxZP35lcyV4ZH5MNT9dQCR6JGNnRWZP''@;'; put 'put ''eGlseGZ2aEpFQS48LGhgQjNFLmFLWWlgbTYyQXZEUVF5YXRaWVNIUlpIdnZseC5Mc3V0QkFBQUFBQUJ0LExNZm5MQm5BKmM/cnhncVR8ZkMmQiJgUks2c2NyRCJNPiJaekBQZHFxVEVgLlJSSVJbLk0sUzRtLiN0N3ZecGR6JGRAbDV4VSsxdD9eZU9TcVd4KDNeUURxdVowI0opSWheYixgPEE+''@;'; put 'put ''JF4pT3ZVeCNJI3NNNDM2Mn5FLmo/ODNmJmsxQXhaSTdJfnFmXWwoancofSVlRXxDPS8wOjFYfTgjW0lZcFttQDMqZSIsd3w8KzF7IjBZRyNfYFssSnJSe1cjSmo9dCRLTyI8cyohc1MlRWNdJXtAbnIyfD9tSFgmOHV+UXJvbW94ZWowWU5lck4/cl86VTBHP3xadVlHTXF7bio6eStbKWNuNWhO''@;'; put 'put ''PEBXLjBPMytXZ044a1U+XWEqdUEoa1VlSVgyS2h7KWt2Tz5oI3RzWUxUOV5rbW1PcHFdbCZHcDx5ZF0yKklJUzxLOXk1JDV4dXxdNit+Ni9tUStLOD1OOzR4bkA7cCVKbih3TDJsLC4rbi8zUl9+PVkmd1t1L1BBYEN8LkleeVB6eyZ2N3xLIVUhJjpVR1o5fSgoV3ZhVmVwMiRlRExVeyxRfXNz''@;'; put 'put ''cWpPKCxnd19QZng7Jk8rSUJOO1B8PToyM29mJS5HPGI/RjM+c1dkZ0pldDpDamchdF1tOnJ+LkVUbFJicDEuQX4uKHQmIy5dKk15T0BkNUVjXSxifFpSVHNOKnoyZFBXQmtpfkk2VXMocW5BQEtSNnV0WUlwa3FYVG1VI0RLel1xQmxKP1hFV1hjL2BRRU1YbkpdWCp0VGVdZXIudUArJj5wfCtH''@;'; put 'put ''MlZJflhAfHtIbXdCeUkkMTwkMixffG1AaUVNcDZIPlZpdlksMzAxRzgvTG9yRjg7Wmk+c1pUOTJkKjZCbzVeVEghRmIiRndGViVMQGs4Sm9FMU0xZUojTVJ1e0QwO142ZDVIOW53L31PT2g1QTxuXzZpZF1VWGkzKVklaFNqQFB+ITRVIUZEYCM7XV8sRlhVOz18QDQzfng7dnEqOz5lITt8eClO''@;'; put 'put ''bip1OnJsPUJxeE9qckcvbnJAKWtWJks/MG84Yyosbn59PWA1cVVoXnlQQUZyLEVVeGM9PVZ7eHNqYk1tRjA3WVd6ZiZ4bXIuJEo3UCleP1YvYlN7JmtSWEs0bzpkNl5LV34vXTN2PSE6ZSVMTGtla1BBRjlbJHg+ZFNNR1khNiJuV0gxZT9qRDxvc2pwOj4xWzthbXtXXyFhMl49djBSUX53akEp''@;'; put 'put ''c2YvbiMvaENBT1BZVzg/bW9NQFBSZ0ZZX1VpYj9kZlVkOXMjTD8wIUkvVD5aK0xqPytCUVJhU0tjOWZRfSZCMTRoSGI8Kmt9MygzeTtlNz1TI0J5bEJsa14uQmFLVUZmbUBUWiV0aVt6fjN8bi4zZTJJKzlbIz98KVVKUjh+eUZ4RHtKZW42NC9lPikmQkBbYnlSXmRbTFRlVyNSWnkkRyZQLC9Y''@;'; put 'put ''aFdTOXdWNFE9SX5dI0B9SStFdVhacFRAfm5EOlpxR2UufGlsX2pJZHlvNyM2P3d1UWRCRSUhKGR7c3puPU9RfHFAUndIVFB+dzVuZilOOWEjWltRfDptQ20kdUwuaiRxelE5NXNKQFczIUB2fUJBWWkoNjJ8S2VWblFyIntwdUNgeX1rSz1eY35fXTRjNV1+N09MPDI5YlBgK29SQGciK1hRbVs9''@;'; put 'put ''bX09SzhmZCg3ejA6dH1VXnZrTD0xc3BwQCxoVEBwWlVILCVnfFtVLGRFRSpMUWF7PUd3I0ssWWBxYE95ezJYbD0/KyNgYVpzUnltOlJMYlE0YCo6XmJQZGZNUGQickg/c35aJiY9cGluX2I2cWREWGFMUVtuOy5hbnxgUGM4eFQwaHZCRE5EJStiYTlUVUs7QTF0W2A4fmJVJWRTbDRdZD9zS3dz''@;'; put 'put ''VlkkLllMJm9JdE9ZKX4weHQ3N3wmVn59aE8kOk5+dWckUm9+WzU2MiVyWyh1Vjd+PzRISzk0fXJLNDhmWTs5dmdIZyZvTiExeUNgYXxUNjYqe2ZzbDNiWmh9XVhGQylbIzxeV0Y3TmUrcTJUcnBST0B9RCJnel1jcj90NGlmNmRWVD0wJjslZS5RPk98KH4oPnBXTFhXRGNrbVtOdT1eNkY6KWVT''@;'; put 'put ''QDNZL25rREwvcnhHeXhDdmhWJDlFMj8mUiZzK3guSGBAPTFWKUJDazgyR2ZeYmJ6fCNaUTx7ejlpbDRAQnVEWndqMERDOUJ9elUkM30kdWozKVUmfDJPJHlbPiRBTiVLOCYlcCRHMEoxRXgxWll5fH59RyNuSnJbU0piNXNEKUc8TmQ7KU04QHpsVldMSld8JVomaXF4QnUme1s0ZlExc1tJTV4i''@;'; put 'put ''MG4yUks3fi5pckIvTz5Zdz8sXjRYOkdXQTVgakImSCg3dj16JD99bSNdPloyWnAyVS5ydD0/VURNU1BUV2AjakYlVkIzUVs0Vj1KWlF5Sj9NTEN0cn5UNm9jQ1dfPD9GKEdbfU5TT3t6RFReTHZEPE9aQzh2SiVtW0AzZ0QsdjQwRk8ranxWbV1KLj47SXR8T3Y9dHlRVFBuXVQpSmt6QkdnLiRh''@;'; put 'put ''JihRW35uX1gyKmhtOTIsPypRTlQlWU48eylqTz5lY2NtMmt9OztqYnd+TmBBX0Ihel1Gcl9yYVVzS2VzOEMuUWF0W0ducmV3WGtbXVApdDtuU0FWZn0mVHFoQCZMYWY7N1I/PEJASTxzdGxAeV9pViZGUGcqPUdsYGdwLyNZa1dweG5VcCxyYkp8PmxrPHJsfksjIVk7cE4qZE1OYnB7KEIscH13''@;'; put 'put ''Tjd3N3tKRXVeTG57NGc6eSozWm1fb2pReyN+bkBoVWxWYnwxUT5ebzlbeF0lPUlfRzE9fCtKXTI4WCtkZFNoaHtdNyNncEg5ZzE/YVZFO0UyaXJ2a2ozSyhffnBbajFoVDVAWGZgPTNtaSUjNks0fHp9JVBPT1R7RXQkTXVhaUguc3BHd306V0o+PGBqYX03ZX0kOypjXl5pZmdWbGxUQlEiVFMq''@;'; put 'put ''Sl0+VThrJkQ5fDVrd3N9Zng2ekBRbHhxayIhYTRgfkApREtlL1RdVX1yelcoPXVwMCVhLllGMSw6ZkMmTz9bWDF9PihqdkNlPzEpKilvRURKLGxQbj12PGwsc2ZzNWJ+c0k6fHRnaVRWe1o5PF53aCFhaD03UWk1VFdsT1Y5KTRgU0d+WiV3cnJ9QntqaE1VKWRJeSU8IT1jPnFUT35sTigmPjRT''@;'; put 'put ''ITtUPCR4RSpuL2FCIjZmYTxvcH1FZWYpViZAaVIsVUN0PV0oOzYwP0tqLjVgSyRyPF9HckorUFZAYiZCUDs6IyZZU1cufn1fc3BNU3oyZnBrUUNTX3RgYkVdVVNkKWxuaEpNRExgPTh7fHJpI0BSPXM/Qml7MnBvTHBYYFh7UEFGN2Q4PXl2TjFPVWE/eTBCWmkyInMjZElEMHtoI3JxRzRMMTNg''@;'; put 'put ''e3hdJFA6VT8oI1d+KCNkZlojW11BeV8uTU0lcyVBXn5MeF8yenNsVE56YjIrY2xALFl+ZnRNImRHIysvTFJzKDRFQVZDNCx2WGFmdUV9JXUyZ2EzS30qViVuMUJ4cS5yQ091LGxpIStUbEt2eHw5fkdmdHF9PCU+WiZDSVB9L1RucXQwe05BPzRtO1Q/NTI9YnBXKHBrYCRWeVIhd1BMWll+P1RX''@;'; put 'put ''NEdvMmNPOWQlTyhMXjhMVmppWko2XU5eJF1CITRQKVJ8PFlEckRxaDYmcHEqLEkyfipSKFsoUD1TO0s4e1l6bGc1fltvU29xdHhjSWlpMkQyPTl8Slc+bVosT3g+KW9DL0dyOVRNMEVFPVdZP1RbQGxUQD0+JWJucW8leWV5UitxTTp5LlJCMDAyKUVdNj96UndOfSUoOk4hPXpDOjB5STVEQHhI''@;'; put 'put ''JGVJb3RLQ09NNVV5Z2YiI0dxMStiK1t+U3FiXyRkRW0sfG8yfHB7I3ZBITdhKTM6bjtfKjJRWmd4WV9VV2J6eHxHYiE4I15uM3cwRkl8TUpjRmNhX2Z9JTNOKE8hPF5NSV8jWmZ9TWpLaH5EImc8NnAmP2hxcltuUExGeTp9Y11yaChkL0B4cnRnX3pTUHo8bDhxfVVoUktEIT95eCRbPWRqeEZJ''@;'; put 'put ''M20jKl5TO256ZiEhMzJHOzBFL1FGMFJvbihTcj9EVGlzSHkvdzR2XUxLY3gyXXB7PildWERMOlslTCw2UDFzS0tkR1BgcDImRSFzdjBRIXlkOllfJHx7OkdRNDNtOC9SVlBaUD03aD46cmdXd296Q0MjS3g4X1RIJTRxNiM9cXlvQmErcjM4Om4zPFcpT2pKc15WZDZZak90VWwzSStVKDIqVSV+''@;'; put 'put ''KlgqcDUpeDFsVmY3ITxTODBlTSs+YElEJFRFaUUxVz1tdkxKY310ayh6ZWYhLl1tPiM+UFg/Y0RveWs4SFpSKkEwPFtTSW9pVShAQT1QTktfIj5EYVg9OVVaT2ddZkhbRGN4NlZaWS5rWjkzQlh7S35gWXJZbCFtP0kyV2VQUXR9NnkqZlpZRjFwJXAqKC54eXIhUVFIWEM4QXB2QUR1S00vZTg3''@;'; put 'put ''Ym59UnsmQnFtKkJJRV5UY3R4UnAvYjc+aH5xMkRiO1UlSXx2fkBscDgsQyN8Oz9QKUF0OH45fm1MQkZsKEFMOl1BInpKL1MpMFshVH4wIkJ7c3FQUjsxTTx8SWc0ezQlLmJweWNSTDd0U3tucGtpNlIrUm5MXztnT3xxfVJxSktqTUx1SzF+YVN0W2FMRkIuUlc+NVpJQm44KHwzdHtuPWZkRT0u''@;'; put 'put ''UWVMfHokaylORUlyJjRpbklnUkgjdWRCd0RiXi9uW11XfVYsPjFxcWZSbDRNO3lvfHJLRkxmbVRgYlhsMUFHLyNoekttbzM2XlgyWmA+W1Foa3pSQ3ErZGtdK3svZEJXb1lfTVlaT1Q8KEEleCZ1T147JHR1PVElKXNyeV59TS8xRHpLQDtEcnl0LD49anwvPWdIVjk1ditDKnc6PCk3JmRMYEpD''@;'; put 'put ''dG9IUllycTFbbkM3UWh7U00yb25fR2BZV2BFQThPflpzZV9FeUdoYnFoN0VCV0UufS5WY34jXmgzfGtMOnA0WTlLMDtoJCRpJT45e1R1XzFndSZOQkUsPSQ3QUFxSEI8ZGJLOVRROUtPVVQ4flZxbDNqKHlHd1drX1BXemJoKkwmJVZnRDxUKz4lVzJ1Z1lPXTdPcmdyT0F9IWx7cmI/bXdwTUZS''@;'; put 'put ''XUw5RFsoQURCdFQhPUBvYXgxeTtzSyZ5U1U6PTp6Y0MlI1NiUjYvZi9XW1ZbOSFMSytUWGJ5cFk/eXAqXWlrLnA1Q1llIjttMSQ4ek07JGtvLl5DRjxzU0Yzc2xSYSlSTyt9eUlJTj5peTBXTFR2RiorUihHNXUkWW9RQDw7KUs4dERvTXg6fChjKGFJeF0kUWM1TV0jUl4zZUJOQllrZFMyPyMh''@;'; put 'put ''V2Q3JkIjXn1rP0hDJFlza0o4RWt0PVchU0g0UUBMd2FxOUlTKUptZ2xnOHFqeGtHVjtVU2BQKnUzeTNOaFJdb3BaLFdCdz9aNE5NQGl2dXckVjBscCM4dXFUSyhUUz9yYVtTcl48RElPJnIye3FlUSpJIj40WTlVcmgoX11tfjs5Nnx9KHVAXkUiejFlXmJ3OjZWYyRCJExtaDxdWXJ2a10lOk50''@;'; put 'put ''Z2d2Kl13O0gsTV5kaFJGezBEVmZXS28hW1Y3KlN3TS5fJk5xRjBLUSMpMnFCczFLXl1aLml2dHs2JCx7SUdDQElyXXVCe15gKGpOZH1bais+JEpHZFJoMSRpcFArPmEsOjhRTjsvdHFwTW84QFF6eit7Vzgjey4rXTkyen4mKztEO2RxOD9RW10kczlfYkooNWM7PDdwTSxuOENoYTV9QGlZO01O''@;'; put 'put ''ej4hKFVfa2hbKigyMWE3XXAkSnFUcVhTW206e1ZNT0kje2JjeWJ7b1YqblQuNzRDMyRGa0VjJVpDb1tqKGRRcXM3Z1UpUVtMSlozakB4ZlAjaEVyJD84eW0jelEkZUJqbUhFdTwuNndtJUhlLkhJWFRjUnBtYU1HX2kmKjNzIVdYXVlCWzo1YiZ1fipKSGEzUiUoUiZyTi5uTVorNH0kWzI9K0Nw''@;'; put 'put ''T14veislW3p7YSEwfUc5JGAxVmB5eThNWUYhOTx3OjZlTXl9SnphZF5NN3FxK3V4ZCJVJDRuSlldX1pWdzF+RkxHW0xbY05CeTpuUyo+e246ISEpQUt4K3wxNHF8KyMoWD40OEgoNHViU3JfOS4vbjA1NWRwdm5dM2c2diZabUNFbElNUXhxaiVOLkJIRnNlMDssdEg/IW8hO2c7WU0vKStWXn1v''@;'; put 'put ''SGw+JWB4Qm98LDQrXyEwPlglYnRYSCxsL0R+VXZIeXE+QCkoS2dsLGxTNWhddXk4NHwze01ELkZqb2p2Z1slJFk0OC9VQTJufj0wXzIsRH1fdjo+Z3NgRDhSZT9bMzMjSk9TZk1ke0dzTFQ4aExNTis2YSM2cFpnN0lrUl8pUmxwc18jVH0+cjpnc2w0aV8sSkhhSVRlQjcjazhjc19FTip5NnR6''@;'; put 'put ''aElLTTN0LD1LV0lIMUo2b2NCNmUrUWpFdjVBPFQ+VDFtcm4xcF94ck9qRVYvZSM4TyN0UStAbiI1XV0vJT5yJm5HRVNVaGdVVFV9T2cjI1s3dmN4NiEjbXkoZ3IyMWlIdy50VXtZbkhldmkwMyI3UnBhQnA5MSY6PypSU29yejlILFQsZDUrWSFgajtfUDtSM11QalpgW3pgdDUvWD54R2BkZVde''@;'; put 'put ''OTBAIkJ9W3wzLjs5SWhTbUl2Ki98U1U1SDZDYkA1bisyKjR+Sz0hQm05ayU5WitIanlxNER3OyhmY1RWY21vOFdWaihzNCovYFk/aG9LPk1GRSt8JXRWOClGK3lFck9gJEYifWJZdCJuKChBM1NycT13Kz95TT1RS2VJL3BQbTpvLCRbRTVuRz1yNGp9PlNMTWVUPX1scVp4T2AwfFhOJHhZbUBk''@;'; put 'put ''b1FWV2MvL28rVWhILGhuKCNXNSMjPGtHPV4yfnNVaGU7XzF3S1s/NCFJMGlRZmZsNyVjNVA2YCNgSkMmQXkmVF5wVUxrdFNZLERYVTFuP3ZqS3RQdyshPmlbRXtMSGIqdCgoYWk9ME1haDNRMCZ7PmtRWGkuPm87I201JSUkcTUuMEF5b352Ni81fXJwUk80PjMxc0EkPV1BdWNha1QzbTEyKEVS''@;'; put 'put ''Nm9ULmVQcl47akRNTi9FaFluXkgrOUNmREFJc1ojfDUlPl8rMVFTK3NNUllMPTN3Wj0yb2ZMZ0VRKzRbS2crTHZaLkRed3E6WEQod2Y0MnRRZzgwNVhpWEI3T2ksKlp9cDN+WStkOiVjZy46dToqQFUiPUZjMEFJamJJOkx0cntSQiQ9Jm00Xm9hVVFjZ0s+a34/WCh6Y289enJiRmBIMVk4Mnwl''@;'; put 'put ''a0ZxJE1jcTtdZ3xNJT94NHE1T1QvM3Mue011PV9HdGhAYCUpSjJSI0w+Y2pud3dHeSRHLFQmYjNsQ1phKWpTUz5JI1ElckZKbkRwWCVmMnNBIlkyNSwuX1VHb3ZEfWMwYV87OE5YXXlScz42WXxITXxqfldscCxqbHM3OnlSOzB+SGIxXSNbaz5Udj5oWnxbPjpHdVA9Yj5bN3h3Lik1JXYhbTl8''@;'; put 'put ''KighVEUwRmNdN15LP09sM1RlRFIkSWpzIWg4bHJlUD5RUFZjTT0yLy8jKz4wZXJtQFl5WjtOb2YpS2BsJWhvWXY4aXBoeE8kKDd0fiVdKmpuM150Z0xLWCF8TGNSV1VMPHs1WlFBODteM1tYeVNmZSQjamErcEssQy5XclM+Yzk3ejJ6LzFrOjNmYUp9KS9gJiU+RGcoX1dZWGJVV1Iqe0k3LyUm''@;'; put 'put ''WU5PcCJFcn4qaGMzKFc7enBnPnYxYm1mQEBNN3czVSN7fTUuLnF1cH5pWm9xLDBEP2VzU0FfeFlyLnslYFRnKWJzOCZVP2kqIVtJTD57RXJ8YHQmLzBNV198W3t7N2ZnRUhAd3VVP151ZkJraVJrPk9sfFIrPXNZKFE/WHxEMSpnYltYd1JyISw5dCJPK09tL1NfRUNwaSNTKF4+V3tFO1dbN18o''@;'; put 'put ''PnxqaC9yIWN2bmBEXUB2JXJbXkoxYyw0NFJdMT1NYXB9TUNdKCFtP3BKXy5pfiV6KCksMyY+Vm1kLihdMiprdkxvUGlGMTArYWM2MDt2aGdjPiw6SEY4QiJvdytPX3YlXWZ8NnYzdCZkZGM7ZHZoNGQkX2toNktTOmoqcFMzSERWbVd1Y0hvPyoiPilbU3RWZyg0V0ROc2VacWpYNWprOWVKIXAl''@;'; put 'put ''Q3l5LzIvT1lRVjFHSGl3aF1Hay96dlNxOm0oW3kuKDRmVXJTIzYyS3klSFtpNjNzM2VyckkzYHByUUdwOXcoWl48WlJHcE89Vzp5UiwrSUVnMzsxbio5USxYZXNKeUsmZ01+JUNNOTg6NnwmdHN8NDhtKmRWZ144TiZbWXpRKlpfd1lOZD1UW1ssUkpGO0l8SGR3d19gPjZHIV4wRGthJUk9SkQi''@;'; put 'put ''dmo/RntvVGRuKFQ7LnBGbHUuQ0V8YzB8XmApdVtgSCR9KGJWQzdsVGR6RFI9aT0uWWc+dmdML0FTLzFFNUpLbXZLYmpwMCRJOWZWa15zZWVLZDNHUjBGMHtGXiJHS0cma1pBbXpkd3FvVGpdRmp5LDBecEIoVUk9Pj9rQ1taMGEyKGB9WzY0amdBM3JwMGNDNH58eVNzISQuZyF2NWAhJjNpUUBU''@;'; put 'put ''W3h0Wn5wJFpVSFRPd0xsUmNkVU45OklAP0pfdXpINXFQaTNQQVZLLENfJHsxLCoyc1VMZGNqM3huKFF5JFNdZ0x4aUtnSzxmZjo2XzlMRWVXcTlfO1UsW3tfbC5aZjk8WmxHWlF+WHxROnp1JWQvbjwoJkt7M2FZeUpIb2IrSU45PzRGfXFNQ0c/TXk/YElBa0QkS2x7VCRQIVUsQWk9cHF0Jl4y''@;'; put 'put ''SGhFNVdaVV40KURuZmwvdGA+OCM1XSZTJmtQdTxjXXI5PlhFSUFIdEd3VDJadX51KTVIeUJuVDJeQ0h2WXZvfDYrOixtIyw7PVM+IyhbKWBtUkY4WUZ+TjUlL1s8O19FJVR1Q3wlMWJVZWgyZHN6ekN1KUI2bWFZTkJ2YDV3JSQod0hzMTBNYCQpKTE8ajFdNDw/Z3FUPU1Ydj5YQ2h5WEAoO155''@;'; put 'put ''PG5Ldz9OayFbRXxMV0IhekMmfi9LTjhSS1JgfS9pck9aT2xRPHk8TWxLPC5QWH1MNEc5QCIoLnJVMWJFUUJ6M1lhTiskK1lNUzwkayQ/SERLZVF+KlZwSUtYKkYwO0R1T3V2R1FRMyxSZF1UMjNZYzxDXzsoPTJ7YkVpPnchdDAmT0Vmel1OQn4vMC97KCg6Mzk6SUdoJXlVOi5KKSVnND0pOl1r''@;'; put 'put ''LjZpQ3wyc3VkXXtVOEFtL2Z9NU5nOzdGfSRxd2hMeDA0ZHJzKzNya3s7YHJIVU14dHliemBxL3t0Z2d9dkB3Om8pLDxpJnFwSTIzRjwhaW85PzxPRTNNTXRDNWBiTV9DMS9TckwvTTlacS9nc1JqJjRFKlB0LH5iPSVxPGFddjU3NH12IyJZY3FyKHFHUCQsc3FMYj4iZk91O2NJI0hYcjh3Z3tx''@;'; put 'put ''V3V2Rm5IMH5xXlkjJURkW2ZoLHd+KXZvZlk2R0shOm1UeEIyU3khd2Mvb05RREYpLzd2eyxuWC5+M28lX1h8U3ZzVGRlTngmUn5oVzxHW0VyXV5rbFc1dm9KRU8hUXJNdWooYDJ9bXppTTxuTFQ8fWY4RyhIc015LiR4e0V6S3VbYC5VQ2x8elNre3xzJCpJR3hGOW1kW0c2TV1rJVttKnhnMD0m''@;'; put 'put ''djc+TTg1dU5xR299aVJ+djNhUEIpXVpVTHkxclNqdXtiXU5+X1FYNmd+alcjJT4ibH1FSHJ3cjVxdnI1MDpibl06MEgoIjZgbCt3RyxsOnt6cFB9PDM5PDJSR2J7aFYvbiF7PTQ5JSQuZD0kVWBUaEl7fCs3VUhhLiVBNV5kZCVibns5Tzc4VmZ1TnpURmNSTiE0VkBSNDR4RzJkXVUwP0ljPGco''@;'; put 'put ''Nil0LnxuTkteNkMsTm5mMlhlLz88UlYyfXJDOk0pUk0+RXdFYUJfV2BlY2tuTTxvQk1SJlB2ZGxgZCkzWEw4Zm15NiFyIlVZKTU4fEJfKVFwYCYkIWVmLHtGW0NvMHB1JFpvdko2SSsqVn1zbCwqeG1DOTNCdSs5XjdmIzEkK15eKWI3aldOfCZJU1pOVGB8S0xnS2M5eSxjU2JGV1QkOis3ZFp4''@;'; put 'put ''aiM1ZTNmMipDKHNjKFF0LE4xTSNrLyRQMGNxJCNzZDI2fmo/R2YoTENEUnA9VGAjV0A+RV1yKkRMRDs3W0dXa01XbEtMbzlTaVFbaWVOci57VytqPDRvRSVgMi4hUj0zaGVHSSJMT05nfjoiKGFyaXBVbzVlIjVDY1FHV2NqLFYqNGk9RyZSdnpHNUAqPmRgKlkzSlFEPVVkK0VEdTxEKntOPHJI''@;'; put 'put ''XyRBZDNZfVdnTTJePkJjREFtS2xjbywsSVsxKE1IZXc6SWZKOlhNJWt6N3tXZFZFOnNAV3BiflEhL1kmKnR7a0EzSTxALFExY2B9RCZDPWZgQ1ZnRmt1YEpmLyhUKVtaU0YpNSsieyJ6flB4bHFEK2NHTHBrTi86ZXM3fFlYam5Ka0w0e0krais/aEk9JnNvRkchWV1UIzc5Y1sjLHVmUUxlbnMk''@;'; put 'put ''NnB1SV9AUmJHcTgkNFlURG94eHwhYjJTQFM0WyJ9MzB7ODpjTVpyfTR4dGN0SEdgMlE3Z0J8Y3NId2BFSz9rMjFdRWZtan1rYlc3eSwlbGs0djUiLm1UVFg1S1c/M3xEUCE4TSlbRSpde3U+c30obDkjeD09c05QZmVtT0lmLDthZDx3Q3BpIjdOTUkrcyh7Li8jeU9CfEFmbmlWbFNaa3k2PEdO''@;'; put 'put ''YF50RE5ILFIhSGJdaHJ3TkdYTGghZERnNjZVQSguTC8oSzgkQXVMUX5yWDVgIXs3alQqI3YpcDh0MTw8Ul8uWGJzZGkvVGVocWVxW04mZ04lYnV6VUZ9OTp6KkI9MlFNW2E7RWQ5Qll7aXtldkk4IW5aU1B9eV9oUnYhKXZRZ1srW2EkdE5EK0ohOnU/aElXaz1VKWxCa3E+L0Vmc3dhK0ZAQHpk''@;'; put 'put ''dUwvRSRtOUM7STozSntIRyQzd3RlPHByQGs4U21tfEtvODlrYyJtMWZeNl1RcyUmR2drI3tkLjUlUjpoYHsoYDk1MlEkRFE/L2JmNzFQPWBHJS9fQl5MRmFmN1sse1B8KklHLkYlPG1wcyImInkzX3IhXTZNQmghcEFfXUN9UF9YKSxFelp+bVE/I2wuZTRpWSYqeTZoaEMkOGFFPUl0UC4/OzE0''@;'; put 'put ''N1toQUVMLjVocEs/QFNyRDchcEgrY2VsOj0oLGghX1F5enh2XiwjfXtCekB0bTttc0gxdGs+anNMM3ooY2IiU0c+cG5nJn5xbThIVl1LJV9idUhrTF0qREcsU1g2VU1WO2NEYEBGcmx9aTFwLkRdST5DZm9kM25LRmZCZU0wZUt0VWMqe3tAXyxwXlBwfGlnSlJXYCx0e1okW0MpMEYxWlt4NV00''@;'; put 'put ''TXhbJi9DOXl5TXdnWmkiVStsO09TZjFEaXg8WXk7I2RbWmJHIS9MdVd6UngyInxqcmdzLC9wai5aaDxlaWcuMDJjP0I7dEJZTmdfNEE1OUdxI0xwbzxLSUVTY1dPO1F3ITVLUVhiMGh3cTwodndAVjA9M20oXTlUeV0yTStlPD1odT1Acl8yNUY2KiIqRFZuQmNsIkNyJVo/WUNqSDN9akMxNn5P''@;'; put 'put ''KC5gQE9mSFlRZ0UmRjw2KkcwZmhpe3dsVy5leFh2dWQuPHlIS1UsPTdTNmN5ZWREVkd4aEtralVmJU9XcjgoWnN4Mlo2IS9sIiRSM098dFMrL11GJlQ6RztBR1kjenphcHkqbXArblp2UGs8MmdWPXlpelU3XnkpLFU7fklmTnpDNVt7eG1lI3MjRkxpdT5wM3tCa1NDaVVuM0UuSWluMyl5XTE5''@;'; put 'put ''W0luIX4mekNVdFcsc1gxVHZ8Pig7cSZTWXlXND0pVSYlOU9iRXhlI3JqWlh2MHczTGZfOTI9YEI3Q0pfQW5UJHJ5eltHL3NCWlB9YClleD1rQj5od18pMEc2ezBmYCZCInZIYV80MG9fZkV4TWJAV2szI0FidT8ucWBiL3VtMG90dTx1L2RWfiM9OV1sPExQYElOcCpzLnc6PVp9KzRAIkNNWUpS''@;'; put 'put ''I3lBK3ckP3REUz43UWBuSjBtPHBPeklBW0Q0W21GRC81O3Z0KUZSYWFGSD9CZG5pajklTVQ5JjJTIytPTV9ERDNxdSlNPkN0LyF1MCN+PU5HP3lpZ2svM05aIlBTOjZQRnUlTmxkUC8wQjZmc1B2PkBGT2EkUGp1flR3cltYTSl+WnlsL2kiKjZzNyFnaGJhPTA5SzZwPz16dnBuSmddaUQpe3Ar''@;'; put 'put ''USJeaytWMFkhQWtaIXZoKDNQPz1OK316XmEwQUcoUVRRWGZ3Q0Z3JmJ6M2oqOj9dIXQjaVFzd0Uxcl5pKVFuP3ZkT0lyViJ6IX5odHxmVCsxXjI2UUkweWtRfnRXNjBNSDFvc2E6RkJZLlV5KUprIUR7UyprZkNHPV42WXJWZzl8ekJGXWZGKkVWPVApTV9tOzR+eUNuMjY1WFZiYD9IO3Q2anFR''@;'; put 'put ''NHYyNDxKKHdYPHp+X30vPXBuRztWZHZDWkxpfVcxOUVNPHkhTCRVPCRobiFUMmpSVnpLNlMhNjNwLmVARURoUzJiZCpRXXkrOH5delhTNDEkJC9+NStgLmhZRG9WcnIzWTNyL1FbdFM3YSZLT09DcmFXKmw8Ql5SJUsvQmE0PDt3MkQyUCp4dnA5UUtjRDNGUj90ayo6QmQ9W2AsTl8+cXxUWWcm''@;'; put 'put ''S2tiYCs+WHg7QGh2ens7cSRKOSk3ZFh0KkRqTm9JSyNhUlhKb3VaWGVMYlouOyk7Ijxyb21hMG4jR2J1WXl0U2toUXdwUFFHLzx1LGwqZWFZR0ddPm1dZiojNUk4e3hTe29hIWR4Ty9pSiNlZXdyUVRfZ0BqUltvYyIxWVc4ZmhJX09wMWxyeW5RKm5mYExadkBRO2VJbSJ6Q0txbWk2ekxfRCxm''@;'; put 'put ''Rm1uRkd7biw/cXlwYnRvK0RxWyxZUU03R250dXphOzFFKFN0bjskKmpqa3hbNV1kOE0sV1pGanNCIWNMbFlGLHVGTX4vayhnNn19TTh5bD94SnlYb21SI3RNVnMuVmZQKnFTKF0hemB1XnUjQFpMNSQ0aXY2YENGPyJoLFVaRXxRe0RUck5FUmtFMzNgZjwsLEVTPTVJIUBQOCEhMW0xOlQ2JGVd''@;'; put 'put ''SipgRE4oXlAlVj99UCsiVnZ0TFhGQksiZVY2ZSM1TlJkcykoUFBrOnh6e0t6Tm8/LC8hJGtTMGA4MmZsQlFgKjdxbUp0alEiWj06SXk0fXJiPilYfGVPcGdaYj9ERSpySXUzIXcmfSRNLmduWTJYXz9zPDN9QDRAe0R3TSNRJGU4SVRSNHE5KkIrcE1zTyVfMzZNayYxLzthVSU8PEkjd2EzZF4m''@;'; put 'put ''YzxOVFU5Xmc2TEdua1pdL3A7QFUhREE7RHQhMTxlXjNtKmZxN1YvSmtWQmprY2NMTjBea3Rrbygma1ZFcnpVdkdLWTwzI2gxYSVncClrX2FeaSJedHBFfE5yZi5hXTxHJGlCRjs9dldfLnMuK3pAS0VMUWooXjdmbiw0ZExgfm4wYm8jTm0yK3tkMDtXU05dI1didy9Mb1dnei9yfixSTEo9MGE3''@;'; put 'put ''OzUwNVB1XiwvOXglfkh1R1pvOWMqTWMrM1dfWm9NWXZ4OyVLN1lvdGtELnN4VT0hNHFZS1JEMVBaLzkoT3F+bzBjLCUwKXxqWktkbU0ldCNsdzd8UE5aelF6NSRuck9zZCpEVjtqM2pyYUc2JHdBQDs7dT8ufCQuRjQuaFdkfT1HenNuMH0ucFF9ZV5dNitTKDN6SEs2K20kKl1LcHdnSzF6YStA''@;'; put 'put ''Nm5YRTxvOEJiWkdCeypockJ6I3oiK2V0L3JZXn1MVVtnIT4wVz5gKnU0ZHxya2hNNG8hODZxTyVzK01yZzgofXBWdCslZDI+SGxNX3M8QGZmb0prbSxSVUwzYEoyMFljc2kwc0VVU3x7L21Ve0tLZUQjYHdtPkE7dFBjRGcrWWEiaHJGWFdEd3hUdnM+K2Y/fHNWd1BbRlNzSGBDeXVCRG86VnhS''@;'; put 'put ''OFRkRiRJKG1PI1s3USYzOjFSbDdRIk97WTgvSlp3PGYrZF0pXip3Wld5VkZXXVRTS0o3MVIiMGM9R0dQfStSMDZFV1NHa0NOfDxRRjhjNnFKfCRgelp3LGVMSz1PSXs9L29ISSlpSSMmbyNjbGg4dDgoaUdod2VGWSM3RUFSJXtzQCFiaUlpISZ4aCpiMTdwUyFxbz5da1l+cnhUKHN9Qkd4Jmoj''@;'; put 'put ''Iyh4P18jOWp3UkFwXVpydUBYdU9GPmwyc3dFeHpBNkN+TGNdP11TJWBuNjcmVF1jKnpfZUIsJTBEX31RczhFdUxeZjgpNFtZeENbNHx4KmVDJTw8PSV6MkRVU2hkezc2cHpUUkRKbHIpZm58YEVgSn14UXk6UjF3WUlEbkprQipESHd8eDVJSzw6b2BKLy54Z3NjT29rRE8kTyokTDR9O2ZmRERA''@;'; put 'put ''eXBmd0VYOnpIcFBsLGYse2ZhNWBqXWVScz50MUxMNF93fXFPZH4jQykpYTNvc0ZjJSt5RUMzeD48aGc7SEg2aFlvNk1GSjE2dipAKXdudTdaI1Mkc1tZbn1XWDZ7Kk1+RlA/K3txUlBbZnN0Oz56S2ZoY2VFNk1ASFBdRl0kPUl2U3ElPCxkZ1VyYDFiWzZZeFcrO0NnLjwrJjBGWXJlamwlPSgk''@;'; put 'put ''d0NhQ2BweGklTDVqQGUlWloqSUQ/cnNTbXh+WG1qbFVoKTRRK3VCTjRXcj5JLjYjODM0WDA2XiVgR0VGdTZlKi9EdXFhdyQpS0BvR019PTtkd1VlU0BqPzF4NCNxcnFCSTdyRHoqaEIvN3tsM1tdemhdKzgxLnVUYV9jL0JaMFgiQDtOTV0uaExpZDFIQHw0JE4pW2xAViMmIT5LaH1SI0p8YUo8''@;'; put 'put ''QD8uUXkuOHpgZS9BUFk0JCR8fjdxKTdMYWVJV2dWeH4rQV94Syl3LkRNeDZmNzs7OVMkKnlgMWIiWkIya3BhWDRPOHkoUWsjaDFjVl9NW0I7XyMzeTAvWk01d2JwP10jSy9iPnVyNlI2UkkvfjQ5WCF9eGE7bTZ5dkZoXVI+JXhBa2NtRTchJHkvVkB4MltVaD9PNUhFejFXU3tVY2MrMVMzTGB4''@;'; put 'put ''THxeKWM/QUArNDg0XmZlOEFqbTpPWms3IzwlOjh1QkRSPj5ddnxvOjE8fWYyTEsjNld7XyxoWHtBZVV3OEdLfUFoY2cxT0c/RFl6ajlXVjl+bDs4Iy9leHxZekQjdGhtUDxZSDI7M2c7cmx+X3Y9UTVfIVpiPnUmMkhIO0Bke2g8Zn0wOkRyWGFEKnxlcSNbOHcyPjJbUVV1dCYpWCNgcTguaWA7''@;'; put 'put ''VCo9ISlaVz5kNkg7ZHtXI3BMJXRRd1RhajMpazFZKFEkXWBOOWh4ez9BUnpga2BtPk5TdCF7S1Y/W3FpdnRWW00/Vnw8TjomXjk6VzB1eEdeaTNBUS5HKW08cW9hP0FXYTREVWR5allKclo4TFNEPEM4KXIqdWQrPCRrQGhGflBmRDtMOk9DbFNoJHhwKjpjdElbVEhVZ3Z2QlIqfit0Q1NUQkNk''@;'; put 'put ''ZXNpbGd6SFNqKyg9YnlndiR8bV9fTWxkczAiL1ZYJGlTWWM3XnI7NCJHWSxrezkxMX0xQTFbUS5AfStQdnBxVnlJfmpVYmFVczBVSiIhUEo1RWtDPTZ+ejV9PU0kVGpnRjs3OG4wQyIrdmN8WUohK1VMJVc3e2o/bilRNGZWKT94eDV9Xy9nLj9TRykxOyF1W0g4N0xhUlM6N01ue2c2QD9+bGJD''@;'; put 'put ''Z303QzJodnt8NHtKeT8kJSRaS3EkfGNAckBbeiUlQlFIKSk9ZDhpSH1XdS5pWzQjMVtee2AkQEkhVjYjJEw4R1NRJD9FKWw2UWspL09KXjtSckRaaStoIzEkQHxCKF1jWnJYIitpOk41NWR2Y0FFOkBjK2lMOTwwWmp+UCEjKG1gKz1ecixiUVR3ai8uUWVNT1YmfkBHNkl1cGJATDBMWGNkPmBQ''@;'; put 'put ''SlB6MHxMJiRSc3MjOHZUMCFham91TngkYElyU0BCY3xoWXNHTGNFVHZiNG5ZdnEvOXJ2byUkfWhQc0lNWCZQa1d9TWk5aUMheGpDWGpMYUlrXWV0WyJDTT4yeG5sK242fSF2QDk7dGJSN0leZ2A6JjUzLyh9IWY1fkYoL2csXSpLeVhWJEsjalNYdHhRe08+KUFUMl0xfDRza1FCYkluTDtYInE3''@;'; put 'put ''SGJ0b1h2eTFSVyRac0xZYSR2eiIqTy57L3xMO2QieSx+OHQkVyV8PSg7JUVWKHo6aD02N1dseW52QmBqNGlvQzw8fjMrNjAjUFo0YHdLdjV9L1dJWmoyei8oUFNJIl5Gdk5fVms+OFZuVCJHfGkrLFNWP2ZtOk5ra09jLjR0LGBvJmkmPGdoKX5iMVdCRy8pVFFqMmZrLCkyImBnX0d0QjFFPG0q''@;'; put 'put ''KzZmbEl5WX02dCFXbjJVYz88YWlNdGFiTjNvb180Zjdae29KISs5e3ZtbkZYdT9KZShSNCpxQjFAJj1oZyVyeUNEM0xtWHB1elk0KSMrd0p7fipeR3c3TElNW1FCaXJjPjEuZyE2fXc3K3soSzJCaV4/d0dPKD8jLEsqSlM2Pl1xN09mOFlzPl02XktuMFskK1hCRUJXKXlEWV89a2ZMX3NVM3Z+''@;'; put 'put ''TiR6bnd2NWs0M3NxeUB2Qm5pNiwmKEAvdUhXMiIrRT5YYm4zJV0jMWYpZkclezcybmlFUjsvW2N7VHdLVj5lTHkwSHoyRX5xSlEkbXIkTVYqQFFUbDZbdTpOX3R4fSFoR2pSIT0mS08heUMsejgqeU1jUHZtb1NjaDosZnZmUl1QL0Q7MTJXbEx8RlpzZj9hSkM0c0BjUWhFUm1uKHJDMC5hQmFH''@;'; put 'put ''UCZ5KlEuKFFVJitgXmJLVT9Ja2slJCVmempmXnFuKzxbIjU1TkJNNSZKbDlzTWo7WnoqZigrQ0dINlhwNHJSSkp1MFdBLDpPPEBWV2RiOFpjcSxOR2JTbTgqQ3JWdXhAUmRrTmlEYng9X3o8TT5FLiloVyErT0NDWyR5NCZuKnBLWXNkfEphMEhHYFchOn1vZHhQVlpVfTU2IjE3IyoyLDNfTW9T''@;'; put 'put ''UUIrWU4ycWU7XyVxQ1R0aDx+JnVJIUAje3hXTjx4fD0pQH5AeWddInxTK3NRYUlkOUQ3K1pKSzgubnl+fkxsZV8jSSM6IXZNUC57P09dTUxyV1ImcUVPanhyTHZDRFRQa00ufHAzey9Lbn1FZz9nXjlRJCM5QHpvdX1jVV10RH19O3l7LDA1dEpjeT1vaDdZKTA7cEFlITsmXiMwblI3NH1KO2dq''@;'; put 'put ''cyxVTl40XXR8Q3VwY1FtYFlTSjMlKTF3NC4+T31kfCFXTytgaH15MUNEUnZ8eiIpYFp0Li8zaFJgcDwwQ2osV1F+QjJBeUAqO2lRdT8qLGxrK2cpWks8ST5fKzRnTzElckdzdVFAQyErS1BqRGlVU0FuR2o/VCJoVTtifFpESFBpMl05OihhZ3pkVCxVWiF8Nmk4bEAwSGRFQnFYK1hAd3VKVnVO''@;'; put 'put ''Zl5qeTs2PTppWGlZYy8vLDMpSUtPPntGS3R0R3FIMyhEZGUrelV0TDxzak8yQiM3ZztRKCg3LGxEW10jfWRQU05kYTt6PChVbSQ0LGAxNSp4V059SzU1Kl4uQz02KDZQdX0sdi9GU1Nid3Npbl9RPmU1OjciTmosM0JDQExAOmFbXUB+QFBQL0RbdWVyfVd3aGBJazIyflYwcSI1NFpfIjclUl1y''@;'; put 'put ''M0REaDBNLjsmdnNAdTxdU0J5IThzeVtSeUp1RTtoN1pJSUdpP2gsOV9nUVA8ajV0bTRlMlpwaioyVSpIL3BGYVR+a2EoYUshIUpDJC5WQkZxPSNsW3E/e3tyUy5tXmlkPHtqeXUlJn42fk1SelUydUAhPmd4ImphRnY+dU9QfFpaY054RE9IQCp+JlMhNUJxL3trMGUleUA1aEBgZ3ghKXoyJm8k''@;'; put 'put ''L15NYCk1KGosI0wkVSFqPiheUHhHQ1k0bDx1KXI2Vk1ATjc5eF0/ZTB4TDdWLmo2cToldDxIS31XQztXNm9ANX1bdElZUVkjIWYpKi8kKTsvRmkrU2ozYktAdmwwViFqXTBCfltNMmA8S3dnUGp4QEFfQGtUdV8pWnVUUVkhYnV3ZkJkLjpTYWpsflBGRTZPdT0kfSFwSmQvWTtSWkt2O3JzMmRI''@;'; put 'put ''NVIpQ3tLUTBgfTdqdCY/fC93WzkpXytwfFJ5WHNLaShJPTM4T2M5N2JeM0xaWVR0Wi9mX1tzbFczb0F7WkBPWFQzR1t7XmYjckVsPTNvIVdvb2BzO19MXy4qfkg6eHJ1OXpHbEltWjdfI1NjZzRRMF8zcSNMPFt1RXNZcGdQXik+Pn5EeVI/UDppXz1FcnlpeVU9P25VQ1ZdcSJoa1Bea1R2Ino1''@;'; put 'put ''dT5uNllqcGFOIlB6YHFoJUhCV1FDcl94NmA8TXlFQXA4aTAqMFF+O2hZZitAI2BMKWdqZ2M2LGduJDQ+Vig7WTgxRDoqI1BONjhZcW8seSV3WVE5MHdlKFRHX0MiTl45UkhCckxjPDNJVHhddTheOkZMdUs5KiRPISg1elFkaWk+bHN0cWQsbWpqfWpdKXBQM3lUVnM4Mzksa3xaMCJXKC9wN057''@;'; put 'put ''KT9dVGMyNCZsWFs9QjYrWWUhd2s0aTR8XzRDaUN1LklkUnNUdVAvXVVEXXE+KlsiaVdVfT17eTxJP2s3QW9SYm40diNtKzVlS3ZzKj98PVJ5NWo+eXdkNiFMXjhuQ3hBPFdgbWhQdWlMVFg8a3dMZjEoLlppVXF9MH5wVGllK2B6I2xSU1Neb1FbUVhaSXYrRnZAUSJwaCxmRixVZlkhR31HdyhR''@;'; put 'put ''LjVQa1Jmc3IhVC5bKy9IJWwvPz1oKylbSzB4KlkoRjdxMjNzeigrMU0oeDgqLnhxTEVqNzNEfjpaLiE+OWVkQVAhayw8eSp7PUdyKE9qaGFMO3NdO3hucTEjMDYsNHdIVXJsaWR1cCtTT3NvdygrckwhTixlcVZvTmZddTB9VW9lO0QsSmpMTjo1NWJvJXNuKnF8SUEzby5jaE1EUHVVXmsyeDhi''@;'; put 'put ''QTBJaGBpXWdHWls6VXtzX3I2MkN3Zj82UHl8PV1UVWd1TEg6YU1uPWxHUz0lYGIkfVFDdWZGNVIkKHVxLFs2WSJQXk9uM1Ykc3g3VUViaUh0QUVme3hhMzJlSEgzZ0hAa2FjM0oqLCg2eXt8YkAhPk5TKWtxKT9FJUx5RDJaZj8pRyNGUS4mSmNdQkwrcFMyfmxzamlaNF9QWH1AfjpSST9ye3Bn''@;'; put 'put ''ci9KVFQ0R3kkSVZKPFIxOW9BKT9CYjhYcTNzZzVIcVRPYWVUYER0UUBPOl9RVyNEUD8lek1GMXMpYGN3NE9oKCx9RHRgcVJBVT1idlZ+M1VVNDxHaS5AXjZROCJkdlhTJVA3V2VUXV8xbktSIlhWcCtyIVtefStSJTZsR2skV1M/STJ8bU06XU9ySFo9TCtaV3lkI3g+aCp0RWtzSU8vPjxWYD5D''@;'; put 'put ''b2BXWVdsXVRNJkomcXtjRVNAP1YwaHRSdCtGVXFgTiN9NjV6OnYyWzJRZWdsIlEwPiVRfFZpPUA4cVhhMUM6dklJfT1Vfn13WWRWVWZHYWw7My5HNGBMPFN5VjVeJCpPcVNfdDw4eEAlKX5AOkVWSCVSdTFlVklrK3h7VEdDN0U2XlpIVWFZPUNYbHdJN3w7MVl8OyJXXiVsIkJFRn5iI3B4Izh4''@;'; put 'put ''Oz1wUDxXRGxBTjRZKywuZks9WH4wPlpTSVskL0xaTmh4e0A7a19NMGhdZSx0W1hgaSM/blpOS2p3TTgjOnVONExbUC5HNyk4T1ghKXcsSHciOXs7YVNeQSo6YEJdZ2VSci9PRV5NLk58UkR8KSVKNGVYe0M9KjJoeDM0UUZRYEVVX1YmTXhpaClTN096Tj5iTXNXT2pxWWU8WkJMdGIyYV1TYjVy''@;'; put 'put ''R0p2d3laT0dQXTcmUTh+WVQkbD0re34rYi5XJlplSSY9ey8hNHxXTzYzTzNyNjZpKXJpNkxaNHE3ZCZ9WVlUejt0XyIwXyZASlQ2TGhyVTVCS1pBTkltWmZJP1ZpUzVrNiVSL3ZJMSUzalpEODdWYGtDTjk/X1JmWTlhMiV9aCwjTztXZzVSZUJqTGFxQzRRez98VlhMJV9keDVvX1ZHTXxHR3Uj''@;'; put 'put ''LzVKYlFKL25NKXYhbnQzPEIubSF4LHwhQmVEWnYqNEQzPHVmKXl5L3EyRSZub3koclpVcWFKWlRJVVpwTmN8aCEsXyFiKDQzXkRsO1gyeVBXXmdqcm9PNkssKyRnZytkVmYlI0VzbFhfaD87c0RdbV5yLGlDTlM0UiUmbCFNRSYlfns5ZEF3bnZRYi4qTkQzaGJYNzxWS2NsZFNlQztkUiwiX0JV''@;'; put 'put ''Zjt8YyQ1cE5VYkBHSGBqeltlPDJuMF0uKEh4VkFMO3kyW1teSC9fQWFaTz9Jc190VzVDd2tzQmcyPSwoQSFPXjpMO0IueUg8MEA6aWgqY18uQ3QlIVNXeG5gdWNdTChTQ1dRWj5hOSFDJD90K1dvbWlOUj49X2hmSXQ7JVE6N2Rrd0QqNj9PRD1ZT2FqPnsiKEhfWG0ySFlHdTZPeDJBPShkb2ti''@;'; put 'put ''YlFJWW5+bFZxN2UxN0d1bVBbLHd0aHlVYSJpZlRlJVVdKX1rWEZ+WXBHQ05RbGB1UkBXY0NOdj8jaUNOTjQiZ3FURlg8empDRHRxKC5BVGpCIU16d08jWHh5aFBjIi5lNVBDUH1zMnoxdU9lZlNCbllGRCYvKypSSTVZYXFSSyJBY0M6cGl5VzEpR1k2Lj0sR1g5UmppREB0XVZXVSxaUXghTS9F''@;'; put 'put ''cVQsMUkhXi98eClZKlFlfTZ2XyY0OHFmYkl6JC5jYm41WGJpU0NIXlBeVl1EUj5nZkxKVXU0MjBkM2EpVEU+RzwyeF5DIm9YfT9RcSpkNXM7RElRNENbPzgjXWE9Ik9gSyV8JixhO3wxZH1vK2RUQEtYKT1oOiQxcTI3Qm13W0xYRjtQJTkrLj5IMXglUV5FKyE1UnpLcXtHNnlMMVViaFBaZnhg''@;'; put 'put ''OXg4S00/YTk9TmoyOD9QNjQ+ZWJKT05qZ1lyL3JRPzYoOCMySjoiXTl3fkBfc09udCxnT2R7ZCJXPiwze01EQEJZOCsucSJHYShycUJqWUhLO31uNXomLzQ6aFQ8WWRCQmFNYyVFLGRSYkIpby8wR0svVno5djl2TmwlKzM+dTNPemNiaWhuYTNzYjJufGZFezkmUDlyNWFQLDhfN3lZSiliZzNZ''@;'; put 'put ''W1dwdWhDaFtubz5ndFY+Tyg7Yy5CYD9pRj5aJCF5OD9ZMSZhPyR3YDUuITp6UyFhPkg2cGN+TUo6XTdlUWE8T2JNWn4pXkheMThyJCIlSlUmemBHMFFyMko1WXZmaDMlakQ+Xl1hU2wjI3xDO1BiMm8mdj5GdFJpI0hXZHZCIjwjOGZvaVB0UHpgPzU4T2VPfXBSbGUsQSlzS0tyTHpyKCVXLi4q''@;'; put 'put ''dCs6US5rSWk5Wm5DQiFsMGh2cCVdKnxgZzQ8ITEqP3FNYF5oNlgwezh8cVVUO2lse0RLd1N5fUJyOHR3XVMqPXZRKlJHUUdPZCtWOEgxWn1dV0g7SGd2RCNIPGFAL0gleExqT0Q0NyY2byk5TGMqIj1KQzFKYU50SVI6XmRgTk9lOktua1dxblVFVEw1am4ub0xxWjtYOk8vOTkjSS5EfmMiYG18''@;'; put 'put ''ZjVUekNsZzEuQStSdHl5dHFTJiozaExRQ3skazRbQ31VdFNCdUBHc2lBYilEKTA5bFhZR1tONCNVbCNIZlR1ZFtNUSRuSH1YejVsOVkwKyE7O1UkcztNYkJHZSRVNn5GU3VrP0oyOSEjWyx4O2giYFI/L2ZSTW4rUkh5aShxZis3dng0UWpWT3pqPUxNfkJTOl1lOWZYSmEyWVp+Kz0qa01mYkBW''@;'; put 'put ''SXt5RGd3Lkx2L1o0RVRKZnt4RHtXNHZAWHJERmFrXUB8S1RWeyhaPEk6TT4xWEteKlthYSElKStFIVB2cnZMMUEkJF1XI1NUbTBnUW0iVyJsOWpfOlVTfH1eP2AhKVpWMzJhSXE+YmZ3el1fNVVnZyFnIy9yPWB7Jk4xWHdva3pdKnYucU5LMSEoVEFrSUNaXmcxMXE4PCVnInBsPX07UC5dUEsp''@;'; put 'put ''W0lJOV0zeCFBQ1VdbWY/JGVKKipTS1ZHUyh7T08mVT1iXUB9WlQ8Zj1ZeEVAeC84LzdgTXwxTyRVWjokcSZAYmlGTF59aipLZ3xTe2RWQXo4ZkdOfU01QlJlbWpDaFgjNyRCQ1prfDlRLk9nYCRBKkAuIWxKN2V1cytWM2F2PCgvQENlIyRLQl0lQnFLIzImeVojWmZHQXczYnslMkRreX1QSE54''@;'; put 'put ''dSZwKkpNZzckQWUoT3NHVTE4VEtGaHBeKGtVOndsY1lUZyNAM0t9c30hMXxgLHx2UWwoJippLnpfUzJndlUiM1slaEksOT1jYFdjfXFDKlBfTnNVO1BAd3FhVW1sTHN2XiYlPV4wTComT2loSSRXeVg8YCNDW2RGfjJrNz5VZUNuMU0pVj0hLi9aMHMsN1FGQTZ6eilAOlttPlRHXkFkR20rRWVw''@;'; put 'put ''ZFsoeGxCKzcvd1FLajpdTn0mZCx+RVpsc3xxYy9WWUEzTGpEUFA3bWdJdy5SZEVLdXE9ck86T3haYjJpQkldJTk5N3d0OjAuNGZaYEV2L2tQX2xMdjBgPDBfMUthPS9vY2xkKl5Mck9xMyxrMnsjPVtdZUxFM3A7cUk6Mj9eNDg9dylrPTh6X31SYz5bd29LSn1WKWtDVC80STs8OFJJUm02SHN1''@;'; put 'put ''NGc9WWppRHFZZ0lEI1NYMjpmSlpMY2FDb2Vze0NBaUdsL11SbSZTa3AiTHxbQWwyNjZRaGIhPF1rb3pHPy5IN0J2byw6ciQyblNbSk41XWZFOkQhakM8Y3VkeEJGamNOUXJ8WiFgcyFOfEBhN3o5KS80emc3dT9Tc0VZXWkzIk15K2g2MCk+KUpfIXpleFZuZD9ZeFFTeXEkU3UrPV5dWFJQZSRr''@;'; put 'put ''LE92aXlzPT1ZL1U6X1ZvalAuTi4rXl1VOkchYiElMXNpfHBBVHZSI305Jik0fl1FMTlSK2hXUz5mZ0kkLDk1O3V+VUh5eEJPMWgoWjU7M002VyZfayl1Rmk4a0VPWkpuSzJzUDNlL19jciRhUCRZeDJ6VzNpNW4jampgclF7JDJ0akF+YEk3NUpxPDNuN1dvcjZZdlZlLGJjYVJ8OlRdNkl6PHgl''@;'; put 'put ''RTR8TTJrc2M3fnJRVEg5IV9PRTI8LmRIJldSeDs+d18wfkwqVT4rTzopfWFXLlFJOXc/OndsZWc8WFFNZEJTcFhoUFlDazJzTHtrbzA0byhvcV8uLltQbVpMYSU8ND9sIzRAMExsXWQpVHxxZ0ReZSkrREM9T0h0bGNrflFXPHJNYzppd3hSU2I+fHJnPTY5QmhZQDxdYXptYEI+eDBnSStaWldH''@;'; put 'put ''YVBLJExsM1dGJj9jbEEvVCR1LFMxdCpzRD1bPzdFL1cuXX5CVltbMlJRRyV0NkJ6fENOMTFbP1pkXkd6XmIkQ3dwJUdPeHo0O3R5ZSRzbVlDflBvSmkjR1JuImtYUFZUalR6cD1TaVMpUStFSnMjTSIxKVtUZFJ1JGckMlYrZHFAcm9lNSNfJml6MSUzUEp6Uzl4fnNyR2wjPz06KFpYTzR0Q2NB''@;'; put 'put ''RStmMkJsNUhsbmQuPHEjbDlxeStQK2M5WD1rdzF0Nil8bFFCWm9CZl8yJjd0aytLJls7YGpJMklaTnBXR0UyWWJtcGpYSk4wXl5bTVV3WkhDMU9SRXVIN11meCUlNyx7SEthS01IMG5HJlcqUzBKek91eD4qWDRATyVKXStDfSRSd2twPmwzNEV1U0hQckhIVHZfb21kUXhxPzlnU2RYM35LNS5v''@;'; put 'put ''I1g5cmMoRlNmbmhOTyhKUD1vYEhFOHlSb2peJHM/dHJ7dVN3az9QSVFuKTYwPU87UyhCUUEke1tQbjxnS3E5bUopLzxJLDFjXjI3QmxmXiVkUzo+b0M0Zm5ySXxjfk1aVGRgYSxnLkl7clc2czVIc1NiQW90OzY8cDdxKlQkNmNqTz5NPCJsOE5TSCpWc1RgVV1rN19tcWNXUSxPO30sJjdQY1JK''@;'; put 'put ''K2YwQDk+TWN0dGxRZyVqdyg8JHlBJls2dndSRCkjcW40NXhuczxSaFtVVks8THNrcXJ1ajZoUyo4UWBzLz1ZZTsiZUxxQ3UrQ1QhNGYlb0xyKCYvK2w7SGJfdlleem1ia0UxOiheSUBeaiNQciFPKT9qK1Y3QEA/YDx7N0t2ZSN7KE5Zbm8sPm8pLERQKExKWmAhY3p9XUluVSpeTE9+Um19VUI1''@;'; put 'put ''ZGFZXkBuQH4hbFtEY3JEVGVbJW1sdGE+aFEkdmczIWVLOmd9ZnI+WXxtW2hNRm99VEVoTWl0LiVoQlJUPUw1KWpiejwrdUohflE9dipncFF3a0pdeG0oQklXKnQoIStvc2ByNF4kMyNhfl1jRj1VKWVMLF5vbHBddURDej5kUGZvVHliQEApWFEuUVFjTCwvSmFPbSImJChTd0VvaysleH1aOEg2''@;'; put 'put ''NSRgUToiJX5KVHpuNWxncWZLP0hwNDlddzs7NykmY2s4Wm09cHFgMDEqeUhaOygmaDpZZmtCbnYxanFdLn1PSmRjLGsub2U6W1ojb2RUMnYra0Z+LixKMV47TypPPT9ObjJRbXtXKV9zb193Jnc+a0JaNCZKUU1sdCw7NkRCInZCMVk5Oixvb3IpQE1aRlk4YWUlY2x6LEVwMDFiZEE+c2Mwc0tb''@;'; put 'put ''L3V3U3RrVkFKSSldKCl1RVFYOUtZOHtRRk0hNzd6bypBbnwleDZlMkt5JndJYDJmJHFhYWFdbEJWMVUuIT18MUpnMndFOTlzWVV3TSw+c0pUKD4jd187IUFkOVB2Qi5xNi4/NSxHZVBvMHBfOlc3OUwyZDI2RVEmaCU7JTpHV2FALjpHLiVne0BTWz4+NV93dFFwN0R8bS5lLmFdLn5NZDMsP0d8''@;'; put 'put ''ejFPJEk/QDZVWERAOjszQU9ZOlA3MVt6OSFrZWdDVkAhKXpVcD1LfF5HPH5Cc2pAYTAya3J6P3hHe2lyPXt5Zk1wSFUzWlByL2YkNSM2Qy56JUd+WUIpK11UcGMrakNkblZqQy5VXiIhOHxjZGkvI11eSGg8fks0YnRUUV4uQEdZKTQmaE5aRzV5WFVCMnpwaGNKeUkuMHQrfCs9Xmh8W1A3Z000''@;'; put 'put ''TFpZbzZJcjckZl8ldmx3O3VhKiVeXn5FUkQ2SXMmU1gzaX1RaDByXyk5SFRETmtga0Mpd2x7UFRYdSU0JX59MnFkakU/WCVrVTFYZmBiZXpgWmZSc0godzM2aUUxYnFGKy5BZnleT0crMlQmSzxrMzlZQmJXQWw+eF9vUnc/Sno/fUxUdXg3I2oyRm1oSVZTfUxXUHkuJmAxM0h3R3FJdXhCUiow''@;'; put 'put ''dThrVmRgbWVrazUmSyRwRUlycHQ7SzpjOj5rVitdK2tsPUNTYkZiXXhvTztlIkwyZ0M4cSsoKH1POkRqfDJOQSYoZFdLXU5kcn5XaSxmWCJKWGJ1UVUueTE8Ly8sWWlHNVRQLncqY2FLcU5dVX5QZypKbDdnP1N3Y3xiQUxmWDpeRlUpYEpqTW9FKjMrcGxgNGFXdGwvUkxeQHR6R1k9YTdvdCs5''@;'; put 'put ''I3k4UTxGYE4ocD9KKSslUXUuUDooSThxVWt3VX5PVXRocl5hUmFjMTlsYzI8ZiM/eGd9PjNAPHEufDU6VltwYGpILDJ7OWQpfSNHIUZRPnI0SFZVfTEwS2hZPEB7dk9AMSo5Tn58S3ImRW81OnxDbE9XI0NYcmB2LHVzV11MXkJOSiR9LlJzNjU3VFZ1Q1I7MTBkWVdAI1JjTD8pIVBRSDY3di82''@;'; put 'put ''PWpDLkYkcThvOXhFTWY7cnRSW31GeG0qTERGcUBIWzclcFM4Ii86S3YwIl5PWF9lSF1GMC5tIm9QKkg9cFcjSkFiQldHa0xHcG4lWjV4aTQuXWxLd3VUISJqSU03MEszbUBtJCksbTQpLklbYUNXW0cmcltzYV15X0FvanpHT0g2Vj5hRTlzIkwmaUFYfl12ckEiQ18xezswOSRIMlRtcFJCbWtb''@;'; put 'put ''IUl5MmJCQTEvQm89SWJNXTdvTkUhV199YDcxdWR0fSR7Ql5ZJkRfb3dOU1oreik3IVl7XWwqO3YwSlEyMC8udUJSPmpQMiJPP3RIS11tKjlaP3dPeVBEdStrcnMsfGtnImhFXntQWkI8Kj83WEt4K2hSbXpGXTd7OnRrLHFMS3VqRCtFZzxaeFU7IWduc1JJUV5PNlBbVEdOeEpjYDhrPkZ6LCpZ''@;'; put 'put ''Ij5CKnB4Kk4mJDJPYUU/YVokP25Oei40Nll8ai5ISVRqTTtVQCN4Xyx0TUM9MW4vPDlGPFZwSXEwZWc+JlE/XzptaDhWcDZ4aD1uaU0pNDxrMWVTMXFzUjlibSJQcGlySn1sYz82fntIeHozX2xhR2p4flB9QndlKl9nWXo1Jlc/PV07K3h6dkoqbWh5QW9RKmBhKitxTz9TYFI/MiRXVUI8MEBR''@;'; put 'put ''aFtNVlo4N0wuXTxEUTJJdTY6diElR1R0Ijd6VjV9U2hdfShPLDpoZ2dBU14oLy51dFgrNV5qZT4wQ2B4MEopaiNDXjdLbSRuN21mN3dbZE9OeyFTQVlrJmh1cVI0WWJgX3RNeC5dPUNFVXJiVjdAQDomP1ZFKW5uWTYmKnNrKWNreW9zeGMhfFpaW1I6NztlXWF8dmNVJS5QLz99akNpclZDZzU6''@;'; put 'put ''TCNuZ0crX1pTfU0+YWdVJndqNV9DXXVXMzAkN1hvIV9UVTk2N0gpWDg7e0NkWWA4NDB6bX4xfEZKI11wZzoxTDB5NzE+RjJidGp2dlJRLzttNEp5UClkKmlWV2hyMCZlI0R9Tnphfk9qPWBAZ3hjM0xKZWlOeGJbME0/eztae3EpSnhtM31gQWZ8UmYuJXo4WFlQRl42XjxNIXlGSFZWKnczKk0+''@;'; put 'put ''ZFolY1h4entEQ2UlUktSdmdrYTRsKlFHU1hlK3FpWmEoKC5DL2xecEo6cHR6Tmw6PGlEY2BbYjJOQmJjOFhpTyN5Rjc8d2NYay5tTW0hekl9STRnbyszMDR4ZTdZbCNHRytFPEgiMkY7TGBmM1pdemAzJFFLMFJiMGduMSJFRk1DX1dEcCVMaW5DdUBbclEzeSlUQ3RnfVZ6Myk2PjFVRmExaEQ3''@;'; put 'put ''eTlmQXA5bHJNeWxgI25Fbiw8WmZLJGNESFJWL3tLYilHT2pzWG9CWU9eUThrKGsjXkhlSTV6LjtJVGNhdStofXtSLn1XPWxKWnddQW8lWHZDSnRhV3cjTTZhWERlaWVbPlNZMT9aNTFzU1gjLHFPQ3pNSCJhdnpIKjFEMnBSSntOVGBEbmI2LG1NLyJTRnV7XyYrKGhQdklHczlMKyJ0NGE8N0t0''@;'; put 'put ''Qkt4cE1NdTB9dW83OmpZRU8sT0tKKzFEX1JlOyVMekw2VWxrNm1iP1FaMzMldzJ5cmU8PjAjazord1lOWm8qOUFLNGRTYih1LmFTSkJkS0wpVG9zKElgWHlHbWBEbi5eel09Nj8+On55ZGJGQHF+R1tgUyxiIntzSmJJeSYmcnNaYEV3ZyZVaWFOZj16PzRkV0pCQExdbUdgZVdCeSJtOiRBRW5l''@;'; put 'put ''VjcmPXhEQkUiaHFEKjFuTkFtdHJHUlZbaW43OlF8OjhySCxfblliR19jR2VYKGAkSnpkXUk3PDYvO0RFYjdYMndrNCxXeGRjN1tYckQweEAwPTxOIWE8TylfbjZKVEUxa0tHMEx7KVFQaW1eV0RiM0BjODBsPy5WW0FnazowRT9Gfl15SWw8fmBrMn50LDNgWEw6SnNFNmNdYDVoUHlZS01oano6''@;'; put 'put ''eWEqfHsqT0V4Q1ZtNldscCNIcW9sb1p4ZzNAL29RR0BuN2liVXJdUllibCJpZX5tLEA9VSI8O317QiZpSEkxXjVYUF8mPilMQDBTfjEkOEs0IUY2SmhlLF9SIypZVDZ2WykrX18peUZHXkB9K3IlQldqLF19IzlOdDQ4IyRAMXpqJDQ5RUxCUVpjWjpCUi59NXs9RERpZChofTVkUjtpIlcpbz1m''@;'; put 'put ''SzJXaV1wUkBoYzdRald7RGFbSDxZSGg1USxkR0lkVD4yRDFfRC4pT0E/UEM1R3JqUyZlVWR3bXxhc1tAPkYuKV1DRXR4JVo6JDNBdnYwVWFdUWIpWktsUWJgflg2eDVxISo5Rjl7Nk02KFNefH5tTzs8Olg9dCQ1dWBAWD10JH45ZCQyIVtoNW1UNUp0cjZZQnw9WCUzOjZeWD17MVs8eXdCOFlQ''@;'; put 'put ''QSwvcDVtam1JcHpsTFFEVzJOc3RAZFNRfj5yMDFKeVAzOjlbO0ZAQzF1PVpIan1ZXz4ybUh2ZkVRQVc7OVs8QnlJYDoxT3J8eCJSKEpPUExGd0ppYX0zRUo0NFBdKTheMTI8fWtycShsVFBRN153MTN+Ym43PEdAbz0jfTVsU0xfS1ojKSxmJGl8KXBXKDhyRi8lIyZuJF92dz5zcm5GL302OW0k''@;'; put 'put ''XyUiZyhvbkYvSE44NWx9KSoofmJUT3FxLnhLbmN3Sj85Vl9SImd8QVtQTDdKPDJ8XVE9IX0hWDY+QlRnXy9WODUjX3JFc3N1IXMoM357Kl1zfGllZ0I9T1RpfFBrIX5RITJ5dSlgITlxYkg6diR9KDhwKFtfL0M+fSlMRig4fWF7X19fZGx5ZHQzT0YvMENSV1VDfG95ZDA4JFFCUkMjUHZAe3x9''@;'; put 'put ''JExWM3A9dihsZUtEJEIkRzRePGFLJWNaNkt2dVBLeEROMjV4M0guSjE8NVlRMzF+fUI+P2VTVVhQV2pAcl0uKH5XPyFscSg8cnRtRWR8YE1MeT5sJjN6QXtLcndPKXtUa2lUY0YvPTFmJStHX2t+MDNwUkR3RTd9ZE00X0tyUmc+SGF4VzJwSGoqTzRuRFlMaE1HSHZkInZnKDBacUo0bi5Vb1FN''@;'; put 'put ''PCx7d0p8X0duO0I5fStLPD8jUVdjQURITCN5Vy5PNFlweCs2Pyt1Wzo0aGdfdmlmWVNBNm10MFhzcHZdTGwjeEROMnZZeWhJVVRUbS9BeVhzX3VnVDkjU2NGLzBZIkhHUTJCMUUyZC54QEkkUVt0ZTRJNE94Ul58a2IiY1RnbWdZKXU5TVQ/d2AkSTxCSXI8UD5LQFkxZC5eeipPT0NPIm8jc1N6''@;'; put 'put ''KzgwQ2ldWypAWDxWc0VId0dIQkgmRiNzI2M6eUk2YUNOYDd9dkZhQkBuZyJHSEJIXkMjc1JHYFNoK2daPnF+THdtIUE9KEBRR1hUP0d6Y18xNXtlYz9JYSgjVis4aTArYUNjczgraDU7KiJkJj80ZVFtcHlBWVNodj9+aEgpTkRSdUkhVU59PCFHXnVlc05EPD90XktvfEBvdzxgdztGS0xZbz18''@;'; put 'put ''V1BXSSpAdCEoTXZjUl5kRSNvW3RaLlkmPSE+Ryo8IkdMak5BKGhbbUIyUlVIdHVlc0pEPT91VCldbktqcmFETTcreC9hb09yRyo0STRaWHJ8VnlwOnUmJU5jVTF7MTR2RD5WYUFENzhQJX1MK2MzVlRuaCZJIilbVSZYZ3kySlR8Vk1veDkiPmF4Lk5tLjx5NUBWSSV2VEBjcnl6NntXZ21sP0M4''@;'; put 'put ''Qkx1TS4wVHxoSnQ3TltRXVIqUiZmPnM0STR3P3F8Vnlpb3F4bXhRdWldXy5SST5QMjAjWVpJZ018MXVvbXZlZ0loakMsdVkqdGlnX3ViSDZwIVlpX0VeNEhRY1JCbExmcFhQV09acnwxeVRUNGpRQF09VWZUeXtYcHFZRyY0STQlYCh9YVpNdkd4eWdOSkkuaD9SeFEveiJST3hbJiVnKG03bEA6''@;'; put 'put ''ezl0ME5pPyw3W3BQOnYvTnRRa0pfbCQpWWg2P3lpY0YvWkdHfXtleEw7WXc0NXMzVTkpLkpJSCxgcXNCQFVDWy94d19fUHMjSyoxcVhBIW1lSGRJPyprOS8oSitoIXIkR05PRDcwTFtnSUJ4NztmN1NkLzAybyEudzgxeERZbDVhbzc+Viw0dytFPHlvW3FOd0lIdzpxc2coSFUmeChafiI3Zj9r''@;'; put 'put ''S3cwS1dZY2NFYz8lZyg7STtVKTQ7dWBMUSRjSDV6KUZBdmVzJndyfGF6SCFETltkW2NsRCp1N0Y6TGFjRWNaRCNzXmN2KTBje3QiXlt0UF5fbnBCNjJ7dWVzc11xfGM9fERNdG5OSVhhJjMja05ocTlsd29BYDMkeEcmeUtVekRNR31eaChVJUA+RiohPk1kSXQhcjRfWGgyZj5pcUdFVFs5N29T''@;'; put 'put ''Kmw+bCxuSEJQPkVDR0J1LGVMbmlkU2liazQqSTFHQzhOT2MiKzVKKzwvKH1wR0EyZi56ZyhKVUtCbjYsenJWQzQrbFZOfioxZFNpU1BXUiEkcjdFakV0Iz9WeD06VGkpdm9DdHBIZFMqSTFFJEY8YmE0Rz0yI0UyZkdaTVclTVlZbmNlU1pNbXBBdV0qWCx7cWFOVE1wOz9USzR7MUglTDx7SUc2''@;'; put 'put ''Q3QiNV0rIT4oYnlYXl95QndaRDFdK2opUUNLezRkU2l0T1dSOWpGfm0wIVh7e1lNNnR7elo3PUUiXUc2OTRoUFg2akpUb0g6MStKZGlaNjY7Rmlacyk4Y1VDYWJkLDtSRns+MmJZKEhHPHtaXSl0cj1wRnRUIjc7MlJUZixMMExfKSE+MWxjfCVOP0I9R04qKVJqJjQpVWE6fXE4TGlJTFspXzZn''@;'; put 'put ''KSUxQVFpY0B4WFIzUGxaTE0uRGdqandoK2RFcWFSbDN8OzZFRWtpI0cjL1p0JHBRNWspaFhwVFFxIm5YbyJVQD9VWGs6Uj0pWmVPfnZ5R3psXSZtaU5ON1hySk4pdVduTE9PPU4zfCI5MVM+aDh3bCFJJVswbnZhQXxERV40TTkqRF9hfX5MfHo0KHUqMVNeJnIqW2A6QmljJC5ETSl9dTl3eWxq''@;'; put 'put ''XWhgRHJJZzFtc2pRUz9XdUN0S3BdKyE+ZCZreCNEeU99NV9JdXNjYyhmOFkvJDIkXzJleTNPd093SkBvTG9UUEshTnk3VChlITo6K2xIYFRsRWdsdXtbaSlYc2doJFZaTjcySSRPdWI1dTk1Oj48eURsI295PyVnNzRoZntvQmQ/ZnBYKlVIXXsoKjt8cj9KW3lVVTRqYHFXdTd5NGR1aXNWQTg4''@;'; put 'put ''YjIvNXE+JGY3e2V3TDw/e2JLZ1hXRGVCZyY2SDE0cUNrQCtHeHs9Nm4id0VBTyxIenErWkJfYyxNKFg4WUVmZjt7RkJBP3oxQ2BgezYidXZwRTpgdTxdbloqM3heN2JsUnJWclReaGBKVk5gWnNBTHEpIlRkOXx+WFpESDxYci40c0VBQEBJM0lxMnd3QENFXn41KUJqbXNGbCE+I1Z2VlZlJnNG''@;'; put 'put ''IWkwKiUoYkVWWHVsQU8+Yk9Lanl9OVhSOVQkI0ReKEYpLz1oNjFnO0MoPjdaT291dnBAXS45fFd1fD1Fci95Ii44UU8pRWhpQHg/RnZSPHg7M0lOe2JLM1ZCc2dyYmV0a2wyQG0rdWFAS24qZXk9P3dJW1NbMW9JWUFkWTsxTDwhXUJmN0RFXjc7JTojOShibTJ4N2l1fStgMkspLC5gRl10KiFC''@;'; put 'put ''UUlQd3gvcnpQTWQySzBHQ2daOWpSZE5mY1R2RVl8ZHxrTFR2RCVPWSghPiw6flBmRzNifV5Gdl5JTFNfQTtoYzZCTy8xRWw/bi4wZ01URigoOUV7V24jVkI2aVFoQFdXV117P2V+WldTYilwJF0pMTNONl8zI21WcyN2WWVMMGBtQiV8WE10YD8ldF17ZTU5I0c1R0dubT5HfXljVWtRUV5VSlNP''@;'; put 'put ''aTRTYXwodFltWkVacj9dblB+dWEleTl4T3R2cF4vS2ZzSHV0UnpkdTJOOm5ZalBvKWc/eDltb14rODRrNUpdNFtgdmJKeGA/OldgRnopPUk4RTV8P0I5QD4mfndtQUxLZTVXVEp6PDdHKXN8MnwhRGNFYlY4TVNpIUw4VEx1Nnklc0hbc1QlfnlGaHRIQjA0ajNPXmp+ejU3SGZ0YFRpWllaVSxs''@;'; put 'put ''dXJYOG5oWCpVUHdyfFZ5czBPU2tgMWZWY0tCRzwhTl0qbTRqMztNKX1LWlNAWEY2QEQxMXF3bSRMeUouNDJoc1huYkoqRm05USNjcmopOzhZLEd9Y0JTVHZefnJgTzRmfFR4d3pAOTx0d2hOTzspd2g3JnJwLDsrRFd9KV0rOVpoS1BbXXs/IXV+O0daez9afFY2WCkhfnNwO0A1Q1l9RzdWcSli''@;'; put 'put ''K2Z6RnFgZE96RkZfNTQ9fjNhMS9aQ0pgSC4hKG4xcTRpbmlJXnxvTltwRmJkUl9CYHpod25oSHloNnBfLlY+fnZ5YGVsOEJeZ00iX2YwRS86I0c4X30qYGIub2FGTlt8fm1JOTJBcEZZJFJ2Ii80T3x9Sm5UWyZSTWN8VlZDSjg7IS4oVFV+fD1OPHo3e1dFQ09QSm9WLHR8PUV1NX0uMypvK1Al''@;'; put 'put ''M0YpY3MhbTpDfCNsMFY3fS5YIV06ZyEsfWVCRDRQSWQ8aSEsfWdbfDN+NjFeUzxrfmQ9fi4iY3FgO1QsfTFARzQmeCZfeHQ1KG1iXktqJTJNY3B8PXhLdH1iXmxWMzw6c1EzQHEoWTxwfD0vJm1fVSNUV1AkU0xKMFJgXUdILmtEcmU3NlkoekxqVTttTmsrNUBWQnVJbUk5VEIsYmpeZjg+Y3dI''@;'; put 'put ''ZkdqXzwwMy5KYnhmaFolaGhDcCZGNHQkY2FKL3xAPy5qU207MT8xT2B0YzE4cERIcmVacTZoTWh1K1JXSFFLJFVGNF1GZXlrUWxpVnpfWVdGQnR9UGUlMXw3SlJvKD1DaVVwVytqMmpsc1RsdVslKWgqbmRtQF0zTFdVaGJJYDY6K2xPcFB9LmtjcDh3IV4zaE12a1pAX1ZkKzg+WWExV1h3dWtY''@;'; put 'put ''XUBmMmA/QGhbWF8oYnk8Q35GR2h8YCopbUk5V0FFRVE8bE4jZz95TmMkZjt9QmpBLzc2PmhQbDN9QllIL1R9djI2L3FAeUh6Wy93Y2slZjt9YiN1PDllfDp8N2tqaV9rPGJrTTU4ITF6RmNtVHAmeEVeOTUwcH4rVnVbZFV2VGRhJnMzbll6ZzlERnhkYCllKEdZK29XZzBXIW96fjlgfi4qaXAk''@;'; put 'put ''UTNdfjxXKmAqVjlSMy5vV3FnTUF9clAxM2Q2aks3b1Z2KC82L1l5PDJ0I2hnVmRtP1d8PSZFd3NHb3RrPSRrVihFd3MxY3okfiZhelc4Ijc7OSZUNWZSM0gjdj9BNCJ2UiRNZHZdeUhSIkQqcFVwPzY3PyFfREFTQkhaNHN+L3tEJGBSI3M2aGlVNWA7LGBSUlc7P2ZEVFdeODo3NVUmYFJ5RHNO''@;'; put 'put ''RC5qZ3BuW0xNM31jQVk9Ll08LlZldHxwSi8yO1UmYDxofW85Z019Ml1fZ0I4Pz54S1d9YW1TN3oybnRaXVp8WmdHaXhlPyJTfEp8JmBObSk4bnQ4NVAsRlc/WSFkN2VHL09NaDxYUHFXbEV1W1hVeV41SHQoNiRhdiZUb1tkfDlXU2Z0bGVWM0xabWcsWyV9M3ZadDBxfDcoQCsrPjEreDpMfFE7''@;'; put 'put ''Wkx8T0ppal9+MTMuSHghIWl1JmhDI1Y+LyxQZ1Mpels9Oj8uKHpBMmZAUWQifTptYHRwSmQ/NiN2UkIvWSwoI0skaH5OWHszZ3BRbWVJbHxDRFA0cEt5XmVJbHx3bEYvXz0jMytMZldqSGBAOUNOeFc4SSM9OTpiaiUmfWEuRSIlc2JOdFt+X3heMG0+fU42eFtNWCpxODImfnB0WT9yV1JDJWRr''@;'; put 'put ''KmM4KFVoWyUyXWF4ZikmWSNvQCtwZkVPfTMkYk9FOk81VWgxRXJlKTVUNE83NWZwU2Eudlpec0cxKW9HdVslRXo6c3A/c2tWJWtWd1ptKGgvY15mOFksczBhcFJxbStia2dwUl4zOj45MGB6JFZ5LHtjXWlfdS8/Ll89eyYxJTtjZzx7M0U1WUdwKVF3KFVrV3NaL1h9dWZHdnc3YkdkaVUiQFsx''@;'; put 'put ''SnVnc08yUnd3LipeXyZtdWZfJll5Ti9ITGJjJlVKU0l+VGNfWzc/XXEuRERvKyJ6TklWVDchKmVEKnp8KWY+WX1AM0V2KGY0N30hQE1eeEFLVnJQQS9MSTApMG5FaGlWa21iITsse0s5WC91TngufCFALDpEeTpFS1lvaS5rZmVJYkgmfXVXdFBLUzwucjIrZ35uR18meE9HbSlvTmhXLGR4ak1H''@;'; put 'put ''PD0vaVBsPDdFOlUmV1FHckBeSlJCQXNNZH5EUjc3RHVad2klR3A4aTtQZ0FtQnZRaXozS1dLUmVySTBhbmtsTkJ3PzJVRnp3W1pDLllsXkhROj8zezUvIX0sXjtZa3pXQ1ooOlpkdzVqWEREenhrYFB8RFl8dmE9bj8rLE9VVTFzcmpmUUFjMD5VbTxsQTZle2Zqdnc3amtDTVtFMWNTM2trSWxU''@;'; put 'put ''cHdPIX1rX11WbnZVWHhvNG1IMExHejokXSFSPjleIWVAaTBkbXFKVUx5dk5HVER+ejUyMGgxOG1sY1ZMdCFOWVduPHA9RlRCfEglRTp9LGdsWzA4eXNhenpCI2xzUHh0NlcqdmV6W3NhejVTU21eYnBNUS8peTAwZiVeVU1pRz9kVXtYYXQzTlMve1NhbmFYRjFgOTxLditRamBBfSIhe1Z5Pkkv''@;'; put 'put ''Njg0cDQ6V3YhIkpGfjF5K1NuQTZsPiI6V3JkdUxjalF8PDFjUCg8eURweDlMOEA+dl15emUuJSlWOzFRSl8sSHRlanlMQCxbZWpPeVF3QWJ5IXFSMy5IfkgsVTo8QnZOSX52VmB7eVBENzFWRV0hNUNSdH5sMVh1eiJOOXtoIjczaEdTKVBiX0dVc0l0QiNsUSlkKnwjM1ZXSXV0fXNaMUJLdGJm''@;'; put 'put ''IlEsV18+ajxYYml1JS5gZTN5fDUrYkp+PWBlRGl+RyxgOH5kJD58cmcyMj43ImxdZH5INmB+YTNnTHcjXkVOTlp1JWFDWDFEVztCfFdyVC5HN311MXwqTzlFZDw/OUhObUwqfkBKc1d7LFhEIklyX3NsY09NMmA1Nn1oSnw/Sl1CIkl+KCNmeCV4TCFkd3hgcE9CLiJjMnEmV1c8NExiPXp0X058''@;'; put 'put ''Pj08PHc8LllYQDRLM0dRKmlmTjcxQ0YlNCxiJHdlK09PT2dgKDFWbnAzJUl5IUVSREZ3dV5qbGdOPmh6QE1yPzVZZXxndmtJZDFoYXdhXUFyY1t1eE9DZyQmZSpealhfRkVhZVs8SUBxOlN1XiZZKXgpTVY2bVgycW1ZM3FHPSs6JGFnYylHU3skXkdVRWNZImRkdV9ddyZJaSVZYVVOW0xgQ3c9''@;'; put 'put ''U20iMU9IPipMYSo9ZD82aWR4NjY9dHp5eSt3M0ZkJk16dX5qSE1fYnYvcl5DUGpeT1UjS08pXzoxPFdIcihZNkFEdSVaYT9EZ1dLPl9iKl47RHJMRWhGcT0pMzE/Wk49b3hQZE8qJVQvI0JuYEhlL19DQXEhVn07fHUseVIsX1JPdGFbdTksYktSPXkhZXg3dUhva1AwQV92KilZSj9jUnRlKCtj''@;'; put 'put ''ajw8L25BJn5RaEcwIyVAeHNpUFY6I246I1E7SUMpaV4uMk4vW1g3WVNsczdnZX5UR2pSe1t1Wms6Lyprd09tT2djUSpCNUZxWkg2UzBQRy9JcyQ+eCRhL2l9SU9NKzVnK1JXXyhCUUJZQH5pXVtgX3UxIiRHXiFWQ1lOJlR7bjtzM3A+ZE4+bTkvdzZ6YFU6M2I/fSM4cGUjc1ZCNVBnIy8zLjx2''@;'; put 'put ''QC5ScyVwa0R5c2NvYjgsQyNqeUVtcG5ZRHxPQyQ0Zz51Xz13eXsjZU8pJCJ0OiRaZz4qXkVHSWdoWnpWSStpME1BQXwoLz9VY0NFaGp1YDhmK0BXOzwoOnpSUTZkInhaSFgiYSRlUWk4UktTJFBXeyNlY2ZiMUN7LEcvXkkkP3JHTlB0YTlFRWtkJWZ4L2FecE5LS11WO3Y8NU94OiE0d2NTYyNS''@;'; put 'put ''d3hgTnAkb1c5RUFIfVl4fHl0Sl50UEFdJHJ6MnYhT0BndVdQdD1MW3tsPC8vMVp8aUxRdi8sVFMjL0l1ZEpCaUFUey47I0RwWEEhMXlnPmJkRnYvNUZgT3UjfmAuT0wmVGMvb0okdlFNOEM6QSU3MjxOaj4sNDVGQjc/TE5oanlpX1M5TzF5flFMRT9TL3lUOTNwKUljUnAkQkdNVFpSeFVWclRN''@;'; put 'put ''ZHVZS1pwSj15dHxfYEJSSyJxfFg7ail4P2lFPUJRfUtNOjlOK0RbTjJfUF5sL1tVYCg6VywlPEl0MF1tcVM4UTxgcU1LLmFqOUNXTUhLPEleRiJvPF4xRGhIXVldalV9fVJ8YXU4MEhAeGlSbHl2QitfaExoalBsUjVbXm5OKTg5UjhJVmJUTl8mYktAKFkubl5TVH5lYG4welZ3VCNVYlQlJUk7''@;'; put 'put ''fCN7fD8iL3RxWCxfMVEwQTxoeFNMbUcoK18jQG82a3MseXhIU2AoNis1T0JXaENWWypuKy9KN2VoJnswbjN4WE1RMy54VmpFRk5qN2MlOWZ4bnw9XXVnWStPUkZoKyZ9JDldQjVITnN6eWJTOz9wbD09YXJmNigmSF9rVFskMFpGUj99bWpeOipNT11Ndkt3fGV5cjt5PFFIemZiSlVvOzVqUjd3''@;'; put 'put ''SUIwTXI8UUgsUSN1WiQ/N1lOSmxGdmVpfW0vW2sqMzlRbWVsJmpXYDY+fjJhKj83KXFfJUpGTFUsdDJzN2M/SCFdRmZUIyFbKCEpKUlGLyZhYU8uT1MiQmh1RnZuR01IYW5JYUFOXj5OW1BnVTA4dzpGZnt3eGIpaXl8P25UYkJHWnVqNys4VEF+Z3dleUw1P0VmTCV4OV4yPml4ImN+XmgzNX45''@;'; put 'put ''QzRgaEo5PlIwWTVERlo0KmJkZDlyS0taKChJXXY3MlRhfSFDN1g3TmYqPF5VUHQjZ0ImXm1QdiNHQ1JPfkdAQ1J1Xm5CIzxiRUZ8QWtJfUwrWXo2O2Q+UyR+Nk5odTxpXk9MVzM9Sk5QeD4uS184VCI7LzJ9SlkxKHV2T1ZOcWtAfDdeUlF8M0U2dEp7M1UoOz9HY3QwYzY+eD1lKTJXZUJEPWVX''@;'; put 'put ''aTY8WDZ9VmphMDdpO3IxKl5KentaZy4/d0siTnc8YUZjajNzbEsvTVc2WShTRH1rclRMLkxUcWp0X0dlWiglK0p0SVF8ZmhtK3xCRD9STF0zJCE0MShgVzYqU1I8V2dyR2QvJixLPEIwK3VdSDlkdCJNVkg3PmMmNElPQC89ZTxeY0ZNYnxdc3BHdyVjKVRRPUxnWj55P3ZpZHNsYFJsZGM8P0Ft''@;'; put 'put ''e2ElPTIkUlQpNmRhOXE2TUNdUj5iIVR1THRqcDQ2V1ZAKExIYm1DJX5QMVVKLi5vY3ozPFF2IXJiLHxjJX5jbDBUal5WZnVrTV1BNig8MipTeUIvTmFLZzw2e2YsVVU4VEN2LEIqWGp7d2JNRiw1YGtoblpQY1BER1kvPjE0P0ZadTB3czYsam5xb1tXO3I+RndadVowc0ImPFBIWEBIInghcUg1''@;'; put 'put ''VlpvN0RfIllKIUNIX2M4bngoaDRaTjg+Nn5CWSg6QilEKys1JTxvZTI+JiVCQU0pbE1SbW1XS1RUKkY+UzU5UXMqMVhNXXB4NkQ9WmZfZClsYytPa0VxQDZBWT54fiJ6UlA8I10oNjRGVkxvOmlnOjFyOVBCP2l+OXRoQG4/RiNVOVh8QSxARUVtUmBqYi5LMSFiSW81MXJta1AqZGVmPlA+Zk1N''@;'; put 'put ''b2t6QHsiWjZKLGI+W2ZMKXZ9UURHelpabmRYVCJWeD55WmBDTkp3ODYyc0VkQ3hpa3UqUnpAVGFxIT9Ie2YwPTQ7YiJBM3hLV3xpQk1nSWFuOkFQQT0vNkdlK1tYNnh2b14oZ2QqYmE3fEc5TnZiSmhwWkF2UChOVTthJUxvNE16ZCt1STx3e2FIJnJGPz8rSCt4bSteWHtFYnZzOHc5c2cxTDsx''@;'; put 'put ''KzdGVTZpMVlhSWMobjx9a1lkbSQ4an1MIXZiXWV7IzBUI0lhSlhCRmVGXnRdNDk1VXM2enAkdCU0SWl6XkNgaTxfR3VmJC48X056WDNCRXYuLnRCT2w5bWJLVjBhQSZrZmU2R2g3ME9ibld2I0dRT1I9NCt9MnxAV3BKfitAVGReRF9bWUxvL3ZDV3Q+ayFeY0VyN1E3KkJpQDo3WVVWIkV+eU1Z''@;'; put 'put ''dHl1fEVjTT0jJiFoRTZMZT05OHxQWmo7YWRmWE1xUDJ5ZnMsY3JWbng7L09QQEc1PEQ9MkNjfklnXyFWKXh0L3hEMihxYSo7UkMrWD4qbnhJfDVtdit0V0dwSkFBbXA7I2B1UlEuIVAraHNyLEZ4cUx7Ym1WJlsifEl3ZUhPSHxFVmo6fFJgaFQoQmFDdUIvTT8rc2R7ajxAWk57XiFBYiJbU2xp''@;'; put 'put ''VEBVKWNDXXlYPGpeOjdgNl86RXtQYFkhO0xeSndRK2xhakROPlpoLE9MamF0aXx8XjBmM1NXVV86dkp+Mkwlfmk3IitpODA8WD89blM3I0Qzbl9UTTdQOyR7VnElYmB6P10+X2pSLkFvdVtrdndHXm5yMHNXW09HS3ZFKiE/O25sbjp2Pyk0Py5uW1Q3clVRR19WQmp8a3JwPTp+VG4lVmBsK0Ru''@;'; put 'put ''cV9KfEVSOXJDYz0wIT0kZWhxayI2OH4/Sj0mbGhgU2FHSV05ey8kbD1FLD85UEVVSWh1PV14Xz1nfjR1O2p7S34qcz5FWGZlO0FCOkhRallmQGBtbjxnaF8sUzNhaF9RcEZ+MHZuSUZTRDdaMCV9MDJUKl56aDJuanFvPCwkU2BhRykhRChKdlFiSj5fdzRKSTpMelFEdEUqIkJBUnlIVmA1fV0+''@;'; put 'put ''TCpQNGVyZiU9OW9EVSUrLDtAZmBNVX4+YH4vKCY5LncjWWo0KWNeTDxHUT1WQEV4cyp9Rkt2KClwPkhodXB1clUzSmgwUW5YLDQ2VlNRNGEmJlc0eGttenVeLDQmLDhwXWdIaHd5LGksSUIjSTRjb2MhWC9zRV55NUl5IlpJMH5zPSleKm4uYDpsKUhnUiZKNmElaFh3R14sVWc+U0U6dmMqM2Uh''@;'; put 'put ''TSZFYXZJKnU/KV9rX1V+fXhQVzdBNm1GdWopbT8hbj0kTlZHLEldVT84X2J8fG1jdUFIRFJicVBGJCxJeyxUazkoMmlCIjgrKFs+bm55VlUxXTQvOlNwTF9vOGA3eF1tbjs9e3B0Mz56Qyh6VC86b19VdHBHQGRXO1R7SHNaKDg6dnMuWF5lIXI6Qm90JV1wX1ZxNy53ODldRnJSK204Njg0OXtO''@;'; put 'put ''MTVXPmNzVWtqMWpbOS5hR1hmdl9WVzM7M31ZfG45MmVITHhGT21pZTwhNklgYT8xLkZ3Q3shajE4JTdqUVA+bkopJjh6IyV6X1BdODdqUVAmTDYiRUh6SFFqYWxRUG1mTkElZUM4cmA7YSJhcz5hMzRpdTxtNmFSaXBNbE9XJEJgXyNNRW1TMj1KVk5yQjxoLklBKTdqTVAmIiJXQVo/OypoSjho''@;'; put 'put ''ZXt0ezVpYU5UWkE3PGFlIXN1LD5OfT1bN0s9dCQ7PF4la2ppbUtiQ2F+bUIiO1UldSh5UER8aEFTcllASSF5P2EyaS5GTFJhfGIxaCZSO0c5QG4zInBJdHRJT2lTI0JoNEBQeVdWQjxoS0NMdDIhMjBMT25rcFREa0x9OGF3YEJiJlJxakZiTjJMVGp7b2pDNHFObmtHLjAyWWRdYjJ1SC53KGhM''@;'; put 'put ''LEo8KUp0eylTQWhndG4pTFlJfiw9altzI103ZDhpdkIlU01iYWpnUVRmRDheaFVFdGxXY2tKZCxFaWZFXnJ1OGMqfn4xMkUhZkc2NjFFK1lLRSZEVzxeQlg2ImxaO0c2OkNCQmVtfj43ITljUGF5LEUzMEBQYn1jTnZmNGUwcWNuXXw6LDM4aVdPeFZCKUsyclB+bH5EKkRKZUk4QmVJUHspa1lF''@;'; put 'put ''RE1NWDwmYXFsP2g6ZilEW2JRYTdPeGIkM0lqVkFbYl10cmRgImMlbTQ4c3xkczNzcDY4a3ZbOiViV1Nkc0tnO2J8fGMmKWg/flJ4Nn1BTSEqT0wzX0R3MElHYmcpTE1vMjZhSTQ0ZEpRcn1RTnt0b1YuVT9vVEp6OGopJUt9PmV2OEl0MmN8OFh9R1dydW5+fjd+c0YhfTw0andOV1I/N0VQYVdT''@;'; put 'put ''TF1uTEBbO2hFY25VbHxvbnpeWkp+cVhiSz5lKSg7V0dSUyFYdH4yUWZueF5oOmZ+Wz97P2g9IVRfflJQZm50Xn5UXj9MR31MSEJPb2l1d0x0KmkjfXd+dkIpZks8NEJNVSlpI2BZbiNTeX15JXs1VFE8Q3s+emZ+fTo5VCV7bndAXSJURDcqQilzNEJVTG4wekd+czI/b0ZAfjQxdSh+KUIiWT1e''@;'; put 'put ''fUV4Mz5AbjFyPDBbSy9bJUM8fEhJI35CInR7fG85WGNqNFBOZ1NvLz9eRnEmKDRSRjt6Llc9JkdRaHE0a2t0ODlXeF9yVFcrJVJVM1RbNiswVzJzJXYhO0kpZkhRMlYveHxkczd5K1FIflU4Y3ptTEtVTippTyZJOHgmKmEmISRXRTE4MmNmUW8kbl5Hd3Ildn1MaCU6WnZGUmRHRHFTd2EvNDRS''@;'; put 'put ''JWpDJCw2SlBOb300QWM8NkQ8QVk7KFBOZzFpJEZIPER6UCVbTjV7ZXM5bj9VMyU7JWchVCR4U09bKEBnIVJBSltFJlA/T1g6Lk5mQ29LIzA7Mj4xbW5vcTtHYkRHTnZOeGk8UntqV1EpdkhkbC5yITFqI3YsJUBtYklyQFJoNHd7amleTU1+OShlUl5wbFd7fS9hdFAjdExjTXw8STN3IWp0XU87''@;'; put 'put ''dTMlYHlWKTRJITZrQEsrMDM9MDVCVThQYXhIQ21UYFhtPlJHaj5jcTcsRVd+N2ZnbURGJGE0OjpITH45NjhDNSljTDhPNlRfL2V4K3grOjx4NTRiWk9UMUBgN0FyL0JSVDo9RklMcnIpUSxVfkpnajVWOTwyJWkkeEVpZWRNbVE2SmwyJXFeZ0tJanhRbTxZMGpWdUJHRzVnY2pbdld6NDM4Vi5e''@;'; put 'put ''eTk1SU0lSm5ZSzc9XlQmVl1WS0x4T0tPJSUyOiMwJlI6YHVAOHNqR1ppP10ma2J6SStFIUFsPjlRWX5jKF0rK3BzXl5aUXxOQ2orQGFIK3lpVzRnWDNSKkZqQjoyYG84bUhWMH5AOnFrNF0hIlo4JmxNKmxYSj83Z3xdUi5IXmJvXXs3N1p6Wns1KFI0bjV3K15QTjllKFohc2l4NHdAUWk9d3h0''@;'; put 'put ''UUgufmBBUG1NOmhEdTw8flJfJVApd2wiLz15ZV9WZDp1ST9dPXo+T2FxSlJROHx7STV3NShmbUImfCVYSElZeFp6QHxMRDg8eH1eOV5JfVpPI01vSDR6Oz9AR0oldEsrUGV4UCU+Yzk0YyErbV9FKiUmNyVtMWFNJWcrNzF1Q0hUWz1lYV0wWFhoJlkwR01WSHhKVnwyMj8pQjJoczlwNz4/PXlT''@;'; put 'put ''NTtpVGR1d2B2dT0/LEpSR2wuQHIoKG0kM29MYmZGRjZBVlUhOGQwcWIlcHJ1Zj8kQntaQCNSITNoNk5bNG1mTl5XXnFCMFI7Q0tAT2leXnBHU2Z5UUF0OWNYY1JbVVoxUFRJZGVQZk09VG4qajZvUnd2S09YTkpVZXplbz5XY0tYPSspKXVNP21AOXN1V2Q3YjlOKWx0QEl0UEchJlp1b15rTiIi''@;'; put 'put ''YzNMeyk8Ikx6RCRjfSxOK004KmhDJGdlQipSfks2enVSeXpFcClFLnpLK2RFNFVOPSJvWm1DVlF+WDJ4cHtSN0tRTUJRIyFBeHd6OC5ebTRCYGtBe1Y6XjVJa3BHL1ZwOF5hWmklTVNHKHszPSY3ZTlRJmxiP2NlYWgqUl5tRkVCQjgySGVbJDZwaU9IN3tsamlNYEg0UXxmMWQwIX5sOixPOXw2''@;'; put 'put ''dTBsY2wyc00xTGtATzNlPkUrKipPaSxPe3A7XkcpJHQ8dk85UVspZmEiRzZLb00pSUJpKWU+TW0rNEchMlh1O0VuP1sxOkE0TzlKW0EpKi9CNkJgezQ8RjM1cEssK3V4QylzYXlgKTgsUmlEdmlRYD1+YUFxWkFwY3B9UTJEQ3VdVWhqYEQrRVgmaXJwWjh+MTcuT3lNMyZJT0NfYzl5NTh5Migo''@;'; put 'put ''OkVeTCwsaUNZNllyKWZdMG8yZUBiYXo4MipJQGNLMGpGNjg8TDdVZiMkWi9Yal06Rmlde1heO0RtalgwcCs2JCJwdHVDfU8sMmt3PmhKUCRYU29HQDVFXVhMTnJyWUJGQHFLYHlXU28vX1JQLHZTMTdfUTFIWDZyK0doT0p7V3haZUJXYlJ4Vk5BbjJ7cHMvaDh+KGY8b3MpRUQpTD5MQ2plQH45''@;'; put 'put ''MjVBeGU6N0hmSkxqQC9JI3lAJTw5SDxPb3plal1HPUV2IX5nIVJbQW9lckNqfjxZNUZqdis6VVl4YCJMLyNzPSJHRilnIWxPR0pYaHN3IztbUVQuWkhqN1l9LnJfezE4cUlLc1clTT10VWI/Nk1CLlkjZFY9enJabiJgWjYrKzViK20uM3VKQnEwKStnRVFWaSRHPFQwNyRMTm82cEp0YC5rTEQi''@;'; put 'put ''IjF5ODJPNyo8PF94TGxsI0NnWntoSG8wb0Jzeks9eWFZU147UEdoeTxUMDZnZFJrMD5jTy8oRF1Ze0ZVbUphVT57KUhbNCZbdWJlRVBSU1Z5V1NVLzxrKl9uSjNnIm9CbndeTSkrLHdIaj9MTmZwSyp6eW9tJmZrQnpjP0Yqe2l+O1MoIiU0S1pyS3NQRiQ+L1NlMEtSMilGd21bJnVkQHQ+Vyo9''@;'; put 'put ''Lko9WnNDV3owXiEhfisiSm96OVZKblhMTERPKkdAN2JaRUJtX1Mze0VwMVFMPmBZRkwicDRXdCVWKy5UUDVQcTJ8R3lOPSYrN0hyNjdOd0RLVX5tPTFrdllZdkhtWS83VXw1WTBadFRablBOJk16OmRvdn0oTnZYNTJ7Kioxc1pGUEpoWVorXkkudldbJT9tJEosXUdLcDtKfT5KWVlkK3FNfG1w''@;'; put 'put ''RVcpXWNUZTI+bUxJMl5wKjZ+UGlsMVU5PyRiQkZLdHAvREpKVXl6ajB2XmsmSVovLFFqT2t8M3V4dGo5WlBOdU1RMklLQm4iRVNFPmciNFp7QUs9IWZWYyFWPDp8YDAzIT1sZG9ZY1VhI3JHUy9ePGYmSzZae05MJDVJMW5Sa2Q9PGQ0S2Jvc3pqbFpKIWN9bVN6M3Y/WlF9ezo7Z2d0ZDVVT1Br''@;'; put 'put ''Pjp4U0FmZU98S2JoS1hFemBqN2M2b0klQD5ZOUZkOykkTCxLZGh8M1l6TnFxOFtbfX0pS0l3NyY5UmVQU0o4eCMjLkojN2wsUT85UVpuXU0yPDN1Zmt2emRqeGlCcjhRL15nMjNPYmgpWDBGcyU2e2VoVj1FWXo1U0F8e21ZSFBqenNeInh2NkJKNTgoZHxqbS9sazJ1ZGg+OlFwO2J5Jk15YzZP''@;'; put 'put ''YyFDWSE0WjdgPDFqNyM1Wj0xV2ptZlh7PXp2QTE1KHU1OnpfRUxtTU1XUilKeF9GclZVY2h0dT5nJG51YzQ9IzpjJTtGaWwvNUJYRHlyUjJFa2lXekFfdEZATF1jczdNMWpBYEh4PHtgL1g9UTVvYmAycG52bllDPlhqaDpyLmt3QnBmQkYvPmN0JT9rZWtLUUxtPU5hKUFDPmFmXy8wejMmQUo7''@;'; put 'put ''VCR8fVM9RHpkPGZJfCkuelBUUypOTEw/PkV8ajByQ2Q9ajUzSFhhbUMsVXlmISleUXh+aTBXRXd3aXV9KUU8M3hdV187T1F1ay9sLClwUzN9d11xT0pUazpHYWJ4N2okQURFI05yRn5pTV88JEltSHlpQkdpNE11QVQ6Mj9tM0lqd1hbeD9iTFtJX0o8MjZWb3taRVQzUXNRWWk3dU1xfWlNVyE9''@;'; put 'put ''YE9vOSNXNzhsYip2dlRrZSZvdChgZDxjeGMiTE5tMkpTJmNPT0xLNWQvfEoqT2ZfOENuSTBfKmlNUkpSXztLPGxWWmZfVTJLRiRQVEIscDVuIWtxRTBzKGMlPDYyXUpMamx5JFpRNH12TnE0eEdtfmJxa01nfiY1WGc5MHMiblpKMzd9Qz49fXpaTGB0PSl1VFNjZyRuWlBCdHEjeDl0Tn5WeTdE''@;'; put 'put ''OndxTlskTit1TjdYSXtWeUdCMkg7VD1sJmJTKGEpWTc8cGt3S052QHJdb0tXaW9maD1eVXY5UiQ+KDAsaDMkTD1jeTg8cDxJRnRAJGBnNzZqQXxtYHdlbjpIZjVeYXB6bHIzMU0ue3Y0c0lgQ0ZMdFBqKmhSIXVOaUNaNDJ9bGtRUkBwLmVHMXtYdU1wPEQoLEl6d0RaMUhDJCw2LFdAUktuN3M6''@;'; put 'put ''RzJWTURrX1V5VFE2K2JGSSheazZhbE8qTkwjfllZeCJtVENjfnFhNm1HJSYmazNzUHJfSntgeXZYLlJtRGk+Pn0odEFLcj0+TD97cilXdE46KkwsOE1pIS8mWFosJkp2b3wqKTJROyFKaCo6SlZufj86JD92U2teUWt9VkJwfVdALG5gdHp1OiVndnNzL3RUfHpNIUgrUT9uNWRvOk9dIXk5Qjg+''@;'; put 'put ''JmRHUm5SP09xazB4c0Uqd11zUG9xTmFGMmh9JUVZPiF1V318NlptaVFHQCRGMFFYZ3Q2WVt0UXx9YUY0R3h3RyppYk44TT50ZV9FOyx2ZkkpayQmPUIkNmBYUXwjVkA+Ujd+WkskXU01dzRST347cFQ3MixXWHM8O1J7Vz5YW3NRPTxVRn15bFJnPCI0b3YmZmcrRTVaTDluakYybEYhSSJFNz4v''@;'; put 'put ''cjQ3OTxOYzVKTUhsYV88UFFVUCRGWFFZPCxVKE1rZmI7Zmc+PFdxVVE/T0VVd2FaQ3c7bi45b1FiVE06RyVvdWwiRSV+O21XJDpANkt5TEdEZVoudyZ8YyU+d044UXd3UUZ8PldGNSJgM28vWT9vN0h6UWIxW2wkez5AVVtIOW9mUHZFUH4rIkFdSyxjbi50dy4jMVJtKUJaUnclWHBCNz47RGFT''@;'; put 'put ''Inp+Vjh5Nmp9OXVyU3s3Z1FEWTxacXN6WFBZUEBROlM4VHVyelg5TEd3OVJkN256dipPezdnd09LT2QjWTJ8UE8pfFI7dmRuPCtnRXxvbyJbMVVgMmU3eDhUU2Z7SWFZQmQyIVNmWD5LZTBzVT1QSWFNLGYmV3YxJkwxK2x+PF44U11CIiIzTWZFKl9CQV1hbi4qQEhkSmldaih6PjVZTF58Jj4l''@;'; put 'put ''VXJHa0h+STMrWnhVQ1hEdC9CcU10UmhJWT1DMSxSSiF5LE4wPm92NiVVZEpZISFkMCx5W0M/KEJxMDVUTmB8YXVXU3o0dHZrWWZfQlgqeGBnWGk5UlEhNjprTFB7QWhEPzV1UHRUWGs6UlojSSF7QnE5TVdKUmAwU0o7cXlEU3FgQnFpampYOllfdS87dWF2MVNGYihNOV1AbiloTGNqSyl5LnMm''@;'; put 'put ''Rn5YMShYMk0/JGdPPHhJdW9VeyRCcXl2STc9dCVYLyUrNXN8Plc2fSllN1BBNWtSOVgqTGdjJUwwNkRfNCF3bVUhXTk3VHZvfSttOntiIkkrdHs0cU8lalpPJDBLN10zYWU/VCkzV0c+aXtkTWdVRDFyfGh3VVoxYjolKmBiRWIuYzY+Izg2U25vdWIpeSZON3B4TD10XTNERH4oRDRfRDUpQ04v''@;'; put 'put ''VyhGZHN1ei8sM0RPYzdQQUZueDpTdDZdM0NHIVIjRyRpa2ZpRU4vJjxpXyFSVHl9ZzFFb2pHSnJ6P19pX0FyNUFUcXlBMisvLEZSKls/c1lgSk1LeDZnKWE+NC51KVFzKyxWblcvU1RxfjRnVVBYU1d1WWFfXVZrdTFTITU9UjwoRlJibFh8UGFsXi44Py93MHpDSTVMLCk/bGIpUClfTVBwbHpn''@;'; put 'put ''Xy9VekkiTChOVXBIVlM/Lm1ANkF3PjVnUV5mMF1GUWNeTGlkK3B3TUtRWnQ4VDdlXmJVKj10JCskYCVKciFRaiU2dXk5MVBNOj5RQFZdWkwxdGg9Z2RWbjMhS1Z9MDdDbDZPOGd7ZjBAIXZDUlglbD8/TzUuL1JXI30xajw/ajM/SiV5UithYzY8bl1mMFpTL3RfVSRjLzNYKGRYZ2QlNmMkYVBK''@;'; put 'put ''NUt9IV0qMGI2YyFJJjViek0oRFtNazQoQ2tseTh6Q2B5aG4qT21mNGh4WFV8ZzNndyU2Nn0qWSFUfj5tbERPMHRHdDI7N1MpR2wxbExTKGZPZ3xYS30/bUQ1RWg2TSpiblldezt3azo8ZGRBP0VwNDZxTnwoSl19UVojNmckPjFgZ2Rpbml3a19mVVRId2Q7NFAodzUpcjNRfWx1VVV6TExfO1Mw''@;'; put 'put ''WnxRM1p3P2chaGNgOjNRRXkzY2x7XTpzO21+Pml2YCp7emN8Zz9iKkExZnZzSldje11wTX1sbH4weSIjI3N7KnQyPGYxaF1qJX1pUlEoc3VsfEBleSYlSGhLYmgwQV1lX08kfm9Jb2gpLzw/cVRkdmksYz9QVS9HKFV1X1BVWHhYLlZKcFAoc1t6cXwxNCxLN2NeUVo1bmc0WSNrcD0sQmIsOX05''@;'; put 'put ''R1RGfjxlKVZMX0NibiZ1ZXhCUDR+cURXRz5pTkpqXy5FOVhbfmIyeFB9flZgUEJbfGg2Iks0LiFUPVN+cyk3YVB4M0cldTRrZEAvPmAvR3hMX3xhQl87L2Aufjo5bXxqfTo5d1s/WT05aXwwYDo5c1s3dDV+M29XVzV9a2EpckIpIm5vaHFuLDtBXl82P1pkc3lKZWt9bGklbTRdfnpJYHRpLFh4''@;'; put 'put ''aEsvTi85Kmx7XXJ0SlJPNlAoSyM8X2g4Vi9oOD1CMUw0fW0uUCpSOn5oYm51Sj8mRjckdUhJYWN7XT98fl9eOyRgTT06OTJ2OURjc2RxOl9xWzhfOX02X15fKkBzLmV8VGVgXzxrd0ExclswPGskNWNdeTVVLnFxd0F9XXt3UWs2P1hVKD5YNl4sUjA9VndFdChnYGVDXzgpLF5FJHtjcD5kdjM2''@;'; put 'put ''e2tSRCYkYT87RHMjMm0vaXR9Jjl7OzgpNVFAMVJiMDpHTnxtM1JreHIhRnFDa342ang6WShlUyliSX1rOyFvdS9xakVucyImLDttc08+O319WHA3RFZuLnx9aHlrSjN1aWNdWEYhUiZ0V0x8Xj8iZy45P3VHfHNPSWAhT3woMElJeXJrUlE6SSVjNCJ+cTQkdHAxQ2F6PEszIkRPU19fcjwufWRk''@;'; put 'put ''SEY3bzlrJVR+U2woPn1hKDo5ZHF8XVlPUSheaSlyc1RzcF59WW19XS58TTteO0RTa19sU2AqP1k0aEgudG1WKHwxdDJmKEo/V2JWKCtJKHE3fTN4TCpHNz0pdmQwWSYjQFFjX1pBK1YsVSt6Ol8oMks6fUdQfHhCb2gzd2RgSCxFP0xrNkkoVVUmJkU0UXdENGgrLE1+VShmMSklbnNkUU1kWnxD''@;'; put 'put ''SmA/KWw6OShAQCozaGksdG17ZDI+Iy9kOzV9aDheOy9SW2N9XTd8MyJDdUkxUzE/O10ibls1WmRzdDZ6PyFYNj1vM21ddUIxaD8vJHI9YlI5VyplKVR3VGt9WEV+JTBkT2p8OU9WbGJgS1hINiReeFUxaHhEMUY8Mk90MWU8b010fn5tTnw0Ij47RjFPZnNnd28oWD94Rz87T0BvMX59JF0+fiks''@;'; put 'put ''PDJgX3F6RVZaLzVTKXwxQEw0LykkOSJ8YG1OZHd8cnswNUMqfjAwamg2OGBqRC5pbm5HOzo5In10e2FbMSw1UyU/O0xwOiU9dlFncjtrQyZKKjtAaHMzWmw6Yj9fPzFoSj5GJFcoYUBaU01+Sjo6UTk0fWxAXi9COzw1fnRuPX5hRGVRSFMvfHorKGhFXjswaShJKHpyYn1PP3J+eDwuUWhNfDRW''@;'; put 'put ''P0N2fHxuZUtiYylvKmxKc0ptc0RPIiM7fWhifV0vJis+aGkkSVdybHNjKEE9I2gsUXVfUVJfRyJmbHN8JldyZShjeyFiPF1afjNaNk1ldl1DRykoKUxEbC8kciFOUmpLMV50RnUhaHtdaGY9XVlsXSpYSFB8Pkg/JlZ6KSVrc1gmWH1kKHw9TEFjfjxTJjl+e2Q6a0R9XSN5bmh4KzRWZmYxaHZB''@;'; put 'put ''ZEg1dkdIXjtdN2h+bGQhX3JRS0hubzxnLkdmPXd2eCQjP1hvKz49MnR9VTE5QEpjT2dIYEdiaHRub0FUc3tsPlcuZmY0YEdiIihVJWxKImZpU09xbSMmOTQoaEtMYjI+YEkocmVOenpFeiI+XWZdSVdyMD90XkBsJlpkc3UqX19VcC83ZmMxKTojOmFJYzVRR3AlNyIoSyM1SndkfH5SbU57aHN4''@;'; put 'put ''bnIoNVtjL15EUCgidClyaSVzSmtzVUwiIyx9KFZ8bHh8SHFVQTwyJXMmOUZAQTE8OURAQCpYTy5RLGRAJl1FZ3wvMDkqL0tQKDt4YChsIU5SfiNINzZ9a2FQKlgkJV5rZWo/MCxsZSpMckNjXzlJe0A3PSFUcHVjOVQ1JiVLZjNWckMvOVtNXnhISyRMeks/VlVZZz99dDpHKSVpc2FKIVQ4KGI4''@;'; put 'put ''JGNjUSo+T1NNLzNIb0c0PyFUK1p0eUB6TS9MVEZmNjFfIlFkPTA/O1gjPGxKdmcsblFkPkoyblI0fVIsaF4lfThYSHYrYkB6SWRrTyU8KHYuWzEpUjZZfTZ3USpBMTJoJCooRVMoVHhAUWtfeE9qR0E9M0tmSTtKYXgmOXVYZnN6QDhjdk59Uyh9bFAjQkpDe1N+I2UkNlkpfjgodiFRfnowNX5i''@;'; put 'put ''VWRTInN8V002fH5oYlc0PlsrMWQ/RGM4SSs3K35LcDh9YH4sWT9hLn4/Ol1+RXJidHprND5dWHlCJX1TSEI9Nyx0V30sXil9OVFQQiJTOHN+Kyg4Z00sPX4zVy9gcit6azcrXVgzQEpWInM1RnM3Pn47U3t+T3JlPH19TztCMzR+JkQ7fko2cVsqMSF9YUhKIWNzbWpfXyVjXjs7XyMpXzs6X1Ux''@;'; put 'put ''LzkwPy9LMmhFKiFgQHs7OGpuZHM5dXR8UnJLdSspV3dpTCo4KTU9UCpCUypiTkRQe0ptPmI7NSpjbkZQW0F0K0E8UT9WUHw+JihBOV4qaENoJFh9ZnNtRkF1ImY0TnJwI31NS3xsa19yJF87I18hXlo0dHwpbFBMW00mOXNwIX1hYDo7KXhQV0pLVi9McyF+KkRDYExrfX55K0N+Q0lbWFRdUnlB''@;'; put 'put ''dHBGTylufXVJWWwsRyw8fmVkc3ZrKXJ3dEoveXBvMXI/OTwuKV9hOFh3MUA0ej86dmF8fkA1QzNMNkNwfWAwOXMiOyE+bEI4JEF7VnVWfnpVYHNRI1ZlM358eiY0eEt5e29sWldJW15FRHxvbC9+Ik99c2IxcGlZYDspX31BYF03VDRzYVQpfX1oQVRXPG95RnJbRVJafDRqbU4/KCZ8W2pQMlAo''@;'; put 'put ''OjJsfFA1MmgiUVVBNXwpSndzdVlMQ0Y+WTUodkZSIV8pVnh3aU5MUntpcUFPcVppTlAueiNLTDtQKDpSJndkfmZpTkVROWJSTTIxKGNaJEJROVBSYkI1azZ9NlVkQj50MWU/QyRTaFpmWlQ2bSI0UFc2WnxzelhVW3t0MmwmMj5DRyIyMk5ibk5mYEtSaDVse0hdZWt4RilhIltVNFd4XzEmY3du''@;'; put 'put ''Q11zInBWdl1QYm5rT2l+XUlHLihbNUh2RW0+OSg0YDl4fkM/aV1+YEc2OCJARThRdGJNUzE8TE9FM1loKHBkPnRiTUl6cUtWWj9CNSlyQVB8TEh4MlN0bDlHT2psMj5rdGx8dSxdO3tAOX03WksqLmRlfis3dF9uTXF4OiN1an5HRD8/WSh4Ym02fTNaUip4OlYhaHc/YWRkMDFBdDxbZH48aHxm''@;'; put 'put ''UjMzcCFsd3J+T2NzYWoxP1NYVXxkJF0qLFhbMWQ/JThmUi5RR0k+Vkkwe34jU2RzYTFyfEBENj5sfTQxbmguUVUhJjk9WWFsKj58SGtJYmMhc0s9SWIsPkpxbHh7O2EoWDF3ZjI+WkdCbl5fZDBldmw+JGJgX3s1di9ZaWAzfVRnfG8zaGMlcixOe05qJTVgMlUvXylqZXNYe1NqVEx6L35fU05t''@;'; put 'put ''JnF8U2plc08kOWlRRWhENmZfdllIOl9AcmV2OzhQUFhISC4+JX1HR2JHKS9ATipCUyFFW3FYVyUqdm9YSkMwd0dxSjFlPmNmaHRkI3VCNi5VISpKSyhOLGFhK2dEalVmZVV3OT98d2N8K1pgdGowQ208UWB3dV95eiV4MywvdC81MHdoNnQla0dPKllkal5eTzBkOF89eTpJJWFmeCs3WWMldSp1''@;'; put 'put ''blgzRDBOfj5+S0NkVS5YfFdaMzVPRDE/PFpgQyUuIj4iPlpLeGNjZ3hvXzt4XytqZHNaentUSnpRNF1jPT9TXjVQVU43NWcpOmZdUW4xOXw3aj4/PStfXy84JWhGVjVjN1R4RWB3PiYwWWkpMmJuUk0yPzFyfEZDKVUpUFZfOH1yakpQI3N1RVRUUFdZfms5KyV1R24uMXdyPFMsJnV2QFRGcmtg''@;'; put 'put ''MzFNLFVRWjxAWHxhOTs/K3w4fVs1NEU0fHF8LDw2Y2BsaWJYLm1uQDlIRGZzRHhMe3NCO0VndX4+biRYeFguSWhoNkppLzZiT2oreCUwPHVvdmxudl5nN1NTYiRpNDB3ZmJWMUhpPTg6XWwhPFF3WzIkLmw9REg+JFBKSVIyayt3a1VUODFaODhSOzJkP1JUOC5tO2YoRmc7JUl+JDIkSVhZaCsu''@;'; put 'put ''I0J9OSJJejliYiM1cl5nOG80bl5wdS8qbUpxO1VjQVlgU1thcyhMRjB8OWlSUmlNR2hCY0FLKmpwRCpXaTZ2WnFUZFNjbHJFPHBxa0lZUHdBUkMyd3BrTEZqVmhnclVUU1AiJE9JJVMxMTtJNGtBfUFON2VeT2pOR15XNShwVkVKKlVyaSN5M0M9SXVSYzFoInw8Ti85antuTS85YD5XVDFocF1u''@;'; put 'put ''UT5HVjUoVWEoP2AvSzFoOV1HKEgvc0F+OmNzUnoiX1EqOH1oNWx3YnsrRGhuXnF0e0l+OWAxdW9+JWJoNmd9KDJlZ1JjTl1vMVR7dn4/Z2xQZnNLfjlhZnNDW2whO3FIU217dm9XNHskSC5DfXdqU1djMXg6bj8renVzdEhHL341O2NQYDVPWFc7RE4yImB9dCh9Zlh6RiowTjJ9YCs3NH13VVM0''@;'; put 'put ''X1dOMj59a3RnVzMwRzdXe0BaIz5ydE4yO31VdlJXXz11aiw+K3p9fiNSWVM0fGhhNH06bWZnVSxEayRzSWwsel4+KkchSkdiPyhOU19Ycn4oX2p3YE5+Iy44WCU6SHdrM3glfXgxPy47NE9XeCt0fFJyTS9qXiJCWDQlNGFDYjNQInR6N25rTzBEYypFVVZAbC87YXJPfV80UXZEelBHVS5NTEg4''@;'; put 'put ''WTo3VEZtQXFpQUpbLiZOeExkbFhYJFdISGM3Zkg6dSZrOCU+RkB0RVJXYjt3ay44dFlJOUooKDA6ZnI0QFd0LyV3IT57NHRzNmRGWjhXR2NeN1tldFVaZl9+IURQfTYxRXtxRENbdlFHIkA1Yjx1ZGY0RUdYR3BrITQqOVokdDJCck9nNVt3TjpVSWVJJEtbVSI4RE1kMC5EYD1aITV0L2t1X15f''@;'; put 'put ''W0E5KmZAXURwYTk0LHEoZDBEfis/PyNWb2YsSFFOPy8zNjJrdVFacV8oSy9Rb3lzUGUpN2J0Ijl1RVoyfksyKFZ4VUFRPiVhbXovXiUkW3p0OzA0dWJRZ1Q/W3h8bUgiJksqK1grel50WXEye1slZWQqYHhpdC42QkYzPHx4Wjl9Unw2YlhBcndkZmg1eiI2IkJQUUB+IjNjWlt0a2JOX1kvWzJF''@;'; put 'put ''SE9oPkcwR2Y+fUNwaDM+JGg8QW1UT0sueEF4OlhwVDB8ajxdYURoaWwmIiQyZFBoMGosPlBLZG9vVVVifk0kJTkoQzp+YTdeel9vcnNGUWYwRj9zPTgoWksxczFIJnkjanxPI3FUSDZnSW87YGdyLiZ5NEd0L1toUXUlUllYV3FmcXd5cUc4OzZLOC9zWnd1ZV5NITk5UWx4XSQlNmBeI2Y1JGJk''@;'; put 'put ''OiZ7bHh3Km5iMXtkfk90V3k/W20lKk5dYyRQKXk2MClzbzZ1LGhheyQ7VWQkbytnTWYjX0V7OHVeQUZ7ZiNNfSRoUHZeN1BRcGMkRiEkQTwqbVFbYnpTPk5gUC5pSi5CcV5tNEQ6eyN8ZFgublRjUTNKLi9gLDlGfldvL0ppYlB+JSEraTpZezRtel1RM3R5TEV6JClaViQ/NElfUSxEPjVmWDlF''@;'; put 'put ''QnVYU3o7KCpddmMxWkIzRjlfSDU0Nj5HV1l2LDZfaXRmZTtoOD80d3tVcTMwRWs0dlZueTsqbk1KcW81T2omeS5LX15sPjs5cTwmbUJmeSVKPVcqZk9ZfFo6ZHpobnhkT0tya0ZoM3AzX1BEWVVfMElpU117NjNvZzVyeUEzWHxWNyhdekxLS0xQc3N6LF9MX3lLaV8obXY9Uzs8a0spTD5hdCRU''@;'; put 'put ''LmAiZ0JVeUh5W3p9fFM/cH5rXXxCakE8V2k3PElnN3VuczI8cl0oTS5eOj5Ncko4Xzx2eDdfNlFpRUUjNXEiKWpYIXVTR00yRjB4RzVfYU0jTjNKQzEhQyEoU3hWLkFYc1FwP24reFFzbzlhbl8sOFl5X2d5ezlDTUtCVUl7dTU9Ikk/fUNNQnQpKyxye35fODwiU3lDbG5FUFZJfGR2dCptZjpK''@;'; put 'put ''SjcqfmBQeUMlRWF8QlMvVlAoeWVZJXZ8RTR2WWphOWwsdXFVcEpTLmtJeGE6c0g5Qyp0VVF0b1RGTjNHWCt2LzJnTC4rNm5bbyxvWFR6JF8/Xm1mbGBDLj1teDJoSDxvJVF+MW9OKmNlJV0qL01wMVo5VHVXVzYpe3A4S1V3PHdNZFs7cisqTDVJJDMqRng9Vz1OKlYsPV1mIjo8WWM0L2k4RURY''@;'; put 'put ''SFo6bkRNdCU8fT1GXSk3XkQ0Vkc/MmxgNFlAYGA/S016WkcwNTpORENaJUQ5OSlVSltdTiF9N0YuL1o/MCpma296cjRDUkkrenVUIWZPPjRiKzAzS1RATCFAWkhfZiFPelBiMU1NXkFjRiY6UUtsfiM1fFc8aExtLFtNeXchcDcyNHBublEmVXhHN0NoWThmMm12I2RwdEJFMU5aU0JDLkx5SlI0''@;'; put 'put ''VWtANUw4P3Q1JTt9KGx7cDBdK1R0cHs8TEFYIWM1WzRMU2NCSkAvfnlFRCl0T2tQNmcvemA+NUxCcUJ7RXNPWTA8QEYzfEgwdntkcFIlcFo9SCpfU1osTnREVlk6eiJ3XTIpbGwkXys0UW10dWxKN1QjKlA8bW5JdT9WcXJZbGgqN2Z2TC9hNkZvKHsrJnsvLzNhPmIyRm5IYD0xQFdjYmBfdzx1''@;'; put 'put ''ckZVZkwsQXp0ZVE+OE5fRDxwIjdgTjQsZUFNZWU7fGAycltGWGxzJWJgTHRWcmZYc3lwNkZvPUJyMyIqcF52Jj9jT0U3RWliVE1EX30lanBpLl57L2crN3B3aF49UDAwRyxOanMpRmYyIWtKW1AlJDlNe3Y/L0hmeXk8YSFNbnV8WGYrPTEpW3VqMlo6IWpoKVomZ3tzJlFMREV0YHZMT05Pfi9k''@;'; put 'put ''KWVodCNzaE4zL2FGNnt2Vyl9UUdLfW1SckUwO2gvJEdveWg0M0w7bWJbUjFjYDF+YjNUXXpMOjVaS3VZJX5ibFZwKnpaP01EYkk8TFcwPG0wRixHelcyP3NwSCV2Uj4ocTI8dS9adntUd1JhUzA1JFVNJkF6IjBtdS5jQHI1QH1QczNSX0JFJm5wXW1pWzdjJCtyeVpzWDJ3aWk7fEdTVHNyRnwy''@;'; put 'put ''OT1AalJbWmNVNjwxfkYvQUIzM2I+YyQ0T1F3L3RPcT1gdnsjLjI5PlBheFdlV1d4MWY6MTc0UjpHeFZ0U3pYeyN0NSgwKGNCODUwQyJ5OEU/JXIlaXQpeWIiVENJY240JXBJfnp6UnFBIT99cyxfKSl6b2UofU9MPiwke15qV3dMdT5ZanU8WFV5WjR8IzNbXU8mfG95YkI+OCRhOTc0JV5aYER2''@;'; put 'put ''PHJwMmZJV04iaVNfazZWY2M1NjBhNEtoSGowNz8rRiVTWSJ4TDgzPiNpKDhFamRpUS5rMXIlTW4/a1drS0pkTiomL0csMVdgOlc2M3xlMUt7XzVYdlYuaVdtNzpMYEs2NVRBKCkjYXhnWk5PfkszRSVHbUEjWns4Zkt9bUtAOkR3X2csOkNHaWVpZllMZFUyKVFhYj5dMS5lZyEremoxWTRhM0Jm''@;'; put 'put ''M2d4NjxnRjk9Q2RAKmNvayEhdGtqNiZVPSY4PkViPWsuLGwoMDxwKUthQGdjNTRVUChCJnF3WHp1cWlCaXhNV0Y4SGFNJTEkfk5baXZnLC8hWDReQHtlKWg3TGgpeUFkbWNOaGhsIzw4KyFlVCFrXjRaJWRITUY9NFBqa1ldOGU0P0pTRjlPbXM+aDchQ0sqYSxDWT1QMlojdj9iNyQ3YmArQipk''@;'; put 'put ''MGBoNltuRm4vODF5aXwvODJmRExReXRoWVlUJE1kRUQqfixdPmJmZEJnI2g5NHw+akxUQllPODUxVX02anphcXVYPVoyNDBfXVVDQUhdW0MhNDBJRmJwZVFhWHJ3L0kjTE1yMjlbIns3PW1SaGN5LGQiM0FJJTk9JEgzJihMdVc5LG1zZGQ+Q1p9cnxJbC5mWEJqUCMjPTRKbjZBflgpRzVoJUFL''@;'; put 'put ''TVBPaXhCWHMzWE5DNVF0VHQvLENkc2RMa3F8JDlBTGthK2tHd3lPYyovL2w3WmslLzA/Sl1aRHl+RWNtWzVuSX4wMTpTfVNkWHkvVD4jX0pqdn49LDk0KDtpeHgkJCVCWkgzN0BVMTdzT2xKNnYpIjJfJVdsSGR7YWZIX2pVZjI/I1IoRm02SWFneDByQFg9QHEoN3g4aWNLZzczPEpvM3VScSkv''@;'; put 'put ''dWxDNjF9dUVxXlJNOSR1dkU5NXAlOztgZDBiNjhQfShTL0RYd1VyaXxoJGVVJltZPzVGM0wpWy9LPzBjOHpAZFRvVnNBe081aG1rPjg3LjBKfmwifmtrc0FpZypJYztHak9DY11VSHJEJUJ4Vl18Wms5NDpuVGNAOCh2IyhZJkFVajlSaWBEJERyYmxvI0pmNGx6NVsiOlZxUlh8dSwoanVERTFY''@;'; put 'put ''L0tUdy9WZ2ljV3FIMTR+YEVjMVhPSEVIYjtDej06MStoWmMua1lnWE0jb191JSxxeF4hSSRtbklUcjZASmRMNXZQQnRGcjopPHk2S25JKUAxSnUzNkBrWkJ0MU15Z25TPWVwfiN2MT5JUXtPRHs1b1NndWIjND1SSXk6WCtTRXFRZ0l+djg+Iz4zOUsiaiN8ejRRViQrNFh1W2MxTGRVTnUxZlJi''@;'; put 'put ''cThnR11fJCJUTl9NN3JLckdffnI9TDFQRTI/fWk9KnQzI2Nda2poSVJrfGA2Km1PYS9JPihAQD5weGRBJWshXnB1KWdRd3t2cilfTnE7dXpbQy9VLHJJRy9QTTZjfGRzLmZlNDAmbXI2OEtSXl83XUVmUEJ6ejNReFp5PXlHX2FaJCZaOXdBSWA7I1B+ZzJlMWpnMyMja0Y/WzNWI1lrL3VjKiZZ''@;'; put 'put ''Iy9IKFR2eiQlUDlaUHNhNV12OXd1NTtTQkBKPTVJaWZXUVhJMFVBJykpKSxOQXx8KE5BPUJ4dCh7d2FzbUJpbmFyeTpGdGUsbG9jYXRlRmlsZTp2b2lkIDB9KSksTkF9ZnVuY3Rpb24gWXh0KGMpe3JldHVybntwYXRoOmMucGF0aCxkYXRhOmA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n''@;'; put 'put ''PSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+XG48c3ZnIHdpZHRoPSIke2Mud2lkdGh9IiBoZWlnaHQ9IiR7Yy5o''@;'; put 'put ''ZWlnaHR9Ij48L3N2Zz5gfX1mdW5jdGlvbiBHeHQoYyl7cmV0dXJuIGMubWFwKFl4dCl9dmFyIHI3ZT1jbGFzcyBJd3tjb25zdHJ1Y3RvcihsKXt0aGlzLl9tb2R1bGU9bH1zdGF0aWMgbG9hZCgpe3JldHVybiBaeHQoKS50aGVuKGw9Pm5ldyBJdyhsKSl9c3RhdGljIHVubG9hZCgpeyFmdW5j''@;'; put 'put ''dGlvbiBXeHQoKXtOQSYmKE5BPXZvaWQgMCl9KCl9dmVyc2lvbigpe3JldHVybiB0aGlzLl9tb2R1bGUuR3JhcGh2aXoucHJvdG90eXBlLnZlcnNpb24oKX1sYXlvdXQobCxhPSJzdmciLGQ9ImRvdCIsaCl7aWYoIWwpcmV0dXJuIiI7bGV0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeiho''@;'; put 'put ''Py55SW52ZXJ0PzE6MCxoPy5ub3A/aD8ubm9wOjApLHY9IiIsTT0iIjt0cnl7IWZ1bmN0aW9uICR4dChjLGwpe2xldCBhPXtpbWFnZXM6W10sZmlsZXM6W10sLi4ubH07Wy4uLmEuZmlsZXMsLi4uR3h0KGEuaW1hZ2VzKV0uZm9yRWFjaChkPT5jLmNyZWF0ZUZpbGUoZC5wYXRoLGQuZGF0YSkp''@;'; put 'put ''fShmLGgpO3RyeXt2PWYubGF5b3V0KGwsYSxkKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9YWN5Y2xpYyhsLGE9ITEs''@;'; put 'put ''ZD0hMSl7aWYoIWwpcmV0dXJue2FjeWNsaWM6ITEsbnVtX3JldjowLG91dEZpbGU6IiJ9O2xldCBoPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosZj0hMSx2PTAsTT0iIixEPSIiO3RyeXt0cnl7Zj1oLmFjeWNsaWMobCxhLGQpLHY9aC5hY3ljbGljX251bV9yZXYsTT1oLmFjeWNsaWNfb3V0''@;'; put 'put ''RmlsZX1jYXRjaChaKXtEPVoubWVzc2FnZX1EPWgubGFzdEVycm9yKCl8fER9ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZihEKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihEKTtyZXR1cm57YWN5Y2xpYzpmLG51bV9yZXY6dixvdXRGaWxlOk19fXRyZWQobCxhPSExLGQ9''@;'; put 'put ''ITEpe2lmKCFsKXJldHVybntvdXQ6IiIsZXJyOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9IiIsdj0iIixNPSIiO3RyeXt0cnl7aC50cmVkKGwsYSxkKSxmPWgudHJlZF9vdXQsdj1oLnRyZWRfZXJyfWNhdGNoKEQpe009RC5tZXNzYWdlfU09aC5sYXN0RXJyb3IoKXx8''@;'; put 'put ''TX1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGgpfWlmKCFmJiZNKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm57b3V0OmYsZXJyOnZ9fXVuZmxhdHRlbihsLGE9MCxkPSExLGg9MCl7aWYoIWwpcmV0dXJuIiI7bGV0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZp''@;'; put 'put ''eix2PSIiLE09IiI7dHJ5e3RyeXt2PWYudW5mbGF0dGVuKGwsYSxkLGgpfWNhdGNoKEQpe009RC5tZXNzYWdlfU09Zi5sYXN0RXJyb3IoKXx8TX1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCF2JiZNKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm4gdn1j''@;'; put 'put ''aXJjbyhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIs''@;'; put 'put ''ZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwic2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwib3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwicGF0Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfW5vcChsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90Iiwibm9wIil9bm9wMihsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90''@;'; put 'put ''Iiwibm9wMiIpfX07ZnVuY3Rpb24gRk4oYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYyl9ZnVuY3Rpb24gTTYoYyl7cmV0dXJuIE1hdGgucm91bmQoMTAwKmMpLzEwMH1mdW5jdGlvbiBpN2UoYyxsKXtpZigicG9seWdvbiI9PWMudGFnKXsoYT1GTihjKSkudGFnPSJwYXRoIjt2YXIgaD1G''@;'; put 'put ''TihkPWMuYXR0cmlidXRlcyksZj1kLnBvaW50cztpZigicG9seWdvbiI9PWwudGFnKXsodj1jLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjtmb3IodmFyIEQ9ZC5wb2ludHMuc3BsaXQoIiAiKSxaPUQubWFwKGZ1bmN0aW9uKE9uKXt2YXIgenI9T24uc3BsaXQo''@;'; put 'put ''IiwiKTtyZXR1cm5benJbMF0tdi5jeCx6clsxXS12LmN5XX0pLHJlPVpbWi5sZW5ndGgtMV1bMF0sY2U9WltaLmxlbmd0aC0xXVsxXSxiZT0wO2JlPFoubGVuZ3RoO2JlKysscmU9RWUsY2U9QmUpe3ZhciBxZT0oRWU9WltiZV1bMF0pLXJlO2lmKDAhPShydD0oQmU9WltiZV1bMV0pLWNlKSYm''@;'; put 'put ''MDw9KHB0PXJlLWNlKnFlL3J0KSYmcHQ8MS8wJiYocmU8PXB0JiZwdDw9RWV8fEVlPD1wdCYmcHQ8PXJlKSlicmVha312YXIgZHQ9W1t2LmN4K3B0LHYuY3krMF0uam9pbigiLCIpXTtmPShkdD0oZHQ9ZHQuY29uY2F0KEQuc2xpY2UoYmUpKSkuY29uY2F0KEQuc2xpY2UoMCxiZSkpKS5qb2lu''@;'; put 'put ''KCIgIil9aC5kPSJNIitmKyJ6IixkZWxldGUgaC5wb2ludHMsYS5hdHRyaWJ1dGVzPWh9ZWxzZXt2YXIgYTsoYT1GTihjKSkudGFnPSJwYXRoIixoPUZOKGQ9Yy5hdHRyaWJ1dGVzKTt2YXIgZCxFZSxCZSxwdCxKdD1kLmN4LHZuPWQuY3ksQ249ZC5yeCx0bj1kLnJ5O2lmKCJwb2x5Z29uIj09''@;'; put 'put ''bC50YWcpe3ZhciB2Oyh2PWwuYmJveCkuY3g9di54K3Yud2lkdGgvMix2LmN5PXYueSt2LmhlaWdodC8yO3ZhciBNbj1sLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIilbMF0uc3BsaXQoIiwiKSxydD0ocWU9TW5bMF0tdi5jeCxNblsxXS12LmN5KSxtcj1NYXRoLnNxcnQoTWF0aC5wb3co''@;'; put 'put ''cWUsMikrTWF0aC5wb3cocnQsMikpLEduPXFlL21yLGFpPS1ydC9tcn1lbHNlIEduPTEsYWk9MDtoLmQ9Ik0gIitKdCsiICIrdm4rIiBtICIrKEVlPUNuKkduKSsiLCIrKEJlPS10biphaSkrIiBhICIrQ24rIiwiK3RuKyIgMCAxLDAgIisocWU9KHB0PUNuKi1HbiktRWUpKyIsIisocnQ9LXRu''@;'; put 'put ''Ki1haS1CZSkrIiBhICIrQ24rIiwiK3RuKyIgMCAxLDAgIistcWUrIiwiKy1ydCsieiIsZGVsZXRlIGguY3gsZGVsZXRlIGguY3ksZGVsZXRlIGgucngsZGVsZXRlIGgucnksYS5hdHRyaWJ1dGVzPWh9cmV0dXJuIGF9ZnVuY3Rpb24gWHh0KCl7dHJ5e3I3ZS5sb2FkKCkudGhlbihhPT57YS5s''@;'; put 'put ''YXlvdXQoIiIsInN2ZyIsImRvdCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyksdGhpcy5fYWZ0ZXJJbml0JiZ0aGlzLl9hZnRlckluaXQoKX0pfWNhdGNoe31pZihudWxsIT10''@;'; put 'put ''aGlzLl93b3JrZXIpe3ZhciBjPXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5fd29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCkuY2FsbChsLGEpfSxjLm1hdGNoKC9eaHR0cHM/OlwvXC98XlwvXC8vaSl8fChjPW5ldyB3aW5kb3cuVVJM''@;'; put 'put ''KGMsZG9jdW1lbnQubG9jYXRpb24uaHJlZikuaHJlZiksSHRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6IiIsZW5naW5lOiJkb3QiLHZpelVSTDpjfSxmdW5jdGlvbihhKXt9KSxIdGUuY2FsbCh0aGlzLHt0eXBlOiJ2ZXJzaW9uIn0sZnVuY3Rpb24oYSl7InZlcnNpb24iPT09YS5k''@;'; put 'put ''YXRhLnR5cGUmJihsLl9ncmFwaHZpelZlcnNpb249YS5kYXRhLnZlcnNpb24sbC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcykpfSl9fWZ1bmN0aW9uIEh0ZShjLGwpe3RoaXMuX3dvcmtlckNhbGxiYWNrcy5wdXNoKGwpLHRoaXMuX3dvcmtlclBvcnQucG9zdE1lc3NhZ2UoYyl9ZnVu''@;'; put 'put ''Y3Rpb24gZUV0KGMsbCl7dmFyIGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcztpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24mJnRoaXMuX29wdGlvbnMudHdl''@;'; put 'put ''ZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCx2PXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKTtlbHNlIGY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbix2PSEx''@;'; put 'put ''O3ZhciBNPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMsRD17fSxaPXRoaXMuX2RpY3Rpb25hcnl8fHt9LHJlPXt9LGNlPXRoaXMuX25vZGVEaWN0aW9uYXJ5fHx7fTtmdW5jdGlvbiBwdChHbixhaT0wLF9pKXsoZnVuY3Rpb24gYmUoR24sYWkpe3ZhciBfaT1Hbi50YWc7aWYoImlu''@;'; put 'put ''ZGV4Ij09YSlHbi5rZXk9YWk7ZWxzZSBpZigiIyIhPV9pWzBdKWlmKCJpZCI9PWEpR24ua2V5PUduLmF0dHJpYnV0ZXMuaWQ7ZWxzZSBpZigidGl0bGUiPT1hKXt2YXIgT249R24uY2hpbGRyZW4uZmluZChmdW5jdGlvbih6cil7cmV0dXJuInRpdGxlIj09enIudGFnfSk7T24mJihHbi5rZXk9''@;'; put 'put ''T24uY2hpbGRyZW4ubGVuZ3RoPjA/T24uY2hpbGRyZW5bMF0udGV4dDoiIil9bnVsbD09R24ua2V5JiYoaCYmKCJlbGxpcHNlIj09X2l8fCJwb2x5Z29uIj09X2kpJiYoX2k9InBhdGgiKSxHbi5rZXk9X2krIi0iK2FpKX0pKEduLGFpKSxmdW5jdGlvbiBFZShHbixhaSl7R24uaWQ9KGFpP2Fp''@;'; put 'put ''LmlkKyIuIjoiIikrR24ua2V5fShHbixfaSk7dmFyIHpyPVpbR24uaWRdOyhmdW5jdGlvbiBCZShHbil7RFtHbi5pZF09R259KShHbiksZnVuY3Rpb24gcWUoR24sYWkpe2gmJkduLmlkIGluIFomJigicG9seWdvbiI9PWFpLnRhZ3x8ImVsbGlwc2UiPT1haS50YWd8fCJwYXRoIj09YWkudGFn''@;'; put 'put ''KSYmKGFpLnRhZyE9R24udGFnfHwicG9seWdvbiI9PUduLnRhZykmJigicGF0aCIhPWFpLnRhZyYmKEduLmFsdGVybmF0aXZlT2xkPWk3ZShhaSxHbikpLCJwYXRoIiE9R24udGFnJiYoR24uYWx0ZXJuYXRpdmVOZXc9aTdlKEduLGFpKSkpfShHbix6ciksZnVuY3Rpb24gcnQoR24sYWkpe2lm''@;'; put 'put ''KGQmJmFpJiYoInBhdGgiPT1haS50YWd8fEduLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PUduLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciBfaT0oR24uYWx0ZXJuYXRpdmVOZXd8fEduKS5hdHRyaWJ1dGVzLmQ7aWYoR24uYWx0ZXJuYXRpdmVPbGQpdmFyIE9uPWt0ZShHbi5hbHRlcm5hdGl2''@;'; put 'put ''ZU9sZCk7ZWxzZSBPbj1rdGUoYWkpOyhHbi5hbHRlcm5hdGl2ZU9sZHx8KEduLmFsdGVybmF0aXZlT2xkPXt9KSkucG9pbnRzPWZ1bmN0aW9uIHZ4dChjLGwsYSxkKXtjb25zdCBoPWMsZj1oLmNsb25lTm9kZSgpLHY9aC5nZXRUb3RhbExlbmd0aCgpLE09KGYuc2V0QXR0cmlidXRlKCJkIixs''@;'; put 'put ''KSxmKS5nZXRUb3RhbExlbmd0aCgpLEQ9WzBdO2xldCBaPTA7Y29uc3QgcmU9ZD9hOmEvTWF0aC5tYXgodixNKTtmb3IoOyhaKz1yZSk8MTspRC5wdXNoKFopO3JldHVybiBELnB1c2goMSksRC5tYXAoZnVuY3Rpb24oYmUpe2NvbnN0IEVlPWguZ2V0UG9pbnRBdExlbmd0aChiZSp2KSxCZT1m''@;'; put 'put ''LmdldFBvaW50QXRMZW5ndGgoYmUqTSk7cmV0dXJuW1tFZS54LEVlLnldLFtCZS54LEJlLnldXX0pfShPbixfaSxmLHYpfX0oR24senIpO3ZhciBKbj17fTtHbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKElyKXt2YXIgJHI9SXIudGFnOygiZWxsaXBzZSI9PSRyfHwicG9seWdvbiI9PSRy''@;'; put 'put ''KSYmKCRyPSJwYXRoIiksbnVsbD09Sm5bJHJdJiYoSm5bJHJdPTApLHB0KElyLEpuWyRyXSsrLEduKX0pfWZ1bmN0aW9uIHZuKEduKXsoZnVuY3Rpb24gZHQoR24pe2lmKE0mJkduLnBhcmVudCYmIm5vZGUiPT1Hbi5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09R24udGFnKXtp''@;'; put 'put ''ZihHbi5jaGlsZHJlbi5sZW5ndGg+MCl2YXIgT249R24uY2hpbGRyZW5bMF0udGV4dDtlbHNlIE9uPSIiO3JlW09uXT1Hbi5wYXJlbnR9fSkoR24pLGZ1bmN0aW9uIEp0KEduKXt2YXIgX2k9R24udGFnO2lmKE0mJiFaW0duLmlkXSYmR24ucGFyZW50JiZROGUoR24pJiYoInBhdGgiPT1faXx8''@;'; put 'put ''InBvbHlnb24iPT1faSkpe2lmKCJwb2x5Z29uIj09X2kpe3ZhciB6cj1Hbi5wYXJlbnQuY2hpbGRyZW4uZmluZChmdW5jdGlvbihIcil7cmV0dXJuInBhdGgiPT1Ici50YWd9KTt6ciYmKEduLnRvdGFsTGVuZ3RoPXpyLnRvdGFsTGVuZ3RoKX12YXIgSm49ZnVuY3Rpb24gX3h0KGMpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiB5eHQoYyl7cmV0dXJuImVkZ2UiPT1jLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzP2MucGFyZW50OmMucGFyZW50LnBhcmVudC5wYXJlbnR9KGMpLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24obCl7cmV0dXJuInRpdGxlIj09bC50YWd9KX0oR24pLElyPUpuLmNoaWxkcmVuWzBd''@;'; put 'put ''LCRyPUlyLnRleHQuc3BsaXQoIi0+Iik7MiE9JHIubGVuZ3RoJiYoJHI9SXIudGV4dC5zcGxpdCgiLS0iKSk7dmFyIHdpPSRyWzBdLGVhPXJlW3dpXTtpZihPYmplY3QuaGFzT3duKGNlLHdpKSl7dmFyIGZhPWNlW3dpXTtpZigoTnQ9ZWEuY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhy''@;'; put 'put ''LHFyKXtyZXR1cm4iZyI9PUhyLnRhZ30pKT49MCl7dmFyIHZ0PWVhLmNoaWxkcmVuW050XS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oSHIscXIpe3JldHVybiJhIj09SHIudGFnfSk7ZWE9ZWEuY2hpbGRyZW5bTnRdLmNoaWxkcmVuW3Z0XX0oTnQ9ZmEuY2hpbGRyZW4uZmluZEluZGV4''@;'; put 'put ''KGZ1bmN0aW9uKEhyLHFyKXtyZXR1cm4iZyI9PUhyLnRhZ30pKT49MCYmKHZ0PWZhLmNoaWxkcmVuW050XS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24ocXIsb24pe3JldHVybiJhIj09cXIudGFnfSksZmE9ZmEuY2hpbGRyZW5bTnRdLmNoaWxkcmVuW3Z0XSk7Zm9yKHZhciBIdD1lYS5j''@;'; put 'put ''aGlsZHJlbixOdD0wO050PEh0Lmxlbmd0aDtOdCsrKWlmKCJwb2x5Z29uIj09SHRbTnRdLnRhZ3x8ImVsbGlwc2UiPT1IdFtOdF0udGFnfHwicGF0aCI9PUh0W050XS50YWd8fCJ0ZXh0Ij09SHRbTnRdLnRhZyl7dmFyIEhuPUh0W050XTticmVha312YXIgdHI9ZmEuY2hpbGRyZW47Zm9yKE50''@;'; put 'put ''PTA7TnQ8dHIubGVuZ3RoO050KyspaWYoInBvbHlnb24iPT10cltOdF0udGFnfHwiZWxsaXBzZSI9PXRyW050XS50YWd8fCJwYXRoIj09dHJbTnRdLnRhZ3x8InRleHQiPT10cltOdF0udGFnKXt2YXIgYXI9dHJbTnRdO2JyZWFrfUduLm9mZnNldD1hciYmSG4/e3g6YXIuY2VudGVyLngtSG4u''@;'; put 'put ''Y2VudGVyLngseTphci5jZW50ZXIueS1Ibi5jZW50ZXIueX06e3g6MCx5OjB9fX19KEduKSxHbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGFpKXt2bihhaSl9KX10aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRFbmQiLHRoaXMpO3ZhciBDbj13cyhkb2N1bWVudC5jcmVhdGVEb2N1bWVu''@;'; put 'put ''dEZyYWdtZW50KCkpLmFwcGVuZCgiZGl2IiksTW49KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYywiaW1hZ2Uvc3ZnK3htbCIpO0NuLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBNbi5kb2N1bWVudEVsZW1lbnR9KTt2YXIgR3I9bnYoQ24uc2VsZWN0KCJzdmciKSk7''@;'; put 'put ''dGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YUV4dHJhY3RFbmQiLHRoaXMpLHB0KEdyKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIix0aGlzKSx2bihHciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMkVuZCIsdGhpcyksdGhpcy5fZGF0YT1H''@;'; put 'put ''cix0aGlzLl9kaWN0aW9uYXJ5PUQsdGhpcy5fbm9kZURpY3Rpb25hcnk9cmUsdGhpcy5fZXh0cmFjdERhdGE9ZnVuY3Rpb24oR24sYWksX2kpe3ZhciBPbj1udihHbik7cmV0dXJuIHB0KE9uLGFpLF9pKSx2bihPbiksT259LHRoaXMuX2J1c3k9ITEsdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0''@;'; put 'put ''YVByb2Nlc3NFbmQiLHRoaXMpLGwmJmwuY2FsbCh0aGlzKSx0aGlzLl9xdWV1ZS5sZW5ndGg+MCYmdGhpcy5fcXVldWUuc2hpZnQoKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEhOKGMsbCl7aWYoKGE9KGM9bD9jLnRvRXhwb25lbnRpYWwobC0xKTpjLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigi''@;'; put 'put ''ZSIpKTwwKXJldHVybiBudWxsO3ZhciBhLGQ9Yy5zbGljZSgwLGEpO3JldHVybltkLmxlbmd0aD4xP2RbMF0rZC5zbGljZSgyKTpkLCtjLnNsaWNlKGErMSldfXZhciBhN2UseEV0PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/''@;'; put 'put ''KFthLXolXSk/JC9pO2Z1bmN0aW9uIE50ZShjKXtpZighKGw9eEV0LmV4ZWMoYykpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYyk7dmFyIGw7cmV0dXJuIG5ldyBWdGUoe2ZpbGw6bFsxXSxhbGlnbjpsWzJdLHNpZ246bFszXSxzeW1ib2w6bFs0XSx6ZXJvOmxbNV0sd2lk''@;'; put 'put ''dGg6bFs2XSxjb21tYTpsWzddLHByZWNpc2lvbjpsWzhdJiZsWzhdLnNsaWNlKDEpLHRyaW06bFs5XSx0eXBlOmxbMTBdfSl9ZnVuY3Rpb24gVnRlKGMpe3RoaXMuZmlsbD12b2lkIDA9PT1jLmZpbGw/IiAiOmMuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PWMuYWxpZ24/Ij4iOmMuYWxp''@;'; put 'put ''Z24rIiIsdGhpcy5zaWduPXZvaWQgMD09PWMuc2lnbj8iLSI6Yy5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PWMuc3ltYm9sPyIiOmMuc3ltYm9sKyIiLHRoaXMuemVybz0hIWMuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PWMud2lkdGg/dm9pZCAwOitjLndpZHRoLHRoaXMuY29tbWE9''@;'; put 'put ''ISFjLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PWMucHJlY2lzaW9uP3ZvaWQgMDorYy5wcmVjaXNpb24sdGhpcy50cmltPSEhYy50cmltLHRoaXMudHlwZT12b2lkIDA9PT1jLnR5cGU/IiI6Yy50eXBlKyIifWZ1bmN0aW9uIG83ZShjLGwpe3ZhciBhPUhOKGMsbCk7aWYoIWEpcmV0''@;'; put 'put ''dXJuIGMrIiI7dmFyIGQ9YVswXSxoPWFbMV07cmV0dXJuIGg8MD8iMC4iK25ldyBBcnJheSgtaCkuam9pbigiMCIpK2Q6ZC5sZW5ndGg+aCsxP2Quc2xpY2UoMCxoKzEpKyIuIitkLnNsaWNlKGgrMSk6ZCtuZXcgQXJyYXkoaC1kLmxlbmd0aCsyKS5qb2luKCIwIil9TnRlLnByb3RvdHlwZT1W''@;'; put 'put ''dGUucHJvdG90eXBlLFZ0ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkp''@;'; put 'put ''Kyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtjb25zdCBzN2U9eyIlIjooYyxsKT0+KDEwMCpjKS50b0ZpeGVkKGwpLGI6Yz0+TWF0aC5y''@;'; put 'put ''b3VuZChjKS50b1N0cmluZygyKSxjOmM9PmMrIiIsZDpmdW5jdGlvbiB3RXQoYyl7cmV0dXJuIE1hdGguYWJzKGM9TWF0aC5yb3VuZChjKSk+PTFlMjE/Yy50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmMudG9TdHJpbmcoMTApfSxlOihjLGwpPT5jLnRvRXhwb25lbnRp''@;'; put 'put ''YWwobCksZjooYyxsKT0+Yy50b0ZpeGVkKGwpLGc6KGMsbCk9PmMudG9QcmVjaXNpb24obCksbzpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDgpLHA6KGMsbCk9Pm83ZSgxMDAqYyxsKSxyOm83ZSxzOmZ1bmN0aW9uIFRFdChjLGwpe3ZhciBhPUhOKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7''@;'; put 'put ''dmFyIGQ9YVswXSxoPWFbMV0sZj1oLShhN2U9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaC8zKSkpKSsxLHY9ZC5sZW5ndGg7cmV0dXJuIGY9PT12P2Q6Zj52P2QrbmV3IEFycmF5KGYtdisxKS5qb2luKCIwIik6Zj4wP2Quc2xpY2UoMCxmKSsiLiIrZC5zbGljZShmKToi''@;'; put 'put ''MC4iK25ldyBBcnJheSgxLWYpLmpvaW4oIjAiKStITihjLE1hdGgubWF4KDAsbCtmLTEpKVswXX0sWDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIGw3ZShjKXtyZXR1cm4gY312YXIg''@;'; put 'put ''Tk4sYWYsYzdlPUFycmF5LnByb3RvdHlwZS5tYXAsdTdlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdOyFmdW5jdGlvbiBERXQoYyl7Tk49ZnVuY3Rpb24gQUV0KGMpe3ZhciBsPXZvaWQgMD09PWMuZ3JvdXBp''@;'; put 'put ''bmd8fHZvaWQgMD09PWMudGhvdXNhbmRzP2w3ZTpmdW5jdGlvbiBTRXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtmb3IodmFyIGg9YS5sZW5ndGgsZj1bXSx2PTAsTT1jWzBdLEQ9MDtoPjAmJk0+MCYmKEQrTSsxPmQmJihNPU1hdGgubWF4KDEsZC1EKSksZi5wdXNoKGEuc3Vic3RyaW5n''@;'; put 'put ''KGgtPU0saCtNKSksISgoRCs9TSsxKT5kKSk7KU09Y1t2PSh2KzEpJWMubGVuZ3RoXTtyZXR1cm4gZi5yZXZlcnNlKCkuam9pbihsKX19KGM3ZS5jYWxsKGMuZ3JvdXBpbmcsTnVtYmVyKSxjLnRob3VzYW5kcysiIiksYT12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMuY3VycmVuY3lbMF0rIiIs''@;'; put 'put ''ZD12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMuY3VycmVuY3lbMV0rIiIsaD12b2lkIDA9PT1jLmRlY2ltYWw/Ii4iOmMuZGVjaW1hbCsiIixmPXZvaWQgMD09PWMubnVtZXJhbHM/bDdlOmZ1bmN0aW9uIE1FdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwucmVwbGFjZSgvWzAtOV0v''@;'; put 'put ''ZyxmdW5jdGlvbihhKXtyZXR1cm4gY1srYV19KX19KGM3ZS5jYWxsKGMubnVtZXJhbHMsU3RyaW5nKSksdj12b2lkIDA9PT1jLnBlcmNlbnQ/IiUiOmMucGVyY2VudCsiIixNPXZvaWQgMD09PWMubWludXM/Ilx1MjIxMiI6Yy5taW51cysiIixEPXZvaWQgMD09PWMubmFuPyJOYU4iOmMubmFu''@;'; put 'put ''KyIiO2Z1bmN0aW9uIFooY2Upe3ZhciBiZT0oY2U9TnRlKGNlKSkuZmlsbCxFZT1jZS5hbGlnbixCZT1jZS5zaWduLHFlPWNlLnN5bWJvbCxydD1jZS56ZXJvLHB0PWNlLndpZHRoLGR0PWNlLmNvbW1hLEp0PWNlLnByZWNpc2lvbix2bj1jZS50cmltLENuPWNlLnR5cGU7Im4iPT09Q24/KGR0''@;'; put 'put ''PSEwLENuPSJnIik6czdlW0NuXXx8KHZvaWQgMD09PUp0JiYoSnQ9MTIpLHZuPSEwLENuPSJnIiksKHJ0fHwiMCI9PT1iZSYmIj0iPT09RWUpJiYocnQ9ITAsYmU9IjAiLEVlPSI9Iik7dmFyIHRuPSIkIj09PXFlP2E6IiMiPT09cWUmJi9bYm94WF0vLnRlc3QoQ24pPyIwIitDbi50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpOiIiLE1uPSIkIj09PXFlP2Q6L1slcF0vLnRlc3QoQ24pP3Y6IiIsQ3I9czdlW0NuXSxHcj0vW2RlZmdwcnMlXS8udGVzdChDbik7ZnVuY3Rpb24gbXIoR24pe3ZhciBPbix6cixKbixhaT10bixfaT1NbjtpZigiYyI9PT1DbilfaT1DcihHbikrX2ksR249IiI7ZWxzZXt2YXIgSXI9''@;'; put 'put ''KEduPStHbik8MHx8MS9HbjwwO2lmKEduPWlzTmFOKEduKT9EOkNyKE1hdGguYWJzKEduKSxKdCksdm4mJihHbj1mdW5jdGlvbiBFRXQoYyl7ZTpmb3IodmFyIGgsbD1jLmxlbmd0aCxhPTEsZD0tMTthPGw7KythKXN3aXRjaChjW2FdKXtjYXNlIi4iOmQ9aD1hO2JyZWFrO2Nhc2UiMCI6MD09''@;'; put 'put ''PWQmJihkPWEpLGg9YTticmVhaztkZWZhdWx0OmlmKCErY1thXSlicmVhayBlO2Q+MCYmKGQ9MCl9cmV0dXJuIGQ+MD9jLnNsaWNlKDAsZCkrYy5zbGljZShoKzEpOmN9KEduKSksSXImJjA9PStHbiYmIisiIT09QmUmJihJcj0hMSksYWk9KElyPyIoIj09PUJlP0JlOk06Ii0iPT09QmV8fCIo''@;'; put 'put ''Ij09PUJlPyIiOkJlKSthaSxfaT0oInMiPT09Q24/dTdlWzgrYTdlLzNdOiIiKStfaSsoSXImJiIoIj09PUJlPyIpIjoiIiksR3IpZm9yKE9uPS0xLHpyPUduLmxlbmd0aDsrK09uPHpyOylpZig0OD4oSm49R24uY2hhckNvZGVBdChPbikpfHxKbj41Nyl7X2k9KDQ2PT09Sm4/aCtHbi5zbGlj''@;'; put 'put ''ZShPbisxKTpHbi5zbGljZShPbikpK19pLEduPUduLnNsaWNlKDAsT24pO2JyZWFrfX1kdCYmIXJ0JiYoR249bChHbiwxLzApKTt2YXIgJHI9YWkubGVuZ3RoK0duLmxlbmd0aCtfaS5sZW5ndGgsd2k9JHI8cHQ/bmV3IEFycmF5KHB0LSRyKzEpLmpvaW4oYmUpOiIiO3N3aXRjaChkdCYmcnQm''@;'; put 'put ''JihHbj1sKHdpK0duLHdpLmxlbmd0aD9wdC1faS5sZW5ndGg6MS8wKSx3aT0iIiksRWUpe2Nhc2UiPCI6R249YWkrR24rX2krd2k7YnJlYWs7Y2FzZSI9IjpHbj1haSt3aStHbitfaTticmVhaztjYXNlIl4iOkduPXdpLnNsaWNlKDAsJHI9d2kubGVuZ3RoPj4xKSthaStHbitfaSt3aS5zbGlj''@;'; put 'put ''ZSgkcik7YnJlYWs7ZGVmYXVsdDpHbj13aSthaStHbitfaX1yZXR1cm4gZihHbil9cmV0dXJuIEp0PXZvaWQgMD09PUp0PzY6L1tncHJzXS8udGVzdChDbik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxKdCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsSnQpKSxtci50b1N0cmluZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBjZSsiIn0sbXJ9cmV0dXJue2Zvcm1hdDpaLGZvcm1hdFByZWZpeDpmdW5jdGlvbiByZShjZSxiZSl7dmFyIEVlPVooKChjZT1OdGUoY2UpKS50eXBlPSJmIixjZSkpLEJlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIENFdChjKXtyZXR1''@;'; put 'put ''cm4oYz1ITihNYXRoLmFicyhjKSkpP2NbMV06TmFOfShiZSkvMykpKSxxZT1NYXRoLnBvdygxMCwtQmUpLHJ0PXU3ZVs4K0JlLzNdO3JldHVybiBmdW5jdGlvbihwdCl7cmV0dXJuIEVlKHFlKnB0KStydH19fX0oYyksYWY9Tk4uZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10s''@;'; put 'put ''Y3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCBCdGU9TWF0aC5QSSxqdGU9MipCdGUsaXY9MWUtNixMRXQ9anRlLWl2O2Z1bmN0aW9uIGQ3ZShjKXt0aGlzLl8rPWNbMF07Zm9yKGxldCBsPTEsYT1jLmxlbmd0aDtsPGE7KytsKXRoaXMuXys9YXJndW1lbnRzW2xdK2NbbF19Y2xhc3MgenRle2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1sP2Q3ZTpmdW5jdGlvbiBPRXQoYyl7bGV0IGw9TWF0aC5mbG9vcihjKTtpZighKGw+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdp''@;'; put 'put ''dHM6ICR7Y31gKTtpZihsPjE1KXJldHVybiBkN2U7Y29uc3QgYT0xMCoqbDtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5fKz1kWzBdO2ZvcihsZXQgaD0xLGY9ZC5sZW5ndGg7aDxmOysraCl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2hdKmEpL2ErZFtoXX19KGwpfW1vdmVUbyhsLGEp''@;'; put 'put ''e3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGwsYSl7dGhpcy5f''@;'; put 'put ''YXBwZW5kYEwke3RoaXMuX3gxPStsfSwke3RoaXMuX3kxPSthfWB9cXVhZHJhdGljQ3VydmVUbyhsLGEsZCxoKXt0aGlzLl9hcHBlbmRgUSR7K2x9LCR7K2F9LCR7dGhpcy5feDE9K2R9LCR7dGhpcy5feTE9K2h9YH1iZXppZXJDdXJ2ZVRvKGwsYSxkLGgsZix2KXt0aGlzLl9hcHBlbmRgQyR7''@;'; put 'put ''K2x9LCR7K2F9LCR7K2R9LCR7K2h9LCR7dGhpcy5feDE9K2Z9LCR7dGhpcy5feTE9K3Z9YH1hcmNUbyhsLGEsZCxoLGYpe2lmKGw9K2wsYT0rYSxkPStkLGg9K2gsKGY9K2YpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7Zn1gKTtsZXQgdj10aGlzLl94MSxNPXRoaXMu''@;'; put 'put ''X3kxLEQ9ZC1sLFo9aC1hLHJlPXYtbCxjZT1NLWEsYmU9cmUqcmUrY2UqY2U7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YDtlbHNlIGlmKGJlPml2KWlmKE1hdGguYWJzKGNlKkQtWipyZSk+aXYmJmYpe2xldCBFZT1kLXYsQmU9''@;'; put 'put ''aC1NLHFlPUQqRCtaKloscnQ9RWUqRWUrQmUqQmUscHQ9TWF0aC5zcXJ0KHFlKSxkdD1NYXRoLnNxcnQoYmUpLEp0PWYqTWF0aC50YW4oKEJ0ZS1NYXRoLmFjb3MoKHFlK2JlLXJ0KS8oMipwdCpkdCkpKS8yKSx2bj1KdC9kdCxDbj1KdC9wdDtNYXRoLmFicyh2bi0xKT5pdiYmdGhpcy5fYXBw''@;'; put 'put ''ZW5kYEwke2wrdm4qcmV9LCR7YSt2bipjZX1gLHRoaXMuX2FwcGVuZGBBJHtmfSwke2Z9LDAsMCwkeysoY2UqRWU+cmUqQmUpfSwke3RoaXMuX3gxPWwrQ24qRH0sJHt0aGlzLl95MT1hK0NuKlp9YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YH1hcmMo''@;'; put 'put ''bCxhLGQsaCxmLHYpe2lmKGw9K2wsYT0rYSx2PSEhdiwoZD0rZCk8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtkfWApO2xldCBNPWQqTWF0aC5jb3MoaCksRD1kKk1hdGguc2luKGgpLFo9bCtNLHJlPWErRCxjZT0xXnYsYmU9dj9oLWY6Zi1oO251bGw9PT10aGlzLl94''@;'; put 'put ''MT90aGlzLl9hcHBlbmRgTSR7Wn0sJHtyZX1gOihNYXRoLmFicyh0aGlzLl94MS1aKT5pdnx8TWF0aC5hYnModGhpcy5feTEtcmUpPml2KSYmdGhpcy5fYXBwZW5kYEwke1p9LCR7cmV9YCxkJiYoYmU8MCYmKGJlPWJlJWp0ZStqdGUpLGJlPkxFdD90aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSww''@;'; put 'put ''LDEsJHtjZX0sJHtsLU19LCR7YS1EfUEke2R9LCR7ZH0sMCwxLCR7Y2V9LCR7dGhpcy5feDE9Wn0sJHt0aGlzLl95MT1yZX1gOmJlPml2JiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7KyhiZT49QnRlKX0sJHtjZX0sJHt0aGlzLl94MT1sK2QqTWF0aC5jb3MoZil9LCR7dGhpcy5feTE9''@;'; put 'put ''YStkKk1hdGguc2luKGYpfWApfXJlY3QobCxhLGQsaCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWgke2Q9K2R9diR7K2h9aCR7LWR9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiBoN2UoKXtyZXR1cm4g''@;'; put 'put ''bmV3IHp0ZX1mdW5jdGlvbiBQRXQoYyxsLGEsZCl7cmV0dXJuIGw9LWwsZD0tZCxbYyxsXT1bYyphLWwqZCxjKmQrbCphXSxbYyxsPS1sXX1mdW5jdGlvbiBmN2UoYyxsLGEsZCxoLGYsdil7dmFyIEQ9bnYodjdlLmNhbGwodGhpcyxmKSk7Yy5kYXRhKFtEXSksT0EuY2FsbChjLm5vZGUoKSxE''@;'; put 'put ''KSxwN2UoYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gcDdlKGMsbCxhLGQsaCxmLHYpe3ZhciBNPXYuc2hvcnRlbmluZ3x8MCxjZT1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAsLTMuNV1dLGJlPWQtbCxFZT1oLWEsQmU9TWF0aC5zcXJ0KGJlKmJlK0VlKkVlKTtpZigwPT1CZSl2YXIgcWU9''@;'; put 'put ''MSxydD0wO2Vsc2UgcWU9YmUvQmUscnQ9RWUvQmU7aWYoZD1sKyhCZS1NLTEwLS4xKSpxZSxoPWErKEJlLU0tMTAtLjEpKnJ0LGYuVVJMfHxmLnRvb2x0aXApdmFyIHB0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEi''@;'; put 'put ''KSxkdD1wdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO2Vsc2UgZHQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3Bh''@;'; put 'put ''Z2F0aW9uKCJwb2x5Z29uIik7dmFyIHZuPWg3ZSgpO3ZuLm1vdmVUbyhsLGEpLHZuLmxpbmVUbyhkLGgpLGR0LmF0dHIoImQiLHZuKSxkPWwrKEJlLU0tMTApKnFlLGg9YSsoQmUtTS0xMCkqcnQ7Zm9yKHZhciBDbj0wO0NuPGNlLmxlbmd0aDtDbisrKWNlW0NuXT1QRXQoKHRuPWNlW0NuXSlb''@;'; put 'put ''MF0sdG5bMV0scWUscnQpO2ZvcihDbj0wO0NuPGNlLmxlbmd0aDtDbisrKWNlW0NuXT1bZCsodG49Y2VbQ25dKVswXSxoK3RuWzFdXTt2YXIgTW49W107Zm9yKENuPTA7Q248Y2UubGVuZ3RoO0NuKyspe3ZhciB0bjtNbi5wdXNoKCh0bj1jZVtDbl0pLmpvaW4oIiwiKSl9dmFyIENyPU1uLmpv''@;'; put 'put ''aW4oIiAiKTtyZXR1cm4gSnQuYXR0cigicG9pbnRzIixDciksdGhpc31mdW5jdGlvbiBnN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0aW9uIG03ZSgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9kcmF3bkVkZ2U/dGhpcy5fZHJhd25FZGdlLmc6d3MobnVsbCl9ZnVuY3Rpb24gdjdlKGMpe3ZhciBsPSIiO2Zvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSludWxsIT1jW2FdJiYobCs9JyAiJythKyciPSInK2NbYV0rJyInKTt2YXIgaD10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2Eg''@;'; put 'put ''LT4gYiBbIitsKyJdfSIsInN2ZyIsImRvdCIpLHY9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiB3cyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB2LmRvY3Vt''@;'; put 'put ''ZW50RWxlbWVudH0pLnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiBiN2UoYyxsLGEsZCxoLGYpe3ZhciBNPW52KEM3ZS5jYWxsKHRoaXMsZCxoKSk7cmV0dXJuIGMuZGF0YShbTV0pLE9BLmNhbGwoYy5ub2RlKCksTSkseTdlKGMsbCxhLGgpLHRoaXN9ZnVuY3Rpb24geTdlKGMsbCxhLGQsaCl7''@;'; put 'put ''aWYoZC5VUkx8fGQudG9vbHRpcCl2YXIgZj1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBmPWM7dmFyIHY9Zi5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1jLnNlbGVj''@;'; put 'put ''dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtpZigwIT12LnNpemUoKSl7dmFyIEQ9di5ub2RlKCkuZ2V0QkJveCgpO0QuY3g9RC54K0Qud2lkdGgvMixELmN5PUQueStELmhlaWdodC8yfWVsc2UgMCE9TS5zaXplKCkmJihEPXt4OitNLmF0dHIoIngiKSx5OitNLmF0dHIoInkiKSx3''@;'; put 'put ''aWR0aDowLGhlaWdodDowLGN4OitNLmF0dHIoIngiKSxjeTorTS5hdHRyKCJ5Iil9KTtyZXR1cm4gdi5lYWNoKGZ1bmN0aW9uKFoscmUpe3ZhciBjZT13cyh0aGlzKTtpZihjZS5hdHRyKCJjeCIpKWNlLmF0dHIoImN4IixNNihsKSkuYXR0cigiY3kiLE02KGEpKTtlbHNlIGlmKGNlLmF0dHIo''@;'; put 'put ''InBvaW50cyIpKXt2YXIgYmU9Y2UuYXR0cigicG9pbnRzIikudHJpbSgpO2NlLmF0dHIoInBvaW50cyIsZnVuY3Rpb24gS3h0KGYsbCxhKXt2YXIgaCxkPShoPWYuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KTtyZXR1cm4gZD1oLm1hcChmdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm5bTTYoK2wrICt2LnNwbGl0KCIsIilbMF0pLE02KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KSwoaD1kLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5qb2luKCIsIil9KSkuam9pbigiICIpfShiZSxsLUQuY3gsYS1ELmN5KSl9ZWxzZXt2YXIgRWU9Y2UuYXR0cigiZCIpO2Nl''@;'; put 'put ''LmF0dHIoImQiLGZ1bmN0aW9uIHF4dChjLGwsYSl7KGY9Yy5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIGQ9Yy5zcGxpdCgvW15bQS1aIF0rLyksZj0oZi5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuc3BsaXQoIiwiKX0pLGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybltNNigrbCsgK3Yu''@;'; put 'put ''c3BsaXQoIiwiKVswXSksTTYoK2ErICt2LnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5qb2luKCIsIil9KSk7cmV0dXJuIGQucmVkdWNlKGZ1bmN0aW9uKHYsTSxEKXtyZXR1cm4gdi5jb25jYXQoTSxmW0RdKX0sW10pLmpvaW4oIiIpfShFZSxsLUQuY3gsYS1E''@;'; put 'put ''LmN5KSl9fSksMCE9TS5zaXplKCkmJk0uYXR0cigieCIsTTYoK00uYXR0cigieCIpK2wtRC5jeCkpLmF0dHIoInkiLE02KCtNLmF0dHIoInkiKSthLUQuY3kpKSx0aGlzfWZ1bmN0aW9uIF83ZSgpe2lmKCF0aGlzLl9kcmF3bk5vZGUpcmV0dXJuIHRoaXM7dmFyIGM9dGhpcy5fZHJhd25Ob2Rl''@;'; put 'put ''Lmc7cmV0dXJuIGMuZW1wdHkoKXx8Yy5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIHc3ZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJhd25Ob2RlLmc6d3MobnVsbCl9ZnVuY3Rpb24gQzdlKGMsbCl7dmFyIGE9IiI7Zm9yKHZhciBkIG9mIE9i''@;'; put 'put ''amVjdC5rZXlzKGwpKW51bGwhPWxbZF0mJihhKz0nICInK2QrJyI9IicrbFtkXSsnIicpO3ZhciBmPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK2MrJyIgWycrYSsiXX0iLCJzdmciLCJkb3QiKSxNPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGYsImltYWdlL3N2''@;'; put 'put ''Zyt4bWwiKTtyZXR1cm4gd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTS5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5ub2RlIil9ZnVuY3Rpb24gVk4oYyl7c2VsZi5kb2N1bWVudD17fSxjLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''Im1lc3NhZ2UiLGZ1bmN0aW9uKGwpe2xldCBhPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1hJiZsLmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyhsLmRhdGEudml6VVJMKSxhPXNlbGZbIkBocGNjLWpzL3dhc20iXSksInZlcnNpb24iIT1sLmRhdGEudHlwZT9hLkdyYXBodml6Lmxv''@;'; put 'put ''YWQoKS50aGVuKGQ9Pntjb25zdCBoPWQubGF5b3V0KGwuZGF0YS5kb3QsInN2ZyIsbC5kYXRhLmVuZ2luZSxsLmRhdGEub3B0aW9ucyk7Yy5wb3N0TWVzc2FnZShoP3t0eXBlOiJkb25lIixzdmc6aH06bC5kYXRhLnZpelVSTD97dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2go''@;'; put 'put ''ZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixlcnJvcjpkLm1lc3NhZ2V9KX0pOmEuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNpb24iLHZlcnNpb246ZC52ZXJzaW9uKCl9KX0pfSl9ZnVuY3Rpb24gWkV0KCl7Vk4oc2VsZil9ZnVuY3Rp''@;'; put 'put ''b24gV0V0KCl7c2VsZi5vbmNvbm5lY3Q9ZnVuY3Rpb24oYyl7Y29uc3QgbD1jLnBvcnRzWzBdO1ZOKGwpLGwuc3RhcnQoKX19ZnVuY3Rpb24gVXRlKGMsbCl7aWYodGhpcy5fb3B0aW9ucz17dXNlV29ya2VyOiEwLHVzZVNoYXJlZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0''@;'; put 'put ''bGUiLGZhZGU6ITAsdHdlZW5QYXRoczohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRnZXM6ITAsem9vbTohMCx6b29tU2NhbGVFeHRlbnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEv''@;'; put 'put ''MCwtMS8wXSxbMS8wLDEvMF1dLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LGwgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGwpKXRoaXMuX29wdGlvbnNbYV09bFthXTtlbHNlImJvb2xlYW4iPT10eXBlb2YgbCYmKHRoaXMuX29wdGlv''@;'; put 'put ''bnMudXNlV29ya2VyPWwpO3ZhciBkPXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGg9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihkPSExKSx0eXBlb2YgU2hhcmVkV29ya2VyPiJ1IiYmKGg9ITEpLGR8fGgpe3ZhciB2PWN0ZSgic2NyaXB0Iiku''@;'; put 'put ''ZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQvd29ya2VyIj09d3ModGhpcykuYXR0cigidHlwZSIpfHx3cyh0aGlzKS5hdHRyKCJzcmMiKSYmd3ModGhpcykuYXR0cigic3JjIikubWF0Y2goLy4qXC9AaHBjYy1qc1wvd2FzbS8pfSk7MD09di5zaXplKCk/KGNvbnNvbGUud2Fy''@;'; put 'put ''bignTm8gc2NyaXB0IHRhZyBvZiB0eXBlICJqYXZhc2NyaXB0L3dvcmtlciIgd2FzIGZvdW5kIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9ITEpOih0aGlzLl92aXpVUkw9di5hdHRyKCJzcmMiKSx0aGlzLl92aXpVUkx8fChjb25zb2xl''@;'; put 'put ''Lndhcm4oJ05vICJzcmMiIGF0dHJpYnV0ZSBvZiB3YXMgZm91bmQgb24gdGhlICJqYXZhc2NyaXB0L3dvcmtlciIgc2NyaXB0IHRhZyBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKSl9aWYoaCl7Y29uc3QgWj0iZGF0YTphcHBsaWNh''@;'; put 'put ''dGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwiK2J0b2EoVk4udG9TdHJpbmcoKSsiKCIrV0V0LnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtlcihaKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBv''@;'; put 'put ''cnRDbG9zZT10aGlzLl93b3JrZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgaWYoZCl7dmFyIE09bmV3IEJsb2IoW1ZOLnRvU3RyaW5nKCkrIigiK1pFdC50b1N0cmluZygp''@;'; put 'put ''KyIpKCkiXSksRD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChNKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihEKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhp''@;'; put 'put ''cy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgcjdlLmxvYWQoKS50aGVuKChaPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPVoudmVyc2lvbigpfSkuYmluZCh0aGlzKSk7dGhpcy5fc2VsZWN0aW9uPWMsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2J1c3k9ITEsdGhpcy5fam9icz1bXSx0aGlzLl9x''@;'; put 'put ''dWV1ZT1bXSx0aGlzLl9rZXlNb2Rlcz1uZXcgU2V0KFsidGl0bGUiLCJpZCIsInRhZy1pbmRleCIsImluZGV4Il0pLHRoaXMuX2ltYWdlcz1bXSx0aGlzLl90cmFuc2xhdGlvbj12b2lkIDAsdGhpcy5fc2NhbGU9dm9pZCAwLHRoaXMuX2V2ZW50VHlwZXM9WyJpbml0RW5kIiwic3RhcnQiLCJs''@;'; put 'put ''YXlvdXRTdGFydCIsImxheW91dEVuZCIsImRhdGFFeHRyYWN0RW5kIiwiZGF0YVByb2Nlc3NQYXNzMUVuZCIsImRhdGFQcm9jZXNzUGFzczJFbmQiLCJkYXRhUHJvY2Vzc0VuZCIsInJlbmRlclN0YXJ0IiwicmVuZGVyRW5kIiwidHJhbnNpdGlvblN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInJl''@;'; put 'put ''c3RvcmVFbmQiLCJlbmQiLCJ6b29tIl0sdGhpcy5fZGlzcGF0Y2g9dXRlKC4uLnRoaXMuX2V2ZW50VHlwZXMpLFh4dC5jYWxsKHRoaXMpLGMubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlzfWZ1bmN0aW9uIEJOKGMsbCl7cmV0dXJuIHdzKGMpLmdyYXBodml6KGwpfWg3ZS5wcm90b3R5cGU9enRl''@;'; put 'put ''LnByb3RvdHlwZSxVdGUucHJvdG90eXBlPUJOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VXRlLGVuZ2luZTpmdW5jdGlvbiB1RXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPWMsdGhpc30sYWRkSW1hZ2U6ZnVuY3Rpb24gZEV0KGMsbCxhKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1''@;'; put 'put ''c2goe3BhdGg6Yyx3aWR0aDpsLGhlaWdodDphfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiBoRXQoYyl7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhjKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBrZXlNb2RlOiAiK2MpO2lmKGMhPXRoaXMuX29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0''@;'; put 'put ''YSl0aHJvdyBFcnJvcigiVG9vIGxhdGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPWMsdGhpc30sZmFkZTpmdW5jdGlvbiBmRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZmFkZT1jLHRoaXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gcEV0KGMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9Yyx0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiBnRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9YyxjJiYodGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPSEwKSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25z''@;'; put 'put ''OmZ1bmN0aW9uIG1FdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPWMsdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gdkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uPWMsdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6''@;'; put 'put ''ZnVuY3Rpb24gYkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPWMsdGhpc30sem9vbTpmdW5jdGlvbiB1eHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbT1jLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvcj9YOGUuY2FsbCh0aGlz''@;'; put 'put ''KTohdGhpcy5fb3B0aW9ucy56b29tJiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRoaXN9LHJlc2V0Wm9vbTpmdW5jdGlvbiBkeHQoYyl7dmFyIGw9dGhpcy5fem9vbVNlbGVjdGlvbjty''@;'; put 'put ''ZXR1cm4gYyYmKGw9bC50cmFuc2l0aW9uKGMpKSxsLmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9yOmZ1bmN0aW9uIHB4dCgpe3JldHVybiB0aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxl''@;'; put 'put ''Y3Rpb246ZnVuY3Rpb24gZ3h0KCl7cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiBoeHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50PWMsdGhpc30sem9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiBmeHQo''@;'; put 'put ''Yyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudD1jLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiB3eHQoYyl7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1c2godGhpcy5yZW5kZXIuYmluZCh0aGlzLGMpKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgi''@;'; put 'put ''cmVuZGVyU3RhcnQiLHRoaXMpLHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5P2JOKGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1NdGUodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSksZTdlLmNhbGwodGhpcyxjKX0uYmluZCh0aGlzKSwwKTplN2UuY2FsbCh0aGlzLGMpLHRoaXMpfSxsYXlv''@;'; put 'put ''dXQ6ZnVuY3Rpb24gSnh0KGMsbCxhLGQpe2lmKHRoaXMuX3dvcmtlcilIdGUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDpjLGVuZ2luZTpsLG9wdGlvbnM6YX0sZnVuY3Rpb24oZil7ZC5jYWxsKHRoaXMsZi5kYXRhKX0pO2Vsc2UgdHJ5e3ZhciBoPXRoaXMubGF5b3V0U3luYyhjLCJz''@;'; put 'put ''dmciLGwsYSk7ZC5jYWxsKHRoaXMse3R5cGU6ImRvbmUiLHN2ZzpofSl9Y2F0Y2goZil7ZC5jYWxsKHRoaXMse3R5cGU6ImVycm9yIixlcnJvcjpmLm1lc3NhZ2V9KX19LGRvdDpmdW5jdGlvbiBReHQoYyxsKXt2YXIgYT10aGlzLGg9dGhpcy5fb3B0aW9ucy5lbmdpbmUsZj10aGlzLl9pbWFn''@;'; put 'put ''ZXM7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLmNhbGwoInN0YXJ0Iix0aGlzKSx0aGlzLl9idXN5PSEwLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dFN0YXJ0Iix0aGlzKSx0aGlzLl93b3JrZXJ8fG51bGwhPXRoaXMubGF5b3V0U3luYz8odGhpcy5sYXlvdXQoYyxoLHtpbWFnZXM6Zn0sZnVu''@;'; put 'put ''Y3Rpb24oTSl7c3dpdGNoKE0udHlwZSl7Y2FzZSJlcnJvciI6aWYoIWEuX29uZXJyb3IpdGhyb3cgTS5lcnJvci5tZXNzYWdlO2EuX29uZXJyb3IoTS5lcnJvcik7YnJlYWs7Y2FzZSJkb25lIjplRXQuY2FsbCh0aGlzLE0uc3ZnLGwpfX0pLHRoaXMpOih0aGlzLl9hZnRlckluaXQ9dGhpcy5k''@;'; put 'put ''b3QuYmluZCh0aGlzLGMsbCksdGhpcyl9LGRhdGE6ZnVuY3Rpb24gYnh0KCl7cmV0dXJuIHRoaXMuX2RhdGF8fG51bGx9LHJlbmRlckRvdDpmdW5jdGlvbiB0RXQoYyxsKXt2YXIgYT10aGlzO3JldHVybiB0aGlzLmRvdChjLGZ1bmN0aW9uIGQoKXthLnJlbmRlcihsKX0pLHRoaXN9LHRyYW5z''@;'; put 'put ''aXRpb246ZnVuY3Rpb24gbkV0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/dGhpcy5fdHJhbnNpdGlvbkZhY3Rvcnk9Yzp0aGlzLl90cmFuc2l0aW9uPU10ZShjKSx0aGlzfSxhY3RpdmU6ZnVuY3Rpb24gckV0KGMpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0''@;'; put 'put ''RGF0YVByb3BhZ2F0aW9uKCJzdmciKTtyZXR1cm4gMCE9YS5zaXplKCk/ZnVuY3Rpb24gVU10KGMsbCl7dmFyIGQsaCxhPWMuX190cmFuc2l0aW9uO2lmKGEpZm9yKGggaW4gbD1udWxsPT1sP251bGw6bCsiIixhKWlmKChkPWFbaF0pLnN0YXRlPjEmJmQubmFtZT09PWwpcmV0dXJuIG5ldyB1''@;'; put 'put ''NChbW2NdXSx6TXQsbCwraCk7cmV0dXJuIG51bGx9KGEubm9kZSgpLGMpOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gaUV0KGMpe2lmKHR5cGVvZiBjPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9vcHRpb25zKTtmb3IodmFyIGwgb2YgT2JqZWN0LmtleXMoYykpdGhpcy5fb3B0''@;'; put 'put ''aW9uc1tsXT1jW2xdO3JldHVybiB0aGlzfSx3aWR0aDpmdW5jdGlvbiBhRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9Yyx0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gb0V0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmhlaWdodD1jLHRoaXN9LHNjYWxlOmZ1bmN0aW9uIHNFdChjKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fb3B0aW9ucy5zY2FsZT1jLHRoaXN9LGZpdDpmdW5jdGlvbiBsRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PWMsdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBjRXQoYyl7cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXI9Yyx0aGlzfSxvbjpmdW5jdGlvbiB5RXQoYyxs''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZGlzcGF0Y2gub24oYyxsKSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIF9FdChjKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1jLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiBJRXQoYyl7dmFyIGw9RGF0ZS5ub3coKSxhPXt9LGQ9dGhpcy5fZXZlbnRUeXBlcyxoPU1hdGgu''@;'; put 'put ''bWF4KC4uLmQubWFwKEQ9PkQubGVuZ3RoKSk7Zm9yKGxldCBEPTA7RDxkLmxlbmd0aDtEKyspe2xldCBaPWRbRF07YVtaXT1bXTt2YXIgdixNLGY9dGhpczt0aGlzLm9uKForIi5sb2ciLGM/ZnVuY3Rpb24oKXt2YXIgcmU9RGF0ZS5ub3coKSxjZT1hW1pdLmxlbmd0aDthW1pdLnB1c2gocmUp''@;'; put 'put ''O3ZhciBiZT0iIjtpZihiZSs9IkV2ZW50ICIsYmUrPWFmKCIgPjIiKShEKSsiICIsYmUrPVorIiAiLnJlcGVhdChoLVoubGVuZ3RoKSxiZSs9YWYoIiA+NSIpKHJlLWwpKyIgIiwiaW5pdEVuZCIhPVomJihiZSs9YWYoIiA+NSIpKHJlLWEuc3RhcnRbY2VdKSksImRhdGFQcm9jZXNzRW5kIj09''@;'; put 'put ''WiYmKGJlKz0iIHByZXBhcmUgICAgICAgICAgICAgICAgICIrYWYoIiA+NSIpKHJlLWEubGF5b3V0RW5kW2NlXSkpLCJyZW5kZXJFbmQiPT1aJiZmLl90cmFuc2l0aW9uJiYoYmUrPSIgdHJhbnNpdGlvbiBzdGFydCBtYXJnaW4gIithZigiID41IikoZi5fdHJhbnNpdGlvbi5kZWxheSgpLShy''@;'; put 'put ''ZS1hLnJlbmRlclN0YXJ0W2NlXSkpLHY9Zi5fdHJhbnNpdGlvbi5kZWxheSgpLE09Zi5fdHJhbnNpdGlvbi5kdXJhdGlvbigpKSwidHJhbnNpdGlvblN0YXJ0Ij09Wil7dmFyIEVlPXJlLWEucmVuZGVyU3RhcnRbY2VdO2JlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrYWYoIiA+NSIp''@;'; put 'put ''KHJlLWEucmVuZGVyU3RhcnRbY2VdKSxiZSs9IiBleHBlY3RlZCAiK2FmKCIgPjUiKSh2KSxiZSs9IiBkaWZmICIrYWYoIiA+NSIpKEVlLXYpfWlmKCJ0cmFuc2l0aW9uRW5kIj09Wil7dmFyIEJlPXJlLWEudHJhbnNpdGlvblN0YXJ0W2NlXTtiZSs9IiB0cmFuc2l0aW9uIGR1cmF0aW9uICAg''@;'; put 'put ''ICAiK2FmKCIgPjUiKShCZSksYmUrPSIgZXhwZWN0ZWQgIithZigiID41IikoTSksYmUrPSIgZGlmZiAiK2FmKCIgPjUiKShCZS1NKX1jb25zb2xlLmxvZyhiZSksbD1yZX06bnVsbCl9cmV0dXJuIHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24gUkV0KCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9zZWxl''@;'; put 'put ''Y3Rpb24ubm9kZSgpLl9fZ3JhcGh2aXpfXyx0aGlzLl93b3JrZXImJnRoaXMuX3dvcmtlclBvcnRDbG9zZSgpLHRoaXN9LGRyYXdFZGdlOmZ1bmN0aW9uIEZFdChjLGwsYSxkLGgsZj17fSl7aWYoKGg9T2JqZWN0LmFzc2lnbih7fSxoKSkuc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlz''@;'; put 'put ''IikpdmFyIHY9d3MobnVsbCk7ZWxzZXt2YXIgWj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLGNlPW52KHY3ZS5jYWxsKHRoaXMsaCkpO3Y9Wi5hcHBlbmQoImciKS5kYXRhKFtjZV0p''@;'; put 'put ''LE9BLmNhbGwodi5ub2RlKCksY2UpLGY3ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZil9cmV0dXJuIHRoaXMuX2RyYXduRWRnZT17Zzp2LHgxOmMseTE6bCx4MjphLHkyOmQsYXR0cmlidXRlczpofSx0aGlzfSx1cGRhdGVEcmF3bkVkZ2U6ZnVuY3Rpb24gSEV0KGMsbCxhLGQsaD17fSxmPXt9''@;'; put 'put ''KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIHY9dGhpcy5fZHJhd25FZGdlLmc7cmV0dXJuIGg9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcyxoKSx0aGlzLl9kcmF3bkVkZ2UueDE9Yyx0aGlzLl9k''@;'; put 'put ''cmF3bkVkZ2UueTE9bCx0aGlzLl9kcmF3bkVkZ2UueDI9YSx0aGlzLl9kcmF3bkVkZ2UueTI9ZCwhdi5lbXB0eSgpfHxoLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwodj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0''@;'; put 'put ''V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduRWRnZS5nPXYpLHYuZW1wdHkoKXx8ZjdlLmNhbGwodGhpcyx2LGMsbCxhLGQsaCxmKSx0aGlzfSxtb3ZlRHJhd25FZGdlRW5kUG9pbnQ6ZnVuY3Rpb24gTkV0KGMsbCxhPXt9KXtpZighdGhpcy5fZHJh''@;'; put 'put ''d25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25FZGdlLmcsaD10aGlzLl9kcmF3bkVkZ2UueDEsZj10aGlzLl9kcmF3bkVkZ2UueTEsdj10aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25FZGdlLngy''@;'; put 'put ''PWMsdGhpcy5fZHJhd25FZGdlLnkyPWwscDdlKGQsaCxmLGMsbCx2LGEpLHRoaXN9LGluc2VydERyYXduRWRnZTpmdW5jdGlvbiBWRXQoYyl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBsPXRoaXMuX2RyYXduRWRnZS5nO2lm''@;'; put 'put ''KGwuZW1wdHkoKSlyZXR1cm4gdGhpcztsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKTt2YXIgdj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLE09''@;'; put 'put ''di5kYXR1bSgpLEQ9dGhpcy5fZXh0cmFjdERhdGEobCxNLmNoaWxkcmVuLmxlbmd0aCx2LmRhdHVtKCkpO3JldHVybiBNLmNoaWxkcmVuLnB1c2goRCksRHRlKGwsRCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpc30scmVtb3ZlRHJhd25FZGdlOmc3ZSxyZW1vdmVEcmF3bkVkZ2U6ZzdlLGRy''@;'; put 'put ''YXduRWRnZVNlbGVjdGlvbjptN2UsZHJhd25FZGdlU2VsZWN0aW9uOm03ZSxkcmF3Tm9kZTpmdW5jdGlvbiBCRXQoYyxsLGEsZD17fSxoPXt9KXtpZigoZD1PYmplY3QuYXNzaWduKHt9LGQpKS5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgZj13cyhudWxsKTtlbHNle3Zh''@;'; put 'put ''ciBEPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikscmU9bnYoQzdlLmNhbGwodGhpcyxhLGQpKTtmPUQuYXBwZW5kKCJnIikuZGF0YShbcmVdKSxPQS5jYWxsKGYubm9kZSgpLHJlKSxi''@;'; put 'put ''N2UuY2FsbCh0aGlzLGYsYyxsLGEsZCxoKX1yZXR1cm4gdGhpcy5fZHJhd25Ob2RlPXtnOmYsbm9kZUlkOmEseDpjLHk6bCxhdHRyaWJ1dGVzOmR9LHRoaXN9LHVwZGF0ZURyYXduTm9kZTpmdW5jdGlvbiBqRXQoYyxsLGEsZD17fSxoPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVy''@;'; put 'put ''cm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIGY9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIG51bGw9PWEmJihhPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpLGQ9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcyxkKSx0aGlzLl9kcmF3bk5vZGUubm9kZUlk''@;'; put 'put ''PWEsdGhpcy5fZHJhd25Ob2RlLng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLCFmLmVtcHR5KCl8fGQuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChmPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVBy''@;'; put 'put ''b3BhZ2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25Ob2RlLmc9ZiksZi5lbXB0eSgpfHxiN2UuY2FsbCh0aGlzLGYsYyxsLGEsZCxoKSx0aGlzfSxtb3ZlRHJhd25Ob2RlOmZ1bmN0aW9uIHpFdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8g''@;'; put 'put ''bm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduTm9kZS5nLGg9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCxkLmVtcHR5KCl8fHk3ZShkLGMsbCxoKSx0aGlzfSxpbnNlcnREcmF3bk5v''@;'; put 'put ''ZGU6ZnVuY3Rpb24gVUV0KGMpe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTtudWxsPT1jJiYoYz10aGlzLl9kcmF3bk5vZGUubm9kZUlkKTt2YXIgbD10aGlzLl9kcmF3bk5vZGUuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7dmFy''@;'; put 'put ''IGE9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7aWYobC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyksYS5VUkx8fGEudG9vbHRpcCl2YXIgZj1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0''@;'; put 'put ''aW9uKCJhIiksTT0oZi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpKTtlbHNlIGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5''@;'; put 'put ''Z29uLHBhdGgscG9seWxpbmUiKSxNPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO00udGV4dChhLmxhYmVsfHxjKTt2YXIgcmU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRp''@;'; put 'put ''b24oImciKSxjZT1yZS5kYXR1bSgpLGJlPXRoaXMuX2V4dHJhY3REYXRhKGwsY2UuY2hpbGRyZW4ubGVuZ3RoLHJlLmRhdHVtKCkpO3JldHVybiBjZS5jaGlsZHJlbi5wdXNoKGJlKSxEdGUobCxiZSksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc30scmVtb3ZlRHJhd25Ob2RlOl83ZSxyZW1v''@;'; put 'put ''dmVEcmF3bk5vZGU6XzdlLGRyYXduTm9kZVNlbGVjdGlvbjp3N2UsZHJhd25Ob2RlU2VsZWN0aW9uOnc3ZSxncmFwaHZpelZlcnNpb246ZnVuY3Rpb24gQ3h0KCl7cmV0dXJuIHRoaXMuX2dyYXBodml6VmVyc2lvbn19LHE5LnByb3RvdHlwZS5ncmFwaHZpej1mdW5jdGlvbiBZRXQoYyl7dmFy''@;'; put 'put ''IGw9dGhpcy5ub2RlKCkuX19ncmFwaHZpel9fO3JldHVybiBsPyhsLm9wdGlvbnMoYyksYk4oZnVuY3Rpb24oKXtsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKX0uYmluZCh0aGlzKSwwKSk6bD1uZXcgVXRlKHRoaXMsYyksbH0scTkucHJvdG90eXBlLnNlbGVjdFdpdGhvdXREYXRh''@;'; put 'put ''UHJvcGFnYXRpb249ZnVuY3Rpb24gR0V0KGMpe3JldHVybiB3cyh0aGlzLnNpemUoKT4wP3RoaXMubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoYyk6bnVsbCl9O3ZhciAkRXQ9eSg5ODA4Myk7ZnVuY3Rpb24gS0V0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIHFFdChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gWEV0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjQpKDEsImRpdiIsMjUpKDIsImlucHV0IiwyNiwyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVz''@;'; put 'put ''U2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxLRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUscUV0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhh''@;'; put 'put ''KDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSkV0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0''@;'; put 'put ''aW9uIFFFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qo''@;'; put 'put ''di50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIGVUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMzYsMyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVPbkZp''@;'; put 'put ''bHRlcihoLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksaGUoKSxndCg0LEpFdCwxLDAsImNsci1pY29uIiwyNykoNSxRRXQsMSwwLCJjbHItaWNvbiIsMjgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgyKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3Ry''@;'; put 'put ''aW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHRUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBuVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt''@;'; put 'put ''aWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgpLiRpbXBsaWNpdCx2PVJlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCl9''@;'; put 'put ''fWZ1bmN0aW9uIHJUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMzksMyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYu''@;'; put 'put ''c2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykudHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCksZ3QoNCx0VHQsMSww''@;'; put 'put ''LCJjbHItaWNvbiIsMjcpKDUsblR0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGlUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDQwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1SZSgpLiRpbXBsaWNpdCx2''@;'; put 'put ''PVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsNDEpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg0KTtmZSgpLFRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2''@;'; put 'put ''ZShhLkNPTFVSSSkpLGZlKDIpLERyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gYVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1w''@;'; put 'put ''bGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgx''@;'; put 'put ''LCJwIiwzNyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRhYmxlT25DbGljayhoLlRBQkxFVVJJLGgsZikpfSksR3QoMiwiY2xyLWljb24iLDM4KSxMZSgzKSxoZSgpLGd0KDQsclR0LDYsMywi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsNSkoNSxpVHQsNCwzLCJjbHItdHJlZS1ub2RlIiw2KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdD''@;'; put 'put ''b2x1bW5zJiYhYS5jb2x1bW5zKSxmZSgpLE1lKCJpZCIsYS5UQUJMRVVSSSksZmUoMiksRHIoIiAiLGEuVEFCTEVOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBvVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1SZSgpO3JldHVybiBm''@;'; put 'put ''LmxpYj1oLkxJQlJBUllJRCxDdChmLmxpYnJhcnlPbkNsaWNrKGYubGlifHwiIixoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzQpLExlKDMpLGhlKCksZ3QoNCxlVHQsNiwzLCJjbHItdHJlZS1ub2RlIiw1KSg1LGFUdCw2LDgsImNsci10cmVlLW5vZGUiLDM1KSxoZSgpfWlmKDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLnRhYmxlcyksZmUoKSxNZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBzVHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLG9UdCw2LDcsImNsci10cmVlLW5vZGUiLDMxKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuJiZh''@;'; put 'put ''LmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIGxUdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDIpKDEsInNwYW4iLDQzKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIGNUdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIs''@;'; put 'put ''NDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgY29sdW1uIG9yIHRhYmxlICIpLGhlKCkoKSl9ZnVuY3Rpb24gdVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiaDMiLDU1KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiICIsYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4/''@;'; put 'put ''YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSsiLiIrYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW46YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSwiICIpfX1mdW5jdGlvbiBkVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDUzKSxndCgxLHVUdCwyLDEsImgzIiw1NCksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbiYmIWEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUpfX1mdW5jdGlvbiBoVHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksZGUoMiwiYSIsNTYpLExlKDMpLGhlKCks''@;'; put 'put ''TGUoNCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksRHIoIiAiLGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzBdLCIuIiksZmUoKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLmxpbmVhZ2VUYWJsZU5hbWUpLGZlKCksd3IoYS5saW5lYWdlVGFibGVOYW1lLnNw''@;'; put 'put ''bGl0KCIuIilbMV0pLGZlKCksRHIoIiIsYS5saW5lYWdlQ29sdW1uTmFtZS5sZW5ndGg+MD8iLiIrYS5saW5lYWdlQ29sdW1uTmFtZToiIiwiICIpfX1mdW5jdGlvbiBmVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KFJlKDQpLmRvd25sb2FkUE5HKCkpfSksTGUoMSwiIFBORyAiKSxoZSgpfX1mdW5jdGlvbiBwVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLmRvd25sb2FkQ1NW''@;'; put 'put ''KCkpfSksTGUoMSwiIENTViAiKSxoZSgpfX1mdW5jdGlvbiBnVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuZG93bmxvYWRTVkcoKSl9''@;'; put 'put ''KSxMZSgyLCJTVkciKSxoZSgpLGd0KDMsZlR0LDIsMCwiZGl2Iiw2NyksZGUoNCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5kb3dubG9hZERvdCgpKX0pLExlKDUsIkRvdCIpLGhlKCksZ3QoNixwVHQsMiwwLCJkaXYiLDY3KSxoZSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxNZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCksZmUoMyksTWUoIm5nSWYiLGEuZmxhdGRhdGEpfX1mdW5jdGlvbiBtVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjgp''@;'; put 'put ''KDEsImlucHV0Iiw2OSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuZ2VuZXJhdGVHcmFwaCgpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpO3JldHVybiBtaShmLnJlZnJlc2hDYWNoZSxoKXx8KGYucmVm''@;'; put 'put ''cmVzaENhY2hlPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJsYWJlbCIpLExlKDMsIlJlZnJlc2ggQ2FjaGUiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCkscGkoIm5nTW9kZWwiLGEucmVmcmVzaENhY2hlKX19ZnVuY3Rpb24gdlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''ZGUoMCwiZGl2Iiw1NykoMSwiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5saW1pdERvdERlcHRoPSEwKX0pLExlKDIsIiBMaW1pdCBkZXB0aCAiKSxoZSgpLGRlKDMsImRpdiIsNTkpKDQsImRpdiIsNjApLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSExLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg1LCJpbnB1dCIsNjEpLGRlKDYsImxh''@;'; put 'put ''YmVsIiksTGUoNywiQmFja3dhcmQiKSxoZSgpKCksZGUoOCwiZGl2Iiw2MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITAsQ3QoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGlj''@;'; put 'put ''aygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKX0pLEd0KDksImlucHV0Iiw2MSksZGUoMTAsImxhYmVsIiksTGUoMTEsIkZvcndhcmQiKSxoZSgpKCkoKSxkZSgxMiwiY2xyLWRyb3Bkb3duIiw2MikoMTMsImJ1dHRvbiIsNjMpLExlKDE0LCIgRG93bmxvYWQgIiksR3QoMTUsImNs''@;'; put 'put ''ci1pY29uIiwyMiksaGUoKSxndCgxNixnVHQsNywyLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCksZ3QoMTcsbVR0LDQsMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg1KSxNZSgiY2hlY2tlZCIsIWEuZm9yd2FyZExpbmVhZ2Up''@;'; put 'put ''LGZlKDQpLE1lKCJjaGVja2VkIixhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSxNZSgiZGlzYWJsZWQiLCFhLmNvbHVtbiYmIWEudGFibGUpLGZlKDQpLE1lKCJuZ0lmIixhLmNvbHVtbil9fWZ1bmN0aW9uIGJUdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDczKSxMZSgxLCIgTG9hZGluZy4uLiAi''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiB5VHQoYyxsKXsxJmMmJkd0KDAsInNwYW4iLDQzKX1mdW5jdGlvbiBfVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc0KSgxLCJkaXYiLDc1KSxndCgyLHlUdCwxLDAsInNwYW4iLDc2KSxoZSgpLEd0KDMsImRpdiIsNzcpLGhlKCkpLDImYyl7Y29uc3QgYT1S''@;'; put 'put ''ZSgzKTtmZSgyKSxNZSgibmdJZiIsYS5ncmFwaFJlbmRlcmluZyl9fWZ1bmN0aW9uIHdUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsNzApLGd0KDIsYlR0LDIsMCwic3BhbiIsNzEpKDMsX1R0LDQsMSwiZGl2Iiw3MiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7VHIo''@;'; put 'put ''Im10LTIiLGEudGFibGVGbGFnKSxmZSgyKSxNZSgibmdJZiIsYS5ncmFwaExvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLmdyYXBoTG9hZGluZyl9fWZ1bmN0aW9uIENUdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsZFR0LDIsMSwiZGl2Iiw0NyksZGUoMiwiZGl2Iiw0OCkoMywic2VjdGlv''@;'; put 'put ''biIsNDkpKDQsImRpdiIsNTApLGd0KDUsaFR0LDUsNCwic3BhbiIsMTEpLGhlKCksZ3QoNix2VHQsMTgsNCwiZGl2Iiw1MSksaGUoKSxndCg3LHdUdCw0LDQsImRpdiIsNTIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEuZ3JhcGhDb250YWluZXIpLGZl''@;'; put 'put ''KDQpLE1lKCJuZ0lmIixhLmxpbmVhZ2VUYWJsZU5hbWUubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpLGZlKCksTWUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpfX1mdW5jdGlvbiBTVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY2KSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLnJlbmRlclRvRG93bmxvYWQoIlBORyIpKX0pLExlKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gTVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYi''@;'; put 'put ''LDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksTGUoMiwiU1ZHIiksaGUoKSxndCgzLFNUdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PVJlKCk7cmV0dXJuIGguZG93bmxvYWREb3QoKSxDdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksTGUoNSwiIERvdCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksTWUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpfX1jb25zdCB4VHQ9eSg5NzU4''@;'; put 'put ''Nik7bGV0IGpOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5sb2NhdGlvbj12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlPUQsdGhpcy5oZWxwZXJTZXJ2aWNlPVosdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhD''@;'; put 'put ''b250YWluZXI9ITEsdGhpcy52aXpJbnB1dD0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJsZUNvbHVtbnNSZWY9IiIsdGhpcy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNv''@;'; put 'put ''bHVtbk5hbWU9IiIsdGhpcy5saWI9bnVsbCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLnJlZnJlc2hDYWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0''@;'; put 'put ''aGlzLmxhcmdlRG90RmlsZUxpbWl0PTFlMyx0aGlzLmxpbWl0RG90RGVwdGg9ITEsdGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhh''@;'; put 'put ''LGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKHYsTSxELFo9ITEpe00uY29sdW1ucz8oTS5leHBhbmRlZD0hTS5leHBhbmRlZCwhMD09PU0uZXhwYW5kZWQmJihmLnRhYmxlPXYsWnx8Zi5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKTooTS5leHBhbmRlZD0hTS5leHBh''@;'; put 'put ''bmRlZCxNLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9dixmLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPU0uTElCTkFNRSsiLiIrTS5UQUJMRU5BTUUseWllbGQgZi5zZWxlY3RUYWJsZSh2LE0pLFp8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxmLmNvbGxhcHNlVHJlZUl0''@;'; put 'put ''ZW1zKEQudGFibGVzLE0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2Uu''@;'; put 'put ''cmVxdWVzdCgibGluZWFnZS9nZXRtZXRhY29scyIsZikudGhlbih2PT57aC5jb2x1bW5zTGlzdD12LmFkYXB0ZXJSZXNwb25zZS5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxv''@;'; put 'put ''YWRpbmdDb2x1bW5zPSExKX0pLmNhdGNoKHY9PnYpLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJy''@;'; put 'put ''YXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9''@;'; put 'put ''PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5pbkZvcmVncm91bmQ9ITAsZC50YWJsZXM/ZC5leHBhbmRlZD0hZC5leHBhbmRlZDooZC5sb2FkaW5nVGFibGVz''@;'; put 'put ''PSEwLHlpZWxkIGguc2VsZWN0TGlicmFyeShhLGQpKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGgubGlicmFyeUxpc3QsZCl9KSgpfXNlbGVjdExpYnJhcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17''@;'; put 'put ''U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbih2PT57aC50YWJsZXNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVu''@;'; put 'put ''Z3RoPjAmJihkLnRhYmxlcz1oLnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0''@;'; put 'put ''aGlzLmNvbHVtbj1hLkNPTFVSSSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9u''@;'; put 'put ''RmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0''@;'; put 'put ''KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0tuLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxLbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LEtu''@;'; put 'put ''LmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhpcy5jb2x1bW5zTGlzdCxLbi5saW5lYWdlLmxpYj10aGlzLmxpYixLbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsS24ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PUtuLmxpbmVhZ2Uu''@;'; put 'put ''bGlicmFyeUxpc3QsdGhpcy50YWJsZXNMaXN0PUtuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUtuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9S24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0''@;'; put 'put ''IGQ7dGhpcy5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFn''@;'; put 'put ''ZSI7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiks''@;'; put 'put ''dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0''@;'; put 'put ''ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7S24ubGluZWFnZS5saWJyYXJ5TGlzdCYmKEtuLmxpbmVhZ2UubGlicmFyeUxpc3QubGVuZ3RoPjA/YS5sb2FkR2xvYmFsRGF0''@;'; put 'put ''YSgpOnlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpLnRoZW4odj0+e2EubGlicmFyeUxpc3Q9di5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0''@;'; put 'put ''JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoYS5saWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+diksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vi''@;'; put 'put ''c2NyaWJlKHY9PnthLm9uUm91dGVDaGFuZ2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJp''@;'; put 'put ''LGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGlyZWN0aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhp''@;'; put 'put ''cy5jb2x1bW49YSx0aGlzLmdlbmVyYXRlR3JhcGgoYSxkLGYpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikp''@;'; put 'put ''fSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/''@;'; put 'put ''dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRl''@;'; put 'put ''eHQoKSxkPXRoaXMudGFibGUuaW5jbHVkZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9y''@;'; put 'put ''dE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250''@;'; put 'put ''YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoTSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIFo9ZWUoZnVuY3Rpb24qKHJlKXtpZihyZS5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5k''@;'; put 'put ''ZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiByZSlyZXR1cm4gZi52aXpJbnB1dD0iZGln''@;'; put 'put ''cmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3JlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgY2U9cmUuYWRhcHRlclJlc3BvbnNlLmZpbmFs''@;'; put 'put ''ZmluYWwsYmU9IiI7Zm9yKGxldCBFZT0wO0VlPGNlLmxlbmd0aDtFZSsrKWJlKz11bmVzY2FwZShjZVtFZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPXJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgRWU9Zi5saWJyYXJ5TGlzdC5maW5kKEJlPT5yZS5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhCZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKEVlKXtsZXQgQmU7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5m''@;'; put 'put ''aW5kKHFlPT5xZS5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLEJlKSl7aWYoZi50YWJsZT1CZS5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBxZT1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxc''@;'; put 'put ''XCIpO3NldFRpbWVvdXQoKCk9PntsZXQgcnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3FlfSddYCk7cnQmJnJ0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2soQmUuVEFCTEVVUkksQmUsRWUsdm9pZCAwIT09ZCl9RWUmJihFZS5leHBhbmRlZD0hMCksQmUm''@;'; put 'put ''JihCZS5leHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9YmV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9cmUuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLmlkbG9va3VwLHJlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cmUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbihy''@;'; put 'put ''ZSl7cmV0dXJuIFouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goWj0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9''@;'; put 'put ''Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRj''@;'; put 'put ''aCh0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2''@;'; put 'put ''YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFwaCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVu''@;'; put 'put ''ZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgTSxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUi''@;'; put 'put ''KS5pbm5lckhUTUwsdj1hLmZpbmQoRD0+RC5NRVRBSUQ9PT1mKTt2JiYoTT0iVEFCTEUiPT09di5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK3YuTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK3YuTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIoImNsaWNrIixEPT57dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246''@;'; put 'put ''ZHx8Zi5kaXJlY3Rpb25UZXh0KCkscmVmcmVzaDpmLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZp''@;'; put 'put ''bmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgo''@;'; put 'put ''TSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7aWYocmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFn''@;'; put 'put ''ZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBk''@;'; put 'put ''YXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUuYWRhcHRlclJlc3BvbnNlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7''@;'; put 'put ''Zi5saW5lYWdlVGFibGVOYW1lPXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrcmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTkFNRSxmLmxpbmVhZ2VDb2x1bW5OYW1lPXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkNPTE5BTUUsZi5pZGxvb2t1cD1yZS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UuaWRsb29rdXA7bGV0IGNlPXJlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLGJlPSIiO2ZvcihsZXQgRWU9MDtFZTxjZS5sZW5ndGg7RWUrKyliZSs9dW5lc2NhcGUoY2VbRWVdLlNUUklORykrIlxuIjtpZihmLnZpeklucHV0PWJlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdl''@;'; put 'put ''IEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmZsYXRkYXRhPXJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgQmUsRWU9Zi5saWJyYXJ5TGlzdC5maW5k''@;'; put 'put ''KHFlPT5yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhxZT8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7RWUmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKEVlLkxJQlJBUllJRCxFZSksRWUudGFibGVzJiYoQmU9RWUudGFibGVz''@;'; put 'put ''LmZpbmQocWU9PnFlLlRBQkxFVVJJPT09cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCVVJJKSxCZSYmZi50YWJsZU9uQ2xpY2soQmUuVEFCTEVVUkksQmUsRWUsITApLnRoZW4oKCk9PntsZXQgcWU9QmUuVEFCTEVVUkk7aWYocWUpe2NvbnN0IHJ0PXFlLnJlcGxhY2UoIlxcIiwiXFxc''@;'; put 'put ''XCIpO2xldCBwdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7cnR9J11gKTtzZXRUaW1lb3V0KCgpPT57cHQmJihmLmxvZ2dlclNlcnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLEVlKSxwdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksRWUmJihFZS5leHBhbmRlZD0hMCks''@;'; put 'put ''QmUmJihCZS5leHBhbmRlZD0hMCkpfXJlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihyZSl7cmV0dXJuIFouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goWj0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxp''@;'; put 'put ''emVyLGg9bmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGgpfWdldFNWR0Jsb2IoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVy''@;'; put 'put ''O3JldHVybiBuZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSl9ZG93bmxvYWRTVkcoKXtpZihCTigiI2dyYXBoIikucmVzZXRab29tKCksbmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cu''@;'; put 'put ''bmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXRTVkdCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0U1ZHVVJMKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIp''@;'; put 'put ''LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fWRvd25sb2FkUE5HKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Qk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLCRFdC5zYXZlU3ZnQXNQbmcoZG9jdW1l''@;'; put 'put ''bnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0ocmUsY2UpPT5udWxsPT09Y2U/IiI6Y2UsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChyZT0+aC5t''@;'; put 'put ''YXAoY2U9PkpTT04uc3RyaW5naWZ5KHJlW2NlXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCB2PWYuam9pbigiXHJcbiIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxEPW5ldyBCbG9iKFt2XSx7dHlwZToidGV4dC9jc3YifSk7aWYobmF2aWdh''@;'; put 'put ''dG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoRCx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3ZhciBaPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKEQpO00uaHJlZj1aLE0uZG93bmxvYWQ9dGhp''@;'; put 'put ''cy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSxNLmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoWiksTS5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9i''@;'; put 'put ''amVjdFVSTChkKX1nZXREb3RCbG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1Nh''@;'; put 'put ''dmVCbG9iKHRoaXMuZ2V0RG90QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgidHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERvdFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVudC5ib2R5''@;'; put 'put ''LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntCTigiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90''@;'; put 'put ''KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsdj14VHQoKS5mb3JtYXQoIllZ''@;'; put 'put ''TU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMubGlicmFyeUxpc3QuZmluZChEPT5ELkxJQlJBUllJRD09dGhpcy5saWIpO00mJihkPWBfJHtNLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50''@;'; put 'put ''YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy50YWJsZXNMaXN0LmZpbmQoRD0+RC5UQUJMRVVSST09dGhpcy50YWJsZSk7TSYmKGg9YF8ke00uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmNvbHVtbnNMaXN0''@;'; put 'put ''LmZpbmQoRD0+RC5DT0xVUkk9PXRoaXMuY29sdW1uKTtNJiYoZj1gXyR7TS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke3Z9LiR7YX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUx''@;'; put 'put ''KSxHZShCcyksR2UoQ3UpLEdlKExzKSxHZShmaCksR2UodmMpLEdlKFNkKSxHZShTdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZhcnM6MTEs''@;'; put 'put ''Y29uc3RzOltbIm1heERlcHRoRG90IiwiIl0sWyJtYXhEZXB0aCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9y''@;'; put 'put ''T2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEs''@;'; put 'put ''Im1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2YWx1ZSIsMSwi''@;'; put 'put ''Y2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwi''@;'; put 'put ''YnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxG''@;'; put 'put ''b2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVz''@;'; put 'put ''IiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJj''@;'; put 'put ''bHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJF''@;'; put 'put ''eHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJd''@;'; put 'put ''LFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBl''@;'; put 'put ''Iiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRl''@;'; put 'put ''bXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQt''@;'; put 'put ''ZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1m''@;'; put 'put ''bGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtci01IiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkaXJlY3Rpb24iLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlv''@;'; put 'put ''IiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNrYm94Iiwi''@;'; put 'put ''Y2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lmIl0sWzEs''@;'; put 'put ''InNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUo''@;'; put 'put ''MCwiYXBwLXNpZGViYXIiLDQpLEZ0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZGUoMSwiY2xyLXRyZWUiKSxndCgyLFhFdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDMsc1R0LDIsMSwibmctY29udGFpbmVy''@;'; put 'put ''Iiw2KSxoZSgpLGd0KDQsbFR0LDMsMCwiZGl2Iiw3KSxoZSgpLGRlKDUsImRpdiIsOCkoNiwiZGl2Iiw5KSxndCg3LGNUdCw0LDAsImRpdiIsMTApKDgsQ1R0LDgsNCwibmctY29udGFpbmVyIiwxMSksaGUoKSgpLGRlKDksImNsci1tb2RhbCIsMTIpKDEwLCJoMyIsMTMpLExlKDExLCJMaW1p''@;'; put 'put ''dCBEZXB0aCIpLGhlKCksZGUoMTIsImRpdiIsMTQpKDEzLCJwIiksTGUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSxoZSgpKCksZGUoMTUsImRpdiIsMTUpKDE2LCJkaXYiLDE2KSxHdCgxNywiaW5wdXQiLDE3''@;'; put 'put ''LDApLGhlKCksZGUoMTksImNsci1jb250cm9sLWhlbHBlciIsMTgpLExlKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLGhlKCksZGUoMjEsImRpdiIsMTkpKDIyLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxMZSgyMywiIENhbmNlbCAiKSxoZSgpLGRlKDI0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT1oYSgxOCk7cmV0dXJuIGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSksQ3QoaC5s''@;'; put 'put ''aW1pdERvdERlcHRoPSExKX0pLExlKDI1LCIgUmVzdWJtaXQgIiksaGUoKSgpKCkoKSxkZSgyNiwiY2xyLW1vZGFsIiwxMikoMjcsImgzIiwxMyksTGUoMjgsIldhcm5pbmciKSxoZSgpLGRlKDI5LCJkaXYiLDE0KSgzMCwicCIpLExlKDMxKSxoZSgpKCksZGUoMzIsImRpdiIsMTUpKDMzLCJk''@;'; put 'put ''aXYiLDE5KSgzNCwicCIpLExlKDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLGhlKCksZGUoMzYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkpfSksTGUoMzcs''@;'; put 'put ''IiBSZW5kZXIgIiksaGUoKSgpLGRlKDM4LCJkaXYiLDE5KSgzOSwicCIpLExlKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksaGUoKSxkZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMjEpLExlKDQzLCIgRG93bmxvYWQgIiks''@;'; put 'put ''R3QoNDQsImNsci1pY29uIiwyMiksaGUoKSxndCg0NSxNVHQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCkoKSxkZSg0NiwiZGl2IiwxOSkoNDcsInAiKSxMZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxoZSgpLEd0KDQ5LCJpbnB1dCIs''@;'; put 'put ''MTcsMSksZGUoNTEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDUwKTtyZXR1cm4gQ3QoaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSl9KSxMZSg1MiwiIFJlc3VibWl0ICIpLGhlKCkoKSxkZSg1MywiZGl2IiwxOSkoNTQsInAiKSxM''@;'; put 'put ''ZSg1NSwiQ2FuY2VsIHRoaXMgc3VibWlzc2lvbiIpLGhlKCksZGUoNTYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLExlKDU3LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCl9MiZkJiYoZmUoMiksTWUo''@;'; put 'put ''Im5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgzKSxNZSgibmdJZiIsIWguY29sdW1uJiYhaC50YWJsZSksZmUoKSxNZSgibmdJZiIsaC5jb2x1bW58fGgudGFibGUpLGZlKCks''@;'; put 'put ''TWUoImNsck1vZGFsT3BlbiIsaC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDE3KSxNZSgiY2xyTW9kYWxPcGVuIixudWxsIT09aC5sYXJnZURvdEZpbGVMaW5lcykoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg1KSxEcigiIFRoZSBnZW5lcmF0ZWQgZG90IGZp''@;'; put 'put ''bGUgaGFzICIsaC5sYXJnZURvdEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxmZSgxMSksTWUoImRpc2FibGVkIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSl9LGRlcGVuZGVuY2llczpbbnMs''@;'; put 'put ''YmEsYzEscWwsTWQsbmwsJHMsRWgsUGQsZmcsSGwsb3UsS3UsajAsTDIsZHMsakwsSWQsU2gsWjEsc2csZzcsbTcsVnksaTQscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRVR0PSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiBUVHQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJvcHRpb24iLDE0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Zk0oInZhbHVlIixhKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEFUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDIwKX1mdW5jdGlvbiBrVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtkZSgwLCJjbHItaWNvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLEN0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIERUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSgxLCJkaXYiLDE2KSgyLCJpbnB1dCIsMTcsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5tZXRhRGF0YVNlYXJjaCxoKXx8KGYubWV0YURhdGFTZWFyY2g9aCksQ3QoaCl9KSxG''@;'; put 'put ''dCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxBVHQsMSwwLCJjbHItaWNvbiIsMTgpKDUsa1R0LDEsMCwiY2xyLWljb24iLDE5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxw''@;'; put 'put ''aSgibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBJVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMyksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubWV0YURhdGFMaXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1w''@;'; put 'put ''bGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQsQ3QoZi5tZXRhRGF0YU9u''@;'; put 'put ''Q2xpY2soZi5tZXRhRGF0YUlkLGgpKX0pLEd0KDIsImNsci1pY29uIiwyNSksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUo''@;'; put 'put ''MyksRHIoIiAiLGEuSUQsIiAiKX19ZnVuY3Rpb24gUlR0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxJVHQsNCwzLCJjbHItdHJlZS1ub2RlIiwyMiksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIExUdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsMjYpLEd0KDEsImNsci1pY29uIiwyNyksZGUoMiwicCIsMjgpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdHlwZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIE9UdChjLGwpezEmYyYmKGRlKDAsImg0IiksTGUoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIpLGhlKCkpfWZ1''@;'; put 'put ''bmN0aW9uIFBUdChjLGwpezEmYyYmKGRlKDAsImg0IiksTGUoMSwiTG9hZGluZyBtZXRhZGF0YSBvYmplY3RzIiksaGUoKSl9ZnVuY3Rpb24gRlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxPVHQsMiwwLCJoNCIsMzEpKDIsUFR0LDIsMCwiaDQiLDMxKSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24gSFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSkoMSwic3BhbiIsMzApLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCks''@;'; put 'put ''Z3QoMyxGVHQsMywyLCJkaXYiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxNZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gTlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzOCkoMSwiaW5wdXQiLDM5LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBtaShmLm1ldGFPYmplY3RTZWFyY2gsaCl8fChmLm1ldGFPYmplY3RTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm1ldGFPYmplY3RPbkZpbHRlcigpKX0pLGhl''@;'; put 'put ''KCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxwaSgibmdNb2RlbCIsYS5tZXRhT2JqZWN0U2VhcmNoKX19ZnVuY3Rpb24gVlR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIEJUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBqVHQo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIHpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxn''@;'; put 'put ''dCgzLFZUdCwxLDAsImNsci1pY29uIiw1MSkoNCxCVHQsMSwwLCJjbHItaWNvbiIsNTIpLExlKDUpLGhlKCksZ3QoNixqVHQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLFRyKCJvYmplY3QtaGVhZGVyIiwh''@;'; put 'put ''YS5jb3VudCksZmUoMiksTWUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLE1lKCJuZ0lmIixhLmNvdW50KSxmZSgpLERyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLE1lKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIFVUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0NyksZ3QoMSx6''@;'; put 'put ''VHQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksZWwoMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNik7TWUoImNsckxhenkiLCEwKSxmZSgpLE1lKCJjbHJSZWN1cnNpdmVGb3JPZiIsRGMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hp''@;'; put 'put ''bGRyZW4pfX1mdW5jdGlvbiBaVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxndCgxLFVUdCwzLDUsImNsci10cmVlIiw0NiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIFdUdChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQyKSxGdCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoMyk7cmV0dXJuIEN0KGg/di5wYW5lbENoYW5nZShoLGYpOiIi''@;'; put 'put ''KX0pLGRlKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxHdCgyLCJjbHItaWNvbiIsNDMpLExlKDMpLGRlKDQsInAiLDQ0KSxMZSg1KSxoZSgpKCksZ3QoNixaVHQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgz''@;'; put 'put ''KSxEcigiICIsYS5OQU1FLCIgIiksZmUoMiksd3IoYS5JRCl9fWZ1bmN0aW9uIFlUdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsV1R0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDEpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4p''@;'; put 'put ''fX1mdW5jdGlvbiBHVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSgxLCJjbHItYWNjb3JkaW9uIiksZ3QoMixZVHQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1''@;'; put 'put ''bmN0aW9uICRUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBLVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24gcVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtm''@;'; put 'put ''ZSgpLERyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBYVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3QoMywkVHQsMSwwLCJjbHItaWNvbiIsNTEpKDQsS1R0LDEsMCwiY2xyLWljb24iLDUyKSxMZSg1KSxoZSgpLGd0KDYs''@;'; put 'put ''cVR0LDIsMSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSxUcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZlKDIpLE1lKCJuZ0lmIiwhYS5jb3VudCksZmUoKSxNZSgibmdJZiIsYS5jb3VudCksZmUoKSxEcigi''@;'; put 'put ''ICIsYS5kaXNwbGF5LCIgIiksZmUoKSxNZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBKVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEsWFR0LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLGVsKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDQpO01l''@;'; put 'put ''KCJjbHJMYXp5IiwhMCksZmUoKSxNZSgiY2xyUmVjdXJzaXZlRm9yT2YiLERjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gUVR0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2Iiw1NSksR3QoMiwiY2xyLWlj''@;'; put 'put ''b24iLDQzKSxkZSgzLCJkaXYiLDU2KSg0LCJwIiw1NyksTGUoNSksaGUoKSxkZSg2LCJwIiw1OCksTGUoNyksaGUoKSgpKCksZ3QoOCxKVHQsMyw1LCJjbHItdHJlZSIsNDYpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDMpO2ZlKDUpLERyKCIgIixhLk5BTUUsIiAiKSxm''@;'; put 'put ''ZSgyKSxEcigiICIsYS5JRCwiICIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIGVBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApLGd0KDEsUVR0LDksMywibmctY29udGFpbmVyIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdGb3JPZiIs''@;'; put 'put ''YS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiB0QXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxMZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksTGUoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLExlKDYpLGhlKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuVFlQRSksZmUoMiksd3IoYS5OQU1FKSxmZSgyKSx3cihhLlZBTFVFKX19ZnVuY3Rpb24gbkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiw1OSkoMSwiY2xyLWRnLWNvbHVtbiIpLExlKDIsIiBUWVBFICIpLEd0KDMs''@;'; put 'put ''ImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiksTGUoNSwiIE5BTUUgIiksR3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iKSxMZSg4LCIgVkFMVUUgIiksR3QoOSwiY2xyLWRnLXN0cmluZy1m''@;'; put 'put ''aWx0ZXIiLDYwKSxoZSgpLGd0KDEwLHRBdCw3LDMsImNsci1kZy1yb3ciLDYxKSxkZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5hdGlvbiIsNjIsMikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxMZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLGhlKCksTGUoMTYp''@;'; put 'put ''LGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9aGEoMTMpLGQ9UmUoMik7ZmUoMyksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLGZlKDMpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5uYW1lRmlsdGVyKSxmZSgzKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudmFsdWVGaWx0''@;'; put 'put ''ZXIpLGZlKCksTWUoImNsckRnSXRlbXNPZiIsZC5tZXRhT2JqZWN0QXR0cmlidXRlcyksZmUoMiksTWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxNZSgiY2xyUGFnZVNpemVPcHRpb25zIixHcyg5LEVUdCkpLGZlKDIpLFZmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0r''@;'; put 'put ''MSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgQXR0cmlidXRlcyAiKX19ZnVuY3Rpb24gckF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMikoMSwiZGl2IiwzMyksZ3QoMixOVHQsMywxLCJkaXYiLDM0KSxHdCgzLCJiciIpLGd0KDQsR1R0LDMsMSwiZGl2IiwzNSkoNSxlQXQsMiwxLCJkaXYi''@;'; put 'put ''LDM1KSxoZSgpLGRlKDYsImRpdiIsMzYpKDcsImgzIiksTGUoOCksaGUoKSxndCg5LG5BdCwxNywxMCwiY2xyLWRhdGFncmlkIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsYS5tZXRhT2JqZWN0TGlzdCYmIWEub2JqZWN0Um91dGUpLGZlKDIpLE1lKCJu''@;'; put 'put ''Z0lmIiwhYS5vYmplY3RWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLm9iamVjdFZpZXcpLGZlKDMpLHdyKGEuYXNzb09iamVjdFNlbGVjdGVkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dUYWJsZSl9fWxldCBadGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5ldmVu''@;'; put 'put ''dFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnJvdXRlPU0sdGhpcy5tZXRhRGF0YVNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRp''@;'; put 'put ''b25zPVtdLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YURhdGFJZD0iIix0aGlzLmxvYWRpbmc9ITAsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSEwLHRoaXMubWV0YU9iamVjdFNpemU9MjAwLHRoaXMuYXNzb1R5''@;'; put 'put ''cGVTZWxlY3RlZD0iIix0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIix0aGlzLnJlcG9zaXRvcnk9IiIsdGhpcy5vYmplY3RSb3V0ZT0hMSx0aGlzLnNob3dEYXRhPSExLHRoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmdldENoaWxkcmVuPUQ9PkQuY291bnQ/Zm8oRC5kZXRhaWxzKTp0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTpELkFTU09DVVJJfV19KS50aGVuKHJlPT57dGhpcy5zaG93VGFibGU9ITAsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1yZS5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRl''@;'; put 'put ''cyx0aGlzLmFzc29PYmplY3RTZWxlY3RlZD1ELk5BTUU7bGV0IGNlPXRoaXMucm91dGVyLnVybDtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5vYmplY3RSb3V0ZT9jZS5zbGljZSgwLGNlLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK0QuQVNTT0NVUkku''@;'; put 'put ''c2xpY2UoMStELkFTU09DVVJJLmluZGV4T2YoIlxcIikpOmNlKyIvb2JqZWN0LyIrRC5BU1NPQ1VSSS5zbGljZSgxK0QuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSkpLHRoaXMuZ2V0QXNzb3NpYXRpb25zQ291bnQocmUuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyl9KSx0aGlzLmRlYm91''@;'; put 'put ''bmNlPSExfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9ITApLHRoaXMucGFnZVNp''@;'; put 'put ''emU9NSxLbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJktuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Lbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9S24ubWV0YWRhdGEubWV0YVJlcG9zaXRv''@;'; put 'put ''cmllcyx0aGlzLnJlcG9zaXRvcnk9S24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Lbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0''@;'; put 'put ''KCJtZXRhbmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudHlwZXMsS24ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITF9KSx0''@;'; put 'put ''aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5wdXNoKGEu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlvbiI6YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbMF0uTkFNRSxLbi5t''@;'; put 'put ''ZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLEtuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDtsZXQgaD0i''@;'; put 'put ''IixmPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlzdC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0T25D''@;'; put 'put ''bGljayh0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMo''@;'; put 'put ''YSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFEYXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEiKSx0aGlz''@;'; put 'put ''LnNob3dEYXRhPSExLHRoaXMubG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNlbGVjdG1l''@;'; put 'put ''dGFPYmplY3QoYSxkKX1zZWxlY3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFvYmplY3RzIix7U0FTQ29udHJvbFRhYmxlOlt7bWV0YXR5cGU6YSxyZXBvOmgucmVwb3NpdG9yeX1dfSkudGhl''@;'; put 'put ''bih2PT57aC5tZXRhT2JqZWN0TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5vYmplY3RzLGguZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoaC5tZXRhT2JqZWN0U2l6ZSksaC5sb2FkaW5nPSExLGguYXNzb1R5cGVTZWxlY3RlZD1hLGguZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGguc2hvd0Rh''@;'; put 'put ''dGE9ITB9KX0pKCl9c2VsZWN0bWV0YU9iamVjdChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVj''@;'; put 'put ''dEFzc29jaWF0aW9ucz12LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMsaC5yb290JD1mbyhoLmdldEFzc29zaWF0aW9uc0NvdW50KHYuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucykpLGguc2hvd0FjYz0hMCxoLnNob3dUYWJsZT0hMDtsZXQgTT12LmFkYXB0ZXJSZXNwb25zZS5h''@;'; put 'put ''dHRyaWJ1dGVzLmZpbmQoWj0+Ik5hbWUiPT09Wi5OQU1FKS5WQUxVRTtoLmFzc29PYmplY3RTZWxlY3RlZD1NLGQuTkFNRT1NO2xldCBEPWgucm91dGVyLnVybDtoLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLm9iamVjdFJvdXRlP0Quc2xpY2UoMCxELmxhc3RJbmRleE9mKCJvYmplY3QiKSkr''@;'; put 'put ''Im9iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpOkQrIi9vYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKSksaC5tZXRhT2JqZWN0QXR0cmlidXRlcz12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzfSl9KSgpfXNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSxk''@;'; put 'put ''KXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0''@;'; put 'put ''dHJpYnV0ZXMsaC5zaG93VGFibGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0YWlsczpbXX0pO2xldCB2PWQuZ2V0KGYuQVNTT0MpO3YuY291bnQr''@;'; put 'put ''Kyx2LmRldGFpbHMucHVzaCh7QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oZix2KXtoLnB1c2goe0FT''@;'; put 'put ''U09DOnYsY291bnQ6Zi5jb3VudCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5OnYrIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5wdXNo''@;'; put 'put ''KGgpO3JldHVybiB0aGlzLmFzc29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9uc0Rl''@;'; put 'put ''dGFpbHMoYSl9bWV0YUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxLbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmplY3RP''@;'; put 'put ''bkZpbHRlcigpe3RoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIpLHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5tZXRh''@;'; put 'put ''T2JqZWN0U2l6ZSksS24ubWV0YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxoPS0x''@;'; put 'put ''O2ZvcihsZXQgZj0wO2Y8dGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikmJmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVjdFNo''@;'; put 'put ''b3dMaXN0PS0xIT09aD90aGlzLm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2UoYSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0T25D''@;'; put 'put ''bGljayhkLklELGQpLHRoaXMuZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0tuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnl9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodmMpLEdlKEJzKSxHZShTdSksR2UoZmgpLEdlKExzKSxHZShDdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWlu''@;'; put 'put ''ZXIiXSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50''@;'; put 'put ''LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gt''@;'; put 'put ''bm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCBTQVMgVHlwZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5n''@;'; put 'put ''TW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhw''@;'; put 'put ''YW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNo''@;'; put 'put ''YXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzQsIm5n''@;'; put 'put ''SWYiXSxbMSwiY2xyLXJvdyIsImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNsYXNzIiwic2VhcmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtNiIsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsImRhdGFn''@;'; put 'put ''cmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm9i''@;'; put 'put ''amVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0''@;'; put 'put ''LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1z''@;'; put 'put ''ZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndv''@;'; put 'put ''cmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVP''@;'; put 'put ''cHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDMpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxMZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IiksaGUoKSxkZSg1LCJzZWxlY3QiLDQpLGdpKCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yZXBvc2l0b3J5LHYpfHwoaC5yZXBvc2l0b3J5PXYpLHZ9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksZ3QoNixUVHQsMiwyLCJvcHRpb24iLDUpLGhlKCkoKSgp''@;'; put 'put ''LGRlKDcsImNsci10cmVlIiksZ3QoOCxEVHQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSg5LFJUdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpLGRlKDEwLCJkaXYiLDgpKDExLCJkaXYiLDkpKDEyLCJoMyIsMTApLExlKDEzKSxoZSgpLGd0KDE0LExUdCw0LDAsImRpdiIsMTEpKDE1LEhU''@;'; put 'put ''dCw0LDEsImRpdiIsMTIpKDE2LHJBdCwxMCw1LCJkaXYiLDEzKSxoZSgpKCkpLDImZCYmKGZlKDUpLHBpKCJuZ01vZGVsIixoLnJlcG9zaXRvcnkpLGZlKCksTWUoIm5nRm9yT2YiLGgucmVwb3NpdG9yaWVzKSxmZSgyKSxNZSgibmdJZiIsaC5tZXRhRGF0YUxpc3QpLGZlKCksTWUoIm5nRm9y''@;'; put 'put ''T2YiLGgubWV0YURhdGFMaXN0KSxmZSg0KSx3cihoLmFzc29UeXBlU2VsZWN0ZWQpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRpbmcmJiFoLm1ldGFPYmplY3RMaXN0KSxmZSgpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGguc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOltu''@;'; put 'put ''cyxiYSxBMixrMixxbCxUMixubCwkcyxBbSxRZixSNyxjTyxKeSxYeCx1TyxFbSxIZGUsU3AsTDcsdF8sVG0sazcseG0sRDcsZEcsRWgsUGQsWmRlLEhsLGowLEIxZSxkcyxaMSxFNywkeSxFMWUsRkwsQTFlLFQxZSxrMWUsRFksaTQscjQsRU1dLGVuY2Fwc3VsYXRpb246Mn0pfXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaUF0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGFBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgucm9sZVNlYXJjaD0iIixDdChoLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBvQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYucm9sZVNlYXJjaCxoKXx8KGYucm9sZVNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoYSksQ3QoUmUoKS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGlBdCwxLDAsImNsci1pY29uIiwxMCkoNSxhQXQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLnJvbGVTZWFy''@;'; put 'put ''Y2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gc0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtj''@;'; put 'put ''b25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnJvbGVPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO1RyKCJhY3RpdmUiLGEuUk9MRVVSST09PWQu''@;'; put 'put ''cm9sZVVyaSksZmUoMyksRHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gbEF0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxzQXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1''@;'; put 'put ''bmN0aW9uIGNBdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHVBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gZEF0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLExlKDIpLGhlKCksZGUoMywidGQiLDMwKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLExlKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJyb3V0ZXJMaW5rIiwi''@;'; put 'put ''L3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuVVJJTUVNKSxmZSgyKSx3cihhLk1FTUJFUk5BTUUpLGZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksd3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gaEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUi''@;'; put 'put ''LDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTGUoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxMZSg4LCJFTUFJTCIpLGhlKCkoKSxkZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTGUoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCko''@;'; put 'put ''MTMsImIiKSxMZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksZ3QoMTYsZEF0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgxNiksTWUoIm5nRm9yT2YiLGEucm9sZU1lbWJlcnMpfX1mdW5jdGlvbiBmQXQoYyxsKXsxJmMmJihkZSgw''@;'; put 'put ''LCJoNSIpLExlKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSxoZSgpKX1mdW5jdGlvbiBwQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLExlKDQpLGhlKCksZGUoNSwidGQiLDMwKSxMZSg2KSxoZSgpLGRlKDcsInRkIiwz''@;'; put 'put ''MCksTGUoOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJTUVNKSxmZSgyKSx3cihhLk1FTUJFUk5BTUUpLGZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiks''@;'; put 'put ''d3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gZ0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTGUoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxMZSg4LCJFTUFJTCIpLGhlKCkoKSxk''@;'; put 'put ''ZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTGUoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCkoMTMsImIiKSxMZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksZ3QoMTYscEF0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgx''@;'; put 'put ''NiksTWUoIm5nRm9yT2YiLGEucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIG1BdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxMZSg5KSxoZSgp''@;'; put 'put ''KCkoKSgpLGRlKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksTGUoMTMpLGhlKCkoKSgpKCkoKSgpKCksZGUoMTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLExlKDE5KSxoZSgpLGd0KDIwLHVBdCwyLDAsImg1Iiw2KSxkZSgyMSwi''@;'; put 'put ''ZGl2IiwyNiksZ3QoMjIsaEF0LDE3LDEsInRhYmxlIiwyNyksaGUoKSgpLEd0KDIzLCJociIpLGRlKDI0LCJkaXYiKSgyNSwiaDMiKSxMZSgyNiksaGUoKSxndCgyNyxmQXQsMiwwLCJoNSIsNiksZGUoMjgsImRpdiIsMjYpLGd0KDI5LGdBdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxHdCgz''@;'; put 'put ''MCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg5KSx3cihhLnJvbGVOYW1lKSxmZSg0KSx3cihhLnJvbGVEZXNjKSxmZSg2KSxEcigiTUVNQkVSUyAoIixhLnJvbGVNZW1iZXJzQ291bnQsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnJvbGVNZW1iZXJzQ291bnQpLGZl''@;'; put 'put ''KDIpLE1lKCJuZ0lmIiwwIT1hLnJvbGVNZW1iZXJzQ291bnQpLGZlKDQpLERyKCJHcm91cHMgKCIsYS5yb2xlR3JvdXBzQ291bnQsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnJvbGVHcm91cHNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEucm9sZUdyb3Vwc0NvdW50KX19bGV0IFM3ZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMucm9sZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFt''@;'; put 'put ''ZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSExfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5w''@;'; put 'put ''YXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5yb2xlcz1Lbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJj''@;'; put 'put ''aD1Lbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PUtuLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPWEuYWRh''@;'; put 'put ''cHRlclJlc3BvbnNlLnJvbGVzLEtuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJz''@;'; put 'put ''LHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5y''@;'; put 'put ''b2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKToodGhpcy5yb2xlcz1Lbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Lbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVl''@;'; put 'put ''c3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLnJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLEtuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBk''@;'; put 'put ''PXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlz''@;'; put 'put ''LmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMu''@;'; put 'put ''cm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxLbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5y''@;'; put 'put ''ZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpOmQrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIs''@;'; put 'put ''e2l3YW50Olt7cm9sZWlkOmEuUk9MRVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5y''@;'; put 'put ''b2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1hLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xFREVT''@;'; put 'put ''Q30pfWZpbmRSb2xlKGEsZCl7bGV0IGg9ITE7cmV0dXJuIGEuZm9yRWFjaChmPT57Zi5ST0xFVVJJPT09ZCYmKGg9Zil9KSxofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShTdSksR2UoTHMpLEdlKGZoKSxHZShDdSkpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNz''@;'; put 'put ''Iiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0''@;'; put 'put ''ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hh''@;'; put 'put ''cGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsi''@;'; put 'put ''c2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEi''@;'; put 'put ''XSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsi''@;'; put 'put ''XV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxndCgyLG9BdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsbEF0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxndCg1LGNBdCwzLDAsImRp''@;'; put 'put ''diIsNSkoNixtQXQsMzEsOCwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsaC5yb2xlcyksZmUoKSxNZSgibmdGb3JPZiIsaC5yb2xlcyksZmUoMiksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5yb2xlTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBl''@;'; put 'put ''bmRlbmNpZXM6W25zLGJhLGMxLHFsLG5sLCRzLEVoLFBkLEhsLFoxLGk0LHI0XSxzdHlsZXM6WyI6Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGV7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1k''@;'; put 'put ''YXJrXSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9OjpuZy1kZWVwIGJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWxpZ2h0XSAucm9sZS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5''@;'; put 'put ''Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodHtoZWlnaHQ6MTAw''@;'; put 'put ''JX0ucm9sZS1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWluZm8gdGR7dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6M3B4fS5yb2xlLWRhdGF7bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhIGgzLC5yb2xlLWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5l''@;'; put 'put ''cntvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksdkF0PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNv''@;'; put 'put ''bnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxiQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVu''@;'; put 'put ''dC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHlBdChjLGwpezEmYyYmR3QoMCwiY2xyLWlj''@;'; put 'put ''b24iLDEyKX1mdW5jdGlvbiBfQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLnVzZXJTZWFyY2g9IiIsQ3QoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19''@;'; put 'put ''ZnVuY3Rpb24gd0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnVzZXJTZWFyY2gsaCl8''@;'; put 'put ''fChmLnVzZXJTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx5QXQsMSwwLCJjbHItaWNvbiIsMTApKDUsX0F0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC51c2VyU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIENBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS51c2VyT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PVJlKCkuJGltcGxpY2l0LGQ9UmUoKTtUcigiYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxmZSgzKSxEcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIFNBdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQ0F0LDQsMywiY2xyLXRyZWUt''@;'; put 'put ''bm9kZSIsMTQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBNQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiB4QXQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ciIpKDIsInRkIiwyNyksTGUoMywiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLGRlKDQsImIiKSxMZSg1KSxoZSgpKCkoKSxkZSg2LCJ0ciIpKDcsInRkIiwyNyksTGUoOCwiIE1ldGFkYXRhIFVwZGF0ZWQ6ICIpLGRlKDksImIiKSxMZSgxMCksaGUoKSgp''@;'; put 'put ''KCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDUpLHdyKGEudXNlckluZm8uTUVUQURBVEFDUkVBVEVEKSxmZSg1KSx3cihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIEVBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxl''@;'; put 'put ''IiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLExlKDEzKSxoZSgpKCkoKSgpLGd0KDE0LHhBdCwxMSwyLCJuZy1jb250YWluZXIiLDYpLGhl''@;'; put 'put ''KCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSx3cihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLHdyKGEudXNlckluZm8uRElTUExBWU5BTUUpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19ZnVuY3Rpb24gVEF0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLExlKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3KSxMZSgxMSwiIFVzZXIgSUQ6ICIpLGRlKDEyLCJiIiksTGUoMTMp''@;'; put 'put ''LGhlKCkoKSgpLGRlKDE0LCJ0ciIpKDE1LCJ0ZCIsMjcpLExlKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksZGUoMTcsImIiKSxMZSgxOCksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDgpLHdyKGEudXNlckluZm8uTkFNRSksZmUoNSksd3IoYS51c2VySW5mby5V''@;'; put 'put ''UkkpLGZlKDUpLHdyKGEudXNlckluZm8uUFJPVklERVIpfX1mdW5jdGlvbiBBQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIEVtYWlscyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24ga0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLExlKDIpLGhlKCksZGUo''@;'; put 'put ''MywidGQiLDMxKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLkVNQUlMKSxmZSgyKSx3cihhLlRZUEUpfX1mdW5jdGlvbiBEQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIi''@;'; put 'put ''KSxMZSg1LCJFTUFJTCIpLGhlKCkoKSxkZSg2LCJ0ZCIsMzEpKDcsImIiKSxMZSg4LCJUWVBFIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLGtBdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgxMCksTWUoIm5nRm9yT2YiLGEudXNlckVtYWlscyl9''@;'; put 'put ''fWZ1bmN0aW9uIElBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiksaGUoKSxndCgzLEFBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LERBdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLERyKCJFTUFJTFMg''@;'; put 'put ''KCIsYS51c2VyRW1haWxzQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiBSQXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24gTEF0KGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwiaDUiKSxMZSgxLCJObyBHcm91cHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIE9BdChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwzMyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O01lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIith''@;'; put 'put ''LlVSSSksZmUoKSxEcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gUEF0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidGQiLDMzKSxMZSgyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9n''@;'; put 'put ''cm91cHMvIisoYS5HUk9VUFVSSXx8YS5VUkkpKSxmZSgpLERyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBGQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpLGd0KDEsT0F0LDIsMiwidGQiLDMyKSgyLFBBdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9uIEhBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHki''@;'; put 'put ''KSxndCgyLEZBdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24gTkF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIFZBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gUm9s''@;'; put 'put ''ZXMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEJBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDM0KSxMZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDQpO2ZlKCksTWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5nZXRS''@;'; put 'put ''b2xlVVJJKGEuUk9MRVVSSSkpLGZlKCksRHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gakF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGd0KDIsQkF0LDMsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDIpLE1lKCJuZ0Zv''@;'; put 'put ''ck9mIixhLnVzZXJSb2xlcyl9fWZ1bmN0aW9uIHpBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiksaGUoKSxndCgzLFZBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LGpBdCwzLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7''@;'; put 'put ''ZmUoMiksRHIoIlJPTEVTICgiLGEudXNlclJvbGVzQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50KX19ZnVuY3Rpb24gVUF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIFpB''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gTG9naW5zIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBXQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzEpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0O2ZlKDIpLHdyKGEuRE9NQUlOKSxmZSgyKSx3cihhLlVTRVJJRCl9fWZ1bmN0aW9uIFlBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLExlKDUsIkRPTUFJTiIpLGhlKCkoKSxkZSg2LCJ0ZCIpKDcsImIiKSxM''@;'; put 'put ''ZSg4LCJVU0VSIElEIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLFdBdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgxMCksTWUoIm5nRm9yT2YiLGEudXNlckxvZ2lucyl9fWZ1bmN0aW9uIEdBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEs''@;'; put 'put ''ImgzIiksTGUoMiksaGUoKSxndCgzLFpBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LFlBdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLERyKCJMT0dJTlMgKCIsYS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLDA9PWEudXNlckxvZ2luc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiAkQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEVBdCwxNSwzLCJkaXYiLDIwKSgyLFRBdCwxOSwzLCJkaXYiLDIwKSxkZSgzLCJkaXYiLDIxKSg0''@;'; put 'put ''LCJkaXYiLDIyKSg1LCJkaXYiLDIzKSxndCg2LElBdCw2LDMsImRpdiIsNikoNyxSQXQsMSwwLCJociIsNiksZGUoOCwiZGl2IikoOSwiaDMiKSxMZSgxMCksaGUoKSxndCgxMSxMQXQsMiwwLCJoNSIsNiksZGUoMTIsImRpdiIsMjQpLGd0KDEzLEhBdCwzLDEsInRhYmxlIiwyNSksaGUoKSgp''@;'; put 'put ''LGd0KDE0LE5BdCwxLDAsImhyIiw2KSgxNSx6QXQsNiwzLCJkaXYiLDYpKDE2LFVBdCwxLDAsImhyIiw2KSgxNyxHQXQsNiwzLCJkaXYiLDYpLEd0KDE4LCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksZmUoNCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzOSksZmUoMyksRHIoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHNDb3VudCksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1s''@;'; put 'put ''ZXQgTTdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJjaD0iIix0aGlz''@;'; put 'put ''LnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNlcnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2''@;'; put 'put ''ZXJUeXBlKCksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtpZihLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91''@;'; put 'put ''c2VybmF2L3VzZXJzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudCl0''@;'; put 'put ''aGlzLnVzZXJzPUtuLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUtuLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUtuLnVzZXJuYXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVy''@;'; put 'put ''bCsiL2lkZW50aXRpZXMvdXNlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQUk9WSURFUjpm''@;'; put 'put ''LnByb3ZpZGVySWR9KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxLbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9YS5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UudXNlcnMsS24udXNlcm5hdi51c2VyTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS51c2Vyc30pKToodGhpcy51c2Vycz1Lbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Lbi51c2VybmF2LnVzZXJTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50KWlmKHRoaXMubG9hZGlu''@;'; put 'put ''Zz0hMCx0aGlzLmlzVml5YSl7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlv''@;'; put 'put ''bi9qc29uIn19KS50aGVuKGQ9PmQudGV4dCgpKS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAodj0+KHtHUk9VUE5BTUU6di5uYW1lLFVSSTp2LmlkfSkpO3RoaXMudXNlckdyb3Vwcz1mLHRoaXMu''@;'; put 'put ''dXNlckdyb3Vwc0NvdW50PWYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2PT52LlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNl''@;'; put 'put ''cmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQjAuWS5TYXM5OnRoaXMudXNlckluZm89aC5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9aC5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51''@;'; put 'put ''c2VyTG9naW5zPWguYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgQjAuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGY9PmYuVVJJPT09''@;'; put 'put ''YSk7ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Zi5JRCxOQU1FOmYuTkFNRSxESVNQTEFZTkFNRTpmLk5BTUV9fX10aGlzLnVzZXJEYXRhPWguYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1oLmFkYXB0ZXJSZXNwb25z''@;'; put 'put ''ZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfX11c2VyTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnVzZXJzLHRoaXMudXNlclNlYXJjaCwiTkFNRSIpLEtuLnVzZXJuYXYu''@;'; put 'put ''dXNlclNlYXJjaD10aGlzLnVzZXJTZWFyY2h9dXNlck9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2Rl''@;'; put 'put ''VVJJKGEuVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5VUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithLlVSSSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pz''@;'; put 'put ''b24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy51c2VyRGF0YT1mLHRoaXMubG9hZGluZz0hMTtsZXQgdj1mLml0ZW1zLm1hcChNPT4oe0dST1VQTkFNRTpNLm5hbWUsVVJJOk0uaWR9KSk7dGhpcy51c2VyR3JvdXBzPXYsdGhpcy51c2Vy''@;'; put 'put ''R3JvdXBzQ291bnQ9di5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKE09Pk0uVVJJPT09YS5VUkkpKX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmEuVVJJfV19KS50aGVu''@;'; put 'put ''KGY9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCMC5ZLlNhczk6dGhpcy51c2VySW5mbz1mLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9Zi5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLHRoaXMu''@;'; put 'put ''dXNlckxvZ2luc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBCMC5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1hLlVSSSk7ZWxzZXtjb25zdCB2PWYuYWRhcHRlclJlc3BvbnNlLmdy''@;'; put 'put ''b3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6di5JRCxOQU1FOnYuTkFNRSxESVNQTEFZTkFNRTp2Lk5BTUV9fX10aGlzLnVzZXJEYXRhPWYuYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0dXJuIGEuc3BsaXQoIk9NU09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UpLEdlKEJzKSxHZShDdSks''@;'; put 'put ''R2UoZmgpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRl''@;'; put 'put ''YmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFy''@;'; put 'put ''Y2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2Vh''@;'; put 'put ''cmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVy''@;'; put 'put ''IiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29u''@;'; put 'put ''dGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0''@;'; put 'put ''aXZlIiwiYWN0aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIi''@;'; put 'put ''LDEpKDEsImNsci10cmVlIiksZ3QoMix3QXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLFNBdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxNQXQsMywwLCJkaXYiLDUpKDYsJEF0LDE5LDExLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLE1lKCJu''@;'; put 'put ''Z0lmIixoLnVzZXJzKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnVzZXJzKSxmZSgyKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnVzZXJEYXRhJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsYzEscHkscWwsbmwsJHMsRWgsUGQsSGwsWjEsaTQscjRdLGVu''@;'; put 'put ''Y2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgS0F0PWM9Plsic2VnbWVudCIsY10scUF0PShjLGwpPT4oeyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gWEF0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIEpBdChj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNwYW4iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5vblZhbHVlQ2xpY2soaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoKSx3cihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24gUUF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEZ0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgy''@;'; put 'put ''KS5vblNlZ21lbnRMaW5rQ2xpY2soaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7ZmUoKSxNZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVw''@;'; put 'put ''dGgrMSl9fWZ1bmN0aW9uIGVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50b2dnbGUoaCkpfSksZ3QoMixYQXQsMSww''@;'; put 'put ''LCJkaXYiLDQpLGRlKDMsInNwYW4iLDUpLExlKDQpLGhlKCksZGUoNSwic3BhbiIsNiksTGUoNiwiOiAiKSxoZSgpLGd0KDcsSkF0LDIsMSwic3BhbiIsNyksaGUoKSxndCg4LFFBdCwyLDQsInNlY3Rpb24iLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtNZSgi''@;'; put 'put ''bmdDbGFzcyIsc3AoNixLQXQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLGZlKCksTWUoIm5nQ2xhc3MiLGxwKDgscUF0LGQuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxmZSgpLE1lKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksZmUoMiksd3IoYS5rZXkpLGZlKDMpLE1lKCJuZ0lm''@;'; put 'put ''IiwhYS5leHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCB0a3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVw''@;'; put 'put ''dGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgS3IsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNv''@;'; put 'put ''bikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0''@;'; put 'put ''dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVl''@;'; put 'put ''KX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlw''@;'; put 'put ''ZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50''@;'; put 'put ''eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8o''@;'; put 'put ''aC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0''@;'; put 'put ''ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3''@;'; put 'put ''KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgTSxEO3JldHVy''@;'; put 'put ''biJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihNPWQuZ2V0KGYpLHZvaWQgMCE9PU0/eyRyZWY6''@;'; put 'put ''TX06KGQuc2V0KGYsdiksQXJyYXkuaXNBcnJheShmKT8oRD1bXSxmLmZvckVhY2goZnVuY3Rpb24oWixyZSl7RFtyZV09aChaLHYrIlsiK3JlKyJdIil9KSk6KEQ9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihaKXtEW1pdPWgoZltaXSx2KyJbIitKU09OLnN0cmluZ2lmeSha''@;'; put 'put ''KSsiXSIpfSkpLEQpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVk''@;'; put 'put ''IixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xh''@;'; put 'put ''c3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNr''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRo''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwic2VjdGlvbiIsMCksZ3QoMSxla3QsOSwxMSwic2VjdGlvbiIsMSksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLGJhLGNdLHN0eWxlczpbJ0BjaGFyc2V0''@;'; put 'put ''ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJm''@;'; put 'put ''bG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQt''@;'; put 'put ''bWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9y''@;'; put 'put ''OnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06''@;'; put 'put ''YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''c2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+''@;'; put 'put ''IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFp''@;'; put 'put ''bltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50''@;'; put 'put ''LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12''@;'; put 'put ''aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0''@;'; put 'put ''LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6''@;'; put 'put ''dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNl''@;'; put 'put ''Z21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''PiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10''@;'; put 'put ''eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVu''@;'; put 'put ''ZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29u''@;'; put 'put ''LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBh''@;'; put 'put ''bmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12''@;'; put 'put ''aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksbmt0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLHJrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgi''@;'; put 'put ''LyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09YDxhIGhyZWY9JHtkfT4ke3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''fX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLGlrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJwcmV0dHlqc29uIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyNCksTGUoMSksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPWwuJGltcGxpY2l0O2ZNKCJ2YWx1ZSIsYS52YWx1ZSksZmUoKSxEcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gb2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0Z3JvdXAiLDIyKSxndCgxLGFrdCwyLDIsIm9wdGlvbiIsMjMpLGVsKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtNZSgibGFiZWwiLGEua2V5KSxmZSgpLE1lKCJuZ0Zvck9mIixEYygyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gc2t0KGMsbCl7MSZjJiYoZGUoMCwicCIsMjUpLExlKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAi''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiBsa3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gY2t0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIHVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMyksRnQoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsQ3QoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIGRrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4''@;'; put 'put ''KSgyLCJpbnB1dCIsMjksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku''@;'; put 'put ''bGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsY2t0LDEsMCwiY2xyLWljb24iLDMwKSg1LHVrdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlua3NTZWFyY2gpLGZlKDIpLE1lKCJuZ0lm''@;'; put 'put ''IixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gaGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBs''@;'; put 'put ''aWNpdCx2PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9''@;'; put 'put ''aCksQ3QoaCl9KSxkZSgxLCJwIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkubGlua09uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGlt''@;'; put 'put ''cGxpY2l0O3BpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLFV1KCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gZmt0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxoa3QsNCw0''@;'; put 'put ''LCJjbHItdHJlZS1ub2RlIiwzNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHBrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBna3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw''@;'; put 'put ''LCJjbHItaWNvbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLml0ZW1zU2VhcmNoPSIiLEN0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBta3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0ZW1zU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB3dChhKSxDdChSZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LHBrdCwxLDAsImNsci1pY29uIiwzMCkoNSxna3QsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLml0''@;'; put 'put ''ZW1zU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludEl0ZW1zKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYu''@;'; put 'put ''ZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLml0ZW1PbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksTGUoMyksaGUoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxEcigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIGJrdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KHNpKDApLGd0KDEsdmt0LDQsMywiY2xyLXRyZWUtbm9kZSIsMzQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiB5a3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gX2t0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwibmd4LWpzb24tdmlld2VyIiw0OSksRnQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxoZSgpfTImYyYmTWUoImpzb24iLFJlKDMpLmVuZHBvaW50SnNvbiko''@;'; put 'put ''ImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gd2t0KGMsbCl7aWYoMSZjJiYoc2koMCksTGUoMSksZWwoMiwicHJldHR5anNvbiIpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLERyKCJcbiAgICAgICAgICAgICIsRGMoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1''@;'; put 'put ''bmN0aW9uIENrdChjLGwpe2lmKDEmYyYmKHNpKDApLExlKDEsIlxuICAgICAgICAgICIpLGd0KDIsX2t0LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksTGUoMywiXG4gICAgICAgICAgIiksZ3QoNCx3a3QsMywzLCJuZy1jb250YWluZXIiLDIxKSxMZSg1LCJcbiAgICAgICAgIiksbGkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLE1lKCJuZ0lmIiwhYS5yYXdKc29uKSxmZSgyKSxNZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24gU2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLExlKDMsIiBHRVQgIiksZGUo''@;'; put 'put ''NCwicCIsNDIpLGVsKDUsImxpbmtpbnplIiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGhlKCksZGUoNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNvcHlC''@;'; put 'put ''cmVhZGNydW1zKCkpfSksR3QoNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLExlKDExLCJTdGFydCIpLGhlKCksZGUoMTIsImlucHV0Iiw0NCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3RhcnQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFiZWwiKSxMZSgxNSwiTGltaXQiKSxoZSgpLGRlKDE2LCJpbnB1dCIs''@;'; put 'put ''NDQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuZW5kcG9pbnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDE3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KFJlKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLEd0KDE4LCJjbHItaWNvbiIsNDYpLGhlKCkoKSgpLGRlKDE5LCJwcmUiLDQ3KSxMZSgyMCwiICAgICAgICAiKSxndCgyMSxDa3QsNiwyLCJuZy1jb250YWluZXIiLDIxKSxMZSgyMiwiXG4gICAgICAiKSxoZSgpLGxpKCl9''@;'; put 'put ''aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksTWUoImlubmVySFRNTCIsRGMoNSw3LGEuZW5kcG9pbnQudXJsKSxWNCksZmUoOCkscGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLE1lKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksZmUoNCkscGkoIm5nTW9kZWwi''@;'; put 'put ''LGEuZW5kcG9pbnQubGltaXQpLE1lKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksZmUoKSxNZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLE1lKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9''@;'; put 'put ''fWxldCBNa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0''@;'; put 'put ''aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJj''@;'; put 'put ''aD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxs''@;'; put 'put ''Q29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEtuLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25G''@;'; put 'put ''aWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksS24udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0''@;'; put 'put ''ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04u''@;'; put 'put ''c3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe0tuLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5j''@;'; put 'put ''b2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rp''@;'; put 'put ''b25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7''@;'; put 'put ''YS5tZXNzYWdlJiYoZD1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVs''@;'; put 'put ''bCxkLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxl''@;'; put 'put ''bWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJs''@;'; put 'put ''KGQpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRv''@;'; put 'put ''ci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9Iitk''@;'; put 'put ''OiIifWAsZj1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9''@;'; put 'put ''ZC5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0''@;'; put 'put ''fSxkPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlv''@;'; put 'put ''biYmKGg9YCR7aH1cbiR7ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZShUVyks''@;'; put 'put ''R2UoQnMpLEdlKHZjKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJlZUlu''@;'; put 'put ''cHV0IiwiIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZl''@;'; put 'put ''Il0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwi''@;'; put 'put ''YnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2''@;'; put 'put ''YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwi''@;'; put 'put ''aW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMi''@;'; put 'put ''LDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIs''@;'; put 'put ''MywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0sWzEs''@;'; put 'put ''ImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0s''@;'; put 'put ''WzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4t''@;'; put 'put ''c20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tlZCIs''@;'; put 'put ''Impzb24iLCJleHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTGUoNCwiQVBJIENvbGxlY3Rpb24iKSxoZSgpLGRlKDUsInNlbGVjdCIsMyksZ2ko''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmNvbGxlY3Rpb24sdil8fChoLmNvbGxlY3Rpb249diksdn0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxndCg2LG9rdCwzLDQsIm9wdGdyb3VwIiw0KSxl''@;'; put 'put ''bCg3LCJrZXl2YWx1ZSIpLGhlKCkoKSgpLGd0KDgsc2t0LDIsMCwicCIsNSksZGUoOSwiZGl2Iiw2KSxndCgxMCxsa3QsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSxkZSgxMSwiY2xyLXRyZWUiKSxndCgxMixka3QsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxMyxma3QsMiwxLCJuZy1jb250''@;'; put 'put ''YWluZXIiLDkpLGhlKCksZGUoMTQsImNsci10cmVlIiksZ3QoMTUsbWt0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTYsYmt0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTcsImRpdiIsMTApKDE4LCJkaXYiLDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJjbHIt''@;'; put 'put ''dG9nZ2xlLWNvbnRhaW5lciIsMTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMywiaW5wdXQiLDE1KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmF3SnNvbix2KXx8KGgucmF3SnNvbj12KSx2fSksaGUoKSxkZSgyNCwibGFiZWwiKSxMZSgyNSwiUkFX''@;'; put 'put ''IEpzb24iKSxoZSgpKCkoKSxkZSgyNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmNvcHlKc29uKCl9KSxHdCgyNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoMjgsImg0IiwxOCksTGUoMjksIiBBUEkgRXhwbG9yZXIgIiksZ3QoMzAseWt0LDEsMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDE5KSxoZSgpKCksR3QoMzEsImhyIiwyMCksZ3QoMzIsU2t0LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGhlKCkoKSksMiZkJiYoZmUoNSkscGkoIm5nTW9kZWwiLGguY29sbGVjdGlvbiksZmUoKSxNZSgibmdGb3JPZiIsRGMoNywxMSxoLmNvbGxlY3Rpb25zKSksZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWguY29sbGVjdGlvbkxvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmVuZHBvaW50''@;'; put 'put ''TGlua3MpLGZlKDIpLE1lKCJuZ0lmIixoLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLGZlKCksTWUoIm5nRm9yT2YiLGguZW5kcG9pbnRJdGVtcyksZmUoNykscGkoIm5nTW9kZWwiLGgucmF3SnNvbiksZmUoNyksTWUoIm5nSWYiLGguZW5kcG9pbnRMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIs''@;'; put 'put ''aC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsdkwsTWQsVDIsbmwsJHMsRWgsUGQsSGwsajAsZHMsSWQsQnksU2gsWjEsR0wsRTcsJHksUmQsaTQscjQsdGt0LHdSLHJrdCxpa3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgeGt0PW5ldyBTdCgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IEVrdD0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IFduLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlz''@;'; put 'put ''LmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29u''@;'; put 'put ''dGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndp''@;'; put 'put ''bmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4g''@;'; put 'put ''UGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRh''@;'; put 'put ''cmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53''@;'; put 'put ''aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0''@;'; put 'put ''cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0''@;'; put 'put ''QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZp''@;'; put 'put ''Zy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50''@;'; put 'put ''ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJT''@;'; put 'put ''ZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIs''@;'; put 'put ''Zi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1''@;'; put 'put ''bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSx4cih2cykseHIoeGt0LDgpKX0sYy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxUa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMu''@;'; put 'put ''Y2JPblN1Y2Nlc3M9bmV3IEtyLHRoaXMuY2JPbkVycm9yPW5ldyBLcix0aGlzLm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJl''@;'; put 'put ''c3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVu''@;'; put 'put ''dCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5u''@;'; put 'put ''YXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1''@;'; put 'put ''Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhp''@;'; put 'put ''cy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFdhKSxHZShKaSksR2UoRW8pLEdlKEVrdCkpfSxjLlx1''@;'; put 'put ''MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06W05uLk5vbmUsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNn''@;'; put 'put ''OiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSxBa3Q9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtp''@;'; put 'put ''KHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7dmFyIGtrdD15KDI1MDAxKTtsZXQgRGt0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29uc3QgaD1wYXJzZUludChkWzBdKXx8MixmPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChhKTph''@;'; put 'put ''O3JldHVybigwLGtrdC5DKShmLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IElrdD1bInF1''@;'; put 'put ''ZXJ5RmlsdGVyIl0sUmt0PSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBMa3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDU0KSxHdCgxLCJjbHItc3Bpbm5lciIsNTUpLGhlKCkpfWZ1bmN0aW9uIE9rdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBQa3QoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEZrdChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNTgsMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1o''@;'; put 'put ''KSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsT2t0LDEsMCwiY2xyLWljb24iLDU5KSg1LFBrdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJl''@;'; put 'put ''KCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEhrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBOa3Qo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9u''@;'; put 'put ''RmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIFZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNjcsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''UmUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9''@;'; put 'put ''KSxoZSgpLGd0KDQsSGt0LDEsMCwiY2xyLWljb24iLDU5KSg1LE5rdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKDIpLiRpbXBsaWNpdDtmZSgyKSxNZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpLHBpKCJuZ01vZGVsIixkLnNlYXJj''@;'; put 'put ''aFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBCa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw3NCl9ZnVuY3Rpb24gamt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzUpfWZ1''@;'; put 'put ''bmN0aW9uIHprdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkubmdWYXIsZj1SZSgpLiRpbXBsaWNpdCx2PVJlKDIpLiRpbXBsaWNpdCxNPVJlKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRh''@;'; put 'put ''YmxlQ2xpY2soZix2KSl9KSxzaSgxLDcxKSxndCgyLEJrdCwxLDAsImNsci1pY29uIiw3MikoMyxqa3QsMSwwLCJjbHItaWNvbiIsNzMpLGxpKCksTGUoNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0LGg9UmUoMikuJGltcGxpY2l0LGY9UmUoKTtU''@;'; put 'put ''cigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxNZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLERy''@;'; put 'put ''KCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFVrdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSgxLCJzcGFuIiksTGUoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUo''@;'; put 'put ''KSgpKX1mdW5jdGlvbiBaa3QoYyxsKXsxJmMmJihzaSgwKSxndCgxLFVrdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc2KSxsaSgpKX1mdW5jdGlvbiBXa3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcCIpLGd0KDEsemt0LDUsOCwiYnV0dG9uIiw2OSkoMixaa3QsMiwwLCJu''@;'; put 'put ''Zy1jb250YWluZXIiLDQyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGQubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEpfX1mdW5jdGlvbiBZa3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksZ3QoMSxXa3Qs''@;'; put 'put ''MywyLCJjbHItdG9vbHRpcCIsNjgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9UmUoMyk7ZmUoKSxNZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIEdrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImNsci10cmVlLW5vZGUiLDY0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU5vZGVDbGlja2VkKGgsZikpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJl''@;'; put 'put ''KCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDY1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxp''@;'; put 'put ''YnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsNjYpLExlKDMpLGhlKCksZ3QoNCxWa3QsNiw0LCJjbHItdHJlZS1ub2RlIiw3KSg1LFlrdCwyLDEsImNsci10cmVlLW5vZGUiLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O1RyKCJj''@;'; put 'put ''bHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxEcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCksTWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLE1lKCJu''@;'; put 'put ''Z0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uICRrdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsR2t0LDYsNywiY2xyLXRyZWUtbm9kZSIsNjMpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rp''@;'; put 'put ''b24gS2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gcWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSkoMiwiZGl2Iiw4MikoMywiZGl2Iiw4Myko''@;'; put 'put ''NCwiYnV0dG9uIiw4NCksR3QoNSwiY2xyLWljb24iLDg1KSxoZSgpLGRlKDYsImgzIiw0NyksTGUoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2IiwxNSkoOSwicCIpLExlKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDI2KSgxMiwi''@;'; put 'put ''YnV0dG9uIiw4NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTGUoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFhrdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw4Nyl9ZnVuY3Rpb24gSmt0KGMsbCl7MSZjJiZH''@;'; put 'put ''dCgwLCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24gUWt0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw4OCkoMSwic3BhbiIsODkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2Iiw5MCkoNCwicCIsOTEpLExlKDUsIkxvYWRpbmcgVGFibGUgVmlld2VyIiksaGUoKSgpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIGVEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoNSk7cmV0dXJuIEN0KFJlKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIHREdChjLGwp''@;'; put 'put ''ezEmYyYmKGRlKDAsInNwYW4iLDExNiksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gbkR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTE3KX1mdW5jdGlvbiByRHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMTgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1S''@;'; put 'put ''ZSgzKTtmZSgpLERyKCIgIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gaUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTIwKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUo''@;'; put 'put ''NCk7ZmUoKSxEcigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gYUR0KGMsbCl7MSZjJiYoc2koMCksZ3QoMSxpRHQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTkpLGxpKCkpfWZ1bmN0aW9uIG9EdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxlbCgyLCJ0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRvciIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLEtJKCIgKCIsejgoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3Ro''@;'; put 'put ''PyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBzRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxndCgxLG9EdCwzLDcsInNwYW4iLDQyKSxkZSgyLCJjbHItaWNvbiIsMTIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLnJlbG9hZFRh''@;'; put 'put ''YmxlRGF0YSgpKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gbER0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoUmUoNSkuZWRpdFRhYmxlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzMyksZGUoMiwic3BhbiIpLExlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIGNEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KFJlKDUpLmdvVG9MaW5lYWdlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzNCksZGUoMiwic3BhbiIpLExlKDMsIkxpbmVhZ2UiKSxoZSgpKCl9fWZ1bmN0aW9uIHVEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjYp''@;'; put 'put ''KDEsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLm5ld1ZpZXdib3goKSl9KSxHdCgyLCJjbHItaWNvbiIsMTI4KSxkZSgzLCJzcGFuIiksTGUoNCwiVmlld2JveGVzIiksaGUoKSgpLGd0KDUsbER0LDQsMCwiZGl2IiwxMjkpKDYsY0R0LDQs''@;'; put 'put ''MCwiZGl2IiwxMjkpLGRlKDcsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLm9wZW5RYigpKX0pLEd0KDgsImNsci1pY29uIiwxMzApLGRlKDksInNwYW4iKSxMZSgxMCwiRmlsdGVyIiksaGUoKSgpLGRlKDExLCJkaXYiLDEyNyksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5vcGVuRG93bmxvYWQ9ITApfSksR3QoMTIsImNsci1pY29uIiwxMzEpLGRlKDEzLCJzcGFuIiksTGUoMTQsIkRvd25sb2FkIiksaGUoKSgpLGRlKDE1LCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChSZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxHdCgxNiwiY2xyLWljb24iLDEzMiksZGUoMTcsInNwYW4iKSxMZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSg0KTtmZSg1KSxNZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIGREdChjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93biIsMTIyKSgxLCJidXR0b24iLDEyMyksR3QoMiwiY2xyLWljb24iLDEyNCksTGUoMywiIG9wdGlvbnMgIiksaGUoKSxndCg0LHVEdCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIs''@;'; put 'put ''MTI1KSxoZSgpKSwyJmMmJk1lKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIGhEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTM1KSgxLCJzcGFuIiksTGUoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLExlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7''@;'; put 'put ''ZmUoNCksd3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBmRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDk4KSgxLCJzZWN0aW9uIiw5OSkoMiwiZm9ybSIsMTAwKSgzLCJkaXYiLDEwMSkoNCwiaW5wdXQiLDEwMiw0KSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgaD1oYSg1KTtyZXR1cm4gQ3QoUmUoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKSxndCg2LGVEdCwxLDAsImNsci1pY29uIiwxMDMpKDcsdER0LDIsMCwic3BhbiIsMTA0KSxoZSgpLGRlKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlciIpKDEwLCJpbnB1dCIsMTA1KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgxMSwibGFiZWwiKSxMZSgxMiwiTnVtZXJp''@;'; put 'put ''YyIpLGhlKCkoKSgpKCkoKSxkZSgxMywiZGl2IiwxMDYpKDE0LCJwIiwxMDcpKDE1LCJjbHItdG9vbHRpcCIsMTA4KSgxNiwiY2xyLWljb24iLDEwOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDE3LG5EdCwx''@;'; put 'put ''LDAsImNsci1pY29uIiwxMTApKDE4LHJEdCwyLDEsInNwYW4iLDExMSkoMTksYUR0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSxndCgyMCxzRHQsMywxLCJuZy1jb250YWluZXIiLDQyKSxoZSgpKCksZGUoMjEsImRpdiIsMTEyKSxndCgyMixkRHQsNSwxLCJjbHItZHJvcGRvd24iLDEx''@;'; put 'put ''MyksaGUoKSxndCgyMyxoRHQsNSwxLCJkaXYiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCksTWUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLGZlKDIpLE1lKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixhLnNlYXJj''@;'; put 'put ''aExvYWRpbmcpLGZlKDMpLHBpKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDcpLE1lKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+''@;'; put 'put ''MCksZmUoKSxNZSgibmdJZiIsYS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoMiksTWUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLGZlKCksTWUoIm5nSWYiLCIxPTEi''@;'; put 'put ''IT09YS5xdWVyeVRleHQmJiFHcygxMCxSa3QpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBwRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzNiksR3QoMSwiaW1nIiwxMzcpLGRlKDIsImgzIiwxMzgpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgbGli''@;'; put 'put ''cmFyeSAiKSxoZSgpKCkpfWZ1bmN0aW9uIGdEdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDU1KX1mdW5jdGlvbiBtRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE0NSksR3QoMSwiaW1nIiwxNDYpLGRlKDIsInAiLDEzOCksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxo''@;'; put 'put ''ZSgpKCkpfWZ1bmN0aW9uIHZEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInAiLDE0OSksTGUoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksZGUoMiwiY2xyLWljb24iLDE1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5y''@;'; put 'put ''ZWxvYWRMaWJJbmZvKCkpfSksaGUoKSxMZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLGhlKCl9fWZ1bmN0aW9uIGJEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiRU5HSU5FOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIHlEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiTElCSUQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBfRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQk5BTUU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0''@;'; put 'put ''KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIHdEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiTElCU0laRToiKSxoZSgpLGRlKDMsInRk''@;'; put 'put ''IiwxNTIpLExlKDQpLGVsKDUsImNvbnZlcnRTaXplIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9EYyg1LDEsYS5saWJpbmZvWzBdLkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIENEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwi''@;'; put 'put ''dGQiLDE1MSksTGUoMiwiT1dORVJTOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIFNEdChjLGwpe2lmKDEmYyYmKGRlKDAs''@;'; put 'put ''InRyIikoMSwidGQiLDE1MSksTGUoMiwiUEFUSFM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBNRHQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlBFUk1TOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24geER0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJTQ0hFTUFTOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlv''@;'; put 'put ''biBFRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlRBQkxFX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoi''@;'; put 'put ''IiwiICIpfX1mdW5jdGlvbiBURHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkNBVEFMT0dfQ05UOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmlu''@;'; put 'put ''Zm9bMF0uQ0FUQUxPR19DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gQUR0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidGFibGUiKSxndCgyLGJEdCw1LDEsInRyIiw0MikoMyx5RHQsNSwxLCJ0ciIsNDIpKDQsX0R0LDUsMSwidHIiLDQyKSg1LHdEdCw2LDMsInRyIiw0MikoNixDRHQsNSwxLCJ0''@;'; put 'put ''ciIsNDIpKDcsU0R0LDUsMSwidHIiLDQyKSg4LE1EdCw1LDEsInRyIiw0MikoOSx4RHQsNSwxLCJ0ciIsNDIpKDEwLEVEdCw1LDEsInRyIiw0MikoMTEsVER0LDUsMSwidHIiLDQyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgyKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9b''@;'; put 'put ''MF0uRU5HSU5FKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5m''@;'; put 'put ''b1swXS5PV05FUlMpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5m''@;'; put 'put ''b1swXS5UQUJMRV9DTlQpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uQ0FUQUxPR19DTlQpfX1mdW5jdGlvbiBrRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE0NyksZ3QoMSx2RHQsNCwwLCJwIiwxNDgpKDIsQUR0LDEyLDEwLCJuZy1jb250YWluZXIiLDQyKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiBERHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDEzOSksR3QoMiwic2VjdGlv''@;'; put 'put ''biIsOTkpLGRlKDMsImRpdiIsMTQwKSg0LCJwIiw5MSksTGUoNSksaGUoKSxkZSg2LCJjbHItaWNvbiIsMTIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLnJlbG9hZExpYkluZm8oKSl9KSxoZSgpKCksR3QoNywiZGl2IiwxMTIpLGhlKCksZGUoOCwiZGl2''@;'; put 'put ''IiwxNDEpLGd0KDksZ0R0LDEsMCwiY2xyLXNwaW5uZXIiLDE0MiksaGUoKSxndCgxMCxtRHQsNCwwLCJkaXYiLDE0MykoMTEsa0R0LDMsMiwiZGl2IiwxNDQpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDUpLERyKCIgIixhLmxpYiwiICIpLGZlKDQpLE1lKCJuZ0lmIixudWxsPT09''@;'; put 'put ''YS5saWJpbmZvKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKX19ZnVuY3Rpb24gSUR0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE1NiksTGUoMSwiIE5vIGRhdGEgZm91bmQgd2l0aCBnaXZlbiBjb25kaXRpb25zICIpLGhl''@;'; put 'put ''KCkpfWZ1bmN0aW9uIFJEdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNTYpLExlKDEsIiBObyBkYXRhIGZvdW5kIGR1ZSB0byBzYXMgcmVxdWVzdCBlcnJvciAiKSxoZSgpKX1mdW5jdGlvbiBMRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE1MyksR3QoMSwiY2xyLWljb24iLDE1NCksZ3Qo''@;'; put 'put ''MixJRHQsMiwwLCJoMyIsMTU1KSgzLFJEdCwyLDAsImgzIiwxNTUpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgibmdJZiIsYS5ub0RhdGEpLGZlKCksTWUoIm5nSWYiLGEubm9EYXRhUmVxRXJyKX19ZnVuY3Rpb24gT0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTcp''@;'; put 'put ''LEd0KDEsImhvdC10YWJsZSIsMTU4KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29s''@;'; put 'put ''SGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoImNvcHlQYXN0ZSIsYS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsYS5ob3RUYWJsZS5jb250ZXh0TWVudSkoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixhLmhvdFRhYmxlLmRyb3Bkb3duTWVudSko''@;'; put 'put ''ImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWtlcikoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImFmdGVyR2V0Q29sSGVhZGVyIixh''@;'; put 'put ''LmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyKSgicm93SGVhZGVycyIsYS5ob3RUYWJsZS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLGEuaG90VGFibGUucm93SGVhZGVyV2lkdGgpKCJyb3dIZWlnaHRzIixhLmhvdFRhYmxlLnJvd0hlaWdodHMpKCJsaWNlbnNlS2V5IixhLmhvdFRh''@;'; put 'put ''YmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBQRHQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNTkpLExlKDEpLEd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLERyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52''@;'; put 'put ''aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gRkR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MiksZ3QoMSxmRHQsMjQsMTEsImRpdiIsOTMpKDIscER0LDQsMCwiZGl2Iiw5NCkoMyxERHQsMTIsNCwibmctY29udGFpbmVyIiw0MikoNCxMRHQsNCwy''@;'; put 'put ''LCJkaXYiLDk1KSg1LE9EdCwyLDE5LCJkaXYiLDk2KSxkZSg2LCJkaXYiKSxndCg3LFBEdCwzLDEsInAiLDk3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEudGFibGUpLGZlKCksTWUoIm5nSWYiLCEoYS5saWJ8fGEudGFibGV8fGEubm9EYXRhUmVxRXJyfHxh''@;'; put 'put ''Lm5vRGF0YSkpLGZlKCksTWUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiYhYS50YWJsZSYmYS5saWIpLGZlKCksTWUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksZmUoKSxNZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJmEudGFibGUpLGZl''@;'; put 'put ''KDIpLE1lKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSYmYS5ob3RUYWJsZS5kYXRhJiZhLmhvdFRhYmxlLmRhdGEubGVuZ3RoPmEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQgek49KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2Upe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dnZXJT''@;'; put 'put ''ZXJ2aWNlPUQsdGhpcy5oZWxwZXJTZXJ2aWNlPVosdGhpcy5sb2NhdGlvbj1yZSx0aGlzLmNkZj1jZSx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0''@;'; put 'put ''aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0''@;'; put 'put ''aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9E''@;'; put 'put ''YXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5T''@;'; put 'put ''QVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMubnVtYmVyT2ZSb3dzPW51bGwsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lv''@;'; put 'put ''bnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtYXhSb3dzOnRoaXMu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxyb3dIZWFkZXJzOmJlPT4iICIsYWZ0ZXJHZXRDb2xIZWFkZXI6KGJlLEVlLEJlKT0+e0VlLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJs''@;'; put 'put ''ZUhlYWRlckNsYXNzKX0scm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNP''@;'; put 'put ''bmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooYmUsRWUsQmUscWUs''@;'; put 'put ''cnQscHQpPT57Y29uc3QgZHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBKdCx2bj0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgQ249dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSx0bj1Dbj9DblswXVsxXTotMSxNbj10aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlPy5jb2xUb1Byb3AodG4pO0p0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW01uXSxKdCYmKHZuPWBMQUJFTDogJHtKdD8ubGFiZWx9PGJyPlRZUEU6ICR7SnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtKdD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7SnQ/LmZvcm1hdH1gKX1yZXR1''@;'; put 'put ''cm4gZHQuaW5uZXJIVE1MPXZuLGR0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IFltLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNl''@;'; put 'put ''LmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uXSx7''@;'; put 'put ''cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShh''@;'; put 'put ''PT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFi''@;'; put 'put ''bGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSx2PXBhcnNlSW50KGQucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKXx8MDt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52''@;'; put 'put ''aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLHYpLnRoZW4oTT0+e00uc2FzcGFyYW1zfHxNLnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8''@;'; put 'put ''fFtdLGQuc2V0RFNOb3RlKCksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0''@;'; put 'put ''aD9kLm5vRGF0YT0hMDooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEsZC5zZXR1cEhvdCgpKSk6ZC5zZWFyY2hMb2FkaW5nPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGQuc2VhcmNoTG9hZGluZz0hMX0pKCl9cmVsb2FkVGFibGVEYXRhKCl7dGhpcy52aWV3''@;'; put 'put ''RGF0YSh0aGlzLnVybEZpbHRlclBrfHwwKX1yZWxvYWRMaWJJbmZvKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5saWJpbmZvPW51bGwsYS5zYXNTdG9yZVNlcnZpY2UucmVmcmVzaExpYkluZm8oYS5saWIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbioo''@;'; put 'put ''aCl7YS5saWJpbmZvPWgubGliaW5mbyxLbi52aWV3ZXIubGliaW5mbz1hLmxpYmluZm87Y29uc3QgZj1hLmxpYnJhcmllcy5maW5kKHY9PnYuTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGliaW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLG51bGw9PT1hLmxpYmluZm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNh''@;'; put 'put ''c2UoKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBELGY9IiZ0''@;'; put 'put ''eXBlPSIrdGhpcy5kb3dubG9hZEZvcm1hdCx2PSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsTT0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7RD10eXBlb2YgdGhpcy5yb3V0''@;'; put 'put ''ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZit2K00rIiZmaWx0ZXI9IitEKSx0aGlz''@;'; put 'put ''Lm9wZW5Eb3dubG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGliLGQ9dGhpcy50YWJsZSxoPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBNPXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZitNKyIvP19wcm9ncmFtPSIrdisiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3VyPSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw''@;'; put 'put ''ZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgYT17fTthPUtuLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5p''@;'; put 'put ''bmNsdWRlcyhkKX1nb1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRo''@;'; put 'put ''aXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCB2PWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEm''@;'; put 'put ''dHlwZT1XRUIke3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9di5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xpcCgpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''InRleHRhcmVhIik7YS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUubGVmdD0iMCIsYS5zdHlsZS50b3A9IjAiLGEuc3R5bGUub3BhY2l0eT0iMCIsYS52YWx1ZT10aGlzLndlYlF1ZXJ5VGV4dCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuZm9jdXMoKSxhLnNlbGVjdCgp''@;'; put 'put ''LGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVj''@;'; put 'put ''a0V4cGFuZChhKXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWVJFRiE9PWQuTElCUkFSWVJFRiYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEw''@;'; put 'put ''LHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGli''@;'; put 'put ''cmFyaWVzLGQpfWxpYnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQudGFibGVzP2QuZXhwYW5kZWQ9ISFo''@;'; put 'put ''fHwhZC5leHBhbmRlZDp5aWVsZCBmLnNlbGVjdFRhYmxlKGEsITEsZCksZC5leHBhbmRlZCl7Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpO2xldCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNzZWFyY2hfJHtkLkxJQlJBUllSRUZ9YCk7Zi5sb2dnZXJTZXJ2aWNlLmxvZygiW2xpYlRyZWVTZWFy''@;'; put 'put ''Y2hJbnB1dF0iLHYpLHYmJnYuZm9jdXMoKSxkJiZkLmxpYmluZm8mJihmLmxpYmluZm89ZC5saWJpbmZvKSxmLmxpYiYmZi50YWJsZSYmIWg/Zi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2''@;'; put 'put ''ZSJ9KS50aGVuKCgpPT57Zi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrZi5saWJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pOmYubGliJiYhZi50YWJsZSYmZi5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L2RhdGEvIitmLmxpYil9Zi5jb2xsYXBzZUxp''@;'; put 'put ''YnJhcnlJdGVtcyhmLmxpYnJhcmllcyxkKX0pKCl9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMudGFibGU9YSx0aGlzLnNlbGVjdExpYlRhYmxlKGEpLHRoaXMudmlld0RhdGEoMCl9c2VsZWN0VGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2gubG9hZGluZ1RhYmxlcz0hMCxmLnRhYmxlPSExLGYudGFibGVEaXNhYmxlPSEwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YT9Lbi52aWV3ZXIudGFibGVzU2V0JiZkPyhmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExLGYudGFibGVzPUtuLnZpZXdlci50''@;'; put 'put ''YWJsZXMsZi5saWJpbmZvPUtuLnZpZXdlci5saWJpbmZvKTooZi5saWJpbmZvPW51bGwseWllbGQgZi5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKHY9PntmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExO2xldCBNPXYubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEQp''@;'; put 'put ''e3JldHVybiBELk1FTU5BTUV9KTtmLmxpYmluZm89di5saWJpbmZvfHxbXSxmLnRhYmxlcz1NLGgmJihoLnRhYmxlcz1NLGgubGliaW5mbz1mLmxpYmluZm8pLEtuLnZpZXdlci5saWJyYXJpZXM9Zi5saWJyYXJpZXMsS24udmlld2VyLmxpYnJhcnk9Zi5saWIsS24udmlld2VyLnRhYmxlcz1m''@;'; put 'put ''LnRhYmxlcyxLbi52aWV3ZXIubGliaW5mbz1mLmxpYmluZm8sS24udmlld2VyLnRhYmxlc1NldD0hMH0pLmNhdGNoKHY9PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IodiksZi5hYm9ydEFjdGl2ZT0hMCxmLm5vRGF0YT0hMCxmLnRhYmxlVGl0bGU9IiIsZi50YWJsZURpc2FibGU9ITB9KSk6Zi50''@;'; put 'put ''YWJsZURpc2FibGU9ITAsS24udmlld2VyLmxpYnJhcnk9Zi5saWIsZHx8Zi5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0haC5leHBhbmRlZH0pKCl9c2VsZWN0TGliVGFibGUoYSxkKXsiUGxlYXNlIHNlbGVjdCB0YWJsZSIhPT1hPyh0aGlzLmFj''@;'; put 'put ''dGlvbkRpc2FibGU9ITEsdGhpcy5saWJUYWI9dGhpcy5saWIrIi4iK3RoaXMudGFibGUpOnRoaXMuYWN0aW9uRGlzYWJsZT0hMCxLbi52aWV3ZXIudGFibGU9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5saWJUYWIpfWNsZWFyR2xv''@;'; put 'put ''YmFsc0ZpbHRlcigpe0tuLnZpZXdlci5maWx0ZXIubGliZHM9IiIsS24udmlld2VyLmZpbHRlci53aGVyZUNsYXVzZT0iIixLbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIsS24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEtuLnZpZXdlci5maWx0ZXIuY29scz1bXSxLbi52aWV3ZXIu''@;'; put 'put ''ZmlsdGVyLnZhbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISF0aGlzLmxpYlRhYiYmYSsiLiIrZD09PXRoaXMubGliVGFifXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEtuLnZpZXdlci5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGlicmFyeVJlc2V0RmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnJlc2V0QXJy''@;'; put 'put ''YXlGaWx0ZXIodGhpcy5saWJyYXJpZXMpfXZpZXdEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoO2lmKGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGli''@;'; put 'put ''PiJ1IiYmdHlwZW9mIGQudGFibGU+InUiKXtsZXQgTT1bXTtpZihNPWQubGliRGF0YXNldC5zcGxpdCgiLiIpLEtuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKEQ9PntkLmxp''@;'; put 'put ''YnJhcmllcz1ELnNhc2xpYnN9KS5jYXRjaChEPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKEQpfSksZC5saWI9TVswXSxLbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IEQ9ZC5saWJyYXJpZXMuZmluZChaPT5aLkxJQlJBUllSRUYudG9Mb3dl''@;'; put 'put ''ckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oWj0+e2QudGFibGVzPVoubXB0YWJsZXMubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuTUVNTkFNRX0pLEQudGFibGVzPWQudGFibGVzLEtuLnZpZXdl''@;'; put 'put ''ci5saWJyYXJpZXM9ZC5saWJyYXJpZXMsS24udmlld2VyLnRhYmxlcz1kLnRhYmxlcyxLbi52aWV3ZXIuc3RhcnR1cFNldD0hMH0pLmNhdGNoKFo9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoWil9KX1kLnRhYmxlPU1bMV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9''@;'; put 'put ''aH1lbHNlIEtuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKE09PntkLmxpYnJhcmllcz1NLnNhc2xpYnN9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSks''@;'; put 'put ''dHlwZW9mIGQudGFibGU8InUiJiYoS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC50YWJsZXM9S24udmlld2VyLnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKE09PntkLnRhYmxlcz1NLm1wdGFibGVzLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5N''@;'; put 'put ''RU1OQU1FfSl9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pLGQucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVGbGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgs''@;'; put 'put ''ZC5saWJUYWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMmJmgmJih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oTT0+e2lmKE0ucXVlcnkubGVuZ3RoPjAmJiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmMD09PUtuLnZpZXdlci5maWx0ZXIuY2xh''@;'; put 'put ''dXNlcy5sZW5ndGgmJihLbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTS5xdWVyeSksS24udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRl''@;'; put 'put ''ckNsYXVzZSgidmlld2VyIixNLmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQuZmlsdGVyQ29scz1NLmNvbHMsemVlKGQuZmlsdGVyQ29scyxbXSxNLiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVM''@;'; put 'put ''RFMuc3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCBiZT1NLnNhc3BhcmFtc1swXS5UQUJMRVVSSTtiZSYmYmUubGVuZ3RoPjAmJihkLnRhYmxldXJpPWJlKX1kLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0''@;'; put 'put ''YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3RlKCksZC5xdWVyeVRleHQ9TS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQ7bGV0IEQ9W10sWj1bXTtmb3IobGV0IGJlIGluIE0udmlld2RhdGFbMF0pYmUmJloucHVzaChiZSk7Zm9yKGxldCBi''@;'; put 'put ''ZT0wO2JlPFoubGVuZ3RoO2JlKyspRC5wdXNoKHtkYXRhOlpbYmVdfSk7ZC5ob3RUYWJsZS5jb2xIZWFkZXJzPVosZC5ob3RUYWJsZS5jb2x1bW5zPUQsZC5ob3RUYWJsZS5jZWxscz1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19LGQudGFibGVGbGFnPSExO2xldCBjZT1bXTtjZT1o''@;'; put 'put ''LnNwbGl0KCIuIiksZC5saWI9Y2VbMF0sZC50YWJsZT1jZVsxXSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD8oZC5ub0RhdGE9ITAsZC50YWJsZUZsYWc9ITApOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSksZC5ub0RhdGFSZXFFcnI9ITF9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2''@;'; put 'put ''aWNlLmVycm9yKE0pLGQuYWJvcnRBY3RpdmU9ITAsZC5ub0RhdGFSZXFFcnI9ITB9KSksZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZoJiZkLnJvdXRlci5uYXZpZ2F0ZSgwIT09YT9bIi92aWV3L2RhdGEvIitoKyIvIithXTpbIi92aWV3L2RhdGEvIitoXSx7cXVlcnlQYXJhbXNI''@;'; put 'put ''YW5kbGluZzoicHJlc2VydmUifSk7bGV0IGY9ZC50YWJsZSx2PWQubGlicmFyaWVzLmZpbmQoTT0+TS5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt2PyhLbi52aWV3ZXIubGlicmFyaWVzLmxlbmd0aD4wJiYoZC5saWJyYXJpZXM9S24udmlld2VyLmxp''@;'; put 'put ''YnJhcmllcyxkLmxpYnJhcmllc1NlYXJjaD1Lbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoKSxkLmxpYnJhcnlPbkNsaWNrKGQubGliLHYsITApKTpkLmxpYmluZm89W10sZC50YWJsZT1mfHxkLnRhYmxlLGQubGlicmFyaWVzJiZkLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhkLmxp''@;'; put 'put ''YnJhcmllcyksZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZkLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxkLmxvYWRpbmdUYWJsZVZpZXc9ITEsIWQubm9EYXRhJiYhZC5ub0RhdGFSZXFFcnImJmgmJmQuc2V0dXBIb3QoKSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8''@;'; put 'put ''c2V0VGltZW91dCgoKT0+e2xldCBNPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO00mJihNLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRD0+e3NldFRpbWVvdXQoKCk9PntsZXQgWj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0i''@;'; put 'put ''KXx8dm9pZCAwO1omJlouY2xpY2soKX0sMTAwKX0pLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSEwKX0sMmUzKX0pKCl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMu''@;'; put 'put ''c2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlzLnRhYmxlLHRoaXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBh''@;'; put 'put ''LmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Lbi5yb290UGFyYW0mJihLbi52aWV3ZXIuZmlsdGVyLmNs''@;'; put 'put ''YXVzZXM9W10sS24udmlld2VyLmZpbHRlci5xdWVyeT1bXSxLbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5s''@;'; put 'put ''ZW5ndGg7disrKXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gbnVsbD09PUQudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSEx''@;'; put 'put ''KTt7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goWj0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEu''@;'; put 'put ''aGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpfSksRC5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWll''@;'; put 'put ''bGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeVRleHQ9TS5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IEQ9TS5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK0RdLHtx''@;'; put 'put ''dWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKEQpLGEuZmlsdGVyPSExfSkuY2F0Y2goTT0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xh''@;'; put 'put ''dXNlKCl9ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHthLkxPQURfUkVGfWBdKX1zZXREU05vdGUoKXtjb25zdCBhPXRoaXMuZHNtZXRhLmZpbmQoZj0+Ik5PVEVTIj09PWYuTkFNRSksZD10''@;'; put 'put ''aGlzLmRzbWV0YS5maW5kKGY9PiJERF9MT05HREVTQyI9PT1mLk5BTUUpLGg9dGhpcy5kc21ldGEuZmluZChmPT4iRERfU0hPUlRERVNDIj09PWYuTkFNRSk7dGhpcy5kc05vdGU9YSYmYS5WQUxVRT9hLlZBTFVFOmQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6IiJ9c2V0''@;'; put 'put ''dXBIb3QoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubG9hZGluZ1RhYmxlVmlldyYmdGhpcy5saWJEYXRhc2V0JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3Rh''@;'; put 'put ''bmNlLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT41MDA/NTAwOmF9LGFmdGVyR2V0Q29sSGVhZGVyOihhLGQpPT57Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoYSk7aCYm''@;'; put 'put ''dGhpcy5oZWFkZXJQa3MuaW5kZXhPZihoKT4tMSYmZC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxkLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSl9LDFlMyl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW18fDAsYS51cmxGaWx0ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgaD1hLnJvdXRlLnNu''@;'; put 'put ''YXBzaG90LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWgsaC5pbmNsdWRlcygiLiIpfHwoYS5saWI9aCkseWllbGQgYS52aWV3RGF0YShhLnVybEZpbHRlclBrKSxhLm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxl''@;'; put 'put ''RmxhZz0hMX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsS24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUtu''@;'; put 'put ''LnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9S24udmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Lbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJp''@;'; put 'put ''ZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxLbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEtuLnZpZXdlci5zdGFydHVwU2V0PSEwLGEu''@;'; put 'put ''bGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0''@;'; put 'put ''KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuaG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGEudGFibGVGbGFnPSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e2Eud2hlcmVTdHJpbmc9ZC5z''@;'; put 'put ''dHJpbmcsYS5jbGF1c2VzPWQub2JqLGEubGliZHM9ZC5saWJkc30pLHR5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiP2EubG9hZFdpdGhQYXJhbWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKGtoKSxHZShCcyksR2UoTHMpLEdlKEN1KSxHZSh2YyksR2UoU2QpLEdlKFN1KSxHZShmaCksR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShJa3QsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5xdWVyeUZpbHRlckNvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjk1LHZhcnM6MzAsY29uc3RzOltbImNsaUNvbW1hbmRJbnB1dCIsIiJdLFsi''@;'; put 'put ''c2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWyJzZWFyY2hFbCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2Vh''@;'; put 'put ''cmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ry''@;'; put 'put ''b3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5''@;'; put 'put ''Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNBUyJdLFsidmFsdWUiLCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsi''@;'; put 'put ''dmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJLRE9XTiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJpZCJdLFsxLCJtb2RhbC1ib2R5Iiwid2ViLXF1ZXJ5Il0sWzEsInJvdyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIsImNsci1jb2wtc20tMTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiLCJuby1i''@;'; put 'put ''b3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJd''@;'; put 'put ''LFsxLCJjYXJkLWJsb2NrIiwid2ViLXF1ZXJ5LXdyYXBwZXIiLCJ3b3JkLWJyZWFrLWFsbCJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9ubHkiLCIiLDEsIndlYi1xdWVyeS10ZXh0IiwzLCJmb2N1cyIsInZhbHVlIl0sWzEs''@;'; put 'put ''ImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayIsIm5neENsaXBib2FyZCJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xy''@;'; put 'put ''TW9kYWxDbG9zYWJsZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBuby1ib3JkZXJzIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDQsIm5nSWYiXSxbMywib3BlbkNoYW5n''@;'; put 'put ''ZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2Vh''@;'; put 'put ''cmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIs''@;'; put 'put ''NCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdl''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIi''@;'; put 'put ''LCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwiaWQiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsi''@;'; put 'put ''LDMsImRjLWxvY2tlZC1jb250cm9sIiwiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIs''@;'; put 'put ''InRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGci''@;'; put 'put ''XSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwi''@;'; put 'put ''bW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJh''@;'; put 'put ''cmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1u''@;'; put 'put ''Il0sWyJjbGFzcyIsImhlYWRlci1yb3cgY2xyLXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayBu''@;'; put 'put ''b0RhdGEiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWZsZXgtMSIsNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwiZm9ybS1ibG9jayIsInRhYmxlLXNlYXJjaC13cmFwcGVyIiwic3ciLCJjbHItY29sLW1kIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIi''@;'; put 'put ''LCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVj''@;'; put 'put ''a2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwx''@;'; put 'put ''LCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJh''@;'; put 'put ''cmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3cgbXItNSIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDQsIm5nSWYiXSxbMSwib3B0aW9ucy1jb2wiLCJjbHItY29sLW1kIl0sWyJjbGFzcyIsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0Jh''@;'; put 'put ''ciIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtci01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVm''@;'; put 'put ''dCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNrIl0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9u''@;'; put 'put ''SXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZP''@;'; put 'put ''cGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJk''@;'; put 'put ''b3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09''@;'; put 'put ''cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC1saWJyYXJ5LXBuZyIsImFsdCIsInNlbGVjdCBhIGxpYnJhcnkgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQt''@;'; put 'put ''MTAiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJib3JkZXItYm90dG9tLWRpdmlkZXIiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInctMTAwIiwibS0wIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsIm10LTE1IiwibWItMTUiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0x''@;'; put 'put ''MCJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8gcG9pbnRlci1ldmVudHMtbm9uZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsaWJpbmZvIG0tMCBjbHItcm93Iiw0LCJuZ0lmIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8iLCJw''@;'; put 'put ''b2ludGVyLWV2ZW50cy1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbMSwi''@;'; put 'put ''bGliaW5mbyIsIm0tMCIsImNsci1yb3ciXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbS0wIHctMTAwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibS0wIiwidy0xMDAiXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsIm0tMCIsMywiY2xpY2siXSxbMSwibS0wIl0s''@;'; put 'put ''WzEsIm0tMCIsImZvbnQtYm9sZCJdLFsxLCJjYXJkLWJsb2NrIiwibm9EYXRhIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNv''@;'; put 'put ''bG9yLWdyYXkiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwi''@;'; put 'put ''Y29sSGVhZGVycyIsImNvbHVtbnMiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImFmdGVyR2V0Q29sSGVhZGVyIiwicm93SGVh''@;'; put 'put ''ZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImFwcC1zaWRlYmFyIiw1KSxGdCgic2Nyb2xsZWRU''@;'; put 'put ''b0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5sb2FkTW9yZUxpYnJhcmllcygpKX0pLGd0KDEsTGt0LDIsMCwiZGl2Iiw2KSxkZSgyLCJjbHItdHJlZSIpLGd0KDMsRmt0LDYsMywiY2xyLXRyZWUtbm9kZSIsNykoNCwka3QsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCks''@;'; put 'put ''Z3QoNSxLa3QsMywwLCJkaXYiLDkpLGhlKCksZGUoNiwiZGl2IiwxMCksZ3QoNyxxa3QsMTQsMCwiZGl2IiwxMSkoOCxYa3QsMSwwLCJkaXYiLDEyKSxkZSg5LCJjbHItbW9kYWwiLDEzKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5vcGVu''@;'; put 'put ''RG93bmxvYWQsTSl8fChoLm9wZW5Eb3dubG9hZD1NKSxDdChNKX0pLGRlKDEwLCJoMyIsMTQpLExlKDExLCJEb3dubG9hZCIpLGhlKCksZGUoMTIsImRpdiIsMTUpKDEzLCJkaXYiLDE2KSgxNCwiY2xyLXNlbGVjdC1jb250YWluZXIiLDE3KSgxNSwibGFiZWwiKSxMZSgxNiwiUGxlYXNlIGNo''@;'; put 'put ''b29zZSBkb3dubG9hZCBmb3JtYXQiKSxoZSgpLGRlKDE3LCJzZWxlY3QiLDE4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZG93bmxvYWRGb3JtYXQsTSl8fChoLmRvd25sb2FkRm9ybWF0PU0pLEN0KE0pfSksZGUoMTgsIm9wdGlvbiIsMTkpLExl''@;'; put 'put ''KDE5LCJDU1YiKSxoZSgpLGRlKDIwLCJvcHRpb24iLDIwKSxMZSgyMSwiRGF0YWxpbmVzIChjYXJkcyBmaWxlKSIpLGhlKCksZGUoMjIsIm9wdGlvbiIsMjEpLExlKDIzLCJEREwgKFBHU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyNCwib3B0aW9uIiwyMiksTGUoMjUsIkRETCAoU0FTIEZsYXZv''@;'; put 'put ''dXIpIiksaGUoKSxkZSgyNiwib3B0aW9uIiwyMyksTGUoMjcsIkRETCAoVFNRTCBGbGF2b3VyKSIpLGhlKCksZGUoMjgsIm9wdGlvbiIsMjQpLExlKDI5LCJFeGNlbCAoLnhsc3gpIiksaGUoKSxkZSgzMCwib3B0aW9uIiwyNSksTGUoMzEsIk1hcmtkb3duICgubWQpIiksaGUoKSgpKCkoKSgp''@;'; put 'put ''LGRlKDMyLCJkaXYiLDI2KSgzMywiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm9wZW5Eb3dubG9hZD0hMSl9KSxMZSgzNCwiIENhbmNlbCAiKSxoZSgpLGRlKDM1LCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGYpLEN0KGguZG93bmxvYWRGb3JtYXQuaW5jbHVkZXMoIkRETCIpP2guZG93bmxvYWREREwoKTpoLmRvd25sb2FkRGF0YSgpKX0pLExlKDM2LCIgT2sgIiksaGUoKSgpKCksZGUoMzcsImNsci1tb2RhbCIsMTMpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3''@;'; put 'put ''dChmKSxtaShoLndlYlF1ZXJ5LE0pfHwoaC53ZWJRdWVyeT1NKSxDdChNKX0pLGRlKDM4LCJoMyIsMTQpLExlKDM5LCIgV2ViIFF1ZXJ5IFVSTCAiKSxoZSgpLGRlKDQwLCJkaXYiLDI5KSg0MSwiZGl2IiwzMCkoNDIsImRpdiIsMzEpKDQzLCJkaXYiLDMyKSg0NCwiZGl2IiwzMykoNDUsInNw''@;'; put 'put ''YW4iKSxMZSg0NiwiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZlcnJlZCBjbGllbnQgdG9vbDoiKSxoZSgpLGRlKDQ3LCJkaXYiLDM0KSg0OCwiZGl2IiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLndlYlF1ZXJ5VGFiPSEwLEN0KGguc2hvd1dlYlF1ZXJ5''@;'; put 'put ''KCkpfSksR3QoNDksImlucHV0IiwzNiksZGUoNTAsImxhYmVsIiksTGUoNTEsIlRBQiIpLGhlKCkoKSxkZSg1MiwiZGl2IiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLndlYlF1ZXJ5VGFiPSExLEN0KGguc2hvd1dlYlF1ZXJ5KCkpfSksR3QoNTMsImlucHV0Iiwz''@;'; put 'put ''NiksZGUoNTQsImxhYmVsIiksTGUoNTUsIkNTViIpLGhlKCkoKSgpKCksZGUoNTYsImRpdiIsMzcpKDU3LCJ0ZXh0YXJlYSIsMzgsMCksRnQoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkNsaUNvbW1hbmRGb2N1cyhNKSl9KSxMZSg1OSwiICAgICAgICAgICAgICAi''@;'; put 'put ''KSxoZSgpKCksZGUoNjAsImRpdiIsMzkpKDYxLCJidXR0b24iLDQwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29weVRvQ2xpcCgpKX0pLExlKDYyLCIgY29weSB0byBjbGlwYm9hcmQgIiksaGUoKSgpKCkoKSgpKCksZGUoNjMsImRpdiIsMjYpKDY0LCJidXR0''@;'; put 'put ''b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgud2ViUXVlcnk9ITEpfSksTGUoNjUsIiBjbG9zZSAiKSxoZSgpKCkoKSxkZSg2NiwiY2xyLW1vZGFsIiw0MSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgu''@;'; put 'put ''ZmlsdGVyLE0pfHwoaC5maWx0ZXI9TSksQ3QoTSl9KSxkZSg2NywiaDMiLDE0KSxMZSg2OCwiIEZpbHRlciBmb3IgdGFibGU6IiksZGUoNjksInNwYW4iKSxMZSg3MCksaGUoKSgpLGRlKDcxLCJkaXYiLDE1KSxndCg3MixKa3QsMiwwLCJhcHAtcXVlcnkiLDQyKSxoZSgpLGRlKDczLCJkaXYi''@;'; put 'put ''LDI2KSg3NCwiYnV0dG9uIiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2V0RmlsdGVyKCkpfSksTGUoNzUsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg3NiwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmZp''@;'; put 'put ''bHRlcj0hMSxDdChoLnJlbW92ZVF1ZXJ5KCkpfSksTGUoNzcsIiBDYW5jZWwgIiksaGUoKSxkZSg3OCwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNlbmRDbGF1c2UoKSl9KSxMZSg3OSwiIE9rICIpLGhlKCkoKSgpLGRlKDgwLCJjbHItbW9k''@;'; put 'put ''YWwiLDQ2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSg4MSwiaDMiLDQ3KSxMZSg4MiwiRXJyb3IiKSxoZSgpLGRlKDgzLCJkaXYiLDE1KSg4NCwicCIpLExlKDg1KSxo''@;'; put 'put ''ZSgpKCksZGUoODYsImRpdiIsMjYpKDg3LCJidXR0b24iLDQ4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksTGUoODgsIiBDYW5jZWwgIiksaGUoKSxkZSg4OSwiYnV0dG9uIiw0OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLExlKDkwLCIgT2sgIiksaGUoKSgpKCksZ3QoOTEsUWt0LDYsMCwiZGl2Iiw1MCkoOTIsRkR0LDgsNiwiZGl2Iiw1MSksaGUoKSxkZSg5MywiYXBwLWRhdGFzZXQtaW5mbyIsNTIpLGdpKCJvcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3Qo''@;'; put 'put ''ZiksbWkoaC5kYXRhc2V0SW5mbyxNKXx8KGguZGF0YXNldEluZm89TSksQ3QoTSl9KSxGdCgicm93Q2xpY2tlZCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoTSkpfSksaGUoKSxkZSg5NCwiYXBwLXZpZXdib3hlcyIsNTMpLGdpKCJ2''@;'; put 'put ''aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnZpZXdib3hPcGVuLE0pfHwoaC52aWV3Ym94T3Blbj1NKSxDdChNKX0pLGhlKCl9aWYoMiZkKXtjb25zdCBmPWhhKDU4KTtmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKDIpLE1lKCJu''@;'; put 'put ''Z0lmIixoLmxpYnJhcmllcyksZmUoKSxNZSgibmdGb3JPZiIsaC5saWJyYXJpZXMpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLE1lKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkscGkoImNsck1vZGFs''@;'; put 'put ''T3BlbiIsaC5vcGVuRG93bmxvYWQpLE1lKCJjbHJNb2RhbFNpemUiLCJtZCIpLGZlKDgpLHBpKCJuZ01vZGVsIixoLmRvd25sb2FkRm9ybWF0KSxmZSgxOCksTWUoImlkIixoLnRhYmxlVGl0bGUpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgud2ViUXVlcnkpLE1lKCJjbHJNb2RhbFNpemUi''@;'; put 'put ''LCJsZyIpLGZlKDEyKSxNZSgiY2hlY2tlZCIsaC53ZWJRdWVyeVRhYiksZmUoNCksTWUoImNoZWNrZWQiLCFoLndlYlF1ZXJ5VGFiKSxmZSg0KSxNZSgidmFsdWUiLGgud2ViUXVlcnlUZXh0KSxmZSg0KSxNZSgibmd4Q2xpcGJvYXJkIixmKSxmZSg1KSxwaSgiY2xyTW9kYWxPcGVuIixoLmZp''@;'; put 'put ''bHRlciksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSxEcigiICIsaC5saWJUYWIsIiAiKSxmZSgyKSxNZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9w''@;'; put 'put ''ZW4iLGgucXVlcnlFcnIpLGZlKDUpLHdyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxNZSgibmdJZiIsaC5sb2FkaW5nVGFibGVWaWV3KSxmZSgpLE1lKCJuZ0lmIiwhaC5sb2FkaW5nVGFibGVWaWV3KSxmZSgpLHBpKCJvcGVuIixoLmRhdGFzZXRJbmZvKSxNZSgiZHNtZXRhIixoLmRzbWV0''@;'; put 'put ''YSkoInZlcnNpb25zIixoLnZlcnNpb25zKSxmZSgpLHBpKCJ2aWV3Ym94TW9kYWwiLGgudmlld2JveE9wZW4pfX0sZGVwZW5kZW5jaWVzOltJNmUsbnMsYmEsUzIsY3AsVGt0LGw3LEEyLGsyLHFsLE1kLFQyLG5sLG83LCRzLHlwLEVoLFBkLGZnLEhsLG91LEt1LGowLEwyLFAyLGRzLFExZSxJ''@;'; put 'put ''ZCxCeSxTaCxaMSxFNywkeSxRTCxzZyxnNyxtNyxWeSx2Nyx5NyxiNyxSZCxEXyxpNCxPNmUscE8sWGVlLFN3LHI0LEY2ZSxEa3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSER0PVt7cGF0aDoiIixjb21wb25lbnQ6YkF0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRo''@;'; put 'put ''TWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86ImRhdGEifSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OnpOfSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OnpOfSx7cGF0aDoiZGF0YS86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OnpOfSx7cGF0aDoiZGF0YS86bGliTWVtIixjb21wb25lbnQ6ek59''@;'; put 'put ''LHtwYXRoOiJsaW5lYWdlIixjb21wb25lbnQ6ak59LHtwYXRoOiJsaW5lYWdlLzp0YWJsZWlkLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpqTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbiIsY29tcG9uZW50OmpOfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVy''@;'; put 'put ''aS86ZGlyZWN0aW9uLzpyZWxvYWQiLGNvbXBvbmVudDpqTn0se3BhdGg6InZpeWEtYXBpLWV4cGxvcmVyIixjb21wb25lbnQ6TWt0fSx7cGF0aDoibWV0YWRhdGEiLGNvbXBvbmVudDpadGV9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6WnRlfSx7cGF0aDoi''@;'; put 'put ''bWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29tcG9uZW50Olp0ZX0se3BhdGg6InVzZXJuYXYiLGNvbXBvbmVudDp2QXQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZ3JvdXBzIn0se3BhdGg6InVzZXJzIixjb21wb25lbnQ6''@;'; put 'put ''TTdlfSx7cGF0aDoidXNlcnMvOnVyaSIsY29tcG9uZW50Ok03ZX0se3BhdGg6Imdyb3VwcyIsY29tcG9uZW50OnQ4ZX0se3BhdGg6Imdyb3Vwcy86dXJpIixjb21wb25lbnQ6dDhlfSx7cGF0aDoicm9sZXMiLGNvbXBvbmVudDpTN2V9LHtwYXRoOiJyb2xlcy86dXJpIixjb21wb25lbnQ6Uzdl''@;'; put 'put ''fV19XX1dO2xldCBORHQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKEhE''@;'; put 'put ''dCksemNdfSl9fXJldHVybiBjfSkoKSxWRHQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W042''@;'; put 'put ''ZSxSYSxORHQsQWt0LFJjLHowLG85LmZvclJvb3QoKSxHOSxDdyxNQSxRZWUsbmZdfSl9fXJldHVybiBjfSkoKTtjb25zdCBqRHQ9emMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+VkR0''@;'; put 'put ''fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6Ql90LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+Vl90fV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+aXl0fSx7''@;'; put 'put ''cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigpPT55YnR9LHtwYXRoOiJlZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+Yzl0fSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+cV90fSx7cGF0aDoic3lzdGVtIixsb2FkQ2hpbGRyZW46KCk9PmN3dH0se3BhdGg6ImRlcGxveSIsbG9hZENo''@;'; put 'put ''aWxkcmVuOigpPT5scWV9LHtwYXRoOiIqKiIsY29tcG9uZW50OmokZX1dLHt1c2VIYXNoOiEwfSk7bGV0IHpEdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Yyxi''@;'; put 'put ''b290c3RyYXA6W1hZZV19KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbb0wsa2gsdHRlLCRSXSxpbXBvcnRzOltCJGUsVG9lLFJjLElPZSxvQWUsakR0LEN3LHowLEc5LE1BLG5mLG5rdF19KX19cmV0dXJuIGN9KSgpO2tDZSgpLmJvb3RzdHJhcE1vZHVsZSh6RHQpfSwz''@;'; put 'put ''NzM0Oihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57dmFyIF9hc3luY1RvR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oMjkyOTMpLmRlZmF1bHQsX3dyYXBBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDQyOTU4KS5k''@;'; put 'put ''ZWZhdWx0LF9hd2FpdEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNTMzNDQpLmRlZmF1bHQsX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGU9X193ZWJwYWNrX3JlcXVpcmVfXyg5MzUxMykuZGVmYXVsdCxfYXN5bmNJdGVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDgyODgxKS5k''@;'; put 'put ''ZWZhdWx0LHk7c2VsZix5PSgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17MzA2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Dc3ZGb3JtYXR0ZXJT''@;'; put 'put ''dHJlYW09dm9pZCAwO2NvbnN0IF89eSgyODMwKSxnPXkoOTk0Nyk7WC5Dc3ZGb3JtYXR0ZXJTdHJlYW09Y2xhc3MgQiBleHRlbmRzIF8uVHJhbnNmb3Jte2NvbnN0cnVjdG9yKFApe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6UC5vYmplY3RNb2RlfSksdGhpcy5oYXNXcml0dGVuQk9NPSEx''@;'; put 'put ''LHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1QLHRoaXMucm93Rm9ybWF0dGVyPW5ldyBnLlJvd0Zvcm1hdHRlcihQKSx0aGlzLmhhc1dyaXR0ZW5CT009IVAud3JpdGVCT019dHJhbnNmb3JtKFApe3JldHVybiB0aGlzLnJvd0Zvcm1hdHRlci5yb3dUcmFuc2Zvcm09UCx0aGlzfV90cmFuc2Zvcm0o''@;'; put 'put ''UCxGLE8pe2xldCB6PSExO3RyeXt0aGlzLmhhc1dyaXR0ZW5CT018fCh0aGlzLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLkJPTSksdGhpcy5oYXNXcml0dGVuQk9NPSEwKSx0aGlzLnJvd0Zvcm1hdHRlci5mb3JtYXQoUCwoTixMKT0+Tj8oej0hMCxPKE4pKTooTCYmTC5mb3JFYWNoKEs9''@;'; put 'put ''Pnt0aGlzLnB1c2goSS5mcm9tKEssInV0ZjgiKSl9KSx6PSEwLE8oKSkpfWNhdGNoKE4pe2lmKHopdGhyb3cgTjtPKE4pfX1fZmx1c2goUCl7dGhpcy5yb3dGb3JtYXR0ZXIuZmluaXNoKChGLE8pPT5GP1AoRik6KE8mJk8uZm9yRWFjaCh6PT57dGhpcy5wdXNoKEkuZnJvbSh6LCJ1dGY4Iikp''@;'; put 'put ''fSksUCgpKSl9fX0sNjc2MzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRm9ybWF0dGVyT3B0aW9ucz12b2lkIDAsWC5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNzIHl7Y29uc3RydWN0b3IoXz17fSl7dmFyIGc7''@;'; put 'put ''dGhpcy5vYmplY3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPSIsIix0aGlzLnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFk''@;'; put 'put ''ZXJzPW51bGwsdGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLF98fHt9KSx0eXBlb2YgXz8ucXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVv''@;'; put 'put ''dGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PV8/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09Xz8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIF8/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJz''@;'; put 'put ''PSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PShnPV8ud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09Z3x8ZyksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9''@;'; put 'put ''YH19fSw1MTg2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9kdWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxYLkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoeSg4MDk0KSksZz1JKHkoOTcyMikpLEI9SSh5KDE2NTgpKTtYLkZpZWxkRm9ybWF0dGVyPWNsYXNzIHd7Y29uc3RydWN0b3IoRil7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1GLG51bGwh''@;'; put 'put ''PT1GLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Ri5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoRi5xdW90ZSwiZyIpO2NvbnN0IE89YFske0YuZGVsaW1pdGVyfSR7Qi5kZWZhdWx0KEYucm93RGVsaW1pdGVyKX18XHJ8XG5dYDt0aGlzLkVTQ0FQRV9SRUdFWFA9bmV3''@;'; put 'put ''IFJlZ0V4cChPKX1zZXQgaGVhZGVycyhGKXt0aGlzLl9oZWFkZXJzPUZ9c2hvdWxkUXVvdGUoRixPKXtjb25zdCB6PU8/dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlSGVhZGVyczp0aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVDb2x1bW5zO3JldHVybiBfLmRlZmF1bHQoeik/ejpBcnJh''@;'; put 'put ''eS5pc0FycmF5KHopP3pbRl06bnVsbCE9PXRoaXMuX2hlYWRlcnMmJnpbdGhpcy5faGVhZGVyc1tGXV19Zm9ybWF0KEYsTyx6KXtjb25zdCBOPWAke2cuZGVmYXVsdChGKT8iIjpGfWAucmVwbGFjZSgvXDAvZywiIikse2Zvcm1hdHRlck9wdGlvbnM6TH09dGhpcztyZXR1cm4iIiE9PUwucXVv''@;'; put 'put ''dGUmJi0xIT09Ti5pbmRleE9mKEwucXVvdGUpP3RoaXMucXVvdGVGaWVsZChOLnJlcGxhY2UodGhpcy5SRVBMQUNFX1JFR0VYUCxMLmVzY2FwZWRRdW90ZSkpOi0xIT09Ti5zZWFyY2godGhpcy5FU0NBUEVfUkVHRVhQKXx8dGhpcy5zaG91bGRRdW90ZShPLHopP3RoaXMucXVvdGVGaWVsZChO''@;'; put 'put ''KTpOfXF1b3RlRmllbGQoRil7Y29uc3R7cXVvdGU6T309dGhpcy5mb3JtYXR0ZXJPcHRpb25zO3JldHVybmAke099JHtGfSR7T31gfX19LDcxODE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVy''@;'; put 'put ''biBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguUm93Rm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoeSg4NDIzKSksZz1JKHkoMjMwNykpLEI9eSg1MTg2KSx3PXkoNDY5Mik7Y2xhc3MgUHtj''@;'; put 'put ''b25zdHJ1Y3RvcihPKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPU8sdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgQi5GaWVsZEZvcm1hdHRlcihPKSx0aGlzLmhlYWRlcnM9Ty5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPU8uc2hvdWxkV3JpdGVIZWFkZXJz''@;'; put 'put ''LHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLE8udHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09Ty50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShPKXtyZXR1''@;'; put 'put ''cm4hIUFycmF5LmlzQXJyYXkoTykmJkFycmF5LmlzQXJyYXkoT1swXSkmJjI9PT1PWzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShPKXtyZXR1cm4gQXJyYXkuaXNBcnJheShPKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkoTyl9c3RhdGljIGdhdGhlckhlYWRlcnMoTyl7cmV0dXJuIFAuaXNS''@;'; put 'put ''b3dIYXNoQXJyYXkoTyk/Ty5tYXAoej0+elswXSk6QXJyYXkuaXNBcnJheShPKT9POk9iamVjdC5rZXlzKE8pfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0oTyl7cmV0dXJuIHcuaXNTeW5jVHJhbnNmb3JtKE8pPyh6LE4pPT57bGV0IEw9bnVsbDt0cnl7TD1PKHopfWNhdGNoKEspe3JldHVybiBO''@;'; put 'put ''KEspfXJldHVybiBOKG51bGwsTCl9Oih6LE4pPT57Tyh6LE4pfX1zZXQgcm93VHJhbnNmb3JtKE8pe2lmKCFfLmRlZmF1bHQoTykpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1QLmNyZWF0ZVRyYW5z''@;'; put 'put ''Zm9ybShPKX1mb3JtYXQoTyx6KXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihPLChOLEwpPT57aWYoTilyZXR1cm4geihOKTtpZighTylyZXR1cm4geihudWxsKTtjb25zdCBLPVtdO2lmKEwpe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6VSxoZWFkZXJzOld9PXRoaXMuY2hlY2tIZWFkZXJzKEwp''@;'; put 'put ''O2lmKHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzJiZXJiYhdGhpcy5oYXNXcml0dGVuSGVhZGVycyYmKEsucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoVywhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLFUpe2NvbnN0IFk9dGhpcy5nYXRoZXJDb2x1bW5zKEwpO0sucHVzaCh0aGlzLmZv''@;'; put 'put ''cm1hdENvbHVtbnMoWSwhMSkpfX1yZXR1cm4geihudWxsLEspfSl9ZmluaXNoKE8pe2NvbnN0IHo9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmMD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIE8obmV3IEVycm9yKCJgYWx3''@;'; put 'put ''YXlzV3JpdGVIZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTt6LnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0Rl''@;'; put 'put ''bGltaXRlciYmei5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLE8obnVsbCx6KX1jaGVja0hlYWRlcnMoTyl7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCB6PVAuZ2F0aGVySGVh''@;'; put 'put ''ZGVycyhPKTtyZXR1cm4gdGhpcy5oZWFkZXJzPXosdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXosdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IWcuZGVmYXVsdCh6LE8pLGhlYWRlcnM6en06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpu''@;'; put 'put ''dWxsfX1nYXRoZXJDb2x1bW5zKE8pe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoTyk/UC5pc1Jvd0hhc2hBcnJheShPKT90aGlzLmhlYWRlcnMubWFwKCh6LE4pPT57Y29uc3Qg''@;'; put 'put ''TD1PW05dO3JldHVybiBMP0xbMV06IiJ9KTpQLmlzUm93QXJyYXkoTykmJiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9POnRoaXMuaGVhZGVycy5tYXAoKHosTik9Pk9bTl0pOnRoaXMuaGVhZGVycy5tYXAoej0+T1t6XSl9Y2FsbFRyYW5zZm9ybWVyKE8seil7cmV0dXJuIHRoaXMuX3Jvd1Ry''@;'; put 'put ''YW5zZm9ybT90aGlzLl9yb3dUcmFuc2Zvcm0oTyx6KTp6KG51bGwsTyl9Zm9ybWF0Q29sdW1ucyhPLHope2NvbnN0IE49Ty5tYXAoKEssVSk9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KEssVSx6KSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6''@;'; put 'put ''TH09dGhpcztyZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxMP1t0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLE5dLmpvaW4oIiIpOk59fVguUm93Rm9ybWF0dGVyPVB9LDk5NDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLFguRmllbGRGb3JtYXR0ZXI9WC5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBJPXkoNzE4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIlJvd0Zvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuUm93Rm9ybWF0dGVyfX0pO3Zh''@;'; put 'put ''ciBfPXkoNTE4Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIkZpZWxkRm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5GaWVsZEZvcm1hdHRlcn19KX0sNzIwMTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZl''@;'; put 'put ''cixfPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihVLFcsWSxxKXt2b2lkIDA9PT1xJiYocT1ZKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVSxxLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBXW1ldfX0pfTpmdW5jdGlvbihV''@;'; put 'put ''LFcsWSxxKXt2b2lkIDA9PT1xJiYocT1ZKSxVW3FdPVdbWV19KSxnPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihVLFcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShVLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpXfSl9OmZ1bmN0''@;'; put 'put ''aW9uKFUsVyl7VS5kZWZhdWx0PVd9KSxCPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihVKXtpZihVJiZVLl9fZXNNb2R1bGUpcmV0dXJuIFU7dmFyIFc9e307aWYobnVsbCE9VSlmb3IodmFyIFkgaW4gVSkiZGVmYXVsdCIhPT1ZJiZPYmplY3QucHJvdG90eXBlLmhhc093blBy''@;'; put 'put ''b3BlcnR5LmNhbGwoVSxZKSYmXyhXLFUsWSk7cmV0dXJuIGcoVyxVKSxXfSx3PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihVLFcpe2Zvcih2YXIgWSBpbiBVKSJkZWZhdWx0IiE9PVkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVyxZKSYmXyhXLFUs''@;'; put 'put ''WSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyaXRlVG9QYXRoPVgud3JpdGVUb1N0cmluZz1YLndyaXRlVG9CdWZmZXI9WC53cml0ZVRvU3RyZWFtPVgud3JpdGU9WC5mb3JtYXQ9WC5Gb3JtYXR0ZXJPcHRpb25zPVguQ3N2Rm9ybWF0dGVy''@;'; put 'put ''U3RyZWFtPXZvaWQgMDtjb25zdCBQPXkoOTUzOSksRj15KDI4MzApLE89Qih5KDg2NDYpKSx6PXkoNjc2MyksTj15KDMwNjIpO3coeSg0NjkyKSxYKTt2YXIgTD15KDMwNjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJDc3ZGb3JtYXR0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBMLkNzdkZvcm1hdHRlclN0cmVhbX19KTt2YXIgSz15KDY3NjMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5Gb3JtYXR0ZXJPcHRpb25zfX0pLFguZm9ybWF0''@;'; put 'put ''PVU9Pm5ldyBOLkNzdkZvcm1hdHRlclN0cmVhbShuZXcgei5Gb3JtYXR0ZXJPcHRpb25zKFUpKSxYLndyaXRlPShVLFcpPT57Y29uc3QgWT1YLmZvcm1hdChXKSxxPVAucHJvbWlzaWZ5KChlZSxKKT0+e1kud3JpdGUoZWUsdm9pZCAwLEopfSk7cmV0dXJuIFUucmVkdWNlKChlZSxKKT0+ZWUu''@;'; put 'put ''dGhlbigoKT0+cShKKSksUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9PlkuZW5kKCkpLmNhdGNoKGVlPT57WS5lbWl0KCJlcnJvciIsZWUpfSksWX0sWC53cml0ZVRvU3RyZWFtPShVLFcsWSk9Plgud3JpdGUoVyxZKS5waXBlKFUpLFgud3JpdGVUb0J1ZmZlcj0oVSxXPXt9KT0+e2NvbnN0''@;'; put 'put ''IFk9W10scT1uZXcgRi5Xcml0YWJsZSh7d3JpdGUoZWUsSixuZSl7WS5wdXNoKGVlKSxuZSgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoZWUsSik9PntxLm9uKCJlcnJvciIsSikub24oImZpbmlzaCIsKCk9PmVlKEkuY29uY2F0KFkpKSksWC53cml0ZShVLFcpLnBpcGUocSl9KX0sWC53cml0''@;'; put 'put ''ZVRvU3RyaW5nPShVLFcpPT5YLndyaXRlVG9CdWZmZXIoVSxXKS50aGVuKFk9PlkudG9TdHJpbmcoKSksWC53cml0ZVRvUGF0aD0oVSxXLFkpPT57Y29uc3QgcT1PLmNyZWF0ZVdyaXRlU3RyZWFtKFUse2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBYLndyaXRlKFcsWSkucGlwZShxKX19LDQ2''@;'; put 'put ''OTI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsWC5pc1N5bmNUcmFuc2Zvcm09eT0+MT09PXkubGVuZ3RofSwyNjU2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihPKXtyZXR1cm4gTyYmTy5fX2VzTW9kdWxlP086e2RlZmF1bHQ6T319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlY29kZVRva2VuPVguaGFzVG9rZW5FeHBp''@;'; put 'put ''cmVkPVguaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1YLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7Y29uc3QgXz1JKHkoNjI0NSkpO2Z1bmN0aW9uIFAoTyx6KXtyZXR1cm4oMCxfLmRlZmF1bHQpKE8pLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PXp9WC5pc0FjY2Vzc1Rva2Vu''@;'; put 'put ''RXhwaXJpbmc9ZnVuY3Rpb24gZyhPLHo9MzYwMCl7cmV0dXJuIU98fFAoTyx6KX0sWC5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIEIoTyx6PTMwKXtyZXR1cm4hT3x8UChPLHopfSxYLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiB3KE8pe3JldHVybiFPfHxQKE8sMCl9LFguZGVj''@;'; put 'put ''b2RlVG9rZW49ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej0oMCxfLmRlZmF1bHQpKE8pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gen19LDY3OTk6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5f''@;'; put 'put ''X2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09''@;'; put 'put ''PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgyNjU2KSxYKX0sMzI1OToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucHJlZml4TWVzc2FnZT12b2lkIDAsWC5wcmVmaXhNZXNzYWdlPShJLF8p''@;'; put 'put ''PT57aWYoIm9iamVjdCI9PXR5cGVvZiBJKWlmKEkuaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSlJLm1lc3NhZ2U9XytJLm1lc3NhZ2U7ZWxzZXtpZighSS5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse21lc3NhZ2U6X30p''@;'; put 'put ''O2lmKCJvYmplY3QiPT10eXBlb2YgSS5ib2R5JiYoSS5tZXNzYWdlPUkuYm9keS5tZXNzYWdlP18rSS5ib2R5Lm1lc3NhZ2U6XyksInN0cmluZyI9PXR5cGVvZiBJLmJvZHkpe2xldCBnO3RyeXtnPUpTT04ucGFyc2UoSS5ib2R5KX1jYXRjaHtyZXR1cm4gSS5tZXNzYWdlPV8sSX1yZXR1cm4g''@;'; put 'put ''Zy5tZXNzYWdlPWcubWVzc2FnZT9fK2cubWVzc2FnZTpfLEkuYm9keT1nLEl9fXJldHVybiJzdHJpbmciPT10eXBlb2YgSSYmKEk9XytJKSxJfX0sOTc3ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVh''@;'; put 'put ''dGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlz''@;'; put 'put ''JiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksXyh5KDMyNTkpLFgpLF8oeSgxMDY0KSxYKX0sMTA2NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKTtjbGFzcyBfIGV4dGVuZHMg''@;'; put 'put ''RXJyb3J7Y29uc3RydWN0b3IoQj1bXSl7bGV0IHc9KEI9Wy4uLm5ldyBTZXQoQildKS5sZW5ndGg/Qi5qb2luKCIsICIpLnRyaW0oKTpbSS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsSS5TZXJ2ZXJUeXBlLlNhczksSS5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTt3PXcucmVwbGFj''@;'; put 'put ''ZSgvLFxzKFteLF0qKSQvLCIgYW5kICQxIiksc3VwZXIoYEludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiR7MSE9PUIubGVuZ3RoPyJzIjoiIn0gJHsxIT09Qi5sZW5ndGg/ImFyZSI6ImlzIn0gJHt3fWApLHRoaXMubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJv''@;'; put 'put ''dG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fVguU2VydmVyVHlwZUVycm9yPV99LDM5MDY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8seixOLEwpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9u''@;'; put 'put ''KFUsVyl7ZnVuY3Rpb24gWShKKXt0cnl7ZWUoTC5uZXh0KEopKX1jYXRjaChuZSl7VyhuZSl9fWZ1bmN0aW9uIHEoSil7dHJ5e2VlKEwudGhyb3coSikpfWNhdGNoKG5lKXtXKG5lKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1UoSi52YWx1ZSk6ZnVuY3Rpb24gSyhVKXtyZXR1cm4gVSBpbnN0''@;'; put 'put ''YW5jZW9mIE4/VTpuZXcgTihmdW5jdGlvbihXKXtXKFUpfSl9KEoudmFsdWUpLnRoZW4oWSxxKX1lZSgoTD1MLmFwcGx5KE8senx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwZGF0ZUNzdj1YLmNyZWF0ZUNzdj1Y''@;'; put 'put ''LnJlYWRDc3Y9dm9pZCAwO2NvbnN0IF89eSgxNTU5KSxnPXkoNzIwMSk7WC5yZWFkQ3N2PU89Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAsXy5yZWFkRmlsZSkoTykpLnNwbGl0KCJcbiIpLmZpbHRlcihOPT5OLmxlbmd0aCkubWFwKE49Pk4uc3Bs''@;'; put 'put ''aXQoIiwiKSl9KSxYLmNyZWF0ZUNzdj0oTyx6LE4pPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEw9eWllbGQoMCxnLndyaXRlVG9TdHJpbmcpKHose2hlYWRlcnM6Tn0pO3lpZWxkKDAsXy5jcmVhdGVGaWxlKShPLEwpfSksWC51cGRhdGVDc3Y9KE8seixOLEwp''@;'; put 'put ''PT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9eWllbGQgRihPLHosTixMKTtpZihMKXtjb25zdCBVPTA9PT1LLmxlbmd0aD8xOksubGVuZ3RoLFc9Ti5maW5kSW5kZXgoWT0+WT09PUwpO1c+LTE/ei5zcGxpY2UoVywwLFUpOihOLnNwbGljZSgwLDAsTCksei5z''@;'; put 'put ''cGxpY2UoMCwwLFUpKX1LLnB1c2goeikseWllbGQoMCxYLmNyZWF0ZUNzdikoTyxLLE4pfSk7Y29uc3QgRj0oTyx6LE4sTCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoei5sZW5ndGghPT1OLmxlbmd0aCl7aWYoei5sZW5ndGg+Ti5sZW5ndGgpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIUx8fHoubGVuZ3RoKzEhPT1OLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMi''@;'; put 'put ''KX1lbHNlIGlmKEwmJk4uaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29uc3QgSz15aWVsZCgwLFgucmVhZENzdikoTykuY2F0Y2goVz0+W10pLFU9S1swXTtpZihVKXtpZihOLmxl''@;'; put 'put ''bmd0aD5VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihOLmxlbmd0aDxVLmxlbmd0aCl7aWYoIUx8fE4ubGVuZ3RoKzEhPT1VLmxlbmd0aCl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtjb25zdCBXPVUuZmluZEluZGV4KHE9PnE9PT1MKSxZPVsuLi5OXTtpZighKFc+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2Vz''@;'; put 'put ''IG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoWS5zcGxpY2UoVywwLEwpLEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoWSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpT''@;'; put 'put ''T04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoVSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihMJiYhTi5pbmNsdWRlcyhMKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBl''@;'; put 'put ''eGlzdGluZyBkYXRhIil9fXJldHVybiBLfSl9LDE1NTk6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSxhZSx0ZSl7dm9pZCAwPT09dGUmJih0ZT1hZSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KG0sdGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbYWVdfX0pfTpmdW5jdGlvbihtLEEsYWUsdGUpe3ZvaWQgMD09PXRlJiYodGU9YWUpLG1bdGVdPUFbYWVdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/''@;'; put 'put ''ZnVuY3Rpb24obSxBKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5jdGlvbihtLEEpe20uZGVmYXVsdD1BfSksZz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVy''@;'; put 'put ''biBtO3ZhciBBPXt9O2lmKG51bGwhPW0pZm9yKHZhciBhZSBpbiBtKSJkZWZhdWx0IiE9PWFlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxhZSkmJkkoQSxtLGFlKTtyZXR1cm4gXyhBLG0pLEF9LEI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxh''@;'; put 'put ''ZSx0ZSl7cmV0dXJuIG5ldyhhZXx8KGFlPVByb21pc2UpKShmdW5jdGlvbih3ZSxVZSl7ZnVuY3Rpb24gSmUodmUpe3RyeXt4ZSh0ZS5uZXh0KHZlKSl9Y2F0Y2goWGUpe1VlKFhlKX19ZnVuY3Rpb24gb3QodmUpe3RyeXt4ZSh0ZS50aHJvdyh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9fWZ1bmN0''@;'; put 'put ''aW9uIHhlKHZlKXt2ZS5kb25lP3dlKHZlLnZhbHVlKTpmdW5jdGlvbiBzZSh3ZSl7cmV0dXJuIHdlIGluc3RhbmNlb2YgYWU/d2U6bmV3IGFlKGZ1bmN0aW9uKFVlKXtVZSh3ZSl9KX0odmUudmFsdWUpLnRoZW4oSmUsb3QpfXhlKCh0ZT10ZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3''@;'; put 'put ''PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldExpbmVFbmRpbmc9WC5pc1Rlc3RGaWxlPVgudGVzdEZp''@;'; put 'put ''bGVSZWdFeHA9WC5jcmVhdGVSZWFkU3RyZWFtPVguY3JlYXRlV3JpdGVTdHJlYW09WC5nZXRSZWFsUGF0aD1YLmJhc2U2NEVuY29kZUZpbGU9WC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9WC5wYXRoU2VwRXNjYXBlZD1YLmNvcHk9WC5tb3ZlRmlsZT1YLmdldFJlbGF0aXZlUGF0aD1YLnVuaWZ5''@;'; put 'put ''RmlsZVBhdGg9WC5kZWxldGVGb2xkZXI9WC5kZWxldGVGaWxlPVguY3JlYXRlRmlsZT1YLmNyZWF0ZUZvbGRlcj1YLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U2FzRmlsZXNJbkZvbGRlcj1YLmxpc3RJbmlGaWxlc0luRm9s''@;'; put 'put ''ZGVyPVgubGlzdEZpbGVzSW5Gb2xkZXI9WC5yZWFkRmlsZUJpbmFyeT1YLnJlYWRGaWxlPVguaXNGb2xkZXI9WC5mb2xkZXJFeGlzdHM9WC5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBQPXcoeSg1Njc0KSksRj13KHkoMjUyMCkpLE89eSg2MjY2KSx6PWcoeSgyOTc1KSksTj15KDM5MDApO2Z1''@;'; put 'put ''bmN0aW9uIEsobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFkobSl7cmV0dXJuIEIo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlvbiBxKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0''@;'; put 'put ''aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PiFhZS5pc0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfWZ1bmN0aW9uIGllKG0sQT0hMCxhZT1bXSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlz''@;'; put 'put ''ZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbih0ZT0+Qih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoQSYmdGUuZmlsdGVyKHdlPT53ZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCB3ZT1bXTtyZXR1cm4geWllbGQoMCxPLmFzeW5jRm9yRWFjaCkodGUu''@;'; put 'put ''ZmlsdGVyKFVlPT5VZS5pc0RpcmVjdG9yeSgpKSxVZT0+Qih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSmU9VWUubmFtZTtpZighYWUuaW5jbHVkZXMoSmUpKXtjb25zdCBvdD1GLmRlZmF1bHQuam9pbihtLEplKTt3ZT1bLi4ud2UsLi4uKHlpZWxkIGllKG90LEEsYWUp''@;'; put 'put ''KS5tYXAoeGU9PkYuZGVmYXVsdC5qb2luKEplLHhlKSldfX0pKSxbLi4udGUuZmlsdGVyKFVlPT4hVWUuaXNEaXJlY3RvcnkoKSkubWFwKFVlPT5VZS5uYW1lKSwuLi53ZV19cmV0dXJuIHRlLm1hcChzZT0+c2UubmFtZSl9KSl9KX1mdW5jdGlvbiBsZShtKXtyZXR1cm4gQih0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0aW9uIFNlKG0sQT1GLmRlZmF1bHQuc2VwLGFlPSIvIil7Y29uc3QgdGU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgc2U9T2JqZWN0LmtleXModGUpLmZp''@;'; put 'put ''bmQod2U9PnRlW3dlXT09PUEpO2lmKHNlKXtjb25zdCB3ZT10ZVtPYmplY3Qua2V5cyh0ZSkuZmluZChVZT0+VWUhPT1zZSldO3JldHVybiBzZT10ZVtzZV0sbS5zcGxpdCh3ZSkuam9pbihzZSl9cmV0dXJuIG0uc3BsaXQoYWUpLmpvaW4oQSl9WC5maWxlRXhpc3RzPWZ1bmN0aW9uIEwobSl7''@;'; put 'put ''cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxYLmZvbGRlckV4aXN0cz1LLFguaXNGb2xkZXI9ZnVuY3Rp''@;'; put 'put ''b24gVShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChtKS50aGVuKEE9PkEuaXNEaXJlY3RvcnkoKSkuY2F0Y2goKCk9PiExKX0pfSxYLnJlYWRGaWxlPWZ1bmN0aW9uIFcobSxBPSJ1dGY4Iil7cmV0dXJu''@;'; put 'put ''IEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxYLnJlYWRGaWxlQmluYXJ5PVksWC5saXN0RmlsZXNJbkZvbGRlcj1xLFgubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gZWUobSl7cmV0dXJuIEIo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBxKG0pKS5maWx0ZXIoQT0+QS5lbmRzV2l0aCgiLmluaSIpKX0pfSxYLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIEoobSxBPSExLGFlPVtdKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7cmV0dXJuKHlpZWxkIGllKG0sQSxhZSkpLmZpbHRlcih3ZT0+d2UuZW5kc1dpdGgoIi5zYXMiKSl9KX0sWC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uIG5lKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnBy''@;'; put 'put ''b21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PmFlLmlzRGlyZWN0b3J5KCkpLm1hcChhZT0+YWUubmFtZSkpfSl9LFgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWllLFguY3JlYXRlRm9sZGVyPWxlLFguY3JlYXRlRmlsZT1m''@;'; put 'put ''dW5jdGlvbiBtZShtLEEsYWUpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigobT1TZShtKSkuc3BsaXQoRi5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xldCB0ZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApO3RlLnBvcCgpO2NvbnN0IHNlPXRlLmpvaW4oRi5kZWZh''@;'; put 'put ''dWx0LnNlcCk7KHlpZWxkIEsoc2UpKXx8KHlpZWxkIGxlKHNlKSl9cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUobSxBLGFlKX0pfSxYLmRlbGV0ZUZpbGU9ZnVuY3Rpb24gX2UobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRl''@;'; put 'put ''ZmF1bHQucmVtb3ZlKG0pfSl9LFguZGVsZXRlRm9sZGVyPWZ1bmN0aW9uIFRlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJtKG0se3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfSl9LFgudW5pZnlGaWxlUGF0aD1TZSxYLmdldFJl''@;'; put 'put ''bGF0aXZlUGF0aD1mdW5jdGlvbiBqZShtLEEpe2NvbnN0IGFlPW0uc3BsaXQoRi5kZWZhdWx0LnNlcCksdGU9QS5zcGxpdChGLmRlZmF1bHQuc2VwKTtsZXQgc2U9W10sd2U9W107YWUuZm9yRWFjaCgodmUsWGUpPT57dm9pZCAwIT09dGVbWGVdJiZhZVtYZV09PT10ZVtYZV0/c2UucHVzaCh2''@;'; put 'put ''ZSk6dmUmJndlLnB1c2godmUpfSk7Y29uc3QgVWU9c2Uuam9pbihGLmRlZmF1bHQuc2VwKSxKZT1uZXcgUmVnRXhwKGBeJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX1gKSxvdD1uZXcgUmVnRXhwKGAke0YuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfSRg''@;'; put 'put ''KTtyZXR1cm4od2UubGVuZ3RoP2AuLiR7Ri5kZWZhdWx0LnNlcH1gLnJlcGVhdCh3ZS5sZW5ndGgpOmAuJHtGLmRlZmF1bHQuc2VwfWApK0EucmVwbGFjZShVZSwiIikucmVwbGFjZShKZSwiIikucmVwbGFjZShvdCwiIil9LFgubW92ZUZpbGU9ZnVuY3Rpb24gVihtLEEpe3JldHVybiBCKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShtLEEpfSl9LFguY29weT1mdW5jdGlvbiBwKG0sQSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQuY29weShtLEEpfSl9LFgu''@;'; put 'put ''cGF0aFNlcEVzY2FwZWQ9Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksWC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24gYihtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFkobSkudGhlbihBPT57bGV0IGFlPUYuZGVmYXVs''@;'; put 'put ''dC5leHRuYW1lKG0pLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1hZSYmKGFlPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIithZSsiO2Jhc2U2NCwiK0EudG9TdHJpbmcoImJhc2U2NCIpfSl9KX0sWC5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uIHgobSl7cmV0dXJuIEIodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KX0pfSxYLmdldFJlYWxQYXRoPWZ1bmN0aW9uIEMobSl7cmV0dXJuIFAuZGVmYXVsdC5yZWFscGF0aFN5bmMobSl9LFguY3JlYXRlV3JpdGVTdHJl''@;'; put 'put ''YW09ZnVuY3Rpb24gVChtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHouZmlsZUV4aXN0cyhtKSl8fCh5aWVsZCB6LmNyZWF0ZUZpbGUobSwiIikpLFAuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShtLHtmbGFnczoiYSJ9KX0pfSxYLmNy''@;'; put 'put ''ZWF0ZVJlYWRTdHJlYW09bT0+Qih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0obSl9KSxYLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLFguaXNUZXN0RmlsZT1tPT5YLnRlc3RGaWxlUmVnRXhw''@;'; put 'put ''LnRlc3QobSksWC5nZXRMaW5lRW5kaW5nPW09Pm5ldyBSZWdFeHAoTi5MaW5lRW5kaW5ncy5DUkxGKS50ZXN0KG0pP04uTGluZUVuZGluZ3MuQ1JMRjpOLkxpbmVFbmRpbmdzLkxGfSw1NjI2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnRE''@;'; put 'put ''ZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFic29sdXRlUGF0aD12b2lkIDA7Y29uc3QgXz1JKHkoMjUyMCkpLGc9SSh5KDc0MzUpKTtY''@;'; put 'put ''LmdldEFic29sdXRlUGF0aD0odyxQKT0+Xy5kZWZhdWx0LmlzQWJzb2x1dGUodyl8fC9efi8uZXhlYyh3KT9fLmRlZmF1bHQubm9ybWFsaXplKHcucmVwbGFjZSgvXn4vLGcuZGVmYXVsdC5ob21lZGlyKCkpKTpfLmRlZmF1bHQuam9pbihQLHcpfSwyOTc1OmZ1bmN0aW9uKHVlLFgseSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxPLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0p''@;'; put 'put ''fTpmdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSx3W09dPVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxGKSYm''@;'; put 'put ''SShQLHcsRil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnJlYWRDc3Y9WC5jcmVhdGVDc3Y9WC51cGRhdGVDc3Y9WC5nZXRMaW5lRW5kaW5nPVgudGVzdEZpbGVSZWdFeHA9WC5pc1Rlc3RGaWxlPVguZ2V0UmVhbFBhdGg9WC5iYXNlNjRFbmNv''@;'; put 'put ''ZGVGaWxlPVguYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPVguY29weT1YLnBhdGhTZXBFc2NhcGVkPVgubW92ZUZpbGU9WC51bmlmeUZpbGVQYXRoPVguZ2V0UmVsYXRpdmVQYXRoPVguZGVsZXRlRm9sZGVyPVguZGVsZXRlRmlsZT1YLmNyZWF0ZVdyaXRlU3RyZWFtPVguY3JlYXRlUmVhZFN0cmVh''@;'; put 'put ''bT1YLmNyZWF0ZUZvbGRlcj1YLmNyZWF0ZUZpbGU9WC5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9WC5saXN0SW5pRmlsZXNJbkZvbGRlcj1YLmxpc3RGaWxlc0luRm9sZGVyPVgucmVhZEZpbGVC''@;'; put 'put ''aW5hcnk9WC5yZWFkRmlsZT1YLmlzRm9sZGVyPVguZm9sZGVyRXhpc3RzPVguZmlsZUV4aXN0cz12b2lkIDA7dmFyIGc9eSgxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZmlsZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZmlsZUV4aXN0c319''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZy5pc0ZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''bGlzdEluaUZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGcubGlzdFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFgsImxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlUmVhZFN0''@;'; put 'put ''cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZVdyaXRlU3RyZWFt''@;'; put 'put ''fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBnLmRlbGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVuaWZ5RmlsZVBhdGgiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''cGF0aFNlcEVzY2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jb3B5fX0pLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShYLCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGcuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc1Rlc3RGaWxlIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudGVzdEZpbGVSZWdFeHB9fSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KFgsImdldExpbmVFbmRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdldExpbmVFbmRpbmd9fSk7dmFyIEI9eSgzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gQi51cGRhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gQi5yZWFkQ3N2fX0pLF8oeSg1NjI2KSxYKX0sMjc3NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPVguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1YLnNhbml0aXplU3BlY2lh''@;'; put 'put ''bENoYXJzPVgucGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIEk9eSg1MzA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucGFkV2l0aE51bWJlcn19KTt2YXIgXz15KDkyNzUpO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBfLmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIGc9eSgxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubmV3TGluZX19KX0sNTMwNjoodWUsWCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFkV2l0aE51bWJlcj12b2lkIDAsWC5wYWRXaXRoTnVtYmVyPShJLF89MCk9Pkk+OT9JOmAke199JHtJfWB9LDE2Mjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPXZvaWQgMCxYLm5ld0xpbmU9KCk9PiJ3aW4zMiI9PT1JLnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifSw5Mjc1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jYXBpdGFsaXplRmlyc3RDaGFyPVguc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLFguc2FuaXRpemVTcGVjaWFsQ2hhcnM9Xz0+Xy5yZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkq''@;'; put 'put ''KT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCIiKSxYLmNhcGl0YWxpemVGaXJzdENoYXI9Xz0+Xy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStfLnNsaWNlKDEpfSw2NDY3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5j''@;'; put 'put ''dGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxp''@;'; put 'put ''ZGF0b3I9dm9pZCAwO2NvbnN0IF89SSh5KDQ4MSkpO1gudXJsVmFsaWRhdG9yPShGLE8pPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoRil8fCIiPT09Rnx8TyxYLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixYLmNob2lj''@;'; put 'put ''ZVZhbGlkYXRvcj0oRixPLHopPT5GPjAmJkY8PU98fHosWC5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDc3NTc6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUaW1lc3RhbXA9WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPVguY29udmVydFNlY29uZHNUb0htcz12b2lkIDA7dmFyIEk9eSgxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiY29udmVydFNlY29uZHNUb0htcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29udmVydFNlY29uZHNUb0htc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIEkudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNvbnZlcnRTZWNvbmRzVG9IbXM9WC5nZW5lcmF0ZVRpbWVzdGFtcD1YLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO2NvbnN0IEk9eSgyNzc3KTtYLnRpbWVzdGFt''@;'; put 'put ''cFRvWVlZWU1NRERISE1NU1M9KHc9RGF0ZS5ub3coKSk9Pntjb25zdCBQPW5ldyBEYXRlKHcpO3JldHVybltQLmdldEZ1bGxZZWFyKCksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1vbnRoKCkrMSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygw''@;'; put 'put ''LEkucGFkV2l0aE51bWJlcikoUC5nZXRIb3VycygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0TWludXRlcygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxYLmdlbmVyYXRlVGltZXN0YW1wPSh3PSIiLFApPT57Y29uc3QgRj1uZXcgRGF0ZTts''@;'; put 'put ''ZXQgTz1bRi5nZXRVVENGdWxsWWVhcigpLEYuZ2V0VVRDTW9udGgoKSsxLEYuZ2V0VVRDRGF0ZSgpLEYuZ2V0VVRDSG91cnMoKSxGLmdldFVUQ01pbnV0ZXMoKSxGLmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIE89Ty5tYXAoej0+KDAsSS5wYWRXaXRoTnVtYmVyKSh6KSksUCYmdyYmUDxPLmxl''@;'; put 'put ''bmd0aCYmUD49MCYmTy5zcGxpY2UoUCwwLHcpLE89Ty5qb2luKFA/IiI6dyksT30sWC5jb252ZXJ0U2Vjb25kc1RvSG1zPXc9PntpZighdylyZXR1cm4iMCBzZWNvbmQiO2NvbnN0IFA9TWF0aC5mbG9vcih3LzYwKSxGPU1hdGguZmxvb3IoUC82MCksTz1QJTYwLHo9dyU2MDtsZXQgTj0iIjty''@;'; put 'put ''ZXR1cm4gRj4wJiYoTj1GKyIgaG91ciIrKEY+MT8icyI6IiIpKSxPPjAmJihOKz1gJHtOPyIsICI6IiJ9JHtPfSBtaW51dGUke08+MT8icyI6IiJ9YCksej4wJiYoTis9YCR7Tj8iLCAiOiIifSR7en0gc2Vjb25kJHt6PjE/InMiOiIifWApLE59fSw4MjM5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db25maWdUeXBlcz12b2lkIDAsKEk9WC5Db25maWdUeXBlc3x8KFguQ29uZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLEkuU2VydmljZT0ic2VydmljZUNvbmZpZyIsSS5K''@;'; put 'put ''b2I9ImpvYkNvbmZpZyIsSS5UZXN0PSJ0ZXN0Q29uZmlnIixJLkRvYz0iZG9jQ29uZmlnIixJLkRlcGxveT0iZGVwbG95Q29uZmlnIixJLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixJLkF1dGg9ImF1dGhDb25maWcifSwyNDI3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzNjkyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3Mjk6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxpbmVFbmRpbmdzPXZvaWQgMCwoST1YLkxpbmVFbmRpbmdzfHwoWC5MaW5lRW5kaW5ncz17fSkpLkNS''@;'; put 'put ''TEY9IlxyXG4iLEkuTEY9IlxuIn0sNjkzOToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTWVtYmVyVHlwZT12b2lkIDAsKEk9WC5NZW1iZXJUeXBlfHwoWC5NZW1iZXJUeXBlPXt9KSkuc2Vydmlj''@;'; put 'put ''ZT0ic2VydmljZSIsSS5maWxlPSJmaWxlIixJLmZvbGRlcj0iZm9sZGVyIn0sMzMyNzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1MTY1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcp''@;'; put 'put ''ImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSg4MjM5KSxYKSxfKHkoMjQyNyksWCksXyh5KDE4OSksWCksXyh5KDM2OTIp''@;'; put 'put ''LFgpLF8oeSg2OTM5KSxYKSxfKHkoMzMyNyksWCksXyh5KDUxNjUpLFgpLF8oeSg0MDY5KSxYKSxfKHkoODkzMiksWCksXyh5KDQpLFgpLF8oeSgyMDE1KSxYKSxfKHkoODUxNSksWCksXyh5KDUzMTMpLFgpLF8oeSg4OTc5KSxYKSxfKHkoNDcyOSksWCl9LDQwNjk6KHVlLFgpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTWFjcm9WYXJzPXZvaWQgMCxYLmlzTWFjcm9WYXJzPUk9PkkmJiJvYmplY3QiPT10eXBlb2YgSS5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KEkubWFjcm9WYXJzKX0sODkzMjoodWUs''@;'; put 'put ''WCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNKc0ZpbGVUeXBlPXZv''@;'; put 'put ''aWQgMCwoST1YLlNBU0pzRmlsZVR5cGV8fChYLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixJLmpvYj0iSm9iIixJLnRlc3Q9IlRlc3QiLEkuZmlsZT0iRmlsZSJ9LDIwMTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KX0sODUxNToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2VydmVyVHlwZT12b2lkIDAsKEk9WC5TZXJ2ZXJUeXBlfHwoWC5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0i''@;'; put 'put ''U0FTVklZQSIsSS5TYXM5PSJTQVM5IixJLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODk3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5UYXJnZXQ9dm9pZCAwO2NvbnN0IEk9eSg4MjM5KSxfPXkoODUxNSksZz15KDY3ODEpO1guVGFyZ2V0PWNsYXNzIEJ7Y29uc3RydWN0b3IoUCxGPXt9KXt0aGlzLl9zZXJ2ZXJUeXBlPV8uU2VydmVyVHlwZS5TYXNWaXlhLHRoaXMuZ2V0''@;'; put 'put ''Q29uZmlnPShPLHopPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5fY29uZmlnW09dfHx7fSkseltPXSk7dHJ5e2lmKCFQKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUYs''@;'; put 'put ''dGhpcy5fbmFtZT0oMCxnLnZhbGlkYXRlVGFyZ2V0TmFtZSkoUC5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAsZy52YWxpZGF0ZVNlcnZlclVybCkoUC5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAsZy52YWxpZGF0ZVNlcnZlclR5cGUpKFAuc2VydmVyVHlwZSksdGhpcy5faHR0cHNB''@;'; put 'put ''Z2VudE9wdGlvbnM9KDAsZy52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zKShQLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAsZy52YWxpZGF0ZUFwcExvYykoUC5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLGcudmFsaWRhdGVDb250ZXh0TmFtZSkoUC5jb250ZXh0TmFt''@;'; put 'put ''ZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLGcudmFsaWRhdGVTZXJ2ZXJOYW1lKShQLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxnLnZhbGlkYXRlU3luY0ZvbGRlcikoUC5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5''@;'; put 'put ''TmFtZT0oMCxnLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKFAucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksUC5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAsZy52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Eb2MsUCkpKSxQLmF1''@;'; put 'put ''dGhDb25maWcmJih0aGlzLl9hdXRoQ29uZmlnPSgwLGcudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkF1dGgsUCkpKSxQLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAsZy52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShQLmF1''@;'; put 'put ''dGhDb25maWdTYXM5KSksUC5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxkQ29uZmlnPSgwLGcudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5CdWlsZCxQKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLGcudmFsaWRhdGVEZXBsb3lD''@;'; put 'put ''b25maWcpKFAuZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRGVwbG95LFApOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksUC5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxnLnZhbGlkYXRlU2VydmljZUNvbmZp''@;'; put 'put ''ZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5TZXJ2aWNlLFApKSksUC5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAsZy52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Kb2IsUCkpKSxQLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVh''@;'; put 'put ''bUNvbmZpZz0oMCxnLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlN0cmVhbSxQKSkpLFAudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAsZy52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuVGVz''@;'; put 'put ''dCxQKSkpLFAubWFjcm9Gb2xkZXJzJiZQLm1hY3JvRm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9UC5tYWNyb0ZvbGRlcnMpLFAucHJvZ3JhbUZvbGRlcnMmJlAucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9UC5wcm9ncmFtRm9sZGVycyks''@;'; put 'put ''UC5iaW5hcnlGb2xkZXJzJiZQLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1QLmJpbmFyeUZvbGRlcnMpLFAuc3luY0RpcmVjdG9yaWVzJiZQLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAsZy52YWxpZGF0ZVN5bmNE''@;'; put 'put ''aXJlY3RvcmllcykoUC5zeW5jRGlyZWN0b3JpZXMpKSxQLnNhc2pzQnVpbGRGb2xkZXImJih0aGlzLl9zYXNqc0J1aWxkRm9sZGVyPSgwLGcudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyKShQLnNhc2pzQnVpbGRGb2xkZXIpKSxQLnNhc2pzUmVzdWx0c0ZvbGRlciYmKHRoaXMuX3Nhc2pzUmVz''@;'; put 'put ''dWx0c0ZvbGRlcj0oMCxnLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyKShQLnNhc2pzUmVzdWx0c0ZvbGRlcikpfWNhdGNoKE8pe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyB0YXJnZXQ6ICR7Ty5tZXNzYWdlfWApfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWdldCBz''@;'; put 'put ''ZXJ2ZXJVcmwoKXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfWdldCBzZXJ2ZXJUeXBlKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9Z2V0IGh0dHBzQWdlbnRPcHRpb25zKCl7cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfWdldCBhcHBMb2MoKXtyZXR1cm4gdGhpcy5fYXBwTG9jfWdl''@;'; put 'put ''dCBkb2NDb25maWcoKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfWdldCBhdXRoQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9Z2V0IGF1dGhDb25maWdTYXM5KCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWdTYXM5fWdldCBidWlsZENvbmZpZygpe3JldHVybiB0aGlzLl9idWlsZENv''@;'; put 'put ''bmZpZ31nZXQgZGVwbG95Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ31nZXQgc2VydmljZUNvbmZpZygpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfWdldCBqb2JDb25maWcoKXtyZXR1cm4gdGhpcy5fam9iQ29uZmlnfWdldCBzdHJlYW1Db25maWcoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fc3RyZWFtQ29uZmlnfWdldCBtYWNyb0ZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfWdldCBwcm9ncmFtRm9sZGVycygpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9sZGVyc31nZXQgYmluYXJ5Rm9sZGVycygpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfWdldCBjb250''@;'; put 'put ''ZXh0TmFtZSgpe3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX1nZXQgc2VydmVyTmFtZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfWdldCByZXBvc2l0b3J5TmFtZSgpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX1nZXQgdGVzdENvbmZpZygpe3JldHVybiB0aGlzLl90ZXN0Q29uZmln''@;'; put 'put ''fWdldCBzeW5jRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9Z2V0IHN5bmNEaXJlY3Rvcmllcygpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9Z2V0IHNhc2pzQnVpbGRGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNCdWlsZEZvbGRlcn1nZXQgc2FzanNSZXN1bHRzRm9s''@;'; put 'put ''ZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcn10b0pzb24oUD0hMCl7dmFyIEYsTyx6O2NvbnN0IE49e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBz''@;'; put 'put ''QWdlbnRPcHRpb25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oRj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUYpJiZGLmxlbmd0aCYmKE4ubWFjcm9Gb2xkZXJz''@;'; put 'put ''PXRoaXMubWFjcm9Gb2xkZXJzKSwhKG51bGw9PT0oTz10aGlzLnByb2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09TykmJk8ubGVuZ3RoJiYoTi5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oej10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT16KSYmei5s''@;'; put 'put ''ZW5ndGgmJihOLmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJzKSx0aGlzLmF1dGhDb25maWcmJihOLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoTi5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnNhc2pzQnVp''@;'; put 'put ''bGRGb2xkZXI/Ti5zYXNqc0J1aWxkRm9sZGVyPXRoaXMuc2FzanNCdWlsZEZvbGRlcjpQJiYoTi5zYXNqc0J1aWxkRm9sZGVyPWcuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVIpLHRoaXMuc2FzanNSZXN1bHRzRm9sZGVyP04uc2FzanNSZXN1bHRzRm9sZGVyPXRoaXMuc2FzanNSZXN1bHRz''@;'; put 'put ''Rm9sZGVyOlAmJihOLnNhc2pzUmVzdWx0c0ZvbGRlcj1nLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVIpLHRoaXMuc3luY0RpcmVjdG9yaWVzP04uc3luY0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9yaWVzOlAmJihOLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZp''@;'; put 'put ''Zz9OLmJ1aWxkQ29uZmlnPXRoaXMuYnVpbGRDb25maWc6UCYmKE4uYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6YCR7dGhpcy5uYW1lfS5zYXNgLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP04uam9iQ29uZmlnPXRo''@;'; put 'put ''aXMuam9iQ29uZmlnOlAmJihOLmpvYkNvbmZpZz17am9iRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/Ti5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpQJiYoTi5zZXJ2aWNlQ29uZmlnPXtz''@;'; put 'put ''ZXJ2aWNlRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9OLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpQJiYoTi5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEs''@;'; put 'put ''d2ViU291cmNlUGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3NldFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP04udGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6UCYmKE4udGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RT''@;'; put 'put ''ZXRVcDoiIix0ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9PT1fLlNlcnZlclR5cGUuU2FzVml5YT9OLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09Xy5TZXJ2ZXJUeXBlLlNhczkmJihOLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLE4u''@;'; put 'put ''cmVwb3NpdG9yeU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksTn19fSw2NzgxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihwKXtyZXR1cm4gcCYmcC5fX2VzTW9kdWxlP3A6e2RlZmF1bHQ6cH19O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPVgudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPVgudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9WC52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPVgudmFsaWRhdGVTeW5j''@;'; put 'put ''Rm9sZGVyPVgudmFsaWRhdGVTZXJ2ZXJOYW1lPVgudmFsaWRhdGVDb250ZXh0TmFtZT1YLnZhbGlkYXRlU3RyZWFtQ29uZmlnPVgudmFsaWRhdGVEZXBsb3lDb25maWc9WC52YWxpZGF0ZUpvYkNvbmZpZz1YLnZhbGlkYXRlVGVzdENvbmZpZz1YLnZhbGlkYXRlU2VydmljZUNvbmZpZz1YLnZh''@;'; put 'put ''bGlkYXRlQnVpbGRDb25maWc9WC52YWxpZGF0ZUF1dGhDb25maWdTYXM5PVgudmFsaWRhdGVBdXRoQ29uZmlnPVgudmFsaWRhdGVEb2NDb25maWc9WC52YWxpZGF0ZUFwcExvYz1YLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9WC52YWxpZGF0ZVNlcnZlclVybD1YLnZhbGlkYXRlVGFyZ2V0''@;'; put 'put ''TmFtZT1YLnZhbGlkYXRlU2VydmVyVHlwZT1YLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj12b2lkIDA7Y29uc3QgXz1JKHkoNDgxKSksZz15KDM5MDApO1guREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVI9InNhc2pzYnVpbGQiLFgu''@;'; put 'put ''REVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj0ic2FzanNyZXN1bHRzIixYLnZhbGlkYXRlU2VydmVyVHlwZT1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHAhPT1n''@;'; put 'put ''LlNlcnZlclR5cGUuU2FzOSYmcCE9PWcuU2VydmVyVHlwZS5TYXNWaXlhJiZwIT09Zy5TZXJ2ZXJUeXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXJ2ZXIgdHlwZTogU3VwcG9ydGVkIHZhbHVlcyBmb3IgIFxgc2VydmVyVHlwZVxgIGFyZSAke2cuU2VydmVyVHlwZS5TYXNW''@;'; put 'put ''aXlhfSwgJHtnLlNlcnZlclR5cGUuU2FzOX0gYW5kICR7Zy5TZXJ2ZXJUeXBlLlNhc2pzfS5gKTtyZXR1cm4gcH0sWC52YWxpZGF0ZVRhcmdldE5hbWU9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBv''@;'; put 'put ''ciB1bmRlZmluZWQuIik7aWYocC50cmltKCkuaW5jbHVkZXMoIiAiKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSskL2kudGVzdChwKSl0aHJvdyBuZXcgRXJyb3IoIkludmFs''@;'; put 'put ''aWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVTZXJ2ZXJVcmw9cD0+e2lmKG51bGw9PXAmJihwPSIiKSwiIiE9PXAmJiFfLmRlZmF1bHQuaXNIdHRwVXJpKHApJiYh''@;'; put 'put ''Xy5kZWZhdWx0LmlzSHR0cHNVcmkocCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQp''@;'; put 'put ''LiIpO3JldHVybiBwfSxYLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9cD0+e2lmKHApe2lmKCJvYmplY3QiIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qg''@;'; put 'put ''b2YgYEh0dHBzQWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PXAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2YgcC5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVl''@;'; put 'put ''OiBgaHR0cHNBZ2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgcC5jYVBhdGgmJihwLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5rZXlQYXRoJiYo''@;'; put 'put ''cC5rZXlQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLmNlcnRQYXRoJiYocC5jZXJ0UGF0aD12b2lkIDApLHB9fSxYLnZhbGlkYXRlQXBwTG9jPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51''@;'; put 'put ''bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFwLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGggYSBgL2AuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVEb2NDb25maWc9cD0+e2lmKHB8fChwPXt9KSwiYm9v''@;'; put 'put ''bGVhbiIhPXR5cGVvZiBwLmRpc3BsYXlNYWNyb0NvcmUmJihwLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBwLmVuYWJsZUxpbmVhZ2UmJihwLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAub3V0RGlyZWN0b3J5JiYocC5vdXREaXJl''@;'; put 'put ''Y3Rvcnk9dm9pZCAwKSwic3RyaW5nIj09dHlwZW9mIHAuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09cC5kYXRhQ29udHJvbGxlclVybCYmIV8uZGVmYXVsdC5pc0h0dHBVcmkocC5kYXRhQ29udHJvbGxlclVybCkmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShwLmRhdGFDb250cm9sbGVyVXJs''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1l''@;'; put 'put ''bHNlIHAuZGF0YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBwfSxYLnZhbGlkYXRlQXV0aENvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcH0sWC52YWxpZGF0''@;'; put 'put ''ZUF1dGhDb25maWdTYXM5PXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFwLnVzZXJOYW1lfHwhcC5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0''@;'; put 'put ''aCBjb25maWcgZm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIHB9LFgudmFsaWRhdGVCdWlsZENvbmZpZz0ocCxiKT0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWlsZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwg''@;'; put 'put ''b3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmJ1aWxkT3V0cHV0RmlsZU5hbWV8fChwLmJ1aWxkT3V0cHV0RmlsZU5hbWU9YCR7Yn0uc2FzYCkscC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLm1hY3JvVmFyc3x8KHAu''@;'; put 'put ''bWFjcm9WYXJzPXt9KSxwfSxYLnZhbGlkYXRlU2VydmljZUNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09''@;'; put 'put ''IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLnNlcnZpY2VGb2xkZXJzfHwocC5zZXJ2aWNlRm9sZGVycz1bXSkscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0sWC52YWxpZGF0ZVRlc3RDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxp''@;'; put 'put ''ZCB0ZXN0IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscC50ZXN0U2V0''@;'; put 'put ''VXB8fChwLnRlc3RTZXRVcD0iIikscC50ZXN0VGVhckRvd258fChwLnRlc3RUZWFyRG93bj0iIikscH0sWC52YWxpZGF0ZUpvYkNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3Jl''@;'; put 'put ''dHVybiBwLmluaXRQcm9ncmFtfHwocC5pbml0UHJvZ3JhbT0iIikscC50ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAuam9iRm9sZGVyc3x8KHAuam9iRm9sZGVycz1bXSkscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0sWC52YWxpZGF0ZURlcGxveUNvbmZpZz1wPT57''@;'; put 'put ''aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmRlcGxveVNlcnZpY2VQYWNrPSEhcC5kZXBsb3lTZXJ2aWNlUGFjayxwLmRlcGxveVNjcmlwdHN8fChwLmRlcGxveVNjcmlwdHM9''@;'; put 'put ''W10pLHB9LFgudmFsaWRhdGVTdHJlYW1Db25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighMCE9PXAuc3RyZWFtV2ViJiYhMSE9PXAuc3RyZWFtV2ViKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBjYW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihwLnN0cmVhbVdlYiYmIXAuc3RyZWFtV2ViRm9sZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVy''@;'; put 'put ''YCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gYHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihwLnN0cmVhbVdlYiYmIXAud2ViU291cmNlUGF0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHdlYlNvdXJjZVBhdGhgIHNob3VsZCBjb250''@;'; put 'put ''YWluIHRoZSBwYXRoIHRvIHlvdXIgZnJvbnRlbmQgYXBwbGljYXRpb24gZWcgYnVpbGQsIGRpc3QsIG9yIHNyYy4iKTtyZXR1cm4gcC5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIHAuc3RyZWFtTG9nbyYmKHAuc3RyZWFtTG9nbz12b2lkIDApLHAuYXNzZXRQYXRoc3x8KHAuYXNzZXRQ''@;'; put 'put ''YXRocz1bXSkscC5zdHJlYW1TZXJ2aWNlTmFtZXx8KHAuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxwfSxYLnZhbGlkYXRlQ29udGV4dE5hbWU9KHAsYik9PmIhPT1nLlNlcnZlclR5cGUuU2FzVml5YXx8cD9wOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLFgudmFs''@;'; put 'put ''aWRhdGVTZXJ2ZXJOYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhczl8fHA/cDoiU0FTQXBwIixYLnZhbGlkYXRlU3luY0ZvbGRlcj1wPT57aWYoInN0cmluZyI9PXR5cGVvZiBwJiZwKXJldHVybiBwfSxYLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9KHAsYik9PmIhPT1nLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzOXx8cD9wOiJGb3VuZGF0aW9uIixYLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuZm9yRWFjaChi''@;'; put 'put ''PT57aWYoIWIubG9jYWx8fCFiLnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxwfSxYLnZhbGlkYXRlU2FzanNC''@;'; put 'put ''dWlsZEZvbGRlcj1wPT57aWYoInN0cmluZyIhPXR5cGVvZiBwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBwfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5ICdzYXNqc0J1aWxkRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5g''@;'; put 'put ''KTtyZXR1cm4gcHx8WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUn0sWC52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1wPT57aWYoInN0cmluZyIhPXR5cGVvZiBwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBwfSkgaXMgcHJvdmlkZWQgZm9y''@;'; put 'put ''IHByb3BlcnR5ICdzYXNqc1Jlc3VsdHNGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBwfHxYLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVJ9fSwyOTI3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89''@;'; put 'put ''dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVjb2RlRnJvbUJhc2U2ND1YLmVuY29kZVRvQmFzZTY0PXZv''@;'; put 'put ''aWQgMDtjb25zdCBnPV8oeSg1ODM1KSksQj0ie3Nhc2pzX2VuY29kZWR9IjtYLmVuY29kZVRvQmFzZTY0PUY9Pntjb25zdCBPPWcuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3RyaW5nKCJoZXgiKSx6PUkuZnJvbShPK0YpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gQit6fSxYLmRl''@;'; put 'put ''Y29kZUZyb21CYXNlNjQ9Rj0+Ri5zdGFydHNXaXRoKEIpPyhGPUYucmVwbGFjZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLEkuZnJvbShGLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0cmluZygyMDApKTpGfSw1ODE6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmJ5dGVzVG9TaXplPXZvaWQgMCxYLmJ5dGVzVG9TaXplPShJLF89MSxnPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PUkpcmV0dXJuIjAgQiI7ST1JPmc/ZzpJO2NvbnN0IFA9XzwwPzA6XyxGPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0''@;'; put 'put ''aC5sb2coMTAyNCkpO3JldHVybihJL01hdGgucG93KDEwMjQsRikpLnRvRml4ZWQoUCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bRl19fSw4NjUzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5j''@;'; put 'put ''aHVuaz12b2lkIDAsWC5jaHVuaz1mdW5jdGlvbiB5KEksXz0yMjApe3JldHVybiBJLmxlbmd0aDw9Xz9bSV06KEkubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIrXysifSIsImciKSl8fFtdKS5maWx0ZXIoZz0+ISFnKX19LDY0NTc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRpZmY9dm9pZCAwLFguZGlmZj1mdW5jdGlvbiB5KEksXyl7cmV0dXJuWy4uLkkuZmlsdGVyKHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoXykuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiFfLmlu''@;'; put 'put ''Y2x1ZGVzKHcpKSwuLi5fLmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohSS5pbmNsdWRlcyh3KSldfX0sMTUyOToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDtjb25zdCB5PXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O1guZ2V0RXhlY3V0b3JQYXRoPV89Pl8/KF89Xy50b1VwcGVyQ2FzZSgpLHlbX118fCIiKToi''@;'; put 'put ''In0sMzMxNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRUcmVlRXhhbXBsZT1YLmlzRmlsZVRyZWU9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKTtYLmlzRmlsZVRyZWU9Rj0+RiYmRi5tZW1iZXJzJiZB''@;'; put 'put ''cnJheS5pc0FycmF5KEYubWVtYmVycykmJjA9PT1GLm1lbWJlcnMuZmlsdGVyKE89PiFnKE8pJiYhQihPKSYmIXcoTykpLmxlbmd0aDtjb25zdCBnPUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBG''@;'; put 'put ''LmNvZGUsQj1GPT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLHc9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5mb2xkZXImJkYubWVtYmVycyYm''@;'; put 'put ''QXJyYXkuaXNBcnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihPPT4hZyhPKSYmIUIoTykmJiF3KE8pKS5sZW5ndGg7WC5nZXRUcmVlRXhhbXBsZT0oKT0+KHttZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJl''@;'; put 'put ''eHRyYWN0Iix0eXBlOkkuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTpJLk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdvcmxkITsifV19XX1dfSl9LDYyNjY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE4sTCxLLFUpe3ZvaWQgMD09PVUmJihVPUspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIExbS119fSl9OmZ1bmN0aW9uKE4sTCxLLFUp''@;'; put 'put ''e3ZvaWQgMD09PVUmJihVPUspLE5bVV09TFtLXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKE4sTCl7Zm9yKHZhciBLIGluIE4pImRlZmF1bHQiIT09SyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLEspJiZJKEwsTixLKX07T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2h1bms9WC5kaWZmPVguYnl0ZXNUb1NpemU9WC5nZXRFeGVjdXRvclBhdGg9WC5kZWNvZGVGcm9tQmFzZTY0PVguZW5jb2RlVG9CYXNlNjQ9WC51cmxPcmlnaW49WC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNy''@;'; put 'put ''b3NQYXRoPVguZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC5hc3luY0ZvckVhY2g9WC51dWlkdjQ9dm9pZCAwO3ZhciBnPXkoMTEzMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGcudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidW5pcUFycmF5Iix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc0xpbnV4Iix7ZW51''@;'; put 'put ''bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJnZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdl''@;'; put 'put ''bmVyYXRlUGF0aEZvclNhc319KSxfKHkoMzMxNiksWCk7dmFyIEI9eSg5NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXJsT3JpZ2luIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi51cmxPcmlnaW59fSk7dmFyIHc9eSgyOTI3KTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoWCwiZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5k''@;'; put 'put ''ZWNvZGVGcm9tQmFzZTY0fX0pO3ZhciBQPXkoMTUyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldEV4ZWN1dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBGPXkoNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiYnl0ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBGLmJ5dGVzVG9TaXplfX0pO3ZhciBPPXkoNjQ1Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPLmRpZmZ9fSk7''@;'; put 'put ''dmFyIHo9eSg4NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2h1bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmNodW5rfX0pfSw5NjUyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC51cmxPcmlnaW49dm9pZCAwLFgudXJsT3JpZ2luPUk9PntpZigiIj09PUkpcmV0dXJuIEk7bGV0IF87dHJ5e189bmV3IFVSTChJKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4gX319LDExMzE6ZnVuY3Rpb24odWUsWCx5KXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIF89eSg0MTU1KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1''@;'; put 'put ''bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZh''@;'; put 'put ''bHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oVyl7cmV0dXJuIFcmJlcuX19lc01vZHVsZT9XOntkZWZhdWx0Old9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksWC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNyb3NQYXRoPVguZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC51dWlkdjQ9WC5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9Qih5KDI1MjApKTtYLmFzeW5j''@;'; put 'put ''Rm9yRWFjaD1mdW5jdGlvbiBQKFcsWSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgcT0wO3E8Vy5sZW5ndGg7cSsrKXlpZWxkIFkoV1txXSxxLFcpfSl9LFgudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5y''@;'; put 'put ''ZXBsYWNlKC9beHldL2csVz0+e2NvbnN0IFk9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PVc/WTozJll8OCkudG9TdHJpbmcoMTYpfSksWC51bmlxQXJyYXk9Vz0+QXJyYXkuZnJvbShuZXcgU2V0KFcpKSxYLmlzV2luZG93cz0oKT0+IndpbjMyIj09PV8ucGxhdGZvcm0sWC5pc0xp''@;'; put 'put ''bnV4PSgpPT4ibGludXgiPT09Xy5wbGF0Zm9ybSxYLmVzY2FwZVdpblNsYXNoZXM9Vz0+KDAsWC5pc1dpbmRvd3MpKCk/Vy5yZXBsYWNlKC9cXC9nLCJcXFxcIik6VyxYLmdldE1hY3Jvc1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxYLmdlbmVyYXRlUGF0aEZv''@;'; put 'put ''clNhcz1XPT5XLnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOToodWUsWCx5KT0+e3ZhciBJPVg7SS5iaWdudW09eSg0NTkwKSxJLmRlZmluZT15KDI1MDApLmRlZmluZSxJLmJhc2U9eSgxOTc5KSxJLmNvbnN0YW50cz15KDY4MjYpLEkuZGVjb2RlcnM9eSg4MzA3KSxJLmVuY29kZXJzPXkoNjU3''@;'; put 'put ''OSl9LDI1MDA6KHVlLFgseSk9Pnt2YXIgST15KDk4MDkpLF89eSg1NzE3KTtmdW5jdGlvbiBCKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBCKFAsRil9LEIucHJv''@;'; put 'put ''dG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj15KDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9p''@;'; put 'put ''bml0TmFtZWQoeil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LEIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9''@;'; put 'put ''UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxPKX0sQi5wcm90b3R5''@;'; put 'put ''cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxCLnByb3RvdHlwZS5lbmNvZGU9''@;'; put 'put ''ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLE8pfX0sNjYyNToodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDE5NzkpLlJlcG9ydGVyLGc9eSg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gQihQLEYpe18uY2FsbCh0aGlzLEYpLGcuaXNCdWZmZXIo''@;'; put 'put ''UCk/KHRoaXMuYmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oTyl7cmV0''@;'; put 'put ''dXJuIE8gaW5zdGFuY2VvZiB3fHwoTz1uZXcgdyhPLEYpKSx0aGlzLmxlbmd0aCs9Ty5sZW5ndGgsT30sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYmUDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMu''@;'; put 'put ''dmFsdWU9UCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1nLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighZy5pc0J1ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52''@;'; put 'put ''YWx1ZT1QLHRoaXMubGVuZ3RoPVAubGVuZ3RofX1JKEIsXyksWC5DPUIsQi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sQi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihG''@;'; put 'put ''KXt2YXIgTz1uZXcgQih0aGlzLmJhc2UpO3JldHVybiBPLm9mZnNldD1GLm9mZnNldCxPLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVyKSxPfSxCLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEIucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVy''@;'; put 'put ''QnVmZmVyIG92ZXJydW4iKX0sQi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihGLE8pe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKE98fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgej1uZXcgQih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBv''@;'; put 'put ''cnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhpcy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxCLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0''@;'; put 'put ''LHRoaXMubGVuZ3RoKX0sWC5SPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGLE8pe3JldHVybiBGfHwoRj1uZXcgZyh0aGlzLmxlbmd0aCkpLE98fChPPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KHope3ouam9pbihGLE8pLE8rPXoubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9GW09dPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yud3JpdGUodGhpcy52YWx1ZSxPKTpnLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHko''@;'; put 'put ''RixPKSxPKz10aGlzLmxlbmd0aCkpLEZ9fSwxOTc5Oih1ZSxYLHkpPT57dmFyIEk9WDtJLlJlcG9ydGVyPXkoODQ2NSkuYixJLkRlY29kZXJCdWZmZXI9eSg2NjI1KS5DLEkuRW5jb2RlckJ1ZmZlcj15KDY2MjUpLlIsSS5Ob2RlPXkoMTk0OSl9LDE5NDk6KHVlLFgseSk9Pnt2YXIgST15KDE5''@;'; put 'put ''NzkpLlJlcG9ydGVyLF89eSgxOTc5KS5FbmNvZGVyQnVmZmVyLGc9eSgxOTc5KS5EZWNvZGVyQnVmZmVyLEI9eSg5NzQ2KSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVz''@;'; put 'put ''YyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9w''@;'; put 'put ''dGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIE8oTixMKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PUx8fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51''@;'; put 'put ''bGwsSy5hcmdzPW51bGwsSy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVs''@;'; put 'put ''bCxLLmNvbnRhaW5zPW51bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dWUuZXhwb3J0cz1PO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVz''@;'; put 'put ''ZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ty5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oVyl7S1tXXT1MW1ddfSk7dmFyIFU9bmV3''@;'; put 'put ''IHRoaXMuY29uc3RydWN0b3IoSy5wYXJlbnQpO3JldHVybiBVLl9iYXNlU3RhdGU9SyxVfSxPLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBXPW5ldyB0aGlzLmNvbnN0''@;'; put 'put ''cnVjdG9yKHRoaXMpO3JldHVybiBMLmNoaWxkcmVuLnB1c2goVyksV1tLXS5hcHBseShXLGFyZ3VtZW50cyl9fSx0aGlzKX0sTy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO0IobnVsbD09PUsucGFyZW50KSxMLmNhbGwodGhpcyksSy5jaGlsZHJl''@;'; put 'put ''bj1LLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLEIuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LE8ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0''@;'; put 'put ''aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7TD1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4hKFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyks''@;'; put 'put ''MCE9PVUubGVuZ3RoJiYoQihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGlsZHJlbj1VLFUuZm9yRWFjaChmdW5jdGlvbihXKXtXLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09TC5sZW5ndGgmJihCKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1MLEsucmV2ZXJzZUFyZ3M9TC5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXfHxXLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBXO3ZhciBZPXt9O3JldHVybiBPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksWVtXW3FdXT1xfSksWX0pKX0sWyJfcGVla1RhZyIs''@;'; put 'put ''Il9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwi''@;'; put 'put ''X2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0''@;'; put 'put ''YXRlLmVuYyl9fSksdy5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJn''@;'; put 'put ''cyhVKSx0aGlzfX0pLE8ucHJvdG90eXBlLnVzZT1mdW5jdGlvbihMKXtCKEwpO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsudXNlPUwsdGhpc30sTy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlv''@;'; put 'put ''bmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmRlZj1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PUwsSy5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihMKXt2YXIgSz10aGlz''@;'; put 'put ''Ll9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxs''@;'; put 'put ''PT09Sy5pbXBsaWNpdCksSy5pbXBsaWNpdD1MLHRoaXN9LE8ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEwub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJn''@;'; put 'put ''cyhLKSx0aGlzfSxPLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmtleSksSy5rZXk9TCx0aGlzfSxPLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxPLnBy''@;'; put 'put ''b3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9TCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKEwpLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gTFtVXX0pKSx0aGlzfSxPLnByb3RvdHlwZS5j''@;'; put 'put ''b250YWlucz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPUwsdGhpc30sTy5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09VS5wYXJlbnQpcmV0dXJu''@;'; put 'put ''IEwud3JhcFJlc3VsdChVLmNoaWxkcmVuWzBdLl9kZWNvZGUoTCxLKSk7dmFyIG5lLFc9VS5kZWZhdWx0LFk9ITAscT1udWxsO2lmKG51bGwhPT1VLmtleSYmKHE9TC5lbnRlcktleShVLmtleSkpLFUub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1VLmV4cGxpY2l0P2VlPVUuZXhw''@;'; put 'put ''bGljaXQ6bnVsbCE9PVUuaW1wbGljaXQ/ZWU9VS5pbXBsaWNpdDpudWxsIT09VS50YWcmJihlZT1VLnRhZyksbnVsbCE9PWVlfHxVLmFueSl7aWYoWT10aGlzLl9wZWVrVGFnKEwsZWUsVS5hbnkpLEwuaXNFcnJvcihZKSlyZXR1cm4gWX1lbHNle3ZhciBKPUwuc2F2ZSgpO3RyeXtudWxsPT09''@;'; put 'put ''VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxMLEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspLFk9ITB9Y2F0Y2h7WT0hMX1MLnJlc3RvcmUoSil9fWlmKFUub2JqJiZZJiYobmU9TC5lbnRlck9iamVjdCgpKSxZKXtpZihudWxsIT09VS5leHBsaWNpdCl7dmFyIGllPXRoaXMu''@;'; put 'put ''X2RlY29kZVRhZyhMLFUuZXhwbGljaXQpO2lmKEwuaXNFcnJvcihpZSkpcmV0dXJuIGllO0w9aWV9dmFyIGxlPUwub2Zmc2V0O2lmKG51bGw9PT1VLnVzZSYmbnVsbD09PVUuY2hvaWNlKXtVLmFueSYmKEo9TC5zYXZlKCkpO3ZhciBtZT10aGlzLl9kZWNvZGVUYWcoTCxudWxsIT09VS5pbXBs''@;'; put 'put ''aWNpdD9VLmltcGxpY2l0OlUudGFnLFUuYW55KTtpZihMLmlzRXJyb3IobWUpKXJldHVybiBtZTtVLmFueT9XPUwucmF3KEopOkw9bWV9aWYoSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLGxlLEwubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09''@;'; put 'put ''VS50YWcmJksudHJhY2soTC5wYXRoKCksTC5vZmZzZXQsTC5sZW5ndGgsImNvbnRlbnQiKSxVLmFueXx8KFc9bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSksTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFVLmFu''@;'; put 'put ''eSYmbnVsbD09PVUuY2hvaWNlJiZudWxsIT09VS5jaGlsZHJlbiYmVS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtTZS5fZGVjb2RlKEwsSyl9KSxVLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykpe3ZhciBfZT1uZXcgZyhXKTtXPXRoaXMuX2dl''@;'; put 'put ''dFVzZShVLmNvbnRhaW5zLEwuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gVS5vYmomJlkmJihXPUwubGVhdmVPYmplY3QobmUpKSxudWxsPT09VS5rZXl8fG51bGw9PT1XJiYhMCE9PVk/bnVsbCE9PXEmJkwuZXhpdEtleShxKTpMLmxlYXZlS2V5KHEsVS5rZXks''@;'; put 'put ''VyksV30sTy5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUx8fCJzZXQiPT09TD9udWxsOiJzZXFvZiI9PT1MfHwic2V0b2YiPT09TD90aGlzLl9kZWNvZGVMaXN0KEssTCxXLmFyZ3NbMF0sVSk6L3N0''@;'; put 'put ''ciQvLnRlc3QoTCk/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToib2JqaWQiPT09TCYmVy5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssVy5hcmdzWzBdLFcuYXJnc1sxXSxVKToib2JqaWQiPT09TD90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxVKToiZ2VudGltZSI9PT1MfHwidXRjdGlt''@;'; put 'put ''ZSI9PT1MP3RoaXMuX2RlY29kZVRpbWUoSyxMLFUpOiJudWxsXyI9PT1MP3RoaXMuX2RlY29kZU51bGwoSyxVKToiYm9vbCI9PT1MP3RoaXMuX2RlY29kZUJvb2woSyxVKToib2JqRGVzYyI9PT1MP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6ImludCI9PT1MfHwiZW51bSI9PT1MP3RoaXMuX2Rl''@;'; put 'put ''Y29kZUludChLLFcuYXJncyYmVy5hcmdzWzBdLFUpOm51bGwhPT1XLnVzZT90aGlzLl9nZXRVc2UoVy51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxVKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihMLEspe3ZhciBV''@;'; put 'put ''PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVS51c2VEZWNvZGVyPXRoaXMuX3VzZShMLEspLEIobnVsbD09PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFUuaW1wbGljaXQhPT1VLnVzZURlY29k''@;'; put 'put ''ZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuY2xvbmUoKSxVLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1VLmltcGxpY2l0KSxVLnVzZURlY29kZXJ9LE8ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10''@;'; put 'put ''aGlzLl9iYXNlU3RhdGUsVz1udWxsLFk9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1MLnNhdmUoKSxKPVUuY2hvaWNlW3FdO3RyeXt2YXIgbmU9Si5fZGVjb2RlKEwsSyk7aWYoTC5pc0Vycm9yKG5lKSlyZXR1cm4hMTtXPXt0eXBlOnEs''@;'; put 'put ''dmFsdWU6bmV9LFk9ITB9Y2F0Y2h7cmV0dXJuIEwucmVzdG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFk/VzpMLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sTy5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBfKEwsdGhpcy5yZXBv''@;'; put 'put ''cnRlcil9LE8ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0fHxXLmRlZmF1bHQhPT1MKXt2YXIgWT10aGlzLl9lbmNvZGVWYWx1ZShMLEssVSk7aWYodm9pZCAwIT09WSYmIXRoaXMuX3NraXBEZWZhdWx0''@;'; put 'put ''KFksSyxVKSlyZXR1cm4gWX19LE8ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLnBhcmVudClyZXR1cm4gVy5jaGlsZHJlblswXS5fZW5jb2RlKEwsS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBv''@;'; put 'put ''cnRlcj1LLFcub3B0aW9uYWwmJnZvaWQgMD09PUwpe2lmKG51bGw9PT1XLmRlZmF1bHQpcmV0dXJuO0w9Vy5kZWZhdWx0fXZhciBZPW51bGwscT0hMTtpZihXLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7ZWxzZSBpZihXLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShM''@;'; put 'put ''LEspO2Vsc2UgaWYoVy5jb250YWlucylZPXRoaXMuX2dldFVzZShXLmNvbnRhaW5zLFUpLl9lbmNvZGUoTCxLKSxxPSEwO2Vsc2UgaWYoVy5jaGlsZHJlbilZPVcuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGxlKXtpZigibnVsbF8iPT09bGUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIGxlLl9lbmNv''@;'; put 'put ''ZGUobnVsbCxLLEwpO2lmKG51bGw9PT1sZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgbWU9Sy5lbnRlcktleShsZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBMKXJldHVybiBLLmVycm9yKCJDaGlsZCBl''@;'; put 'put ''eHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9bGUuX2VuY29kZShMW2xlLl9iYXNlU3RhdGUua2V5XSxLLEwpO3JldHVybiBLLmxlYXZlS2V5KG1lKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9KSxZPXRoaXMuX2NyZWF0ZUVuY29kZXJC''@;'; put 'put ''dWZmZXIoWSk7ZWxzZSBpZigic2Vxb2YiPT09Vy50YWd8fCJzZXRvZiI9PT1XLnRhZyl7aWYoIVcuYXJnc3x8MSE9PVcuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitXLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIEsuZXJyb3IoInNl''@;'; put 'put ''cW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTC5tYXAoZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRl''@;'; put 'put ''LmFyZ3NbMF0sTCkuX2VuY29kZShsZSxLKX0sZWUpKX1lbHNlIG51bGwhPT1XLnVzZT9KPXRoaXMuX2dldFVzZShXLnVzZSxVKS5fZW5jb2RlKEwsSyk6KFk9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFcudGFnLEwpLHE9ITApO2lmKCFXLmFueSYmbnVsbD09PVcuY2hvaWNlKXt2YXIgbmU9bnVs''@;'; put 'put ''bCE9PVcuaW1wbGljaXQ/Vy5pbXBsaWNpdDpXLnRhZyxpZT1udWxsPT09Vy5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PW5lP251bGw9PT1XLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVcudXNlJiYoSj10''@;'; put 'put ''aGlzLl9lbmNvZGVDb21wb3NpdGUobmUscSxpZSxZKSl9cmV0dXJuIG51bGwhPT1XLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVy5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LE8ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlz''@;'; put 'put ''Ll9iYXNlU3RhdGUsVz1VLmNob2ljZVtMLnR5cGVdO3JldHVybiBXfHxCKCExLEwudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFUuY2hvaWNlKSkpLFcuX2VuY29kZShMLnZhbHVlLEspfSxPLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0''@;'; put 'put ''aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KEwpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTtpZigib2JqaWQiPT09TCYmVS5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQi''@;'; put 'put ''PT09TClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxMKTtpZigibnVsbF8iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09THx8ImVudW0i''@;'; put 'put ''PT09TClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEssVS5hcmdzJiZVLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBw''@;'; put 'put ''b3J0ZWQgdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bMC05IF0qJC8udGVzdChMKX0sTy5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChMKX19''@;'; put 'put ''LDg0NjU6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpO2Z1bmN0aW9uIF8oQil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOkJ8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gZyhCLHcpe3RoaXMucGF0aD1CLHRoaXMucmV0aHJvdyh3KX1YLmI9XyxfLnByb3Rv''@;'; put 'put ''dHlwZS5pc0Vycm9yPWZ1bmN0aW9uKHcpe3JldHVybiB3IGluc3RhbmNlb2YgZ30sXy5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp3Lm9iaixwYXRoTGVuOncucGF0aC5sZW5ndGh9fSxfLnByb3RvdHlwZS5yZXN0b3JlPWZ1''@;'; put 'put ''bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7UC5vYmo9dy5vYmosUC5wYXRoPVAucGF0aC5zbGljZSgwLHcucGF0aExlbil9LF8ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh3KX0sXy5wcm90b3R5''@;'; put 'put ''cGUuZXhpdEtleT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1AucGF0aD1QLnBhdGguc2xpY2UoMCx3LTEpfSxfLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih3LFAsRil7dmFyIE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodyksbnVsbCE9PU8u''@;'; put 'put ''b2JqJiYoTy5vYmpbUF09Ril9LF8ucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sXy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlLFA9dy5vYmo7cmV0dXJu''@;'; put 'put ''IHcub2JqPXt9LFB9LF8ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGUsRj1QLm9iajtyZXR1cm4gUC5vYmo9dyxGfSxfLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih3KXt2YXIgUCxGPXRoaXMuX3JlcG9ydGVyU3RhdGUsTz13IGlu''@;'; put 'put ''c3RhbmNlb2YgZztpZihQPU8/dzpuZXcgZyhGLnBhdGgubWFwKGZ1bmN0aW9uKHope3JldHVybiJbIitKU09OLnN0cmluZ2lmeSh6KSsiXSJ9KS5qb2luKCIiKSx3Lm1lc3NhZ2V8fHcsdy5zdGFjayksIUYub3B0aW9ucy5wYXJ0aWFsKXRocm93IFA7cmV0dXJuIE98fEYuZXJyb3JzLnB1c2go''@;'; put 'put ''UCksUH0sXy5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBQLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih3KT9udWxsOncsZXJyb3JzOlAuZXJyb3JzfTp3fSxJKGcsRXJyb3IpLGcucHJvdG90eXBl''@;'; put 'put ''LnJldGhyb3c9ZnVuY3Rpb24odyl7aWYodGhpcy5tZXNzYWdlPXcrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZyksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlz''@;'; put 'put ''Lm1lc3NhZ2UpfWNhdGNoKFApe3RoaXMuc3RhY2s9UC5zdGFja31yZXR1cm4gdGhpc319LDE2MDoodWUsWCx5KT0+e3ZhciBJPXkoNjgyNik7WC50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFgudGFnQ2xhc3NCeU5hbWU9''@;'; put 'put ''SS5fcmV2ZXJzZShYLnRhZ0NsYXNzKSxYLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIs''@;'; put 'put ''MTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIi''@;'; put 'put ''LDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sWC50YWdCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZyl9LDY4MjY6KHVlLFgseSk9Pnt2YXIgST1YO0kuX3JldmVyc2U9ZnVuY3Rpb24oZyl7dmFyIEI9e307cmV0dXJuIE9iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''dyl7KDB8dyk9PXcmJih3fD0wKSxCW2dbd11dPXd9KSxCfSxJLmRlcj15KDE2MCl9LDE2NzE6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg5ODA5KSxnPV8uYmFzZSxCPV8uYmlnbnVtLHc9Xy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1l''@;'; put 'put ''PU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe2cuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPU4ucmVhZFVJbnQ4KEwpO2lmKE4uaXNFcnJvcihLKSlyZXR1cm4gSzt2''@;'; put 'put ''YXIgVT13LnRhZ0NsYXNzW0s+PjZdLFc9ISgzMiZLKTtpZigzMSZ+SylLJj0zMTtlbHNle3ZhciBZPUs7Zm9yKEs9MDshKDEyOCZ+WSk7KXtpZihZPU4ucmVhZFVJbnQ4KEwpLE4uaXNFcnJvcihZKSlyZXR1cm4gWTtLPDw9NyxLfD0xMjcmWX19cmV0dXJue2NsczpVLHByaW1pdGl2ZTpXLHRh''@;'; put 'put ''ZzpLLHRhZ1N0cjp3LnRhZ1tLXX19ZnVuY3Rpb24geihOLEwsSyl7dmFyIFU9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFUpKXJldHVybiBVO2lmKCFMJiYxMjg9PT1VKXJldHVybiBudWxsO2lmKCEoMTI4JlUpKXJldHVybiBVO3ZhciBXPTEyNyZVO2lmKFc+NClyZXR1cm4gTi5lcnJv''@;'; put 'put ''cigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO1U9MDtmb3IodmFyIFk9MDtZPFc7WSsrKXtVPDw9ODt2YXIgcT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IocSkpcmV0dXJuIHE7VXw9cX1yZXR1cm4gVX11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEws''@;'; put 'put ''Syl7cmV0dXJuIEwgaW5zdGFuY2VvZiBnLkRlY29kZXJCdWZmZXJ8fChMPW5ldyBnLkRlY29kZXJCdWZmZXIoTCxLKSksdGhpcy50cmVlLl9kZWNvZGUoTCxLKX0sSShGLGcuTm9kZSksRi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oTCxLLFUpe2lmKEwuaXNFbXB0eSgpKXJldHVybiEx''@;'; put 'put ''O3ZhciBXPUwuc2F2ZSgpLFk9TyhMLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0srJyInKTtyZXR1cm4gTC5pc0Vycm9yKFkpP1k6KEwucmVzdG9yZShXKSxZLnRhZz09PUt8fFkudGFnU3RyPT09S3x8WS50YWdTdHIrIm9mIj09PUt8fFUpfSxGLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0''@;'; put 'put ''aW9uKEwsSyxVKXt2YXIgVz1PKEwsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK0srJyInKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7dmFyIFk9eihMLFcucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFkpKXJldHVybiBZO2lm''@;'; put 'put ''KCFVJiZXLnRhZyE9PUsmJlcudGFnU3RyIT09SyYmVy50YWdTdHIrIm9mIiE9PUspcmV0dXJuIEwuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0srJyInKTtpZihXLnByaW1pdGl2ZXx8bnVsbCE9PVkpcmV0dXJuIEwuc2tpcChZLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicr''@;'; put 'put ''SysnIicpO3ZhciBxPUwuc2F2ZSgpLGVlPXRoaXMuX3NraXBVbnRpbEVuZChMLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBMLmlzRXJyb3IoZWUpP2VlOihZPUwub2Zmc2V0LXEub2Zmc2V0LEwucmVzdG9yZShxKSxMLnNr''@;'; put 'put ''aXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKSl9LEYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oTCxLKXtmb3IoOzspe3ZhciBVPU8oTCxLKTtpZihMLmlzRXJyb3IoVSkpcmV0dXJuIFU7dmFyIFksVz16KEwsVS5wcmltaXRpdmUsSyk7aWYoTC5pc0Vy''@;'; put 'put ''cm9yKFcpKXJldHVybiBXO2lmKFk9VS5wcmltaXRpdmV8fG51bGwhPT1XP0wuc2tpcChXKTp0aGlzLl9za2lwVW50aWxFbmQoTCxLKSxMLmlzRXJyb3IoWSkpcmV0dXJuIFk7aWYoImVuZCI9PT1VLnRhZ1N0cilicmVha319LEYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKEwsSyxV''@;'; put 'put ''LFcpe2Zvcih2YXIgWT1bXTshTC5pc0VtcHR5KCk7KXt2YXIgcT10aGlzLl9wZWVrVGFnKEwsImVuZCIpO2lmKEwuaXNFcnJvcihxKSlyZXR1cm4gcTt2YXIgZWU9VS5kZWNvZGUoTCwiZGVyIixXKTtpZihMLmlzRXJyb3IoZWUpJiZxKWJyZWFrO1kucHVzaChlZSl9cmV0dXJuIFl9LEYucHJv''@;'; put 'put ''dG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oTCxLKXtpZigiYml0c3RyIj09PUspe3ZhciBVPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihVKT9VOnt1bnVzZWQ6VSxkYXRhOkwucmF3KCl9fWlmKCJibXBzdHIiPT09Syl7dmFyIFc9TC5yYXcoKTtpZihXLmxlbmd0aCUyPT0xKXJl''@;'; put 'put ''dHVybiBMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgWT0iIixxPTA7cTxXLmxlbmd0aC8yO3ErKylZKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcucmVhZFVJbnQxNkJFKDIqcSkpO3JldHVybiBZfWlmKCJudW1zdHIiPT09''@;'; put 'put ''Syl7dmFyIGVlPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGVlKT9lZTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUspcmV0dXJuIEwucmF3KCk7aWYo''@;'; put 'put ''Im9iakRlc2MiPT09SylyZXR1cm4gTC5yYXcoKTtpZigicHJpbnRzdHIiPT09Syl7dmFyIEo9TC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihKKT9KOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBj''@;'; put 'put ''aGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoSyk/TC5yYXcoKS50b1N0cmluZygpOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2Zvcih2YXIgVyxZPVtdLHE9''@;'; put 'put ''MDshTC5pc0VtcHR5KCk7KXt2YXIgZWU9TC5yZWFkVUludDgoKTtxPDw9NyxxfD0xMjcmZWUsMTI4JmVlfHwoWS5wdXNoKHEpLHE9MCl9aWYoMTI4JmVlJiZZLnB1c2gocSksVz1VP1k6W1lbMF0vNDB8MCxZWzBdJTQwXS5jb25jYXQoWS5zbGljZSgxKSksSyl7dmFyIGllPUtbVy5qb2luKCIg''@;'; put 'put ''IildO3ZvaWQgMD09PWllJiYoaWU9S1tXLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWllJiYoVz1pZSl9cmV0dXJuIFd9LEYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFyIFU9TC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PUspdmFyIFc9MHxVLnNsaWNlKDAs''@;'; put 'put ''NCksWT0wfFUuc2xpY2UoNCw2KSxxPTB8VS5zbGljZSg2LDgpLGVlPTB8VS5zbGljZSg4LDEwKSxKPTB8VS5zbGljZSgxMCwxMiksbmU9MHxVLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUspcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBv''@;'; put 'put ''cnRlZCB5ZXQiKTtXPTB8VS5zbGljZSgwLDIpLFk9MHxVLnNsaWNlKDIsNCkscT0wfFUuc2xpY2UoNCw2KSxlZT0wfFUuc2xpY2UoNiw4KSxKPTB8VS5zbGljZSg4LDEwKSxuZT0wfFUuc2xpY2UoMTAsMTIpLFc9Vzw3MD8yZTMrVzoxOTAwK1d9cmV0dXJuIERhdGUuVVRDKFcsWS0xLHEsZWUs''@;'; put 'put ''SixuZSwwKX0sRi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oTCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEwpe3ZhciBLPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihLKT9LOjAhPT1LfSxGLnByb3RvdHlwZS5fZGVjb2RlSW50''@;'; put 'put ''PWZ1bmN0aW9uKEwsSyl7dmFyIFU9TC5yYXcoKSxXPW5ldyBCKFUpO3JldHVybiBLJiYoVz1LW1cudG9TdHJpbmcoMTApXXx8VyksV30sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKEspKSxMLl9nZXREZWNvZGVyKCJkZXIi''@;'; put 'put ''KS50cmVlfX0sODMwNzoodWUsWCx5KT0+e3ZhciBJPVg7SS5kZXI9eSgxNjcxKSxJLnBlbT15KDk2MzEpfSw5NjMxOih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoODc2NCkuQnVmZmVyLGc9eSgxNjcxKTtmdW5jdGlvbiBCKHcpe2cuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUko''@;'; put 'put ''QixnKSx1ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBPPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9VcHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxMPS0xLEs9LTEsVT0w''@;'; put 'put ''O1U8Ty5sZW5ndGg7VSsrKXt2YXIgVz1PW1VdLm1hdGNoKE4pO2lmKG51bGwhPT1XJiZXWzJdPT09eil7aWYoLTEhPT1MKXtpZigiRU5EIiE9PVdbMV0pYnJlYWs7Sz1VO2JyZWFrfWlmKCJCRUdJTiIhPT1XWzFdKWJyZWFrO0w9VX19aWYoLTE9PT1MfHwtMT09PUspdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK3opO3ZhciBZPU8uc2xpY2UoTCsxLEspLmpvaW4oIiIpO1kucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhZLCJiYXNlNjQiKTtyZXR1cm4gZy5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxxLEYpfX0s''@;'; put 'put ''Njk4NDoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDg3NjQpLkJ1ZmZlcixnPXkoOTgwOSksQj1nLmJhc2Usdz1nLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMu''@;'; put 'put ''dHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Qi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4pe3JldHVybiBOPDEwPyIwIitOOk59dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShM''@;'; put 'put ''LEspLmpvaW4oKX0sSShGLEIuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLEssVSxXKXt2YXIgSixZPWZ1bmN0aW9uIHooTixMLEssVSl7dmFyIFc7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhh''@;'; put 'put ''c093blByb3BlcnR5KE4pKVc9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gVS5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7Vz1OfXJldHVybiBXPj0zMT9VLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0''@;'; put 'put ''ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsSyxVLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgXygyKSlbMF09WSxKWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10p''@;'; put 'put ''O2Zvcih2YXIgcT0xLGVlPVcubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXErKzsoSj1uZXcgXygyK3EpKVswXT1ZLEpbMV09MTI4fHEsZWU9MStxO2Zvcih2YXIgbmU9Vy5sZW5ndGg7bmU+MDtlZS0tLG5lPj49OClKW2VlXT0yNTUmbmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIo''@;'; put 'put ''W0osV10pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBVPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtX''@;'; put 'put ''PEwubGVuZ3RoO1crKylVLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVSl9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRl''@;'; put 'put ''ci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rp''@;'; put 'put ''bmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBz''@;'; put 'put ''bGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIp''@;'; put 'put ''fSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPUtbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgp''@;'; put 'put ''LFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFVKXtpZihMWzFdPj00MCly''@;'; put 'put ''ZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFk9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2YXIgcT1MW1ddO2ZvcihZKys7cT49MTI4O3E+Pj03KVkrK312YXIgZWU9bmV3IF8o''@;'; put 'put ''WSksSj1lZS5sZW5ndGgtMTtmb3IoVz1MLmxlbmd0aC0xO1c+PTA7Vy0tKWZvcihlZVtKLS1dPTEyNyYocT1MW1ddKTsocT4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZxO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rp''@;'; put 'put ''b24oTCxLKXt2YXIgVSxXPW5ldyBEYXRlKEwpO3JldHVybiJnZW50aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCkpLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5nZXRVVENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25k''@;'; put 'put ''cygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCklMTAwKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5q''@;'; put 'put ''b2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFUsIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVm''@;'; put 'put ''ZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihMLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTCkpO0w9S1tMXX1pZigibnVtYmVyIiE9dHlwZW9mIEwmJiFfLmlzQnVmZmVyKEwpKXt2YXIgVT1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVVsw''@;'; put 'put ''XSYmVS51bnNoaWZ0KDApLEw9bmV3IF8oVSl9aWYoXy5pc0J1ZmZlcihMKSl7dmFyIFc9TC5sZW5ndGg7MD09PUwubGVuZ3RoJiZXKys7dmFyIHE9bmV3IF8oVyk7cmV0dXJuIEwuY29weShxKSwwPT09TC5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYo''@;'; put 'put ''TDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7aWYoTDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsTF0pO1c9MTtmb3IodmFyIFk9TDtZPj0yNTY7WT4+PTgpVysrO2ZvcihZPShxPW5ldyBBcnJheShXKSkubGVuZ3RoLTE7WT49MDtZLS0p''@;'; put 'put ''cVtZXT0yNTUmTCxMPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTD8yNTU6MCl9LEYu''@;'; put 'put ''cHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEwsSyxVKXt2YXIgWSxXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxs''@;'; put 'put ''PT09Vy5kZWZhdWx0KXJldHVybiExO3ZhciBxPUwuam9pbigpO2lmKHZvaWQgMD09PVcuZGVmYXVsdEJ1ZmZlciYmKFcuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShXLmRlZmF1bHQsSyxVKS5qb2luKCkpLHEubGVuZ3RoIT09Vy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4h''@;'; put 'put ''MTtmb3IoWT0wO1k8cS5sZW5ndGg7WSsrKWlmKHFbWV0hPT1XLmRlZmF1bHRCdWZmZXJbWV0pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmRlcj15KDY5ODQpLEkucGVtPXkoMjg4Myl9LDI4ODM6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg2OTg0''@;'; put 'put ''KTtmdW5jdGlvbiBnKEIpe18uY2FsbCh0aGlzLEIpLHRoaXMuZW5jPSJwZW0ifUkoZyxfKSx1ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBPPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyIt''@;'; put 'put ''LS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxPLmxlbmd0aDtOKz02NCl6LnB1c2goTy5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJ''@;'; put 'put ''LF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBi''@;'; put 'put ''LFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAs''@;'; put 'put ''cD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZl''@;'; put 'put ''cjp5KDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYo''@;'; put 'put ''VixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3''@;'; put 'put ''Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9p''@;'; put 'put ''bml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFy''@;'; put 'put ''c2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/''@;'; put 'put ''KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAs''@;'; put 'put ''cC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8''@;'; put 'put ''PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxI''@;'; put 'put ''LGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtl''@;'; put 'put ''bHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jk''@;'; put 'put ''c1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgt''@;'; put 'put ''YiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4''@;'; put 'put ''KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5p''@;'; put 'put ''bXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0''@;'; put 'put ''P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5s''@;'; put 'put ''ZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3Io''@;'; put 'put ''O3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9u''@;'; put 'put ''b3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6''@;'; put 'put ''ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3''@;'; put 'put ''NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2''@;'; put 'put ''MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29y''@;'; put 'put ''ZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihU''@;'; put 'put ''PTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxi''@;'; put 'put ''fHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMt''@;'; put 'put ''PTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYm''@;'; put 'put ''cD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3Ro''@;'; put 'put ''XSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4y''@;'; put 'put ''JiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIg''@;'; put 'put ''Qz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChU''@;'; put 'put ''KSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4o''@;'; put 'put ''MjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyks''@;'; put 'put ''Yj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3''@;'; put 'put ''JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhp''@;'; put 'put ''cy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9''@;'; put 'put ''cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigx''@;'; put 'put ''KTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtm''@;'; put 'put ''b3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51''@;'; put 'put ''b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4''@;'; put 'put ''PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhp''@;'; put 'put ''cy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5n''@;'; put 'put ''dGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMu''@;'; put 'put ''d29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNiks''@;'; put 'put ''eD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMu''@;'; put 'put ''d29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''Yj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVu''@;'; put 'put ''Z3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jk''@;'; put 'put ''c1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09''@;'; put 'put ''eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAu''@;'; put 'put ''bmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigp''@;'; put 'put ''O3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jk''@;'; put 'put ''c1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZv''@;'; put 'put ''cig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgx''@;'; put 'put ''OTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVu''@;'; put 'put ''LE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1S''@;'; put 'put ''aT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4x''@;'; put 'put ''MyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmlt''@;'; put 'put ''dWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1h''@;'; put 'put ''dGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYp''@;'; put 'put ''fDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''dnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2''@;'; put 'put ''ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgx''@;'; put 'put ''OTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkp''@;'; put 'put ''K01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtl''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgx''@;'; put 'put ''OTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkp''@;'; put 'put ''K01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChP''@;'; put 'put ''ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''Tmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgk''@;'; put 'put ''ZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50''@;'; put 'put ''LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYp''@;'; put 'put ''fDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11''@;'; put 'put ''bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFl''@;'; put 'put ''LHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUs''@;'; put 'put ''ZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1h''@;'; put 'put ''dGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11''@;'; put 'put ''bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFl''@;'; put 'put ''LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYp''@;'; put 'put ''fDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''TGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUs''@;'; put 'put ''ZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109Vmks''@;'; put 'put ''SFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxw''@;'; put 'put ''KFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRo''@;'; put 'put ''aXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2''@;'; put 'put ''YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1I''@;'; put 'put ''KyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSly''@;'; put 'put ''ZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUu''@;'; put 'put ''dHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZh''@;'; put 'put ''ciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90''@;'; put 'put ''LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAx''@;'; put 'put ''PDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUu''@;'; put 'put ''bm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0s''@;'; put 'put ''Si5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTIm''@;'; put 'put ''VCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9''@;'; put 'put ''dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53''@;'; put 'put ''b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0q''@;'; put 'put ''dGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1w''@;'; put 'put ''Lm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAs''@;'; put 'put ''Yil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxU''@;'; put 'put ''byhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIp''@;'; put 'put ''O2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxu''@;'; put 'put ''KHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zv''@;'; put 'put ''cih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5s''@;'; put 'put ''ZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1q''@;'; put 'put ''PDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgr''@;'; put 'put ''PXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0w''@;'; put 'put ''KSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1tt''@;'; put 'put ''XTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNo''@;'; put 'put ''bG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmlt''@;'; put 'put ''YXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYm''@;'; put 'put ''eCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMu''@;'; put 'put ''d29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0r''@;'; put 'put ''PXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0''@;'; put 'put ''aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlz''@;'; put 'put ''LmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlz''@;'; put 'put ''LndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1''@;'; put 'put ''Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4''@;'; put 'put ''ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAs''@;'; put 'put ''VD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNs''@;'; put 'put ''b25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhu''@;'; put 'put ''dWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtm''@;'; put 'put ''b3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZl''@;'; put 'put ''OylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxt''@;'; put 'put ''b2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIp''@;'; put 'put ''LCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIh''@;'; put 'put ''PT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixt''@;'; put 'put ''b2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9k''@;'; put 'put ''bihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEp''@;'; put 'put ''LmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5k''@;'; put 'put ''aXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jk''@;'; put 'put ''c1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJl''@;'; put 'put ''dHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9''@;'; put 'put ''MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9''@;'; put 'put ''Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNo''@;'; put 'put ''cm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSks''@;'; put 'put ''ai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0''@;'; put 'put ''aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxF''@;'; put 'put ''PTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVz''@;'; put 'put ''aHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigp''@;'; put 'put ''JiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09''@;'; put 'put ''eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9''@;'; put 'put ''cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVy''@;'; put 'put ''IGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYo''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5j''@;'; put 'put ''bXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJl''@;'; put 'put ''ZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29u''@;'; put 'put ''dGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHAp''@;'; put 'put ''LHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp''@;'; put 'put ''cyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGws''@;'; put 'put ''cDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMu''@;'; put 'put ''X3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0''@;'; put 'put ''aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVs''@;'; put 'put ''c2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9''@;'; put 'put ''MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhp''@;'; put 'put ''cy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxw''@;'; put 'put ''fSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRo''@;'; put 'put ''aXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1Rd''@;'; put 'put ''O2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShq''@;'; put 'put ''JngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2''@;'; put 'put ''YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0x''@;'; put 'put ''XSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hd''@;'; put 'put ''PVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09''@;'; put 'put ''cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAu''@;'; put 'put ''cmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNt''@;'; put 'put ''cCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90''@;'; put 'put ''b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3Zh''@;'; put 'put ''ciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEp''@;'; put 'put ''LDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcg''@;'; put 'put ''dygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBv''@;'; put 'put ''dyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3''@;'; put 'put ''KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFy''@;'; put 'put ''cmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0w''@;'; put 'put ''O1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9''@;'; put 'put ''MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4g''@;'; put 'put ''Yi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rp''@;'; put 'put ''b24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwo''@;'; put 'put ''YiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQu''@;'; put 'put ''aWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRo''@;'; put 'put ''aXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMp''@;'; put 'put ''fSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDkyODI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXko''@;'; put 'put ''NTEwOCk7ZnVuY3Rpb24gZyhWZSl7cmV0dXJuKGc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oa2Upe3JldHVybiB0eXBlb2Yga2V9OmZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBT''@;'; put 'put ''eW1ib2wmJmtlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZrZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGtlfSkoVmUpfWZ1bmN0aW9uIEIoVmUsa2Upe2Zvcih2YXIgQWU9MDtBZTxrZS5sZW5ndGg7QWUrKyl7dmFyIF90PWtlW0FlXTtfdC5lbnVtZXJhYmxlPV90LmVudW1l''@;'; put 'put ''cmFibGV8fCExLF90LmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gX3QmJihfdC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlLFAoX3Qua2V5KSxfdCl9fWZ1bmN0aW9uIHcoVmUsa2UsQWUpe3JldHVybiBrZSYmQihWZS5wcm90b3R5cGUsa2UpLEFlJiZCKFZlLEFlKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoVmUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksVmV9ZnVuY3Rpb24gUChWZSl7dmFyIGtlPWZ1bmN0aW9uIEYoVmUsa2Upe2lmKCJvYmplY3QiIT09ZyhWZSl8fG51bGw9PT1WZSlyZXR1cm4gVmU7dmFyIEFlPVZlW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09QWUpe3ZhciBfdD1BZS5jYWxsKFZlLGtlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09ZyhfdCkpcmV0dXJuIF90O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''a2U/U3RyaW5nOk51bWJlcikoVmUpfShWZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1nKGtlKT9rZTpTdHJpbmcoa2UpfXZhciBqZSxWLE49eSgyMTM2KS5jb2RlcyxMPU4uRVJSX0FNQklHVU9VU19BUkdVTUVOVCxLPU4uRVJSX0lOVkFMSURfQVJHX1RZUEUsVT1OLkVSUl9JTlZBTElE''@;'; put 'put ''X0FSR19WQUxVRSxXPU4uRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFk9Ti5FUlJfTUlTU0lOR19BUkdTLHE9eSg1OTYxKSxKPXkoOTUzOSkuaW5zcGVjdCxuZT15KDk1MzkpLnR5cGVzLGllPW5lLmlzUHJvbWlzZSxsZT1uZS5pc1JlZ0V4cCxtZT15KDgxNjIpKCksX2U9eSg1NjI0KSgpLFRl''@;'; put 'put ''PXkoMTkyNCkoIlJlZ0V4cC5wcm90b3R5cGUudGVzdCIpO2Z1bmN0aW9uIEMoKXt2YXIgVmU9eSg5MTU4KTtqZT1WZS5pc0RlZXBFcXVhbCxWPVZlLmlzRGVlcFN0cmljdEVxdWFsfXZhciBFPSExLG09dWUuZXhwb3J0cz13ZSxBPXt9O2Z1bmN0aW9uIGFlKFZlKXt0aHJvdyBWZS5tZXNzYWdl''@;'; put 'put ''IGluc3RhbmNlb2YgRXJyb3I/VmUubWVzc2FnZTpuZXcgcShWZSl9ZnVuY3Rpb24gc2UoVmUsa2UsQWUsX3Qpe2lmKCFBZSl7dmFyIG50PSExO2lmKDA9PT1rZSludD0hMCxfdD0iTm8gdmFsdWUgYXJndW1lbnQgcGFzc2VkIHRvIGBhc3NlcnQub2soKWAiO2Vsc2UgaWYoX3QgaW5zdGFuY2Vv''@;'; put 'put ''ZiBFcnJvcil0aHJvdyBfdDt2YXIgUWU9bmV3IHEoe2FjdHVhbDpBZSxleHBlY3RlZDohMCxtZXNzYWdlOl90LG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOlZlfSk7dGhyb3cgUWUuZ2VuZXJhdGVkTWVzc2FnZT1udCxRZX19ZnVuY3Rpb24gd2UoKXtmb3IodmFyIFZlPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsa2U9bmV3IEFycmF5KFZlKSxBZT0wO0FlPFZlO0FlKyspa2VbQWVdPWFyZ3VtZW50c1tBZV07c2UuYXBwbHkodm9pZCAwLFt3ZSxrZS5sZW5ndGhdLmNvbmNhdChrZSkpfW0uZmFpbD1mdW5jdGlvbiB0ZShWZSxrZSxBZSxfdCxudCl7dmFyIHVuLFFlPWFyZ3VtZW50cy5sZW5ndGg7''@;'; put 'put ''aWYoMD09PVFlP3VuPSJGYWlsZWQiOjE9PT1RZT8oQWU9VmUsVmU9dm9pZCAwKTooITE9PT1FJiYoRT0hMCwoSS5lbWl0V2FybmluZz9JLmVtaXRXYXJuaW5nOl8ud2Fybi5iaW5kKF8pKSgiYXNzZXJ0LmZhaWwoKSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4g''@;'; put 'put ''UGxlYXNlIHVzZSBhc3NlcnQuc3RyaWN0RXF1YWwoKSBpbnN0ZWFkIG9yIG9ubHkgcGFzcyBhIG1lc3NhZ2UuIiwiRGVwcmVjYXRpb25XYXJuaW5nIiwiREVQMDA5NCIpKSwyPT09UWUmJihfdD0iIT0iKSksQWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBBZTt2YXIgTXQ9e2FjdHVhbDpWZSxl''@;'; put 'put ''eHBlY3RlZDprZSxvcGVyYXRvcjp2b2lkIDA9PT1fdD8iZmFpbCI6X3Qsc3RhY2tTdGFydEZuOm50fHx0ZX07dm9pZCAwIT09QWUmJihNdC5tZXNzYWdlPUFlKTt2YXIgRHQ9bmV3IHEoTXQpO3Rocm93IHVuJiYoRHQubWVzc2FnZT11bixEdC5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxEdH0sbS5B''@;'; put 'put ''c3NlcnRpb25FcnJvcj1xLG0ub2s9d2UsbS5lcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO2tlIT1BZSYmYWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiI9''@;'; put 'put ''PSIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtrZT09QWUmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoi''@;'; put 'put ''IT0iLHN0YWNrU3RhcnRGbjpWZX0pfSxtLmRlZXBFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWplJiZDKCksamUoa2UsQWUpfHxhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFl''@;'; put 'put ''LG1lc3NhZ2U6X3Qsb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RGVlcEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09amUmJkMoKSxqZShr''@;'; put 'put ''ZSxBZSkmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0''@;'; put 'put ''dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1qZSYmQygpLFYoa2UsQWUpfHxhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIFVlKFZlLGtl''@;'; put 'put ''LEFlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09amUmJkMoKSxWKFZlLGtlKSYmYWUoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOiJub3REZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRG''@;'; put 'put ''bjpVZX0pfSxtLnN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7X2Uoa2UsQWUpfHxhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6InN0cmljdEVx''@;'; put 'put ''dWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKGtlLEFlKSYmYWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90''@;'; put 'put ''LG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9O3ZhciBKZT13KGZ1bmN0aW9uIFZlKGtlLEFlLF90KXt2YXIgbnQ9dGhpczsoZnVuY3Rpb24gTyhWZSxrZSl7aWYoIShWZSBpbnN0YW5jZW9mIGtlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBh''@;'; put 'put ''IGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsVmUpLEFlLmZvckVhY2goZnVuY3Rpb24oUWUpe1FlIGluIGtlJiYobnRbUWVdPXZvaWQgMCE9PV90JiYic3RyaW5nIj09dHlwZW9mIF90W1FlXSYmbGUoa2VbUWVdKSYmVGUoa2VbUWVdLF90W1FlXSk/X3RbUWVdOmtlW1FlXSl9KX0pO2Z1''@;'; put 'put ''bmN0aW9uIHhlKFZlLGtlLEFlLF90KXtpZigiZnVuY3Rpb24iIT10eXBlb2Yga2Upe2lmKGxlKGtlKSlyZXR1cm4gVGUoa2UsVmUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBLKCJleHBlY3RlZCIsWyJGdW5jdGlvbiIsIlJlZ0V4cCJdLGtlKTtpZigib2JqZWN0IiE9PWco''@;'; put 'put ''VmUpfHxudWxsPT09VmUpe3ZhciBudD1uZXcgcSh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6QWUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOl90fSk7dGhyb3cgbnQub3BlcmF0b3I9X3QubmFtZSxudH12YXIgUWU9T2JqZWN0LmtleXMoa2UpO2lmKGtl''@;'; put 'put ''IGluc3RhbmNlb2YgRXJyb3IpUWUucHVzaCgibmFtZSIsIm1lc3NhZ2UiKTtlbHNlIGlmKDA9PT1RZS5sZW5ndGgpdGhyb3cgbmV3IFUoImVycm9yIixrZSwibWF5IG5vdCBiZSBhbiBlbXB0eSBvYmplY3QiKTtyZXR1cm4gdm9pZCAwPT09amUmJkMoKSxRZS5mb3JFYWNoKGZ1bmN0aW9uKHVu''@;'; put 'put ''KXsic3RyaW5nIj09dHlwZW9mIFZlW3VuXSYmbGUoa2VbdW5dKSYmVGUoa2VbdW5dLFZlW3VuXSl8fGZ1bmN0aW9uIG90KFZlLGtlLEFlLF90LG50LFFlKXtpZighKEFlIGluIFZlKXx8IVYoVmVbQWVdLGtlW0FlXSkpe2lmKCFfdCl7dmFyIHVuPW5ldyBKZShWZSxudCkseXQ9bmV3IEplKGtl''@;'; put 'put ''LG50LFZlKSxNdD1uZXcgcSh7YWN0dWFsOnVuLGV4cGVjdGVkOnl0LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpRZX0pO3Rocm93IE10LmFjdHVhbD1WZSxNdC5leHBlY3RlZD1rZSxNdC5vcGVyYXRvcj1RZS5uYW1lLE10fWFlKHthY3R1YWw6VmUsZXhwZWN0ZWQ6''@;'; put 'put ''a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjpRZS5uYW1lLHN0YWNrU3RhcnRGbjpRZX0pfX0oVmUsa2UsdW4sQWUsUWUsX3QpfSksITB9cmV0dXJuIHZvaWQgMCE9PWtlLnByb3RvdHlwZSYmVmUgaW5zdGFuY2VvZiBrZXx8IUVycm9yLmlzUHJvdG90eXBlT2Yoa2UpJiYhMD09PWtlLmNhbGwoe30s''@;'; put 'put ''VmUpfWZ1bmN0aW9uIHZlKFZlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVmUpdGhyb3cgbmV3IEsoImZuIiwiRnVuY3Rpb24iLFZlKTt0cnl7VmUoKX1jYXRjaChrZSl7cmV0dXJuIGtlfXJldHVybiBBfWZ1bmN0aW9uIFhlKFZlKXtyZXR1cm4gaWUoVmUpfHxudWxsIT09VmUmJiJvYmplY3Qi''@;'; put 'put ''PT09ZyhWZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBWZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgVmUuY2F0Y2h9ZnVuY3Rpb24gemUoVmUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGtlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBWZSl7aWYoIVhlKGtl''@;'; put 'put ''PVZlKCkpKXRocm93IG5ldyBXKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwicHJvbWlzZUZuIixrZSl9ZWxzZXtpZighWGUoVmUpKXRocm93IG5ldyBLKCJwcm9taXNlRm4iLFsiRnVuY3Rpb24iLCJQcm9taXNlIl0sVmUpO2tlPVZlfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGtlfSkudGhlbihmdW5jdGlvbigpe3JldHVybiBBfSkuY2F0Y2goZnVuY3Rpb24oQWUpe3JldHVybiBBZX0pfSl9ZnVuY3Rpb24gRGUoVmUsa2UsQWUsX3Qpe2lmKCJzdHJpbmciPT10eXBlb2YgQWUpe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBLKCJl''@;'; put 'put ''cnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sQWUpO2lmKCJvYmplY3QiPT09ZyhrZSkmJm51bGwhPT1rZSl7aWYoa2UubWVzc2FnZT09PUFlKXRocm93IG5ldyBMKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yIG1lc3NhZ2UgIicuY29uY2F0KGtlLm1lc3Nh''@;'; put 'put ''Z2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKX1lbHNlIGlmKGtlPT09QWUpdGhyb3cgbmV3IEwoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KGtlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSk7X3Q9QWUsQWU9dm9pZCAwfWVsc2UgaWYo''@;'; put 'put ''bnVsbCE9QWUmJiJvYmplY3QiIT09ZyhBZSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBBZSl0aHJvdyBuZXcgSygiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLEFlKTtpZihrZT09PUEpe3ZhciBudD0iIjtBZSYmQWUubmFtZSYmKG50Kz0iICgiLmNvbmNhdChB''@;'; put 'put ''ZS5uYW1lLCIpIikpLG50Kz1fdD8iOiAiLmNvbmNhdChfdCk6Ii4iLGFlKHthY3R1YWw6dm9pZCAwLGV4cGVjdGVkOkFlLG9wZXJhdG9yOlZlLm5hbWUsbWVzc2FnZToiTWlzc2luZyBleHBlY3RlZCAiLmNvbmNhdCgicmVqZWN0cyI9PT1WZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24i''@;'; put 'put ''KS5jb25jYXQobnQpLHN0YWNrU3RhcnRGbjpWZX0pfWlmKEFlJiYheGUoa2UsQWUsX3QsVmUpKXRocm93IGtlfWZ1bmN0aW9uIEZlKFZlLGtlLEFlLF90KXtpZihrZSE9PUEpe2lmKCJzdHJpbmciPT10eXBlb2YgQWUmJihfdD1BZSxBZT12b2lkIDApLCFBZXx8eGUoa2UsQWUpKXt2YXIgbnQ9''@;'; put 'put ''X3Q/IjogIi5jb25jYXQoX3QpOiIuIjthZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG9wZXJhdG9yOlZlLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90UmVqZWN0Ij09PVZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChudCwiXG4iKSsn''@;'; put 'put ''QWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdChrZSYma2UubWVzc2FnZSwnIicpLHN0YWNrU3RhcnRGbjpWZX0pfXRocm93IGtlfX1mdW5jdGlvbiBPZShWZSxrZSxBZSxfdCxudCl7aWYoIWxlKGtlKSl0aHJvdyBuZXcgSygicmVnZXhwIiwiUmVnRXhwIixrZSk7dmFyIFFlPSJtYXRjaCI9PT1u''@;'; put 'put ''dDtpZigic3RyaW5nIiE9dHlwZW9mIFZlfHxUZShrZSxWZSkhPT1RZSl7aWYoQWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBBZTt2YXIgdW49IUFlO0FlPUFlfHwoInN0cmluZyIhPXR5cGVvZiBWZT8nVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2Vp''@;'; put 'put ''dmVkIHR5cGUgJysiIi5jb25jYXQoZyhWZSksIiAoIikuY29uY2F0KEooVmUpLCIpIik6KFFlPyJUaGUgaW5wdXQgZGlkIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICI6IlRoZSBpbnB1dCB3YXMgZXhwZWN0ZWQgdG8gbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24g''@;'; put 'put ''IikrIiIuY29uY2F0KEooa2UpLCIuIElucHV0OlxuXG4iKS5jb25jYXQoSihWZSksIlxuIikpO3ZhciB5dD1uZXcgcSh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6QWUsb3BlcmF0b3I6bnQsc3RhY2tTdGFydEZuOl90fSk7dGhyb3cgeXQuZ2VuZXJhdGVkTWVzc2FnZT11bix5dH19''@;'; put 'put ''ZnVuY3Rpb24gSWUoKXtmb3IodmFyIFZlPWFyZ3VtZW50cy5sZW5ndGgsa2U9bmV3IEFycmF5KFZlKSxBZT0wO0FlPFZlO0FlKyspa2VbQWVdPWFyZ3VtZW50c1tBZV07c2UuYXBwbHkodm9pZCAwLFtJZSxrZS5sZW5ndGhdLmNvbmNhdChrZSkpfW0udGhyb3dzPWZ1bmN0aW9uIFZlKGtlKXtm''@;'; put 'put ''b3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtEZS5hcHBseSh2b2lkIDAsW1ZlLHZlKGtlKV0uY29uY2F0KF90KSl9LG0ucmVqZWN0cz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZh''@;'; put 'put ''ciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07cmV0dXJuIHplKGtlKS50aGVuKGZ1bmN0aW9uKFFlKXtyZXR1cm4gRGUuYXBwbHkodm9pZCAwLFtWZSxRZV0uY29uY2F0KF90KSl9KX0s''@;'; put 'put ''bS5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtudC0xXT1hcmd1bWVudHNbbnRdO0ZlLmFwcGx5KHZvaWQgMCxbVmUsdmUoa2UpXS5jb25jYXQoX3QpKX0s''@;'; put 'put ''bS5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtyZXR1cm4gemUoa2UpLnRoZW4oZnVuY3Rpb24oUWUpe3JldHVybiBG''@;'; put 'put ''ZS5hcHBseSh2b2lkIDAsW1ZlLFFlXS5jb25jYXQoX3QpKX0pfSxtLmlmRXJyb3I9ZnVuY3Rpb24gVmUoa2Upe2lmKG51bGwhPWtlKXt2YXIgQWU9ImlmRXJyb3IgZ290IHVud2FudGVkIGV4Y2VwdGlvbjogIjsib2JqZWN0Ij09PWcoa2UpJiYic3RyaW5nIj09dHlwZW9mIGtlLm1lc3NhZ2U/''@;'; put 'put ''QWUrPTA9PT1rZS5tZXNzYWdlLmxlbmd0aCYma2UuY29uc3RydWN0b3I/a2UuY29uc3RydWN0b3IubmFtZTprZS5tZXNzYWdlOkFlKz1KKGtlKTt2YXIgX3Q9bmV3IHEoe2FjdHVhbDprZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOkFlLHN0YWNrU3RhcnRGbjpW''@;'; put 'put ''ZX0pLG50PWtlLnN0YWNrO2lmKCJzdHJpbmciPT10eXBlb2YgbnQpe3ZhciBRZT1udC5zcGxpdCgiXG4iKTtRZS5zaGlmdCgpO2Zvcih2YXIgdW49X3Quc3RhY2suc3BsaXQoIlxuIikseXQ9MDt5dDxRZS5sZW5ndGg7eXQrKyl7dmFyIE10PXVuLmluZGV4T2YoUWVbeXRdKTtpZigtMSE9PU10''@;'; put 'put ''KXt1bj11bi5zbGljZSgwLE10KTticmVha319X3Quc3RhY2s9IiIuY29uY2F0KHVuLmpvaW4oIlxuIiksIlxuIikuY29uY2F0KFFlLmpvaW4oIlxuIikpfXRocm93IF90fX0sbS5tYXRjaD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7T2Uoa2UsQWUsX3QsVmUsIm1hdGNoIil9LG0uZG9lc05vdE1h''@;'; put 'put ''dGNoPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtPZShrZSxBZSxfdCxWZSwiZG9lc05vdE1hdGNoIil9LG0uc3RyaWN0PW1lKEllLG0se2VxdWFsOm0uc3RyaWN0RXF1YWwsZGVlcEVxdWFsOm0uZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOm0ubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOm0u''@;'; put 'put ''bm90RGVlcFN0cmljdEVxdWFsfSksbS5zdHJpY3Quc3RyaWN0PW0uc3RyaWN0fSw1OTYxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7ZnVuY3Rpb24gXyhBLGFlKXt2YXIgdGU9T2JqZWN0LmtleXMoQSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFy''@;'; put 'put ''IHNlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoQSk7YWUmJihzZT1zZS5maWx0ZXIoZnVuY3Rpb24od2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEEsd2UpLmVudW1lcmFibGV9KSksdGUucHVzaC5hcHBseSh0ZSxzZSl9cmV0dXJuIHRlfWZ1bmN0aW9u''@;'; put 'put ''IGcoQSl7Zm9yKHZhciBhZT0xO2FlPGFyZ3VtZW50cy5sZW5ndGg7YWUrKyl7dmFyIHRlPW51bGwhPWFyZ3VtZW50c1thZV0/YXJndW1lbnRzW2FlXTp7fTthZSUyP18oT2JqZWN0KHRlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihzZSl7QihBLHNlLHRlW3NlXSl9KTpPYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRlKSk6XyhPYmplY3QodGUpKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxzZSxPYmplY3QuZ2V0T3duUHJvcGVydHlE''@;'; put 'put ''ZXNjcmlwdG9yKHRlLHNlKSl9KX1yZXR1cm4gQX1mdW5jdGlvbiBCKEEsYWUsdGUpe3JldHVybihhZT1PKGFlKSlpbiBBP09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGFlLHt2YWx1ZTp0ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOkFbYWVdPXRlLEF9ZnVu''@;'; put 'put ''Y3Rpb24gUChBLGFlKXtmb3IodmFyIHRlPTA7dGU8YWUubGVuZ3RoO3RlKyspe3ZhciBzZT1hZVt0ZV07c2UuZW51bWVyYWJsZT1zZS5lbnVtZXJhYmxlfHwhMSxzZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHNlJiYoc2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShB''@;'; put 'put ''LE8oc2Uua2V5KSxzZSl9fWZ1bmN0aW9uIE8oQSl7dmFyIGFlPWZ1bmN0aW9uIHooQSxhZSl7aWYoIm9iamVjdCIhPT1pZShBKXx8bnVsbD09PUEpcmV0dXJuIEE7dmFyIHRlPUFbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT10ZSl7dmFyIHNlPXRlLmNhbGwoQSxhZXx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9PWllKHNlKSlyZXR1cm4gc2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1hZT9TdHJpbmc6TnVtYmVyKShBKX0oQSwic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PT1pZShhZSk/YWU6U3RyaW5nKGFlKX1mdW5jdGlvbiBLKEEsYWUpe2lmKGFlJiYoIm9iamVjdCI9PT1pZShhZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBhZSkpcmV0dXJuIGFlO2lmKHZvaWQgMCE9PWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1h''@;'; put 'put ''eSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIFUoQSl9ZnVuY3Rpb24gVShBKXtpZih2b2lkIDA9PT1BKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0''@;'; put 'put ''dXJuIEF9ZnVuY3Rpb24gVyhBKXt2YXIgYWU9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gVz1mdW5jdGlvbihzZSl7aWYobnVsbD09PXNlfHwhZnVuY3Rpb24gZWUoQSl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEEpLmluZGV4T2YoIltu''@;'; put 'put ''YXRpdmUgY29kZV0iKX0oc2UpKXJldHVybiBzZTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih0eXBlb2YgYWU8InUiKXtpZihhZS5oYXMoc2UpKXJldHVy''@;'; put 'put ''biBhZS5nZXQoc2UpO2FlLnNldChzZSx3ZSl9ZnVuY3Rpb24gd2UoKXtyZXR1cm4gWShzZSxhcmd1bWVudHMsbmUodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB3ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp3ZSxlbnVtZXJhYmxl''@;'; put 'put ''OiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxKKHdlLHNlKX0sVyhBKX1mdW5jdGlvbiBZKEEsYWUsdGUpe3JldHVybihZPXEoKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24od2UsVWUsSmUpe3ZhciBvdD1bbnVsbF07b3QucHVzaC5hcHBseShvdCxVZSk7dmFy''@;'; put 'put ''IHZlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHdlLG90KSk7cmV0dXJuIEplJiZKKHZlLEplLnByb3RvdHlwZSksdmV9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVj''@;'; put 'put ''dC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlv''@;'; put 'put ''biBKKEEsYWUpe3JldHVybihKPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHNlLHdlKXtyZXR1cm4gc2UuX19wcm90b19fPXdlLHNlfSkoQSxhZSl9ZnVuY3Rpb24gbmUoQSl7cmV0dXJuKG5lPU9iamVjdC5zZXRQcm90b3R5cGVP''@;'; put 'put ''Zj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodGUpfSkoQSl9ZnVuY3Rpb24gaWUoQSl7cmV0dXJuKGllPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGFlKXtyZXR1cm4gdHlwZW9mIGFlfTpmdW5jdGlvbihhZSl7cmV0dXJuIGFlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYWUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhZX0p''@;'; put 'put ''KEEpfXZhciBtZT15KDk1MzkpLmluc3BlY3QsVGU9eSgyMTM2KS5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlvbiBTZShBLGFlLHRlKXtyZXR1cm4odm9pZCAwPT09dGV8fHRlPkEubGVuZ3RoKSYmKHRlPUEubGVuZ3RoKSxBLnN1YnN0cmluZyh0ZS1hZS5sZW5ndGgsdGUpPT09''@;'; put 'put ''YWV9dmFyIFY9IiIscD0iIixiPSIiLHg9IiIsQz17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhw''@;'; put 'put ''ZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0''@;'; put 'put ''RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90''@;'; put 'put ''IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElk''@;'; put 'put ''ZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBIKEEpe3ZhciBhZT1PYmplY3Qua2V5cyhBKSx0ZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihBKSk7cmV0dXJuIGFlLmZvckVhY2goZnVuY3Rpb24oc2Upe3Rl''@;'; put 'put ''W3NlXT1BW3NlXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwibWVzc2FnZSIse3ZhbHVlOkEubWVzc2FnZX0pLHRlfWZ1bmN0aW9uIGooQSl7cmV0dXJuIG1lKEEse2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46''@;'; put 'put ''ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBtPWZ1bmN0aW9uKEEsYWUpeyFmdW5jdGlvbiBOKEEsYWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhZSYmbnVsbCE9PWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Np''@;'; put 'put ''b24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZSYmYWUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3Rv''@;'; put 'put ''dHlwZSIse3dyaXRhYmxlOiExfSksYWUmJkooQSxhZSl9KHNlLEEpO3ZhciB0ZT1mdW5jdGlvbiBMKEEpe3ZhciBhZT1xKCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHdlLHNlPW5lKEEpO2lmKGFlKXt2YXIgVWU9bmUodGhpcykuY29uc3RydWN0b3I7d2U9UmVmbGVjdC5jb25zdHJ1Y3Qoc2Us''@;'; put 'put ''YXJndW1lbnRzLFVlKX1lbHNlIHdlPXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gSyh0aGlzLHdlKX19KHNlKTtmdW5jdGlvbiBzZSh3ZSl7dmFyIFVlO2lmKGZ1bmN0aW9uIHcoQSxhZSl7aWYoIShBIGluc3RhbmNlb2YgYWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBj''@;'; put 'put ''YWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHNlKSwib2JqZWN0IiE9PWllKHdlKXx8bnVsbD09PXdlKXRocm93IG5ldyBUZSgib3B0aW9ucyIsIk9iamVjdCIsd2UpO3ZhciBKZT13ZS5tZXNzYWdlLG90PXdlLm9wZXJhdG9yLHhlPXdlLnN0YWNrU3RhcnRGbix2ZT13ZS5hY3R1''@;'; put 'put ''YWwsWGU9d2UuZXhwZWN0ZWQsemU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0wLG51bGwhPUplKVVlPXRlLmNhbGwodGhpcyxTdHJpbmcoSmUpKTtlbHNlIGlmKEkuc3RkZXJyJiZJLnN0ZGVyci5pc1RUWSYmKEkuc3RkZXJyJiZJLnN0ZGVyci5nZXRD''@;'; put 'put ''b2xvckRlcHRoJiYxIT09SS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyhWPSJceDFiWzM0bSIscD0iXHgxYlszMm0iLHg9Ilx4MWJbMzltIixiPSJceDFiWzMxbSIpOihWPSIiLHA9IiIseD0iIixiPSIiKSksIm9iamVjdCI9PT1pZSh2ZSkmJm51bGwhPT12ZSYmIm9iamVjdCI9PT1pZShYZSkm''@;'; put 'put ''Jm51bGwhPT1YZSYmInN0YWNrImluIHZlJiZ2ZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4gWGUmJlhlIGluc3RhbmNlb2YgRXJyb3ImJih2ZT1IKHZlKSxYZT1IKFhlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1vdHx8InN0cmljdEVxdWFsIj09PW90KVVlPXRlLmNhbGwodGhpcyxmdW5j''@;'; put 'put ''dGlvbiBFKEEsYWUsdGUpe3ZhciBzZT0iIix3ZT0iIixVZT0wLEplPSIiLG90PSExLHhlPWooQSksdmU9eGUuc3BsaXQoIlxuIiksWGU9aihhZSkuc3BsaXQoIlxuIiksemU9MCxEZT0iIjtpZigic3RyaWN0RXF1YWwiPT09dGUmJiJvYmplY3QiPT09aWUoQSkmJiJvYmplY3QiPT09aWUoYWUp''@;'; put 'put ''JiZudWxsIT09QSYmbnVsbCE9PWFlJiYodGU9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PXZlLmxlbmd0aCYmMT09PVhlLmxlbmd0aCYmdmVbMF0hPT1YZVswXSl7dmFyIEZlPXZlWzBdLmxlbmd0aCtYZVswXS5sZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09aWUoQSkmJm51bGwh''@;'; put 'put ''PT1BfHwib2JqZWN0Ij09PWllKGFlKSYmbnVsbCE9PWFlfHwwPT09QSYmMD09PWFlKSlyZXR1cm4iIi5jb25jYXQoQ1t0ZV0sIlxuXG4iKSsiIi5jb25jYXQodmVbMF0sIiAhPT0gIikuY29uY2F0KFhlWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PXRlJiZGZTwoSS5z''@;'; put 'put ''dGRlcnImJkkuc3RkZXJyLmlzVFRZP0kuc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO3ZlWzBdW3plXT09PVhlWzBdW3plXTspemUrKzt6ZT4yJiYoRGU9IlxuICAiLmNvbmNhdChmdW5jdGlvbiBqZShBLGFlKXtpZihhZT1NYXRoLmZsb29yKGFlKSwwPT1BLmxlbmd0aHx8MD09YWUpcmV0dXJu''@;'; put 'put ''IiI7dmFyIHRlPUEubGVuZ3RoKmFlO2ZvcihhZT1NYXRoLmZsb29yKE1hdGgubG9nKGFlKS9NYXRoLmxvZygyKSk7YWU7KUErPUEsYWUtLTtyZXR1cm4gQStBLnN1YnN0cmluZygwLHRlLUEubGVuZ3RoKX0oIiAiLHplKSwiXiIpLHplPTApfX1mb3IodmFyIEllPXZlW3ZlLmxlbmd0aC0xXSxW''@;'; put 'put ''ZT1YZVtYZS5sZW5ndGgtMV07SWU9PT1WZSYmKHplKys8Mj9KZT0iXG4gICIuY29uY2F0KEllKS5jb25jYXQoSmUpOnNlPUllLHZlLnBvcCgpLFhlLnBvcCgpLDAhPT12ZS5sZW5ndGgmJjAhPT1YZS5sZW5ndGgpOylJZT12ZVt2ZS5sZW5ndGgtMV0sVmU9WGVbWGUubGVuZ3RoLTFdO3ZhciBr''@;'; put 'put ''ZT1NYXRoLm1heCh2ZS5sZW5ndGgsWGUubGVuZ3RoKTtpZigwPT09a2Upe3ZhciBBZT14ZS5zcGxpdCgiXG4iKTtpZihBZS5sZW5ndGg+MzApZm9yKEFlWzI2XT0iIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpO0FlLmxlbmd0aD4yNzspQWUucG9wKCk7cmV0dXJuIiIuY29uY2F0KEMubm90''@;'; put 'put ''SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KEFlLmpvaW4oIlxuIiksIlxuIil9emU+MyYmKEplPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoSmUpLG90PSEwKSwiIiE9PXNlJiYoSmU9IlxuICAiLmNvbmNhdChzZSkuY29uY2F0KEplKSxzZT0iIik7dmFyIF90PTAsbnQ9''@;'; put 'put ''Q1t0ZV0rIlxuIi5jb25jYXQocCwiKyBhY3R1YWwiKS5jb25jYXQoeCwiICIpLmNvbmNhdChiLCItIGV4cGVjdGVkIikuY29uY2F0KHgpLFFlPSIgIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgsIiBMaW5lcyBza2lwcGVkIik7Zm9yKHplPTA7emU8a2U7emUrKyl7dmFyIHVuPXplLVVlO2lm''@;'; put 'put ''KHZlLmxlbmd0aDx6ZSsxKXVuPjEmJnplPjImJih1bj40Pyh3ZSs9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLG90PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQoWGVbemUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KFhlW3plLTFdKSxfdCsrKSxVZT16ZSxzZSs9Ilxu''@;'; put 'put ''Ii5jb25jYXQoYiwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KFhlW3plXSksX3QrKztlbHNlIGlmKFhlLmxlbmd0aDx6ZSsxKXVuPjEmJnplPjImJih1bj40Pyh3ZSs9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLG90PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbemUt''@;'; put 'put ''Ml0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW3plLTFdKSxfdCsrKSxVZT16ZSx3ZSs9IlxuIi5jb25jYXQocCwiKyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHZlW3plXSksX3QrKztlbHNle3ZhciB5dD1YZVt6ZV0sTXQ9dmVbemVdLER0PU10IT09eXQmJighU2UoTXQsIiwiKXx8TXQu''@;'; put 'put ''c2xpY2UoMCwtMSkhPT15dCk7RHQmJlNlKHl0LCIsIikmJnl0LnNsaWNlKDAsLTEpPT09TXQmJihEdD0hMSxNdCs9IiwiKSxEdD8odW4+MSYmemU+MiYmKHVuPjQ/KHdlKz0iXG4iLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCksb3Q9ITApOnVuPjMmJih3ZSs9IlxuICAiLmNvbmNhdCh2ZVt6''@;'; put 'put ''ZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQodmVbemUtMV0pLF90KyspLFVlPXplLHdlKz0iXG4iLmNvbmNhdChwLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoTXQpLHNlKz0iXG4iLmNvbmNhdChiLCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoeXQpLF90Kz0yKTood2UrPXNlLHNl''@;'; put 'put ''PSIiLCgxPT09dW58fDA9PT16ZSkmJih3ZSs9IlxuICAiLmNvbmNhdChNdCksX3QrKykpfWlmKF90PjIwJiZ6ZTxrZS0yKXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KFFlLCJcbiIpLmNvbmNhdCh3ZSwiXG4iKS5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChzZSwiXG4iKSsi''@;'; put 'put ''Ii5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpfXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KG90P1FlOiIiLCJcbiIpLmNvbmNhdCh3ZSkuY29uY2F0KHNlKS5jb25jYXQoSmUpLmNvbmNhdChEZSl9KHZlLFhlLG90KSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PW90fHwibm90''@;'; put 'put ''U3RyaWN0RXF1YWwiPT09b3Qpe3ZhciBEZT1DW290XSxGZT1qKHZlKS5zcGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1YWwiPT09b3QmJiJvYmplY3QiPT09aWUodmUpJiZudWxsIT09dmUmJihEZT1DLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxGZS5sZW5ndGg+MzApZm9yKEZlWzI2XT0iIi5j''@;'; put 'put ''b25jYXQoViwiLi4uIikuY29uY2F0KHgpO0ZlLmxlbmd0aD4yNzspRmUucG9wKCk7VWU9dGUuY2FsbCh0aGlzLDE9PT1GZS5sZW5ndGg/IiIuY29uY2F0KERlLCIgIikuY29uY2F0KEZlWzBdKToiIi5jb25jYXQoRGUsIlxuXG4iKS5jb25jYXQoRmUuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2''@;'; put 'put ''YXIgT2U9aih2ZSksSWU9IiIsVmU9Q1tvdF07Im5vdERlZXBFcXVhbCI9PT1vdHx8Im5vdEVxdWFsIj09PW90PyhPZT0iIi5jb25jYXQoQ1tvdF0sIlxuXG4iKS5jb25jYXQoT2UpKS5sZW5ndGg+MTAyNCYmKE9lPSIiLmNvbmNhdChPZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KEllPSIiLmNv''@;'; put 'put ''bmNhdChqKFhlKSksT2UubGVuZ3RoPjUxMiYmKE9lPSIiLmNvbmNhdChPZS5zbGljZSgwLDUwOSksIi4uLiIpKSxJZS5sZW5ndGg+NTEyJiYoSWU9IiIuY29uY2F0KEllLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09b3R8fCJlcXVhbCI9PT1vdD9PZT0iIi5jb25jYXQoVmUs''@;'; put 'put ''IlxuXG4iKS5jb25jYXQoT2UsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6SWU9IiAiLmNvbmNhdChvdCwiICIpLmNvbmNhdChJZSkpLFVlPXRlLmNhbGwodGhpcywiIi5jb25jYXQoT2UpLmNvbmNhdChJZSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9emUsVWUuZ2VuZXJhdGVkTWVz''@;'; put 'put ''c2FnZT0hSmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFUoVWUpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxVZS5jb2RlPSJFUlJfQVNTRVJUSU9OIixVZS5hY3R1YWw9dmUs''@;'; put 'put ''VWUuZXhwZWN0ZWQ9WGUsVWUub3BlcmF0b3I9b3QsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKFUoVWUpLHhlKSxVZS5uYW1lPSJBc3NlcnRpb25FcnJvciIsSyhVZSl9cmV0dXJuIGZ1bmN0aW9uIEYoQSxhZSx0ZSl7YWUmJlAoQS5wcm90b3R5cGUs''@;'; put 'put ''YWUpLHRlJiZQKEEsdGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShzZSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25j''@;'; put 'put ''YXQodGhpcy5tZXNzYWdlKX19LHtrZXk6YWUsdmFsdWU6ZnVuY3Rpb24oVWUsSmUpe3JldHVybiBtZSh0aGlzLGcoZyh7fSxKZSkse30se2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSksc2V9KFcoRXJyb3IpLG1lLmN1c3RvbSk7dWUuZXhwb3J0cz1tfSwyMTM2Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkobWUpe3JldHVybihJPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKF9lKXtyZXR1cm4gdHlwZW9mIF9lfTpmdW5jdGlvbihfZSl7cmV0dXJuIF9lJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sJiZfZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmX2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBfZX0pKG1lKX1mdW5jdGlvbiBfKG1lLF9lKXtmb3IodmFyIFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspe3ZhciBTZT1fZVtUZV07U2UuZW51bWVyYWJsZT1T''@;'; put 'put ''ZS5lbnVtZXJhYmxlfHwhMSxTZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFNlJiYoU2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSxCKFNlLmtleSksU2UpfX1mdW5jdGlvbiBCKG1lKXt2YXIgX2U9ZnVuY3Rpb24gdyhtZSxfZSl7aWYoIm9iamVjdCIhPT1JKG1l''@;'; put 'put ''KXx8bnVsbD09PW1lKXJldHVybiBtZTt2YXIgVGU9bWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1UZSl7dmFyIFNlPVRlLmNhbGwobWUsX2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1JKFNlKSlyZXR1cm4gU2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2''@;'; put 'put ''ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1fZT9TdHJpbmc6TnVtYmVyKShtZSl9KG1lLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUkoX2UpP19lOlN0cmluZyhfZSl9ZnVuY3Rpb24gTyhtZSxfZSl7cmV0dXJuKE89T2JqZWN0LnNldFBy''@;'; put 'put ''b3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oU2UsamUpe3JldHVybiBTZS5fX3Byb3RvX189amUsU2V9KShtZSxfZSl9ZnVuY3Rpb24gVShtZSl7cmV0dXJuKFU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6''@;'; put 'put ''ZnVuY3Rpb24oVGUpe3JldHVybiBUZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihUZSl9KShtZSl9dmFyIFkscSxXPXt9O2Z1bmN0aW9uIGVlKG1lLF9lLFRlKXtUZXx8KFRlPUVycm9yKTt2YXIgamU9ZnVuY3Rpb24oVil7IWZ1bmN0aW9uIEYobWUsX2Upe2lmKCJmdW5jdGlv''@;'; put 'put ''biIhPXR5cGVvZiBfZSYmbnVsbCE9PV9lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoX2UmJl9lLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm1l''@;'; put 'put ''LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksX2UmJk8obWUsX2UpfShiLFYpO3ZhciBwPWZ1bmN0aW9uIHoobWUpe3ZhciBfZT1mdW5jdGlvbiBLKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUi''@;'; put 'put ''fHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVu''@;'; put 'put ''Y3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBqZSxTZT1VKG1lKTtpZihfZSl7dmFyIFY9VSh0aGlzKS5jb25zdHJ1Y3RvcjtqZT1SZWZsZWN0LmNvbnN0cnVjdChTZSxhcmd1bWVudHMsVil9ZWxzZSBqZT1TZS5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyk7cmV0dXJuIGZ1bmN0aW9uIE4obWUsX2Upe2lmKF9lJiYoIm9iamVjdCI9PT1JKF9lKXx8ImZ1bmN0aW9uIj09dHlwZW9mIF9lKSlyZXR1cm4gX2U7aWYodm9pZCAwIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9i''@;'; put 'put ''amVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gTChtZSl7aWYodm9pZCAwPT09bWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbWV9KG1lKX0odGhpcyxq''@;'; put 'put ''ZSl9fShiKTtmdW5jdGlvbiBiKHgsQyxUKXt2YXIgSDtyZXR1cm4gZnVuY3Rpb24gUChtZSxfZSl7aWYoIShtZSBpbnN0YW5jZW9mIF9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxiKSxIPXAuY2FsbCh0aGlzLGZ1bmN0''@;'; put 'put ''aW9uIFNlKFYscCxiKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF9lP19lOl9lKFYscCxiKX0oeCxDLFQpKSxILmNvZGU9bWUsSH1yZXR1cm4gZnVuY3Rpb24gZyhtZSxfZSxUZSl7cmV0dXJuIF9lJiZfKG1lLnByb3RvdHlwZSxfZSksVGUmJl8obWUsVGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShtZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxtZX0oYil9KFRlKTtXW21lXT1qZX1mdW5jdGlvbiBKKG1lLF9lKXtpZihBcnJheS5pc0FycmF5KG1lKSl7dmFyIFRlPW1lLmxlbmd0aDtyZXR1cm4gbWU9bWUubWFwKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU3RyaW5nKFNlKX0pLFRlPjI/''@;'; put 'put ''Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChtZS5zbGljZSgwLFRlLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrbWVbVGUtMV06Mj09PVRlPyJvbmUgb2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWVbMF0sIiBvciAiKS5jb25jYXQobWVbMV0pOiJvZiAiLmNvbmNhdChfZSwiICIp''@;'; put 'put ''LmNvbmNhdChtZVswXSl9cmV0dXJuIm9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KFN0cmluZyhtZSkpfWVlKCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIiwnVGhlICIlcyIgYXJndW1lbnQgaXMgYW1iaWd1b3VzLiAlcycsVHlwZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1''@;'; put 'put ''bmN0aW9uKG1lLF9lLFRlKXt2YXIgU2UsamU7aWYodm9pZCAwPT09WSYmKFk9eSg5MjgyKSksWSgic3RyaW5nIj09dHlwZW9mIG1lLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgX2UmJmZ1bmN0aW9uIG5lKG1lLF9lLFRlKXtyZXR1cm4gbWUuc3Vic3RyKCFU''@;'; put 'put ''ZXx8VGU8MD8wOitUZSxfZS5sZW5ndGgpPT09X2V9KF9lLCJub3QgIik/KFNlPSJtdXN0IG5vdCBiZSIsX2U9X2UucmVwbGFjZSgvXm5vdCAvLCIiKSk6U2U9Im11c3QgYmUiLGZ1bmN0aW9uIGllKG1lLF9lLFRlKXtyZXR1cm4odm9pZCAwPT09VGV8fFRlPm1lLmxlbmd0aCkmJihUZT1tZS5s''@;'; put 'put ''ZW5ndGgpLG1lLnN1YnN0cmluZyhUZS1fZS5sZW5ndGgsVGUpPT09X2V9KG1lLCIgYXJndW1lbnQiKSlqZT0iVGhlICIuY29uY2F0KG1lLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KEooX2UsInR5cGUiKSk7ZWxzZXt2YXIgVj1mdW5jdGlvbiBsZShtZSxfZSxUZSl7cmV0dXJuIm51bWJl''@;'; put 'put ''ciIhPXR5cGVvZiBUZSYmKFRlPTApLCEoVGUrX2UubGVuZ3RoPm1lLmxlbmd0aCkmJi0xIT09bWUuaW5kZXhPZihfZSxUZSl9KG1lLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2plPSdUaGUgIicuY29uY2F0KG1lLCciICcpLmNvbmNhdChWLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0''@;'; put 'put ''KEooX2UsInR5cGUiKSl9cmV0dXJuIGplKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoSShUZSkpfSxUeXBlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9BUkdfVkFMVUUiLGZ1bmN0aW9uKG1lLF9lKXt2YXIgVGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn''@;'; put 'put ''dW1lbnRzWzJdOiJpcyBpbnZhbGlkIjt2b2lkIDA9PT1xJiYocT15KDk1MzkpKTt2YXIgU2U9cS5pbnNwZWN0KF9lKTtyZXR1cm4gU2UubGVuZ3RoPjEyOCYmKFNlPSIiLmNvbmNhdChTZS5zbGljZSgwLDEyOCksIi4uLiIpKSwiVGhlIGFyZ3VtZW50ICciLmNvbmNhdChtZSwiJyAiKS5jb25j''@;'; put 'put ''YXQoVGUsIi4gUmVjZWl2ZWQgIikuY29uY2F0KFNlKX0sVHlwZUVycm9yLFJhbmdlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUiLGZ1bmN0aW9uKG1lLF9lLFRlKXt2YXIgU2U7cmV0dXJuIFNlPVRlJiZUZS5jb25zdHJ1Y3RvciYmVGUuY29uc3RydWN0b3IubmFtZT8iaW5z''@;'; put 'put ''dGFuY2Ugb2YgIi5jb25jYXQoVGUuY29uc3RydWN0b3IubmFtZSk6InR5cGUgIi5jb25jYXQoSShUZSkpLCJFeHBlY3RlZCAiLmNvbmNhdChtZSwnIHRvIGJlIHJldHVybmVkIGZyb20gdGhlICInKS5jb25jYXQoX2UsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQoU2UsIi4iKX0s''@;'; put 'put ''VHlwZUVycm9yKSxlZSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIG1lPWFyZ3VtZW50cy5sZW5ndGgsX2U9bmV3IEFycmF5KG1lKSxUZT0wO1RlPG1lO1RlKyspX2VbVGVdPWFyZ3VtZW50c1tUZV07dm9pZCAwPT09WSYmKFk9eSg5MjgyKSksWShfZS5sZW5ndGg+MCwi''@;'; put 'put ''QXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2YXIgU2U9IlRoZSAiLGplPV9lLmxlbmd0aDtzd2l0Y2goX2U9X2UubWFwKGZ1bmN0aW9uKFYpe3JldHVybiciJy5jb25jYXQoViwnIicpfSksamUpe2Nhc2UgMTpTZSs9IiIuY29uY2F0KF9lWzBdLCIgYXJndW1lbnQi''@;'; put 'put ''KTticmVhaztjYXNlIDI6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFuZCAiKS5jb25jYXQoX2VbMV0sIiBhcmd1bWVudHMiKTticmVhaztkZWZhdWx0OlNlKz1fZS5zbGljZSgwLGplLTEpLmpvaW4oIiwgIiksU2UrPSIsIGFuZCAiLmNvbmNhdChfZVtqZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVy''@;'; put 'put ''biIiLmNvbmNhdChTZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksdWUuZXhwb3J0cy5jb2Rlcz1XfSw5MTU4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoRHQsaXQpe3JldHVybiBmdW5jdGlvbiBQKER0KXtpZihBcnJheS5pc0FycmF5KER0KSlyZXR1cm4g''@;'; put 'put ''RHR9KER0KXx8ZnVuY3Rpb24gdyhEdCxpdCl7dmFyICRlPW51bGw9PUR0P251bGw6dHlwZW9mIFN5bWJvbDwidSImJkR0W1N5bWJvbC5pdGVyYXRvcl18fER0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9JGUpe3ZhciB0dCxIZSx1dCxxdCxSdD1bXSxQdD0hMCxjaT0hMTt0cnl7aWYodXQ9KCRl''@;'; put 'put ''PSRlLmNhbGwoRHQpKS5uZXh0LDA9PT1pdCl7aWYoT2JqZWN0KCRlKSE9PSRlKXJldHVybjtQdD0hMX1lbHNlIGZvcig7IShQdD0odHQ9dXQuY2FsbCgkZSkpLmRvbmUpJiYoUnQucHVzaCh0dC52YWx1ZSksUnQubGVuZ3RoIT09aXQpO1B0PSEwKTt9Y2F0Y2goUXQpe2NpPSEwLEhlPVF0fWZp''@;'; put 'put ''bmFsbHl7dHJ5e2lmKCFQdCYmbnVsbCE9JGUucmV0dXJuJiYocXQ9JGUucmV0dXJuKCksT2JqZWN0KHF0KSE9PXF0KSlyZXR1cm59ZmluYWxseXtpZihjaSl0aHJvdyBIZX19cmV0dXJuIFJ0fX0oRHQsaXQpfHxmdW5jdGlvbiBnKER0LGl0KXtpZihEdCl7aWYoInN0cmluZyI9PXR5cGVvZiBE''@;'; put 'put ''dClyZXR1cm4gQihEdCxpdCk7dmFyICRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChEdCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT0kZSYmRHQuY29uc3RydWN0b3ImJigkZT1EdC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PSRlfHwiU2V0Ij09PSRlKXJldHVybiBBcnJh''@;'; put 'put ''eS5mcm9tKER0KTtpZigiQXJndW1lbnRzIj09PSRlfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCgkZSkpcmV0dXJuIEIoRHQsaXQpfX0oRHQsaXQpfHxmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRl''@;'; put 'put ''c3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBCKER0LGl0KXsobnVsbD09aXR8fGl0PkR0Lmxlbmd0aCkm''@;'; put 'put ''JihpdD1EdC5sZW5ndGgpO2Zvcih2YXIgJGU9MCx0dD1uZXcgQXJyYXkoaXQpOyRlPGl0OyRlKyspdHRbJGVdPUR0WyRlXTtyZXR1cm4gdHR9ZnVuY3Rpb24gRihEdCl7cmV0dXJuKEY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/''@;'; put 'put ''ZnVuY3Rpb24oaXQpe3JldHVybiB0eXBlb2YgaXR9OmZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJml0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZpdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGl0fSkoRHQpfXZhciBPPXZvaWQg''@;'; put 'put ''MCE9PS9hL2cuZmxhZ3Msej1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0KXtyZXR1cm4gJGUucHVzaCh0dCl9KSwkZX0sTj1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gJGUu''@;'; put 'put ''cHVzaChbSGUsdHRdKX0pLCRlfSxMPU9iamVjdC5pcz9PYmplY3QuaXM6eSg2MDkpLEs9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKCl7cmV0dXJuW119LFU9TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjp5KDM2MCk7''@;'; put 'put ''ZnVuY3Rpb24gVyhEdCl7cmV0dXJuIER0LmNhbGwuYmluZChEdCl9dmFyIFk9VyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxxPVcoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSksZWU9VyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxKPXkoOTUzOSku''@;'; put 'put ''dHlwZXMsbmU9Si5pc0FueUFycmF5QnVmZmVyLGllPUouaXNBcnJheUJ1ZmZlclZpZXcsbGU9Si5pc0RhdGUsbWU9Si5pc01hcCxfZT1KLmlzUmVnRXhwLFRlPUouaXNTZXQsU2U9Si5pc05hdGl2ZUVycm9yLGplPUouaXNCb3hlZFByaW1pdGl2ZSxWPUouaXNOdW1iZXJPYmplY3QscD1KLmlz''@;'; put 'put ''U3RyaW5nT2JqZWN0LGI9Si5pc0Jvb2xlYW5PYmplY3QseD1KLmlzQmlnSW50T2JqZWN0LEM9Si5pc1N5bWJvbE9iamVjdCxUPUouaXNGbG9hdDMyQXJyYXksSD1KLmlzRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIGooRHQpe2lmKDA9PT1EdC5sZW5ndGh8fER0Lmxlbmd0aD4xMClyZXR1cm4hMDtm''@;'; put 'put ''b3IodmFyIGl0PTA7aXQ8RHQubGVuZ3RoO2l0Kyspe3ZhciAkZT1EdC5jaGFyQ29kZUF0KGl0KTtpZigkZTw0OHx8JGU+NTcpcmV0dXJuITB9cmV0dXJuIDEwPT09RHQubGVuZ3RoJiZEdD49TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gRShEdCl7cmV0dXJuIE9iamVjdC5rZXlzKER0KS5maWx0''@;'; put 'put ''ZXIoaikuY29uY2F0KEsoRHQpLmZpbHRlcihPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmJpbmQoRHQpKSl9ZnVuY3Rpb24gbShEdCxpdCl7aWYoRHQ9PT1pdClyZXR1cm4gMDtmb3IodmFyICRlPUR0Lmxlbmd0aCx0dD1pdC5sZW5ndGgsSGU9MCx1dD1NYXRoLm1pbigk''@;'; put 'put ''ZSx0dCk7SGU8dXQ7KytIZSlpZihEdFtIZV0hPT1pdFtIZV0peyRlPUR0W0hlXSx0dD1pdFtIZV07YnJlYWt9cmV0dXJuICRlPHR0Py0xOnR0PCRlPzE6MH12YXIgc2U9MCx3ZT0xLFVlPTIsSmU9MztmdW5jdGlvbiBEZShEdCxpdCwkZSx0dCl7aWYoRHQ9PT1pdClyZXR1cm4gMCE9PUR0fHwh''@;'; put 'put ''JGV8fEwoRHQsaXQpO2lmKCRlKXtpZigib2JqZWN0IiE9PUYoRHQpKXJldHVybiJudW1iZXIiPT10eXBlb2YgRHQmJlUoRHQpJiZVKGl0KTtpZigib2JqZWN0IiE9PUYoaXQpfHxudWxsPT09RHR8fG51bGw9PT1pdHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKER0KSE9PU9iamVjdC5nZXRQcm90''@;'; put 'put ''b3R5cGVPZihpdCkpcmV0dXJuITF9ZWxzZXtpZihudWxsPT09RHR8fCJvYmplY3QiIT09RihEdCkpcmV0dXJuKG51bGw9PT1pdHx8Im9iamVjdCIhPT1GKGl0KSkmJkR0PT1pdDtpZihudWxsPT09aXR8fCJvYmplY3QiIT09RihpdCkpcmV0dXJuITF9dmFyIEhlPWVlKER0KTtpZihIZSE9PWVl''@;'; put 'put ''KGl0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KER0KSl7aWYoRHQubGVuZ3RoIT09aXQubGVuZ3RoKXJldHVybiExO3ZhciBxdD1FKER0KSxSdD1FKGl0KTtyZXR1cm4gcXQubGVuZ3RoPT09UnQubGVuZ3RoJiZPZShEdCxpdCwkZSx0dCx3ZSxxdCl9aWYoIltvYmplY3QgT2JqZWN0XSI9''@;'; put 'put ''PT1IZSYmKCFtZShEdCkmJm1lKGl0KXx8IVRlKER0KSYmVGUoaXQpKSlyZXR1cm4hMTtpZihsZShEdCkpe2lmKCFsZShpdCl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChEdCkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoaXQpKXJldHVybiExfWVsc2UgaWYoX2UoRHQpKXtp''@;'; put 'put ''ZighX2UoaXQpfHwhZnVuY3Rpb24gb3QoRHQsaXQpe3JldHVybiBPP0R0LnNvdXJjZT09PWl0LnNvdXJjZSYmRHQuZmxhZ3M9PT1pdC5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRHQpPT09UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0KX0oRHQsaXQpKXJl''@;'; put 'put ''dHVybiExfWVsc2UgaWYoU2UoRHQpfHxEdCBpbnN0YW5jZW9mIEVycm9yKXtpZihEdC5tZXNzYWdlIT09aXQubWVzc2FnZXx8RHQubmFtZSE9PWl0Lm5hbWUpcmV0dXJuITF9ZWxzZXtpZihpZShEdCkpe2lmKCRlfHwhVChEdCkmJiFIKER0KSl7aWYoIWZ1bmN0aW9uIHZlKER0LGl0KXtyZXR1''@;'; put 'put ''cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KER0LmJ1ZmZlcixEdC5ieXRlT2Zmc2V0LER0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KGl0LmJ1ZmZlcixpdC5ieXRlT2Zmc2V0LGl0LmJ5dGVMZW5ndGgpKX0oRHQsaXQpKXJldHVybiEx''@;'; put 'put ''fWVsc2UgaWYoIWZ1bmN0aW9uIHhlKER0LGl0KXtpZihEdC5ieXRlTGVuZ3RoIT09aXQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyICRlPTA7JGU8RHQuYnl0ZUxlbmd0aDskZSsrKWlmKER0WyRlXSE9PWl0WyRlXSlyZXR1cm4hMTtyZXR1cm4hMH0oRHQsaXQpKXJldHVybiExO3ZhciBQ''@;'; put 'put ''dD1FKER0KSxjaT1FKGl0KTtyZXR1cm4gUHQubGVuZ3RoPT09Y2kubGVuZ3RoJiZPZShEdCxpdCwkZSx0dCxzZSxQdCl9aWYoVGUoRHQpKXJldHVybiEoIVRlKGl0KXx8RHQuc2l6ZSE9PWl0LnNpemUpJiZPZShEdCxpdCwkZSx0dCxVZSk7aWYobWUoRHQpKXJldHVybiEoIW1lKGl0KXx8RHQu''@;'; put 'put ''c2l6ZSE9PWl0LnNpemUpJiZPZShEdCxpdCwkZSx0dCxKZSk7aWYobmUoRHQpKXtpZighZnVuY3Rpb24gWGUoRHQsaXQpe3JldHVybiBEdC5ieXRlTGVuZ3RoPT09aXQuYnl0ZUxlbmd0aCYmMD09PW0obmV3IFVpbnQ4QXJyYXkoRHQpLG5ldyBVaW50OEFycmF5KGl0KSl9KER0LGl0KSlyZXR1''@;'; put 'put ''cm4hMX1lbHNlIGlmKGplKER0KSYmIWZ1bmN0aW9uIHplKER0LGl0KXtyZXR1cm4gVihEdCk/VihpdCkmJkwoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KSk6cChEdCk/cChpdCkmJlN0cmluZy5wcm90b3R5cGUudmFs''@;'; put 'put ''dWVPZi5jYWxsKER0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTpiKER0KT9iKGl0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6eChEdCk/eChpdCkmJkJpZ0ludC5wcm90b3R5cGUu''@;'; put 'put ''dmFsdWVPZi5jYWxsKER0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTpDKGl0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpfShEdCxpdCkpcmV0dXJuITF9cmV0dXJuIE9lKER0LGl0LCRl''@;'; put 'put ''LHR0LHNlKX1mdW5jdGlvbiBGZShEdCxpdCl7cmV0dXJuIGl0LmZpbHRlcihmdW5jdGlvbigkZSl7cmV0dXJuIHEoRHQsJGUpfSl9ZnVuY3Rpb24gT2UoRHQsaXQsJGUsdHQsSGUsdXQpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXt1dD1PYmplY3Qua2V5cyhEdCk7dmFyIHF0PU9iamVjdC5r''@;'; put 'put ''ZXlzKGl0KTtpZih1dC5sZW5ndGghPT1xdC5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBSdD0wO1J0PHV0Lmxlbmd0aDtSdCsrKWlmKCFZKGl0LHV0W1J0XSkpcmV0dXJuITE7aWYoJGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUHQ9SyhEdCk7aWYoMCE9PVB0Lmxlbmd0aCl7dmFyIGNp''@;'; put 'put ''PTA7Zm9yKFJ0PTA7UnQ8UHQubGVuZ3RoO1J0Kyspe3ZhciBRdD1QdFtSdF07aWYocShEdCxRdCkpe2lmKCFxKGl0LFF0KSlyZXR1cm4hMTt1dC5wdXNoKFF0KSxjaSsrfWVsc2UgaWYocShpdCxRdCkpcmV0dXJuITF9dmFyIHNuPUsoaXQpO2lmKFB0Lmxlbmd0aCE9PXNuLmxlbmd0aCYmRmUo''@;'; put 'put ''aXQsc24pLmxlbmd0aCE9PWNpKXJldHVybiExfWVsc2V7dmFyIFJpPUsoaXQpO2lmKDAhPT1SaS5sZW5ndGgmJjAhPT1GZShpdCxSaSkubGVuZ3RoKXJldHVybiExfX1pZigwPT09dXQubGVuZ3RoJiYoSGU9PT1zZXx8SGU9PT13ZSYmMD09PUR0Lmxlbmd0aHx8MD09PUR0LnNpemUpKXJldHVy''@;'; put 'put ''biEwO2lmKHZvaWQgMD09PXR0KXR0PXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIGhuPXR0LnZhbDEuZ2V0KER0KTtpZih2b2lkIDAhPT1obil7dmFyIGZ0PXR0LnZhbDIuZ2V0KGl0KTtpZih2b2lkIDAhPT1mdClyZXR1cm4gaG49PT1mdH10dC5wb3Np''@;'; put 'put ''dGlvbisrfXR0LnZhbDEuc2V0KER0LHR0LnBvc2l0aW9uKSx0dC52YWwyLnNldChpdCx0dC5wb3NpdGlvbik7dmFyIE9yPWZ1bmN0aW9uIHVuKER0LGl0LCRlLHR0LEhlLHV0KXt2YXIgcXQ9MDtpZih1dD09PVVlKXtpZighZnVuY3Rpb24gX3QoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9bnVs''@;'; put 'put ''bCx1dD16KER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9dXRbcXRdO2lmKCJvYmplY3QiPT09RihSdCkmJm51bGwhPT1SdCludWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUnQpO2Vsc2UgaWYoIWl0LmhhcyhSdCkpe2lmKCRlfHwha2UoRHQsaXQsUnQpKXJldHVybiEx''@;'; put 'put ''O251bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChSdCl9fWlmKG51bGwhPT1IZSl7Zm9yKHZhciBQdD16KGl0KSxjaT0wO2NpPFB0Lmxlbmd0aDtjaSsrKXt2YXIgUXQ9UHRbY2ldO2lmKCJvYmplY3QiPT09RihRdCkmJm51bGwhPT1RdCl7aWYoIUllKEhlLFF0LCRlLHR0KSlyZXR1cm4h''@;'; put 'put ''MX1lbHNlIGlmKCEkZSYmIUR0LmhhcyhRdCkmJiFJZShIZSxRdCwkZSx0dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1IZS5zaXplfXJldHVybiEwfShEdCxpdCwkZSxIZSkpcmV0dXJuITF9ZWxzZSBpZih1dD09PUplKXtpZighZnVuY3Rpb24gUWUoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9bnVs''@;'; put 'put ''bCx1dD1OKER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9SSh1dFtxdF0sMiksUHQ9UnRbMF0sY2k9UnRbMV07aWYoIm9iamVjdCI9PT1GKFB0KSYmbnVsbCE9PVB0KW51bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChQdCk7ZWxzZXt2YXIgUXQ9aXQuZ2V0KFB0KTtpZih2''@;'; put 'put ''b2lkIDA9PT1RdCYmIWl0LmhhcyhQdCl8fCFEZShjaSxRdCwkZSx0dCkpe2lmKCRlfHwhQWUoRHQsaXQsUHQsY2ksdHQpKXJldHVybiExO251bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChQdCl9fX1pZihudWxsIT09SGUpe2Zvcih2YXIgc249TihpdCksUmk9MDtSaTxzbi5sZW5ndGg7''@;'; put 'put ''UmkrKyl7dmFyIGhuPUkoc25bUmldLDIpLGZ0PWhuWzBdLE9yPWhuWzFdO2lmKCJvYmplY3QiPT09RihmdCkmJm51bGwhPT1mdCl7aWYoIW50KEhlLER0LGZ0LE9yLCRlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEoJGV8fER0LmhhcyhmdCkmJkRlKER0LmdldChmdCksT3IsITEsdHQpfHxudChI''@;'; put 'put ''ZSxEdCxmdCxPciwhMSx0dCkpKXJldHVybiExfXJldHVybiAwPT09SGUuc2l6ZX1yZXR1cm4hMH0oRHQsaXQsJGUsSGUpKXJldHVybiExfWVsc2UgaWYodXQ9PT13ZSlmb3IoO3F0PER0Lmxlbmd0aDtxdCsrKXtpZighWShEdCxxdCkpe2lmKFkoaXQscXQpKXJldHVybiExO2Zvcih2YXIgUnQ9''@;'; put 'put ''T2JqZWN0LmtleXMoRHQpO3F0PFJ0Lmxlbmd0aDtxdCsrKXt2YXIgUHQ9UnRbcXRdO2lmKCFZKGl0LFB0KXx8IURlKER0W1B0XSxpdFtQdF0sJGUsSGUpKXJldHVybiExfXJldHVybiBSdC5sZW5ndGg9PT1PYmplY3Qua2V5cyhpdCkubGVuZ3RofWlmKCFZKGl0LHF0KXx8IURlKER0W3F0XSxp''@;'; put 'put ''dFtxdF0sJGUsSGUpKXJldHVybiExfWZvcihxdD0wO3F0PHR0Lmxlbmd0aDtxdCsrKXt2YXIgY2k9dHRbcXRdO2lmKCFEZShEdFtjaV0saXRbY2ldLCRlLEhlKSlyZXR1cm4hMX1yZXR1cm4hMH0oRHQsaXQsJGUsdXQsdHQsSGUpO3JldHVybiB0dC52YWwxLmRlbGV0ZShEdCksdHQudmFsMi5k''@;'; put 'put ''ZWxldGUoaXQpLE9yfWZ1bmN0aW9uIEllKER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPXooRHQpLHV0PTA7dXQ8SGUubGVuZ3RoO3V0Kyspe3ZhciBxdD1IZVt1dF07aWYoRGUoaXQscXQsJGUsdHQpKXJldHVybiBEdC5kZWxldGUocXQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFZlKER0KXtzd2l0''@;'; put 'put ''Y2goRihEdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6RHQ9K0R0O2Nhc2UibnVtYmVyIjppZihVKER0KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBrZShEdCxpdCwkZSl7dmFy''@;'; put 'put ''IHR0PVZlKCRlKTtyZXR1cm4gdHQ/PyhpdC5oYXModHQpJiYhRHQuaGFzKHR0KSl9ZnVuY3Rpb24gQWUoRHQsaXQsJGUsdHQsSGUpe3ZhciB1dD1WZSgkZSk7aWYobnVsbCE9dXQpcmV0dXJuIHV0O3ZhciBxdD1pdC5nZXQodXQpO3JldHVybiEodm9pZCAwPT09cXQmJiFpdC5oYXModXQpfHwh''@;'; put 'put ''RGUodHQscXQsITEsSGUpKSYmIUR0Lmhhcyh1dCkmJkRlKHR0LHF0LCExLEhlKX1mdW5jdGlvbiBudChEdCxpdCwkZSx0dCxIZSx1dCl7Zm9yKHZhciBxdD16KER0KSxSdD0wO1J0PHF0Lmxlbmd0aDtSdCsrKXt2YXIgUHQ9cXRbUnRdO2lmKERlKCRlLFB0LEhlLHV0KSYmRGUodHQsaXQuZ2V0''@;'; put 'put ''KFB0KSxIZSx1dCkpcmV0dXJuIER0LmRlbGV0ZShQdCksITB9cmV0dXJuITF9dWUuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24geXQoRHQsaXQpe3JldHVybiBEZShEdCxpdCwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uIE10KER0LGl0KXtyZXR1cm4gRGUoRHQsaXQsITAp''@;'; put 'put ''fX19LDgyMjQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyYXBwZXI9ZnVuY3Rpb24geShJKXtyZXR1cm4gSX19LDk3NDI6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guYnl0ZUxlbmd0aD1mdW5jdGlvbiBG''@;'; put 'put ''KFUpe3ZhciBXPVAoVSkscT1XWzFdO3JldHVybiAzKihXWzBdK3EpLzQtcX0sWC50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFUpe3ZhciBXLGxlLFk9UChVKSxxPVlbMF0sZWU9WVsxXSxKPW5ldyBfKGZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiAzKihXK1kpLzQtWX0oMCxxLGVlKSksbmU9MCxp''@;'; put 'put ''ZT1lZT4wP3EtNDpxO2ZvcihsZT0wO2xlPGllO2xlKz00KVc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MTh8SVtVLmNoYXJDb2RlQXQobGUrMSldPDwxMnxJW1UuY2hhckNvZGVBdChsZSsyKV08PDZ8SVtVLmNoYXJDb2RlQXQobGUrMyldLEpbbmUrK109Vz4+MTYmMjU1LEpbbmUrK109Vz4+OCYy''@;'; put 'put ''NTUsSltuZSsrXT0yNTUmVztyZXR1cm4gMj09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwyfElbVS5jaGFyQ29kZUF0KGxlKzEpXT4+NCxKW25lKytdPTI1NSZXKSwxPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDEwfElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8NHxJW1UuY2hh''@;'; put 'put ''ckNvZGVBdChsZSsyKV0+PjIsSltuZSsrXT1XPj44JjI1NSxKW25lKytdPTI1NSZXKSxKfSxYLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gSyhVKXtmb3IodmFyIFcsWT1VLmxlbmd0aCxxPVklMyxlZT1bXSxKPTE2MzgzLG5lPTAsaWU9WS1xO25lPGllO25lKz1KKWVlLnB1c2goTChVLG5lLG5l''@;'; put 'put ''K0o+aWU/aWU6bmUrSikpO3JldHVybiAxPT09cT9lZS5wdXNoKHlbKFc9VVtZLTFdKT4+Ml0reVtXPDw0JjYzXSsiPT0iKToyPT09cSYmZWUucHVzaCh5WyhXPShVW1ktMl08PDgpK1VbWS0xXSk+PjEwXSt5W1c+PjQmNjNdK3lbVzw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciB5''@;'; put 'put ''PVtdLEk9W10sXz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxnPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixCPTA7Qjw2NDsrK0IpeVtCXT1nW0JdLElbZy5jaGFyQ29kZUF0KEIpXT1CO2Z1''@;'; put 'put ''bmN0aW9uIFAoVSl7dmFyIFc9VS5sZW5ndGg7aWYoVyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFk9VS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1ZJiYoWT1XKSxbWSxZPT09Vz8wOjQtWSU0XX1mdW5j''@;'; put 'put ''dGlvbiBOKFUpe3JldHVybiB5W1U+PjE4JjYzXSt5W1U+PjEyJjYzXSt5W1U+PjYmNjNdK3lbNjMmVV19ZnVuY3Rpb24gTChVLFcsWSl7Zm9yKHZhciBlZT1bXSxKPVc7SjxZO0orPTMpZWUucHVzaChOKChVW0pdPDwxNiYxNjcxMTY4MCkrKFVbSisxXTw8OCY2NTI4MCkrKDI1NSZVW0orMl0p''@;'; put 'put ''KSk7cmV0dXJuIGVlLmpvaW4oIiIpfUlbNDVdPTYyLElbOTVdPTYzfSwzNTUwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoeCxDKXtpZigheCl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKHgs''@;'; put 'put ''Qyl7eC5zdXBlcl89Qzt2YXIgVD1mdW5jdGlvbigpe307VC5wcm90b3R5cGU9Qy5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IFQseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5jdGlvbiB3KHgsQyxUKXtpZih3LmlzQk4oeCkpcmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29y''@;'; put 'put ''ZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXgmJigoImxlIj09PUN8fCJiZSI9PT1DKSYmKFQ9QyxDPTEwKSx0aGlzLl9pbml0KHh8fDAsQ3x8MTAsVHx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcu''@;'; put 'put ''d29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKHgsQyl7dmFyIFQ9eC5jaGFyQ29kZUF0KEMpO3JldHVybiBUPj00OCYmVDw9NTc/VC00ODpUPj02''@;'; put 'put ''NSYmVDw9NzA/VC01NTpUPj05NyYmVDw9MTAyP1QtODc6dm9pZCBnKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3gpfWZ1bmN0aW9uIE8oeCxDLFQpe3ZhciBIPUYoeCxUKTtyZXR1cm4gVC0xPj1DJiYoSHw9Rih4LFQtMSk8PDQpLEh9ZnVuY3Rpb24geih4LEMsVCxIKXtmb3IodmFyIGo9''@;'; put 'put ''MCxFPTAsbT1NYXRoLm1pbih4Lmxlbmd0aCxUKSxBPUM7QTxtO0ErKyl7dmFyIGFlPXguY2hhckNvZGVBdChBKS00ODtqKj1ILEU9YWU+PTQ5P2FlLTQ5KzEwOmFlPj0xNz9hZS0xNysxMDphZSxnKGFlPj0wJiZFPEgsIkludmFsaWQgY2hhcmFjdGVyIiksais9RX1yZXR1cm4gan1mdW5jdGlv''@;'; put 'put ''biBOKHgsQyl7eC53b3Jkcz1DLndvcmRzLHgubGVuZ3RoPUMubGVuZ3RoLHgubmVnYXRpdmU9Qy5uZWdhdGl2ZSx4LnJlZD1DLnJlZH1pZih3LmlzQk49ZnVuY3Rpb24oQyl7cmV0dXJuIEMgaW5zdGFuY2VvZiB3fHxudWxsIT09QyYmIm9iamVjdCI9PXR5cGVvZiBDJiZDLmNvbnN0cnVjdG9y''@;'; put 'put ''LndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShDLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk+MD9DOlR9LHcubWluPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPDA/QzpUfSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihDLFQs''@;'; put 'put ''SCl7aWYoIm51bWJlciI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKEMsVCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShDLFQsSCk7ImhleCI9PT1UJiYoVD0xNiksZyhUPT09KDB8VCkmJlQ+PTImJlQ8PTM2KTt2YXIgaj0wOyItIj09''@;'; put 'put ''PShDPUMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoaisrLHRoaXMubmVnYXRpdmU9MSksajxDLmxlbmd0aCYmKDE2PT09VD90aGlzLl9wYXJzZUhleChDLGosSCk6KHRoaXMuX3BhcnNlQmFzZShDLFQsaiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJy''@;'; put 'put ''YXkoKSxULEgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKEMsVCxIKXtDPDAmJih0aGlzLm5lZ2F0aXZlPTEsQz0tQyksQzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQ10sdGhpcy5sZW5ndGg9MSk6Qzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2''@;'; put 'put ''NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKEM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0Fy''@;'; put 'put ''cmF5KCksVCxIKX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihDLFQsSCl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMubGVuZ3RoKSxDLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChDLmxlbmd0''@;'; put 'put ''aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBFLG0sQT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTEsRT0wO2o+PTA7ai09Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENb''@;'; put 'put ''ai0xXTw8OHxDW2otMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKGo9MCxFPTA7ajxDLmxlbmd0aDtqKz0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqKzFd''@;'; put 'put ''PDw4fENbaisyXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihDLFQsSCl7dGhpcy5sZW5ndGg9TWF0aC5j''@;'; put 'put ''ZWlsKChDLmxlbmd0aC1UKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBBLEU9MCxtPTA7aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMTtqPj1UO2otPTIpQT1PKEMsVCxqKTw8''@;'; put 'put ''RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7ZWxzZSBmb3Ioaj0oQy5sZW5ndGgtVCklMj09MD9UKzE6VDtqPEMubGVuZ3RoO2orPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+''@;'; put 'put ''PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihDLFQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxFPTE7RTw9NjcxMDg4NjM7RSo9VClqKys7ai0t''@;'; put 'put ''LEU9RS9UfDA7Zm9yKHZhciBtPUMubGVuZ3RoLUgsQT1tJWosYWU9TWF0aC5taW4obSxtLUEpK0gsdGU9MCxzZT1IO3NlPGFlO3NlKz1qKXRlPXooQyxzZSxzZStqLFQpLHRoaXMuaW11bG4oRSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRk''@;'; put 'put ''bih0ZSk7aWYoMCE9PUEpe3ZhciB3ZT0xO2Zvcih0ZT16KEMsc2UsQy5sZW5ndGgsVCksc2U9MDtzZTxBO3NlKyspd2UqPVQ7dGhpcy5pbXVsbih3ZSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSl9dGhpcy5fc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuY29weT1mdW5jdGlvbihDKXtDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspQy53b3Jkc1tUXT10aGlzLndvcmRzW1RdO0MubGVuZ3RoPXRoaXMubGVuZ3RoLEMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxDLnJlZD10''@;'; put 'put ''aGlzLnJlZH0sdy5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oQyl7TihDLHRoaXMpfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoQyksQ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVu''@;'; put 'put ''Z3RoPEM7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24o''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7dy5wcm90b3R5''@;'; put 'put ''cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09TH1jYXRjaHt3LnByb3RvdHlwZS5pbnNwZWN0PUx9ZWxzZSB3LnByb3RvdHlwZS5pbnNwZWN0PUw7ZnVuY3Rpb24gTCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygx''@;'; put 'put ''NikrIj4ifXZhciBLPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1''@;'; put 'put ''LDUsNV0sVz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1''@;'; put 'put ''ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZSh4LEMsVCl7''@;'; put 'put ''VC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXngubmVnYXRpdmU7dmFyIEg9eC5sZW5ndGgrQy5sZW5ndGh8MDtULmxlbmd0aD1ILEg9SC0xfDA7dmFyIGo9MHx4LndvcmRzWzBdLEU9MHxDLndvcmRzWzBdLG09aipFLGFlPW0vNjcxMDg4NjR8MDtULndvcmRzWzBdPTY3MTA4ODYzJm07Zm9yKHZhciB0''@;'; put 'put ''ZT0xO3RlPEg7dGUrKyl7Zm9yKHZhciBzZT1hZT4+PjI2LHdlPTY3MTA4ODYzJmFlLFVlPU1hdGgubWluKHRlLEMubGVuZ3RoLTEpLEplPU1hdGgubWF4KDAsdGUteC5sZW5ndGgrMSk7SmU8PVVlO0plKyspc2UrPShtPShqPTB8eC53b3Jkc1t0ZS1KZXwwXSkqKEU9MHxDLndvcmRzW0plXSkr''@;'; put 'put ''d2UpLzY3MTA4ODY0fDAsd2U9NjcxMDg4NjMmbTtULndvcmRzW3RlXT0wfHdlLGFlPTB8c2V9cmV0dXJuIDAhPT1hZT9ULndvcmRzW3RlXT0wfGFlOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihDLFQpe3ZhciBIO2lmKFQ9MHxUfHwxLDE2PT09''@;'; put 'put ''KEM9Q3x8MTApfHwiaGV4Ij09PUMpe0g9IiI7Zm9yKHZhciBqPTAsRT0wLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9dGhpcy53b3Jkc1ttXSxhZT0oMTY3NzcyMTUmKEE8PGp8RSkpLnRvU3RyaW5nKDE2KTtFPUE+Pj4yNC1qJjE2Nzc3MjE1LChqKz0yKT49MjYmJihqLT0yNixtLS0p''@;'; put 'put ''LEg9MCE9PUV8fG0hPT10aGlzLmxlbmd0aC0xP0tbNi1hZS5sZW5ndGhdK2FlK0g6YWUrSH1mb3IoMCE9PUUmJihIPUUudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihDPT09KDB8QykmJkM+PTIm''@;'; put 'put ''JkM8PTM2KXt2YXIgdGU9VVtDXSxzZT1XW0NdO0g9IiI7dmFyIHdlPXRoaXMuY2xvbmUoKTtmb3Iod2UubmVnYXRpdmU9MDshd2UuaXNaZXJvKCk7KXt2YXIgVWU9d2UubW9kcm4oc2UpLnRvU3RyaW5nKEMpO0g9KHdlPXdlLmlkaXZuKHNlKSkuaXNaZXJvKCk/VWUrSDpLW3RlLVVlLmxlbmd0''@;'; put 'put ''aF0rVWUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIEM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP0MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9DKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+''@;'; put 'put ''MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LUM6Q30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LFAmJih3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5j''@;'; put 'put ''dGlvbihDLFQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKFAsQyxUKX0pLHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxDLFQpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihDLFQsSCl7dGhpcy5fc3RyaXAo''@;'; put 'put ''KTt2YXIgaj10aGlzLmJ5dGVMZW5ndGgoKSxFPUh8fE1hdGgubWF4KDEsaik7ZyhqPD1FLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhFPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBtPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuYWxsb2NV''@;'; put 'put ''bnNhZmU/Qy5hbGxvY1Vuc2FmZShUKTpuZXcgQyhUKX0oQyxFKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PVQ/IkxFIjoiQkUiKV0obSxqKSxtfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MCxFPTAsbT0wO0U8dGhp''@;'; put 'put ''cy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tIKytdPTI1NSZBLEg8Qy5sZW5ndGgmJihDW0grK109QT4+OCYyNTUpLEg8Qy5sZW5ndGgmJihDW0grK109QT4+MTYmMjU1KSw2PT09bT8oSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4yNCYyNTUpLGo9MCxtPTApOihqPUE+''@;'; put 'put ''Pj4yNCxtKz0yKX1pZihIPEMubGVuZ3RoKWZvcihDW0grK109ajtIPEMubGVuZ3RoOylDW0grK109MH0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9Qy5sZW5ndGgtMSxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53''@;'; put 'put ''b3Jkc1tFXTw8bXxqO0NbSC0tXT0yNTUmQSxIPj0wJiYoQ1tILS1dPUE+PjgmMjU1KSxIPj0wJiYoQ1tILS1dPUE+PjE2JjI1NSksNj09PW0/KEg+PTAmJihDW0gtLV09QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSD49MClmb3IoQ1tILS1dPWo7SD49MDspQ1tILS1d''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihDKXtyZXR1cm4gMzItTWF0aC5jbHozMihDKX06ZnVuY3Rpb24oQyl7dmFyIFQ9QyxIPTA7cmV0dXJuIFQ+PTQwOTYmJihIKz0xMyxUPj4+PTEzKSxUPj02NCYmKEgrPTcsVD4+Pj03KSxUPj04JiYoSCs9NCxU''@;'; put 'put ''Pj4+PTQpLFQ+PTImJihIKz0yLFQ+Pj49MiksSCtUfSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oQyl7aWYoMD09PUMpcmV0dXJuIDI2O3ZhciBUPUMsSD0wO3JldHVybiA4MTkxJlR8fChIKz0xMyxUPj4+PTEzKSwxMjcmVHx8KEgrPTcsVD4+Pj03KSwxNSZUfHwoSCs9NCxUPj4+''@;'; put 'put ''PTQpLDMmVHx8KEgrPTIsVD4+Pj0yKSwxJlR8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0''@;'; put 'put ''cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3''@;'; put 'put ''b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29y''@;'; put 'put ''ZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5l''@;'; put 'put ''Z2F0aXZlKSksdGhpcy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMu''@;'; put 'put ''d29yZHNbSF0mQy53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25l''@;'; put 'put ''KCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtp''@;'; put 'put ''Zih0aGlzIT09VClmb3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkp''@;'; put 'put ''LHRoaXMuaXV4b3IoQyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMu''@;'; put 'put ''bGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0t''@;'; put 'put ''O2Zvcih2YXIgaj0wO2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6''@;'; put 'put ''dGhpcy53b3Jkc1tIXSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVe''@;'; put 'put ''PTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMp''@;'; put 'put ''O2Zvcih2YXIgRT0wLG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1tt''@;'; put 'put ''XSkrRSksRT1UPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmFkZD1mdW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LFQ9Qy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9''@;'; put 'put ''dGhpcy5pYWRkKEMpO3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09''@;'; put 'put ''PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0''@;'; put 'put ''aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNb''@;'; put 'put ''QV09ai53b3Jkc1tBXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1''@;'; put 'put ''bmN0aW9uKEMsVCxIKXt2YXIgYWUsdGUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLHdlPTB8alswXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxqWzFdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfGpbMl0semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8alsz''@;'; put 'put ''XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxqWzRdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfGpbNV0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8als2XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxqWzddLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfGpbOF0sSGU9''@;'; put 'put ''ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8als5XSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxFWzBdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfEVbMV0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8RVsyXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxFWzNdLHN0PTgxOTEm''@;'; put 'put ''Um4sVXQ9Um4+Pj4xMyxyaT0wfEVbNF0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8RVs1XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxFWzZdLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfEVbN10sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8RVs4XSxYdD04MTkxJklpLGVu''@;'; put 'put ''PUlpPj4+MTMsdWE9MHxFWzldLEVpPTgxOTEmdWEsdnI9dWE+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KEErKGFlPU1hdGguaW11bChVZSxRdCkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChVZSxzbikpK01hdGguaW11bChK''@;'; put 'put ''ZSxRdCl8MCkpPDwxMyl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLHNuKSkrKHRlPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeGUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeGUsc24pKStNYXRoLmltdWwodmUsUXQpfDAsc2U9TWF0aC5pbXVsKHZlLHNuKTt2''@;'; put 'put ''YXIgJGk9KEErKGFlPWFlK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmdCl8MCkrKHRlPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02''@;'; put 'put ''NzEwODg2MyxhZT1NYXRoLmltdWwoemUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoemUsc24pKStNYXRoLmltdWwoRGUsUXQpfDAsc2U9TWF0aC5pbXVsKERlLHNuKSxhZT1hZStNYXRoLmltdWwoeGUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bCh2ZSxmdCl8MDt2YXIgZWk9KEErKGFlPWFlK01hdGguaW11bChVZSxXdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKHRl''@;'; put 'put ''Pj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoT2UsUXQpLHRlPSh0ZT1NYXRoLmltdWwoT2Usc24pKStNYXRoLmltdWwoSWUsUXQpfDAsc2U9TWF0aC5pbXVsKEllLHNuKSxhZT1hZStNYXRoLmltdWwoemUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh6''@;'; put 'put ''ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11bChEZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxBdCl8MDt2YXIgUXI9KEErKGFl''@;'; put 'put ''PWFlK01hdGguaW11bChVZSxzdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxVdCl8MCkrKHRlPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxhZT1N''@;'; put 'put ''YXRoLmltdWwoa2UsUXQpLHRlPSh0ZT1NYXRoLmltdWwoa2Usc24pKStNYXRoLmltdWwoQWUsUXQpfDAsc2U9TWF0aC5pbXVsKEFlLHNuKSxhZT1hZStNYXRoLmltdWwoT2UsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bChJZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoemUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxVdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHZlLHN0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxVdCl8MDt2YXIgVmk9KEErKGFlPWFlK01hdGguaW11bChVZSxXZSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01h''@;'; put 'put ''dGguaW11bChKZSxUdCl8MCkrKHRlPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxhZT1NYXRoLmltdWwobnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwobnQsc24pKStNYXRoLmltdWwoUWUsUXQpfDAsc2U9TWF0aC5pbXVsKFFlLHNuKSxhZT1hZStNYXRoLmltdWwoa2UsaG4pfDAs''@;'; put 'put ''dGU9KHRlPXRlK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLHNlPXNlK01hdGguaW11bChBZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoT2UsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLHNlPXNlK01hdGguaW11bChJ''@;'; put 'put ''ZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoemUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01hdGguaW11bChEZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZlLFdlKXwwLHNlPXNlK01hdGguaW11bCh2ZSxUdCl8MDt2YXIgTmk9KEErKGFlPWFlK01hdGguaW11bChVZSxodCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11''@;'; put 'put ''bChKZSx4dCl8MCkrKHRlPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeXQsc24pKStNYXRoLmltdWwoTXQsUXQpfDAsc2U9TWF0aC5pbXVsKE10LHNuKSxhZT1hZStNYXRoLmltdWwobnQsaG4pfDAsdGU9KHRl''@;'; put 'put ''PXRlK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLHNlPXNlK01hdGguaW11bChBZSxBdCl8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwoT2Usc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLHNlPXNlK01hdGguaW11bChJZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoemUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFdlKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSx4dCl8MDt2YXIgRGE9KEErKGFlPWFlK01hdGguaW11bChVZSxy''@;'; put 'put ''bil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6dCl8MCkrKHRlPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoaXQsUXQpLHRl''@;'; put 'put ''PSh0ZT1NYXRoLmltdWwoaXQsc24pKStNYXRoLmltdWwoJGUsUXQpfDAsc2U9TWF0aC5pbXVsKCRlLHNuKSxhZT1hZStNYXRoLmltdWwoeXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLHNlPXNlK01hdGguaW11bChNdCxmdCl8MCxhZT1h''@;'; put 'put ''ZStNYXRoLmltdWwobnQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoa2Usc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0''@;'; put 'put ''KXwwLHNlPXNlK01hdGguaW11bChBZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoT2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLHNlPXNlK01hdGguaW11bChJZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoemUsaHQpfDAsdGU9KHRlPXRlK01h''@;'; put 'put ''dGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLHNlPXNlK01hdGguaW11bChEZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoeGUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLHNlPXNlK01hdGguaW11bCh2ZSx6dCl8MDt2YXIg''@;'; put 'put ''THI9KEErKGFlPWFlK01hdGguaW11bChVZSxjbil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmbil8MCkrKHRlPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEw''@;'; put 'put ''ODg2MyxhZT1NYXRoLmltdWwoSGUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsc2U9TWF0aC5pbXVsKHV0LHNuKSxhZT1hZStNYXRoLmltdWwoaXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bCgkZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLHNlPXNlK01hdGguaW11bChNdCxBdCl8MCxhZT1hZStNYXRoLmltdWwobnQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11''@;'; put 'put ''bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLHNlPXNlK01hdGguaW11bChRZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLHNlPXNlK01hdGguaW11bChBZSxUdCl8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoT2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLHNlPXNlK01hdGguaW11bChJZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoemUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bChEZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoeGUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxmbil8MDt2YXIgV2k9KEErKGFlPWFlK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxlbil8MCkrKHRlPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsUXQpLHRlPSh0ZT1NYXRoLmlt''@;'; put 'put ''dWwoUnQsc24pKStNYXRoLmltdWwoUHQsUXQpfDAsc2U9TWF0aC5pbXVsKFB0LHNuKSxhZT1hZStNYXRoLmltdWwoSGUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmdCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmdCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''aXQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLHNlPXNlK01hdGguaW11bCgkZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bChNdCxVdCl8MCxhZT1hZStNYXRoLmltdWwobnQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx4''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLHNlPXNlK01hdGguaW11bChBZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoT2Uscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLHNlPXNlK01hdGguaW11bChJZSx6dCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''emUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLHNlPXNlK01hdGguaW11bChEZSxmbil8MCxhZT1hZStNYXRoLmltdWwoeGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bCh2ZSxlbil8MDt2YXIgcGE9KEErKGFlPWFlK01hdGguaW11bChVZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHZyKXwwKStNYXRoLmltdWwoSmUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx2cil8MCkrKHRlPj4+MTMpfDAp''@;'; put 'put ''KyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsaG4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZnQpKStNYXRoLmltdWwoUHQsaG4pfDAsc2U9TWF0aC5pbXVsKFB0LGZ0KSxhZT1hZStNYXRoLmltdWwoSGUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxBdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHV0LFd0KXwwLHNlPXNlK01hdGguaW11bCh1dCxBdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLHNlPXNlK01hdGguaW11bCgkZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsV2Up''@;'; put 'put ''fDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLHNlPXNlK01hdGguaW11bChNdCxUdCl8MCxhZT1hZStNYXRoLmltdWwobnQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChRZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoa2Uscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLHNlPXNlK01hdGguaW11bChBZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoT2UsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEllLGNuKXwwLHNlPXNlK01hdGguaW11bChJZSxmbil8MCxhZT1hZStNYXRoLmltdWwoemUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwLHNlPXNlK01hdGguaW11bChEZSxlbil8MDt2YXIgUW49KEErKGFlPWFlK01hdGgu''@;'; put 'put ''aW11bCh4ZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLHZyKXwwKStNYXRoLmltdWwodmUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh2ZSx2cil8MCkrKHRlPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxhZT1NYXRoLmltdWwo''@;'; put 'put ''UnQsV3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsQXQpKStNYXRoLmltdWwoUHQsV3QpfDAsc2U9TWF0aC5pbXVsKFB0LEF0KSxhZT1hZStNYXRoLmltdWwoSGUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxVdCl8MCkrTWF0aC5pbXVsKHV0LHN0KXwwLHNlPXNlK01hdGguaW11bCh1dCxV''@;'; put 'put ''dCl8MCxhZT1hZStNYXRoLmltdWwoaXQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLHNlPXNlK01hdGguaW11bCgkZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKE10LGh0KXwwLHNlPXNlK01hdGguaW11bChNdCx4dCl8MCxhZT1hZStNYXRoLmltdWwobnQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoa2UsY24pfDAsdGU9''@;'; put 'put ''KHRlPXRlK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLHNlPXNlK01hdGguaW11bChBZSxmbil8MCxhZT1hZStNYXRoLmltdWwoT2UsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwLHNlPXNlK01hdGguaW11bChJZSxl''@;'; put 'put ''bil8MDt2YXIgbGE9KEErKGFlPWFlK01hdGguaW11bCh6ZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHplLHZyKXwwKStNYXRoLmltdWwoRGUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSx2cil8MCkrKHRlPj4+MTMpfDApKyhsYT4+PjI2KXww''@;'; put 'put ''LGxhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsc3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVXQpKStNYXRoLmltdWwoUHQsc3QpfDAsc2U9TWF0aC5pbXVsKFB0LFV0KSxhZT1hZStNYXRoLmltdWwoSGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxUdCl8MCkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LFdlKXwwLHNlPXNlK01hdGguaW11bCh1dCxUdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLHNlPXNlK01hdGguaW11bCgkZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoeXQscm4pfDAsdGU9KHRlPXRl''@;'; put 'put ''K01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLHNlPXNlK01hdGguaW11bChNdCx6dCl8MCxhZT1hZStNYXRoLmltdWwobnQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLHNlPXNlK01hdGguaW11bChRZSxmbil8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoa2UsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwLHNlPXNlK01hdGguaW11bChBZSxlbil8MDt2YXIgeWE9KEErKGFlPWFlK01hdGguaW11bChPZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KE9lLHZyKXwwKStNYXRoLmltdWwoSWUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChJZSx2cil8MCkrKHRlPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsV2UpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVHQpKStNYXRoLmltdWwoUHQs''@;'; put 'put ''V2UpfDAsc2U9TWF0aC5pbXVsKFB0LFR0KSxhZT1hZStNYXRoLmltdWwoSGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx4dCl8MCkrTWF0aC5pbXVsKHV0LGh0KXwwLHNlPXNlK01hdGguaW11bCh1dCx4dCl8MCxhZT1hZStNYXRoLmltdWwoaXQscm4pfDAsdGU9KHRlPXRlK01hdGgu''@;'; put 'put ''aW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLHNlPXNlK01hdGguaW11bCgkZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoeXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLHNlPXNlK01hdGguaW11bChNdCxmbil8MCxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwobnQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwLHNlPXNlK01hdGguaW11bChRZSxlbil8MDt2YXIgTGE9KEErKGFlPWFlK01hdGguaW11bChrZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHZy''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQWUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChBZSx2cil8MCkrKHRlPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsaHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQseHQpKStNYXRoLmltdWwoUHQsaHQpfDAs''@;'; put 'put ''c2U9TWF0aC5pbXVsKFB0LHh0KSxhZT1hZStNYXRoLmltdWwoSGUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx6dCl8MCkrTWF0aC5pbXVsKHV0LHJuKXwwLHNlPXNlK01hdGguaW11bCh1dCx6dCl8MCxhZT1hZStNYXRoLmltdWwoaXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChp''@;'; put 'put ''dCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLHNlPXNlK01hdGguaW11bCgkZSxmbil8MCxhZT1hZStNYXRoLmltdWwoeXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwLHNlPXNlK01hdGguaW11bChNdCxlbil8MDt2YXIgRmE9KEErKGFl''@;'; put 'put ''PWFlK01hdGguaW11bChudCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHZyKXwwKStNYXRoLmltdWwoUWUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSx2cil8MCkrKHRlPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2MyxhZT1N''@;'; put 'put ''YXRoLmltdWwoUnQscm4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsenQpKStNYXRoLmltdWwoUHQscm4pfDAsc2U9TWF0aC5pbXVsKFB0LHp0KSxhZT1hZStNYXRoLmltdWwoSGUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmbil8MCkrTWF0aC5pbXVsKHV0LGNuKXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bCh1dCxmbil8MCxhZT1hZStNYXRoLmltdWwoaXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwLHNlPXNlK01hdGguaW11bCgkZSxlbil8MDt2YXIgdGk9KEErKGFlPWFlK01hdGguaW11bCh5dCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0o''@;'; put 'put ''dGU9dGUrTWF0aC5pbXVsKHl0LHZyKXwwKStNYXRoLmltdWwoTXQsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChNdCx2cil8MCkrKHRlPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsY24pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZm4p''@;'; put 'put ''KStNYXRoLmltdWwoUHQsY24pfDAsc2U9TWF0aC5pbXVsKFB0LGZuKSxhZT1hZStNYXRoLmltdWwoSGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKHV0LFh0KXwwLHNlPXNlK01hdGguaW11bCh1dCxlbil8MDt2YXIgZ289KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChpdCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHZyKXwwKStNYXRoLmltdWwoJGUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCgkZSx2cil8MCkrKHRlPj4+MTMpfDApKyhnbz4+PjI2KXwwLGdvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQs''@;'; put 'put ''WHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsZW4pKStNYXRoLmltdWwoUHQsWHQpfDAsc2U9TWF0aC5pbXVsKFB0LGVuKTt2YXIgTnM9KEErKGFlPWFlK01hdGguaW11bChIZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHZyKXwwKStNYXRoLmltdWwodXQsRWkpfDAp''@;'; put 'put ''KTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh1dCx2cil8MCkrKHRlPj4+MTMpfDApKyhOcz4+PjI2KXwwLE5zJj02NzEwODg2Mzt2YXIgYmw9KEErKGFlPU1hdGguaW11bChSdCxFaSkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChSdCx2cikpK01hdGguaW11bChQdCxFaSl8MCkp''@;'; put 'put ''PDwxMyl8MDtyZXR1cm4gQT0oKHNlPU1hdGguaW11bChQdCx2cikpKyh0ZT4+PjEzKXwwKSsoYmw+Pj4yNil8MCxibCY9NjcxMDg4NjMsbVswXT1XbixtWzFdPSRpLG1bMl09ZWksbVszXT1RcixtWzRdPVZpLG1bNV09TmksbVs2XT1EYSxtWzddPUxyLG1bOF09V2ksbVs5XT1wYSxtWzEwXT1R''@;'; put 'put ''bixtWzExXT1sYSxtWzEyXT15YSxtWzEzXT1MYSxtWzE0XT1GYSxtWzE1XT10aSxtWzE2XT1nbyxtWzE3XT1OcyxtWzE4XT1ibCwwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gbmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3Ro''@;'; put 'put ''PXgubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSx0ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7dGU8PWFlO3RlKyspe3ZhciBKZT0o''@;'; put 'put ''MHx4LndvcmRzW0UtdGVdKSooMHxDLndvcmRzW3RlXSksb3Q9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYob3Q9b3QrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsob3Q+Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/''@;'; put 'put ''VC53b3Jkc1tFXT1IOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIG5lKHgsQyxUKX1mdW5jdGlvbiBsZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhp''@;'; put 'put ''cy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P25lKHRoaXMsQyxUKTppZSh0aGlzLEMsVCl9LGxlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1u''@;'; put 'put ''ZXcgQXJyYXkoQyksSD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9''@;'; put 'put ''MDtFPFQ7RSsrKWp8PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sbGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sbGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihD''@;'; put 'put ''LFQsSCxqLEUsbSl7dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLHRlPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipNYXRoLlBJL2FlKSx3ZT0wO3dlPEU7d2UrPWFlKWZvcih2YXIgVWU9dGUsSmU9c2Us''@;'; put 'put ''b3Q9MDtvdDxBO290Kyspe3ZhciB4ZT1IW3dlK290XSx2ZT1qW3dlK290XSxYZT1IW3dlK290K0FdLHplPWpbd2Urb3QrQV0sRGU9VWUqWGUtSmUqemU7emU9VWUqemUrSmUqWGUsSFt3ZStvdF09eGUrKFhlPURlKSxqW3dlK290XT12ZSt6ZSxIW3dlK290K0FdPXhlLVhlLGpbd2Urb3QrQV09''@;'; put 'put ''dmUtemUsb3QhPT1hZSYmKERlPXRlKlVlLXNlKkplLEplPXRlKkplK3NlKlVlLFVlPURlKX19LGxlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEr''@;'; put 'put ''an0sbGUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LGxlLnByb3RvdHlwZS5ub3Jt''@;'; put 'put ''YWxpemUxM2I9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSxsZS5w''@;'; put 'put ''cm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtnKDA9PT1FKSxnKCEoLTgxOTImRSkp''@;'; put 'put ''fSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10''@;'; put 'put ''aGlzLm1ha2VSQlQoaiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksYWU9bmV3IEFycmF5KGopLHRlPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksd2U9bmV3IEFycmF5KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihD''@;'; put 'put ''LndvcmRzLEMubGVuZ3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLHRlLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSx3ZSxVZSxqLEUpO2Zvcih2YXIgb3Q9MDtvdDxqO290Kyspe3ZhciB4ZT1hZVtvdF0qd2Vbb3Rd''@;'; put 'put ''LXRlW290XSpVZVtvdF07dGVbb3RdPWFlW290XSpVZVtvdF0rdGVbb3RdKndlW290XSxhZVtvdF09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLHRlLGopLHRoaXMudHJhbnNmb3JtKGFlLHRlLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEpl''@;'; put 'put ''LGopLEgubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5n''@;'; put 'put ''dGgpLHRoaXMubXVsVG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndv''@;'; put 'put ''cmRzW2pdKSpDLG09KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUubXVsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9''@;'; put 'put ''LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlvbiBxKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNbVF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIG5ldyB3KDEpO2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3RoJiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxULmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJuIEh9LHcucHJv''@;'; put 'put ''dG90eXBlLml1c2hsbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYoMCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tF''@;'; put 'put ''XSZqO3RoaXMud29yZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxtLG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tFXTtmb3IoRT0w''@;'; put 'put ''O0U8SDtFKyspdGhpcy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihD''@;'; put 'put ''LFQsSCl7dmFyIGo7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02NzEwODg2M142NzEwODg2Mz4+PkU8PEUsYWU9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxqKSxhZSl7Zm9y''@;'; put 'put ''KHZhciB0ZT0wO3RlPG07dGUrKylhZS53b3Jkc1t0ZV09dGhpcy53b3Jkc1t0ZV07YWUubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0sdGU9MDt0ZTx0aGlzLmxlbmd0aDt0ZSsrKXRoaXMud29yZHNbdGVdPXRoaXMud29yZHNbdGUrbV07ZWxz''@;'; put 'put ''ZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtmb3IodGU9dGhpcy5sZW5ndGgtMTt0ZT49MCYmKDAhPT1zZXx8dGU+PWopO3RlLS0pe3ZhciB3ZT0wfHRoaXMud29yZHNbdGVdO3RoaXMud29yZHNbdGVdPXNlPDwyNi1FfHdlPj4+RSxzZT13ZSZBfXJldHVybiBhZSYm''@;'; put 'put ''MCE9PXNlJiYoYWUud29yZHNbYWUubGVuZ3RoKytdPXNlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlz''@;'; put 'put ''Lml1c2hybihDLFQsSCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oQyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMt''@;'; put 'put ''VCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImlt''@;'; put 'put ''YXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlQ8''@;'; put 'put ''PFQpLHRoaXMuX3N0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpLEM8MD90aGlzLmlz''@;'; put 'put ''dWJuKC1DKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsdGhpcyk6dGhpcy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09dGhpcy5sZW5n''@;'; put 'put ''dGgtMT90aGlzLndvcmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihDKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDAp''@;'; put 'put ''cmV0dXJuIHRoaXMuaWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNb''@;'; put 'put ''MF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEwODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFk''@;'; put 'put ''ZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihDKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9leHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKyspe209KDB8dGhp''@;'; put 'put ''cy53b3Jkc1tFK0hdKStBO3ZhciBhZT0oMHxDLndvcmRzW0VdKSpUO0E9KChtLT02NzEwODg2MyZhZSk+PjI2KS0oYWUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hdKStBKT4+MjYs''@;'; put 'put ''dGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKGcoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgwfHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0dXJuIHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGouaXVzaGxuKEgp''@;'; put 'put ''LG09MHxFLndvcmRzW0UubGVuZ3RoLTFdKTt2YXIgdGUsYWU9ai5sZW5ndGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsodGU9bmV3IHcobnVsbCkpLmxlbmd0aD1hZSsxLHRlLndvcmRzPW5ldyBBcnJheSh0ZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTx0ZS5sZW5ndGg7c2UrKyl0ZS53b3Jk''@;'; put 'put ''c1tzZV09MH12YXIgd2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEsYWUpOzA9PT13ZS5uZWdhdGl2ZSYmKGo9d2UsdGUmJih0ZS53b3Jkc1thZV09MSkpO2Zvcih2YXIgVWU9YWUtMTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtVZV0pKygwfGou''@;'; put 'put ''d29yZHNbRS5sZW5ndGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9tfDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVnYXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0aXZlXj0xKTt0''@;'; put 'put ''ZSYmKHRlLndvcmRzW1VlXT1KZSl9cmV0dXJuIHRlJiZ0ZS5fc3RyaXAoKSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6dGV8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKCFDLmlzWmVybygpKSx0''@;'; put 'put ''aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5l''@;'; put 'put ''Z2F0aXZlJiZFLmlhZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMubmVnYXRpdmU/''@;'; put 'put ''KG09dGhpcy5uZWcoKS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlz''@;'; put 'put ''fToxPT09Qy5sZW5ndGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kcm4o''@;'; put 'put ''Qy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxtfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCEx''@;'; put 'put ''KS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2O3ZhciBIPTAh''@;'; put 'put ''PT1ULmRpdi5uZWdhdGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5tb2Rybj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlqPShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5cGUubW9kbj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKzY3MTA4''@;'; put 'put ''ODY0Kkg7dGhpcy53b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhpcy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihDKXtnKDA9''@;'; put 'put ''PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksYWU9MDtULmlzRXZlbigpJiZILmlzRXZl''@;'; put 'put ''bigpOylULml1c2hybigxKSxILml1c2hybigxKSwrK2FlO2Zvcih2YXIgdGU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgd2U9MCxVZT0xOyEoVC53b3Jkc1swXSZVZSkmJndlPDI2Oysrd2UsVWU8PD0xKTtpZih3ZT4wKWZvcihULml1c2hybih3ZSk7d2Ut''@;'; put 'put ''LSA+MDspKGouaXNPZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZCh0ZSksRS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLG90PTE7IShILndvcmRzWzBdJm90KSYmSmU8MjY7KytKZSxvdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEplKTtKZS0tID4w''@;'; put 'put ''OykobS5pc09kZCgpfHxBLmlzT2RkKCkpJiYobS5pYWRkKHRlKSxBLmlzdWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihtKSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJue2E6bSxiOkEs''@;'; put 'put ''Z2NkOkguaXVzaGxuKGFlKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgd2UsVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSks''@;'; put 'put ''RT1uZXcgdygwKSxtPUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIEE9MCxhZT0xOyEoVC53b3Jkc1swXSZhZSkmJkE8MjY7KytBLGFlPDw9MSk7aWYoQT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGouaXVzaHJuKDEp''@;'; put 'put ''O2Zvcih2YXIgdGU9MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJnRlPDI2OysrdGUsc2U8PD0xKTtpZih0ZT4wKWZvcihILml1c2hybih0ZSk7dGUtLSA+MDspRS5pc09kZCgpJiZFLmlhZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkpOihILmlzdWIo''@;'; put 'put ''VCksRS5pc3ViKGopKX1yZXR1cm4od2U9MD09PVQuY21wbigxKT9qOkUpLmNtcG4oMCk8MCYmd2UuaWFkZChDKSx3ZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIg''@;'; put 'put ''VD10aGlzLmNsb25lKCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9yKDtILmlzRXZl''@;'; put 'put ''bigpOylILml1c2hybigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3ZhciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZWdj''@;'; put 'put ''ZChDKS5hLnVtb2QoQyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53b3Jkc1swXSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zv''@;'; put 'put ''cih2YXIgRT1qLG09SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmVClyZXR1''@;'; put 'put ''cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3''@;'; put 'put ''LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8''@;'; put 'put ''LVQ6VH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlzLmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxFPTB8''@;'; put 'put ''Qy53b3Jkc1tIXTtpZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTticmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcChDKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmx0PWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IHAoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJl''@;'; put 'put ''ZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcucHJvdG90eXBl''@;'; put 'put ''LmZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZFN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZE11bD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQmJiFDLnJlZCwicmVkUG93KG5v''@;'; put 'put ''cm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxDKX07dmFyIG1lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiksdGhpcy5uPXRo''@;'; put 'put ''aXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBTZSgpe19lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gamUoKXtfZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFYoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9u''@;'; put 'put ''IHAoeCl7aWYoInN0cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmltZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIGcoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKHgpe3AuY2Fs''@;'; put 'put ''bCh0aGlzLHgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52''@;'; put 'put ''PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90bXA9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMpe3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5pbXVsSyhUKSku''@;'; put 'put ''aWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxULmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0cmlwKCk6VC5f''@;'; put 'put ''c3RyaXAoKSxUfSxfZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBDLmltdWwodGhpcy5rKX0sQihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Zm9y''@;'; put 'put ''KHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4gQy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3IoVC53b3Jkc1tU''@;'; put 'put ''Lmxlbmd0aCsrXT1tJkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5cGUuaW11bEs9''@;'; put 'put ''ZnVuY3Rpb24oQyl7Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0MubGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0wfEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaisoVC82NzEwODg2''@;'; put 'put ''NHwwKX1yZXR1cm4gMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxlbmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxCKFNlLF9lKSxCKGplLF9lKSxCKFYsX2UpLFYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0wLEg9MDtIPEMu''@;'; put 'put ''bGVuZ3RoO0grKyl7dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5ndGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYobWVbQ10pcmV0dXJuIG1lW0NdO3ZhciBU''@;'; put 'put ''O2lmKCJrMjU2Ij09PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1DKVQ9bmV3IFNlO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyBqZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBWfXJldHVybiBtZVtDXT1ULFR9LHAu''@;'; put 'put ''cHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxwLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihDLFQpe2coIShD''@;'; put 'put ''Lm5lZ2F0aXZlfFQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5wcmltZT90aGlz''@;'; put 'put ''LnByaW1lLmlyZWR1Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0scC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3JldHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0aGlzKX0scC5w''@;'; put 'put ''cm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIo''@;'; put 'put ''QyxUKTt2YXIgSD1DLmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHAucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEgu''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHAucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkxKEMpLHRoaXMuaW1vZChDLnVzaGxuKFQpKX0scC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11bChUKSl9LHAucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMs''@;'; put 'put ''VCksdGhpcy5pbW9kKEMubXVsKFQpKX0scC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0scC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxwLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEMpe2lm''@;'; put 'put ''KEMuaXNaZXJvKCkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0uYW5kbG4oMyk7aWYoZyhUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9MDshai5pc1pl''@;'; put 'put ''cm8oKSYmMD09PWouYW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtnKCFqLmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksYWU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodGU9bmV3IHcoMip0ZSp0ZSku''@;'; put 'put ''dG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHRlLGFlKS5jbXAoQSk7KXRlLnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyh0ZSxqKSx3ZT10aGlzLnBvdyhDLGouYWRkbigxKS5pdXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9yKHZhciBvdD1V''@;'; put 'put ''ZSx4ZT0wOzAhPT1vdC5jbXAobSk7eGUrKylvdD1vdC5yZWRTcXIoKTtnKHhlPEplKTt2YXIgdmU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLXhlLTEpKTt3ZT13ZS5yZWRNdWwodmUpLHNlPXZlLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9eGV9cmV0dXJuIHdlfSxwLnBy''@;'; put 'put ''b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygpKTp0aGlzLmltb2QoVCl9LHAucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4oMSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhpcyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwoaltFLTFdLEMp''@;'; put 'put ''O3ZhciBtPWpbMF0sQT0wLGFlPTAsdGU9VC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXRlJiYodGU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0VdLHdlPXRlLTE7d2U+PTA7d2UtLSl7dmFyIFVlPXNlPj53ZSYxO20hPT1qWzBdJiYobT10aGlzLnNxciht''@;'; put 'put ''KSksMCE9PVVlfHwwIT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrYWV8fDA9PT1FJiYwPT09d2UpJiYobT10aGlzLm11bChtLGpbQV0pLGFlPTAsQT0wKSk6YWU9MH10ZT0yNn1yZXR1cm4gbX0scC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0aGlzLm0pO3Jl''@;'; put 'put ''dHVybiBUPT09Qz9ULmNsb25lKCk6VH0scC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IGIoQyl9LEIoYixwKSxiLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hpZnQpKX0sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVsKHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o''@;'; put 'put ''QyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hy''@;'; put 'put ''bih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygp''@;'; put 'put ''KXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5tdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0''@;'; put 'put ''aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQo''@;'; put 'put ''dGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDk5MzE6KHVlLFgseSk9Pnt2YXIgSTtmdW5jdGlvbiBfKEIpe3RoaXMucmFuZD1CfWlmKHVlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIEl8fChJPW5ldyBfKG51bGwpKSxJLmdlbmVyYXRlKHcpfSx1ZS5leHBvcnRzLlJhbmQ9XyxfLnBy''@;'; put 'put ''b3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmFuZCh3KX0sXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXModyk7Zm9yKHZhciBQPW5ldyBVaW50OEFycmF5KHcpLEY9MDtG''@;'; put 'put ''PFAubGVuZ3RoO0YrKylQW0ZdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIFB9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcp''@;'; put 'put ''O3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0''@;'; put 'put ''UmFuZG9tVmFsdWVzKFApLFB9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBnPXkoOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcucmFu''@;'; put 'put ''ZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIGcucmFuZG9tQnl0ZXModyl9fWNhdGNoe319LDQ0OTc6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKE8pe0kuaXNCdWZm''@;'; put 'put ''ZXIoTyl8fChPPUkuZnJvbShPKSk7Zm9yKHZhciB6PU8ubGVuZ3RoLzR8MCxOPW5ldyBBcnJheSh6KSxMPTA7TDx6O0wrKylOW0xdPU8ucmVhZFVJbnQzMkJFKDQqTCk7cmV0dXJuIE59ZnVuY3Rpb24gZyhPKXtmb3IoOzA8Ty5sZW5ndGg7TysrKU9bMF09MH1mdW5jdGlvbiBCKE8seixOLEws''@;'; put 'put ''Syl7Zm9yKHZhciBsZSxtZSxfZSxUZSxVPU5bMF0sVz1OWzFdLFk9TlsyXSxxPU5bM10sZWU9T1swXV56WzBdLEo9T1sxXV56WzFdLG5lPU9bMl1eelsyXSxpZT1PWzNdXnpbM10sU2U9NCxqZT0xO2plPEs7amUrKylsZT1VW2VlPj4+MjRdXldbSj4+PjE2JjI1NV1eWVtuZT4+PjgmMjU1XV5x''@;'; put 'put ''WzI1NSZpZV1eeltTZSsrXSxtZT1VW0o+Pj4yNF1eV1tuZT4+PjE2JjI1NV1eWVtpZT4+PjgmMjU1XV5xWzI1NSZlZV1eeltTZSsrXSxfZT1VW25lPj4+MjRdXldbaWU+Pj4xNiYyNTVdXllbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltTZSsrXSxUZT1VW2llPj4+MjRdXldbZWU+Pj4xNiYyNTVd''@;'; put 'put ''XllbSj4+PjgmMjU1XV5xWzI1NSZuZV1eeltTZSsrXSxlZT1sZSxKPW1lLG5lPV9lLGllPVRlO3JldHVybiBsZT0oTFtlZT4+PjI0XTw8MjR8TFtKPj4+MTYmMjU1XTw8MTZ8TFtuZT4+PjgmMjU1XTw8OHxMWzI1NSZpZV0pXnpbU2UrK10sbWU9KExbSj4+PjI0XTw8MjR8TFtuZT4+PjE2JjI1''@;'; put 'put ''NV08PDE2fExbaWU+Pj44JjI1NV08PDh8TFsyNTUmZWVdKV56W1NlKytdLF9lPShMW25lPj4+MjRdPDwyNHxMW2llPj4+MTYmMjU1XTw8MTZ8TFtlZT4+PjgmMjU1XTw8OHxMWzI1NSZKXSleeltTZSsrXSxUZT0oTFtpZT4+PjI0XTw8MjR8TFtlZT4+PjE2JjI1NV08PDE2fExbSj4+PjgmMjU1''@;'; put 'put ''XTw8OHxMWzI1NSZuZV0pXnpbU2UrK10sW2xlPj4+PTAsbWU+Pj49MCxfZT4+Pj0wLFRlPj4+PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBPPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspT1t6XT16PDEyOD96PDwxOno8''@;'; put 'put ''PDFeMjgzO2Zvcih2YXIgTj1bXSxMPVtdLEs9W1tdLFtdLFtdLFtdXSxVPVtbXSxbXSxbXSxbXV0sVz0wLFk9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9WV5ZPDwxXlk8PDJeWTw8M15ZPDw0O05bV109ZWU9ZWU+Pj44XjI1NSZlZV45OSxMW2VlXT1XO3ZhciBKPU9bV10sbmU9T1tKXSxpZT1P''@;'; put 'put ''W25lXSxsZT0yNTcqT1tlZV1eMTY4NDMwMDgqZWU7S1swXVtXXT1sZTw8MjR8bGU+Pj44LEtbMV1bV109bGU8PDE2fGxlPj4+MTYsS1syXVtXXT1sZTw8OHxsZT4+PjI0LEtbM11bV109bGUsVVswXVtlZV09KGxlPTE2ODQzMDA5KmllXjY1NTM3Km5lXjI1NypKXjE2ODQzMDA4KlcpPDwyNHxs''@;'; put 'put ''ZT4+PjgsVVsxXVtlZV09bGU8PDE2fGxlPj4+MTYsVVsyXVtlZV09bGU8PDh8bGU+Pj4yNCxVWzNdW2VlXT1sZSwwPT09Vz9XPVk9MTooVz1KXk9bT1tPW2llXkpdXV0sWV49T1tPW1ldXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpMLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpVfX0oKTtmdW5j''@;'; put 'put ''dGlvbiBGKE8pe3RoaXMuX2tleT1fKE8pLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYsRi5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIE89dGhpcy5fa2V5LHo9Ty5sZW5ndGgsTj16KzYsTD00KihOKzEpLEs9W10sVT0wO1U8ejtVKyspS1tVXT1PW1VdO2ZvcihVPXo7VTxMO1UrKyl7dmFyIFc9S1tVLTFdO1Ulej09MD8oVz1QLlNCT1hbKFc9Vzw8OHxXPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2''@;'; put 'put ''fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10sV149d1tVL3p8MF08PDI0KTp6PjYmJlUlej09NCYmKFc9UC5TQk9YW1c+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSksS1tVXT1LW1Utel1eV31mb3Io''@;'; put 'put ''dmFyIFk9W10scT0wO3E8TDtxKyspe3ZhciBlZT1MLXEsSj1LW2VlLShxJTQ/MDo0KV07WVtxXT1xPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+''@;'; put 'put ''Pj44JjI1NV1dXlAuSU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5kcz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9WX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKE8pe3JldHVybiBCKE89XyhPKSx0aGlzLl9r''@;'; put 'put ''ZXlTY2hlZHVsZSxQLlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoTyksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53''@;'; put 'put ''cml0ZVVJbnQzMkJFKHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJbnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihPKXt2YXIgej0oTz1fKE8pKVsxXTtPWzFdPU9bM10sT1szXT16O3ZhciBOPUIoTyx0aGlzLl9pbnZL''@;'; put 'put ''ZXlTY2hlZHVsZSxQLklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTD1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTC53cml0ZVVJbnQzMkJFKE5bMF0sMCksTC53cml0ZVVJbnQzMkJFKE5bM10sNCksTC53cml0ZVVJbnQzMkJFKE5bMl0sOCksTC53cml0ZVVJbnQzMkJF''@;'; put 'put ''KE5bMV0sMTIpLEx9LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7Zyh0aGlzLl9rZXlTY2hlZHVsZSksZyh0aGlzLl9pbnZLZXlTY2hlZHVsZSksZyh0aGlzLl9rZXkpfSx1ZS5leHBvcnRzLkFFUz1GfSw0ODQ4Oih1ZSxYLHkpPT57dmFyIEk9eSg0NDk3KSxfPXkoOTUwOSkuQnVmZmVy''@;'; put 'put ''LGc9eSgxMDI3KSxCPXkoNTcxNyksdz15KDMyODgpLFA9eSg3Mjk1KSxGPXkoNjg1KTtmdW5jdGlvbiBOKEwsSyxVLFcpe2cuY2FsbCh0aGlzKTt2YXIgWT1fLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFkpO3Ro''@;'; put 'put ''aXMuX2doYXNoPW5ldyB3KHEpLFU9ZnVuY3Rpb24geihMLEssVSl7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTC5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwxXSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBXPW5ldyB3KFUpLFk9Sy5sZW5ndGgscT1Z''@;'; put 'put ''JTE2O1cudXBkYXRlKEspLHEmJlcudXBkYXRlKF8uYWxsb2MocT0xNi1xLDApKSxXLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlksSj1fLmFsbG9jKDgpO0oud3JpdGVVSW50QkUoZWUsMCw4KSxXLnVwZGF0ZShKKSxMLl9maW5JRD1XLnN0YXRlO3ZhciBuZT1fLmZyb20oTC5fZmlu''@;'; put 'put ''SUQpO3JldHVybiBGKG5lKSxuZX0odGhpcyxVLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKFUpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9''@;'; put 'put ''TCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfUIoTixnKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVw''@;'; put 'put ''ZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOlUpLHRoaXMuX2xlbis9TC5sZW5ndGgsVX0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5f''@;'; put 'put ''ZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRC''@;'; put 'put ''bG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIE8oTCxLKXt2YXIgVT0wO0wubGVuZ3RoIT09Sy5sZW5ndGgmJlUrKztmb3IodmFyIFc9TWF0aC5taW4oTC5sZW5ndGgsSy5sZW5ndGgpLFk9MDtZPFc7KytZKVUrPUxbWV1eS1tZXTtyZXR1cm4gVX0oTCx0aGlz''@;'; put 'put ''Ll9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5''@;'; put 'put ''cHR8fCFfLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5f''@;'; put 'put ''ZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGlu''@;'; put 'put ''ZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSx1ZS5leHBvcnRzPU59LDQ2OTY6KHVlLFgseSk9Pnt2YXIgST15KDE0OTQpLF89eSg2MTkzKSxnPXkoNDk0Nik7WC5jcmVhdGVDaXBoZXI9WC5DaXBo''@;'; put 'put ''ZXI9SS5jcmVhdGVDaXBoZXIsWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PUkuY3JlYXRlQ2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsWC5saXN0''@;'; put 'put ''Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gQigpe3JldHVybiBPYmplY3Qua2V5cyhnKX19LDYxOTM6KHVlLFgseSk9Pnt2YXIgST15KDQ4NDgpLF89eSg5NTA5KS5CdWZmZXIsZz15KDQ1KSxCPXkoNTk2OSksdz15KDEwMjcpLFA9eSg0NDk3KSxGPXkoMzA0OCk7ZnVuY3Rpb24geihX''@;'; put 'put ''LFkscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoWSksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIE4oKXt0aGlzLmNhY2hlPV8uYWxs''@;'; put 'put ''b2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFkscSl7dmFyIGVlPWdbVy50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1fLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5n''@;'; put 'put ''dGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPV8uZnJvbShZKSksWS5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitZLmxl''@;'; put 'put ''bmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1vZHVsZSxZLHEsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFkscSwhMCk6bmV3IHooZWUubW9kdWxlLFkscSl9eSg1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhp''@;'; put 'put ''cy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxxLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspcT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIEwoVyl7dmFyIFk9V1sxNV07aWYoWTwxfHxZPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8WTspaWYoV1txKygxNi1Z''@;'; put 'put ''KV0hPT1ZKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09WSlyZXR1cm4gVy5zbGljZSgwLDE2LVkpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSk7aWYoVyl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0''@;'; put 'put ''aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0''@;'; put 'put ''aW9uKFcpe3ZhciBZO2lmKFcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2Uo''@;'; put 'put ''MCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZO3JldHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgcT1nW1cu''@;'; put 'put ''dG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSwxNDk0Oih1ZSxYLHkpPT57dmFyIEk9eSg0NSks''@;'; put 'put ''Xz15KDQ4NDgpLGc9eSg5NTA5KS5CdWZmZXIsQj15KDU5NjkpLHc9eSgxMDI3KSxQPXkoNDQ5NyksRj15KDMwNDgpO2Z1bmN0aW9uIHooVyxZLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9Zy5mcm9tKHEpLHRo''@;'; put 'put ''aXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH15KDU3MTcpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZLHEsZWU9W107WT10aGlzLl9jYWNoZS5nZXQoKTspcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKSxl''@;'; put 'put ''ZS5wdXNoKHEpO3JldHVybiBnLmNvbmNhdChlZSl9O3ZhciBOPWcuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIEwoKXt0aGlzLmNhY2hlPWcuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFkscSl7dmFyIGVlPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''aW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1nLmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Zy5mcm9tKHEp''@;'; put 'put ''KSwiR0NNIiE9PWVlLm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1vZHVsZSxZLHEpOiJhdXRoIj09PWVlLnR5cGU/bmV3IF8oZWUubW9kdWxl''@;'; put 'put ''LFkscSk6bmV3IHooZWUubW9kdWxlLFkscSl9ei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gVz10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxXKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxXO2lm''@;'; put 'put ''KCFXLmVxdWFscyhOKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LEwu''@;'; put 'put ''cHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPWcuY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhp''@;'; put 'put ''cy5jYWNoZS5zbGljZSgxNiksV31yZXR1cm4gbnVsbH0sTC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFc9MTYtdGhpcy5jYWNoZS5sZW5ndGgsWT1nLmFsbG9jVW5zYWZlKFcpLHE9LTE7KytxPFc7KVkud3JpdGVVSW50OChXLHEpO3JldHVybiBnLmNvbmNhdChbdGhpcy5j''@;'; put 'put ''YWNoZSxZXSl9LFguY3JlYXRlQ2lwaGVyaXY9SyxYLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIHE9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFksITEscS5rZXkscS5pdik7cmV0dXJu''@;'; put 'put ''IEsoVyxlZS5rZXksZWUuaXYpfX0sMzI4ODoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBCKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFswXT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBb''@;'; put 'put ''MV0+Pj4wLDQpLEYud3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1''@;'; put 'put ''bmN0aW9uKFApe2Zvcih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBPLE4sUD1mdW5jdGlvbiBnKFApe3JldHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJl''@;'; put 'put ''YWRVSW50MzJCRSg0KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLEw9LTE7KytMPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KEwvOCldJjE8PDctTCU4KSYmKEZbMF1ePVBbMF0sRlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11e''@;'; put 'put ''PVBbM10pLE49ISEoMSZQWzNdKSxPPTM7Tz4wO08tLSlQW09dPVBbT10+Pj4xfCgxJlBbTy0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09LTUyMDA5MzY5Nl5QWzBdKX10aGlzLnN0YXRlPUIoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLmNhY2hlPUkuY29u''@;'; put 'put ''Y2F0KFt0aGlzLmNhY2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihQLEYpe3JldHVybiB0''@;'; put 'put ''aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goQihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSx1ZS5leHBvcnRzPXd9LDY4NTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5KXtmb3IodmFyIF8sST15Lmxlbmd0aDtJ''@;'; put 'put ''LS07KXtpZigyNTUhPT0oXz15LnJlYWRVSW50OChJKSkpe18rKyx5LndyaXRlVUludDgoXyxJKTticmVha315LndyaXRlVUludDgoMCxJKX19fSw1MjkyOih1ZSxYLHkpPT57dmFyIEk9eSg3Mjk1KTtYLmVuY3J5cHQ9ZnVuY3Rpb24oXyxnKXt2YXIgQj1JKGcsXy5fcHJldik7cmV0dXJuIF8u''@;'; put 'put ''X3ByZXY9Xy5fY2lwaGVyLmVuY3J5cHRCbG9jayhCKSxfLl9wcmV2fSxYLmRlY3J5cHQ9ZnVuY3Rpb24oXyxnKXt2YXIgQj1fLl9wcmV2O18uX3ByZXY9Zzt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGcpO3JldHVybiBJKHcsQil9fSw2MzExOih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5''@;'; put 'put ''KS5CdWZmZXIsXz15KDcyOTUpO2Z1bmN0aW9uIGcoQix3LFApe3ZhciBGPXcubGVuZ3RoLE89Xyh3LEIuX2NhY2hlKTtyZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2UoRiksQi5fcHJldj1JLmNvbmNhdChbQi5fcHJldixQP3c6T10pLE99WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtm''@;'; put 'put ''b3IodmFyIE8sRj1JLmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYoMD09PUIuX2NhY2hlLmxlbmd0aCYmKEIuX2NhY2hlPUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiksQi5fcHJldj1JLmFsbG9jVW5zYWZlKDApKSwhKEIuX2NhY2hlLmxlbmd0aDw9dy5sZW5ndGgpKXtGPUku''@;'; put 'put ''Y29uY2F0KFtGLGcoQix3LFApXSk7YnJlYWt9Rj1JLmNvbmNhdChbRixnKEIsdy5zbGljZSgwLE89Qi5fY2FjaGUubGVuZ3RoKSxQKV0pLHc9dy5zbGljZShPKX1yZXR1cm4gRn19LDE1MTA6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKEIsdyxQKXtmb3IodmFy''@;'; put 'put ''IEwsSyxPPS0xLE49MDsrK088ODspTis9KDEyOCYoSz1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpWzBdXihMPXcmMTw8Ny1PPzEyODowKSkpPj5PJTgsQi5fcHJldj1nKEIuX3ByZXYsUD9MOkspO3JldHVybiBOfWZ1bmN0aW9uIGcoQix3KXt2YXIgUD1CLmxlbmd0aCxGPS0xLE89''@;'; put 'put ''SS5hbGxvY1Vuc2FmZShCLmxlbmd0aCk7Zm9yKEI9SS5jb25jYXQoW0IsSS5mcm9tKFt3XSldKTsrK0Y8UDspT1tGXT1CW0ZdPDwxfEJbRisxXT4+NztyZXR1cm4gT31YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxPPUkuYWxsb2NVbnNhZmUoRiksej0tMTsr''@;'; put 'put ''K3o8RjspT1t6XT1fKEIsd1t6XSxQKTtyZXR1cm4gT319LDE5NjQ6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQix3KXt2YXIgRj1nLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGcuX3ByZXYpWzBdXkI7cmV0dXJuIGcuX3ByZXY9SS5jb25jYXQoW2cuX3ByZXYu''@;'; put 'put ''c2xpY2UoMSksSS5mcm9tKFt3P0I6Rl0pXSksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24oZyxCLHcpe2Zvcih2YXIgUD1CLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksTz0tMTsrK088UDspRltPXT1fKGcsQltPXSx3KTtyZXR1cm4gRn19LDYwMDk6KHVlLFgseSk9Pnt2YXIgST15KDcyOTUpLF89''@;'; put 'put ''eSg5NTA5KS5CdWZmZXIsZz15KDY4NSk7ZnVuY3Rpb24gQihQKXt2YXIgRj1QLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KFAuX3ByZXYpO3JldHVybiBnKFAuX3ByZXYpLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKFAsRil7dmFyIE89TWF0aC5jZWlsKEYubGVuZ3RoLzE2KSx6PVAuX2NhY2hlLmxl''@;'; put 'put ''bmd0aDtQLl9jYWNoZT1fLmNvbmNhdChbUC5fY2FjaGUsXy5hbGxvY1Vuc2FmZSgxNipPKV0pO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciBMPUIoUCksSz16KzE2Kk47UC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzBdLEsrMCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzFdLEsrNCksUC5f''@;'; put 'put ''Y2FjaGUud3JpdGVVSW50MzJCRShMWzJdLEsrOCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzNdLEsrMTIpfXZhciBVPVAuX2NhY2hlLnNsaWNlKDAsRi5sZW5ndGgpO3JldHVybiBQLl9jYWNoZT1QLl9jYWNoZS5zbGljZShGLmxlbmd0aCksSShGLFUpfX0sMTA4NDoodWUsWCk9PntYLmVu''@;'; put 'put ''Y3J5cHQ9ZnVuY3Rpb24oeSxJKXtyZXR1cm4geS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSw0NToodWUsWCx5KT0+e3ZhciBJPXtFQ0I6eSgxMDg0KSxDQkM6eSg1MjkyKSxDRkI6eSg2''@;'; put 'put ''MzExKSxDRkI4OnkoMTk2NCksQ0ZCMTp5KDE1MTApLE9GQjp5KDg4NjEpLENUUjp5KDYwMDkpLEdDTTp5KDYwMDkpfSxfPXkoNDk0Nik7Zm9yKHZhciBnIGluIF8pX1tnXS5tb2R1bGU9SVtfW2ddLm1vZGVdO3VlLmV4cG9ydHM9X30sODg2MToodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVm''@;'; put 'put ''ZmVyLF89eSg3Mjk1KTtmdW5jdGlvbiBnKEIpe3JldHVybiBCLl9wcmV2PUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiksQi5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3KXtmb3IoO0IuX2NhY2hlLmxlbmd0aDx3Lmxlbmd0aDspQi5fY2FjaGU9SS5jb25jYXQoW0IuX2NhY2hl''@;'; put 'put ''LGcoQildKTt2YXIgUD1CLl9jYWNoZS5zbGljZSgwLHcubGVuZ3RoKTtyZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2Uody5sZW5ndGgpLF8odyxQKX19LDU5Njk6KHVlLFgseSk9Pnt2YXIgST15KDQ0OTcpLF89eSg5NTA5KS5CdWZmZXIsZz15KDEwMjcpO2Z1bmN0aW9uIHcoUCxGLE8s''@;'; put 'put ''eil7Zy5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj1fLmZyb20oTyksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9eSg1NzE3KSh3LGcp''@;'; put 'put ''LHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFAsdGhpcy5fZGVjcnlwdCl9LHcucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSx1ZS5leHBvcnRzPXd9LDM2MTQ6KHVlLFgseSk9Pnt2''@;'; put 'put ''YXIgST15KDc2NjcpLF89eSg0Njk2KSxnPXkoNDUpLEI9eSg5NzE1KSx3PXkoMzA0OCk7ZnVuY3Rpb24gTyhMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4gXy5jcmVhdGVDaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpM''@;'; put 'put ''fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24geihMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4gXy5jcmVhdGVEZWNpcGhlcml2KEwsSyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkwsZGVj''@;'; put 'put ''cnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfVguY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPWZ1bmN0aW9uIFAoTCxLKXt2YXIgVSxXO2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtVPTgqQltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiBPKEwsWS5rZXksWS5pdil9LFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1PLFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1mdW5j''@;'; put 'put ''dGlvbiBGKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTty''@;'; put 'put ''ZXR1cm4geihMLFkua2V5LFkuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PXosWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhCKS5jb25jYXQoXy5nZXRDaXBoZXJzKCkpfX0sNzY2NzoodWUsWCx5KT0+e3ZhciBJ''@;'; put 'put ''PXkoMTAyNyksXz15KDUyNTEpLGc9eSg1NzE3KSxCPXkoOTUwOSkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZTMiOl8uRURFLCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVz''@;'; put 'put ''LWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpfLkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sTz1GLm1vZGUudG9Mb3dlckNhc2UoKSx6PXdbT107Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTD1GLmtleTtCLmlzQnVmZmVy''@;'; put 'put ''KEwpfHwoTD1CLmZyb20oTCkpLCgiZGVzLWVkZSI9PT1PfHwiZGVzLWVkZS1jYmMiPT09TykmJihMPUIuY29uY2F0KFtMLEwuc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O0IuaXNCdWZmZXIoSyl8fChLPUIuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TCxpdjpLLHR5cGU6Tn0p''@;'; put 'put ''fXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sdWUuZXhwb3J0cz1QLGcoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBCLmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBCLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sOTcxNToodWUsWCk9PntYWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0''@;'; put 'put ''LGl2OjB9LFhbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxYWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM1NTApLF89eSgxNzk4KSxnPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEIoRil7dmFyIHosTz1GLm1vZHVs''@;'; put 'put ''dXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoXyhPKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBQKEYsTyl7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgTz1CKEYpO3JldHVybntibGlu''@;'; put 'put ''ZGVyOk8udG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpPLmludm0oRi5tb2R1bHVzKX19KE8pLE49Ty5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoTy5t''@;'; put 'put ''b2R1bHVzKSxLPUwudG9SZWQoSS5tb250KE8ucHJpbWUxKSksVT1MLnRvUmVkKEkubW9udChPLnByaW1lMikpLFc9Ty5jb2VmZmljaWVudCxZPU8ucHJpbWUxLHE9Ty5wcmltZTIsZWU9Sy5yZWRQb3coTy5leHBvbmVudDEpLmZyb21SZWQoKSxKPVUucmVkUG93KE8uZXhwb25lbnQyKS5mcm9t''@;'; put 'put ''UmVkKCksbmU9ZWUuaXN1YihKKS5pbXVsKFcpLnVtb2QoWSkuaW11bChxKTtyZXR1cm4gSi5pYWRkKG5lKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKE8ubW9kdWx1cykudG9BcnJheUxpa2UoZywiYmUiLE4pfVAuZ2V0cj1CLHVlLmV4cG9ydHM9UH0sNjA0MjoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt1ZS5leHBvcnRzPXkoNTIwNyl9LDQ3NDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDM0ODIpLGc9eSgzODcyKSxCPXkoNTcxNyksdz15KDI5NTcpLFA9eSg3NzUzKSxGPXkoNTIwNyk7ZnVuY3Rpb24gTyhLKXtnLldyaXRhYmxlLmNhbGwo''@;'; put 'put ''dGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1VLmhhc2gsdGhpcy5faGFzaD1fKFUuaGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIHooSyl7Zy5Xcml0''@;'; put 'put ''YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1fKFUuaGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBPKEspfWZ1''@;'; put 'put ''bmN0aW9uIEwoSyl7cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93ZXJDYXNlKCldPUZbS119KSxCKE8sZy5Xcml0YWJsZSksTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUs''@;'; put 'put ''VyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LE8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihVLFcpe3RoaXMu''@;'; put 'put ''ZW5kKCk7dmFyIFk9dGhpcy5faGFzaC5kaWdlc3QoKSxxPXcoWSxVLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFc/cS50b1N0cmluZyhXKTpxfSxCKHosZy5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9o''@;'; put 'put ''YXNoLnVwZGF0ZShVKSxZKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFUsVyxZKXt2YXIgcT0ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIFc/SS5mcm9tKFcsWSk6Vzt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKHEsZWUsVSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSx1ZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5OkwsY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpMfX0s''@;'; put 'put ''Mjk1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoODM1NSksZz15KDM2NjMpLEI9eSg2OTQ4KS5lYyx3PXkoMzU1MCksUD15KDk4MCksRj15KDEzMDgpO2Z1bmN0aW9uIFUoSixuZSxpZSxsZSl7aWYoKEo9SS5mcm9tKEoudG9BcnJheSgpKSkubGVu''@;'; put 'put ''Z3RoPG5lLmJ5dGVMZW5ndGgoKSl7dmFyIG1lPUkuYWxsb2MobmUuYnl0ZUxlbmd0aCgpLUoubGVuZ3RoKTtKPUkuY29uY2F0KFttZSxKXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5jdGlvbiBZKEosbmUpe0o9KEo9VyhKLG5lKSkubW9kKG5lKTt2YXIgaWU9SS5mcm9tKEoudG9BcnJheSgp''@;'; put 'put ''KTtpZihpZS5sZW5ndGg8bmUuYnl0ZUxlbmd0aCgpKXt2YXIgbGU9SS5hbGxvYyhuZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtpZT1JLmNvbmNhdChbbGUsaWVdKX1yZXR1cm4gaWV9KGllLG5lKSxTZT1JLmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciBqZT1JLmFsbG9jKF9lKTtyZXR1cm4g''@;'; put 'put ''amU9XyhsZSxqZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFswXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLFNlPV8obGUsamUpLnVwZGF0ZShTZSkuZGlnZXN0KCkse2s6amU9XyhsZSxqZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFsxXSkpLnVwZGF0ZShKKS51cGRh''@;'; put 'put ''dGUoVGUpLmRpZ2VzdCgpLHY6U2U9XyhsZSxqZSkudXBkYXRlKFNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9bmV3IHcoSiksbGU9KEoubGVuZ3RoPDwzKS1uZS5iaXRMZW5ndGgoKTtyZXR1cm4gbGU+MCYmaWUuaXNocm4obGUpLGllfWZ1bmN0aW9uIHEoSixuZSxpZSl7''@;'; put 'put ''dmFyIGxlLG1lO2Rve2ZvcihsZT1JLmFsbG9jKDApOzgqbGUubGVuZ3RoPEouYml0TGVuZ3RoKCk7KW5lLnY9XyhpZSxuZS5rKS51cGRhdGUobmUudikuZGlnZXN0KCksbGU9SS5jb25jYXQoW2xlLG5lLnZdKTttZT1XKGxlLEopLG5lLms9XyhpZSxuZS5rKS51cGRhdGUobmUudikudXBkYXRl''@;'; put 'put ''KEkuZnJvbShbMF0pKS5kaWdlc3QoKSxuZS52PV8oaWUsbmUuaykudXBkYXRlKG5lLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09bWUuY21wKEopKTtyZXR1cm4gbWV9ZnVuY3Rpb24gZWUoSixuZSxpZSxsZSl7cmV0dXJuIEoudG9SZWQody5tb250KGllKSkucmVkUG93KG5lKS5mcm9tUmVkKCku''@;'; put 'put ''bW9kKGxlKX11ZS5leHBvcnRzPWZ1bmN0aW9uIHooSixuZSxpZSxsZSxtZSl7dmFyIF9lPVAobmUpO2lmKF9lLmN1cnZlKXtpZigiZWNkc2EiIT09bGUmJiJlY2RzYS9yc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE4o''@;'; put 'put ''SixuZSl7dmFyIGllPUZbbmUuY3VydmUuam9pbigiLiIpXTtpZighaWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrbmUuY3VydmUuam9pbigiLiIpKTt2YXIgX2U9bmV3IEIoaWUpLmtleUZyb21Qcml2YXRlKG5lLnByaXZhdGVLZXkpLnNpZ24oSik7cmV0dXJuIEkuZnJvbShf''@;'; put 'put ''ZS50b0RFUigpKX0oSixfZSl9aWYoImRzYSI9PT1fZS50eXBlKXtpZigiZHNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBMKEosbmUsaWUpe2Zvcih2YXIgamUsbGU9bmUucGFyYW1zLnByaXZfa2V5LG1lPW5lLnBhcmFt''@;'; put 'put ''cy5wLF9lPW5lLnBhcmFtcy5xLFRlPW5lLnBhcmFtcy5nLFNlPW5ldyB3KDApLFY9VyhKLF9lKS5tb2QoX2UpLHA9ITEsYj1VKGxlLF9lLEosaWUpOyExPT09cDspU2U9ZWUoVGUsamU9cShfZSxiLGllKSxtZSxfZSksMD09PShwPWplLmludm0oX2UpLmltdWwoVi5hZGQobGUubXVsKFNlKSkp''@;'; put 'put ''Lm1vZChfZSkpLmNtcG4oMCkmJihwPSExLFNlPW5ldyB3KDApKTtyZXR1cm4gZnVuY3Rpb24gSyhKLG5lKXtKPUoudG9BcnJheSgpLG5lPW5lLnRvQXJyYXkoKSwxMjgmSlswXSYmKEo9WzBdLmNvbmNhdChKKSksMTI4Jm5lWzBdJiYobmU9WzBdLmNvbmNhdChuZSkpO3ZhciBsZT1bNDgsSi5s''@;'; put 'put ''ZW5ndGgrbmUubGVuZ3RoKzQsMixKLmxlbmd0aF07cmV0dXJuIGxlPWxlLmNvbmNhdChKLFsyLG5lLmxlbmd0aF0sbmUpLEkuZnJvbShsZSl9KFNlLHApfShKLF9lLGllKX1pZigicnNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkg''@;'; put 'put ''dHlwZSIpO2lmKHZvaWQgMCE9PW5lLnBhZGRpbmcmJjEhPT1uZS5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtKPUkuY29uY2F0KFttZSxKXSk7Zm9yKHZhciBUZT1fZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxTZT1bMCwxXTtK''@;'; put 'put ''Lmxlbmd0aCtTZS5sZW5ndGgrMTxUZTspU2UucHVzaCgyNTUpO1NlLnB1c2goMCk7Zm9yKHZhciBqZT0tMTsrK2plPEoubGVuZ3RoOylTZS5wdXNoKEpbamVdKTtyZXR1cm4gZyhTZSxfZSl9LHVlLmV4cG9ydHMuZ2V0S2V5PVUsdWUuZXhwb3J0cy5tYWtlS2V5PXF9LDc3NTM6KHVlLFgseSk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDM1NTApLGc9eSg2OTQ4KS5lYyxCPXkoOTgwKSx3PXkoMTMwOCk7ZnVuY3Rpb24geihOLEwpe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTCk+PTApdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJpbnZhbGlkIHNpZyIpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLEwsSyxVLFcpe3ZhciBZPUIoSyk7aWYoImVjIj09PVkudHlwZSl7aWYoImVjZHNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBGKE4sTCxLKXt2YXIgVT13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBnKFUpLnZlcmlmeShMLE4sSy5kYXRh''@;'; put 'put ''LnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShOLEwsWSl9aWYoImRzYSI9PT1ZLnR5cGUpe2lmKCJkc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBPKE4sTCxLKXt2YXIgVT1LLmRhdGEucCxXPUsuZGF0YS5xLFk9Sy5kYXRh''@;'; put 'put ''LmcscT1LLmRhdGEucHViX2tleSxlZT1CLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLG5lPWVlLnI7eihKLFcpLHoobmUsVyk7dmFyIGllPV8ubW9udChVKSxsZT1KLmludm0oVyk7cmV0dXJuIDA9PT1ZLnRvUmVkKGllKS5yZWRQb3cobmV3IF8oTCkubXVsKGxlKS5tb2QoVykp''@;'; put 'put ''LmZyb21SZWQoKS5tdWwocS50b1JlZChpZSkucmVkUG93KG5lLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkpLm1vZChVKS5tb2QoVykuY21wKG5lKX0oTixMLFkpfWlmKCJyc2EiIT09VSYmImVjZHNhL3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7''@;'; put 'put ''TD1JLmNvbmNhdChbVyxMXSk7Zm9yKHZhciBxPVkubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtMLmxlbmd0aCtlZS5sZW5ndGgrMjxxOyllZS5wdXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgbmU9LTE7KytuZTxMLmxlbmd0aDspZWUucHVzaChMW25lXSk7ZWU9SS5m''@;'; put 'put ''cm9tKGVlKTt2YXIgaWU9Xy5tb250KFkubW9kdWx1cyk7Tj0oTj1uZXcgXyhOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgXyhZLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgbGU9Sjw4PzE6MDtmb3IocT1NYXRoLm1pbihOLmxlbmd0aCxlZS5s''@;'; put 'put ''ZW5ndGgpLE4ubGVuZ3RoIT09ZWUubGVuZ3RoJiYobGU9MSksbmU9LTE7KytuZTxxOylsZXw9TltuZV1eZWVbbmVdO3JldHVybiAwPT09bGV9fSw0MzkwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODIxMiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFU9W107Zm9y''@;'; put 'put ''KHZhciBXIGluIEspVS5wdXNoKFcpO3JldHVybiBVfTt1ZS5leHBvcnRzPXo7dmFyIGc9T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtnLmluaGVyaXRzPXkoNTcxNyk7dmFyIEI9eSg0OTYwKSx3PXkoMjAxMCk7Zy5pbmhlcml0cyh6LEIpO2Zvcih2YXIgUD1fKHcucHJvdG90eXBlKSxGPTA7RjxQ''@;'; put 'put ''Lmxlbmd0aDtGKyspe3ZhciBPPVBbRl07ei5wcm90b3R5cGVbT118fCh6LnByb3RvdHlwZVtPXT13LnByb3RvdHlwZVtPXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Qi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1L''@;'; put 'put ''LnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rp''@;'; put 'put ''b24gTigpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhMLHRoaXMpfWZ1bmN0aW9uIEwoSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6''@;'; put 'put ''ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lk''@;'; put 'put ''IDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwo''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFUpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soVSxLKX19LDEyOTQ6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dWUuZXhwb3J0cz1nO3ZhciBJPXkoMzkxMiksXz1PYmplY3QuY3JlYXRlKHkoNjQ5NykpO2Z1bmN0aW9uIGcoQil7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIpO0kuY2FsbCh0aGlzLEIpfV8uaW5oZXJpdHM9eSg1NzE3KSxfLmluaGVyaXRzKGcs''@;'; put 'put ''SSksZy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihCLHcsUCl7UChudWxsLEIpfX0sNDk2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg4MjEyKTt1ZS5leHBvcnRzPWxlO3ZhciBCLGc9eSg1ODI2KTtsZS5SZWFkYWJsZVN0YXRlPWllLHkoNzE4Nyk7''@;'; put 'put ''dmFyIFA9ZnVuY3Rpb24odmUsWGUpe3JldHVybiB2ZS5saXN0ZW5lcnMoWGUpLmxlbmd0aH0sRj15KDk4MTkpLE89eSgxNTcyKS5CdWZmZXIsej0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8''@;'; put 'put ''ZnVuY3Rpb24oKXt9LEs9T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtLLmluaGVyaXRzPXkoNTcxNyk7dmFyIFU9eSg2MzUzKSxXPXZvaWQgMDtXPVUmJlUuZGVidWdsb2c/VS5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBlZSxZPXkoMjI2NykscT15KDU5OTcpO0suaW5oZXJp''@;'; put 'put ''dHMobGUsRik7dmFyIEo9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gaWUodmUsWGUpe3ZhciB6ZT1YZSBpbnN0YW5jZW9mKEI9Qnx8eSg0MzkwKSk7dGhpcy5vYmplY3RNb2RlPSEhKHZlPXZlfHx7fSkub2JqZWN0TW9kZSx6ZSYmKHRoaXMu''@;'; put 'put ''b2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdmUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgRGU9dmUuaGlnaFdhdGVyTWFyayxGZT12ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPURlfHwwPT09RGU/RGU6emUmJihGZXx8MD09PUZlKT9GZTp0aGlzLm9i''@;'; put 'put ''amVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgWSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSEx''@;'; put 'put ''LHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhp''@;'; put 'put ''cy5kZWZhdWx0RW5jb2Rpbmc9dmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsdmUuZW5jb2RpbmcmJihlZXx8KGVlPXkoMjIyMSkucyksdGhpcy5kZWNvZGVy''@;'; put 'put ''PW5ldyBlZSh2ZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz12ZS5lbmNvZGluZyl9ZnVuY3Rpb24gbGUodmUpe2lmKEI9Qnx8eSg0MzkwKSwhKHRoaXMgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIG5ldyBsZSh2ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaWUodmUsdGhpcyksdGhpcy5yZWFk''@;'; put 'put ''YWJsZT0hMCx2ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5yZWFkJiYodGhpcy5fcmVhZD12ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9dmUuZGVzdHJveSkpLEYuY2FsbCh0aGlzKX1mdW5jdGlvbiBtZSh2ZSxYZSx6ZSxEZSxGZSl7dmFy''@;'; put 'put ''IEllLE9lPXZlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09WGU/KE9lLnJlYWRpbmc9ITEsZnVuY3Rpb24gYih2ZSxYZSl7aWYoIVhlLmVuZGVkKXtpZihYZS5kZWNvZGVyKXt2YXIgemU9WGUuZGVjb2Rlci5lbmQoKTt6ZSYmemUubGVuZ3RoJiYoWGUuYnVmZmVyLnB1c2goemUpLFhl''@;'; put 'put ''Lmxlbmd0aCs9WGUub2JqZWN0TW9kZT8xOnplLmxlbmd0aCl9WGUuZW5kZWQ9ITAseCh2ZSl9fSh2ZSxPZSkpOihGZXx8KEllPWZ1bmN0aW9uIFRlKHZlLFhlKXt2YXIgemU7cmV0dXJuIWZ1bmN0aW9uIEwodmUpe3JldHVybiBPLmlzQnVmZmVyKHZlKXx8dmUgaW5zdGFuY2VvZiB6fShYZSkm''@;'; put 'put ''JiJzdHJpbmciIT10eXBlb2YgWGUmJnZvaWQgMCE9PVhlJiYhdmUub2JqZWN0TW9kZSYmKHplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksemV9KE9lLFhlKSksSWU/dmUuZW1pdCgiZXJyb3IiLEllKTpPZS5vYmplY3RNb2RlfHxYZSYmWGUubGVu''@;'; put 'put ''Z3RoPjA/KCJzdHJpbmciIT10eXBlb2YgWGUmJiFPZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoWGUpIT09Ty5wcm90b3R5cGUmJihYZT1mdW5jdGlvbiBOKHZlKXtyZXR1cm4gTy5mcm9tKHZlKX0oWGUpKSxEZT9PZS5lbmRFbWl0dGVkP3ZlLmVtaXQoImVycm9yIixuZXcg''@;'; put 'put ''RXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOl9lKHZlLE9lLFhlLCEwKTpPZS5lbmRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooT2UucmVhZGluZz0hMSxPZS5kZWNvZGVyJiYhemU/KFhlPU9lLmRlY29k''@;'; put 'put ''ZXIud3JpdGUoWGUpLE9lLm9iamVjdE1vZGV8fDAhPT1YZS5sZW5ndGg/X2UodmUsT2UsWGUsITEpOlQodmUsT2UpKTpfZSh2ZSxPZSxYZSwhMSkpKTpEZXx8KE9lLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBTZSh2ZSl7cmV0dXJuIXZlLmVuZGVkJiYodmUubmVlZFJlYWRhYmxlfHx2ZS5sZW5n''@;'; put 'put ''dGg8dmUuaGlnaFdhdGVyTWFya3x8MD09PXZlLmxlbmd0aCl9KE9lKX1mdW5jdGlvbiBfZSh2ZSxYZSx6ZSxEZSl7WGUuZmxvd2luZyYmMD09PVhlLmxlbmd0aCYmIVhlLnN5bmM/KHZlLmVtaXQoImRhdGEiLHplKSx2ZS5yZWFkKDApKTooWGUubGVuZ3RoKz1YZS5vYmplY3RNb2RlPzE6emUu''@;'; put 'put ''bGVuZ3RoLERlP1hlLmJ1ZmZlci51bnNoaWZ0KHplKTpYZS5idWZmZXIucHVzaCh6ZSksWGUubmVlZFJlYWRhYmxlJiZ4KHZlKSksVCh2ZSxYZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksbGUucHJvdG90eXBlLmRlc3Ryb3k9cS5kZXN0cm95LGxlLnByb3Rv''@;'; put 'put ''dHlwZS5fdW5kZXN0cm95PXEudW5kZXN0cm95LGxlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih2ZSxYZSl7dGhpcy5wdXNoKG51bGwpLFhlKHZlKX0sbGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odmUsWGUpe3ZhciBEZSx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB6ZS5v''@;'; put 'put ''YmplY3RNb2RlP0RlPSEwOiJzdHJpbmciPT10eXBlb2YgdmUmJigoWGU9WGV8fHplLmRlZmF1bHRFbmNvZGluZykhPT16ZS5lbmNvZGluZyYmKHZlPU8uZnJvbSh2ZSxYZSksWGU9IiIpLERlPSEwKSxtZSh0aGlzLHZlLFhlLCExLERlKX0sbGUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24o''@;'; put 'put ''dmUpe3JldHVybiBtZSh0aGlzLHZlLG51bGwsITAsITEpfSxsZS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sbGUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtyZXR1cm4gZWV8fChlZT15KDIy''@;'; put 'put ''MjEpLnMpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgZWUodmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dmUsdGhpc307ZnVuY3Rpb24gcCh2ZSxYZSl7cmV0dXJuIHZlPD0wfHwwPT09WGUubGVuZ3RoJiZYZS5lbmRlZD8wOlhlLm9iamVjdE1vZGU/MTp2ZSE9dmU/''@;'; put 'put ''WGUuZmxvd2luZyYmWGUubGVuZ3RoP1hlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOlhlLmxlbmd0aDoodmU+WGUuaGlnaFdhdGVyTWFyayYmKFhlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gVih2ZSl7cmV0dXJuIHZlPj04Mzg4NjA4P3ZlPTgzODg2MDg6KHZlLS0sdmV8PXZlPj4+MSx2ZXw9''@;'; put 'put ''dmU+Pj4yLHZlfD12ZT4+PjQsdmV8PXZlPj4+OCx2ZXw9dmU+Pj4xNix2ZSsrKSx2ZX0odmUpKSx2ZTw9WGUubGVuZ3RoP3ZlOlhlLmVuZGVkP1hlLmxlbmd0aDooWGUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiB4KHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7WGUubmVlZFJl''@;'; put 'put ''YWRhYmxlPSExLFhlLmVtaXR0ZWRSZWFkYWJsZXx8KFcoImVtaXRSZWFkYWJsZSIsWGUuZmxvd2luZyksWGUuZW1pdHRlZFJlYWRhYmxlPSEwLFhlLnN5bmM/Xy5uZXh0VGljayhDLHZlKTpDKHZlKSl9ZnVuY3Rpb24gQyh2ZSl7VygiZW1pdCByZWFkYWJsZSIpLHZlLmVtaXQoInJlYWRhYmxl''@;'; put 'put ''IiksYWUodmUpfWZ1bmN0aW9uIFQodmUsWGUpe1hlLnJlYWRpbmdNb3JlfHwoWGUucmVhZGluZ01vcmU9ITAsXy5uZXh0VGljayhILHZlLFhlKSl9ZnVuY3Rpb24gSCh2ZSxYZSl7Zm9yKHZhciB6ZT1YZS5sZW5ndGg7IVhlLnJlYWRpbmcmJiFYZS5mbG93aW5nJiYhWGUuZW5kZWQmJlhlLmxl''@;'; put 'put ''bmd0aDxYZS5oaWdoV2F0ZXJNYXJrJiYoVygibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx2ZS5yZWFkKDApLHplIT09WGUubGVuZ3RoKTspemU9WGUubGVuZ3RoO1hlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEUodmUpe1coInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHZlLnJlYWQoMCl9''@;'; put 'put ''ZnVuY3Rpb24gQSh2ZSxYZSl7WGUucmVhZGluZ3x8KFcoInJlc3VtZSByZWFkIDAiKSx2ZS5yZWFkKDApKSxYZS5yZXN1bWVTY2hlZHVsZWQ9ITEsWGUuYXdhaXREcmFpbj0wLHZlLmVtaXQoInJlc3VtZSIpLGFlKHZlKSxYZS5mbG93aW5nJiYhWGUucmVhZGluZyYmdmUucmVhZCgwKX1mdW5j''@;'; put 'put ''dGlvbiBhZSh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO2ZvcihXKCJmbG93IixYZS5mbG93aW5nKTtYZS5mbG93aW5nJiZudWxsIT09dmUucmVhZCgpOyk7fWZ1bmN0aW9uIHRlKHZlLFhlKXtyZXR1cm4gMD09PVhlLmxlbmd0aD9udWxsOihYZS5vYmplY3RNb2RlP3plPVhlLmJ1ZmZl''@;'; put 'put ''ci5zaGlmdCgpOiF2ZXx8dmU+PVhlLmxlbmd0aD8oemU9WGUuZGVjb2Rlcj9YZS5idWZmZXIuam9pbigiIik6MT09PVhlLmJ1ZmZlci5sZW5ndGg/WGUuYnVmZmVyLmhlYWQuZGF0YTpYZS5idWZmZXIuY29uY2F0KFhlLmxlbmd0aCksWGUuYnVmZmVyLmNsZWFyKCkpOnplPWZ1bmN0aW9uIHNl''@;'; put 'put ''KHZlLFhlLHplKXt2YXIgRGU7cmV0dXJuIHZlPFhlLmhlYWQuZGF0YS5sZW5ndGg/KERlPVhlLmhlYWQuZGF0YS5zbGljZSgwLHZlKSxYZS5oZWFkLmRhdGE9WGUuaGVhZC5kYXRhLnNsaWNlKHZlKSk6RGU9dmU9PT1YZS5oZWFkLmRhdGEubGVuZ3RoP1hlLnNoaWZ0KCk6emU/ZnVuY3Rpb24g''@;'; put 'put ''d2UodmUsWGUpe3ZhciB6ZT1YZS5oZWFkLERlPTEsRmU9emUuZGF0YTtmb3IodmUtPUZlLmxlbmd0aDt6ZT16ZS5uZXh0Oyl7dmFyIE9lPXplLmRhdGEsSWU9dmU+T2UubGVuZ3RoP09lLmxlbmd0aDp2ZTtpZihGZSs9SWU9PT1PZS5sZW5ndGg/T2U6T2Uuc2xpY2UoMCx2ZSksMD09KHZlLT1J''@;'; put 'put ''ZSkpe0llPT09T2UubGVuZ3RoPygrK0RlLFhlLmhlYWQ9emUubmV4dD96ZS5uZXh0OlhlLnRhaWw9bnVsbCk6KFhlLmhlYWQ9emUsemUuZGF0YT1PZS5zbGljZShJZSkpO2JyZWFrfSsrRGV9cmV0dXJuIFhlLmxlbmd0aC09RGUsRmV9KHZlLFhlKTpmdW5jdGlvbiBVZSh2ZSxYZSl7dmFyIHpl''@;'; put 'put ''PU8uYWxsb2NVbnNhZmUodmUpLERlPVhlLmhlYWQsRmU9MTtmb3IoRGUuZGF0YS5jb3B5KHplKSx2ZS09RGUuZGF0YS5sZW5ndGg7RGU9RGUubmV4dDspe3ZhciBPZT1EZS5kYXRhLEllPXZlPk9lLmxlbmd0aD9PZS5sZW5ndGg6dmU7aWYoT2UuY29weSh6ZSx6ZS5sZW5ndGgtdmUsMCxJZSks''@;'; put 'put ''MD09KHZlLT1JZSkpe0llPT09T2UubGVuZ3RoPygrK0ZlLFhlLmhlYWQ9RGUubmV4dD9EZS5uZXh0OlhlLnRhaWw9bnVsbCk6KFhlLmhlYWQ9RGUsRGUuZGF0YT1PZS5zbGljZShJZSkpO2JyZWFrfSsrRmV9cmV0dXJuIFhlLmxlbmd0aC09RmUsemV9KHZlLFhlKSxEZX0odmUsWGUuYnVmZmVy''@;'; put 'put ''LFhlLmRlY29kZXIpLHplKTt2YXIgemV9ZnVuY3Rpb24gSmUodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtpZihYZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1hlLmVuZEVtaXR0ZWR8fChYZS5lbmRl''@;'; put 'put ''ZD0hMCxfLm5leHRUaWNrKG90LFhlLHZlKSl9ZnVuY3Rpb24gb3QodmUsWGUpeyF2ZS5lbmRFbWl0dGVkJiYwPT09dmUubGVuZ3RoJiYodmUuZW5kRW1pdHRlZD0hMCxYZS5yZWFkYWJsZT0hMSxYZS5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24geGUodmUsWGUpe2Zvcih2YXIgemU9MCxEZT12ZS5s''@;'; put 'put ''ZW5ndGg7emU8RGU7emUrKylpZih2ZVt6ZV09PT1YZSlyZXR1cm4gemU7cmV0dXJuLTF9bGUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odmUpe1coInJlYWQiLHZlKSx2ZT1wYXJzZUludCh2ZSwxMCk7dmFyIFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsemU9dmU7aWYoMCE9PXZlJiYoWGUuZW1p''@;'; put 'put ''dHRlZFJlYWRhYmxlPSExKSwwPT09dmUmJlhlLm5lZWRSZWFkYWJsZSYmKFhlLmxlbmd0aD49WGUuaGlnaFdhdGVyTWFya3x8WGUuZW5kZWQpKXJldHVybiBXKCJyZWFkOiBlbWl0UmVhZGFibGUiLFhlLmxlbmd0aCxYZS5lbmRlZCksMD09PVhlLmxlbmd0aCYmWGUuZW5kZWQ/SmUodGhpcyk6''@;'; put 'put ''eCh0aGlzKSxudWxsO2lmKDA9PT0odmU9cCh2ZSxYZSkpJiZYZS5lbmRlZClyZXR1cm4gMD09PVhlLmxlbmd0aCYmSmUodGhpcyksbnVsbDt2YXIgRmUsRGU9WGUubmVlZFJlYWRhYmxlO3JldHVybiBXKCJuZWVkIHJlYWRhYmxlIixEZSksKDA9PT1YZS5sZW5ndGh8fFhlLmxlbmd0aC12ZTxY''@;'; put 'put ''ZS5oaWdoV2F0ZXJNYXJrKSYmVygibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLERlPSEwKSxYZS5lbmRlZHx8WGUucmVhZGluZz9XKCJyZWFkaW5nIG9yIGVuZGVkIixEZT0hMSk6RGUmJihXKCJkbyByZWFkIiksWGUucmVhZGluZz0hMCxYZS5zeW5jPSEwLDA9PT1YZS5sZW5ndGgmJihY''@;'; put 'put ''ZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoWGUuaGlnaFdhdGVyTWFyayksWGUuc3luYz0hMSxYZS5yZWFkaW5nfHwodmU9cCh6ZSxYZSkpKSxudWxsPT09KEZlPXZlPjA/dGUodmUsWGUpOm51bGwpPyhYZS5uZWVkUmVhZGFibGU9ITAsdmU9MCk6WGUubGVuZ3RoLT12ZSwwPT09WGUu''@;'; put 'put ''bGVuZ3RoJiYoWGUuZW5kZWR8fChYZS5uZWVkUmVhZGFibGU9ITApLHplIT09dmUmJlhlLmVuZGVkJiZKZSh0aGlzKSksbnVsbCE9PUZlJiZ0aGlzLmVtaXQoImRhdGEiLEZlKSxGZX0sbGUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHZlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3Io''@;'; put 'put ''Il9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxsZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih2ZSxYZSl7dmFyIHplPXRoaXMsRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goRGUucGlwZXNDb3VudCl7Y2FzZSAwOkRlLnBpcGVzPXZlO2JyZWFrO2Nhc2UgMTpEZS5waXBlcz1b''@;'; put 'put ''RGUucGlwZXMsdmVdO2JyZWFrO2RlZmF1bHQ6RGUucGlwZXMucHVzaCh2ZSl9RGUucGlwZXNDb3VudCs9MSxXKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLERlLnBpcGVzQ291bnQsWGUpO3ZhciBPZT1YZSYmITE9PT1YZS5lbmR8fHZlPT09SS5zdGRvdXR8fHZlPT09SS5zdGRlcnI/RHQ6VmU7''@;'; put 'put ''ZnVuY3Rpb24gVmUoKXtXKCJvbmVuZCIpLHZlLmVuZCgpfURlLmVuZEVtaXR0ZWQ/Xy5uZXh0VGljayhPZSk6emUub25jZSgiZW5kIixPZSksdmUub24oInVucGlwZSIsZnVuY3Rpb24gSWUoaXQsJGUpe1coIm9udW5waXBlIiksaXQ9PT16ZSYmJGUmJiExPT09JGUuaGFzVW5waXBlZCYmKCRl''@;'; put 'put ''Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gX3QoKXtXKCJjbGVhbnVwIiksdmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix5dCksdmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTXQpLHZlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsa2UpLHZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdW4pLHZl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEllKSx6ZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixWZSksemUucmVtb3ZlTGlzdGVuZXIoImVuZCIsRHQpLHplLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixRZSksQWU9ITAsRGUuYXdhaXREcmFpbiYmKCF2ZS5fd3JpdGFibGVTdGF0ZXx8dmUuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUubmVlZERyYWluKSYma2UoKX0oKSl9KTt2YXIga2U9ZnVuY3Rpb24gaih2ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO1coInBpcGVPbkRyYWluIixYZS5hd2FpdERyYWluKSxYZS5hd2FpdERyYWluJiZYZS5hd2FpdERyYWluLS0sMD09PVhl''@;'; put 'put ''LmF3YWl0RHJhaW4mJlAodmUsImRhdGEiKSYmKFhlLmZsb3dpbmc9ITAsYWUodmUpKX19KHplKTt2ZS5vbigiZHJhaW4iLGtlKTt2YXIgQWU9ITEsbnQ9ITE7ZnVuY3Rpb24gUWUoaXQpe1coIm9uZGF0YSIpLG50PSExLCExPT09dmUud3JpdGUoaXQpJiYhbnQmJigoMT09PURlLnBpcGVzQ291''@;'; put 'put ''bnQmJkRlLnBpcGVzPT09dmV8fERlLnBpcGVzQ291bnQ+MSYmLTEhPT14ZShEZS5waXBlcyx2ZSkpJiYhQWUmJihXKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLERlLmF3YWl0RHJhaW4pLERlLmF3YWl0RHJhaW4rKyxudD0hMCksemUucGF1c2UoKSl9ZnVuY3Rpb24gdW4oaXQpe1co''@;'; put 'put ''Im9uZXJyb3IiLGl0KSxEdCgpLHZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdW4pLDA9PT1QKHZlLCJlcnJvciIpJiZ2ZS5lbWl0KCJlcnJvciIsaXQpfWZ1bmN0aW9uIHl0KCl7dmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTXQpLER0KCl9ZnVuY3Rpb24gTXQoKXtXKCJvbmZpbmlzaCIp''@;'; put 'put ''LHZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIseXQpLER0KCl9ZnVuY3Rpb24gRHQoKXtXKCJ1bnBpcGUiKSx6ZS51bnBpcGUodmUpfXJldHVybiB6ZS5vbigiZGF0YSIsUWUpLGZ1bmN0aW9uIG5lKHZlLFhlLHplKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdmUucHJlcGVuZExpc3RlbmVyKXJl''@;'; put 'put ''dHVybiB2ZS5wcmVwZW5kTGlzdGVuZXIoWGUsemUpO3ZlLl9ldmVudHMmJnZlLl9ldmVudHNbWGVdP2codmUuX2V2ZW50c1tYZV0pP3ZlLl9ldmVudHNbWGVdLnVuc2hpZnQoemUpOnZlLl9ldmVudHNbWGVdPVt6ZSx2ZS5fZXZlbnRzW1hlXV06dmUub24oWGUsemUpfSh2ZSwiZXJyb3IiLHVu''@;'; put 'put ''KSx2ZS5vbmNlKCJjbG9zZSIseXQpLHZlLm9uY2UoImZpbmlzaCIsTXQpLHZlLmVtaXQoInBpcGUiLHplKSxEZS5mbG93aW5nfHwoVygicGlwZSByZXN1bWUiKSx6ZS5yZXN1bWUoKSksdmV9LGxlLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odmUpe3ZhciBYZT10aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLHplPXtoYXNVbnBpcGVkOiExfTtpZigwPT09WGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09WGUucGlwZXNDb3VudClyZXR1cm4gdmUmJnZlIT09WGUucGlwZXN8fCh2ZXx8KHZlPVhlLnBpcGVzKSxYZS5waXBlcz1udWxsLFhlLnBpcGVzQ291bnQ9MCxYZS5mbG93aW5nPSEx''@;'; put 'put ''LHZlJiZ2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsemUpKSx0aGlzO2lmKCF2ZSl7dmFyIERlPVhlLnBpcGVzLEZlPVhlLnBpcGVzQ291bnQ7WGUucGlwZXM9bnVsbCxYZS5waXBlc0NvdW50PTAsWGUuZmxvd2luZz0hMTtmb3IodmFyIE9lPTA7T2U8RmU7T2UrKylEZVtPZV0uZW1pdCgidW5waXBl''@;'; put 'put ''Iix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEllPXhlKFhlLnBpcGVzLHZlKTtyZXR1cm4tMT09PUllfHwoWGUucGlwZXMuc3BsaWNlKEllLDEpLFhlLnBpcGVzQ291bnQtPTEsMT09PVhlLnBpcGVzQ291bnQmJihYZS5waXBlcz1YZS5waXBlc1swXSksdmUuZW1pdCgi''@;'; put 'put ''dW5waXBlIix0aGlzLHplKSksdGhpc30sbGUucHJvdG90eXBlLmFkZExpc3RlbmVyPWxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih2ZSxYZSl7dmFyIHplPUYucHJvdG90eXBlLm9uLmNhbGwodGhpcyx2ZSxYZSk7aWYoImRhdGEiPT09dmUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dp''@;'; put 'put ''bmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09dmUpe3ZhciBEZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFEZS5lbmRFbWl0dGVkJiYhRGUucmVhZGFibGVMaXN0ZW5pbmcmJihEZS5yZWFkYWJsZUxpc3RlbmluZz1EZS5uZWVkUmVhZGFibGU9ITAsRGUuZW1pdHRlZFJlYWRh''@;'; put 'put ''YmxlPSExLERlLnJlYWRpbmc/RGUubGVuZ3RoJiZ4KHRoaXMpOl8ubmV4dFRpY2soRSx0aGlzKSl9cmV0dXJuIHplfSxsZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHZlLmZsb3dpbmd8fChXKCJyZXN1bWUiKSx2ZS5mbG93''@;'; put 'put ''aW5nPSEwLGZ1bmN0aW9uIG0odmUsWGUpe1hlLnJlc3VtZVNjaGVkdWxlZHx8KFhlLnJlc3VtZVNjaGVkdWxlZD0hMCxfLm5leHRUaWNrKEEsdmUsWGUpKX0odGhpcyx2ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBXKCJjYWxsIHBhdXNlIGZsb3dpbmc9''@;'; put 'put ''JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihXKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LGxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHZl''@;'; put 'put ''KXt2YXIgWGU9dGhpcyx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlLERlPSExO2Zvcih2YXIgRmUgaW4gdmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihXKCJ3cmFwcGVkIGVuZCIpLHplLmRlY29kZXImJiF6ZS5lbmRlZCl7dmFyIEllPXplLmRlY29kZXIuZW5kKCk7SWUmJkllLmxlbmd0aCYmWGUu''@;'; put 'put ''cHVzaChJZSl9WGUucHVzaChudWxsKX0pLHZlLm9uKCJkYXRhIixmdW5jdGlvbihJZSl7Vygid3JhcHBlZCBkYXRhIiksemUuZGVjb2RlciYmKEllPXplLmRlY29kZXIud3JpdGUoSWUpKSx6ZS5vYmplY3RNb2RlJiZudWxsPT1JZXx8ISh6ZS5vYmplY3RNb2RlfHxJZSYmSWUubGVuZ3RoKXx8''@;'; put 'put ''WGUucHVzaChJZSl8fChEZT0hMCx2ZS5wYXVzZSgpKX0pLHZlKXZvaWQgMD09PXRoaXNbRmVdJiYiZnVuY3Rpb24iPT10eXBlb2YgdmVbRmVdJiYodGhpc1tGZV09ZnVuY3Rpb24oSWUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2ZVtJZV0uYXBwbHkodmUsYXJndW1lbnRzKX19KEZlKSk7''@;'; put 'put ''Zm9yKHZhciBPZT0wO09lPEoubGVuZ3RoO09lKyspdmUub24oSltPZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxKW09lXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKEllKXtXKCJ3cmFwcGVkIF9yZWFkIixJZSksRGUmJihEZT0hMSx2ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShsZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxsZS5fZnJvbUxpc3Q9dGV9LDM5MTI6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dWUuZXhwb3J0cz1CO3ZhciBJPXkoNDM5MCksXz1PYmplY3QuY3JlYXRlKHkoNjQ5NykpO2Z1bmN0aW9uIGcoRixPKXt2YXIgej10aGlzLl90cmFuc2Zvcm1TdGF0ZTt6LnRyYW5zZm9ybWluZz0hMTt2YXIgTj16LndyaXRlY2I7aWYoIU4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5l''@;'; put 'put ''dyBFcnJvcigid3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikpO3oud3JpdGVjaHVuaz1udWxsLHoud3JpdGVjYj1udWxsLG51bGwhPU8mJnRoaXMucHVzaChPKSxOKEYpO3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7TC5yZWFkaW5nPSExLChMLm5lZWRSZWFkYWJsZXx8''@;'; put 'put ''TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIEIoRil7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKEYpO0kuY2FsbCh0aGlzLEYpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpnLmJp''@;'; put 'put ''bmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxGJiYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEYudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUYudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRi5mbHVzaCYmKHRoaXMuX2ZsdXNoPUYuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHcpfWZ1bmN0aW9uIHcoKXt2YXIgRj10aGlzOyJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLl9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbihPLHope1AoRixPLHopfSk6UCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gUChGLE8seil7aWYoTylyZXR1cm4gRi5lbWl0KCJlcnJvciIsTyk7aWYobnVsbCE9eiYmRi5wdXNoKHopLEYuX3dyaXRhYmxlU3RhdGUubGVu''@;'; put 'put ''Z3RoKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoRi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIp''@;'; put 'put ''O3JldHVybiBGLnB1c2gobnVsbCl9Xy5pbmhlcml0cz15KDU3MTcpLF8uaW5oZXJpdHMoQixJKSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixPKX0s''@;'; put 'put ''Qi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihGLE8seil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLE8seil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNi''@;'; put 'put ''PXosTi53cml0ZWNodW5rPUYsTi53cml0ZWVuY29kaW5nPU8sIU4udHJhbnNmb3JtaW5nKXt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFy''@;'; put 'put ''ayl9fSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgTz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ty53cml0ZWNodW5rJiZPLndyaXRlY2ImJiFPLnRyYW5zZm9ybWluZz8oTy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKE8ud3JpdGVjaHVuayxPLndyaXRl''@;'; put 'put ''ZW5jb2RpbmcsTy5hZnRlclRyYW5zZm9ybSkpOk8ubmVlZFRyYW5zZm9ybT0hMH0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixPKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe08oTiksei5lbWl0KCJjbG9zZSIpfSl9fSwy''@;'; put 'put ''MDEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDgyMTIpO2Z1bmN0aW9uIEIobSl7dmFyIEE9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gRShtLEEsYWUpe3ZhciB0ZT1tLmVudHJ5''@;'; put 'put ''O2ZvcihtLmVudHJ5PW51bGw7dGU7KXt2YXIgc2U9dGUuY2FsbGJhY2s7QS5wZW5kaW5nY2ItLSxzZShhZSksdGU9dGUubmV4dH1BLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW19KEEsbSl9fXVlLmV4cG9ydHM9Sjt2YXIgUCx3PSFJLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4''@;'; put 'put ''T2YoSS52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpfLm5leHRUaWNrO0ouV3JpdGFibGVTdGF0ZT1xO3ZhciBGPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7Ri5pbmhlcml0cz15KDU3MTcpO3ZhciBlZSxPPXtkZXByZWNhdGU6eSg0OTI3KX0sej15KDk4MTkpLE49eSgxNTcy''@;'; put 'put ''KS5CdWZmZXIsTD0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFc9eSg1OTk3KTtmdW5jdGlvbiBZKCl7fWZ1bmN0aW9uIHEobSxBKXtQPVB8fHkoNDM5MCk7dmFyIGFl''@;'; put 'put ''PUEgaW5zdGFuY2VvZiBQO3RoaXMub2JqZWN0TW9kZT0hIShtPW18fHt9KS5vYmplY3RNb2RlLGFlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFtLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIHRlPW0uaGlnaFdhdGVyTWFyayxzZT1tLndyaXRhYmxlSGlnaFdhdGVyTWFy''@;'; put 'put ''azt0aGlzLmhpZ2hXYXRlck1hcms9dGV8fDA9PT10ZT90ZTphZSYmKHNlfHwwPT09c2UpP3NlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49''@;'; put 'put ''ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09bS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1tLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVu''@;'; put 'put ''Z3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oSmUpeyFmdW5jdGlvbiBqZShtLEEpe3ZhciBhZT1tLl93cml0YWJsZVN0YXRlLHRlPWFlLnN5bmMsc2U9YWUud3JpdGVj''@;'; put 'put ''YjtpZihmdW5jdGlvbiBTZShtKXttLndyaXRpbmc9ITEsbS53cml0ZWNiPW51bGwsbS5sZW5ndGgtPW0ud3JpdGVsZW4sbS53cml0ZWxlbj0wfShhZSksQSkhZnVuY3Rpb24gVGUobSxBLGFlLHRlLHNlKXstLUEucGVuZGluZ2NiLGFlPyhfLm5leHRUaWNrKHNlLHRlKSxfLm5leHRUaWNrKEgs''@;'; put 'put ''bSxBKSxtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtLmVtaXQoImVycm9yIix0ZSkpOihzZSh0ZSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsdGUpLEgobSxBKSl9KG0sYWUsdGUsQSxzZSk7ZWxzZXt2YXIgd2U9eChhZSk7IXdlJiYh''@;'; put 'put ''YWUuY29ya2VkJiYhYWUuYnVmZmVyUHJvY2Vzc2luZyYmYWUuYnVmZmVyZWRSZXF1ZXN0JiZiKG0sYWUpLHRlP3coVixtLGFlLHdlLHNlKTpWKG0sYWUsd2Usc2UpfX0oQSxKZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRo''@;'; put 'put ''aXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEIodGhpcyl9ZnVuY3Rpb24gSihtKXtp''@;'; put 'put ''ZihQPVB8fHkoNDM5MCksIShlZS5jYWxsKEosdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IEoobSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgcShtLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9''@;'; put 'put ''bS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhpcy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5h''@;'; put 'put ''bCkpLHouY2FsbCh0aGlzKX1mdW5jdGlvbiBfZShtLEEsYWUsdGUsc2Usd2UsVWUpe0Eud3JpdGVsZW49dGUsQS53cml0ZWNiPVVlLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsYWU/bS5fd3JpdGV2KHNlLEEub253cml0ZSk6bS5fd3JpdGUoc2Usd2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVu''@;'; put 'put ''Y3Rpb24gVihtLEEsYWUsdGUpe2FlfHxmdW5jdGlvbiBwKG0sQSl7MD09PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVlZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSksQS5wZW5kaW5nY2ItLSx0ZSgpLEgobSxBKX1mdW5jdGlvbiBiKG0sQSl7QS5idWZmZXJQcm9jZXNzaW5n''@;'; put 'put ''PSEwO3ZhciBhZT1BLmJ1ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYmJmFlJiZhZS5uZXh0KXt2YXIgc2U9bmV3IEFycmF5KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHdlPUEuY29ya2VkUmVxdWVzdHNGcmVlO3dlLmVudHJ5PWFlO2Zvcih2YXIgVWU9MCxKZT0hMDthZTspc2VbVWVdPWFl''@;'; put 'put ''LGFlLmlzQnVmfHwoSmU9ITEpLGFlPWFlLm5leHQsVWUrPTE7c2UuYWxsQnVmZmVycz1KZSxfZShtLEEsITAsQS5sZW5ndGgsc2UsIiIsd2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHdlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPXdlLm5l''@;'; put 'put ''eHQsd2UubmV4dD1udWxsKTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2FlOyl7dmFyIG90PWFlLmNodW5rO2lmKF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTpvdC5sZW5ndGgsb3QsYWUuZW5jb2RpbmcsYWUuY2FsbGJh''@;'; put 'put ''Y2spLGFlPWFlLm5leHQsQS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEud3JpdGluZylicmVha31udWxsPT09YWUmJihBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJlZFJlcXVlc3Q9YWUsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5k''@;'; put 'put ''aW5nJiYwPT09bS5sZW5ndGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVzdCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVuY3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKGFlKXtBLnBlbmRpbmdjYi0tLGFlJiZtLmVtaXQoImVycm9yIixhZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVt''@;'; put 'put ''aXQoInByZWZpbmlzaCIpLEgobSxBKX0pfWZ1bmN0aW9uIEgobSxBKXt2YXIgYWU9eChBKTtyZXR1cm4gYWUmJihmdW5jdGlvbiBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxD''@;'; put 'put ''YWxsZWQ9ITAsXy5uZXh0VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxBKSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEwLG0uZW1pdCgiZmluaXNoIikpKSxhZX1GLmluaGVyaXRzKEoseikscS5wcm90b3R5cGUuZ2V0QnVmZmVy''@;'; put 'put ''PWZ1bmN0aW9uKCl7Zm9yKHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGFlPVtdO0E7KWFlLnB1c2goQSksQT1BLm5leHQ7cmV0dXJuIGFlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpPLmRlcHJlY2F0ZShmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5o''@;'; put 'put ''YXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhlZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1''@;'; put 'put ''bmN0aW9uKG0pe3JldHVybiEhZWUuY2FsbCh0aGlzLG0pfHx0aGlzPT09SiYmbSYmbS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIHF9fSkpOmVlPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpc30sSi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJy''@;'; put 'put ''b3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sSi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxBLGFlKXt2YXIgdGU9dGhpcy5fd3JpdGFibGVTdGF0ZSxzZT0hMSx3ZT0hdGUub2JqZWN0TW9kZSYmZnVuY3Rpb24gVShtKXtyZXR1cm4gTi5pc0J1ZmZlciht''@;'; put 'put ''KXx8bSBpbnN0YW5jZW9mIEx9KG0pO3JldHVybiB3ZSYmIU4uaXNCdWZmZXIobSkmJihtPWZ1bmN0aW9uIEsobSl7cmV0dXJuIE4uZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLHdlP0E9ImJ1ZmZlciI6QXx8KEE9dGUuZGVmYXVsdEVuY29kaW5nKSwi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgYWUmJihhZT1ZKSx0ZS5lbmRlZD9mdW5jdGlvbiBuZShtLEEpe3ZhciBhZT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3IiLGFlKSxfLm5leHRUaWNrKEEsYWUpfSh0aGlzLGFlKTood2V8fGZ1bmN0aW9uIGllKG0sQSxhZSx0ZSl7''@;'; put 'put ''dmFyIHNlPSEwLHdlPSExO3JldHVybiBudWxsPT09YWU/d2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIUEub2JqZWN0TW9kZSYmKHdlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQg''@;'; put 'put ''bm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksd2UmJihtLmVtaXQoImVycm9yIix3ZSksXy5uZXh0VGljayh0ZSx3ZSksc2U9ITEpLHNlfSh0aGlzLHRlLG0sYWUpKSYmKHRlLnBlbmRpbmdjYisrLHNlPWZ1bmN0aW9uIG1lKG0sQSxhZSx0ZSxzZSx3ZSl7aWYoIWFlKXt2YXIgVWU9ZnVuY3Rp''@;'; put 'put ''b24gbGUobSxBLGFlKXtyZXR1cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0uZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBBJiYoQT1OLmZyb20oQSxhZSkpLEF9KEEsdGUsc2UpO3RlIT09VWUmJihhZT0hMCxzZT0iYnVmZmVyIix0ZT1VZSl9dmFyIEplPUEub2JqZWN0TW9kZT8xOnRl''@;'; put 'put ''Lmxlbmd0aDtBLmxlbmd0aCs9SmU7dmFyIG90PUEubGVuZ3RoPEEuaGlnaFdhdGVyTWFyaztpZihvdHx8KEEubmVlZERyYWluPSEwKSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgeGU9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6dGUsZW5jb2Rp''@;'; put 'put ''bmc6c2UsaXNCdWY6YWUsY2FsbGJhY2s6d2UsbmV4dDpudWxsfSx4ZT94ZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJlcXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxKZSx0ZSxzZSx3ZSk7''@;'; put 'put ''cmV0dXJuIG90fSh0aGlzLHRlLHdlLG0sQSxhZSkpLHNlfSxKLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29y''@;'; put 'put ''a2VkLS0sIW0ud3JpdGluZyYmIW0uY29ya2VkJiYhbS5idWZmZXJQcm9jZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmYih0aGlzLG0pKX0sSi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChBKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGlu''@;'; put 'put ''ZzogIitBKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxKLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obSxBLGFlKXthZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sSi5wcm90b3R5cGUuX3dyaXRldj1udWxsLEoucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsYWUp''@;'; put 'put ''e3ZhciB0ZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBtPyhhZT1tLG09bnVsbCxBPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSx0ZS5jb3JrZWQmJih0ZS5jb3JrZWQ9MSx0aGlzLnVuY29y''@;'; put 'put ''aygpKSx0ZS5lbmRpbmd8fGZ1bmN0aW9uIGoobSxBLGFlKXtBLmVuZGluZz0hMCxIKG0sQSksYWUmJihBLmZpbmlzaGVkP18ubmV4dFRpY2soYWUpOm0ub25jZSgiZmluaXNoIixhZSkpLEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyx0ZSxhZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShKLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZGVzdHJveWVkPW0pfX0pLEoucHJvdG90eXBlLmRlc3Ryb3k9Vy5kZXN0cm95LEoucHJvdG90eXBlLl91bmRlc3Ryb3k9Vy51bmRlc3Ryb3ksSi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBfPXkoMTU3MikuQnVmZmVyLGc9eSg2NDE5KTtmdW5jdGlvbiBCKHcsUCxGKXt3LmNvcHkoUCxGKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNh''@;'; put 'put ''bGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWls''@;'; put 'put ''Lm5leHQ9Tzp0aGlzLmhlYWQ9Tyx0aGlzLnRhaWw9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1PKSx0aGlzLmhlYWQ9TywrK3RoaXMubGVuZ3Ro''@;'; put 'put ''fSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEY9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUu''@;'; put 'put ''Y2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBPPXRoaXMuaGVhZCx6PSIiK08uZGF0YTtPPU8ubmV4dDspeis9RitPLmRh''@;'; put 'put ''dGE7cmV0dXJuIHp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBPPV8uYWxsb2NVbnNhZmUoRj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylCKHouZGF0YSxPLE4pLE4rPXouZGF0YS5sZW5ndGgsej16''@;'; put 'put ''Lm5leHQ7cmV0dXJuIE99LHd9KCksZyYmZy5pbnNwZWN0JiZnLmluc3BlY3QuY3VzdG9tJiYodWUuZXhwb3J0cy5wcm90b3R5cGVbZy5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1nLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9y''@;'; put 'put ''Lm5hbWUrIiAiK3d9KX0sNTk5NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDgyMTIpO2Z1bmN0aW9uIEIodyxQKXt3LmVtaXQoImVycm9yIixQKX11ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''JiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQix0aGlzLHcpKTpJLm5leHRUaWNrKEIsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQixGLE4pKTpJLm5l''@;'; put 'put ''eHRUaWNrKEIsRixOKTpQJiZQKE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBnKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVk''@;'; put 'put ''PSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoNzE4Nyku''@;'; put 'put ''RXZlbnRFbWl0dGVyfSwxNTcyOih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5h''@;'; put 'put ''bGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEksWCksWC5CdWZmZXI9QiksZyhfLEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQ''@;'; put 'put ''LEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmls''@;'; put 'put ''bChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSwzODcyOih1ZSxYLHkpPT57KFg9dWUuZXhwb3J0cz15KDQ5NjApKS5TdHJlYW09WCxYLlJlYWRhYmxlPVgsWC5Xcml0YWJsZT15KDIw''@;'; put 'put ''MTApLFguRHVwbGV4PXkoNDM5MCksWC5UcmFuc2Zvcm09eSgzOTEyKSxYLlBhc3NUaHJvdWdoPXkoMTI5NCl9LDIyMjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzY0KS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1''@;'; put 'put ''cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIG5lO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIG5lPWZ1bmN0aW9uIGcoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgbmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2Fz''@;'; put 'put ''ZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihuZSly''@;'; put 'put ''ZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxuZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgbmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiBuZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2Fz''@;'; put 'put ''ZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLG5lPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXosbmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9WSxuZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRo''@;'; put 'put ''aXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUobmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEop''@;'; put 'put ''e3ZhciBuZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIE8oSixuZSxpZSl7aWYoMTI4IT0oMTkyJm5lWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmbmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZuZVsxXSkpcmV0dXJu''@;'; put 'put ''IEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJm5lLmxlbmd0aD4yJiYxMjghPSgxOTImbmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRo''@;'; put 'put ''aXMubGFzdENoYXIsbmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24g''@;'; put 'put ''SyhKLG5lKXtpZigoSi5sZW5ndGgtbmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZihsZT49NTUyOTYmJmxlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFs''@;'; put 'put ''PTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRv''@;'; put 'put ''U3RyaW5nKCJ1dGYxNmxlIixuZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBVKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0''@;'; put 'put ''TmVlZCk6bmV9ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9KEoubGVuZ3RoLW5lKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixuZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRo''@;'; put 'put ''aXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIsbmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBZKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3RO''@;'; put 'put ''ZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5zPXcs''@;'; put 'put ''dy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciBuZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0obmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBp''@;'; put 'put ''ZT0wO3JldHVybiBpZTxKLmxlbmd0aD9uZT9uZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOm5lfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrIlx1ZmZm''@;'; put 'put ''ZCI6bmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9ZnVuY3Rpb24gRihKLG5lLGllKXt2YXIgbGU9bmUubGVuZ3RoLTE7aWYobGU8aWUpcmV0dXJuIDA7dmFyIG1lPVAobmVbbGVdKTtyZXR1cm4gbWU+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTot''@;'; put 'put ''LWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpKLmxhc3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEosbmUpO2lmKCF0aGlz''@;'; put 'put ''Lmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixuZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCxsZSksSi50b1N0cmluZygidXRmOCIsbmUsbGUpfSx3LnByb3RvdHlwZS5m''@;'; put 'put ''aWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMu''@;'; put 'put ''bGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sMzM2NDoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBG''@;'; put 'put ''IGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVm''@;'; put 'put ''ZmVyKHcpfX0sNzI5NToodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHc9TWF0aC5taW4oZy5sZW5ndGgsQi5sZW5ndGgpLFA9bmV3IEkodyksRj0wO0Y8dzsrK0YpUFtGXT1nW0ZdXkJbRl07cmV0dXJuIFB9fSw4NzY0Oih1''@;'; put 'put ''ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCk7Y29uc3QgXz15KDk3NDIpLGc9eSg2NDUpLEI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxs''@;'; put 'put ''O1guQnVmZmVyPU8sWC5TbG93QnVmZmVyPWZ1bmN0aW9uIG5lKCRlKXtyZXR1cm4rJGUhPSRlJiYoJGU9MCksTy5hbGxvYygrJGUpfSxYLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IHc9MjE0NzQ4MzY0NztmdW5jdGlvbiBGKCRlKXtpZigkZT53KXRocm93IG5ldyBSYW5nZUVycm9yKCdU''@;'; put 'put ''aGUgdmFsdWUgIicrJGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KCRlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LE8ucHJvdG90eXBlKSx0dH1mdW5jdGlvbiBPKCRlLHR0LEhlKXtpZigibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''ICRlKXtpZigic3RyaW5nIj09dHlwZW9mIHR0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBLKCRlKX1yZXR1cm4geigkZSx0dCxIZSl9ZnVuY3Rpb24geigkZSx0''@;'; put 'put ''dCxIZSl7aWYoInN0cmluZyI9PXR5cGVvZiAkZSlyZXR1cm4gZnVuY3Rpb24gVSgkZSx0dCl7aWYoKCJzdHJpbmciIT10eXBlb2YgdHR8fCIiPT09dHQpJiYodHQ9InV0ZjgiKSwhTy5pc0VuY29kaW5nKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3R0KTtj''@;'; put 'put ''b25zdCBIZT0wfGllKCRlLHR0KTtsZXQgdXQ9RihIZSk7Y29uc3QgcXQ9dXQud3JpdGUoJGUsdHQpO3JldHVybiBxdCE9PUhlJiYodXQ9dXQuc2xpY2UoMCxxdCkpLHV0fSgkZSx0dCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCRlKSlyZXR1cm4gZnVuY3Rpb24gWSgkZSl7aWYodW4oJGUsVWlu''@;'; put 'put ''dDhBcnJheSkpe2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KCRlKTtyZXR1cm4gcSh0dC5idWZmZXIsdHQuYnl0ZU9mZnNldCx0dC5ieXRlTGVuZ3RoKX1yZXR1cm4gVygkZSl9KCRlKTtpZihudWxsPT0kZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBv''@;'; put 'put ''bmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiAkZSk7aWYodW4oJGUsQXJyYXlCdWZmZXIpfHwkZSYmdW4oJGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFy''@;'; put 'put ''cmF5QnVmZmVyPCJ1IiYmKHVuKCRlLFNoYXJlZEFycmF5QnVmZmVyKXx8JGUmJnVuKCRlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBxKCRlLHR0LEhlKTtpZigibnVtYmVyIj09dHlwZW9mICRlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11''@;'; put 'put ''c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IHV0PSRlLnZhbHVlT2YmJiRlLnZhbHVlT2YoKTtpZihudWxsIT11dCYmdXQhPT0kZSlyZXR1cm4gTy5mcm9tKHV0LHR0LEhlKTtjb25zdCBxdD1mdW5jdGlvbiBlZSgkZSl7aWYoTy5pc0J1ZmZl''@;'; put 'put ''cigkZSkpe2NvbnN0IHR0PTB8SigkZS5sZW5ndGgpLEhlPUYodHQpO3JldHVybiAwPT09SGUubGVuZ3RofHwkZS5jb3B5KEhlLDAsMCx0dCksSGV9cmV0dXJuIHZvaWQgMCE9PSRlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mICRlLmxlbmd0aHx8eXQoJGUubGVuZ3RoKT9GKDApOlcoJGUpOiJC''@;'; put 'put ''dWZmZXIiPT09JGUudHlwZSYmQXJyYXkuaXNBcnJheSgkZS5kYXRhKT9XKCRlLmRhdGEpOnZvaWQgMH0oJGUpO2lmKHF0KXJldHVybiBxdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgJGVbU3ltYm9sLnRvUHJpbWl0''@;'; put 'put ''aXZlXSlyZXR1cm4gTy5mcm9tKCRlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHR0LEhlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1s''@;'; put 'put ''aWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiAkZSl9ZnVuY3Rpb24gTigkZSl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKCRlPDApdGhyb3cgbmV3IFJhbmdlRXJy''@;'; put 'put ''b3IoJ1RoZSB2YWx1ZSAiJyskZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gSygkZSl7cmV0dXJuIE4oJGUpLEYoJGU8MD8wOjB8SigkZSkpfWZ1bmN0aW9uIFcoJGUpe2NvbnN0IHR0PSRlLmxlbmd0aDwwPzA6MHxKKCRlLmxlbmd0aCksSGU9Rih0dCk7Zm9y''@;'; put 'put ''KGxldCB1dD0wO3V0PHR0O3V0Kz0xKUhlW3V0XT0yNTUmJGVbdXRdO3JldHVybiBIZX1mdW5jdGlvbiBxKCRlLHR0LEhlKXtpZih0dDwwfHwkZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZigkZS5i''@;'; put 'put ''eXRlTGVuZ3RoPHR0KyhIZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCB1dDtyZXR1cm4gdXQ9dm9pZCAwPT09dHQmJnZvaWQgMD09PUhlP25ldyBVaW50OEFycmF5KCRlKTp2b2lkIDA9PT1IZT9uZXcgVWludDhB''@;'; put 'put ''cnJheSgkZSx0dCk6bmV3IFVpbnQ4QXJyYXkoJGUsdHQsSGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih1dCxPLnByb3RvdHlwZSksdXR9ZnVuY3Rpb24gSigkZSl7aWYoJGU+PXcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1h''@;'; put 'put ''eGltdW0gc2l6ZTogMHgiK3cudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHwkZX1mdW5jdGlvbiBpZSgkZSx0dCl7aWYoTy5pc0J1ZmZlcigkZSkpcmV0dXJuICRlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJGUpfHx1bigkZSxBcnJheUJ1ZmZlcikpcmV0dXJuICRlLmJ5''@;'; put 'put ''dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgJGUpO2NvbnN0IEhlPSRl''@;'; put 'put ''Lmxlbmd0aCx1dD1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF1dCYmMD09PUhlKXJldHVybiAwO2xldCBxdD0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBIZTtjYXNlInV0ZjgiOmNhc2Ui''@;'; put 'put ''dXRmLTgiOnJldHVybiBrZSgkZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipIZTtjYXNlImhleCI6cmV0dXJuIEhlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG50KCRlKS5sZW5ndGg7ZGVmYXVsdDppZihxdCly''@;'; put 'put ''ZXR1cm4gdXQ/LTE6a2UoJGUpLmxlbmd0aDt0dD0oIiIrdHQpLnRvTG93ZXJDYXNlKCkscXQ9ITB9fWZ1bmN0aW9uIGxlKCRlLHR0LEhlKXtsZXQgdXQ9ITE7aWYoKHZvaWQgMD09PXR0fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUhlfHxIZT50aGlzLmxlbmd0''@;'; put 'put ''aCkmJihIZT10aGlzLmxlbmd0aCksSGU8PTApfHwoSGU+Pj49MCk8PSh0dD4+Pj0wKSlyZXR1cm4iIjtmb3IoJGV8fCgkZT0idXRmOCIpOzspc3dpdGNoKCRlKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0dCxIZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LEhl''@;'; put 'put ''KTtjYXNlImFzY2lpIjpyZXR1cm4gaih0aGlzLHR0LEhlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQsSGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0aGlzLHR0LEhlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZs''@;'; put 'put ''ZSI6cmV0dXJuIEEodGhpcyx0dCxIZSk7ZGVmYXVsdDppZih1dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiKyRlKTskZT0oJGUrIiIpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIG1lKCRlLHR0LEhlKXtjb25zdCB1dD0kZVt0dF07JGVbdHRdPSRlW0hl''@;'; put 'put ''XSwkZVtIZV09dXR9ZnVuY3Rpb24gX2UoJGUsdHQsSGUsdXQscXQpe2lmKDA9PT0kZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBIZT8odXQ9SGUsSGU9MCk6SGU+MjE0NzQ4MzY0Nz9IZT0yMTQ3NDgzNjQ3OkhlPC0yMTQ3NDgzNjQ4JiYoSGU9LTIxNDc0ODM2NDgpLHl0''@;'; put 'put ''KEhlPStIZSkmJihIZT1xdD8wOiRlLmxlbmd0aC0xKSxIZTwwJiYoSGU9JGUubGVuZ3RoK0hlKSxIZT49JGUubGVuZ3RoKXtpZihxdClyZXR1cm4tMTtIZT0kZS5sZW5ndGgtMX1lbHNlIGlmKEhlPDApe2lmKCFxdClyZXR1cm4tMTtIZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1P''@;'; put 'put ''LmZyb20odHQsdXQpKSxPLmlzQnVmZmVyKHR0KSlyZXR1cm4gMD09PXR0Lmxlbmd0aD8tMTpUZSgkZSx0dCxIZSx1dCxxdCk7aWYoIm51bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9xdD9VaW50''@;'; put 'put ''OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoJGUsdHQsSGUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoJGUsdHQsSGUpOlRlKCRlLFt0dF0sSGUsdXQscXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZl''@;'; put 'put ''ciIpfWZ1bmN0aW9uIFRlKCRlLHR0LEhlLHV0LHF0KXtsZXQgc24sUnQ9MSxQdD0kZS5sZW5ndGgsY2k9dHQubGVuZ3RoO2lmKHZvaWQgMCE9PXV0JiYoInVjczIiPT09KHV0PVN0cmluZyh1dCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT11dHx8InV0ZjE2bGUiPT09dXR8fCJ1dGYtMTZs''@;'; put 'put ''ZSI9PT11dCkpe2lmKCRlLmxlbmd0aDwyfHx0dC5sZW5ndGg8MilyZXR1cm4tMTtSdD0yLFB0Lz0yLGNpLz0yLEhlLz0yfWZ1bmN0aW9uIFF0KFJpLGhuKXtyZXR1cm4gMT09PVJ0P1JpW2huXTpSaS5yZWFkVUludDE2QkUoaG4qUnQpfWlmKHF0KXtsZXQgUmk9LTE7Zm9yKHNuPUhlO3NuPFB0''@;'; put 'put ''O3NuKyspaWYoUXQoJGUsc24pPT09UXQodHQsLTE9PT1SaT8wOnNuLVJpKSl7aWYoLTE9PT1SaSYmKFJpPXNuKSxzbi1SaSsxPT09Y2kpcmV0dXJuIFJpKlJ0fWVsc2UtMSE9PVJpJiYoc24tPXNuLVJpKSxSaT0tMX1lbHNlIGZvcihIZStjaT5QdCYmKEhlPVB0LWNpKSxzbj1IZTtzbj49MDtz''@;'; put 'put ''bi0tKXtsZXQgUmk9ITA7Zm9yKGxldCBobj0wO2huPGNpO2huKyspaWYoUXQoJGUsc24raG4pIT09UXQodHQsaG4pKXtSaT0hMTticmVha31pZihSaSlyZXR1cm4gc259cmV0dXJuLTF9ZnVuY3Rpb24gU2UoJGUsdHQsSGUsdXQpe0hlPU51bWJlcihIZSl8fDA7Y29uc3QgcXQ9JGUubGVuZ3Ro''@;'; put 'put ''LUhlO3V0Pyh1dD1OdW1iZXIodXQpKT5xdCYmKHV0PXF0KTp1dD1xdDtjb25zdCBSdD10dC5sZW5ndGg7bGV0IFB0O2Zvcih1dD5SdC8yJiYodXQ9UnQvMiksUHQ9MDtQdDx1dDsrK1B0KXtjb25zdCBjaT1wYXJzZUludCh0dC5zdWJzdHIoMipQdCwyKSwxNik7aWYoeXQoY2kpKXJldHVybiBQ''@;'; put 'put ''dDskZVtIZStQdF09Y2l9cmV0dXJuIFB0fWZ1bmN0aW9uIGplKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUoa2UodHQsJGUubGVuZ3RoLUhlKSwkZSxIZSx1dCl9ZnVuY3Rpb24gVigkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKGZ1bmN0aW9uIEFlKCRlKXtjb25zdCB0dD1bXTtmb3IobGV0IEhlPTA7''@;'; put 'put ''SGU8JGUubGVuZ3RoOysrSGUpdHQucHVzaCgyNTUmJGUuY2hhckNvZGVBdChIZSkpO3JldHVybiB0dH0odHQpLCRlLEhlLHV0KX1mdW5jdGlvbiBwKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUobnQodHQpLCRlLEhlLHV0KX1mdW5jdGlvbiBiKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUoZnVuY3Rp''@;'; put 'put ''b24gX3QoJGUsdHQpe2xldCBIZSx1dCxxdDtjb25zdCBSdD1bXTtmb3IobGV0IFB0PTA7UHQ8JGUubGVuZ3RoJiYhKCh0dC09Mik8MCk7KytQdClIZT0kZS5jaGFyQ29kZUF0KFB0KSx1dD1IZT4+OCxxdD1IZSUyNTYsUnQucHVzaChxdCksUnQucHVzaCh1dCk7cmV0dXJuIFJ0fSh0dCwkZS5s''@;'; put 'put ''ZW5ndGgtSGUpLCRlLEhlLHV0KX1mdW5jdGlvbiB4KCRlLHR0LEhlKXtyZXR1cm4gXy5mcm9tQnl0ZUFycmF5KDA9PT10dCYmSGU9PT0kZS5sZW5ndGg/JGU6JGUuc2xpY2UodHQsSGUpKX1mdW5jdGlvbiBDKCRlLHR0LEhlKXtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2NvbnN0IHV0PVtd''@;'; put 'put ''O2xldCBxdD10dDtmb3IoO3F0PEhlOyl7Y29uc3QgUnQ9JGVbcXRdO2xldCBQdD1udWxsLGNpPVJ0PjIzOT80OlJ0PjIyMz8zOlJ0PjE5MT8yOjE7aWYocXQrY2k8PUhlKXtsZXQgUXQsc24sUmksaG47c3dpdGNoKGNpKXtjYXNlIDE6UnQ8MTI4JiYoUHQ9UnQpO2JyZWFrO2Nhc2UgMjpRdD0k''@;'; put 'put ''ZVtxdCsxXSwxMjg9PSgxOTImUXQpJiYoaG49KDMxJlJ0KTw8Nnw2MyZRdCxobj4xMjcmJihQdD1obikpO2JyZWFrO2Nhc2UgMzpRdD0kZVtxdCsxXSxzbj0kZVtxdCsyXSwxMjg9PSgxOTImUXQpJiYxMjg9PSgxOTImc24pJiYoaG49KDE1JlJ0KTw8MTJ8KDYzJlF0KTw8Nnw2MyZzbixobj4y''@;'; put 'put ''MDQ3JiYoaG48NTUyOTZ8fGhuPjU3MzQzKSYmKFB0PWhuKSk7YnJlYWs7Y2FzZSA0OlF0PSRlW3F0KzFdLHNuPSRlW3F0KzJdLFJpPSRlW3F0KzNdLDEyOD09KDE5MiZRdCkmJjEyOD09KDE5MiZzbikmJjEyOD09KDE5MiZSaSkmJihobj0oMTUmUnQpPDwxOHwoNjMmUXQpPDwxMnwoNjMmc24p''@;'; put 'put ''PDw2fDYzJlJpLGhuPjY1NTM1JiZobjwxMTE0MTEyJiYoUHQ9aG4pKX19bnVsbD09PVB0PyhQdD02NTUzMyxjaT0xKTpQdD42NTUzNSYmKFB0LT02NTUzNix1dC5wdXNoKFB0Pj4+MTAmMTAyM3w1NTI5NiksUHQ9NTYzMjB8MTAyMyZQdCksdXQucHVzaChQdCkscXQrPWNpfXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBIKCRlKXtjb25zdCB0dD0kZS5sZW5ndGg7aWYodHQ8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlKTtsZXQgSGU9IiIsdXQ9MDtmb3IoO3V0PHR0OylIZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsJGUuc2xpY2UodXQsdXQrPVQp''@;'; put 'put ''KTtyZXR1cm4gSGV9KHV0KX1YLmtNYXhMZW5ndGg9dywhKE8uVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBQKCl7dHJ5e2NvbnN0ICRlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVp''@;'; put 'put ''bnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoJGUsdHQpLDQyPT09JGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIEk8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5lcnJvciYmSS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5''@;'; put 'put ''IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE8uaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0''@;'; put 'put ''aGlzLmJ5dGVPZmZzZXR9fSksTy5wb29sU2l6ZT04MTkyLE8uZnJvbT1mdW5jdGlvbigkZSx0dCxIZSl7cmV0dXJuIHooJGUsdHQsSGUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTy5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihPLFVpbnQ4''@;'; put 'put ''QXJyYXkpLE8uYWxsb2M9ZnVuY3Rpb24oJGUsdHQsSGUpe3JldHVybiBmdW5jdGlvbiBMKCRlLHR0LEhlKXtyZXR1cm4gTigkZSksJGU8PTA/RigkZSk6dm9pZCAwIT09dHQ/InN0cmluZyI9PXR5cGVvZiBIZT9GKCRlKS5maWxsKHR0LEhlKTpGKCRlKS5maWxsKHR0KTpGKCRlKX0oJGUsdHQs''@;'; put 'put ''SGUpfSxPLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKCRlKXtyZXR1cm4gSygkZSl9LE8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKCRlKXtyZXR1cm4gSygkZSl9LE8uaXNCdWZmZXI9ZnVuY3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ty5wcm90b3R5''@;'; put 'put ''cGV9LE8uY29tcGFyZT1mdW5jdGlvbih0dCxIZSl7aWYodW4odHQsVWludDhBcnJheSkmJih0dD1PLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSx1bihIZSxVaW50OEFycmF5KSYmKEhlPU8uZnJvbShIZSxIZS5vZmZzZXQsSGUuYnl0ZUxlbmd0aCkpLCFPLmlzQnVmZmVyKHR0''@;'; put 'put ''KXx8IU8uaXNCdWZmZXIoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHR0PT09SGUpcmV0dXJuIDA7bGV0IHV0PXR0Lmxlbmd0aCxxdD1IZS5sZW5ndGg7Zm9y''@;'; put 'put ''KGxldCBSdD0wLFB0PU1hdGgubWluKHV0LHF0KTtSdDxQdDsrK1J0KWlmKHR0W1J0XSE9PUhlW1J0XSl7dXQ9dHRbUnRdLHF0PUhlW1J0XTticmVha31yZXR1cm4gdXQ8cXQ/LTE6cXQ8dXQ/MTowfSxPLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVy''@;'; put 'put ''biExfX0sTy5jb25jYXQ9ZnVuY3Rpb24odHQsSGUpe2lmKCFBcnJheS5pc0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gTy5hbGxvYygwKTtsZXQgdXQ7aWYo''@;'; put 'put ''dm9pZCAwPT09SGUpZm9yKEhlPTAsdXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dClIZSs9dHRbdXRdLmxlbmd0aDtjb25zdCBxdD1PLmFsbG9jVW5zYWZlKEhlKTtsZXQgUnQ9MDtmb3IodXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dCl7bGV0IFB0PXR0W3V0XTtpZih1bihQdCxVaW50OEFycmF5KSlSdCtQ''@;'; put 'put ''dC5sZW5ndGg+cXQubGVuZ3RoPyhPLmlzQnVmZmVyKFB0KXx8KFB0PU8uZnJvbShQdCkpLFB0LmNvcHkocXQsUnQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxdCxQdCxSdCk7ZWxzZXtpZighTy5pc0J1ZmZlcihQdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3Vt''@;'; put 'put ''ZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1B0LmNvcHkocXQsUnQpfVJ0Kz1QdC5sZW5ndGh9cmV0dXJuIHF0fSxPLmJ5dGVMZW5ndGg9aWUsTy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLE8ucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3Ro''@;'; put 'put ''O2lmKHR0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBIZT0wO0hlPHR0O0hlKz0yKW1lKHRoaXMsSGUsSGUrMSk7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2Nv''@;'; put 'put ''bnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBIZT0wO0hlPHR0O0hlKz00KW1lKHRoaXMsSGUsSGUrMyksbWUodGhpcyxIZSsxLEhlKzIpO3JldHVybiB0''@;'; put 'put ''aGlzfSxPLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9OCltZSh0aGlz''@;'; put 'put ''LEhlLEhlKzcpLG1lKHRoaXMsSGUrMSxIZSs2KSxtZSh0aGlzLEhlKzIsSGUrNSksbWUodGhpcyxIZSszLEhlKzQpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1PLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVy''@;'; put 'put ''biAwPT09dHQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsdHQpOmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtpZighTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1''@;'; put 'put ''ZmZlciIpO3JldHVybiB0aGlzPT09dHR8fDA9PT1PLmNvbXBhcmUodGhpcyx0dCl9LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdHQ9IiI7Y29uc3QgSGU9WC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLEhlKS5yZXBsYWNlKC8o''@;'; put 'put ''LnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPkhlJiYodHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxCJiYoTy5wcm90b3R5cGVbQl09Ty5wcm90b3R5cGUuaW5zcGVjdCksTy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxIZSx1dCxxdCxSdCl7aWYodW4odHQs''@;'; put 'put ''VWludDhBcnJheSkmJih0dD1PLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSwhTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5''@;'; put 'put ''cGUgJyt0eXBlb2YgdHQpO2lmKHZvaWQgMD09PUhlJiYoSGU9MCksdm9pZCAwPT09dXQmJih1dD10dD90dC5sZW5ndGg6MCksdm9pZCAwPT09cXQmJihxdD0wKSx2b2lkIDA9PT1SdCYmKFJ0PXRoaXMubGVuZ3RoKSxIZTwwfHx1dD50dC5sZW5ndGh8fHF0PDB8fFJ0PnRoaXMubGVuZ3RoKXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihxdD49UnQmJkhlPj11dClyZXR1cm4gMDtpZihxdD49UnQpcmV0dXJuLTE7aWYoSGU+PXV0KXJldHVybiAxO2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUHQ9KFJ0Pj4+PTApLShxdD4+Pj0wKSxjaT0odXQ+Pj49''@;'; put 'put ''MCktKEhlPj4+PTApO2NvbnN0IFF0PU1hdGgubWluKFB0LGNpKSxzbj10aGlzLnNsaWNlKHF0LFJ0KSxSaT10dC5zbGljZShIZSx1dCk7Zm9yKGxldCBobj0wO2huPFF0OysraG4paWYoc25baG5dIT09UmlbaG5dKXtQdD1zbltobl0sY2k9UmlbaG5dO2JyZWFrfXJldHVybiBQdDxjaT8tMTpj''@;'; put 'put ''aTxQdD8xOjB9LE8ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxIZSx1dCl9LE8ucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEhlLHV0LCEwKX0sTy5wcm90b3R5cGUu''@;'; put 'put ''bGFzdEluZGV4T2Y9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEhlLHV0LCExKX0sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHZvaWQgMD09PUhlKXF0PSJ1dGY4Iix1dD10aGlzLmxlbmd0aCxIZT0wO2Vsc2UgaWYodm9pZCAwPT09dXQm''@;'; put 'put ''JiJzdHJpbmciPT10eXBlb2YgSGUpcXQ9SGUsdXQ9dGhpcy5sZW5ndGgsSGU9MDtlbHNle2lmKCFpc0Zpbml0ZShIZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0hlPj4+''@;'; put 'put ''PTAsaXNGaW5pdGUodXQpPyh1dD4+Pj0wLHZvaWQgMD09PXF0JiYocXQ9InV0ZjgiKSk6KHF0PXV0LHV0PXZvaWQgMCl9Y29uc3QgUnQ9dGhpcy5sZW5ndGgtSGU7aWYoKHZvaWQgMD09PXV0fHx1dD5SdCkmJih1dD1SdCksdHQubGVuZ3RoPjAmJih1dDwwfHxIZTwwKXx8SGU+dGhpcy5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cXR8fChxdD0idXRmOCIpO2xldCBQdD0hMTtmb3IoOzspc3dpdGNoKHF0KXtjYXNlImhleCI6cmV0dXJuIFNlKHRoaXMsdHQsSGUsdXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYt''@;'; put 'put ''OCI6cmV0dXJuIGplKHRoaXMsdHQsSGUsdXQpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFYodGhpcyx0dCxIZSx1dCk7Y2FzZSJiYXNlNjQiOnJldHVybiBwKHRoaXMsdHQsSGUsdXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpj''@;'; put 'put ''YXNlInV0Zi0xNmxlIjpyZXR1cm4gYih0aGlzLHR0LEhlLHV0KTtkZWZhdWx0OmlmKFB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO3F0PSgiIitxdCkudG9Mb3dlckNhc2UoKSxQdD0hMH19LE8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''bnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00MDk2O2Z1bmN0aW9uIGooJGUsdHQsSGUpe2xldCB1dD0iIjtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2ZvcihsZXQgcXQ9dHQ7cXQ8SGU7KytxdCl1''@;'; put 'put ''dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmJGVbcXRdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gRSgkZSx0dCxIZSl7bGV0IHV0PSIiO0hlPU1hdGgubWluKCRlLmxlbmd0aCxIZSk7Zm9yKGxldCBxdD10dDtxdDxIZTsrK3F0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRlW3F0XSk7cmV0dXJu''@;'; put 'put ''IHV0fWZ1bmN0aW9uIG0oJGUsdHQsSGUpe2NvbnN0IHV0PSRlLmxlbmd0aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghSGV8fEhlPDB8fEhlPnV0KSYmKEhlPXV0KTtsZXQgcXQ9IiI7Zm9yKGxldCBSdD10dDtSdDxIZTsrK1J0KXF0Kz1NdFskZVtSdF1dO3JldHVybiBxdH1mdW5jdGlvbiBBKCRl''@;'; put 'put ''LHR0LEhlKXtjb25zdCB1dD0kZS5zbGljZSh0dCxIZSk7bGV0IHF0PSIiO2ZvcihsZXQgUnQ9MDtSdDx1dC5sZW5ndGgtMTtSdCs9MilxdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dFtSdF0rMjU2KnV0W1J0KzFdKTtyZXR1cm4gcXR9ZnVuY3Rpb24gYWUoJGUsdHQsSGUpe2lmKCRlJTEhPTB8''@;'; put 'put ''fCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKCRlK3R0PkhlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gdGUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKCFPLmlzQnVm''@;'; put 'put ''ZmVyKCRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodHQ+cXR8fHR0PFJ0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihIZSt1dD4kZS5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKCRlLHR0LEhlLHV0LHF0KXtEZSh0dCx1dCxxdCwkZSxIZSw3KTtsZXQgUnQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7JGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0LFJ0''@;'; put 'put ''Pj49OCwkZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQ7bGV0IFB0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiAkZVtIZSsrXT1QdCxQdD4+PTgsJGVbSGUrK109UHQsUHQ+Pj04LCRlW0hlKytdPVB0LFB0Pj49OCwkZVtIZSsrXT1QdCxIZX1m''@;'; put 'put ''dW5jdGlvbiB3ZSgkZSx0dCxIZSx1dCxxdCl7RGUodHQsdXQscXQsJGUsSGUsNyk7bGV0IFJ0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW0hlKzddPVJ0LFJ0Pj49OCwkZVtIZSs2XT1SdCxSdD4+PTgsJGVbSGUrNV09UnQsUnQ+Pj04LCRlW0hlKzRdPVJ0O2xldCBQdD1OdW1i''@;'; put 'put ''ZXIodHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gJGVbSGUrM109UHQsUHQ+Pj04LCRlW0hlKzJdPVB0LFB0Pj49OCwkZVtIZSsxXT1QdCxQdD4+PTgsJGVbSGVdPVB0LEhlKzh9ZnVuY3Rpb24gVWUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKEhlK3V0PiRlLmxlbmd0''@;'; put 'put ''aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoSGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSmUoJGUsdHQsSGUsdXQscXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxxdHx8VWUoJGUsMCxIZSw0KSxn''@;'; put 'put ''LndyaXRlKCRlLHR0LEhlLHV0LDIzLDQpLEhlKzR9ZnVuY3Rpb24gb3QoJGUsdHQsSGUsdXQscXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxxdHx8VWUoJGUsMCxIZSw4KSxnLndyaXRlKCRlLHR0LEhlLHV0LDUyLDgpLEhlKzh9Ty5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsSGUpe2Nv''@;'; put 'put ''bnN0IHV0PXRoaXMubGVuZ3RoOyh0dD1+fnR0KTwwPyh0dCs9dXQpPDAmJih0dD0wKTp0dD51dCYmKHR0PXV0KSwoSGU9dm9pZCAwPT09SGU/dXQ6fn5IZSk8MD8oSGUrPXV0KTwwJiYoSGU9MCk6SGU+dXQmJihIZT11dCksSGU8dHQmJihIZT10dCk7Y29uc3QgcXQ9dGhpcy5zdWJhcnJheSh0''@;'; put 'put ''dCxIZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihxdCxPLnByb3RvdHlwZSkscXR9LE8ucHJvdG90eXBlLnJlYWRVaW50TEU9Ty5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0''@;'; put 'put ''IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9MDtmb3IoOysrUHQ8SGUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBxdH0sTy5wcm90b3R5cGUucmVhZFVpbnRCRT1PLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fGFl''@;'; put 'put ''KHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9dGhpc1t0dCstLUhlXSxSdD0xO2Zvcig7SGU+MCYmKFJ0Kj0yNTYpOylxdCs9dGhpc1t0dCstLUhlXSpSdDtyZXR1cm4gcXR9LE8ucHJvdG90eXBlLnJlYWRVaW50OD1PLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsSGUpe3JldHVy''@;'; put 'put ''biB0dD4+Pj0wLEhlfHxhZSh0dCwxLHRoaXMubGVuZ3RoKSx0aGlzW3R0XX0sTy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPU8ucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNb''@;'; put 'put ''dHQrMV08PDh9LE8ucHJvdG90eXBlLnJlYWRVaW50MTZCRT1PLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxPLnByb3RvdHlwZS5yZWFkVWludDMyTEU9''@;'; put 'put ''Ty5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LE8ucHJvdG90eXBlLnJlYWRVaW50MzJC''@;'; put 'put ''RT1PLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sTy5wcm90b3R5cGUucmVhZEJpZ1VJ''@;'; put 'put ''bnQ2NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZPZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD1IZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysr''@;'; put 'put ''dHRdK3RoaXNbKyt0dF0qMioqMjQsUnQ9dGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3V0KjIqKjI0O3JldHVybiBCaWdJbnQocXQpKyhCaWdJbnQoUnQpPDxCaWdJbnQoMzIpKX0pLE8ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCl7''@;'; put 'put ''RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmT2UodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9SGUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLFJ0''@;'; put 'put ''PXRoaXNbKyt0dF0qMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dDtyZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KFJ0KX0pLE8ucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxI''@;'; put 'put ''ZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9MDtmb3IoOysrUHQ8SGUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBSdCo9MTI4LHF0Pj1SdCYmKHF0LT1NYXRoLnBvdygyLDgqSGUpKSxxdH0sTy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9u''@;'; put 'put ''KHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fGFlKHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9SGUsUnQ9MSxQdD10aGlzW3R0Ky0tcXRdO2Zvcig7cXQ+MCYmKFJ0Kj0yNTYpOylQdCs9dGhpc1t0dCstLXF0XSpSdDtyZXR1cm4gUnQqPTEyOCxQdD49UnQmJihQdC09TWF0aC5wb3co''@;'; put 'put ''Miw4KkhlKSksUHR9LE8ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0xKigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LE8ucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9u''@;'; put 'put ''KHR0LEhlKXt0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCB1dD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVybiAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0fSxPLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxIZSl7dHQ+Pj49MCxIZXx8YWUodHQs''@;'; put 'put ''Mix0aGlzLmxlbmd0aCk7Y29uc3QgdXQ9dGhpc1t0dCsxXXx0aGlzW3R0XTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1dH0sTy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlz''@;'; put 'put ''W3R0XXx0aGlzW3R0KzFdPDw4fHRoaXNbdHQrMl08PDE2fHRoaXNbdHQrM108PDI0fSxPLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0''@;'; put 'put ''KzJdPDw4fHRoaXNbdHQrM119LE8ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZPZSh0dCx0aGlzLmxlbmd0''@;'; put 'put ''aC04KSwoQmlnSW50KHRoaXNbdHQrNF0rMjU2KnRoaXNbdHQrNV0rNjU1MzYqdGhpc1t0dCs2XSsodXQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChIZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksTy5wcm90b3R5cGUucmVhZEJpZ0lu''@;'; put 'put ''dDY0QkU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUhlfHx2b2lkIDA9PT11dCkmJk9lKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PShIZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRo''@;'; put 'put ''aXNbKyt0dF0rdGhpc1srK3R0XTtyZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dCl9KSxPLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0''@;'; put 'put ''Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCEwLDIzLDQpfSxPLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxPLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sTy5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUo''@;'; put 'put ''dHQsOCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITEsNTIsOCl9LE8ucHJvdG90eXBlLndyaXRlVWludExFPU8ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXt0dD0rdHQsSGU+Pj49MCx1dD4+Pj0wLHF0fHx0ZSh0aGlzLHR0LEhlLHV0LE1hdGgucG93''@;'; put 'put ''KDIsOCp1dCktMSwwKTtsZXQgUnQ9MSxQdD0wO2Zvcih0aGlzW0hlXT0yNTUmdHQ7KytQdDx1dCYmKFJ0Kj0yNTYpOyl0aGlzW0hlK1B0XT10dC9SdCYyNTU7cmV0dXJuIEhlK3V0fSxPLnByb3RvdHlwZS53cml0ZVVpbnRCRT1PLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxI''@;'; put 'put ''ZSx1dCxxdCl7dHQ9K3R0LEhlPj4+PTAsdXQ+Pj49MCxxdHx8dGUodGhpcyx0dCxIZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IFJ0PXV0LTEsUHQ9MTtmb3IodGhpc1tIZStSdF09MjU1JnR0Oy0tUnQ+PTAmJihQdCo9MjU2KTspdGhpc1tIZStSdF09dHQvUHQmMjU1O3JldHVybiBI''@;'; put 'put ''ZSt1dH0sTy5wcm90b3R5cGUud3JpdGVVaW50OD1PLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMSwyNTUsMCksdGhpc1tIZV09MjU1JnR0LEhlKzF9LE8ucHJvdG90eXBlLndyaXRlVWludDE2''@;'; put 'put ''TEU9Ty5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsNjU1MzUsMCksdGhpc1tIZV09MjU1JnR0LHRoaXNbSGUrMV09dHQ+Pj44LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlVWludDE2QkU9''@;'; put 'put ''Ty5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsNjU1MzUsMCksdGhpc1tIZV09dHQ+Pj44LHRoaXNbSGUrMV09MjU1JnR0LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ty5w''@;'; put 'put ''cm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0hlKzNdPXR0Pj4+MjQsdGhpc1tIZSsyXT10dD4+PjE2LHRoaXNbSGUrMV09dHQ+Pj44LHRoaXNbSGVdPTI1''@;'; put 'put ''NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPU8ucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tIZV09dHQ+Pj4yNCx0aGlzW0hlKzFd''@;'; put 'put ''PXR0Pj4+MTYsdGhpc1tIZSsyXT10dD4+PjgsdGhpc1tIZSszXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gc2UodGhpcyx0dCxIZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxP''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiB3ZSh0aGlzLHR0LEhlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLE8ucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHR0PSt0''@;'; put 'put ''dCxIZT4+Pj0wLCFxdCl7Y29uc3QgUXQ9TWF0aC5wb3coMiw4KnV0LTEpO3RlKHRoaXMsdHQsSGUsdXQsUXQtMSwtUXQpfWxldCBSdD0wLFB0PTEsY2k9MDtmb3IodGhpc1tIZV09MjU1JnR0OysrUnQ8dXQmJihQdCo9MjU2KTspdHQ8MCYmMD09PWNpJiYwIT09dGhpc1tIZStSdC0xXSYmKGNp''@;'; put 'put ''PTEpLHRoaXNbSGUrUnRdPSh0dC9QdHwwKS1jaSYyNTU7cmV0dXJuIEhlK3V0fSxPLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih0dD0rdHQsSGU+Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCp1dC0xKTt0ZSh0aGlzLHR0LEhlLHV0LFF0LTEs''@;'; put 'put ''LVF0KX1sZXQgUnQ9dXQtMSxQdD0xLGNpPTA7Zm9yKHRoaXNbSGUrUnRdPTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1jaSYmMCE9PXRoaXNbSGUrUnQrMV0mJihjaT0xKSx0aGlzW0hlK1J0XT0odHQvUHR8MCktY2kmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVJbnQ4PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMSwxMjcsLTEyOCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlzW0hlXT0yNTUmdHQsSGUrMX0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LEhlLHV0''@;'; put 'put ''KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1''@;'; put 'put ''dHx8dGUodGhpcyx0dCxIZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tIZV09dHQ+Pj44LHRoaXNbSGUrMV09MjU1JnR0LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsMjE0NzQ4''@;'; put 'put ''MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tIZV09MjU1JnR0LHRoaXNbSGUrMV09dHQ+Pj44LHRoaXNbSGUrMl09dHQ+Pj4xNix0aGlzW0hlKzNdPXR0Pj4+MjQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8''@;'; put 'put ''fHRlKHRoaXMsdHQsSGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW0hlXT10dD4+PjI0LHRoaXNbSGUrMV09dHQ+Pj4xNix0aGlzW0hlKzJdPXR0Pj4+OCx0aGlzW0hlKzNdPTI1NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZUJp''@;'; put 'put ''Z0ludDY0TEU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHNlKHRoaXMsdHQsSGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0''@;'; put 'put ''dXJuIHdlKHRoaXMsdHQsSGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBKZSh0aGlzLHR0LEhlLCEwLHV0KX0sTy5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gSmUodGhpcyx0dCxIZSwhMSx1dCl9LE8ucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBvdCh0aGlzLHR0LEhlLCEwLHV0KX0sTy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5j''@;'; put 'put ''dGlvbih0dCxIZSx1dCl7cmV0dXJuIG90KHRoaXMsdHQsSGUsITEsdXQpfSxPLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZighTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYodXR8fCh1dD0w''@;'; put 'put ''KSwhcXQmJjAhPT1xdCYmKHF0PXRoaXMubGVuZ3RoKSxIZT49dHQubGVuZ3RoJiYoSGU9dHQubGVuZ3RoKSxIZXx8KEhlPTApLHF0PjAmJnF0PHV0JiYocXQ9dXQpLHF0PT09dXR8fDA9PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihIZTwwKXRocm93IG5ldyBSYW5n''@;'; put 'put ''ZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYodXQ8MHx8dXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihxdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3F0PnRo''@;'; put 'put ''aXMubGVuZ3RoJiYocXQ9dGhpcy5sZW5ndGgpLHR0Lmxlbmd0aC1IZTxxdC11dCYmKHF0PXR0Lmxlbmd0aC1IZSt1dCk7Y29uc3QgUnQ9cXQtdXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0''@;'; put 'put ''aGluKEhlLHV0LHF0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0dCx0aGlzLnN1YmFycmF5KHV0LHF0KSxIZSksUnR9LE8ucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSGU/KHF0''@;'; put 'put ''PUhlLEhlPTAsdXQ9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgdXQmJihxdD11dCx1dD10aGlzLmxlbmd0aCksdm9pZCAwIT09cXQmJiJzdHJpbmciIT10eXBlb2YgcXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgcXQmJiFPLmlzRW5jb2RpbmcocXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO2lmKDE9PT10dC5sZW5ndGgpe2NvbnN0IFB0PXR0LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXF0JiZQdDwxMjh8fCJsYXRpbjEiPT09cXQpJiYodHQ9UHQpfX1l''@;'; put 'put ''bHNlIm51bWJlciI9PXR5cGVvZiB0dD90dCY9MjU1OiJib29sZWFuIj09dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoSGU8MHx8dGhpcy5sZW5ndGg8SGV8fHRoaXMubGVuZ3RoPHV0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1dDw9SGUpcmV0''@;'; put 'put ''dXJuIHRoaXM7bGV0IFJ0O2lmKEhlPj4+PTAsdXQ9dm9pZCAwPT09dXQ/dGhpcy5sZW5ndGg6dXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJlciI9PXR5cGVvZiB0dClmb3IoUnQ9SGU7UnQ8dXQ7KytSdCl0aGlzW1J0XT10dDtlbHNle2NvbnN0IFB0PU8uaXNCdWZmZXIodHQpP3R0Ok8uZnJvbSh0''@;'; put 'put ''dCxxdCksY2k9UHQubGVuZ3RoO2lmKDA9PT1jaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihSdD0wO1J0PHV0LUhlOysrUnQpdGhpc1tSdCtIZV09UHRbUnQlY2ldfXJldHVybiB0aGlzfTtjb25z''@;'; put 'put ''dCB4ZT17fTtmdW5jdGlvbiB2ZSgkZSx0dCxIZSl7eGVbJGVdPWNsYXNzIGV4dGVuZHMgSGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFskeyRlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gJGV9c2V0IGNvZGUocXQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6''@;'; put 'put ''cXQsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7JGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIFhlKCRlKXtsZXQgdHQ9IiIsSGU9JGUubGVuZ3RoO2NvbnN0IHV0PSItIj09PSRlWzBdPzE6MDtmb3IoO0hlPj11dCs0O0hlLT0zKXR0PWBf''@;'; put 'put ''JHskZS5zbGljZShIZS0zLEhlKX0ke3R0fWA7cmV0dXJuYCR7JGUuc2xpY2UoMCxIZSl9JHt0dH1gfWZ1bmN0aW9uIERlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZigkZT5IZXx8JGU8dHQpe2NvbnN0IFB0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCBjaTt0aHJvdyBjaT1SdD4zPzA9''@;'; put 'put ''PT10dHx8dHQ9PT1CaWdJbnQoMCk/YD49IDAke1B0fSBhbmQgPCAyJHtQdH0gKiogJHs4KihSdCsxKX0ke1B0fWA6YD49IC0oMiR7UHR9ICoqICR7OCooUnQrMSktMX0ke1B0fSkgYW5kIDwgMiAqKiAkezgqKFJ0KzEpLTF9JHtQdH1gOmA+PSAke3R0fSR7UHR9IGFuZCA8PSAke0hlfSR7UHR9''@;'; put 'put ''YCxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLGNpLCRlKX0hZnVuY3Rpb24gemUoJGUsdHQsSGUpe0ZlKHR0LCJvZmZzZXQiKSwodm9pZCAwPT09JGVbdHRdfHx2b2lkIDA9PT0kZVt0dCtIZV0pJiZPZSh0dCwkZS5sZW5ndGgtKEhlKzEpKX0odXQscXQsUnQpfWZ1bmN0aW9uIEZl''@;'; put 'put ''KCRlLHR0KXtpZigibnVtYmVyIiE9dHlwZW9mICRlKXRocm93IG5ldyB4ZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIiwkZSl9ZnVuY3Rpb24gT2UoJGUsdHQsSGUpe3Rocm93IE1hdGguZmxvb3IoJGUpIT09JGU/KEZlKCRlLEhlKSxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRShI''@;'; put 'put ''ZXx8Im9mZnNldCIsImFuIGludGVnZXIiLCRlKSk6dHQ8MD9uZXcgeGUuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyB4ZS5FUlJfT1VUX09GX1JBTkdFKEhlfHwib2Zmc2V0IixgPj0gJHtIZT8xOjB9IGFuZCA8PSAke3R0fWAsJGUpfXZlKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMi''@;'; put 'put ''LGZ1bmN0aW9uKCRlKXtyZXR1cm4gJGU/YCR7JGV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSx2ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKCRlLHR0KXty''@;'; put 'put ''ZXR1cm5gVGhlICIkeyRlfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1gfSxUeXBlRXJyb3IpLHZlKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbigkZSx0dCxIZSl7bGV0IHV0PWBUaGUgdmFsdWUgb2YgIiR7JGV9IiBpcyBv''@;'; put 'put ''dXQgb2YgcmFuZ2UuYCxxdD1IZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihIZSkmJk1hdGguYWJzKEhlKT40Mjk0OTY3Mjk2P3F0PVhlKFN0cmluZyhIZSkpOiJiaWdpbnQiPT10eXBlb2YgSGUmJihxdD1TdHJpbmcoSGUpLChIZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fEhlPC0oQmlnSW50''@;'; put 'put ''KDIpKipCaWdJbnQoMzIpKSkmJihxdD1YZShxdCkpLHF0Kz0ibiIpLHV0Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7cXR9YCx1dH0sUmFuZ2VFcnJvcik7Y29uc3QgSWU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBrZSgkZSx0dCl7bGV0IEhlO3R0PXR0fHwxLzA7Y29u''@;'; put 'put ''c3QgdXQ9JGUubGVuZ3RoO2xldCBxdD1udWxsO2NvbnN0IFJ0PVtdO2ZvcihsZXQgUHQ9MDtQdDx1dDsrK1B0KXtpZihIZT0kZS5jaGFyQ29kZUF0KFB0KSxIZT41NTI5NSYmSGU8NTczNDQpe2lmKCFxdCl7aWYoSGU+NTYzMTkpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2Nv''@;'; put 'put ''bnRpbnVlfWlmKFB0KzE9PT11dCl7KHR0LT0zKT4tMSYmUnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9cXQ9SGU7Y29udGludWV9aWYoSGU8NTYzMjApeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpLHF0PUhlO2NvbnRpbnVlfUhlPTY1NTM2KyhxdC01NTI5Njw8MTB8SGUt''@;'; put 'put ''NTYzMjApfWVsc2UgcXQmJih0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2lmKHF0PW51bGwsSGU8MTI4KXtpZigodHQtPTEpPDApYnJlYWs7UnQucHVzaChIZSl9ZWxzZSBpZihIZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7UnQucHVzaChIZT4+NnwxOTIsNjMmSGV8MTI4KX1l''@;'; put 'put ''bHNlIGlmKEhlPDY1NTM2KXtpZigodHQtPTMpPDApYnJlYWs7UnQucHVzaChIZT4+MTJ8MjI0LEhlPj42JjYzfDEyOCw2MyZIZXwxMjgpfWVsc2V7aWYoIShIZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztSdC5wdXNo''@;'; put 'put ''KEhlPj4xOHwyNDAsSGU+PjEyJjYzfDEyOCxIZT4+NiY2M3wxMjgsNjMmSGV8MTI4KX19cmV0dXJuIFJ0fWZ1bmN0aW9uIG50KCRlKXtyZXR1cm4gXy50b0J5dGVBcnJheShmdW5jdGlvbiBWZSgkZSl7aWYoKCRlPSgkZT0kZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShJZSwiIikp''@;'; put 'put ''Lmxlbmd0aDwyKXJldHVybiIiO2Zvcig7JGUubGVuZ3RoJTQhPTA7KSRlKz0iPSI7cmV0dXJuICRlfSgkZSkpfWZ1bmN0aW9uIFFlKCRlLHR0LEhlLHV0KXtsZXQgcXQ7Zm9yKHF0PTA7cXQ8dXQmJiEocXQrSGU+PXR0Lmxlbmd0aHx8cXQ+PSRlLmxlbmd0aCk7KytxdCl0dFtxdCtIZV09JGVb''@;'; put 'put ''cXRdO3JldHVybiBxdH1mdW5jdGlvbiB1bigkZSx0dCl7cmV0dXJuICRlIGluc3RhbmNlb2YgdHR8fG51bGwhPSRlJiZudWxsIT0kZS5jb25zdHJ1Y3RvciYmbnVsbCE9JGUuY29uc3RydWN0b3IubmFtZSYmJGUuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24geXQoJGUpe3Jl''@;'; put 'put ''dHVybiAkZSE9JGV9Y29uc3QgTXQ9ZnVuY3Rpb24oKXtjb25zdCAkZT0iMDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBIZT0wO0hlPDE2OysrSGUpe2NvbnN0IHV0PTE2KkhlO2ZvcihsZXQgcXQ9MDtxdDwxNjsrK3F0KXR0W3V0K3F0XT0kZVtIZV0rJGVbcXRd''@;'; put 'put ''fXJldHVybiB0dH0oKTtmdW5jdGlvbiBEdCgkZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP2l0OiRlfWZ1bmN0aW9uIGl0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sNTExNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2MTIpLF89eSgx''@;'; put 'put ''NzY4KSxnPXkoODkyOCksQj15KDk3NzApO3VlLmV4cG9ydHM9Qnx8SS5jYWxsKGcsXyl9LDMxOTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NjEyKSxfPXkoMTc2OCksZz15KDUxMTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gZyhJLF8sYXJndW1lbnRzKX19LDE3''@;'; put 'put ''Njg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDg5Mjg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sMzE5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODYxMiksXz15KDQ0''@;'; put 'put ''NTMpLGc9eSg4OTI4KSxCPXkoNTExNik7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXtpZihQLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgUFswXSl0aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBCKEksZyxQKX19LDk3NzA6dWU9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dWUuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDE5MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMTApLF89eSg1NTU5KSxnPV8oSSgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQ''@;'; put 'put ''KXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmZyh3LCIucHJvdG90eXBlLiIpPi0xP18oRik6Rn19LDU1NTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NzcxKSxfPXkoNDQyOSksZz15KDMxOSksQj15KDMxOTIpO3VlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oUCl7dmFyIEY9Zyhhcmd1bWVudHMpLE89UC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEkoRiwxKyhPPjA/TzowKSwhMCl9LF8/Xyh1ZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOkJ9KTp1ZS5leHBvcnRzLmFwcGx5PUJ9LDczNzk6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSgyMTApLF89eSgzMTkpLGc9XyhbSSgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmZyh3LCIucHJvdG90eXBlLiIpPi0xP18oW0ZdKTpGfX0s''@;'; put 'put ''MTAyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoMjgzMCkuVHJhbnNmb3JtLGc9eSgyNTUzKS5zO2Z1bmN0aW9uIHcoeil7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10''@;'; put 'put ''aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH15KDU3MTcpKHcsXyk7dmFyIFA9''@;'; put 'put ''dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKHosTixMKXt2YXIgSz1mdW5jdGlvbiBPKHosTil7aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20oeixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5dGVMZW5ndGgpcmV0dXJu''@;'; put 'put ''IEkuYWxsb2MoMCk7dmFyIEw9SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9mZnNldCx6LmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihQJiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5jb25zdHJ1Y3RvciYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHouY29uc3RydWN0b3IuaXNCdWZmZXImJnouY29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2Yg''@;'; put 'put ''QnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxVPXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihMJiYoVT10aGlzLl90b1N0cmluZyhVLEwpKSxVKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90''@;'; put 'put ''eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBp''@;'; put 'put ''biB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLEwpe3ZhciBLO3RyeXt0aGlz''@;'; put 'put ''Lmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHopKX1jYXRjaChVKXtLPVV9ZmluYWxseXtMKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKEwpe049TH16KE4p''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixMKXtpZih0aGlzLl9kZWNv''@;'; put 'put ''ZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgZyhOKSx0aGlzLl9lbmNvZGluZz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBMJiYoSys9dGhpcy5fZGVj''@;'; put 'put ''b2Rlci5lbmQoKSksS30sdWUuZXhwb3J0cz13fSw1MTA4Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTM5KSxfPXkoOTI4Mik7ZnVuY3Rpb24gZygpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciB3LEI9QXJyYXkucHJvdG90eXBlLnNsaWNlLFA9e307dz10eXBlb2YgeS5nPCJ1IiYmeS5n''@;'; put 'put ''LmNvbnNvbGU/eS5nLmNvbnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgRj1bW2Z1bmN0aW9uIEsoKXt9LCJsb2ciXSxbZnVuY3Rpb24gVSgpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24g''@;'; put 'put ''Vygpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gWSgpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbiBxKGxlKXtQW2xlXT1nKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIGVlKGxlKXt2YXIgbWU9UFtsZV07aWYoIW1lKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiTm8gc3VjaCBsYWJlbDogIitsZSk7ZGVsZXRlIFBbbGVdO3ZhciBfZT1nKCktbWU7dy5sb2cobGUrIjogIitfZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24gSigpe3ZhciBsZT1uZXcgRXJyb3I7bGUubmFtZT0iVHJhY2UiLGxlLm1lc3NhZ2U9SS5mb3JtYXQuYXBw''@;'; put 'put ''bHkobnVsbCxhcmd1bWVudHMpLHcuZXJyb3IobGUuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24gbmUobGUpe3cubG9nKEkuaW5zcGVjdChsZSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24gaWUobGUpe2lmKCFsZSl7dmFyIG1lPUIuY2FsbChhcmd1bWVudHMsMSk7Xy5vayghMSxJLmZvcm1h''@;'; put 'put ''dC5hcHBseShudWxsLG1lKSl9fSwiYXNzZXJ0Il1dLE89MDtPPEYubGVuZ3RoO08rKyl7dmFyIHo9RltPXSxMPXpbMV07d1tMXXx8KHdbTF09elswXSl9dWUuZXhwb3J0cz13fSw2NDk3Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIE9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlZSl9WC5pc0FycmF5PWZ1bmN0aW9uIF8oZWUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZWUpOiJbb2JqZWN0IEFycmF5XSI9PT1xKGVlKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gZyhlZSl7cmV0dXJuImJvb2xlYW4iPT10''@;'; put 'put ''eXBlb2YgZWV9LFguaXNOdWxsPWZ1bmN0aW9uIEIoZWUpe3JldHVybiBudWxsPT09ZWV9LFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gdyhlZSl7cmV0dXJuIG51bGw9PWVlfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIFAoZWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZWV9LFguaXNTdHJp''@;'; put 'put ''bmc9ZnVuY3Rpb24gRihlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZX0sWC5pc1N5bWJvbD1mdW5jdGlvbiBPKGVlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGVlfSxYLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIHooZWUpe3JldHVybiB2b2lkIDA9PT1lZX0sWC5pc1JlZ0V4cD1mdW5jdGlv''@;'; put 'put ''biBOKGVlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PXEoZWUpfSxYLmlzT2JqZWN0PWZ1bmN0aW9uIEwoZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJm51bGwhPT1lZX0sWC5pc0RhdGU9ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09cShlZSl9LFguaXNF''@;'; put 'put ''cnJvcj1mdW5jdGlvbiBVKGVlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09cShlZSl8fGVlIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBXKGVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZWV9LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gWShlZSl7cmV0dXJu''@;'; put 'put ''IG51bGw9PT1lZXx8ImJvb2xlYW4iPT10eXBlb2YgZWV8fCJudW1iZXIiPT10eXBlb2YgZWV8fCJzdHJpbmciPT10eXBlb2YgZWV8fCJzeW1ib2wiPT10eXBlb2YgZWV8fHR5cGVvZiBlZT4idSJ9LFguaXNCdWZmZXI9SS5pc0J1ZmZlcn0sNjM5MzoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCku''@;'; put 'put ''QnVmZmVyLF89eSg2OTQ4KSxnPXkoNjQyNik7dWUuZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IHcoTyl9O3ZhciBCPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYx''@;'; put 'put ''OntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUy''@;'; put 'put ''MSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIHcoRil7dGhpcy5jdXJ2ZVR5cGU9QltGXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkZ9KSx0aGlzLmN1cnZlPW5ldyBfLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gUChG''@;'; put 'put ''LE8seil7QXJyYXkuaXNBcnJheShGKXx8KEY9Ri50b0FycmF5KCkpO3ZhciBOPW5ldyBJKEYpO2lmKHomJk4ubGVuZ3RoPHope3ZhciBMPW5ldyBJKHotTi5sZW5ndGgpO0wuZmlsbCgwKSxOPUkuY29uY2F0KFtMLE5dKX1yZXR1cm4gTz9OLnRvU3RyaW5nKE8pOk59Qi5wMjI0PUIuc2VjcDIy''@;'; put 'put ''NHIxLEIucDI1Nj1CLnNlY3AyNTZyMT1CLnByaW1lMjU2djEsQi5wMTkyPUIuc2VjcDE5MnIxPUIucHJpbWUxOTJ2MSxCLnAzODQ9Qi5zZWNwMzg0cjEsQi5wNTIxPUIuc2VjcDUyMXIxLHcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmtleXM9dGhp''@;'; put 'put ''cy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoRixPKX0sdy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihGLE8seil7cmV0dXJuIE89T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpLFAodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEYp''@;'; put 'put ''LmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCkseix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsTyl7dmFyIHo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1PLCEwKTty''@;'; put 'put ''ZXR1cm4iaHlicmlkIj09PU8mJih6WzBdPXpbei5sZW5ndGgtMV0lMj83OjYpLFAoeixGKX0sdy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGKXtyZXR1cm4gUCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEYpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oRixP''@;'; put 'put ''KXtyZXR1cm4gTz1PfHwidXRmOCIsSS5pc0J1ZmZlcihGKXx8KEY9bmV3IEkoRixPKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoRiksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGLE8pe089T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykp''@;'; put 'put ''O3ZhciB6PW5ldyBnKEYpO3JldHVybiB6PXoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoeiksdGhpc319LDY0MjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rp''@;'; put 'put ''b24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rv''@;'; put 'put ''cj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxw''@;'; put 'put ''fHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg4NjIzKS5CdWZmZXJ9Y2F0Y2h7''@;'; put 'put ''fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24g''@;'; put 'put ''eihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFu''@;'; put 'put ''Y2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0''@;'; put 'put ''dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9''@;'; put 'put ''PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3Bh''@;'; put 'put ''cnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMm''@;'; put 'put ''cF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFd''@;'; put 'put ''LHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1b''@;'; put 'put ''MF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihD''@;'; put 'put ''PXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9''@;'; put 'put ''MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtp''@;'; put 'put ''ZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5n''@;'; put 'put ''dGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0r''@;'; put 'put ''bTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlz''@;'; put 'put ''Ll9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5l''@;'; put 'put ''Z2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53''@;'; put 'put ''b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3Ry''@;'; put 'put ''aW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0''@;'; put 'put ''LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYs''@;'; put 'put ''cCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2''@;'; put 'put ''YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3''@;'; put 'put ''MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJo''@;'; put 'put ''ZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09''@;'; put 'put ''dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtw''@;'; put 'put ''XSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJv''@;'; put 'put ''KCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNb''@;'; put 'put ''MF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25s''@;'; put 'put ''eSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwi''@;'; put 'put ''dSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9''@;'; put 'put ''eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgp''@;'; put 'put ''e2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1t''@;'; put 'put ''LTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxi''@;'; put 'put ''Pj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZi''@;'; put 'put ''fHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3Rv''@;'; put 'put ''dHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUu''@;'; put 'put ''Ynl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5n''@;'; put 'put ''dGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5l''@;'; put 'put ''Z2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29y''@;'; put 'put ''ZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQo''@;'; put 'put ''cCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngu''@;'; put 'put ''d29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5u''@;'; put 'put ''ZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIp''@;'; put 'put ''LHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNb''@;'; put 'put ''eF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAs''@;'; put 'put ''Qz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgu''@;'; put 'put ''d29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlz''@;'; put 'put ''fSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0w''@;'; put 'put ''O3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHAp''@;'; put 'put ''O2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStI''@;'; put 'put ''KT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlz''@;'; put 'put ''LndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3Zh''@;'; put 'put ''ciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8''@;'; put 'put ''Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0s''@;'; put 'put ''aXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgx''@;'; put 'put ''OTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhp''@;'; put 'put ''LGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChz''@;'; put 'put ''ZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXww''@;'; put 'put ''O3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2''@;'; put 'put ''MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''dmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0''@;'; put 'put ''ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtl''@;'; put 'put ''LFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0''@;'; put 'put ''LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''dmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0''@;'; put 'put ''ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxo''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXww''@;'; put 'put ''O3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2''@;'; put 'put ''MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''JGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxX''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChE''@;'; put 'put ''ZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChP''@;'; put 'put ''ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0''@;'; put 'put ''KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChB''@;'; put 'put ''ZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXww''@;'; put 'put ''O3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2''@;'; put 'put ''MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''JGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09''@;'; put 'put ''THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixw''@;'; put 'put ''KXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAs''@;'; put 'put ''Yik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRo''@;'; put 'put ''Lm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3''@;'; put 'put ''ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9''@;'; put 'put ''bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9''@;'; put 'put ''MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7''@;'; put 'put ''d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9''@;'; put 'put ''PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5j''@;'; put 'put ''b25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24o''@;'; put 'put ''cCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNi''@;'; put 'put ''PWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9''@;'; put 'put ''ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlz''@;'; put 'put ''LnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhp''@;'; put 'put ''cy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVb''@;'; put 'put ''d2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4''@;'; put 'put ''Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8''@;'; put 'put ''MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJp''@;'; put 'put ''dExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9''@;'; put 'put ''eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBU''@;'; put 'put ''LGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0''@;'; put 'put ''aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3Zh''@;'; put 'put ''ciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgp''@;'; put 'put ''aWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8''@;'; put 'put ''bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNo''@;'; put 'put ''bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5t''@;'; put 'put ''aW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29y''@;'; put 'put ''ZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMu''@;'; put 'put ''bGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30s''@;'; put 'put ''dy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53''@;'; put 'put ''b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2''@;'; put 'put ''YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hd''@;'; put 'put ''PTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKysp''@;'; put 'put ''aj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNb''@;'; put 'put ''VC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29y''@;'; put 'put ''ZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3Rl''@;'; put 'put ''LS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMu''@;'; put 'put ''X2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2''@;'; put 'put ''bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5u''@;'; put 'put ''ZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7''@;'; put 'put ''ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5s''@;'; put 'put ''ZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0''@;'; put 'put ''aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChw''@;'; put 'put ''KTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/''@;'; put 'put ''Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5w''@;'; put 'put ''cm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2Qo''@;'; put 'put ''cCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7''@;'; put 'put ''KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3Io''@;'; put 'put ''dmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49''@;'; put 'put ''MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8''@;'; put 'put ''MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2Rk''@;'; put 'put ''KCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7''@;'; put 'put ''aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVz''@;'; put 'put ''aHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3Vi''@;'; put 'put ''KHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxi''@;'; put 'put ''O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEw''@;'; put 'put ''ODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgs''@;'; put 'put ''Yj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8''@;'; put 'put ''dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9''@;'; put 'put ''PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJu''@;'; put 'put ''LTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10''@;'; put 'put ''aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49''@;'; put 'put ''MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJv''@;'; put 'put ''dG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxw''@;'; put 'put ''LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQo''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMs''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIo''@;'; put 'put ''dGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''X3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAy''@;'; put 'put ''NTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtp''@;'; put 'put ''ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''MDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVz''@;'; put 'put ''IG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlz''@;'; put 'put ''LnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1p''@;'; put 'put ''bnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNl''@;'; put 'put ''PWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIu''@;'; put 'put ''d29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0''@;'; put 'put ''aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndv''@;'; put 'put ''cmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7''@;'; put 'put ''eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1l''@;'; put 'put ''LGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYo''@;'; put 'put ''cC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAy''@;'; put 'put ''NTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQs''@;'; put 'put ''InJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0''@;'; put 'put ''aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4''@;'; put 'put ''LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIp''@;'; put 'put ''LHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5h''@;'; put 'put ''ZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5y''@;'; put 'put ''ZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxD''@;'; put 'put ''LmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTth''@;'; put 'put ''ZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYiku''@;'; put 'put ''cmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSku''@;'; put 'put ''dG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jk''@;'; put 'put ''c1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2Qo''@;'; put 'put ''cC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlm''@;'; put 'put ''dCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5z''@;'; put 'put ''aGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sMzQ4MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSgyMzE4KSxnPXkoOTc4NSksQj15KDkw''@;'; put 'put ''NzIpLHc9eSgxMDI3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9oYXNoLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiJtZDUiPT09KE89Ty50b0xvd2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PU98fCJyaXBlbWQxNjAiPT09Tz9uZXcgZzpuZXcgUChCKE8pKX19LDgwMjg6KHVlLFgseSk9Pnt2YXIgST15KDIzMTgpO3VlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBJKS51cGRhdGUoXykuZGlnZXN0KCl9fSw4MzU1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTcxNyksXz15KDEwMzEpLGc9eSgxMDI3KSxCPXkoOTUwOSkuQnVmZmVyLHc9eSg4MDI4KSxQPXkoOTc4NSksRj15KDkwNzIpLE89''@;'; put 'put ''Qi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixMKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1CLmZyb20oTCkpO3ZhciBLPSJzaGE1MTIiPT09Tnx8InNoYTM4NCI9PT1OPzEyODo2NDt0aGlzLl9hbGc9Tix0aGlzLl9rZXk9TCxMLmxlbmd0aD5LP0w9KCJy''@;'; put 'put ''bWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8SyYmKEw9Qi5jb25jYXQoW0wsT10sSykpO2Zvcih2YXIgVz10aGlzLl9pcGFkPUIuYWxsb2NVbnNhZmUoSyksWT10aGlzLl9vcGFkPUIuYWxsb2NVbnNhZmUoSykscT0wO3E8SztxKyspV1txXT01NF5M''@;'; put 'put ''W3FdLFlbcV09OTJeTFtxXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9uZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFcpfUkoeixnKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2hhc2gudXBkYXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoTikuZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgeigicm1kMTYwIixLKToibWQ1Ij09PUw/bmV3IF8odyxLKTpuZXcgeihMLEspfX0sMTAzMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSg5NTA5KS5CdWZmZXIsZz15KDEwMjcpLEI9Xy5hbGxvYygxMjgpLHc9''@;'; put 'put ''NjQ7ZnVuY3Rpb24gUChGLE8pe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPV8uZnJvbShPKSksdGhpcy5fYWxnPUYsdGhpcy5fa2V5PU8sTy5sZW5ndGg+dz9PPUYoTyk6Ty5sZW5ndGg8dyYmKE89Xy5jb25jYXQoW08sQl0sdykpO2Zvcih2YXIgej10aGlz''@;'; put 'put ''Ll9pcGFkPV8uYWxsb2NVbnNhZmUodyksTj10aGlzLl9vcGFkPV8uYWxsb2NVbnNhZmUodyksTD0wO0w8dztMKyspeltMXT01NF5PW0xdLE5bTF09OTJeT1tMXTt0aGlzLl9oYXNoPVt6XX1JKFAsZyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnB1c2goRil9''@;'; put 'put ''LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBGPXRoaXMuX2FsZyhfLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhfLmNvbmNhdChbdGhpcy5fb3BhZCxGXSkpfSx1ZS5leHBvcnRzPVB9LDU4MzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC5yYW5kb21C''@;'; put 'put ''eXRlcz1YLnJuZz1YLnBzZXVkb1JhbmRvbUJ5dGVzPVgucHJuZz15KDE3OTgpLFguY3JlYXRlSGFzaD1YLkhhc2g9eSgzNDgyKSxYLmNyZWF0ZUhtYWM9WC5IbWFjPXkoODM1NSk7dmFyIEk9eSg2MDQyKSxfPU9iamVjdC5rZXlzKEkpLGc9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hh''@;'; put 'put ''Mzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KF8pO1guZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGd9O3ZhciBCPXkoNTYzMik7WC5wYmtkZjI9Qi5wYmtkZjIsWC5wYmtkZjJTeW5jPUIucGJrZGYyU3luYzt2YXIgdz15KDM2MTQpO1guQ2lwaGVyPXcuQ2lwaGVyLFgu''@;'; put 'put ''Y3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLFguQ2lwaGVyaXY9dy5DaXBoZXJpdixYLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYsWC5EZWNpcGhlcj13LkRlY2lwaGVyLFguY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixYLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2''@;'; put 'put ''LFguY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsWC5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxYLmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIFA9eSgyNjA3KTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxYLmNyZWF0ZURpZmZpZUhl''@;'; put 'put ''bGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxYLmdldERpZmZpZUhlbGxtYW49UC5nZXREaWZmaWVIZWxsbWFuLFguY3JlYXRlRGlmZmllSGVsbG1hbj1QLmNyZWF0ZURpZmZpZUhlbGxtYW4sWC5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj15KDQ3NDMp''@;'; put 'put ''O1guY3JlYXRlU2lnbj1GLmNyZWF0ZVNpZ24sWC5TaWduPUYuU2lnbixYLmNyZWF0ZVZlcmlmeT1GLmNyZWF0ZVZlcmlmeSxYLlZlcmlmeT1GLlZlcmlmeSxYLmNyZWF0ZUVDREg9eSg2MzkzKTt2YXIgTz15KDc5MDApO1gucHVibGljRW5jcnlwdD1PLnB1YmxpY0VuY3J5cHQsWC5wcml2YXRl''@;'; put 'put ''RW5jcnlwdD1PLnByaXZhdGVFbmNyeXB0LFgucHVibGljRGVjcnlwdD1PLnB1YmxpY0RlY3J5cHQsWC5wcml2YXRlRGVjcnlwdD1PLnByaXZhdGVEZWNyeXB0O3ZhciB6PXkoNzk2Myk7WC5yYW5kb21GaWxsPXoucmFuZG9tRmlsbCxYLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMs''@;'; put 'put ''WC5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3Nl''@;'; put 'put ''cmlmeSIpfSxYLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9Q''@;'; put 'put ''S0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJ''@;'; put 'put ''T05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDIyOTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDI5KSxfPXkoMzQ2NCksZz15KDQ0NTMpLEI9eSg3Mjk2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFAsRixPKXtpZighUHx8Im9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBQJiYiZnVuY3Rpb24iIT10eXBlb2YgUCl0aHJvdyBuZXcgZygiYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEYmJiJzeW1ib2wiIT10eXBlb2YgRil0aHJvdyBuZXcgZygiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5n''@;'; put 'put ''IG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBnKCJgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYo''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNF0mJm51bGwhPT1hcmd1bWVudHNbNF0pdGhyb3cgbmV3IGcoImBub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYi''@;'; put 'put ''Ym9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1bWVudHNbNV0pdGhyb3cgbmV3IGcoImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2Yg''@;'; put 'put ''YXJndW1lbnRzWzZdKXRocm93IG5ldyBnKCJgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4iKTt2YXIgej1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOm51bGwsTj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsTD1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjU/YXJndW1lbnRzWzVdOm51bGwsSz1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSxVPSEhQiYmQihQLEYpO2lmKEkpSShQLEYse2NvbmZpZ3VyYWJsZTpudWxsPT09TCYmVT9VLmNvbmZpZ3VyYWJsZTohTCxlbnVtZXJhYmxlOm51bGw9PT16JiZVP1UuZW51bWVyYWJsZToh''@;'; put 'put ''eix2YWx1ZTpPLHdyaXRhYmxlOm51bGw9PT1OJiZVP1Uud3JpdGFibGU6IU59KTtlbHNle2lmKCFLJiYoenx8Tnx8TCkpdGhyb3cgbmV3IF8oIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0''@;'; put 'put ''YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7UFtGXT1PfX19LDQyODk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMjE1KSxfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcsQj1BcnJheS5wcm90b3R5cGUuY29uY2F0LHc9eSgyMjk2KSxGPXkoMTA0NCkoKSxPPWZ1bmN0aW9uKE4sTCxLLFUpe2lmKEwgaW4gTilpZighMD09PVUpe2lmKE5bTF09PT1LKXJldHVybn1lbHNlIGlmKCFmdW5jdGlvbihOKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTiYmIltvYmpl''@;'; put 'put ''Y3QgRnVuY3Rpb25dIj09PWcuY2FsbChOKX0oVSl8fCFVKCkpcmV0dXJuO0Y/dyhOLEwsSywhMCk6dyhOLEwsSyl9LHo9ZnVuY3Rpb24oTixMKXt2YXIgSz1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnt9LFU9SShMKTtfJiYoVT1CLmNhbGwoVSxPYmplY3QuZ2V0T3duUHJvcGVy''@;'; put 'put ''dHlTeW1ib2xzKEwpKSk7Zm9yKHZhciBXPTA7VzxVLmxlbmd0aDtXKz0xKU8oTixVW1ddLExbVVtXXV0sS1tVW1ddXSl9O3ouc3VwcG9ydHNEZXNjcmlwdG9ycz0hIUYsdWUuZXhwb3J0cz16fSw1MjUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gudXRpbHM9eSgxMjc4KSxYLkNpcGhlcj15''@;'; put 'put ''KDU3NTYpLFguREVTPXkoNzc4KSxYLkNCQz15KDkwNTEpLFguRURFPXkoNjUxKX0sOTA1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KSxnPXt9O2Z1bmN0aW9uIEIoUCl7SS5lcXVhbChQLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMu''@;'; put 'put ''aXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgRj0wO0Y8dGhpcy5pdi5sZW5ndGg7RisrKXRoaXMuaXZbRl09UFtGXX1YLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoUCl7ZnVuY3Rpb24gRihMKXtQLmNhbGwodGhpcyxMKSx0aGlzLl9jYmNJbml0KCl9XyhGLFApO2Zvcih2YXIgTz1PYmplY3Qua2V5''@;'; put 'put ''cyhnKSx6PTA7ejxPLmxlbmd0aDt6Kyspe3ZhciBOPU9bel07Ri5wcm90b3R5cGVbTl09Z1tOXX1yZXR1cm4gRi5jcmVhdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBGKEspfSxGfSxnLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEY9bmV3IEIodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNT''@;'; put 'put ''dGF0ZT1GfSxnLl91cGRhdGU9ZnVuY3Rpb24oRixPLHosTil7dmFyIEs9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddXj1GW08r''@;'; put 'put ''V107Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV109eltOK1ddfWVsc2V7Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsRixPLHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKXpbTitXXV49VVtXXTtmb3IoVz0wO1c8dGhpcy5i''@;'; put 'put ''bG9ja1NpemU7VysrKVVbV109RltPK1ddfX19LDU3NTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KTtmdW5jdGlvbiBfKGcpe3RoaXMub3B0aW9ucz1nLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1''@;'; put 'put ''ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09Zy5wYWRkaW5nfXVlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sXy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEIpe3JldHVybiAwPT09Qi5s''@;'; put 'put ''ZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoQik6dGhpcy5fdXBkYXRlRW5jcnlwdChCKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihCLHcpe2Zvcih2YXIgUD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYs''@;'; put 'put ''Qi5sZW5ndGgtdyksRj0wO0Y8UDtGKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrRl09Qlt3K0ZdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9UCxQfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oQix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQix3''@;'; put 'put ''KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihCKXt2YXIgdz0wLFA9MCxPPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0IubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRo''@;'; put 'put ''aXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKEIsdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApKSk7Zm9yKHZhciB6PUIubGVuZ3RoLShCLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PHo7dys9dGhpcy5ibG9j''@;'; put 'put ''a1NpemUpdGhpcy5fdXBkYXRlKEIsdyxPLFApLFArPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxCLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Qlt3XTtyZXR1cm4gT30sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oQil7''@;'; put 'put ''Zm9yKHZhciB3PTAsUD0wLEY9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsTz1uZXcgQXJyYXkoRip0aGlzLmJsb2NrU2l6ZSk7Rj4wO0YtLSl3Kz10aGlzLl9idWZmZXIoQix3KSxQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApO3JldHVybiB3''@;'; put 'put ''Kz10aGlzLl9idWZmZXIoQix3KSxPfSxfLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihCKXt2YXIgdyxQO3JldHVybiBCJiYodz10aGlzLnVwZGF0ZShCKSksUD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNh''@;'; put 'put ''dChQKTpQfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEIsdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3PEIubGVuZ3RoOylCW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZm''@;'; put 'put ''ZXJPZmYpKXJldHVybltdO3ZhciBCPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsMCksQn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEIpe3JldHVybiBCfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9u''@;'; put 'put ''KCl7SS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihCLDApLHRoaXMuX3VucGFkKEIpfX0sNzc4Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0NiksXz15KDU3MTcpLGc9eSgxMjc4KSxCPXkoNTc1Nik7ZnVuY3Rpb24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBQKE8pe0IuY2FsbCh0aGlzLE8pO3ZhciB6PW5ldyB3O3RoaXMuX2Rlc1N0YXRlPXos''@;'; put 'put ''dGhpcy5kZXJpdmVLZXlzKHosTy5rZXkpfV8oUCxCKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBQKHopfTt2YXIgRj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07UC5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbih6LE4pe3oua2V5''@;'; put 'put ''cz1uZXcgQXJyYXkoMzIpLEkuZXF1YWwoTi5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBMPWcucmVhZFVJbnQzMkJFKE4sMCksSz1nLnJlYWRVSW50MzJCRShOLDQpO2cucGMxKEwsSyx6LnRtcCwwKSxMPXoudG1wWzBdLEs9ei50bXBbMV07Zm9yKHZh''@;'; put 'put ''ciBVPTA7VTx6LmtleXMubGVuZ3RoO1UrPTIpe3ZhciBXPUZbVT4+PjFdO0w9Zy5yMjhzaGwoTCxXKSxLPWcucjI4c2hsKEssVyksZy5wYzIoTCxLLHoua2V5cyxVKX19LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixOLEwsSyl7dmFyIFU9dGhpcy5fZGVzU3RhdGUsVz1nLnJlYWRV''@;'; put 'put ''SW50MzJCRSh6LE4pLFk9Zy5yZWFkVUludDMyQkUoeixOKzQpO2cuaXAoVyxZLFUudG1wLDApLFc9VS50bXBbMF0sWT1VLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChVLFcsWSxVLnRtcCwwKTp0aGlzLl9kZWNyeXB0KFUsVyxZLFUudG1wLDApLFk9VS50bXBb''@;'; put 'put ''MV0sZy53cml0ZVVJbnQzMkJFKEwsVz1VLnRtcFswXSxLKSxnLndyaXRlVUludDMyQkUoTCxZLEsrNCl9LFAucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oeixOKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIEw9ei5sZW5ndGgtTixLPU47Szx6Lmxlbmd0aDtLKyspeltL''@;'; put 'put ''XT1MO3JldHVybiEwfSxQLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oeil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIHo7Zm9yKHZhciBOPXpbei5sZW5ndGgtMV0sTD16Lmxlbmd0aC1OO0w8ei5sZW5ndGg7TCsrKUkuZXF1YWwoeltMXSxOKTtyZXR1cm4gei5zbGljZSgwLHoubGVu''@;'; put 'put ''Z3RoLU4pfSxQLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1OLFk9TCxxPTA7cTx6LmtleXMubGVuZ3RoO3ErPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChZLHoudG1wLDApO3ZhciBuZT1nLnN1YnN0aXR1dGUoZWVe''@;'; put 'put ''PXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1ZO1k9KFdeZy5wZXJtdXRlKG5lKSk+Pj4wLFc9bGV9Zy5yaXAoWSxXLEssVSl9LFAucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKHosTixMLEssVSl7Zm9yKHZhciBXPUwsWT1OLHE9ei5rZXlzLmxlbmd0aC0yO3E+PTA7cS09Mil7dmFyIGVl''@;'; put 'put ''PXoua2V5c1txXSxKPXoua2V5c1txKzFdO2cuZXhwYW5kKFcsei50bXAsMCk7dmFyIG5lPWcuc3Vic3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0pLGxlPVc7Vz0oWV5nLnBlcm11dGUobmUpKT4+PjAsWT1sZX1nLnJpcChXLFksSyxVKX19LDY1MToodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KSxnPXkoNTc1NiksQj15KDc3OCk7ZnVuY3Rpb24gdyhGLE8pe0kuZXF1YWwoTy5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciB6PU8uc2xpY2UoMCw4KSxOPU8uc2xpY2UoOCwxNiksTD1PLnNsaWNlKDE2LDI0KTt0aGlzLmNp''@;'; put 'put ''cGhlcnM9ImVuY3J5cHQiPT09Rj9bQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTp6fSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpMfSldOltCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okx9KSxCLmNyZWF0ZSh7''@;'; put 'put ''dHlwZToiZW5jcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Onp9KV19ZnVuY3Rpb24gUChGKXtnLmNhbGwodGhpcyxGKTt2YXIgTz1uZXcgdyh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9T31fKFAsZyksdWUuZXhwb3J0cz1QLFAu''@;'; put 'put ''Y3JlYXRlPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgUChPKX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPLHosTixMKXt2YXIgSz10aGlzLl9lZGVTdGF0ZTtLLmNpcGhlcnNbMF0uX3VwZGF0ZShPLHosTixMKSxLLmNpcGhlcnNbMV0uX3VwZGF0ZShOLEwsTixMKSxLLmNpcGhlcnNb''@;'; put 'put ''Ml0uX3VwZGF0ZShOLEwsTixMKX0sUC5wcm90b3R5cGUuX3BhZD1CLnByb3RvdHlwZS5fcGFkLFAucHJvdG90eXBlLl91bnBhZD1CLnByb3RvdHlwZS5fdW5wYWR9LDEyNzg6KHVlLFgpPT57InVzZSBzdHJpY3QiO1gucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEIsdyl7cmV0dXJuKEJbMCt3XTw8''@;'; put 'put ''MjR8QlsxK3ddPDwxNnxCWzIrd108PDh8QlszK3ddKT4+PjB9LFgud3JpdGVVSW50MzJCRT1mdW5jdGlvbihCLHcsUCl7QlswK1BdPXc+Pj4yNCxCWzErUF09dz4+PjE2JjI1NSxCWzIrUF09dz4+PjgmMjU1LEJbMytQXT0yNTUmd30sWC5pcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89''@;'; put 'put ''MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+Pj5MK04mMX1mb3IoTj02O04+PTA7Ti09Mil7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PXc+Pj5MK04mMTtmb3IoTD0x''@;'; put 'put ''O0w8PTI1O0wrPTgpejw8PTEsenw9Qj4+PkwrTiYxfVBbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTA7Tjw0O04rKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KU88PD0xLE98PXc+Pj5MK04mMSxPPDw9MSxPfD1CPj4+''@;'; put 'put ''TCtOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihMPTI0O0w+PTA7TC09OCl6PDw9MSx6fD13Pj4+TCtOJjEsejw8PTEsenw9Qj4+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucGMxPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2''@;'; put 'put ''YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9dz4+TCtOJjE7''@;'; put 'put ''Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnIyOHNobD1mdW5jdGlvbihCLHcpe3JldHVybiBCPDx3JjI2ODQzNTQ1NXxCPj4+Mjgtd307dmFyIHk9WzE0''@;'; put 'put ''LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07WC5wYzI9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0w''@;'; put 'put ''LE49eS5sZW5ndGg+Pj4xLEw9MDtMPE47TCsrKU88PD0xLE98PUI+Pj55W0xdJjE7Zm9yKEw9TjtMPHkubGVuZ3RoO0wrKyl6PDw9MSx6fD13Pj4+eVtMXSYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFguZXhwYW5kPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRj0wLE89MDtGPSgxJkIpPDw1''@;'; put 'put ''fEI+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClGPDw9NixGfD1CPj4+eiY2Mztmb3Ioej0xMTt6Pj0zO3otPTQpT3w9Qj4+PnomNjMsTzw8PTY7T3w9KDMxJkIpPDwxfEI+Pj4zMSx3W1ArMF09Rj4+PjAsd1tQKzFdPU8+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQs''@;'; put 'put ''MTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0''@;'; put 'put ''LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1''@;'; put 'put ''LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIs''@;'; put 'put ''MTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYs''@;'; put 'put ''NCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwy''@;'; put 'put ''LDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwz''@;'; put 'put ''LDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMyww''@;'; put 'put ''LDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtYLnN1YnN0aXR1dGU9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzY0KkYrKEI+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4''@;'; put 'put ''LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIF89WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO1gucGVybXV0ZT1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTA7UDxfLmxlbmd0''@;'; put 'put ''aDtQKyspdzw8PTEsd3w9Qj4+Pl9bUF0mMTtyZXR1cm4gdz4+PjB9LFgucGFkU3BsaXQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj1CLnRvU3RyaW5nKDIpO0YubGVuZ3RoPHc7KUY9IjAiK0Y7Zm9yKHZhciBPPVtdLHo9MDt6PHc7eis9UClPLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVy''@;'; put 'put ''biBPLmpvaW4oIiAiKX19LDI2MDc6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoMzU5MCksZz15KDk3OTkpLEI9eSg3NDI2KSxQPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07WC5EaWZmaWVIZWxsbWFuR3JvdXA9WC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9WC5n''@;'; put 'put ''ZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIHcoTyl7dmFyIHo9bmV3IEkoZ1tPXS5wcmltZSwiaGV4IiksTj1uZXcgSShnW09dLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBCKHosTil9LFguY3JlYXRlRGlmZmllSGVsbG1hbj1YLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gRihPLHosTixMKXtyZXR1''@;'; put 'put ''cm4gSS5pc0J1ZmZlcih6KXx8dm9pZCAwPT09UFt6XT9GKE8sImJpbmFyeSIseixOKTooej16fHwiYmluYXJ5IixMPUx8fCJiaW5hcnkiLE49Tnx8bmV3IEkoWzJdKSxJLmlzQnVmZmVyKE4pfHwoTj1uZXcgSShOLEwpKSwibnVtYmVyIj09dHlwZW9mIE8/bmV3IEIoXyhPLE4pLE4sITApOihJ''@;'; put 'put ''LmlzQnVmZmVyKE8pfHwoTz1uZXcgSShPLHopKSxuZXcgQihPLE4sITApKSl9fSw3NDI2Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDM2MjApLEI9bmV3KHkoMzA0NykpLHc9bmV3IF8oMjQpLFA9bmV3IF8oMTEpLEY9bmV3IF8oMTApLE89bmV3IF8oMyksej1uZXcgXyg3''@;'; put 'put ''KSxOPXkoMzU5MCksTD15KDE3OTgpO2Z1bmN0aW9uIEsoSixuZSl7cmV0dXJuIG5lPW5lfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixuZSkpLHRoaXMuX3B1Yj1uZXcgXyhKKSx0aGlzfWZ1bmN0aW9uIFUoSixuZSl7cmV0dXJuIG5lPW5lfHwidXRmOCIsSS5pc0J1ZmZlcihK''@;'; put 'put ''KXx8KEo9bmV3IEkoSixuZSkpLHRoaXMuX3ByaXY9bmV3IF8oSiksdGhpc311ZS5leHBvcnRzPXE7dmFyIFc9e307ZnVuY3Rpb24gcShKLG5lLGllKXt0aGlzLnNldEdlbmVyYXRvcihuZSksdGhpcy5fX3ByaW1lPW5ldyBfKEopLHRoaXMuX3ByaW1lPV8ubW9udCh0aGlzLl9fcHJpbWUpLHRo''@;'; put 'put ''aXMuX3ByaW1lTGVuPUoubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxpZT8odGhpcy5zZXRQdWJsaWNLZXk9Syx0aGlzLnNldFByaXZhdGVLZXk9VSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gZWUoSixuZSl7dmFy''@;'; put 'put ''IGllPW5ldyBJKEoudG9BcnJheSgpKTtyZXR1cm4gbmU/aWUudG9TdHJpbmcobmUpOmllfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVD''@;'; put 'put ''b2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFkoSixuZSl7dmFyIGllPW5lLnRvU3RyaW5nKCJoZXgiKSxsZT1baWUsSi50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihsZSBpbiBXKXJldHVybiBXW2xlXTt2YXIgX2UsbWU9MDtpZihKLmlzRXZlbigpfHwhTi5zaW1wbGVTaWV2ZXx8''@;'; put 'put ''IU4uZmVybWF0VGVzdChKKXx8IUIudGVzdChKKSlyZXR1cm4gbWUrPTEsV1tsZV09bWUrPSIwMiI9PT1pZXx8IjA1Ij09PWllPzg6NCxtZTtzd2l0Y2goQi50ZXN0KEouc2hybigxKSl8fChtZSs9MiksaWUpe2Nhc2UiMDIiOkoubW9kKHcpLmNtcChQKSYmKG1lKz04KTticmVhaztjYXNlIjA1''@;'; put 'put ''IjooX2U9Si5tb2QoRikpLmNtcChPKSYmX2UuY21wKHopJiYobWUrPTgpO2JyZWFrO2RlZmF1bHQ6bWUrPTR9cmV0dXJuIFdbbGVdPW1lLG1lfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxxLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IF8oTCh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LHEucHJvdG90eXBlLmNvbXB1dGVT''@;'; put 'put ''ZWNyZXQ9ZnVuY3Rpb24oSil7dmFyIG5lPShKPShKPW5ldyBfKEopKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksaWU9bmV3IEkobmUudG9BcnJheSgpKSxsZT10aGlzLmdldFByaW1lKCk7aWYoaWUubGVuZ3RoPGxlLmxlbmd0aCl7dmFyIG1lPW5l''@;'; put 'put ''dyBJKGxlLmxlbmd0aC1pZS5sZW5ndGgpO21lLmZpbGwoMCksaWU9SS5jb25jYXQoW21lLGllXSl9cmV0dXJuIGllfSxxLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24obmUpe3JldHVybiBlZSh0aGlzLl9wdWIsbmUpfSxxLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9u''@;'; put 'put ''KG5lKXtyZXR1cm4gZWUodGhpcy5fcHJpdixuZSl9LHEucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKEope3JldHVybiBlZSh0aGlzLl9fcHJpbWUsSil9LHEucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihKKXtyZXR1cm4gZWUodGhpcy5fZ2VuLEopfSxxLnByb3RvdHlwZS5z''@;'; put 'put ''ZXRHZW5lcmF0b3I9ZnVuY3Rpb24oSixuZSl7cmV0dXJuIG5lPW5lfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixuZSkpLHRoaXMuX19nZW49Six0aGlzLl9nZW49bmV3IF8oSiksdGhpc319LDM1OTA6KHVlLFgseSk9Pnt2YXIgST15KDE3OTgpO3VlLmV4cG9ydHM9bGUsbGUu''@;'; put 'put ''c2ltcGxlU2lldmU9bmUsbGUuZmVybWF0VGVzdD1pZTt2YXIgXz15KDM2MjApLGc9bmV3IF8oMjQpLHc9bmV3KHkoMzA0NykpLFA9bmV3IF8oMSksRj1uZXcgXygyKSxPPW5ldyBfKDUpLEw9KG5ldyBfKDE2KSxuZXcgXyg4KSxuZXcgXygxMCkpLEs9bmV3IF8oMyksVz0obmV3IF8oNyksbmV3''@;'; put 'put ''IF8oMTEpKSxZPW5ldyBfKDQpLGVlPShuZXcgXygxMiksbnVsbCk7ZnVuY3Rpb24gbmUobWUpe2Zvcih2YXIgX2U9ZnVuY3Rpb24gSigpe2lmKG51bGwhPT1lZSlyZXR1cm4gZWU7dmFyIF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0xLFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciBq''@;'; put 'put ''ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksVj0wO1Y8VGUmJl9lW1ZdPD1qZSYmU2UlX2VbVl0hPTA7VisrKTtUZSE9PVYmJl9lW1ZdPD1qZXx8KF9lW1RlKytdPVNlKX1yZXR1cm4gZWU9X2UsX2V9KCksVGU9MDtUZTxfZS5sZW5ndGg7VGUrKylpZigwPT09bWUubW9kbihfZVtUZV0pKXJl''@;'; put 'put ''dHVybiAwPT09bWUuY21wbihfZVtUZV0pO3JldHVybiEwfWZ1bmN0aW9uIGllKG1lKXt2YXIgX2U9Xy5tb250KG1lKTtyZXR1cm4gMD09PUYudG9SZWQoX2UpLnJlZFBvdyhtZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBsZShtZSxfZSl7aWYobWU8MTYpcmV0dXJuIG5l''@;'; put 'put ''dyBfKDI9PT1fZXx8NT09PV9lP1sxNDAsMTIzXTpbMTQwLDM5XSk7X2U9bmV3IF8oX2UpO2Zvcih2YXIgVGUsU2U7Oyl7Zm9yKFRlPW5ldyBfKEkoTWF0aC5jZWlsKG1lLzgpKSk7VGUuYml0TGVuZ3RoKCk+bWU7KVRlLmlzaHJuKDEpO2lmKFRlLmlzRXZlbigpJiZUZS5pYWRkKFApLFRlLnRl''@;'; put 'put ''c3RuKDEpfHxUZS5pYWRkKEYpLF9lLmNtcChGKSl7aWYoIV9lLmNtcChPKSlmb3IoO1RlLm1vZChMKS5jbXAoSyk7KVRlLmlhZGQoWSl9ZWxzZSBmb3IoO1RlLm1vZChnKS5jbXAoVyk7KVRlLmlhZGQoWSk7aWYobmUoU2U9VGUuc2hybigxKSkmJm5lKFRlKSYmaWUoU2UpJiZpZShUZSkmJncu''@;'; put 'put ''dGVzdChTZSkmJncudGVzdChUZSkpcmV0dXJuIFRlfX19LDM2MjA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1''@;'; put 'put ''cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxs''@;'; put 'put ''LHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6''@;'; put 'put ''ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0x''@;'; put 'put ''MDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2Rl''@;'; put 'put ''QXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYm''@;'; put 'put ''QXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBw''@;'; put 'put ''KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNl''@;'; put 'put ''KC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcx''@;'; put 'put ''MDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2''@;'; put 'put ''NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4''@;'; put 'put ''ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMu''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYz''@;'; put 'put ''JmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9''@;'; put 'put ''MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0''@;'; put 'put ''aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxw''@;'; put 'put ''Lmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhp''@;'; put 'put ''cy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3''@;'; put 'put ''IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5s''@;'; put 'put ''ZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2''@;'; put 'put ''Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3''@;'; put 'put ''MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgs''@;'; put 'put ''eD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNl''@;'; put 'put ''PU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIu''@;'; put 'put ''bGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9''@;'; put 'put ''KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0''@;'; put 'put ''aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1h''@;'; put 'put ''ZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9''@;'; put 'put ''ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRo''@;'; put 'put ''aXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMu''@;'; put 'put ''dG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVx''@;'; put 'put ''dWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspaltt''@;'; put 'put ''XT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0''@;'; put 'put ''aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24o''@;'; put 'put ''cCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5s''@;'; put 'put ''ZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9U''@;'; put 'put ''d29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5l''@;'; put 'put ''ZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRo''@;'; put 'put ''aXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUo''@;'; put 'put ''KS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3Ro''@;'; put 'put ''PnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlu''@;'; put 'put ''b3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4g''@;'; put 'put ''eD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5l''@;'; put 'put ''Z2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRz''@;'; put 'put ''W0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhd''@;'; put 'put ''PVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCku''@;'; put 'put ''aWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9''@;'; put 'put ''dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tq''@;'; put 'put ''XSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0''@;'; put 'put ''ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5''@;'; put 'put ''MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQs''@;'; put 'put ''UHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJp''@;'; put 'put ''Pj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2''@;'; put 'put ''ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''RGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11''@;'; put 'put ''bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEpl''@;'; put 'put ''LFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11''@;'; put 'put ''bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERl''@;'; put 'put ''LFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11''@;'; put 'put ''bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2Up''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''dXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxo''@;'; put 'put ''biksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''cm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStN''@;'; put 'put ''YXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Us''@;'; put 'put ''cm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8''@;'; put 'put ''MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''cm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStN''@;'; put 'put ''YXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxo''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''dXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02''@;'; put 'put ''NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4''@;'; put 'put ''ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGks''@;'; put 'put ''MCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgs''@;'; put 'put ''Qz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVu''@;'; put 'put ''Z3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tU''@;'; put 'put ''LW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6''@;'; put 'put ''Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4''@;'; put 'put ''LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09''@;'; put 'put ''TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4''@;'; put 'put ''ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109''@;'; put 'put ''cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3Vu''@;'; put 'put ''ZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFd''@;'; put 'put ''PTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBl''@;'; put 'put ''Lm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3''@;'; put 'put ''IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zv''@;'; put 'put ''cm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxz''@;'; put 'put ''ZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgp''@;'; put 'put ''LGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRo''@;'; put 'put ''aXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxl''@;'; put 'put ''bmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlt''@;'; put 'put ''dWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31y''@;'; put 'put ''ZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltD''@;'; put 'put ''XSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlz''@;'; put 'put ''Lmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lm''@;'; put 'put ''KEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhp''@;'; put 'put ''cy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVy''@;'; put 'put ''biBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlz''@;'; put 'put ''Lml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAt''@;'; put 'put ''YikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImlt''@;'; put 'put ''YXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8''@;'; put 'put ''PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1''@;'; put 'put ''Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''LHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJl''@;'; put 'put ''dHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBd''@;'; put 'put ''PS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53''@;'; put 'put ''b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xv''@;'; put 'put ''bmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9y''@;'; put 'put ''KHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJu''@;'; put 'put ''IG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpu''@;'; put 'put ''ZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9''@;'; put 'put ''KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiks''@;'; put 'put ''ImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRo''@;'; put 'put ''aXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2''@;'; put 'put ''YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5t''@;'; put 'put ''b2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7''@;'; put 'put ''Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7''@;'; put 'put ''eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1''@;'; put 'put ''bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2''@;'; put 'put ''ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNo''@;'; put 'put ''cm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2Up''@;'; put 'put ''O3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6''@;'; put 'put ''SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcg''@;'; put 'put ''dygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4o''@;'; put 'put ''MSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlz''@;'; put 'put ''dWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMu''@;'; put 'put ''Y2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXgu''@;'; put 'put ''aXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEu''@;'; put 'put ''dW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndv''@;'; put 'put ''cmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBU''@;'; put 'put ''PUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJv''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lm''@;'; put 'put ''KHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5''@;'; put 'put ''cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcu''@;'; put 'put ''cHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNb''@;'; put 'put ''eF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJl''@;'; put 'put ''YWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VS''@;'; put 'put ''ZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''U3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''TXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRo''@;'; put 'put ''aXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGco''@;'; put 'put ''dGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVt''@;'; put 'put ''KSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJp''@;'; put 'put ''dExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYp''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0''@;'; put 'put ''aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRo''@;'; put 'put ''aXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFk''@;'; put 'put ''ZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3Ry''@;'; put 'put ''aXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZh''@;'; put 'put ''ciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxl''@;'; put 'put ''bmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHww''@;'; put 'put ''KX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7''@;'; put 'put ''aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNl''@;'; put 'put ''LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7Zygh''@;'; put 'put ''KHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90''@;'; put 'put ''aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3Rv''@;'; put 'put ''dHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxi''@;'; put 'put ''KTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFD''@;'; put 'put ''LmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSku''@;'; put 'put ''dG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9''@;'; put 'put ''MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBl''@;'; put 'put ''Lmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBI''@;'; put 'put ''PUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAh''@;'; put 'put ''PT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xv''@;'; put 'put ''bmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihw''@;'; put 'put ''LmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNo''@;'; put 'put ''aWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''bmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49''@;'; put 'put ''MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19''@;'; put 'put ''KHVlPXkubm1kKHVlKSx0aGlzKX0sNjUwNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZyxJPXkoMzE5KSxfPXkoNzI5Nik7dHJ5e2c9W10uX19wcm90b19fPT09QXJyYXkucHJvdG90eXBlfWNhdGNoKEYpe2lmKCFGfHwib2JqZWN0IiE9dHlwZW9mIEZ8fCEoImNvZGUiaW4gRil8fCJF''@;'; put 'put ''UlJfUFJPVE9fQUNDRVNTIiE9PUYuY29kZSl0aHJvdyBGfXZhciBCPSEhZyYmXyYmXyhPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKSx3PU9iamVjdCxQPXcuZ2V0UHJvdG90eXBlT2Y7dWUuZXhwb3J0cz1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5nZXQ/SShbQi5nZXRdKToiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgUCYmZnVuY3Rpb24oTyl7cmV0dXJuIFAobnVsbD09Tz9POncoTykpfX0sNjk0ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YO0kudmVyc2lvbj15KDg1OTcpLmk4LEkudXRpbHM9eSg5NTMpLEkucmFuZD15KDk5MzEpLEkuY3VydmU9eSg4MjU0KSxJLmN1cnZl''@;'; put 'put ''cz15KDU0MjcpLEkuZWM9eSg3OTU0KSxJLmVkZHNhPXkoNTk4MCl9LDQ5MTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxfPXkoOTUzKSxnPV8uZ2V0TkFGLEI9Xy5nZXRKU0Ysdz1fLmFzc2VydDtmdW5jdGlvbiBQKE8seil7dGhpcy50eXBlPU8sdGhpcy5wPW5ldyBJ''@;'; put 'put ''KHoucCwxNiksdGhpcy5yZWQ9ei5wcmltZT9JLnJlZCh6LnByaW1lKTpJLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IEkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBJKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5u''@;'; put 'put ''PXoubiYmbmV3IEkoei5uLDE2KSx0aGlzLmc9ei5nJiZ0aGlzLnBvaW50RnJvbUpTT04oei5nLHouZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0''@;'; put 'put ''KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBOPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFOfHxOLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJl''@;'; put 'put ''ZCkpfWZ1bmN0aW9uIEYoTyx6KXt0aGlzLmN1cnZlPU8sdGhpcy50eXBlPXosdGhpcy5wcmVjb21wdXRlZD1udWxsfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLnZhbGlkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHosTil7dyh6LnByZWNvbXB1dGVkKTt2YXIgTD16Ll9nZXREb3VibGVzKCksSz1nKE4sMSx0aGlzLl9iaXRMZW5ndGgpLFU9KDE8PEwuc3RlcCsx''@;'; put 'put ''KS0oTC5zdGVwJTI9PTA/MjoxKTtVLz0zO3ZhciBZLHEsVz1bXTtmb3IoWT0wO1k8Sy5sZW5ndGg7WSs9TC5zdGVwKXtxPTA7Zm9yKHZhciBlZT1ZK0wuc3RlcC0xO2VlPj1ZO2VlLS0pcT0ocTw8MSkrS1tlZV07Vy5wdXNoKHEpfWZvcih2YXIgSj10aGlzLmpwb2ludChudWxsLG51bGwsbnVs''@;'; put 'put ''bCksbmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPVU7aWU+MDtpZS0tKXtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKShxPVdbWV0pPT09aWU/bmU9bmUubWl4ZWRBZGQoTC5wb2ludHNbWV0pOnE9PT0taWUmJihuZT1uZS5taXhlZEFkZChMLnBvaW50c1tZXS5uZWcoKSkpO0o9Si5h''@;'; put 'put ''ZGQobmUpfXJldHVybiBKLnRvUCgpfSxQLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih6LE4pe2Zvcih2YXIgTD00LEs9ei5fZ2V0TkFGUG9pbnRzKEwpLFU9Sy5wb2ludHMsVz1nKE4sTD1LLnduZCx0aGlzLl9iaXRMZW5ndGgpLFk9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9''@;'; put 'put ''Vy5sZW5ndGgtMTtxPj0wO3EtLSl7Zm9yKHZhciBlZT0wO3E+PTAmJjA9PT1XW3FdO3EtLSllZSsrO2lmKHE+PTAmJmVlKyssWT1ZLmRibHAoZWUpLHE8MClicmVhazt2YXIgSj1XW3FdO3coMCE9PUopLFk9ImFmZmluZSI9PT16LnR5cGU/WS5taXhlZEFkZChKPjA/VVtKLTE+PjFdOlVbLUot''@;'; put 'put ''MT4+MV0ubmVnKCkpOlkuYWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT16LnR5cGU/WS50b1AoKTpZfSxQLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih6LE4sTCxLLFUpe3ZhciBKLG5lLGllLFc9dGhpcy5fd25hZlQxLFk9dGhpcy5f''@;'; put 'put ''d25hZlQyLHE9dGhpcy5fd25hZlQzLGVlPTA7Zm9yKEo9MDtKPEs7SisrKXt2YXIgbGU9KGllPU5bSl0pLl9nZXROQUZQb2ludHMoeik7V1tKXT1sZS53bmQsWVtKXT1sZS5wb2ludHN9Zm9yKEo9Sy0xO0o+PTE7Si09Mil7dmFyIG1lPUotMSxfZT1KO2lmKDE9PT1XW21lXSYmMT09PVdbX2Vd''@;'; put 'put ''KXt2YXIgVGU9W05bbWVdLG51bGwsbnVsbCxOW19lXV07MD09PU5bbWVdLnkuY21wKE5bX2VdLnkpPyhUZVsxXT1OW21lXS5hZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk6MD09PU5bbWVdLnkuY21wKE5bX2VdLnkucmVkTmVnKCkpPyhUZVsxXT1O''@;'; put 'put ''W21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0uYWRkKE5bX2VdLm5lZygpKSk6KFRlWzFdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpO3ZhciBTZT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxq''@;'; put 'put ''ZT1CKExbbWVdLExbX2VdKTtmb3IoZWU9TWF0aC5tYXgoamVbMF0ubGVuZ3RoLGVlKSxxW21lXT1uZXcgQXJyYXkoZWUpLHFbX2VdPW5ldyBBcnJheShlZSksbmU9MDtuZTxlZTtuZSsrKXFbbWVdW25lXT1TZVszKigxKygwfGplWzBdW25lXSkpKygxKygwfGplWzFdW25lXSkpXSxxW19lXVtu''@;'; put 'put ''ZV09MCxZW21lXT1UZX1lbHNlIHFbbWVdPWcoTFttZV0sV1ttZV0sdGhpcy5fYml0TGVuZ3RoKSxxW19lXT1nKExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCksZWU9TWF0aC5tYXgocVttZV0ubGVuZ3RoLGVlKSxlZT1NYXRoLm1heChxW19lXS5sZW5ndGgsZWUpfXZhciBiPXRoaXMuanBv''@;'; put 'put ''aW50KG51bGwsbnVsbCxudWxsKSx4PXRoaXMuX3duYWZUNDtmb3IoSj1lZTtKPj0wO0otLSl7Zm9yKHZhciBDPTA7Sj49MDspe3ZhciBUPSEwO2ZvcihuZT0wO25lPEs7bmUrKyl4W25lXT0wfHFbbmVdW0pdLDAhPT14W25lXSYmKFQ9ITEpO2lmKCFUKWJyZWFrO0MrKyxKLS19aWYoSj49MCYm''@;'; put 'put ''QysrLGI9Yi5kYmxwKEMpLEo8MClicmVhaztmb3IobmU9MDtuZTxLO25lKyspe3ZhciBIPXhbbmVdOzAhPT1IJiYoSD4wP2llPVlbbmVdW0gtMT4+MV06SDwwJiYoaWU9WVtuZV1bLUgtMT4+MV0ubmVnKCkpLGI9ImFmZmluZSI9PT1pZS50eXBlP2IubWl4ZWRBZGQoaWUpOmIuYWRkKGllKSl9''@;'; put 'put ''fWZvcihKPTA7SjxLO0orKylZW0pdPW51bGw7cmV0dXJuIFU/YjpiLnRvUCgpfSxQLkJhc2VQb2ludD1GLEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sUC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixOKXt6PV8udG9BcnJheSh6LE4pO3ZhciBMPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT16WzBdfHw2PT09elswXXx8Nz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT0yKkwpcmV0dXJuIDY9''@;'; put 'put ''PT16WzBdP3coelt6Lmxlbmd0aC0xXSUyPT0wKTo3PT09elswXSYmdyh6W3oubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoei5zbGljZSgxLDErTCksei5zbGljZSgxK0wsMSsyKkwpKTtpZigoMj09PXpbMF18fDM9PT16WzBdKSYmei5sZW5ndGgtMT09PUwpcmV0dXJuIHRoaXMucG9pbnRG''@;'; put 'put ''cm9tWCh6LnNsaWNlKDEsMStMKSwzPT09elswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxGLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZSh6LCEwKX0sRi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlv''@;'; put 'put ''bih6KXt2YXIgTj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEw9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLE4pO3JldHVybiB6P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChMKTpbNF0uY29uY2F0KEwsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLE4pKX0sRi5wcm90b3R5''@;'; put 'put ''cGUuZW5jb2RlPWZ1bmN0aW9uKHosTil7cmV0dXJuIF8uZW5jb2RlKHRoaXMuX2VuY29kZShOKSx6KX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBOPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxs''@;'; put 'put ''fTtyZXR1cm4gTi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLE4uZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQseiksTi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPU4sdGhpc30sRi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oeil7aWYoIXRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQpcmV0dXJuITE7dmFyIE49dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhTiYmTi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHouYml0TGVuZ3RoKCkrMSkvTi5zdGVwKX0sRi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oeixOKXtpZih0aGlzLnByZWNv''@;'; put 'put ''bXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIEw9W3RoaXNdLEs9dGhpcyxVPTA7VTxOO1UrPXope2Zvcih2YXIgVz0wO1c8ejtXKyspSz1LLmRibCgpO0wucHVzaChLKX1yZXR1cm57c3RlcDp6LHBvaW50czpM''@;'; put 'put ''fX0sRi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBOPVt0aGlzXSxMPSgxPDx6KS0xLEs9MT09PUw/bnVsbDp0aGlzLmRibCgpLFU9''@;'; put 'put ''MTtVPEw7VSsrKU5bVV09TltVLTFdLmFkZChLKTtyZXR1cm57d25kOnoscG9pbnRzOk59fSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLEw9MDtMPHo7TCsrKU49Ti5kYmwoKTty''@;'; put 'put ''ZXR1cm4gTn19LDExMzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTMpLF89eSgzNzg1KSxnPXkoNTcxNyksQj15KDQ5MTgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUChPKXt0aGlzLnR3aXN0ZWQ9MSE9KDB8Ty5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfE8u''@;'; put 'put ''YSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLEIuY2FsbCh0aGlzLCJlZHdhcmRzIixPKSx0aGlzLmE9bmV3IF8oTy5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgXyhPLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMy''@;'; put 'put ''PXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IF8oTy5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksdyghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Ty5jKX1mdW5jdGlvbiBGKE8s''@;'; put 'put ''eixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLE8sInByb2plY3RpdmUiKSxudWxsPT09eiYmbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVy''@;'; put 'put ''byx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IF8oeiwxNiksdGhpcy55PW5ldyBfKE4sMTYpLHRoaXMuej1MP25ldyBfKEwsMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1LJiZuZXcgXyhLLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRo''@;'; put 'put ''aXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9u''@;'; put 'put ''ZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJv''@;'; put 'put ''dG90eXBlLl9tdWxBPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm1PbmVBP3oucmVkTmVnKCk6dGhpcy5hLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMub25lQz96OnRoaXMuYy5yZWRNdWwoeil9LFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlv''@;'; put 'put ''bih6LE4sTCxLKXtyZXR1cm4gdGhpcy5wb2ludCh6LE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih6LE4peyh6PW5ldyBfKHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11''@;'; put 'put ''bChMKSksVT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoTCkpLFc9Sy5yZWRNdWwoVS5yZWRJbnZtKCkpLFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBw''@;'; put 'put ''b2ludCIpO3ZhciBxPVkuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE4mJiFxfHwhTiYmcSkmJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoeixZKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbih6LE4peyh6PW5ldyBfKHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQp''@;'; put 'put ''KTt2YXIgTD16LnJlZFNxcigpLEs9TC5yZWRTdWIodGhpcy5jMiksVT1MLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxXPUsucmVkTXVsKFUucmVkSW52bSgpKTtpZigwPT09Vy5jbXAodGhpcy56ZXJvKSl7aWYoTil0aHJvdyBuZXcgRXJyb3IoImludmFs''@;'; put 'put ''aWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8seil9dmFyIFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiBZLmZyb21SZWQoKS5pc09kZCgpIT09''@;'; put 'put ''TiYmKFk9WS5yZWROZWcoKSksdGhpcy5wb2ludChZLHopfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih6KXtpZih6LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt6Lm5vcm1hbGl6ZSgpO3ZhciBOPXoueC5yZWRTcXIoKSxMPXoueS5yZWRTcXIoKSxLPU4ucmVkTXVsKHRoaXMuYSkucmVk''@;'; put 'put ''QWRkKEwpLFU9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoTikucmVkTXVsKEwpKSk7cmV0dXJuIDA9PT1LLmNtcChVKX0sZyhGLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHope3JldHVybiBGLmZyb21KU09OKHRo''@;'; put 'put ''aXMseil9LFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcgRih0aGlzLHosTixMLEspfSxGLmZyb21KU09OPWZ1bmN0aW9uKHosTil7cmV0dXJuIG5ldyBGKHosTlswXSxOWzFdLE5bMl0pfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwy''@;'; put 'put ''KSsiPiJ9LEYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sRi5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciB6PXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxMPXRoaXMuei5yZWRTcXIoKTtMPUwucmVkSUFkZChMKTt2YXIgSz10aGlzLmN1cnZlLl9tdWxBKHopLFU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1YihOKSxXPUsucmVkQWRk''@;'; put 'put ''KE4pLFk9Vy5yZWRTdWIoTCkscT1LLnJlZFN1YihOKSxlZT1VLnJlZE11bChZKSxKPVcucmVkTXVsKHEpLG5lPVUucmVkTXVsKHEpLGllPVkucmVkTXVsKFcpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGVlLEosaWUsbmUpfSxGLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBL''@;'; put 'put ''LFUsVyxZLHEsZWUsej10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksTj10aGlzLngucmVkU3FyKCksTD10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgSj0oWT10aGlzLmN1cnZlLl9tdWxBKE4pKS5yZWRBZGQoTCk7dGhpcy56T25lPyhLPXoucmVkU3Vi''@;'; put 'put ''KE4pLnJlZFN1YihMKS5yZWRNdWwoSi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxVPUoucmVkTXVsKFkucmVkU3ViKEwpKSxXPUoucmVkU3FyKCkucmVkU3ViKEopLnJlZFN1YihKKSk6KHE9dGhpcy56LnJlZFNxcigpLGVlPUoucmVkU3ViKHEpLnJlZElTdWIocSksSz16LnJlZFN1YihOKS5y''@;'; put 'put ''ZWRJU3ViKEwpLnJlZE11bChlZSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1KLnJlZE11bChlZSkpfWVsc2UgWT1OLnJlZEFkZChMKSxxPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxlZT1ZLnJlZFN1YihxKS5yZWRTdWIocSksSz10aGlzLmN1cnZlLl9tdWxDKHoucmVk''@;'; put 'put ''SVN1YihZKSkucmVkTXVsKGVlKSxVPXRoaXMuY3VydmUuX211bEMoWSkucmVkTXVsKE4ucmVkSVN1YihMKSksVz1ZLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVLFcpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhp''@;'; put 'put ''czp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sRi5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHoueS5yZWRTdWIoei54KSksTD10aGlzLnkucmVkQWRkKHRoaXMueCkucmVk''@;'; put 'put ''TXVsKHoueS5yZWRBZGQoei54KSksSz10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bCh6LnQpLFU9dGhpcy56LnJlZE11bCh6LnoucmVkQWRkKHoueikpLFc9TC5yZWRTdWIoTiksWT1VLnJlZFN1YihLKSxxPVUucmVkQWRkKEspLGVlPUwucmVkQWRkKE4pLEo9Vy5yZWRNdWwo''@;'; put 'put ''WSksbmU9cS5yZWRNdWwoZWUpLGllPVcucmVkTXVsKGVlKSxsZT1ZLnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChKLG5lLGxlLGllKX0sRi5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oeil7dmFyIG5lLGllLE49dGhpcy56LnJlZE11bCh6LnopLEw9Ti5yZWRTcXIoKSxL''@;'; put 'put ''PXRoaXMueC5yZWRNdWwoei54KSxVPXRoaXMueS5yZWRNdWwoei55KSxXPXRoaXMuY3VydmUuZC5yZWRNdWwoSykucmVkTXVsKFUpLFk9TC5yZWRTdWIoVykscT1MLnJlZEFkZChXKSxlZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHoueC5yZWRBZGQoei55KSkucmVkSVN1YihLKS5y''@;'; put 'put ''ZWRJU3ViKFUpLEo9Ti5yZWRNdWwoWSkucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhuZT1OLnJlZE11bChxKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShLKSkpLGllPVkucmVkTXVsKHEpKToobmU9Ti5yZWRNdWwocSkucmVkTXVsKFUucmVkU3ViKEsp''@;'; put 'put ''KSxpZT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChxKSksdGhpcy5jdXJ2ZS5wb2ludChKLG5lLGllKX0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT96OnouaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9l''@;'; put 'put ''eHRBZGQoeik6dGhpcy5fcHJvakFkZCh6KX0sRi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLl9oYXNEb3VibGVzKHopP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMseik6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHopfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVu''@;'; put 'put ''Y3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3osTF0sMiwhMSl9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3osTF0sMiwhMCl9LEYucHJvdG90''@;'; put 'put ''eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgej10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh6KSx0aGlzLnk9dGhpcy55LnJlZE11bCh6KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh6KSksdGhp''@;'; put 'put ''cy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxGLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LEYucHJvdG90eXBlLmdldFg9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXM9PT16fHww''@;'; put 'put ''PT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcCh6LmdldFkoKSl9LEYucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih6KXt2YXIgTj16LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChOKSlyZXR1cm4h''@;'; put 'put ''MDtmb3IodmFyIEw9ei5jbG9uZSgpLEs9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKEwuaWFkZCh0aGlzLmN1cnZlLm4pLEwuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoTi5yZWRJQWRkKEspLDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwfX0sRi5wcm90''@;'; put 'put ''b3R5cGUudG9QPUYucHJvdG90eXBlLm5vcm1hbGl6ZSxGLnByb3RvdHlwZS5taXhlZEFkZD1GLnByb3RvdHlwZS5hZGR9LDgyNTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLmJhc2U9eSg0OTE4KSxJLnNob3J0PXkoNjY3MyksSS5tb250PXkoMjg4MSksSS5lZHdhcmRzPXko''@;'; put 'put ''MTEzOCl9LDI4ODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxfPXkoNTcxNyksZz15KDQ5MTgpLEI9eSg5NTMpO2Z1bmN0aW9uIHcoRil7Zy5jYWxsKHRoaXMsIm1vbnQiLEYpLHRoaXMuYT1uZXcgSShGLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEko''@;'; put 'put ''Ri5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgSSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gUChGLE8s''@;'; put 'put ''eil7Zy5CYXNlUG9pbnQuY2FsbCh0aGlzLEYsInByb2plY3RpdmUiKSxudWxsPT09TyYmbnVsbD09PXo/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBJKE8sMTYpLHRoaXMuej1uZXcgSSh6LDE2KSx0aGlzLngucmVkfHwodGhpcy54''@;'; put 'put ''PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfV8odyxnKSx1ZS5leHBvcnRzPXcsdy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTyl7dmFyIHo9Ty5ub3JtYWxpemUoKS54LE49ei5yZWRT''@;'; put 'put ''cXIoKSxMPU4ucmVkTXVsKHopLnJlZEFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoeik7cmV0dXJuIDA9PT1MLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoTCl9LF8oUCxnLkJhc2VQb2ludCksdy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTyx6KXtyZXR1cm4gdGhpcy5wb2lu''@;'; put 'put ''dChCLnRvQXJyYXkoTyx6KSwxKX0sdy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTyx6KXtyZXR1cm4gbmV3IFAodGhpcyxPLHopfSx3LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE8pe3JldHVybiBQLmZyb21KU09OKHRoaXMsTyl9LFAucHJvdG90eXBlLnByZWNvbXB1dGU9''@;'; put 'put ''ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxQLmZyb21KU09OPWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKE8selswXSx6WzFdfHxPLm9uZSl9LFAu''@;'; put 'put ''cHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+''@;'; put 'put ''In0sUC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LFAucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxMPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxLPXou''@;'; put 'put ''cmVkU3ViKEwpLFU9ei5yZWRNdWwoTCksVz1LLnJlZE11bChMLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoSykpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLFcpfSxQLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9u''@;'; put 'put ''dGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKE8seil7dmFyIE49dGhpcy54LnJlZEFkZCh0aGlzLnopLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLEs9Ty54LnJlZEFkZChPLnopLFc9Ty54LnJlZFN1YihPLnopLnJlZE11bChOKSxZPUsucmVkTXVsKEwpLHE9''@;'; put 'put ''ei56LnJlZE11bChXLnJlZEFkZChZKS5yZWRTcXIoKSksZWU9ei54LnJlZE11bChXLnJlZElTdWIoWSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHEsZWUpfSxQLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTyl7Zm9yKHZhciB6PU8uY2xvbmUoKSxOPXRoaXMsTD10aGlzLmN1''@;'; put 'put ''cnZlLnBvaW50KG51bGwsbnVsbCksVT1bXTswIT09ei5jbXBuKDApO3ouaXVzaHJuKDEpKVUucHVzaCh6LmFuZGxuKDEpKTtmb3IodmFyIFc9VS5sZW5ndGgtMTtXPj0wO1ctLSkwPT09VVtXXT8oTj1OLmRpZmZBZGQoTCx0aGlzKSxMPUwuZGJsKCkpOihMPU4uZGlmZkFkZChMLHRoaXMpLE49''@;'; put 'put ''Ti5kYmwoKSk7cmV0dXJuIEx9LFAucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQg''@;'; put 'put ''b24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5lcT1mdW5jdGlvbihPKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChPLmdldFgoKSl9LFAucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgp''@;'; put 'put ''KSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sUC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUzKSxfPXkoMzc4NSksZz15KDU3MTcpLEI9''@;'; put 'put ''eSg0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7Qi5jYWxsKHRoaXMsInNob3J0Iix6KSx0aGlzLmE9bmV3IF8oei5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKHouYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56''@;'; put 'put ''ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oeiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1du''@;'; put 'put ''YWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gRih6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiYWZmaW5lIiksbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTCwx''@;'; put 'put ''NiksSyYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZl''@;'; put 'put ''LnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBPKHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJqYWNvYmlhbiIpLG51bGw9PT1OJiZudWxsPT09TCYmbnVsbD09PUs/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBfKDAp''@;'; put 'put ''KToodGhpcy54PW5ldyBfKE4sMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0aGlzLno9bmV3IF8oSywxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlz''@;'; put 'put ''LnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oTil7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0''@;'; put 'put ''aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsSztpZihOLmJldGEpTD1uZXcgXyhOLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBVPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO0w9KEw9VVswXS5jbXAoVVsxXSk8MD9VWzBdOlVbMV0pLnRvUmVkKHRoaXMucmVk''@;'; put 'put ''KX1pZihOLmxhbWJkYSlLPW5ldyBfKE4ubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSk/Sz1XWzBdOncoMD09PXRoaXMuZy5tdWwoSz1XWzFdKS54LmNtcCh0aGlzLmcu''@;'; put 'put ''eC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpLLGJhc2lzOk4uYmFzaXM/Ti5iYXNpcy5tYXAoZnVuY3Rpb24ocSl7cmV0dXJue2E6bmV3IF8ocS5hLDE2KSxiOm5ldyBfKHEuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKEspfX19LFAucHJvdG90eXBlLl9nZXRFbmRvUm9v''@;'; put 'put ''dHM9ZnVuY3Rpb24oTil7dmFyIEw9Tj09PXRoaXMucD90aGlzLnJlZDpfLm1vbnQoTiksSz1uZXcgXygyKS50b1JlZChMKS5yZWRJbnZtKCksVT1LLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChLKTtyZXR1cm5bVS5yZWRBZGQoVykuZnJv''@;'; put 'put ''bVJlZCgpLFUucmVkU3ViKFcpLmZyb21SZWQoKV19LFAucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oTil7Zm9yKHZhciBKLG5lLGllLGxlLG1lLF9lLFRlLGplLFYsTD10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEs9TixVPXRoaXMubi5j''@;'; put 'put ''bG9uZSgpLFc9bmV3IF8oMSksWT1uZXcgXygwKSxxPW5ldyBfKDApLGVlPW5ldyBfKDEpLFNlPTA7MCE9PUsuY21wbigwKTspe3ZhciBwPVUuZGl2KEspO2plPVUuc3ViKHAubXVsKEspKSxWPXEuc3ViKHAubXVsKFcpKTt2YXIgYj1lZS5zdWIocC5tdWwoWSkpO2lmKCFpZSYmamUuY21wKEwp''@;'; put 'put ''PDApSj1UZS5uZWcoKSxuZT1XLGllPWplLm5lZygpLGxlPVY7ZWxzZSBpZihpZSYmMj09KytTZSlicmVhaztUZT1qZSxVPUssSz1qZSxxPVcsVz1WLGVlPVksWT1ifW1lPWplLm5lZygpLF9lPVY7dmFyIHg9aWUuc3FyKCkuYWRkKGxlLnNxcigpKTtyZXR1cm4gbWUuc3FyKCkuYWRkKF9lLnNx''@;'; put 'put ''cigpKS5jbXAoeCk+PTAmJihtZT1KLF9lPW5lKSxpZS5uZWdhdGl2ZSYmKGllPWllLm5lZygpLGxlPWxlLm5lZygpKSxtZS5uZWdhdGl2ZSYmKG1lPW1lLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6aWUsYjpsZX0se2E6bWUsYjpfZX1dfSxQLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KE4pe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxLPUxbMF0sVT1MWzFdLFc9VS5iLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLFk9Sy5iLm5lZygpLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLHE9Vy5tdWwoSy5hKSxlZT1ZLm11bChVLmEpLEo9Vy5tdWwoSy5iKSxuZT1ZLm11bChVLmIpO3JldHVy''@;'; put 'put ''bntrMTpOLnN1YihxKS5zdWIoZWUpLGsyOkouYWRkKG5lKS5uZWcoKX19LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oTixMKXsoTj1uZXcgXyhOLDE2KSkucmVkfHwoTj1OLnRvUmVkKHRoaXMucmVkKSk7dmFyIEs9Ti5yZWRTcXIoKS5yZWRNdWwoTikucmVkSUFkZChOLnJlZE11''@;'; put 'put ''bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksVT1LLnJlZFNxcnQoKTtpZigwIT09VS5yZWRTcXIoKS5yZWRTdWIoSykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFc9VS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTCYmIVd8fCFMJiZXKSYm''@;'; put 'put ''KFU9VS5yZWROZWcoKSksdGhpcy5wb2ludChOLFUpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihOKXtpZihOLmluZilyZXR1cm4hMDt2YXIgTD1OLngsSz1OLnksVT10aGlzLmEucmVkTXVsKEwpLFc9TC5yZWRTcXIoKS5yZWRNdWwoTCkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMu''@;'; put 'put ''Yik7cmV0dXJuIDA9PT1LLnJlZFNxcigpLnJlZElTdWIoVykuY21wbigwKX0sUC5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXtmb3IodmFyIFU9dGhpcy5fZW5kb1duYWZUMSxXPXRoaXMuX2VuZG9XbmFmVDIsWT0wO1k8Ti5sZW5ndGg7WSsrKXt2YXIgcT10aGlz''@;'; put 'put ''Ll9lbmRvU3BsaXQoTFtZXSksZWU9TltZXSxKPWVlLl9nZXRCZXRhKCk7cS5rMS5uZWdhdGl2ZSYmKHEuazEuaW5lZygpLGVlPWVlLm5lZyghMCkpLHEuazIubmVnYXRpdmUmJihxLmsyLmluZWcoKSxKPUoubmVnKCEwKSksVVsyKlldPWVlLFVbMipZKzFdPUosV1syKlldPXEuazEsV1syKlkr''@;'; put 'put ''MV09cS5rMn1mb3IodmFyIG5lPXRoaXMuX3duYWZNdWxBZGQoMSxVLFcsMipZLEspLGllPTA7aWU8MipZO2llKyspVVtpZV09bnVsbCxXW2llXT1udWxsO3JldHVybiBuZX0sZyhGLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBGKHRo''@;'; put 'put ''aXMsTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxOLEwpfSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIE49dGhpcy5wcmVjb21wdXRlZDtpZihOJiZOLmJl''@;'; put 'put ''dGEpcmV0dXJuIE4uYmV0YTt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoTil7dmFyIEs9dGhpcy5jdXJ2ZSxVPWZ1bmN0aW9uKFcpe3JldHVybiBLLnBvaW50KFcueC5yZWRNdWwoSy5lbmRvLmJldGEpLFcueSl9''@;'; put 'put ''O04uYmV0YT1MLEwucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6Ti5uYWYmJnt3bmQ6Ti5uYWYud25kLHBvaW50czpOLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOk4uZG91YmxlcyYme3N0ZXA6Ti5kb3VibGVzLnN0ZXAscG9pbnRzOk4uZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0''@;'; put 'put ''dXJuIEx9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVw''@;'; put 'put ''LHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlz''@;'; put 'put ''LnldfSxGLmZyb21KU09OPWZ1bmN0aW9uKE4sTCxLKXsic3RyaW5nIj09dHlwZW9mIEwmJihMPUpTT04ucGFyc2UoTCkpO3ZhciBVPU4ucG9pbnQoTFswXSxMWzFdLEspO2lmKCFMWzJdKXJldHVybiBVO2Z1bmN0aW9uIFcocSl7cmV0dXJuIE4ucG9pbnQocVswXSxxWzFdLEspfXZhciBZPUxb''@;'; put 'put ''Ml07cmV0dXJuIFUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOlkuZG91YmxlcyYme3N0ZXA6WS5kb3VibGVzLnN0ZXAscG9pbnRzOltVXS5jb25jYXQoWS5kb3VibGVzLnBvaW50cy5tYXAoVykpfSxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBvaW50czpbVV0uY29uY2F0KFku''@;'; put 'put ''bmFmLnBvaW50cy5tYXAoVykpfX0sVX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5m''@;'; put 'put ''cm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pbmYpcmV0dXJuIE47aWYoTi5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShOKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKE4pKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoTi54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMueS5yZWRTdWIoTi55KTswIT09TC5jbXBu''@;'; put 'put ''KDApJiYoTD1MLnJlZE11bCh0aGlzLngucmVkU3ViKE4ueCkucmVkSW52bSgpKSk7dmFyIEs9TC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihOLngpLFU9TC5yZWRNdWwodGhpcy54LnJlZFN1YihLKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEss''@;'; put 'put ''VSl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBOPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09Ti5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy5jdXJ2ZS5hLEs9dGhpcy54LnJl''@;'; put 'put ''ZFNxcigpLFU9Ti5yZWRJbnZtKCksVz1LLnJlZEFkZChLKS5yZWRJQWRkKEspLnJlZElBZGQoTCkucmVkTXVsKFUpLFk9Vy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSkscT1XLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUucG9pbnQoWSxxKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbihOKXtyZXR1cm4gTj1u''@;'; put 'put ''ZXcgXyhOLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoTik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxOKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtOXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlz''@;'; put 'put ''LE4pfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMil9LEYucHJvdG90eXBlLmpt''@;'; put 'put ''dWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMiwhMCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4p''@;'; put 'put ''e3JldHVybiB0aGlzPT09Tnx8dGhpcy5pbmY9PT1OLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChOLngpJiYwPT09dGhpcy55LmNtcChOLnkpKX0sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuY3VydmUucG9pbnQo''@;'; put 'put ''dGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoTiYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIEs9dGhpcy5wcmVjb21wdXRlZCxVPWZ1bmN0aW9uKFcpe3JldHVybiBXLm5lZygpfTtMLnByZWNvbXB1dGVkPXtuYWY6Sy5uYWYmJnt3bmQ6Sy5uYWYud25kLHBvaW50czpLLm5hZi5wb2ludHMubWFw''@;'; put 'put ''KFUpfSxkb3VibGVzOksuZG91YmxlcyYme3N0ZXA6Sy5kb3VibGVzLnN0ZXAscG9pbnRzOksuZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9LEYucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6''@;'; put 'put ''dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LGcoTyxCLkJhc2VQb2ludCksUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gbmV3IE8odGhpcyxOLEwsSyl9LE8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJ''@;'; put 'put ''bmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIE49dGhpcy56LnJlZEludm0oKSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKEwpLFU9dGhpcy55LnJlZE11bChMKS5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVKX0sTy5wcm90''@;'; put 'put ''b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlz''@;'; put 'put ''O3ZhciBMPU4uei5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPXRoaXMueC5yZWRNdWwoTCksVz1OLngucmVkTXVsKEspLFk9dGhpcy55LnJlZE11bChMLnJlZE11bChOLnopKSxxPU4ueS5yZWRNdWwoSy5yZWRNdWwodGhpcy56KSksZWU9VS5yZWRTdWIoVyksSj1ZLnJlZFN1YihxKTtp''@;'; put 'put ''ZigwPT09ZWUuY21wbigwKSlyZXR1cm4gMCE9PUouY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgbmU9ZWUucmVkU3FyKCksaWU9bmUucmVkTXVsKGVlKSxsZT1VLnJlZE11bChuZSksbWU9Si5yZWRTcXIoKS5yZWRJQWRkKGllKS5yZWRJ''@;'; put 'put ''U3ViKGxlKS5yZWRJU3ViKGxlKSxfZT1KLnJlZE11bChsZS5yZWRJU3ViKG1lKSkucmVkSVN1YihZLnJlZE11bChpZSkpLFRlPXRoaXMuei5yZWRNdWwoTi56KS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChtZSxfZSxUZSl9LE8ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0''@;'; put 'put ''aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOLnRvSigpO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPXRoaXMueCxVPU4ueC5yZWRNdWwoTCksVz10aGlzLnksWT1OLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLHE9Sy5y''@;'; put 'put ''ZWRTdWIoVSksZWU9Vy5yZWRTdWIoWSk7aWYoMD09PXEuY21wbigwKSlyZXR1cm4gMCE9PWVlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIEo9cS5yZWRTcXIoKSxuZT1KLnJlZE11bChxKSxpZT1LLnJlZE11bChKKSxsZT1lZS5yZWRT''@;'; put 'put ''cXIoKS5yZWRJQWRkKG5lKS5yZWRJU3ViKGllKS5yZWRJU3ViKGllKSxtZT1lZS5yZWRNdWwoaWUucmVkSVN1YihsZSkpLnJlZElTdWIoVy5yZWRNdWwobmUpKSxfZT10aGlzLnoucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLmRibHA9''@;'; put 'put ''ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIU4pcmV0dXJuIHRoaXMuZGJsKCk7dmFyIEw7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBLPXRoaXM7Zm9yKEw9MDtMPE47TCsrKUs9''@;'; put 'put ''Sy5kYmwoKTtyZXR1cm4gS312YXIgVT10aGlzLmN1cnZlLmEsVz10aGlzLmN1cnZlLnRpbnYsWT10aGlzLngscT10aGlzLnksZWU9dGhpcy56LEo9ZWUucmVkU3FyKCkucmVkU3FyKCksbmU9cS5yZWRBZGQocSk7Zm9yKEw9MDtMPE47TCsrKXt2YXIgaWU9WS5yZWRTcXIoKSxsZT1uZS5yZWRT''@;'; put 'put ''cXIoKSxtZT1sZS5yZWRTcXIoKSxfZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLnJlZElBZGQoVS5yZWRNdWwoSikpLFRlPVkucmVkTXVsKGxlKSxTZT1fZS5yZWRTcXIoKS5yZWRJU3ViKFRlLnJlZEFkZChUZSkpLGplPVRlLnJlZElTdWIoU2UpLFY9X2UucmVkTXVsKGplKTtWPVYucmVk''@;'; put 'put ''SUFkZChWKS5yZWRJU3ViKG1lKTt2YXIgcD1uZS5yZWRNdWwoZWUpO0wrMTxOJiYoSj1KLnJlZE11bChtZSkpLFk9U2UsZWU9cCxuZT1WfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLG5lLnJlZE11bChXKSxlZSl9LE8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlz''@;'; put 'put ''SW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LE8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIE4sTCxLO2lmKHRoaXMuek9uZSl7dmFyIFU9dGhpcy54''@;'; put 'put ''LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJ''@;'; put 'put ''U3ViKHEpLG5lPVkucmVkSUFkZChZKTtuZT0obmU9bmUucmVkSUFkZChuZSkpLnJlZElBZGQobmUpLE49SixMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMueC5yZWRTcXIoKSxsZT10aGlzLnkucmVk''@;'; put 'put ''U3FyKCksbWU9bGUucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChsZSkucmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihtZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPWllLnJlZEFkZChpZSkucmVkSUFkZChpZSksU2U9VGUucmVkU3FyKCksamU9bWUucmVkSUFkZChtZSk7amU9KGpl''@;'; put 'put ''PWplLnJlZElBZGQoamUpKS5yZWRJQWRkKGplKSxOPVNlLnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoTikpLnJlZElTdWIoamUpLEs9KEs9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKEspfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEws''@;'; put 'put ''Syl9LE8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtx''@;'; put 'put ''PXEucmVkSUFkZChxKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSk7Tj1KO3ZhciBuZT1ZLnJlZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUpKS5yZWRJQWRkKG5lKSxMPWVl''@;'; put 'put ''LnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMuei5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9dGhpcy54LnJlZE11bChsZSksX2U9dGhpcy54LnJlZFN1YihpZSkucmVkTXVsKHRoaXMueC5yZWRB''@;'; put 'put ''ZGQoaWUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBUZT1tZS5yZWRJQWRkKG1lKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7Tj1fZS5yZWRTcXIoKS5yZWRJU3ViKFNlKSxLPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGxlKS5y''@;'; put 'put ''ZWRJU3ViKGllKTt2YXIgamU9bGUucmVkU3FyKCk7amU9KGplPShqZT1qZS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSkpLnJlZElBZGQoamUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIoTikpLnJlZElTdWIoamUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBl''@;'; put 'put ''Ll9kYmw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmN1cnZlLmEsTD10aGlzLngsSz10aGlzLnksVT10aGlzLnosVz1VLnJlZFNxcigpLnJlZFNxcigpLFk9TC5yZWRTcXIoKSxxPUsucmVkU3FyKCksZWU9WS5yZWRBZGQoWSkucmVkSUFkZChZKS5yZWRJQWRkKE4ucmVkTXVsKFcpKSxKPUwucmVk''@;'; put 'put ''QWRkKEwpLG5lPShKPUoucmVkSUFkZChKKSkucmVkTXVsKHEpLGllPWVlLnJlZFNxcigpLnJlZElTdWIobmUucmVkQWRkKG5lKSksbGU9bmUucmVkSVN1YihpZSksbWU9cS5yZWRTcXIoKTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIF9l''@;'; put 'put ''PWVlLnJlZE11bChsZSkucmVkSVN1YihtZSksVGU9Sy5yZWRBZGQoSykucmVkTXVsKFUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChpZSxfZSxUZSl9LE8ucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7''@;'; put 'put ''dmFyIE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFU9TC5yZWRTcXIoKSxXPU4ucmVkQWRkKE4pLnJlZElBZGQoTiksWT1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKE4pLnJlZElTdWIoVSksZWU9KHE9''@;'; put 'put ''KHE9KHE9cS5yZWRJQWRkKHEpKS5yZWRBZGQocSkucmVkSUFkZChxKSkucmVkSVN1YihZKSkucmVkU3FyKCksSj1VLnJlZElBZGQoVSk7Sj0oSj0oSj1KLnJlZElBZGQoSikpLnJlZElBZGQoSikpLnJlZElBZGQoSik7dmFyIG5lPVcucmVkSUFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKFkpLnJl''@;'; put 'put ''ZElTdWIoZWUpLnJlZElTdWIoSiksaWU9TC5yZWRNdWwobmUpO2llPShpZT1pZS5yZWRJQWRkKGllKSkucmVkSUFkZChpZSk7dmFyIGxlPXRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoaWUpO2xlPShsZT1sZS5yZWRJQWRkKGxlKSkucmVkSUFkZChsZSk7dmFyIG1lPXRoaXMueS5yZWRNdWwo''@;'; put 'put ''bmUucmVkTXVsKEoucmVkSVN1YihuZSkpLnJlZElTdWIocS5yZWRNdWwoZWUpKSk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT10aGlzLnoucmVkQWRkKHEpLnJlZFNxcigpLnJlZElTdWIoSykucmVkSVN1YihlZSk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIE49bmV3IF8oTixMKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LE8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe2lmKCJhZmZpbmUiPT09Ti50eXBlKXJldHVybiB0aGlz''@;'; put 'put ''LmVxKE4udG9KKCkpO2lmKHRoaXM9PT1OKXJldHVybiEwO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4uei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChLKS5yZWRJU3ViKE4ueC5yZWRNdWwoTCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIFU9TC5yZWRNdWwodGhpcy56KSxXPUsucmVk''@;'; put 'put ''TXVsKE4ueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFcpLnJlZElTdWIoTi55LnJlZE11bChVKSkuY21wbigwKX0sTy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChMKTtpZigwPT09''@;'; put 'put ''dGhpcy54LmNtcChLKSlyZXR1cm4hMDtmb3IodmFyIFU9Ti5jbG9uZSgpLFc9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChMKTs7KXtpZihVLmlhZGQodGhpcy5jdXJ2ZS5uKSxVLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEsucmVkSUFkZChXKSwwPT09dGhpcy54LmNtcChLKSly''@;'; put 'put ''ZXR1cm4hMH19LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0''@;'; put 'put ''aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDU0Mjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIE8sST1YLF89eSgzNzE1KSxnPXkoODI1NCksdz15KDk1MykuYXNzZXJ0O2Z1''@;'; put 'put ''bmN0aW9uIFAoeil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09ei50eXBlP25ldyBnLnNob3J0KHopOiJlZHdhcmRzIj09PXoudHlwZT9uZXcgZy5lZHdhcmRzKHopOm5ldyBnLm1vbnQoeiksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD16Lmhhc2gsdyh0''@;'; put 'put ''aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHcodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBGKHosTil7T2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEw9bmV3IFAoTik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkx9KSxMfX0pfUkuUHJlc2V0Q3VydmU9UCxGKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixw''@;'; put 'put ''OiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMx''@;'; put 'put ''NDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4''@;'; put 'put ''IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxGKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2Rk''@;'; put 'put ''Mjk0NSA1YzVjMmEzZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3''@;'; put 'put ''ZTM0Il19KSxGKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAw''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNi''@;'; put 'put ''OWNhYzIgZmM2MzI1NTEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMx''@;'; put 'put ''NWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksRigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZm''@;'; put 'put ''ZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDlj''@;'; put 'put ''NmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMx''@;'; put 'put ''OTZhIGNjYzUyOTczIixoYXNoOl8uc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJj''@;'; put 'put ''NmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLEYoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEy''@;'; put 'put ''ZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDpfLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1''@;'; put 'put ''YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0''@;'; put 'put ''NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxGKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6Xy5zaGEyNTYsZ1JlZDoh''@;'; put 'put ''MSxnOlsiOSJdfSksRigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0''@;'; put 'put ''MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0''@;'; put 'put ''ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7Tz15KDEwMzcpfWNhdGNoe089dm9pZCAwfUYoInNlY3AyNTZrMSIse3R5cGU6''@;'; put 'put ''InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNi''@;'; put 'put ''IGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOl8uc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2''@;'; put 'put ''Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4''@;'; put 'put ''NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLE9d''@;'; put 'put ''fSl9LDc5NTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxfPXkoMjE1NiksZz15KDk1MyksQj15KDU0MjcpLHc9eSg5OTMxKSxQPWcuYXNzZXJ0LEY9eSgxMjUxKSxPPXkoNjExKTtmdW5jdGlvbiB6KE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcg''@;'; put 'put ''eihOKTsic3RyaW5nIj09dHlwZW9mIE4mJihQKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pLCJVbmtub3duIGN1cnZlICIrTiksTj1CW05dKSxOIGluc3RhbmNlb2YgQi5QcmVzZXRDdXJ2ZSYmKE49e2N1cnZlOk59KSx0aGlzLmN1cnZlPU4uY3VydmUuY3VydmUs''@;'; put 'put ''dGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1OLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoTi5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1OLmhhc2h8fE4uY3VydmUuaGFzaH11ZS5leHBvcnRz''@;'; put 'put ''PXosei5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IEYodGhpcyxMKX0sei5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gRi5mcm9tUHJpdmF0ZSh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24o''@;'; put 'put ''TCxLKXtyZXR1cm4gRi5mcm9tUHVibGljKHRoaXMsTCxLKX0sei5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihMKXtMfHwoTD17fSk7Zm9yKHZhciBLPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxwZXJzOkwucGVycyxwZXJzRW5jOkwucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6TC5lbnRy''@;'; put 'put ''b3B5fHx3KHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6TC5lbnRyb3B5JiZMLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksVT10aGlzLm4uYnl0ZUxlbmd0aCgpLFc9dGhpcy5uLnN1YihuZXcgSSgyKSk7Oyl7dmFyIFk9bmV3IEkoSy5nZW5l''@;'; put 'put ''cmF0ZShVKSk7aWYoIShZLmNtcChXKT4wKSlyZXR1cm4gWS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKFkpfX0sei5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVztpZihJLmlzQk4oTCl8fCJudW1iZXIiPT10eXBlb2YgTClXPShMPW5ldyBJKEwsMTYp''@;'; put 'put ''KS5ieXRlTGVuZ3RoKCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIEwpVz1MLmxlbmd0aCxMPW5ldyBJKEwsMTYpO2Vsc2V7dmFyIFk9TC50b1N0cmluZygpO1c9WS5sZW5ndGgrMT4+PjEsTD1uZXcgSShZLDE2KX0ibnVtYmVyIiE9dHlwZW9mIFUmJihVPTgqVyk7dmFyIHE9VS10aGlzLm4u''@;'; put 'put ''Yml0TGVuZ3RoKCk7cmV0dXJuIHE+MCYmKEw9TC51c2hybihxKSksIUsmJkwuY21wKHRoaXMubik+PTA/TC5zdWIodGhpcy5uKTpMfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEwsSyxVLFcpe2lmKCJvYmplY3QiPT10eXBlb2YgVSYmKFc9VSxVPW51bGwpLFd8fChXPXt9KSwic3RyaW5n''@;'; put 'put ''IiE9dHlwZW9mIEwmJiJudW1iZXIiIT10eXBlb2YgTCYmIUkuaXNCTihMKSl7UCgib2JqZWN0Ij09dHlwZW9mIEwmJkwmJiJudW1iZXIiPT10eXBlb2YgTC5sZW5ndGgsIkV4cGVjdGVkIG1lc3NhZ2UgdG8gYmUgYW4gYXJyYXktbGlrZSwgYSBoZXggc3RyaW5nLCBvciBhIEJOIGluc3RhbmNl''@;'; put 'put ''IiksUChMLmxlbmd0aD4+PjA9PT1MLmxlbmd0aCk7Zm9yKHZhciBZPTA7WTxMLmxlbmd0aDtZKyspUCgoMjU1JkxbWV0pPT09TFtZXSl9Sz10aGlzLmtleUZyb21Qcml2YXRlKEssVSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFcubXNnQml0TGVuZ3RoKSxQKCFMLmlzTmVnKCksIkNhbiBu''@;'; put 'put ''b3Qgc2lnbiBhIG5lZ2F0aXZlIG1lc3NhZ2UiKTt2YXIgcT10aGlzLm4uYnl0ZUxlbmd0aCgpLGVlPUsuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixxKSxKPUwudG9BcnJheSgiYmUiLHEpO1AobmV3IEkoSikuZXEoTCksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciBuZT1uZXcg''@;'; put 'put ''Xyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTplZSxub25jZTpKLHBlcnM6Vy5wZXJzLHBlcnNFbmM6Vy5wZXJzRW5jfHwidXRmOCJ9KSxpZT10aGlzLm4uc3ViKG5ldyBJKDEpKSxsZT0wOztsZSsrKXt2YXIgbWU9Vy5rP1cuayhsZSk6bmV3IEkobmUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5n''@;'; put 'put ''dGgoKSkpO2lmKCEoKG1lPXRoaXMuX3RydW5jYXRlVG9OKG1lLCEwKSkuY21wbigxKTw9MHx8bWUuY21wKGllKT49MCkpe3ZhciBfZT10aGlzLmcubXVsKG1lKTtpZighX2UuaXNJbmZpbml0eSgpKXt2YXIgVGU9X2UuZ2V0WCgpLFNlPVRlLnVtb2QodGhpcy5uKTtpZigwIT09U2UuY21wbigw''@;'; put 'put ''KSl7dmFyIGplPW1lLmludm0odGhpcy5uKS5tdWwoU2UubXVsKEsuZ2V0UHJpdmF0ZSgpKS5pYWRkKEwpKTtpZigwIT09KGplPWplLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIFY9KF9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1UZS5jbXAoU2UpPzI6MCk7cmV0dXJuIFcuY2Fub25p''@;'; put 'put ''Y2FsJiZqZS5jbXAodGhpcy5uaCk+MCYmKGplPXRoaXMubi5zdWIoamUpLFZePTEpLG5ldyBPKHtyOlNlLHM6amUscmVjb3ZlcnlQYXJhbTpWfSl9fX19fX0sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEwsSyxVLFcsWSl7WXx8KFk9e30pLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxZ''@;'; put 'put ''Lm1zZ0JpdExlbmd0aCksVT10aGlzLmtleUZyb21QdWJsaWMoVSxXKTt2YXIgcT0oSz1uZXcgTyhLLCJoZXgiKSkucixlZT1LLnM7aWYocS5jbXBuKDEpPDB8fHEuY21wKHRoaXMubik+PTB8fGVlLmNtcG4oMSk8MHx8ZWUuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGxlLEo9ZWUuaW52''@;'; put 'put ''bSh0aGlzLm4pLG5lPUoubXVsKEwpLnVtb2QodGhpcy5uKSxpZT1KLm11bChxKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKGxlPXRoaXMuZy5qbXVsQWRkKG5lLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJmxlLmVxWFRvUChxKTohKGxl''@;'; put 'put ''PXRoaXMuZy5tdWxBZGQobmUsVS5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmMD09PWxlLmdldFgoKS51bW9kKHRoaXMubikuY21wKHEpfSx6LnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKE4sTCxLLFUpe1AoKDMmSyk9PT1LLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMg''@;'; put 'put ''bW9yZSB0aGFuIHR3byBiaXRzIiksTD1uZXcgTyhMLFUpO3ZhciBXPXRoaXMubixZPW5ldyBJKE4pLHE9TC5yLGVlPUwucyxKPTEmSyxuZT1LPj4xO2lmKHEuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZuZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5k''@;'; put 'put ''IHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO3E9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKG5lP3EuYWRkKHRoaXMuY3VydmUubik6cSxKKTt2YXIgaWU9TC5yLmludm0oVyksbGU9Vy5zdWIoWSkubXVsKGllKS51bW9kKFcpLG1lPWVlLm11bChpZSkudW1vZChXKTtyZXR1cm4gdGhpcy5nLm11bEFk''@;'; put 'put ''ZChsZSxxLG1lKX0sei5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihOLEwsSyxVKXtpZihudWxsIT09KEw9bmV3IE8oTCxVKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4gTC5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVz0wO1c8NDtXKyspe3ZhciBZO3RyeXtZPXRoaXMucmVj''@;'; put 'put ''b3ZlclB1YktleShOLEwsVyl9Y2F0Y2h7Y29udGludWV9aWYoWS5lcShLKSlyZXR1cm4gV310aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sMTI1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLGc9eSg5NTMpLmFz''@;'; put 'put ''c2VydDtmdW5jdGlvbiBCKHcsUCl7dGhpcy5lYz13LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsUC5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKFAucHJpdixQLnByaXZFbmMpLFAucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoUC5wdWIsUC5wdWJFbmMpfXVlLmV4cG9ydHM9QixCLmZy''@;'; put 'put ''b21QdWJsaWM9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3B1YjpGLHB1YkVuYzpPfSl9LEIuZnJvbVByaXZhdGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3ByaXY6Rixwcml2RW5jOk99KX0sQi5wcm90''@;'; put 'put ''b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmdldFB1YmxpYygpO3JldHVybiBQLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06UC52YWxpZGF0ZSgpP1AubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1''@;'; put 'put ''bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sQi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFAsRil7cmV0dXJuInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBQJiYoRj1QLFA9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLEY/dGhpcy5wdWIuZW5jb2RlKEYsUCk6dGhpcy5wdWJ9LEIucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuImhleCI9PT1QP3RoaXMucHJpdi50b1N0cmlu''@;'; put 'put ''ZygxNiwyKTp0aGlzLnByaXZ9LEIucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKFAsRil7dGhpcy5wcml2PW5ldyBJKFAsRnx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxCLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKFAs''@;'; put 'put ''Ril7aWYoUC54fHxQLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP2coUC54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlfHwiZWR3YXJkcyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZnKFAueCYmUC55LCJOZWVkIGJvdGggeCBh''@;'; put 'put ''bmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KFAueCxQLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KFAsRil9LEIucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihQKXtyZXR1cm4gUC52YWxpZGF0ZSgpfHxnKFAudmFsaWRh''@;'; put 'put ''dGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxQLm11bCh0aGlzLnByaXYpLmdldFgoKX0sQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMuc2lnbihQLHRoaXMsRixPKX0sQi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFAsRixPKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5lYy52ZXJpZnkoUCxGLHRoaXMsdm9pZCAwLE8pfSxCLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgp''@;'; put 'put ''KSsiID4ifX0sNjExOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDk1MyksZz1fLmFzc2VydDtmdW5jdGlvbiBCKHosTil7aWYoeiBpbnN0YW5jZW9mIEIpcmV0dXJuIHo7dGhpcy5faW1wb3J0REVSKHosTil8fChnKHouciYmei5zLCJTaWduYXR1cmUgd2l0aG91''@;'; put 'put ''dCByIG9yIHMiKSx0aGlzLnI9bmV3IEkoei5yLDE2KSx0aGlzLnM9bmV3IEkoei5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09ei5yZWNvdmVyeVBhcmFtP251bGw6ei5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiB3KCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIFAoeixOKXt2YXIg''@;'; put 'put ''TD16W04ucGxhY2UrK107aWYoISgxMjgmTCkpcmV0dXJuIEw7dmFyIEs9MTUmTDtpZigwPT09S3x8Sz40fHwwPT09eltOLnBsYWNlXSlyZXR1cm4hMTtmb3IodmFyIFU9MCxXPTAsWT1OLnBsYWNlO1c8SztXKyssWSsrKVU8PD04LFV8PXpbWV0sVT4+Pj0wO3JldHVybiEoVTw9MTI3KSYmKE4u''@;'; put 'put ''cGxhY2U9WSxVKX1mdW5jdGlvbiBGKHope2Zvcih2YXIgTj0wLEw9ei5sZW5ndGgtMTsheltOXSYmISgxMjgmeltOKzFdKSYmTjxMOylOKys7cmV0dXJuIDA9PT1OP3o6ei5zbGljZShOKX1mdW5jdGlvbiBPKHosTil7aWYoTjwxMjgpei5wdXNoKE4pO2Vsc2V7dmFyIEw9MSsoTWF0aC5sb2co''@;'; put 'put ''TikvTWF0aC5MTjI+Pj4zKTtmb3Ioei5wdXNoKDEyOHxMKTstLUw7KXoucHVzaChOPj4+KEw8PDMpJjI1NSk7ei5wdXNoKE4pfX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbihOLEwpe049Xy50b0FycmF5KE4sTCk7dmFyIEs9bmV3IHc7aWYoNDghPT1OW0su''@;'; put 'put ''cGxhY2UrK10pcmV0dXJuITE7dmFyIFU9UChOLEspO2lmKCExPT09VXx8VStLLnBsYWNlIT09Ti5sZW5ndGh8fDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFc9UChOLEspO2lmKCExPT09V3x8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIFk9Ti5zbGljZShLLnBsYWNlLFcrSy5w''@;'; put 'put ''bGFjZSk7aWYoSy5wbGFjZSs9VywyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBxPVAoTixLKTtpZighMT09PXF8fE4ubGVuZ3RoIT09cStLLnBsYWNlfHwxMjgmTltLLnBsYWNlXSlyZXR1cm4hMTt2YXIgZWU9Ti5zbGljZShLLnBsYWNlLHErSy5wbGFjZSk7aWYoMD09PVlbMF0pe2lm''@;'; put 'put ''KCEoMTI4JllbMV0pKXJldHVybiExO1k9WS5zbGljZSgxKX1pZigwPT09ZWVbMF0pe2lmKCEoMTI4JmVlWzFdKSlyZXR1cm4hMTtlZT1lZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBJKFkpLHRoaXMucz1uZXcgSShlZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LEIucHJvdG90''@;'; put 'put ''eXBlLnRvREVSPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuci50b0FycmF5KCksSz10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmTFswXSYmKEw9WzBdLmNvbmNhdChMKSksMTI4JktbMF0mJihLPVswXS5jb25jYXQoSykpLEw9RihMKSxLPUYoSyk7IShLWzBdfHwxMjgmS1sxXSk7KUs9Sy5zbGlj''@;'; put 'put ''ZSgxKTt2YXIgVT1bMl07TyhVLEwubGVuZ3RoKSwoVT1VLmNvbmNhdChMKSkucHVzaCgyKSxPKFUsSy5sZW5ndGgpO3ZhciBXPVUuY29uY2F0KEspLFk9WzQ4XTtyZXR1cm4gTyhZLFcubGVuZ3RoKSxZPVkuY29uY2F0KFcpLF8uZW5jb2RlKFksTil9fSw1OTgwOih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoMzcxNSksXz15KDU0MjcpLGc9eSg5NTMpLEI9Zy5hc3NlcnQsdz1nLnBhcnNlQnl0ZXMsUD15KDkwODcpLEY9eSgzNjIyKTtmdW5jdGlvbiBPKHope2lmKEIoImVkMjU1MTkiPT09eiwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0''@;'; put 'put ''YW5jZW9mIE8pKXJldHVybiBuZXcgTyh6KTt0aGlzLmN1cnZlPXo9X1t6XS5jdXJ2ZSx0aGlzLmc9ei5nLHRoaXMuZy5wcmVjb21wdXRlKHoubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9ei5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWls''@;'; put 'put ''KHoubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9SS5zaGE1MTJ9dWUuZXhwb3J0cz1PLE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTixMKXtOPXcoTik7dmFyIEs9dGhpcy5rZXlGcm9tU2VjcmV0KEwpLFU9dGhpcy5oYXNoSW50KEsubWVzc2FnZVByZWZpeCgpLE4pLFc9dGhpcy5nLm11''@;'; put 'put ''bChVKSxZPXRoaXMuZW5jb2RlUG9pbnQoVykscT10aGlzLmhhc2hJbnQoWSxLLnB1YkJ5dGVzKCksTikubXVsKEsucHJpdigpKSxlZT1VLmFkZChxKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpXLFM6ZWUsUmVuY29kZWQ6WX0pfSxPLnByb3RvdHlw''@;'; put 'put ''ZS52ZXJpZnk9ZnVuY3Rpb24oTixMLEspe2lmKE49dyhOKSwoTD10aGlzLm1ha2VTaWduYXR1cmUoTCkpLlMoKS5ndGUoTC5lZGRzYS5jdXJ2ZS5uKXx8TC5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIgVT10aGlzLmtleUZyb21QdWJsaWMoSyksVz10aGlzLmhhc2hJbnQoTC5SZW5jb2RlZCgp''@;'; put 'put ''LFUucHViQnl0ZXMoKSxOKSxZPXRoaXMuZy5tdWwoTC5TKCkpO3JldHVybiBMLlIoKS5hZGQoVS5wdWIoKS5tdWwoVykpLmVxKFkpfSxPLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBOPXRoaXMuaGFzaCgpLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKU4udXBkYXRl''@;'; put 'put ''KGFyZ3VtZW50c1tMXSk7cmV0dXJuIGcuaW50RnJvbUxFKE4uZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sTy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihOKXtyZXR1cm4gUC5mcm9tUHVibGljKHRoaXMsTil9LE8ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rp''@;'; put 'put ''b24oTil7cmV0dXJuIFAuZnJvbVNlY3JldCh0aGlzLE4pfSxPLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKHRoaXMsTil9LE8ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPU4uZ2V0WSgpLnRv''@;'; put 'put ''QXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTFt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1OLmdldFgoKS5pc09kZCgpPzEyODowLEx9LE8ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPShOPWcucGFyc2VCeXRlcyhOKSkubGVuZ3RoLTEsSz1O''@;'; put 'put ''LnNsaWNlKDAsTCkuY29uY2F0KC0xMjkmTltMXSksVT0hISgxMjgmTltMXSksVz1nLmludEZyb21MRShLKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFcsVSl9LE8ucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gTi50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGlu''@;'; put 'put ''Z0xlbmd0aCl9LE8ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gZy5pbnRGcm9tTEUoTil9LE8ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoOTUzKSxfPUkuYXNzZXJ0LGc9SS5wYXJzZUJ5dGVzLEI9SS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KFAsRil7dGhpcy5lZGRzYT1QLHRoaXMuX3NlY3JldD1nKEYuc2VjcmV0KSxQLmlzUG9pbnQoRi5wdWIpP3RoaXMuX3B1Yj1GLnB1Yjp0aGlzLl9wdWJCeXRlcz1nKEYu''@;'; put 'put ''cHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtwdWI6T30pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtzZWNyZXQ6T30pfSx3LnByb3RvdHlwZS5zZWNyZXQ9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxCKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksQih3LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9p''@;'; put 'put ''bnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksQih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5lZGRzYSxPPXRoaXMuaGFzaCgpLHo9Ri5lbmNvZGluZ0xlbmd0aC0xLE49Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpO3JldHVy''@;'; put 'put ''biBOWzBdJj0yNDgsTlt6XSY9MTI3LE5bel18PTY0LE59KSxCKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksQih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5z''@;'; put 'put ''ZWNyZXQoKSkuZGlnZXN0KCl9KSxCKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIg''@;'; put 'put ''Y2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEYsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShGLE8sdGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNy''@;'; put 'put ''ZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxJLmVuY29kZSh0aGlzLnNlY3JldCgpLEYpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRil7cmV0dXJuIEkuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxGKX0sdWUuZXhwb3J0cz13fSwzNjIyOih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoMzc4NSksXz15KDk1MyksZz1fLmFzc2VydCxCPV8uY2FjaGVkUHJvcGVydHksdz1fLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gUChGLE8pe3RoaXMuZWRkc2E9Riwib2JqZWN0IiE9dHlwZW9mIE8mJihPPXcoTykpLEFycmF5LmlzQXJyYXkoTykmJihnKE8ubGVuZ3RoPT09MipG''@;'; put 'put ''LmVuY29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLE89e1I6Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpLFM6Ty5zbGljZShGLmVuY29kaW5nTGVuZ3RoKX0pLGcoTy5SJiZPLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEYuaXNQb2ludChPLlIpJiYo''@;'; put 'put ''dGhpcy5fUj1PLlIpLE8uUyBpbnN0YW5jZW9mIEkmJih0aGlzLl9TPU8uUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShPLlIpP08uUjpPLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoTy5TKT9PLlM6Ty5TZW5jb2RlZH1CKFAsIlMiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxCKFAsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLEIoUCwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9p''@;'; put 'put ''bnQodGhpcy5SKCkpfSksQihQLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksUC5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LFAucHJv''@;'; put 'put ''dG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIF8uZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx1ZS5leHBvcnRzPVB9LDEwMzc6dWU9Pnt1ZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIx''@;'; put 'put ''YzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIz''@;'; put 'put ''ZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJh''@;'; put 'put ''NGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVj''@;'; put 'put ''YjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFh''@;'; put 'put ''NmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3''@;'; put 'put ''OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAi''@;'; put 'put ''LCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5''@;'; put 'put ''NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJm''@;'; put 'put ''MTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2Rk''@;'; put 'put ''YTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4''@;'; put 'put ''YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJj''@;'; put 'put ''M2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRk''@;'; put 'put ''ZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJd''@;'; put 'put ''LFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5''@;'; put 'put ''NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5''@;'; put 'put ''ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5''@;'; put 'put ''Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3''@;'; put 'put ''MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcy''@;'; put 'put ''YTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZl''@;'; put 'put ''M2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzki''@;'; put 'put ''LCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNi''@;'; put 'put ''ZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3''@;'; put 'put ''NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNh''@;'; put 'put ''N2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2''@;'; put 'put ''OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2''@;'; put 'put ''MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEy''@;'; put 'put ''Y2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJd''@;'; put 'put ''LFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5''@;'; put 'put ''ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWVi''@;'; put 'put ''M2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBj''@;'; put 'put ''NGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0''@;'; put 'put ''Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0''@;'; put 'put ''YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5''@;'; put 'put ''M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2Iiwi''@;'; put 'put ''NDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1''@;'; put 'put ''ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJj''@;'; put 'put ''ZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFj''@;'; put 'put ''OWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4''@;'; put 'put ''NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDVi''@;'; put 'put ''YmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVk''@;'; put 'put ''ZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxb''@;'; put 'put ''IjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEw''@;'; put 'put ''N2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1''@;'; put 'put ''ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJm''@;'; put 'put ''YjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQz''@;'; put 'put ''ODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUw''@;'; put 'put ''YWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNi''@;'; put 'put ''ZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIs''@;'; put 'put ''IjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2Nj''@;'; put 'put ''YjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4''@;'; put 'put ''MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFk''@;'; put 'put ''ZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5Njgw''@;'; put 'put ''OTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMy''@;'; put 'put ''ZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBm''@;'; put 'put ''ZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0''@;'; put 'put ''MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRl''@;'; put 'put ''MmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5''@;'; put 'put ''OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgi''@;'; put 'put ''LCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNj''@;'; put 'put ''NmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5''@;'; put 'put ''ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0''@;'; put 'put ''ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZm''@;'; put 'put ''MjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2Jm''@;'; put 'put ''MjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2My''@;'; put 'put ''MzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0s''@;'; put 'put ''WyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1''@;'; put 'put ''NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVl''@;'; put 'put ''ZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgw''@;'; put 'put ''ODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGVi''@;'; put 'put ''MWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDli''@;'; put 'put ''Njk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1''@;'; put 'put ''ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5''@;'; put 'put ''NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMx''@;'; put 'put ''ZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFm''@;'; put 'put ''NzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAz''@;'; put 'put ''NTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2Mx''@;'; put 'put ''MjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0''@;'; put 'put ''ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAx''@;'; put 'put ''OTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIx''@;'; put 'put ''ODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRm''@;'; put 'put ''NzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRj''@;'; put 'put ''ZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQw''@;'; put 'put ''MGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJj''@;'; put 'put ''MmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2Zjhj''@;'; put 'put ''OTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3''@;'; put 'put ''MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIz''@;'; put 'put ''MGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJj''@;'; put 'put ''MjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRi''@;'; put 'put ''ODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5''@;'; put 'put ''Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5''@;'; put 'put ''Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQy''@;'; put 'put ''YmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBi''@;'; put 'put ''YWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxb''@;'; put 'put ''ImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1''@;'; put 'put ''ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJl''@;'; put 'put ''YzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2Fm''@;'; put 'put ''NDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQx''@;'; put 'put ''MWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkx''@;'; put 'put ''NGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIy''@;'; put 'put ''YzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1''@;'; put 'put ''ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2''@;'; put 'put ''MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEz''@;'; put 'put ''ZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3''@;'; put 'put ''ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0''@;'; put 'put ''ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1''@;'; put 'put ''OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdk''@;'; put 'put ''OGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMz''@;'; put 'put ''NjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0''@;'; put 'put ''MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVm''@;'; put 'put ''Yjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYy''@;'; put 'put ''NWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2''@;'; put 'put ''ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlh''@;'; put 'put ''MTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAx''@;'; put 'put ''MDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0''@;'; put 'put ''OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUy''@;'; put 'put ''MDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJd''@;'; put 'put ''LFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4''@;'; put 'put ''ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1''@;'; put 'put ''N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgx''@;'; put 'put ''ZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNh''@;'; put 'put ''MjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMw''@;'; put 'put ''NDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEz''@;'; put 'put ''YzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIs''@;'; put 'put ''IjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0''@;'; put 'put ''ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5''@;'; put 'put ''MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5''@;'; put 'put ''ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWVi''@;'; put 'put ''ZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3''@;'; put 'put ''YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNj''@;'; put 'put ''MDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJd''@;'; put 'put ''LFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5''@;'; put 'put ''OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2Zl''@;'; put 'put ''ZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVj''@;'; put 'put ''NWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2''@;'; put 'put ''MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2Yz''@;'; put 'put ''MTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRi''@;'; put 'put ''OWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYz''@;'; put 'put ''IiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2''@;'; put 'put ''ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZm''@;'; put 'put ''NjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3''@;'; put 'put ''Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRm''@;'; put 'put ''YzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5''@;'; put 'put ''MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMy''@;'; put 'put ''ZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0s''@;'; put 'put ''WyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFm''@;'; put 'put ''YjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYx''@;'; put 'put ''ZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1''@;'; put 'put ''NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlk''@;'; put 'put ''MWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFk''@;'; put 'put ''YTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMw''@;'; put 'put ''MDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUi''@;'; put 'put ''LCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUy''@;'; put 'put ''ODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3''@;'; put 'put ''OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYy''@;'; put 'put ''NmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZj''@;'; put 'put ''ZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBh''@;'; put 'put ''OTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2''@;'; put 'put ''Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJd''@;'; put 'put ''XX19fSw5NTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WCxfPXkoMzc4NSksZz15KDk3NDYpLEI9eSg0NTA0KTtJLmFzc2VydD1nLEkudG9BcnJheT1CLnRvQXJyYXksSS56ZXJvMj1CLnplcm8yLEkudG9IZXg9Qi50b0hleCxJLmVuY29kZT1CLmVuY29kZSxJLmdldE5BRj1mdW5j''@;'; put 'put ''dGlvbiB3KE4sTCxLKXt2YXIgVyxVPW5ldyBBcnJheShNYXRoLm1heChOLmJpdExlbmd0aCgpLEspKzEpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKz0xKVVbV109MDt2YXIgWT0xPDxMKzEscT1OLmNsb25lKCk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crKyl7dmFyIGVlLEo9cS5hbmRsbihZLTEpO3Eu''@;'; put 'put ''aXNPZGQoKT9xLmlzdWJuKGVlPUo+KFk+PjEpLTE/KFk+PjEpLUo6Sik6ZWU9MCxVW1ddPWVlLHEuaXVzaHJuKDEpfXJldHVybiBVfSxJLmdldEpTRj1mdW5jdGlvbiBQKE4sTCl7dmFyIEs9W1tdLFtdXTtOPU4uY2xvbmUoKSxMPUwuY2xvbmUoKTtmb3IodmFyIFksVT0wLFc9MDtOLmNtcG4o''@;'; put 'put ''LVUpPjB8fEwuY21wbigtVyk+MDspe3ZhciBKLG5lLHE9Ti5hbmRsbigzKStVJjMsZWU9TC5hbmRsbigzKStXJjM7Mz09PXEmJihxPS0xKSwzPT09ZWUmJihlZT0tMSksSj0xJnE/MyE9KFk9Ti5hbmRsbig3KStVJjcpJiY1IT09WXx8MiE9PWVlP3E6LXE6MCxLWzBdLnB1c2goSiksbmU9MSZl''@;'; put 'put ''ZT8zIT0oWT1MLmFuZGxuKDcpK1cmNykmJjUhPT1ZfHwyIT09cT9lZTotZWU6MCxLWzFdLnB1c2gobmUpLDIqVT09PUorMSYmKFU9MS1VKSwyKlc9PT1uZSsxJiYoVz0xLVcpLE4uaXVzaHJuKDEpLEwuaXVzaHJuKDEpfXJldHVybiBLfSxJLmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uIEYoTixM''@;'; put 'put ''LEspe3ZhciBVPSJfIitMO04ucHJvdG90eXBlW0xdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbVV0/dGhpc1tVXTp0aGlzW1VdPUsuY2FsbCh0aGlzKX19LEkucGFyc2VCeXRlcz1mdW5jdGlvbiBPKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTj9JLnRvQXJyYXkoTiwiaGV4''@;'; put 'put ''Iik6Tn0sSS5pbnRGcm9tTEU9ZnVuY3Rpb24geihOKXtyZXR1cm4gbmV3IF8oTiwiaGV4IiwibGUiKX19LDM3ODU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZh''@;'; put 'put ''aWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0''@;'; put 'put ''cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg1NTY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+''@;'; put 'put ''PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9''@;'; put 'put ''cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVj''@;'; put 'put ''dG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyIt''@;'; put 'put ''Ij09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRv''@;'; put 'put ''QXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRz''@;'; put 'put ''PVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50''@;'; put 'put ''b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxl''@;'; put 'put ''bmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0Nd''@;'; put 'put ''fHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtD''@;'; put 'put ''KzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRo''@;'; put 'put ''LmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMp''@;'; put 'put ''PDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmos''@;'; put 'put ''VD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0Mt''@;'; put 'put ''LSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAh''@;'; put 'put ''PT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rp''@;'; put 'put ''b24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBl''@;'; put 'put ''LmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5z''@;'; put 'put ''dHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9''@;'; put 'put ''PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAw''@;'; put 'put ''MDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4''@;'; put 'put ''ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5''@;'; put 'put ''NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxl''@;'; put 'put ''bmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0''@;'; put 'put ''ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0''@;'; put 'put ''dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7''@;'; put 'put ''SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYo''@;'; put 'put ''eD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2''@;'; put 'put ''ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRz''@;'; put 'put ''WzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''Py1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4g''@;'; put 'put ''ZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJu''@;'; put 'put ''KDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHoz''@;'; put 'put ''Mj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnBy''@;'; put 'put ''b3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3''@;'; put 'put ''LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRM''@;'; put 'put ''ZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0x''@;'; put 'put ''KT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAu''@;'; put 'put ''bGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9u''@;'; put 'put ''ZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5j''@;'; put 'put ''dGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndv''@;'; put 'put ''cmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCku''@;'; put 'put ''aXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEw''@;'; put 'put ''ODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNl''@;'; put 'put ''dG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jk''@;'; put 'put ''c1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAh''@;'; put 'put ''PT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1w''@;'; put 'put ''Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxl''@;'; put 'put ''bmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1T''@;'; put 'put ''aWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0''@;'; put 'put ''aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5s''@;'; put 'put ''ZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4''@;'; put 'put ''KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3Jk''@;'; put 'put ''cyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUs''@;'; put 'put ''SWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0''@;'; put 'put ''Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEz''@;'; put 'put ''LHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5l''@;'; put 'put ''Z2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEz''@;'; put 'put ''KXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZl''@;'; put 'put ''LFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRo''@;'; put 'put ''LmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11''@;'; put 'put ''bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyht''@;'; put 'put ''Pj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11''@;'; put 'put ''bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRo''@;'; put 'put ''LmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExy''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxX''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''Y24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxX''@;'; put 'put ''ZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxh''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRo''@;'; put 'put ''LmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyht''@;'; put 'put ''Pj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEs''@;'; put 'put ''SFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBl''@;'; put 'put ''Lm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2''@;'; put 'put ''ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208''@;'; put 'put ''PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1D''@;'; put 'put ''fXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtD''@;'; put 'put ''PHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90''@;'; put 'put ''b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7''@;'; put 'put ''ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0s''@;'; put 'put ''eGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90''@;'; put 'put ''eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7''@;'; put 'put ''Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgu''@;'; put 'put ''cm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipI''@;'; put 'put ''XT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyli''@;'; put 'put ''W3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJy''@;'; put 'put ''YXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9y''@;'; put 'put ''bShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUo''@;'; put 'put ''RSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''Lm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcg''@;'; put 'put ''QXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8Njcx''@;'; put 'put ''MDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09''@;'; put 'put ''YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNx''@;'; put 'put ''cj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0o''@;'; put 'put ''Vi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5s''@;'; put 'put ''ZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAh''@;'; put 'put ''PT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRo''@;'; put 'put ''aXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEw''@;'; put 'put ''ODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5s''@;'; put 'put ''ZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09''@;'; put 'put ''QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVy''@;'; put 'put ''biBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0''@;'; put 'put ''dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3Ro''@;'; put 'put ''LTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHAp''@;'; put 'put ''LGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1ti''@;'; put 'put ''XS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRo''@;'; put 'put ''aXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7''@;'; put 'put ''VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhp''@;'; put 'put ''cy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09Njcx''@;'; put 'put ''MDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51''@;'; put 'put ''c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0Er''@;'; put 'put ''KyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8''@;'; put 'put ''Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEp''@;'; put 'put ''O20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5p''@;'; put 'put ''c1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2''@;'; put 'put ''ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRo''@;'; put 'put ''aXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09''@;'; put 'put ''PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRz''@;'; put 'put ''WzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0s''@;'; put 'put ''dy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2''@;'; put 'put ''Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49''@;'; put 'put ''ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZh''@;'; put 'put ''ciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlk''@;'; put 'put ''aXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3''@;'; put 'put ''IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2Fl''@;'; put 'put ''LHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9''@;'; put 'put ''MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5p''@;'; put 'put ''c3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2Qo''@;'; put 'put ''cCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5p''@;'; put 'put ''c09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgp''@;'; put 'put ''LEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJl''@;'; put 'put ''dHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1''@;'; put 'put ''c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxu''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlz''@;'; put 'put ''LndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgr''@;'; put 'put ''KyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0w''@;'; put 'put ''fHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAx''@;'; put 'put ''PT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5j''@;'; put 'put ''bXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcu''@;'; put 'put ''cHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21S''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVk''@;'; put 'put ''PXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlh''@;'; put 'put ''ZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5z''@;'; put 'put ''aGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11''@;'; put 'put ''bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1u''@;'; put 'put ''ZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNh''@;'; put 'put ''bGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51''@;'; put 'put ''bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9k''@;'; put 'put ''KHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9''@;'; put 'put ''aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXAp''@;'; put 'put ''LHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAw''@;'; put 'put ''IT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBl''@;'; put 'put ''LnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9''@;'; put 'put ''cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8x''@;'; put 'put ''MDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9''@;'; put 'put ''OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rp''@;'; put 'put ''b24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtp''@;'; put 'put ''ZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9''@;'; put 'put ''bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBl''@;'; put 'put ''Ll92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1Yihw''@;'; put 'put ''KS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21w''@;'; put 'put ''bigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3Io''@;'; put 'put ''dmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRM''@;'; put 'put ''ZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRl''@;'; put 'put ''LmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNl''@;'; put 'put ''PVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlv''@;'; put 'put ''bihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNb''@;'; put 'put ''VF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0m''@;'; put 'put ''JihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9k''@;'; put 'put ''KHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5''@;'; put 'put ''cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90''@;'; put 'put ''eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0p''@;'; put 'put ''LFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5p''@;'; put 'put ''c1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQp''@;'; put 'put ''LEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwo''@;'; put 'put ''dGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNDQyOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKFgpdHJ5e1goe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7WD0hMX11ZS5leHBvcnRzPVh9LDM5ODE6dWU9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1FdmFsRXJyb3J9LDE2NDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1FcnJvcn0sNDcyNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVJhbmdlRXJyb3J9LDY3MTI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1SZWZlcmVu''@;'; put 'put ''Y2VFcnJvcn0sMzQ2NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVN5bnRheEVycm9yfSw0NDUzOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9VHlwZUVycm9yfSwzOTE1OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9VVJJRXJyb3J9LDg4OTI6dWU9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dWUuZXhwb3J0cz1PYmplY3R9LDcxODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEIsST15KDUxMDgpLF89Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxnPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmFwcGx5P18uYXBwbHk6ZnVuY3Rpb24oX2UsVGUsU2Up''@;'; put 'put ''e3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChfZSxUZSxTZSl9O0I9XyYmImZ1bmN0aW9uIj09dHlwZW9mIF8ub3duS2V5cz9fLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h''@;'; put 'put ''bWVzKF9lKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhfZSkpfTpmdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKX07dmFyIFA9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihfZSl7cmV0dXJuIF9lIT1fZX07ZnVuY3Rpb24gRigpe0Yu''@;'; put 'put ''aW5pdC5jYWxsKHRoaXMpfXVlLmV4cG9ydHM9Rix1ZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gbmUobWUsX2Upe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gamUocCl7bWUucmVtb3ZlTGlzdGVuZXIoX2UsViksU2UocCl9ZnVuY3Rpb24gVigpeyJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBtZS5yZW1vdmVMaXN0ZW5lciYmbWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixqZSksVGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1sZShtZSxfZSxWLHtvbmNlOiEwfSksImVycm9yIiE9PV9lJiZmdW5jdGlvbiBpZShtZSxfZSxUZSl7ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IG1lLm9uJiZsZShtZSwiZXJyb3IiLF9lLFRlKX0obWUsamUse29uY2U6ITB9KX0pfSxGLkV2ZW50RW1pdHRlcj1GLEYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEYucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEYucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBPPTEwO2Z1''@;'; put 'put ''bmN0aW9uIHoobWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbWUpfWZ1bmN0aW9uIE4obWUpe3JldHVybiB2b2lkIDA9''@;'; put 'put ''PT1tZS5fbWF4TGlzdGVuZXJzP0YuZGVmYXVsdE1heExpc3RlbmVyczptZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIEwobWUsX2UsVGUsU2Upe3ZhciBqZSxWLHA7aWYoeihUZSksdm9pZCAwPT09KFY9bWUuX2V2ZW50cyk/KFY9bWUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLG1lLl9l''@;'; put 'put ''dmVudHNDb3VudD0wKToodm9pZCAwIT09Vi5uZXdMaXN0ZW5lciYmKG1lLmVtaXQoIm5ld0xpc3RlbmVyIixfZSxUZS5saXN0ZW5lcj9UZS5saXN0ZW5lcjpUZSksVj1tZS5fZXZlbnRzKSxwPVZbX2VdKSx2b2lkIDA9PT1wKXA9VltfZV09VGUsKyttZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgcD9wPVZbX2VdPVNlP1tUZSxwXTpbcCxUZV06U2U/cC51bnNoaWZ0KFRlKTpwLnB1c2goVGUpLChqZT1OKG1lKSk+MCYmcC5sZW5ndGg+amUmJiFwLndhcm5lZCl7cC53YXJuZWQ9ITA7dmFyIGI9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVt''@;'; put 'put ''b3J5IGxlYWsgZGV0ZWN0ZWQuICIrcC5sZW5ndGgrIiAiK1N0cmluZyhfZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Yi5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGIuZW1pdHRlcj1tZSxi''@;'; put 'put ''LnR5cGU9X2UsYi5jb3VudD1wLmxlbmd0aCxmdW5jdGlvbiB3KG1lKXtJJiZJLndhcm4mJkkud2FybihtZSl9KGIpfXJldHVybiBtZX1mdW5jdGlvbiBLKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhp''@;'; put 'put ''cy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBVKG1lLF9lLFRlKXt2YXIgU2U9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0''@;'; put 'put ''Om1lLHR5cGU6X2UsbGlzdGVuZXI6VGV9LGplPUsuYmluZChTZSk7cmV0dXJuIGplLmxpc3RlbmVyPVRlLFNlLndyYXBGbj1qZSxqZX1mdW5jdGlvbiBXKG1lLF9lLFRlKXt2YXIgU2U9bWUuX2V2ZW50cztpZih2b2lkIDA9PT1TZSlyZXR1cm5bXTt2YXIgamU9U2VbX2VdO3JldHVybiB2b2lk''@;'; put 'put ''IDA9PT1qZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgamU/VGU/W2plLmxpc3RlbmVyfHxqZV06W2plXTpUZT9mdW5jdGlvbiBKKG1lKXtmb3IodmFyIF9lPW5ldyBBcnJheShtZS5sZW5ndGgpLFRlPTA7VGU8X2UubGVuZ3RoOysrVGUpX2VbVGVdPW1lW1RlXS5saXN0ZW5lcnx8bWVbVGVdO3Jl''@;'; put 'put ''dHVybiBfZX0oamUpOnEoamUsamUubGVuZ3RoKX1mdW5jdGlvbiBZKG1lKXt2YXIgX2U9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2VbbWVdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1UZSlyZXR1cm4gVGUubGVuZ3RofXJldHVy''@;'; put 'put ''biAwfWZ1bmN0aW9uIHEobWUsX2Upe2Zvcih2YXIgVGU9bmV3IEFycmF5KF9lKSxTZT0wO1NlPF9lOysrU2UpVGVbU2VdPW1lW1NlXTtyZXR1cm4gVGV9ZnVuY3Rpb24gbGUobWUsX2UsVGUsU2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtZS5vbilTZS5vbmNlP21lLm9uY2UoX2UsVGUpOm1l''@;'; put 'put ''Lm9uKF9lLFRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBtZSk7bWUuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihfZSxmdW5jdGlvbiBqZShWKXtTZS5vbmNlJiZtZS5yZW1vdmVFdmVudExpc3RlbmVyKF9lLGplKSxUZShWKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE99''@;'; put 'put ''LHNldDpmdW5jdGlvbihtZSl7aWYoIm51bWJlciIhPXR5cGVvZiBtZXx8bWU8MHx8UChtZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVj''@;'; put 'put ''ZWl2ZWQgJyttZSsiLiIpO089bWV9fSksRi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRz''@;'; put 'put ''Q291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxGLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe2lmKCJudW1iZXIiIT10eXBlb2YgX2V8fF9lPDB8fFAoX2UpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUg''@;'; put 'put ''b2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrX2UrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPV9lLHRoaXN9LEYucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBOKHRoaXMp''@;'; put 'put ''fSxGLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKF9lKXtmb3IodmFyIFRlPVtdLFNlPTE7U2U8YXJndW1lbnRzLmxlbmd0aDtTZSsrKVRlLnB1c2goYXJndW1lbnRzW1NlXSk7dmFyIGplPSJlcnJvciI9PT1fZSxWPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1WKWplPWplJiZ2b2lkIDA9PT1W''@;'; put 'put ''LmVycm9yO2Vsc2UgaWYoIWplKXJldHVybiExO2lmKGplKXt2YXIgcDtpZihUZS5sZW5ndGg+MCYmKHA9VGVbMF0pLHAgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBwO3ZhciBiPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKHA/IiAoIitwLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgYi5j''@;'; put 'put ''b250ZXh0PXAsYn12YXIgeD1WW19lXTtpZih2b2lkIDA9PT14KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB4KWcoeCx0aGlzLFRlKTtlbHNle3ZhciBDPXgubGVuZ3RoLFQ9cSh4LEMpO2ZvcihTZT0wO1NlPEM7KytTZSlnKFRbU2VdLHRoaXMsVGUpfXJldHVybiEwfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5vbj1GLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIEwodGhpcyxfZSxUZSwhMSl9LEYucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIEwodGhpcyxfZSxUZSwhMCl9LEYucHJvdG90eXBlLm9uY2U9ZnVuY3Rp''@;'; put 'put ''b24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLm9uKF9lLFUodGhpcyxfZSxUZSkpLHRoaXN9LEYucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihfZSxVKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5vZmY9Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3ZhciBTZSxqZSxWLHAsYjtpZih6KFRlKSx2b2lkIDA9PT0oamU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oU2U9amVbX2VdKSlyZXR1cm4gdGhpcztpZihTZT09PVRl''@;'; put 'put ''fHxTZS5saXN0ZW5lcj09PVRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBqZVtfZV0samUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9lLFNlLmxpc3RlbmVyfHxUZSkpO2Vsc2UgaWYo''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIFNlKXtmb3IoVj0tMSxwPVNlLmxlbmd0aC0xO3A+PTA7cC0tKWlmKFNlW3BdPT09VGV8fFNlW3BdLmxpc3RlbmVyPT09VGUpe2I9U2VbcF0ubGlzdGVuZXIsVj1wO2JyZWFrfWlmKFY8MClyZXR1cm4gdGhpczswPT09Vj9TZS5zaGlmdCgpOmZ1bmN0aW9uIGVl''@;'; put 'put ''KG1lLF9lKXtmb3IoO19lKzE8bWUubGVuZ3RoO19lKyspbWVbX2VdPW1lW19lKzFdO21lLnBvcCgpfShTZSxWKSwxPT09U2UubGVuZ3RoJiYoamVbX2VdPVNlWzBdKSx2b2lkIDAhPT1qZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsX2UsYnx8VGUpfXJldHVy''@;'; put 'put ''biB0aGlzfSxGLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3ZhciBUZSxTZSxqZTtpZih2b2lkIDA9PT0oU2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1TZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/''@;'; put 'put ''KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PVNlW19lXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIFNlW19lXSksdGhpcztpZigwPT09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCl7dmFyIHAsVj1PYmplY3Qua2V5cyhTZSk7Zm9yKGplPTA7amU8Vi5sZW5ndGg7KytqZSkicmVtb3ZlTGlzdGVuZXIiIT09KHA9VltqZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhwKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiks''@;'; put 'put ''dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihUZT1TZVtfZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUpZm9yKGplPVRlLmxlbmd0aC0xO2plPj0wO2pl''@;'; put 'put ''LS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihfZSxUZVtqZV0pO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITApfSxGLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITEpfSxG''@;'; put 'put ''Lmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24obWUsX2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBtZS5saXN0ZW5lckNvdW50P21lLmxpc3RlbmVyQ291bnQoX2UpOlkuY2FsbChtZSxfZSl9LEYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WSxGLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/Qih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgyMzE4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3LFAsRil7aWYoSS5pc0J1ZmZlcihCKXx8KEI9SS5mcm9tKEIsImJp''@;'; put 'put ''bmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBPPVAvOCx6PUkuYWxsb2MoTyksTj1JLmFsbG9j''@;'; put 'put ''KEZ8fDApLEw9SS5hbGxvYygwKTtPPjB8fEY+MDspe3ZhciBLPW5ldyBfO0sudXBkYXRlKEwpLEsudXBkYXRlKEIpLHcmJksudXBkYXRlKHcpLEw9Sy5kaWdlc3QoKTt2YXIgVT0wO2lmKE8+MCl7dmFyIFc9ei5sZW5ndGgtTztVPU1hdGgubWluKE8sTC5sZW5ndGgpLEwuY29weSh6LFcsMCxV''@;'; put 'put ''KSxPLT1VfWlmKFU8TC5sZW5ndGgmJkY+MCl7dmFyIFk9Ti5sZW5ndGgtRixxPU1hdGgubWluKEYsTC5sZW5ndGgtVSk7TC5jb3B5KE4sWSxVLFUrcSksRi09cX19cmV0dXJuIEwuZmlsbCgwKSx7a2V5OnosaXY6Tn19fSw0MDI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTMy''@;'; put 'put ''MCksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMKXtpZighSShOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgSzthcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPj0zJiYoSz1MKSxmdW5jdGlvbiBGKE8pe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoTyl9KHopP2Z1bmN0aW9uKHosTixMKXtmb3IodmFyIEs9MCxVPXoubGVuZ3RoO0s8VTtLKyspZy5jYWxsKHosSykmJihudWxsPT1MP04oeltLXSxLLHopOk4uY2FsbChMLHpb''@;'; put 'put ''S10sSyx6KSl9KHosTixLKToic3RyaW5nIj09dHlwZW9mIHo/ZnVuY3Rpb24oeixOLEwpe2Zvcih2YXIgSz0wLFU9ei5sZW5ndGg7SzxVO0srKyludWxsPT1MP04oei5jaGFyQXQoSyksSyx6KTpOLmNhbGwoTCx6LmNoYXJBdChLKSxLLHopfSh6LE4sSyk6ZnVuY3Rpb24oeixOLEwpe2Zvcih2''@;'; put 'put ''YXIgSyBpbiB6KWcuY2FsbCh6LEspJiYobnVsbD09TD9OKHpbS10sSyx6KTpOLmNhbGwoTCx6W0tdLEsseikpfSh6LE4sSyl9fSw2MjMwOnVlPT57dWUuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDM4NzM6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtjb25zdCBfPXkoNzcpLGc9eSgyNTIwKSxCPXkoMTM4MSkubWtkaXJzU3luYyx3PXkoMzE4KS51dGltZXNNaWxsaXNTeW5jLFA9eSgyNzMzKTtmdW5jdGlvbiBPKF9lLFRlLFNlLGplKXtjb25zdCBwPShqZS5kZXJlZmVyZW5jZT9fLnN0YXRTeW5j''@;'; put 'put ''Ol8ubHN0YXRTeW5jKShUZSk7aWYocC5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBlZShfZSxUZSxTZSxqZSxWKXtyZXR1cm4gVGU/bmUoU2UsamUsVik6ZnVuY3Rpb24gSihfZSxUZSxTZSxqZSl7cmV0dXJuIF8ubWtkaXJTeW5jKFNlKSxuZShUZSxTZSxqZSksWShTZSxfZSl9KF9l''@;'; put 'put ''Lm1vZGUsU2UsamUsVil9KHAsX2UsVGUsU2UsamUpO2lmKHAuaXNGaWxlKCl8fHAuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8cC5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIHooX2UsVGUsU2UsamUsVil7cmV0dXJuIFRlP2Z1bmN0aW9uIE4oX2UsVGUsU2UsamUpe2lmKGplLm92ZXJ3''@;'; put 'put ''cml0ZSlyZXR1cm4gXy51bmxpbmtTeW5jKFNlKSxMKF9lLFRlLFNlLGplKTtpZihqZS5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtTZX0nIGFscmVhZHkgZXhpc3RzYCl9KF9lLFNlLGplLFYpOkwoX2UsU2UsamUsVil9KHAsX2UsVGUsU2UsamUpO2lmKHAuaXNTeW1ib2xpY0xp''@;'; put 'put ''bmsoKSlyZXR1cm4gZnVuY3Rpb24gbGUoX2UsVGUsU2UsamUpe2xldCBWPV8ucmVhZGxpbmtTeW5jKFRlKTtpZihqZS5kZXJlZmVyZW5jZSYmKFY9Zy5yZXNvbHZlKEkuY3dkKCksVikpLF9lKXtsZXQgcDt0cnl7cD1fLnJlYWRsaW5rU3luYyhTZSl9Y2F0Y2goYil7aWYoIkVJTlZBTCI9PT1i''@;'; put 'put ''LmNvZGV8fCJVTktOT1dOIj09PWIuY29kZSlyZXR1cm4gXy5zeW1saW5rU3luYyhWLFNlKTt0aHJvdyBifWlmKGplLmRlcmVmZXJlbmNlJiYocD1nLnJlc29sdmUoSS5jd2QoKSxwKSksUC5pc1NyY1N1YmRpcihWLHApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Vn0nIHRvIGEg''@;'; put 'put ''c3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cH0nLmApO2lmKFAuaXNTcmNTdWJkaXIocCxWKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cH0nIHdpdGggJyR7Vn0nLmApO3JldHVybiBmdW5jdGlvbiBtZShfZSxUZSl7cmV0dXJuIF8udW5saW5rU3luYyhUZSksXy5z''@;'; put 'put ''eW1saW5rU3luYyhfZSxUZSl9KFYsU2UpfXJldHVybiBfLnN5bWxpbmtTeW5jKFYsU2UpfShfZSxUZSxTZSxqZSk7dGhyb3cgcC5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtUZX1gKTpwLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkg''@;'; put 'put ''YSBGSUZPIHBpcGU6ICR7VGV9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7VGV9YCl9ZnVuY3Rpb24gTChfZSxUZSxTZSxqZSl7cmV0dXJuIF8uY29weUZpbGVTeW5jKFRlLFNlKSxqZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJmZ1bmN0aW9uIEsoX2UsVGUsU2UpeyhmdW5jdGlvbiBVKF9l''@;'; put 'put ''KXtyZXR1cm4hKDEyOCZfZSl9KShfZSkmJmZ1bmN0aW9uIFcoX2UsVGUpe1koX2UsMTI4fFRlKX0oU2UsX2UpLGZ1bmN0aW9uIHEoX2UsVGUpe2NvbnN0IFNlPV8uc3RhdFN5bmMoX2UpO3coVGUsU2UuYXRpbWUsU2UubXRpbWUpfShUZSxTZSl9KF9lLm1vZGUsVGUsU2UpLFkoU2UsX2UubW9k''@;'; put 'put ''ZSl9ZnVuY3Rpb24gWShfZSxUZSl7cmV0dXJuIF8uY2htb2RTeW5jKF9lLFRlKX1mdW5jdGlvbiBuZShfZSxUZSxTZSl7Y29uc3QgamU9Xy5vcGVuZGlyU3luYyhfZSk7dHJ5e2xldCBWO2Zvcig7bnVsbCE9PShWPWplLnJlYWRTeW5jKCkpOylpZShWLm5hbWUsX2UsVGUsU2UpfWZpbmFsbHl7''@;'; put 'put ''amUuY2xvc2VTeW5jKCl9fWZ1bmN0aW9uIGllKF9lLFRlLFNlLGplKXtjb25zdCBWPWcuam9pbihUZSxfZSkscD1nLmpvaW4oU2UsX2UpO2lmKGplLmZpbHRlciYmIWplLmZpbHRlcihWLHApKXJldHVybjtjb25zdHtkZXN0U3RhdDpifT1QLmNoZWNrUGF0aHNTeW5jKFYscCwiY29weSIsamUp''@;'; put 'put ''O3JldHVybiBPKGIsVixwLGplKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYoX2UsVGUsU2UpeyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmKFNlPXtmaWx0ZXI6U2V9KSwoU2U9U2V8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gU2UpfHwhIVNlLmNsb2JiZXIsU2Uub3ZlcndyaXRlPSJvdmVyd3Jp''@;'; put 'put ''dGUiaW4gU2U/ISFTZS5vdmVyd3JpdGU6U2UuY2xvYmJlcixTZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUkuYXJjaCYmSS5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5c''@;'; put 'put ''dHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMiIpO2NvbnN0e3NyY1N0YXQ6amUsZGVzdFN0YXQ6Vn09UC5jaGVja1BhdGhzU3luYyhfZSxUZSwiY29weSIsU2UpO2lmKFAuY2hl''@;'; put 'put ''Y2tQYXJlbnRQYXRoc1N5bmMoX2UsamUsVGUsImNvcHkiKSxTZS5maWx0ZXImJiFTZS5maWx0ZXIoX2UsVGUpKXJldHVybjtjb25zdCBwPWcuZGlybmFtZShUZSk7cmV0dXJuIF8uZXhpc3RzU3luYyhwKXx8QihwKSxPKFYsX2UsVGUsU2UpfX0sNzE4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDQxNTUpO2NvbnN0IF89eSg3NzQ5KSxnPXkoMjUyMCkse21rZGlyczpCfT15KDEzODEpLHtwYXRoRXhpc3RzOnd9PXkoOTI1Nykse3V0aW1lc01pbGxpczpQfT15KDMxOCksRj15KDI3MzMpO2Z1bmN0aW9uIHooKXtyZXR1cm4oej1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlv''@;'; put 'put ''biooVGUsU2UsamU9e30peyJmdW5jdGlvbiI9PXR5cGVvZiBqZSYmKGplPXtmaWx0ZXI6amV9KSxqZS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gamUpfHwhIWplLmNsb2JiZXIsamUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gamU/ISFqZS5vdmVyd3JpdGU6amUuY2xvYmJlcixqZS5wcmVzZXJ2''@;'; put 'put ''ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUkuYXJjaCYmSS5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMt''@;'; put 'put ''ZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMSIpO2NvbnN0e3NyY1N0YXQ6VixkZXN0U3RhdDpwfT15aWVsZCBGLmNoZWNrUGF0aHMoVGUsU2UsImNvcHkiLGplKTtpZih5aWVsZCBGLmNoZWNrUGFyZW50UGF0aHMoVGUsVixTZSwiY29weSIpLCEoeWllbGQg''@;'; put 'put ''TihUZSxTZSxqZSkpKXJldHVybjtjb25zdCB4PWcuZGlybmFtZShTZSk7KHlpZWxkIHcoeCkpfHwoeWllbGQgQih4KSkseWllbGQgSyhwLFRlLFNlLGplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTihUZSxTZSxqZSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fWZ1bmN0aW9uIEwoKXtyZXR1cm4oTD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUpe3JldHVybiFqZS5maWx0ZXJ8fGplLmZpbHRlcihUZSxTZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoVGUsU2UsamUsVil7cmV0dXJuIFUuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWZ1bmN0aW9uIFUoKXtyZXR1cm4gVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVil7Y29uc3QgYj15aWVsZChWLmRlcmVmZXJlbmNlP18uc3RhdDpfLmxzdGF0KShTZSk7aWYoYi5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBpZShUZSxTZSxq''@;'; put 'put ''ZSxWLHApe3JldHVybiBsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIsVGUsU2UsamUsVik7aWYoYi5pc0ZpbGUoKXx8Yi5pc0NoYXJhY3RlckRldmljZSgpfHxiLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24gVyhUZSxTZSxqZSxWLHApe3JldHVybiBZLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX0oYixUZSxTZSxqZSxWKTtpZihiLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIG1lKFRlLFNlLGplLFYpe3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFRlLFNlLGplLFYpO3Rocm93IGIuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEg''@;'; put 'put ''c29ja2V0IGZpbGU6ICR7U2V9YCk6Yi5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1NlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1NlfWApfSksVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWSgpe3JldHVybihZPV9hc3luY1Rv''@;'; put 'put ''R2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSxqZSxWLHApe2lmKCFTZSlyZXR1cm4gcShUZSxqZSxWLHApO2lmKHAub3ZlcndyaXRlKXJldHVybiB5aWVsZCBfLnVubGluayhWKSxxKFRlLGplLFYscCk7aWYocC5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtWfScgYWxyZWFkeSBl''@;'; put 'put ''eGlzdHNgKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcShUZSxTZSxqZSxWKXtyZXR1cm4gZWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVlKCl7cmV0dXJuKGVlPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSxqZSxWKXtpZih5aWVsZCBfLmNv''@;'; put 'put ''cHlGaWxlKFNlLGplKSxWLnByZXNlcnZlVGltZXN0YW1wcyl7KGZ1bmN0aW9uIEooVGUpe3JldHVybiEoMTI4JlRlKX0pKFRlLm1vZGUpJiYoeWllbGQgZnVuY3Rpb24gbmUoVGUsU2Upe3JldHVybiBfLmNobW9kKFRlLDEyOHxTZSl9KGplLFRlLm1vZGUpKTtjb25zdCBwPXlpZWxkIF8uc3Rh''@;'; put 'put ''dChTZSk7eWllbGQgUChqZSxwLmF0aW1lLHAubXRpbWUpfXJldHVybiBfLmNobW9kKGplLFRlLm1vZGUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsZSgpe3JldHVybihsZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVixwKXtTZXx8KHlpZWxkIF8u''@;'; put 'put ''bWtkaXIoVikpO2NvbnN0IGI9W107dmFyIFQseD0hMSxDPSExO3RyeXtmb3IodmFyIGosSD1fYXN5bmNJdGVyYXRvcih5aWVsZCBfLm9wZW5kaXIoamUpKTt4PSEoaj15aWVsZCBILm5leHQoKSkuZG9uZTt4PSExKXtjb25zdCBFPWoudmFsdWU7e2NvbnN0IG09Zy5qb2luKGplLEUubmFtZSks''@;'; put 'put ''QT1nLmpvaW4oVixFLm5hbWUpO2IucHVzaChOKG0sQSxwKS50aGVuKGFlPT57aWYoYWUpcmV0dXJuIEYuY2hlY2tQYXRocyhtLEEsImNvcHkiLHApLnRoZW4oKHtkZXN0U3RhdDp0ZX0pPT5LKHRlLG0sQSxwKSl9KSl9fX1jYXRjaChFKXtDPSEwLFQ9RX1maW5hbGx5e3RyeXt4JiZudWxsIT1I''@;'; put 'put ''LnJldHVybiYmKHlpZWxkIEgucmV0dXJuKCkpfWZpbmFsbHl7aWYoQyl0aHJvdyBUfX15aWVsZCBQcm9taXNlLmFsbChiKSxTZXx8KHlpZWxkIF8uY2htb2QoVixUZS5tb2RlKSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9lKCl7cmV0dXJuKF9lPV9hc3luY1RvR2VuZXJh''@;'; put 'put ''dG9yKGZ1bmN0aW9uKihUZSxTZSxqZSxWKXtsZXQgcD15aWVsZCBfLnJlYWRsaW5rKFNlKTtpZihWLmRlcmVmZXJlbmNlJiYocD1nLnJlc29sdmUoSS5jd2QoKSxwKSksIVRlKXJldHVybiBfLnN5bWxpbmsocCxqZSk7bGV0IGI9bnVsbDt0cnl7Yj15aWVsZCBfLnJlYWRsaW5rKGplKX1jYXRj''@;'; put 'put ''aCh4KXtpZigiRUlOVkFMIj09PXguY29kZXx8IlVOS05PV04iPT09eC5jb2RlKXJldHVybiBfLnN5bWxpbmsocCxqZSk7dGhyb3cgeH1pZihWLmRlcmVmZXJlbmNlJiYoYj1nLnJlc29sdmUoSS5jd2QoKSxiKSksRi5pc1NyY1N1YmRpcihwLGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNv''@;'; put 'put ''cHkgJyR7cH0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Yn0nLmApO2lmKEYuaXNTcmNTdWJkaXIoYixwKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Yn0nIHdpdGggJyR7cH0nLmApO3JldHVybiB5aWVsZCBfLnVubGluayhqZSksXy5zeW1saW5rKHAs''@;'; put 'put ''amUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPWZ1bmN0aW9uIE8oVGUsU2Upe3JldHVybiB6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDY0NjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlO3VlLmV4cG9ydHM9e2NvcHk6''@;'; put 'put ''SSh5KDcxODkpKSxjb3B5U3luYzp5KDM4NzMpfX0sNTU5MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDc3NDkpLGc9eSgyNTIwKSxCPXkoMTM4MSksdz15KDQ1NDIpLFA9SShmdW5jdGlvbigpe3ZhciBPPV9hc3luY1RvR2VuZXJhdG9y''@;'; put 'put ''KGZ1bmN0aW9uKihOKXtsZXQgTDt0cnl7TD15aWVsZCBfLnJlYWRkaXIoTil9Y2F0Y2h7cmV0dXJuIEIubWtkaXJzKE4pfXJldHVybiBQcm9taXNlLmFsbChMLm1hcChLPT53LnJlbW92ZShnLmpvaW4oTixLKSkpKX0pO3JldHVybiBmdW5jdGlvbiB6KE4pe3JldHVybiBPLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9Xy5yZWFkZGlyU3luYyhPKX1jYXRjaHtyZXR1cm4gQi5ta2RpcnNTeW5jKE8pfXouZm9yRWFjaChOPT57Tj1nLmpvaW4oTyxOKSx3LnJlbW92ZVN5bmMoTil9KX11ZS5leHBvcnRzPXtlbXB0eURpclN5bmM6RixlbXB0''@;'; put 'put ''eWRpclN5bmM6RixlbXB0eURpcjpQLGVtcHR5ZGlyOlB9fSw2NTMwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoMjUyMCksZz15KDc3NDkpLEI9eSgxMzgxKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVu''@;'; put 'put ''Y3Rpb24qKE8pe2xldCB6O3RyeXt6PXlpZWxkIGcuc3RhdChPKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgTj1fLmRpcm5hbWUoTyk7bGV0IEw9bnVsbDt0cnl7TD15aWVsZCBnLnN0YXQoTil9Y2F0Y2goSyl7aWYoIkVOT0VOVCI9PT1LLmNvZGUpcmV0dXJuIHlpZWxk''@;'; put 'put ''IEIubWtkaXJzKE4pLHZvaWQoeWllbGQgZy53cml0ZUZpbGUoTywiIikpO3Rocm93IEt9TC5pc0RpcmVjdG9yeSgpP3lpZWxkIGcud3JpdGVGaWxlKE8sIiIpOnlpZWxkIGcucmVhZGRpcihOKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17Y3JlYXRlRmlsZTpJKGZ1bmN0''@;'; put 'put ''aW9uIHcoTyl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlRmlsZVN5bmM6ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej1nLnN0YXRTeW5jKE8pfWNhdGNoe31pZih6JiZ6LmlzRmlsZSgpKXJldHVybjtjb25zdCBOPV8uZGlybmFtZShPKTt0cnl7Zy5zdGF0U3luYyhO''@;'; put 'put ''KS5pc0RpcmVjdG9yeSgpfHxnLnJlYWRkaXJTeW5jKE4pfWNhdGNoKEwpe2lmKCFMfHwiRU5PRU5UIiE9PUwuY29kZSl0aHJvdyBMO0IubWtkaXJzU3luYyhOKX1nLndyaXRlRmlsZVN5bmMoTywiIil9fX0sMTcyMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtjcmVhdGVGaWxlOkks''@;'; put 'put ''Y3JlYXRlRmlsZVN5bmM6X309eSg2NTMwKSx7Y3JlYXRlTGluazpnLGNyZWF0ZUxpbmtTeW5jOkJ9PXkoNDE0Nykse2NyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpQfT15KDM2MzUpO3VlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SSxjcmVhdGVGaWxlU3luYzpfLGVuc3VyZUZpbGU6''@;'; put 'put ''SSxlbnN1cmVGaWxlU3luYzpfLGNyZWF0ZUxpbms6ZyxjcmVhdGVMaW5rU3luYzpCLGVuc3VyZUxpbms6ZyxlbnN1cmVMaW5rU3luYzpCLGNyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpQLGVuc3VyZVN5bWxpbms6dyxlbnN1cmVTeW1saW5rU3luYzpQfX0sNDE0NzoodWUsWCx5''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDI1MjApLGc9eSg3NzQ5KSxCPXkoMTM4MSkse3BhdGhFeGlzdHM6d309eSg5MjU3KSx7YXJlSWRlbnRpY2FsOlB9PXkoMjczMyk7ZnVuY3Rpb24gTygpe3JldHVybihPPV9hc3luY1RvR2VuZXJhdG9yKGZ1''@;'; put 'put ''bmN0aW9uKihOLEwpe2xldCBLLFU7dHJ5e0s9eWllbGQgZy5sc3RhdChMKX1jYXRjaHt9dHJ5e1U9eWllbGQgZy5sc3RhdChOKX1jYXRjaChxKXt0aHJvdyBxLm1lc3NhZ2U9cS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLHF9aWYoSyYmUChVLEspKXJldHVybjtjb25z''@;'; put 'put ''dCBXPV8uZGlybmFtZShMKTsoeWllbGQgdyhXKSl8fCh5aWVsZCBCLm1rZGlycyhXKSkseWllbGQgZy5saW5rKE4sTCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e2NyZWF0ZUxpbms6SShmdW5jdGlvbiBGKE4sTCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24geihOLEwpe2xldCBLO3RyeXtLPWcubHN0YXRTeW5jKEwpfWNhdGNoe310cnl7Y29uc3QgWT1nLmxzdGF0U3luYyhOKTtpZihLJiZQKFksSykpcmV0dXJufWNhdGNoKFkpe3Rocm93IFkubWVzc2FnZT1ZLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQi''@;'; put 'put ''LCJlbnN1cmVMaW5rIiksWX1jb25zdCBVPV8uZGlybmFtZShMKTtyZXR1cm4gZy5leGlzdHNTeW5jKFUpfHxCLm1rZGlyc1N5bmMoVSksZy5saW5rU3luYyhOLEwpfX19LDYwNzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDI1MjApLF89eSg3NzQ5KSx7cGF0aEV4aXN0czpn''@;'; put 'put ''fT15KDkyNTcpLEI9eSg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE8seil7aWYoSS5pc0Fic29sdXRlKE8pKXt0cnl7eWllbGQgXy5sc3RhdChPKX1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJl''@;'; put 'put ''cGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFV9cmV0dXJue3RvQ3dkOk8sdG9Ec3Q6T319Y29uc3QgTj1JLmRpcm5hbWUoeiksTD1JLmpvaW4oTixPKTtpZih5aWVsZCBnKEwpKXJldHVybnt0b0N3ZDpMLHRvRHN0Ok99O3RyeXt5aWVsZCBfLmxzdGF0KE8pfWNhdGNoKFUpe3Rocm93''@;'; put 'put ''IFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksVX1yZXR1cm57dG9Dd2Q6Tyx0b0RzdDpJLnJlbGF0aXZlKE4sTyl9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtzeW1saW5rUGF0aHM6QihmdW5jdGlvbiB3KE8seil7cmV0''@;'; put 'put ''dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbiBGKE8seil7aWYoSS5pc0Fic29sdXRlKE8pKXtpZighXy5leGlzdHNTeW5jKE8pKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3''@;'; put 'put ''ZDpPLHRvRHN0Ok99fWNvbnN0IE49SS5kaXJuYW1lKHopLEw9SS5qb2luKE4sTyk7aWYoXy5leGlzdHNTeW5jKEwpKXJldHVybnt0b0N3ZDpMLHRvRHN0Ok99O2lmKCFfLmV4aXN0c1N5bmMoTykpdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0''@;'; put 'put ''dXJue3RvQ3dkOk8sdG9Ec3Q6SS5yZWxhdGl2ZShOLE8pfX19fSw5MjU5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSxfPXkoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYpe2lmKEYp''@;'; put 'put ''cmV0dXJuIEY7bGV0IE87dHJ5e089eWllbGQgSS5sc3RhdChQKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE8mJk8uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3N5bWxpbmtUeXBlOl8oZnVuY3Rpb24gZyhQLEYpe3Jl''@;'; put 'put ''dHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtUeXBlU3luYzpmdW5jdGlvbiB3KFAsRil7aWYoRilyZXR1cm4gRjtsZXQgTzt0cnl7Tz1JLmxzdGF0U3luYyhQKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE8mJk8uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0s''@;'; put 'put ''MzYzNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDI1MjApLGc9eSg3NzQ5KSx7bWtkaXJzOkIsbWtkaXJzU3luYzp3fT15KDEzODEpLHtzeW1saW5rUGF0aHM6UCxzeW1saW5rUGF0aHNTeW5jOkZ9PXkoNjA3Mikse3N5bWxpbmtUeXBl''@;'; put 'put ''Ok8sc3ltbGlua1R5cGVTeW5jOnp9PXkoOTI1OSkse3BhdGhFeGlzdHM6Tn09eSg5MjU3KSx7YXJlSWRlbnRpY2FsOkx9PXkoMjczMyk7ZnVuY3Rpb24gVSgpe3JldHVybihVPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLHEsZWUpe2xldCBKO3RyeXtKPXlpZWxkIGcubHN0YXQocSl9''@;'; put 'put ''Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3RbbWUsX2VdPXlpZWxkIFByb21pc2UuYWxsKFtnLnN0YXQoWSksZy5zdGF0KHEpXSk7aWYoTChtZSxfZSkpcmV0dXJufWNvbnN0IG5lPXlpZWxkIFAoWSxxKTtZPW5lLnRvRHN0O2NvbnN0IGllPXlpZWxkIE8obmUudG9Dd2Qs''@;'; put 'put ''ZWUpLGxlPV8uZGlybmFtZShxKTtyZXR1cm4oeWllbGQgTihsZSkpfHwoeWllbGQgQihsZSkpLGcuc3ltbGluayhZLHEsaWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtjcmVhdGVTeW1saW5rOkkoZnVuY3Rpb24gSyhZLHEsZWUpe3JldHVybiBVLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX0pLGNyZWF0ZVN5bWxpbmtTeW5jOmZ1bmN0aW9uIFcoWSxxLGVlKXtsZXQgSjt0cnl7Sj1nLmxzdGF0U3luYyhxKX1jYXRjaHt9aWYoSiYmSi5pc1N5bWJvbGljTGluaygpKXtjb25zdCBtZT1nLnN0YXRTeW5jKFkpLF9lPWcuc3RhdFN5bmMocSk7aWYoTChtZSxfZSkpcmV0''@;'; put 'put ''dXJufWNvbnN0IG5lPUYoWSxxKTtZPW5lLnRvRHN0LGVlPXoobmUudG9Dd2QsZWUpO2NvbnN0IGllPV8uZGlybmFtZShxKTtyZXR1cm4gZy5leGlzdHNTeW5jKGllKXx8dyhpZSksZy5zeW1saW5rU3luYyhZLHEsZWUpfX19LDc3NDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0''@;'; put 'put ''MTU1KTtjb25zdCBfPXkoODk4MSkuZnJvbUNhbGxiYWNrLGc9eSg3NyksQj1bImFjY2VzcyIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNob3duIiwiY2xvc2UiLCJjb3B5RmlsZSIsImNwIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIs''@;'; put 'put ''ImZ1dGltZXMiLCJnbG9iIiwibGNobW9kIiwibGNob3duIiwibHV0aW1lcyIsImxpbmsiLCJsc3RhdCIsIm1rZGlyIiwibWtkdGVtcCIsIm9wZW4iLCJvcGVuZGlyIiwicmVhZGRpciIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInJtIiwicm1kaXIiLCJzdGF0''@;'; put 'put ''Iiwic3RhdGZzIiwic3ltbGluayIsInRydW5jYXRlIiwidW5saW5rIiwidXRpbWVzIiwid3JpdGVGaWxlIl0uZmlsdGVyKHc9PiJmdW5jdGlvbiI9PXR5cGVvZiBnW3ddKTtPYmplY3QuYXNzaWduKFgsZyksQi5mb3JFYWNoKHc9PntYW3ddPV8oZ1t3XSl9KSxYLmV4aXN0cz1mdW5jdGlvbih3''@;'; put 'put ''LFApe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQP2cuZXhpc3RzKHcsUCk6bmV3IFByb21pc2UoRj0+Zy5leGlzdHModyxGKSl9LFgucmVhZD1mdW5jdGlvbih3LFAsRixPLHosTil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE4/Zy5yZWFkKHcsUCxGLE8seixOKTpuZXcgUHJvbWlzZSgo''@;'; put 'put ''TCxLKT0+e2cucmVhZCh3LFAsRixPLHosKFUsVyxZKT0+e2lmKFUpcmV0dXJuIEsoVSk7TCh7Ynl0ZXNSZWFkOlcsYnVmZmVyOll9KX0pfSl9LFgud3JpdGU9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cud3JpdGUodyxQLC4uLkYp''@;'; put 'put ''Om5ldyBQcm9taXNlKChPLHopPT57Zy53cml0ZSh3LFAsLi4uRiwoTixMLEspPT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1dyaXR0ZW46TCxidWZmZXI6S30pfSl9KX0sWC5yZWFkdj1mdW5jdGlvbih3LFAsLi4uRil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEZbRi5sZW5ndGgtMV0/''@;'; put 'put ''Zy5yZWFkdih3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLnJlYWR2KHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5dGVzUmVhZDpMLGJ1ZmZlcnM6S30pfSl9KX0sWC53cml0ZXY9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBGW0YubGVuZ3RoLTFdP2cud3JpdGV2KHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoTyx6KT0+e2cud3JpdGV2KHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5dGVzV3JpdHRlbjpMLGJ1ZmZlcnM6S30pfSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGcucmVhbHBhdGgu''@;'; put 'put ''bmF0aXZlP1gucmVhbHBhdGgubmF0aXZlPV8oZy5yZWFscGF0aC5uYXRpdmUpOkkuZW1pdFdhcm5pbmcoImZzLnJlYWxwYXRoLm5hdGl2ZSBpcyBub3QgYSBmdW5jdGlvbi4gSXMgZnMgYmVpbmcgbW9ua2V5LXBhdGNoZWQ/IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAzIil9LDU2NzQ6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17Li4ueSg3NzQ5KSwuLi55KDY0NjQpLC4uLnkoNTU5MCksLi4ueSgxNzIwKSwuLi55KDY1NzMpLC4uLnkoMTM4MSksLi4ueSg1MzApLC4uLnkoNDY3MCksLi4ueSg5MjU3KSwuLi55KDQ1NDIpfX0sNjU3MzoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDcxODMpO18ub3V0cHV0SnNvbj1JKHkoMzUwOCkpLF8ub3V0cHV0SnNvblN5bmM9eSg5NTc4KSxfLm91dHB1dEpTT049Xy5vdXRwdXRKc29uLF8ub3V0cHV0SlNPTlN5bmM9Xy5vdXRwdXRKc29uU3luYyxfLndyaXRl''@;'; put 'put ''SlNPTj1fLndyaXRlSnNvbixfLndyaXRlSlNPTlN5bmM9Xy53cml0ZUpzb25TeW5jLF8ucmVhZEpTT049Xy5yZWFkSnNvbixfLnJlYWRKU09OU3luYz1fLnJlYWRKc29uU3luYyx1ZS5leHBvcnRzPV99LDcxODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDY4MTMpO3VlLmV4''@;'; put 'put ''cG9ydHM9e3JlYWRKc29uOkkucmVhZEZpbGUscmVhZEpzb25TeW5jOkkucmVhZEZpbGVTeW5jLHdyaXRlSnNvbjpJLndyaXRlRmlsZSx3cml0ZUpzb25TeW5jOkkud3JpdGVGaWxlU3luY319LDk1Nzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Okl9PXkoNjc4MCks''@;'; put 'put ''e291dHB1dEZpbGVTeW5jOl99PXkoNDY3MCk7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyxQKXtjb25zdCBGPUkodyxQKTtfKEIsRixQKX19LDM1MDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Okl9PXkoNjc4MCkse291dHB1dEZpbGU6X309eSg0NjcwKTtmdW5j''@;'; put 'put ''dGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHcsUCxGPXt9KXtjb25zdCBPPUkoUCxGKTt5aWVsZCBfKHcsTyxGKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBnKHcsUCl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX0sMTM4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2Use21ha2VEaXI6XyxtYWtlRGlyU3luYzpnfT15KDgyMzMpLEI9SShfKTt1ZS5leHBvcnRzPXtta2RpcnM6Qixta2RpcnNTeW5jOmcsbWtkaXJwOkIsbWtkaXJwU3luYzpnLGVuc3Vy''@;'; put 'put ''ZURpcjpCLGVuc3VyZURpclN5bmM6Z319LDgyMzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLHtjaGVja1BhdGg6X309eSgzNDY4KSxnPUI9PiJudW1iZXIiPT10eXBlb2YgQj9COnttb2RlOjUxMSwuLi5CfS5tb2RlO3VlLmV4cG9ydHMubWFrZURpcj1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFApe3JldHVybiBfKHcpLEkubWtkaXIodyx7bW9kZTpnKFApLHJlY3Vyc2l2ZTohMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKHcsUCl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx1ZS5leHBvcnRzLm1ha2VE''@;'; put 'put ''aXJTeW5jPShCLHcpPT4oXyhCKSxJLm1rZGlyU3luYyhCLHttb2RlOmcodykscmVjdXJzaXZlOiEwfSkpfSwzNDY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDI1MjApO3VlLmV4cG9ydHMuY2hlY2tQYXRoPWZ1bmN0aW9uKEIpe2lmKCJ3aW4zMiI9''@;'; put 'put ''PT1JLnBsYXRmb3JtJiYvWzw+OiJ8PypdLy50ZXN0KEIucmVwbGFjZShfLnBhcnNlKEIpLnJvb3QsIiIpKSl7Y29uc3QgUD1uZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke0J9YCk7dGhyb3cgUC5jb2RlPSJFSU5WQUwiLFB9fX0sNTMwOih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZTt1ZS5leHBvcnRzPXttb3ZlOkkoeSg0MzYpKSxtb3ZlU3luYzp5KDM3MzYpfX0sMzczNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzcpLF89eSgyNTIwKSxnPXkoNjQ2NCkuY29weVN5bmMsQj15KDQ1''@;'; put 'put ''NDIpLnJlbW92ZVN5bmMsdz15KDEzODEpLm1rZGlycFN5bmMsUD15KDI3MzMpO2Z1bmN0aW9uIE4oSyxVLFcpe3RyeXtJLnJlbmFtZVN5bmMoSyxVKX1jYXRjaChZKXtpZigiRVhERVYiIT09WS5jb2RlKXRocm93IFk7cmV0dXJuIGZ1bmN0aW9uIEwoSyxVLFcpe3JldHVybiBnKEssVSx7b3Zl''@;'; put 'put ''cndyaXRlOlcsZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLEIoSyl9KEssVSxXKX19dWUuZXhwb3J0cz1mdW5jdGlvbiBGKEssVSxXKXtjb25zdCBZPShXPVd8fHt9KS5vdmVyd3JpdGV8fFcuY2xvYmJlcnx8ITEse3NyY1N0YXQ6cSxpc0NoYW5naW5nQ2FzZTplZT0h''@;'; put 'put ''MX09UC5jaGVja1BhdGhzU3luYyhLLFUsIm1vdmUiLFcpO3JldHVybiBQLmNoZWNrUGFyZW50UGF0aHNTeW5jKEsscSxVLCJtb3ZlIiksZnVuY3Rpb24gTyhLKXtjb25zdCBVPV8uZGlybmFtZShLKTtyZXR1cm4gXy5wYXJzZShVKS5yb290PT09VX0oVSl8fHcoXy5kaXJuYW1lKFUpKSxmdW5j''@;'; put 'put ''dGlvbiB6KEssVSxXLFkpe2lmKFkpcmV0dXJuIE4oSyxVLFcpO2lmKFcpcmV0dXJuIEIoVSksTihLLFUsVyk7aWYoSS5leGlzdHNTeW5jKFUpKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTtyZXR1cm4gTihLLFUsVyl9KEssVSxZLGVlKX19LDQzNjoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSksXz15KDI1MjApLHtjb3B5Omd9PXkoNjQ2NCkse3JlbW92ZTpCfT15KDQ1NDIpLHtta2RpcnA6d309eSgxMzgxKSx7cGF0aEV4aXN0czpQfT15KDkyNTcpLEY9eSgyNzMzKTtmdW5jdGlvbiB6KCl7cmV0dXJuIHo9X2FzeW5jVG9HZW5lcmF0''@;'; put 'put ''b3IoZnVuY3Rpb24qKFcsWSxxPXt9KXtjb25zdCBlZT1xLm92ZXJ3cml0ZXx8cS5jbG9iYmVyfHwhMSx7c3JjU3RhdDpKLGlzQ2hhbmdpbmdDYXNlOm5lPSExfT15aWVsZCBGLmNoZWNrUGF0aHMoVyxZLCJtb3ZlIixxKTt5aWVsZCBGLmNoZWNrUGFyZW50UGF0aHMoVyxKLFksIm1vdmUiKTtj''@;'; put 'put ''b25zdCBpZT1fLmRpcm5hbWUoWSk7cmV0dXJuIF8ucGFyc2UoaWUpLnJvb3QhPT1pZSYmKHlpZWxkIHcoaWUpKSxmdW5jdGlvbiBOKFcsWSxxLGVlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFcsWSxlZSxuZSl9KSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBM''@;'; put 'put ''KCl7cmV0dXJuIEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxxLGVlKXtpZighZWUpaWYocSl5aWVsZCBCKFkpO2Vsc2UgaWYoeWllbGQgUChZKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7dHJ5e3lpZWxkIEkucmVuYW1lKFcsWSl9Y2F0Y2goSil7''@;'; put 'put ''aWYoIkVYREVWIiE9PUouY29kZSl0aHJvdyBKO3lpZWxkIGZ1bmN0aW9uIEsoVyxZLHEpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oVyxZLHEpfX0pLEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFUoKXtyZXR1cm4oVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlv''@;'; put 'put ''biooVyxZLHEpe3JldHVybiB5aWVsZCBnKFcsWSx7b3ZlcndyaXRlOnEsZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLEIoVyl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gTyhXLFkpe3JldHVybiB6LmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKX19LDQ2NzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3NzQ5KSxnPXkoMjUyMCksQj15KDEzODEpLHc9eSg5MjU3KS5wYXRoRXhpc3RzO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioo''@;'; put 'put ''eixOLEw9InV0Zi04Iil7Y29uc3QgSz1nLmRpcm5hbWUoeik7cmV0dXJuKHlpZWxkIHcoSykpfHwoeWllbGQgQi5ta2RpcnMoSykpLF8ud3JpdGVGaWxlKHosTixMKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17b3V0cHV0RmlsZTpJKGZ1bmN0aW9uIFAoeixOKXtyZXR1''@;'; put 'put ''cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxvdXRwdXRGaWxlU3luYzpmdW5jdGlvbiBPKHosLi4uTil7Y29uc3QgTD1nLmRpcm5hbWUoeik7Xy5leGlzdHNTeW5jKEwpfHxCLm1rZGlyc1N5bmMoTCksXy53cml0ZUZpbGVTeW5jKHosLi4uTil9fX0sOTI1NzoodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDc3NDkpO3VlLmV4cG9ydHM9e3BhdGhFeGlzdHM6SShmdW5jdGlvbiBnKEIpe3JldHVybiBfLmFjY2VzcyhCKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOl8uZXhpc3RzU3luY319LDQ1''@;'; put 'put ''NDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3KSxfPXkoODk4MSkuZnJvbUNhbGxiYWNrO3VlLmV4cG9ydHM9e3JlbW92ZTpfKGZ1bmN0aW9uIGcodyxQKXtJLnJtKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sUCl9KSxyZW1vdmVTeW5jOmZ1bmN0aW9uIEIodyl7SS5y''@;'; put 'put ''bVN5bmModyx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9fX0sMjczMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSksXz15KDI1MjApLGc9eSg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFks''@;'; put 'put ''cSxlZSxKKXtjb25zdHtzcmNTdGF0Om5lLGRlc3RTdGF0OmllfT15aWVsZCBmdW5jdGlvbiBCKFkscSxlZSl7Y29uc3QgSj1lZS5kZXJlZmVyZW5jZT9uZT0+SS5zdGF0KG5lLHtiaWdpbnQ6ITB9KTpuZT0+SS5sc3RhdChuZSx7YmlnaW50OiEwfSk7cmV0dXJuIFByb21pc2UuYWxsKFtKKFkp''@;'; put 'put ''LEoocSkuY2F0Y2gobmU9PntpZigiRU5PRU5UIj09PW5lLmNvZGUpcmV0dXJuIG51bGw7dGhyb3cgbmV9KV0pLnRoZW4oKFtuZSxpZV0pPT4oe3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9KSl9KFkscSxKKTtpZihpZSl7aWYoSyhuZSxpZSkpe2NvbnN0IGxlPV8uYmFzZW5hbWUoWSksbWU9Xy5i''@;'; put 'put ''YXNlbmFtZShxKTtpZigibW92ZSI9PT1lZSYmbGUhPT1tZSYmbGUudG9Mb3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0''@;'; put 'put ''IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihuZS5pc0RpcmVjdG9yeSgpJiYhaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtxfScgd2l0aCBkaXJlY3RvcnkgJyR7WX0nLmApO2lmKCFuZS5pc0RpcmVjdG9yeSgpJiZpZS5p''@;'; put 'put ''c0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7cX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtZfScuYCl9aWYobmUuaXNEaXJlY3RvcnkoKSYmVShZLHEpKXRocm93IG5ldyBFcnJvcihXKFkscSxlZSkpO3JldHVybntzcmNTdGF0Om5l''@;'; put 'put ''LGRlc3RTdGF0OmllfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geihZLHEsZWUsSil7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxxLGVlLEope2NvbnN0IG5lPV8ucmVz''@;'; put 'put ''b2x2ZShfLmRpcm5hbWUoWSkpLGllPV8ucmVzb2x2ZShfLmRpcm5hbWUoZWUpKTtpZihpZT09PW5lfHxpZT09PV8ucGFyc2UoaWUpLnJvb3QpcmV0dXJuO2xldCBsZTt0cnl7bGU9eWllbGQgSS5zdGF0KGllLHtiaWdpbnQ6ITB9KX1jYXRjaChtZSl7aWYoIkVOT0VOVCI9PT1tZS5jb2RlKXJl''@;'; put 'put ''dHVybjt0aHJvdyBtZX1pZihLKHEsbGUpKXRocm93IG5ldyBFcnJvcihXKFksZWUsSikpO3JldHVybiB6KFkscSxpZSxKKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSyhZLHEpe3JldHVybiBxLmlubyYmcS5kZXYmJnEuaW5vPT09WS5pbm8mJnEuZGV2PT09WS5kZXZ9ZnVu''@;'; put 'put ''Y3Rpb24gVShZLHEpe2NvbnN0IGVlPV8ucmVzb2x2ZShZKS5zcGxpdChfLnNlcCkuZmlsdGVyKG5lPT5uZSksSj1fLnJlc29sdmUocSkuc3BsaXQoXy5zZXApLmZpbHRlcihuZT0+bmUpO3JldHVybiBlZS5ldmVyeSgobmUsaWUpPT5KW2llXT09PW5lKX1mdW5jdGlvbiBXKFkscSxlZSl7cmV0''@;'; put 'put ''dXJuYENhbm5vdCAke2VlfSAnJHtZfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtxfScuYH11ZS5leHBvcnRzPXtjaGVja1BhdGhzOmcoZnVuY3Rpb24gUChZLHEsZWUsSil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2hlY2tQYXRoc1N5bmM6ZnVuY3Rpb24g''@;'; put 'put ''TyhZLHEsZWUsSil7Y29uc3R7c3JjU3RhdDpuZSxkZXN0U3RhdDppZX09ZnVuY3Rpb24gdyhZLHEsZWUpe2xldCBKO2NvbnN0IG5lPWVlLmRlcmVmZXJlbmNlP2xlPT5JLnN0YXRTeW5jKGxlLHtiaWdpbnQ6ITB9KTpsZT0+SS5sc3RhdFN5bmMobGUse2JpZ2ludDohMH0pLGllPW5lKFkpO3Ry''@;'; put 'put ''eXtKPW5lKHEpfWNhdGNoKGxlKXtpZigiRU5PRU5UIj09PWxlLmNvZGUpcmV0dXJue3NyY1N0YXQ6aWUsZGVzdFN0YXQ6bnVsbH07dGhyb3cgbGV9cmV0dXJue3NyY1N0YXQ6aWUsZGVzdFN0YXQ6Sn19KFkscSxKKTtpZihpZSl7aWYoSyhuZSxpZSkpe2NvbnN0IGxlPV8uYmFzZW5hbWUoWSks''@;'; put 'put ''bWU9Xy5iYXNlbmFtZShxKTtpZigibW92ZSI9PT1lZSYmbGUhPT1tZSYmbGUudG9Mb3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlv''@;'; put 'put ''biBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihuZS5pc0RpcmVjdG9yeSgpJiYhaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtxfScgd2l0aCBkaXJlY3RvcnkgJyR7WX0nLmApO2lmKCFuZS5pc0RpcmVjdG9yeSgp''@;'; put 'put ''JiZpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7cX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtZfScuYCl9aWYobmUuaXNEaXJlY3RvcnkoKSYmVShZLHEpKXRocm93IG5ldyBFcnJvcihXKFkscSxlZSkpO3JldHVybntzcmNT''@;'; put 'put ''dGF0Om5lLGRlc3RTdGF0OmllfX0sY2hlY2tQYXJlbnRQYXRoczpnKHopLGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIEwoWSxxLGVlLEope2NvbnN0IG5lPV8ucmVzb2x2ZShfLmRpcm5hbWUoWSkpLGllPV8ucmVzb2x2ZShfLmRpcm5hbWUoZWUpKTtpZihpZT09PW5lfHxpZT09PV8u''@;'; put 'put ''cGFyc2UoaWUpLnJvb3QpcmV0dXJuO2xldCBsZTt0cnl7bGU9SS5zdGF0U3luYyhpZSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cgbWV9aWYoSyhxLGxlKSl0aHJvdyBuZXcgRXJyb3IoVyhZLGVlLEopKTtyZXR1cm4gTChZLHEsaWUs''@;'; put 'put ''Sil9LGlzU3JjU3ViZGlyOlUsYXJlSWRlbnRpY2FsOkt9fSwzMTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLF89eSg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFAsRixPKXtjb25zdCB6''@;'; put 'put ''PXlpZWxkIEkub3BlbihQLCJyKyIpO2xldCBOPW51bGw7dHJ5e3lpZWxkIEkuZnV0aW1lcyh6LEYsTyl9ZmluYWxseXt0cnl7eWllbGQgSS5jbG9zZSh6KX1jYXRjaChMKXtOPUx9fWlmKE4pdGhyb3cgTn0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17dXRpbWVzTWlsbGlz''@;'; put 'put ''Ol8oZnVuY3Rpb24gZyhQLEYsTyl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksdXRpbWVzTWlsbGlzU3luYzpmdW5jdGlvbiB3KFAsRixPKXtjb25zdCB6PUkub3BlblN5bmMoUCwicisiKTtyZXR1cm4gSS5mdXRpbWVzU3luYyh6LEYsTyksSS5jbG9zZVN5bmMoeil9fX0sNzY0''@;'; put 'put ''ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEk9TWF0aC5tYXgsZz1mdW5jdGlvbihGLE8pe2Zvcih2YXIgej1bXSxOPTA7TjxGLmxlbmd0aDtOKz0xKXpbTl09RltOXTtmb3IodmFyIEw9MDtMPE8ubGVuZ3RoO0wrPTEpeltMK0YubGVuZ3RoXT1P''@;'; put 'put ''W0xdO3JldHVybiB6fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBPPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE98fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT15LmFwcGx5KE8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNv''@;'; put 'put ''bXBhdGlibGUgIitPKTtmb3IodmFyIE4sej1mdW5jdGlvbihGLE8pe2Zvcih2YXIgej1bXSxOPTEsTD0wO048Ri5sZW5ndGg7Tis9MSxMKz0xKXpbTF09RltOXTtyZXR1cm4gen0oYXJndW1lbnRzKSxLPUkoMCxPLmxlbmd0aC16Lmxlbmd0aCksVT1bXSxXPTA7VzxLO1crKylVW1ddPSIkIitX''@;'; put 'put ''O2lmKE49RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitmdW5jdGlvbihQLEYpe2Zvcih2YXIgTz0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKU8rPVBbel0seisxPFAubGVuZ3RoJiYoTys9IiwiKTtyZXR1cm4gT30oVSkrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil7dmFyIHE9Ty5hcHBseSh0aGlzLGcoeixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KHEpPT09cT9xOnRoaXN9cmV0dXJuIE8uYXBwbHkoRixnKHosYXJndW1lbnRzKSl9KSxPLnByb3RvdHlwZSl7dmFyIFk9''@;'; put 'put ''ZnVuY3Rpb24oKXt9O1kucHJvdG90eXBlPU8ucHJvdG90eXBlLE4ucHJvdG90eXBlPW5ldyBZLFkucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw4NjEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzY0OCk7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8SX0s''@;'; put 'put ''MjEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJLF89eSg4ODkyKSxnPXkoMTY0OCksQj15KDM5ODEpLHc9eSg0NzI2KSxQPXkoNjcxMiksRj15KDM0NjQpLE89eSg0NDUzKSx6PXkoMzkxNSksTj15KDk3MzgpLEw9eSg2MzI5KSxLPXkoMjI2NCksVT15KDU3MzApLFc9eSg3MDcpLFk9''@;'; put 'put ''eSgzODYyKSxxPXkoOTU1MCksZWU9RnVuY3Rpb24sSj1mdW5jdGlvbih2ZSl7dHJ5e3JldHVybiBlZSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcrdmUrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxuZT15KDcyOTYpLGllPXkoNDQyOSksbGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgT30s''@;'; put 'put ''bWU9bmU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGxlfWNhdGNoe3RyeXtyZXR1cm4gbmUoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIGxlfX19KCk6bGUsX2U9eSgxNDA1KSgpLFRlPXkoMTYxOCksU2U9eSg4ODk5KSxqZT15KDQ0MyksVj15KDE3NjgpLHA9eSg4OTI4KSxi''@;'; put 'put ''PXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/STpUZShVaW50OEFycmF5KSxDPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9JOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlw''@;'; put 'put ''ZW9mIEFycmF5QnVmZmVyPiJ1Ij9JOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpJLCIlQXN5bmNGdW5jdGlvbiUiOmIsIiVBc3luY0dlbmVy''@;'; put 'put ''YXRvciUiOmIsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6YiwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpiLCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9JOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij9JOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0''@;'; put 'put ''eXBlb2YgQmlnSW50NjRBcnJheT4idSI/STpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP0k6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9JOkRhdGFWaWV3''@;'; put 'put ''LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOmcsIiVldmFs''@;'; put 'put ''JSI6ZXZhbCwiJUV2YWxFcnJvciUiOkIsIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9JOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP0k6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0''@;'; put 'put ''NjRBcnJheT4idSI/STpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/STpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6ZWUsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVJbnQ4QXJyYXklIjp0eXBl''@;'; put 'put ''b2YgSW50OEFycmF5PiJ1Ij9JOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/STpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij9JOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05h''@;'; put 'put ''TiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkksIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046SSwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0k6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFw''@;'; put 'put ''PiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjpuZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFy''@;'; put 'put ''c2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/STpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0k6UHJveHksIiVSYW5nZUVycm9yJSI6dywiJVJlZmVyZW5jZUVycm9yJSI6UCwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/STpS''@;'; put 'put ''ZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/STpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBl''@;'; put 'put ''b2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0k6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVTeW1ib2wlIjpfZT9TeW1ib2w6SSwiJVN5bnRheEVycm9yJSI6''@;'; put 'put ''RiwiJVRocm93VHlwZUVycm9yJSI6bWUsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOk8sIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0k6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9JOlVpbnQ4''@;'; put 'put ''Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0k6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/STpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6eiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/''@;'; put 'put ''STpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9JOldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP0k6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6cCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiOlYsIiVPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOlNlLCIlTWF0aC5hYnMlIjpOLCIlTWF0aC5mbG9vciUiOkwsIiVNYXRoLm1heCUiOkssIiVNYXRoLm1pbiUiOlUsIiVNYXRoLnBvdyUiOlcsIiVNYXRoLnJvdW5kJSI6WSwiJU1hdGguc2lnbiUiOnEsIiVSZWZsZWN0''@;'; put 'put ''LmdldFByb3RvdHlwZU9mJSI6amV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHZlKXt2YXIgVD1UZShUZSh2ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgSD1mdW5jdGlvbiB2ZShYZSl7dmFyIHplO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09WGUpemU9SigiYXN5bmMgZnVu''@;'; put 'put ''Y3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PVhlKXplPUooImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1YZSl6ZT1KKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0''@;'; put 'put ''b3IlIj09PVhlKXt2YXIgRGU9dmUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO0RlJiYoemU9RGUucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09WGUpe3ZhciBGZT12ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO0ZlJiZUZSYmKHplPVRlKEZlLnByb3Rv''@;'; put 'put ''dHlwZSkpfXJldHVybiBDW1hlXT16ZSx6ZX0saj17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJB''@;'; put 'put ''cnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5Iiwi''@;'; put 'put ''cHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpb''@;'; put 'put ''IkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0''@;'; put 'put ''ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZs''@;'; put 'put ''b2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlw''@;'; put 'put ''ZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJv''@;'; put 'put ''dG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsi''@;'; put 'put ''TnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2''@;'; put 'put ''YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJv''@;'; put 'put ''bWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBl''@;'; put 'put ''Il0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBl''@;'; put 'put ''JSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdl''@;'; put 'put ''YWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT15KDg2MTIpLG09eSg4ODI0KSxBPUUuY2FsbChwLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLGFlPUUuY2FsbChWLEFycmF5LnByb3Rv''@;'; put 'put ''dHlwZS5zcGxpY2UpLHRlPUUuY2FsbChwLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksc2U9RS5jYWxsKHAsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksd2U9RS5jYWxsKHAsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxVZT0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10p''@;'; put 'put ''KCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLEplPS9cXChcXCk/L2cseGU9ZnVuY3Rpb24oWGUsemUpe3ZhciBGZSxEZT1YZTtpZihtKGosRGUpJiYoRGU9IiUiKyhGZT1qW0RlXSlbMF0rIiUiKSxtKEMsRGUpKXt2YXIgT2U9Q1tE''@;'; put 'put ''ZV07aWYoT2U9PT1iJiYoT2U9SChEZSkpLHR5cGVvZiBPZT4idSImJiF6ZSl0aHJvdyBuZXcgTygiaW50cmluc2ljICIrWGUrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6RmUsbmFtZTpEZSx2YWx1ZTpPZX19dGhy''@;'; put 'put ''b3cgbmV3IEYoImludHJpbnNpYyAiK1hlKyIgZG9lcyBub3QgZXhpc3QhIil9O3VlLmV4cG9ydHM9ZnVuY3Rpb24oWGUsemUpe2lmKCJzdHJpbmciIT10eXBlb2YgWGV8fDA9PT1YZS5sZW5ndGgpdGhyb3cgbmV3IE8oImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5n''@;'; put 'put ''Iik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiB6ZSl0aHJvdyBuZXcgTygnImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09d2UoL14lP1teJV0qJT8kLyxYZSkpdGhyb3cgbmV3IEYoImAlYCBtYXkgbm90IGJlIHBy''@;'; put 'put ''ZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgRGU9ZnVuY3Rpb24oWGUpe3ZhciB6ZT1zZShYZSwwLDEpLERlPXNlKFhlLC0xKTtpZigiJSI9PT16ZSYmIiUiIT09RGUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50''@;'; put 'put ''cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1EZSYmIiUiIT09emUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIgRmU9W107cmV0dXJuIHRlKFhlLFVlLGZ1bmN0aW9uKE9lLEllLFZl''@;'; put 'put ''LGtlKXtGZVtGZS5sZW5ndGhdPVZlP3RlKGtlLEplLCIkMSIpOkllfHxPZX0pLEZlfShYZSksRmU9RGUubGVuZ3RoPjA/RGVbMF06IiIsT2U9eGUoIiUiK0ZlKyIlIix6ZSksSWU9T2UubmFtZSxWZT1PZS52YWx1ZSxrZT0hMSxBZT1PZS5hbGlhcztBZSYmKEZlPUFlWzBdLGFlKERlLEEoWzAs''@;'; put 'put ''MV0sQWUpKSk7Zm9yKHZhciBfdD0xLG50PSEwO190PERlLmxlbmd0aDtfdCs9MSl7dmFyIFFlPURlW190XSx1bj1zZShRZSwwLDEpLHl0PXNlKFFlLC0xKTtpZigoJyInPT09dW58fCInIj09PXVufHwiYCI9PT11bnx8JyInPT09eXR8fCInIj09PXl0fHwiYCI9PT15dCkmJnVuIT09eXQpdGhy''@;'; put 'put ''b3cgbmV3IEYoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigoImNvbnN0cnVjdG9yIj09PVFlfHwhbnQpJiYoa2U9ITApLG0oQyxJZT0iJSIrKEZlKz0iLiIrUWUpKyIlIikpVmU9Q1tJZV07ZWxzZSBpZihudWxsIT1WZSl7aWYoIShR''@;'; put 'put ''ZSBpbiBWZSkpe2lmKCF6ZSl0aHJvdyBuZXcgTygiYmFzZSBpbnRyaW5zaWMgZm9yICIrWGUrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1cm59aWYobmUmJl90KzE+PURlLmxlbmd0aCl7dmFyIE10PW5lKFZlLFFlKTtWZT0obnQ9ISFNdCkmJiJn''@;'; put 'put ''ZXQiaW4gTXQmJiEoIm9yaWdpbmFsVmFsdWUiaW4gTXQuZ2V0KT9NdC5nZXQ6VmVbUWVdfWVsc2UgbnQ9bShWZSxRZSksVmU9VmVbUWVdO250JiYha2UmJihDW0llXT1WZSl9fXJldHVybiBWZX19LDg4OTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODkyKTt1ZS5leHBvcnRz''@;'; put 'put ''PUkuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0Mzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMTYxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ0MyksXz15KDg4OTkpLGc9eSg2''@;'; put 'put ''NTA0KTt1ZS5leHBvcnRzPUk/ZnVuY3Rpb24odyl7cmV0dXJuIEkodyl9Ol8/ZnVuY3Rpb24odyl7aWYoIXd8fCJvYmplY3QiIT10eXBlb2YgdyYmImZ1bmN0aW9uIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gXyh3KX06''@;'; put 'put ''Zz9mdW5jdGlvbih3KXtyZXR1cm4gZyh3KX06bnVsbH0sNjkwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY5MCk7aWYoSSl0cnl7SShbXSwibGVuZ3RoIil9''@;'; put 'put ''Y2F0Y2h7ST1udWxsfXVlLmV4cG9ydHM9SX0sNjQ1ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uIHkoSSl7aWYobnVsbD09PUl8fCJvYmplY3QiIT10eXBlb2YgSSlyZXR1cm4gSTtpZihJIGluc3RhbmNlb2YgT2JqZWN0KXZhciBfPXtfX3Byb3RvX186WChJKX07ZWxz''@;'; put 'put ''ZSBfPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEkpLmZvckVhY2goZnVuY3Rpb24oZyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sZyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEksZykpfSksX307dmFyIFg9T2JqZWN0Lmdl''@;'; put 'put ''dFByb3RvdHlwZU9mfHxmdW5jdGlvbihJKXtyZXR1cm4gSS5fX3Byb3RvX199fSw3NzoodWUsWCx5KT0+e3ZhciBPLHosST15KDQxNTUpLF89eSg1MTA4KSxnPXkoNTQ0MyksQj15KDIxNjEpLHc9eSg4NTIwKSxQPXkoNjQ1OCksRj15KDk1MzkpO2Z1bmN0aW9uIEwobmUsaWUpe09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShuZSxPLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWV9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/KE89U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucXVldWUiKSx6PVN5bWJvbC5mb3IoImdyYWNlZnVsLWZz''@;'; put 'put ''LnByZXZpb3VzIikpOihPPSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsej0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgcSxLPWZ1bmN0aW9uIE4oKXt9O2Z1bmN0aW9uIFcobmUpe0IobmUpLG5lLmdyYWNlZnVsaWZ5PVcsbmUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbiBzZShvdCx4''@;'; put 'put ''ZSl7cmV0dXJuIG5ldyBuZS5SZWFkU3RyZWFtKG90LHhlKX0sbmUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gd2Uob3QseGUpe3JldHVybiBuZXcgbmUuV3JpdGVTdHJlYW0ob3QseGUpfTt2YXIgaWU9bmUucmVhZEZpbGU7bmUucmVhZEZpbGU9ZnVuY3Rpb24gbGUob3QseGUsdmUpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKHZlPXhlLHhlPW51bGwpLGZ1bmN0aW9uIFhlKHplLERlLEZlLE9lKXtyZXR1cm4gaWUoemUsRGUsZnVuY3Rpb24oSWUpeyFJZXx8IkVNRklMRSIhPT1JZS5jb2RlJiYiRU5GSUxFIiE9PUllLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEZlJiZG''@;'; put 'put ''ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbWGUsW3plLERlLEZlXSxJZSxPZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QseGUsdmUpfTt2YXIgbWU9bmUud3JpdGVGaWxlO25lLndyaXRlRmlsZT1mdW5jdGlvbiBfZShvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gemUoRGUsRmUsT2UsSWUsVmUpe3JldHVybiBtZShEZSxGZSxPZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9O3ZhciBUZT1uZS5hcHBlbmRGaWxlO1RlJiYobmUuYXBwZW5kRmlsZT1mdW5jdGlvbiBTZShvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gemUoRGUsRmUsT2UsSWUsVmUpe3JldHVybiBUZShEZSxGZSxPZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9KTt2YXIgamU9bmUuY29weUZpbGU7amUmJihuZS5jb3B5RmlsZT1mdW5jdGlvbiBWKG90LHhlLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dmUmJihYZT12ZSx2ZT0wKSxmdW5jdGlvbiB6ZShEZSxGZSxPZSxJZSxWZSl7cmV0dXJuIGplKERlLEZlLE9lLGZ1bmN0aW9uKGtlKXsha2V8fCJFTUZJTEUiIT09a2UuY29kZSYmIkVORklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpOlkoW3plLFtEZSxGZSxPZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG90LHhlLHZlLFhlKX0pO3ZhciBwPW5lLnJlYWRkaXI7bmUucmVhZGRpcj1mdW5jdGlvbiB4KG90LHhlLHZlKXsiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKTt2YXIg''@;'; put 'put ''WGU9Yi50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oRmUsT2UsSWUsVmUpe3JldHVybiBwKEZlLHplKEZlLE9lLEllLFZlKSl9OmZ1bmN0aW9uKEZlLE9lLEllLFZlKXtyZXR1cm4gcChGZSxPZSx6ZShGZSxPZSxJZSxWZSkpfTtyZXR1cm4gWGUob3QseGUsdmUpO2Z1bmN0aW9uIHplKERlLEZl''@;'; put 'put ''LE9lLEllKXtyZXR1cm4gZnVuY3Rpb24oVmUsa2UpeyFWZXx8IkVNRklMRSIhPT1WZS5jb2RlJiYiRU5GSUxFIiE9PVZlLmNvZGU/KGtlJiZrZS5zb3J0JiZrZS5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIE9lJiZPZS5jYWxsKHRoaXMsVmUsa2UpKTpZKFtYZSxbRGUsRmUsT2VdLFZlLEll''@;'; put 'put ''fHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgYj0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBDPXcobmUpO209Qy5SZWFkU3RyZWFtLGFlPUMuV3JpdGVTdHJlYW19dmFyIFQ9bmUuUmVhZFN0cmVhbTtUJiYobS5wcm90b3R5cGU9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZShULnByb3RvdHlwZSksbS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiBBKCl7dmFyIG90PXRoaXM7SmUob3QucGF0aCxvdC5mbGFncyxvdC5tb2RlLGZ1bmN0aW9uKHhlLHZlKXt4ZT8ob3QuYXV0b0Nsb3NlJiZvdC5kZXN0cm95KCksb3QuZW1pdCgiZXJyb3IiLHhlKSk6KG90''@;'; put 'put ''LmZkPXZlLG90LmVtaXQoIm9wZW4iLHZlKSxvdC5yZWFkKCkpfSl9KTt2YXIgSD1uZS5Xcml0ZVN0cmVhbTtIJiYoYWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUpLGFlLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIHRlKCl7dmFyIG90PXRoaXM7SmUob3QucGF0aCxvdC5m''@;'; put 'put ''bGFncyxvdC5tb2RlLGZ1bmN0aW9uKHhlLHZlKXt4ZT8ob3QuZGVzdHJveSgpLG90LmVtaXQoImVycm9yIix4ZSkpOihvdC5mZD12ZSxvdC5lbWl0KCJvcGVuIix2ZSkpfSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIlJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0s''@;'; put 'put ''c2V0OmZ1bmN0aW9uKG90KXttPW90fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWV9LHNldDpmdW5jdGlvbihvdCl7YWU9b3R9LGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwfSk7dmFyIGo9bTtPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LHNldDpmdW5jdGlvbihvdCl7aj1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgRT1hZTtmdW5jdGlvbiBtKG90''@;'; put 'put ''LHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/KFQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOm0uYXBwbHkoT2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksYXJndW1lbnRzKX1mdW5jdGlvbiBhZShvdCx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8oSC5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyksdGhpcyk6YWUuYXBwbHkoT2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sc2V0OmZ1bmN0aW9uKG90KXtFPW90fSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBVZT1uZS5vcGVuO2Z1bmN0aW9uIEplKG90LHhlLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxmdW5jdGlvbiB6ZShEZSxGZSxPZSxJZSxWZSl7cmV0dXJuIFVlKERlLEZlLE9lLGZ1bmN0aW9u''@;'; put 'put ''KGtlLEFlKXsha2V8fCJFTUZJTEUiIT09a2UuY29kZSYmIkVORklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW3plLFtEZSxGZSxPZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG90LHhlLHZlLFhl''@;'; put 'put ''KX1yZXR1cm4gbmUub3Blbj1KZSxuZX1mdW5jdGlvbiBZKG5lKXtLKCJFTlFVRVVFIixuZVswXS5uYW1lLG5lWzFdKSxnW09dLnB1c2gobmUpLEooKX1mdW5jdGlvbiBlZSgpe2Zvcih2YXIgbmU9RGF0ZS5ub3coKSxpZT0wO2llPGdbT10ubGVuZ3RoOysraWUpZ1tPXVtpZV0ubGVuZ3RoPjIm''@;'; put 'put ''JihnW09dW2llXVszXT1uZSxnW09dW2llXVs0XT1uZSk7SigpfWZ1bmN0aW9uIEooKXtpZihjbGVhclRpbWVvdXQocSkscT12b2lkIDAsMCE9PWdbT10ubGVuZ3RoKXt2YXIgbmU9Z1tPXS5zaGlmdCgpLGllPW5lWzBdLGxlPW5lWzFdLG1lPW5lWzJdLF9lPW5lWzNdLFRlPW5lWzRdO2lmKHZv''@;'; put 'put ''aWQgMD09PV9lKUsoIlJFVFJZIixpZS5uYW1lLGxlKSxpZS5hcHBseShudWxsLGxlKTtlbHNlIGlmKERhdGUubm93KCktX2U+PTZlNCl7SygiVElNRU9VVCIsaWUubmFtZSxsZSk7dmFyIFNlPWxlLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmU2UuY2FsbChudWxsLG1lKX1lbHNle3Zh''@;'; put 'put ''ciBqZT1EYXRlLm5vdygpLVRlLFY9TWF0aC5tYXgoVGUtX2UsMSk7amU+PU1hdGgubWluKDEuMipWLDEwMCk/KEsoIlJFVFJZIixpZS5uYW1lLGxlKSxpZS5hcHBseShudWxsLGxlLmNvbmNhdChbX2VdKSkpOmdbT10ucHVzaChuZSl9dm9pZCAwPT09cSYmKHE9c2V0VGltZW91dChKLDApKX19''@;'; put 'put ''Ri5kZWJ1Z2xvZz9LPUYuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKEs9ZnVuY3Rpb24oKXt2YXIgbmU9Ri5mb3JtYXQuYXBwbHkoRixhcmd1bWVudHMpO25lPSJHRlM0OiAiK25lLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiks''@;'; put 'put ''Xy5lcnJvcihuZSl9KSxnW09dfHwoTChnLHkuZ1tPXXx8W10pLGcuY2xvc2U9ZnVuY3Rpb24obmUpe2Z1bmN0aW9uIGllKGxlLG1lKXtyZXR1cm4gbmUuY2FsbChnLGxlLGZ1bmN0aW9uKF9lKXtfZXx8ZWUoKSwiZnVuY3Rpb24iPT10eXBlb2YgbWUmJm1lLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUseix7dmFsdWU6bmV9KSxpZX0oZy5jbG9zZSksZy5jbG9zZVN5bmM9ZnVuY3Rpb24obmUpe2Z1bmN0aW9uIGllKGxlKXtuZS5hcHBseShnLGFyZ3VtZW50cyksZWUoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHos''@;'; put 'put ''e3ZhbHVlOm5lfSksaWV9KGcuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtLKGdbT10pLHkoOTI4MikuZXF1YWwoZ1tPXS5sZW5ndGgsMCl9KSkseS5nW09dfHxMKHkuZyxnW09dKSx1ZS5leHBvcnRzPVco''@;'; put 'put ''UChnKSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFnLl9fcGF0Y2hlZCYmKHVlLmV4cG9ydHM9VyhnKSxnLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KHVlLFgseSk9Pnt2YXIgST15KDQxNTUpLF89eSgyODMwKS5TdHJlYW07dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIpe3Jl''@;'; put 'put ''dHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIHcoRixPKXtpZighKHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IHcoRixPKTtfLmNhbGwodGhpcyk7dmFyIHo9dGhpczt0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdz''@;'; put 'put ''PSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixPPU98fHt9O2Zvcih2YXIgTj1PYmplY3Qua2V5cyhPKSxMPTAsSz1OLmxlbmd0aDtMPEs7TCsrKXt2YXIgVT1OW0xdO3RoaXNbVV09T1tVXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5j''@;'; put 'put ''b2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMu''@;'; put 'put ''ZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP0Iub3Blbih0aGlzLnBhdGgsdGhpcy5m''@;'; put 'put ''bGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oVyxZKXtpZihXKXJldHVybiB6LmVtaXQoImVycm9yIixXKSx2b2lkKHoucmVhZGFibGU9ITEpO3ouZmQ9WSx6LmVtaXQoIm9wZW4iLFkpLHouX3JlYWQoKX0pOkkubmV4dFRpY2soZnVuY3Rpb24oKXt6Ll9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVu''@;'; put 'put ''Y3Rpb24gUChGLE8pe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUChGLE8pO18uY2FsbCh0aGlzKSx0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhp''@;'; put 'put ''cy5ieXRlc1dyaXR0ZW49MCxPPU98fHt9O2Zvcih2YXIgej1PYmplY3Qua2V5cyhPKSxOPTAsTD16Lmxlbmd0aDtOPEw7TisrKXt2YXIgSz16W05dO3RoaXNbS109T1tLXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVy''@;'; put 'put ''cm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPUIu''@;'; put 'put ''b3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOih1ZSxYLHkpPT57dmFyIEk9eSg0MTU1KSxfPXkoMzIwOCksZz1JLmN3ZCxCPW51bGwsdz1JLmVudi5HUkFDRUZVTF9G''@;'; put 'put ''U19QTEFURk9STXx8SS5wbGF0Zm9ybTtJLmN3ZD1mdW5jdGlvbigpe3JldHVybiBCfHwoQj1nLmNhbGwoSSkpLEJ9O3RyeXtJLmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2YgSS5jaGRpcil7dmFyIFA9SS5jaGRpcjtJLmNoZGlyPWZ1bmN0aW9uKE8pe0I9bnVsbCxQLmNhbGwo''@;'; put 'put ''SSxPKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoSS5jaGRpcixQKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYoTyl7ZnVuY3Rpb24gTChKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUsbGUpe3JldHVybiBKLmNhbGwoTyxuZSxpZSxmdW5jdGlvbihtZSl7''@;'; put 'put ''ZWUobWUpJiYobWU9bnVsbCksbGUmJmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBLKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSl7dHJ5e3JldHVybiBKLmNhbGwoTyxuZSxpZSl9Y2F0Y2gobGUpe2lmKCFlZShsZSkpdGhyb3cgbGV9fX1mdW5jdGlvbiBVKEope3Jl''@;'; put 'put ''dHVybiBKJiZmdW5jdGlvbihuZSxpZSxsZSxtZSl7cmV0dXJuIEouY2FsbChPLG5lLGllLGxlLGZ1bmN0aW9uKF9lKXtlZShfZSkmJihfZT1udWxsKSxtZSYmbWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFcoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlKXt0cnl7''@;'; put 'put ''cmV0dXJuIEouY2FsbChPLG5lLGllLGxlKX1jYXRjaChtZSl7aWYoIWVlKG1lKSl0aHJvdyBtZX19fWZ1bmN0aW9uIFkoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlKXtmdW5jdGlvbiBtZShfZSxUZSl7VGUmJihUZS51aWQ8MCYmKFRlLnVpZCs9NDI5NDk2NzI5NiksVGUuZ2lkPDAm''@;'; put 'put ''JihUZS5naWQrPTQyOTQ5NjcyOTYpKSxsZSYmbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpZSYmKGxlPWllLGllPW51bGwpLGllP0ouY2FsbChPLG5lLGllLG1lKTpKLmNhbGwoTyxuZSxtZSl9fWZ1bmN0aW9uIHEoSil7cmV0dXJuIEomJmZ1bmN0''@;'; put 'put ''aW9uKG5lLGllKXt2YXIgbGU9aWU/Si5jYWxsKE8sbmUsaWUpOkouY2FsbChPLG5lKTtyZXR1cm4gbGUmJihsZS51aWQ8MCYmKGxlLnVpZCs9NDI5NDk2NzI5NiksbGUuZ2lkPDAmJihsZS5naWQrPTQyOTQ5NjcyOTYpKSxsZX19ZnVuY3Rpb24gZWUoSil7cmV0dXJuIUp8fCJFTk9TWVMiPT09''@;'; put 'put ''Si5jb2RlfHwhKEkuZ2V0dWlkJiYwPT09SS5nZXR1aWQoKXx8IkVJTlZBTCIhPT1KLmNvZGUmJiJFUEVSTSIhPT1KLmNvZGUpfV8uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZJLnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24geihKKXtKLmxj''@;'; put 'put ''aG1vZD1mdW5jdGlvbihuZSxpZSxsZSl7Si5vcGVuKG5lLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUsZnVuY3Rpb24obWUsX2Upe21lP2xlJiZsZShtZSk6Si5mY2htb2QoX2UsaWUsZnVuY3Rpb24oVGUpe0ouY2xvc2UoX2UsZnVuY3Rpb24oU2Upe2xlJiZsZShUZXx8U2UpfSl9KX0pfSxK''@;'; put 'put ''LmxjaG1vZFN5bmM9ZnVuY3Rpb24obmUsaWUpe3ZhciBfZSxsZT1KLm9wZW5TeW5jKG5lLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUpLG1lPSEwO3RyeXtfZT1KLmZjaG1vZFN5bmMobGUsaWUpLG1lPSExfWZpbmFsbHl7aWYobWUpdHJ5e0ouY2xvc2VTeW5jKGxlKX1jYXRjaHt9ZWxzZSBK''@;'; put 'put ''LmNsb3NlU3luYyhsZSl9cmV0dXJuIF9lfX0oTyksTy5sdXRpbWVzfHxmdW5jdGlvbiBOKEope18uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZKLmZ1dGltZXM/KEoubHV0aW1lcz1mdW5jdGlvbihuZSxpZSxsZSxtZSl7Si5vcGVuKG5lLF8uT19TWU1MSU5LLGZ1bmN0aW9uKF9lLFRl''@;'; put 'put ''KXtfZT9tZSYmbWUoX2UpOkouZnV0aW1lcyhUZSxpZSxsZSxmdW5jdGlvbihTZSl7Si5jbG9zZShUZSxmdW5jdGlvbihqZSl7bWUmJm1lKFNlfHxqZSl9KX0pfSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24obmUsaWUsbGUpe3ZhciBfZSxtZT1KLm9wZW5TeW5jKG5lLF8uT19TWU1MSU5LKSxU''@;'; put 'put ''ZT0hMDt0cnl7X2U9Si5mdXRpbWVzU3luYyhtZSxpZSxsZSksVGU9ITF9ZmluYWxseXtpZihUZSl0cnl7Si5jbG9zZVN5bmMobWUpfWNhdGNoe31lbHNlIEouY2xvc2VTeW5jKG1lKX1yZXR1cm4gX2V9KTpKLmZ1dGltZXMmJihKLmx1dGltZXM9ZnVuY3Rpb24obmUsaWUsbGUsbWUpe21lJiZJ''@;'; put 'put ''Lm5leHRUaWNrKG1lKX0sSi5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30pfShPKSxPLmNob3duPVUoTy5jaG93biksTy5mY2hvd249VShPLmZjaG93biksTy5sY2hvd249VShPLmxjaG93biksTy5jaG1vZD1MKE8uY2htb2QpLE8uZmNobW9kPUwoTy5mY2htb2QpLE8ubGNobW9kPUwoTy5sY2ht''@;'; put 'put ''b2QpLE8uY2hvd25TeW5jPVcoTy5jaG93blN5bmMpLE8uZmNob3duU3luYz1XKE8uZmNob3duU3luYyksTy5sY2hvd25TeW5jPVcoTy5sY2hvd25TeW5jKSxPLmNobW9kU3luYz1LKE8uY2htb2RTeW5jKSxPLmZjaG1vZFN5bmM9SyhPLmZjaG1vZFN5bmMpLE8ubGNobW9kU3luYz1LKE8ubGNo''@;'; put 'put ''bW9kU3luYyksTy5zdGF0PVkoTy5zdGF0KSxPLmZzdGF0PVkoTy5mc3RhdCksTy5sc3RhdD1ZKE8ubHN0YXQpLE8uc3RhdFN5bmM9cShPLnN0YXRTeW5jKSxPLmZzdGF0U3luYz1xKE8uZnN0YXRTeW5jKSxPLmxzdGF0U3luYz1xKE8ubHN0YXRTeW5jKSxPLmNobW9kJiYhTy5sY2htb2QmJihP''@;'; put 'put ''LmxjaG1vZD1mdW5jdGlvbihKLG5lLGllKXtpZSYmSS5uZXh0VGljayhpZSl9LE8ubGNobW9kU3luYz1mdW5jdGlvbigpe30pLE8uY2hvd24mJiFPLmxjaG93biYmKE8ubGNob3duPWZ1bmN0aW9uKEosbmUsaWUsbGUpe2xlJiZJLm5leHRUaWNrKGxlKX0sTy5sY2hvd25TeW5jPWZ1bmN0aW9u''@;'; put 'put ''KCl7fSksIndpbjMyIj09PXcmJihPLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZW5hbWU/Ty5yZW5hbWU6ZnVuY3Rpb24oSil7ZnVuY3Rpb24gbmUoaWUsbGUsbWUpe3ZhciBfZT1EYXRlLm5vdygpLFRlPTA7SihpZSxsZSxmdW5jdGlvbiBTZShqZSl7aWYoamUmJigiRUFDQ0VTIj09''@;'; put 'put ''PWplLmNvZGV8fCJFUEVSTSI9PT1qZS5jb2RlfHwiRUJVU1kiPT09amUuY29kZSkmJkRhdGUubm93KCktX2U8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5zdGF0KGxlLGZ1bmN0aW9uKFYscCl7ViYmIkVOT0VOVCI9PT1WLmNvZGU/SihpZSxsZSxTZSk6bWUoamUpfSl9LFRl''@;'; put 'put ''KSx2b2lkKFRlPDEwMCYmKFRlKz0xMCkpO21lJiZtZShqZSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YobmUsSiksbmV9KE8ucmVuYW1lKSksTy5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlYWQ/Ty5yZWFkOmZ1bmN0aW9uKEope2Z1''@;'; put 'put ''bmN0aW9uIG5lKGllLGxlLG1lLF9lLFRlLFNlKXt2YXIgamU7aWYoU2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTZSl7dmFyIFY9MDtqZT1mdW5jdGlvbihwLGIseCl7aWYocCYmIkVBR0FJTiI9PT1wLmNvZGUmJlY8MTApcmV0dXJuIFYrKyxKLmNhbGwoTyxpZSxsZSxtZSxfZSxUZSxqZSk7U2Uu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gSi5jYWxsKE8saWUsbGUsbWUsX2UsVGUsamUpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxKKSxuZX0oTy5yZWFkKSxPLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlYWRT''@;'; put 'put ''eW5jP08ucmVhZFN5bmM6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKG5lLGllLGxlLG1lLF9lKXtmb3IodmFyIFRlPTA7Oyl0cnl7cmV0dXJuIEouY2FsbChPLG5lLGllLGxlLG1lLF9lKX1jYXRjaChTZSl7aWYoIkVBR0FJTiI9PT1TZS5jb2RlJiZUZTwxMCl7VGUrKztjb250aW51ZX10''@;'; put 'put ''aHJvdyBTZX19fShPLnJlYWRTeW5jKX19LDEwNDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDI5KSxfPWZ1bmN0aW9uKCl7cmV0dXJuISFJfTtfLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09SShb''@;'; put 'put ''XSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LHVlLmV4cG9ydHM9X30sMTQwNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89eSg1NDE5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEkmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgSSgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmXygpfX0sNTQxOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIHk9e30sST1TeW1ib2woInRlc3QiKSxfPU9iamVjdChJKTtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIEl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEkpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfKSlyZXR1cm4hMTtmb3IodmFyIEIgaW4geVtJXT00Mix5KXJldHVybiEx''@;'; put 'put ''O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKHkpLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeSkubGVuZ3RoKXJldHVybiExO3ZhciB3''@;'; put 'put ''PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoeSk7aWYoMSE9PXcubGVuZ3RofHx3WzBdIT09SXx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh5LEkpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj''@;'; put 'put ''cmlwdG9yKXt2YXIgUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHksSSk7aWYoNDIhPT1QLnZhbHVlfHwhMCE9PVAuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NDE5KTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIEkoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwzMzQ5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgyODMwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gQihPKXtfLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShP''@;'; put 'put ''KSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfXkoNTcxNykoQixfKSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8seixOKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShPLHop''@;'; put 'put ''fWNhdGNoKEspe0w9S31OKEwpfSxCLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1PKHopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0''@;'; put 'put ''eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtCLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyx6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtPPWZ1bmN0aW9uIEYoTyx6KXtpZihPIGluc3RhbmNlb2YgSSlyZXR1cm4gTztpZigic3RyaW5nIj09dHlwZW9mIE8pcmV0dXJuIEkuZnJvbShPLHopO2lmKFAmJkFycmF5QnVmZmVyLmlzVmlldyhPKSl7aWYoMD09PU8uYnl0ZUxlbmd0aCly''@;'; put 'put ''ZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oTy5idWZmZXIsTy5ieXRlT2Zmc2V0LE8uYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJk8gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKE8pJiZPLmNvbnN0cnVjdG9y''@;'; put 'put ''JiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihPKSlyZXR1cm4gSS5mcm9tKE8pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5j''@;'; put 'put ''ZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShPLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxMPTA7dGhpcy5fYmxvY2tPZmZzZXQrTy5sZW5ndGgtTD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBLPXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXpl''@;'; put 'put ''OylOW0srK109T1tMKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtMPE8ubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU9bTCsrXTtmb3IodmFyIFU9MCxXPTgqTy5sZW5ndGg7Vz4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPVcsKFc9dGhpcy5fbGVuZ3Ro''@;'; put 'put ''W1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtVXS09NDI5NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuZGlnZXN0PWZ1''@;'; put 'put ''bmN0aW9uKE8pe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1PJiYoej16LnRvU3RyaW5nKE8pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMu''@;'; put 'put ''X2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdWUuZXhwb3J0cz1CfSwzNzE1Oih1ZSxY''@;'; put 'put ''LHkpPT57dmFyIEk9WDtJLnV0aWxzPXkoNjQzNiksSS5jb21tb249eSg1NzcyKSxJLnNoYT15KDkwNDEpLEkucmlwZW1kPXkoMjk0OSksSS5obWFjPXkoMjM0NCksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1J''@;'; put 'put ''LnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg5NzQ2KTtmdW5jdGlvbiBnKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90''@;'; put 'put ''YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3Iu''@;'; put 'put ''cGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1YLkJsb2NrSGFzaD1nLGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5w''@;'; put 'put ''ZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13''@;'; put 'put ''LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTz0wO088dy5sZW5ndGg7Tys9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUo''@;'; put 'put ''dyxPLE8rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxnLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLE89bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO09bMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspT1t6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2''@;'; put 'put ''YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKU9beisrXT0wO09beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT13Pj4+MjQmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPTI1NSZ3fWVsc2UgZm9yKE9beisrXT0yNTUmdyxPW3or''@;'; put 'put ''K109dz4+PjgmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+MjQmMjU1LE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtyZXR1cm4gT319LDIzNDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg2NDM2KSxfPXkoOTc0Nik7ZnVuY3Rpb24gZyhCLHcsUCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIsdyxQKTt0aGlzLkhhc2g9Qix0aGlzLmJsb2NrU2l6ZT1CLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1CLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhp''@;'; put 'put ''cy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSS50b0FycmF5KHcsUCkpfXVlLmV4cG9ydHM9ZyxnLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5i''@;'; put 'put ''bG9ja1NpemUpO2Zvcih2YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tTaXplO1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhp''@;'; put 'put ''cy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMu''@;'; put 'put ''aW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMjk0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1NzcyKSxnPUkucm90bDMyLEI9SS5zdW0zMix3PUkuc3VtMzJfMyxQPUkuc3VtMzJfNCxGPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIE8oKXtp''@;'; put 'put ''ZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE87Ri5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIHoocSxlZSxKLG5lKXtyZXR1cm4gcTw9''@;'; put 'put ''MTU/ZWVeSl5uZTpxPD0zMT9lZSZKfH5lZSZuZTpxPD00Nz8oZWV8fkopXm5lOnE8PTYzP2VlJm5lfEomfm5lOmVlXihKfH5uZSl9ZnVuY3Rpb24gTChxKXtyZXR1cm4gcTw9MTU/MTM1MjgyOTkyNjpxPD0zMT8xNTQ4NjAzNjg0OnE8PTQ3PzE4MzYwNzI2OTE6cTw9NjM/MjA1Mzk5NDIxNzow''@;'; put 'put ''fUkuaW5oZXJpdHMoTyxGKSxYLnJpcGVtZDE2MD1PLE8uYmxvY2tTaXplPTUxMixPLm91dFNpemU9MTYwLE8uaG1hY1N0cmVuZ3RoPTE5MixPLnBhZExlbmd0aD02NCxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEope2Zvcih2YXIgbmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSxs''@;'; put 'put ''ZT10aGlzLmhbMl0sbWU9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1uZSxTZT1pZSxqZT1sZSxWPW1lLHA9X2UsYj0wO2I8ODA7YisrKXt2YXIgeD1CKGcoUChuZSx6KGIsaWUsbGUsbWUpLGVlW0tbYl0rSl0sKHE9Yik8PTE1PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1Mzkz''@;'; put 'put ''OnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksV1tiXSksX2UpO25lPV9lLF9lPW1lLG1lPWcobGUsMTApLGxlPWllLGllPXgseD1CKGcoUChUZSx6KDc5LWIsU2UsamUsViksZWVbVVtiXStKXSxMKGIpKSxZW2JdKSxwKSxUZT1wLHA9VixWPWcoamUsMTApLGplPVNlLFNlPXh9dmFyIHE7''@;'; put 'put ''eD13KHRoaXMuaFsxXSxsZSxWKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0sbWUscCksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0sbmUsU2UpLHRoaXMuaFs0XT13KHRoaXMuaFswXSxpZSxqZSksdGhpcy5oWzBdPXh9LE8ucHJvdG90eXBlLl9kaWdl''@;'; put 'put ''c3Q9ZnVuY3Rpb24oZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0''@;'; put 'put ''LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwx''@;'; put 'put ''MSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIs''@;'; put 'put ''NSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMs''@;'; put 'put ''MTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sWT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYs''@;'; put 'put ''MTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC5zaGExPXkoNDc2MSksWC5zaGEyMjQ9eSg3OTkpLFguc2hhMjU2PXkoOTM0NCksWC5zaGEzODQ9eSg3NzIpLFguc2hhNTEy''@;'; put 'put ''PXkoNTkwMCl9LDQ3NjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoNTc3MiksZz15KDcwMzgpLEI9SS5yb3RsMzIsdz1JLnN1bTMyLFA9SS5zdW0zMl81LEY9Zy5mdF8xLE89Xy5CbG9ja0hhc2gsej1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgs''@;'; put 'put ''MzM5NTQ2OTc4Ml07ZnVuY3Rpb24gTigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTjtPLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9SS5pbmhl''@;'; put 'put ''cml0cyhOLE8pLHVlLmV4cG9ydHM9TixOLmJsb2NrU2l6ZT01MTIsTi5vdXRTaXplPTE2MCxOLmhtYWNTdHJlbmd0aD04MCxOLnBhZExlbmd0aD02NCxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEssVSl7Zm9yKHZhciBXPXRoaXMuVyxZPTA7WTwxNjtZKyspV1tZXT1LW1UrWV07Zm9y''@;'; put 'put ''KDtZPFcubGVuZ3RoO1krKylXW1ldPUIoV1tZLTNdXldbWS04XV5XW1ktMTRdXldbWS0xNl0sMSk7dmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSxKPXRoaXMuaFsyXSxuZT10aGlzLmhbM10saWU9dGhpcy5oWzRdO2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspe3ZhciBsZT1+fihZLzIwKSxt''@;'; put 'put ''ZT1QKEIocSw1KSxGKGxlLGVlLEosbmUpLGllLFdbWV0seltsZV0pO2llPW5lLG5lPUosSj1CKGVlLDMwKSxlZT1xLHE9bWV9dGhpcy5oWzBdPXcodGhpcy5oWzBdLHEpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxlZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLEopLHRoaXMuaFszXT13KHRoaXMu''@;'; put 'put ''aFszXSxuZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLGllKX0sTi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihLKXtyZXR1cm4iaGV4Ij09PUs/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3OTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg2NDM2KSxfPXkoOTM0NCk7ZnVuY3Rpb24gZygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZztfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3Njgz''@;'; put 'put ''OSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcsXyksdWUuZXhwb3J0cz1nLGcuYmxvY2tTaXplPTUxMixnLm91dFNpemU9MjI0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD02NCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIo''@;'; put 'put ''dGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9eSg3MDM4KSxCPXkoOTc0Niksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0z''@;'; put 'put ''Ml81LE89Zy5jaDMyLHo9Zy5tYWozMixOPWcuczBfMjU2LEw9Zy5zMV8yNTYsSz1nLmcwXzI1NixVPWcuZzFfMjU2LFc9Xy5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3''@;'; put 'put ''NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjky''@;'; put 'put ''LDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3''@;'; put 'put ''NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIx''@;'; put 'put ''OCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBxKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxO1cu''@;'; put 'put ''Y2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx0aGlzLlc9bmV3IEFycmF5KDY0KX1JLmluaGVyaXRzKHEsVyksdWUuZXhwb3J0cz1x''@;'; put 'put ''LHEuYmxvY2tTaXplPTUxMixxLm91dFNpemU9MjU2LHEuaG1hY1N0cmVuZ3RoPTE5MixxLnBhZExlbmd0aD02NCxxLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEosbmUpe2Zvcih2YXIgaWU9dGhpcy5XLGxlPTA7bGU8MTY7bGUrKylpZVtsZV09SltuZStsZV07Zm9yKDtsZTxpZS5sZW5n''@;'; put 'put ''dGg7bGUrKylpZVtsZV09UChVKGllW2xlLTJdKSxpZVtsZS03XSxLKGllW2xlLTE1XSksaWVbbGUtMTZdKTt2YXIgbWU9dGhpcy5oWzBdLF9lPXRoaXMuaFsxXSxUZT10aGlzLmhbMl0sU2U9dGhpcy5oWzNdLGplPXRoaXMuaFs0XSxWPXRoaXMuaFs1XSxwPXRoaXMuaFs2XSxiPXRoaXMuaFs3''@;'; put 'put ''XTtmb3IoQih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSxsZT0wO2xlPGllLmxlbmd0aDtsZSsrKXt2YXIgeD1GKGIsTChqZSksTyhqZSxWLHApLHRoaXMua1tsZV0saWVbbGVdKSxDPXcoTihtZSkseihtZSxfZSxUZSkpO2I9cCxwPVYsVj1qZSxqZT13KFNlLHgpLFNlPVRlLFRlPV9lLF9l''@;'; put 'put ''PW1lLG1lPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0sbWUpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbM10sU2UpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxqZSksdGhpcy5oWzVdPXcodGhpcy5oWzVd''@;'; put 'put ''LFYpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxwKSx0aGlzLmhbN109dyh0aGlzLmhbN10sYil9LHEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSil7cmV0dXJuImhleCI9PT1KP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU5MDApO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAs''@;'; put 'put ''ODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLF8pLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT0xMDI0''@;'; put 'put ''LGcub3V0U2l6ZT0zODQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVuZ3RoPTEyOCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJi''@;'; put 'put ''aWciKX19LDU5MDA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoNTc3MiksZz15KDk3NDYpLEI9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLE89SS5zdW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLEw9SS5z''@;'; put 'put ''dW02NF80X2hpLEs9SS5zdW02NF80X2xvLFU9SS5zdW02NF81X2hpLFc9SS5zdW02NF81X2xvLFk9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3''@;'; put 'put ''MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5''@;'; put 'put ''NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAw''@;'; put 'put ''NzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAz''@;'; put 'put ''MTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1''@;'; put 'put ''LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAs''@;'; put 'put ''MzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2''@;'; put 'put ''MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5''@;'; put 'put ''MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3Mjcx''@;'; put 'put ''LDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5''@;'; put 'put ''NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0''@;'; put 'put ''aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7WS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywy''@;'; put 'put ''NjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5j''@;'; put 'put ''dGlvbiBuZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBsZSh4LEMsVCxILGosRSl7dmFy''@;'; put 'put ''IG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gbWUoeCxDKXt2YXIgRT1CKHgsQywyOCleQihDLHgsMileQihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgs''@;'; put 'put ''MiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1CKHgsQywxNCleQih4LEMsMTgpXkIoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFNlKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4''@;'; put 'put ''KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBqZSh4LEMpe3ZhciBFPUIoeCxDLDEpXkIoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFYoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgs''@;'; put 'put ''Qyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBwKHgsQyl7dmFyIEU9Qih4LEMsMTkpXkIoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBiKHgsQyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2''@;'; put 'put ''KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFkpLHVlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0''@;'; put 'put ''aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPXAoSFtqLTRdLEhbai0zXSksbT1iKEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1IW2otMTNdLHRlPWplKEhbai0zMF0sSFtqLTI5XSksc2U9VihI''@;'; put 'put ''W2otMzBdLEhbai0yOV0pLHdlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPUwoRSxtLEEsYWUsdGUsc2Usd2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLHRlLHNlLHdlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9''@;'; put 'put ''dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSx0ZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLHdlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5oWzldLG90PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx2ZT10''@;'; put 'put ''aGlzLmhbMTJdLFhlPXRoaXMuaFsxM10semU9dGhpcy5oWzE0XSxEZT10aGlzLmhbMTVdO2codGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEZlPTA7RmU8SC5sZW5ndGg7RmUrPTIpe3ZhciBPZT16ZSxJZT1EZSxWZT1UZShVZSxKZSksa2U9U2UoVWUsSmUpLEFlPUooVWUsMCxv''@;'; put 'put ''dCwwLHZlKSxfdD1uZSgwLEplLDAseGUsMCxYZSksbnQ9dGhpcy5rW0ZlXSxRZT10aGlzLmtbRmUrMV0sdW49SFtGZV0seXQ9SFtGZSsxXSxNdD1VKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KSxEdD1XKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KTtPZT1tZShqLEUpLEll''@;'; put 'put ''PV9lKGosRSksVmU9aWUoaiwwLG0sMCxhZSksa2U9bGUoMCxFLDAsQSwwLHRlKTt2YXIgaXQ9eihPZSxJZSxWZSxrZSksJGU9TihPZSxJZSxWZSxrZSk7emU9dmUsRGU9WGUsdmU9b3QsWGU9eGUsb3Q9VWUseGU9SmUsVWU9eihzZSx3ZSxNdCxEdCksSmU9Tih3ZSx3ZSxNdCxEdCksc2U9YWUs''@;'; put 'put ''d2U9dGUsYWU9bSx0ZT1BLG09aixBPUUsaj16KE10LER0LGl0LCRlKSxFPU4oTXQsRHQsaXQsJGUpfU8odGhpcy5oLDAsaixFKSxPKHRoaXMuaCwyLG0sQSksTyh0aGlzLmgsNCxhZSx0ZSksTyh0aGlzLmgsNixzZSx3ZSksTyh0aGlzLmgsOCxVZSxKZSksTyh0aGlzLmgsMTAsb3QseGUpLE8o''@;'; put 'put ''dGhpcy5oLDEyLHZlLFhlKSxPKHRoaXMuaCwxNCx6ZSxEZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcwMzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIF89eSg2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gQihMLEssVSl7cmV0dXJuIEwmS15+TCZVfWZ1bmN0aW9uIHcoTCxLLFUpe3JldHVybiBMJkteTCZVXksmVX1mdW5jdGlvbiBQKEwsSyxVKXtyZXR1cm4gTF5LXlV9WC5mdF8xPWZ1bmN0aW9uIGcoTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0Io''@;'; put 'put ''SyxVLFcpOjE9PT1MfHwzPT09TD9QKEssVSxXKToyPT09TD93KEssVSxXKTp2b2lkIDB9LFguY2gzMj1CLFgubWFqMzI9dyxYLnAzMj1QLFguczBfMjU2PWZ1bmN0aW9uIEYoTCl7cmV0dXJuIF8oTCwyKV5fKEwsMTMpXl8oTCwyMil9LFguczFfMjU2PWZ1bmN0aW9uIE8oTCl7cmV0dXJuIF8o''@;'; put 'put ''TCw2KV5fKEwsMTEpXl8oTCwyNSl9LFguZzBfMjU2PWZ1bmN0aW9uIHooTCl7cmV0dXJuIF8oTCw3KV5fKEwsMTgpXkw+Pj4zfSxYLmcxXzI1Nj1mdW5jdGlvbiBOKEwpe3JldHVybiBfKEwsMTcpXl8oTCwxOSleTD4+PjEwfX0sNjQzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15''@;'; put 'put ''KDk3NDYpLF89eSg1NzE3KTtmdW5jdGlvbiBnKGIseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJmIuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj1iLmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImYi5jaGFyQ29kZUF0KHgrMSkpfWZ1bmN0aW9uIFAoYil7cmV0dXJuKGI+Pj4yNHxiPj4+OCY2NTI4''@;'; put 'put ''MHxiPDw4JjE2NzExNjgwfCgyNTUmYik8PDI0KT4+PjB9ZnVuY3Rpb24gTyhiKXtyZXR1cm4gMT09PWIubGVuZ3RoPyIwIitiOmJ9ZnVuY3Rpb24geihiKXtyZXR1cm4gNz09PWIubGVuZ3RoPyIwIitiOjY9PT1iLmxlbmd0aD8iMDAiK2I6NT09PWIubGVuZ3RoPyIwMDAiK2I6ND09PWIubGVu''@;'; put 'put ''Z3RoPyIwMDAwIitiOjM9PT1iLmxlbmd0aD8iMDAwMDAiK2I6Mj09PWIubGVuZ3RoPyIwMDAwMDAiK2I6MT09PWIubGVuZ3RoPyIwMDAwMDAwIitiOmJ9WC5pbmhlcml0cz1fLFgudG9BcnJheT1mdW5jdGlvbiBCKGIseCl7aWYoQXJyYXkuaXNBcnJheShiKSlyZXR1cm4gYi5zbGljZSgpO2lm''@;'; put 'put ''KCFiKXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYilpZih4KXtpZigiaGV4Ij09PXgpZm9yKChiPWIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoYj0iMCIrYiksSD0wO0g8Yi5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoYltIXSti''@;'; put 'put ''W0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIGo9Yi5jaGFyQ29kZUF0KEgpO2o8MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8MTkyLENbVCsrXT02MyZqfDEyOCk6ZyhiLEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJmIu''@;'; put 'put ''Y2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1qPj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwyMjQsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8Yi5sZW5n''@;'; put 'put ''dGg7SCsrKUNbSF09MHxiW0hdO3JldHVybiBDfSxYLnRvSGV4PWZ1bmN0aW9uIHcoYil7Zm9yKHZhciB4PSIiLEM9MDtDPGIubGVuZ3RoO0MrKyl4Kz1PKGJbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sWC5odG9ubD1QLFgudG9IZXgzMj1mdW5jdGlvbiBGKGIseCl7Zm9yKHZhciBDPSIi''@;'; put 'put ''LFQ9MDtUPGIubGVuZ3RoO1QrKyl7dmFyIEg9YltUXTsibGl0dGxlIj09PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygxNikpfXJldHVybiBDfSxYLnplcm8yPU8sWC56ZXJvOD16LFguam9pbjMyPWZ1bmN0aW9uIE4oYix4LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9''@;'; put 'put ''bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00KWpbRV09KCJiaWciPT09VD9iW21dPDwyNHxiW20rMV08PDE2fGJbbSsyXTw8OHxiW20rM106YlttKzNdPDwyNHxiW20rMl08PDE2fGJbbSsxXTw8OHxiW21dKT4+PjA7cmV0dXJuIGp9LFguc3BsaXQzMj1mdW5jdGlv''@;'; put 'put ''biBMKGIseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KmIubGVuZ3RoKSxUPTAsSD0wO1Q8Yi5sZW5ndGg7VCsrLEgrPTQpe3ZhciBqPWJbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxDW0grMV09aj4+PjE2JjI1NSxDW0grMl09aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+''@;'; put 'put ''MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hdPTI1NSZqKX1yZXR1cm4gQ30sWC5yb3RyMzI9ZnVuY3Rpb24gSyhiLHgpe3JldHVybiBiPj4+eHxiPDwzMi14fSxYLnJvdGwzMj1mdW5jdGlvbiBVKGIseCl7cmV0dXJuIGI8PHh8Yj4+PjMyLXh9LFguc3VtMzI9ZnVu''@;'; put 'put ''Y3Rpb24gVyhiLHgpe3JldHVybiBiK3g+Pj4wfSxYLnN1bTMyXzM9ZnVuY3Rpb24gWShiLHgsQyl7cmV0dXJuIGIreCtDPj4+MH0sWC5zdW0zMl80PWZ1bmN0aW9uIHEoYix4LEMsVCl7cmV0dXJuIGIreCtDK1Q+Pj4wfSxYLnN1bTMyXzU9ZnVuY3Rpb24gZWUoYix4LEMsVCxIKXtyZXR1cm4g''@;'; put 'put ''Yit4K0MrVCtIPj4+MH0sWC5zdW02ND1mdW5jdGlvbiBKKGIseCxDLFQpe3ZhciBFPVQrYlt4KzFdPj4+MDtiW3hdPShFPFQ/MTowKStDK2JbeF0+Pj4wLGJbeCsxXT1FfSxYLnN1bTY0X2hpPWZ1bmN0aW9uIG5lKGIseCxDLFQpe3JldHVybih4K1Q+Pj4wPHg/MTowKStiK0M+Pj4wfSxYLnN1''@;'; put 'put ''bTY0X2xvPWZ1bmN0aW9uIGllKGIseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxYLnN1bTY0XzRfaGk9ZnVuY3Rpb24gbGUoYix4LEMsVCxILGosRSxtKXt2YXIgQT0wLGFlPXg7cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAsQSs9KGFlPWFlK2o+Pj4wKTxqPzE6MCxiK0MrSCtFKyhBKz0o''@;'; put 'put ''YWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LFguc3VtNjRfNF9sbz1mdW5jdGlvbiBtZShiLHgsQyxULEgsaixFLG0pe3JldHVybiB4K1QraittPj4+MH0sWC5zdW02NF81X2hpPWZ1bmN0aW9uIF9lKGIseCxDLFQsSCxqLEUsbSxBLGFlKXt2YXIgdGU9MCxzZT14O3JldHVybiB0ZSs9KHNlPXNl''@;'; put 'put ''K1Q+Pj4wKTx4PzE6MCx0ZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCx0ZSs9KHNlPXNlK20+Pj4wKTxtPzE6MCxiK0MrSCtFK0ErKHRlKz0oc2U9c2UrYWU+Pj4wKTxhZT8xOjApPj4+MH0sWC5zdW02NF81X2xvPWZ1bmN0aW9uIFRlKGIseCxDLFQsSCxqLEUsbSxBLGFlKXtyZXR1cm4geCtUK2or''@;'; put 'put ''bSthZT4+PjB9LFgucm90cjY0X2hpPWZ1bmN0aW9uIFNlKGIseCxDKXtyZXR1cm4oeDw8MzItQ3xiPj4+Qyk+Pj4wfSxYLnJvdHI2NF9sbz1mdW5jdGlvbiBqZShiLHgsQyl7cmV0dXJuKGI8PDMyLUN8eD4+PkMpPj4+MH0sWC5zaHI2NF9oaT1mdW5jdGlvbiBWKGIseCxDKXtyZXR1cm4gYj4+''@;'; put 'put ''PkN9LFguc2hyNjRfbG89ZnVuY3Rpb24gcChiLHgsQyl7cmV0dXJuKGI8PDMyLUN8eD4+PkMpPj4+MH19LDg4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9eSg4NjEyKTt1''@;'; put 'put ''ZS5leHBvcnRzPWcuY2FsbChJLF8pfSwyMTU2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzcxNSksXz15KDQ1MDQpLGc9eSg5NzQ2KTtmdW5jdGlvbiBCKHcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJl''@;'; put 'put ''ZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlz''@;'; put 'put ''LlY9bnVsbDt2YXIgUD1fLnRvQXJyYXkody5lbnRyb3B5LHcuZW50cm9weUVuY3x8ImhleCIpLEY9Xy50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLE89Xy50b0FycmF5KHcucGVycyx3LnBlcnNFbmN8fCJoZXgiKTtnKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90''@;'; put 'put ''IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFAsRixPKX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oUCxGLE8pe3ZhciB6PVAuY29uY2F0KEYpLmNvbmNhdChPKTt0aGlzLks9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBOPTA7Tjx0aGlzLlYubGVuZ3RoO04rKyl0aGlzLktbTl09MCx0aGlzLlZbTl09MTt0aGlzLl91cGRhdGUoeiksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3''@;'; put 'put ''MTA2NTZ9LEIucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7dmFyIEY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1AmJihGPUYudXBkYXRl''@;'; put 'put ''KFApKSx0aGlzLks9Ri5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFAmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShQKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0''@;'; put 'put ''aGlzLlYpLmRpZ2VzdCgpKX0sQi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKFAsRixPLHopeyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxQPV8udG9BcnJheShQLEYpLE89Xy50b0FycmF5KE8seiksZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91''@;'; put 'put ''Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKFAuY29uY2F0KE98fFtdKSksdGhpcy5fcmVzZWVkPTF9LEIucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFAsRixPLHope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZElu''@;'; put 'put ''dGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLE8mJihPPV8udG9BcnJheShPLHp8fCJoZXgiKSx0aGlzLl91cGRhdGUoTykpO2Zvcih2YXIgTj1bXTtOLmxlbmd0aDxQOyl0aGlzLlY9dGhpcy5f''@;'; put 'put ''aG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE49Ti5jb25jYXQodGhpcy5WKTt2YXIgTD1OLnNsaWNlKDAsUCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShPKSx0aGlzLl9yZXNlZWQrKyxfLmVuY29kZShMLEYpfX0sNjQ1Oih1ZSxYKT0+e1gucmVhZD1mdW5jdGlvbih5LEksXyxnLEIpe3Zh''@;'; put 'put ''ciB3LFAsRj04KkItZy0xLE89KDE8PEYpLTEsej1PPj4xLE49LTcsTD1fP0ItMTowLEs9Xz8tMToxLFU9eVtJK0xdO2ZvcihMKz1LLHc9VSYoMTw8LU4pLTEsVT4+PS1OLE4rPUY7Tj4wO3c9MjU2KncreVtJK0xdLEwrPUssTi09OCk7Zm9yKFA9dyYoMTw8LU4pLTEsdz4+PS1OLE4rPWc7Tj4w''@;'; put 'put ''O1A9MjU2KlAreVtJK0xdLEwrPUssTi09OCk7aWYoMD09PXcpdz0xLXo7ZWxzZXtpZih3PT09TylyZXR1cm4gUD9OYU46MS8wKihVPy0xOjEpO1ArPU1hdGgucG93KDIsZyksdy09en1yZXR1cm4oVT8tMToxKSpQKk1hdGgucG93KDIsdy1nKX0sWC53cml0ZT1mdW5jdGlvbih5LEksXyxnLEIs''@;'; put 'put ''dyl7dmFyIFAsRixPLHo9OCp3LUItMSxOPSgxPDx6KS0xLEw9Tj4+MSxLPTIzPT09Qj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsVT1nPzA6dy0xLFc9Zz8xOi0xLFk9STwwfHwwPT09SSYmMS9JPDA/MTowO2ZvcihJPU1hdGguYWJzKEkpLGlzTmFOKEkpfHxJPT09MS8wPyhG''@;'; put 'put ''PWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5MTjIpLEkqKE89TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sTyo9MiksKEkrPVArTD49MT9LL086SypNYXRoLnBvdygyLDEtTCkpKk8+PTImJihQKyssTy89MiksUCtMPj1OPyhGPTAsUD1OKTpQK0w+PTE/''@;'; put 'put ''KEY9KEkqTy0xKSpNYXRoLnBvdygyLEIpLFArPUwpOihGPUkqTWF0aC5wb3coMixMLTEpKk1hdGgucG93KDIsQiksUD0wKSk7Qj49ODt5W18rVV09MjU1JkYsVSs9VyxGLz0yNTYsQi09OCk7Zm9yKFA9UDw8QnxGLHorPUI7ej4wO3lbXytVXT0yNTUmUCxVKz1XLFAvPTI1Nix6LT04KTt5W18r''@;'; put 'put ''VS1XXXw9MTI4Kll9fSw1NzE3OnVlPT57dWUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih5LEkpe0kmJih5LnN1cGVyXz1JLHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp5LGVudW1lcmFi''@;'; put 'put ''bGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oeSxJKXtpZihJKXt5LnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnByb3RvdHlwZSx5LnByb3RvdHlwZT1uZXcgXyx5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15fX19LDI1ODQ6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDEwKSgpLGc9eSg3Mzc5KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEI9ZnVuY3Rpb24oTyl7cmV0dXJuIShJJiZPJiYib2JqZWN0Ij09dHlwZW9mIE8mJlN5bWJvbC50b1N0cmluZ1RhZyBpbiBPKSYmIltvYmplY3QgQXJn''@;'; put 'put ''dW1lbnRzXSI9PT1nKE8pfSx3PWZ1bmN0aW9uKE8pe3JldHVybiEhQihPKXx8bnVsbCE9PU8mJiJvYmplY3QiPT10eXBlb2YgTyYmImxlbmd0aCJpbiBPJiYibnVtYmVyIj09dHlwZW9mIE8ubGVuZ3RoJiZPLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIiE9PWcoTykmJiJjYWxsZWUiaW4g''@;'; put 'put ''TyYmIltvYmplY3QgRnVuY3Rpb25dIj09PWcoTy5jYWxsZWUpfSxQPWZ1bmN0aW9uKCl7cmV0dXJuIEIoYXJndW1lbnRzKX0oKTtCLmlzTGVnYWN5QXJndW1lbnRzPXcsdWUuZXhwb3J0cz1QP0I6d30sNTMyMDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfLFg9RnVuY3Rpb24ucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLHk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7ST1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30s''@;'; put 'put ''Imxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IF99fSksXz17fSx5KGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsSSl9Y2F0Y2goZWUpe2VlIT09XyYmKHk9bnVsbCl9ZWxzZSB5PW51bGw7dmFyIGc9L15ccypjbGFzc1xiLyxCPWZ1bmN0aW9uKEope3RyeXt2YXIgbmU9WC5jYWxsKEop''@;'; put 'put ''O3JldHVybiBnLnRlc3QobmUpfWNhdGNoe3JldHVybiExfX0sdz1mdW5jdGlvbihKKXt0cnl7cmV0dXJuIUIoSikmJihYLmNhbGwoSiksITApfWNhdGNoe3JldHVybiExfX0sUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wu''@;'; put 'put ''dG9TdHJpbmdUYWcsVz0hKDAgaW5bLF0pLFk9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHE9ZG9jdW1lbnQuYWxsO1AuY2FsbChxKT09PVAuY2FsbChkb2N1bWVudC5hbGwpJiYoWT1mdW5jdGlvbihKKXtpZigoV3x8IUopJiYodHlwZW9m''@;'; put 'put ''IEo+InUifHwib2JqZWN0Ij09dHlwZW9mIEopKXRyeXt2YXIgbmU9UC5jYWxsKEopO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09bmV8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1uZXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PW5lfHwi''@;'; put 'put ''W29iamVjdCBPYmplY3RdIj09PW5lKSYmbnVsbD09SigiIil9Y2F0Y2h7fXJldHVybiExfSl9dWUuZXhwb3J0cz15P2Z1bmN0aW9uKEope2lmKFkoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e3koSixudWxs''@;'; put 'put ''LEkpfWNhdGNoKG5lKXtpZihuZSE9PV8pcmV0dXJuITF9cmV0dXJuIUIoSikmJncoSil9OmZ1bmN0aW9uKEope2lmKFkoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7aWYoVSlyZXR1cm4gdyhKKTtpZihCKEopKXJl''@;'; put 'put ''dHVybiExO3ZhciBuZT1QLmNhbGwoSik7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09bmUmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1uZSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChuZSkpJiZ3KEopfX0sODY2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixJ''@;'; put 'put ''PXkoNzM3OSksZz15KDkyNDYpKC9eXHMqKD86ZnVuY3Rpb24pP1wqLyksQj15KDY0MTApKCksdz15KDE2MTgpLFA9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9SSgiRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nIik7dWUuZXhwb3J0cz1mdW5jdGlvbihMKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgTClyZXR1cm4hMTtpZihnKEYoTCkpKXJldHVybiEwO2lmKCFCKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1QKEwpO2lmKCF3KXJldHVybiExO2lmKHR5cGVvZiB6PiJ1Iil7dmFyIFU9ZnVuY3Rpb24oKXtpZighQilyZXR1cm4hMTt0cnl7cmV0dXJu''@;'; put 'put ''IEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7ej0hIVUmJncoVSl9cmV0dXJuIHcoTCk9PT16fX0sODYxMTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybiB5IT15fX0sMzYwOih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoNTU1OSksXz15KDQyODkpLGc9eSg4NjExKSxCPXkoOTQxNSksdz15KDMxOTQpLFA9SShCKCksTnVtYmVyKTtfKFAse2dldFBvbHlmaWxsOkIsaW1wbGVtZW50YXRpb246ZyxzaGltOnd9KSx1ZS5leHBvcnRzPVB9LDk0MTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg4NjExKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46SX19LDMxOTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0Mjg5KSxfPXkoOTQxNSk7dWUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbigpe3ZhciBCPV8oKTtyZXR1cm4gSShOdW1iZXIse2lzTmFOOkJ9LHtpc05hTjpmdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4hPT1CfX0pLEJ9fSw4NDIwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciB3LEk9eSg3Mzc5KSxfPXkoNjQxMCkoKSxnPXkoODgy''@;'; put 'put ''NCksQj15KDcyOTYpO2lmKF8pe3ZhciBQPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEY9e30sTz1mdW5jdGlvbigpe3Rocm93IEZ9LHo9e3RvU3RyaW5nOk8sdmFsdWVPZjpPfTsic3ltYm9sIj09dHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSYmKHpbU3ltYm9sLnRvUHJpbWl0aXZlXT1P''@;'; put 'put ''KSx3PWZ1bmN0aW9uKFUpe2lmKCFVfHwib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuITE7dmFyIFc9QihVLCJsYXN0SW5kZXgiKTtpZighV3x8IWcoVywidmFsdWUiKSlyZXR1cm4hMTt0cnl7UChVLHopfWNhdGNoKHEpe3JldHVybiBxPT09Rn19fWVsc2V7dmFyIE49SSgiT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZyIpO3c9ZnVuY3Rpb24oVSl7cmV0dXJuISghVXx8Im9iamVjdCIhPXR5cGVvZiBVJiYiZnVuY3Rpb24iIT10eXBlb2YgVSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09TihVKX19dWUuZXhwb3J0cz13fSw1NjkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQz''@;'; put 'put ''MCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4hIUkoZyl9fSw1ODI2OnVlPT57dmFyIFg9e30udG9TdHJpbmc7dWUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih5KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1YLmNhbGwoeSl9fSw2ODEzOih1ZSxYLHkpPT57bGV0IEk7''@;'; put 'put ''dHJ5e0k9eSg3Nyl9Y2F0Y2h7ST15KDQxMjkpfWNvbnN0IF89eSg4OTgxKSx7c3RyaW5naWZ5Omcsc3RyaXBCb206Qn09eSg2NzgwKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWT17fSl7InN0cmluZyI9PXR5cGVvZiBZJiYoWT17ZW5jb2Rp''@;'; put 'put ''bmc6WX0pO2NvbnN0IHE9WS5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gWSl8fFkudGhyb3dzO2xldCBuZSxKPXlpZWxkIF8uZnJvbUNhbGxiYWNrKHEucmVhZEZpbGUpKFcsWSk7Sj1CKEopO3RyeXtuZT1KU09OLnBhcnNlKEosWT9ZLnJldml2ZXI6bnVsbCl9Y2F0Y2goaWUpe2lmKGVlKXRocm93''@;'; put 'put ''IGllLm1lc3NhZ2U9YCR7V306ICR7aWUubWVzc2FnZX1gLGllO3JldHVybiBudWxsfXJldHVybiBuZX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRj1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHcoVyl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7ZnVuY3Rpb24gTigp''@;'; put 'put ''e3JldHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFkscT17fSl7Y29uc3QgZWU9cS5mc3x8SSxKPWcoWSxxKTt5aWVsZCBfLmZyb21DYWxsYmFjayhlZS53cml0ZUZpbGUpKFcsSixxKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgTD1fLmZyb21Qcm9taXNlKGZ1''@;'; put 'put ''bmN0aW9uIHooVyxZKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTt1ZS5leHBvcnRzPXtyZWFkRmlsZTpGLHJlYWRGaWxlU3luYzpmdW5jdGlvbiBPKFcsWT17fSl7InN0cmluZyI9PXR5cGVvZiBZJiYoWT17ZW5jb2Rpbmc6WX0pO2NvbnN0IHE9WS5mc3x8SSxlZT0hKCJ0aHJv''@;'; put 'put ''d3MiaW4gWSl8fFkudGhyb3dzO3RyeXtsZXQgSj1xLnJlYWRGaWxlU3luYyhXLFkpO3JldHVybiBKPUIoSiksSlNPTi5wYXJzZShKLFkucmV2aXZlcil9Y2F0Y2goSil7aWYoZWUpdGhyb3cgSi5tZXNzYWdlPWAke1d9OiAke0oubWVzc2FnZX1gLEo7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6''@;'; put 'put ''TCx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uIEsoVyxZLHE9e30pe2NvbnN0IGVlPXEuZnN8fEksSj1nKFkscSk7cmV0dXJuIGVlLndyaXRlRmlsZVN5bmMoVyxKLHEpfX19LDY3ODA6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcjt1ZS5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24g''@;'; put 'put ''XyhCLHtFT0w6dz0iXG4iLGZpbmFsRU9MOlA9ITAscmVwbGFjZXI6Rj1udWxsLHNwYWNlczpPfT17fSl7Y29uc3Qgej1QP3c6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEIsRixPKS5yZXBsYWNlKC9cbi9nLHcpK3p9LHN0cmlwQm9tOmZ1bmN0aW9uIGcoQil7cmV0dXJuIEkuaXNCdWZmZXIo''@;'; put 'put ''QikmJihCPUIudG9TdHJpbmcoInV0ZjgiKSksQi5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKEYpe3RoaXMubWVzc2FnZT1GfXkucihYKSx5LmQoWCx7SW52YWxpZFRva2VuRXJyb3I6KCk9PkIsZGVmYXVsdDooKT0+UH0p''@;'; put 'put ''LChJLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIF89dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKEYpe3ZhciBPPVN0cmluZyhGKS5yZXBsYWNlKC89KyQvLCIiKTtp''@;'; put 'put ''ZihPLmxlbmd0aCU0PT0xKXRocm93IG5ldyBJKCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgeixOLEw9MCxLPTAsVT0iIjtOPU8uY2hhckF0KEsrKyk7fk4mJih6PUwlND82NCp6K046TixMKyslNCk/''@;'; put 'put ''VSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmej4+KC0yKkwmNikpOjApTj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2YoTik7cmV0dXJuIFV9O2Z1bmN0aW9uIEIoRil7dGhpcy5tZXNzYWdlPUZ9KEIu''@;'; put 'put ''cHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IFA9ZnVuY3Rpb24gdyhGLE8pe2lmKCJzdHJpbmciIT10eXBlb2YgRil0aHJvdyBuZXcgQigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgej0hMD09PShPPU98fHt9KS5oZWFkZXI/MDoxO3Ry''@;'; put 'put ''eXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBnKEYpe3ZhciBPPUYucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKE8ubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Tys9Ij09IjticmVhaztjYXNlIDM6Tys9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ci''@;'; put 'put ''SWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoXyhPKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihOLEwpe3ZhciBLPUwuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gSy5sZW5ndGg8MiYmKEs9IjAi''@;'; put 'put ''K0spLCIlIitLfSkpfWNhdGNoe3JldHVybiBfKE8pfX0oRi5zcGxpdCgiLiIpW3pdKSl9Y2F0Y2goTil7dGhyb3cgbmV3IEIoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK04ubWVzc2FnZSl9fX0sMTY1ODoodWUsWCx5KT0+e3ZhciBnPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxCPVJlZ0V4''@;'; put 'put ''cChnLnNvdXJjZSksUD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEY9Im9iamVjdCI9PXR5cGVvZiB5LmcmJnkuZyYmeS5nLk9iamVjdD09PU9iamVjdCYmeS5nfHxQfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHo9T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZyxOPUYuU3ltYm9sLEw9Tj9OLnByb3RvdHlwZTp2b2lkIDAsSz1MP0wudG9TdHJpbmc6dm9pZCAwO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZWUoSil7cmV0dXJuKEo9ZnVuY3Rpb24gcShKKXtyZXR1cm4gbnVsbD09Sj8iIjpmdW5jdGlvbiBVKEope2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgSilyZXR1cm4gSjtpZihmdW5jdGlvbiBZKEope3JldHVybiJzeW1ib2wiPT10eXBlb2YgSnx8ZnVuY3Rpb24gVyhKKXtyZXR1cm4hIUomJiJvYmplY3QiPT10eXBlb2YgSn0oSikmJiJbb2JqZWN0IFN5bWJvbF0iPT16LmNhbGwoSil9KEopKXJldHVybiBLP0suY2FsbChKKToi''@;'; put 'put ''Ijt2YXIgbmU9SisiIjtyZXR1cm4iMCI9PW5lJiYxL0o9PS0xLzA/Ii0wIjpuZX0oSil9KEopKSYmQi50ZXN0KEopP0oucmVwbGFjZShnLCJcXCQmIik6Sn19LDgwOTQ6dWU9Pnt2YXIgST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24gXyhCKXtyZXR1cm4h''@;'; put 'put ''MD09PUJ8fCExPT09Qnx8ZnVuY3Rpb24gZyhCKXtyZXR1cm4hIUImJiJvYmplY3QiPT10eXBlb2YgQn0oQikmJiJbb2JqZWN0IEJvb2xlYW5dIj09SS5jYWxsKEIpfX0sMjMwNzoodWUsWCx5KT0+e3VlPXkubm1kKHVlKTt2YXIgXz0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsZz0xLEI9''@;'; put 'put ''Mix3PTkwMDcxOTkyNTQ3NDA5OTEsUD0iW29iamVjdCBBcmd1bWVudHNdIixGPSJbb2JqZWN0IEFycmF5XSIsTz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsej0iW29iamVjdCBCb29sZWFuXSIsTj0iW29iamVjdCBEYXRlXSIsTD0iW29iamVjdCBFcnJvcl0iLEs9IltvYmplY3QgRnVuY3Rp''@;'; put 'put ''b25dIixVPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVz0iW29iamVjdCBNYXBdIixZPSJbb2JqZWN0IE51bWJlcl0iLHE9IltvYmplY3QgTnVsbF0iLGVlPSJbb2JqZWN0IE9iamVjdF0iLEo9IltvYmplY3QgUHJvbWlzZV0iLG5lPSJbb2JqZWN0IFByb3h5XSIsaWU9IltvYmplY3Qg''@;'; put 'put ''UmVnRXhwXSIsbGU9IltvYmplY3QgU2V0XSIsbWU9IltvYmplY3QgU3RyaW5nXSIsVGU9IltvYmplY3QgVW5kZWZpbmVkXSIsU2U9IltvYmplY3QgV2Vha01hcF0iLGplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVj0iW29iamVjdCBEYXRhVmlld10iLGFlPS9eXFtvYmplY3QgLis/Q29uc3Ry''@;'; put 'put ''dWN0b3JcXSQvLHRlPS9eKD86MHxbMS05XVxkKikkLyxzZT17fTtzZVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09c2VbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXNlWyJbb2JqZWN0IEludDhBcnJheV0iXT1zZVsiW29iamVjdCBJbnQxNkFycmF5XSJdPXNlWyJbb2JqZWN0IEludDMyQXJy''@;'; put 'put ''YXldIl09c2VbIltvYmplY3QgVWludDhBcnJheV0iXT1zZVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1zZVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1zZVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxzZVtQXT1zZVtGXT1zZVtqZV09c2Vbel09c2VbVl09c2VbTl09c2VbTF09''@;'; put 'put ''c2VbS109c2VbV109c2VbWV09c2VbZWVdPXNlW2llXT1zZVtsZV09c2VbbWVdPXNlW1NlXT0hMTt2YXIgd2U9Im9iamVjdCI9PXR5cGVvZiB5LmcmJnkuZyYmeS5nLk9iamVjdD09PU9iamVjdCYmeS5nLFVlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmpl''@;'; put 'put ''Y3QmJnNlbGYsSmU9d2V8fFVlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLG90PVgmJiFYLm5vZGVUeXBlJiZYLHhlPW90JiZ1ZSYmIXVlLm5vZGVUeXBlJiZ1ZSx2ZT14ZSYmeGUuZXhwb3J0cz09PW90LFhlPXZlJiZ3ZS5wcm9jZXNzLHplPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBYZSYm''@;'; put 'put ''WGUuYmluZGluZyYmWGUuYmluZGluZygidXRpbCIpfWNhdGNoe319KCksRGU9emUmJnplLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBJZShBbixhbil7Zm9yKHZhciB2aT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxlbmd0aDsrK3ZpPEFyOylpZihhbihBblt2aV0sdmksQW4pKXJldHVybiEwO3JldHVy''@;'; put 'put ''biExfWZ1bmN0aW9uIEFlKEFuLGFuKXtyZXR1cm4gQW4uaGFzKGFuKX1mdW5jdGlvbiBudChBbil7dmFyIGFuPS0xLHZpPUFycmF5KEFuLnNpemUpO3JldHVybiBBbi5mb3JFYWNoKGZ1bmN0aW9uKEFyLFBvKXt2aVsrK2FuXT1bUG8sQXJdfSksdml9ZnVuY3Rpb24gdW4oQW4pe3ZhciBhbj0t''@;'; put 'put ''MSx2aT1BcnJheShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChmdW5jdGlvbihBcil7dmlbKythbl09QXJ9KSx2aX12YXIgQW4seXQ9QXJyYXkucHJvdG90eXBlLER0PU9iamVjdC5wcm90b3R5cGUsaXQ9SmVbIl9fY29yZS1qc19zaGFyZWRfXyJdLCRlPUZ1bmN0aW9uLnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZyx0dD1EdC5oYXNPd25Qcm9wZXJ0eSxIZT0oQW49L1teLl0rJC8uZXhlYyhpdCYmaXQua2V5cyYmaXQua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0FuOiIiLHV0PUR0LnRvU3RyaW5nLHF0PVJlZ0V4cCgiXiIrJGUuY2FsbCh0dCkucmVwbGFjZSgvW1xcXiQu''@;'; put 'put ''Kis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksUnQ9dmU/SmUuQnVmZmVyOnZvaWQgMCxQdD1KZS5TeW1ib2wsY2k9SmUuVWludDhBcnJheSxRdD1EdC5wcm9w''@;'; put 'put ''ZXJ0eUlzRW51bWVyYWJsZSxzbj15dC5zcGxpY2UsUmk9UHQ/UHQudG9TdHJpbmdUYWc6dm9pZCAwLGhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZnQ9UnQ/UnQuaXNCdWZmZXI6dm9pZCAwLE9yPWZ1bmN0aW9uIFFlKEFuLGFuKXtyZXR1cm4gZnVuY3Rpb24odmkpe3JldHVybiBB''@;'; put 'put ''bihhbih2aSkpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxXdD1ZaChKZSwiRGF0YVZpZXciKSxBdD1ZaChKZSwiTWFwIiksUm49WWgoSmUsIlByb21pc2UiKSxzdD1ZaChKZSwiU2V0IiksVXQ9WWgoSmUsIldlYWtNYXAiKSxyaT1ZaChPYmplY3QsImNyZWF0ZSIpLFdlPU9sKFd0KSxUdD1PbChB''@;'; put 'put ''dCksbnI9T2woUm4pLGh0PU9sKHN0KSx4dD1PbChVdCksam49UHQ/UHQucHJvdG90eXBlOnZvaWQgMCxybj1qbj9qbi52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiB6dChBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kythbjx2aTspe3ZhciBB''@;'; put 'put ''cj1Bblthbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBlbihBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kythbjx2aTspe3ZhciBBcj1Bblthbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBlaShBbil7dmFy''@;'; put 'put ''IGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kythbjx2aTspe3ZhciBBcj1Bblthbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBXaShBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5l''@;'; put 'put ''dyBlaTsrK2FuPHZpOyl0aGlzLmFkZChBblthbl0pfWZ1bmN0aW9uIGxhKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXz1uZXcgZW4oQW4pO3RoaXMuc2l6ZT1hbi5zaXplfWZ1bmN0aW9uIGJsKEFuLGFuKXtmb3IodmFyIHZpPUFuLmxlbmd0aDt2aS0tOylpZih1ZihBblt2aV1bMF0sYW4pKXJl''@;'; put 'put ''dHVybiB2aTtyZXR1cm4tMX1mdW5jdGlvbiBMYyhBbil7cmV0dXJuIG51bGw9PUFuP3ZvaWQgMD09PUFuP1RlOnE6UmkmJlJpIGluIE9iamVjdChBbik/ZnVuY3Rpb24gY2YoQW4pe3ZhciBhbj10dC5jYWxsKEFuLFJpKSx2aT1BbltSaV07dHJ5e0FuW1JpXT12b2lkIDA7dmFyIEFyPSEwfWNh''@;'; put 'put ''dGNoe312YXIgUG89dXQuY2FsbChBbik7cmV0dXJuIEFyJiYoYW4/QW5bUmldPXZpOmRlbGV0ZSBBbltSaV0pLFBvfShBbik6ZnVuY3Rpb24gcjUoQW4pe3JldHVybiB1dC5jYWxsKEFuKX0oQW4pfWZ1bmN0aW9uIEQwKEFuKXtyZXR1cm4gTmEoQW4pJiZMYyhBbik9PVB9ZnVuY3Rpb24gaXIo''@;'; put 'put ''QW4sYW4sdmksQXIsUG8pe3JldHVybiBBbj09PWFufHwobnVsbD09QW58fG51bGw9PWFufHwhTmEoQW4pJiYhTmEoYW4pP0FuIT1BbiYmYW4hPWFuOmZ1bmN0aW9uIHhhKEFuLGFuLHZpLEFyLFBvLGVvKXt2YXIgb2w9ZGYoQW4pLHpvPWRmKGFuKSxWcz1vbD9GOllpKEFuKSxTcz16bz9GOllp''@;'; put 'put ''KGFuKSxqbD0oVnM9VnM9PVA/ZWU6VnMpPT1lZSxIbz0oU3M9U3M9PVA/ZWU6U3MpPT1lZSxrbz1Wcz09U3M7aWYoa28mJmhmKEFuKSl7aWYoIWhmKGFuKSlyZXR1cm4hMTtvbD0hMCxqbD0hMX1pZihrbyYmIWpsKXJldHVybiBlb3x8KGVvPW5ldyBsYSksb2x8fEQzKEFuKT9iMChBbixhbix2''@;'; put 'put ''aSxBcixQbyxlbyk6ZnVuY3Rpb24gSGEoQW4sYW4sdmksQXIsUG8sZW8sb2wpe3N3aXRjaCh2aSl7Y2FzZSBWOmlmKEFuLmJ5dGVMZW5ndGghPWFuLmJ5dGVMZW5ndGh8fEFuLmJ5dGVPZmZzZXQhPWFuLmJ5dGVPZmZzZXQpcmV0dXJuITE7QW49QW4uYnVmZmVyLGFuPWFuLmJ1ZmZlcjtjYXNl''@;'; put 'put ''IGplOnJldHVybiEoQW4uYnl0ZUxlbmd0aCE9YW4uYnl0ZUxlbmd0aHx8IWVvKG5ldyBjaShBbiksbmV3IGNpKGFuKSkpO2Nhc2UgejpjYXNlIE46Y2FzZSBZOnJldHVybiB1ZigrQW4sK2FuKTtjYXNlIEw6cmV0dXJuIEFuLm5hbWU9PWFuLm5hbWUmJkFuLm1lc3NhZ2U9PWFuLm1lc3NhZ2U7''@;'; put 'put ''Y2FzZSBpZTpjYXNlIG1lOnJldHVybiBBbj09YW4rIiI7Y2FzZSBXOnZhciB6bz1udDtjYXNlIGxlOmlmKHpvfHwoem89dW4pLEFuLnNpemUhPWFuLnNpemUmJiEoQXImZykpcmV0dXJuITE7dmFyIFNzPW9sLmdldChBbik7aWYoU3MpcmV0dXJuIFNzPT1hbjtBcnw9QixvbC5zZXQoQW4sYW4p''@;'; put 'put ''O3ZhciBqbD1iMCh6byhBbiksem8oYW4pLEFyLFBvLGVvLG9sKTtyZXR1cm4gb2wuZGVsZXRlKEFuKSxqbDtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYocm4pcmV0dXJuIHJuLmNhbGwoQW4pPT1ybi5jYWxsKGFuKX1yZXR1cm4hMX0oQW4sYW4sVnMsdmksQXIsUG8sZW8pO2lmKCEodmkmZykp''@;'; put 'put ''e3ZhciBTdD1qbCYmdHQuY2FsbChBbiwiX193cmFwcGVkX18iKSxCdD1IbyYmdHQuY2FsbChhbiwiX193cmFwcGVkX18iKTtpZihTdHx8QnQpe3ZhciBfbj1TdD9Bbi52YWx1ZSgpOkFuLG1uPUJ0P2FuLnZhbHVlKCk6YW47cmV0dXJuIGVvfHwoZW89bmV3IGxhKSxQbyhfbixtbix2aSxBcixl''@;'; put 'put ''byl9fXJldHVybiEha28mJihlb3x8KGVvPW5ldyBsYSksZnVuY3Rpb24gTHUoQW4sYW4sdmksQXIsUG8sZW8pe3ZhciBvbD12aSZnLHpvPVByKEFuKSxWcz16by5sZW5ndGg7aWYoVnMhPVByKGFuKS5sZW5ndGgmJiFvbClyZXR1cm4hMTtmb3IodmFyIEhvPVZzO0hvLS07KXt2YXIga289em9b''@;'; put 'put ''SG9dO2lmKCEob2w/a28gaW4gYW46dHQuY2FsbChhbixrbykpKXJldHVybiExfXZhciBTdD1lby5nZXQoQW4pO2lmKFN0JiZlby5nZXQoYW4pKXJldHVybiBTdD09YW47dmFyIEJ0PSEwO2VvLnNldChBbixhbiksZW8uc2V0KGFuLEFuKTtmb3IodmFyIF9uPW9sOysrSG88VnM7KXt2YXIgbW49''@;'; put 'put ''QW5ba289em9bSG9dXSxJbj1hbltrb107aWYoQXIpdmFyIGJuPW9sP0FyKEluLG1uLGtvLGFuLEFuLGVvKTpBcihtbixJbixrbyxBbixhbixlbyk7aWYoISh2b2lkIDA9PT1ibj9tbj09PUlufHxQbyhtbixJbix2aSxBcixlbyk6Ym4pKXtCdD0hMTticmVha31fbnx8KF9uPSJjb25zdHJ1Y3Rv''@;'; put 'put ''ciI9PWtvKX1pZihCdCYmIV9uKXt2YXIgdXI9QW4uY29uc3RydWN0b3IsYmk9YW4uY29uc3RydWN0b3I7dXIhPWJpJiYiY29uc3RydWN0b3IiaW4gQW4mJiJjb25zdHJ1Y3RvciJpbiBhbiYmISgiZnVuY3Rpb24iPT10eXBlb2YgdXImJnVyIGluc3RhbmNlb2YgdXImJiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBiaSYmYmkgaW5zdGFuY2VvZiBiaSkmJihCdD0hMSl9cmV0dXJuIGVvLmRlbGV0ZShBbiksZW8uZGVsZXRlKGFuKSxCdH0oQW4sYW4sdmksQXIsUG8sZW8pKX0oQW4sYW4sdmksQXIsaXIsUG8pKX1mdW5jdGlvbiBiMChBbixhbix2aSxBcixQbyxlbyl7dmFyIG9sPXZpJmcsem89QW4u''@;'; put 'put ''bGVuZ3RoLFZzPWFuLmxlbmd0aDtpZih6byE9VnMmJiEob2wmJlZzPnpvKSlyZXR1cm4hMTt2YXIgU3M9ZW8uZ2V0KEFuKTtpZihTcyYmZW8uZ2V0KGFuKSlyZXR1cm4gU3M9PWFuO3ZhciBqbD0tMSxIbz0hMCxrbz12aSZCP25ldyBXaTp2b2lkIDA7Zm9yKGVvLnNldChBbixhbiksZW8uc2V0''@;'; put 'put ''KGFuLEFuKTsrK2psPHpvOyl7dmFyIFN0PUFuW2psXSxCdD1hbltqbF07aWYoQXIpdmFyIF9uPW9sP0FyKEJ0LFN0LGpsLGFuLEFuLGVvKTpBcihTdCxCdCxqbCxBbixhbixlbyk7aWYodm9pZCAwIT09X24pe2lmKF9uKWNvbnRpbnVlO0hvPSExO2JyZWFrfWlmKGtvKXtpZighSWUoYW4sZnVu''@;'; put 'put ''Y3Rpb24obW4sSW4pe2lmKCFBZShrbyxJbikmJihTdD09PW1ufHxQbyhTdCxtbix2aSxBcixlbykpKXJldHVybiBrby5wdXNoKEluKX0pKXtIbz0hMTticmVha319ZWxzZSBpZihTdCE9PUJ0JiYhUG8oU3QsQnQsdmksQXIsZW8pKXtIbz0hMTticmVha319cmV0dXJuIGVvLmRlbGV0ZShBbiks''@;'; put 'put ''ZW8uZGVsZXRlKGFuKSxIb31mdW5jdGlvbiBQcihBbil7cmV0dXJuIGZ1bmN0aW9uIHB1KEFuLGFuLHZpKXt2YXIgQXI9YW4oQW4pO3JldHVybiBkZihBbik/QXI6ZnVuY3Rpb24gT2UoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9YW4ubGVuZ3RoLFBvPUFuLmxlbmd0aDsrK3ZpPEFyOylBbltQ''@;'; put 'put ''byt2aV09YW5bdmldO3JldHVybiBBbn0oQXIsdmkoQW4pKX0oQW4sJGgsQ3MpfWZ1bmN0aW9uIG9kKEFuLGFuKXt2YXIgdmk9QW4uX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFFjKEFuKXt2YXIgYW49dHlwZW9mIEFuO3JldHVybiJzdHJpbmciPT1hbnx8Im51bWJlciI9PWFufHwic3ltYm9s''@;'; put 'put ''Ij09YW58fCJib29sZWFuIj09YW4/Il9fcHJvdG9fXyIhPT1BbjpudWxsPT09QW59KGFuKT92aVsic3RyaW5nIj09dHlwZW9mIGFuPyJzdHJpbmciOiJoYXNoIl06dmkubWFwfWZ1bmN0aW9uIFloKEFuLGFuKXt2YXIgdmk9ZnVuY3Rpb24gX3QoQW4sYW4pe3JldHVybiBBbj8uW2FuXX0oQW4s''@;'; put 'put ''YW4pO3JldHVybiBmdW5jdGlvbiB1aShBbil7cmV0dXJuISghT2MoQW4pfHxmdW5jdGlvbiBuNShBbil7cmV0dXJuISFIZSYmSGUgaW4gQW59KEFuKSkmJihmZihBbik/cXQ6YWUpLnRlc3QoT2woQW4pKX0odmkpP3ZpOnZvaWQgMH16dC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaGkoKXt0''@;'; put 'put ''aGlzLl9fZGF0YV9fPXJpP3JpKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSx6dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGNuKEFuKXt2YXIgYW49dGhpcy5oYXMoQW4pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tBbl07cmV0dXJuIHRoaXMuc2l6ZS09YW4/MTowLGFufSx6dC5wcm90b3R5cGUu''@;'; put 'put ''Z2V0PWZ1bmN0aW9uIGZuKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXztpZihyaSl7dmFyIHZpPWFuW0FuXTtyZXR1cm4gdmk9PT1fP3ZvaWQgMDp2aX1yZXR1cm4gdHQuY2FsbChhbixBbik/YW5bQW5dOnZvaWQgMH0senQucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBJaShBbil7dmFyIGFuPXRo''@;'; put 'put ''aXMuX19kYXRhX187cmV0dXJuIHJpP3ZvaWQgMCE9PWFuW0FuXTp0dC5jYWxsKGFuLEFuKX0senQucHJvdG90eXBlLnNldD1mdW5jdGlvbiBYdChBbixhbil7dmFyIHZpPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoQW4pPzA6MSx2aVtBbl09cmkmJnZvaWQgMD09''@;'; put 'put ''PWFuP186YW4sdGhpc30sZW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHVhKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sZW4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBFaShBbil7dmFyIGFuPXRoaXMuX19kYXRhX18sdmk9YmwoYW4sQW4pO3JldHVybiEodmk8MHx8KHZp''@;'; put 'put ''PT1hbi5sZW5ndGgtMT9hbi5wb3AoKTpzbi5jYWxsKGFuLHZpLDEpLC0tdGhpcy5zaXplLDApKX0sZW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbiB2cihBbil7dmFyIGFuPXRoaXMuX19kYXRhX18sdmk9YmwoYW4sQW4pO3JldHVybiB2aTwwP3ZvaWQgMDphblt2aV1bMV19LGVuLnByb3RvdHlw''@;'; put 'put ''ZS5oYXM9ZnVuY3Rpb24gV24oQW4pe3JldHVybiBibCh0aGlzLl9fZGF0YV9fLEFuKT4tMX0sZW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiAkaShBbixhbil7dmFyIHZpPXRoaXMuX19kYXRhX18sQXI9YmwodmksQW4pO3JldHVybiBBcjwwPygrK3RoaXMuc2l6ZSx2aS5wdXNoKFtBbixhbl0p''@;'; put 'put ''KTp2aVtBcl1bMV09YW4sdGhpc30sZWkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIFFyKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgenQsbWFwOm5ldyhBdHx8ZW4pLHN0cmluZzpuZXcgenR9fSxlaS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFZpKEFuKXt2YXIg''@;'; put 'put ''YW49b2QodGhpcyxBbikuZGVsZXRlKEFuKTtyZXR1cm4gdGhpcy5zaXplLT1hbj8xOjAsYW59LGVpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gTmkoQW4pe3JldHVybiBvZCh0aGlzLEFuKS5nZXQoQW4pfSxlaS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIERhKEFuKXtyZXR1cm4gb2QodGhpcyxB''@;'; put 'put ''bikuaGFzKEFuKX0sZWkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBMcihBbixhbil7dmFyIHZpPW9kKHRoaXMsQW4pLEFyPXZpLnNpemU7cmV0dXJuIHZpLnNldChBbixhbiksdGhpcy5zaXplKz12aS5zaXplPT1Bcj8wOjEsdGhpc30sV2kucHJvdG90eXBlLmFkZD1XaS5wcm90b3R5cGUucHVz''@;'; put 'put ''aD1mdW5jdGlvbiBwYShBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KEFuLF8pLHRoaXN9LFdpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUW4oQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhBbil9LGxhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB5YSgpe3RoaXMuX19kYXRhX189''@;'; put 'put ''bmV3IGVuLHRoaXMuc2l6ZT0wfSxsYS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIExhKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXyx2aT1hbi5kZWxldGUoQW4pO3JldHVybiB0aGlzLnNpemU9YW4uc2l6ZSx2aX0sbGEucHJvdG90eXBlLmdldD1mdW5jdGlvbiBGYShBbil7cmV0dXJuIHRo''@;'; put 'put ''aXMuX19kYXRhX18uZ2V0KEFuKX0sbGEucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB0aShBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKEFuKX0sbGEucHJvdG90eXBlLnNldD1mdW5jdGlvbiBnbyhBbixhbil7dmFyIHZpPXRoaXMuX19kYXRhX187aWYodmkgaW5zdGFuY2VvZiBlbil7dmFy''@;'; put 'put ''IEFyPXZpLl9fZGF0YV9fO2lmKCFBdHx8QXIubGVuZ3RoPDE5OSlyZXR1cm4gQXIucHVzaChbQW4sYW5dKSx0aGlzLnNpemU9Kyt2aS5zaXplLHRoaXM7dmk9dGhpcy5fX2RhdGFfXz1uZXcgZWkoQXIpfXJldHVybiB2aS5zZXQoQW4sYW4pLHRoaXMuc2l6ZT12aS5zaXplLHRoaXN9O3ZhciBD''@;'; put 'put ''cz1obj9mdW5jdGlvbihBbil7cmV0dXJuIG51bGw9PUFuP1tdOihBbj1PYmplY3QoQW4pLGZ1bmN0aW9uIEZlKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPW51bGw9PUFuPzA6QW4ubGVuZ3RoLFBvPTAsZW89W107Kyt2aTxBcjspe3ZhciBvbD1Bblt2aV07YW4ob2wsdmksQW4pJiYoZW9bUG8r''@;'; put 'put ''K109b2wpfXJldHVybiBlb30oaG4oQW4pLGZ1bmN0aW9uKGFuKXtyZXR1cm4gUXQuY2FsbChBbixhbil9KSl9OmZ1bmN0aW9uIEtoKCl7cmV0dXJuW119LFlpPUxjO2Z1bmN0aW9uIHlsKEFuLGFuKXtyZXR1cm4hIShhbj1hbj8/dykmJigibnVtYmVyIj09dHlwZW9mIEFufHx0ZS50ZXN0KEFu''@;'; put 'put ''KSkmJkFuPi0xJiZBbiUxPT0wJiZBbjxhbn1mdW5jdGlvbiBPbChBbil7aWYobnVsbCE9QW4pe3RyeXtyZXR1cm4gJGUuY2FsbChBbil9Y2F0Y2h7fXRyeXtyZXR1cm4gQW4rIiJ9Y2F0Y2h7fX1yZXR1cm4iIn1mdW5jdGlvbiB1ZihBbixhbil7cmV0dXJuIEFuPT09YW58fEFuIT1BbiYmYW4h''@;'; put 'put ''PWFufShXdCYmWWkobmV3IFd0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1WfHxBdCYmWWkobmV3IEF0KSE9V3x8Um4mJllpKFJuLnJlc29sdmUoKSkhPUp8fHN0JiZZaShuZXcgc3QpIT1sZXx8VXQmJllpKG5ldyBVdCkhPVNlKSYmKFlpPWZ1bmN0aW9uKEFuKXt2YXIgYW49TGMoQW4pLHZpPWFu''@;'; put 'put ''PT1lZT9Bbi5jb25zdHJ1Y3Rvcjp2b2lkIDAsQXI9dmk/T2wodmkpOiIiO2lmKEFyKXN3aXRjaChBcil7Y2FzZSBXZTpyZXR1cm4gVjtjYXNlIFR0OnJldHVybiBXO2Nhc2UgbnI6cmV0dXJuIEo7Y2FzZSBodDpyZXR1cm4gbGU7Y2FzZSB4dDpyZXR1cm4gU2V9cmV0dXJuIGFufSk7dmFyIHNk''@;'; put 'put ''PUQwKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/RDA6ZnVuY3Rpb24oQW4pe3JldHVybiBOYShBbikmJnR0LmNhbGwoQW4sImNhbGxlZSIpJiYhUXQuY2FsbChBbiwiY2FsbGVlIil9LGRmPUFycmF5LmlzQXJyYXksaGY9ZnR8fGZ1bmN0aW9uIHFoKCl7cmV0dXJuITF9O2Z1bmN0''@;'; put 'put ''aW9uIGZmKEFuKXtpZighT2MoQW4pKXJldHVybiExO3ZhciBhbj1MYyhBbik7cmV0dXJuIGFuPT1LfHxhbj09VXx8YW49PU98fGFuPT1uZX1mdW5jdGlvbiBHaChBbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBBbiYmQW4+LTEmJkFuJTE9PTAmJkFuPD13fWZ1bmN0aW9uIE9jKEFuKXt2YXIg''@;'; put 'put ''YW49dHlwZW9mIEFuO3JldHVybiBudWxsIT1BbiYmKCJvYmplY3QiPT1hbnx8ImZ1bmN0aW9uIj09YW4pfWZ1bmN0aW9uIE5hKEFuKXtyZXR1cm4gbnVsbCE9QW4mJiJvYmplY3QiPT10eXBlb2YgQW59dmFyIEQzPURlP2Z1bmN0aW9uIGtlKEFuKXtyZXR1cm4gZnVuY3Rpb24oYW4pe3JldHVy''@;'; put 'put ''biBBbihhbil9fShEZSk6ZnVuY3Rpb24gVnQoQW4pe3JldHVybiBOYShBbikmJkdoKEFuLmxlbmd0aCkmJiEhc2VbTGMoQW4pXX07ZnVuY3Rpb24gJGgoQW4pe3JldHVybiBmdW5jdGlvbiBrMShBbil7cmV0dXJuIG51bGwhPUFuJiZHaChBbi5sZW5ndGgpJiYhZmYoQW4pfShBbik/ZnVuY3Rp''@;'; put 'put ''b24gTnMoQW4sYW4pe3ZhciB2aT1kZihBbiksQXI9IXZpJiZzZChBbiksUG89IXZpJiYhQXImJmhmKEFuKSxlbz0hdmkmJiFBciYmIVBvJiZEMyhBbiksb2w9dml8fEFyfHxQb3x8ZW8sem89b2w/ZnVuY3Rpb24gVmUoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9QXJyYXkoQW4pOysrdmk8QW47''@;'; put 'put ''KUFyW3ZpXT1hbih2aSk7cmV0dXJuIEFyfShBbi5sZW5ndGgsU3RyaW5nKTpbXSxWcz16by5sZW5ndGg7Zm9yKHZhciBTcyBpbiBBbikoYW58fHR0LmNhbGwoQW4sU3MpKSYmKCFvbHx8ISgibGVuZ3RoIj09U3N8fFBvJiYoIm9mZnNldCI9PVNzfHwicGFyZW50Ij09U3MpfHxlbyYmKCJidWZm''@;'; put 'put ''ZXIiPT1Tc3x8ImJ5dGVMZW5ndGgiPT1Tc3x8ImJ5dGVPZmZzZXQiPT1Tcyl8fHlsKFNzLFZzKSkpJiZ6by5wdXNoKFNzKTtyZXR1cm4gem99KEFuKTpmdW5jdGlvbiBKcihBbil7aWYoIWZ1bmN0aW9uIHkwKEFuKXt2YXIgYW49QW4mJkFuLmNvbnN0cnVjdG9yO3JldHVybiBBbj09PSgiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYW4mJmFuLnByb3RvdHlwZXx8RHQpfShBbikpcmV0dXJuIE9yKEFuKTt2YXIgYW49W107Zm9yKHZhciB2aSBpbiBPYmplY3QoQW4pKXR0LmNhbGwoQW4sdmkpJiYiY29uc3RydWN0b3IiIT12aSYmYW4ucHVzaCh2aSk7cmV0dXJuIGFufShBbil9dWUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBlaChBbixhbil7cmV0dXJuIGlyKEFuLGFuKX19LDg0MjM6KHVlLFgseSk9Pnt2YXIgTz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHo9Im9iamVjdCI9PXR5cGVvZiB5LmcmJnkuZyYmeS5nLk9iamVjdD09PU9iamVjdCYm''@;'; put 'put ''eS5nfHxPfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLE49T2JqZWN0LnByb3RvdHlwZSxMPU4uaGFzT3duUHJvcGVydHksSz1OLnRvU3RyaW5nLFU9ei5TeW1ib2wsVz1VP1UudG9TdHJpbmdUYWc6dm9pZCAwO3VlLmV4cG9ydHM9ZnVuY3Rpb24gSihpZSl7aWYoIWZ1bmN0aW9uIG5lKGll''@;'; put 'put ''KXt2YXIgbGU9dHlwZW9mIGllO3JldHVybiBudWxsIT1pZSYmKCJvYmplY3QiPT1sZXx8ImZ1bmN0aW9uIj09bGUpfShpZSkpcmV0dXJuITE7dmFyIGxlPWZ1bmN0aW9uIFkoaWUpe3JldHVybiBudWxsPT1pZT92b2lkIDA9PT1pZT8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxs''@;'; put 'put ''XSI6VyYmVyBpbiBPYmplY3QoaWUpP2Z1bmN0aW9uIHEoaWUpe3ZhciBsZT1MLmNhbGwoaWUsVyksbWU9aWVbV107dHJ5e2llW1ddPXZvaWQgMDt2YXIgX2U9ITB9Y2F0Y2h7fXZhciBUZT1LLmNhbGwoaWUpO3JldHVybiBfZSYmKGxlP2llW1ddPW1lOmRlbGV0ZSBpZVtXXSksVGV9KGllKTpm''@;'; put 'put ''dW5jdGlvbiBlZShpZSl7cmV0dXJuIEsuY2FsbChpZSl9KGllKX0oaWUpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWxlfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sZXx8IltvYmplY3QgUHJveHldIj09bGV9fSw5NzIy''@;'; put 'put ''OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbiBYKHkpe3JldHVybiBudWxsPT15fX0sOTczODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGguYWJzfSw2MzI5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5mbG9vcn0sMzY3ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5l''@;'; put 'put ''eHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oeSl7cmV0dXJuIHkhPXl9fSwyMjY0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5tYXh9LDU3MzA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLm1pbn0sNzA3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9y''@;'; put 'put ''dHM9TWF0aC5wb3d9LDM4NjI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLnJvdW5kfSw5NTUwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzY3OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4gSShnKXx8MD09PWc/ZzpnPDA/LTE6MX19LDIzMTg6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NzE3KSxfPXkoMzM0OSksZz15KDk1MDkpLkJ1ZmZlcixCPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gdygpe18uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0''@;'; put 'put ''aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBQKEwsSyl7cmV0dXJuIEw8PEt8TD4+PjMyLUt9ZnVuY3Rpb24gRihMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoSyZVfH5LJlcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24gTyhMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoSyZXfFUmflcp''@;'; put 'put ''K1krcXwwLGVlKStLfDB9ZnVuY3Rpb24geihMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoS15VXlcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24gTihMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoVV4oS3x+VykpK1krcXwwLGVlKStLfDB9SSh3LF8pLHcucHJvdG90eXBlLl91cGRhdGU9''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIEw9QixLPTA7SzwxNjsrK0spTFtLXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkspO3ZhciBVPXRoaXMuX2EsVz10aGlzLl9iLFk9dGhpcy5fYyxxPXRoaXMuX2Q7VT1GKFUsVyxZLHEsTFswXSwzNjE0MDkwMzYwLDcpLHE9RihxLFUsVyxZLExbMV0sMzkw''@;'; put 'put ''NTQwMjcxMCwxMiksWT1GKFkscSxVLFcsTFsyXSw2MDYxMDU4MTksMTcpLFc9RihXLFkscSxVLExbM10sMzI1MDQ0MTk2NiwyMiksVT1GKFUsVyxZLHEsTFs0XSw0MTE4NTQ4Mzk5LDcpLHE9RihxLFUsVyxZLExbNV0sMTIwMDA4MDQyNiwxMiksWT1GKFkscSxVLFcsTFs2XSwyODIxNzM1OTU1''@;'; put 'put ''LDE3KSxXPUYoVyxZLHEsVSxMWzddLDQyNDkyNjEzMTMsMjIpLFU9RihVLFcsWSxxLExbOF0sMTc3MDAzNTQxNiw3KSxxPUYocSxVLFcsWSxMWzldLDIzMzY1NTI4NzksMTIpLFk9RihZLHEsVSxXLExbMTBdLDQyOTQ5MjUyMzMsMTcpLFc9RihXLFkscSxVLExbMTFdLDIzMDQ1NjMxMzQsMjIp''@;'; put 'put ''LFU9RihVLFcsWSxxLExbMTJdLDE4MDQ2MDM2ODIsNykscT1GKHEsVSxXLFksTFsxM10sNDI1NDYyNjE5NSwxMiksWT1GKFkscSxVLFcsTFsxNF0sMjc5Mjk2NTAwNiwxNyksVT1PKFUsVz1GKFcsWSxxLFUsTFsxNV0sMTIzNjUzNTMyOSwyMiksWSxxLExbMV0sNDEyOTE3MDc4Niw1KSxxPU8o''@;'; put 'put ''cSxVLFcsWSxMWzZdLDMyMjU0NjU2NjQsOSksWT1PKFkscSxVLFcsTFsxMV0sNjQzNzE3NzEzLDE0KSxXPU8oVyxZLHEsVSxMWzBdLDM5MjEwNjk5OTQsMjApLFU9TyhVLFcsWSxxLExbNV0sMzU5MzQwODYwNSw1KSxxPU8ocSxVLFcsWSxMWzEwXSwzODAxNjA4Myw5KSxZPU8oWSxxLFUsVyxM''@;'; put 'put ''WzE1XSwzNjM0NDg4OTYxLDE0KSxXPU8oVyxZLHEsVSxMWzRdLDM4ODk0Mjk0NDgsMjApLFU9TyhVLFcsWSxxLExbOV0sNTY4NDQ2NDM4LDUpLHE9TyhxLFUsVyxZLExbMTRdLDMyNzUxNjM2MDYsOSksWT1PKFkscSxVLFcsTFszXSw0MTA3NjAzMzM1LDE0KSxXPU8oVyxZLHEsVSxMWzhdLDEx''@;'; put 'put ''NjM1MzE1MDEsMjApLFU9TyhVLFcsWSxxLExbMTNdLDI4NTAyODU4MjksNSkscT1PKHEsVSxXLFksTFsyXSw0MjQzNTYzNTEyLDkpLFk9TyhZLHEsVSxXLExbN10sMTczNTMyODQ3MywxNCksVT16KFUsVz1PKFcsWSxxLFUsTFsxMl0sMjM2ODM1OTU2MiwyMCksWSxxLExbNV0sNDI5NDU4ODcz''@;'; put 'put ''OCw0KSxxPXoocSxVLFcsWSxMWzhdLDIyNzIzOTI4MzMsMTEpLFk9eihZLHEsVSxXLExbMTFdLDE4MzkwMzA1NjIsMTYpLFc9eihXLFkscSxVLExbMTRdLDQyNTk2NTc3NDAsMjMpLFU9eihVLFcsWSxxLExbMV0sMjc2Mzk3NTIzNiw0KSxxPXoocSxVLFcsWSxMWzRdLDEyNzI4OTMzNTMsMTEp''@;'; put 'put ''LFk9eihZLHEsVSxXLExbN10sNDEzOTQ2OTY2NCwxNiksVz16KFcsWSxxLFUsTFsxMF0sMzIwMDIzNjY1NiwyMyksVT16KFUsVyxZLHEsTFsxM10sNjgxMjc5MTc0LDQpLHE9eihxLFUsVyxZLExbMF0sMzkzNjQzMDA3NCwxMSksWT16KFkscSxVLFcsTFszXSwzNTcyNDQ1MzE3LDE2KSxXPXoo''@;'; put 'put ''VyxZLHEsVSxMWzZdLDc2MDI5MTg5LDIzKSxVPXooVSxXLFkscSxMWzldLDM2NTQ2MDI4MDksNCkscT16KHEsVSxXLFksTFsxMl0sMzg3MzE1MTQ2MSwxMSksWT16KFkscSxVLFcsTFsxNV0sNTMwNzQyNTIwLDE2KSxVPU4oVSxXPXooVyxZLHEsVSxMWzJdLDMyOTk2Mjg2NDUsMjMpLFkscSxM''@;'; put 'put ''WzBdLDQwOTYzMzY0NTIsNikscT1OKHEsVSxXLFksTFs3XSwxMTI2ODkxNDE1LDEwKSxZPU4oWSxxLFUsVyxMWzE0XSwyODc4NjEyMzkxLDE1KSxXPU4oVyxZLHEsVSxMWzVdLDQyMzc1MzMyNDEsMjEpLFU9TihVLFcsWSxxLExbMTJdLDE3MDA0ODU1NzEsNikscT1OKHEsVSxXLFksTFszXSwy''@;'; put 'put ''Mzk5OTgwNjkwLDEwKSxZPU4oWSxxLFUsVyxMWzEwXSw0MjkzOTE1NzczLDE1KSxXPU4oVyxZLHEsVSxMWzFdLDIyNDAwNDQ0OTcsMjEpLFU9TihVLFcsWSxxLExbOF0sMTg3MzMxMzM1OSw2KSxxPU4ocSxVLFcsWSxMWzE1XSw0MjY0MzU1NTUyLDEwKSxZPU4oWSxxLFUsVyxMWzZdLDI3MzQ3''@;'; put 'put ''Njg5MTYsMTUpLFc9TihXLFkscSxVLExbMTNdLDEzMDkxNTE2NDksMjEpLFU9TihVLFcsWSxxLExbNF0sNDE0OTQ0NDIyNiw2KSxxPU4ocSxVLFcsWSxMWzExXSwzMTc0NzU2OTE3LDEwKSxZPU4oWSxxLFUsVyxMWzJdLDcxODc4NzI1OSwxNSksVz1OKFcsWSxxLFUsTFs5XSwzOTUxNDgxNzQ1''@;'; put 'put ''LDIxKSx0aGlzLl9hPXRoaXMuX2ErVXwwLHRoaXMuX2I9dGhpcy5fYitXfDAsdGhpcy5fYz10aGlzLl9jK1l8MCx0aGlzLl9kPXRoaXMuX2QrcXwwfSx3LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2Nr''@;'; put 'put ''T2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVu''@;'; put 'put ''Z3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksTC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxMLndyaXRlSW50''@;'; put 'put ''MzJMRSh0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEx9LHVlLmV4cG9ydHM9d30sMzA0NzoodWUsWCx5KT0+e3ZhciBJPXkoNjI0MCksXz15KDk5MzEpO2Z1bmN0aW9uIGcoQil7dGhpcy5yYW5kPUJ8fG5ldyBfLlJhbmR9dWUuZXhwb3J0cz1nLGcuY3JlYXRlPWZ1bmN0''@;'; put 'put ''aW9uKHcpe3JldHVybiBuZXcgZyh3KX0sZy5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbih3KXt2YXIgUD13LmJpdExlbmd0aCgpLEY9TWF0aC5jZWlsKFAvOCk7ZG97dmFyIE89bmV3IEkodGhpcy5yYW5kLmdlbmVyYXRlKEYpKX13aGlsZShPLmNtcCh3KT49MCk7cmV0dXJuIE99LGcu''@;'; put 'put ''cHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24odyxQKXt2YXIgRj1QLnN1Yih3KTtyZXR1cm4gdy5hZGQodGhpcy5fcmFuZGJlbG93KEYpKX0sZy5wcm90b3R5cGUudGVzdD1mdW5jdGlvbih3LFAsRil7dmFyIE89dy5iaXRMZW5ndGgoKSx6PUkubW9udCh3KSxOPW5ldyBJKDEpLnRvUmVk''@;'; put 'put ''KHopO1B8fChQPU1hdGgubWF4KDEsTy80OHwwKSk7Zm9yKHZhciBMPXcuc3VibigxKSxLPTA7IUwudGVzdG4oSyk7SysrKTtmb3IodmFyIFU9dy5zaHJuKEspLFc9TC50b1JlZCh6KTtQPjA7UC0tKXt2YXIgcT10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTCk7RiYmRihxKTt2YXIgZWU9cS50''@;'; put 'put ''b1JlZCh6KS5yZWRQb3coVSk7aWYoMCE9PWVlLmNtcChOKSYmMCE9PWVlLmNtcChXKSl7Zm9yKHZhciBKPTE7SjxLO0orKyl7aWYoMD09PShlZT1lZS5yZWRTcXIoKSkuY21wKE4pKXJldHVybiExO2lmKDA9PT1lZS5jbXAoVykpYnJlYWt9aWYoSj09PUspcmV0dXJuITF9fXJldHVybiEwfSxn''@;'; put 'put ''LnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHcsUCl7dmFyIEY9dy5iaXRMZW5ndGgoKSxPPUkubW9udCh3KSx6PW5ldyBJKDEpLnRvUmVkKE8pO1B8fChQPU1hdGgubWF4KDEsRi80OHwwKSk7Zm9yKHZhciBOPXcuc3VibigxKSxMPTA7IU4udGVzdG4oTCk7TCsrKTtmb3IodmFyIEs9''@;'; put 'put ''dy5zaHJuKEwpLFU9Ti50b1JlZChPKTtQPjA7UC0tKXt2YXIgVz10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTiksWT13LmdjZChXKTtpZigwIT09WS5jbXBuKDEpKXJldHVybiBZO3ZhciBxPVcudG9SZWQoTykucmVkUG93KEspO2lmKDAhPT1xLmNtcCh6KSYmMCE9PXEuY21wKFUpKXtmb3Io''@;'; put 'put ''dmFyIGVlPTE7ZWU8TDtlZSsrKXtpZigwPT09KHE9cS5yZWRTcXIoKSkuY21wKHopKXJldHVybiBxLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KTtpZigwPT09cS5jbXAoVSkpYnJlYWt9aWYoZWU9PT1MKXJldHVybihxPXEucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0''@;'; put 'put ''dXJuITF9fSw2MjQwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307''@;'; put 'put ''Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51''@;'; put 'put ''bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwi''@;'; put 'put ''dSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBP''@;'; put 'put ''KFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00''@;'; put 'put ''OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcu''@;'; put 'put ''bWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihw''@;'; put 'put ''LGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhw''@;'; put 'put ''PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0w''@;'; put 'put ''O0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+''@;'; put 'put ''Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2''@;'; put 'put ''LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRz''@;'; put 'put ''W0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1q''@;'; put 'put ''KSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUq''@;'; put 'put ''PWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRo''@;'; put 'put ''aXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHko''@;'; put 'put ''cCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''aW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAs''@;'; put 'put ''MjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcx''@;'; put 'put ''NzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYy''@;'; put 'put ''OTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBd''@;'; put 'put ''LFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7''@;'; put 'put ''c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJp''@;'; put 'put ''bmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShh''@;'; put 'put ''ZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdl''@;'; put 'put ''ZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2Mjcz''@;'; put 'put ''NzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0''@;'; put 'put ''cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcu''@;'; put 'put ''cHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIp''@;'; put 'put ''LHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsr''@;'; put 'put ''KWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIg''@;'; put 'put ''Yj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRz''@;'; put 'put ''KHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVy''@;'; put 'put ''b0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2''@;'; put 'put ''ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''LmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjti''@;'; put 'put ''PXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9''@;'; put 'put ''cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHAp''@;'; put 'put ''OnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMu''@;'; put 'put ''d29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAv''@;'; put 'put ''MjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAu''@;'; put 'put ''bmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1i''@;'; put 'put ''Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4''@;'; put 'put ''IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3Vi''@;'; put 'put ''KHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhp''@;'; put 'put ''cy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9y''@;'; put 'put ''KHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3''@;'; put 'put ''MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8''@;'; put 'put ''Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0s''@;'; put 'put ''bnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgx''@;'; put 'put ''OTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5y''@;'; put 'put ''LHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhF''@;'; put 'put ''PU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7''@;'; put 'put ''dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChE''@;'; put 'put ''ZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRo''@;'; put 'put ''LmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQp''@;'; put 'put ''LG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChE''@;'; put 'put ''ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdl''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdl''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7''@;'; put 'put ''dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChN''@;'; put 'put ''dCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkr''@;'; put 'put ''TWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2Us''@;'; put 'put ''enQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkr''@;'; put 'put ''TWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRo''@;'; put 'put ''LmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGgu''@;'; put 'put ''aW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12''@;'; put 'put ''cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsr''@;'; put 'put ''KSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0''@;'; put 'put ''dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxD''@;'; put 'put ''PTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9Njcx''@;'; put 'put ''MDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlz''@;'; put 'put ''LHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUu''@;'; put 'put ''cmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtq''@;'; put 'put ''KyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1h''@;'; put 'put ''dGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09''@;'; put 'put ''VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxD''@;'; put 'put ''PTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0Nd''@;'; put 'put ''LGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2''@;'; put 'put ''MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2Zv''@;'; put 'put ''cihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIg''@;'; put 'put ''Qz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyks''@;'; put 'put ''c2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIg''@;'; put 'put ''d2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNl''@;'; put 'put ''LEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBl''@;'; put 'put ''LmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRo''@;'; put 'put ''aXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''bXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90''@;'; put 'put ''eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0''@;'; put 'put ''aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndv''@;'; put 'put ''cmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2Zv''@;'; put 'put ''cihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtm''@;'; put 'put ''b3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29y''@;'; put 'put ''ZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVu''@;'; put 'put ''Z3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8''@;'; put 'put ''PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0''@;'; put 'put ''aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8x''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMu''@;'; put 'put ''d29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndv''@;'; put 'put ''cmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9''@;'; put 'put ''PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9''@;'; put 'put ''Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTsw''@;'; put 'put ''PT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4''@;'; put 'put ''NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJk''@;'; put 'put ''aXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1w''@;'; put 'put ''Lm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCks''@;'; put 'put ''eCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51''@;'; put 'put ''bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1v''@;'; put 'put ''ZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4o''@;'; put 'put ''MSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9''@;'; put 'put ''dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4''@;'; put 'put ''XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZl''@;'; put 'put ''KSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJu''@;'; put 'put ''KDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgp''@;'; put 'put ''fHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlz''@;'; put 'put ''T2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcu''@;'; put 'put ''cHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUo''@;'; put 'put ''KTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29y''@;'; put 'put ''ZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21w''@;'; put 'put ''bigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdh''@;'; put 'put ''dGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtp''@;'; put 'put ''ZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZl''@;'; put 'put ''bj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5j''@;'; put 'put ''bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0''@;'; put 'put ''aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhp''@;'; put 'put ''cy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+''@;'; put 'put ''MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQm''@;'; put 'put ''JihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNt''@;'; put 'put ''cChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24g''@;'; put 'put ''Y29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0''@;'; put 'put ''aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5h''@;'; put 'put ''ZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''LmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSku''@;'; put 'put ''aXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlv''@;'; put 'put ''biBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3Zh''@;'; put 'put ''ciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5i''@;'; put 'put ''aXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJu''@;'; put 'put ''IHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13''@;'; put 'put ''aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5s''@;'; put 'put ''ZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0''@;'; put 'put ''aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhd''@;'; put 'put ''PTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVu''@;'; put 'put ''Z3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53''@;'; put 'put ''b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxz''@;'; put 'put ''ZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rp''@;'; put 'put ''b24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJy''@;'; put 'put ''ZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhp''@;'; put 'put ''cy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4''@;'; put 'put ''LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hs''@;'; put 'put ''bihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAu''@;'; put 'put ''Y2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7''@;'; put 'put ''KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyht''@;'; put 'put ''LEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdl''@;'; put 'put ''LnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAu''@;'; put 'put ''X2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigw''@;'; put 'put ''PT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0''@;'; put 'put ''aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8''@;'; put 'put ''MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZl''@;'; put 'put ''cnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhp''@;'; put 'put ''cy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlz''@;'; put 'put ''Lm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2''@;'; put 'put ''YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4o''@;'; put 'put ''MCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDk3NDY6''@;'; put 'put ''dWU9PntmdW5jdGlvbiBYKHksSSl7aWYoIXkpdGhyb3cgbmV3IEVycm9yKEl8fCJBc3NlcnRpb24gZmFpbGVkIil9dWUuZXhwb3J0cz1YLFguZXF1YWw9ZnVuY3Rpb24oSSxfLGcpe2lmKEkhPV8pdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0krIiAhPSAiK18pfX0s''@;'; put 'put ''NDUwNDoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIHk9WDtmdW5jdGlvbiBfKEIpe3JldHVybiAxPT09Qi5sZW5ndGg/IjAiK0I6Qn1mdW5jdGlvbiBnKEIpe2Zvcih2YXIgdz0iIixQPTA7UDxCLmxlbmd0aDtQKyspdys9XyhCW1BdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9eS50b0FycmF5''@;'; put 'put ''PWZ1bmN0aW9uIEkoQix3KXtpZihBcnJheS5pc0FycmF5KEIpKXJldHVybiBCLnNsaWNlKCk7aWYoIUIpcmV0dXJuW107dmFyIFA9W107aWYoInN0cmluZyIhPXR5cGVvZiBCKXtmb3IodmFyIEY9MDtGPEIubGVuZ3RoO0YrKylQW0ZdPTB8QltGXTtyZXR1cm4gUH1pZigiaGV4Ij09PXcpZm9y''@;'; put 'put ''KChCPUIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoQj0iMCIrQiksRj0wO0Y8Qi5sZW5ndGg7Ris9MilQLnB1c2gocGFyc2VJbnQoQltGXStCW0YrMV0sMTYpKTtlbHNlIGZvcihGPTA7RjxCLmxlbmd0aDtGKyspe3ZhciBPPUIuY2hhckNvZGVBdChGKSx6PU8+''@;'; put 'put ''PjgsTj0yNTUmTzt6P1AucHVzaCh6LE4pOlAucHVzaChOKX1yZXR1cm4gUH0seS56ZXJvMj1fLHkudG9IZXg9Zyx5LmVuY29kZT1mdW5jdGlvbih3LFApe3JldHVybiJoZXgiPT09UD9nKHcpOnd9fSw0MjQ0OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPWZ1bmN0aW9uKHkpe3JldHVybiB5IT15''@;'; put 'put ''fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEksXyl7cmV0dXJuIDA9PT1JJiYwPT09Xz8xL0k9PTEvXzohIShJPT09X3x8WChJKSYmWChfKSl9fSw2MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0Mjg5KSxfPXkoNTU1OSksZz15KDQyNDQpLEI9eSg1NjI0KSx3PXkoMjI4MSksUD1f''@;'; put 'put ''KEIoKSxPYmplY3QpO0koUCx7Z2V0UG9seWZpbGw6QixpbXBsZW1lbnRhdGlvbjpnLHNoaW06d30pLHVlLmV4cG9ydHM9UH0sNTYyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyNDQpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2Jq''@;'; put 'put ''ZWN0LmlzP09iamVjdC5pczpJfX0sMjI4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU2MjQpLF89eSg0Mjg5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEI9SSgpO3JldHVybiBfKE9iamVjdCx7aXM6Qn0se2lzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pcyE9PUJ9''@;'; put 'put ''fSksQn19LDg5ODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk7aWYoIU9iamVjdC5rZXlzKXt2YXIgXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxCPXkoMTQxNCksdz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNF''@;'; put 'put ''bnVtZXJhYmxlLFA9IXcuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5nIiksRj13LmNhbGwoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxPPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0''@;'; put 'put ''eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sej1mdW5jdGlvbihVKXt2YXIgVz1VLmNvbnN0cnVjdG9yO3JldHVybiBXJiZXLnByb3RvdHlwZT09PVV9LE49eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDoh''@;'; put 'put ''MCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50''@;'; put 'put ''OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0sTD1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2Zv''@;'; put 'put ''cih2YXIgVSBpbiB3aW5kb3cpdHJ5e2lmKCFOWyIkIitVXSYmXy5jYWxsKHdpbmRvdyxVKSYmbnVsbCE9PXdpbmRvd1tVXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbVV0pdHJ5e3ood2luZG93W1VdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7ST1mdW5j''@;'; put 'put ''dGlvbihXKXt2YXIgWT1udWxsIT09VyYmIm9iamVjdCI9PXR5cGVvZiBXLHE9IltvYmplY3QgRnVuY3Rpb25dIj09PWcuY2FsbChXKSxlZT1CKFcpLEo9WSYmIltvYmplY3QgU3RyaW5nXSI9PT1nLmNhbGwoVyksbmU9W107aWYoIVkmJiFxJiYhZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2Jq''@;'; put 'put ''ZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBpZT1GJiZxO2lmKEomJlcubGVuZ3RoPjAmJiFfLmNhbGwoVywwKSlmb3IodmFyIGxlPTA7bGU8Vy5sZW5ndGg7KytsZSluZS5wdXNoKFN0cmluZyhsZSkpO2lmKGVlJiZXLmxlbmd0aD4wKWZvcih2YXIgbWU9MDttZTxXLmxl''@;'; put 'put ''bmd0aDsrK21lKW5lLnB1c2goU3RyaW5nKG1lKSk7ZWxzZSBmb3IodmFyIF9lIGluIFcpKCFpZXx8InByb3RvdHlwZSIhPT1fZSkmJl8uY2FsbChXLF9lKSYmbmUucHVzaChTdHJpbmcoX2UpKTtpZihQKWZvcih2YXIgVGU9ZnVuY3Rpb24oVSl7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCFMKXJl''@;'; put 'put ''dHVybiB6KFUpO3RyeXtyZXR1cm4geihVKX1jYXRjaHtyZXR1cm4hMX19KFcpLFNlPTA7U2U8Ty5sZW5ndGg7KytTZSkoIVRlfHwiY29uc3RydWN0b3IiIT09T1tTZV0pJiZfLmNhbGwoVyxPW1NlXSkmJm5lLnB1c2goT1tTZV0pO3JldHVybiBuZX19dWUuZXhwb3J0cz1JfSwyMjE1Oih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPUFycmF5LnByb3RvdHlwZS5zbGljZSxfPXkoMTQxNCksZz1PYmplY3Qua2V5cyxCPWc/ZnVuY3Rpb24oRil7cmV0dXJuIGcoRil9OnkoODk4Nyksdz1PYmplY3Qua2V5cztCLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIEY9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgTz1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVybiBPJiZPLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7Rnx8KE9iamVjdC5rZXlzPWZ1bmN0aW9uKHope3JldHVybiBfKHopP3coSS5jYWxsKHopKTp3KHopfSl9ZWxzZSBPYmplY3Qua2V5cz1CO3JldHVy''@;'; put 'put ''biBPYmplY3Qua2V5c3x8Qn0sdWUuZXhwb3J0cz1CfSwxNDE0OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlvbihJKXt2YXIgXz1YLmNhbGwoSSksZz0iW29iamVjdCBBcmd1bWVudHNdIj09PV87cmV0dXJuIGd8fChn''@;'; put 'put ''PSJbb2JqZWN0IEFycmF5XSIhPT1fJiZudWxsIT09SSYmIm9iamVjdCI9PXR5cGVvZiBJJiYibnVtYmVyIj09dHlwZW9mIEkubGVuZ3RoJiZJLmxlbmd0aD49MCYmIltvYmplY3QgRnVuY3Rpb25dIj09PVguY2FsbChJLmNhbGxlZSkpLGd9fSwyODM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoMjIxNSksXz15KDU0MTkpKCksZz15KDczNzkpLEI9eSg4ODkyKSx3PWcoIkFycmF5LnByb3RvdHlwZS5wdXNoIiksUD1nKCJPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlIiksRj1fP0IuZ2V0T3duUHJvcGVydHlTeW1ib2xzOm51bGw7dWUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbih6LE4pe2lmKG51bGw9PXopdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dmFyIEw9Qih6KTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTDtmb3IodmFyIEs9MTtLPGFyZ3VtZW50cy5sZW5ndGg7KytLKXt2YXIgVT1CKGFyZ3Vt''@;'; put 'put ''ZW50c1tLXSksVz1JKFUpLFk9XyYmKEIuZ2V0T3duUHJvcGVydHlTeW1ib2xzfHxGKTtpZihZKWZvcih2YXIgcT1ZKFUpLGVlPTA7ZWU8cS5sZW5ndGg7KytlZSl7dmFyIEo9cVtlZV07UChVLEopJiZ3KFcsSil9Zm9yKHZhciBuZT0wO25lPFcubGVuZ3RoOysrbmUpe3ZhciBpZT1XW25lXTtQ''@;'; put 'put ''KFUsaWUpJiYoTFtpZV09VVtpZV0pfX1yZXR1cm4gTH19LDgxNjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM3KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7Zm9yKHZh''@;'; put 'put ''ciBCPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCIsdz1CLnNwbGl0KCIiKSxQPXt9LEY9MDtGPHcubGVuZ3RoOysrRilQW3dbRl1dPXdbRl07dmFyIE89T2JqZWN0LmFzc2lnbih7fSxQKSx6PSIiO2Zvcih2YXIgTiBpbiBPKXorPU47cmV0dXJuIEIhPT16fSgpfHxmdW5jdGlvbigpe2lmKCFPYmpl''@;'; put 'put ''Y3QuYXNzaWdufHwhT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKXJldHVybiExO3ZhciBCPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7MToyfSk7dHJ5e09iamVjdC5hc3NpZ24oQiwieHkiKX1jYXRjaHtyZXR1cm4ieSI9PT1CWzFdfXJldHVybiExfSgpP0k6T2JqZWN0LmFzc2lnbn19LDc0''@;'; put 'put ''MzU6KHVlLFgpPT57WC5lbmRpYW5uZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIkxFIn0sWC5ob3N0bmFtZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbG9jYXRpb248InUiP2xvY2F0aW9uLmhvc3RuYW1lOiIifSxYLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWC51cHRpbWU9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gMH0sWC5mcmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LFgudG90YWxtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sWC5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LFgudHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93''@;'; put 'put ''c2VyIn0sWC5yZWxlYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxYLm5ldHdvcmtJbnRlcmZhY2VzPVguZ2V0TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sWC5hcmNoPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuImphdmFzY3JpcHQifSxYLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxYLnRtcGRpcj1YLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0sWC5FT0w9IlxuIixYLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSwyODE4Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoOTgwOSk7WC5jZXJ0aWZpY2F0ZT15KDE5MzQpO3ZhciBfPUkuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVi''@;'; put 'put ''bGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMu''@;'; put 'put ''a2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO1guUlNBUHJpdmF0ZUtleT1fO3ZhciBnPUkuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtY''@;'; put 'put ''LlJTQVB1YmxpY0tleT1nO3ZhciBCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9i''@;'; put 'put ''amlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigp''@;'; put 'put ''e3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtYLlB1YmxpY0tleT13O3ZhciBQPUkuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7WC5Qcml2YXRlS2V5PVA7dmFyIEY9SS5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2Vx''@;'; put 'put ''KCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNl''@;'; put 'put ''cSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRl''@;'; put 'put ''S2V5Iikub2N0c3RyKCkpfSk7WC5FbmNyeXB0ZWRQcml2YXRlS2V5PUY7dmFyIE89SS5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCks''@;'; put 'put ''dGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO1guRFNBUHJpdmF0ZUtleT1PLFguRFNBcGFyYW09SS5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgej1JLmRlZmluZSgi''@;'; put 'put ''RUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksTj1JLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXki''@;'; put 'put ''KS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKHopLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO1guRUNQcml2YXRlS2V5PU4sWC5zaWduYXR1cmU9SS5kZWZpbmUoInNpZ25h''@;'; put 'put ''dHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDE5MzQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5ODA5KSxfPUkuZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNU''@;'; put 'put ''aW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxnPUkuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLEI9SS5k''@;'; put 'put ''ZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSx3PUkuZGVm''@;'; put 'put ''aW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksUD1JLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLnNldG9mKGcpfSksRj1JLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihQKX0pLE89SS5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKEYpfSl9KSx6PUkuZGVmaW5lKCJWYWxpZGl0''@;'; put 'put ''eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKF8pLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShfKSl9KSxOPUkuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCks''@;'; put 'put ''dGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLEw9SS5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0''@;'; put 'put ''aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShCKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKE8pLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZSh6KSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShPKSx0aGlzLmtleSgic3ViamVj''@;'; put 'put ''dFB1YmxpY0tleUluZm8iKS51c2UodyksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIp''@;'; put 'put ''LmV4cGxpY2l0KDMpLnNlcW9mKE4pLm9wdGlvbmFsKCkpfSksSz1JLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShMKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKEIpLHRo''@;'; put 'put ''aXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO3VlLmV4cG9ydHM9S30sNzYzMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05''@;'; put 'put ''QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxfPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxnPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0t''@;'; put 'put ''LS0tJC9tLEI9eSgzMDQ4KSx3PXkoNDY5NiksUD15KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIEwsej1GLnRvU3RyaW5nKCksTj16Lm1hdGNoKEkpO2lmKE4pe3ZhciBVPSJhZXMiK05bMV0sVz1QLmZyb20oTlsyXSwiaGV4IiksWT1QLmZyb20oTlszXS5yZXBs''@;'; put 'put ''YWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLHE9QihPLFcuc2xpY2UoMCw4KSxwYXJzZUludChOWzFdLDEwKSkua2V5LGVlPVtdLEo9dy5jcmVhdGVEZWNpcGhlcml2KFUscSxXKTtlZS5wdXNoKEoudXBkYXRlKFkpKSxlZS5wdXNoKEouZmluYWwoKSksTD1QLmNvbmNhdChlZSl9ZWxzZXt2''@;'; put 'put ''YXIgSz16Lm1hdGNoKGcpO0w9UC5mcm9tKEtbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOnoubWF0Y2goXylbMV0sZGF0YTpMfX19LDk4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MTgpLF89eSgyNTYyKSxnPXkoNzYzMSksQj15KDQ2''@;'; put 'put ''OTYpLHc9eSg1NjMyKSxQPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIE8oeil7dmFyIE47Im9iamVjdCI9PXR5cGVvZiB6JiYhUC5pc0J1ZmZlcih6KSYmKE49ei5wYXNzcGhyYXNlLHo9ei5rZXkpLCJzdHJpbmciPT10eXBlb2YgeiYmKHo9UC5mcm9tKHopKTt2YXIgVyxZLEw9Zyh6LE4pLEs9''@;'; put 'put ''TC50YWcsVT1MLmRhdGE7c3dpdGNoKEspe2Nhc2UiQ0VSVElGSUNBVEUiOlk9SS5jZXJ0aWZpY2F0ZS5kZWNvZGUoVSwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goWXx8KFk9SS5QdWJsaWNLZXkuZGVjb2RlKFUsImRl''@;'; put 'put ''ciIpKSxXPVkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoWS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBZLnN1Ympl''@;'; put 'put ''Y3RQcml2YXRlS2V5PVkuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6WX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToi''@;'; put 'put ''ZHNhIixkYXRhOlkuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOlU9ZnVuY3Rpb24gRih6LE4pe3ZhciBMPXouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0''@;'; put 'put ''LEs9cGFyc2VJbnQoei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLFU9X1t6LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sVz16LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixZPXouc3ViamVjdFByaXZhdGVL''@;'; put 'put ''ZXkscT1wYXJzZUludChVLnNwbGl0KCItIilbMV0sMTApLzgsZWU9dy5wYmtkZjJTeW5jKE4sTCxLLHEsInNoYTEiKSxKPUIuY3JlYXRlRGVjaXBoZXJpdihVLGVlLFcpLG5lPVtdO3JldHVybiBuZS5wdXNoKEoudXBkYXRlKFkpKSxuZS5wdXNoKEouZmluYWwoKSksUC5jb25jYXQobmUpfShV''@;'; put 'put ''PUkuRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIiksTik7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFc9KFk9SS5Qcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVy''@;'; put 'put ''biBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpZLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5OkkuRUNQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIi''@;'; put 'put ''KS5wcml2YXRlS2V5fTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gWS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiUlNBIFBVQkxJQyBLRVkiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiRFNB''@;'; put 'put ''IFBSSVZBVEUgS0VZIjpyZXR1cm57dHlwZToiZHNhIixwYXJhbXM6SS5EU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJue2N1cnZlOihVPUkuRUNQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRl''@;'; put 'put ''S2V5OlUucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IHR5cGUgIitLKX19Ty5zaWduYXR1cmU9SS5zaWduYXR1cmUsdWUuZXhwb3J0cz1PfSwxNzI1OnVlPT57dWUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlv''@;'; put 'put ''bih5LEkpe3kuc3VwZXJfPUkseS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmZ1bmN0aW9uKHksSSl7eS5zdXBlcl89STt2YXIgXz1mdW5jdGlvbigp''@;'; put 'put ''e307Xy5wcm90b3R5cGU9SS5wcm90b3R5cGUseS5wcm90b3R5cGU9bmV3IF8seS5wcm90b3R5cGUuY29uc3RydWN0b3I9eX19LDI5NzQ6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybiB5JiYib2JqZWN0Ij09dHlwZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmNvcHkmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiB5LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LnJlYWRVSW50OH19LDgwNTk6KHVlLFgseSk9Pnt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPS8lW3NkaiVdL2c7WC5mb3JtYXQ9ZnVuY3Rpb24oRSl7aWYoIWxlKEUpKXtmb3IodmFyIG09W10sQT0wO0E8YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDtBKyspbS5wdXNoKFAoYXJndW1lbnRzW0FdKSk7cmV0dXJuIG0uam9pbigiICIpfUE9MTtmb3IodmFyIGFlPWFyZ3VtZW50cyx0ZT1hZS5sZW5ndGgsc2U9U3RyaW5nKEUpLnJlcGxhY2UoZyxmdW5jdGlvbihVZSl7aWYoIiUlIj09PVVlKXJldHVybiIlIjtpZihBPj10''@;'; put 'put ''ZSlyZXR1cm4gVWU7c3dpdGNoKFVlKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKGFlW0ErK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoYWVbQSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShhZVtBKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpy''@;'; put 'put ''ZXR1cm4gVWV9fSksd2U9YWVbQV07QTx0ZTt3ZT1hZVsrK0FdKUood2UpfHwhU2Uod2UpP3NlKz0iICIrd2U6c2UrPSIgIitQKHdlKTtyZXR1cm4gc2V9LFguZGVwcmVjYXRlPWZ1bmN0aW9uKEUsbSl7aWYoX2UoeS5nLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBYLmRlcHJl''@;'; put 'put ''Y2F0ZShFLG0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1JLm5vRGVwcmVjYXRpb24pcmV0dXJuIEU7dmFyIEE9ITE7cmV0dXJuIGZ1bmN0aW9uIGFlKCl7aWYoIUEpe2lmKEkudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IobSk7SS50cmFjZURlcHJlY2F0aW9uP18u''@;'; put 'put ''dHJhY2UobSk6Xy5lcnJvcihtKSxBPSEwfXJldHVybiBFLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciB3LEI9e307ZnVuY3Rpb24gUChFLG0pe3ZhciBBPXtzZWVuOltdLHN0eWxpemU6T307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihBLmRlcHRoPWFyZ3VtZW50c1syXSksYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD49NCYmKEEuY29sb3JzPWFyZ3VtZW50c1szXSksZWUobSk/QS5zaG93SGlkZGVuPW06bSYmWC5fZXh0ZW5kKEEsbSksX2UoQS5zaG93SGlkZGVuKSYmKEEuc2hvd0hpZGRlbj0hMSksX2UoQS5kZXB0aCkmJihBLmRlcHRoPTIpLF9lKEEuY29sb3JzKSYmKEEuY29sb3Jz''@;'; put 'put ''PSExKSxfZShBLmN1c3RvbUluc3BlY3QpJiYoQS5jdXN0b21JbnNwZWN0PSEwKSxBLmNvbG9ycyYmKEEuc3R5bGl6ZT1GKSxOKEEsRSxBLmRlcHRoKX1mdW5jdGlvbiBGKEUsbSl7dmFyIEE9UC5zdHlsZXNbbV07cmV0dXJuIEE/Ilx4MWJbIitQLmNvbG9yc1tBXVswXSsibSIrRSsiXHgxYlsi''@;'; put 'put ''K1AuY29sb3JzW0FdWzFdKyJtIjpFfWZ1bmN0aW9uIE8oRSxtKXtyZXR1cm4gRX1mdW5jdGlvbiBOKEUsbSxBKXtpZihFLmN1c3RvbUluc3BlY3QmJm0mJnAobS5pbnNwZWN0KSYmbS5pbnNwZWN0IT09WC5pbnNwZWN0JiYoIW0uY29uc3RydWN0b3J8fG0uY29uc3RydWN0b3IucHJvdG90eXBl''@;'; put 'put ''IT09bSkpe3ZhciBhZT1tLmluc3BlY3QoQSxFKTtyZXR1cm4gbGUoYWUpfHwoYWU9TihFLGFlLEEpKSxhZX12YXIgdGU9ZnVuY3Rpb24gTChFLG0pe2lmKF9lKG0pKXJldHVybiBFLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGxlKG0pKXt2YXIgQT0iJyIrSlNPTi5zdHJp''@;'; put 'put ''bmdpZnkobSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gRS5zdHlsaXplKEEsInN0cmluZyIpfXJldHVybiBpZShtKT9FLnN0eWxpemUoIiIrbSwibnVtYmVyIik6ZWUobSk/RS5zdHlsaXplKCIiK20sImJv''@;'; put 'put ''b2xlYW4iKTpKKG0pP0Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KEUsbSk7aWYodGUpcmV0dXJuIHRlO3ZhciBzZT1PYmplY3Qua2V5cyhtKSx3ZT1mdW5jdGlvbiB6KEUpe3ZhciBtPXt9O3JldHVybiBFLmZvckVhY2goZnVuY3Rpb24oQSxhZSl7bVtBXT0hMH0pLG19KHNlKTtp''@;'; put 'put ''ZihFLnNob3dIaWRkZW4mJihzZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtKSksVihtKSYmKHNlLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8c2UuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIEsobSk7aWYoMD09PXNlLmxlbmd0aCl7aWYocChtKSlyZXR1cm4gRS5zdHls''@;'; put 'put ''aXplKCJbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKFRlKG0pKXJldHVybiBFLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJyZWdleHAiKTtpZihqZShtKSlyZXR1cm4gRS5zdHlsaXplKERhdGUucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLmNhbGwobSksImRhdGUiKTtpZihWKG0pKXJldHVybiBLKG0pfXZhciBYZSxKZT0iIixvdD0hMSx4ZT1bInsiLCJ9Il07cmV0dXJuIHEobSkmJihvdD0hMCx4ZT1bIlsiLCJdIl0pLHAobSkmJihKZT0iIFtGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iKSxU''@;'; put 'put ''ZShtKSYmKEplPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSkpLGplKG0pJiYoSmU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwobSkpLFYobSkmJihKZT0iICIrSyhtKSksMCE9PXNlLmxlbmd0aHx8b3QmJjAhPW0ubGVuZ3RoP0E8MD9UZShtKT9FLnN0''@;'; put 'put ''eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJyZWdleHAiKTpFLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihFLnNlZW4ucHVzaChtKSxYZT1vdD9mdW5jdGlvbiBVKEUsbSxBLGFlLHRlKXtmb3IodmFyIHNlPVtdLHdlPTAsVWU9bS5sZW5ndGg7d2U8VWU7''@;'; put 'put ''Kyt3ZSlqKG0sU3RyaW5nKHdlKSk/c2UucHVzaChXKEUsbSxBLGFlLFN0cmluZyh3ZSksITApKTpzZS5wdXNoKCIiKTtyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbihKZSl7SmUubWF0Y2goL15cZCskLyl8fHNlLnB1c2goVyhFLG0sQSxhZSxKZSwhMCkpfSksc2V9KEUsbSxBLHdlLHNlKTpz''@;'; put 'put ''ZS5tYXAoZnVuY3Rpb24oemUpe3JldHVybiBXKEUsbSxBLHdlLHplLG90KX0pLEUuc2Vlbi5wb3AoKSxmdW5jdGlvbiBZKEUsbSxBKXt2YXIgdGU9RS5yZWR1Y2UoZnVuY3Rpb24oc2Usd2Upe3JldHVybiB3ZS5pbmRleE9mKCJcbiIpLHNlK3dlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2cs''@;'; put 'put ''IiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gdGU+NjA/QVswXSsoIiI9PT1tPyIiOm0rIlxuICIpKyIgIitFLmpvaW4oIixcbiAgIikrIiAiK0FbMV06QVswXSttKyIgIitFLmpvaW4oIiwgIikrIiAiK0FbMV19KFhlLEplLHhlKSk6eGVbMF0rSmUreGVbMV19ZnVuY3Rpb24gSyhFKXtyZXR1cm4i''@;'; put 'put ''WyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSkrIl0ifWZ1bmN0aW9uIFcoRSxtLEEsYWUsdGUsc2Upe3ZhciB3ZSxVZSxKZTtpZigoSmU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLHRlKXx8e3ZhbHVlOm1bdGVdfSkuZ2V0P1VlPUUuc3R5bGl6ZShKZS5zZXQ/''@;'; put 'put ''IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOkplLnNldCYmKFVlPUUuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLGooYWUsdGUpfHwod2U9IlsiK3RlKyJdIiksVWV8fChFLnNlZW4uaW5kZXhPZihKZS52YWx1ZSk8MD8oVWU9SihBKT9OKEUsSmUudmFsdWUs''@;'; put 'put ''bnVsbCk6TihFLEplLnZhbHVlLEEtMSkpLmluZGV4T2YoIlxuIik+LTEmJihVZT1zZT9VZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiIgICIrb3R9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK1VlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihvdCl7cmV0dXJuIiAg''@;'; put 'put ''ICIrb3R9KS5qb2luKCJcbiIpKTpVZT1FLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLF9lKHdlKSl7aWYoc2UmJnRlLm1hdGNoKC9eXGQrJC8pKXJldHVybiBVZTsod2U9SlNPTi5zdHJpbmdpZnkoIiIrdGUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8p''@;'; put 'put ''Pyh3ZT13ZS5zdWJzdHIoMSx3ZS5sZW5ndGgtMiksd2U9RS5zdHlsaXplKHdlLCJuYW1lIikpOih3ZT13ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksd2U9RS5zdHlsaXplKHdlLCJzdHJpbmciKSl9cmV0dXJuIHdlKyI6''@;'; put 'put ''ICIrVWV9ZnVuY3Rpb24gcShFKXtyZXR1cm4gQXJyYXkuaXNBcnJheShFKX1mdW5jdGlvbiBlZShFKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBFfWZ1bmN0aW9uIEooRSl7cmV0dXJuIG51bGw9PT1FfWZ1bmN0aW9uIGllKEUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgRX1mdW5jdGlvbiBs''@;'; put 'put ''ZShFKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEV9ZnVuY3Rpb24gX2UoRSl7cmV0dXJuIHZvaWQgMD09PUV9ZnVuY3Rpb24gVGUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBSZWdFeHBdIj09PXgoRSl9ZnVuY3Rpb24gU2UoRSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBFJiZudWxsIT09''@;'; put 'put ''RX1mdW5jdGlvbiBqZShFKXtyZXR1cm4gU2UoRSkmJiJbb2JqZWN0IERhdGVdIj09PXgoRSl9ZnVuY3Rpb24gVihFKXtyZXR1cm4gU2UoRSkmJigiW29iamVjdCBFcnJvcl0iPT09eChFKXx8RSBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBwKEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBFfWZ1bmN0aW9uIHgoRSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChFKX1mdW5jdGlvbiBDKEUpe3JldHVybiBFPDEwPyIwIitFLnRvU3RyaW5nKDEwKTpFLnRvU3RyaW5nKDEwKX1YLmRlYnVnbG9nPWZ1bmN0aW9uKEUpe2lmKF9lKHcpJiYodz1JLmVudi5OT0RF''@;'; put 'put ''X0RFQlVHfHwiIiksRT1FLnRvVXBwZXJDYXNlKCksIUJbRV0paWYobmV3IFJlZ0V4cCgiXFxiIitFKyJcXGIiLCJpIikudGVzdCh3KSl7dmFyIG09SS5waWQ7QltFXT1mdW5jdGlvbigpe3ZhciBBPVguZm9ybWF0LmFwcGx5KFgsYXJndW1lbnRzKTtfLmVycm9yKCIlcyAlZDogJXMiLEUsbSxB''@;'; put 'put ''KX19ZWxzZSBCW0VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gQltFXX0sWC5pbnNwZWN0PVAsUC5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6''@;'; put 'put ''WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LFAuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQi''@;'; put 'put ''LHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sWC5pc0FycmF5PXEsWC5pc0Jvb2xlYW49ZWUsWC5pc051bGw9SixYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIG5lKEUpe3JldHVybiBudWxsPT1FfSxYLmlzTnVtYmVyPWllLFguaXNTdHJpbmc9bGUsWC5p''@;'; put 'put ''c1N5bWJvbD1mdW5jdGlvbiBtZShFKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEV9LFguaXNVbmRlZmluZWQ9X2UsWC5pc1JlZ0V4cD1UZSxYLmlzT2JqZWN0PVNlLFguaXNEYXRlPWplLFguaXNFcnJvcj1WLFguaXNGdW5jdGlvbj1wLFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gYihFKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09PUV8fCJib29sZWFuIj09dHlwZW9mIEV8fCJudW1iZXIiPT10eXBlb2YgRXx8InN0cmluZyI9PXR5cGVvZiBFfHwic3ltYm9sIj09dHlwZW9mIEV8fHR5cGVvZiBFPiJ1In0sWC5pc0J1ZmZlcj15KDI5NzQpO3ZhciBUPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5Iiwi''@;'; put 'put ''SnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gaihFLG0pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxtKX1YLmxvZz1mdW5jdGlvbigpe18ubG9nKCIlcyAtICVzIixmdW5jdGlvbiBIKCl7dmFyIEU9bmV3IERh''@;'; put 'put ''dGUsbT1bQyhFLmdldEhvdXJzKCkpLEMoRS5nZXRNaW51dGVzKCkpLEMoRS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW0UuZ2V0RGF0ZSgpLFRbRS5nZXRNb250aCgpXSxtXS5qb2luKCIgIil9KCksWC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpKX0sWC5pbmhlcml0cz15KDE3''@;'; put 'put ''MjUpLFguX2V4dGVuZD1mdW5jdGlvbihFLG0pe2lmKCFtfHwhU2UobSkpcmV0dXJuIEU7Zm9yKHZhciBBPU9iamVjdC5rZXlzKG0pLGFlPUEubGVuZ3RoO2FlLS07KUVbQVthZV1dPW1bQVthZV1dO3JldHVybiBFfX0sMjUyMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUp''@;'; put 'put ''LF89IndpbjMyIj09PUkucGxhdGZvcm0sZz15KDgwNTkpO2Z1bmN0aW9uIEIoWSxxKXtmb3IodmFyIGVlPVtdLEo9MDtKPFkubGVuZ3RoO0orKyl7dmFyIG5lPVlbSl07IW5lfHwiLiI9PT1uZXx8KCIuLiI9PT1uZT9lZS5sZW5ndGgmJiIuLiIhPT1lZVtlZS5sZW5ndGgtMV0/ZWUucG9wKCk6''@;'; put 'put ''cSYmZWUucHVzaCgiLi4iKTplZS5wdXNoKG5lKSl9cmV0dXJuIGVlfWZ1bmN0aW9uIHcoWSl7Zm9yKHZhciBxPVkubGVuZ3RoLTEsZWU9MDtlZTw9cSYmIVlbZWVdO2VlKyspO2Zvcih2YXIgSj1xO0o+PTAmJiFZW0pdO0otLSk7cmV0dXJuIDA9PT1lZSYmSj09PXE/WTplZT5KP1tdOlkuc2xp''@;'; put 'put ''Y2UoZWUsSisxKX12YXIgUD0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxGPS9eKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9cXF0qfCkpKD86W1xcXC9dKikkLyxPPXt9O2Z1bmN0aW9u''@;'; put 'put ''IHooWSl7dmFyIHE9UC5leGVjKFkpLGVlPShxWzFdfHwiIikrKHFbMl18fCIiKSxuZT1GLmV4ZWMocVszXXx8IiIpO3JldHVybltlZSxuZVsxXSxuZVsyXSxuZVszXV19ZnVuY3Rpb24gTihZKXt2YXIgcT1QLmV4ZWMoWSksZWU9cVsxXXx8IiIsSj0hIWVlJiYiOiIhPT1lZVsxXTtyZXR1cm57''@;'; put 'put ''ZGV2aWNlOmVlLGlzVW5jOkosaXNBYnNvbHV0ZTpKfHwhIXFbMl0sdGFpbDpxWzNdfX1mdW5jdGlvbiBMKFkpe3JldHVybiJcXFxcIitZLnJlcGxhY2UoL15bXFxcL10rLywiIikucmVwbGFjZSgvW1xcXC9dKy9nLCJcXCIpfU8ucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWT0iIixxPSIi''@;'; put 'put ''LGVlPSExLEo9YXJndW1lbnRzLmxlbmd0aC0xO0o+PS0xO0otLSl7dmFyIG5lO2lmKEo+PTA/bmU9YXJndW1lbnRzW0pdOlk/KCEobmU9SS5lbnZbIj0iK1ldKXx8bmUuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKSE9PVkudG9Mb3dlckNhc2UoKSsiXFwiKSYmKG5lPVkrIlxcIik6bmU9SS5j''@;'; put 'put ''d2QoKSwhZy5pc1N0cmluZyhuZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZihuZSl7dmFyIGllPU4obmUpLGxlPWllLmRldmljZSxtZT1pZS5pc1VuYyxfZT1pZS5pc0Fic29sdXRlLFRlPWllLnRhaWw7aWYoKCFs''@;'; put 'put ''ZXx8IVl8fGxlLnRvTG93ZXJDYXNlKCk9PT1ZLnRvTG93ZXJDYXNlKCkpJiYoWXx8KFk9bGUpLGVlfHwocT1UZSsiXFwiK3EsZWU9X2UpLFkmJmVlKSlicmVha319cmV0dXJuIG1lJiYoWT1MKFkpKSxZKyhlZT8iXFwiOiIiKSsocT1CKHEuc3BsaXQoL1tcXFwvXSsvKSwhZWUpLmpvaW4oIlxc''@;'; put 'put ''IikpfHwiLiJ9LE8ubm9ybWFsaXplPWZ1bmN0aW9uKFkpe3ZhciBxPU4oWSksZWU9cS5kZXZpY2UsSj1xLmlzVW5jLG5lPXEuaXNBYnNvbHV0ZSxpZT1xLnRhaWwsbGU9L1tcXFwvXSQvLnRlc3QoaWUpO3JldHVybiEoaWU9QihpZS5zcGxpdCgvW1xcXC9dKy8pLCFuZSkuam9pbigiXFwiKSkm''@;'; put 'put ''JiFuZSYmKGllPSIuIiksaWUmJmxlJiYoaWUrPSJcXCIpLEomJihlZT1MKGVlKSksZWUrKG5lPyJcXCI6IiIpK2llfSxPLmlzQWJzb2x1dGU9ZnVuY3Rpb24oWSl7cmV0dXJuIE4oWSkuaXNBYnNvbHV0ZX0sTy5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPVtdLHE9MDtxPGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg7cSsrKXt2YXIgZWU9YXJndW1lbnRzW3FdO2lmKCFnLmlzU3RyaW5nKGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiZZLnB1c2goZWUpfXZhciBKPVkuam9pbigiXFwiKTtyZXR1cm4vXltcXFwvXXsyfVte''@;'; put 'put ''XFxcL10vLnRlc3QoWVswXSl8fChKPUoucmVwbGFjZSgvXltcXFwvXXsyLH0vLCJcXCIpKSxPLm5vcm1hbGl6ZShKKX0sTy5yZWxhdGl2ZT1mdW5jdGlvbihZLHEpe1k9Ty5yZXNvbHZlKFkpLHE9Ty5yZXNvbHZlKHEpO2Zvcih2YXIgZWU9WS50b0xvd2VyQ2FzZSgpLEo9cS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLG5lPXcocS5zcGxpdCgiXFwiKSksaWU9dyhlZS5zcGxpdCgiXFwiKSksbGU9dyhKLnNwbGl0KCJcXCIpKSxtZT1NYXRoLm1pbihpZS5sZW5ndGgsbGUubGVuZ3RoKSxfZT1tZSxUZT0wO1RlPG1lO1RlKyspaWYoaWVbVGVdIT09bGVbVGVdKXtfZT1UZTticmVha31pZigwPT1fZSlyZXR1''@;'; put 'put ''cm4gcTt2YXIgU2U9W107Zm9yKFRlPV9lO1RlPGllLmxlbmd0aDtUZSsrKVNlLnB1c2goIi4uIik7cmV0dXJuKFNlPVNlLmNvbmNhdChuZS5zbGljZShfZSkpKS5qb2luKCJcXCIpfSxPLl9tYWtlTG9uZz1mdW5jdGlvbihZKXtpZighZy5pc1N0cmluZyhZKSlyZXR1cm4gWTtpZighWSlyZXR1''@;'; put 'put ''cm4iIjt2YXIgcT1PLnJlc29sdmUoWSk7cmV0dXJuL15bYS16QS1aXVw6XFwvLnRlc3QocSk/IlxcXFw/XFwiK3E6L15cXFxcW14/Ll0vLnRlc3QocSk/IlxcXFw/XFxVTkNcXCIrcS5zdWJzdHJpbmcoMik6WX0sTy5kaXJuYW1lPWZ1bmN0aW9uKFkpe3ZhciBxPXooWSksZWU9cVswXSxKPXFb''@;'; put 'put ''MV07cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEpKSxlZStKKToiLiJ9LE8uYmFzZW5hbWU9ZnVuY3Rpb24oWSxxKXt2YXIgZWU9eihZKVsyXTtyZXR1cm4gcSYmZWUuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtcS5s''@;'; put 'put ''ZW5ndGgpKSxlZX0sTy5leHRuYW1lPWZ1bmN0aW9uKFkpe3JldHVybiB6KFkpWzNdfSxPLmZvcm1hdD1mdW5jdGlvbihZKXtpZighZy5pc09iamVjdChZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2Yg''@;'; put 'put ''WSk7aWYoIWcuaXNTdHJpbmcoWS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBZLnJvb3QpO3ZhciBlZT1ZLmRpcixKPVkuYmFzZXx8IiI7cmV0dXJuIGVlP2VlW2VlLmxl''@;'; put 'put ''bmd0aC0xXT09PU8uc2VwP2VlK0o6ZWUrTy5zZXArSjpKfSxPLnBhcnNlPWZ1bmN0aW9uKFkpe2lmKCFnLmlzU3RyaW5nKFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFkpO3ZhciBxPXooWSk7aWYo''@;'; put 'put ''IXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrWSsiJyIpO3JldHVybntyb290OnFbMF0sZGlyOnFbMF0rcVsxXS5zbGljZSgwLC0xKSxiYXNlOnFbMl0sZXh0OnFbM10sbmFtZTpxWzJdLnNsaWNlKDAscVsyXS5sZW5ndGgtcVszXS5sZW5ndGgp''@;'; put 'put ''fX0sTy5zZXA9IlxcIixPLmRlbGltaXRlcj0iOyI7dmFyIEs9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLFU9e307ZnVuY3Rpb24gVyhZKXtyZXR1cm4gSy5leGVjKFkpLnNsaWNlKDEpfVUucmVzb2x2ZT1mdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgWT0iIixxPSExLGVlPWFyZ3VtZW50cy5sZW5ndGgtMTtlZT49LTEmJiFxO2VlLS0pe3ZhciBKPWVlPj0wP2FyZ3VtZW50c1tlZV06SS5jd2QoKTtpZighZy5pc1N0cmluZyhKKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUg''@;'; put 'put ''c3RyaW5ncyIpO0omJihZPUorIi8iK1kscT0iLyI9PT1KWzBdKX1yZXR1cm4ocT8iLyI6IiIpKyhZPUIoWS5zcGxpdCgiLyIpLCFxKS5qb2luKCIvIikpfHwiLiJ9LFUubm9ybWFsaXplPWZ1bmN0aW9uKFkpe3ZhciBxPVUuaXNBYnNvbHV0ZShZKSxlZT1ZJiYiLyI9PT1ZW1kubGVuZ3RoLTFd''@;'; put 'put ''O3JldHVybiEoWT1CKFkuc3BsaXQoIi8iKSwhcSkuam9pbigiLyIpKSYmIXEmJihZPSIuIiksWSYmZWUmJihZKz0iLyIpLChxPyIvIjoiIikrWX0sVS5pc0Fic29sdXRlPWZ1bmN0aW9uKFkpe3JldHVybiIvIj09PVkuY2hhckF0KDApfSxVLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIs''@;'; put 'put ''cT0wO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBlZT1hcmd1bWVudHNbcV07aWYoIWcuaXNTdHJpbmcoZWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7ZWUmJihZKz1ZPyIvIitlZTplZSl9cmV0dXJuIFUubm9ybWFs''@;'; put 'put ''aXplKFkpfSxVLnJlbGF0aXZlPWZ1bmN0aW9uKFkscSl7WT1VLnJlc29sdmUoWSkuc3Vic3RyKDEpLHE9VS5yZXNvbHZlKHEpLnN1YnN0cigxKTtmb3IodmFyIGVlPXcoWS5zcGxpdCgiLyIpKSxKPXcocS5zcGxpdCgiLyIpKSxuZT1NYXRoLm1pbihlZS5sZW5ndGgsSi5sZW5ndGgpLGllPW5l''@;'; put 'put ''LGxlPTA7bGU8bmU7bGUrKylpZihlZVtsZV0hPT1KW2xlXSl7aWU9bGU7YnJlYWt9dmFyIG1lPVtdO2ZvcihsZT1pZTtsZTxlZS5sZW5ndGg7bGUrKyltZS5wdXNoKCIuLiIpO3JldHVybihtZT1tZS5jb25jYXQoSi5zbGljZShpZSkpKS5qb2luKCIvIil9LFUuX21ha2VMb25nPWZ1bmN0aW9u''@;'; put 'put ''KFkpe3JldHVybiBZfSxVLmRpcm5hbWU9ZnVuY3Rpb24oWSl7dmFyIHE9VyhZKSxlZT1xWzBdLEo9cVsxXTtyZXR1cm4gZWV8fEo/KEomJihKPUouc3Vic3RyKDAsSi5sZW5ndGgtMSkpLGVlK0opOiIuIn0sVS5iYXNlbmFtZT1mdW5jdGlvbihZLHEpe3ZhciBlZT1XKFkpWzJdO3JldHVybiBx''@;'; put 'put ''JiZlZS5zdWJzdHIoLTEqcS5sZW5ndGgpPT09cSYmKGVlPWVlLnN1YnN0cigwLGVlLmxlbmd0aC1xLmxlbmd0aCkpLGVlfSxVLmV4dG5hbWU9ZnVuY3Rpb24oWSl7cmV0dXJuIFcoWSlbM119LFUuZm9ybWF0PWZ1bmN0aW9uKFkpe2lmKCFnLmlzT2JqZWN0KFkpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBZKTtpZighZy5pc1N0cmluZyhZLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIr''@;'; put 'put ''dHlwZW9mIFkucm9vdCk7cmV0dXJuKFkuZGlyP1kuZGlyK1Uuc2VwOiIiKSsoWS5iYXNlfHwiIil9LFUucGFyc2U9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0''@;'; put 'put ''eXBlb2YgWSk7dmFyIHE9VyhZKTtpZighcXx8NCE9PXEubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitZKyInIik7cmV0dXJuIHFbMV09cVsxXXx8IiIscVsyXT1xWzJdfHwiIixxWzNdPXFbM118fCIiLHtyb290OnFbMF0sZGlyOnFbMF0rcVsxXS5zbGljZSgw''@;'; put 'put ''LC0xKSxiYXNlOnFbMl0sZXh0OnFbM10sbmFtZTpxWzJdLnNsaWNlKDAscVsyXS5sZW5ndGgtcVszXS5sZW5ndGgpfX0sVS5zZXA9Ii8iLFUuZGVsaW1pdGVyPSI6Iix1ZS5leHBvcnRzPV8/TzpVLHVlLmV4cG9ydHMucG9zaXg9VSx1ZS5leHBvcnRzLndpbjMyPU99LDU2MzI6KHVlLFgseSk9''@;'; put 'put ''PntYLnBia2RmMj15KDg2MzgpLFgucGJrZGYyU3luYz15KDEyNTcpfSw4NjM4Oih1ZSxYLHkpPT57dmFyIFAsTCxJPXkoOTUwOSkuQnVmZmVyLF89eSg3MzU3KSxnPXkoMjM2OCksQj15KDEyNTcpLHc9eSg3Nzc3KSxGPXkuZy5jcnlwdG8mJnkuZy5jcnlwdG8uc3VidGxlLE89e3NoYToiU0hB''@;'; put 'put ''LTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LHo9W107ZnVuY3Rpb24gSygpe3Jl''@;'; put 'put ''dHVybiBMfHwoTD15LmcucHJvY2VzcyYmeS5nLnByb2Nlc3MubmV4dFRpY2s/eS5nLnByb2Nlc3MubmV4dFRpY2s6eS5nLnF1ZXVlTWljcm90YXNrP3kuZy5xdWV1ZU1pY3JvdGFzazp5Lmcuc2V0SW1tZWRpYXRlP3kuZy5zZXRJbW1lZGlhdGU6eS5nLnNldFRpbWVvdXQpfWZ1bmN0aW9uIFUo''@;'; put 'put ''WSxxLGVlLEosbmUpe3JldHVybiBGLmltcG9ydEtleSgicmF3IixZLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEYuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnEsaXRlcmF0aW9uczplZSxoYXNoOntuYW1lOm5lfX0s''@;'; put 'put ''aWUsSjw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gSS5mcm9tKGllKX0pfXVlLmV4cG9ydHM9ZnVuY3Rpb24oWSxxLGVlLEosbmUsaWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBuZSYmKGllPW5lLG5lPXZvaWQgMCk7dmFyIGxlPU9bKG5lPW5lfHwic2hhMSIpLnRvTG93ZXJDYXNlKCld''@;'; put 'put ''O2lmKGxlJiYiZnVuY3Rpb24iPT10eXBlb2YgeS5nLlByb21pc2Upe2lmKF8oZWUsSiksWT13KFksZywiUGFzc3dvcmQiKSxxPXcocSxnLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIGllKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0''@;'; put 'put ''aW9uIFcoWSxxKXtZLnRoZW4oZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe3EobnVsbCxlZSl9KX0sZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe3EoZWUpfSl9KX0oZnVuY3Rpb24gTihZKXtpZih5LmcucHJvY2VzcyYmIXkuZy5wcm9jZXNzLmJyb3dzZXJ8fCFGfHwhRi5pbXBvcnRL''@;'; put 'put ''ZXl8fCFGLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09eltZXSlyZXR1cm4geltZXTt2YXIgcT1VKFA9UHx8SS5hbGxvYyg4KSxQLDEwLDEyOCxZKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7''@;'; put 'put ''cmV0dXJuIHpbWV09cSxxfShsZSkudGhlbihmdW5jdGlvbihtZSl7cmV0dXJuIG1lP1UoWSxxLGVlLEosbGUpOkIoWSxxLGVlLEosbmUpfSksaWUpfWVsc2UgSygpKGZ1bmN0aW9uKCl7dmFyIG1lO3RyeXttZT1CKFkscSxlZSxKLG5lKX1jYXRjaChfZSl7cmV0dXJuIGllKF9lKX1pZShudWxs''@;'; put 'put ''LG1lKX0pfX0sMjM2ODoodWUsWCx5KT0+e3ZhciBfLEk9eSg0MTU1KTtfPXkuZy5wcm9jZXNzJiZ5LmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6eS5nLnByb2Nlc3MmJnkuZy5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQoSS52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02''@;'; put 'put ''PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04Iix1ZS5leHBvcnRzPV99LDczNTc6dWU9Pnt2YXIgWD1NYXRoLnBvdygyLDMwKS0xO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtpZigibnVtYmVyIiE9dHlwZW9mIHkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIi''@;'; put 'put ''KTtpZih5PDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihJPDB8fEk+WHx8SSE9SSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxl''@;'; put 'put ''bmd0aCIpfX0sMTI1NzoodWUsWCx5KT0+e3ZhciBJPXkoODAyOCksXz15KDk3ODUpLGc9eSg5MDcyKSxCPXkoOTUwOSkuQnVmZmVyLHc9eSg3MzU3KSxQPXkoMjM2OCksRj15KDc3NzcpLE89Qi5hbGxvYygxMjgpLHo9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0''@;'; put 'put ''OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBOKFUsVyxZKXt2YXIgcT1mdW5jdGlvbiBMKFUpe3JldHVybiJybWQxNjAiPT09VXx8InJpcGVtZDE2MCI9PT1VP2Z1bmN0aW9uIFkocSl7cmV0dXJuKG5ldyBfKS51cGRhdGUocSkuZGlnZXN0KCl9OiJtZDUi''@;'; put 'put ''PT09VT9JOmZ1bmN0aW9uIFcocSl7cmV0dXJuIGcoVSkudXBkYXRlKHEpLmRpZ2VzdCgpfX0oVSksZWU9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O1cubGVuZ3RoPmVlP1c9cShXKTpXLmxlbmd0aDxlZSYmKFc9Qi5jb25jYXQoW1csT10sZWUpKTtmb3IodmFyIEo9Qi5hbGxv''@;'; put 'put ''Y1Vuc2FmZShlZSt6W1VdKSxuZT1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLGllPTA7aWU8ZWU7aWUrKylKW2llXT01NF5XW2llXSxuZVtpZV09OTJeV1tpZV07dmFyIGxlPUIuYWxsb2NVbnNhZmUoZWUrWSs0KTtKLmNvcHkobGUsMCwwLGVlKSx0aGlzLmlwYWQxPWxlLHRoaXMuaXBhZDI9Six0''@;'; put 'put ''aGlzLm9wYWQ9bmUsdGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1lZSx0aGlzLmhhc2g9cSx0aGlzLnNpemU9eltVXX1OLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVSxXKXtyZXR1cm4gVS5jb3B5KFcsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChXKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJs''@;'; put 'put ''b2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24gSyhVLFcsWSxxLGVlKXt3KFkscSk7dmFyIEo9bmV3IE4oZWU9ZWV8fCJzaGExIixVPUYoVSxQLCJQYXNzd29yZCIpLChXPUYoVyxQLCJTYWx0IikpLmxlbmd0aCksbmU9Qi5hbGxvY1Vuc2FmZShxKSxp''@;'; put 'put ''ZT1CLmFsbG9jVW5zYWZlKFcubGVuZ3RoKzQpO1cuY29weShpZSwwLDAsVy5sZW5ndGgpO2Zvcih2YXIgbGU9MCxtZT16W2VlXSxfZT1NYXRoLmNlaWwocS9tZSksVGU9MTtUZTw9X2U7VGUrKyl7aWUud3JpdGVVSW50MzJCRShUZSxXLmxlbmd0aCk7Zm9yKHZhciBTZT1KLnJ1bihpZSxKLmlw''@;'; put 'put ''YWQxKSxqZT1TZSxWPTE7VjxZO1YrKyl7amU9Si5ydW4oamUsSi5pcGFkMik7Zm9yKHZhciBwPTA7cDxtZTtwKyspU2VbcF1ePWplW3BdfVNlLmNvcHkobmUsbGUpLGxlKz1tZX1yZXR1cm4gbmV9fSw3Nzc3Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihfLGcsQil7aWYoSS5pc0J1ZmZlcihfKSlyZXR1cm4gXztpZigic3RyaW5nIj09dHlwZW9mIF8pcmV0dXJuIEkuZnJvbShfLGcpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhfKSlyZXR1cm4gSS5mcm9tKF8uYnVmZmVyKTt0aHJvdyBuZXcgVHlwZUVycm9yKEIrIiBtdXN0IGJlIGEgc3Ry''@;'; put 'put ''aW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSw5OTA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIs''@;'; put 'put ''IlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sODIxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO3VlLmV4cG9ydHM9dHlwZW9mIEk+InUifHwh''@;'; put 'put ''SS52ZXJzaW9ufHwwPT09SS52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09SS52ZXJzaW9uLmluZGV4T2YoInYxLiIpJiYwIT09SS52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIF8oZyxCLHcsUCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgTyx6LEY9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goRil7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gSS5uZXh0VGljayhnKTtjYXNlIDI6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNh''@;'; put 'put ''bGwobnVsbCxCKX0pO2Nhc2UgMzpyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cuY2FsbChudWxsLEIsdyl9KTtjYXNlIDQ6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxCLHcsUCl9KTtkZWZhdWx0OmZvcihPPW5ldyBBcnJheShGLTEpLHo9MDt6PE8ubGVu''@;'; put 'put ''Z3RoOylPW3orK109YXJndW1lbnRzW3pdO3JldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5hcHBseShudWxsLE8pfSl9fX06SX0sNDE1NTp1ZT0+e3ZhciB5LEksWD11ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIF8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVu''@;'; put 'put ''IGRlZmluZWQiKX1mdW5jdGlvbiBnKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBCKFcpe2lmKHk9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KFcsMCk7aWYoKHk9PT1ffHwheSkmJnNldFRpbWVvdXQpcmV0dXJu''@;'; put 'put ''IHk9c2V0VGltZW91dCxzZXRUaW1lb3V0KFcsMCk7dHJ5e3JldHVybiB5KFcsMCl9Y2F0Y2h7dHJ5e3JldHVybiB5LmNhbGwobnVsbCxXLDApfWNhdGNoe3JldHVybiB5LmNhbGwodGhpcyxXLDApfX19IWZ1bmN0aW9uKCl7dHJ5e3k9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0''@;'; put 'put ''VGltZW91dDpffWNhdGNoe3k9X310cnl7ST0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpnfWNhdGNoe0k9Z319KCk7dmFyIE8sUD1bXSxGPSExLHo9LTE7ZnVuY3Rpb24gTigpeyFGfHwhT3x8KEY9ITEsTy5sZW5ndGg/UD1PLmNvbmNhdChQKTp6PS0xLFAu''@;'; put 'put ''bGVuZ3RoJiZMKCkpfWZ1bmN0aW9uIEwoKXtpZighRil7dmFyIFc9QihOKTtGPSEwO2Zvcih2YXIgWT1QLmxlbmd0aDtZOyl7Zm9yKE89UCxQPVtdOysrejxZOylPJiZPW3pdLnJ1bigpO3o9LTEsWT1QLmxlbmd0aH1PPW51bGwsRj0hMSxmdW5jdGlvbiB3KFcpe2lmKEk9PT1jbGVhclRpbWVv''@;'; put 'put ''dXQpcmV0dXJuIGNsZWFyVGltZW91dChXKTtpZigoST09PWd8fCFJKSYmY2xlYXJUaW1lb3V0KXJldHVybiBJPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoVyk7dHJ5e3JldHVybiBJKFcpfWNhdGNoe3RyeXtyZXR1cm4gSS5jYWxsKG51bGwsVyl9Y2F0Y2h7cmV0dXJuIEkuY2FsbCh0aGlz''@;'; put 'put ''LFcpfX19KFcpfX1mdW5jdGlvbiBLKFcsWSl7dGhpcy5mdW49Vyx0aGlzLmFycmF5PVl9ZnVuY3Rpb24gVSgpe31YLm5leHRUaWNrPWZ1bmN0aW9uKFcpe3ZhciBZPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHE9MTtxPGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg7cSsrKVlbcS0xXT1hcmd1bWVudHNbcV07UC5wdXNoKG5ldyBLKFcsWSkpLDE9PT1QLmxlbmd0aCYmIUYmJkIoTCl9LEsucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LFgudGl0bGU9ImJyb3dzZXIiLFguYnJvd3Nl''@;'; put 'put ''cj0hMCxYLmVudj17fSxYLmFyZ3Y9W10sWC52ZXJzaW9uPSIiLFgudmVyc2lvbnM9e30sWC5vbj1VLFguYWRkTGlzdGVuZXI9VSxYLm9uY2U9VSxYLm9mZj1VLFgucmVtb3ZlTGlzdGVuZXI9VSxYLnJlbW92ZUFsbExpc3RlbmVycz1VLFguZW1pdD1VLFgucHJlcGVuZExpc3RlbmVyPVUsWC5w''@;'; put 'put ''cmVwZW5kT25jZUxpc3RlbmVyPVUsWC5saXN0ZW5lcnM9ZnVuY3Rpb24oVyl7cmV0dXJuW119LFguYmluZGluZz1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LFguY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxYLmNoZGly''@;'; put 'put ''PWZ1bmN0aW9uKFcpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LFgudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDc5MDA6KHVlLFgseSk9PntYLnB1YmxpY0VuY3J5cHQ9eSg2NTU5KSxYLnByaXZhdGVEZWNyeXB0PXkoNjEzOCksWC5wcml2''@;'; put 'put ''YXRlRW5jcnlwdD1mdW5jdGlvbihfLGcpe3JldHVybiBYLnB1YmxpY0VuY3J5cHQoXyxnLCEwKX0sWC5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKF8sZyl7cmV0dXJuIFgucHJpdmF0ZURlY3J5cHQoXyxnLCEwKX19LDkxOTk6KHVlLFgseSk9Pnt2YXIgST15KDM0ODIpLF89eSg5NTA5KS5CdWZm''@;'; put 'put ''ZXI7ZnVuY3Rpb24gZyhCKXt2YXIgdz1fLmFsbG9jVW5zYWZlKDQpO3JldHVybiB3LndyaXRlVUludDMyQkUoQiwwKSx3fXVlLmV4cG9ydHM9ZnVuY3Rpb24oQix3KXtmb3IodmFyIE8sUD1fLmFsbG9jKDApLEY9MDtQLmxlbmd0aDx3OylPPWcoRisrKSxQPV8uY29uY2F0KFtQLEkoInNoYTEi''@;'; put 'put ''KS51cGRhdGUoQikudXBkYXRlKE8pLmRpZ2VzdCgpXSk7cmV0dXJuIFAuc2xpY2UoMCx3KX19LDIxNDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIp''@;'; put 'put ''fWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8u''@;'; put 'put ''Qk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3MTA4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZi''@;'; put 'put ''PD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7''@;'; put 'put ''SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndv''@;'; put 'put ''cmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShw''@;'; put 'put ''PXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXko''@;'; put 'put ''KSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEw''@;'; put 'put ''ODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5''@;'; put 'put ''KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8z''@;'; put 'put ''KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0x''@;'; put 'put ''XTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4''@;'; put 'put ''fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwo''@;'; put 'put ''KHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRo''@;'; put 'put ''aXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/''@;'; put 'put ''KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQv''@;'; put 'put ''YnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2''@;'; put 'put ''YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25l''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1m''@;'; put 'put ''dW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlz''@;'; put 'put ''LndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwi''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1''@;'; put 'put ''LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1''@;'; put 'put ''LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtw''@;'; put 'put ''Lmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRo''@;'; put 'put ''Lm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAh''@;'; put 'put ''PT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2''@;'; put 'put ''YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRv''@;'; put 'put ''U3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFh''@;'; put 'put ''ZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9''@;'; put 'put ''LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJl''@;'; put 'put ''ZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpb''@;'; put 'put ''bV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlw''@;'; put 'put ''ZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3Rv''@;'; put 'put ''dHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9y''@;'; put 'put ''KHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgo''@;'; put 'put ''KS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlz''@;'; put 'put ''Lm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVn''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3Ro''@;'; put 'put ''O2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1''@;'; put 'put ''b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxl''@;'; put 'put ''bmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihw''@;'; put 'put ''KXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0Nd''@;'; put 'put ''PWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3Io''@;'; put 'put ''dGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+''@;'; put 'put ''dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVu''@;'; put 'put ''Y3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1w''@;'; put 'put ''Lm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02''@;'; put 'put ''NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0''@;'; put 'put ''aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5w''@;'; put 'put ''Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9''@;'; put 'put ''aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndv''@;'; put 'put ''cmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7''@;'; put 'put ''aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMu''@;'; put 'put ''bGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgu''@;'; put 'put ''d29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+''@;'; put 'put ''Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMs''@;'; put 'put ''cXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8''@;'; put 'put ''VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZl''@;'; put 'put ''PXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSso''@;'; put 'put ''dWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''RGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxX''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''RGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMp''@;'; put 'put ''fDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxX''@;'; put 'put ''ZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''QWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxX''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''dXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6''@;'; put 'put ''ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZu''@;'; put 'put ''KXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9l''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5''@;'; put 'put ''dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''cGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgk''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5''@;'; put 'put ''dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZu''@;'; put 'put ''KXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwo''@;'; put 'put ''dXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMp''@;'; put 'put ''fDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09''@;'; put 'put ''TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRv''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5l''@;'; put 'put ''Z2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsr''@;'; put 'put ''KXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVy''@;'; put 'put ''biAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7Qysr''@;'; put 'put ''KWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUu''@;'; put 'put ''cGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8''@;'; put 'put ''PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1th''@;'; put 'put ''ZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1''@;'; put 'put ''ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7''@;'; put 'put ''QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQo''@;'; put 'put ''cFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkx''@;'; put 'put ''JihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7''@;'; put 'put ''cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyks''@;'; put 'put ''QT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgs''@;'; put 'put ''RSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQp''@;'; put 'put ''O2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRo''@;'; put 'put ''aXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jk''@;'; put 'put ''c1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7''@;'; put 'put ''QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2''@;'; put 'put ''YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVu''@;'; put 'put ''Z3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142''@;'; put 'put ''NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7''@;'; put 'put ''bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYt''@;'; put 'put ''VHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZw''@;'; put 'put ''Pj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGco''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02''@;'; put 'put ''NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2''@;'; put 'put ''NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1''@;'; put 'put ''Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09Njcx''@;'; put 'put ''MDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAp''@;'; put 'put ''LGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29y''@;'; put 'put ''ZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxl''@;'; put 'put ''bmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jk''@;'; put 'put ''c1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMm''@;'; put 'put ''SDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4''@;'; put 'put ''KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndv''@;'; put 'put ''cmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jk''@;'; put 'put ''c1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJiht''@;'; put 'put ''LndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8o''@;'; put 'put ''KT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5p''@;'; put 'put ''YWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVn''@;'; put 'put ''KCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVu''@;'; put 'put ''Z3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9''@;'; put 'put ''OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90''@;'; put 'put ''b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0''@;'; put 'put ''aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rp''@;'; put 'put ''b24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAs''@;'; put 'put ''eD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCks''@;'; put 'put ''aj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9''@;'; put 'put ''MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYo''@;'; put 'put ''c2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMp''@;'; put 'put ''LGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5j''@;'; put 'put ''bG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgp''@;'; put 'put ''JiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1''@;'; put 'put ''YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0''@;'; put 'put ''aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigx''@;'; put 'put ''KTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRz''@;'; put 'put ''W3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMu''@;'; put 'put ''d29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhp''@;'; put 'put ''cy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90''@;'; put 'put ''eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhp''@;'; put 'put ''cyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhp''@;'; put 'put ''cyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVn''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAu''@;'; put 'put ''cmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhw''@;'; put 'put ''LDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhp''@;'; put 'put ''cywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMu''@;'; put 'put ''ci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJv''@;'; put 'put ''dG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9''@;'; put 'put ''KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5z''@;'; put 'put ''dHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jk''@;'; put 'put ''c1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxs''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMp''@;'; put 'put ''LGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7''@;'; put 'put ''Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtw''@;'; put 'put ''XSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRl''@;'; put 'put ''fXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJp''@;'; put 'put ''ZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihw''@;'; put 'put ''LGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTww''@;'; put 'put ''JiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJv''@;'; put 'put ''dG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9''@;'; put 'put ''dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgo''@;'; put 'put ''KTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChI''@;'; put 'put ''KTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJl''@;'; put 'put ''dHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIp''@;'; put 'put ''e2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhp''@;'; put 'put ''cy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRo''@;'; put 'put ''aXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMu''@;'; put 'put ''bSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmlt''@;'; put 'put ''dWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5p''@;'; put 'put ''c3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8o''@;'; put 'put ''KXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDty''@;'; put 'put ''ZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5y''@;'; put 'put ''MikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNjEzODoodWUsWCx5KT0+e3ZhciBJPXkoOTgwKSxfPXkoOTE5OSksZz15KDc4NTkpLEI9eSgyMTQ0KSx3PXkoMzY2MyksUD15KDM0ODIpLEY9eSg0ODE4KSxPPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oVSxXLFkpe3ZhciBxO3E9VS5wYWRkaW5nP1UucGFkZGluZzpZPzE6NDt2YXIgbmUsZWU9SShVKSxKPWVlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFcubGVuZ3RoPkp8fG5ldyBCKFcpLmNtcChlZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtu''@;'; put 'put ''ZT1ZP0YobmV3IEIoVyksZWUpOncoVyxlZSk7dmFyIGllPU8uYWxsb2MoSi1uZS5sZW5ndGgpO2lmKG5lPU8uY29uY2F0KFtpZSxuZV0sSiksND09PXEpcmV0dXJuIGZ1bmN0aW9uIHooSyxVKXt2YXIgVz1LLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9UCgic2hhMSIpLnVwZGF0ZShPLmFsbG9j''@;'; put 'put ''KDApKS5kaWdlc3QoKSxxPVkubGVuZ3RoO2lmKDAhPT1VWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBlZT1VLnNsaWNlKDEscSsxKSxKPVUuc2xpY2UocSsxKSxuZT1nKGVlLF8oSixxKSksaWU9ZyhKLF8obmUsVy1xLTEpKTtpZihmdW5jdGlvbiBMKEssVSl7''@;'; put 'put ''Sz1PLmZyb20oSyksVT1PLmZyb20oVSk7dmFyIFc9MCxZPUsubGVuZ3RoO0subGVuZ3RoIT09VS5sZW5ndGgmJihXKyssWT1NYXRoLm1pbihLLmxlbmd0aCxVLmxlbmd0aCkpO2Zvcih2YXIgcT0tMTsrK3E8WTspVys9S1txXV5VW3FdO3JldHVybiBXfShZLGllLnNsaWNlKDAscSkpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgbGU9cTswPT09aWVbbGVdOylsZSsrO2lmKDEhPT1pZVtsZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2UobGUpfShlZSxuZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IE4oSyxVLFcpe2Zvcih2YXIgWT1VLnNsaWNlKDAsMikscT0yLGVlPTA7MCE9PVVbcSsrXTspaWYocT49VS5sZW5ndGgpe2VlKys7YnJlYWt9dmFyIEo9VS5zbGljZSgyLHEtMSk7aWYoKCIwMDAyIiE9PVkudG9TdHJpbmcoImhleCIpJiYhV3x8IjAwMDEiIT09WS50b1N0cmluZygiaGV4Iikm''@;'; put 'put ''JlcpJiZlZSsrLEoubGVuZ3RoPDgmJmVlKyssZWUpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFUuc2xpY2UocSl9KDAsbmUsWSk7aWYoMz09PXEpcmV0dXJuIG5lO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSw2NTU5Oih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSg5ODApLF89eSgxNzk4KSxnPXkoMzQ4MiksQj15KDkxOTkpLHc9eSg3ODU5KSxQPXkoMjE0NCksRj15KDQ4MTgpLE89eSgzNjYzKSx6PXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVyxZLHEpe3ZhciBlZTtlZT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3Zh''@;'; put 'put ''ciBuZSxKPUkoVyk7aWYoND09PWVlKW5lPWZ1bmN0aW9uIE4oVSxXKXt2YXIgWT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHE9Vy5sZW5ndGgsZWU9Zygic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxlbmd0aCxuZT0yKko7aWYocT5ZLW5lLTIpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoWS1xLW5lLTIpLGxlPVktSi0xLG1lPV8oSiksX2U9dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFddLGxlKSxCKG1lLGxlKSksVGU9dyhtZSxCKF9lLEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2Mo''@;'; put 'put ''MSksVGUsX2VdLFkpKX0oSixZKTtlbHNlIGlmKDE9PT1lZSluZT1mdW5jdGlvbiBMKFUsVyxZKXt2YXIgSixxPVcubGVuZ3RoLGVlPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1ZP3ouYWxsb2Mo''@;'; put 'put ''ZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhVKXtmb3IodmFyIEosVz16LmFsbG9jVW5zYWZlKFUpLFk9MCxxPV8oMipVKSxlZT0wO1k8VTspZWU9PT1xLmxlbmd0aCYmKHE9XygyKlUpLGVlPTApLChKPXFbZWUrK10pJiYoV1tZKytdPUopO3JldHVybiBXfShlZS1xLTMpLG5ldyBQKHouY29uY2F0''@;'; put 'put ''KFt6LmZyb20oWzAsWT8xOjJdKSxKLHouYWxsb2MoMSksV10sZWUpKX0oSixZLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKG5lPW5ldyBQKFkpKS5jbXAoSi5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcg''@;'; put 'put ''Zm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9PKG5lLEopOkYobmUsSil9fSw0ODE4Oih1ZSxYLHkpPT57dmFyIEk9eSgyMTQ0KSxfPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcpe3JldHVybiBfLmZyb20oQi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5l''@;'; put 'put ''dyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7Zm9yKHZhciBfPXkubGVuZ3RoLGc9LTE7KytnPF87KXlbZ11ePUlbZ107cmV0dXJuIHl9fSwzNjg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ku''@;'; put 'put ''cihYKSx5LmQoWCx7ZGVjb2RlOigpPT5TZSxkZWZhdWx0OigpPT54LGVuY29kZTooKT0+amUsdG9BU0NJSTooKT0+cCx0b1VuaWNvZGU6KCk9PlYsdWNzMmRlY29kZTooKT0+aWUsdWNzMmVuY29kZTooKT0+bGV9KTtjb25zdCBJPTIxNDc0ODM2NDcsXz0zNixOPS9eeG4tLS8sTD0vW15cMC1c''@;'; put 'put ''eDdGXS8sSz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVT17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFs''@;'; put 'put ''aWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sWT1NYXRoLmZsb29yLHE9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlZShDKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihVW0NdKX1mdW5jdGlvbiBuZShDLFQpe2NvbnN0IEg9Qy5zcGxpdCgiQCIpO2xldCBqPSIiO0gubGVuZ3RoPjEmJihq''@;'; put 'put ''PUhbMF0rIkAiLEM9SFsxXSk7Y29uc3QgbT1mdW5jdGlvbiBKKEMsVCl7Y29uc3QgSD1bXTtsZXQgaj1DLmxlbmd0aDtmb3IoO2otLTspSFtqXT1UKENbal0pO3JldHVybiBIfSgoQz1DLnJlcGxhY2UoSywiLiIpKS5zcGxpdCgiLiIpLFQpLmpvaW4oIi4iKTtyZXR1cm4gaittfWZ1bmN0aW9u''@;'; put 'put ''IGllKEMpe2NvbnN0IFQ9W107bGV0IEg9MDtjb25zdCBqPUMubGVuZ3RoO2Zvcig7SDxqOyl7Y29uc3QgRT1DLmNoYXJDb2RlQXQoSCsrKTtpZihFPj01NTI5NiYmRTw9NTYzMTkmJkg8ail7Y29uc3QgbT1DLmNoYXJDb2RlQXQoSCsrKTs1NjMyMD09KDY0NTEyJm0pP1QucHVzaCgoKDEwMjMm''@;'; put 'put ''RSk8PDEwKSsoMTAyMyZtKSs2NTUzNik6KFQucHVzaChFKSxILS0pfWVsc2UgVC5wdXNoKEUpfXJldHVybiBUfWNvbnN0IGxlPUM9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkMpLG1lPWZ1bmN0aW9uKEMpe3JldHVybiBDPj00OCYmQzw1OD9DLTQ4KzI2OkM+PTY1JiZDPDkxP0MtNjU6Qz49''@;'; put 'put ''OTcmJkM8MTIzP0MtOTc6X30sX2U9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQysyMis3NSooQzwyNiktKCgwIT1UKTw8NSl9LFRlPWZ1bmN0aW9uKEMsVCxIKXtsZXQgaj0wO2ZvcihDPUg/WShDLzcwMCk6Qz4+MSxDKz1ZKEMvVCk7Qz40NTU7ais9XylDPVkoQy8zNSk7cmV0dXJuIFkoaiszNipD''@;'; put 'put ''LyhDKzM4KSl9LFNlPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sSD1DLmxlbmd0aDtsZXQgaj0wLEU9MTI4LG09NzIsQT1DLmxhc3RJbmRleE9mKCItIik7QTwwJiYoQT0wKTtmb3IobGV0IGFlPTA7YWU8QTsrK2FlKUMuY2hhckNvZGVBdChhZSk+PTEyOCYmZWUoIm5vdC1iYXNpYyIpLFQucHVz''@;'; put 'put ''aChDLmNoYXJDb2RlQXQoYWUpKTtmb3IobGV0IGFlPUE+MD9BKzE6MDthZTxIOyl7Y29uc3QgdGU9ajtmb3IobGV0IHdlPTEsVWU9Xzs7VWUrPV8pe2FlPj1IJiZlZSgiaW52YWxpZC1pbnB1dCIpO2NvbnN0IEplPW1lKEMuY2hhckNvZGVBdChhZSsrKSk7SmU+PV8mJmVlKCJpbnZhbGlkLWlu''@;'; put 'put ''cHV0IiksSmU+WSgoSS1qKS93ZSkmJmVlKCJvdmVyZmxvdyIpLGorPUplKndlO2NvbnN0IG90PVVlPD1tPzE6VWU+PW0rMjY/MjY6VWUtbTtpZihKZTxvdClicmVhaztjb25zdCB4ZT1fLW90O3dlPlkoSS94ZSkmJmVlKCJvdmVyZmxvdyIpLHdlKj14ZX1jb25zdCBzZT1ULmxlbmd0aCsxO209''@;'; put 'put ''VGUoai10ZSxzZSwwPT10ZSksWShqL3NlKT5JLUUmJmVlKCJvdmVyZmxvdyIpLEUrPVkoai9zZSksaiU9c2UsVC5zcGxpY2UoaisrLDAsRSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlQpfSxqZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLEg9KEM9aWUoQykpLmxlbmd0aDtsZXQg''@;'; put 'put ''aj0xMjgsRT0wLG09NzI7Zm9yKGNvbnN0IHRlIG9mIEMpdGU8MTI4JiZULnB1c2gocSh0ZSkpO2NvbnN0IEE9VC5sZW5ndGg7bGV0IGFlPUE7Zm9yKEEmJlQucHVzaCgiLSIpO2FlPEg7KXtsZXQgdGU9STtmb3IoY29uc3Qgd2Ugb2YgQyl3ZT49aiYmd2U8dGUmJih0ZT13ZSk7Y29uc3Qgc2U9''@;'; put 'put ''YWUrMTt0ZS1qPlkoKEktRSkvc2UpJiZlZSgib3ZlcmZsb3ciKSxFKz0odGUtaikqc2Usaj10ZTtmb3IoY29uc3Qgd2Ugb2YgQylpZih3ZTxqJiYrK0U+SSYmZWUoIm92ZXJmbG93Iiksd2U9PT1qKXtsZXQgVWU9RTtmb3IobGV0IEplPV87O0plKz1fKXtjb25zdCBvdD1KZTw9bT8xOkplPj1t''@;'; put 'put ''KzI2PzI2OkplLW07aWYoVWU8b3QpYnJlYWs7Y29uc3QgeGU9VWUtb3QsdmU9Xy1vdDtULnB1c2gocShfZShvdCt4ZSV2ZSwwKSkpLFVlPVkoeGUvdmUpfVQucHVzaChxKF9lKFVlLDApKSksbT1UZShFLHNlLGFlPT09QSksRT0wLCsrYWV9KytFLCsran1yZXR1cm4gVC5qb2luKCIiKX0sVj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gbmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTi50ZXN0KFQpP1NlKFQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VH0pfSxwPWZ1bmN0aW9uKEMpe3JldHVybiBuZShDLGZ1bmN0aW9uKFQpe3JldHVybiBMLnRlc3QoVCk/InhuLS0iK2plKFQpOlR9KX0seD17dmVy''@;'; put 'put ''c2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTppZSxlbmNvZGU6bGV9LGRlY29kZTpTZSxlbmNvZGU6amUsdG9BU0NJSTpwLHRvVW5pY29kZTpWfX0sNzEyOToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIHk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfKFApe3Ry''@;'; put 'put ''eXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFAucmVwbGFjZSgvXCsvZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZyhQKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChQKX1jYXRjaHtyZXR1cm4gbnVsbH19WC5zdHJpbmdpZnk9ZnVuY3Rpb24gdyhQLEYpe0Y9''@;'; put 'put ''Rnx8IiI7dmFyIHosTixPPVtdO2ZvcihOIGluInN0cmluZyIhPXR5cGVvZiBGJiYoRj0iPyIpLFApaWYoeS5jYWxsKFAsTikpe2lmKCEoej1QW05dKSYmKG51bGw9PXp8fGlzTmFOKHopKSYmKHo9IiIpLE49ZyhOKSx6PWcoeiksbnVsbD09PU58fG51bGw9PT16KWNvbnRpbnVlO08ucHVzaChO''@;'; put 'put ''KyI9Iit6KX1yZXR1cm4gTy5sZW5ndGg/RitPLmpvaW4oIiYiKToiIn0sWC5wYXJzZT1mdW5jdGlvbiBCKFApe2Zvcih2YXIgeixGPS8oW149PyMmXSspPT8oW14mXSopL2csTz17fTt6PUYuZXhlYyhQKTspe3ZhciBOPV8oelsxXSksTD1fKHpbMl0pO251bGw9PT1OfHxudWxsPT09THx8TiBp''@;'; put 'put ''biBPfHwoT1tOXT1MKX1yZXR1cm4gT319LDE3OTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPTY1NTM2LHc9eSg5NTA5KS5CdWZmZXIsUD15LmcuY3J5cHRvfHx5LmcubXNDcnlwdG87dWUuZXhwb3J0cz1QJiZQLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBGKE8s''@;'; put 'put ''eil7aWYoTz40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIE49dy5hbGxvY1Vuc2FmZShPKTtpZihPPjApaWYoTz5fKWZvcih2YXIgTD0wO0w8TztMKz1fKVAuZ2V0UmFuZG9tVmFsdWVzKE4uc2xpY2UoTCxMK18p''@;'; put 'put ''KTtlbHNlIFAuZ2V0UmFuZG9tVmFsdWVzKE4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB6P0kubmV4dFRpY2soZnVuY3Rpb24oKXt6KG51bGwsTil9KTpOfTpmdW5jdGlvbiBCKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBw''@;'; put 'put ''b3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2Z1bmN0aW9uIF8oKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVy''@;'; put 'put ''IGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgZz15KDk1MDkpLEI9eSgxNzk4KSx3PWcuQnVmZmVyLFA9Zy5rTWF4TGVuZ3RoLEY9eS5nLmNyeXB0b3x8eS5nLm1zQ3J5cHRv''@;'; put 'put ''LE89TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiB6KFcsWSl7aWYoIm51bWJlciIhPXR5cGVvZiBXfHxXIT1XKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5PfHxXPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50''@;'; put 'put ''MzIiKTtpZihXPlB8fFc+WSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE4oVyxZLHEpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihXPk98fFc8MCl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihXK1k+cXx8Vz5QKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gSyhXLFkscSxlZSl7aWYoSS5icm93c2VyKXt2YXIgbmU9bmV3IFVpbnQ4QXJyYXkoVy5idWZmZXIs''@;'; put 'put ''WSxxKTtyZXR1cm4gRi5nZXRSYW5kb21WYWx1ZXMobmUpLGVlP3ZvaWQgSS5uZXh0VGljayhmdW5jdGlvbigpe2VlKG51bGwsVyl9KTpXfWlmKCFlZSlyZXR1cm4gQihxKS5jb3B5KFcsWSksVztCKHEsZnVuY3Rpb24obGUsbWUpe2lmKGxlKXJldHVybiBlZShsZSk7bWUuY29weShXLFkpLGVl''@;'; put 'put ''KG51bGwsVyl9KX1GJiZGLmdldFJhbmRvbVZhbHVlc3x8IUkuYnJvd3Nlcj8oWC5yYW5kb21GaWxsPWZ1bmN0aW9uIEwoVyxZLHEsZWUpe2lmKCEody5pc0J1ZmZlcihXKXx8VyBpbnN0YW5jZW9mIHkuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBt''@;'; put 'put ''dXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgWSllZT1ZLFk9MCxxPVcubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHEpZWU9cSxxPVcubGVuZ3RoLVk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgZWUpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4geihZLFcubGVuZ3RoKSxOKHEsWSxXLmxlbmd0aCksSyhXLFkscSxlZSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gVShXLFkscSl7aWYodHlwZW9mIFk+InUiJiYoWT0wKSwhKHcuaXNCdWZmZXIo''@;'; put 'put ''Vyl8fFcgaW5zdGFuY2VvZiB5LmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIHooWSxXLmxlbmd0aCksdm9pZCAwPT09cSYmKHE9Vy5sZW5ndGgtWSksTihxLFksVy5sZW5ndGgp''@;'; put 'put ''LEsoVyxZLHEpfSk6KFgucmFuZG9tRmlsbD1fLFgucmFuZG9tRmlsbFN5bmM9Xyl9LDQyODE6dWU9PnsidXNlIHN0cmljdCI7dmFyIHk9e307ZnVuY3Rpb24gSShQLEYsTyl7T3x8KE89RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEsoVSxXLFkpe3JldHVybiBMLmNhbGwodGhp''@;'; put 'put ''cyxmdW5jdGlvbiB6KEwsSyxVKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKEwsSyxVKX0oVSxXLFkpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3By''@;'; put 'put ''b3RvX189Rn0oSyxMKSxLfShPKTtOLnByb3RvdHlwZS5uYW1lPU8ubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAseVtQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgTz1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHop''@;'; put 'put ''fSksTz4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsTy0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbTy0xXToyPT09Tz8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNv''@;'; put 'put ''bmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEko''@;'; put 'put ''IkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsTyl7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBQLnN1YnN0cighT3x8TzwwPzA6K08sRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJl''@;'; put 'put ''cGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIEIoUCxGLE8pe3JldHVybih2b2lkIDA9PT1PfHxPPlAubGVuZ3RoKSYmKE89UC5sZW5ndGgpLFAuc3Vic3RyaW5nKE8tRi5sZW5ndGgsTyk9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNv''@;'; put 'put ''bmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKTtlbHNle3ZhciBMPWZ1bmN0aW9uIHcoUCxGLE8pe3JldHVybiJudW1iZXIiIT10eXBlb2YgTyYmKE89MCksIShPK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixPKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50''@;'; put 'put ''IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KEwsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgTyl9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0''@;'; put 'put ''cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEko''@;'; put 'put ''IkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFN''@;'; put 'put ''X0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJy''@;'; put 'put ''b3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLHVlLmV4cG9y''@;'; put 'put ''dHMucT15fSw2NzUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTCl7dmFyIEs9W107Zm9yKHZhciBVIGluIEwpSy5wdXNoKFUpO3JldHVybiBLfTt1ZS5leHBvcnRzPU87dmFyIGc9eSg5NDgxKSxCPXkoNDIyOSk7eSg1NzE3''@;'; put 'put ''KShPLGcpO2Zvcih2YXIgdz1fKEIucHJvdG90eXBlKSxQPTA7UDx3Lmxlbmd0aDtQKyspe3ZhciBGPXdbUF07Ty5wcm90b3R5cGVbRl18fChPLnByb3RvdHlwZVtGXT1CLnByb3RvdHlwZVtGXSl9ZnVuY3Rpb24gTyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oTCk7''@;'; put 'put ''Zy5jYWxsKHRoaXMsTCksQi5jYWxsKHRoaXMsTCksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEwmJighMT09PUwucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PUwud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PUwuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxm''@;'; put 'put ''T3Blbj0hMSx0aGlzLm9uY2UoImVuZCIseikpKX1mdW5jdGlvbiB6KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhOLHRoaXMpfWZ1bmN0aW9uIE4oTCl7TC5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFy''@;'; put 'put ''ayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5s''@;'; put 'put ''ZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KX0sMjcyNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPV87dmFyIEk9eSg0NjA1KTtmdW5jdGlvbiBfKGcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIF8pKXJldHVybiBuZXcgXyhnKTtJLmNhbGwodGhpcyxnKX15KDU3MTcpKF8s''@;'; put 'put ''SSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihnLEIsdyl7dyhudWxsLGcpfX0sOTQ4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPXkoNDE1NSk7dWUuZXhwb3J0cz1wLHAuUmVhZGFibGVTdGF0ZT1WLHkoNzE4Nyk7dmFyIEwsQj1mdW5jdGlvbihPZSxJZSl7cmV0''@;'; put 'put ''dXJuIE9lLmxpc3RlbmVycyhJZSkubGVuZ3RofSx3PXkoMjUwMyksUD15KDg3NjQpLkJ1ZmZlcixGPSh0eXBlb2YgeS5nPCJ1Ij95Lmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTj15KDQ2MTYpO0w9''@;'; put 'put ''TiYmTi5kZWJ1Z2xvZz9OLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGxlLG1lLF9lLEs9eSg3MzI3KSxVPXkoMTE5NSksWT15KDI0NTcpLmdldEhpZ2hXYXRlck1hcmsscT15KDQyODEpLnEsZWU9cS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxKPXEuRVJSX1NUUkVBTV9QVVNI''@;'; put 'put ''X0FGVEVSX0VPRixuZT1xLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGllPXEuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDt5KDU3MTcpKHAsdyk7dmFyIFRlPVUuZXJyb3JPckRlc3Ryb3ksU2U9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1l''@;'; put 'put ''Il07ZnVuY3Rpb24gVihGZSxPZSxJZSl7Xz1ffHx5KDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIEllJiYoSWU9T2UgaW5zdGFuY2VvZiBfKSx0aGlzLm9iamVjdE1vZGU9ISEoRmU9RmV8fHt9KS5vYmplY3RNb2RlLEllJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFGZS5y''@;'; put 'put ''ZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1ZKHRoaXMsRmUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsSWUpLHRoaXMuYnVmZmVyPW5ldyBLLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMu''@;'; put 'put ''ZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0h''@;'; put 'put ''MCx0aGlzLmVtaXRDbG9zZT0hMSE9PUZlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhRmUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5n''@;'; put 'put ''TW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsRmUuZW5jb2RpbmcmJihsZXx8KGxlPXkoMjU1MykucyksdGhpcy5kZWNvZGVyPW5ldyBsZShGZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1GZS5lbmNvZGluZyl9ZnVuY3Rpb24gcChGZSl7aWYoXz1ffHx5KDY3''@;'; put 'put ''NTMpLCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcChGZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgVihGZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBfKSx0aGlzLnJlYWRhYmxlPSEwLEZlJiYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlYWQmJih0aGlzLl9yZWFkPUZlLnJlYWQp''@;'; put 'put ''LCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1GZS5kZXN0cm95KSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGIoRmUsT2UsSWUsVmUsa2Upe0woInJlYWRhYmxlQWRkQ2h1bmsiLE9lKTt2YXIgX3QsQWU9RmUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PU9l''@;'; put 'put ''KUFlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRShGZSxPZSl7aWYoTCgib25Fb2ZDaHVuayIpLCFPZS5lbmRlZCl7aWYoT2UuZGVjb2Rlcil7dmFyIEllPU9lLmRlY29kZXIuZW5kKCk7SWUmJkllLmxlbmd0aCYmKE9lLmJ1ZmZlci5wdXNoKEllKSxPZS5sZW5ndGgrPU9lLm9iamVjdE1vZGU/MTpJ''@;'; put 'put ''ZS5sZW5ndGgpfU9lLmVuZGVkPSEwLE9lLnN5bmM/bShGZSk6KE9lLm5lZWRSZWFkYWJsZT0hMSxPZS5lbWl0dGVkUmVhZGFibGV8fChPZS5lbWl0dGVkUmVhZGFibGU9ITAsQShGZSkpKX19KEZlLEFlKTtlbHNlIGlmKGtlfHwoX3Q9ZnVuY3Rpb24gQyhGZSxPZSl7dmFyIEllO3JldHVybiFm''@;'; put 'put ''dW5jdGlvbiB6KEZlKXtyZXR1cm4gUC5pc0J1ZmZlcihGZSl8fEZlIGluc3RhbmNlb2YgRn0oT2UpJiYic3RyaW5nIiE9dHlwZW9mIE9lJiZ2b2lkIDAhPT1PZSYmIUZlLm9iamVjdE1vZGUmJihJZT1uZXcgZWUoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxPZSkp''@;'; put 'put ''LEllfShBZSxPZSkpLF90KVRlKEZlLF90KTtlbHNlIGlmKEFlLm9iamVjdE1vZGV8fE9lJiZPZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIE9lJiYhQWUub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKE9lKSE9PVAucHJvdG90eXBlJiYoT2U9ZnVuY3Rpb24gTyhGZSl7''@;'; put 'put ''cmV0dXJuIFAuZnJvbShGZSl9KE9lKSksVmUpQWUuZW5kRW1pdHRlZD9UZShGZSxuZXcgaWUpOngoRmUsQWUsT2UsITApO2Vsc2UgaWYoQWUuZW5kZWQpVGUoRmUsbmV3IEopO2Vsc2V7aWYoQWUuZGVzdHJveWVkKXJldHVybiExO0FlLnJlYWRpbmc9ITEsQWUuZGVjb2RlciYmIUllPyhPZT1B''@;'; put 'put ''ZS5kZWNvZGVyLndyaXRlKE9lKSxBZS5vYmplY3RNb2RlfHwwIT09T2UubGVuZ3RoP3goRmUsQWUsT2UsITEpOmFlKEZlLEFlKSk6eChGZSxBZSxPZSwhMSl9ZWxzZSBWZXx8KEFlLnJlYWRpbmc9ITEsYWUoRmUsQWUpKTtyZXR1cm4hQWUuZW5kZWQmJihBZS5sZW5ndGg8QWUuaGlnaFdhdGVy''@;'; put 'put ''TWFya3x8MD09PUFlLmxlbmd0aCl9ZnVuY3Rpb24geChGZSxPZSxJZSxWZSl7T2UuZmxvd2luZyYmMD09PU9lLmxlbmd0aCYmIU9lLnN5bmM/KE9lLmF3YWl0RHJhaW49MCxGZS5lbWl0KCJkYXRhIixJZSkpOihPZS5sZW5ndGgrPU9lLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsVmU/T2UuYnVm''@;'; put 'put ''ZmVyLnVuc2hpZnQoSWUpOk9lLmJ1ZmZlci5wdXNoKEllKSxPZS5uZWVkUmVhZGFibGUmJm0oRmUpKSxhZShGZSxPZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlz''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKE9lKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9T2UpfX0pLHAucHJvdG90eXBlLmRlc3Ryb3k9VS5kZXN0cm95LHAucHJvdG90eXBl''@;'; put 'put ''Ll91bmRlc3Ryb3k9VS51bmRlc3Ryb3kscC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRmUsT2Upe09lKEZlKX0scC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGZSxPZSl7dmFyIFZlLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEllLm9iamVjdE1vZGU/VmU9ITA6InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBGZSYmKChPZT1PZXx8SWUuZGVmYXVsdEVuY29kaW5nKSE9PUllLmVuY29kaW5nJiYoRmU9UC5mcm9tKEZlLE9lKSxPZT0iIiksVmU9ITApLGIodGhpcyxGZSxPZSwhMSxWZSl9LHAucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRmUpe3JldHVybiBiKHRoaXMsRmUsbnVs''@;'; put 'put ''bCwhMCwhMSl9LHAucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHAucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKEZlKXtsZXx8KGxlPXkoMjU1Mykucyk7dmFyIE9lPW5ldyBsZShGZSk7dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5kZWNvZGVyPU9lLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgSWU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxWZT0iIjtudWxsIT09SWU7KVZlKz1PZS53cml0ZShJZS5k''@;'; put 'put ''YXRhKSxJZT1JZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09VmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goVmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPVZlLmxlbmd0aCx0aGlzfTt2YXIgVD0xMDczNzQxODI0O2Z1''@;'; put 'put ''bmN0aW9uIGooRmUsT2Upe3JldHVybiBGZTw9MHx8MD09PU9lLmxlbmd0aCYmT2UuZW5kZWQ/MDpPZS5vYmplY3RNb2RlPzE6RmUhPUZlP09lLmZsb3dpbmcmJk9lLmxlbmd0aD9PZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpPZS5sZW5ndGg6KEZlPk9lLmhpZ2hXYXRlck1hcmsmJihPZS5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIEgoRmUpe3JldHVybiBGZT49VD9GZT1UOihGZS0tLEZlfD1GZT4+PjEsRmV8PUZlPj4+MixGZXw9RmU+Pj40LEZlfD1GZT4+PjgsRmV8PUZlPj4+MTYsRmUrKyksRmV9KEZlKSksRmU8PU9lLmxlbmd0aD9GZTpPZS5lbmRlZD9PZS5sZW5ndGg6KE9lLm5l''@;'; put 'put ''ZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gbShGZSl7dmFyIE9lPUZlLl9yZWFkYWJsZVN0YXRlO0woImVtaXRSZWFkYWJsZSIsT2UubmVlZFJlYWRhYmxlLE9lLmVtaXR0ZWRSZWFkYWJsZSksT2UubmVlZFJlYWRhYmxlPSExLE9lLmVtaXR0ZWRSZWFkYWJsZXx8KEwoImVtaXRSZWFkYWJs''@;'; put 'put ''ZSIsT2UuZmxvd2luZyksT2UuZW1pdHRlZFJlYWRhYmxlPSEwLEkubmV4dFRpY2soQSxGZSkpfWZ1bmN0aW9uIEEoRmUpe3ZhciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbWl0UmVhZGFibGVfIixPZS5kZXN0cm95ZWQsT2UubGVuZ3RoLE9lLmVuZGVkKSwhT2UuZGVzdHJveWVkJiYoT2Uu''@;'; put 'put ''bGVuZ3RofHxPZS5lbmRlZCkmJihGZS5lbWl0KCJyZWFkYWJsZSIpLE9lLmVtaXR0ZWRSZWFkYWJsZT0hMSksT2UubmVlZFJlYWRhYmxlPSFPZS5mbG93aW5nJiYhT2UuZW5kZWQmJk9lLmxlbmd0aDw9T2UuaGlnaFdhdGVyTWFyayx4ZShGZSl9ZnVuY3Rpb24gYWUoRmUsT2Upe09lLnJlYWRp''@;'; put 'put ''bmdNb3JlfHwoT2UucmVhZGluZ01vcmU9ITAsSS5uZXh0VGljayh0ZSxGZSxPZSkpfWZ1bmN0aW9uIHRlKEZlLE9lKXtmb3IoOyFPZS5yZWFkaW5nJiYhT2UuZW5kZWQmJihPZS5sZW5ndGg8T2UuaGlnaFdhdGVyTWFya3x8T2UuZmxvd2luZyYmMD09PU9lLmxlbmd0aCk7KXt2YXIgSWU9T2Uu''@;'; put 'put ''bGVuZ3RoO2lmKEwoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksRmUucmVhZCgwKSxJZT09PU9lLmxlbmd0aClicmVha31PZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB3ZShGZSl7dmFyIE9lPUZlLl9yZWFkYWJsZVN0YXRlO09lLnJlYWRhYmxlTGlzdGVuaW5nPUZlLmxpc3RlbmVyQ291bnQo''@;'; put 'put ''InJlYWRhYmxlIik+MCxPZS5yZXN1bWVTY2hlZHVsZWQmJiFPZS5wYXVzZWQ/T2UuZmxvd2luZz0hMDpGZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmRmUucmVzdW1lKCl9ZnVuY3Rpb24gVWUoRmUpe0woInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLEZlLnJlYWQoMCl9ZnVuY3Rpb24g''@;'; put 'put ''b3QoRmUsT2Upe0woInJlc3VtZSIsT2UucmVhZGluZyksT2UucmVhZGluZ3x8RmUucmVhZCgwKSxPZS5yZXN1bWVTY2hlZHVsZWQ9ITEsRmUuZW1pdCgicmVzdW1lIikseGUoRmUpLE9lLmZsb3dpbmcmJiFPZS5yZWFkaW5nJiZGZS5yZWFkKDApfWZ1bmN0aW9uIHhlKEZlKXt2YXIgT2U9RmUu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGU7Zm9yKEwoImZsb3ciLE9lLmZsb3dpbmcpO09lLmZsb3dpbmcmJm51bGwhPT1GZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdmUoRmUsT2Upe3JldHVybiAwPT09T2UubGVuZ3RoP251bGw6KE9lLm9iamVjdE1vZGU/SWU9T2UuYnVmZmVyLnNoaWZ0KCk6IUZlfHxGZT49T2Uu''@;'; put 'put ''bGVuZ3RoPyhJZT1PZS5kZWNvZGVyP09lLmJ1ZmZlci5qb2luKCIiKToxPT09T2UuYnVmZmVyLmxlbmd0aD9PZS5idWZmZXIuZmlyc3QoKTpPZS5idWZmZXIuY29uY2F0KE9lLmxlbmd0aCksT2UuYnVmZmVyLmNsZWFyKCkpOkllPU9lLmJ1ZmZlci5jb25zdW1lKEZlLE9lLmRlY29kZXIpLEll''@;'; put 'put ''KTt2YXIgSWV9ZnVuY3Rpb24gWGUoRmUpe3ZhciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbmRSZWFkYWJsZSIsT2UuZW5kRW1pdHRlZCksT2UuZW5kRW1pdHRlZHx8KE9lLmVuZGVkPSEwLEkubmV4dFRpY2soemUsT2UsRmUpKX1mdW5jdGlvbiB6ZShGZSxPZSl7aWYoTCgiZW5kUmVhZGFi''@;'; put 'put ''bGVOVCIsRmUuZW5kRW1pdHRlZCxGZS5sZW5ndGgpLCFGZS5lbmRFbWl0dGVkJiYwPT09RmUubGVuZ3RoJiYoRmUuZW5kRW1pdHRlZD0hMCxPZS5yZWFkYWJsZT0hMSxPZS5lbWl0KCJlbmQiKSxGZS5hdXRvRGVzdHJveSkpe3ZhciBJZT1PZS5fd3JpdGFibGVTdGF0ZTsoIUllfHxJZS5hdXRv''@;'; put 'put ''RGVzdHJveSYmSWUuZmluaXNoZWQpJiZPZS5kZXN0cm95KCl9fWZ1bmN0aW9uIERlKEZlLE9lKXtmb3IodmFyIEllPTAsVmU9RmUubGVuZ3RoO0llPFZlO0llKyspaWYoRmVbSWVdPT09T2UpcmV0dXJuIEllO3JldHVybi0xfXAucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oRmUpe0woInJlYWQi''@;'; put 'put ''LEZlKSxGZT1wYXJzZUludChGZSwxMCk7dmFyIE9lPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9RmU7aWYoMCE9PUZlJiYoT2UuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09RmUmJk9lLm5lZWRSZWFkYWJsZSYmKCgwIT09T2UuaGlnaFdhdGVyTWFyaz9PZS5sZW5ndGg+PU9lLmhpZ2hXYXRlck1h''@;'; put 'put ''cms6T2UubGVuZ3RoPjApfHxPZS5lbmRlZCkpcmV0dXJuIEwoInJlYWQ6IGVtaXRSZWFkYWJsZSIsT2UubGVuZ3RoLE9lLmVuZGVkKSwwPT09T2UubGVuZ3RoJiZPZS5lbmRlZD9YZSh0aGlzKTptKHRoaXMpLG51bGw7aWYoMD09PShGZT1qKEZlLE9lKSkmJk9lLmVuZGVkKXJldHVybiAwPT09''@;'; put 'put ''T2UubGVuZ3RoJiZYZSh0aGlzKSxudWxsO3ZhciBrZSxWZT1PZS5uZWVkUmVhZGFibGU7cmV0dXJuIEwoIm5lZWQgcmVhZGFibGUiLFZlKSwoMD09PU9lLmxlbmd0aHx8T2UubGVuZ3RoLUZlPE9lLmhpZ2hXYXRlck1hcmspJiZMKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsVmU9ITAp''@;'; put 'put ''LE9lLmVuZGVkfHxPZS5yZWFkaW5nP0woInJlYWRpbmcgb3IgZW5kZWQiLFZlPSExKTpWZSYmKEwoImRvIHJlYWQiKSxPZS5yZWFkaW5nPSEwLE9lLnN5bmM9ITAsMD09PU9lLmxlbmd0aCYmKE9lLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChPZS5oaWdoV2F0ZXJNYXJrKSxPZS5zeW5j''@;'; put 'put ''PSExLE9lLnJlYWRpbmd8fChGZT1qKEllLE9lKSkpLG51bGw9PT0oa2U9RmU+MD92ZShGZSxPZSk6bnVsbCk/KE9lLm5lZWRSZWFkYWJsZT1PZS5sZW5ndGg8PU9lLmhpZ2hXYXRlck1hcmssRmU9MCk6KE9lLmxlbmd0aC09RmUsT2UuYXdhaXREcmFpbj0wKSwwPT09T2UubGVuZ3RoJiYoT2Uu''@;'; put 'put ''ZW5kZWR8fChPZS5uZWVkUmVhZGFibGU9ITApLEllIT09RmUmJk9lLmVuZGVkJiZYZSh0aGlzKSksbnVsbCE9PWtlJiZ0aGlzLmVtaXQoImRhdGEiLGtlKSxrZX0scC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRmUpe1RlKHRoaXMsbmV3IG5lKCJfcmVhZCgpIikpfSxwLnByb3RvdHlwZS5w''@;'; put 'put ''aXBlPWZ1bmN0aW9uKEZlLE9lKXt2YXIgSWU9dGhpcyxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChWZS5waXBlc0NvdW50KXtjYXNlIDA6VmUucGlwZXM9RmU7YnJlYWs7Y2FzZSAxOlZlLnBpcGVzPVtWZS5waXBlcyxGZV07YnJlYWs7ZGVmYXVsdDpWZS5waXBlcy5wdXNoKEZlKX1W''@;'; put 'put ''ZS5waXBlc0NvdW50Kz0xLEwoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsVmUucGlwZXNDb3VudCxPZSk7dmFyIEFlPU9lJiYhMT09PU9lLmVuZHx8RmU9PT1JLnN0ZG91dHx8RmU9PT1JLnN0ZGVycj90dDpudDtmdW5jdGlvbiBudCgpe0woIm9uZW5kIiksRmUuZW5kKCl9VmUuZW5kRW1pdHRl''@;'; put 'put ''ZD9JLm5leHRUaWNrKEFlKTpJZS5vbmNlKCJlbmQiLEFlKSxGZS5vbigidW5waXBlIixmdW5jdGlvbiBfdChIZSx1dCl7TCgib251bnBpcGUiKSxIZT09PUllJiZ1dCYmITE9PT11dC5oYXNVbnBpcGVkJiYodXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiB5dCgpe0woImNsZWFudXAiKSxGZS5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGl0KSxGZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwkZSksRmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixRZSksRmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixEdCksRmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsX3QpLEllLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlbmQiLG50KSxJZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix0dCksSWUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLE10KSx1bj0hMCxWZS5hd2FpdERyYWluJiYoIUZlLl93cml0YWJsZVN0YXRlfHxGZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZRZSgpfSgpKX0pO3ZhciBRZT1mdW5jdGlv''@;'; put 'put ''biBzZShGZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEllPUZlLl9yZWFkYWJsZVN0YXRlO0woInBpcGVPbkRyYWluIixJZS5hd2FpdERyYWluKSxJZS5hd2FpdERyYWluJiZJZS5hd2FpdERyYWluLS0sMD09PUllLmF3YWl0RHJhaW4mJkIoRmUsImRhdGEiKSYmKEllLmZsb3dpbmc9ITAseGUo''@;'; put 'put ''RmUpKX19KEllKTtGZS5vbigiZHJhaW4iLFFlKTt2YXIgdW49ITE7ZnVuY3Rpb24gTXQoSGUpe0woIm9uZGF0YSIpO3ZhciB1dD1GZS53cml0ZShIZSk7TCgiZGVzdC53cml0ZSIsdXQpLCExPT09dXQmJigoMT09PVZlLnBpcGVzQ291bnQmJlZlLnBpcGVzPT09RmV8fFZlLnBpcGVzQ291bnQ+''@;'; put 'put ''MSYmLTEhPT1EZShWZS5waXBlcyxGZSkpJiYhdW4mJihMKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLFZlLmF3YWl0RHJhaW4pLFZlLmF3YWl0RHJhaW4rKyksSWUucGF1c2UoKSl9ZnVuY3Rpb24gRHQoSGUpe0woIm9uZXJyb3IiLEhlKSx0dCgpLEZlLnJlbW92ZUxpc3RlbmVyKCJl''@;'; put 'put ''cnJvciIsRHQpLDA9PT1CKEZlLCJlcnJvciIpJiZUZShGZSxIZSl9ZnVuY3Rpb24gaXQoKXtGZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwkZSksdHQoKX1mdW5jdGlvbiAkZSgpe0woIm9uZmluaXNoIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpdCksdHQoKX1mdW5jdGlvbiB0dCgp''@;'; put 'put ''e0woInVucGlwZSIpLEllLnVucGlwZShGZSl9cmV0dXJuIEllLm9uKCJkYXRhIixNdCksZnVuY3Rpb24gamUoRmUsT2UsSWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIEZlLnByZXBlbmRMaXN0ZW5lcihPZSxJZSk7RmUuX2V2ZW50cyYmRmUuX2V2''@;'; put 'put ''ZW50c1tPZV0/QXJyYXkuaXNBcnJheShGZS5fZXZlbnRzW09lXSk/RmUuX2V2ZW50c1tPZV0udW5zaGlmdChJZSk6RmUuX2V2ZW50c1tPZV09W0llLEZlLl9ldmVudHNbT2VdXTpGZS5vbihPZSxJZSl9KEZlLCJlcnJvciIsRHQpLEZlLm9uY2UoImNsb3NlIixpdCksRmUub25jZSgiZmluaXNo''@;'; put 'put ''IiwkZSksRmUuZW1pdCgicGlwZSIsSWUpLFZlLmZsb3dpbmd8fChMKCJwaXBlIHJlc3VtZSIpLEllLnJlc3VtZSgpKSxGZX0scC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKEZlKXt2YXIgT2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT17aGFzVW5waXBlZDohMX07aWYoMD09PU9lLnBpcGVz''@;'; put 'put ''Q291bnQpcmV0dXJuIHRoaXM7aWYoMT09PU9lLnBpcGVzQ291bnQpcmV0dXJuIEZlJiZGZSE9PU9lLnBpcGVzfHwoRmV8fChGZT1PZS5waXBlcyksT2UucGlwZXM9bnVsbCxPZS5waXBlc0NvdW50PTAsT2UuZmxvd2luZz0hMSxGZSYmRmUuZW1pdCgidW5waXBlIix0aGlzLEllKSksdGhpcztp''@;'; put 'put ''ZighRmUpe3ZhciBWZT1PZS5waXBlcyxrZT1PZS5waXBlc0NvdW50O09lLnBpcGVzPW51bGwsT2UucGlwZXNDb3VudD0wLE9lLmZsb3dpbmc9ITE7Zm9yKHZhciBBZT0wO0FlPGtlO0FlKyspVmVbQWVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZh''@;'; put 'put ''ciBfdD1EZShPZS5waXBlcyxGZSk7cmV0dXJuLTE9PT1fdHx8KE9lLnBpcGVzLnNwbGljZShfdCwxKSxPZS5waXBlc0NvdW50LT0xLDE9PT1PZS5waXBlc0NvdW50JiYoT2UucGlwZXM9T2UucGlwZXNbMF0pLEZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXN9LHAucHJvdG90eXBlLmFk''@;'; put 'put ''ZExpc3RlbmVyPXAucHJvdG90eXBlLm9uPWZ1bmN0aW9uKEZlLE9lKXt2YXIgSWU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLEZlLE9lKSxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PUZlPyhWZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJl''@;'; put 'put ''YWRhYmxlIik+MCwhMSE9PVZlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1GZSYmIVZlLmVuZEVtaXR0ZWQmJiFWZS5yZWFkYWJsZUxpc3RlbmluZyYmKFZlLnJlYWRhYmxlTGlzdGVuaW5nPVZlLm5lZWRSZWFkYWJsZT0hMCxWZS5mbG93aW5nPSExLFZlLmVtaXR0ZWRS''@;'; put 'put ''ZWFkYWJsZT0hMSxMKCJvbiByZWFkYWJsZSIsVmUubGVuZ3RoLFZlLnJlYWRpbmcpLFZlLmxlbmd0aD9tKHRoaXMpOlZlLnJlYWRpbmd8fEkubmV4dFRpY2soVWUsdGhpcykpLEllfSxwLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihGZSxPZSl7dmFyIEllPXcucHJvdG90eXBl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxGZSxPZSk7cmV0dXJuInJlYWRhYmxlIj09PUZlJiZJLm5leHRUaWNrKHdlLHRoaXMpLEllfSxwLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oRmUpe3ZhciBPZT13LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09RmV8fHZvaWQgMD09PUZlKSYmSS5uZXh0VGljayh3ZSx0aGlzKSxPZX0scC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEZlLmZsb3dpbmd8fChMKCJyZXN1''@;'; put 'put ''bWUiKSxGZS5mbG93aW5nPSFGZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbiBKZShGZSxPZSl7T2UucmVzdW1lU2NoZWR1bGVkfHwoT2UucmVzdW1lU2NoZWR1bGVkPSEwLEkubmV4dFRpY2sob3QsRmUsT2UpKX0odGhpcyxGZSkpLEZlLnBhdXNlZD0hMSx0aGlzfSxwLnByb3RvdHlwZS5w''@;'; put 'put ''YXVzZT1mdW5jdGlvbigpe3JldHVybiBMKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihMKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQo''@;'; put 'put ''InBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LHAucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oRmUpe3ZhciBPZT10aGlzLEllPXRoaXMuX3JlYWRhYmxlU3RhdGUsVmU9ITE7Zm9yKHZhciBrZSBpbiBGZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKEwoIndyYXBw''@;'; put 'put ''ZWQgZW5kIiksSWUuZGVjb2RlciYmIUllLmVuZGVkKXt2YXIgX3Q9SWUuZGVjb2Rlci5lbmQoKTtfdCYmX3QubGVuZ3RoJiZPZS5wdXNoKF90KX1PZS5wdXNoKG51bGwpfSksRmUub24oImRhdGEiLGZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIGRhdGEiKSxJZS5kZWNvZGVyJiYoX3Q9SWUuZGVj''@;'; put 'put ''b2Rlci53cml0ZShfdCkpLEllLm9iamVjdE1vZGUmJm51bGw9PV90fHwhKEllLm9iamVjdE1vZGV8fF90JiZfdC5sZW5ndGgpfHxPZS5wdXNoKF90KXx8KFZlPSEwLEZlLnBhdXNlKCkpfSksRmUpdm9pZCAwPT09dGhpc1trZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBGZVtrZV0mJih0aGlzW2tl''@;'; put 'put ''XT1mdW5jdGlvbihudCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZlW250XS5hcHBseShGZSxhcmd1bWVudHMpfX0oa2UpKTtmb3IodmFyIEFlPTA7QWU8U2UubGVuZ3RoO0FlKyspRmUub24oU2VbQWVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsU2VbQWVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9''@;'; put 'put ''ZnVuY3Rpb24oX3Qpe0woIndyYXBwZWQgX3JlYWQiLF90KSxWZSYmKFZlPSExLEZlLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHAucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1tZSYmKG1lPXko''@;'; put 'put ''NTg1MCkpLG1lKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFi''@;'; put 'put ''bGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oT2Upe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9T2UpfX0pLHAuX2Zyb21MaXN0PXZl''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocC5mcm9tPWZ1bmN0aW9uKEZl''@;'; put 'put ''LE9lKXtyZXR1cm4gdm9pZCAwPT09X2UmJihfZT15KDUxNjcpKSxfZShwLEZlLE9lKX0pfSw0NjA1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Tzt2YXIgST15KDQyODEpLnEsXz1JLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGc9SS5FUlJfTVVMVElQTEVfQ0FMTEJB''@;'; put 'put ''Q0ssQj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdz1JLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxQPXkoNjc1Myk7ZnVuY3Rpb24gRihMLEspe3ZhciBVPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1UudHJhbnNmb3JtaW5nPSExO3ZhciBXPVUud3JpdGVjYjtpZihu''@;'; put 'put ''dWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IGcpO1Uud3JpdGVjaHVuaz1udWxsLFUud3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxXKEwpO3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7WS5yZWFkaW5nPSExLChZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8''@;'; put 'put ''WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO1AuY2FsbCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyks''@;'; put 'put ''bmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUwudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHopfWZ1bmN0aW9uIHooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0''@;'; put 'put ''aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/Tih0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxVKXtOKEwsSyxVKX0pfWZ1bmN0aW9uIE4oTCxLLFUpe2lmKEspcmV0dXJuIEwuZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVUmJkwucHVzaChV''@;'; put 'put ''KSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihMLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEI7cmV0dXJuIEwucHVzaChudWxsKX15KDU3MTcpKE8sUCksTy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLl90cmFu''@;'; put 'put ''c2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEwsSyl9LE8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxLLFUpe1UobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEwsSyxVKXt2YXIg''@;'; put 'put ''Vz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihXLndyaXRlY2I9VSxXLndyaXRlY2h1bms9TCxXLndyaXRlZW5jb2Rpbmc9SywhVy50cmFuc2Zvcm1pbmcpe3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFcubmVlZFRyYW5zZm9ybXx8WS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdh''@;'; put 'put ''dGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX19LE8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1p''@;'; put 'put ''bmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxPLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihMLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxMLGZ1bmN0aW9uKFUpe0soVSl9KX19LDQyMjk6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEIsST15KDQxNTUpO2Z1bmN0aW9uIGcoeGUpe3ZhciB2ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBvdCh4ZSx2ZSxYZSl7dmFyIHplPXhlLmVudHJ5O2Zvcih4''@;'; put 'put ''ZS5lbnRyeT1udWxsO3plOyl7dmFyIERlPXplLmNhbGxiYWNrO3ZlLnBlbmRpbmdjYi0tLERlKFhlKSx6ZT16ZS5uZXh0fXZlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXhlfSh2ZSx4ZSl9fXVlLmV4cG9ydHM9VixWLldyaXRhYmxlU3RhdGU9U2U7dmFyIGplLHc9e2RlcHJlY2F0ZTp5KDQ5''@;'; put 'put ''MjcpfSxQPXkoMjUwMyksRj15KDg3NjQpLkJ1ZmZlcixPPSh0eXBlb2YgeS5nPCJ1Ij95Lmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTD15KDExOTUpLFU9eSgyNDU3KS5nZXRIaWdoV2F0ZXJNYXJr''@;'; put 'put ''LFc9eSg0MjgxKS5xLFk9Vy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxxPVcuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZWU9Vy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssSj1XLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsbmU9Vy5FUlJfU1RSRUFNX0RFU1RST1lFRCxpZT1XLkVSUl9TVFJFQU1f''@;'; put 'put ''TlVMTF9WQUxVRVMsbGU9Vy5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxtZT1XLkVSUl9VTktOT1dOX0VOQ09ESU5HLF9lPUwuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gVGUoKXt9ZnVuY3Rpb24gU2UoeGUsdmUsWGUpe0I9Qnx8eSg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBYZSYmKFhl''@;'; put 'put ''PXZlIGluc3RhbmNlb2YgQiksdGhpcy5vYmplY3RNb2RlPSEhKHhlPXhlfHx7fSkub2JqZWN0TW9kZSxYZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEheGUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9VSh0aGlzLHhlLCJ3cml0YWJsZUhpZ2hX''@;'; put 'put ''YXRlck1hcmsiLFhlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PXhlLmRlY29kZVN0cmluZ3MpLHRoaXMu''@;'; put 'put ''ZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oRGUpeyFmdW5jdGlvbiBFKHhl''@;'; put 'put ''LHZlKXt2YXIgWGU9eGUuX3dyaXRhYmxlU3RhdGUsemU9WGUuc3luYyxEZT1YZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEZSl0aHJvdyBuZXcgZWU7aWYoZnVuY3Rpb24gaih4ZSl7eGUud3JpdGluZz0hMSx4ZS53cml0ZWNiPW51bGwseGUubGVuZ3RoLT14ZS53cml0ZWxlbix4''@;'; put 'put ''ZS53cml0ZWxlbj0wfShYZSksdmUpIWZ1bmN0aW9uIEgoeGUsdmUsWGUsemUsRGUpey0tdmUucGVuZGluZ2NiLFhlPyhJLm5leHRUaWNrKERlLHplKSxJLm5leHRUaWNrKFVlLHhlLHZlKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoeGUsemUpKTooRGUoemUpLHhlLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZSh4ZSx6ZSksVWUoeGUsdmUpKX0oeGUsWGUsemUsdmUsRGUpO2Vsc2V7dmFyIEZlPXRlKFhlKXx8eGUuZGVzdHJveWVkOyFGZSYmIVhlLmNvcmtlZCYmIVhlLmJ1ZmZlclByb2Nlc3NpbmcmJlhlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUoeGUs''@;'; put 'put ''WGUpLHplP0kubmV4dFRpY2sobSx4ZSxYZSxGZSxEZSk6bSh4ZSxYZSxGZSxEZSl9fSh2ZSxEZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAs''@;'; put 'put ''dGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PXhlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEheGUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBn''@;'; put 'put ''KHRoaXMpfWZ1bmN0aW9uIFYoeGUpe3ZhciB2ZT10aGlzIGluc3RhbmNlb2YoQj1CfHx5KDY3NTMpKTtpZighdmUmJiFqZS5jYWxsKFYsdGhpcykpcmV0dXJuIG5ldyBWKHhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBTZSh4ZSx0aGlzLHZlKSx0aGlzLndyaXRhYmxlPSEwLHhlJiYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHhlLndyaXRlJiYodGhpcy5fd3JpdGU9eGUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZXYmJih0aGlzLl93cml0ZXY9eGUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSksImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHhlLmZpbmFsJiYodGhpcy5fZmluYWw9eGUuZmluYWwpKSxQLmNhbGwodGhpcyl9ZnVuY3Rpb24gVCh4ZSx2ZSxYZSx6ZSxEZSxGZSxPZSl7dmUud3JpdGVsZW49emUsdmUud3JpdGVjYj1PZSx2ZS53cml0aW5nPSEwLHZlLnN5bmM9ITAsdmUuZGVzdHJveWVkP3Zl''@;'; put 'put ''Lm9ud3JpdGUobmV3IG5lKCJ3cml0ZSIpKTpYZT94ZS5fd3JpdGV2KERlLHZlLm9ud3JpdGUpOnhlLl93cml0ZShEZSxGZSx2ZS5vbndyaXRlKSx2ZS5zeW5jPSExfWZ1bmN0aW9uIG0oeGUsdmUsWGUsemUpe1hlfHxmdW5jdGlvbiBBKHhlLHZlKXswPT09dmUubGVuZ3RoJiZ2ZS5uZWVkRHJh''@;'; put 'put ''aW4mJih2ZS5uZWVkRHJhaW49ITEseGUuZW1pdCgiZHJhaW4iKSl9KHhlLHZlKSx2ZS5wZW5kaW5nY2ItLSx6ZSgpLFVlKHhlLHZlKX1mdW5jdGlvbiBhZSh4ZSx2ZSl7dmUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgWGU9dmUuYnVmZmVyZWRSZXF1ZXN0O2lmKHhlLl93cml0ZXYmJlhlJiZY''@;'; put 'put ''ZS5uZXh0KXt2YXIgRGU9bmV3IEFycmF5KHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxGZT12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7RmUuZW50cnk9WGU7Zm9yKHZhciBPZT0wLEllPSEwO1hlOylEZVtPZV09WGUsWGUuaXNCdWZ8fChJZT0hMSksWGU9WGUubmV4dCxPZSs9MTtEZS5hbGxCdWZm''@;'; put 'put ''ZXJzPUllLFQoeGUsdmUsITAsdmUubGVuZ3RoLERlLCIiLEZlLmZpbmlzaCksdmUucGVuZGluZ2NiKyssdmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLEZlLm5leHQ/KHZlLmNvcmtlZFJlcXVlc3RzRnJlZT1GZS5uZXh0LEZlLm5leHQ9bnVsbCk6dmUuY29ya2VkUmVxdWVzdHNGcmVlPW5l''@;'; put 'put ''dyBnKHZlKSx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtYZTspe3ZhciBWZT1YZS5jaHVuaztpZihUKHhlLHZlLCExLHZlLm9iamVjdE1vZGU/MTpWZS5sZW5ndGgsVmUsWGUuZW5jb2RpbmcsWGUuY2FsbGJhY2spLFhlPVhlLm5leHQsdmUuYnVmZmVyZWRSZXF1ZXN0Q291''@;'; put 'put ''bnQtLSx2ZS53cml0aW5nKWJyZWFrfW51bGw9PT1YZSYmKHZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dmUuYnVmZmVyZWRSZXF1ZXN0PVhlLHZlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gdGUoeGUpe3JldHVybiB4ZS5lbmRpbmcmJjA9PT14ZS5sZW5ndGgmJm51bGw9PT14''@;'; put 'put ''ZS5idWZmZXJlZFJlcXVlc3QmJiF4ZS5maW5pc2hlZCYmIXhlLndyaXRpbmd9ZnVuY3Rpb24gc2UoeGUsdmUpe3hlLl9maW5hbChmdW5jdGlvbihYZSl7dmUucGVuZGluZ2NiLS0sWGUmJl9lKHhlLFhlKSx2ZS5wcmVmaW5pc2hlZD0hMCx4ZS5lbWl0KCJwcmVmaW5pc2giKSxVZSh4ZSx2ZSl9''@;'; put 'put ''KX1mdW5jdGlvbiBVZSh4ZSx2ZSl7dmFyIFhlPXRlKHZlKTtpZihYZSYmKGZ1bmN0aW9uIHdlKHhlLHZlKXshdmUucHJlZmluaXNoZWQmJiF2ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZS5fZmluYWx8fHZlLmRlc3Ryb3llZD8odmUucHJlZmluaXNoZWQ9ITAseGUuZW1p''@;'; put 'put ''dCgicHJlZmluaXNoIikpOih2ZS5wZW5kaW5nY2IrKyx2ZS5maW5hbENhbGxlZD0hMCxJLm5leHRUaWNrKHNlLHhlLHZlKSkpfSh4ZSx2ZSksMD09PXZlLnBlbmRpbmdjYiYmKHZlLmZpbmlzaGVkPSEwLHhlLmVtaXQoImZpbmlzaCIpLHZlLmF1dG9EZXN0cm95KSkpe3ZhciB6ZT14ZS5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZTsoIXplfHx6ZS5hdXRvRGVzdHJveSYmemUuZW5kRW1pdHRlZCkmJnhlLmRlc3Ryb3koKX1yZXR1cm4gWGV9eSg1NzE3KShWLFApLFNlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHZlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LFhlPVtdO3ZlOylYZS5w''@;'; put 'put ''dXNoKHZlKSx2ZT12ZS5uZXh0O3JldHVybiBYZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OncuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIg''@;'; put 'put ''aXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5''@;'; put 'put ''bWJvbC5oYXNJbnN0YW5jZV0/KGplPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odmUpe3JldHVybiEhamUuY2FsbCh0aGlzLHZlKXx8dGhpcz09PVYmJnZlJiZ2''@;'; put 'put ''ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFNlfX0pKTpqZT1mdW5jdGlvbih2ZSl7cmV0dXJuIHZlIGluc3RhbmNlb2YgdGhpc30sVi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe19lKHRoaXMsbmV3IEopfSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih4ZSx2ZSxYZSl7dmFyIHpl''@;'; put 'put ''PXRoaXMuX3dyaXRhYmxlU3RhdGUsRGU9ITEsRmU9IXplLm9iamVjdE1vZGUmJmZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBPfSh4ZSk7cmV0dXJuIEZlJiYhRi5pc0J1ZmZlcih4ZSkmJih4ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9t''@;'; put 'put ''KHhlKX0oeGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxGZT92ZT0iYnVmZmVyIjp2ZXx8KHZlPXplLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIFhlJiYoWGU9VGUpLHplLmVuZGluZz9mdW5jdGlvbiBwKHhlLHZlKXt2YXIgWGU9bmV3IGxl''@;'; put 'put ''O19lKHhlLFhlKSxJLm5leHRUaWNrKHZlLFhlKX0odGhpcyxYZSk6KEZlfHxmdW5jdGlvbiBiKHhlLHZlLFhlLHplKXt2YXIgRGU7cmV0dXJuIG51bGw9PT1YZT9EZT1uZXcgaWU6InN0cmluZyIhPXR5cGVvZiBYZSYmIXZlLm9iamVjdE1vZGUmJihEZT1uZXcgWSgiY2h1bmsiLFsic3RyaW5n''@;'; put 'put ''IiwiQnVmZmVyIl0sWGUpKSwhRGV8fChfZSh4ZSxEZSksSS5uZXh0VGljayh6ZSxEZSksITEpfSh0aGlzLHplLHhlLFhlKSkmJih6ZS5wZW5kaW5nY2IrKyxEZT1mdW5jdGlvbiBDKHhlLHZlLFhlLHplLERlLEZlKXtpZighWGUpe3ZhciBPZT1mdW5jdGlvbiB4KHhlLHZlLFhlKXtyZXR1cm4h''@;'; put 'put ''eGUub2JqZWN0TW9kZSYmITEhPT14ZS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9Ri5mcm9tKHZlLFhlKSksdmV9KHZlLHplLERlKTt6ZSE9PU9lJiYoWGU9ITAsRGU9ImJ1ZmZlciIsemU9T2UpfXZhciBJZT12ZS5vYmplY3RNb2RlPzE6emUubGVuZ3RoO3ZlLmxl''@;'; put 'put ''bmd0aCs9SWU7dmFyIFZlPXZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrO2lmKFZlfHwodmUubmVlZERyYWluPSEwKSx2ZS53cml0aW5nfHx2ZS5jb3JrZWQpe3ZhciBrZT12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3ZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnplLGVuY29kaW5nOkRl''@;'; put 'put ''LGlzQnVmOlhlLGNhbGxiYWNrOkZlLG5leHQ6bnVsbH0sa2U/a2UubmV4dD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnZlLmJ1ZmZlcmVkUmVxdWVzdD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgVCh4ZSx2ZSwhMSxJZSx6ZSxEZSxGZSk7''@;'; put 'put ''cmV0dXJuIFZlfSh0aGlzLHplLEZlLHhlLHZlLFhlKSksRGV9LFYucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxWLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5fd3JpdGFibGVTdGF0ZTt4ZS5jb3JrZWQmJih4''@;'; put 'put ''ZS5jb3JrZWQtLSwheGUud3JpdGluZyYmIXhlLmNvcmtlZCYmIXhlLmJ1ZmZlclByb2Nlc3NpbmcmJnhlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUodGhpcyx4ZSkpfSxWLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe2lmKCJzdHJpbmciPT10eXBlb2YgdmUmJih2ZT12''@;'; put 'put ''ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh2ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBtZSh2ZSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXZlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLFYucHJv''@;'; put 'put ''dG90eXBlLl93cml0ZT1mdW5jdGlvbih4ZSx2ZSxYZSl7WGUobmV3IHEoIl93cml0ZSgpIikpfSxWLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsVi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHhlLHZlLFhlKXt2YXIgemU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgeGU/KFhlPXhlLHhlPW51bGwsdmU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksbnVsbCE9eGUmJnRoaXMud3JpdGUoeGUsdmUpLHplLmNvcmtlZCYmKHplLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHplLmVuZGluZ3x8ZnVuY3Rpb24gSmUoeGUsdmUs''@;'; put 'put ''WGUpe3ZlLmVuZGluZz0hMCxVZSh4ZSx2ZSksWGUmJih2ZS5maW5pc2hlZD9JLm5leHRUaWNrKFhlKTp4ZS5vbmNlKCJmaW5pc2giLFhlKSksdmUuZW5kZWQ9ITAseGUud3JpdGFibGU9ITF9KHRoaXMsemUsWGUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3Jp''@;'; put 'put ''dGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZv''@;'; put 'put ''aWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksVi5wcm90b3R5cGUuZGVzdHJveT1MLmRlc3Ryb3ks''@;'; put 'put ''Vi5wcm90b3R5cGUuX3VuZGVzdHJveT1MLnVuZGVzdHJveSxWLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4ZSx2ZSl7dmUoeGUpfX0sNTg1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPXkoNDE1NSk7ZnVuY3Rpb24gZyhsZSxtZSxfZSl7cmV0dXJuIG1lPWZ1bmN0aW9u''@;'; put 'put ''IEIobGUpe3ZhciBtZT1mdW5jdGlvbiB3KGxlLG1lKXtpZigib2JqZWN0IiE9dHlwZW9mIGxlfHxudWxsPT09bGUpcmV0dXJuIGxlO3ZhciBfZT1sZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2UuY2FsbChsZSxtZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIFRlKXJldHVybiBUZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW1lP1N0cmluZzpOdW1iZXIpKGxlKX0obGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbWU/bWU6U3RyaW5nKG1lKX0obWUpLG1lIGluIGxlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSxtZSx7dmFsdWU6X2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsZVttZV09X2UsbGV9dmFyIFA9eSg4NjEwKSxGPVN5bWJvbCgibGFzdFJlc29sdmUi''@;'; put 'put ''KSxPPVN5bWJvbCgibGFzdFJlamVjdCIpLHo9U3ltYm9sKCJlcnJvciIpLE49U3ltYm9sKCJlbmRlZCIpLEw9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEs9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksVT1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIFcobGUsbWUpe3JldHVybnt2YWx1ZTpsZSxk''@;'; put 'put ''b25lOm1lfX1mdW5jdGlvbiBZKGxlKXt2YXIgbWU9bGVbRl07aWYobnVsbCE9PW1lKXt2YXIgX2U9bGVbVV0ucmVhZCgpO251bGwhPT1fZSYmKGxlW0xdPW51bGwsbGVbRl09bnVsbCxsZVtPXT1udWxsLG1lKFcoX2UsITEpKSl9fWZ1bmN0aW9uIHEobGUpe0kubmV4dFRpY2soWSxsZSl9dmFy''@;'; put 'put ''IEo9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksbmU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChnKF89e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tVXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLF9lPXRoaXNbel07aWYobnVsbCE9PV9lKXJldHVybiBQcm9taXNl''@;'; put 'put ''LnJlamVjdChfZSk7aWYodGhpc1tOXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcodm9pZCAwLCEwKSk7aWYodGhpc1tVXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFYscCl7SS5uZXh0VGljayhmdW5jdGlvbigpe21lW3pdP3AobWVbel0pOlYoVyh2b2lkIDAsITAp''@;'; put 'put ''KX0pfSk7dmFyIFNlLFRlPXRoaXNbTF07aWYoVGUpU2U9bmV3IFByb21pc2UoZnVuY3Rpb24gZWUobGUsbWUpe3JldHVybiBmdW5jdGlvbihfZSxUZSl7bGUudGhlbihmdW5jdGlvbigpe21lW05dP19lKFcodm9pZCAwLCEwKSk6bWVbS10oX2UsVGUpfSxUZSl9fShUZSx0aGlzKSk7ZWxzZXt2''@;'; put 'put ''YXIgamU9dGhpc1tVXS5yZWFkKCk7aWYobnVsbCE9PWplKXJldHVybiBQcm9taXNlLnJlc29sdmUoVyhqZSwhMSkpO1NlPW5ldyBQcm9taXNlKHRoaXNbS10pfXJldHVybiB0aGlzW0xdPVNlLFNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGcoXywi''@;'; put 'put ''cmV0dXJuIixmdW5jdGlvbigpe3ZhciBtZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfZSxUZSl7bWVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKFNlKXtTZT9UZShTZSk6X2UoVyh2b2lkIDAsITApKX0pfSl9KSxfKSxKKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKG1lKXt2YXIg''@;'; put 'put ''X2UsVGU9T2JqZWN0LmNyZWF0ZShuZSwoZyhfZT17fSxVLHt2YWx1ZTptZSx3cml0YWJsZTohMH0pLGcoX2UsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2UsTyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2Useix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2UsTix7''@;'; put 'put ''dmFsdWU6bWUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLGcoX2UsSyx7dmFsdWU6ZnVuY3Rpb24oamUsVil7dmFyIHA9VGVbVV0ucmVhZCgpO3A/KFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLGplKFcocCwhMSkpKTooVGVbRl09amUsVGVbT109Vil9''@;'; put 'put ''LHdyaXRhYmxlOiEwfSksX2UpKTtyZXR1cm4gVGVbTF09bnVsbCxQKG1lLGZ1bmN0aW9uKFNlKXtpZihTZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVNlLmNvZGUpe3ZhciBqZT1UZVtPXTtyZXR1cm4gbnVsbCE9PWplJiYoVGVbTF09bnVsbCxUZVtGXT1udWxsLFRlW09dPW51''@;'; put 'put ''bGwsamUoU2UpKSx2b2lkKFRlW3pdPVNlKX12YXIgVj1UZVtGXTtudWxsIT09ViYmKFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLFYoVyh2b2lkIDAsITApKSksVGVbTl09ITB9KSxtZS5vbigicmVhZGFibGUiLHEuYmluZChudWxsLFRlKSksVGV9fSw3MzI3Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoWSxxKXt2YXIgZWU9T2JqZWN0LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhZKTtxJiYoSj1KLmZpbHRlcihmdW5jdGlvbihuZSl7cmV0dXJuIE9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxuZSkuZW51bWVyYWJsZX0pKSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiBfKFkpe2Zvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBlZT1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1lbnRzW3FdOnt9''@;'; put 'put ''O3ElMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7ZyhZLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlZSkpOkkoT2JqZWN0KGVl''@;'; put 'put ''KSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFl9ZnVuY3Rpb24gZyhZLHEsZWUpe3JldHVybihxPUYocSkpaW4gWT9PYmplY3QuZGVmaW5lUHJvcGVydHkoWSxxLHt2''@;'; put 'put ''YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOllbcV09ZWUsWX1mdW5jdGlvbiB3KFkscSl7Zm9yKHZhciBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe3ZhciBKPXFbZWVdO0ouZW51bWVyYWJsZT1KLmVudW1lcmFibGV8fCExLEouY29uZmlndXJhYmxl''@;'; put 'put ''PSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksRihKLmtleSksSil9fWZ1bmN0aW9uIEYoWSl7dmFyIHE9ZnVuY3Rpb24gTyhZLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgWXx8bnVsbD09PVkpcmV0dXJuIFk7dmFyIGVlPVlbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChZLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShZKX0oWSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBOPXkoODc2NCkuQnVmZmVyLEs9eSgyMzYxKS5pbnNwZWN0LFU9SyYmSy5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBXKFkscSxlZSl7Ti5w''@;'; put 'put ''cm90b3R5cGUuY29weS5jYWxsKFkscSxlZSl9dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFkoKXsoZnVuY3Rpb24gQihZLHEpe2lmKCEoWSBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZ''@;'; put 'put ''KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBQKFkscSxlZSl7cSYmdyhZLnByb3RvdHlwZSxxKSxlZSYmdyhZLGVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oWSxbe2tleToi''@;'; put 'put ''cHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1KOnRoaXMuaGVhZD1KLHRoaXMudGFpbD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2Rh''@;'; put 'put ''dGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMu''@;'; put 'put ''aGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0''@;'; put 'put ''aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBKPXRoaXMuaGVhZCxuZT0iIitKLmRhdGE7Sj1KLm5leHQ7KW5lKz1lZStKLmRhdGE7cmV0dXJuIG5lfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBO''@;'; put 'put ''LmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCksbmU9dGhpcy5oZWFkLGllPTA7bmU7KVcobmUuZGF0YSxKLGllKSxpZSs9bmUuZGF0YS5sZW5ndGgsbmU9bmUubmV4dDtyZXR1cm4gSn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciBuZTty''@;'; put 'put ''ZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhuZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOm5lPWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhl''@;'; put 'put ''ZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxuZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlzLmhlYWQsbmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5n''@;'; put 'put ''dGg7Sj1KLm5leHQ7KXt2YXIgbGU9Si5kYXRhLG1lPWVlPmxlLmxlbmd0aD9sZS5sZW5ndGg6ZWU7aWYoaWUrPW1lPT09bGUubGVuZ3RoP2xlOmxlLnNsaWNlKDAsZWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytuZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9''@;'; put 'put ''bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT1sZS5zbGljZShtZSkpO2JyZWFrfSsrbmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1uZSxpZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9jVW5zYWZlKGVlKSxuZT10aGlzLmhlYWQsaWU9MTtmb3IobmUu''@;'; put 'put ''ZGF0YS5jb3B5KEopLGVlLT1uZS5kYXRhLmxlbmd0aDtuZT1uZS5uZXh0Oyl7dmFyIGxlPW5lLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihsZS5jb3B5KEosSi5sZW5ndGgtZWUsMCxtZSksMD09KGVlLT1tZSkpe21lPT09bGUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1u''@;'; put 'put ''ZS5uZXh0P25lLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9bmUsbmUuZGF0YT1sZS5zbGljZShtZSkpO2JyZWFrfSsraWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0se2tleTpVLHZhbHVlOmZ1bmN0aW9uKGVlLEope3JldHVybiBLKHRoaXMsXyhfKHt9LEopLHt9LHtkZXB0''@;'; put 'put ''aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFl9KCl9LDExOTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtmdW5jdGlvbiBnKE8seil7UChPLHopLEIoTyl9ZnVuY3Rpb24gQihPKXtPLl93cml0YWJsZVN0YXRlJiYhTy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8''@;'; put 'put ''fE8uX3JlYWRhYmxlU3RhdGUmJiFPLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8Ty5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIFAoTyx6KXtPLmVtaXQoImVycm9yIix6KX11ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8oTyx6KXt2YXIgTj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KHo/eihPKTpPJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soUCx0aGlzLE8pKTpJLm5leHRUaWNrKFAsdGhpcyxPKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KE98fG51bGwsZnVuY3Rpb24oVSl7IXomJlU/Ti5fd3JpdGFibGVTdGF0ZT9OLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9JLm5leHRUaWNrKEIsTik6KE4uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEku''@;'; put 'put ''bmV4dFRpY2soZyxOLFUpKTpJLm5leHRUaWNrKGcsTixVKTp6PyhJLm5leHRUaWNrKEIsTikseihVKSk6SS5uZXh0VGljayhCLE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB3KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5l''@;'; put 'put ''cnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBGKE8seil7dmFyIE49Ty5fcmVhZGFibGVTdGF0ZSxMPU8uX3dyaXRhYmxlU3RhdGU7TiYmTi5hdXRvRGVzdHJveXx8TCYmTC5hdXRvRGVzdHJveT9PLmRlc3Ryb3koeik6Ty5lbWl0KCJlcnJvciIseil9fX0sODYxMDoo''@;'; put 'put ''dWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gZygpe311ZS5leHBvcnRzPWZ1bmN0aW9uIHcoUCxGLE8pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksTz1m''@;'; put 'put ''dW5jdGlvbiBfKFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFGKXtGPSEwO2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KE8pLE49MDtOPE87TisrKXpbTl09YXJndW1lbnRzW05dO1AuYXBwbHkodGhpcyx6KX19fShPfHxnKTt2YXIgej1GLnJlYWRhYmxl''@;'; put 'put ''fHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxlfHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTD1mdW5jdGlvbigpe1Aud3JpdGFibGV8fFUoKX0sSz1QLl93cml0YWJsZVN0YXRlJiZQLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtOPSEx''@;'; put 'put ''LEs9ITAsenx8Ty5jYWxsKFApfSxXPVAuX3JlYWRhYmxlU3RhdGUmJlAuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxZPWZ1bmN0aW9uKCl7ej0hMSxXPSEwLE58fE8uY2FsbChQKX0scT1mdW5jdGlvbihpZSl7Ty5jYWxsKFAsaWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYm''@;'; put 'put ''IVc/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFibGVTdGF0ZXx8IVAuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1''@;'; put 'put ''bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsVSl9O3JldHVybiBmdW5jdGlvbiBCKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAuYWJvcnR9KFApPyhQLm9uKCJjb21wbGV0ZSIsVSksUC5vbigiYWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIs''@;'; put 'put ''SikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixMKSxQLm9uKCJjbG9zZSIsTCkpLFAub24oImVuZCIsWSksUC5vbigiZmluaXNoIixVKSwhMSE9PUYuZXJyb3ImJlAub24oImVycm9yIixxKSxQLm9uKCJjbG9zZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''Y29tcGxldGUiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSksUC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTCksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwp''@;'; put 'put ''LFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGVlKX19fSw1MTY3OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''UmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJLGc9eSg0MjgxKS5xLEI9Zy5FUlJfTUlTU0lOR19BUkdTLHc9Zy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBQKFUpe2lmKFUpdGhy''@;'; put 'put ''b3cgVX1mdW5jdGlvbiB6KFUpe1UoKX1mdW5jdGlvbiBOKFUsVyl7cmV0dXJuIFUucGlwZShXKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEsoKXtmb3IodmFyIFU9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShVKSxZPTA7WTxVO1krKylXW1ldPWFyZ3VtZW50c1tZXTt2YXIgcT1mdW5jdGlv''@;'; put 'put ''biBMKFUpe3JldHVybiBVLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFVbVS5sZW5ndGgtMV0/VS5wb3AoKTpQfShXKTtpZihBcnJheS5pc0FycmF5KFdbMF0pJiYoVz1XWzBdKSxXLmxlbmd0aDwyKXRocm93IG5ldyBCKCJzdHJlYW1zIik7dmFyIGVlLEo9Vy5tYXAoZnVuY3Rpb24obmUs''@;'; put 'put ''aWUpe3ZhciBsZT1pZTxXLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBPKFUsVyxZLHEpe3E9ZnVuY3Rpb24gXyhVKXt2YXIgVz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtXfHwoVz0hMCxVLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KHEpO3ZhciBlZT0hMTtVLm9uKCJjbG9zZSIsZnVuY3Rp''@;'; put 'put ''b24oKXtlZT0hMH0pLHZvaWQgMD09PUkmJihJPXkoODYxMCkpLEkoVSx7cmVhZGFibGU6Vyx3cml0YWJsZTpZfSxmdW5jdGlvbihuZSl7aWYobmUpcmV0dXJuIHEobmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5jdGlvbihuZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlv''@;'; put 'put ''biBGKFUpe3JldHVybiBVLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFUuYWJvcnR9KFUpKXJldHVybiBVLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFUuZGVzdHJveSlyZXR1cm4gVS5kZXN0cm95KCk7cShuZXx8bmV3IHcoInBpcGUiKSl9fX0obmUsbGUsaWU+MCxmdW5j''@;'; put 'put ''dGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhbGUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gVy5yZWR1Y2UoTil9fSwyNDU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7dWUuZXhwb3J0''@;'; put 'put ''cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBnKEIsdyxQLEYpe3ZhciBPPWZ1bmN0aW9uIF8oQix3LFApe3JldHVybiBudWxsIT1CLmhpZ2hXYXRlck1hcms/Qi5oaWdoV2F0ZXJNYXJrOnc/QltQXTpudWxsfSh3LEYsUCk7aWYobnVsbCE9Tyl7aWYoIWlzRmluaXRlKE8pfHxNYXRoLmZs''@;'; put 'put ''b29yKE8pIT09T3x8TzwwKXRocm93IG5ldyBJKEY/UDoiaGlnaFdhdGVyTWFyayIsTyk7cmV0dXJuIE1hdGguZmxvb3IoTyl9cmV0dXJuIEIub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOih1ZSxYLHkpPT57dWUuZXhwb3J0cz15KDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODp1ZT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoST1JLnNwbGl0KCI6IilbMF0sISh5PSt5KSlyZXR1cm4hMTtzd2l0Y2goSSl7Y2FzZSJodHRwIjpjYXNlIndzIjpyZXR1cm4gODAhPT15O2Nhc2UiaHR0cHMiOmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09eTtjYXNlImZ0cCI6''@;'; put 'put ''cmV0dXJuIDIxIT09eTtjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09eTtjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09eX19LDk3ODU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDU3MTcpLGc9eSgzMzQ5KSxCPW5ldyBBcnJheSgxNiksdz1b''@;'; put 'put ''MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIs''@;'; put 'put ''MiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEy''@;'; put 'put ''LDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwx''@;'; put 'put ''Myw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLE89WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3''@;'; put 'put ''LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5''@;'; put 'put ''NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBMKCl7Zy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9Mjcx''@;'; put 'put ''NzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEosbmUpe3JldHVybiBKPDxuZXxKPj4+MzItbmV9ZnVuY3Rpb24gVShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZV5pZV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBXKEosbmUsaWUsbGUsbWUs''@;'; put 'put ''X2UsVGUsU2Upe3JldHVybiBLKEorKG5lJmllfH5uZSZsZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBZKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKChuZXx+aWUpXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIHEoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7''@;'; put 'put ''cmV0dXJuIEsoSisobmUmbGV8aWUmfmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIGVlKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lXihpZXx+bGUpKStfZStUZXwwLFNlKSttZXwwfV8oTCxnKSxMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBKPUIsbmU9MDtuZTwxNjsrK25lKUpbbmVdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqbmUpO2Zvcih2YXIgaWU9MHx0aGlzLl9hLGxlPTB8dGhpcy5fYixtZT0wfHRoaXMuX2MsX2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5fZSxTZT0wfHRoaXMuX2EsamU9MHx0aGlzLl9iLFY9MHx0aGlz''@;'; put 'put ''Ll9jLHA9MHx0aGlzLl9kLGI9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEpe3ZhciBDLFQ7eDwxNj8oQz1VKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVlKFNlLGplLFYscCxiLEpbUFt4XV0sTlswXSxPW3hdKSk6eDwzMj8oQz1XKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0s''@;'; put 'put ''elsxXSxGW3hdKSxUPXEoU2UsamUsVixwLGIsSltQW3hdXSxOWzFdLE9beF0pKTp4PDQ4PyhDPVkoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9WShTZSxqZSxWLHAsYixKW1BbeF1dLE5bMl0sT1t4XSkpOng8NjQ/KEM9cShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbM10s''@;'; put 'put ''Rlt4XSksVD1XKFNlLGplLFYscCxiLEpbUFt4XV0sTlszXSxPW3hdKSk6KEM9ZWUoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9VShTZSxqZSxWLHAsYixKW1BbeF1dLE5bNF0sT1t4XSkpLGllPVRlLFRlPV9lLF9lPUsobWUsMTApLG1lPWxlLGxlPUMsU2U9YixiPXAscD1L''@;'; put 'put ''KFYsMTApLFY9amUsamU9VH12YXIgSD10aGlzLl9iK21lK3B8MDt0aGlzLl9iPXRoaXMuX2MrX2UrYnwwLHRoaXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStqZXwwLHRoaXMuX2U9dGhpcy5fYStsZStWfDAsdGhpcy5fYT1IfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1''@;'; put 'put ''bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAs''@;'; put 'put ''dGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7''@;'; put 'put ''cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxKLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLEp9LHVlLmV4cG9ydHM9TH0sOTUwOToodWUs''@;'; put 'put ''WCx5KT0+e3ZhciBJPXkoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9y''@;'; put 'put ''dHM9STooZyhJLFgpLFguQnVmZmVyPUIpLEIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXy5wcm90b3R5cGUpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJl''@;'; put 'put ''ciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9P''@;'; put 'put ''LmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVu''@;'; put 'put ''Y3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sOTI0NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDczNzkpLF89eSg4NDIwKSxnPUkoIlJl''@;'; put 'put ''Z0V4cC5wcm90b3R5cGUuZXhlYyIpLEI9eSg0NDUzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe2lmKCFfKFApKXRocm93IG5ldyBCKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAiKTtyZXR1cm4gZnVuY3Rpb24oTyl7cmV0dXJuIG51bGwhPT1nKFAsTyl9fX0sNzc3MToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDIxMCksXz15KDIyOTYpLGc9eSgxMDQ0KSgpLEI9eSg3Mjk2KSx3PXkoNDQ1MyksUD1JKCIlTWF0aC5mbG9vciUiKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKE8seil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE8pdGhyb3cgbmV3IHcoImBmbmAgaXMgbm90IGEgZnVu''@;'; put 'put ''Y3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIHp8fHo8MHx8ej40Mjk0OTY3Mjk1fHxQKHopIT09eil0aHJvdyBuZXcgdygiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyIik7dmFyIE49YXJndW1lbnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxMPSEwLEs9''@;'; put 'put ''ITA7aWYoImxlbmd0aCJpbiBPJiZCKXt2YXIgVT1CKE8sImxlbmd0aCIpO1UmJiFVLmNvbmZpZ3VyYWJsZSYmKEw9ITEpLFUmJiFVLndyaXRhYmxlJiYoSz0hMSl9cmV0dXJuKEx8fEt8fCFOKSYmKGc/XyhPLCJsZW5ndGgiLHosITAsITApOl8oTywibGVuZ3RoIix6KSksT319LDQxODk6KHVl''@;'; put 'put ''LFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQil7dGhpcy5fYmxvY2s9SS5hbGxvYyhnKSx0aGlzLl9maW5hbFNpemU9Qix0aGlzLl9ibG9ja1NpemU9Zyx0aGlzLl9sZW49MH1fLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZyxCKXsic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGcmJihnPUkuZnJvbShnLEI9Qnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9Zy5sZW5ndGgsTz10aGlzLl9sZW4sej0wO3o8Rjspe2Zvcih2YXIgTj1PJVAsTD1NYXRoLm1pbihGLXosUC1OKSxLPTA7SzxMO0srKyl3W04rS109Z1t6K0tdO3or''@;'; put 'put ''PUwsKE8rPUwpJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1GLHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihnKXt2YXIgQj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW0JdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsQisxKSxC''@;'; put 'put ''Pj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0''@;'; put 'put ''OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoUCx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgTz10aGlzLl9oYXNo''@;'; put 'put ''KCk7cmV0dXJuIGc/Ty50b1N0cmluZyhnKTpPfSxfLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sdWUuZXhwb3J0cz1ffSw5MDcyOih1ZSxYLHkpPT57dmFyIEk9dWUuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihnKXtnPWcudG9Mb3dlckNhc2UoKTt2YXIgQj1JW2ddO2lmKCFCKXRocm93IG5ldyBFcnJvcihnKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBCfTtJLnNoYT15KDQ0NDgpLEkuc2hhMT15KDgzMzYpLEkuc2hhMjI0''@;'; put 'put ''PXkoODQzMiksSS5zaGEyNTY9eSg3NDk5KSxJLnNoYTM4ND15KDE2ODYpLEkuc2hhNTEyPXkoNzgxNil9LDQ0NDg6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg0MTg5KSxnPXkoOTUwOSkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0''@;'; put 'put ''XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjw8MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLEwsSyxVKXtyZXR1cm4g''@;'; put 'put ''MD09PU4/TCZLfH5MJlU6Mj09PU4/TCZLfEwmVXxLJlU6TF5LXlV9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0z''@;'; put 'put ''Mjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7Zm9yKHZhciBMPXRoaXMuX3csSz0wfHRoaXMuX2EsVT0wfHRoaXMuX2IsVz0wfHRoaXMuX2MsWT0wfHRoaXMuX2QscT0wfHRoaXMuX2UsZWU9MDtlZTwxNjsrK2VlKUxbZWVdPU4ucmVhZEludDMyQkUoNCpl''@;'; put 'put ''ZSk7Zm9yKDtlZTw4MDsrK2VlKUxbZWVdPUxbZWUtM11eTFtlZS04XV5MW2VlLTE0XV5MW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIG5lPX5+KEovMjApLGllPUYoSykreihuZSxVLFcsWSkrcStMW0pdK0JbbmVdfDA7cT1ZLFk9VyxXPU8oVSksVT1LLEs9aWV9dGhpcy5fYT1L''@;'; put 'put ''K3RoaXMuX2F8MCx0aGlzLl9iPVUrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1ZK3RoaXMuX2R8MCx0aGlzLl9lPXErdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBOPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJC''@;'; put 'put ''RSgwfHRoaXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTn0sdWUuZXhwb3J0cz1QfSw4MzM2Oih1ZSxYLHkpPT57dmFy''@;'; put 'put ''IEk9eSg1NzE3KSxfPXkoNDE4OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9u''@;'; put 'put ''IEYoTCl7cmV0dXJuIEw8PDF8TD4+PjMxfWZ1bmN0aW9uIE8oTCl7cmV0dXJuIEw8PDV8TD4+PjI3fWZ1bmN0aW9uIHooTCl7cmV0dXJuIEw8PDMwfEw+Pj4yfWZ1bmN0aW9uIE4oTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0smVXx+SyZXOjI9PT1MP0smVXxLJld8VSZXOkteVV5XfUkoUCxfKSxQ''@;'; put 'put ''LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwp''@;'; put 'put ''e2Zvcih2YXIgSz10aGlzLl93LFU9MHx0aGlzLl9hLFc9MHx0aGlzLl9iLFk9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1MLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysrSilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0x''@;'; put 'put ''Nl0pO2Zvcih2YXIgbmU9MDtuZTw4MDsrK25lKXt2YXIgaWU9fn4obmUvMjApLGxlPU8oVSkrTihpZSxXLFkscSkrZWUrS1tuZV0rQltpZV18MDtlZT1xLHE9WSxZPXooVyksVz1VLFU9bGV9dGhpcy5fYT1VK3RoaXMuX2F8MCx0aGlzLl9iPVcrdGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9j''@;'; put 'put ''fDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTD1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxMLndy''@;'; put 'put ''aXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEx9LHVlLmV4cG9ydHM9UH0sODQzMjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDc0OTkpLGc9eSg0MTg5KSxCPXkoOTUwOSkuQnVmZmVy''@;'; put 'put ''LHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDY0LDU2KX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5''@;'; put 'put ''OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBG''@;'; put 'put ''LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxGLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndyaXRl''@;'; put 'put ''SW50MzJCRSh0aGlzLl9nLDI0KSxGfSx1ZS5leHBvcnRzPVB9LDc0OTk6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg0MTg5KSxnPXkoOTUwOSkuQnVmZmVyLEI9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1''@;'; put 'put ''MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAx''@;'; put 'put ''MjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwx''@;'; put 'put ''OTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5''@;'; put 'put ''NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQo''@;'; put 'put ''KSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoVSxXLFkpe3JldHVybiBZXlUmKFdeWSl9ZnVuY3Rpb24gTyhVLFcsWSl7cmV0dXJuIFUmV3xZJihVfFcpfWZ1bmN0aW9uIHooVSl7cmV0dXJuKFU+Pj4yfFU8PDMwKV4oVT4+PjEzfFU8PDE5KV4oVT4+PjIyfFU8PDEw''@;'; put 'put ''KX1mdW5jdGlvbiBOKFUpe3JldHVybihVPj4+NnxVPDwyNileKFU+Pj4xMXxVPDwyMSleKFU+Pj4yNXxVPDw3KX1mdW5jdGlvbiBMKFUpe3JldHVybihVPj4+N3xVPDwyNSleKFU+Pj4xOHxVPDwxNCleVT4+PjN9ZnVuY3Rpb24gSyhVKXtyZXR1cm4oVT4+PjE3fFU8PDE1KV4oVT4+PjE5fFU8''@;'; put 'put ''PDEzKV5VPj4+MTB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5''@;'; put 'put ''MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPXRoaXMuX3csWT0wfHRoaXMuX2EscT0wfHRoaXMuX2IsZWU9MHx0aGlzLl9jLEo9MHx0aGlzLl9kLG5lPTB8dGhpcy5fZSxpZT0wfHRo''@;'; put 'put ''aXMuX2YsbGU9MHx0aGlzLl9nLG1lPTB8dGhpcy5faCxfZT0wO19lPDE2OysrX2UpV1tfZV09VS5yZWFkSW50MzJCRSg0Kl9lKTtmb3IoO19lPDY0OysrX2UpV1tfZV09SyhXW19lLTJdKStXW19lLTddK0woV1tfZS0xNV0pK1dbX2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0OysrVGUpe3Zh''@;'; put 'put ''ciBTZT1tZStOKG5lKStGKG5lLGllLGxlKStCW1RlXStXW1RlXXwwLGplPXooWSkrTyhZLHEsZWUpfDA7bWU9bGUsbGU9aWUsaWU9bmUsbmU9SitTZXwwLEo9ZWUsZWU9cSxxPVksWT1TZStqZXwwfXRoaXMuX2E9WSt0aGlzLl9hfDAsdGhpcy5fYj1xK3RoaXMuX2J8MCx0aGlzLl9jPWVlK3Ro''@;'; put 'put ''aXMuX2N8MCx0aGlzLl9kPUordGhpcy5fZHwwLHRoaXMuX2U9bmUrdGhpcy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9bGUrdGhpcy5fZ3wwLHRoaXMuX2g9bWUrdGhpcy5faHwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBVPWcuYWxsb2NVbnNhZmUoMzIp''@;'; put 'put ''O3JldHVybiBVLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFUud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksVS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxVLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxVLndyaXRlSW50MzJCRSh0aGlzLl9mLDIw''@;'; put 'put ''KSxVLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxVLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxVfSx1ZS5leHBvcnRzPVB9LDE2ODY6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg3ODE2KSxnPXkoNDE4OSksQj15KDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9u''@;'; put 'put ''IFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsMTI4LDExMil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYy''@;'; put 'put ''MzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhp''@;'; put 'put ''cy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIE8oeixOLEwpe0Yud3JpdGVJbnQz''@;'; put 'put ''MkJFKHosTCksRi53cml0ZUludDMyQkUoTixMKzQpfXJldHVybiBPKHRoaXMuX2FoLHRoaXMuX2FsLDApLE8odGhpcy5fYmgsdGhpcy5fYmwsOCksTyh0aGlzLl9jaCx0aGlzLl9jbCwxNiksTyh0aGlzLl9kaCx0aGlzLl9kbCwyNCksTyh0aGlzLl9laCx0aGlzLl9lbCwzMiksTyh0aGlzLl9m''@;'; put 'put ''aCx0aGlzLl9mbCw0MCksRn0sdWUuZXhwb3J0cz1QfSw3ODE2Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1''@;'; put 'put ''NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQs''@;'; put 'put ''MTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQx''@;'; put 'put ''MjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2''@;'; put 'put ''ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwx''@;'; put 'put ''Mjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMx''@;'; put 'put ''NTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4''@;'; put 'put ''NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEy''@;'; put 'put ''LDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwz''@;'; put 'put ''OTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3''@;'; put 'put ''MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0s''@;'; put 'put ''dz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYocSxlZSxKKXtyZXR1cm4gSl5xJihlZV5KKX1mdW5jdGlvbiBPKHEsZWUsSil7cmV0dXJuIHEmZWV8SiYocXxlZSl9ZnVuY3Rpb24geihxLGVl''@;'; put 'put ''KXtyZXR1cm4ocT4+PjI4fGVlPDw0KV4oZWU+Pj4yfHE8PDMwKV4oZWU+Pj43fHE8PDI1KX1mdW5jdGlvbiBOKHEsZWUpe3JldHVybihxPj4+MTR8ZWU8PDE4KV4ocT4+PjE4fGVlPDwxNCleKGVlPj4+OXxxPDwyMyl9ZnVuY3Rpb24gTChxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+''@;'; put 'put ''Pjh8ZWU8PDI0KV5xPj4+N31mdW5jdGlvbiBLKHEsZWUpe3JldHVybihxPj4+MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXihxPj4+N3xlZTw8MjUpfWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFcocSxlZSl7cmV0''@;'; put 'put ''dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXihxPj4+NnxlZTw8MjYpfWZ1bmN0aW9uIFkocSxlZSl7cmV0dXJuIHE+Pj4wPGVlPj4+MD8xOjB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0''@;'; put 'put ''MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1''@;'; put 'put ''LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIg''@;'; put 'put ''ZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgsbmU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLGxlPTB8dGhpcy5fZGgsbWU9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5fZ2gsU2U9MHx0aGlzLl9oaCxqZT0wfHRoaXMuX2FsLFY9MHx0aGlzLl9ibCxwPTB8dGhpcy5fY2wsYj0w''@;'; put 'put ''fHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLEg9MHx0aGlzLl9obCxqPTA7ajwzMjtqKz0yKWVlW2pdPXEucmVhZEludDMyQkUoNCpqKSxlZVtqKzFdPXEucmVhZEludDMyQkUoNCpqKzQpO2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1l''@;'; put 'put ''ZVtqLTMwKzFdLEE9TChFLG0pLGFlPUsobSxFKSx0ZT1VKEU9ZWVbai00XSxtPWVlW2otNCsxXSksc2U9VyhtLEUpLEplPWVlW2otMzJdLG90PWVlW2otMzIrMV0seGU9YWUrZWVbai0xNCsxXXwwLHZlPUErZWVbai0xNF0rWSh4ZSxhZSl8MDt2ZT0odmU9dmUrdGUrWSh4ZT14ZStzZXwwLHNl''@;'; put 'put ''KXwwKStKZStZKHhlPXhlK290fDAsb3QpfDAsZWVbal09dmUsZWVbaisxXT14ZX1mb3IodmFyIFhlPTA7WGU8MTYwO1hlKz0yKXt2ZT1lZVtYZV0seGU9ZWVbWGUrMV07dmFyIHplPU8oSixuZSxpZSksRGU9TyhqZSxWLHApLEZlPXooSixqZSksT2U9eihqZSxKKSxJZT1OKG1lLHgpLFZlPU4o''@;'; put 'put ''eCxtZSksa2U9QltYZV0sQWU9QltYZSsxXSxfdD1GKG1lLF9lLFRlKSxudD1GKHgsQyxUKSxRZT1IK1ZlfDAsdW49U2UrSWUrWShRZSxIKXwwO3VuPSh1bj0odW49dW4rX3QrWShRZT1RZStudHwwLG50KXwwKStrZStZKFFlPVFlK0FlfDAsQWUpfDApK3ZlK1koUWU9UWUreGV8MCx4ZSl8MDt2''@;'; put 'put ''YXIgeXQ9T2UrRGV8MCxNdD1GZSt6ZStZKHl0LE9lKXwwO1NlPVRlLEg9VCxUZT1fZSxUPUMsX2U9bWUsQz14LG1lPWxlK3VuK1koeD1iK1FlfDAsYil8MCxsZT1pZSxiPXAsaWU9bmUscD1WLG5lPUosVj1qZSxKPXVuK010K1koamU9UWUreXR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCtq''@;'; put 'put ''ZXwwLHRoaXMuX2JsPXRoaXMuX2JsK1Z8MCx0aGlzLl9jbD10aGlzLl9jbCtwfDAsdGhpcy5fZGw9dGhpcy5fZGwrYnwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9h''@;'; put 'put ''aD10aGlzLl9haCtKK1kodGhpcy5fYWwsamUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrbmUrWSh0aGlzLl9ibCxWKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1kodGhpcy5fY2wscCl8MCx0aGlzLl9kaD10aGlzLl9kaCtsZStZKHRoaXMuX2RsLGIpfDAsdGhpcy5fZWg9dGhpcy5fZWgrbWUrWSh0''@;'; put 'put ''aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1kodGhpcy5fZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStZKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgrU2UrWSh0aGlzLl9obCxIKXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPWcuYWxs''@;'; put 'put ''b2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEosbmUsaWUpe3Eud3JpdGVJbnQzMkJFKEosaWUpLHEud3JpdGVJbnQzMkJFKG5lLGllKzQpfXJldHVybiBlZSh0aGlzLl9haCx0aGlzLl9hbCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhp''@;'; put 'put ''cy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxlZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGVlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSx1ZS5leHBvcnRzPVB9LDI4MzA6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPWc7''@;'; put 'put ''dmFyIEk9eSg3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gZygpe0kuY2FsbCh0aGlzKX15KDU3MTcpKGcsSSksZy5SZWFkYWJsZT15KDk0ODEpLGcuV3JpdGFibGU9eSg0MjI5KSxnLkR1cGxleD15KDY3NTMpLGcuVHJhbnNmb3JtPXkoNDYwNSksZy5QYXNzVGhyb3VnaD15KDI3MjUpLGcu''@;'; put 'put ''ZmluaXNoZWQ9eSg4NjEwKSxnLnBpcGVsaW5lPXkoOTk0NiksZy5TdHJlYW09ZyxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFcpe0Iud3JpdGFibGUmJiExPT09Qi53cml0ZShXKSYmUC5wYXVzZSYmUC5wYXVzZSgpfWZ1bmN0aW9uIE8oKXtQ''@;'; put 'put ''LnJlYWRhYmxlJiZQLnJlc3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRhIixGKSxCLm9uKCJkcmFpbiIsTyksIUIuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQiLE4pLFAub24oImNsb3NlIixMKSk7dmFyIHo9ITE7ZnVuY3Rpb24gTigpe3p8fCh6PSEwLEIuZW5kKCkp''@;'; put 'put ''fWZ1bmN0aW9uIEwoKXt6fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2YgQi5kZXN0cm95JiZCLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhXKXtpZihVKCksMD09PUkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVuY3Rpb24gVSgpe1AucmVtb3ZlTGlzdGVuZXIoImRhdGEi''@;'; put 'put ''LEYpLEIucmVtb3ZlTGlzdGVuZXIoImRyYWluIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksQi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIs''@;'; put 'put ''VSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFUpLEIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLEIub24oImVycm9yIixLKSxQLm9uKCJlbmQiLFUpLFAub24oImNsb3NlIixVKSxCLm9uKCJjbG9zZSIsVSksQi5lbWl0KCJwaXBlIixQKSxCfX0s''@;'; put 'put ''MjU1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmlu''@;'; put 'put ''YXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIgbmU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQihKKXt2''@;'; put 'put ''YXIgbmU9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4idXRmOCI7Zm9yKHZhciBuZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUi''@;'; put 'put ''O2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKG5lKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2FzZSgpLG5lPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiBuZSYm''@;'; put 'put ''KEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIG5lfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMuZW5kPVUsbmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmls''@;'; put 'put ''bExhc3Q9eixuZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vyx0aGlzLmVuZD1ZLG5lPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxv''@;'; put 'put ''Y1Vuc2FmZShuZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFyIG5lPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gTyhKLG5lLGllKXtpZigx''@;'; put 'put ''MjghPSgxOTImbmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4xJiZuZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJm5lWzFdKSlyZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MiYmbmUubGVuZ3RoPjImJjEyOCE9KDE5MiZu''@;'; put 'put ''ZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsSik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNv''@;'; put 'put ''ZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RDaGFyLG5lLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEosbmUpe2lmKChKLmxlbmd0aC1uZSklMj09MCl7dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLG5lKTtp''@;'; put 'put ''ZihpZSl7dmFyIGxlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKGxlPj01NTI5NiYmbGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFd''@;'; put 'put ''LGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJpbmcoInV0ZjE2bGUiLG5lLEoubGVuZ3RoLTEpfWZ1bmN0aW9uIFUoSil7dmFyIG5lPUomJkoubGVuZ3Ro''@;'; put 'put ''P3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT0oSi5sZW5ndGgtbmUpJTM7cmV0dXJuIDA9PT1pZT9K''@;'; put 'put ''LnRvU3RyaW5nKCJiYXNlNjQiLG5lKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50''@;'; put 'put ''b1N0cmluZygiYmFzZTY0IixuZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFkoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6bmV9ZnVu''@;'; put 'put ''Y3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1YLnM9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtpZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIG5lLGll''@;'; put 'put ''O2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShuZT10aGlzLmZpbGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP25lP25lK3RoaXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6bmV8''@;'; put 'put ''fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTChKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSsiXHVmZmZkIjpuZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1mdW5jdGlvbiBGKEosbmUs''@;'; put 'put ''aWUpe3ZhciBsZT1uZS5sZW5ndGgtMTtpZihsZTxpZSlyZXR1cm4gMDt2YXIgbWU9UChuZVtsZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMSksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMiksbWUp''@;'; put 'put ''Oi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKDI9PT1tZT9tZT0wOkoubGFzdE5lZWQ9bWUtMyksbWUpOjB9KHRoaXMsSixuZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0ZjgiLG5lKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgbGU9''@;'; put 'put ''Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhciwwLGxlKSxKLnRvU3RyaW5nKCJ1dGY4IixuZSxsZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhp''@;'; put 'put ''cy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxK''@;'; put 'put ''Lmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw3ODU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSgzNjg5KSxfPXkoNDU2NCksZz15KDc1MiksQj15KDIyMjQpLnksdz15KDU3NjEpLm0sUD15KDg5NzEpLlUsRj15KDc2NTIpLE89eSg0NTYpLHtmcm9tQ2FsbGJh''@;'; put 'put ''Y2s6en09eSg3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpOfT15KDEyNjkpLEw9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8sSz0vW1x4MDAtXHgxRl0vLFU9WyJcbiIsIlxyIiwiXDAiXSxXPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLFk9L1tc''@;'; put 'put ''eDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8scT17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgsb2N0Ojksbm92OjEwLGRlYzoxMX0sZWU9MjE0NzQ4MzY0N2UzLG5lPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBv''@;'; put 'put ''cHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBpZSh6ZSl7Ri52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoemUpLHplKTtjb25zdCBEZT1TdHJpbmcoemUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5v''@;'; put 'put ''bmUiPT09RGV8fCJsYXgiPT09RGV8fCJzdHJpY3QiPT09RGU/RGU6bnVsbH1jb25zdCBsZT1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksbWU9Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsx''@;'; put 'put ''LTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCko''@;'; put 'put ''PzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxk''@;'; put 'put ''KSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86''@;'; put 'put ''OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17''@;'; put 'put ''MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1''@;'; put 'put ''fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6''@;'; put 'put ''KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9fDopKSkkKS8sX2U9IlxuXFxbPyg/OlxuKD86W2EtZkEt''@;'; put 'put ''RlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318Olth''@;'; put 'put ''LWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7''@;'; put 'put ''MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86Olth''@;'; put 'put ''LWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxk''@;'; put 'put ''fFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8''@;'; put 'put ''MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1''@;'; put 'put ''WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01''@;'; put 'put ''XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJlcGxhY2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxhY2UoL1xuL2csIiIpLnRyaW0oKSxUZT1uZXcgUmVnRXhw''@;'; put 'put ''KGBeJHtfZX0kYCk7ZnVuY3Rpb24gU2UoemUsRGUsRmUsT2Upe2xldCBJZT0wO2Zvcig7SWU8emUubGVuZ3RoOyl7Y29uc3QgVmU9emUuY2hhckNvZGVBdChJZSk7aWYoVmU8PTQ3fHxWZT49NTgpYnJlYWs7SWUrK31yZXR1cm4gSWU8RGV8fEllPkZlfHwhT2UmJkllIT16ZS5sZW5ndGg/bnVs''@;'; put 'put ''bDpwYXJzZUludCh6ZS5zdWJzdHIoMCxJZSksMTApfWZ1bmN0aW9uIGplKHplKXtjb25zdCBEZT16ZS5zcGxpdCgiOiIpLEZlPVswLDAsMF07aWYoMyE9PURlLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IE9lPTA7T2U8MztPZSsrKXtjb25zdCBWZT1TZShEZVtPZV0sMSwyLDI9PU9lKTtp''@;'; put 'put ''ZihudWxsPT09VmUpcmV0dXJuIG51bGw7RmVbT2VdPVZlfXJldHVybiBGZX1mdW5jdGlvbiBWKHplKXt6ZT1TdHJpbmcoemUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3QgRGU9cVt6ZV07cmV0dXJuIERlPj0wP0RlOm51bGx9ZnVuY3Rpb24gcCh6ZSl7aWYoIXplKXJldHVybjtj''@;'; put 'put ''b25zdCBEZT16ZS5zcGxpdChZKTtpZighRGUpcmV0dXJuO2xldCBGZT1udWxsLE9lPW51bGwsSWU9bnVsbCxWZT1udWxsLGtlPW51bGwsQWU9bnVsbDtmb3IobGV0IF90PTA7X3Q8RGUubGVuZ3RoO190Kyspe2NvbnN0IG50PURlW190XS50cmltKCk7aWYoIW50Lmxlbmd0aCljb250aW51ZTts''@;'; put 'put ''ZXQgUWU7bnVsbD09PUllJiYoUWU9amUobnQpLFFlKT8oRmU9UWVbMF0sT2U9UWVbMV0sSWU9UWVbMl0pOm51bGwhPT1WZXx8KFFlPVNlKG50LDEsMiwhMCksbnVsbD09PVFlKT9udWxsIT09a2V8fChRZT1WKG50KSxudWxsPT09UWUpP251bGw9PT1BZSYmKFFlPVNlKG50LDIsNCwhMCksbnVs''@;'; put 'put ''bCE9PVFlJiYoQWU9UWUsQWU+PTcwJiZBZTw9OTk/QWUrPTE5MDA6QWU+PTAmJkFlPD02OSYmKEFlKz0yZTMpKSk6a2U9UWU6VmU9UWV9cmV0dXJuIG51bGw9PT1WZXx8bnVsbD09PWtlfHxudWxsPT09QWV8fG51bGw9PT1JZXx8VmU8MXx8VmU+MzF8fEFlPDE2MDF8fEZlPjIzfHxPZT41OXx8''@;'; put 'put ''SWU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKEFlLGtlLFZlLEZlLE9lLEllKSl9ZnVuY3Rpb24gYih6ZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc0RhdGUoemUpLHplKSx6ZS50b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHgoemUpe3JldHVybiBudWxsPT16ZT9udWxsOih6ZT16ZS50cmlt''@;'; put 'put ''KCkucmVwbGFjZSgvXlwuLywiIiksVGUudGVzdCh6ZSkmJih6ZT16ZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxJJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdCh6ZSkmJih6ZT1JLnRvQVNDSUkoemUpKSx6ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBDKHplLERlLEZlKXtp''@;'; put 'put ''ZihudWxsPT16ZXx8bnVsbD09RGUpcmV0dXJuIG51bGw7aWYoITEhPT1GZSYmKHplPXgoemUpLERlPXgoRGUpKSx6ZT09RGUpcmV0dXJuITA7Y29uc3QgT2U9emUubGFzdEluZGV4T2YoRGUpO3JldHVybiEoT2U8PTB8fHplLmxlbmd0aCE9PURlLmxlbmd0aCtPZXx8Ii4iIT09emUuc3Vic3Ry''@;'; put 'put ''KE9lLTEsMSl8fG1lLnRlc3QoemUpKX1mdW5jdGlvbiBUKHplKXtpZighemV8fCIvIiE9PXplLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT16ZSlyZXR1cm4gemU7Y29uc3QgRGU9emUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gMD09PURlPyIvIjp6ZS5zbGljZSgwLERlKX1mdW5j''@;'; put 'put ''dGlvbiBFKHplLERlKXtpZigoIURlfHwib2JqZWN0IiE9dHlwZW9mIERlKSYmKERlPXt9KSxGLmlzRW1wdHlTdHJpbmcoemUpfHwhRi5pc1N0cmluZyh6ZSkpcmV0dXJuIG51bGw7Y29uc3QgRmU9KHplPXplLnRyaW0oKSkuaW5kZXhPZigiOyIpLEllPWZ1bmN0aW9uIGooemUsRGUpe3plPWZ1''@;'; put 'put ''bmN0aW9uIEgoemUpe2lmKEYuaXNFbXB0eVN0cmluZyh6ZSkpcmV0dXJuIHplO2ZvcihsZXQgRGU9MDtEZTxVLmxlbmd0aDtEZSsrKXtjb25zdCBGZT16ZS5pbmRleE9mKFVbRGVdKTstMSE9PUZlJiYoemU9emUuc3Vic3RyKDAsRmUpKX1yZXR1cm4gemV9KHplKSxGLnZhbGlkYXRlKEYuaXNT''@;'; put 'put ''dHJpbmcoemUpLHplKTtsZXQgT2UsSWUsRmU9emUuaW5kZXhPZigiPSIpO2lmKERlKTA9PT1GZSYmKEZlPSh6ZT16ZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihGZTw9MClyZXR1cm47aWYoRmU8PTA/KE9lPSIiLEllPXplLnRyaW0oKSk6KE9lPXplLnN1YnN0cigwLEZlKS50''@;'; put 'put ''cmltKCksSWU9emUuc3Vic3RyKEZlKzEpLnRyaW0oKSksSy50ZXN0KE9lKXx8Sy50ZXN0KEllKSlyZXR1cm47Y29uc3QgVmU9bmV3IG90O3JldHVybiBWZS5rZXk9T2UsVmUudmFsdWU9SWUsVmV9KC0xPT09RmU/emU6emUuc3Vic3RyKDAsRmUpLCEhRGUubG9vc2UpO2lmKCFJZSlyZXR1cm47''@;'; put 'put ''aWYoLTE9PT1GZSlyZXR1cm4gSWU7Y29uc3QgVmU9emUuc2xpY2UoRmUrMSkudHJpbSgpO2lmKDA9PT1WZS5sZW5ndGgpcmV0dXJuIEllO2NvbnN0IGtlPVZlLnNwbGl0KCI7Iik7Zm9yKDtrZS5sZW5ndGg7KXtjb25zdCBBZT1rZS5zaGlmdCgpLnRyaW0oKTtpZigwPT09QWUubGVuZ3RoKWNv''@;'; put 'put ''bnRpbnVlO2NvbnN0IF90PUFlLmluZGV4T2YoIj0iKTtsZXQgbnQsUWU7c3dpdGNoKC0xPT09X3Q/KG50PUFlLFFlPW51bGwpOihudD1BZS5zdWJzdHIoMCxfdCksUWU9QWUuc3Vic3RyKF90KzEpKSxudD1udC50cmltKCkudG9Mb3dlckNhc2UoKSxRZSYmKFFlPVFlLnRyaW0oKSksbnQpe2Nh''@;'; put 'put ''c2UiZXhwaXJlcyI6aWYoUWUpe2NvbnN0IHl0PXAoUWUpO3l0JiYoSWUuZXhwaXJlcz15dCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihRZSYmL14tP1swLTldKyQvLnRlc3QoUWUpKXtjb25zdCB5dD1wYXJzZUludChRZSwxMCk7SWUuc2V0TWF4QWdlKHl0KX1icmVhaztjYXNlImRvbWFpbiI6''@;'; put 'put ''aWYoUWUpe2NvbnN0IHl0PVFlLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTt5dCYmKEllLmRvbWFpbj15dC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOkllLnBhdGg9UWUmJiIvIj09PVFlWzBdP1FlOm51bGw7YnJlYWs7Y2FzZSJzZWN1cmUiOkllLnNlY3VyZT0hMDticmVhaztj''@;'; put 'put ''YXNlImh0dHBvbmx5IjpJZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRlIjpzd2l0Y2goUWU/UWUudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOkllLnNhbWVTaXRlPSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpJZS5zYW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUi''@;'; put 'put ''OkllLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OkllLnNhbWVTaXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OkllLmV4dGVuc2lvbnM9SWUuZXh0ZW5zaW9uc3x8W10sSWUuZXh0ZW5zaW9ucy5wdXNoKEFlKX19cmV0dXJuIEllfWZ1bmN0aW9uIGFlKHplKXtsZXQgRGU7dHJ5e0RlPUpT''@;'; put 'put ''T04ucGFyc2UoemUpfWNhdGNoKEZlKXtyZXR1cm4gRmV9cmV0dXJuIERlfWZ1bmN0aW9uIHRlKHplKXtpZighemV8fEYuaXNFbXB0eVN0cmluZyh6ZSkpcmV0dXJuIG51bGw7bGV0IERlO2lmKCJzdHJpbmciPT10eXBlb2YgemUpe2lmKERlPWFlKHplKSxEZSBpbnN0YW5jZW9mIEVycm9yKXJl''@;'; put 'put ''dHVybiBudWxsfWVsc2UgRGU9emU7Y29uc3QgRmU9bmV3IG90O2ZvcihsZXQgT2U9MDtPZTxvdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtPZSsrKXtjb25zdCBJZT1vdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzW09lXTt2b2lkIDA9PT1EZVtJZV18fERlW0llXT09PUplW0llXXx8''@;'; put 'put ''KEZlW0llXT0iZXhwaXJlcyI9PT1JZXx8ImNyZWF0aW9uIj09PUllfHwibGFzdEFjY2Vzc2VkIj09PUllP251bGw9PT1EZVtJZV0/bnVsbDoiSW5maW5pdHkiPT1EZVtJZV0/IkluZmluaXR5IjpuZXcgRGF0ZShEZVtJZV0pOkRlW0llXSl9cmV0dXJuIEZlfWZ1bmN0aW9uIHNlKHplLERlKXtG''@;'; put 'put ''LnZhbGlkYXRlKEYuaXNPYmplY3QoemUpLHplKSxGLnZhbGlkYXRlKEYuaXNPYmplY3QoRGUpLERlKTtsZXQgRmU9MDtyZXR1cm4gRmU9KERlLnBhdGg/RGUucGF0aC5sZW5ndGg6MCktKHplLnBhdGg/emUucGF0aC5sZW5ndGg6MCksMCE9PUZlfHwoRmU9KHplLmNyZWF0aW9uP3plLmNyZWF0''@;'; put 'put ''aW9uLmdldFRpbWUoKTplZSktKERlLmNyZWF0aW9uP0RlLmNyZWF0aW9uLmdldFRpbWUoKTplZSksMCE9PUZlfHwoRmU9emUuY3JlYXRpb25JbmRleC1EZS5jcmVhdGlvbkluZGV4KSksRmV9ZnVuY3Rpb24gVWUoemUpe2lmKHplIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiB6ZTt0cnl7emU9''@;'; put 'put ''ZGVjb2RlVVJJKHplKX1jYXRjaHt9cmV0dXJuIF8oemUpfWNvbnN0IEplPXtrZXk6IiIsdmFsdWU6IiIsZXhwaXJlczoiSW5maW5pdHkiLG1heEFnZTpudWxsLGRvbWFpbjpudWxsLHBhdGg6bnVsbCxzZWN1cmU6ITEsaHR0cE9ubHk6ITEsZXh0ZW5zaW9uczpudWxsLGhvc3RPbmx5Om51bGws''@;'; put 'put ''cGF0aElzRGVmYXVsdDpudWxsLGNyZWF0aW9uOm51bGwsbGFzdEFjY2Vzc2VkOm51bGwsc2FtZVNpdGU6dm9pZCAwfTtjbGFzcyBvdHtjb25zdHJ1Y3RvcihEZT17fSl7Y29uc3QgRmU9TigpO0ZlJiYodGhpc1tGZV09dGhpcy5pbnNwZWN0KSxPYmplY3QuYXNzaWduKHRoaXMsSmUsRGUpLHRo''@;'; put 'put ''aXMuY3JlYXRpb249dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNyZWF0aW9uSW5kZXgiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTorK290LmNvb2tpZXNDcmVhdGVkfSl9aW5zcGVjdCgpe2NvbnN0''@;'; put 'put ''IERlPURhdGUubm93KCksRmU9bnVsbCE9dGhpcy5ob3N0T25seT90aGlzLmhvc3RPbmx5OiI/IixPZT10aGlzLmNyZWF0aW9uP0RlLXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKyJtcyI6Ij8iLEllPXRoaXMubGFzdEFjY2Vzc2VkP0RlLXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSsibXMi''@;'; put 'put ''OiI/IjtyZXR1cm5gQ29va2llPSIke3RoaXMudG9TdHJpbmcoKX07IGhvc3RPbmx5PSR7RmV9OyBhQWdlPSR7SWV9OyBjQWdlPSR7T2V9ImB9dG9KU09OKCl7Y29uc3QgRGU9e307Zm9yKGNvbnN0IEZlIG9mIG90LnNlcmlhbGl6YWJsZVByb3BlcnRpZXMpdGhpc1tGZV0hPT1KZVtGZV0mJigi''@;'; put 'put ''ZXhwaXJlcyI9PT1GZXx8ImNyZWF0aW9uIj09PUZlfHwibGFzdEFjY2Vzc2VkIj09PUZlP0RlW0ZlXT1udWxsPT09dGhpc1tGZV0/bnVsbDoiSW5maW5pdHkiPT10aGlzW0ZlXT8iSW5maW5pdHkiOnRoaXNbRmVdLnRvSVNPU3RyaW5nKCk6Im1heEFnZSI9PT1GZT9udWxsIT09dGhpc1tGZV0m''@;'; put 'put ''JihEZVtGZV09dGhpc1tGZV09PTEvMHx8dGhpc1tGZV09PS0xLzA/dGhpc1tGZV0udG9TdHJpbmcoKTp0aGlzW0ZlXSk6dGhpc1tGZV0hPT1KZVtGZV0mJihEZVtGZV09dGhpc1tGZV0pKTtyZXR1cm4gRGV9Y2xvbmUoKXtyZXR1cm4gdGUodGhpcy50b0pTT04oKSl9dmFsaWRhdGUoKXtpZigh''@;'; put 'put ''TC50ZXN0KHRoaXMudmFsdWUpfHx0aGlzLmV4cGlyZXMhPTEvMCYmISh0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSYmIXAodGhpcy5leHBpcmVzKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10aGlzLnBhdGgmJiFXLnRlc3QodGhpcy5wYXRoKSlyZXR1''@;'; put 'put ''cm4hMTtjb25zdCBEZT10aGlzLmNkb21haW4oKTtyZXR1cm4hKERlJiYoRGUubWF0Y2goL1wuJC8pfHxudWxsPT1nLmdldFB1YmxpY1N1ZmZpeChEZSkpKX1zZXRFeHBpcmVzKERlKXt0aGlzLmV4cGlyZXM9RGUgaW5zdGFuY2VvZiBEYXRlP0RlOnAoRGUpfHwiSW5maW5pdHkifXNldE1heEFn''@;'; put 'put ''ZShEZSl7dGhpcy5tYXhBZ2U9RGU9PT0xLzB8fERlPT09LTEvMD9EZS50b1N0cmluZygpOkRlfWNvb2tpZVN0cmluZygpe2xldCBEZT10aGlzLnZhbHVlO3JldHVybiBudWxsPT1EZSYmKERlPSIiKSwiIj09PXRoaXMua2V5P0RlOmAke3RoaXMua2V5fT0ke0RlfWB9dG9TdHJpbmcoKXtsZXQg''@;'; put 'put ''RGU9dGhpcy5jb29raWVTdHJpbmcoKTtpZih0aGlzLmV4cGlyZXMhPTEvMCYmKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/RGUrPWA7IEV4cGlyZXM9JHtiKHRoaXMuZXhwaXJlcyl9YDpEZSs9YDsgRXhwaXJlcz0ke3RoaXMuZXhwaXJlc31gKSxudWxsIT10aGlzLm1heEFnZSYmdGhp''@;'; put 'put ''cy5tYXhBZ2UhPTEvMCYmKERlKz1gOyBNYXgtQWdlPSR7dGhpcy5tYXhBZ2V9YCksdGhpcy5kb21haW4mJiF0aGlzLmhvc3RPbmx5JiYoRGUrPWA7IERvbWFpbj0ke3RoaXMuZG9tYWlufWApLHRoaXMucGF0aCYmKERlKz1gOyBQYXRoPSR7dGhpcy5wYXRofWApLHRoaXMuc2VjdXJlJiYoRGUr''@;'; put 'put ''PSI7IFNlY3VyZSIpLHRoaXMuaHR0cE9ubHkmJihEZSs9IjsgSHR0cE9ubHkiKSx0aGlzLnNhbWVTaXRlJiYibm9uZSIhPT10aGlzLnNhbWVTaXRlKXtjb25zdCBGZT1vdC5zYW1lU2l0ZUNhbm9uaWNhbFt0aGlzLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCldO0RlKz1gOyBTYW1lU2l0ZT0ke0Zl''@;'; put 'put ''fHx0aGlzLnNhbWVTaXRlfWB9cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucyYmdGhpcy5leHRlbnNpb25zLmZvckVhY2goRmU9PntEZSs9YDsgJHtGZX1gfSksRGV9VFRMKERlKXtpZihudWxsIT10aGlzLm1heEFnZSlyZXR1cm4gdGhpcy5tYXhBZ2U8PTA/MDoxZTMqdGhpcy5tYXhBZ2U7bGV0IEZl''@;'; put 'put ''PXRoaXMuZXhwaXJlcztyZXR1cm4gRmUhPTEvMD8oRmUgaW5zdGFuY2VvZiBEYXRlfHwoRmU9cChGZSl8fDEvMCksRmU9PTEvMD8xLzA6RmUuZ2V0VGltZSgpLShEZXx8RGF0ZS5ub3coKSkpOjEvMH1leHBpcnlUaW1lKERlKXtpZihudWxsIT10aGlzLm1heEFnZSl7Y29uc3QgT2U9dGhpcy5t''@;'; put 'put ''YXhBZ2U8PTA/LTEvMDoxZTMqdGhpcy5tYXhBZ2U7cmV0dXJuKERlfHx0aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSkuZ2V0VGltZSgpK09lfXJldHVybiB0aGlzLmV4cGlyZXM9PTEvMD8xLzA6dGhpcy5leHBpcmVzLmdldFRpbWUoKX1leHBpcnlEYXRlKERlKXtjb25zdCBGZT10aGlzLmV4cGly''@;'; put 'put ''eVRpbWUoRGUpO3JldHVybiBGZT09MS8wP25ldyBEYXRlKGVlKTpGZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShGZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1jYW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9''@;'; put 'put ''PXRoaXMuZG9tYWluP251bGw6eCh0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24geGUoemUpe2lmKG51bGwhPXplKXtjb25zdCBEZT16ZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChEZSl7Y2FzZSBsZS5TVFJJQ1Q6Y2FzZSBs''@;'; put 'put ''ZS5TSUxFTlQ6Y2FzZSBsZS5ESVNBQkxFRDpyZXR1cm4gRGV9fXJldHVybiBsZS5TSUxFTlR9b3QuY29va2llc0NyZWF0ZWQ9MCxvdC5wYXJzZT1FLG90LmZyb21KU09OPXRlLG90LnNlcmlhbGl6YWJsZVByb3BlcnRpZXM9T2JqZWN0LmtleXMoSmUpLG90LnNhbWVTaXRlTGV2ZWw9e3N0cmlj''@;'; put 'put ''dDozLGxheDoyLG5vbmU6MX0sb3Quc2FtZVNpdGVDYW5vbmljYWw9e3N0cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIHZle2NvbnN0cnVjdG9yKERlLEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczohMH0peyJib29sZWFuIj09dHlwZW9mIEZlJiYoRmU9e3JlamVjdFB1YmxpY1N1ZmZp''@;'; put 'put ''eGVzOkZlfSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEZlKSxGZSksdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcz1GZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3NlTW9kZT0hIUZlLmxvb3NlTW9kZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5''@;'; put 'put ''cGVvZiBGZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fEZlLmFsbG93U3BlY2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPURlfHxuZXcgdyx0aGlzLnByZWZpeFNlY3VyaXR5PXhlKEZlLnByZWZpeFNlY3VyaXR5KSx0aGlzLl9jbG9uZVN5bmM9WGUoImNsb25lIiksdGhpcy5faW1wb3J0Q29va2ll''@;'; put 'put ''c1N5bmM9WGUoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVzU3luYz1YZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1YZSgiZ2V0Q29va2llU3RyaW5nIiksdGhpcy5nZXRTZXRDb29raWVTdHJpbmdzU3luYz1YZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIp''@;'; put 'put ''LHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9WGUoInJlbW92ZUFsbENvb2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9WGUoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1YZSgic2VyaWFsaXplIil9c2V0Q29va2llKERlLEZlLE9lLEllKXtsZXQgVmU7aWYoRi52YWxpZGF0ZShG''@;'; put 'put ''LmlzTm9uRW1wdHlTdHJpbmcoRmUpLEllLE9lKSxGLmlzRnVuY3Rpb24oRmUpKXJldHVybihJZT1GZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBrZT1VZShGZSk7aWYoRi5pc0Z1bmN0aW9uKE9lKSYmKEllPU9lLE9lPXt9KSxGLnZhbGlkYXRlKEYuaXNGdW5j''@;'; put 'put ''dGlvbihJZSksSWUpLCFGLmlzTm9uRW1wdHlTdHJpbmcoRGUpJiYhRi5pc09iamVjdChEZSkmJkRlIGluc3RhbmNlb2YgU3RyaW5nJiYwPT1EZS5sZW5ndGgpcmV0dXJuIEllKG51bGwpO2NvbnN0IEFlPXgoa2UuaG9zdG5hbWUpLF90PU9lLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTts''@;'; put 'put ''ZXQgbnQ9bnVsbDtpZihPZS5zYW1lU2l0ZUNvbnRleHQmJihudD1pZShPZS5zYW1lU2l0ZUNvbnRleHQpLCFudCkpcmV0dXJuIEllKG5ldyBFcnJvcihuZSkpO2lmKCJzdHJpbmciPT10eXBlb2YgRGV8fERlIGluc3RhbmNlb2YgU3RyaW5nKXtpZighKERlPW90LnBhcnNlKERlLHtsb29zZTpf''@;'; put 'put ''dH0pKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSl9ZWxzZSBpZighKERlIGluc3RhbmNlb2Ygb3QpKXJldHVybiBWZT1uZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEg''@;'; put 'put ''Q29va2llIG9iamVjdCBvciBzdHJpbmciKSxJZShPZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtjb25zdCBRZT1PZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJkRlLmRvbWFpbiYmbnVsbD09Zy5nZXRQdWJsaWNTdWZmaXgoRGUuY2RvbWFpbigpLHthbGxvd1Nw''@;'; put 'put ''ZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6T2UuaWdub3JlRXJyb3J9KSYmIVRlLnRlc3QoRGUuZG9tYWluKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksSWUoT2UuaWdu''@;'; put 'put ''b3JlRXJyb3I/bnVsbDpWZSk7aWYoRGUuZG9tYWluKXtpZighQyhBZSxEZS5jZG9tYWluKCksITEpKXJldHVybiBWZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtEZS5jZG9tYWluKCl9IFJlcXVlc3Q6JHtBZX1gKSxJZShPZS5pZ25vcmVF''@;'; put 'put ''cnJvcj9udWxsOlZlKTtudWxsPT1EZS5ob3N0T25seSYmKERlLmhvc3RPbmx5PSExKX1lbHNlIERlLmhvc3RPbmx5PSEwLERlLmRvbWFpbj1BZTtpZigoIURlLnBhdGh8fCIvIiE9PURlLnBhdGhbMF0pJiYoRGUucGF0aD1UKGtlLnBhdGhuYW1lKSxEZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09''@;'; put 'put ''PU9lLmh0dHAmJkRlLmh0dHBPbmx5KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6VmUpO2lmKCJub25lIiE9PURlLnNhbWVTaXRlJiZ2b2lkIDAhPT1EZS5zYW1lU2l0ZSYm''@;'; put 'put ''bnQmJiJub25lIj09PW50KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7Y29uc3QgdW49dGhpcy5wcmVmaXhTZWN1cml0eT09PWxlLlNJTEVOVDtpZih0''@;'; put 'put ''aGlzLnByZWZpeFNlY3VyaXR5IT09bGUuRElTQUJMRUQpe2xldCAkZSxpdD0hMTtpZihmdW5jdGlvbiBtKHplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzT2JqZWN0KHplKSx6ZSksIXplLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8emUuc2VjdXJlfShEZSk/ZnVuY3Rpb24gQSh6ZSl7''@;'; put 'put ''cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdCh6ZSkpLCF6ZS5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHx6ZS5zZWN1cmUmJnplLmhvc3RPbmx5JiZudWxsIT16ZS5wYXRoJiYiLyI9PT16ZS5wYXRofShEZSl8fChpdD0hMCwkZT0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBl''@;'; put 'put ''aXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOihpdD0hMCwkZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIpLGl0KXJldHVybiBJZShPZS5pZ25vcmVFcnJv''@;'; put 'put ''cnx8dW4/bnVsbDpuZXcgRXJyb3IoJGUpKX1jb25zdCBNdD10aGlzLnN0b3JlO010LnVwZGF0ZUNvb2tpZXx8KE10LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihpdCwkZSx0dCl7dGhpcy5wdXRDb29raWUoJGUsdHQpfSksTXQuZmluZENvb2tpZShEZS5kb21haW4sRGUucGF0aCxEZS5rZXksZnVu''@;'; put 'put ''Y3Rpb24gRHQoaXQsJGUpe2lmKGl0KXJldHVybiBJZShpdCk7Y29uc3QgdHQ9ZnVuY3Rpb24oSGUpe2lmKEhlKXJldHVybiBJZShIZSk7SWUobnVsbCxEZSl9O2lmKCRlKXtpZighMT09PU9lLmh0dHAmJiRlLmh0dHBPbmx5KXJldHVybiBpdD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0''@;'; put 'put ''cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShPZS5pZ25vcmVFcnJvcj9udWxsOml0KTtEZS5jcmVhdGlvbj0kZS5jcmVhdGlvbixEZS5jcmVhdGlvbkluZGV4PSRlLmNyZWF0aW9uSW5kZXgsRGUubGFzdEFjY2Vzc2VkPVFlLE10LnVwZGF0ZUNvb2tpZSgkZSxEZSx0dCl9''@;'; put 'put ''ZWxzZSBEZS5jcmVhdGlvbj1EZS5sYXN0QWNjZXNzZWQ9UWUsTXQucHV0Q29va2llKERlLHR0KX0pfWdldENvb2tpZXMoRGUsRmUsT2Upe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKERlKSxPZSxEZSk7Y29uc3QgSWU9VWUoRGUpO0YuaXNGdW5jdGlvbihGZSkmJihPZT1GZSxGZT17''@;'; put 'put ''fSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEZlKSxPZSxGZSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oT2UpLE9lKTtjb25zdCBWZT14KEllLmhvc3RuYW1lKSxrZT1JZS5wYXRobmFtZXx8Ii8iO2xldCBBZT1GZS5zZWN1cmU7bnVsbD09QWUmJkllLnByb3RvY29sJiYoImh0dHBzOiI9PUll''@;'; put 'put ''LnByb3RvY29sfHwid3NzOiI9PUllLnByb3RvY29sKSYmKEFlPSEwKTtsZXQgX3Q9MDtpZihGZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IGl0PWllKEZlLnNhbWVTaXRlQ29udGV4dCk7aWYoX3Q9b3Quc2FtZVNpdGVMZXZlbFtpdF0sIV90KXJldHVybiBPZShuZXcgRXJyb3IobmUpKX1sZXQg''@;'; put 'put ''bnQ9RmUuaHR0cDtudWxsPT1udCYmKG50PSEwKTtjb25zdCBRZT1GZS5ub3d8fERhdGUubm93KCksdW49ITEhPT1GZS5leHBpcmUseXQ9ISFGZS5hbGxQYXRocyxNdD10aGlzLnN0b3JlO2Z1bmN0aW9uIER0KGl0KXtpZihpdC5ob3N0T25seSl7aWYoaXQuZG9tYWluIT1WZSlyZXR1cm4hMX1l''@;'; put 'put ''bHNlIGlmKCFDKFZlLGl0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISgheXQmJiFQKGtlLGl0LnBhdGgpfHxpdC5zZWN1cmUmJiFBZXx8aXQuaHR0cE9ubHkmJiFudHx8X3QmJm90LnNhbWVTaXRlTGV2ZWxbaXQuc2FtZVNpdGV8fCJub25lIl0+X3R8fHVuJiZpdC5leHBpcnlUaW1lKCk8''@;'; put 'put ''PVFlJiYoTXQucmVtb3ZlQ29va2llKGl0LmRvbWFpbixpdC5wYXRoLGl0LmtleSwoKT0+e30pLDEpKX1NdC5maW5kQ29va2llcyhWZSx5dD9udWxsOmtlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChpdCwkZSk9PntpZihpdClyZXR1cm4gT2UoaXQpOyRlPSRlLmZpbHRlcihEdCksITEh''@;'; put 'put ''PT1GZS5zb3J0JiYoJGU9JGUuc29ydChzZSkpO2NvbnN0IHR0PW5ldyBEYXRlO2Zvcihjb25zdCBIZSBvZiAkZSlIZS5sYXN0QWNjZXNzZWQ9dHQ7T2UobnVsbCwkZSl9KX1nZXRDb29raWVTdHJpbmcoLi4uRGUpe2NvbnN0IEZlPURlLnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEZl''@;'; put 'put ''KSxGZSksRGUucHVzaChmdW5jdGlvbihJZSxWZSl7SWU/RmUoSWUpOkZlKG51bGwsVmUuc29ydChzZSkubWFwKGtlPT5rZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxEZSl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5EZSl7Y29uc3Qg''@;'; put 'put ''RmU9RGUucG9wKCk7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRmUpLEZlKSxEZS5wdXNoKGZ1bmN0aW9uKEllLFZlKXtJZT9GZShJZSk6RmUobnVsbCxWZS5tYXAoa2U9PmtlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLERlKX1zZXJpYWxpemUoRGUpe0YudmFs''@;'; put 'put ''aWRhdGUoRi5pc0Z1bmN0aW9uKERlKSxEZSk7bGV0IEZlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtGLmlzT2JqZWN0KEZlKSYmKEZlPW51bGwpO2NvbnN0IE9lPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtPfWAsc3RvcmVUeXBlOkZlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhp''@;'; put 'put ''cy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTp4ZSh0aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtp''@;'; put 'put ''ZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBEZShuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5z''@;'; put 'put ''dG9yZS5nZXRBbGxDb29raWVzKChJZSxWZSk9PkllP0RlKEllKTooT2UuY29va2llcz1WZS5tYXAoa2U9PihkZWxldGUoa2U9a2UgaW5zdGFuY2VvZiBvdD9rZS50b0pTT04oKTprZSkuY3JlYXRpb25JbmRleCxrZSkpLERlKG51bGwsT2UpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFs''@;'; put 'put ''aXplU3luYygpfV9pbXBvcnRDb29raWVzKERlLEZlKXtsZXQgT2U9RGUuY29va2llcztpZighT2V8fCFBcnJheS5pc0FycmF5KE9lKSlyZXR1cm4gRmUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtPZT1PZS5zbGljZSgpO2NvbnN0IEllPVZlPT57''@;'; put 'put ''aWYoVmUpcmV0dXJuIEZlKFZlKTtpZighT2UubGVuZ3RoKXJldHVybiBGZShWZSx0aGlzKTtsZXQga2U7dHJ5e2tlPXRlKE9lLnNoaWZ0KCkpfWNhdGNoKEFlKXtyZXR1cm4gRmUoQWUpfWlmKG51bGw9PT1rZSlyZXR1cm4gSWUobnVsbCk7dGhpcy5zdG9yZS5wdXRDb29raWUoa2UsSWUpfTtJ''@;'; put 'put ''ZSgpfWNsb25lKERlLEZlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKEZlPURlLERlPW51bGwpLHRoaXMuc2VyaWFsaXplKChPZSxJZSk9PntpZihPZSlyZXR1cm4gRmUoT2UpO3ZlLmRlc2VyaWFsaXplKEllLERlLEZlKX0pfWNsb25lU3luYyhEZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFEZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKERl''@;'; put 'put ''KX1yZW1vdmVBbGxDb29raWVzKERlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihEZSksRGUpO2NvbnN0IEZlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlbW92ZUFsbENvb2tpZXMmJkZlLnJlbW92ZUFsbENvb2tpZXMhPT1CLnByb3RvdHlwZS5yZW1vdmVBbGxDb29r''@;'; put 'put ''aWVzKXJldHVybiBGZS5yZW1vdmVBbGxDb29raWVzKERlKTtGZS5nZXRBbGxDb29raWVzKChPZSxJZSk9PntpZihPZSlyZXR1cm4gRGUoT2UpO2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJuIERlKG51bGwpO2xldCBWZT0wO2NvbnN0IGtlPVtdO2Z1bmN0aW9uIEFlKF90KXtpZihfdCYma2UucHVz''@;'; put 'put ''aChfdCksVmUrKyxWZT09PUllLmxlbmd0aClyZXR1cm4gRGUoa2UubGVuZ3RoP2tlWzBdOm51bGwpfUllLmZvckVhY2goX3Q9PntGZS5yZW1vdmVDb29raWUoX3QuZG9tYWluLF90LnBhdGgsX3Qua2V5LEFlKX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKERlLEZlLE9lKXtsZXQgSWU7aWYoMyE9''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgmJihPZT1GZSxGZT1udWxsKSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihPZSksT2UpLCJzdHJpbmciPT10eXBlb2YgRGUpe2lmKEllPWFlKERlKSxJZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBPZShJZSl9ZWxzZSBJZT1EZTtjb25zdCBWZT1uZXcgdmUoRmUs''@;'; put 'put ''e3JlamVjdFB1YmxpY1N1ZmZpeGVzOkllLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpJZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOkllLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpJZS5wcmVmaXhTZWN1cml0eX0pO1ZlLl9pbXBv''@;'; put 'put ''cnRDb29raWVzKEllLGtlPT57aWYoa2UpcmV0dXJuIE9lKGtlKTtPZShudWxsLFZlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoRGUsRmUpe2NvbnN0IE9lPSJzdHJpbmciPT10eXBlb2YgRGU/SlNPTi5wYXJzZShEZSk6RGUsSWU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpP''@;'; put 'put ''ZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6T2UuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIUllLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBJ''@;'; put 'put ''ZS5faW1wb3J0Q29va2llc1N5bmMoT2UpLEllfX1mdW5jdGlvbiBYZSh6ZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkRlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5z''@;'; put 'put ''dGVhZC4iKTtsZXQgRmUsT2U7aWYodGhpc1t6ZV0oLi4uRGUsKEllLFZlKT0+e0ZlPUllLE9lPVZlfSksRmUpdGhyb3cgRmU7cmV0dXJuIE9lfX12ZS5mcm9tSlNPTj12ZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0''@;'; put 'put ''cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaCh6ZT0+e3ZlLnByb3RvdHlwZVt6ZV09eih2ZS5wcm90b3R5cGVbemVdKX0pLHZlLmRlc2VyaWFsaXplPXoodmUuZGVzZXJpYWxpemUpLFgudmVyc2lv''@;'; put 'put ''bj1PLFguQ29va2llSmFyPXZlLFguQ29va2llPW90LFguU3RvcmU9QixYLk1lbW9yeUNvb2tpZVN0b3JlPXcsWC5wYXJzZURhdGU9cCxYLmZvcm1hdERhdGU9YixYLnBhcnNlPUUsWC5mcm9tSlNPTj10ZSxYLmRvbWFpbk1hdGNoPUMsWC5kZWZhdWx0UGF0aD1ULFgucGF0aE1hdGNoPVAsWC5n''@;'; put 'put ''ZXRQdWJsaWNTdWZmaXg9Zy5nZXRQdWJsaWNTdWZmaXgsWC5jb29raWVDb21wYXJlPXNlLFgucGVybXV0ZURvbWFpbj15KDczMjQpLnBlcm11dGVEb21haW4sWC5wZXJtdXRlUGF0aD1mdW5jdGlvbiB3ZSh6ZSl7aWYoRi52YWxpZGF0ZShGLmlzU3RyaW5nKHplKSksIi8iPT09emUpcmV0dXJu''@;'; put 'put ''WyIvIl07Y29uc3QgRGU9W3plXTtmb3IoO3plLmxlbmd0aD4xOyl7Y29uc3QgRmU9emUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09RmUpYnJlYWs7emU9emUuc3Vic3RyKDAsRmUpLERlLnB1c2goemUpfXJldHVybiBEZS5wdXNoKCIvIiksRGV9LFguY2Fub25pY2FsRG9tYWluPXgsWC5QcmVm''@;'; put 'put ''aXhTZWN1cml0eUVudW09bGUsWC5QYXJhbWV0ZXJFcnJvcj1GLlBhcmFtZXRlckVycm9yfSw1NzYxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazpffT15KDcwNDEpLGc9eSgyMjI0KS55LEI9eSg3MzI0KS5wZXJtdXRlRG9tYWluLHc9eSg4OTcxKS5VLHtnZXRD''@;'; put 'put ''dXN0b21JbnNwZWN0U3ltYm9sOlAsZ2V0VXRpbEluc3BlY3Q6Rn09eSgxMjY5KTtjbGFzcyBPIGV4dGVuZHMgZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0hMCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IFU9UCgpO1UmJih0aGlzW1VdPXRoaXMu''@;'; put 'put ''aW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtGKHopKHRoaXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKFUsVyxZLHEpe3JldHVybiBxKG51bGwsdGhpcy5pZHhbVV0mJnRoaXMuaWR4W1VdW1ddP3RoaXMuaWR4W1VdW1ddW1ldfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMo''@;'; put 'put ''VSxXLFkscSl7Y29uc3QgZWU9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkmJihxPVksWT0hMCksIVUpcmV0dXJuIHEobnVsbCxbXSk7bGV0IEo7Sj1XP2Z1bmN0aW9uKG1lKXtPYmplY3Qua2V5cyhtZSkuZm9yRWFjaChfZT0+e2lmKHcoVyxfZSkpe2NvbnN0IFRlPW1lW19lXTtmb3IoY29u''@;'; put 'put ''c3QgU2UgaW4gVGUpZWUucHVzaChUZVtTZV0pfX0pfTpmdW5jdGlvbihtZSl7Zm9yKGNvbnN0IF9lIGluIG1lKXtjb25zdCBUZT1tZVtfZV07Zm9yKGNvbnN0IFNlIGluIFRlKWVlLnB1c2goVGVbU2VdKX19O2NvbnN0IG5lPUIoVSxZKXx8W1VdLGllPXRoaXMuaWR4O25lLmZvckVhY2gobGU9''@;'; put 'put ''Pntjb25zdCBtZT1pZVtsZV07bWUmJkoobWUpfSkscShudWxsLGVlKX1wdXRDb29raWUoVSxXKXt0aGlzLmlkeFtVLmRvbWFpbl18fCh0aGlzLmlkeFtVLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF18fCh0aGlzLmlkeFtVLmRvbWFpbl1b''@;'; put 'put ''VS5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtVLmRvbWFpbl1bVS5wYXRoXVtVLmtleV09VSxXKG51bGwpfXVwZGF0ZUNvb2tpZShVLFcsWSl7dGhpcy5wdXRDb29raWUoVyxZKX1yZW1vdmVDb29raWUoVSxXLFkscSl7dGhpcy5pZHhbVV0mJnRoaXMuaWR4W1VdW1ddJiZ0''@;'; put 'put ''aGlzLmlkeFtVXVtXXVtZXSYmZGVsZXRlIHRoaXMuaWR4W1VdW1ddW1ldLHEobnVsbCl9cmVtb3ZlQ29va2llcyhVLFcsWSl7cmV0dXJuIHRoaXMuaWR4W1VdJiYoVz9kZWxldGUgdGhpcy5pZHhbVV1bV106ZGVsZXRlIHRoaXMuaWR4W1VdKSxZKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoVSl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksVShudWxsKX1nZXRBbGxDb29raWVzKFUpe2NvbnN0IFc9W10sWT10aGlzLmlkeDtPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGVlPT57T2JqZWN0LmtleXMoWVtlZV0pLmZvckVhY2gobmU9PntPYmplY3Qua2V5cyhZW2VlXVtuZV0p''@;'; put 'put ''LmZvckVhY2gobGU9PntudWxsIT09bGUmJlcucHVzaChZW2VlXVtuZV1bbGVdKX0pfSl9KSxXLnNvcnQoKGVlLEopPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKEouY3JlYXRpb25JbmRleHx8MCkpLFUobnVsbCxXKX19ZnVuY3Rpb24geihLKXtjb25zdCBVPU9iamVjdC5rZXlzKEspO2lmKDA9''@;'; put 'put ''PT1VLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgVz0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKEspLmZvckVhY2goKFkscSk9PntXKz1mdW5jdGlvbiBOKEssVSl7bGV0IFk9YCAgJyR7S30nOiBbT2JqZWN0''@;'; put 'put ''OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoVSkuZm9yRWFjaCgocSxlZSxKKT0+e1krPWZ1bmN0aW9uIEwoSyxVKXtjb25zdCBXPSIgICAgIjtsZXQgWT1gJHtXfScke0t9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlz''@;'; put 'put ''KFUpLmZvckVhY2goKHEsZWUsSik9PntZKz1gICAgICAgJHtxfTogJHtVW3FdLmluc3BlY3QoKX1gLGVlPEoubGVuZ3RoLTEmJihZKz0iLCIpLFkrPSJcbiJ9KSxZKz1gJHtXfX1gLFl9KHEsVVtxXSksZWU8Si5sZW5ndGgtMSYmKFkrPSIsIiksWSs9IlxuIn0pLFkrPSIgIH0iLFl9KFksS1tZ''@;'; put 'put ''XSkscTxVLmxlbmd0aC0xJiYoVys9IiwiKSxXKz0iXG4ifSksVys9In0iLFd9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1vdmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwicmVtb3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMi''@;'; put 'put ''XS5mb3JFYWNoKEs9PntPLnByb3RvdHlwZVtLXT1fKE8ucHJvdG90eXBlW0tdKX0pLFgubT1PfSw4OTcxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLlU9ZnVuY3Rpb24geShJLF8pe3JldHVybiBfPT09SXx8MD09PUkuaW5kZXhPZihfKSYmKCIvIj09PV8uc3Vic3RyKC0xKXx8Ii8iPT09SS5z''@;'; put 'put ''dWJzdHIoXy5sZW5ndGgsMSkpfX0sNzMyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzUyKTtYLnBlcm11dGVEb21haW49ZnVuY3Rpb24gXyhnLEIpe2NvbnN0IHc9SS5nZXRQdWJsaWNTdWZmaXgoZyx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOkJ9KTtpZighdylyZXR1cm4g''@;'; put 'put ''bnVsbDtpZih3PT1nKXJldHVybltnXTsiLiI9PWcuc2xpY2UoLTEpJiYoZz1nLnNsaWNlKDAsLTEpKTtjb25zdCBGPWcuc2xpY2UoMCwtKHcubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2UoKTtsZXQgTz13O2NvbnN0IHo9W09dO2Zvcig7Ri5sZW5ndGg7KU89YCR7Ri5zaGlmdCgpfS4k''@;'; put 'put ''e099YCx6LnB1c2goTyk7cmV0dXJuIHp9fSw3NTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg1NjYpLF89WyJsb2NhbCIsImV4YW1wbGUiLCJpbnZhbGlkIiwibG9jYWxob3N0IiwidGVzdCJdLGc9WyJsb2NhbGhvc3QiLCJpbnZhbGlkIl07WC5nZXRQdWJsaWNTdWZmaXg9''@;'; put 'put ''ZnVuY3Rpb24gQih3LFA9e30pe2NvbnN0IEY9dy5zcGxpdCgiLiIpLE89RltGLmxlbmd0aC0xXSxOPSEhUC5pZ25vcmVFcnJvcjtpZihQLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmXy5pbmNsdWRlcyhPKSl7aWYoRi5sZW5ndGg+MSlyZXR1cm5gJHtGW0YubGVuZ3RoLTJdfS4ke099YDtpZihn''@;'; put 'put ''LmluY2x1ZGVzKE8pKXJldHVybmAke099YH1pZighTiYmXy5pbmNsdWRlcyhPKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZpeCAiJHtPfSIgd2hpY2ggaXMgYSBzcGVjaWFsIHVzZSBkb21haW4uIFRvIGFsbG93IHRoaXMsIGNvbmZp''@;'; put 'put ''Z3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VEb21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gSS5nZXQodyl9fSwyMjI0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLnk9Y2xhc3MgeXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3lu''@;'; put 'put ''Y2hyb25vdXM9ITF9ZmluZENvb2tpZShfLGcsQix3KXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoXyxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoXyxn''@;'; put 'put ''KXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoXyxnLEIpe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZShfLGcsQix3KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92''@;'; put 'put ''ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKF8sZyxCKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQWxsQ29va2llcyhfKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGlt''@;'; put 'put ''cGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhfKXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKSIpfX19LDEyNjk6KHVlLFgseSk9PntmdW5jdGlvbiBJKCl7dHJ5e3JldHVybiB5KDk1''@;'; put 'put ''MzkpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfKCl7cmV0dXJuIFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIil9WC5nZXRVdGlsSW5zcGVjdD1mdW5jdGlvbih3LFA9e30pe2NvbnN0IE89KFAucmVxdWlyZVV0aWx8fEkpKCk7cmV0dXJuIGZ1bmN0aW9uKE4s''@;'; put 'put ''TCxLKXtyZXR1cm4gTz9PLmluc3BlY3QoTixMLEspOncoTil9fSxYLmdldEN1c3RvbUluc3BlY3RTeW1ib2w9ZnVuY3Rpb24odz17fSl7cmV0dXJuKHcubG9va3VwQ3VzdG9tSW5zcGVjdFN5bWJvbHx8XykoKXx8ZnVuY3Rpb24gZyhCKXtjb25zdCBQPShCLnJlcXVpcmVVdGlsfHxJKSgpO3Jl''@;'; put 'put ''dHVybiBQP1AuaW5zcGVjdC5jdXN0b206bnVsbH0odyl9fSw3NjUyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOfWZ1bmN0aW9uIEIoTil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBOfHxOIGluc3RhbmNlb2YgU3RyaW5nfWZ1''@;'; put 'put ''bmN0aW9uIHcoTil7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0cmluZy5jYWxsKE4pfWNsYXNzIHogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi5MKXtzdXBlciguLi5MKX19WC5QYXJhbWV0ZXJFcnJvcj16LFguaXNGdW5jdGlvbj15LFguaXNOb25FbXB0eVN0cmluZz1mdW5j''@;'; put 'put ''dGlvbiBJKE4pe3JldHVybiBCKE4pJiYiIiE9PU59LFguaXNEYXRlPWZ1bmN0aW9uIF8oTil7cmV0dXJuIGZ1bmN0aW9uIFAoTixMKXt0cnl7cmV0dXJuIE4gaW5zdGFuY2VvZiBMfWNhdGNoe3JldHVybiExfX0oTixEYXRlKSYmZnVuY3Rpb24gRihOKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IE4mJk4lMT09MH0oTi5nZXRUaW1lKCkpfSxYLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24gZyhOKXtyZXR1cm4iIj09PU58fE4gaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09Ti50b1N0cmluZygpfSxYLmlzU3RyaW5nPUIsWC5pc09iamVjdD13LFgudmFsaWRhdGU9ZnVuY3Rpb24gTyhOLEwsSyl7''@;'; put 'put ''aWYoeShMKXx8KEs9TCxMPW51bGwpLHcoSyl8fChLPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFOKXtpZighTCl0aHJvdyBuZXcgeihLKTtMKG5ldyB6KEspKX19fSw0NTY6dWU9Pnt1ZS5leHBvcnRzPSI0LjEuMyJ9LDcwNDE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNr''@;'; put 'put ''PWZ1bmN0aW9uKHkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChJLF8pPT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShnLEIp''@;'; put 'put ''PT57aWYoZylyZXR1cm4gXyhnKTtJKEIpfSxhcmd1bWVudHMubGVuZ3RoKysseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTt5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTp5Lm5hbWV9KX0sWC5mcm9tUHJvbWlzZT1mdW5jdGlvbih5KXtyZXR1cm4gT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgST1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSlyZXR1cm4geS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgtLSx5LmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKF89PkkobnVsbCxfKSxJKX0sIm5hbWUiLHt2YWx1ZTp5Lm5hbWV9KX19LDY3MjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5l''@;'; put 'put ''dyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9u''@;'; put 'put ''IHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbnRl''@;'; put 'put ''eHRNYW5hZ2VyPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz15KDk3NzgpO1guQ29udGV4dE1hbmFnZXI9Y2xhc3MgQntnZXQgZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0IGdldERlZmF1bHRMYXVuY2hlckNvbnRleHRz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9Y29uc3RydWN0b3IoUCxGKXt0aGlzLnNlcnZlclVybD1QLHRoaXMucmVxdWVzdENsaWVudD1GLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0''@;'; put 'put ''YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNB''@;'; put 'put ''UyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVy''@;'; put 'put ''IGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRpbyBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBG''@;'; put 'put ''b3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sUCYmKDAsXy5pc1VybCkoUCl9Z2V0Q29tcHV0ZUNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNl''@;'; put 'put ''cnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dHMuICIpfSk7cmV0dXJuKEYmJkYuaXRlbXM/Ri5pdGVtczpbXSkubWFwKHo9Pih7Y3Jl''@;'; put 'put ''YXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVyc2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWdldExhdW5jaGVyQ29udGV4dHMoUCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGxhdW5jaGVyIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZG''@;'; put 'put ''Lml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1jcmVhdGVDb21wdXRlQ29udGV4dChQLEYsTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsYENvbXB1dGUgY29udGV4dCAnJHtQfScgYWxyZWFkeSBleGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNv''@;'; put 'put ''bnRleHRzKE4pKS5maW5kKGVlPT5lZS5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApO2lmKEYmJiF0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1ZGVzKEYpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJD''@;'; put 'put ''b250ZXh0cyhOKSkuZmluZChKPT5KLm5hbWU9PT1GKSl7Y29uc3QgSj1gVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7Rn1gLGllPXlpZWxkIHRoaXMuY3JlYXRlTGF1bmNoZXJDb250ZXh0KEYsSiwiZGlyZWN0IixOKS5jYXRjaChsZT0+e3Rocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUg''@;'; put 'put ''Y3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gJHtsZX1gKX0pO2lmKCFpZXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO0Y9aWUubmFtZX1sZXQgVz17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9O08mJihXPU9iamVj''@;'; put 'put ''dC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxXKSx7cnVuU2VydmVyQXM6T30pKTtjb25zdCBZPXtuYW1lOlAsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6Rnx8IiJ9LGF0dHJpYnV0ZXM6V307TCYmTC5sZW5ndGg/WS5hdXRob3JpemVkVXNlcnM9TDpZLmF1dGhvcml6ZUFsbEF1dGhlbnRp''@;'; put 'put ''Y2F0ZWRVc2Vycz0hMCx6JiYoWS5lbnZpcm9ubWVudD17YXV0b0V4ZWNMaW5lczp6fSk7Y29uc3R7cmVzdWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzYCxZLE4pLmNhdGNoKGVlPT57dGhyb3coMCxnLnByZWZp''@;'; put 'put ''eE1lc3NhZ2UpKGVlLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSk7cmV0dXJuIHF9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoUCxGLE89ImRpcmVjdCIseil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFQKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMo''@;'; put 'put ''eikpLmZpbmQoVz0+Vy5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBMYXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBLPXtuYW1lOlAsZGVzY3JpcHRpb246RixsYXVuY2hUeXBlOk99LHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBv''@;'; put 'put ''c3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxLLHopLmNhdGNoKFc9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoVywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIil9KTtyZXR1cm4gVX0pfWVkaXRDb21wdXRlQ29udGV4dChQLEYsTyl7''@;'; put 'put ''cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6O3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBp''@;'; put 'put ''cyBub3QgYWxsb3dlZC4iLCEwKSx6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxPKSx6fHwoej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChGLmlkLE8pKTtjb25zdHtyZXN1bHQ6TixldGFnOkx9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7''@;'; put 'put ''dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt6LmlkfWAsTykuY2F0Y2goSz0+e3Rocm93IEsmJjQwND09PUsuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuYCk6S30pO3JldHVybiB5aWVsZCB0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke04uaWR9YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxOKSxGKSx7YXR0cmlidXRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sTi5hdHRyaWJ1dGVzKSxGLmF0dHJpYnV0ZXMp''@;'; put 'put ''fSksTyx7IklmLU1hdGNoIjpMfSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9j''@;'; put 'put ''b250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7UH0iKWAsRikuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pO2lmKCFPfHwhTy5pdGVtc3x8IU8uaXRlbXMubGVuZ3RoKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgYXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gTy5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1''@;'; put 'put ''bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke1B9YCxGKS5jYXRjaCh6PT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0p''@;'; put 'put ''O3JldHVybiBPfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpPfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0''@;'; put 'put ''PTEwMDAwYCxGPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKFU9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pLHo9Ty5pdGVtc3x8W10sTj1bXSxMPXoubWFwKFU9Pntjb25zdCBXPVsiJXB1dCAmPXN5c3VzZXJpZDsi''@;'; put 'put ''XTtyZXR1cm4oKT0+UChgdGVzdC0ke1UubmFtZX1gLFcsVS5uYW1lLEYsbnVsbCwhMSwhMCwhMCkuY2F0Y2goWT0+WSl9KTtsZXQgSz1bXTtmb3IoY29uc3QgVSBvZiBMKUsucHVzaCh5aWVsZCBVKCkpO3JldHVybiBLLmZvckVhY2goKFUsVyk9PntpZihVJiZVLmxvZyl0cnl7bGV0IHE9IiI7''@;'; put 'put ''Y29uc3QgZWU9VS5sb2cuc3BsaXQoIlxuIikuZmluZChKPT5KLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKSk7ZWUmJihxPWVlLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxOLnB1c2goe2NyZWF0ZWRCeTp6W1ddLmNyZWF0ZWRCeSxpZDp6W1ddLmlkLG5hbWU6eltXXS5uYW1lLHZlcnNpb246''@;'; put 'put ''eltXXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpxfX0pKX1jYXRjaChZKXt0aHJvdyBZfX0pLE59KX1kZWxldGVDb21wdXRlQ29udGV4dChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5p''@;'; put 'put ''c0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApO2NvbnN0IHo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpO3JldHVybiB5aWVs''@;'; put 'put ''ZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLEYpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShQKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1bHRDb250''@;'; put 'put ''ZXh0KFAsRj10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsTz0iIix6PSExKXtpZihGLmluY2x1ZGVzKFApKXRocm93IG5ldyBFcnJvcihgJHtPfSR7ej8iXG5EZWZhdWx0IGNvbnRleHRzOiIrRi5tYXAoKE4sTCk9PmBcbiR7TCsxfS4gJHtOfWApOiIifWApfX19LDgzMDY6ZnVuY3Rpb24o''@;'; put 'put ''dWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcoTHx8KEw9UHJvbWlzZSkpKGZ1bmN0aW9uKFcsWSl7ZnVuY3Rpb24gcShuZSl7dHJ5e0ooSy5uZXh0KG5lKSl9Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlv''@;'; put 'put ''biBlZShuZSl7dHJ5e0ooSy50aHJvdyhuZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gSihuZSl7bmUuZG9uZT9XKG5lLnZhbHVlKTpmdW5jdGlvbiBVKFcpe3JldHVybiBXIGluc3RhbmNlb2YgTD9XOm5ldyBMKGZ1bmN0aW9uKFkpe1koVyl9KX0obmUudmFsdWUpLnRoZW4ocSxlZSl9''@;'; put 'put ''SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHope3JldHVybiB6JiZ6Ll9fZXNNb2R1bGU/ejp7ZGVmYXVsdDp6fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''U0FTOUFwaUNsaWVudD12b2lkIDA7Y29uc3QgZz15KDc3NTcpLEI9Xyh5KDYyMzApKSx3PXkoNzk1KSxQPXkoNTkyOCk7WC5TQVM5QXBpQ2xpZW50PWNsYXNzIEZ7Y29uc3RydWN0b3IoTixMLEspe3RoaXMuc2VydmVyVXJsPU4sdGhpcy5qb2JzUGF0aD1MLE4mJigwLFAuaXNVcmwpKE4pLHRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudD1uZXcgdy5TYXM5UmVxdWVzdENsaWVudChOLEspfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fXNldENvbmZpZyhOKXtOJiYodGhpcy5zZXJ2ZXJVcmw9Til9ZXhlY3V0ZVNjcmlwdChOLEwsSyl7cmV0dXJuIEkodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihMLEssdGhpcy5qb2JzUGF0aCk7Y29uc3QgVz1PKFsuLi5OLCJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRlZCBzYXNqcyBydW4nOyIsInJ1bjsiXS5qb2luKCJcbiIp''@;'; put 'put ''KSxZPWAvVXNlciBGb2xkZXJzLyR7TH0vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmAscT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitXLmdldEJvdW5kYXJ5KCksSj17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOnEsIkNvbnRl''@;'; put 'put ''bnQtTGVuZ3RoIjpXLmdldExlbmd0aFN5bmMoKSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0sbmU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrWSsiJl9kZWJ1Zz1sb2cifWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KG5lLFcsdm9pZCAwLHEsSikpLnJl''@;'; put 'put ''c3VsdH0pfX07Y29uc3QgTz16PT57Y29uc3QgTj1uZXcgQi5kZWZhdWx0LEw9YHNhc2pzLWV4ZWN1dGUtc2FzOS0keygwLGcuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKX0uc2FzYDtyZXR1cm4gTi5hcHBlbmQoTCx6LHtmaWxlbmFtZTpMLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLE59fSw5''@;'; put 'put ''ODIxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG5lLGllLGxlLG1lKXtyZXR1cm4gbmV3KGxlfHwobGU9UHJvbWlzZSkpKGZ1bmN0aW9uKFRlLFNlKXtmdW5jdGlvbiBqZShiKXt0''@;'; put 'put ''cnl7cChtZS5uZXh0KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gVihiKXt0cnl7cChtZS50aHJvdyhiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIHAoYil7Yi5kb25lP1RlKGIudmFsdWUpOmZ1bmN0aW9uIF9lKFRlKXtyZXR1cm4gVGUgaW5zdGFuY2VvZiBsZT9UZTpuZXcgbGUo''@;'; put 'put ''ZnVuY3Rpb24oU2Upe1NlKFRlKX0pfShiLnZhbHVlKS50aGVuKGplLFYpfXAoKG1lPW1lLmFwcGx5KG5lLGllfHxbXSkpLm5leHQoKSl9KX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24obmUpe3JldHVybiBuZSYmbmUuX19lc01vZHVsZT9uZTp7ZGVmYXVsdDpuZX19''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHc9eSg1OTI4KSxQPUIoeSg2MjMwKSksRj15KDEzOTUpLE89eSg2OTAzKSx6PXkoNjcyKSxOPXkoOTA5NyksTD15KDk3NzgpLEs9eSgxMzQzKSxV''@;'; put 'put ''PXkoNzA0KSxXPXkoNjQ5NiksWT15KDE2MjIpLHE9eSgzNTY5KSxlZT15KDM2Nik7WC5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIEp7Y29uc3RydWN0b3IoaWUsbGUsbWUsX2Upe3RoaXMuc2VydmVyVXJsPWllLHRoaXMucm9vdEZvbGRlck5hbWU9bGUsdGhpcy5jb250ZXh0TmFtZT1tZSx0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQ9X2UsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgTy5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgei5Db250ZXh0TWFuYWdl''@;'; put 'put ''cih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsaWUmJigwLHcuaXNVcmwpKGllKX1hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChpZSxsZSxtZSl9Z2V0IGRlYnVnKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhpZSl7dGhpcy5fZGVidWc9aWUsdGhpcy5zZXNzaW9uTWFuYWdlciYmKHRoaXMuc2Vzc2lvbk1hbmFnZXIuZGVidWc9aWUpfWdldEpvYnNJbkZvbGRlcihpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxlPSgw''@;'; put 'put ''LHcuaXNSZWxhdGl2ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7cmV0dXJuIHRoaXMuZm9sZGVyTWFwLmdldChsZSl8fCh5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGxlKSksdGhpcy5mb2xkZXJNYXAuZ2V0KGxlKX0pfWdldENvbmZpZygpe3JldHVy''@;'; put 'put ''bntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwscm9vdEZvbGRlck5hbWU6dGhpcy5yb290Rm9sZGVyTmFtZX19c2V0Q29uZmlnKGllLGxlKXtpZSYmKHRoaXMuc2VydmVyVXJsPWllKSxsZSYmKHRoaXMucm9vdEZvbGRlck5hbWU9bGUpfWdldENvbXB1dGVDb250ZXh0cyhpZSl7cmV0dXJuIGco''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0cyhpZSl9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RGVmYXVsdENvbXB1dGVDb250''@;'; put 'put ''ZXh0c31nZXRMYXVuY2hlckNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0TGF1bmNoZXJDb250ZXh0cyhpZSl9KX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoaWUpe3JldHVybiBnKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT10aGlzLmV4ZWN1dGVTY3JpcHQuYmluZCh0aGlzKTtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRFeGVjdXRhYmxlQ29udGV4dHMobGUsaWUpfSl9Y3JlYXRlU2Vzc2lvbihpZSxsZSl7cmV0dXJuIGcodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpfZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLGxlKSxUZT1fZS5pdGVtcyYmX2UuaXRlbXMubGVuZ3RoP19lLml0ZW1zLmZpbmQoamU9PmplLm5hbWU9''@;'; put 'put ''PT1pZSk6bnVsbDtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBFeGVjdXRpb24gY29udGV4dCAke2llfSBub3QgZm91bmQuYCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2NvbXB1dGUvY29udGV4dHMvJHtUZS5pZH0vc2Vzc2lvbnNgLHt9LGxlKTty''@;'; put 'put ''ZXR1cm4gU2V9KX1jcmVhdGVDb21wdXRlQ29udGV4dChpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KGllLGxlLG1lLF9lLFRlLFNlKX0p''@;'; put 'put ''fWNyZWF0ZUxhdW5jaGVyQ29udGV4dChpZSxsZSxtZT0iZGlyZWN0IixfZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChpZSxsZSxtZSxfZSl9KX1lZGl0Q29tcHV0''@;'; put 'put ''ZUNvbnRleHQoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNvbnRleHQoaWUsbGUsbWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUpe3JldHVybiBnKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChpZSxsZSl9KX1leGVjdXRlU2NyaXB0KGllLGxlLG1lLF9lLFRlPW51bGwsU2U9ITEsamU9ITEsVj0hMCxwLGI9ITEseCl7cmV0dXJuIGcodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFkuZXhlY3V0ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxpZSxsZSxtZSxfZSxUZSxTZSxqZSxWLHAsYix4KX0pfWdldEZpbGVDb250ZW50KGll''@;'; put 'put ''LGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9eWllbGQgdGhpcy5nZXRGaWxlVXJpKGllLGxlLG1lKS5jYXRjaChUZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShUZSxgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7''@;'; put 'put ''bGV9IGluIGZvbGRlcjogJHtpZX0uIGApfSk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtfZX0vY29udGVudGAsbWUpLnRoZW4oVGU9PlRlLnJlc3VsdCl9KX11cGRhdGVGaWxlQ29udGVudChpZSxsZSxtZSxfZSl7cmV0dXJuIGcodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXlpZWxkIHRoaXMuZ2V0RmlsZVVyaShpZSxsZSxfZSkuY2F0Y2goVj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShWLGBFcnJvciB3aGlsZSBnZXR0aW5nIGZpbGUgVVJJIGZvcjogJHtsZX0gaW4gZm9sZGVyOiAke2llfS4g''@;'; put 'put ''YCl9KSx7cmVzdWx0OlNlLGV0YWc6amV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX1gLF9lKTtpZighU2V8fCFqZSl0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtsZX0gZG9lcyBub3QgaGF2ZSBhbiBFVGFnLCBvciByZXF1ZXN0IGZhaWxlZC5g''@;'; put 'put ''KTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgJHt0aGlzLnNlcnZlclVybH0ke1RlfS9jb250ZW50YCxtZSxfZSx7IklmLU1hdGNoIjpqZSwiQ29udGVudC1UeXBlIjpTZS5jb250ZW50VHlwZX0pLnRoZW4oVj0+Vi5yZXN1bHQpfSl9Z2V0Rm9sZGVyKGllLGxlKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2llfWAsbGUpLnRoZW4obWU9Pm1lLnJlc3VsdCl9KX1jcmVhdGVGaWxlKGllLGxlLG1lLF9lLFRlKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIW1lJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTshX2UmJm1lJiYoX2U9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobWUsVGUpKTtjb25zdCBT''@;'; put 'put ''ZT17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlzcG9zaXRpb24iOmBmaWxlbmFtZT0iJHtpZX0iO2B9LGplPW5ldyBQLmRlZmF1bHQ7cmV0dXJuIGplLmFwcGVuZCgiZmlsZSIsbGUsaWUpLCh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChg''@;'; put 'put ''L2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0ke19lfSZ0eXBlRGVmTmFtZT1maWxlI3Jhd1VwbG9hZGAsamUsVGUsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIramUuX2JvdW5kYXJ5LFNlKSkucmVzdWx0fSl9Y3JlYXRlRm9sZGVyKGllLGxlLG1lLF9lLFRlKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgU2U9SS5sb2dnZXJ8fF87aWYoIWxlJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtpZighbWUmJmxlKWlmKG1lPXlpZWxkIHRoaXMuZ2V0Rm9s''@;'; put 'put ''ZGVyVXJpKGxlLF9lKSl7aWYoVGUpe2NvbnN0IFY9bGUrIi8iK2llOyh5aWVsZCB0aGlzLmdldEZvbGRlclVyaShWLF9lKSkmJih5aWVsZCB0aGlzLmRlbGV0ZUZvbGRlcihsZSsiLyIraWUsX2UpKX19ZWxzZXtTZS5pbmZvKGBQYXJlbnQgZm9sZGVyIGF0IHBhdGggJyR7bGV9JyBpcyBub3Qg''@;'; put 'put ''cHJlc2VudC5gKTtjb25zdCBWPWxlLnN1YnN0cmluZygwLGxlLmxhc3RJbmRleE9mKCIvIikpLHA9YCR7bGUuc3BsaXQoIi8iKS5wb3AoKX1gO2lmKCIiPT09Vil0aHJvdyBuZXcgRi5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihsZSx0aGlzLnNlcnZlclVybCxfZSk7U2UuaW5mbyhgQ3JlYXRp''@;'; put 'put ''bmcgcGFyZW50IGZvbGRlcjpcbicke3B9JyBpbiAnJHtWfSdgKTtjb25zdCBiPXlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKHAsVix2b2lkIDAsX2UpO1NlLmluZm8oYFBhcmVudCBmb2xkZXIgJyR7cH0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLmApLG1lPWAvZm9sZGVycy9mb2xk''@;'; put 'put ''ZXJzLyR7Yi5pZH1gfWNvbnN0e3Jlc3VsdDpqZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSR7bWV9YCx7bmFtZTppZSx0eXBlOiJmb2xkZXIifSxfZSkuY2F0Y2goVj0+e2NvbnN0e21lc3NhZ2U6cCxyZXNwb25zZTpi''@;'; put 'put ''fT1WO2lmKHAmJmImJmIuZGF0YSYmYi5kYXRhLm1lc3NhZ2Upe2NvbnN0e3N0YXR1czp4fT1iLHttZXNzYWdlOkN9PWIuZGF0YSxUPVtwLENdLm1hcChqPT4vXC4kLy50ZXN0KGopP2o6YCR7an0uYCk7dGhyb3chVGUmJjQwOT09PXgmJlQucHVzaCgnVG8gb3ZlcnJpZGUsIHBsZWFzZSBzZXQg''@;'; put 'put ''ImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksVC5qb2luKCIgIil9dGhyb3cgVn0pO3JldHVybiB5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGAke2xlfS8ke2llfWAsX2UpLGplfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCB0byBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIV9lJiZtZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLFRlKSkseWllbGQgdGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0ke19lfWAse25hbWU6aWUscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixkZWZhdWx0VmFsdWU6ImZh''@;'; put 'put ''bHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6bGV9LFRlKX0pfWdldEF1dGhDb2RlKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU0xvZ29uL29hdXRoL2F1dGhvcml6ZT9jbGllbnRfaWQ9JHtpZX0mcmVz''@;'; put 'put ''cG9uc2VfdHlwZT1jb2RlYDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChsZSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKF9lPT5fZS5yZXN1bHQpLnRoZW4oX2U9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBUZT0iIjtpZigoMCxOLmlzQXV0aG9y''@;'; put 'put ''aXplRm9ybVJlcXVpcmVkKShfZSkpe2NvbnN0IGplPSh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuYXV0aG9yaXplKF9lKSkuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sVj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gVi5pbm5lckhUTUw9amUs''@;'; put 'put ''VGU9Vi5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCxUZX17Y29uc3QgU2U9X2Uuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0samU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGplLmlubmVySFRNTD1TZSxqZSYmKFRlPWpl''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0KSxUZX19KSkuY2F0Y2goKCk9Pm51bGwpfSl9Z2V0QWNjZXNzVG9rZW4oaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxxLmdldEFjY2Vzc1Rva2VuRm9yVml5YSko''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LGllLGxlLG1lKX0pfXJlZnJlc2hUb2tlbnMoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxlZS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLGxlLG1lKX0pfWRlbGV0''@;'; put 'put ''ZUNsaWVudChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXRoaXMuc2VydmVyVXJsK2Avb2F1dGgvY2xpZW50cy8ke2llfWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUobWUsbGUpKS5yZXN1bHR9KX1leGVjdXRl''@;'; put 'put ''Q29tcHV0ZUpvYihpZSxsZSxtZSxfZSxUZSxTZT0hMCxqZT0hMSxWLHA9ITEsYil7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB4PShUZXx8e30pLmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46eH09eWllbGQoMCxVLmdldFRva2VucykodGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUiKTtjb25zdCBDPWll''@;'; put 'put ''LnNwbGl0KCIvIiksVD1DLnBvcCgpLEg9Qy5qb2luKCIvIiksaj0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtIfWA6SDt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGoseCkuY2F0Y2godGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSko''@;'; put 'put ''dGUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9KTtjb25zdCBFPXRoaXMuZm9sZGVyTWFwLmdldChqKTtpZighRSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJyR7an0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhpcy5zZXJ2ZXJVcmx9J2ApO2NvbnN0IG09RT8u''@;'; put 'put ''ZmluZCh0ZT0+dGUubmFtZT09PVQpO2lmKCFtKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7bGV0IEE9bT8uY29kZTtpZighQSl7Y29uc3QgdGU9bT8ubGlua3MuZmluZCh3ZT0+ImdldFJlc291cmNlIj09PXdlLnJlbCk7aWYoIXRlKXRocm93IG5ldyBFcnJvcigiVVJJ''@;'; put 'put ''IG9mIGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91bmQuIik7Y29uc3R7cmVzdWx0OnNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7dGUuaHJlZn1gLHgpLmNhdGNoKHdlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHdlLCJFcnJvciB3aGls''@;'; put 'put ''ZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9uLiAiKX0pO0E9c2UuY29kZSxtLmNvZGU9QX1BfHwoQT0iIik7Y29uc3QgYWU9QS5yZXBsYWNlKC9cclxuL2csIlxuIikuc3BsaXQoIlxuIik7cmV0dXJuIHlpZWxkIHRoaXMuZXhlY3V0ZVNjcmlwdChpZSxhZSxsZSxUZSxfZSxtZSxqZSxTZSxWLHAs''@;'; put 'put ''Yil9KX1leGVjdXRlSm9iKGllLGxlLG1lLF9lLFRlKXt2YXIgU2UsamUsVjtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHA9KFRlfHx7fSkuYWNjZXNzX3Rva2VuO2lmKFRlJiYoe2FjY2Vzc190b2tlbjpwfT15aWVsZCgwLFUuZ2V0VG9rZW5zKSh0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQsVGUpKSwoMCx3LmlzUmVsYXRpdmVQYXRoKShpZSkmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZS4iKTtjb25zdCBiPWllLnNw''@;'; put 'put ''bGl0KCIvIikseD1iLnBvcCgpLEM9Yi5qb2luKCIvIiksVD0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtDfWA6Qzt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKFQscCk7Y29uc3QgSD10aGlzLmZvbGRlck1hcC5nZXQoVCk7aWYoIUgpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke1R9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfScuYCk7Y29uc3Qgaj1IPy5maW5kKERlPT5EZS5uYW1lPT09eCk7bGV0IEU9W107aWYoX2UmJk9iamVjdC5rZXlzKF9lKS5sZW5ndGgmJihFPXlpZWxkIHRoaXMudXBsb2Fk''@;'; put 'put ''VGFibGVzKF9lLHApKSwhail0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0IG09bnVsbD09PShTZT1qPy5saW5rcy5maW5kKERlPT4iZ2V0UmVzb3VyY2UiPT09RGUucmVsKSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS5ocmVmLHtyZXN1bHQ6QX09eWllbGQgdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke219YCxwKSxhZT17X2NvbnRleHROYW1lOmxlLF9wcm9ncmFtOmAke1R9LyR7eH1gLF93ZWJpbl9maWxlX2NvdW50OkUubGVuZ3RoLF9PTUlUSlNPTkxJU1RJTkc6ITAsX09NSVRKU09OTE9HOiEwLF9vbWl0U2Vzc2lvblJl''@;'; put 'put ''c3VsdHM6ITEsX09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6ITB9O21lJiYoYWUuX09NSVRURVhUTE9HPSJmYWxzZSIsYWUuX29taXRTZXNzaW9uUmVzdWx0cz0iZmFsc2UiLGFlLl9ERUJVRz0xMzEpLEUuZm9yRWFjaCgoRGUsRmUpPT57YWVbYF93ZWJpbl9maWxldXJpJHtGZSsx''@;'; put 'put ''fWBdPWAvZmlsZXMvZmlsZXMvJHtEZS5maWxlLmlkfWAsYWVbYF93ZWJpbl9uYW1lJHtGZSsxfWBdPURlLnRhYmxlTmFtZX0pO2NvbnN0IHRlPXtuYW1lOmBleGVjLSR7eH1gLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixqb2JEZWZpbml0aW9uOkEsYXJndW1lbnRzOmFlfSx7cmVz''@;'; put 'put ''dWx0OnNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0YCx0ZSxwKSx3ZT15aWVsZCB0aGlzLnBvbGxKb2JTdGF0ZShzZSxUZSkuY2F0Y2goRGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSko''@;'; put 'put ''RGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSx7cmVzdWx0OlVlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JFeGVjdXRpb24vam9icy8ke3NlLmlkfWAscCk7bGV0IEplLG90O2NvbnN0IHhlPVVlLnJlc3VsdHNbIl93''@;'; put 'put ''ZWJvdXQuanNvbiJdLHZlPVVlLmxpbmtzLmZpbmQoRGU9PiJsb2ciPT09RGUucmVsKTtpZih4ZSYmKEplPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt4ZX0vY29udGVudGAscCwidGV4dC9wbGFpbiIpKSxtZSYmdmUmJihvdD15aWVsZCB0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7dmUuaHJlZn0vY29udGVudGAscCkudGhlbihEZT0+RGUucmVzdWx0Lml0ZW1zLm1hcChGZT0+RmUubGluZSkuam9pbigiXG4iKSkpLCJmYWlsZWQiPT09d2UpdGhyb3cgbmV3IEYuSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PShq''@;'; put 'put ''ZT1VZS5lcnJvcil8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5lcnJvckNvZGUsbnVsbD09PShWPVVlLmVycm9yKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5tZXNzYWdlLG90KTtjb25zdCBYZT17cmVzdWx0OkplPy5yZXN1bHQsbG9nOm90fSx7ZXJyb3I6emV9PVVlO3JldHVybiB6ZSYmKFhlLmVy''@;'; put 'put ''cm9yPXplKSxYZX0pfXBvcHVsYXRlRm9sZGVyTWFwKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7aWV9YDppZTtpZih0aGlzLmZvbGRlck1hcC5n''@;'; put 'put ''ZXQobWUpKXJldHVybjtjb25zdCBfZT0iL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIrbWUse3Jlc3VsdDpUZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHtfZX1gLGxlKS5jYXRjaChWPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKFYsIkVycm9yIHdoaWxlIGdldHRp''@;'; put 'put ''bmcgZm9sZGVyLiAiKX0pO2lmKCFUZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXRoICR7bWV9IGRvZXMgbm90IGV4aXN0IG9uICR7dGhpcy5zZXJ2ZXJVcmx9YCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzLyR7VGUuaWR9''@;'; put 'put ''L21lbWJlcnM/bGltaXQ9JHtUZS5tZW1iZXJDb3VudDw1MDA/NTAwOlRlLm1lbWJlckNvdW50fWAsbGUpLmNhdGNoKFY9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoViwiRXJyb3Igd2hpbGUgZ2V0dGluZyBtZW1iZXJzLiAiKX0pO3RoaXMuZm9sZGVyTWFwLnNldChtZSxTZS5pdGVtcyl9''@;'; put 'put ''KX1wb2xsSm9iU3RhdGUoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxLLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLHRoaXMuZGVidWcsbGUsbWUpfSl9dXBsb2FkVGFibGVzKGllLGxlKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsVy51cGxvYWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSl9KX1nZXRGb2xkZXJEZXRhaWxzKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9KDAsdy5pc1VyaSko''@;'; put 'put ''aWUpP2llOmAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1gLHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttZX1gLGxlKS5jYXRjaChUZT0+e2lmKFRlIGluc3RhbmNlb2YgRi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93''@;'; put 'put ''IFRlO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihfZSlyZXR1cm4gX2V9KX1nZXRGb2xkZXJVcmkoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT15aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMoaWUsbGUpO2lmKG1lKXJldHVybmAvZm9s''@;'; put 'put ''ZGVycy9mb2xkZXJzLyR7bWUuaWR9YH0pfWdldEZpbGVVcmkoaWUsbGUsbWUpe3ZhciBfZTtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9eWllbGQgdGhpcy5saXN0Rm9sZGVyKGllLG1lLDFlMyx7cmV0dXJuRGV0YWlsczohMH0pLmNhdGNoKGplPT57''@;'; put 'put ''dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGplLGBFcnJvciB3aGlsZSBsaXN0aW5nIGZvbGRlcjogJHtpZX0uIGApfSk7aWYoIVRlfHwhVGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTm8gbWVtYmVycyBmb3VuZCBpbiBmb2xkZXI6ICR7aWV9YCk7Y29uc3QgU2U9bnVsbD09PShfZT1UZS5m''@;'; put 'put ''aW5kKGplPT5qZS5uYW1lPT09bGUpKXx8dm9pZCAwPT09X2U/dm9pZCAwOl9lLnVyaTtpZighU2UpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7bGV9IG5vdCBmb3VuZCBpbiBmb2xkZXI6ICR7aWV9YCk7cmV0dXJuIFNlfSl9Z2V0UmVjeWNsZUJpblVyaShpZSl7cmV0dXJuIGcodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDptZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW5gLGllKS5jYXRjaChfZT0+e2lmKF9lIGluc3RhbmNlb2YgRi5DZXJ0aWZpY2F0ZUVy''@;'; put 'put ''cm9yKXRocm93IF9lO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihtZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke21lLmlkfWB9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlz''@;'; put 'put ''LmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKGllLGxlKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250''@;'; put 'put ''ZXh0QnlJZChpZSxsZSl9KX1saXN0Rm9sZGVyKGllLGxlLG1lPTIwLF9lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9KDAsdy5pc1VyaSkoaWUpP2llOnlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLGxlKSx7cmVzdWx0OlNlfT15aWVsZCB0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9L21lbWJlcnM/bGltaXQ9JHttZX1gLGxlKTtsZXQgamU9W107cmV0dXJuIFNlJiZTZS5pdGVtcyYmKGplPV9lPy5yZXR1cm5EZXRhaWxzP1NlLml0ZW1zOlNlLml0ZW1zLm1hcChWPT5WLm5hbWUpKSxqZX0pfW1vdmVG''@;'; put 'put ''b2xkZXIoaWUsbGUsbWUsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT1pZS5zcGxpdCgiLyIpLnBvcCgpO2lmKHlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhsZSxfZSkpbWU9VGU7ZWxzZXtsZXQgeD1sZS5zcGxpdCgiLyIpO3guc3BsaWNl''@;'; put 'put ''KHgubGVuZ3RoLTEsMSksbGU9eC5qb2luKCIvIil9Y29uc3QgamU9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoaWUsX2UpLFY9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobGUsX2UpO2lmKCFqZSlyZXR1cm47Y29uc3QgcD1qZT8uc3BsaXQoIi8iKS5wb3AoKSx7cmVzdWx0OmJ9PXlpZWxkIHRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5wYXRjaChgJHt0aGlzLnNlcnZlclVybH0ke2plfWAse2lkOnAsbmFtZTptZSxwYXJlbnRGb2xkZXJVcmk6Vn0sX2UpLmNhdGNoKHg9Pnt0aHJvdyB4LmNvZGUmJiJFTk9URk9VTkQiPT09eC5jb2RlP3tib2R5OnttZXNzYWdlOmBGb2xkZXIgJyR7aWUuc3BsaXQo''@;'; put 'put ''Ii8iKS5wb3AoKX0nIHdhcyBub3QgZm91bmQuYH19Onh9KTtyZXR1cm4gYnx8dm9pZCAwfSl9ZGVsZXRlRm9sZGVyKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRSZWN5Y2xlQmluVXJpKGxlKSxfZT1pZS5zcGxp''@;'; put 'put ''dCgiLyIpLnBvcCgpfHwiIixUZT1uZXcgRGF0ZSxqZT1fZSsiICIrVGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK1RlLnRvTG9jYWxlVGltZVN0cmluZygpO3JldHVybiB5aWVsZCB0aGlzLm1vdmVGb2xkZXIoaWUsbWUsamUsbGUpfSl9fX0sNTk1NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShU''@;'; put 'put ''ZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUpe3JldHVybiBuZSBpbnN0YW5jZW9mIHE/bmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKG5lKX0pfShUZS52YWx1ZSkudGhlbihs''@;'; put 'put ''ZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBfPXkoNTkyOCksZz15KDEyMzApLEI9eSg5ODIxKSx3PXkoODMwNiksUD15KDM0NjcpLEY9eSgxNTI3KSxPPXkoMzkw''@;'; put 'put ''MCksej15KDQ1ODgpLE49eSgzNjAyKSxMPXkoODIxNyksSz17c2VydmVyVXJsOiIiLHBhdGhTQVNKUzoiL1NBU2pzQXBpL3N0cC9leGVjdXRlIixwYXRoU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8iLHBhdGhTQVNWaXlhOiIvU0FTSm9iRXhlY3V0aW9uIixhcHBMb2M6Ii9QdWJsaWMvc2Vl''@;'; put 'put ''ZGFwcCIsc2VydmVyVHlwZTpPLlNlcnZlclR5cGUuU2FzVml5YSxkZWJ1ZzohMSxjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Iix1c2VDb21wdXRlQXBpOm51bGwsbG9naW5NZWNoYW5pc206Zy5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0fTtYLmRlZmF1bHQ9''@;'; put 'put ''Y2xhc3MgVXtjb25zdHJ1Y3RvcihZKXt0aGlzLnNhc2pzQ29uZmlnPW5ldyBnLlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9IiIsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxsLHRoaXMuZmlsZVVwbG9h''@;'; put 'put ''ZGVyPW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRoaXMucmVxdWVzdENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhlY3V0b3I9bnVsbCx0aGlz''@;'; put 'put ''LnNhczlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgcSxlZSxKLG5lLGllO3lpZWxkIG51bGw9PT0ocT10aGlzLndlYkpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09cT92b2lkIDA6cS5yZXNl''@;'; put 'put ''bmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oSj10aGlzLmplc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Sj92b2lkIDA6''@;'; put 'put ''Si5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KG5lPXRoaXMuZmlsZVVwbG9hZGVyKXx8dm9pZCAwPT09bmU/dm9pZCAwOm5lLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oaWU9dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09aWU/dm9p''@;'; put 'put ''ZCAwOmllLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpfSksdGhpcy5zZXRWZXJib3NlTW9kZT1xPT57dmFyIGVlO251bGw9PT0oZWU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09ZWV8fGVlLnNldFZlcmJvc2VNb2RlKHEpfSx0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2Jq''@;'; put 'put ''ZWN0LmFzc2lnbih7fSxLKSxZKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfWdldENzcmZUb2tlbihZPSJnZW5lcmFsIil7dmFyIHE7cmV0dXJuIG51bGw9PT0ocT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1xP3ZvaWQgMDpxLmdldENzcmZUb2tlbihZKX1leGVjdXRlU2NyaXB0''@;'; put 'put ''KHtsaW5lc09mQ29kZTpZLGZpbGVOYW1lOnEsY29udGV4dE5hbWU6ZWUscnVuVGltZTpKLGF1dGhDb25maWc6bmUsYXV0aENvbmZpZ1Nhczk6aWUsZGVidWc6bGV9KXt2YXIgbWUsX2U7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuaXNNZXRob2RTdXBw''@;'; put 'put ''b3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtPLlNlcnZlclR5cGUuU2FzOSxPLlNlcnZlclR5cGUuU2FzanMsTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSl7aWYoIWllKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25m''@;'; put 'put ''aWcgZm9yIHNhczkgaXMgbm90IHByb3ZpZGVkIik7cmV0dXJuIHlpZWxkIG51bGw9PT0obWU9dGhpcy5zYXM5QXBpQ2xpZW50KXx8dm9pZCAwPT09bWU/dm9pZCAwOm1lLmV4ZWN1dGVTY3JpcHQoWSxpZS51c2VyTmFtZSxpZS5wYXNzd29yZCl9aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU''@;'; put 'put ''eXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB5aWVsZCBudWxsPT09KF9lPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1fZT92b2lkIDA6X2UuZXhlY3V0ZVNjcmlwdChZLmpvaW4oIlxuIiksSixuZSk7aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2''@;'; put 'put ''ZXJUeXBlLlNhc1ZpeWEpe2lmKCEoZWU9ZWV8fHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7''@;'; put 'put ''aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWlyZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUgYSBgZmlsZU5hbWVgLiIpO3JldHVybiB5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZXhlY3V0ZVNjcmlwdChxLFksZWUsbmUsbnVsbCxsZXx8''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9fSl9ZXhlY3V0ZUpvYihZLHEsZWUpe3ZhciBKO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW08uU2VydmVyVHlwZS5TYXNqc10pLHlpZWxk''@;'; put 'put ''IG51bGw9PT0oSj10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09Sj92b2lkIDA6Si5leGVjdXRlSm9iKFkscSxlZSl9KX1nZXRDb21wdXRlQ29udGV4dHMoWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk''@;'; put 'put ''KCJnZXRDb21wdXRlQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dHMoWSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0TGF1bmNoZXJDb250ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHMoWSl9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RXhlY3V0YWJsZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKFkpfSl9Y3JlYXRlQ29tcHV0''@;'; put 'put ''ZUNvbnRleHQoWSxxLGVlLEosbmUsaWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNs''@;'; put 'put ''aWVudC5jcmVhdGVDb21wdXRlQ29udGV4dChZLHEsZWUsSixuZSxpZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoWSxxLGVlLEope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlTGF1bmNoZXJDb250''@;'; put 'put ''ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlTGF1bmNoZXJDb250ZXh0KFkscSxlZSxKKX0pfWVkaXRDb21wdXRlQ29udGV4dChZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KFkscSxlZSl9KX1kZWxldGVDb21wdXRlQ29udGV4dChZLHEpe3JldHVybiBJKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ29tcHV0ZUNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDb21wdXRlQ29udGV4dChZLHEpfSl9Z2V0Q29t''@;'; put 'put ''cHV0ZUNvbnRleHRCeU5hbWUoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlOYW1lIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlD''@;'; put 'put ''bGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoWSxxKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeUlkIixbTy5TZXJ2''@;'; put 'put ''ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFkscSl9KX1jcmVhdGVTZXNzaW9uKFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJj''@;'; put 'put ''cmVhdGVTZXNzaW9uIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlU2Vzc2lvbihZLHEpfSl9Y3JlYXRlRm9sZGVyKFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5l''@;'; put 'put ''P3lpZWxkIG5lLmNyZWF0ZUZvbGRlcihZLHEsZWUsSixpZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZvbGRlcihZLHEsZWUsSixpZSl9KX1jcmVhdGVGaWxlKFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJu''@;'; put 'put ''IGllP3lpZWxkIGllLmNyZWF0ZUZpbGUoWSxxLGVlLEosbmUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGaWxlKFkscSxlZSxKLG5lKX0pfWdldEZpbGVDb250ZW50KFkscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGaWxlQ29udGVudCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZpbGVDb250ZW50KFkscSxlZSl9KX11cGRhdGVGaWxlQ29udGVudChZLHEsZWUsSil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJ1cGRhdGVGaWxlQ29udGVudCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LnVwZGF0ZUZpbGVDb250ZW50KFkscSxlZSxKKX0pfWdldEZvbGRlcihZLHEpe3Jl''@;'; put 'put ''dHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKFkscSl9KX1kZWxldGVGb2xkZXIoWSxx''@;'; put 'put ''KXt2YXIgZWU7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oZWU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAw''@;'; put 'put ''PT09ZWU/dm9pZCAwOmVlLmRlbGV0ZUZvbGRlcihZLHEpfSl9bGlzdEZvbGRlcihZLHEsZWUsSj0hMSl7dmFyIG5lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW08uU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhXSkseWllbGQgbnVsbD09PShuZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1uZT92b2lkIDA6bmUubGlzdEZvbGRlcihZLHEsZWUse3JldHVybkRldGFpbHM6Sn0pfSl9bW92ZUZvbGRlcihZLHEsZWUsSil7dmFyIG5lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShuZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1uZT92b2lkIDA6bmUubW92ZUZvbGRlcihZLHEsZWUsSil9''@;'; put 'put ''KX1jcmVhdGVKb2JEZWZpbml0aW9uKFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLGllP3lpZWxkIGll''@;'; put 'put ''LmNyZWF0ZUpvYkRlZmluaXRpb24oWSxxLGVlLEosbmUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKFkscSxlZSxKLG5lKX0pfWdldEF1dGhDb2RlKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZShZKX0pfWdldEFjY2Vzc1Rva2VuKFkscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBY2Nlc3NUb2tlbiIsW08uU2VydmVyVHlwZS5TYXNWaXlhLE8uU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50Lmdl''@;'; put 'put ''dEFjY2Vzc1Rva2VuKFksZWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihZLHEsZWUpfSl9cmVmcmVzaFRva2VucyhZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgi''@;'; put 'put ''cmVmcmVzaFRva2VucyIsW08uU2VydmVyVHlwZS5TYXNWaXlhLE8uU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoZWUpOnlpZWxkIHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKFkscSxlZSl9KX1kZWxldGVDbGllbnQoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSks''@;'; put 'put ''eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudChZLHEpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZ31nZXRVc2VyTmFtZSgpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVzZXJOYW1lfXNldFNBU2pzQ29uZmlnKFkpe3JldHVybiBJKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxZKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfSl9c2V0RGVidWdTdGF0ZShZKXt0aGlzLnNhc2pzQ29uZmlnLmRlYnVn''@;'; put 'put ''PVksdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPVkpfWNoZWNrU2Vzc2lvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Npb24oKX0pfWxvZ0luKFkscSxl''@;'; put 'put ''ZSxKPXt9KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PWcuTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIVl8fCFxKXRocm93IG5ldyBFcnJvcigiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJl''@;'; put 'put ''IHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgbG9naW4gbWVjaGFuaXNtLiIpO3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKFkscSl9aWYodHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBh''@;'; put 'put ''dmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5yZWRpcmVjdGVkTG9nSW4oSil9KX1sb2dPdXQoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dPdXQoKX11cGxvYWRGaWxlKFkscSxlZSxKPXt9LG5lKXtyZXR1cm4gSSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Sj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksSik7Y29uc3QgaWU9e2ZpbGVzOnEscGFyYW1zOmVlfTtyZXR1cm4geWllbGQgdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZShZLGllLEosbmUpfSl9cmVxdWVz''@;'; put 'put ''dChZLHEsZWU9e30sSixuZSxpZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2VlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSk7Y29uc3QgbGU9KDAsXy52YWxpZGF0ZUlucHV0KShxKTtyZXR1cm4gbGUuc3Rh''@;'; put 'put ''dHVzP2VlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNqc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUsaWUpOmVlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YSYmbnVsbCE9ZWUudXNlQ29tcHV0ZUFwaT9lZS51c2VDb21wdXRl''@;'; put 'put ''QXBpP3lpZWxkIHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUpOihlZS5jb250ZXh0TmFtZXx8KGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlZSkse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSkpLHlp''@;'; put 'put ''ZWxkIHRoaXMuamVzSm9iRXhlY3V0b3IuZXhlY3V0ZShZLHEsZWUsSixuZSxpZSkpOmVlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmZWUudXNlcm5hbWUmJmVlLnBhc3N3b3JkP3lpZWxkIHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlKTp5aWVsZCB0aGlzLndl''@;'; put 'put ''YkpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUsaWUpOlByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UobGUubXNnKSl9KX1kZXBsb3lTZXJ2aWNlUGFjayhZLHEsZWUsSixuZT0hMSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuaXNN''@;'; put 'put ''ZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKTtsZXQgaWU9bnVsbDtpZihlZXx8cSllZXx8KGVlPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxxfHwocT10aGlzLnNhc2pzQ29uZmlnLmFwcExvYyksdGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/KGllPW5ldyBCLlNBU1ZpeWFBcGlDbGllbnQoZWUscSx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksaWUuZGVidWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyk6dGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJihpZT1uZXcgdy5TQVM5QXBpQ2xpZW50KGVlLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpO2Vsc2V7bGV0IG1lPW51bGw7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhc1ZpeWE/bWU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbmZpZygpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYobWU9dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxlZT1tZS5zZXJ2ZXJVcmwscT1tZS5yb290Rm9sZGVy''@;'; put 'put ''TmFtZX1ZLm1lbWJlcnNbMF0ubWVtYmVycyYmWS5tZW1iZXJzWzBdLm1lbWJlcnMuc29ydChtZT0+ImZvbGRlciI9PT1tZS50eXBlPy0xOjEpO2NvbnN0IGxlPVkubWVtYmVyczt5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhxLGxlLEosaWUsbmUpfSl9c3RhcnRDb21wdXRl''@;'; put 'put ''Sm9iKFkscSxlZT17fSxKLG5lLGllLGxlPSExLG1lLF9lKXt2YXIgVGUsU2UsamUsVjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLGVlKSx0aGlzLmlzTWV0aG9kU3Vw''@;'; put 'put ''cG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLCFlZS5jb250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29u''@;'; put 'put ''ZmlnLiIpO3JldHVybiBfZT8obnVsbD09PShUZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1UZXx8VGUuc2V0VmVyYm9zZU1vZGUoX2UpLG51bGw9PT0oU2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09U2V8fFNlLmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09X2UmJihu''@;'; put 'put ''dWxsPT09KGplPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWplfHxqZS5kaXNhYmxlVmVyYm9zZU1vZGUoKSksbnVsbD09PShWPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PVY/dm9pZCAwOlYuZXhlY3V0ZUNvbXB1dGVKb2IoWSxlZS5jb250ZXh0TmFtZSxlZS5kZWJ1''@;'; put 'put ''ZyxxLEosISFuZSwhMSxpZSxsZSxtZSl9KX1mZXRjaExvZ0ZpbGVDb250ZW50KFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFkscSkudGhlbihlZT0+e2lmKCFlZSlyZXR1cm4gUHJvbWlzZS5y''@;'; put 'put ''ZWplY3QobmV3IGcuRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBSZXNwb25zZSB3YXMgbm90IHByb3ZpZGVkLiIpKTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGVlLnJlc3VsdCl9Y2F0Y2goSil7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVz''@;'; put 'put ''cG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gVGhlIHJlc3VsdCBpcyBub3QgdmFsaWQuIixKKSl9fSl9KX1nZXRTYXNSZXF1ZXN0cygpe3JldHVyblsuLi50aGlzLnJlcXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKV0uc29ydChfLmNvbXBhcmVUaW1lc3RhbXBzKX1jbGVhclNhc1Jl''@;'; put 'put ''cXVlc3RzKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMoKX1zZXR1cENvbmZpZ3VyYXRpb24oKXtpZih2b2lkIDA9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybHx8IiI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybClpZih0eXBlb2YgbG9jYXRpb248InUiKXtsZXQg''@;'; put 'put ''WT1gJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdG5hbWV9YDtsb2NhdGlvbi5wb3J0JiYoWT1gJHtZfToke2xvY2F0aW9uLnBvcnR9YCksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9WX1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMu''@;'; put 'put ''c2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKTp0aGlzLnJlcXVlc3RDbGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz9OLlNhc2pzUmVxdWVzdENsaWVudDp6LlJlcXVlc3RDbGllbnQpKHRoaXMuc2Fz''@;'; put 'put ''anNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1u''@;'; put 'put ''ZXcgRi5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IEIuU0FTVml5YUFwaUNsaWVudCh0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2Vy''@;'; put 'put ''dmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgdy5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2Vy''@;'; put 'put ''dmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBQLlNBU2pzQXBp''@;'; put 'put ''Q2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1uZXcgTC5GaWxlVXBsb2FkZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLndlYkpv''@;'; put 'put ''YkV4ZWN1dG9yPW5ldyBMLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1u''@;'; put 'put ''ZXcgTC5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgTC5TYXM5Sm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0Nv''@;'; put 'put ''bmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW5ldyBMLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9bmV3IEwuSmVzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX1jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoWSxxLGVlLEosbmUpe3JldHVybiBJKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLF8uYXN5bmNGb3JFYWNoKShxLGllPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtzd2l0Y2goaWUudHlwZSl7Y2FzZSJmb2xkZXIiOnlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKGllLm5hbWUsWSx2b2lkIDAsZWUsSixuZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJmaWxlIjp5aWVsZCB0aGlzLmNyZWF0ZUZpbGUoaWUubmFtZSxpZS5jb2RlLFksdm9pZCAwLGVlLEopO2JyZWFrO2Nhc2Uic2VydmljZSI6eWllbGQgdGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKGllLm5hbWUsaWUuY29kZSxZLHZvaWQgMCxlZSxKKTticmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcihgVW5pZGVudGlmaWVkIG1lbWJlciAnJHtpZS5uYW1lfScgcHJvdmlkZWQuYCl9ImZvbGRlciI9PT1pZS50eXBlJiZpZS5tZW1iZXJzJiZpZS5tZW1iZXJzLmxlbmd0aCYmKHlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKGAke1l9LyR7aWUubmFt''@;'; put 'put ''ZX1gLGllLm1lbWJlcnMsZWUsSixuZSkpfSkpfSl9aXNNZXRob2RTdXBwb3J0ZWQoWSxxKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlfHwhcS5pbmNsdWRlcyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpKXRocm93IG5ldyBFcnJvcihgTWV0aG9kICcke1l9JyBpcyBvbmx5''@;'; put 'put ''IHN1cHBvcnRlZCBvbiAke3Euam9pbigiLCAiKX0gc2VydmVycy5gKX1lbmFibGVWZXJib3NlTW9kZShZLHEpe3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5lbmFibGVWZXJib3NlTW9kZShZLHEpfWRpc2FibGVWZXJib3NlTW9kZSgpe3Zh''@;'; put 'put ''ciBZO251bGw9PT0oWT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1ZfHxZLmRpc2FibGVWZXJib3NlTW9kZSgpfX19LDM0Njc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTCxLLFUpe3JldHVybiBuZXco''@;'; put 'put ''S3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFkscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtuZShVLm5leHQoaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtuZShVLnRocm93KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBuZShpZSl7aWUuZG9uZT9ZKGllLnZh''@;'; put 'put ''bHVlKTpmdW5jdGlvbiBXKFkpe3JldHVybiBZIGluc3RhbmNlb2YgSz9ZOm5ldyBLKGZ1bmN0aW9uKHEpe3EoWSl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9bmUoKFU9VS5hcHBseShOLEx8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihO''@;'; put 'put ''KXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU2pzQXBpQ2xpZW50PXZvaWQgMDtjb25zdCBnPV8oeSg2MjMwKSksQj15KDM5MDApLHc9eSg5Nzc4KSxQPXkoNTcpLEY9eSgy''@;'; put 'put ''NDkpLE89eSg3MDQpO1guU0FTanNBcGlDbGllbnQ9Y2xhc3Mgentjb25zdHJ1Y3RvcihMKXt0aGlzLnJlcXVlc3RDbGllbnQ9TH1nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKEwpe2NvbnN0e2FjY2Vzc190b2tl''@;'; put 'put ''bjpLfT15aWVsZCgwLE8uZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsTCxCLlNlcnZlclR5cGUuU2FzanMpO3JldHVybiBLfX0pfWRlcGxveShMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tl''@;'; put 'put ''bkZvclJlcXVlc3QoVSk7TC5hcHBMb2M9TC5hcHBMb2N8fEs7Y29uc3R7cmVzdWx0Oll9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kiLEwsVyx2b2lkIDAse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSk7cmV0''@;'; put 'put ''dXJuIFByb21pc2UucmVzb2x2ZShZKX0pfWRlcGxveVppcEZpbGUoTCxLKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3JlYXRlUmVhZFN0cmVhbTpVfT15KDI5NzUpLFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoSyksWT15aWVs''@;'; put 'put ''ZCBVKEwpLHE9bmV3IGcuZGVmYXVsdDtxLmFwcGVuZCgiZmlsZSIsWSk7Y29uc3QgZWU9YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7cS5nZXRCb3VuZGFyeSgpfWAse3Jlc3VsdDpKfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95''@;'; put 'put ''L3VwbG9hZCIscSxXLGVlLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoSil9KX1leGVjdXRlSm9iKEwsSyxVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1VP1UuYWNjZXNz''@;'; put 'put ''X3Rva2VuOnZvaWQgMDtsZXQgWTtZPUwuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP0wuX3Byb2dyYW06YCR7S30vJHtMLl9wcm9ncmFtfWA7Y29uc3QgcT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFz''@;'; put 'put ''c2lnbih7X2RlYnVnOjEzMX0sTCkse19wcm9ncmFtOll9KSxXKTtyZXR1cm57cmVzdWx0OnEucmVzdWx0LGxvZzpxLmxvZ319KX1leGVjdXRlU2NyaXB0KEwsSz0ic2FzIixVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz15aWVsZCB0aGlzLmdldEFj''@;'; put 'put ''Y2Vzc1Rva2VuRm9yUmVxdWVzdChVKSxZPXtsb2c6IiJ9O3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29kZTpMLHJ1blRpbWU6S30sVykudGhlbihxPT57Y29uc3R7bG9nOmVlLHByaW50T3V0cHV0OkoscmVzdWx0Om5lfT1x''@;'; put 'put ''O1kubG9nPWVlLEomJihZLnByaW50T3V0cHV0PUopLG5lJiYoWS53ZWJvdXQ9bmUpfSkuY2F0Y2gocT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShxLCJFcnJvciB3aGlsZSBzZW5kaW5nIFBPU1QgcmVxdWVzdCB0byBleGVjdXRlIGNvZGUuICIpfSksWX0pfWdldEFjY2Vzc1Rva2VuKEws''@;'; put 'put ''Syl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFAuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsSyl9KX1yZWZyZXNoVG9rZW5zKEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1''@;'; put 'put ''cm4oMCxGLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwpfSl9fX0sNjkwMzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4g''@;'; put 'put ''bmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShp''@;'; put 'put ''ZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLFguU2Vzc2lvbk1hbmFnZXI9dm9pZCAwO2NvbnN0IEI9eSgxMjMwKSx3PXkoMTM5NSksUD15KDU5MjgpLEY9eSg5Nzc4KTtYLlNlc3Npb25NYW5hZ2VyPWNsYXNzIHp7Y29uc3RydWN0b3IoTCxLLFUpe3RoaXMuc2VydmVyVXJsPUwsdGhpcy5jb250ZXh0TmFtZT1LLHRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudD1VLHRoaXMubG9nZ2VkRXJyb3JzPVtdLHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yPSJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUgbGluay4gIix0aGlzLnNlc3Npb25zPVtdLHRoaXMuY3VycmVudENvbnRleHQ9bnVsbCx0aGlzLnNldHRpbmdD''@;'; put 'put ''b250ZXh0PSExLHRoaXMuX2RlYnVnPSExLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZT17cHJpbnRlZDohMSxzdGF0ZTpCLlNlc3Npb25TdGF0ZS5Ob1N0YXRlfSxMJiYoMCxQLmlzVXJsKShMKX1nZXQgZGVidWcoKXtyZXR1cm4gdGhpcy5fZGVidWd9c2V0IGRlYnVnKEwpe3RoaXMuX2RlYnVn''@;'; put 'put ''PUx9aXNTZXNzaW9uVmFsaWQoTCl7aWYoIUwpcmV0dXJuITE7Y29uc3QgSz0oKG5ldyBEYXRlKS5nZXRUaW1lKCktbmV3IERhdGUoTC5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISghTC5hdHRyaWJ1dGVzfHxLPj1MLmF0dHJpYnV0ZXMuc2Vzc2lvbkluYWN0aXZl''@;'; put 'put ''VGltZW91dCl9cmVtb3ZlU2Vzc2lvbkZyb21Qb29sKEwpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoSz0+Sy5pZCE9PUwuaWQpfXJlbW92ZUV4cGlyZWRTZXNzaW9ucygpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoTD0+dGhpcy5pc1Nlc3Npb25WYWxp''@;'; put 'put ''ZChMKSl9dGhyb3dFcnJvcnMoTCxLKXt0aHJvdyBLPygwLEYucHJlZml4TWVzc2FnZSkobmV3IEVycm9yKEwuam9pbigiLiAiKSksSyk6bmV3IEVycm9yKEwubWFwKFU9PlUubWVzc2FnZT9VLm1lc3NhZ2U6VSkuam9pbigiLiAiKSl9Z2V0U2Vzc2lvbihMKXtyZXR1cm4gZyh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1bXTtsZXQgVT0hMTtjb25zdCBXPSgpPT57Sy5sZW5ndGgmJiFVJiYoVT0hMCx0aGlzLnRocm93RXJyb3JzKEspKX07aWYodGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aCl7Y29uc3QgWT10aGlzLnNl''@;'; put 'put ''c3Npb25zWzBdO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChZKSx0aGlzLmNyZWF0ZVNlc3Npb25zKEwpLmNhdGNoKHE9PntLLnB1c2gocSl9KSx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpLmNhdGNoKHE9PntLLnB1c2gocSl9KSxXKCksWX17dGhpcy5jcmVhdGVT''@;'; put 'put ''ZXNzaW9ucyhMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSkseWllbGQgdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKTtjb25zdCBZPXRoaXMuc2Vzc2lvbnMucG9wKCk7cmV0dXJuIHRoaXMucmVt''@;'; put 'put ''b3ZlU2Vzc2lvbkZyb21Qb29sKFkpLFcoKSxZfX0pfWdldEVycm9yTWVzc2FnZShMLEssVSl7cmV0dXJuYCR7VX0gcmVxdWVzdCB0byAke0t9IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICR7TC5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIn0uIGArTC5yZXNwb25zZS5kYXRhLm1lc3NhZ2V8''@;'; put 'put ''fCIifWNsZWFyU2Vzc2lvbihMLEspe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBVPWAvY29tcHV0ZS9zZXNzaW9ucy8ke0x9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShVLEspLnRoZW4oKCk9Pnt0aGlzLnNlc3Npb25zPXRo''@;'; put 'put ''aXMuc2Vzc2lvbnMuZmlsdGVyKFc9PlcuaWQhPT1MKX0pLmNhdGNoKFc9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoVyxVLCJERUxFVEUiKSwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgc2Vzc2lvbi4gIil9KX0pfWNyZWF0ZVNlc3Npb25zKEwpe3JldHVy''@;'; put 'put ''biBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPVtdO3RoaXMuc2Vzc2lvbnMubGVuZ3RofHwoeWllbGQoMCxQLmFzeW5jRm9yRWFjaCkobmV3IEFycmF5KDEpLCgpPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLmNyZWF0ZUFuZFdh''@;'; put 'put ''aXRGb3JTZXNzaW9uKEwpLmNhdGNoKFU9PntLLnB1c2goVSl9KX0pKSksSy5sZW5ndGgmJnRoaXMudGhyb3dFcnJvcnMoSywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KX13YWl0Rm9yQ3VycmVudENvbnRleHQoKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKEw9Pntjb25zdCBLPXNldEludGVydmFsKCgpPT57dGhpcy5jdXJyZW50Q29udGV4dCYmKHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsY2xlYXJJbnRlcnZhbChLKSxMKCkpfSwxMDApfSl9KX1jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5jdXJyZW50Q29udGV4dHx8KHRoaXMuc2V0dGluZ0NvbnRleHQ/eWllbGQgdGhpcy53YWl0Rm9yQ3VycmVudENvbnRleHQoKTp5aWVsZCB0aGlzLnNldEN1cnJlbnRDb250ZXh0KEwpKTtjb25zdCBLPWAke3RoaXMuc2VydmVy''@;'; put 'put ''VXJsfS9jb21wdXRlL2NvbnRleHRzLyR7dGhpcy5jdXJyZW50Q29udGV4dC5pZH0vc2Vzc2lvbnNgLHtyZXN1bHQ6VSxldGFnOld9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KEsse30sTCkuY2F0Y2gocT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVz''@;'; put 'put ''c2FnZShxLEssIlBPU1QiKSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KTtVLmV0YWc9Vztjb25zdCBZPVUubGlua3MuZmluZChxPT4ic3RhdGUiPT09cS5yZWwpO2lmKCFZKXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO3JldHVybiBVLnN0YXRlVXJsPVkuaHJl''@;'; put 'put ''Zix5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKFUsVyxMKSx0aGlzLnNlc3Npb25zLnB1c2goVSksVX0pfXNldEN1cnJlbnRDb250ZXh0KEwpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jdXJyZW50Q29udGV4dCl7Y29uc3QgSz1gJHt0aGlzLnNl''@;'; put 'put ''cnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGA7dGhpcy5zZXR0aW5nQ29udGV4dD0hMDtjb25zdHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChLLEwpLmNhdGNoKHE9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3Nh''@;'; put 'put ''Z2UocSxLLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsaXN0IG9mIGNvbnRleHRzLiAiKX0pLFk9KFUmJlUuaXRlbXMmJlUuaXRlbXMubGVuZ3RoP1UuaXRlbXM6W10pLmZpbmQocT0+cS5uYW1lPT09dGhpcy5jb250ZXh0TmFtZSk7aWYoIVkpdGhyb3cgbmV3IEVycm9yKGBUaGUgY29u''@;'; put 'put ''dGV4dCAnJHt0aGlzLmNvbnRleHROYW1lfScgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyICR7dGhpcy5zZXJ2ZXJVcmx9LmApO3RoaXMuY3VycmVudENvbnRleHQ9WSxQcm9taXNlLnJlc29sdmUoKX19KX13YWl0Rm9yU2Vzc2lvbihMLEssVSl7dmFyIFc7cmV0dXJuIGcodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtzdGF0ZTpZfT1MO2NvbnN0e3N0YXRlVXJsOnF9PUwsZWU9SS5sb2dnZXJ8fF87aWYoWT09PUIuU2Vzc2lvblN0YXRlLlBlbmRpbmd8fFk9PT1CLlNlc3Npb25TdGF0ZS5SdW5uaW5nfHxZPT09Qi5TZXNzaW9uU3RhdGUuTm9TdGF0ZSl7aWYocSl7''@;'; put 'put ''dGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkJiYoZWUuaW5mbyhgUG9sbGluZzogJHt0aGlzLnNlcnZlclVybCtxfWApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSEwKTtjb25zdCBKPWAke3RoaXMuc2VydmVyVXJsfSR7cX0/d2FpdD0zMGAs''@;'; put 'put ''e3Jlc3VsdDpuZSxyZXNwb25zZVN0YXR1czppZX09eWllbGQgdGhpcy5nZXRTZXNzaW9uU3RhdGUoSixLLFUpLmNhdGNoKGxlPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGxlLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pO2lmKFk9bmUudHJpbSgpLHRoaXMuZGVi''@;'; put 'put ''dWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZSE9PVkmJihlZS5pbmZvKGBDdXJyZW50IHNlc3Npb24gc3RhdGUgaXMgJyR7WX0nYCksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlPVksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITEpLCFZKXtjb25zdCBs''@;'; put 'put ''ZT1uZXcgdy5Ob1Nlc3Npb25TdGF0ZUVycm9yKGllLHRoaXMuc2VydmVyVXJsK3EsbnVsbD09PShXPUwubGlua3MuZmluZChtZT0+ImxvZyI9PT1tZS5yZWwpKXx8dm9pZCAwPT09Vz92b2lkIDA6Vy5ocmVmKTtyZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnMuZmluZChtZT0+bWUuc2VydmVyUmVz''@;'; put 'put ''cG9uc2VTdGF0dXM9PT1sZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cyl8fCh0aGlzLmxvZ2dlZEVycm9ycy5wdXNoKGxlKSxlZS5pbmZvKGxlLm1lc3NhZ2UpKSx5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKEwsSyxVKX1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWX10aHJvdyB0aGlzLnNl''@;'; put 'put ''c3Npb25TdGF0ZUxpbmtFcnJvcn1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWX0pfWdldFNlc3Npb25TdGF0ZShMLEssVSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEwsVSwidGV4dC9wbGFp''@;'; put 'put ''biIseyJJZi1Ob25lLU1hdGNoIjpLfSkudGhlbihXPT4oe3Jlc3VsdDpXLnJlc3VsdCxyZXNwb25zZVN0YXR1czpXLnN0YXR1c30pKS5jYXRjaChXPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsTCwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcg''@;'; put 'put ''c2Vzc2lvbiBzdGF0ZS4gIil9KX0pfWdldFZhcmlhYmxlKEwsSyxVKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9zZXNzaW9ucy8ke0x9L3ZhcmlhYmxlcy8ke0t9YDtyZXR1cm4geWllbGQgdGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LmdldChXLFUpLmNhdGNoKFk9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWSxXLCJHRVQiKSxgRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJsZSAnJHtLfScuIGApfSl9KX19fSwxNjIyOmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFUsVyxZLHEpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKEosbmUpe2Z1bmN0aW9uIGllKF9lKXt0cnl7bWUocS5uZXh0KF9lKSl9Y2F0Y2go''@;'; put 'put ''VGUpe25lKFRlKX19ZnVuY3Rpb24gbGUoX2Upe3RyeXttZShxLnRocm93KF9lKSl9Y2F0Y2goVGUpe25lKFRlKX19ZnVuY3Rpb24gbWUoX2Upe19lLmRvbmU/SihfZS52YWx1ZSk6ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEogaW5zdGFuY2VvZiBZP0o6bmV3IFkoZnVuY3Rpb24obmUpe25lKEop''@;'; put 'put ''fSl9KF9lLnZhbHVlKS50aGVuKGllLGxlKX1tZSgocT1xLmFwcGx5KFUsV3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO2NvbnN0IEI9eSg3NzU3KSx3PXkoOTc3OCks''@;'; put 'put ''UD15KDM2MDcpLEY9eSg3MDQpLE89eSg1OTI4KSx6PXkoNzE0KSxOPXkoMTM0MyksTD15KDY0OTYpO1guZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5jdGlvbiBLKFUsVyxZLHEsZWUsSixuZSxpZT1udWxsLGxlPSExLG1lPSExLF9lPSEwLFRlLFNlPSExLGplKXt2YXIgVixwO3JldHVybiBnKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgYj0obmV8fHt9KS5hY2Nlc3NfdG9rZW47bmUmJih7YWNjZXNzX3Rva2VuOmJ9PXlpZWxkKDAsRi5nZXRUb2tlbnMpKFUsbmUpKTtjb25zdCB4PUkubG9nZ2VyfHxfO3RyeXtsZXQgQztjb25zdCBUPXlpZWxkIFcuZ2V0U2Vzc2lvbihi''@;'; put 'put ''KS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uLiAiKX0pO2lmKEM9VC5pZCxTZSl7Y29uc3R7cmVzdWx0OnhlfT15aWVsZCBXLmdldFZhcmlhYmxlKEMsIlNZU0pPQklEIixiKS5jYXRjaCh2ZT0+e3Rocm93KDAsdy5w''@;'; put 'put ''cmVmaXhNZXNzYWdlKSh2ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHZhcmlhYmxlLiAiKX0pO2lmKHhlJiZ4ZS52YWx1ZSl7Y29uc3QgdmU9WT9xLnNwbGl0KFkpLmpvaW4oIiIpLnJlcGxhY2UoL15cLy8sIiIpOnE7KEkubG9nZ2VyfHxfKS5pbmZvKGBUcmlnZ2VyaW5nICcke3Zl''@;'; put 'put ''fScgd2l0aCBQSUQgJHt4ZS52YWx1ZX0gYXQgJHsoMCxCLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MpKCl9YCl9fWxldCBIO0g9KDAsTy5pc1JlbGF0aXZlUGF0aCkocSk/YGV4ZWMtJHtxLmluY2x1ZGVzKCIvIik/cS5zcGxpdCgiLyIpWzFdOnF9YDpxLnNwbGl0KCIvIikucG9wKCk7bGV0''@;'; put 'put ''IGo9e1NZU19KRVNfSk9CX1VSSToiIixfcHJvZ3JhbTooMCxPLmlzUmVsYXRpdmVQYXRoKShxKT9ZKyIvIitxOnF9O2plJiYoaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saiksamUpKSxsZSYmKGo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLHtfREVCVUc6MTMx''@;'; put 'put ''fSkpO2xldCBFPVtdO2llJiYoSlNPTi5zdHJpbmdpZnkoaWUpLmluY2x1ZGVzKCI7Iik/KEU9eWllbGQoMCxMLnVwbG9hZFRhYmxlcykoVSxpZSxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4gIil9KSxqLl93''@;'; put 'put ''ZWJpbl9maWxlX2NvdW50PUUubGVuZ3RoLEUuZm9yRWFjaCgoeGUsdmUpPT57altgX3dlYmluX2ZpbGV1cmkke3ZlKzF9YF09YC9maWxlcy9maWxlcy8ke3hlLmZpbGUuaWR9YCxqW2Bfd2ViaW5fbmFtZSR7dmUrMX1gXT14ZS50YWJsZU5hbWV9KSk6aj1PYmplY3QuYXNzaWduKE9iamVjdC5h''@;'; put 'put ''c3NpZ24oe30saiksKDAsei5mb3JtYXREYXRhRm9yUmVxdWVzdCkoaWUpKSk7Y29uc3QgbT17bmFtZTpIfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6ZWUsdmFyaWFibGVzOmosdmVyc2lvbjoyfSx7cmVzdWx0OkF9PXlpZWxkIFUucG9z''@;'; put 'put ''dChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9qb2JzYCxtLGIpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBwb3N0aW5nIGpvYi4gIil9KTtpZighX2UpcmV0dXJuIFQ7bGUmJih4LmluZm8oYEpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICck''@;'; put 'put ''e0h9Jy5gKSx4LmluZm8oYFlvdSBjYW4gbW9uaXRvciB0aGUgam9iIHByb2dyZXNzIGF0ICcke1UuZ2V0QmFzZVVybCgpfSR7QS5saW5rcy5maW5kKHhlPT4ic3RhdGUiPT09eGUucmVsKS5ocmVmfScuYCkpO2NvbnN0IHRlPXlpZWxkKDAsTi5wb2xsSm9iU3RhdGUpKFUsQSxsZSxuZSxUZSx7''@;'; put 'put ''c2Vzc2lvbjpULHNlc3Npb25NYW5hZ2VyOld9KS5jYXRjaCh4ZT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2NvbnN0IHplPW51bGw9PT0odmU9eGU/LnJlc3BvbnNlKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmRhdGEsRGU9L2Vycj1bMC05XSosLy5leGVj''@;'; put 'put ''KHplKTtpZigiNTExMyI9PT0obnVsbD09PShYZT1EZT8uWzBdKXx8dm9pZCAwPT09WGU/dm9pZCAwOlhlLnNsaWNlKDQsLTEpKSl7Y29uc3QgSWU9QS5saW5rcy5maW5kKFZlPT4idXAiPT09VmUucmVsKS5ocmVmKyIvbG9nIjt4ZS5sb2c9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUs''@;'; put 'put ''YixJZSwxZTYpfXRocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pKTtuZSYmKHthY2Nlc3NfdG9rZW46Yn09eWllbGQoMCxGLmdldFRva2VucykoVSxuZSkpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgVS5nZXQoYC9jb21wdXRl''@;'; put 'put ''L3Nlc3Npb25zLyR7Q30vam9icy8ke0EuaWR9YCxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSk7bGV0IHdlLFVlPSIiO2NvbnN0IEplPXNlLmxpbmtzLmZpbmQoeGU9PiJsb2ciPT09eGUucmVsKTtpZihsZSYm''@;'; put 'put ''SmUpe2NvbnN0IHhlPWAke0plLmhyZWZ9L2NvbnRlbnRgLHZlPW51bGwhPT0ocD1udWxsPT09KFY9c2UubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PVY/dm9pZCAwOlYubGluZUNvdW50KSYmdm9pZCAwIT09cD9wOjFlNjtVZT15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxiLHhlLHZl''@;'; put 'put ''KX1pZih0ZT09PU4uSm9iU3RhdGUuRmFpbGVkfHx0ZT09PU4uSm9iU3RhdGUuRXJyb3IpdGhyb3cgbmV3IFAuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yKHNlLFVlKTtpZighbWUpcmV0dXJue2pvYjpzZSxsb2c6VWV9O2NvbnN0IG90PWAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2ZpbGVyZWZz''@;'; put 'put ''L193ZWJvdXQvY29udGVudGA7cmV0dXJuIHdlPXlpZWxkIFUuZ2V0KG90LGIsInRleHQvcGxhaW4iKS5jYXRjaCh4ZT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2lmKHhlIGluc3RhbmNlb2YgUC5Ob3RGb3VuZEVycm9yJiZKZSl7Y29uc3QgemU9YCR7SmUu''@;'; put 'put ''aHJlZn0vY29udGVudGAsRGU9bnVsbCE9PShYZT1udWxsPT09KHZlPXNlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT12ZT92b2lkIDA6dmUubGluZUNvdW50KSYmdm9pZCAwIT09WGU/WGU6MWU2O3JldHVybiBVZT15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxiLHplLERlKSxQcm9t''@;'; put 'put ''aXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6VWV9KX1yZXR1cm57cmVzdWx0OkpTT04uc3RyaW5naWZ5KHhlKX19KSkseWllbGQgVy5jbGVhclNlc3Npb24oQyxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgY2xlYXJpbmcgc2Vzc2lvbi4g''@;'; put 'put ''Iil9KSx7cmVzdWx0OndlPy5yZXN1bHQsbG9nOlVlfX1jYXRjaChDKXtpZig0MDQ9PT1DLnN0YXR1cylyZXR1cm4gSyhVLFcsWSxxLGVlLEosbmUsaWUsbGUsITEsITApO3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgc2NyaXB0LiAiKX19KX19LDc0''@;'; put 'put ''NTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRj''@;'; put 'put ''aChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVl''@;'; put 'put ''KS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEZpbGVTdHJlYW09dm9pZCAwO2NvbnN0IGc9eSgyOTc1KSxCPXkoNzc1Nyk7WC5nZXRGaWxlU3RyZWFtPShQLEYp''@;'; put 'put ''PT5fKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVdyaXRlU3RyZWFtOk99PXkoMjk3NSksej1GfHxJLmN3ZCgpO2lmKHlpZWxkKDAsZy5pc0ZvbGRlcikoeikpe2NvbnN0IEw9YCR7UC5uYW1lfHwiam9iIn0tJHsoMCxCLmdlbmVyYXRlVGltZXN0YW1wKSgp''@;'; put 'put ''fS5sb2dgLFU9eSgyNTIwKS5qb2luKEZ8fEkuY3dkKCksTCk7cmV0dXJuIHlpZWxkIE8oVSl9cmV0dXJuIHlpZWxkIE8oeil9KX0sMTM0MzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv''@;'; put 'put ''bihXLFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1m''@;'; put 'put ''dW5jdGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZG9Qb2xsPVgucG9sbEpvYlN0YXRlPVguSm9iU3RhdGU9dm9pZCAwO2NvbnN0IEI9eSg3MDQpLHc9eSgxMzk1KSxQPXkoMTIzMCksRj15KDU5MjgpO3ZhciBPLFc7KFc9Tz1YLkpvYlN0YXRlfHwoWC5K''@;'; put 'put ''b2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixXLlJ1bm5pbmc9InJ1bm5pbmciLFcuUGVuZGluZz0icGVuZGluZyIsVy5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFcuTm9TdGF0ZT0iIixXLkZhaWxlZD0iZmFpbGVkIixXLkVycm9yPSJlcnJvciIsWC5wb2xsSm9iU3RhdGU9''@;'; put 'put ''ZnVuY3Rpb24geihXLFkscSxlZSxKLG5lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgaWU9SS5sb2dnZXJ8fF8sbGU9Sj8uc3RyZWFtTG9nfHwhMSxtZT1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAs''@;'; put 'put ''cG9sbEludGVydmFsOjNlM30se21heFBvbGxDb3VudDo1MDAscG9sbEludGVydmFsOjNlNH0se21heFBvbGxDb3VudDozNDAwLHBvbGxJbnRlcnZhbDo2ZTR9XTtsZXQgX2U7aWYodm9pZCAwIT09Sil7X2U9W0pdO2xldHtwb2xsU3RyYXRlZ3k6eH09Sjt2b2lkIDAhPT14PyhVKHgpLHg9eC5z''@;'; put 'put ''b3J0KChDLFQpPT5DLm1heFBvbGxDb3VudC1ULm1heFBvbGxDb3VudCksX2U9Wy4uLl9lLC4uLnhdKTpfZT1bLi4uX2UsLi4ubWVdfWVsc2UgX2U9bWU7bGV0IFRlPV9lLnNwbGljZSgwLDEpWzBdO0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFRlKSxKfHx7fSk7Y29uc3QgU2U9''@;'; put 'put ''WS5saW5rcy5maW5kKHg9PiJzdGF0ZSI9PT14LnJlbCk7aWYoIVNlKXRocm93IG5ldyBFcnJvcigiSm9iIHN0YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtsZXQgcCxqZT15aWVsZCBOKFcsWSxPLk5vU3RhdGUscSxlZSkuY2F0Y2goeD0+KGllLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Ig''@;'; put 'put ''c3RhdGUgZnJvbSAke1NlLmhyZWZ9LiBTdGFydGluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLHgpLE8uVW5hdmFpbGFibGUpKSxWPTA7aWYoamU9PT1PLkNvbXBsZXRlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGplKTtpZihsZSYmKDAsRi5pc05vZGUpKCkpe2NvbnN0''@;'; put 'put ''e2dldEZpbGVTdHJlYW06eH09eSg3NDU4KTtwPXlpZWxkIHgoWSxKLmxvZ0ZvbGRlclBhdGgpfWxldCBiPXlpZWxkKDAsWC5kb1BvbGwpKFcsWSxqZSxxLFYsSixlZSxsZSxwLG5lKTtpZihqZT1iLnN0YXRlLFY9Yi5wb2xsQ291bnQsIUwoamUpfHxWPj1KLm1heFBvbGxDb3VudCYmIV9lLmxl''@;'; put 'put ''bmd0aClyZXR1cm4gamU7Zm9yKDtfZS5sZW5ndGgmJkwoamUpOylUZT1fZS5zcGxpY2UoMCwxKVswXSxKJiYoVGUubG9nRm9sZGVyUGF0aD1KLmxvZ0ZvbGRlclBhdGgpLGI9eWllbGQoMCxYLmRvUG9sbCkoVyxZLGplLHEsVixUZSxlZSxsZSxwLG5lKSxqZT1iLnN0YXRlLFY9Yi5wb2xsQ291''@;'; put 'put ''bnQ7cmV0dXJuIHAmJnAuZW5kKCksamV9KX07Y29uc3QgTj0oVyxZLHEsZWUsSik9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbmU9WS5saW5rcy5maW5kKGllPT4ic3RhdGUiPT09aWUucmVsKTtpZihMKHEpKXtsZXQgaWU7SiYmKGllPXlpZWxkKDAsQi5nZXRU''@;'; put 'put ''b2tlbnMpKFcsSikpO2NvbnN0e3Jlc3VsdDpsZX09eWllbGQgVy5nZXQoYCR7bmUuaHJlZn0/X2FjdGlvbj13YWl0JndhaXQ9MzAwYCxpZT8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSxlZSkuY2F0Y2gobWU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihZLmlkLG1lKX0p''@;'; put 'put ''O3JldHVybiBsZS50cmltKCl9cmV0dXJuIHF9KSxMPVc9Plc9PT1PLlJ1bm5pbmd8fFc9PT1PLk5vU3RhdGV8fFc9PT1PLlBlbmRpbmd8fFc9PT1PLlVuYXZhaWxhYmxlO1guZG9Qb2xsPShXLFkscSxlZSxKLG5lLGllLGxlLG1lLF9lKT0+Zyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXt2YXIgVGUsU2U7Y29uc3R7bWF4UG9sbENvdW50OmplLHBvbGxJbnRlcnZhbDpWfT1uZSxwPUkubG9nZ2VyfHxfLGI9WS5saW5rcy5maW5kKEU9PiJzdGF0ZSI9PT1FLnJlbCk7bGV0IEM9MCxUPXEsSD1PLk5vU3RhdGUsaj0wO2Zvcig7TChUKSYmSjw9amU7KXtpZihfZSYmSiYmSiUx''@;'; put 'put ''MD09MCYmaWUpe2NvbnN0e3Nlc3Npb246bSxzZXNzaW9uTWFuYWdlcjpBfT1fZSx7c3RhdGVVcmw6YWUsZXRhZzp0ZSxpZDpzZX09bSx7YWNjZXNzX3Rva2VuOndlfT1pZSx7aWQ6VWV9PVkse3Jlc3VsdDpKZSxyZXNwb25zZVN0YXR1czpvdH09eWllbGQgQS5nZXRTZXNzaW9uU3RhdGUoYWUs''@;'; put 'put ''dGUsd2UpLmNhdGNoKHZlPT57dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoVWUsdmUpfSkseGU9dmU9PltQLlNlc3Npb25TdGF0ZS5SdW5uaW5nLFAuU2Vzc2lvblN0YXRlLklkbGVdLmluY2x1ZGVzKHZlKTtpZigheGUoSmUpfHwyMDAhPT1vdCl7QS5jbGVhclNlc3Npb24oc2Usd2Up''@;'; put 'put ''O2NvbnN0IHZlPXhlKEplKT9gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgbm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgJHtvdH0uYDpgU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVubmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRlIGlzICcke0pl''@;'; put 'put ''fSdgO3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLG5ldyBFcnJvcih2ZSkpfX1UPXlpZWxkIE4oVyxZLFQsZWUsaWUpLmNhdGNoKG09PntpZihDKyssSj49amV8fEM+PTUpdGhyb3cgbTtyZXR1cm4gcC5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHtiLmhy''@;'; put 'put ''ZWZ9LiBSZXN1bWluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLG0pLE8uVW5hdmFpbGFibGV9KSxKKys7Y29uc3QgRT1ZLmxpbmtzLmZpbmQobT0+InNlbGYiPT09bS5yZWwpLmhyZWY7aWYobGUpe2NvbnN0e3Jlc3VsdDptfT15aWVsZCBXLmdldChFLGllPy5hY2Nlc3Nf''@;'; put 'put ''dG9rZW4pLEE9bnVsbCE9PShTZT1udWxsPT09KFRlPW0ubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PVRlP3ZvaWQgMDpUZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1TZT9TZToxZTYse3NhdmVMb2c6YWV9PSgwLEYuaXNOb2RlKSgpP3koMjA4MCk6e3NhdmVMb2c6bnVsbH07YWUmJih5aWVsZCBh''@;'; put 'put ''ZShZLFcsaixBLG1lLGllPy5hY2Nlc3NfdG9rZW4pKSxqKz1BfWVlJiZIIT09VCYmKHAuaW5mbyhgUG9sbGluZzogJHtXLmdldEJhc2VVcmwoKStFfS9zdGF0ZWApLHAuaW5mbyhgQ3VycmVudCBqb2Igc3RhdGU6ICR7VH1gKSxIPVQpLFQhPT1PLlVuYXZhaWxhYmxlJiZDPjAmJihDPTApLFQh''@;'; put 'put ''PT1PLkNvbXBsZXRlZCYmKHlpZWxkKDAsRi5kZWxheSkoVikpfXJldHVybntzdGF0ZTpULHBvbGxDb3VudDpKfX0pO2NvbnN0IFU9Vz0+e2NvbnN0IFk9KHEsZWUpPT57dGhyb3cgbmV3IEVycm9yKGBQb2xsIHN0cmF0ZWdpZXMgYXJlIG5vdCB2YWxpZC4ke3E/YCAke3F9YDoiIn0ke2VlP2Ag''@;'; put 'put ''SW52YWxpZCBwb2xsIHN0cmF0ZWd5OiBcbiR7SlNPTi5zdHJpbmdpZnkoZWUsbnVsbCwyKX1gOiIifWApfTtXLmZvckVhY2goKHEsZWUpPT57Y29uc3R7bWF4UG9sbENvdW50OkoscG9sbEludGVydmFsOm5lfT1xO0o8MT9ZKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFu''@;'; put 'put ''IDAuIixxKTowIT09ZWU/Sjw9V1tlZS0xXS5tYXhQb2xsQ291bnQmJlkoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLHEpOm5lPDEmJlkoIidwb2xsSW50ZXJ2YWwnIGhhcyB0byBiZSBncmVh''@;'; put 'put ''dGVyIHRoYW4gMC4iLHEpfSl9fSwyMDgwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVu''@;'; put 'put ''Y3Rpb24gVyhlZSl7dHJ5e3EoTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/''@;'; put 'put ''SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNhdmVMb2c9dm9pZCAwO2NvbnN0IEI9eSg1OTI4KSx3''@;'; put 'put ''PXkoNjEzMSk7WC5zYXZlTG9nPWZ1bmN0aW9uIFAoRixPLHosTixMLEspe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighSyl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0YuaWR9IGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nl''@;'; put 'put ''c3MgdG9rZW4uYCk7aWYoIUwpdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtGLmlkfSBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLmApO2NvbnN0IFU9SS5sb2dnZXJ8fF8sVz1GLmxpbmtzLmZpbmQocT0+ImxvZyI9PT1xLnJlbCk7aWYoIVcp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKGBMb2cgVVJMIGZvciBqb2IgJHtGLmlkfSB3YXMgbm90IGZvdW5kLmApO2NvbnN0IFk9eWllbGQoMCxCLmZldGNoTG9nKShPLEssYCR7Vy5ocmVmfS9jb250ZW50YCx6LE4pO1UuaW5mbyhgV3JpdGluZyBsb2dzIHRvICR7TC5wYXRofWApLHlpZWxkKDAsdy53cml0''@;'; put 'put ''ZVN0cmVhbSkoTCxZfHwiIil9KX19LDY0OTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhP''@;'; put 'put ''Lm5leHQoWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9''@;'; put 'put ''KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51cGxvYWRUYWJsZXM9dm9pZCAwO2NvbnN0IF89eSg5Nzc4KSxnPXkoMjQwMik7WC51cGxvYWRUYWJs''@;'; put 'put ''ZXM9ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89W107Zm9yKGNvbnN0IHogaW4gUCl7Y29uc3QgTj0oMCxnLmNvbnZlcnRUb0NTVikoUCx6KTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Y29uc3QgTD15aWVsZCB3LnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLE4sRikuY2F0Y2goSz0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdl''@;'; put 'put ''KShLLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KTtPLnB1c2goe3RhYmxlTmFtZTp6LGZpbGU6TC5yZXN1bHR9KX1yZXR1cm4gT30pfX0sNjEzMTpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8sZyxCLHcp''@;'; put 'put ''e3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVl''@;'; put 'put ''KTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseShfLGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksWC53cml0ZVN0cmVhbT12b2lkIDAsWC53cml0ZVN0cmVhbT0oXyxnKT0+eSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKEIsdyk9PntfLndyaXRlKGcrIlxuIixQPT57UD93KFApOkIoITApfSl9KX0pfSwyODUxOmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCksXz15KDQxNTUpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbihuZSxpZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0''@;'; put 'put ''Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP25lKFRlLnZhbHVlKTpmdW5jdGlvbiBKKG5lKXtyZXR1cm4gbmUgaW5zdGFuY2VvZiBxP25lOm5ldyBxKGZ1bmN0aW9uKGll''@;'; put 'put ''KXtpZShuZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5BdXRoTWFuYWdlcj12b2lkIDA7Y29uc3QgQj15KDM5MDApLHc9eSgxMzk1''@;'; put 'put ''KSxQPXkoNTkyOCksRj15KDExNzApLE89eSg1NDE4KSx6PXkoNDU4MiksTj15KDY1NDcpLEw9eSgxNTI3KTtYLkF1dGhNYW5hZ2VyPWNsYXNzIEt7Y29uc3RydWN0b3IoWSxxLGVlLEope3RoaXMuc2VydmVyVXJsPVksdGhpcy5zZXJ2ZXJUeXBlPXEsdGhpcy5yZXF1ZXN0Q2xpZW50PWVlLHRo''@;'; put 'put ''aXMubG9naW5DYWxsYmFjaz1KLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9bmU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNW''@;'; put 'put ''aXlhOnJldHVybiBuZT8uaWQ7Y2FzZSBCLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4iIjtjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gbmU/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIEkuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rp''@;'; put 'put ''b24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZT1uZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIG5lPy5uYW1lO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuKDAsRi5leHRyYWN0VXNlckxvbmdOYW1lU2FzOSko''@;'; put 'put ''bmUpO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBuZT8uZGlzcGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gSS5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5zZXRMb2dpblVybD1uZT0+e2xldCBpZT1uZVsx''@;'; put 'put ''XS5yZXBsYWNlKC9cPy4qLywiIik7aWYoIi8iPT09aWVbMF0pe2llPWllLnN1YnN0cigxKTtjb25zdCBsZT10aGlzLnNlcnZlclVybD9gJHt0aGlzLnNlcnZlclVybH0vJHtpZX1gOmAke2llfWA7dGhpcy5sb2dpblVybD10aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT9s''@;'; put 'put ''ZTpsZS5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNl''@;'; put 'put ''cnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRMb2dpblVybH1yZWRpcmVjdGVkTG9nSW4oe29uTG9nZ2VkT3V0''@;'; put 'put ''Oll9KXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjpxLHVzZXJOYW1lOmVlLHVzZXJMb25nTmFtZTpKfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtpZihxKXJldHVybihfLmxvZ2dlcnx8SSkubG9nKCJsb2dpbiB3YXMgbm90IGF0''@;'; put 'put ''dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTplZSx1c2VyTG9uZ05hbWU6Sn07Y29uc3QgbmU9eWllbGQoMCxPLm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dp''@;'; put 'put ''blVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sWSk7aWYoIW5lKXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn07Y29uc3R7aXNMb2dnZWRJbjppZX09dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQo''@;'; put 'put ''MCxOLnZlcmlmeVNhc1ZpeWFMb2dpbikobmUpOnlpZWxkKDAsei52ZXJpZnlTYXM5TG9naW4pKG5lKTtpZihuZS5jbG9zZSgpLGllKXt0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSk7Y29uc3R7dXNlck5h''@;'; put 'put ''bWU6bGUsdXNlckxvbmdOYW1lOm1lfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtyZXR1cm4geWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6bGUsdXNlckxvbmdOYW1lOm1lfX1yZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2Vy''@;'; put 'put ''TG9uZ05hbWU6IiJ9fSl9bG9nSW4oWSxxKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpZLHBhc3N3b3JkOnF9O3RoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiI7bGV0e2lzTG9n''@;'; put 'put ''Z2VkSW46Sixsb2dpbkZvcm06bmUsdXNlckxvbmdOYW1lOmllfT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO2lmKEopcmV0dXJuKF8ubG9nZ2VyfHxJKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMu''@;'; put 'put ''bG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ZWUudXNlcm5hbWUsdGhpcy51c2VyTG9uZ05hbWU9aWUse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9O2xldCBsZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVl''@;'; put 'put ''c3QobmUsZWUpLG1lPSgwLEwuaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50KSh0aGlzLnNlcnZlclR5cGUsbGUpO2lmKCFtZSl7aWYoVShsZSkpe2NvbnN0IFRlPXlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKGxlKTtsZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVlc3QoVGUsZWUpfWNvbnN0''@;'; put 'put ''IF9lPXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7bWU9X2UuaXNMb2dnZWRJbix0aGlzLnVzZXJMb25nTmFtZT1fZS51c2VyTG9uZ05hbWV9cmV0dXJuIG1lJiYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNr''@;'; put 'put ''KCkpLHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ZWUudXNlcm5hbWUpLHtpc0xvZ2dlZEluOm1lLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfX0pfXBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCl7cmV0dXJuIGcodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3Mval9zcHJpbmdfY2FzX3NlY3VyaXR5X2NoZWNrYDt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvU0FTTG9nb24vbG9naW4/c2VydmljZT0ke1l9YCx2b2lkIDAp''@;'; put 'put ''LmNhdGNoKHE9PntpZighKHEgaW5zdGFuY2VvZiB3Lk5vdEZvdW5kRXJyb3IpKXRocm93IHF9KX0pfXNlbmRMb2dpblJlcXVlc3QoWSxxKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc2pzKXtjb25z''@;'; put 'put ''dHt1c2VybmFtZTpuZSxwYXNzd29yZDppZX09cSx7cmVzdWx0OmxlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLHt1c2VybmFtZTpuZSxwYXNzd29yZDppZX0sdm9pZCAwKTtyZXR1cm4gbGV9Zm9yKGNvbnN0IG5lIGluIFkpcVtuZV09WVtuZV07Y29uc3Qg''@;'; put 'put ''ZWU9KDAsUC5zZXJpYWxpemUpKHEpLHtyZXN1bHQ6Sn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxlZSx2b2lkIDAsInRleHQvcGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9''@;'; put 'put ''KTtyZXR1cm4gSn0pfWNoZWNrU2Vzc2lvbigpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOlksdXNlck5hbWU6cSx1c2VyTG9uZ05hbWU6ZWV9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2xldCBKPW51bGw7cmV0dXJuIFl8fCh5''@;'; put 'put ''aWVsZCB0aGlzLmxvZ091dCgpLEo9eWllbGQgdGhpcy5nZXROZXdMb2dpbkZvcm0oKSksUHJvbWlzZS5yZXNvbHZlKHtpc0xvZ2dlZEluOlksdXNlck5hbWU6cSx1c2VyTG9uZ05hbWU6ZWUsbG9naW5Gb3JtOkp9KX0pfWdldE5ld0xvZ2luRm9ybSgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzanMpcmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi8iLHZvaWQgMCkudGhlbigoe3Jlc3VsdDpxfSk9Pnt2YXIgZWU7Y29uc3QgSj1udWxsPT09KGVlPS88c2NyaXB0PmRvY3VtZW50LmNv''@;'; put 'put ''b2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyhxKSl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZVsxXTtKJiYoZG9jdW1lbnQuY29va2llPUopfSk7Y29uc3R7cmVzdWx0Oll9PXlpZWxkIHRoaXMu''@;'; put 'put ''cmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQvcGxhaW4iKTtyZXR1cm4geWllbGQgdGhpcy5nZXRMb2dpbkZvcm0oWSl9KX1mZXRjaFVzZXJOYW1lKCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/YCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYDp0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOT9gJHt0''@;'; put 'put ''aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzc2A6YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU2pzQXBpL3Nlc3Npb25gLHtyZXN1bHQ6cX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChZLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKEo9Pih7cmVzdWx0OiJhdXRoRXJyIn0pKSxl''@;'; put 'put ''ZT0iYXV0aEVyciIhPT1xO3JldHVybiBlZT97aXNMb2dnZWRJbjplZSx1c2VyTmFtZTp0aGlzLmV4dHJhY3RVc2VyTmFtZShxKSx1c2VyTG9uZ05hbWU6dGhpcy5leHRyYWN0VXNlckxvbmdOYW1lKHEpfTooeWllbGQgdGhpcy5sb2dPdXQoKSx7aXNMb2dnZWRJbjplZSx1c2VyTmFtZToiIix1''@;'; put 'put ''c2VyTG9uZ05hbWU6IiJ9KX0pfWdldExvZ2luRm9ybShZKXtjb25zdCBlZT0vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29ufGxvZ2luKVteIl0qKS4qPi8uZXhlYyhZKSxKPXt9O2lmKGVlJiZlZS5sZW5ndGgpe3RoaXMuc2V0TG9naW5VcmwoZWUpO2NvbnN0IG5lPShZPVkucmVwbGFjZSgvPGlu''@;'; put 'put ''cHV0L2csIlxuPGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4iW14+XSo+L2cpO25lJiZuZS5mb3JFYWNoKGllPT57Y29uc3QgbGU9aWUubWF0Y2goL25hbWU9IihbXiJdKikiXHN2YWx1ZT0iKFteIl0qKS8pO2xlJiZsZS5sZW5ndGgmJihKW2xlWzFdXT1sZVsyXSl9KX1yZXR1cm4g''@;'; put 'put ''T2JqZWN0LmtleXMoSikubGVuZ3RoP0o6bnVsbH1sb2dPdXQoKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5jbGVhckNzcmZUb2tlbnMoKSx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9nb3V0VXJsLHZvaWQg''@;'; put 'put ''MCkudGhlbigoKT0+ITApfSl9fTtjb25zdCBVPVc9Pi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3QoVyl9LDU3OmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7''@;'; put 'put ''dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAs''@;'; put 'put ''Rnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO2NvbnN0IF89eSg5Nzc4KSxnPXkoOTAxNyksQj15KDM5MDApO1guZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5j''@;'; put 'put ''dGlvbiB3KFAsRixPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qgej0iL1NBU2pzQXBpL2F1dGgvdG9rZW4iLE49e2NsaWVudElkOkYsY29kZTpPfTtyZXR1cm4geWllbGQgUC5wb3N0KHosTix2b2lkIDApLnRoZW4oTD0+e2NvbnN0IEs9TC5yZXN1bHQ7''@;'; put 'put ''cmV0dXJue2FjY2Vzc190b2tlbjpLLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46Sy5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdlKShMLCgwLGcuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRB''@;'; put 'put ''Y2Nlc3NUb2tlbkZvclNhc2pzIixCLlNlcnZlclR5cGUuU2FzanMseixOLEYpKX0pfSl9fSwzNTY5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8seixOLEwpe3JldHVybiBuZXcoTnx8''@;'; put 'put ''KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFUsVyl7ZnVuY3Rpb24gWShKKXt0cnl7ZWUoTC5uZXh0KEopKX1jYXRjaChuZSl7VyhuZSl9fWZ1bmN0aW9uIHEoSil7dHJ5e2VlKEwudGhyb3coSikpfWNhdGNoKG5lKXtXKG5lKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1UoSi52YWx1ZSk6ZnVuY3Rp''@;'; put 'put ''b24gSyhVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIE4/VTpuZXcgTihmdW5jdGlvbihXKXtXKFUpfSl9KEoudmFsdWUpLnRoZW4oWSxxKX1lZSgoTD1MLmFwcGx5KE8senx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdl''@;'; put 'put ''dEFjY2Vzc1Rva2VuRm9yVml5YT12b2lkIDA7Y29uc3QgZz15KDM5MDApLEI9eSg5Nzc4KSx3PXkoMTM5NSksUD15KDkwMTcpO1guZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPWZ1bmN0aW9uIEYoTyx6LE4sTCl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBLO0s9''@;'; put 'put ''dHlwZW9mIEk+InUiP2J0b2EoeisiOiIrTik6SS5mcm9tKHorIjoiK04pLnRvU3RyaW5nKCJiYXNlNjQiKTtjb25zdCBVPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLFc9e0F1dGhvcml6YXRpb246IkJhc2ljICIrSyxBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifSxZPW5ldyBVUkxTZWFyY2hQ''@;'; put 'put ''YXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29kZTpMfSkscT1uZXcgVVJMU2VhcmNoUGFyYW1zKFkpO3JldHVybiB5aWVsZCBPLnBvc3QoVSxxLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixXKS50aGVuKEo9PkoucmVzdWx0KS5jYXRj''@;'; put 'put ''aChKPT57dGhyb3cgSiBpbnN0YW5jZW9mIHcuQ2VydGlmaWNhdGVFcnJvcj9KOigwLEIucHJlZml4TWVzc2FnZSkoSiwoMCxQLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixnLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YSxVLFksVyx6LE4pKX0pfSl9fSw5MDE3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9WC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZp''@;'; put 'put ''eD12b2lkIDA7Y29uc3QgST15KDM5MDApLGc9UD0+YFJlc3BvbnNlIGZyb20gJHsoUD0+UD09PUkuU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiKShQKX0gaXMgYmVsb3cuYDtYLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PShQLEYsTyx6LE4sTCxLLFUpPT57Y29uc3QgVz1x''@;'; put 'put ''PT5KU09OLnN0cmluZ2lmeShxLG51bGwsMiksWT1bYEVycm9yIHdoaWxlICR7UH0gZnJvbSAke3p9YCxgVGhyb3duIGJ5IHRoZSBAc2FzanMvYWRhcHRlciAke0Z9IGZ1bmN0aW9uLmBdO3JldHVybiBOJiYoWS5wdXNoKCJQYXlsb2FkOiIpLFkucHVzaChXKE4pKSksTCYmKFkucHVzaCgiSGVh''@;'; put 'put ''ZGVyczoiKSxZLnB1c2goVyhMKSkpLEsmJlkucHVzaChgQ2xpZW50SWQ6ICR7S31gKSxVJiZZLnB1c2goYENsaWVudFNlY3JldDogJHtVfWApLFkucHVzaCgiIiksWS5wdXNoKGAke2coTyl9YCksWS5wdXNoKCIiKSxZLmpvaW4oIlxuIil9LFguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhS''@;'; put 'put ''ZXNwb25zZT0oUCxGKT0+UC5zcGxpdChgJHtnKEYpfVxuYCkucG9wKCl9LDcwNDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3KEx8fChMPVByb21p''@;'; put 'put ''c2UpKShmdW5jdGlvbihXLFkpe2Z1bmN0aW9uIHEobmUpe3RyeXtKKEsubmV4dChuZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gZWUobmUpe3RyeXtKKEsudGhyb3cobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIEoobmUpe25lLmRvbmU/VyhuZS52YWx1ZSk6ZnVuY3Rpb24g''@;'; put 'put ''VShXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlvbihZKXtZKFcpfSl9KG5lLnZhbHVlKS50aGVuKHEsZWUpfUooKEs9Sy5hcHBseSh6LE58fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRU''@;'; put 'put ''b2tlbnM9dm9pZCAwO2NvbnN0IEI9eSg2Nzk5KSx3PXkoMzkwMCksUD15KDM2NiksRj15KDI0OSk7WC5nZXRUb2tlbnM9ZnVuY3Rpb24gTyh6LE4sTD13LlNlcnZlclR5cGUuU2FzVml5YSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5sb2dnZXJ8''@;'; put 'put ''fF87bGV0e2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6WSxzZWNyZXQ6cX09TjtpZigoMCxCLmlzQWNjZXNzVG9rZW5FeHBpcmluZykoVSl8fCgwLEIuaXNSZWZyZXNoVG9rZW5FeHBpcmluZykoVykpe2lmKCgwLEIuaGFzVG9rZW5FeHBpcmVkKShXKSl7Y29uc3QgSj0i''@;'; put 'put ''VW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIjt0aHJvdyBLLmVycm9yKEopLG5ldyBFcnJvcihKKX1LLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2Vucy4iKSwoe2FjY2Vzc190b2tlbjpVLHJl''@;'; put 'put ''ZnJlc2hfdG9rZW46V309TD09PXcuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsUC5yZWZyZXNoVG9rZW5zRm9yVml5YSkoeixZLHEsVyk6eWllbGQoMCxGLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoeixXKSl9cmV0dXJue2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6''@;'; put 'put ''WSxzZWNyZXQ6cX19KX19LDE1Mjc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl''@;'; put 'put ''c2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIs''@;'; put 'put ''dyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMjg1MSksWCksXyh5KDkwOTcpLFgpLF8oeSg5MTY2KSxYKSxfKHkoNjY0MyksWCl9LDkwOTc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxYLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXZvaWQgMCxYLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPUk9Pi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KEkpfSw5MTY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc0xvZ0luUmVxdWlyZWQ9dm9pZCAwLFguaXNMb2dJblJlcXVpcmVkPUk9Pi88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb24pfChsb2dpbilbXiJdKikuKj4vZ20udGVzdChJKX0sNjY0MzoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9WC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj1YLmxvZ2luU3VjY2Vzc0hlYWRlcnM9WC5kZWZhdWx0U3VjY2Vzc0hlYWRl''@;'; put 'put ''cktleT12b2lkIDA7Y29uc3QgST15KDM5MDApLF89eSg1OTI4KSxnPSJZb3UgaGF2ZSBzaWduZWQgaW4uIjtYLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PSJkZWZhdWx0IixYLmxvZ2luU3VjY2Vzc0hlYWRlcnM9e2VzOiJZYSBzZSBoYSBpbmljaWFkbyBsYSBzZXNpXHhmM24uIix0aDoiXHUw''@;'; put 'put ''ZTA0XHUwZTM4XHUwZTEzXHUwZTI1XHUwZTA3XHUwZTBhXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTQwXHUwZTAyXHUwZTQ5XHUwZTMyXHUwZTQzXHUwZTBhXHUwZTQ5XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixqYToiXHUzMGI1XHUzMGE0XHUzMGYzXHUzMGE0XHUzMGYzXHUzMDU3XHUzMDdl''@;'; put 'put ''XHUzMDU3XHUzMDVmXHUzMDAyIixuYjoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixzbDoiUHJpamF2aWxpIHN0ZSBzZS4iLGFyOiJcdTA2NDRcdTA2NDJcdTA2MmYgXHUwNjQyXHUwNjQ1XHUwNjJhICIsc2s6IlByaWhsXHhlMXNpbGkgc3RlIHNhLiIsemhfSEs6Ilx1NjBhOFx1NWRmMlx1''@;'; put 'put ''NzY3Ylx1NTE2NVx1MzAwMiIsemhfQ046Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NWY1NVx1MzAwMiIsaXQ6IkwndXRlbnRlIHNpIFx4ZTggY29ubmVzc28uIixzdjoiRHUgaGFyIGxvZ2dhdCBpbi4iLGhlOiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixubDoiVSBoZWJ0IHppY2gg''@;'; put 'put ''YWFuZ2VtZWxkLiIscGw6Ilpvc3RhXHUwMTQyZVx1MDE1YiB6YWxvZ293YW55LiIsa286Ilx1Yjg1Y1x1YWRmOFx1Yzc3OFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4iLHpoX1RXOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHRyOiJPdHVydW0gYVx4ZTd0XHUwMTMxblx1MDEz''@;'; put 'put ''MXouIixpdzoiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsZnI6IlZvdXMgXHhlYXRlcyBjb25uZWN0XHhlOS4iLHVrOiJcdTA0MTJcdTA0MzggXHUwNDMyXHUwNDMyXHUwNDU2XHUwNDM5XHUwNDQ4XHUwNDNiXHUwNDM4IFx1MDQzMiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0NTZc''@;'; put 'put ''dTA0M2FcdTA0M2VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDM3XHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQxLiIscHRfQlI6IlZvY1x4ZWEgc2UgY29uZWN0b3UuIixubzoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixjczoiSnN0ZSBwXHUwMTU5aWhsXHhlMVx1MDE2MWVuaS4iLGZpOiJPbGV0''@;'; put 'put ''IGtpcmphdXR1bnV0IHNpc1x4ZTRceGU0bi4iLHJ1OiJcdTA0MTJcdTA0NGIgXHUwNDMyXHUwNDRiXHUwNDNmXHUwNDNlXHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNiXHUwNDM4IFx1MDQzMlx1MDQ0NVx1MDQzZVx1MDQzNCBcdTA0MzIgXHUwNDQxXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUw''@;'; put 'put ''NDNjXHUwNDQzLiIsZWw6Ilx1MDM4OFx1MDNjN1x1MDNiNVx1MDNjNFx1MDNiNSBcdTAzYzNcdTAzYzVcdTAzYmRcdTAzYjRcdTAzYjVcdTAzYjhcdTAzYjVcdTAzYWYuIixocjoiUHJpamF2aWxpIHN0ZSBzZS4iLGRhOiJEdSBlciBsb2dnZXQgcFx4ZTUuIixkZToiU2llIHNpbmQgamV0enQg''@;'; put 'put ''YW5nZW1lbGRldC4iLHNoOiJQcmlqYXZsamVuaSBzdGUuIixwdDoiSW5pY2lvdSBzZXNzXHhlM28uIixodToiQmVqZWxlbnRrZXpldHQuIixzcjoiUHJpamF2bGplbmkgc3RlLiIsZW46ZyxbWC5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV06Z30sWC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hl''@;'; put 'put ''YWRlcj0oKT0+e2xldCBQPVgubG9naW5TdWNjZXNzSGVhZGVyc1tYLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTtjb25zdCBGPSgwLF8uZ2V0VXNlckxhbmd1YWdlKSgpO2lmKEYpe2xldCBPPVgubG9naW5TdWNjZXNzSGVhZGVyc1tGXTtpZihPKVA9TztlbHNle2NvbnN0IE49T2JqZWN0Lmtl''@;'; put 'put ''eXMoWC5sb2dpblN1Y2Nlc3NIZWFkZXJzKS5maW5kKEw9Pm5ldyBSZWdFeHAoTCwiaSIpLnRlc3QoRikpO04mJihQPVgubG9naW5TdWNjZXNzSGVhZGVyc1tOXSl9fXJldHVybiBQfSxYLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD0oUCxGKT0+UD09PUkuU2VydmVyVHlwZS5TYXNqcz9G''@;'; put 'put ''Py5sb2dnZWRJbjpuZXcgUmVnRXhwKCgwLFguZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCksImdtIikudGVzdChGKX0sNTQxODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5l''@;'; put 'put ''dyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9u''@;'; put 'put ''IHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLm9wZW5X''@;'; put 'put ''ZWJQYWdlPXZvaWQgMDtjb25zdCBfPXkoMTIxMCksZz17d2lkdGg6NTAwLGhlaWdodDo2MDB9O1gub3BlbldlYlBhZ2U9ZnVuY3Rpb24gQih3LFA9IiIsRj1nLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHt3aWR0aDp6LGhlaWdodDpOfT1GLEw9c2Ny''@;'; put 'put ''ZWVuLndpZHRoLzItei8yLEs9c2NyZWVuLmhlaWdodC8yLU4vMjtyZXR1cm4gd2luZG93Lm9wZW4odyxQLGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHt6fSxoZWlnaHQ9JHtOfSxsZWZ0PSR7TH0sdG9wPSR7S31gKXx8KCh5aWVsZChPPz9fLm9wZW5Mb2dpblByb21w''@;'; put 'put ''dCkoKSk/d2luZG93Lm9wZW4odyxQLGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHt6fSxoZWlnaHQ9JHtOfSxsZWZ0PSR7TH0sdG9wPSR7S31gKTpudWxsKX0pfX0sMjQ5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2Fp''@;'; put 'put ''dGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5j''@;'; put 'put ''dGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz12b2lkIDA7Y29uc3QgXz15KDk3NzgpLGc9eSg5MDE3KSxCPXkoMzkwMCk7WC5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24gdyhQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtjb25zdCBPPSIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIix6PXtBdXRob3JpemF0aW9uOiJCZWFyZXIgIitGfTtyZXR1cm4geWllbGQgUC5wb3N0KE8sdm9pZCAwLHZvaWQgMCx2b2lkIDAseikudGhlbihMPT57Y29uc3QgSz1MLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2Vu''@;'; put 'put ''OksuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpLLnJlZnJlc2hUb2tlbn19KS5jYXRjaChMPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKEwsKDAsZy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclNhc2pzIixCLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzanMsTykpfSl9KX19LDM2NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1''@;'; put 'put ''bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0''@;'; put 'put ''YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0sZz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZh''@;'; put 'put ''dWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7Y29uc3QgQj15KDM5MDApLHc9eSg5Nzc4KSxQPWcoeSg2MjMwKSksRj15KDU5MjgpLE89eSg5MDE3KTtYLnJlZnJlc2hUb2tlbnNGb3JW''@;'; put 'put ''aXlhPWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCEoMCxGLmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4iKTtjb25zdCBX''@;'; put 'put ''PSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHE9e0F1dGhvcml6YXRpb246IkJhc2ljICIrKHR5cGVvZiBJPiJ1Ij9idG9hKEwrIjoiK0spOkkuZnJvbShMKyI6IitLKS50b1N0cmluZygiYmFzZTY0IikpfSxlZT1uZXcgUC5kZWZhdWx0O3JldHVybiBlZS5hcHBlbmQoImdyYW50X3R5cGUiLCJy''@;'; put 'put ''ZWZyZXNoX3Rva2VuIiksZWUuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixVKSx5aWVsZCBOLnBvc3QoVyxlZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrZWUuX2JvdW5kYXJ5LHEpLnRoZW4obmU9Pm5lLnJlc3VsdCkuY2F0Y2gobmU9Pnt0aHJvdygwLHcucHJlZml4''@;'; put 'put ''TWVzc2FnZSkobmUsKDAsTy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLEIuU2VydmVyVHlwZS5TYXNWaXlhLFcsZWUscSxMLEspKX0pfSl9fSw0NTgyOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNh''@;'; put 'put ''dGNoKHEpe0wocSl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudmVyaWZ5U2FzOUxvZ2luPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz15KDE1MjcpO1gudmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uIEIodyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2xldCBQPSExLEY9bmV3IERhdGUsTz0wO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSx3LmNsb3NlZClicmVhaztQPXcud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJncud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVzKCgwLGcu''@;'; put 'put ''Z2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpLE89KChuZXcgRGF0ZSkudmFsdWVPZigpLUYudmFsdWVPZigpKS8xZTN9d2hpbGUoIVAmJk88MzAwKTtyZXR1cm57aXNMb2dnZWRJbjpQfX0pfX0sNjU0NzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0''@;'; put 'put ''aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtL''@;'; put 'put ''KGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc0xvZ2dlZEluU0FTVklZQT1YLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSgxNTI3KTtYLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbiBCKFApe3ZhciBGLE87cmV0dXJuIEko''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6PSExLE49bmV3IERhdGUsTD0wO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSxQLmNsb3NlZClicmVhazt6PSgwLFguaXNMb2dnZWRJblNBU1ZJWUEpKCksTD0oKG5ldyBEYXRlKS52YWx1ZU9mKCktTi52YWx1ZU9mKCkpLzFl''@;'; put 'put ''M313aGlsZSgheiYmTDwzMDApO2xldCBLPSExO049bmV3IERhdGU7ZG97aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLFAuY2xvc2VkKWJyZWFrO0s9UC53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oTz1udWxsPT09KEY9UC53aW5kb3cuZG9jdW1l''@;'; put 'put ''bnQuYm9keSl8fHZvaWQgMD09PUY/dm9pZCAwOkYuaW5uZXJUZXh0KXx8dm9pZCAwPT09Tz92b2lkIDA6Ty5pbmNsdWRlcygoMCxnLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpKSksTD0oKG5ldyBEYXRlKS52YWx1ZU9mKCktTi52YWx1ZU9mKCkpLzFlM313aGlsZSghSyYmTDwz''@;'; put 'put ''MDApO3JldHVybntpc0xvZ2dlZEluOnomJkt9fSl9LFguaXNMb2dnZWRJblNBU1ZJWUE9KCk9PmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygiQ3VycmVudC1Vc2VyIikmJmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygidXNlcklkIil9LDQwMzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgST15KDI0MDIpLF89eSg1OTI4KTtYLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09KEIsdyk9Pntmb3IoY29uc3QgUCBpbiB3KXtpZighQXJyYXku''@;'; put 'put ''aXNBcnJheSh3W1BdKSljb250aW51ZTtjb25zdCBGPVAsTz0oMCxJLmNvbnZlcnRUb0NTVikodyxQKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Tyl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNo''@;'; put 'put ''YXJhY3RlcnMuIik7aWYoKDAsXy5pc05vZGUpKCkpQi5hcHBlbmQoRixPLHtmaWxlbmFtZTpgJHtGfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7ZWxzZXtjb25zdCB6PW5ldyBCbG9iKFtPXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO0IuYXBwZW5kKEYseixgJHtG''@;'; put 'put ''fS5jc3ZgKX19cmV0dXJuIEJ9fSwyMTcwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPXZvaWQgMDtjb25zdCBJPXkoMjQwMiksXz15KDQ3OTkpO1guZ2VuZXJh''@;'; put 'put ''dGVUYWJsZVVwbG9hZEZvcm09KEIsdyk9Pntjb25zdCBQPVtdLEY9e307bGV0IE89MDtmb3IoY29uc3QgeiBpbiB3KXtPKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoeil8fFAucHVzaCh6KTtjb25zdCBOPSgwLEkuY29udmVydFRvQ1NWKSh3LHopO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExF''@;'; put 'put ''TkdUSCI9PT1OKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtOLmxlbmd0aD4xNmUzPygwLF8uc3BsaXRDaHVua3MpKE4pLm1hcChLPT57Qi5hcHBlbmQoYHNhc2pzJHtPfWRhdGFgLEspfSk6''@;'; put 'put ''Rltgc2FzanMke099ZGF0YWBdPU59cmV0dXJuIEYuc2FzanNfdGFibGVzPVAuam9pbigiICIpLHtmb3JtRGF0YTpCLHJlcXVlc3RQYXJhbXM6Rn19fSwzNjA3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy''@;'; put 'put ''ZWF0ZT9mdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKTt2YXIgej1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFAsRik7KCF6fHwoImdldCJpbiB6PyFQLl9fZXNNb2R1bGU6ei53cml0YWJsZXx8ei5jb25maWd1cmFibGUpKSYmKHo9e2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIFBbRl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsTyx6KX06ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Riksd1tPXT1QW0ZdfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odyxQKXtmb3IodmFyIEYgaW4gdykiZGVm''@;'; put 'put ''YXVsdCIhPT1GJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsRikmJkkoUCx3LEYpfSxnPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBCPWcoeSg1OTU2KSk7Xyh5KDEyMzApLFgpLF8oeSgxMzk1KSxYKSxfKHkoOTgyMSksWCksXyh5KDgzMDYpLFgpLF8oeSgzNDY3KSxYKSxfKHkoMzYwMiksWCksWC5kZWZhdWx0PUIuZGVmYXVsdH0sMTU3MDpmdW5jdGlvbih1ZSxY''@;'; put 'put ''LHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEp''@;'; put 'put ''e3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQ''@;'; put 'put ''LEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89eSgzOTAwKSxnPXkoMTM5NSksQj15KDYxMTgpO1guQ29tcHV0ZUpvYkV4ZWN1dG9yPWNsYXNzIHcgZXh0''@;'; put 'put ''ZW5kcyBCLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihGLE8pe3N1cGVyKEYsXy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1PfWV4ZWN1dGUoRixPLHosTixMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1OfHwo''@;'; put 'put ''KCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2UoKHEsZWUpPT57dmFyIEo7bnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUp8fEouZXhlY3V0ZUNvbXB1dGVKb2IoRix6LmNvbnRleHROYW1lLHouZGVidWcsTyxMLCEwLCEwKS50aGVuKG5l''@;'; put 'put ''PT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QobmUsRix6LmRlYnVnKSxxKG5lLnJlc3VsdCl9KS5jYXRjaChuZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bmUgaW5zdGFuY2VvZiBnLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5''@;'; put 'put ''YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLEYsei5kZWJ1ZyksZWUobmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpKSxuZSBpbnN0YW5jZW9mIGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoRixPLHos''@;'; put 'put ''TikudGhlbihpZT0+e3EoaWUpfSxpZT0+e2VlKGllKX0pKSx5aWVsZCBLKCkpOmVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2UsbmUpKX0pKX0pfSl9fX0sMzQ5MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp''@;'; put 'put ''b24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gcShlZSl7''@;'; put 'put ''ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRmlsZVVwbG9hZGVyPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz15KDEzOTUpLEI9eSgzOTAwKSx3PXkoNjExOCk7WC5GaWxlVXBsb2FkZXI9Y2xhc3MgUCBleHRlbmRzIHcuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKE8seixOLEwpe3N1cGVy''@;'; put 'put ''KE8seiksdGhpcy5qb2JzUGF0aD1OLHRoaXMucmVxdWVzdENsaWVudD1MfWV4ZWN1dGUoTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2ZpbGVzOksscGFyYW1zOlV9PXosVz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtpZighSz8ubGVu''@;'; put 'put ''Z3RoKXRocm93IG5ldyBnLkVycm9yUmVzcG9uc2UoIkF0IGxlYXN0IG9uZSBmaWxlIG11c3QgYmUgcHJvdmlkZWQuIik7aWYoIU98fCIiPT09Tyl0aHJvdyBuZXcgZy5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtsZXQgWT0iIjtmb3IobGV0IG1lIGluIFUpVS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eShtZSkmJihZKz1gJiR7bWV9PSR7VVttZV19YCk7Y29uc3QgcT1OLmFwcExvYz9OLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK08ucmVwbGFjZSgvXlwvLywiIik6TyxlZT1gJHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitxfSR7WX1gLEo9bmV3IEZvcm1E''@;'; put 'put ''YXRhO2ZvcihsZXQgbWUgb2YgSylKLmFwcGVuZCgiZmlsZSIsbWUuZmlsZSxtZS5maWxlTmFtZSk7Y29uc3QgbmU9dGhpcy5yZXF1ZXN0Q2xpZW50LmdldENzcmZUb2tlbigiZmlsZSIpO25lJiZKLmFwcGVuZCgiX2NzcmYiLG5lLnZhbHVlKSxOLmRlYnVnJiZKLmFwcGVuZCgiX2RlYnVnIiwi''@;'; put 'put ''MTMxIiksTi5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJk4uY29udGV4dE5hbWUmJkouYXBwZW5kKCJfY29udGV4dG5hbWUiLE4uY29udGV4dE5hbWUpO2NvbnN0IGllPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRl''@;'; put 'put ''eHQvcGxhaW4ifTtyZXR1cm4gbmV3IFByb21pc2UoKG1lLF9lKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KGVlLEosdm9pZCAwLCJhcHBsaWNhdGlvbi9qc29uIixpZSkudGhlbihUZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVu''@;'; put 'put ''ZFJlcXVlc3QoVGUsTyxOLmRlYnVnKTtsZXQgU2U9VGUucmVzdWx0O2lmKE4uZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpTZT15aWVsZCgwLF8ucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoVGUucmVzdWx0LHRoaXMucmVxdWVzdENs''@;'; put 'put ''aWVudCxOLnNlcnZlclVybCk7YnJlYWs7Y2FzZSBCLlNlcnZlclR5cGUuU2FzOTpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLnBhcnNlV2Vib3V0UmVzcG9uc2UpKFRlLnJlc3VsdCxlZSk6VGUucmVzdWx0O2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOlNlPSJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8uZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRlLnJlc3VsdH1lbHNlIFNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8uZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRlLnJlc3VsdDttZShTZSl9KSkuY2F0Y2goVGU9PkkodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1RlIGluc3RhbmNlb2YgZy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLE8sTi5kZWJ1ZyksX2UobmV3IGcuRXJyb3JSZXNwb25zZShUZT8ubWVzc2FnZSxUZSkpKSxUZSBpbnN0YW5jZW9mIGcu''@;'; put 'put ''TG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoTyx6LE4sTCkudGhlbihTZT0+e21lKFNlKX0sU2U9PntfZShTZSl9KSkseWllbGQgVygpKTpfZShuZXcgZy5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxl''@;'; put 'put ''ZC4iLFRlKSl9KSl9KX0pfX19LDQ0NDY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5u''@;'; put 'put ''ZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtV''@;'; put 'put ''KEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkplc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBfPXkoMzkwMCksZz15KDEzOTUpLEI9eSg2''@;'; put 'put ''MTE4KSx3PXkoNTkyOCk7WC5KZXNKb2JFeGVjdXRvcj1jbGFzcyBQIGV4dGVuZHMgQi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTyx6KXtzdXBlcihPLF8uU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9en1leGVjdXRlKE8seixOLEwsSyxVPVtdKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2UoKHEsZWUpPT57dmFyIEo7bnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUp8fEouZXhlY3V0ZUpvYihP''@;'; put 'put ''LE4uY29udGV4dE5hbWUsTi5kZWJ1Zyx6LEspLnRoZW4obmU9Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxPLE4uZGVidWcpO2NvbnN0IGllPSgwLHcuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKG5lLFUpO3EoaWUpfSkuY2F0Y2gobmU9PkkodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe25lIGluc3RhbmNlb2YgZy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLE8sTi5kZWJ1ZyksZWUobmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpKSxuZSBpbnN0YW5jZW9m''@;'; put 'put ''IGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoTyx6LE4sTCxLLFUpLnRoZW4oaWU9PntxKGllKX0saWU9PntlZShpZSl9KSkseWllbGQgVygpKTplZShuZXcgZy5FcnJvclJlc3BvbnNlKG5lPy5tZXNzYWdlLG5lKSl9KSl9''@;'; put 'put ''KX0pfX19LDYxMTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsdyxQLEYpe3JldHVybiBuZXcoUHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKHosTil7ZnVuY3Rpb24gTChXKXt0cnl7VShGLm5leHQoVykpfWNhdGNo''@;'; put 'put ''KFkpe04oWSl9fWZ1bmN0aW9uIEsoVyl7dHJ5e1UoRi50aHJvdyhXKSl9Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gVShXKXtXLmRvbmU/eihXLnZhbHVlKTpmdW5jdGlvbiBPKHope3JldHVybiB6IGluc3RhbmNlb2YgUD96Om5ldyBQKGZ1bmN0aW9uKE4pe04oeil9KX0oVy52YWx1ZSkudGhl''@;'; put 'put ''bihMLEspfVUoKEY9Ri5hcHBseShCLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89eSg1OTI4KTtYLkJhc2VKb2JFeGVjdXRvcj1jbGFzcyBne2NvbnN0cnVj''@;'; put 'put ''dG9yKHcsUCl7dGhpcy5zZXJ2ZXJVcmw9dyx0aGlzLnNlcnZlclR5cGU9UCx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkodGhpcy53YWl0''@;'; put 'put ''aW5nUmVxdWVzdHMsRj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgRigpfSkpLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdfSl9YXBwZW5kV2FpdGluZ1JlcXVlc3Qodyl7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaCh3KX1nZXRSZXF1ZXN0UGFyYW1zKHcpe2NvbnN0''@;'; put 'put ''IFA9e307cmV0dXJuIHcuZGVidWcmJihQLl9vbWl0dGV4dGxvZz0iZmFsc2UiLFAuX29taXRTZXNzaW9uUmVzdWx0cz0iZmFsc2UiLFAuX2RlYnVnPTEzMSksUH19fSwyNjkzOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv''@;'; put 'put ''bihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24g''@;'; put 'put ''bmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1w''@;'; put 'put ''b3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXM5Sm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMTM5NSks''@;'; put 'put ''dz15KDU5MjgpLFA9eSg2MTE4KSxGPXkoNzk1KTtYLlNhczlKb2JFeGVjdXRvcj1jbGFzcyBPIGV4dGVuZHMgUC5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTCxLLFUsVyxZKXtzdXBlcihMLEspLHRoaXMuam9ic1BhdGg9VSx0aGlzLnJlcXVlc3RDbGllbnQ9Vyx0aGlzLnNhczlSZXF1''@;'; put 'put ''ZXN0Q2xpZW50PW5ldyBGLlNhczlSZXF1ZXN0Q2xpZW50KEwsWSl9ZXhlY3V0ZShMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9KDAsdy5pc1JlbGF0aXZlUGF0aCkoTCkmJlUuYXBwTG9jP1UuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikr''@;'; put 'put ''TC5yZXBsYWNlKC9eXC8vLCIiKTpMO2xldCBZPWAke1Uuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0/JHsiX3Byb2dyYW09IitXfWA7WT1gJHtZfSR7VS51c2VybmFtZSYmVS5wYXNzd29yZD8iJl91c2VybmFtZT0iK1UudXNlcm5hbWUrIiZfcGFzc3dvcmQ9IitVLnBhc3N3b3JkOiIifWAs''@;'; put 'put ''WT1gJHtZfSR7VS5kZWJ1Zz8iJl9kZWJ1Zz0xMzEiOiIifWA7bGV0IHE9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVSkpLGVlPW5ldyBnLmRlZmF1bHQ7aWYoSyl0cnl7ZWU9eihlZSxLKX1jYXRjaChpZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9y''@;'; put 'put ''UmVzcG9uc2UoaWU/Lm1lc3NhZ2UsaWUpKX1lbHNlIEs9IiI7Zm9yKGNvbnN0IGllIGluIHEpcS5oYXNPd25Qcm9wZXJ0eShpZSkmJmVlLmFwcGVuZChpZSxxW2llXSk7eWllbGQgdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihVLnVzZXJuYW1lLFUucGFzc3dvcmQsdGhpcy5qb2JzUGF0''@;'; put 'put ''aCk7Y29uc3QgSj1LJiZPYmplY3Qua2V5cyhLKS5sZW5ndGg/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrZWUuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIjtyZXR1cm4gbmV3IFByb21pc2UoKGllLGxlKT0+dGhpcy5zYXM5UmVxdWVzdENsaWVudC5wb3N0KFksZWUsdm9pZCAwLEos''@;'; put 'put ''e0FjY2VwdDoiKi8qIixDb25uZWN0aW9uOiJLZWVwLUFsaXZlIn0pLnRoZW4obWU9Pnt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChtZSxMLFUuZGVidWcpLGllKG1lKX0pLmNhdGNoKG1lPT57bGV0IF9lPW1lO21lLnJlc3VsdCYmIiIhPT1tZS5yZXN1bHQ/X2U9bWUucmVzdWx0''@;'; put 'put ''Om1lLm1lc3NhZ2UmJihfZT1tZS5tZXNzYWdlKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChfZSxMLFUuZGVidWcpLGxlKG5ldyBCLkVycm9yUmVzcG9uc2UobWU/Lm1lc3NhZ2UsbWUpKX0pKX0pfWdldFJlcXVlc3RQYXJhbXMoTCl7Y29uc3QgSz17fTtyZXR1cm4gTC5kZWJ1''@;'; put 'put ''ZyYmKEsuX2RlYnVnPTEzMSksS319O2NvbnN0IHo9KE4sTCk9Pntmb3IoY29uc3QgSyBpbiBMKXtjb25zdCBVPUssVz0oMCx3LmNvbnZlcnRUb0NTVikoTCxLKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Vyl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEg''@;'; put 'put ''c3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Ti5hcHBlbmQoVSxXLHtmaWxlbmFtZTpgJHtVfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9cmV0dXJuIE59fSwxMDY1OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRo''@;'; put 'put ''aXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gbmUobGUpe3RyeXtpZShXLnRocm93KGxl''@;'; put 'put ''KSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRvbmU/cShsZS52YWx1ZSk6ZnVuY3Rpb24gWShxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFU/cTpuZXcgVShmdW5jdGlvbihlZSl7ZWUocSl9KX0obGUudmFsdWUpLnRoZW4oSixuZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtd''@;'; put 'put ''KSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihMKXtyZXR1cm4gTCYmTC5fX2VzTW9kdWxlP0w6e2RlZmF1bHQ6TH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhc2pzSm9iRXhlY3V0b3I9dm9p''@;'; put 'put ''ZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMzkwMCksdz15KDEzOTUpLFA9eSg0MDM3KSxGPXkoNTkyOCksTz15KDU5MjgpLHo9eSg2MTE4KTtYLlNhc2pzSm9iRXhlY3V0b3I9Y2xhc3MgTiBleHRlbmRzIHouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEssVSxXKXtzdXBlcihLLEIu''@;'; put 'put ''U2VydmVyVHlwZS5TYXNqcyksdGhpcy5qb2JzUGF0aD1VLHRoaXMucmVxdWVzdENsaWVudD1XfWV4ZWN1dGUoSyxVLFcsWSxxLGVlPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj1ZLG5lPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspJiZXLmFwcExv''@;'; put 'put ''Yz9XLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0sucmVwbGFjZSgvXlwvLywiIik6SztsZXQgaWU9YCR7Vy5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IituZX1gLGxlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFcpKSxtZT0oMCxG''@;'; put 'put ''LmdldEZvcm1EYXRhKSgpO2lmKFUpdHJ5e21lPSgwLFAuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkobWUsVSl9Y2F0Y2goU2Upe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKFNlPy5tZXNzYWdlLFNlKSl9Zm9yKGNvbnN0IFNlIGluIGxlKWxlLmhhc093blByb3Bl''@;'; put 'put ''cnR5KFNlKSYmbWUuYXBwZW5kKFNlLGxlW1NlXSk7Y29uc3QgX2U9bWUgaW5zdGFuY2VvZiBnLmRlZmF1bHQmJnR5cGVvZiBGb3JtRGF0YT4idSI/YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7bWUuZ2V0SGVhZGVycygpWyJjb250ZW50LXR5cGUiXX1gOiJtdWx0aXBhcnQvZm9y''@;'; put 'put ''bS1kYXRhIjtyZXR1cm4gbmV3IFByb21pc2UoKFNlLGplKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KGllLG1lLHE/LmFjY2Vzc190b2tlbixfZSkudGhlbihWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihPYmplY3QuZW50cmllcyhWLnJlc3VsdCkubGVuZ3RoPDEp''@;'; put 'put ''dGhyb3cgbmV3IHcuSm9iRXhlY3V0aW9uRXJyb3IoMCxgTm8gd2Vib3V0IHdhcyByZXR1cm5lZCBieSBqb2IgJHtuZX0uICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby5gLFYubG9nKTtjb25zdHtyZXN1bHQ6cH09VjtwJiYic3RyaW5nIj09dHlwZW9mIHAmJnAudHJp''@;'; put 'put ''bSgpJiYoVi5yZXN1bHQ9KDAsTy5nZXRWYWxpZEpzb24pKHApKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1Zyk7Y29uc3QgYj0oMCxPLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShWLGVlKTtTZShiKX0pKS5jYXRjaChWPT5JKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtWIGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKSxqZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpKSxWIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVp''@;'; put 'put ''cmVkRXJyb3I/KFl8fGplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixWKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRl''@;'; put 'put ''KEssVSxXLFkscSxlZSkudGhlbihwPT57U2UocCl9LHA9PntqZShwKX0pKSxKJiYoeWllbGQgSigpKSk6amUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKX0pKX0pfSl9fX0sNjA4NDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdh''@;'; put 'put ''aXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIG5lKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtl''@;'; put 'put ''ZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP3EobGUudmFsdWUpOmZ1bmN0aW9uIFkocSl7cmV0dXJuIHEgaW5zdGFuY2VvZiBVP3E6bmV3IFUoZnVuY3Rpb24oZWUpe2VlKHEpfSl9KGxlLnZhbHVlKS50aGVuKEosbmUpfWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX0s''@;'; put 'put ''Xz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5XZWJKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgZz1fKHko''@;'; put 'put ''NjIzMCkpLEI9eSgzOTAwKSx3PXkoMTM5NSksUD15KDQwMzcpLEY9eSgyMTcwKSxPPXkoNTkyOCksej15KDYxMTgpO1guV2ViSm9iRXhlY3V0b3I9Y2xhc3MgTiBleHRlbmRzIHouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEssVSxXLFkscSl7c3VwZXIoSyxVKSx0aGlzLmpvYnNQYXRo''@;'; put 'put ''PVcsdGhpcy5yZXF1ZXN0Q2xpZW50PVksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PXF9ZXhlY3V0ZShLLFUsVyxZLHEsZWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPVksbmU9KDAsTy5pc1JlbGF0aXZlUGF0aCkoSykmJlcuYXBwTG9jP1cuYXBw''@;'; put 'put ''TG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8vLCIiKTpLO2xldCBpZT1gJHtXLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK25lfWA7aWYoVy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2xldCBTZTt0cnl7U2U9eWllbGQg''@;'; put 'put ''dGhpcy5nZXRKb2JVcmkoSyl9Y2F0Y2goamUpe3JldHVybiBuZXcgUHJvbWlzZSgoVixwKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7amUgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRl''@;'; put 'put ''KEssVSxXLFkscSxlZSkudGhlbihiPT57VihiKX0sYj0+e3AoYil9KSksSiYmKHlpZWxkIEooKSkpOnAobmV3IHcuRXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkpfSkpfWllKz1TZS5sZW5ndGg+MD8iJl9qb2I9IitTZToiIixTZS5sZW5ndGg+MCYmKGllKz0iJl9qb2I9IitTZSxpZT1p''@;'; put 'put ''ZS5yZXBsYWNlKCJfcHJvZ3JhbT0iLCJfX3Byb2dyYW09IikpLGllKz1XLmNvbnRleHROYW1lJiYhL1xzLy50ZXN0KFcuY29udGV4dE5hbWUpP2AmX2NvbnRleHRuYW1lPSR7Vy5jb250ZXh0TmFtZX1gOiIifWxldCBsZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhX''@;'; put 'put ''KSksbWU9KDAsTy5nZXRGb3JtRGF0YSkoKTtpZihVKXtjb25zdCBTZT1KU09OLnN0cmluZ2lmeShVKTtpZihXLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOXx8U2UubGVuZ3RoPjVlNXx8U2UuaW5jbHVkZXMoIjsiKSl0cnl7bWU9KDAsUC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKSht''@;'; put 'put ''ZSxVKX1jYXRjaChqZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoamU/Lm1lc3NhZ2UsamUpKX1lbHNlIHRyeXtjb25zdHtmb3JtRGF0YTpqZSxyZXF1ZXN0UGFyYW1zOlZ9PSgwLEYuZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKG1lLFUpO21lPWplLGxlPU9i''@;'; put 'put ''amVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsZSksVil9Y2F0Y2goamUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSl9fWZvcihjb25zdCBTZSBpbiBsZSlsZS5oYXNPd25Qcm9wZXJ0eShTZSkmJm1lLmFwcGVuZChTZSxsZVtT''@;'; put 'put ''ZV0pO2NvbnN0IF9lPW1lIGluc3RhbmNlb2YgZy5kZWZhdWx0JiZ0eXBlb2YgRm9ybURhdGE+InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke21lLmdldEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KChTZSxqZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChpZSxtZSxxPy5hY2Nlc3NfdG9rZW4sX2UpLnRoZW4oVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpO2xldCBwPVYucmVzdWx0O2lm''@;'; put 'put ''KFcuZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpwPXlpZWxkKDAsTy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShWLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBl''@;'; put 'put ''LlNhczk6cD0ic3RyaW5nIj09dHlwZW9mIFYucmVzdWx0PygwLE8ucGFyc2VXZWJvdXRSZXNwb25zZSkoVi5yZXN1bHQsaWUpOlYucmVzdWx0fWNvbnN0IGI9KDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpwLGxvZzpWLmxvZ30sZWUpO1NlKGIpfSkpLmNhdGNo''@;'; put 'put ''KFY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1YgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpLGplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSkpLFYgaW5zdGFu''@;'; put 'put ''Y2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8oWXx8amUobmV3IHcuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLFYpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0''@;'; put 'put ''KCgpPT50aGlzLmV4ZWN1dGUoSyxVLFcsWSxxLGVlKS50aGVuKHA9PntTZShwKX0scD0+e2plKHApfSkpLEomJih5aWVsZCBKKCkpKTpqZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpfSkpfSl9KX1nZXRKb2JVcmkoSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2lmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJuIiI7bGV0IFcsWSxVPSIiO2lmKCgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspKXtjb25zdCBlZT1LLnNwbGl0KCIvIik7Vz1lZS5sZW5ndGg+MT9lZVswXToiIixZPWVlLmxlbmd0aD4xP2VlWzFdOiIifWVsc2V7Y29uc3Qg''@;'; put 'put ''ZWU9Sy5zcGxpdCgiLyIpO1k9ZWUucG9wKCl8fCIiLFc9ZWUuam9pbigiLyIpfWlmKCFZKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2NvbnN0IHE9eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEpvYnNJbkZvbGRlcihXKTtp''@;'; put 'put ''ZihxKXtjb25zdCBlZT1xLmZpbmQoSj0+Si5uYW1lPT09WSYmImpvYkRlZmluaXRpb24iPT09Si5jb250ZW50VHlwZSk7ZWUmJihVPWVlLnVyaSl9cmV0dXJuIFV9KX19fSw4MjE3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5n''@;'; put 'put ''fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFy''@;'; put 'put ''IHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDE1NzApLFgpLF8oeSgzNDkxKSxYKSxfKHkoNDQ0NiksWCks''@;'; put 'put ''Xyh5KDYxMTgpLFgpLF8oeSgyNjkzKSxYKSxfKHkoNjA4NCksWCksXyh5KDEwNjUpLFgpfSw0NTg4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9u''@;'; put 'put ''KG5lLGllLGxlLG1lKXt2b2lkIDA9PT1tZSYmKG1lPWxlKTt2YXIgX2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpZSxsZSk7KCFfZXx8KCJnZXQiaW4gX2U/IWllLl9fZXNNb2R1bGU6X2Uud3JpdGFibGV8fF9lLmNvbmZpZ3VyYWJsZSkpJiYoX2U9e2VudW1lcmFibGU6ITAs''@;'; put 'put ''Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGllW2xlXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsbWUsX2UpfTpmdW5jdGlvbihuZSxpZSxsZSxtZSl7dm9pZCAwPT09bWUmJihtZT1sZSksbmVbbWVdPWllW2xlXX0pLEI9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3Qu''@;'; put 'put ''Y3JlYXRlP2Z1bmN0aW9uKG5lLGllKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmllfSl9OmZ1bmN0aW9uKG5lLGllKXtuZS5kZWZhdWx0PWllfSksdz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obmUpe2lmKG5lJiZu''@;'; put 'put ''ZS5fX2VzTW9kdWxlKXJldHVybiBuZTt2YXIgaWU9e307aWYobnVsbCE9bmUpZm9yKHZhciBsZSBpbiBuZSkiZGVmYXVsdCIhPT1sZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5lLGxlKSYmZyhpZSxuZSxsZSk7cmV0dXJuIEIoaWUsbmUpLGllfSxQPXRoaXMmJnRo''@;'; put 'put ''aXMuX19hd2FpdGVyfHxmdW5jdGlvbihuZSxpZSxsZSxtZSl7cmV0dXJuIG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gamUoYil7dHJ5e3AobWUubmV4dChiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIFYoYil7dHJ5e3AobWUudGhyb3coYikpfWNh''@;'; put 'put ''dGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBwKGIpe2IuZG9uZT9UZShiLnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2YgbGU/VGU6bmV3IGxlKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oYi52YWx1ZSkudGhlbihqZSxWKX1wKChtZT1tZS5hcHBseShuZSxpZXx8W10p''@;'; put 'put ''KS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnRocm93SWZFcnJvcj1YLlJlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IEY9dyh5KDgzNzMpKSxPPXkoMTUyNyksej15KDEzOTUpLE49eSgyODEzKSxMPXkoOTc3OCksSz15KDk1''@;'; put 'put ''MjYpLFU9eSg1OTI4KSxXPXkoMTAwNSksWT15KDk1MzkpO1guUmVxdWVzdENsaWVudD1jbGFzcyBxe2NvbnN0cnVjdG9yKGllLGxlLG1lLF9lKXt0aGlzLmJhc2VVcmw9aWUsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNz''@;'; put 'put ''cmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRSZXF1ZXN0cz0oKT0+dGhpcy5yZXF1ZXN0cyx0aGlzLmNsZWFyUmVxdWVzdHM9KCk9Pnt0aGlzLnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1UZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0''@;'; put 'put ''IFNlPW51bGw7Y29uc3QgamU9e30sVj1UZS5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSxwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuaW5uZXJIVE1MPVY7Y29uc3QgYj1wLnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIik7''@;'; put 'put ''U2U9Yj90aGlzLmJhc2VVcmwrYi5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGw7Y29uc3QgeD1iPy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpO2Zvcihjb25zdCBIIG9mIHgpInVzZXJfb2F1dGhfYXBwcm92YWwiPT09SC5uYW1lJiYoSC52YWx1ZT0idHJ1ZSIpLGplW0gubmFtZV09SC52''@;'; put 'put ''YWx1ZTtjb25zdCBDPU9iamVjdC5rZXlzKGplKS5maW5kKEg9Pkg/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImNzcmYiKSk7QyYmKHRoaXMuY3NyZlRva2VuLnZhbHVlPWplW0NdLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWU9dGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZXx8IngtY3NyZi10''@;'; put 'put ''b2tlbiIpO2NvbnN0IFQ9bmV3IEZvcm1EYXRhO2Zvcihjb25zdCBIIGluIGplKWplLmhhc093blByb3BlcnR5KEgpJiZULmFwcGVuZChILGplW0hdKTtpZighU2UpdGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiB5aWVsZCB0aGlz''@;'; put 'put ''Lmh0dHBDbGllbnQucG9zdChTZSxULHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6e0FjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9fSkudGhlbihIPT5ILmRhdGEpLmNhdGNoKEg9PnsoSS5sb2dnZXJ8fF8pLmVycm9yKEgpfSl9KSx0aGlzLnByZXR0aWZ5U3Ry''@;'; put 'put ''aW5nPVRlPT4oMCxZLmluc3BlY3QpKFRlLHtjb2xvcnM6ImJsZWFjaGVkIiE9PXRoaXMudmVyYm9zZU1vZGV9KSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PVRlPT57aWYoIVRlKXJldHVybiIiO2xldCBTZTtpZigic3RyaW5nIj09dHlwZW9mIFRlKXRyeXtTZT1KU09OLnBhcnNlKFRlKX1j''@;'; put 'put ''YXRjaHtTZT1UZX1lbHNlIFNlPVRlO2NvbnN0IGplPXRoaXMucHJldHRpZnlTdHJpbmcoU2UpLnNwbGl0KCJcbiIpO3JldHVybiBqZS5sZW5ndGg+NTEmJihqZS5zcGxpY2UoNTApLGplLnB1c2goIi4uLiIpKSxqZS5qb2luKCJcbiIpfSx0aGlzLmhhbmRsZUF4aW9zUmVzcG9uc2U9VGU9Pnt2''@;'; put 'put ''YXIgU2UsamUsVixwO2NvbnN0e3N0YXR1czpiLGNvbmZpZzp4LHJlcXVlc3Q6QyxkYXRhOlR9PVRlLEg9bnVsbCE9PShTZT1DPy5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6Ik5vdCBwcm92aWRlZFxuIixqPW51bGwhPT0oVj1udWxsPT09KGplPUM/LnJlcyl8fHZvaWQgMD09PWplP3ZvaWQg''@;'; put 'put ''MDpqZS5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Vj9WOlsiTm90IHByb3ZpZGVkIl0sRT10aGlzLmZvcm1hdEhlYWRlcnMoaiksbT10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KFQpO3JldHVybiBudWxsPT09KHA9SS5sb2dnZXIpfHx2b2lkIDA9PT1wfHxwLmluZm8oYEhUVFAgUmVxdWVzdCAo''@;'; put 'put ''Zmlyc3QgNTAgbGluZXMpOlxuJHtIfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh4LmRhdGEpfVxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICR7dGhpcy5wcmV0dGlmeVN0cmluZyhiKX1cblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuJHtFfSR7bT9gXG5cbiR7bX1gOiIi''@;'; put 'put ''fVxuYCksVGV9LHRoaXMuaGFuZGxlQXhpb3NFcnJvcj1UZT0+e3ZhciBTZSxqZSxWLHAsYix4O2NvbnN0IEM9Ik5vdCBwcm92aWRlZCIse3Jlc3BvbnNlOlQscmVxdWVzdDpILGNvbmZpZzpqfT1UZTtsZXQgRT17X2hlYWRlcjpgJHtDfVxuYCxyZXM6e3Jhd0hlYWRlcnM6W0NdfX07SCYmKEU9''@;'; put 'put ''e19oZWFkZXI6bnVsbCE9PShWPW51bGwhPT0oU2U9SC5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6bnVsbD09PShqZT1ILl9jdXJyZW50UmVxdWVzdCl8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5faGVhZGVyKSYmdm9pZCAwIT09Vj9WOkMscmVzOntyYXdIZWFkZXJzOm51bGwhPT0oYj1udWxs''@;'; put 'put ''PT09KHA9SC5yZXMpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLnJhd0hlYWRlcnMpJiZ2b2lkIDAhPT1iP2I6W0NdfX0pO2xldCBtPVR8fHtzdGF0dXM6QyxyZXF1ZXN0OkUsY29uZmlnOmp8fHtkYXRhOkMsaGVhZGVyczp7fX0sZGF0YTpDfTtjb25zdHtzdGF0dXM6QSxyZXF1ZXN0OmFlLGRhdGE6''@;'; put 'put ''dGV9PW0se19oZWFkZXI6c2UscmVzOndlfT1hZSxVZT10aGlzLmZvcm1hdEhlYWRlcnMod2UucmF3SGVhZGVycyksSmU9dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh0ZSk7cmV0dXJuIG51bGw9PT0oeD1JLmxvZ2dlcil8fHZvaWQgMD09PXh8fHguaW5mbyhgSFRUUCBSZXF1ZXN0IChmaXJz''@;'; put 'put ''dCA1MCBsaW5lcyk6XG4ke3NlfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShqPy5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoQSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7VWV9JHtKZT9gXG5cbiR7SmV9YDoi''@;'; put 'put ''In1cbmApLFRlfSx0aGlzLmZvcm1hdEhlYWRlcnM9VGU9PlRlLnJlZHVjZSgoU2UsamUsVik9PlNlKyhWJTI9PTA/YCR7MD09PVY/IiI6IlxuIn0ke2plfWA6YDogJHtqZX1gKSwiIiksdGhpcy5zZXRWZXJib3NlTW9kZT1UZT0+e3RoaXMudmVyYm9zZU1vZGU9VGUsdGhpcy52ZXJib3NlTW9k''@;'; put 'put ''ZT90aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCk6dGhpcy5kaXNhYmxlVmVyYm9zZU1vZGUoKX0sdGhpcy5lbmFibGVWZXJib3NlTW9kZT0oVGU9dGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlLFNlPXRoaXMuaGFuZGxlQXhpb3NFcnJvcik9Pnt0aGlzLmh0dHBJbnRlcmNlcHRvcj10aGlzLmh0dHBD''@;'; put 'put ''bGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShUZSxTZSl9LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPSgpPT57dGhpcy5odHRwSW50ZXJjZXB0b3ImJnRoaXMuaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QodGhpcy5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdl''@;'; put 'put ''dEhlYWRlcnM9KFRlLFNlKT0+e2NvbnN0IGplPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09U2UmJihqZVsiQ29udGVudC1UeXBlIl09U2UpLGplLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1TZT8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsVGUm''@;'; put 'put ''JihqZS5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtUZX1gKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZSYmKGplW3RoaXMuY3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuY3NyZlRva2VuLnZhbHVlKSxqZX0sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxv''@;'; put 'put ''YWRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuY3NyZlRv''@;'; put 'put ''a2VuPVNlKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1UZT0+e3ZhciBTZTtjb25zdCBqZT1udWxsPT09KFNlPVRlLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS50b0xvd2VyQ2FzZSgpO2lmKGplKXJldHVybntoZWFkZXJOYW1lOmplLHZhbHVlOlRlLmhl''@;'; put 'put ''YWRlcnNbamVdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9KFRlLFNlLGplPSExKT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVj1UZS5yZXNwb25zZTtpZihUZSBpbnN0YW5jZW9mIHouQXV0aG9yaXplRXJyb3Ipe2NvbnN0IHA9eWllbGQgdGhpcy5odHRwQ2xpZW50''@;'; put 'put ''LmdldChUZS5jb25maXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1V''@;'; put 'put ''cmwuICIpfSk7cmV0dXJuKDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkocD8uZGF0YSkmJih5aWVsZCB0aGlzLmF1dGhvcml6ZShwLmRhdGEpLmNhdGNoKGI9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KSkseWll''@;'; put 'put ''bGQgU2UoKS5jYXRjaChiPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KX1pZihUZSBpbnN0YW5jZW9mIHouTG9naW5SZXF1aXJlZEVycm9yKXRocm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCks''@;'; put 'put ''VGU7aWYoVGUgaW5zdGFuY2VvZiBXLkludmFsaWRTQVNqc0NzcmZFcnJvcilyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhYU1JGVG9rZW46ITB9KS50aGVuKHA9Pnt2YXIgYjtjb25zdCB4PW51bGw9PT0oYj0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhT''@;'; put 'put ''UkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMocC5kYXRhKSl8fHZvaWQgMD09PWI/dm9pZCAwOmJbMV07eCYmKGRvY3VtZW50LmNvb2tpZT14KX0pLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSko''@;'; put 'put ''cCwiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0pLHlpZWxkIFNlKCkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7aWYoNDAzPT09Vj8uc3RhdHVzfHw0''@;'; put 'put ''NDk9PT1WPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW4oViksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUpcmV0dXJuIHlpZWxkIFNlKCkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBl''@;'; put 'put ''eGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7dGhyb3cgVGV9aWYoNDA0PT09Vj8uc3RhdHVzKXRocm93IG5ldyB6Lk5vdEZvdW5kRXJyb3IoVi5jb25maWcudXJsKTtpZig1MDIhPT1WPy5zdGF0dXMpdGhyb3cgVGUuaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklG''@;'; put 'put ''WV9MRUFGX1NJR05BVFVSRSI9PT1UZS5jb2RlP25ldyB6LkNlcnRpZmljYXRlRXJyb3IoVGUubWVzc2FnZSk6VGUubWVzc2FnZT9UZTooMCxMLnByZWZpeE1lc3NhZ2UpKFRlLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIik7aWYoamUpdGhyb3cgbmV3IHouSW50ZXJuYWxTZXJ2ZXJF''@;'; put 'put ''cnJvcn0pLHRoaXMuY3JlYXRlSHR0cENsaWVudChpZSxsZSksbWUmJih0aGlzLnJlcXVlc3RzTGltaXQ9bWUpLF9lJiYodGhpcy5zZXRWZXJib3NlTW9kZShfZSksdGhpcy5lbmFibGVWZXJib3NlTW9kZSgpKX1zZXRDb25maWcoaWUsbGUpe3RoaXMuY3JlYXRlSHR0cENsaWVudChpZSxsZSl9''@;'; put 'put ''c2F2ZUxvY2FsU3RvcmFnZVRva2VuKGllLGxlKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLGllKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIixsZSl9Z2V0Q3NyZlRva2VuKGllPSJnZW5lcmFsIil7cmV0dXJuImZpbGUiPT09aWU/dGhpcy5maWxlVXBs''@;'; put 'put ''b2FkQ3NyZlRva2VuOnRoaXMuY3NyZlRva2VufWNsZWFyQ3NyZlRva2Vucygpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9fWNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zKCl7bG9j''@;'; put 'put ''YWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfWdldEJhc2VVcmwoKXtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmJhc2VVUkx8fCIifWFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpe2xldCBfZT0i''@;'; put 'put ''IixUZT0iIixTZT1udWxsO21lJiYoaWU/LmxvZz8oX2U9KDAsVS5wYXJzZVNvdXJjZUNvZGUpKGllLmxvZyksVGU9KDAsVS5wYXJzZUdlbmVyYXRlZENvZGUpKGllLmxvZyksU2U9aWU/LnJlc3VsdD9pZS5yZXN1bHQuV09SSzppZS5sb2cpOmllPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGllLnJlc3VsdCYmKF9lPSgwLFUucGFyc2VTb3VyY2VDb2RlKShpZS5yZXN1bHQpLFRlPSgwLFUucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5yZXN1bHQpKSxTZT1pZS5yZXN1bHQuV09SSykpO2NvbnN0IGplPSJzdHJpbmciPT10eXBlb2YgaWU/LnJlc3VsdD9pZT8ucmVzdWx0OkpTT04uc3Ry''@;'; put 'put ''aW5naWZ5KGllPy5yZXN1bHQsbnVsbCwyKTt0aGlzLnJlcXVlc3RzLnB1c2goe2xvZ0ZpbGU6aWU/LmxvZ3x8amV8fGllLHNlcnZpY2VMaW5rOmxlLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOl9lLGdlbmVyYXRlZENvZGU6VGUsU0FTV09SSzpTZX0pLHRoaXMucmVxdWVzdHMubGVu''@;'; put 'put ''Z3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxpY2UoMCwxKX1nZXQoaWUsbGUsbWU9ImFwcGxpY2F0aW9uL2pzb24iLF9lPXt9LFRlPSExKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgamU9e2hlYWRlcnM6T2JqZWN0LmFzc2ln''@;'; put 'put ''bihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhsZSxtZSkpLF9lKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09bWU/InRleHQiOiJqc29uIix3aXRoWFNSRlRva2VuOiEwfTtyZXR1cm4idGV4dC9wbGFpbiI9PT1tZSYmKGplLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCks''@;'; put 'put ''dGhpcy5odHRwQ2xpZW50LmdldChpZSxqZSkudGhlbihWPT4oKDAsWC50aHJvd0lmRXJyb3IpKFYpLHRoaXMucGFyc2VSZXNwb25zZShWKSkpLmNhdGNoKFY9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFYsKCk9PnRoaXMu''@;'; put 'put ''Z2V0KGllLGxlLG1lLF9lKS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSksVGUpfSkpfSl9cG9zdChpZSxsZSxtZSxfZT0iYXBwbGljYXRpb24vanNvbiIsVGU9e30sU2U9e30pe3Jl''@;'; put 'put ''dHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBqZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG1lLF9lKSksVGUpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChpZSxsZSxPYmplY3QuYXNzaWduKHtoZWFkZXJzOmpl''@;'; put 'put ''LHdpdGhYU1JGVG9rZW46ITB9LFNlKSkudGhlbihWPT4oKDAsWC50aHJvd0lmRXJyb3IpKFYpLHRoaXMucGFyc2VSZXNwb25zZShWKSkpLmNhdGNoKFY9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFYsKCk9PnRoaXMucG9z''@;'; put 'put ''dChpZSxsZSxtZSxfZSxUZSkpfSkpfSl9cHV0KGllLGxlLG1lLF9lPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpKSxf''@;'; put 'put ''ZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wdXQoaWUsbGUse2hlYWRlcnM6VGUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oU2U9PigoMCxYLnRocm93SWZFcnJvcikoU2UpLHRoaXMucGFyc2VSZXNwb25zZShTZSkpKS5jYXRjaChTZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoU2UsKCk9PnRoaXMucHV0KGllLGxlLG1lLF9lKSl9KSl9KX1kZWxldGUoaWUsbGUpe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLmdldEhlYWRlcnMobGUsImFwcGxpY2F0aW9uL2pz''@;'; put 'put ''b24iKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZShpZSx7aGVhZGVyczptZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihfZT0+KCgwLFgudGhyb3dJZkVycm9yKShfZSksdGhpcy5wYXJzZVJlc3BvbnNlKF9lKSkpLmNhdGNoKF9lPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihfZSwoKT0+dGhpcy5kZWxldGUoaWUsbGUpKX0pKX0pfXBhdGNoKGllLGxlPXt9LG1lKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9dGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlv''@;'; put 'put ''bi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wYXRjaChpZSxsZSx7aGVhZGVyczpfZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihUZT0+KCgwLFgudGhyb3dJZkVycm9yKShUZSksdGhpcy5wYXJzZVJlc3BvbnNlKFRlKSkpLmNhdGNoKFRlPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihUZSwoKT0+dGhpcy5wYXRjaChpZSxsZSxtZSkpfSkpfSl9dXBsb2FkRmlsZShpZSxsZSxtZSl7dmFyIF9lO3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT10aGlzLmdldEhlYWRl''@;'; put 'put ''cnMobWUsImFwcGxpY2F0aW9uL2pzb24iKTtudWxsIT09KF9lPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbikmJnZvaWQgMCE9PV9lJiZfZS52YWx1ZSYmKFRlW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpO3RyeXtj''@;'; put 'put ''b25zdCBTZT15aWVsZCB0aGlzLmh0dHBDbGllbnQucG9zdChpZSxsZSx7aGVhZGVyczpUZSx0cmFuc2Zvcm1SZXF1ZXN0OmplPT5qZX0pO3JldHVybntyZXN1bHQ6U2UuZGF0YSxldGFnOlNlLmhlYWRlcnMuZXRhZ319Y2F0Y2goU2Upe2NvbnN0IGplPVNlLnJlc3BvbnNlO2lmKDQwMz09PWpl''@;'; put 'put ''Py5zdGF0dXN8fDQ0OT09PWplPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKGplKSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pcmV0dXJuIHRoaXMudXBsb2FkRmlsZShpZSxsZSxtZSk7dGhyb3cgU2V9dGhyb3cgU2V9fSl9cGFyc2VSZXNwb25zZShp''@;'; put 'put ''ZSl7Y29uc3QgbGU9aWU/LmhlYWRlcnM/aWUuaGVhZGVycy5ldGFnOiIiO2xldCBtZSxfZT0hMTt0cnl7bWU9InN0cmluZyI9PXR5cGVvZiBpZS5kYXRhP0pTT04ucGFyc2UoaWUuZGF0YSk6aWUuZGF0YX1jYXRjaHt0cnl7bWU9SlNPTi5wYXJzZSgoMCxOLnBhcnNlV2Vib3V0UmVzcG9uc2Up''@;'; put 'put ''KGllLmRhdGEpKX1jYXRjaHttZT1pZS5kYXRhfV9lPSEwfWxldCBUZT17cmVzdWx0Om1lLGV0YWc6bGUsc3RhdHVzOmllLnN0YXR1c307cmV0dXJuIF9lJiYoVGUubG9nPWllLmRhdGEpLFRlfWNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpe2NvbnN0IG1lPWxlP25ldyBGLkFnZW50KGxlKTp2b2lk''@;'; put 'put ''IDA7dGhpcy5odHRwQ2xpZW50PSgwLFUuY3JlYXRlQXhpb3NJbnN0YW5jZSkoaWUsbWUpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1fZT0+X2U+PTIwMCYmX2U8PTQwMX19LFgudGhyb3dJZkVycm9yPW5lPT57dmFyIGllLGxlLG1lLF9lLFRlLFNlLGplO3N3aXRj''@;'; put 'put ''aChuZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgbmUuZGF0YSYmImludmFsaWRfZ3JhbnQiPT09bmUuZGF0YS5lcnJvcil0aHJvdyBuZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IobmUuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiBuZS5kYXRhJiYiaW52YWxpZCBjc3Jm''@;'; put 'put ''IHRva2VuISI9PT1uZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IFcuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9iamVjdCI9PXR5cGVvZiBuZS5kYXRhP25ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcihuZS5kYXRhKTpuZXcgei5Mb2dpblJlcXVpcmVk''@;'; put 'put ''RXJyb3J9aWYobnVsbCE9PShsZT1udWxsPT09KGllPW5lLmRhdGEpfHx2b2lkIDA9PT1pZT92b2lkIDA6aWUuZW50aXR5SUQpJiZ2b2lkIDAhPT1sZSYmbGUuaW5jbHVkZXMoImxvZ2luIikpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuZGF0''@;'; put 'put ''YSYmKDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkobmUuZGF0YSkpdGhyb3cgbmV3IHouQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQiLG5lLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuZGF0YSYmKDAsTy5pc0xvZ0luUmVxdWly''@;'; put 'put ''ZWQpKG5lLmRhdGEpJiYobnVsbD09PShfZT1udWxsPT09KG1lPW5lLmNvbmZpZyl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS51cmwpfHx2b2lkIDA9PT1fZXx8IV9lLmluY2x1ZGVzKCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwhPT0o''@;'; put 'put ''VGU9bmUuZGF0YSkmJnZvaWQgMCE9PVRlJiZUZS5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IHouQXV0aG9yaXplRXJyb3IobmUuZGF0YS5tZXNzYWdlLG5lLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKG51bGwhPT0oamU9bnVsbD09PShTZT1uZS5jb25maWcpfHx2b2lkIDA9PT1TZT92b2lkIDA6''@;'; put 'put ''U2UudXJsKSYmdm9pZCAwIT09amUmJmplLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgSy5TQVM5QXV0aEVycm9yO2NvbnN0IFY9SihuZS5kYXRhKTtpZihWKXRocm93IFZ9O2NvbnN0IEo9bmU9PntpZighbmUpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IGllPUpTT04ucGFyc2Uo''@;'; put 'put ''bmU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO2lmKGllLmVycm9yQ29kZSYmaWUubWVzc2FnZSlyZXR1cm4gbmV3IHouSm9iRXhlY3V0aW9uRXJyb3IoaWUuZXJyb3JDb2RlLGllLm1lc3NhZ2UsbmU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpfWNhdGNoe310cnl7aWYobmU/LmluY2x1ZGVz''@;'; put 'put ''KCd7ImVycm9yQ29kZScpKXtjb25zdCBsZT1uZS5zcGxpdCgneyJlcnJvckNvZGUnKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9J3siZXJyb3JDb2RlJytsZVsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLF9lPUpTT04ucGFyc2UobWUucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5l''@;'; put 'put ''dyB6LkpvYkV4ZWN1dGlvbkVycm9yKF9lLmVycm9yQ29kZSxfZS5tZXNzYWdlLG5lPy5yZXBsYWNlKC9bXG5ccl0vZywiXG4iKSl9fX1jYXRjaHt9dHJ5e2lmKG5lPy5tYXRjaCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkpe2NvbnN0IGxlPW5lLnNwbGl0KC9zdG9yZWQgcHJvY2Vz''@;'; put 'put ''cyBub3QgZm91bmQ6IC9pKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9bGVbMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sX2U9bWUuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pz''@;'; put 'put ''LmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZvciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjpgU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAke21lfWA7cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxfZSwiIil9fX1jYXRjaHt9dHJ5e2lm''@;'; put 'put ''KCFuZT8ubWF0Y2goLz4+d2Vib3V0QkVHSU48PC8pJiZuZT8ubWF0Y2goL1N0b3JlZCBQcm9jZXNzIEVycm9yL2kpJiZuZT8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpKXtjb25zdCBsZT1uZS5zcGxpdCgiPGgyPlNBUyBMb2c8L2gyPiIpO2lmKGxlLmxl''@;'; put 'put ''bmd0aD4xKXtjb25zdCBtZT1sZVsxXS5zcGxpdCgiPHByZT4iKVsxXS5zcGxpdCgiPC9wcmU+IilbMF07cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKDUwMCwiVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4iLG1lKX19fWNhdGNoe31yZXR1cm4gbnVsbH19LDc5NTpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTCxLLFUsVyl7dm9pZCAwPT09VyYmKFc9VSk7dmFyIFk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihLLFUpOyghWXx8KCJn''@;'; put 'put ''ZXQiaW4gWT8hSy5fX2VzTW9kdWxlOlkud3JpdGFibGV8fFkuY29uZmlndXJhYmxlKSkmJihZPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLW1VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLFcsWSl9OmZ1bmN0aW9uKEwsSyxVLFcpe3ZvaWQgMD09PVcmJihXPVUp''@;'; put 'put ''LExbV109S1tVXX0pLF89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOkt9KX06ZnVuY3Rpb24oTCxLKXtMLmRlZmF1bHQ9S30pLGc9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEwpe2lmKEwmJkwuX19lc01vZHVsZSlyZXR1cm4gTDt2YXIgSz17fTtpZihudWxsIT1MKWZvcih2YXIgVSBpbiBMKSJkZWZhdWx0IiE9PVUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLFUpJiZJKEssTCxV''@;'; put 'put ''KTtyZXR1cm4gXyhLLEwpLEt9LEI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBu''@;'; put 'put ''ZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9xKGxlLnZhbHVlKTpmdW5jdGlvbiBZKHEpe3JldHVybiBxIGluc3RhbmNlb2YgVT9xOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShxKX0pfShsZS52YWx1ZSkudGhlbihKLG5l''@;'; put 'put ''KX1pZSgoVz1XLmFwcGx5KEwsS3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhczlSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCB3PXkoODIyNCksUD1nKHkoNzg1NykpLEY9eSg5Nzc4KSxPPXkoNDU4OCksej15''@;'; put 'put ''KDEzOTUpO1guU2FzOVJlcXVlc3RDbGllbnQ9Y2xhc3MgTiBleHRlbmRzIE8uUmVxdWVzdENsaWVudHtjb25zdHJ1Y3RvcihLLFUpe3N1cGVyKEssVSksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLm1heFJlZGlyZWN0cz0wLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1''@;'; put 'put ''cz1XPT5XPj0yMDAmJlc8MzAzLHcud3JhcHBlciYmKCgwLHcud3JhcHBlcikodGhpcy5odHRwQ2xpZW50KSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBQLkNvb2tpZUphcil9bG9naW4oSyxVLFcpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dCBZPWAvVXNlciBGb2xkZXJzLyR7S30vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmA7dGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphciYmKHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLHlpZWxkIHRoaXMuZ2V0KGAke1d9P19wcm9ncmFtPSR7WX0mX3Vz''@;'; put 'put ''ZXJuYW1lPSR7S30mX3Bhc3N3b3JkPSR7VX1gLHZvaWQgMCwidGV4dC9wbGFpbiIpKX0pfWdldChLLFUsVz0iYXBwbGljYXRpb24vanNvbiIsWT17fSxxPSExKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj17aGVhZGVyczpPYmplY3QuYXNzaWduKE9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKFUsVykpLFkpLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1XPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09VyYmKEoudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBD''@;'; put 'put ''bGllbnQuZ2V0KEssSikudGhlbihuZT0+MzAyPT09bmUuc3RhdHVzP3RoaXMuZ2V0KG5lLmhlYWRlcnMubG9jYXRpb24sVSxXKTooKDAsTy50aHJvd0lmRXJyb3IpKG5lKSx0aGlzLnBhcnNlUmVzcG9uc2UobmUpKSkuY2F0Y2gobmU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e2lmKG5lIGluc3RhbmNlb2Ygei5Kb2JFeGVjdXRpb25FcnJvcil0aHJvdyBuZTtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihuZSwoKT0+dGhpcy5nZXQoSyxVLFcsWSkuY2F0Y2goaWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkoaWUsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBo''@;'; put 'put ''YW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSkscSkuY2F0Y2goaWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkoaWUsIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX0pfSkpfSl9cG9zdChLLFUsVyxZPSJhcHBsaWNhdGlvbi9qc29uIixxPXt9KXtyZXR1cm4gQih0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhXLFkpKSxxKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoSyxVLHtoZWFkZXJzOmVlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKEo9PkIodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiAzMDI9PT1KLnN0YXR1cz95aWVsZCB0aGlzLmdldChKLmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLFkscSk6KCgwLE8udGhyb3dJZkVycm9yKShKKSx0aGlzLnBhcnNlUmVzcG9uc2UoSikpfSkpLmNhdGNoKEo9PkIodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKEosKCk9PnRoaXMucG9zdChLLFUsVyxZLHEpKX0pKX0pfX19LDM2MDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''U0FTSlNfTE9HU19TRVBBUkFUT1I9WC5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IEk9eSg0NTg4KTtYLlNhc2pzUmVxdWVzdENsaWVudD1jbGFzcyBfIGV4dGVuZHMgSS5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldEhlYWRl''@;'; put 'put ''cnM9KEIsdyk9Pnt2YXIgUDtjb25zdCBGPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09dyYmKEZbIkNvbnRlbnQtVHlwZSJdPXcpLEYuQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PXc/dzoiKi8qIiwhQiYmdHlwZW9mIHdpbmRvdzwidSImJihCPW51''@;'; put 'put ''bGwhPT0oUD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PVA/UDp2b2lkIDApLEImJihGLkF1dGhvcml6YXRpb249YEJlYXJlciAke0J9YCksRn19cGFyc2VSZXNwb25zZShCKXtjb25zdCB3PUI/LmhlYWRlcnM/Qi5oZWFkZXJzLmV0YWc6IiI7bGV0IEYs''@;'; put 'put ''Tyx6LFA9e307dHJ5e1A9InN0cmluZyI9PXR5cGVvZiBCLmRhdGE/SlNPTi5wYXJzZShCLmRhdGEpOkIuZGF0YX1jYXRjaHtpZihCLmRhdGEuaW5jbHVkZXMoWC5TQVNKU19MT0dTX1NFUEFSQVRPUikpe2NvbnN0e2RhdGE6S309QixVPUsuc3BsaXQoWC5TQVNKU19MT0dTX1NFUEFSQVRPUik7''@;'; put 'put ''Rj1VLnNwbGljZSgwLDEpWzBdLHZvaWQgMCE9PUYmJihQPUYpO2NvbnN0IFc9VS5zcGxpY2UoMCxVLmxlbmd0aC0xKSxZPW5ldyBSZWdFeHAoYCR7WC5TQVNKU19MT0dTX1NFUEFSQVRPUn0kYCkscT1VWzBdO3EmJihZLnRlc3QoSyk/Vy5sZW5ndGg+MSYmVy5wdXNoKHEpOno9cSksTz1XLmpv''@;'; put 'put ''aW4oWC5TQVNKU19MT0dTX1NFUEFSQVRPUil9ZWxzZSBQPUIuZGF0YX1jb25zdCBOPXtyZXN1bHQ6UCxsb2c6T3x8IiIsZXRhZzp3LHN0YXR1czpCLnN0YXR1c307cmV0dXJuIHomJihOLnByaW50T3V0cHV0PXopLE59fSxYLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJTQVNKU19MT0dTX1NFUEFS''@;'; put 'put ''QVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NjY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTc2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pfSw0OTc1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pfSw0NzgyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQxNjg6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjoo''@;'; put 'put ''dWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzODQwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6KHVlLFgpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgSSxfO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxvZ2luTWVjaGFuaXNtPVguU0FTanNDb25maWc9dm9pZCAwLFguU0FTanNDb25maWc9Y2xhc3MgeXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIi''@;'; put 'put ''LHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5p''@;'; put 'put ''c209SS5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH19LChfPUk9WC5Mb2dpbk1lY2hhbmlzbXx8KFguTG9naW5NZWNoYW5pc209e30pKS5EZWZhdWx0PSJEZWZhdWx0IixfLlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw2MDM4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''STtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXNzaW9uU3RhdGU9dm9pZCAwLChJPVguU2Vzc2lvblN0YXRlfHwoWC5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsSS5SdW5uaW5nPSJydW5uaW5nIixJLlBlbmRpbmc9''@;'; put 'put ''InBlbmRpbmciLEkuSWRsZT0iaWRsZSIsSS5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLEkuTm9TdGF0ZT0iIixJLkZhaWxlZD0iZmFpbGVkIixJLkVycm9yPSJlcnJvciJ9LDk0OTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KX0sODY1MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxMjQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LkF1dGhvcml6ZUVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnKXtzdXBlcihfKSx0aGlzLm1lc3NhZ2U9Xyx0aGlzLmNvbmZpcm1Vcmw9Zyx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3Rv''@;'; put 'put ''dHlwZSl9fVguQXV0aG9yaXplRXJyb3I9eX0sOTQ2NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ2VydGlmaWNhdGVFcnJvcj12b2lkIDA7Y2xhc3MgSSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGcp''@;'; put 'put ''e3N1cGVyKGAke2d9XG5QbGVhc2UgdmlzaXQgdGhlIGxpbmsgYmVsb3cgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBpc3N1ZTpcbi0gaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NFxuYCksdGhpcy5uYW1lPSJD''@;'; put 'put ''ZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxJLnByb3RvdHlwZSl9fVguQ2VydGlmaWNhdGVFcnJvcj1JfSw1MjY3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db21wdXRl''@;'; put 'put ''Sm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLGcpe3N1cGVyKCJFcnJvcjogSm9iIGV4ZWN1dGlvbiBmYWlsZWQiKSx0aGlzLmpvYj1fLHRoaXMubG9nPWcsdGhpcy5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVj''@;'; put 'put ''dC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9eX0sOTIzMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRXJyb3JSZXNwb25zZT12b2lkIDAs''@;'; put 'put ''WC5FcnJvclJlc3BvbnNlPWNsYXNzIHl7Y29uc3RydWN0b3IoXyxnLEIpe2xldCB3PWc7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXRyeXt3PUpTT04ucGFyc2UoZyl9Y2F0Y2h7Qj1nLHc9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTpfLGRldGFpbHM6dyxyYXc6Qn19fX0sNTEwOToodWUsWCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIiks''@;'; put 'put ''dGhpcy5uYW1lPSJJbnRlcm5hbFNlcnZlckVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSW50ZXJuYWxTZXJ2ZXJFcnJvcj15fSw1NTE4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksWC5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmciKSx0aGlzLm5hbWU9IkludmFsaWRKc29uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHku''@;'; put 'put ''cHJvdG90eXBlKX19WC5JbnZhbGlkSnNvbkVycm9yPXl9LDEwMDU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkludmFsaWRTQVNqc0NzcmZFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7c3VwZXIoIkF1dGggZXJyb3I6IEludmFsaWQgQ1NSRiB0b2tlbiEiKSx0aGlzLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkludmFsaWRTQVNqc0NzcmZFcnJvcj15fSw4NTMxOih1ZSxY''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Kb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyxCKXtzdXBlcihgRXJyb3IgQ29kZSAke199OiAke2d9YCks''@;'; put 'put ''dGhpcy5lcnJvckNvZGU9Xyx0aGlzLmVycm9yTWVzc2FnZT1nLHRoaXMucmVzdWx0PUIsdGhpcy5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkpvYkV4ZWN1dGlvbkVycm9yPXl9LDkwNzk6KHVlLFgpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkpvYlN0YXRlUG9sbEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnKXtzdXBlcihgRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdGUgZm9yIGpv''@;'; put 'put ''YiAke199OiAke2cubWVzc2FnZXx8Z31gKSx0aGlzLm9yaWdpbmFsRXJyb3I9Zyx0aGlzLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSm9iU3RhdGVQb2xsRXJyb3I9eX0sMzA5NjoodWUsWCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSnNvblBhcnNlQXJyYXlFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIiksdGhp''@;'; put 'put ''cy5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSnNvblBhcnNlQXJyYXlFcnJvcj15fSw2NzQzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5Mb2dpblJlcXVpcmVkRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgQXV0aCBlcnJvcjogJHtfP0pTT04uc3RyaW5naWZ5KF8sbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0aGlzIHJlc291cmNl''@;'; put 'put ''In1gKSx0aGlzLm5hbWU9IkxvZ2luUmVxdWlyZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkxvZ2luUmVxdWlyZWRFcnJvcj15fSw3ODY0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksWC5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnLEIpe3N1cGVyKGBDb3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAke199IHdoaWxzdCBjaGVja2luZyBzdGF0''@;'; put 'put ''ZTogJHtnfWApLHRoaXMuc2VydmVyUmVzcG9uc2VTdGF0dXM9Xyx0aGlzLnNlc3Npb25TdGF0ZVVybD1nLHRoaXMubG9nVXJsPUIsdGhpcy5uYW1lPSJOb1Nlc3Npb25TdGF0dXMiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Ob1Nlc3Npb25TdGF0ZUVycm9y''@;'; put 'put ''PXl9LDk1Nzc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLk5vdEZvdW5kRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgRXJyb3I6IFJlc291cmNlIGF0''@;'; put 'put ''ICR7X30gd2FzIG5vdCBmb3VuZGApLHRoaXMudXJsPV8sdGhpcy5uYW1lPSJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguTm90Rm91bmRFcnJvcj15fSw5Mjc5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPXZvaWQgMDtjb25zdCBJPXkoNjc5OSk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEIsdyxQKXtsZXQgRj1gUm9vdCBmb2xkZXIgJHtCfSB3YXMgbm90IGZvdW5kLlxuUGxl''@;'; put 'put ''YXNlIGNoZWNrICR7d30vU0FTRHJpdmUuXG5JZiB0aGUgZm9sZGVyIERPRVMgZXhpc3QgdGhlbiBpdCBpcyBsaWtlbHkgYSBwZXJtaXNzaW9uIHByb2JsZW0uXG5gO2lmKFApe2xldCB6PSgwLEkuZGVjb2RlVG9rZW4pKFApLnNjb3BlO3o9ei5tYXAoTj0+IiogIitOKSxGKz0iWW91ciBhY2Nl''@;'; put 'put ''c3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4iK3ouam9pbigiXG4iKX1zdXBlcihGKSx0aGlzLm5hbWU9IlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fVguUm9vdEZvbGRlck5vdEZvdW5kRXJy''@;'; put 'put ''b3I9X30sOTUyNjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTOUF1dGhFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRoZSBjcmVkZW50aWFscyB5''@;'; put 'put ''b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9mIGNyZWRlbnRpYWxzLiIpLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5TQVM5QXV0aEVycm9y''@;'; put 'put ''PXl9LDg4NzU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLldlYm91dFJlc3BvbnNlRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgRXJyb3I6IGVycm9y''@;'; put 'put ''IHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAke199YCksdGhpcy51cmw9Xyx0aGlzLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5XZWJvdXRSZXNwb25zZUVycm9yPXl9LDEzOTU6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19l''@;'; put 'put ''c01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxf''@;'; put 'put ''PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxfKHkoMTI0KSxYKSxfKHkoOTQ2NSksWCksXyh5KDUyNjcpLFgpLF8oeSg5MjMyKSxYKSxfKHkoNTEwOSksWCksXyh5KDU1MTgpLFgpLF8oeSg4NTMxKSxYKSxfKHkoOTA3OSksWCksXyh5KDMwOTYpLFgpLF8oeSg2NzQzKSxYKSxfKHkoNzg2NCksWCksXyh5KDk1NzcpLFgpLF8o''@;'; put 'put ''eSg5Mjc5KSxYKSxfKHkoODg3NSksWCl9LDEyMzA6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5j''@;'; put 'put ''dGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcs''@;'; put 'put ''dyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoNDcwKSxYKSxfKHkoNDY2NiksWCksXyh5KDQ5NzUpLFgpLF8oeSg1NzY2KSxYKSxfKHkoMjE1KSxYKSxfKHkoNDc4MiksWCksXyh5KDQxNjgpLFgpLF8oeSg4NTE2KSxYKSxfKHkoMzg0MCks''@;'; put 'put ''WCksXyh5KDU4NDEpLFgpLF8oeSgxNDI4KSxYKSxfKHkoNjAzOCksWCksXyh5KDk0OTMpLFgpLF8oeSgzMTUzKSxYKSxfKHkoODY1MCksWCksXyh5KDYxNzcpLFgpLF8oeSgxMzk1KSxYKX0sMzMwMjpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0''@;'; put 'put ''ZXJ8fGZ1bmN0aW9uKF8sZyxCLHcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24g''@;'; put 'put ''TChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseShfLGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAsWC5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbiBJKF8sZyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBCPXt9O2lmKGc/''@;'; put 'put ''Lmxlbmd0aCl7Y29uc3Qgdz1nLnJlZHVjZSgoUCxGKT0+KFBbRl09X1tGXSxQKSx7fSk7Qj1PYmplY3QuYXNzaWduKHtyZXN1bHQ6Xy5yZXN1bHR9LHcpfWVsc2UgQj1fLnJlc3VsdDtyZXR1cm4gQn0pfX0sNzkyMjpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhp''@;'; put 'put ''cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8sZyxCLHcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19''@;'; put 'put ''ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseShfLGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5hc3luY0ZvckVhY2g9dm9pZCAwLFguYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIEkoXyxnKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Zm9yKGxldCBCPTA7QjxfLmxlbmd0aDtCKyspeWllbGQgZyhfW0Jd''@;'; put 'put ''LEIsXyl9KX19LDM3OTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxYLmNvbXBhcmVUaW1lc3RhbXBzPShJLF8pPT5fLnRpbWVzdGFtcC5nZXRUaW1lKCktSS50''@;'; put 'put ''aW1lc3RhbXAuZ2V0VGltZSgpfSwyNDAyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNGb3JtYXRzVGFibGU9WC5jb252ZXJ0VG9DU1Y9dm9pZCAwO2NvbnN0IF89eSg2NDY3''@;'; put 'put ''KSxnPXkoOTc3OCk7WC5jb252ZXJ0VG9DU1Y9KEYsTyk9Pnt2YXIgejtpZighRltPXSl7Y29uc3QgZWU9KDAsZy5wcmVmaXhNZXNzYWdlKSgiTm8gdGFibGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGlsZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dGhyb3ci''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGVlP25ldyBFcnJvcihlZSk6ZWV9Y29uc3QgTj1GW09dO2lmKCFBcnJheS5pc0FycmF5KE4pKXJldHVybiIiO2xldCBVLEw9bnVsbD09PSh6PUZbYCQke099YF0pfHx2b2lkIDA9PT16P3ZvaWQgMDp6LmZvcm1hdHMsSz1bXSxXPSExO0wmJihLPU9iamVjdC5rZXlz''@;'; put 'put ''KEwpLm1hcChlZT0+YCR7ZWV9OiR7TFtlZV19YCkpO2NvbnN0IFk9T2JqZWN0LmtleXMoTlswXSk7cmV0dXJuIFkuZm9yRWFjaChlZT0+e2lmKCFMfHwhT2JqZWN0LmtleXMoTCkuaW5jbHVkZXMoZWUpKXtsZXQgSj0hMSxuZT0hMTtpZihOLmZvckVhY2goaWU9PntudWxsPT09aWVbZWVdfHwi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGllW2VlXT9KPSEwOiJzdHJpbmciPT10eXBlb2YgaWVbZWVdJiYoMCxfLmlzU3BlY2lhbE1pc3NpbmcpKGllW2VlXSkmJihuZT0hMCl9KSxKJiZuZSlLLnB1c2goYCR7ZWV9OmJlc3QuYCksTHx8KEw9e30pLExbZWVdPSJiZXN0LiI7ZWxzZXtsZXQgaWU9bnVsbCxs''@;'; put 'put ''ZT0hMSxtZT0tMTtjb25zdCBfZT1OLm1hcCgoVGUsU2UpPT57aWYoVGVbZWVdfHwiIj09PVRlW2VlXSl7bGV0IGplO3JldHVybiBpZT9sZXx8KGxlPSgiIj09PVRlW2VlXXx8InN0cmluZyI9PXR5cGVvZiBUZVtlZV0/ImNoYXJzIjoibnVtYmVyIikhPT1pZSxtZT1sZT9TZSsxOi0xKTppZT0i''@;'; put 'put ''Ij09PVRlW2VlXXx8InN0cmluZyI9PXR5cGVvZiBUZVtlZV0/ImNoYXJzIjoibnVtYmVyIiwic3RyaW5nIj09dHlwZW9mIFRlW2VlXSYmKGplPVAoVGVbZWVdKSksamV9fSkuc29ydCgoVGUsU2UpPT5TZS1UZSlbMF07X2UmJl9lPjMyNzY1JiYoVz0hMCksbGUmJkkuZXJyb3IoYFJvdyAoJHtt''@;'; put 'put ''ZX0pLCBDb2x1bW4gKCR7ZWV9KSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SYCksSy5wdXNoKGAke2VlfTokeyJjaGFycyI9PT1pZT8iJGNoYXIiOiIifSR7X2V8fCgiY2hhcnMiPT09aWU/IjEiOiJiZXN0Iil9LmApfX19KSxMJiYoSz1LLnNvcnQoKGVlLEopPT5ZLmluZGV4T2YoZWUucmVwbGFj''@;'; put 'put ''ZSgvOi4qLywiIikpLVkuaW5kZXhPZihKLnJlcGxhY2UoLzouKi8sIiIpKSkpLFc/IkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIjooVT1OLm1hcChlZT0+T2JqZWN0LmtleXMoZWUpLm1hcCgobmUsaWUpPT57bGV0IGxlO2NvbnN0IG1lPWVlW25lXTtpZigibnVtYmVyIj09dHlwZW9mIG1l''@;'; put 'put ''KXJldHVybiBtZTtpZihsZT1udWxsPT09bWU/IiI6bWUsTCYmImJlc3QuIj09PUxbbmVdKXtpZihsZSYmISgwLF8uaXNTcGVjaWFsTWlzc2luZykobGUpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20g''@;'; put 'put ''J0EnIHRvICdaJywgJ18nLCAnLlthLXpdJywgJy5fJyIpO3JldHVybmAke2xlLmluY2x1ZGVzKCIuIik/IiI6Ii4ifSR7bGUudG9Mb3dlckNhc2UoKX1gfXJldHVybiBsZT1sZS5yZXBsYWNlKC8iL2csJyIiJyksbGU9YCIke2xlfSJgLGxlLnN1YnN0cmluZygxLGxlLmxlbmd0aC0xKS5zZWFy''@;'; put 'put ''Y2goLyhcdHxcbnxccnwsfFwnfFwiKS9nbSk8MCYmKGxlPWxlLnN1YnN0cmluZygxLGxlLmxlbmd0aC0xKSksbGU9bGUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSwiIj09PWxlJiZLW2llXS5pbmNsdWRlcygiYmVzdCIpJiYobGU9Ii4iKSxsZX0pLmpvaW4oIiwiKSksSy5qb2luKCIsIikucmVw''@;'; put 'put ''bGFjZSgvLC9nLCIgIikrIlxyXG4iK1Uuam9pbigiXHJcbiIpKX0sWC5pc0Zvcm1hdHNUYWJsZT1GPT4vXlwkLiovLnRlc3QoRik7Y29uc3QgUD1GPT57bGV0IE89Ri5sZW5ndGg7Zm9yKGxldCB6PUYubGVuZ3RoLTE7ej49MDt6LS0pe2NvbnN0IE49Ri5jaGFyQ29kZUF0KHopO04+MTI3JiZO''@;'; put 'put ''PD0yMDQ3P08rKzpOPjIwNDcmJk48PTY1NTM1JiYoTys9MiksTj49NTYzMjAmJk48PTU3MzQzJiZ6LS19cmV0dXJuIE99fSw2MTE2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihCKXtyZXR1cm4gQiYmQi5f''@;'; put 'put ''X2VzTW9kdWxlP0I6e2RlZmF1bHQ6Qn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNyZWF0ZUF4aW9zSW5zdGFuY2U9dm9pZCAwO2NvbnN0IF89SSh5KDcyMTgpKTtYLmNyZWF0ZUF4aW9zSW5zdGFuY2U9KEIsdyk9Pl8uZGVmYXVsdC5jcmVh''@;'; put 'put ''dGUoe2Jhc2VVUkw6QixodHRwc0FnZW50Ond9KX0sOTgyNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVsYXk9dm9pZCAwLFguZGVsYXk9ST0+bmV3IFByb21pc2UoXz0+c2V0VGltZW91dChfLEkpKX0s''@;'; put 'put ''OTkwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5u''@;'; put 'put ''ZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtV''@;'; put 'put ''KEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmZldGNoTG9nPVguZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7Y29uc3QgQj15KDk3NzgpO1gu''@;'; put 'put ''ZmV0Y2hMb2dCeUNodW5rcz0oRixPLHosTik9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkKDAsWC5mZXRjaExvZykoRixPLHosMCxOKX0pLFguZmV0Y2hMb2c9KEYsTyx6LE4sTCk9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29u''@;'; put 'put ''c3QgSz1JLmxvZ2dlcnx8XztsZXQgVT0iIjtjb25zdCBXPUw8MWU0P0w6MWU0O2Rve0suaW5mbyhgRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICR7TisxfSB0byAke04rV30gb2YgJHtMfS5gKTtjb25zdCBZPXlpZWxkIEYuZ2V0KGAke3p9P3N0YXJ0PSR7Tn0mbGltaXQ9JHtXfWAsTyku''@;'; put 'put ''dGhlbihlZT0+ZWUucmVzdWx0KS5jYXRjaChlZT0+e3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShlZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsb2cuICIpfSk7aWYoMD09PVkuaXRlbXMubGVuZ3RoKWJyZWFrO1UrPVkuaXRlbXMubWFwKGVlPT5lZS5saW5lKS5qb2luKCJcbiIpLE4rPVd9d2hp''@;'; put 'put ''bGUoTjxMKTtyZXR1cm4gVX0pfSw3MTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZm9ybWF0RGF0YUZvclJlcXVlc3Q9dm9pZCAwO2NvbnN0IEk9eSgyNDAyKSxfPXkoNDc5OSk7WC5mb3JtYXREYXRh''@;'; put 'put ''Rm9yUmVxdWVzdD1CPT57Y29uc3Qgdz1bXTtsZXQgUD0wO2NvbnN0IEY9e307Zm9yKGNvbnN0IE8gaW4gQil7aWYoKDAsSS5pc0Zvcm1hdHNUYWJsZSkoTykmJk9iamVjdC5rZXlzKEIpLmluY2x1ZGVzKE8ucmVwbGFjZSgvXlwkLywiIikpKWNvbnRpbnVlO1ArKywoMCxJLmlzRm9ybWF0c1Rh''@;'; put 'put ''YmxlKShPKXx8dy5wdXNoKE8pO2NvbnN0IHo9KDAsSS5jb252ZXJ0VG9DU1YpKEIsTyk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PXopdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJz''@;'; put 'put ''LiIpO2lmKHoubGVuZ3RoPjE2ZTMpe2NvbnN0IE49KDAsXy5zcGxpdENodW5rcykoeik7Rltgc2FzanMke1B9ZGF0YTBgXT1OLmxlbmd0aCxOLmZvckVhY2goKEwsSyk9PntGW2BzYXNqcyR7UH1kYXRhJHtLKzF9YF09TH0pfWVsc2UgRltgc2FzanMke1B9ZGF0YWBdPXp9cmV0dXJuIEYuc2Fz''@;'; put 'put ''anNfdGFibGVzPXcuam9pbigiICIpLEZ9fSw4NDU4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEZvcm1EYXRhPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz1JKHkoNjIzMCkpO1guZ2V0Rm9ybURhdGE9KCk9PigwLF8uaXNOb2RlKSgpP25ldyBnLmRlZmF1bHQ6bmV3IEZvcm1EYXRhfSwzMjYwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRVc2VyTGFuZ3VhZ2U9dm9pZCAwLFguZ2V0VXNlckxhbmd1YWdlPSgpPT53aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZX0sMTg4NDoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRWYWxpZEpzb249dm9pZCAwO2NvbnN0IEk9eSgxMzk1KTtYLmdldFZhbGlkSnNvbj1nPT57dHJ5e2lmKG51bGw9PWcpdGhyb3cgbmV3IEkuSW52YWxpZEpzb25F''@;'; put 'put ''cnJvcjtpZihBcnJheS5pc0FycmF5KGcpKXRocm93IG5ldyBJLkpzb25QYXJzZUFycmF5RXJyb3I7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnP2c6IiI9PT1nP3t9OkpTT04ucGFyc2UoZyl9Y2F0Y2goQil7dGhyb3cgQiBpbnN0YW5jZW9mIEkuSnNvblBhcnNlQXJyYXlFcnJvcj9COm5ldyBJ''@;'; put 'put ''LkludmFsaWRKc29uRXJyb3J9fX0sNTkyODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3Bl''@;'; put 'put ''cnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9u''@;'; put 'put ''KGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgzMzAyKSxYKSxfKHkoNzkyMiksWCksXyh5KDM3OTMpLFgpLF8oeSgyNDAyKSxYKSxfKHkoNjExNiksWCksXyh5KDk4MjUpLFgpLF8oeSg5OTApLFgpLF8oeSgxODg0KSxYKSxfKHkoNDI0MyksWCks''@;'; put 'put ''Xyh5KDI1NyksWCksXyh5KDIpLFgpLF8oeSgyNjE1KSxYKSxfKHkoMjkyMCksWCksXyh5KDI0MjIpLFgpLF8oeSgzMSksWCksXyh5KDY1MTUpLFgpLF8oeSg2NDE2KSxYKSxfKHkoMjgxMyksWCksXyh5KDk4OTYpLFgpLF8oeSg0Nzk5KSxYKSxfKHkoNDUxNiksWCksXyh5KDg0NTgpLFgpLF8o''@;'; put 'put ''eSgzMjYwKSxYKX0sNDI0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTm9kZT12b2lkIDAsWC5pc05vZGU9KCk9PnR5cGVvZiBJPCJ1IiYmbnVsbCE9SS52ZXJzaW9ucyYm''@;'; put 'put ''bnVsbCE9SS52ZXJzaW9ucy5ub2RlfSwyNTc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxYLmlzUmVsYXRpdmVQYXRoPUk9PiEhSSYmIUkuc3RhcnRzV2l0aCgiLyIp''@;'; put 'put ''fSwyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1VyaT12b2lkIDAsWC5pc1VyaT1JPT4vXlwvZm9sZGVyc1wvZm9sZGVyc1wvLy50ZXN0KEkpfSwyNjE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1VybD12b2lkIDAsWC5pc1VybD1JPT57Y29uc3QgXz1bImh0dHA6IiwiaHR0cHM6Il07dHJ5e2NvbnN0IGc9bmV3IFVSTChJKTtpZighXy5pbmNsdWRlcyhnLnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHty''@;'; put 'put ''ZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24odWUsWCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4''@;'; put 'put ''dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShL''@;'; put 'put ''KX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5vcGVuTG9naW5Qcm9tcHQ9dm9pZCAwO3ZhciBJPWZ1bmN0aW9uKEYpe3JldHVybiBGLnN0eWxl''@;'; put 'put ''cz0ic2FzanNBZGFwdGVyU3R5bGVzIixGLm92ZXJsYXk9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0QkciLEYuZGlhbG9nPSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdCIsRn0oSXx8e30pO2NvbnN0IF89InNhc2pzLWFkYXB0ZXIiLGc9e3BvcFVwOmAke199cG9wVXBgLHBvcFVwQkc6YCR7X31w''@;'; put 'put ''b3BVcEJHYH07WC5vcGVuTG9naW5Qcm9tcHQ9KCk9Pm5ldyBQcm9taXNlKEY9Pnkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO08uaWQ9SS5zdHlsZXMsTy5pbm5lclRleHQ9UDtjb25zdCB6PWRvY3VtZW50''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ouaWQ9SS5vdmVybGF5LHouY2xhc3NMaXN0LmFkZChnLnBvcFVwQkcpO2NvbnN0IE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ti5pZD1JLmRpYWxvZyxOLmNsYXNzTGlzdC5hZGQoZy5wb3BVcCk7Y29uc3QgTD1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJoMSIpO0wuaW5uZXJUZXh0PSJTZXNzaW9uIEV4cGlyZWQhIixOLmFwcGVuZENoaWxkKEwpO2NvbnN0IEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7VS5pbm5lclRleHQ9IllvdSBuZWVkIHRvIHJlbG9naW4s''@;'; put 'put ''IGNsaWNrIE9LIHRvIGxvZ2luLiIsSy5hcHBlbmRDaGlsZChVKSxOLmFwcGVuZENoaWxkKEspO2NvbnN0IFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc0xpc3QuYWRkKCJjYW5jZWwiKSxXLmlubmVyVGV4dD0iQ2FuY2VsIixXLm9uY2xpY2s9KCk9Pnt3KCksRigh''@;'; put 'put ''MSl9LE4uYXBwZW5kQ2hpbGQoVyk7Y29uc3QgWT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtZLmNsYXNzTGlzdC5hZGQoImNvbmZpcm0iKSxZLmlubmVyVGV4dD0iT2siLFkub25jbGljaz0oKT0+e3coKSxGKCEwKX0sTi5hcHBlbmRDaGlsZChZKSxkb2N1bWVudC5ib2R5LnN0''@;'; put 'put ''eWxlLm92ZXJmbG93PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh6KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE4pfSkpO2NvbnN0IHc9KCk9PntPYmplY3QudmFsdWVzKEkpLmZvckVhY2goRj0+e3ZhciBPO2NvbnN0''@;'; put 'put ''IHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRik7bnVsbD09PShPPXo/LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1PfHxPLnJlbW92ZUNoaWxkKHopfSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iYXV0byJ9LFA9YFxuLiR7Zy5wb3BVcEJHfSAsXG4uJHtnLnBvcFVwfSB7XG4gIHot''@;'; put 'put ''aW5kZXg6IDEwMDAwO1xufVxuLiR7Zy5wb3BVcH0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtc''@;'; put 'put ''biAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1BUIFNhbnMnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB6LWluZGV4OiA5OTk7XG4gIG92ZXJm''@;'; put 'put ''bG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUw''@;'; put 'put ''JSwgLTUwJSk7XG59XG4uJHtnLnBvcFVwfSA+IGgxIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDVweDtcbiAgbWluLWhlaWdodDogNDBweDtc''@;'; put 'put ''biAgZm9udC1zaXplOiAxLjJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBi''@;'; put 'put ''b3JkZXItY29sb3I6IGJsYWNrO1xufVxuLiR7Zy5wb3BVcH0gPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLTEwOHB4KTtcbiAgbWFyZ2luOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gt''@;'; put 'put ''c2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICNjY2M7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNv''@;'; put 'put ''bGlkIG5vbmU7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLiR7Zy5wb3BVcH0gPiBkaXYgPiBzcGFuIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6''@;'; put 'put ''IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDEwOHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4uJHtnLnBvcFVwfSAuY2FuY2VsIHtcbiAgZmxvYXQ6IGxl''@;'; put 'put ''ZnQ7XG59XG4uJHtnLnBvcFVwfSAuY29uZmlybSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi4ke2cucG9wVXB9ID4gYnV0dG9uIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1i''@;'; put 'put ''b3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweDtcbiAgd2lkdGg6IDUwJTtcbiAgYm9yZGVyOiAxcHggbm9uZSAjY2NjO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3Jv''@;'; put 'put ''dW5kOiByZ2JhKDEsIDEsIDEsIDAuMik7XG59XG4uJHtnLnBvcFVwfSA+IGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi4ke2cucG9wVXBCR30ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4g''@;'; put 'put ''IGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3BhY2l0eTogMC45NTtcbiAgei1pbmRleDogNTA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudCgjMDM3OGNkLCAjMDEyMDM2KTtcbn1c''@;'; put 'put ''bmB9LDI5MjA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLm5lZWRzUmV0cnk9dm9pZCAwLFgubmVlZHNSZXRyeT1JPT4hIUkmJihJLmluY2x1ZGVzKCciZXJyb3JDb2RlIjo0MDMnKSYmSS5pbmNsdWRlcygi''@;'; put 'put ''X2NzcmYiKSYmSS5pbmNsdWRlcygiWC1DU1JGLVRPS0VOIil8fEkuaW5jbHVkZXMoJyJzdGF0dXMiOjQwMycpJiZJLmluY2x1ZGVzKCciZXJyb3IiOiJGb3JiaWRkZW4iJyl8fEkuaW5jbHVkZXMoJyJzdGF0dXMiOjQ0OScpJiZJLmluY2x1ZGVzKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzLCBy''@;'; put 'put ''ZXRyeSBvcmlnaW5hbCByZXF1ZXN0IikpfSwyNDIyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZUdlbmVyYXRlZENvZGU9dm9pZCAwLFgucGFyc2VHZW5lcmF0ZWRDb2RlPUk9Pkkuc3BsaXQoIlxu''@;'; put 'put ''IikuZmlsdGVyKHc9PncudHJpbSgpLnN0YXJ0c1dpdGgoIk1QUklOVCIpKS5qb2luKCJcclxuIil9LDMxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTYXNWaXlhTG9n''@;'; put 'put ''PXZvaWQgMCxYLnBhcnNlU2FzVml5YUxvZz1nPT57bGV0IEI7dHJ5e0I9Zy5pdGVtcz9nLml0ZW1zLm1hcCh3PT53LmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZyl9Y2F0Y2godyl7SS5lcnJvcigiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIGxvZyBy''@;'; put 'put ''ZXNwb25zZSIsdyksQj1nfXJldHVybiBCfX0sNjUxNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTb3VyY2VDb2RlPXZvaWQgMCxYLnBhcnNlU291cmNlQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZp''@;'; put 'put ''bHRlcihCPT5CLnRyaW0oKS5zdWJzdHJpbmcoMCwxMCkudHJpbVN0YXJ0KCkubWF0Y2goL15cZC8pKS5qb2luKCJcclxuIil9LDY0MTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsdyxQLEYpe3JldHVybiBuZXco''@;'; put 'put ''UHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKHosTil7ZnVuY3Rpb24gTChXKXt0cnl7VShGLm5leHQoVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIEsoVyl7dHJ5e1UoRi50aHJvdyhXKSl9Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gVShXKXtXLmRvbmU/eihXLnZhbHVlKTpmdW5jdGlvbiBP''@;'; put 'put ''KHope3JldHVybiB6IGluc3RhbmNlb2YgUD96Om5ldyBQKGZ1bmN0aW9uKE4pe04oeil9KX0oVy52YWx1ZSkudGhlbihMLEspfVUoKEY9Ri5hcHBseShCLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVNh''@;'; put 'put ''c1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDtjb25zdCBfPXkoNTkyOCk7WC5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPShCLHcsUCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgRj1CLnNwbGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6''@;'; put 'put ''IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZhczsiIHNyYz0vKVsxXSxPPUY/Ri5zcGxpdCgvIj48XC9pZnJhbWU+fD48XC9pZnJhbWU+LylbMF06bnVsbDtpZighTyl0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''YWJsZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm4gdy5nZXQoUCtPLHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oej0+KDAsXy5nZXRWYWxpZEpzb24pKHoucmVzdWx0KSl9KX0sMjgxMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO2NvbnN0IF89eSgxMzk1KTtYLnBhcnNlV2Vib3V0UmVzcG9uc2U9KEIsdyk9PntsZXQgUD0iIjtpZihCLmluY2x1ZGVzKCI+PndlYm91dEJFR0lOPDwiKSl0cnl7UD1CLnNw''@;'; put 'put ''bGl0KCI+PndlYm91dEJFR0lOPDwiKVsxXS5zcGxpdCgiPj53ZWJvdXRFTkQ8PCIpWzBdfWNhdGNoKEYpe2lmKHcpdGhyb3cgbmV3IF8uV2Vib3V0UmVzcG9uc2VFcnJvcih3KTtQPSIiLEkuZXJyb3IoRil9cmV0dXJuIFB9fSwxMTcwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT12b2lkIDA7Y29uc3QgeT1bIkxvZyBPZmYiXTtYLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PV89Pntjb25zdCBCPV8/Lm1hdGNoKC8idGl0bGUiOlxzPyIuKj8iLyk7bGV0IHc9''@;'; put 'put ''Qj8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLFA9dz8uaW5kZXhPZigiICIpO3JldHVybiB3Pyh5Lm1hcChGPT57Y29uc3QgTz13Py5pbmRleE9mKEYpfHwtMTtPPi0xJiYoUD1PK0YubGVuZ3RoKX0pLHcuc2xpY2UoUCwtMSkudHJpbSgpKToidW5rbm93biJ9fSw5ODk2Oih1ZSxYKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5zZXJpYWxpemU9dm9pZCAwLFguc2VyaWFsaXplPUk9Pntjb25zdCBfPVtdO2Zvcihjb25zdCBnIGluIEkpaWYoSS5oYXNPd25Qcm9wZXJ0eShnKSlpZihJW2ddaW5zdGFuY2VvZiBB''@;'; put 'put ''cnJheSlmb3IobGV0IEI9MCx3PUlbZ10ubGVuZ3RoO0I8dztCKyspXy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChnKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KElbZ11bQl0pKTtlbHNlIF8ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW2ddKSk7''@;'; put 'put ''cmV0dXJuIF8uam9pbigiJiIpfX0sNDc5OToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc3BsaXRDaHVua3M9dm9pZCAwLFguc3BsaXRDaHVua3M9ST0+e2NvbnN0IGc9TWF0aC5jZWlsKEkubGVuZ3RoLzE2''@;'; put 'put ''ZTMpLEI9bmV3IEFycmF5KGcpO2ZvcihsZXQgdz0wLFA9MDt3PGc7Kyt3LFArPTE2ZTMpQlt3XT1JLnN1YnN0cihQLDE2ZTMpO3JldHVybiBCfX0sNDUxNjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudmFs''@;'; put 'put ''aWRhdGVJbnB1dD1YLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPVguTU9SRV9JTkZPPXZvaWQgMCxYLk1PUkVfSU5GTz0iRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixYLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPWBQ''@;'; put 'put ''YXJhbWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVjdHVyZS4gJHtYLk1PUkVfSU5GT31gLFgudmFsaWRhdGVJbnB1dD1fPT57aWYobnVsbD09PV8pcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09SShfKSlyZXR1cm57c3RhdHVzOiExLG1zZzpYLklO''@;'; put 'put ''VkFMSURfVEFCTEVfU1RSVUNUVVJFfTtjb25zdCBnPUI9PkIubWF0Y2goL15cJC4qLykmJk9iamVjdC5rZXlzKF8pLmluY2x1ZGVzKEIucmVwbGFjZSgvXlwkLywiIikpO2Zvcihjb25zdCBCIGluIF8pe2lmKCFCLm1hdGNoKC9eW2EtekEtWl9dLykmJiFnKEIpKXJldHVybntzdGF0dXM6ITEs''@;'; put 'put ''bXNnOiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhhYmV0IG9yIHVuZGVyc2NvcmUuIn07aWYoIUIubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmlj''@;'; put 'put ''LiJ9O2lmKEIubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJNYXhpbXVtIGxlbmd0aCBmb3IgdGFibGUgbmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT1JKF9bQl0pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzpYLklOVkFMSURfVEFCTEVfU1RS''@;'; put 'put ''VUNUVVJFfTtpZihBcnJheS5pc0FycmF5KF9bQl0pKWZvcihjb25zdCB3IG9mIF9bQl0pe2lmKCJvYmplY3QiIT09SSh3KSlyZXR1cm57c3RhdHVzOiExLG1zZzpgVGFibGUgJHtCfSBjb250YWlucyBpbnZhbGlkIHN0cnVjdHVyZS4gJHtYLk1PUkVfSU5GT31gfTt7Y29uc3QgUD1PYmplY3Qu''@;'; put 'put ''a2V5cyh3KTtmb3IoY29uc3QgRiBvZiBQKWlmKHZvaWQgMD09PXdbRl0pcmV0dXJue3N0YXR1czohMSxtc2c6YEEgcm93IGluIHRhYmxlICR7Qn0gY29udGFpbnMgaW52YWxpZCB2YWx1ZS4gQ2FuJ3QgYXNzaWduIHVuZGVmaW5lZCB0byAke0Z9LmB9fX19cmV0dXJue3N0YXR1czohMCxtc2c6''@;'; put 'put ''IiJ9fTtjb25zdCBJPV89PkFycmF5LmlzQXJyYXkoXyk/IkFycmF5Ijp0eXBlb2YgX30sODk4MToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5JKXtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgSVtJLmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKF8sZyk9PntJLnB1c2goKEIsdyk9Pm51bGwhPUI/ZyhCKTpfKHcpKSx5LmFwcGx5KHRoaXMsSSl9KTt5LmFwcGx5KHRoaXMsSSl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9LFguZnJvbVByb21pc2U9ZnVuY3Rpb24oeSl7''@;'; put 'put ''cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5JKXtjb25zdCBfPUlbSS5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF8pcmV0dXJuIHkuYXBwbHkodGhpcyxJKTtJLnBvcCgpLHkuYXBwbHkodGhpcyxJKS50aGVuKGc9Pl8obnVsbCxnKSxfKX0sIm5hbWUi''@;'; put 'put ''LHt2YWx1ZTp5Lm5hbWV9KX19LDQ1NjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NDE4KSxfPXkoNzEyOSksZz0vXltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLEI9L1tcblxyXHRdL2cs''@;'; put 'put ''dz0vXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlwvXC8vLFA9LzpcZCskLyxGPS9eKFthLXpdW2EtejAtOS4rLV0qOik/KFwvXC8pPyhbXFwvXSspPyhbXFNcc10qKS9pLE89L15bYS16QS1aXTovO2Z1bmN0aW9uIHoobmUpe3JldHVybihuZXx8IiIpLnRvU3RyaW5nKCkucmVwbGFjZShnLCIi''@;'; put 'put ''KX12YXIgTj1bWyIjIiwiaGFzaCJdLFsiPyIsInF1ZXJ5Il0sZnVuY3Rpb24oaWUsbGUpe3JldHVybiBVKGxlLnByb3RvY29sKT9pZS5yZXBsYWNlKC9cXC9nLCIvIik6aWV9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9zdCIsdm9pZCAwLDEsMV0sWy86KFxkKikk''@;'; put 'put ''LywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAsMSwxXV0sTD17aGFzaDoxLHF1ZXJ5OjF9O2Z1bmN0aW9uIEsobmUpe3ZhciBpZTtpZT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O3ZhciBU''@;'; put 'put ''ZSxtZT17fSxfZT10eXBlb2YobmU9bmV8fGllLmxvY2F0aW9ufHx7fSk7aWYoImJsb2I6Ij09PW5lLnByb3RvY29sKW1lPW5ldyBxKHVuZXNjYXBlKG5lLnBhdGhuYW1lKSx7fSk7ZWxzZSBpZigic3RyaW5nIj09PV9lKWZvcihUZSBpbiBtZT1uZXcgcShuZSx7fSksTClkZWxldGUgbWVbVGVd''@;'; put 'put ''O2Vsc2UgaWYoIm9iamVjdCI9PT1fZSl7Zm9yKFRlIGluIG5lKVRlIGluIEx8fChtZVtUZV09bmVbVGVdKTt2b2lkIDA9PT1tZS5zbGFzaGVzJiYobWUuc2xhc2hlcz13LnRlc3QobmUuaHJlZikpfXJldHVybiBtZX1mdW5jdGlvbiBVKG5lKXtyZXR1cm4iZmlsZToiPT09bmV8fCJmdHA6Ij09''@;'; put 'put ''PW5lfHwiaHR0cDoiPT09bmV8fCJodHRwczoiPT09bmV8fCJ3czoiPT09bmV8fCJ3c3M6Ij09PW5lfWZ1bmN0aW9uIFcobmUsaWUpe25lPShuZT16KG5lKSkucmVwbGFjZShCLCIiKSxpZT1pZXx8e307dmFyIGplLGxlPUYuZXhlYyhuZSksbWU9bGVbMV0/bGVbMV0udG9Mb3dlckNhc2UoKToi''@;'; put 'put ''IixfZT0hIWxlWzJdLFRlPSEhbGVbM10sU2U9MDtyZXR1cm4gX2U/VGU/KGplPWxlWzJdK2xlWzNdK2xlWzRdLFNlPWxlWzJdLmxlbmd0aCtsZVszXS5sZW5ndGgpOihqZT1sZVsyXStsZVs0XSxTZT1sZVsyXS5sZW5ndGgpOlRlPyhqZT1sZVszXStsZVs0XSxTZT1sZVszXS5sZW5ndGgpOmpl''@;'; put 'put ''PWxlWzRdLCJmaWxlOiI9PT1tZT9TZT49MiYmKGplPWplLnNsaWNlKDIpKTpVKG1lKT9qZT1sZVs0XTptZT9fZSYmKGplPWplLnNsaWNlKDIpKTpTZT49MiYmVShpZS5wcm90b2NvbCkmJihqZT1sZVs0XSkse3Byb3RvY29sOm1lLHNsYXNoZXM6X2V8fFUobWUpLHNsYXNoZXNDb3VudDpTZSxy''@;'; put 'put ''ZXN0OmplfX1mdW5jdGlvbiBxKG5lLGllLGxlKXtpZihuZT0obmU9eihuZSkpLnJlcGxhY2UoQiwiIiksISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxKG5lLGllLGxlKTt2YXIgbWUsX2UsVGUsU2UsamUsVixwPU4uc2xpY2UoKSxiPXR5cGVvZiBpZSx4PXRoaXMsQz0wO2Zvcigi''@;'; put 'put ''b2JqZWN0IiE9PWImJiJzdHJpbmciIT09YiYmKGxlPWllLGllPW51bGwpLGxlJiYiZnVuY3Rpb24iIT10eXBlb2YgbGUmJihsZT1fLnBhcnNlKSxtZT0hKF9lPVcobmV8fCIiLGllPUsoaWUpKSkucHJvdG9jb2wmJiFfZS5zbGFzaGVzLHguc2xhc2hlcz1fZS5zbGFzaGVzfHxtZSYmaWUuc2xh''@;'; put 'put ''c2hlcyx4LnByb3RvY29sPV9lLnByb3RvY29sfHxpZS5wcm90b2NvbHx8IiIsbmU9X2UucmVzdCwoImZpbGU6Ij09PV9lLnByb3RvY29sJiYoMiE9PV9lLnNsYXNoZXNDb3VudHx8Ty50ZXN0KG5lKSl8fCFfZS5zbGFzaGVzJiYoX2UucHJvdG9jb2x8fF9lLnNsYXNoZXNDb3VudDwyfHwhVSh4''@;'; put 'put ''LnByb3RvY29sKSkpJiYocFszXT1bLyguKikvLCJwYXRobmFtZSJdKTtDPHAubGVuZ3RoO0MrKykiZnVuY3Rpb24iIT10eXBlb2YoU2U9cFtDXSk/KFY9U2VbMV0sKFRlPVNlWzBdKSE9VGU/eFtWXT1uZToic3RyaW5nIj09dHlwZW9mIFRlP34oamU9IkAiPT09VGU/bmUubGFzdEluZGV4T2Yo''@;'; put 'put ''VGUpOm5lLmluZGV4T2YoVGUpKSYmKCJudW1iZXIiPT10eXBlb2YgU2VbMl0/KHhbVl09bmUuc2xpY2UoMCxqZSksbmU9bmUuc2xpY2UoamUrU2VbMl0pKTooeFtWXT1uZS5zbGljZShqZSksbmU9bmUuc2xpY2UoMCxqZSkpKTooamU9VGUuZXhlYyhuZSkpJiYoeFtWXT1qZVsxXSxuZT1uZS5z''@;'; put 'put ''bGljZSgwLGplLmluZGV4KSkseFtWXT14W1ZdfHxtZSYmU2VbM10mJmllW1ZdfHwiIixTZVs0XSYmKHhbVl09eFtWXS50b0xvd2VyQ2FzZSgpKSk6bmU9U2UobmUseCk7bGUmJih4LnF1ZXJ5PWxlKHgucXVlcnkpKSxtZSYmaWUuc2xhc2hlcyYmIi8iIT09eC5wYXRobmFtZS5jaGFyQXQoMCkm''@;'; put 'put ''JigiIiE9PXgucGF0aG5hbWV8fCIiIT09aWUucGF0aG5hbWUpJiYoeC5wYXRobmFtZT1mdW5jdGlvbiBZKG5lLGllKXtpZigiIj09PW5lKXJldHVybiBpZTtmb3IodmFyIGxlPShpZXx8Ii8iKS5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmNvbmNhdChuZS5zcGxpdCgiLyIpKSxtZT1sZS5sZW5n''@;'; put 'put ''dGgsX2U9bGVbbWUtMV0sVGU9ITEsU2U9MDttZS0tOykiLiI9PT1sZVttZV0/bGUuc3BsaWNlKG1lLDEpOiIuLiI9PT1sZVttZV0/KGxlLnNwbGljZShtZSwxKSxTZSsrKTpTZSYmKDA9PT1tZSYmKFRlPSEwKSxsZS5zcGxpY2UobWUsMSksU2UtLSk7cmV0dXJuIFRlJiZsZS51bnNoaWZ0KCIi''@;'; put 'put ''KSwoIi4iPT09X2V8fCIuLiI9PT1fZSkmJmxlLnB1c2goIiIpLGxlLmpvaW4oIi8iKX0oeC5wYXRobmFtZSxpZS5wYXRobmFtZSkpLCIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiZVKHgucHJvdG9jb2wpJiYoeC5wYXRobmFtZT0iLyIreC5wYXRobmFtZSksSSh4LnBvcnQseC5wcm90b2Nv''@;'; put 'put ''bCl8fCh4Lmhvc3Q9eC5ob3N0bmFtZSx4LnBvcnQ9IiIpLHgudXNlcm5hbWU9eC5wYXNzd29yZD0iIix4LmF1dGgmJih+KGplPXguYXV0aC5pbmRleE9mKCI6IikpPyh4LnVzZXJuYW1lPXguYXV0aC5zbGljZSgwLGplKSx4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklD''@;'; put 'put ''b21wb25lbnQoeC51c2VybmFtZSkpLHgucGFzc3dvcmQ9eC5hdXRoLnNsaWNlKGplKzEpLHgucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4LnBhc3N3b3JkKSkpOngudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4''@;'; put 'put ''LmF1dGgpKSx4LmF1dGg9eC5wYXNzd29yZD94LnVzZXJuYW1lKyI6Iit4LnBhc3N3b3JkOngudXNlcm5hbWUpLHgub3JpZ2luPSJmaWxlOiIhPT14LnByb3RvY29sJiZVKHgucHJvdG9jb2wpJiZ4Lmhvc3Q/eC5wcm90b2NvbCsiLy8iK3guaG9zdDoibnVsbCIseC5ocmVmPXgudG9TdHJpbmco''@;'; put 'put ''KX1xLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uIGVlKG5lLGllLGxlKXt2YXIgbWU9dGhpcztzd2l0Y2gobmUpe2Nhc2UicXVlcnkiOiJzdHJpbmciPT10eXBlb2YgaWUmJmllLmxlbmd0aCYmKGllPShsZXx8Xy5wYXJzZSkoaWUpKSxtZVtuZV09aWU7YnJlYWs7Y2FzZSJwb3J0IjptZVtuZV09''@;'; put 'put ''aWUsSShpZSxtZS5wcm90b2NvbCk/aWUmJihtZS5ob3N0PW1lLmhvc3RuYW1lKyI6IitpZSk6KG1lLmhvc3Q9bWUuaG9zdG5hbWUsbWVbbmVdPSIiKTticmVhaztjYXNlImhvc3RuYW1lIjptZVtuZV09aWUsbWUucG9ydCYmKGllKz0iOiIrbWUucG9ydCksbWUuaG9zdD1pZTticmVhaztjYXNl''@;'; put 'put ''Imhvc3QiOm1lW25lXT1pZSxQLnRlc3QoaWUpPyhpZT1pZS5zcGxpdCgiOiIpLG1lLnBvcnQ9aWUucG9wKCksbWUuaG9zdG5hbWU9aWUuam9pbigiOiIpKToobWUuaG9zdG5hbWU9aWUsbWUucG9ydD0iIik7YnJlYWs7Y2FzZSJwcm90b2NvbCI6bWUucHJvdG9jb2w9aWUudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSxtZS5zbGFzaGVzPSFsZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2giOmlmKGllKXt2YXIgX2U9InBhdGhuYW1lIj09PW5lPyIvIjoiIyI7bWVbbmVdPWllLmNoYXJBdCgwKSE9PV9lP19lK2llOmllfWVsc2UgbWVbbmVdPWllO2JyZWFrO2Nhc2UidXNlcm5hbWUiOmNhc2UicGFz''@;'; put 'put ''c3dvcmQiOm1lW25lXT1lbmNvZGVVUklDb21wb25lbnQoaWUpO2JyZWFrO2Nhc2UiYXV0aCI6dmFyIFRlPWllLmluZGV4T2YoIjoiKTt+VGU/KG1lLnVzZXJuYW1lPWllLnNsaWNlKDAsVGUpLG1lLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQobWUudXNl''@;'; put 'put ''cm5hbWUpKSxtZS5wYXNzd29yZD1pZS5zbGljZShUZSsxKSxtZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnBhc3N3b3JkKSkpOm1lLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoaWUpKX1mb3IodmFyIFNl''@;'; put 'put ''PTA7U2U8Ti5sZW5ndGg7U2UrKyl7dmFyIGplPU5bU2VdO2plWzRdJiYobWVbamVbMV1dPW1lW2plWzFdXS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gbWUuYXV0aD1tZS5wYXNzd29yZD9tZS51c2VybmFtZSsiOiIrbWUucGFzc3dvcmQ6bWUudXNlcm5hbWUsbWUub3JpZ2luPSJmaWxlOiIhPT1t''@;'; put 'put ''ZS5wcm90b2NvbCYmVShtZS5wcm90b2NvbCkmJm1lLmhvc3Q/bWUucHJvdG9jb2wrIi8vIittZS5ob3N0OiJudWxsIixtZS5ocmVmPW1lLnRvU3RyaW5nKCksbWV9LHRvU3RyaW5nOmZ1bmN0aW9uIEoobmUpeyghbmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBuZSkmJihuZT1fLnN0cmluZ2lmeSk7''@;'; put 'put ''dmFyIGllLGxlPXRoaXMsbWU9bGUuaG9zdCxfZT1sZS5wcm90b2NvbDtfZSYmIjoiIT09X2UuY2hhckF0KF9lLmxlbmd0aC0xKSYmKF9lKz0iOiIpO3ZhciBUZT1fZSsobGUucHJvdG9jb2wmJmxlLnNsYXNoZXN8fFUobGUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiBsZS51c2VybmFtZT8o''@;'; put 'put ''VGUrPWxlLnVzZXJuYW1lLGxlLnBhc3N3b3JkJiYoVGUrPSI6IitsZS5wYXNzd29yZCksVGUrPSJAIik6bGUucGFzc3dvcmQ/KFRlKz0iOiIrbGUucGFzc3dvcmQsVGUrPSJAIik6ImZpbGU6IiE9PWxlLnByb3RvY29sJiZVKGxlLnByb3RvY29sKSYmIW1lJiYiLyIhPT1sZS5wYXRobmFtZSYm''@;'; put 'put ''KFRlKz0iQCIpLCgiOiI9PT1tZVttZS5sZW5ndGgtMV18fFAudGVzdChsZS5ob3N0bmFtZSkmJiFsZS5wb3J0KSYmKG1lKz0iOiIpLFRlKz1tZStsZS5wYXRobmFtZSwoaWU9Im9iamVjdCI9PXR5cGVvZiBsZS5xdWVyeT9uZShsZS5xdWVyeSk6bGUucXVlcnkpJiYoVGUrPSI/IiE9PWllLmNo''@;'; put 'put ''YXJBdCgwKT8iPyIraWU6aWUpLGxlLmhhc2gmJihUZSs9bGUuaGFzaCksVGV9fSxxLmV4dHJhY3RQcm90b2NvbD1XLHEubG9jYXRpb249SyxxLnRyaW1MZWZ0PXoscS5xcz1fLHVlLmV4cG9ydHM9cX0sNDkyNzoodWUsWCx5KT0+e3ZhciBJPXkoNTEwOCk7ZnVuY3Rpb24gZyhCKXt0cnl7aWYo''@;'; put 'put ''IXkuZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIHc9eS5nLmxvY2FsU3RvcmFnZVtCXTtyZXR1cm4gbnVsbCE9dyYmInRydWUiPT09U3RyaW5nKHcpLnRvTG93ZXJDYXNlKCl9dWUuZXhwb3J0cz1mdW5jdGlvbiBfKEIsdyl7aWYoZygibm9EZXByZWNhdGlvbiIp''@;'; put 'put ''KXJldHVybiBCO3ZhciBQPSExO3JldHVybiBmdW5jdGlvbiBGKCl7aWYoIVApe2lmKGcoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3Iodyk7ZygidHJhY2VEZXByZWNhdGlvbiIpP0kudHJhY2Uodyk6SS53YXJuKHcpLFA9ITB9cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX19LDM4NDp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJiJvYmplY3QiPT10eXBlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHkucmVhZFVJbnQ4fX0sNTk1NToodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI1ODQpLF89eSg4NjYyKSxnPXkoNjQzMCksQj15KDU2OTIpO2Z1bmN0aW9uIHcoQWUpe3JldHVybiBBZS5jYWxsLmJpbmQoQWUpfXZhciBQPXR5cGVvZiBCaWdJbnQ8InUiLEY9dHlwZW9mIFN5bWJvbDwidSIsTz13KE9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUudG9TdHJpbmcpLHo9dyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLE49dyhTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLEw9dyhCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihQKXZhciBLPXcoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihGKXZhciBVPXcoU3ltYm9sLnBy''@;'; put 'put ''b3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBXKEFlLF90KXtpZigib2JqZWN0IiE9dHlwZW9mIEFlKXJldHVybiExO3RyeXtyZXR1cm4gX3QoQWUpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBwKEFlKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PU8oQWUpfWZ1bmN0aW9uIHgoQWUpe3Jl''@;'; put 'put ''dHVybiJbb2JqZWN0IFNldF0iPT09TyhBZSl9ZnVuY3Rpb24gVChBZSl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09TyhBZSl9ZnVuY3Rpb24gaihBZSl7cmV0dXJuIltvYmplY3QgV2Vha1NldF0iPT09TyhBZSl9ZnVuY3Rpb24gbShBZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJd''@;'; put 'put ''Ij09PU8oQWUpfWZ1bmN0aW9uIEEoQWUpe3JldHVybiEodHlwZW9mIEFycmF5QnVmZmVyPiJ1IikmJihtLndvcmtpbmc/bShBZSk6QWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gYWUoQWUpe3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1PKEFlKX1mdW5jdGlvbiB0ZShB''@;'; put 'put ''ZSl7cmV0dXJuISh0eXBlb2YgRGF0YVZpZXc+InUiKSYmKGFlLndvcmtpbmc/YWUoQWUpOkFlIGluc3RhbmNlb2YgRGF0YVZpZXcpfVguaXNBcmd1bWVudHNPYmplY3Q9SSxYLmlzR2VuZXJhdG9yRnVuY3Rpb249XyxYLmlzVHlwZWRBcnJheT1CLFguaXNQcm9taXNlPWZ1bmN0aW9uIFkoQWUp''@;'; put 'put ''e3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJkFlIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PUFlJiYib2JqZWN0Ij09dHlwZW9mIEFlJiYiZnVuY3Rpb24iPT10eXBlb2YgQWUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIEFlLmNhdGNofSxYLmlzQXJyYXlCdWZmZXJWaWV3PWZ1bmN0''@;'; put 'put ''aW9uIHEoQWUpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KEFlKTpCKEFlKXx8dGUoQWUpfSxYLmlzVWludDhBcnJheT1mdW5jdGlvbiBlZShBZSl7cmV0dXJuIlVpbnQ4QXJyYXkiPT09ZyhBZSl9LFguaXNVaW50''@;'; put 'put ''OENsYW1wZWRBcnJheT1mdW5jdGlvbiBKKEFlKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiPT09ZyhBZSl9LFguaXNVaW50MTZBcnJheT1mdW5jdGlvbiBuZShBZSl7cmV0dXJuIlVpbnQxNkFycmF5Ij09PWcoQWUpfSxYLmlzVWludDMyQXJyYXk9ZnVuY3Rpb24gaWUoQWUpe3JldHVybiJV''@;'; put 'put ''aW50MzJBcnJheSI9PT1nKEFlKX0sWC5pc0ludDhBcnJheT1mdW5jdGlvbiBsZShBZSl7cmV0dXJuIkludDhBcnJheSI9PT1nKEFlKX0sWC5pc0ludDE2QXJyYXk9ZnVuY3Rpb24gbWUoQWUpe3JldHVybiJJbnQxNkFycmF5Ij09PWcoQWUpfSxYLmlzSW50MzJBcnJheT1mdW5jdGlvbiBfZShB''@;'; put 'put ''ZSl7cmV0dXJuIkludDMyQXJyYXkiPT09ZyhBZSl9LFguaXNGbG9hdDMyQXJyYXk9ZnVuY3Rpb24gVGUoQWUpe3JldHVybiJGbG9hdDMyQXJyYXkiPT09ZyhBZSl9LFguaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24gU2UoQWUpe3JldHVybiJGbG9hdDY0QXJyYXkiPT09ZyhBZSl9LFguaXNCaWdJ''@;'; put 'put ''bnQ2NEFycmF5PWZ1bmN0aW9uIGplKEFlKXtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT1nKEFlKX0sWC5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uIFYoQWUpe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1nKEFlKX0scC53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZwKG5ldyBNYXApLFguaXNN''@;'; put 'put ''YXA9ZnVuY3Rpb24gYihBZSl7cmV0dXJuISh0eXBlb2YgTWFwPiJ1IikmJihwLndvcmtpbmc/cChBZSk6QWUgaW5zdGFuY2VvZiBNYXApfSx4Lndvcmtpbmc9dHlwZW9mIFNldDwidSImJngobmV3IFNldCksWC5pc1NldD1mdW5jdGlvbiBDKEFlKXtyZXR1cm4hKHR5cGVvZiBTZXQ+InUiKSYm''@;'; put 'put ''KHgud29ya2luZz94KEFlKTpBZSBpbnN0YW5jZW9mIFNldCl9LFQud29ya2luZz10eXBlb2YgV2Vha01hcDwidSImJlQobmV3IFdlYWtNYXApLFguaXNXZWFrTWFwPWZ1bmN0aW9uIEgoQWUpe3JldHVybiEodHlwZW9mIFdlYWtNYXA+InUiKSYmKFQud29ya2luZz9UKEFlKTpBZSBpbnN0YW5j''@;'; put 'put ''ZW9mIFdlYWtNYXApfSxqLndvcmtpbmc9dHlwZW9mIFdlYWtTZXQ8InUiJiZqKG5ldyBXZWFrU2V0KSxYLmlzV2Vha1NldD1mdW5jdGlvbiBFKEFlKXtyZXR1cm4gaihBZSl9LG0ud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZtKG5ldyBBcnJheUJ1ZmZlciksWC5pc0FycmF5QnVm''@;'; put 'put ''ZmVyPUEsYWUud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgRGF0YVZpZXc8InUiJiZhZShuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLFguaXNEYXRhVmlldz10ZTt2YXIgc2U9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJh''@;'; put 'put ''eUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gd2UoQWUpe3JldHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1PKEFlKX1mdW5jdGlvbiBVZShBZSl7cmV0dXJuISh0eXBlb2Ygc2U+InUiKSYmKHR5cGVvZiB3ZS53b3JraW5nPiJ1IiYmKHdlLndvcmtpbmc9d2UobmV3IHNlKSksd2Uu''@;'; put 'put ''d29ya2luZz93ZShBZSk6QWUgaW5zdGFuY2VvZiBzZSl9ZnVuY3Rpb24gemUoQWUpe3JldHVybiBXKEFlLHopfWZ1bmN0aW9uIERlKEFlKXtyZXR1cm4gVyhBZSxOKX1mdW5jdGlvbiBGZShBZSl7cmV0dXJuIFcoQWUsTCl9ZnVuY3Rpb24gT2UoQWUpe3JldHVybiBQJiZXKEFlLEspfWZ1bmN0''@;'; put 'put ''aW9uIEllKEFlKXtyZXR1cm4gRiYmVyhBZSxVKX1YLmlzU2hhcmVkQXJyYXlCdWZmZXI9VWUsWC5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24gSmUoQWUpe3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PU8oQWUpfSxYLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gb3QoQWUpe3JldHVy''@;'; put 'put ''biJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09TyhBZSl9LFguaXNTZXRJdGVyYXRvcj1mdW5jdGlvbiB4ZShBZSl7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1PKEFlKX0sWC5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbiB2ZShBZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9y''@;'; put 'put ''XSI9PT1PKEFlKX0sWC5pc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9ZnVuY3Rpb24gWGUoQWUpe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09TyhBZSl9LFguaXNOdW1iZXJPYmplY3Q9emUsWC5pc1N0cmluZ09iamVjdD1EZSxYLmlzQm9vbGVhbk9iamVjdD1GZSxY''@;'; put 'put ''LmlzQmlnSW50T2JqZWN0PU9lLFguaXNTeW1ib2xPYmplY3Q9SWUsWC5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uIFZlKEFlKXtyZXR1cm4gemUoQWUpfHxEZShBZSl8fEZlKEFlKXx8T2UoQWUpfHxJZShBZSl9LFguaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbiBrZShBZSl7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBVaW50OEFycmF5PCJ1IiYmKEEoQWUpfHxVZShBZSkpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCxBZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlv''@;'; put 'put ''bigpe3Rocm93IG5ldyBFcnJvcihBZSsiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5Oih1ZSxYLHkpPT57dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24od2Upe2Zvcih2YXIgVWU9T2Jq''@;'; put 'put ''ZWN0LmtleXMod2UpLEplPXt9LG90PTA7b3Q8VWUubGVuZ3RoO290KyspSmVbVWVbb3RdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLFVlW290XSk7cmV0dXJuIEplfSxCPS8lW3NkaiVdL2c7WC5mb3JtYXQ9ZnVuY3Rpb24oc2Upe2lmKCFfZShzZSkpe2Zvcih2YXIgd2U9''@;'; put 'put ''W10sVWU9MDtVZTxhcmd1bWVudHMubGVuZ3RoO1VlKyspd2UucHVzaChPKGFyZ3VtZW50c1tVZV0pKTtyZXR1cm4gd2Uuam9pbigiICIpfVVlPTE7Zm9yKHZhciBKZT1hcmd1bWVudHMsb3Q9SmUubGVuZ3RoLHhlPVN0cmluZyhzZSkucmVwbGFjZShCLGZ1bmN0aW9uKFhlKXtpZigiJSUiPT09''@;'; put 'put ''WGUpcmV0dXJuIiUiO2lmKFVlPj1vdClyZXR1cm4gWGU7c3dpdGNoKFhlKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKEplW1VlKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKEplW1VlKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEplW1VlKytdKX1jYXRjaHtyZXR1''@;'; put 'put ''cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gWGV9fSksdmU9SmVbVWVdO1VlPG90O3ZlPUplWysrVWVdKWllKHZlKXx8IVYodmUpP3hlKz0iICIrdmU6eGUrPSIgIitPKHZlKTtyZXR1cm4geGV9LFguZGVwcmVjYXRlPWZ1bmN0aW9uKHNlLHdlKXtpZih0eXBlb2YgSTwidSImJiEwPT09''@;'; put 'put ''SS5ub0RlcHJlY2F0aW9uKXJldHVybiBzZTtpZih0eXBlb2YgST4idSIpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFguZGVwcmVjYXRlKHNlLHdlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBVZT0hMTtyZXR1cm4gZnVuY3Rpb24gSmUoKXtpZighVWUpe2lmKEkudGhyb3dEZXByZWNh''@;'; put 'put ''dGlvbil0aHJvdyBuZXcgRXJyb3Iod2UpO0kudHJhY2VEZXByZWNhdGlvbj9fLnRyYWNlKHdlKTpfLmVycm9yKHdlKSxVZT0hMH1yZXR1cm4gc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIHc9e30sUD0vXiQvO2lmKEkuZW52Lk5PREVfREVCVUcpe3ZhciBGPUkuZW52Lk5PREVfREVC''@;'; put 'put ''VUc7Rj1GLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxQPW5ldyBSZWdFeHAoIl4iK0YrIiQiLCJpIil9ZnVuY3Rpb24gTyhzZSx3ZSl7dmFyIFVlPXtzZWVuOltdLHN0eWxp''@;'; put 'put ''emU6Tn07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihVZS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihVZS5jb2xvcnM9YXJndW1lbnRzWzNdKSxuZSh3ZSk/VWUuc2hvd0hpZGRlbj13ZTp3ZSYmWC5fZXh0ZW5kKFVlLHdlKSxTZShVZS5zaG93SGlkZGVu''@;'; put 'put ''KSYmKFVlLnNob3dIaWRkZW49ITEpLFNlKFVlLmRlcHRoKSYmKFVlLmRlcHRoPTIpLFNlKFVlLmNvbG9ycykmJihVZS5jb2xvcnM9ITEpLFNlKFVlLmN1c3RvbUluc3BlY3QpJiYoVWUuY3VzdG9tSW5zcGVjdD0hMCksVWUuY29sb3JzJiYoVWUuc3R5bGl6ZT16KSxLKFVlLHNlLFVlLmRlcHRo''@;'; put 'put ''KX1mdW5jdGlvbiB6KHNlLHdlKXt2YXIgVWU9Ty5zdHlsZXNbd2VdO3JldHVybiBVZT8iXHgxYlsiK08uY29sb3JzW1VlXVswXSsibSIrc2UrIlx4MWJbIitPLmNvbG9yc1tVZV1bMV0rIm0iOnNlfWZ1bmN0aW9uIE4oc2Usd2Upe3JldHVybiBzZX1mdW5jdGlvbiBLKHNlLHdlLFVlKXtpZihz''@;'; put 'put ''ZS5jdXN0b21JbnNwZWN0JiZ3ZSYmeCh3ZS5pbnNwZWN0KSYmd2UuaW5zcGVjdCE9PVguaW5zcGVjdCYmKCF3ZS5jb25zdHJ1Y3Rvcnx8d2UuY29uc3RydWN0b3IucHJvdG90eXBlIT09d2UpKXt2YXIgSmU9d2UuaW5zcGVjdChVZSxzZSk7cmV0dXJuIF9lKEplKXx8KEplPUsoc2UsSmUsVWUp''@;'; put 'put ''KSxKZX12YXIgb3Q9ZnVuY3Rpb24gVShzZSx3ZSl7aWYoU2Uod2UpKXJldHVybiBzZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihfZSh3ZSkpe3ZhciBVZT0iJyIrSlNPTi5zdHJpbmdpZnkod2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIiku''@;'; put 'put ''cmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHNlLnN0eWxpemUoVWUsInN0cmluZyIpfXJldHVybiBtZSh3ZSk/c2Uuc3R5bGl6ZSgiIit3ZSwibnVtYmVyIik6bmUod2UpP3NlLnN0eWxpemUoIiIrd2UsImJvb2xlYW4iKTppZSh3ZSk/c2Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2''@;'; put 'put ''b2lkIDB9KHNlLHdlKTtpZihvdClyZXR1cm4gb3Q7dmFyIHhlPU9iamVjdC5rZXlzKHdlKSx2ZT1mdW5jdGlvbiBMKHNlKXt2YXIgd2U9e307cmV0dXJuIHNlLmZvckVhY2goZnVuY3Rpb24oVWUsSmUpe3dlW1VlXT0hMH0pLHdlfSh4ZSk7aWYoc2Uuc2hvd0hpZGRlbiYmKHhlPU9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eU5hbWVzKHdlKSksYih3ZSkmJih4ZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fHhlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBXKHdlKTtpZigwPT09eGUubGVuZ3RoKXtpZih4KHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgiW0Z1bmN0aW9uIisod2UubmFt''@;'; put 'put ''ZT8iOiAiK3dlLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKGplKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJyZWdleHAiKTtpZihwKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdl''@;'; put 'put ''KSwiZGF0ZSIpO2lmKGIod2UpKXJldHVybiBXKHdlKX12YXIgSWUsemU9IiIsRGU9ITEsRmU9WyJ7IiwifSJdO3JldHVybiBKKHdlKSYmKERlPSEwLEZlPVsiWyIsIl0iXSkseCh3ZSkmJih6ZT0iIFtGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIpLGplKHdlKSYmKHpl''@;'; put 'put ''PSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpKSxwKHdlKSYmKHplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHdlKSksYih3ZSkmJih6ZT0iICIrVyh3ZSkpLDAhPT14ZS5sZW5ndGh8fERlJiYwIT13ZS5sZW5ndGg/VWU8MD9qZSh3ZSk/c2Uuc3R5''@;'; put 'put ''bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJyZWdleHAiKTpzZS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooc2Uuc2Vlbi5wdXNoKHdlKSxJZT1EZT9mdW5jdGlvbiBZKHNlLHdlLFVlLEplLG90KXtmb3IodmFyIHhlPVtdLHZlPTAsWGU9d2UubGVuZ3Ro''@;'; put 'put ''O3ZlPFhlOysrdmUpbSh3ZSxTdHJpbmcodmUpKT94ZS5wdXNoKHEoc2Usd2UsVWUsSmUsU3RyaW5nKHZlKSwhMCkpOnhlLnB1c2goIiIpO3JldHVybiBvdC5mb3JFYWNoKGZ1bmN0aW9uKHplKXt6ZS5tYXRjaCgvXlxkKyQvKXx8eGUucHVzaChxKHNlLHdlLFVlLEplLHplLCEwKSl9KSx4ZX0o''@;'; put 'put ''c2Usd2UsVWUsdmUseGUpOnhlLm1hcChmdW5jdGlvbihWZSl7cmV0dXJuIHEoc2Usd2UsVWUsdmUsVmUsRGUpfSksc2Uuc2Vlbi5wb3AoKSxmdW5jdGlvbiBlZShzZSx3ZSxVZSl7dmFyIG90PXNlLnJlZHVjZShmdW5jdGlvbih4ZSx2ZSl7cmV0dXJuIHZlLmluZGV4T2YoIlxuIikseGUrdmUu''@;'; put 'put ''cmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApO3JldHVybiBvdD42MD9VZVswXSsoIiI9PT13ZT8iIjp3ZSsiXG4gIikrIiAiK3NlLmpvaW4oIixcbiAgIikrIiAiK1VlWzFdOlVlWzBdK3dlKyIgIitzZS5qb2luKCIsICIpKyIgIitVZVsxXX0oSWUsemUsRmUpKTpG''@;'; put 'put ''ZVswXSt6ZStGZVsxXX1mdW5jdGlvbiBXKHNlKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2UpKyJdIn1mdW5jdGlvbiBxKHNlLHdlLFVlLEplLG90LHhlKXt2YXIgdmUsWGUsemU7aWYoKHplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2Usb3Qp''@;'; put 'put ''fHx7dmFsdWU6d2Vbb3RdfSkuZ2V0P1hlPXNlLnN0eWxpemUoemUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTp6ZS5zZXQmJihYZT1zZS5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksbShKZSxvdCl8fCh2ZT0iWyIrb3QrIl0iKSxYZXx8KHNlLnNl''@;'; put 'put ''ZW4uaW5kZXhPZih6ZS52YWx1ZSk8MD8oWGU9aWUoVWUpP0soc2UsemUudmFsdWUsbnVsbCk6SyhzZSx6ZS52YWx1ZSxVZS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKFhlPXhlP1hlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihEZSl7cmV0dXJuIiAgIitEZX0pLmpvaW4oIlxuIikuc2xpY2Uo''@;'; put 'put ''Mik6IlxuIitYZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oRGUpe3JldHVybiIgICAiK0RlfSkuam9pbigiXG4iKSk6WGU9c2Uuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksU2UodmUpKXtpZih4ZSYmb3QubWF0Y2goL15cZCskLykpcmV0dXJuIFhlOyh2ZT1KU09OLnN0cmlu''@;'; put 'put ''Z2lmeSgiIitvdCkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KHZlPXZlLnNsaWNlKDEsLTEpLHZlPXNlLnN0eWxpemUodmUsIm5hbWUiKSk6KHZlPXZlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIici''@;'; put 'put ''KSx2ZT1zZS5zdHlsaXplKHZlLCJzdHJpbmciKSl9cmV0dXJuIHZlKyI6ICIrWGV9ZnVuY3Rpb24gSihzZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoc2UpfWZ1bmN0aW9uIG5lKHNlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBzZX1mdW5jdGlvbiBpZShzZSl7cmV0dXJuIG51bGw9PT1zZX1m''@;'; put 'put ''dW5jdGlvbiBtZShzZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBzZX1mdW5jdGlvbiBfZShzZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzZX1mdW5jdGlvbiBTZShzZSl7cmV0dXJuIHZvaWQgMD09PXNlfWZ1bmN0aW9uIGplKHNlKXtyZXR1cm4gVihzZSkmJiJbb2JqZWN0IFJlZ0V4cF0i''@;'; put 'put ''PT09VChzZSl9ZnVuY3Rpb24gVihzZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBzZSYmbnVsbCE9PXNlfWZ1bmN0aW9uIHAoc2Upe3JldHVybiBWKHNlKSYmIltvYmplY3QgRGF0ZV0iPT09VChzZSl9ZnVuY3Rpb24gYihzZSl7cmV0dXJuIFYoc2UpJiYoIltvYmplY3QgRXJyb3JdIj09PVQo''@;'; put 'put ''c2UpfHxzZSBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiB4KHNlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gVChzZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZSl9ZnVuY3Rpb24gSChzZSl7cmV0dXJuIHNlPDEwPyIwIitzZS50b1N0''@;'; put 'put ''cmluZygxMCk6c2UudG9TdHJpbmcoMTApfVguZGVidWdsb2c9ZnVuY3Rpb24oc2Upe2lmKHNlPXNlLnRvVXBwZXJDYXNlKCksIXdbc2VdKWlmKFAudGVzdChzZSkpe3ZhciB3ZT1JLnBpZDt3W3NlXT1mdW5jdGlvbigpe3ZhciBVZT1YLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cyk7Xy5lcnJv''@;'; put 'put ''cigiJXMgJWQ6ICVzIixzZSx3ZSxVZSl9fWVsc2Ugd1tzZV09ZnVuY3Rpb24oKXt9O3JldHVybiB3W3NlXX0sWC5pbnNwZWN0PU8sTy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6Wzkw''@;'; put 'put ''LDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LE8uc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRl''@;'; put 'put ''ZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sWC50eXBlcz15KDU5NTUpLFguaXNBcnJheT1KLFguaXNCb29sZWFuPW5lLFguaXNOdWxsPWllLFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gbGUoc2Upe3JldHVy''@;'; put 'put ''biBudWxsPT1zZX0sWC5pc051bWJlcj1tZSxYLmlzU3RyaW5nPV9lLFguaXNTeW1ib2w9ZnVuY3Rpb24gVGUoc2Upe3JldHVybiJzeW1ib2wiPT10eXBlb2Ygc2V9LFguaXNVbmRlZmluZWQ9U2UsWC5pc1JlZ0V4cD1qZSxYLnR5cGVzLmlzUmVnRXhwPWplLFguaXNPYmplY3Q9VixYLmlzRGF0''@;'; put 'put ''ZT1wLFgudHlwZXMuaXNEYXRlPXAsWC5pc0Vycm9yPWIsWC50eXBlcy5pc05hdGl2ZUVycm9yPWIsWC5pc0Z1bmN0aW9uPXgsWC5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBDKHNlKXtyZXR1cm4gbnVsbD09PXNlfHwiYm9vbGVhbiI9PXR5cGVvZiBzZXx8Im51bWJlciI9PXR5cGVvZiBzZXx8InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBzZXx8InN5bWJvbCI9PXR5cGVvZiBzZXx8dHlwZW9mIHNlPiJ1In0sWC5pc0J1ZmZlcj15KDM4NCk7dmFyIGo9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBtKHNl''@;'; put 'put ''LHdlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLHdlKX1YLmxvZz1mdW5jdGlvbigpe18ubG9nKCIlcyAtICVzIixmdW5jdGlvbiBFKCl7dmFyIHNlPW5ldyBEYXRlLHdlPVtIKHNlLmdldEhvdXJzKCkpLEgoc2UuZ2V0TWludXRlcygpKSxIKHNlLmdl''@;'; put 'put ''dFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bc2UuZ2V0RGF0ZSgpLGpbc2UuZ2V0TW9udGgoKV0sd2VdLmpvaW4oIiAiKX0oKSxYLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cykpfSxYLmluaGVyaXRzPXkoNTcxNyksWC5fZXh0ZW5kPWZ1bmN0aW9uKHNlLHdlKXtpZighd2V8fCFWKHdl''@;'; put 'put ''KSlyZXR1cm4gc2U7Zm9yKHZhciBVZT1PYmplY3Qua2V5cyh3ZSksSmU9VWUubGVuZ3RoO0plLS07KXNlW1VlW0plXV09d2VbVWVbSmVdXTtyZXR1cm4gc2V9O3ZhciBBPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9uIGFl''@;'; put 'put ''KHNlLHdlKXtpZighc2Upe3ZhciBVZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO1VlLnJlYXNvbj1zZSxzZT1VZX1yZXR1cm4gd2Uoc2UpfVgucHJvbWlzaWZ5PWZ1bmN0aW9uKHdlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygd2UpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYoQSYmd2VbQV0pe3ZhciBVZTtpZigiZnVuY3Rpb24iIT10eXBlb2YoVWU9d2VbQV0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidXRpbC5wcm9taXNpZnkuY3VzdG9t''@;'; put 'put ''IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFVlLEEse3ZhbHVlOlVlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksVWV9ZnVuY3Rpb24gVWUoKXtmb3IodmFyIEplLG90LHhlPW5ldyBQ''@;'; put 'put ''cm9taXNlKGZ1bmN0aW9uKHplLERlKXtKZT16ZSxvdD1EZX0pLHZlPVtdLFhlPTA7WGU8YXJndW1lbnRzLmxlbmd0aDtYZSsrKXZlLnB1c2goYXJndW1lbnRzW1hlXSk7dmUucHVzaChmdW5jdGlvbih6ZSxEZSl7emU/b3QoemUpOkplKERlKX0pO3RyeXt3ZS5hcHBseSh0aGlzLHZlKX1jYXRj''@;'; put 'put ''aCh6ZSl7b3QoemUpfXJldHVybiB4ZX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFVlLE9iamVjdC5nZXRQcm90b3R5cGVPZih3ZSkpLEEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFVlLGcod2UpKX0sWC5wcm9taXNpZnkuY3VzdG9tPUEsWC5jYWxsYmFja2lmeT1mdW5jdGlvbiB0ZShzZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUg''@;'; put 'put ''b2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIHdlKCl7Zm9yKHZhciBVZT1bXSxKZT0wO0plPGFyZ3VtZW50cy5sZW5ndGg7SmUrKylVZS5wdXNoKGFyZ3VtZW50c1tKZV0pO3ZhciBvdD1VZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygb3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhl''@;'; put 'put ''IGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIHhlPXRoaXMsdmU9ZnVuY3Rpb24oKXtyZXR1cm4gb3QuYXBwbHkoeGUsYXJndW1lbnRzKX07c2UuYXBwbHkodGhpcyxVZSkudGhlbihmdW5jdGlvbihYZSl7SS5uZXh0VGljayh2ZS5iaW5kKG51bGwsbnVsbCxY''@;'; put 'put ''ZSkpfSxmdW5jdGlvbihYZSl7SS5uZXh0VGljayhhZS5iaW5kKG51bGwsWGUsdmUpKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yod2UsT2JqZWN0LmdldFByb3RvdHlwZU9mKHNlKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2UsZyhzZSkpLHdlfX0sNDgxOih1ZSxYLHkpPT57''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmV4cG9ydHMuaXNfdXJpPWcsSS5leHBvcnRzLmlzX2h0dHBfdXJpPUIsSS5leHBvcnRzLmlzX2h0dHBzX3VyaT13LEkuZXhwb3J0cy5pc193ZWJfdXJpPVAsSS5leHBvcnRzLmlzVXJpPWcsSS5leHBvcnRzLmlzSHR0cFVyaT1CLEkuZXhwb3J0''@;'; put 'put ''cy5pc0h0dHBzVXJpPXcsSS5leHBvcnRzLmlzV2ViVXJpPVA7dmFyIF89ZnVuY3Rpb24oRil7cmV0dXJuIEYubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIGcoRil7aWYoRiYmIS9b''@;'; put 'put ''XmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChGKSYmIS8lW14wLTlhLWZdL2kudGVzdChGKSYmIS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KEYpKXt2YXIgTyxOLEwsSyxVLHo9IiIsVz0iIjtpZihOPShPPV8oRikp''@;'; put 'put ''WzJdLEw9T1szXSxLPU9bNF0sVT1PWzVdLCh6PU9bMV0pJiZ6Lmxlbmd0aCYmTC5sZW5ndGg+PTApe2lmKE4mJk4ubGVuZ3RoKXtpZigwIT09TC5sZW5ndGgmJiEvXlwvLy50ZXN0KEwpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChMKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wt''@;'; put 'put ''XC5dKiQvLnRlc3Qoei50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gVys9eisiOiIsTiYmTi5sZW5ndGgmJihXKz0iLy8iK04pLFcrPUwsSyYmSy5sZW5ndGgmJihXKz0iPyIrSyksVSYmVS5sZW5ndGgmJihXKz0iIyIrVSksV319fWZ1bmN0aW9uIEIoRixPKXtpZihnKEYpKXt2YXIgeixLLFcsWSxO''@;'; put 'put ''PSIiLEw9IiIsVT0iIixxPSIiO2lmKEw9KHo9XyhGKSlbMl0sSz16WzNdLFc9els0XSxZPXpbNV0sTj16WzFdKXtpZihPKXtpZigiaHR0cHMiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKEwpcmV0dXJuLzooXGQrKSQv''@;'; put 'put ''LnRlc3QoTCkmJihVPUwubWF0Y2goLzooXGQrKSQvKVswXSxMPUwucmVwbGFjZSgvOlxkKyQvLCIiKSkscSs9TisiOiIscSs9Ii8vIitMLFUmJihxKz1VKSxxKz1LLFcmJlcubGVuZ3RoJiYocSs9Ij8iK1cpLFkmJlkubGVuZ3RoJiYocSs9IiMiK1kpLHF9fX1mdW5jdGlvbiB3KEYpe3JldHVy''@;'; put 'put ''biBCKEYsITApfWZ1bmN0aW9uIFAoRil7cmV0dXJuIEIoRil8fHcoRil9fSh1ZT15Lm5tZCh1ZSkpfSw1MTQwOihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzKT0+e3ZhciBpbmRleE9mPWZ1bmN0aW9uKHVlLFgpe2lmKHVlLmluZGV4T2YpcmV0dXJuIHVlLmluZGV4T2YoWCk7Zm9y''@;'; put 'put ''KHZhciB5PTA7eTx1ZS5sZW5ndGg7eSsrKWlmKHVlW3ldPT09WClyZXR1cm4geTtyZXR1cm4tMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24odWUpe2lmKE9iamVjdC5rZXlzKXJldHVybiBPYmplY3Qua2V5cyh1ZSk7dmFyIFg9W107Zm9yKHZhciB5IGluIHVlKVgucHVzaCh5KTtyZXR1cm4gWH0s''@;'; put 'put ''Zm9yRWFjaD1mdW5jdGlvbih1ZSxYKXtpZih1ZS5mb3JFYWNoKXJldHVybiB1ZS5mb3JFYWNoKFgpO2Zvcih2YXIgeT0wO3k8dWUubGVuZ3RoO3krKylYKHVlW3ldLHksdWUpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl8iLHt9''@;'; put 'put ''KSxmdW5jdGlvbih1ZSxYLHkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSxYLHt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSl9fWNhdGNoe3JldHVybiBmdW5jdGlvbihYLHksSSl7WFt5XT1JfX19KCksZ2xvYmFscz1bIkFycmF5IiwiQm9vbGVh''@;'; put 'put ''biIsIkRhdGUiLCJFcnJvciIsIkV2YWxFcnJvciIsIkZ1bmN0aW9uIiwiSW5maW5pdHkiLCJKU09OIiwiTWF0aCIsIk5hTiIsIk51bWJlciIsIk9iamVjdCIsIlJhbmdlRXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIlJlZ0V4cCIsIlN0cmluZyIsIlN5bnRheEVycm9yIiwiVHlwZUVycm9yIiwi''@;'; put 'put ''VVJJRXJyb3IiLCJkZWNvZGVVUkkiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJldmFsIiwiaXNGaW5pdGUiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsInVuZXNjYXBlIl07ZnVuY3Rp''@;'; put 'put ''b24gQ29udGV4dCgpe31Db250ZXh0LnByb3RvdHlwZT17fTt2YXIgU2NyaXB0PWV4cG9ydHMuU2NyaXB0PWZ1bmN0aW9uKFgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNjcmlwdCkpcmV0dXJuIG5ldyBTY3JpcHQoWCk7dGhpcy5jb2RlPVh9O1NjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0''@;'; put 'put ''PWZ1bmN0aW9uKHVlKXtpZighKHVlIGluc3RhbmNlb2YgQ29udGV4dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigibmVlZHMgYSAnY29udGV4dCcgYXJndW1lbnQuIik7dmFyIFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7WC5zdHlsZXx8KFguc3R5bGU9e30pLFguc3R5bGUuZGlz''@;'; put 'put ''cGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChYKTt2YXIgeT1YLmNvbnRlbnRXaW5kb3csST15LmV2YWwsXz15LmV4ZWNTY3JpcHQ7IUkmJl8mJihfLmNhbGwoeSwibnVsbCIpLEk9eS5ldmFsKSxmb3JFYWNoKE9iamVjdF9rZXlzKHVlKSxmdW5jdGlvbih3KXt5W3ddPXVl''@;'; put 'put ''W3ddfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHcpe3VlW3ddJiYoeVt3XT11ZVt3XSl9KTt2YXIgZz1PYmplY3Rfa2V5cyh5KSxCPUkuY2FsbCh5LHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMoeSksZnVuY3Rpb24odyl7KHcgaW4gdWV8fC0xPT09aW5kZXhPZihn''@;'; put 'put ''LHcpKSYmKHVlW3ddPXlbd10pfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHcpe3cgaW4gdWV8fGRlZmluZVByb3AodWUsdyx5W3ddKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoWCksQn0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24odWUpe3ZhciBYPVNjcmlwdC5jcmVhdGVDb250ZXh0KHVlKSx5PXRoaXMucnVuSW5Db250ZXh0KFgpO3JldHVybiB1ZSYmZm9yRWFjaChPYmplY3Rfa2V5cyhYKSxmdW5jdGlvbihJKXt1''@;'; put 'put ''ZVtJXT1YW0ldfSkseX0sZm9yRWFjaChPYmplY3Rfa2V5cyhTY3JpcHQucHJvdG90eXBlKSxmdW5jdGlvbih1ZSl7ZXhwb3J0c1t1ZV09U2NyaXB0W3VlXT1mdW5jdGlvbihYKXt2YXIgeT1TY3JpcHQoWCk7cmV0dXJuIHlbdWVdLmFwcGx5KHksW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkp''@;'; put 'put ''fX0pLGV4cG9ydHMuaXNDb250ZXh0PWZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUgaW5zdGFuY2VvZiBDb250ZXh0fSxleHBvcnRzLmNyZWF0ZVNjcmlwdD1mdW5jdGlvbih1ZSl7cmV0dXJuIGV4cG9ydHMuU2NyaXB0KHVlKX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250''@;'; put 'put ''ZXh0PWZ1bmN0aW9uKHVlKXt2YXIgWD1uZXcgQ29udGV4dDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHVlJiZmb3JFYWNoKE9iamVjdF9rZXlzKHVlKSxmdW5jdGlvbih5KXtYW3ldPXVlW3ldfSksWH19LDY0MzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MDI5KSxfPXkoMzA4''@;'; put 'put ''MyksZz15KDU1NTkpLEI9eSg3Mzc5KSx3PXkoNzI5NiksUD1CKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksRj15KDY0MTApKCksTz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/eS5nOmdsb2JhbFRoaXMsej1fKCksTj1CKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksTD1PYmplY3QuZ2V0''@;'; put 'put ''UHJvdG90eXBlT2YsSz1CKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxmdW5jdGlvbihlZSxKKXtmb3IodmFyIG5lPTA7bmU8ZWUubGVuZ3RoO25lKz0xKWlmKGVlW25lXT09PUopcmV0dXJuIG5lO3JldHVybi0xfSxVPXtfX3Byb3RvX186bnVsbH07SSh6LEYmJncmJkw/ZnVuY3Rp''@;'; put 'put ''b24ocSl7dmFyIGVlPW5ldyBPW3FdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBlZSl7dmFyIEo9TChlZSksbmU9dyhKLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIW5lKXt2YXIgaWU9TChKKTtuZT13KGllLFN5bWJvbC50b1N0cmluZ1RhZyl9VVsiJCIrcV09ZyhuZS5nZXQpfX06ZnVuY3Rp''@;'; put 'put ''b24ocSl7dmFyIGVlPW5ldyBPW3FdLEo9ZWUuc2xpY2V8fGVlLnNldDtKJiYoVVsiJCIrcV09ZyhKKSl9KSx1ZS5leHBvcnRzPWZ1bmN0aW9uKGVlKXtpZighZWV8fCJvYmplY3QiIT10eXBlb2YgZWUpcmV0dXJuITE7aWYoIUYpe3ZhciBKPU4oUChlZSksOCwtMSk7cmV0dXJuIEsoeixKKT4t''@;'; put 'put ''MT9KOiJPYmplY3QiPT09SiYmZnVuY3Rpb24oZWUpe3ZhciBKPSExO3JldHVybiBJKFUsZnVuY3Rpb24obmUsaWUpe2lmKCFKKXRyeXtuZShlZSksSj1OKGllLDEpfWNhdGNoe319KSxKfShlZSl9cmV0dXJuIHc/ZnVuY3Rpb24oZWUpe3ZhciBKPSExO3JldHVybiBJKFUsZnVuY3Rpb24obmUs''@;'; put 'put ''aWUpe2lmKCFKKXRyeXsiJCIrbmUoZWUpPT09aWUmJihKPU4oaWUsMSkpfWNhdGNoe319KSxKfShlZSk6bnVsbH19LDg2NDY6KCk9Pnt9LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sNjQxOTooKT0+e30sNjM1MzooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2''@;'; put 'put ''ODooKT0+e30sNTQ0MzooKT0+e30sNDEyOTooKT0+e30sNjYxOTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sODM3MzooKT0+e30sMzA4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk5MDgpLF89dHlwZW9mIGdsb2JhbFRoaXM+InUiP3kuZzpn''@;'; put 'put ''bG9iYWxUaGlzO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEI9W10sdz0wO3c8SS5sZW5ndGg7dysrKSJmdW5jdGlvbiI9PXR5cGVvZiBfW0lbd11dJiYoQltCLmxlbmd0aF09SVt3XSk7cmV0dXJuIEJ9fSw3MjE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSks''@;'; put 'put ''Xz15KDg3NjQpLkJ1ZmZlcixnPXkoNTEwOCk7ZnVuY3Rpb24gQihTdCxCdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN0LmFwcGx5KEJ0LGFyZ3VtZW50cyl9fWNvbnN0e3RvU3RyaW5nOnd9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlB9PU9iamVjdCxGPShTdD0+QnQ9''@;'; put 'put ''Pntjb25zdCBfbj13LmNhbGwoQnQpO3JldHVybiBTdFtfbl18fChTdFtfbl09X24uc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxPPVN0PT4oU3Q9U3QudG9Mb3dlckNhc2UoKSxCdD0+RihCdCk9PT1TdCksej1TdD0+QnQ9PnR5cGVvZiBCdD09PVN0''@;'; put 'put ''LHtpc0FycmF5Ok59PUFycmF5LEw9eigidW5kZWZpbmVkIiksVT1PKCJBcnJheUJ1ZmZlciIpLFk9eigic3RyaW5nIikscT16KCJmdW5jdGlvbiIpLGVlPXooIm51bWJlciIpLEo9U3Q9Pm51bGwhPT1TdCYmIm9iamVjdCI9PXR5cGVvZiBTdCxpZT1TdD0+e2lmKCJvYmplY3QiIT09RihTdCkp''@;'; put 'put ''cmV0dXJuITE7Y29uc3QgQnQ9UChTdCk7cmV0dXJuIShudWxsIT09QnQmJkJ0IT09T2JqZWN0LnByb3RvdHlwZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihCdCl8fFN5bWJvbC50b1N0cmluZ1RhZyBpbiBTdHx8U3ltYm9sLml0ZXJhdG9yIGluIFN0KX0sbGU9TygiRGF0ZSIpLG1l''@;'; put 'put ''PU8oIkZpbGUiKSxfZT1PKCJCbG9iIiksVGU9TygiRmlsZUxpc3QiKSxWPU8oIlVSTFNlYXJjaFBhcmFtcyIpLFtwLGIseCxDXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChPKTtmdW5jdGlvbiBIKFN0LEJ0LHthbGxPd25LZXlzOl9uPSEx''@;'; put 'put ''fT17fSl7aWYobnVsbD09PVN0fHx0eXBlb2YgU3Q+InUiKXJldHVybjtsZXQgbW4sSW47aWYoIm9iamVjdCIhPXR5cGVvZiBTdCYmKFN0PVtTdF0pLE4oU3QpKWZvcihtbj0wLEluPVN0Lmxlbmd0aDttbjxJbjttbisrKUJ0LmNhbGwobnVsbCxTdFttbl0sbW4sU3QpO2Vsc2V7Y29uc3QgYm49''@;'; put 'put ''X24/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpOk9iamVjdC5rZXlzKFN0KSx1cj1ibi5sZW5ndGg7bGV0IGJpO2Zvcihtbj0wO21uPHVyO21uKyspYmk9Ym5bbW5dLEJ0LmNhbGwobnVsbCxTdFtiaV0sYmksU3QpfX1mdW5jdGlvbiBqKFN0LEJ0KXtCdD1CdC50b0xvd2VyQ2FzZSgp''@;'; put 'put ''O2NvbnN0IF9uPU9iamVjdC5rZXlzKFN0KTtsZXQgSW4sbW49X24ubGVuZ3RoO2Zvcig7bW4tLSA+MDspaWYoSW49X25bbW5dLEJ0PT09SW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gSW47cmV0dXJuIG51bGx9Y29uc3QgRT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Yg''@;'; put 'put ''c2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6eS5nLG09U3Q9PiFMKFN0KSYmU3QhPT1FLG90PShTdD0+QnQ9PlN0JiZCdCBpbnN0YW5jZW9mIFN0KSh0eXBlb2YgVWludDhBcnJheTwidSImJlAoVWludDhBcnJheSkpLFhlPU8oIkhUTUxGb3JtRWxlbWVudCIpLERlPSgo''@;'; put 'put ''e2hhc093blByb3BlcnR5OlN0fSk9PihCdCxfbik9PlN0LmNhbGwoQnQsX24pKShPYmplY3QucHJvdG90eXBlKSxGZT1PKCJSZWdFeHAiKSxPZT0oU3QsQnQpPT57Y29uc3QgX249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoU3QpLG1uPXt9O0goX24sKEluLGJuKT0+e2xldCB1''@;'; put 'put ''cjshMSE9PSh1cj1CdChJbixibixTdCkpJiYobW5bYm5dPXVyfHxJbil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTdCxtbil9LFFlPU8oIkFzeW5jRnVuY3Rpb24iKSx5dD0oU3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSxCdD1xKEUucG9zdE1lc3NhZ2UpLFN0P3NldElt''@;'; put 'put ''bWVkaWF0ZTpCdD8oX249YGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLG1uPVtdLEUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6SW4sZGF0YTpibn0pPT57SW49PT1FJiZibj09PV9uJiZtbi5sZW5ndGgmJm1uLnNoaWZ0KCkoKX0sITEpLEluPT57bW4ucHVzaChJbiksRS5w''@;'; put 'put ''b3N0TWVzc2FnZShfbiwiKiIpfSk6X249PnNldFRpbWVvdXQoX24pKSxNdD10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoRSk6dHlwZW9mIEk8InUiJiZJLm5leHRUaWNrfHx5dDt2YXIgU3QsQnQsX24sbW4sRHQ9e2lzQXJyYXk6Tixpc0FycmF5QnVmZmVy''@;'; put 'put ''OlUsaXNCdWZmZXI6ZnVuY3Rpb24gSyhTdCl7cmV0dXJuIG51bGwhPT1TdCYmIUwoU3QpJiZudWxsIT09U3QuY29uc3RydWN0b3ImJiFMKFN0LmNvbnN0cnVjdG9yKSYmcShTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJlN0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKFN0KX0saXNGb3JtRGF0YTpT''@;'; put 'put ''dD0+e2xldCBCdDtyZXR1cm4gU3QmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJlN0IGluc3RhbmNlb2YgRm9ybURhdGF8fHEoU3QuYXBwZW5kKSYmKCJmb3JtZGF0YSI9PT0oQnQ9RihTdCkpfHwib2JqZWN0Ij09PUJ0JiZxKFN0LnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFd''@;'; put 'put ''Ij09PVN0LnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24gVyhTdCl7bGV0IEJ0O3JldHVybiBCdD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KFN0KTpTdCYmU3QuYnVmZmVyJiZVKFN0LmJ1ZmZlciks''@;'; put 'put ''QnR9LGlzU3RyaW5nOlksaXNOdW1iZXI6ZWUsaXNCb29sZWFuOlN0PT4hMD09PVN0fHwhMT09PVN0LGlzT2JqZWN0OkosaXNQbGFpbk9iamVjdDppZSxpc1JlYWRhYmxlU3RyZWFtOnAsaXNSZXF1ZXN0OmIsaXNSZXNwb25zZTp4LGlzSGVhZGVyczpDLGlzVW5kZWZpbmVkOkwsaXNEYXRlOmxl''@;'; put 'put ''LGlzRmlsZTptZSxpc0Jsb2I6X2UsaXNSZWdFeHA6RmUsaXNGdW5jdGlvbjpxLGlzU3RyZWFtOlN0PT5KKFN0KSYmcShTdC5waXBlKSxpc1VSTFNlYXJjaFBhcmFtczpWLGlzVHlwZWRBcnJheTpvdCxpc0ZpbGVMaXN0OlRlLGZvckVhY2g6SCxtZXJnZTpmdW5jdGlvbiBBKCl7Y29uc3R7Y2Fz''@;'; put 'put ''ZWxlc3M6U3R9PW0odGhpcykmJnRoaXN8fHt9LEJ0PXt9LF9uPShtbixJbik9Pntjb25zdCBibj1TdCYmaihCdCxJbil8fEluO0J0W2JuXT1pZShCdFtibl0pJiZpZShtbik/QShCdFtibl0sbW4pOmllKG1uKT9BKHt9LG1uKTpOKG1uKT9tbi5zbGljZSgpOm1ufTtmb3IobGV0IG1uPTAsSW49''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDttbjxJbjttbisrKWFyZ3VtZW50c1ttbl0mJkgoYXJndW1lbnRzW21uXSxfbik7cmV0dXJuIEJ0fSxleHRlbmQ6KFN0LEJ0LF9uLHthbGxPd25LZXlzOm1ufT17fSk9PihIKEJ0LChJbixibik9PntTdFtibl09X24mJnEoSW4pP0IoSW4sX24pOklufSx7YWxsT3du''@;'; put 'put ''S2V5czptbn0pLFN0KSx0cmltOlN0PT5TdC50cmltP1N0LnRyaW0oKTpTdC5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIiksc3RyaXBCT006U3Q9Pig2NTI3OT09PVN0LmNoYXJDb2RlQXQoMCkmJihTdD1TdC5zbGljZSgxKSksU3QpLGluaGVyaXRzOihT''@;'; put 'put ''dCxCdCxfbixtbik9PntTdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCdC5wcm90b3R5cGUsbW4pLFN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TdCxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsInN1cGVyIix7dmFsdWU6QnQucHJvdG90eXBlfSksX24mJk9iamVjdC5hc3NpZ24oU3QucHJv''@;'; put 'put ''dG90eXBlLF9uKX0sdG9GbGF0T2JqZWN0OihTdCxCdCxfbixtbik9PntsZXQgSW4sYm4sdXI7Y29uc3QgYmk9e307aWYoQnQ9QnR8fHt9LG51bGw9PVN0KXJldHVybiBCdDtkb3tmb3IoSW49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpLGJuPUluLmxlbmd0aDtibi0tID4wOyl1cj1J''@;'; put 'put ''bltibl0sKCFtbnx8bW4odXIsU3QsQnQpKSYmIWJpW3VyXSYmKEJ0W3VyXT1TdFt1cl0sYmlbdXJdPSEwKTtTdD0hMSE9PV9uJiZQKFN0KX13aGlsZShTdCYmKCFfbnx8X24oU3QsQnQpKSYmU3QhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gQnR9LGtpbmRPZjpGLGtpbmRPZlRlc3Q6Tyxl''@;'; put 'put ''bmRzV2l0aDooU3QsQnQsX24pPT57U3Q9U3RyaW5nKFN0KSwodm9pZCAwPT09X258fF9uPlN0Lmxlbmd0aCkmJihfbj1TdC5sZW5ndGgpO2NvbnN0IG1uPVN0LmluZGV4T2YoQnQsX24tPUJ0Lmxlbmd0aCk7cmV0dXJuLTEhPT1tbiYmbW49PT1fbn0sdG9BcnJheTpTdD0+e2lmKCFTdClyZXR1''@;'; put 'put ''cm4gbnVsbDtpZihOKFN0KSlyZXR1cm4gU3Q7bGV0IEJ0PVN0Lmxlbmd0aDtpZighZWUoQnQpKXJldHVybiBudWxsO2NvbnN0IF9uPW5ldyBBcnJheShCdCk7Zm9yKDtCdC0tID4wOylfbltCdF09U3RbQnRdO3JldHVybiBfbn0sZm9yRWFjaEVudHJ5OihTdCxCdCk9Pntjb25zdCBtbj0oU3Qm''@;'; put 'put ''JlN0W1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoU3QpO2xldCBJbjtmb3IoOyhJbj1tbi5uZXh0KCkpJiYhSW4uZG9uZTspe2NvbnN0IGJuPUluLnZhbHVlO0J0LmNhbGwoU3QsYm5bMF0sYm5bMV0pfX0sbWF0Y2hBbGw6KFN0LEJ0KT0+e2xldCBfbjtjb25zdCBtbj1bXTtmb3IoO251bGwhPT0o''@;'; put 'put ''X249U3QuZXhlYyhCdCkpOyltbi5wdXNoKF9uKTtyZXR1cm4gbW59LGlzSFRNTEZvcm06WGUsaGFzT3duUHJvcGVydHk6RGUsaGFzT3duUHJvcDpEZSxyZWR1Y2VEZXNjcmlwdG9yczpPZSxmcmVlemVNZXRob2RzOlN0PT57T2UoU3QsKEJ0LF9uKT0+e2lmKHEoU3QpJiYtMSE9PVsiYXJndW1l''@;'; put 'put ''bnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihfbikpcmV0dXJuITE7aWYocShTdFtfbl0pKXtpZihCdC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBCdClyZXR1cm4gdm9pZChCdC53cml0YWJsZT0hMSk7QnQuc2V0fHwoQnQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3Qg''@;'; put 'put ''cmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK19uKyInIil9KX19KX0sdG9PYmplY3RTZXQ6KFN0LEJ0KT0+e2NvbnN0IF9uPXt9LG1uPUluPT57SW4uZm9yRWFjaChibj0+e19uW2JuXT0hMH0pfTtyZXR1cm4gTihTdCk/bW4oU3QpOm1uKFN0cmluZyhTdCkuc3BsaXQoQnQpKSxfbn0sdG9D''@;'; put 'put ''YW1lbENhc2U6U3Q9PlN0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihfbixtbixJbil7cmV0dXJuIG1uLnRvVXBwZXJDYXNlKCkrSW59KSxub29wOigpPT57fSx0b0Zpbml0ZU51bWJlcjooU3QsQnQpPT5udWxsIT1TdCYmTnVtYmVyLmlz''@;'; put 'put ''RmluaXRlKFN0PStTdCk/U3Q6QnQsZmluZEtleTpqLGdsb2JhbDpFLGlzQ29udGV4dERlZmluZWQ6bSxpc1NwZWNDb21wbGlhbnRGb3JtOmZ1bmN0aW9uIF90KFN0KXtyZXR1cm4hIShTdCYmcShTdC5hcHBlbmQpJiYiRm9ybURhdGEiPT09U3RbU3ltYm9sLnRvU3RyaW5nVGFnXSYmU3RbU3lt''@;'; put 'put ''Ym9sLml0ZXJhdG9yXSl9LHRvSlNPTk9iamVjdDpTdD0+e2NvbnN0IEJ0PW5ldyBBcnJheSgxMCksX249KG1uLEluKT0+e2lmKEoobW4pKXtpZihCdC5pbmRleE9mKG1uKT49MClyZXR1cm47aWYoISgidG9KU09OImluIG1uKSl7QnRbSW5dPW1uO2NvbnN0IGJuPU4obW4pP1tdOnt9O3JldHVy''@;'; put 'put ''biBIKG1uLCh1cixiaSk9Pntjb25zdCBGcj1fbih1cixJbisxKTshTChGcikmJihibltiaV09RnIpfSksQnRbSW5dPXZvaWQgMCxibn19cmV0dXJuIG1ufTtyZXR1cm4gX24oU3QsMCl9LGlzQXN5bmNGbjpRZSxpc1RoZW5hYmxlOlN0PT5TdCYmKEooU3QpfHxxKFN0KSkmJnEoU3QudGhlbikm''@;'; put 'put ''JnEoU3QuY2F0Y2gpLHNldEltbWVkaWF0ZTp5dCxhc2FwOk10fTtmdW5jdGlvbiBpdChTdCxCdCxfbixtbixJbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9''@;'; put 'put ''KG5ldyBFcnJvcikuc3RhY2ssdGhpcy5tZXNzYWdlPVN0LHRoaXMubmFtZT0iQXhpb3NFcnJvciIsQnQmJih0aGlzLmNvZGU9QnQpLF9uJiYodGhpcy5jb25maWc9X24pLG1uJiYodGhpcy5yZXF1ZXN0PW1uKSxJbiYmKHRoaXMucmVzcG9uc2U9SW4sdGhpcy5zdGF0dXM9SW4uc3RhdHVzP0lu''@;'; put 'put ''LnN0YXR1czpudWxsKX1EdC5pbmhlcml0cyhpdCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5h''@;'; put 'put ''bWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkR0LnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMuc3RhdHVzfX19KTtjb25zdCAkZT1pdC5w''@;'; put 'put ''cm90b3R5cGUsdHQ9e307ZnVuY3Rpb24gdXQoU3Qpe3JldHVybiBEdC5pc1BsYWluT2JqZWN0KFN0KXx8RHQuaXNBcnJheShTdCl9ZnVuY3Rpb24gcXQoU3Qpe3JldHVybiBEdC5lbmRzV2l0aChTdCwiW10iKT9TdC5zbGljZSgwLC0yKTpTdH1mdW5jdGlvbiBSdChTdCxCdCxfbil7cmV0dXJu''@;'; put 'put ''IFN0P1N0LmNvbmNhdChCdCkubWFwKGZ1bmN0aW9uKEluLGJuKXtyZXR1cm4gSW49cXQoSW4pLCFfbiYmYm4/IlsiK0luKyJdIjpJbn0pLmpvaW4oX24/Ii4iOiIiKTpCdH1bIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQi''@;'; put 'put ''LCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKFN0PT57dHRb''@;'; put 'put ''U3RdPXt2YWx1ZTpTdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpdCx0dCksT2JqZWN0LmRlZmluZVByb3BlcnR5KCRlLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLGl0LmZyb209KFN0LEJ0LF9uLG1uLEluLGJuKT0+e2NvbnN0IHVyPU9iamVjdC5jcmVhdGUoJGUpO3JldHVybiBE''@;'; put 'put ''dC50b0ZsYXRPYmplY3QoU3QsdXIsZnVuY3Rpb24oRnIpe3JldHVybiBGciE9PUVycm9yLnByb3RvdHlwZX0sYmk9PiJpc0F4aW9zRXJyb3IiIT09YmkpLGl0LmNhbGwodXIsU3QubWVzc2FnZSxCdCxfbixtbixJbiksdXIuY2F1c2U9U3QsdXIubmFtZT1TdC5uYW1lLGJuJiZPYmplY3QuYXNz''@;'; put 'put ''aWduKHVyLGJuKSx1cn07Y29uc3QgY2k9RHQudG9GbGF0T2JqZWN0KER0LHt9LG51bGwsZnVuY3Rpb24oQnQpe3JldHVybi9eaXNbQS1aXS8udGVzdChCdCl9KTtmdW5jdGlvbiBRdChTdCxCdCxfbil7aWYoIUR0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVz''@;'; put 'put ''dCBiZSBhbiBvYmplY3QiKTtCdD1CdHx8bmV3IEZvcm1EYXRhO2NvbnN0IG1uPShfbj1EdC50b0ZsYXRPYmplY3QoX24se21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihfbyxqaSl7cmV0dXJuIUR0LmlzVW5kZWZpbmVkKGppW19vXSl9KSkubWV0YVRva2Vu''@;'; put 'put ''cyxJbj1fbi52aXNpdG9yfHxvYSxibj1fbi5kb3RzLHVyPV9uLmluZGV4ZXMsRnI9KF9uLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkR0LmlzU3BlY0NvbXBsaWFudEZvcm0oQnQpO2lmKCFEdC5pc0Z1bmN0aW9uKEluKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3Qg''@;'; put 'put ''YmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIHRhKHRvKXtpZihudWxsPT09dG8pcmV0dXJuIiI7aWYoRHQuaXNEYXRlKHRvKSlyZXR1cm4gdG8udG9JU09TdHJpbmcoKTtpZighRnImJkR0LmlzQmxvYih0bykpdGhyb3cgbmV3IGl0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZl''@;'; put 'put ''ciBpbnN0ZWFkLiIpO3JldHVybiBEdC5pc0FycmF5QnVmZmVyKHRvKXx8RHQuaXNUeXBlZEFycmF5KHRvKT9GciYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW3RvXSk6Xy5mcm9tKHRvKTp0b31mdW5jdGlvbiBvYSh0byxfbyxqaSl7bGV0IFBjPXRvO2lmKHRvJiYhamkmJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgdG8paWYoRHQuZW5kc1dpdGgoX28sInt9IikpX289bW4/X286X28uc2xpY2UoMCwtMiksdG89SlNPTi5zdHJpbmdpZnkodG8pO2Vsc2UgaWYoRHQuaXNBcnJheSh0bykmJmZ1bmN0aW9uIFB0KFN0KXtyZXR1cm4gRHQuaXNBcnJheShTdCkmJiFTdC5zb21lKHV0KX0o''@;'; put 'put ''dG8pfHwoRHQuaXNGaWxlTGlzdCh0byl8fER0LmVuZHNXaXRoKF9vLCJbXSIpKSYmKFBjPUR0LnRvQXJyYXkodG8pKSlyZXR1cm4gX289cXQoX28pLFBjLmZvckVhY2goZnVuY3Rpb24oQ2EsVGEpeyFEdC5pc1VuZGVmaW5lZChDYSkmJm51bGwhPT1DYSYmQnQuYXBwZW5kKCEwPT09dXI/UnQo''@;'; put 'put ''W19vXSxUYSxibik6bnVsbD09PXVyP19vOl9vKyJbXSIsdGEoQ2EpKX0pLCExO3JldHVybiEhdXQodG8pfHwoQnQuYXBwZW5kKFJ0KGppLF9vLGJuKSx0YSh0bykpLCExKX1jb25zdCBWYT1bXSwkbz1PYmplY3QuYXNzaWduKGNpLHtkZWZhdWx0VmlzaXRvcjpvYSxjb252ZXJ0VmFsdWU6dGEs''@;'; put 'put ''aXNWaXNpdGFibGU6dXR9KTtpZighRHQuaXNPYmplY3QoU3QpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gWGwodG8sX28pe2lmKCFEdC5pc1VuZGVmaW5lZCh0bykpe2lmKC0xIT09VmEuaW5kZXhPZih0bykpdGhyb3cgRXJy''@;'; put 'put ''b3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK19vLmpvaW4oIi4iKSk7VmEucHVzaCh0byksRHQuZm9yRWFjaCh0byxmdW5jdGlvbihQYyx6bCl7ITA9PT0oIShEdC5pc1VuZGVmaW5lZChQYyl8fG51bGw9PT1QYykmJkluLmNhbGwoQnQsUGMsRHQuaXNTdHJpbmcoemwpP3ps''@;'; put 'put ''LnRyaW0oKTp6bCxfbywkbykpJiZYbChQYyxfbz9fby5jb25jYXQoemwpOlt6bF0pfSksVmEucG9wKCl9fShTdCksQnR9ZnVuY3Rpb24gc24oU3Qpe2NvbnN0IEJ0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAi''@;'; put 'put ''fTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0KS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihtbil7cmV0dXJuIEJ0W21uXX0pfWZ1bmN0aW9uIFJpKFN0LEJ0KXt0aGlzLl9wYWlycz1bXSxTdCYmUXQoU3QsdGhpcyxCdCl9Y29uc3QgaG49UmkucHJvdG90eXBlO2Z1''@;'; put 'put ''bmN0aW9uIGZ0KFN0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0KS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJd''@;'; put 'put ''Iil9ZnVuY3Rpb24gT3IoU3QsQnQsX24pe2lmKCFCdClyZXR1cm4gU3Q7Y29uc3QgbW49X24mJl9uLmVuY29kZXx8ZnQ7RHQuaXNGdW5jdGlvbihfbikmJihfbj17c2VyaWFsaXplOl9ufSk7Y29uc3QgSW49X24mJl9uLnNlcmlhbGl6ZTtsZXQgYm47aWYoYm49SW4/SW4oQnQsX24pOkR0Lmlz''@;'; put 'put ''VVJMU2VhcmNoUGFyYW1zKEJ0KT9CdC50b1N0cmluZygpOm5ldyBSaShCdCxfbikudG9TdHJpbmcobW4pLGJuKXtjb25zdCB1cj1TdC5pbmRleE9mKCIjIik7LTEhPT11ciYmKFN0PVN0LnNsaWNlKDAsdXIpKSxTdCs9KC0xPT09U3QuaW5kZXhPZigiPyIpPyI/IjoiJiIpK2JufXJldHVybiBT''@;'; put 'put ''dH1obi5hcHBlbmQ9ZnVuY3Rpb24oQnQsX24pe3RoaXMuX3BhaXJzLnB1c2goW0J0LF9uXSl9LGhuLnRvU3RyaW5nPWZ1bmN0aW9uKEJ0KXtjb25zdCBfbj1CdD9mdW5jdGlvbihtbil7cmV0dXJuIEJ0LmNhbGwodGhpcyxtbixzbil9OnNuO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rp''@;'; put 'put ''b24oSW4pe3JldHVybiBfbihJblswXSkrIj0iK19uKEluWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEF0PWNsYXNzIFd0e2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoQnQsX24sbW4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpCdCxyZWplY3RlZDpf''@;'; put 'put ''bixzeW5jaHJvbm91czohIW1uJiZtbi5zeW5jaHJvbm91cyxydW5XaGVuOm1uP21uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoQnQpe3RoaXMuaGFuZGxlcnNbQnRdJiYodGhpcy5oYW5kbGVyc1tCdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYo''@;'; put 'put ''dGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChCdCl7RHQuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG1uKXtudWxsIT09bW4mJkJ0KG1uKX0pfX0sUm49e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LFdlPXtp''@;'; put 'put ''c0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOnR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpSaSxGb3JtRGF0YTp0eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGwsQmxvYjp0eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsfSxwcm90b2Nv''@;'; put 'put ''bHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07Y29uc3QgVHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsbnI9Im9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvcnx8dm9pZCAwLGh0PVR0JiYoIW5yfHxbIlJlYWN0''@;'; put 'put ''TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKG5yLnByb2R1Y3QpPDApLHh0PXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyxqbj1UdCYm''@;'; put 'put ''d2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgenQ9ey4uLk9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGhhc0Jyb3dzZXJFbnY6VHQsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52Onh0LGhhc1N0YW5kYXJkQnJvd3NlckVudjpodCxuYXZpZ2F0''@;'; put 'put ''b3I6bnIsb3JpZ2luOmpufSksLi4uV2V9O2Z1bmN0aW9uIElpKFN0KXtmdW5jdGlvbiBCdChfbixtbixJbixibil7bGV0IHVyPV9uW2JuKytdO2lmKCJfX3Byb3RvX18iPT09dXIpcmV0dXJuITA7Y29uc3QgYmk9TnVtYmVyLmlzRmluaXRlKCt1ciksRnI9Ym4+PV9uLmxlbmd0aDtyZXR1cm4g''@;'; put 'put ''dXI9IXVyJiZEdC5pc0FycmF5KEluKT9Jbi5sZW5ndGg6dXIsRnI/KEluW3VyXT1EdC5oYXNPd25Qcm9wKEluLHVyKT9bSW5bdXJdLG1uXTptbiwhYmkpOigoIUluW3VyXXx8IUR0LmlzT2JqZWN0KEluW3VyXSkpJiYoSW5bdXJdPVtdKSxCdChfbixtbixJblt1cl0sYm4pJiZEdC5pc0FycmF5''@;'; put 'put ''KEluW3VyXSkmJihJblt1cl09ZnVuY3Rpb24gZm4oU3Qpe2NvbnN0IEJ0PXt9LF9uPU9iamVjdC5rZXlzKFN0KTtsZXQgbW47Y29uc3QgSW49X24ubGVuZ3RoO2xldCBibjtmb3IobW49MDttbjxJbjttbisrKWJuPV9uW21uXSxCdFtibl09U3RbYm5dO3JldHVybiBCdH0oSW5bdXJdKSksIWJp''@;'; put 'put ''KX1pZihEdC5pc0Zvcm1EYXRhKFN0KSYmRHQuaXNGdW5jdGlvbihTdC5lbnRyaWVzKSl7Y29uc3QgX249e307cmV0dXJuIER0LmZvckVhY2hFbnRyeShTdCwobW4sSW4pPT57QnQoZnVuY3Rpb24gY24oU3Qpe3JldHVybiBEdC5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csU3QpLm1hcChCdD0+''@;'; put 'put ''IltdIj09PUJ0WzBdPyIiOkJ0WzFdfHxCdFswXSl9KG1uKSxJbixfbiwwKX0pLF9ufXJldHVybiBudWxsfWNvbnN0IGVuPXt0cmFuc2l0aW9uYWw6Um4sYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEJ0LF9uKXtjb25zdCBtbj1fbi5n''@;'; put 'put ''ZXRDb250ZW50VHlwZSgpfHwiIixJbj1tbi5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsYm49RHQuaXNPYmplY3QoQnQpO2lmKGJuJiZEdC5pc0hUTUxGb3JtKEJ0KSYmKEJ0PW5ldyBGb3JtRGF0YShCdCkpLER0LmlzRm9ybURhdGEoQnQpKXJldHVybiBJbj9KU09OLnN0cmluZ2lm''@;'; put 'put ''eShJaShCdCkpOkJ0O2lmKER0LmlzQXJyYXlCdWZmZXIoQnQpfHxEdC5pc0J1ZmZlcihCdCl8fER0LmlzU3RyZWFtKEJ0KXx8RHQuaXNGaWxlKEJ0KXx8RHQuaXNCbG9iKEJ0KXx8RHQuaXNSZWFkYWJsZVN0cmVhbShCdCkpcmV0dXJuIEJ0O2lmKER0LmlzQXJyYXlCdWZmZXJWaWV3KEJ0KSly''@;'; put 'put ''ZXR1cm4gQnQuYnVmZmVyO2lmKER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSlyZXR1cm4gX24uc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQnQudG9TdHJpbmcoKTtsZXQgYmk7aWYoYm4pe2lmKG1uLmluZGV4T2Yo''@;'; put 'put ''ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBmdW5jdGlvbiBoaShTdCxCdCl7cmV0dXJuIFF0KFN0LG5ldyB6dC5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKF9uLG1uLEluLGJuKXtyZXR1cm4genQu''@;'; put 'put ''aXNOb2RlJiZEdC5pc0J1ZmZlcihfbik/KHRoaXMuYXBwZW5kKG1uLF9uLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmJuLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJ0KSl9KEJ0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGJpPUR0LmlzRmls''@;'; put 'put ''ZUxpc3QoQnQpKXx8bW4uaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtjb25zdCBGcj10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFF0KGJpP3siZmlsZXNbXSI6QnR9OkJ0LEZyJiZuZXcgRnIsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBibnx8SW4/''@;'; put 'put ''KF9uLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksZnVuY3Rpb24gWHQoU3QsQnQsX24pe2lmKER0LmlzU3RyaW5nKFN0KSl0cnl7cmV0dXJuKEJ0fHxKU09OLnBhcnNlKShTdCksRHQudHJpbShTdCl9Y2F0Y2gobW4pe2lmKCJTeW50YXhFcnJvciIhPT1tbi5uYW1lKXRo''@;'; put 'put ''cm93IG1ufXJldHVybihfbnx8SlNPTi5zdHJpbmdpZnkpKFN0KX0oQnQpKTpCdH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihCdCl7Y29uc3QgX249dGhpcy50cmFuc2l0aW9uYWx8fGVuLnRyYW5zaXRpb25hbCxtbj1fbiYmX24uZm9yY2VkSlNPTlBhcnNpbmcsSW49Impzb24iPT09''@;'; put 'put ''dGhpcy5yZXNwb25zZVR5cGU7aWYoRHQuaXNSZXNwb25zZShCdCl8fER0LmlzUmVhZGFibGVTdHJlYW0oQnQpKXJldHVybiBCdDtpZihCdCYmRHQuaXNTdHJpbmcoQnQpJiYobW4mJiF0aGlzLnJlc3BvbnNlVHlwZXx8SW4pKXtjb25zdCB1cj0hKF9uJiZfbi5zaWxlbnRKU09OUGFyc2luZykm''@;'; put 'put ''JkluO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShCdCl9Y2F0Y2goYmkpe2lmKHVyKXRocm93IlN5bnRheEVycm9yIj09PWJpLm5hbWU/aXQuZnJvbShiaSxpdC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpiaX19cmV0dXJuIEJ0fV0sdGltZW91dDowLHhzcmZDb29r''@;'; put 'put ''aWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp6dC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6enQuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlv''@;'; put 'put ''bihCdCl7cmV0dXJuIEJ0Pj0yMDAmJkJ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0R0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBh''@;'; put 'put ''dGNoIl0sU3Q9Pntlbi5oZWFkZXJzW1N0XT17fX0pO3ZhciB1YT1lbjtjb25zdCBFaT1EdC50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1z''@;'; put 'put ''aW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxXbj1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uICRp''@;'; put 'put ''KFN0KXtyZXR1cm4gU3QmJlN0cmluZyhTdCkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZWkoU3Qpe3JldHVybiExPT09U3R8fG51bGw9PVN0P1N0OkR0LmlzQXJyYXkoU3QpP1N0Lm1hcChlaSk6U3RyaW5nKFN0KX1mdW5jdGlvbiBOaShTdCxCdCxfbixtbixJbil7aWYoRHQuaXNG''@;'; put 'put ''dW5jdGlvbihtbikpcmV0dXJuIG1uLmNhbGwodGhpcyxCdCxfbik7aWYoSW4mJihCdD1fbiksRHQuaXNTdHJpbmcoQnQpKXtpZihEdC5pc1N0cmluZyhtbikpcmV0dXJuLTEhPT1CdC5pbmRleE9mKG1uKTtpZihEdC5pc1JlZ0V4cChtbikpcmV0dXJuIG1uLnRlc3QoQnQpfX1jbGFzcyBXaXtj''@;'; put 'put ''b25zdHJ1Y3RvcihCdCl7QnQmJnRoaXMuc2V0KEJ0KX1zZXQoQnQsX24sbW4pe2NvbnN0IEluPXRoaXM7ZnVuY3Rpb24gYm4oYmksRnIsdGEpe2NvbnN0IG9hPSRpKEZyKTtpZighb2EpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2Nv''@;'; put 'put ''bnN0IFZhPUR0LmZpbmRLZXkoSW4sb2EpOyghVmF8fHZvaWQgMD09PUluW1ZhXXx8ITA9PT10YXx8dm9pZCAwPT09dGEmJiExIT09SW5bVmFdKSYmKEluW1ZhfHxGcl09ZWkoYmkpKX1jb25zdCB1cj0oYmksRnIpPT5EdC5mb3JFYWNoKGJpLCh0YSxvYSk9PmJuKHRhLG9hLEZyKSk7aWYoRHQu''@;'; put 'put ''aXNQbGFpbk9iamVjdChCdCl8fEJ0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil1cihCdCxfbik7ZWxzZSBpZihEdC5pc1N0cmluZyhCdCkmJihCdD1CdC50cmltKCkpJiYhKFN0PT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KFN0LnRyaW0oKSkpKEJ0KSl1cigo''@;'; put 'put ''U3Q9Pntjb25zdCBCdD17fTtsZXQgX24sbW4sSW47cmV0dXJuIFN0JiZTdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHVyKXtJbj11ci5pbmRleE9mKCI6IiksX249dXIuc3Vic3RyaW5nKDAsSW4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLG1uPXVyLnN1YnN0cmluZyhJbisxKS50cmlt''@;'; put 'put ''KCksISghX258fEJ0W19uXSYmRWlbX25dKSYmKCJzZXQtY29va2llIj09PV9uP0J0W19uXT9CdFtfbl0ucHVzaChtbik6QnRbX25dPVttbl06QnRbX25dPUJ0W19uXT9CdFtfbl0rIiwgIittbjptbil9KSxCdH0pKEJ0KSxfbik7ZWxzZSBpZihEdC5pc0hlYWRlcnMoQnQpKWZvcihjb25zdFti''@;'; put 'put ''aSxGcl1vZiBCdC5lbnRyaWVzKCkpYm4oRnIsYmksbW4pO2Vsc2UgbnVsbCE9QnQmJmJuKF9uLEJ0LG1uKTtyZXR1cm4gdGhpc31nZXQoQnQsX24pe2lmKEJ0PSRpKEJ0KSl7Y29uc3QgbW49RHQuZmluZEtleSh0aGlzLEJ0KTtpZihtbil7Y29uc3QgSW49dGhpc1ttbl07aWYoIV9uKXJldHVy''@;'; put 'put ''biBJbjtpZighMD09PV9uKXJldHVybiBmdW5jdGlvbiBRcihTdCl7Y29uc3QgQnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxfbj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nO2xldCBtbjtmb3IoO21uPV9uLmV4ZWMoU3QpOylCdFttblsxXV09bW5bMl07cmV0dXJuIEJ0fShJbik7''@;'; put 'put ''aWYoRHQuaXNGdW5jdGlvbihfbikpcmV0dXJuIF9uLmNhbGwodGhpcyxJbixtbik7aWYoRHQuaXNSZWdFeHAoX24pKXJldHVybiBfbi5leGVjKEluKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEJ0LF9uKXtpZihC''@;'; put 'put ''dD0kaShCdCkpe2NvbnN0IG1uPUR0LmZpbmRLZXkodGhpcyxCdCk7cmV0dXJuISghbW58fHZvaWQgMD09PXRoaXNbbW5dfHxfbiYmIU5pKDAsdGhpc1ttbl0sbW4sX24pKX1yZXR1cm4hMX1kZWxldGUoQnQsX24pe2NvbnN0IG1uPXRoaXM7bGV0IEluPSExO2Z1bmN0aW9uIGJuKHVyKXtpZih1''@;'; put 'put ''cj0kaSh1cikpe2NvbnN0IGJpPUR0LmZpbmRLZXkobW4sdXIpO2JpJiYoIV9ufHxOaSgwLG1uW2JpXSxiaSxfbikpJiYoZGVsZXRlIG1uW2JpXSxJbj0hMCl9fXJldHVybiBEdC5pc0FycmF5KEJ0KT9CdC5mb3JFYWNoKGJuKTpibihCdCksSW59Y2xlYXIoQnQpe2NvbnN0IF9uPU9iamVjdC5r''@;'; put 'put ''ZXlzKHRoaXMpO2xldCBtbj1fbi5sZW5ndGgsSW49ITE7Zm9yKDttbi0tOyl7Y29uc3QgYm49X25bbW5dOyghQnR8fE5pKDAsdGhpc1tibl0sYm4sQnQsITApKSYmKGRlbGV0ZSB0aGlzW2JuXSxJbj0hMCl9cmV0dXJuIElufW5vcm1hbGl6ZShCdCl7Y29uc3QgX249dGhpcyxtbj17fTtyZXR1''@;'; put 'put ''cm4gRHQuZm9yRWFjaCh0aGlzLChJbixibik9Pntjb25zdCB1cj1EdC5maW5kS2V5KG1uLGJuKTtpZih1cilyZXR1cm4gX25bdXJdPWVpKEluKSx2b2lkIGRlbGV0ZSBfbltibl07Y29uc3QgYmk9QnQ/ZnVuY3Rpb24gRGEoU3Qpe3JldHVybiBTdC50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBs''@;'; put 'put ''YWNlKC8oW2EtelxkXSkoXHcqKS9nLChCdCxfbixtbik9Pl9uLnRvVXBwZXJDYXNlKCkrbW4pfShibik6U3RyaW5nKGJuKS50cmltKCk7YmkhPT1ibiYmZGVsZXRlIF9uW2JuXSxfbltiaV09ZWkoSW4pLG1uW2JpXT0hMH0pLHRoaXN9Y29uY2F0KC4uLkJ0KXtyZXR1cm4gdGhpcy5jb25zdHJ1''@;'; put 'put ''Y3Rvci5jb25jYXQodGhpcywuLi5CdCl9dG9KU09OKEJ0KXtjb25zdCBfbj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEdC5mb3JFYWNoKHRoaXMsKG1uLEluKT0+e251bGwhPW1uJiYhMSE9PW1uJiYoX25bSW5dPUJ0JiZEdC5pc0FycmF5KG1uKT9tbi5qb2luKCIsICIpOm1uKX0pLF9u''@;'; put 'put ''fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtCdCxfbl0pPT5CdCsiOiAiK19uKS5qb2luKCJcbiIpfWdl''@;'; put 'put ''dFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oQnQpe3JldHVybiBCdCBpbnN0YW5jZW9mIHRoaXM/QnQ6bmV3IHRoaXMoQnQpfXN0YXRpYyBjb25jYXQoQnQsLi4uX24pe2NvbnN0IG1uPW5ldyB0aGlzKEJ0KTtyZXR1cm4gX24uZm9yRWFj''@;'; put 'put ''aChJbj0+bW4uc2V0KEluKSksbW59c3RhdGljIGFjY2Vzc29yKEJ0KXtjb25zdCBtbj0odGhpc1tXbl09dGhpc1tXbl09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxJbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBibih1cil7Y29uc3QgYmk9JGkodXIpO21uW2JpXXx8KGZ1bmN0aW9uIExy''@;'; put 'put ''KFN0LEJ0KXtjb25zdCBfbj1EdC50b0NhbWVsQ2FzZSgiICIrQnQpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChtbj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCxtbitfbix7dmFsdWU6ZnVuY3Rpb24oSW4sYm4sdXIpe3JldHVybiB0aGlzW21uXS5jYWxsKHRoaXMsQnQsSW4sYm4s''@;'; put 'put ''dXIpfSxjb25maWd1cmFibGU6ITB9KX0pfShJbix1ciksbW5bYmldPSEwKX1yZXR1cm4gRHQuaXNBcnJheShCdCk/QnQuZm9yRWFjaChibik6Ym4oQnQpLHRoaXN9fVdpLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2Rpbmci''@;'; put 'put ''LCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSxEdC5yZWR1Y2VEZXNjcmlwdG9ycyhXaS5wcm90b3R5cGUsKHt2YWx1ZTpTdH0sQnQpPT57bGV0IF9uPUJ0WzBdLnRvVXBwZXJDYXNlKCkrQnQuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+U3Qsc2V0KG1uKXt0aGlzW19uXT1tbn19fSks''@;'; put 'put ''RHQuZnJlZXplTWV0aG9kcyhXaSk7dmFyIHBhPVdpO2Z1bmN0aW9uIFFuKFN0LEJ0KXtjb25zdCBfbj10aGlzfHx1YSxtbj1CdHx8X24sSW49cGEuZnJvbShtbi5oZWFkZXJzKTtsZXQgYm49bW4uZGF0YTtyZXR1cm4gRHQuZm9yRWFjaChTdCxmdW5jdGlvbihiaSl7Ym49YmkuY2FsbChfbixi''@;'; put 'put ''bixJbi5ub3JtYWxpemUoKSxCdD9CdC5zdGF0dXM6dm9pZCAwKX0pLEluLm5vcm1hbGl6ZSgpLGJufWZ1bmN0aW9uIGxhKFN0KXtyZXR1cm4hKCFTdHx8IVN0Ll9fQ0FOQ0VMX18pfWZ1bmN0aW9uIHlhKFN0LEJ0LF9uKXtpdC5jYWxsKHRoaXMsU3Q/PyJjYW5jZWxlZCIsaXQuRVJSX0NBTkNF''@;'; put 'put ''TEVELEJ0LF9uKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWZ1bmN0aW9uIExhKFN0LEJ0LF9uKXtjb25zdCBtbj1fbi5jb25maWcudmFsaWRhdGVTdGF0dXM7X24uc3RhdHVzJiZtbiYmIW1uKF9uLnN0YXR1cyk/QnQobmV3IGl0KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2Rl''@;'; put 'put ''ICIrX24uc3RhdHVzLFtpdC5FUlJfQkFEX1JFUVVFU1QsaXQuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihfbi5zdGF0dXMvMTAwKS00XSxfbi5jb25maWcsX24ucmVxdWVzdCxfbikpOlN0KF9uKX1EdC5pbmhlcml0cyh5YSxpdCx7X19DQU5DRUxfXzohMH0pO2NvbnN0IE5zPShTdCxC''@;'; put 'put ''dCxfbj0zKT0+e2xldCBtbj0wO2NvbnN0IEluPWZ1bmN0aW9uIHRpKFN0LEJ0KXtTdD1TdHx8MTA7Y29uc3QgX249bmV3IEFycmF5KFN0KSxtbj1uZXcgQXJyYXkoU3QpO2xldCB1cixJbj0wLGJuPTA7cmV0dXJuIEJ0PXZvaWQgMCE9PUJ0P0J0OjFlMyxmdW5jdGlvbihGcil7Y29uc3QgdGE9''@;'; put 'put ''RGF0ZS5ub3coKSxvYT1tbltibl07dXJ8fCh1cj10YSksX25bSW5dPUZyLG1uW0luXT10YTtsZXQgVmE9Ym4sJG89MDtmb3IoO1ZhIT09SW47KSRvKz1fbltWYSsrXSxWYSU9U3Q7aWYoSW49KEluKzEpJVN0LEluPT09Ym4mJihibj0oYm4rMSklU3QpLHRhLXVyPEJ0KXJldHVybjtjb25zdCBY''@;'; put 'put ''bD1vYSYmdGEtb2E7cmV0dXJuIFhsP01hdGgucm91bmQoMWUzKiRvL1hsKTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBnbyhTdCxCdCl7bGV0IEluLGJuLF9uPTAsbW49MWUzL0J0O2NvbnN0IHVyPSh0YSxvYT1EYXRlLm5vdygpKT0+e19uPW9hLEluPW51bGwsYm4mJihjbGVh''@;'; put 'put ''clRpbWVvdXQoYm4pLGJuPW51bGwpLFN0LmFwcGx5KG51bGwsdGEpfTtyZXR1cm5bKC4uLnRhKT0+e2NvbnN0IG9hPURhdGUubm93KCksVmE9b2EtX247VmE+PW1uP3VyKHRhLG9hKTooSW49dGEsYm58fChibj1zZXRUaW1lb3V0KCgpPT57Ym49bnVsbCx1cihJbil9LG1uLVZhKSkpfSwoKT0+''@;'; put 'put ''SW4mJnVyKEluKV19KGJuPT57Y29uc3QgdXI9Ym4ubG9hZGVkLGJpPWJuLmxlbmd0aENvbXB1dGFibGU/Ym4udG90YWw6dm9pZCAwLEZyPXVyLW1uLHRhPUluKEZyKTttbj11cixTdCh7bG9hZGVkOnVyLHRvdGFsOmJpLHByb2dyZXNzOmJpP3VyL2JpOnZvaWQgMCxieXRlczpGcixyYXRlOnRh''@;'; put 'put ''fHx2b2lkIDAsZXN0aW1hdGVkOnRhJiZiaSYmdXI8PWJpPyhiaS11cikvdGE6dm9pZCAwLGV2ZW50OmJuLGxlbmd0aENvbXB1dGFibGU6bnVsbCE9YmksW0J0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfSl9LF9uKX0sYmw9KFN0LEJ0KT0+e2NvbnN0IF9uPW51bGwhPVN0O3JldHVyblttbj0+''@;'; put 'put ''QnRbMF0oe2xlbmd0aENvbXB1dGFibGU6X24sdG90YWw6U3QsbG9hZGVkOm1ufSksQnRbMV1dfSxwdT1TdD0+KC4uLkJ0KT0+RHQuYXNhcCgoKT0+U3QoLi4uQnQpKTt2YXIgTGM9enQuaGFzU3RhbmRhcmRCcm93c2VyRW52PygoU3QsQnQpPT5fbj0+KF9uPW5ldyBVUkwoX24senQub3JpZ2lu''@;'; put 'put ''KSxTdC5wcm90b2NvbD09PV9uLnByb3RvY29sJiZTdC5ob3N0PT09X24uaG9zdCYmKEJ0fHxTdC5wb3J0PT09X24ucG9ydCkpKShuZXcgVVJMKHp0Lm9yaWdpbiksenQubmF2aWdhdG9yJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHp0Lm5hdmlnYXRvci51c2VyQWdlbnQpKTooKT0+ITAsRDA9''@;'; put 'put ''enQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShTdCxCdCxfbixtbixJbixibil7Y29uc3QgdXI9W1N0KyI9IitlbmNvZGVVUklDb21wb25lbnQoQnQpXTtEdC5pc051bWJlcihfbikmJnVyLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShfbikudG9HTVRTdHJpbmcoKSksRHQuaXNTdHJp''@;'; put 'put ''bmcobW4pJiZ1ci5wdXNoKCJwYXRoPSIrbW4pLER0LmlzU3RyaW5nKEluKSYmdXIucHVzaCgiZG9tYWluPSIrSW4pLCEwPT09Ym4mJnVyLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11ci5qb2luKCI7ICIpfSxyZWFkKFN0KXtjb25zdCBCdD1kb2N1bWVudC5jb29raWUubWF0Y2go''@;'; put 'put ''bmV3IFJlZ0V4cCgiKF58O1xccyopKCIrU3QrIik9KFteO10qKSIpKTtyZXR1cm4gQnQ/ZGVjb2RlVVJJQ29tcG9uZW50KEJ0WzNdKTpudWxsfSxyZW1vdmUoU3Qpe3RoaXMud3JpdGUoU3QsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQ6KCk9Pm51bGwscmVtb3ZlKCl7''@;'; put 'put ''fX07ZnVuY3Rpb24gdWkoU3QsQnQsX24pe2xldCBtbj0hZnVuY3Rpb24gaXIoU3Qpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoU3QpfShCdCk7cmV0dXJuIFN0JiZtbnx8MD09X24/ZnVuY3Rpb24geGEoU3QsQnQpe3JldHVybiBCdD9TdC5yZXBsYWNlKC9cLz9c''@;'; put 'put ''LyQvLCIiKSsiLyIrQnQucmVwbGFjZSgvXlwvKy8sIiIpOlN0fShTdCxCdCk6QnR9Y29uc3QgVnQ9U3Q9PlN0IGluc3RhbmNlb2YgcGE/ey4uLlN0fTpTdDtmdW5jdGlvbiBKcihTdCxCdCl7QnQ9QnR8fHt9O2NvbnN0IF9uPXt9O2Z1bmN0aW9uIG1uKHRhLG9hLFZhLCRvKXtyZXR1cm4gRHQu''@;'; put 'put ''aXNQbGFpbk9iamVjdCh0YSkmJkR0LmlzUGxhaW5PYmplY3Qob2EpP0R0Lm1lcmdlLmNhbGwoe2Nhc2VsZXNzOiRvfSx0YSxvYSk6RHQuaXNQbGFpbk9iamVjdChvYSk/RHQubWVyZ2Uoe30sb2EpOkR0LmlzQXJyYXkob2EpP29hLnNsaWNlKCk6b2F9ZnVuY3Rpb24gSW4odGEsb2EsVmEsJG8p''@;'; put 'put ''e3JldHVybiBEdC5pc1VuZGVmaW5lZChvYSk/RHQuaXNVbmRlZmluZWQodGEpP3ZvaWQgMDptbih2b2lkIDAsdGEsMCwkbyk6bW4odGEsb2EsMCwkbyl9ZnVuY3Rpb24gYm4odGEsb2Epe2lmKCFEdC5pc1VuZGVmaW5lZChvYSkpcmV0dXJuIG1uKHZvaWQgMCxvYSl9ZnVuY3Rpb24gdXIodGEs''@;'; put 'put ''b2Epe3JldHVybiBEdC5pc1VuZGVmaW5lZChvYSk/RHQuaXNVbmRlZmluZWQodGEpP3ZvaWQgMDptbih2b2lkIDAsdGEpOm1uKHZvaWQgMCxvYSl9ZnVuY3Rpb24gYmkodGEsb2EsVmEpe3JldHVybiBWYSBpbiBCdD9tbih0YSxvYSk6VmEgaW4gU3Q/bW4odm9pZCAwLHRhKTp2b2lkIDB9Y29u''@;'; put 'put ''c3QgRnI9e3VybDpibixtZXRob2Q6Ym4sZGF0YTpibixiYXNlVVJMOnVyLHRyYW5zZm9ybVJlcXVlc3Q6dXIsdHJhbnNmb3JtUmVzcG9uc2U6dXIscGFyYW1zU2VyaWFsaXplcjp1cix0aW1lb3V0OnVyLHRpbWVvdXRNZXNzYWdlOnVyLHdpdGhDcmVkZW50aWFsczp1cix3aXRoWFNSRlRva2Vu''@;'; put 'put ''OnVyLGFkYXB0ZXI6dXIscmVzcG9uc2VUeXBlOnVyLHhzcmZDb29raWVOYW1lOnVyLHhzcmZIZWFkZXJOYW1lOnVyLG9uVXBsb2FkUHJvZ3Jlc3M6dXIsb25Eb3dubG9hZFByb2dyZXNzOnVyLGRlY29tcHJlc3M6dXIsbWF4Q29udGVudExlbmd0aDp1cixtYXhCb2R5TGVuZ3RoOnVyLGJlZm9y''@;'; put 'put ''ZVJlZGlyZWN0OnVyLHRyYW5zcG9ydDp1cixodHRwQWdlbnQ6dXIsaHR0cHNBZ2VudDp1cixjYW5jZWxUb2tlbjp1cixzb2NrZXRQYXRoOnVyLHJlc3BvbnNlRW5jb2Rpbmc6dXIsdmFsaWRhdGVTdGF0dXM6YmksaGVhZGVyczoodGEsb2EsVmEpPT5JbihWdCh0YSksVnQob2EpLDAsITApfTty''@;'; put 'put ''ZXR1cm4gRHQuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LFN0LEJ0KSksZnVuY3Rpb24ob2Epe2NvbnN0IFZhPUZyW29hXXx8SW4sJG89VmEoU3Rbb2FdLEJ0W29hXSxvYSk7RHQuaXNVbmRlZmluZWQoJG8pJiZWYSE9PWJpfHwoX25bb2FdPSRvKX0pLF9ufXZhciBiMD1T''@;'; put 'put ''dD0+e2NvbnN0IEJ0PUpyKHt9LFN0KTtsZXQgRnIse2RhdGE6X24sd2l0aFhTUkZUb2tlbjptbix4c3JmSGVhZGVyTmFtZTpJbix4c3JmQ29va2llTmFtZTpibixoZWFkZXJzOnVyLGF1dGg6Yml9PUJ0O2lmKEJ0LmhlYWRlcnM9dXI9cGEuZnJvbSh1ciksQnQudXJsPU9yKHVpKEJ0LmJhc2VV''@;'; put 'put ''UkwsQnQudXJsKSxTdC5wYXJhbXMsU3QucGFyYW1zU2VyaWFsaXplciksYmkmJnVyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoYmkudXNlcm5hbWV8fCIiKSsiOiIrKGJpLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChiaS5wYXNzd29yZCkpOiIiKSkp''@;'; put 'put ''LER0LmlzRm9ybURhdGEoX24pKWlmKHp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8enQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXVyLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZighMSE9PShGcj11ci5nZXRDb250ZW50VHlwZSgpKSl7Y29uc3RbdGEsLi4ub2FdPUZy''@;'; put 'put ''P0ZyLnNwbGl0KCI7IikubWFwKFZhPT5WYS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTt1ci5zZXRDb250ZW50VHlwZShbdGF8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5vYV0uam9pbigiOyAiKSl9aWYoenQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobW4mJkR0LmlzRnVuY3Rpb24o''@;'; put 'put ''bW4pJiYobW49bW4oQnQpKSxtbnx8ITEhPT1tbiYmTGMoQnQudXJsKSkpe2NvbnN0IHRhPUluJiZibiYmRDAucmVhZChibik7dGEmJnVyLnNldChJbix0YSl9cmV0dXJuIEJ0fSxMdT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiJiZmdW5jdGlvbihTdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1''@;'; put 'put ''bmN0aW9uKF9uLG1uKXtjb25zdCBJbj1iMChTdCk7bGV0IGJuPUluLmRhdGE7Y29uc3QgdXI9cGEuZnJvbShJbi5oZWFkZXJzKS5ub3JtYWxpemUoKTtsZXQgb2EsVmEsJG8sWGwsdG8se3Jlc3BvbnNlVHlwZTpiaSxvblVwbG9hZFByb2dyZXNzOkZyLG9uRG93bmxvYWRQcm9ncmVzczp0YX09''@;'; put 'put ''SW47ZnVuY3Rpb24gX28oKXtYbCYmWGwoKSx0byYmdG8oKSxJbi5jYW5jZWxUb2tlbiYmSW4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob2EpLEluLnNpZ25hbCYmSW4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixvYSl9bGV0IGppPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5j''@;'; put 'put ''dGlvbiBQYygpe2lmKCFqaSlyZXR1cm47Y29uc3QgQ2E9cGEuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGppJiZqaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7TGEoZnVuY3Rpb24oJDApe19uKCQwKSxfbygpfSxmdW5jdGlvbigkMCl7bW4oJDApLF9vKCl9LHtkYXRhOmJpJiYi''@;'; put 'put ''dGV4dCIhPT1iaSYmImpzb24iIT09Ymk/amkucmVzcG9uc2U6amkucmVzcG9uc2VUZXh0LHN0YXR1czpqaS5zdGF0dXMsc3RhdHVzVGV4dDpqaS5zdGF0dXNUZXh0LGhlYWRlcnM6Q2EsY29uZmlnOlN0LHJlcXVlc3Q6aml9KSxqaT1udWxsfWppLm9wZW4oSW4ubWV0aG9kLnRvVXBwZXJDYXNl''@;'; put 'put ''KCksSW4udXJsLCEwKSxqaS50aW1lb3V0PUluLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBqaT9qaS5vbmxvYWRlbmQ9UGM6amkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWppfHw0IT09amkucmVhZHlTdGF0ZXx8MD09PWppLnN0YXR1cyYmKCFqaS5yZXNwb25zZVVSTHx8MCE9PWpp''@;'; put 'put ''LnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpfHxzZXRUaW1lb3V0KFBjKX0samkub25hYm9ydD1mdW5jdGlvbigpe2ppJiYobW4obmV3IGl0KCJSZXF1ZXN0IGFib3J0ZWQiLGl0LkVDT05OQUJPUlRFRCxTdCxqaSkpLGppPW51bGwpfSxqaS5vbmVycm9yPWZ1bmN0aW9uKCl7bW4obmV3''@;'; put 'put ''IGl0KCJOZXR3b3JrIEVycm9yIixpdC5FUlJfTkVUV09SSyxTdCxqaSkpLGppPW51bGx9LGppLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBUYT1Jbi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrSW4udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtJbi50aW1lb3V0RXJy''@;'; put 'put ''b3JNZXNzYWdlJiYoVGE9SW4udGltZW91dEVycm9yTWVzc2FnZSksbW4obmV3IGl0KFRhLChJbi50cmFuc2l0aW9uYWx8fFJuKS5jbGFyaWZ5VGltZW91dEVycm9yP2l0LkVUSU1FRE9VVDppdC5FQ09OTkFCT1JURUQsU3QsamkpKSxqaT1udWxsfSx2b2lkIDA9PT1ibiYmdXIuc2V0Q29udGVu''@;'; put 'put ''dFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gamkmJkR0LmZvckVhY2godXIudG9KU09OKCksZnVuY3Rpb24oVGEsWGgpe2ppLnNldFJlcXVlc3RIZWFkZXIoWGgsVGEpfSksRHQuaXNVbmRlZmluZWQoSW4ud2l0aENyZWRlbnRpYWxzKXx8KGppLndpdGhDcmVkZW50aWFscz0hIUlu''@;'; put 'put ''LndpdGhDcmVkZW50aWFscyksYmkmJiJqc29uIiE9PWJpJiYoamkucmVzcG9uc2VUeXBlPUluLnJlc3BvbnNlVHlwZSksdGEmJihbJG8sdG9dPU5zKHRhLCEwKSxqaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsJG8pKSxGciYmamkudXBsb2FkJiYoW1ZhLFhsXT1OcyhGciksamkudXBs''@;'; put 'put ''b2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixWYSksamkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLFhsKSksKEluLmNhbmNlbFRva2VufHxJbi5zaWduYWwpJiYob2E9Q2E9PntqaSYmKG1uKCFDYXx8Q2EudHlwZT9uZXcgeWEobnVsbCxTdCxqaSk6Q2EpLGppLmFi''@;'; put 'put ''b3J0KCksamk9bnVsbCl9LEluLmNhbmNlbFRva2VuJiZJbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob2EpLEluLnNpZ25hbCYmKEluLnNpZ25hbC5hYm9ydGVkP29hKCk6SW4uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvYSkpKTtjb25zdCB6bD1mdW5jdGlvbiBGYShTdCl7Y29u''@;'; put 'put ''c3QgQnQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoU3QpO3JldHVybiBCdCYmQnRbMV18fCIifShJbi51cmwpO3psJiYtMT09PXp0LnByb3RvY29scy5pbmRleE9mKHpsKT9tbihuZXcgaXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIremwrIjoiLGl0LkVSUl9CQURfUkVRVUVT''@;'; put 'put ''VCxTdCkpOmppLnNlbmQoYm58fG51bGwpfSl9LG9kPShTdCxCdCk9Pntjb25zdHtsZW5ndGg6X259PVN0PVN0P1N0LmZpbHRlcihCb29sZWFuKTpbXTtpZihCdHx8X24pe2xldCBJbixtbj1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0IGJuPWZ1bmN0aW9uKHRhKXtpZighSW4pe0luPSEwLGJp''@;'; put 'put ''KCk7Y29uc3Qgb2E9dGEgaW5zdGFuY2VvZiBFcnJvcj90YTp0aGlzLnJlYXNvbjttbi5hYm9ydChvYSBpbnN0YW5jZW9mIGl0P29hOm5ldyB5YShvYSBpbnN0YW5jZW9mIEVycm9yP29hLm1lc3NhZ2U6b2EpKX19O2xldCB1cj1CdCYmc2V0VGltZW91dCgoKT0+e3VyPW51bGwsYm4obmV3IGl0''@;'; put 'put ''KGB0aW1lb3V0ICR7QnR9IG9mIG1zIGV4Y2VlZGVkYCxpdC5FVElNRURPVVQpKX0sQnQpO2NvbnN0IGJpPSgpPT57U3QmJih1ciYmY2xlYXJUaW1lb3V0KHVyKSx1cj1udWxsLFN0LmZvckVhY2godGE9Pnt0YS51bnN1YnNjcmliZT90YS51bnN1YnNjcmliZShibik6dGEucmVtb3ZlRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigiYWJvcnQiLGJuKX0pLFN0PW51bGwpfTtTdC5mb3JFYWNoKHRhPT50YS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYm4pKTtjb25zdHtzaWduYWw6RnJ9PW1uO3JldHVybiBGci51bnN1YnNjcmliZT0oKT0+RHQuYXNhcChiaSksRnJ9fTtjb25zdCBZaD1mdW5jdGlvbiooU3Qs''@;'; put 'put ''QnQpe2xldCBfbj1TdC5ieXRlTGVuZ3RoO2lmKCFCdHx8X248QnQpcmV0dXJuIHZvaWQoeWllbGQgU3QpO2xldCBJbixtbj0wO2Zvcig7bW48X247KUluPW1uK0J0LHlpZWxkIFN0LnNsaWNlKG1uLEluKSxtbj1Jbn0sY2Y9ZnVuY3Rpb24oKXt2YXIgU3Q9X3dyYXBBc3luY0dlbmVyYXRvcihm''@;'; put 'put ''dW5jdGlvbiooQnQsX24pe3ZhciBibixtbj0hMSxJbj0hMTt0cnl7Zm9yKHZhciBiaSx1cj1fYXN5bmNJdGVyYXRvcihDcyhCdCkpO21uPSEoYmk9eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIubmV4dCgpKSkuZG9uZTttbj0hMSl7Y29uc3QgRnI9YmkudmFsdWU7eWllbGQqX2FzeW5j''@;'; put 'put ''R2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoWWgoRnIsX24pKSxfYXdhaXRBc3luY0dlbmVyYXRvcil9fWNhdGNoKEZyKXtJbj0hMCxibj1Gcn1maW5hbGx5e3RyeXttbiYmbnVsbCE9dXIucmV0dXJuJiYoeWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIucmV0dXJuKCkpKX1m''@;'; put 'put ''aW5hbGx5e2lmKEluKXRocm93IGJufX19KTtyZXR1cm4gZnVuY3Rpb24oX24sbW4pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLENzPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtpZihCdFtTeW1ib2wuYXN5bmNJdGVyYXRv''@;'; put 'put ''cl0pcmV0dXJuIHZvaWQoeWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoQnQpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKSk7Y29uc3QgX249QnQuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9uZTptbix2YWx1ZTpJbn09eWllbGQgX2F3YWl0QXN5bmNH''@;'; put 'put ''ZW5lcmF0b3IoX24ucmVhZCgpKTtpZihtbilicmVhazt5aWVsZCBJbn19ZmluYWxseXt5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihfbi5jYW5jZWwoKSl9fSk7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxZaT0oU3QsQnQsX24sbW4p''@;'; put 'put ''PT57Y29uc3QgSW49Y2YoU3QsQnQpO2xldCB1cixibj0wLGJpPUZyPT57dXJ8fCh1cj0hMCxtbiYmbW4oRnIpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7cHVsbDpGcj0+X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e2NvbnN0e2RvbmU6dGEsdmFsdWU6b2F9PXlpZWxk''@;'; put 'put ''IEluLm5leHQoKTtpZih0YSlyZXR1cm4gYmkoKSx2b2lkIEZyLmNsb3NlKCk7aWYoX24pe2xldCAkbz1ibis9b2EuYnl0ZUxlbmd0aDtfbigkbyl9RnIuZW5xdWV1ZShuZXcgVWludDhBcnJheShvYSkpfWNhdGNoKHRhKXt0aHJvdyBiaSh0YSksdGF9fSkoKSxjYW5jZWw6RnI9PihiaShGciks''@;'; put 'put ''SW4ucmV0dXJuKCkpfSx7aGlnaFdhdGVyTWFyazoyfSl9LHlsPSJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXNwb25zZSxRYz15bCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtLG41PXls''@;'; put 'put ''JiYoImZ1bmN0aW9uIj09dHlwZW9mIFRleHRFbmNvZGVyPyhTdD0+QnQ9PlN0LmVuY29kZShCdCkpKG5ldyBUZXh0RW5jb2Rlcik6ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeWllbGQgbmV3IFJlc3BvbnNl''@;'; put 'put ''KEJ0KS5hcnJheUJ1ZmZlcigpKX0pO3JldHVybiBmdW5jdGlvbihCdCl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHkwPShTdCwuLi5CdCk9Pnt0cnl7cmV0dXJuISFTdCguLi5CdCl9Y2F0Y2h7cmV0dXJuITF9fSxyNT1RYyYmeTAoKCk9PntsZXQgU3Q9ITE7Y29uc3Qg''@;'; put 'put ''QnQ9bmV3IFJlcXVlc3QoenQub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gU3Q9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gU3QmJiFCdH0pLHVmPVFjJiZ5MCgoKT0+RHQuaXNS''@;'; put 'put ''ZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxzZD17c3RyZWFtOnVmJiYoU3Q9PlN0LmJvZHkpfTt5bCYmKFN0PT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKEJ0PT57IXNkW0J0XSYmKHNkW0J0XT1EdC5pc0Z1''@;'; put 'put ''bmN0aW9uKFN0W0J0XSk/X249Pl9uW0J0XSgpOihfbixtbik9Pnt0aHJvdyBuZXcgaXQoYFJlc3BvbnNlIHR5cGUgJyR7QnR9JyBpcyBub3Qgc3VwcG9ydGVkYCxpdC5FUlJfTk9UX1NVUFBPUlQsbW4pfSl9KX0pKG5ldyBSZXNwb25zZSk7Y29uc3QgZGY9ZnVuY3Rpb24oKXt2YXIgU3Q9X2Fz''@;'; put 'put ''eW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbnVsbD09QnQ/MDpEdC5pc0Jsb2IoQnQpP0J0LnNpemU6RHQuaXNTcGVjQ29tcGxpYW50Rm9ybShCdCk/KHlpZWxkIG5ldyBSZXF1ZXN0KHp0Lm9yaWdpbix7bWV0aG9kOiJQT1NUIixib2R5OkJ0fSkuYXJyYXlCdWZmZXIoKSku''@;'; put 'put ''Ynl0ZUxlbmd0aDpEdC5pc0FycmF5QnVmZmVyVmlldyhCdCl8fER0LmlzQXJyYXlCdWZmZXIoQnQpP0J0LmJ5dGVMZW5ndGg6KER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSYmKEJ0Kz0iIiksRHQuaXNTdHJpbmcoQnQpPyh5aWVsZCBuNShCdCkpLmJ5dGVMZW5ndGg6dm9pZCAwKX0pO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihfbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksazE9ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0LF9uKXtyZXR1cm4gRHQudG9GaW5pdGVOdW1iZXIoQnQuZ2V0Q29udGVudExlbmd0aCgpKT8/ZGYoX24pfSk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKF9uLG1uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTt2YXIgaGY9eWwmJmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7bGV0e3VybDpfbixtZXRob2Q6bW4sZGF0YTpJbixzaWduYWw6Ym4sY2FuY2Vs''@;'; put 'put ''VG9rZW46dXIsdGltZW91dDpiaSxvbkRvd25sb2FkUHJvZ3Jlc3M6RnIsb25VcGxvYWRQcm9ncmVzczp0YSxyZXNwb25zZVR5cGU6b2EsaGVhZGVyczpWYSx3aXRoQ3JlZGVudGlhbHM6JG89InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6WGx9PWIwKEJ0KTtvYT1vYT8ob2ErIiIpLnRvTG93''@;'; put 'put ''ZXJDYXNlKCk6InRleHQiO2xldCBfbyx0bz1vZChbYm4sdXImJnVyLnRvQWJvcnRTaWduYWwoKV0sYmkpO2NvbnN0IGppPXRvJiZ0by51bnN1YnNjcmliZSYmKCgpPT57dG8udW5zdWJzY3JpYmUoKX0pO2xldCBQYzt0cnl7aWYodGEmJnI1JiYiZ2V0IiE9PW1uJiYiaGVhZCIhPT1tbiYmMCE9''@;'; put 'put ''PShQYz15aWVsZCBrMShWYSxJbikpKXtsZXQgJDAsRzA9bmV3IFJlcXVlc3QoX24se21ldGhvZDoiUE9TVCIsYm9keTpJbixkdXBsZXg6ImhhbGYifSk7aWYoRHQuaXNGb3JtRGF0YShJbikmJigkMD1HMC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZWYS5zZXRDb250ZW50VHlwZSgk''@;'; put 'put ''MCksRzAuYm9keSl7Y29uc3RbTm8scWldPWJsKFBjLE5zKHB1KHRhKSkpO0luPVlpKEcwLmJvZHksNjU1MzYsTm8scWkpfX1EdC5pc1N0cmluZygkbyl8fCgkbz0kbz8iaW5jbHVkZSI6Im9taXQiKTtjb25zdCB6bD0iY3JlZGVudGlhbHMiaW4gUmVxdWVzdC5wcm90b3R5cGU7X289bmV3IFJl''@;'; put 'put ''cXVlc3QoX24sey4uLlhsLHNpZ25hbDp0byxtZXRob2Q6bW4udG9VcHBlckNhc2UoKSxoZWFkZXJzOlZhLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SW4sZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczp6bD8kbzp2b2lkIDB9KTtsZXQgQ2E9eWllbGQgZmV0Y2goX28pO2NvbnN0IFRhPXVm''@;'; put 'put ''JiYoInN0cmVhbSI9PT1vYXx8InJlc3BvbnNlIj09PW9hKTtpZih1ZiYmKEZyfHxUYSYmamkpKXtjb25zdCBHMD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChNcz0+e0cwW01zXT1DYVtNc119KTtjb25zdCAkMD1EdC50b0Zpbml0ZU51bWJlcihDYS5oZWFk''@;'; put 'put ''ZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW05vLHFpXT1GciYmYmwoJDAsTnMocHUoRnIpLCEwKSl8fFtdO0NhPW5ldyBSZXNwb25zZShZaShDYS5ib2R5LDY1NTM2LE5vLCgpPT57cWkmJnFpKCksamkmJmppKCl9KSxHMCl9b2E9b2F8fCJ0ZXh0IjtsZXQgWGg9eWllbGQgc2RbRHQuZmlu''@;'; put 'put ''ZEtleShzZCxvYSl8fCJ0ZXh0Il0oQ2EsQnQpO3JldHVybiFUYSYmamkmJmppKCkseWllbGQgbmV3IFByb21pc2UoKEcwLCQwKT0+e0xhKEcwLCQwLHtkYXRhOlhoLGhlYWRlcnM6cGEuZnJvbShDYS5oZWFkZXJzKSxzdGF0dXM6Q2Euc3RhdHVzLHN0YXR1c1RleHQ6Q2Euc3RhdHVzVGV4dCxj''@;'; put 'put ''b25maWc6QnQscmVxdWVzdDpfb30pfSl9Y2F0Y2goemwpe3Rocm93IGppJiZqaSgpLHpsJiYiVHlwZUVycm9yIj09PXpsLm5hbWUmJi9mZXRjaC9pLnRlc3QoemwubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgaXQoIk5ldHdvcmsgRXJyb3IiLGl0LkVSUl9ORVRXT1JLLEJ0LF9vKSx7Y2F1''@;'; put 'put ''c2U6emwuY2F1c2V8fHpsfSk6aXQuZnJvbSh6bCx6bCYmemwuY29kZSxCdCxfbyl9fSk7cmV0dXJuIGZ1bmN0aW9uKEJ0KXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtjb25zdCBlaD17aHR0cDpudWxsLHhocjpMdSxmZXRjaDpoZn07RHQuZm9yRWFjaChlaCwoU3QsQnQp''@;'; put 'put ''PT57aWYoU3Qpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsIm5hbWUiLHt2YWx1ZTpCdH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImFkYXB0ZXJOYW1lIix7dmFsdWU6QnR9KX19KTtjb25zdCBmZj1TdD0+YC0gJHtTdH1gLEdoPVN0PT5EdC5pc0Z1bmN0aW9uKFN0''@;'; put 'put ''KXx8bnVsbD09PVN0fHwhMT09PVN0O3ZhciBPY19nZXRBZGFwdGVyPVN0PT57U3Q9RHQuaXNBcnJheShTdCk/U3Q6W1N0XTtjb25zdHtsZW5ndGg6QnR9PVN0O2xldCBfbixtbjtjb25zdCBJbj17fTtmb3IobGV0IGJuPTA7Ym48QnQ7Ym4rKyl7bGV0IHVyO2lmKF9uPVN0W2JuXSxtbj1fbiwh''@;'; put 'put ''R2goX24pJiYobW49ZWhbKHVyPVN0cmluZyhfbikpLnRvTG93ZXJDYXNlKCldLHZvaWQgMD09PW1uKSl0aHJvdyBuZXcgaXQoYFVua25vd24gYWRhcHRlciAnJHt1cn0nYCk7aWYobW4pYnJlYWs7SW5bdXJ8fCIjIitibl09bW59aWYoIW1uKXtjb25zdCBibj1PYmplY3QuZW50cmllcyhJbiku''@;'; put 'put ''bWFwKChbYmksRnJdKT0+YGFkYXB0ZXIgJHtiaX0gYCsoITE9PT1Gcj8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKTt0aHJvdyBuZXcgaXQoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0''@;'; put 'put ''Y2ggdGhlIHJlcXVlc3QgIisoQnQ/Ym4ubGVuZ3RoPjE/InNpbmNlIDpcbiIrYm4ubWFwKGZmKS5qb2luKCJcbiIpOiIgIitmZihiblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIiksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBtbn07ZnVuY3Rpb24gTmEoU3Qpe2lmKFN0LmNhbmNl''@;'; put 'put ''bFRva2VuJiZTdC5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksU3Quc2lnbmFsJiZTdC5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgeWEobnVsbCxTdCl9ZnVuY3Rpb24gRDMoU3Qpe3JldHVybiBOYShTdCksU3QuaGVhZGVycz1wYS5mcm9tKFN0LmhlYWRlcnMpLFN0LmRhdGE9UW4u''@;'; put 'put ''Y2FsbChTdCxTdC50cmFuc2Zvcm1SZXF1ZXN0KSwtMSE9PVsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihTdC5tZXRob2QpJiZTdC5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxPY19nZXRBZGFwdGVyKFN0LmFkYXB0''@;'; put 'put ''ZXJ8fHVhLmFkYXB0ZXIpKFN0KS50aGVuKGZ1bmN0aW9uKG1uKXtyZXR1cm4gTmEoU3QpLG1uLmRhdGE9UW4uY2FsbChTdCxTdC50cmFuc2Zvcm1SZXNwb25zZSxtbiksbW4uaGVhZGVycz1wYS5mcm9tKG1uLmhlYWRlcnMpLG1ufSxmdW5jdGlvbihtbil7cmV0dXJuIGxhKG1uKXx8KE5hKFN0''@;'; put 'put ''KSxtbiYmbW4ucmVzcG9uc2UmJihtbi5yZXNwb25zZS5kYXRhPVFuLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVzcG9uc2UsbW4ucmVzcG9uc2UpLG1uLnJlc3BvbnNlLmhlYWRlcnM9cGEuZnJvbShtbi5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KG1uKX0pfWNvbnN0IEtoPXt9''@;'; put 'put ''O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoU3QsQnQpPT57S2hbU3RdPWZ1bmN0aW9uKG1uKXtyZXR1cm4gdHlwZW9mIG1uPT09U3R8fCJhIisoQnQ8MT8ibiAiOiIgIikrU3R9fSk7Y29uc3QgcWg9e307S2gudHJh''@;'; put 'put ''bnNpdGlvbmFsPWZ1bmN0aW9uKEJ0LF9uLG1uKXtmdW5jdGlvbiBJbihibix1cil7cmV0dXJuIltBeGlvcyB2MS44LjJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrYm4rIiciK3VyKyhtbj8iLiAiK21uOiIiKX1yZXR1cm4oYm4sdXIsYmkpPT57aWYoITE9PT1CdCl0aHJvdyBuZXcgaXQoSW4o''@;'; put 'put ''dXIsIiBoYXMgYmVlbiByZW1vdmVkIisoX24/IiBpbiAiK19uOiIiKSksaXQuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBfbiYmIXFoW3VyXSYmKHFoW3VyXT0hMCxnLndhcm4oSW4odXIsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK19uKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0''@;'; put 'put ''aGUgbmVhciBmdXR1cmUiKSkpLCFCdHx8QnQoYm4sdXIsYmkpfX0sS2guc3BlbGxpbmc9ZnVuY3Rpb24oQnQpe3JldHVybihfbixtbik9PihnLndhcm4oYCR7bW59IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7QnR9YCksITApfTt2YXIgYW49e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24g''@;'; put 'put ''QW4oU3QsQnQsX24pe2lmKCJvYmplY3QiIT10eXBlb2YgU3QpdGhyb3cgbmV3IGl0KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgbW49T2JqZWN0LmtleXMoU3QpO2xldCBJbj1tbi5sZW5ndGg7Zm9yKDtJbi0tID4wOyl7Y29uc3Qg''@;'; put 'put ''Ym49bW5bSW5dLHVyPUJ0W2JuXTtpZih1cil7Y29uc3QgYmk9U3RbYm5dLEZyPXZvaWQgMD09PWJpfHx1cihiaSxibixTdCk7aWYoITAhPT1Gcil0aHJvdyBuZXcgaXQoIm9wdGlvbiAiK2JuKyIgbXVzdCBiZSAiK0ZyLGl0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09X24p''@;'; put 'put ''dGhyb3cgbmV3IGl0KCJVbmtub3duIG9wdGlvbiAiK2JuLGl0LkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6S2h9O2NvbnN0IHZpPWFuLnZhbGlkYXRvcnM7Y2xhc3MgQXJ7Y29uc3RydWN0b3IoQnQpe3RoaXMuZGVmYXVsdHM9QnQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3''@;'; put 'put ''IEF0LHJlc3BvbnNlOm5ldyBBdH19cmVxdWVzdChCdCxfbil7dmFyIG1uPXRoaXM7cmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgbW4uX3JlcXVlc3QoQnQsX24pfWNhdGNoKEluKXtpZihJbiBpbnN0YW5jZW9mIEVycm9yKXtsZXQgYm49e307''@;'; put 'put ''RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoYm4pOmJuPW5ldyBFcnJvcjtjb25zdCB1cj1ibi5zdGFjaz9ibi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtJbi5zdGFjaz91ciYmIVN0cmluZyhJbi5zdGFjaykuZW5kc1dpdGgodXIucmVw''@;'; put 'put ''bGFjZSgvXi4rXG4uK1xuLywiIikpJiYoSW4uc3RhY2srPSJcbiIrdXIpOkluLnN0YWNrPXVyfWNhdGNoe319dGhyb3cgSW59fSkoKX1fcmVxdWVzdChCdCxfbil7InN0cmluZyI9PXR5cGVvZiBCdD8oX249X258fHt9KS51cmw9QnQ6X249QnR8fHt9LF9uPUpyKHRoaXMuZGVmYXVsdHMsX24p''@;'; put 'put ''O2NvbnN0e3RyYW5zaXRpb25hbDptbixwYXJhbXNTZXJpYWxpemVyOkluLGhlYWRlcnM6Ym59PV9uO3ZvaWQgMCE9PW1uJiZhbi5hc3NlcnRPcHRpb25zKG1uLHtzaWxlbnRKU09OUGFyc2luZzp2aS50cmFuc2l0aW9uYWwodmkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6dmkudHJhbnNp''@;'; put 'put ''dGlvbmFsKHZpLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6dmkudHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pfSwhMSksbnVsbCE9SW4mJihEdC5pc0Z1bmN0aW9uKEluKT9fbi5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6SW59OmFuLmFzc2VydE9wdGlvbnMoSW4se2VuY29kZTp2''@;'; put 'put ''aS5mdW5jdGlvbixzZXJpYWxpemU6dmkuZnVuY3Rpb259LCEwKSksdm9pZCAwIT09X24uYWxsb3dBYnNvbHV0ZVVybHN8fChfbi5hbGxvd0Fic29sdXRlVXJscz12b2lkIDA9PT10aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzfHx0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxz''@;'; put 'put ''KSxhbi5hc3NlcnRPcHRpb25zKF9uLHtiYXNlVXJsOnZpLnNwZWxsaW5nKCJiYXNlVVJMIiksd2l0aFhzcmZUb2tlbjp2aS5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksX24ubWV0aG9kPShfbi5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2Uo''@;'; put 'put ''KTtsZXQgdXI9Ym4mJkR0Lm1lcmdlKGJuLmNvbW1vbixibltfbi5tZXRob2RdKTtibiYmRHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSx0bz0+e2RlbGV0ZSBiblt0b119KSxfbi5oZWFkZXJzPXBhLmNvbmNhdCh1cixibik7''@;'; put 'put ''Y29uc3QgYmk9W107bGV0IEZyPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihfbyl7ImZ1bmN0aW9uIj09dHlwZW9mIF9vLnJ1bldoZW4mJiExPT09X28ucnVuV2hlbihfbil8fChGcj1GciYmX28uc3luY2hyb25vdXMsYmkudW5zaGlmdChfby5mdWxmaWxs''@;'; put 'put ''ZWQsX28ucmVqZWN0ZWQpKX0pO2NvbnN0IHRhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oX28pe3RhLnB1c2goX28uZnVsZmlsbGVkLF9vLnJlamVjdGVkKX0pO2xldCBvYSwkbyxWYT0wO2lmKCFGcil7Y29uc3QgdG89W0QzLmJpbmQodGhpcyksdm9p''@;'; put 'put ''ZCAwXTtmb3IodG8udW5zaGlmdC5hcHBseSh0byxiaSksdG8ucHVzaC5hcHBseSh0byx0YSksJG89dG8ubGVuZ3RoLG9hPVByb21pc2UucmVzb2x2ZShfbik7VmE8JG87KW9hPW9hLnRoZW4odG9bVmErK10sdG9bVmErK10pO3JldHVybiBvYX0kbz1iaS5sZW5ndGg7bGV0IFhsPV9uO2ZvcihW''@;'; put 'put ''YT0wO1ZhPCRvOyl7Y29uc3QgdG89YmlbVmErK10sX289YmlbVmErK107dHJ5e1hsPXRvKFhsKX1jYXRjaChqaSl7X28uY2FsbCh0aGlzLGppKTticmVha319dHJ5e29hPUQzLmNhbGwodGhpcyxYbCl9Y2F0Y2godG8pe3JldHVybiBQcm9taXNlLnJlamVjdCh0byl9Zm9yKFZhPTAsJG89dGEu''@;'; put 'put ''bGVuZ3RoO1ZhPCRvOylvYT1vYS50aGVuKHRhW1ZhKytdLHRhW1ZhKytdKTtyZXR1cm4gb2F9Z2V0VXJpKEJ0KXtyZXR1cm4gT3IodWkoKEJ0PUpyKHRoaXMuZGVmYXVsdHMsQnQpKS5iYXNlVVJMLEJ0LnVybCxCdC5hbGxvd0Fic29sdXRlVXJscyksQnQucGFyYW1zLEJ0LnBhcmFtc1Nlcmlh''@;'; put 'put ''bGl6ZXIpfX1EdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihCdCl7QXIucHJvdG90eXBlW0J0XT1mdW5jdGlvbihfbixtbil7cmV0dXJuIHRoaXMucmVxdWVzdChKcihtbnx8e30se21ldGhvZDpCdCx1cmw6X24sZGF0YToobW58fHt9KS5kYXRh''@;'; put 'put ''fSkpfX0pLER0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihCdCl7ZnVuY3Rpb24gX24obW4pe3JldHVybiBmdW5jdGlvbihibix1cixiaSl7cmV0dXJuIHRoaXMucmVxdWVzdChKcihiaXx8e30se21ldGhvZDpCdCxoZWFkZXJzOm1uP3siQ29udGVudC1UeXBlIjoi''@;'; put 'put ''bXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpibixkYXRhOnVyfSkpfX1Bci5wcm90b3R5cGVbQnRdPV9uKCksQXIucHJvdG90eXBlW0J0KyJGb3JtIl09X24oITApfSk7dmFyIFBvPUFyO2NsYXNzIGVve2NvbnN0cnVjdG9yKEJ0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQnQpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBfbjt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oYm4pe19uPWJufSk7Y29uc3QgbW49dGhpczt0aGlzLnByb21pc2UudGhlbihJbj0+e2lmKCFtbi5fbGlzdGVuZXJzKXJldHVybjtsZXQg''@;'; put 'put ''Ym49bW4uX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtibi0tID4wOyltbi5fbGlzdGVuZXJzW2JuXShJbik7bW4uX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49SW49PntsZXQgYm47Y29uc3QgdXI9bmV3IFByb21pc2UoYmk9Pnttbi5zdWJzY3JpYmUoYmkpLGJuPWJpfSkudGhl''@;'; put 'put ''bihJbik7cmV0dXJuIHVyLmNhbmNlbD1mdW5jdGlvbigpe21uLnVuc3Vic2NyaWJlKGJuKX0sdXJ9LEJ0KGZ1bmN0aW9uKGJuLHVyLGJpKXttbi5yZWFzb258fChtbi5yZWFzb249bmV3IHlhKGJuLHVyLGJpKSxfbihtbi5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJl''@;'; put 'put ''YXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoQnQpe3RoaXMucmVhc29uP0J0KHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goQnQpOnRoaXMuX2xpc3RlbmVycz1bQnRdfXVuc3Vic2NyaWJlKEJ0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJl''@;'; put 'put ''dHVybjtjb25zdCBfbj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihCdCk7LTEhPT1fbiYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShfbiwxKX10b0Fib3J0U2lnbmFsKCl7Y29uc3QgQnQ9bmV3IEFib3J0Q29udHJvbGxlcixfbj1tbj0+e0J0LmFib3J0KG1uKX07cmV0dXJuIHRoaXMuc3Vic2Ny''@;'; put 'put ''aWJlKF9uKSxCdC5zaWduYWwudW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoX24pLEJ0LnNpZ25hbH1zdGF0aWMgc291cmNlKCl7bGV0IEJ0O3JldHVybnt0b2tlbjpuZXcgZW8oZnVuY3Rpb24oSW4pe0J0PUlufSksY2FuY2VsOkJ0fX19dmFyIG9sPWVvO2NvbnN0IFNzPXtDb250''@;'; put 'put ''aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxD''@;'; put 'put ''b250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVt''@;'; put 'put ''cG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlB''@;'; put 'put ''dXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6''@;'; put 'put ''NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJl''@;'; put 'put ''cXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFk''@;'; put 'put ''R2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAs''@;'; put 'put ''TmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhTcykuZm9yRWFjaCgoW1N0LEJ0XSk9PntTc1tCdF09U3R9KTt2YXIgamw9U3M7Y29uc3Qga289ZnVuY3Rpb24gSG8oU3Qpe2NvbnN0IEJ0PW5ldyBQbyhTdCksX249QihQby5wcm90b3R5cGUucmVxdWVz''@;'; put 'put ''dCxCdCk7cmV0dXJuIER0LmV4dGVuZChfbixQby5wcm90b3R5cGUsQnQse2FsbE93bktleXM6ITB9KSxEdC5leHRlbmQoX24sQnQsbnVsbCx7YWxsT3duS2V5czohMH0pLF9uLmNyZWF0ZT1mdW5jdGlvbihJbil7cmV0dXJuIEhvKEpyKFN0LEluKSl9LF9ufSh1YSk7a28uQXhpb3M9UG8sa28u''@;'; put 'put ''Q2FuY2VsZWRFcnJvcj15YSxrby5DYW5jZWxUb2tlbj1vbCxrby5pc0NhbmNlbD1sYSxrby5WRVJTSU9OPSIxLjguMiIsa28udG9Gb3JtRGF0YT1RdCxrby5BeGlvc0Vycm9yPWl0LGtvLkNhbmNlbD1rby5DYW5jZWxlZEVycm9yLGtvLmFsbD1mdW5jdGlvbihCdCl7cmV0dXJuIFByb21pc2Uu''@;'; put 'put ''YWxsKEJ0KX0sa28uc3ByZWFkPWZ1bmN0aW9uIHpvKFN0KXtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseShudWxsLF9uKX19LGtvLmlzQXhpb3NFcnJvcj1mdW5jdGlvbiBWcyhTdCl7cmV0dXJuIER0LmlzT2JqZWN0KFN0KSYmITA9PT1TdC5pc0F4aW9zRXJyb3J9LGtvLm1l''@;'; put 'put ''cmdlQ29uZmlnPUpyLGtvLkF4aW9zSGVhZGVycz1wYSxrby5mb3JtVG9KU09OPVN0PT5JaShEdC5pc0hUTUxGb3JtKFN0KT9uZXcgRm9ybURhdGEoU3QpOlN0KSxrby5nZXRBZGFwdGVyPU9jX2dldEFkYXB0ZXIsa28uSHR0cFN0YXR1c0NvZGU9amwsa28uZGVmYXVsdD1rbyx1ZS5leHBvcnRz''@;'; put 'put ''PWtvfSw4NTY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFgse19fZXNNb2R1bGU6e3ZhbHVlOiEwfSxbU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6Ik1vZHVsZSJ9fSk7Y29uc3Qgdz1mdW5jdGlvbiB5KFkpe3JldHVybiBZJiZZLl9f''@;'; put 'put ''ZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChZLCJkZWZhdWx0Iik/WS5kZWZhdWx0Oll9KGZ1bmN0aW9uIGcoKXtpZihfKXJldHVybiBJO189MTtjb25zdCBZPTIxNDc0ODM2NDcscT0zNixUZT0vXnhuLS0vLFNlPS9bXlwwLVx4N0ZdLyxqZT0vW1x4MkVc''@;'; put 'put ''dTMwMDJcdUZGMEVcdUZGNjFdL2csVj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZh''@;'; put 'put ''bGlkIGlucHV0In0sYj1NYXRoLmZsb29yLHg9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBDKHdlKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihWW3dlXSl9ZnVuY3Rpb24gSCh3ZSxVZSl7Y29uc3QgSmU9d2Uuc3BsaXQoIkAiKTtsZXQgb3Q9IiI7SmUubGVuZ3RoPjEmJihvdD1KZVswXSsi''@;'; put 'put ''QCIsd2U9SmVbMV0pO2NvbnN0IHZlPWZ1bmN0aW9uIFQod2UsVWUpe2NvbnN0IEplPVtdO2xldCBvdD13ZS5sZW5ndGg7Zm9yKDtvdC0tOylKZVtvdF09VWUod2Vbb3RdKTtyZXR1cm4gSmV9KCh3ZT13ZS5yZXBsYWNlKGplLCIuIikpLnNwbGl0KCIuIiksVWUpLmpvaW4oIi4iKTtyZXR1cm4g''@;'; put 'put ''b3QrdmV9ZnVuY3Rpb24gaih3ZSl7Y29uc3QgVWU9W107bGV0IEplPTA7Y29uc3Qgb3Q9d2UubGVuZ3RoO2Zvcig7SmU8b3Q7KXtjb25zdCB4ZT13ZS5jaGFyQ29kZUF0KEplKyspO2lmKHhlPj01NTI5NiYmeGU8PTU2MzE5JiZKZTxvdCl7Y29uc3QgdmU9d2UuY2hhckNvZGVBdChKZSsrKTs1''@;'; put 'put ''NjMyMD09KDY0NTEyJnZlKT9VZS5wdXNoKCgoMTAyMyZ4ZSk8PDEwKSsoMTAyMyZ2ZSkrNjU1MzYpOihVZS5wdXNoKHhlKSxKZS0tKX1lbHNlIFVlLnB1c2goeGUpfXJldHVybiBVZX1jb25zdCBtPWZ1bmN0aW9uKHdlKXtyZXR1cm4gd2U+PTQ4JiZ3ZTw1OD93ZS00OCsyNjp3ZT49NjUmJndl''@;'; put 'put ''PDkxP3dlLTY1OndlPj05NyYmd2U8MTIzP3dlLTk3OnF9LEE9ZnVuY3Rpb24od2UsVWUpe3JldHVybiB3ZSsyMis3NSood2U8MjYpLSgoMCE9VWUpPDw1KX0sYWU9ZnVuY3Rpb24od2UsVWUsSmUpe2xldCBvdD0wO2Zvcih3ZT1KZT9iKHdlLzcwMCk6d2U+PjEsd2UrPWIod2UvVWUpO3dlPjQ1''@;'; put 'put ''NTtvdCs9cSl3ZT1iKHdlLzM1KTtyZXR1cm4gYihvdCszNip3ZS8od2UrMzgpKX0sdGU9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLEplPXdlLmxlbmd0aDtsZXQgb3Q9MCx4ZT0xMjgsdmU9NzIsWGU9d2UubGFzdEluZGV4T2YoIi0iKTtYZTwwJiYoWGU9MCk7Zm9yKGxldCB6ZT0wO3plPFhl''@;'; put 'put ''OysremUpd2UuY2hhckNvZGVBdCh6ZSk+PTEyOCYmQygibm90LWJhc2ljIiksVWUucHVzaCh3ZS5jaGFyQ29kZUF0KHplKSk7Zm9yKGxldCB6ZT1YZT4wP1hlKzE6MDt6ZTxKZTspe2NvbnN0IERlPW90O2ZvcihsZXQgT2U9MSxJZT1xOztJZSs9cSl7emU+PUplJiZDKCJpbnZhbGlkLWlucHV0''@;'; put 'put ''Iik7Y29uc3QgVmU9bSh3ZS5jaGFyQ29kZUF0KHplKyspKTtWZT49cSYmQygiaW52YWxpZC1pbnB1dCIpLFZlPmIoKFktb3QpL09lKSYmQygib3ZlcmZsb3ciKSxvdCs9VmUqT2U7Y29uc3Qga2U9SWU8PXZlPzE6SWU+PXZlKzI2PzI2OkllLXZlO2lmKFZlPGtlKWJyZWFrO2NvbnN0IEFlPXEt''@;'; put 'put ''a2U7T2U+YihZL0FlKSYmQygib3ZlcmZsb3ciKSxPZSo9QWV9Y29uc3QgRmU9VWUubGVuZ3RoKzE7dmU9YWUob3QtRGUsRmUsMD09RGUpLGIob3QvRmUpPlkteGUmJkMoIm92ZXJmbG93IikseGUrPWIob3QvRmUpLG90JT1GZSxVZS5zcGxpY2Uob3QrKywwLHhlKX1yZXR1cm4gU3RyaW5nLmZy''@;'; put 'put ''b21Db2RlUG9pbnQoLi4uVWUpfSxzZT1mdW5jdGlvbih3ZSl7Y29uc3QgVWU9W10sSmU9KHdlPWood2UpKS5sZW5ndGg7bGV0IG90PTEyOCx4ZT0wLHZlPTcyO2Zvcihjb25zdCBEZSBvZiB3ZSlEZTwxMjgmJlVlLnB1c2goeChEZSkpO2NvbnN0IFhlPVVlLmxlbmd0aDtsZXQgemU9WGU7Zm9y''@;'; put 'put ''KFhlJiZVZS5wdXNoKCItIik7emU8SmU7KXtsZXQgRGU9WTtmb3IoY29uc3QgT2Ugb2Ygd2UpT2U+PW90JiZPZTxEZSYmKERlPU9lKTtjb25zdCBGZT16ZSsxO0RlLW90PmIoKFkteGUpL0ZlKSYmQygib3ZlcmZsb3ciKSx4ZSs9KERlLW90KSpGZSxvdD1EZTtmb3IoY29uc3QgT2Ugb2Ygd2Up''@;'; put 'put ''aWYoT2U8b3QmJisreGU+WSYmQygib3ZlcmZsb3ciKSxPZT09PW90KXtsZXQgSWU9eGU7Zm9yKGxldCBWZT1xOztWZSs9cSl7Y29uc3Qga2U9VmU8PXZlPzE6VmU+PXZlKzI2PzI2OlZlLXZlO2lmKEllPGtlKWJyZWFrO2NvbnN0IEFlPUllLWtlLF90PXEta2U7VWUucHVzaCh4KEEoa2UrQWUl''@;'; put 'put ''X3QsMCkpKSxJZT1iKEFlL190KX1VZS5wdXNoKHgoQShJZSwwKSkpLHZlPWFlKHhlLEZlLHplPT09WGUpLHhlPTAsKyt6ZX0rK3hlLCsrb3R9cmV0dXJuIFVlLmpvaW4oIiIpfTtyZXR1cm4gST17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTpqLGVuY29kZTp3ZT0+U3RyaW5nLmZyb21D''@;'; put 'put ''b2RlUG9pbnQoLi4ud2UpfSxkZWNvZGU6dGUsZW5jb2RlOnNlLHRvQVNDSUk6ZnVuY3Rpb24od2Upe3JldHVybiBIKHdlLGZ1bmN0aW9uKFVlKXtyZXR1cm4gU2UudGVzdChVZSk/InhuLS0iK3NlKFVlKTpVZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24od2Upe3JldHVybiBIKHdlLGZ1bmN0aW9u''@;'; put 'put ''KFVlKXtyZXR1cm4gVGUudGVzdChVZSk/dGUoVWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VWV9KX19fSgpKSxGPVsiYWMiLCJjb20uYWMiLCJlZHUuYWMiLCJnb3YuYWMiLCJtaWwuYWMiLCJuZXQuYWMiLCJvcmcuYWMiLCJhZCIsImFlIiwiYWMuYWUiLCJjby5hZSIsImdvdi5hZSIsIm1p''@;'; put 'put ''bC5hZSIsIm5ldC5hZSIsIm9yZy5hZSIsInNjaC5hZSIsImFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm8iLCJhY2NpZGVudC1wcmV2ZW50aW9uLmFlcm8iLCJhZXJvYmF0aWMuYWVybyIsImFlcm9jbHViLmFlcm8iLCJhZXJv''@;'; put 'put ''ZHJvbWUuYWVybyIsImFnZW50cy5hZXJvIiwiYWlyLXN1cnZlaWxsYW5jZS5hZXJvIiwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvIiwiYWlyY3JhZnQuYWVybyIsImFpcnRyYWZmaWMuYWVybyIsImFtYnVsYW5jZS5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFs''@;'; put 'put ''bG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJl''@;'; put 'put ''bmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5n''@;'; put 'put ''aW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnJlaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVu''@;'; put 'put ''dC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFn''@;'; put 'put ''YXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtYXJrZXRwbGFjZS5hZXJvIiwibWVkaWEuYWVybyIsIm1pY3JvbGlnaHQuYWVybyIsIm1vZGVsbGluZy5hZXJvIiwibmF2aWdhdGlvbi5hZXJvIiwicGFyYWNodXRpbmcuYWVybyIsInBhcmFnbGlkaW5nLmFlcm8iLCJwYXNzZW5nZXIt''@;'; put 'put ''YXNzb2NpYXRpb24uYWVybyIsInBpbG90LmFlcm8iLCJwcmVzcy5hZXJvIiwicHJvZHVjdGlvbi5hZXJvIiwicmVjcmVhdGlvbi5hZXJvIiwicmVwYm9keS5hZXJvIiwicmVzLmFlcm8iLCJyZXNlYXJjaC5hZXJvIiwicm90b3JjcmFmdC5hZXJvIiwic2FmZXR5LmFlcm8iLCJzY2llbnRpc3Qu''@;'; put 'put ''YWVybyIsInNlcnZpY2VzLmFlcm8iLCJzaG93LmFlcm8iLCJza3lkaXZpbmcuYWVybyIsInNvZnR3YXJlLmFlcm8iLCJzdHVkZW50LmFlcm8iLCJ0YXhpLmFlcm8iLCJ0cmFkZXIuYWVybyIsInRyYWRpbmcuYWVybyIsInRyYWluZXIuYWVybyIsInVuaW9uLmFlcm8iLCJ3b3JraW5nZ3JvdXAu''@;'; put 'put ''YWVybyIsIndvcmtzLmFlcm8iLCJhZiIsImNvbS5hZiIsImVkdS5hZiIsImdvdi5hZiIsIm5ldC5hZiIsIm9yZy5hZiIsImFnIiwiY28uYWciLCJjb20uYWciLCJuZXQuYWciLCJub20uYWciLCJvcmcuYWciLCJhaSIsImNvbS5haSIsIm5ldC5haSIsIm9mZi5haSIsIm9yZy5haSIsImFsIiwi''@;'; put 'put ''Y29tLmFsIiwiZWR1LmFsIiwiZ292LmFsIiwibWlsLmFsIiwibmV0LmFsIiwib3JnLmFsIiwiYW0iLCJjby5hbSIsImNvbS5hbSIsImNvbW11bmUuYW0iLCJuZXQuYW0iLCJvcmcuYW0iLCJhbyIsImNvLmFvIiwiZWQuYW8iLCJlZHUuYW8iLCJnb3YuYW8iLCJndi5hbyIsIml0LmFvIiwib2cu''@;'; put 'put ''YW8iLCJvcmcuYW8iLCJwYi5hbyIsImFxIiwiYXIiLCJiZXQuYXIiLCJjb20uYXIiLCJjb29wLmFyIiwiZWR1LmFyIiwiZ29iLmFyIiwiZ292LmFyIiwiaW50LmFyIiwibWlsLmFyIiwibXVzaWNhLmFyIiwibXV0dWFsLmFyIiwibmV0LmFyIiwib3JnLmFyIiwic2VuYXNhLmFyIiwidHVyLmFy''@;'; put 'put ''IiwiYXJwYSIsImUxNjQuYXJwYSIsImhvbWUuYXJwYSIsImluLWFkZHIuYXJwYSIsImlwNi5hcnBhIiwiaXJpcy5hcnBhIiwidXJpLmFycGEiLCJ1cm4uYXJwYSIsImFzIiwiZ292LmFzIiwiYXNpYSIsImF0IiwiYWMuYXQiLCJzdGguYWMuYXQiLCJjby5hdCIsImd2LmF0Iiwib3IuYXQiLCJh''@;'; put 'put ''dSIsImFzbi5hdSIsImNvbS5hdSIsImVkdS5hdSIsImdvdi5hdSIsImlkLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIs''@;'; put 'put ''ImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJudC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3Yu''@;'; put 'put ''YXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNvbS5hdyIsImF4IiwiYXoiLCJiaXouYXoiLCJjb20uYXoiLCJlZHUuYXoiLCJnb3YuYXoiLCJpbmZvLmF6IiwiaW50LmF6IiwibWlsLmF6IiwibmFtZS5heiIsIm5ldC5heiIsIm9yZy5heiIsInBwLmF6IiwicHJvLmF6IiwiYmEiLCJj''@;'; put 'put ''b20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEiLCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5i''@;'; put 'put ''ZSIsImJmIiwiZ292LmJmIiwiYmciLCIwLmJnIiwiMS5iZyIsIjIuYmciLCIzLmJnIiwiNC5iZyIsIjUuYmciLCI2LmJnIiwiNy5iZyIsIjguYmciLCI5LmJnIiwiYS5iZyIsImIuYmciLCJjLmJnIiwiZC5iZyIsImUuYmciLCJmLmJnIiwiZy5iZyIsImguYmciLCJpLmJnIiwiai5iZyIsImsu''@;'; put 'put ''YmciLCJsLmJnIiwibS5iZyIsIm4uYmciLCJvLmJnIiwicC5iZyIsInEuYmciLCJyLmJnIiwicy5iZyIsInQuYmciLCJ1LmJnIiwidi5iZyIsIncuYmciLCJ4LmJnIiwieS5iZyIsInouYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsImdvdi5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImJpIiwi''@;'; put 'put ''Y28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIsIm9yZy5iaSIsImJpeiIsImJqIiwiYWZyaWNhLmJqIiwiYWdyby5iaiIsImFyY2hpdGVjdGVzLmJqIiwiYXNzdXIuYmoiLCJhdm9jYXRzLmJqIiwiY28uYmoiLCJjb20uYmoiLCJlY28uYmoiLCJlY29uby5iaiIsImVkdS5iaiIsImlu''@;'; put 'put ''Zm8uYmoiLCJsb2lzaXJzLmJqIiwibW9uZXkuYmoiLCJuZXQuYmoiLCJvcmcuYmoiLCJvdGUuYmoiLCJyZXN0YXVyYW50LmJqIiwicmVzdG8uYmoiLCJ0b3VyaXNtLmJqIiwidW5pdi5iaiIsImJtIiwiY29tLmJtIiwiZWR1LmJtIiwiZ292LmJtIiwibmV0LmJtIiwib3JnLmJtIiwiYm4iLCJj''@;'; put 'put ''b20uYm4iLCJlZHUuYm4iLCJnb3YuYm4iLCJuZXQuYm4iLCJvcmcuYm4iLCJibyIsImNvbS5ibyIsImVkdS5ibyIsImdvYi5ibyIsImludC5ibyIsIm1pbC5ibyIsIm5ldC5ibyIsIm9yZy5ibyIsInR2LmJvIiwid2ViLmJvIiwiYWNhZGVtaWEuYm8iLCJhZ3JvLmJvIiwiYXJ0ZS5ibyIsImJs''@;'; put 'put ''b2cuYm8iLCJib2xpdmlhLmJvIiwiY2llbmNpYS5ibyIsImNvb3BlcmF0aXZhLmJvIiwiZGVtb2NyYWNpYS5ibyIsImRlcG9ydGUuYm8iLCJlY29sb2dpYS5ibyIsImVjb25vbWlhLmJvIiwiZW1wcmVzYS5ibyIsImluZGlnZW5hLmJvIiwiaW5kdXN0cmlhLmJvIiwiaW5mby5ibyIsIm1lZGlj''@;'; put 'put ''aW5hLmJvIiwibW92aW1pZW50by5ibyIsIm11c2ljYS5ibyIsIm5hdHVyYWwuYm8iLCJub21icmUuYm8iLCJub3RpY2lhcy5ibyIsInBhdHJpYS5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwb2xpdGljYS5ibyIsInByb2Zlc2lvbmFsLmJvIiwicHVlYmxvLmJvIiwicmV2aXN0YS5ibyIsInNh''@;'; put 'put ''bHVkLmJvIiwidGVjbm9sb2dpYS5ibyIsInRrc2F0LmJvIiwidHJhbnNwb3J0ZS5ibyIsIndpa2kuYm8iLCJiciIsIjlndWFjdS5iciIsImFiYy5iciIsImFkbS5iciIsImFkdi5iciIsImFnci5iciIsImFqdS5iciIsImFtLmJyIiwiYW5hbmkuYnIiLCJhcGFyZWNpZGEuYnIiLCJhcHAuYnIi''@;'; put 'put ''LCJhcnEuYnIiLCJhcnQuYnIiLCJhdG8uYnIiLCJiLmJyIiwiYmFydWVyaS5iciIsImJlbGVtLmJyIiwiYmV0LmJyIiwiYmh6LmJyIiwiYmliLmJyIiwiYmlvLmJyIiwiYmxvZy5iciIsImJtZC5iciIsImJvYXZpc3RhLmJyIiwiYnNiLmJyIiwiY2FtcGluYWdyYW5kZS5iciIsImNhbXBpbmFz''@;'; put 'put ''LmJyIiwiY2F4aWFzLmJyIiwiY2ltLmJyIiwiY25nLmJyIiwiY250LmJyIiwiY29tLmJyIiwiY29udGFnZW0uYnIiLCJjb29wLmJyIiwiY296LmJyIiwiY3JpLmJyIiwiY3VpYWJhLmJyIiwiY3VyaXRpYmEuYnIiLCJkZWYuYnIiLCJkZXMuYnIiLCJkZXQuYnIiLCJkZXYuYnIiLCJlY24uYnIi''@;'; put 'put ''LCJlY28uYnIiLCJlZHUuYnIiLCJlbXAuYnIiLCJlbmYuYnIiLCJlbmcuYnIiLCJlc3AuYnIiLCJldGMuYnIiLCJldGkuYnIiLCJmYXIuYnIiLCJmZWlyYS5iciIsImZsb2cuYnIiLCJmbG9yaXBhLmJyIiwiZm0uYnIiLCJmbmQuYnIiLCJmb3J0YWwuYnIiLCJmb3QuYnIiLCJmb3ouYnIiLCJm''@;'; put 'put ''c3QuYnIiLCJnMTIuYnIiLCJnZW8uYnIiLCJnZ2YuYnIiLCJnb2lhbmlhLmJyIiwiZ292LmJyIiwiYWMuZ292LmJyIiwiYWwuZ292LmJyIiwiYW0uZ292LmJyIiwiYXAuZ292LmJyIiwiYmEuZ292LmJyIiwiY2UuZ292LmJyIiwiZGYuZ292LmJyIiwiZXMuZ292LmJyIiwiZ28uZ292LmJyIiwi''@;'; put 'put ''bWEuZ292LmJyIiwibWcuZ292LmJyIiwibXMuZ292LmJyIiwibXQuZ292LmJyIiwicGEuZ292LmJyIiwicGIuZ292LmJyIiwicGUuZ292LmJyIiwicGkuZ292LmJyIiwicHIuZ292LmJyIiwicmouZ292LmJyIiwicm4uZ292LmJyIiwicm8uZ292LmJyIiwicnIuZ292LmJyIiwicnMuZ292LmJy''@;'; put 'put ''Iiwic2MuZ292LmJyIiwic2UuZ292LmJyIiwic3AuZ292LmJyIiwidG8uZ292LmJyIiwiZ3J1LmJyIiwiaW1iLmJyIiwiaW5kLmJyIiwiaW5mLmJyIiwiamFiLmJyIiwiamFtcGEuYnIiLCJqZGYuYnIiLCJqb2ludmlsbGUuYnIiLCJqb3IuYnIiLCJqdXMuYnIiLCJsZWcuYnIiLCJsZWlsYW8u''@;'; put 'put ''YnIiLCJsZWwuYnIiLCJsb2cuYnIiLCJsb25kcmluYS5iciIsIm1hY2FwYS5iciIsIm1hY2Vpby5iciIsIm1hbmF1cy5iciIsIm1hcmluZ2EuYnIiLCJtYXQuYnIiLCJtZWQuYnIiLCJtaWwuYnIiLCJtb3JlbmEuYnIiLCJtcC5iciIsIm11cy5iciIsIm5hdGFsLmJyIiwibmV0LmJyIiwibml0''@;'; put 'put ''ZXJvaS5iciIsIioubm9tLmJyIiwibm90LmJyIiwibnRyLmJyIiwib2RvLmJyIiwib25nLmJyIiwib3JnLmJyIiwib3Nhc2NvLmJyIiwicGFsbWFzLmJyIiwicG9hLmJyIiwicHBnLmJyIiwicHJvLmJyIiwicHNjLmJyIiwicHNpLmJyIiwicHZoLmJyIiwicXNsLmJyIiwicmFkaW8uYnIiLCJy''@;'; put 'put ''ZWMuYnIiLCJyZWNpZmUuYnIiLCJyZXAuYnIiLCJyaWJlaXJhby5iciIsInJpby5iciIsInJpb2JyYW5jby5iciIsInJpb3ByZXRvLmJyIiwic2FsdmFkb3IuYnIiLCJzYW1wYS5iciIsInNhbnRhbWFyaWEuYnIiLCJzYW50b2FuZHJlLmJyIiwic2FvYmVybmFyZG8uYnIiLCJzYW9nb25jYS5i''@;'; put 'put ''ciIsInNlZy5iciIsInNqYy5iciIsInNsZy5iciIsInNsei5iciIsInNvcm9jYWJhLmJyIiwic3J2LmJyIiwidGF4aS5iciIsInRjLmJyIiwidGVjLmJyIiwidGVvLmJyIiwidGhlLmJyIiwidG1wLmJyIiwidHJkLmJyIiwidHVyLmJyIiwidHYuYnIiLCJ1ZGkuYnIiLCJ2ZXQuYnIiLCJ2aXgu''@;'; put 'put ''YnIiLCJ2bG9nLmJyIiwid2lraS5iciIsInpsZy5iciIsImJzIiwiY29tLmJzIiwiZWR1LmJzIiwiZ292LmJzIiwibmV0LmJzIiwib3JnLmJzIiwiYnQiLCJjb20uYnQiLCJlZHUuYnQiLCJnb3YuYnQiLCJuZXQuYnQiLCJvcmcuYnQiLCJidiIsImJ3IiwiY28uYnciLCJvcmcuYnciLCJieSIs''@;'; put 'put ''Imdvdi5ieSIsIm1pbC5ieSIsImNvbS5ieSIsIm9mLmJ5IiwiYnoiLCJjby5ieiIsImNvbS5ieiIsImVkdS5ieiIsImdvdi5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51''@;'; put 'put ''LmNhIiwib24uY2EiLCJwZS5jYSIsInFjLmNhIiwic2suY2EiLCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwiYWMuY2kiLCJhXHhlOXJvcG9ydC5jaSIsImFzc28uY2kiLCJjby5jaSIsImNvbS5jaSIsImVkLmNpIiwiZWR1LmNp''@;'; put 'put ''IiwiZ28uY2kiLCJnb3V2LmNpIiwiaW50LmNpIiwibmV0LmNpIiwib3IuY2kiLCJvcmcuY2kiLCIqLmNrIiwiIXd3dy5jayIsImNsIiwiY28uY2wiLCJnb2IuY2wiLCJnb3YuY2wiLCJtaWwuY2wiLCJjbSIsImNvLmNtIiwiY29tLmNtIiwiZ292LmNtIiwibmV0LmNtIiwiY24iLCJhYy5jbiIs''@;'; put 'put ''ImNvbS5jbiIsImVkdS5jbiIsImdvdi5jbiIsIm1pbC5jbiIsIm5ldC5jbiIsIm9yZy5jbiIsIlx1NTE2Y1x1NTNmOC5jbiIsIlx1N2RiMlx1N2Q2MS5jbiIsIlx1N2Y1MVx1N2VkYy5jbiIsImFoLmNuIiwiYmouY24iLCJjcS5jbiIsImZqLmNuIiwiZ2QuY24iLCJncy5jbiIsImd4LmNuIiwi''@;'; put 'put ''Z3ouY24iLCJoYS5jbiIsImhiLmNuIiwiaGUuY24iLCJoaS5jbiIsImhrLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwibW8uY24iLCJubS5jbiIsIm54LmNuIiwicWguY24iLCJzYy5jbiIsInNkLmNuIiwic2guY24iLCJzbi5jbiIsInN4LmNu''@;'; put 'put ''IiwidGouY24iLCJ0dy5jbiIsInhqLmNuIiwieHouY24iLCJ5bi5jbiIsInpqLmNuIiwiY28iLCJjb20uY28iLCJlZHUuY28iLCJnb3YuY28iLCJtaWwuY28iLCJuZXQuY28iLCJub20uY28iLCJvcmcuY28iLCJjb20iLCJjb29wIiwiY3IiLCJhYy5jciIsImNvLmNyIiwiZWQuY3IiLCJmaS5j''@;'; put 'put ''ciIsImdvLmNyIiwib3IuY3IiLCJzYS5jciIsImN1IiwiY29tLmN1IiwiZWR1LmN1IiwiZ29iLmN1IiwiaW5mLmN1IiwibmF0LmN1IiwibmV0LmN1Iiwib3JnLmN1IiwiY3YiLCJjb20uY3YiLCJlZHUuY3YiLCJpZC5jdiIsImludC5jdiIsIm5ldC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJw''@;'; put 'put ''dWJsLmN2IiwiY3ciLCJjb20uY3ciLCJlZHUuY3ciLCJuZXQuY3ciLCJvcmcuY3ciLCJjeCIsImdvdi5jeCIsImN5IiwiYWMuY3kiLCJiaXouY3kiLCJjb20uY3kiLCJla2xvZ2VzLmN5IiwiZ292LmN5IiwibHRkLmN5IiwibWlsLmN5IiwibmV0LmN5Iiwib3JnLmN5IiwicHJlc3MuY3kiLCJw''@;'; put 'put ''cm8uY3kiLCJ0bS5jeSIsImN6IiwiZGUiLCJkaiIsImRrIiwiZG0iLCJjby5kbSIsImNvbS5kbSIsImVkdS5kbSIsImdvdi5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3Jn''@;'; put 'put ''LmRvIiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6IiwibmV0LmR6Iiwib3JnLmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImVkdS5lYyIsImZpbi5lYyIsImdvYi5lYyIsImdvdi5l''@;'; put 'put ''YyIsImluZm8uZWMiLCJrMTIuZWMiLCJtZWQuZWMiLCJtaWwuZWMiLCJuZXQuZWMiLCJvcmcuZWMiLCJwcm8uZWMiLCJlZHUiLCJlZSIsImFpcC5lZSIsImNvbS5lZSIsImVkdS5lZSIsImZpZS5lZSIsImdvdi5lZSIsImxpYi5lZSIsIm1lZC5lZSIsIm9yZy5lZSIsInByaS5lZSIsInJpaWsu''@;'; put 'put ''ZWUiLCJlZyIsImFjLmVnIiwiY29tLmVnIiwiZWR1LmVnIiwiZXVuLmVnIiwiZ292LmVnIiwiaW5mby5lZyIsIm1lLmVnIiwibWlsLmVnIiwibmFtZS5lZyIsIm5ldC5lZyIsIm9yZy5lZyIsInNjaS5lZyIsInNwb3J0LmVnIiwidHYuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJlZHUuZXMi''@;'; put 'put ''LCJnb2IuZXMiLCJub20uZXMiLCJvcmcuZXMiLCJldCIsImJpei5ldCIsImNvbS5ldCIsImVkdS5ldCIsImdvdi5ldCIsImluZm8uZXQiLCJuYW1lLmV0IiwibmV0LmV0Iiwib3JnLmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5m''@;'; put 'put ''aiIsImluZm8uZmoiLCJtaWwuZmoiLCJuYW1lLmZqIiwibmV0LmZqIiwib3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImZtIiwiY29tLmZtIiwiZWR1LmZtIiwibmV0LmZtIiwib3JnLmZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwi''@;'; put 'put ''dG0uZnIiLCJhdm91ZXMuZnIiLCJjY2kuZnIiLCJncmV0YS5mciIsImh1aXNzaWVyLWp1c3RpY2UuZnIiLCJnYSIsImdiIiwiZ2QiLCJlZHUuZ2QiLCJnb3YuZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm5ldC5nZSIsIm9yZy5nZSIsInB2dC5nZSIsInNjaG9vbC5nZSIs''@;'; put 'put ''ImdmIiwiZ2ciLCJjby5nZyIsIm5ldC5nZyIsIm9yZy5nZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwibWlsLmdoIiwib3JnLmdoIiwiZ2kiLCJjb20uZ2kiLCJlZHUuZ2kiLCJnb3YuZ2kiLCJsdGQuZ2kiLCJtb2QuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmds''@;'; put 'put ''IiwiZWR1LmdsIiwibmV0LmdsIiwib3JnLmdsIiwiZ20iLCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwibmV0LmduIiwib3JnLmduIiwiZ292IiwiZ3AiLCJhc3NvLmdwIiwiY29tLmdwIiwiZWR1LmdwIiwibW9iaS5ncCIsIm5ldC5ncCIsIm9yZy5ncCIsImdxIiwi''@;'; put 'put ''Z3IiLCJjb20uZ3IiLCJlZHUuZ3IiLCJnb3YuZ3IiLCJuZXQuZ3IiLCJvcmcuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1Iiwi''@;'; put 'put ''aW5mby5ndSIsIm5ldC5ndSIsIm9yZy5ndSIsIndlYi5ndSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU0ZTJh''@;'; put 'put ''XHU0ZWJhLmhrIiwiXHU1MDBiXHU0ZWJhLmhrIiwiXHU1MTZjXHU1M2Y4LmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiXHU3ZGIyXHU3''@;'; put 'put ''ZDYxLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0LmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsImdvYi5obiIsIm1pbC5obiIsIm5ldC5obiIsIm9yZy5obiIsImhy''@;'; put 'put ''IiwiY29tLmhyIiwiZnJvbS5ociIsIml6LmhyIiwibmFtZS5ociIsImh0IiwiYWR1bHQuaHQiLCJhcnQuaHQiLCJhc3NvLmh0IiwiY29tLmh0IiwiY29vcC5odCIsImVkdS5odCIsImZpcm0uaHQiLCJnb3V2Lmh0IiwiaW5mby5odCIsIm1lZC5odCIsIm5ldC5odCIsIm9yZy5odCIsInBlcnNv''@;'; put 'put ''Lmh0IiwicG9sLmh0IiwicHJvLmh0IiwicmVsLmh0Iiwic2hvcC5odCIsImh1IiwiMjAwMC5odSIsImFncmFyLmh1IiwiYm9sdC5odSIsImNhc2luby5odSIsImNpdHkuaHUiLCJjby5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUi''@;'; put 'put ''LCJob3RlbC5odSIsImluZm8uaHUiLCJpbmdhdGxhbi5odSIsImpvZ2Fzei5odSIsImtvbnl2ZWxvLmh1IiwibGFrYXMuaHUiLCJtZWRpYS5odSIsIm5ld3MuaHUiLCJvcmcuaHUiLCJwcml2Lmh1IiwicmVrbGFtLmh1Iiwic2V4Lmh1Iiwic2hvcC5odSIsInNwb3J0Lmh1Iiwic3VsaS5odSIs''@;'; put 'put ''InN6ZXguaHUiLCJ0bS5odSIsInRvenNkZS5odSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIs''@;'; put 'put ''ImllIiwiZ292LmllIiwiaWwiLCJhYy5pbCIsImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsIlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkMFx1MDVlN1x1MDVkM1x1MDVkZVx1MDVkOVx1MDVkNC5cdTA1''@;'; put 'put ''ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDlcdTA1ZTlcdTA1ZDVcdTA1ZDEuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWU2XHUwNWQ0XHUwNWRjLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkZVx1MDVkZVx1MDVlOVx1MDVkYy5c''@;'; put 'put ''dTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJpbSIsImFjLmltIiwiY28uaW0iLCJsdGQuY28uaW0iLCJwbGMuY28uaW0iLCJjb20uaW0iLCJuZXQuaW0iLCJvcmcuaW0iLCJ0dC5pbSIsInR2LmltIiwiaW4iLCI1Zy5pbiIsIjZnLmluIiwiYWMuaW4iLCJhaS5pbiIsImFtLmluIiwi''@;'; put 'put ''YmloYXIuaW4iLCJiaXouaW4iLCJidXNpbmVzcy5pbiIsImNhLmluIiwiY24uaW4iLCJjby5pbiIsImNvbS5pbiIsImNvb3AuaW4iLCJjcy5pbiIsImRlbGhpLmluIiwiZHIuaW4iLCJlZHUuaW4iLCJlci5pbiIsImZpcm0uaW4iLCJnZW4uaW4iLCJnb3YuaW4iLCJndWphcmF0LmluIiwiaW5k''@;'; put 'put ''LmluIiwiaW5mby5pbiIsImludC5pbiIsImludGVybmV0LmluIiwiaW8uaW4iLCJtZS5pbiIsIm1pbC5pbiIsIm5ldC5pbiIsIm5pYy5pbiIsIm9yZy5pbiIsInBnLmluIiwicG9zdC5pbiIsInByby5pbiIsInJlcy5pbiIsInRyYXZlbC5pbiIsInR2LmluIiwidWsuaW4iLCJ1cC5pbiIsInVz''@;'; put 'put ''LmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY28uaW8iLCJjb20uaW8iLCJlZHUuaW8iLCJnb3YuaW8iLCJtaWwuaW8iLCJuZXQuaW8iLCJub20uaW8iLCJvcmcuaW8iLCJpcSIsImNvbS5pcSIsImVkdS5pcSIsImdvdi5pcSIsIm1pbC5pcSIsIm5ldC5pcSIsIm9yZy5pcSIsImly''@;'; put 'put ''IiwiYWMuaXIiLCJjby5pciIsImdvdi5pciIsImlkLmlyIiwibmV0LmlyIiwib3JnLmlyIiwic2NoLmlyIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiaXMiLCJpdCIsImVkdS5pdCIsImdvdi5pdCIsImFi''@;'; put 'put ''ci5pdCIsImFicnV6em8uaXQiLCJhb3N0YS12YWxsZXkuaXQiLCJhb3N0YXZhbGxleS5pdCIsImJhcy5pdCIsImJhc2lsaWNhdGEuaXQiLCJjYWwuaXQiLCJjYWxhYnJpYS5pdCIsImNhbS5pdCIsImNhbXBhbmlhLml0IiwiZW1pbGlhLXJvbWFnbmEuaXQiLCJlbWlsaWFyb21hZ25hLml0Iiwi''@;'; put 'put ''ZW1yLml0IiwiZnJpdWxpLXYtZ2l1bGlhLml0IiwiZnJpdWxpLXZlLWdpdWxpYS5pdCIsImZyaXVsaS12ZWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpLXZnaXVsaWEuaXQiLCJmcml1bGl2LWdpdWxpYS5pdCIs''@;'; put 'put ''ImZyaXVsaXZlLWdpdWxpYS5pdCIsImZyaXVsaXZlZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpdmdpdWxpYS5pdCIsImZ2Zy5pdCIsImxhei5pdCIsImxhemlvLml0IiwibGlnLml0IiwibGlndXJpYS5pdCIsImxv''@;'; put 'put ''bS5pdCIsImxvbWJhcmRpYS5pdCIsImxvbWJhcmR5Lml0IiwibHVjYW5pYS5pdCIsIm1hci5pdCIsIm1hcmNoZS5pdCIsIm1vbC5pdCIsIm1vbGlzZS5pdCIsInBpZWRtb250Lml0IiwicGllbW9udGUuaXQiLCJwbW4uaXQiLCJwdWcuaXQiLCJwdWdsaWEuaXQiLCJzYXIuaXQiLCJzYXJkZWdu''@;'; put 'put ''YS5pdCIsInNhcmRpbmlhLml0Iiwic2ljLml0Iiwic2ljaWxpYS5pdCIsInNpY2lseS5pdCIsInRhYS5pdCIsInRvcy5pdCIsInRvc2NhbmEuaXQiLCJ0cmVudGluLXN1ZC10aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbi1zdWR0aXJvbC5pdCIsInRyZW50aW4t''@;'; put 'put ''c1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm8tYS1hZGlnZS5pdCIsInRyZW50aW5vLWFhZGlnZS5pdCIsInRyZW50aW5vLWFsdG8tYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvYWRpZ2Uu''@;'; put 'put ''aXQiLCJ0cmVudGluby1zLXRpcm9sLml0IiwidHJlbnRpbm8tc3Rpcm9sLml0IiwidHJlbnRpbm8tc3VkLXRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VkdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vLXN1ZWQtdGly''@;'; put 'put ''b2wuaXQiLCJ0cmVudGluby1zdWVkdGlyb2wuaXQiLCJ0cmVudGlub2EtYWRpZ2UuaXQiLCJ0cmVudGlub2FhZGlnZS5pdCIsInRyZW50aW5vYWx0by1hZGlnZS5pdCIsInRyZW50aW5vYWx0b2FkaWdlLml0IiwidHJlbnRpbm9zLXRpcm9sLml0IiwidHJlbnRpbm9zdGlyb2wuaXQiLCJ0cmVu''@;'; put 'put ''dGlub3N1ZC10aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm9zdWR0aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWQtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWR0aXJvbC5pdCIsInRyZW50aW5zdWQtdGlyb2wuaXQiLCJ0cmVu''@;'; put 'put ''dGluc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbnN1ZHRpcm9sLml0IiwidHJlbnRpbnNceGZjZHRpcm9sLml0IiwidHJlbnRpbnN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluc3VlZHRpcm9sLml0IiwidHVzY2FueS5pdCIsInVtYi5pdCIsInVtYnJpYS5pdCIsInZhbC1kLWFvc3RhLml0IiwidmFs''@;'; put 'put ''LWRhb3N0YS5pdCIsInZhbGQtYW9zdGEuaXQiLCJ2YWxkYW9zdGEuaXQiLCJ2YWxsZS1hb3N0YS5pdCIsInZhbGxlLWQtYW9zdGEuaXQiLCJ2YWxsZS1kYW9zdGEuaXQiLCJ2YWxsZWFvc3RhLml0IiwidmFsbGVkLWFvc3RhLml0IiwidmFsbGVkYW9zdGEuaXQiLCJ2YWxsZWUtYW9zdGUuaXQi''@;'; put 'put ''LCJ2YWxsXHhlOWUtYW9zdGUuaXQiLCJ2YWxsZWUtZC1hb3N0ZS5pdCIsInZhbGxceGU5ZS1kLWFvc3RlLml0IiwidmFsbGVlYW9zdGUuaXQiLCJ2YWxsXHhlOWVhb3N0ZS5pdCIsInZhbGxlZWRhb3N0ZS5pdCIsInZhbGxceGU5ZWRhb3N0ZS5pdCIsInZhby5pdCIsInZkYS5pdCIsInZlbi5p''@;'; put 'put ''dCIsInZlbmV0by5pdCIsImFnLml0IiwiYWdyaWdlbnRvLml0IiwiYWwuaXQiLCJhbGVzc2FuZHJpYS5pdCIsImFsdG8tYWRpZ2UuaXQiLCJhbHRvYWRpZ2UuaXQiLCJhbi5pdCIsImFuY29uYS5pdCIsImFuZHJpYS1iYXJsZXR0YS10cmFuaS5pdCIsImFuZHJpYS10cmFuaS1iYXJsZXR0YS5p''@;'; put 'put ''dCIsImFuZHJpYWJhcmxldHRhdHJhbmkuaXQiLCJhbmRyaWF0cmFuaWJhcmxldHRhLml0IiwiYW8uaXQiLCJhb3N0YS5pdCIsImFvc3RlLml0IiwiYXAuaXQiLCJhcS5pdCIsImFxdWlsYS5pdCIsImFyLml0IiwiYXJlenpvLml0IiwiYXNjb2xpLXBpY2Vuby5pdCIsImFzY29saXBpY2Vuby5p''@;'; put 'put ''dCIsImFzdGkuaXQiLCJhdC5pdCIsImF2Lml0IiwiYXZlbGxpbm8uaXQiLCJiYS5pdCIsImJhbHNhbi5pdCIsImJhbHNhbi1zdWR0aXJvbC5pdCIsImJhbHNhbi1zXHhmY2R0aXJvbC5pdCIsImJhbHNhbi1zdWVkdGlyb2wuaXQiLCJiYXJpLml0IiwiYmFybGV0dGEtdHJhbmktYW5kcmlhLml0''@;'; put 'put ''IiwiYmFybGV0dGF0cmFuaWFuZHJpYS5pdCIsImJlbGx1bm8uaXQiLCJiZW5ldmVudG8uaXQiLCJiZXJnYW1vLml0IiwiYmcuaXQiLCJiaS5pdCIsImJpZWxsYS5pdCIsImJsLml0IiwiYm4uaXQiLCJiby5pdCIsImJvbG9nbmEuaXQiLCJib2x6YW5vLml0IiwiYm9semFuby1hbHRvYWRpZ2Uu''@;'; put 'put ''aXQiLCJib3plbi5pdCIsImJvemVuLXN1ZHRpcm9sLml0IiwiYm96ZW4tc1x4ZmNkdGlyb2wuaXQiLCJib3plbi1zdWVkdGlyb2wuaXQiLCJici5pdCIsImJyZXNjaWEuaXQiLCJicmluZGlzaS5pdCIsImJzLml0IiwiYnQuaXQiLCJidWxzYW4uaXQiLCJidWxzYW4tc3VkdGlyb2wuaXQiLCJi''@;'; put 'put ''dWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJidWxzYW4tc3VlZHRpcm9sLml0IiwiYnouaXQiLCJjYS5pdCIsImNhZ2xpYXJpLml0IiwiY2FsdGFuaXNzZXR0YS5pdCIsImNhbXBpZGFuby1tZWRpby5pdCIsImNhbXBpZGFub21lZGlvLml0IiwiY2FtcG9iYXNzby5pdCIsImNhcmJvbmlhLWlnbGVz''@;'; put 'put ''aWFzLml0IiwiY2FyYm9uaWFpZ2xlc2lhcy5pdCIsImNhcnJhcmEtbWFzc2EuaXQiLCJjYXJyYXJhbWFzc2EuaXQiLCJjYXNlcnRhLml0IiwiY2F0YW5pYS5pdCIsImNhdGFuemFyby5pdCIsImNiLml0IiwiY2UuaXQiLCJjZXNlbmEtZm9ybGkuaXQiLCJjZXNlbmEtZm9ybFx4ZWMuaXQiLCJj''@;'; put 'put ''ZXNlbmFmb3JsaS5pdCIsImNlc2VuYWZvcmxceGVjLml0IiwiY2guaXQiLCJjaGlldGkuaXQiLCJjaS5pdCIsImNsLml0IiwiY24uaXQiLCJjby5pdCIsImNvbW8uaXQiLCJjb3NlbnphLml0IiwiY3IuaXQiLCJjcmVtb25hLml0IiwiY3JvdG9uZS5pdCIsImNzLml0IiwiY3QuaXQiLCJjdW5l''@;'; put 'put ''by5pdCIsImN6Lml0IiwiZGVsbC1vZ2xpYXN0cmEuaXQiLCJkZWxsb2dsaWFzdHJhLml0IiwiZW4uaXQiLCJlbm5hLml0IiwiZmMuaXQiLCJmZS5pdCIsImZlcm1vLml0IiwiZmVycmFyYS5pdCIsImZnLml0IiwiZmkuaXQiLCJmaXJlbnplLml0IiwiZmxvcmVuY2UuaXQiLCJmbS5pdCIsImZv''@;'; put 'put ''Z2dpYS5pdCIsImZvcmxpLWNlc2VuYS5pdCIsImZvcmxceGVjLWNlc2VuYS5pdCIsImZvcmxpY2VzZW5hLml0IiwiZm9ybFx4ZWNjZXNlbmEuaXQiLCJmci5pdCIsImZyb3Npbm9uZS5pdCIsImdlLml0IiwiZ2Vub2EuaXQiLCJnZW5vdmEuaXQiLCJnby5pdCIsImdvcml6aWEuaXQiLCJnci5p''@;'; put 'put ''dCIsImdyb3NzZXRvLml0IiwiaWdsZXNpYXMtY2FyYm9uaWEuaXQiLCJpZ2xlc2lhc2NhcmJvbmlhLml0IiwiaW0uaXQiLCJpbXBlcmlhLml0IiwiaXMuaXQiLCJpc2VybmlhLml0Iiwia3IuaXQiLCJsYS1zcGV6aWEuaXQiLCJsYXF1aWxhLml0IiwibGFzcGV6aWEuaXQiLCJsYXRpbmEuaXQi''@;'; put 'put ''LCJsYy5pdCIsImxlLml0IiwibGVjY2UuaXQiLCJsZWNjby5pdCIsImxpLml0IiwibGl2b3Juby5pdCIsImxvLml0IiwibG9kaS5pdCIsImx0Lml0IiwibHUuaXQiLCJsdWNjYS5pdCIsIm1hY2VyYXRhLml0IiwibWFudG92YS5pdCIsIm1hc3NhLWNhcnJhcmEuaXQiLCJtYXNzYWNhcnJhcmEu''@;'; put 'put ''aXQiLCJtYXRlcmEuaXQiLCJtYi5pdCIsIm1jLml0IiwibWUuaXQiLCJtZWRpby1jYW1waWRhbm8uaXQiLCJtZWRpb2NhbXBpZGFuby5pdCIsIm1lc3NpbmEuaXQiLCJtaS5pdCIsIm1pbGFuLml0IiwibWlsYW5vLml0IiwibW4uaXQiLCJtby5pdCIsIm1vZGVuYS5pdCIsIm1vbnphLml0Iiwi''@;'; put 'put ''bW9uemEtYnJpYW56YS5pdCIsIm1vbnphLWUtZGVsbGEtYnJpYW56YS5pdCIsIm1vbnphYnJpYW56YS5pdCIsIm1vbnphZWJyaWFuemEuaXQiLCJtb256YWVkZWxsYWJyaWFuemEuaXQiLCJtcy5pdCIsIm10Lml0IiwibmEuaXQiLCJuYXBsZXMuaXQiLCJuYXBvbGkuaXQiLCJuby5pdCIsIm5v''@;'; put 'put ''dmFyYS5pdCIsIm51Lml0IiwibnVvcm8uaXQiLCJvZy5pdCIsIm9nbGlhc3RyYS5pdCIsIm9sYmlhLXRlbXBpby5pdCIsIm9sYmlhdGVtcGlvLml0Iiwib3IuaXQiLCJvcmlzdGFuby5pdCIsIm90Lml0IiwicGEuaXQiLCJwYWRvdmEuaXQiLCJwYWR1YS5pdCIsInBhbGVybW8uaXQiLCJwYXJt''@;'; put 'put ''YS5pdCIsInBhdmlhLml0IiwicGMuaXQiLCJwZC5pdCIsInBlLml0IiwicGVydWdpYS5pdCIsInBlc2Fyby11cmJpbm8uaXQiLCJwZXNhcm91cmJpbm8uaXQiLCJwZXNjYXJhLml0IiwicGcuaXQiLCJwaS5pdCIsInBpYWNlbnphLml0IiwicGlzYS5pdCIsInBpc3RvaWEuaXQiLCJwbi5pdCIs''@;'; put 'put ''InBvLml0IiwicG9yZGVub25lLml0IiwicG90ZW56YS5pdCIsInByLml0IiwicHJhdG8uaXQiLCJwdC5pdCIsInB1Lml0IiwicHYuaXQiLCJwei5pdCIsInJhLml0IiwicmFndXNhLml0IiwicmF2ZW5uYS5pdCIsInJjLml0IiwicmUuaXQiLCJyZWdnaW8tY2FsYWJyaWEuaXQiLCJyZWdnaW8t''@;'; put 'put ''ZW1pbGlhLml0IiwicmVnZ2lvY2FsYWJyaWEuaXQiLCJyZWdnaW9lbWlsaWEuaXQiLCJyZy5pdCIsInJpLml0IiwicmlldGkuaXQiLCJyaW1pbmkuaXQiLCJybS5pdCIsInJuLml0Iiwicm8uaXQiLCJyb21hLml0Iiwicm9tZS5pdCIsInJvdmlnby5pdCIsInNhLml0Iiwic2FsZXJuby5pdCIs''@;'; put 'put ''InNhc3NhcmkuaXQiLCJzYXZvbmEuaXQiLCJzaS5pdCIsInNpZW5hLml0Iiwic2lyYWN1c2EuaXQiLCJzby5pdCIsInNvbmRyaW8uaXQiLCJzcC5pdCIsInNyLml0Iiwic3MuaXQiLCJzXHhmY2R0aXJvbC5pdCIsInN1ZWR0aXJvbC5pdCIsInN2Lml0IiwidGEuaXQiLCJ0YXJhbnRvLml0Iiwi''@;'; put 'put ''dGUuaXQiLCJ0ZW1waW8tb2xiaWEuaXQiLCJ0ZW1waW9vbGJpYS5pdCIsInRlcmFtby5pdCIsInRlcm5pLml0IiwidG4uaXQiLCJ0by5pdCIsInRvcmluby5pdCIsInRwLml0IiwidHIuaXQiLCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXQiLCJ0cmFuaS1iYXJsZXR0YS1hbmRyaWEuaXQiLCJ0''@;'; put 'put ''cmFuaWFuZHJpYWJhcmxldHRhLml0IiwidHJhbmliYXJsZXR0YWFuZHJpYS5pdCIsInRyYXBhbmkuaXQiLCJ0cmVudG8uaXQiLCJ0cmV2aXNvLml0IiwidHJpZXN0ZS5pdCIsInRzLml0IiwidHVyaW4uaXQiLCJ0di5pdCIsInVkLml0IiwidWRpbmUuaXQiLCJ1cmJpbm8tcGVzYXJvLml0Iiwi''@;'; put 'put ''dXJiaW5vcGVzYXJvLml0IiwidmEuaXQiLCJ2YXJlc2UuaXQiLCJ2Yi5pdCIsInZjLml0IiwidmUuaXQiLCJ2ZW5lemlhLml0IiwidmVuaWNlLml0IiwidmVyYmFuaWEuaXQiLCJ2ZXJjZWxsaS5pdCIsInZlcm9uYS5pdCIsInZpLml0Iiwidmliby12YWxlbnRpYS5pdCIsInZpYm92YWxlbnRp''@;'; put 'put ''YS5pdCIsInZpY2VuemEuaXQiLCJ2aXRlcmJvLml0IiwidnIuaXQiLCJ2cy5pdCIsInZ0Lml0IiwidnYuaXQiLCJqZSIsImNvLmplIiwibmV0LmplIiwib3JnLmplIiwiKi5qbSIsImpvIiwiYWdyaS5qbyIsImFpLmpvIiwiY29tLmpvIiwiZWR1LmpvIiwiZW5nLmpvIiwiZm0uam8iLCJnb3Yu''@;'; put 'put ''am8iLCJtaWwuam8iLCJuZXQuam8iLCJvcmcuam8iLCJwZXIuam8iLCJwaGQuam8iLCJzY2guam8iLCJ0di5qbyIsImpvYnMiLCJqcCIsImFjLmpwIiwiYWQuanAiLCJjby5qcCIsImVkLmpwIiwiZ28uanAiLCJnci5qcCIsImxnLmpwIiwibmUuanAiLCJvci5qcCIsImFpY2hpLmpwIiwiYWtp''@;'; put 'put ''dGEuanAiLCJhb21vcmkuanAiLCJjaGliYS5qcCIsImVoaW1lLmpwIiwiZnVrdWkuanAiLCJmdWt1b2thLmpwIiwiZnVrdXNoaW1hLmpwIiwiZ2lmdS5qcCIsImd1bm1hLmpwIiwiaGlyb3NoaW1hLmpwIiwiaG9ra2FpZG8uanAiLCJoeW9nby5qcCIsImliYXJha2kuanAiLCJpc2hpa2F3YS5q''@;'; put 'put ''cCIsIml3YXRlLmpwIiwia2FnYXdhLmpwIiwia2Fnb3NoaW1hLmpwIiwia2FuYWdhd2EuanAiLCJrb2NoaS5qcCIsImt1bWFtb3RvLmpwIiwia3lvdG8uanAiLCJtaWUuanAiLCJtaXlhZ2kuanAiLCJtaXlhemFraS5qcCIsIm5hZ2Fuby5qcCIsIm5hZ2FzYWtpLmpwIiwibmFyYS5qcCIsIm5p''@;'; put 'put ''aWdhdGEuanAiLCJvaXRhLmpwIiwib2theWFtYS5qcCIsIm9raW5hd2EuanAiLCJvc2FrYS5qcCIsInNhZ2EuanAiLCJzYWl0YW1hLmpwIiwic2hpZ2EuanAiLCJzaGltYW5lLmpwIiwic2hpenVva2EuanAiLCJ0b2NoaWdpLmpwIiwidG9rdXNoaW1hLmpwIiwidG9reW8uanAiLCJ0b3R0b3Jp''@;'; put 'put ''LmpwIiwidG95YW1hLmpwIiwid2FrYXlhbWEuanAiLCJ5YW1hZ2F0YS5qcCIsInlhbWFndWNoaS5qcCIsInlhbWFuYXNoaS5qcCIsIlx1NGUwOVx1OTFjZC5qcCIsIlx1NGVhY1x1OTBmZC5qcCIsIlx1NGY1MFx1OGNjMC5qcCIsIlx1NTE3NVx1NWVhYi5qcCIsIlx1NTMxN1x1NmQ3N1x1OTA1''@;'; put 'put ''My5qcCIsIlx1NTM0M1x1ODQ0OS5qcCIsIlx1NTQ4Y1x1NmI0Y1x1NWM3MS5qcCIsIlx1NTdmY1x1NzM4OS5qcCIsIlx1NTkyN1x1NTIwNi5qcCIsIlx1NTkyN1x1OTYyYS5qcCIsIlx1NTk0OFx1ODI2Zi5qcCIsIlx1NWJhZVx1NTdjZS5qcCIsIlx1NWJhZVx1NWQwZS5qcCIsIlx1NWJjY1x1''@;'; put 'put ''NWM3MS5qcCIsIlx1NWM3MVx1NTNlMy5qcCIsIlx1NWM3MVx1NWY2Mi5qcCIsIlx1NWM3MVx1NjhhOC5qcCIsIlx1NWM5MFx1OTYxYy5qcCIsIlx1NWNhMVx1NWM3MS5qcCIsIlx1NWNhOVx1NjI0Yi5qcCIsIlx1NWNmNlx1NjgzOS5qcCIsIlx1NWU4M1x1NWNmNi5qcCIsIlx1NWZiM1x1NWNm''@;'; put 'put ''Ni5qcCIsIlx1NjExYlx1NWE5Yi5qcCIsIlx1NjExYlx1NzdlNS5qcCIsIlx1NjViMFx1NmY1Zi5qcCIsIlx1Njc3MVx1NGVhYy5qcCIsIlx1NjgwM1x1NjcyOC5qcCIsIlx1NmM5Nlx1N2UwNC5qcCIsIlx1NmVjYlx1OGNjMC5qcCIsIlx1NzE4YVx1NjcyYy5qcCIsIlx1NzdmM1x1NWRkZC5q''@;'; put 'put ''cCIsIlx1Nzk1ZVx1NTk0OFx1NWRkZC5qcCIsIlx1Nzk4Zlx1NGU5NS5qcCIsIlx1Nzk4Zlx1NWNhMS5qcCIsIlx1Nzk4Zlx1NWNmNi5qcCIsIlx1NzljYlx1NzUzMC5qcCIsIlx1N2ZhNFx1OTlhYy5qcCIsIlx1ODMyOFx1NTdjZS5qcCIsIlx1OTU3N1x1NWQwZS5qcCIsIlx1OTU3N1x1OTFj''@;'; put 'put ''ZS5qcCIsIlx1OTc1Mlx1NjhlZS5qcCIsIlx1OTc1OVx1NWNhMS5qcCIsIlx1OTk5OVx1NWRkZC5qcCIsIlx1OWFkOFx1NzdlNS5qcCIsIlx1OWNlNVx1NTNkNi5qcCIsIlx1OWU3Zlx1NTE1MFx1NWNmNi5qcCIsIioua2F3YXNha2kuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIioua2l0YWt5''@;'; put 'put ''dXNodS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIqLmtvYmUuanAiLCIhY2l0eS5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIhY2l0eS5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIhY2l0eS5zYXBwb3JvLmpwIiwiKi5zZW5kYWkuanAiLCIhY2l0eS5zZW5kYWkuanAiLCIqLnlva29o''@;'; put 'put ''YW1hLmpwIiwiIWNpdHkueW9rb2hhbWEuanAiLCJhaXNhaS5haWNoaS5qcCIsImFtYS5haWNoaS5qcCIsImFuam8uYWljaGkuanAiLCJhc3VrZS5haWNoaS5qcCIsImNoaXJ5dS5haWNoaS5qcCIsImNoaXRhLmFpY2hpLmpwIiwiZnVzby5haWNoaS5qcCIsImdhbWFnb3JpLmFpY2hpLmpwIiwi''@;'; put 'put ''aGFuZGEuYWljaGkuanAiLCJoYXp1LmFpY2hpLmpwIiwiaGVraW5hbi5haWNoaS5qcCIsImhpZ2FzaGl1cmEuYWljaGkuanAiLCJpY2hpbm9taXlhLmFpY2hpLmpwIiwiaW5hemF3YS5haWNoaS5qcCIsImludXlhbWEuYWljaGkuanAiLCJpc3NoaWtpLmFpY2hpLmpwIiwiaXdha3VyYS5haWNo''@;'; put 'put ''aS5qcCIsImthbmllLmFpY2hpLmpwIiwia2FyaXlhLmFpY2hpLmpwIiwia2FzdWdhaS5haWNoaS5qcCIsImtpcmEuYWljaGkuanAiLCJraXlvc3UuYWljaGkuanAiLCJrb21ha2kuYWljaGkuanAiLCJrb25hbi5haWNoaS5qcCIsImtvdGEuYWljaGkuanAiLCJtaWhhbWEuYWljaGkuanAiLCJt''@;'; put 'put ''aXlvc2hpLmFpY2hpLmpwIiwibmlzaGlvLmFpY2hpLmpwIiwibmlzc2hpbi5haWNoaS5qcCIsIm9idS5haWNoaS5qcCIsIm9ndWNoaS5haWNoaS5qcCIsIm9oYXJ1LmFpY2hpLmpwIiwib2themFraS5haWNoaS5qcCIsIm93YXJpYXNhaGkuYWljaGkuanAiLCJzZXRvLmFpY2hpLmpwIiwic2hp''@;'; put 'put ''a2F0c3UuYWljaGkuanAiLCJzaGluc2hpcm8uYWljaGkuanAiLCJzaGl0YXJhLmFpY2hpLmpwIiwidGFoYXJhLmFpY2hpLmpwIiwidGFrYWhhbWEuYWljaGkuanAiLCJ0b2Jpc2hpbWEuYWljaGkuanAiLCJ0b2VpLmFpY2hpLmpwIiwidG9nby5haWNoaS5qcCIsInRva2FpLmFpY2hpLmpwIiwi''@;'; put 'put ''dG9rb25hbWUuYWljaGkuanAiLCJ0b3lvYWtlLmFpY2hpLmpwIiwidG95b2hhc2hpLmFpY2hpLmpwIiwidG95b2thd2EuYWljaGkuanAiLCJ0b3lvbmUuYWljaGkuanAiLCJ0b3lvdGEuYWljaGkuanAiLCJ0c3VzaGltYS5haWNoaS5qcCIsInlhdG9taS5haWNoaS5qcCIsImFraXRhLmFraXRh''@;'; put 'put ''LmpwIiwiZGFpc2VuLmFraXRhLmpwIiwiZnVqaXNhdG8uYWtpdGEuanAiLCJnb2pvbWUuYWtpdGEuanAiLCJoYWNoaXJvZ2F0YS5ha2l0YS5qcCIsImhhcHBvdS5ha2l0YS5qcCIsImhpZ2FzaGluYXJ1c2UuYWtpdGEuanAiLCJob25qby5ha2l0YS5qcCIsImhvbmp5by5ha2l0YS5qcCIsImlr''@;'; put 'put ''YXdhLmFraXRhLmpwIiwia2FtaWtvYW5pLmFraXRhLmpwIiwia2FtaW9rYS5ha2l0YS5qcCIsImthdGFnYW1pLmFraXRhLmpwIiwia2F6dW5vLmFraXRhLmpwIiwia2l0YWFraXRhLmFraXRhLmpwIiwia29zYWthLmFraXRhLmpwIiwia3lvd2EuYWtpdGEuanAiLCJtaXNhdG8uYWtpdGEuanAi''@;'; put 'put ''LCJtaXRhbmUuYWtpdGEuanAiLCJtb3JpeW9zaGkuYWtpdGEuanAiLCJuaWthaG8uYWtpdGEuanAiLCJub3NoaXJvLmFraXRhLmpwIiwib2RhdGUuYWtpdGEuanAiLCJvZ2EuYWtpdGEuanAiLCJvZ2F0YS5ha2l0YS5qcCIsInNlbWJva3UuYWtpdGEuanAiLCJ5b2tvdGUuYWtpdGEuanAiLCJ5''@;'; put 'put ''dXJpaG9uam8uYWtpdGEuanAiLCJhb21vcmkuYW9tb3JpLmpwIiwiZ29ub2hlLmFvbW9yaS5qcCIsImhhY2hpbm9oZS5hb21vcmkuanAiLCJoYXNoaWthbWkuYW9tb3JpLmpwIiwiaGlyYW5haS5hb21vcmkuanAiLCJoaXJvc2FraS5hb21vcmkuanAiLCJpdGF5YW5hZ2kuYW9tb3JpLmpwIiwi''@;'; put 'put ''a3Vyb2lzaGkuYW9tb3JpLmpwIiwibWlzYXdhLmFvbW9yaS5qcCIsIm11dHN1LmFvbW9yaS5qcCIsIm5ha2Fkb21hcmkuYW9tb3JpLmpwIiwibm9oZWppLmFvbW9yaS5qcCIsIm9pcmFzZS5hb21vcmkuanAiLCJvd2FuaS5hb21vcmkuanAiLCJyb2t1bm9oZS5hb21vcmkuanAiLCJzYW5ub2hl''@;'; put 'put ''LmFvbW9yaS5qcCIsInNoaWNoaW5vaGUuYW9tb3JpLmpwIiwic2hpbmdvLmFvbW9yaS5qcCIsInRha2tvLmFvbW9yaS5qcCIsInRvd2FkYS5hb21vcmkuanAiLCJ0c3VnYXJ1LmFvbW9yaS5qcCIsInRzdXJ1dGEuYW9tb3JpLmpwIiwiYWJpa28uY2hpYmEuanAiLCJhc2FoaS5jaGliYS5qcCIs''@;'; put 'put ''ImNob25hbi5jaGliYS5qcCIsImNob3NlaS5jaGliYS5qcCIsImNob3NoaS5jaGliYS5qcCIsImNodW8uY2hpYmEuanAiLCJmdW5hYmFzaGkuY2hpYmEuanAiLCJmdXR0c3UuY2hpYmEuanAiLCJoYW5hbWlnYXdhLmNoaWJhLmpwIiwiaWNoaWhhcmEuY2hpYmEuanAiLCJpY2hpa2F3YS5jaGli''@;'; put 'put ''YS5qcCIsImljaGlub21peWEuY2hpYmEuanAiLCJpbnphaS5jaGliYS5qcCIsImlzdW1pLmNoaWJhLmpwIiwia2FtYWdheWEuY2hpYmEuanAiLCJrYW1vZ2F3YS5jaGliYS5qcCIsImthc2hpd2EuY2hpYmEuanAiLCJrYXRvcmkuY2hpYmEuanAiLCJrYXRzdXVyYS5jaGliYS5qcCIsImtpbWl0''@;'; put 'put ''c3UuY2hpYmEuanAiLCJraXNhcmF6dS5jaGliYS5qcCIsImtvemFraS5jaGliYS5qcCIsImt1anVrdXJpLmNoaWJhLmpwIiwia3lvbmFuLmNoaWJhLmpwIiwibWF0c3Vkby5jaGliYS5qcCIsIm1pZG9yaS5jaGliYS5qcCIsIm1paGFtYS5jaGliYS5qcCIsIm1pbmFtaWJvc28uY2hpYmEuanAi''@;'; put 'put ''LCJtb2JhcmEuY2hpYmEuanAiLCJtdXRzdXphd2EuY2hpYmEuanAiLCJuYWdhcmEuY2hpYmEuanAiLCJuYWdhcmV5YW1hLmNoaWJhLmpwIiwibmFyYXNoaW5vLmNoaWJhLmpwIiwibmFyaXRhLmNoaWJhLmpwIiwibm9kYS5jaGliYS5qcCIsIm9hbWlzaGlyYXNhdG8uY2hpYmEuanAiLCJvbWln''@;'; put 'put ''YXdhLmNoaWJhLmpwIiwib25qdWt1LmNoaWJhLmpwIiwib3Rha2kuY2hpYmEuanAiLCJzYWthZS5jaGliYS5qcCIsInNha3VyYS5jaGliYS5qcCIsInNoaW1vZnVzYS5jaGliYS5qcCIsInNoaXJha28uY2hpYmEuanAiLCJzaGlyb2kuY2hpYmEuanAiLCJzaGlzdWkuY2hpYmEuanAiLCJzb2Rl''@;'; put 'put ''Z2F1cmEuY2hpYmEuanAiLCJzb3NhLmNoaWJhLmpwIiwidGFrby5jaGliYS5qcCIsInRhdGV5YW1hLmNoaWJhLmpwIiwidG9nYW5lLmNoaWJhLmpwIiwidG9obm9zaG8uY2hpYmEuanAiLCJ0b21pc2F0by5jaGliYS5qcCIsInVyYXlhc3UuY2hpYmEuanAiLCJ5YWNoaW1hdGEuY2hpYmEuanAi''@;'; put 'put ''LCJ5YWNoaXlvLmNoaWJhLmpwIiwieW9rYWljaGliYS5jaGliYS5qcCIsInlva29zaGliYWhpa2FyaS5jaGliYS5qcCIsInlvdHN1a2FpZG8uY2hpYmEuanAiLCJhaW5hbi5laGltZS5qcCIsImhvbmFpLmVoaW1lLmpwIiwiaWthdGEuZWhpbWUuanAiLCJpbWFiYXJpLmVoaW1lLmpwIiwiaXlv''@;'; put 'put ''LmVoaW1lLmpwIiwia2FtaWppbWEuZWhpbWUuanAiLCJraWhva3UuZWhpbWUuanAiLCJrdW1ha29nZW4uZWhpbWUuanAiLCJtYXNha2kuZWhpbWUuanAiLCJtYXRzdW5vLmVoaW1lLmpwIiwibWF0c3V5YW1hLmVoaW1lLmpwIiwibmFtaWthdGEuZWhpbWUuanAiLCJuaWloYW1hLmVoaW1lLmpw''@;'; put 'put ''Iiwib3p1LmVoaW1lLmpwIiwic2Fpam8uZWhpbWUuanAiLCJzZWl5by5laGltZS5qcCIsInNoaWtva3VjaHVvLmVoaW1lLmpwIiwidG9iZS5laGltZS5qcCIsInRvb24uZWhpbWUuanAiLCJ1Y2hpa28uZWhpbWUuanAiLCJ1d2FqaW1hLmVoaW1lLmpwIiwieWF3YXRhaGFtYS5laGltZS5qcCIs''@;'; put 'put ''ImVjaGl6ZW4uZnVrdWkuanAiLCJlaWhlaWppLmZ1a3VpLmpwIiwiZnVrdWkuZnVrdWkuanAiLCJpa2VkYS5mdWt1aS5qcCIsImthdHN1eWFtYS5mdWt1aS5qcCIsIm1paGFtYS5mdWt1aS5qcCIsIm1pbmFtaWVjaGl6ZW4uZnVrdWkuanAiLCJvYmFtYS5mdWt1aS5qcCIsIm9oaS5mdWt1aS5q''@;'; put 'put ''cCIsIm9uby5mdWt1aS5qcCIsInNhYmFlLmZ1a3VpLmpwIiwic2FrYWkuZnVrdWkuanAiLCJ0YWthaGFtYS5mdWt1aS5qcCIsInRzdXJ1Z2EuZnVrdWkuanAiLCJ3YWthc2EuZnVrdWkuanAiLCJhc2hpeWEuZnVrdW9rYS5qcCIsImJ1emVuLmZ1a3Vva2EuanAiLCJjaGlrdWdvLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJjaGlrdWhvLmZ1a3Vva2EuanAiLCJjaGlrdWpvLmZ1a3Vva2EuanAiLCJjaGlrdXNoaW5vLmZ1a3Vva2EuanAiLCJjaGlrdXplbi5mdWt1b2thLmpwIiwiY2h1by5mdWt1b2thLmpwIiwiZGF6YWlmdS5mdWt1b2thLmpwIiwiZnVrdWNoaS5mdWt1b2thLmpwIiwiaGFrYXRhLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJoaWdhc2hpLmZ1a3Vva2EuanAiLCJoaXJva2F3YS5mdWt1b2thLmpwIiwiaGlzYXlhbWEuZnVrdW9rYS5qcCIsImlpenVrYS5mdWt1b2thLmpwIiwiaW5hdHN1a2kuZnVrdW9rYS5qcCIsImthaG8uZnVrdW9rYS5qcCIsImthc3VnYS5mdWt1b2thLmpwIiwia2FzdXlhLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJrYXdhcmEuZnVrdW9rYS5qcCIsImtlaXNlbi5mdWt1b2thLmpwIiwia29nYS5mdWt1b2thLmpwIiwia3VyYXRlLmZ1a3Vva2EuanAiLCJrdXJvZ2kuZnVrdW9rYS5qcCIsImt1cnVtZS5mdWt1b2thLmpwIiwibWluYW1pLmZ1a3Vva2EuanAiLCJtaXlha28uZnVrdW9rYS5qcCIs''@;'; put 'put ''Im1peWFtYS5mdWt1b2thLmpwIiwibWl5YXdha2EuZnVrdW9rYS5qcCIsIm1penVtYWtpLmZ1a3Vva2EuanAiLCJtdW5ha2F0YS5mdWt1b2thLmpwIiwibmFrYWdhd2EuZnVrdW9rYS5qcCIsIm5ha2FtYS5mdWt1b2thLmpwIiwibmlzaGkuZnVrdW9rYS5qcCIsIm5vZ2F0YS5mdWt1b2thLmpw''@;'; put 'put ''Iiwib2dvcmkuZnVrdW9rYS5qcCIsIm9rYWdha2kuZnVrdW9rYS5qcCIsIm9rYXdhLmZ1a3Vva2EuanAiLCJva2kuZnVrdW9rYS5qcCIsIm9tdXRhLmZ1a3Vva2EuanAiLCJvbmdhLmZ1a3Vva2EuanAiLCJvbm9qby5mdWt1b2thLmpwIiwib3RvLmZ1a3Vva2EuanAiLCJzYWlnYXdhLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJzYXNhZ3VyaS5mdWt1b2thLmpwIiwic2hpbmd1LmZ1a3Vva2EuanAiLCJzaGlueW9zaGl0b21pLmZ1a3Vva2EuanAiLCJzaG9uYWkuZnVrdW9rYS5qcCIsInNvZWRhLmZ1a3Vva2EuanAiLCJzdWUuZnVrdW9rYS5qcCIsInRhY2hpYXJhaS5mdWt1b2thLmpwIiwidGFnYXdhLmZ1''@;'; put 'put ''a3Vva2EuanAiLCJ0YWthdGEuZnVrdW9rYS5qcCIsInRvaG8uZnVrdW9rYS5qcCIsInRveW90c3UuZnVrdW9rYS5qcCIsInRzdWlraS5mdWt1b2thLmpwIiwidWtpaGEuZnVrdW9rYS5qcCIsInVtaS5mdWt1b2thLmpwIiwidXN1aS5mdWt1b2thLmpwIiwieWFtYWRhLmZ1a3Vva2EuanAiLCJ5''@;'; put 'put ''YW1lLmZ1a3Vva2EuanAiLCJ5YW5hZ2F3YS5mdWt1b2thLmpwIiwieXVrdWhhc2hpLmZ1a3Vva2EuanAiLCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwIiwiYWl6dW1pc2F0by5mdWt1c2hpbWEuanAiLCJhaXp1d2FrYW1hdHN1LmZ1a3VzaGltYS5qcCIsImFzYWthd2EuZnVrdXNoaW1hLmpwIiwi''@;'; put 'put ''YmFuZGFpLmZ1a3VzaGltYS5qcCIsImRhdGUuZnVrdXNoaW1hLmpwIiwiZnVrdXNoaW1hLmZ1a3VzaGltYS5qcCIsImZ1cnVkb25vLmZ1a3VzaGltYS5qcCIsImZ1dGFiYS5mdWt1c2hpbWEuanAiLCJoYW5hd2EuZnVrdXNoaW1hLmpwIiwiaGlnYXNoaS5mdWt1c2hpbWEuanAiLCJoaXJhdGEu''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwiaGlyb25vLmZ1a3VzaGltYS5qcCIsImlpdGF0ZS5mdWt1c2hpbWEuanAiLCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcCIsImlzaGlrYXdhLmZ1a3VzaGltYS5qcCIsIml3YWtpLmZ1a3VzaGltYS5qcCIsIml6dW1pemFraS5mdWt1c2hpbWEuanAiLCJrYWdhbWlpc2hp''@;'; put 'put ''LmZ1a3VzaGltYS5qcCIsImthbmV5YW1hLmZ1a3VzaGltYS5qcCIsImthd2FtYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFrYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFzaGlvYmFyYS5mdWt1c2hpbWEuanAiLCJrb29yaS5mdWt1c2hpbWEuanAiLCJrb3JpeWFtYS5mdWt1c2hpbWEuanAiLCJrdW5p''@;'; put 'put ''bWkuZnVrdXNoaW1hLmpwIiwibWloYXJ1LmZ1a3VzaGltYS5qcCIsIm1pc2hpbWEuZnVrdXNoaW1hLmpwIiwibmFtaWUuZnVrdXNoaW1hLmpwIiwibmFuZ28uZnVrdXNoaW1hLmpwIiwibmlzaGlhaXp1LmZ1a3VzaGltYS5qcCIsIm5pc2hpZ28uZnVrdXNoaW1hLmpwIiwib2t1bWEuZnVrdXNo''@;'; put 'put ''aW1hLmpwIiwib21vdGVnby5mdWt1c2hpbWEuanAiLCJvbm8uZnVrdXNoaW1hLmpwIiwib3RhbWEuZnVrdXNoaW1hLmpwIiwic2FtZWdhd2EuZnVrdXNoaW1hLmpwIiwic2hpbW9nby5mdWt1c2hpbWEuanAiLCJzaGlyYWthd2EuZnVrdXNoaW1hLmpwIiwic2hvd2EuZnVrdXNoaW1hLmpwIiwi''@;'; put 'put ''c29tYS5mdWt1c2hpbWEuanAiLCJzdWthZ2F3YS5mdWt1c2hpbWEuanAiLCJ0YWlzaGluLmZ1a3VzaGltYS5qcCIsInRhbWFrYXdhLmZ1a3VzaGltYS5qcCIsInRhbmFndXJhLmZ1a3VzaGltYS5qcCIsInRlbmVpLmZ1a3VzaGltYS5qcCIsInlhYnVraS5mdWt1c2hpbWEuanAiLCJ5YW1hdG8u''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwieWFtYXRzdXJpLmZ1a3VzaGltYS5qcCIsInlhbmFpenUuZnVrdXNoaW1hLmpwIiwieXVnYXdhLmZ1a3VzaGltYS5qcCIsImFucGFjaGkuZ2lmdS5qcCIsImVuYS5naWZ1LmpwIiwiZ2lmdS5naWZ1LmpwIiwiZ2luYW4uZ2lmdS5qcCIsImdvZG8uZ2lmdS5qcCIsImd1''@;'; put 'put ''am8uZ2lmdS5qcCIsImhhc2hpbWEuZ2lmdS5qcCIsImhpY2hpc28uZ2lmdS5qcCIsImhpZGEuZ2lmdS5qcCIsImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcCIsImliaWdhd2EuZ2lmdS5qcCIsImlrZWRhLmdpZnUuanAiLCJrYWthbWlnYWhhcmEuZ2lmdS5qcCIsImthbmkuZ2lmdS5qcCIsImth''@;'; put 'put ''c2FoYXJhLmdpZnUuanAiLCJrYXNhbWF0c3UuZ2lmdS5qcCIsImthd2F1ZS5naWZ1LmpwIiwia2l0YWdhdGEuZ2lmdS5qcCIsIm1pbm8uZ2lmdS5qcCIsIm1pbm9rYW1vLmdpZnUuanAiLCJtaXRha2UuZ2lmdS5qcCIsIm1penVuYW1pLmdpZnUuanAiLCJtb3Rvc3UuZ2lmdS5qcCIsIm5ha2F0''@;'; put 'put ''c3VnYXdhLmdpZnUuanAiLCJvZ2FraS5naWZ1LmpwIiwic2FrYWhvZ2kuZ2lmdS5qcCIsInNla2kuZ2lmdS5qcCIsInNla2lnYWhhcmEuZ2lmdS5qcCIsInNoaXJha2F3YS5naWZ1LmpwIiwidGFqaW1pLmdpZnUuanAiLCJ0YWtheWFtYS5naWZ1LmpwIiwidGFydWkuZ2lmdS5qcCIsInRva2ku''@;'; put 'put ''Z2lmdS5qcCIsInRvbWlrYS5naWZ1LmpwIiwid2Fub3VjaGkuZ2lmdS5qcCIsInlhbWFnYXRhLmdpZnUuanAiLCJ5YW90c3UuZ2lmdS5qcCIsInlvcm8uZ2lmdS5qcCIsImFubmFrYS5ndW5tYS5qcCIsImNoaXlvZGEuZ3VubWEuanAiLCJmdWppb2thLmd1bm1hLmpwIiwiaGlnYXNoaWFnYXRz''@;'; put 'put ''dW1hLmd1bm1hLmpwIiwiaXNlc2FraS5ndW5tYS5qcCIsIml0YWt1cmEuZ3VubWEuanAiLCJrYW5uYS5ndW5tYS5qcCIsImthbnJhLmd1bm1hLmpwIiwia2F0YXNoaW5hLmd1bm1hLmpwIiwia2F3YWJhLmd1bm1hLmpwIiwia2lyeXUuZ3VubWEuanAiLCJrdXNhdHN1Lmd1bm1hLmpwIiwibWFl''@;'; put 'put ''YmFzaGkuZ3VubWEuanAiLCJtZWl3YS5ndW5tYS5qcCIsIm1pZG9yaS5ndW5tYS5qcCIsIm1pbmFrYW1pLmd1bm1hLmpwIiwibmFnYW5vaGFyYS5ndW5tYS5qcCIsIm5ha2Fub2pvLmd1bm1hLmpwIiwibmFubW9rdS5ndW5tYS5qcCIsIm51bWF0YS5ndW5tYS5qcCIsIm9penVtaS5ndW5tYS5q''@;'; put 'put ''cCIsIm9yYS5ndW5tYS5qcCIsIm90YS5ndW5tYS5qcCIsInNoaWJ1a2F3YS5ndW5tYS5qcCIsInNoaW1vbml0YS5ndW5tYS5qcCIsInNoaW50by5ndW5tYS5qcCIsInNob3dhLmd1bm1hLmpwIiwidGFrYXNha2kuZ3VubWEuanAiLCJ0YWtheWFtYS5ndW5tYS5qcCIsInRhbWFtdXJhLmd1bm1h''@;'; put 'put ''LmpwIiwidGF0ZWJheWFzaGkuZ3VubWEuanAiLCJ0b21pb2thLmd1bm1hLmpwIiwidHN1a2l5b25vLmd1bm1hLmpwIiwidHN1bWFnb2kuZ3VubWEuanAiLCJ1ZW5vLmd1bm1hLmpwIiwieW9zaGlva2EuZ3VubWEuanAiLCJhc2FtaW5hbWkuaGlyb3NoaW1hLmpwIiwiZGFpd2EuaGlyb3NoaW1h''@;'; put 'put ''LmpwIiwiZXRhamltYS5oaXJvc2hpbWEuanAiLCJmdWNodS5oaXJvc2hpbWEuanAiLCJmdWt1eWFtYS5oaXJvc2hpbWEuanAiLCJoYXRzdWthaWNoaS5oaXJvc2hpbWEuanAiLCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGltYS5qcCIsImhvbmdvLmhpcm9zaGltYS5qcCIsImppbnNla2lrb2dl''@;'; put 'put ''bi5oaXJvc2hpbWEuanAiLCJrYWl0YS5oaXJvc2hpbWEuanAiLCJrdWkuaGlyb3NoaW1hLmpwIiwia3VtYW5vLmhpcm9zaGltYS5qcCIsImt1cmUuaGlyb3NoaW1hLmpwIiwibWloYXJhLmhpcm9zaGltYS5qcCIsIm1peW9zaGkuaGlyb3NoaW1hLmpwIiwibmFrYS5oaXJvc2hpbWEuanAiLCJv''@;'; put 'put ''bm9taWNoaS5oaXJvc2hpbWEuanAiLCJvc2FraWthbWlqaW1hLmhpcm9zaGltYS5qcCIsIm90YWtlLmhpcm9zaGltYS5qcCIsInNha2EuaGlyb3NoaW1hLmpwIiwic2VyYS5oaXJvc2hpbWEuanAiLCJzZXJhbmlzaGkuaGlyb3NoaW1hLmpwIiwic2hpbmljaGkuaGlyb3NoaW1hLmpwIiwic2hv''@;'; put 'put ''YmFyYS5oaXJvc2hpbWEuanAiLCJ0YWtlaGFyYS5oaXJvc2hpbWEuanAiLCJhYmFzaGlyaS5ob2trYWlkby5qcCIsImFiaXJhLmhva2thaWRvLmpwIiwiYWliZXRzdS5ob2trYWlkby5qcCIsImFrYWJpcmEuaG9ra2FpZG8uanAiLCJha2tlc2hpLmhva2thaWRvLmpwIiwiYXNhaGlrYXdhLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiYXNoaWJldHN1Lmhva2thaWRvLmpwIiwiYXNob3JvLmhva2thaWRvLmpwIiwiYXNzYWJ1Lmhva2thaWRvLmpwIiwiYXRzdW1hLmhva2thaWRvLmpwIiwiYmliYWkuaG9ra2FpZG8uanAiLCJiaWVpLmhva2thaWRvLmpwIiwiYmlmdWthLmhva2thaWRvLmpwIiwiYmlob3Jv''@;'; put 'put ''Lmhva2thaWRvLmpwIiwiYmlyYXRvcmkuaG9ra2FpZG8uanAiLCJjaGlwcHViZXRzdS5ob2trYWlkby5qcCIsImNoaXRvc2UuaG9ra2FpZG8uanAiLCJkYXRlLmhva2thaWRvLmpwIiwiZWJldHN1Lmhva2thaWRvLmpwIiwiZW1iZXRzdS5ob2trYWlkby5qcCIsImVuaXdhLmhva2thaWRvLmpw''@;'; put 'put ''IiwiZXJpbW8uaG9ra2FpZG8uanAiLCJlc2FuLmhva2thaWRvLmpwIiwiZXNhc2hpLmhva2thaWRvLmpwIiwiZnVrYWdhd2EuaG9ra2FpZG8uanAiLCJmdWt1c2hpbWEuaG9ra2FpZG8uanAiLCJmdXJhbm8uaG9ra2FpZG8uanAiLCJmdXJ1YmlyYS5ob2trYWlkby5qcCIsImhhYm9yby5ob2tr''@;'; put 'put ''YWlkby5qcCIsImhha29kYXRlLmhva2thaWRvLmpwIiwiaGFtYXRvbmJldHN1Lmhva2thaWRvLmpwIiwiaGlkYWthLmhva2thaWRvLmpwIiwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYXdhLmhva2thaWRvLmpwIiwiaGlyb28uaG9ra2FpZG8uanAiLCJob2t1cnl1Lmhv''@;'; put 'put ''a2thaWRvLmpwIiwiaG9rdXRvLmhva2thaWRvLmpwIiwiaG9uYmV0c3UuaG9ra2FpZG8uanAiLCJob3Jva2FuYWkuaG9ra2FpZG8uanAiLCJob3Jvbm9iZS5ob2trYWlkby5qcCIsImlrZWRhLmhva2thaWRvLmpwIiwiaW1ha2FuZS5ob2trYWlkby5qcCIsImlzaGlrYXJpLmhva2thaWRvLmpw''@;'; put 'put ''IiwiaXdhbWl6YXdhLmhva2thaWRvLmpwIiwiaXdhbmFpLmhva2thaWRvLmpwIiwia2FtaWZ1cmFuby5ob2trYWlkby5qcCIsImthbWlrYXdhLmhva2thaWRvLmpwIiwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanAiLCJrYW1pc3VuYWdhd2EuaG9ra2FpZG8uanAiLCJrYW1vZW5haS5ob2trYWlk''@;'; put 'put ''by5qcCIsImtheWFiZS5ob2trYWlkby5qcCIsImtlbWJ1Y2hpLmhva2thaWRvLmpwIiwia2lrb25haS5ob2trYWlkby5qcCIsImtpbW9iZXRzdS5ob2trYWlkby5qcCIsImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanAiLCJraXRhbWkuaG9ra2FpZG8uanAiLCJraXlvc2F0by5ob2trYWlkby5q''@;'; put 'put ''cCIsImtvc2hpbWl6dS5ob2trYWlkby5qcCIsImt1bm5lcHB1Lmhva2thaWRvLmpwIiwia3VyaXlhbWEuaG9ra2FpZG8uanAiLCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanAiLCJrdXNoaXJvLmhva2thaWRvLmpwIiwia3V0Y2hhbi5ob2trYWlkby5qcCIsImt5b3dhLmhva2thaWRvLmpwIiwi''@;'; put 'put ''bWFzaGlrZS5ob2trYWlkby5qcCIsIm1hdHN1bWFlLmhva2thaWRvLmpwIiwibWlrYXNhLmhva2thaWRvLmpwIiwibWluYW1pZnVyYW5vLmhva2thaWRvLmpwIiwibW9tYmV0c3UuaG9ra2FpZG8uanAiLCJtb3NldXNoaS5ob2trYWlkby5qcCIsIm11a2F3YS5ob2trYWlkby5qcCIsIm11cm9y''@;'; put 'put ''YW4uaG9ra2FpZG8uanAiLCJuYWllLmhva2thaWRvLmpwIiwibmFrYWdhd2EuaG9ra2FpZG8uanAiLCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanAiLCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanAiLCJuYW5hZS5ob2trYWlkby5qcCIsIm5hbnBvcm8uaG9ra2FpZG8uanAiLCJuYXlvcm8uaG9r''@;'; put 'put ''a2FpZG8uanAiLCJuZW11cm8uaG9ra2FpZG8uanAiLCJuaWlrYXBwdS5ob2trYWlkby5qcCIsIm5pa2kuaG9ra2FpZG8uanAiLCJuaXNoaW9rb3BwZS5ob2trYWlkby5qcCIsIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwIiwibnVtYXRhLmhva2thaWRvLmpwIiwib2JpaGlyby5ob2trYWlkby5q''@;'; put 'put ''cCIsIm9iaXJhLmhva2thaWRvLmpwIiwib2tldG8uaG9ra2FpZG8uanAiLCJva29wcGUuaG9ra2FpZG8uanAiLCJvdGFydS5ob2trYWlkby5qcCIsIm90b2JlLmhva2thaWRvLmpwIiwib3RvZnVrZS5ob2trYWlkby5qcCIsIm90b2luZXBwdS5ob2trYWlkby5qcCIsIm91bXUuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJvem9yYS5ob2trYWlkby5qcCIsInBpcHB1Lmhva2thaWRvLmpwIiwicmFua29zaGkuaG9ra2FpZG8uanAiLCJyZWJ1bi5ob2trYWlkby5qcCIsInJpa3ViZXRzdS5ob2trYWlkby5qcCIsInJpc2hpcmkuaG9ra2FpZG8uanAiLCJyaXNoaXJpZnVqaS5ob2trYWlkby5qcCIsInNhcm9t''@;'; put 'put ''YS5ob2trYWlkby5qcCIsInNhcnVmdXRzdS5ob2trYWlkby5qcCIsInNoYWtvdGFuLmhva2thaWRvLmpwIiwic2hhcmkuaG9ra2FpZG8uanAiLCJzaGliZWNoYS5ob2trYWlkby5qcCIsInNoaWJldHN1Lmhva2thaWRvLmpwIiwic2hpa2FiZS5ob2trYWlkby5qcCIsInNoaWthb2kuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJzaGltYW1ha2kuaG9ra2FpZG8uanAiLCJzaGltaXp1Lmhva2thaWRvLmpwIiwic2hpbW9rYXdhLmhva2thaWRvLmpwIiwic2hpbnNoaW5vdHN1Lmhva2thaWRvLmpwIiwic2hpbnRva3UuaG9ra2FpZG8uanAiLCJzaGlyYW51a2EuaG9ra2FpZG8uanAiLCJzaGlyYW9pLmhva2th''@;'; put 'put ''aWRvLmpwIiwic2hpcml1Y2hpLmhva2thaWRvLmpwIiwic29iZXRzdS5ob2trYWlkby5qcCIsInN1bmFnYXdhLmhva2thaWRvLmpwIiwidGFpa2kuaG9ra2FpZG8uanAiLCJ0YWthc3UuaG9ra2FpZG8uanAiLCJ0YWtpa2F3YS5ob2trYWlkby5qcCIsInRha2lub3VlLmhva2thaWRvLmpwIiwi''@;'; put 'put ''dGVzaGlrYWdhLmhva2thaWRvLmpwIiwidG9iZXRzdS5ob2trYWlkby5qcCIsInRvaG1hLmhva2thaWRvLmpwIiwidG9tYWtvbWFpLmhva2thaWRvLmpwIiwidG9tYXJpLmhva2thaWRvLmpwIiwidG95YS5ob2trYWlkby5qcCIsInRveWFrby5ob2trYWlkby5qcCIsInRveW90b21pLmhva2th''@;'; put 'put ''aWRvLmpwIiwidG95b3VyYS5ob2trYWlkby5qcCIsInRzdWJldHN1Lmhva2thaWRvLmpwIiwidHN1a2lnYXRhLmhva2thaWRvLmpwIiwidXJha2F3YS5ob2trYWlkby5qcCIsInVyYXVzdS5ob2trYWlkby5qcCIsInVyeXUuaG9ra2FpZG8uanAiLCJ1dGFzaGluYWkuaG9ra2FpZG8uanAiLCJ3''@;'; put 'put ''YWtrYW5haS5ob2trYWlkby5qcCIsIndhc3NhbXUuaG9ra2FpZG8uanAiLCJ5YWt1bW8uaG9ra2FpZG8uanAiLCJ5b2ljaGkuaG9ra2FpZG8uanAiLCJhaW9pLmh5b2dvLmpwIiwiYWthc2hpLmh5b2dvLmpwIiwiYWtvLmh5b2dvLmpwIiwiYW1hZ2FzYWtpLmh5b2dvLmpwIiwiYW9nYWtpLmh5''@;'; put 'put ''b2dvLmpwIiwiYXNhZ28uaHlvZ28uanAiLCJhc2hpeWEuaHlvZ28uanAiLCJhd2FqaS5oeW9nby5qcCIsImZ1a3VzYWtpLmh5b2dvLmpwIiwiZ29zaGlraS5oeW9nby5qcCIsImhhcmltYS5oeW9nby5qcCIsImhpbWVqaS5oeW9nby5qcCIsImljaGlrYXdhLmh5b2dvLmpwIiwiaW5hZ2F3YS5o''@;'; put 'put ''eW9nby5qcCIsIml0YW1pLmh5b2dvLmpwIiwia2Frb2dhd2EuaHlvZ28uanAiLCJrYW1pZ29yaS5oeW9nby5qcCIsImthbWlrYXdhLmh5b2dvLmpwIiwia2FzYWkuaHlvZ28uanAiLCJrYXN1Z2EuaHlvZ28uanAiLCJrYXdhbmlzaGkuaHlvZ28uanAiLCJtaWtpLmh5b2dvLmpwIiwibWluYW1p''@;'; put 'put ''YXdhamkuaHlvZ28uanAiLCJuaXNoaW5vbWl5YS5oeW9nby5qcCIsIm5pc2hpd2FraS5oeW9nby5qcCIsIm9uby5oeW9nby5qcCIsInNhbmRhLmh5b2dvLmpwIiwic2FubmFuLmh5b2dvLmpwIiwic2FzYXlhbWEuaHlvZ28uanAiLCJzYXlvLmh5b2dvLmpwIiwic2hpbmd1Lmh5b2dvLmpwIiwi''@;'; put 'put ''c2hpbm9uc2VuLmh5b2dvLmpwIiwic2hpc28uaHlvZ28uanAiLCJzdW1vdG8uaHlvZ28uanAiLCJ0YWlzaGkuaHlvZ28uanAiLCJ0YWthLmh5b2dvLmpwIiwidGFrYXJhenVrYS5oeW9nby5qcCIsInRha2FzYWdvLmh5b2dvLmpwIiwidGFraW5vLmh5b2dvLmpwIiwidGFtYmEuaHlvZ28uanAi''@;'; put 'put ''LCJ0YXRzdW5vLmh5b2dvLmpwIiwidG95b29rYS5oeW9nby5qcCIsInlhYnUuaHlvZ28uanAiLCJ5YXNoaXJvLmh5b2dvLmpwIiwieW9rYS5oeW9nby5qcCIsInlva2F3YS5oeW9nby5qcCIsImFtaS5pYmFyYWtpLmpwIiwiYXNhaGkuaWJhcmFraS5qcCIsImJhbmRvLmliYXJha2kuanAiLCJj''@;'; put 'put ''aGlrdXNlaS5pYmFyYWtpLmpwIiwiZGFpZ28uaWJhcmFraS5qcCIsImZ1amlzaGlyby5pYmFyYWtpLmpwIiwiaGl0YWNoaS5pYmFyYWtpLmpwIiwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcCIsImhpdGFjaGlvbWl5YS5pYmFyYWtpLmpwIiwiaGl0YWNoaW90YS5pYmFyYWtpLmpwIiwiaWJhcmFr''@;'; put 'put ''aS5pYmFyYWtpLmpwIiwiaW5hLmliYXJha2kuanAiLCJpbmFzaGlraS5pYmFyYWtpLmpwIiwiaXRha28uaWJhcmFraS5qcCIsIml3YW1hLmliYXJha2kuanAiLCJqb3NvLmliYXJha2kuanAiLCJrYW1pc3UuaWJhcmFraS5qcCIsImthc2FtYS5pYmFyYWtpLmpwIiwia2FzaGltYS5pYmFyYWtp''@;'; put 'put ''LmpwIiwia2FzdW1pZ2F1cmEuaWJhcmFraS5qcCIsImtvZ2EuaWJhcmFraS5qcCIsIm1paG8uaWJhcmFraS5qcCIsIm1pdG8uaWJhcmFraS5qcCIsIm1vcml5YS5pYmFyYWtpLmpwIiwibmFrYS5pYmFyYWtpLmpwIiwibmFtZWdhdGEuaWJhcmFraS5qcCIsIm9hcmFpLmliYXJha2kuanAiLCJv''@;'; put 'put ''Z2F3YS5pYmFyYWtpLmpwIiwib21pdGFtYS5pYmFyYWtpLmpwIiwicnl1Z2FzYWtpLmliYXJha2kuanAiLCJzYWthaS5pYmFyYWtpLmpwIiwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwIiwic2hpbW9kYXRlLmliYXJha2kuanAiLCJzaGltb3RzdW1hLmliYXJha2kuanAiLCJzaGlyb3NhdG8uaWJh''@;'; put 'put ''cmFraS5qcCIsInNvd2EuaWJhcmFraS5qcCIsInN1aWZ1LmliYXJha2kuanAiLCJ0YWthaGFnaS5pYmFyYWtpLmpwIiwidGFtYXRzdWt1cmkuaWJhcmFraS5qcCIsInRva2FpLmliYXJha2kuanAiLCJ0b21vYmUuaWJhcmFraS5qcCIsInRvbmUuaWJhcmFraS5qcCIsInRvcmlkZS5pYmFyYWtp''@;'; put 'put ''LmpwIiwidHN1Y2hpdXJhLmliYXJha2kuanAiLCJ0c3VrdWJhLmliYXJha2kuanAiLCJ1Y2hpaGFyYS5pYmFyYWtpLmpwIiwidXNoaWt1LmliYXJha2kuanAiLCJ5YWNoaXlvLmliYXJha2kuanAiLCJ5YW1hZ2F0YS5pYmFyYWtpLmpwIiwieWF3YXJhLmliYXJha2kuanAiLCJ5dWtpLmliYXJh''@;'; put 'put ''a2kuanAiLCJhbmFtaXp1LmlzaGlrYXdhLmpwIiwiaGFrdWkuaXNoaWthd2EuanAiLCJoYWt1c2FuLmlzaGlrYXdhLmpwIiwia2FnYS5pc2hpa2F3YS5qcCIsImthaG9rdS5pc2hpa2F3YS5qcCIsImthbmF6YXdhLmlzaGlrYXdhLmpwIiwia2F3YWtpdGEuaXNoaWthd2EuanAiLCJrb21hdHN1''@;'; put 'put ''LmlzaGlrYXdhLmpwIiwibmFrYW5vdG8uaXNoaWthd2EuanAiLCJuYW5hby5pc2hpa2F3YS5qcCIsIm5vbWkuaXNoaWthd2EuanAiLCJub25vaWNoaS5pc2hpa2F3YS5qcCIsIm5vdG8uaXNoaWthd2EuanAiLCJzaGlrYS5pc2hpa2F3YS5qcCIsInN1enUuaXNoaWthd2EuanAiLCJ0c3ViYXRh''@;'; put 'put ''LmlzaGlrYXdhLmpwIiwidHN1cnVnaS5pc2hpa2F3YS5qcCIsInVjaGluYWRhLmlzaGlrYXdhLmpwIiwid2FqaW1hLmlzaGlrYXdhLmpwIiwiZnVkYWkuaXdhdGUuanAiLCJmdWppc2F3YS5pd2F0ZS5qcCIsImhhbmFtYWtpLml3YXRlLmpwIiwiaGlyYWl6dW1pLml3YXRlLmpwIiwiaGlyb25v''@;'; put 'put ''Lml3YXRlLmpwIiwiaWNoaW5vaGUuaXdhdGUuanAiLCJpY2hpbm9zZWtpLml3YXRlLmpwIiwiaXdhaXp1bWkuaXdhdGUuanAiLCJpd2F0ZS5pd2F0ZS5qcCIsImpvYm9qaS5pd2F0ZS5qcCIsImthbWFpc2hpLml3YXRlLmpwIiwia2FuZWdhc2FraS5pd2F0ZS5qcCIsImthcnVtYWkuaXdhdGUu''@;'; put 'put ''anAiLCJrYXdhaS5pd2F0ZS5qcCIsImtpdGFrYW1pLml3YXRlLmpwIiwia3VqaS5pd2F0ZS5qcCIsImt1bm9oZS5pd2F0ZS5qcCIsImt1enVtYWtpLml3YXRlLmpwIiwibWl5YWtvLml3YXRlLmpwIiwibWl6dXNhd2EuaXdhdGUuanAiLCJtb3Jpb2thLml3YXRlLmpwIiwibmlub2hlLml3YXRl''@;'; put 'put ''LmpwIiwibm9kYS5pd2F0ZS5qcCIsIm9mdW5hdG8uaXdhdGUuanAiLCJvc2h1Lml3YXRlLmpwIiwib3RzdWNoaS5pd2F0ZS5qcCIsInJpa3V6ZW50YWthdGEuaXdhdGUuanAiLCJzaGl3YS5pd2F0ZS5qcCIsInNoaXp1a3Vpc2hpLml3YXRlLmpwIiwic3VtaXRhLml3YXRlLmpwIiwidGFub2hh''@;'; put 'put ''dGEuaXdhdGUuanAiLCJ0b25vLml3YXRlLmpwIiwieWFoYWJhLml3YXRlLmpwIiwieWFtYWRhLml3YXRlLmpwIiwiYXlhZ2F3YS5rYWdhd2EuanAiLCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcCIsImthbm9uamkua2FnYXdhLmpwIiwia290b2hpcmEua2FnYXdhLmpwIiwibWFubm8ua2FnYXdh''@;'; put 'put ''LmpwIiwibWFydWdhbWUua2FnYXdhLmpwIiwibWl0b3lvLmthZ2F3YS5qcCIsIm5hb3NoaW1hLmthZ2F3YS5qcCIsInNhbnVraS5rYWdhd2EuanAiLCJ0YWRvdHN1LmthZ2F3YS5qcCIsInRha2FtYXRzdS5rYWdhd2EuanAiLCJ0b25vc2hvLmthZ2F3YS5qcCIsInVjaGlub21pLmthZ2F3YS5q''@;'; put 'put ''cCIsInV0YXp1LmthZ2F3YS5qcCIsInplbnRzdWppLmthZ2F3YS5qcCIsImFrdW5lLmthZ29zaGltYS5qcCIsImFtYW1pLmthZ29zaGltYS5qcCIsImhpb2tpLmthZ29zaGltYS5qcCIsImlzYS5rYWdvc2hpbWEuanAiLCJpc2VuLmthZ29zaGltYS5qcCIsIml6dW1pLmthZ29zaGltYS5qcCIs''@;'; put 'put ''ImthZ29zaGltYS5rYWdvc2hpbWEuanAiLCJrYW5veWEua2Fnb3NoaW1hLmpwIiwia2F3YW5hYmUua2Fnb3NoaW1hLmpwIiwia2lua28ua2Fnb3NoaW1hLmpwIiwia291eWFtYS5rYWdvc2hpbWEuanAiLCJtYWt1cmF6YWtpLmthZ29zaGltYS5qcCIsIm1hdHN1bW90by5rYWdvc2hpbWEuanAi''@;'; put 'put ''LCJtaW5hbWl0YW5lLmthZ29zaGltYS5qcCIsIm5ha2F0YW5lLmthZ29zaGltYS5qcCIsIm5pc2hpbm9vbW90ZS5rYWdvc2hpbWEuanAiLCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcCIsInNvby5rYWdvc2hpbWEuanAiLCJ0YXJ1bWl6dS5rYWdvc2hpbWEuanAiLCJ5dXN1aS5rYWdvc2hp''@;'; put 'put ''bWEuanAiLCJhaWthd2Eua2FuYWdhd2EuanAiLCJhdHN1Z2kua2FuYWdhd2EuanAiLCJheWFzZS5rYW5hZ2F3YS5qcCIsImNoaWdhc2FraS5rYW5hZ2F3YS5qcCIsImViaW5hLmthbmFnYXdhLmpwIiwiZnVqaXNhd2Eua2FuYWdhd2EuanAiLCJoYWRhbm8ua2FuYWdhd2EuanAiLCJoYWtvbmUu''@;'; put 'put ''a2FuYWdhd2EuanAiLCJoaXJhdHN1a2Eua2FuYWdhd2EuanAiLCJpc2VoYXJhLmthbmFnYXdhLmpwIiwia2Fpc2VpLmthbmFnYXdhLmpwIiwia2FtYWt1cmEua2FuYWdhd2EuanAiLCJraXlva2F3YS5rYW5hZ2F3YS5qcCIsIm1hdHN1ZGEua2FuYWdhd2EuanAiLCJtaW5hbWlhc2hpZ2FyYS5r''@;'; put 'put ''YW5hZ2F3YS5qcCIsIm1pdXJhLmthbmFnYXdhLmpwIiwibmFrYWkua2FuYWdhd2EuanAiLCJuaW5vbWl5YS5rYW5hZ2F3YS5qcCIsIm9kYXdhcmEua2FuYWdhd2EuanAiLCJvaS5rYW5hZ2F3YS5qcCIsIm9pc28ua2FuYWdhd2EuanAiLCJzYWdhbWloYXJhLmthbmFnYXdhLmpwIiwic2FtdWth''@;'; put 'put ''d2Eua2FuYWdhd2EuanAiLCJ0c3VrdWkua2FuYWdhd2EuanAiLCJ5YW1ha2l0YS5rYW5hZ2F3YS5qcCIsInlhbWF0by5rYW5hZ2F3YS5qcCIsInlva29zdWthLmthbmFnYXdhLmpwIiwieXVnYXdhcmEua2FuYWdhd2EuanAiLCJ6YW1hLmthbmFnYXdhLmpwIiwienVzaGkua2FuYWdhd2EuanAi''@;'; put 'put ''LCJha2kua29jaGkuanAiLCJnZWlzZWkua29jaGkuanAiLCJoaWRha2Eua29jaGkuanAiLCJoaWdhc2hpdHN1bm8ua29jaGkuanAiLCJpbm8ua29jaGkuanAiLCJrYWdhbWkua29jaGkuanAiLCJrYW1pLmtvY2hpLmpwIiwia2l0YWdhd2Eua29jaGkuanAiLCJrb2NoaS5rb2NoaS5qcCIsIm1p''@;'; put 'put ''aGFyYS5rb2NoaS5qcCIsIm1vdG95YW1hLmtvY2hpLmpwIiwibXVyb3RvLmtvY2hpLmpwIiwibmFoYXJpLmtvY2hpLmpwIiwibmFrYW11cmEua29jaGkuanAiLCJuYW5rb2t1LmtvY2hpLmpwIiwibmlzaGl0b3NhLmtvY2hpLmpwIiwibml5b2RvZ2F3YS5rb2NoaS5qcCIsIm9jaGkua29jaGku''@;'; put 'put ''anAiLCJva2F3YS5rb2NoaS5qcCIsIm90b3lvLmtvY2hpLmpwIiwib3RzdWtpLmtvY2hpLmpwIiwic2FrYXdhLmtvY2hpLmpwIiwic3VrdW1vLmtvY2hpLmpwIiwic3VzYWtpLmtvY2hpLmpwIiwidG9zYS5rb2NoaS5qcCIsInRvc2FzaGltaXp1LmtvY2hpLmpwIiwidG95by5rb2NoaS5qcCIs''@;'; put 'put ''InRzdW5vLmtvY2hpLmpwIiwidW1hamkua29jaGkuanAiLCJ5YXN1ZGEua29jaGkuanAiLCJ5dXN1aGFyYS5rb2NoaS5qcCIsImFtYWt1c2Eua3VtYW1vdG8uanAiLCJhcmFvLmt1bWFtb3RvLmpwIiwiYXNvLmt1bWFtb3RvLmpwIiwiY2hveW8ua3VtYW1vdG8uanAiLCJneW9rdXRvLmt1bWFt''@;'; put 'put ''b3RvLmpwIiwia2FtaWFtYWt1c2Eua3VtYW1vdG8uanAiLCJraWt1Y2hpLmt1bWFtb3RvLmpwIiwia3VtYW1vdG8ua3VtYW1vdG8uanAiLCJtYXNoaWtpLmt1bWFtb3RvLmpwIiwibWlmdW5lLmt1bWFtb3RvLmpwIiwibWluYW1hdGEua3VtYW1vdG8uanAiLCJtaW5hbWlvZ3VuaS5rdW1hbW90''@;'; put 'put ''by5qcCIsIm5hZ2FzdS5rdW1hbW90by5qcCIsIm5pc2hpaGFyYS5rdW1hbW90by5qcCIsIm9ndW5pLmt1bWFtb3RvLmpwIiwib3p1Lmt1bWFtb3RvLmpwIiwic3Vtb3RvLmt1bWFtb3RvLmpwIiwidGFrYW1vcmkua3VtYW1vdG8uanAiLCJ1a2kua3VtYW1vdG8uanAiLCJ1dG8ua3VtYW1vdG8u''@;'; put 'put ''anAiLCJ5YW1hZ2Eua3VtYW1vdG8uanAiLCJ5YW1hdG8ua3VtYW1vdG8uanAiLCJ5YXRzdXNoaXJvLmt1bWFtb3RvLmpwIiwiYXlhYmUua3lvdG8uanAiLCJmdWt1Y2hpeWFtYS5reW90by5qcCIsImhpZ2FzaGl5YW1hLmt5b3RvLmpwIiwiaWRlLmt5b3RvLmpwIiwiaW5lLmt5b3RvLmpwIiwi''@;'; put 'put ''am95by5reW90by5qcCIsImthbWVva2Eua3lvdG8uanAiLCJrYW1vLmt5b3RvLmpwIiwia2l0YS5reW90by5qcCIsImtpenUua3lvdG8uanAiLCJrdW1peWFtYS5reW90by5qcCIsImt5b3RhbWJhLmt5b3RvLmpwIiwia3lvdGFuYWJlLmt5b3RvLmpwIiwia3lvdGFuZ28ua3lvdG8uanAiLCJt''@;'; put 'put ''YWl6dXJ1Lmt5b3RvLmpwIiwibWluYW1pLmt5b3RvLmpwIiwibWluYW1peWFtYXNoaXJvLmt5b3RvLmpwIiwibWl5YXp1Lmt5b3RvLmpwIiwibXVrby5reW90by5qcCIsIm5hZ2Fva2FreW8ua3lvdG8uanAiLCJuYWthZ3lvLmt5b3RvLmpwIiwibmFudGFuLmt5b3RvLmpwIiwib3lhbWF6YWtp''@;'; put 'put ''Lmt5b3RvLmpwIiwic2FreW8ua3lvdG8uanAiLCJzZWlrYS5reW90by5qcCIsInRhbmFiZS5reW90by5qcCIsInVqaS5reW90by5qcCIsInVqaXRhd2FyYS5reW90by5qcCIsIndhenVrYS5reW90by5qcCIsInlhbWFzaGluYS5reW90by5qcCIsInlhd2F0YS5reW90by5qcCIsImFzYWhpLm1p''@;'; put 'put ''ZS5qcCIsImluYWJlLm1pZS5qcCIsImlzZS5taWUuanAiLCJrYW1leWFtYS5taWUuanAiLCJrYXdhZ29lLm1pZS5qcCIsImtpaG8ubWllLmpwIiwia2lzb3Nha2kubWllLmpwIiwia2l3YS5taWUuanAiLCJrb21vbm8ubWllLmpwIiwia3VtYW5vLm1pZS5qcCIsImt1d2FuYS5taWUuanAiLCJt''@;'; put 'put ''YXRzdXNha2EubWllLmpwIiwibWVpd2EubWllLmpwIiwibWloYW1hLm1pZS5qcCIsIm1pbmFtaWlzZS5taWUuanAiLCJtaXN1Z2kubWllLmpwIiwibWl5YW1hLm1pZS5qcCIsIm5hYmFyaS5taWUuanAiLCJzaGltYS5taWUuanAiLCJzdXp1a2EubWllLmpwIiwidGFkby5taWUuanAiLCJ0YWlr''@;'; put 'put ''aS5taWUuanAiLCJ0YWtpLm1pZS5qcCIsInRhbWFraS5taWUuanAiLCJ0b2JhLm1pZS5qcCIsInRzdS5taWUuanAiLCJ1ZG9uby5taWUuanAiLCJ1cmVzaGluby5taWUuanAiLCJ3YXRhcmFpLm1pZS5qcCIsInlva2thaWNoaS5taWUuanAiLCJmdXJ1a2F3YS5taXlhZ2kuanAiLCJoaWdhc2hp''@;'; put 'put ''bWF0c3VzaGltYS5taXlhZ2kuanAiLCJpc2hpbm9tYWtpLm1peWFnaS5qcCIsIml3YW51bWEubWl5YWdpLmpwIiwia2FrdWRhLm1peWFnaS5qcCIsImthbWkubWl5YWdpLmpwIiwia2F3YXNha2kubWl5YWdpLmpwIiwibWFydW1vcmkubWl5YWdpLmpwIiwibWF0c3VzaGltYS5taXlhZ2kuanAi''@;'; put 'put ''LCJtaW5hbWlzYW5yaWt1Lm1peWFnaS5qcCIsIm1pc2F0by5taXlhZ2kuanAiLCJtdXJhdGEubWl5YWdpLmpwIiwibmF0b3JpLm1peWFnaS5qcCIsIm9nYXdhcmEubWl5YWdpLmpwIiwib2hpcmEubWl5YWdpLmpwIiwib25hZ2F3YS5taXlhZ2kuanAiLCJvc2FraS5taXlhZ2kuanAiLCJyaWZ1''@;'; put 'put ''Lm1peWFnaS5qcCIsInNlbWluZS5taXlhZ2kuanAiLCJzaGliYXRhLm1peWFnaS5qcCIsInNoaWNoaWthc2h1a3UubWl5YWdpLmpwIiwic2hpa2FtYS5taXlhZ2kuanAiLCJzaGlvZ2FtYS5taXlhZ2kuanAiLCJzaGlyb2lzaGkubWl5YWdpLmpwIiwidGFnYWpvLm1peWFnaS5qcCIsInRhaXdh''@;'; put 'put ''Lm1peWFnaS5qcCIsInRvbWUubWl5YWdpLmpwIiwidG9taXlhLm1peWFnaS5qcCIsIndha3V5YS5taXlhZ2kuanAiLCJ3YXRhcmkubWl5YWdpLmpwIiwieWFtYW1vdG8ubWl5YWdpLmpwIiwiemFvLm1peWFnaS5qcCIsImF5YS5taXlhemFraS5qcCIsImViaW5vLm1peWF6YWtpLmpwIiwiZ29r''@;'; put 'put ''YXNlLm1peWF6YWtpLmpwIiwiaHl1Z2EubWl5YXpha2kuanAiLCJrYWRvZ2F3YS5taXlhemFraS5qcCIsImthd2FtaW5hbWkubWl5YXpha2kuanAiLCJraWpvLm1peWF6YWtpLmpwIiwia2l0YWdhd2EubWl5YXpha2kuanAiLCJraXRha2F0YS5taXlhemFraS5qcCIsImtpdGF1cmEubWl5YXph''@;'; put 'put ''a2kuanAiLCJrb2JheWFzaGkubWl5YXpha2kuanAiLCJrdW5pdG9taS5taXlhemFraS5qcCIsImt1c2hpbWEubWl5YXpha2kuanAiLCJtaW1hdGEubWl5YXpha2kuanAiLCJtaXlha29ub2pvLm1peWF6YWtpLmpwIiwibWl5YXpha2kubWl5YXpha2kuanAiLCJtb3JvdHN1a2EubWl5YXpha2ku''@;'; put 'put ''anAiLCJuaWNoaW5hbi5taXlhemFraS5qcCIsIm5pc2hpbWVyYS5taXlhemFraS5qcCIsIm5vYmVva2EubWl5YXpha2kuanAiLCJzYWl0by5taXlhemFraS5qcCIsInNoaWliYS5taXlhemFraS5qcCIsInNoaW50b21pLm1peWF6YWtpLmpwIiwidGFrYWhhcnUubWl5YXpha2kuanAiLCJ0YWth''@;'; put 'put ''bmFiZS5taXlhemFraS5qcCIsInRha2F6YWtpLm1peWF6YWtpLmpwIiwidHN1bm8ubWl5YXpha2kuanAiLCJhY2hpLm5hZ2Fuby5qcCIsImFnZW1hdHN1Lm5hZ2Fuby5qcCIsImFuYW4ubmFnYW5vLmpwIiwiYW9raS5uYWdhbm8uanAiLCJhc2FoaS5uYWdhbm8uanAiLCJhenVtaW5vLm5hZ2Fu''@;'; put 'put ''by5qcCIsImNoaWt1aG9rdS5uYWdhbm8uanAiLCJjaGlrdW1hLm5hZ2Fuby5qcCIsImNoaW5vLm5hZ2Fuby5qcCIsImZ1amltaS5uYWdhbm8uanAiLCJoYWt1YmEubmFnYW5vLmpwIiwiaGFyYS5uYWdhbm8uanAiLCJoaXJheWEubmFnYW5vLmpwIiwiaWlkYS5uYWdhbm8uanAiLCJpaWppbWEu''@;'; put 'put ''bmFnYW5vLmpwIiwiaWl5YW1hLm5hZ2Fuby5qcCIsImlpenVuYS5uYWdhbm8uanAiLCJpa2VkYS5uYWdhbm8uanAiLCJpa3VzYWthLm5hZ2Fuby5qcCIsImluYS5uYWdhbm8uanAiLCJrYXJ1aXphd2EubmFnYW5vLmpwIiwia2F3YWthbWkubmFnYW5vLmpwIiwia2lzby5uYWdhbm8uanAiLCJr''@;'; put 'put ''aXNvZnVrdXNoaW1hLm5hZ2Fuby5qcCIsImtpdGFhaWtpLm5hZ2Fuby5qcCIsImtvbWFnYW5lLm5hZ2Fuby5qcCIsImtvbW9yby5uYWdhbm8uanAiLCJtYXRzdWthd2EubmFnYW5vLmpwIiwibWF0c3Vtb3RvLm5hZ2Fuby5qcCIsIm1pYXNhLm5hZ2Fuby5qcCIsIm1pbmFtaWFpa2kubmFnYW5v''@;'; put 'put ''LmpwIiwibWluYW1pbWFraS5uYWdhbm8uanAiLCJtaW5hbWltaW5vd2EubmFnYW5vLmpwIiwibWlub3dhLm5hZ2Fuby5qcCIsIm1peWFkYS5uYWdhbm8uanAiLCJtaXlvdGEubmFnYW5vLmpwIiwibW9jaGl6dWtpLm5hZ2Fuby5qcCIsIm5hZ2Fuby5uYWdhbm8uanAiLCJuYWdhd2EubmFnYW5v''@;'; put 'put ''LmpwIiwibmFnaXNvLm5hZ2Fuby5qcCIsIm5ha2FnYXdhLm5hZ2Fuby5qcCIsIm5ha2Fuby5uYWdhbm8uanAiLCJub3phd2FvbnNlbi5uYWdhbm8uanAiLCJvYnVzZS5uYWdhbm8uanAiLCJvZ2F3YS5uYWdhbm8uanAiLCJva2F5YS5uYWdhbm8uanAiLCJvbWFjaGkubmFnYW5vLmpwIiwib21p''@;'; put 'put ''Lm5hZ2Fuby5qcCIsIm9va3V3YS5uYWdhbm8uanAiLCJvb3NoaWthLm5hZ2Fuby5qcCIsIm90YWtpLm5hZ2Fuby5qcCIsIm90YXJpLm5hZ2Fuby5qcCIsInNha2FlLm5hZ2Fuby5qcCIsInNha2FraS5uYWdhbm8uanAiLCJzYWt1Lm5hZ2Fuby5qcCIsInNha3Voby5uYWdhbm8uanAiLCJzaGlt''@;'; put 'put ''b3N1d2EubmFnYW5vLmpwIiwic2hpbmFub21hY2hpLm5hZ2Fuby5qcCIsInNoaW9qaXJpLm5hZ2Fuby5qcCIsInN1d2EubmFnYW5vLmpwIiwic3V6YWthLm5hZ2Fuby5qcCIsInRha2FnaS5uYWdhbm8uanAiLCJ0YWthbW9yaS5uYWdhbm8uanAiLCJ0YWtheWFtYS5uYWdhbm8uanAiLCJ0YXRl''@;'; put 'put ''c2hpbmEubmFnYW5vLmpwIiwidGF0c3Vuby5uYWdhbm8uanAiLCJ0b2dha3VzaGkubmFnYW5vLmpwIiwidG9ndXJhLm5hZ2Fuby5qcCIsInRvbWkubmFnYW5vLmpwIiwidWVkYS5uYWdhbm8uanAiLCJ3YWRhLm5hZ2Fuby5qcCIsInlhbWFnYXRhLm5hZ2Fuby5qcCIsInlhbWFub3VjaGkubmFn''@;'; put 'put ''YW5vLmpwIiwieWFzYWthLm5hZ2Fuby5qcCIsInlhc3Vva2EubmFnYW5vLmpwIiwiY2hpaml3YS5uYWdhc2FraS5qcCIsImZ1dHN1Lm5hZ2FzYWtpLmpwIiwiZ290by5uYWdhc2FraS5qcCIsImhhc2FtaS5uYWdhc2FraS5qcCIsImhpcmFkby5uYWdhc2FraS5qcCIsImlraS5uYWdhc2FraS5q''@;'; put 'put ''cCIsImlzYWhheWEubmFnYXNha2kuanAiLCJrYXdhdGFuYS5uYWdhc2FraS5qcCIsImt1Y2hpbm90c3UubmFnYXNha2kuanAiLCJtYXRzdXVyYS5uYWdhc2FraS5qcCIsIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwIiwib2JhbWEubmFnYXNha2kuanAiLCJvbXVyYS5uYWdhc2FraS5qcCIsIm9zZXRv''@;'; put 'put ''Lm5hZ2FzYWtpLmpwIiwic2Fpa2FpLm5hZ2FzYWtpLmpwIiwic2FzZWJvLm5hZ2FzYWtpLmpwIiwic2VpaGkubmFnYXNha2kuanAiLCJzaGltYWJhcmEubmFnYXNha2kuanAiLCJzaGlua2FtaWdvdG8ubmFnYXNha2kuanAiLCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwIiwidHN1c2hpbWEubmFnYXNh''@;'; put 'put ''a2kuanAiLCJ1bnplbi5uYWdhc2FraS5qcCIsImFuZG8ubmFyYS5qcCIsImdvc2UubmFyYS5qcCIsImhlZ3VyaS5uYXJhLmpwIiwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcCIsImlrYXJ1Z2EubmFyYS5qcCIsImlrb21hLm5hcmEuanAiLCJrYW1pa2l0YXlhbWEubmFyYS5qcCIsImthbm1ha2ku''@;'; put 'put ''bmFyYS5qcCIsImthc2hpYmEubmFyYS5qcCIsImthc2hpaGFyYS5uYXJhLmpwIiwia2F0c3VyYWdpLm5hcmEuanAiLCJrYXdhaS5uYXJhLmpwIiwia2F3YWthbWkubmFyYS5qcCIsImthd2FuaXNoaS5uYXJhLmpwIiwia29yeW8ubmFyYS5qcCIsImt1cm90YWtpLm5hcmEuanAiLCJtaXRzdWUu''@;'; put 'put ''bmFyYS5qcCIsIm1peWFrZS5uYXJhLmpwIiwibmFyYS5uYXJhLmpwIiwibm9zZWdhd2EubmFyYS5qcCIsIm9qaS5uYXJhLmpwIiwib3VkYS5uYXJhLmpwIiwib3lvZG8ubmFyYS5qcCIsInNha3VyYWkubmFyYS5qcCIsInNhbmdvLm5hcmEuanAiLCJzaGltb2ljaGkubmFyYS5qcCIsInNoaW1v''@;'; put 'put ''a2l0YXlhbWEubmFyYS5qcCIsInNoaW5qby5uYXJhLmpwIiwic29uaS5uYXJhLmpwIiwidGFrYXRvcmkubmFyYS5qcCIsInRhd2FyYW1vdG8ubmFyYS5qcCIsInRlbmthd2EubmFyYS5qcCIsInRlbnJpLm5hcmEuanAiLCJ1ZGEubmFyYS5qcCIsInlhbWF0b2tvcml5YW1hLm5hcmEuanAiLCJ5''@;'; put 'put ''YW1hdG90YWthZGEubmFyYS5qcCIsInlhbWF6b2UubmFyYS5qcCIsInlvc2hpbm8ubmFyYS5qcCIsImFnYS5uaWlnYXRhLmpwIiwiYWdhbm8ubmlpZ2F0YS5qcCIsImdvc2VuLm5paWdhdGEuanAiLCJpdG9pZ2F3YS5uaWlnYXRhLmpwIiwiaXp1bW96YWtpLm5paWdhdGEuanAiLCJqb2V0c3Uu''@;'; put 'put ''bmlpZ2F0YS5qcCIsImthbW8ubmlpZ2F0YS5qcCIsImthcml3YS5uaWlnYXRhLmpwIiwia2FzaGl3YXpha2kubmlpZ2F0YS5qcCIsIm1pbmFtaXVvbnVtYS5uaWlnYXRhLmpwIiwibWl0c3VrZS5uaWlnYXRhLmpwIiwibXVpa2EubmlpZ2F0YS5qcCIsIm11cmFrYW1pLm5paWdhdGEuanAiLCJt''@;'; put 'put ''eW9rby5uaWlnYXRhLmpwIiwibmFnYW9rYS5uaWlnYXRhLmpwIiwibmlpZ2F0YS5uaWlnYXRhLmpwIiwib2ppeWEubmlpZ2F0YS5qcCIsIm9taS5uaWlnYXRhLmpwIiwic2Fkby5uaWlnYXRhLmpwIiwic2Fuam8ubmlpZ2F0YS5qcCIsInNlaXJvLm5paWdhdGEuanAiLCJzZWlyb3UubmlpZ2F0''@;'; put 'put ''YS5qcCIsInNla2lrYXdhLm5paWdhdGEuanAiLCJzaGliYXRhLm5paWdhdGEuanAiLCJ0YWdhbWkubmlpZ2F0YS5qcCIsInRhaW5haS5uaWlnYXRhLmpwIiwidG9jaGlvLm5paWdhdGEuanAiLCJ0b2thbWFjaGkubmlpZ2F0YS5qcCIsInRzdWJhbWUubmlpZ2F0YS5qcCIsInRzdW5hbi5uaWln''@;'; put 'put ''YXRhLmpwIiwidW9udW1hLm5paWdhdGEuanAiLCJ5YWhpa28ubmlpZ2F0YS5qcCIsInlvaXRhLm5paWdhdGEuanAiLCJ5dXphd2EubmlpZ2F0YS5qcCIsImJlcHB1Lm9pdGEuanAiLCJidW5nb29uby5vaXRhLmpwIiwiYnVuZ290YWthZGEub2l0YS5qcCIsImhhc2FtYS5vaXRhLmpwIiwiaGlq''@;'; put 'put ''aS5vaXRhLmpwIiwiaGltZXNoaW1hLm9pdGEuanAiLCJoaXRhLm9pdGEuanAiLCJrYW1pdHN1ZS5vaXRhLmpwIiwia29rb25vZS5vaXRhLmpwIiwia3VqdS5vaXRhLmpwIiwia3VuaXNha2kub2l0YS5qcCIsImt1c3Uub2l0YS5qcCIsIm9pdGEub2l0YS5qcCIsInNhaWtpLm9pdGEuanAiLCJ0''@;'; put 'put ''YWtldGEub2l0YS5qcCIsInRzdWt1bWkub2l0YS5qcCIsInVzYS5vaXRhLmpwIiwidXN1a2kub2l0YS5qcCIsInl1ZnUub2l0YS5qcCIsImFrYWl3YS5va2F5YW1hLmpwIiwiYXNha3VjaGkub2theWFtYS5qcCIsImJpemVuLm9rYXlhbWEuanAiLCJoYXlhc2hpbWEub2theWFtYS5qcCIsImli''@;'; put 'put ''YXJhLm9rYXlhbWEuanAiLCJrYWdhbWluby5va2F5YW1hLmpwIiwia2FzYW9rYS5va2F5YW1hLmpwIiwia2liaWNodW8ub2theWFtYS5qcCIsImt1bWVuYW4ub2theWFtYS5qcCIsImt1cmFzaGlraS5va2F5YW1hLmpwIiwibWFuaXdhLm9rYXlhbWEuanAiLCJtaXNha2kub2theWFtYS5qcCIs''@;'; put 'put ''Im5hZ2kub2theWFtYS5qcCIsIm5paW1pLm9rYXlhbWEuanAiLCJuaXNoaWF3YWt1cmEub2theWFtYS5qcCIsIm9rYXlhbWEub2theWFtYS5qcCIsInNhdG9zaG8ub2theWFtYS5qcCIsInNldG91Y2hpLm9rYXlhbWEuanAiLCJzaGluam8ub2theWFtYS5qcCIsInNob28ub2theWFtYS5qcCIs''@;'; put 'put ''InNvamEub2theWFtYS5qcCIsInRha2FoYXNoaS5va2F5YW1hLmpwIiwidGFtYW5vLm9rYXlhbWEuanAiLCJ0c3V5YW1hLm9rYXlhbWEuanAiLCJ3YWtlLm9rYXlhbWEuanAiLCJ5YWthZ2Uub2theWFtYS5qcCIsImFndW5pLm9raW5hd2EuanAiLCJnaW5vd2FuLm9raW5hd2EuanAiLCJnaW5v''@;'; put 'put ''emEub2tpbmF3YS5qcCIsImd1c2hpa2FtaS5va2luYXdhLmpwIiwiaGFlYmFydS5va2luYXdhLmpwIiwiaGlnYXNoaS5va2luYXdhLmpwIiwiaGlyYXJhLm9raW5hd2EuanAiLCJpaGV5YS5va2luYXdhLmpwIiwiaXNoaWdha2kub2tpbmF3YS5qcCIsImlzaGlrYXdhLm9raW5hd2EuanAiLCJp''@;'; put 'put ''dG9tYW4ub2tpbmF3YS5qcCIsIml6ZW5hLm9raW5hd2EuanAiLCJrYWRlbmEub2tpbmF3YS5qcCIsImtpbi5va2luYXdhLmpwIiwia2l0YWRhaXRvLm9raW5hd2EuanAiLCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwIiwia3VtZWppbWEub2tpbmF3YS5qcCIsImt1bmlnYW1pLm9raW5hd2Eu''@;'; put 'put ''anAiLCJtaW5hbWlkYWl0by5va2luYXdhLmpwIiwibW90b2J1Lm9raW5hd2EuanAiLCJuYWdvLm9raW5hd2EuanAiLCJuYWhhLm9raW5hd2EuanAiLCJuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJuYWtpamluLm9raW5hd2EuanAiLCJuYW5qby5va2luYXdhLmpwIiwibmlzaGloYXJhLm9raW5h''@;'; put 'put ''d2EuanAiLCJvZ2ltaS5va2luYXdhLmpwIiwib2tpbmF3YS5va2luYXdhLmpwIiwib25uYS5va2luYXdhLmpwIiwic2hpbW9qaS5va2luYXdhLmpwIiwidGFrZXRvbWkub2tpbmF3YS5qcCIsInRhcmFtYS5va2luYXdhLmpwIiwidG9rYXNoaWtpLm9raW5hd2EuanAiLCJ0b21pZ3VzdWt1Lm9r''@;'; put 'put ''aW5hd2EuanAiLCJ0b25ha2kub2tpbmF3YS5qcCIsInVyYXNvZS5va2luYXdhLmpwIiwidXJ1bWEub2tpbmF3YS5qcCIsInlhZXNlLm9raW5hd2EuanAiLCJ5b21pdGFuLm9raW5hd2EuanAiLCJ5b25hYmFydS5va2luYXdhLmpwIiwieW9uYWd1bmkub2tpbmF3YS5qcCIsInphbWFtaS5va2lu''@;'; put 'put ''YXdhLmpwIiwiYWJlbm8ub3Nha2EuanAiLCJjaGloYXlhYWthc2FrYS5vc2FrYS5qcCIsImNodW8ub3Nha2EuanAiLCJkYWl0by5vc2FrYS5qcCIsImZ1amlpZGVyYS5vc2FrYS5qcCIsImhhYmlraW5vLm9zYWthLmpwIiwiaGFubmFuLm9zYWthLmpwIiwiaGlnYXNoaW9zYWthLm9zYWthLmpw''@;'; put 'put ''IiwiaGlnYXNoaXN1bWl5b3NoaS5vc2FrYS5qcCIsImhpZ2FzaGl5b2RvZ2F3YS5vc2FrYS5qcCIsImhpcmFrYXRhLm9zYWthLmpwIiwiaWJhcmFraS5vc2FrYS5qcCIsImlrZWRhLm9zYWthLmpwIiwiaXp1bWkub3Nha2EuanAiLCJpenVtaW90c3Uub3Nha2EuanAiLCJpenVtaXNhbm8ub3Nh''@;'; put 'put ''a2EuanAiLCJrYWRvbWEub3Nha2EuanAiLCJrYWl6dWthLm9zYWthLmpwIiwia2FuYW4ub3Nha2EuanAiLCJrYXNoaXdhcmEub3Nha2EuanAiLCJrYXRhbm8ub3Nha2EuanAiLCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwIiwia2lzaGl3YWRhLm9zYWthLmpwIiwia2l0YS5vc2FrYS5qcCIsImt1''@;'; put 'put ''bWF0b3JpLm9zYWthLmpwIiwibWF0c3ViYXJhLm9zYWthLmpwIiwibWluYXRvLm9zYWthLmpwIiwibWlub2gub3Nha2EuanAiLCJtaXNha2kub3Nha2EuanAiLCJtb3JpZ3VjaGkub3Nha2EuanAiLCJuZXlhZ2F3YS5vc2FrYS5qcCIsIm5pc2hpLm9zYWthLmpwIiwibm9zZS5vc2FrYS5qcCIs''@;'; put 'put ''Im9zYWthc2F5YW1hLm9zYWthLmpwIiwic2FrYWkub3Nha2EuanAiLCJzYXlhbWEub3Nha2EuanAiLCJzZW5uYW4ub3Nha2EuanAiLCJzZXR0c3Uub3Nha2EuanAiLCJzaGlqb25hd2F0ZS5vc2FrYS5qcCIsInNoaW1hbW90by5vc2FrYS5qcCIsInN1aXRhLm9zYWthLmpwIiwidGFkYW9rYS5v''@;'; put 'put ''c2FrYS5qcCIsInRhaXNoaS5vc2FrYS5qcCIsInRhamlyaS5vc2FrYS5qcCIsInRha2Fpc2hpLm9zYWthLmpwIiwidGFrYXRzdWtpLm9zYWthLmpwIiwidG9uZGFiYXlhc2hpLm9zYWthLmpwIiwidG95b25ha2Eub3Nha2EuanAiLCJ0b3lvbm8ub3Nha2EuanAiLCJ5YW8ub3Nha2EuanAiLCJh''@;'; put 'put ''cmlha2Uuc2FnYS5qcCIsImFyaXRhLnNhZ2EuanAiLCJmdWt1ZG9taS5zYWdhLmpwIiwiZ2Vua2FpLnNhZ2EuanAiLCJoYW1hdGFtYS5zYWdhLmpwIiwiaGl6ZW4uc2FnYS5qcCIsImltYXJpLnNhZ2EuanAiLCJrYW1pbWluZS5zYWdhLmpwIiwia2FuemFraS5zYWdhLmpwIiwia2FyYXRzdS5z''@;'; put 'put ''YWdhLmpwIiwia2FzaGltYS5zYWdhLmpwIiwia2l0YWdhdGEuc2FnYS5qcCIsImtpdGFoYXRhLnNhZ2EuanAiLCJraXlhbWEuc2FnYS5qcCIsImtvdWhva3Uuc2FnYS5qcCIsImt5dXJhZ2kuc2FnYS5qcCIsIm5pc2hpYXJpdGEuc2FnYS5qcCIsIm9naS5zYWdhLmpwIiwib21hY2hpLnNhZ2Eu''@;'; put 'put ''anAiLCJvdWNoaS5zYWdhLmpwIiwic2FnYS5zYWdhLmpwIiwic2hpcm9pc2hpLnNhZ2EuanAiLCJ0YWt1LnNhZ2EuanAiLCJ0YXJhLnNhZ2EuanAiLCJ0b3N1LnNhZ2EuanAiLCJ5b3NoaW5vZ2FyaS5zYWdhLmpwIiwiYXJha2F3YS5zYWl0YW1hLmpwIiwiYXNha2Euc2FpdGFtYS5qcCIsImNo''@;'; put 'put ''aWNoaWJ1LnNhaXRhbWEuanAiLCJmdWppbWkuc2FpdGFtYS5qcCIsImZ1amltaW5vLnNhaXRhbWEuanAiLCJmdWtheWEuc2FpdGFtYS5qcCIsImhhbm5vLnNhaXRhbWEuanAiLCJoYW55dS5zYWl0YW1hLmpwIiwiaGFzdWRhLnNhaXRhbWEuanAiLCJoYXRvZ2F5YS5zYWl0YW1hLmpwIiwiaGF0''@;'; put 'put ''b3lhbWEuc2FpdGFtYS5qcCIsImhpZGFrYS5zYWl0YW1hLmpwIiwiaGlnYXNoaWNoaWNoaWJ1LnNhaXRhbWEuanAiLCJoaWdhc2hpbWF0c3V5YW1hLnNhaXRhbWEuanAiLCJob25qby5zYWl0YW1hLmpwIiwiaW5hLnNhaXRhbWEuanAiLCJpcnVtYS5zYWl0YW1hLmpwIiwiaXdhdHN1a2kuc2Fp''@;'; put 'put ''dGFtYS5qcCIsImthbWlpenVtaS5zYWl0YW1hLmpwIiwia2FtaWthd2Euc2FpdGFtYS5qcCIsImthbWlzYXRvLnNhaXRhbWEuanAiLCJrYXN1a2FiZS5zYWl0YW1hLmpwIiwia2F3YWdvZS5zYWl0YW1hLmpwIiwia2F3YWd1Y2hpLnNhaXRhbWEuanAiLCJrYXdhamltYS5zYWl0YW1hLmpwIiwi''@;'; put 'put ''a2F6by5zYWl0YW1hLmpwIiwia2l0YW1vdG8uc2FpdGFtYS5qcCIsImtvc2hpZ2F5YS5zYWl0YW1hLmpwIiwia291bm9zdS5zYWl0YW1hLmpwIiwia3VraS5zYWl0YW1hLmpwIiwia3VtYWdheWEuc2FpdGFtYS5qcCIsIm1hdHN1YnVzaGkuc2FpdGFtYS5qcCIsIm1pbmFuby5zYWl0YW1hLmpw''@;'; put 'put ''IiwibWlzYXRvLnNhaXRhbWEuanAiLCJtaXlhc2hpcm8uc2FpdGFtYS5qcCIsIm1peW9zaGkuc2FpdGFtYS5qcCIsIm1vcm95YW1hLnNhaXRhbWEuanAiLCJuYWdhdG9yby5zYWl0YW1hLmpwIiwibmFtZWdhd2Euc2FpdGFtYS5qcCIsIm5paXphLnNhaXRhbWEuanAiLCJvZ2Fuby5zYWl0YW1h''@;'; put 'put ''LmpwIiwib2dhd2Euc2FpdGFtYS5qcCIsIm9nb3NlLnNhaXRhbWEuanAiLCJva2VnYXdhLnNhaXRhbWEuanAiLCJvbWl5YS5zYWl0YW1hLmpwIiwib3Rha2kuc2FpdGFtYS5qcCIsInJhbnphbi5zYWl0YW1hLmpwIiwicnlva2FtaS5zYWl0YW1hLmpwIiwic2FpdGFtYS5zYWl0YW1hLmpwIiwi''@;'; put 'put ''c2FrYWRvLnNhaXRhbWEuanAiLCJzYXR0ZS5zYWl0YW1hLmpwIiwic2F5YW1hLnNhaXRhbWEuanAiLCJzaGlraS5zYWl0YW1hLmpwIiwic2hpcmFva2Euc2FpdGFtYS5qcCIsInNva2Euc2FpdGFtYS5qcCIsInN1Z2l0by5zYWl0YW1hLmpwIiwidG9kYS5zYWl0YW1hLmpwIiwidG9raWdhd2Eu''@;'; put 'put ''c2FpdGFtYS5qcCIsInRva29yb3phd2Euc2FpdGFtYS5qcCIsInRzdXJ1Z2FzaGltYS5zYWl0YW1hLmpwIiwidXJhd2Euc2FpdGFtYS5qcCIsIndhcmFiaS5zYWl0YW1hLmpwIiwieWFzaGlvLnNhaXRhbWEuanAiLCJ5b2tvemUuc2FpdGFtYS5qcCIsInlvbm8uc2FpdGFtYS5qcCIsInlvcmlp''@;'; put 'put ''LnNhaXRhbWEuanAiLCJ5b3NoaWRhLnNhaXRhbWEuanAiLCJ5b3NoaWthd2Euc2FpdGFtYS5qcCIsInlvc2hpbWkuc2FpdGFtYS5qcCIsImFpc2hvLnNoaWdhLmpwIiwiZ2Ftby5zaGlnYS5qcCIsImhpZ2FzaGlvbWkuc2hpZ2EuanAiLCJoaWtvbmUuc2hpZ2EuanAiLCJrb2thLnNoaWdhLmpw''@;'; put 'put ''Iiwia29uYW4uc2hpZ2EuanAiLCJrb3NlaS5zaGlnYS5qcCIsImtvdG8uc2hpZ2EuanAiLCJrdXNhdHN1LnNoaWdhLmpwIiwibWFpYmFyYS5zaGlnYS5qcCIsIm1vcml5YW1hLnNoaWdhLmpwIiwibmFnYWhhbWEuc2hpZ2EuanAiLCJuaXNoaWF6YWkuc2hpZ2EuanAiLCJub3RvZ2F3YS5zaGln''@;'; put 'put ''YS5qcCIsIm9taWhhY2hpbWFuLnNoaWdhLmpwIiwib3RzdS5zaGlnYS5qcCIsInJpdHRvLnNoaWdhLmpwIiwicnl1b2guc2hpZ2EuanAiLCJ0YWthc2hpbWEuc2hpZ2EuanAiLCJ0YWthdHN1a2kuc2hpZ2EuanAiLCJ0b3JhaGltZS5zaGlnYS5qcCIsInRveW9zYXRvLnNoaWdhLmpwIiwieWFz''@;'; put 'put ''dS5zaGlnYS5qcCIsImFrYWdpLnNoaW1hbmUuanAiLCJhbWEuc2hpbWFuZS5qcCIsImdvdHN1LnNoaW1hbmUuanAiLCJoYW1hZGEuc2hpbWFuZS5qcCIsImhpZ2FzaGlpenVtby5zaGltYW5lLmpwIiwiaGlrYXdhLnNoaW1hbmUuanAiLCJoaWtpbWkuc2hpbWFuZS5qcCIsIml6dW1vLnNoaW1h''@;'; put 'put ''bmUuanAiLCJrYWtpbm9raS5zaGltYW5lLmpwIiwibWFzdWRhLnNoaW1hbmUuanAiLCJtYXRzdWUuc2hpbWFuZS5qcCIsIm1pc2F0by5zaGltYW5lLmpwIiwibmlzaGlub3NoaW1hLnNoaW1hbmUuanAiLCJvaGRhLnNoaW1hbmUuanAiLCJva2lub3NoaW1hLnNoaW1hbmUuanAiLCJva3VpenVt''@;'; put 'put ''by5zaGltYW5lLmpwIiwic2hpbWFuZS5zaGltYW5lLmpwIiwidGFtYXl1LnNoaW1hbmUuanAiLCJ0c3V3YW5vLnNoaW1hbmUuanAiLCJ1bm5hbi5zaGltYW5lLmpwIiwieWFrdW1vLnNoaW1hbmUuanAiLCJ5YXN1Z2kuc2hpbWFuZS5qcCIsInlhdHN1a2Euc2hpbWFuZS5qcCIsImFyYWkuc2hp''@;'; put 'put ''enVva2EuanAiLCJhdGFtaS5zaGl6dW9rYS5qcCIsImZ1amkuc2hpenVva2EuanAiLCJmdWppZWRhLnNoaXp1b2thLmpwIiwiZnVqaWthd2Euc2hpenVva2EuanAiLCJmdWppbm9taXlhLnNoaXp1b2thLmpwIiwiZnVrdXJvaS5zaGl6dW9rYS5qcCIsImdvdGVtYmEuc2hpenVva2EuanAiLCJo''@;'; put 'put ''YWliYXJhLnNoaXp1b2thLmpwIiwiaGFtYW1hdHN1LnNoaXp1b2thLmpwIiwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcCIsIml0by5zaGl6dW9rYS5qcCIsIml3YXRhLnNoaXp1b2thLmpwIiwiaXp1LnNoaXp1b2thLmpwIiwiaXp1bm9rdW5pLnNoaXp1b2thLmpwIiwia2FrZWdhd2Euc2hpenVv''@;'; put 'put ''a2EuanAiLCJrYW5uYW1pLnNoaXp1b2thLmpwIiwia2F3YW5laG9uLnNoaXp1b2thLmpwIiwia2F3YXp1LnNoaXp1b2thLmpwIiwia2lrdWdhd2Euc2hpenVva2EuanAiLCJrb3NhaS5zaGl6dW9rYS5qcCIsIm1ha2lub2hhcmEuc2hpenVva2EuanAiLCJtYXRzdXpha2kuc2hpenVva2EuanAi''@;'; put 'put ''LCJtaW5hbWlpenUuc2hpenVva2EuanAiLCJtaXNoaW1hLnNoaXp1b2thLmpwIiwibW9yaW1hY2hpLnNoaXp1b2thLmpwIiwibmlzaGlpenUuc2hpenVva2EuanAiLCJudW1henUuc2hpenVva2EuanAiLCJvbWFlemFraS5zaGl6dW9rYS5qcCIsInNoaW1hZGEuc2hpenVva2EuanAiLCJzaGlt''@;'; put 'put ''aXp1LnNoaXp1b2thLmpwIiwic2hpbW9kYS5zaGl6dW9rYS5qcCIsInNoaXp1b2thLnNoaXp1b2thLmpwIiwic3Vzb25vLnNoaXp1b2thLmpwIiwieWFpenUuc2hpenVva2EuanAiLCJ5b3NoaWRhLnNoaXp1b2thLmpwIiwiYXNoaWthZ2EudG9jaGlnaS5qcCIsImJhdG8udG9jaGlnaS5qcCIs''@;'; put 'put ''ImhhZ2EudG9jaGlnaS5qcCIsImljaGlrYWkudG9jaGlnaS5qcCIsIml3YWZ1bmUudG9jaGlnaS5qcCIsImthbWlub2thd2EudG9jaGlnaS5qcCIsImthbnVtYS50b2NoaWdpLmpwIiwia2FyYXN1eWFtYS50b2NoaWdpLmpwIiwia3Vyb2lzby50b2NoaWdpLmpwIiwibWFzaGlrby50b2NoaWdp''@;'; put 'put ''LmpwIiwibWlidS50b2NoaWdpLmpwIiwibW9rYS50b2NoaWdpLmpwIiwibW90ZWdpLnRvY2hpZ2kuanAiLCJuYXN1LnRvY2hpZ2kuanAiLCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcCIsIm5pa2tvLnRvY2hpZ2kuanAiLCJuaXNoaWthdGEudG9jaGlnaS5qcCIsIm5vZ2kudG9jaGlnaS5qcCIs''@;'; put 'put ''Im9oaXJhLnRvY2hpZ2kuanAiLCJvaHRhd2FyYS50b2NoaWdpLmpwIiwib3lhbWEudG9jaGlnaS5qcCIsInNha3VyYS50b2NoaWdpLmpwIiwic2Fuby50b2NoaWdpLmpwIiwic2hpbW90c3VrZS50b2NoaWdpLmpwIiwic2hpb3lhLnRvY2hpZ2kuanAiLCJ0YWthbmV6YXdhLnRvY2hpZ2kuanAi''@;'; put 'put ''LCJ0b2NoaWdpLnRvY2hpZ2kuanAiLCJ0c3VnYS50b2NoaWdpLmpwIiwidWppaWUudG9jaGlnaS5qcCIsInV0c3Vub21peWEudG9jaGlnaS5qcCIsInlhaXRhLnRvY2hpZ2kuanAiLCJhaXp1bWkudG9rdXNoaW1hLmpwIiwiYW5hbi50b2t1c2hpbWEuanAiLCJpY2hpYmEudG9rdXNoaW1hLmpw''@;'; put 'put ''IiwiaXRhbm8udG9rdXNoaW1hLmpwIiwia2FpbmFuLnRva3VzaGltYS5qcCIsImtvbWF0c3VzaGltYS50b2t1c2hpbWEuanAiLCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcCIsIm1pbWEudG9rdXNoaW1hLmpwIiwibWluYW1pLnRva3VzaGltYS5qcCIsIm1peW9zaGkudG9rdXNoaW1hLmpwIiwi''@;'; put 'put ''bXVnaS50b2t1c2hpbWEuanAiLCJuYWthZ2F3YS50b2t1c2hpbWEuanAiLCJuYXJ1dG8udG9rdXNoaW1hLmpwIiwic2FuYWdvY2hpLnRva3VzaGltYS5qcCIsInNoaXNoaWt1aS50b2t1c2hpbWEuanAiLCJ0b2t1c2hpbWEudG9rdXNoaW1hLmpwIiwid2FqaWtpLnRva3VzaGltYS5qcCIsImFk''@;'; put 'put ''YWNoaS50b2t5by5qcCIsImFraXJ1bm8udG9reW8uanAiLCJha2lzaGltYS50b2t5by5qcCIsImFvZ2FzaGltYS50b2t5by5qcCIsImFyYWthd2EudG9reW8uanAiLCJidW5reW8udG9reW8uanAiLCJjaGl5b2RhLnRva3lvLmpwIiwiY2hvZnUudG9reW8uanAiLCJjaHVvLnRva3lvLmpwIiwi''@;'; put 'put ''ZWRvZ2F3YS50b2t5by5qcCIsImZ1Y2h1LnRva3lvLmpwIiwiZnVzc2EudG9reW8uanAiLCJoYWNoaWpvLnRva3lvLmpwIiwiaGFjaGlvamkudG9reW8uanAiLCJoYW11cmEudG9reW8uanAiLCJoaWdhc2hpa3VydW1lLnRva3lvLmpwIiwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwIiwiaGln''@;'; put 'put ''YXNoaXlhbWF0by50b2t5by5qcCIsImhpbm8udG9reW8uanAiLCJoaW5vZGUudG9reW8uanAiLCJoaW5vaGFyYS50b2t5by5qcCIsImluYWdpLnRva3lvLmpwIiwiaXRhYmFzaGkudG9reW8uanAiLCJrYXRzdXNoaWthLnRva3lvLmpwIiwia2l0YS50b2t5by5qcCIsImtpeW9zZS50b2t5by5q''@;'; put 'put ''cCIsImtvZGFpcmEudG9reW8uanAiLCJrb2dhbmVpLnRva3lvLmpwIiwia29rdWJ1bmppLnRva3lvLmpwIiwia29tYWUudG9reW8uanAiLCJrb3RvLnRva3lvLmpwIiwia291enVzaGltYS50b2t5by5qcCIsImt1bml0YWNoaS50b2t5by5qcCIsIm1hY2hpZGEudG9reW8uanAiLCJtZWd1cm8u''@;'; put 'put ''dG9reW8uanAiLCJtaW5hdG8udG9reW8uanAiLCJtaXRha2EudG9reW8uanAiLCJtaXp1aG8udG9reW8uanAiLCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanAiLCJtdXNhc2hpbm8udG9reW8uanAiLCJuYWthbm8udG9reW8uanAiLCJuZXJpbWEudG9reW8uanAiLCJvZ2FzYXdhcmEudG9reW8u''@;'; put 'put ''anAiLCJva3V0YW1hLnRva3lvLmpwIiwib21lLnRva3lvLmpwIiwib3NoaW1hLnRva3lvLmpwIiwib3RhLnRva3lvLmpwIiwic2V0YWdheWEudG9reW8uanAiLCJzaGlidXlhLnRva3lvLmpwIiwic2hpbmFnYXdhLnRva3lvLmpwIiwic2hpbmp1a3UudG9reW8uanAiLCJzdWdpbmFtaS50b2t5''@;'; put 'put ''by5qcCIsInN1bWlkYS50b2t5by5qcCIsInRhY2hpa2F3YS50b2t5by5qcCIsInRhaXRvLnRva3lvLmpwIiwidGFtYS50b2t5by5qcCIsInRvc2hpbWEudG9reW8uanAiLCJjaGl6dS50b3R0b3JpLmpwIiwiaGluby50b3R0b3JpLmpwIiwia2F3YWhhcmEudG90dG9yaS5qcCIsImtvZ2UudG90''@;'; put 'put ''dG9yaS5qcCIsImtvdG91cmEudG90dG9yaS5qcCIsIm1pc2FzYS50b3R0b3JpLmpwIiwibmFuYnUudG90dG9yaS5qcCIsIm5pY2hpbmFuLnRvdHRvcmkuanAiLCJzYWthaW1pbmF0by50b3R0b3JpLmpwIiwidG90dG9yaS50b3R0b3JpLmpwIiwid2FrYXNhLnRvdHRvcmkuanAiLCJ5YXp1LnRv''@;'; put 'put ''dHRvcmkuanAiLCJ5b25hZ28udG90dG9yaS5qcCIsImFzYWhpLnRveWFtYS5qcCIsImZ1Y2h1LnRveWFtYS5qcCIsImZ1a3VtaXRzdS50b3lhbWEuanAiLCJmdW5haGFzaGkudG95YW1hLmpwIiwiaGltaS50b3lhbWEuanAiLCJpbWl6dS50b3lhbWEuanAiLCJpbmFtaS50b3lhbWEuanAiLCJq''@;'; put 'put ''b2hhbmEudG95YW1hLmpwIiwia2FtaWljaGkudG95YW1hLmpwIiwia3Vyb2JlLnRveWFtYS5qcCIsIm5ha2FuaWlrYXdhLnRveWFtYS5qcCIsIm5hbWVyaWthd2EudG95YW1hLmpwIiwibmFudG8udG95YW1hLmpwIiwibnl1emVuLnRveWFtYS5qcCIsIm95YWJlLnRveWFtYS5qcCIsInRhaXJh''@;'; put 'put ''LnRveWFtYS5qcCIsInRha2Fva2EudG95YW1hLmpwIiwidGF0ZXlhbWEudG95YW1hLmpwIiwidG9nYS50b3lhbWEuanAiLCJ0b25hbWkudG95YW1hLmpwIiwidG95YW1hLnRveWFtYS5qcCIsInVuYXp1a2kudG95YW1hLmpwIiwidW96dS50b3lhbWEuanAiLCJ5YW1hZGEudG95YW1hLmpwIiwi''@;'; put 'put ''YXJpZGEud2FrYXlhbWEuanAiLCJhcmlkYWdhd2Eud2FrYXlhbWEuanAiLCJnb2JvLndha2F5YW1hLmpwIiwiaGFzaGltb3RvLndha2F5YW1hLmpwIiwiaGlkYWthLndha2F5YW1hLmpwIiwiaGlyb2dhd2Eud2FrYXlhbWEuanAiLCJpbmFtaS53YWtheWFtYS5qcCIsIml3YWRlLndha2F5YW1h''@;'; put 'put ''LmpwIiwia2FpbmFuLndha2F5YW1hLmpwIiwia2FtaXRvbmRhLndha2F5YW1hLmpwIiwia2F0c3VyYWdpLndha2F5YW1hLmpwIiwia2ltaW5vLndha2F5YW1hLmpwIiwia2lub2thd2Eud2FrYXlhbWEuanAiLCJraXRheWFtYS53YWtheWFtYS5qcCIsImtveWEud2FrYXlhbWEuanAiLCJrb3ph''@;'; put 'put ''Lndha2F5YW1hLmpwIiwia296YWdhd2Eud2FrYXlhbWEuanAiLCJrdWRveWFtYS53YWtheWFtYS5qcCIsImt1c2hpbW90by53YWtheWFtYS5qcCIsIm1paGFtYS53YWtheWFtYS5qcCIsIm1pc2F0by53YWtheWFtYS5qcCIsIm5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanAiLCJzaGluZ3Uud2Fr''@;'; put 'put ''YXlhbWEuanAiLCJzaGlyYWhhbWEud2FrYXlhbWEuanAiLCJ0YWlqaS53YWtheWFtYS5qcCIsInRhbmFiZS53YWtheWFtYS5qcCIsIndha2F5YW1hLndha2F5YW1hLmpwIiwieXVhc2Eud2FrYXlhbWEuanAiLCJ5dXJhLndha2F5YW1hLmpwIiwiYXNhaGkueWFtYWdhdGEuanAiLCJmdW5hZ2F0''@;'; put 'put ''YS55YW1hZ2F0YS5qcCIsImhpZ2FzaGluZS55YW1hZ2F0YS5qcCIsImlpZGUueWFtYWdhdGEuanAiLCJrYWhva3UueWFtYWdhdGEuanAiLCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwIiwia2FuZXlhbWEueWFtYWdhdGEuanAiLCJrYXdhbmlzaGkueWFtYWdhdGEuanAiLCJtYW11cm9nYXdhLnlh''@;'; put 'put ''bWFnYXRhLmpwIiwibWlrYXdhLnlhbWFnYXRhLmpwIiwibXVyYXlhbWEueWFtYWdhdGEuanAiLCJuYWdhaS55YW1hZ2F0YS5qcCIsIm5ha2F5YW1hLnlhbWFnYXRhLmpwIiwibmFueW8ueWFtYWdhdGEuanAiLCJuaXNoaWthd2EueWFtYWdhdGEuanAiLCJvYmFuYXphd2EueWFtYWdhdGEuanAi''@;'; put 'put ''LCJvZS55YW1hZ2F0YS5qcCIsIm9ndW5pLnlhbWFnYXRhLmpwIiwib2hrdXJhLnlhbWFnYXRhLmpwIiwib2lzaGlkYS55YW1hZ2F0YS5qcCIsInNhZ2FlLnlhbWFnYXRhLmpwIiwic2FrYXRhLnlhbWFnYXRhLmpwIiwic2FrZWdhd2EueWFtYWdhdGEuanAiLCJzaGluam8ueWFtYWdhdGEuanAi''@;'; put 'put ''LCJzaGlyYXRha2EueWFtYWdhdGEuanAiLCJzaG9uYWkueWFtYWdhdGEuanAiLCJ0YWthaGF0YS55YW1hZ2F0YS5qcCIsInRlbmRvLnlhbWFnYXRhLmpwIiwidG96YXdhLnlhbWFnYXRhLmpwIiwidHN1cnVva2EueWFtYWdhdGEuanAiLCJ5YW1hZ2F0YS55YW1hZ2F0YS5qcCIsInlhbWFub2Jl''@;'; put 'put ''LnlhbWFnYXRhLmpwIiwieW9uZXphd2EueWFtYWdhdGEuanAiLCJ5dXphLnlhbWFnYXRhLmpwIiwiYWJ1LnlhbWFndWNoaS5qcCIsImhhZ2kueWFtYWd1Y2hpLmpwIiwiaGlrYXJpLnlhbWFndWNoaS5qcCIsImhvZnUueWFtYWd1Y2hpLmpwIiwiaXdha3VuaS55YW1hZ3VjaGkuanAiLCJrdWRh''@;'; put 'put ''bWF0c3UueWFtYWd1Y2hpLmpwIiwibWl0b3UueWFtYWd1Y2hpLmpwIiwibmFnYXRvLnlhbWFndWNoaS5qcCIsIm9zaGltYS55YW1hZ3VjaGkuanAiLCJzaGltb25vc2VraS55YW1hZ3VjaGkuanAiLCJzaHVuYW4ueWFtYWd1Y2hpLmpwIiwidGFidXNlLnlhbWFndWNoaS5qcCIsInRva3V5YW1h''@;'; put 'put ''LnlhbWFndWNoaS5qcCIsInRveW90YS55YW1hZ3VjaGkuanAiLCJ1YmUueWFtYWd1Y2hpLmpwIiwieXV1LnlhbWFndWNoaS5qcCIsImNodW8ueWFtYW5hc2hpLmpwIiwiZG9zaGkueWFtYW5hc2hpLmpwIiwiZnVlZnVraS55YW1hbmFzaGkuanAiLCJmdWppa2F3YS55YW1hbmFzaGkuanAiLCJm''@;'; put 'put ''dWppa2F3YWd1Y2hpa28ueWFtYW5hc2hpLmpwIiwiZnVqaXlvc2hpZGEueWFtYW5hc2hpLmpwIiwiaGF5YWthd2EueWFtYW5hc2hpLmpwIiwiaG9rdXRvLnlhbWFuYXNoaS5qcCIsImljaGlrYXdhbWlzYXRvLnlhbWFuYXNoaS5qcCIsImthaS55YW1hbmFzaGkuanAiLCJrb2Z1LnlhbWFuYXNo''@;'; put 'put ''aS5qcCIsImtvc2h1LnlhbWFuYXNoaS5qcCIsImtvc3VnZS55YW1hbmFzaGkuanAiLCJtaW5hbWktYWxwcy55YW1hbmFzaGkuanAiLCJtaW5vYnUueWFtYW5hc2hpLmpwIiwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcCIsIm5hbmJ1LnlhbWFuYXNoaS5qcCIsIm5hcnVzYXdhLnlhbWFuYXNoaS5q''@;'; put 'put ''cCIsIm5pcmFzYWtpLnlhbWFuYXNoaS5qcCIsIm5pc2hpa2F0c3VyYS55YW1hbmFzaGkuanAiLCJvc2hpbm8ueWFtYW5hc2hpLmpwIiwib3RzdWtpLnlhbWFuYXNoaS5qcCIsInNob3dhLnlhbWFuYXNoaS5qcCIsInRhYmF5YW1hLnlhbWFuYXNoaS5qcCIsInRzdXJ1LnlhbWFuYXNoaS5qcCIs''@;'; put 'put ''InVlbm9oYXJhLnlhbWFuYXNoaS5qcCIsInlhbWFuYWtha28ueWFtYW5hc2hpLmpwIiwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcCIsImtlIiwiYWMua2UiLCJjby5rZSIsImdvLmtlIiwiaW5mby5rZSIsIm1lLmtlIiwibW9iaS5rZSIsIm5lLmtlIiwib3Iua2UiLCJzYy5rZSIsImtnIiwiY29t''@;'; put 'put ''LmtnIiwiZWR1LmtnIiwiZ292LmtnIiwibWlsLmtnIiwibmV0LmtnIiwib3JnLmtnIiwiKi5raCIsImtpIiwiYml6LmtpIiwiY29tLmtpIiwiZWR1LmtpIiwiZ292LmtpIiwiaW5mby5raSIsIm5ldC5raSIsIm9yZy5raSIsImttIiwiYXNzLmttIiwiY29tLmttIiwiZWR1LmttIiwiZ292Lmtt''@;'; put 'put ''IiwibWlsLmttIiwibm9tLmttIiwib3JnLmttIiwicHJkLmttIiwidG0ua20iLCJhc3NvLmttIiwiY29vcC5rbSIsImdvdXYua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInByZXNzZS5rbSIsInZldGVyaW5haXJlLmttIiwia24iLCJlZHUua24iLCJn''@;'; put 'put ''b3Yua24iLCJuZXQua24iLCJvcmcua24iLCJrcCIsImNvbS5rcCIsImVkdS5rcCIsImdvdi5rcCIsIm9yZy5rcCIsInJlcC5rcCIsInRyYS5rcCIsImtyIiwiYWMua3IiLCJjby5rciIsImVzLmtyIiwiZ28ua3IiLCJocy5rciIsImtnLmtyIiwibWlsLmtyIiwibXMua3IiLCJuZS5rciIsIm9y''@;'; put 'put ''LmtyIiwicGUua3IiLCJyZS5rciIsInNjLmtyIiwiYnVzYW4ua3IiLCJjaHVuZ2J1ay5rciIsImNodW5nbmFtLmtyIiwiZGFlZ3Uua3IiLCJkYWVqZW9uLmtyIiwiZ2FuZ3dvbi5rciIsImd3YW5nanUua3IiLCJneWVvbmdidWsua3IiLCJneWVvbmdnaS5rciIsImd5ZW9uZ25hbS5rciIsImlu''@;'; put 'put ''Y2hlb24ua3IiLCJqZWp1LmtyIiwiamVvbmJ1ay5rciIsImplb25uYW0ua3IiLCJzZW91bC5rciIsInVsc2FuLmtyIiwia3ciLCJjb20ua3ciLCJlZHUua3ciLCJlbWIua3ciLCJnb3Yua3ciLCJpbmQua3ciLCJuZXQua3ciLCJvcmcua3ciLCJreSIsImNvbS5reSIsImVkdS5reSIsIm5ldC5r''@;'; put 'put ''eSIsIm9yZy5reSIsImt6IiwiY29tLmt6IiwiZWR1Lmt6IiwiZ292Lmt6IiwibWlsLmt6IiwibmV0Lmt6Iiwib3JnLmt6IiwibGEiLCJjb20ubGEiLCJlZHUubGEiLCJnb3YubGEiLCJpbmZvLmxhIiwiaW50LmxhIiwibmV0LmxhIiwib3JnLmxhIiwicGVyLmxhIiwibGIiLCJjb20ubGIiLCJl''@;'; put 'put ''ZHUubGIiLCJnb3YubGIiLCJuZXQubGIiLCJvcmcubGIiLCJsYyIsImNvLmxjIiwiY29tLmxjIiwiZWR1LmxjIiwiZ292LmxjIiwibmV0LmxjIiwib3JnLmxjIiwibGkiLCJsayIsImFjLmxrIiwiYXNzbi5sayIsImNvbS5sayIsImVkdS5sayIsImdvdi5sayIsImdycC5sayIsImhvdGVsLmxr''@;'; put 'put ''IiwiaW50LmxrIiwibHRkLmxrIiwibmV0LmxrIiwibmdvLmxrIiwib3JnLmxrIiwic2NoLmxrIiwic29jLmxrIiwid2ViLmxrIiwibHIiLCJjb20ubHIiLCJlZHUubHIiLCJnb3YubHIiLCJuZXQubHIiLCJvcmcubHIiLCJscyIsImFjLmxzIiwiYml6LmxzIiwiY28ubHMiLCJlZHUubHMiLCJn''@;'; put 'put ''b3YubHMiLCJpbmZvLmxzIiwibmV0LmxzIiwib3JnLmxzIiwic2MubHMiLCJsdCIsImdvdi5sdCIsImx1IiwibHYiLCJhc24ubHYiLCJjb20ubHYiLCJjb25mLmx2IiwiZWR1Lmx2IiwiZ292Lmx2IiwiaWQubHYiLCJtaWwubHYiLCJuZXQubHYiLCJvcmcubHYiLCJseSIsImNvbS5seSIsImVk''@;'; put 'put ''dS5seSIsImdvdi5seSIsImlkLmx5IiwibWVkLmx5IiwibmV0Lmx5Iiwib3JnLmx5IiwicGxjLmx5Iiwic2NoLmx5IiwibWEiLCJhYy5tYSIsImNvLm1hIiwiZ292Lm1hIiwibmV0Lm1hIiwib3JnLm1hIiwicHJlc3MubWEiLCJtYyIsImFzc28ubWMiLCJ0bS5tYyIsIm1kIiwibWUiLCJhYy5t''@;'; put 'put ''ZSIsImNvLm1lIiwiZWR1Lm1lIiwiZ292Lm1lIiwiaXRzLm1lIiwibmV0Lm1lIiwib3JnLm1lIiwicHJpdi5tZSIsIm1nIiwiY28ubWciLCJjb20ubWciLCJlZHUubWciLCJnb3YubWciLCJtaWwubWciLCJub20ubWciLCJvcmcubWciLCJwcmQubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1r''@;'; put 'put ''IiwiZWR1Lm1rIiwiZ292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm5ldC5tayIsIm9yZy5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImVkdS5tbiIsImdvdi5tbiIsIm9yZy5t''@;'; put 'put ''biIsIm1vIiwiY29tLm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibmV0Lm1vIiwib3JnLm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQi''@;'; put 'put ''LCJvcmcubXQiLCJtdSIsImFjLm11IiwiY28ubXUiLCJjb20ubXUiLCJnb3YubXUiLCJuZXQubXUiLCJvci5tdSIsIm9yZy5tdSIsIm11c2V1bSIsIm12IiwiYWVyby5tdiIsImJpei5tdiIsImNvbS5tdiIsImNvb3AubXYiLCJlZHUubXYiLCJnb3YubXYiLCJpbmZvLm12IiwiaW50Lm12Iiwi''@;'; put 'put ''bWlsLm12IiwibXVzZXVtLm12IiwibmFtZS5tdiIsIm5ldC5tdiIsIm9yZy5tdiIsInByby5tdiIsIm13IiwiYWMubXciLCJiaXoubXciLCJjby5tdyIsImNvbS5tdyIsImNvb3AubXciLCJlZHUubXciLCJnb3YubXciLCJpbnQubXciLCJuZXQubXciLCJvcmcubXciLCJteCIsImNvbS5teCIs''@;'; put 'put ''ImVkdS5teCIsImdvYi5teCIsIm5ldC5teCIsIm9yZy5teCIsIm15IiwiYml6Lm15IiwiY29tLm15IiwiZWR1Lm15IiwiZ292Lm15IiwibWlsLm15IiwibmFtZS5teSIsIm5ldC5teSIsIm9yZy5teSIsIm16IiwiYWMubXoiLCJhZHYubXoiLCJjby5teiIsImVkdS5teiIsImdvdi5teiIsIm1p''@;'; put 'put ''bC5teiIsIm5ldC5teiIsIm9yZy5teiIsIm5hIiwiYWx0Lm5hIiwiY28ubmEiLCJjb20ubmEiLCJnb3YubmEiLCJuZXQubmEiLCJvcmcubmEiLCJuYW1lIiwibmMiLCJhc3NvLm5jIiwibm9tLm5jIiwibmUiLCJuZXQiLCJuZiIsImFydHMubmYiLCJjb20ubmYiLCJmaXJtLm5mIiwiaW5mby5u''@;'; put 'put ''ZiIsIm5ldC5uZiIsIm90aGVyLm5mIiwicGVyLm5mIiwicmVjLm5mIiwic3RvcmUubmYiLCJ3ZWIubmYiLCJuZyIsImNvbS5uZyIsImVkdS5uZyIsImdvdi5uZyIsImkubmciLCJtaWwubmciLCJtb2JpLm5nIiwibmFtZS5uZyIsIm5ldC5uZyIsIm9yZy5uZyIsInNjaC5uZyIsIm5pIiwiYWMu''@;'; put 'put ''bmkiLCJiaXoubmkiLCJjby5uaSIsImNvbS5uaSIsImVkdS5uaSIsImdvYi5uaSIsImluLm5pIiwiaW5mby5uaSIsImludC5uaSIsIm1pbC5uaSIsIm5ldC5uaSIsIm5vbS5uaSIsIm9yZy5uaSIsIndlYi5uaSIsIm5sIiwibm8iLCJmaHMubm8iLCJmb2xrZWJpYmwubm8iLCJmeWxrZXNiaWJs''@;'; put 'put ''Lm5vIiwiaWRyZXR0Lm5vIiwibXVzZXVtLm5vIiwicHJpdi5ubyIsInZncy5ubyIsImRlcC5ubyIsImhlcmFkLm5vIiwia29tbXVuZS5ubyIsIm1pbC5ubyIsInN0YXQubm8iLCJhYS5ubyIsImFoLm5vIiwiYnUubm8iLCJmbS5ubyIsImhsLm5vIiwiaG0ubm8iLCJqYW4tbWF5ZW4ubm8iLCJt''@;'; put 'put ''ci5ubyIsIm5sLm5vIiwibnQubm8iLCJvZi5ubyIsIm9sLm5vIiwib3Nsby5ubyIsInJsLm5vIiwic2Yubm8iLCJzdC5ubyIsInN2YWxiYXJkLm5vIiwidG0ubm8iLCJ0ci5ubyIsInZhLm5vIiwidmYubm8iLCJncy5hYS5ubyIsImdzLmFoLm5vIiwiZ3MuYnUubm8iLCJncy5mbS5ubyIsImdz''@;'; put 'put ''LmhsLm5vIiwiZ3MuaG0ubm8iLCJncy5qYW4tbWF5ZW4ubm8iLCJncy5tci5ubyIsImdzLm5sLm5vIiwiZ3MubnQubm8iLCJncy5vZi5ubyIsImdzLm9sLm5vIiwiZ3Mub3Nsby5ubyIsImdzLnJsLm5vIiwiZ3Muc2Yubm8iLCJncy5zdC5ubyIsImdzLnN2YWxiYXJkLm5vIiwiZ3MudG0ubm8i''@;'; put 'put ''LCJncy50ci5ubyIsImdzLnZhLm5vIiwiZ3MudmYubm8iLCJha3JlaGFtbi5ubyIsIlx4ZTVrcmVoYW1uLm5vIiwiYWxnYXJkLm5vIiwiXHhlNWxnXHhlNXJkLm5vIiwiYXJuYS5ubyIsImJyb25ub3lzdW5kLm5vIiwiYnJceGY4bm5ceGY4eXN1bmQubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5''@;'; put 'put ''bmUubm8iLCJkcm9iYWsubm8iLCJkclx4ZjhiYWsubm8iLCJlZ2Vyc3VuZC5ubyIsImZldHN1bmQubm8iLCJmbG9yby5ubyIsImZsb3JceGY4Lm5vIiwiZnJlZHJpa3N0YWQubm8iLCJob2trc3VuZC5ubyIsImhvbmVmb3NzLm5vIiwiaFx4ZjhuZWZvc3Mubm8iLCJqZXNzaGVpbS5ubyIsImpv''@;'; put 'put ''cnBlbGFuZC5ubyIsImpceGY4cnBlbGFuZC5ubyIsImtpcmtlbmVzLm5vIiwia29wZXJ2aWsubm8iLCJrcm9rc3RhZGVsdmEubm8iLCJsYW5nZXZhZy5ubyIsImxhbmdldlx4ZTVnLm5vIiwibGVpcnZpay5ubyIsIm1qb25kYWxlbi5ubyIsIm1qXHhmOG5kYWxlbi5ubyIsIm1vLWktcmFuYS5u''@;'; put 'put ''byIsIm1vc2pvZW4ubm8iLCJtb3NqXHhmOGVuLm5vIiwibmVzb2RkdGFuZ2VuLm5vIiwib3JrYW5nZXIubm8iLCJvc295cm8ubm8iLCJvc1x4Zjh5cm8ubm8iLCJyYWhvbHQubm8iLCJyXHhlNWhvbHQubm8iLCJzYW5kbmVzc2pvZW4ubm8iLCJzYW5kbmVzc2pceGY4ZW4ubm8iLCJza2Vkc21v''@;'; put 'put ''a29yc2V0Lm5vIiwic2xhdHR1bS5ubyIsInNwamVsa2F2aWsubm8iLCJzdGF0aGVsbGUubm8iLCJzdGF2ZXJuLm5vIiwic3Rqb3JkYWxzaGFsc2VuLm5vIiwic3RqXHhmOHJkYWxzaGFsc2VuLm5vIiwidGFuYW5nZXIubm8iLCJ0cmFuYnkubm8iLCJ2b3NzZXZhbmdlbi5ubyIsImFhcmJvcnRl''@;'; put 'put ''Lm5vIiwiYWVqcmllLm5vIiwiYWZqb3JkLm5vIiwiXHhlNWZqb3JkLm5vIiwiYWdkZW5lcy5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsImFrbm9sdW9rdGEubm8iLCJceGUxa1x1MDE0Ym9sdW9rdGEubm8iLCJhbC5ubyIsIlx4ZTVsLm5vIiwiYWxhaGVhZGp1Lm5vIiwiXHhlMWxhaGVhZGp1Lm5v''@;'; put 'put ''IiwiYWxlc3VuZC5ubyIsIlx4ZTVsZXN1bmQubm8iLCJhbHN0YWhhdWcubm8iLCJhbHRhLm5vIiwiXHhlMWx0XHhlMS5ubyIsImFsdmRhbC5ubyIsImFtbGkubm8iLCJceGU1bWxpLm5vIiwiYW1vdC5ubyIsIlx4ZTVtb3Qubm8iLCJhbmRhc3VvbG8ubm8iLCJhbmRlYnUubm8iLCJhbmRveS5u''@;'; put 'put ''byIsImFuZFx4Zjh5Lm5vIiwiYXJkYWwubm8iLCJceGU1cmRhbC5ubyIsImFyZW1hcmsubm8iLCJhcmVuZGFsLm5vIiwiXHhlNXMubm8iLCJhc2VyYWwubm8iLCJceGU1c2VyYWwubm8iLCJhc2tlci5ubyIsImFza2ltLm5vIiwiYXNrb3kubm8iLCJhc2tceGY4eS5ubyIsImFza3ZvbGwubm8i''@;'; put 'put ''LCJhc25lcy5ubyIsIlx4ZTVzbmVzLm5vIiwiYXVkbmVkYWxuLm5vIiwiYXVrcmEubm8iLCJhdXJlLm5vIiwiYXVybGFuZC5ubyIsImF1cnNrb2ctaG9sYW5kLm5vIiwiYXVyc2tvZy1oXHhmOGxhbmQubm8iLCJhdXN0ZXZvbGwubm8iLCJhdXN0cmhlaW0ubm8iLCJhdmVyb3kubm8iLCJhdmVy''@;'; put 'put ''XHhmOHkubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYlx4ZTZydW0ubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiYmFoY2NhdnVvdG5hLm5vIiwiYlx4ZTFoY2NhdnVvdG5hLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5v''@;'; put 'put ''IiwiYmFqZGRhci5ubyIsImJceGUxamRkYXIubm8iLCJiYWxhdC5ubyIsImJceGUxbFx4ZTF0Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbHNmam9yZC5ubyIsImJhbWJsZS5ubyIsImJhcmR1Lm5vIiwiYmFydW0ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpv''@;'; put 'put ''cmQubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtpLm5vIiwiYmVhcmR1Lm5vIiwiYmVpYXJuLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiaWV2YXQubm8iLCJiaWV2XHhlMXQubm8iLCJiaW5kYWwubm8iLCJiaXJr''@;'; put 'put ''ZW5lcy5ubyIsImJqYXJrb3kubm8iLCJiamFya1x4Zjh5Lm5vIiwiYmplcmtyZWltLm5vIiwiYmp1Z24ubm8iLCJib2RvLm5vIiwiYm9kXHhmOC5ubyIsImJva24ubm8iLCJib21sby5ubyIsImJceGY4bWxvLm5vIiwiYnJlbWFuZ2VyLm5vIiwiYnJvbm5veS5ubyIsImJyXHhmOG5uXHhmOHku''@;'; put 'put ''bm8iLCJidWRlamp1Lm5vIiwibmVzLmJ1c2tlcnVkLm5vIiwiYnlnbGFuZC5ubyIsImJ5a2xlLm5vIiwiY2FoY2VzdW9sby5ubyIsIlx1MDEwZFx4ZTFoY2VzdW9sby5ubyIsImRhdnZlbmphcmdhLm5vIiwiZGF2dmVualx4ZTFyZ2Eubm8iLCJkYXZ2ZXNpaWRhLm5vIiwiZGVhdG51Lm5vIiwi''@;'; put 'put ''ZGllbGRkYW51b3JyaS5ubyIsImRpdnRhc3Z1b2RuYS5ubyIsImRpdnR0YXN2dW90bmEubm8iLCJkb25uYS5ubyIsImRceGY4bm5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImVpZC5ubyIsImVpZGZqb3JkLm5v''@;'; put 'put ''IiwiZWlkc2Jlcmcubm8iLCJlaWRza29nLm5vIiwiZWlkc3ZvbGwubm8iLCJlaWdlcnN1bmQubm8iLCJlbHZlcnVtLm5vIiwiZW5lYmFray5ubyIsImVuZ2VyZGFsLm5vIiwiZXRuZS5ubyIsImV0bmVkYWwubm8iLCJldmVuYXNzaS5ubyIsImV2ZW5ceGUxXHUwMTYxXHUwMTYxaS5ubyIsImV2''@;'; put 'put ''ZW5lcy5ubyIsImV2amUtb2ctaG9ybm5lcy5ubyIsImZhcnN1bmQubm8iLCJmYXVza2Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxhLm5vIiwiZmxceGU1Lm5vIiwiZmxha3N0''@;'; put 'put ''YWQubm8iLCJmbGF0YW5nZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmb2xsZGFsLm5vIiwiZm9yZGUubm8iLCJmXHhmOHJkZS5ubyIsImZvcnNhbmQubm8iLCJmb3NuZXMubm8iLCJmclx4ZTZuYS5ubyIsImZyYW5hLm5vIiwiZnJlaS5ubyIsImZy''@;'; put 'put ''b2duLm5vIiwiZnJvbGFuZC5ubyIsImZyb3N0YS5ubyIsImZyb3lhLm5vIiwiZnJceGY4eWEubm8iLCJmdW9pc2t1Lm5vIiwiZnVvc3Nrby5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImdhaXZ1b3RuYS5ubyIsImdceGUxaXZ1b3RuYS5ubyIsImdhbHNhLm5vIiwiZ1x4ZTFsc1x4ZTEu''@;'; put 'put ''bm8iLCJnYW12aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpZWh0YXZ1b2F0bmEubm8iLCJnaWxkZXNrYWwubm8iLCJnaWxkZXNrXHhlNWwubm8iLCJnaXNrZS5ubyIsImdqZW1uZXMubm8iLCJnamVyZHJ1''@;'; put 'put ''bS5ubyIsImdqZXJzdGFkLm5vIiwiZ2plc2RhbC5ubyIsImdqb3Zpay5ubyIsImdqXHhmOHZpay5ubyIsImdsb3BwZW4ubm8iLCJnb2wubm8iLCJncmFuLm5vIiwiZ3JhbmUubm8iLCJncmFudmluLm5vIiwiZ3JhdGFuZ2VuLm5vIiwiZ3JpbXN0YWQubm8iLCJncm9uZy5ubyIsImdydWUubm8i''@;'; put 'put ''LCJndWxlbi5ubyIsImd1b3ZkYWdlYWlkbnUubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwiaGFibWVyLm5vIiwiaFx4ZTFibWVyLm5vIiwiaGFkc2VsLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhhZ2Vib3N0YWQubm8iLCJoYWxkZW4ubm8iLCJoYWxzYS5ubyIsImhhbWFyLm5vIiwiaGFtYXJv''@;'; put 'put ''eS5ubyIsImhhbW1hcmZlYXN0YS5ubyIsImhceGUxbW1ceGUxcmZlYXN0YS5ubyIsImhhbW1lcmZlc3Qubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYXJhbS5ubyIsImhhcmVpZC5ubyIsImhhcnN0YWQubm8iLCJoYXN2aWsubm8iLCJoYXR0ZmplbGxkYWwubm8iLCJoYXVnZXN1''@;'; put 'put ''bmQubm8iLCJvcy5oZWRtYXJrLm5vIiwidmFsZXIuaGVkbWFyay5ubyIsInZceGU1bGVyLmhlZG1hcmsubm8iLCJoZW1uZS5ubyIsImhlbW5lcy5ubyIsImhlbXNlZGFsLm5vIiwiaGl0cmEubm8iLCJoamFydGRhbC5ubyIsImhqZWxtZWxhbmQubm8iLCJob2JvbC5ubyIsImhvYlx4ZjhsLm5v''@;'; put 'put ''IiwiaG9mLm5vIiwiaG9sLm5vIiwiaG9sZS5ubyIsImhvbG1lc3RyYW5kLm5vIiwiaG9sdGFsZW4ubm8iLCJob2x0XHhlNWxlbi5ubyIsIm9zLmhvcmRhbGFuZC5ubyIsImhvcm5pbmRhbC5ubyIsImhvcnRlbi5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQu''@;'; put 'put ''bm8iLCJoXHhmOHlsYW5kZXQubm8iLCJodXJkYWwubm8iLCJodXJ1bS5ubyIsImh2YWxlci5ubyIsImh5bGxlc3RhZC5ubyIsImliZXN0YWQubm8iLCJpbmRlcm95Lm5vIiwiaW5kZXJceGY4eS5ubyIsIml2ZWxhbmQubm8iLCJpdmd1Lm5vIiwiamV2bmFrZXIubm8iLCJqb2xzdGVyLm5vIiwi''@;'; put 'put ''alx4Zjhsc3Rlci5ubyIsImpvbmRhbC5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwia2FyYXNqb2hrYS5ubyIsImtceGUxclx4ZTFcdTAxNjFqb2hrYS5ubyIsImthcmFzam9rLm5vIiwia2FybHNveS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8u''@;'; put 'put ''bm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia2xlcHAubm8iLCJrb25nc2Jlcmcubm8iLCJrb25nc3Zpbmdlci5ubyIsImtyYWFuZ2hrZS5ubyIsImtyXHhlNWFuZ2hrZS5ubyIsImtyYWdlcm8ubm8iLCJrcmFnZXJceGY4Lm5vIiwia3Jpc3RpYW5zYW5kLm5vIiwia3Jpc3RpYW5zdW5k''@;'; put 'put ''Lm5vIiwia3JvZHNoZXJhZC5ubyIsImtyXHhmOGRzaGVyYWQubm8iLCJrdlx4ZTZmam9yZC5ubyIsImt2XHhlNm5hbmdlbi5ubyIsImt2YWZqb3JkLm5vIiwia3ZhbHN1bmQubm8iLCJrdmFtLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZpbmVzZGFsLm5vIiwia3Zpbm5oZXJhZC5ubyIsImt2aXRl''@;'; put 'put ''c2VpZC5ubyIsImt2aXRzb3kubm8iLCJrdml0c1x4Zjh5Lm5vIiwibGFha2VzdnVlbWllLm5vIiwibFx4ZTZyZGFsLm5vIiwibGFocHBpLm5vIiwibFx4ZTFocHBpLm5vIiwibGFyZGFsLm5vIiwibGFydmlrLm5vIiwibGF2YWdpcy5ubyIsImxhdmFuZ2VuLm5vIiwibGVhbmdhdmlpa2Eubm8i''@;'; put 'put ''LCJsZWFcdTAxNGJnYXZpaWthLm5vIiwibGViZXNieS5ubyIsImxlaWthbmdlci5ubyIsImxlaXJmam9yZC5ubyIsImxla2Eubm8iLCJsZWtzdmlrLm5vIiwibGVudmlrLm5vIiwibGVyZGFsLm5vIiwibGVzamEubm8iLCJsZXZhbmdlci5ubyIsImxpZXIubm8iLCJsaWVybmUubm8iLCJsaWxs''@;'; put 'put ''ZWhhbW1lci5ubyIsImxpbGxlc2FuZC5ubyIsImxpbmRhcy5ubyIsImxpbmRceGU1cy5ubyIsImxpbmRlc25lcy5ubyIsImxvYWJhdC5ubyIsImxvYWJceGUxdC5ubyIsImxvZGluZ2VuLm5vIiwibFx4ZjhkaW5nZW4ubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxvcmVuc2tvZy5ubyIsImxc''@;'; put 'put ''eGY4cmVuc2tvZy5ubyIsImxvdGVuLm5vIiwibFx4Zjh0ZW4ubm8iLCJsdW5kLm5vIiwibHVubmVyLm5vIiwibHVyb3kubm8iLCJsdXJceGY4eS5ubyIsImx1c3Rlci5ubyIsImx5bmdkYWwubm8iLCJseW5nZW4ubm8iLCJtYWxhdHZ1b3BtaS5ubyIsIm1ceGUxbGF0dnVvcG1pLm5vIiwibWFs''@;'; put 'put ''c2Vsdi5ubyIsIm1ceGU1bHNlbHYubm8iLCJtYWx2aWsubm8iLCJtYW5kYWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWFzb3kubm8iLCJtXHhlNXNceGY4eS5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwi''@;'; put 'put ''bWVsYW5kLm5vIiwibWVsZGFsLm5vIiwibWVsaHVzLm5vIiwibWVsb3kubm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibWlkc3VuZC5ubyIsIm1pZHRyZS1nYXVsZGFsLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtb2RhbGVuLm5vIiwi''@;'; put 'put ''bW9kdW0ubm8iLCJtb2xkZS5ubyIsImhlcm95Lm1vcmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1v''@;'; put 'put ''c3Zpay5ubyIsIm11b3NhdC5ubyIsIm11b3NceGUxdC5ubyIsIm5hYW1lc2pldnVlbWllLm5vIiwiblx4ZTVceGU1bWVzamV2dWVtaWUubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5hbWRhbHNlaWQubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFubmVzdGFkLm5vIiwibmFyb3ku''@;'; put 'put ''bm8iLCJuYXJ2aWlrYS5ubyIsIm5hcnZpay5ubyIsIm5hdXN0ZGFsLm5vIiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsIm5lZHJlLWVpa2VyLm5vIiwibmVzbmEubm8iLCJuZXNvZGRlbi5ubyIsIm5lc3NlYnkubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFs''@;'; put 'put ''Lm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJiby5ub3JkbGFuZC5ubyIsImJceGY4Lm5vcmRsYW5kLm5vIiwiaGVyb3kubm9yZGxhbmQubm8iLCJoZXJceGY4eS5ub3JkbGFuZC5ubyIsIm5vcmRy''@;'; put 'put ''ZS1sYW5kLm5vIiwibm9yZHJlaXNhLm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibm90dGVyb3kubm8iLCJuXHhmOHR0ZXJceGY4eS5ubyIsIm9kZGEubm8iLCJva3NuZXMubm8iLCJceGY4a3NuZXMubm8iLCJvbWFzdnVvdG5hLm5vIiwib3BwZGFsLm5vIiwib3BwZWdh''@;'; put 'put ''cmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvc2VuLm5vIiwib3N0ZXJveS5ubyIsIm9zdGVyXHhmOHkubm8iLCJ2YWxlci5vc3Rm''@;'; put 'put ''b2xkLm5vIiwidlx4ZTVsZXIuXHhmOHN0Zm9sZC5ubyIsIm9zdHJlLXRvdGVuLm5vIiwiXHhmOHN0cmUtdG90ZW4ubm8iLCJvdmVyaGFsbGEubm8iLCJvdnJlLWVpa2VyLm5vIiwiXHhmOHZyZS1laWtlci5ubyIsIm95ZXIubm8iLCJceGY4eWVyLm5vIiwib3lnYXJkZW4ubm8iLCJceGY4eWdh''@;'; put 'put ''cmRlbi5ubyIsIm95c3RyZS1zbGlkcmUubm8iLCJceGY4eXN0cmUtc2xpZHJlLm5vIiwicG9yc2FuZ2VyLm5vIiwicG9yc2FuZ3Uubm8iLCJwb3JzXHhlMVx1MDE0Ymd1Lm5vIiwicG9yc2dydW5uLm5vIiwicmFkZS5ubyIsInJceGU1ZGUubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwi''@;'; put 'put ''clx4ZTZsaW5nZW4ubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwicmFpc2Eubm8iLCJyXHhlMWlzYS5ubyIsInJha2tlc3RhZC5ubyIsInJhbGluZ2VuLm5vIiwicmFuYS5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5u''@;'; put 'put ''ZWJ1Lm5vIiwicmVubmVzb3kubm8iLCJyZW5uZXNceGY4eS5ubyIsInJpbmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNvci5ubyIsInJpc1x4ZjhyLm5vIiwicmlzc2Eubm8iLCJyb2FuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5u''@;'; put 'put ''byIsInJvbGxhZy5ubyIsInJvbXNhLm5vIiwicm9tc2tvZy5ubyIsInJceGY4bXNrb2cubm8iLCJyb3Jvcy5ubyIsInJceGY4cm9zLm5vIiwicm9zdC5ubyIsInJceGY4c3Qubm8iLCJyb3lrZW4ubm8iLCJyXHhmOHlrZW4ubm8iLCJyb3lydmlrLm5vIiwiclx4Zjh5cnZpay5ubyIsInJ1b3Zh''@;'; put 'put ''dC5ubyIsInJ5Z2dlLm5vIiwic2FsYW5nZW4ubm8iLCJzYWxhdC5ubyIsInNceGUxbGF0Lm5vIiwic1x4ZTFsXHhlMXQubm8iLCJzYWx0ZGFsLm5vIiwic2FtbmFuZ2VyLm5vIiwic2FuZGVmam9yZC5ubyIsInNhbmRuZXMubm8iLCJzYW5kb3kubm8iLCJzYW5kXHhmOHkubm8iLCJzYXJwc2Jv''@;'; put 'put ''cmcubm8iLCJzYXVkYS5ubyIsInNhdWhlcmFkLm5vIiwic2VsLm5vIiwic2VsYnUubm8iLCJzZWxqZS5ubyIsInNlbGpvcmQubm8iLCJzaWVsbGFrLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwic2thbmxhbmQubm8i''@;'; put 'put ''LCJza1x4ZTVubGFuZC5ubyIsInNrYXVuLm5vIiwic2tlZHNtby5ubyIsInNraS5ubyIsInNraWVuLm5vIiwic2tpZXJ2YS5ubyIsInNraWVydlx4ZTEubm8iLCJza2lwdHZldC5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza2plcnZveS5ubyIsInNramVydlx4Zjh5Lm5vIiwic2tv''@;'; put 'put ''ZGplLm5vIiwic21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuYWFzZS5ubyIsInNuXHhlNWFzZS5ubyIsInNuYXNhLm5vIiwic25ceGU1c2Eubm8iLCJzbmlsbGZqb3JkLm5vIiwic25vYXNhLm5vIiwic29nbmRhbC5ubyIsInNvZ25lLm5vIiwic1x4ZjhnbmUubm8iLCJzb2tuZGFsLm5vIiwi''@;'; put 'put ''c29sYS5ubyIsInNvbHVuZC5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwi''@;'; put 'put ''c29yLW9kYWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsInNvcmZvbGQubm8iLCJzXHhmOHJmb2xkLm5vIiwic29ycmVpc2Eubm8iLCJzXHhmOHJyZWlzYS5ubyIsInNvcnRsYW5kLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5u''@;'; put 'put ''byIsInNweWRlYmVyZy5ubyIsInN0YW5nZS5ubyIsInN0YXZhbmdlci5ubyIsInN0ZWlnZW4ubm8iLCJzdGVpbmtqZXIubm8iLCJzdGpvcmRhbC5ubyIsInN0alx4ZjhyZGFsLm5vIiwic3Rva2tlLm5vIiwic3Rvci1lbHZkYWwubm8iLCJzdG9yZC5ubyIsInN0b3JkYWwubm8iLCJzdG9yZmpv''@;'; put 'put ''cmQubm8iLCJzdHJhbmQubm8iLCJzdHJhbmRhLm5vIiwic3RyeW4ubm8iLCJzdWxhLm5vIiwic3VsZGFsLm5vIiwic3VuZC5ubyIsInN1bm5kYWwubm8iLCJzdXJuYWRhbC5ubyIsInN2ZWlvLm5vIiwic3ZlbHZpay5ubyIsInN5a2t5bHZlbi5ubyIsInRhbmEubm8iLCJiby50ZWxlbWFyay5u''@;'; put 'put ''byIsImJceGY4LnRlbGVtYXJrLm5vIiwidGltZS5ubyIsInRpbmd2b2xsLm5vIiwidGlubi5ubyIsInRqZWxkc3VuZC5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9uc2Jlcmcubm8iLCJ0XHhmOG5zYmVyZy5ubyIsInRvcnNrZW4ubm8iLCJ0''@;'; put 'put ''clx4ZTZuYS5ubyIsInRyYW5hLm5vIiwidHJhbm95Lm5vIiwidHJhblx4Zjh5Lm5vIiwidHJvYW5kaW4ubm8iLCJ0cm9nc3RhZC5ubyIsInRyXHhmOGdzdGFkLm5vIiwidHJvbXNhLm5vIiwidHJvbXNvLm5vIiwidHJvbXNceGY4Lm5vIiwidHJvbmRoZWltLm5vIiwidHJ5c2lsLm5vIiwidHZl''@;'; put 'put ''ZGVzdHJhbmQubm8iLCJ0eWRhbC5ubyIsInR5bnNldC5ubyIsInR5c2Zqb3JkLm5vIiwidHlzbmVzLm5vIiwidHlzdlx4ZTZyLm5vIiwidHlzdmFyLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInVuamFyZ2Eubm8iLCJ1bmpceGUxcmdhLm5vIiwidXRz''@;'; put 'put ''aXJhLm5vIiwidmFhcHN0ZS5ubyIsInZhZHNvLm5vIiwidmFkc1x4Zjgubm8iLCJ2XHhlNnJceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZha3NkYWwubm8iLCJ2YWxsZS5u''@;'; put 'put ''byIsInZhbmcubm8iLCJ2YW55bHZlbi5ubyIsInZhcmRvLm5vIiwidmFyZFx4Zjgubm8iLCJ2YXJnZ2F0Lm5vIiwidlx4ZTFyZ2dceGUxdC5ubyIsInZhcm95Lm5vIiwidmVmc24ubm8iLCJ2ZWdhLm5vIiwidmVnYXJzaGVpLm5vIiwidmVnXHhlNXJzaGVpLm5vIiwidmVubmVzbGEubm8iLCJ2''@;'; put 'put ''ZXJkYWwubm8iLCJ2ZXJyYW4ubm8iLCJ2ZXN0Ynkubm8iLCJzYW5kZS52ZXN0Zm9sZC5ubyIsInZlc3RuZXMubm8iLCJ2ZXN0cmUtc2xpZHJlLm5vIiwidmVzdHJlLXRvdGVuLm5vIiwidmVzdHZhZ295Lm5vIiwidmVzdHZceGU1Z1x4Zjh5Lm5vIiwidmV2ZWxzdGFkLm5vIiwidmlrLm5vIiwi''@;'; put 'put ''dmlrbmEubm8iLCJ2aW5kYWZqb3JkLm5vIiwidm9hZ2F0Lm5vIiwidm9sZGEubm8iLCJ2b3NzLm5vIiwiKi5ucCIsIm5yIiwiYml6Lm5yIiwiY29tLm5yIiwiZWR1Lm5yIiwiZ292Lm5yIiwiaW5mby5uciIsIm5ldC5uciIsIm9yZy5uciIsIm51IiwibnoiLCJhYy5ueiIsImNvLm56IiwiY3Jp''@;'; put 'put ''Lm56IiwiZ2Vlay5ueiIsImdlbi5ueiIsImdvdnQubnoiLCJoZWFsdGgubnoiLCJpd2kubnoiLCJraXdpLm56IiwibWFvcmkubnoiLCJtXHUwMTAxb3JpLm56IiwibWlsLm56IiwibmV0Lm56Iiwib3JnLm56IiwicGFybGlhbWVudC5ueiIsInNjaG9vbC5ueiIsIm9tIiwiY28ub20iLCJjb20u''@;'; put 'put ''b20iLCJlZHUub20iLCJnb3Yub20iLCJtZWQub20iLCJtdXNldW0ub20iLCJuZXQub20iLCJvcmcub20iLCJwcm8ub20iLCJvbmlvbiIsIm9yZyIsInBhIiwiYWJvLnBhIiwiYWMucGEiLCJjb20ucGEiLCJlZHUucGEiLCJnb2IucGEiLCJpbmcucGEiLCJtZWQucGEiLCJuZXQucGEiLCJub20u''@;'; put 'put ''cGEiLCJvcmcucGEiLCJzbGQucGEiLCJwZSIsImNvbS5wZSIsImVkdS5wZSIsImdvYi5wZSIsIm1pbC5wZSIsIm5ldC5wZSIsIm5vbS5wZSIsIm9yZy5wZSIsInBmIiwiY29tLnBmIiwiZWR1LnBmIiwib3JnLnBmIiwiKi5wZyIsInBoIiwiY29tLnBoIiwiZWR1LnBoIiwiZ292LnBoIiwiaS5w''@;'; put 'put ''aCIsIm1pbC5waCIsIm5ldC5waCIsIm5nby5waCIsIm9yZy5waCIsInBrIiwiYWMucGsiLCJiaXoucGsiLCJjb20ucGsiLCJlZHUucGsiLCJmYW0ucGsiLCJna3AucGsiLCJnb2IucGsiLCJnb2cucGsiLCJnb2sucGsiLCJnb24ucGsiLCJnb3AucGsiLCJnb3MucGsiLCJnb3YucGsiLCJuZXQu''@;'; put 'put ''cGsiLCJvcmcucGsiLCJ3ZWIucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFncm8ucGwiLCJhaWQucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1lZGlhLnBsIiwibWlh''@;'; put 'put ''c3RhLnBsIiwibWlsLnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRt''@;'; put 'put ''LnBsIiwidG91cmlzbS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImdyaXcuZ292LnBsIiwiaWMuZ292LnBsIiwiaXMuZ292LnBsIiwia21wc3AuZ292LnBsIiwia29uc3VsYXQuZ292LnBsIiwia3Bwc3AuZ292LnBsIiwia3dwLmdvdi5wbCIs''@;'; put 'put ''Imt3cHNwLmdvdi5wbCIsIm11cC5nb3YucGwiLCJtdy5nb3YucGwiLCJvaWEuZ292LnBsIiwib2lybS5nb3YucGwiLCJva2UuZ292LnBsIiwib293Lmdvdi5wbCIsIm9zY2hyLmdvdi5wbCIsIm91bS5nb3YucGwiLCJwYS5nb3YucGwiLCJwaW5iLmdvdi5wbCIsInBpdy5nb3YucGwiLCJwby5n''@;'; put 'put ''b3YucGwiLCJwci5nb3YucGwiLCJwc3AuZ292LnBsIiwicHNzZS5nb3YucGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzZG4uZ292LnBsIiwic2tvLmdvdi5wbCIsInNvLmdvdi5wbCIsInNyLmdvdi5wbCIsInN0YXJvc3R3by5nb3YucGwiLCJ1Zy5nb3YucGwi''@;'; put 'put ''LCJ1Z2ltLmdvdi5wbCIsInVtLmdvdi5wbCIsInVtaWcuZ292LnBsIiwidXBvdy5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsInVzLmdvdi5wbCIsInV3Lmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWYuZ292LnBsIiwid2lpaC5nb3YucGwiLCJ3aW5iLmdvdi5wbCIsIndpb3MuZ292LnBsIiwid2l0''@;'; put 'put ''ZC5nb3YucGwiLCJ3aXcuZ292LnBsIiwid2t6Lmdvdi5wbCIsIndzYS5nb3YucGwiLCJ3c2tyLmdvdi5wbCIsIndzc2UuZ292LnBsIiwid3Vvei5nb3YucGwiLCJ3em1pdXcuZ292LnBsIiwienAuZ292LnBsIiwienBpc2RuLmdvdi5wbCIsImF1Z3VzdG93LnBsIiwiYmFiaWEtZ29yYS5wbCIs''@;'; put 'put ''ImJlZHppbi5wbCIsImJlc2tpZHkucGwiLCJiaWFsb3dpZXphLnBsIiwiYmlhbHlzdG9rLnBsIiwiYmllbGF3YS5wbCIsImJpZXN6Y3phZHkucGwiLCJib2xlc2xhd2llYy5wbCIsImJ5ZGdvc3pjei5wbCIsImJ5dG9tLnBsIiwiY2llc3p5bi5wbCIsImN6ZWxhZHoucGwiLCJjemVzdC5wbCIs''@;'; put 'put ''ImRsdWdvbGVrYS5wbCIsImVsYmxhZy5wbCIsImVsay5wbCIsImdsb2dvdy5wbCIsImduaWV6bm8ucGwiLCJnb3JsaWNlLnBsIiwiZ3JhamV3by5wbCIsImlsYXdhLnBsIiwiamF3b3J6bm8ucGwiLCJqZWxlbmlhLWdvcmEucGwiLCJqZ29yYS5wbCIsImthbGlzei5wbCIsImthcnBhY3oucGwi''@;'; put 'put ''LCJrYXJ0dXp5LnBsIiwia2FzenVieS5wbCIsImthdG93aWNlLnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2Vwbm8ucGwiLCJrZXRyenluLnBsIiwia2xvZHprby5wbCIsImtvYmllcnp5Y2UucGwiLCJrb2xvYnJ6ZWcucGwiLCJrb25pbi5wbCIsImtvbnNrb3dvbGEucGwiLCJrdXRuby5w''@;'; put 'put ''bCIsImxhcHkucGwiLCJsZWJvcmsucGwiLCJsZWduaWNhLnBsIiwibGV6YWpzay5wbCIsImxpbWFub3dhLnBsIiwibG9temEucGwiLCJsb3dpY3oucGwiLCJsdWJpbi5wbCIsImx1a293LnBsIiwibWFsYm9yay5wbCIsIm1hbG9wb2xza2EucGwiLCJtYXpvd3N6ZS5wbCIsIm1henVyeS5wbCIs''@;'; put 'put ''Im1pZWxlYy5wbCIsIm1pZWxuby5wbCIsIm1yYWdvd28ucGwiLCJuYWtsby5wbCIsIm5vd2FydWRhLnBsIiwibnlzYS5wbCIsIm9sYXdhLnBsIiwib2xlY2tvLnBsIiwib2xrdXN6LnBsIiwib2xzenR5bi5wbCIsIm9wb2N6bm8ucGwiLCJvcG9sZS5wbCIsIm9zdHJvZGEucGwiLCJvc3Ryb2xl''@;'; put 'put ''a2EucGwiLCJvc3Ryb3dpZWMucGwiLCJvc3Ryb3d3bGtwLnBsIiwicGlsYS5wbCIsInBpc3oucGwiLCJwb2RoYWxlLnBsIiwicG9kbGFzaWUucGwiLCJwb2xrb3dpY2UucGwiLCJwb21vcnNraWUucGwiLCJwb21vcnplLnBsIiwicHJvY2hvd2ljZS5wbCIsInBydXN6a293LnBsIiwicHJ6ZXdv''@;'; put 'put ''cnNrLnBsIiwicHVsYXd5LnBsIiwicmFkb20ucGwiLCJyYXdhLW1hei5wbCIsInJ5Ym5pay5wbCIsInJ6ZXN6b3cucGwiLCJzYW5vay5wbCIsInNlam55LnBsIiwic2tvY3pvdy5wbCIsInNsYXNrLnBsIiwic2x1cHNrLnBsIiwic29zbm93aWVjLnBsIiwic3RhbG93YS13b2xhLnBsIiwic3Rh''@;'; put 'put ''cmFjaG93aWNlLnBsIiwic3RhcmdhcmQucGwiLCJzdXdhbGtpLnBsIiwic3dpZG5pY2EucGwiLCJzd2llYm9kemluLnBsIiwic3dpbm91anNjaWUucGwiLCJzemN6ZWNpbi5wbCIsInN6Y3p5dG5vLnBsIiwidGFybm9icnplZy5wbCIsInRnb3J5LnBsIiwidHVyZWsucGwiLCJ0eWNoeS5wbCIs''@;'; put 'put ''InVzdGthLnBsIiwid2FsYnJ6eWNoLnBsIiwid2FybWlhLnBsIiwid2Fyc3phd2EucGwiLCJ3YXcucGwiLCJ3ZWdyb3cucGwiLCJ3aWVsdW4ucGwiLCJ3bG9jbC5wbCIsIndsb2NsYXdlay5wbCIsIndvZHppc2xhdy5wbCIsIndvbG9taW4ucGwiLCJ3cm9jbGF3LnBsIiwiemFjaHBvbW9yLnBs''@;'; put 'put ''IiwiemFnYW4ucGwiLCJ6YXJvdy5wbCIsInpnb3JhLnBsIiwiemdvcnplbGVjLnBsIiwicG0iLCJwbiIsImNvLnBuIiwiZWR1LnBuIiwiZ292LnBuIiwibmV0LnBuIiwib3JnLnBuIiwicG9zdCIsInByIiwiYml6LnByIiwiY29tLnByIiwiZWR1LnByIiwiZ292LnByIiwiaW5mby5wciIsImlz''@;'; put 'put ''bGEucHIiLCJuYW1lLnByIiwibmV0LnByIiwib3JnLnByIiwicHJvLnByIiwiYWMucHIiLCJlc3QucHIiLCJwcm9mLnByIiwicHJvIiwiYWFhLnBybyIsImFjYS5wcm8iLCJhY2N0LnBybyIsImF2b2NhdC5wcm8iLCJiYXIucHJvIiwiY3BhLnBybyIsImVuZy5wcm8iLCJqdXIucHJvIiwibGF3''@;'; put 'put ''LnBybyIsIm1lZC5wcm8iLCJyZWNodC5wcm8iLCJwcyIsImNvbS5wcyIsImVkdS5wcyIsImdvdi5wcyIsIm5ldC5wcyIsIm9yZy5wcyIsInBsby5wcyIsInNlYy5wcyIsInB0IiwiY29tLnB0IiwiZWR1LnB0IiwiZ292LnB0IiwiaW50LnB0IiwibmV0LnB0Iiwibm9tZS5wdCIsIm9yZy5wdCIs''@;'; put 'put ''InB1YmwucHQiLCJwdyIsImJlbGF1LnB3IiwiY28ucHciLCJlZC5wdyIsImdvLnB3Iiwib3IucHciLCJweSIsImNvbS5weSIsImNvb3AucHkiLCJlZHUucHkiLCJnb3YucHkiLCJtaWwucHkiLCJuZXQucHkiLCJvcmcucHkiLCJxYSIsImNvbS5xYSIsImVkdS5xYSIsImdvdi5xYSIsIm1pbC5x''@;'; put 'put ''YSIsIm5hbWUucWEiLCJuZXQucWEiLCJvcmcucWEiLCJzY2gucWEiLCJyZSIsImFzc28ucmUiLCJjb20ucmUiLCJybyIsImFydHMucm8iLCJjb20ucm8iLCJmaXJtLnJvIiwiaW5mby5ybyIsIm5vbS5ybyIsIm50LnJvIiwib3JnLnJvIiwicmVjLnJvIiwic3RvcmUucm8iLCJ0bS5ybyIsInd3''@;'; put 'put ''dy5ybyIsInJzIiwiYWMucnMiLCJjby5ycyIsImVkdS5ycyIsImdvdi5ycyIsImluLnJzIiwib3JnLnJzIiwicnUiLCJydyIsImFjLnJ3IiwiY28ucnciLCJjb29wLnJ3IiwiZ292LnJ3IiwibWlsLnJ3IiwibmV0LnJ3Iiwib3JnLnJ3Iiwic2EiLCJjb20uc2EiLCJlZHUuc2EiLCJnb3Yuc2Ei''@;'; put 'put ''LCJtZWQuc2EiLCJuZXQuc2EiLCJvcmcuc2EiLCJwdWIuc2EiLCJzY2guc2EiLCJzYiIsImNvbS5zYiIsImVkdS5zYiIsImdvdi5zYiIsIm5ldC5zYiIsIm9yZy5zYiIsInNjIiwiY29tLnNjIiwiZWR1LnNjIiwiZ292LnNjIiwibmV0LnNjIiwib3JnLnNjIiwic2QiLCJjb20uc2QiLCJlZHUu''@;'; put 'put ''c2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwibWVkLnNkIiwibmV0LnNkIiwib3JnLnNkIiwidHYuc2QiLCJzZSIsImEuc2UiLCJhYy5zZSIsImIuc2UiLCJiZC5zZSIsImJyYW5kLnNlIiwiYy5zZSIsImQuc2UiLCJlLnNlIiwiZi5zZSIsImZoLnNlIiwiZmhzay5zZSIsImZodi5zZSIsImcuc2Ui''@;'; put 'put ''LCJoLnNlIiwiaS5zZSIsImsuc2UiLCJrb21mb3JiLnNlIiwia29tbXVuYWxmb3JidW5kLnNlIiwia29tdnV4LnNlIiwibC5zZSIsImxhbmJpYi5zZSIsIm0uc2UiLCJuLnNlIiwibmF0dXJicnVrc2d5bW4uc2UiLCJvLnNlIiwib3JnLnNlIiwicC5zZSIsInBhcnRpLnNlIiwicHAuc2UiLCJw''@;'; put 'put ''cmVzcy5zZSIsInIuc2UiLCJzLnNlIiwidC5zZSIsInRtLnNlIiwidS5zZSIsIncuc2UiLCJ4LnNlIiwieS5zZSIsInouc2UiLCJzZyIsImNvbS5zZyIsImVkdS5zZyIsImdvdi5zZyIsIm5ldC5zZyIsIm9yZy5zZyIsInNoIiwiY29tLnNoIiwiZ292LnNoIiwibWlsLnNoIiwibmV0LnNoIiwi''@;'; put 'put ''b3JnLnNoIiwic2kiLCJzaiIsInNrIiwic2wiLCJjb20uc2wiLCJlZHUuc2wiLCJnb3Yuc2wiLCJuZXQuc2wiLCJvcmcuc2wiLCJzbSIsInNuIiwiYXJ0LnNuIiwiY29tLnNuIiwiZWR1LnNuIiwiZ291di5zbiIsIm9yZy5zbiIsInBlcnNvLnNuIiwidW5pdi5zbiIsInNvIiwiY29tLnNvIiwi''@;'; put 'put ''ZWR1LnNvIiwiZ292LnNvIiwibWUuc28iLCJuZXQuc28iLCJvcmcuc28iLCJzciIsInNzIiwiYml6LnNzIiwiY28uc3MiLCJjb20uc3MiLCJlZHUuc3MiLCJnb3Yuc3MiLCJtZS5zcyIsIm5ldC5zcyIsIm9yZy5zcyIsInNjaC5zcyIsInN0IiwiY28uc3QiLCJjb20uc3QiLCJjb25zdWxhZG8u''@;'; put 'put ''c3QiLCJlZHUuc3QiLCJlbWJhaXhhZGEuc3QiLCJtaWwuc3QiLCJuZXQuc3QiLCJvcmcuc3QiLCJwcmluY2lwZS5zdCIsInNhb3RvbWUuc3QiLCJzdG9yZS5zdCIsInN1Iiwic3YiLCJjb20uc3YiLCJlZHUuc3YiLCJnb2Iuc3YiLCJvcmcuc3YiLCJyZWQuc3YiLCJzeCIsImdvdi5zeCIsInN5''@;'; put 'put ''IiwiY29tLnN5IiwiZWR1LnN5IiwiZ292LnN5IiwibWlsLnN5IiwibmV0LnN5Iiwib3JnLnN5Iiwic3oiLCJhYy5zeiIsImNvLnN6Iiwib3JnLnN6IiwidGMiLCJ0ZCIsInRlbCIsInRmIiwidGciLCJ0aCIsImFjLnRoIiwiY28udGgiLCJnby50aCIsImluLnRoIiwibWkudGgiLCJuZXQudGgi''@;'; put 'put ''LCJvci50aCIsInRqIiwiYWMudGoiLCJiaXoudGoiLCJjby50aiIsImNvbS50aiIsImVkdS50aiIsImdvLnRqIiwiZ292LnRqIiwiaW50LnRqIiwibWlsLnRqIiwibmFtZS50aiIsIm5ldC50aiIsIm5pYy50aiIsIm9yZy50aiIsInRlc3QudGoiLCJ3ZWIudGoiLCJ0ayIsInRsIiwiZ292LnRs''@;'; put 'put ''IiwidG0iLCJjby50bSIsImNvbS50bSIsImVkdS50bSIsImdvdi50bSIsIm1pbC50bSIsIm5ldC50bSIsIm5vbS50bSIsIm9yZy50bSIsInRuIiwiY29tLnRuIiwiZW5zLnRuIiwiZmluLnRuIiwiZ292LnRuIiwiaW5kLnRuIiwiaW5mby50biIsImludGwudG4iLCJtaW5jb20udG4iLCJuYXQu''@;'; put 'put ''dG4iLCJuZXQudG4iLCJvcmcudG4iLCJwZXJzby50biIsInRvdXJpc20udG4iLCJ0byIsImNvbS50byIsImVkdS50byIsImdvdi50byIsIm1pbC50byIsIm5ldC50byIsIm9yZy50byIsInRyIiwiYXYudHIiLCJiYnMudHIiLCJiZWwudHIiLCJiaXoudHIiLCJjb20udHIiLCJkci50ciIsImVk''@;'; put 'put ''dS50ciIsImdlbi50ciIsImdvdi50ciIsImluZm8udHIiLCJrMTIudHIiLCJrZXAudHIiLCJtaWwudHIiLCJuYW1lLnRyIiwibmV0LnRyIiwib3JnLnRyIiwicG9sLnRyIiwidGVsLnRyIiwidHNrLnRyIiwidHYudHIiLCJ3ZWIudHIiLCJuYy50ciIsImdvdi5uYy50ciIsInR0IiwiYml6LnR0''@;'; put 'put ''IiwiY28udHQiLCJjb20udHQiLCJlZHUudHQiLCJnb3YudHQiLCJpbmZvLnR0IiwibWlsLnR0IiwibmFtZS50dCIsIm5ldC50dCIsIm9yZy50dCIsInByby50dCIsInR2IiwidHciLCJjbHViLnR3IiwiY29tLnR3IiwiZWJpei50dyIsImVkdS50dyIsImdhbWUudHciLCJnb3YudHciLCJpZHYu''@;'; put 'put ''dHciLCJtaWwudHciLCJuZXQudHciLCJvcmcudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJn''@;'; put 'put ''b3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51''@;'; put 'put ''YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEi''@;'; put 'put ''LCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwia3IudWEiLCJrcm9weXZueXRza3lpLnVhIiwia3J5bS51YSIsImtzLnVhIiwia3YudWEiLCJreWl2LnVhIiwibGcudWEiLCJsdC51YSIsImx1Z2Fuc2sudWEiLCJsdWhhbnNrLnVhIiwibHV0c2su''@;'; put 'put ''dWEiLCJsdi51YSIsImx2aXYudWEiLCJtay51YSIsIm15a29sYWl2LnVhIiwibmlrb2xhZXYudWEiLCJvZC51YSIsIm9kZXNhLnVhIiwib2Rlc3NhLnVhIiwicGwudWEiLCJwb2x0YXZhLnVhIiwicml2bmUudWEiLCJyb3Zuby51YSIsInJ2LnVhIiwic2IudWEiLCJzZWJhc3RvcG9sLnVhIiwi''@;'; put 'put ''c2V2YXN0b3BvbC51YSIsInNtLnVhIiwic3VteS51YSIsInRlLnVhIiwidGVybm9waWwudWEiLCJ1ei51YSIsInV6aGdvcm9kLnVhIiwidXpoaG9yb2QudWEiLCJ2aW5uaWNhLnVhIiwidmlubnl0c2lhLnVhIiwidm4udWEiLCJ2b2x5bi51YSIsInlhbHRhLnVhIiwiemFrYXJwYXR0aWEudWEi''@;'; put 'put ''LCJ6YXBvcml6aHpoZS51YSIsInphcG9yaXpoemhpYS51YSIsInpoaXRvbWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJhYy51ZyIsImNvLnVnIiwiY29tLnVnIiwiZ28udWciLCJuZS51ZyIsIm9yLnVnIiwib3JnLnVnIiwic2MudWciLCJ1ayIsImFjLnVrIiwi''@;'; put 'put ''Y28udWsiLCJnb3YudWsiLCJsdGQudWsiLCJtZS51ayIsIm5ldC51ayIsIm5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVz''@;'; put 'put ''IiwiYXMudXMiLCJhei51cyIsImNhLnVzIiwiY28udXMiLCJjdC51cyIsImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1l''@;'; put 'put ''LnVzIiwibWkudXMiLCJtbi51cyIsIm1vLnVzIiwibXMudXMiLCJtdC51cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIs''@;'; put 'put ''InNkLnVzIiwidG4udXMiLCJ0eC51cyIsInV0LnVzIiwidmEudXMiLCJ2aS51cyIsInZ0LnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIu''@;'; put 'put ''Y28udXMiLCJrMTIuY3QudXMiLCJrMTIuZGMudXMiLCJrMTIuZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJr''@;'; put 'put ''MTIubWQudXMiLCJrMTIubWUudXMiLCJrMTIubWkudXMiLCJrMTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMi''@;'; put 'put ''LCJrMTIub2gudXMiLCJrMTIub2sudXMiLCJrMTIub3IudXMiLCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmEudXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIud2EudXMiLCJrMTIud2ku''@;'; put 'put ''dXMiLCJjYy5hay51cyIsImxpYi5hay51cyIsImNjLmFsLnVzIiwibGliLmFsLnVzIiwiY2MuYXIudXMiLCJsaWIuYXIudXMiLCJjYy5hcy51cyIsImxpYi5hcy51cyIsImNjLmF6LnVzIiwibGliLmF6LnVzIiwiY2MuY2EudXMiLCJsaWIuY2EudXMiLCJjYy5jby51cyIsImxpYi5jby51cyIs''@;'; put 'put ''ImNjLmN0LnVzIiwibGliLmN0LnVzIiwiY2MuZGMudXMiLCJsaWIuZGMudXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVz''@;'; put 'put ''IiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwiY2MubWUudXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVz''@;'; put 'put ''IiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwiY2Mub2sudXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52YS51cyIsImNjLnZpLnVz''@;'; put 'put ''IiwiY2MudnQudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwiY2Mud3YudXMiLCJjYy53eS51cyIsImsxMi53eS51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIs''@;'; put 'put ''ImxpYi5rcy51cyIsImxpYi5reS51cyIsImxpYi5sYS51cyIsImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51''@;'; put 'put ''cyIsImxpYi5uaC51cyIsImxpYi5uai51cyIsImxpYi5ubS51cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50''@;'; put 'put ''bi51cyIsImxpYi50eC51cyIsImxpYi51dC51cyIsImxpYi52YS51cyIsImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsImNodHIuazEyLm1hLnVzIiwicGFyb2NoLmsxMi5tYS51cyIsInB2dC5rMTIubWEudXMiLCJhbm4tYXJib3Iu''@;'; put 'put ''bWkudXMiLCJjb2cubWkudXMiLCJkc3QubWkudXMiLCJlYXRvbi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJj''@;'; put 'put ''by51eiIsImNvbS51eiIsIm5ldC51eiIsIm9yZy51eiIsInZhIiwidmMiLCJjb20udmMiLCJlZHUudmMiLCJnb3YudmMiLCJtaWwudmMiLCJuZXQudmMiLCJvcmcudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUi''@;'; put 'put ''LCJnb2IudmUiLCJnb3YudmUiLCJpbmZvLnZlIiwiaW50LnZlIiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmki''@;'; put 'put ''LCJvcmcudmkiLCJ2biIsImFjLnZuIiwiYWkudm4iLCJiaXoudm4iLCJjb20udm4iLCJlZHUudm4iLCJnb3Yudm4iLCJoZWFsdGgudm4iLCJpZC52biIsImluZm8udm4iLCJpbnQudm4iLCJpby52biIsIm5hbWUudm4iLCJuZXQudm4iLCJvcmcudm4iLCJwcm8udm4iLCJhbmdpYW5nLnZuIiwi''@;'; put 'put ''YmFjZ2lhbmcudm4iLCJiYWNrYW4udm4iLCJiYWNsaWV1LnZuIiwiYmFjbmluaC52biIsImJhcmlhLXZ1bmd0YXUudm4iLCJiZW50cmUudm4iLCJiaW5oZGluaC52biIsImJpbmhkdW9uZy52biIsImJpbmhwaHVvYy52biIsImJpbmh0aHVhbi52biIsImNhbWF1LnZuIiwiY2FudGhvLnZuIiwi''@;'; put 'put ''Y2FvYmFuZy52biIsImRha2xhay52biIsImRha25vbmcudm4iLCJkYW5hbmcudm4iLCJkaWVuYmllbi52biIsImRvbmduYWkudm4iLCJkb25ndGhhcC52biIsImdpYWxhaS52biIsImhhZ2lhbmcudm4iLCJoYWlkdW9uZy52biIsImhhaXBob25nLnZuIiwiaGFuYW0udm4iLCJoYW5vaS52biIs''@;'; put 'put ''ImhhdGluaC52biIsImhhdWdpYW5nLnZuIiwiaG9hYmluaC52biIsImh1bmd5ZW4udm4iLCJraGFuaGhvYS52biIsImtpZW5naWFuZy52biIsImtvbnR1bS52biIsImxhaWNoYXUudm4iLCJsYW1kb25nLnZuIiwibGFuZ3Nvbi52biIsImxhb2NhaS52biIsImxvbmdhbi52biIsIm5hbWRpbmgu''@;'; put 'put ''dm4iLCJuZ2hlYW4udm4iLCJuaW5oYmluaC52biIsIm5pbmh0aHVhbi52biIsInBodXRoby52biIsInBodXllbi52biIsInF1YW5nYmluaC52biIsInF1YW5nbmFtLnZuIiwicXVhbmduZ2FpLnZuIiwicXVhbmduaW5oLnZuIiwicXVhbmd0cmkudm4iLCJzb2N0cmFuZy52biIsInNvbmxhLnZu''@;'; put 'put ''IiwidGF5bmluaC52biIsInRoYWliaW5oLnZuIiwidGhhaW5ndXllbi52biIsInRoYW5oaG9hLnZuIiwidGhhbmhwaG9ob2NoaW1pbmgudm4iLCJ0aHVhdGhpZW5odWUudm4iLCJ0aWVuZ2lhbmcudm4iLCJ0cmF2aW5oLnZuIiwidHV5ZW5xdWFuZy52biIsInZpbmhsb25nLnZuIiwidmluaHBo''@;'; put 'put ''dWMudm4iLCJ5ZW5iYWkudm4iLCJ2dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJlZHUud3MiLCJnb3Yud3MiLCJuZXQud3MiLCJvcmcud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3''@;'; put 'put ''MFx1MDU2MVx1MDU3NSIsIlx1MDlhY1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1''@;'; put 'put ''MDNiNVx1MDNiYiIsIlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTUxNmNcdTUzZjguXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NjU1OVx1ODBiMi5cdTk5OTlcdTZlMmYiLCJcdTdkNDRcdTdlNTQuXHU5OTk5XHU2ZTJm''@;'; put 'put ''IiwiXHU3ZGIyXHU3ZDYxLlx1OTk5OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1''@;'; put 'put ''MDkzMFx1MDk0Ylx1MDkyNCIsIlx1MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIs''@;'; put 'put ''Ilx1MGMyZFx1MGMzZVx1MGMzMFx1MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYy''@;'; put 'put ''N1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1''@;'; put 'put ''MGVhNVx1MGViMlx1MGVhNyIsIlx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIs''@;'; put 'put ''Ilx1NmZiM1x1OTU4MCIsIlx1NmZiM1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYz''@;'; put 'put ''M1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzMFx1MDQzYS5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzFcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUw''@;'; put 'put ''NDM0Llx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQzXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYz''@;'; put 'put ''N1x1MDYzMSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1''@;'; put 'put ''MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1''@;'; put 'put ''MGJjZCIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFc''@;'; put 'put ''dTBlMzRcdTBlMDguXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTQwXHUwZTE5XHUwZTQ3XHUwZTE1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyM1x1MGUzMVx1MGUxMFx1MGUxYVx1MGUzMlx1MGUyNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjhcdTBlMzZcdTBlMDFcdTBlMjlcdTBl''@;'; put 'put ''MzIuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQz''@;'; put 'put ''YVx1MDQ0MCIsIlx1MDYyN1x1MDY0NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibWlsLnllIiwibmV0LnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3Jv''@;'; put 'put ''bmRhci56YSIsImxhdy56YSIsIm1pbC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292Lnpt''@;'; put 'put ''IiwiaW5mby56bSIsIm1pbC56bSIsIm5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJp''@;'; put 'put ''IiwiYWNhZGVteSIsImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRzIiwiYWR1bHQiLCJhZWciLCJhZXRuYSIsImFmbCIsImFmcmljYSIsImFnYWtoYW4iLCJhZ2VuY3kiLCJhaWciLCJhaXJidXMiLCJhaXJmb3JjZSIsImFpcnRlbCIsImFr''@;'; put 'put ''ZG4iLCJhbGliYWJhIiwiYWxpcGF5IiwiYWxsZmluYW56IiwiYWxsc3RhdGUiLCJhbGx5IiwiYWxzYWNlIiwiYWxzdG9tIiwiYW1hem9uIiwiYW1lcmljYW5leHByZXNzIiwiYW1lcmljYW5mYW1pbHkiLCJhbWV4IiwiYW1mYW0iLCJhbWljYSIsImFtc3RlcmRhbSIsImFuYWx5dGljcyIsImFu''@;'; put 'put ''ZHJvaWQiLCJhbnF1YW4iLCJhbnoiLCJhb2wiLCJhcGFydG1lbnRzIiwiYXBwIiwiYXBwbGUiLCJhcXVhcmVsbGUiLCJhcmFiIiwiYXJhbWNvIiwiYXJjaGkiLCJhcm15IiwiYXJ0IiwiYXJ0ZSIsImFzZGEiLCJhc3NvY2lhdGVzIiwiYXRobGV0YSIsImF0dG9ybmV5IiwiYXVjdGlvbiIsImF1''@;'; put 'put ''ZGkiLCJhdWRpYmxlIiwiYXVkaW8iLCJhdXNwb3N0IiwiYXV0aG9yIiwiYXV0byIsImF1dG9zIiwiYXdzIiwiYXhhIiwiYXp1cmUiLCJiYWJ5IiwiYmFpZHUiLCJiYW5hbWV4IiwiYmFuZCIsImJhbmsiLCJiYXIiLCJiYXJjZWxvbmEiLCJiYXJjbGF5Y2FyZCIsImJhcmNsYXlzIiwiYmFyZWZv''@;'; put 'put ''b3QiLCJiYXJnYWlucyIsImJhc2ViYWxsIiwiYmFza2V0YmFsbCIsImJhdWhhdXMiLCJiYXllcm4iLCJiYmMiLCJiYnQiLCJiYnZhIiwiYmNnIiwiYmNuIiwiYmVhdHMiLCJiZWF1dHkiLCJiZWVyIiwiYmVudGxleSIsImJlcmxpbiIsImJlc3QiLCJiZXN0YnV5IiwiYmV0IiwiYmhhcnRpIiwi''@;'; put 'put ''YmlibGUiLCJiaWQiLCJiaWtlIiwiYmluZyIsImJpbmdvIiwiYmlvIiwiYmxhY2siLCJibGFja2ZyaWRheSIsImJsb2NrYnVzdGVyIiwiYmxvZyIsImJsb29tYmVyZyIsImJsdWUiLCJibXMiLCJibXciLCJibnBwYXJpYmFzIiwiYm9hdHMiLCJib2VocmluZ2VyIiwiYm9mYSIsImJvbSIsImJv''@;'; put 'put ''bmQiLCJib28iLCJib29rIiwiYm9va2luZyIsImJvc2NoIiwiYm9zdGlrIiwiYm9zdG9uIiwiYm90IiwiYm91dGlxdWUiLCJib3giLCJicmFkZXNjbyIsImJyaWRnZXN0b25lIiwiYnJvYWR3YXkiLCJicm9rZXIiLCJicm90aGVyIiwiYnJ1c3NlbHMiLCJidWlsZCIsImJ1aWxkZXJzIiwiYnVz''@;'; put 'put ''aW5lc3MiLCJidXkiLCJidXp6IiwiYnpoIiwiY2FiIiwiY2FmZSIsImNhbCIsImNhbGwiLCJjYWx2aW5rbGVpbiIsImNhbSIsImNhbWVyYSIsImNhbXAiLCJjYW5vbiIsImNhcGV0b3duIiwiY2FwaXRhbCIsImNhcGl0YWxvbmUiLCJjYXIiLCJjYXJhdmFuIiwiY2FyZHMiLCJjYXJlIiwiY2Fy''@;'; put 'put ''ZWVyIiwiY2FyZWVycyIsImNhcnMiLCJjYXNhIiwiY2FzZSIsImNhc2giLCJjYXNpbm8iLCJjYXRlcmluZyIsImNhdGhvbGljIiwiY2JhIiwiY2JuIiwiY2JyZSIsImNlbnRlciIsImNlbyIsImNlcm4iLCJjZmEiLCJjZmQiLCJjaGFuZWwiLCJjaGFubmVsIiwiY2hhcml0eSIsImNoYXNlIiwi''@;'; put 'put ''Y2hhdCIsImNoZWFwIiwiY2hpbnRhaSIsImNocmlzdG1hcyIsImNocm9tZSIsImNodXJjaCIsImNpcHJpYW5pIiwiY2lyY2xlIiwiY2lzY28iLCJjaXRhZGVsIiwiY2l0aSIsImNpdGljIiwiY2l0eSIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNs''@;'; put 'put ''b3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbW1iYW5rIiwiY29tbXVuaXR5IiwiY29tcGFueSIsImNvbXBhcmUiLCJjb21wdXRlciIsImNvbXNlYyIsImNvbmRvcyIsImNvbnN0cnVjdGlvbiIs''@;'; put 'put ''ImNvbnN1bHRpbmciLCJjb250YWN0IiwiY29udHJhY3RvcnMiLCJjb29raW5nIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJj''@;'; put 'put ''cnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIsImN5bXJ1IiwiY3lvdSIsImRhZCIsImRhbmNlIiwiZGF0YSIsImRhdGUiLCJkYXRpbmciLCJkYXRzdW4iLCJkYXkiLCJkY2xrIiwiZGRzIiwiZGVhbCIsImRlYWxlciIsImRlYWxzIiwiZGVncmVlIiwiZGVsaXZlcnkiLCJkZWxs''@;'; put 'put ''IiwiZGVsb2l0dGUiLCJkZWx0YSIsImRlbW9jcmF0IiwiZGVudGFsIiwiZGVudGlzdCIsImRlc2kiLCJkZXNpZ24iLCJkZXYiLCJkaGwiLCJkaWFtb25kcyIsImRpZXQiLCJkaWdpdGFsIiwiZGlyZWN0IiwiZGlyZWN0b3J5IiwiZGlzY291bnQiLCJkaXNjb3ZlciIsImRpc2giLCJkaXkiLCJk''@;'; put 'put ''bnAiLCJkb2NzIiwiZG9jdG9yIiwiZG9nIiwiZG9tYWlucyIsImRvdCIsImRvd25sb2FkIiwiZHJpdmUiLCJkdHYiLCJkdWJhaSIsImR1bmxvcCIsImR1cG9udCIsImR1cmJhbiIsImR2YWciLCJkdnIiLCJlYXJ0aCIsImVhdCIsImVjbyIsImVkZWthIiwiZWR1Y2F0aW9uIiwiZW1haWwiLCJl''@;'; put 'put ''bWVyY2siLCJlbmVyZ3kiLCJlbmdpbmVlciIsImVuZ2luZWVyaW5nIiwiZW50ZXJwcmlzZXMiLCJlcHNvbiIsImVxdWlwbWVudCIsImVyaWNzc29uIiwiZXJuaSIsImVzcSIsImVzdGF0ZSIsImV1cm92aXNpb24iLCJldXMiLCJldmVudHMiLCJleGNoYW5nZSIsImV4cGVydCIsImV4cG9zZWQi''@;'; put 'put ''LCJleHByZXNzIiwiZXh0cmFzcGFjZSIsImZhZ2UiLCJmYWlsIiwiZmFpcndpbmRzIiwiZmFpdGgiLCJmYW1pbHkiLCJmYW4iLCJmYW5zIiwiZmFybSIsImZhcm1lcnMiLCJmYXNoaW9uIiwiZmFzdCIsImZlZGV4IiwiZmVlZGJhY2siLCJmZXJyYXJpIiwiZmVycmVybyIsImZpZGVsaXR5Iiwi''@;'; put 'put ''ZmlkbyIsImZpbG0iLCJmaW5hbCIsImZpbmFuY2UiLCJmaW5hbmNpYWwiLCJmaXJlIiwiZmlyZXN0b25lIiwiZmlybWRhbGUiLCJmaXNoIiwiZmlzaGluZyIsImZpdCIsImZpdG5lc3MiLCJmbGlja3IiLCJmbGlnaHRzIiwiZmxpciIsImZsb3Jpc3QiLCJmbG93ZXJzIiwiZmx5IiwiZm9vIiwi''@;'; put 'put ''Zm9vZCIsImZvb3RiYWxsIiwiZm9yZCIsImZvcmV4IiwiZm9yc2FsZSIsImZvcnVtIiwiZm91bmRhdGlvbiIsImZveCIsImZyZWUiLCJmcmVzZW5pdXMiLCJmcmwiLCJmcm9nYW5zIiwiZnJvbnRpZXIiLCJmdHIiLCJmdWppdHN1IiwiZnVuIiwiZnVuZCIsImZ1cm5pdHVyZSIsImZ1dGJvbCIs''@;'; put 'put ''ImZ5aSIsImdhbCIsImdhbGxlcnkiLCJnYWxsbyIsImdhbGx1cCIsImdhbWUiLCJnYW1lcyIsImdhcCIsImdhcmRlbiIsImdheSIsImdiaXoiLCJnZG4iLCJnZWEiLCJnZW50IiwiZ2VudGluZyIsImdlb3JnZSIsImdnZWUiLCJnaWZ0IiwiZ2lmdHMiLCJnaXZlcyIsImdpdmluZyIsImdsYXNz''@;'; put 'put ''IiwiZ2xlIiwiZ2xvYmFsIiwiZ2xvYm8iLCJnbWFpbCIsImdtYmgiLCJnbW8iLCJnbXgiLCJnb2RhZGR5IiwiZ29sZCIsImdvbGRwb2ludCIsImdvbGYiLCJnb28iLCJnb29keWVhciIsImdvb2ciLCJnb29nbGUiLCJnb3AiLCJnb3QiLCJncmFpbmdlciIsImdyYXBoaWNzIiwiZ3JhdGlzIiwi''@;'; put 'put ''Z3JlZW4iLCJncmlwZSIsImdyb2NlcnkiLCJncm91cCIsImd1Y2NpIiwiZ3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxz''@;'; put 'put ''aW5raSIsImhlcmUiLCJoZXJtZXMiLCJoaXBob3AiLCJoaXNhbWl0c3UiLCJoaXRhY2hpIiwiaGl2IiwiaGt0IiwiaG9ja2V5IiwiaG9sZGluZ3MiLCJob2xpZGF5IiwiaG9tZWRlcG90IiwiaG9tZWdvb2RzIiwiaG9tZXMiLCJob21lc2Vuc2UiLCJob25kYSIsImhvcnNlIiwiaG9zcGl0YWwi''@;'; put 'put ''LCJob3N0IiwiaG9zdGluZyIsImhvdCIsImhvdGVscyIsImhvdG1haWwiLCJob3VzZSIsImhvdyIsImhzYmMiLCJodWdoZXMiLCJoeWF0dCIsImh5dW5kYWkiLCJpYm0iLCJpY2JjIiwiaWNlIiwiaWN1IiwiaWVlZSIsImlmbSIsImlrYW5vIiwiaW1hbWF0IiwiaW1kYiIsImltbW8iLCJpbW1v''@;'; put 'put ''YmlsaWVuIiwiaW5jIiwiaW5kdXN0cmllcyIsImluZmluaXRpIiwiaW5nIiwiaW5rIiwiaW5zdGl0dXRlIiwiaW5zdXJhbmNlIiwiaW5zdXJlIiwiaW50ZXJuYXRpb25hbCIsImludHVpdCIsImludmVzdG1lbnRzIiwiaXBpcmFuZ2EiLCJpcmlzaCIsImlzbWFpbGkiLCJpc3QiLCJpc3RhbmJ1''@;'; put 'put ''bCIsIml0YXUiLCJpdHYiLCJqYWd1YXIiLCJqYXZhIiwiamNiIiwiamVlcCIsImpldHp0IiwiamV3ZWxyeSIsImppbyIsImpsbCIsImptcCIsImpuaiIsImpvYnVyZyIsImpvdCIsImpveSIsImpwbW9yZ2FuIiwianBycyIsImp1ZWdvcyIsImp1bmlwZXIiLCJrYXVmZW4iLCJrZGRpIiwia2Vy''@;'; put 'put ''cnlob3RlbHMiLCJrZXJyeWxvZ2lzdGljcyIsImtlcnJ5cHJvcGVydGllcyIsImtmaCIsImtpYSIsImtpZHMiLCJraW0iLCJraW5kbGUiLCJraXRjaGVuIiwia2l3aSIsImtvZWxuIiwia29tYXRzdSIsImtvc2hlciIsImtwbWciLCJrcG4iLCJrcmQiLCJrcmVkIiwia3Vva2dyb3VwIiwia3lv''@;'; put 'put ''dG8iLCJsYWNhaXhhIiwibGFtYm9yZ2hpbmkiLCJsYW1lciIsImxhbmNhc3RlciIsImxhbmQiLCJsYW5kcm92ZXIiLCJsYW54ZXNzIiwibGFzYWxsZSIsImxhdCIsImxhdGlubyIsImxhdHJvYmUiLCJsYXciLCJsYXd5ZXIiLCJsZHMiLCJsZWFzZSIsImxlY2xlcmMiLCJsZWZyYWsiLCJsZWdh''@;'; put 'put ''bCIsImxlZ28iLCJsZXh1cyIsImxnYnQiLCJsaWRsIiwibGlmZSIsImxpZmVpbnN1cmFuY2UiLCJsaWZlc3R5bGUiLCJsaWdodGluZyIsImxpa2UiLCJsaWxseSIsImxpbWl0ZWQiLCJsaW1vIiwibGluY29sbiIsImxpbmsiLCJsaXBzeSIsImxpdmUiLCJsaXZpbmciLCJsbGMiLCJsbHAiLCJs''@;'; put 'put ''b2FuIiwibG9hbnMiLCJsb2NrZXIiLCJsb2N1cyIsImxvbCIsImxvbmRvbiIsImxvdHRlIiwibG90dG8iLCJsb3ZlIiwibHBsIiwibHBsZmluYW5jaWFsIiwibHRkIiwibHRkYSIsImx1bmRiZWNrIiwibHV4ZSIsImx1eHVyeSIsIm1hZHJpZCIsIm1haWYiLCJtYWlzb24iLCJtYWtldXAiLCJt''@;'; put 'put ''YW4iLCJtYW5hZ2VtZW50IiwibWFuZ28iLCJtYXAiLCJtYXJrZXQiLCJtYXJrZXRpbmciLCJtYXJrZXRzIiwibWFycmlvdHQiLCJtYXJzaGFsbHMiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1l''@;'; put 'put ''biIsIm1lbnUiLCJtZXJjayIsIm1lcmNrbXNkIiwibWlhbWkiLCJtaWNyb3NvZnQiLCJtaW5pIiwibWludCIsIm1pdCIsIm1pdHN1YmlzaGkiLCJtbGIiLCJtbHMiLCJtbWEiLCJtb2JpbGUiLCJtb2RhIiwibW9lIiwibW9pIiwibW9tIiwibW9uYXNoIiwibW9uZXkiLCJtb25zdGVyIiwibW9y''@;'; put 'put ''bW9uIiwibW9ydGdhZ2UiLCJtb3Njb3ciLCJtb3RvIiwibW90b3JjeWNsZXMiLCJtb3YiLCJtb3ZpZSIsIm1zZCIsIm10biIsIm10ciIsIm11c2ljIiwibmFiIiwibmFnb3lhIiwibmF2eSIsIm5iYSIsIm5lYyIsIm5ldGJhbmsiLCJuZXRmbGl4IiwibmV0d29yayIsIm5ldXN0YXIiLCJuZXci''@;'; put 'put ''LCJuZXdzIiwibmV4dCIsIm5leHRkaXJlY3QiLCJuZXh1cyIsIm5mbCIsIm5nbyIsIm5oayIsIm5pY28iLCJuaWtlIiwibmlrb24iLCJuaW5qYSIsIm5pc3NhbiIsIm5pc3NheSIsIm5va2lhIiwibm9ydG9uIiwibm93Iiwibm93cnV6Iiwibm93dHYiLCJucmEiLCJucnciLCJudHQiLCJueWMi''@;'; put 'put ''LCJvYmkiLCJvYnNlcnZlciIsIm9mZmljZSIsIm9raW5hd2EiLCJvbGF5YW4iLCJvbGF5YW5ncm91cCIsIm9sbG8iLCJvbWVnYSIsIm9uZSIsIm9uZyIsIm9ubCIsIm9ubGluZSIsIm9vbyIsIm9wZW4iLCJvcmFjbGUiLCJvcmFuZ2UiLCJvcmdhbmljIiwib3JpZ2lucyIsIm9zYWthIiwib3Rz''@;'; put 'put ''dWthIiwib3R0Iiwib3ZoIiwicGFnZSIsInBhbmFzb25pYyIsInBhcmlzIiwicGFycyIsInBhcnRuZXJzIiwicGFydHMiLCJwYXJ0eSIsInBheSIsInBjY3ciLCJwZXQiLCJwZml6ZXIiLCJwaGFybWFjeSIsInBoZCIsInBoaWxpcHMiLCJwaG9uZSIsInBob3RvIiwicGhvdG9ncmFwaHkiLCJw''@;'; put 'put ''aG90b3MiLCJwaHlzaW8iLCJwaWNzIiwicGljdGV0IiwicGljdHVyZXMiLCJwaWQiLCJwaW4iLCJwaW5nIiwicGluayIsInBpb25lZXIiLCJwaXp6YSIsInBsYWNlIiwicGxheSIsInBsYXlzdGF0aW9uIiwicGx1bWJpbmciLCJwbHVzIiwicG5jIiwicG9obCIsInBva2VyIiwicG9saXRpZSIs''@;'; put 'put ''InBvcm4iLCJwcmFtZXJpY2EiLCJwcmF4aSIsInByZXNzIiwicHJpbWUiLCJwcm9kIiwicHJvZHVjdGlvbnMiLCJwcm9mIiwicHJvZ3Jlc3NpdmUiLCJwcm9tbyIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInByb3RlY3Rpb24iLCJwcnUiLCJwcnVkZW50aWFsIiwicHViIiwicHdjIiwicXBv''@;'; put 'put ''biIsInF1ZWJlYyIsInF1ZXN0IiwicmFjaW5nIiwicmFkaW8iLCJyZWFkIiwicmVhbGVzdGF0ZSIsInJlYWx0b3IiLCJyZWFsdHkiLCJyZWNpcGVzIiwicmVkIiwicmVkc3RvbmUiLCJyZWR1bWJyZWxsYSIsInJlaGFiIiwicmVpc2UiLCJyZWlzZW4iLCJyZWl0IiwicmVsaWFuY2UiLCJyZW4i''@;'; put 'put ''LCJyZW50IiwicmVudGFscyIsInJlcGFpciIsInJlcG9ydCIsInJlcHVibGljYW4iLCJyZXN0IiwicmVzdGF1cmFudCIsInJldmlldyIsInJldmlld3MiLCJyZXhyb3RoIiwicmljaCIsInJpY2hhcmRsaSIsInJpY29oIiwicmlsIiwicmlvIiwicmlwIiwicm9ja3MiLCJyb2RlbyIsInJvZ2Vy''@;'; put 'put ''cyIsInJvb20iLCJyc3ZwIiwicnVnYnkiLCJydWhyIiwicnVuIiwicndlIiwicnl1a3l1Iiwic2FhcmxhbmQiLCJzYWZlIiwic2FmZXR5Iiwic2FrdXJhIiwic2FsZSIsInNhbG9uIiwic2Ftc2NsdWIiLCJzYW1zdW5nIiwic2FuZHZpayIsInNhbmR2aWtjb3JvbWFudCIsInNhbm9maSIsInNh''@;'; put 'put ''cCIsInNhcmwiLCJzYXMiLCJzYXZlIiwic2F4byIsInNiaSIsInNicyIsInNjYiIsInNjaGFlZmZsZXIiLCJzY2htaWR0Iiwic2Nob2xhcnNoaXBzIiwic2Nob29sIiwic2NodWxlIiwic2Nod2FyeiIsInNjaWVuY2UiLCJzY290Iiwic2VhcmNoIiwic2VhdCIsInNlY3VyZSIsInNlY3VyaXR5''@;'; put 'put ''Iiwic2VlayIsInNlbGVjdCIsInNlbmVyIiwic2VydmljZXMiLCJzZXZlbiIsInNldyIsInNleCIsInNleHkiLCJzZnIiLCJzaGFuZ3JpbGEiLCJzaGFycCIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaWxrIiwi''@;'; put 'put ''c2luYSIsInNpbmdsZXMiLCJzaXRlIiwic2tpIiwic2tpbiIsInNreSIsInNreXBlIiwic2xpbmciLCJzbWFydCIsInNtaWxlIiwic25jZiIsInNvY2NlciIsInNvY2lhbCIsInNvZnRiYW5rIiwic29mdHdhcmUiLCJzb2h1Iiwic29sYXIiLCJzb2x1dGlvbnMiLCJzb25nIiwic29ueSIsInNv''@;'; put 'put ''eSIsInNwYSIsInNwYWNlIiwic3BvcnQiLCJzcG90Iiwic3JsIiwic3RhZGEiLCJzdGFwbGVzIiwic3RhciIsInN0YXRlYmFuayIsInN0YXRlZmFybSIsInN0YyIsInN0Y2dyb3VwIiwic3RvY2tob2xtIiwic3RvcmFnZSIsInN0b3JlIiwic3RyZWFtIiwic3R1ZGlvIiwic3R1ZHkiLCJzdHls''@;'; put 'put ''ZSIsInN1Y2tzIiwic3VwcGxpZXMiLCJzdXBwbHkiLCJzdXBwb3J0Iiwic3VyZiIsInN1cmdlcnkiLCJzdXp1a2kiLCJzd2F0Y2giLCJzd2lzcyIsInN5ZG5leSIsInN5c3RlbXMiLCJ0YWIiLCJ0YWlwZWkiLCJ0YWxrIiwidGFvYmFvIiwidGFyZ2V0IiwidGF0YW1vdG9ycyIsInRhdGFyIiwi''@;'; put 'put ''dGF0dG9vIiwidGF4IiwidGF4aSIsInRjaSIsInRkayIsInRlYW0iLCJ0ZWNoIiwidGVjaG5vbG9neSIsInRlbWFzZWsiLCJ0ZW5uaXMiLCJ0ZXZhIiwidGhkIiwidGhlYXRlciIsInRoZWF0cmUiLCJ0aWFhIiwidGlja2V0cyIsInRpZW5kYSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGpt''@;'; put 'put ''YXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRva3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGVycyIs''@;'; put 'put ''InRyYXZlbGVyc2luc3VyYW5jZSIsInRydXN0IiwidHJ2IiwidHViZSIsInR1aSIsInR1bmVzIiwidHVzaHUiLCJ0dnMiLCJ1YmFuayIsInVicyIsInVuaWNvbSIsInVuaXZlcnNpdHkiLCJ1bm8iLCJ1b2wiLCJ1cHMiLCJ2YWNhdGlvbnMiLCJ2YW5hIiwidmFuZ3VhcmQiLCJ2ZWdhcyIsInZl''@;'; put 'put ''bnR1cmVzIiwidmVyaXNpZ24iLCJ2ZXJzaWNoZXJ1bmciLCJ2ZXQiLCJ2aWFqZXMiLCJ2aWRlbyIsInZpZyIsInZpa2luZyIsInZpbGxhcyIsInZpbiIsInZpcCIsInZpcmdpbiIsInZpc2EiLCJ2aXNpb24iLCJ2aXZhIiwidml2byIsInZsYWFuZGVyZW4iLCJ2b2RrYSIsInZvbHZvIiwidm90''@;'; put 'put ''ZSIsInZvdGluZyIsInZvdG8iLCJ2b3lhZ2UiLCJ3YWxlcyIsIndhbG1hcnQiLCJ3YWx0ZXIiLCJ3YW5nIiwid2FuZ2dvdSIsIndhdGNoIiwid2F0Y2hlcyIsIndlYXRoZXIiLCJ3ZWF0aGVyY2hhbm5lbCIsIndlYmNhbSIsIndlYmVyIiwid2Vic2l0ZSIsIndlZCIsIndlZGRpbmciLCJ3ZWli''@;'; put 'put ''byIsIndlaXIiLCJ3aG9zd2hvIiwid2llbiIsIndpa2kiLCJ3aWxsaWFtaGlsbCIsIndpbiIsIndpbmRvd3MiLCJ3aW5lIiwid2lubmVycyIsIndtZSIsIndvbHRlcnNrbHV3ZXIiLCJ3b29kc2lkZSIsIndvcmsiLCJ3b3JrcyIsIndvcmxkIiwid293Iiwid3RjIiwid3RmIiwieGJveCIsInhl''@;'; put 'put ''cm94IiwieGlodWFuIiwieGluIiwiXHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZi''@;'; put 'put ''XHU1MzY2IiwiXHUwNjQ1XHUwNjQ4XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUw''@;'; put 'put ''NDNhXHUwNDMyXHUwNDMwIiwiXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwi''@;'; put 'put ''XHU2NWY2XHU1YzFhIiwiXHU1ZmFlXHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRl''@;'; put 'put ''XHUzMGJlXHUzMGYzIiwiXHVjMGJjXHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQz''@;'; put 'put ''XHUwNjQ4XHUwNjQ1IiwiXHU0ZTJkXHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5Iiwi''@;'; put 'put ''XHU3ZjUxXHU1ZTk3IiwiXHUwOTM4XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2''@;'; put 'put ''NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUw''@;'; put 'put ''NjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5''@;'; put 'put ''XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUz''@;'; put 'put ''MGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0''@;'; put 'put ''ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZmIiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIs''@;'; put 'put ''Inlva29oYW1hIiwieW91IiwieW91dHViZSIsInl1biIsInphcHBvcyIsInphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjby5rcmQiLCJlZHUua3JkIiwiYXJ0LnBsIiwiZ2xpd2ljZS5wbCIsImtyYWtvdy5wbCIsInBvem5hbi5wbCIsIndyb2MucGwiLCJ6YWtvcGFuZS5w''@;'; put 'put ''bCIsImxpYi5kZS51cyIsIjEyY2hhcnMuZGV2IiwiMTJjaGFycy5pdCIsIjEyY2hhcnMucHJvIiwiY2MudWEiLCJpbmYudWEiLCJsdGQudWEiLCI2MTEudG8iLCJhMmhvc3RlZC5jb20iLCJjcHNlcnZlci5jb20iLCJhYWEudm9ka2EiLCIqLm9uLWFjb3JuLmlvIiwiYWN0aXZldHJhaWwuYml6''@;'; put 'put ''IiwiYWRhcHRhYmxlLmFwcCIsImFkb2JlYWVtY2xvdWQuY29tIiwiKi5kZXYuYWRvYmVhZW1jbG91ZC5jb20iLCJhZW0ubGl2ZSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJhZW0ucGFnZSIsImhseC5wYWdlIiwiaGx4My5wYWdlIiwiYWRvYmVpby1zdGF0aWMubmV0IiwiYWRv''@;'; put 'put ''YmVpb3J1bnRpbWUubmV0IiwiYWZyaWNhLmNvbSIsImJlZXAucGwiLCJhaXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYWthZG5zLm5ldCIsImFrYW1haS5uZXQiLCJha2FtYWktc3RhZ2luZy5uZXQiLCJha2FtYWll''@;'; put 'put ''ZGdlLm5ldCIsImFrYW1haWVkZ2Utc3RhZ2luZy5uZXQiLCJha2FtYWloZC5uZXQiLCJha2FtYWloZC1zdGFnaW5nLm5ldCIsImFrYW1haW9yaWdpbi5uZXQiLCJha2FtYWlvcmlnaW4tc3RhZ2luZy5uZXQiLCJha2FtYWl6ZWQubmV0IiwiYWthbWFpemVkLXN0YWdpbmcubmV0IiwiZWRnZWtl''@;'; put 'put ''eS5uZXQiLCJlZGdla2V5LXN0YWdpbmcubmV0IiwiZWRnZXN1aXRlLm5ldCIsImVkZ2VzdWl0ZS1zdGFnaW5nLm5ldCIsImJhcnN5LmNhIiwiKi5jb21wdXRlLmVzdGF0ZSIsIiouYWxjZXMubmV0d29yayIsImthc3NlcnZlci5jb20iLCJhbHRlcnZpc3RhLm9yZyIsImFsd2F5c2RhdGEubmV0''@;'; put 'put ''IiwibXlhbWF6ZS5uZXQiLCJleGVjdXRlLWFwaS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJleGVjdXRlLWFwaS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtZWFzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRo''@;'; put 'put ''ZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuY2Et''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMy5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZXhlY3V0ZS1hcGkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZXhlY3V0ZS1hcGkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1''@;'; put 'put ''dGUtYXBpLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJjbG91ZGZyb250Lm5ldCIsImF1dGguYWYtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5h''@;'; put 'put ''cC1ub3J0aGVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0y''@;'; put 'put ''LmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtNC5hbWF6''@;'; put 'put ''b25jb2duaXRvLmNvbSIsImF1dGguY2EtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5jYS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtY2VudHJhbC0yLmFtYXpvbmNvZ25pdG8uY29tIiwi''@;'; put 'put ''YXV0aC5ldS1ub3J0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMi5hbWF6b25j''@;'; put 'put ''b2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5pbC1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgubWUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgu''@;'; put 'put ''c2EtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0yLmFtYXpv''@;'; put 'put ''bmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMi5hbWF6b25jb2duaXRvLmNv''@;'; put 'put ''bSIsImF1dGgtZmlwcy51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbS5jbiIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsInVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJv''@;'; put 'put ''ZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJub3RlYm9va3MtcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJzdHVkaW8tcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20uY24iLCJlbXJub3RlYm9va3MtcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcmFwcHVpLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXBy''@;'; put 'put ''b2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlv''@;'; put 'put ''LXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1u''@;'; put 'put ''b3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVt''@;'; put 'put ''cm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRo''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVt''@;'; put 'put ''cmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3Qt''@;'; put 'put ''NC5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJv''@;'; put 'put ''b2tzLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcnN0dWRpby1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtbm9y''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJv''@;'; put 'put ''ZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRp''@;'; put 'put ''by1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBw''@;'; put 'put ''dWktcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90''@;'; put 'put ''ZWJvb2tzLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcnN0dWRpby1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QubWUtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Quc2EtZWFz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVz''@;'; put 'put ''LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51''@;'; put 'put ''cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''YXBwdWktcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy13ZXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiKi5jbi1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouY24tbm9ydGh3ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tLmNuIiwiKi5hZi1zb3V0aC0xLmFpcmZsb3cuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsIiouYXAtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsIiouYXAtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAt''@;'; put 'put ''c291dGhlYXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtNC5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwt''@;'; put 'put ''MS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LW5vcnRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMi5haXJmbG93LmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCIqLmV1LXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmlsLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLWNl''@;'; put 'put ''bnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5zYS1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTIuYWlyZmxvdy5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiKi51cy13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1kZXByZWNhdGVkLmNuLW5v''@;'; put 'put ''cnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLW9iamVjdC1sYW1iZGEuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFj''@;'; put 'put ''Y2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRo''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LXdlYnNpdGUuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''d2Vic2l0ZS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFs''@;'; put 'put ''c3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1v''@;'; put 'put ''YmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFw''@;'; put 'put ''LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1z''@;'; put 'put ''b3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0''@;'; put 'put ''LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh''@;'; put 'put ''Y2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC00LmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNv''@;'; put 'put ''dXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0''@;'; put 'put ''LTUuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2EtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1maXBzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LWZpcHMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5k''@;'; put 'put ''dWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz''@;'; put 'put ''c3BvaW50LmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdl''@;'; put 'put ''YnNpdGUuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMu''@;'; put 'put ''ZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1hY2Nlc3Nwb2ludC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtZGVwcmVjYXRlZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''YWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh''@;'; put 'put ''Y2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1j''@;'; put 'put ''ZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUu''@;'; put 'put ''bWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuYW1hem9uYXdzLmNvbSIsInMzLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtZXh0ZXJuYWwtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIm1yYXAuYWNjZXNzcG9pbnQuczMtZ2xvYmFsLmFtYXpvbmF3cy5jb20iLCJzMy1tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1z''@;'; put 'put ''YS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LXdlYnNpdGUtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxz''@;'; put 'put ''dGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWVhc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3Rh''@;'; put 'put ''Y2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBz''@;'; put 'put ''LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1nb3YtZWFz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292''@;'; put 'put ''LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3Yt''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu''@;'; put 'put ''ZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3Qt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtb2JqZWN0LWxhbWJkYS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy13ZXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJsYWJlbGluZy5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTIuc2FnZW1h''@;'; put 'put ''a2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJs''@;'; put 'put ''YWJlbGluZy5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLWVhc3QtMi5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwibGFiZWxpbmcudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hZi1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9v''@;'; put 'put ''ay5hcC1ub3J0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC00LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS1jZW50cmFsLTEuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3''@;'; put 'put ''cyIsIm5vdGVib29rLmV1LWNlbnRyYWwtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2Vz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIs''@;'; put 'put ''Im5vdGVib29rLm1lLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0y''@;'; put 'put ''LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1nb3Ytd2VzdC0xLnNh''@;'; put 'put ''Z2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdz''@;'; put 'put ''Iiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmNuLW5vcnRoLTEuc2FnZW1ha2VyLmNvbS5jbiIsIm5vdGVib29rLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVkaW8uYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlv''@;'; put 'put ''LmFwLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoLTEuc2FnZW1h''@;'; put 'put ''a2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRp''@;'; put 'put ''by5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1ub3J0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIs''@;'; put 'put ''InN0dWRpby5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5pbC1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1zb3V0aC0xLnNhZ2VtYWtl''@;'; put 'put ''ci5hd3MiLCJzdHVkaW8uc2EtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLWZpcHMudXMtZ292LWVh''@;'; put 'put ''c3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIs''@;'; put 'put ''InN0dWRpby5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVkaW8uY24tbm9ydGh3ZXN0LTEuc2FnZW1ha2VyLmNvbS5jbiIsIiouZXhwZXJpbWVudHMuc2FnZW1ha2VyLmF3cyIsImFuYWx5dGljcy1nYXRld2F5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRp''@;'; put 'put ''Y3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFz''@;'; put 'put ''dC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3Mt''@;'; put 'put ''Z2F0ZXdheS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiYW1wbGlmeWFwcC5jb20iLCIqLmF3c2FwcHJ1bm5lci5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInZmcy5jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLWVhc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vi''@;'; put 'put ''dmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5j''@;'; put 'put ''bG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0''@;'; put 'put ''aGVhc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3''@;'; put 'put ''ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRz''@;'; put 'put ''LmF3cy1jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5j''@;'; put 'put ''YS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwidmZzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5l''@;'; put 'put ''dS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''IndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmll''@;'; put 'put ''dy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmlsLWNlbnRy''@;'; put 'put ''YWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0''@;'; put 'put ''cy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1j''@;'; put 'put ''bG91ZDkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInZmcy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy13ZXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImF3c2FwcHMuY29tIiwiY24tbm9ydGgtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiY24tbm9ydGh3ZXN0LTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImVsYXN0aWNiZWFuc3RhbGsuY29t''@;'; put 'put ''IiwiYWYtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMy5lbGFz''@;'; put 'put ''dGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20i''@;'; put 'put ''LCJjYS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1ub3J0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0''@;'; put 'put ''YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImlsLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIm1lLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJzYS1lYXN0LTEuZWxhc3RpY2Jl''@;'; put 'put ''YW5zdGFsay5jb20iLCJ1cy1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3YtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMS5l''@;'; put 'put ''bGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20uY24iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiYXdzZ2xvYmFsYWNjZWxlcmF0b3IuY29tIiwiKi5wcml2YXRlLnJlcG9zdC5hd3MiLCJlZXJvLm9ubGluZSIs''@;'; put 'put ''ImVlcm8tc3RhZ2Uub25saW5lIiwiYXBpZ2VlLmlvIiwicGFuZWwuZGV2Iiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsImY1LnNpIiwiYXJ2YW5lZGdlLmlyIiwidXNlci5h''@;'; put 'put ''c2VpbmV0Lm5lLmpwIiwiZ3YudmMiLCJkLmd2LnZjIiwidXNlci5wYXJ0eS5ldXMiLCJwaW1pZW50YS5vcmciLCJwb2l2cm9uLm9yZyIsInBvdGFnZXIub3JnIiwic3dlZXRwZXBwZXIub3JnIiwibXlhc3VzdG9yLmNvbSIsImNkbi5wcm9kLmF0bGFzc2lhbi1kZXYubmV0IiwidHJhbnNsYXRl''@;'; put 'put ''ZC5wYWdlIiwibXlmcml0ei5saW5rIiwibXlmcml0ei5uZXQiLCJvbmF2c3RhY2submV0IiwiKi5hd2Rldi5jYSIsIiouYWR2aXNvci53cyIsImVjb21tZXJjZS1zaG9wLnBsIiwiYi1kYXRhLmlvIiwiYmFsZW5hLWRldmljZXMuY29tIiwiYmFzZS5lYyIsIm9mZmljaWFsLmVjIiwiYnV5c2hv''@;'; put 'put ''cC5qcCIsImZhc2hpb25zdG9yZS5qcCIsImhhbmRjcmFmdGVkLmpwIiwia2F3YWlpc2hvcC5qcCIsInN1cGVyc2FsZS5qcCIsInRoZXNob3AuanAiLCJzaG9wc2VsZWN0Lm5ldCIsImJhc2Uuc2hvcCIsImJlYWdsZWJvYXJkLmlvIiwiKi5iZWdldC5hcHAiLCJwYWdlcy5nYXkiLCJibnIubGEi''@;'; put 'put ''LCJiaXRidWNrZXQuaW8iLCJibGFja2JhdWRjZG4ubmV0Iiwib2YuamUiLCJibHVlYml0ZS5pbyIsImJvb21sYS5uZXQiLCJib3V0aXIuY29tIiwiYm94ZnVzZS5pbyIsInNxdWFyZTcuY2giLCJicGxhY2VkLmNvbSIsImJwbGFjZWQuZGUiLCJzcXVhcmU3LmRlIiwiYnBsYWNlZC5uZXQiLCJz''@;'; put 'put ''cXVhcmU3Lm5ldCIsIioucy5icmF2ZS5pbyIsInNob3AuYnJlbmRseS5ociIsInNob3AuYnJlbmRseS5ycyIsImJyb3dzZXJzYWZldHltYXJrLmlvIiwicmFkaW8uYW0iLCJyYWRpby5mbSIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNh''@;'; put 'put ''ZmpzLmNvbSIsImNhbnZhLWFwcHMuY24iLCIqLm15LmNhbnZhc2l0ZS5jbiIsImNhbnZhLWFwcHMuY29tIiwiKi5teS5jYW52YS5zaXRlIiwiZHJyLmFjIiwidXd1LmFpIiwiY2FycmQuY28iLCJjcmQuY28iLCJqdS5tcCIsImFwaS5nb3YudWsiLCJjZG43Ny1zdG9yYWdlLmNvbSIsInJzYy5j''@;'; put 'put ''b250ZW50cHJveHk5LmN6Iiwici5jZG43Ny5uZXQiLCJjZG43Ny1zc2wubmV0IiwiYy5jZG43Ny5vcmciLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiemEuYnoiLCJici5jb20iLCJjbi5jb20iLCJkZS5jb20iLCJldS5jb20iLCJqcG4uY29tIiwibWV4''@;'; put 'put ''LmNvbSIsInJ1LmNvbSIsInNhLmNvbSIsInVrLmNvbSIsInVzLmNvbSIsInphLmNvbSIsImNvbS5kZSIsImdiLm5ldCIsImh1Lm5ldCIsImpwLm5ldCIsInNlLm5ldCIsInVrLm5ldCIsImFlLm9yZyIsImNvbS5zZSIsImN4LnVhIiwiZGlzY291cnNlLmdyb3VwIiwiZGlzY291cnNlLnRlYW0i''@;'; put 'put ''LCJjbGVyay5hcHAiLCJjbGVya3N0YWdlLmFwcCIsIioubGNsLmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGV2ZXJhcHBzLmNjIiwiKi5zZXJ2aWNlcy5jbGV2ZXItY2xvdWQuY29tIiwiY2xldmVyYXBwcy5pbyIsImNsZXZlcmFwcHMudGVj''@;'; put 'put ''aCIsImNsaWNrcmlzaW5nLm5ldCIsImNsb3VkbnMuYXNpYSIsImNsb3VkbnMuYmUiLCJjbG91ZC1pcC5iaXoiLCJjbG91ZG5zLmJpeiIsImNsb3VkbnMuY2MiLCJjbG91ZG5zLmNoIiwiY2xvdWRucy5jbCIsImNsb3VkbnMuY2x1YiIsImRuc2Fici5jb20iLCJpcC1kZG5zLmNvbSIsImNsb3Vk''@;'; put 'put ''bnMuY3giLCJjbG91ZG5zLmV1IiwiY2xvdWRucy5pbiIsImNsb3VkbnMuaW5mbyIsImRkbnMtaXAubmV0IiwiZG5zLWNsb3VkLm5ldCIsImRucy1keW5hbWljLm5ldCIsImNsb3VkbnMubnoiLCJjbG91ZG5zLm9yZyIsImlwLWR5bmFtaWMub3JnIiwiY2xvdWRucy5waCIsImNsb3VkbnMucHJv''@;'; put 'put ''IiwiY2xvdWRucy5wdyIsImNsb3VkbnMudXMiLCJjNjYubWUiLCJjbG91ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCIqLmNsb3VkZXJhLnNp''@;'; put 'put ''dGUiLCJjZi1pcGZzLmNvbSIsImNsb3VkZmxhcmUtaXBmcy5jb20iLCJ0cnljbG91ZGZsYXJlLmNvbSIsInBhZ2VzLmRldiIsInIyLmRldiIsIndvcmtlcnMuZGV2IiwiY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZWFueWNhc3QubmV0IiwiY2Ru''@;'; put 'put ''LmNsb3VkZmxhcmVjbi5uZXQiLCJjZG4uY2xvdWRmbGFyZWdsb2JhbC5uZXQiLCJjdXN0LmNsb3Vkc2NhbGUuY2giLCJvYmplY3RzLmxwZy5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5ybWEuY2xvdWRzY2FsZS5jaCIsInduZXh0LmFwcCIsImNucHkuZ2RuIiwiKi5vdGFwLmNvIiwiY28uY2Ei''@;'; put 'put ''LCJjby5jb20iLCJjb2RlYmVyZy5wYWdlIiwiY3NiLmFwcCIsInByZXZpZXcuY3NiLmFwcCIsImNvLm5sIiwiY28ubm8iLCJ3ZWJob3N0aW5nLmJlIiwiaG9zdGluZy1jbHVzdGVyLm5sIiwiY3RmY2xvdWQubmV0IiwiY29udmV4LnNpdGUiLCJhYy5ydSIsImVkdS5ydSIsImdvdi5ydSIsImlu''@;'; put 'put ''dC5ydSIsIm1pbC5ydSIsInRlc3QucnUiLCJkeW4uY29zaWRucy5kZSIsImRuc3VwZGF0ZXIuZGUiLCJkeW5hbWlzY2hlcy1kbnMuZGUiLCJpbnRlcm5ldC1kbnMuZGUiLCJsLW8tZy1pLW4uZGUiLCJkeW5hbWljLWRucy5pbmZvIiwiZmVzdGUtaXAubmV0Iiwia254LXNlcnZlci5uZXQiLCJz''@;'; put 'put ''dGF0aWMtYWNjZXNzLm5ldCIsImNyYWZ0Lm1lIiwicmVhbG0uY3oiLCJvbi5jcmlzcC5lbWFpbCIsIiouY3J5cHRvbm9taWMubmV0IiwiY3Vydi5kZXYiLCJjZm9sa3MucGwiLCJjeW9uLmxpbmsiLCJjeW9uLnNpdGUiLCJwbGF0Zm9ybTAuYXBwIiwiZm53ay5zaXRlIiwiZm9saW9uZXR3b3Jr''@;'; put 'put ''LnNpdGUiLCJiaXouZGsiLCJjby5kayIsImZpcm0uZGsiLCJyZWcuZGsiLCJzdG9yZS5kayIsImR5bmRucy5kYXBwbm9kZS5pbyIsImJ1aWx0d2l0aGRhcmsuY29tIiwiZGFya2xhbmcuaW8iLCJkZW1vLmRhdGFkZXRlY3QuY29tIiwiaW5zdGFuY2UuZGF0YWRldGVjdC5jb20iLCJlZGdlc3Rh''@;'; put 'put ''Y2subWUiLCJkYXR0b2xvY2FsLmNvbSIsImRhdHRvcmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW4taXAyNC5kZSIsImR5bmRu''@;'; put 'put ''czEuZGUiLCJob21lLXdlYnNlcnZlci5kZSIsImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWJpYW4ubmV0IiwiZGVmaW5pbWEuaW8iLCJkZWZpbmltYS5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIs''@;'; put 'put ''ImRldGEuYXBwIiwiZGV0YS5kZXYiLCJkZmlybWEucGwiLCJka29udG8ucGwiLCJ5b3UyLnBsIiwib25kaWdpdGFsb2NlYW4uYXBwIiwiKi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tIiwidXMua2ciLCJyc3MubXkuaWQiLCJkaWhlci5zb2x1dGlvbnMiLCJkaXNjb3Jkc2F5cy5jb20iLCJkaXNj''@;'; put 'put ''b3Jkc2V6LmNvbSIsImpvemkuYml6IiwiZG5zaG9tZS5kZSIsIm9ubGluZS50aCIsInNob3AudGgiLCJkcmF5ZGRucy5jb20iLCJzaG9wYXJlbmEucGwiLCJkcmVhbWhvc3RlcnMuY29tIiwiZHVydW1pcy5jb20iLCJteWRyb2JvLmNvbSIsImRydWQuaW8iLCJkcnVkLnVzIiwiZHVja2Rucy5v''@;'; put 'put ''cmciLCJkeS5maSIsInR1bmsub3JnIiwiZHluZG5zLmJpeiIsImZvci1iZXR0ZXIuYml6IiwiZm9yLW1vcmUuYml6IiwiZm9yLXNvbWUuYml6IiwiZm9yLXRoZS5iaXoiLCJzZWxmaXAuYml6Iiwid2ViaG9wLmJpeiIsImZ0cGFjY2Vzcy5jYyIsImdhbWUtc2VydmVyLmNjIiwibXlwaG90b3Mu''@;'; put 'put ''Y2MiLCJzY3JhcHBpbmcuY2MiLCJibG9nZG5zLmNvbSIsImNlY2hpcmUuY29tIiwiZG5zYWxpYXMuY29tIiwiZG5zZG9qby5jb20iLCJkb2VzbnRleGlzdC5jb20iLCJkb250ZXhpc3QuY29tIiwiZG9vbWRucy5jb20iLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmRucy1h''@;'; put 'put ''dC1ob21lLmNvbSIsImR5bmRucy1hdC13b3JrLmNvbSIsImR5bmRucy1ibG9nLmNvbSIsImR5bmRucy1mcmVlLmNvbSIsImR5bmRucy1ob21lLmNvbSIsImR5bmRucy1pcC5jb20iLCJkeW5kbnMtbWFpbC5jb20iLCJkeW5kbnMtb2ZmaWNlLmNvbSIsImR5bmRucy1waWNzLmNvbSIsImR5bmRu''@;'; put 'put ''cy1yZW1vdGUuY29tIiwiZHluZG5zLXNlcnZlci5jb20iLCJkeW5kbnMtd2ViLmNvbSIsImR5bmRucy13aWtpLmNvbSIsImR5bmRucy13b3JrLmNvbSIsImVzdC1hLWxhLW1haXNvbi5jb20iLCJlc3QtYS1sYS1tYXNpb24uY29tIiwiZXN0LWxlLXBhdHJvbi5jb20iLCJlc3QtbW9uLWJsb2d1''@;'; put 'put ''ZXVyLmNvbSIsImZyb20tYWsuY29tIiwiZnJvbS1hbC5jb20iLCJmcm9tLWFyLmNvbSIsImZyb20tY2EuY29tIiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJm''@;'; put 'put ''cm9tLWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1tYS5jb20iLCJmcm9tLW1kLmNvbSIsImZyb20tbWkuY29tIiwiZnJvbS1tbi5jb20iLCJmcm9tLW1vLmNvbSIsImZyb20tbXMuY29tIiwiZnJvbS1tdC5jb20i''@;'; put 'put ''LCJmcm9tLW5jLmNvbSIsImZyb20tbmQuY29tIiwiZnJvbS1uZS5jb20iLCJmcm9tLW5oLmNvbSIsImZyb20tbmouY29tIiwiZnJvbS1ubS5jb20iLCJmcm9tLW52LmNvbSIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5j''@;'; put 'put ''b20iLCJmcm9tLXJpLmNvbSIsImZyb20tc2MuY29tIiwiZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13''@;'; put 'put ''eS5jb20iLCJnZXRteWlwLmNvbSIsImdvdGRucy5jb20iLCJob2JieS1zaXRlLmNvbSIsImhvbWVsaW51eC5jb20iLCJob21ldW5peC5jb20iLCJpYW1hbGxhbWEuY29tIiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1h''@;'; put 'put ''LWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhdGVyZXIuY29tIiwiaXMtYS1jaGVmLmNvbSIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0''@;'; put 'put ''b3IuY29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20iLCJpcy1hLWdyZWVuLmNvbSIsImlzLWEtZ3VydS5jb20iLCJpcy1hLWhhcmQtd29ya2VyLmNvbSIsImlzLWEtaHVudGVyLmNvbSIsImlzLWEtbGFuZHNjYXBlci5jb20iLCJpcy1hLWxhd3llci5jb20i''@;'; put 'put ''LCJpcy1hLWxpYmVyYWwuY29tIiwiaXMtYS1saWJlcnRhcmlhbi5jb20iLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wZXJzb25hbHRyYWluZXIuY29tIiwi''@;'; put 'put ''aXMtYS1waG90b2dyYXBoZXIuY29tIiwiaXMtYS1wbGF5ZXIuY29tIiwiaXMtYS1yZXB1YmxpY2FuLmNvbSIsImlzLWEtcm9ja3N0YXIuY29tIiwiaXMtYS1zb2NpYWxpc3QuY29tIiwiaXMtYS1zdHVkZW50LmNvbSIsImlzLWEtdGVhY2hlci5jb20iLCJpcy1hLXRlY2hpZS5jb20iLCJpcy1h''@;'; put 'put ''LXRoZXJhcGlzdC5jb20iLCJpcy1hbi1hY2NvdW50YW50LmNvbSIsImlzLWFuLWFjdG9yLmNvbSIsImlzLWFuLWFjdHJlc3MuY29tIiwiaXMtYW4tYW5hcmNoaXN0LmNvbSIsImlzLWFuLWFydGlzdC5jb20iLCJpcy1hbi1lbmdpbmVlci5jb20iLCJpcy1hbi1lbnRlcnRhaW5lci5jb20iLCJp''@;'; put 'put ''cy1jZXJ0aWZpZWQuY29tIiwiaXMtZ29uZS5jb20iLCJpcy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1ub3QtY2VydGlmaWVkLmNvbSIsImlzLXNsaWNrLmNvbSIs''@;'; put 'put ''ImlzLXViZXJsZWV0LmNvbSIsImlzLXdpdGgtdGhlYmFuZC5jb20iLCJpc2EtZ2Vlay5jb20iLCJpc2EtaG9ja2V5bnV0LmNvbSIsImlzc21hcnRlcnRoYW55b3UuY29tIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibmVhdC11cmwuY29tIiwic2F2ZXMtdGhlLXdoYWxlcy5j''@;'; put 'put ''b20iLCJzZWxmaXAuY29tIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwic2VydmViYnMuY29tIiwic2ltcGxlLXVybC5jb20iLCJzcGFjZS10by1yZW50LmNvbSIsInRlYWNoZXMteW9nYS5jb20iLCJ3cml0ZXN0aGlzYmxvZy5jb20iLCJhdGguY3giLCJmdWV0dGVy''@;'; put 'put ''dGRhc25ldHouZGUiLCJpc3RlaW5nZWVrLmRlIiwiaXN0bWVpbi5kZSIsImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwidHJhZXVtdGdlcmFkZS5kZSIsImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJhcnJlbGwtb2Yta25vd2xlZGdlLmluZm8iLCJkeW5kbnMuaW5mbyIsImZv''@;'; put 'put ''ci1vdXIuaW5mbyIsImdyb2tzLXRoZS5pbmZvIiwiZ3Jva3MtdGhpcy5pbmZvIiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwia25vd3NpdGFsbC5pbmZvIiwic2VsZmlwLmluZm8iLCJ3ZWJob3AuaW5mbyIsImZvcmdvdC5oZXIubmFtZSIsImZvcmdvdC5oaXMubmFtZSIsImF0LWJhbmQtY2FtcC5u''@;'; put 'put ''ZXQiLCJibG9nZG5zLm5ldCIsImJyb2tlLWl0Lm5ldCIsImJ1eXNob3VzZXMubmV0IiwiZG5zYWxpYXMubmV0IiwiZG5zZG9qby5uZXQiLCJkb2VzLWl0Lm5ldCIsImRvbnRleGlzdC5uZXQiLCJkeW5hbGlhcy5uZXQiLCJkeW5hdGhvbWUubmV0IiwiZW5kb2ZpbnRlcm5ldC5uZXQiLCJmcm9t''@;'; put 'put ''LWF6Lm5ldCIsImZyb20tY28ubmV0IiwiZnJvbS1sYS5uZXQiLCJmcm9tLW55Lm5ldCIsImdldHMtaXQubmV0IiwiaGFtLXJhZGlvLW9wLm5ldCIsImhvbWVmdHAubmV0IiwiaG9tZWlwLm5ldCIsImhvbWVsaW51eC5uZXQiLCJob21ldW5peC5uZXQiLCJpbi10aGUtYmFuZC5uZXQiLCJpcy1h''@;'; put 'put ''LWNoZWYubmV0IiwiaXMtYS1nZWVrLm5ldCIsImlzYS1nZWVrLm5ldCIsImtpY2tzLWFzcy5uZXQiLCJvZmZpY2Utb24tdGhlLm5ldCIsInBvZHpvbmUubmV0Iiwic2NyYXBwZXItc2l0ZS5uZXQiLCJzZWxmaXAubmV0Iiwic2VsbHMtaXQubmV0Iiwic2VydmViYnMubmV0Iiwic2VydmVmdHAu''@;'; put 'put ''bmV0IiwidGhydWhlcmUubmV0Iiwid2ViaG9wLm5ldCIsIm1lcnNlaW5lLm51IiwibWluZS5udSIsInNoYWNrbmV0Lm51IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiZG5zYWxpYXMub3JnIiwiZG5zZG9qby5vcmciLCJkb2VzbnRleGlz''@;'; put 'put ''dC5vcmciLCJkb250ZXhpc3Qub3JnIiwiZG9vbWRucy5vcmciLCJkdnJkbnMub3JnIiwiZHluYWxpYXMub3JnIiwiZHluZG5zLm9yZyIsImdvLmR5bmRucy5vcmciLCJob21lLmR5bmRucy5vcmciLCJlbmRvZmludGVybmV0Lm9yZyIsImVuZG9mdGhlaW50ZXJuZXQub3JnIiwiZnJvbS1tZS5v''@;'; put 'put ''cmciLCJnYW1lLWhvc3Qub3JnIiwiZ290ZG5zLm9yZyIsImhvYmJ5LXNpdGUub3JnIiwiaG9tZWRucy5vcmciLCJob21lZnRwLm9yZyIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5vcmciLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNlbHRpY3Nm''@;'; put 'put ''YW4ub3JnIiwiaXMtYS1jaGVmLm9yZyIsImlzLWEtZ2Vlay5vcmciLCJpcy1hLWtuaWdodC5vcmciLCJpcy1hLWxpbnV4LXVzZXIub3JnIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtc294ZmFuLm9yZyIsImlzLWZvdW5kLm9yZyIsImlzLWxvc3Qub3JnIiwiaXMtc2F2ZWQub3JnIiwiaXMt''@;'; put 'put ''dmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9yZyIsImlzLXZlcnktZ29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpc2EtZ2Vlay5vcmciLCJraWNrcy1hc3Mub3JnIiwibWlzY29uZnVzZWQub3JnIiwicG9kem9uZS5vcmciLCJyZWFkbXlibG9n''@;'; put 'put ''Lm9yZyIsInNlbGZpcC5vcmciLCJzZWxsc3lvdXJob21lLm9yZyIsInNlcnZlYmJzLm9yZyIsInNlcnZlZnRwLm9yZyIsInNlcnZlZ2FtZS5vcmciLCJzdHVmZi00LXNhbGUub3JnIiwid2ViaG9wLm9yZyIsImJldHRlci10aGFuLnR2IiwiZHluZG5zLnR2Iiwib24tdGhlLXdlYi50diIsIndv''@;'; put 'put ''cnNlLXRoYW4udHYiLCJpcy1ieS51cyIsImxhbmQtNC1zYWxlLnVzIiwic3R1ZmYtNC1zYWxlLnVzIiwiZHluZG5zLndzIiwibXlwZXRzLndzIiwiZGRuc2ZyZWUuY29tIiwiZGRuc2dlZWsuY29tIiwiZ2lpemUuY29tIiwiZ2xlZXplLmNvbSIsImtvem93LmNvbSIsImxvc2V5b3VyaXAuY29t''@;'; put 'put ''Iiwib29ndXkuY29tIiwidGhld29ya3BjLmNvbSIsImNhc2FjYW0ubmV0IiwiZHludS5uZXQiLCJhY2Nlc3NjYW0ub3JnIiwiY2FtZHZyLm9yZyIsImZyZWVkZG5zLm9yZyIsIm15d2lyZS5vcmciLCJ3ZWJyZWRpcmVjdC5vcmciLCJteWRkbnMucm9ja3MiLCJkeW52Ni5uZXQiLCJlNC5jeiIs''@;'; put 'put ''ImVhc3lwYW5lbC5hcHAiLCJlYXN5cGFuZWwuaG9zdCIsIiouZXdwLmxpdmUiLCJ0d21haWwuY2MiLCJ0d21haWwubmV0IiwidHdtYWlsLm9yZyIsIm15bWFpbGVyLmNvbS50dyIsInVybC50dyIsImF0LmVtZi5jYW1wIiwicnQuaHQiLCJlbGVtZW50b3IuY2xvdWQiLCJlbGVtZW50b3IuY29v''@;'; put 'put ''bCIsImVuLXJvb3QuZnIiLCJteXR1bGVhcC5jb20iLCJ0dWxlYXAtcGFydG5lcnMuY29tIiwiZW5jci5hcHAiLCJlbmNvcmVhcGkuY29tIiwiZXUuZW5jb3dheS5jbG91ZCIsImV1Lm9yZyIsImFsLmV1Lm9yZyIsImFzc28uZXUub3JnIiwiYXQuZXUub3JnIiwiYXUuZXUub3JnIiwiYmUuZXUu''@;'; put 'put ''b3JnIiwiYmcuZXUub3JnIiwiY2EuZXUub3JnIiwiY2QuZXUub3JnIiwiY2guZXUub3JnIiwiY24uZXUub3JnIiwiY3kuZXUub3JnIiwiY3ouZXUub3JnIiwiZGUuZXUub3JnIiwiZGsuZXUub3JnIiwiZWR1LmV1Lm9yZyIsImVlLmV1Lm9yZyIsImVzLmV1Lm9yZyIsImZpLmV1Lm9yZyIsImZy''@;'; put 'put ''LmV1Lm9yZyIsImdyLmV1Lm9yZyIsImhyLmV1Lm9yZyIsImh1LmV1Lm9yZyIsImllLmV1Lm9yZyIsImlsLmV1Lm9yZyIsImluLmV1Lm9yZyIsImludC5ldS5vcmciLCJpcy5ldS5vcmciLCJpdC5ldS5vcmciLCJqcC5ldS5vcmciLCJrci5ldS5vcmciLCJsdC5ldS5vcmciLCJsdS5ldS5vcmci''@;'; put 'put ''LCJsdi5ldS5vcmciLCJtZS5ldS5vcmciLCJtay5ldS5vcmciLCJtdC5ldS5vcmciLCJteS5ldS5vcmciLCJuZXQuZXUub3JnIiwibmcuZXUub3JnIiwibmwuZXUub3JnIiwibm8uZXUub3JnIiwibnouZXUub3JnIiwicGwuZXUub3JnIiwicHQuZXUub3JnIiwicm8uZXUub3JnIiwicnUuZXUu''@;'; put 'put ''b3JnIiwic2UuZXUub3JnIiwic2kuZXUub3JnIiwic2suZXUub3JnIiwidHIuZXUub3JnIiwidWsuZXUub3JnIiwidXMuZXUub3JnIiwiZXVyb2Rpci5ydSIsImV1LTEuZXZlbm5vZGUuY29tIiwiZXUtMi5ldmVubm9kZS5jb20iLCJldS0zLmV2ZW5ub2RlLmNvbSIsImV1LTQuZXZlbm5vZGUu''@;'; put 'put ''Y29tIiwidXMtMS5ldmVubm9kZS5jb20iLCJ1cy0yLmV2ZW5ub2RlLmNvbSIsInVzLTMuZXZlbm5vZGUuY29tIiwidXMtNC5ldmVubm9kZS5jb20iLCJyZWxheS5ldmVydmF1bHQuYXBwIiwicmVsYXkuZXZlcnZhdWx0LmRldiIsImV4cG8uYXBwIiwic3RhZ2luZy5leHBvLmFwcCIsIm9uZmFi''@;'; put 'put ''cmljYS5jb20iLCJydS5uZXQiLCJhZHlnZXlhLnJ1IiwiYmFzaGtpcmlhLnJ1IiwiYmlyLnJ1IiwiY2JnLnJ1IiwiY29tLnJ1IiwiZGFnZXN0YW4ucnUiLCJncm96bnkucnUiLCJrYWxteWtpYS5ydSIsImt1c3RhbmFpLnJ1IiwibWFyaW5lLnJ1IiwibW9yZG92aWEucnUiLCJtc2sucnUiLCJt''@;'; put 'put ''eXRpcy5ydSIsIm5hbGNoaWsucnUiLCJub3YucnUiLCJweWF0aWdvcnNrLnJ1Iiwic3BiLnJ1IiwidmxhZGlrYXZrYXoucnUiLCJ2bGFkaW1pci5ydSIsImFia2hhemlhLnN1IiwiYWR5Z2V5YS5zdSIsImFrdHl1Ymluc2suc3UiLCJhcmtoYW5nZWxzay5zdSIsImFybWVuaWEuc3UiLCJhc2hn''@;'; put 'put ''YWJhZC5zdSIsImF6ZXJiYWlqYW4uc3UiLCJiYWxhc2hvdi5zdSIsImJhc2hraXJpYS5zdSIsImJyeWFuc2suc3UiLCJidWtoYXJhLnN1IiwiY2hpbWtlbnQuc3UiLCJkYWdlc3Rhbi5zdSIsImVhc3Qta2F6YWtoc3Rhbi5zdSIsImV4bmV0LnN1IiwiZ2VvcmdpYS5zdSIsImdyb3pueS5zdSIs''@;'; put 'put ''Iml2YW5vdm8uc3UiLCJqYW1ieWwuc3UiLCJrYWxteWtpYS5zdSIsImthbHVnYS5zdSIsImthcmFjb2wuc3UiLCJrYXJhZ2FuZGEuc3UiLCJrYXJlbGlhLnN1Iiwia2hha2Fzc2lhLnN1Iiwia3Jhc25vZGFyLnN1Iiwia3VyZ2FuLnN1Iiwia3VzdGFuYWkuc3UiLCJsZW51Zy5zdSIsIm1hbmd5''@;'; put 'put ''c2hsYWsuc3UiLCJtb3Jkb3ZpYS5zdSIsIm1zay5zdSIsIm11cm1hbnNrLnN1IiwibmFsY2hpay5zdSIsIm5hdm9pLnN1Iiwibm9ydGgta2F6YWtoc3Rhbi5zdSIsIm5vdi5zdSIsIm9ibmluc2suc3UiLCJwZW56YS5zdSIsInBva3JvdnNrLnN1Iiwic29jaGkuc3UiLCJzcGIuc3UiLCJ0YXNo''@;'; put 'put ''a2VudC5zdSIsInRlcm1lei5zdSIsInRvZ2xpYXR0aS5zdSIsInRyb2l0c2suc3UiLCJ0c2VsaW5vZ3JhZC5zdSIsInR1bGEuc3UiLCJ0dXZhLnN1IiwidmxhZGlrYXZrYXouc3UiLCJ2bGFkaW1pci5zdSIsInZvbG9nZGEuc3UiLCJjaGFubmVsc2R2ci5uZXQiLCJ1LmNoYW5uZWxzZHZyLm5l''@;'; put 'put ''dCIsImVkZ2Vjb21wdXRlLmFwcCIsImZhc3RseS1lZGdlLmNvbSIsImZhc3RseS10ZXJyYXJpdW0uY29tIiwiZnJlZXRscy5mYXN0bHkubmV0IiwibWFwLmZhc3RseS5uZXQiLCJhLnByb2QuZmFzdGx5Lm5ldCIsImdsb2JhbC5wcm9kLmZhc3RseS5uZXQiLCJhLnNzbC5mYXN0bHkubmV0Iiwi''@;'; put 'put ''Yi5zc2wuZmFzdGx5Lm5ldCIsImdsb2JhbC5zc2wuZmFzdGx5Lm5ldCIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCIqLnVzZXIuZm0iLCJmYXN0dnBzLXNlcnZlci5jb20iLCJmYXN0dnBzLmhvc3QiLCJteWZhc3QuaG9zdCIsImZhc3R2cHMuc2l0ZSIsIm15ZmFzdC5zcGFj''@;'; put 'put ''ZSIsImNvbm4udWsiLCJjb3Byby51ayIsImhvc3AudWsiLCJmZWRvcmFpbmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJteWRv''@;'; put 'put ''Ymlzcy5jb20iLCJmaC1tdWVuc3Rlci5pbyIsImZpbGVnZWFyLm1lIiwiZmlyZWJhc2VhcHAuY29tIiwiZmxkcnYuY29tIiwiZmx1dHRlcmZsb3cuYXBwIiwiZmx5LmRldiIsInNody5pbyIsImVkZ2VhcHAubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVy''@;'; put 'put ''LmFpIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCJmcmFtZXIubWVkaWEiLCJmcmFtZXIucGhvdG9zIiwiZnJhbWVyLndlYnNpdGUiLCJmcmFtZXIud2lraSIsIjBlLnZjIiwiZnJlZWJveC1vcy5jb20iLCJmcmVlYm94b3MuY29tIiwiZmJ4LW9zLmZyIiwiZmJ4b3MuZnIiLCJm''@;'; put 'put ''cmVlYm94LW9zLmZyIiwiZnJlZWJveG9zLmZyIiwiZnJlZWRlc2t0b3Aub3JnIiwiZnJlZW15aXAuY29tIiwiKi5mcnVza3kuZGUiLCJ3aWVuLmZ1bmtmZXVlci5hdCIsImRhZW1vbi5hc2lhIiwiZGl4LmFzaWEiLCJteWRucy5ieiIsIjBhbS5qcCIsIjBnMC5qcCIsIjBqMC5qcCIsIjB0MC5q''@;'; put 'put ''cCIsIm15ZG5zLmpwIiwicGd3LmpwIiwid2pnLmpwIiwia2V5d29yZC1vbi5uZXQiLCJsaXZlLW9uLm5ldCIsInNlcnZlci1vbi5uZXQiLCJteWRucy50dyIsIm15ZG5zLnZjIiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJl''@;'; put 'put ''aG9zdGluZy5hdCIsImZ1dHVyZW1haWxpbmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJhbGlhc2VzMTIxLmNvbSIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiaW5kZXBlbmRlbnQtY29tbWlzc2lv''@;'; put 'put ''bi51ayIsImluZGVwZW5kZW50LWlucXVlc3QudWsiLCJpbmRlcGVuZGVudC1pbnF1aXJ5LnVrIiwiaW5kZXBlbmRlbnQtcGFuZWwudWsiLCJpbmRlcGVuZGVudC1yZXZpZXcudWsiLCJwdWJsaWMtaW5xdWlyeS51ayIsInJveWFsLWNvbW1pc3Npb24udWsiLCJnZWhpcm4ubmUuanAiLCJ1c2Vy''@;'; put 'put ''Y29udGVudC5qcCIsImdlbnRhcHBzLmNvbSIsImdlbnRsZW50YXBpcy5jb20iLCJsYWIubXMiLCJjZG4tZWRnZXMubmV0IiwibG9jYWxjZXJ0Lm5ldCIsImxvY2FsaG9zdGNlcnQubmV0IiwiZ3NqLmJ6IiwiZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwiZ2l0aHVicHJldmlldy5kZXYiLCJnaXRo''@;'; put 'put ''dWIuaW8iLCJnaXRsYWIuaW8iLCJnaXRhcHAuc2kiLCJnaXRwYWdlLnNpIiwiZ2xpdGNoLm1lIiwibm9nLmNvbW11bml0eSIsImNvLnJvIiwic2hvcC5ybyIsImxvbGlwb3AuaW8iLCJhbmdyeS5qcCIsImJhYnlibHVlLmpwIiwiYmFieW1pbGsuanAiLCJiYWNrZHJvcC5qcCIsImJhbWJpbmEu''@;'; put 'put ''anAiLCJiaXR0ZXIuanAiLCJibHVzaC5qcCIsImJvby5qcCIsImJveS5qcCIsImJveWZyaWVuZC5qcCIsImJ1dC5qcCIsImNhbmR5cG9wLmpwIiwiY2Fwb28uanAiLCJjYXRmb29kLmpwIiwiY2hlYXAuanAiLCJjaGljYXBwYS5qcCIsImNoaWxsb3V0LmpwIiwiY2hpcHMuanAiLCJjaG93ZGVy''@;'; put 'put ''LmpwIiwiY2h1LmpwIiwiY2lhby5qcCIsImNvY290dGUuanAiLCJjb29sYmxvZy5qcCIsImNyYW5reS5qcCIsImN1dGVnaXJsLmpwIiwiZGFhLmpwIiwiZGVjYS5qcCIsImRlY2kuanAiLCJkaWdpY2suanAiLCJlZ29pc20uanAiLCJmYWtlZnVyLmpwIiwiZmVtLmpwIiwiZmxpZXIuanAiLCJm''@;'; put 'put ''bG9wcHkuanAiLCJmb29sLmpwIiwiZnJlbmNoa2lzcy5qcCIsImdpcmxmcmllbmQuanAiLCJnaXJseS5qcCIsImdsb29teS5qcCIsImdvbm5hLmpwIiwiZ3JlYXRlci5qcCIsImhhY2NhLmpwIiwiaGVhdnkuanAiLCJoZXIuanAiLCJoaWhvLmpwIiwiaGlwcHkuanAiLCJob2x5LmpwIiwiaHVu''@;'; put 'put ''Z3J5LmpwIiwiaWN1cnVzLmpwIiwiaXRpZ28uanAiLCJqZWxseWJlYW4uanAiLCJraWtpcmFyYS5qcCIsImtpbGwuanAiLCJraWxvLmpwIiwia3Vyb24uanAiLCJsaXR0bGVzdGFyLmpwIiwibG9saXBvcG1jLmpwIiwibG9saXRhcHVuay5qcCIsImxvbW8uanAiLCJsb3ZlcG9wLmpwIiwibG92''@;'; put 'put ''ZXNpY2suanAiLCJtYWluLmpwIiwibW9kcy5qcCIsIm1vbmQuanAiLCJtb25nb2xpYW4uanAiLCJtb28uanAiLCJuYW1hc3RlLmpwIiwibmlraXRhLmpwIiwibm9idXNoaS5qcCIsIm5vb3IuanAiLCJvb3BzLmpwIiwicGFyYWxsZWwuanAiLCJwYXJhc2l0ZS5qcCIsInBlY29yaS5qcCIsInBl''@;'; put 'put ''ZXdlZS5qcCIsInBlbm5lLmpwIiwicGVwcGVyLmpwIiwicGVybWEuanAiLCJwaWdib2F0LmpwIiwicGlub2tvLmpwIiwicHVueXUuanAiLCJwdXB1LmpwIiwicHVzc3ljYXQuanAiLCJweWEuanAiLCJyYWluZHJvcC5qcCIsInJlYWR5bWFkZS5qcCIsInNhZGlzdC5qcCIsInNjaG9vbGJ1cy5q''@;'; put 'put ''cCIsInNlY3JldC5qcCIsInN0YWJhLmpwIiwic3RyaXBwZXIuanAiLCJzdWIuanAiLCJzdW5ueWRheS5qcCIsInRoaWNrLmpwIiwidG9ua290c3UuanAiLCJ1bmRlci5qcCIsInVwcGVyLmpwIiwidmVsdmV0LmpwIiwidmVyc2UuanAiLCJ2ZXJzdXMuanAiLCJ2aXZpYW4uanAiLCJ3YXRzb24u''@;'; put 'put ''anAiLCJ3ZWJsaWtlLmpwIiwid2hpdGVzbm93LmpwIiwiem9tYmllLmpwIiwiaGV0ZW1sLm5ldCIsImdyYXBoaWMuZGVzaWduIiwiZ29pcC5kZSIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsIiouaG9zdGVkLmFwcCIsIioucnVuLmFwcCIsIndlYi5hcHAiLCJi''@;'; put 'put ''bG9nc3BvdC5jb20uYXIiLCJibG9nc3BvdC5jby5hdCIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY29tLmJyIiwiYmxvZ3Nwb3QuY29tLmJ5IiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3Bv''@;'; put 'put ''dC5jZiIsImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jb20uY28iLCIqLjBlbW0uY29tIiwiYXBwc3BvdC5jb20iLCIqLnIuYXBwc3BvdC5jb20iLCJibG9nc3BvdC5jb20iLCJjb2Rlc3BvdC5jb20iLCJnb29nbGVhcGlzLmNvbSIsImdvb2dsZWNvZGUuY29tIiwicGFn''@;'; put 'put ''ZXNwZWVkbW9iaWxpemVyLmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiYmxvZ3Nwb3QuY3YiLCJibG9nc3BvdC5jb20uY3kiLCJibG9nc3BvdC5jeiIsImJsb2dzcG90LmRlIiwiKi5nYXRld2F5LmRldiIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuY29tLmVlIiwi''@;'; put 'put ''YmxvZ3Nwb3QuY29tLmVnIiwiYmxvZ3Nwb3QuY29tLmVzIiwiYmxvZ3Nwb3QuZmkiLCJibG9nc3BvdC5mciIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90''@;'; put 'put ''Lmh1IiwiYmxvZ3Nwb3QuY28uaWQiLCJibG9nc3BvdC5pZSIsImJsb2dzcG90LmNvLmlsIiwiYmxvZ3Nwb3QuaW4iLCJibG9nc3BvdC5pcyIsImJsb2dzcG90Lml0IiwiYmxvZ3Nwb3QuanAiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5s''@;'; put 'put ''dCIsImJsb2dzcG90Lmx1IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90Lm14IiwiYmxvZ3Nwb3QubXkiLCJjbG91ZGZ1bmN0aW9ucy5uZXQiLCJibG9nc3BvdC5jb20ubmciLCJibG9nc3BvdC5ubCIsImJsb2dzcG90Lm5vIiwiYmxvZ3Nw''@;'; put 'put ''b3QuY28ubnoiLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwi''@;'; put 'put ''YmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LmNvbS50ciIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC5jby51ayIsImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LnZuIiwiYmxvZ3Nwb3QuY28uemEiLCJnb3VwaWxlLmZyIiwicHltbnQudWsiLCJj''@;'; put 'put ''bG91ZGFwcHMuZGlnaXRhbCIsImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsImdvdi5ubCIsImdyYWZhbmEtZGV2Lm5ldCIsImdyYXlqYXlsZWFndWVzLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEu''@;'; put 'put ''bGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJoXHhlNGtraW5lbi5maSIsImhyc24uZGV2IiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsImhhdGVuYWJsb2cuY29tIiwiaGF0ZW5hZGlhcnkuY29tIiwiaGF0ZWJsby5qcCIsImhhdGVuYWJsb2cuanAiLCJoYXRlbmFk''@;'; put 'put ''aWFyeS5qcCIsImhhdGVuYWRpYXJ5Lm9yZyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIsInBhZ2VzLXJlc2VhcmNoLml0LmhzLWhlaWxicm9ubi5kZSIsImhlaXl1LnNwYWNlIiwiaGVsaW9oby5zdCIsImhlbGlvaG9zdC51cyIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJo''@;'; put 'put ''ZXJva3Vzc2wuY29tIiwiaGV5Zmxvdy5wYWdlIiwiaGV5Zmxvdy5zaXRlIiwicmF2ZW5kYi5jbG91ZCIsInJhdmVuZGIuY29tbXVuaXR5IiwiZGV2ZWxvcG1lbnQucnVuIiwicmF2ZW5kYi5ydW4iLCJob21lc2tsZXAucGwiLCIqLmtpbi5vbmUiLCIqLmlkLnB1YiIsIioua2luLnB1YiIsInNl''@;'; put 'put ''Y2Fhcy5oayIsImhvcGxpeC5zaG9wIiwib3J4LmJpeiIsImJpei5nbCIsImJpei5uZyIsImNvLmJpei5uZyIsImRsLmJpei5uZyIsImdvLmJpei5uZyIsImxnLmJpei5uZyIsIm9uLmJpei5uZyIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJwbGMubmci''@;'; put 'put ''LCJpZS51YSIsImhvc3R5aG9zdGluZy5pbyIsImhmLnNwYWNlIiwic3RhdGljLmhmLnNwYWNlIiwiaHlwZXJub2RlLmlvIiwiaW9iYi5uZXQiLCJjby5jeiIsIioubW9vbnNjYWxlLmlvIiwibW9vbnNjYWxlLm5ldCIsImdyLmNvbSIsImlraS5maSIsImlieG9zLml0IiwiaWxpYWRib3hvcy5p''@;'; put 'put ''dCIsInNtdXNoY2RuLmNvbSIsIndwaG9zdGVkbWFpbC5jb20iLCJ3cG11Y2RuLmNvbSIsInRlbXB1cmwuaG9zdCIsIndwbXVkZXYuaG9zdCIsImR5bi1iZXJsaW4uZGUiLCJpbi1iZXJsaW4uZGUiLCJpbi1icmIuZGUiLCJpbi1idXR0ZXIuZGUiLCJpbi1kc2wuZGUiLCJpbi12cG4uZGUiLCJp''@;'; put 'put ''bi1kc2wubmV0IiwiaW4tdnBuLm5ldCIsImluLWRzbC5vcmciLCJpbi12cG4ub3JnIiwiYml6LmF0IiwiaW5mby5hdCIsImluZm8uY3giLCJhYy5sZWcuYnIiLCJhbC5sZWcuYnIiLCJhbS5sZWcuYnIiLCJhcC5sZWcuYnIiLCJiYS5sZWcuYnIiLCJjZS5sZWcuYnIiLCJkZi5sZWcuYnIiLCJl''@;'; put 'put ''cy5sZWcuYnIiLCJnby5sZWcuYnIiLCJtYS5sZWcuYnIiLCJtZy5sZWcuYnIiLCJtcy5sZWcuYnIiLCJtdC5sZWcuYnIiLCJwYS5sZWcuYnIiLCJwYi5sZWcuYnIiLCJwZS5sZWcuYnIiLCJwaS5sZWcuYnIiLCJwci5sZWcuYnIiLCJyai5sZWcuYnIiLCJybi5sZWcuYnIiLCJyby5sZWcuYnIi''@;'; put 'put ''LCJyci5sZWcuYnIiLCJycy5sZWcuYnIiLCJzYy5sZWcuYnIiLCJzZS5sZWcuYnIiLCJzcC5sZWcuYnIiLCJ0by5sZWcuYnIiLCJwaXhvbGluby5jb20iLCJuYTR1LnJ1IiwiYXBwcy0xYW5kMS5jb20iLCJsaXZlLXdlYnNpdGUuY29tIiwiYXBwcy0xYW5kMS5uZXQiLCJ3ZWJzaXRlYnVpbGRl''@;'; put 'put ''ci5vbmxpbmUiLCJhcHAtaW9ub3Muc3BhY2UiLCJpb3BzeXMuc2UiLCIqLmR3ZWIubGluayIsImlwaWZvbnkubmV0IiwiaXIubWQiLCJpcy1hLWdvb2QuZGV2IiwiaXMtYS5kZXYiLCJpc2VydnNjaHVsZS5kZSIsIm1laW4taXNlcnYuZGUiLCJzY2h1bHBsYXR0Zm9ybS5kZSIsInNjaHVsc2Vy''@;'; put 'put ''dmVyLmRlIiwidGVzdC1pc2Vydi5kZSIsImlzZXJ2LmRldiIsIm1lbC5jbG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwiYWxwMS5hZS5mbG93LmNoIiwiYXBwZW5naW5lLmZsb3cuY2giLCJlcy0xLmF4YXJuZXQuY2xvdWQiLCJkaWFkZW0uY2xvdWQiLCJ2''@;'; put 'put ''aXAuamVsYXN0aWMuY2xvdWQiLCJqZWxlLmNsb3VkIiwiaXQxLmV1ci5hcnViYS5qZW52LWFydWJhLmNsb3VkIiwiaXQxLmplbnYtYXJ1YmEuY2xvdWQiLCJrZWxpd2ViLmNsb3VkIiwiY3Mua2VsaXdlYi5jbG91ZCIsIm94YS5jbG91ZCIsInRuLm94YS5jbG91ZCIsInVrLm94YS5jbG91ZCIs''@;'; put 'put ''InByaW1ldGVsLmNsb3VkIiwidWsucHJpbWV0ZWwuY2xvdWQiLCJjYS5yZWNsYWltLmNsb3VkIiwidWsucmVjbGFpbS5jbG91ZCIsInVzLnJlY2xhaW0uY2xvdWQiLCJjaC50cmVuZGhvc3RpbmcuY2xvdWQiLCJkZS50cmVuZGhvc3RpbmcuY2xvdWQiLCJqZWxlLmNsdWIiLCJkb3BhYXMuY29t''@;'; put 'put ''IiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJwYWFzLm1h''@;'; put 'put ''c3NpdmVncmlkLmNvbSIsImplZC53YWZhaWNsb3VkLmNvbSIsInJ5ZC53YWZhaWNsb3VkLmNvbSIsImouc2NhbGVmb3JjZS5jb20uY3kiLCJqZWxhc3RpYy5kb2dhZG8uZXUiLCJmaS5jbG91ZHBsYXRmb3JtLmZpIiwiZGVtby5kYXRhY2VudGVyLmZpIiwicGFhcy5kYXRhY2VudGVyLmZpIiwi''@;'; put 'put ''amVsZS5ob3N0IiwibWlyY2xvdWQuaG9zdCIsInBhYXMuYmVlYnl0ZS5pbyIsInNla2QxLmJlZWJ5dGVhcHAuaW8iLCJqZWxlLmlvIiwiamMubmVlbi5pdCIsImpjbG91ZC5reiIsImNsb3VkamlmZnkubmV0IiwiZnJhMS1kZS5jbG91ZGppZmZ5Lm5ldCIsIndlc3QxLXVzLmNsb3VkamlmZnku''@;'; put 'put ''bmV0IiwiamxzLXN0bzEuZWxhc3R4Lm5ldCIsImpscy1zdG8yLmVsYXN0eC5uZXQiLCJqbHMtc3RvMy5lbGFzdHgubmV0IiwiZnItMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0xLnBh''@;'; put 'put ''YXMubWFzc2l2ZWdyaWQubmV0IiwibnktMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsInNnLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJqZWxhc3RpYy5zYXZlaW5jbG91ZC5uZXQiLCJub3JkZXN0ZS1pZGMuc2F2ZWluY2xvdWQubmV0Iiwiai5zY2FsZWZvcmNlLm5ldCIsInNkc2Nsb3VkLnBs''@;'; put 'put ''IiwidW5pY2xvdWQucGwiLCJtaXJjbG91ZC5ydSIsImVuc2NhbGVkLnNnIiwiamVsZS5zaXRlIiwiamVsYXN0aWMudGVhbSIsIm9yYW5nZWNsb3VkLnRuIiwiai5sYXllcnNoaWZ0LmNvLnVrIiwicGh4LmVuc2NhbGVkLnVzIiwibWlyY2xvdWQudXMiLCJteWppbm8ucnUiLCIqLmhvc3Rpbmcu''@;'; put 'put ''bXlqaW5vLnJ1IiwiKi5sYW5kaW5nLm15amluby5ydSIsIiouc3BlY3RydW0ubXlqaW5vLnJ1IiwiKi52cHMubXlqaW5vLnJ1Iiwiam90ZWx1bHUuY2xvdWQiLCJ3ZWJhZG9yc2l0ZS5jb20iLCJqb3V3d2ViLnNpdGUiLCIqLmNucy5qb3llbnQuY29tIiwiKi50cml0b24uem9uZSIsImpzLm9y''@;'; put 'put ''ZyIsImthYXMuZ2ciLCJraHBsYXkubmwiLCJrYXBzaS5maSIsImV6cHJveHkua3VsZXV2ZW4uYmUiLCJrdWxldXZlbi5jbG91ZCIsImtleW1hY2hpbmUuZGUiLCJraW5naG9zdC5uZXQiLCJ1bmk1Lm5ldCIsImtuaWdodHBvaW50LnN5c3RlbXMiLCJrb29iaW4uZXZlbnRzIiwid2VidGhpbmdz''@;'; put 'put ''LmlvIiwia3JlbGxpYW4ubmV0Iiwib3lhLnRvIiwiZ2l0LXJlcG9zLmRlIiwibGN1YmUtc2VydmVyLmRlIiwic3ZuLXJlcG9zLmRlIiwibGVhZHBhZ2VzLmNvIiwibHBhZ2VzLmNvIiwibHB1c2VyY29udGVudC5jb20iLCJsZWx1eC5zaXRlIiwibGlicDJwLmRpcmVjdCIsInJ1bmNvbnRhaW5l''@;'; put 'put ''cnMuZGV2IiwiY28uYnVzaW5lc3MiLCJjby5lZHVjYXRpb24iLCJjby5ldmVudHMiLCJjby5maW5hbmNpYWwiLCJjby5uZXR3b3JrIiwiY28ucGxhY2UiLCJjby50ZWNobm9sb2d5IiwibGlua3lhcmQtY2xvdWQuY2giLCJsaW5reWFyZC5jbG91ZCIsIm1lbWJlcnMubGlub2RlLmNvbSIsIiou''@;'; put 'put ''bm9kZWJhbGFuY2VyLmxpbm9kZS5jb20iLCIqLmxpbm9kZW9iamVjdHMuY29tIiwiaXAubGlub2RldXNlcmNvbnRlbnQuY29tIiwid2UuYnMiLCJmaWxlZ2Vhci1zZy5tZSIsImdnZmYubmV0IiwiKi51c2VyLmxvY2FsY2VydC5kZXYiLCJsb2R6LnBsIiwicGFiaWFuaWNlLnBsIiwicGxvY2su''@;'; put 'put ''cGwiLCJzaWVyYWR6LnBsIiwic2tpZXJuaWV3aWNlLnBsIiwiemdpZXJ6LnBsIiwibG9naW5saW5lLmFwcCIsImxvZ2lubGluZS5kZXYiLCJsb2dpbmxpbmUuaW8iLCJsb2dpbmxpbmUuc2VydmljZXMiLCJsb2dpbmxpbmUuc2l0ZSIsImxvaG11cy5tZSIsInNlcnZlcnMucnVuIiwia3Jhc25p''@;'; put 'put ''ay5wbCIsImxlY3puYS5wbCIsImx1YmFydG93LnBsIiwibHVibGluLnBsIiwicG9uaWF0b3dhLnBsIiwic3dpZG5pay5wbCIsImdsdWcub3JnLnVrIiwibHVnLm9yZy51ayIsImx1Z3Mub3JnLnVrIiwiYmFyc3kuYmciLCJiYXJzeS5jbHViIiwiYmFyc3ljZW50ZXIuY29tIiwiYmFyc3lvbmxp''@;'; put 'put ''bmUuY29tIiwiYmFyc3kuZGUiLCJiYXJzeS5kZXYiLCJiYXJzeS5ldSIsImJhcnN5LmdyIiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeW9ubGluZS5tZW51IiwiYmFyc3kubW9iaSIsImJhcnN5Lm5ldCIsImJhcnN5Lm9u''@;'; put 'put ''bGluZSIsImJhcnN5Lm9yZyIsImJhcnN5LnBybyIsImJhcnN5LnB1YiIsImJhcnN5LnJvIiwiYmFyc3kucnMiLCJiYXJzeS5zaG9wIiwiYmFyc3lvbmxpbmUuc2hvcCIsImJhcnN5LnNpdGUiLCJiYXJzeS5zdG9yZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsImJhcnN5LmNvLnVrIiwi''@;'; put 'put ''YmFyc3lvbmxpbmUuY28udWsiLCIqLm1hZ2VudG9zaXRlLmNsb3VkIiwiaGIuY2xkbWFpbC5ydSIsIm1hdGxhYi5jbG91ZCIsIm1vZGVsc2NhcGUuY29tIiwibXdjbG91ZG5vbnByb2QuY29tIiwicG9seXNwYWNlLmNvbSIsIm1heWZpcnN0LmluZm8iLCJtYXlmaXJzdC5vcmciLCJtYXplcGxh''@;'; put 'put ''eS5jb20iLCJtY2Rpci5tZSIsIm1jZGlyLnJ1IiwidnBzLm1jZGlyLnJ1IiwibWNwcmUucnUiLCJtZWRpYXRlY2guYnkiLCJtZWRpYXRlY2guZGV2IiwiaHJhLmhlYWx0aCIsIm1lZHVzYWpzLmFwcCIsIm1pbmlzZXJ2ZXIuY29tIiwibWVtc2V0Lm5ldCIsIm1lc3NlcmxpLmFwcCIsImF0bWV0''@;'; put 'put ''YS5jb20iLCJhcHBzLmZic2J4LmNvbSIsIiouY2xvdWQubWV0YWNlbnRydW0uY3oiLCJjdXN0b20ubWV0YWNlbnRydW0uY3oiLCJmbHQuY2xvdWQubXVuaS5jeiIsInVzci5jbG91ZC5tdW5pLmN6IiwibWV0ZW9yYXBwLmNvbSIsImV1Lm1ldGVvcmFwcC5jb20iLCJjby5wbCIsIiouYXp1cmVj''@;'; put 'put ''b250YWluZXIuaW8iLCJhenVyZS1hcGkubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImF6dXJlZWRnZS5uZXQiLCJhenVyZWZkLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIzLmF6dXJlc3RhdGljYXBw''@;'; put 'put ''cy5uZXQiLCI0LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI1LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI2LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI3LmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQi''@;'; put 'put ''LCJlYXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJhenVyZXdlYnNpdGVzLm5ldCIsImNsb3VkYXBwLm5ldCIsInRyYWZmaWNtYW5hZ2VyLm5ldCIsImJsb2IuY29yZS53aW5k''@;'; put 'put ''b3dzLm5ldCIsInNlcnZpY2VidXMud2luZG93cy5uZXQiLCJyb3V0aW5ndGhlY2xvdWQuY29tIiwic24ubXluZXRuYW1lLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5uZXQiLCJyb3V0aW5ndGhlY2xvdWQub3JnIiwiY3N4LmNjIiwibXlkYnNlcnZlci5jb20iLCJ3ZWJzcGFjZWNvbmZpZy5kZSIs''@;'; put 'put ''Im1pdHR3YWxkLmluZm8iLCJtaXR0d2FsZHNlcnZlci5pbmZvIiwidHlwbzNzZXJ2ZXIuaW5mbyIsInByb2plY3Quc3BhY2UiLCJtb2R4LmRldiIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY2FyYWNhbC5teXRoaWMtYmVh''@;'; put 'put ''c3RzLmNvbSIsImN1c3RvbWVyLm15dGhpYy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0''@;'; put 'put ''cy5jb20iLCJzcGhpbngubXl0aGljLWJlYXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20i''@;'; put 'put ''LCJuZXRmeS5hcHAiLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5mc2hvc3QuY29tIiwiaXBmcy5uZnRzdG9yYWdlLmxpbmsiLCJuZ28udXMiLCJuZ3Jvay5hcHAiLCJuZ3Jvay1mcmVlLmFwcCIsIm5ncm9rLmRldiIsIm5ncm9rLWZyZWUuZGV2Iiwibmdyb2suaW8iLCJhcC5uZ3Jvay5pbyIs''@;'; put 'put ''ImF1Lm5ncm9rLmlvIiwiZXUubmdyb2suaW8iLCJpbi5uZ3Jvay5pbyIsImpwLm5ncm9rLmlvIiwic2Eubmdyb2suaW8iLCJ1cy5uZ3Jvay5pbyIsIm5ncm9rLnBpenphIiwibmdyb2sucHJvIiwidG9ydW4ucGwiLCJuaC1zZXJ2LmNvLnVrIiwibmltc2l0ZS51ayIsIm1tYWZhbi5iaXoiLCJt''@;'; put 'put ''eWZ0cC5iaXoiLCJuby1pcC5iaXoiLCJuby1pcC5jYSIsImZhbnRhc3lsZWFndWUuY2MiLCJnb3RkbnMuY2giLCIzdXRpbGl0aWVzLmNvbSIsImJsb2dzeXRlLmNvbSIsImNpc2NvZnJlYWsuY29tIiwiZGFtbnNlcnZlci5jb20iLCJkZG5za2luZy5jb20iLCJkaXRjaHlvdXJpcC5jb20iLCJk''@;'; put 'put ''bnNpc2tpbmt5LmNvbSIsImR5bm5zLmNvbSIsImdlZWtnYWxheHkuY29tIiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsIm15YWN0aXZlZGlyZWN0b3J5LmNvbSIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXl2bmMu''@;'; put 'put ''Y29tIiwibmV0LWZyZWFrcy5jb20iLCJvbnRoZXdpZmkuY29tIiwicG9pbnQydGhpcy5jb20iLCJxdWlja3N5dGVzLmNvbSIsInNlY3VyaXR5dGFjdGljcy5jb20iLCJzZXJ2ZWJlZXIuY29tIiwic2VydmVjb3VudGVyc3RyaWtlLmNvbSIsInNlcnZlZXhjaGFuZ2UuY29tIiwic2VydmVmdHAu''@;'; put 'put ''Y29tIiwic2VydmVnYW1lLmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZlaHVtb3VyLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbXAzLmNvbSIsInNlcnZlcDJwLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInNlcnZlc2FyY2Fz''@;'; put 'put ''bS5jb20iLCJzdHVmZnRvcmVhZC5jb20iLCJ1bnVzdWFscGVyc29uLmNvbSIsIndvcmtpc2JvcmluZy5jb20iLCJkdnJjYW0uaW5mbyIsImlsb3ZlY29sbGVnZS5pbmZvIiwibm8taXAuaW5mbyIsImJyYXNpbGlhLm1lIiwiZGRucy5tZSIsImRuc2Zvci5tZSIsImhvcHRvLm1lIiwibG9naW50''@;'; put 'put ''by5tZSIsIm5vaXAubWUiLCJ3ZWJob3AubWUiLCJib3VuY2VtZS5uZXQiLCJkZG5zLm5ldCIsImVhdGluZy1vcmdhbmljLm5ldCIsIm15ZGlzc2VudC5uZXQiLCJteWVmZmVjdC5uZXQiLCJteW1lZGlhcGMubmV0IiwibXlwc3gubmV0IiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJuaGxmYW4u''@;'; put 'put ''bmV0Iiwibm8taXAubmV0IiwicGdhZmFuLm5ldCIsInByaXZhdGl6ZWhlYWx0aGluc3VyYW5jZS5uZXQiLCJyZWRpcmVjdG1lLm5ldCIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZW1pbmVjcmFmdC5uZXQiLCJzeXRlcy5uZXQiLCJjYWJsZS1tb2RlbS5vcmciLCJjb2xsZWdlZmFuLm9yZyIsImNv''@;'; put 'put ''dWNocG90YXRvZnJpZXMub3JnIiwiaG9wdG8ub3JnIiwibWxiZmFuLm9yZyIsIm15ZnRwLm9yZyIsIm15c2VjdXJpdHljYW1lcmEub3JnIiwibmZsZmFuLm9yZyIsIm5vLWlwLm9yZyIsInJlYWQtYm9va3Mub3JnIiwidWZjZmFuLm9yZyIsInphcHRvLm9yZyIsIm5vLWlwLmNvLnVrIiwiZ29s''@;'; put 'put ''ZmZhbi51cyIsIm5vaXAudXMiLCJwb2ludHRvLnVzIiwic3RhZ2Uubm9kZWFydC5pbyIsIiouZGV2ZWxvcGVyLmFwcCIsIm5vb3AuYXBwIiwiKi5ub3J0aGZsYW5rLmFwcCIsIiouYnVpbGQucnVuIiwiKi5jb2RlLnJ1biIsIiouZGF0YWJhc2UucnVuIiwiKi5taWdyYXRpb24ucnVuIiwibm90''@;'; put 'put ''aWNlYWJsZS5uZXdzIiwibm90aW9uLnNpdGUiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIs''@;'; put 'put ''Im93bmlwLm5ldCIsInZwbmRucy5uZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJueWMubW4iLCJwcnZjeS5wYWdlIiwib2JsLm9uZyIs''@;'; put 'put ''Im9ic2VydmFibGVocS5jbG91ZCIsInN0YXRpYy5vYnNlcnZhYmxldXNlcmNvbnRlbnQuY29tIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCIxMjN3ZWJzZWl0ZS5hdCIsIjEyM3dlYnNpdGUuYmUiLCJzaW1wbGVzaXRlLmNvbS5iciIsIjEyM3dlYnNpdGUu''@;'; put 'put ''Y2giLCJzaW1wbGVzaXRlLmNvbSIsIjEyM3dlYnNlaXRlLmRlIiwiMTIzaGplbW1lc2lkZS5kayIsIjEyM21pd2ViLmVzIiwiMTIza290aXNpdnUuZmkiLCIxMjNzaXRld2ViLmZyIiwic2ltcGxlc2l0ZS5nciIsIjEyM2hvbWVwYWdlLml0IiwiMTIzd2Vic2l0ZS5sdSIsIjEyM3dlYnNpdGUu''@;'; put 'put ''bmwiLCIxMjNoamVtbWVzaWRlLm5vIiwic2VydmljZS5vbmUiLCJzaW1wbGVzaXRlLnBsIiwiMTIzcGFnaW5hd2ViLnB0IiwiMTIzbWluc2lkYS5zZSIsImlzLWEtZnVsbHN0YWNrLmRldiIsImlzLWNvb2wuZGV2IiwiaXMtbm90LWEuZGV2IiwibG9jYWxwbGF5ZXIuZGV2IiwiaXMtbG9jYWwu''@;'; put 'put ''b3JnIiwib3BlbnNvY2lhbC5zaXRlIiwib3BlbmNyYWZ0Lmhvc3RpbmciLCIxNi1iLml0IiwiMzItYi5pdCIsIjY0LWIuaXQiLCJvcnNpdGVzLmNvbSIsIm9wZXJhdW5pdGUuY29tIiwiKi5jdXN0b21lci1vY2kuY29tIiwiKi5vY2kuY3VzdG9tZXItb2NpLmNvbSIsIioub2NwLmN1c3RvbWVy''@;'; put 'put ''LW9jaS5jb20iLCIqLm9jcy5jdXN0b21lci1vY2kuY29tIiwiKi5vcmFjbGVjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMudWsiLCJ0ZWNoLm9yYW5nZSIsImNhbi5yZSIsImF1dGhnZWFyLXN0YWdpbmcuY29tIiwiYXV0aGdl''@;'; put 'put ''YXJhcHBzLmNvbSIsInNreWdlYXJhcHAuY29tIiwib3V0c3lzdGVtc2Nsb3VkLmNvbSIsIiouaG9zdGluZy5vdmgubmV0IiwiKi53ZWJwYWFzLm92aC5uZXQiLCJvd25wcm92aWRlci5jb20iLCJvd24ucG0iLCIqLm93by5jb2RlcyIsIm94LnJzIiwib3kubGMiLCJwZ2ZvZy5jb20iLCJwYWdl''@;'; put 'put ''eGwuY29tIiwiZ290cGFudGhlb24uY29tIiwicGFudGhlb25zaXRlLmlvIiwiKi5wYXl3aGlybC5jb20iLCIqLnhtaXQuY28iLCJ4bWl0LmRldiIsIm1hZGV0aGlzLnNpdGUiLCJzcnYudXMiLCJnaC5zcnYudXMiLCJnbC5zcnYudXMiLCJsazMucnUiLCJteXBlcC5saW5rIiwicGVyc3BlY3Rh''@;'; put 'put ''LmNsb3VkIiwib24td2ViLmZyIiwiKi51cHN1bi5hcHAiLCJ1cHN1bmFwcC5jb20iLCJlbnQucGxhdGZvcm0uc2giLCJldS5wbGF0Zm9ybS5zaCIsInVzLnBsYXRmb3JtLnNoIiwiKi5wbGF0Zm9ybXNoLnNpdGUiLCIqLnRzdC5zaXRlIiwicGxhdHRlci1hcHAuY29tIiwicGxhdHRlci1hcHAu''@;'; put 'put ''ZGV2IiwicGxhdHRlcnAudXMiLCJwbGV5LmdhbWVzIiwib25wb3J0ZXIucnVuIiwiY28uYm4iLCJwb3N0bWFuLWVjaG8uY29tIiwicHN0bW4uaW8iLCJtb2NrLnBzdG1uLmlvIiwiaHR0cGJpbi5vcmciLCJwcmVxdWFsaWZ5bWUudG9kYXkiLCJ4ZW4ucHJnbXIuY29tIiwicHJpdi5hdCIsInBy''@;'; put 'put ''b3RvbmV0LmlvIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLWVuLWZyYW5jZS5mciIsImJ5ZW4uc2l0ZSIsInB1YnRscy5vcmciLCJweXRob25hbnl3aGVyZS5jb20iLCJldS5weXRob25hbnl3aGVyZS5jb20iLCJxYTIuY29tIiwicWN4LmlvIiwiKi5zeXMucWN4LmlvIiwibXlxbmFwY2xvdWQu''@;'; put 'put ''Y24iLCJhbHBoYS1teXFuYXBjbG91ZC5jb20iLCJkZXYtbXlxbmFwY2xvdWQuY29tIiwibXljbG91ZG5hcy5jb20iLCJteW5hc2Nsb3VkLmNvbSIsIm15cW5hcGNsb3VkLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJsYWRlc2suY29tIiwicWJ1c2VyLmNvbSIsIioucXVpcGVs''@;'; put 'put ''ZW1lbnRzLmNvbSIsInZhcG9yLmNsb3VkIiwidmFwb3JjbG91ZC5pbyIsInJhY2ttYXplLmNvbSIsInJhY2ttYXplLm5ldCIsImNsb3Vkc2l0ZS5idWlsZGVycyIsIm15cmFkd2ViLm5ldCIsInNlcnZlcm5hbWUudXMiLCJ3ZWIuaW4iLCJpbi5uZXQiLCJteXJkYnguaW8iLCJzaXRlLnJiLWhv''@;'; put 'put ''c3RpbmcuaW8iLCIqLm9uLXJhbmNoZXIuY2xvdWQiLCIqLm9uLWszcy5pbyIsIioub24tcmlvLmlvIiwicmF2cGFnZS5jby5pbCIsInJlYWR0aGVkb2NzLWhvc3RlZC5jb20iLCJyZWFkdGhlZG9jcy5pbyIsInJoY2xvdWQuY29tIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwib25yZW5kZXIuY29t''@;'; put 'put ''IiwiYXBwLnJlbmRlci5jb20iLCJyZXBsaXQuYXBwIiwiaWQucmVwbGl0LmFwcCIsImZpcmV3YWxsZWRyZXBsaXQuY28iLCJpZC5maXJld2FsbGVkcmVwbGl0LmNvIiwicmVwbC5jbyIsImlkLnJlcGwuY28iLCJyZXBsaXQuZGV2IiwiYXJjaGVyLnJlcGxpdC5kZXYiLCJib25lcy5yZXBsaXQu''@;'; put 'put ''ZGV2IiwiY2FuYXJ5LnJlcGxpdC5kZXYiLCJnbG9iYWwucmVwbGl0LmRldiIsImhhY2tlci5yZXBsaXQuZGV2IiwiaWQucmVwbGl0LmRldiIsImphbmV3YXkucmVwbGl0LmRldiIsImtpbS5yZXBsaXQuZGV2Iiwia2lyYS5yZXBsaXQuZGV2Iiwia2lyay5yZXBsaXQuZGV2Iiwib2RvLnJlcGxp''@;'; put 'put ''dC5kZXYiLCJwYXJpcy5yZXBsaXQuZGV2IiwicGljYXJkLnJlcGxpdC5kZXYiLCJwaWtlLnJlcGxpdC5kZXYiLCJwcmVyZWxlYXNlLnJlcGxpdC5kZXYiLCJyZWVkLnJlcGxpdC5kZXYiLCJyaWtlci5yZXBsaXQuZGV2Iiwic2lza28ucmVwbGl0LmRldiIsInNwb2NrLnJlcGxpdC5kZXYiLCJz''@;'; put 'put ''dGFnaW5nLnJlcGxpdC5kZXYiLCJzdWx1LnJlcGxpdC5kZXYiLCJ0YXJwaXQucmVwbGl0LmRldiIsInRlYW1zLnJlcGxpdC5kZXYiLCJ0dWNrZXIucmVwbGl0LmRldiIsIndlc2xleS5yZXBsaXQuZGV2Iiwid29yZi5yZXBsaXQuZGV2IiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRl''@;'; put 'put ''dmljZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpjLmlvIiwiYWRpbW8uY28udWsiLCJpdGNvdWxkYmV3b3Iuc2UiLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJnaXQtcGFnZXMucml0LmVkdSIsInJvY2t5LnBhZ2UiLCJydWIuZGUiLCJydWhyLXVuaS1ib2NodW0uZGUiLCJpby5u''@;'; put 'put ''b2MucnVoci11bmktYm9jaHVtLmRlIiwiXHUwNDMxXHUwNDM4XHUwNDM3Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQzZVx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDM4XHUw''@;'; put 'put ''NDQwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQ0MVx1MDQzYS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDMwXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDMwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1''@;'; put 'put ''MDQ0MVx1MDQzZVx1MDQ0N1x1MDQzOC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2ZcdTA0MzEuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDRmLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsInJhcy5ydSIsIm55YXQuYXBwIiwiMTgwci5jb20iLCJkb2ppbi5jb20iLCJzYWt1cmF0YW4u''@;'; put 'put ''Y29tIiwic2FrdXJhd2ViLmNvbSIsIngwLmNvbSIsIjItZC5qcCIsImJvbmEuanAiLCJjcmFwLmpwIiwiZGF5bmlnaHQuanAiLCJlZWsuanAiLCJmbG9wLmpwIiwiaGFsZm1vb24uanAiLCJqZWV6LmpwIiwibWF0cml4LmpwIiwibWltb3phLmpwIiwiaXZvcnkubmUuanAiLCJtYWlsLWJveC5u''@;'; put 'put ''ZS5qcCIsIm1pbnRzLm5lLmpwIiwibW9rdXJlbi5uZS5qcCIsIm9wYWwubmUuanAiLCJzYWt1cmEubmUuanAiLCJzdW1vbW8ubmUuanAiLCJ0b3Bhei5uZS5qcCIsIm5ldGdhbWVycy5qcCIsIm55YW50YS5qcCIsIm8wbzAuanAiLCJyZHkuanAiLCJyZ3IuanAiLCJydWxlei5qcCIsInMzLmlz''@;'; put 'put ''azAxLnNha3VyYXN0b3JhZ2UuanAiLCJzMy5pc2swMi5zYWt1cmFzdG9yYWdlLmpwIiwic2Fsb29uLmpwIiwic2Jsby5qcCIsInNrci5qcCIsInRhbmsuanAiLCJ1aC1vaC5qcCIsInVuZG8uanAiLCJycy53ZWJhY2NlbC5qcCIsInVzZXIud2ViYWNjZWwuanAiLCJ3ZWJzb3phaS5qcCIsInhp''@;'; put 'put ''aS5qcCIsInNxdWFyZXMubmV0IiwianBuLm9yZyIsImtpcmFyYS5zdCIsIngwLnRvIiwiZnJvbS50diIsInNha3VyYS50diIsIiouYnVpbGRlci5jb2RlLmNvbSIsIiouZGV2LWJ1aWxkZXIuY29kZS5jb20iLCIqLnN0Zy1idWlsZGVyLmNvZGUuY29tIiwiKi4wMDEudGVzdC5jb2RlLWJ1aWxk''@;'; put 'put ''ZXItc3RnLnBsYXRmb3JtLnNhbGVzZm9yY2UuY29tIiwiKi5kLmNybS5kZXYiLCIqLncuY3JtLmRldiIsIioud2EuY3JtLmRldiIsIioud2IuY3JtLmRldiIsIioud2MuY3JtLmRldiIsIioud2QuY3JtLmRldiIsIioud2UuY3JtLmRldiIsIioud2YuY3JtLmRldiIsInNhbmRjYXRzLmlvIiwi''@;'; put 'put ''bG9nb2lwLmNvbSIsImxvZ29pcC5kZSIsImZyLXBhci0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImNvY2twaXQuZnItcGFyLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3Vk''@;'; put 'put ''IiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInBy''@;'; put 'put ''aXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsImNvY2twaXQubmwtYW1zLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3Vk''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJjb2NrcGl0LnBsLXdhdy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNp''@;'; put 'put ''dGUucGwtd2F3LnNjdy5jbG91ZCIsInNjYWxlYm9vay5zY3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiY2xpZW50LnNjcnlwdGVkLmlvIiwi''@;'; put 'put ''ZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2FsbC1nYXRld2F5LmRlIiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3Jn''@;'; put 'put ''Iiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIsIm1pbmlzaXRlLm1zIiwic2Vuc2VlcmluZy5uZXQiLCJzZXJ2ZWJvbHQuY2xvdWQiLCJiaXoudWEiLCJjby51YSIsInBwLnVhIiwiYXMuc2guY24iLCJzaGVlenkuZ2FtZXMiLCJzaGlmdGVkaXQuaW8iLCJteXNob3BibG9ja3MuY29tIiwi''@;'; put 'put ''bXlzaG9waWZ5LmNvbSIsInNob3BpdHNpdGUuY29tIiwic2hvcHdhcmUuc2hvcCIsInNob3B3YXJlLnN0b3JlIiwibW8tc2llbWVucy5pbyIsIjFrYXBwLmNvbSIsImFwcGNoaXppLmNvbSIsImFwcGxpbnppLmNvbSIsInNpbmFhcHAuY29tIiwidmlwc2luYWFwcC5jb20iLCJzaXRlbGVhZi5u''@;'; put 'put ''ZXQiLCJzbWFsbC13ZWIub3JnIiwiYWVyb3BvcnQuZnIiLCJhdm9jYXQuZnIiLCJjaGFtYmFncmkuZnIiLCJjaGlydXJnaWVucy1kZW50aXN0ZXMuZnIiLCJleHBlcnRzLWNvbXB0YWJsZXMuZnIiLCJtZWRlY2luLmZyIiwibm90YWlyZXMuZnIiLCJwaGFybWFjaWVuLmZyIiwicG9ydC5mciIs''@;'; put 'put ''InZldGVyaW5haXJlLmZyIiwidnA0Lm1lIiwiKi5zbm93Zmxha2UuYXBwIiwiKi5wcml2YXRlbGluay5zbm93Zmxha2UuYXBwIiwic3RyZWFtbGl0LmFwcCIsInN0cmVhbWxpdGFwcC5jb20iLCJ0cnktc25vd3Bsb3cuY29tIiwibWFmZWxvLm5ldCIsInBsYXlzdGF0aW9uLWNsb3VkLmNvbSIs''@;'; put 'put ''InNyaHQuc2l0ZSIsImFwcHMubGFpci5pbyIsIiouc3RvbG9zLmlvIiwic3BhY2VraXQuaW8iLCJpbmQubW9tIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5j''@;'; put 'put ''YSIsIm15c3ByZWFkc2hvcC5jaCIsIm15c3ByZWFkc2hvcC5jb20iLCJteXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQi''@;'; put 'put ''LCJteXNwcmVhZHNob3AubmV0IiwibXlzcHJlYWRzaG9wLm5sIiwibXlzcHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwidy1jb3JwLXN0YXRpY2JsaXR6LmNvbSIsInctY3JlZGVudGlhbGxlc3Mtc3RhdGljYmxp''@;'; put 'put ''dHouY29tIiwidy1zdGF0aWNibGl0ei5jb20iLCJzdGFja2hlcm8tbmV0d29yay5jb20iLCJydW5zLm9uc3RhY2tpdC5jbG91ZCIsInN0YWNraXQuZ2ciLCJzdGFja2l0LnJvY2tzIiwic3RhY2tpdC5ydW4iLCJzdGFja2l0LnpvbmUiLCJtdXNpY2lhbi5pbyIsIm5vdmVjb3JlLnNpdGUiLCJh''@;'; put 'put ''cGkuc3RkbGliLmNvbSIsImZlZWRiYWNrLmFjIiwiZm9ybXMuYWMiLCJhc3Nlc3NtZW50cy5jeCIsImNhbGN1bGF0b3JzLmN4IiwiZnVubmVscy5jeCIsInBheW5vdy5jeCIsInF1aXp6ZXMuY3giLCJyZXNlYXJjaGVkLmN4IiwidGVzdHMuY3giLCJzdXJ2ZXlzLnNvIiwic3RvcmViYXNlLnN0''@;'; put 'put ''b3JlIiwic3RvcmlwcmVzcy5hcHAiLCJzdG9yai5mYXJtIiwic3RyYXBpYXBwLmNvbSIsIm1lZGlhLnN0cmFwaWFwcC5jb20iLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9z''@;'; put 'put ''dC5uZXQiLCJzdHJlYWstbGluay5jb20iLCJzdHJlYWtsaW5rcy5jb20iLCJzdHJlYWt1c2VyY29udGVudC5jb20iLCJzb2Muc3JjZi5uZXQiLCJ1c2VyLnNyY2YubmV0IiwidXR3ZW50ZS5pbyIsInRlbXAtZG5zLmNvbSIsInN1cGFiYXNlLmNvIiwic3VwYWJhc2UuaW4iLCJzdXBhYmFzZS5u''@;'; put 'put ''ZXQiLCJzeW5jbG91ZC5pdCIsImRzY2xvdWQuYml6IiwiZGlyZWN0LnF1aWNrY29ubmVjdC5jbiIsImRzbXluYXMuY29tIiwiZmFtaWx5ZHMuY29tIiwiZGlza3N0YXRpb24ubWUiLCJkc2Nsb3VkLm1lIiwiaTIzNC5tZSIsIm15ZHMubWUiLCJzeW5vbG9neS5tZSIsImRzY2xvdWQubW9iaSIs''@;'; put 'put ''ImRzbXluYXMubmV0IiwiZmFtaWx5ZHMubmV0IiwiZHNteW5hcy5vcmciLCJmYW1pbHlkcy5vcmciLCJkaXJlY3QucXVpY2tjb25uZWN0LnRvIiwidnBucGx1cy50byIsIm15dGFiaXQuY29tIiwibXl0YWJpdC5jby5pbCIsInRhYml0b3JkZXIuY28uaWwiLCJ0YWlmdW4tZG5zLmRlIiwidHMu''@;'; put 'put ''bmV0IiwiKi5jLnRzLm5ldCIsImdkYS5wbCIsImdkYW5zay5wbCIsImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwidGF2ZXVzZXJjb250ZW50LmNvbSIsInAudGF3ay5lbWFpbCIsInAudGF3a3RvLmVtYWlsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRl''@;'; put 'put ''Y2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsIiouZmlyZW5ldC5jaCIsIiouc3ZjLmZpcmVuZXQuY2giLCJyZXNlcnZkLmNvbSIsInRoaW5nZHVzdGRhdGEuY29tIiwiY3VzdC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdk''@;'; put 'put ''dXN0LmlvIiwiY3VzdC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwiY3VzdC5wcm9kLnRoaW5nZHVzdC5pbyIsImN1c3QudGVzdGluZy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLnRlc3RpbmcudGhpbmdkdXN0LmlvIiwidGlja2V0cy5pbyIsImFy''@;'; put 'put ''dm8ubmV0d29yayIsImF6aW11dGgubmV0d29yayIsInRsb24ubmV0d29yayIsInRvcnByb2plY3QubmV0IiwicGFnZXMudG9ycHJvamVjdC5uZXQiLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsIjEyaHAuYXQiLCIyaXguYXQiLCI0bGltYS5hdCIsImxpbWEtY2l0eS5hdCIsIjEyaHAuY2giLCIy''@;'; put 'put ''aXguY2giLCI0bGltYS5jaCIsImxpbWEtY2l0eS5jaCIsInRyYWZmaWNwbGV4LmNsb3VkIiwiZGUuY29vbCIsIjEyaHAuZGUiLCIyaXguZGUiLCI0bGltYS5kZSIsImxpbWEtY2l0eS5kZSIsIjEzMzcucGljdHVyZXMiLCJjbGFuLnJpcCIsImxpbWEtY2l0eS5yb2NrcyIsIndlYnNwYWNlLnJv''@;'; put 'put ''Y2tzIiwibGltYS56b25lIiwiKi50cmFuc3VybC5iZSIsIioudHJhbnN1cmwuZXUiLCJzaXRlLnRyYW5zaXAubWUiLCIqLnRyYW5zdXJsLm5sIiwidHV4ZmFtaWx5Lm9yZyIsImRkLWRucy5kZSIsImRyYXktZG5zLmRlIiwiZHJheWRucy5kZSIsImR5bi12cG4uZGUiLCJkeW52cG4uZGUiLCJt''@;'; put 'put ''ZWluLXZpZ29yLmRlIiwibXktdmlnb3IuZGUiLCJteS13YW4uZGUiLCJzeW5vLWRzLmRlIiwic3lub2xvZ3ktZGlza3N0YXRpb24uZGUiLCJzeW5vbG9neS1kcy5kZSIsImRpc2tzdGF0aW9uLmV1IiwiZGlza3N0YXRpb24ub3JnIiwidHlwZWRyZWFtLmFwcCIsInByby50eXBlZm9ybS5jb20i''@;'; put 'put ''LCIqLnViZXJzcGFjZS5kZSIsInViZXIuc3BhY2UiLCJoay5jb20iLCJpbmMuaGsiLCJsdGQuaGsiLCJoay5vcmciLCJpdC5jb20iLCJ1bmlzb24tc2VydmljZXMuY2xvdWQiLCJ2aXJ0dWFsLXVzZXIuZGUiLCJ2aXJ0dWFsdXNlci5kZSIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJz''@;'; put 'put ''Y2gud2YiLCJvcmcueXQiLCJycy5iYSIsImJpZWxza28ucGwiLCJ1cGxpLmlvIiwidXJvd24uY2xvdWQiLCJkbnN1cGRhdGUuaW5mbyIsInVzLm9yZyIsInYudWEiLCJleHByZXNzLnZhbC5ydW4iLCJ3ZWIudmFsLnJ1biIsInZlcmNlbC5hcHAiLCJ2MC5idWlsZCIsInZlcmNlbC5kZXYiLCJ2''@;'; put 'put ''dXNlcmNvbnRlbnQubmV0Iiwibm93LnNoIiwiMjAzOC5pbyIsInJvdXRlci5tYW5hZ2VtZW50Iiwidi1pbmZvLmluZm8iLCJ2b29ybG9wZXIuY2xvdWQiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIndlYmZsb3cuaW8iLCJ3ZWJmbG93dGVzdC5pbyIsIioud2ViaGFy''@;'; put 'put ''ZS5kZXYiLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0aGZsaWdodC5jb20iLCJyZXNlcnZlLW9ubGluZS5jb20iLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJjcHJhcGlkLmNvbSIsInBsZXNrbnMuY29tIiwid3AyLmhvc3QiLCJwZG5zLnBhZ2UiLCJwbGVzay5wYWdlIiwid3BzcXVhcmVkLnNp''@;'; put 'put ''dGUiLCIqLndhZGwudG9wIiwicmVtb3Rld2QuY29tIiwiYm94LmNhIiwicGFnZXMud2lhcmR3ZWIuY29tIiwidG9vbGZvcmdlLm9yZyIsIndtY2xvdWQub3JnIiwid21mbGFicy5vcmciLCJ3ZGguYXBwIiwicGFuZWwuZ2ciLCJkYWVtb24ucGFuZWwuZ2ciLCJ3aXhzaXRlLmNvbSIsIndpeHN0''@;'; put 'put ''dWRpby5jb20iLCJlZGl0b3J4LmlvIiwid2l4c3R1ZGlvLmlvIiwid2l4LnJ1biIsIm1lc3N3aXRoZG5zLmNvbSIsIndvbHRsYWItZGVtby5jb20iLCJteWZvcnVtLmNvbW11bml0eSIsImNvbW11bml0eS1wcm8uZGUiLCJkaXNrdXNzaW9uc2JlcmVpY2guZGUiLCJjb21tdW5pdHktcHJvLm5l''@;'; put 'put ''dCIsIm1laW5mb3J1bS5uZXQiLCJhZmZpbml0eWxvdHRlcnkub3JnLnVrIiwicmFmZmxlZW50cnkub3JnLnVrIiwid2Vla2x5bG90dGVyeS5vcmcudWsiLCJ3cGVuZ2luZXBvd2VyZWQuY29tIiwianMud3BlbmdpbmVwb3dlcmVkLmNvbSIsImhhbGYuaG9zdCIsInhuYmF5LmNvbSIsInUyLnhu''@;'; put 'put ''YmF5LmNvbSIsInUyLWxvY2FsLnhuYmF5LmNvbSIsImNpc3Ryb24ubmwiLCJkZW1vbi5ubCIsInhzNGFsbC5zcGFjZSIsInlhbmRleGNsb3VkLm5ldCIsInN0b3JhZ2UueWFuZGV4Y2xvdWQubmV0Iiwid2Vic2l0ZS55YW5kZXhjbG91ZC5uZXQiLCJvZmZpY2lhbC5hY2FkZW15IiwieW9sYXNp''@;'; put 'put ''dGUuY29tIiwieW9tYm8ubWUiLCJ5bmguZnIiLCJub2hvc3QubWUiLCJub2hvLnN0IiwiemEubmV0IiwiemEub3JnIiwiemFwLmNsb3VkIiwiemVhYnVyLmFwcCIsImJzcy5kZXNpZ24iLCJiYXNpY3NlcnZlci5pbyIsInZpcnR1YWxzZXJ2ZXIuaW8iLCJlbnRlcnByaXNlY2xvdWQubnUiXS5y''@;'; put 'put ''ZWR1Y2UoKFkscSk9Pntjb25zdCBlZT1xLnJlcGxhY2UoL14oXCpcLnxcISkvLCIiKSxKPXcudG9BU0NJSShlZSksbmU9cS5jaGFyQXQoMCk7aWYoWS5oYXMoSikpdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSBydWxlcyBmb3VuZCBmb3IgJHtxfSAoJHtKfSlgKTtyZXR1cm4gWS5zZXQoSix7''@;'; put 'put ''cnVsZTpxLHN1ZmZpeDplZSxwdW55U3VmZml4Okosd2lsZGNhcmQ6IioiPT09bmUsZXhjZXB0aW9uOiIhIj09PW5lfSksWX0sbmV3IE1hcCksej17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21haW4gbmFtZSB0b28gbG9uZy4g''@;'; put 'put ''SXQgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyNTUgY2hhcnMuIixMQUJFTF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3QgZW5kIHdpdGgg''@;'; put 'put ''YSBkYXNoLiIsTEFCRUxfVE9PX0xPTkc6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25nLiIsTEFCRUxfSU5WQUxJRF9D''@;'; put 'put ''SEFSUzoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sTD1ZPT57aWYoInN0cmluZyIhPXR5cGVvZiBZKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuIik7bGV0IHE9''@;'; put 'put ''WS5zbGljZSgwKS50b0xvd2VyQ2FzZSgpOyIuIj09PXEuY2hhckF0KHEubGVuZ3RoLTEpJiYocT1xLnNsaWNlKDAscS5sZW5ndGgtMSkpO2NvbnN0IGVlPShZPT57Y29uc3QgcT13LnRvQVNDSUkoWSk7aWYocS5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYocS5sZW5ndGg+''@;'; put 'put ''MjU1KXJldHVybiJET01BSU5fVE9PX0xPTkciO2NvbnN0IGVlPXEuc3BsaXQoIi4iKTtsZXQgSjtmb3IobGV0IG5lPTA7bmU8ZWUubGVuZ3RoOysrbmUpe2lmKEo9ZWVbbmVdLCFKLmxlbmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihKLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9P''@;'; put 'put ''X0xPTkciO2lmKCItIj09PUouY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1KLmNoYXJBdChKLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV9dKyQvLnRlc3QoSikpcmV0dXJuIkxBQkVMX0lOVkFM''@;'; put 'put ''SURfQ0hBUlMifX0pKHEpO2lmKGVlKXJldHVybntpbnB1dDpZLGVycm9yOnttZXNzYWdlOnpbZWVdLGNvZGU6ZWV9fTtjb25zdCBKPXtpbnB1dDpZLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0sbmU9cS5zcGxpdCgiLiIpO2lmKCJsb2Nh''@;'; put 'put ''bCI9PT1uZVtuZS5sZW5ndGgtMV0pcmV0dXJuIEo7Y29uc3QgaWU9KCk9PigveG4tLS8udGVzdChxKSYmKEouZG9tYWluJiYoSi5kb21haW49dy50b0FTQ0lJKEouZG9tYWluKSksSi5zdWJkb21haW4mJihKLnN1YmRvbWFpbj13LnRvQVNDSUkoSi5zdWJkb21haW4pKSksSiksbGU9KFk9Pntj''@;'; put 'put ''b25zdCBxPXcudG9BU0NJSShZKS5zcGxpdCgiLiIpO2ZvcihsZXQgZWU9MDtlZTxxLmxlbmd0aDtlZSsrKXtjb25zdCBKPXEuc2xpY2UoZWUpLmpvaW4oIi4iKSxuZT1GLmdldChKKTtpZihuZSlyZXR1cm4gbmV9cmV0dXJuIG51bGx9KShxKTtpZighbGUpcmV0dXJuIG5lLmxlbmd0aDwyP0o6''@;'; put 'put ''KEoudGxkPW5lLnBvcCgpLEouc2xkPW5lLnBvcCgpLEouZG9tYWluPVtKLnNsZCxKLnRsZF0uam9pbigiLiIpLG5lLmxlbmd0aCYmKEouc3ViZG9tYWluPW5lLnBvcCgpKSxpZSgpKTtKLmxpc3RlZD0hMDtjb25zdCBtZT1sZS5zdWZmaXguc3BsaXQoIi4iKSxfZT1uZS5zbGljZSgwLG5lLmxl''@;'; put 'put ''bmd0aC1tZS5sZW5ndGgpO3JldHVybiBsZS5leGNlcHRpb24mJl9lLnB1c2gobWUuc2hpZnQoKSksSi50bGQ9bWUuam9pbigiLiIpLCFfZS5sZW5ndGh8fChsZS53aWxkY2FyZCYmKG1lLnVuc2hpZnQoX2UucG9wKCkpLEoudGxkPW1lLmpvaW4oIi4iKSksIV9lLmxlbmd0aCl8fChKLnNsZD1f''@;'; put 'put ''ZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxfZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1fZS5qb2luKCIuIikpKSxpZSgpfSxLPVk9PlkmJkwoWSkuZG9tYWlufHxudWxsLFU9WT0+e2NvbnN0IHE9TChZKTtyZXR1cm4hKCFxLmRvbWFpbnx8IXEubGlzdGVkKX07WC5k''@;'; put 'put ''ZWZhdWx0PXtwYXJzZTpMLGdldDpLLGlzVmFsaWQ6VX0sWC5lcnJvckNvZGVzPXosWC5nZXQ9SyxYLmlzVmFsaWQ9VSxYLnBhcnNlPUx9LDQ5NDY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4''@;'; put 'put ''LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2Rl''@;'; put 'put ''IjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5''@;'; put 'put ''cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFl''@;'; put 'put ''czE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6''@;'; put 'put ''IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTky''@;'; put 'put ''LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYi''@;'; put 'put ''OjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwi''@;'; put 'put ''bW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJP''@;'; put 'put ''RkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBl''@;'; put 'put ''Ijoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFt''@;'; put 'put ''In0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1n''@;'; put 'put ''Y20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoi''@;'; put 'put ''c2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNB''@;'; put 'put ''RW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2''@;'; put 'put ''NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJz''@;'; put 'put ''aGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hB''@;'; put 'put ''NTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9''@;'; put 'put ''LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0''@;'; put 'put ''Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIs''@;'; put 'put ''Imhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQi''@;'; put 'put ''LCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0''@;'; put 'put ''IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJp''@;'; put 'put ''ZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAi''@;'; put 'put ''Onsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0s''@;'; put 'put ''IlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSwxMzA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMu''@;'; put 'put ''MTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMzIwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFy''@;'; put 'put ''c2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkx''@;'; put 'put ''NTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwi''@;'; put 'put ''U19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJF''@;'; put 'put ''QUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6''@;'; put 'put ''NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjky''@;'; put 'put ''LCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04i''@;'; put 'put ''OjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJP''@;'; put 'put ''VE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIs''@;'; put 'put ''IkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VU''@;'; put 'put ''Ijo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lH''@;'; put 'put ''VVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwi''@;'; put 'put ''U0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwi''@;'; put 'put ''U1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9F''@;'; put 'put ''TVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9T''@;'; put 'put ''U0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVT''@;'; put 'put ''RV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNT''@;'; put 'put ''TF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NM''@;'; put 'put ''X09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NM''@;'; put 'put ''X09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01F''@;'; put 'put ''VEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9E''@;'; put 'put ''X1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9O''@;'; put 'put ''T1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9Q''@;'; put 'put ''U1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9''@;'; put 'put ''Jyl9LDk3OTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEw''@;'; put 'put ''ODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIx''@;'; put 'put ''NjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2Yjdl''@;'; put 'put ''ZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBi''@;'; put 'put ''YmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFl''@;'; put 'put ''Y2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsi''@;'; put 'put ''Z2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0''@;'; put 'put ''ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1''@;'; put 'put ''NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZh''@;'; put 'put ''MDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRk''@;'; put 'put ''ZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0''@;'; put 'put ''ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZm''@;'; put 'put ''NGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNk''@;'; put 'put ''NzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk''@;'; put 'put ''ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRj''@;'; put 'put ''ZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5''@;'; put 'put ''OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIy''@;'; put 'put ''NjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJh''@;'; put 'put ''NWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNk''@;'; put 'put ''MDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0''@;'; put 'put ''ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdj''@;'; put 'put ''NGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2Uz''@;'; put 'put ''YmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVh''@;'; put 'put ''NzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3''@;'; put 'put ''NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMw''@;'; put 'put ''NWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3''@;'; put 'put ''NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAx''@;'; put 'put ''YzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAz''@;'; put 'put ''N2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9''@;'; put 'put ''LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1''@;'; put 'put ''NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNh''@;'; put 'put ''M2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1''@;'; put 'put ''MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZm''@;'; put 'put ''YTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZh''@;'; put 'put ''ZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFh''@;'; put 'put ''OTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNl''@;'; put 'put ''ZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2Zi''@;'; put 'put ''ZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2''@;'; put 'put ''MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2Fh''@;'; put 'put ''YjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1''@;'; put 'put ''YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUz''@;'; put 'put ''ODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDg1OTc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17aTg6IjYuNi4xIn19LDI1NjI6dWU9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEu''@;'; put 'put ''MTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMu''@;'; put 'put ''NC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40''@;'; put 'put ''NCI6ImFlcy0yNTYtY2ZiIn0nKX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fKHVlKXt2YXIgWD1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdWVdO2lmKHZvaWQgMCE9PVgpcmV0dXJuIFguZXhwb3J0czt2''@;'; put 'put ''YXIgeT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdWVdPXtpZDp1ZSxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdWVdLmNhbGwoeS5leHBvcnRzLHkseS5leHBvcnRzLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18pLHkubG9hZGVk''@;'; put 'put ''PSEwLHkuZXhwb3J0c31fX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLmQ9KHVlLFgpPT57Zm9yKHZhciB5IGluIFgpX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXy5vKFgseSkmJiFfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLm8odWUseSkmJk9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSx5LHtlbnVtZXJhYmxlOiEwLGdldDpYW3ldfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8''@;'; put 'put ''fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18ubz0odWUsWCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1''@;'; put 'put ''ZSxYKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLnI9dWU9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eSh1ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18ubm1kPXVlPT4odWUucGF0aHM9W10sdWUuY2hpbGRyZW58fCh1ZS5jaGlsZHJlbj1bXSksdWUpO3ZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz1fX25lc3RlZF93''@;'; put 'put ''ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fKDM2MDcpO3JldHVybiBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfX30pKCksbW9kdWxlLmV4cG9ydHM9eSgpfSw1OTQ4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlv''@;'; put 'put ''bihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0''@;'; put 'put ''b3I9dm9pZCAwO2NvbnN0IF89SSh5KDEyOTU0KSk7WC51cmxWYWxpZGF0b3I9KEYsTyk9PiEhXy5kZWZhdWx0LmlzSHR0cFVyaShGKXx8ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShGKXx8IiI9PT1GfHxPLFguY29uZmlybWF0aW9uVmFsaWRhdG9yPUY9PiEwPT09Rnx8ITE9PT1GLFguY2hvaWNl''@;'; put 'put ''VmFsaWRhdG9yPShGLE8seik9PkY+MCYmRjw9T3x8eixYLmlzU3BlY2lhbE1pc3Npbmc9Rj0+KCJzdHJpbmciIT10eXBlb2YgRnx8IUYuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChGKX0sMTMyNDc6KHVlLFgpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBfO1guWT12b2lkIDAsKF89WC5ZfHwoWC5ZPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsXy5TYXM5PSJTQVM5IixfLlNhc2pzPSJTQVNKUyJ9LDI1MDAxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLkM9dm9pZCAwLFguQz0oXyxnPTEsQj0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1f''@;'; put 'put ''KXJldHVybiIwIEIiO189Xz5CP0I6Xztjb25zdCBGPWc8MD8wOmcsTz1NYXRoLmZsb29yKE1hdGgubG9nKF8pL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oXy9NYXRoLnBvdygxMDI0LE8pKS50b0ZpeGVkKEYpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW09dfX0sNDI5MjQ6ZnVuY3Rp''@;'; put 'put ''b24odWUpe3ZhciBYPXt2ZXJzaW9uOiIxLjE1LjAifTtYWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4''@;'; put 'put ''MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4''@;'; put 'put ''ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUy''@;'; put 'put ''NTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZj''@;'; put 'put ''XHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlc''@;'; put 'put ''dTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYm''@;'; put 'put ''KF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx''@;'; put 'put ''Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUw''@;'; put 'put ''MTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAx''@;'; put 'put ''N2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUy''@;'; put 'put ''NTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2Ix''@;'; put 'put ''XHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVh''@;'; put 'put ''MFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4''@;'; put 'put ''MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNk''@;'; put 'put ''ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUw''@;'; put 'put ''M2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTky''@;'; put 'put ''XHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUy''@;'; put 'put ''NTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2Ni''@;'; put 'put ''XHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNo''@;'; put 'put ''YXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4''@;'; put 'put ''MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4''@;'; put 'put ''ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRc''@;'; put 'put ''eGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1''@;'; put 'put ''NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRc''@;'; put 'put ''eGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5j''@;'; put 'put ''Ol8sZGVjOkl9fSgpLFhbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYn''@;'; put 'put ''KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRc''@;'; put 'put ''dTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4''@;'; put 'put ''YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1Njlc''@;'; put 'put ''dTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0''@;'; put 'put ''XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChn''@;'; put 'put ''KSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1''@;'; put 'put ''XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUw''@;'; put 'put ''XHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRc''@;'; put 'put ''eGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1''@;'; put 'put ''NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhi''@;'; put 'put ''NFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntl''@;'; put 'put ''bmM6XyxkZWM6SX19KCksWFs4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQl''@;'; put 'put ''JicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhl''@;'; put 'put ''Nlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1''@;'; put 'put ''MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2''@;'; put 'put ''NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2''@;'; put 'put ''XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1n''@;'; put 'put ''KSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh''@;'; put 'put ''XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4''@;'; put 'put ''XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5''@;'; put 'put ''Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1''@;'; put 'put ''MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUw''@;'; put 'put ''Mzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJD''@;'; put 'put ''b2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc''@;'; put 'put ''eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQx''@;'; put 'put ''Mlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1''@;'; put 'put ''MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2''@;'; put 'put ''M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1''@;'; put 'put ''MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQw''@;'; put 'put ''MVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFy''@;'; put 'put ''QXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRc''@;'; put 'put ''eDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1''@;'; put 'put ''MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUy''@;'; put 'put ''MFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1''@;'; put 'put ''N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODk1''@;'; put 'put ''XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5''@;'; put 'put ''Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUw''@;'; put 'put ''MTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1''@;'; put 'put ''OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc''@;'; put 'put ''dTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1''@;'; put 'put ''MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0''@;'; put 'put ''KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbOTMyXT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4''@;'; put 'put ''MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1''@;'; put 'put ''ZmY3N1x1ZmY3OFx1ZmY3OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5''@;'; put 'put ''Mlx1ZmY5M1x1ZmY5NFx1ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAx''@;'; put 'put ''XHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThc''@;'; put 'put ''dTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIy''@;'; put 'put ''NjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVj''@;'; put 'put ''N1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1''@;'; put 'put ''MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1''@;'; put 'put ''MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMjld''@;'; put 'put ''W2ddXT0zMzAyNCtnLHlbMzMwMjQrZ109X1sxMjldW2ddKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZc''@;'; put 'put ''dWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''NDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMw''@;'; put 'put ''NWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVc''@;'; put 'put ''dTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMw''@;'; put 'put ''OTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMF1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxMzBdW2ddXT0zMzI4MCtnLHlbMzMyODArZ109X1sxMzBdW2ddKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMw''@;'; put 'put ''YTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRc''@;'; put 'put ''dTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZm''@;'; put 'put ''ZmRcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAz''@;'; put 'put ''YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRc''@;'; put 'put ''dTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMV1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW2ddXT0zMzUzNitnLHlbMzM1MzYrZ109X1sxMzFdW2ddKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0''@;'; put 'put ''MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0''@;'; put 'put ''M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1''@;'; put 'put ''NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzJdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW2ddXT0zMzc5MitnLHlbMzM3OTIrZ109X1sxMzJdW2ddKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0''@;'; put 'put ''NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlc''@;'; put 'put ''dTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVc''@;'; put 'put ''dTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzVdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW2ddXT0zNDU2MCtnLHlbMzQ1NjArZ109X1sxMzVdW2ddKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgy''@;'; put 'put ''YTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRc''@;'; put 'put ''dTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgw''@;'; put 'put ''YjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW2ddXT0zNDgxNitnLHlbMzQ4MTYrZ109X1sxMzZdW2ddKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2''@;'; put 'put ''NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZc''@;'; put 'put ''dTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5''@;'; put 'put ''YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdc''@;'; put 'put ''dTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVj''@;'; put 'put ''NGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdc''@;'; put 'put ''dTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcy''@;'; put 'put ''NTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW2ddXT0zNTA3MitnLHlbMzUwNzIrZ109X1sxMzddW2ddKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJc''@;'; put 'put ''dTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2''@;'; put 'put ''OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZc''@;'; put 'put ''dTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4''@;'; put 'put ''MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFc''@;'; put 'put ''dTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdm''@;'; put 'put ''ZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW2ddXT0zNTMyOCtnLHlbMzUzMjgrZ109X1sxMzhdW2ddKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNc''@;'; put 'put ''dTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2''@;'; put 'put ''NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJc''@;'; put 'put ''dTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1''@;'; put 'put ''YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFc''@;'; put 'put ''dTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0''@;'; put 'put ''MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW2ddXT0zNTU4NCtnLHlbMzU1ODQrZ109X1sxMzldW2ddKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhc''@;'; put 'put ''dTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdl''@;'; put 'put ''NGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBc''@;'; put 'put ''dThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgw''@;'; put 'put ''YTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRc''@;'; put 'put ''dTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUz''@;'; put 'put ''NDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFc''@;'; put 'put ''dTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW2ddXT0zNTg0MCtnLHlbMzU4NDArZ109X1sxNDBdW2ddKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhc''@;'; put 'put ''dTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgx''@;'; put 'put ''NTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBc''@;'; put 'put ''dThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYw''@;'; put 'put ''NjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJc''@;'; put 'put ''dTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3''@;'; put 'put ''MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRc''@;'; put 'put ''dTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW2ddXT0zNjA5NitnLHlbMzYwOTYrZ109X1sxNDFdW2ddKTtmb3IoX1sxNDJd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJc''@;'; put 'put ''dTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4''@;'; put 'put ''ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJc''@;'; put 'put ''dTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1''@;'; put 'put ''ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFc''@;'; put 'put ''dTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3''@;'; put 'put ''NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhc''@;'; put 'put ''dTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW2ddXT0zNjM1MitnLHlbMzYzNTIrZ109X1sxNDJdW2dd''@;'; put 'put ''KTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZc''@;'; put 'put ''dTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdl''@;'; put 'put ''MmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdc''@;'; put 'put ''dTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUz''@;'; put 'put ''ZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJc''@;'; put 'put ''dTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThh''@;'; put 'put ''NTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNc''@;'; put 'put ''dTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW2ddXT0zNjYwOCtnLHlbMzY2MDgr''@;'; put 'put ''Z109X1sxNDNdW2ddKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFc''@;'; put 'put ''dTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkw''@;'; put 'put ''MzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThc''@;'; put 'put ''dTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0''@;'; put 'put ''N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRc''@;'; put 'put ''dTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4''@;'; put 'put ''YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlc''@;'; put 'put ''dTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW2ddXT0zNjg2''@;'; put 'put ''NCtnLHlbMzY4NjQrZ109X1sxNDRdW2ddKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRc''@;'; put 'put ''dTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdk''@;'; put 'put ''NDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2Zjlc''@;'; put 'put ''dTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYx''@;'; put 'put ''OGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRc''@;'; put 'put ''dTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYy''@;'; put 'put ''MzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVc''@;'; put 'put ''dTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''NDVdW2ddXT0zNzEyMCtnLHlbMzcxMjArZ109X1sxNDVdW2ddKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFc''@;'; put 'put ''dThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVm''@;'; put 'put ''M2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBc''@;'; put 'put ''dTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUx''@;'; put 'put ''Y2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1Nzdc''@;'; put 'put ''dTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1''@;'; put 'put ''MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNc''@;'; put 'put ''dTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Nl1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxNDZdW2ddXT0zNzM3NitnLHlbMzczNzYrZ109X1sxNDZdW2ddKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVc''@;'; put 'put ''dTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1''@;'; put 'put ''MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNc''@;'; put 'put ''dWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdi''@;'; put 'put ''NTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNc''@;'; put 'put ''dTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkx''@;'; put 'put ''NDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdc''@;'; put 'put ''dTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0N11b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW2ddXT0zNzYzMitnLHlbMzc2MzIrZ109X1sxNDddW2ddKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2Rc''@;'; put 'put ''dThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2''@;'; put 'put ''YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3Zjlc''@;'; put 'put ''dTVhOTJcdTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2''@;'; put 'put ''ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZc''@;'; put 'put ''dTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcx''@;'; put 'put ''NjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2Jc''@;'; put 'put ''dTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDhdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW2ddXT0zNzg4OCtnLHlbMzc4ODgrZ109X1sxNDhdW2ddKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlc''@;'; put 'put ''dTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVl''@;'; put 'put ''ZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNc''@;'; put 'put ''dTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5''@;'; put 'put ''NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVc''@;'; put 'put ''dTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdi''@;'; put 'put ''ODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFc''@;'; put 'put ''dTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDldLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW2ddXT0zODE0NCtnLHlbMzgxNDQrZ109X1sxNDldW2ddKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFc''@;'; put 'put ''dTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3''@;'; put 'put ''MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBc''@;'; put 'put ''dTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUz''@;'; put 'put ''YzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFc''@;'; put 'put ''dTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTll''@;'; put 'put ''YmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFc''@;'; put 'put ''dTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1sxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW2ddXT0zODQwMCtnLHlbMzg0MDArZ109X1sxNTBdW2ddKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5''@;'; put 'put ''MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFc''@;'; put 'put ''dThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVk''@;'; put 'put ''NTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNc''@;'; put 'put ''dTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkw''@;'; put 'put ''N2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFc''@;'; put 'put ''dTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1sxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW2ddXT0zODY1NitnLHlbMzg2NTYrZ109X1sxNTFdW2ddKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkw''@;'; put 'put ''Y2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVc''@;'; put 'put ''dThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRm''@;'; put 'put ''NTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFc''@;'; put 'put ''dTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW2ddXT0zODkxMitnLHlbMzg5MTIrZ109X1sxNTJdW2ddKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUx''@;'; put 'put ''M2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNc''@;'; put 'put ''dTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUy''@;'; put 'put ''NGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZc''@;'; put 'put ''dTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUz''@;'; put 'put ''NjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRc''@;'; put 'put ''dTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0''@;'; put 'put ''YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW2ddXT0zOTE2OCtnLHlbMzkxNjgrZ109X1sxNTNdW2ddKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1''@;'; put 'put ''NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRc''@;'; put 'put ''dTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2''@;'; put 'put ''YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZc''@;'; put 'put ''dTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4''@;'; put 'put ''MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNc''@;'; put 'put ''dTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5''@;'; put 'put ''NjdcdTU5NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW2ddXT0zOTQyNCtnLHlbMzk0MjQrZ109X1sxNTRdW2ddKTtmb3IoX1sxNTVdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVh''@;'; put 'put ''NDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2Vc''@;'; put 'put ''dTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTVi''@;'; put 'put ''ZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZc''@;'; put 'put ''dTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVk''@;'; put 'put ''MTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZc''@;'; put 'put ''dTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVl''@;'; put 'put ''YzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW2ddXT0zOTY4MCtnLHlbMzk2ODArZ109X1sxNTVdW2ddKTtmb3IoX1sx''@;'; put 'put ''NTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVm''@;'; put 'put ''MDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFc''@;'; put 'put ''dTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYw''@;'; put 'put ''MjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJc''@;'; put 'put ''dTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYx''@;'; put 'put ''M2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdc''@;'; put 'put ''dTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYy''@;'; put 'put ''MDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW2ddXT0zOTkzNitnLHlbMzk5MzYrZ109X1sxNTZd''@;'; put 'put ''W2ddKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYy''@;'; put 'put ''ODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdc''@;'; put 'put ''dTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYz''@;'; put 'put ''YzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVc''@;'; put 'put ''dTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1''@;'; put 'put ''MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlc''@;'; put 'put ''dTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2''@;'; put 'put ''ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW2ddXT00MDE5MitnLHlbNDAx''@;'; put 'put ''OTIrZ109X1sxNTddW2ddKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3''@;'; put 'put ''MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZc''@;'; put 'put ''dTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4''@;'; put 'put ''NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRc''@;'; put 'put ''dTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5''@;'; put 'put ''M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRc''@;'; put 'put ''dTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZh''@;'; put 'put ''NTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW2ddXT00''@;'; put 'put ''MDQ0OCtnLHlbNDA0NDgrZ109X1sxNThdW2ddKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZh''@;'; put 'put ''YWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2Zc''@;'; put 'put ''dTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZj''@;'; put 'put ''MTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFc''@;'; put 'put ''dTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZk''@;'; put 'put ''ZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNc''@;'; put 'put ''dTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZl''@;'; put 'put ''OWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxNTldW2ddXT00MDcwNCtnLHlbNDA3MDQrZ109X1sxNTldW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZm''@;'; put 'put ''NWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFc''@;'; put 'put ''dTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcw''@;'; put 'put ''ZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNc''@;'; put 'put ''dTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcy''@;'; put 'put ''YTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhc''@;'; put 'put ''dTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0''@;'; put 'put ''NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0''@;'; put 'put ''ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1Nzhc''@;'; put 'put ''dTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1''@;'; put 'put ''ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2Njhc''@;'; put 'put ''dTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2''@;'; put 'put ''ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVc''@;'; put 'put ''dTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4''@;'; put 'put ''ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIy''@;'; put 'put ''NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5''@;'; put 'put ''MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFc''@;'; put 'put ''dTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdh''@;'; put 'put ''YTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNc''@;'; put 'put ''dTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdi''@;'; put 'put ''OGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdc''@;'; put 'put ''dTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdj''@;'; put 'put ''YjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdk''@;'; put 'put ''MGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRc''@;'; put 'put ''dTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdl''@;'; put 'put ''M2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJc''@;'; put 'put ''dTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdm''@;'; put 'put ''ODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRc''@;'; put 'put ''dTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgw''@;'; put 'put ''OWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjdd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgx''@;'; put 'put ''NDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBc''@;'; put 'put ''dTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgy''@;'; put 'put ''NDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRc''@;'; put 'put ''dTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgz''@;'; put 'put ''OWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRc''@;'; put 'put ''dTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0''@;'; put 'put ''ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVc''@;'; put 'put ''dTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2''@;'; put 'put ''YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2Jc''@;'; put 'put ''dTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3''@;'; put 'put ''YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJc''@;'; put 'put ''dTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4''@;'; put 'put ''ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNc''@;'; put 'put ''dTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThh''@;'; put 'put ''YTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBc''@;'; put 'put ''dThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThi''@;'; put 'put ''OWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNc''@;'; put 'put ''dThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThk''@;'; put 'put ''OTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRc''@;'; put 'put ''dThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThm''@;'; put 'put ''MjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZc''@;'; put 'put ''dTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkw''@;'; put 'put ''NjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThc''@;'; put 'put ''dTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTky''@;'; put 'put ''MWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRc''@;'; put 'put ''dTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVc''@;'; put 'put ''dTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0''@;'; put 'put ''NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2Rc''@;'; put 'put ''dTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2''@;'; put 'put ''OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlc''@;'; put 'put ''dTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3''@;'; put 'put ''OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJc''@;'; put 'put ''dTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRc''@;'; put 'put ''dTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5''@;'; put 'put ''ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlc''@;'; put 'put ''dTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTli''@;'; put 'put ''MjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2Fc''@;'; put 'put ''dTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTlj''@;'; put 'put ''MjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJc''@;'; put 'put ''dTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3Io''@;'; put 'put ''X1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRc''@;'; put 'put ''dTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTll''@;'; put 'put ''OWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdc''@;'; put 'put ''dTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUx''@;'; put 'put ''ZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1sy''@;'; put 'put ''MzRdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNc''@;'; put 'put ''dTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUy''@;'; put 'put ''YzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJc''@;'; put 'put ''dTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYw''@;'; put 'put ''ODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJc''@;'; put 'put ''dTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZi''@;'; put 'put ''ZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJc''@;'; put 'put ''dTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlb''@;'; put 'put ''NjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFc''@;'; put 'put ''dTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdh''@;'; put 'put ''ZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBc''@;'; put 'put ''dWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkx''@;'; put 'put ''ZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNc''@;'; put 'put ''dTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3''@;'; put 'put ''NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJc''@;'; put 'put ''dTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2dd''@;'; put 'put ''XT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBc''@;'; put 'put ''dTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2''@;'; put 'put ''ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRc''@;'; put 'put ''dTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4''@;'; put 'put ''OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRc''@;'; put 'put ''dTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2''@;'; put 'put ''MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZc''@;'; put 'put ''dTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MF1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syNTBdW2ddXT02NGUzK2cseVs2NGUzK2ddPV9bMjUwXVtnXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2''@;'; put 'put ''ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2Qy''@;'; put 'put ''XHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVm''@;'; put 'put ''YTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5''@;'; put 'put ''XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVm''@;'; put 'put ''YTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQw''@;'; put 'put ''XHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5''@;'; put 'put ''NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTFdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjUxXVtnXV09NjQyNTYrZyx5WzY0MjU2K2ddPV9bMjUxXVtnXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5''@;'; put 'put ''ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sy''@;'; put 'put ''NTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtnXV09NjQ1MTIrZyx5WzY0NTEyK2ddPV9bMjUyXVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzkzNl09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc''@;'; put 'put ''eDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr''@;'; put 'put ''bG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUx''@;'; put 'put ''Mlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1''@;'; put 'put ''NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4''@;'; put 'put ''NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1''@;'; put 'put ''NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYw''@;'; put 'put ''Ylx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1''@;'; put 'put ''NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4''@;'; put 'put ''MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEyOV0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEyOV1bZ11dPTMzMDI0K2cseVszMzAyNCtnXT1fWzEyOV1bZ10pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZi''@;'; put 'put ''MFx1NGZiMVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1''@;'; put 'put ''NGZkNlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAw''@;'; put 'put ''Nlx1NTAwN1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1''@;'; put 'put ''NTAzNFx1NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1''@;'; put 'put ''OVx1NTA1Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1''@;'; put 'put ''NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5''@;'; put 'put ''ZFx1NTA5ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMF0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMF1bZ11dPTMzMjgwK2cseVszMzI4MCtnXT1fWzEzMF1bZ10pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBi''@;'; put 'put ''ZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1''@;'; put 'put ''NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEw''@;'; put 'put ''MFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1''@;'; put 'put ''NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEz''@;'; put 'put ''Ylx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1''@;'; put 'put ''NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFh''@;'; put 'put ''OVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzEzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMV1bZ11dPTMzNTM2K2cseVszMzUzNitnXT1fWzEzMV1bZ10pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1''@;'; put 'put ''NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0''@;'; put 'put ''OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1''@;'; put 'put ''NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5''@;'; put 'put ''Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1''@;'; put 'put ''NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJl''@;'; put 'put ''YVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzEzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMl1bZ11dPTMzNzkyK2cseVszMzc5MitnXT1fWzEzMl1bZ10pO2ZvcihfWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1''@;'; put 'put ''NTMzNlx1NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3''@;'; put 'put ''Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1''@;'; put 'put ''NTNhYlx1NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNk''@;'; put 'put ''M1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1''@;'; put 'put ''NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2''@;'; put 'put ''YVx1NTQ2Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1''@;'; put 'put ''NTRhMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzM11bZ11dPTM0MDQ4K2cseVszNDA0OCtnXT1fWzEzM11bZ10pO2ZvcihfWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1''@;'; put 'put ''NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUx''@;'; put 'put ''NVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1''@;'; put 'put ''NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2''@;'; put 'put ''Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1''@;'; put 'put ''NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVj''@;'; put 'put ''Ylx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1''@;'; put 'put ''NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNF1bZ11dPTM0MzA0K2cseVszNDMwNCtnXT1fWzEzNF1bZ10pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1''@;'; put 'put ''NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0''@;'; put 'put ''Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1''@;'; put 'put ''NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5''@;'; put 'put ''OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1''@;'; put 'put ''NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZk''@;'; put 'put ''Nlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1''@;'; put 'put ''NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNV1bZ11dPTM0NTYwK2cseVszNDU2MCtnXT1fWzEzNV1bZ10pO2ZvcihfWzEzNl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1''@;'; put 'put ''NTcyYlx1NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2''@;'; put 'put ''M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1''@;'; put 'put ''NTc5NFx1NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdi''@;'; put 'put ''ZVx1NTdiZlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1''@;'; put 'put ''NTdlOVx1NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgx''@;'; put 'put ''Mlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1''@;'; put 'put ''NTgzN1x1NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNl1bZ11dPTM0ODE2K2cseVszNDgxNitnXT1fWzEzNl1bZ10pO2Zvcihf''@;'; put 'put ''WzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1''@;'; put 'put ''NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3''@;'; put 'put ''NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1''@;'; put 'put ''NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThi''@;'; put 'put ''OFx1NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1''@;'; put 'put ''NThkOVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThm''@;'; put 'put ''Y1x1NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1''@;'; put 'put ''NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzN11bZ11dPTM1MDcyK2cseVszNTA3MitnXT1fWzEz''@;'; put 'put ''N11bZ10pO2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1''@;'; put 'put ''NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4''@;'; put 'put ''MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1''@;'; put 'put ''NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlk''@;'; put 'put ''Zlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1''@;'; put 'put ''NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEy''@;'; put 'put ''Zlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1''@;'; put 'put ''NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOF1bZ11dPTM1MzI4K2cseVsz''@;'; put 'put ''NTMyOCtnXT1fWzEzOF1bZ10pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1''@;'; put 'put ''NWE3MVx1NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5''@;'; put 'put ''M1x1NWE5NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1''@;'; put 'put ''NWFiMVx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFk''@;'; put 'put ''OVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1''@;'; put 'put ''NWFmZFx1NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIx''@;'; put 'put ''Ylx1NWIxY1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1''@;'; put 'put ''NWIzYVx1NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOV1bZ11d''@;'; put 'put ''PTM1NTg0K2cseVszNTU4NCtnXT1fWzEzOV1bZ10pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1''@;'; put 'put ''NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5''@;'; put 'put ''Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1''@;'; put 'put ''NWJkNVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJm''@;'; put 'put ''ZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1''@;'; put 'put ''NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2''@;'; put 'put ''N1x1NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1''@;'; put 'put ''NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQwXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE0MF1bZ11dPTM1ODQwK2cseVszNTg0MCtnXT1fWzE0MF1bZ10pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1''@;'; put 'put ''NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNk''@;'; put 'put ''ZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1''@;'; put 'put ''NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQy''@;'; put 'put ''OFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1''@;'; put 'put ''NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3''@;'; put 'put ''MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1''@;'; put 'put ''NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQxXVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE0MV1bZ11dPTM2MDk2K2cseVszNjA5NitnXT1fWzE0MV1bZ10pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1''@;'; put 'put ''NWRhOFx1NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRj''@;'; put 'put ''NFx1NWRjNlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1''@;'; put 'put ''NWRlZFx1ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUy''@;'; put 'put ''M1x1NWUyNFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1''@;'; put 'put ''NWU0ZFx1NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2''@;'; put 'put ''ZVx1NWU2Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1''@;'; put 'put ''NWVhYlx1NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MTQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Ml1bZ11dPTM2MzUyK2cseVszNjM1MitnXT1fWzE0Ml1bZ10pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1''@;'; put 'put ''NWVjZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVl''@;'; put 'put ''Zlx1NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1''@;'; put 'put ''NWYyMlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0''@;'; put 'put ''OFx1NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1''@;'; put 'put ''NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZh''@;'; put 'put ''Ylx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1''@;'; put 'put ''NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0M10ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMTQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0M11bZ11dPTM2NjA4K2cseVszNjYwOCtnXT1fWzE0M11bZ10pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1''@;'; put 'put ''NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0''@;'; put 'put ''MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1''@;'; put 'put ''NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBh''@;'; put 'put ''NFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1''@;'; put 'put ''NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEw''@;'; put 'put ''NFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1''@;'; put 'put ''NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0''@;'; put 'put ''NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NF1bZ11dPTM2ODY0K2cseVszNjg2NCtnXT1fWzE0NF1bZ10pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1''@;'; put 'put ''NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2''@;'; put 'put ''ZFx1NjE2ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1''@;'; put 'put ''NjE4ZFx1NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFh''@;'; put 'put ''ZVx1NjFhZlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1''@;'; put 'put ''NjFkMFx1NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFl''@;'; put 'put ''Zlx1NjFmMFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1''@;'; put 'put ''NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzE0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NV1bZ11dPTM3MTIwK2cseVszNzEyMCtnXT1fWzE0NV1bZ10pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4''@;'; put 'put ''MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1''@;'; put 'put ''NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJm''@;'; put 'put ''YVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1''@;'; put 'put ''NjMzMVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1''@;'; put 'put ''Y1x1NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1''@;'; put 'put ''NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Nl1bZ11dPTM3Mzc2K2cseVszNzM3NitnXT1fWzE0Nl1bZ10pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNl''@;'; put 'put ''Nlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1''@;'; put 'put ''NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQz''@;'; put 'put ''OVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1''@;'; put 'put ''NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4''@;'; put 'put ''OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1''@;'; put 'put ''NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRk''@;'; put 'put ''OVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0N11bZ11dPTM3NjMyK2cseVszNzYzMitnXT1fWzE0N11bZ10pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRm''@;'; put 'put ''NVx1NjRmNlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1''@;'; put 'put ''NjUxNFx1NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUz''@;'; put 'put ''M1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1''@;'; put 'put ''NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4''@;'; put 'put ''OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1''@;'; put 'put ''NjViN1x1NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVl''@;'; put 'put ''M1x1NjVlNFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OF1bZ11dPTM3ODg4K2cseVszNzg4OCtnXT1fWzE0OF1bZ10pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYx''@;'; put 'put ''MVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1''@;'; put 'put ''NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2''@;'; put 'put ''YVx1NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1''@;'; put 'put ''NjY5M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZi''@;'; put 'put ''NVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1''@;'; put 'put ''NjZkM1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZm''@;'; put 'put ''YVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OV1bZ11dPTM4MTQ0K2cseVszODE0NCtnXT1fWzE0OV1bZ10pO2ZvcihfWzE1MF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1Njcy''@;'; put 'put ''Mlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1''@;'; put 'put ''Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4''@;'; put 'put ''Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1''@;'; put 'put ''NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1Njdl''@;'; put 'put ''YVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1''@;'; put 'put ''NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0''@;'; put 'put ''Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MF1bZ11dPTM4NDAwK2cseVszODQwMCtnXT1fWzE1MF1bZ10pO2Zv''@;'; put 'put ''cihfWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3''@;'; put 'put ''YVx1Njg3Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1''@;'; put 'put ''Njg5ZFx1Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1Njhj''@;'; put 'put ''MVx1NjhjM1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1''@;'; put 'put ''NjhlN1x1NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1Njkw''@;'; put 'put ''Y1x1NjkwZlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1''@;'; put 'put ''NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1''@;'; put 'put ''MVx1Njk1Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MV1bZ11dPTM4NjU2K2cseVszODY1NitnXT1f''@;'; put 'put ''WzE1MV1bZ10pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3''@;'; put 'put ''NFx1Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1''@;'; put 'put ''NjlhMVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1Njlj''@;'; put 'put ''NFx1NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1''@;'; put 'put ''NjllOFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEw''@;'; put 'put ''N1x1NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1''@;'; put 'put ''NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0''@;'; put 'put ''Y1x1NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Ml1bZ11dPTM4OTEyK2cs''@;'; put 'put ''eVszODkxMitnXT1fWzE1Ml1bZ10pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2''@;'; put 'put ''YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1''@;'; put 'put ''NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFh''@;'; put 'put ''ZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1''@;'; put 'put ''NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFl''@;'; put 'put ''NFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1''@;'; put 'put ''NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIx''@;'; put 'put ''Ylx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1M11b''@;'; put 'put ''Z11dPTM5MTY4K2cseVszOTE2OCtnXT1fWzE1M11bZ10pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIz''@;'; put 'put ''ZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1''@;'; put 'put ''NmI2MFx1NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4''@;'; put 'put ''ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1''@;'; put 'put ''NmJiMVx1NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJk''@;'; put 'put ''Zlx1NmJlMFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1''@;'; put 'put ''NmMwM1x1NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMz''@;'; put 'put ''ZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU0XVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE1NF1bZ11dPTM5NDI0K2cseVszOTQyNCtnXT1fWzE1NF1bZ10pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2''@;'; put 'put ''Y1x1NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1''@;'; put 'put ''NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZm''@;'; put 'put ''ZFx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1''@;'; put 'put ''NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0''@;'; put 'put ''Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1''@;'; put 'put ''NmQ3YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRi''@;'; put 'put ''MFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU1XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE1NV1bZ11dPTM5NjgwK2cseVszOTY4MCtnXT1fWzE1NV1bZ10pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRk''@;'; put 'put ''NFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1''@;'; put 'put ''NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUz''@;'; put 'put ''M1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1''@;'; put 'put ''NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3''@;'; put 'put ''OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1''@;'; put 'put ''NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVj''@;'; put 'put ''YVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Nl0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTU2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Nl1bZ11dPTM5OTM2K2cseVszOTkzNitnXT1fWzE1Nl1bZ10pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVm''@;'; put 'put ''NVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1''@;'; put 'put ''NmYxOVx1NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYz''@;'; put 'put ''Zlx1NmY0MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1''@;'; put 'put ''NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4''@;'; put 'put ''Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1''@;'; put 'put ''NmZhYVx1NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZj''@;'; put 'put ''Ylx1NmZjY1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1N10ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTU3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1N11bZ11dPTQwMTkyK2cseVs0MDE5MitnXT1fWzE1N11bZ10pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZl''@;'; put 'put ''OFx1NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1''@;'; put 'put ''NzAwNlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAy''@;'; put 'put ''NVx1NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1''@;'; put 'put ''NzA0Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2''@;'; put 'put ''MFx1NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1''@;'; put 'put ''NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBi''@;'; put 'put ''NVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzE1OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OF1bZ11dPTQwNDQ4K2cseVs0MDQ0OCtnXT1fWzE1OF1bZ10pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBk''@;'; put 'put ''Y1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1''@;'; put 'put ''NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEy''@;'; put 'put ''YVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1''@;'; put 'put ''NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2''@;'; put 'put ''Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1''@;'; put 'put ''NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFi''@;'; put 'put ''N1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzE1OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OV1bZ11dPTQwNzA0K2cseVs0MDcwNCtnXT1fWzE1OV1bZ10pO2ZvcihfWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1''@;'; put 'put ''NzFmNFx1NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIx''@;'; put 'put ''MVx1NzIxMlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1''@;'; put 'put ''NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1''@;'; put 'put ''ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1''@;'; put 'put ''NzI4ZVx1NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJh''@;'; put 'put ''ZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MF1bZ11dPTQwOTYwK2cseVs0MDk2MCtnXT1fWzE2MF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVm''@;'; put 'put ''ZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBm''@;'; put 'put ''XHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhi''@;'; put 'put ''MFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtnXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1''@;'; put 'put ''XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUy''@;'; put 'put ''NDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5WzQxNDcyK2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVm''@;'; put 'put ''ZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0''@;'; put 'put ''XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVm''@;'; put 'put ''ZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjVi''@;'; put 'put ''XHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtnXV09NDE3MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtnXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUz''@;'; put 'put ''MDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYy''@;'; put 'put ''XHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUz''@;'; put 'put ''MDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0K2ddPV9bMTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUz''@;'; put 'put ''MGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMw''@;'; put 'put ''XHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUz''@;'; put 'put ''MGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtnXV09NDIyNDArZyx5WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9y''@;'; put 'put ''KF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUw''@;'; put 'put ''MzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtnXV09NDI0OTYrZyx5WzQyNDk2K2ddPV9b''@;'; put 'put ''MTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUw''@;'; put 'put ''NDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJh''@;'; put 'put ''XHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUw''@;'; put 'put ''NDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY3XVtnXV09NDI3NTIrZyx5''@;'; put 'put ''WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5''@;'; put 'put ''XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUy''@;'; put 'put ''NTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThi''@;'; put 'put ''XHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4''@;'; put 'put ''XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUz''@;'; put 'put ''MTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtnXV09NDMwMDgrZyx5WzQzMDA4K2ddPV9b''@;'; put 'put ''MTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzll''@;'; put 'put ''XHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVm''@;'; put 'put ''ZTRiXHVmZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4''@;'; put 'put ''XHVmZTY5XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4''@;'; put 'put ''XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUy''@;'; put 'put ''NTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtnXV09NDMyNjQrZyx5''@;'; put 'put ''WzQzMjY0K2ddPV9bMTY5XVtnXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2''@;'; put 'put ''XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3''@;'; put 'put ''MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRj''@;'; put 'put ''XHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3''@;'; put 'put ''MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcwXVtn''@;'; put 'put ''XV09NDM1MjArZyx5WzQzNTIwK2ddPV9bMTcwXVtnXSk7Zm9yKF9bMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3Mzdj''@;'; put 'put ''XHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3''@;'; put 'put ''M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2Nj''@;'; put 'put ''XHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3''@;'; put 'put ''M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzFdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTcxXVtnXV09NDM3NzYrZyx5WzQzNzc2K2ddPV9bMTcxXVtnXSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAw''@;'; put 'put ''XHU3NDAxXHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3''@;'; put 'put ''NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZk''@;'; put 'put ''XHU3NDRlXHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3''@;'; put 'put ''NDczXHU3NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzJdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTcyXVtnXV09NDQwMzIrZyx5WzQ0MDMyK2ddPV9bMTcyXVtnXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1''@;'; put 'put ''XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3''@;'; put 'put ''NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2''@;'; put 'put ''XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3''@;'; put 'put ''NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTczXS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxNzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTczXVtnXV09NDQyODgrZyx5WzQ0Mjg4K2ddPV9bMTczXVtnXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZh''@;'; put 'put ''XHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3''@;'; put 'put ''NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1''@;'; put 'put ''XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3''@;'; put 'put ''NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc0XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxNzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc0XVtnXV09NDQ1NDQrZyx5WzQ0NTQ0K2ddPV9bMTc0XVtnXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThh''@;'; put 'put ''XHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3''@;'; put 'put ''NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZk''@;'; put 'put ''XHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3''@;'; put 'put ''NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MTc1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc1XVtnXV09NDQ4MDArZyx5WzQ0ODAwK2ddPV9bMTc1XVtnXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1''@;'; put 'put ''XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3''@;'; put 'put ''NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3Njkw''@;'; put 'put ''XHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3''@;'; put 'put ''NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMx''@;'; put 'put ''XHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3''@;'; put 'put ''YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2Nzdm''@;'; put 'put ''XHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtnXV09NDUwNTYrZyx5WzQ1MDU2K2ddPV9bMTc2XVtnXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3''@;'; put 'put ''NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFj''@;'; put 'put ''XHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3''@;'; put 'put ''NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2''@;'; put 'put ''XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2''@;'; put 'put ''YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJm''@;'; put 'put ''XHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtnXV09NDUzMTIrZyx5WzQ1MzEyK2ddPV9bMTc3XVtnXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3''@;'; put 'put ''NzgyXHU3NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2Fi''@;'; put 'put ''XHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3''@;'; put 'put ''N2NlXHU3N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMz''@;'; put 'put ''XHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4''@;'; put 'put ''ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThj''@;'; put 'put ''XHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2''@;'; put 'put ''NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtnXV09NDU1NjgrZyx5WzQ1NTY4K2ddPV9bMTc4XVtnXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3''@;'; put 'put ''ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0''@;'; put 'put ''XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3''@;'; put 'put ''ODY5XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVl''@;'; put 'put ''XHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4''@;'; put 'put ''ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNh''@;'; put 'put ''XHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5''@;'; put 'put ''NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtnXV09NDU4MjQrZyx5WzQ1ODI0K2ddPV9bMTc5XVtnXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3''@;'; put 'put ''OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQx''@;'; put 'put ''XHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3''@;'; put 'put ''OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0''@;'; put 'put ''XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3''@;'; put 'put ''ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3''@;'; put 'put ''XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2''@;'; put 'put ''Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtnXV09NDYwODArZyx5WzQ2MDgwK2ddPV9bMTgwXVtnXSk7Zm9yKF9bMTgxXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3''@;'; put 'put ''OTIxXHU3OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0''@;'; put 'put ''XHU3OTQ1XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3''@;'; put 'put ''OTcyXHU3OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5''@;'; put 'put ''XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5''@;'; put 'put ''MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFk''@;'; put 'put ''XHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4''@;'; put 'put ''YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtnXV09NDYzMzYrZyx5WzQ2MzM2K2ddPV9bMTgxXVtnXSk7''@;'; put 'put ''Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3''@;'; put 'put ''OWE0XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNj''@;'; put 'put ''XHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3''@;'; put 'put ''OWY2XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVm''@;'; put 'put ''XHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2''@;'; put 'put ''YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdm''@;'; put 'put ''XHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5''@;'; put 'put ''MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtnXV09NDY1OTIrZyx5WzQ2NTkyK2dd''@;'; put 'put ''PV9bMTgyXVtnXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3''@;'; put 'put ''YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUy''@;'; put 'put ''XHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3''@;'; put 'put ''YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEy''@;'; put 'put ''XHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4''@;'; put 'put ''MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3''@;'; put 'put ''XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2''@;'; put 'put ''NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtnXV09NDY4NDgr''@;'; put 'put ''Zyx5WzQ2ODQ4K2ddPV9bMTgzXVtnXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3''@;'; put 'put ''YWI1XHU3YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQy''@;'; put 'put ''XHU3YWQzXHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3''@;'; put 'put ''YWY3XHU3YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3''@;'; put 'put ''XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4''@;'; put 'put ''ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFh''@;'; put 'put ''XHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2''@;'; put 'put ''ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0''@;'; put 'put ''XVtnXV09NDcxMDQrZyx5WzQ3MTA0K2ddPV9bMTg0XVtnXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3''@;'; put 'put ''YjNmXHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZi''@;'; put 'put ''XHU3YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3''@;'; put 'put ''YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJm''@;'; put 'put ''XHU3YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1''@;'; put 'put ''N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAy''@;'; put 'put ''XHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3''@;'; put 'put ''Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODVdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMTg1XVtnXV09NDczNjArZyx5WzQ3MzYwK2ddPV9bMTg1XVtnXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3''@;'; put 'put ''YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2''@;'; put 'put ''XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVm''@;'; put 'put ''ZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5''@;'; put 'put ''XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2''@;'; put 'put ''MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5''@;'; put 'put ''XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1''@;'; put 'put ''NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODZdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMTg2XVtnXV09NDc2MTYrZyx5WzQ3NjE2K2ddPV9bMTg2XVtnXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3''@;'; put 'put ''YzQ5XHU3YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1''@;'; put 'put ''XHU3YzY2XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3''@;'; put 'put ''Yzg2XHU3Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2Fm''@;'; put 'put ''XHU3Y2IwXHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2''@;'; put 'put ''ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRj''@;'; put 'put ''XHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2''@;'; put 'put ''ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg3XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1sxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtnXV09NDc4NzIrZyx5WzQ3ODcyK2ddPV9bMTg3XVtnXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3''@;'; put 'put ''Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2Vk''@;'; put 'put ''XHU3Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3''@;'; put 'put ''ZDBkXHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJh''@;'; put 'put ''XHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3''@;'; put 'put ''NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFh''@;'; put 'put ''XHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1''@;'; put 'put ''OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg4XS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1sxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg4XVtnXV09NDgxMjgrZyx5WzQ4MTI4K2ddPV9bMTg4XVtnXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3''@;'; put 'put ''ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0''@;'; put 'put ''XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3''@;'; put 'put ''ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhj''@;'; put 'put ''XHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2''@;'; put 'put ''ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1Mjdm''@;'; put 'put ''XHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3''@;'; put 'put ''NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg5XVtnXV09NDgzODQrZyx5WzQ4Mzg0K2ddPV9bMTg5XVtnXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3''@;'; put 'put ''ZDk5XHU3ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2''@;'; put 'put ''XHU3ZGI3XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3''@;'; put 'put ''ZGQyXHU3ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRjXHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVj''@;'; put 'put ''XHU3ZGVkXHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0''@;'; put 'put ''ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3''@;'; put 'put ''XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2''@;'; put 'put ''MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtnXV09NDg2NDArZyx5WzQ4NjQwK2ddPV9bMTkwXVtnXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0''@;'; put 'put ''XHU3ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3''@;'; put 'put ''ZTMwXHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRk''@;'; put 'put ''XHU3ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2''@;'; put 'put ''OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYz''@;'; put 'put ''XHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4''@;'; put 'put ''OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgw''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtnXV09NDg4OTYrZyx5WzQ4ODk2K2ddPV9bMTkxXVtnXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1''@;'; put 'put ''XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3''@;'; put 'put ''ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNj''@;'; put 'put ''XHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1''@;'; put 'put ''ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1''@;'; put 'put ''XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2''@;'; put 'put ''Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4''@;'; put 'put ''XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtnXV09NDkxNTIrZyx5WzQ5MTUyK2ddPV9bMTkyXVtnXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4''@;'; put 'put ''XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3''@;'; put 'put ''ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2''@;'; put 'put ''XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1''@;'; put 'put ''NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5''@;'; put 'put ''XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1''@;'; put 'put ''NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5''@;'; put 'put ''XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtnXV09NDk0MDgrZyx5WzQ5NDA4K2ddPV9bMTkzXVtnXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAy''@;'; put 'put ''XHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4''@;'; put 'put ''MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0''@;'; put 'put ''XHU4MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1''@;'; put 'put ''YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRk''@;'; put 'put ''XHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4''@;'; put 'put ''N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTky''@;'; put 'put ''XHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtnXV09NDk2NjQrZyx5WzQ5NjY0K2ddPV9bMTk0XVtnXSk7Zm9yKF9bMTk1''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEz''@;'; put 'put ''XHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4''@;'; put 'put ''MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIw''@;'; put 'put ''XHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3''@;'; put 'put ''NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNm''@;'; put 'put ''XHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4''@;'; put 'put ''NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZk''@;'; put 'put ''XHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtnXV09NDk5MjArZyx5WzQ5OTIwK2ddPV9bMTk1XVtn''@;'; put 'put ''XSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTVi''@;'; put 'put ''XHU4MTVjXHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4''@;'; put 'put ''MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFm''@;'; put 'put ''XHU4MWIwXHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4''@;'; put 'put ''NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1''@;'; put 'put ''XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5''@;'; put 'put ''OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQy''@;'; put 'put ''XHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtnXV09NTAxNzYrZyx5WzUwMTc2''@;'; put 'put ''K2ddPV9bMTk2XVtnXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUx''@;'; put 'put ''XHU4MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4''@;'; put 'put ''MjBmXHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1''@;'; put 'put ''XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4''@;'; put 'put ''MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1''@;'; put 'put ''XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2''@;'; put 'put ''MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4''@;'; put 'put ''XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtnXV09NTA0''@;'; put 'put ''MzIrZyx5WzUwNDMyK2ddPV9bMTk3XVtnXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4Mjgw''@;'; put 'put ''XHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4''@;'; put 'put ''MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZk''@;'; put 'put ''XHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4''@;'; put 'put ''MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUy''@;'; put 'put ''XHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2''@;'; put 'put ''NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3''@;'; put 'put ''XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTk4XVtnXV09NTA2ODgrZyx5WzUwNjg4K2ddPV9bMTk4XVtnXSk7Zm9yKF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRj''@;'; put 'put ''XHU4MzRkXHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4''@;'; put 'put ''Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2Fm''@;'; put 'put ''XHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4''@;'; put 'put ''M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIw''@;'; put 'put ''XHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2''@;'; put 'put ''MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3''@;'; put 'put ''XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTldW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTk5XVtnXV09NTA5NDQrZyx5WzUwOTQ0K2ddPV9bMTk5XVtnXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2Zh''@;'; put 'put ''XHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4''@;'; put 'put ''NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5''@;'; put 'put ''XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4''@;'; put 'put ''NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRh''@;'; put 'put ''XHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1''@;'; put 'put ''OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1''@;'; put 'put ''XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDBd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAwXVtnXV09NTEyMDArZyx5WzUxMjAwK2ddPV9bMjAwXVtnXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgz''@;'; put 'put ''XHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4''@;'; put 'put ''NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0''@;'; put 'put ''XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4''@;'; put 'put ''NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5''@;'; put 'put ''XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0''@;'; put 'put ''ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMz''@;'; put 'put ''XHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAxXS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syMDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAxXVtnXV09NTE0NTYrZyx5WzUxNDU2K2ddPV9bMjAxXVtnXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2''@;'; put 'put ''XHU4NTA3XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4''@;'; put 'put ''NTI5XHU4NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUx''@;'; put 'put ''XHU4NTUyXHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4''@;'; put 'put ''NTcxXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2''@;'; put 'put ''XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5''@;'; put 'put ''MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThm''@;'; put 'put ''XHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAyXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1syMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAyXVtnXV09NTE3MTIrZyx5WzUxNzEyK2ddPV9bMjAyXVtnXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgz''@;'; put 'put ''XHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4''@;'; put 'put ''NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNh''@;'; put 'put ''XHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4''@;'; put 'put ''NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYx''@;'; put 'put ''XHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2''@;'; put 'put ''MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5Njhm''@;'; put 'put ''XHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAzXVtnXV09NTE5NjgrZyx5WzUxOTY4K2ddPV9bMjAzXVtnXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4''@;'; put 'put ''NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2''@;'; put 'put ''XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4''@;'; put 'put ''NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2Yzcw''@;'; put 'put ''XHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4''@;'; put 'put ''ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdj''@;'; put 'put ''XHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtnXV09NTIyMjQrZyx5WzUyMjI0K2ddPV9bMjA0XVtnXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4''@;'; put 'put ''Njk4XHU4Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1''@;'; put 'put ''XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4''@;'; put 'put ''NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2Iz''@;'; put 'put ''XHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5''@;'; put 'put ''ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2''@;'; put 'put ''XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1''@;'; put 'put ''YTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtnXV09NTI0ODArZyx5WzUyNDgwK2ddPV9bMjA1XVtnXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4''@;'; put 'put ''NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2''@;'; put 'put ''XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4''@;'; put 'put ''NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRm''@;'; put 'put ''XHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5''@;'; put 'put ''NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3''@;'; put 'put ''XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1''@;'; put 'put ''NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtnXV09NTI3MzYrZyx5WzUyNzM2K2ddPV9bMjA2XVtnXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4''@;'; put 'put ''N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4''@;'; put 'put ''XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4''@;'; put 'put ''ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRj''@;'; put 'put ''XHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1''@;'; put 'put ''M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUw''@;'; put 'put ''XHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5''@;'; put 'put ''NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtnXV09NTI5OTIrZyx5WzUyOTkyK2ddPV9bMjA3XVtnXSk7Zm9yKF9bMjA4XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4''@;'; put 'put ''ODM4XHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVk''@;'; put 'put ''XHU4ODVlXHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4''@;'; put 'put ''ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4''@;'; put 'put ''XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4''@;'; put 'put ''ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThh''@;'; put 'put ''XHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3''@;'; put 'put ''ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtnXV09NTMyNDgrZyx5WzUzMjQ4K2ddPV9bMjA4XVtnXSk7Zm9yKF9b''@;'; put 'put ''MjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4''@;'; put 'put ''OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVk''@;'; put 'put ''XHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4''@;'; put 'put ''OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5''@;'; put 'put ''XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4''@;'; put 'put ''MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5''@;'; put 'put ''XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0''@;'; put 'put ''ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtnXV09NTM1MDQrZyx5WzUzNTA0K2ddPV9bMjA5''@;'; put 'put ''XVtnXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4''@;'; put 'put ''OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3''@;'; put 'put ''XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4''@;'; put 'put ''OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3''@;'; put 'put ''XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1''@;'; put 'put ''MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkx''@;'; put 'put ''XHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5''@;'; put 'put ''N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtnXV09NTM3NjArZyx5WzUz''@;'; put 'put ''NzYwK2ddPV9bMjEwXVtnXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4''@;'; put 'put ''OWFmXHU4OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRk''@;'; put 'put ''XHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4''@;'; put 'put ''OWZmXHU4YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFj''@;'; put 'put ''XHU4YTFkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4''@;'; put 'put ''ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4''@;'; put 'put ''XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1''@;'; put 'put ''N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjExXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtnXV09''@;'; put 'put ''NTQwMTYrZyx5WzU0MDE2K2ddPV9bMjExXVtnXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4''@;'; put 'put ''YTI5XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1''@;'; put 'put ''XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4''@;'; put 'put ''YTYxXHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdk''@;'; put 'put ''XHU4YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2''@;'; put 'put ''MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNk''@;'; put 'put ''XHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4''@;'; put 'put ''ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjEyXVtnXV09NTQyNzIrZyx5WzU0MjcyK2ddPV9bMjEyXVtnXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4''@;'; put 'put ''YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4''@;'; put 'put ''XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4''@;'; put 'put ''YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRl''@;'; put 'put ''XHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4''@;'; put 'put ''Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2Mjdl''@;'; put 'put ''XHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3''@;'; put 'put ''NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTNdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjEzXVtnXV09NTQ1MjgrZyx5WzU0NTI4K2ddPV9bMjEzXVtnXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4''@;'; put 'put ''YWViXHU4YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2''@;'; put 'put ''XHU4YjA4XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4''@;'; put 'put ''YjIzXHVmZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNl''@;'; put 'put ''XHU4YjNmXHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1''@;'; put 'put ''MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJk''@;'; put 'put ''XHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2''@;'; put 'put ''NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sy''@;'; put 'put ''MTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtnXV09NTQ3ODQrZyx5WzU0Nzg0K2ddPV9bMjE0XVtnXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4''@;'; put 'put ''YjRiXHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3''@;'; put 'put ''XHU4YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4''@;'; put 'put ''Yjg0XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4Yjll''@;'; put 'put ''XHU4YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1''@;'; put 'put ''OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVj''@;'; put 'put ''XHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5''@;'; put 'put ''NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE1XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1syMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtnXV09NTUwNDArZyx5WzU1MDQwK2ddPV9bMjE1XVtnXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4''@;'; put 'put ''YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVk''@;'; put 'put ''XHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4''@;'; put 'put ''YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2Ey''@;'; put 'put ''XHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0''@;'; put 'put ''ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1''@;'; put 'put ''XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3''@;'; put 'put ''ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE2''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE2XVtnXV09NTUyOTYrZyx5WzU1Mjk2K2ddPV9bMjE2XVtnXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4''@;'; put 'put ''Y2FmXHU4Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2Nh''@;'; put 'put ''XHU4Y2NiXHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2QxXHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4''@;'; put 'put ''Y2U2XHU4Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVmZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAw''@;'; put 'put ''XHU4ZDAxXHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0''@;'; put 'put ''ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4''@;'; put 'put ''XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1''@;'; put 'put ''MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE3XVtnXV09NTU1NTIrZyx5WzU1NTUyK2ddPV9bMjE3XVtnXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZm''@;'; put 'put ''XHU4ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4''@;'; put 'put ''ZDk4XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5''@;'; put 'put ''XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4''@;'; put 'put ''YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBj''@;'; put 'put ''XHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5''@;'; put 'put ''NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtnXV09NTU4MDgrZyx5WzU1ODA4K2ddPV9bMjE4XVtnXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAz''@;'; put 'put ''XHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4''@;'; put 'put ''ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVh''@;'; put 'put ''XHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5''@;'; put 'put ''MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVl''@;'; put 'put ''XHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1''@;'; put 'put ''Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0''@;'; put 'put ''XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtnXV09NTYwNjQrZyx5WzU2MDY0K2ddPV9bMjE5XVtnXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTky''@;'; put 'put ''XHU4ZTkzXHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4''@;'; put 'put ''ZWI1XHU4ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQx''@;'; put 'put ''XHU4ZWQyXHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1''@;'; put 'put ''ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUz''@;'; put 'put ''XHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4''@;'; put 'put ''MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNh''@;'; put 'put ''XHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtnXV09NTYzMjArZyx5WzU2MzIwK2ddPV9bMjIwXVtnXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5''@;'; put 'put ''XHU4ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4''@;'; put 'put ''ZjE1XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJm''@;'; put 'put ''XHU4ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4''@;'; put 'put ''MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBi''@;'; put 'put ''XHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4''@;'; put 'put ''NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBk''@;'; put 'put ''XHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtnXV09NTY1NzYrZyx5WzU2NTc2K2ddPV9bMjIxXVtnXSk7Zm9yKF9bMjIyXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3''@;'; put 'put ''XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4''@;'; put 'put ''ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRh''@;'; put 'put ''XHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4''@;'; put 'put ''NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5''@;'; put 'put ''XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2''@;'; put 'put ''MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIw''@;'; put 'put ''XHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtnXV09NTY4MzIrZyx5WzU2ODMyK2ddPV9bMjIyXVtnXSk7Zm9y''@;'; put 'put ''KF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3''@;'; put 'put ''XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5''@;'; put 'put ''MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhk''@;'; put 'put ''XHU5MDhlXHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2''@;'; put 'put ''NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0''@;'; put 'put ''XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1''@;'; put 'put ''NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3''@;'; put 'put ''XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtnXV09NTcwODgrZyx5WzU3MDg4K2ddPV9b''@;'; put 'put ''MjIzXVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRh''@;'; put 'put ''XHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5''@;'; put 'put ''MTA3XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1''@;'; put 'put ''XHU5MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1''@;'; put 'put ''NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5''@;'; put 'put ''XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1''@;'; put 'put ''NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZm''@;'; put 'put ''XHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5''@;'; put 'put ''WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVm''@;'; put 'put ''XHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5''@;'; put 'put ''MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJm''@;'; put 'put ''XHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5''@;'; put 'put ''MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3''@;'; put 'put ''XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1''@;'; put 'put ''ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMx''@;'; put 'put ''XHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtn''@;'; put 'put ''XV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYw''@;'; put 'put ''XHU5MWYxXHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5''@;'; put 'put ''MjBjXHU5MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2''@;'; put 'put ''XHU5MjI3XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5''@;'; put 'put ''MjQyXHU5MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3''@;'; put 'put ''XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1''@;'; put 'put ''ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5''@;'; put 'put ''XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtnXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRl''@;'; put 'put ''XHU5MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5''@;'; put 'put ''MjZhXHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZk''@;'; put 'put ''XHU5Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5''@;'; put 'put ''MmEyXHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIz''@;'; put 'put ''XHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5''@;'; put 'put ''NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5''@;'; put 'put ''XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEyK2ddPV9bMjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFm''@;'; put 'put ''XHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5''@;'; put 'put ''MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3''@;'; put 'put ''XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5''@;'; put 'put ''MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZm''@;'; put 'put ''XHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2''@;'; put 'put ''ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2''@;'; put 'put ''XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgzNjgrZyx5WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBl''@;'; put 'put ''XHU5MzBmXHU5MzEwXHU5MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5''@;'; put 'put ''MzJhXHU5MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2''@;'; put 'put ''XHU5MzQ3XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5''@;'; put 'put ''MzYxXHU5MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1Yjgw''@;'; put 'put ''XHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5''@;'; put 'put ''MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4''@;'; put 'put ''XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtnXV09NTg2MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZl''@;'; put 'put ''XHU5MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5''@;'; put 'put ''MzhhXHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2''@;'; put 'put ''XHU5M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5''@;'; put 'put ''M2MxXHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4''@;'; put 'put ''XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1''@;'; put 'put ''YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgx''@;'; put 'put ''XHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2Nl''@;'; put 'put ''XHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5''@;'; put 'put ''M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2''@;'; put 'put ''XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5''@;'; put 'put ''NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUw''@;'; put 'put ''XHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3''@;'; put 'put ''ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2Nm''@;'; put 'put ''XHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5NDJmXHU5NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5''@;'; put 'put ''NDRhXHU5NDRiXHU5NDRjXHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1''@;'; put 'put ''XHU5NDY2XHU5NDY3XHU5NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5''@;'; put 'put ''NDgxXHU5NDgyXHU5NDgzXHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhl''@;'; put 'put ''XHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2''@;'; put 'put ''NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYx''@;'; put 'put ''XHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5''@;'; put 'put ''NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlm''@;'; put 'put ''XHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5''@;'; put 'put ''NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYw''@;'; put 'put ''XHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2''@;'; put 'put ''OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUy''@;'; put 'put ''XHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4''@;'; put 'put ''Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5''@;'; put 'put ''NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4''@;'; put 'put ''XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5''@;'; put 'put ''NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3''@;'; put 'put ''XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2''@;'; put 'put ''NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQw''@;'; put 'put ''XHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3''@;'; put 'put ''MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5''@;'; put 'put ''NmE5XHU5NmFhXHU5NmFiXHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4''@;'; put 'put ''XHU5NmQ5XHU5NmRhXHU5NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5''@;'; put 'put ''NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZk''@;'; put 'put ''XHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4''@;'; put 'put ''MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZj''@;'; put 'put ''XHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4''@;'; put 'put ''MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtnXV09NjAxNjArZyx5WzYwMTYwK2ddPV9bMjM1XVtnXSk7Zm9yKF9bMjM2XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5''@;'; put 'put ''NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4''@;'; put 'put ''XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5''@;'; put 'put ''NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3''@;'; put 'put ''XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3''@;'; put 'put ''MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUw''@;'; put 'put ''XHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3''@;'; put 'put ''OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtnXV09NjA0MTYrZyx5WzYwNDE2K2ddPV9bMjM2XVtnXSk7''@;'; put 'put ''Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5''@;'; put 'put ''N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2Qw''@;'; put 'put ''XHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5''@;'; put 'put ''N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVk''@;'; put 'put ''XHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3''@;'; put 'put ''ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEz''@;'; put 'put ''XHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3''@;'; put 'put ''NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2dd''@;'; put 'put ''PV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5''@;'; put 'put ''ODFkXHU5ODFlXHU5ODFmXHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4''@;'; put 'put ''XHU5ODM5XHU5ODNhXHU5ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5''@;'; put 'put ''ODUzXHU5ODU0XHU5ODU1XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZl''@;'; put 'put ''XHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3''@;'; put 'put ''Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFk''@;'; put 'put ''XHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5''@;'; put 'put ''NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5Mjgr''@;'; put 'put ''Zyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5''@;'; put 'put ''OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMz''@;'; put 'put ''XHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5''@;'; put 'put ''OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1''@;'; put 'put ''XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5''@;'; put 'put ''NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRl''@;'; put 'put ''XHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5''@;'; put 'put ''NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5''@;'; put 'put ''XVtnXV09NjExODQrZyx5WzYxMTg0K2ddPV9bMjM5XVtnXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5''@;'; put 'put ''OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMw''@;'; put 'put ''XHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5''@;'; put 'put ''OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdi''@;'; put 'put ''XHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5''@;'; put 'put ''ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5''@;'; put 'put ''XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3''@;'; put 'put ''NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDBdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjQwXVtnXV09NjE0NDArZyx5WzYxNDQwK2ddPV9bMjQwXVtnXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5''@;'; put 'put ''OWEwXHU5OWExXHU5OWEyXHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJk''@;'; put 'put ''XHU5OWJlXHU5OWJmXHU5OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVm''@;'; put 'put ''ZmZkXHU5OWQ5XHU5OWRhXHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYz''@;'; put 'put ''XHU5OWY0XHU5OWY1XHU5OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3''@;'; put 'put ''YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYx''@;'; put 'put ''XHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4''@;'; put 'put ''MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDFdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjQxXVtnXV09NjE2OTYrZyx5WzYxNjk2K2ddPV9bMjQxXVtnXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5''@;'; put 'put ''YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFi''@;'; put 'put ''XHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5''@;'; put 'put ''YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUx''@;'; put 'put ''XHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4''@;'; put 'put ''NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYz''@;'; put 'put ''XHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4''@;'; put 'put ''NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQyXS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1syNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtnXV09NjE5NTIrZyx5WzYxOTUyK2ddPV9bMjQyXVtnXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5''@;'; put 'put ''YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFk''@;'; put 'put ''XHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5''@;'; put 'put ''YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZh''@;'; put 'put ''XHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4''@;'; put 'put ''N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4''@;'; put 'put ''XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3''@;'; put 'put ''YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQzXS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1syNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQzXVtnXV09NjIyMDgrZyx5WzYyMjA4K2ddPV9bMjQzXVtnXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5''@;'; put 'put ''YjBhXHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5''@;'; put 'put ''XHU5YjJhXHU5YjJiXHU5YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5''@;'; put 'put ''YjU1XHU5YjU2XHU5YjU3XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZm''@;'; put 'put ''XHU5YjcwXHU5YjcxXHU5YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4''@;'; put 'put ''MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIy''@;'; put 'put ''XHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3''@;'; put 'put ''ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ0XVtnXV09NjI0NjQrZyx5WzYyNDY0K2ddPV9bMjQ0XVtnXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5''@;'; put 'put ''YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3''@;'; put 'put ''XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5''@;'; put 'put ''YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNk''@;'; put 'put ''XHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5''@;'; put 'put ''MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNl''@;'; put 'put ''XHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4''@;'; put 'put ''ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtnXV09NjI3MjArZyx5WzYyNzIwK2ddPV9bMjQ1XVtnXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1''@;'; put 'put ''XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5''@;'; put 'put ''YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJi''@;'; put 'put ''XHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5''@;'; put 'put ''NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFl''@;'; put 'put ''XHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5''@;'; put 'put ''Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2Ni''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtnXV09NjI5NzYrZyx5WzYyOTc2K2ddPV9bMjQ2XVtnXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUz''@;'; put 'put ''XHU5YzU0XHU5YzU1XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5''@;'; put 'put ''YzZmXHU5YzcwXHU5YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5''@;'; put 'put ''XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5''@;'; put 'put ''Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNi''@;'; put 'put ''XHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5''@;'; put 'put ''ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNk''@;'; put 'put ''XHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtnXV09NjMyMzIrZyx5WzYzMjMyK2ddPV9bMjQ3XVtnXSk7Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4''@;'; put 'put ''XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5''@;'; put 'put ''ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJl''@;'; put 'put ''XHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ4XVtnXV09NjM0ODgrZyx5WzYzNDg4K2ddPV9bMjQ4XVtnXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2''@;'; put 'put ''XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5''@;'; put 'put ''ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhj''@;'; put 'put ''XHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ5XVtnXV09NjM3NDQrZyx5WzYzNzQ0K2ddPV9bMjQ5XVtnXSk7Zm9yKF9bMjUw''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0''@;'; put 'put ''XHU5ZGI1XHU5ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5''@;'; put 'put ''ZGQwXHU5ZGQxXHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVh''@;'; put 'put ''XHU5ZGViXHU5ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtnXV09NjRlMytnLHlbNjRlMytnXT1fWzI1MF1bZ10p''@;'; put 'put ''O2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1''@;'; put 'put ''OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1''@;'; put 'put ''ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1''@;'; put 'put ''OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bZ11dPTY0MjU2K2cseVs2NDI1Nitn''@;'; put 'put ''XT1fWzI1MV1bZ10pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1''@;'; put 'put ''OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVl''@;'; put 'put ''Ylx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1''@;'; put 'put ''OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYz''@;'; put 'put ''MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bZ11dPTY0NTEy''@;'; put 'put ''K2cseVs2NDUxMitnXT1fWzI1Ml1bZ10pO2ZvcihfWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1''@;'; put 'put ''OWY0M1x1OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2''@;'; put 'put ''MVx1OWY2Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1''@;'; put 'put ''OWY3Y1x1OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5''@;'; put 'put ''NVx1ZjllN1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1''@;'; put 'put ''M11bZ11dPTY0NzY4K2cseVs2NDc2OCtnXT1fWzI1M11bZ10pO2ZvcihfWzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1''@;'; put 'put ''ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjU0XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzI1NF1bZ11dPTY1MDI0K2cseVs2NTAyNCtnXT1fWzI1NF1bZ10pO3JldHVybntlbmM6SSxkZWM6eX19KCksWFs5NDldPWZ1bmN0aW9uKCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4''@;'; put 'put ''MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8''@;'; put 'put ''fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBdW2ddKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFj''@;'; put 'put ''MGVcdWFjMGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdc''@;'; put 'put ''dWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNc''@;'; put 'put ''dWFjNzVcdWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFj''@;'; put 'put ''YTRcdWFjYTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2Vc''@;'; put 'put ''dWFjY2ZcdWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFj''@;'; put 'put ''ZjlcdWFjZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEyOV1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxMjldW2ddXT0zMzAyNCtnLHlbMzMwMjQrZ109X1sxMjldW2ddKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFk''@;'; put 'put ''MWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZc''@;'; put 'put ''dWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlc''@;'; put 'put ''dWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFk''@;'; put 'put ''YTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVc''@;'; put 'put ''dWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFk''@;'; put 'put ''ZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzBdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW2ddXT0zMzI4MCtnLHlbMzMyODArZ109X1sxMzBdW2ddKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFk''@;'; put 'put ''ZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNc''@;'; put 'put ''dWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFl''@;'; put 'put ''OGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdc''@;'; put 'put ''dWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFl''@;'; put 'put ''YzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzFdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW2ddXT0zMzUzNitnLHlbMzM1MzYrZ109X1sxMzFdW2ddKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFl''@;'; put 'put ''ZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFm''@;'; put 'put ''MjJcdWFmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2Vc''@;'; put 'put ''dWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFm''@;'; put 'put ''NjNcdWFmNjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJc''@;'; put 'put ''dWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFm''@;'; put 'put ''YTRcdWFmYTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW2ddXT0zMzc5MitnLHlbMzM3OTIrZ109X1sxMzJdW2ddKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFm''@;'; put 'put ''ZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlc''@;'; put 'put ''dWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIw''@;'; put 'put ''MzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZc''@;'; put 'put ''dWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIw''@;'; put 'put ''N2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzNdW2ddXT0zNDA0OCtnLHlbMzQwNDgrZ109X1sxMzNdW2ddKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2Zc''@;'; put 'put ''dWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIw''@;'; put 'put ''ZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBc''@;'; put 'put ''dWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIx''@;'; put 'put ''MmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNc''@;'; put 'put ''dWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIx''@;'; put 'put ''NzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzRdW2ddXT0zNDMwNCtnLHlbMzQzMDQrZ109X1sxMzRdW2ddKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVc''@;'; put 'put ''dWIxYjZcdWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIx''@;'; put 'put ''Y2JcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZc''@;'; put 'put ''dWIxZTdcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIy''@;'; put 'put ''MGVcdWIyMGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVc''@;'; put 'put ''dWIyMmZcdWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIy''@;'; put 'put ''NGNcdWIyNGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNc''@;'; put 'put ''dWIyNmRcdWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW2ddXT0zNDU2MCtnLHlbMzQ1NjArZ109X1sxMzVdW2ddKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhc''@;'; put 'put ''dWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIy''@;'; put 'put ''YWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNc''@;'; put 'put ''dWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIy''@;'; put 'put ''ZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBc''@;'; put 'put ''dWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIz''@;'; put 'put ''M2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRc''@;'; put 'put ''dWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW2ddXT0zNDgxNitnLHlbMzQ4MTYrZ109X1sxMzZdW2ddKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJc''@;'; put 'put ''dWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIz''@;'; put 'put ''OWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdc''@;'; put 'put ''dWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIz''@;'; put 'put ''ZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZc''@;'; put 'put ''dWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0''@;'; put 'put ''MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2Vc''@;'; put 'put ''dWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW2ddXT0zNTA3MitnLHlbMzUwNzIrZ109X1sxMzddW2ddKTtmb3IoX1sxMzhd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlc''@;'; put 'put ''dWI0NWFcdWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0''@;'; put 'put ''NzRcdWI0NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJc''@;'; put 'put ''dWI0OGNcdWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0''@;'; put 'put ''YWFcdWI0YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2Nc''@;'; put 'put ''dWI0Y2RcdWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0''@;'; put 'put ''ZjRcdWI0ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBc''@;'; put 'put ''dWI1MTFcdWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW2ddXT0zNTMyOCtnLHlbMzUzMjgrZ109X1sxMzhdW2dd''@;'; put 'put ''KTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVc''@;'; put 'put ''dWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1''@;'; put 'put ''NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBc''@;'; put 'put ''dWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1''@;'; put 'put ''OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRc''@;'; put 'put ''dWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1''@;'; put 'put ''ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVc''@;'; put 'put ''dWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW2ddXT0zNTU4NCtnLHlbMzU1ODQr''@;'; put 'put ''Z109X1sxMzldW2ddKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNc''@;'; put 'put ''dWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2''@;'; put 'put ''MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2Vc''@;'; put 'put ''dWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2''@;'; put 'put ''NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2Nzhc''@;'; put 'put ''dWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2''@;'; put 'put ''OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZc''@;'; put 'put ''dWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW2ddXT0zNTg0''@;'; put 'put ''MCtnLHlbMzU4NDArZ109X1sxNDBdW2ddKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2Rc''@;'; put 'put ''dWI2Y2VcdWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2''@;'; put 'put ''ZTRcdWI2ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNc''@;'; put 'put ''dWI2ZmRcdWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3''@;'; put 'put ''MWJcdWI3MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2Vc''@;'; put 'put ''dWI3M2ZcdWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3''@;'; put 'put ''NWZcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVc''@;'; put 'put ''dWI3ODZcdWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''NDFdW2ddXT0zNjA5NitnLHlbMzYwOTYrZ109X1sxNDFdW2ddKTtmb3IoX1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFc''@;'; put 'put ''dWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3''@;'; put 'put ''YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4''@;'; put 'put ''MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4Mjlc''@;'; put 'put ''dWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4''@;'; put 'put ''NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJc''@;'; put 'put ''dWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Ml1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxNDJdW2ddXT0zNjM1MitnLHlbMzYzNTIrZ109X1sxNDJdW2ddKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJc''@;'; put 'put ''dWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4''@;'; put 'put ''YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4''@;'; put 'put ''ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVc''@;'; put 'put ''dWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5''@;'; put 'put ''MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFc''@;'; put 'put ''dWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0M11b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW2ddXT0zNjYwOCtnLHlbMzY2MDgrZ109X1sxNDNdW2ddKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZc''@;'; put 'put ''dWI5NjFcdWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5''@;'; put 'put ''N2VcdWI5N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5''@;'; put 'put ''YmFcdWI5YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJc''@;'; put 'put ''dWI5ZWRcdWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJh''@;'; put 'put ''MTFcdWJhMTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRc''@;'; put 'put ''dWJhMmVcdWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDRdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW2ddXT0zNjg2NCtnLHlbMzY4NjQrZ109X1sxNDRdW2ddKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNc''@;'; put 'put ''dWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJh''@;'; put 'put ''YWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2Zc''@;'; put 'put ''dWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJh''@;'; put 'put ''ZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJc''@;'; put 'put ''dWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDVdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW2ddXT0zNzEyMCtnLHlbMzcxMjArZ109X1sxNDVdW2ddKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhc''@;'; put 'put ''dWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZc''@;'; put 'put ''dWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJi''@;'; put 'put ''ODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNc''@;'; put 'put ''dWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJi''@;'; put 'put ''YzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRc''@;'; put 'put ''dWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1sxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDZdW2ddXT0zNzM3NitnLHlbMzczNzYrZ109X1sxNDZdW2ddKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVc''@;'; put 'put ''dWJjNTZcdWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJj''@;'; put 'put ''NmNcdWJjNmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFc''@;'; put 'put ''dWJjOGRcdWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJj''@;'; put 'put ''YjhcdWJjYjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVc''@;'; put 'put ''dWJjZGZcdWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1sxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW2ddXT0zNzYzMitnLHlbMzc2MzIrZ109X1sxNDddW2ddKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJk''@;'; put 'put ''MWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNc''@;'; put 'put ''dWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJk''@;'; put 'put ''NGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRc''@;'; put 'put ''dWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJk''@;'; put 'put ''OTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRc''@;'; put 'put ''dWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJk''@;'; put 'put ''ZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW2ddXT0zNzg4OCtnLHlbMzc4ODgrZ109X1sxNDhdW2ddKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJk''@;'; put 'put ''ZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhc''@;'; put 'put ''dWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJl''@;'; put 'put ''MjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBc''@;'; put 'put ''dWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJl''@;'; put 'put ''NmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZc''@;'; put 'put ''dWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJl''@;'; put 'put ''YjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW2ddXT0zODE0NCtnLHlbMzgxNDQrZ109X1sxNDldW2ddKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJl''@;'; put 'put ''Y2NcdWJlY2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFc''@;'; put 'put ''dWJlZWJcdWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJm''@;'; put 'put ''MDJcdWJmMDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRc''@;'; put 'put ''dWJmMjVcdWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJm''@;'; put 'put ''NDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJc''@;'; put 'put ''dWJmNjNcdWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJm''@;'; put 'put ''N2VcdWJmN2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW2ddXT0zODQwMCtnLHlbMzg0MDArZ109X1sxNTBdW2ddKTtmb3IoX1sxNTFdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJm''@;'; put 'put ''OTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJc''@;'; put 'put ''dWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJm''@;'; put 'put ''YzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVc''@;'; put 'put ''dWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMw''@;'; put 'put ''MDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNc''@;'; put 'put ''dWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMw''@;'; put 'put ''MzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW2ddXT0zODY1NitnLHlbMzg2NTYrZ109X1sxNTFdW2ddKTtmb3IoX1sx''@;'; put 'put ''NTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMw''@;'; put 'put ''NTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJc''@;'; put 'put ''dWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMw''@;'; put 'put ''ODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJc''@;'; put 'put ''dWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMw''@;'; put 'put ''ZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFc''@;'; put 'put ''dWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMx''@;'; put 'put ''MWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW2ddXT0zODkxMitnLHlbMzg5MTIrZ109X1sxNTJd''@;'; put 'put ''W2ddKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMx''@;'; put 'put ''NDVcdWMxNDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNc''@;'; put 'put ''dWMxNjZcdWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMx''@;'; put 'put ''ODFcdWMxODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFc''@;'; put 'put ''dWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMx''@;'; put 'put ''Y2JcdWMxY2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRc''@;'; put 'put ''dWMxZWVcdWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMy''@;'; put 'put ''MTRcdWMyMTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW2ddXT0zOTE2OCtnLHlbMzkx''@;'; put 'put ''NjgrZ109X1sxNTNdW2ddKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMy''@;'; put 'put ''MzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVc''@;'; put 'put ''dWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMy''@;'; put 'put ''NmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZc''@;'; put 'put ''dWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMy''@;'; put 'put ''YjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNc''@;'; put 'put ''dWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMy''@;'; put 'put ''ZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW2ddXT0z''@;'; put 'put ''OTQyNCtnLHlbMzk0MjQrZ109X1sxNTRdW2ddKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMz''@;'; put 'put ''MWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhc''@;'; put 'put ''dWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMz''@;'; put 'put ''NGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRc''@;'; put 'put ''dWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMz''@;'; put 'put ''OTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRc''@;'; put 'put ''dWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMz''@;'; put 'put ''Y2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxNTVdW2ddXT0zOTY4MCtnLHlbMzk2ODArZ109X1sxNTVdW2ddKTtmb3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMz''@;'; put 'put ''ZTdcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJc''@;'; put 'put ''dWM0MDNcdWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWM0MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0Mzlc''@;'; put 'put ''dWM0M2FcdWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0''@;'; put 'put ''NThcdWM0NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2Fc''@;'; put 'put ''dWM0N2JcdWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0''@;'; put 'put ''OThcdWM0OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Nl1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxNTZdW2ddXT0zOTkzNitnLHlbMzk5MzYrZ109X1sxNTZdW2ddKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0''@;'; put 'put ''YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0Yzdc''@;'; put 'put ''dWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVc''@;'; put 'put ''dWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1''@;'; put 'put ''MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZc''@;'; put 'put ''dWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1''@;'; put 'put ''NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1''@;'; put 'put ''N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW2ddXT00MDE5MitnLHlbNDAxOTIrZ109X1sxNTddW2ddKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1''@;'; put 'put ''OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFc''@;'; put 'put ''dWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2''@;'; put 'put ''M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVc''@;'; put 'put ''dWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2''@;'; put 'put ''OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNThdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW2ddXT00MDQ0OCtnLHlbNDA0NDgrZ109X1sxNThdW2ddKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2''@;'; put 'put ''YWJcdWM2YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2''@;'; put 'put ''ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVc''@;'; put 'put ''dWM3MGZcdWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3''@;'; put 'put ''MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRc''@;'; put 'put ''dWM3NjVcdWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3''@;'; put 'put ''OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTld''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTldW2ddXT00MDcwNCtnLHlbNDA3MDQrZ109X1sxNTldW2ddKTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3''@;'; put 'put ''YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3''@;'; put 'put ''ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdc''@;'; put 'put ''dWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4''@;'; put 'put ''M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVc''@;'; put 'put ''dWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4''@;'; put 'put ''N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxNjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjBdW2ddXT00MDk2MCtnLHlbNDA5NjArZ109X1sxNjBdW2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4''@;'; put 'put ''ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4Zjdc''@;'; put 'put ''dWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIw''@;'; put 'put ''MThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVm''@;'; put 'put ''ZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1''@;'; put 'put ''MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1fWzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1''@;'; put 'put ''Yzk0NFx1Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1''@;'; put 'put ''ZFx1Yzk1ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4''@;'; put 'put ''YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUy''@;'; put 'put ''NWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4''@;'; put 'put ''YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5''@;'; put 'put ''YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJc''@;'; put 'put ''dWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZm''@;'; put 'put ''MGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlc''@;'; put 'put ''dWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZm''@;'; put 'put ''NDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNc''@;'; put 'put ''dWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNh''@;'; put 'put ''MjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZc''@;'; put 'put ''dWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMx''@;'; put 'put ''M2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdc''@;'; put 'put ''dTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMx''@;'; put 'put ''NzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZc''@;'; put 'put ''dWNhNjdcdWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNh''@;'; put 'put ''N2VcdWNhN2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRc''@;'; put 'put ''dWNhOTVcdWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIx''@;'; put 'put ''NzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVc''@;'; put 'put ''dTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAz''@;'; put 'put ''YjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVc''@;'; put 'put ''dWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNh''@;'; put 'put ''ZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVc''@;'; put 'put ''dWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1''@;'; put 'put ''MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFc''@;'; put 'put ''dTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1''@;'; put 'put ''NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sxNjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJc''@;'; put 'put ''dWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNi''@;'; put 'put ''MzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJc''@;'; put 'put ''dWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMz''@;'; put 'put ''YzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJc''@;'; put 'put ''dTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMz''@;'; put 'put ''OGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlbNDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2Zc''@;'; put 'put ''dWNiODBcdWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNi''@;'; put 'put ''OTVcdWNiOTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJc''@;'; put 'put ''dWNiYWNcdWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZm''@;'; put 'put ''ZmRcdTAxMzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBc''@;'; put 'put ''dTMyNzFcdTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0''@;'; put 'put ''ZTBcdTI0ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhi''@;'; put 'put ''Y1x4YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sxNjhdW2ddKTtmb3IoX1sxNjldPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdc''@;'; put 'put ''dWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNi''@;'; put 'put ''ZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVc''@;'; put 'put ''dWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1''@;'; put 'put ''MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIx''@;'; put 'put ''MVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1''@;'; put 'put ''MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3''@;'; put 'put ''Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bZ11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0''@;'; put 'put ''M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1''@;'; put 'put ''Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3''@;'; put 'put ''ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1''@;'; put 'put ''MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2''@;'; put 'put ''MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1''@;'; put 'put ''MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bZ11dPTQzNTIwK2cseVs0MzUyMCtnXT1fWzE3MF1bZ10pO2ZvcihfWzE3''@;'; put 'put ''MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2Nh''@;'; put 'put ''YVx1Y2NhZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1''@;'; put 'put ''Y2NjYlx1Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2Nl''@;'; put 'put ''Mlx1Y2NlM1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1''@;'; put 'put ''MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBi''@;'; put 'put ''Zlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1''@;'; put 'put ''MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBm''@;'; put 'put ''Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bZ11dPTQzNzc2K2cseVs0Mzc3NitnXT1fWzE3MV1b''@;'; put 'put ''Z10pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2Qx''@;'; put 'put ''MVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1''@;'; put 'put ''Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0''@;'; put 'put ''NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1''@;'; put 'put ''MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQy''@;'; put 'put ''Ylx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1''@;'; put 'put ''MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bZ11dPTQ0MDMyK2cseVs0NDAz''@;'; put 'put ''MitnXT1fWzE3Ml1bZ10pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3''@;'; put 'put ''Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1''@;'; put 'put ''Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2Rh''@;'; put 'put ''M1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1''@;'; put 'put ''Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bZ11dPTQ0''@;'; put 'put ''Mjg4K2cseVs0NDI4OCtnXT1fWzE3M11bZ10pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2Rk''@;'; put 'put ''Mlx1Y2RkM1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1''@;'; put 'put ''Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2Uw''@;'; put 'put ''NVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1''@;'; put 'put ''Y2UyOVx1Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE3NF1bZ11dPTQ0NTQ0K2cseVs0NDU0NCtnXT1fWzE3NF1bZ10pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2Uz''@;'; put 'put ''OFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1''@;'; put 'put ''Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1''@;'; put 'put ''Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc1XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE3NV1bZ11dPTQ0ODAwK2cseVs0NDgwMCtnXT1fWzE3NV1bZ10pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2Vh''@;'; put 'put ''Mlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1''@;'; put 'put ''Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1''@;'; put 'put ''Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMy''@;'; put 'put ''MFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1''@;'; put 'put ''YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNk''@;'; put 'put ''N1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11dPTQ1MDU2K2cseVs0NTA1NitnXT1fWzE3Nl1bZ10pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2Yw''@;'; put 'put ''N1x1Y2YwOVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''Y2YyNVx1Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1''@;'; put 'put ''Y2Y2MFx1Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1''@;'; put 'put ''MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1''@;'; put 'put ''YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0''@;'; put 'put ''M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bZ11dPTQ1MzEyK2cseVs0NTMxMitnXT1fWzE3N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2''@;'; put 'put ''Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2Zh''@;'; put 'put ''OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1''@;'; put 'put ''Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVk''@;'; put 'put ''MVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1''@;'; put 'put ''YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZm''@;'; put 'put ''MVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bZ11dPTQ1NTY4K2cseVs0NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Zj''@;'; put 'put ''Y1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAw''@;'; put 'put ''OFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1''@;'; put 'put ''ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBh''@;'; put 'put ''MFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1''@;'; put 'put ''YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1''@;'; put 'put ''NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bZ11dPTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2''@;'; put 'put ''OVx1ZDA2YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1''@;'; put 'put ''ZDA4Nlx1ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIw''@;'; put 'put ''Y1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1''@;'; put 'put ''YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJm''@;'; put 'put ''NVx1YjJmN1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1''@;'; put 'put ''ZDBiMVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBj''@;'; put 'put ''Zlx1ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1''@;'; put 'put ''ZDBmM1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4''@;'; put 'put ''M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1''@;'; put 'put ''YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRj''@;'; put 'put ''OFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1''@;'; put 'put ''YjUzOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitnXT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1''@;'; put 'put ''ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEz''@;'; put 'put ''M1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1''@;'; put 'put ''ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1''@;'; put 'put ''MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1''@;'; put 'put ''YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1Yjcy''@;'; put 'put ''OVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1''@;'; put 'put ''Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTkyK2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1''@;'; put 'put ''ZDE4M1x1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5''@;'; put 'put ''YVx1ZDE5Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1''@;'; put 'put ''ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1Yjdh''@;'; put 'put ''Ylx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1''@;'; put 'put ''YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1Yjhj''@;'; put 'put ''MVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1''@;'; put 'put ''Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1''@;'; put 'put ''ZDFlM1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFm''@;'; put 'put ''YVx1ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1''@;'; put 'put ''ZDIxM1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3''@;'; put 'put ''OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1''@;'; put 'put ''YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0''@;'; put 'put ''ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1''@;'; put 'put ''YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2Zvcihf''@;'; put 'put ''WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1''@;'; put 'put ''ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1''@;'; put 'put ''OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1''@;'; put 'put ''ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIw''@;'; put 'put ''ZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1''@;'; put 'put ''YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMx''@;'; put 'put ''NVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1''@;'; put 'put ''YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4''@;'; put 'put ''NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1''@;'; put 'put ''ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJi''@;'; put 'put ''YVx1ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1''@;'; put 'put ''ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5''@;'; put 'put ''OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1''@;'; put 'put ''YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5''@;'; put 'put ''NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1''@;'; put 'put ''YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0''@;'; put 'put ''NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1''@;'; put 'put ''ZDMwYlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMy''@;'; put 'put ''Zlx1ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1''@;'; put 'put ''ZDM0ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2''@;'; put 'put ''OFx1ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1''@;'; put 'put ''YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZk''@;'; put 'put ''Zlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1''@;'; put 'put ''YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11d''@;'; put 'put ''PTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1''@;'; put 'put ''ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5''@;'; put 'put ''Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1''@;'; put 'put ''ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNk''@;'; put 'put ''M1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1''@;'; put 'put ''YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4''@;'; put 'put ''ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1''@;'; put 'put ''YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1fWzE4OF1bZ10pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1''@;'; put 'put ''ZDNlMFx1ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNm''@;'; put 'put ''Ylx1ZDNmZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQz''@;'; put 'put ''Mlx1ZDQzM1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1''@;'; put 'put ''YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMw''@;'; put 'put ''MFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1''@;'; put 'put ''YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cseVs0ODM4NCtnXT1fWzE4OV1bZ10pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1''@;'; put 'put ''ZDQzZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1''@;'; put 'put ''NVx1ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5''@;'; put 'put ''Nlx1ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1''@;'; put 'put ''YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1''@;'; put 'put ''NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1''@;'; put 'put ''YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bZ11dPTQ4NjQwK2cseVs0ODY0MCtnXT1fWzE5MF1bZ10pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1''@;'; put 'put ''ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRm''@;'; put 'put ''MVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1''@;'; put 'put ''YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0''@;'; put 'put ''MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1''@;'; put 'put ''YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bZ11dPTQ4ODk2K2cseVs0ODg5NitnXT1fWzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1''@;'; put 'put ''ZDUwMFx1ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1''@;'; put 'put ''ZDUzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1''@;'; put 'put ''NFx1ZDU1NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1''@;'; put 'put ''YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3''@;'; put 'put ''NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1''@;'; put 'put ''YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5''@;'; put 'put ''Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bZ11dPTQ5MTUyK2cseVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1''@;'; put 'put ''ZDVhNFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDVi''@;'; put 'put ''YVx1ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1''@;'; put 'put ''YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1Yzhi''@;'; put 'put ''ZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1''@;'; put 'put ''Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bZ11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVl''@;'; put 'put ''ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1''@;'; put 'put ''ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYy''@;'; put 'put ''OVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1''@;'; put 'put ''YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5''@;'; put 'put ''OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1''@;'; put 'put ''Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1bZ10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1''@;'; put 'put ''Zlx1ZDY2MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1''@;'; put 'put ''ZDY3YVx1ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5''@;'; put 'put ''NVx1ZDY5Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1''@;'; put 'put ''Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2Nl''@;'; put 'put ''NFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1''@;'; put 'put ''Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2Uz''@;'; put 'put ''M1x1Y2UzNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTkyMCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZj''@;'; put 'put ''Nlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1''@;'; put 'put ''ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZm''@;'; put 'put ''ZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1''@;'; put 'put ''Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2Vm''@;'; put 'put ''NFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1''@;'; put 'put ''Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAz''@;'; put 'put ''NFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUwMTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDcz''@;'; put 'put ''MFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1''@;'; put 'put ''ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2''@;'; put 'put ''Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1''@;'; put 'put ''ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBk''@;'; put 'put ''Y1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1''@;'; put 'put ''ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIz''@;'; put 'put ''Y1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdh''@;'; put 'put ''M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1''@;'; put 'put ''ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMw''@;'; put 'put ''MFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1''@;'; put 'put ''ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNl''@;'; put 'put ''Y1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2Zv''@;'; put 'put ''cihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1''@;'; put 'put ''ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRm''@;'; put 'put ''OFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1''@;'; put 'put ''ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYw''@;'; put 'put ''MVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bZ11dPTUwOTQ0K2cseVs1MDk0NCtnXT1f''@;'; put 'put ''WzE5OV1bZ10pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5''@;'; put 'put ''ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1''@;'; put 'put ''ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3''@;'; put 'put ''NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bZ11dPTUxMjAwK2cs''@;'; put 'put ''eVs1MTIwMCtnXT1fWzIwMF1bZ10pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRj''@;'; put 'put ''Zlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1''@;'; put 'put ''NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIy''@;'; put 'put ''MVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1b''@;'; put 'put ''Z11dPTUxNzEyK2cseVs1MTcxMitnXT1fWzIwMl1bZ10pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIy''@;'; put 'put ''MVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1''@;'; put 'put ''NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVm''@;'; put 'put ''YVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzIwM11bZ11dPTUxOTY4K2cseVs1MTk2OCtnXT1fWzIwM11bZ10pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2''@;'; put 'put ''ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1''@;'; put 'put ''NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2''@;'; put 'put ''Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bZ11dPTUyMjI0K2cseVs1MjIyNCtnXT1fWzIwNF1bZ10pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlk''@;'; put 'put ''MVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1''@;'; put 'put ''OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2''@;'; put 'put ''Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bZ11dPTUyNDgwK2cseVs1MjQ4MCtnXT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1Njhm''@;'; put 'put ''YVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1''@;'; put 'put ''OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0''@;'; put 'put ''Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bZ11dPTUyNzM2K2cseVs1MjczNitnXT1fWzIwNl1bZ10pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1Njlj''@;'; put 'put ''Ylx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1''@;'; put 'put ''OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIz''@;'; put 'put ''OFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bZ11dPTUyOTkyK2cseVs1Mjk5MitnXT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4''@;'; put 'put ''Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1''@;'; put 'put ''ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2''@;'; put 'put ''Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5''@;'; put 'put ''OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1''@;'; put 'put ''OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1Zjkx''@;'; put 'put ''NVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1Zjky''@;'; put 'put ''Ylx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1''@;'; put 'put ''ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0''@;'; put 'put ''OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1''@;'; put 'put ''NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIxMF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjVi''@;'; put 'put ''N1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1''@;'; put 'put ''ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMw''@;'; put 'put ''ZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1''@;'; put 'put ''NjMxMVx1NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZl''@;'; put 'put ''NFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1''@;'; put 'put ''NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2''@;'; put 'put ''M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1''@;'; put 'put ''OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11dPTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4''@;'; put 'put ''Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1''@;'; put 'put ''ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2Nh''@;'; put 'put ''ZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1''@;'; put 'put ''NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10p''@;'; put 'put ''O2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4''@;'; put 'put ''OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1''@;'; put 'put ''N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYw''@;'; put 'put ''NVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1''@;'; put 'put ''NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtn''@;'; put 'put ''XT1fWzIxNF1bZ10pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1''@;'; put 'put ''Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIy''@;'; put 'put ''OVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1''@;'; put 'put ''NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQw''@;'; put 'put ''K2cseVs1NTA0MCtnXT1fWzIxNV1bZ10pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1''@;'; put 'put ''NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNi''@;'; put 'put ''ZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1''@;'; put 'put ''NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIx''@;'; put 'put ''Nl1bZ11dPTU1Mjk2K2cseVs1NTI5NitnXT1fWzIxNl1bZ10pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1''@;'; put 'put ''NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTky''@;'; put 'put ''Mlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1''@;'; put 'put ''NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIxN11bZ11dPTU1NTUyK2cseVs1NTU1MitnXT1fWzIxN11bZ10pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1''@;'; put 'put ''NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQw''@;'; put 'put ''Zlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1''@;'; put 'put ''NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bZ11dPTU1ODA4K2cseVs1NTgwOCtnXT1fWzIxOF1bZ10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1''@;'; put 'put ''Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBk''@;'; put 'put ''YVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1''@;'; put 'put ''N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bZ11dPTU2MDY0K2cseVs1NjA2NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1''@;'; put 'put ''NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhk''@;'; put 'put ''Y1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1''@;'; put 'put ''NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bZ11dPTU2MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1bZ10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1''@;'; put 'put ''ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYx''@;'; put 'put ''MFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1''@;'; put 'put ''NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1''@;'; put 'put ''NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNm''@;'; put 'put ''OFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1''@;'; put 'put ''Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1''@;'; put 'put ''OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNl''@;'; put 'put ''MFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1''@;'; put 'put ''N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3''@;'; put 'put ''Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1''@;'; put 'put ''NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0''@;'; put 'put ''NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1''@;'; put 'put ''ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZk''@;'; put 'put ''Ylx1NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1''@;'; put 'put ''NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4''@;'; put 'put ''ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1''@;'; put 'put ''NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4''@;'; put 'put ''OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1''@;'; put 'put ''NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFi''@;'; put 'put ''MFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1''@;'; put 'put ''ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTli''@;'; put 'put ''NFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIy''@;'; put 'put ''N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1''@;'; put 'put ''ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjVi''@;'; put 'put ''ZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1''@;'; put 'put ''OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZj''@;'; put 'put ''NVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11b''@;'; put 'put ''Z10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1''@;'; put 'put ''NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1''@;'; put 'put ''ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1''@;'; put 'put ''OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4''@;'; put 'put ''ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2''@;'; put 'put ''OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3''@;'; put 'put ''OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1''@;'; put 'put ''OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0''@;'; put 'put ''NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4''@;'; put 'put ''NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVh''@;'; put 'put ''Ylx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1''@;'; put 'put ''NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFi''@;'; put 'put ''MVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUz''@;'; put 'put ''Nlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1''@;'; put 'put ''ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQz''@;'; put 'put ''ZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThj''@;'; put 'put ''NVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1''@;'; put 'put ''N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTky''@;'; put 'put ''ZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMy''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5MitnXT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODky''@;'; put 'put ''NVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1''@;'; put 'put ''NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4''@;'; put 'put ''NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFj''@;'; put 'put ''NFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1''@;'; put 'put ''NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3''@;'; put 'put ''YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIzNF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5''@;'; put 'put ''OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1''@;'; put 'put ''OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThl''@;'; put 'put ''ZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1''@;'; put 'put ''Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1''@;'; put 'put ''ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1Zjlm''@;'; put 'put ''MVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bZ11dPTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTlj''@;'; put 'put ''OVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1''@;'; put 'put ''NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMw''@;'; put 'put ''N1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1''@;'; put 'put ''OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5''@;'; put 'put ''M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1''@;'; put 'put ''NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2Uz''@;'; put 'put ''ZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1''@;'; put 'put ''NmJiZlx1NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0''@;'; put 'put ''Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1''@;'; put 'put ''NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1Njdm''@;'; put 'put ''ZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1''@;'; put 'put ''OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5''@;'; put 'put ''MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1''@;'; put 'put ''NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4''@;'; put 'put ''N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1''@;'; put 'put ''NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2Zvcihf''@;'; put 'put ''WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3''@;'; put 'put ''ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1''@;'; put 'put ''NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNm''@;'; put 'put ''Ylx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1''@;'; put 'put ''NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0''@;'; put 'put ''MV1bZ10pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRh''@;'; put 'put ''Ylx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1''@;'; put 'put ''ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1Nzcx''@;'; put 'put ''ZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1''@;'; put 'put ''ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2''@;'; put 'put ''MTk1MitnXT1fWzI0Ml1bZ10pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1''@;'; put 'put ''OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVh''@;'; put 'put ''Y1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1''@;'; put 'put ''NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11d''@;'; put 'put ''PTYyMjA4K2cseVs2MjIwOCtnXT1fWzI0M11bZ10pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1''@;'; put 'put ''NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNi''@;'; put 'put ''ZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1''@;'; put 'put ''NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzI0NF1bZ11dPTYyNDY0K2cseVs2MjQ2NCtnXT1fWzI0NF1bZ10pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1''@;'; put 'put ''NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmEx''@;'; put 'put ''ZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1''@;'; put 'put ''OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzI0NV1bZ11dPTYyNzIwK2cseVs2MjcyMCtnXT1fWzI0NV1bZ10pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1''@;'; put 'put ''NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThl''@;'; put 'put ''ZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1''@;'; put 'put ''ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bZ11dPTYyOTc2K2cseVs2Mjk3NitnXT1fWzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1''@;'; put 'put ''NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQx''@;'; put 'put ''MFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1''@;'; put 'put ''NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bZ11dPTYzMjMyK2cseVs2MzIzMitnXT1fWzI0N11bZ10pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1''@;'; put 'put ''NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUz''@;'; put 'put ''ZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1''@;'; put 'put ''OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0''@;'; put 'put ''OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bZ11dPTYzNDg4K2cseVs2MzQ4OCtnXT1fWzI0OF1bZ10pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1''@;'; put 'put ''NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3''@;'; put 'put ''OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1''@;'; put 'put ''ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bZ11dPTYzNzQ0K2cseVs2Mzc0NCtnXT1fWzI0OV1bZ10pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1''@;'; put 'put ''NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1''@;'; put 'put ''Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1''@;'; put 'put ''ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MF1bZ11dPTY0ZTMrZyx5WzY0ZTMrZ109X1syNTBdW2ddKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3''@;'; put 'put ''YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJc''@;'; put 'put ''dTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4''@;'; put 'put ''NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJc''@;'; put 'put ''dTc1NzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTFdW2ddXT02NDI1NitnLHlbNjQyNTYrZ109X1syNTFdW2ddKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZh''@;'; put 'put ''MGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2Fc''@;'; put 'put ''dTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVm''@;'; put 'put ''OGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2Yzlc''@;'; put 'put ''dTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW2ddXT02NDUxMitnLHlbNjQ1MTIrZ109X1syNTJdW2ddKTtmb3IoX1syNTNdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUz''@;'; put 'put ''OWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlc''@;'; put 'put ''dTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0''@;'; put 'put ''MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFc''@;'; put 'put ''dTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTNdW2ddXT02NDc2OCtnLHlbNjQ3NjgrZ109X1syNTNdW2ddKTtyZXR1cm57ZW5jOkksZGVj''@;'; put 'put ''Onl9fSgpLFhbOTUwXT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx''@;'; put 'put ''ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTYxXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1''@;'; put 'put ''Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1''@;'; put 'put ''ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1''@;'; put 'put ''MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVc''@;'; put 'put ''eGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYy''@;'; put 'put ''XHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUy''@;'; put 'put ''MTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtnXSk7Zm9yKF9bMTYyXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUz''@;'; put 'put ''M2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1''@;'; put 'put ''MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1''@;'; put 'put ''MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2''@;'; put 'put ''OFx1MjE2OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1''@;'; put 'put ''ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1''@;'; put 'put ''MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bZ11dPTQxNDcyK2cseVs0MTQ3MitnXT1fWzE2Ml1bZ10pO2ZvcihfWzE2''@;'; put 'put ''M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5''@;'; put 'put ''ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1''@;'; put 'put ''MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1''@;'; put 'put ''MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJj''@;'; put 'put ''Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bZ11dPTQxNzI4K2cseVs0MTcyOCtnXT1fWzE2M11b''@;'; put 'put ''Z10pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5''@;'; put 'put ''Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1''@;'; put 'put ''NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1''@;'; put 'put ''NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2''@;'; put 'put ''Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1''@;'; put 'put ''NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMz''@;'; put 'put ''NFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bZ11dPTQxOTg0K2cseVs0MTk4''@;'; put 'put ''NCtnXT1fWzE2NF1bZ10pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVk''@;'; put 'put ''N1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1''@;'; put 'put ''NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1Njcy''@;'; put 'put ''Y1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1''@;'; put 'put ''NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVm''@;'; put 'put ''Mlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bZ11dPTQy''@;'; put 'put ''MjQwK2cseVs0MjI0MCtnXT1fWzE2NV1bZ10pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMy''@;'; put 'put ''MFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1''@;'; put 'put ''NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2''@;'; put 'put ''NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1''@;'; put 'put ''ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1''@;'; put 'put ''ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE2Nl1bZ11dPTQyNDk2K2cseVs0MjQ5NitnXT1fWzE2Nl1bZ10pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0''@;'; put 'put ''Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1''@;'; put 'put ''NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1''@;'; put 'put ''YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1''@;'; put 'put ''NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4''@;'; put 'put ''Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY3XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE2N11bZ11dPTQyNzUyK2cseVs0Mjc1MitnXT1fWzE2N11bZ10pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4''@;'; put 'put ''MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1''@;'; put 'put ''NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5''@;'; put 'put ''Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRl''@;'; put 'put ''MVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1''@;'; put 'put ''NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIz''@;'; put 'put ''MFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY4''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bZ11dPTQzMDA4K2cseVs0MzAwOCtnXT1fWzE2OF1bZ10pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3''@;'; put 'put ''N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1''@;'; put 'put ''NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMx''@;'; put 'put ''YVx1NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5''@;'; put 'put ''NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1''@;'; put 'put ''NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJi''@;'; put 'put ''MVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OV0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bZ11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2''@;'; put 'put ''ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1''@;'; put 'put ''NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNh''@;'; put 'put ''Y1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNh''@;'; put 'put ''OVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1''@;'; put 'put ''ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJi''@;'; put 'put ''ZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MF0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bZ11dPTQzNTIwK2cseVs0MzUyMCtnXT1fWzE3MF1bZ10pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZi''@;'; put 'put ''OVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1''@;'; put 'put ''NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRh''@;'; put 'put ''Nlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdh''@;'; put 'put ''Mlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1''@;'; put 'put ''NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAy''@;'; put 'put ''NVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bZ11dPTQzNzc2K2cseVs0Mzc3NitnXT1fWzE3MV1bZ10pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1''@;'; put 'put ''NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQw''@;'; put 'put ''Ylx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQw''@;'; put 'put ''ZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1''@;'; put 'put ''NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1Nzgw''@;'; put 'put ''Y1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bZ11dPTQ0MDMyK2cseVs0NDAzMitnXT1fWzE3Ml1bZ10pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1''@;'; put 'put ''ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNh''@;'; put 'put ''MFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFj''@;'; put 'put ''ZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1''@;'; put 'put ''NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFj''@;'; put 'put ''Y1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1''@;'; put 'put ''NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bZ11dPTQ0Mjg4K2cseVs0NDI4OCtnXT1fWzE3M11bZ10pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1''@;'; put 'put ''NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQw''@;'; put 'put ''MVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5''@;'; put 'put ''Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1''@;'; put 'put ''NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0''@;'; put 'put ''Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1''@;'; put 'put ''NmQ3N1x1NmQ1OVx1NmQ5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bZ11dPTQ0NTQ0K2cseVs0NDU0NCtnXT1fWzE3NF1bZ10pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1''@;'; put 'put ''NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZi''@;'; put 'put ''MFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1''@;'; put 'put ''MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1''@;'; put 'put ''N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBm''@;'; put 'put ''M1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1''@;'; put 'put ''ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bZ11dPTQ0ODAwK2cseVs0NDgwMCtnXT1fWzE3NV1bZ10pO2ZvcihfWzE3Nl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1''@;'; put 'put ''OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZm''@;'; put 'put ''OFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1''@;'; put 'put ''ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1''@;'; put 'put ''NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1''@;'; put 'put ''Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1''@;'; put 'put ''NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11dPTQ1MDU2K2cseVs0NTA1NitnXT1fWzE3Nl1bZ10pO2Zvcihf''@;'; put 'put ''WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1''@;'; put 'put ''NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2''@;'; put 'put ''Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBi''@;'; put 'put ''NVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1''@;'; put 'put ''NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVj''@;'; put 'put ''Zlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1''@;'; put 'put ''Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bZ11dPTQ1MzEyK2cseVs0NTMxMitnXT1fWzE3''@;'; put 'put ''N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1''@;'; put 'put ''NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEw''@;'; put 'put ''OVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRm''@;'; put 'put ''N1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1''@;'; put 'put ''Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2Qz''@;'; put 'put ''Mlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1''@;'; put 'put ''ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bZ11dPTQ1NTY4K2cseVs0''@;'; put 'put ''NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1''@;'; put 'put ''ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNh''@;'; put 'put ''N1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1''@;'; put 'put ''OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNh''@;'; put 'put ''NVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1''@;'; put 'put ''NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bZ11d''@;'; put 'put ''PTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1''@;'; put 'put ''NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBl''@;'; put 'put ''MFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1''@;'; put 'put ''NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1Njkx''@;'; put 'put ''Mlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1''@;'; put 'put ''NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1''@;'; put 'put ''NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUy''@;'; put 'put ''Nlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1''@;'; put 'put ''N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNm''@;'; put 'put ''OFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1''@;'; put 'put ''ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgxXVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitnXT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1''@;'; put 'put ''OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVm''@;'; put 'put ''OFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1''@;'; put 'put ''OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1''@;'; put 'put ''OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3''@;'; put 'put ''N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1''@;'; put 'put ''NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTkyK2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1''@;'; put 'put ''NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIy''@;'; put 'put ''MVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1''@;'; put 'put ''NjcwM1x1Njk5NFx1Njk2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1''@;'; put 'put ''NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0''@;'; put 'put ''ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1''@;'; put 'put ''NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4M10ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1''@;'; put 'put ''Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2Fh''@;'; put 'put ''MFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1''@;'; put 'put ''ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1''@;'; put 'put ''ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhl''@;'; put 'put ''MVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1''@;'; put 'put ''OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4''@;'; put 'put ''NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1''@;'; put 'put ''OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIz''@;'; put 'put ''ZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1''@;'; put 'put ''OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1''@;'; put 'put ''NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYx''@;'; put 'put ''Zlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1''@;'; put 'put ''NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZh''@;'; put 'put ''Mlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1''@;'; put 'put ''NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1''@;'; put 'put ''NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYx''@;'; put 'put ''M1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1''@;'; put 'put ''N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5''@;'; put 'put ''OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1''@;'; put 'put ''ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1''@;'; put 'put ''OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3''@;'; put 'put ''NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1''@;'; put 'put ''OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEw''@;'; put 'put ''NVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11dPTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5''@;'; put 'put ''Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1''@;'; put 'put ''NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1''@;'; put 'put ''NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3''@;'; put 'put ''NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1''@;'; put 'put ''NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1''@;'; put 'put ''N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1fWzE4OF1bZ10pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1Nzhi''@;'; put 'put ''YVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1''@;'; put 'put ''N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1''@;'; put 'put ''ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1''@;'; put 'put ''M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1''@;'; put 'put ''OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYx''@;'; put 'put ''Zlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cseVs0ODM4NCtnXT1fWzE4OV1bZ10pO2ZvcihfWzE5MF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJh''@;'; put 'put ''Y1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1''@;'; put 'put ''OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1''@;'; put 'put ''NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThj''@;'; put 'put ''MVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1''@;'; put 'put ''NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1''@;'; put 'put ''Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bZ11dPTQ4NjQwK2cseVs0ODY0MCtnXT1fWzE5MF1bZ10pO2Zv''@;'; put 'put ''cihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFk''@;'; put 'put ''NVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1''@;'; put 'put ''NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1''@;'; put 'put ''N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2''@;'; put 'put ''YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1''@;'; put 'put ''OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMy''@;'; put 'put ''MFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bZ11dPTQ4ODk2K2cseVs0ODg5NitnXT1f''@;'; put 'put ''WzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcw''@;'; put 'put ''ZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1''@;'; put 'put ''OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRk''@;'; put 'put ''OFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1''@;'; put 'put ''NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRh''@;'; put 'put ''OVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bZ11dPTQ5MTUyK2cs''@;'; put 'put ''eVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2Mw''@;'; put 'put ''N1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1''@;'; put 'put ''N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkz''@;'; put 'put ''ZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1''@;'; put 'put ''OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVj''@;'; put 'put ''Y1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11b''@;'; put 'put ''Z11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVk''@;'; put 'put ''Y1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1''@;'; put 'put ''NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2''@;'; put 'put ''MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1''@;'; put 'put ''OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNi''@;'; put 'put ''MFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk0XVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1bZ10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkz''@;'; put 'put ''ZVx1OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1''@;'; put 'put ''NWJmNVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3''@;'; put 'put ''OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1''@;'; put 'put ''OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNk''@;'; put 'put ''Y1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk1XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTkyMCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWEx''@;'; put 'put ''OVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1''@;'; put 'put ''NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3''@;'; put 'put ''ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2''@;'; put 'put ''Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1''@;'; put 'put ''OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJh''@;'; put 'put ''N1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUwMTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4''@;'; put 'put ''ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1''@;'; put 'put ''OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRl''@;'; put 'put ''NFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1''@;'; put 'put ''MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1''@;'; put 'put ''NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFk''@;'; put 'put ''NFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5N10ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQx''@;'; put 'put ''Ylx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1''@;'; put 'put ''OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIy''@;'; put 'put ''OFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0''@;'; put 'put ''Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1''@;'; put 'put ''NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3''@;'; put 'put ''M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVm''@;'; put 'put ''NVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1''@;'; put 'put ''NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2''@;'; put 'put ''NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bZ11dPTUxNDU2K2cseVs1MTQ1NitnXT1fWzIwMV1bZ10pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1''@;'; put 'put ''NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4''@;'; put 'put ''Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0''@;'; put 'put ''Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1''@;'; put 'put ''NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZm''@;'; put 'put ''Ylx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bZ11dPTUxNzEyK2cseVs1MTcxMitnXT1fWzIwMl1bZ10pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1''@;'; put 'put ''NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAz''@;'; put 'put ''NFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5''@;'; put 'put ''ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1''@;'; put 'put ''NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2''@;'; put 'put ''Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1''@;'; put 'put ''NTc3NFx1NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bZ11dPTUxOTY4K2cseVs1MTk2OCtnXT1fWzIwM11bZ10pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1''@;'; put 'put ''NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYy''@;'; put 'put ''Mlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAy''@;'; put 'put ''Mlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1''@;'; put 'put ''NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3''@;'; put 'put ''YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1''@;'; put 'put ''NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bZ11dPTUyMjI0K2cseVs1MjIyNCtnXT1fWzIwNF1bZ10pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1''@;'; put 'put ''NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRl''@;'; put 'put ''OFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3''@;'; put 'put ''Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1''@;'; put 'put ''ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZj''@;'; put 'put ''ZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1''@;'; put 'put ''NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bZ11dPTUyNDgwK2cseVs1MjQ4MCtnXT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1''@;'; put 'put ''NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlm''@;'; put 'put ''Mlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNj''@;'; put 'put ''N1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1''@;'; put 'put ''NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJm''@;'; put 'put ''OVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1''@;'; put 'put ''NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bZ11dPTUyNzM2K2cseVs1MjczNitnXT1fWzIwNl1bZ10p''@;'; put 'put ''O2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1''@;'; put 'put ''NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMy''@;'; put 'put ''MFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQx''@;'; put 'put ''OFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1''@;'; put 'put ''NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUy''@;'; put 'put ''ZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1''@;'; put 'put ''Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bZ11dPTUyOTkyK2cseVs1Mjk5Mitn''@;'; put 'put ''XT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1''@;'; put 'put ''N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIy''@;'; put 'put ''MVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1''@;'; put 'put ''OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAx''@;'; put 'put ''Y1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1''@;'; put 'put ''NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4''@;'; put 'put ''K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1''@;'; put 'put ''NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJh''@;'; put 'put ''ZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1''@;'; put 'put ''NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0''@;'; put 'put ''N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1''@;'; put 'put ''Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIw''@;'; put 'put ''OV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1''@;'; put 'put ''NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4''@;'; put 'put ''M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1''@;'; put 'put ''NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1Nzcx''@;'; put 'put ''MVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1''@;'; put 'put ''NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIxMF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1''@;'; put 'put ''N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2Zj''@;'; put 'put ''M1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1''@;'; put 'put ''ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2''@;'; put 'put ''ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1''@;'; put 'put ''OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjExXVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1''@;'; put 'put ''OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2''@;'; put 'put ''NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1''@;'; put 'put ''NTU1Mlx1NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1''@;'; put 'put ''NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1''@;'; put 'put ''OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1''@;'; put 'put ''NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11dPTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1''@;'; put 'put ''NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBk''@;'; put 'put ''Ylx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1''@;'; put 'put ''NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1''@;'; put 'put ''Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1Njhh''@;'; put 'put ''MFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1''@;'; put 'put ''NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxM10ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1''@;'; put 'put ''NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3''@;'; put 'put ''Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1''@;'; put 'put ''NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1''@;'; put 'put ''NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2Iz''@;'; put 'put ''NVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1''@;'; put 'put ''N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtnXT1fWzIxNF1bZ10pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNh''@;'; put 'put ''OFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1''@;'; put 'put ''ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1''@;'; put 'put ''ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEz''@;'; put 'put ''MFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1''@;'; put 'put ''OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQwK2cseVs1NTA0MCtnXT1fWzIxNV1bZ10pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4''@;'; put 'put ''ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1''@;'; put 'put ''NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1''@;'; put 'put ''NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4''@;'; put 'put ''Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1''@;'; put 'put ''NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjEx''@;'; put 'put ''NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bZ11dPTU1Mjk2K2cseVs1NTI5NitnXT1fWzIxNl1bZ10pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNl''@;'; put 'put ''OFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1''@;'; put 'put ''NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1''@;'; put 'put ''NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1Njhm''@;'; put 'put ''OFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1''@;'; put 'put ''NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUw''@;'; put 'put ''M1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bZ11dPTU1NTUyK2cseVs1NTU1MitnXT1fWzIxN11bZ10pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUz''@;'; put 'put ''NVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1''@;'; put 'put ''NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1''@;'; put 'put ''NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1Nzdk''@;'; put 'put ''ZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1''@;'; put 'put ''N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1''@;'; put 'put ''Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bZ11dPTU1ODA4K2cseVs1NTgwOCtnXT1fWzIxOF1bZ10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFl''@;'; put 'put ''ZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1''@;'; put 'put ''ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1''@;'; put 'put ''ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1''@;'; put 'put ''Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1''@;'; put 'put ''OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRk''@;'; put 'put ''OVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bZ11dPTU2MDY0K2cseVs1NjA2NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIy''@;'; put 'put ''MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEy''@;'; put 'put ''Y1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1''@;'; put 'put ''OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1''@;'; put 'put ''OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBi''@;'; put 'put ''YVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1''@;'; put 'put ''NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFi''@;'; put 'put ''YVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bZ11dPTU2MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1b''@;'; put 'put ''Z10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0''@;'; put 'put ''YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1''@;'; put 'put ''NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1''@;'; put 'put ''NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5''@;'; put 'put ''Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1''@;'; put 'put ''NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1Njkz''@;'; put 'put ''Y1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3''@;'; put 'put ''NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmVi''@;'; put 'put ''OVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1''@;'; put 'put ''NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0''@;'; put 'put ''Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1''@;'; put 'put ''NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3''@;'; put 'put ''Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2''@;'; put 'put ''ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3''@;'; put 'put ''Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1''@;'; put 'put ''N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1''@;'; put 'put ''OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1''@;'; put 'put ''ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcw''@;'; put 'put ''NVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEz''@;'; put 'put ''Zlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1''@;'; put 'put ''OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIy''@;'; put 'put ''ZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1''@;'; put 'put ''OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4''@;'; put 'put ''MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYy''@;'; put 'put ''N1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1''@;'; put 'put ''NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJl''@;'; put 'put ''MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVk''@;'; put 'put ''OFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1''@;'; put 'put ''NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1''@;'; put 'put ''MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1Njli''@;'; put 'put ''Y1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1''@;'; put 'put ''NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYx''@;'; put 'put ''Mlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVm''@;'; put 'put ''Y1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1''@;'; put 'put ''NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4''@;'; put 'put ''M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5''@;'; put 'put ''MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1''@;'; put 'put ''N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3''@;'; put 'put ''M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRj''@;'; put 'put ''ZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1''@;'; put 'put ''ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODcz''@;'; put 'put ''Y1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhl''@;'; put 'put ''Y1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1''@;'; put 'put ''OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3''@;'; put 'put ''Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJh''@;'; put 'put ''MVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1''@;'; put 'put ''OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBm''@;'; put 'put ''Zlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1''@;'; put 'put ''NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0''@;'; put 'put ''OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2''@;'; put 'put ''ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1''@;'; put 'put ''NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1Njlm''@;'; put 'put ''Y1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1''@;'; put 'put ''NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5''@;'; put 'put ''YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3''@;'; put 'put ''OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1''@;'; put 'put ''NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2Nj''@;'; put 'put ''Ylx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1''@;'; put 'put ''ODE5Zlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1''@;'; put 'put ''ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUy''@;'; put 'put ''Nlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1''@;'; put 'put ''Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1''@;'; put 'put ''ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFk''@;'; put 'put ''OFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1''@;'; put 'put ''OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1''@;'; put 'put ''OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJl''@;'; put 'put ''Zlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVh''@;'; put 'put ''Ylx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1''@;'; put 'put ''OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3''@;'; put 'put ''Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1''@;'; put 'put ''NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5MitnXT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1''@;'; put 'put ''NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2''@;'; put 'put ''Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRk''@;'; put 'put ''Nlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1''@;'; put 'put ''NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0''@;'; put 'put ''ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1''@;'; put 'put ''NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2Zvcihf''@;'; put 'put ''WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1''@;'; put 'put ''NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYy''@;'; put 'put ''ZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1Nzhl''@;'; put 'put ''OVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1''@;'; put 'put ''N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2Ux''@;'; put 'put ''Nlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1''@;'; put 'put ''ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIz''@;'; put 'put ''NF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1''@;'; put 'put ''ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5''@;'; put 'put ''ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFl''@;'; put 'put ''Mlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1''@;'; put 'put ''OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5''@;'; put 'put ''M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1''@;'; put 'put ''OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2''@;'; put 'put ''MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1''@;'; put 'put ''OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTll''@;'; put 'put ''OVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1''@;'; put 'put ''NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIy''@;'; put 'put ''ZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1''@;'; put 'put ''NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bZ11d''@;'; put 'put ''PTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1''@;'; put 'put ''NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5''@;'; put 'put ''N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1''@;'; put 'put ''N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0''@;'; put 'put ''OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1''@;'; put 'put ''ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1''@;'; put 'put ''ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdj''@;'; put 'put ''Mlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1''@;'; put 'put ''OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0''@;'; put 'put ''N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1''@;'; put 'put ''OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1''@;'; put 'put ''OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlm''@;'; put 'put ''Y1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1''@;'; put 'put ''OWQzMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1''@;'; put 'put ''OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFl''@;'; put 'put ''OVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1''@;'; put 'put ''NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1''@;'; put 'put ''NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1''@;'; put 'put ''Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1''@;'; put 'put ''ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1''@;'; put 'put ''ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgw''@;'; put 'put ''MVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1''@;'; put 'put ''OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1''@;'; put 'put ''OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNh''@;'; put 'put ''Nlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1''@;'; put 'put ''OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1''@;'; put 'put ''OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJj''@;'; put 'put ''NFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1''@;'; put 'put ''OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0''@;'; put 'put ''MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0MV1bZ10pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1''@;'; put 'put ''NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAx''@;'; put 'put ''OVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1''@;'; put 'put ''NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1''@;'; put 'put ''N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVl''@;'; put 'put ''MVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1''@;'; put 'put ''ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2MTk1MitnXT1fWzI0Ml1bZ10pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1''@;'; put 'put ''M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1''@;'; put 'put ''OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1''@;'; put 'put ''OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJl''@;'; put 'put ''Ylx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1''@;'; put 'put ''OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11dPTYyMjA4K2cseVs2MjIwOCtnXT1fWzI0M11bZ10pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFm''@;'; put 'put ''MVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1''@;'; put 'put ''NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1''@;'; put 'put ''N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgx''@;'; put 'put ''MVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1''@;'; put 'put ''OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQw''@;'; put 'put ''YVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bZ11dPTYyNDY0K2cseVs2MjQ2NCtnXT1fWzI0NF1bZ10pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1''@;'; put 'put ''OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1''@;'; put 'put ''OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1''@;'; put 'put ''OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZj''@;'; put 'put ''M1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1''@;'; put 'put ''NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYy''@;'; put 'put ''MFx1ODYyOVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bZ11dPTYyNzIwK2cseVs2MjcyMCtnXT1fWzI0NV1bZ10pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRh''@;'; put 'put ''Zlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1''@;'; put 'put ''OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1''@;'; put 'put ''OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRj''@;'; put 'put ''OFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1''@;'; put 'put ''NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3''@;'; put 'put ''MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bZ11dPTYyOTc2K2cseVs2Mjk3NitnXT1fWzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3''@;'; put 'put ''MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1''@;'; put 'put ''OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1''@;'; put 'put ''OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRl''@;'; put 'put ''OVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1''@;'; put 'put ''NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgz''@;'; put 'put ''MFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bZ11dPTYzMjMyK2cseVs2MzIzMitnXT1fWzI0N11bZ10pO2Zv''@;'; put 'put ''cihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdj''@;'; put 'put ''NVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1''@;'; put 'put ''OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1''@;'; put 'put ''OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgz''@;'; put 'put ''N1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1''@;'; put 'put ''OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2''@;'; put 'put ''Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bZ11dPTYzNDg4K2cseVs2MzQ4OCtnXT1f''@;'; put 'put ''WzI0OF1bZ10pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5''@;'; put 'put ''OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1''@;'; put 'put ''OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIy''@;'; put 'put ''N1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1''@;'; put 'put ''ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2''@;'; put 'put ''Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bZ11dPTYzNzQ0K2cs''@;'; put 'put ''eVs2Mzc0NCtnXT1fWzI0OV1bZ10pO3JldHVybntlbmM6SSxkZWM6eX19KCksWFsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5''@;'; put 'put ''XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIw''@;'; put 'put ''MjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUw''@;'; put 'put ''MmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4''@;'; put 'put ''YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUw''@;'; put 'put ''MTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1''@;'; put 'put ''MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEw''@;'; put 'put ''XHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0''@;'; put 'put ''MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2Fc''@;'; put 'put ''dTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0''@;'; put 'put ''NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0Mjdc''@;'; put 'put ''dTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0''@;'; put 'put ''NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0''@;'; put 'put ''dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYg''@;'; put 'put ''IVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2''@;'; put 'put ''MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4''@;'; put 'put ''YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhk''@;'; put 'put ''Mlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZi''@;'; put 'put ''XHhmY1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4''@;'; put 'put ''MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ''@;'; put 'put ''WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUy''@;'; put 'put ''MDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4''@;'; put 'put ''YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVm''@;'; put 'put ''ZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2Jk''@;'; put 'put ''XHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3ku''@;'; put 'put ''Y2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgx''@;'; put 'put ''N1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVc''@;'; put 'put ''dTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEw''@;'; put 'put ''XHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4Yzlc''@;'; put 'put ''eGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4''@;'; put 'put ''ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRl''@;'; put 'put ''YzpJfX0oKSxYWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSor''@;'; put 'put ''LC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFi''@;'; put 'put ''XHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRc''@;'; put 'put ''dTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1''@;'; put 'put ''ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUz''@;'; put 'put ''MyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc''@;'; put 'put ''eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBh''@;'; put 'put ''Y1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1''@;'; put 'put ''MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFc''@;'; put 'put ''dTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQw''@;'; put 'put ''XHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNc''@;'; put 'put ''dTIwMGVcdTIwMGZcdTA2ZDIiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFc''@;'; put 'put ''eDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldY''@;'; put 'put ''WVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk''@;'; put 'put ''XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhi''@;'; put 'put ''N1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3''@;'; put 'put ''XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhm''@;'; put 'put ''NVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgp''@;'; put 'put ''LFhbMTI1OF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEy''@;'; put 'put ''MzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRc''@;'; put 'put ''eGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1''@;'; put 'put ''MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhm''@;'; put 'put ''YVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0i''@;'; put 'put ''XDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BR''@;'; put 'put ''UlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhm''@;'; put 'put ''YVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4''@;'; put 'put ''ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFc''@;'; put 'put ''dWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9''@;'; put 'put ''W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc''@;'; put 'put ''eDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr''@;'; put 'put ''bG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIw''@;'; put 'put ''MjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUw''@;'; put 'put ''M2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAz''@;'; put 'put ''YWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlc''@;'; put 'put ''dTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxY''@;'; put 'put ''WzEwMDA3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz''@;'; put 'put ''NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRc''@;'; put 'put ''dTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAy''@;'; put 'put ''XHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJc''@;'; put 'put ''dTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1''@;'; put 'put ''MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLEk9W10s''@;'; put 'put ''Xz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAy''@;'; put 'put ''XHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpb''@;'; put 'put ''XFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJc''@;'; put 'put ''dWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIw''@;'; put 'put ''MWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVc''@;'; put 'put ''dTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1''@;'; put 'put ''ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjFdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW2ddXT00MTIxNitnLHlbNDEyMTYrZ109X1sxNjFdW2ddKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0''@;'; put 'put ''ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2Jc''@;'; put 'put ''dTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMy''@;'; put 'put ''MjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjJd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZm''@;'; put 'put ''MGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFc''@;'; put 'put ''dWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZm''@;'; put 'put ''NDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMw''@;'; put 'put ''NGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhc''@;'; put 'put ''dTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMw''@;'; put 'put ''ODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMw''@;'; put 'put ''YWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZc''@;'; put 'put ''dTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMw''@;'; put 'put ''ZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAz''@;'; put 'put ''OTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRc''@;'; put 'put ''dTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sxNjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0''@;'; put 'put ''MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0''@;'; put 'put ''M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlbNDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4''@;'; put 'put ''ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMx''@;'; put 'put ''MjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sxNjhdW2ddKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1''@;'; put 'put ''MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVc''@;'; put 'put ''dTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1''@;'; put 'put ''M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW2ddXT00MzI2NCtnLHlbNDMyNjQrZ109X1sxNjldW2ddKTtmb3IoX1sxNzZdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0''@;'; put 'put ''Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRc''@;'; put 'put ''dTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThk''@;'; put 'put ''MjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFc''@;'; put 'put ''dTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3Io''@;'; put 'put ''X1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRm''@;'; put 'put ''ZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNc''@;'; put 'put ''dTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4''@;'; put 'put ''YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThc''@;'; put 'put ''dTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sx''@;'; put 'put ''NzddW2ddKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1''@;'; put 'put ''YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNc''@;'; put 'put ''dTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1''@;'; put 'put ''Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBc''@;'; put 'put ''dTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlb''@;'; put 'put ''NDU1NjgrZ109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhc''@;'; put 'put ''dTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYz''@;'; put 'put ''MDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhc''@;'; put 'put ''dTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2dd''@;'; put 'put ''XT00NTgyNCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRc''@;'; put 'put ''dTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRl''@;'; put 'put ''MWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVc''@;'; put 'put ''dTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sxODBdW2ddKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBc''@;'; put 'put ''dTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcy''@;'; put 'put ''YzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBc''@;'; put 'put ''dTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlbNDYzMzYrZ109X1sxODFdW2ddKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVc''@;'; put 'put ''dTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdm''@;'; put 'put ''MGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThc''@;'; put 'put ''dTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2ddXT00NjU5MitnLHlbNDY1OTIrZ109X1sxODJdW2ddKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFc''@;'; put 'put ''dTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgw''@;'; put 'put ''YmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRc''@;'; put 'put ''dTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW2ddXT00Njg0OCtnLHlbNDY4NDgrZ109X1sxODNdW2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRc''@;'; put 'put ''dTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3''@;'; put 'put ''ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVc''@;'; put 'put ''dTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx''@;'; put 'put ''ODRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODRdW2ddXT00NzEwNCtnLHlbNDcxMDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlc''@;'; put 'put ''dTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1''@;'; put 'put ''NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBc''@;'; put 'put ''dTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW2ddXT00NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJc''@;'; put 'put ''dTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1''@;'; put 'put ''OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJc''@;'; put 'put ''dThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVc''@;'; put 'put ''dTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTll''@;'; put 'put ''YzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFc''@;'; put 'put ''dTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5''@;'; put 'put ''ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3MitnLHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlc''@;'; put 'put ''dTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTVi''@;'; put 'put ''YzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2Nc''@;'; put 'put ''dTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5''@;'; put 'put ''YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVc''@;'; put 'put ''dTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0''@;'; put 'put ''ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdc''@;'; put 'put ''dTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3''@;'; put 'put ''NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJc''@;'; put 'put ''dTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdl''@;'; put 'put ''YTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFc''@;'; put 'put ''dTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThi''@;'; put 'put ''YzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtm''@;'; put 'put ''b3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNc''@;'; put 'put ''dTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcw''@;'; put 'put ''ZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBc''@;'; put 'put ''dTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1''@;'; put 'put ''ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109''@;'; put 'put ''X1sxOTFdW2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUx''@;'; put 'put ''NzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2Zjdc''@;'; put 'put ''dTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgz''@;'; put 'put ''NTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1Mitn''@;'; put 'put ''LHlbNDkxNTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4''@;'; put 'put ''ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNc''@;'; put 'put ''dTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5''@;'; put 'put ''YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNd''@;'; put 'put ''W2ddXT00OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThk''@;'; put 'put ''NDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBc''@;'; put 'put ''dTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2''@;'; put 'put ''MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109X1sxOTRdW2ddKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3''@;'; put 'put ''OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFc''@;'; put 'put ''dTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVl''@;'; put 'put ''OTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtnLHlbNDk5MjArZ109X1sxOTVdW2ddKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYy''@;'; put 'put ''YzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdc''@;'; put 'put ''dTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4''@;'; put 'put ''YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW2ddXT01MDE3NitnLHlbNTAxNzYrZ109X1sxOTZdW2ddKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYz''@;'; put 'put ''MmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBc''@;'; put 'put ''dTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4''@;'; put 'put ''MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW2ddXT01MDQzMitnLHlbNTA0MzIrZ109X1sxOTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0''@;'; put 'put ''ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFc''@;'; put 'put ''dTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZi''@;'; put 'put ''NjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOThdW2ddXT01MDY4OCtnLHlbNTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0''@;'; put 'put ''YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdc''@;'; put 'put ''dTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZl''@;'; put 'put ''MDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxOTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTldW2ddXT01MDk0NCtnLHlbNTA5NDQrZ109X1sxOTldW2ddKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1''@;'; put 'put ''Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlc''@;'; put 'put ''dTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgz''@;'; put 'put ''MzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW2ddXT01MTIwMCtnLHlbNTEyMDArZ109X1syMDBdW2ddKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0''@;'; put 'put ''NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNc''@;'; put 'put ''dTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgy''@;'; put 'put ''MGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJc''@;'; put 'put ''dTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW2ddXT01MTQ1NitnLHlbNTE0NTYrZ109X1syMDFdW2ddKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcy''@;'; put 'put ''ZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRc''@;'; put 'put ''dThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1''@;'; put 'put ''MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZc''@;'; put 'put ''dTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIrZ109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1''@;'; put 'put ''MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZc''@;'; put 'put ''dTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZl''@;'; put 'put ''YWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFc''@;'; put 'put ''dTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThl''@;'; put 'put ''MGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRc''@;'; put 'put ''dTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1''@;'; put 'put ''YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJc''@;'; put 'put ''dTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2dd''@;'; put 'put ''KTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVl''@;'; put 'put ''ZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJc''@;'; put 'put ''dTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1''@;'; put 'put ''M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFc''@;'; put 'put ''dTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODAr''@;'; put 'put ''Z109X1syMDVdW2ddKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRc''@;'; put 'put ''dTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVk''@;'; put 'put ''ZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZc''@;'; put 'put ''dThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01Mjcz''@;'; put 'put ''NitnLHlbNTI3MzYrZ109X1syMDZdW2ddKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVc''@;'; put 'put ''dTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2''@;'; put 'put ''NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFc''@;'; put 'put ''dTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MDddW2ddXT01Mjk5MitnLHlbNTI5OTIrZ109X1syMDddW2ddKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3Zjlc''@;'; put 'put ''dTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3''@;'; put 'put ''NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRc''@;'; put 'put ''dTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMDhdW2ddXT01MzI0OCtnLHlbNTMyNDgrZ109X1syMDhdW2ddKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRc''@;'; put 'put ''dThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3''@;'; put 'put ''MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZc''@;'; put 'put ''dTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1syMDldW2ddXT01MzUwNCtnLHlbNTM1MDQrZ109X1syMDldW2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVc''@;'; put 'put ''dTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2''@;'; put 'put ''ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFc''@;'; put 'put ''dThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW2ddXT01Mzc2MCtnLHlbNTM3NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZc''@;'; put 'put ''dTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZj''@;'; put 'put ''YjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhc''@;'; put 'put ''dTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW2ddXT01NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVc''@;'; put 'put ''dTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThm''@;'; put 'put ''ZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNc''@;'; put 'put ''dTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRc''@;'; put 'put ''dTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRl''@;'; put 'put ''MDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2Rc''@;'; put 'put ''dTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJc''@;'; put 'put ''dTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2''@;'; put 'put ''N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThc''@;'; put 'put ''dTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdi''@;'; put 'put ''NTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtnLHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZc''@;'; put 'put ''dThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3''@;'; put 'put ''NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZc''@;'; put 'put ''dTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVdW2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVc''@;'; put 'put ''dTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTVi''@;'; put 'put ''NWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVc''@;'; put 'put ''dTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRm''@;'; put 'put ''NWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUyOTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZc''@;'; put 'put ''dTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUw''@;'; put 'put ''MmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThc''@;'; put 'put ''dTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTVi''@;'; put 'put ''MzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1sy''@;'; put 'put ''MThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJc''@;'; put 'put ''dTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThi''@;'; put 'put ''ZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVc''@;'; put 'put ''dThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkw''@;'; put 'put ''OWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThd''@;'; put 'put ''W2ddKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhc''@;'; put 'put ''dTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUy''@;'; put 'put ''YTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNc''@;'; put 'put ''dTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3''@;'; put 'put ''ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYw''@;'; put 'put ''NjQrZ109X1syMTldW2ddKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgy''@;'; put 'put ''OTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRc''@;'; put 'put ''dTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgz''@;'; put 'put ''MmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01''@;'; put 'put ''NjMyMCtnLHlbNTYzMjArZ109X1syMjBdW2ddKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgz''@;'; put 'put ''YThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBc''@;'; put 'put ''dTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0''@;'; put 'put ''YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syMjFdW2ddXT01NjU3NitnLHlbNTY1NzYrZ109X1syMjFdW2ddKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1''@;'; put 'put ''YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZc''@;'; put 'put ''dTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYz''@;'; put 'put ''ZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syMjJdW2ddXT01NjgzMitnLHlbNTY4MzIrZ109X1syMjJdW2ddKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUz''@;'; put 'put ''ZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRc''@;'; put 'put ''dTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0''@;'; put 'put ''ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIy''@;'; put 'put ''M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW2ddXT01NzA4OCtnLHlbNTcwODgrZ109X1syMjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1''@;'; put 'put ''OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRc''@;'; put 'put ''dTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2''@;'; put 'put ''OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVj''@;'; put 'put ''OWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2Rc''@;'; put 'put ''dTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVm''@;'; put 'put ''YmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTcz''@;'; put 'put ''NTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBc''@;'; put 'put ''dTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYw''@;'; put 'put ''MDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYw''@;'; put 'put ''YjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNc''@;'; put 'put ''dTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZj''@;'; put 'put ''ODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZk''@;'; put 'put ''NGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZc''@;'; put 'put ''dTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZl''@;'; put 'put ''YmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2Fc''@;'; put 'put ''dTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZm''@;'; put 'put ''ZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVc''@;'; put 'put ''dThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkw''@;'; put 'put ''NzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRc''@;'; put 'put ''dTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5''@;'; put 'put ''YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJc''@;'; put 'put ''dTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTVi''@;'; put 'put ''NTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZc''@;'; put 'put ''dTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdl''@;'; put 'put ''YzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJc''@;'; put 'put ''dTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1''@;'; put 'put ''N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFc''@;'; put 'put ''dTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3Io''@;'; put 'put ''X1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0''@;'; put 'put ''NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhc''@;'; put 'put ''dTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3''@;'; put 'put ''YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRc''@;'; put 'put ''dTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1sy''@;'; put 'put ''MzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5''@;'; put 'put ''MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdc''@;'; put 'put ''dTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZh''@;'; put 'put ''MjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZc''@;'; put 'put ''dThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlb''@;'; put 'put ''NTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBc''@;'; put 'put ''dTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2''@;'; put 'put ''ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZc''@;'; put 'put ''dTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2dd''@;'; put 'put ''XT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJc''@;'; put 'put ''dTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3''@;'; put 'put ''MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2Nc''@;'; put 'put ''dTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMzVdW2ddXT02MDE2MCtnLHlbNjAxNjArZ109X1syMzVdW2ddKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNc''@;'; put 'put ''dTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcx''@;'; put 'put ''NzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlc''@;'; put 'put ''dTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syMzZdW2ddXT02MDQxNitnLHlbNjA0MTYrZ109X1syMzZdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZc''@;'; put 'put ''dTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4''@;'; put 'put ''NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNc''@;'; put 'put ''dTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlbNjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhc''@;'; put 'put ''dTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0''@;'; put 'put ''OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2Jc''@;'; put 'put ''dTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2ddXT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdc''@;'; put 'put ''dTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1''@;'; put 'put ''M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1Njdc''@;'; put 'put ''dTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy''@;'; put 'put ''MzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzldW2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNc''@;'; put 'put ''dTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTll''@;'; put 'put ''NTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFc''@;'; put 'put ''dTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBdW2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNc''@;'; put 'put ''dTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4''@;'; put 'put ''YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVc''@;'; put 'put ''dTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFc''@;'; put 'put ''dTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2''@;'; put 'put ''YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVc''@;'; put 'put ''dTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3''@;'; put 'put ''YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVc''@;'; put 'put ''dTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdh''@;'; put 'put ''ZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVc''@;'; put 'put ''dTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdi''@;'; put 'put ''ZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBc''@;'; put 'put ''dTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4''@;'; put 'put ''ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThc''@;'; put 'put ''dTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThj''@;'; put 'put ''NDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtnLHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlc''@;'; put 'put ''dTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThk''@;'; put 'put ''YjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNc''@;'; put 'put ''dThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThj''@;'; put 'put ''ODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtm''@;'; put 'put ''b3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJc''@;'; put 'put ''dTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlm''@;'; put 'put ''MGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFc''@;'; put 'put ''dTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTlj''@;'; put 'put ''YmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109''@;'; put 'put ''X1syNDZdW2ddKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlh''@;'; put 'put ''YjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZc''@;'; put 'put ''dTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTll''@;'; put 'put ''ZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitn''@;'; put 'put ''LHlbNjMyMzIrZ109X1syNDddW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4''@;'; put 'put ''MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUx''@;'; put 'put ''XHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZc''@;'; put 'put ''eGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0''@;'; put 'put ''XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBc''@;'; put 'put ''dTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3''@;'; put 'put ''IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVc''@;'; put 'put ''eDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZn''@;'; put 'put ''aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4''@;'; put 'put ''YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5''@;'; put 'put ''Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4''@;'; put 'put ''YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNo''@;'; put 'put ''YXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEy''@;'; put 'put ''XHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3''@;'; put 'put ''XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEy''@;'; put 'put ''Mlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4''@;'; put 'put ''YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhj''@;'; put 'put ''ZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQo''@;'; put 'put ''ZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc''@;'; put 'put ''eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhc''@;'; put 'put ''eDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4''@;'; put 'put ''YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhk''@;'; put 'put ''Ylx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LGc9MDsyNTYh''@;'; put 'put ''PWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLHVlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKHVlLmV4cG9ydHM9WCksZnVuY3Rpb24oeSxJ''@;'; put 'put ''KXsidXNlIHN0cmljdCI7aWYodHlwZW9mIFg+InUiKXt2YXIgXz1YO3VlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij91ZS5leHBvcnRzPUkoXyk6eS5jcHRhYmxlPUkoXyl9ZWxzZSBYPUkoWCl9KHRoaXMsZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXsxMjAwOiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSxfPVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRd''@;'; put 'put ''LGc9WzkzMiw5MzYsOTQ5LDk1MF0sQj1bNjUwMDFdLHc9e30sUD17fSxGPXt9LE89e30sej1mdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShqKX0sTj1mdW5jdGlvbihqKXtyZXR1cm4gai5jaGFyQ29kZUF0KDApfSxMPXR5cGVvZiBCdWZmZXI8InUiLEs9ZnVuY3Rpb24o''@;'; put 'put ''KXt9O2lmKEwpe3ZhciBVPSFCdWZmZXIuZnJvbTtpZighVSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtVPSEwfUs9VT9mdW5jdGlvbihILGope3JldHVybiBqP25ldyBCdWZmZXIoSCxqKTpuZXcgQnVmZmVyKEgpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVy''@;'; put 'put ''LmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEgpe3JldHVybiBuZXcgQnVmZmVyKEgpfSk7dmFyIFc9MTAyNCxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSxlZT1mdW5jdGlvbihqKXt2YXIgRT1mdW5jdGlvbihqKXtmb3IodmFyIEU9QnVmZmVyLmFsbG9jVW5zYWZl''@;'; put 'put ''KDY1NTM2KSxtPTA7bTw2NTUzNjsrK20pRVttXT0wO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhqKSxhZT1BLmxlbmd0aCx0ZT0wLHNlPUFbdGVdO3RlPGFlOysrdGUpKHNlPUFbdGVdKSYmKEVbc2UuY2hhckNvZGVBdCgwKV09altzZV0pO3JldHVybiBFfSh5W2pdLmVuYyk7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKEEsYWUpe3ZhciBzZSx0ZT1BLmxlbmd0aCx3ZT0wLFVlPTAsSmU9MCxvdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgQSlmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKHRlKSx3ZT0wO3dlPHRlOysrd2Upc2Vbd2VdPUVbQS5jaGFyQ29kZUF0KHdlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZm''@;'; put 'put ''ZXIoQSkpe2ZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUoMip0ZSksVWU9MCx3ZT0wO3dlPHRlOysrd2UpKEplPUFbd2VdKTwxMjg/c2VbVWUrK109RVtKZV06SmU8MjI0PyhzZVtVZSsrXT1FWygoMzEmSmUpPDw2KSsoNjMmQVt3ZSsxXSldLCsrd2UpOkplPDI0MD8oc2VbVWUrK109RVsoKDE1''@;'; put 'put ''JkplKTw8MTIpKygoNjMmQVt3ZSsxXSk8PDYpKyg2MyZBW3dlKzJdKV0sd2UrPTIpOihvdD0oKDcmSmUpPDwxOCkrKCg2MyZBW3dlKzFdKTw8MTIpKygoNjMmQVt3ZSsyXSk8PDYpKyg2MyZBW3dlKzNdKSx3ZSs9MyxvdDw2NTUzNj9zZVtVZSsrXT1FW290XTooc2VbVWUrK109RVs1NTI5Niso''@;'; put 'put ''KG90LT02NTUzNik+PjEwJjEwMjMpXSxzZVtVZSsrXT1FWzU2MzIwKygxMDIzJm90KV0pKTtzZT1zZS5zbGljZSgwLFVlKX1lbHNlIGZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUodGUpLHdlPTA7d2U8dGU7Kyt3ZSlzZVt3ZV09RVtBW3dlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gYWUmJiJi''@;'; put 'put ''dWYiIT09YWU/ImFyciIhPT1hZT9zZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChzZSk6c2V9fSxKPWZ1bmN0aW9uKGope3ZhciBFPXlbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLGFlPSIiO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpaWYoYWU9RVtB''@;'; put 'put ''XSl7dmFyIHRlPWFlLmNoYXJDb2RlQXQoMCk7bVsyKkFdPTI1NSZ0ZSxtWzIqQSsxXT10ZT4+OH1yZXR1cm4gZnVuY3Rpb24od2Upe3ZhciBVZT13ZS5sZW5ndGgsSmU9MCxvdD0wO2lmKDIqVWU+VyYmKFc9MipVZSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSksQnVmZmVyLmlzQnVmZmVyKHdl''@;'; put 'put ''KSlmb3IoSmU9MDtKZTxVZTtKZSsrKVlbMipKZV09bVtvdD0yKndlW0plXV0sWVsyKkplKzFdPW1bb3QrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHdlKWZvcihKZT0wO0plPFVlO0plKyspb3Q9Mip3ZS5jaGFyQ29kZUF0KEplKSxZWzIqSmVdPW1bb3RdLFlbMipKZSsxXT1tW290KzFd''@;'; put 'put ''O2Vsc2UgZm9yKEplPTA7SmU8VWU7SmUrKylZWzIqSmVdPW1bb3Q9Mip3ZVtKZV1dLFlbMipKZSsxXT1tW290KzFdO3JldHVybiBZLnNsaWNlKDAsMipVZSkudG9TdHJpbmcoInVjczIiKX19LG5lPWZ1bmN0aW9uKGope2Zvcih2YXIgRT15W2pdLmVuYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgx''@;'; put 'put ''MzEwNzIpLEE9MDtBPDEzMTA3MjsrK0EpbVtBXT0wO2Zvcih2YXIgYWU9T2JqZWN0LmtleXMoRSksdGU9MCxzZT1hZVt0ZV07dGU8YWUubGVuZ3RoOysrdGUpaWYoc2U9YWVbdGVdKXt2YXIgd2U9c2UuY2hhckNvZGVBdCgwKTttWzIqd2VdPTI1NSZFW3NlXSxtWzIqd2UrMV09RVtzZV0+Pjh9''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKEplLG90KXt2YXIgeGU9SmUubGVuZ3RoLHZlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKnhlKSxYZT0wLHplPTAsRGU9MCxGZT0wLE9lPTA7aWYoInN0cmluZyI9PXR5cGVvZiBKZSl7Zm9yKFhlPUZlPTA7WGU8eGU7KytYZSl6ZT0yKkplLmNoYXJDb2RlQXQoWGUpLHZl''@;'; put 'put ''W0ZlKytdPW1bemUrMV18fG1bemVdLG1bemUrMV0+MCYmKHZlW0ZlKytdPW1bemVdKTt2ZT12ZS5zbGljZSgwLEZlKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpe2ZvcihYZT1GZT0wO1hlPHhlOysrWGUpKE9lPUplW1hlXSk8MTI4P3plPU9lOk9lPDIyND8oemU9KCgzMSZPZSk8PDYp''@;'; put 'put ''Kyg2MyZKZVtYZSsxXSksKytYZSk6T2U8MjQwPyh6ZT0oKDE1Jk9lKTw8MTIpKygoNjMmSmVbWGUrMV0pPDw2KSsoNjMmSmVbWGUrMl0pLFhlKz0yKTooemU9KCg3Jk9lKTw8MTgpKygoNjMmSmVbWGUrMV0pPDwxMikrKCg2MyZKZVtYZSsyXSk8PDYpKyg2MyZKZVtYZSszXSksWGUrPTMpLHpl''@;'; put 'put ''PDY1NTM2Pyh2ZVtGZSsrXT1tWzErKHplKj0yKV18fG1bemVdLG1bemUrMV0+MCYmKHZlW0ZlKytdPW1bemVdKSk6KHZlW0ZlKytdPW1bMSsoemU9MiooNTUyOTYrKChEZT16ZS02NTUzNik+PjEwJjEwMjMpKSldfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSksdmVbRmUrK109''@;'; put 'put ''bVsxKyh6ZT0yKig1NjMyMCsoMTAyMyZEZSkpKV18fG1bemVdLG1bemUrMV0+MCYmKHZlW0ZlKytdPW1bemVdKSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBmb3IoWGU9RmU9MDtYZTx4ZTtYZSsrKXplPTIqSmVbWGVdLmNoYXJDb2RlQXQoMCksdmVbRmUrK109bVt6ZSsxXXx8bVt6ZV0sbVt6''@;'; put 'put ''ZSsxXT4wJiYodmVbRmUrK109bVt6ZV0pO3JldHVybiBvdCYmImJ1ZiIhPT1vdD8iYXJyIiE9PW90P3ZlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHZlKTp2ZX19LGllPWZ1bmN0aW9uKGope3ZhciBhZSxFPXlbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3Miks''@;'; put 'put ''QT0wLHRlPTAsc2U9MCx3ZT0wO2Zvcih3ZT0wO3dlPDY1NTM2Oysrd2UpbVsyKndlXT0yNTUsbVsyKndlKzFdPTI1Mztmb3IoQT0wO0E8RS5sZW5ndGg7KytBKShhZT1FW0FdKSYmKHRlPWFlLmNoYXJDb2RlQXQoMCksbVtzZT0yKkFdPTI1NSZ0ZSxtW3NlKzFdPXRlPj44KTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oSmUpe3ZhciBvdD1KZS5sZW5ndGgseGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqb3QpLHZlPTAsWGU9MCx6ZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpZm9yKHZlPTA7dmU8b3Q7dmUrKykyNTU9PT1tW1hlPTIqSmVbdmVdXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZVt2ZV08''@;'; put 'put ''PDgpK0plW3ZlKzFdKSwrK3ZlKSx4ZVt6ZSsrXT1tW1hlXSx4ZVt6ZSsrXT1tW1hlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBKZSlmb3IodmU9MDt2ZTxvdDt2ZSsrKVhlPTIqSmUuY2hhckNvZGVBdCh2ZSksMjU1PT09bVtYZV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmUuY2hh''@;'; put 'put ''ckNvZGVBdCh2ZSk8PDgpK0plLmNoYXJDb2RlQXQodmUrMSkpLCsrdmUpLHhlW3plKytdPW1bWGVdLHhlW3plKytdPW1bWGUrMV07ZWxzZSBmb3IodmU9MDt2ZTxvdDt2ZSsrKTI1NT09PW1bWGU9MipKZVt2ZV1dJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplW3ZlXTw8OCkrSmVbdmUrMV0p''@;'; put 'put ''LCsrdmUpLHhlW3plKytdPW1bWGVdLHhlW3plKytdPW1bWGUrMV07cmV0dXJuIHhlLnNsaWNlKDAsemUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt3WzY1MDAxXT1mdW5jdGlvbiBIKGope2lmKCJzdHJpbmciPT10eXBlb2YgailyZXR1cm4gSChqLnNwbGl0KCIiKS5tYXAoTikpO3ZhciBFPWoubGVu''@;'; put 'put ''Z3RoLG09MCxBPTA7NCpFPlcmJihXPTQqRSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSk7dmFyIGFlPTA7RT49MyYmMjM5PT1qWzBdJiYxODc9PWpbMV0mJjE5MT09alsyXSYmKGFlPTMpO2Zvcih2YXIgdGU9MSxzZT0wLHdlPTA7YWU8RTthZSs9dGUpdGU9MSwod2U9althZV0pPDEyOD9tPXdl''@;'; put 'put ''OndlPDIyND8obT02NCooMzEmd2UpKyg2MyZqW2FlKzFdKSx0ZT0yKTp3ZTwyNDA/KG09KCgxNSZ3ZSk8PDEyKSs2NCooNjMmalthZSsxXSkrKDYzJmpbYWUrMl0pLHRlPTMpOihtPTI2MjE0NCooNyZ3ZSkrKCg2MyZqW2FlKzFdKTw8MTIpKzY0Kig2MyZqW2FlKzJdKSsoNjMmalthZSszXSks''@;'; put 'put ''dGU9NCksbTw2NTUzNj8oWVtzZSsrXT0yNTUmbSxZW3NlKytdPW0+PjgpOihBPTU1Mjk2KygobS09NjU1MzYpPj4xMCYxMDIzKSxtPTU2MzIwKygxMDIzJm0pLFlbc2UrK109MjU1JkEsWVtzZSsrXT1BPj4+OCxZW3NlKytdPTI1NSZtLFlbc2UrK109bT4+PjgmMjU1KTtyZXR1cm4gWS5zbGlj''@;'; put 'put ''ZSgwLHNlKS50b1N0cmluZygidWNzMiIpfSxQWzY1MDAxXT1mdW5jdGlvbihqLEUpe2lmKEwmJkJ1ZmZlci5pc0J1ZmZlcihqKSlyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9qLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGopOmo7dmFyIG09ai5sZW5ndGgsQT0wLGFl''@;'; put 'put ''PTAsdGU9MCxzZT0ic3RyaW5nIj09dHlwZW9mIGo7NCptPlcmJihXPTQqbSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSk7Zm9yKHZhciB3ZT0wO3dlPG07Kyt3ZSkoQT1zZT9qLmNoYXJDb2RlQXQod2UpOmpbd2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/WVt0ZSsrXT1BOkE8PTIwNDc/KFlbdGUr''@;'; put 'put ''K109MTkyKyhBPj42KSxZW3RlKytdPTEyOCsoNjMmQSkpOkE+PTU1Mjk2JiZBPD01NzM0Mz8oQS09NTUyOTYsKyt3ZSxhZT0oc2U/ai5jaGFyQ29kZUF0KHdlKTpqW3dlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQTw8MTApLFlbdGUrK109MjQwKyhhZT4+PjE4JjcpLFlbdGUrK109MTQ0Kyhh''@;'; put 'put ''ZT4+PjEyJjYzKSxZW3RlKytdPTEyOCsoYWU+Pj42JjYzKSxZW3RlKytdPTEyOCsoNjMmYWUpKTooWVt0ZSsrXT0yMjQrKEE+PjEyKSxZW3RlKytdPTEyOCsoQT4+NiY2MyksWVt0ZSsrXT0xMjgrKDYzJkEpKTtyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9ZLnNsaWNlKDAsdGUpLnRv''@;'; put 'put ''U3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFksMCx0ZSk6WS5zbGljZSgwLHRlKX19dmFyIGxlPWZ1bmN0aW9uKCl7aWYoTCl7aWYoRltfWzBdXSlyZXR1cm47dmFyIGo9MCxFPTA7Zm9yKGo9MDtqPF8ubGVuZ3RoOysrail5W0U9X1tqXV0mJihGW0VdPUooRSksT1tFXT1lZShFKSk7''@;'; put 'put ''Zm9yKGo9MDtqPGcubGVuZ3RoOysrail5W0U9Z1tqXV0mJihGW0VdPWllKEUpLE9bRV09bmUoRSkpO2ZvcihqPTA7ajxCLmxlbmd0aDsrK2opd1tFPUJbal1dJiYoRltFXT13W0VdKSxQW0VdJiYoT1tFXT1QW0VdKX19LG1lPWZ1bmN0aW9uKEgsail7cmV0dXJuIiJ9LF9lPWZ1bmN0aW9uKGop''@;'; put 'put ''e2RlbGV0ZSBGW2pdLGRlbGV0ZSBPW2pdfSxTZT17ZW5jYWNoZTpsZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoTCl7aWYoIUZbX1swXV0pcmV0dXJuO18uZm9yRWFjaChfZSksZy5mb3JFYWNoKF9lKSxCLmZvckVhY2goX2UpfXA9bWUsYj0wfSxzYmNzOl8sZGJjczpnfTtsZSgpO3ZhciBqZT0i''@;'; put 'put ''QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscD1tZSxiPTA7cmV0dXJuIHkudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBIKGosRSl7dmFyIG07aWYobT1GW2pdKXJldHVybiBtKEUpO2lmKCJzdHJpbmciPT10eXBlb2YgRSly''@;'; put 'put ''ZXR1cm4gSChqLEUuc3BsaXQoIiIpLm1hcChOKSk7dmFyIHZlLEE9RS5sZW5ndGgsYWU9bmV3IEFycmF5KEEpLHRlPSIiLHNlPTAsd2U9MCxVZT0xLEplPTAsb3Q9MCx4ZT15W2pdLFhlPSIiO2lmKHhlJiYodmU9eGUuZGVjKSlmb3Iod2U9MDt3ZTxBO3dlKz1VZSl7aWYoVWU9MiwodGU9dmVb''@;'; put 'put ''KEVbd2VdPDw4KStFW3dlKzFdXSl8fChVZT0xLHRlPXZlW0Vbd2VdXSksIXRlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrRVt3ZV0rIiAiK0Vbd2UrVWUtMV0rIiAiK3dlKyIgIitVZSsiICIrdmVbRVt3ZV1dKTthZVtKZSsrXT10ZX1lbHNle2lmKCEoWGU9SVtqXSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIraik7c3dpdGNoKFhlKXtjYXNlInV0ZjgiOmZvcihBPj0zJiYyMzk9PUVbMF0mJjE4Nz09RVsxXSYmMTkxPT1FWzJdJiYod2U9Myk7d2U8QTt3ZSs9VWUpVWU9MSxFW3dlXTwxMjg/c2U9RVt3ZV06RVt3ZV08MjI0PyhzZT02NCoo''@;'; put 'put ''MzEmRVt3ZV0pKyg2MyZFW3dlKzFdKSxVZT0yKTpFW3dlXTwyNDA/KHNlPSgoMTUmRVt3ZV0pPDwxMikrNjQqKDYzJkVbd2UrMV0pKyg2MyZFW3dlKzJdKSxVZT0zKTooc2U9MjYyMTQ0Kig3JkVbd2VdKSsoKDYzJkVbd2UrMV0pPDwxMikrNjQqKDYzJkVbd2UrMl0pKyg2MyZFW3dlKzNdKSxV''@;'; put 'put ''ZT00KSxzZTw2NTUzNnx8KG90PTU1Mjk2Kygoc2UtPTY1NTM2KT4+MTAmMTAyMyksc2U9NTYzMjArKDEwMjMmc2UpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUob3QpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlImFzY2lpIjppZihMJiZCdWZmZXIu''@;'; put 'put ''aXNCdWZmZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoWGUpO2Zvcih3ZT0wO3dlPEE7d2UrKylhZVt3ZV09U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlXSk7SmU9QTticmVhaztjYXNlInV0ZjE2bGUiOmlmKEE+PTImJjI1NT09RVswXSYmMjU0PT1FWzFdJiYod2U9MiksTCYmQnVmZmVyLmlzQnVm''@;'; put 'put ''ZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKFhlKTtmb3IoVWU9Mjt3ZSsxPEE7d2UrPVVlKWFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKEVbd2UrMV08PDgpK0Vbd2VdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihBPj0yJiYyNTQ9PUVbMF0mJjI1NT09RVsxXSYmKHdlPTIpLFVlPTI7''@;'; put 'put ''d2UrMTxBO3dlKz1VZSlhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW3dlXTw8OCkrRVt3ZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoQT49NCYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJjA9PT1FWzJdJiYwPT09RVszXSYmKHdlPTQpLFVlPTQ7d2U8QTt3ZSs9VWUpKHNlPShF''@;'; put 'put ''W3dlKzNdPDwyNCkrKEVbd2UrMl08PDE2KSsoRVt3ZSsxXTw8OCkrRVt3ZV0pPjY1NTM1PyhzZS09NjU1MzYsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisoc2U+PjEwJjEwMjMpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnNlKSkpOmFlW0pl''@;'; put 'put ''KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKEE+PTQmJjI1NT09RVszXSYmMjU0PT1FWzJdJiYwPT09RVsxXSYmMD09PUVbMF0mJih3ZT00KSxVZT00O3dlPEE7d2UrPVVlKShzZT0oRVt3ZV08PDI0KSsoRVt3ZSsxXTw8MTYpKyhFW3dlKzJdPDw4''@;'; put 'put ''KStFW3dlKzNdKT42NTUzNT8oc2UtPTY1NTM2LGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTphZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztj''@;'; put 'put ''YXNlInV0ZjciOmZvcihBPj00JiY0Mz09RVswXSYmNDc9PUVbMV0mJjExOD09RVsyXSYmKEE+PTUmJjU2PT1FWzNdJiY0NT09RVs0XT93ZT01Oig1Nj09RVszXXx8NTc9PUVbM118fDQzPT1FWzNdfHw0Nz09RVszXSkmJih3ZT00KSk7d2U8QTt3ZSs9VWUpaWYoNDM9PT1FW3dlXSlpZihVZT0x''@;'; put 'put ''LDQ1IT09RVt3ZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrVWVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspVWUrKzt2YXIgemU9MDs0NT09PUVbd2UrVWVdJiYoKytVZSx6ZT0xKTtmb3IodmFyIERlPVtdLEZlPSIiLGtlPTAsQWU9MCxfdD0wLG50PTAsUWU9MTtRZTxV''@;'; put 'put ''ZS16ZSYmKGtlPWplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSksQWU9amUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSxEZS5wdXNoKGtlPDwyfEFlPj40KSwtMSE9PShfdD1qZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3''@;'; put 'put ''ZStRZSsrXSkpKSYmKERlLnB1c2goKDE1JkFlKTw8NHxfdD4+MiksLTEhPT0obnQ9amUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSkpKTspbnQ8NjQmJkRlLnB1c2goKDMmX3QpPDw2fG50KTtmb3IoRmU9SCgxMjAxLERlKSxRZT0wO1FlPEZlLmxlbmd0aDsrK1Fl''@;'; put 'put ''KWFlW0plKytdPUZlLmNoYXJBdChRZSl9ZWxzZSBVZT0yLGFlW0plKytdPSIrIjtlbHNlIFVlPTEsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK2orIiAiK0lbal0pfX1yZXR1cm4g''@;'; put 'put ''YWUuc2xpY2UoMCxKZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBIKGosRSxtKXtpZihqPT09YiYmcClyZXR1cm4gcChFLG0pO2lmKE9bal0pcmV0dXJuKHA9T1tiPWpdKShFLG0pO0wmJkJ1ZmZlci5pc0J1ZmZlcihFKSYmKEU9RS50b1N0cmluZygidXRmOCIpKTt2YXIgb3QsQT1FLmxl''@;'; put 'put ''bmd0aCxhZT1MP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KkEpOltdLHRlPTAsc2U9MCx3ZT0wLFVlPTAsSmU9eVtqXSx4ZT0iIix2ZT0ic3RyaW5nIj09dHlwZW9mIEU7aWYoSmUmJihvdD1KZS5lbmMpKWZvcihzZT0wO3NlPEE7KytzZSwrK3dlKSh0ZT1vdFt2ZT9FLmNoYXJBdChzZSk6RVtzZV1d''@;'; put 'put ''KT4yNTU/KGFlW3dlXT10ZT4+OCxhZVsrK3dlXT0yNTUmdGUpOmFlW3dlXT0yNTUmdGU7ZWxzZXtpZighKHhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaCh4ZSl7Y2FzZSJ1dGY4IjppZihMJiZ2ZSl7d2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDti''@;'; put 'put ''cmVha31mb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3P2FlW3dlXT10ZTp0ZTw9MjA0Nz8oYWVbd2VdPTE5MisodGU+PjYpLGFlWysrd2VdPTEyOCsoNjMmdGUpKTp0ZT49NTUyOTYmJnRlPD01NzM0Mz8odGUt''@;'; put 'put ''PTU1Mjk2LFVlPSh2ZT9FLmNoYXJDb2RlQXQoKytzZSk6RVsrK3NlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsodGU8PDEwKSxhZVt3ZV09MjQwKyhVZT4+PjE4JjcpLGFlWysrd2VdPTE0NCsoVWU+Pj4xMiY2MyksYWVbKyt3ZV09MTI4KyhVZT4+PjYmNjMpLGFlWysrd2VdPTEyOCsoNjMmVWUp''@;'; put 'put ''KTooYWVbd2VdPTIyNCsodGU+PjEyKSxhZVsrK3dlXT0xMjgrKHRlPj42JjYzKSxhZVsrK3dlXT0xMjgrKDYzJnRlKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTCYmInN0cmluZyI9PXR5cGVvZiBFKXt3ZT0oYWU9SyhFLHhlKSkubGVuZ3RoO2JyZWFrfWZvcihzZT0wO3NlPEE7KytzZSwrK3dl''@;'; put 'put ''KXtpZighKCh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrdGUpO2FlW3dlXT10ZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKEwmJiJzdHJpbmciPT10eXBlb2YgRSl7d2U9KGFlPUsoRSx4ZSkpLmxl''@;'; put 'put ''bmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UpdGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLGFlW3dlKytdPTI1NSZ0ZSxhZVt3ZSsrXT10ZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihzZT0wO3NlPEE7KytzZSl0ZT12ZT9FLmNoYXJDb2RlQXQoc2Up''@;'; put 'put ''OkVbc2VdLmNoYXJDb2RlQXQoMCksYWVbd2UrK109dGU+PjgsYWVbd2UrK109MjU1JnRlO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHNlPTA7c2U8QTsrK3NlKSh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdGU8PTU3MzQzJiYodGU9NjU1MzYr''@;'; put 'put ''KHRlLTU1Mjk2PDwxMCkrKEVbKytzZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLGFlW3dlKytdPTI1NSZ0ZSxhZVt3ZSsrXT0yNTUmKHRlPj49OCksYWVbd2UrK109MjU1Jih0ZT4+PTgpLGFlW3dlKytdPTI1NSYodGU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihzZT0wO3NlPEE7Kytz''@;'; put 'put ''ZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnRlPD01NzM0MyYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVt3ZSszXT0yNTUmdGUsYWVbd2UrMl09MjU1Jih0ZT4+PTgpLGFlW3dl''@;'; put 'put ''KzFdPTI1NSYodGU+Pj04KSxhZVt3ZV09MjU1Jih0ZT4+PTgpLHdlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHNlPTA7c2U8QTtzZSsrKXt2YXIgWGU9dmU/RS5jaGFyQXQoc2UpOkVbc2VdLmNoYXJBdCgwKTtpZigiKyIhPT1YZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNk''@;'; put 'put ''ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoWGUpPi0xKWFlW3dlKytdPVhlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgemU9SCgxMjAxLFhlKTthZVt3ZSsrXT00MyxhZVt3ZSsrXT1qZS5jaGFyQ29kZUF0KHplWzBdPj4yKSxhZVt3ZSsrXT1qZS5j''@;'; put 'put ''aGFyQ29kZUF0KCgoMyZ6ZVswXSk8PDQpKygoemVbMV18fDApPj40KSksYWVbd2UrK109amUuY2hhckNvZGVBdCgoKDE1JnplWzFdKTw8MikrKCh6ZVsyXXx8MCk+PjYpKSxhZVt3ZSsrXT00NX1lbHNlIGFlW3dlKytdPTQzLGFlW3dlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIGFlPWFlLnNsaWNlKDAsd2UpLEw/bSYmImJ1ZiIhPT1tPyJhcnIiIT09bT9hZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChhZSk6YWU6InN0ciI9PW0/YWUubWFwKHopLmpvaW4oIiIpOmFlfSxo''@;'; put 'put ''YXNjcDpmdW5jdGlvbihqKXtyZXR1cm4hKCF5W2pdJiYhSVtqXSl9LG1hZ2ljOkksY2FjaGU6U2V9LHl9KX0sMzE3OToodWUsWCk9Pnt2YXIgeSxJLF87IWZ1bmN0aW9uKGcpe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1Iil1ZS5leHBvcnRzPWcoKTtlbHNlIGlmKHR5cGVvZiBE''@;'; put 'put ''T19OT1RfRVhQT1JUX0pTWklQPiJ1IilKU1ppcFN5bmM9ZygpLEk9W10sdm9pZCAwIT09KF89ImZ1bmN0aW9uIj09dHlwZW9mKHk9Zyk/eS5hcHBseShYLEkpOnkpJiYodWUuZXhwb3J0cz1fKTtlbHNle3ZhciBCO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9CPWdsb2JhbFRoaXM6dHlwZW9mIHdp''@;'; put 'put ''bmRvdzwidSI/Qj13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Qj1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9CPSQuZ2xvYmFsOnR5cGVvZiBzZWxmPCJ1IiYmKEI9c2VsZiksQi5KU1ppcFN5bmM9ZygpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gUChGLE8seil7ZnVuY3Rp''@;'; put 'put ''b24gTihVLFcpe2lmKCFPW1VdKXtpZighRltVXSl7aWYoTClyZXR1cm4gTChVLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitVKyInIil9dmFyIHE9T1tVXT17ZXhwb3J0czp7fX07RltVXVswXS5jYWxsKHEuZXhwb3J0cyxmdW5jdGlvbihlZSl7cmV0dXJuIE4o''@;'; put 'put ''RltVXVsxXVtlZV18fGVlKX0scSxxLmV4cG9ydHMsUCxGLE8seil9cmV0dXJuIE9bVV0uZXhwb3J0c31mb3IodmFyIEw9dm9pZCAwLEs9MDtLPHoubGVuZ3RoO0srKylOKHpbS10pO3JldHVybiBOfSh7MTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej0iQUJDREVGR0hJSktM''@;'; put 'put ''TU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO08uZW5jb2RlPWZ1bmN0aW9uKE4sTCl7Zm9yKHZhciBVLFcsWSxxLGVlLEosbmUsSz0iIixpZT0wO2llPE4ubGVuZ3RoOylxPShVPU4uY2hhckNvZGVBdChpZSsrKSk+PjIsZWU9KDMmVSk8PDR8''@;'; put 'put ''KFc9Ti5jaGFyQ29kZUF0KGllKyspKT4+NCxKPSgxNSZXKTw8MnwoWT1OLmNoYXJDb2RlQXQoaWUrKykpPj42LG5lPTYzJlksaXNOYU4oVyk/Sj1uZT02NDppc05hTihZKSYmKG5lPTY0KSxLPUsrei5jaGFyQXQocSkrei5jaGFyQXQoZWUpK3ouY2hhckF0KEopK3ouY2hhckF0KG5lKTtyZXR1''@;'; put 'put ''cm4gS30sTy5kZWNvZGU9ZnVuY3Rpb24oTixMKXt2YXIgVyxZLHEsZWUsSixuZSxLPSIiLGllPTA7Zm9yKE49Ti5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7aWU8Ti5sZW5ndGg7KXE9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSxXPSgxNSYoZWU9ei5pbmRleE9mKE4uY2hh''@;'; put 'put ''ckF0KGllKyspKSkpPDw0fChKPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpPj4yLFk9KDMmSik8PDZ8KG5lPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpLEsrPVN0cmluZy5mcm9tQ2hhckNvZGUocTw8MnxlZT4+NCksNjQhPUomJihLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpKSw2NCE9''@;'; put 'put ''bmUmJihLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkpKTtyZXR1cm4gS319LHt9XSwyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooKXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Np''@;'; put 'put ''b25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9ei5wcm90b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LEYuZXhwb3J0cz16fSx7fV0sMzpbZnVuY3Rpb24o''@;'; put 'put ''UCxGLE8peyJ1c2Ugc3RyaWN0IjtPLlNUT1JFPXttYWdpYzoiXDBcMCIsY29tcHJlc3M6ZnVuY3Rpb24oeil7cmV0dXJuIHp9LHVuY29tcHJlc3M6ZnVuY3Rpb24oeil7cmV0dXJuIHp9LGNvbXByZXNzSW5wdXRUeXBlOm51bGwsdW5jb21wcmVzc0lucHV0VHlwZTpudWxsfSxPLkRFRkxBVEU9''@;'; put 'put ''UCgiLi9mbGF0ZSIpfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPVswLDE5OTY5NTk4OTQsMzk5MzkxOTc4OCwyNTY3NTI0Nzk0LDEyNDYzNDEzNywxODg2MDU3NjE1LDM5MTU2MjE2ODUsMjY1NzM5MjAzNSwyNDky''@;'; put 'put ''NjgyNzQsMjA0NDUwODMyNCwzNzcyMTE1MjMwLDI1NDcxNzc4NjQsMTYyOTQxOTk1LDIxMjU1NjEwMjEsMzg4NzYwNzA0NywyNDI4NDQ0MDQ5LDQ5ODUzNjU0OCwxNzg5OTI3NjY2LDQwODkwMTY2NDgsMjIyNzA2MTIxNCw0NTA1NDg4NjEsMTg0MzI1ODYwMyw0MTA3NTgwNzUzLDIyMTE2Nzc2''@;'; put 'put ''MzksMzI1ODgzOTkwLDE2ODQ3NzcxNTIsNDI1MTEyMjA0MiwyMzIxOTI2NjM2LDMzNTYzMzQ4NywxNjYxMzY1NDY1LDQxOTUzMDI3NTUsMjM2NjExNTMxNyw5OTcwNzMwOTYsMTI4MTk1Mzg4NiwzNTc5ODU1MzMyLDI3MjQ2ODgyNDIsMTAwNjg4ODE0NSwxMjU4NjA3Njg3LDM1MjQxMDE2Mjks''@;'; put 'put ''Mjc2ODk0MjQ0Myw5MDEwOTc3MjIsMTExOTAwMDY4NCwzNjg2NTE3MjA2LDI4OTgwNjU3MjgsODUzMDQ0NDUxLDExNzIyNjYxMDEsMzcwNTAxNTc1OSwyODgyNjE2NjY1LDY1MTc2Nzk4MCwxMzczNTAzNTQ2LDMzNjk1NTQzMDQsMzIxODEwNDU5OCw1NjU1MDcyNTMsMTQ1NDYyMTczMSwzNDg1''@;'; put 'put ''MTExNzA1LDMwOTk0MzYzMDMsNjcxMjY2OTc0LDE1OTQxOTgwMjQsMzMyMjczMDkzMCwyOTcwMzQ3ODEyLDc5NTgzNTUyNywxNDgzMjMwMjI1LDMyNDQzNjcyNzUsMzA2MDE0OTU2NSwxOTk0MTQ2MTkyLDMxMTU4NTM0LDI1NjM5MDc3NzIsNDAyMzcxNzkzMCwxOTA3NDU5NDY1LDExMjYzNzIx''@;'; put 'put ''NSwyNjgwMTUzMjUzLDM5MDQ0MjcwNTksMjAxMzc3NjI5MCwyNTE3MjIwMzYsMjUxNzIxNTM3NCwzNzc1ODMwMDQwLDIxMzc2NTY3NjMsMTQxMzc2ODEzLDI0MzkyNzc3MTksMzg2NTI3MTI5NywxODAyMTk1NDQ0LDQ3Njg2NDg2NiwyMjM4MDAxMzY4LDQwNjY1MDg4NzgsMTgxMjM3MDkyNSw0''@;'; put 'put ''NTMwOTI3MzEsMjE4MTYyNTAyNSw0MTExNDUxMjIzLDE3MDYwODg5MDIsMzE0MDQyNzA0LDIzNDQ1MzIyMDIsNDI0MDAxNzUzMiwxNjU4NjU4MjcxLDM2NjYxOTk3NywyMzYyNjcwMzIzLDQyMjQ5OTQ0MDUsMTMwMzUzNTk2MCw5ODQ5NjE0ODYsMjc0NzAwNzA5MiwzNTY5MDM3NTM4LDEyNTYx''@;'; put 'put ''NzA4MTcsMTAzNzYwNDMxMSwyNzY1MjEwNzMzLDM1NTQwNzk5OTUsMTEzMTAxNDUwNiw4Nzk2Nzk5OTYsMjkwOTI0MzQ2MiwzNjYzNzcxODU2LDExNDExMjQ0NjcsODU1ODQyMjc3LDI4NTI4MDE2MzEsMzcwODY0ODY0OSwxMzQyNTMzOTQ4LDY1NDQ1OTMwNiwzMTg4Mzk2MDQ4LDMzNzMwMTUx''@;'; put 'put ''NzQsMTQ2NjQ3OTkwOSw1NDQxNzk2MzUsMzExMDUyMzkxMywzNDYyNTIyMDE1LDE1OTE2NzEwNTQsNzAyMTM4Nzc2LDI5NjY0NjA0NTAsMzM1Mjc5OTQxMiwxNTA0OTE4ODA3LDc4MzU1MTg3MywzMDgyNjQwNDQzLDMyMzM0NDI5ODksMzk4ODI5MjM4NCwyNTk2MjU0NjQ2LDYyMzE3MDY4LDE5''@;'; put 'put ''NTc4MTA4NDIsMzkzOTg0NTk0NSwyNjQ3ODE2MTExLDgxNDcwOTk3LDE5NDM4MDM1MjMsMzgxNDkxODkzMCwyNDg5NTk2ODA0LDIyNTI3NDQzMCwyMDUzNzkwMzc2LDM4MjYxNzU3NTUsMjQ2NjkwNjAxMywxNjc4MTY3NDMsMjA5NzY1MTM3Nyw0MDI3NTUyNTgwLDIyNjU0OTAzODYsNTAzNDQ0''@;'; put 'put ''MDcyLDE3NjIwNTA4MTQsNDE1MDQxNzI0NSwyMTU0MTI5MzU1LDQyNjUyMjIyNSwxODUyNTA3ODc5LDQyNzUzMTM1MjYsMjMxMjMxNzkyMCwyODI3NTM2MjYsMTc0MjU1NTg1Miw0MTg5NzA4MTQzLDIzOTQ4Nzc5NDUsMzk3OTE3NzYzLDE2MjIxODM2MzcsMzYwNDM5MDg4OCwyNzE0ODY2NTU4''@;'; put 'put ''LDk1MzcyOTczMiwxMzQwMDc2NjI2LDM1MTg3MTk5ODUsMjc5NzM2MDk5OSwxMDY4ODI4MzgxLDEyMTk2Mzg4NTksMzYyNDc0MTg1MCwyOTM2Njc1MTQ4LDkwNjE4NTQ2MiwxMDkwODEyNTEyLDM3NDc2NzIwMDMsMjgyNTM3OTY2OSw4MjkzMjkxMzUsMTE4MTMzNTE2MSwzNDEyMTc3ODA0LDMx''@;'; put 'put ''NjA4MzQ4NDIsNjI4MDg1NDA4LDEzODI2MDUzNjYsMzQyMzM2OTEwOSwzMTM4MDc4NDY3LDU3MDU2MjIzMywxNDI2NDAwODE1LDMzMTczMTY1NDIsMjk5ODczMzYwOCw3MzMyMzk5NTQsMTU1NTI2MTk1NiwzMjY4OTM1NTkxLDMwNTAzNjA2MjUsNzUyNDU5NDAzLDE1NDEzMjAyMjEsMjYwNzA3''@;'; put 'put ''MTkyMCwzOTY1OTczMDMwLDE5Njk5MjI5NzIsNDA3MzU0OTgsMjYxNzgzNzIyNSwzOTQzNTc3MTUxLDE5MTMwODc4NzcsODM5MDgzNzEsMjUxMjM0MTYzNCwzODAzNzQwNjkyLDIwNzUyMDg2MjIsMjEzMjYxMTEyLDI0NjMyNzI2MDMsMzg1NTk5MDI4NSwyMDk0ODU0MDcxLDE5ODk1ODg4MSwy''@;'; put 'put ''MjYyMDI5MDEyLDQwNTcyNjA2MTAsMTc1OTM1OTk5Miw1MzQ0MTQxOTAsMjE3NjcxODU0MSw0MTM5MzI5MTE1LDE4NzM4MzYwMDEsNDE0NjY0NTY3LDIyODIyNDg5MzQsNDI3OTIwMDM2OCwxNzExNjg0NTU0LDI4NTI4MTExNiwyNDA1ODAxNzI3LDQxNjcyMTY3NDUsMTYzNDQ2Nzc5NSwzNzYy''@;'; put 'put ''Mjk3MDEsMjY4NTA2Nzg5NiwzNjA4MDA3NDA2LDEzMDg5MTg2MTIsOTU2NTQzOTM4LDI4MDg1NTUxMDUsMzQ5NTk1ODI2MywxMjMxNjM2MzAxLDEwNDc0MjcwMzUsMjkzMjk1OTgxOCwzNjU0NzAzODM2LDEwODgzNTkyNzAsOTM2OTE4ZTMsMjg0NzcxNDg5OSwzNzM2ODM3ODI5LDEyMDI5MDA4''@;'; put 'put ''NjMsODE3MjMzODk3LDMxODMzNDIxMDgsMzQwMTIzNzEzMCwxNDA0Mjc3NTUyLDYxNTgxODE1MCwzMTM0MjA3NDkzLDM0NTM0MjEyMDMsMTQyMzg1NzQ0OSw2MDE0NTA0MzEsMzAwOTgzNzYxNCwzMjk0NzEwNDU2LDE1NjcxMDM3NDYsNzExOTI4NzI0LDMwMjA2Njg0NzEsMzI3MjM4MDA2NSwx''@;'; put 'put ''NTEwMzM0MjM1LDc1NTE2NzExN107Ri5leHBvcnRzPWZ1bmN0aW9uKEssVSl7aWYodHlwZW9mIEs+InUifHwhSy5sZW5ndGgpcmV0dXJuIDA7dmFyIFc9InN0cmluZyIhPT16LmdldFR5cGVPZihLKTt0eXBlb2YgVT4idSImJihVPTApO3ZhciBlZT0wO1U9flU7Zm9yKHZhciBKPTAsbmU9Sy5s''@;'; put 'put ''ZW5ndGg7SjxuZTtKKyspZWU9Vz9LW0pdOksuY2hhckNvZGVBdChKKSxVPVU+Pj44Xk5bMjU1JihVXmVlKV07cmV0dXJuflV9fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIik7ZnVuY3Rpb24gTihMKXt0aGlzLmRhdGE9''@;'; put 'put ''bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1OLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrTCl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oTCl7aWYodGhpcy5sZW5ndGg8THx8TDwwKXRocm93IG5ldyBFcnJvcigiRW5k''@;'; put 'put ''IG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2VkIGluZGV4ID0gIitMKyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KEwpLHRoaXMuaW5kZXg9TH0sc2tpcDpmdW5jdGlvbihMKXt0aGlz''@;'; put 'put ''LnNldEluZGV4KHRoaXMuaW5kZXgrTCl9LGJ5dGVBdDpmdW5jdGlvbihMKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oTCl7dmFyIFUsSz0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KEwpLFU9dGhpcy5pbmRleCtMLTE7VT49dGhpcy5pbmRleDtVLS0pSz0oSzw8OCkrdGhpcy5ieXRlQXQoVSk7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5kZXgrPUwsS30scmVhZFN0cmluZzpmdW5jdGlvbihMKXtyZXR1cm4gei50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKEwpKX0scmVhZERhdGE6ZnVuY3Rpb24oTCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihMKXt9LHJlYWREYXRlOmZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIEw9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgxOTgwKyhMPj4yNSYxMjcpLChMPj4yMSYxNSktMSxMPj4xNiYzMSxMPj4xMSYzMSxMPj41JjYzLCgzMSZMKTw8MSl9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0''@;'; put 'put ''cmljdCI7Ty5iYXNlNjQ9ITEsTy5iaW5hcnk9ITEsTy5kaXI9ITEsTy5jcmVhdGVGb2xkZXJzPSExLE8uZGF0ZT1udWxsLE8uY29tcHJlc3Npb249bnVsbCxPLmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpO08uc3Ry''@;'; put 'put ''aW5nMmJpbmFyeT1mdW5jdGlvbihOKXtyZXR1cm4gei5zdHJpbmcyYmluYXJ5KE4pfSxPLnN0cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixOKX0sTy51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihOKXtyZXR1cm4gei50cmFu''@;'; put 'put ''c2Zvcm1Ubygic3RyaW5nIixOKX0sTy5zdHJpbmcyQmxvYj1mdW5jdGlvbihOKXt2YXIgTD16LnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsTik7cmV0dXJuIHouYXJyYXlCdWZmZXIyQmxvYihMKX0sTy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKE4pe3JldHVybiB6LmFycmF5QnVmZmVy''@;'; put 'put ''MkJsb2IoTil9LE8udHJhbnNmb3JtVG89ZnVuY3Rpb24oTixMKXtyZXR1cm4gei50cmFuc2Zvcm1UbyhOLEwpfSxPLmdldFR5cGVPZj1mdW5jdGlvbihOKXtyZXR1cm4gei5nZXRUeXBlT2YoTil9LE8uY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKE4pe3JldHVybiB6LmNoZWNrU3VwcG9ydChOKX0s''@;'; put 'put ''Ty5NQVhfVkFMVUVfMTZCSVRTPXouTUFYX1ZBTFVFXzE2QklUUyxPLk1BWF9WQUxVRV8zMkJJVFM9ei5NQVhfVkFMVUVfMzJCSVRTLE8ucHJldHR5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnByZXR0eShOKX0sTy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oTil7cmV0dXJuIHouZmluZENvbXBy''@;'; put 'put ''ZXNzaW9uKE4pfSxPLmlzUmVnRXhwPWZ1bmN0aW9uKE4pe3JldHVybiB6LmlzUmVnRXhwKE4pfX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2Yg''@;'; put 'put ''VWludDMyQXJyYXk8InUiLE49UCgicGFrbyIpO08udW5jb21wcmVzc0lucHV0VHlwZT16PyJ1aW50OGFycmF5IjoiYXJyYXkiLE8uY29tcHJlc3NJbnB1dFR5cGU9ej8idWludDhhcnJheSI6ImFycmF5IixPLm1hZ2ljPSJcYlwwIixPLmNvbXByZXNzPWZ1bmN0aW9uKEwpe3JldHVybiBOLmRl''@;'; put 'put ''ZmxhdGVSYXcoTCl9LE8udW5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1cm4gTi5pbmZsYXRlUmF3KEwpfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vYmFzZTY0Iik7ZnVuY3Rpb24gTihMLEspe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4p''@;'; put 'put ''KXJldHVybiBuZXcgTihMLEspO3RoaXMuZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLEwmJnRoaXMubG9hZChMLEspLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgVT1uZXcgTjtmb3IodmFyIFcgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tXXSYmKFVb''@;'; put 'put ''V109dGhpc1tXXSk7cmV0dXJuIFV9fShOLnByb3RvdHlwZT1QKCIuL29iamVjdCIpKS5sb2FkPVAoIi4vbG9hZCIpLE4uc3VwcG9ydD1QKCIuL3N1cHBvcnQiKSxOLmRlZmF1bHRzPVAoIi4vZGVmYXVsdHMiKSxOLnV0aWxzPVAoIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksTi5iYXNlNjQ9''@;'; put 'put ''e2VuY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gei5lbmNvZGUoTCl9LGRlY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gei5kZWNvZGUoTCl9fSxOLmNvbXByZXNzaW9ucz1QKCIuL2NvbXByZXNzaW9ucyIpLEYuZXhwb3J0cz1OfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9k''@;'; put 'put ''ZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vYmFzZTY0IiksTj1QKCIuL3ppcEVudHJpZXMiKTtGLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oTCxLKXt2YXIgVSxXLFkscTtmb3IoKEs9S3x8e30pLmJhc2U2NCYmKEw9ei5kZWNvZGUoTCkpLFU9KFc9bmV3IE4oTCxLKSkuZmlsZXMsWT0wO1k8VS5sZW5ndGg7WSsrKXRoaXMuZmlsZSgocT1VW1ldKS5maWxlTmFtZSxxLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGlt''@;'; put 'put ''aXplZEJpbmFyeVN0cmluZzohMCxkYXRlOnEuZGF0ZSxkaXI6cS5kaXIsY29tbWVudDpxLmZpbGVDb21tZW50Lmxlbmd0aD9xLmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpLLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gVy56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1X''@;'; put 'put ''LnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKFAsRixPKXsoZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO3ZhciBOPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgejwidSIpe3ZhciBMPSF6LmZyb207aWYoIUwpdHJ5e3ouZnJv''@;'; put 'put ''bSgiZm9vIiwidXRmOCIpfWNhdGNoe0w9ITB9Tj1MP2Z1bmN0aW9uKEssVSl7cmV0dXJuIFU/bmV3IHooSyxVKTpuZXcgeihLKX06ei5mcm9tLmJpbmQoeiksei5hbGxvY3x8KHouYWxsb2M9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyB6KEspfSl9Ri5leHBvcnRzPWZ1bmN0aW9uKEssVSl7cmV0''@;'; put 'put ''dXJuIm51bWJlciI9PXR5cGVvZiBLP3ouYWxsb2MoSyk6TihLLFUpfSxGLmV4cG9ydHMudGVzdD1mdW5jdGlvbihLKXtyZXR1cm4gei5pc0J1ZmZlcihLKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgej1QKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBOKEwpe3RoaXMuZGF0YT1MLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShOLnByb3RvdHlwZT1uZXcgeikucmVhZERhdGE9ZnVuY3Rpb24oTCl7dGhpcy5jaGVja09mZnNldChM''@;'; put 'put ''KTt2YXIgSz10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0wpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LEYuZXhwb3J0cz1OfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N1cHBvcnQi''@;'; put 'put ''KSxOPVAoIi4vdXRpbHMiKSxMPVAoIi4vY3JjMzIiKSxLPVAoIi4vc2lnbmF0dXJlIiksVT1QKCIuL2RlZmF1bHRzIiksVz1QKCIuL2Jhc2U2NCIpLFk9UCgiLi9jb21wcmVzc2lvbnMiKSxxPVAoIi4vY29tcHJlc3NlZE9iamVjdCIpLGVlPVAoIi4vbm9kZUJ1ZmZlciIpLEo9UCgiLi91dGY4''@;'; put 'put ''IiksbmU9UCgiLi9zdHJpbmdXcml0ZXIiKSxpZT1QKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSxsZT1mdW5jdGlvbihqKXtpZihqLl9kYXRhIGluc3RhbmNlb2YgcSYmKGouX2RhdGE9ai5fZGF0YS5nZXRDb250ZW50KCksai5vcHRpb25zLmJpbmFyeT0hMCxqLm9wdGlvbnMuYmFzZTY0PSExLCJ1''@;'; put 'put ''aW50OGFycmF5Ij09PU4uZ2V0VHlwZU9mKGouX2RhdGEpKSl7dmFyIEU9ai5fZGF0YTtqLl9kYXRhPW5ldyBVaW50OEFycmF5KEUubGVuZ3RoKSwwIT09RS5sZW5ndGgmJmouX2RhdGEuc2V0KEUsMCl9cmV0dXJuIGouX2RhdGF9LG1lPWZ1bmN0aW9uKGope3ZhciBFPWxlKGopO3JldHVybiJz''@;'; put 'put ''dHJpbmciPT09Ti5nZXRUeXBlT2YoRSk/IWoub3B0aW9ucy5iaW5hcnkmJnoubm9kZWJ1ZmZlcj9lZShFLCJ1dGYtOCIpOmouYXNCaW5hcnkoKTpFfSxfZT1mdW5jdGlvbihqKXt2YXIgRT1sZSh0aGlzKTtyZXR1cm4gbnVsbD09PUV8fHR5cGVvZiBFPiJ1Ij8iIjoodGhpcy5vcHRpb25zLmJh''@;'; put 'put ''c2U2NCYmKEU9Vy5kZWNvZGUoRSkpLEU9aiYmdGhpcy5vcHRpb25zLmJpbmFyeT9ILnV0ZjhkZWNvZGUoRSk6Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixFKSwhaiYmIXRoaXMub3B0aW9ucy5iaW5hcnkmJihFPU4udHJhbnNmb3JtVG8oInN0cmluZyIsSC51dGY4ZW5jb2RlKEUpKSksRSl9LFRl''@;'; put 'put ''PWZ1bmN0aW9uKGosRSxtKXt0aGlzLm5hbWU9aix0aGlzLmRpcj1tLmRpcix0aGlzLmRhdGU9bS5kYXRlLHRoaXMuY29tbWVudD1tLmNvbW1lbnQsdGhpcy5fZGF0YT1FLHRoaXMub3B0aW9ucz1tLHRoaXMuX2luaXRpYWxNZXRhZGF0YT17ZGlyOm0uZGlyLGRhdGU6bS5kYXRlfX07VGUucHJv''@;'; put 'put ''dG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCEwKX0sYXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGo9bWUodGhpcyk7cmV0dXJuIE4udHJhbnNmb3JtVG8oIm5vZGVidWZm''@;'; put 'put ''ZXIiLGopfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rpb24oKXt2YXIgaj1tZSh0aGlzKTtyZXR1cm4gTi50cmFuc2Zvcm1UbygidWludDhhcnJheSIsail9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgU2U9ZnVuY3Rpb24oaixF''@;'; put 'put ''KXt2YXIgQSxtPSIiO2ZvcihBPTA7QTxFO0ErKyltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZqKSxqPj4+PTg7cmV0dXJuIG19LGplPWZ1bmN0aW9uKCl7dmFyIEUsbSxqPXt9O2ZvcihFPTA7RTxhcmd1bWVudHMubGVuZ3RoO0UrKylmb3IobSBpbiBhcmd1bWVudHNbRV0pYXJndW1lbnRz''@;'; put 'put ''W0VdLmhhc093blByb3BlcnR5KG0pJiZ0eXBlb2YgalttXT4idSImJihqW21dPWFyZ3VtZW50c1tFXVttXSk7cmV0dXJuIGp9LHA9ZnVuY3Rpb24oaixFLG0pe3ZhciBhZSxBPU4uZ2V0VHlwZU9mKEUpO2lmKG09ZnVuY3Rpb24oail7cmV0dXJuITA9PT0oaj1qfHx7fSkuYmFzZTY0JiZudWxs''@;'; put 'put ''PT1qLmJpbmFyeSYmKGouYmluYXJ5PSEwKSwoaj1qZShqLFUpKS5kYXRlPWouZGF0ZXx8bmV3IERhdGUsbnVsbCE9PWouY29tcHJlc3Npb24mJihqLmNvbXByZXNzaW9uPWouY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksan0obSksbS5jcmVhdGVGb2xkZXJzJiYoYWU9YihqKSkmJnguY2Fs''@;'; put 'put ''bCh0aGlzLGFlLCEwKSxtLmRpcnx8bnVsbD09PUV8fHR5cGVvZiBFPiJ1IiltLmJhc2U2ND0hMSxtLmJpbmFyeT0hMSxFPW51bGw7ZWxzZSBpZigic3RyaW5nIj09PUEpbS5iaW5hcnkmJiFtLmJhc2U2NCYmITAhPT1tLm9wdGltaXplZEJpbmFyeVN0cmluZyYmKEU9Ti5zdHJpbmcyYmluYXJ5''@;'; put 'put ''KEUpKTtlbHNle2lmKG0uYmFzZTY0PSExLG0uYmluYXJ5PSEwLCEoQXx8RSBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIraisiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT1BJiYoRT1OLnRyYW5zZm9ybVRvKCJ1''@;'; put 'put ''aW50OGFycmF5IixFKSl9dmFyIHRlPW5ldyBUZShqLEUsbSk7cmV0dXJuIHRoaXMuZmlsZXNbal09dGUsdGV9LGI9ZnVuY3Rpb24oail7Ii8iPT1qLnNsaWNlKC0xKSYmKGo9ai5zdWJzdHJpbmcoMCxqLmxlbmd0aC0xKSk7dmFyIEU9ai5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBFPjA/ai5z''@;'; put 'put ''dWJzdHJpbmcoMCxFKToiIn0seD1mdW5jdGlvbihqLEUpe3JldHVybiIvIiE9ai5zbGljZSgtMSkmJihqKz0iLyIpLEU9dHlwZW9mIEU8InUiJiZFLHRoaXMuZmlsZXNbal18fHAuY2FsbCh0aGlzLGosbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6RX0pLHRoaXMuZmlsZXNbal19LEM9ZnVu''@;'; put 'put ''Y3Rpb24oaixFKXt2YXIgQSxtPW5ldyBxO3JldHVybiBqLl9kYXRhIGluc3RhbmNlb2YgcT8obS51bmNvbXByZXNzZWRTaXplPWouX2RhdGEudW5jb21wcmVzc2VkU2l6ZSxtLmNyYzMyPWouX2RhdGEuY3JjMzIsMD09PW0udW5jb21wcmVzc2VkU2l6ZXx8ai5kaXI/KEU9WS5TVE9SRSxtLmNv''@;'; put 'put ''bXByZXNzZWRDb250ZW50PSIiLG0uY3JjMzI9MCk6ai5fZGF0YS5jb21wcmVzc2lvbk1ldGhvZD09PUUubWFnaWM/bS5jb21wcmVzc2VkQ29udGVudD1qLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk6KEE9ai5fZGF0YS5nZXRDb250ZW50KCksbS5jb21wcmVzc2VkQ29udGVudD1FLmNv''@;'; put 'put ''bXByZXNzKE4udHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxBKSkpKTooKCEoQT1tZShqKSl8fDA9PT1BLmxlbmd0aHx8ai5kaXIpJiYoRT1ZLlNUT1JFLEE9IiIpLG0udW5jb21wcmVzc2VkU2l6ZT1BLmxlbmd0aCxtLmNyYzMyPUwoQSksbS5jb21wcmVzc2VkQ29udGVudD1FLmNv''@;'; put 'put ''bXByZXNzKE4udHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxBKSkpLG0uY29tcHJlc3NlZFNpemU9bS5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgsbS5jb21wcmVzc2lvbk1ldGhvZD1FLm1hZ2ljLG19LFQ9ZnVuY3Rpb24oaixFLG0sQSl7dmFyIHhlLHZlLEZlLE9lLHRlPU4udHJh''@;'; put 'put ''bnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKEUubmFtZSkpLHNlPUUuY29tbWVudHx8IiIsd2U9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoc2UpKSxVZT10ZS5sZW5ndGghPT1FLm5hbWUubGVuZ3RoLEplPXdlLmxlbmd0aCE9PXNlLmxlbmd0aCxvdD1FLm9wdGlv''@;'; put 'put ''bnMsWGU9IiIsemU9IiIsRGU9IiI7RmU9RS5faW5pdGlhbE1ldGFkYXRhLmRpciE9PUUuZGlyP0UuZGlyOm90LmRpcix4ZT0oT2U9RS5faW5pdGlhbE1ldGFkYXRhLmRhdGUhPT1FLmRhdGU/RS5kYXRlOm90LmRhdGUpLmdldEhvdXJzKCkseGU8PD02LHhlfD1PZS5nZXRNaW51dGVzKCkseGU8''@;'; put 'put ''PD01LHhlfD1PZS5nZXRTZWNvbmRzKCkvMix2ZT1PZS5nZXRGdWxsWWVhcigpLTE5ODAsdmU8PD00LHZlfD1PZS5nZXRNb250aCgpKzEsdmU8PD01LHZlfD1PZS5nZXREYXRlKCksVWUmJih6ZT1TZSgxLDEpK1NlKEwodGUpLDQpK3RlLFhlKz0idXAiK1NlKHplLmxlbmd0aCwyKSt6ZSksSmUm''@;'; put 'put ''JihEZT1TZSgxLDEpK1NlKHRoaXMuY3JjMzIod2UpLDQpK3dlLFhlKz0idWMiK1NlKERlLmxlbmd0aCwyKStEZSk7dmFyIEllPSIiO3JldHVybiBJZSs9IlxuXDAiLEllKz1VZXx8SmU/IlwwXGIiOiJcMFwwIixJZSs9bS5jb21wcmVzc2lvbk1ldGhvZCxJZSs9U2UoeGUsMiksSWUrPVNlKHZl''@;'; put 'put ''LDIpLEllKz1TZShtLmNyYzMyLDQpLEllKz1TZShtLmNvbXByZXNzZWRTaXplLDQpLEllKz1TZShtLnVuY29tcHJlc3NlZFNpemUsNCksSWUrPVNlKHRlLmxlbmd0aCwyKSxJZSs9U2UoWGUubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOksuTE9DQUxfRklMRV9IRUFERVIrSWUrdGUrWGUsZGlyUmVj''@;'; put 'put ''b3JkOksuQ0VOVFJBTF9GSUxFX0hFQURFUisiXHgxNFwwIitJZStTZSh3ZS5sZW5ndGgsMikrIlwwXDBcMFwwIisoITA9PT1GZT8iXHgxMFwwXDBcMCI6IlwwXDBcMFwwIikrU2UoQSw0KSt0ZStYZSt3ZSxjb21wcmVzc2VkT2JqZWN0Om19fSxIPXtsb2FkOmZ1bmN0aW9uKGosRSl7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihqKXt2YXIgbSxBLGFlLHRlLEU9W107Zm9yKG0gaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KG0p''@;'; put 'put ''JiYodGU9bmV3IFRlKChhZT10aGlzLmZpbGVzW21dKS5uYW1lLGFlLl9kYXRhLGplKGFlLm9wdGlvbnMpKSxBPW0uc2xpY2UodGhpcy5yb290Lmxlbmd0aCxtLmxlbmd0aCksbS5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZqKEEsdGUpJiZFLnB1c2godGUpKTtyZXR1''@;'; put 'put ''cm4gRX0sZmlsZTpmdW5jdGlvbihqLEUsbSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKE4uaXNSZWdFeHAoaikpe3ZhciBBPWo7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLHRlKXtyZXR1cm4hdGUuZGlyJiZBLnRlc3QoYWUpfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0''@;'; put 'put ''aW9uKGFlLHRlKXtyZXR1cm4hdGUuZGlyJiZhZT09PWp9KVswXXx8bnVsbH1yZXR1cm4gcC5jYWxsKHRoaXMsaj10aGlzLnJvb3QraixFLG0pLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihqKXtpZighailyZXR1cm4gdGhpcztpZihOLmlzUmVnRXhwKGopKXJldHVybiB0aGlzLmZpbHRlcihmdW5j''@;'; put 'put ''dGlvbihhZSx0ZSl7cmV0dXJuIHRlLmRpciYmai50ZXN0KGFlKX0pO3ZhciBtPXguY2FsbCh0aGlzLHRoaXMucm9vdCtqKSxBPXRoaXMuY2xvbmUoKTtyZXR1cm4gQS5yb290PW0ubmFtZSxBfSxyZW1vdmU6ZnVuY3Rpb24oail7dmFyIEU9dGhpcy5maWxlc1tqPXRoaXMucm9vdCtqXTtpZihF''@;'; put 'put ''fHwoIi8iIT1qLnNsaWNlKC0xKSYmKGorPSIvIiksRT10aGlzLmZpbGVzW2pdKSxFJiYhRS5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbal07ZWxzZSBmb3IodmFyIG09dGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsdGUpe3JldHVybiB0ZS5uYW1lLnNsaWNlKDAsai5sZW5ndGgpPT09an0pLEE9MDtB''@;'; put 'put ''PG0ubGVuZ3RoO0ErKylkZWxldGUgdGhpcy5maWxlc1ttW0FdLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihqKXtqPWplKGp8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLE4uY2hlY2tTdXBwb3J0KGou''@;'; put 'put ''dHlwZSk7dmFyIGFlLHRlLFhlLEU9W10sbT0wLEE9MCxzZT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMudXRmOGVuY29kZShqLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8IiIpKTtmb3IodmFyIHdlIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eSh3ZSkpe3Zh''@;'; put 'put ''ciBVZT10aGlzLmZpbGVzW3dlXSxKZT1VZS5vcHRpb25zLmNvbXByZXNzaW9ufHxqLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksb3Q9WVtKZV07aWYoIW90KXRocm93IG5ldyBFcnJvcihKZSsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIHhlPUMuY2FsbCh0''@;'; put 'put ''aGlzLFVlLG90KSx2ZT1ULmNhbGwodGhpcyx3ZSxVZSx4ZSxtKTttKz12ZS5maWxlUmVjb3JkLmxlbmd0aCt4ZS5jb21wcmVzc2VkU2l6ZSxBKz12ZS5kaXJSZWNvcmQubGVuZ3RoLEUucHVzaCh2ZSl9WGU9Sy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIitTZShFLmxlbmd0aCwy''@;'; put 'put ''KStTZShFLmxlbmd0aCwyKStTZShBLDQpK1NlKG0sNCkrU2Uoc2UubGVuZ3RoLDIpK3NlO3ZhciB6ZT1qLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IoYWU9InVpbnQ4YXJyYXkiPT09emV8fCJhcnJheWJ1ZmZlciI9PT16ZXx8ImJsb2IiPT09emV8fCJub2RlYnVmZmVyIj09PXplP25ldyBpZSht''@;'; put 'put ''K0ErWGUubGVuZ3RoKTpuZXcgbmUobStBK1hlLmxlbmd0aCksdGU9MDt0ZTxFLmxlbmd0aDt0ZSsrKWFlLmFwcGVuZChFW3RlXS5maWxlUmVjb3JkKSxhZS5hcHBlbmQoRVt0ZV0uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKHRlPTA7dGU8RS5sZW5ndGg7dGUrKylh''@;'; put 'put ''ZS5hcHBlbmQoRVt0ZV0uZGlyUmVjb3JkKTthZS5hcHBlbmQoWGUpO3ZhciBEZT1hZS5maW5hbGl6ZSgpO3N3aXRjaChqLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBOLnRyYW5zZm9ybVRvKGou''@;'; put 'put ''dHlwZS50b0xvd2VyQ2FzZSgpLERlKTtjYXNlImJsb2IiOnJldHVybiBOLmFycmF5QnVmZmVyMkJsb2IoTi50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLERlKSk7Y2FzZSJiYXNlNjQiOnJldHVybiBqLmJhc2U2ND9XLmVuY29kZShEZSk6RGU7ZGVmYXVsdDpyZXR1cm4gRGV9fSxjcmMzMjpm''@;'; put 'put ''dW5jdGlvbihqLEUpe3JldHVybiBMKGosRSl9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oail7cmV0dXJuIE4udHJhbnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKGopKX0sdXRmOGRlY29kZTpmdW5jdGlvbihqKXtyZXR1cm4gSi51dGY4ZGVjb2RlKGopfX07Ri5leHBvcnRzPUh9LHsiLi9i''@;'; put 'put ''YXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0''@;'; put 'put ''ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO08uTE9DQUxfRklMRV9IRUFERVI9IlBLXHgwM1x4MDQiLE8uQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEtceDAxXHgwMiIsTy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgw''@;'; put 'put ''NVx4MDYiLE8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEtceDA2XHgwNyIsTy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNlx4MDYiLE8uREFUQV9ERVNDUklQVE9SPSJQS1x4MDdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgej1QKCIuL2RhdGFSZWFkZXIiKSxOPVAoIi4vdXRpbHMiKTtmdW5jdGlvbiBMKEssVSl7dGhpcy5kYXRhPUssVXx8KHRoaXMuZGF0YT1OLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEwucHJvdG90eXBlPW5l''@;'; put 'put ''dyB6KS5ieXRlQXQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KEspfSxMLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKEspfSxMLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihL''@;'; put 'put ''KXt0aGlzLmNoZWNrT2Zmc2V0KEspO3ZhciBVPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrSyk7cmV0dXJuIHRoaXMuaW5kZXgrPUssVX0sRi5leHBvcnRzPUx9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihQLEYsTyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtdfTtOLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKEwpe0w9ei50cmFuc2Zvcm1Ubygic3RyaW5nIixMKSx0aGlzLmRhdGEucHVzaChMKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''YXRhLmpvaW4oIiIpfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9XSwxNzpbZnVuY3Rpb24oUCxGLE8peyhmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7aWYoTy5iYXNlNjQ9ITAsTy5hcnJheT0hMCxPLnN0cmluZz0hMCxPLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSIm''@;'; put 'put ''JnR5cGVvZiBVaW50OEFycmF5PCJ1IixPLm5vZGVidWZmZXI9dHlwZW9mIHo8InUiLE8udWludDhhcnJheT10eXBlb2YgVWludDhBcnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1IilPLmJsb2I9ITE7ZWxzZXt2YXIgTj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e08uYmxvYj0wPT09bmV3''@;'; put 'put ''IEJsb2IoW05dLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaHt0cnl7dmFyIEs9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtLLmFwcGVuZChOKSxP''@;'; put 'put ''LmJsb2I9MD09PUsuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaHtPLmJsb2I9ITF9fX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2RhdGFSZWFk''@;'; put 'put ''ZXIiKTtmdW5jdGlvbiBOKEwpe0wmJih0aGlzLmRhdGE9TCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MCl9KE4ucHJvdG90eXBlPW5ldyB6KS5ieXRlQXQ9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZGF0YVtMXX0sTi5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWdu''@;'; put 'put ''YXR1cmU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBLPUwuY2hhckNvZGVBdCgwKSxVPUwuY2hhckNvZGVBdCgxKSxXPUwuY2hhckNvZGVBdCgyKSxZPUwuY2hhckNvZGVBdCgzKSxxPXRoaXMubGVuZ3RoLTQ7cT49MDstLXEpaWYodGhpcy5kYXRhW3FdPT09SyYmdGhpcy5kYXRhW3ErMV09PT1VJiZ0''@;'; put 'put ''aGlzLmRhdGFbcSsyXT09PVcmJnRoaXMuZGF0YVtxKzNdPT09WSlyZXR1cm4gcTtyZXR1cm4tMX0sTi5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oTCl7aWYodGhpcy5jaGVja09mZnNldChMKSwwPT09TClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIEs9dGhpcy5kYXRhLnN1YmFy''@;'; put 'put ''cmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxLfSxGLmV4cG9ydHM9Tn0seyIuL2RhdGFSZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1mdW5jdGlvbihMKXt0aGlzLmRhdGE9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoTCksdGhpcy5pbmRleD0wfTtOLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKEwpezAhPT1MLmxlbmd0aCYmKEw9ei50cmFuc2Zvcm1UbygidWludDhhcnJheSIsTCksdGhpcy5kYXRhLnNldChMLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPUwubGVuZ3RoKX0sZmluYWxp''@;'; put 'put ''emU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIHo9UCgiLi91dGlscyIpLE49UCgiLi9zdXBwb3J0IiksTD1QKCIuL25vZGVCdWZmZXIiKSxLPW5ldyBBcnJh''@;'; put 'put ''eSgyNTYpLFU9MDtVPDI1NjtVKyspS1tVXT1VPj0yNTI/NjpVPj0yNDg/NTpVPj0yNDA/NDpVPj0yMjQ/MzpVPj0xOTI/MjoxO0tbMjU0XT1LWzI1NF09MTt2YXIgWT1mdW5jdGlvbihlZSxKKXt2YXIgbmU7Zm9yKChKPUp8fGVlLmxlbmd0aCk+ZWUubGVuZ3RoJiYoSj1lZS5sZW5ndGgpLG5l''@;'; put 'put ''PUotMTtuZT49MCYmMTI4PT0oMTkyJmVlW25lXSk7KW5lLS07cmV0dXJuIG5lPDB8fDA9PT1uZT9KOm5lK0tbZWVbbmVdXT5KP25lOkp9LHE9ZnVuY3Rpb24oZWUpe3ZhciBuZSxpZSxsZSxtZSxfZT1lZS5sZW5ndGgsVGU9bmV3IEFycmF5KDIqX2UpO2ZvcihpZT0wLG5lPTA7bmU8X2U7KWlm''@;'; put 'put ''KChsZT1lZVtuZSsrXSk8MTI4KVRlW2llKytdPWxlO2Vsc2UgaWYoKG1lPUtbbGVdKT40KVRlW2llKytdPTY1NTMzLG5lKz1tZS0xO2Vsc2V7Zm9yKGxlJj0yPT09bWU/MzE6Mz09PW1lPzE1Ojc7bWU+MSYmbmU8X2U7KWxlPWxlPDw2fDYzJmVlW25lKytdLG1lLS07bWU+MT9UZVtpZSsrXT02''@;'; put 'put ''NTUzMzpsZTw2NTUzNj9UZVtpZSsrXT1sZTooVGVbaWUrK109NTUyOTZ8KGxlLT02NTUzNik+PjEwJjEwMjMsVGVbaWUrK109NTYzMjB8MTAyMyZsZSl9cmV0dXJuIFRlLmxlbmd0aCE9PWllJiYoVGUuc3ViYXJyYXk/VGU9VGUuc3ViYXJyYXkoMCxpZSk6VGUubGVuZ3RoPWllKSx6LmFwcGx5''@;'; put 'put ''RnJvbUNoYXJDb2RlKFRlKX07Ty51dGY4ZW5jb2RlPWZ1bmN0aW9uKEope3JldHVybiBOLm5vZGVidWZmZXI/TChKLCJ1dGYtOCIpOmZ1bmN0aW9uKGVlKXt2YXIgSixuZSxpZSxsZSxtZSxfZT1lZS5sZW5ndGgsVGU9MDtmb3IobGU9MDtsZTxfZTtsZSsrKTU1Mjk2PT0oNjQ1MTImKG5lPWVl''@;'; put 'put ''LmNoYXJDb2RlQXQobGUpKSkmJmxlKzE8X2UmJjU2MzIwPT0oNjQ1MTImKGllPWVlLmNoYXJDb2RlQXQobGUrMSkpKSYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyhpZS01NjMyMCksbGUrKyksVGUrPW5lPDEyOD8xOm5lPDIwNDg/MjpuZTw2NTUzNj8zOjQ7Zm9yKEo9Ti51aW50OGFycmF5''@;'; put 'put ''P25ldyBVaW50OEFycmF5KFRlKTpuZXcgQXJyYXkoVGUpLG1lPTAsbGU9MDttZTxUZTtsZSsrKTU1Mjk2PT0oNjQ1MTImKG5lPWVlLmNoYXJDb2RlQXQobGUpKSkmJmxlKzE8X2UmJjU2MzIwPT0oNjQ1MTImKGllPWVlLmNoYXJDb2RlQXQobGUrMSkpKSYmKG5lPTY1NTM2KyhuZS01NTI5Njw8''@;'; put 'put ''MTApKyhpZS01NjMyMCksbGUrKyksbmU8MTI4P0pbbWUrK109bmU6bmU8MjA0OD8oSlttZSsrXT0xOTJ8bmU+Pj42LEpbbWUrK109MTI4fDYzJm5lKTpuZTw2NTUzNj8oSlttZSsrXT0yMjR8bmU+Pj4xMixKW21lKytdPTEyOHxuZT4+PjYmNjMsSlttZSsrXT0xMjh8NjMmbmUpOihKW21lKytd''@;'; put 'put ''PTI0MHxuZT4+PjE4LEpbbWUrK109MTI4fG5lPj4+MTImNjMsSlttZSsrXT0xMjh8bmU+Pj42JjYzLEpbbWUrK109MTI4fDYzJm5lKTtyZXR1cm4gSn0oSil9LE8udXRmOGRlY29kZT1mdW5jdGlvbihKKXtpZihOLm5vZGVidWZmZXIpcmV0dXJuIHoudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIi''@;'; put 'put ''LEopLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgbmU9W10saWU9MCxsZT0oSj16LnRyYW5zZm9ybVRvKE4udWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixKKSkubGVuZ3RoO2llPGxlOyl7dmFyIF9lPVkoSixNYXRoLm1pbihpZSs2NTUzNixsZSkpO25lLnB1c2gocShOLnVpbnQ4''@;'; put 'put ''YXJyYXk/Si5zdWJhcnJheShpZSxfZSk6Si5zbGljZShpZSxfZSkpKSxpZT1fZX1yZXR1cm4gbmUuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdXBw''@;'; put 'put ''b3J0IiksTj1QKCIuL2NvbXByZXNzaW9ucyIpLEw9UCgiLi9ub2RlQnVmZmVyIik7ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIGVlfWZ1bmN0aW9uIFUoZWUsSil7Zm9yKHZhciBuZT0wO25lPGVlLmxlbmd0aDsrK25lKUpbbmVdPTI1NSZlZS5jaGFyQ29kZUF0KG5lKTtyZXR1cm4gSn1mdW5jdGlv''@;'; put 'put ''biBXKGVlKXt2YXIgSj02NTUzNixuZT1bXSxpZT1lZS5sZW5ndGgsbGU9Ty5nZXRUeXBlT2YoZWUpLG1lPTAsX2U9ITA7dHJ5e3N3aXRjaChsZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9k''@;'; put 'put ''ZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEwoMCkpfX1jYXRjaHtfZT0hMX1pZighX2Upe2Zvcih2YXIgVGU9IiIsU2U9MDtTZTxlZS5sZW5ndGg7U2UrKylUZSs9U3RyaW5nLmZyb21DaGFyQ29kZShlZVtTZV0pO3JldHVybiBUZX1mb3IoO21lPGllJiZKPjE7KXRy''@;'; put 'put ''eXtuZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09bGV8fCJub2RlYnVmZmVyIj09PWxlP2VlLnNsaWNlKG1lLE1hdGgubWluKG1lK0osaWUpKTplZS5zdWJhcnJheShtZSxNYXRoLm1pbihtZStKLGllKSkpKSxtZSs9Sn1jYXRjaHtKPU1hdGguZmxvb3Io''@;'; put 'put ''Si8yKX1yZXR1cm4gbmUuam9pbigiIil9ZnVuY3Rpb24gWShlZSxKKXtmb3IodmFyIG5lPTA7bmU8ZWUubGVuZ3RoO25lKyspSltuZV09ZWVbbmVdO3JldHVybiBKfU8uc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihlZSl7Zm9yKHZhciBKPSIiLG5lPTA7bmU8ZWUubGVuZ3RoO25lKyspSis9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSgyNTUmZWUuY2hhckNvZGVBdChuZSkpO3JldHVybiBKfSxPLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oZWUpe08uY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbZWVdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2h7dHJ5''@;'; put 'put ''e3ZhciBuZT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiBuZS5hcHBlbmQoZWUpLG5lLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LE8uYXBwbHlGcm9tQ2hhckNvZGU9Vzt2YXIgcT17fTtxLnN0cmluZz17c3RyaW5nOkssYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6''@;'; put 'put ''ZnVuY3Rpb24oZWUpe3JldHVybiBxLnN0cmluZy51aW50OGFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLG5ldyBVaW50OEFycmF5KGVlLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxMKGVlLmxlbmd0aCkp''@;'; put 'put ''fX0scS5hcnJheT17c3RyaW5nOlcsYXJyYXk6SyxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3Jl''@;'; put 'put ''dHVybiBMKGVlKX19LHEuYXJyYXlidWZmZXI9e3N0cmluZzpmdW5jdGlvbihlZSl7cmV0dXJuIFcobmV3IFVpbnQ4QXJyYXkoZWUpKX0sYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKG5ldyBVaW50OEFycmF5KGVlKSxuZXcgQXJyYXkoZWUuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpL''@;'; put 'put ''LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBMKG5ldyBVaW50OEFycmF5KGVlKSl9fSxxLnVpbnQ4YXJyYXk9e3N0cmluZzpXLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShlZSxuZXcg''@;'; put 'put ''QXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUuYnVmZmVyfSx1aW50OGFycmF5Okssbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIEwoZWUpfX0scS5ub2RlYnVmZmVyPXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFko''@;'; put 'put ''ZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIHEubm9kZWJ1ZmZlci51aW50OGFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBVaW50OEFycmF5KGVlLmxlbmd0aCkpfSxub2RlYnVm''@;'; put 'put ''ZmVyOkt9LE8udHJhbnNmb3JtVG89ZnVuY3Rpb24oZWUsSil7aWYoSnx8KEo9IiIpLCFlZSlyZXR1cm4gSjtPLmNoZWNrU3VwcG9ydChlZSk7dmFyIG5lPU8uZ2V0VHlwZU9mKEopO3JldHVybiBxW25lXVtlZV0oSil9LE8uZ2V0VHlwZU9mPWZ1bmN0aW9uKGVlKXtyZXR1cm4ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGVlPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpPyJhcnJheSI6ei5ub2RlYnVmZmVyJiZMLnRlc3QoZWUpPyJub2RlYnVmZmVyIjp6LnVpbnQ4YXJyYXkmJmVlIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhh''@;'; put 'put ''cnJheSI6ei5hcnJheWJ1ZmZlciYmZWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8iYXJyYXlidWZmZXIiOnZvaWQgMH0sTy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oZWUpe2lmKCF6W2VlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlZSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhp''@;'; put 'put ''cyBicm93c2VyIil9LE8uTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxPLk1BWF9WQUxVRV8zMkJJVFM9LTEsTy5wcmV0dHk9ZnVuY3Rpb24oZWUpe3ZhciBuZSxpZSxKPSIiO2ZvcihpZT0wO2llPChlZXx8IiIpLmxlbmd0aDtpZSsrKUorPSJcXHgiKygobmU9ZWUuY2hhckNvZGVBdChpZSkpPDE2''@;'; put 'put ''PyIwIjoiIikrbmUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEp9LE8uZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKGVlKXtmb3IodmFyIEogaW4gTilpZihOLmhhc093blByb3BlcnR5KEopJiZOW0pdLm1hZ2ljPT09ZWUpcmV0dXJuIE5bSl07cmV0dXJuIG51bGx9LE8uaXNS''@;'; put 'put ''ZWdFeHA9ZnVuY3Rpb24oZWUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgej1QKCIuL3N0cmluZ1JlYWRlciIpLE49UCgiLi9ub2RlQnVmZmVyUmVhZGVyIiksTD1QKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxLPVAoIi4vdXRpbHMiKSxVPVAoIi4vc2lnbmF0dXJlIiksVz1QKCIuL3ppcEVudHJ5IiksWT1QKCIuL3N1cHBvcnQiKSxxPVAoIi4vb2JqZWN0''@;'; put 'put ''Iik7ZnVuY3Rpb24gZWUoSixuZSl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPW5lLEomJnRoaXMubG9hZChKKX1lZS5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKEope3ZhciBuZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKG5lIT09Sil0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrSy5wcmV0dHkobmUpKyIsIGV4cGVjdGVkICIrSy5wcmV0dHkoSikrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJ''@;'; put 'put ''bnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMu''@;'; put 'put ''Y2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmlu''@;'; put 'put ''Zyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD1xLnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMu''@;'; put 'put ''dmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVh''@;'; put 'put ''ZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFs''@;'; put 'put ''RGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgaWUsbGUsbWUsSj10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPEo7KWllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksbGU9dGhpcy5yZWFkZXIucmVhZEludCg0''@;'; put 'put ''KSxtZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKGxlKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbaWVdPXtpZDppZSxsZW5ndGg6bGUsdmFsdWU6bWV9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGly''@;'; put 'put ''U3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIEosbmU7Zm9yKEo9MDtKPHRoaXMuZmlsZXMubGVuZ3RoO0orKyl0aGlzLnJlYWRlci5zZXRJbmRleCgobmU9dGhpcy5maWxlc1tKXSkubG9jYWxIZWFkZXJPZmZzZXQp''@;'; put 'put ''LHRoaXMuY2hlY2tTaWduYXR1cmUoVS5MT0NBTF9GSUxFX0hFQURFUiksbmUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksbmUuaGFuZGxlVVRGOCgpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBKO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZz''@;'; put 'put ''ZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1VLkNFTlRSQUxfRklMRV9IRUFERVI7KShKPW5ldyBXKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goSil9LHJlYWRFbmRPZkNlbnRy''@;'; put 'put ''YWw6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShVLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1KKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhp''@;'; put 'put ''cy5yZWFkZXIuc2V0SW5kZXgoSiksdGhpcy5jaGVja1NpZ25hdHVyZShVLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1L''@;'; put 'put ''Lk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09Sy5NQVhfVkFMVUVfMzJCSVRTfHx0aGlz''@;'; put 'put ''LmNlbnRyYWxEaXJPZmZzZXQ9PT1LLk1BWF9WQUxVRV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsLTE9PT0oSj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAg''@;'; put 'put ''OiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KEopLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50''@;'; put 'put ''cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJl''@;'; put 'put ''cGFyZVJlYWRlcjpmdW5jdGlvbihKKXt2YXIgbmU9Sy5nZXRUeXBlT2YoSik7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1uZXx8WS51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PW5lP25ldyBOKEopOm5ldyBMKEsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEopKTpuZXcgeihKLHRoaXMubG9h''@;'; put 'put ''ZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKX0sbG9hZDpmdW5jdGlvbihKKXt0aGlzLnByZXBhcmVSZWFkZXIoSiksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LEYuZXhwb3J0cz1lZX0seyIuL25vZGVC''@;'; put 'put ''dWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgej1QKCIuL3N0cmluZ1JlYWRlciIpLE49UCgiLi91dGlscyIpLEw9UCgiLi9jb21wcmVzc2VkT2JqZWN0IiksSz1QKCIuL29iamVjdCIpO2Z1bmN0aW9uIFUoVyxZKXt0aGlzLm9wdGlvbnM9Vyx0aGlzLmxvYWRPcHRpb25zPVl9VS5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuISgyMDQ4Jn50aGlzLmJpdEZsYWcpfSxwcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oVyxZLHEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlZT1XLmluZGV4O1cuc2V0SW5k''@;'; put 'put ''ZXgoWSk7dmFyIEo9Vy5yZWFkRGF0YShxKTtyZXR1cm4gVy5zZXRJbmRleChlZSksSn19LHByZXBhcmVDb250ZW50OmZ1bmN0aW9uKFcsWSxxLGVlLEope3JldHVybiBmdW5jdGlvbigpe3ZhciBuZT1OLnRyYW5zZm9ybVRvKGVlLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5nZXRDb21wcmVz''@;'; put 'put ''c2VkQ29udGVudCgpKSxpZT1lZS51bmNvbXByZXNzKG5lKTtpZihpZS5sZW5ndGghPT1KKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBpZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVyl7dmFyIFkscTtpZihXLnNraXAo''@;'; put 'put ''MjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5yZWFkSW50KDIpLHE9Vy5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFcuc2tpcChxKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oWT1OLmZpbmRD''@;'; put 'put ''b21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitOLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0''@;'; put 'put ''aGlzLmRlY29tcHJlc3NlZD1uZXcgTCx0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3Jj''@;'; put 'put ''MzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChXLFcuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxZKSx0''@;'; put 'put ''aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWSx0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPU4udHJhbnNmb3JtVG8o''@;'; put 'put ''InN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxLLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihXKXtpZih0''@;'; put 'put ''aGlzLnZlcnNpb25NYWRlQnk9Vy5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1XLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPVcucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVcucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vy5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9''@;'; put 'put ''Vy5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Vy5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVu''@;'; put 'put ''dExlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9Vy5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1XLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVcucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVcucmVh''@;'; put 'put ''ZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1XLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoVyksdGhpcy5wYXJzZVpJUDY0''@;'; put 'put ''RXh0cmFGaWVsZChXKSx0aGlzLmZpbGVDb21tZW50PVcucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihXKXtpZih0aGlzLmV4dHJhRmllbGRz''@;'; put 'put ''WzFdKXt2YXIgWT1uZXcgeih0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9WS5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09Ti5NQVhfVkFMVUVfMzJCSVRT''@;'; put 'put ''JiYodGhpcy5jb21wcmVzc2VkU2l6ZT1ZLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVkucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0''@;'; put 'put ''aGlzLmRpc2tOdW1iZXJTdGFydD1ZLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKFcpe3ZhciBxLGVlLEosWT1XLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRoaXMuZXh0cmFGaWVsZHN8fHt9O1cuaW5kZXg8WSt0aGlzLmV4dHJhRmllbGRzTGVuZ3RoOylxPVcu''@;'; put 'put ''cmVhZEludCgyKSxlZT1XLnJlYWRJbnQoMiksSj1XLnJlYWRTdHJpbmcoZWUpLHRoaXMuZXh0cmFGaWVsZHNbcV09e2lkOnEsbGVuZ3RoOmVlLHZhbHVlOkp9fSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1LLnV0ZjhkZWNvZGUodGhpcy5m''@;'; put 'put ''aWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1LLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgVz10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09VyYmKHRoaXMuZmlsZU5hbWU9Vyk7dmFyIFk9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21t''@;'; put 'put ''ZW50KCk7bnVsbCE9PVkmJih0aGlzLmZpbGVDb21tZW50PVkpfX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBXPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKFcpe3ZhciBZPW5ldyB6KFcudmFsdWUpO3JldHVybiAxIT09WS5yZWFkSW50KDEpfHxLLmNyYzMy''@;'; put 'put ''KHRoaXMuZmlsZU5hbWUpIT09WS5yZWFkSW50KDQpP251bGw6Sy51dGY4ZGVjb2RlKFkucmVhZFN0cmluZyhXLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihXKXt2''@;'; put 'put ''YXIgWT1uZXcgeihXLnZhbHVlKTtyZXR1cm4gMSE9PVkucmVhZEludCgxKXx8Sy5jcmMzMih0aGlzLmZpbGVDb21tZW50KSE9PVkucmVhZEludCg0KT9udWxsOksudXRmOGRlY29kZShZLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sRi5leHBvcnRzPVV9LHsiLi9jb21w''@;'; put 'put ''cmVzc2VkT2JqZWN0IjoyLCIuL29iamVjdCI6MTMsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi91dGlscyI6MjF9XSwyNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgVT17fTsoMCxQKCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24pKFUsUCgiLi9saWIvZGVmbGF0ZSIpLFAo''@;'; put 'put ''Ii4vbGliL2luZmxhdGUiKSxQKCIuL2xpYi96bGliL2NvbnN0YW50cyIpKSxGLmV4cG9ydHM9VX0seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihQLEYs''@;'; put 'put ''Tyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vemxpYi9kZWZsYXRlLmpzIiksTj1QKCIuL3V0aWxzL2NvbW1vbiIpLEw9UCgiLi91dGlscy9zdHJpbmdzIiksSz1QKCIuL3psaWIvbWVzc2FnZXMiKSxVPVAoIi4vemxpYi96c3RyZWFtIiksbGU9ZnVuY3Rpb24oU2Upe3RoaXMub3B0aW9ucz1O''@;'; put 'put ''LmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSxTZXx8e30pO3ZhciBqZT10aGlzLm9wdGlvbnM7amUucmF3JiZqZS53aW5kb3dCaXRzPjA/amUud2luZG93Qml0cz0tamUud2luZG93Qml0''@;'; put 'put ''czpqZS5nemlwJiZqZS53aW5kb3dCaXRzPjAmJmplLndpbmRvd0JpdHM8MTYmJihqZS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgVSx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIFY9ei5k''@;'; put 'put ''ZWZsYXRlSW5pdDIodGhpcy5zdHJtLGplLmxldmVsLGplLm1ldGhvZCxqZS53aW5kb3dCaXRzLGplLm1lbUxldmVsLGplLnN0cmF0ZWd5KTtpZigwIT09Vil0aHJvdyBuZXcgRXJyb3IoS1tWXSk7amUuaGVhZGVyJiZ6LmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGplLmhlYWRlcil9O2Z1''@;'; put 'put ''bmN0aW9uIG1lKFNlLGplKXt2YXIgVj1uZXcgbGUoamUpO2lmKFYucHVzaChTZSwhMCksVi5lcnIpdGhyb3cgVi5tc2c7cmV0dXJuIFYucmVzdWx0fWxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFNlLGplKXt2YXIgYix4LFY9dGhpcy5zdHJtLHA9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtp''@;'; put 'put ''Zih0aGlzLmVuZGVkKXJldHVybiExO3g9amU9PT1+fmplP2plOiEwPT09amU/NDowLFYuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBTZT9MLnN0cmluZzJidWYoU2UpOlNlLFYubmV4dF9pbj0wLFYuYXZhaWxfaW49Vi5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PVYuYXZhaWxfb3V0JiYoVi5vdXRw''@;'; put 'put ''dXQ9bmV3IE4uQnVmOChwKSxWLm5leHRfb3V0PTAsVi5hdmFpbF9vdXQ9cCksMSE9PShiPXouZGVmbGF0ZShWLHgpKSYmMCE9PWIpcmV0dXJuIHRoaXMub25FbmQoYiksdGhpcy5lbmRlZD0hMCwhMTsoMD09PVYuYXZhaWxfb3V0fHwwPT09Vi5hdmFpbF9pbiYmND09PXgpJiZ0aGlzLm9uRGF0''@;'; put 'put ''YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9MLmJ1ZjJiaW5zdHJpbmcoTi5zaHJpbmtCdWYoVi5vdXRwdXQsVi5uZXh0X291dCkpOk4uc2hyaW5rQnVmKFYub3V0cHV0LFYubmV4dF9vdXQpKX13aGlsZSgoVi5hdmFpbF9pbj4wfHwwPT09Vi5hdmFpbF9vdXQpJiYxIT09Yik7cmV0dXJu''@;'; put 'put ''IDQhPT14fHwoYj16LmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGIpLHRoaXMuZW5kZWQ9ITAsMD09PWIpfSxsZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKFNlKXt0aGlzLmNodW5rcy5wdXNoKFNlKX0sbGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKFNlKXswPT09U2Um''@;'; put 'put ''Jih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1TZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxPLkRlZmxhdGU9bGUsTy5kZWZsYXRl''@;'; put 'put ''PW1lLE8uZGVmbGF0ZVJhdz1mdW5jdGlvbiBfZShTZSxqZSl7cmV0dXJuKGplPWplfHx7fSkucmF3PSEwLG1lKFNlLGplKX0sTy5nemlwPWZ1bmN0aW9uIFRlKFNlLGplKXtyZXR1cm4oamU9amV8fHt9KS5nemlwPSEwLG1lKFNlLGplKX19LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxz''@;'; put 'put ''L3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vemxpYi9pbmZsYXRlLmpzIiksTj1QKCIuL3V0aWxzL2NvbW1vbiIpLEw9''@;'; put 'put ''UCgiLi91dGlscy9zdHJpbmdzIiksSz1QKCIuL3psaWIvY29uc3RhbnRzIiksVT1QKCIuL3psaWIvbWVzc2FnZXMiKSxXPVAoIi4vemxpYi96c3RyZWFtIiksWT1QKCIuL3psaWIvZ3poZWFkZXIiKSxxPWZ1bmN0aW9uKG5lKXt0aGlzLm9wdGlvbnM9Ti5hc3NpZ24oe2NodW5rU2l6ZToxNjM4''@;'; put 'put ''NCx3aW5kb3dCaXRzOjAsdG86IiJ9LG5lfHx7fSk7dmFyIGllPXRoaXMub3B0aW9ucztpZS5yYXcmJmllLndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJihpZS53aW5kb3dCaXRzPS1pZS53aW5kb3dCaXRzLDA9PT1pZS53aW5kb3dCaXRzJiYoaWUud2luZG93Qml0cz0tMTUpKSxp''@;'; put 'put ''ZS53aW5kb3dCaXRzPj0wJiZpZS53aW5kb3dCaXRzPDE2JiYhKG5lJiZuZS53aW5kb3dCaXRzKSYmKGllLndpbmRvd0JpdHMrPTMyKSxpZS53aW5kb3dCaXRzPjE1JiZpZS53aW5kb3dCaXRzPDQ4JiYoMTUmaWUud2luZG93Qml0c3x8KGllLndpbmRvd0JpdHN8PTE1KSksdGhpcy5lcnI9MCx0''@;'; put 'put ''aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgVyx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIGxlPXouaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxpZS53aW5kb3dCaXRzKTtpZihsZSE9PUsuWl9PSyl0aHJvdyBuZXcgRXJyb3IoVVtsZV0pO3Ro''@;'; put 'put ''aXMuaGVhZGVyPW5ldyBZLHouaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfTtmdW5jdGlvbiBlZShuZSxpZSl7dmFyIGxlPW5ldyBxKGllKTtpZihsZS5wdXNoKG5lLCEwKSxsZS5lcnIpdGhyb3cgbGUubXNnO3JldHVybiBsZS5yZXN1bHR9cS5wcm90b3R5cGUucHVz''@;'; put 'put ''aD1mdW5jdGlvbihuZSxpZSl7dmFyIF9lLFRlLFNlLGplLFYsbGU9dGhpcy5zdHJtLG1lPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtUZT1pZT09PX5+aWU/aWU6ITA9PT1pZT9LLlpfRklOSVNIOksuWl9OT19GTFVTSCxsZS5pbnB1dD0ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIG5lP0wuYmluc3RyaW5nMmJ1ZihuZSk6bmUsbGUubmV4dF9pbj0wLGxlLmF2YWlsX2luPWxlLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09bGUuYXZhaWxfb3V0JiYobGUub3V0cHV0PW5ldyBOLkJ1ZjgobWUpLGxlLm5leHRfb3V0PTAsbGUuYXZhaWxfb3V0PW1lKSwoX2U9ei5pbmZs''@;'; put 'put ''YXRlKGxlLEsuWl9OT19GTFVTSCkpIT09Sy5aX1NUUkVBTV9FTkQmJl9lIT09Sy5aX09LKXJldHVybiB0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLCExO2xlLm5leHRfb3V0JiYoMD09PWxlLmF2YWlsX291dHx8X2U9PT1LLlpfU1RSRUFNX0VORHx8MD09PWxlLmF2YWlsX2luJiZUZT09''@;'; put 'put ''PUsuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KFNlPUwudXRmOGJvcmRlcihsZS5vdXRwdXQsbGUubmV4dF9vdXQpLGplPWxlLm5leHRfb3V0LVNlLFY9TC5idWYyc3RyaW5nKGxlLm91dHB1dCxTZSksbGUubmV4dF9vdXQ9amUsbGUuYXZhaWxfb3V0PW1lLWplLGpl''@;'; put 'put ''JiZOLmFycmF5U2V0KGxlLm91dHB1dCxsZS5vdXRwdXQsU2UsamUsMCksdGhpcy5vbkRhdGEoVikpOnRoaXMub25EYXRhKE4uc2hyaW5rQnVmKGxlLm91dHB1dCxsZS5uZXh0X291dCkpKX13aGlsZShsZS5hdmFpbF9pbj4wJiZfZSE9PUsuWl9TVFJFQU1fRU5EKTtyZXR1cm4gX2U9PT1LLlpf''@;'; put 'put ''U1RSRUFNX0VORCYmKFRlPUsuWl9GSU5JU0gpLFRlIT09Sy5aX0ZJTklTSHx8KF9lPXouaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsX2U9PT1LLlpfT0spfSxxLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24obmUpe3RoaXMuY2h1bmtzLnB1c2go''@;'; put 'put ''bmUpfSxxLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihuZSl7bmU9PT1LLlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1u''@;'; put 'put ''ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxPLkluZmxhdGU9cSxPLmluZmxhdGU9ZWUsTy5pbmZsYXRlUmF3PWZ1bmN0aW9uIEoobmUsaWUpe3JldHVybihpZT1pZXx8e30pLnJhdz0hMCxlZShuZSxpZSl9LE8udW5nemlwPWVlfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJp''@;'; put 'put ''bmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVp''@;'; put 'put ''bnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7Ty5hc3NpZ249ZnVuY3Rpb24oSyl7Zm9yKHZhciBVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtVLmxlbmd0aDspe3ZhciBXPVUuc2hpZnQoKTtpZihXKXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIFcpdGhyb3cgbmV3IFR5cGVFcnJvcihXKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFkgaW4gVylXLmhhc093blByb3BlcnR5KFkpJiYoS1tZXT1XW1ldKX19cmV0dXJuIEt9LE8uc2hyaW5rQnVmPWZ1bmN0aW9uKEssVSl7cmV0dXJuIEsubGVuZ3Ro''@;'; put 'put ''PT09VT9LOksuc3ViYXJyYXk/Sy5zdWJhcnJheSgwLFUpOihLLmxlbmd0aD1VLEspfTt2YXIgTj17YXJyYXlTZXQ6ZnVuY3Rpb24oSyxVLFcsWSxxKXtpZihVLnN1YmFycmF5JiZLLnN1YmFycmF5KUsuc2V0KFUuc3ViYXJyYXkoVyxXK1kpLHEpO2Vsc2UgZm9yKHZhciBlZT0wO2VlPFk7ZWUr''@;'; put 'put ''KylLW3ErZWVdPVVbVytlZV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oSyl7dmFyIFUsVyxZLHEsZWUsSjtmb3IoWT0wLFU9MCxXPUsubGVuZ3RoO1U8VztVKyspWSs9S1tVXS5sZW5ndGg7Zm9yKEo9bmV3IFVpbnQ4QXJyYXkoWSkscT0wLFU9MCxXPUsubGVuZ3RoO1U8VztVKyspSi5zZXQo''@;'; put 'put ''ZWU9S1tVXSxxKSxxKz1lZS5sZW5ndGg7cmV0dXJuIEp9fSxMPXthcnJheVNldDpmdW5jdGlvbihLLFUsVyxZLHEpe2Zvcih2YXIgZWU9MDtlZTxZO2VlKyspS1txK2VlXT1VW1crZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxLKX19O08u''@;'; put 'put ''c2V0VHlwZWQ9ZnVuY3Rpb24oSyl7Sz8oTy5CdWY4PVVpbnQ4QXJyYXksTy5CdWYxNj1VaW50MTZBcnJheSxPLkJ1ZjMyPUludDMyQXJyYXksTy5hc3NpZ24oTyxOKSk6KE8uQnVmOD1BcnJheSxPLkJ1ZjE2PUFycmF5LE8uQnVmMzI9QXJyYXksTy5hc3NpZ24oTyxMKSl9LE8uc2V0VHlwZWQo''@;'; put 'put ''eil9LHt9XSwyODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2NvbW1vbiIpLE49ITAsTD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7Tj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50''@;'; put 'put ''OEFycmF5KDEpKX1jYXRjaHtMPSExfWZvcih2YXIgSz1uZXcgei5CdWY4KDI1NiksVT0wO1U8MjU2O1UrKylLW1VdPVU+PTI1Mj82OlU+PTI0OD81OlU+PTI0MD80OlU+PTIyND8zOlU+PTE5Mj8yOjE7ZnVuY3Rpb24gVyhZLHEpe2lmKHE8NjU1MzcmJihZLnN1YmFycmF5JiZMfHwhWS5zdWJh''@;'; put 'put ''cnJheSYmTikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx6LnNocmlua0J1ZihZLHEpKTtmb3IodmFyIGVlPSIiLEo9MDtKPHE7SisrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFlbSl0pO3JldHVybiBlZX1LWzI1NF09S1syNTRdPTEsTy5zdHJpbmcyYnVmPWZ1bmN0''@;'; put 'put ''aW9uKFkpe3ZhciBxLGVlLEosbmUsaWUsbGU9WS5sZW5ndGgsbWU9MDtmb3IobmU9MDtuZTxsZTtuZSsrKTU1Mjk2PT0oNjQ1MTImKGVlPVkuY2hhckNvZGVBdChuZSkpKSYmbmUrMTxsZSYmNTYzMjA9PSg2NDUxMiYoSj1ZLmNoYXJDb2RlQXQobmUrMSkpKSYmKGVlPTY1NTM2KyhlZS01NTI5''@;'; put 'put ''Njw8MTApKyhKLTU2MzIwKSxuZSsrKSxtZSs9ZWU8MTI4PzE6ZWU8MjA0OD8yOmVlPDY1NTM2PzM6NDtmb3IocT1uZXcgei5CdWY4KG1lKSxpZT0wLG5lPTA7aWU8bWU7bmUrKyk1NTI5Nj09KDY0NTEyJihlZT1ZLmNoYXJDb2RlQXQobmUpKSkmJm5lKzE8bGUmJjU2MzIwPT0oNjQ1MTImKEo9''@;'; put 'put ''WS5jaGFyQ29kZUF0KG5lKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCksbmUrKyksZWU8MTI4P3FbaWUrK109ZWU6ZWU8MjA0OD8ocVtpZSsrXT0xOTJ8ZWU+Pj42LHFbaWUrK109MTI4fDYzJmVlKTplZTw2NTUzNj8ocVtpZSsrXT0yMjR8ZWU+Pj4xMixxW2llKytd''@;'; put 'put ''PTEyOHxlZT4+PjYmNjMscVtpZSsrXT0xMjh8NjMmZWUpOihxW2llKytdPTI0MHxlZT4+PjE4LHFbaWUrK109MTI4fGVlPj4+MTImNjMscVtpZSsrXT0xMjh8ZWU+Pj42JjYzLHFbaWUrK109MTI4fDYzJmVlKTtyZXR1cm4gcX0sTy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFkpe3JldHVybiBX''@;'; put 'put ''KFksWS5sZW5ndGgpfSxPLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oWSl7Zm9yKHZhciBxPW5ldyB6LkJ1ZjgoWS5sZW5ndGgpLGVlPTAsSj1xLmxlbmd0aDtlZTxKO2VlKyspcVtlZV09WS5jaGFyQ29kZUF0KGVlKTtyZXR1cm4gcX0sTy5idWYyc3RyaW5nPWZ1bmN0aW9uKFkscSl7dmFyIGVl''@;'; put 'put ''LEosbmUsaWUsbGU9cXx8WS5sZW5ndGgsbWU9bmV3IEFycmF5KDIqbGUpO2ZvcihKPTAsZWU9MDtlZTxsZTspaWYoKG5lPVlbZWUrK10pPDEyOCltZVtKKytdPW5lO2Vsc2UgaWYoKGllPUtbbmVdKT40KW1lW0orK109NjU1MzMsZWUrPWllLTE7ZWxzZXtmb3IobmUmPTI9PT1pZT8zMTozPT09''@;'; put 'put ''aWU/MTU6NztpZT4xJiZlZTxsZTspbmU9bmU8PDZ8NjMmWVtlZSsrXSxpZS0tO2llPjE/bWVbSisrXT02NTUzMzpuZTw2NTUzNj9tZVtKKytdPW5lOihtZVtKKytdPTU1Mjk2fChuZS09NjU1MzYpPj4xMCYxMDIzLG1lW0orK109NTYzMjB8MTAyMyZuZSl9cmV0dXJuIFcobWUsSil9LE8udXRm''@;'; put 'put ''OGJvcmRlcj1mdW5jdGlvbihZLHEpe3ZhciBlZTtmb3IoKHE9cXx8WS5sZW5ndGgpPlkubGVuZ3RoJiYocT1ZLmxlbmd0aCksZWU9cS0xO2VlPj0wJiYxMjg9PSgxOTImWVtlZV0pOyllZS0tO3JldHVybiBlZTwwfHwwPT09ZWU/cTplZStLW1lbZWVdXT5xP2VlOnF9fSx7Ii4vY29tbW9uIjoy''@;'; put 'put ''N31dLDI5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KE4sTCxLLFUpe2Zvcih2YXIgVz02NTUzNSZOLFk9Tj4+PjE2JjY1NTM1LHE9MDswIT09Szspe0stPXE9Sz4yZTM/MmUzOks7ZG97WT1ZKyhXPVcrTFtVKytdfDApfDB9d2hpbGUoLS1xKTtX''@;'; put 'put ''JT02NTUyMSxZJT02NTUyMX1yZXR1cm4gV3xZPDwxNn19LHt9XSwzMDpbZnVuY3Rpb24oUCxGLE8pe0YuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09L''@;'; put 'put ''OjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNT''@;'; put 'put ''SU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciBO''@;'; put 'put ''PWZ1bmN0aW9uIHooKXtmb3IodmFyIEssVT1bXSxXPTA7VzwyNTY7VysrKXtLPVc7Zm9yKHZhciBZPTA7WTw4O1krKylLPTEmSz8zOTg4MjkyMzg0Xks+Pj4xOks+Pj4xO1VbV109S31yZXR1cm4gVX0oKTtGLmV4cG9ydHM9ZnVuY3Rpb24gTChLLFUsVyxZKXt2YXIgcT1OLGVlPVkrVztLPX5L''@;'; put 'put ''O2Zvcih2YXIgSj1ZO0o8ZWU7SisrKUs9Sz4+PjhecVsyNTUmKEteVVtKXSldO3JldHVybn5LfX0se31dLDMyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi90cmVlcyIpLEw9UCgiLi9hZGxlcjMyIiksSz1QKCIuL2NyYzMy''@;'; put 'put ''IiksVT1QKCIuL21lc3NhZ2VzIiksVz0wLG5lPTAsbGU9LTIseD0yLEM9OCxBPTI4NixhZT0zMCx0ZT0xOSxzZT0yKkErMSx3ZT0xNSxVZT0zLEplPTI1OCxvdD1KZStVZSsxLHZlPTQyLE9lPTExMztmdW5jdGlvbiBRZShXZSxUdCl7cmV0dXJuIFdlLm1zZz1VW1R0XSxUdH1mdW5jdGlvbiB1''@;'; put 'put ''bihXZSl7cmV0dXJuKFdlPDwxKS0oV2U+ND85OjApfWZ1bmN0aW9uIHl0KFdlKXtmb3IodmFyIFR0PVdlLmxlbmd0aDstLVR0Pj0wOylXZVtUdF09MH1mdW5jdGlvbiBNdChXZSl7dmFyIFR0PVdlLnN0YXRlLG5yPVR0LnBlbmRpbmc7bnI+V2UuYXZhaWxfb3V0JiYobnI9V2UuYXZhaWxfb3V0''@;'; put 'put ''KSwwIT09bnImJih6LmFycmF5U2V0KFdlLm91dHB1dCxUdC5wZW5kaW5nX2J1ZixUdC5wZW5kaW5nX291dCxucixXZS5uZXh0X291dCksV2UubmV4dF9vdXQrPW5yLFR0LnBlbmRpbmdfb3V0Kz1ucixXZS50b3RhbF9vdXQrPW5yLFdlLmF2YWlsX291dC09bnIsVHQucGVuZGluZy09bnIsMD09''@;'; put 'put ''PVR0LnBlbmRpbmcmJihUdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gRHQoV2UsVHQpe04uX3RyX2ZsdXNoX2Jsb2NrKFdlLFdlLmJsb2NrX3N0YXJ0Pj0wP1dlLmJsb2NrX3N0YXJ0Oi0xLFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0LFR0KSxXZS5ibG9ja19zdGFydD1XZS5zdHJzdGFy''@;'; put 'put ''dCxNdChXZS5zdHJtKX1mdW5jdGlvbiBpdChXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1UdH1mdW5jdGlvbiAkZShXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1UdD4+PjgmMjU1LFdlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109MjU1JlR0fWZ1bmN0''@;'; put 'put ''aW9uIHR0KFdlLFR0LG5yLGh0KXt2YXIgeHQ9V2UuYXZhaWxfaW47cmV0dXJuIHh0Pmh0JiYoeHQ9aHQpLDA9PT14dD8wOihXZS5hdmFpbF9pbi09eHQsei5hcnJheVNldChUdCxXZS5pbnB1dCxXZS5uZXh0X2luLHh0LG5yKSwxPT09V2Uuc3RhdGUud3JhcD9XZS5hZGxlcj1MKFdlLmFkbGVy''@;'; put 'put ''LFR0LHh0LG5yKToyPT09V2Uuc3RhdGUud3JhcCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsVHQseHQsbnIpKSxXZS5uZXh0X2luKz14dCxXZS50b3RhbF9pbis9eHQseHQpfWZ1bmN0aW9uIEhlKFdlLFR0KXt2YXIgeHQsam4sbnI9V2UubWF4X2NoYWluX2xlbmd0aCxodD1XZS5zdHJzdGFydCxy''@;'; put 'put ''bj1XZS5wcmV2X2xlbmd0aCx6dD1XZS5uaWNlX21hdGNoLGhpPVdlLnN0cnN0YXJ0PldlLndfc2l6ZS1vdD9XZS5zdHJzdGFydC0oV2Uud19zaXplLW90KTowLGNuPVdlLndpbmRvdyxmbj1XZS53X21hc2ssSWk9V2UucHJldixYdD1XZS5zdHJzdGFydCtKZSxlbj1jbltodCtybi0xXSx1YT1j''@;'; put 'put ''bltodCtybl07V2UucHJldl9sZW5ndGg+PVdlLmdvb2RfbWF0Y2gmJihucj4+PTIpLHp0PldlLmxvb2thaGVhZCYmKHp0PVdlLmxvb2thaGVhZCk7ZG97aWYoY25bKHh0PVR0KStybl09PT11YSYmY25beHQrcm4tMV09PT1lbiYmY25beHRdPT09Y25baHRdJiZjblsrK3h0XT09PWNuW2h0KzFd''@;'; put 'put ''KXtodCs9Mix4dCsrO2Rve313aGlsZShjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysr''@;'; put 'put ''eHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZodDxYdCk7aWYoam49SmUtKFh0LWh0KSxodD1YdC1KZSxqbj5ybil7aWYoV2UubWF0Y2hfc3RhcnQ9VHQscm49am4sam4+PXp0KWJyZWFrO2VuPWNuW2h0K3JuLTFdLHVhPWNuW2h0K3JuXX19fXdoaWxlKChUdD1JaVtUdCZmbl0pPmhpJiYwIT0t''@;'; put 'put ''LW5yKTtyZXR1cm4gcm48PVdlLmxvb2thaGVhZD9ybjpXZS5sb29rYWhlYWR9ZnVuY3Rpb24gdXQoV2Upe3ZhciBucixodCx4dCxqbixybixUdD1XZS53X3NpemU7ZG97aWYoam49V2Uud2luZG93X3NpemUtV2UubG9va2FoZWFkLVdlLnN0cnN0YXJ0LFdlLnN0cnN0YXJ0Pj1UdCsoVHQtb3Qp''@;'; put 'put ''KXt6LmFycmF5U2V0KFdlLndpbmRvdyxXZS53aW5kb3csVHQsVHQsMCksV2UubWF0Y2hfc3RhcnQtPVR0LFdlLnN0cnN0YXJ0LT1UdCxXZS5ibG9ja19zdGFydC09VHQsbnI9aHQ9V2UuaGFzaF9zaXplO2Rve3h0PVdlLmhlYWRbLS1ucl0sV2UuaGVhZFtucl09eHQ+PVR0P3h0LVR0OjB9d2hp''@;'; put 'put ''bGUoLS1odCk7bnI9aHQ9VHQ7ZG97eHQ9V2UucHJldlstLW5yXSxXZS5wcmV2W25yXT14dD49VHQ/eHQtVHQ6MH13aGlsZSgtLWh0KTtqbis9VHR9aWYoMD09PVdlLnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoaHQ9dHQoV2Uuc3RybSxXZS53aW5kb3csV2Uuc3Ryc3RhcnQrV2UubG9va2FoZWFk''@;'; put 'put ''LGpuKSxXZS5sb29rYWhlYWQrPWh0LFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ+PVVlKWZvcihXZS5pbnNfaD1XZS53aW5kb3dbcm49V2Uuc3Ryc3RhcnQtV2UuaW5zZXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W3JuKzFdKSZXZS5oYXNoX21hc2s7V2Uu''@;'; put 'put ''aW5zZXJ0JiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tybitVZS0xXSkmV2UuaGFzaF9tYXNrLFdlLnByZXZbcm4mV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1ybixybisrLFdlLmluc2VydC0tLCEoV2UubG9va2Fo''@;'; put 'put ''ZWFkK1dlLmluc2VydDxVZSkpOyk7fXdoaWxlKFdlLmxvb2thaGVhZDxvdCYmMCE9PVdlLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFJ0KFdlLFR0KXtmb3IodmFyIG5yLGh0Ozspe2lmKFdlLmxvb2thaGVhZDxvdCl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDxvdCYmVHQ9PT1XKXJldHVybiAx''@;'; put 'put ''O2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9aWYobnI9MCxXZS5sb29rYWhlYWQ+PVVlJiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1X''@;'; put 'put ''ZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydCksMCE9PW5yJiZXZS5zdHJzdGFydC1ucjw9V2Uud19zaXplLW90JiYoV2UubWF0Y2hfbGVuZ3RoPUhlKFdlLG5yKSksV2UubWF0Y2hfbGVuZ3RoPj1VZSlpZihodD1OLl90cl90YWxseShXZSxXZS5zdHJzdGFy''@;'; put 'put ''dC1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aDw9V2UubWF4X2xhenlfbWF0Y2gmJldlLmxvb2thaGVhZD49VWUpe1dlLm1hdGNoX2xlbmd0aC0tO2Rve1dlLnN0cnN0YXJ0KyssV2UuaW5zX2g9''@;'; put 'put ''KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydH13aGlsZSgwIT0tLVdlLm1h''@;'; put 'put ''dGNoX2xlbmd0aCk7V2Uuc3Ryc3RhcnQrK31lbHNlIFdlLnN0cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTAsV2UuaW5zX2g9V2Uud2luZG93W1dlLnN0cnN0YXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0''@;'; put 'put ''KzFdKSZXZS5oYXNoX21hc2s7ZWxzZSBodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0Kys7aWYoaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PVdl''@;'; put 'put ''LnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBQdChXZSxUdCl7Zm9yKHZhciBucixodCx4dDs7''@;'; put 'put ''KXtpZihXZS5sb29rYWhlYWQ8b3Qpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8b3QmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKG5yPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uu''@;'; put 'put ''c3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLFdlLnByZXZfbGVuZ3RoPVdlLm1hdGNoX2xlbmd0aCxXZS5wcmV2X21hdGNoPVdlLm1hdGNo''@;'; put 'put ''X3N0YXJ0LFdlLm1hdGNoX2xlbmd0aD1VZS0xLDAhPT1uciYmV2UucHJldl9sZW5ndGg8V2UubWF4X2xhenlfbWF0Y2gmJldlLnN0cnN0YXJ0LW5yPD1XZS53X3NpemUtb3QmJihXZS5tYXRjaF9sZW5ndGg9SGUoV2UsbnIpLFdlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1XZS5zdHJhdGVneXx8''@;'; put 'put ''V2UubWF0Y2hfbGVuZ3RoPT09VWUmJldlLnN0cnN0YXJ0LVdlLm1hdGNoX3N0YXJ0PjQwOTYpJiYoV2UubWF0Y2hfbGVuZ3RoPVVlLTEpKSxXZS5wcmV2X2xlbmd0aD49VWUmJldlLm1hdGNoX2xlbmd0aDw9V2UucHJldl9sZW5ndGgpe3h0PVdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZC1VZSxo''@;'; put 'put ''dD1OLl90cl90YWxseShXZSxXZS5zdHJzdGFydC0xLVdlLnByZXZfbWF0Y2gsV2UucHJldl9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UucHJldl9sZW5ndGgtMSxXZS5wcmV2X2xlbmd0aC09Mjtkb3srK1dlLnN0cnN0YXJ0PD14dCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9z''@;'; put 'put ''aGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tV2UucHJldl9sZW5ndGgpO2lmKFdlLm1h''@;'; put 'put ''dGNoX2F2YWlsYWJsZT0wLFdlLm1hdGNoX2xlbmd0aD1VZS0xLFdlLnN0cnN0YXJ0KyssaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKFdlLm1hdGNoX2F2YWlsYWJsZSl7aWYoKGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0''@;'; put 'put ''cnN0YXJ0LTFdKSkmJkR0KFdlLCExKSxXZS5zdHJzdGFydCsrLFdlLmxvb2thaGVhZC0tLDA9PT1XZS5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIFdlLm1hdGNoX2F2YWlsYWJsZT0xLFdlLnN0cnN0YXJ0KyssV2UubG9va2FoZWFkLS19cmV0dXJuIFdlLm1hdGNoX2F2YWlsYWJsZSYm''@;'; put 'put ''KGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0LTFdKSxXZS5tYXRjaF9hdmFpbGFibGU9MCksV2UuaW5zZXJ0PVdlLnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0''@;'; put 'put ''X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgUmksc249ZnVuY3Rpb24oV2UsVHQsbnIsaHQseHQpe3RoaXMuZ29vZF9sZW5ndGg9V2UsdGhpcy5tYXhfbGF6eT1UdCx0aGlzLm5pY2VfbGVuZ3RoPW5yLHRoaXMubWF4X2NoYWluPWh0LHRoaXMuZnVuYz14''@;'; put 'put ''dH07ZnVuY3Rpb24gZnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5k''@;'; put 'put ''ZXg9MCx0aGlzLm1ldGhvZD1DLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5o''@;'; put 'put ''YXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5t''@;'; put 'put ''YXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMu''@;'; put 'put ''ZHluX2x0cmVlPW5ldyB6LkJ1ZjE2KDIqc2UpLHRoaXMuZHluX2R0cmVlPW5ldyB6LkJ1ZjE2KDIqKDIqYWUrMSkpLHRoaXMuYmxfdHJlZT1uZXcgei5CdWYxNigyKigyKnRlKzEpKSx5dCh0aGlzLmR5bl9sdHJlZSkseXQodGhpcy5keW5fZHRyZWUpLHl0KHRoaXMuYmxfdHJlZSksdGhpcy5s''@;'; put 'put ''X2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IHouQnVmMTYod2UrMSksdGhpcy5oZWFwPW5ldyB6LkJ1ZjE2KDIqQSsxKSx5dCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1u''@;'; put 'put ''ZXcgei5CdWYxNigyKkErMSkseXQodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9i''@;'; put 'put ''dWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gT3IoV2Upe3ZhciBUdDtyZXR1cm4gV2UmJldlLnN0YXRlPyhXZS50b3RhbF9pbj1XZS50b3RhbF9vdXQ9MCxXZS5kYXRhX3R5cGU9eCwoVHQ9V2Uuc3RhdGUpLnBlbmRpbmc9MCxUdC5wZW5kaW5nX291dD0wLFR0LndyYXA8MCYmKFR0Lndy''@;'; put 'put ''YXA9LVR0LndyYXApLFR0LnN0YXR1cz1UdC53cmFwP3ZlOk9lLFdlLmFkbGVyPTI9PT1UdC53cmFwPzA6MSxUdC5sYXN0X2ZsdXNoPVcsTi5fdHJfaW5pdChUdCksbmUpOlFlKFdlLGxlKX1mdW5jdGlvbiBXdChXZSl7dmFyIFR0PU9yKFdlKTtyZXR1cm4gVHQ9PT1uZSYmZnVuY3Rpb24gaG4o''@;'; put 'put ''V2Upe1dlLndpbmRvd19zaXplPTIqV2Uud19zaXplLHl0KFdlLmhlYWQpLFdlLm1heF9sYXp5X21hdGNoPVJpW1dlLmxldmVsXS5tYXhfbGF6eSxXZS5nb29kX21hdGNoPVJpW1dlLmxldmVsXS5nb29kX2xlbmd0aCxXZS5uaWNlX21hdGNoPVJpW1dlLmxldmVsXS5uaWNlX2xlbmd0aCxXZS5t''@;'; put 'put ''YXhfY2hhaW5fbGVuZ3RoPVJpW1dlLmxldmVsXS5tYXhfY2hhaW4sV2Uuc3Ryc3RhcnQ9MCxXZS5ibG9ja19zdGFydD0wLFdlLmxvb2thaGVhZD0wLFdlLmluc2VydD0wLFdlLm1hdGNoX2xlbmd0aD1XZS5wcmV2X2xlbmd0aD1VZS0xLFdlLm1hdGNoX2F2YWlsYWJsZT0wLFdlLmluc19oPTB9''@;'; put 'put ''KFdlLnN0YXRlKSxUdH1mdW5jdGlvbiBSbihXZSxUdCxucixodCx4dCxqbil7aWYoIVdlKXJldHVybiBsZTt2YXIgcm49MTtpZigtMT09PVR0JiYoVHQ9NiksaHQ8MD8ocm49MCxodD0taHQpOmh0PjE1JiYocm49MixodC09MTYpLHh0PDF8fHh0Pjl8fG5yIT09Q3x8aHQ8OHx8aHQ+MTV8fFR0''@;'; put 'put ''PDB8fFR0Pjl8fGpuPDB8fGpuPjQpcmV0dXJuIFFlKFdlLGxlKTs4PT09aHQmJihodD05KTt2YXIgenQ9bmV3IGZ0O3JldHVybiBXZS5zdGF0ZT16dCx6dC5zdHJtPVdlLHp0LndyYXA9cm4senQuZ3poZWFkPW51bGwsenQud19iaXRzPWh0LHp0Lndfc2l6ZT0xPDx6dC53X2JpdHMsenQud19t''@;'; put 'put ''YXNrPXp0Lndfc2l6ZS0xLHp0Lmhhc2hfYml0cz14dCs3LHp0Lmhhc2hfc2l6ZT0xPDx6dC5oYXNoX2JpdHMsenQuaGFzaF9tYXNrPXp0Lmhhc2hfc2l6ZS0xLHp0Lmhhc2hfc2hpZnQ9fn4oKHp0Lmhhc2hfYml0cytVZS0xKS9VZSksenQud2luZG93PW5ldyB6LkJ1ZjgoMip6dC53X3NpemUp''@;'; put 'put ''LHp0LmhlYWQ9bmV3IHouQnVmMTYoenQuaGFzaF9zaXplKSx6dC5wcmV2PW5ldyB6LkJ1ZjE2KHp0Lndfc2l6ZSksenQubGl0X2J1ZnNpemU9MTw8eHQrNix6dC5wZW5kaW5nX2J1Zl9zaXplPTQqenQubGl0X2J1ZnNpemUsenQucGVuZGluZ19idWY9bmV3IHouQnVmOCh6dC5wZW5kaW5nX2J1''@;'; put 'put ''Zl9zaXplKSx6dC5kX2J1Zj16dC5saXRfYnVmc2l6ZT4+MSx6dC5sX2J1Zj0zKnp0LmxpdF9idWZzaXplLHp0LmxldmVsPVR0LHp0LnN0cmF0ZWd5PWpuLHp0Lm1ldGhvZD1ucixXdChXZSl9Umk9W25ldyBzbigwLDAsMCwwLGZ1bmN0aW9uIHF0KFdlLFR0KXt2YXIgbnI9NjU1MzU7Zm9yKG5y''@;'; put 'put ''PldlLnBlbmRpbmdfYnVmX3NpemUtNSYmKG5yPVdlLnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYoV2UubG9va2FoZWFkPD0xKXtpZih1dChXZSksMD09PVdlLmxvb2thaGVhZCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9V2Uuc3Ryc3RhcnQrPVdlLmxvb2th''@;'; put 'put ''aGVhZCxXZS5sb29rYWhlYWQ9MDt2YXIgaHQ9V2UuYmxvY2tfc3RhcnQrbnI7aWYoKDA9PT1XZS5zdHJzdGFydHx8V2Uuc3Ryc3RhcnQ+PWh0KSYmKFdlLmxvb2thaGVhZD1XZS5zdHJzdGFydC1odCxXZS5zdHJzdGFydD1odCxEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KXx8V2Uu''@;'; put 'put ''c3Ryc3RhcnQtV2UuYmxvY2tfc3RhcnQ+PVdlLndfc2l6ZS1vdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTooV2Uuc3Ryc3RhcnQ+V2UuYmxv''@;'; put 'put ''Y2tfc3RhcnQmJkR0KFdlLCExKSwxKX0pLG5ldyBzbig0LDQsOCw0LFJ0KSxuZXcgc24oNCw1LDE2LDgsUnQpLG5ldyBzbig0LDYsMzIsMzIsUnQpLG5ldyBzbig0LDQsMTYsMTYsUHQpLG5ldyBzbig4LDE2LDMyLDMyLFB0KSxuZXcgc24oOCwxNiwxMjgsMTI4LFB0KSxuZXcgc24oOCwzMiwx''@;'; put 'put ''MjgsMjU2LFB0KSxuZXcgc24oMzIsMTI4LDI1OCwxMDI0LFB0KSxuZXcgc24oMzIsMjU4LDI1OCw0MDk2LFB0KV0sTy5kZWZsYXRlSW5pdD1mdW5jdGlvbiBzdChXZSxUdCl7cmV0dXJuIFJuKFdlLFR0LEMsMTUsOCwwKX0sTy5kZWZsYXRlSW5pdDI9Um4sTy5kZWZsYXRlUmVzZXQ9V3QsTy5k''@;'; put 'put ''ZWZsYXRlUmVzZXRLZWVwPU9yLE8uZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiBBdChXZSxUdCl7cmV0dXJuIFdlJiZXZS5zdGF0ZSYmMj09PVdlLnN0YXRlLndyYXA/KFdlLnN0YXRlLmd6aGVhZD1UdCxuZSk6bGV9LE8uZGVmbGF0ZT1mdW5jdGlvbiBVdChXZSxUdCl7dmFyIG5yLGh0LHh0''@;'; put 'put ''LGpuO2lmKCFXZXx8IVdlLnN0YXRlfHxUdD41fHxUdDwwKXJldHVybiBXZT9RZShXZSxsZSk6bGU7aWYoaHQ9V2Uuc3RhdGUsIVdlLm91dHB1dHx8IVdlLmlucHV0JiYwIT09V2UuYXZhaWxfaW58fDY2Nj09PWh0LnN0YXR1cyYmNCE9PVR0KXJldHVybiBRZShXZSwwPT09V2UuYXZhaWxfb3V0''@;'; put 'put ''Py01OmxlKTtpZihodC5zdHJtPVdlLG5yPWh0Lmxhc3RfZmx1c2gsaHQubGFzdF9mbHVzaD1UdCxodC5zdGF0dXM9PT12ZSlpZigyPT09aHQud3JhcClXZS5hZGxlcj0wLGl0KGh0LDMxKSxpdChodCwxMzkpLGl0KGh0LDgpLGh0Lmd6aGVhZD8oaXQoaHQsKGh0Lmd6aGVhZC50ZXh0PzE6MCkr''@;'; put 'put ''KGh0Lmd6aGVhZC5oY3JjPzI6MCkrKGh0Lmd6aGVhZC5leHRyYT80OjApKyhodC5nemhlYWQubmFtZT84OjApKyhodC5nemhlYWQuY29tbWVudD8xNjowKSksaXQoaHQsMjU1Jmh0Lmd6aGVhZC50aW1lKSxpdChodCxodC5nemhlYWQudGltZT4+OCYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1l''@;'; put 'put ''Pj4xNiYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj4yNCYyNTUpLGl0KGh0LDk9PT1odC5sZXZlbD8yOmh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzQ6MCksaXQoaHQsMjU1Jmh0Lmd6aGVhZC5vcyksaHQuZ3poZWFkLmV4dHJhJiZodC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaXQoaHQs''@;'; put 'put ''MjU1Jmh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpLGl0KGh0LGh0Lmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaHQuZ3poZWFkLmhjcmMmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcsMCkpLGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9NjkpOihpdCho''@;'; put 'put ''dCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDMpLGh0LnN0YXR1cz1PZSk7ZWxzZXt2YXIgcm49QysoaHQud19iaXRzLTg8PDQpPDw4O3JufD0oaHQuc3RyYXRl''@;'; put 'put ''Z3k+PTJ8fGh0LmxldmVsPDI/MDpodC5sZXZlbDw2PzE6Nj09PWh0LmxldmVsPzI6Myk8PDYsMCE9PWh0LnN0cnN0YXJ0JiYocm58PTMyKSxybis9MzEtcm4lMzEsaHQuc3RhdHVzPU9lLCRlKGh0LHJuKSwwIT09aHQuc3Ryc3RhcnQmJigkZShodCxXZS5hZGxlcj4+PjE2KSwkZShodCw2NTUz''@;'; put 'put ''NSZXZS5hZGxlcikpLFdlLmFkbGVyPTF9aWYoNjk9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLmV4dHJhKXtmb3IoeHQ9aHQucGVuZGluZztodC5nemluZGV4PCg2NTUzNSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGh0LnBlbmRpbmchPT1odC5wZW5kaW5nX2J1Zl9zaXplfHwoaHQuZ3po''@;'; put 'put ''ZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZSkpOylpdChodCwyNTUmaHQuZ3poZWFkLmV4dHJhW2h0''@;'; put 'put ''Lmd6aW5kZXhdKSxodC5nemluZGV4Kys7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxodC5nemluZGV4PT09aHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGh0Lmd6aW5kZXg9MCxodC5z''@;'; put 'put ''dGF0dXM9NzMpfWVsc2UgaHQuc3RhdHVzPTczO2lmKDczPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5uYW1lKXt4dD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdl''@;'; put 'put ''LmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe2puPTE7YnJlYWt9am49aHQuZ3ppbmRleDxodC5nemhlYWQubmFtZS5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5uYW1lLmNo''@;'; put 'put ''YXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LGpuKX13aGlsZSgwIT09am4pO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksMD09PWpuJiYoaHQuZ3ppbmRleD0wLGh0LnN0YXR1''@;'; put 'put ''cz05MSl9ZWxzZSBodC5zdGF0dXM9OTE7aWYoOTE9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLmNvbW1lbnQpe3h0PWh0LnBlbmRpbmc7ZG97aWYoaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUmJihodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2Uu''@;'; put 'put ''YWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLE10KFdlKSx4dD1odC5wZW5kaW5nLGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplKSl7am49MTticmVha31qbj1odC5nemluZGV4PGh0Lmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmaHQuZ3poZWFkLmNvbW1l''@;'; put 'put ''bnQuY2hhckNvZGVBdChodC5nemluZGV4KyspOjAsaXQoaHQsam4pfXdoaWxlKDAhPT1qbik7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSwwPT09am4mJihodC5zdGF0dXM9MTAzKX1l''@;'; put 'put ''bHNlIGh0LnN0YXR1cz0xMDM7aWYoMTAzPT09aHQuc3RhdHVzJiYoaHQuZ3poZWFkLmhjcmM/KGh0LnBlbmRpbmcrMj5odC5wZW5kaW5nX2J1Zl9zaXplJiZNdChXZSksaHQucGVuZGluZysyPD1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxl''@;'; put 'put ''cj4+OCYyNTUpLFdlLmFkbGVyPTAsaHQuc3RhdHVzPU9lKSk6aHQuc3RhdHVzPU9lKSwwIT09aHQucGVuZGluZyl7aWYoTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEsbmV9ZWxzZSBpZigwPT09V2UuYXZhaWxfaW4mJnVuKFR0KTw9dW4obnIpJiY0IT09''@;'; put 'put ''VHQpcmV0dXJuIFFlKFdlLC01KTtpZig2NjY9PT1odC5zdGF0dXMmJjAhPT1XZS5hdmFpbF9pbilyZXR1cm4gUWUoV2UsLTUpO2lmKDAhPT1XZS5hdmFpbF9pbnx8MCE9PWh0Lmxvb2thaGVhZHx8VHQhPT1XJiY2NjYhPT1odC5zdGF0dXMpe3ZhciBoaT0yPT09aHQuc3RyYXRlZ3k/ZnVuY3Rp''@;'; put 'put ''b24gUXQoV2UsVHQpe2Zvcih2YXIgbnI7Oyl7aWYoMD09PVdlLmxvb2thaGVhZCYmKHV0KFdlKSwwPT09V2UubG9va2FoZWFkKSl7aWYoVHQ9PT1XKXJldHVybiAxO2JyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLG5yPU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0XSks''@;'; put 'put ''V2UubG9va2FoZWFkLS0sV2Uuc3Ryc3RhcnQrKyxuciYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSww''@;'; put 'put ''PT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaHQsVHQpOjM9PT1odC5zdHJhdGVneT9mdW5jdGlvbiBjaShXZSxUdCl7Zm9yKHZhciBucixodCx4dCxqbixybj1XZS53aW5kb3c7Oyl7aWYoV2UubG9va2FoZWFkPD1KZSl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDw9SmUmJlR0PT09VylyZXR1''@;'; put 'put ''cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLFdlLmxvb2thaGVhZD49VWUmJldlLnN0cnN0YXJ0PjAmJihodD1yblt4dD1XZS5zdHJzdGFydC0xXSk9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSl7am49V2Uuc3Ryc3Rh''@;'; put 'put ''cnQrSmU7ZG97fXdoaWxlKGh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJnh0PGpuKTtXZS5tYXRjaF9sZW5ndGg9SmUtKGpu''@;'; put 'put ''LXh0KSxXZS5tYXRjaF9sZW5ndGg+V2UubG9va2FoZWFkJiYoV2UubWF0Y2hfbGVuZ3RoPVdlLmxvb2thaGVhZCl9aWYoV2UubWF0Y2hfbGVuZ3RoPj1VZT8obnI9Ti5fdHJfdGFsbHkoV2UsMSxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLnN0''@;'; put 'put ''cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTApOihucj1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyspLG5yJiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9''@;'; put 'put ''cmV0dXJuIFdlLmluc2VydD0wLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQpOldlLmxhc3RfbGl0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfShodCxUdCk6UmlbaHQubGV2ZWxdLmZ1bmMoaHQsVHQpO2lmKCgzPT09aGl8fDQ9PT1o''@;'; put 'put ''aSkmJihodC5zdGF0dXM9NjY2KSwxPT09aGl8fDM9PT1oaSlyZXR1cm4gMD09PVdlLmF2YWlsX291dCYmKGh0Lmxhc3RfZmx1c2g9LTEpLG5lO2lmKDI9PT1oaSYmKDE9PT1UdD9OLl90cl9hbGlnbihodCk6NSE9PVR0JiYoTi5fdHJfc3RvcmVkX2Jsb2NrKGh0LDAsMCwhMSksMz09PVR0JiYo''@;'; put 'put ''eXQoaHQuaGVhZCksMD09PWh0Lmxvb2thaGVhZCYmKGh0LnN0cnN0YXJ0PTAsaHQuYmxvY2tfc3RhcnQ9MCxodC5pbnNlcnQ9MCkpKSxNdChXZSksMD09PVdlLmF2YWlsX291dCkpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEsbmV9cmV0dXJuIDQhPT1UdD9uZTpodC53cmFwPD0wPzE6KDI9PT1o''@;'; put 'put ''dC53cmFwPyhpdChodCwyNTUmV2UuYWRsZXIpLGl0KGh0LFdlLmFkbGVyPj44JjI1NSksaXQoaHQsV2UuYWRsZXI+PjE2JjI1NSksaXQoaHQsV2UuYWRsZXI+PjI0JjI1NSksaXQoaHQsMjU1JldlLnRvdGFsX2luKSxpdChodCxXZS50b3RhbF9pbj4+OCYyNTUpLGl0KGh0LFdlLnRvdGFsX2lu''@;'; put 'put ''Pj4xNiYyNTUpLGl0KGh0LFdlLnRvdGFsX2luPj4yNCYyNTUpKTooJGUoaHQsV2UuYWRsZXI+Pj4xNiksJGUoaHQsNjU1MzUmV2UuYWRsZXIpKSxNdChXZSksaHQud3JhcD4wJiYoaHQud3JhcD0taHQud3JhcCksMCE9PWh0LnBlbmRpbmc/bmU6MSl9LE8uZGVmbGF0ZUVuZD1mdW5jdGlvbiBy''@;'; put 'put ''aShXZSl7dmFyIFR0O3JldHVybiBXZSYmV2Uuc3RhdGU/KFR0PVdlLnN0YXRlLnN0YXR1cykhPT12ZSYmNjkhPT1UdCYmNzMhPT1UdCYmOTEhPT1UdCYmMTAzIT09VHQmJlR0IT09T2UmJjY2NiE9PVR0P1FlKFdlLGxlKTooV2Uuc3RhdGU9bnVsbCxUdD09PU9lP1FlKFdlLC0zKTpuZSk6bGV9''@;'; put 'put ''LE8uZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31d''@;'; put 'put ''LDM0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbihLLFUpe3ZhciBXLFkscSxlZSxKLG5lLGllLGxlLG1lLF9lLFRlLFNlLGplLFYscCxiLHgsQyxULEgsaixFLG0sQSxhZTtBPUsuaW5wdXQscT0oWT1LLm5leHRfaW4pKyhLLmF2YWlsX2luLTUpLGFl''@;'; put 'put ''PUsub3V0cHV0LEo9KGVlPUsubmV4dF9vdXQpLShVLUsuYXZhaWxfb3V0KSxuZT1lZSsoSy5hdmFpbF9vdXQtMjU3KSxpZT0oVz1LLnN0YXRlKS5kbWF4LGxlPVcud3NpemUsbWU9Vy53aGF2ZSxfZT1XLnduZXh0LFRlPVcud2luZG93LFNlPVcuaG9sZCxqZT1XLmJpdHMsVj1XLmxlbmNvZGUs''@;'; put 'put ''cD1XLmRpc3Rjb2RlLGI9KDE8PFcubGVuYml0cyktMSx4PSgxPDxXLmRpc3RiaXRzKS0xO2U6ZG97amU8MTUmJihTZSs9QVtZKytdPDxqZSxTZSs9QVtZKytdPDwoamUrPTgpLGplKz04KSxDPVZbU2UmYl07dDpmb3IoOzspe2lmKFNlPj4+PVQ9Qz4+PjI0LGplLT1ULDA9PShUPUM+Pj4xNiYy''@;'; put 'put ''NTUpKWFlW2VlKytdPTY1NTM1JkM7ZWxzZXtpZighKDE2JlQpKXtpZig2NCZUKXtpZigzMiZUKXtXLm1vZGU9MTI7YnJlYWsgZX1LLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixXLm1vZGU9MzA7YnJlYWsgZX1DPVZbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldO2NvbnRpbnVl''@;'; put 'put ''IHR9Zm9yKEg9NjU1MzUmQywoVCY9MTUpJiYoamU8VCYmKFNlKz1BW1krK108PGplLGplKz04KSxIKz1TZSYoMTw8VCktMSxTZT4+Pj1ULGplLT1UKSxqZTwxNSYmKFNlKz1BW1krK108PGplLFNlKz1BW1krK108PChqZSs9OCksamUrPTgpLEM9cFtTZSZ4XTs7KXtpZihTZT4+Pj1UPUM+Pj4y''@;'; put 'put ''NCxqZS09VCwxNiYoVD1DPj4+MTYmMjU1KSl7aWYoaj02NTUzNSZDLGplPChUJj0xNSkmJihTZSs9QVtZKytdPDxqZSwoamUrPTgpPFQmJihTZSs9QVtZKytdPDxqZSxqZSs9OCkpLChqKz1TZSYoMTw8VCktMSk+aWUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5t''@;'; put 'put ''b2RlPTMwO2JyZWFrIGV9aWYoU2U+Pj49VCxqZS09VCxqPihUPWVlLUopKXtpZigoVD1qLVQpPm1lJiZXLnNhbmUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5tb2RlPTMwO2JyZWFrIGV9aWYoRT0wLG09VGUsMD09PV9lKXtpZihFKz1sZS1ULFQ8SCl7SC09VDtk''@;'; put 'put ''b3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9fWVsc2UgaWYoX2U8VCl7aWYoRSs9bGUrX2UtVCwoVC09X2UpPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO2lmKEU9MCxfZTxIKXtILT1UPV9lO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUo''@;'; put 'put ''LS1UKTtFPWVlLWosbT1hZX19fWVsc2UgaWYoRSs9X2UtVCxUPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPWFlfWZvcig7SD4yOylhZVtlZSsrXT1tW0UrK10sYWVbZWUrK109bVtFKytdLGFlW2VlKytdPW1bRSsrXSxILT0zO0gmJihhZVtlZSsrXT1t''@;'; put 'put ''W0UrK10sSD4xJiYoYWVbZWUrK109bVtFKytdKSl9ZWxzZXtFPWVlLWo7ZG97YWVbZWUrK109YWVbRSsrXSxhZVtlZSsrXT1hZVtFKytdLGFlW2VlKytdPWFlW0UrK10sSC09M313aGlsZShIPjIpO0gmJihhZVtlZSsrXT1hZVtFKytdLEg+MSYmKGFlW2VlKytdPWFlW0UrK10pKX1icmVha31p''@;'; put 'put ''Zig2NCZUKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixXLm1vZGU9MzA7YnJlYWsgZX1DPXBbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldfX1icmVha319d2hpbGUoWTxxJiZlZTxuZSk7U2UmPSgxPDwoamUtPShIPWplPj4zKTw8MykpLTEsSy5uZXh0X2luPVktPUgsSy5uZXh0X291''@;'; put 'put ''dD1lZSxLLmF2YWlsX2luPVk8cT9xLVkrNTo1LShZLXEpLEsuYXZhaWxfb3V0PWVlPG5lP25lLWVlKzI1NzoyNTctKGVlLW5lKSxXLmhvbGQ9U2UsVy5iaXRzPWplfX0se31dLDM1OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgi''@;'; put 'put ''Li9hZGxlcjMyIiksTD1QKCIuL2NyYzMyIiksSz1QKCIuL2luZmZhc3QiKSxVPVAoIi4vaW5mdHJlZXMiKSxpZT0wLF9lPS0yLHA9MSx5dD04NTIsTXQ9NTkyO2Z1bmN0aW9uICRlKEF0KXtyZXR1cm4oQXQ+Pj4yNCYyNTUpKyhBdD4+PjgmNjUyODApKygoNjUyODAmQXQpPDw4KSsoKDI1NSZB''@;'; put 'put ''dCk8PDI0KX1mdW5jdGlvbiB0dCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXpl''@;'; put 'put ''PTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRo''@;'; put 'put ''aXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgei5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgei5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51''@;'; put 'put ''bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBIZShBdCl7dmFyIFJuO3JldHVybiBBdCYmQXQuc3RhdGU/KEF0LnRvdGFsX2luPUF0LnRvdGFsX291dD0oUm49QXQuc3RhdGUpLnRvdGFsPTAsQXQubXNnPSIiLFJuLndyYXAmJihBdC5hZGxlcj0xJlJuLndy''@;'; put 'put ''YXApLFJuLm1vZGU9cCxSbi5sYXN0PTAsUm4uaGF2ZWRpY3Q9MCxSbi5kbWF4PTMyNzY4LFJuLmhlYWQ9bnVsbCxSbi5ob2xkPTAsUm4uYml0cz0wLFJuLmxlbmNvZGU9Um4ubGVuZHluPW5ldyB6LkJ1ZjMyKHl0KSxSbi5kaXN0Y29kZT1Sbi5kaXN0ZHluPW5ldyB6LkJ1ZjMyKE10KSxSbi5z''@;'; put 'put ''YW5lPTEsUm4uYmFjaz0tMSxpZSk6X2V9ZnVuY3Rpb24gdXQoQXQpe3ZhciBSbjtyZXR1cm4gQXQmJkF0LnN0YXRlPygoUm49QXQuc3RhdGUpLndzaXplPTAsUm4ud2hhdmU9MCxSbi53bmV4dD0wLEhlKEF0KSk6X2V9ZnVuY3Rpb24gcXQoQXQsUm4pe3ZhciBzdCxVdDtyZXR1cm4hQXR8fCFB''@;'; put 'put ''dC5zdGF0ZXx8KFV0PUF0LnN0YXRlLFJuPDA/KHN0PTAsUm49LVJuKTooc3Q9MSsoUm4+PjQpLFJuPDQ4JiYoUm4mPTE1KSksUm4mJihSbjw4fHxSbj4xNSkpP19lOihudWxsIT09VXQud2luZG93JiZVdC53Yml0cyE9PVJuJiYoVXQud2luZG93PW51bGwpLFV0LndyYXA9c3QsVXQud2JpdHM9''@;'; put 'put ''Um4sdXQoQXQpKX1mdW5jdGlvbiBSdChBdCxSbil7dmFyIHN0LFV0O3JldHVybiBBdD8oVXQ9bmV3IHR0LEF0LnN0YXRlPVV0LFV0LndpbmRvdz1udWxsLChzdD1xdChBdCxSbikpIT09aWUmJihBdC5zdGF0ZT1udWxsKSxzdCk6X2V9dmFyIFF0LHNuLGNpPSEwO2Z1bmN0aW9uIFJpKEF0KXtp''@;'; put 'put ''ZihjaSl7dmFyIFJuO2ZvcihRdD1uZXcgei5CdWYzMig1MTIpLHNuPW5ldyB6LkJ1ZjMyKDMyKSxSbj0wO1JuPDE0NDspQXQubGVuc1tSbisrXT04O2Zvcig7Um48MjU2OylBdC5sZW5zW1JuKytdPTk7Zm9yKDtSbjwyODA7KUF0LmxlbnNbUm4rK109Nztmb3IoO1JuPDI4ODspQXQubGVuc1tS''@;'; put 'put ''bisrXT04O2ZvcihVKDEsQXQubGVucywwLDI4OCxRdCwwLEF0Lndvcmsse2JpdHM6OX0pLFJuPTA7Um48MzI7KUF0LmxlbnNbUm4rK109NTtVKDIsQXQubGVucywwLDMyLHNuLDAsQXQud29yayx7Yml0czo1fSksY2k9ITF9QXQubGVuY29kZT1RdCxBdC5sZW5iaXRzPTksQXQuZGlzdGNvZGU9''@;'; put 'put ''c24sQXQuZGlzdGJpdHM9NX1PLmluZmxhdGVSZXNldD11dCxPLmluZmxhdGVSZXNldDI9cXQsTy5pbmZsYXRlUmVzZXRLZWVwPUhlLE8uaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gUHQoQXQpe3JldHVybiBSdChBdCwxNSl9LE8uaW5mbGF0ZUluaXQyPVJ0LE8uaW5mbGF0ZT1mdW5jdGlvbiBmdChB''@;'; put 'put ''dCxSbil7dmFyIHN0LFV0LHJpLFdlLFR0LG5yLGh0LHh0LGpuLHJuLHp0LGhpLGNuLGZuLFh0LGVuLHVhLEVpLHZyLFduLCRpLGVpLFZpLE5pLElpPTAsUXI9bmV3IHouQnVmOCg0KSxEYT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIUF0fHwh''@;'; put 'put ''QXQuc3RhdGV8fCFBdC5vdXRwdXR8fCFBdC5pbnB1dCYmMCE9PUF0LmF2YWlsX2luKXJldHVybiBfZTsxMj09PShzdD1BdC5zdGF0ZSkubW9kZSYmKHN0Lm1vZGU9MTMpLFR0PUF0Lm5leHRfb3V0LHJpPUF0Lm91dHB1dCxXZT1BdC5uZXh0X2luLFV0PUF0LmlucHV0LHh0PXN0LmhvbGQsam49''@;'; put 'put ''c3QuYml0cyxybj1ucj1BdC5hdmFpbF9pbix6dD1odD1BdC5hdmFpbF9vdXQsZWk9aWU7ZTpmb3IoOzspc3dpdGNoKHN0Lm1vZGUpe2Nhc2UgcDppZigwPT09c3Qud3JhcCl7c3QubW9kZT0xMzticmVha31mb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108''@;'; put 'put ''PGpuLGpuKz04fWlmKDImc3Qud3JhcCYmMzU2MTU9PT14dCl7c3QuY2hlY2s9MCxRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkseHQ9MCxqbj0wLHN0Lm1vZGU9MjticmVha31pZihzdC5mbGFncz0wLHN0LmhlYWQmJihzdC5oZWFkLmRv''@;'; put 'put ''bmU9ITEpLCEoMSZzdC53cmFwKXx8KCgoMjU1Jnh0KTw8OCkrKHh0Pj44KSklMzEpe0F0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsc3QubW9kZT0zMDticmVha31pZig4IT0oMTUmeHQpKXtBdC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixzdC5tb2RlPTMwO2JyZWFr''@;'; put 'put ''fWlmKGpuLT00LCRpPTgrKDE1Jih4dD4+Pj00KSksMD09PXN0LndiaXRzKXN0LndiaXRzPSRpO2Vsc2UgaWYoJGk+c3Qud2JpdHMpe0F0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsc3QubW9kZT0zMDticmVha31zdC5kbWF4PTE8PCRpLEF0LmFkbGVyPXN0LmNoZWNrPTEsc3QubW9kZT01''@;'; put 'put ''MTImeHQ/MTA6MTIseHQ9MCxqbj0wO2JyZWFrO2Nhc2UgMjpmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHN0LmZsYWdzPXh0LDghPSgyNTUmc3QuZmxhZ3MpKXtBdC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixz''@;'; put 'put ''dC5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0JnN0LmZsYWdzKXtBdC5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsc3QubW9kZT0zMDticmVha31zdC5oZWFkJiYoc3QuaGVhZC50ZXh0PXh0Pj44JjEpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0''@;'; put 'put ''LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxqbj0wLHN0Lm1vZGU9MztjYXNlIDM6Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5oZWFkJiYoc3QuaGVhZC50aW1lPXh0KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUm''@;'; put 'put ''eHQsUXJbMV09eHQ+Pj44JjI1NSxRclsyXT14dD4+PjE2JjI1NSxRclszXT14dD4+PjI0JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDQsMCkpLHh0PTAsam49MCxzdC5tb2RlPTQ7Y2FzZSA0OmZvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4s''@;'; put 'put ''am4rPTh9c3QuaGVhZCYmKHN0LmhlYWQueGZsYWdzPTI1NSZ4dCxzdC5oZWFkLm9zPXh0Pj44KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsam49MCxzdC5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQm''@;'; put 'put ''c3QuZmxhZ3Mpe2Zvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QubGVuZ3RoPXh0LHN0LmhlYWQmJihzdC5oZWFkLmV4dHJhX2xlbj14dCksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3QuY2hl''@;'; put 'put ''Y2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLGpuPTB9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5leHRyYT1udWxsKTtzdC5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmc3QuZmxhZ3MmJigoaGk9c3QubGVuZ3RoKT5uciYmKGhpPW5yKSxoaSYmKHN0LmhlYWQmJigkaT1zdC5oZWFkLmV4dHJhX2xl''@;'; put 'put ''bi1zdC5sZW5ndGgsc3QuaGVhZC5leHRyYXx8KHN0LmhlYWQuZXh0cmE9bmV3IEFycmF5KHN0LmhlYWQuZXh0cmFfbGVuKSksei5hcnJheVNldChzdC5oZWFkLmV4dHJhLFV0LFdlLGhpLCRpKSksNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1oaSxX''@;'; put 'put ''ZSs9aGksc3QubGVuZ3RoLT1oaSksc3QubGVuZ3RoKSlicmVhayBlO3N0Lmxlbmd0aD0wLHN0Lm1vZGU9NztjYXNlIDc6aWYoMjA0OCZzdC5mbGFncyl7aWYoMD09PW5yKWJyZWFrIGU7aGk9MDtkb3skaT1VdFtXZStoaSsrXSxzdC5oZWFkJiYkaSYmc3QubGVuZ3RoPDY1NTM2JiYoc3QuaGVh''@;'; put 'put ''ZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRpKSl9d2hpbGUoJGkmJmhpPG5yKTtpZig1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdlKz1oaSwkaSlicmVhayBlfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQubmFtZT1udWxsKTtzdC5sZW5n''@;'; put 'put ''dGg9MCxzdC5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmc3QuZmxhZ3Mpe2lmKDA9PT1ucilicmVhayBlO2hpPTA7ZG97JGk9VXRbV2UraGkrK10sc3QuaGVhZCYmJGkmJnN0Lmxlbmd0aDw2NTUzNiYmKHN0LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkaSkpfXdoaWxlKCRpJiZo''@;'; put 'put ''aTxucik7aWYoNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1oaSxXZSs9aGksJGkpYnJlYWsgZX1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLmNvbW1lbnQ9bnVsbCk7c3QubW9kZT05O2Nhc2UgOTppZig1MTImc3QuZmxhZ3Mpe2Zvcig7am48MTY7KXtp''@;'; put 'put ''ZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoeHQhPT0oNjU1MzUmc3QuY2hlY2spKXtBdC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxqbj0wfXN0LmhlYWQmJihzdC5oZWFkLmhjcmM9c3QuZmxhZ3M+PjkmMSxz''@;'; put 'put ''dC5oZWFkLmRvbmU9ITApLEF0LmFkbGVyPXN0LmNoZWNrPTAsc3QubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9QXQuYWRsZXI9c3QuY2hlY2s9JGUoeHQpLHh0PTAsam49MCxzdC5tb2RlPTEx''@;'; put 'put ''O2Nhc2UgMTE6aWYoMD09PXN0LmhhdmVkaWN0KXJldHVybiBBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9am4sMjtBdC5hZGxlcj1zdC5jaGVjaz0xLHN0Lm1vZGU9MTI7Y2FzZSAxMjppZig1PT09''@;'; put 'put ''Um58fDY9PT1SbilicmVhayBlO2Nhc2UgMTM6aWYoc3QubGFzdCl7eHQ+Pj49NyZqbixqbi09NyZqbixzdC5tb2RlPTI3O2JyZWFrfWZvcig7am48Mzspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zd2l0Y2goc3QubGFzdD0xJnh0LGpuLT0xLDMmKHh0''@;'; put 'put ''Pj4+PTEpKXtjYXNlIDA6c3QubW9kZT0xNDticmVhaztjYXNlIDE6aWYoUmkoc3QpLHN0Lm1vZGU9MjAsNj09PVJuKXt4dD4+Pj0yLGpuLT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOnN0Lm1vZGU9MTc7YnJlYWs7Y2FzZSAzOkF0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixzdC5tb2RlPTMw''@;'; put 'put ''fXh0Pj4+PTIsam4tPTI7YnJlYWs7Y2FzZSAxNDpmb3IoeHQ+Pj49NyZqbixqbi09NyZqbjtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZigoNjU1MzUmeHQpIT0oeHQ+Pj4xNl42NTUzNSkpe0F0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxv''@;'; put 'put ''Y2sgbGVuZ3RocyIsc3QubW9kZT0zMDticmVha31pZihzdC5sZW5ndGg9NjU1MzUmeHQseHQ9MCxqbj0wLHN0Lm1vZGU9MTUsNj09PVJuKWJyZWFrIGU7Y2FzZSAxNTpzdC5tb2RlPTE2O2Nhc2UgMTY6aWYoaGk9c3QubGVuZ3RoKXtpZihoaT5uciYmKGhpPW5yKSxoaT5odCYmKGhpPWh0KSww''@;'; put 'put ''PT09aGkpYnJlYWsgZTt6LmFycmF5U2V0KHJpLFV0LFdlLGhpLFR0KSxuci09aGksV2UrPWhpLGh0LT1oaSxUdCs9aGksc3QubGVuZ3RoLT1oaTticmVha31zdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtqbjwxNDspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxq''@;'; put 'put ''bixqbis9OH1pZihzdC5ubGVuPTI1NysoMzEmeHQpLGpuLT01LHN0Lm5kaXN0PTErKDMxJih4dD4+Pj01KSksam4tPTUsc3QubmNvZGU9NCsoMTUmKHh0Pj4+PTUpKSx4dD4+Pj00LGpuLT00LHN0Lm5sZW4+Mjg2fHxzdC5uZGlzdD4zMCl7QXQubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlz''@;'; put 'put ''dGFuY2Ugc3ltYm9scyIsc3QubW9kZT0zMDticmVha31zdC5oYXZlPTAsc3QubW9kZT0xODtjYXNlIDE4OmZvcig7c3QuaGF2ZTxzdC5uY29kZTspe2Zvcig7am48Mzspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5sZW5zW0RhW3N0LmhhdmUrK11d''@;'; put 'put ''PTcmeHQseHQ+Pj49Myxqbi09M31mb3IoO3N0LmhhdmU8MTk7KXN0LmxlbnNbRGFbc3QuaGF2ZSsrXV09MDtpZihzdC5sZW5jb2RlPXN0LmxlbmR5bixzdC5sZW5iaXRzPTcsZWk9VSgwLHN0LmxlbnMsMCwxOSxzdC5sZW5jb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5sZW5iaXRzfSksc3Qu''@;'; put 'put ''bGVuYml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsc3QubW9kZT0zMDticmVha31zdC5oYXZlPTAsc3QubW9kZT0xOTtjYXNlIDE5OmZvcig7c3QuaGF2ZTxzdC5ubGVuK3N0Lm5kaXN0Oyl7Zm9yKDtlbj0oSWk9c3QubGVuY29kZVt4dCYoMTw8c3Qu''@;'; put 'put ''bGVuYml0cyktMV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYodWE8MTYpeHQ+Pj49WHQsam4tPVh0LHN0LmxlbnNbc3QuaGF2ZSsrXT11YTtlbHNle2lmKDE2PT09dWEp''@;'; put 'put ''e2ZvcihOaT1YdCsyO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHh0Pj4+PVh0LGpuLT1YdCwwPT09c3QuaGF2ZSl7QXQubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixzdC5tb2RlPTMwO2JyZWFrfSRpPXN0LmxlbnNbc3Qu''@;'; put 'put ''aGF2ZS0xXSxoaT0zKygzJnh0KSx4dD4+Pj0yLGpuLT0yfWVsc2UgaWYoMTc9PT11YSl7Zm9yKE5pPVh0KzM7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9am4tPVh0LCRpPTAsaGk9MysoNyYoeHQ+Pj49WHQpKSx4dD4+Pj0zLGpuLT0zfWVs''@;'; put 'put ''c2V7Zm9yKE5pPVh0Kzc7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9am4tPVh0LCRpPTAsaGk9MTErKDEyNyYoeHQ+Pj49WHQpKSx4dD4+Pj03LGpuLT03fWlmKHN0LmhhdmUraGk+c3QubmxlbitzdC5uZGlzdCl7QXQubXNnPSJpbnZhbGlk''@;'; put 'put ''IGJpdCBsZW5ndGggcmVwZWF0IixzdC5tb2RlPTMwO2JyZWFrfWZvcig7aGktLTspc3QubGVuc1tzdC5oYXZlKytdPSRpfX1pZigzMD09PXN0Lm1vZGUpYnJlYWs7aWYoMD09PXN0LmxlbnNbMjU2XSl7QXQubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLHN0Lm1v''@;'; put 'put ''ZGU9MzA7YnJlYWt9aWYoc3QubGVuYml0cz05LGVpPVUoMSxzdC5sZW5zLDAsc3QubmxlbixzdC5sZW5jb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5sZW5iaXRzfSksc3QubGVuYml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsc3QubW9kZT0z''@;'; put 'put ''MDticmVha31pZihzdC5kaXN0Yml0cz02LHN0LmRpc3Rjb2RlPXN0LmRpc3RkeW4sZWk9VSgyLHN0LmxlbnMsc3QubmxlbixzdC5uZGlzdCxzdC5kaXN0Y29kZSwwLHN0LndvcmssVmk9e2JpdHM6c3QuZGlzdGJpdHN9KSxzdC5kaXN0Yml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQg''@;'; put 'put ''ZGlzdGFuY2VzIHNldCIsc3QubW9kZT0zMDticmVha31pZihzdC5tb2RlPTIwLDY9PT1SbilicmVhayBlO2Nhc2UgMjA6c3QubW9kZT0yMTtjYXNlIDIxOmlmKG5yPj02JiZodD49MjU4KXtBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1u''@;'; put 'put ''cixzdC5ob2xkPXh0LHN0LmJpdHM9am4sSyhBdCx6dCksVHQ9QXQubmV4dF9vdXQscmk9QXQub3V0cHV0LGh0PUF0LmF2YWlsX291dCxXZT1BdC5uZXh0X2luLFV0PUF0LmlucHV0LG5yPUF0LmF2YWlsX2luLHh0PXN0LmhvbGQsam49c3QuYml0cywxMj09PXN0Lm1vZGUmJihzdC5iYWNrPS0x''@;'; put 'put ''KTticmVha31mb3Ioc3QuYmFjaz0wO2VuPShJaT1zdC5sZW5jb2RlW3h0JigxPDxzdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksISgoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZihlbiYmISgyNDAm''@;'; put 'put ''ZW4pKXtmb3IoRWk9WHQsdnI9ZW4sV249dWE7ZW49KElpPXN0LmxlbmNvZGVbV24rKCh4dCYoMTw8RWkrdnIpLTEpPj5FaSldKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKEVpKyhYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04''@;'; put 'put ''fXh0Pj4+PUVpLGpuLT1FaSxzdC5iYWNrKz1FaX1pZih4dD4+Pj1YdCxqbi09WHQsc3QuYmFjays9WHQsc3QubGVuZ3RoPXVhLDA9PT1lbil7c3QubW9kZT0yNjticmVha31pZigzMiZlbil7c3QuYmFjaz0tMSxzdC5tb2RlPTEyO2JyZWFrfWlmKDY0JmVuKXtBdC5tc2c9ImludmFsaWQgbGl0''@;'; put 'put ''ZXJhbC9sZW5ndGggY29kZSIsc3QubW9kZT0zMDticmVha31zdC5leHRyYT0xNSZlbixzdC5tb2RlPTIyO2Nhc2UgMjI6aWYoc3QuZXh0cmEpe2ZvcihOaT1zdC5leHRyYTtqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5sZW5ndGgrPXh0''@;'; put 'put ''JigxPDxzdC5leHRyYSktMSx4dD4+Pj1zdC5leHRyYSxqbi09c3QuZXh0cmEsc3QuYmFjays9c3QuZXh0cmF9c3Qud2FzPXN0Lmxlbmd0aCxzdC5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDtlbj0oSWk9c3QuZGlzdGNvZGVbeHQmKDE8PHN0LmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsdWE9NjU1MzUm''@;'; put 'put ''SWksISgoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZighKDI0MCZlbikpe2ZvcihFaT1YdCx2cj1lbixXbj11YTtlbj0oSWk9c3QuZGlzdGNvZGVbV24rKCh4dCYoMTw8RWkrdnIpLTEpPj5FaSldKT4+PjE2JjI1NSx1''@;'; put 'put ''YT02NTUzNSZJaSwhKEVpKyhYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXh0Pj4+PUVpLGpuLT1FaSxzdC5iYWNrKz1FaX1pZih4dD4+Pj1YdCxqbi09WHQsc3QuYmFjays9WHQsNjQmZW4pe0F0Lm1zZz0iaW52YWxpZCBk''@;'; put 'put ''aXN0YW5jZSBjb2RlIixzdC5tb2RlPTMwO2JyZWFrfXN0Lm9mZnNldD11YSxzdC5leHRyYT0xNSZlbixzdC5tb2RlPTI0O2Nhc2UgMjQ6aWYoc3QuZXh0cmEpe2ZvcihOaT1zdC5leHRyYTtqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5v''@;'; put 'put ''ZmZzZXQrPXh0JigxPDxzdC5leHRyYSktMSx4dD4+Pj1zdC5leHRyYSxqbi09c3QuZXh0cmEsc3QuYmFjays9c3QuZXh0cmF9aWYoc3Qub2Zmc2V0PnN0LmRtYXgpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHN0Lm1vZGU9MzA7YnJlYWt9c3QubW9kZT0yNTtjYXNl''@;'; put 'put ''IDI1OmlmKDA9PT1odClicmVhayBlO2lmKHN0Lm9mZnNldD4oaGk9enQtaHQpKXtpZigoaGk9c3Qub2Zmc2V0LWhpKT5zdC53aGF2ZSYmc3Quc2FuZSl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3QubW9kZT0zMDticmVha31jbj1oaT5zdC53bmV4dD9zdC53c2l6''@;'; put 'put ''ZS0oaGktPXN0LnduZXh0KTpzdC53bmV4dC1oaSxoaT5zdC5sZW5ndGgmJihoaT1zdC5sZW5ndGgpLGZuPXN0LndpbmRvd31lbHNlIGZuPXJpLGNuPVR0LXN0Lm9mZnNldCxoaT1zdC5sZW5ndGg7aGk+aHQmJihoaT1odCksaHQtPWhpLHN0Lmxlbmd0aC09aGk7ZG97cmlbVHQrK109Zm5bY24r''@;'; put 'put ''K119d2hpbGUoLS1oaSk7MD09PXN0Lmxlbmd0aCYmKHN0Lm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWh0KWJyZWFrIGU7cmlbVHQrK109c3QubGVuZ3RoLGh0LS0sc3QubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHN0LndyYXApe2Zvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsg''@;'; put 'put ''ZTtuci0tLHh0fD1VdFtXZSsrXTw8am4sam4rPTh9aWYoQXQudG90YWxfb3V0Kz16dC09aHQsc3QudG90YWwrPXp0LHp0JiYoQXQuYWRsZXI9c3QuY2hlY2s9c3QuZmxhZ3M/TChzdC5jaGVjayxyaSx6dCxUdC16dCk6TihzdC5jaGVjayxyaSx6dCxUdC16dCkpLHp0PWh0LChzdC5mbGFncz94''@;'; put 'put ''dDokZSh4dCkpIT09c3QuY2hlY2spe0F0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxqbj0wfXN0Lm1vZGU9Mjg7Y2FzZSAyODppZihzdC53cmFwJiZzdC5mbGFncyl7Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dl''@;'; put 'put ''KytdPDxqbixqbis9OH1pZih4dCE9PSg0Mjk0OTY3Mjk1JnN0LnRvdGFsKSl7QXQubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAsam49MH1zdC5tb2RlPTI5O2Nhc2UgMjk6ZWk9MTticmVhayBlO2Nhc2UgMzA6ZWk9LTM7YnJlYWsgZTtjYXNlIDMx''@;'; put 'put ''OnJldHVybi00O2RlZmF1bHQ6cmV0dXJuIF9lfXJldHVybiBBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9am4sKHN0LndzaXplfHx6dCE9PUF0LmF2YWlsX291dCYmc3QubW9kZTwzMCYmKHN0Lm1v''@;'; put 'put ''ZGU8Mjd8fDQhPT1SbikpJiZmdW5jdGlvbiBobihBdCxSbixzdCxVdCl7dmFyIHJpLFdlPUF0LnN0YXRlO3JldHVybiBudWxsPT09V2Uud2luZG93JiYoV2Uud3NpemU9MTw8V2Uud2JpdHMsV2Uud25leHQ9MCxXZS53aGF2ZT0wLFdlLndpbmRvdz1uZXcgei5CdWY4KFdlLndzaXplKSksVXQ+''@;'; put 'put ''PVdlLndzaXplPyh6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1XZS53c2l6ZSxXZS53c2l6ZSwwKSxXZS53bmV4dD0wLFdlLndoYXZlPVdlLndzaXplKTooKHJpPVdlLndzaXplLVdlLnduZXh0KT5VdCYmKHJpPVV0KSx6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1VdCxyaSxXZS53bmV4''@;'; put 'put ''dCksKFV0LT1yaSk/KHouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVV0LFV0LDApLFdlLnduZXh0PVV0LFdlLndoYXZlPVdlLndzaXplKTooV2Uud25leHQrPXJpLFdlLnduZXh0PT09V2Uud3NpemUmJihXZS53bmV4dD0wKSxXZS53aGF2ZTxXZS53c2l6ZSYmKFdlLndoYXZlKz1yaSkpKSww''@;'; put 'put ''fShBdCxBdC5vdXRwdXQsQXQubmV4dF9vdXQsenQtQXQuYXZhaWxfb3V0KT8oc3QubW9kZT0zMSwtNCk6KHp0LT1BdC5hdmFpbF9vdXQsQXQudG90YWxfaW4rPXJuLT1BdC5hdmFpbF9pbixBdC50b3RhbF9vdXQrPXp0LHN0LnRvdGFsKz16dCxzdC53cmFwJiZ6dCYmKEF0LmFkbGVyPXN0LmNo''@;'; put 'put ''ZWNrPXN0LmZsYWdzP0woc3QuY2hlY2sscmksenQsQXQubmV4dF9vdXQtenQpOk4oc3QuY2hlY2sscmksenQsQXQubmV4dF9vdXQtenQpKSxBdC5kYXRhX3R5cGU9c3QuYml0cysoc3QubGFzdD82NDowKSsoMTI9PT1zdC5tb2RlPzEyODowKSsoMjA9PT1zdC5tb2RlfHwxNT09PXN0Lm1vZGU/''@;'; put 'put ''MjU2OjApLCgwPT09cm4mJjA9PT16dHx8ND09PVJuKSYmZWk9PT1pZSYmKGVpPS01KSxlaSl9LE8uaW5mbGF0ZUVuZD1mdW5jdGlvbiBPcihBdCl7aWYoIUF0fHwhQXQuc3RhdGUpcmV0dXJuIF9lO3ZhciBSbj1BdC5zdGF0ZTtyZXR1cm4gUm4ud2luZG93JiYoUm4ud2luZG93PW51bGwpLEF0''@;'; put 'put ''LnN0YXRlPW51bGwsaWV9LE8uaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBXdChBdCxSbil7dmFyIHN0O3JldHVybiBBdCYmQXQuc3RhdGUmJjImKHN0PUF0LnN0YXRlKS53cmFwPyhzdC5oZWFkPVJuLFJuLmRvbmU9ITEsaWUpOl9lfSxPLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZy''@;'; put 'put ''b20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxx''@;'; put 'put ''PVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sZWU9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIw''@;'; put 'put ''LDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxKPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxuZT1bMTYsMTYsMTYsMTYsMTcs''@;'; put 'put ''MTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO0YuZXhwb3J0cz1mdW5jdGlvbihsZSxtZSxfZSxUZSxTZSxqZSxWLHApe3ZhciBzZSx3ZSxVZSxKZSxvdCxYZSxJZSxWZSxrZSxiPXAuYml0cyx4''@;'; put 'put ''PTAsQz0wLFQ9MCxIPTAsaj0wLEU9MCxtPTAsQT0wLGFlPTAsdGU9MCx4ZT1udWxsLHZlPTAsemU9bmV3IHouQnVmMTYoMTYpLERlPW5ldyB6LkJ1ZjE2KDE2KSxGZT1udWxsLE9lPTA7Zm9yKHg9MDt4PD0xNTt4KyspemVbeF09MDtmb3IoQz0wO0M8VGU7QysrKXplW21lW19lK0NdXSsrO2Zv''@;'; put 'put ''cihqPWIsSD0xNTtIPj0xJiYwPT09emVbSF07SC0tKTtpZihqPkgmJihqPUgpLDA9PT1IKXJldHVybiBTZVtqZSsrXT0yMDk3MTUyMCxTZVtqZSsrXT0yMDk3MTUyMCxwLmJpdHM9MSwwO2ZvcihUPTE7VDxIJiYwPT09emVbVF07VCsrKTtmb3IoajxUJiYoaj1UKSxBPTEseD0xO3g8PTE1O3gr''@;'; put 'put ''KylpZihBPDw9MSwoQS09emVbeF0pPDApcmV0dXJuLTE7aWYoQT4wJiYoMD09PWxlfHwxIT09SCkpcmV0dXJuLTE7Zm9yKERlWzFdPTAseD0xO3g8MTU7eCsrKURlW3grMV09RGVbeF0remVbeF07Zm9yKEM9MDtDPFRlO0MrKykwIT09bWVbX2UrQ10mJihWW0RlW21lW19lK0NdXSsrXT1DKTtp''@;'; put 'put ''ZigwPT09bGU/KHhlPUZlPVYsWGU9MTkpOjE9PT1sZT8oeGU9cSx2ZS09MjU3LEZlPWVlLE9lLT0yNTcsWGU9MjU2KTooeGU9SixGZT1uZSxYZT0tMSksdGU9MCxDPTAseD1ULG90PWplLEU9aixtPTAsVWU9LTEsSmU9KGFlPTE8PGopLTEsMT09PWxlJiZhZT44NTJ8fDI9PT1sZSYmYWU+NTky''@;'; put 'put ''KXJldHVybiAxO2Zvcig7Oyl7SWU9eC1tLFZbQ108WGU/KFZlPTAsa2U9VltDXSk6VltDXT5YZT8oVmU9RmVbT2UrVltDXV0sa2U9eGVbdmUrVltDXV0pOihWZT05NixrZT0wKSxzZT0xPDx4LW0sVD13ZT0xPDxFO2Rve1NlW290Kyh0ZT4+bSkrKHdlLT1zZSldPUllPDwyNHxWZTw8MTZ8a2V9''@;'; put 'put ''d2hpbGUoMCE9PXdlKTtmb3Ioc2U9MTw8eC0xO3RlJnNlOylzZT4+PTE7aWYoMCE9PXNlPyh0ZSY9c2UtMSx0ZSs9c2UpOnRlPTAsQysrLDA9PS0temVbeF0pe2lmKHg9PT1IKWJyZWFrO3g9bWVbX2UrVltDXV19aWYoeD5qJiYodGUmSmUpIT09VWUpe2ZvcigwPT09bSYmKG09aiksb3QrPVQs''@;'; put 'put ''QT0xPDwoRT14LW0pO0UrbTxIJiYhKChBLT16ZVtFK21dKTw9MCk7KUUrKyxBPDw9MTtpZihhZSs9MTw8RSwxPT09bGUmJmFlPjg1Mnx8Mj09PWxlJiZhZT41OTIpcmV0dXJuIDE7U2VbVWU9dGUmSmVdPWo8PDI0fEU8PDE2fG90LWplfX1yZXR1cm4gMCE9PXRlJiYoU2Vbb3QrdGVdPXgtbTw8''@;'; put 'put ''MjR8NjQ8PDE2KSxwLmJpdHM9aiwwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVy''@;'; put 'put ''cm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKTtm''@;'; put 'put ''dW5jdGlvbiBXKGZ0KXtmb3IodmFyIE9yPWZ0Lmxlbmd0aDstLU9yPj0wOylmdFtPcl09MH12YXIgamU9MTUsVj0xNixIPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLGo9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYs''@;'; put 'put ''Nyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLEU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLG09WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGFlPW5ldyBBcnJheSg1NzYpO1coYWUpO3ZhciB0ZT1uZXcg''@;'; put 'put ''QXJyYXkoNjApO1codGUpO3ZhciBzZT1uZXcgQXJyYXkoNTEyKTtXKHNlKTt2YXIgd2U9bmV3IEFycmF5KDI1Nik7Vyh3ZSk7dmFyIFVlPW5ldyBBcnJheSgyOSk7VyhVZSk7dmFyIEplPW5ldyBBcnJheSgzMCk7VyhKZSk7dmFyIHhlLHZlLFhlLG90PWZ1bmN0aW9uKGZ0LE9yLFd0LEF0LFJu''@;'; put 'put ''KXt0aGlzLnN0YXRpY190cmVlPWZ0LHRoaXMuZXh0cmFfYml0cz1Pcix0aGlzLmV4dHJhX2Jhc2U9V3QsdGhpcy5lbGVtcz1BdCx0aGlzLm1heF9sZW5ndGg9Um4sdGhpcy5oYXNfc3RyZWU9ZnQmJmZ0Lmxlbmd0aH0semU9ZnVuY3Rpb24oZnQsT3Ipe3RoaXMuZHluX3RyZWU9ZnQsdGhpcy5t''@;'; put 'put ''YXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPU9yfTtmdW5jdGlvbiBEZShmdCl7cmV0dXJuIGZ0PDI1Nj9zZVtmdF06c2VbMjU2KyhmdD4+PjcpXX1mdW5jdGlvbiBGZShmdCxPcil7ZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQucGVuZGluZysr''@;'; put 'put ''XT1Pcj4+PjgmMjU1fWZ1bmN0aW9uIE9lKGZ0LE9yLFd0KXtmdC5iaV92YWxpZD5WLVd0PyhmdC5iaV9idWZ8PU9yPDxmdC5iaV92YWxpZCY2NTUzNSxGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj1Pcj4+Vi1mdC5iaV92YWxpZCxmdC5iaV92YWxpZCs9V3QtVik6KGZ0LmJpX2J1Znw9T3I8''@;'; put 'put ''PGZ0LmJpX3ZhbGlkJjY1NTM1LGZ0LmJpX3ZhbGlkKz1XdCl9ZnVuY3Rpb24gSWUoZnQsT3IsV3Qpe09lKGZ0LFd0WzIqT3JdLFd0WzIqT3IrMV0pfWZ1bmN0aW9uIFZlKGZ0LE9yKXt2YXIgV3Q9MDtkb3tXdHw9MSZmdCxmdD4+Pj0xLFd0PDw9MX13aGlsZSgtLU9yPjApO3JldHVybiBXdD4+''@;'; put 'put ''PjF9ZnVuY3Rpb24gX3QoZnQsT3IsV3Qpe3ZhciBzdCxVdCxBdD1uZXcgQXJyYXkoamUrMSksUm49MDtmb3Ioc3Q9MTtzdDw9amU7c3QrKylBdFtzdF09Um49Um4rV3Rbc3QtMV08PDE7Zm9yKFV0PTA7VXQ8PU9yO1V0Kyspe3ZhciByaT1mdFsyKlV0KzFdOzAhPT1yaSYmKGZ0WzIqVXRdPVZl''@;'; put 'put ''KEF0W3JpXSsrLHJpKSl9fWZ1bmN0aW9uIFFlKGZ0KXt2YXIgT3I7Zm9yKE9yPTA7T3I8Mjg2O09yKyspZnQuZHluX2x0cmVlWzIqT3JdPTA7Zm9yKE9yPTA7T3I8MzA7T3IrKylmdC5keW5fZHRyZWVbMipPcl09MDtmb3IoT3I9MDtPcjwxOTtPcisrKWZ0LmJsX3RyZWVbMipPcl09MDtmdC5k''@;'; put 'put ''eW5fbHRyZWVbNTEyXT0xLGZ0Lm9wdF9sZW49ZnQuc3RhdGljX2xlbj0wLGZ0Lmxhc3RfbGl0PWZ0Lm1hdGNoZXM9MH1mdW5jdGlvbiB1bihmdCl7ZnQuYmlfdmFsaWQ+OD9GZShmdCxmdC5iaV9idWYpOmZ0LmJpX3ZhbGlkPjAmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZ0LmJp''@;'; put 'put ''X2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MH1mdW5jdGlvbiBNdChmdCxPcixXdCxBdCl7dmFyIFJuPTIqT3Isc3Q9MipXdDtyZXR1cm4gZnRbUm5dPGZ0W3N0XXx8ZnRbUm5dPT09ZnRbc3RdJiZBdFtPcl08PUF0W1d0XX1mdW5jdGlvbiBEdChmdCxPcixXdCl7Zm9yKHZhciBBdD1m''@;'; put 'put ''dC5oZWFwW1d0XSxSbj1XdDw8MTtSbjw9ZnQuaGVhcF9sZW4mJihSbjxmdC5oZWFwX2xlbiYmTXQoT3IsZnQuaGVhcFtSbisxXSxmdC5oZWFwW1JuXSxmdC5kZXB0aCkmJlJuKyssIU10KE9yLEF0LGZ0LmhlYXBbUm5dLGZ0LmRlcHRoKSk7KWZ0LmhlYXBbV3RdPWZ0LmhlYXBbUm5dLFd0PVJu''@;'; put 'put ''LFJuPDw9MTtmdC5oZWFwW1d0XT1BdH1mdW5jdGlvbiBpdChmdCxPcixXdCl7dmFyIEF0LFJuLFV0LHJpLHN0PTA7aWYoMCE9PWZ0Lmxhc3RfbGl0KWRve0F0PWZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3RdPDw4fGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3QrMV0sUm49ZnQucGVu''@;'; put 'put ''ZGluZ19idWZbZnQubF9idWYrc3RdLHN0KyssMD09PUF0P0llKGZ0LFJuLE9yKTooSWUoZnQsKFV0PXdlW1JuXSkrMjU2KzEsT3IpLDAhPT0ocmk9SFtVdF0pJiZPZShmdCxSbi09VWVbVXRdLHJpKSxJZShmdCxVdD1EZSgtLUF0KSxXdCksMCE9PShyaT1qW1V0XSkmJk9lKGZ0LEF0LT1KZVtV''@;'; put 'put ''dF0scmkpKX13aGlsZShzdDxmdC5sYXN0X2xpdCk7SWUoZnQsMjU2LE9yKX1mdW5jdGlvbiAkZShmdCxPcil7dmFyIFV0LHJpLFR0LFd0PU9yLmR5bl90cmVlLEF0PU9yLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxSbj1Pci5zdGF0X2Rlc2MuaGFzX3N0cmVlLHN0PU9yLnN0YXRfZGVzYy5lbGVt''@;'; put 'put ''cyxXZT0tMTtmb3IoZnQuaGVhcF9sZW49MCxmdC5oZWFwX21heD01NzMsVXQ9MDtVdDxzdDtVdCsrKTAhPT1XdFsyKlV0XT8oZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1XZT1VdCxmdC5kZXB0aFtVdF09MCk6V3RbMipVdCsxXT0wO2Zvcig7ZnQuaGVhcF9sZW48MjspV3RbMiooVHQ9ZnQuaGVh''@;'; put 'put ''cFsrK2Z0LmhlYXBfbGVuXT1XZTwyPysrV2U6MCldPTEsZnQuZGVwdGhbVHRdPTAsZnQub3B0X2xlbi0tLFJuJiYoZnQuc3RhdGljX2xlbi09QXRbMipUdCsxXSk7Zm9yKE9yLm1heF9jb2RlPVdlLFV0PWZ0LmhlYXBfbGVuPj4xO1V0Pj0xO1V0LS0pRHQoZnQsV3QsVXQpO1R0PXN0O2Rve1V0''@;'; put 'put ''PWZ0LmhlYXBbMV0sZnQuaGVhcFsxXT1mdC5oZWFwW2Z0LmhlYXBfbGVuLS1dLER0KGZ0LFd0LDEpLHJpPWZ0LmhlYXBbMV0sZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1VdCxmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPXJpLFd0WzIqVHRdPVd0WzIqVXRdK1d0WzIqcmldLGZ0LmRlcHRoW1R0XT0o''@;'; put 'put ''ZnQuZGVwdGhbVXRdPj1mdC5kZXB0aFtyaV0/ZnQuZGVwdGhbVXRdOmZ0LmRlcHRoW3JpXSkrMSxXdFsyKlV0KzFdPVd0WzIqcmkrMV09VHQsZnQuaGVhcFsxXT1UdCsrLER0KGZ0LFd0LDEpfXdoaWxlKGZ0LmhlYXBfbGVuPj0yKTtmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPWZ0LmhlYXBbMV0s''@;'; put 'put ''ZnVuY3Rpb24gQWUoZnQsT3Ipe3ZhciBUdCxucixodCx4dCxqbixybixXdD1Pci5keW5fdHJlZSxBdD1Pci5tYXhfY29kZSxSbj1Pci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsc3Q9T3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxVdD1Pci5zdGF0X2Rlc2MuZXh0cmFfYml0cyxyaT1Pci5zdGF0X2Rl''@;'; put 'put ''c2MuZXh0cmFfYmFzZSxXZT1Pci5zdGF0X2Rlc2MubWF4X2xlbmd0aCx6dD0wO2Zvcih4dD0wO3h0PD1qZTt4dCsrKWZ0LmJsX2NvdW50W3h0XT0wO2ZvcihXdFsyKmZ0LmhlYXBbZnQuaGVhcF9tYXhdKzFdPTAsVHQ9ZnQuaGVhcF9tYXgrMTtUdDw1NzM7VHQrKykoeHQ9V3RbMipXdFsyKihu''@;'; put 'put ''cj1mdC5oZWFwW1R0XSkrMV0rMV0rMSk+V2UmJih4dD1XZSx6dCsrKSxXdFsyKm5yKzFdPXh0LCEobnI+QXQpJiYoZnQuYmxfY291bnRbeHRdKyssam49MCxucj49cmkmJihqbj1VdFtuci1yaV0pLGZ0Lm9wdF9sZW4rPShybj1XdFsyKm5yXSkqKHh0K2puKSxzdCYmKGZ0LnN0YXRpY19sZW4r''@;'; put 'put ''PXJuKihSblsyKm5yKzFdK2puKSkpO2lmKDAhPT16dCl7ZG97Zm9yKHh0PVdlLTE7MD09PWZ0LmJsX2NvdW50W3h0XTspeHQtLTtmdC5ibF9jb3VudFt4dF0tLSxmdC5ibF9jb3VudFt4dCsxXSs9MixmdC5ibF9jb3VudFtXZV0tLSx6dC09Mn13aGlsZSh6dD4wKTtmb3IoeHQ9V2U7MCE9PXh0''@;'; put 'put ''O3h0LS0pZm9yKG5yPWZ0LmJsX2NvdW50W3h0XTswIT09bnI7KSEoKGh0PWZ0LmhlYXBbLS1UdF0pPkF0KSYmKFd0WzIqaHQrMV0hPT14dCYmKGZ0Lm9wdF9sZW4rPSh4dC1XdFsyKmh0KzFdKSpXdFsyKmh0XSxXdFsyKmh0KzFdPXh0KSxuci0tKX19KGZ0LE9yKSxfdChXdCxXZSxmdC5ibF9j''@;'; put 'put ''b3VudCl9ZnVuY3Rpb24gdHQoZnQsT3IsV3Qpe3ZhciBBdCxzdCxSbj0tMSxVdD1PclsxXSxyaT0wLFdlPTcsVHQ9NDtmb3IoMD09PVV0JiYoV2U9MTM4LFR0PTMpLE9yWzIqKFd0KzEpKzFdPTY1NTM1LEF0PTA7QXQ8PVd0O0F0Kyspc3Q9VXQsVXQ9T3JbMiooQXQrMSkrMV0sISgrK3JpPFdl''@;'; put 'put ''JiZzdD09PVV0KSYmKHJpPFR0P2Z0LmJsX3RyZWVbMipzdF0rPXJpOjAhPT1zdD8oc3QhPT1SbiYmZnQuYmxfdHJlZVsyKnN0XSsrLGZ0LmJsX3RyZWVbMzJdKyspOnJpPD0xMD9mdC5ibF90cmVlWzM0XSsrOmZ0LmJsX3RyZWVbMzZdKysscmk9MCxSbj1zdCwwPT09VXQ/KFdlPTEzOCxUdD0z''@;'; put 'put ''KTpzdD09PVV0PyhXZT02LFR0PTMpOihXZT03LFR0PTQpKX1mdW5jdGlvbiBIZShmdCxPcixXdCl7dmFyIEF0LHN0LFJuPS0xLFV0PU9yWzFdLHJpPTAsV2U9NyxUdD00O2ZvcigwPT09VXQmJihXZT0xMzgsVHQ9MyksQXQ9MDtBdDw9V3Q7QXQrKylpZihzdD1VdCxVdD1PclsyKihBdCsxKSsx''@;'; put 'put ''XSwhKCsrcmk8V2UmJnN0PT09VXQpKXtpZihyaTxUdClkb3tJZShmdCxzdCxmdC5ibF90cmVlKX13aGlsZSgwIT0tLXJpKTtlbHNlIDAhPT1zdD8oc3QhPT1SbiYmKEllKGZ0LHN0LGZ0LmJsX3RyZWUpLHJpLS0pLEllKGZ0LDE2LGZ0LmJsX3RyZWUpLE9lKGZ0LHJpLTMsMikpOnJpPD0xMD8o''@;'; put 'put ''SWUoZnQsMTcsZnQuYmxfdHJlZSksT2UoZnQscmktMywzKSk6KEllKGZ0LDE4LGZ0LmJsX3RyZWUpLE9lKGZ0LHJpLTExLDcpKTtyaT0wLFJuPXN0LDA9PT1VdD8oV2U9MTM4LFR0PTMpOnN0PT09VXQ/KFdlPTYsVHQ9Myk6KFdlPTcsVHQ9NCl9fXZhciBQdD0hMTtmdW5jdGlvbiBRdChmdCxP''@;'; put 'put ''cixXdCxBdCl7T2UoZnQsMCsoQXQ/MTowKSwzKSxmdW5jdGlvbiB5dChmdCxPcixXdCxBdCl7dW4oZnQpLEF0JiYoRmUoZnQsV3QpLEZlKGZ0LH5XdCkpLHouYXJyYXlTZXQoZnQucGVuZGluZ19idWYsZnQud2luZG93LE9yLFd0LGZ0LnBlbmRpbmcpLGZ0LnBlbmRpbmcrPVd0fShmdCxPcixX''@;'; put 'put ''dCwhMCl9Ty5fdHJfaW5pdD1mdW5jdGlvbiBjaShmdCl7UHR8fChmdW5jdGlvbiBudCgpe3ZhciBmdCxPcixXdCxBdCxSbixzdD1uZXcgQXJyYXkoamUrMSk7Zm9yKFd0PTAsQXQ9MDtBdDwyODtBdCsrKWZvcihVZVtBdF09V3QsZnQ9MDtmdDwxPDxIW0F0XTtmdCsrKXdlW1d0KytdPUF0O2Zv''@;'; put 'put ''cih3ZVtXdC0xXT1BdCxSbj0wLEF0PTA7QXQ8MTY7QXQrKylmb3IoSmVbQXRdPVJuLGZ0PTA7ZnQ8MTw8altBdF07ZnQrKylzZVtSbisrXT1BdDtmb3IoUm4+Pj03O0F0PDMwO0F0KyspZm9yKEplW0F0XT1Sbjw8NyxmdD0wO2Z0PDE8PGpbQXRdLTc7ZnQrKylzZVsyNTYrUm4rK109QXQ7Zm9y''@;'; put 'put ''KE9yPTA7T3I8PWplO09yKyspc3RbT3JdPTA7Zm9yKGZ0PTA7ZnQ8PTE0MzspYWVbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoO2Z0PD0yNTU7KWFlWzIqZnQrMV09OSxmdCsrLHN0WzldKys7Zm9yKDtmdDw9Mjc5OylhZVsyKmZ0KzFdPTcsZnQrKyxzdFs3XSsrO2Zvcig7ZnQ8PTI4Nzsp''@;'; put 'put ''YWVbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoX3QoYWUsMjg3LHN0KSxmdD0wO2Z0PDMwO2Z0KyspdGVbMipmdCsxXT01LHRlWzIqZnRdPVZlKGZ0LDUpO3hlPW5ldyBvdChhZSxILDI1NywyODYsamUpLHZlPW5ldyBvdCh0ZSxqLDAsMzAsamUpLFhlPW5ldyBvdChuZXcgQXJyYXkoMCks''@;'; put 'put ''RSwwLDE5LDcpfSgpLFB0PSEwKSxmdC5sX2Rlc2M9bmV3IHplKGZ0LmR5bl9sdHJlZSx4ZSksZnQuZF9kZXNjPW5ldyB6ZShmdC5keW5fZHRyZWUsdmUpLGZ0LmJsX2Rlc2M9bmV3IHplKGZ0LmJsX3RyZWUsWGUpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTAsUWUoZnQpfSxPLl90cl9zdG9y''@;'; put 'put ''ZWRfYmxvY2s9UXQsTy5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gUmkoZnQsT3IsV3QsQXQpe3ZhciBSbixzdCxVdD0wO2Z0LmxldmVsPjA/KDI9PT1mdC5zdHJtLmRhdGFfdHlwZSYmKGZ0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIFJ0KGZ0KXt2YXIgV3QsT3I9NDA5MzYyNDQ0Nztmb3Io''@;'; put 'put ''V3Q9MDtXdDw9MzE7V3QrKyxPcj4+Pj0xKWlmKDEmT3ImJjAhPT1mdC5keW5fbHRyZWVbMipXdF0pcmV0dXJuIDA7aWYoMCE9PWZ0LmR5bl9sdHJlZVsxOF18fDAhPT1mdC5keW5fbHRyZWVbMjBdfHwwIT09ZnQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoV3Q9MzI7V3Q8MjU2O1d0Kysp''@;'; put 'put ''aWYoMCE9PWZ0LmR5bl9sdHJlZVsyKld0XSlyZXR1cm4gMTtyZXR1cm4gMH0oZnQpKSwkZShmdCxmdC5sX2Rlc2MpLCRlKGZ0LGZ0LmRfZGVzYyksVXQ9ZnVuY3Rpb24gdXQoZnQpe3ZhciBPcjtmb3IodHQoZnQsZnQuZHluX2x0cmVlLGZ0LmxfZGVzYy5tYXhfY29kZSksdHQoZnQsZnQuZHlu''@;'; put 'put ''X2R0cmVlLGZ0LmRfZGVzYy5tYXhfY29kZSksJGUoZnQsZnQuYmxfZGVzYyksT3I9MTg7T3I+PTMmJjA9PT1mdC5ibF90cmVlWzIqbVtPcl0rMV07T3ItLSk7cmV0dXJuIGZ0Lm9wdF9sZW4rPTMqKE9yKzEpKzUrNSs0LE9yfShmdCksKHN0PWZ0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShSbj1m''@;'; put 'put ''dC5vcHRfbGVuKzMrNz4+PjMpJiYoUm49c3QpKTpSbj1zdD1XdCs1LFd0KzQ8PVJuJiYtMSE9PU9yP1F0KGZ0LE9yLFd0LEF0KTo0PT09ZnQuc3RyYXRlZ3l8fHN0PT09Um4/KE9lKGZ0LDIrKEF0PzE6MCksMyksaXQoZnQsYWUsdGUpKTooT2UoZnQsNCsoQXQ/MTowKSwzKSxmdW5jdGlvbiBx''@;'; put 'put ''dChmdCxPcixXdCxBdCl7dmFyIFJuO2ZvcihPZShmdCxPci0yNTcsNSksT2UoZnQsV3QtMSw1KSxPZShmdCxBdC00LDQpLFJuPTA7Um48QXQ7Um4rKylPZShmdCxmdC5ibF90cmVlWzIqbVtSbl0rMV0sMyk7SGUoZnQsZnQuZHluX2x0cmVlLE9yLTEpLEhlKGZ0LGZ0LmR5bl9kdHJlZSxXdC0x''@;'; put 'put ''KX0oZnQsZnQubF9kZXNjLm1heF9jb2RlKzEsZnQuZF9kZXNjLm1heF9jb2RlKzEsVXQrMSksaXQoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLFFlKGZ0KSxBdCYmdW4oZnQpfSxPLl90cl90YWxseT1mdW5jdGlvbiBobihmdCxPcixXdCl7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0''@;'; put 'put ''LmRfYnVmKzIqZnQubGFzdF9saXRdPU9yPj4+OCYyNTUsZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZXdCxmdC5sYXN0X2xpdCsrLDA9PT1Pcj9mdC5keW5fbHRyZWVbMipXdF0r''@;'; put 'put ''KzooZnQubWF0Y2hlcysrLE9yLS0sZnQuZHluX2x0cmVlWzIqKHdlW1d0XSsyNTYrMSldKyssZnQuZHluX2R0cmVlWzIqRGUoT3IpXSsrKSxmdC5sYXN0X2xpdD09PWZ0LmxpdF9idWZzaXplLTF9LE8uX3RyX2FsaWduPWZ1bmN0aW9uIHNuKGZ0KXtPZShmdCwyLDMpLEllKGZ0LDI1NixhZSks''@;'; put 'put ''ZnVuY3Rpb24ga2UoZnQpezE2PT09ZnQuYmlfdmFsaWQ/KEZlKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCk6ZnQuYmlfdmFsaWQ+PTgmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmdC5iaV9idWYsZnQuYmlfYnVmPj49OCxmdC5iaV92YWxpZC09''@;'; put 'put ''OCl9KGZ0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9''@;'; put 'put ''bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw2MzU3ODoodWUsWCx5KT0+eyFmdW5jdGlvbiBfKHcp''@;'; put 'put ''e3cudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgUD0xMjAwLEY9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT15KDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPXkoNDI5MjQpKSk7Zm9yKHZhciBPPVs4''@;'; put 'put ''NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sej0wO3o8PTg7Kyt6KU8ucHVzaCgxMjUwK3opO3ZhciBOPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1''@;'; put 'put ''LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sTD1mdW5jdGlvbihTKXstMSE9Ty5pbmRleE9mKFMpJiYoRj1OWzBdPVMpfSxVPWZ1bmN0aW9uKFMpe1A9UyxMKFMpfTtmdW5jdGlvbiBXKCl7VSgxMjAwKSxmdW5jdGlvbiBLKCl7''@;'; put 'put ''TCgxMjUyKX0oKX1mdW5jdGlvbiBZKFMpe2Zvcih2YXIgUj1bXSxrPTAsRz1TLmxlbmd0aDtrPEc7KytrKVJba109Uy5jaGFyQ29kZUF0KGspO3JldHVybiBSfXZhciBKPWZ1bmN0aW9uKFMpe3ZhciBSPVMuY2hhckNvZGVBdCgwKSxrPVMuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1SJiYy''@;'; put 'put ''NTQ9PWs/ZnVuY3Rpb24gcShTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKSsoUy5jaGFyQ29kZUF0KDIqaysxKTw8OCkpO3JldHVybiBSLmpvaW4oIiIpfShTLnNsaWNlKDIpKToyNTQ9PVImJjI1''@;'; put 'put ''NT09az9mdW5jdGlvbiBlZShTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKzEpKyhTLmNoYXJDb2RlQXQoMiprKTw8OCkpO3JldHVybiBSLmpvaW4oIiIpfShTLnNsaWNlKDIpKTo2NTI3OT09Uj9T''@;'; put 'put ''LnNsaWNlKDEpOlN9LG5lPWZ1bmN0aW9uKFIpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpfSxpZT1mdW5jdGlvbihSKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShSKX07dHlwZW9mIGNwdGFibGU8InUiJiYoVT1mdW5jdGlvbihTKXtQPVMsTChTKX0sSj1mdW5jdGlvbihTKXty''@;'; put 'put ''ZXR1cm4gMjU1PT09Uy5jaGFyQ29kZUF0KDApJiYyNTQ9PT1TLmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxZKFMuc2xpY2UoMikpKTpTfSxuZT1mdW5jdGlvbihSKXtyZXR1cm4gMTIwMD09PVA/U3RyaW5nLmZyb21DaGFyQ29kZShSKTpjcHRhYmxlLnV0aWxzLmRl''@;'; put 'put ''Y29kZShQLFsyNTUmUixSPj44XSlbMF19LGllPWZ1bmN0aW9uKFIpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShGLFtSXSlbMF19KTt2YXIgbGU9bnVsbCxfZT1mdW5jdGlvbigpe3ZhciBSPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''MDEyMzQ1Njc4OSsvPSI7cmV0dXJue2VuY29kZTpmdW5jdGlvbihrKXtmb3IodmFyIEc9IiIsUT0wLG9lPTAsZ2U9MCxwZT0wLHllPTAsUGU9MCxOZT0wLFllPTA7WWU8ay5sZW5ndGg7KXBlPShRPWsuY2hhckNvZGVBdChZZSsrKSk+PjIseWU9KDMmUSk8PDR8KG9lPWsuY2hhckNvZGVBdChZ''@;'; put 'put ''ZSsrKSk+PjQsUGU9KDE1Jm9lKTw8MnwoZ2U9ay5jaGFyQ29kZUF0KFllKyspKT4+NixOZT02MyZnZSxpc05hTihvZSk/UGU9TmU9NjQ6aXNOYU4oZ2UpJiYoTmU9NjQpLEcrPVIuY2hhckF0KHBlKStSLmNoYXJBdCh5ZSkrUi5jaGFyQXQoUGUpK1IuY2hhckF0KE5lKTtyZXR1cm4gR30sZGVj''@;'; put 'put ''b2RlOmZ1bmN0aW9uKEcpe3ZhciBRPSIiLHllPTAsUGU9MCxOZT0wLFllPTA7Rz1HLnJlcGxhY2UoL1teXHdcK1wvXD1dL2csIiIpO2Zvcih2YXIgZXQ9MDtldDxHLmxlbmd0aDspeWU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSxQZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpLFErPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoeWU8PDJ8UGU+PjQpLDY0IT09KE5lPVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSkpJiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUGUpPDw0fE5lPj4yKSksNjQhPT0oWWU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSkmJihRKz1TdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKCgzJk5lKTw8NnxZZSkpO3JldHVybiBRfX19KCksVGU9dHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lvbnMubm9kZSxTZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwi''@;'; put 'put ''dSIpe3ZhciBqZT0hQnVmZmVyLmZyb207aWYoIWplKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2plPSEwfVNlPWplP2Z1bmN0aW9uKFMsUil7cmV0dXJuIFI/bmV3IEJ1ZmZlcihTLFIpOm5ldyBCdWZmZXIoUyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIu''@;'; put 'put ''YWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBCdWZmZXIoUyl9KSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBCdWZmZXIoUyl9KX1mdW5jdGlvbiBWKFMpe3JldHVybiBUZT9CdWZmZXIuYWxs''@;'; put 'put ''b2MoUyk6bmV3IEFycmF5KFMpfWZ1bmN0aW9uIHAoUyl7cmV0dXJuIFRlP0J1ZmZlci5hbGxvY1Vuc2FmZShTKTpuZXcgQXJyYXkoUyl9dmFyIGI9ZnVuY3Rpb24oUil7cmV0dXJuIFRlP1NlKFIsImJpbmFyeSIpOlIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gMjU1JmsuY2hh''@;'; put 'put ''ckNvZGVBdCgwKX0pfTtmdW5jdGlvbiB4KFMpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpcmV0dXJuIGIoUyk7Zm9yKHZhciBSPW5ldyBBcnJheUJ1ZmZlcihTLmxlbmd0aCksaz1uZXcgVWludDhBcnJheShSKSxHPTA7RyE9Uy5sZW5ndGg7KytHKWtbR109MjU1JlMuY2hhckNvZGVBdChH''@;'; put 'put ''KTtyZXR1cm4gUn1mdW5jdGlvbiBDKFMpe2lmKEFycmF5LmlzQXJyYXkoUykpcmV0dXJuIFMubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKEcpfSkuam9pbigiIik7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoU1trXSk7cmV0dXJuIFIuam9pbigiIil9ZnVuY3Rpb24gSChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZihTIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEgobmV3IFVpbnQ4QXJyYXkoUykpO2Zvcih2YXIgUj1u''@;'; put 'put ''ZXcgQXJyYXkoUy5sZW5ndGgpLGs9MDtrPFMubGVuZ3RoOysraylSW2tdPVNba107cmV0dXJuIFJ9dmFyIGo9ZnVuY3Rpb24oUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXtBcnJheS5pc0FycmF5KGspP1I9Ui5jb25jYXQoayk6KHR5cGVvZiBVaW50OEFycmF5PCJ1''@;'; put 'put ''IiYmayBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikmJihSPVIuY29uY2F0KEgoaykpKX0pLFJ9LEU9L1x1MDAwMC9nLG09L1tcdTAwMDEtXHUwMDA2XS9nLEE9e30sYWU9ZnVuY3Rpb24oUil7ZnVuY3Rpb24g''@;'; put 'put ''ayhsbil7Zm9yKHZhciBFbj0iIixVbj1sbi5sZW5ndGgtMTtVbj49MDspRW4rPWxuLmNoYXJBdChVbi0tKTtyZXR1cm4gRW59ZnVuY3Rpb24gRyhsbixFbil7Zm9yKHZhciBVbj0iIjtVbi5sZW5ndGg8RW47KVVuKz1sbjtyZXR1cm4gVW59ZnVuY3Rpb24gUShsbixFbil7dmFyIFVuPSIiK2xu''@;'; put 'put ''O3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59ZnVuY3Rpb24gb2UobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIgIixFbi1Vbi5sZW5ndGgpK1VufWZ1bmN0aW9uIGdlKGxuLEVuKXt2YXIgVW49IiIrbG47cmV0dXJu''@;'; put 'put ''IFVuLmxlbmd0aD49RW4/VW46VW4rRygiICIsRW4tVW4ubGVuZ3RoKX1SLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIFBlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIE5lKGxuLEVuKXtyZXR1cm4gbG4+UGV8fGxuPC1QZT9mdW5jdGlvbiBwZShsbixFbil7dmFyIFVuPSIiK01hdGgucm91''@;'; put 'put ''bmQobG4pO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59KGxuLEVuKTpmdW5jdGlvbiB5ZShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59KE1hdGgucm91bmQobG4pLEVuKX1mdW5j''@;'; put 'put ''dGlvbiBZZShsbixFbil7cmV0dXJuIGxuLmxlbmd0aD49NysoRW49RW58fDApJiYxMDM9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMSkpJiYxMTA9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzIpKSYmMTAxPT0oMzJ8bG4uY2hhckNvZGVBdChFbisz''@;'; put 'put ''KSkmJjExND09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNCkpJiY5Nz09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNSkpJiYxMDg9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzYpKX1mdW5jdGlvbiBldChsbil7Zm9yKHZhciBFbj1bXSxVbj1PYmplY3Qua2V5cyhsbikseGk9MDt4aSE9PVVuLmxlbmd0aDsr''@;'; put 'put ''K3hpKUVuW2xuW1VuW3hpXV1dPVVuW3hpXTtyZXR1cm4gRW59dmFyIGN0PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVy''@;'; put 'put ''ZGF5Il1dLEV0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJGIiwiRmViIiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJB''@;'; put 'put ''dWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8iLCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiBhdChsbil7bG5bMF09IkdlbmVyYWwiLGxuWzFdPSIwIixsblsyXT0iMC4wMCIsbG5bM109IiMs''@;'; put 'put ''IyMwIixsbls0XT0iIywjIzAuMDAiLGxuWzldPSIwJSIsbG5bMTBdPSIwLjAwJSIsbG5bMTFdPSIwLjAwRSswMCIsbG5bMTJdPSIjID8vPyIsbG5bMTNdPSIjID8/Lz8/IixsblsxNF09Im0vZC95eSIsbG5bMTVdPSJkLW1tbS15eSIsbG5bMTZdPSJkLW1tbSIsbG5bMTddPSJtbW0teXkiLGxu''@;'; put 'put ''WzE4XT0iaDptbSBBTS9QTSIsbG5bMTldPSJoOm1tOnNzIEFNL1BNIixsblsyMF09Img6bW0iLGxuWzIxXT0iaDptbTpzcyIsbG5bMjJdPSJtL2QveXkgaDptbSIsbG5bMzddPSIjLCMjMCA7KCMsIyMwKSIsbG5bMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixsblszOV09IiMsIyMwLjAwOygj''@;'; put 'put ''LCMjMC4wMCkiLGxuWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixsbls0NV09Im1tOnNzIixsbls0Nl09IltoXTptbTpzcyIsbG5bNDddPSJtbXNzLjAiLGxuWzQ4XT0iIyMwLjBFKzAiLGxuWzQ5XT0iQCIsbG5bNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2''@;'; put 'put ''NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsRm4obG4pfXZhciBidD17fTthdChidCk7dmFyIGp0PVtdLGt0PTA7Zm9yKGt0PTU7a3Q8PTg7KytrdClqdFtrdF09MzIra3Q7Zm9yKGt0PTIzO2t0PD0yNjsrK2t0KWp0W2t0XT0wO2ZvcihrdD0yNztrdDw9MzE7KytrdClqdFtrdF09MTQ7Zm9y''@;'; put 'put ''KGt0PTUwO2t0PD01ODsrK2t0KWp0W2t0XT0xNDtmb3Ioa3Q9NTk7a3Q8PTYyOysra3QpanRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTcyO2t0PD03NTsrK2t0KWp0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpanRba3RdPWt0''@;'; put 'put ''LTU3O2ZvcihrdD03NjtrdDw9Nzg7KytrdClqdFtrdF09a3QtNTY7Zm9yKGt0PTc5O2t0PD04MTsrK2t0KWp0W2t0XT1rdC0zNDt2YXIgT3Q9W107ZnVuY3Rpb24gS3QobG4sRW4sVW4pe2Zvcih2YXIgeGk9bG48MD8tMToxLG9yPWxuKnhpLE9pPTAsU3I9MSxQaT0wLFphPTEsSGk9MCxtYT0w''@;'; put 'put ''LERpPU1hdGguZmxvb3Iob3IpO0hpPEVuJiYoUGk9KERpPU1hdGguZmxvb3Iob3IpKSpTcitPaSxtYT1EaSpIaStaYSwhKG9yLURpPDVlLTgpKTspb3I9MS8ob3ItRGkpLE9pPVNyLFNyPVBpLFphPUhpLEhpPW1hO2lmKG1hPkVuJiYoSGk+RW4/KG1hPVphLFBpPU9pKToobWE9SGksUGk9U3Ip''@;'; put 'put ''KSwhVW4pcmV0dXJuWzAseGkqUGksbWFdO3ZhciBjcz1NYXRoLmZsb29yKHhpKlBpL21hKTtyZXR1cm5bY3MseGkqUGktY3MqbWEsbWFdfWZ1bmN0aW9uIFRuKGxuLEVuLFVuKXtpZihsbj4yOTU4NDY1fHxsbjwwKXJldHVybiBudWxsO3ZhciB4aT0wfGxuLG9yPU1hdGguZmxvb3IoODY0MDAq''@;'; put 'put ''KGxuLXhpKSksT2k9MCxTcj1bXSxQaT17RDp4aSxUOm9yLHU6ODY0MDAqKGxuLXhpKS1vcix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKFBpLnUpPDFlLTYmJihQaS51PTApLEVuJiZFbi5kYXRlMTkwNCYmKHhpKz0xNDYyKSxQaS51Pi45OTk5JiYoUGkudT0wLDg2''@;'; put 'put ''NDAwPT0rK29yJiYoUGkuVD1vcj0wLCsreGksKytQaS5EKSksNjA9PT14aSlTcj1Vbj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0sT2k9MztlbHNlIGlmKDA9PT14aSlTcj1Vbj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLE9pPTY7ZWxzZXt4aT42MCYmLS14aTt2YXIgWmE9bmV3IERhdGUoMTkw''@;'; put 'put ''MCwwLDEpO1phLnNldERhdGUoWmEuZ2V0RGF0ZSgpK3hpLTEpLFNyPVtaYS5nZXRGdWxsWWVhcigpLFphLmdldE1vbnRoKCkrMSxaYS5nZXREYXRlKCldLE9pPVphLmdldERheSgpLHhpPDYwJiYoT2k9KE9pKzYpJTcpLFVuJiYoT2k9ZnVuY3Rpb24gc28obG4sRW4pe0VuWzBdLT01ODE7dmFy''@;'; put 'put ''IFVuPWxuLmdldERheSgpO3JldHVybiBsbjw2MCYmKFVuPShVbis2KSU3KSxVbn0oWmEsU3IpKX1yZXR1cm4gUGkueT1TclswXSxQaS5tPVNyWzFdLFBpLmQ9U3JbMl0sUGkuUz1vciU2MCxvcj1NYXRoLmZsb29yKG9yLzYwKSxQaS5NPW9yJTYwLG9yPU1hdGguZmxvb3Iob3IvNjApLFBpLkg9''@;'; put 'put ''b3IsUGkucT1PaSxQaX1PdFs1XT1PdFs2M109JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLE90WzZdPU90WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxPdFs3XT1PdFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLE90WzhdPU90WzY2XT0nIiQi''@;'; put 'put ''IywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxPdFs0MV09J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLE90WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsT3RbNDNdPSdfKCogIywj''@;'; put 'put ''IzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhAXyknLE90WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxSLnBhcnNlX2RhdGVfY29kZT1Ubjt2YXIgcnI9bmV3IERhdGUoMTg5OSwxMSwzMSww''@;'; put 'put ''LDAsMCksU249cnIuZ2V0VGltZSgpLGxyPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBYbihsbixFbil7dmFyIFVuPWxuLmdldFRpbWUoKTtyZXR1cm4gRW4/VW4tPTEyNjIzMDRlNTpsbj49bHImJihVbis9ODY0ZTUpLChVbi0oU24rNmU0Kihsbi5nZXRUaW1lem9uZU9mZnNl''@;'; put 'put ''dCgpLXJyLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIEJuPSIiLGZyPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJk''@;'; put 'put ''IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sYnI9ZnJbQm4udG9Mb3dlckNhc2UoKV18fGZyWyJlbi11cyJdLGVyPWV0KGJyKSxNaT0iJCIsRmk9IiIsTGk9IiwiLGtyPSIuIixWbj0iLyI7ZnVuY3Rpb24gRm4obG4pe3N3aXRjaCgoQm58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpo''@;'; put 'put ''LXR3IjpsblsyN109IlskLTQwNF1lL20vZCIsbG5bMjhdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJk''@;'; put 'put ''Ilx1NjVlNSInLGxuWzMyXT0naGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1''@;'; put 'put ''NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM2XT0iWyQtNDA0XWUvbS9kIixsbls1MF09IlskLTQwNF1lL20vZCIsbG5bNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2''@;'; put 'put ''NjQyIm1tIlx1NTIwNiInLGxuWzUzXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1''@;'; put 'put ''NjY0MiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109IlskLTQwNF1lL20vZCIsbG5bNThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNu''@;'; put 'put ''IjpsblsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bMjhdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLSJkIi0ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2giXHU2NWY2''@;'; put 'put ''Im1tIlx1NTIwNiInLGxuWzMzXT0naCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1''@;'; put 'put ''NzlkMiInLGxuWzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdt''@;'; put 'put ''Ilx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU3XT0neXl5eSJcdTVlNzQibSJcdTY3''@;'; put 'put ''MDgiJyxsbls1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJqYS1qcCI6bG5bMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1''@;'; put 'put ''NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsbG5bMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCIn''@;'; put 'put ''LGxuWzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszNl09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1''@;'; put 'put ''M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzU4XT0n''@;'; put 'put ''WyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJrby1rciI6bG5bMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsblsyOF09Im1tLWRkIixsblsyOV09Im1tLWRkIixsblszMF09Im1tLWRkLXl5IixsblszMV09J3l5eXkiXHVi''@;'; put 'put ''MTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLGxuWzMyXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCInLGxuWzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsbG5bMzRdPSJ5eXl5LW1tLWRkIixsblszNV09Inl5eXktbW0tZGQiLGxuWzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1''@;'; put 'put ''NjcwOCIgZGQiXHU2NWU1IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsbls1MV09Im1tLWRkIixsbls1Ml09Inl5eXktbW0tZGQiLGxuWzUzXT0ieXl5eS1tbS1kZCIsbG5bNTRdPSJtbS1kZCIsbG5bNTVdPSJ5eXl5LW1tLWRkIixsbls1Nl09Inl5eXkt''@;'; put 'put ''bW0tZGQiLGxuWzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6bG5bNTldPScidCIwJyxsbls2MF09JyJ0IjAuMDAnLGxuWzYxXT0nInQiIywjIzAnLGxuWzYyXT0nInQiIywjIzAuMDAnLGxuWzY3XT0idDAl''@;'; put 'put ''Iixsbls2OF09InQwLjAwJSIsbG5bNjldPSJ0IyA/Lz8iLGxuWzcwXT0idCMgPz8vPz8iLGxuWzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxsbls3Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5bNzNdPSdc''@;'; put 'put ''dTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLGxuWzc0XT0nXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxsbls3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc3XT0nXHUwZTI3Ii8i''@;'; put 'put ''XHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUw''@;'; put 'put ''ZTE3XHUwZTE3LjAnLGxuWzgxXT0iZC9tL2JiIn19Ui5fZ2VuZXJhbF9pbnQ9ZnVuY3Rpb24gWmkobG4pe3JldHVybiBsbi50b1N0cmluZygxMCl9O3ZhciB5aT1mdW5jdGlvbigpe3ZhciBFbj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBVbihIaSl7cmV0dXJuLTE9PUhp''@;'; put 'put ''LmluZGV4T2YoIi4iKT9IaTpIaS5yZXBsYWNlKEVuLCIkMSIpfXZhciB4aT0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxvcj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24obWEpe3ZhciBEaT1mdW5jdGlvbiBaYShIaSl7dmFyIERpLG1hPU1hdGguZmxvb3IoTWF0aC5sb2co''@;'; put 'put ''TWF0aC5hYnMoSGkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIERpPW1hPj0tNCYmbWE8PS0xP0hpLnRvUHJlY2lzaW9uKDEwK21hKTpNYXRoLmFicyhtYSk8PTk/ZnVuY3Rpb24gU3IoSGkpe3ZhciBtYT1IaTwwPzEyOjExLERpPVVuKEhpLnRvRml4ZWQoMTIpKTtyZXR1cm4gRGkubGVuZ3RoPD1t''@;'; put 'put ''YXx8KERpPUhpLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD1tYT9EaTpIaS50b0V4cG9uZW50aWFsKDUpfShIaSk6MTA9PT1tYT9IaS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gUGkoSGkpe3ZhciBtYT1VbihIaS50b0ZpeGVkKDExKSk7cmV0dXJuIG1hLmxlbmd0aD4oSGk8''@;'; put 'put ''MD8xMjoxMSl8fCIwIj09PW1hfHwiLTAiPT09bWE/SGkudG9QcmVjaXNpb24oNik6bWF9KEhpKSxVbihmdW5jdGlvbiBPaShIaSl7cmV0dXJuLTE9PUhpLmluZGV4T2YoIkUiKT9IaTpIaS5yZXBsYWNlKHhpLCIkMUUiKS5yZXBsYWNlKG9yLCIkMTAkMiIpfShEaS50b1VwcGVyQ2FzZSgpKSl9''@;'; put 'put ''KG1hKTtyZXR1cm4iLCI9PT1MaSYmIi4iPT09a3I/RGk6RGkucmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9uKGNzKXtyZXR1cm4iLCI9PWNzP0xpOmtyfSl9fSgpO2Z1bmN0aW9uIF9hKGxuLEVuKXtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6cmV0dXJuIGxuO2Nhc2UiYm9vbGVhbiI6''@;'; put 'put ''cmV0dXJuIGxuPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxsbik9PT1sbj9sbi50b1N0cmluZygxMCk6eWkobG4pO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09bG4pcmV0dXJuIiI7aWYobG4gaW5zdGFuY2VvZiBEYXRlKXJldHVy''@;'; put 'put ''biB5dSgxNCxYbihsbixFbiYmRW4uZGF0ZTE5MDQpLEVuKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK2xuKX1SLl9nZW5lcmFsX251bT15aSxSLl9nZW5lcmFsPV9hO3ZhciBpYT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0''@;'; put 'put ''XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxpdCgiIik7ZnVuY3Rpb24gTG8obG4sRW4sVW4seGkpe3ZhciBaYSxvcj0iIixPaT0wLFNyPTAsUGk9VW4ueSxIaT0wO3N3aXRjaChsbil7Y2FzZSA5ODpQaT1Vbi55KzU0MztjYXNlIDEyMTpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNl''@;'; put 'put ''IDE6Y2FzZSAyOlphPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6WmE9UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5tLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEV0W1VuLm0tMV1bMV07Y2FzZSA1OnJl''@;'; put 'put ''dHVybiBFdFtVbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEV0W1VuLm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5kLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGN0W1VuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGN0''@;'; put 'put ''W1VuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9MSsoVW4uSCsxMSklMTIsSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKEVuLmxlbmd0aCl7Y2Fz''@;'; put 'put ''ZSAxOmNhc2UgMjpaYT1Vbi5ILEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDc3OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4uTSxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQg''@;'; put 'put ''bWludXRlIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDExNTppZigicyIhPUVuJiYic3MiIT1FbiYmIi4wIiE9RW4mJiIuMDAiIT1FbiYmIi4wMDAiIT1Fbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIitFbjtyZXR1cm4gMCE9PVVuLnV8fCJzIiE9RW4mJiJzcyIhPUVuPyhTcj14aT49Mj8z''@;'; put 'put ''PT09eGk/MWUzOjEwMDoxPT09eGk/MTA6MSwoT2k9TWF0aC5yb3VuZChTciooVW4uUytVbi51KSkpPj02MCpTciYmKE9pPTApLCJzIj09PUVuPzA9PT1PaT8iMCI6IiIrT2kvU3I6KG9yPVEoT2ksMit4aSksInNzIj09PUVuP29yLnN1YnN0cigwLDIpOiIuIitvci5zdWJzdHIoMixFbi5sZW5n''@;'; put 'put ''dGgtMSkpKTpRKFVuLlMsRW4ubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaChFbil7Y2FzZSJbaF0iOmNhc2UiW2hoXSI6Y2FzZSJbXHUwZTBhXSI6Y2FzZSJbXHUwZTBhXHUwZTBhXSI6WmE9MjQqVW4uRCtVbi5IO2JyZWFrO2Nhc2UiW21dIjpjYXNlIlttbV0iOmNhc2UiW1x1MGUxOV0iOmNhc2Ui''@;'; put 'put ''W1x1MGUxOVx1MGUxOV0iOlphPTYwKigyNCpVbi5EK1VuLkgpK1VuLk07YnJlYWs7Y2FzZSJbc10iOmNhc2UiW3NzXSI6Y2FzZSJbXHUwZTE3XSI6Y2FzZSJbXHUwZTE3XHUwZTE3XSI6WmE9NjAqKDYwKigyNCpVbi5EK1VuLkgpK1VuLk0pK01hdGgucm91bmQoVW4uUytVbi51KTticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93ImJhZCBhYnN0aW1lIGZvcm1hdDogIitFbn1IaT0zPT09RW4ubGVuZ3RoPzE6MjticmVhaztjYXNlIDEwMTpaYT1QaSxIaT0xO2JyZWFrO2Nhc2UgMzYyMzpaYT1Vbi5kLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDQ6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNh''@;'; put 'put ''c2UgMjpaYT1Vbi5tLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEV0W1VuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBFdFtVbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEV0W1VuLm0tMV1bMl19YnJlYWs7Y2FzZSAzNjExOnN3aXRjaChQaT1Vbi55KzU0MyxFbi5sZW5ndGgpe2Nh''@;'; put 'put ''c2UgMTpjYXNlIDI6WmE9UGklMTAwLEhpPTI7YnJlYWs7ZGVmYXVsdDpaYT1QaSUxZTQsSGk9NH1icmVhaztjYXNlIDM1OTQ6WmE9VW4uSCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA5OlphPVVuLk0sSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNzpaYT1Vbi5TLEhpPUVuLmxlbmd0''@;'; put 'put ''aDticmVhaztkZWZhdWx0OnRocm93IGxuLnRvU3RyaW5nKDE2KX12YXIgbWE9SGk+MD9RKFphLEhpKToiIjtyZXR1cm4oOTA9PWxuP0VuLmNoYXJDb2RlQXQoMSk8MzU4NDpsbjwzNTg0KT9tYTptYS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKERpKXtyZXR1cm4gaWFbK0RpXX0pfWZ1bmN0''@;'; put 'put ''aW9uIE9hKGxuKXtpZihsbi5sZW5ndGg8PTMpcmV0dXJuIGxuO2Zvcih2YXIgVW49bG4ubGVuZ3RoJTMseGk9bG4uc3Vic3RyKDAsVW4pO1VuIT1sbi5sZW5ndGg7VW4rPTMpeGkrPSh4aS5sZW5ndGg+MD8iLCI6IiIpK2xuLnN1YnN0cihVbiwzKTtyZXR1cm4geGl9dmFyIGhvPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIEVuPS8lL2c7ZnVuY3Rpb24gb3Iod24sWnQpe3ZhciBubix4bj13bi5pbmRleE9mKCJFIiktd24uaW5kZXhPZigiLiIpLTE7aWYod24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVp0KXJldHVybiIwLjBFKzAiO2lmKFp0PDApcmV0dXJuIi0iK29yKHduLC1adCk7dmFyIHpu''@;'; put 'put ''PXduLmluZGV4T2YoIi4iKTstMT09PXpuJiYoem49d24uaW5kZXhPZigiRSIpKTt2YXIgeXI9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpJXpuO2lmKHlyPDAmJih5cis9em4pLC0xPT09KG5uPShadC9NYXRoLnBvdygxMCx5cikpLnRvUHJlY2lzaW9uKHhuKzErKHpuK3ly''@;'; put 'put ''KSV6bikpLmluZGV4T2YoImUiKSl7dmFyIFdyPU1hdGguZmxvb3IoTWF0aC5sb2coWnQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1ubi5pbmRleE9mKCIuIik/bm49bm4uY2hhckF0KDApKyIuIitubi5zdWJzdHIoMSkrIkUrIisoV3Itbm4ubGVuZ3RoK3lyKTpubis9IkUrIisoV3IteXIpOyIw''@;'; put 'put ''LiI9PT1ubi5zdWJzdHIoMCwyKTspbm49KG5uPW5uLmNoYXJBdCgwKStubi5zdWJzdHIoMix6bikrIi4iK25uLnN1YnN0cigyK3puKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO25uPW5uLnJlcGxhY2UoL1wrLS8sIi0iKX1ubj1ubi5yZXBsYWNl''@;'; put 'put ''KC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKG9pLG5pLFhpLFVpKXtyZXR1cm4gbmkrWGkrVWkuc3Vic3RyKDAsKHpuK3lyKSV6bikrIi4iK1VpLnN1YnN0cih5cikrIkUifSl9ZWxzZSBubj1adC50b0V4cG9uZW50aWFsKHhuKTtyZXR1cm4gd24ubWF0Y2goL0VcKzAwJC8p''@;'; put 'put ''JiZubi5tYXRjaCgvZVsrLV1cZCQvKSYmKG5uPW5uLnN1YnN0cigwLG5uLmxlbmd0aC0xKSsiMCIrbm4uY2hhckF0KG5uLmxlbmd0aC0xKSksd24ubWF0Y2goL0VcLS8pJiZubi5tYXRjaCgvZVwrLykmJihubj1ubi5yZXBsYWNlKC9lXCsvLCJlIikpLG5uLnJlcGxhY2UoImUiLCJFIil9dmFy''@;'; put 'put ''IE9pPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxaYT0vXiMqMCpcLihbMCNdKykvLEhpPS9cKS4qWzAjXS8sbWE9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIERpKHduKXtmb3IodmFyIG5uLFp0PSIiLHhuPTA7eG4hPXduLmxlbmd0aDsrK3huKXN3aXRjaChubj13bi5jaGFyQ29k''@;'; put 'put ''ZUF0KHhuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlp0Kz0iICI7YnJlYWs7Y2FzZSA0ODpadCs9IjAiO2JyZWFrO2RlZmF1bHQ6WnQrPVN0cmluZy5mcm9tQ2hhckNvZGUobm4pfXJldHVybiBadH1mdW5jdGlvbiBjcyh3bixadCl7dmFyIG5uPU1hdGgucG93KDEwLFp0KTtyZXR1cm4iIitN''@;'; put 'put ''YXRoLnJvdW5kKHduKm5uKS9ubn1mdW5jdGlvbiBZbyh3bixadCl7aWYoWnQ+MTEpcmV0dXJuIFlvKHduLDExKSpNYXRoLnBvdygxMCxadC0xMSk7dmFyIG5uPXduLU1hdGguZmxvb3Iod24pLHhuPU1hdGgucG93KDEwLFp0KTtyZXR1cm4gWnQ8KCIiK01hdGgucm91bmQobm4qeG4pKS5sZW5n''@;'; put 'put ''dGg/MDpNYXRoLnJvdW5kKG5uKnhuKX1mdW5jdGlvbiBFbCh3bixadCxubil7aWYoNDA9PT13bi5jaGFyQ29kZUF0KDApJiYhWnQubWF0Y2goSGkpKXt2YXIgeG49WnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP0Vs''@;'; put 'put ''KCJuIix4bixubik6IigiK0VsKCJuIix4biwtbm4pKyIpIn1pZig0ND09PVp0LmNoYXJDb2RlQXQoWnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiB4aSh3bixadCxubil7Zm9yKHZhciB4bj1adC5sZW5ndGgtMTs0ND09PVp0LmNoYXJDb2RlQXQoeG4tMSk7KS0teG47cmV0dXJuIGhvKHdu''@;'; put 'put ''LFp0LnN1YnN0cigwLHhuKSxubi9NYXRoLnBvdygxMCwzKihadC5sZW5ndGgteG4pKSl9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gVW4od24sWnQsbm4pe3ZhciB4bj1adC5yZXBsYWNlKEVuLCIiKSx6bj1adC5sZW5ndGgteG4ubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiBobyh3bix4bixubipNYXRoLnBvdygxMCwyKnpuKSkrRygiJSIsem4pfSh3bixadCxubik7aWYoLTEhPT1adC5pbmRleE9mKCJFIikpcmV0dXJuIG9yKFp0LG5uKTtpZigzNj09PVp0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK0VsKHduLFp0LnN1YnN0cigiICI9PVp0LmNoYXJBdCgx''@;'; put 'put ''KT8yOjEpLG5uKTt2YXIgem4seXIsV3Isb2ksbmk9TWF0aC5hYnMobm4pLFhpPW5uPDA/Ii0iOiIiO2lmKFp0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBYaStOZShuaSxadC5sZW5ndGgpO2lmKFp0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KHpuPU5lKG5uLDApKSYmKHpuPSIiKSx6''@;'; put 'put ''bi5sZW5ndGg+WnQubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtpZih5cj1adC5tYXRjaChPaSkpcmV0dXJuIGZ1bmN0aW9uIFNyKHduLFp0LG5uKXt2YXIgeG49cGFyc2VJbnQod25bNF0sMTApLHpuPU1hdGgucm91bmQoWnQqeG4pLHlyPU1hdGgu''@;'; put 'put ''Zmxvb3Ioem4veG4pLFdyPXpuLXlyKnhuLG9pPXhuO3JldHVybiBubisoMD09PXlyPyIiOiIiK3lyKSsiICIrKDA9PT1Xcj9HKCIgIix3blsxXS5sZW5ndGgrMSt3bls0XS5sZW5ndGgpOm9lKFdyLHduWzFdLmxlbmd0aCkrd25bMl0rIi8iK3duWzNdK1Eob2ksd25bNF0ubGVuZ3RoKSl9KHly''@;'; put 'put ''LG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK05lKG5pLFp0Lmxlbmd0aC1adC5pbmRleE9mKCIwIikpO2lmKHlyPVp0Lm1hdGNoKFphKSlyZXR1cm4gem49Y3Mobm4seXJbMV0ubGVuZ3RoKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaSh5clsxXSkpLnJlcGxh''@;'; put 'put ''Y2UoL1wuJC8sIi4iK0RpKHlyWzFdKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFRvLHhzKXtyZXR1cm4iLiIreHMrRygiMCIsRGkoeXJbMV0pLmxlbmd0aC14cy5sZW5ndGgpfSksLTEhPT1adC5pbmRleE9mKCIwLiIpP3puOnpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWnQ9WnQu''@;'; put 'put ''cmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSx5cj1adC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIFhpK2NzKG5pLHlyWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8seXJbMV0u''@;'; put 'put ''bGVuZ3RoPyIwLiI6Ii4iKTtpZih5cj1adC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gWGkrT2EoTmUobmksMCkpO2lmKHlyPVp0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitFbCh3bixadCwtbm4pOk9hKCIiKyhNYXRoLmZsb29yKG5uKStm''@;'; put 'put ''dW5jdGlvbiB4bCh3bixadCl7cmV0dXJuIFp0PCgiIitNYXRoLnJvdW5kKCh3bi1NYXRoLmZsb29yKHduKSkqTWF0aC5wb3coMTAsWnQpKSkubGVuZ3RoPzE6MH0obm4seXJbMV0ubGVuZ3RoKSkpKyIuIitRKFlvKG5uLHlyWzFdLmxlbmd0aCkseXJbMV0ubGVuZ3RoKTtpZih5cj1adC5tYXRj''@;'; put 'put ''aCgvXiMsIyosIzAvKSlyZXR1cm4gRWwod24sWnQucmVwbGFjZSgvXiMsIyosLywiIiksbm4pO2lmKHlyPVp0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiB6bj1rKEVsKHduLFp0LnJlcGxhY2UoL1tcXC1dL2csIiIpLG5uKSksV3I9MCxrKGsoWnQucmVwbGFjZSgv''@;'; put 'put ''XFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihUbyl7cmV0dXJuIFdyPHpuLmxlbmd0aD96bi5jaGFyQXQoV3IrKyk6IjAiPT09VG8/IjAiOiIifSkpO2lmKFp0Lm1hdGNoKG1hKSlyZXR1cm4iKCIrKHpuPUVsKHduLCIjIyMjIyMjIyMjIixubikpLnN1YnN0cigwLDMpKyIpICIr''@;'; put 'put ''em4uc3Vic3RyKDMsMykrIi0iK3puLnN1YnN0cig2KTt2YXIgVWk9IiI7aWYoeXI9WnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbih5cls0XS5sZW5ndGgsNyksb2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITEpLHpuPSIiK1hpLCIg''@;'; put 'put ''Ij09KFVpPWhvKCJuIix5clsxXSxvaVsxXSkpLmNoYXJBdChVaS5sZW5ndGgtMSkmJihVaT1VaS5zdWJzdHIoMCxVaS5sZW5ndGgtMSkrIjAiKSx6bis9VWkreXJbMl0rIi8iK3lyWzNdLChVaT1nZShvaVsyXSxXcikpLmxlbmd0aDx5cls0XS5sZW5ndGgmJihVaT1EaSh5cls0XS5zdWJzdHIo''@;'; put 'put ''eXJbNF0ubGVuZ3RoLVVpLmxlbmd0aCkpK1VpKSx6bis9VWk7aWYoeXI9WnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKE1hdGgubWF4KHlyWzFdLmxlbmd0aCx5cls0XS5sZW5ndGgpLDcpLFhpKygob2k9S3QobmksTWF0aC5wb3co''@;'; put 'put ''MTAsV3IpLTEsITApKVswXXx8KG9pWzFdPyIiOiIwIikpKyIgIisob2lbMV0/b2Uob2lbMV0sV3IpK3lyWzJdKyIvIit5clszXStnZShvaVsyXSxXcik6RygiICIsMipXcisxK3lyWzJdLmxlbmd0aCt5clszXS5sZW5ndGgpKTtpZih5cj1adC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gem49''@;'; put 'put ''TmUobm4sMCksWnQubGVuZ3RoPD16bi5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe3puPSIiK25uLnRvRml4ZWQoTWF0aC5taW4oeXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgv''@;'; put 'put ''KFteMF0pMCskLywiJDEiKSxXcj16bi5pbmRleE9mKCIuIik7dmFyIG5vPVp0LmluZGV4T2YoIi4iKS1XcixqYT1adC5sZW5ndGgtem4ubGVuZ3RoLW5vO3JldHVybiBEaShadC5zdWJzdHIoMCxubykrem4rWnQuc3Vic3RyKFp0Lmxlbmd0aC1qYSkpfWlmKHlyPVp0Lm1hdGNoKC9eMDAsMDAw''@;'; put 'put ''XC4oWyMwXSowKSQvKSlyZXR1cm4gV3I9WW8obm4seXJbMV0ubGVuZ3RoKSxubjwwPyItIitFbCh3bixadCwtbm4pOk9hKGZ1bmN0aW9uIF91KHduKXtyZXR1cm4gd248MjE0NzQ4MzY0NyYmd24+LTIxNDc0ODM2NDg/IiIrKHduPj0wPzB8d246d24tMXwwKToiIitNYXRoLmZsb29yKHduKX0o''@;'; put 'put ''bm4pKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFRvKXtyZXR1cm4iMDAsIisoVG8ubGVuZ3RoPDM/USgwLDMtVG8ubGVuZ3RoKToiIikrVG99KSsiLiIrUShXcix5clsxXS5sZW5ndGgpO3N3aXRjaChadCl7Y2FzZSIjIyMsIyMwLjAwIjpy''@;'; put 'put ''ZXR1cm4gRWwod24sIiMsIyMwLjAwIixubik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIHZhPU9hKE5lKG5pLDApKTtyZXR1cm4iMCIhPT12YT9YaSt2YToiIjtjYXNlIiMjIywjIyMuMDAiOnJldHVybiBFbCh3biwiIyMjLCMjMC4wMCIsbm4pLnJlcGxhY2Uo''@;'; put 'put ''L14wXC4vLCIuIik7Y2FzZSIjLCMjIy4wMCI6cmV0dXJuIEVsKHduLCIjLCMjMC4wMCIsbm4pLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrWnQrInwiKX1mdW5jdGlvbiBnbih3bixadCl7dmFyIG5uLHhuPXduLmluZGV4T2YoIkUi''@;'; put 'put ''KS13bi5pbmRleE9mKCIuIiktMTtpZih3bi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09WnQpcmV0dXJuIjAuMEUrMCI7aWYoWnQ8MClyZXR1cm4iLSIrZ24od24sLVp0KTt2YXIgem49d24uaW5kZXhPZigiLiIpOy0xPT09em4mJih6bj13bi5pbmRleE9mKCJFIikpO3ZhciB5cj1NYXRo''@;'; put 'put ''LmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSklem47aWYoeXI8MCYmKHlyKz16biksIShubj0oWnQvTWF0aC5wb3coMTAseXIpKS50b1ByZWNpc2lvbih4bisxKyh6bit5ciklem4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgV3I9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cx''@;'; put 'put ''MEUpOy0xPT09bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgwKSsiLiIrbm4uc3Vic3RyKDEpKyJFKyIrKFdyLW5uLmxlbmd0aCt5cik6bm4rPSJFKyIrKFdyLXlyKSxubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxm''@;'; put 'put ''dW5jdGlvbihvaSxuaSxYaSxVaSl7cmV0dXJuIG5pK1hpK1VpLnN1YnN0cigwLCh6bit5ciklem4pKyIuIitVaS5zdWJzdHIoeXIpKyJFIn0pfWVsc2Ugbm49WnQudG9FeHBvbmVudGlhbCh4bik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1u''@;'; put 'put ''bi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5sZW5ndGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0Y2goL2VcKy8pJiYobm49bm4ucmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfWZ1bmN0aW9uIGtuKHduLFp0LG5uKXtpZig0MD09PXdu''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJiFadC5tYXRjaChIaSkpe3ZhciB4bj1adC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gbm4+PTA/a24oIm4iLHhuLG5uKToiKCIra24oIm4iLHhuLC1ubikrIikifWlmKDQ0PT09WnQuY2hhckNvZGVB''@;'; put 'put ''dChadC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIEZmKHduLFp0LG5uKXtmb3IodmFyIHhuPVp0Lmxlbmd0aC0xOzQ0PT09WnQuY2hhckNvZGVBdCh4bi0xKTspLS14bjtyZXR1cm4gaG8od24sWnQuc3Vic3RyKDAseG4pLG5uL01hdGgucG93KDEwLDMqKFp0Lmxlbmd0aC14bikpKX0od24s''@;'; put 'put ''WnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiB5ZCh3bixadCxubil7dmFyIHhuPVp0LnJlcGxhY2UoRW4sIiIpLHpuPVp0Lmxlbmd0aC14bi5sZW5ndGg7cmV0dXJuIGhvKHduLHhuLG5uKk1hdGgucG93KDEwLDIqem4pKStHKCIlIix6bil9KHduLFp0LG5u''@;'; put 'put ''KTtpZigtMSE9PVp0LmluZGV4T2YoIkUiKSlyZXR1cm4gZ24oWnQsbm4pO2lmKDM2PT09WnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIra24od24sWnQuc3Vic3RyKCIgIj09WnQuY2hhckF0KDEpPzI6MSksbm4pO3ZhciB6bix5cixXcixvaSxuaT1NYXRoLmFicyhubiksWGk9bm48MD8iLSI6''@;'; put 'put ''IiI7aWYoWnQubWF0Y2goL14wMCskLykpcmV0dXJuIFhpK1EobmksWnQubGVuZ3RoKTtpZihadC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiB6bj0iIitubiwwPT09bm4mJih6bj0iIiksem4ubGVuZ3RoPlp0Lmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkr''@;'; put 'put ''em47aWYoeXI9WnQubWF0Y2goT2kpKXJldHVybiBmdW5jdGlvbiBQaSh3bixadCxubil7cmV0dXJuIG5uKygwPT09WnQ/IiI6IiIrWnQpK0coIiAiLHduWzFdLmxlbmd0aCsyK3duWzRdLmxlbmd0aCl9KHlyLG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK1EobmksWnQu''@;'; put 'put ''bGVuZ3RoLVp0LmluZGV4T2YoIjAiKSk7aWYoeXI9WnQubWF0Y2goWmEpKXJldHVybiB6bj0oem49KCIiK25uKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaSh5clsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0RpKHlyWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihUbyx4''@;'; put 'put ''cyl7cmV0dXJuIi4iK3hzK0coIjAiLERpKHlyWzFdKS5sZW5ndGgteHMubGVuZ3RoKX0pLC0xIT09WnQuaW5kZXhPZigiMC4iKT96bjp6bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFp0PVp0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIikseXI9WnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJl''@;'; put 'put ''dHVybiBYaSsoIiIrbmkpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLHlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoeXI9WnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIFhpK09hKCIi''@;'; put 'put ''K25pKTtpZih5cj1adC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8iLSIra24od24sWnQsLW5uKTpPYSgiIitubikrIi4iK0coIjAiLHlyWzFdLmxlbmd0aCk7aWYoeXI9WnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIGtuKHduLFp0LnJlcGxhY2UoL14jLCMqLC8s''@;'; put 'put ''IiIpLG5uKTtpZih5cj1adC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gem49ayhrbih3bixadC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFdyPTAsayhrKFp0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVG8pe3JldHVybiBX''@;'; put 'put ''cjx6bi5sZW5ndGg/em4uY2hhckF0KFdyKyspOiIwIj09PVRvPyIwIjoiIn0pKTtpZihadC5tYXRjaChtYSkpcmV0dXJuIigiKyh6bj1rbih3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK3puLnN1YnN0cigzLDMpKyItIit6bi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKHly''@;'; put 'put ''PVp0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oeXJbNF0ubGVuZ3RoLDcpLG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCExKSx6bj0iIitYaSwiICI9PShVaT1obygibiIseXJbMV0sb2lbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEp''@;'; put 'put ''JiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3RoLTEpKyIwIiksem4rPVVpK3lyWzJdKyIvIit5clszXSwoVWk9Z2Uob2lbMl0sV3IpKS5sZW5ndGg8eXJbNF0ubGVuZ3RoJiYoVWk9RGkoeXJbNF0uc3Vic3RyKHlyWzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksem4rPVVpO2lmKHlyPVp0Lm1h''@;'; put 'put ''dGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbihNYXRoLm1heCh5clsxXS5sZW5ndGgseXJbNF0ubGVuZ3RoKSw3KSxYaSsoKG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCEwKSlbMF18fChvaVsxXT8iIjoiMCIpKSsiICIrKG9pWzFdP29l''@;'; put 'put ''KG9pWzFdLFdyKSt5clsyXSsiLyIreXJbM10rZ2Uob2lbMl0sV3IpOkcoIiAiLDIqV3IrMSt5clsyXS5sZW5ndGgreXJbM10ubGVuZ3RoKSk7aWYoeXI9WnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFp0Lmxlbmd0aDw9KHpuPSIiK25uKS5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQu''@;'; put 'put ''bGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMF0rKVwuKFsjMF0rKSQvKSl7em49IiIrbm4udG9GaXhlZChNYXRoLm1pbih5clsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFdyPXpuLmluZGV4T2YoIi4iKTt2YXIgbm89WnQuaW5kZXhP''@;'; put 'put ''ZigiLiIpLVdyLGphPVp0Lmxlbmd0aC16bi5sZW5ndGgtbm87cmV0dXJuIERpKFp0LnN1YnN0cigwLG5vKSt6bitadC5zdWJzdHIoWnQubGVuZ3RoLWphKSl9aWYoeXI9WnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitrbih3bixadCwtbm4pOk9hKCIiK25u''@;'; put 'put ''KS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFRvKXtyZXR1cm4iMDAsIisoVG8ubGVuZ3RoPDM/USgwLDMtVG8ubGVuZ3RoKToiIikrVG99KSsiLiIrUSgwLHlyWzFdLmxlbmd0aCk7dmFyIHZhPU9hKCIiK25pKTtzd2l0Y2goWnQpe2Nhc2Ui''@;'; put 'put ''IyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnJldHVybiIwIiE9PXZhP1hpK3ZhOiIiO2Nhc2UiIywjMDAiOnJldHVybiIwMCIhPT0odmE9USh2YSwyKSk/WGkrdmE6IiI7ZGVmYXVsdDppZihadC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIGtuKHduLFp0LnNsaWNlKDAsWnQu''@;'; put 'put ''bGFzdEluZGV4T2YoIi4iKSksbm4pK0RpKFp0LnNsaWNlKFp0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitadCsifCIpfXJldHVybiBmdW5jdGlvbihadCxubix4bil7cmV0dXJuIjAsMCI9PW5uJiYobm49IiMsIzAwIiksKDB8eG4p''@;'; put 'put ''PT09eG4/a24oWnQsbm4seG4pOkVsKFp0LG5uLHhuKX19KCk7ZnVuY3Rpb24gSmEobG4pe2Zvcih2YXIgRW49W10sVW49ITEseGk9MCxvcj0wO3hpPGxuLmxlbmd0aDsrK3hpKXN3aXRjaChsbi5jaGFyQ29kZUF0KHhpKSl7Y2FzZSAzNDpVbj0hVW47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNh''@;'; put 'put ''c2UgOTI6Kyt4aTticmVhaztjYXNlIDU5OkVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKG9yLHhpLW9yKSxvcj14aSsxfWlmKEVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKG9yKSwhMD09PVVuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK2xuKyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0''@;'; put 'put ''dXJuIEVufVIuX3NwbGl0PUphO3ZhciBCaT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gSXMobG4pe2Zvcih2YXIgRW49MCxVbj0iIix4aT0iIjtFbjxsbi5sZW5ndGg7KXN3aXRjaChVbj1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOlllKGxuLEVuKSYmKEVuKz02''@;'; put 'put ''KSxFbisrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PWxuLmNoYXJDb2RlQXQoKytFbikmJkVuPGxuLmxlbmd0aDspOysrRW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpFbis9MjticmVhaztjYXNlIkAiOisrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWxuLmNoYXJBdChFbisx''@;'; put 'put ''KXx8IjIiPT09bG4uY2hhckF0KEVuKzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNh''@;'; put 'put ''c2UiXHU0ZTBhIjppZigiQS9QIj09PWxuLnN1YnN0cihFbiwzKS50b1VwcGVyQ2FzZSgpfHwiQU0vUE0iPT09bG4uc3Vic3RyKEVuLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWxuLnN1YnN0cihFbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysr''@;'; put 'put ''RW47YnJlYWs7Y2FzZSJbIjpmb3IoeGk9VW47Il0iIT09bG4uY2hhckF0KEVuKyspJiZFbjxsbi5sZW5ndGg7KXhpKz1sbi5jaGFyQXQoRW4pO2lmKHhpLm1hdGNoKEJpKSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO0VuPGxuLmxlbmd0aCYmKCIwIz8uLEUr''@;'; put 'put ''LSUiLmluZGV4T2YoVW49bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09VW4mJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7bG4uY2hhckF0KCsrRW4pPT09VW47KTticmVhaztjYXNlIioiOisrRW4s''@;'; put 'put ''KCIgIj09bG4uY2hhckF0KEVuKXx8IioiPT1sbi5jaGFyQXQoRW4pKSYmKytFbjticmVhaztjYXNlIigiOmNhc2UiKSI6KytFbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO0VuPGxuLmxl''@;'; put 'put ''bmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrRW4pKT4tMTspO2JyZWFrO2RlZmF1bHQ6KytFbn1yZXR1cm4hMX1mdW5jdGlvbiBQbihsbixFbixVbix4aSl7Zm9yKHZhciBIaSxtYSxEaSxvcj1bXSxPaT0iIixTcj0wLFBpPSIiLFphPSJ0Iixjcz0iSCI7U3I8bG4ubGVu''@;'; put 'put ''Z3RoOylzd2l0Y2goUGk9bG4uY2hhckF0KFNyKSl7Y2FzZSJHIjppZighWWUobG4sU3IpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1BpKyIgaW4gIitsbik7b3Jbb3IubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LFNyKz03O2JyZWFrO2Nhc2UnIic6Zm9y''@;'; put 'put ''KE9pPSIiOzM0IT09KERpPWxuLmNoYXJDb2RlQXQoKytTcikpJiZTcjxsbi5sZW5ndGg7KU9pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKERpKTtvcltvci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSwrK1NyO2JyZWFrO2Nhc2UiXFwiOnZhciBZbz1sbi5jaGFyQXQoKytTcik7b3Jbb3IubGVuZ3RoXT17''@;'; put 'put ''dDoiKCI9PT1Zb3x8IikiPT09WW8/WW86InQiLHY6WW99LCsrU3I7YnJlYWs7Y2FzZSJfIjpvcltvci5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0sU3IrPTI7YnJlYWs7Y2FzZSJAIjpvcltvci5sZW5ndGhdPXt0OiJUIix2OkVufSwrK1NyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1s''@;'; put 'put ''bi5jaGFyQXQoU3IrMSl8fCIyIj09PWxuLmNoYXJBdChTcisxKSl7aWYobnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbiwiMiI9PT1sbi5jaGFyQXQoU3IrMSkpKSlyZXR1cm4iIjtvcltvci5sZW5ndGhdPXt0OiJYIix2OmxuLnN1YnN0cihTciwyKX0sWmE9UGksU3IrPTI7YnJlYWt9Y2Fz''@;'; put 'put ''ZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6UGk9UGkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2Ui''@;'; put 'put ''XHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmlmKEVuPDB8fG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sVW4pKSlyZXR1cm4iIjtmb3IoT2k9UGk7KytTcjxsbi5sZW5ndGgmJmxuLmNoYXJBdChTcikudG9Mb3dlckNhc2UoKT09PVBpOylPaSs9UGk7Im0iPT09UGkmJiJoIj09''@;'; put 'put ''PVphLnRvTG93ZXJDYXNlKCkmJihQaT0iTSIpLCJoIj09PVBpJiYoUGk9Y3MpLG9yW29yLmxlbmd0aF09e3Q6UGksdjpPaX0sWmE9UGk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgX3U9e3Q6UGksdjpQaX07aWYobnVsbD09SGkmJihIaT1UbihFbixVbikpLCJBL1Ai''@;'; put 'put ''PT09bG4uc3Vic3RyKFNyLDMpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoX3Uudj1IaS5IPj0xMj8iUCI6IkEiKSxfdS50PSJUIixjcz0iaCIsU3IrPTMpOiJBTS9QTSI9PT1sbi5zdWJzdHIoU3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJihfdS52PUhpLkg+PTEyPyJQTSI6IkFN''@;'; put 'put ''IiksX3UudD0iVCIsU3IrPTUsY3M9ImgiKToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1sbi5zdWJzdHIoU3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJihfdS52PUhpLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSxfdS50PSJUIixTcis9NSxjcz0iaCIp''@;'; put 'put ''OihfdS50PSJ0IiwrK1NyKSxudWxsPT1IaSYmIlQiPT09X3UudClyZXR1cm4iIjtvcltvci5sZW5ndGhdPV91LFphPVBpO2JyZWFrO2Nhc2UiWyI6Zm9yKE9pPVBpOyJdIiE9PWxuLmNoYXJBdChTcisrKSYmU3I8bG4ubGVuZ3RoOylPaSs9bG4uY2hhckF0KFNyKTtpZigiXSIhPT1PaS5zbGlj''@;'; put 'put ''ZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcrT2krInwiO2lmKE9pLm1hdGNoKEJpKSl7aWYobnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbikpKXJldHVybiIiO29yW29yLmxlbmd0aF09e3Q6IloiLHY6T2kudG9Mb3dlckNhc2UoKX0sWmE9T2kuY2hhckF0KDEpfWVs''@;'; put 'put ''c2UgT2kuaW5kZXhPZigiJCIpPi0xJiYoT2k9KE9pLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLElzKGxuKXx8KG9yW29yLmxlbmd0aF09e3Q6InQiLHY6T2l9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1IaSl7Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiYiMCI9PT0o''@;'; put 'put ''UGk9bG4uY2hhckF0KFNyKSk7KU9pKz1QaTtvcltvci5sZW5ndGhdPXt0OiJzIix2Ok9pfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKFBpPWxuLmNoYXJBdChTcikpPi0xOylPaSs9UGk7b3Jbb3IubGVuZ3RoXT17''@;'; put 'put ''dDoibiIsdjpPaX07YnJlYWs7Y2FzZSI/Ijpmb3IoT2k9UGk7bG4uY2hhckF0KCsrU3IpPT09UGk7KU9pKz1QaTtvcltvci5sZW5ndGhdPXt0OlBpLHY6T2l9LFphPVBpO2JyZWFrO2Nhc2UiKiI6KytTciwoIiAiPT1sbi5jaGFyQXQoU3IpfHwiKiI9PWxuLmNoYXJBdChTcikpJiYrK1NyO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiKCI6Y2FzZSIpIjpvcltvci5sZW5ndGhdPXt0OjE9PT14aT8idCI6UGksdjpQaX0sKytTcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoT2k9UGk7U3I8bG4ubGVuZ3RoJiYi''@;'; put 'put ''MDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKytTcikpPi0xOylPaSs9bG4uY2hhckF0KFNyKTtvcltvci5sZW5ndGhdPXt0OiJEIix2Ok9pfTticmVhaztjYXNlIiAiOm9yW29yLmxlbmd0aF09e3Q6UGksdjpQaX0sKytTcjticmVhaztjYXNlIiQiOm9yW29yLmxlbmd0aF09e3Q6InQi''@;'; put 'put ''LHY6TWl9LCsrU3I7YnJlYWs7Y2FzZSIvIjpvcltvci5sZW5ndGhdPW9yLmxlbmd0aD4wJiZJcyhvcltvci5sZW5ndGgtMV0udik/e3Q6InQiLHY6Vm59Ont0OiJ0Iix2OiIvIn0sKytTcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFy''@;'; put 'put ''dHV2d3h6UCIuaW5kZXhPZihQaSkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrUGkrIiBpbiAiK2xuKTtvcltvci5sZW5ndGhdPXt0OiJ0Iix2OlBpfSwrK1NyfXZhciB5ZCxFbD0wLEZmPTA7Zm9yKFNyPW9yLmxlbmd0aC0xLFphPSJ0IjtTcj49MDstLVNyKXN3''@;'; put 'put ''aXRjaChvcltTcl0udCl7Y2FzZSJoIjpjYXNlIkgiOm9yW1NyXS50PWNzLFphPSJoIixFbDwxJiYoRWw9MSk7YnJlYWs7Y2FzZSJzIjooeWQ9b3JbU3JdLnYubWF0Y2goL1wuMCskLykpJiYoRmY9TWF0aC5tYXgoRmYseWRbMF0ubGVuZ3RoLTEpKSxFbDwzJiYoRWw9Myk7Y2FzZSJkIjpjYXNl''@;'; put 'put ''InkiOmNhc2UiTSI6Y2FzZSJlIjpaYT1vcltTcl0udDticmVhaztjYXNlIm0iOiJzIj09PVphJiYob3JbU3JdLnQ9Ik0iLEVsPDImJihFbD0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOkVsPDEmJm9yW1NyXS52Lm1hdGNoKC9bSGhdLykmJihFbD0xKSxFbDwyJiZvcltTcl0udi5t''@;'; put 'put ''YXRjaCgvW01tXS8pJiYoRWw9MiksRWw8MyYmb3JbU3JdLnYubWF0Y2goL1tTc10vKSYmKEVsPTMpfXN3aXRjaChFbCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpIaS51Pj0uNSYmKEhpLnU9MCwrK0hpLlMpLEhpLlM+PTYwJiYoSGkuUz0wLCsrSGkuTSksSGkuTT49NjAmJihIaS5NPTAsKytIaS5I''@;'; put 'put ''KTticmVhaztjYXNlIDI6SGkudT49LjUmJihIaS51PTAsKytIaS5TKSxIaS5TPj02MCYmKEhpLlM9MCwrK0hpLk0pfXZhciBrbixnbj0iIjtmb3IoU3I9MDtTcjxvci5sZW5ndGg7KytTcilzd2l0Y2gob3JbU3JdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2Fz''@;'; put 'put ''ZSJYIjpvcltTcl0udj0iIixvcltTcl0udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUw''@;'; put 'put ''YSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjpvcltTcl0udj1MbyhvcltTcl0udC5jaGFyQ29kZUF0KDApLG9yW1NyXS52LEhpLEZmKSxvcltTcl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihrbj1TcisxO251bGwhPW9yW2tuXSYmKCI/Ij09PShQaT1vcltrbl0udCl8fCJE''@;'; put 'put ''Ij09PVBpfHwoIiAiPT09UGl8fCJ0Ij09PVBpKSYmbnVsbCE9b3Jba24rMV0mJigiPyI9PT1vcltrbisxXS50fHwidCI9PT1vcltrbisxXS50JiYiLyI9PT1vcltrbisxXS52KXx8IigiPT09b3JbU3JdLnQmJigiICI9PT1QaXx8Im4iPT09UGl8fCIpIj09PVBpKXx8InQiPT09UGkmJigiLyI9''@;'; put 'put ''PT1vcltrbl0udnx8IiAiPT09b3Jba25dLnYmJm51bGwhPW9yW2tuKzFdJiYiPyI9PW9yW2tuKzFdLnQpKTspb3JbU3JdLnYrPW9yW2tuXS52LG9yW2tuXT17djoiIix0OiI7In0sKytrbjtnbis9b3JbU3JdLnYsU3I9a24tMTticmVhaztjYXNlIkciOm9yW1NyXS50PSJ0IixvcltTcl0udj1f''@;'; put 'put ''YShFbixVbil9dmFyIFp0LG5uLHduPSIiO2lmKGduLmxlbmd0aD4wKXs0MD09Z24uY2hhckNvZGVBdCgwKT8oWnQ9RW48MCYmNDU9PT1nbi5jaGFyQ29kZUF0KDApPy1FbjpFbixubj1obygibiIsZ24sWnQpKToobm49aG8oIm4iLGduLFp0PUVuPDAmJnhpPjE/LUVuOkVuKSxadDwwJiZvclsw''@;'; put 'put ''XSYmInQiPT1vclswXS50JiYobm49bm4uc3Vic3RyKDEpLG9yWzBdLnY9Ii0iK29yWzBdLnYpKSxrbj0obm49bm4ucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihXcil7cmV0dXJuIi4iPT1Xcj9rcjpMaX0pKS5sZW5ndGgtMTt2YXIgeG49b3IubGVuZ3RoO2ZvcihTcj0wO1NyPG9yLmxlbmd0''@;'; put 'put ''aDsrK1NyKWlmKG51bGwhPW9yW1NyXSYmInQiIT1vcltTcl0udCYmb3JbU3JdLnYuaW5kZXhPZigiLiIpPi0xKXt4bj1TcjticmVha312YXIgem49b3IubGVuZ3RoO2lmKHhuPT09b3IubGVuZ3RoJiYtMT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKFNyPW9yLmxlbmd0aC0xO1NyPj0wOy0tU3Ip''@;'; put 'put ''bnVsbD09b3JbU3JdfHwtMT09PSJuPyIuaW5kZXhPZihvcltTcl0udCl8fChrbj49b3JbU3JdLnYubGVuZ3RoLTE/b3JbU3JdLnY9bm4uc3Vic3RyKDErKGtuLT1vcltTcl0udi5sZW5ndGgpLG9yW1NyXS52Lmxlbmd0aCk6a248MD9vcltTcl0udj0iIjoob3JbU3JdLnY9bm4uc3Vic3RyKDAs''@;'; put 'put ''a24rMSksa249LTEpLG9yW1NyXS50PSJ0Iix6bj1Tcik7a24+PTAmJnpuPG9yLmxlbmd0aCYmKG9yW3puXS52PW5uLnN1YnN0cigwLGtuKzEpK29yW3puXS52KX1lbHNlIGlmKHhuIT09b3IubGVuZ3RoJiYtMT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKGtuPW5uLmluZGV4T2Yoa3IpLTEsU3I9''@;'; put 'put ''eG47U3I+PTA7LS1TcilpZihudWxsIT1vcltTcl0mJi0xIT09Im4/Ii5pbmRleE9mKG9yW1NyXS50KSl7Zm9yKG1hPW9yW1NyXS52LmluZGV4T2YoIi4iKT4tMSYmU3I9PT14bj9vcltTcl0udi5pbmRleE9mKCIuIiktMTpvcltTcl0udi5sZW5ndGgtMSx3bj1vcltTcl0udi5zdWJzdHIobWEr''@;'; put 'put ''MSk7bWE+PTA7LS1tYSlrbj49MCYmKCIwIj09PW9yW1NyXS52LmNoYXJBdChtYSl8fCIjIj09PW9yW1NyXS52LmNoYXJBdChtYSkpJiYod249bm4uY2hhckF0KGtuLS0pK3duKTtvcltTcl0udj13bixvcltTcl0udD0idCIsem49U3J9Zm9yKGtuPj0wJiZ6bjxvci5sZW5ndGgmJihvclt6bl0u''@;'; put 'put ''dj1ubi5zdWJzdHIoMCxrbisxKStvclt6bl0udiksa249bm4uaW5kZXhPZihrcikrMSxTcj14bjtTcjxvci5sZW5ndGg7KytTcilpZihudWxsIT1vcltTcl0mJigtMSE9PSJuPygiLmluZGV4T2Yob3JbU3JdLnQpfHxTcj09PXhuKSl7Zm9yKG1hPW9yW1NyXS52LmluZGV4T2Yoa3IpPi0xJiZT''@;'; put 'put ''cj09PXhuP29yW1NyXS52LmluZGV4T2Yoa3IpKzE6MCx3bj1vcltTcl0udi5zdWJzdHIoMCxtYSk7bWE8b3JbU3JdLnYubGVuZ3RoOysrbWEpa248bm4ubGVuZ3RoJiYod24rPW5uLmNoYXJBdChrbisrKSk7b3JbU3JdLnY9d24sb3JbU3JdLnQ9InQiLHpuPVNyfX19Zm9yKFNyPTA7U3I8b3Iu''@;'; put 'put ''bGVuZ3RoOysrU3IpbnVsbCE9b3JbU3JdJiYibj8iLmluZGV4T2Yob3JbU3JdLnQpPi0xJiYob3JbU3JdLnY9aG8ob3JbU3JdLnQsb3JbU3JdLnYsWnQ9eGk+MSYmRW48MCYmU3I+MCYmIi0iPT09b3JbU3ItMV0udj8tRW46RW4pLnJlcGxhY2UoL1wuL2csa3IpLnJlcGxhY2UoLywvLExpKSxv''@;'; put 'put ''cltTcl0udD0idCIpO3ZhciB5cj0iIjtmb3IoU3I9MDtTciE9PW9yLmxlbmd0aDsrK1NyKW51bGwhPW9yW1NyXSYmKHlyKz1vcltTcl0udik7cmV0dXJuIHlyfVIuaXNfZGF0ZT1JcyxSLl9ldmFsPVBuO3ZhciBocj0vXFtbPTw+XS8sUWw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/Olwu''@;'; put 'put ''XGQqKT8pXF0vO2Z1bmN0aW9uIFlsKGxuLEVuKXtpZihudWxsPT1FbilyZXR1cm4hMTt2YXIgVW49cGFyc2VGbG9hdChFblsyXSk7c3dpdGNoKEVuWzFdKXtjYXNlIj0iOmlmKGxuPT1VbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKGxuPlVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYo''@;'; put 'put ''bG48VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYobG4hPVVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKGxuPj1VbilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihsbjw9VW4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geXUobG4sRW4sVW4pe251bGw9PVVuJiYoVW49e30p''@;'; put 'put ''O3ZhciB4aT0iIjtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6eGk9Im0vZC95eSI9PWxuJiZVbi5kYXRlTkY/VW4uZGF0ZU5GOmxuO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oeGk9MTQ9PWxuJiZVbi5kYXRlTkY/VW4uZGF0ZU5GOihudWxsIT1Vbi50YWJsZT9Vbi50YWJsZTpi''@;'; put 'put ''dClbbG5dKSYmKHhpPVVuLnRhYmxlJiZVbi50YWJsZVtqdFtsbl1dfHxidFtqdFtsbl1dKSxudWxsPT14aSYmKHhpPU90W2xuXXx8IkdlbmVyYWwiKX1pZihZZSh4aSwwKSlyZXR1cm4gX2EoRW4sVW4pO0VuIGluc3RhbmNlb2YgRGF0ZSYmKEVuPVhuKEVuLFVuLmRhdGUxOTA0KSk7dmFyIG9y''@;'; put 'put ''PWZ1bmN0aW9uIEdsKGxuLEVuKXt2YXIgVW49SmEobG4pLHhpPVVuLmxlbmd0aCxvcj1Vblt4aS0xXS5pbmRleE9mKCJAIik7aWYoeGk8NCYmb3I+LTEmJi0teGksVW4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK1VuLmpvaW4oInwi''@;'; put 'put ''KSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgRW4pcmV0dXJuWzQsND09PVVuLmxlbmd0aHx8b3I+LTE/VW5bVW4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKFVuLmxlbmd0aCl7Y2FzZSAxOlVuPW9yPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixVblswXV06W1VuWzBdLFVuWzBd''@;'; put 'put ''LFVuWzBdLCJAIl07YnJlYWs7Y2FzZSAyOlVuPW9yPi0xP1tVblswXSxVblswXSxVblswXSxVblsxXV06W1VuWzBdLFVuWzFdLFVuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOlVuPW9yPi0xP1tVblswXSxVblsxXSxVblswXSxVblsyXV06W1VuWzBdLFVuWzFdLFVuWzJdLCJAIl19dmFyIE9pPUVu''@;'; put 'put ''PjA/VW5bMF06RW48MD9VblsxXTpVblsyXTtpZigtMT09PVVuWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1VblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW3hpLE9pXTtpZihudWxsIT1VblswXS5tYXRjaChocil8fG51bGwhPVVuWzFdLm1hdGNoKGhyKSl7dmFyIFNyPVVuWzBdLm1hdGNoKFFsKSxQ''@;'; put 'put ''aT1VblsxXS5tYXRjaChRbCk7cmV0dXJuIFlsKEVuLFNyKT9beGksVW5bMF1dOllsKEVuLFBpKT9beGksVW5bMV1dOlt4aSxVbltudWxsIT1TciYmbnVsbCE9UGk/MjoxXV19cmV0dXJuW3hpLE9pXX0oeGksRW4pO2lmKFllKG9yWzFdKSlyZXR1cm4gX2EoRW4sVW4pO2lmKCEwPT09RW4pRW49''@;'; put 'put ''IlRSVUUiO2Vsc2UgaWYoITE9PT1FbilFbj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1Fbnx8bnVsbD09RW4pcmV0dXJuIiI7cmV0dXJuIFBuKG9yWzFdLEVuLFVuLG9yWzBdKX1mdW5jdGlvbiBNbChsbixFbil7aWYoIm51bWJlciIhPXR5cGVvZiBFbil7RW49K0VufHwtMTtmb3IodmFyIFVuPTA7''@;'; put 'put ''VW48MzkyOysrVW4paWYobnVsbCE9YnRbVW5dKXtpZihidFtVbl09PWxuKXtFbj1VbjticmVha319ZWxzZSBFbjwwJiYoRW49VW4pO0VuPDAmJihFbj0zOTEpfXJldHVybiBidFtFbl09bG4sRW59Ui5sb2FkPU1sLFIuX3RhYmxlPWJ0LFIuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0''@;'; put 'put ''fSxSLmxvYWRfdGFibGU9ZnVuY3Rpb24oRW4pe2Zvcih2YXIgVW49MDszOTIhPVVuOysrVW4pdm9pZCAwIT09RW5bVW5dJiZNbChFbltVbl0sVW4pfSxSLmluaXRfdGFibGU9YXQsUi5mb3JtYXQ9eXUsUi5nZXRsb2NhbGU9ZnVuY3Rpb24gQnIoKXtyZXR1cm4gQm58fCJlbi1VUyJ9LFIuc2V0''@;'; put 'put ''bG9jYWxlPWZ1bmN0aW9uIF9yKGxuKXtpZihmdW5jdGlvbiBqcihsbil7dmFyIEVuPTA7c3dpdGNoKChCbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihFbj0yNztFbjw9MzY7KytFbilkZWxldGUgbG5bRW5d''@;'; put 'put ''O2ZvcihFbj01MDtFbjw9NTg7KytFbilkZWxldGUgbG5bRW5dO2JyZWFrO2Nhc2UidGgtdGgiOmZvcihFbj01OTtFbjw9NjI7KytFbilkZWxldGUgbG5bRW5dO2ZvcihFbj02NztFbjw9ODE7KytFbilkZWxldGUgbG5bRW5dfX0oYnQpLEJuPWxuLEZuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3Zh''@;'; put 'put ''ciBFbj1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuKTtpZihFbi5mb3JtYXRUb1BhcnRzKXtmb3IodmFyIFVuPUVuLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSx4aT0wO3hpPDc7Kyt4aSljdFt4aV1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7d2Vla2RheToibG9u''@;'; put 'put ''ZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K3hpLDAsMCwwKSlbMF0udmFsdWUsY3RbeGldWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUreGksMCwwLDApKVswXS52YWx1ZTtmb3Io''@;'; put 'put ''dmFyIG9yPTA7b3I8MTI7KytvcilFdFtvcl1bMl09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLG9yLDIsMCwwLDApKVswXS52YWx1ZSxFdFtvcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6InNob3J0''@;'; put 'put ''In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxvciwyLDAsMCwwKSlbMF0udmFsdWUsRXRbb3JdWzBdPUV0W29yXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgT2k9IiIsU3I9MDtTcjxVbi5sZW5ndGg7KytTcil7dmFyIFBpPVVuW1NyXS52YWx1ZTtzd2l0Y2goVW5bU3JdLnR5cGUpe2Nh''@;'; put 'put ''c2UieWVhciI6T2krPTI9PVBpLmxlbmd0aD8ieXkiOiJ5eXl5IjticmVhaztjYXNlIm1vbnRoIjpPaSs9IjEiPT1QaT8ibSI6IjAxIj09UGk/Im1tIjpQaT09RXRbMF1bMV0/Im1tbSI6UGk9PUV0WzBdWzJdPyJtbW1tIjpQaT09RXRbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5''@;'; put 'put ''IjpPaSs9IjUiPT1QaT8iZCI6IjA1Ij09UGk/ImRkIjpQaT09Y3RbMF1bMF0/ImRkZCI6UGk9PWN0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6T2krPVBpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PVBpLmxlbmd0aCYmKFZuPVBpKX19KGxuLm1hdGNoKC9lbi9pKSYm''@;'; put 'put ''bG4ubWF0Y2goL3VzL2kpfHwhbG4pJiYoT2k9Im0vZC95eSIpLGJ0WzE0XT1PaX1lbHNlImphLWpwIj09bG4udG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIFphPUludGwuTnVtYmVyRm9ybWF0KGxuLHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7WmEmJihMaT0oWmEu''@;'; put 'put ''bWF0Y2goLzEoLiopMi8pfHxbXSlbMV0sa3I9KFphLm1hdGNoKC83KC4qKTgvKXx8W10pWzFdKX1mcltsbi50b0xvd2VyQ2FzZSgpXXx8KGZyW2xuLnRvTG93ZXJDYXNlKCldPXsiLiI6a3IsIiwiOkxpfSksZXI9ZXQoYnI9ZnJbbG4udG9Mb3dlckNhc2UoKV18fGZyWyJlbi11cyJdKX0sUi5u''@;'; put 'put ''b3JtYWxpemU9ZnVuY3Rpb24gV28obG4pe2Zvcih2YXIgRW49MCxVbj0wLHhpPSIiLG9yPSIiLE9pPSIiLFNyPWJyLnl8fCJ5IixQaT1Tci50b1VwcGVyQ2FzZSgpLFphPWJyLmR8fCJkIixIaT1aYS50b1VwcGVyQ2FzZSgpLG1hPWJyWyIuIl0sRGk9YnJbIiwiXSxjcz0iMCM/RSstJSIrYnJb''@;'; put 'put ''IiwiXSttYTtFbjxsbi5sZW5ndGg7KXN3aXRjaCh4aT1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOkVuKyssT2krPXhpO2JyZWFrO2Nhc2UnIic6Zm9yKE9pKz14aTszNCE9PShVbj1sbi5jaGFyQ29kZUF0KCsrRW4pKSYmRW48bG4ubGVuZ3RoOylPaSs9U3RyaW5nLmZyb21DaGFyQ29kZShVbik7''@;'; put 'put ''T2krPSciJywrK0VuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6T2krPWxuLnNsaWNlKEVuLEVuKzIpLEVuKz0yO2JyZWFrO2Nhc2UiQCI6T2krPXhpLCsrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrRW4sT2krPXhpO2JyZWFrO2Nhc2UgU3I6Y2FzZSBQaTpjYXNlIFphOmNhc2UgSGk6T2kr''@;'; put 'put ''PWVyW3hpLnRvTG93ZXJDYXNlKCldLCsrRW47YnJlYWs7Y2FzZSJNIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOk9pKz14aSwrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKG9yPXhpOyJdIiE9PWxu''@;'; put 'put ''LmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOylvcis9bG4uY2hhckF0KEVuKTtPaSs9b3I7YnJlYWs7Y2FzZSBEaTpPaSs9JyInK3hpKyciJywrK0VuO2JyZWFrO2Nhc2UgbWE6aWYoIShFbjxsbi5sZW5ndGgmJihjcy5pbmRleE9mKHhpPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PXhp''@;'; put 'put ''JiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpKSl7T2krPSciJyttYSsnIic7YnJlYWt9eGk9bWEsLS1FbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKE9pKz1lclt4aS50b0xvd2VyQ2FzZSgpXXx8eGk7RW48bG4ubGVuZ3RoJiYoY3MuaW5kZXhP''@;'; put 'put ''Zih4aT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT14aSYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKTspT2krPWVyW3hpLnRvTG93ZXJDYXNlKCldfHx4aTticmVhaztjYXNlIj8iOmZvcihPaSs9eGk7bG4uY2hhckF0KCsrRW4pPT09''@;'; put 'put ''eGk7KU9pKz14aTticmVhaztjYXNlIioiOk9pKz14aSwrK0VuLCgiICI9PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJihPaSs9bG4uY2hhckF0KEVuKSwrK0VuKTticmVhaztjYXNlIigiOmNhc2UiKSI6T2krPXhpLCsrRW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2Ui''@;'; put 'put ''MyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKE9pKz14aTtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7KU9pKz1sbi5jaGFyQXQoRW4pO2JyZWFrO2RlZmF1bHQ6T2krPXhpLCsrRW59cmV0''@;'; put 'put ''dXJuIE9pfSxSLmdldGN1cnJlbmN5PWZ1bmN0aW9uIG5hKCl7cmV0dXJuIEZpfHwiVVNEIn0sUi5zZXRjdXJyZW5jeT1mdW5jdGlvbiBjYShsbil7Rmk9bG4sTWk9dHlwZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KEJuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToi''@;'; put 'put ''c3ltYm9sIixjdXJyZW5jeTpsbn0pLmZvcm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxcc10vZywiIik6IiQifX07YWUoQSk7dmFyIHhlLHRlPXsiR2VuZXJhbCBOdW1iZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBEYXRlIjpBLl90YWJsZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5''@;'; put 'put ''eXkiLCJNZWRpdW0gRGF0ZSI6QS5fdGFibGVbMTVdLCJTaG9ydCBEYXRlIjpBLl90YWJsZVsxNF0sIkxvbmcgVGltZSI6QS5fdGFibGVbMTldLCJNZWRpdW0gVGltZSI6QS5fdGFibGVbMThdLCJTaG9ydCBUaW1lIjpBLl90YWJsZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1c''@;'; put 'put ''XCgiJCIjLCMjMC4wMFxcKScsRml4ZWQ6QS5fdGFibGVbMl0sU3RhbmRhcmQ6QS5fdGFibGVbNF0sUGVyY2VudDpBLl90YWJsZVsxMF0sU2NpZW50aWZpYzpBLl90YWJsZVsxMV0sIlllcy9ObyI6JyJZZXMiOyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxz''@;'; put 'put ''ZSI7QCcsIk9uL09mZiI6JyJZZXMiOyJZZXMiOyJObyI7QCd9LHNlPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1c''@;'; put 'put ''XCgiJCIjLCMjMC4wMFxcKScsMjM6IkdlbmVyYWwiLDI0OiJHZW5lcmFsIiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXkiLDI5OiJtL2QveXkiLDMwOiJtL2QveXkiLDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06''@;'; put 'put ''c3MiLDM1OiJoOm1tOnNzIiwzNjoibS9kL3l5Iiw0MTonXygqICMsIyMwXyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqICgjLCMjMCk7XygiJCIqICItIl8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7Xygq''@;'; put 'put ''ICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6''@;'; put 'put ''Im0vZC95eSIsNTg6Im0vZC95eSIsNTk6IjAiLDYwOiIwLjAwIiw2MToiIywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwp''@;'; put 'put ''Jyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0vZC95eSIsNzI6Im0vZC95eSIsNzM6ImQtbW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDpt''@;'; put 'put ''bTpzcyIsNzg6Im0vZC95eSBoOm1tIiw3OToibW06c3MiLDgwOiJbaF06bW06c3MiLDgxOiJtbXNzLjAifSx3ZT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nOyFmdW5jdGlvbihTKXtTLnZlcnNpb249IjEuMi4wIjt2YXIgaz1mdW5jdGlvbiBSKCl7Zm9yKHZhciBwZT0wLHll''@;'; put 'put ''PW5ldyBBcnJheSgyNTYpLFBlPTA7MjU2IT1QZTsrK1BlKXllW1BlXT1wZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT1QZSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4x''@;'; put 'put ''OnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjE7cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5PCJ1''@;'; put 'put ''Ij9uZXcgSW50MzJBcnJheSh5ZSk6eWV9KCk7Uy50YWJsZT1rLFMuYnN0cj1mdW5jdGlvbiBHKHBlLHllKXtmb3IodmFyIFBlPX55ZSxOZT1wZS5sZW5ndGgtMSxZZT0wO1llPE5lOylQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKyspKV0pPj4+OF5rWzI1NSYoUGVe''@;'; put 'put ''cGUuY2hhckNvZGVBdChZZSsrKSldO3JldHVybiBZZT09PU5lJiYoUGU9UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKSldKSx+UGV9LFMuYnVmPWZ1bmN0aW9uIFEocGUseWUpe2lmKHBlLmxlbmd0aD4xZTQpcmV0dXJuIGZ1bmN0aW9uIG9lKHBlLHllKXtmb3IodmFyIFBlPX55''@;'; put 'put ''ZSxOZT1wZS5sZW5ndGgtNyxZZT0wO1llPE5lOylQZT0oUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSld''@;'; put 'put ''KT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07Zm9yKDtZZTxOZSs3OylQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07cmV0dXJuflBlfShwZSx5''@;'; put 'put ''ZSk7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTMsWWU9MDtZZTxOZTspUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSld''@;'; put 'put ''O2Zvcig7WWU8TmUrMzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0sUy5zdHI9ZnVuY3Rpb24gZ2UocGUseWUpe2Zvcih2YXIgZXQsY3QsUGU9fnllLE5lPTAsWWU9cGUubGVuZ3RoO05lPFllOykoZXQ9cGUuY2hhckNvZGVBdChOZSsrKSk8MTI4P1BlPVBlPj4+''@;'; put 'put ''OF5rWzI1NSYoUGVeZXQpXTpldDwyMDQ4P1BlPShQZT1QZT4+Pjhea1syNTUmKFBlXigxOTJ8ZXQ+PjYmMzEpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZldCkpXTpldD49NTUyOTYmJmV0PDU3MzQ0PyhldD02NCsoMTAyMyZldCksY3Q9MTAyMyZwZS5jaGFyQ29kZUF0KE5lKyspLFBlPShQ''@;'; put 'put ''ZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVeKDI0MHxldD4+OCY3KSldKT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjImNjMpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHxjdD4+NiYxNXwoMyZldCk8PDQpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZjdCkpXSk6UGU9KFBlPShQZT1QZT4+Pjhe''@;'; put 'put ''a1syNTUmKFBlXigyMjR8ZXQ+PjEyJjE1KSldKT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjYmNjMpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZldCkpXTtyZXR1cm5+UGV9fSh4ZT17fSk7dmFyIFhlLHZlPWZ1bmN0aW9uKCl7dmFyIHllLFI9e307ZnVuY3Rpb24gRyhnbil7aWYoIi8iPT1n''@;'; put 'put ''bi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybi0xPT09Z24uc2xpY2UoMCwtMSkuaW5kZXhPZigiLyIpP2duOkcoZ24uc2xpY2UoMCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2UoMCxrbisxKX1mdW5jdGlvbiBRKGduKXtpZigiLyI9''@;'; put 'put ''PWduLmNoYXJBdChnbi5sZW5ndGgtMSkpcmV0dXJuIFEoZ24uc2xpY2UoMCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2Uoa24rMSl9ZnVuY3Rpb24gb2UoZ24sa24peyJzdHJpbmciPT10eXBlb2Yga24mJihrbj1uZXcgRGF0ZShrbikp''@;'; put 'put ''O3ZhciB3bj1rbi5nZXRIb3VycygpO3duPSh3bj13bjw8Nnxrbi5nZXRNaW51dGVzKCkpPDw1fGtuLmdldFNlY29uZHMoKT4+PjEsZ24ud3JpdGVfc2hpZnQoMix3bik7dmFyIFp0PWtuLmdldEZ1bGxZZWFyKCktMTk4MDtadD0oWnQ9WnQ8PDR8a24uZ2V0TW9udGgoKSsxKTw8NXxrbi5nZXRE''@;'; put 'put ''YXRlKCksZ24ud3JpdGVfc2hpZnQoMixadCl9ZnVuY3Rpb24gcGUoZ24pe21uKGduLDApO2Zvcih2YXIga249e30sd249MDtnbi5sPD1nbi5sZW5ndGgtNDspe3ZhciBadD1nbi5yZWFkX3NoaWZ0KDIpLG5uPWduLnJlYWRfc2hpZnQoMikseG49Z24ubCtubix6bj17fTsyMTU4OT09PVp0JiYo''@;'; put 'put ''MSYod249Z24ucmVhZF9zaGlmdCgxKSkmJih6bi5tdGltZT1nbi5yZWFkX3NoaWZ0KDQpKSxubj41JiYoMiZ3biYmKHpuLmF0aW1lPWduLnJlYWRfc2hpZnQoNCkpLDQmd24mJih6bi5jdGltZT1nbi5yZWFkX3NoaWZ0KDQpKSksem4ubXRpbWUmJih6bi5tdD1uZXcgRGF0ZSgxZTMqem4ubXRp''@;'; put 'put ''bWUpKSksZ24ubD14bixrbltadF09em59cmV0dXJuIGtufWZ1bmN0aW9uIFBlKCl7cmV0dXJuIHllfHwoeWU9eSg4MzMzNykpfWZ1bmN0aW9uIE5lKGduLGtuKXtpZig4MD09Z25bMF0mJjc1PT1nblsxXSlyZXR1cm4gRGkoZ24sa24pO2lmKGduLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJDRkIgZmlsZSBzaXplICIrZ24ubGVuZ3RoKyIgPCA1MTIiKTt2YXIgd24sbm4seG4sem4seXIsV3IsWnQ9NTEyLG9pPVtdLG5pPWduLnNsaWNlKDAsNTEyKTttbihuaSwwKTt2YXIgWGk9ZnVuY3Rpb24gWWUoZ24pe2lmKDgwPT1nbltnbi5sXSYmNzU9PWduW2duLmwrMV0pcmV0dXJuWzAs''@;'; put 'put ''MF07Z24uY2hrKE1pLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxnbi5sKz0xNjt2YXIga249Z24ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW2duLnJlYWRfc2hpZnQoMiwidSIpLGtuXX0obmkpO3N3aXRjaCh3bj1YaVswXSl7Y2FzZSAzOlp0PTUxMjticmVhaztjYXNlIDQ6WnQ9NDA5NjticmVh''@;'; put 'put ''aztjYXNlIDA6aWYoMD09WGlbMV0pcmV0dXJuIERpKGduLGtuKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK3duKX01MTIhPT1adCYmbW4obmk9Z24uc2xpY2UoMCxadCksMjgpO3ZhciBVaT1nbi5zbGljZSgwLFp0KTshZnVu''@;'; put 'put ''Y3Rpb24gZXQoZ24sa24pe3ZhciB3bjtzd2l0Y2goZ24ubCs9Mix3bj1nbi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9a24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrd24pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9a24pdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK3duKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK3duKX1nbi5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIiksZ24uY2hrKCIwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCJSZXNlcnZlZDogIil9KG5pLHduKTt2YXIgbm89bmkucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PXduJiYwIT09bm8pdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK25vKTtuaS5sKz00LHpuPW5pLnJlYWRfc2hpZnQoNCwiaSIpLG5p''@;'; put 'put ''LmwrPTQsbmkuY2hrKCIwMDEwMDAwMCIsIk1pbmkgU3RyZWFtIEN1dG9mZiBTaXplOiAiKSx5cj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxubj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxXcj1uaS5yZWFkX3NoaWZ0KDQsImkiKSx4bj1uaS5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIGphPS0xLHZh''@;'; put 'put ''PTA7dmE8MTA5JiYhKChqYT1uaS5yZWFkX3NoaWZ0KDQsImkiKSk8MCk7Kyt2YSlvaVt2YV09amE7dmFyIFRvPWZ1bmN0aW9uIGN0KGduLGtuKXtmb3IodmFyIHduPU1hdGguY2VpbChnbi5sZW5ndGgva24pLTEsWnQ9W10sbm49MTtubjx3bjsrK25uKVp0W25uLTFdPWduLnNsaWNlKG5uKmtu''@;'; put 'put ''LChubisxKSprbik7cmV0dXJuIFp0W3duLTFdPWduLnNsaWNlKHduKmtuKSxadH0oZ24sWnQpO2J0KFdyLHhuLFRvLFp0LG9pKTt2YXIgeHM9ZnVuY3Rpb24ga3QoZ24sa24sd24sWnQpe3ZhciBubj1nbi5sZW5ndGgseG49W10sem49W10seXI9W10sV3I9W10sb2k9WnQtMSxuaT0wLFhpPTAs''@;'; put 'put ''VWk9MCxubz0wO2ZvcihuaT0wO25pPG5uOysrbmkpaWYoeXI9W10sKFVpPW5pK2tuKT49bm4mJihVaS09bm4pLCF6bltVaV0pe1dyPVtdO3ZhciBqYT1bXTtmb3IoWGk9VWk7WGk+PTA7KXtqYVtYaV09ITAsem5bWGldPSEwLHlyW3lyLmxlbmd0aF09WGksV3IucHVzaChnbltYaV0pO3ZhciB2''@;'; put 'put ''YT13bltNYXRoLmZsb29yKDQqWGkvWnQpXTtpZihadDw0Kyhubz00KlhpJm9pKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1hpKyIgNCAiK1p0KTtpZighZ25bdmFdfHxqYVtYaT1Wcyhnblt2YV0sbm8pXSlicmVha314bltVaV09e25vZGVzOnlyLGRhdGE6eTAo''@;'; put 'put ''W1dyXSl9fXJldHVybiB4bn0oVG8sem4sb2ksWnQpO3hzW3puXS5uYW1lPSIhRGlyZWN0b3J5Iixubj4wJiZ5ciE9PWVyJiYoeHNbeXJdLm5hbWU9IiFNaW5pRkFUIikseHNbb2lbMF1dLm5hbWU9IiFGQVQiLHhzLmZhdF9hZGRycz1vaSx4cy5zc3o9WnQ7dmFyIGMwPVtdLGExPVtdLEI4PVtd''@;'; put 'put ''OyhmdW5jdGlvbiBPdChnbixrbix3bixadCxubix4bix6bix5cil7Zm9yKHZhciBubyxXcj0wLG9pPVp0Lmxlbmd0aD8yOjAsbmk9a25bZ25dLmRhdGEsWGk9MCxVaT0wO1hpPG5pLmxlbmd0aDtYaSs9MTI4KXt2YXIgamE9bmkuc2xpY2UoWGksWGkrMTI4KTttbihqYSw2NCksVWk9amEucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSxubz1PbChqYSwwLFVpLW9pKSxadC5wdXNoKG5vKTt2YXIgdmE9e25hbWU6bm8sdHlwZTpqYS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmphLnJlYWRfc2hpZnQoMSksTDpqYS5yZWFkX3NoaWZ0KDQsImkiKSxSOmphLnJlYWRfc2hpZnQoNCwiaSIpLEM6amEucmVhZF9zaGlmdCg0''@;'; put 'put ''LCJpIiksY2xzaWQ6amEucmVhZF9zaGlmdCgxNiksc3RhdGU6amEucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1qYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpJiYodmEuY3Q9S3QoamEsamEubC04''@;'; put 'put ''KSksMCE9PWphLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikmJih2YS5tdD1LdChqYSxqYS5sLTgpKSx2YS5zdGFydD1qYS5yZWFkX3NoaWZ0KDQsImkiKSx2YS5zaXplPWphLnJlYWRfc2hpZnQoNCwiaSIpLHZhLnNpemU8''@;'; put 'put ''MCYmdmEuc3RhcnQ8MCYmKHZhLnNpemU9dmEudHlwZT0wLHZhLnN0YXJ0PWVyLHZhLm5hbWU9IiIpLDU9PT12YS50eXBlPyhXcj12YS5zdGFydCxubj4wJiZXciE9PWVyJiYoa25bV3JdLm5hbWU9IiFTdHJlYW1EYXRhIikpOnZhLnNpemU+PTQwOTY/KHZhLnN0b3JhZ2U9ImZhdCIsdm9pZCAw''@;'; put 'put ''PT09a25bdmEuc3RhcnRdJiYoa25bdmEuc3RhcnRdPWp0KHduLHZhLnN0YXJ0LGtuLmZhdF9hZGRycyxrbi5zc3opKSxrblt2YS5zdGFydF0ubmFtZT12YS5uYW1lLHZhLmNvbnRlbnQ9a25bdmEuc3RhcnRdLmRhdGEuc2xpY2UoMCx2YS5zaXplKSk6KHZhLnN0b3JhZ2U9Im1pbmlmYXQiLHZh''@;'; put 'put ''LnNpemU8MD92YS5zaXplPTA6V3IhPT1lciYmdmEuc3RhcnQhPT1lciYma25bV3JdJiYodmEuY29udGVudD1hdCh2YSxrbltXcl0uZGF0YSwoa25beXJdfHx7fSkuZGF0YSkpKSx2YS5jb250ZW50JiZtbih2YS5jb250ZW50LDApLHhuW25vXT12YSx6bi5wdXNoKHZhKX19KSh6bix4cyxUbyxj''@;'; put 'put ''MCxubix7fSxhMSx5ciksZnVuY3Rpb24gRXQoZ24sa24sd24pe2Zvcih2YXIgWnQ9MCxubj0wLHhuPTAsem49MCx5cj0wLFdyPXduLmxlbmd0aCxvaT1bXSxuaT1bXTtadDxXcjsrK1p0KW9pW1p0XT1uaVtadF09WnQsa25bWnRdPXduW1p0XTtmb3IoO3lyPG5pLmxlbmd0aDsrK3lyKW5uPWdu''@;'; put 'put ''W1p0PW5pW3lyXV0uTCx4bj1nbltadF0uUix6bj1nbltadF0uQyxvaVtadF09PT1adCYmKC0xIT09bm4mJm9pW25uXSE9PW5uJiYob2lbWnRdPW9pW25uXSksLTEhPT14biYmb2lbeG5dIT09eG4mJihvaVtadF09b2lbeG5dKSksLTEhPT16biYmKG9pW3puXT1adCksLTEhPT1ubiYmWnQhPW9p''@;'; put 'put ''W1p0XSYmKG9pW25uXT1vaVtadF0sbmkubGFzdEluZGV4T2Yobm4pPHlyJiZuaS5wdXNoKG5uKSksLTEhPT14biYmWnQhPW9pW1p0XSYmKG9pW3huXT1vaVtadF0sbmkubGFzdEluZGV4T2YoeG4pPHlyJiZuaS5wdXNoKHhuKSk7Zm9yKFp0PTE7WnQ8V3I7KytadClvaVtadF09PT1adCYmKC0x''@;'; put 'put ''IT09eG4mJm9pW3huXSE9PXhuP29pW1p0XT1vaVt4bl06LTEhPT1ubiYmb2lbbm5dIT09bm4mJihvaVtadF09b2lbbm5dKSk7Zm9yKFp0PTE7WnQ8V3I7KytadClpZigwIT09Z25bWnRdLnR5cGUpe2lmKCh5cj1adCkhPW9pW3lyXSlkb3trbltadF09a25beXI9b2lbeXJdXSsiLyIra25bWnRd''@;'; put 'put ''fXdoaWxlKDAhPT15ciYmLTEhPT1vaVt5cl0mJnlyIT1vaVt5cl0pO29pW1p0XT0tMX1mb3Ioa25bMF0rPSIvIixadD0xO1p0PFdyOysrWnQpMiE9PWduW1p0XS50eXBlJiYoa25bWnRdKz0iLyIpfShhMSxCOCxjMCksYzAuc2hpZnQoKTt2YXIgWDU9e0ZpbGVJbmRleDphMSxGdWxsUGF0aHM6''@;'; put 'put ''Qjh9O3JldHVybiBrbiYma24ucmF3JiYoWDUucmF3PXtoZWFkZXI6VWksc2VjdG9yczpUb30pLFg1fWZ1bmN0aW9uIGF0KGduLGtuLHduKXtmb3IodmFyIG5uPWduLnNpemUseG49W10sem49Z24uc3RhcnQ7d24mJm5uPjAmJnpuPj0wOyl4bi5wdXNoKGtuLnNsaWNlKHpuKmJyLHpuKmJyK2Jy''@;'; put 'put ''KSksbm4tPWJyLHpuPVZzKHduLDQqem4pO3JldHVybiAwPT09eG4ubGVuZ3RoP2JuKDApOmooeG4pLnNsaWNlKDAsZ24uc2l6ZSl9ZnVuY3Rpb24gYnQoZ24sa24sd24sWnQsbm4pe3ZhciB4bj1lcjtpZihnbj09PWVyKXtpZigwIT09a24pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBz''@;'; put 'put ''aG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlmKC0xIT09Z24pe3ZhciB6bj13bltnbl0seXI9KFp0Pj4+MiktMTtpZighem4pcmV0dXJuO2Zvcih2YXIgV3I9MDtXcjx5ciYmKHhuPVZzKHpuLDQqV3IpKSE9PWVyOysrV3Ipbm4ucHVzaCh4bik7YnQoVnMoem4sWnQtNCksa24tMSx3bixa''@;'; put 'put ''dCxubil9fWZ1bmN0aW9uIGp0KGduLGtuLHduLFp0LG5uKXt2YXIgeG49W10sem49W107bm58fChubj1bXSk7dmFyIHlyPVp0LTEsV3I9MCxvaT0wO2ZvcihXcj1rbjtXcj49MDspe25uW1dyXT0hMCx4blt4bi5sZW5ndGhdPVdyLHpuLnB1c2goZ25bV3JdKTt2YXIgbmk9d25bTWF0aC5mbG9v''@;'; put 'put ''cig0KldyL1p0KV07aWYoWnQ8NCsob2k9NCpXciZ5cikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitXcisiIDQgIitadCk7aWYoIWduW25pXSlicmVhaztXcj1WcyhnbltuaV0sb2kpfXJldHVybntub2Rlczp4bixkYXRhOnkwKFt6bl0pfX1mdW5jdGlvbiBLdChn''@;'; put 'put ''bixrbil7cmV0dXJuIG5ldyBEYXRlKDFlMyooem8oZ24sa24rNCkvMWU3Kk1hdGgucG93KDIsMzIpK3pvKGduLGtuKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiBTbihnbixrbil7dmFyIHduPWtufHx7fSxadD13bi5yb290fHwiUm9vdCBFbnRyeSI7aWYoZ24uRnVsbFBhdGhzfHwoZ24u''@;'; put 'put ''RnVsbFBhdGhzPVtdKSxnbi5GaWxlSW5kZXh8fChnbi5GaWxlSW5kZXg9W10pLGduLkZ1bGxQYXRocy5sZW5ndGghPT1nbi5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09Z24uRnVsbFBhdGhzLmxlbmd0aCYmKGduLkZ1''@;'; put 'put ''bGxQYXRoc1swXT1adCsiLyIsZ24uRmlsZUluZGV4WzBdPXtuYW1lOlp0LHR5cGU6NX0pLHduLkNMU0lEJiYoZ24uRmlsZUluZGV4WzBdLmNsc2lkPXduLkNMU0lEKSxmdW5jdGlvbiBscihnbil7dmFyIGtuPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQoZ24sIi8iK2tuKSl7dmFyIHduPWJu''@;'; put 'put ''KDQpO3duWzBdPTU1LHduWzFdPXduWzNdPTUwLHduWzJdPTU0LGduLkZpbGVJbmRleC5wdXNoKHtuYW1lOmtuLHR5cGU6Mixjb250ZW50OnduLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLGduLkZ1bGxQYXRocy5wdXNoKGduLkZ1bGxQYXRoc1swXStrbiksWG4oZ24pfX0oZ24pfWZ1bmN0aW9u''@;'; put 'put ''IFhuKGduLGtuKXtTbihnbik7Zm9yKHZhciB3bj0hMSxadD0hMSxubj1nbi5GdWxsUGF0aHMubGVuZ3RoLTE7bm4+PTA7LS1ubil7dmFyIHhuPWduLkZpbGVJbmRleFtubl07c3dpdGNoKHhuLnR5cGUpe2Nhc2UgMDpadD93bj0hMDooZ24uRmlsZUluZGV4LnBvcCgpLGduLkZ1bGxQYXRocy5w''@;'; put 'put ''b3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6WnQ9ITAsaXNOYU4oeG4uUip4bi5MKnhuLkMpJiYod249ITApLHhuLlI+LTEmJnhuLkw+LTEmJnhuLlI9PXhuLkwmJih3bj0hMCk7YnJlYWs7ZGVmYXVsdDp3bj0hMH19aWYod258fGtuKXt2YXIgem49bmV3IERhdGUoMTk4NywxLDE5''@;'; put 'put ''KSx5cj0wLFdyPVtdO2Zvcihubj0wO25uPGduLkZ1bGxQYXRocy5sZW5ndGg7KytubikwIT09Z24uRmlsZUluZGV4W25uXS50eXBlJiZXci5wdXNoKFtnbi5GdWxsUGF0aHNbbm5dLGduLkZpbGVJbmRleFtubl1dKTtmb3Iobm49MDtubjxXci5sZW5ndGg7Kytubil7dmFyIG9pPUcoV3Jbbm5d''@;'; put 'put ''WzBdKTtmb3IoWnQ9ITEseXI9MDt5cjxXci5sZW5ndGg7Kyt5cilXclt5cl1bMF09PT1vaSYmKFp0PSEwKTtadHx8V3IucHVzaChbb2kse25hbWU6UShvaSkucmVwbGFjZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpuYSxjdDp6bixtdDp6bixjb250ZW50Om51bGx9XSl9Zm9yKFdyLnNvcnQoZnVu''@;'; put 'put ''Y3Rpb24oVWksbm8pe3JldHVybiBmdW5jdGlvbiBrKGduLGtuKXtmb3IodmFyIHduPWduLnNwbGl0KCIvIiksWnQ9a24uc3BsaXQoIi8iKSxubj0wLHhuPTAsem49TWF0aC5taW4od24ubGVuZ3RoLFp0Lmxlbmd0aCk7bm48em47Kytubil7aWYoeG49d25bbm5dLmxlbmd0aC1adFtubl0ubGVu''@;'; put 'put ''Z3RoKXJldHVybiB4bjtpZih3bltubl0hPVp0W25uXSlyZXR1cm4gd25bbm5dPFp0W25uXT8tMToxfXJldHVybiB3bi5sZW5ndGgtWnQubGVuZ3RofShVaVswXSxub1swXSl9KSxnbi5GdWxsUGF0aHM9W10sZ24uRmlsZUluZGV4PVtdLG5uPTA7bm48V3IubGVuZ3RoOysrbm4pZ24uRnVsbFBh''@;'; put 'put ''dGhzW25uXT1Xcltubl1bMF0sZ24uRmlsZUluZGV4W25uXT1Xcltubl1bMV07Zm9yKG5uPTA7bm48V3IubGVuZ3RoOysrbm4pe3ZhciBuaT1nbi5GaWxlSW5kZXhbbm5dLFhpPWduLkZ1bGxQYXRoc1tubl07aWYobmkubmFtZT1RKFhpKS5yZXBsYWNlKCIvIiwiIiksbmkuTD1uaS5SPW5pLkM9''@;'; put 'put ''LShuaS5jb2xvcj0xKSxuaS5zaXplPW5pLmNvbnRlbnQ/bmkuY29udGVudC5sZW5ndGg6MCxuaS5zdGFydD0wLG5pLmNsc2lkPW5pLmNsc2lkfHxuYSwwPT09bm4pbmkuQz1Xci5sZW5ndGg+MT8xOi0xLG5pLnNpemU9MCxuaS50eXBlPTU7ZWxzZSBpZigiLyI9PVhpLnNsaWNlKC0xKSl7Zm9y''@;'; put 'put ''KHlyPW5uKzE7eXI8V3IubGVuZ3RoJiZHKGduLkZ1bGxQYXRoc1t5cl0pIT1YaTsrK3lyKTtmb3IobmkuQz15cj49V3IubGVuZ3RoPy0xOnlyLHlyPW5uKzE7eXI8V3IubGVuZ3RoJiZHKGduLkZ1bGxQYXRoc1t5cl0pIT1HKFhpKTsrK3lyKTtuaS5SPXlyPj1Xci5sZW5ndGg/LTE6eXIsbmku''@;'; put 'put ''dHlwZT0xfWVsc2UgRyhnbi5GdWxsUGF0aHNbbm4rMV18fCIiKT09RyhYaSkmJihuaS5SPW5uKzEpLG5pLnR5cGU9Mn19fWZ1bmN0aW9uIEJuKGduLGtuKXt2YXIgd249a258fHt9O2lmKFhuKGduKSwiemlwIj09d24uZmlsZVR5cGUpcmV0dXJuIGZ1bmN0aW9uIFlvKGduLGtuKXt2YXIgd249''@;'; put 'put ''a258fHt9LFp0PVtdLG5uPVtdLHhuPWJuKDEpLHpuPXduLmNvbXByZXNzaW9uPzg6MCx5cj0wLG9pPTAsbmk9MCxYaT0wLFVpPTAsbm89Z24uRnVsbFBhdGhzWzBdLGphPW5vLHZhPWduLkZpbGVJbmRleFswXSxUbz1bXSx4cz0wO2ZvcihvaT0xO29pPGduLkZ1bGxQYXRocy5sZW5ndGg7Kytv''@;'; put 'put ''aSlpZihqYT1nbi5GdWxsUGF0aHNbb2ldLnNsaWNlKG5vLmxlbmd0aCksKHZhPWduLkZpbGVJbmRleFtvaV0pLnNpemUmJnZhLmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPWphKXt2YXIgcjE9WGksYzA9Ym4oamEubGVuZ3RoKTtmb3Iobmk9MDtuaTxqYS5sZW5ndGg7KytuaSljMC53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDEyNyZqYS5jaGFyQ29kZUF0KG5pKSk7YzA9YzAuc2xpY2UoMCxjMC5sKSxUb1tVaV09eGUuYnVmKHZhLmNvbnRlbnQsMCk7dmFyIGExPXZhLmNvbnRlbnQ7OD09em4mJihhMT1qcihhMSkpLCh4bj1ibigzMCkpLndyaXRlX3NoaWZ0KDQsNjczMjQ3NTIpLHhuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsMjApLHhuLndyaXRlX3NoaWZ0KDIseXIpLHhuLndyaXRlX3NoaWZ0KDIsem4pLHZhLm10P29lKHhuLHZhLm10KTp4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KC00LDgmeXI/MDpUb1tVaV0pLHhuLndyaXRlX3NoaWZ0KDQsOCZ5cj8wOmExLmxlbmd0aCkseG4ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCw4JnlyPzA6dmEuY29udGVudC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsYzAubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLDApLFhpKz14bi5sZW5ndGgsWnQucHVzaCh4biksWGkrPWMwLmxlbmd0aCxadC5wdXNoKGMwKSxYaSs9YTEubGVuZ3RoLFp0LnB1c2goYTEpLDgmeXIm''@;'; put 'put ''JigoeG49Ym4oMTIpKS53cml0ZV9zaGlmdCgtNCxUb1tVaV0pLHhuLndyaXRlX3NoaWZ0KDQsYTEubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCg0LHZhLmNvbnRlbnQubGVuZ3RoKSxYaSs9eG4ubCxadC5wdXNoKHhuKSksKHhuPWJuKDQ2KSkud3JpdGVfc2hpZnQoNCwzMzYzOTI0OCkseG4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDIwKSx4bi53cml0ZV9zaGlmdCgyLHlyKSx4bi53cml0ZV9zaGlmdCgyLHpuKSx4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KC00LFRvW1VpXSkseG4ud3JpdGVfc2hpZnQoNCxhMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsdmEuY29udGVudC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsYzAubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDQsMCkseG4ud3JpdGVfc2hpZnQo''@;'; put 'put ''NCxyMSkseHMrPXhuLmwsbm4ucHVzaCh4bikseHMrPWMwLmxlbmd0aCxubi5wdXNoKGMwKSwrK1VpfXJldHVybih4bj1ibigyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMixVaSkseG4u''@;'; put 'put ''d3JpdGVfc2hpZnQoMixVaSkseG4ud3JpdGVfc2hpZnQoNCx4cykseG4ud3JpdGVfc2hpZnQoNCxYaSkseG4ud3JpdGVfc2hpZnQoMiwwKSxqKFtqKFp0KSxqKG5uKSx4bl0pfShnbix3bik7dmFyIFp0PWZ1bmN0aW9uKG5vKXtmb3IodmFyIGphPTAsdmE9MCxUbz0wO1RvPG5vLkZpbGVJbmRl''@;'; put 'put ''eC5sZW5ndGg7KytUbyl7dmFyIHhzPW5vLkZpbGVJbmRleFtUb107aWYoeHMuY29udGVudCl7dmFyIHIxPXhzLmNvbnRlbnQubGVuZ3RoO3IxPjAmJihyMTw0MDk2P2phKz1yMSs2Mz4+Njp2YSs9cjErNTExPj45KX19Zm9yKHZhciBjMD1uby5GdWxsUGF0aHMubGVuZ3RoKzM+PjIsQjg9amEr''@;'; put 'put ''MTI3Pj43LFg1PShqYSs3Pj4zKSt2YStjMCtCOCxKNT1YNSsxMjc+PjcsTWU9SjU8PTEwOT8wOk1hdGguY2VpbCgoSjUtMTA5KS8xMjcpO1g1K0o1K01lKzEyNz4+Nz5KNTspTWU9KytKNTw9MTA5PzA6TWF0aC5jZWlsKChKNS0xMDkpLzEyNyk7dmFyIGhoPVsxLE1lLEo1LEI4LGMwLHZhLGph''@;'; put 'put ''LDBdO3JldHVybiBuby5GaWxlSW5kZXhbMF0uc2l6ZT1qYTw8NixoaFs3XT0obm8uRmlsZUluZGV4WzBdLnN0YXJ0PWhoWzBdK2hoWzFdK2hoWzJdK2hoWzNdK2hoWzRdK2hoWzVdKSsoaGhbNl0rNz4+MyksaGh9KGduKSxubj1ibihadFs3XTw8OSkseG49MCx6bj0wO2Zvcih4bj0wO3huPDg7''@;'; put 'put ''Kyt4bilubi53cml0ZV9zaGlmdCgxLEZpW3huXSk7Zm9yKHhuPTA7eG48ODsrK3huKW5uLndyaXRlX3NoaWZ0KDIsMCk7Zm9yKG5uLndyaXRlX3NoaWZ0KDIsNjIpLG5uLndyaXRlX3NoaWZ0KDIsMyksbm4ud3JpdGVfc2hpZnQoMiw2NTUzNCksbm4ud3JpdGVfc2hpZnQoMiw5KSxubi53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDYpLHhuPTA7eG48MzsrK3huKW5uLndyaXRlX3NoaWZ0KDIsMCk7Zm9yKG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCxadFsyXSksbm4ud3JpdGVfc2hpZnQoNCxadFswXStadFsxXStadFsyXStadFszXS0xKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsNDA5Niksbm4ud3JpdGVfc2hpZnQoNCxadFszXT9adFswXStadFsxXStadFsyXS0xOmVyKSxubi53cml0ZV9zaGlmdCg0LFp0WzNdKSxubi53cml0ZV9zaGlmdCgtNCxadFsxXT9adFswXS0xOmVyKSxubi53cml0ZV9zaGlmdCg0LFp0WzFdKSx4bj0wO3huPDEwOTsrK3hu''@;'; put 'put ''KW5uLndyaXRlX3NoaWZ0KC00LHhuPFp0WzJdP1p0WzFdK3huOi0xKTtpZihadFsxXSlmb3Ioem49MDt6bjxadFsxXTsrK3puKXtmb3IoO3huPDIzNisxMjcqem47Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bjxadFsyXT9adFsxXSt4bjotMSk7bm4ud3JpdGVfc2hpZnQoLTQsem49PT1adFsx''@;'; put 'put ''XS0xP2VyOnpuKzEpfXZhciB5cj1mdW5jdGlvbihubyl7Zm9yKHpuKz1ubzt4bjx6bi0xOysreG4pbm4ud3JpdGVfc2hpZnQoLTQseG4rMSk7bm8mJigrK3huLG5uLndyaXRlX3NoaWZ0KC00LGVyKSl9O2Zvcih6bj14bj0wLHpuKz1adFsxXTt4bjx6bjsrK3huKW5uLndyaXRlX3NoaWZ0KC00''@;'; put 'put ''LGNhLkRJRlNFQ1QpO2Zvcih6bis9WnRbMl07eG48em47Kyt4bilubi53cml0ZV9zaGlmdCgtNCxjYS5GQVRTRUNUKTt5cihadFszXSkseXIoWnRbNF0pO2Zvcih2YXIgV3I9MCxvaT0wLG5pPWduLkZpbGVJbmRleFswXTtXcjxnbi5GaWxlSW5kZXgubGVuZ3RoOysrV3IpKG5pPWduLkZpbGVJ''@;'; put 'put ''bmRleFtXcl0pLmNvbnRlbnQmJiEoKG9pPW5pLmNvbnRlbnQubGVuZ3RoKTw0MDk2KSYmKG5pLnN0YXJ0PXpuLHlyKG9pKzUxMT4+OSkpO2Zvcih5cihadFs2XSs3Pj4zKTs1MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsY2EuRU5ET0ZDSEFJTik7Zm9yKHpuPXhuPTAsV3I9MDtXcjxnbi5G''@;'; put 'put ''aWxlSW5kZXgubGVuZ3RoOysrV3IpKG5pPWduLkZpbGVJbmRleFtXcl0pLmNvbnRlbnQmJihvaT1uaS5jb250ZW50Lmxlbmd0aCkmJiEob2k+PTQwOTYpJiYobmkuc3RhcnQ9em4seXIob2krNjM+PjYpKTtmb3IoOzUxMSZubi5sOylubi53cml0ZV9zaGlmdCgtNCxjYS5FTkRPRkNIQUlOKTtm''@;'; put 'put ''b3IoeG49MDt4bjxadFs0XTw8MjsrK3huKXt2YXIgWGk9Z24uRnVsbFBhdGhzW3huXTtpZihYaSYmMCE9PVhpLmxlbmd0aCl7bmk9Z24uRmlsZUluZGV4W3huXSwwPT09eG4mJihuaS5zdGFydD1uaS5zaXplP25pLnN0YXJ0LTE6ZXIpO3ZhciBVaT0wPT09eG4mJnduLnJvb3R8fG5pLm5hbWU7''@;'; put 'put ''aWYob2k9MiooVWkubGVuZ3RoKzEpLG5uLndyaXRlX3NoaWZ0KDY0LFVpLCJ1dGYxNmxlIiksbm4ud3JpdGVfc2hpZnQoMixvaSksbm4ud3JpdGVfc2hpZnQoMSxuaS50eXBlKSxubi53cml0ZV9zaGlmdCgxLG5pLmNvbG9yKSxubi53cml0ZV9zaGlmdCgtNCxuaS5MKSxubi53cml0ZV9zaGlm''@;'; put 'put ''dCgtNCxuaS5SKSxubi53cml0ZV9zaGlmdCgtNCxuaS5DKSxuaS5jbHNpZClubi53cml0ZV9zaGlmdCgxNixuaS5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoV3I9MDtXcjw0OysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKTtubi53cml0ZV9zaGlmdCg0LG5pLnN0YXRlfHwwKSxubi53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsbmkuc3RhcnQpLG5uLndyaXRlX3NoaWZ0KDQsbmkuc2l6ZSksbm4ud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXcj0wO1dyPDE3OysrV3Ip''@;'; put 'put ''bm4ud3JpdGVfc2hpZnQoNCwwKTtmb3IoV3I9MDtXcjwzOysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwtMSk7Zm9yKFdyPTA7V3I8MTI7KytXcilubi53cml0ZV9zaGlmdCg0LDApfX1mb3IoeG49MTt4bjxnbi5GaWxlSW5kZXgubGVuZ3RoOysreG4paWYoKG5pPWduLkZpbGVJbmRleFt4bl0pLnNp''@;'; put 'put ''emU+PTQwOTYpe2Zvcihubi5sPW5pLnN0YXJ0KzE8PDksV3I9MDtXcjxuaS5zaXplOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSxuaS5jb250ZW50W1dyXSk7Zm9yKDs1MTEmV3I7KytXcilubi53cml0ZV9zaGlmdCgxLDApfWZvcih4bj0xO3huPGduLkZpbGVJbmRleC5sZW5ndGg7Kyt4bilpZigo''@;'; put 'put ''bmk9Z24uRmlsZUluZGV4W3huXSkuc2l6ZT4wJiZuaS5zaXplPDQwOTYpe2ZvcihXcj0wO1dyPG5pLnNpemU7KytXcilubi53cml0ZV9zaGlmdCgxLG5pLmNvbnRlbnRbV3JdKTtmb3IoOzYzJldyOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoO25uLmw8bm4ubGVuZ3RoOylubi53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDApO3JldHVybiBubn1SLnZlcnNpb249IjEuMS40Ijt2YXIgQnIsYnI9NjQsZXI9LTIsTWk9ImQwY2YxMWUwYTFiMTFhZTEiLEZpPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sbmE9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIixjYT17TUFYUkVH''@;'; put 'put ''U0VDVDotNixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplcixGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOk1pLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOm5hLEVudHJ5VHlwZXM6WyJ1bmtub3du''@;'; put 'put ''Iiwic3RvcmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBrcihnbil7Zm9yKHZhciBrbj1uZXcgQXJyYXkoZ24ubGVuZ3RoKSx3bj0wO3duPGduLmxlbmd0aDsrK3duKWtuW3duXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGduW3duXSk7cmV0dXJu''@;'; put 'put ''IGtuLmpvaW4oIiIpfWZ1bmN0aW9uIGpyKGduKXtyZXR1cm4gQnI/QnIuZGVmbGF0ZVJhd1N5bmMoZ24pOkdsKGduKX1mb3IodmFyIGduLGtuLFppPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx5aT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwx''@;'; put 'put ''NywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OF0sX2E9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwx''@;'; put 'put ''NjM4NSwyNDU3N10saWE9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLExvPWlhP25ldyBVaW50OEFycmF5KDI1Nik6W10sT2E9MDtPYTwyNTY7KytPYSlMb1tPYV09KHZvaWQgMCwyNTUmKChrbj0xMzk1MzYmKChnbj1PYSk8PDF8Z248PDExKXw1NTgxNDQmKGduPDw1fGduPDwxNSkpPj4xNnxrbj4+''@;'; put 'put ''OHxrbikpO2Z1bmN0aW9uIGhvKGduLGtuKXt2YXIgd249TG9bMjU1JmduXTtyZXR1cm4ga248PTg/d24+Pj44LWtuOih3bj13bjw8OHxMb1tnbj4+OCYyNTVdLGtuPD0xNj93bj4+PjE2LWtuOih3bj13bjw8OHxMb1tnbj4+MTYmMjU1XSk+Pj4yNC1rbil9ZnVuY3Rpb24gSmEoZ24sa24pe3Zh''@;'; put 'put ''ciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9Nj8wOmduW1p0KzFdPDw4KSk+Pj53biYzfWZ1bmN0aW9uIEJpKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTU/MDpnbltadCsxXTw8OCkpPj4+d24mN31mdW5jdGlvbiBQbihnbixr''@;'; put 'put ''bil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD0zPzA6Z25bWnQrMV08PDgpKT4+PnduJjMxfWZ1bmN0aW9uIFdvKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTE/MDpnbltadCsxXTw8OCkpPj4+d24mMTI3fWZ1bmN0aW9u''@;'; put 'put ''IGhyKGduLGtuLHduKXt2YXIgWnQ9NyZrbixubj1rbj4+PjMsem49Z25bbm5dPj4+WnQ7cmV0dXJuIHduPDgtWnR8fCh6bnw9Z25bbm4rMV08PDgtWnQsd248MTYtWnQpfHwoem58PWduW25uKzJdPDwxNi1adCx3bjwyNC1adCl8fCh6bnw9Z25bbm4rM108PDI0LVp0KSx6biYoMTw8d24pLTF9''@;'; put 'put ''ZnVuY3Rpb24gUWwoZ24sa24pe3ZhciB3bj1nbi5sZW5ndGgsWnQ9Mip3bj5rbj8yKnduOmtuKzUsbm49MDtpZih3bj49a24pcmV0dXJuIGduO2lmKFRlKXt2YXIgeG49cChadCk7aWYoZ24uY29weSlnbi5jb3B5KHhuKTtlbHNlIGZvcig7bm48Z24ubGVuZ3RoOysrbm4peG5bbm5dPWduW25u''@;'; put 'put ''XTtyZXR1cm4geG59aWYoaWEpe3ZhciB6bj1uZXcgVWludDhBcnJheShadCk7aWYoem4uc2V0KXpuLnNldChnbik7ZWxzZSBmb3IoO25uPGduLmxlbmd0aDsrK25uKXpuW25uXT1nbltubl07cmV0dXJuIHpufXJldHVybiBnbi5sZW5ndGg9WnQsZ259ZnVuY3Rpb24gWWwoZ24pe2Zvcih2YXIg''@;'; put 'put ''a249bmV3IEFycmF5KGduKSx3bj0wO3duPGduOysrd24pa25bd25dPTA7cmV0dXJuIGtufXZhciBHbD1mdW5jdGlvbigpe3ZhciBnbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih3bixadCl7Zm9yKHZhciBubj0wO25uPHduLmxlbmd0aDspe3ZhciB4bj1NYXRoLm1pbig2NTUzNSx3bi5s''@;'; put 'put ''ZW5ndGgtbm4pO2ZvcihadC53cml0ZV9zaGlmdCgxLCsobm4reG49PXduLmxlbmd0aCkpLFp0LndyaXRlX3NoaWZ0KDIseG4pLFp0LndyaXRlX3NoaWZ0KDIsNjU1MzUmfnhuKTt4bi0tID4wOyladFtadC5sKytdPXduW25uKytdfXJldHVybiBadC5sfX0oKTtyZXR1cm4gZnVuY3Rpb24oa24p''@;'; put 'put ''e3ZhciB3bj1ibig1MCtNYXRoLmZsb29yKDEuMSprbi5sZW5ndGgpKSxadD1nbihrbix3bik7cmV0dXJuIHduLnNsaWNlKDAsWnQpfX0oKTtmdW5jdGlvbiB5dShnbixrbix3bil7dmFyIFp0PTEsbm49MCx4bj0wLHpuPTAseXI9MCxXcj1nbi5sZW5ndGgsb2k9aWE/bmV3IFVpbnQxNkFycmF5''@;'; put 'put ''KDMyKTpZbCgzMik7Zm9yKHhuPTA7eG48MzI7Kyt4bilvaVt4bl09MDtmb3IoeG49V3I7eG48d247Kyt4bilnblt4bl09MDtXcj1nbi5sZW5ndGg7dmFyIG5pPWlhP25ldyBVaW50MTZBcnJheShXcik6WWwoV3IpO2Zvcih4bj0wO3huPFdyOysreG4pb2lbbm49Z25beG5dXSsrLFp0PG5uJiYo''@;'; put 'put ''WnQ9bm4pLG5pW3huXT0wO2ZvcihvaVswXT0wLHhuPTE7eG48PVp0OysreG4pb2lbeG4rMTZdPXlyPXlyK29pW3huLTFdPDwxO2Zvcih4bj0wO3huPFdyOysreG4pMCE9KHlyPWduW3huXSkmJihuaVt4bl09b2lbeXIrMTZdKyspO3ZhciBYaT0wO2Zvcih4bj0wO3huPFdyOysreG4paWYoMCE9''@;'; put 'put ''KFhpPWduW3huXSkpZm9yKHlyPWhvKG5pW3huXSxadCk+Plp0LVhpLHpuPSgxPDxadCs0LVhpKS0xO3puPj0wOy0tem4pa25beXJ8em48PFhpXT0xNSZYaXx4bjw8NDtyZXR1cm4gWnR9dmFyIE1sPWlhP25ldyBVaW50MTZBcnJheSg1MTIpOllsKDUxMiksbG49aWE/bmV3IFVpbnQxNkFycmF5''@;'; put 'put ''KDMyKTpZbCgzMik7aWYoIWlhKXtmb3IodmFyIEVuPTA7RW48NTEyOysrRW4pTWxbRW5dPTA7Zm9yKEVuPTA7RW48MzI7KytFbilsbltFbl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIGduPVtdLGtuPTA7a248MzI7a24rKylnbi5wdXNoKDUpO3l1KGduLGxuLDMyKTt2YXIgd249W107Zm9yKGtu''@;'; put 'put ''PTA7a248PTE0MztrbisrKXduLnB1c2goOCk7Zm9yKDtrbjw9MjU1O2tuKyspd24ucHVzaCg5KTtmb3IoO2tuPD0yNzk7a24rKyl3bi5wdXNoKDcpO2Zvcig7a248PTI4NztrbisrKXduLnB1c2goOCk7eXUod24sTWwsMjg4KX0oKTt2YXIgVW49aWE/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpZ''@;'; put 'put ''bCgzMjc2OCkseGk9aWE/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpZbCgzMjc2OCksb3I9aWE/bmV3IFVpbnQxNkFycmF5KDEyOCk6WWwoMTI4KSxPaT0xLFNyPTE7ZnVuY3Rpb24gUGkoZ24sa24pe3ZhciB3bj1QbihnbixrbikrMjU3LFp0PVBuKGduLGtuKz01KSsxLG5uPWZ1bmN0aW9uIElz''@;'; put 'put ''KGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTQ/MDpnbltadCsxXTw8OCkpPj4+d24mMTV9KGduLGtuKz01KSs0O2tuKz00O2Zvcih2YXIgeG49MCx6bj1pYT9uZXcgVWludDhBcnJheSgxOSk6WWwoMTkpLHlyPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAs''@;'; put 'put ''MCwwLDAsMCwwLDAsMCwwXSxXcj0xLG9pPWlhP25ldyBVaW50OEFycmF5KDgpOllsKDgpLG5pPWlhP25ldyBVaW50OEFycmF5KDgpOllsKDgpLFhpPXpuLmxlbmd0aCxVaT0wO1VpPG5uOysrVWkpem5bWmlbVWldXT14bj1CaShnbixrbiksV3I8eG4mJihXcj14biksb2lbeG5dKyssa24rPTM7''@;'; put 'put ''dmFyIG5vPTA7Zm9yKG9pWzBdPTAsVWk9MTtVaTw9V3I7KytVaSluaVtVaV09bm89bm8rb2lbVWktMV08PDE7Zm9yKFVpPTA7VWk8WGk7KytVaSkwIT0obm89em5bVWldKSYmKHlyW1VpXT1uaVtub10rKyk7dmFyIGphPTA7Zm9yKFVpPTA7VWk8WGk7KytVaSlpZigwIT0oamE9em5bVWldKSl7''@;'; put 'put ''bm89TG9beXJbVWldXT4+OC1qYTtmb3IodmFyIHZhPSgxPDw3LWphKS0xO3ZhPj0wOy0tdmEpb3Jbbm98dmE8PGphXT03JmphfFVpPDwzfXZhciBUbz1bXTtmb3IoV3I9MTtUby5sZW5ndGg8d24rWnQ7KXN3aXRjaChubz1vcltXbyhnbixrbildLGtuKz03Jm5vLG5vPj4+PTMpe2Nhc2UgMTY6''@;'; put 'put ''Zm9yKHhuPTMrSmEoZ24sa24pLGtuKz0yLG5vPVRvW1RvLmxlbmd0aC0xXTt4bi0tID4wOylUby5wdXNoKG5vKTticmVhaztjYXNlIDE3OmZvcih4bj0zK0JpKGduLGtuKSxrbis9Mzt4bi0tID4wOylUby5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKHhuPTExK1dvKGduLGtuKSxrbis9Nzt4''@;'; put 'put ''bi0tID4wOylUby5wdXNoKDApO2JyZWFrO2RlZmF1bHQ6VG8ucHVzaChubyksV3I8bm8mJihXcj1ubyl9dmFyIHhzPVRvLnNsaWNlKDAsd24pLHIxPVRvLnNsaWNlKHduKTtmb3IoVWk9d247VWk8Mjg2OysrVWkpeHNbVWldPTA7Zm9yKFVpPVp0O1VpPDMwOysrVWkpcjFbVWldPTA7cmV0dXJu''@;'; put 'put ''IE9pPXl1KHhzLFVuLDI4NiksU3I9eXUocjEseGksMzApLGtufWZ1bmN0aW9uIEhpKGduLGtuKXt2YXIgWnQ9ZnVuY3Rpb24gWmEoZ24sa24pe2lmKDM9PWduWzBdJiYhKDMmZ25bMV0pKXJldHVybltWKGtuKSwyXTtmb3IodmFyIHduPTAsWnQ9MCxubj1wKGtufHwxPDwxOCkseG49MCx6bj1u''@;'; put 'put ''bi5sZW5ndGg+Pj4wLHlyPTAsV3I9MDshKDEmWnQpOylpZihadD1CaShnbix3biksd24rPTMsWnQ+Pj4xKWZvcihadD4+PjE9PTE/KHlyPTksV3I9NSk6KHduPVBpKGduLHduKSx5cj1PaSxXcj1TciksIWtuJiZ6bjx4biszMjc2NyYmKHpuPShubj1RbChubix4biszMjc2NykpLmxlbmd0aCk7''@;'; put 'put ''Oyl7dmFyIG5pPWhyKGduLHduLHlyKSxYaT1adD4+PjE9PTE/TWxbbmldOlVuW25pXTtpZih3bis9MTUmWGksKFhpPj4+PTQpPj4+OCYyNTUpe2lmKDI1Nj09WGkpYnJlYWs7dmFyIFVpPShYaS09MjU3KTw4PzA6WGktND4+MjtVaT41JiYoVWk9MCk7dmFyIG5vPXhuK3lpW1hpXTtVaT4wJiYo''@;'; put 'put ''bm8rPWhyKGduLHduLFVpKSx3bis9VWkpLG5pPWhyKGduLHduLFdyKSx3bis9MTUmKFhpPVp0Pj4+MT09MT9sbltuaV06eGlbbmldKTt2YXIgamE9KFhpPj4+PTQpPDQ/MDpYaS0yPj4xLHZhPV9hW1hpXTtmb3IoamE+MCYmKHZhKz1ocihnbix3bixqYSksd24rPWphKSwha24mJnpuPG5vJiYo''@;'; put 'put ''em49KG5uPVFsKG5uLG5vKSkubGVuZ3RoKTt4bjxubzspbm5beG5dPW5uW3huLXZhXSwrK3hufWVsc2Ugbm5beG4rK109WGl9ZWxzZXs3JnduJiYod24rPTgtKDcmd24pKTt2YXIgb2k9Z25bd24+Pj4zXXxnblsxKyh3bj4+PjMpXTw8ODtpZih3bis9MzIsIWtuJiZ6bjx4bitvaSYmKHpuPShu''@;'; put 'put ''bj1RbChubix4bitvaSkpLmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIGduLmNvcHkpZ24uY29weShubix4bix3bj4+PjMsKHduPj4+Mykrb2kpLHhuKz1vaSx3bis9OCpvaTtlbHNlIGZvcig7b2ktLSA+MDspbm5beG4rK109Z25bd24+Pj4zXSx3bis9OH1yZXR1cm5ba24/bm46bm4uc2xp''@;'; put 'put ''Y2UoMCx4biksd24rNz4+PjNdfShnbi5zbGljZShnbi5sfHwwKSxrbik7cmV0dXJuIGduLmwrPVp0WzFdLFp0WzBdfWZ1bmN0aW9uIG1hKGduLGtuKXtpZighZ24pdGhyb3cgbmV3IEVycm9yKGtuKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3Ioa24pfWZ1bmN0aW9uIERpKGdu''@;'; put 'put ''LGtuKXt2YXIgd249Z247bW4od24sMCk7dmFyIHhuPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTtTbih4bix7cm9vdDprbi5yb290fSk7Zm9yKHZhciB6bj13bi5sZW5ndGgtNDsoODAhPXduW3puXXx8NzUhPXduW3puKzFdfHw1IT13blt6bisyXXx8NiE9d25bem4rM10pJiZ6bj49MDsp''@;'; put 'put ''LS16bjt3bi5sPXpuKzQsd24ubCs9NDt2YXIgeXI9d24ucmVhZF9zaGlmdCgyKTt3bi5sKz02O3ZhciBXcj13bi5yZWFkX3NoaWZ0KDQpO2Zvcih3bi5sPVdyLHpuPTA7em48eXI7Kyt6bil7d24ubCs9MjA7dmFyIG9pPXduLnJlYWRfc2hpZnQoNCksbmk9d24ucmVhZF9zaGlmdCg0KSxYaT13''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDIpLFVpPXduLnJlYWRfc2hpZnQoMiksbm89d24ucmVhZF9zaGlmdCgyKTt3bi5sKz04O3ZhciBqYT13bi5yZWFkX3NoaWZ0KDQpLHZhPXBlKHduLnNsaWNlKHduLmwrWGksd24ubCtYaStVaSkpO3duLmwrPVhpK1VpK25vO3ZhciBUbz13bi5sO3duLmw9amErNCxjcyh3''@;'; put 'put ''bixvaSxuaSx4bix2YSksd24ubD1Ub31yZXR1cm4geG59ZnVuY3Rpb24gY3MoZ24sa24sd24sWnQsbm4pe2duLmwrPTI7dmFyIHhuPWduLnJlYWRfc2hpZnQoMiksem49Z24ucmVhZF9zaGlmdCgyKSx5cj1mdW5jdGlvbiBnZShnbil7dmFyIGtuPTY1NTM1JmduLnJlYWRfc2hpZnQoMiksd249''@;'; put 'put ''NjU1MzUmZ24ucmVhZF9zaGlmdCgyKSxadD1uZXcgRGF0ZSxubj0zMSZ3bix4bj0xNSYod24+Pj49NSk7d24+Pj49NCxadC5zZXRNaWxsaXNlY29uZHMoMCksWnQuc2V0RnVsbFllYXIod24rMTk4MCksWnQuc2V0TW9udGgoeG4tMSksWnQuc2V0RGF0ZShubik7dmFyIHpuPTMxJmtuLHlyPTYz''@;'; put 'put ''Jihrbj4+Pj01KTtyZXR1cm4gWnQuc2V0SG91cnMoa24+Pj49NiksWnQuc2V0TWludXRlcyh5ciksWnQuc2V0U2Vjb25kcyh6bjw8MSksWnR9KGduKTtpZig4MjU3JnhuKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIGVuY3J5cHRpb24iKTtmb3IodmFyIFdyPWduLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksb2k9Z24ucmVhZF9zaGlmdCg0KSxuaT1nbi5yZWFkX3NoaWZ0KDQpLFhpPWduLnJlYWRfc2hpZnQoMiksVWk9Z24ucmVhZF9zaGlmdCgyKSxubz0iIixqYT0wO2phPFhpOysramEpbm8rPVN0cmluZy5mcm9tQ2hhckNvZGUoZ25bZ24ubCsrXSk7aWYoVWkpe3ZhciB2YT1wZShnbi5z''@;'; put 'put ''bGljZShnbi5sLGduLmwrVWkpKTsodmFbMjE1ODldfHx7fSkubXQmJih5cj12YVsyMTU4OV0ubXQpLCgobm58fHt9KVsyMTU4OV18fHt9KS5tdCYmKHlyPW5uWzIxNTg5XS5tdCl9Z24ubCs9VWk7dmFyIFRvPWduLnNsaWNlKGduLmwsZ24ubCtvaSk7c3dpdGNoKHpuKXtjYXNlIDg6VG89ZnVu''@;'; put 'put ''Y3Rpb24gRm4oZ24sa24pe2lmKCFCcilyZXR1cm4gSGkoZ24sa24pO3ZhciBadD1uZXcoMCxCci5JbmZsYXRlUmF3KSxubj1adC5fcHJvY2Vzc0NodW5rKGduLnNsaWNlKGduLmwpLFp0Ll9maW5pc2hGbHVzaEZsYWcpO3JldHVybiBnbi5sKz1adC5ieXRlc1JlYWQsbm59KGduLG5pKTticmVh''@;'; put 'put ''aztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIit6bil9dmFyIHhzPSExOzgmeG4mJigxMzQ2OTU3NjA9PShXcj1nbi5yZWFkX3NoaWZ0KDQpKSYmKFdyPWduLnJlYWRfc2hpZnQoNCkseHM9ITApLG9pPWdu''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksbmk9Z24ucmVhZF9zaGlmdCg0KSksb2khPWtuJiZtYSh4cywiQmFkIGNvbXByZXNzZWQgc2l6ZTogIitrbisiICE9ICIrb2kpLG5pIT13biYmbWEoeHMsIkJhZCB1bmNvbXByZXNzZWQgc2l6ZTogIit3bisiICE9ICIrbmkpO3ZhciByMT14ZS5idWYoVG8sMCk7KDB8''@;'; put 'put ''V3IpIT0oMHxyMSkmJm1hKHhzLCJCYWQgQ1JDMzIgY2hlY2tzdW06ICIrV3IrIiAhPSAiK3IxKSxfdShadCxubyxUbyx7dW5zYWZlOiEwLG10OnlyfSl9ZnVuY3Rpb24gX3UoZ24sa24sd24sWnQpe3ZhciBubj1adCYmWnQudW5zYWZlO25ufHxTbihnbik7dmFyIHhuPSFubiYmdmUuZmluZChn''@;'; put 'put ''bixrbik7aWYoIXhuKXt2YXIgem49Z24uRnVsbFBhdGhzWzBdO2tuLnNsaWNlKDAsem4ubGVuZ3RoKT09em4/em49a246KCIvIiE9em4uc2xpY2UoLTEpJiYoem4rPSIvIiksem49KHpuK2tuKS5yZXBsYWNlKCIvLyIsIi8iKSkseG49e25hbWU6UShrbiksdHlwZToyfSxnbi5GaWxlSW5kZXgu''@;'; put 'put ''cHVzaCh4biksZ24uRnVsbFBhdGhzLnB1c2goem4pLG5ufHx2ZS51dGlscy5jZmJfZ2MoZ24pfXJldHVybiB4bi5jb250ZW50PXduLHhuLnNpemU9d24/d24ubGVuZ3RoOjAsWnQmJihadC5DTFNJRCYmKHhuLmNsc2lkPVp0LkNMU0lEKSxadC5tdCYmKHhuLm10PVp0Lm10KSxadC5jdCYmKHhu''@;'; put 'put ''LmN0PVp0LmN0KSkseG59cmV0dXJuIFIuZmluZD1mdW5jdGlvbiBmcihnbixrbil7dmFyIHduPWduLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oV3Ipe3JldHVybiBXci50b1VwcGVyQ2FzZSgpfSksWnQ9d24ubWFwKGZ1bmN0aW9uKFdyKXt2YXIgb2k9V3Iuc3BsaXQoIi8iKTtyZXR1cm4gb2lb''@;'; put 'put ''b2kubGVuZ3RoLSgiLyI9PVdyLnNsaWNlKC0xKT8yOjEpXX0pLG5uPSExOzQ3PT09a24uY2hhckNvZGVBdCgwKT8obm49ITAsa249d25bMF0uc2xpY2UoMCwtMSkra24pOm5uPS0xIT09a24uaW5kZXhPZigiLyIpO3ZhciB4bj1rbi50b1VwcGVyQ2FzZSgpLHpuPSEwPT09bm4/d24uaW5kZXhP''@;'; put 'put ''Zih4bik6WnQuaW5kZXhPZih4bik7aWYoLTEhPT16bilyZXR1cm4gZ24uRmlsZUluZGV4W3puXTt2YXIgeXI9IXhuLm1hdGNoKG0pO2Zvcih4bj14bi5yZXBsYWNlKEUsIiIpLHlyJiYoeG49eG4ucmVwbGFjZShtLCIhIikpLHpuPTA7em48d24ubGVuZ3RoOysrem4paWYoKHlyP3duW3puXS5y''@;'; put 'put ''ZXBsYWNlKG0sIiEiKTp3blt6bl0pLnJlcGxhY2UoRSwiIik9PXhufHwoeXI/WnRbem5dLnJlcGxhY2UobSwiISIpOlp0W3puXSkucmVwbGFjZShFLCIiKT09eG4pcmV0dXJuIGduLkZpbGVJbmRleFt6bl07cmV0dXJuIG51bGx9LFIucmVhZD1mdW5jdGlvbiBycihnbixrbil7c3dpdGNoKGtu''@;'; put 'put ''JiZrbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gVG4oZ24sa24pe3JldHVybiBQZSgpLE5lKHllLnJlYWRGaWxlU3luYyhnbiksa24pfShnbixrbik7Y2FzZSJiYXNlNjQiOnJldHVybiBOZShiKF9lLmRlY29kZShnbikpLGtuKTtjYXNlImJpbmFyeSI6cmV0''@;'; put 'put ''dXJuIE5lKGIoZ24pLGtuKX1yZXR1cm4gTmUoZ24sa24pfSxSLnBhcnNlPU5lLFIud3JpdGU9ZnVuY3Rpb24gVm4oZ24sa24pe3ZhciB3bj1Cbihnbixrbik7c3dpdGNoKGtuJiZrbi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBQZSgpLHllLndyaXRlRmlsZVN5bmMoa24uZmlsZW5hbWUsd24p''@;'; put 'put ''LHduO2Nhc2UiYmluYXJ5IjpyZXR1cm4ga3Iod24pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gX2UuZW5jb2RlKGtyKHduKSl9cmV0dXJuIHdufSxSLndyaXRlRmlsZT1mdW5jdGlvbiBMaShnbixrbix3bil7UGUoKTt2YXIgWnQ9Qm4oZ24sd24pO3llLndyaXRlRmlsZVN5bmMoa24sWnQpfSxSLnV0''@;'; put 'put ''aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIHhsKGduKXt2YXIga249e307cmV0dXJuIFNuKGtuLGduKSxrbn0sY2ZiX2FkZDpfdSxjZmJfZGVsOmZ1bmN0aW9uIEVsKGduLGtuKXtTbihnbik7dmFyIHduPXZlLmZpbmQoZ24sa24pO2lmKHduKWZvcih2YXIgWnQ9MDtadDxnbi5GaWxlSW5kZXgubGVu''@;'; put 'put ''Z3RoOysrWnQpaWYoZ24uRmlsZUluZGV4W1p0XT09d24pcmV0dXJuIGduLkZpbGVJbmRleC5zcGxpY2UoWnQsMSksZ24uRnVsbFBhdGhzLnNwbGljZShadCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiBGZihnbixrbix3bil7U24oZ24pO3ZhciBadD12ZS5maW5kKGduLGtuKTtp''@;'; put 'put ''ZihadClmb3IodmFyIG5uPTA7bm48Z24uRmlsZUluZGV4Lmxlbmd0aDsrK25uKWlmKGduLkZpbGVJbmRleFtubl09PVp0KXJldHVybiBnbi5GaWxlSW5kZXhbbm5dLm5hbWU9USh3biksZ24uRnVsbFBhdGhzW25uXT13biwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIHlkKGduKXtYbihn''@;'; put 'put ''biwhMCl9LFJlYWRTaGlmdDpqbCxDaGVja0ZpZWxkOl9uLHByZXBfYmxvYjptbixiY29uY2F0OmosdXNlX3psaWI6ZnVuY3Rpb24gX3IoZ24pe3RyeXt2YXIgd249bmV3KDAsZ24uSW5mbGF0ZVJhdyk7aWYod24uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksd24uX2Zpbmlz''@;'; put 'put ''aEZsdXNoRmxhZyksIXduLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0JyPWdufWNhdGNoKFp0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhadC5tZXNzYWdlfHxadCkpfX0sX2RlZmxhdGVSYXc6''@;'; put 'put ''R2wsX2luZmxhdGVSYXc6SGksY29uc3RzOmNhfSxSfSgpO3RyeXtYZT15KDgzMzM3KX1jYXRjaHt9ZnVuY3Rpb24gemUoUyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP3goUyk6QXJyYXkuaXNBcnJheShTKT9mdW5jdGlvbiBUKFMpe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KFMpfShTKTpTfWZ1bmN0aW9uIERlKFMsUixrKXtpZih0eXBlb2YgWGU8InUiJiZYZS53cml0ZUZpbGVTeW5jKXJldHVybiBrP1hlLndyaXRlRmlsZVN5bmMoUyxSLGspOlhlLndyaXRlRmlsZVN5bmMoUyxSKTt2''@;'; put 'put ''YXIgRz0idXRmOCI9PWs/TnMoUik6UjtpZih0eXBlb2YgSUVfU2F2ZUZpbGU8InUiKXJldHVybiBJRV9TYXZlRmlsZShHLFMpO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIFE9bmV3IEJsb2IoW3plKEcpXSx7dHlwZToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn0pO2lmKHR5cGVvZiBuYXZp''@;'; put 'put ''Z2F0b3I8InUiJiZuYXZpZ2F0b3IubXNTYXZlQmxvYilyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZUJsb2IoUSxTKTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKFEsUyk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1l''@;'; put 'put ''bnQmJlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBvZT1VUkwuY3JlYXRlT2JqZWN0VVJMKFEpO2lmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiYiZnVuY3Rpb24iPT10eXBlb2YoY2hyb21lLmRvd25sb2Fkc3x8e30pLmRvd25sb2FkKXJldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBl''@;'; put 'put ''b2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKG9lKX0sNmU0KSxjaHJvbWUuZG93bmxvYWRzLmRvd25sb2FkKHt1cmw6b2UsZmlsZW5hbWU6UyxzYXZlQXM6ITB9KTt2YXIgZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lm''@;'; put 'put ''KG51bGwhPWdlLmRvd25sb2FkKXJldHVybiBnZS5kb3dubG9hZD1TLGdlLmhyZWY9b2UsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnZSksZ2UuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGdlKSxVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSIm''@;'; put 'put ''JnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKG9lKX0sNmU0KSxvZX19aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgcGU9RmlsZShTKTtyZXR1cm4gcGUub3BlbigidyIpLHBlLmVuY29kaW5nPSJiaW5h''@;'; put 'put ''cnkiLEFycmF5LmlzQXJyYXkoUikmJihSPUMoUikpLHBlLndyaXRlKFIpLHBlLmNsb3NlKCksUn1jYXRjaCh5ZSl7aWYoIXllLm1lc3NhZ2V8fCF5ZS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IHllfXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNhdmUgZmlsZSAiK1MpfWZ1bmN0''@;'; put 'put ''aW9uIE9lKFMpe2Zvcih2YXIgUj1PYmplY3Qua2V5cyhTKSxrPVtdLEc9MDtHPFIubGVuZ3RoOysrRylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxSW0ddKSYmay5wdXNoKFJbR10pO3JldHVybiBrfWZ1bmN0aW9uIEllKFMsUil7Zm9yKHZhciBrPVtdLEc9T2UoUyks''@;'; put 'put ''UT0wO1EhPT1HLmxlbmd0aDsrK1EpbnVsbD09a1tTW0dbUV1dW1JdXSYmKGtbU1tHW1FdXVtSXV09R1tRXSk7cmV0dXJuIGt9ZnVuY3Rpb24gVmUoUyl7Zm9yKHZhciBSPVtdLGs9T2UoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpUltTW2tbR11dXT1rW0ddO3JldHVybiBSfWZ1bmN0aW9uIGtl''@;'; put 'put ''KFMpe2Zvcih2YXIgUj1bXSxrPU9lKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKVJbU1trW0ddXV09cGFyc2VJbnQoa1tHXSwxMCk7cmV0dXJuIFJ9dmFyIFFlLHVuLF90PW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApLG50PTA7ZnVuY3Rpb24geXQoKXtudD1fdC5nZXRUaW1lKCkrNmU0Kigo''@;'; put 'put ''bmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpvbmVPZmZzZXQoKSksUWU9ZnVuY3Rpb24oUixrKXt2YXIgRz1SLmdldFRpbWUoKTtyZXR1cm4gayYmKEctPTEyNjMxNjhlNSksKEctbnQpLzg2NGU1fSx1bj1mdW5jdGlvbihSKXt2YXIgaz1uZXcgRGF0ZTtyZXR1cm4g''@;'; put 'put ''ay5zZXRUaW1lKDI0KlIqNjAqNjAqMWUzK250KSxrfX1mdW5jdGlvbiBpdChTKXt2YXIgUj0wLGs9MCxHPSExLFE9Uy5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighUSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoInwiK1MrInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFyIG9lPTE7b2UhPVEubGVuZ3RoOysrb2UpaWYoUVtvZV0pe3N3aXRjaChrPTEsb2U+MyYmKEc9ITApLFFbb2VdLnNsaWNlKFFbb2VdLmxlbmd0aC0xKSl7Y2FzZSJZIjp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogIitRW29lXS5zbGljZShRW29lXS5sZW5ndGgtMSkpO2Nhc2UiRCI6ayo9MjQ7Y2FzZSJIIjprKj02MDtjYXNlIk0iOmlmKCFHKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7ayo9NjB9''@;'; put 'put ''Uis9aypwYXJzZUludChRW29lXSwxMCl9cmV0dXJuIFJ9eXQoKTt2YXIgJGU9bmV3IERhdGUoIjIwMTctMDItMTlUMTk6MDY6MDkuMDAwWiIpO2lzTmFOKCRlLmdldEZ1bGxZZWFyKCkpJiYoJGU9bmV3IERhdGUoIjIvMTkvMTciKSk7dmFyIHR0PTIwMTc9PSRlLmdldEZ1bGxZZWFyKCk7ZnVu''@;'; put 'put ''Y3Rpb24gSGUoUyxSKXt2YXIgaz1uZXcgRGF0ZShTKTtpZih0dClyZXR1cm4gUj4wP2suc2V0VGltZShrLmdldFRpbWUoKSs2MCprLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKTpSPDAmJmsuc2V0VGltZShrLmdldFRpbWUoKS02MCprLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSxrO2lmKFMg''@;'; put 'put ''aW5zdGFuY2VvZiBEYXRlKXJldHVybiBTO2lmKDE5MTc9PSRlLmdldEZ1bGxZZWFyKCkmJiFpc05hTihrLmdldEZ1bGxZZWFyKCkpKXt2YXIgRz1rLmdldEZ1bGxZZWFyKCk7cmV0dXJuIFMuaW5kZXhPZigiIitHKT4tMXx8ay5zZXRGdWxsWWVhcihrLmdldEZ1bGxZZWFyKCkrMTAwKSxrfXZh''@;'; put 'put ''ciBRPVMubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIsIjAiLCIwIl0sb2U9bmV3IERhdGUoK1FbMF0sK1FbMV0tMSwrUVsyXSwrUVszXXx8MCwrUVs0XXx8MCwrUVs1XXx8MCk7cmV0dXJuIFMuaW5kZXhPZigiWiIpPi0xJiYob2U9bmV3IERhdGUob2UuZ2V0VGltZSgpLTYw''@;'; put 'put ''Km9lLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksb2V9ZnVuY3Rpb24gdXQoUyl7Zm9yKHZhciBSPSIiLGs9MDtrIT1TLmxlbmd0aDsrK2spUis9U3RyaW5nLmZyb21DaGFyQ29kZShTW2tdKTtyZXR1cm4gUn1mdW5jdGlvbiBxdChTKXtpZigib2JqZWN0IiE9dHlwZW9mIFN8fG51bGw9PVMp''@;'; put 'put ''cmV0dXJuIFM7aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKFMuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBmdW5jdGlvbiBSdChTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg7KytrKXt2YXIgRz1TW2tdOyJvYmplY3QiPT10eXBlb2YgRz9S''@;'; put 'put ''W2tdPXF0KEcpOm51bGwhPUcmJihSW2tdPUcpfXJldHVybiBSfShTKTt2YXIgUj17fTtmb3IodmFyIGsgaW4gUylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxrKSYmKFJba109cXQoU1trXSkpO3JldHVybiBSfWZ1bmN0aW9uIFB0KFMsUil7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBSfHxudWxsPT1SKXJldHVybiBTO2Zvcih2YXIgayBpbiBSKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYoU1trXT1xdChSW2tdKSk7cmV0dXJuIFN9ZnVuY3Rpb24gY2koUyxSKXtmb3IodmFyIGs9IiI7ay5sZW5ndGg8Ujspays9UztyZXR1cm4ga31m''@;'; put 'put ''dW5jdGlvbiBRdChTKXt2YXIgUj1OdW1iZXIoUyk7aWYoIWlzTmFOKFIpKXJldHVybiBpc0Zpbml0ZShSKT9SOk5hTjtpZighL1xkLy50ZXN0KFMpKXJldHVybiBSO3ZhciBrPTEsRz1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNl''@;'; put 'put ''KC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBrKj0xMDAsIiJ9KTtyZXR1cm4gaXNOYU4oUj1OdW1iZXIoRykpJiYoRz1HLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKFEsb2Upe3JldHVybiBrPS1rLG9lfSksaXNOYU4oUj1OdW1iZXIoRykpKT9SOlIva31mdW5jdGlvbiBzbihTKXt2''@;'; put 'put ''YXIgUj1uZXcgRGF0ZShTKSxrPW5ldyBEYXRlKE5hTiksRz1SLmdldFllYXIoKSxRPVIuZ2V0TW9udGgoKSxvZT1SLmdldERhdGUoKTtyZXR1cm4gaXNOYU4ob2UpfHxHPDB8fEc+ODA5OT9rOihRPjB8fG9lPjEpJiYxMDEhPUd8fFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8''@;'; put 'put ''YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKT9SOlMubWF0Y2goL1teLTAtOTosXC9cXF0vKT9rOlJ9ZnVuY3Rpb24gUmkoUyxSKXtpZihSJiZSLnJhdylyZXR1cm57dDoicyIsdjpTfTtpZighUylyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PVMpcmV0dXJue3Q6ImIiLHY6''@;'; put 'put ''ITB9O2lmKCJGQUxTRSI9PT1TKXJldHVybnt0OiJiIix2OiExfTt2YXIgaz0iIixHPU51bWJlcihTKTtpZihpc0Zpbml0ZShHKSlyZXR1cm57dDoibiIsdjpHfTtpZihpc05hTihHKSYmL1xkLy50ZXN0KFMpKXt2YXIgUT0xLG9lPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLGZ1bmN0aW9u''@;'; put 'put ''KGV0LGN0LEV0KXtyZXR1cm4ga3x8KGs9IiMsIyMwIiksY3QrRXR9KS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKGV0KXtrfHwoaz0iMCIpLGsrPSIuIjtmb3IodmFyIGN0PTI7Y3Q8PWV0Lmxlbmd0aDsrK2N0KWsrPSIwIjtyZXR1cm4gZXR9KS5yZXBsYWNl''@;'; put 'put ''KC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBRKj0xMDAsa3x8KGs9IjAiKSxrKz0iJSIsIiJ9KTtpZighaXNOYU4oRz1OdW1iZXIob2UpKSlyZXR1cm57dDoibiIsdjpHL1EsejprfTtpZihvZT1vZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihldCxjdCl7cmV0dXJuIFE9LVEsY3R9''@;'; put 'put ''KSwhaXNOYU4oRz1OdW1iZXIob2UpKSlyZXR1cm57dDoibiIsdjpHL1Esejooa3x8IjAiKSsiXyk7KCIrKGt8fCIwIikrIik7QCJ9fWU6aWYoIVJ8fCFSLnJhd0RhdGVzKXt2YXIgZ2U9UiYmUi5jZWxsRGF0ZXMscGU9bmV3IERhdGUoUyksUGU9cGUuZ2V0WWVhcigpLE5lPXBlLmdldE1vbnRo''@;'; put 'put ''KCksWWU9cGUuZ2V0RGF0ZSgpO2lmKGlzTmFOKFllKXx8UGU8MHx8UGU+ODA5OSlicmVhayBlO2lmKChOZT4wfHxZZT4xKSYmMTAxIT1QZSlyZXR1cm57dDpnZT8iZCI6Im4iLHY6Z2U/cGU6UWUocGUpLHo6Ui5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy50b0xvd2VyQ2FzZSgpLm1hdGNo''@;'; put 'put ''KC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pKXJldHVybnt0OmdlPyJkIjoibiIsdjpnZT9wZTpRZShwZSksejpSLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gcGV9cmV0dXJu''@;'; put 'put ''e3Q6InMiLHY6U319dmFyIHp0LGhuPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO2Z1bmN0aW9uIFd0KFMpe3JldHVybiBudWxsIT1TJiYhU31mdW5jdGlvbiBBdChTKXtyZXR1cm4gUy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStTLnNsaWNlKDEpfWZ1bmN0aW9uIFJuKFMp''@;'; put 'put ''e3JldHVybiBTP1MuZGF0YT9KKFMuZGF0YSk6Uy5hc05vZGVCdWZmZXImJlRlP0ooUy5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOlMuYXNCaW5hcnk/SihTLmFzQmluYXJ5KCkpOlMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudD9KKHV0KEFycmF5LnByb3RvdHlwZS5zbGlj''@;'; put 'put ''ZS5jYWxsKFMuX2RhdGEuZ2V0Q29udGVudCgpLDApKSk6Uy5jb250ZW50JiZTLnR5cGU/Sih1dChTLmNvbnRlbnQpKTpudWxsOm51bGx9ZnVuY3Rpb24gc3QoUyl7aWYoIVMpcmV0dXJuIG51bGw7aWYoUy5kYXRhKXJldHVybiBZKFMuZGF0YSk7aWYoUy5hc05vZGVCdWZmZXImJlRlKXJldHVy''@;'; put 'put ''biBTLmFzTm9kZUJ1ZmZlcigpO2lmKFMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudCl7dmFyIFI9Uy5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBSP1koUik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUil9cmV0dXJuIFMuY29udGVudCYmUy50eXBlP1Mu''@;'; put 'put ''Y29udGVudDpudWxsfWZ1bmN0aW9uIHJpKFMsUil7Zm9yKHZhciBrPVMuRnVsbFBhdGhzfHxPZShTLmZpbGVzKSxHPVIudG9Mb3dlckNhc2UoKSxRPUcucmVwbGFjZSgvXC8vZywiXFwiKSxvZT0wO29lPGsubGVuZ3RoOysrb2Upe3ZhciBnZT1rW29lXS50b0xvd2VyQ2FzZSgpO2lmKEc9PWdl''@;'; put 'put ''fHxRPT1nZSlyZXR1cm4gUy5maWxlc1trW29lXV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2UoUyxSKXt2YXIgaz1yaShTLFIpO2lmKG51bGw9PWspdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrUisiIGluIHppcCIpO3JldHVybiBrfWZ1bmN0aW9uIFR0KFMsUixrKXtpZigh''@;'; put 'put ''aylyZXR1cm4gZnVuY3Rpb24gVXQoUyl7cmV0dXJuIFMmJiIuYmluIj09PVMubmFtZS5zbGljZSgtNCk/c3QoUyk6Um4oUyl9KFdlKFMsUikpO2lmKCFSKXJldHVybiBudWxsO3RyeXtyZXR1cm4gVHQoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbnIoUyxSLGspe2lmKCFrKXJl''@;'; put 'put ''dHVybiBSbihXZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIG5yKFMsUil9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGh0KFMsUixrKXtpZighaylyZXR1cm4gc3QoV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBodChTLFIpfWNhdGNoe3JldHVy''@;'; put 'put ''biBudWxsfX1mdW5jdGlvbiBqbihTLFIsayl7Uy5GdWxsUGF0aHM/dmUudXRpbHMuY2ZiX2FkZChTLFIsayk6Uy5maWxlKFIsayl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4genQ/bmV3IHp0OnZlLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiBjbihTLFIpe3ZhciBrO2lmKHp0KXN3aXRjaChSLnR5''@;'; put 'put ''cGUpe2Nhc2UiYmFzZTY0IjprPW5ldyB6dChTLHtiYXNlNjQ6ITB9KTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6az1uZXcgenQoUyx7YmFzZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOms9bmV3IHp0KFMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29n''@;'; put 'put ''bml6ZWQgdHlwZSAiK1IudHlwZSl9ZWxzZSBzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6az12ZS5yZWFkKFMse3R5cGU6ImJhc2U2NCJ9KTticmVhaztjYXNlImJpbmFyeSI6az12ZS5yZWFkKFMse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6az12''@;'; put 'put ''ZS5yZWFkKFMse3R5cGU6ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfXJldHVybiBrfWZ1bmN0aW9uIGZuKFMsUil7aWYoIi8iPT1TLmNoYXJBdCgwKSlyZXR1cm4gUy5zbGljZSgxKTt2YXIgaz1SLnNwbGl0KCIv''@;'; put 'put ''Iik7Ii8iIT1SLnNsaWNlKC0xKSYmay5wb3AoKTtmb3IodmFyIEc9Uy5zcGxpdCgiLyIpOzAhPT1HLmxlbmd0aDspe3ZhciBRPUcuc2hpZnQoKTsiLi4iPT09UT9rLnBvcCgpOiIuIiE9PVEmJmsucHVzaChRKX1yZXR1cm4gay5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih6dD1K''@;'; put 'put ''U1ppcFN5bmMpLHVlLmV4cG9ydHMmJnR5cGVvZiB6dD4idSImJih6dD15KDMxNzkpKTt2YXIgSWk9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxYdD0vKD86W14iXHM/PlwvXSspXHMqPVxzKigoPzoiKSg/OlteIl0qPykoPzoi''@;'; put 'put ''KXwoPzonKSg/OlteJ10qPykoPzonKXwoPzpbXiciPlxzXSspKS9nLGVuPS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPlxzPV0rKSkqXHM/W1wvXD9dPz4vZztJaS5tYXRjaChlbil8fChlbj0vPFtePl0qPi9n''@;'; put 'put ''KTt2YXIgdWE9Lzxcdyo6LyxFaT0vPChcLz8pXHcrOi87ZnVuY3Rpb24gdnIoUyxSLGspe2Zvcih2YXIgRz17fSxRPTAsb2U9MDtRIT09Uy5sZW5ndGgmJjMyIT09KG9lPVMuY2hhckNvZGVBdChRKSkmJjEwIT09b2UmJjEzIT09b2U7KytRKTtpZihSfHwoR1swXT1TLnNsaWNlKDAsUSkpLFE9''@;'; put 'put ''PT1TLmxlbmd0aClyZXR1cm4gRzt2YXIgZ2U9Uy5tYXRjaChYdCkscGU9MCx5ZT0iIixQZT0wLE5lPSIiLFllPSIiLGV0PTE7aWYoZ2UpZm9yKFBlPTA7UGUhPWdlLmxlbmd0aDsrK1BlKXtmb3IoWWU9Z2VbUGVdLG9lPTA7b2UhPVllLmxlbmd0aCYmNjEhPT1ZZS5jaGFyQ29kZUF0KG9lKTsr''@;'; put 'put ''K29lKTtmb3IoTmU9WWUuc2xpY2UoMCxvZSkudHJpbSgpOzMyPT1ZZS5jaGFyQ29kZUF0KG9lKzEpOykrK29lO2ZvcihldD0zND09KFE9WWUuY2hhckNvZGVBdChvZSsxKSl8fDM5PT1RPzE6MCx5ZT1ZZS5zbGljZShvZSsxK2V0LFllLmxlbmd0aC1ldCkscGU9MDtwZSE9TmUubGVuZ3RoJiY1''@;'; put 'put ''OCE9PU5lLmNoYXJDb2RlQXQocGUpOysrcGUpO2lmKHBlPT09TmUubGVuZ3RoKU5lLmluZGV4T2YoIl8iKT4wJiYoTmU9TmUuc2xpY2UoMCxOZS5pbmRleE9mKCJfIikpKSxHW05lXT15ZSxrfHwoR1tOZS50b0xvd2VyQ2FzZSgpXT15ZSk7ZWxzZXt2YXIgY3Q9KDU9PT1wZSYmInhtbG5zIj09''@;'; put 'put ''PU5lLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrTmUuc2xpY2UocGUrMSk7aWYoR1tjdF0mJiJleHQiPT1OZS5zbGljZShwZS0zLHBlKSljb250aW51ZTtHW2N0XT15ZSxrfHwoR1tjdC50b0xvd2VyQ2FzZSgpXT15ZSl9fXJldHVybiBHfWZ1bmN0aW9uIFduKFMpe3JldHVybiBTLnJlcGxhY2Uo''@;'; put 'put ''RWksIjwkMSIpfXZhciAkaT17IiZxdW90OyI6JyInLCImYXBvczsiOiInIiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9LGVpPVZlKCRpKSxRcj1mdW5jdGlvbigpe3ZhciBTPS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksUj0vX3goW1xk''@;'; put 'put ''YS1mQS1GXXs0fSlfL2dpO3JldHVybiBmdW5jdGlvbiBrKEcpe3ZhciBRPUcrIiIsb2U9US5pbmRleE9mKCI8IVtDREFUQVsiKTtpZigtMT09b2UpcmV0dXJuIFEucmVwbGFjZShTLGZ1bmN0aW9uKHBlLHllKXtyZXR1cm4gJGlbcGVdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHll''@;'; put 'put ''LHBlLmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHxwZX0pLnJlcGxhY2UoUixmdW5jdGlvbihwZSx5ZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoeWUsMTYpKX0pO3ZhciBnZT1RLmluZGV4T2YoIl1dPiIpO3JldHVybiBrKFEuc2xpY2UoMCxvZSkpK1Euc2xpY2Uob2Ur''@;'; put 'put ''OSxnZSkrayhRLnNsaWNlKGdlKzMpKX19KCksVmk9L1smPD4nIl0vZyxOaT0vW1x1MDAwMC1cdTAwMDhcdTAwMGItXHUwMDFmXS9nLERhPS9feFswLTlhLWZBLUZdezR9Xy9nO2Z1bmN0aW9uIExyKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKERhLCJfeDAwNUYkJiIpLnJlcGxhY2UoVmksZnVu''@;'; put 'put ''Y3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZShOaSxmdW5jdGlvbihrKXtyZXR1cm4iX3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIl8ifSl9ZnVuY3Rpb24gV2koUyl7cmV0dXJuIExyKFMpLnJlcGxhY2UoL1xuL2csIl94MDAwYV8iKX1m''@;'; put 'put ''dW5jdGlvbiBwYShTKXtyZXR1cm4gTHIoUykucmVwbGFjZSgvIC9nLCJfeDAwMjBfIil9dmFyIFFuPS9bXHUwMDAwLVx1MDAxZl0vZztmdW5jdGlvbiBsYShTKXtyZXR1cm4oUysiIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIp''@;'; put 'put ''LnJlcGxhY2UoUW4sZnVuY3Rpb24oayl7cmV0dXJuIiYjeCIrKCIwMDAiK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiOyJ9KX1mdW5jdGlvbiB5YShTKXtyZXR1cm4oUysiIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKFFu''@;'; put 'put ''LGZ1bmN0aW9uKGspe3JldHVybiImI3giK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiOyJ9KX12YXIgTGE9ZnVuY3Rpb24oKXt2YXIgUz0vJiMoXGQrKTsvZztmdW5jdGlvbiBSKGssRyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoRywx''@;'; put 'put ''MCkpfXJldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gRy5yZXBsYWNlKFMsUil9fSgpLEZhPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoLyhcclxufFtcclxuXSkvZywiJiMxMDsiKX19KCk7ZnVuY3Rpb24gdGkoUyl7c3dpdGNoKFMpe2Nhc2UgMTpjYXNl''@;'; put 'put ''ITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19dmFyIGdvPWZ1bmN0aW9uKFIpe2Zvcih2YXIgaz0iIixHPTAsUT0wLG9lPTAsZ2U9MCxwZT0wLHllPTA7RzxSLmxlbmd0aDspKFE9Ui5jaGFyQ29kZUF0KEcrKykpPDEyOD9rKz1TdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKFEpOihvZT1SLmNoYXJDb2RlQXQoRysrKSxRPjE5MSYmUTwyMjQ/KHBlPSgzMSZRKTw8NixwZXw9NjMmb2Usays9U3RyaW5nLmZyb21DaGFyQ29kZShwZSkpOihnZT1SLmNoYXJDb2RlQXQoRysrKSxRPDI0MD9rKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZRKTw8''@;'; put 'put ''MTJ8KDYzJm9lKTw8Nnw2MyZnZSk6KHllPSgoNyZRKTw8MTh8KDYzJm9lKTw8MTJ8KDYzJmdlKTw8Nnw2MyYocGU9Ui5jaGFyQ29kZUF0KEcrKykpKS02NTUzNixrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2Kyh5ZT4+PjEwJjEwMjMpKSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIw''@;'; put 'put ''KygxMDIzJnllKSkpKSk7cmV0dXJuIGt9LE5zPWZ1bmN0aW9uKFMpe2Zvcih2YXIgUj1bXSxrPTAsRz0wLFE9MDtrPFMubGVuZ3RoOylzd2l0Y2goRz1TLmNoYXJDb2RlQXQoaysrKSwhMCl7Y2FzZSBHPDEyODpSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShHKSk7YnJlYWs7Y2FzZSBHPDIw''@;'; put 'put ''NDg6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhHPj42KSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmRykpKTticmVhaztjYXNlIEc+PTU1Mjk2JiZHPDU3MzQ0OkctPTU1Mjk2LFE9Uy5jaGFyQ29kZUF0KGsrKyktNTYzMjArKEc8PDEwKSxSLnB1c2goU3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSgyNDArKFE+PjE4JjcpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTQ0KyhRPj4xMiY2MykpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKFE+PjYmNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkpO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjI0KyhHPj4xMikpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKEc+PjYmNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZHKSkpfXJldHVybiBSLmpvaW4oIiIpfTtpZihUZSl7dmFyIGJs''@;'; put 'put ''PWZ1bmN0aW9uKFIpe3ZhciBHLFEseWUsaz1CdWZmZXIuYWxsb2MoMipSLmxlbmd0aCksb2U9MSxnZT0wLHBlPTA7Zm9yKFE9MDtRPFIubGVuZ3RoO1ErPW9lKW9lPTEsKHllPVIuY2hhckNvZGVBdChRKSk8MTI4P0c9eWU6eWU8MjI0PyhHPTY0KigzMSZ5ZSkrKDYzJlIuY2hhckNvZGVBdChR''@;'; put 'put ''KzEpKSxvZT0yKTp5ZTwyNDA/KEc9NDA5NiooMTUmeWUpKzY0Kig2MyZSLmNoYXJDb2RlQXQoUSsxKSkrKDYzJlIuY2hhckNvZGVBdChRKzIpKSxvZT0zKToob2U9NCxHPTI2MjE0NCooNyZ5ZSkrNDA5NiooNjMmUi5jaGFyQ29kZUF0KFErMSkpKzY0Kig2MyZSLmNoYXJDb2RlQXQoUSsyKSkr''@;'; put 'put ''KDYzJlIuY2hhckNvZGVBdChRKzMpKSxwZT01NTI5NisoKEctPTY1NTM2KT4+PjEwJjEwMjMpLEc9NTYzMjArKDEwMjMmRykpLDAhPT1wZSYmKGtbZ2UrK109MjU1JnBlLGtbZ2UrK109cGU+Pj44LHBlPTApLGtbZ2UrK109RyUyNTYsa1tnZSsrXT1HPj4+ODtyZXR1cm4gay5zbGljZSgwLGdl''@;'; put 'put ''KS50b1N0cmluZygidWNzMiIpfSxwdT0iZm9vIGJhciBiYXpceGUyXHg5OFx4ODNceGYwXHg5Zlx4OGRceGEzIjtnbyhwdSk9PWJsKHB1KSYmKGdvPWJsKTt2YXIgTGM9ZnVuY3Rpb24oUil7cmV0dXJuIFNlKFIsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9O2dvKHB1KT09TGMocHUpJiYo''@;'; put 'put ''Z289TGMpLE5zPWZ1bmN0aW9uKFMpe3JldHVybiBTZShTLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfX12YXIgUyxEMD1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWsrInwiKyhHfHwiIik7cmV0dXJuIFNbUV0/U1tRXTpTW1FdPW5ldyBSZWdFeHAo''@;'; put 'put ''IjwoPzpcXHcrOik/IitrKycoPzogeG1sOnNwYWNlPSJwcmVzZXJ2ZSIpPyg/OltePl0qKT4oW1xcc1xcU10qPyk8Lyg/Olxcdys6KT8nK2srIj4iLEd8fCIiKX19KCksaXI9KFM9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9zIiwiJyJdLFsiZ3Qi''@;'; put 'put ''LCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKFIpe3JldHVybltuZXcgUmVnRXhwKCImIitSWzBdKyI7IiwiaWciKSxSWzFdXX0pLGZ1bmN0aW9uKGspe2Zvcih2YXIgRz1rLnJlcGxhY2UoL15bXHRcblxyIF0rLywiIikucmVwbGFjZSgvW1x0XG5cciBdKyQvLCIi''@;'; put 'put ''KS5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKS5yZXBsYWNlKC88XHMqW2JCXVtyUl1ccypcLz8+L2csIlxuIikucmVwbGFjZSgvPFtePl0qPi9nLCIiKSxRPTA7UTxTLmxlbmd0aDsrK1EpRz1HLnJlcGxhY2UoU1tRXVswXSxTW1FdWzFdKTtyZXR1cm4gR30pLHhhPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IFM9e307cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiB2b2lkIDAhPT1TW2tdP1Nba106U1trXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK2srIj4oW1xcc1xcU10qPyk8Lyg/OnZ0Oik/IitrKyI+IiwiZyIpfX0oKSx1aT0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyxWdD0vPCg/OnZ0OikoW14+''@;'; put 'put ''XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEpyKFMsUil7dmFyIGs9dnIoUyksRz1TLm1hdGNoKHhhKGsuYmFzZVR5cGUpKXx8W10sUT1bXTtpZihHLmxlbmd0aCE9ay5zaXplKXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK0cubGVuZ3RoKyIg''@;'; put 'put ''IT0gIitrLnNpemUpO3JldHVybiBRfXJldHVybiBHLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBnZT1vZS5yZXBsYWNlKHVpLCIiKS5tYXRjaChWdCk7Z2UmJlEucHVzaCh7djpnbyhnZVsyXSksdDpnZVsxXX0pfSksUX12YXIgYjA9LyheXHN8XHMkfFxuKS87ZnVuY3Rpb24gSGEoUyxSKXty''@;'; put 'put ''ZXR1cm4iPCIrUysoUi5tYXRjaChiMCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitSKyI8LyIrUysiPiJ9ZnVuY3Rpb24gTHUoUyl7cmV0dXJuIE9lKFMpLm1hcChmdW5jdGlvbihSKXtyZXR1cm4iICIrUisnPSInK1NbUl0rJyInfSkuam9pbigiIil9ZnVuY3Rpb24gUHIoUyxS''@;'; put 'put ''LGspe3JldHVybiI8IitTKyhudWxsIT1rP0x1KGspOiIiKSsobnVsbCE9Uj8oUi5tYXRjaChiMCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitSKyI8LyIrUzoiLyIpKyI+In1mdW5jdGlvbiBjZihTLFIpe3RyeXtyZXR1cm4gUy50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQq''@;'; put 'put ''LywiIil9Y2F0Y2goayl7aWYoUil0aHJvdyBrfXJldHVybiIifXZhciAkaCxLaCxZaT17ZGM6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIixkY3Rlcm1zOiJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIixkY21pdHlwZToiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlLyIs''@;'; put 'put ''bXg6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21hYy9leGNlbC8yMDA4L21haW4iLHI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLHNqczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL3BhY2thZ2UvMjAwNi9zaGVldGpzL2NvcmUtcHJvcGVydGllcyIsdnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzIix4c2k6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNl''@;'; put 'put ''Iix4c2Q6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIixtYWluOlsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvc3ByZWFkc2hlZXRtbC9tYWluIiwiaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi8yIl19LHlsPXtvOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLHg6InVybjpzY2hlbWFzLW1pY3Jv''@;'; put 'put ''c29mdC1jb206b2ZmaWNlOmV4Y2VsIixzczoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLGR0OiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsbXY6Imh0dHA6Ly9tYWNWbWxTY2hlbWFVcmkiLHY6InVybjpzY2hlbWFzLW1p''@;'; put 'put ''Y3Jvc29mdC1jb206dm1sIixodG1sOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0seTA9ZnVuY3Rpb24oUyl7Zm9yKHZhciBSPVtdLEc9MDtHPFNbMF0ubGVuZ3RoOysrRylpZihTWzBdW0ddKWZvcih2YXIgUT0wLG9lPVNbMF1bR10ubGVuZ3RoO1E8b2U7USs9MTAyNDApUi5w''@;'; put 'put ''dXNoLmFwcGx5KFIsU1swXVtHXS5zbGljZShRLFErMTAyNDApKTtyZXR1cm4gUn0scjU9eTAsT2w9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxrO1ErPTIpRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZW8oUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpLnJlcGxhY2UoRSwi''@;'; put 'put ''Iil9LHVmPU9sLHNkPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8UitrOysrUSlHLnB1c2goKCIwIitTW1FdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gRy5qb2luKCIiKX0sZGY9c2QsazE9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxrO1Er''@;'; put 'put ''KylHLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShQbyhTLFEpKSk7cmV0dXJuIEcuam9pbigiIil9LGhmPWsxLGVoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrLTEpOiIifSxmZj1laCxHaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7''@;'; put 'put ''cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sT2M9R2gsTmE9ZnVuY3Rpb24oUyxSKXt2YXIgaz0yKnpvKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sRDM9TmE7JGg9S2g9ZnVuY3Rpb24oUixrKXt2YXIgRz16byhSLGspO3JldHVybiBHPjA/T2woUixrKzQs''@;'; put 'put ''ays0K0cpOiIifTt2YXIgYW4sdmkscWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2spOiIifSxBbj1xaDthbj12aT1mdW5jdGlvbihTLFIpe3JldHVybiBmdW5jdGlvbiBRYyhTLFIpe2Zvcih2YXIgaz0xLTIqKFNbUis3XT4+PjcpLEc9KCgx''@;'; put 'put ''MjcmU1tSKzddKTw8NCkrKFNbUis2XT4+PjQmMTUpLFE9MTUmU1tSKzZdLG9lPTU7b2U+PTA7LS1vZSlRPTI1NipRK1NbUitvZV07cmV0dXJuIDIwNDc9PUc/MD09UT9rKigxLzApOk5hTjooMD09Rz9HPS0xMDIyOihHLT0xMDIzLFErPU1hdGgucG93KDIsNTIpKSxrKk1hdGgucG93KDIsRy01''@;'; put 'put ''MikqUSl9KFMsUil9O3ZhciBBcj1mdW5jdGlvbihSKXtyZXR1cm4gQXJyYXkuaXNBcnJheShSKX07VGUmJihPbD1mdW5jdGlvbihTLFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJ1dGYxNmxlIixSLGspLnJlcGxhY2UoRSwiIik6dWYoUyxSLGspfSxzZD1mdW5j''@;'; put 'put ''dGlvbihTLFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJoZXgiLFIsUitrKTpkZihTLFIsayl9LGVoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gZmYoUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gRz4wP1Iu''@;'; put 'put ''dG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sR2g9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBPYyhSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBHPjA/Ui50b1N0cmluZygidXRmOCIsays0LGsrNCtHLTEpOiIifSxOYT1mdW5j''@;'; put 'put ''dGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEQzKFIsayk7dmFyIEc9MipSLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmluZygidXRmMTZsZSIsays0LGsrNCtHLTEpfSwkaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEto''@;'; put 'put ''KFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrRyl9LHFoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gQW4oUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmlu''@;'; put 'put ''ZygidXRmOCIsays0LGsrNCtHKX0sazE9ZnVuY3Rpb24oUixrLEcpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUik/Ui50b1N0cmluZygidXRmOCIsayxHKTpoZihSLGssRyl9LHkwPWZ1bmN0aW9uKFMpe3JldHVybiBTWzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIoU1swXVswXSk/QnVm''@;'; put 'put ''ZmVyLmNvbmNhdChTWzBdKTpyNShTKX0saj1mdW5jdGlvbihTKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFNbMF0pP0J1ZmZlci5jb25jYXQoUyk6W10uY29uY2F0LmFwcGx5KFtdLFMpfSxhbj1mdW5jdGlvbihSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUik/Ui5yZWFkRG91YmxlTEUo''@;'; put 'put ''ayk6dmkoUixrKX0sQXI9ZnVuY3Rpb24oUil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihSKXx8QXJyYXkuaXNBcnJheShSKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKE9sPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKFIsaykpLnJlcGxh''@;'; put 'put ''Y2UoRSwiIil9LGsxPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShSLGspKX0sZWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoRixTLnNsaWNlKFIrNCxSKzQray0xKSk6''@;'; put 'put ''IiJ9LEdoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKFAsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSxOYT1mdW5jdGlvbihTLFIpe3ZhciBrPTIqem8oUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAs''@;'; put 'put ''Uy5zbGljZShSKzQsUis0K2stMSkpOiIifSwkaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUis0LFIrNCtrKSk6IiJ9LHFoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2NwdGFi''@;'; put 'put ''bGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoUis0LFIrNCtrKSk6IiJ9KTt2YXIgUG89ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSXX0sZW89ZnVuY3Rpb24oUyxSKXtyZXR1cm4gMjU2KlNbUisxXStTW1JdfSxvbD1mdW5jdGlvbihTLFIpe3ZhciBrPTI1NipTW1IrMV0rU1tSXTtyZXR1''@;'; put 'put ''cm4gazwzMjc2OD9rOi0xKig2NTUzNS1rKzEpfSx6bz1mdW5jdGlvbihTLFIpe3JldHVybiBTW1IrM10qKDE8PDI0KSsoU1tSKzJdPDwxNikrKFNbUisxXTw8OCkrU1tSXX0sVnM9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSKzNdPDwyNHxTW1IrMl08PDE2fFNbUisxXTw8OHxTW1JdfSxTcz1m''@;'; put 'put ''dW5jdGlvbihTLFIpe3JldHVybiBTW1JdPDwyNHxTW1IrMV08PDE2fFNbUisyXTw8OHxTW1IrM119O2Z1bmN0aW9uIGpsKFMsUil7dmFyIEcsUSxnZSxwZSx5ZSxQZSxrPSIiLG9lPVtdO3N3aXRjaChSKXtjYXNlImRiY3MiOmlmKFBlPXRoaXMubCxUZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMp''@;'; put 'put ''KWs9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykudG9TdHJpbmcoInV0ZjE2bGUiKTtlbHNlIGZvcih5ZT0wO3llPFM7Kyt5ZSlrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVvKHRoaXMsUGUpKSxQZSs9MjtTKj0yO2JyZWFrO2Nhc2UidXRmOCI6az1rMSh0aGlzLHRoaXMubCx0aGlzLmwr''@;'; put 'put ''Uyk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjprPU9sKHRoaXMsdGhpcy5sLHRoaXMubCsoUyo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJsZTwidSIpKXJldHVybiBqbC5jYWxsKHRoaXMsUywiZGJjcyIpO2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRo''@;'; put 'put ''aXMubCx0aGlzLmwrMipTKSksUyo9MjticmVhaztjYXNlImxwc3RyLWFuc2kiOms9ZWgodGhpcyx0aGlzLmwpLFM9NCt6byh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6az1HaCh0aGlzLHRoaXMubCksUz00K3pvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6az1O''@;'; put 'put ''YSh0aGlzLHRoaXMubCksUz00KzIqem8odGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBwNCI6Uz00K3pvKHRoaXMsdGhpcy5sKSxrPSRoKHRoaXMsdGhpcy5sKSwyJlMmJihTKz0yKTticmVhaztjYXNlIjhscHA0IjpTPTQrem8odGhpcyx0aGlzLmwpLGs9cWgodGhpcyx0aGlzLmwpLDMmUyYm''@;'; put 'put ''KFMrPTQtKDMmUykpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0oZ2U9UG8odGhpcyx0aGlzLmwrUysrKSk7KW9lLnB1c2gobmUoZ2UpKTtrPW9lLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcihTPTAsaz0iIjswIT09KGdlPWVvKHRoaXMsdGhpcy5sK1MpKTspb2Uu''@;'; put 'put ''cHVzaChuZShnZSkpLFMrPTI7Uys9MixrPW9lLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3Ioaz0iIixQZT10aGlzLmwseWU9MDt5ZTxTOysreWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIGdlPVBvKHRoaXMsUGUpLHRoaXMubD1Q''@;'; put 'put ''ZSsxLHBlPWpsLmNhbGwodGhpcyxTLXllLGdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxvZS5qb2luKCIiKStwZTtvZS5wdXNoKG5lKGVvKHRoaXMsUGUpKSksUGUrPTJ9az1vZS5qb2luKCIiKSxTKj0yO2JyZWFrO2Nhc2UiY3BzdHIiOmlmKHR5cGVvZiBjcHRhYmxlPCJ1Iil7az1jcHRh''@;'; put 'put ''YmxlLnV0aWxzLmRlY29kZShQLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCtTKSk7YnJlYWt9Y2FzZSJzYmNzLWNvbnQiOmZvcihrPSIiLFBlPXRoaXMubCx5ZT0wO3llIT1TOysreWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIGdlPVBvKHRoaXMs''@;'; put 'put ''UGUpLHRoaXMubD1QZSsxLHBlPWpsLmNhbGwodGhpcyxTLXllLGdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxvZS5qb2luKCIiKStwZTtvZS5wdXNoKG5lKFBvKHRoaXMsUGUpKSksUGUrPTF9az1vZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChTKXtjYXNlIDE6cmV0dXJuIEc9''@;'; put 'put ''UG8odGhpcyx0aGlzLmwpLHRoaXMubCsrLEc7Y2FzZSAyOnJldHVybiBHPSgiaSI9PT1SP29sOmVvKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLEc7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1SJiYxMjgmdGhpc1t0aGlzLmwrM10/KFE9em8odGhpcyx0aGlzLmwpLHRoaXMubCs9NCxRKToo''@;'; put 'put ''Rz0oUz4wP1ZzOlNzKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LEcpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09UilyZXR1cm4gUT04PT1TP2FuKHRoaXMsdGhpcy5sKTphbihbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0''@;'; put 'put ''aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxRO1M9ODtjYXNlIDE2Oms9c2QodGhpcyx0aGlzLmwsUyl9fXJldHVybiB0aGlzLmwrPVMsa312YXIgSG89ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+''@;'; put 'put ''Pj44JjI1NSxTW2srMl09Uj4+PjE2JjI1NSxTW2srM109Uj4+PjI0JjI1NX0sa289ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+PjgmMjU1LFNbaysyXT1SPj4xNiYyNTUsU1trKzNdPVI+PjI0JjI1NX0sU3Q9ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+''@;'; put 'put ''Pj44JjI1NX07ZnVuY3Rpb24gQnQoUyxSLGspe3ZhciBHPTAsUT0wO2lmKCJkYmNzIj09PWspe2ZvcihRPTA7USE9Ui5sZW5ndGg7KytRKVN0KHRoaXMsUi5jaGFyQ29kZUF0KFEpLHRoaXMubCsyKlEpO0c9MipSLmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PWspe2lmKHR5cGVvZiBjcHRhYmxl''@;'; put 'put ''PCJ1IiYmODc0PT1GKWZvcihRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgb2U9Y3B0YWJsZS51dGlscy5lbmNvZGUoRixSLmNoYXJBdChRKSk7dGhpc1t0aGlzLmwrUV09b2VbMF19ZWxzZSBmb3IoUj1SLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIiksUT0wO1EhPVIubGVuZ3RoOysrUSl0''@;'; put 'put ''aGlzW3RoaXMubCtRXT0yNTUmUi5jaGFyQ29kZUF0KFEpO0c9Ui5sZW5ndGh9ZWxzZXtpZigiaGV4Ij09PWspe2Zvcig7UTxTOysrUSl0aGlzW3RoaXMubCsrXT1wYXJzZUludChSLnNsaWNlKDIqUSwyKlErMiksMTYpfHwwO3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PWspe3ZhciBnZT1N''@;'; put 'put ''YXRoLm1pbih0aGlzLmwrUyx0aGlzLmxlbmd0aCk7Zm9yKFE9MDtRPE1hdGgubWluKFIubGVuZ3RoLFMpOysrUSl7dmFyIHBlPVIuY2hhckNvZGVBdChRKTt0aGlzW3RoaXMubCsrXT0yNTUmcGUsdGhpc1t0aGlzLmwrK109cGU+Pjh9Zm9yKDt0aGlzLmw8Z2U7KXRoaXNbdGhpcy5sKytdPTA7''@;'; put 'put ''cmV0dXJuIHRoaXN9c3dpdGNoKFMpe2Nhc2UgMTpHPTEsdGhpc1t0aGlzLmxdPTI1NSZSO2JyZWFrO2Nhc2UgMjpHPTIsdGhpc1t0aGlzLmxdPTI1NSZSLHRoaXNbdGhpcy5sKzFdPTI1NSYoUj4+Pj04KTticmVhaztjYXNlIDM6Rz0zLHRoaXNbdGhpcy5sXT0yNTUmUix0aGlzW3RoaXMubCsx''@;'; put 'put ''XT0yNTUmKFI+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1JihSPj4+PTgpO2JyZWFrO2Nhc2UgNDpHPTQsSG8odGhpcyxSLHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKEc9OCwiZiI9PT1rKXshZnVuY3Rpb24gbjUoUyxSLGspe3ZhciBHPShSPDB8fDEvUj09LTEvMD8xOjApPDw3LFE9MCxvZT0w''@;'; put 'put ''LGdlPUc/LVI6Ujtpc0Zpbml0ZShnZSk/MD09Z2U/UT1vZT0wOihRPU1hdGguZmxvb3IoTWF0aC5sb2coZ2UpL01hdGguTE4yKSxvZT1nZSpNYXRoLnBvdygyLDUyLVEpLFE8PS0xMDIzJiYoIWlzRmluaXRlKG9lKXx8b2U8TWF0aC5wb3coMiw1MikpP1E9LTEwMjI6KG9lLT1NYXRoLnBvdygy''@;'; put 'put ''LDUyKSxRKz0xMDIzKSk6KFE9MjA0NyxvZT1pc05hTihSKT8yNjk4NTowKTtmb3IodmFyIHBlPTA7cGU8PTU7KytwZSxvZS89MjU2KVNbaytwZV09MjU1Jm9lO1Nbays2XT0oMTUmUSk8PDR8MTUmb2UsU1trKzddPVE+PjR8R30odGhpcyxSLHRoaXMubCk7YnJlYWt9Y2FzZSAxNjpicmVhaztj''@;'; put 'put ''YXNlLTQ6Rz00LGtvKHRoaXMsUix0aGlzLmwpfX1yZXR1cm4gdGhpcy5sKz1HLHRoaXN9ZnVuY3Rpb24gX24oUyxSKXt2YXIgaz1zZCh0aGlzLHRoaXMubCxTLmxlbmd0aD4+MSk7aWYoayE9PVMpdGhyb3cgbmV3IEVycm9yKFIrIkV4cGVjdGVkICIrUysiIHNhdyAiK2spO3RoaXMubCs9Uy5s''@;'; put 'put ''ZW5ndGg+PjF9ZnVuY3Rpb24gbW4oUyxSKXtTLmw9UixTLnJlYWRfc2hpZnQ9amwsUy5jaGs9X24sUy53cml0ZV9zaGlmdD1CdH1mdW5jdGlvbiBJbihTLFIpe1MubCs9Un1mdW5jdGlvbiBibihTKXt2YXIgUj1WKFMpO3JldHVybiBtbihSLDApLFJ9ZnVuY3Rpb24gdXIoUyxSLGspe2lmKFMp''@;'; put 'put ''e3ZhciBHLFEsb2U7bW4oUyxTLmx8fDApO2Zvcih2YXIgZ2U9Uy5sZW5ndGgscGU9MCx5ZT0wO1MubDxnZTspezEyOCYocGU9Uy5yZWFkX3NoaWZ0KDEpKSYmKHBlPSgxMjcmcGUpKygoMTI3JlMucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgUGU9TDhbcGVdfHxMOFs2NTUzNV07Zm9yKG9lPTEy''@;'; put 'put ''NyYoRz1TLnJlYWRfc2hpZnQoMSkpLFE9MTtRPDQmJjEyOCZHOysrUSlvZSs9KDEyNyYoRz1TLnJlYWRfc2hpZnQoMSkpKTw8NypRO3llPVMubCtvZTt2YXIgTmU9KFBlLmZ8fEluKShTLG9lLGspO2lmKFMubD15ZSxSKE5lLFBlLm4scGUpKXJldHVybn19fWZ1bmN0aW9uIGJpKCl7dmFyIFM9''@;'; put 'put ''W10sUj1UZT8yNTY6MjA0OCxrPWZ1bmN0aW9uKFBlKXt2YXIgTmU9Ym4oUGUpO3JldHVybiBtbihOZSwwKSxOZX0sRz1rKFIpLFE9ZnVuY3Rpb24oKXtHJiYoRy5sZW5ndGg+Ry5sJiYoKEc9Ry5zbGljZSgwLEcubCkpLmw9Ry5sZW5ndGgpLEcubGVuZ3RoPjAmJlMucHVzaChHKSxHPW51bGwp''@;'; put 'put ''fSxvZT1mdW5jdGlvbihQZSl7cmV0dXJuIEcmJlBlPEcubGVuZ3RoLUcubD9HOihRKCksRz1rKE1hdGgubWF4KFBlKzEsUikpKX07cmV0dXJue25leHQ6b2UscHVzaDpmdW5jdGlvbihQZSl7USgpLG51bGw9PShHPVBlKS5sJiYoRy5sPUcubGVuZ3RoKSxvZShSKX0sZW5kOmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIFEoKSx5MChbU10pfSxfYnVmczpTfX1mdW5jdGlvbiBGcihTLFIsayxHKXt2YXIgb2UsUT0rSHpbUl07aWYoIWlzTmFOKFEpKXtHfHwoRz1MOFtRXS5wfHwoa3x8W10pLmxlbmd0aHx8MCksb2U9MSsoUT49MTI4PzE6MCkrMSxHPj0xMjgmJisrb2UsRz49MTYzODQmJisrb2UsRz49''@;'; put 'put ''MjA5NzE1MiYmKytvZTt2YXIgZ2U9Uy5uZXh0KG9lKTtRPD0xMjc/Z2Uud3JpdGVfc2hpZnQoMSxRKTooZ2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSksZ2Uud3JpdGVfc2hpZnQoMSxRPj43KSk7Zm9yKHZhciBwZT0wOzQhPXBlOysrcGUpe2lmKCEoRz49MTI4KSl7Z2Uud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSxHKTticmVha31nZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JkcpKSxHPj49N31HPjAmJkFyKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIHRhKFMsUixrKXt2YXIgRz1xdChTKTtpZihSLnM/KEcuY1JlbCYmKEcuYys9Ui5zLmMpLEcuclJlbCYmKEcucis9Ui5zLnIpKTooRy5jUmVsJiYo''@;'; put 'put ''Ry5jKz1SLmMpLEcuclJlbCYmKEcucis9Ui5yKSksIWt8fGsuYmlmZjwxMil7Zm9yKDtHLmM+PTI1NjspRy5jLT0yNTY7Zm9yKDtHLnI+PTY1NTM2OylHLnItPTY1NTM2fXJldHVybiBHfWZ1bmN0aW9uIG9hKFMsUixrKXt2YXIgRz1xdChTKTtyZXR1cm4gRy5zPXRhKEcucyxSLnMsayksRy5l''@;'; put 'put ''PXRhKEcuZSxSLnMsayksR31mdW5jdGlvbiBWYShTLFIpe2lmKFMuY1JlbCYmUy5jPDApZm9yKFM9cXQoUyk7Uy5jPDA7KVMuYys9Uj44PzE2Mzg0OjI1NjtpZihTLnJSZWwmJlMucjwwKWZvcihTPXF0KFMpO1MucjwwOylTLnIrPVI+OD8xMDQ4NTc2OlI+NT82NTUzNjoxNjM4NDtpZihTLmNS''@;'; put 'put ''ZWwmJlMuYz49KFI+OD8xNjM4NDoyNTYpKWZvcihTPXF0KFMpO1MuYz49KFI+OD8xNjM4NDoyNTYpOylTLmMtPVI+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI+PTEwNDg1NzYpZm9yKFM9cXQoUyk7Uy5yPj0xMDQ4NTc2OylTLnItPTEwNDg1NzY7dmFyIGs9cWkoUyk7cmV0dXJuIVMuY1Jl''@;'; put 'put ''bCYmbnVsbCE9Uy5jUmVsJiYoaz1mdW5jdGlvbiBYaChTKXtyZXR1cm4gUy5yZXBsYWNlKC9eKFtBLVpdKS8sIiQkJDEiKX0oaykpLCFTLnJSZWwmJm51bGwhPVMuclJlbCYmKGs9ZnVuY3Rpb24gUGMoUyl7cmV0dXJuIFMucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KGsp''@;'; put 'put ''KSxrfWZ1bmN0aW9uICRvKFMsUil7cmV0dXJuIDAhPVMucy5yfHxTLnMuclJlbHx8Uy5lLnIhPShSLmJpZmY+PTEyPzEwNDg1NzU6Ui5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8Uy5lLnJSZWw/MCE9Uy5zLmN8fFMucy5jUmVsfHxTLmUuYyE9KFIuYmlmZj49MTI/MTYzODM6MjU1KXx8Uy5lLmNS''@;'; put 'put ''ZWw/VmEoUy5zLFIuYmlmZikrIjoiK1ZhKFMuZSxSLmJpZmYpOihTLnMuclJlbD8iIjoiJCIpK2ppKFMucy5yKSsiOiIrKFMuZS5yUmVsPyIiOiIkIikramkoUy5lLnIpOihTLnMuY1JlbD8iIjoiJCIpK1RhKFMucy5jKSsiOiIrKFMuZS5jUmVsPyIiOiIkIikrVGEoUy5lLmMpfXZhciBYbD17''@;'; put 'put ''fTtmdW5jdGlvbiBfbyhTKXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24gemwoUyl7cmV0dXJuIFMucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShTKSwxMCktMX1mdW5jdGlvbiBqaShTKXtyZXR1cm4iIisoUysxKX1mdW5jdGlvbiBDYShTKXtmb3IodmFyIFI9ZnVuY3Rpb24gRzAoUyl7cmV0''@;'; put 'put ''dXJuIFMucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KFMpLGs9MCxHPTA7RyE9PVIubGVuZ3RoOysrRylrPTI2KmsrUi5jaGFyQ29kZUF0KEcpLTY0O3JldHVybiBrLTF9ZnVuY3Rpb24gVGEoUyl7aWYoUzwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitTKTt2YXIgUj0i''@;'; put 'put ''Ijtmb3IoKytTO1M7Uz1NYXRoLmZsb29yKChTLTEpLzI2KSlSPVN0cmluZy5mcm9tQ2hhckNvZGUoKFMtMSklMjYrNjUpK1I7cmV0dXJuIFJ9ZnVuY3Rpb24gTm8oUyl7Zm9yKHZhciBSPTAsaz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9Uy5jaGFyQ29kZUF0KEcpO1E+PTQ4JiZRPD01''@;'; put 'put ''Nz9SPTEwKlIrKFEtNDgpOlE+PTY1JiZRPD05MCYmKGs9MjYqaysoUS02NCkpfXJldHVybntjOmstMSxyOlItMX19ZnVuY3Rpb24gcWkoUyl7Zm9yKHZhciBSPVMuYysxLGs9IiI7UjtSPShSLTEpLzI2fDApaz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSLTEpJTI2KzY1KStrO3JldHVybiBrKyhT''@;'; put 'put ''LnIrMSl9ZnVuY3Rpb24gTXMoUyl7dmFyIFI9Uy5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PVI/e3M6Tm8oUyksZTpObyhTKX06e3M6Tm8oUy5zbGljZSgwLFIpKSxlOk5vKFMuc2xpY2UoUisxKSl9fWZ1bmN0aW9uIHJhKFMsUil7cmV0dXJuIHR5cGVvZiBSPiJ1Inx8Im51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBSP3JhKFMucyxTLmUpOigic3RyaW5nIiE9dHlwZW9mIFMmJihTPXFpKFMpKSwic3RyaW5nIiE9dHlwZW9mIFImJihSPXFpKFIpKSxTPT1SP1M6UysiOiIrUil9ZnVuY3Rpb24gb28oUyl7dmFyIFI9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScp''@;'; put 'put ''LGs9MCxHPTAsUT0wLG9lPVMubGVuZ3RoO2ZvcihrPTA7RzxvZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNjQpPDF8fFE+MjYpOysrRylrPTI2KmsrUTtmb3IoUi5zLmM9LS1rLGs9MDtHPG9lJiYhKChRPVMuY2hhckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7aWYoUi5zLnI9''@;'; put 'put ''LS1rLEc9PT1vZXx8NTg9PT1TLmNoYXJDb2RlQXQoKytHKSlyZXR1cm4gUi5lLmM9Ui5zLmMsUi5lLnI9Ui5zLnIsUjtmb3Ioaz0wO0chPW9lJiYhKChRPVMuY2hhckNvZGVBdChHKS02NCk8MXx8UT4yNik7KytHKWs9MjYqaytRO2ZvcihSLmUuYz0tLWssaz0wO0chPW9lJiYhKChRPVMuY2hh''@;'; put 'put ''ckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7cmV0dXJuIFIuZS5yPS0tayxSfWZ1bmN0aW9uIGE1KFMsUil7dmFyIGs9ImQiPT1TLnQmJlIgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPVMueil0cnl7cmV0dXJuIFMudz1BLmZvcm1hdChTLnosaz9RZShSKTpSKX1jYXRjaHt9''@;'; put 'put ''dHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoKFMuWEZ8fHt9KS5udW1GbXRJZHx8KGs/MTQ6MCksaz9RZShSKTpSKX1jYXRjaHtyZXR1cm4iIitSfX1mdW5jdGlvbiBfbChTLFIsayl7cmV0dXJuIG51bGw9PVN8fG51bGw9PVMudHx8InoiPT1TLnQ/IiI6dm9pZCAwIT09Uy53P1MudzooImQiPT1T''@;'; put 'put ''LnQmJiFTLnomJmsmJmsuZGF0ZU5GJiYoUy56PWsuZGF0ZU5GKSwiZSI9PVMudD9NY1tTLnZdfHxTLnY6YTUoUyxudWxsPT1SP1MudjpSKSl9ZnVuY3Rpb24gdGgoUyxSKXt2YXIgaz1SJiZSLnNoZWV0P1Iuc2hlZXQ6IlNoZWV0MSIsRz17fTtyZXR1cm4gR1trXT1TLHtTaGVldE5hbWVzOltr''@;'; put 'put ''XSxTaGVldHM6R319ZnVuY3Rpb24gZjQoUyxSLGspe3ZhciBHPWt8fHt9LFE9Uz9BcnJheS5pc0FycmF5KFMpOkcuZGVuc2U7bnVsbCE9bGUmJm51bGw9PVEmJihRPWxlKTt2YXIgb2U9U3x8KFE/W106e30pLGdlPTAscGU9MDtpZihvZSYmbnVsbCE9Ry5vcmlnaW4pe2lmKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgRy5vcmlnaW4pZ2U9Ry5vcmlnaW47ZWxzZXt2YXIgeWU9InN0cmluZyI9PXR5cGVvZiBHLm9yaWdpbj9ObyhHLm9yaWdpbik6Ry5vcmlnaW47Z2U9eWUucixwZT15ZS5jfW9lWyIhcmVmIl18fChvZVsiIXJlZiJdPSJBMTpBMSIpfXZhciBQZT17czp7YzoxZTcscjoxZTd9LGU6e2M6''@;'; put 'put ''MCxyOjB9fTtpZihvZVsiIXJlZiJdKXt2YXIgTmU9b28ob2VbIiFyZWYiXSk7UGUucy5jPU5lLnMuYyxQZS5zLnI9TmUucy5yLFBlLmUuYz1NYXRoLm1heChQZS5lLmMsTmUuZS5jKSxQZS5lLnI9TWF0aC5tYXgoUGUuZS5yLE5lLmUuciksLTE9PWdlJiYoUGUuZS5yPWdlPU5lLmUucisxKX1m''@;'; put 'put ''b3IodmFyIFllPTA7WWUhPVIubGVuZ3RoOysrWWUpaWYoUltZZV0pe2lmKCFBcnJheS5pc0FycmF5KFJbWWVdKSl0aHJvdyBuZXcgRXJyb3IoImFvYV90b19zaGVldCBleHBlY3RzIGFuIGFycmF5IG9mIGFycmF5cyIpO2Zvcih2YXIgZXQ9MDtldCE9UltZZV0ubGVuZ3RoOysrZXQpaWYoISh0''@;'; put 'put ''eXBlb2YgUltZZV1bZXRdPiJ1Iikpe3ZhciBjdD17djpSW1llXVtldF19LEV0PWdlK1llLGF0PXBlK2V0O2lmKFBlLnMucj5FdCYmKFBlLnMucj1FdCksUGUucy5jPmF0JiYoUGUucy5jPWF0KSxQZS5lLnI8RXQmJihQZS5lLnI9RXQpLFBlLmUuYzxhdCYmKFBlLmUuYz1hdCksIVJbWWVdW2V0''@;'; put 'put ''XXx8Im9iamVjdCIhPXR5cGVvZiBSW1llXVtldF18fEFycmF5LmlzQXJyYXkoUltZZV1bZXRdKXx8UltZZV1bZXRdaW5zdGFuY2VvZiBEYXRlKWlmKEFycmF5LmlzQXJyYXkoY3QudikmJihjdC5mPVJbWWVdW2V0XVsxXSxjdC52PWN0LnZbMF0pLG51bGw9PT1jdC52KWlmKGN0LmYpY3QudD0i''@;'; put 'put ''biI7ZWxzZSBpZihHLm51bGxFcnJvciljdC50PSJlIixjdC52PTA7ZWxzZXtpZighRy5zaGVldFN0dWJzKWNvbnRpbnVlO2N0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGN0LnY/Y3QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgY3Qudj9jdC50PSJiIjpjdC52IGluc3RhbmNlb2YgRGF0''@;'; put 'put ''ZT8oY3Quej1HLmRhdGVORnx8QS5fdGFibGVbMTRdLEcuY2VsbERhdGVzPyhjdC50PSJkIixjdC53PUEuZm9ybWF0KGN0LnosUWUoY3QudikpKTooY3QudD0ibiIsY3Qudj1RZShjdC52KSxjdC53PUEuZm9ybWF0KGN0LnosY3QudikpKTpjdC50PSJzIjtlbHNlIGN0PVJbWWVdW2V0XTtpZihj''@;'; put 'put ''dCYmY3QuaCl0cnl7Y3QuUj1tZC5odG1sX3RvX3JzKGN0LmgpLGN0LnY9IiI7Zm9yKHZhciBidD0wO2J0PGN0LlIubGVuZ3RoOysrYnQpY3Qudis9Y3QuUltidF0udnx8IiJ9Y2F0Y2h7fWlmKFEpb2VbRXRdfHwob2VbRXRdPVtdKSxvZVtFdF1bYXRdJiZvZVtFdF1bYXRdLnMmJihjdC5zPW9l''@;'; put 'put ''W0V0XVthdF0ucyksb2VbRXRdW2F0XSYmb2VbRXRdW2F0XS56JiYoY3Quej1vZVtFdF1bYXRdLnopLG9lW0V0XVthdF09Y3Q7ZWxzZXt2YXIganQ9cWkoe2M6YXQscjpFdH0pO29lW2p0XSYmb2VbanRdLnMmJihjdC5zPW9lW2p0XS5zKSxvZVtqdF0mJm9lW2p0XS56JiYoY3Quej1vZVtqdF0u''@;'; put 'put ''eiksb2VbanRdPWN0fX19cmV0dXJuIFBlLnMuYzwxZTcmJihvZVsiIXJlZiJdPXJhKFBlKSksb2V9ZnVuY3Rpb24gcDQoUyxSKXtyZXR1cm4gZjQobnVsbCxTLFIpfWZ1bmN0aW9uIEswKFMsUil7cmV0dXJuIFJ8fChSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDQsUyksUn1mdW5jdGlvbiBndShT''@;'; put 'put ''KXt2YXIgUj1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJkYmNzIil9ZnVuY3Rpb24gRmMoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibig0KzIqUy5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLFMubGVuZ3Ro''@;'; put 'put ''PjAmJlIud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9SLnNsaWNlKDAsUi5sKTpSfWZ1bmN0aW9uIFJ3KFMpe3JldHVybntpY2g6Uy5yZWFkX3NoaWZ0KDIpLGlmbnQ6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBzbChTLFIpe3ZhciBrPVMubCxHPVMucmVhZF9zaGlmdCgxKSxRPWd1KFMp''@;'; put 'put ''LG9lPVtdLGdlPXt0OlEsaDpRfTtpZigxJkcpe2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0KDQpLHllPTA7eWUhPXBlOysreWUpb2UucHVzaChSdyhTKSk7Z2Uucj1vZX1lbHNlIGdlLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gUy5sPWsrUixnZX0hZnVuY3Rpb24oUyxSKXt2YXIgaztpZih0''@;'; put 'put ''eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpaz1jcnlwdG9Ccm93c2VyaWZ5O2Vsc2UgaWYodHlwZW9mIFI8InUiKWs9UjtlbHNlIHRyeXtrPXkoOTE0MjYpfWNhdGNoe2s9bnVsbH1TLnJjND1mdW5jdGlvbihHLFEpe3ZhciBvZT1uZXcgQXJyYXkoMjU2KSxnZT0wLHBlPTAseWU9MCxQZT0w''@;'; put 'put ''O2ZvcihwZT0wOzI1NiE9cGU7KytwZSlvZVtwZV09cGU7Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKXllPXllK29lW3BlXStHW3BlJUcubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxQZT1vZVtwZV0sb2VbcGVdPW9lW3llXSxvZVt5ZV09UGU7cGU9eWU9MDt2YXIgTmU9VihRLmxlbmd0aCk7Zm9y''@;'; put 'put ''KGdlPTA7Z2UhPVEubGVuZ3RoOysrZ2UpUGU9b2VbcGU9cGUrMSYyNTVdLG9lW3BlXT1vZVt5ZT0oeWUrb2VbcGVdKSUyNTZdLG9lW3llXT1QZSxOZVtnZV09UVtnZV1eb2Vbb2VbcGVdK29lW3llXSYyNTVdO3JldHVybiBOZX0sUy5tZDU9ZnVuY3Rpb24oRyl7aWYoIWspdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gay5jcmVhdGVIYXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZyb20oRykpLmRpZ2VzdCgiaGV4Iil9fShYbCx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86dm9pZCAwKTt2YXIgTHc9c2w7ZnVuY3Rpb24gRDEoUyl7dmFyIFI9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOlIsaVN0eWxlUmVmOmt9fWZ1bmN0aW9uIHhyKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KC00LFMuYyksUi53cml0ZV9zaGlmdCgzLFMu''@;'; put 'put ''aVN0eWxlUmVmfHxTLnMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfWZ1bmN0aW9uIEpoKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUis9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzotMSxpU3R5bGVSZWY6Un19ZnVuY3Rpb24gZmkoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9''@;'; put 'put ''Ym4oNCkpLFIud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxSLndyaXRlX3NoaWZ0KDEsMCksUn12YXIgbzU9Z3UsczU9RmM7ZnVuY3Rpb24gdDAoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09Unx8NDI5NDk2NzI5NT09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsImRi''@;'; put 'put ''Y3MiKX1mdW5jdGlvbiBwZihTLFIpe3ZhciBrPSExO3JldHVybiBudWxsPT1SJiYoaz0hMCxSPWJuKDEyNykpLFIud3JpdGVfc2hpZnQoNCxTLmxlbmd0aD4wP1MubGVuZ3RoOjQyOTQ5NjcyOTUpLFMubGVuZ3RoPjAmJlIud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9SLnNsaWNlKDAsUi5s''@;'; put 'put ''KTpSfXZhciBsNT1ndSxnND10MCxjNT1wZjtmdW5jdGlvbiBJMShTKXt2YXIgUj1TLnNsaWNlKFMubCxTLmwrNCksaz0xJlJbMF0sRz0yJlJbMF07Uy5sKz00LFJbMF0mPTI1Mjt2YXIgUT0wPT09Rz9hbihbMCwwLDAsMCxSWzBdLFJbMV0sUlsyXSxSWzNdXSwwKTpWcyhSLDApPj4yO3JldHVy''@;'; put 'put ''biBrP1EvMTAwOlF9ZnVuY3Rpb24gdXYoUyxSKXtudWxsPT1SJiYoUj1ibig0KSk7dmFyIGs9MCxHPTAsUT0xMDAqUztpZihTPT0oMHxTKSYmUz49LSgxPDwyOSkmJlM8MTw8Mjk/Rz0xOlE9PSgwfFEpJiZRPj0tKDE8PDI5KSYmUTwxPDwyOSYmKEc9MSxrPTEpLCFHKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIitTKTtSLndyaXRlX3NoaWZ0KC00LCgoaz9ROlMpPDwyKSsoaysyKSl9ZnVuY3Rpb24gbGQoUyl7dmFyIFI9e3M6e30sZTp7fX07cmV0dXJuIFIucy5yPVMucmVhZF9zaGlmdCg0KSxSLmUucj1TLnJlYWRfc2hpZnQoNCksUi5zLmM9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLFIuZS5jPVMucmVhZF9zaGlmdCg0KSxSfXZhciBtdT1sZCxnZj1mdW5jdGlvbiBUNihTLFIpe3JldHVybiBSfHwoUj1ibigxNikpLFIud3JpdGVfc2hpZnQoNCxTLnMuciksUi53cml0ZV9zaGlmdCg0LFMuZS5yKSxSLndyaXRlX3NoaWZ0KDQsUy5zLmMpLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''NCxTLmUuYyksUn07ZnVuY3Rpb24gbjAoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHPFI7KytHKXt2YXIgUT1tdShTKTtrLnB1c2gocmEoUSkpfXJldHVybiBrLmpvaW4oIiwiKX1mdW5jdGlvbiBQbChTKXtpZihTLmxlbmd0aC1TLmw8OCl0aHJvdyJYTFMgWG51bSBC''@;'; put 'put ''dWZmZXIgdW5kZXJmbG93IjtyZXR1cm4gUy5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiBPdShTLFIpe3JldHVybihSfHxibig4KSkud3JpdGVfc2hpZnQoOCxTLCJmIil9ZnVuY3Rpb24gUWgoUyl7dmFyIFI9e30sRz1TLnJlYWRfc2hpZnQoMSk+Pj4xLFE9Uy5yZWFkX3NoaWZ0KDEpLG9l''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyLCJpIiksZ2U9Uy5yZWFkX3NoaWZ0KDEpLHBlPVMucmVhZF9zaGlmdCgxKSx5ZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKFMubCsrLEcpe2Nhc2UgMDpSLmF1dG89MTticmVhaztjYXNlIDE6Ui5pbmRleD1RO3ZhciBQZT1yMFtRXTtQZSYmKFIucmdiPWhkKFBlKSk7''@;'; put 'put ''YnJlYWs7Y2FzZSAyOlIucmdiPWhkKFtnZSxwZSx5ZV0pO2JyZWFrO2Nhc2UgMzpSLnRoZW1lPVF9cmV0dXJuIDAhPW9lJiYoUi50aW50PW9lPjA/b2UvMzI3Njc6b2UvMzI3NjgpLFJ9ZnVuY3Rpb24gbWYoUyxSKXtpZihSfHwoUj1ibig4KSksIVN8fFMuYXV0bylyZXR1cm4gUi53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSO251bGwhPVMuaW5kZXg/KFIud3JpdGVfc2hpZnQoMSwyKSxSLndyaXRlX3NoaWZ0KDEsUy5pbmRleCkpOm51bGwhPVMudGhlbWU/KFIud3JpdGVfc2hpZnQoMSw2KSxSLndyaXRlX3NoaWZ0KDEsUy50aGVtZSkpOihSLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsNSksUi53cml0ZV9zaGlmdCgxLDApKTt2YXIgaz1TLnRpbnR8fDA7aWYoaz4wP2sqPTMyNzY3Oms8MCYmKGsqPTMyNzY4KSxSLndyaXRlX3NoaWZ0KDIsayksUy5yZ2ImJm51bGw9PVMudGhlbWUpe3ZhciBHPVMucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIEcmJihHPSgiMDAw''@;'; put 'put ''MDAwIitHLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSgwLDIpLDE2KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMiw0KSwxNikpLFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDQsNiksMTYpKSxSLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMjU1KX1lbHNlIFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSfWZ1bmN0aW9uIE93KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKysse2ZCb2xkOjEmUixmSXRhbGljOjImUixmVW5k''@;'; put 'put ''ZXJsaW5lOjQmUixmU3RyaWtlb3V0OjgmUixmT3V0bGluZToxNiZSLGZTaGFkb3c6MzImUixmQ29uZGVuc2U6NjQmUixmRXh0ZW5kOjEyOCZSfX1mdW5jdGlvbiBQdyhTLFIpe3ZhciBHPVMucmVhZF9zaGlmdCg0KTtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpj''@;'; put 'put ''YXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W1MucmVhZF9zaGlmdCg0KV18fCIifWlmKEc+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK0cudG9TdHJpbmcoMTYpKTty''@;'; put 'put ''ZXR1cm4gUy5sLT00LFMucmVhZF9zaGlmdCgwLDE9PVI/Imxwc3RyIjoibHB3c3RyIil9dmFyIGUyPTIsSmw9MyxJMD0xMixObj04MSxGdz1bODAsTm5dLG00PXsxOntuOiJDb2RlUGFnZSIsdDplMn0sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4''@;'; put 'put ''MH0sNDp7bjoiQnl0ZUNvdW50Iix0OkpsfSw1OntuOiJMaW5lQ291bnQiLHQ6Smx9LDY6e246IlBhcmFncmFwaENvdW50Iix0OkpsfSw3OntuOiJTbGlkZUNvdW50Iix0OkpsfSw4OntuOiJOb3RlQ291bnQiLHQ6Smx9LDk6e246IkhpZGRlbkNvdW50Iix0OkpsfSwxMDp7bjoiTXVsdGltZWRp''@;'; put 'put ''YUNsaXBDb3VudCIsdDpKbH0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MDk2fEkwfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9E''@;'; put 'put ''YXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6Smx9LDE5OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6SmwscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250''@;'; put 'put ''ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0''@;'; put 'put ''Ont9fSxkNT17MTp7bjoiQ29kZVBhZ2UiLHQ6ZTJ9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxh''@;'; put 'put ''c3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpKbH0s''@;'; put 'put ''MTU6e246IldvcmRDb3VudCIsdDpKbH0sMTY6e246IkNoYXJDb3VudCIsdDpKbH0sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6Smx9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0''@;'; put 'put ''ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxoNT1JZShtNCwibiIpLHZmPUllKGQ1LCJuIiksRDY9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQx''@;'; put 'put ''OiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoi''@;'; put 'put ''TUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LGh2PVtu''@;'; put 'put ''dWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0''@;'; put 'put ''RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBJNihTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oUil7cmV0dXJuW1I+PjE2JjI1NSxSPj44JjI1NSwyNTUmUl19KX12YXIgdjQ9STYoWzAsMTY3NzcyMTUsMTY3''@;'; put 'put ''MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQw''@;'; put 'put ''MTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3''@;'; put 'put ''NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAs''@;'; put 'put ''MCwwLDAsMCwwLDAsMCwwLDAsMF0pLHIwPXF0KHY0KSxIdz1JNihbMTI2MzIyNTYsOTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4''@;'; put 'put ''Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQzNTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAs''@;'; put 'put ''NzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLE1jPXswOiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sUDM9a2Uo''@;'; put 'put ''TWMpLGI0PXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhj''@;'; put 'put ''ZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwiOiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwi''@;'; put 'put ''OiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2Zm''@;'; put 'put ''aWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsr''@;'; put 'put ''eG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1s''@;'; put 'put ''LnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9E''@;'; put 'put ''TyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoi''@;'; put 'put ''VE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMi''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVy''@;'; put 'put ''ZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3RybHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwi''@;'; put 'put ''OiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hlZXQ6ImpzIn0sZnY9ZnVuY3Rpb24oKXt2YXIgUz17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWlu''@;'; put 'put ''K3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGlu''@;'; put 'put ''Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l''@;'; put 'put ''bnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVu''@;'; put 'put ''dHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMifSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1l''@;'; put 'put ''eGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFj''@;'; put 'put ''cm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hs''@;'; put 'put ''c3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3Bl''@;'; put 'put ''bnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3By''@;'; put 'put ''ZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNi''@;'; put 'put ''OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiBPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1NbUl1ba118fChTW1JdW2tdPVNbUl0ueGxzeCl9KX0pLE9lKFMpLmZvckVhY2goZnVuY3Rpb24oUil7''@;'; put 'put ''T2UoU1tSXSkuZm9yRWFjaChmdW5jdGlvbihrKXtiNFtTW1JdW2tdXT1SfSl9KSxTfSgpLHB2PWZ1bmN0aW9uIEFlKFMpe2Zvcih2YXIgUj1bXSxrPU9lKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKW51bGw9PVJbU1trW0ddXV0mJihSW1Nba1tHXV1dPVtdKSxSW1Nba1tHXV1dLnB1c2goa1tH''@;'; put 'put ''XSk7cmV0dXJuIFJ9KGI0KTtZaS5DVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgbXY9UHIoIlR5cGVzIixudWxsLHt4bWxuczpZaS5DVCwieG1sbnM6eHNkIjpZaS54c2QsInhtbG5zOnhzaSI6WWkueHNpfSksVnc9''@;'; put 'put ''W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0''@;'; put 'put ''YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYi''@;'; put 'put ''XSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixwdi5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKFMpe3JldHVybiBQcigiRGVm''@;'; put 'put ''YXVsdCIsbnVsbCx7RXh0ZW5zaW9uOlNbMF0sQ29udGVudFR5cGU6U1sxXX0pfSksS2E9e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3Bl''@;'; put 'put ''bnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIs''@;'; put 'put ''WE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9u''@;'; put 'put ''c2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2''@;'; put 'put ''L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBWcihTKXt2YXIgUj1TLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIFMuc2xpY2UoMCxSKzEp''@;'; put 'put ''KyJfcmVscy8iK1Muc2xpY2UoUisxKSsiLnJlbHMifWZ1bmN0aW9uIGJmKFMsUil7dmFyIGs9eyIhaWQiOnt9fTtpZighUylyZXR1cm4gazsiLyIhPT1SLmNoYXJBdCgwKSYmKFI9Ii8iK1IpO3ZhciBHPXt9O3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFy''@;'; put 'put ''IG9lPXZyKFEpO2lmKCI8UmVsYXRpb25zaGlwIj09PW9lWzBdKXt2YXIgZ2U9e307Z2UuVHlwZT1vZS5UeXBlLGdlLlRhcmdldD1vZS5UYXJnZXQsZ2UuSWQ9b2UuSWQsZ2UuVGFyZ2V0TW9kZT1vZS5UYXJnZXRNb2RlO3ZhciBwZT0iRXh0ZXJuYWwiPT09b2UuVGFyZ2V0TW9kZT9vZS5UYXJn''@;'; put 'put ''ZXQ6Zm4ob2UuVGFyZ2V0LFIpO2tbcGVdPWdlLEdbb2UuSWRdPWdlfX0pLGtbIiFpZCJdPUcsa31ZaS5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciBmNT1QcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6''@;'; put 'put ''WWkuUkVMU30pO2Z1bmN0aW9uIGtpKFMpe3ZhciBSPVtJaSxmNV07cmV0dXJuIE9lKFNbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1JbUi5sZW5ndGhdPVByKCJSZWxhdGlvbnNoaXAiLG51bGwsU1siIWlkIl1ba10pfSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L1JlbGF0aW9u''@;'; put 'put ''c2hpcHM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9dmFyIHk0PVtLYS5ITElOSyxLYS5YUEFUSCxLYS5YTUlTU107ZnVuY3Rpb24gRXIoUyxSLGssRyxRLG9lKXtpZihRfHwoUT17fSksU1siIWlkIl18fChTWyIhaWQiXT17fSksUjwwKWZvcihSPTE7U1siIWlk''@;'; put 'put ''Il1bInJJZCIrUl07KytSKTtpZihRLklkPSJySWQiK1IsUS5UeXBlPUcsUS5UYXJnZXQ9ayxvZT9RLlRhcmdldE1vZGU9b2U6eTQuaW5kZXhPZihRLlR5cGUpPi0xJiYoUS5UYXJnZXRNb2RlPSJFeHRlcm5hbCIpLFNbIiFpZCJdW1EuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3Jp''@;'; put 'put ''dGUgcklkICIrUik7cmV0dXJuIFNbIiFpZCJdW1EuSWRdPVEsU1soIi8iK1EuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09USxSfXZhciBsbD0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCI7ZnVuY3Rpb24gZXUoUyxSLGspe3JldHVyblsnICA8cmRm''@;'; put 'put ''OkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxyZGY6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS8nKyhrfHwib2RmIikrIiMiK1IrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpv''@;'; put 'put ''aW4oIiIpfWZ1bmN0aW9uIG4yKFMsUil7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhL3BrZyMiIHJkZjpyZXNvdXJj''@;'; put 'put ''ZT0iJytSKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX12YXIgUjY9ZnVuY3Rpb24oKXt2YXIgUz0nPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiB4bWxu''@;'; put 'put ''czptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvZmZpY2U6dmVyc2lvbj0iMS4yIj48''@;'; put 'put ''b2ZmaWNlOm1ldGE+PG1ldGE6Z2VuZXJhdG9yPlNoZWV0SlMgJyt3LnZlcnNpb24rIjwvbWV0YTpnZW5lcmF0b3I+PC9vZmZpY2U6bWV0YT48L29mZmljZTpkb2N1bWVudC1tZXRhPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN9fSgpLFIwPVtbImNwOmNhdGVnb3J5IiwiQ2F0ZWdvcnki''@;'; put 'put ''XSxbImNwOmNvbnRlbnRTdGF0dXMiLCJDb250ZW50U3RhdHVzIl0sWyJjcDprZXl3b3JkcyIsIktleXdvcmRzIl0sWyJjcDpsYXN0TW9kaWZpZWRCeSIsIkxhc3RBdXRob3IiXSxbImNwOmxhc3RQcmludGVkIiwiTGFzdFByaW50ZWQiXSxbImNwOnJldmlzaW9uIiwiUmV2TnVtYmVyIl0sWyJj''@;'; put 'put ''cDp2ZXJzaW9uIiwiVmVyc2lvbiJdLFsiZGM6Y3JlYXRvciIsIkF1dGhvciJdLFsiZGM6ZGVzY3JpcHRpb24iLCJDb21tZW50cyJdLFsiZGM6aWRlbnRpZmllciIsIklkZW50aWZpZXIiXSxbImRjOmxhbmd1YWdlIiwiTGFuZ3VhZ2UiXSxbImRjOnN1YmplY3QiLCJTdWJqZWN0Il0sWyJkYzp0''@;'; put 'put ''aXRsZSIsIlRpdGxlIl0sWyJkY3Rlcm1zOmNyZWF0ZWQiLCJDcmVhdGVkRGF0ZSIsImRhdGUiXSxbImRjdGVybXM6bW9kaWZpZWQiLCJNb2RpZmllZERhdGUiLCJkYXRlIl1dO1lpLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0''@;'; put 'put ''YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixLYS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIjt2YXIgcDU9ZnVuY3Rpb24oKXtmb3IodmFyIFM9bmV3IEFycmF5KFIw''@;'; put 'put ''Lmxlbmd0aCksUj0wO1I8UjAubGVuZ3RoOysrUil7dmFyIGs9UjBbUl0sRz0iKD86IitrWzBdLnNsaWNlKDAsa1swXS5pbmRleE9mKCI6IikpKyI6KSIra1swXS5zbGljZShrWzBdLmluZGV4T2YoIjoiKSsxKTtTW1JdPW5ldyBSZWdFeHAoIjwiK0crIltePl0qPihbXFxzXFxTXSo/KTwvIitH''@;'; put 'put ''KyI+Iil9cmV0dXJuIFN9KCk7ZnVuY3Rpb24gdnYoUyl7dmFyIFI9e307Uz1nbyhTKTtmb3IodmFyIGs9MDtrPFIwLmxlbmd0aDsrK2spe3ZhciBHPVIwW2tdLFE9Uy5tYXRjaChwNVtrXSk7bnVsbCE9USYmUS5sZW5ndGg+MCYmKFJbR1sxXV09UXIoUVsxXSkpLCJkYXRlIj09PUdbMl0mJlJb''@;'; put 'put ''R1sxXV0mJihSW0dbMV1dPUhlKFJbR1sxXV0pKX1yZXR1cm4gUn12YXIganc9UHIoImNwOmNvcmVQcm9wZXJ0aWVzIixudWxsLHsieG1sbnM6Y3AiOllpLkNPUkVfUFJPUFMsInhtbG5zOmRjIjpZaS5kYywieG1sbnM6ZGN0ZXJtcyI6WWkuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOllpLmRj''@;'; put 'put ''bWl0eXBlLCJ4bWxuczp4c2kiOllpLnhzaX0pO2Z1bmN0aW9uIHlmKFMsUixrLEcsUSl7bnVsbCE9UVtTXXx8bnVsbD09Unx8IiI9PT1SfHwoUVtTXT1SLFI9THIoUiksR1tHLmxlbmd0aF09az9QcihTLFIsayk6SGEoUyxSKSl9dmFyIHJoPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRpb24i''@;'; put 'put ''LCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3RyaW5nIl0sWyJDb21wYW55IiwiQ29tcGFueSIsInN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIsInN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3NDaGFu''@;'; put 'put ''Z2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWREb2MiLCJTaGFyZWREb2MiLCJib29sIl0sWyJMaW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxbIlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRpbmdQ''@;'; put 'put ''YWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFydHMiLCJyYXciXV07ZnVuY3Rpb24gXzQoUyxSLGssRyl7dmFyIFE9W107aWYoInN0cmluZyI9PXR5cGVvZiBTKVE9SnIoUyxHKTtlbHNlIGZvcih2YXIgb2U9MDtvZTxTLmxlbmd0aDsrK29lKVE9US5jb25jYXQoU1tv''@;'; put 'put ''ZV0ubWFwKGZ1bmN0aW9uKE5lKXtyZXR1cm57djpOZX19KSk7dmFyIGdlPSJzdHJpbmciPT10eXBlb2YgUj9KcihSLEcpLm1hcChmdW5jdGlvbihOZSl7cmV0dXJuIE5lLnZ9KTpSLHBlPTAseWU9MDtpZihnZS5sZW5ndGg+MClmb3IodmFyIFBlPTA7UGUhPT1RLmxlbmd0aDtQZSs9Mil7c3dp''@;'; put 'put ''dGNoKHllPStRW1BlKzFdLnYsUVtQZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0''@;'; put 'put ''NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3''@;'; put 'put ''YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpj''@;'; put 'put ''YXNlIldlcmtibGFkZW4iOmsuV29ya3NoZWV0cz15ZSxrLlNoZWV0TmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5h''@;'; put 'put ''bm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6ay5OYW1lZFJhbmdlcz15ZSxrLkRlZmluZWROYW1lcz1nZS5zbGljZShwZSxwZSt5ZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjprLkNoYXJ0c2hlZXRzPXllLGsuQ2hhcnROYW1lcz1nZS5zbGlj''@;'; put 'put ''ZShwZSxwZSt5ZSl9cGUrPXllfX1ZaS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLEthLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURv''@;'; put 'put ''Y3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgTDY9UHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOllpLkVYVF9QUk9QUywieG1sbnM6dnQiOllpLnZ0fSk7WWkuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLEthLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBPNj0vPFtePl0rPltePF0qL2csX3Y9''@;'; put 'put ''UHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOllpLkNVU1RfUFJPUFMsInhtbG5zOnZ0IjpZaS52dH0pO3ZhciBQNj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RB''@;'; put 'put ''dXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJN''@;'; put 'put ''YW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxGNj1WZShQNik7ZnVuY3Rpb24gRjMoUyxSLGspe1NbUj1GNltSXXx8Ul09''@;'; put 'put ''a31mdW5jdGlvbiBIMyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooay8xZTcqTWF0aC5wb3coMiwzMikrUi8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gY2Qo''@;'; put 'put ''UyxSLGspe3ZhciBHPVMubCxRPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpO2lmKGspZm9yKDtTLmwtRyYzOykrK1MubDtyZXR1cm4gUX1mdW5jdGlvbiBnNShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBrJiYoUy5sKz00LShHLmxlbmd0aCsxJjMpJjMp''@;'; put 'put ''LEd9ZnVuY3Rpb24gd3YoUyxSLGspe3JldHVybiAzMT09PVI/ZzUoUyk6Y2QoUywwLGspfWZ1bmN0aW9uIE42KFMsUixrKXtyZXR1cm4gd3YoUyxSLCExPT09az8wOjQpfWZ1bmN0aW9uIFN2KFMpe3ZhciBSPVMubCxrPXdmKFMsTm4pO3JldHVybiAwPT1TW1MubF0mJjA9PVNbUy5sKzFdJiZT''@;'; put 'put ''LmwtUiYyJiYoUy5sKz0yKSxbayx3ZihTLEpsKV19ZnVuY3Rpb24gbTUoUyxSKXtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpLEc9e30sUT0wO1EhPWs7KytRKXt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDQpLGdlPVMucmVhZF9zaGlmdCg0KTtHW29lXT1TLnJlYWRfc2hpZnQoZ2UsMTIwMD09PVI/''@;'; put 'put ''InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZShFLCIiKS5yZXBsYWNlKG0sIiEiKSwxMjAwPT09UiYmZ2UlMiYmKFMubCs9Mil9cmV0dXJuIDMmUy5sJiYoUy5sPVMubD4+Mzw8MiksR31mdW5jdGlvbiBxMChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLnNsaWNlKFMubCxTLmwrUik7cmV0''@;'; put 'put ''dXJuIFMubCs9UiwoMyZSKT4wJiYoUy5sKz00LSgzJlIpJjMpLGt9ZnVuY3Rpb24gd2YoUyxSLGspe3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLG9lPWt8fHt9O2lmKFMubCs9MixSIT09STAmJkchPT1SJiYtMT09PUZ3LmluZGV4T2YoUikmJig0MTI2IT0oNjU1MzQmUil8fDQxMjYhPSg2NTUz''@;'; put 'put ''NCZHKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrUisiIHNhdyAiK0cpO3N3aXRjaChSPT09STA/RzpSKXtjYXNlIDI6cmV0dXJuIFE9Uy5yZWFkX3NoaWZ0KDIsImkiKSxvZS5yYXd8fChTLmwrPTIpLFE7Y2FzZSAzOnJldHVybiBTLnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2Ug''@;'; put 'put ''MTE6cmV0dXJuIDAhPT1TLnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIGNkKFMsMCw0KS5yZXBsYWNlKEUsIiIpO2Nhc2UgMzE6cmV0dXJuIGc1KFMpO2Nhc2UgNjQ6cmV0dXJuIEgzKFMpO2Nhc2UgNjU6cmV0dXJuIHEwKFMpO2Nh''@;'; put 'put ''c2UgNzE6cmV0dXJuIGZ1bmN0aW9uIE12KFMpe3ZhciBSPXt9O3JldHVybiBSLlNpemU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9Ui5TaXplKzMtKFIuU2l6ZS0xKSU0LFJ9KFMpO2Nhc2UgODA6cmV0dXJuIE42KFMsRywhb2UucmF3KS5yZXBsYWNlKEUsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIEN2KFMsUil7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIHd2KFMsUiwwKX0oUyxHKS5yZXBsYWNlKEUsIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gWXcoUyl7Zm9yKHZhciBSPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxrPVtdLEc9MDtHPFIvMjsrK0cpay5wdXNoKFN2KFMpKTtyZXR1cm4ga30oUyk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09Rz9mdW5jdGlvbiBOMyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0chPVI7KytHKXt2YXIgUT1TLmw7a1tH''@;'; put 'put ''XT1TLnJlYWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZShFLCIiKSxTLmwtUSYyJiYoUy5sKz0yKX1yZXR1cm4ga30oUyk6ZnVuY3Rpb24gV3coUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1SOysrRylrW0ddPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpLnJl''@;'; put 'put ''cGxhY2UoRSwiIik7cmV0dXJuIGt9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitSKyIgIitHKX19ZnVuY3Rpb24gQ2YoUyxSKXt2YXIgaz1ibig0KSxHPWJuKDQpO3N3aXRjaChrLndyaXRlX3NoaWZ0KDQsODA9PVM/''@;'; put 'put ''MzE6UyksUyl7Y2FzZSAzOkcud3JpdGVfc2hpZnQoLTQsUik7YnJlYWs7Y2FzZSA1OihHPWJuKDgpKS53cml0ZV9zaGlmdCg4LFIsImYiKTticmVhaztjYXNlIDExOkcud3JpdGVfc2hpZnQoNCxSPzE6MCk7YnJlYWs7Y2FzZSA2NDpHPWZ1bmN0aW9uIGhjKFMpe3ZhciBrPSgic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIFM/bmV3IERhdGUoRGF0ZS5wYXJzZShTKSk6UykuZ2V0VGltZSgpLzFlMysxMTY0NDQ3MzYwMCxHPWslTWF0aC5wb3coMiwzMiksUT0oay1HKS9NYXRoLnBvdygyLDMyKTtRKj0xZTc7dmFyIG9lPShHKj0xZTcpL01hdGgucG93KDIsMzIpfDA7b2U+MCYmKEclPU1hdGgucG93KDIs''@;'; put 'put ''MzIpLFErPW9lKTt2YXIgZ2U9Ym4oOCk7cmV0dXJuIGdlLndyaXRlX3NoaWZ0KDQsRyksZ2Uud3JpdGVfc2hpZnQoNCxRKSxnZX0oUik7YnJlYWs7Y2FzZSAzMTpjYXNlIDgwOmZvcigoRz1ibig0KzIqKFIubGVuZ3RoKzEpKyhSLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LFIubGVu''@;'; put 'put ''Z3RoKzEpLEcud3JpdGVfc2hpZnQoMCxSLCJkYmNzIik7Ry5sIT1HLmxlbmd0aDspRy53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitTKyIgIitSKX1yZXR1cm4gaihbayxHXSl9ZnVu''@;'; put 'put ''Y3Rpb24gaWgoUyxSKXt2YXIgaz1TLmwsRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksb2U9W10sZ2U9MCxwZT0wLHllPS0xLFBlPXt9O2ZvcihnZT0wO2dlIT1ROysrZ2Upe3ZhciBOZT1TLnJlYWRfc2hpZnQoNCksWWU9Uy5yZWFkX3NoaWZ0KDQpO29lW2dlXT1bTmUsWWUr''@;'; put 'put ''a119b2Uuc29ydChmdW5jdGlvbihrdCxPdCl7cmV0dXJuIGt0WzFdLU90WzFdfSk7dmFyIGV0PXt9O2ZvcihnZT0wO2dlIT1ROysrZ2Upe2lmKFMubCE9PW9lW2dlXVsxXSl7dmFyIGN0PSEwO2lmKGdlPjAmJlIpc3dpdGNoKFJbb2VbZ2UtMV1bMF1dLnQpe2Nhc2UgMjpTLmwrMj09PW9lW2dl''@;'; put 'put ''XVsxXSYmKFMubCs9MixjdD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6Uy5sPD1vZVtnZV1bMV0mJihTLmw9b2VbZ2VdWzFdLGN0PSExKX1pZigoIVJ8fDA9PWdlKSYmUy5sPD1vZVtnZV1bMV0mJihjdD0hMSxTLmw9b2VbZ2VdWzFdKSxjdCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJy''@;'; put 'put ''b3I6IEV4cGVjdGVkIGFkZHJlc3MgIitvZVtnZV1bMV0rIiBhdCAiK1MubCsiIDoiK2dlKX1pZihSKXt2YXIgRXQ9UltvZVtnZV1bMF1dO2lmKGV0W0V0Lm5dPXdmKFMsRXQudCx7cmF3OiEwfSksInZlcnNpb24iPT09RXQucCYmKGV0W0V0Lm5dPVN0cmluZyhldFtFdC5uXT4+MTYpKyIuIiso''@;'; put 'put ''IjAwMDAiK1N0cmluZyg2NTUzNSZldFtFdC5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09RXQubilzd2l0Y2goZXRbRXQubl0pe2Nhc2UgMDpldFtFdC5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2Fz''@;'; put 'put ''ZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6VShwZT1ldFtFdC5uXT4+PjAmNjU1MzUpO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2RlUGFnZTogIitldFtFdC5uXSl9fWVsc2UgaWYoMT09PW9lW2dlXVswXSl7aWYocGU9ZXQuQ29kZVBhZ2U9d2YoUyxlMiksVShwZSksLTEhPT15ZSl7dmFyIGF0PVMubDtTLmw9b2VbeWVdWzFdLFBlPW01KFMscGUpLFMu''@;'; put 'put ''bD1hdH19ZWxzZSBpZigwPT09b2VbZ2VdWzBdKXtpZigwPT09cGUpe3llPWdlLFMubD1vZVtnZSsxXVsxXTtjb250aW51ZX1QZT1tNShTLHBlKX1lbHNle3ZhciBqdCxidD1QZVtvZVtnZV1bMF1dO3N3aXRjaChTW1MubF0pe2Nhc2UgNjU6Uy5sKz00LGp0PXEwKFMpO2JyZWFrO2Nhc2UgMzA6''@;'; put 'put ''Y2FzZSAzMTpTLmwrPTQsanQ9TjYoUyxTW1MubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTpTLmwrPTQsanQ9Uy5yZWFkX3NoaWZ0KDQpO2JyZWFrO2Nhc2UgNTpTLmwrPTQsanQ9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOlMubCs9NCxqdD11byhTLDQpO2JyZWFrO2Nhc2UgNjQ6Uy5sKz00LGp0PUhlKEgzKFMpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIrU1tTLmxdKX1ldFtidF09anR9fXJldHVybiBTLmw9aytH''@;'; put 'put ''LGV0fXZhciBWNj1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5LQkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hl''@;'; put 'put ''ZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiBIYyhTKXtzd2l0Y2godHlwZW9mIFMpe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxTKT09Uz8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYoUyBpbnN0YW5jZW9mIERhdGUp''@;'; put 'put ''cmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIEI2KFMsUixrKXt2YXIgRz1ibig4KSxRPVtdLG9lPVtdLGdlPTgscGU9MCx5ZT1ibig4KSxQZT1ibig4KTtpZih5ZS53cml0ZV9zaGlmdCg0LDIpLHllLndyaXRlX3NoaWZ0KDQsMTIwMCksUGUud3JpdGVfc2hpZnQoNCwxKSxvZS5wdXNoKHll''@;'; put 'put ''KSxRLnB1c2goUGUpLGdlKz04K3llLmxlbmd0aCwhUil7KFBlPWJuKDgpKS53cml0ZV9zaGlmdCg0LDApLFEudW5zaGlmdChQZSk7dmFyIE5lPVtibig0KV07Zm9yKE5lWzBdLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLHBlPTA7cGU8Uy5sZW5ndGg7KytwZSl7dmFyIFllPVNbcGVdWzBdO2Zv''@;'; put 'put ''cigoeWU9Ym4oOCsyKihZZS5sZW5ndGgrMSkrKFllLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LHBlKzIpLHllLndyaXRlX3NoaWZ0KDQsWWUubGVuZ3RoKzEpLHllLndyaXRlX3NoaWZ0KDAsWWUsImRiY3MiKTt5ZS5sIT15ZS5sZW5ndGg7KXllLndyaXRlX3NoaWZ0KDEsMCk7TmUu''@;'; put 'put ''cHVzaCh5ZSl9eWU9aihOZSksb2UudW5zaGlmdCh5ZSksZ2UrPTgreWUubGVuZ3RofWZvcihwZT0wO3BlPFMubGVuZ3RoOysrcGUpaWYoKCFSfHxSW1NbcGVdWzBdXSkmJiEoVjYuaW5kZXhPZihTW3BlXVswXSk+LTEpJiZudWxsIT1TW3BlXVsxXSl7dmFyIGV0PVNbcGVdWzFdLGN0PTA7aWYo''@;'; put 'put ''Uil7dmFyIEV0PWtbY3Q9K1JbU1twZV1bMF1dXTtpZigidmVyc2lvbiI9PUV0LnAmJiJzdHJpbmciPT10eXBlb2YgZXQpe3ZhciBhdD1ldC5zcGxpdCgiLiIpO2V0PSgrYXRbMF08PDE2KSsoK2F0WzFdfHwwKX15ZT1DZihFdC50LGV0KX1lbHNle3ZhciBidD1IYyhldCk7LTE9PWJ0JiYoYnQ9''@;'; put 'put ''MzEsZXQ9U3RyaW5nKGV0KSkseWU9Q2YoYnQsZXQpfW9lLnB1c2goeWUpLChQZT1ibig4KSkud3JpdGVfc2hpZnQoNCxSP2N0OjIrcGUpLFEucHVzaChQZSksZ2UrPTgreWUubGVuZ3RofXZhciBqdD04KihvZS5sZW5ndGgrMSk7Zm9yKHBlPTA7cGU8b2UubGVuZ3RoOysrcGUpUVtwZV0ud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCxqdCksanQrPW9lW3BlXS5sZW5ndGg7cmV0dXJuIEcud3JpdGVfc2hpZnQoNCxnZSksRy53cml0ZV9zaGlmdCg0LG9lLmxlbmd0aCksaihbR10uY29uY2F0KFEpLmNvbmNhdChvZSkpfWZ1bmN0aW9uIGo2KFMsUixrKXt2YXIgRz1TLmNvbnRlbnQ7aWYoIUcpcmV0dXJue307''@;'; put 'put ''bW4oRywwKTt2YXIgUSxvZSxnZSxwZSx5ZT0wO0cuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksRy5yZWFkX3NoaWZ0KDIpO3ZhciBQZT1HLnJlYWRfc2hpZnQoNCksTmU9Ry5yZWFkX3NoaWZ0KDE2KTtpZihOZSE9PXZlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJk5lIT09ayl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK05lKTtpZigxIT09KFE9Ry5yZWFkX3NoaWZ0KDQpKSYmMiE9PVEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrUSk7aWYob2U9Ry5yZWFkX3NoaWZ0KDE2KSxwZT1HLnJlYWRfc2hpZnQoNCksMT09PVEm''@;'; put 'put ''JnBlIT09Ry5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK3BlKyIgIT09ICIrRy5sKTsyPT09USYmKGdlPUcucmVhZF9zaGlmdCgxNikseWU9Ry5yZWFkX3NoaWZ0KDQpKTt2YXIgRXQsWWU9aWgoRyxSKSxldD17U3lzdGVtSWRlbnRpZmllcjpQZX07Zm9yKHZhciBjdCBp''@;'; put 'put ''biBZZSlldFtjdF09WWVbY3RdO2lmKGV0LkZNVElEPW9lLDE9PT1RKXJldHVybiBldDtpZih5ZS1HLmw9PTImJihHLmwrPTIpLEcubCE9PXllKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrRy5sKyIgIT09ICIreWUpO3RyeXtFdD1paChHLG51bGwpfWNhdGNoe31mb3Io''@;'; put 'put ''Y3QgaW4gRXQpZXRbY3RdPUV0W2N0XTtyZXR1cm4gZXQuRk1USUQ9W29lLGdlXSxldH1mdW5jdGlvbiB6aShTLFIsayxHLFEsb2Upe3ZhciBnZT1ibihRPzY4OjQ4KSxwZT1bZ2VdO2dlLndyaXRlX3NoaWZ0KDIsNjU1MzQpLGdlLndyaXRlX3NoaWZ0KDIsMCksZ2Uud3JpdGVfc2hpZnQoNCw4''@;'; put 'put ''NDI0MTI1OTkpLGdlLndyaXRlX3NoaWZ0KDE2LHZlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsUT8yOjEpLGdlLndyaXRlX3NoaWZ0KDE2LFIsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsUT82ODo0OCk7dmFyIHllPUI2KFMsayxHKTtpZihwZS5w''@;'; put 'put ''dXNoKHllKSxRKXt2YXIgUGU9QjYoUSxudWxsLG51bGwpO2dlLndyaXRlX3NoaWZ0KDE2LG9lLCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LDY4K3llLmxlbmd0aCkscGUucHVzaChQZSl9cmV0dXJuIGoocGUpfWZ1bmN0aW9uIHIyKFMsUil7cmV0dXJuIFMucmVhZF9zaGlmdChSKSxudWxsfWZ1''@;'; put 'put ''bmN0aW9uIHVvKFMsUil7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoUil9ZnVuY3Rpb24gdHUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMiwrISFTKSxSfWZ1bmN0aW9uIEVjKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIGEwKFMsUil7cmV0''@;'; put 'put ''dXJuIFJ8fChSPWJuKDIpKSxSLndyaXRlX3NoaWZ0KDIsUyksUn1mdW5jdGlvbiB3NChTLFIpe3JldHVybiBmdW5jdGlvbiB4dihTLFIsayl7Zm9yKHZhciBHPVtdLFE9Uy5sK1I7Uy5sPFE7KUcucHVzaChrKFMsUS1TLmwpKTtpZihRIT09Uy5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJy''@;'; put 'put ''b3IiKTtyZXR1cm4gR30oUyxSLEVjKX1mdW5jdGlvbiBLaShTLFIsayl7cmV0dXJuIGt8fChrPWJuKDIpKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1SPytTOishIVMpLGsud3JpdGVfc2hpZnQoMSwiZSI9PVI/MTowKSxrfWZ1bmN0aW9uIFVhKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYm''@;'; put 'put ''ay5iaWZmPj0xMj8yOjEpLFE9InNiY3MtY29udCIsb2U9UDtrJiZrLmJpZmY+PTgmJihQPTEyMDApLGsmJjghPWsuYmlmZj8xMj09ay5iaWZmJiYoUT0id3N0ciIpOlMucmVhZF9zaGlmdCgxKSYmKFE9ImRiY3MtY29udCIpLGsuYmlmZj49MiYmay5iaWZmPD01JiYoUT0iY3BzdHIiKTt2YXIg''@;'; put 'put ''cGU9Rz9TLnJlYWRfc2hpZnQoRyxRKToiIjtyZXR1cm4gUD1vZSxwZX1mdW5jdGlvbiBmYyhTKXt2YXIgUj1QO1A9MTIwMDt2YXIgeWUsaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoMSksUT00Jkcsb2U9OCZHLGdlPTErKDEmRykscGU9MCxQZT17fTtvZSYmKHBlPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKSksUSYmKHllPVMucmVhZF9zaGlmdCg0KSk7dmFyIFllPTA9PT1rPyIiOlMucmVhZF9zaGlmdChrLDI9PWdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihvZSlmb3IoUGUuX1I9W107cGUtLSA+MDspUGUuX1IucHVzaCh7aWR4OlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVh''@;'; put 'put ''ZF9zaGlmdCgyKX0pO3JldHVybiBRJiYoUy5sKz15ZSksUGUudD1ZZSxvZXx8KFBlLnI9Ijx0PiIrUGUudCsiPC90PiIpLFA9UixQZX1mdW5jdGlvbiBOYyhTLFIpe3ZhciBrPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj13NShTLnIpKTt2YXIgRz0iIixRPTA7az9TLlIuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihFdCl7USsrLEcrPUV0LnZ8fCIifSk6KEc9Uy50fHwiIixRPTEpO3ZhciBvZT1ibigzKyhRPjE/MjowKSk7b2Uud3JpdGVfc2hpZnQoMixHLmxlbmd0aCksb2Uud3JpdGVfc2hpZnQoMSwxfChRPjE/ODowKSksUT4xJiZvZS53cml0ZV9zaGlmdCgyLFEpO3ZhciBnZT1ibigy''@;'; put 'put ''KkcubGVuZ3RoKTtnZS53cml0ZV9zaGlmdCgyKkcubGVuZ3RoLEcsInV0ZjE2bGUiKTt2YXIgcGU9W29lLGdlXTtpZihrKXt2YXIgeWU9Ym4oNCpTLlIubGVuZ3RoKSxQZT0wO3BlLnB1c2goeWUpO2Zvcih2YXIgTmU9MDtOZTxTLlIubGVuZ3RoOysrTmUpe3ZhciBZZT1TLlJbTmVdO3llLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsUGUpLFBlKz0oWWUudnx8IiIpLmxlbmd0aDt2YXIgZXQ9WWUucz9sMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlllLnN9LFIpOjAsY3Q9Ui5jZWxsWGZzW2V0XS5mb250SWQ7eWUud3JpdGVfc2hpZnQoMixjdDw0P2N0OmN0KzEpfX1yZXR1cm4g''@;'; put 'put ''aihwZSl9ZnVuY3Rpb24gcmMoUyxSLGspe2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBTLnJlYWRfc2hpZnQoUiwiY3BzdHIiKTtpZihrLmJpZmY+PTEyKXJldHVybiBTLnJlYWRfc2hpZnQoUiwiZGJjcy1jb250Iil9dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBT''@;'; put 'put ''LnJlYWRfc2hpZnQoUiwwPT09UT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gbnUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpyYyhTLEcsayl9ZnVuY3Rpb24gWDAoUyxSLGspe2lmKGsuYmlmZj41''@;'; put 'put ''KXJldHVybiBudShTLDAsayk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Rz8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChHLGsuYmlmZjw9NHx8IVMubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBjbChTLFIsayl7cmV0dXJuIGt8fChrPWJuKDMrMipTLmxlbmd0''@;'; put 'put ''aCkpLGsud3JpdGVfc2hpZnQoMixTLmxlbmd0aCksay53cml0ZV9zaGlmdCgxLDEpLGsud3JpdGVfc2hpZnQoMzEsUywidXRmMTZsZSIpLGt9ZnVuY3Rpb24gQzQoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBSPjA/Uy5yZWFkX3NoaWZ0KFIsInV0ZjE2bGUiKS5yZXBsYWNlKEUs''@;'; put 'put ''IiIpOiIifWZ1bmN0aW9uIG8wKFMsUil7Unx8KFI9Ym4oNisyKlMubGVuZ3RoKSksUi53cml0ZV9zaGlmdCg0LDErUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMixTLmNoYXJDb2RlQXQoaykpO3JldHVybiBSLndyaXRlX3NoaWZ0KDIsMCksUn1m''@;'; put 'put ''dW5jdGlvbiBTNChTKXt2YXIgUj1ibig1MTIpLGs9MCxHPVMuVGFyZ2V0OyJmaWxlOi8vIj09Ry5zbGljZSgwLDcpJiYoRz1HLnNsaWNlKDcpKTt2YXIgUT1HLmluZGV4T2YoIiMiKSxvZT1RPi0xPzMxOjIzO3N3aXRjaChHLmNoYXJBdCgwKSl7Y2FzZSIjIjpvZT0yODticmVhaztjYXNlIi4i''@;'; put 'put ''Om9lJj0tM31SLndyaXRlX3NoaWZ0KDQsMiksUi53cml0ZV9zaGlmdCg0LG9lKTt2YXIgZ2U9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoNCxnZVtrXSk7aWYoMjg9PW9lKW8wKEc9Ry5zbGljZSgxKSxSKTtlbHNl''@;'; put 'put ''IGlmKDImb2Upe2ZvcihnZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoZ2Vba10sMTYpKTt2YXIgcGU9UT4tMT9HLnNsaWNlKDAsUSk6Rztmb3Io''@;'; put 'put ''Ui53cml0ZV9zaGlmdCg0LDIqKHBlLmxlbmd0aCsxKSksaz0wO2s8cGUubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDIscGUuY2hhckNvZGVBdChrKSk7Ui53cml0ZV9zaGlmdCgyLDApLDgmb2UmJm8wKFE+LTE/Ry5zbGljZShRKzEpOiIiLFIpfWVsc2V7Zm9yKGdlPSIwMyAwMyAwMCAwMCAw''@;'; put 'put ''MCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChnZVtrXSwxNikpO2Zvcih2YXIgeWU9MDsiLi4vIj09Ry5zbGljZSgzKnllLDMqeWUrMyl8fCIuLlxcIj09Ry5zbGljZSgzKnll''@;'; put 'put ''LDMqeWUrMyk7KSsreWU7Zm9yKFIud3JpdGVfc2hpZnQoMix5ZSksUi53cml0ZV9zaGlmdCg0LEcubGVuZ3RoLTMqeWUrMSksaz0wO2s8Ry5sZW5ndGgtMyp5ZTsrK2spUi53cml0ZV9zaGlmdCgxLDI1NSZHLmNoYXJDb2RlQXQoayszKnllKSk7Zm9yKFIud3JpdGVfc2hpZnQoMSwwKSxSLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsNjU1MzUpLFIud3JpdGVfc2hpZnQoMiw1NzAwNSksaz0wO2s8NjsrK2spUi53cml0ZV9zaGlmdCg0LDApfXJldHVybiBSLnNsaWNlKDAsUi5sKX1mdW5jdGlvbiBNZihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSks''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiB1ZChTLFIpe3ZhciBrPU1mKFMpO3JldHVybiBrWzNdPTAsa31mdW5jdGlvbiB3MChTKXtyZXR1cm57cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMiksaXhmZTpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIGEyKFMsUixrLEcpe3Jl''@;'; put 'put ''dHVybiBHfHwoRz1ibig2KSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQoMixSKSxHLndyaXRlX3NoaWZ0KDIsa3x8MCksR31mdW5jdGlvbiB4ZihTLFIsayl7dmFyIEc9ay5iaWZmPjg/NDoyO3JldHVybltTLnJlYWRfc2hpZnQoRyksUy5yZWFkX3NoaWZ0KEcsImkiKSxTLnJl''@;'; put 'put ''YWRfc2hpZnQoRywiaSIpXX1mdW5jdGlvbiB3byhTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLEkxKFMpXX1mdW5jdGlvbiBzMihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6Un0sZTp7YzpTLnJlYWRfc2hp''@;'; put 'put ''ZnQoMikscjprfX19ZnVuY3Rpb24gdnUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oOCkpLFIud3JpdGVfc2hpZnQoMixTLnMuciksUi53cml0ZV9zaGlmdCgyLFMuZS5yKSxSLndyaXRlX3NoaWZ0KDIsUy5zLmMpLFIud3JpdGVfc2hpZnQoMixTLmUuYyksUn1mdW5jdGlvbiBNNChTKXt2YXIgUj1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6Un0sZTp7YzpTLnJlYWRfc2hpZnQoMSkscjprfX19dmFyIGdjPU00O2Z1bmN0aW9uIGI1KFMpe1MubCs9NDt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''Rz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW2ssUixHXX1mdW5jdGlvbiBydShTKXtTLmwrPTIsUy5sKz1TLnJlYWRfc2hpZnQoMil9dmFyIEVmPXswOnJ1LDQ6cnUsNTpydSw2OnJ1LDc6ZnVuY3Rpb24gSHUoUyl7cmV0dXJuIFMubCs9NCxTLmNmPVMucmVhZF9zaGlmdCgyKSx7''@;'; put 'put ''fX0sODpydSw5OnJ1LDEwOnJ1LDExOnJ1LDEyOnJ1LDEzOmZ1bmN0aW9uIEZ1KFMpe3ZhciBSPXt9O3JldHVybiBTLmwrPTQsUy5sKz0xNixSLmZTaGFyZWROb3RlPVMucmVhZF9zaGlmdCgyKSxTLmwrPTQsUn0sMTQ6cnUsMTU6cnUsMTY6cnUsMTc6cnUsMTg6cnUsMTk6cnUsMjA6cnUsMjE6''@;'; put 'put ''YjV9O2Z1bmN0aW9uIFZjKFMsUil7dmFyIGs9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2goay5CSUZGVmVyPVMucmVhZF9zaGlmdCgyKSwoUi09Mik+PTImJihrLmR0PVMucmVhZF9zaGlmdCgyKSxTLmwtPTIpLGsuQklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3''@;'; put 'put ''Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKFI+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitrLkJJRkZWZXIpfXJldHVybiBTLnJlYWRfc2hpZnQoUiksa31mdW5jdGlvbiB4NChTLFIsayl7dmFyIEc9MTUzNixRPTE2O3N3aXRjaChr''@;'; put 'put ''LmJvb2tUeXBlKXtjYXNlImJpZmY4IjpjYXNlInhsYSI6YnJlYWs7Y2FzZSJiaWZmNSI6Rz0xMjgwLFE9ODticmVhaztjYXNlImJpZmY0IjpHPTQsUT02O2JyZWFrO2Nhc2UiYmlmZjMiOkc9MyxRPTY7YnJlYWs7Y2FzZSJiaWZmMiI6Rz0yLFE9NDticmVhaztkZWZhdWx0OnRocm93IG5ldyBF''@;'; put 'put ''cnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9dmFyIG9lPWJuKFEpO3JldHVybiBvZS53cml0ZV9zaGlmdCgyLEcpLG9lLndyaXRlX3NoaWZ0KDIsUiksUT40JiZvZS53cml0ZV9zaGlmdCgyLDI5MjgyKSxRPjYmJm9lLndyaXRlX3NoaWZ0KDIsMTk5NyksUT44JiYob2Uud3JpdGVf''@;'; put 'put ''c2hpZnQoMiw0OTE2MSksb2Uud3JpdGVfc2hpZnQoMiwxKSxvZS53cml0ZV9zaGlmdCgyLDE3OTgpLG9lLndyaXRlX3NoaWZ0KDIsMCkpLG9lfWZ1bmN0aW9uIGwyKFMsUil7dmFyIGs9IVJ8fFIuYmlmZj49OD8yOjEsRz1ibig4K2sqUy5uYW1lLmxlbmd0aCk7Ry53cml0ZV9zaGlmdCg0LFMu''@;'; put 'put ''cG9zKSxHLndyaXRlX3NoaWZ0KDEsUy5oc3x8MCksRy53cml0ZV9zaGlmdCgxLFMuZHQpLEcud3JpdGVfc2hpZnQoMSxTLm5hbWUubGVuZ3RoKSxSLmJpZmY+PTgmJkcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KGsqUy5uYW1lLmxlbmd0aCxTLm5hbWUsUi5iaWZmPDg/InNiY3Mi''@;'; put 'put ''OiJ1dGYxNmxlIik7dmFyIFE9Ry5zbGljZSgwLEcubCk7cmV0dXJuIFEubD1HLmwsUX1mdW5jdGlvbiBpaShTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLG11KFMpfWZ1bmN0aW9uIFNvKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCksbjAoUyl9ZnVuY3Rpb24gTnUoUyxSLGspe3JldHVybiBT''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksWEIoUywwLGspfWZ1bmN0aW9uIGMyKFMsUixrKXt2YXIgRz0wO2smJjI9PWsuYmlmZnx8KEc9Uy5yZWFkX3NoaWZ0KDIpKTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjI9PWsuYmlmZiYmKEc9MS0oUT4+MTUpLFEmPTMyNzY3KSxbe1Vuc3luY2VkOjEm''@;'; put 'put ''RyxEeVplcm86KDImRyk+PjEsRXhBc2M6KDQmRyk+PjIsRXhEc2M6KDgmRyk+PjN9LFFdfWZ1bmN0aW9uIGFWKFMsUixrLEcpe3ZhciBRPWsmJjU9PWsuYmlmZjtHfHwoRz1ibihRPzMrUi5sZW5ndGg6NSsyKlIubGVuZ3RoKSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQoUT8x''@;'; put 'put ''OjIsUi5sZW5ndGgpLFF8fEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KChRPzE6MikqUi5sZW5ndGgsUixRPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBvZT1HLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6RztyZXR1cm4gbnVsbD09b2UubCYmKG9lLmw9b2UubGVuZ3RoKSxvZX12''@;'; put 'put ''YXIgdTI9WDA7ZnVuY3Rpb24gWHcoUyxSLGspe3ZhciBHPVMubCtSLFE9OCE9ay5iaWZmJiZrLmJpZmY/Mjo0LG9lPVMucmVhZF9zaGlmdChRKSxnZT1TLnJlYWRfc2hpZnQoUSkscGU9Uy5yZWFkX3NoaWZ0KDIpLHllPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sPUcse3M6e3I6b2UsYzpw''@;'; put 'put ''ZX0sZTp7cjpnZSxjOnllfX19ZnVuY3Rpb24geTUoUyxSLGssRyl7dmFyIG9lPSFrfHwhay5iaWZmfHw4PT1rLmJpZmY7R3x8KEc9Ym4oayYmNT09ay5iaWZmPzE2OjIwKSksRy53cml0ZV9zaGlmdCgyLG9lJiZrLmNlbGxTdHlsZXMmJlMuZm9udElkJiYoUy5mb250SWQ8ND9TLmZvbnRJZDpT''@;'; put 'put ''LmZvbnRJZCsxKXx8MCk7dmFyIGdlPTE7Uy5wcm90ZWN0aW9uJiYoUy5wcm90ZWN0aW9uLmVkaXRhYmxlJiYoZ2UmPS0yKSxTLnByb3RlY3Rpb24uaGlkZGVuJiYoZ2V8PTIpKSxTLnN0eWxlPyhHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLDY1NTI0fGdl''@;'; put 'put ''KSk6KEcud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxHLndyaXRlX3NoaWZ0KDIsUjw8NHxnZSkpO3ZhciBwZT1TLmFsaWdubWVudHx8e307aWYob2Upe3ZhciB5ZT0wLFBlPTA7RDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKT4tMSYmKHllfD1ENS5pbmRleE9mKHBlLmhvcml6b250YWwp''@;'; put 'put ''KSxwZS53cmFwVGV4dCYmKHllfD04KSx0OC5pbmRleE9mKHBlLnZlcnRpY2FsKT4tMT95ZXw9dDguaW5kZXhPZihwZS52ZXJ0aWNhbCk8PDQ6bnVsbD09cGUudmVydGljYWwmJih5ZXw9MzIpLEcud3JpdGVfc2hpZnQoMSx5ZSksRy53cml0ZV9zaGlmdCgxLDApLHBlLnNocmlua1RvRml0JiYo''@;'; put 'put ''UGV8PTE2KSxHLndyaXRlX3NoaWZ0KDIsUGUpO3ZhciBOZT1udWxsO251bGwhPVMuYm9yZGVySWQmJihOZT1rLkJvcmRlcnMmJmsuQm9yZGVyc1tTLmJvcmRlcklkfHwwXXx8e30pO3ZhciBZZT0wLGV0PTAsY3Q9MDtOZSYmKG51bGwhPU5lLmxlZnQmJk5lLmxlZnQuc3R5bGUmJihZZXw9KGN0''@;'; put 'put ''PXBkLmluZGV4T2YoTmUubGVmdC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPU5lLnJpZ2h0JiZOZS5yaWdodC5zdHlsZSYmKFllfD0oKGN0PXBkLmluZGV4T2YoTmUucmlnaHQuc3R5bGUpKT4tMT9jdDowKTw8NCksbnVsbCE9TmUudG9wJiZOZS50b3Auc3R5bGUmJihldHw9KGN0PXBkLmluZGV4''@;'; put 'put ''T2YoTmUudG9wLnN0eWxlKSk+LTE/Y3Q6MCksbnVsbCE9TmUuYm90dG9tJiZOZS5ib3R0b20uc3R5bGUmJihldHw9KChjdD1wZC5pbmRleE9mKE5lLmJvdHRvbS5zdHlsZSkpPi0xP2N0OjApPDw0KSksRy53cml0ZV9zaGlmdCgxLFllKSxHLndyaXRlX3NoaWZ0KDEsZXQpLEcud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwwKSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgxLDApO3ZhciBFdD0wLGF0PWsuRmlsbHMmJmsuRmlsbHNbUy5maWxsSWR8fDBdfHx7fTsoYXQuZmdDb2xvcnx8YXQuYmdDb2xvcikmJihFdHw9NCksRy53cml0ZV9zaGlmdCgxLEV0KTt2YXIgYnQ9MDtidHw9UDQoYXQu''@;'; put 'put ''ZmdDb2xvciw2NSksYnR8PVA0KGF0LmJnQ29sb3IsNjUpPDw3LEcud3JpdGVfc2hpZnQoMixidCl9ZWxzZSBHLndyaXRlX3NoaWZ0KDQsMCksRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gR31mdW5jdGlvbiBFNChTLFIsayl7dmFyIEc9dzAoUyk7KDI9PWsu''@;'; put 'put ''YmlmZnx8OT09UikmJisrUy5sO3ZhciBRPWZ1bmN0aW9uIFVsKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PVMucmVhZF9zaGlmdCgxKT9SOjE9PT1SfShTKTtyZXR1cm4gRy52YWw9USxHLnQ9ITA9PT1RfHwhMT09PVE/ImIiOiJlIixHfXZhciBKQT1mdW5jdGlvbiB2NShT''@;'; put 'put ''LFIsayl7cmV0dXJuIDA9PT1SPyIiOlgwKFMsMCxrKX07ZnVuY3Rpb24gZUMoUyxSLGspe3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLG9lPXtmQnVpbHRJbjoxJkcsZldhbnRBZHZpc2U6Rz4+PjEmMSxmV2FudFBpY3Q6Rz4+PjImMSxmT2xlOkc+Pj4zJjEsZk9sZUxpbms6Rz4+PjQmMSxjZjpH''@;'; put 'put ''Pj4+NSYxMDIzLGZJY29uOkc+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1rLnNiY2NoJiYoUT1mdW5jdGlvbiB6NihTLFIsayl7Uy5sKz00O3ZhciBHPVMubCsoUi09NCksUT1VYShTLDAsayksb2U9Uy5yZWFkX3NoaWZ0KDIpO2lmKG9lIT09KEctPVMubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxm''@;'; put 'put ''b3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK0crIiAhPSAiK29lKTtyZXR1cm4gUy5sKz1vZSxRfShTLFItMixrKSksb2UuYm9keT1RfHxTLnJlYWRfc2hpZnQoUi0yKSwic3RyaW5nIj09dHlwZW9mIFEmJihvZS5OYW1lPVEpLG9lfXZhciBjVj1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEi''@;'; put 'put ''LCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJf''@;'; put 'put ''eGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiB0QyhTLFIsayl7dmFyIEc9Uy5sK1IsUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDEpLGdlPVMucmVh''@;'; put 'put ''ZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MikseWU9MDsoIWt8fGsuYmlmZj49NSkmJig1IT1rLmJpZmYmJihTLmwrPTIpLHllPVMucmVhZF9zaGlmdCgyKSw1PT1rLmJpZmYmJihTLmwrPTIpLFMubCs9NCk7dmFyIFBlPXJjKFMsZ2Usayk7MzImUSYmKFBlPWNW''@;'; put 'put ''W1BlLmNoYXJDb2RlQXQoMCldKTt2YXIgTmU9Ry1TLmw7ayYmMj09ay5iaWZmJiYtLU5lO3ZhciBZZT1HIT1TLmwmJjAhPT1wZSYmTmU+MD9mdW5jdGlvbiBBbmUoUyxSLGssRyl7dmFyIGdlLFE9Uy5sK1Isb2U9bGgoUyxHLGspO3JldHVybiBRIT09Uy5sJiYoZ2U9QjQoUyxRLVMubCxvZSxr''@;'; put 'put ''KSksW29lLGdlXX0oUyxOZSxrLHBlKTpbXTtyZXR1cm57Y2hLZXk6b2UsTmFtZTpQZSxpdGFiOnllLHJnY2U6WWV9fWZ1bmN0aW9uIFR2KFMsUixrKXtpZihrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gbkMoUyxSLGspezM9PVNbUy5sKzFdJiZTW1MubF0rKzt2YXIgRz1VYShTLDAsayk7cmV0''@;'; put 'put ''dXJuIDM9PUcuY2hhckNvZGVBdCgwKT9HLnNsaWNlKDEpOkd9KFMsMCxrKTtmb3IodmFyIEc9W10sUT1TLmwrUixvZT1TLnJlYWRfc2hpZnQoay5iaWZmPjg/NDoyKTswIT1vZS0tOylHLnB1c2goeGYoUywwLGspKTtpZihTLmwhPVEpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6''@;'; put 'put ''ICIrUy5sKyIgIT0gIitRKTtyZXR1cm4gR31mdW5jdGlvbiBrdihTLFIsayl7dmFyIEc9Z2MoUyw2KTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKyssUi09NzticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9MixSLT04O2JyZWFrO2RlZmF1bHQ6Uy5sKz02LFItPTEyfXJldHVybltHLGNEKFMs''@;'; put 'put ''UixrKV19dmFyIGVrPVtdO2Z1bmN0aW9uIGZWKFMpe3ZhciBSPWJuKDI0KSxrPU5vKFNbMF0pO1Iud3JpdGVfc2hpZnQoMixrLnIpLFIud3JpdGVfc2hpZnQoMixrLnIpLFIud3JpdGVfc2hpZnQoMixrLmMpLFIud3JpdGVfc2hpZnQoMixrLmMpO2Zvcih2YXIgRz0iZDAgYzkgZWEgNzkgZjkg''@;'; put 'put ''YmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksUT0wO1E8MTY7KytRKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHW1FdLDE2KSk7cmV0dXJuIGooW1IsUzQoU1sxXSldKX1mdW5jdGlvbiBnVihTKXt2YXIgUj1TWzFdLlRvb2x0aXAsaz1ibigxMCsyKihSLmxl''@;'; put 'put ''bmd0aCsxKSk7ay53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBHPU5vKFNbMF0pO2sud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLmMpLGsud3JpdGVfc2hpZnQoMixHLmMpO2Zvcih2YXIgUT0wO1E8Ui5sZW5ndGg7KytRKWsud3JpdGVf''@;'; put 'put ''c2hpZnQoMixSLmNoYXJDb2RlQXQoUSkpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsMCksa31mdW5jdGlvbiByQyhTLFIsayl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gSW4oUyxSKTt2YXIgRz1rJiZrLmJpZmY+PTEyPzQ6MixRPVMucmVhZF9zaGlmdChHKSxvZT1TLnJlYWRfc2hpZnQoRyks''@;'; put 'put ''Z2U9Uy5yZWFkX3NoaWZ0KEcpLHBlPVMucmVhZF9zaGlmdChHKSx5ZT1TLnJlYWRfc2hpZnQoMik7Mj09RyYmKFMubCs9Mik7dmFyIFBlPXtzOlEsZTpvZSx3OmdlLGl4ZmU6cGUsZmxhZ3M6eWV9O3JldHVybihrLmJpZmY+PTV8fCFrLmJpZmYpJiYoUGUubGV2ZWw9eWU+PjgmNyksUGV9ZWtb''@;'; put 'put ''OF09ZnVuY3Rpb24oUyxSKXt2YXIgaz1TLmwrUjtTLmwrPTEwO3ZhciBHPVMucmVhZF9zaGlmdCgyKTtTLmwrPTQsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz00O3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz1RLFMubD1rLHtmbXQ6R319O3ZhciBRdGU9dzAsbms9dzQsTzA9''@;'; put 'put ''bnU7dmFyIEIzPWZ1bmN0aW9uKCl7dmFyIFM9ezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1''@;'; put 'put ''LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUw''@;'; put 'put ''LDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUwLDI3OjQzNywyODo4NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4''@;'; put 'put ''OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0OjEyNTcsMjU1OjE2OTY5fSxSPVZlKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIx''@;'; put 'put ''Ojk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3fSk7ZnVuY3Rpb24gUSh5ZSxQZSl7dmFyIE5lPVBlfHx7fTtyZXR1cm4gTmUu''@;'; put 'put ''ZGF0ZU5GfHwoTmUuZGF0ZU5GPSJ5eXl5bW1kZCIpLHA0KGZ1bmN0aW9uIEcoeWUsUGUpe3ZhciBOZT1bXSxZZT1WKDEpO3N3aXRjaChQZS50eXBlKXtjYXNlImJhc2U2NCI6WWU9YihfZS5kZWNvZGUoeWUpKTticmVhaztjYXNlImJpbmFyeSI6WWU9Yih5ZSk7YnJlYWs7Y2FzZSJidWZmZXIi''@;'; put 'put ''OmNhc2UiYXJyYXkiOlllPXllfW1uKFllLDApO3ZhciBldD1ZZS5yZWFkX3NoaWZ0KDEpLGN0PSEhKDEzNiZldCksRXQ9ITEsYXQ9ITE7c3dpdGNoKGV0KXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFrO2Nhc2UgNDg6Y2FzZSA0OTpFdD0hMCxjdD0hMDti''@;'; put 'put ''cmVhaztjYXNlIDE0MDphdD0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIFZlcnNpb246ICIrZXQudG9TdHJpbmcoMTYpKX12YXIgYnQ9MCxqdD01MjE7Mj09ZXQmJihidD1ZZS5yZWFkX3NoaWZ0KDIpKSxZZS5sKz0zLDIhPWV0JiYoYnQ9WWUucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSksYnQ+MTA0ODU3NiYmKGJ0PTFlNiksMiE9ZXQmJihqdD1ZZS5yZWFkX3NoaWZ0KDIpKTt2YXIga3Q9WWUucmVhZF9zaGlmdCgyKSxPdD1QZS5jb2RlcGFnZXx8MTI1MjsyIT1ldCYmKFllLmwrPTE2LFllLnJlYWRfc2hpZnQoMSksMCE9PVllW1llLmxdJiYoT3Q9U1tZZVtZ''@;'; put 'put ''ZS5sXV0pLFllLmwrPTEsWWUubCs9MiksYXQmJihZZS5sKz0zNik7Zm9yKHZhciBLdD1bXSxUbj17fSxycj1NYXRoLm1pbihZZS5sZW5ndGgsMj09ZXQ/NTIxOmp0LTEwLShFdD8yNjQ6MCkpLFNuPWF0PzMyOjExO1llLmw8cnImJjEzIT1ZZVtZZS5sXTspc3dpdGNoKFRuPXt9LFRuLm5hbWU9''@;'; put 'put ''Y3B0YWJsZS51dGlscy5kZWNvZGUoT3QsWWUuc2xpY2UoWWUubCxZZS5sK1NuKSkucmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLFllLmwrPVNuLFRuLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShZZS5yZWFkX3NoaWZ0KDEpKSwyIT1ldCYmIWF0JiYoVG4ub2Zmc2V0PVllLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpLFRuLmxlbj1ZZS5yZWFkX3NoaWZ0KDEpLDI9PWV0JiYoVG4ub2Zmc2V0PVllLnJlYWRfc2hpZnQoMikpLFRuLmRlYz1ZZS5yZWFkX3NoaWZ0KDEpLFRuLm5hbWUubGVuZ3RoJiZLdC5wdXNoKFRuKSwyIT1ldCYmKFllLmwrPWF0PzEzOjE0KSxUbi50eXBlKXtjYXNlIkIiOigh''@;'; put 'put ''RXR8fDghPVRuLmxlbikmJlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSJHIjpjYXNlIlAiOlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAi''@;'; put 'put ''OmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2UiVCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK1RuLnR5cGUpfWlmKDEzIT09WWVbWWUu''@;'; put 'put ''bF0mJihZZS5sPWp0LTEpLDEzIT09WWUucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK1llLmwrIiAiK1llW1llLmxdKTtZZS5sPWp0O3ZhciBscj0wLFhuPTA7Zm9yKE5lWzBdPVtdLFhuPTA7WG4hPUt0Lmxlbmd0aDsrK1huKU5lWzBd''@;'; put 'put ''W1huXT1LdFtYbl0ubmFtZTtmb3IoO2J0LS0gPjA7KWlmKDQyIT09WWVbWWUubF0pZm9yKCsrWWUubCxOZVsrK2xyXT1bXSxYbj0wLFhuPTA7WG4hPUt0Lmxlbmd0aDsrK1huKXt2YXIgQm49WWUuc2xpY2UoWWUubCxZZS5sK0t0W1huXS5sZW4pO1llLmwrPUt0W1huXS5sZW4sbW4oQm4sMCk7''@;'; put 'put ''dmFyIGZyPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LEJuKTtzd2l0Y2goS3RbWG5dLnR5cGUpe2Nhc2UiQyI6ZnIudHJpbSgpLmxlbmd0aCYmKE5lW2xyXVtYbl09ZnIucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNlIkQiOk5lW2xyXVtYbl09OD09PWZyLmxlbmd0aD9uZXcgRGF0ZSgr''@;'; put 'put ''ZnIuc2xpY2UoMCw0KSwrZnIuc2xpY2UoNCw2KS0xLCtmci5zbGljZSg2LDgpKTpmcjticmVhaztjYXNlIkYiOk5lW2xyXVtYbl09cGFyc2VGbG9hdChmci50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpOZVtscl1bWG5dPWF0PzIxNDc0ODM2NDheQm4ucmVhZF9zaGlmdCgtNCwiaSIp''@;'; put 'put ''OkJuLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNoKGZyLnRyaW0oKS50b1VwcGVyQ2FzZSgpKXtjYXNlIlkiOmNhc2UiVCI6TmVbbHJdW1huXT0hMDticmVhaztjYXNlIk4iOmNhc2UiRiI6TmVbbHJdW1huXT0hMTticmVhaztjYXNlIiI6Y2FzZSI/IjpicmVhaztkZWZh''@;'; put 'put ''dWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVucmVjb2duaXplZCBMOnwiK2ZyKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZighY3QpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIrZXQudG9TdHJpbmcoMTYpKTtOZVtscl1bWG5dPSIjI01FTU8jIyIrKGF0P3Bh''@;'; put 'put ''cnNlSW50KGZyLnRyaW0oKSwxMCk6Qm4ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJOIjooZnI9ZnIucmVwbGFjZSgvXHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9ZnImJihOZVtscl1bWG5dPStmcnx8MCk7YnJlYWs7Y2FzZSJAIjpOZVtscl1bWG5dPW5ldyBEYXRlKEJuLnJlYWRfc2hp''@;'; put 'put ''ZnQoLTgsImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpOZVtscl1bWG5dPW5ldyBEYXRlKDg2NGU1KihCbi5yZWFkX3NoaWZ0KDQpLTI0NDA1ODgpK0JuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6TmVbbHJdW1huXT1Cbi5yZWFkX3NoaWZ0KDQsImkiKS8xZTQ7YnJlYWs7''@;'; put 'put ''Y2FzZSJPIjpOZVtscl1bWG5dPS1Cbi5yZWFkX3NoaWZ0KC04LCJmIik7YnJlYWs7Y2FzZSJCIjppZihFdCYmOD09S3RbWG5dLmxlbil7TmVbbHJdW1huXT1Cbi5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Qm4ubCs9S3RbWG5dLmxlbjticmVhaztjYXNlIjAiOmlm''@;'; put 'put ''KCJfTnVsbEZsYWdzIj09PUt0W1huXS5uYW1lKWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICIrS3RbWG5dLnR5cGUpfX1lbHNlIFllLmwrPWt0O2lmKDIhPWV0JiZZZS5sPFllLmxlbmd0aCYmMjYhPVllW1llLmwrK10pdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJEQkYgRU9GIE1hcmtlciBtaXNzaW5nICIrKFllLmwtMSkrIiBvZiAiK1llLmxlbmd0aCsiICIrWWVbWWUubC0xXS50b1N0cmluZygxNikpO3JldHVybiBQZSYmUGUuc2hlZXRSb3dzJiYoTmU9TmUuc2xpY2UoMCxQZS5zaGVldFJvd3MpKSxOZX0oeWUsTmUpLE5lKX12YXIgZ2U9''@;'; put 'put ''e0I6OCxDOjI1MCxMOjEsRDo4LCI/IjowLCIiOjB9O3JldHVybnt2ZXJzaW9uczpbMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gb2UoeWUsUGUpe3RyeXtyZXR1cm4gdGgoUSh5ZSxQZSksUGUpfWNhdGNoKE5lKXtpZihQZSYmUGUuV1RGKXRocm93IE5l''@;'; put 'put ''fXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0OlEsZnJvbV9zaGVldDpmdW5jdGlvbiBwZSh5ZSxQZSl7dmFyIE5lPVBlfHx7fTtpZigrTmUuY29kZXBhZ2U+PTAmJlUoK05lLmNvZGVwYWdlKSwic3RyaW5nIj09TmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5v''@;'; put 'put ''dCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIFllPWJpKCksZXQ9SzQoeWUse2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxjdD1ldFswXSxFdD1ldC5zbGljZSgxKSxhdD0wLGJ0PTAsanQ9MCxrdD0xO2ZvcihhdD0wO2F0PGN0Lmxlbmd0aDsrK2F0KWlmKG51bGwhPWF0KXtp''@;'; put 'put ''ZigrK2p0LCJudW1iZXIiPT10eXBlb2YgY3RbYXRdJiYoY3RbYXRdPWN0W2F0XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgY3RbYXRdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitjdFthdF0rIiB8Iit0eXBlb2YgY3RbYXRdKyJ8Iik7aWYoY3Qu''@;'; put 'put ''aW5kZXhPZihjdFthdF0pIT09YXQpZm9yKGJ0PTA7YnQ8MTAyNDsrK2J0KWlmKC0xPT1jdC5pbmRleE9mKGN0W2F0XSsiXyIrYnQpKXtjdFthdF0rPSJfIitidDticmVha319dmFyIE90PW9vKHllWyIhcmVmIl0pLEt0PVtdO2ZvcihhdD0wO2F0PD1PdC5lLmMtT3Qucy5jOysrYXQpe3ZhciBU''@;'; put 'put ''bj1bXTtmb3IoYnQ9MDtidDxFdC5sZW5ndGg7KytidCludWxsIT1FdFtidF1bYXRdJiZUbi5wdXNoKEV0W2J0XVthdF0pO2lmKDAhPVRuLmxlbmd0aCYmbnVsbCE9Y3RbYXRdKXt2YXIgcnI9IiIsU249IiI7Zm9yKGJ0PTA7YnQ8VG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgVG5bYnRd''@;'; put 'put ''KXtjYXNlIm51bWJlciI6U249IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpkZWZhdWx0OlNuPSJDIjticmVhaztjYXNlImJvb2xlYW4iOlNuPSJMIjticmVhaztjYXNlIm9iamVjdCI6U249VG5bYnRdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0ocnI9cnImJnJyIT1Tbj8iQyI6U24p''@;'; put 'put ''KWJyZWFrfWt0Kz1nZVtycl18fDAsS3RbYXRdPXJyfWVsc2UgS3RbYXRdPSI/In12YXIgbHI9WWUubmV4dCgzMik7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxsci53cml0ZV9zaGlmdCg0LEV0Lmxlbmd0aCksbHIud3JpdGVfc2hpZnQoMiwyOTYrMzIqanQpLGxyLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsa3QpLGF0PTA7YXQ8NDsrK2F0KWxyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsKCtSW0ZdfHwzKTw8OCksYXQ9MCxidD0wO2F0PGN0Lmxlbmd0aDsrK2F0KWlmKG51bGwhPWN0W2F0XSl7dmFyIFhuPVllLm5leHQoMzIpLEJuPShjdFthdF0uc2xpY2UoLTEw''@;'; put 'put ''KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNlKDAsMTEpO1huLndyaXRlX3NoaWZ0KDEsQm4sInNiY3MiKSxYbi53cml0ZV9zaGlmdCgxLCI/Ij09S3RbYXRdPyJDIjpLdFthdF0sInNiY3MiKSxYbi53cml0ZV9zaGlmdCg0LGJ0KSxYbi53cml0ZV9zaGlmdCgxLGdlW0t0W2F0XV18''@;'; put 'put ''fDApLFhuLndyaXRlX3NoaWZ0KDEsMCksWG4ud3JpdGVfc2hpZnQoMSwyKSxYbi53cml0ZV9zaGlmdCg0LDApLFhuLndyaXRlX3NoaWZ0KDEsMCksWG4ud3JpdGVfc2hpZnQoNCwwKSxYbi53cml0ZV9zaGlmdCg0LDApLGJ0Kz1nZVtLdFthdF1dfHwwfXZhciBmcj1ZZS5uZXh0KDI2NCk7Zm9y''@;'; put 'put ''KGZyLndyaXRlX3NoaWZ0KDQsMTMpLGF0PTA7YXQ8NjU7KythdClmci53cml0ZV9zaGlmdCg0LDApO2ZvcihhdD0wO2F0PEV0Lmxlbmd0aDsrK2F0KXt2YXIgYnI9WWUubmV4dChrdCk7Zm9yKGJyLndyaXRlX3NoaWZ0KDEsMCksYnQ9MDtidDxjdC5sZW5ndGg7KytidClpZihudWxsIT1jdFti''@;'; put 'put ''dF0pc3dpdGNoKEt0W2J0XSl7Y2FzZSJMIjpici53cml0ZV9zaGlmdCgxLG51bGw9PUV0W2F0XVtidF0/NjM6RXRbYXRdW2J0XT84NDo3MCk7YnJlYWs7Y2FzZSJCIjpici53cml0ZV9zaGlmdCg4LEV0W2F0XVtidF18fDAsImYiKTticmVhaztjYXNlIkQiOkV0W2F0XVtidF0/KGJyLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsKCIwMDAwIitFdFthdF1bYnRdLmdldEZ1bGxZZWFyKCkpLnNsaWNlKC00KSwic2JjcyIpLGJyLndyaXRlX3NoaWZ0KDIsKCIwMCIrKEV0W2F0XVtidF0uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLCJzYmNzIiksYnIud3JpdGVfc2hpZnQoMiwoIjAwIitFdFthdF1bYnRdLmdl''@;'; put 'put ''dERhdGUoKSkuc2xpY2UoLTIpLCJzYmNzIikpOmJyLndyaXRlX3NoaWZ0KDgsIjAwMDAwMDAwIiwic2JjcyIpO2JyZWFrO2Nhc2UiQyI6dmFyIGVyPVN0cmluZyhFdFthdF1bYnRdfHwiIik7Zm9yKGJyLndyaXRlX3NoaWZ0KDEsZXIsInNiY3MiKSxqdD0wO2p0PDI1MC1lci5sZW5ndGg7Kytq''@;'; put 'put ''dClici53cml0ZV9zaGlmdCgxLDMyKX19cmV0dXJuIFllLm5leHQoMSkud3JpdGVfc2hpZnQoMSwyNiksWWUuZW5kKCl9fX0oKSxjQz1mdW5jdGlvbigpe3ZhciBTPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4''@;'; put 'put ''YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToi''@;'; put 'put ''XHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhlNCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2''@;'; put 'put ''IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZiIixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjox''@;'; put 'put ''NzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUToxODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkw''@;'; put 'put ''LCI/IjoxOTEsInsiOjIyM30sUj1uZXcgUmVnRXhwKCJceDFiTigiK09lKFMpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLGs9ZnVuY3Rpb24oZXQsY3Qpe3ZhciBFdD1TW2N0XTtyZXR1cm4ibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIEV0P2llKEV0KTpFdH0sRz1mdW5jdGlvbihldCxjdCxFdCl7dmFyIGF0PWN0LmNoYXJDb2RlQXQoMCktMzI8PDR8RXQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PWF0P2V0OmllKGF0KX07ZnVuY3Rpb24gb2UoZXQsY3Qpe3ZhciBmcixFdD1ldC5zcGxpdCgvW1xu''@;'; put 'put ''XHJdKy8pLGF0PS0xLGJ0PS0xLGp0PTAsa3Q9MCxPdD1bXSxLdD1bXSxUbj1udWxsLHJyPXt9LFNuPVtdLGxyPVtdLFhuPVtdLEJuPTA7Zm9yKCtjdC5jb2RlcGFnZT49MCYmVSgrY3QuY29kZXBhZ2UpO2p0IT09RXQubGVuZ3RoOysranQpe0JuPTA7dmFyIEZpLGJyPUV0W2p0XS50cmltKCku''@;'; put 'put ''cmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csRykucmVwbGFjZShSLGspLGVyPWJyLnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rpb24oWmkpe3JldHVybiBaaS5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYnIubGVuZ3RoPjApc3dp''@;'; put 'put ''dGNoKGVyWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2UiQiI6Y2FzZSJPIjpjYXNlIlciOmJyZWFrO2Nhc2UiUCI6IlAiPT1lclsxXS5jaGFyQXQoMCkmJkt0LnB1c2goYnIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBuYT0hMSxjYT0hMSxMaT0hMSxr''@;'; put 'put ''cj0hMSxWbj0tMSxCcj0tMTtmb3Ioa3Q9MTtrdDxlci5sZW5ndGg7KytrdClzd2l0Y2goZXJba3RdLmNoYXJBdCgwKSl7Y2FzZSJBIjpjYXNlIkciOmJyZWFrO2Nhc2UiWCI6YnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLGNhPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKGF0PXBhcnNlSW50''@;'; put 'put ''KGVyW2t0XS5zbGljZSgxKSktMSxjYXx8KGJ0PTApLGZyPU90Lmxlbmd0aDtmcjw9YXQ7KytmcilPdFtmcl09W107YnJlYWs7Y2FzZSJLIjonIic9PT0oRmk9ZXJba3RdLnNsaWNlKDEpKS5jaGFyQXQoMCk/Rmk9Rmkuc2xpY2UoMSxGaS5sZW5ndGgtMSk6IlRSVUUiPT09Rmk/Rmk9ITA6IkZB''@;'; put 'put ''TFNFIj09PUZpP0ZpPSExOmlzTmFOKFF0KEZpKSk/aXNOYU4oc24oRmkpLmdldERhdGUoKSl8fChGaT1IZShGaSkpOihGaT1RdChGaSksbnVsbCE9PVRuJiZBLmlzX2RhdGUoVG4pJiYoRmk9dW4oRmkpKSksdHlwZW9mIGNwdGFibGU8InUiJiYic3RyaW5nIj09dHlwZW9mIEZpJiYic3RyaW5n''@;'; put 'put ''IiE9KGN0fHx7fSkudHlwZSYmKGN0fHx7fSkuY29kZXBhZ2UmJihGaT1jcHRhYmxlLnV0aWxzLmRlY29kZShjdC5jb2RlcGFnZSxGaSkpLG5hPSEwO2JyZWFrO2Nhc2UiRSI6a3I9ITA7dmFyIF9yPUg1KGVyW2t0XS5zbGljZSgxKSx7cjphdCxjOmJ0fSk7T3RbYXRdW2J0XT1bT3RbYXRdW2J0''@;'; put 'put ''XSxfcl07YnJlYWs7Y2FzZSJTIjpMaT0hMCxPdFthdF1bYnRdPVtPdFthdF1bYnRdLCJTNVMiXTticmVhaztjYXNlIlIiOlZuPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMTticmVhaztjYXNlIkMiOkJyPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGN0''@;'; put 'put ''JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIiticil9aWYobmEmJihPdFthdF1bYnRdJiYyPT1PdFthdF1bYnRdLmxlbmd0aD9PdFthdF1bYnRdWzBdPUZpOk90W2F0XVtidF09RmksVG49bnVsbCksTGkpe2lmKGtyKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFy''@;'; put 'put ''ZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVsYSIpO3ZhciBGbj1Wbj4tMSYmT3RbVm5dW0JyXTtpZighRm58fCFGblsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO090W2F0XVtidF1bMV09R2soRm5bMV0se3I6YXQtVm4s''@;'; put 'put ''YzpidC1Ccn0pfWJyZWFrO2Nhc2UiRiI6dmFyIGpyPTA7Zm9yKGt0PTE7a3Q8ZXIubGVuZ3RoOysra3Qpc3dpdGNoKGVyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiWCI6YnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLCsranI7YnJlYWs7Y2FzZSJZIjpmb3IoYXQ9cGFyc2VJbnQoZXJba3Rd''@;'; put 'put ''LnNsaWNlKDEpKS0xLGZyPU90Lmxlbmd0aDtmcjw9YXQ7KytmcilPdFtmcl09W107YnJlYWs7Y2FzZSJNIjpCbj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLzIwO2JyZWFrO2Nhc2UiRiI6Y2FzZSJHIjpjYXNlIlMiOmNhc2UiRCI6Y2FzZSJOIjpicmVhaztjYXNlIlAiOlRuPUt0W3BhcnNl''@;'; put 'put ''SW50KGVyW2t0XS5zbGljZSgxKSldO2JyZWFrO2Nhc2UiVyI6Zm9yKFhuPWVyW2t0XS5zbGljZSgxKS5zcGxpdCgiICIpLGZyPXBhcnNlSW50KFhuWzBdLDEwKTtmcjw9cGFyc2VJbnQoWG5bMV0sMTApOysrZnIpQm49cGFyc2VJbnQoWG5bMl0sMTApLGxyW2ZyLTFdPTA9PT1Cbj97aGlkZGVu''@;'; put 'put ''OiEwfTp7d2NoOkJufSxRMChscltmci0xXSk7YnJlYWs7Y2FzZSJDIjpscltidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTFdfHwobHJbYnRdPXt9KTticmVhaztjYXNlIlIiOlNuW2F0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMV18fChTblthdF09e30pLEJuPjA/KFNuW2F0XS5o''@;'; put 'put ''cHQ9Qm4sU25bYXRdLmhweD1zaChCbikpOjA9PT1CbiYmKFNuW2F0XS5oaWRkZW49ITApO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX1qcjwxJiYoVG49bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfX1yZXR1cm4gU24ubGVuZ3RoPjAmJihyclsiIXJvd3MiXT1TbiksbHIubGVuZ3RoPjAmJihyclsiIWNvbHMiXT1sciksY3QmJmN0LnNoZWV0Um93cyYmKE90PU90LnNsaWNlKDAsY3Quc2hlZXRSb3dzKSksW090LHJyXX1mdW5j''@;'; put 'put ''dGlvbiBnZShldCxjdCl7dmFyIEV0PWZ1bmN0aW9uIFEoZXQsY3Qpe3N3aXRjaChjdC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIG9lKF9lLmRlY29kZShldCksY3QpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gb2UoZXQsY3QpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gb2UoZXQudG9TdHJpbmcoImJp''@;'; put 'put ''bmFyeSIpLGN0KTtjYXNlImFycmF5IjpyZXR1cm4gb2UodXQoZXQpLGN0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrY3QudHlwZSl9KGV0LGN0KSxidD1FdFsxXSxqdD1wNChFdFswXSxjdCk7cmV0dXJuIE9lKGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtqdFtrdF09''@;'; put 'put ''YnRba3RdfSksanR9ZnVuY3Rpb24geWUoZXQsY3QsRXQsYXQpe3ZhciBidD0iQztZIisoRXQrMSkrIjtYIisoYXQrMSkrIjtLIjtzd2l0Y2goZXQudCl7Y2FzZSJuIjpidCs9ZXQudnx8MCxldC5mJiYhZXQuRiYmKGJ0Kz0iO0UiK0g0KGV0LmYse3I6RXQsYzphdH0pKTticmVhaztjYXNlImIi''@;'; put 'put ''OmJ0Kz1ldC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQrPWV0Lnd8fGV0LnY7YnJlYWs7Y2FzZSJkIjpidCs9JyInKyhldC53fHxldC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK2V0LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiBTWyJ8Il09''@;'; put 'put ''MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBwZShldCxjdCl7cmV0dXJuIHRoKGdlKGV0LGN0KSxjdCl9LHRvX3NoZWV0OmdlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gWWUoZXQsY3Qpe3ZhciBqdCxFdD1bIklEO1BTaGVldEpTO047RSJdLGF0PVtdLGJ0PW9vKGV0WyIhcmVmIl0pLGt0PUFycmF5''@;'; put 'put ''LmlzQXJyYXkoZXQpLE90PSJcclxuIjtFdC5wdXNoKCJQO1BHZW5lcmFsIiksRXQucHVzaCgiRjtQMDtERzBHODtNMjU1IiksZXRbIiFjb2xzIl0mJmZ1bmN0aW9uIFBlKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKEV0LGF0KXt2YXIgYnQ9IkY7VyIrKGF0KzEpKyIgIisoYXQrMSkrIiAi''@;'; put 'put ''O0V0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIEV0LndpZHRoJiYhRXQud3B4JiYoRXQud3B4PU01KEV0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBFdC53cHgmJiFFdC53Y2gmJihFdC53Y2g9eDUoRXQud3B4KSksIm51bWJlciI9PXR5cGVvZiBFdC53Y2gmJihidCs9TWF0''@;'; put 'put ''aC5yb3VuZChFdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3RoLTEpJiZldC5wdXNoKGJ0KX0pfShFdCxldFsiIWNvbHMiXSksZXRbIiFyb3dzIl0mJmZ1bmN0aW9uIE5lKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKEV0LGF0KXt2YXIgYnQ9IkY7IjtFdC5oaWRkZW4/YnQrPSJN''@;'; put 'put ''MDsiOkV0LmhwdD9idCs9Ik0iKzIwKkV0LmhwdCsiOyI6RXQuaHB4JiYoYnQrPSJNIisyMCpVMyhFdC5ocHgpKyI7IiksYnQubGVuZ3RoPjImJmV0LnB1c2goYnQrIlIiKyhhdCsxKSl9KX0oRXQsZXRbIiFyb3dzIl0pLEV0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQu''@;'; put 'put ''ZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxidC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBLdD1idC5zLnI7S3Q8PWJ0LmUucjsrK0t0KWZvcih2YXIgVG49YnQucy5jO1RuPD1idC5lLmM7KytUbil7dmFyIHJyPXFpKHtyOkt0LGM6VG59KTsoanQ9a3Q/KGV0W0t0''@;'; put 'put ''XXx8W10pW1RuXTpldFtycl0pJiYobnVsbCE9anQudnx8anQuZiYmIWp0LkYpJiZhdC5wdXNoKHllKGp0LDAsS3QsVG4pKX1yZXR1cm4gRXQuam9pbihPdCkrT3QrYXQuam9pbihPdCkrT3QrIkUiK090fX19KCksRHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBSKG9lLGdlKXtmb3IodmFyIHBlPW9l''@;'; put 'put ''LnNwbGl0KCJcbiIpLHllPS0xLFBlPS0xLE5lPTAsWWU9W107TmUhPT1wZS5sZW5ndGg7KytOZSlpZigiQk9UIiE9PXBlW05lXS50cmltKCkpe2lmKCEoeWU8MCkpe2Zvcih2YXIgZXQ9cGVbTmVdLnRyaW0oKS5zcGxpdCgiLCIpLGN0PWV0WzBdLEV0PWV0WzFdLGF0PXBlWysrTmVdfHwiIjsx''@;'; put 'put ''JihhdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZOZTxwZS5sZW5ndGgtMTspYXQrPSJcbiIrcGVbKytOZV07c3dpdGNoKGF0PWF0LnRyaW0oKSwrY3Qpe2Nhc2UtMTppZigiQk9UIj09PWF0KXtZZVsrK3llXT1bXSxQZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09YXQpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK2F0KTticmVhaztjYXNlIDA6WWVbeWVdW1BlXT0iVFJVRSI9PT1hdHx8IkZBTFNFIiE9PWF0JiYoaXNOYU4oUXQoRXQpKT9pc05hTihzbihFdCkuZ2V0RGF0ZSgpKT9FdDpIZShFdCk6UXQoRXQpKSwrK1BlO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTooYXQ9KGF0PWF0LnNsaWNlKDEsYXQubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCciJykpJiZhdC5tYXRjaCgvXj0iLioiJC8pJiYoYXQ9YXQuc2xpY2UoMiwtMSkpLFllW3llXVtQZSsrXT0iIiE9PWF0P2F0Om51bGx9aWYoIkVPRCI9PT1hdClicmVha319ZWxzZSBZZVsrK3llXT1b''@;'; put 'put ''XSxQZT0wO3JldHVybiBnZSYmZ2Uuc2hlZXRSb3dzJiYoWWU9WWUuc2xpY2UoMCxnZS5zaGVldFJvd3MpKSxZZX1mdW5jdGlvbiBrKG9lLGdlKXtyZXR1cm4gcDQoZnVuY3Rpb24gUyhvZSxnZSl7c3dpdGNoKGdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihfZS5kZWNvZGUob2UpLGdl''@;'; put 'put ''KTtjYXNlImJpbmFyeSI6cmV0dXJuIFIob2UsZ2UpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gUihvZS50b1N0cmluZygiYmluYXJ5IiksZ2UpO2Nhc2UiYXJyYXkiOnJldHVybiBSKHV0KG9lKSxnZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2dlLnR5cGUpfShvZSxnZSks''@;'; put 'put ''Z2UpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKG9lLGdlKXtyZXR1cm4gdGgoayhvZSxnZSksZ2UpfSx0b19zaGVldDprLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgb2U9ZnVuY3Rpb24oeWUsUGUsTmUsWWUsZXQpe3llLnB1c2goUGUpLHllLnB1c2goTmUrIiwiK1llKSx5ZS5w''@;'; put 'put ''dXNoKCciJytldC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sZ2U9ZnVuY3Rpb24oeWUsUGUsTmUsWWUpe3llLnB1c2goUGUrIiwiK05lKSx5ZS5wdXNoKDE9PVBlPyciJytZZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOlllKX07cmV0dXJuIGZ1bmN0aW9uKHllKXt2YXIgWWUsUGU9W10sTmU9''@;'; put 'put ''b28oeWVbIiFyZWYiXSksZXQ9QXJyYXkuaXNBcnJheSh5ZSk7b2UoUGUsIlRBQkxFIiwwLDEsInNoZWV0anMiKSxvZShQZSwiVkVDVE9SUyIsMCxOZS5lLnItTmUucy5yKzEsIiIpLG9lKFBlLCJUVVBMRVMiLDAsTmUuZS5jLU5lLnMuYysxLCIiKSxvZShQZSwiREFUQSIsMCwwLCIiKTtmb3Io''@;'; put 'put ''dmFyIGN0PU5lLnMucjtjdDw9TmUuZS5yOysrY3Qpe2dlKFBlLC0xLDAsIkJPVCIpO2Zvcih2YXIgRXQ9TmUucy5jO0V0PD1OZS5lLmM7KytFdCl7dmFyIGF0PXFpKHtyOmN0LGM6RXR9KTtpZihZZT1ldD8oeWVbY3RdfHxbXSlbRXRdOnllW2F0XSlzd2l0Y2goWWUudCl7Y2FzZSJuIjp2YXIg''@;'; put 'put ''YnQ9WWUudzshYnQmJm51bGwhPVllLnYmJihidD1ZZS52KSxudWxsPT1idD9nZShQZSwxLDAsWWUuZiYmIVllLkY/Ij0iK1llLmY6IiIpOmdlKFBlLDAsYnQsIlYiKTticmVhaztjYXNlImIiOmdlKFBlLDAsWWUudj8xOjAsWWUudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpnZShQ''@;'; put 'put ''ZSwxLDAsaXNOYU4oWWUudik/WWUudjonPSInK1llLnYrJyInKTticmVhaztjYXNlImQiOlllLnd8fChZZS53PUEuZm9ybWF0KFllLnp8fEEuX3RhYmxlWzE0XSxRZShIZShZZS52KSkpKSxnZShQZSwwLFllLncsIlYiKTticmVhaztkZWZhdWx0OmdlKFBlLDEsMCwiIil9ZWxzZSBnZShQZSwx''@;'; put 'put ''LDAsIiIpfX1yZXR1cm4gZ2UoUGUsLTEsMCwiRU9EIiksUGUuam9pbigiXHJcbiIpfX0oKX19KCksSzY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlv''@;'; put 'put ''biBSKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFjZSgvOi9nLCJcXGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBHKFllLGV0KXtyZXR1cm4gcDQoZnVuY3Rpb24gayhZZSxldCl7Zm9yKHZhciBjdD1ZZS5zcGxpdCgiXG4iKSxFdD0tMSxhdD0tMSxi''@;'; put 'put ''dD0wLGp0PVtdO2J0IT09Y3QubGVuZ3RoOysrYnQpe3ZhciBrdD1jdFtidF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09a3RbMF0pe3ZhciBPdD1ObyhrdFsxXSk7aWYoanQubGVuZ3RoPD1PdC5yKWZvcihFdD1qdC5sZW5ndGg7RXQ8PU90LnI7KytFdClqdFtFdF18fChqdFtFdF09''@;'; put 'put ''W10pO3N3aXRjaChFdD1PdC5yLGF0PU90LmMsa3RbMl0pe2Nhc2UidCI6anRbRXRdW2F0XT1TKGt0WzNdKTticmVhaztjYXNlInYiOmp0W0V0XVthdF09K2t0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgS3Q9a3Rba3QubGVuZ3RoLTFdO2Nhc2UidnRjIjpqdFtFdF1bYXRdPSJubCI9PT1rdFsz''@;'; put 'put ''XT8hIStrdFs0XTora3RbNF0sInZ0ZiI9PWt0WzJdJiYoanRbRXRdW2F0XT1banRbRXRdW2F0XSxLdF0pfX19cmV0dXJuIGV0JiZldC5zaGVldFJvd3MmJihqdD1qdC5zbGljZSgwLGV0LnNoZWV0Um93cykpLGp0fShZZSxldCksZXQpfXZhciBvZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUi''@;'; put 'put ''LCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksZ2U9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0''@;'; put 'put ''ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHBlPVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLHllPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIFBl''@;'; put 'put ''KFllKXtpZighWWV8fCFZZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgRXQsZXQ9W10sY3Q9W10sYXQ9IiIsYnQ9TXMoWWVbIiFyZWYiXSksanQ9QXJyYXkuaXNBcnJheShZZSksa3Q9YnQucy5yO2t0PD1idC5lLnI7KytrdClmb3IodmFyIE90PWJ0LnMuYztPdDw9YnQuZS5jOysrT3QpaWYo''@;'; put 'put ''YXQ9cWkoe3I6a3QsYzpPdH0pLChFdD1qdD8oWWVba3RdfHxbXSlbT3RdOlllW2F0XSkmJm51bGwhPUV0LnYmJiJ6IiE9PUV0LnQpe3N3aXRjaChjdD1bImNlbGwiLGF0LCJ0Il0sRXQudCl7Y2FzZSJzIjpjYXNlInN0ciI6Y3QucHVzaChSKEV0LnYpKTticmVhaztjYXNlIm4iOkV0LmY/KGN0''@;'; put 'put ''WzJdPSJ2dGYiLGN0WzNdPSJuIixjdFs0XT1FdC52LGN0WzVdPVIoRXQuZikpOihjdFsyXT0idiIsY3RbM109RXQudik7YnJlYWs7Y2FzZSJiIjpjdFsyXT0idnQiKyhFdC5mPyJmIjoiYyIpLGN0WzNdPSJubCIsY3RbNF09RXQudj8iMSI6IjAiLGN0WzVdPVIoRXQuZnx8KEV0LnY/IlRSVUUi''@;'; put 'put ''OiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBLdD1RZShIZShFdC52KSk7Y3RbMl09InZ0YyIsY3RbM109Im5kIixjdFs0XT0iIitLdCxjdFs1XT1FdC53fHxBLmZvcm1hdChFdC56fHxBLl90YWJsZVsxNF0sS3QpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9ZXQucHVzaChjdC5qb2luKCI6''@;'; put 'put ''IikpfXJldHVybiBldC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5zLmMrMSkrIjpyOiIrKGJ0LmUuci1idC5zLnIrMSkrIjp0dmY6MSIpLGV0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksZXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShZZSxl''@;'; put 'put ''dCl7cmV0dXJuIHRoKEcoWWUsZXQpLGV0KX0sdG9fc2hlZXQ6Ryxmcm9tX3NoZWV0OmZ1bmN0aW9uIE5lKFllKXtyZXR1cm5bb2UsZ2UscGUsZ2UsUGUoWWUpLHllXS5qb2luKCJcbiIpfX19KCksajM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKE5lLFllLGV0LGN0LEV0KXtFdC5yYXc/WWVbZXRd''@;'; put 'put ''W2N0XT1OZToiIj09PU5lfHwoWWVbZXRdW2N0XT1SaShOZSxFdCk/UmkoTmUsRXQpLnY6TmUpfXZhciBrPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sRz17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gUShOZSl7Zm9yKHZhciBZZT17fSxldD0hMSxjdD0wLEV0PTA7Y3Q8TmUubGVuZ3RoOysrY3Qp''@;'; put 'put ''MzQ9PShFdD1OZS5jaGFyQ29kZUF0KGN0KSk/ZXQ9IWV0OiFldCYmRXQgaW4gayYmKFllW0V0XT0oWWVbRXRdfHwwKSsxKTtmb3IoY3QgaW4gRXQ9W10sWWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLGN0KSYmRXQucHVzaChbWWVbY3RdLGN0XSk7aWYoIUV0Lmxl''@;'; put 'put ''bmd0aClmb3IoY3QgaW4gWWU9RylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWWUsY3QpJiZFdC5wdXNoKFtZZVtjdF0sY3RdKTtyZXR1cm4gRXQuc29ydChmdW5jdGlvbihhdCxidCl7cmV0dXJuIGF0WzBdLWJ0WzBdfHxHW2F0WzFdXS1HW2J0WzFdXX0pLGtbRXQucG9w''@;'; put 'put ''KClbMV1dfWZ1bmN0aW9uIGdlKE5lLFllKXtyZXR1cm4hWWV8fCFZZS5QUk58fCJzZXA9Ij09TmUuc2xpY2UoMCw0KXx8TmUuaW5kZXhPZigiXHQiKT49MHx8TmUuaW5kZXhPZigiLCIpPj0wfHxOZS5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gb2UoTmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9''@;'; put 'put ''IiI7bnVsbCE9bGUmJm51bGw9PWV0LmRlbnNlJiYoZXQuZGVuc2U9bGUpO3ZhciBFdD1ldC5kZW5zZT9bXTp7fSxhdD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJzZXA9Ij09TmUuc2xpY2UoMCw0KT8xMz09TmUuY2hhckNvZGVBdCg1KSYmMTA9PU5lLmNoYXJDb2RlQXQoNik/KGN0PU5l''@;'; put 'put ''LmNoYXJBdCg0KSxOZT1OZS5zbGljZSg3KSk6MTM9PU5lLmNoYXJDb2RlQXQoNSl8fDEwPT1OZS5jaGFyQ29kZUF0KDUpPyhjdD1OZS5jaGFyQXQoNCksTmU9TmUuc2xpY2UoNikpOmN0PVEoTmUuc2xpY2UoMCwxMDI0KSk6Y3Q9UShOZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxqdD0wLGt0''@;'; put 'put ''PTAsT3Q9MCxLdD0wLFRuPWN0LmNoYXJDb2RlQXQoMCkscnI9ITEsU249MCxscj1OZS5jaGFyQ29kZUF0KDApO05lPU5lLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIFhuPW51bGwhPWV0LmRhdGVORj9mdW5jdGlvbiBVZShTKXt2YXIgUj0ibnVtYmVyIj09dHlwZW9mIFM/QS5fdGFibGVb''@;'; put 'put ''U106UztyZXR1cm4gUj1SLnJlcGxhY2Uod2UsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK1IrIiQiKX0oZXQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIEJuKCl7dmFyIGZyPU5lLnNsaWNlKE90LEt0KSxicj17fTtpZignIic9PWZyLmNoYXJBdCgwKSYmJyInPT1mci5jaGFyQXQoZnIubGVuZ3Ro''@;'; put 'put ''LTEpJiYoZnI9ZnIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09ZnIubGVuZ3RoKWJyLnQ9InoiO2Vsc2UgaWYoZXQucmF3KWJyLnQ9InMiLGJyLnY9ZnI7ZWxzZSBpZigwPT09ZnIudHJpbSgpLmxlbmd0aClici50PSJzIixici52PWZyO2Vsc2UgaWYoNjE9PWZyLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkpMzQ9PWZyLmNoYXJDb2RlQXQoMSkmJjM0PT1mci5jaGFyQ29kZUF0KGZyLmxlbmd0aC0xKT8oYnIudD0icyIsYnIudj1mci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIGhuZShTKXtyZXR1cm4gMSE9Uy5sZW5ndGh9KGZyKT8oYnIudD0ibiIsYnIu''@;'; put 'put ''Zj1mci5zbGljZSgxKSk6KGJyLnQ9InMiLGJyLnY9ZnIpO2Vsc2UgaWYoIlRSVUUiPT1mcilici50PSJiIixici52PSEwO2Vsc2UgaWYoIkZBTFNFIj09ZnIpYnIudD0iYiIsYnIudj0hMTtlbHNlIGlmKGlzTmFOKGt0PVF0KGZyKSkpaWYoIWlzTmFOKHNuKGZyKS5nZXREYXRlKCkpfHxYbiYm''@;'; put 'put ''ZnIubWF0Y2goWG4pKXtici56PWV0LmRhdGVORnx8QS5fdGFibGVbMTRdO3ZhciBlcj0wO1huJiZmci5tYXRjaChYbikmJihmcj1mdW5jdGlvbiBKZShTLFIsayl7dmFyIEc9LTEsUT0tMSxvZT0tMSxnZT0tMSxwZT0tMSx5ZT0tMTsoUi5tYXRjaCh3ZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KFllLGV0KXt2YXIgY3Q9cGFyc2VJbnQoa1tldCsxXSwxMCk7c3dpdGNoKFllLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApKXtjYXNlInkiOkc9Y3Q7YnJlYWs7Y2FzZSJkIjpvZT1jdDticmVhaztjYXNlImgiOmdlPWN0O2JyZWFrO2Nhc2UicyI6eWU9Y3Q7YnJlYWs7Y2FzZSJtIjpnZT49MD9w''@;'; put 'put ''ZT1jdDpRPWN0fX0pLHllPj0wJiYtMT09cGUmJlE+PTAmJihwZT1RLFE9LTEpO3ZhciBQZT0oIiIrKEc+PTA/RzoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkrIi0iKygiMDAiKyhRPj0xP1E6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKG9lPj0xP29lOjEpKS5zbGljZSgt''@;'; put 'put ''Mik7Nz09UGUubGVuZ3RoJiYoUGU9IjAiK1BlKSw4PT1QZS5sZW5ndGgmJihQZT0iMjAiK1BlKTt2YXIgTmU9KCIwMCIrKGdlPj0wP2dlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhwZT49MD9wZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoeWU+PTA/eWU6MCkpLnNsaWNlKC0yKTtyZXR1''@;'; put 'put ''cm4tMT09Z2UmJi0xPT1wZSYmLTE9PXllP1BlOi0xPT1HJiYtMT09USYmLTE9PW9lP05lOlBlKyJUIitOZX0oMCxldC5kYXRlTkYsZnIubWF0Y2goWG4pfHxbXSksZXI9MSksZXQuY2VsbERhdGVzPyhici50PSJkIixici52PUhlKGZyLGVyKSk6KGJyLnQ9Im4iLGJyLnY9UWUoSGUoZnIsZXIp''@;'; put 'put ''KSksITEhPT1ldC5jZWxsVGV4dCYmKGJyLnc9QS5mb3JtYXQoYnIueixici52IGluc3RhbmNlb2YgRGF0ZT9RZShici52KTpici52KSksZXQuY2VsbE5GfHxkZWxldGUgYnIuen1lbHNlIGJyLnQ9InMiLGJyLnY9ZnI7ZWxzZSBici50PSJuIiwhMSE9PWV0LmNlbGxUZXh0JiYoYnIudz1mciks''@;'; put 'put ''YnIudj1rdDtpZigieiI9PWJyLnR8fChldC5kZW5zZT8oRXRbYnRdfHwoRXRbYnRdPVtdKSxFdFtidF1banRdPWJyKTpFdFtxaSh7YzpqdCxyOmJ0fSldPWJyKSxscj1OZS5jaGFyQ29kZUF0KE90PUt0KzEpLGF0LmUuYzxqdCYmKGF0LmUuYz1qdCksYXQuZS5yPGJ0JiYoYXQuZS5yPWJ0KSxT''@;'; put 'put ''bj09VG4pKytqdDtlbHNlIGlmKGp0PTAsKytidCxldC5zaGVldFJvd3MmJmV0LnNoZWV0Um93czw9YnQpcmV0dXJuITB9ZTpmb3IoO0t0PE5lLmxlbmd0aDsrK0t0KXN3aXRjaChTbj1OZS5jaGFyQ29kZUF0KEt0KSl7Y2FzZSAzNDozND09PWxyJiYocnI9IXJyKTticmVhaztjYXNlIFRuOmNh''@;'; put 'put ''c2UgMTA6Y2FzZSAxMzppZighcnImJkJuKCkpYnJlYWsgZX1yZXR1cm4gS3QtT3Q+MCYmQm4oKSxFdFsiIXJlZiJdPXJhKGF0KSxFdH0oTmUsWWUpOnA0KGZ1bmN0aW9uIFIoTmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9W107aWYoIU5lfHwwPT09TmUubGVuZ3RoKXJldHVybiBjdDtmb3IodmFy''@;'; put 'put ''IEV0PU5lLnNwbGl0KC9bXHJcbl0vKSxhdD1FdC5sZW5ndGgtMTthdD49MCYmMD09PUV0W2F0XS5sZW5ndGg7KS0tYXQ7Zm9yKHZhciBidD0xMCxqdD0wLGt0PTA7a3Q8PWF0Oysra3QpLTE9PShqdD1FdFtrdF0uaW5kZXhPZigiICIpKT9qdD1FdFtrdF0ubGVuZ3RoOmp0KyssYnQ9TWF0aC5t''@;'; put 'put ''YXgoYnQsanQpO2ZvcihrdD0wO2t0PD1hdDsrK2t0KXtjdFtrdF09W107dmFyIE90PTA7Zm9yKFMoRXRba3RdLnNsaWNlKDAsYnQpLnRyaW0oKSxjdCxrdCxPdCxldCksT3Q9MTtPdDw9KEV0W2t0XS5sZW5ndGgtYnQpLzEwKzE7KytPdClTKEV0W2t0XS5zbGljZShidCsxMCooT3QtMSksYnQr''@;'; put 'put ''MTAqT3QpLnRyaW0oKSxjdCxrdCxPdCxldCl9cmV0dXJuIGV0LnNoZWV0Um93cyYmKGN0PWN0LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksY3R9KE5lLFllKSxZZSl9ZnVuY3Rpb24gcGUoTmUsWWUpe3ZhciBldD0iIixjdD0ic3RyaW5nIj09WWUudHlwZT9bMCwwLDAsMF06UVMoTmUsWWUpO3N3''@;'; put 'put ''aXRjaChZZS50eXBlKXtjYXNlImJhc2U2NCI6ZXQ9X2UuZGVjb2RlKE5lKTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOmV0PU5lO2JyZWFrO2Nhc2UiYnVmZmVyIjpldD02NTAwMT09WWUuY29kZXBhZ2U/TmUudG9TdHJpbmcoInV0ZjgiKTpZZS5jb2RlcGFnZSYmdHlwZW9mIGNw''@;'; put 'put ''dGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLE5lKTpOZS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6ZXQ9dXQoTmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1llLnR5cGUpfXJldHVybiAy''@;'; put 'put ''Mzk9PWN0WzBdJiYxODc9PWN0WzFdJiYxOTE9PWN0WzJdP2V0PWdvKGV0LnNsaWNlKDMpKToiYmluYXJ5Ij09WWUudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZZZS5jb2RlcGFnZSYmKGV0PWNwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4''@;'; put 'put ''NTkxLGV0KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09ZXQuc2xpY2UoMCwxOSk/SzYudG9fc2hlZXQoInN0cmluZyI9PVllLnR5cGU/ZXQ6Z28oZXQpLFllKTpnZShldCxZZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIHllKE5lLFllKXtyZXR1cm4gdGgocGUoTmUsWWUpLFllKX0s''@;'; put 'put ''dG9fc2hlZXQ6cGUsZnJvbV9zaGVldDpmdW5jdGlvbiBQZShOZSl7Zm9yKHZhciBjdCxZZT1bXSxldD1vbyhOZVsiIXJlZiJdKSxFdD1BcnJheS5pc0FycmF5KE5lKSxhdD1ldC5zLnI7YXQ8PWV0LmUucjsrK2F0KXtmb3IodmFyIGJ0PVtdLGp0PWV0LnMuYztqdDw9ZXQuZS5jOysranQpe3Zh''@;'; put 'put ''ciBrdD1xaSh7cjphdCxjOmp0fSk7aWYoKGN0PUV0PyhOZVthdF18fFtdKVtqdF06TmVba3RdKSYmbnVsbCE9Y3Qudil7Zm9yKHZhciBPdD0oY3Qud3x8KF9sKGN0KSxjdC53KXx8IiIpLnNsaWNlKDAsMTApO090Lmxlbmd0aDwxMDspT3QrPSIgIjtidC5wdXNoKE90KygwPT09anQ/IiAiOiIi''@;'; put 'put ''KSl9ZWxzZSBidC5wdXNoKCIgICAgICAgICAgIil9WWUucHVzaChidC5qb2luKCIiKSl9cmV0dXJuIFllLmpvaW4oIlxuIil9fX0oKSxJdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoVm4sQnIsX3Ipe2lmKFZuKXttbihWbixWbi5sfHwwKTtmb3IodmFyIEZuPV9yLkVudW18fExpO1ZuLmw8Vm4u''@;'; put 'put ''bGVuZ3RoOyl7dmFyIGpyPVZuLnJlYWRfc2hpZnQoMiksWmk9Rm5banJdfHxGbls2NTUzNV0seWk9Vm4ucmVhZF9zaGlmdCgyKSxfYT1Wbi5sK3lpLHNvPVppLmYmJlppLmYoVm4seWksX3IpO2lmKFZuLmw9X2EsQnIoc28sWmksanIpKXJldHVybn19fWZ1bmN0aW9uIGsoVm4sQnIpe2lmKCFW''@;'; put 'put ''bilyZXR1cm4gVm47dmFyIF9yPUJyfHx7fTtudWxsIT1sZSYmbnVsbD09X3IuZGVuc2UmJihfci5kZW5zZT1sZSk7dmFyIEZuPV9yLmRlbnNlP1tdOnt9LGpyPSJTaGVldDEiLFppPTAseWk9e30sX2E9W2pyXSxzbz1bXSxpYT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LExvPV9yLnNoZWV0''@;'; put 'put ''Um93c3x8MDtpZigyPT1WblsyXSlfci5FbnVtPUxpLFMoVm4sZnVuY3Rpb24oQmksSXMsUG4pe3N3aXRjaChQbil7Y2FzZSAwOl9yLnZlcnM9QmksQmk+PTQwOTYmJihfci5xcHJvPSEwKTticmVhaztjYXNlIDY6aWE9Qmk7YnJlYWs7Y2FzZSAxNTpjYXNlIDUxOl9yLnFwcm98fChCaVsxXS52''@;'; put 'put ''PUJpWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OjE0PT1QbiYmISgxMTImfkJpWzJdKSYmKDE1JkJpWzJdKT4xJiYoMTUmQmlbMl0pPDE1JiYoQmlbMV0uej1fci5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxfci5jZWxsRGF0ZXMmJihCaVsxXS50PSJkIixCaVsxXS52PXVu''@;'; put 'put ''KEJpWzFdLnYpKSk7dmFyIFdvPV9yLmRlbnNlPyhGbltCaVswXS5yXXx8W10pW0JpWzBdLmNdOkZuW3FpKEJpWzBdKV07aWYoV28pe1dvLnQ9QmlbMV0udCxXby52PUJpWzFdLnYsbnVsbCE9QmlbMV0ueiYmKFdvLno9QmlbMV0ueiksbnVsbCE9QmlbMV0uZiYmKFdvLmY9QmlbMV0uZik7YnJl''@;'; put 'put ''YWt9X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHwoRm5bQmlbMF0ucl09W10pLEZuW0JpWzBdLnJdW0JpWzBdLmNdPUJpWzFdKTpGbltxaShCaVswXSldPUJpWzFdfX0sX3IpO2Vsc2V7aWYoMjYhPVZuWzJdJiYxNCE9Vm5bMl0pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9G''@;'; put 'put ''ICIrVm5bMl0pO19yLkVudW09a3IsMTQ9PVZuWzJdJiYoX3IucXBybz0hMCxWbi5sPTApLFMoVm4sZnVuY3Rpb24oQmksSXMsUG4pe3N3aXRjaChQbil7Y2FzZSAyMjpCaVsxXS52PUJpWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2Ug''@;'; put 'put ''NDA6aWYoQmlbM10+WmkmJihGblsiIXJlZiJdPXJhKGlhKSx5aVtqcl09Rm4sRm49X3IuZGVuc2U/W106e30saWE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxfYS5wdXNoKGpyPSJTaGVldCIrKChaaT1CaVszXSkrMSkpKSxMbz4wJiZCaVswXS5yPj1MbylicmVhaztfci5kZW5zZT8oRm5b''@;'; put 'put ''QmlbMF0ucl18fChGbltCaVswXS5yXT1bXSksRm5bQmlbMF0ucl1bQmlbMF0uY109QmlbMV0pOkZuW3FpKEJpWzBdKV09QmlbMV0saWEuZS5jPEJpWzBdLmMmJihpYS5lLmM9QmlbMF0uYyksaWEuZS5yPEJpWzBdLnImJihpYS5lLnI9QmlbMF0ucik7YnJlYWs7Y2FzZSAyNzpCaVsxNGUzXSYm''@;'; put 'put ''KHNvW0JpWzE0ZTNdWzBdXT1CaVsxNGUzXVsxXSl9fSxfcil9aWYoRm5bIiFyZWYiXT1yYShpYSkseWlbanJdPUZuLCFzby5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6X2EsU2hlZXRzOnlpfTtmb3IodmFyIE9hPXt9LGhvPVtdLEphPTA7SmE8c28ubGVuZ3RoOysrSmEpeWlbX2FbSmFdXSYm''@;'; put 'put ''KGhvLnB1c2goc29bSmFdKSxPYVtzb1tKYV1dPXlpW19hW0phXV0pO3JldHVybntTaGVldE5hbWVzOmhvLFNoZWV0czpPYX19ZnVuY3Rpb24gUGUoVm4sQnIsX3Ipe3ZhciBGbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBfci5xcHJvJiYyMDc2OCE9X3IudmVycz8oRm5bMF0u''@;'; put 'put ''Yz1Wbi5yZWFkX3NoaWZ0KDEpLFZuLmwrKyxGblswXS5yPVZuLnJlYWRfc2hpZnQoMiksVm4ubCs9Mik6KEZuWzJdPVZuLnJlYWRfc2hpZnQoMSksRm5bMF0uYz1Wbi5yZWFkX3NoaWZ0KDIpLEZuWzBdLnI9Vm4ucmVhZF9zaGlmdCgyKSksRm59ZnVuY3Rpb24gTmUoVm4sQnIsX3Ipe3ZhciBG''@;'; put 'put ''bj1Wbi5sK0JyLGpyPVBlKFZuLDAsX3IpO2lmKGpyWzFdLnQ9InMiLDIwNzY4PT1fci52ZXJzKXtWbi5sKys7dmFyIFppPVZuLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGpyWzFdLnY9Vm4ucmVhZF9zaGlmdChaaSwidXRmOCIpLGpyfXJldHVybiBfci5xcHJvJiZWbi5sKyssanJbMV0udj1Wbi5y''@;'; put 'put ''ZWFkX3NoaWZ0KEZuLVZuLmwsImNzdHIiKSxqcn1mdW5jdGlvbiBZZShWbixCcixfcil7dmFyIEZuPWJuKDcrX3IubGVuZ3RoKTtGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVfc2hpZnQoMixWbiksRm4ud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZh''@;'; put 'put ''ciBqcj0wO2pyPEZuLmxlbmd0aDsrK2pyKXt2YXIgWmk9X3IuY2hhckNvZGVBdChqcik7Rm4ud3JpdGVfc2hpZnQoMSxaaT49MTI4Pzk1OlppKX1yZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwwKSxGbn1mdW5jdGlvbiBjdChWbixCcixfcil7dmFyIEZuPWJuKDcpO3JldHVybiBGbi53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVfc2hpZnQoMixWbiksRm4ud3JpdGVfc2hpZnQoMixfciwiaSIpLEZufWZ1bmN0aW9uIGF0KFZuLEJyLF9yKXt2YXIgRm49Ym4oMTMpO3JldHVybiBGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixC''@;'; put 'put ''ciksRm4ud3JpdGVfc2hpZnQoMixWbiksRm4ud3JpdGVfc2hpZnQoOCxfciwiZiIpLEZufWZ1bmN0aW9uIGp0KFZuLEJyLF9yKXt2YXIgRm49MzI3NjgmQnI7cmV0dXJuIEJyPShGbj9WbjowKSsoKEJyJj0tMzI3NjkpPj04MTkyP0JyLTE2Mzg0OkJyKSwoRm4/IiI6IiQiKSsoX3I/VGEoQnIp''@;'; put 'put ''OmppKEJyKSl9dmFyIE90PXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxLdD1bIiIsIiIsIiIs''@;'; put 'put ''IiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8iLCJeIiwiPSIsIjw+IiwiPD0iLCI+PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIHJyKFZuKXt2YXIgQnI9W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gQnJbMF0u''@;'; put 'put ''cj1Wbi5yZWFkX3NoaWZ0KDIpLEJyWzNdPVZuW1ZuLmwrK10sQnJbMF0uYz1WbltWbi5sKytdLEJyfWZ1bmN0aW9uIGxyKFZuLEJyLF9yLEZuKXt2YXIganI9Ym4oNitGbi5sZW5ndGgpO2pyLndyaXRlX3NoaWZ0KDIsVm4pLGpyLndyaXRlX3NoaWZ0KDEsX3IpLGpyLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''QnIpLGpyLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgWmk9MDtaaTxGbi5sZW5ndGg7KytaaSl7dmFyIHlpPUZuLmNoYXJDb2RlQXQoWmkpO2pyLndyaXRlX3NoaWZ0KDEseWk+PTEyOD85NTp5aSl9cmV0dXJuIGpyLndyaXRlX3NoaWZ0KDEsMCksanJ9ZnVuY3Rpb24gQm4oVm4sQnIpe3Zh''@;'; put 'put ''ciBfcj1ycihWbiksRm49Vm4ucmVhZF9zaGlmdCg0KSxqcj1Wbi5yZWFkX3NoaWZ0KDQpLFppPVZuLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PVppKXJldHVybiAwPT09Rm4mJjMyMjEyMjU0NzI9PT1qcj8oX3JbMV0udD0iZSIsX3JbMV0udj0xNSk6MD09PUZuJiYzNDg5NjYwOTI4PT09anI/''@;'; put 'put ''KF9yWzFdLnQ9ImUiLF9yWzFdLnY9NDIpOl9yWzFdLnY9MCxfcjt2YXIgeWk9MzI3NjgmWmk7cmV0dXJuIFppPSgzMjc2NyZaaSktMTY0NDYsX3JbMV0udj0oMS0yKnlpKSooanIqTWF0aC5wb3coMixaaSszMikrRm4qTWF0aC5wb3coMixaaSkpLF9yfWZ1bmN0aW9uIGZyKFZuLEJyLF9yLEZu''@;'; put 'put ''KXt2YXIganI9Ym4oMTQpO2lmKGpyLndyaXRlX3NoaWZ0KDIsVm4pLGpyLndyaXRlX3NoaWZ0KDEsX3IpLGpyLndyaXRlX3NoaWZ0KDEsQnIpLDA9PUZuKXJldHVybiBqci53cml0ZV9zaGlmdCg0LDApLGpyLndyaXRlX3NoaWZ0KDQsMCksanIud3JpdGVfc2hpZnQoMiw2NTUzNSksanI7dmFy''@;'; put 'put ''IFppPTAseWk9MCxzbz0wO3JldHVybiBGbjwwJiYoWmk9MSxGbj0tRm4pLHlpPTB8TWF0aC5sb2cyKEZuKSwyMTQ3NDgzNjQ4Jihzbz0oRm4vPU1hdGgucG93KDIseWktMzEpKT4+PjApfHwoKyt5aSxzbz0oRm4vPTIpPj4+MCksRm4tPXNvLHNvfD0yMTQ3NDgzNjQ4LHNvPj4+PTAsRm4qPU1h''@;'; put 'put ''dGgucG93KDIsMzIpLGpyLndyaXRlX3NoaWZ0KDQsRm4+Pj4wKSxqci53cml0ZV9zaGlmdCg0LHNvKSxqci53cml0ZV9zaGlmdCgyLHlpKz0xNjM4MysoWmk/MzI3Njg6MCkpLGpyfWZ1bmN0aW9uIE1pKFZuLEJyKXt2YXIgX3I9cnIoVm4pLEZuPVZuLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVy''@;'; put 'put ''biBfclsxXS52PUZuLF9yfWZ1bmN0aW9uIGNhKFZuLEJyKXt2YXIgX3I9Ym4oNStWbi5sZW5ndGgpO19yLndyaXRlX3NoaWZ0KDIsMTRlMyksX3Iud3JpdGVfc2hpZnQoMixCcik7Zm9yKHZhciBGbj0wO0ZuPFZuLmxlbmd0aDsrK0ZuKXt2YXIganI9Vm4uY2hhckNvZGVBdChGbik7X3JbX3Iu''@;'; put 'put ''bCsrXT1qcj4xMjc/OTU6anJ9cmV0dXJuIF9yW19yLmwrK109MCxfcn12YXIgTGk9ezA6e246IkJPRiIsZjpFY30sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBw''@;'; put 'put ''ZShWbil7dmFyIEJyPXtzOntjOjAscjowfSxlOntjOjAscjowfX07cmV0dXJuIEJyLnMuYz1Wbi5yZWFkX3NoaWZ0KDIpLEJyLnMucj1Wbi5yZWFkX3NoaWZ0KDIpLEJyLmUuYz1Wbi5yZWFkX3NoaWZ0KDIpLEJyLmUucj1Wbi5yZWFkX3NoaWZ0KDIpLDY1NTM1PT1Cci5zLmMmJihCci5zLmM9''@;'; put 'put ''QnIuZS5jPUJyLnMucj1Cci5lLnI9MCksQnJ9fSw3OntuOiJXSU5ET1cxIn0sODp7bjoiQ09MVzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRFR0VSIixmOmZ1bmN0aW9uIGV0KFZuLEJyLF9yKXt2YXIgRm49''@;'; put 'put ''UGUoVm4sMCxfcik7cmV0dXJuIEZuWzFdLnY9Vm4ucmVhZF9zaGlmdCgyLCJpIiksRm59fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIEV0KFZuLEJyLF9yKXt2YXIgRm49UGUoVm4sMCxfcik7cmV0dXJuIEZuWzFdLnY9Vm4ucmVhZF9zaGlmdCg4LCJmIiksRm59fSwxNTp7bjoiTEFCRUwi''@;'; put 'put ''LGY6TmV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIGJ0KFZuLEJyLF9yKXt2YXIgRm49Vm4ubCtCcixqcj1QZShWbiwwLF9yKTtpZihqclsxXS52PVZuLnJlYWRfc2hpZnQoOCwiZiIpLF9yLnFwcm8pVm4ubD1GbjtlbHNle3ZhciBaaT1Wbi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBU''@;'; put 'put ''bihWbixCcil7bW4oVm4sMCk7Zm9yKHZhciBfcj1bXSxGbj0wLGpyPSIiLFppPSIiO1ZuLmw8Vm4ubGVuZ3RoOyl7dmFyIHlpPVZuW1ZuLmwrK107c3dpdGNoKHlpKXtjYXNlIDA6X3IucHVzaChWbi5yZWFkX3NoaWZ0KDgsImYiKSk7YnJlYWs7Y2FzZSAxOlppPWp0KEJyWzBdLmMsVm4ucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSwhMCksanI9anQoQnJbMF0ucixWbi5yZWFkX3NoaWZ0KDIpLCExKSxfci5wdXNoKFppK2pyKTticmVhaztjYXNlIDI6dmFyIF9hPWp0KEJyWzBdLmMsVm4ucmVhZF9zaGlmdCgyKSwhMCksc289anQoQnJbMF0ucixWbi5yZWFkX3NoaWZ0KDIpLCExKTtaaT1qdChCclswXS5j''@;'; put 'put ''LFZuLnJlYWRfc2hpZnQoMiksITApLGpyPWp0KEJyWzBdLnIsVm4ucmVhZF9zaGlmdCgyKSwhMSksX3IucHVzaChfYStzbysiOiIrWmkranIpO2JyZWFrO2Nhc2UgMzppZihWbi5sPFZuLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5k''@;'; put 'put ''Iik7YnJlYWs7Y2FzZSA0Ol9yLnB1c2goIigiK19yLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSA1Ol9yLnB1c2goVm4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgaWE9IiI7eWk9Vm5bVm4ubCsrXTspaWErPVN0cmluZy5mcm9tQ2hhckNvZGUoeWkpO19yLnB1c2goJyInK2lh''@;'; put 'put ''LnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UgODpfci5wdXNoKCItIitfci5wb3AoKSk7YnJlYWs7Y2FzZSAyMzpfci5wdXNoKCIrIitfci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpfci5wdXNoKCJOT1QoIitfci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIg''@;'; put 'put ''TG89X3IucG9wKCksT2E9X3IucG9wKCk7X3IucHVzaChbIkFORCIsIk9SIl1beWktMjBdKyIoIitPYSsiLCIrTG8rIikiKTticmVhaztkZWZhdWx0OmlmKHlpPDMyJiZLdFt5aV0pTG89X3IucG9wKCksT2E9X3IucG9wKCksX3IucHVzaChPYStLdFt5aV0rTG8pO2Vsc2V7aWYoIU90W3lpXSly''@;'; put 'put ''ZXR1cm4geWk8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2Rl''@;'; put 'put ''ICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MTE1P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBmdW5jdGlvbiBvcGNvZGUgIit5aS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTtpZig2OT09KEZuPU90''@;'; put 'put ''W3lpXVsxXSkmJihGbj1WbltWbi5sKytdKSxGbj5fci5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4Iit5aS50b1N0cmluZygxNikrIjp8Iitfci5qb2luKCJ8IikrInwiKTt2YXIgaG89X3Iuc2xpY2UoLUZuKTtfci5sZW5ndGgtPUZu''@;'; put 'put ''LF9yLnB1c2goT3RbeWldWzBdKyIoIitoby5qb2luKCIsIikrIikiKX19fTE9PV9yLmxlbmd0aD9CclsxXS5mPSIiK19yWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iitfci5qb2luKCJ8IikrInwiKX0pKFZuLnNsaWNlKFZuLmwsVm4ubCtaaSksanIpLFZuLmwr''@;'; put 'put ''PVppfXJldHVybiBqcn19LDI0OntuOiJUQUJMRSJ9LDI1OntuOiJPUkFOR0UifSwyNjp7bjoiUFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwzNTp7bjoiS1JBTkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7''@;'; put 'put ''bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5OntuOiJTRVRVUCJ9LDQwOntuOiJNQVJHSU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6e246Ik5HUkFQSCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7''@;'; put 'put ''bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09SVzEyIn0sNTA6e246IldJTkRPVyJ9LDUxOntuOiJTVFJJTkciLGY6TmV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBS''@;'; put 'put ''SU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1FIn0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFD''@;'; put 'put ''Uk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LGtyPXswOntuOiJCT0YifSwxOntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNB''@;'; put 'put ''TENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQVFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9''@;'; put 'put ''LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNF''@;'; put 'put ''TEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVuY3Rpb24gU24oVm4sQnIpe3ZhciBfcj1ycihWbik7cmV0dXJuIF9yWzFdLnQ9InMiLF9yWzFdLnY9Vm4ucmVhZF9zaGlmdChCci00LCJjc3RyIiksX3J9fSwyMzp7bjoiTlVNQkVSMTciLGY6Qm59LDI0OntuOiJOVU1C''@;'; put 'put ''RVIxOCIsZjpmdW5jdGlvbiBYbihWbixCcil7dmFyIF9yPXJyKFZuKTtfclsxXS52PVZuLnJlYWRfc2hpZnQoMik7dmFyIEZuPV9yWzFdLnY+PjE7aWYoMSZfclsxXS52KXN3aXRjaCg3JkZuKXtjYXNlIDA6Rm49NWUzKihGbj4+Myk7YnJlYWs7Y2FzZSAxOkZuPTUwMCooRm4+PjMpO2JyZWFr''@;'; put 'put ''O2Nhc2UgMjpGbj0oRm4+PjMpLzIwO2JyZWFrO2Nhc2UgMzpGbj0oRm4+PjMpLzIwMDticmVhaztjYXNlIDQ6Rm49KEZuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkZuPShGbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpGbj0oRm4+PjMpLzE2O2JyZWFrO2Nhc2UgNzpGbj0oRm4+PjMpLzY0fXJldHVy''@;'; put 'put ''biBfclsxXS52PUZuLF9yfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBicihWbixCcil7dmFyIF9yPUJuKFZuKTtyZXR1cm4gVm4ubCs9QnItMTQsX3J9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQiLGY6ZnVuY3Rpb24gbmEoVm4sQnIpe2Zvcih2YXIgX3I9e30s''@;'; put 'put ''Rm49Vm4ubCtCcjtWbi5sPEZuOyl7dmFyIGpyPVZuLnJlYWRfc2hpZnQoMik7aWYoMTRlMz09anIpe2Zvcihfcltqcl09WzAsIiJdLF9yW2pyXVswXT1Wbi5yZWFkX3NoaWZ0KDIpO1ZuW1ZuLmxdOylfcltqcl1bMV0rPVN0cmluZy5mcm9tQ2hhckNvZGUoVm5bVm4ubF0pLFZuLmwrKztWbi5s''@;'; put 'put ''Kyt9fXJldHVybiBfcn19LDI4OntuOiJEVExBQkVMTUlTQyJ9LDI5OntuOiJEVExBQkVMQ0VMTCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0OntuOiJISURERU5TSEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJO''@;'; put 'put ''VU1CRVIyNSIsZjpmdW5jdGlvbiBlcihWbixCcil7dmFyIF9yPXJyKFZuKSxGbj1Wbi5yZWFkX3NoaWZ0KDQpO3JldHVybiBfclsxXS52PUZuPj42LF9yfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOk1pfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIEZpKFZuLEJyKXt2''@;'; put 'put ''YXIgX3I9TWkoVm4pO3JldHVybiBWbi5sKz1Cci0xMCxfcn19LDE0Mjp7bjoiPz8ifSwxNDc6e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwxNTU6e246Ij8/In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8i''@;'; put 'put ''fSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3Njp7bjoiPz8ifSwxNzc6e246Ij8/In0sMTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/In0sMjAxOntuOiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246''@;'; put 'put ''Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8ifSwyNTY6e246Ij8/In0sMjU5OntuOiI/PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2OntuOiI/PyJ9LDI2Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcw''@;'; put 'put ''OntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246Ij8/In0sMzg5OntuOiI/PyJ9LDM5MDp7bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUxNjp7bjoiPz8ifSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9''@;'; put 'put ''LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQzOntuOiI/PyJ9LDY0NDp7bjoiPz8ifSw2NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8ifSw2NjA6e246Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoi''@;'; put 'put ''Pz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9LDc2ODp7bjoiPz8ifSw3NzI6e246Ij8/In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3OTY6e246Ij8/In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/''@;'; put 'put ''PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8ifSwyNjg4OntuOiI/PyJ9LDEwOTk4OntuOiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3NoZWV0X3RvX3drMTpmdW5jdGlvbiBHKFZuLEJyKXt2YXIgX3I9''@;'; put 'put ''QnJ8fHt9O2lmKCtfci5jb2RlcGFnZT49MCYmVSgrX3IuY29kZXBhZ2UpLCJzdHJpbmciPT1fci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgRm49YmkoKSxqcj1vbyhWblsiIXJlZiJdKSxaaT1BcnJheS5pc0FycmF5KFZuKSx5aT1b''@;'; put 'put ''XTtHaShGbiwwLGZ1bmN0aW9uIG9lKFZuKXt2YXIgQnI9Ym4oMik7cmV0dXJuIEJyLndyaXRlX3NoaWZ0KDIsVm4pLEJyfSgxMDMwKSksR2koRm4sNixmdW5jdGlvbiB5ZShWbil7dmFyIEJyPWJuKDgpO3JldHVybiBCci53cml0ZV9zaGlmdCgyLFZuLnMuYyksQnIud3JpdGVfc2hpZnQoMixW''@;'; put 'put ''bi5zLnIpLEJyLndyaXRlX3NoaWZ0KDIsVm4uZS5jKSxCci53cml0ZV9zaGlmdCgyLFZuLmUuciksQnJ9KGpyKSk7Zm9yKHZhciBfYT1qci5zLnI7X2E8PWpyLmUucjsrK19hKWZvcih2YXIgc289amkoX2EpLGlhPWpyLnMuYztpYTw9anIuZS5jOysraWEpe19hPT09anIucy5yJiYoeWlbaWFd''@;'; put 'put ''PVRhKGlhKSk7dmFyIE9hPVppPyhWbltfYV18fFtdKVtpYV06Vm5beWlbaWFdK3NvXTtPYSYmInoiIT1PYS50JiYoIm4iPT1PYS50PygwfE9hLnYpPT1PYS52JiZPYS52Pj0tMzI3NjgmJk9hLnY8PTMyNzY3P0dpKEZuLDEzLGN0KF9hLGlhLE9hLnYpKTpHaShGbiwxNCxhdChfYSxpYSxPYS52''@;'; put 'put ''KSk6R2koRm4sMTUsWWUoX2EsaWEsX2woT2EpLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gR2koRm4sMSksRm4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIFEoVm4sQnIpe3ZhciBfcj1Ccnx8e307aWYoK19yLmNvZGVwYWdlPj0wJiZVKCtfci5jb2RlcGFnZSksInN0cmluZyI9PV9yLnR5''@;'; put 'put ''cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBGbj1iaSgpO0dpKEZuLDAsZnVuY3Rpb24gZ2UoVm4pe3ZhciBCcj1ibigyNik7QnIud3JpdGVfc2hpZnQoMiw0MDk2KSxCci53cml0ZV9zaGlmdCgyLDQpLEJyLndyaXRlX3NoaWZ0KDQsMCk7''@;'; put 'put ''Zm9yKHZhciBfcj0wLEZuPTAsanI9MCxaaT0wO1ppPFZuLlNoZWV0TmFtZXMubGVuZ3RoOysrWmkpe3ZhciBfYT1Wbi5TaGVldHNbVm4uU2hlZXROYW1lc1taaV1dO2lmKF9hJiZfYVsiIXJlZiJdKXsrK2pyO3ZhciBzbz1NcyhfYVsiIXJlZiJdKTtfcjxzby5lLnImJihfcj1zby5lLnIpLEZu''@;'; put 'put ''PHNvLmUuYyYmKEZuPXNvLmUuYyl9fXJldHVybiBCci53cml0ZV9zaGlmdCgyLF9yKSxCci53cml0ZV9zaGlmdCgxLGpyKSxCci53cml0ZV9zaGlmdCgxLEZuKSxCci53cml0ZV9zaGlmdCgyLDApLEJyLndyaXRlX3NoaWZ0KDIsMCksQnIud3JpdGVfc2hpZnQoMSwxKSxCci53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDIpLEJyLndyaXRlX3NoaWZ0KDQsMCksQnIud3JpdGVfc2hpZnQoNCwwKSxCcn0oVm4pKTtmb3IodmFyIGpyPTAsWmk9MDtqcjxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK2pyKShWbi5TaGVldHNbVm4uU2hlZXROYW1lc1tqcl1dfHx7fSlbIiFyZWYiXSYmR2koRm4sMjcsY2EoVm4uU2hl''@;'; put 'put ''ZXROYW1lc1tqcl0sWmkrKykpO3ZhciB5aT0wO2Zvcihqcj0wO2pyPFZuLlNoZWV0TmFtZXMubGVuZ3RoOysranIpe3ZhciBfYT1Wbi5TaGVldHNbVm4uU2hlZXROYW1lc1tqcl1dO2lmKF9hJiZfYVsiIXJlZiJdKXtmb3IodmFyIHNvPW9vKF9hWyIhcmVmIl0pLGlhPUFycmF5LmlzQXJyYXko''@;'; put 'put ''X2EpLExvPVtdLE9hPXNvLnMucjtPYTw9c28uZS5yOysrT2EpZm9yKHZhciBobz1qaShPYSksSmE9c28ucy5jO0phPD1zby5lLmM7KytKYSl7T2E9PT1zby5zLnImJihMb1tKYV09VGEoSmEpKTt2YXIgSXM9aWE/KF9hW09hXXx8W10pW0phXTpfYVtMb1tKYV0raG9dO0lzJiYieiIhPUlzLnQm''@;'; put 'put ''JigibiI9PUlzLnQ/R2koRm4sMjMsZnIoT2EsSmEseWksSXMudikpOkdpKEZuLDIyLGxyKE9hLEphLHlpLF9sKElzKS5zbGljZSgwLDIzOSkpKSl9Kyt5aX19cmV0dXJuIEdpKEZuLDEpLEZuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBSKFZuLEJyKXtzd2l0Y2goQnIudHlwZSl7Y2Fz''@;'; put 'put ''ZSJiYXNlNjQiOnJldHVybiBrKGIoX2UuZGVjb2RlKFZuKSksQnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gayhiKFZuKSxCcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBrKFZuLEJyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrQnIudHlwZX19fSgpLHc1PWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFM9RDAoInQiKSxSPUQwKCJyUHIiKTtmdW5jdGlvbiBrKG9lKXt2YXIgZ2U9b2UubWF0Y2goUyk7aWYoIWdlKXJldHVybnt0OiJzIix2OiIifTt2YXIgcGU9e3Q6InMiLHY6UXIoZ2VbMV0pfSx5ZT1vZS5tYXRjaChSKTtyZXR1cm4geWUmJihwZS5zPWZ1bmN0aW9uIG9rKFMpe3ZhciBS''@;'; put 'put ''PXt9LGs9Uy5tYXRjaChlbiksRz0wLFE9ITE7aWYoaylmb3IoO0chPWsubGVuZ3RoOysrRyl7dmFyIG9lPXZyKGtbR10pO3N3aXRjaChvZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFvZS52YWwp''@;'; put 'put ''YnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOlIuc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09b2UudmFsKWJyZWFrO1IuY3A9TltwYXJzZUludChvZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZigh''@;'; put 'put ''b2UudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5lLz4iOlIub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOlIubmFtZT1vZS52YWw7YnJlYWs7Y2FzZSI8c3oiOlIuc3o9b2UudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYo''@;'; put 'put ''IW9lLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2UvPiI6Ui5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIW9lLnZhbClicmVhaztzd2l0Y2gob2UudmFsKXtjYXNlImRvdWJsZSI6Ui51bmRlcmxpbmU9MjticmVhaztjYXNlInNp''@;'; put 'put ''bmdsZUFjY291bnRpbmciOlIudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6Ui51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6Ui51bmRlcmxpbmV8fChSLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09''@;'; put 'put ''b2UudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOlIuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1vZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6Ui5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpv''@;'; put 'put ''ZS5yZ2ImJihSLmNvbG9yPXtyZ2I6OD09b2UucmdiLmxlbmd0aD9vZS5yZ2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrb2UucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOlIuZmFtaWx5PW9lLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KG9lLnZhbHx8Im5v''@;'; put 'put ''bmUiKSYmKFIudmFsaWduPW9lLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDppZig0NyE9PW9lWzBdLmNoYXJDb2RlQXQoMSkmJiFRKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrb2VbMF0pfX1yZXR1cm4gUn0oeWVbMV0pKSxwZX12YXIgRz0vPCg/Olx3KzopP3I+L2csUT0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihnZSl7cmV0dXJuIGdlLnJlcGxhY2UoRywiIikuc3BsaXQoUSkubWFwKGspLmZpbHRlcihmdW5jdGlvbihwZSl7cmV0dXJuIHBlLnZ9KX19KCksd1Y9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LFZ1PWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFI9LyhcclxufFxuKS9nO2Z1bmN0aW9uIEcoUSl7dmFyIG9lPVtbXSxRLnYsW11dO3JldHVybiBRLnY/KFEucyYmZnVuY3Rpb24gayhRLG9lLGdlKXt2YXIgcGU9W107US51bmRlcmxpbmUmJnBlLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLFEudW5kZXJs''@;'; put 'put ''aW5lPjEmJnBlLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrd1ZbUS51bmRlcmxpbmVdKyI7IiksUS5zeiYmcGUucHVzaCgiZm9udC1zaXplOiIrUS5zeisicHQ7IiksUS5vdXRsaW5lJiZwZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxRLnNoYWRvdyYmcGUucHVzaCgidGV4''@;'; put 'put ''dC1zaGFkb3c6IGF1dG87IiksUS5jb2xvciYmUS5jb2xvci5yZ2ImJnBlLnB1c2goImNvbG9yOiAjIitQMChRLmNvbG9yLnJnYikrIjsiKSxvZS5wdXNoKCc8c3BhbiBzdHlsZT0iJytwZS5qb2luKCIiKSsnIj4nKSxRLmJvbGQmJihvZS5wdXNoKCI8Yj4iKSxnZS5wdXNoKCI8L2I+IikpLFEu''@;'; put 'put ''aXRhbGljJiYob2UucHVzaCgiPGk+IiksZ2UucHVzaCgiPC9pPiIpKSxRLnN0cmlrZSYmKG9lLnB1c2goIjxzPiIpLGdlLnB1c2goIjwvcz4iKSk7dmFyIHllPVEudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT15ZXx8InN1cGVyIj09eWU/eWU9InN1cCI6InN1YnNjcmlwdCI9PXllJiYoeWU9''@;'; put 'put ''InN1YiIpLCIiIT15ZSYmKG9lLnB1c2goIjwiK3llKyI+IiksZ2UucHVzaCgiPC8iK3llKyI+IikpLGdlLnB1c2goIjwvc3Bhbj4iKX0oUS5zLG9lWzBdLG9lWzJdKSxvZVswXS5qb2luKCIiKStvZVsxXS5yZXBsYWNlKFIsIjxici8+Iikrb2VbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5j''@;'; put 'put ''dGlvbihvZSl7cmV0dXJuIG9lLm1hcChHKS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gUXMoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbiBBNChTKXt2YXIgUj0iIixrPVtdO3JldHVybiBTLnMmJihTLnMuYm9sZCYmay5wdXNoKCI8Yi8+IiksUy5zLml0YWxpYyYm''@;'; put 'put ''ay5wdXNoKCI8aS8+IiksUy5zLnN0cmlrZSYmay5wdXNoKCI8c3RyaWtlLz4iKSxTLnMudW5kZXJsaW5lJiZrLnB1c2goJzx1IHZhbD0iJysoQTVbUy5zLnVuZGVybGluZV18fCJzaW5nbGUiKSsnIi8+JyksUy5zLmNvbG9yJiZrLnB1c2goZ2QoUy5zLmNvbG9yKSksUy5zLnN6JiZrLnB1c2go''@;'; put 'put ''JzxzeiB2YWw9IicrUy5zLnN6KyciLz4nKSxTLnMubmFtZSYmay5wdXNoKCc8ckZvbnQgdmFsPSInK1Mucy5uYW1lKyciLz4nKSwoInN1cGVyIj09Uy5zLnZhbGlnbnx8InN1YiI9PVMucy52YWxpZ24pJiZrLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK1Mucy52YWxpZ24rJ3NjcmlwdCIvPicp''@;'; put 'put ''KSxrLmxlbmd0aCYmKFIrPSI8clByPiIray5qb2luKCIiKSsiPC9yUHI+IiksIjxyPiIrKFIrPVByKCJ0IixMcihTLnYpLG51bGwpKSsiPC9yPiJ9KGspfSkuam9pbigiIil9dmFyIENWPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFNWPS88KD86XHcrOik/clxi''@;'; put 'put ''W14+XSo+LyxNVj0vPCg/Olx3KzopP3JQaC4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIHVDKFMsUil7dmFyIGs9IVJ8fFIuY2VsbEhUTUwsRz17fTtyZXR1cm4gUz8oUy5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KEcudD1RcihnbyhTLnNsaWNlKFMu''@;'; put 'put ''aW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8oPzpcdys6KT90Pi8pWzBdfHwiIikpLEcucj1nbyhTKSxrJiYoRy5oPWxhKEcudCkpKTpTLm1hdGNoKFNWKSYmKEcucj1nbyhTKSxHLnQ9UXIoZ28oKFMucmVwbGFjZShNViwiIikubWF0Y2goQ1YpfHxbXSkuam9pbigiIikucmVwbGFjZShlbiwi''@;'; put 'put ''IikpKSxHLlI9dzUoRy5yKSxrJiYoRy5oPVZ1KEcuUikpKSxHKTp7dDoiIn19dmFyIHNrPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyxsaz0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLHE2PS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4v''@;'; put 'put ''O0thLlNTVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIjt2YXIgeFY9L15cc3xccyR8W1x0XG5ccl0vO2Z1bmN0aW9uIFJ2KFMsUil7aWYoIVIuYm9va1NTVClyZXR1cm4iIjt2YXIgaz1b''@;'; put 'put ''SWldO2tbay5sZW5ndGhdPVByKCJzc3QiLG51bGwse3htbG5zOllpLm1haW5bMF0sY291bnQ6Uy5Db3VudCx1bmlxdWVDb3VudDpTLlVuaXF1ZX0pO2Zvcih2YXIgRz0wO0chPVMubGVuZ3RoOysrRylpZihudWxsIT1TW0ddKXt2YXIgUT1TW0ddLG9lPSI8c2k+IjtRLnI/b2UrPVEucjoob2Ur''@;'; put 'put ''PSI8dCIsUS50fHwoUS50PSIiKSxRLnQubWF0Y2goeFYpJiYob2UrPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxvZSs9Ij4iK0xyKFEudCkrIjwvdD4iKSxrW2subGVuZ3RoXT1vZSs9Ijwvc2k+In1yZXR1cm4gay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3NzdD4iLGtbMV09a1sxXS5y''@;'; put 'put ''ZXBsYWNlKCIvPiIsIj4iKSksay5qb2luKCIiKX12YXIgY2s9ZnVuY3Rpb24gSTMoUyxSLGspe3ZhciBHPTEzKzQqUy50Lmxlbmd0aCxRPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj13NShTLnIpKSxRJiYoRys9NCs0KlMuUi5sZW5ndGgpO3ZhciBvZT0hMTtpZihudWxsPT1rJiYo''@;'; put 'put ''b2U9ITAsaz1ibihHKSksay53cml0ZV9zaGlmdCgxLFE/MTowKSxGYyhTLnQsayksUSl7ay53cml0ZV9zaGlmdCg0LFMuUi5sZW5ndGgpO2Zvcih2YXIgZ2U9MCxwZT0wO3BlPFMuUi5sZW5ndGg7KytwZSl7dmFyIHllPVMuUltwZV07ay53cml0ZV9zaGlmdCgyLGdlKSxnZSs9KHllLnZ8fCIi''@;'; put 'put ''KS5sZW5ndGg7dmFyIFBlPXllLnM/bDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczp5ZS5zfSxSKTowO2sud3JpdGVfc2hpZnQoMixSLmNlbGxYZnNbUGVdLmZvbnRJZCl9fXJldHVybiBvZT9rLnNsaWNlKDAsay5sKTprfTtmdW5jdGlvbiB1ayhTLFIpe3ZhciBrPWJp''@;'; put 'put ''KCk7RnIoaywiQnJ0QmVnaW5Tc3QiLGZ1bmN0aW9uIGRDKFMsUil7cmV0dXJuIFJ8fChSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KDQsUy5Db3VudCksUi53cml0ZV9zaGlmdCg0LFMuVW5pcXVlKSxSfShTKSk7Zm9yKHZhciBHPTA7RzxTLmxlbmd0aDsrK0cpRnIoaywiQnJ0U1NUSXRlbSIsY2so''@;'; put 'put ''U1tHXSxSKSk7cmV0dXJuIEZyKGssIkJydEVuZFNzdCIpLGsuZW5kKCl9ZnVuY3Rpb24gazQoUyl7aWYodHlwZW9mIGNwdGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShGLFMpO2Zvcih2YXIgUj1bXSxrPVMuc3BsaXQoIiIpLEc9MDtHPGsubGVuZ3RoOysrRylSW0ddPWtb''@;'; put 'put ''R10uY2hhckNvZGVBdCgwKTtyZXR1cm4gUn1mdW5jdGlvbiBQMShTLFIpe3ZhciBrPXt9O3JldHVybiBrLk1ham9yPVMucmVhZF9zaGlmdCgyKSxrLk1pbm9yPVMucmVhZF9zaGlmdCgyKSxSPj00JiYoUy5sKz1SLTQpLGt9ZnVuY3Rpb24gaEMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0''@;'; put 'put ''KSxrPVMubCtSLTQsRz17fSxRPVMucmVhZF9zaGlmdCg0KSxvZT1bXTtRLS0gPjA7KW9lLnB1c2goe3Q6Uy5yZWFkX3NoaWZ0KDQpLHY6Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKEcubmFtZT1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLEcuY29tcHM9b2UsUy5sIT1rKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK1MubCsiICE9ICIrayk7cmV0dXJuIEd9ZnVuY3Rpb24gSVYoUyxSKXt2YXIgaz1TLmwrUixHPXt9O0cuRmxhZ3M9NjMmUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxHLkFsZ0lEPVMucmVhZF9zaGlmdCg0KTt2YXIgUT0hMTtzd2l0Y2goRy5B''@;'; put 'put ''bGdJRCl7Y2FzZSAyNjEyNjpjYXNlIDI2MTI3OmNhc2UgMjYxMjg6UT0zNj09Ry5GbGFnczticmVhaztjYXNlIDI2NjI1OlE9ND09KDUyJkcuRmxhZ3MpO2JyZWFrO2Nhc2UgMDpRPTE2PT1HLkZsYWdzfHw0PT1HLkZsYWdzfHwzNj09Ry5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVj''@;'; put 'put ''b2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIitHLkFsZ0lEfWlmKCFRKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBGbGFncy9BbGdJRCBtaXNtYXRjaCIpO3JldHVybiBHLkFsZ0lESGFzaD1TLnJlYWRfc2hpZnQoNCksRy5LZXlTaXplPVMucmVhZF9zaGlmdCg0KSxHLlByb3Zp''@;'; put 'put ''ZGVyVHlwZT1TLnJlYWRfc2hpZnQoNCksUy5sKz04LEcuQ1NQTmFtZT1TLnJlYWRfc2hpZnQoay1TLmw+PjEsInV0ZjE2bGUiKSxTLmw9ayxHfWZ1bmN0aW9uIFB2KFMsUil7dmFyIGs9e30sRz1TLmwrUjtyZXR1cm4gUy5sKz00LGsuU2FsdD1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYs''@;'; put 'put ''ay5WZXJpZmllcj1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLGsuVmVyaWZpZXJIYXNoPVMuc2xpY2UoUy5sLEcpLFMubD1HLGt9ZnVuY3Rpb24gUlYoUyl7aWYoMzYhPSg2MyZTLnJlYWRfc2hpZnQoNCkpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbklu''@;'; put 'put ''Zm8gbWlzbWF0Y2giKTt2YXIgaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJue3Q6IlN0ZCIsaDpJVihTLGspLHY6UHYoUyxTLmxlbmd0aC1TLmwpfX1mdW5jdGlvbiBKNigpe3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGUiKX1m''@;'; put 'put ''dW5jdGlvbiBmQyhTKXt2YXIgUj1bInNhbHRTaXplIiwiYmxvY2tTaXplIiwia2V5Qml0cyIsImhhc2hTaXplIiwiY2lwaGVyQWxnb3JpdGhtIiwiY2lwaGVyQ2hhaW5pbmciLCJoYXNoQWxnb3JpdGhtIiwic2FsdFZhbHVlIl07Uy5sKz00O3ZhciBrPVMucmVhZF9zaGlmdChTLmxlbmd0aC1T''@;'; put 'put ''LmwsInV0ZjgiKSxHPXt9O3JldHVybiBrLnJlcGxhY2UoZW4sZnVuY3Rpb24ob2Upe3ZhciBnZT12cihvZSk7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZW5jcnlwdGlvbiI6Y2FzZSI8L2VuY3J5cHRpb24+IjpjYXNlIjwva2V5RW5jcnlwdG9ycz4iOmNhc2UiPC9rZXlF''@;'; put 'put ''bmNyeXB0b3I+IjpicmVhaztjYXNlIjxrZXlEYXRhIjpSLmZvckVhY2goZnVuY3Rpb24ocGUpe0dbcGVdPWdlW3BlXX0pO2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOkcuZW5jcnlwdGVkSG1hY0tleT1nZS5lbmNyeXB0ZWRIbWFjS2V5LEcuZW5jcnlwdGVkSG1hY1ZhbHVlPWdlLmVuY3J5''@;'; put 'put ''cHRlZEhtYWNWYWx1ZTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3JzPiI6Y2FzZSI8a2V5RW5jcnlwdG9ycyI6Ry5lbmNzPVtdO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvciI6Ry51cmk9Z2UudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6Ry5lbmNzLnB1c2goZ2UpO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgZ2VbMF19fSksR31mdW5jdGlvbiBIdihTKXt2YXIgayxvZSxSPTAsRz1rNChTKSxRPUcubGVuZ3RoKzE7Zm9yKChrPVYoUSkpWzBdPUcubGVuZ3RoLG9lPTE7b2UhPVE7KytvZSlrW29lXT1HW29lLTFdO2ZvcihvZT1RLTE7b2U+PTA7LS1vZSlSPSgoMTYzODQmUj8xOjApfFI8''@;'; put 'put ''PDEmMzI3NjcpXmtbb2VdO3JldHVybiA1MjgxMV5SfXZhciBwQz1mdW5jdGlvbigpe3ZhciBTPVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLFI9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwzNjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2''@;'; put 'put ''NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLGs9WzQ0Nzk2LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkwNiw1ODEyLDExNjI0LDIzMjQ4LDg4NSwx''@;'; put 'put ''NzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwyMTUwMiw0MzAwNCwyNDUzNywxODM4Nywz''@;'; put 'put ''Njc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQsMjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUx''@;'; put 'put ''OTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2MjhdLFE9ZnVuY3Rpb24oZ2UscGUpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIDI1NSYoZ2U+PjF8Z2U8PDcpfShnZV5wZSl9O3JldHVybiBmdW5jdGlvbihwZSl7Zm9yKHZhciB5ZT1rNChwZSksUGU9ZnVuY3Rpb24oZ2Upe2Zvcih2YXIgcGU9UltnZS5sZW5ndGgtMV0seWU9MTA0LFBlPWdlLmxlbmd0aC0xO1BlPj0wOy0tUGUp''@;'; put 'put ''Zm9yKHZhciBOZT1nZVtQZV0sWWU9MDs3IT1ZZTsrK1llKTY0Jk5lJiYocGVePWtbeWVdKSxOZSo9MiwtLXllO3JldHVybiBwZX0oeWUpLE5lPXllLmxlbmd0aCxZZT1WKDE2KSxldD0wOzE2IT1ldDsrK2V0KVllW2V0XT0wO3ZhciBhdDtmb3IoISgxJn5OZSkmJihZZVtOZV09UShTWzBdLFBl''@;'; put 'put ''Pj44KSxZZVstLU5lXT1RKHllW3llLmxlbmd0aC0xXSwyNTUmUGUpKTtOZT4wOylZZVstLU5lXT1RKHllW05lXSxQZT4+OCksWWVbLS1OZV09USh5ZVtOZV0sMjU1JlBlKTtmb3IoTmU9MTUsYXQ9MTUteWUubGVuZ3RoO2F0PjA7KVllW05lXT1RKFNbYXRdLFBlPj44KSwtLWF0LFllWy0tTmVd''@;'; put 'put ''PVEoeWVbTmVdLDI1NSZQZSksLS1OZSwtLWF0O3JldHVybiBZZX19KCk7dmFyIFZ2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhRLG9lKXtzd2l0Y2gob2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBSKF9lLmRlY29kZShRKSxvZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBSKFEsb2UpO2Nhc2Ui''@;'; put 'put ''YnVmZmVyIjpyZXR1cm4gUihRLnRvU3RyaW5nKCJiaW5hcnkiKSxvZSk7Y2FzZSJhcnJheSI6cmV0dXJuIFIodXQoUSksb2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitvZS50eXBlKX1mdW5jdGlvbiBSKFEsb2Upe3ZhciBwZT0ob2V8fHt9KS5kZW5zZT9bXTp7fTtp''@;'; put 'put ''ZighUS5tYXRjaCgvXFx0cm93ZC8pKXRocm93IG5ldyBFcnJvcigiUlRGIG1pc3NpbmcgdGFibGUiKTtyZXR1cm4gcGVbIiFyZWYiXT1yYSh7czp7YzowLHI6MH0sZTp7YzowLHI6MH19KSxwZX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gayhRLG9lKXtyZXR1cm4gdGgoUyhRLG9lKSxv''@;'; put 'put ''ZSl9LHRvX3NoZWV0OlMsZnJvbV9zaGVldDpmdW5jdGlvbiBHKFEpe2Zvcih2YXIgcGUsb2U9WyJ7XFxydGYxXFxhbnNpIl0sZ2U9b28oUVsiIXJlZiJdKSx5ZT1BcnJheS5pc0FycmF5KFEpLFBlPWdlLnMucjtQZTw9Z2UuZS5yOysrUGUpe29lLnB1c2goIlxcdHJvd2RcXHRyYXV0b2ZpdDEi''@;'; put 'put ''KTtmb3IodmFyIE5lPWdlLnMuYztOZTw9Z2UuZS5jOysrTmUpb2UucHVzaCgiXFxjZWxseCIrKE5lKzEpKTtmb3Iob2UucHVzaCgiXFxwYXJkXFxpbnRibCIpLE5lPWdlLnMuYztOZTw9Z2UuZS5jOysrTmUpe3ZhciBZZT1xaSh7cjpQZSxjOk5lfSk7KHBlPXllPyhRW1BlXXx8W10pW05lXTpR''@;'; put 'put ''W1llXSkmJihudWxsIT1wZS52fHxwZS5mJiYhcGUuRikmJihvZS5wdXNoKCIgIisocGUud3x8KF9sKHBlKSxwZS53KSkpLG9lLnB1c2goIlxcY2VsbCIpKX1vZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gb2Uuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gQzUoUyl7dmFy''@;'; put 'put ''IFI9Uy5zbGljZSgiIyI9PT1TWzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoUi5zbGljZSgwLDIpLDE2KSxwYXJzZUludChSLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KFIuc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIGhkKFMpe2Zvcih2YXIgUj0wLGs9MTszIT1SOysrUilr''@;'; put 'put ''PTI1NiprKyhTW1JdPjI1NT8yNTU6U1tSXTwwPzA6U1tSXSk7cmV0dXJuIGsudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gb2goUyxSKXtpZihudWxsPT1TKXJldHVybiBudWxsIT1SO2lmKG51bGw9PVIpcmV0dXJuITA7aWYoMT09Uy5hdXRvJiYxPT1SLmF1''@;'; put 'put ''dG8pcmV0dXJuITE7aWYoISFTLmF1dG8hPSEhUi5hdXRvfHxudWxsPT1TLnRoZW1lIT0obnVsbD09Ui50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9Uy50aGVtZSlyZXR1cm4gUy50aGVtZSE9Ui50aGVtZXx8Uy50aW50IT1SLnRpbnQ7aWYobnVsbD09Uy5yZ2ImJm51bGw9PVIucmdiKXJldHVy''@;'; put 'put ''biExO3ZhciBrPVMucmdiOyJudW1iZXIiPT10eXBlb2YgayYmKGs9ay50b1N0cmluZygxNikpLGs9ay5zbGljZSgtNik7dmFyIEc9Ui5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBHJiYoRz1HLnRvU3RyaW5nKDE2KSksRz1HLnNsaWNlKC02KSxrLnRvTG93ZXJDYXNlKCkhPUcudG9Mb3dl''@;'; put 'put ''ckNhc2UoKX1mdW5jdGlvbiBoayhTLFIpe3JldHVybiBudWxsPT1TP251bGwhPVI6bnVsbD09Uj9udWxsIT1TOlMuc3R5bGUhPVIuc3R5bGV8fG9oKFMuY29sb3IsUi5jb2xvcil9ZnVuY3Rpb24gUzUoUyxSKXtpZigwPT09UilyZXR1cm4gUzt2YXIgaz1mdW5jdGlvbiBQVihTKXt2YXIgUj1T''@;'; put 'put ''WzBdLzI1NSxrPVNbMV0vMjU1LEc9U1syXS8yNTUsUT1NYXRoLm1heChSLGssRyksb2U9TWF0aC5taW4oUixrLEcpLGdlPVEtb2U7aWYoMD09PWdlKXJldHVyblswLDAsUl07dmFyIHllLHBlPTAsUGU9UStvZTtzd2l0Y2goeWU9Z2UvKFBlPjE/Mi1QZTpQZSksUSl7Y2FzZSBSOnBlPSgoay1H''@;'; put 'put ''KS9nZSs2KSU2O2JyZWFrO2Nhc2UgazpwZT0oRy1SKS9nZSsyO2JyZWFrO2Nhc2UgRzpwZT0oUi1rKS9nZSs0fXJldHVybltwZS82LHllLFBlLzJdfShDNShTKSk7cmV0dXJuIGtbMl09UjwwP2tbMl0qKDErUik6MS0oMS1rWzJdKSooMS1SKSxoZChmdW5jdGlvbiBkayhTKXt2YXIgeWUsaz1T''@;'; put 'put ''WzFdLEc9U1syXSxRPTIqayooRzwuNT9HOjEtRyksb2U9Ry1RLzIsZ2U9W29lLG9lLG9lXSxwZT02KlNbMF07aWYoMCE9PWspc3dpdGNoKDB8cGUpe2Nhc2UgMDpjYXNlIDY6eWU9USpwZSxnZVswXSs9USxnZVsxXSs9eWU7YnJlYWs7Y2FzZSAxOmdlWzBdKz15ZT1RKigyLXBlKSxnZVsxXSs9''@;'; put 'put ''UTticmVhaztjYXNlIDI6eWU9USoocGUtMiksZ2VbMV0rPVEsZ2VbMl0rPXllO2JyZWFrO2Nhc2UgMzpnZVsxXSs9eWU9USooNC1wZSksZ2VbMl0rPVE7YnJlYWs7Y2FzZSA0OnllPVEqKHBlLTQpLGdlWzJdKz1RLGdlWzBdKz15ZTticmVhaztjYXNlIDU6Z2VbMl0rPXllPVEqKDYtcGUpLGdl''@;'; put 'put ''WzBdKz1RfWZvcih2YXIgUGU9MDszIT1QZTsrK1BlKWdlW1BlXT1NYXRoLnJvdW5kKDI1NSpnZVtQZV0pO3JldHVybiBnZX0oaykpfXZhciBmaz02LFRjPWZrO2Z1bmN0aW9uIE01KFMpe3JldHVybiBNYXRoLmZsb29yKChTK01hdGgucm91bmQoMTI4L1RjKS8yNTYpKlRjKX1mdW5jdGlvbiB4''@;'; put 'put ''NShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUy01KS9UYyoxMDArLjUpLzEwMH1mdW5jdGlvbiBrZihTKXtyZXR1cm4gTWF0aC5yb3VuZCgoUypUYys1KS9UYyoyNTYpLzI1Nn1mdW5jdGlvbiBRMChTKXtTLmJlc3RGaXQmJmRlbGV0ZSBTLmJlc3RGaXQsUy53aWR0aD8oUy53cHg9TTUoUy53aWR0''@;'; put 'put ''aCksUy53Y2g9eDUoUy53cHgpLFMuTURXPVRjKTpTLndweD8oUy53Y2g9eDUoUy53cHgpLFMud2lkdGg9a2YoUy53Y2gpLFMuTURXPVRjKToibnVtYmVyIj09dHlwZW9mIFMud2NoJiYoUy53aWR0aD1rZihTLndjaCksUy53cHg9TTUoUy53aWR0aCksUy5NRFc9VGMpLFMuY3VzdG9tV2lkdGgm''@;'; put 'put ''JmRlbGV0ZSBTLmN1c3RvbVdpZHRofXZhciBZcz05NixEZj1ZcztmdW5jdGlvbiBVMyhTKXtyZXR1cm4gNzIqUy9EZn1mdW5jdGlvbiBzaChTKXtyZXR1cm4gUypEZi83Mn1mdW5jdGlvbiBJZihTKXtEZj1TPXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9''@;'; put 'put ''W1NdfHxTfHxZcyxiQz1UNVtTXX1mdW5jdGlvbiBqdihTKXtTLmhweD9TLmhwdD1VMyhTLmhweCk6Uy5ocHQmJihTLmhweD1zaChTLmhwdCkpfXZhciBtQz17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGln''@;'; put 'put ''aHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGlu''@;'; put 'put ''SG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LHZDPVZlKG1DKSxRNj17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eTox''@;'; put 'put ''MjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxv''@;'; put 'put ''dzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gRTUoUyxSKXtpZihTLnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludChTLnJlcGxhY2UoIiMiLCIiKSwxNik7aWYoUTZbU10pcmV0dXJuIFE2W1NdO3ZhciBrPVMubWF0Y2go''@;'; put 'put ''L3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKGspcmV0dXJuKCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM107aWYoaz1TLm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShrWzRd''@;'; put 'put ''JiZrWzRdLmxlbmd0aD4wJiYra1s0XXx8MCl8fCtrWzFdPjB8fCtrWzJdPjB8fCtrWzNdPjA/KCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM106Uj8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK1MpfXZhciBUNT17fTtmdW5jdGlvbiB6dihTKXtT''@;'; put 'put ''PVN8fDk2O3ZhciBSPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIFIuQ2FsaWJyaVsxMV09NyxSLkNhbGlicmlbMTJdPXs3Mjo2''@;'; put 'put ''LDk2OjgsMTIwOjEwLDE0NDoxMn1bU118fDgsUi5DYWxpYnJpWzEzXT0xMCxSLkNhbGlicmlbMTRdPTExLFIuQ2FsaWJyaVsxNl09MTIsUi5DYWxpYnJpWzE4XT0xNCxSLkNhbGlicmlbMjBdPTE2LFIuXHU1YjhiXHU0ZjUzWzExXT04LFIuXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFm''@;'; put 'put ''WzExXT04LFJbIlNwYXJrYXNzZSBSZyJdWzExXT03LFIuQXJpYWxbMTBdPTcsUlsiQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxSfVQ1WzcyXT16dig3MiksVDVbOTZdPXp2KDk2KSxUNVsxMjBdPXp2KDEyMCksVDVbMTQ0XT16digxNDQpO3ZhciBiQz1UNVs5Nl07ZnVuY3Rpb24geUMoUyl7cmV0''@;'; put 'put ''dXJuKGJDW1MubmFtZXx8Uy5Gb250TmFtZV18fFtdKVtTLnN6fHxTLlNpemVdfWZ1bmN0aW9uIEk0KFMpe2lmKFMpe3ZhciBSPXlDKFMpO2lmKFIpcmV0dXJuIFRjPVJ9cmV0dXJuIFRjPTZ9ZnVuY3Rpb24gX0MoUyxSLGspe3JldHVybiBoZChmdW5jdGlvbiBwayhTLFIsayl7cmV0dXJuW01h''@;'; put 'put ''dGgucm91bmQoUlswXSprK1NbMF0qKDEtaykpLE1hdGgucm91bmQoUlsxXSprK1NbMV0qKDEtaykpLE1hdGgucm91bmQoUlsyXSprK1NbMl0qKDEtaykpXX0oQzUoIm51bWJlciI9PXR5cGVvZiBTLnJnYj8oIjAwMDAwIitTLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlMucmdiKSxDNSgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIFIucmdiPygiMDAwMDAiK1IudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6Ui5yZ2IpLGspKX1mdW5jdGlvbiBVdihTLFIsayl7aWYoaylzd2l0Y2goK1Mpe2Nhc2UgNjQ6Uz02NTticmVhaztjYXNlIDY1OlM9NjR9dmFyIEc9UiYmUlsrU118fHIwWytTXXx8SHdbK1MtMjAw''@;'; put 'put ''XTtpZig4MT09K1MmJihHPXIwWzFdKSxHfHwoRz1yMFsxXSksIUcpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrUyk7cmV0dXJuIGhkKEcpfWZ1bmN0aW9uIGdrKFMsUixrKXt2YXIgRz17fTtyZXR1cm4gbnVsbCE9Uy5pbmRleGVkJiYoRy5pbmRleD1wYXJzZUludChTLmluZGV4''@;'; put 'put ''ZWQsMTApLEcucmdiPVV2KEcuaW5kZXgsUi5JbmRleGVkKSksbnVsbCE9Uy50aGVtZSYmKEcudGhlbWU9cGFyc2VJbnQoUy50aGVtZSwxMCkpLG51bGwhPVMudGludCYmKEcudGludD1wYXJzZUZsb2F0KFMudGludCkpLG51bGwhPVMucmdiJiYoRy5yZ2I9Uy5yZ2Iuc2xpY2UoLTYpKSxudWxs''@;'; put 'put ''IT1HLnRoZW1lJiYhRy5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKEcucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRy50aGVtZV0ucmdiLEcudGludHx8MCksRy5yYXdfcmdiPWsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRy50aGVtZV0ucmdiKSxHfWZ1bmN0aW9uIHdDKFMsUixr''@;'; put 'put ''LEcpe1IuQm9yZGVycz1bXTt2YXIgUT17fSxvZT17fSxnZT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9dnIocGUpO3N3aXRjaChXbih5ZVswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2Ui''@;'; put 'put ''PC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPC9sZWZ0PiI6Y2FzZSI8cmlnaHQvPiI6Y2FzZSI8L3JpZ2h0PiI6Y2FzZSI8dG9wLz4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8L2JvdHRvbT4iOmNhc2UiPGRpYWdvbmFsIjpjYXNlIjxkaWFnb25hbD4iOmNhc2Ui''@;'; put 'put ''PGRpYWdvbmFsLz4iOmNhc2UiPGhvcml6b250YWwiOmNhc2UiPGhvcml6b250YWw+IjpjYXNlIjxob3Jpem9udGFsLz4iOmNhc2UiPHZlcnRpY2FsIjpjYXNlIjx2ZXJ0aWNhbD4iOmNhc2UiPHZlcnRpY2FsLz4iOmNhc2UiPHN0YXJ0IjpjYXNlIjxzdGFydD4iOmNhc2UiPHN0YXJ0Lz4iOmNh''@;'; put 'put ''c2UiPC9zdGFydD4iOmNhc2UiPGVuZCI6Y2FzZSI8ZW5kPiI6Y2FzZSI8ZW5kLz4iOmNhc2UiPC9lbmQ+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxib3JkZXIiOmNhc2UiPGJv''@;'; put 'put ''cmRlcj4iOmNhc2UiPGJvcmRlci8+IjpRPXt9LHllLmRpYWdvbmFsVXAmJihRLmRpYWdvbmFsVXA9dGkoeWUuZGlhZ29uYWxVcCkpLHllLmRpYWdvbmFsRG93biYmKFEuZGlhZ29uYWxEb3duPXRpKHllLmRpYWdvbmFsRG93bikpLFIuQm9yZGVycy5wdXNoKFEpO2JyZWFrO2Nhc2UiPGxlZnQi''@;'; put 'put ''OmNhc2UiPGxlZnQ+IjpvZT1RLmxlZnQ9e30seWUuc3R5bGUmJihvZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6b2U9US5yaWdodD17fSx5ZS5zdHlsZSYmKG9lLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOm9l''@;'; put 'put ''PVEudG9wPXt9LHllLnN0eWxlJiYob2Uuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6b2U9US5ib3R0b209e30seWUuc3R5bGUmJihvZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6US5kaWFnb25hbD1vZSxvZT17fTti''@;'; put 'put ''cmVhaztjYXNlIjwvaG9yaXpvbnRhbD4iOlEuaG9yaXpvbnRhbD1vZSxvZT17fTticmVhaztjYXNlIjwvdmVydGljYWw+IjpRLnZlcnRpY2FsPW9lLG9lPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOm9lLmNvbG9yfHwob2UuY29sb3I9e30pLHllLmF1dG8mJihvZS5jb2xv''@;'; put 'put ''ci5hdXRvPXRpKHllLmF1dG8pKSxudWxsIT15ZS5yZ2I/b2UuY29sb3IucmdiPXllLnJnYi5zbGljZSgtNik6eWUuaW5kZXhlZD8ob2UuY29sb3IuaW5kZXg9cGFyc2VJbnQoeWUuaW5kZXhlZCwxMCksb2UuY29sb3IucmdiPVV2KG9lLmNvbG9yLmluZGV4LFIuSW5kZXhlZCwhMSkpOnllLnRo''@;'; put 'put ''ZW1lJiYob2UuY29sb3IudGhlbWU9cGFyc2VJbnQoeWUudGhlbWUsMTApLHllLnRpbnQmJihvZS5jb2xvci50aW50PXBhcnNlRmxvYXQoeWUudGludCkpLHllLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihvZS5jb2xvci5yZ2I9UzUoay50aGVt''@;'; put 'put ''ZUVsZW1lbnRzLmNsclNjaGVtZVtvZS5jb2xvci50aGVtZV0ucmdiLG9lLmNvbG9yLnRpbnR8fDApKSksIXllLmF1dG8mJm51bGw9PXllLnJnYiYmIXllLmluZGV4ZWQmJmRlbGV0ZSBvZS5jb2xvcjticmVhaztjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpnZT0hMTticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhZ2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIit5ZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBSNChTLFIpe3ZhciBrPVsiPCIrUl07cmV0dXJuIFMmJlMuc3R5bGU/KGsucHVzaCgnIHN0eWxlPSInK1Muc3R5bGUrJyInKSxT''@;'; put 'put ''LmNvbG9yPyhrLnB1c2goIj4iKSxrLnB1c2goZ2QoUy5jb2xvciwhMCkpLGsuam9pbigiIikrIjwvIitSKyI+Iik6ay5qb2luKCIiKSsiLz4iKTprWzBdKyIvPiJ9ZnVuY3Rpb24gRlYoUyxSLGssRyl7Ui5GaWxscz1bXTt2YXIgUT17fSxvZT17fSxnZT0hMSxwZT0hMTsoU1swXS5tYXRjaChl''@;'; put 'put ''bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHllKXt2YXIgUGU9dnIoeWUpO3N3aXRjaChXbihQZVswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8L2dyYWRpZW50RmlsbD4iOmNhc2UiPGJnQ29sb3IvPiI6Y2FzZSI8L2Jn''@;'; put 'put ''Q29sb3I+IjpjYXNlIjxmZ0NvbG9yLz4iOmNhc2UiPC9mZ0NvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8c3RvcC8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxmaWxsPiI6Y2FzZSI8ZmlsbCI6Y2Fz''@;'; put 'put ''ZSI8ZmlsbC8+IjpSLkZpbGxzLnB1c2goUT17fSk7YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsPiI6US5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOlEuc3RvcHM9W10sUGUuZGVncmVlJiYoUS5hbmdsZT0rUGUuZGVncmVlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2Fz''@;'; put 'put ''ZSI8cGF0dGVybkZpbGw+IjpQZS5wYXR0ZXJuVHlwZSYmKFEucGF0dGVyblR5cGU9UGUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKGdlKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6''@;'; put 'put ''Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIE5lPVduKFBlWzBdKS5zbGljZSgxKTsiY29sb3IiIT1OZSYmIVFbTmVdJiYoUVtOZV09e30pO3ZhciBZZT1nZT9vZTpRW05lXTtudWxsIT1QZS5pbmRleGVkJiYoWWUuaW5kZXg9cGFyc2VJbnQoUGUuaW5kZXhlZCwxMCksWWUucmdi''@;'; put 'put ''PVV2KFllLmluZGV4LFIuSW5kZXhlZCkpLG51bGwhPVBlLnRoZW1lJiYoWWUudGhlbWU9cGFyc2VJbnQoUGUudGhlbWUsMTApKSxudWxsIT1QZS50aW50JiYoWWUudGludD1wYXJzZUZsb2F0KFBlLnRpbnQpKSxudWxsIT1QZS5yZ2ImJihZZS5yZ2I9UGUucmdiLnNsaWNlKC02KSksbnVsbCE9''@;'; put 'put ''UGUuYXV0byYmZGVsZXRlIFFbTmVdLG51bGwhPVllLnRoZW1lJiYhWWUucmdiJiZrLnRoZW1lRWxlbWVudHMmJihZZS5yZ2I9UzUoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiLFllLnRpbnR8fDApLEcuV1RGJiYoWWUucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMuY2xy''@;'; put 'put ''U2NoZW1lW1llLnRoZW1lXS5yZ2IpKTticmVhaztjYXNlIjxzdG9wPiI6Z2U9ITAsb2U9e307YnJlYWs7Y2FzZSI8c3RvcCI6Z2U9ITAsb2U9e30sbnVsbCE9UGUucG9zaXRpb24mJihvZS52PXBhcnNlRmxvYXQoUGUucG9zaXRpb24pKTticmVhaztjYXNlIjwvc3RvcD4iOmdlPSExLFEuc3Rv''@;'; put 'put ''cHMucHVzaChvZSk7YnJlYWs7Y2FzZSI8ZXh0IjpwZT0hMDticmVhaztjYXNlIjwvZXh0PiI6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIXBlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrUGVbMF0rIiBpbiBmaWxscyIpfX0pfWZ1bmN0aW9uIEhWKFMsUixrLEcp''@;'; put 'put ''e1IuRm9udHM9W107dmFyIFE9e30sb2U9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIHBlPXZyKGdlKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNl''@;'; put 'put ''Ijxmb250PiI6aWYoIi8+IiE9Z2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpSLkZvbnRzLnB1c2goUSksUT17fTticmVhaztjYXNlIjxuYW1lIjpwZS52YWwmJihRLm5hbWU9Z28ocGUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4i''@;'; put 'put ''OmJyZWFrO2Nhc2UiPGIiOlEuYm9sZD1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGIvPiI6Y2FzZSI8Yj4iOlEuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6US5pdGFsaWM9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+''@;'; put 'put ''IjpRLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8dSI6c3dpdGNoKHBlLnZhbCl7Y2FzZSJub25lIjpRLnVuZGVybGluZT0wO2JyZWFrO2Nhc2Uic2luZ2xlIjpRLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpRLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2lu''@;'; put 'put ''Z2xlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpRLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjpRLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8c3RyaWtlIjpRLnN0cmlrZT1wZS52''@;'; put 'put ''YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjpRLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOlEub3V0bGluZT1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6US5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpRLnNoYWRvdz1w''@;'; put 'put ''ZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpRLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPGNvbmRlbnNlIjpRLmNvbmRlbnNlPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6US5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6US5l''@;'; put 'put ''eHRlbmQ9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6US5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6cGUudmFsJiYoUS5zej0rcGUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHBlLnZh''@;'; put 'put ''bHx8Im5vbmUiKSYmKFEudmFsaWduPXBlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8dmVydEFsaWduLz4iOmNhc2UiPC92ZXJ0QWxpZ24+IjpicmVhaztjYXNlIjxmYW1pbHkiOnBlLnZhbCYmKFEuZmFtaWx5PXBhcnNlSW50KHBlLnZhbCwxMCkpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6YnJlYWs7Y2FzZSI8c2NoZW1lIjpwZS52YWwmJihRLnNjaGVtZT1wZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1wZS52YWwpYnJlYWs7cGUuY29kZXBhZ2U9''@;'; put 'put ''TltwYXJzZUludChwZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6US5jb2xvcnx8KFEuY29sb3I9e30pLHBlLmF1dG8mJihRLmNvbG9yLmF1dG89dGkocGUuYXV0bykpLHBlLnJnYj9RLmNvbG9yLnJnYj1wZS5yZ2Iuc2xpY2UoLTYpOnBlLmluZGV4ZWQ/KFEuY29sb3IuaW5kZXg9cGFy''@;'; put 'put ''c2VJbnQocGUuaW5kZXhlZCwxMCksUS5jb2xvci5yZ2I9VXYoUS5jb2xvci5pbmRleCxSLkluZGV4ZWQpKTpwZS50aGVtZSYmKFEuY29sb3IudGhlbWU9cGFyc2VJbnQocGUudGhlbWUsMTApLHBlLnRpbnQmJihRLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChwZS50aW50KSkscGUudGhlbWUmJmsu''@;'; put 'put ''dGhlbWVFbGVtZW50cyYmay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKFEuY29sb3IucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS5jb2xvci50aGVtZV0ucmdiLFEuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztj''@;'; put 'put ''YXNlIjxBbHRlcm5hdGVDb250ZW50IjpvZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOm9lPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6b2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm9lPSEx''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFvZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgQTU9ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRp''@;'; put 'put ''bmcifSxaMz1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9yZGVySWQiLCJ4ZklkIl0sVzM9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRv''@;'; put 'put ''biIsInF1b3RlUHJlZml4Il0sTDQ9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLFI9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxrPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9m''@;'; put 'put ''aWxsPi8sUT0vPCg/Olx3KzopP2JvcmRlcihbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXI+LztyZXR1cm4gZnVuY3Rpb24ocGUseWUsUGUsTmUpe3ZhciBjdCxFdCxZZT17fSxldD17fTtyZXR1cm4oY3Q9cGUubWF0Y2goUykpJiYoSFYoY3QsWWUsUGUsTmUpLChZZS5Gb250c3x8''@;'; put 'put ''W10pWzBdJiZQdChldCxZZS5Gb250c1swXSkpLChjdD1wZS5tYXRjaChSKSkmJihFdD12cihnbyhjdFswXSkpLGV0Lno9RXQuZm9ybWF0Q29kZT9RcihFdC5mb3JtYXRDb2RlKTooeWUuTnVtYmVyRm10fHxbXSlbK0V0Lm51bUZtdElkXXx8IkdlbmVyYWwiKSwoY3Q9cGUubWF0Y2goaykpJiYo''@;'; put 'put ''RlYoY3QsWWUsUGUsTmUpLChZZS5GaWxsc3x8W10pWzBdJiZQdChldCxZZS5GaWxsc1swXSkpLChjdD1wZS5tYXRjaChRKSkmJih3QyhjdCxZZSxQZSxOZSksKFllLkJvcmRlcnN8fFtdKVswXSYmUHQoZXQsWWUuQm9yZGVyc1swXSkpLGV0fX0oKSxKaT0vPCg/Olx3KzopP2R4Zj5bXFNcc10q''@;'; put 'put ''PzxcLyg/Olx3KzopP2R4Zj4vZyxLcj0vPCg/Olx3KzopP3RhYmxlU3R5bGVcYi4qPz5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGU+L2c7dmFyIF9rPWZ1bmN0aW9uKCl7dmFyIFI9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+Lyxr''@;'; put 'put ''PS88KD86XHcrOik/Y2VsbFN0eWxlWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZVhmcz4vLEc9LzwoPzpcdys6KT9jZWxsU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZXM+LyxRPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNd''@;'; put 'put ''Kj88XC8oPzpcdys6KT9jZWxsWGZzPi8sb2U9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLGdlPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+LyxwZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltc''@;'; put 'put ''U1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLHllPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sUGU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4v''@;'; put 'put ''LE5lPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKGV0LGN0LEV0KXt2YXIgYnQsYXQ9e307cmV0dXJuIGV0PygoYnQ9KGV0PWV0LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZ''@;'; put 'put ''UEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKHllKSkmJmZ1bmN0aW9uIE5WKFMsUixrKXtSLkluZGV4ZWR8fChSLkluZGV4ZWQ9W10pO3ZhciBHPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO3N3aXRjaChXbihvZVswXSkp''@;'; put 'put ''e2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29sb3JzIjpjYXNlIjxpbmRleGVkQ29sb3JzLz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8''@;'; put 'put ''cmdiQ29sb3IiOmRlbGV0ZSBvZVswXTt2YXIgZ2U9cGFyc2VJbnQob2UucmdiLnNsaWNlKC02KSwxNik7Ui5JbmRleGVkLnB1c2goW2dlPj4xNiYyNTUsZ2U+PjgmMjU1LDI1NSZnZV0pO2JyZWFrO2Nhc2UiPGV4dCI6Rz0hMDticmVhaztjYXNlIjwvZXh0PiI6Rz0hMTticmVhaztkZWZhdWx0''@;'; put 'put ''OmlmKGsmJmsuV1RGJiYhRyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK29lWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKFIpKSYmZnVuY3Rpb24gdmsoUyxSLGspe1IuTnVtYmVyRm10PVtdO2Zvcih2YXIgRz1PZShBLl90YWJsZSksUT0w''@;'; put 'put ''O1E8Ry5sZW5ndGg7KytRKVIuTnVtYmVyRm10W0dbUV1dPUEuX3RhYmxlW0dbUV1dO3ZhciBvZT1TWzBdLm1hdGNoKGVuKTtpZihvZSlmb3IoUT0wO1E8b2UubGVuZ3RoOysrUSl7dmFyIGdlPXZyKG9lW1FdKTtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxudW1GbXRzIjpjYXNlIjwvbnVtRm10''@;'; put 'put ''cz4iOmNhc2UiPG51bUZtdHMvPiI6Y2FzZSI8bnVtRm10cz4iOmNhc2UiPC9udW1GbXQ+IjpicmVhaztjYXNlIjxudW1GbXQiOnZhciBwZT1RcihnbyhnZS5mb3JtYXRDb2RlKSkseWU9cGFyc2VJbnQoZ2UubnVtRm10SWQsMTApO2lmKFIuTnVtYmVyRm10W3llXT1wZSx5ZT4wKXtpZih5ZT4z''@;'; put 'put ''OTIpe2Zvcih5ZT0zOTI7eWU+NjAmJm51bGwhPVIuTnVtYmVyRm10W3llXTstLXllKTtSLk51bWJlckZtdFt5ZV09cGV9QS5sb2FkKHBlLHllKX1icmVhaztkZWZhdWx0OmlmKGsuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBudW1GbXRzIil9fX0oYnQs''@;'; put 'put ''YXQsRXQpLChidD1ldC5tYXRjaChnZSkpJiZIVihidCxhdCxjdCxFdCksKGJ0PWV0Lm1hdGNoKG9lKSkmJkZWKGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2gocGUpKSYmd0MoYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChrKSkmJmZ1bmN0aW9uIHJuZShTLFIsayl7Ui5DZWxsU3R5bGVYZj1b''@;'; put 'put ''XTt2YXIgRyxRPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBnZT12cihvZSkscGU9MDtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2Vs''@;'; put 'put ''bFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0''@;'; put 'put ''ZShHPWdlKVswXSxwZT0wO3BlPFozLmxlbmd0aDsrK3BlKUdbWjNbcGVdXSYmKEdbWjNbcGVdXT1wYXJzZUludChHW1ozW3BlXV0sMTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlHW1czW3BlXV0mJihHW1czW3BlXV09dGkoR1tXM1twZV1dKSk7aWYoUi5OdW1iZXJGbXQmJkcubnVt''@;'; put 'put ''Rm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihSLk51bWJlckZtdFtHLm51bUZtdElkXT09Ui5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfVIuQ2VsbFN0eWxlWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIg''@;'; put 'put ''eWU9e307Z2UudmVydGljYWwmJih5ZS52ZXJ0aWNhbD1nZS52ZXJ0aWNhbCksZ2UuaG9yaXpvbnRhbCYmKHllLmhvcml6b250YWw9Z2UuaG9yaXpvbnRhbCksbnVsbCE9Z2UudGV4dFJvdGF0aW9uJiYoeWUudGV4dFJvdGF0aW9uPWdlLnRleHRSb3RhdGlvbiksZ2UuaW5kZW50JiYoeWUuaW5k''@;'; put 'put ''ZW50PWdlLmluZGVudCksZ2Uud3JhcFRleHQmJih5ZS53cmFwVGV4dD1nZS53cmFwVGV4dCksZ2Uuc2hyaW5rVG9GaXQmJih5ZS5zaHJpbmtUb0ZpdD10aShnZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PXllO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSx0aShn''@;'; put 'put ''ZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9Z2UubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShnZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYm''@;'; put 'put ''IVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKEcpKSYmZnVuY3Rpb24gYW5lKFMsUixrKXtSLkNlbGxTdHlsZVhmfHwoUi5DZWxsU3R5bGVYZj1bXSk7dmFyIEc9ITE7KFNbMF0ubWF0''@;'; put 'put ''Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9dnIoUSk7c3dpdGNoKFduKG9lWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0''@;'; put 'put ''eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIG9lWzBdO3ZhciBnZT0rb2UueGZJZDtpZihSLkNlbGxTdHlsZVhmW2dlXSlSLkNlbGxTdHlsZVhmW2dlXS5zdHls''@;'; put 'put ''ZT1nbyhvZS5uYW1lKTtlbHNlIGlmKCFvZS5idWlsdGluSWQpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIitnZSk7YnJlYWs7Y2FzZSI8ZXh0IjpHPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFHKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goUSkpJiZmdW5jdGlvbiBiayhTLFIsayl7Ui5DZWxsWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9l''@;'; put 'put ''KXt2YXIgZ2U9dnIob2UpLHBlPTA7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8Y2VsbFhmcyI6Y2FzZSI8Y2VsbFhmcz4iOmNhc2UiPGNlbGxYZnMvPiI6Y2FzZSI8L2NlbGxYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90''@;'; put 'put ''ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKEc9Z2UpWzBdLHBlPTA7cGU8WjMubGVuZ3RoOysrcGUpR1taM1twZV1dJiYoR1taM1twZV1dPXBhcnNlSW50KEdbWjNbcGVd''@;'; put 'put ''XSwxMCkpO2ZvcihwZT0wO3BlPFczLmxlbmd0aDsrK3BlKUdbVzNbcGVdXSYmKEdbVzNbcGVdXT10aShHW1czW3BlXV0pKTtpZihSLk51bWJlckZtdCYmRy5udW1GbXRJZD4zOTIpZm9yKHBlPTM5MjtwZT42MDstLXBlKWlmKFIuTnVtYmVyRm10W0cubnVtRm10SWRdPT1SLk51bWJlckZtdFtw''@;'; put 'put ''ZV0pe0cubnVtRm10SWQ9cGU7YnJlYWt9Ui5DZWxsU3R5bGVYZiYmRy54ZklkJiZSLkNlbGxTdHlsZVhmW0cueGZJZF0mJlIuQ2VsbFN0eWxlWGZbRy54ZklkXS5zdHlsZSYmKEcuc3R5bGU9Ui5DZWxsU3R5bGVYZltHLnhmSWRdLnN0eWxlKSxSLkNlbGxYZi5wdXNoKEcpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciB5ZT17fTtnZS52ZXJ0aWNhbCYmKHllLnZlcnRpY2FsPWdlLnZlcnRpY2FsKSxnZS5ob3Jpem9udGFsJiYoeWUuaG9yaXpvbnRhbD1nZS5ob3Jpem9udGFsKSxudWxsIT1nZS50ZXh0Um90YXRpb24mJih5ZS50ZXh0Um90YXRpb249''@;'; put 'put ''Z2UudGV4dFJvdGF0aW9uKSxnZS5pbmRlbnQmJih5ZS5pbmRlbnQ9Z2UuaW5kZW50KSxnZS53cmFwVGV4dCYmKHllLndyYXBUZXh0PXRpKGdlLndyYXBUZXh0KSksZ2Uuc2hyaW5rVG9GaXQmJih5ZS5zaHJpbmtUb0ZpdD10aShnZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PXllO2JyZWFr''@;'; put 'put ''O2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSx0aShnZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9Z2UubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShnZS5sb2NrZWQpKTticmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNl''@;'; put 'put ''IjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0''@;'; put 'put ''Lm1hdGNoKE5lKSkmJmZ1bmN0aW9uIHlrKFMsUixrLEcpe1IuRFhGfHwoUi5EWEY9W10pLChTWzBdLm1hdGNoKEppKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5EWEYucHVzaChMNChRLFIsayxHKSl9KX0oYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChQZSkpJiZmdW5jdGlvbiBCVihT''@;'; put 'put ''LFIsayxHKXtSLlRhYmxlfHwoUi5UYWJsZT1bXSksKFNbMF0ubWF0Y2goS3IpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXtSLlRhYmxlLnB1c2goZnVuY3Rpb24gVlYoUyxSLGssRyl7dmFyIFE9ITEsb2U9e307cmV0dXJuKFMubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7''@;'; put 'put ''dmFyIHBlPXZyKGdlKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjx0YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6b2UubmFtZT1wZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxvZS5yYXduYW1lPXBlLm5hbWUsb2UucGl2b3Q9IXBlLnBpdm90fHx0aShwZS5w''@;'; put 'put ''aXZvdCksb2UudGFibGU9IXBlLnRhYmxlfHx0aShwZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZihw''@;'; put 'put ''ZS50eXBlJiZwZS5keGZJZCl7aWYoIVIuRFhGfHwhUi5EWEZbK3BlLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IoZ2UrIiBjYW5ub3QgZmluZCBEWEYiKTtvZVtwZS50eXBlXT1SLkRYRlsrcGUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLG9lfShRLFIsMCxHKSl9KX0oYnQsYXQsMCxFdCksKGF0LkZvbnRzfHxbXSlbMF0mJkk0KGF0LkZvbnRzWzBdKSxhdCk6YXR9fSgpLHdrPVBy''@;'; put 'put ''KCJzdHlsZVNoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczp2dCI6WWkudnR9KTtmdW5jdGlvbiBadihTLFIpe3ZhciBHLGs9W0lpLHdrXTtTLlNTRiYmbnVsbCE9KEc9ZnVuY3Rpb24gazUoUyl7dmFyIFI9WyI8bnVtRm10cz4iXTtyZXR1cm5bWzUsOF0sWzIzLDI2XSxbNDEs''@;'; put 'put ''NDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe2Zvcih2YXIgRz1rWzBdO0c8PWtbMV07KytHKW51bGwhPVNbR10mJihSW1IubGVuZ3RoXT1QcigibnVtRm10IixudWxsLHtudW1GbXRJZDpHLGZvcm1hdENvZGU6THIoU1tHXSl9KSl9KSwxPT09Ui5sZW5ndGg/IiI6KFJbUi5sZW5n''@;'; put 'put ''dGhdPSI8L251bUZtdHM+IixSWzBdPVByKCJudW1GbXRzIixudWxsLHtjb3VudDpSLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUi5qb2luKCIiKSl9KFMuU1NGKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBnMihTKXt2YXIgUj1bXTtyZXR1cm4gUy5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKGspe3ZhciBHPVsiPGZvbnQ+Il07ay5ib2xkJiZHLnB1c2goIjxiLz4iKSxrLml0YWxpYyYmRy5wdXNoKCI8aS8+Iiksay5zdHJpa2UmJkcucHVzaCgiPHN0cmlrZS8+Iiksay5zaGFkb3cmJkcucHVzaCgiPHNoYWRvdy8+IiksQTVbK2sudW5kZXJsaW5lXSYmRy5wdXNo''@;'; put 'put ''KCc8dSB2YWw9IicrQTVbK2sudW5kZXJsaW5lXSsnIi8+Jyksay5zeiYmRy5wdXNoKCc8c3ogdmFsPSInK2suc3orJyIvPicpLGsuY29sb3ImJkcucHVzaChnZChrLmNvbG9yLCEwKSksay5uYW1lJiZHLnB1c2goJzxuYW1lIHZhbD0iJytrLm5hbWUrJyIvPicpLGsuZmFtaWx5JiZHLnB1c2go''@;'; put 'put ''JzxmYW1pbHkgdmFsPSInK2suZmFtaWx5KyciLz4nKSxrLnNjaGVtZSYmRy5wdXNoKCc8c2NoZW1lIHZhbD0iJytrLnNjaGVtZSsnIi8+Jyksay52YWxpZ24mJkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9Iicray52YWxpZ24rKCJzdWIiPT1rLnZhbGlnbnx8InN1cGVyIj09ay52YWxpZ24/InNj''@;'; put 'put ''cmlwdCI6IiIpKyciLz4nKSxSLnB1c2goRy5qb2luKCIiKSsiPC9mb250PiIpfSksJzxmb250cyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvZm9udHM+In0oKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBtayhTKXt2YXIgUj1bXTty''@;'; put 'put ''ZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPW51bGw7aWYoay5zdG9wcyYmay5zdG9wcy5sZW5ndGgpe3ZhciBRPXt9O2suYW5nbGUmJihRLmRlZ3JlZT1NYXRoLnJvdW5kKGsuYW5nbGUpKSxHPWsuc3RvcHMubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4gUHIoInN0b3AiLGdkKG9l''@;'; put 'put ''LCJjb2xvciIsITApLG51bGwhPW9lLnY/e3Bvc2l0aW9uOm9lLnZ9Ont9KX0pLFIucHVzaCgiPGZpbGw+IitQcigiZ3JhZGllbnRGaWxsIixHLmpvaW4oIiIpLFEpKyI8L2ZpbGw+Iil9ZWxzZXtpZihrLmZnQ29sb3Ipe2lmKEc9KEd8fCIiKSsiPGZnQ29sb3IgIixrLmZnQ29sb3IudGhlbWUp''@;'; put 'put ''Rys9J3RoZW1lPSInK2suZmdDb2xvci50aGVtZSsnIicrKGsuZmdDb2xvci50aW50PycgdGludD0iJytrLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1rLmZnQ29sb3IuaW5kZXgmJm51bGw9PWsuZmdDb2xvci5yZ2IpRys9J2luZGV4ZWQ9Iicray5mZ0NvbG9yLmlu''@;'; put 'put ''ZGV4KyciLz4nO2Vsc2UgaWYoay5mZ0NvbG9yLmF1dG8pRys9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK09lKGsuZmdDb2xvcikuam9pbigifCIpKTtHKz0ncmdiPSJGRicrUDAoay5mZ0NvbG9yLnJnYikrJyIv''@;'; put 'put ''Pid9InNvbGlkIj09ay5wYXR0ZXJuVHlwZSYmIWsuYmdDb2xvciYmKGsuYmdDb2xvcj17aW5kZXg6NjR9KX1pZihrLmJnQ29sb3IpaWYoRz0oR3x8IiIpKyI8YmdDb2xvciAiLGsuYmdDb2xvci50aGVtZSlHKz0ndGhlbWU9Iicray5iZ0NvbG9yLnRoZW1lKyciLz4nO2Vsc2UgaWYobnVsbCE9''@;'; put 'put ''ay5iZ0NvbG9yLmluZGV4JiZudWxsPT1rLmJnQ29sb3IucmdiKUcrPSdpbmRleGVkPSInK2suYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuYmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuYmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29s''@;'; put 'put ''b3IgIitPZShrLmJnQ29sb3IpLmpvaW4oInwiKSk7Rys9J3JnYj0iRkYnK1AwKGsuYmdDb2xvci5yZ2IpKyciLz4nfVIucHVzaCgiPGZpbGw+IitQcigicGF0dGVybkZpbGwiLEcse3BhdHRlcm5UeXBlOmsucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8ZmlsbHMgY291bnQ9IicrUi5s''@;'; put 'put ''ZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gRHMoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bXTtHLnB1c2goUjQoay5sZWZ0LCJsZWZ0IikpLEcucHVz''@;'; put 'put ''aChSNChrLnJpZ2h0LCJyaWdodCIpKSxHLnB1c2goUjQoay50b3AsInRvcCIpKSxHLnB1c2goUjQoay5ib3R0b20sImJvdHRvbSIpKSxHLnB1c2goUjQoay5kaWFnb25hbCwiZGlhZ29uYWwiKSksUi5wdXNoKCI8Ym9yZGVyPiIrRy5qb2luKCIiKSsiPC9ib3JkZXI+Iil9KSwnPGJvcmRlcnMg''@;'; put 'put ''Y291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2JvcmRlcnM+In0oKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIGluZShTKXt2YXIgUj1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+''@;'; put 'put ''J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylSLnB1c2goUHIoInhmIixudWxsLHtudW1GbXRJZDpTW2tdLm51bUZtdElkfHwwLGZvbnRJZDpTW2tdLmZvbnRJZHx8MCxmaWxsSWQ6U1trXS5maWxsSWR8fDAsYm9yZGVySWQ6U1trXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNl''@;'; put 'put ''bGxTdHlsZVhmcyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KFIuY2VsbFN0eWxlWGZzKSwoRz1mdW5jdGlvbiBubmUoUyl7dmFyIFI9W107cmV0dXJuIFJbUi5sZW5ndGhdPVByKCJjZWxsWGZzIixudWxsKSxTLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''ayl7dmFyIEc9ay5hbGlnbm1lbnQ7ZGVsZXRlIGsuYWxpZ25tZW50O3ZhciBRPWsucHJvdGVjdGlvbjtkZWxldGUgay5wcm90ZWN0aW9uO3ZhciBvZT1HP1ByKCJhbGlnbm1lbnQiLG51bGwsRyk6IiI7b2UrPVE/UHIoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjpRLmhpZGRlbj8xOjAsbG9j''@;'; put 'put ''a2VkOlEuZWRpdGFibGU/MDoxfSk6IiIsUltSLmxlbmd0aF09UHIoInhmIixvZXx8bnVsbCxrKSxHJiYoay5hbGlnbm1lbnQ9RyksUSYmKGsucHJvdGVjdGlvbj1RKX0pLFJbUi5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09Ui5sZW5ndGg/IiI6KFJbMF09UHIoImNlbGxYZnMiLG51bGwse2Nv''@;'; put 'put ''dW50OlIubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxSLmpvaW4oIiIpKX0oUi5jZWxsWGZzKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBvbmUoUyl7dmFyIFI9Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRpbklkPSIwIi8+J107''@;'; put 'put ''aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylSLnB1c2goUHIoImNlbGxTdHlsZSIsbnVsbCx7bmFtZTpTW2tdLm5hbWUseGZJZDprfSkpO3JldHVybic8Y2VsbFN0eWxlcyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvY2VsbFN0eWxlcz4ifShSLmNlbGxTdHls''@;'; put 'put ''ZVhmcyksUy5TdHlsZXMuRFhGfHwoUy5TdHlsZXMuRFhGPVtdKTt2YXIgUT1mdW5jdGlvbiBmZChTLFIsayl7dmFyIEc9Wyc8dGFibGVTdHlsZXMgY291bnQ9IicrKFN8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0UGl2b3RTdHls''@;'; put 'put ''ZT0iUGl2b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIFMmJlMubGVuZ3RoPyhHWzBdKz0iPiIsUy5mb3JFYWNoKGZ1bmN0aW9uKFEpe0cucHVzaChmdW5jdGlvbiBDQyhTLFIsayl7dmFyIEc9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxh''@;'; put 'put ''c3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRv''@;'; put 'put ''dGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3Vi''@;'; put 'put ''aGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihTW29lXSl7''@;'; put 'put ''dmFyIGdlPWxTKFIsU1tvZV0pO0cucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK2dlKyciIHR5cGU9Iicrb2UrJyIvPicpfX0pO3ZhciBRPSc8dGFibGVTdHlsZSBjb3VudD0iJytHLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhUy5waXZvdCsnIiBuYW1lPSInK1MubmFtZSsnIic7''@;'; put 'put ''cmV0dXJuIEcubGVuZ3RoP1ErIj4iK0cuam9pbigiIikrIjwvdGFibGVTdHlsZT4iOlErIi8+In0oUSxSKSl9KSxHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOkdbMF0rIi8+In0oKFMuU3R5bGVzfHx7fSkuVGFibGV8fFtdLFMuU3R5bGVzLkRYRik7cmV0dXJuIGtbay5sZW5ndGhdPWZ1''@;'; put 'put ''bmN0aW9uIGpWKFMsUil7aWYoIVMubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIGs9Wyc8ZHhmcyBjb3VudD0iJytTLmxlbmd0aCsnIj4nXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2sucHVzaChmdW5jdGlvbiBlOChTLFIpe3ZhciBrPXtib2xkOiJiIixpdGFs''@;'; put 'put ''aWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sRz1bIjxkeGY+Il0sUT1bXSxvZT1bXSxnZT1bXSx5ZT1bXTtyZXR1cm4gT2UoUykuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2Ui''@;'; put 'put ''Y29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6US5wdXNoKE5lKTticmVhaztjYXNlImJnQ29sb3Ii''@;'; put 'put ''OmNhc2UiZmdDb2xvciI6Z2UucHVzaChOZSk7YnJlYWs7Y2FzZSJ6IjpvZS5wdXNoKE5lKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjp5ZS5wdXNoKE5lKTti''@;'; put 'put ''cmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitOZSsiIGluIERYRiJ9fSksUS5sZW5ndGg+MCYmKEcucHVzaCgiPGZvbnQ+Iiks''@;'; put 'put ''US5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Ry5wdXNoKCI8Iisoa1tOZV18fE5lKSsnIHZhbD0iJysoU1tOZV0/''@;'; put 'put ''IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOkcucHVzaChnZChTW05lXSxOZSwhMCkpO2JyZWFrO2Nhc2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpHLnB1c2goIjwiKyhrW05lXXx8TmUpKycgdmFsPSInK1NbTmVdKyciLz4nKTticmVhaztjYXNl''@;'; put 'put ''InVuZGVybGluZSI6Ry5wdXNoKCc8dSB2YWw9IicrQTVbU1tOZV18fDBdKyciLz4nKTticmVhaztjYXNlInZhbGlnbiI6Ry5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytTLnZhbGlnbisoInN1YiI9PVMudmFsaWdufHwic3VwZXIiPT1TLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitOZSsiIDogZm9udCBEWEYifX0pLEcucHVzaCgiPC9mb250PiIpKSxvZS5sZW5ndGg+MCYmRy5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicrTHIoUy56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBzUyhTLFIpe2lmKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgUylyZXR1cm4gUzt2YXIgaz1SLnJldnNzZltTPz8iR2VuZXJhbCJdLEc9NjA7aWYobnVsbD09aylmb3IoO0c8MzkyOysrRylpZihudWxsPT1SLnNzZltHXSlyZXR1cm4gQS5sb2FkKFMsRyksUi5zc2ZbR109UyxSLnJldnNzZltTXT1HLEc7cmV0dXJuIGt9KFMueixSKSsnIi8+Jyks''@;'; put 'put ''Z2UubGVuZ3RoPjAmJihHLnB1c2goIjxmaWxsPiIpLEcucHVzaCgiPHBhdHRlcm5GaWxsIisoUy5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK1MucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxnZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UicGF0dGVyblR5cGUiOmJy''@;'; put 'put ''ZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpHLnB1c2goZ2QoU1tOZV0sTmUsITApKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZpbGwgRFhGIn19KSxHLnB1c2goIjwvcGF0dGVybkZpbGw+IiksRy5wdXNoKCI8L2ZpbGw+IikpLHllLmxlbmd0aD4w''@;'; put 'put ''PyhHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2luKCIiKSkseWUuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihOZSl7Ry5wdXNoKFI0KFNbTmVdLE5lKSl9KSxHLnB1c2goIjwvYm9yZGVyPiIpKToobnVsbCE9Uy5kaWFnb25hbERvd258fG51bGwhPVMuZGlhZ29uYWxVcCkmJkcucHVzaChbIjxib3JkZXIiLG51bGwhPVMuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyAr''@;'; put 'put ''ISFTLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Uy5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEhUy5kaWFnb25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09Ry5sZW5ndGg/IjxkeGYvPiI6Ry5qb2luKCIiKSsiPC9keGY+In0oRyxSKSl9KSxrLmpvaW4oIiIpKyI8L2R4''@;'; put 'put ''ZnM+In0oUy5TdHlsZXMuRFhGLFIpLGtbay5sZW5ndGhdPVEsay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9ZnVuY3Rpb24gU0MoUyxSLGspe2t8fChrPWJuKDYrNCpSLmxlbmd0aCkpLGsud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixTKSxGYyhSLGspO3ZhciBHPWsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprO3JldHVybiBudWxsPT1rLmwmJihrLmw9ay5sZW5ndGgpLEd9ZnVuY3Rpb24gWlYoUyl7cmV0dXJue2NvbG9yOlFoKFMpLHBvczpQbChTKX19S2EuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIE1DPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtV''@;'; put 'put ''cCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFdWPVZlKE1DKSxENT1bImdlbmVyYWwiLCJsZWZ0Iiwi''@;'; put 'put ''Y2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLHQ4PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24ganUoUyxSLGspe2t8fChrPWJuKDE2KSksay53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFJ8fDApLGsud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5mb250SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZpbGxJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuYm9yZGVySWR8fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdubWVudCYmUy5hbGln''@;'; put 'put ''bm1lbnQudGV4dFJvdGF0aW9ufHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIEc9MCxRPTA7aWYoUy5hbGlnbm1lbnQpe2lmKFMuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBvZT1ENS5pbmRleE9mKFMuYWxpZ25tZW50Lmhvcml6''@;'; put 'put ''b250YWwpO29lPDAmJihvZT0wKSxHfD1vZX1pZihTLmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIGdlPXQ4LmluZGV4T2YoUy5hbGlnbm1lbnQudmVydGljYWwpO2dlPDAmJihnZT0yKSxHfD1nZTw8M31TLmFsaWdubWVudC53cmFwVGV4dCYmKEd8PTY0KSxTLmFsaWdubWVudC5zaHJpbmtUb0Zp''@;'; put 'put ''dCYmKFF8PTEpfXJldHVybiBrLndyaXRlX3NoaWZ0KDEsRyksay53cml0ZV9zaGlmdCgxLFEpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa312YXIgcGQ9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFp''@;'; put 'put ''ciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBJNShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBrPVFoKFMpO3JldHVybntzdHlsZTpwZFtS''@;'; put 'put ''XSxjb2xvcjprfX1mdW5jdGlvbiBSNShTLFIpe3JldHVybiBSfHwoUj1ibigxMCkpLFMmJlMuc3R5bGUmJiIiIT1TLnN0eWxlJiYibm9uZSIhPVMuc3R5bGUmJi0xIT09cGQuaW5kZXhPZihTLnN0eWxlKT8oUi53cml0ZV9zaGlmdCgxLHBkLmluZGV4T2YoUy5zdHlsZSkpLFIud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSwwKSxTLmNvbG9yP21mKFMuY29sb3IsUik6KFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCkpKTooUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApKSxSfWZ1bmN0aW9uIFNrKFMs''@;'; put 'put ''Uil7cmV0dXJuIFJ8fChSPWJuKDUyKSksUi53cml0ZV9zaGlmdCg0LFMueGZJZCksUi53cml0ZV9zaGlmdCgyLDEpLFIud3JpdGVfc2hpZnQoMSwrUy5idWlsdGluSWQpLFIud3JpdGVfc2hpZnQoMSwwKSxwZihTLm5hbWV8fCIiLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfWZ1''@;'; put 'put ''bmN0aW9uIFl2KFMsUil7IVJ8fCFSLnRoZW1lRWxlbWVudHN8fCFSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1TLnRoZW1lJiYoUy5yZ2I9UzUoUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtTLnRoZW1lXS5yZ2IsUy50aW50fHwwKSl9ZnVuY3Rpb24gRGsoUyxSKXt2YXIgaz1i''@;'; put 'put ''aSgpO3JldHVybiBGcihrLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiAkVihTLFIpe2lmKFIpe3ZhciBrPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiYrK2t9''@;'; put 'put ''KSwwIT1rJiYoRnIoUywiQnJ0QmVnaW5GbXRzIixLMChrKSksW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiZGcihTLCJCcnRGbXQiLFNDKFEsUltRXSkpfSksRnIoUywiQnJ0''@;'; put 'put ''RW5kRm10cyIpKX19KGssUy5TU0YpLGZ1bmN0aW9uIEtWKFMsUil7dmFyIGs9Ui5sZW5ndGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luRm9udHMiLEswKGspKSxSLmZvckVhY2goZnVuY3Rpb24oRyl7RnIoUywiQnJ0Rm9udCIsZnVuY3Rpb24gVVYoUyxSKXtSfHwoUj1ibigxNTMpKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMjAqUy5zeiksZnVuY3Rpb24gZHYoUyxSKXtSfHwoUj1ibigyKSksUi53cml0ZV9zaGlmdCgxLChTLml0YWxpYz8yOjApfChTLnN0cmlrZT84OjApfChTLm91dGxpbmU/MTY6MCl8KFMuc2hhZG93PzMyOjApfChTLmNvbmRlbnNlPzY0OjApfChTLmV4dGVuZD8xMjg6MCkpLFIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKX0oUyxSKSxSLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApO3ZhciBrPTA7InN1cGVyIj09Uy52YWxpZ24/az0xOiJzdWIiPT1TLnZhbGlnbiYmKGs9MiksUi53cml0ZV9zaGlmdCgyLGspLFIud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksUi53cml0''@;'; put 'put ''ZV9zaGlmdCgxLFMuZmFtaWx5fHwwKSxSLndyaXRlX3NoaWZ0KDEsUy5jaGFyc2V0fHwwKSxSLndyaXRlX3NoaWZ0KDEsMCksbWYoUy5jb2xvcixSKTt2YXIgRz0wO3JldHVybiJtYWpvciI9PVMuc2NoZW1lJiYoRz0xKSwibWlub3IiPT1TLnNjaGVtZSYmKEc9MiksUi53cml0ZV9zaGlmdCgx''@;'; put 'put ''LEcpLEZjKFMubmFtZSxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un0oRykpfSksRnIoUywiQnJ0RW5kRm9udHMiKSl9KGssKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiBxVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdpbkZpbGxzIixL''@;'; put 'put ''MChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcpe0ZyKFMsIkJydEZpbGwiLGZ1bmN0aW9uIGUxKFMsUil7Unx8KFI9Ym4oODQpKTt2YXIgaz1XVltTLnBhdHRlcm5UeXBlXTtudWxsPT1rJiYoaz00MCksUi53cml0ZV9zaGlmdCg0LGs9K2spO3ZhciBHPTA7aWYoNDAhPWspZm9yKG1mKFMuZmdD''@;'; put 'put ''b2xvcnx8e2luZGV4OjY0fSxSKSxtZihTLmJnQ29sb3J8fHtpbmRleDo2NX0sUik7RzwxMjsrK0cpUi53cml0ZV9zaGlmdCg0LDApO2Vsc2V7Zm9yKDtHPDQ7KytHKVIud3JpdGVfc2hpZnQoNCwwKTtmb3IoO0c8MTI7KytHKVIud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUi5sZW5ndGg+Ui5s''@;'; put 'put ''P1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEZpbGxzIikpfShrLChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rpb24gWFYoUyxSKXt2YXIgaz1SLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0QmVnaW5Cb3JkZXJzIixLMChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcp''@;'; put 'put ''e0ZyKFMsIkJydEJvcmRlciIsZnVuY3Rpb24gQ2soUyxSKXtyZXR1cm4gUnx8KFI9Ym4oNTEpKSxSLndyaXRlX3NoaWZ0KDEsMCksUjUoUy50b3AsUiksUjUoUy5ib3R0b20sUiksUjUoUy5sZWZ0LFIpLFI1KFMucmlnaHQsUiksUjUobnVsbCxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIu''@;'; put 'put ''bCk6Un0oRykpfSksRnIoUywiQnJ0RW5kQm9yZGVycyIpKX0oaywoUy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gRWsoUyxSKXt2YXIgaz0xO2lmKFImJihrPVIubGVuZ3RoKSxGcihTLCJCcnRCZWdpbkNlbGxTdHlsZVhGcyIsSzAoaykpLEZyKFMsIkJydFhGIixqdSh7bnVt''@;'; put 'put ''Rm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUzNSkpLFIpZm9yKHZhciBHPTE7RzxSLmxlbmd0aDsrK0cpRnIoUywiQnJ0WEYiLGp1KHtudW1GbXRJZDpSW0ddLm51bUZtdElkfHwwLGZvbnRJZDpSW0ddLmZvbnRJZHx8MCxmaWxsSWQ6UltHXS5maWxsSWR8fDAsYm9y''@;'; put 'put ''ZGVySWQ6UltHXS5ib3JkZXJJZHx8MH0sNjU1MzUpKTtGcihTLCJCcnRFbmRDZWxsU3R5bGVYRnMiKX0oayxSLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24gVGsoUyxSKXtGcihTLCJCcnRCZWdpbkNlbGxYRnMiLEswKFIubGVuZ3RoKSksUi5mb3JFYWNoKGZ1bmN0aW9uKGspe0ZyKFMsIkJydFhG''@;'; put 'put ''IixqdShrLDApKX0pLEZyKFMsIkJydEVuZENlbGxYRnMiKX0oayxSLmNlbGxYZnMpLGZ1bmN0aW9uIEFrKFMsUil7dmFyIGs9MTtpZihSJiYoaz1SLmxlbmd0aCksRnIoUywiQnJ0QmVnaW5TdHlsZXMiLEswKGspKSxGcihTLCJCcnRTdHlsZSIsU2soe3hmSWQ6MCxidWlsdGluSWQ6MCxuYW1l''@;'; put 'put ''OiJOb3JtYWwifSkpLFIpZm9yKHZhciBHPTE7RzxSLmxlbmd0aDsrK0cpRnIoUywiQnJ0U3R5bGUiLFNrKHt4ZklkOkcsYnVpbHRpbklkOjAsbmFtZTpSW0ddLm5hbWV9KSk7RnIoUywiQnJ0RW5kU3R5bGVzIil9KGssUi5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIEd2KFMpe0ZyKFMsIkJydEJl''@;'; put 'put ''Z2luRFhGcyIsSzAoMCkpLEZyKFMsIkJydEVuZERYRnMiKX0oayksZnVuY3Rpb24ga2soUyl7RnIoUywiQnJ0QmVnaW5UYWJsZVN0eWxlcyIsZnVuY3Rpb24gTWsoUyxSLGspe3ZhciBHPWJuKDIwNTIpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsUykscGYoUixHKSxwZihrLEcpLEcubGVuZ3Ro''@;'; put 'put ''PkcubD9HLnNsaWNlKDAsRy5sKTpHfSgwLCJUYWJsZVN0eWxlTWVkaXVtOSIsIlBpdm90U3R5bGVNZWRpdW00IikpLEZyKFMsIkJydEVuZFRhYmxlU3R5bGVzIil9KGspLEZyKGssIkJydEVuZFN0eWxlU2hlZXQiKSxrLmVuZCgpfUthLlRIRU1FPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9y''@;'; put 'put ''bWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIjt2YXIgSWs9WyI8L2E6bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwv''@;'; put 'put ''YTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gUVYoUyxSLGspe1IudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIEc9e307KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9dnIo''@;'; put 'put ''USk7c3dpdGNoKG9lWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6Ry5yZ2I9b2UudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpHLnJnYj1vZS5sYXN0''@;'; put 'put ''Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNh''@;'; put 'put ''c2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+Ijpj''@;'; put 'put ''YXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09b2VbMF0uY2hhckF0KDEpPyhSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0lrLmluZGV4T2Yob2VbMF0pXT1HLEc9e30p''@;'; put 'put ''OkcubmFtZT1vZVswXS5zbGljZSgzLG9lWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBlQigpe31mdW5jdGlvbiB0Qigpe312YXIgbkI9LzxhOmNs''@;'; put 'put ''clNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sUms9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxzbmU9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sckI9LzxhOnRoZW1lRWxlbWVudHMoW14+XSop''@;'; put 'put ''Pltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBFQyhTLFIpe2lmKCFTfHwwPT09Uy5sZW5ndGgpcmV0dXJuIEVDKGlCKCkpO3ZhciBrLEc9e307aWYoIShrPVMubWF0Y2gockIpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIExrKFMsUixrKXt2YXIgRztSLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixuQixRVl0sWyJmb250U2NoZW1lIixSayxlQl0sWyJmbXRTY2hlbWUiLHNuZSx0Ql1dLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoIShHPVMubWF0Y2goUVsxXSkpKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcihRWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMiKTtRWzJdKEcsUixrKX0pfShrWzBdLEcsUiksRy5yYXc9UyxHfWZ1bmN0aW9uIGlCKFMsUil7aWYoUiYmUi50aGVtZVhMU1gpcmV0dXJuIFIudGhlbWVYTFNYO2lmKFMmJiJzdHJpbmciPT10eXBlb2YgUy5yYXcpcmV0''@;'; put 'put ''dXJuIFMucmF3O3ZhciBrPVtJaV07cmV0dXJuIGtbay5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0iT2ZmaWNlIFRoZW1lIj4nLGtbay5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRz''@;'; put 'put ''PiIsa1trLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPicsa1trLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxh''@;'; put 'put ''c3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxrW2subGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsa1trLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+PC9hOmx0Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNy''@;'; put 'put ''Z2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLGtbay5s''@;'; put 'put ''ZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2''@;'; put 'put ''NDYiLz48L2E6YWNjZW50Nj4nLGtbay5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsa1trLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz48L2E6Zm9sSGxpbms+JyxrW2subGVuZ3RoXT0iPC9hOmNsclNj''@;'; put 'put ''aGVtZT4iLGtbay5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1''@;'; put 'put ''YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+Jyxr''@;'; put 'put ''W2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0''@;'; put 'put ''eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIi''@;'; put 'put ''IHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i''@;'; put 'put ''R3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhd''@;'; put 'put ''PSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVm''@;'; put 'put ''YWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIg''@;'; put 'put ''dHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQg''@;'; put 'put ''c2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5n''@;'; put 'put ''dGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNl''@;'; put 'put ''PSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxrW2subGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSI8YTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZh''@;'; put 'put ''Y2U9IkNhbGlicmkiLz4nLGtbay5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBj''@;'; put 'put ''M1x1MzBhZiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxrW2subGVuZ3RoXT0nPGE6''@;'; put 'put ''Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIv''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRh''@;'; put 'put ''Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJU''@;'; put 'put ''dW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNl''@;'; put 'put ''PSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLGtb''@;'; put 'put ''ay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIv''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVm''@;'; put 'put ''YWNlPSJLYWxpbmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2lu''@;'; put 'put ''aCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09Jzxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+''@;'; put 'put ''IixrW2subGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxrW2subGVuZ3RoXT0nPGE6Z3JhZEZp''@;'; put 'put ''bGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4n''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVt''@;'; put 'put ''ZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicsa1trLmxl''@;'; put 'put ''bmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48''@;'; put 'put ''YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAw''@;'; put 'put ''MDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhd''@;'; put 'put ''PSI8L2E6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1''@;'; put 'put ''MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmls''@;'; put 'put ''bD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2''@;'; put 'put ''YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09''@;'; put 'put ''IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpv''@;'; put 'put ''dXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0''@;'; put 'put ''MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09''@;'; put 'put ''IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxh''@;'; put 'put ''OnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJv''@;'; put 'put ''dCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRSaWc+PC9hOnNjZW5lM2Q+JyxrW2subGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZl''@;'; put 'put ''bFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpiZ0ZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2No''@;'; put 'put ''ZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2''@;'; put 'put ''YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRN''@;'; put 'put ''b2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4n''@;'; put 'put ''LGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5n''@;'; put 'put ''dGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hl''@;'; put 'put ''bWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4i''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+Iixr''@;'; put 'put ''W2subGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLGtbay5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLGtbay5sZW5ndGhdPSI8YTpzcERlZj4iLGtbay5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48''@;'; put 'put ''YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2Nl''@;'; put 'put ''bnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLGtbay5sZW5ndGhdPSI8L2E6c3BEZWY+IixrW2subGVuZ3RoXT0iPGE6bG5EZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6''@;'; put 'put ''Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+''@;'; put 'put ''PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOmxuRGVmPiIsa1trLmxlbmd0aF09IjwvYTpvYmplY3REZWZh''@;'; put 'put ''dWx0cz4iLGtbay5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lPiIsay5qb2luKCIiKX1mdW5jdGlvbiAkdihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiktNCxHPVtSXTtzd2l0Y2goUil7Y2FzZSA0OmNhc2Ug''@;'; put 'put ''NTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpHWzFdPWZ1bmN0aW9uIFRDKFMpe3ZhciBSPXt9O3N3aXRjaChSLnhjbHJUeXBlPVMucmVhZF9zaGlmdCgyKSxSLm5UaW50U2hhZGU9Uy5yZWFkX3NoaWZ0KDIpLFIueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6''@;'; put 'put ''Uy5sKz00O2JyZWFrO2Nhc2UgMTpSLnhjbHJWYWx1ZT1mdW5jdGlvbiBvQihTLFIpe3JldHVybiBJbihTLFIpfShTLDQpO2JyZWFrO2Nhc2UgMjpSLnhjbHJWYWx1ZT1NZihTKTticmVhaztjYXNlIDM6Ui54Y2xyVmFsdWU9ZnVuY3Rpb24gT2soUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KX0o''@;'; put 'put ''Uyl9cmV0dXJuIFMubCs9OCxSfShTKTticmVhaztjYXNlIDY6R1sxXT1mdW5jdGlvbiBZMyhTLFIpe3JldHVybiBJbihTLFIpfShTLGspO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpHWzFdPVMucmVhZF9zaGlmdCgxPT09az8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJl''@;'; put 'put ''Y29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK1IrIiAiK2spfXJldHVybiBHfWZ1bmN0aW9uIFBrKFMsUil7Ui5mb3JFYWNoKGZ1bmN0aW9uKGspe3N3aXRjaChrWzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxNDpjYXNl''@;'; put 'put ''IDE1OmJyZWFrO2Nhc2UgMTM6Uy5mb250JiZTLmZvbnQuY29sb3ImJkFycmF5LmlzQXJyYXkoa1sxXS54Y2xyVmFsdWUpJiYoUy5mb250LmNvbG9yLnJnYj1oZChrWzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0aW9uIGlvKFMpe3JldHVybiBTLzkxNDQwMCpEZn1mdW5jdGlvbiBGayhTLFIpe3Zh''@;'; put 'put ''ciBrPXt9O2lmKFMucG9zKWsueD1pbyhTLnBvcy54KSxrLnk9aW8oUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sucj1TLmZyb20ucnx8MCxrLmM9Uy5mcm9tLmN8fDAsUy5mcm9tLmNPZmYmJihrLng9aW8oUy5mcm9tLmNPZmYpKSxTLmZyb20uck9m''@;'; put 'put ''ZiYmKGsueT1pbyhTLmZyb20uck9mZikpfWlmKFMuZXh0KWsudz1pbyhTLmV4dC54KSxrLmg9aW8oUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay5DPVMudG8uYyxrLlI9Uy50by5yLFMudG8uY09mZiYmKGsuWD1pbyhTLnRvLmNPZmYpKSxTLnRvLnJPZmYm''@;'; put 'put ''JihrLlk9aW8oUy50by5yT2ZmKSl9cmV0dXJuIGt9ZnVuY3Rpb24gTDUoUyxSKXt2YXIgaz17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoUy5wb3Mpay54PWlvKFMucG9zLngpLGsueT1pbyhTLnBvcy55KTtlbHNle2lmKCFTLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7ay54PU81KFIs''@;'; put 'put ''Uy5mcm9tLmMsIkMiKStpbyhTLmZyb20uY09mZiksay55PU81KFIsUy5mcm9tLnIsIlIiKStpbyhTLmZyb20uck9mZil9aWYoUy5leHQpay53PWlvKFMuZXh0LngpLGsuaD1pbyhTLmV4dC55KTtlbHNle2lmKCFTLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtrLnc9TzUoUixTLnRvLmMsIkMi''@;'; put 'put ''KStpbyhTLnRvLmNPZmYpLWsueCxrLmg9TzUoUixTLnRvLnIsIlIiKStpbyhTLnRvLnJPZmYpLWsueX1yZXR1cm4ga31mdW5jdGlvbiBBQyhTLFIpe3ZhciBrPXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEsQzotMSxYOi0xLFk6LTF9O3N3aXRjaChTLnR5cGUpe2Nhc2UidHdvQ2VsbEFuY2hv''@;'; put 'put ''ciI6ay5yPVMuZnJvbS5yLGsueT1pbyhTLmZyb20uck9mZiksay5SPVMudG8ucixrLlk9aW8oUy50by5yT2ZmKSxrLmM9Uy5mcm9tLmMsay54PWlvKFMuZnJvbS5jT2ZmKSxrLkM9Uy50by5jLGsuWD1pbyhTLnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2VsbEFuY2hvciI6ay5yPVMuZnJvbS5y''@;'; put 'put ''LGsueT1pbyhTLmZyb20uck9mZik7dmFyIEc9UmYoUixrLnIsay55K2lvKFMuZXh0LnkpKTtrLlI9R1swXSxrLlk9R1sxXSxrLmM9Uy5mcm9tLmMsay54PWlvKFMuZnJvbS5jT2ZmKTt2YXIgUT1HMyhSLGsuYyxrLngraW8oUy5leHQueCkpO2suQz1RWzBdLGsuWD1RWzFdO2JyZWFrO2Nhc2Ui''@;'; put 'put ''YWJzb2x1dGVBbmNob3IiOnZhciBvZT1SZihSLDAsaW8oUy5wb3MueSkpO2sucj1vZVswXSxrLnk9b2VbMV07dmFyIGdlPVJmKFIsay5yLGsueStpbyhTLmV4dC55KSk7ay5SPWdlWzBdLGsuWT1nZVsxXTt2YXIgcGU9UmYoUiwwLGlvKFMucG9zLngpKTtrLmM9cGVbMF0say54PXBlWzFdO3Zh''@;'; put 'put ''ciB5ZT1SZihSLGsuYyxrLngraW8oUy5leHQueCkpO2suQz15ZVswXSxrLlg9eWVbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIitTLnR5cGV9cmV0dXJuIGt9ZnVuY3Rpb24gSGsoUyxSKXt2YXIgaz1TLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pO1JbIiFwb3MiXT17''@;'; put 'put ''Yzora1swXSx4OitrWzFdLHI6K2tbMl0seTora1szXSxDOitrWzRdLFg6K2tbNV0sUjora1s2XSxZOitrWzddfX1mdW5jdGlvbiBsQihTLFIsayl7dmFyIEc9LTE7aWYobnVsbCE9Uy5SfHxudWxsIT1TLkMpRz0wO2Vsc2V7aWYobnVsbD09Uy54fHxudWxsPT1TLnl8fG51bGw9PVMud3x8bnVs''@;'; put 'put ''bD09Uy5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmluZ2lmeShTKTtHPTErMiohKFMuY3x8Uy5yKX1pZihHIT1SKXtzd2l0Y2goUil7Y2FzZSAwOmNhc2UgMTppZigzIT1HKWJyZWFrO3ZhciBRPUczKGssUy5jfHwwLFMueHx8MCk7Uy5jPVFbMF0sUy54PVFbMV07dmFy''@;'; put 'put ''IG9lPVJmKGssUy5yfHwwLFMueXx8MCk7Uy5yPW9lWzBdLFMueT1vZVsxXTticmVhaztjYXNlIDM6aWYoMz09RylicmVhazt2YXIgZ2U9Uy5jfHwwLHBlPVMueHx8MDtkZWxldGUgUy5jLGRlbGV0ZSBTLngsUy54PShnZT9LdihrLGdlKTowKStwZTt2YXIgeWU9Uy5yfHwwLFBlPVMueXx8MDtk''@;'; put 'put ''ZWxldGUgUy5yLGRlbGV0ZSBTLnksUy55PSh5ZT9PNChrLHllKTowKStQZTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUn1zd2l0Y2goUil7Y2FzZSAwOmlmKDA9PUcpYnJlYWs7dmFyIE5lPUczKGssUy5jfHwwLChTLnh8fDApK1Mudyk7''@;'; put 'put ''ZGVsZXRlIFMudyxTLkM9TmVbMF0sUy5YPU5lWzFdO3ZhciBZZT1SZihrLFMucnx8MCwoUy55fHwwKStTLmgpO2RlbGV0ZSBTLmgsUy5SPVllWzBdLFMuWT1ZZVsxXTticmVhaztjYXNlIDE6Y2FzZSAzOmlmKDAhPUcpYnJlYWs7dmFyIGV0PVMuQ3x8MCxjdD1TLlh8fDA7ZGVsZXRlIFMuQyxk''@;'; put 'put ''ZWxldGUgUy5YLFMudz1LdihrLGV0KStjdC0oUy5jP0t2KGssUy5jKTowKS0oUy54fHwwKTt2YXIgRXQ9Uy5SfHwwLGF0PVMuWXx8MDtkZWxldGUgUy5SLGRlbGV0ZSBTLlksUy5oPU80KGssRXQpK2F0LShTLnI/TzQoayxTLnIpOjApLShTLnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29u''@;'; put 'put ''dmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitSfX19ZnVuY3Rpb24gY0IoUyl7dmFyIFI9W1MuY3x8MCxNYXRoLnJvdW5kKFMueHx8MCksUy5yfHwwLE1hdGgucm91bmQoUy55fHwwKV07cmV0dXJuKFI9Ui5jb25jYXQoUy5oJiZTLnc/W1JbMF0sTWF0aC5yb3VuZChSWzFdK1Mudyks''@;'; put 'put ''UlsyXSxNYXRoLnJvdW5kKFJbM10rUy5oKV06W1MuQ3x8MCxNYXRoLnJvdW5kKFMuWHx8MCksUy5SfHwwLE1hdGgucm91bmQoUy5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIE80KFMsUil7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1SPj0wOyl7dmFyIEc9KChTWyIhcm93cyJd''@;'; put 'put ''fHxbXSlbUl18fHt9KS5ocHg7bnVsbD09RyYmKEc9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09RyYmKEc9MjQpLGsrPUd9cmV0dXJuIGt9ZnVuY3Rpb24gS3YoUyxSKXtpZighUylyZXR1cm4gMDtmb3IodmFyIGs9MDstLVI+PTA7KXt2YXIgRz0oKFNbIiFj''@;'; put 'put ''b2xzIl18fFtdKVtSXXx8e30pLndweDtpZihudWxsPT1HJiYoRz0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1HKXt2YXIgUT17d2NoOjguNDN9O1EwKFEpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW1JdPVEpLEc9US53cHh9ays9R31yZXR1cm4ga31mdW5j''@;'; put 'put ''dGlvbiBPNShTLFIsayl7cmV0dXJuIkMiPT1rP0t2KFMsUik6TzQoUyxSKX1mdW5jdGlvbiBSZihTLFIsayl7dmFyIEc9W1Isa107aWYoIVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIXJvd3MiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbikrK0dbMF07ZWxzZXt2YXIgb2U9US5o''@;'; put 'put ''cHg7aWYobnVsbD09b2UmJihvZT0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1vZSYmKG9lPXNoKDE1KSksR1sxXTxvZSlicmVhaztHWzBdKyssR1sxXS09b2V9fXJldHVybiBHfWZ1bmN0aW9uIEczKFMsUixrKXt2YXIgRz1bUixrXTtpZighUylyZXR1cm4g''@;'; put 'put ''Rztmb3IoOzspe3ZhciBRPShTWyIhY29scyJdfHxbXSlbR1swXV18fHt9O2lmKFEuaGlkZGVufHwwPT09US53cHgpKytHWzBdO2Vsc2V7dmFyIG9lPVEud3B4O2lmKG51bGw9PW9lJiYob2U9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09b2Upe3ZhciBnZT17''@;'; put 'put ''d2NoOjguNDN9O1EwKGdlKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtHWzBdXT1nZSksb2U9Z2Uud3B4fWlmKEdbMV08b2UpYnJlYWs7R1swXSsrLEdbMV0tPW9lfX1yZXR1cm4gR31mdW5jdGlvbiBQMChTKXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgUz9TLnRvU3RyaW5n''@;'; put 'put ''KDE2KTpTKSkuc2xpY2UoLTYpfWZ1bmN0aW9uIGdkKFMsUixrKXt2YXIgRz0ic3RyaW5nIj09dHlwZW9mIFI/ISFrOiEhUjsic3RyaW5nIiE9dHlwZW9mIFImJihSPSJjb2xvciIpO3ZhciBRPSI8IitSKyIgIjtyZXR1cm4gUy5hdXRvP1ErJ2F1dG89IjEiLz4nOlMuaW5kZXgmJm51bGw9PVMu''@;'; put 'put ''cmdiP1ErJ2luZGV4ZWQ9IicrUy5pbmRleCsnIi8+JzpudWxsIT1TLnRoZW1lP1ErJ3RoZW1lPSInK1MudGhlbWUrJyInKyhTLnRpbnQ/JyB0aW50PSInK1MudGludCsnIic6IiIpKyIvPiI6bnVsbCE9Uy5yZ2I/USsncmdiPSInKyhHPyJGRiI6IiIpK1AwKFMucmdiKSsnIi8+JzpRKyIvPiJ9''@;'; put 'put ''ZnVuY3Rpb24gUDQoUyxSKXtpZighU3x8bnVsbD09Uy5yZ2IpcmV0dXJuIFI7Zm9yKHZhciBrPSgiMDAwMDAwIitTLnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxHPVtrLnNsaWNlKDAsMiksay5zbGljZSgyLDQpLGsuc2xpY2UoNCw2KV0ubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gcGFy''@;'; put 'put ''c2VJbnQoZ2UsMTYpfSksUT0wO1E8cjAubGVuZ3RoOysrUSl7dmFyIG9lPXIwW1FdO2lmKG9lWzBdPT1HWzBdJiZvZVsxXT09R1sxXSYmb2VbMl09PUdbMl0pcmV0dXJuIFF9cmV0dXJuIHIwLmxlbmd0aDw2ND8ocjAucHVzaChbR1swXSxHWzFdLEdbMl1dKSxyMC5sZW5ndGgtMSk6Un1mdW5j''@;'; put 'put ''dGlvbiB0MShTKXt2YXIgUj1bIiIsIiIsIiJdO2lmKCFTKXJldHVybltdO3ZhciBrPSIiLEc9UyYmUy5zP2Z1bmN0aW9uIHF2KFMpe3ZhciBSPVsiIiwiIl07aWYoIVMpcmV0dXJuIFI7aWYoUy5zeiYmKFJbMF0rPSImIitTLnN6LFJbMV09IiYxMiIrUlsxXSksUy5uYW1lJiYoUlswXSs9JyYi''@;'; put 'put ''JytTLm5hbWUrJyxSZWd1bGFyIicsUlsxXT0nJiItLFJlZ3VsYXIiJytSWzFdKSxTLmJvbGQmJihSWzBdKz0iJkIiLFJbMV09IiZCIitSWzFdKSxTLnVuZGVybGluZSl7dmFyIGs9Mj09Uy51bmRlcmxpbmU/IiZFIjoiJlUiO1JbMF0rPWssUlsxXT1rK1JbMV19cmV0dXJuIFMuaXRhbGljJiYo''@;'; put 'put ''UlswXSs9IiZJIixSWzFdPSImSSIrUlsxXSksUy5jb2xvciYmbnVsbCE9Uy5jb2xvci5yZ2ImJihSWzBdKz0iJksiK1AwKFMuY29sb3IucmdiKSxSWzFdKz0iJkswMDAwMDAiKSxTLnN0cmlrZSYmKFJbMF0rPSImUyIsUlsxXT0iJlMiK1JbMV0pLCJzdXBlciI9PVMudmFsaWduJiYoUlswXSs9''@;'; put 'put ''IiZYIixSWzFdPSImWCIrUlsxXSksInN1YiI9PVMudmFsaWduJiYoUlswXSs9IiZZIixSWzFdPSImWSIrUlsxXSksUn0oUy5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgUz9bUyxTLFNdOm51bGwhPVMuZmlyc3R8fG51bGwhPVMuZXZlbnx8bnVsbCE9Uy5vZGQ/KG51bGwhPVMu''@;'; put 'put ''b2RkJiYoUlswXT10MShTLm9kZClbMF0pLHZvaWQgMD09PVMuZmlyc3QmJlJbMF0mJihSWzFdPVJbMF0pLG51bGwhPVMuZmlyc3QmJihSWzFdPXQxKFMuZmlyc3QpWzBdKSxudWxsIT1TLmV2ZW4mJihSWzJdPXQxKFMuZXZlbilbMF0pLFIpOlMubGVmdHx8Uy5jZW50ZXJ8fFMucmlnaHQ/KFMu''@;'; put 'put ''bGVmdCYmKGsrPSImTCIrdDEoUy5sZWZ0KVswXSksUy5jZW50ZXImJihrKz0iJkMiK3QxKFMuY2VudGVyKVswXSksUy5yaWdodCYmKGsrPSImUiIrdDEoUy5yaWdodClbMF0pLFtrLGssa10pOm51bGwhPVMudj9baz1HWzBdK1Mudi5yZXBsYWNlKC8mL2csIiYmIikrR1sxXSxrLGtdOm51bGwh''@;'; put 'put ''PVMudz9baz1HWzBdK1MudytHWzFdLGssa106QXJyYXkuaXNBcnJheShTLlIpPyhTLlIuZm9yRWFjaChmdW5jdGlvbihRKXtrKz10MShRKVswXX0pLFtrLGssa10pOltdfXZhciBuOD17MToiTGV0dGVyIiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQi''@;'; put 'put ''LDExOiJBNSIsMTI6IkI0IiwxMzoiQjUiLDE0OiJGb2xpbyIsMjA6IkVudmVsb3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sdUI9VmUobjgpO0thLkNPTk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVj''@;'; put 'put ''dGlvbnMiO3ZhciBoQj1QcigiZXh0ZXJuYWxMaW5rIixudWxsLHt4bWxuczpZaS5tYWluWzBdfSk7S2EuSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixLYS5EUkFXPSJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciO3ZhciBwQj17dDoidG9wIixjdHI6ImNlbnRlciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRpc3Q6InRvcCJ9LFA1PXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50''@;'; put 'put ''ZXIiLGp1c3RMb3c6ImNlbnRlciIsbDoibGVmdCIscjoicmlnaHQiLHRoYWlEaXN0OiJjZW50ZXIifTtmdW5jdGlvbiBtQigpe3ZhciBTPVtJaV07cmV0dXJuIFMucHVzaCgnPHhkcjp3c0RyIHhtbG5zOnhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8y''@;'; put 'put ''MDA2L3NwcmVhZHNoZWV0RHJhd2luZyIgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iLz4nKSxTLmpvaW4oIiIpfWZ1bmN0aW9uIGNuZShTKXt2YXIgayxSPVNbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT1TWyIhZGF0YXR5''@;'; put 'put ''cGUiXT8oKGs9Ui5tYXRjaCgvXmRhdGE6LiosLykpJiYoUj1SLnNsaWNlKGtbMF0ubGVuZ3RoKSksX2UuZGVjb2RlKFIpKTpSfUthLlRBQkxFPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIjt2YXIgYkI9''@;'; put 'put ''LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gT0MoUyxSLGssRyl7dmFyIFE9WzIxNjAwLDIxNjAwXSxvZT1bIm0wLDBsMCIsUVsxXSxRWzBdLFFbMV0sUVswXSwiMHhlIl0uam9pbigiLCIpLGdlPVtQcigieG1s''@;'; put 'put ''IixudWxsLHsieG1sbnM6diI6eWwudiwieG1sbnM6byI6eWwubywieG1sbnM6eCI6eWwueCwieG1sbnM6bXYiOnlsLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0s''@;'; put 'put ''cGU9MTAyNCpTLHllPWt8fFtdO3llLmxlbmd0aD4wJiZnZS5wdXNoKFByKCJ2OnNoYXBldHlwZSIsW1ByKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxQcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6''@;'; put 'put ''ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxQcigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpRLmpvaW4oIiwiKSwibzpzcHQiOjIwMSxwYXRoOm9lfSkpLHllLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oTmUpeysrcGUsZ2U9Z2UuY29uY2F0KGZ1bmN0aW9uIGk4KFMsUil7dmFyIGs9e2lkOiJfeDAwMDBfcyIrUix0eXBlOiIjX3gwMDAwX3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdfHwi''@;'; put 'put ''TGlzdCI9PVNbIiF0eXBlIl18fCJEcm9wIj09U1siIXR5cGUiXSkmJihrLnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT1TWyIhdHlwZSJdJiYoay5maWxsZWQ9ImYiKTt2YXIgRz0iIjtTLnQmJlBDW1NbIiF0eXBlIl1dJiYoRz1QQ1tTWyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxMcihTLnQpKSk7''@;'; put 'put ''dmFyIFE9W107cmV0dXJuIFMubWFjcm8mJlEucHVzaChIYSgieDpGbWxhTWFjcm8iLFMubWFjcm8pKSxTLmxpbmsmJlEucHVzaChIYSgieDpGbWxhTGluayIsUy5saW5rKSksUy52YWwmJlEucHVzaChIYSgiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdPyJ4OkNo''@;'; put 'put ''ZWNrZWQiOiJ4OlZhbCIsU3RyaW5nKFMudmFsKSkpLFMucmVmJiZRLnB1c2goSGEoIng6Rm1sYVJhbmdlIixTLnJlZikpLFMuc2VsJiYiTGlzdCI9PVNbIiF0eXBlIl0mJlEucHVzaChIYSgieDpTZWxUeXBlIixTLnNlbCkpLFMubWluJiZRLnB1c2goSGEoIng6TWluIixTdHJpbmcoUy5taW4p''@;'; put 'put ''KSksUy5tYXgmJlEucHVzaChIYSgieDpNYXgiLFN0cmluZyhTLm1heCkpKSxTLnN0ZXAmJlEucHVzaChIYSgieDpJbmMiLFN0cmluZyhTLnN0ZXApKSksUy5wYWdlJiZRLnB1c2goSGEoIng6UGFnZSIsU3RyaW5nKFMucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrTHUoaykrIj4iXSku''@;'; put 'put ''Y29uY2F0KEZDW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFtHXSkuY29uY2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK1NbIiF0eXBlIl0rJyI+JyxIYSgieDpBbmNob3IiLGNCKFNbIiFwb3MiXSkpLEhhKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChRKS5jb25j''@;'; put 'put ''YXQoeUJbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShOZSxwZSkpfSk7dmFyIFBlPVJ8fFtdO3JldHVybiBQZS5sZW5ndGg+MCYmZ2UucHVzaChQcigidjpzaGFwZXR5cGUiLFtQcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToi''@;'; put 'put ''bWl0ZXIifSksUHIoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpRLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOm9lfSkpLFBlLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''TmUpeysrcGUsZ2U9Z2UuY29uY2F0KGZ1bmN0aW9uIEp2KFMsUixrKXt2YXIgRz1ObyhTWzBdKSxRPVNbMV0uZmlsbHx8e307U1sxXS5zJiYoUT17dHlwZTpTWzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LFNbMV0ucy5mZ0NvbG9yJiYoUS5jb2xvcjI9US5jb2xvcjE9IiMiK1AwKFNbMV0u''@;'; put 'put ''cy5mZ0NvbG9yLnJnYikpLFNbMV0ucy5iZ0NvbG9yJiYoUS5jb2xvcjI9IiMiK1AwKFNbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgb2U9e2NvbG9yMjpRLmNvbG9yMnx8IiNCRUZGODIiLHR5cGU6US50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1vZS50eXBlJiYob2UuYW5nbGU9Ii0x''@;'; put 'put ''ODAiKTt2YXIgZ2U9ImdyYWRpZW50Ij09b2UudHlwZT9QcigibzpmaWxsIixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0pOm51bGwscGU9UHIoInY6ZmlsbCIsZ2Usb2UpLHllPXt9O1NbMV0uc2hhZG93JiYoU1sxXS5zaGFkb3cuY29sb3ImJih5ZS5jb2xv''@;'; put 'put ''cj1TWzFdLnNoYWRvdy5jb2xvciksU1sxXS5zaGFkb3cub24mJih5ZS5vbj1TWzFdLnNoYWRvdy5vbikpLHllLm9ic2N1cmVkPSJ0Ijt2YXIgUGU9ITAsTmU9ITAsWWU9U1sxXVsiIXBvcyJdP3F0KFNbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gWWUmJihOZT1udWxsPT1ZZS5SJiZudWxsPT1Z''@;'; put 'put ''ZS5DJiZudWxsPT1ZZS5YJiZudWxsPT1ZZS5ZLFBlPSFZZS5yJiYhWWUuYyxsQihZZSwwLGspKSxbIjx2OnNoYXBlIitMdSh7aWQ6Il94MDAwMF9zIitSLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0''@;'; put 'put ''O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTAiKyhTWzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOlEuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KFNbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+IixwZSxQcigi''@;'; put 'put ''djpzaGFkb3ciLG51bGwseWUpLFByKCJ2OnBhdGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxQZT8iPHg6''@;'; put 'put ''TW92ZVdpdGhDZWxscy8+IjoiIixOZT8iPHg6U2l6ZVdpdGhDZWxscy8+IjoiIixIYSgieDpBbmNob3IiLFllP2NCKFllKTpTWzFdLnJhd2FuY2hvcnx8W0cuYysxLDAsRy5yKzEsMCxHLmMrMywyMCxHLnIrNSwyMF0uam9pbigiLCIpKSxIYSgieDpBdXRvRmlsbCIsIkZhbHNlIiksSGEoIng6''@;'; put 'put ''Um93IixTdHJpbmcoRy5yKSksSGEoIng6Q29sdW1uIixTdHJpbmcoRy5jKSksU1sxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oTmUscGUsRykpfSksZ2UucHVzaCgiPC94bWw+IiksZ2Uuam9pbigiIil9dmFyIHlCPXtCdXR0b246''@;'; put 'put ''WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9G''@;'; put 'put ''aWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0''@;'; put 'put ''b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwv''@;'; put 'put ''eDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwv''@;'; put 'put ''eDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8''@;'; put 'put ''eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8''@;'; put 'put ''eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxQQz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYg''@;'; put 'put ''c3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmds''@;'; put 'put ''ZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6''@;'; put 'put ''YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9''@;'; put 'put ''J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6''@;'; put 'put ''ImRhZnVxIn0sRkM9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJv''@;'; put 'put ''cDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xs''@;'; put 'put ''OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4''@;'; put 'put ''dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIEJrKFMsUixrLEcpe3ZhciBRPXsi''@;'; put 'put ''IWlkIjp7fX0sb2U9W1ByKCJ4bWwiLG51bGwseyJ4bWxuczp2Ijp5bC52LCJ4bWxuczpvIjp5bC5vLCJ4bWxuczp4Ijp5bC54fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSkseyJ2OmV4dCI6''@;'; put 'put ''ImVkaXQifSksJzx2OnNoYXBldHlwZSBpZD0iX3gwMDAwX3Q3NSIgY29vcmRzaXplPSIyMTYwMCwyMTYwMCIgbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJtQDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiIHN0cm9rZWQ9ImYiPicsJzx2OnN0cm9rZSBqb2lu''@;'; put 'put ''c3R5bGU9Im1pdGVyIi8+JywiPHY6Zm9ybXVsYXM+IiwnPHY6ZiBlcW49ImlmIGxpbmVEcmF3biBwaXhlbExpbmVXaWR0aCAwIi8+JywnPHY6ZiBlcW49InN1bSBAMCAxIDAiLz4nLCc8djpmIGVxbj0ic3VtIDAgMCBAMSIvPicsJzx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPicsJzx2OmYgZXFu''@;'; put 'put ''PSJwcm9kIEAzIDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+JywnPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxXaWR0aCIvPics''@;'; put 'put ''Jzx2OmYgZXFuPSJzdW0gQDggMjE2MDAgMCIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMTAgMjE2MDAgMCIvPicsIjwvdjpmb3JtdWxhcz4iLCc8djpwYXRoIG86ZXh0cnVzaW9ub2s9ImYiIGdyYWRpZW50c2hhcGVvaz0idCIg''@;'; put 'put ''bzpjb25uZWN0dHlwZT0icmVjdCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIGFzcGVjdHJhdGlvPSJ0Ii8+JywiPC92OnNoYXBldHlwZT4iXSxnZT0xO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7R1twZV0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbih5ZSl7R1twZV1beWVdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oUGUpe2lmKEFycmF5LmlzQXJyYXkoR1twZV1beWVdW1BlXSkpZm9yKHZhciBOZT0wO05lPEdbcGVdW3llXVtQZV0ubGVuZ3RoOysrTmUpaWYoR1twZV1beWVdW1BlXVtO''@;'; put 'put ''ZV0pe3ZhciBZZT1HW3BlXVt5ZV1bUGVdW05lXTtpZigicmVtb3RlIj09WWVbIiFkYXRhdHlwZSJdKXRocm93IkNhbm5vdCB1c2UgbGlua2VkIGltYWdlIGluIGhlYWRlciBvciBmb290ZXIiO2Zvcig7cmkoUywieGwvbWVkaWEvaW1hZ2UiK2dlKyIuanBnIik7KSsrZ2U7Uy5maWxlKCJ4bC9t''@;'; put 'put ''ZWRpYS9pbWFnZSIrZ2UrIi5qcGciLGNuZShZZSkse2JpbmFyeTohMH0pLEVyKFEsLTEsIi4uL21lZGlhL2ltYWdlIitnZSsiLmpwZyIsS2EuSU1HKTt2YXIgZXQ9Il94MDAwMF9zIisoMTAyNStZZS5fY250KSxjdD0icG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9w''@;'; put 'put ''OjA7ei1pbmRleDoiKyhZZS5fY250KzEpKyI7IjtjdCs9IndpZHRoOiIrWWVbIiFwb3MiXS53KyJweDsiLGN0Kz0iaGVpZ2h0OiIrWWVbIiFwb3MiXS5oKyJweDsiO3ZhciBFdD1QZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsib2RkIiE9PXll''@;'; put 'put ''JiYoRXQrPXllLnRvVXBwZXJDYXNlKCkpLEdbcGVdW3llXVtQZV0ubGVuZ3RoPjEmJihFdCs9TmUpLG9lLnB1c2goUHIoInY6c2hhcGUiLFsnPHY6aW1hZ2VkYXRhIG86cmVsaWQ9InJJZCcrKFllLl9jbnQrMSkrJyIgbzp0aXRsZT0ic2hlZXRqcyIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQi''@;'; put 'put ''IHJvdGF0aW9uPSJ0Ii8+J10uam9pbigiIikse2lkOkV0LCJvOnNwaWQiOmV0LHR5cGU6IiNfeDAwMDBfdDc1IixzdHlsZTpjdH0pKX19KX0pfSksb2UucHVzaCgiPC94bWw+IiksUy5maWxlKCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitrKyJIRi52bWwiLG9lLmpvaW4oIiIpKSxTLmZpbGUo''@;'; put 'put ''InhsL2RyYXdpbmdzL19yZWxzL3ZtbERyYXdpbmciK2srIkhGLnZtbC5yZWxzIixraShRKSl9S2EuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIFF2PVByKCJjb21tZW50cyIsbnVs''@;'; put 'put ''bCx7eG1sbnM6WWkubWFpblswXX0pO2Z1bmN0aW9uIEhDKFMpe3ZhciBSPVtJaSxRdl0saz1bXTtyZXR1cm4gUi5wdXNoKCI8YXV0aG9ycz4iKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT1McihRLmEpO2suaW5kZXhPZihvZSk+LTF8fChr''@;'; put 'put ''LnB1c2gob2UpLFIucHVzaCgiPGF1dGhvcj4iK29lKyI8L2F1dGhvcj4iKSl9KX0pLFIucHVzaCgiPC9hdXRob3JzPiIpLFIucHVzaCgiPGNvbW1lbnRMaXN0PiIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5wdXNoKCc8Y29tbWVudCByZWY9Iicr''@;'; put 'put ''R1swXSsnIiBhdXRob3JJZD0iJytrLmluZGV4T2YoTHIoUS5hKSkrJyI+PHRleHQ+JyksUi5wdXNoKFEuUj9RcyhRLlIpOkhhKCJ0IixudWxsPT1RLnQ/IiI6THIoUS50KSkpLFIucHVzaCgiPC90ZXh0PjwvY29tbWVudD4iKX0pfSksUi5wdXNoKCI8L2NvbW1lbnRMaXN0PiIpLFIubGVuZ3Ro''@;'; put 'put ''PjImJihSW1IubGVuZ3RoXT0iPC9jb21tZW50cz4iLFJbMV09UlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX12YXIgd0I9Z3U7ZnVuY3Rpb24gTkMoUyl7dmFyIFI9YmkoKSxrPVtdO3JldHVybiBGcihSLCJCcnRCZWdpbkNvbW1lbnRzIiksRnIoUiwiQnJ0QmVnaW5Db21tZW50''@;'; put 'put ''QXV0aG9ycyIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7ay5pbmRleE9mKFEuYSk+LTF8fChrLnB1c2goUS5hLnNsaWNlKDAsNTQpKSxGcihSLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiB1bmUoUyl7cmV0dXJuIEZjKFMuc2xpY2UoMCw1NCkp''@;'; put 'put ''fShRLmEpKSl9KX0pLEZyKFIsIkJydEVuZENvbW1lbnRBdXRob3JzIiksRnIoUiwiQnJ0QmVnaW5Db21tZW50TGlzdCIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7US5pYXV0aG9yPWsuaW5kZXhPZihRLmEpO3ZhciBvZT17czpObyhHWzBdKSxlOk5v''@;'; put 'put ''KEdbMF0pfTtGcihSLCJCcnRCZWdpbkNvbW1lbnQiLGZ1bmN0aW9uIF9CKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDM2KSksUi53cml0ZV9zaGlmdCg0LFNbMV0uaWF1dGhvciksZ2YoU1swXSxSKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUn0oW29lLFFdKSksUS50JiZRLnQubGVuZ3RoPjAmJkZyKFIsIkJydENvbW1lbnRUZXh0IixmdW5jdGlvbiBuaChTLFIpe3ZhciBrPSExO3JldHVybiBudWxsPT1SJiYoaz0hMCxSPWJuKDIzKzQqUy50Lmxlbmd0aCkpLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwxKSxGYyhTLnQsUiksUi53cml0ZV9zaGlmdCg0LDEpLGZ1bmN0aW9uIGN2KFMsUil7Unx8KFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoMixTLmljaHx8MCksUi53cml0ZV9zaGlmdCgyLFMuaWZudHx8MCl9KHtpY2g6MCxpZm50OjB9LFIpLGs/Ui5zbGljZSgwLFIubCk6Un0oUSkpLEZyKFIs''@;'; put 'put ''IkJydEVuZENvbW1lbnQiKSxkZWxldGUgUS5pYXV0aG9yfSl9KSxGcihSLCJCcnRFbmRDb21tZW50TGlzdCIpLEZyKFIsIkJydEVuZENvbW1lbnRzIiksUi5lbmQoKX12YXIgVWs9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsWWs9WyJ4bHNiIiwieGxzbSIsInhsYW0i''@;'; put 'put ''LCJiaWZmOCIsInhsYSJdO0thLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixLYS5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBz''@;'; put 'put ''L3hsTWFjcm9zaGVldCI7dmFyIEg1PWZ1bmN0aW9uKCl7dmFyIFM9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxSPXtyOjAsYzowfTtmdW5jdGlvbiBrKEcsUSxvZSxnZSl7dmFyIHBlPSExLHll''@;'; put 'put ''PSExOzA9PW9lLmxlbmd0aD95ZT0hMDoiWyI9PW9lLmNoYXJBdCgwKSYmKHllPSEwLG9lPW9lLnNsaWNlKDEsLTEpKSwwPT1nZS5sZW5ndGg/cGU9ITA6IlsiPT1nZS5jaGFyQXQoMCkmJihwZT0hMCxnZT1nZS5zbGljZSgxLC0xKSk7dmFyIFBlPW9lLmxlbmd0aD4wPzB8cGFyc2VJbnQob2Us''@;'; put 'put ''MTApOjAsTmU9Z2UubGVuZ3RoPjA/MHxwYXJzZUludChnZSwxMCk6MDtyZXR1cm4gcGU/TmUrPVIuYzotLU5lLHllP1BlKz1SLnI6LS1QZSxRKyhwZT8iIjoiJCIpK1RhKE5lKSsoeWU/IiI6IiQiKStqaShQZSl9cmV0dXJuIGZ1bmN0aW9uKFEsb2Upe3JldHVybiBSPW9lLFEucmVwbGFjZShT''@;'; put 'put ''LGspfX0oKSxtMj0vKF58W14uX0EtWjAtOV0pKFskXT8pKFtBLVpdezEsMn18W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdKShbJF0/KSgxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9''@;'; put 'put ''KSg/IVtfLlwoQS1aYS16MC05XSkvZyxIND1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihSLGspe3JldHVybiBSLnJlcGxhY2UobTIsZnVuY3Rpb24oRyxRLG9lLGdlLHBlLHllKXt2YXIgUGU9Q2EoZ2UpLShvZT8wOmsuYyksTmU9X28oeWUpLShwZT8wOmsucik7cmV0dXJuIFErIlIiKygw''@;'; put 'put ''PT1OZT8iIjpwZT9OZSsxOiJbIitOZSsiXSIpKyJDIisoMD09UGU/IiI6b2U/UGUrMToiWyIrUGUrIl0iKX0pfX0oKTtmdW5jdGlvbiBHayhTLFIpe3JldHVybiBTLnJlcGxhY2UobTIsZnVuY3Rpb24oayxHLFEsb2UsZ2UscGUpe3JldHVybiBHKygiJCI9PVE/UStvZTpUYShDYShvZSkrUi5j''@;'; put 'put ''KSkrKCIkIj09Z2U/Z2UrcGU6amkoX28ocGUpK1IucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihrLEcsUSl7cmV0dXJuIGppKF9vKEcpK1IucikrIjoiK2ppKF9vKFEpK1Iucil9KX1mdW5jdGlvbiBkbmUoUyxSLGspe3ZhciBRPU1zKFIpLnMsb2U9Tm8oayk7cmV0dXJu''@;'; put 'put ''IEdrKFMse3I6b2Uuci1RLnIsYzpvZS5jLVEuY30pfWZ1bmN0aW9uIEVCKFMpe3JldHVybiBTLnJlcGxhY2UoL194bGZuXC4vZywiIil9ZnVuY3Rpb24gYnUoUyl7Uy5sKz0xfWZ1bmN0aW9uIE40KFMsUil7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE9PVI/MToyKTtyZXR1cm5bMTYzODMmayxrPj4x''@;'; put 'put ''NCYxLGs+PjE1JjFdfWZ1bmN0aW9uIFZDKFMsUixrKXt2YXIgRz0yO2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiAkayhTKTsxMj09ay5iaWZmJiYoRz00KX12YXIgUT1TLnJlYWRfc2hpZnQoRyksb2U9Uy5yZWFkX3NoaWZ0KEcpLGdlPU40KFMsMikscGU9TjQoUywyKTty''@;'; put 'put ''ZXR1cm57czp7cjpRLGM6Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfSxlOntyOm9lLGM6cGVbMF0sY1JlbDpwZVsxXSxyUmVsOnBlWzJdfX19ZnVuY3Rpb24gJGsoUyl7dmFyIFI9TjQoUywyKSxrPU40KFMsMiksRz1TLnJlYWRfc2hpZnQoMSksUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJu''@;'; put 'put ''e3M6e3I6UlswXSxjOkcsY1JlbDpSWzFdLHJSZWw6UlsyXX0sZTp7cjprWzBdLGM6USxjUmVsOmtbMV0sclJlbDprWzJdfX19ZnVuY3Rpb24gS2soUyxSLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBBQihTKXt2YXIgUj1ONChTLDIpLGs9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpO3JldHVybntyOlJbMF0sYzprLGNSZWw6UlsxXSxyUmVsOlJbMl19fShTKTt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMTI9PWsuYmlmZj80OjIpLFE9TjQoUywyKTtyZXR1cm57cjpHLGM6UVswXSxjUmVsOlFbMV0sclJlbDpRWzJdfX1mdW5jdGlvbiBCQyhTKXt2YXIgUj1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UixjOjI1NSZrLGZRdW90ZWQ6ISEoMTYzODQmayksY1JlbDprPj4xNSxyUmVsOms+PjE1fX1mdW5jdGlvbiBlRChTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gWkMoUyxSKXt2YXIg''@;'; put 'put ''az1bUy5yZWFkX3NoaWZ0KDEpXTtpZigxMj09Uilzd2l0Y2goa1swXSl7Y2FzZSAyOmtbMF09NDticmVhaztjYXNlIDQ6a1swXT0xNjticmVhaztjYXNlIDA6a1swXT0xO2JyZWFrO2Nhc2UgMTprWzBdPTJ9c3dpdGNoKGtbMF0pe2Nhc2UgNDprWzFdPXVvKFMsMSk/IlRSVUUiOiJGQUxTRSIs''@;'; put 'put ''MTIhPVImJihTLmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjprWzFdPU1jW1NbUy5sXV0sUy5sKz0xMj09Uj80Ojg7YnJlYWs7Y2FzZSAwOlMubCs9ODticmVhaztjYXNlIDE6a1sxXT1QbChTKTticmVhaztjYXNlIDI6a1sxXT1YMChTLDAse2JpZmY6Uj4wJiZSPDg/MjpSfSk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitrWzBdKX1yZXR1cm4ga31mdW5jdGlvbiBpRChTLFIsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksUT1bXSxvZT0wO29lIT1HOysrb2UpUS5wdXNoKCgxMj09ay5iaWZmP211OnMyKShTLDgpKTty''@;'; put 'put ''ZXR1cm4gUX1mdW5jdGlvbiBOQihTLFIsayl7dmFyIEc9MCxRPTA7MTI9PWsuYmlmZj8oRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCkpOihRPTErUy5yZWFkX3NoaWZ0KDEpLEc9MStTLnJlYWRfc2hpZnQoMikpLGsuYmlmZj49MiYmay5iaWZmPDgmJigtLUcsMD09LS1RJiYo''@;'; put 'put ''UT0yNTYpKTtmb3IodmFyIG9lPTAsZ2U9W107b2UhPUcmJihnZVtvZV09W10pOysrb2UpZm9yKHZhciBwZT0wO3BlIT1ROysrcGUpZ2Vbb2VdW3BlXT1aQyhTLGsuYmlmZik7cmV0dXJuIGdlfWZ1bmN0aW9uIFY1KFMsUixrKXtyZXR1cm4gUy5sKz0yLFtCQyhTKV19ZnVuY3Rpb24gV0MoUyl7''@;'; put 'put ''cmV0dXJuIFMubCs9NixbXX12YXIgV0I9VjUsWUI9V0MsR0I9V0MsJEI9VjU7ZnVuY3Rpb24gb0QoUyl7cmV0dXJuIFMubCs9MixbRWMoUyksMSZTLnJlYWRfc2hpZnQoMildfXZhciBZQz1WNSxfbmU9b0Qsd25lPVdDLEdDPVY1LENuZT1WNSxTbmU9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIs''@;'; put 'put ''Ij8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxpYj17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIFBCKFMsUixrKXtyZXR1cm4gUy5sKyssayYmMTI9PWsu''@;'; put 'put ''YmlmZj9bUy5yZWFkX3NoaWZ0KDQsImkiKSwwXTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6SW59LDM6e246IlB0Z0FkZCIsZjpidX0sNDp7bjoiUHRnU3ViIixmOmJ1fSw1OntuOiJQdGdNdWwiLGY6YnV9LDY6e246''@;'; put 'put ''IlB0Z0RpdiIsZjpidX0sNzp7bjoiUHRnUG93ZXIiLGY6YnV9LDg6e246IlB0Z0NvbmNhdCIsZjpidX0sOTp7bjoiUHRnTHQiLGY6YnV9LDEwOntuOiJQdGdMZSIsZjpidX0sMTE6e246IlB0Z0VxIixmOmJ1fSwxMjp7bjoiUHRnR2UiLGY6YnV9LDEzOntuOiJQdGdHdCIsZjpidX0sMTQ6e246''@;'; put 'put ''IlB0Z05lIixmOmJ1fSwxNTp7bjoiUHRnSXNlY3QiLGY6YnV9LDE2OntuOiJQdGdVbmlvbiIsZjpidX0sMTc6e246IlB0Z1JhbmdlIixmOmJ1fSwxODp7bjoiUHRnVXBsdXMiLGY6YnV9LDE5OntuOiJQdGdVbWludXMiLGY6YnV9LDIwOntuOiJQdGdQZXJjZW50IixmOmJ1fSwyMTp7bjoiUHRn''@;'; put 'put ''UGFyZW4iLGY6YnV9LDIyOntuOiJQdGdNaXNzQXJnIixmOmJ1fSwyMzp7bjoiUHRnU3RyIixmOmZ1bmN0aW9uIEhCKFMsUixrKXtyZXR1cm4gUy5sKyssVWEoUywwLGspfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIEVuZShTLFIsayl7cmV0dXJuIFMubCs9NSxTLmwrPTIsUy5sKz0y''@;'; put 'put ''PT1rLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBLQihTLFIsayl7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzQ6NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIFVDKFMpe3JldHVybiBTLmwrKyxNY1tTLnJl''@;'; put 'put ''YWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gTjUoUyl7cmV0dXJuIFMubCsrLDAhPT1TLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50IixmOmZ1bmN0aW9uIEZCKFMpe3JldHVybiBTLmwrKyxTLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1''@;'; put 'put ''bmN0aW9uIFY0KFMpe3JldHVybiBTLmwrKyxQbChTKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBnbmUoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzY6MTI9PWsuYmlmZj8xNDo3LFtHXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0''@;'; put 'put ''aW9uIExCKFMsUixrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZjw9Mz8xOjIpO3JldHVybltlaltRXSxwRFtRXSxHXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIE9CKFMsUixrKXt2YXIgRz1TW1MubCsrXSxRPVMucmVh''@;'; put 'put ''ZF9zaGlmdCgxKSxvZT1rJiZrLmJpZmY8PTM/Wzg4PT1HPy0xOjAsUy5yZWFkX3NoaWZ0KDEpXTpmdW5jdGlvbiByRChTKXtyZXR1cm5bU1tTLmwrMV0+PjcsMzI3NjcmUy5yZWFkX3NoaWZ0KDIpXX0oUyk7cmV0dXJuW1EsKDA9PT1vZVswXT9wRDpyUylbb2VbMV1dXX19LDM1OntuOiJQdGdO''@;'; put 'put ''YW1lIixmOmZ1bmN0aW9uIFZCKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsb2U9Uy5yZWFkX3NoaWZ0KCFrfHxrLmJpZmY+PTg/NDoyKTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKz01O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Uy5sKz04O2JyZWFrO2Nhc2UgNTpTLmwrPTEy''@;'; put 'put ''fXJldHVybltHLDAsb2VdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBSQihTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7cmV0dXJuIFMubCs9MSxbRyxLayhTLDAsayldfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gcWsoUyxSLGspe3JldHVyblsoOTYmU1tTLmwrK10pPj41''@;'; put 'put ''LFZDKFMsMCxrKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBhRChTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIi''@;'; put 'put ''LGY6SW59LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpJbn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gYm5lKFMsUixrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1bmN0aW9u''@;'; put 'put ''IHluZShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBTLmwrPTQsay5iaWZmPDgmJlMubC0tLDEyPT1rLmJpZmYmJihTLmwrPTIpLFtHXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIEprKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVy''@;'; put 'put ''biBTLmwrPWsmJmsuYmlmZj44PzEyOmsuYmlmZjw4PzY6OCxbR119fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiB0RChTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPWZ1bmN0aW9uIExmKFMsUixrKXt2YXIgRz1rJiZrLmJpZmY/ay5iaWZmOjg7aWYoRz49MiYm''@;'; put 'put ''Rzw9NSlyZXR1cm4gZnVuY3Rpb24gYTgoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDEpLEc9KDMyNzY4JlIpPj4xNSxRPSgxNjM4NCZSKT4+MTQ7cmV0dXJuIFImPTE2MzgzLDE9PUcmJlI+PTgxOTImJihSLT0xNjM4NCksMT09USYmaz49MTI4JiYoay09MjU2KSx7''@;'; put 'put ''cjpSLGM6ayxjUmVsOlEsclJlbDpHfX0oUyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KEc+PTEyPzQ6Miksb2U9Uy5yZWFkX3NoaWZ0KDIpLGdlPSgxNjM4NCZvZSk+PjE0LHBlPSgzMjc2OCZvZSk+PjE1O2lmKG9lJj0xNjM4MywxPT1wZSlmb3IoO1E+NTI0Mjg3OylRLT0xMDQ4NTc2O2lmKDE9PWdl''@;'; put 'put ''KWZvcig7b2U+ODE5MTspb2UtPTE2Mzg0O3JldHVybntyOlEsYzpvZSxjUmVsOmdlLHJSZWw6cGV9fShTLDAsayk7cmV0dXJuW0csUV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gcG5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9ZnVuY3Rpb24gVEIoUyxSLGspe2lm''@;'; put 'put ''KGsuYmlmZjw4KXJldHVybiAkayhTKTt2YXIgRz1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLFE9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxvZT1ONChTLDIpLGdlPU40KFMsMik7cmV0dXJue3M6e3I6RyxjOm9lWzBdLGNSZWw6b2VbMV0sclJlbDpvZVsyXX0sZTp7cjpRLGM6''@;'; put 'put ''Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfX19KFMsMCxrKTtyZXR1cm5bRyxRXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBuYihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0''@;'; put 'put ''aW9uIHJiKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBCQihTLFIsayl7cmV0dXJuIDU9PWsuYmlmZj9mdW5jdGlvbiBqQihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsaz1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMiwiaSIpO1MubCs9ODt2YXIgRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW1IsayxHXX0oUyk6W1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBuRChTLFIsayl7''@;'; put 'put ''dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gayYmNT09ay5iaWZmJiYoUy5sKz0xMiksW0csUSxLayhTLDAsayldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5jdGlvbiBYayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgyLCJpIik7aWYoayYmNT09PWsuYmlmZilTLmwrPTEyO3JldHVybltHLFEsVkMoUywwLGspXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBvOChTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxvZT00O2lmKGspc3dpdGNo''@;'; put 'put ''KGsuYmlmZil7Y2FzZSA1Om9lPTE1O2JyZWFrO2Nhc2UgMTI6b2U9Nn1yZXR1cm4gUy5sKz1vZSxbRyxRXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gZm5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPTg7aWYoaylzd2l0Y2go''@;'; put 'put ''ay5iaWZmKXtjYXNlIDU6Uy5sKz0xMixvZT02O2JyZWFrO2Nhc2UgMTI6b2U9MTJ9cmV0dXJuIFMubCs9b2UsW0csUV19fSwyNTU6e319LEtDPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEw''@;'; put 'put ''MjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1''@;'; put 'put ''OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX07IWZ1bmN0aW9uKCl7Zm9yKHZhciBTIGluIEtDKWliW1NdPWliW0tDW1NdXX0oKTt2YXIgcUM9ezE6e246IlB0Z0VsZkxlbCIsZjpvRH0sMjp7bjoiUHRnRWxmUnciLGY6R0N9LDM6e246IlB0Z0VsZkNvbCIsZjpXQn0sNjp7bjoi''@;'; put 'put ''UHRnRWxmUndWIixmOkNuZX0sNzp7bjoiUHRnRWxmQ29sViIsZjokQn0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6WUN9LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjp3bmV9LDEzOntuOiJQdGdFbGZDb2xTIixmOllCfSwxNTp7bjoiUHRnRWxmQ29sU1YiLGY6R0J9LDE2OntuOiJQdGdFbGZS''@;'; put 'put ''YWRpY2FsTGVsIixmOl9uZX0sMjU6e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gTW5lKFMpe1MubCs9Mjt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntpeHRp''@;'; put 'put ''OlIsY29sdHlwZTozJmsscnQ6U25lW2s+PjImMzFdLGlkeDpHLGM6USxDOm9lfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24geG5lKFMpe3JldHVybiBTLmwrPTIsW1MucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LCQzPXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiAkQyhT''@;'; put 'put ''KXtyZXR1cm4gUy5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24ga0IoUyxSLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbR119fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gdm5lKFMsUixrKXt2YXIg''@;'; put 'put ''Rz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gekMoUyxSLGspe1MubCs9Mjtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLFE9W10s''@;'; put 'put ''b2U9MDtvZTw9RzsrK29lKVEucHVzaChTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MikpO3JldHVybiBRfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gbW5lKFMsUixrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0csUy5yZWFkX3NoaWZ0KGsmJjI9''@;'; put 'put ''PWsuYmlmZj8xOjIpXX19LDE2OntuOiJQdGdBdHRyU3VtIixmOmZ1bmN0aW9uIHRiKFMsUixrKXtTLmwrPWsmJjI9PWsuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjpmdW5jdGlvbiBqQyhTKXt2YXIgUj0xJlNbUy5sKzFdO3JldHVybiBTLmwrPTQsW1IsMV19fSw2NDp7bjoi''@;'; put 'put ''UHRnQXR0clNwYWNlIixmOmZ1bmN0aW9uIERCKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksZUQoUyl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBJQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLGVEKFMpfX0sMTI4OntuOiJQdGdBdHRySWZFcnJvciIsZjpmdW5j''@;'; put 'put ''dGlvbiBRayhTKXt2YXIgUj0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW1IsUy5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gQjQoUyxSLGssRyxRKXtpZihHLmJpZmY8OClyZXR1cm4gSW4oUyxSKTtmb3IodmFyIG9lPVMubCtSLGdlPVtdLHBlPTA7cGUhPT1rLmxl''@;'; put 'put ''bmd0aDsrK3BlKXN3aXRjaChrW3BlXVswXSl7Y2FzZSJQdGdBcnJheSI6a1twZV1bMV09TkIoUywwLEcpLGdlLnB1c2goa1twZV1bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6a1twZV1bMl09aUQoUywwLEcpLGdlLnB1c2goa1twZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpHJiYxMj09''@;'; put 'put ''Ry5iaWZmJiYoa1twZV1bMV1bMV09Uy5yZWFkX3NoaWZ0KDQpLGdlLnB1c2goa1twZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIitrW3BlXVswXX1yZXR1''@;'; put 'put ''cm4gUj1vZS1TLmwsIVEmJjAhPT1SJiZnZS5wdXNoKEluKFMsUikpLGdlfWZ1bmN0aW9uIGxoKFMsUixrKXtmb3IodmFyIFEsb2UsRz1TLmwrUixnZT1bXTtHIT1TLmw7KVI9Ry1TLmwsUT1pYltvZT1TW1MubF1dLCgyND09PW9lfHwyNT09PW9lKSYmKFE9KDI0PT09b2U/cUM6JDMpW1NbUy5s''@;'; put 'put ''KzFdXSksUSYmUS5mP2dlLnB1c2goW1EubixRLmYoUyxSLGspXSk6SW4oUyxSKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gRjEoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7Zm9yKHZhciBHPVNba10sUT1bXSxvZT0wO29lPEcubGVuZ3RoOysrb2Upe3ZhciBnZT1HW29lXTtRLnB1''@;'; put 'put ''c2goZ2U/Mj09PWdlWzBdPyciJytnZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOmdlWzFdOiIiKX1SLnB1c2goUS5qb2luKCIsIikpfXJldHVybiBSLmpvaW4oIjsiKX0kM1szM109JDNbMzJdO3ZhciBjaD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0i''@;'; put 'put ''LFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn0sc0Q9bmV3IFJlZ0V4cCgvW15cd1x1NEUwMC1cdTlGRkZcdTMwNDAtXHUzMEZGXS8pO2Z1bmN0aW9uIGxEKFMsUixrKXtpZighUyly''@;'; put 'put ''ZXR1cm4iU0gzM1RKU0VSUjAiO2lmKGsuYmlmZj44JiYoIVMuWFRJfHwhUy5YVElbUl0pKXJldHVybiBTLlNoZWV0TmFtZXNbUl07aWYoIVMuWFRJKXJldHVybiJTSDMzVEpTRVJSNiI7dmFyIEc9Uy5YVElbUl07aWYoay5iaWZmPDgpcmV0dXJuIFI+MWU0JiYoUi09NjU1MzYpLFI8MCYmKFI9''@;'; put 'put ''LVIpLDA9PVI/IiI6Uy5YVElbUi0xXTtpZighRylyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciBRPSIiO2lmKGsuYmlmZj44KXN3aXRjaChTW0dbMF1dWzBdKXtjYXNlIDM1NzpyZXR1cm4gUT0tMT09R1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0dbMV1dLEdbMV09PUdbMl0/UTpRKyI6IitTLlNo''@;'; put 'put ''ZWV0TmFtZXNbR1syXV07Y2FzZSAzNTg6cmV0dXJuIG51bGwhPWsuU0lEP1MuU2hlZXROYW1lc1trLlNJRF06IlNIMzNUSlNTQU1FIitTW0dbMF1dWzBdO2RlZmF1bHQ6cmV0dXJuIlNIMzNUSlNTUkMiK1NbR1swXV1bMF19c3dpdGNoKFNbR1swXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4g''@;'; put 'put ''UT0tMT09R1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0dbMV1dfHwiU0gzM1RKU0VSUjMiLEdbMV09PUdbMl0/UTpRKyI6IitTLlNoZWV0TmFtZXNbR1syXV07Y2FzZSAxNDg0OTpyZXR1cm4gU1tHWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5OYW1lfSkuam9pbigi''@;'; put 'put ''OzsiKTtkZWZhdWx0OnJldHVybiBTW0dbMF1dWzBdWzNdPyhRPS0xPT1HWzFdPyIjUkVGIjpTW0dbMF1dWzBdWzNdW0dbMV1dfHwiU0gzM1RKU0VSUjQiLEdbMV09PUdbMl0/UTpRKyI6IitTW0dbMF1dWzBdWzNdW0dbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBxQihTLFIsayl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIFRuZShTLFIpe2lmKCEoU3x8UiYmUi5iaWZmPD01JiZSLmJpZmY+PTIpKXRocm93IG5ldyBFcnJvcigiZW1wdHkgc2hlZXQgbmFtZSIpO3JldHVybi8jUkVGLy50ZXN0KFMpP1M6c0QudGVzdChTKT8iJyIrUysiJyI6U30obEQoUyxSLGspLGspfWZ1bmN0aW9uIHMwKFMs''@;'; put 'put ''UixrLEcsUSxvZSl7dmFyIFBlLE5lLFllLEV0LGdlPVEmJlEuYmlmZnx8OCxwZT1vZSYmbnVsbCE9Uj9SOntzOntjOjAscjowfSxlOntjOjAscjowfX0seWU9W10sZXQ9MCxjdD0wLGF0PSIiO2lmKCFTWzBdfHwhU1swXVswXSlyZXR1cm4iIjtmb3IodmFyIGJ0PS0xLGp0PSIiLGt0PTAsT3Q9''@;'; put 'put ''U1swXS5sZW5ndGg7a3Q8T3Q7KytrdCl7dmFyIEt0PVNbMF1ba3RdO3N3aXRjaChLdFswXSl7Y2FzZSJQdGdVbWludXMiOnllLnB1c2goIi0iK3llLnBvcCgpKTticmVhaztjYXNlIlB0Z1VwbHVzIjp5ZS5wdXNoKCIrIit5ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijp5ZS5wdXNo''@;'; put 'put ''KHllLnBvcCgpKyIlIik7YnJlYWs7Y2FzZSJQdGdBZGQiOmNhc2UiUHRnQ29uY2F0IjpjYXNlIlB0Z0RpdiI6Y2FzZSJQdGdFcSI6Y2FzZSJQdGdHZSI6Y2FzZSJQdGdHdCI6Y2FzZSJQdGdMZSI6Y2FzZSJQdGdMdCI6Y2FzZSJQdGdNdWwiOmNhc2UiUHRnTmUiOmNhc2UiUHRnUG93ZXIiOmNh''@;'; put 'put ''c2UiUHRnU3ViIjppZihQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSxidD49MCl7c3dpdGNoKFNbMF1bYnRdWzFdWzBdKXtjYXNlIDA6anQ9Y2koIiAiLFNbMF1bYnRdWzFdWzFdKTticmVhaztjYXNlIDE6anQ9Y2koIlxyIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihqdD0iIixR''@;'; put 'put ''LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1OZSs9anQsYnQ9LTF9eWUucHVzaChOZStjaFtLdFswXV0rUGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOlBlPXllLnBvcCgpLE5lPXllLnBvcCgpLHllLnB1c2goTmUrIiAi''@;'; put 'put ''K1BlKTticmVhaztjYXNlIlB0Z1VuaW9uIjpQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSx5ZS5wdXNoKE5lKyIsIitQZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiOiIrUGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQ''@;'; put 'put ''dGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRnQXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9N''@;'; put 'put ''ZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpZZT10YShLdFsxXVsxXSxwZSxRKSx5ZS5wdXNoKFZhKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdS''@;'; put 'put ''ZWZOIjpZZT1rP3RhKEt0WzFdWzFdLGssUSk6S3RbMV1bMV0seWUucHVzaChWYShZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmV0PUt0WzFdWzFdLFllPXRhKEt0WzFdWzJdLHBlLFEpLGF0PXFCKEcsZXQsUSkseWUucHVzaChhdCsiISIrVmEoWWUsZ2UpKTticmVhaztjYXNlIlB0Z0Z1''@;'; put 'put ''bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIHJyPUt0WzFdWzBdLFNuPUt0WzFdWzFdO3JyfHwocnI9MCk7dmFyIGxyPTA9PShyciY9MTI3KT9bXTp5ZS5zbGljZSgtcnIpO3llLmxlbmd0aC09cnIsIlVzZXIiPT09U24mJihTbj1sci5zaGlmdCgpKSx5ZS5wdXNoKFNuKyIoIitsci5qb2luKCIs''@;'; put 'put ''IikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOnllLnB1c2goS3RbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6eWUucHVzaChTdHJpbmcoS3RbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6eWUucHVzaCgnIicrS3RbMV0ucmVwbGFjZSgvIi9nLCci''@;'; put 'put ''IicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOnllLnB1c2goS3RbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOkV0PW9hKEt0WzFdWzFdLGs/e3M6a306cGUsUSkseWUucHVzaCgkbyhFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpFdD1vYShLdFsxXVsxXSxwZSxRKSx5ZS5wdXNoKCRvKEV0''@;'; put 'put ''LFEpKTticmVhaztjYXNlIlB0Z0FyZWEzZCI6ZXQ9S3RbMV1bMV0sRXQ9b2EoS3RbMV1bMl0scGUsUSksYXQ9cUIoRyxldCxRKSx5ZS5wdXNoKGF0KyIhIiskbyhFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBdHRyU3VtIjp5ZS5wdXNoKCJTVU0oIit5ZS5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRn''@;'; put 'put ''TmFtZSI6dmFyIFhuPShHLm5hbWVzfHxbXSlbKGN0PUt0WzFdWzJdKS0xXXx8KEdbMF18fFtdKVtjdF0sQm49WG4/WG4uTmFtZToiU0gzM1RKU05BTUUiK1N0cmluZyhjdCk7Qm4gaW4gYWImJihCbj1hYltCbl0pLHllLnB1c2goQm4pO2JyZWFrO2Nhc2UiUHRnTmFtZVgiOnZhciBicixmcj1L''@;'; put 'put ''dFsxXVsxXTtpZihjdD1LdFsxXVsyXSwhKFEuYmlmZjw9NSkpe3ZhciBlcj0iIjtpZigxNDg0OT09KChHW2ZyXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKEdbZnJdfHxbXSlbMF18fFtdKVswXT9HW2ZyXVtjdF0mJkdbZnJdW2N0XS5pdGFiPjAmJihlcj1HLlNoZWV0TmFtZXNbR1tmcl1b''@;'; put 'put ''Y3RdLml0YWItMV0rIiEiKTplcj1HLlNoZWV0TmFtZXNbY3QtMV0rIiEiKSxHW2ZyXSYmR1tmcl1bY3RdKWVyKz1HW2ZyXVtjdF0uTmFtZTtlbHNlIGlmKEdbMF0mJkdbMF1bY3RdKWVyKz1HWzBdW2N0XS5OYW1lO2Vsc2V7dmFyIEZpPShsRChHLGZyLFEpfHwiIikuc3BsaXQoIjs7Iik7Rmlb''@;'; put 'put ''Y3QtMV0/ZXI9RmlbY3QtMV06ZXIrPSJTSDMzVEpTRVJSWCJ9eWUucHVzaChlcik7YnJlYWt9ZnI8MCYmKGZyPS1mciksR1tmcl0mJihicj1HW2ZyXVtjdF0pLGJyfHwoYnI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLHllLnB1c2goYnIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIG5h''@;'; put 'put ''PSIoIixjYT0iKSI7aWYoYnQ+PTApe3N3aXRjaChqdD0iIixTWzBdW2J0XVsxXVswXSl7Y2FzZSAyOm5hPWNpKCIgIixTWzBdW2J0XVsxXVsxXSkrbmE7YnJlYWs7Y2FzZSAzOm5hPWNpKCJcciIsU1swXVtidF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgNDpjYT1jaSgiICIsU1swXVtidF1bMV1b''@;'; put 'put ''MV0pK2NhO2JyZWFrO2Nhc2UgNTpjYT1jaSgiXHIiLFNbMF1bYnRdWzFdWzFdKStjYTticmVhaztkZWZhdWx0OmlmKFEuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrU1swXVtidF1bMV1bMF0pfWJ0PS0xfXllLnB1c2gobmEreWUucG9wKCkrY2Ep''@;'; put 'put ''O2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpjYXNlIlB0Z1JlZkVycjNkIjp5ZS5wdXNoKCIjUkVGISIpO2JyZWFrO2Nhc2UiUHRnRXhwIjp2YXIga3I9e2M6ay5jLHI6ay5yfTtpZihHLnNoYXJlZGZbcWkoWWU9e2M6S3RbMV1bMV0s''@;'; put 'put ''cjpLdFsxXVswXX0pXSl7dmFyIFZuPUcuc2hhcmVkZltxaShZZSldO3llLnB1c2goczAoVm4scGUsa3IsRyxRKSl9ZWxzZXt2YXIgQnI9ITE7Zm9yKFBlPTA7UGUhPUcuYXJyYXlmLmxlbmd0aDsrK1BlKWlmKCEoWWUuYzwoTmU9Ry5hcnJheWZbUGVdKVswXS5zLmN8fFllLmM+TmVbMF0uZS5j''@;'; put 'put ''fHxZZS5yPE5lWzBdLnMucnx8WWUucj5OZVswXS5lLnIpKXt5ZS5wdXNoKHMwKE5lWzFdLHBlLGtyLEcsUSkpLEJyPSEwO2JyZWFrfUJyfHx5ZS5wdXNoKEt0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5Ijp5ZS5wdXNoKCJ7IitGMShLdFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFj''@;'; put 'put ''ZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjpidD1rdDticmVhaztjYXNlIlB0Z01pc3NBcmciOnllLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6eWUucHVzaCgiVGFibGUiK0t0WzFdLmlkeCsiWyMiK0t0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxm''@;'; put 'put ''Q29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJhZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKEt0KSl9aWYoMyE9US5iaWZmJiZidD49MCYmLTE9PVsiUHRnQXR0clNwYWNlIiwiUHRnQXR0clNwYWNlU2VtaSIsIlB0Z0F0dHJHb3RvIl0u''@;'; put 'put ''aW5kZXhPZihTWzBdW2t0XVswXSkpe3ZhciBGbj0hMDtzd2l0Y2goKEt0PVNbMF1bYnRdKVsxXVswXSl7Y2FzZSA0OkZuPSExO2Nhc2UgMDpqdD1jaSgiICIsS3RbMV1bMV0pO2JyZWFrO2Nhc2UgNTpGbj0hMTtjYXNlIDE6anQ9Y2koIlxyIixLdFsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihq''@;'; put 'put ''dD0iIixRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK0t0WzFdWzBdKX15ZS5wdXNoKChGbj9qdDoiIikreWUucG9wKCkrKEZuPyIiOmp0KSksYnQ9LTF9fWlmKHllLmxlbmd0aD4xJiZRLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxh''@;'; put 'put ''IHN0YWNrIik7cmV0dXJuIHllWzBdfWZ1bmN0aW9uIGNEKFMsUixrKXt2YXIgb2UsRz1TLmwrUixRPTI9PWsuYmlmZj8xOjIsZ2U9Uy5yZWFkX3NoaWZ0KFEpO2lmKDY1NTM1PT1nZSlyZXR1cm5bW10sSW4oUyxSLTIpXTt2YXIgcGU9bGgoUyxnZSxrKTtyZXR1cm4gUiE9PWdlK1EmJihvZT1C''@;'; put 'put ''NChTLFItZ2UtUSxwZSxrKSksUy5sPUcsW3BlLG9lXX1mdW5jdGlvbiBLMyhTLFIsayl7dmFyIFEsRz1TLmwrUixvZT1TLnJlYWRfc2hpZnQoMiksZ2U9bGgoUyxvZSxrKTtyZXR1cm4gNjU1MzU9PW9lP1tbXSxJbihTLFItMildOihSIT09b2UrMiYmKFE9QjQoUyxHLW9lLTIsZ2UsaykpLFtn''@;'; put 'put ''ZSxRXSl9ZnVuY3Rpb24gUUMoUyxSLGspe3ZhciBHPVMubCtSLFE9dzAoUyk7Mj09ay5iaWZmJiYrK1MubDt2YXIgb2U9ZnVuY3Rpb24gWEMoUyl7dmFyIFI7aWYoNjU1MzUhPT1lbyhTLFMubCs2KSlyZXR1cm5bUGwoUyksIm4iXTtzd2l0Y2goU1tTLmxdKXtjYXNlIDA6cmV0dXJuIFMubCs9''@;'; put 'put ''OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIFI9MT09PVNbUy5sKzJdLFMubCs9OCxbUiwiYiJdO2Nhc2UgMjpyZXR1cm4gUj1TW1MubCsyXSxTLmwrPTgsW1IsImUiXTtjYXNlIDM6cmV0dXJuIFMubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0oUyksZ2U9Uy5yZWFkX3NoaWZ0KDEpOzIh''@;'; put 'put ''PWsuYmlmZiYmKFMucmVhZF9zaGlmdCgxKSxrLmJpZmY+PTUmJlMucmVhZF9zaGlmdCg0KSk7dmFyIHBlPWZ1bmN0aW9uIHVEKFMsUixrKXt2YXIgb2UsRz1TLmwrUixRPTI9PWsuYmlmZj8xOjIsZ2U9Uy5yZWFkX3NoaWZ0KFEpO2lmKDY1NTM1PT1nZSlyZXR1cm5bW10sSW4oUyxSLTIpXTt2''@;'; put 'put ''YXIgcGU9bGgoUyxnZSxrKTtyZXR1cm4gUiE9PWdlK1EmJihvZT1CNChTLFItZ2UtUSxwZSxrKSksUy5sPUcsW3BlLG9lXX0oUyxHLVMubCxrKTtyZXR1cm57Y2VsbDpRLHZhbDpvZVswXSxmb3JtdWxhOnBlLHNoYXJlZDpnZT4+MyYxLHR0Om9lWzFdfX1mdW5jdGlvbiBqNChTLFIsayl7dmFy''@;'; put 'put ''IEc9Uy5yZWFkX3NoaWZ0KDQpLFE9bGgoUyxHLGspLG9lPVMucmVhZF9zaGlmdCg0KTtyZXR1cm5bUSxvZT4wP0I0KFMsb2UsUSxrLCEwKTpudWxsXX12YXIgZVM9ajQsejQ9ajQsaEQ9ajQsWEI9ZnVuY3Rpb24gZEQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxvZT1saChTLEcsayk7cmV0dXJuW29lLFE+MD9CNChTLFEsb2UsaywhMCk6bnVsbF19LGZEPWo0LEpCPWo0O2Z1bmN0aW9uIHRTKFMpe2lmKCgwfFMpPT1TJiZTPE1hdGgucG93KDIsMTYpJiZTPj0wKXt2YXIgUj1ibigxMSk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwzKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsMzApLFIud3JpdGVfc2hpZnQoMixTKSxSLndyaXRlX3NoaWZ0KDQsMCksUn12YXIgaz1ibigxNyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCwxMSksay53cml0ZV9zaGlmdCgxLDMxKSxrLndyaXRlX3NoaWZ0KDgsUyksay53cml0ZV9zaGlmdCg0LDApLGt9ZnVuY3Rpb24gblMo''@;'; put 'put ''Uyl7dmFyIFI9Ym4oNyk7Ui53cml0ZV9zaGlmdCg0LDMrMipTLmxlbmd0aCksUi53cml0ZV9zaGlmdCgxLDIzKSxSLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO3ZhciBrPWJuKDIqUy5sZW5ndGgpO2sud3JpdGVfc2hpZnQoMipTLmxlbmd0aCxTLCJ1dGYxNmxlIik7dmFyIEc9Ym4oNCk7cmV0''@;'; put 'put ''dXJuIEcud3JpdGVfc2hpZnQoNCwwKSxqKFtSLGssR10pfWZ1bmN0aW9uIFU0KFMpe2lmKFMubWF0Y2goL14jKERJVlwvMCF8R0VUVElOR19EQVRBfE5cL0F8TkFNRVw/fE5VTEwhfE5VTSF8UkVGIXxWQUxVRSEpJC8pKXJldHVybiBmdW5jdGlvbiBRQihTKXt2YXIgUj1ibigxMCk7cmV0dXJu''@;'; put 'put ''IFIud3JpdGVfc2hpZnQoNCwyKSxSLndyaXRlX3NoaWZ0KDEsMjgpLFIud3JpdGVfc2hpZnQoMSxTKSxSLndyaXRlX3NoaWZ0KDQsMCksUn0oK1AzW1NdKTtpZihTLm1hdGNoKC9eXCQ/KD86W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdfFtBLVpdezEsMn0pXCQ/KD86MTBbMC0z''@;'; put 'put ''XVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkkLykpcmV0dXJuIGZ1bmN0aW9uIHM4KFMpe3ZhciBSPU5vKFMpLGs9Ym4oMTUpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsNyksay53cml0ZV9zaGlmdCgxLDM2''@;'; put 'put ''KSxrLndyaXRlX3NoaWZ0KDQsUi5yKSxrLndyaXRlX3NoaWZ0KDIsUi5jfCgiJCI9PVMuY2hhckF0KDApPzA6MSk8PDE0fChTLm1hdGNoKC9cJFxkLyk/MDoxKTw8MTUpLGsud3JpdGVfc2hpZnQoNCwwKSxrfShTKTtpZihTLm1hdGNoKC9eIi4qIiQvKSlyZXR1cm4gblMoUyk7dGhyb3ciRm9y''@;'; put 'put ''bXVsYSB8IitTKyJ8IG5vdCBzdXBwb3J0ZWQgZm9yIFhMU0IifXZhciByUz17MDoiQkVFUCIsMToiT1BFTiIsMjoiT1BFTi5MSU5LUyIsMzoiQ0xPU0UuQUxMIiw0OiJTQVZFIiw1OiJTQVZFLkFTIiw2OiJGSUxFLkRFTEVURSIsNzoiUEFHRS5TRVRVUCIsODoiUFJJTlQiLDk6IlBSSU5URVIu''@;'; put 'put ''U0VUVVAiLDEwOiJRVUlUIiwxMToiTkVXLldJTkRPVyIsMTI6IkFSUkFOR0UuQUxMIiwxMzoiV0lORE9XLlNJWkUiLDE0OiJXSU5ET1cuTU9WRSIsMTU6IkZVTEwiLDE2OiJDTE9TRSIsMTc6IlJVTiIsMjI6IlNFVC5QUklOVC5BUkVBIiwyMzoiU0VULlBSSU5ULlRJVExFUyIsMjQ6IlNFVC5Q''@;'; put 'put ''QUdFLkJSRUFLIiwyNToiUkVNT1ZFLlBBR0UuQlJFQUsiLDI2OiJGT05UIiwyNzoiRElTUExBWSIsMjg6IlBST1RFQ1QuRE9DVU1FTlQiLDI5OiJQUkVDSVNJT04iLDMwOiJBMS5SMUMxIiwzMToiQ0FMQ1VMQVRFLk5PVyIsMzI6IkNBTENVTEFUSU9OIiwzNDoiREFUQS5GSU5EIiwzNToiRVhU''@;'; put 'put ''UkFDVCIsMzY6IkRBVEEuREVMRVRFIiwzNzoiU0VULkRBVEFCQVNFIiwzODoiU0VULkNSSVRFUklBIiwzOToiU09SVCIsNDA6IkRBVEEuU0VSSUVTIiw0MToiVEFCTEUiLDQyOiJGT1JNQVQuTlVNQkVSIiw0MzoiQUxJR05NRU5UIiw0NDoiU1RZTEUiLDQ1OiJCT1JERVIiLDQ2OiJDRUxMLlBS''@;'; put 'put ''T1RFQ1RJT04iLDQ3OiJDT0xVTU4uV0lEVEgiLDQ4OiJVTkRPIiw0OToiQ1VUIiw1MDoiQ09QWSIsNTE6IlBBU1RFIiw1MjoiQ0xFQVIiLDUzOiJQQVNURS5TUEVDSUFMIiw1NDoiRURJVC5ERUxFVEUiLDU1OiJJTlNFUlQiLDU2OiJGSUxMLlJJR0hUIiw1NzoiRklMTC5ET1dOIiw2MToiREVG''@;'; put 'put ''SU5FLk5BTUUiLDYyOiJDUkVBVEUuTkFNRVMiLDYzOiJGT1JNVUxBLkdPVE8iLDY0OiJGT1JNVUxBLkZJTkQiLDY1OiJTRUxFQ1QuTEFTVC5DRUxMIiw2NjoiU0hPVy5BQ1RJVkUuQ0VMTCIsNjc6IkdBTExFUlkuQVJFQSIsNjg6IkdBTExFUlkuQkFSIiw2OToiR0FMTEVSWS5DT0xVTU4iLDcw''@;'; put 'put ''OiJHQUxMRVJZLkxJTkUiLDcxOiJHQUxMRVJZLlBJRSIsNzI6IkdBTExFUlkuU0NBVFRFUiIsNzM6IkNPTUJJTkFUSU9OIiw3NDoiUFJFRkVSUkVEIiw3NToiQURELk9WRVJMQVkiLDc2OiJHUklETElORVMiLDc3OiJTRVQuUFJFRkVSUkVEIiw3ODoiQVhFUyIsNzk6IkxFR0VORCIsODA6IkFU''@;'; put 'put ''VEFDSC5URVhUIiw4MToiQURELkFSUk9XIiw4MjoiU0VMRUNULkNIQVJUIiw4MzoiU0VMRUNULlBMT1QuQVJFQSIsODQ6IlBBVFRFUk5TIiw4NToiTUFJTi5DSEFSVCIsODY6Ik9WRVJMQVkiLDg3OiJTQ0FMRSIsODg6IkZPUk1BVC5MRUdFTkQiLDg5OiJGT1JNQVQuVEVYVCIsOTA6IkVESVQu''@;'; put 'put ''UkVQRUFUIiw5MToiUEFSU0UiLDkyOiJKVVNUSUZZIiw5MzoiSElERSIsOTQ6IlVOSElERSIsOTU6IldPUktTUEFDRSIsOTY6IkZPUk1VTEEiLDk3OiJGT1JNVUxBLkZJTEwiLDk4OiJGT1JNVUxBLkFSUkFZIiw5OToiREFUQS5GSU5ELk5FWFQiLDEwMDoiREFUQS5GSU5ELlBSRVYiLDEwMToi''@;'; put 'put ''Rk9STVVMQS5GSU5ELk5FWFQiLDEwMjoiRk9STVVMQS5GSU5ELlBSRVYiLDEwMzoiQUNUSVZBVEUiLDEwNDoiQUNUSVZBVEUuTkVYVCIsMTA1OiJBQ1RJVkFURS5QUkVWIiwxMDY6IlVOTE9DS0VELk5FWFQiLDEwNzoiVU5MT0NLRUQuUFJFViIsMTA4OiJDT1BZLlBJQ1RVUkUiLDEwOToiU0VM''@;'; put 'put ''RUNUIiwxMTA6IkRFTEVURS5OQU1FIiwxMTE6IkRFTEVURS5GT1JNQVQiLDExMjoiVkxJTkUiLDExMzoiSExJTkUiLDExNDoiVlBBR0UiLDExNToiSFBBR0UiLDExNjoiVlNDUk9MTCIsMTE3OiJIU0NST0xMIiwxMTg6IkFMRVJUIiwxMTk6Ik5FVyIsMTIwOiJDQU5DRUwuQ09QWSIsMTIxOiJT''@;'; put 'put ''SE9XLkNMSVBCT0FSRCIsMTIyOiJNRVNTQUdFIiwxMjQ6IlBBU1RFLkxJTksiLDEyNToiQVBQLkFDVElWQVRFIiwxMjY6IkRFTEVURS5BUlJPVyIsMTI3OiJST1cuSEVJR0hUIiwxMjg6IkZPUk1BVC5NT1ZFIiwxMjk6IkZPUk1BVC5TSVpFIiwxMzA6IkZPUk1VTEEuUkVQTEFDRSIsMTMxOiJT''@;'; put 'put ''RU5ELktFWVMiLDEzMjoiU0VMRUNULlNQRUNJQUwiLDEzMzoiQVBQTFkuTkFNRVMiLDEzNDoiUkVQTEFDRS5GT05UIiwxMzU6IkZSRUVaRS5QQU5FUyIsMTM2OiJTSE9XLklORk8iLDEzNzoiU1BMSVQiLDEzODoiT04uV0lORE9XIiwxMzk6Ik9OLkRBVEEiLDE0MDoiRElTQUJMRS5JTlBVVCIs''@;'; put 'put ''MTQyOiJPVVRMSU5FIiwxNDM6IkxJU1QuTkFNRVMiLDE0NDoiRklMRS5DTE9TRSIsMTQ1OiJTQVZFLldPUktCT09LIiwxNDY6IkRBVEEuRk9STSIsMTQ3OiJDT1BZLkNIQVJUIiwxNDg6Ik9OLlRJTUUiLDE0OToiV0FJVCIsMTUwOiJGT1JNQVQuRk9OVCIsMTUxOiJGSUxMLlVQIiwxNTI6IkZJ''@;'; put 'put ''TEwuTEVGVCIsMTUzOiJERUxFVEUuT1ZFUkxBWSIsMTU1OiJTSE9SVC5NRU5VUyIsMTU5OiJTRVQuVVBEQVRFLlNUQVRVUyIsMTYxOiJDT0xPUi5QQUxFVFRFIiwxNjI6IkRFTEVURS5TVFlMRSIsMTYzOiJXSU5ET1cuUkVTVE9SRSIsMTY0OiJXSU5ET1cuTUFYSU1JWkUiLDE2NjoiQ0hBTkdF''@;'; put 'put ''LkxJTksiLDE2NzoiQ0FMQ1VMQVRFLkRPQ1VNRU5UIiwxNjg6Ik9OLktFWSIsMTY5OiJBUFAuUkVTVE9SRSIsMTcwOiJBUFAuTU9WRSIsMTcxOiJBUFAuU0laRSIsMTcyOiJBUFAuTUlOSU1JWkUiLDE3MzoiQVBQLk1BWElNSVpFIiwxNzQ6IkJSSU5HLlRPLkZST05UIiwxNzU6IlNFTkQuVE8u''@;'; put 'put ''QkFDSyIsMTg1OiJNQUlOLkNIQVJULlRZUEUiLDE4NjoiT1ZFUkxBWS5DSEFSVC5UWVBFIiwxODc6IlNFTEVDVC5FTkQiLDE4ODoiT1BFTi5NQUlMIiwxODk6IlNFTkQuTUFJTCIsMTkwOiJTVEFOREFSRC5GT05UIiwxOTE6IkNPTlNPTElEQVRFIiwxOTI6IlNPUlQuU1BFQ0lBTCIsMTkzOiJH''@;'; put 'put ''QUxMRVJZLjNELkFSRUEiLDE5NDoiR0FMTEVSWS4zRC5DT0xVTU4iLDE5NToiR0FMTEVSWS4zRC5MSU5FIiwxOTY6IkdBTExFUlkuM0QuUElFIiwxOTc6IlZJRVcuM0QiLDE5ODoiR09BTC5TRUVLIiwxOTk6IldPUktHUk9VUCIsMjAwOiJGSUxMLkdST1VQIiwyMDE6IlVQREFURS5MSU5LIiwy''@;'; put 'put ''MDI6IlBST01PVEUiLDIwMzoiREVNT1RFIiwyMDQ6IlNIT1cuREVUQUlMIiwyMDY6IlVOR1JPVVAiLDIwNzoiT0JKRUNULlBST1BFUlRJRVMiLDIwODoiU0FWRS5ORVcuT0JKRUNUIiwyMDk6IlNIQVJFIiwyMTA6IlNIQVJFLk5BTUUiLDIxMToiRFVQTElDQVRFIiwyMTI6IkFQUExZLlNUWUxF''@;'; put 'put ''IiwyMTM6IkFTU0lHTi5UTy5PQkpFQ1QiLDIxNDoiT0JKRUNULlBST1RFQ1RJT04iLDIxNToiSElERS5PQkpFQ1QiLDIxNjoiU0VULkVYVFJBQ1QiLDIxNzoiQ1JFQVRFLlBVQkxJU0hFUiIsMjE4OiJTVUJTQ1JJQkUuVE8iLDIxOToiQVRUUklCVVRFUyIsMjIwOiJTSE9XLlRPT0xCQVIiLDIy''@;'; put 'put ''MjoiUFJJTlQuUFJFVklFVyIsMjIzOiJFRElULkNPTE9SIiwyMjQ6IlNIT1cuTEVWRUxTIiwyMjU6IkZPUk1BVC5NQUlOIiwyMjY6IkZPUk1BVC5PVkVSTEFZIiwyMjc6Ik9OLlJFQ0FMQyIsMjI4OiJFRElULlNFUklFUyIsMjI5OiJERUZJTkUuU1RZTEUiLDI0MDoiTElORS5QUklOVCIsMjQz''@;'; put 'put ''OiJFTlRFUi5EQVRBIiwyNDk6IkdBTExFUlkuUkFEQVIiLDI1MDoiTUVSR0UuU1RZTEVTIiwyNTE6IkVESVRJT04uT1BUSU9OUyIsMjUyOiJQQVNURS5QSUNUVVJFIiwyNTM6IlBBU1RFLlBJQ1RVUkUuTElOSyIsMjU0OiJTUEVMTElORyIsMjU2OiJaT09NIiwyNTk6IklOU0VSVC5PQkpFQ1Qi''@;'; put 'put ''LDI2MDoiV0lORE9XLk1JTklNSVpFIiwyNjU6IlNPVU5ELk5PVEUiLDI2NjoiU09VTkQuUExBWSIsMjY3OiJGT1JNQVQuU0hBUEUiLDI2ODoiRVhURU5ELlBPTFlHT04iLDI2OToiRk9STUFULkFVVE8iLDI3MjoiR0FMTEVSWS4zRC5CQVIiLDI3MzoiR0FMTEVSWS4zRC5TVVJGQUNFIiwyNzQ6''@;'; put 'put ''IkZJTEwuQVVUTyIsMjc2OiJDVVNUT01JWkUuVE9PTEJBUiIsMjc3OiJBREQuVE9PTCIsMjc4OiJFRElULk9CSkVDVCIsMjc5OiJPTi5ET1VCTEVDTElDSyIsMjgwOiJPTi5FTlRSWSIsMjgxOiJXT1JLQk9PSy5BREQiLDI4MjoiV09SS0JPT0suTU9WRSIsMjgzOiJXT1JLQk9PSy5DT1BZIiwy''@;'; put 'put ''ODQ6IldPUktCT09LLk9QVElPTlMiLDI4NToiU0FWRS5XT1JLU1BBQ0UiLDI4ODoiQ0hBUlQuV0laQVJEIiwyODk6IkRFTEVURS5UT09MIiwyOTA6Ik1PVkUuVE9PTCIsMjkxOiJXT1JLQk9PSy5TRUxFQ1QiLDI5MjoiV09SS0JPT0suQUNUSVZBVEUiLDI5MzoiQVNTSUdOLlRPLlRPT0wiLDI5''@;'; put 'put ''NToiQ09QWS5UT09MIiwyOTY6IlJFU0VULlRPT0wiLDI5NzoiQ09OU1RSQUlOLk5VTUVSSUMiLDI5ODoiUEFTVEUuVE9PTCIsMzAyOiJXT1JLQk9PSy5ORVciLDMwNToiU0NFTkFSSU8uQ0VMTFMiLDMwNjoiU0NFTkFSSU8uREVMRVRFIiwzMDc6IlNDRU5BUklPLkFERCIsMzA4OiJTQ0VOQVJJ''@;'; put 'put ''Ty5FRElUIiwzMDk6IlNDRU5BUklPLlNIT1ciLDMxMDoiU0NFTkFSSU8uU0hPVy5ORVhUIiwzMTE6IlNDRU5BUklPLlNVTU1BUlkiLDMxMjoiUElWT1QuVEFCTEUuV0laQVJEIiwzMTM6IlBJVk9ULkZJRUxELlBST1BFUlRJRVMiLDMxNDoiUElWT1QuRklFTEQiLDMxNToiUElWT1QuSVRFTSIs''@;'; put 'put ''MzE2OiJQSVZPVC5BREQuRklFTERTIiwzMTg6Ik9QVElPTlMuQ0FMQ1VMQVRJT04iLDMxOToiT1BUSU9OUy5FRElUIiwzMjA6Ik9QVElPTlMuVklFVyIsMzIxOiJBRERJTi5NQU5BR0VSIiwzMjI6Ik1FTlUuRURJVE9SIiwzMjM6IkFUVEFDSC5UT09MQkFSUyIsMzI0OiJWQkFBY3RpdmF0ZSIs''@;'; put 'put ''MzI1OiJPUFRJT05TLkNIQVJUIiwzMjg6IlZCQS5JTlNFUlQuRklMRSIsMzMwOiJWQkEuUFJPQ0VEVVJFLkRFRklOSVRJT04iLDMzNjoiUk9VVElORy5TTElQIiwzMzg6IlJPVVRFLkRPQ1VNRU5UIiwzMzk6Ik1BSUwuTE9HT04iLDM0MjoiSU5TRVJULlBJQ1RVUkUiLDM0MzoiRURJVC5UT09M''@;'; put 'put ''IiwzNDQ6IkdBTExFUlkuRE9VR0hOVVQiLDM1MDoiQ0hBUlQuVFJFTkQiLDM1MjoiUElWT1QuSVRFTS5QUk9QRVJUSUVTIiwzNTQ6IldPUktCT09LLklOU0VSVCIsMzU1OiJPUFRJT05TLlRSQU5TSVRJT04iLDM1NjoiT1BUSU9OUy5HRU5FUkFMIiwzNzA6IkZJTFRFUi5BRFZBTkNFRCIsMzcz''@;'; put 'put ''OiJNQUlMLkFERC5NQUlMRVIiLDM3NDoiTUFJTC5ERUxFVEUuTUFJTEVSIiwzNzU6Ik1BSUwuUkVQTFkiLDM3NjoiTUFJTC5SRVBMWS5BTEwiLDM3NzoiTUFJTC5GT1JXQVJEIiwzNzg6Ik1BSUwuTkVYVC5MRVRURVIiLDM3OToiREFUQS5MQUJFTCIsMzgwOiJJTlNFUlQuVElUTEUiLDM4MToi''@;'; put 'put ''Rk9OVC5QUk9QRVJUSUVTIiwzODI6Ik1BQ1JPLk9QVElPTlMiLDM4MzoiV09SS0JPT0suSElERSIsMzg0OiJXT1JLQk9PSy5VTkhJREUiLDM4NToiV09SS0JPT0suREVMRVRFIiwzODY6IldPUktCT09LLk5BTUUiLDM4ODoiR0FMTEVSWS5DVVNUT00iLDM5MDoiQURELkNIQVJULkFVVE9GT1JN''@;'; put 'put ''QVQiLDM5MToiREVMRVRFLkNIQVJULkFVVE9GT1JNQVQiLDM5MjoiQ0hBUlQuQURELkRBVEEiLDM5MzoiQVVUTy5PVVRMSU5FIiwzOTQ6IlRBQi5PUkRFUiIsMzk1OiJTSE9XLkRJQUxPRyIsMzk2OiJTRUxFQ1QuQUxMIiwzOTc6IlVOR1JPVVAuU0hFRVRTIiwzOTg6IlNVQlRPVEFMLkNSRUFU''@;'; put 'put ''RSIsMzk5OiJTVUJUT1RBTC5SRU1PVkUiLDQwMDoiUkVOQU1FLk9CSkVDVCIsNDEyOiJXT1JLQk9PSy5TQ1JPTEwiLDQxMzoiV09SS0JPT0suTkVYVCIsNDE0OiJXT1JLQk9PSy5QUkVWIiw0MTU6IldPUktCT09LLlRBQi5TUExJVCIsNDE2OiJGVUxMLlNDUkVFTiIsNDE3OiJXT1JLQk9PSy5Q''@;'; put 'put ''Uk9URUNUIiw0MjA6IlNDUk9MTEJBUi5QUk9QRVJUSUVTIiw0MjE6IlBJVk9ULlNIT1cuUEFHRVMiLDQyMjoiVEVYVC5UTy5DT0xVTU5TIiw0MjM6IkZPUk1BVC5DSEFSVFRZUEUiLDQyNDoiTElOSy5GT1JNQVQiLDQyNToiVFJBQ0VSLkRJU1BMQVkiLDQzMDoiVFJBQ0VSLk5BVklHQVRFIiw0''@;'; put 'put ''MzE6IlRSQUNFUi5DTEVBUiIsNDMyOiJUUkFDRVIuRVJST1IiLDQzMzoiUElWT1QuRklFTEQuR1JPVVAiLDQzNDoiUElWT1QuRklFTEQuVU5HUk9VUCIsNDM1OiJDSEVDS0JPWC5QUk9QRVJUSUVTIiw0MzY6IkxBQkVMLlBST1BFUlRJRVMiLDQzNzoiTElTVEJPWC5QUk9QRVJUSUVTIiw0Mzg6''@;'; put 'put ''IkVESVRCT1guUFJPUEVSVElFUyIsNDM5OiJQSVZPVC5SRUZSRVNIIiw0NDA6IkxJTksuQ09NQk8iLDQ0MToiT1BFTi5URVhUIiw0NDI6IkhJREUuRElBTE9HIiw0NDM6IlNFVC5ESUFMT0cuRk9DVVMiLDQ0NDoiRU5BQkxFLk9CSkVDVCIsNDQ1OiJQVVNIQlVUVE9OLlBST1BFUlRJRVMiLDQ0''@;'; put 'put ''NjoiU0VULkRJQUxPRy5ERUZBVUxUIiw0NDc6IkZJTFRFUiIsNDQ4OiJGSUxURVIuU0hPVy5BTEwiLDQ0OToiQ0xFQVIuT1VUTElORSIsNDUwOiJGVU5DVElPTi5XSVpBUkQiLDQ1MToiQURELkxJU1QuSVRFTSIsNDUyOiJTRVQuTElTVC5JVEVNIiw0NTM6IlJFTU9WRS5MSVNULklURU0iLDQ1''@;'; put 'put ''NDoiU0VMRUNULkxJU1QuSVRFTSIsNDU1OiJTRVQuQ09OVFJPTC5WQUxVRSIsNDU2OiJTQVZFLkNPUFkuQVMiLDQ1ODoiT1BUSU9OUy5MSVNUUy5BREQiLDQ1OToiT1BUSU9OUy5MSVNUUy5ERUxFVEUiLDQ2MDoiU0VSSUVTLkFYRVMiLDQ2MToiU0VSSUVTLlgiLDQ2MjoiU0VSSUVTLlkiLDQ2''@;'; put 'put ''MzoiRVJST1JCQVIuWCIsNDY0OiJFUlJPUkJBUi5ZIiw0NjU6IkZPUk1BVC5DSEFSVCIsNDY2OiJTRVJJRVMuT1JERVIiLDQ2NzoiTUFJTC5MT0dPRkYiLDQ2ODoiQ0xFQVIuUk9VVElORy5TTElQIiw0Njk6IkFQUC5BQ1RJVkFURS5NSUNST1NPRlQiLDQ3MDoiTUFJTC5FRElULk1BSUxFUiIs''@;'; put 'put ''NDcxOiJPTi5TSEVFVCIsNDcyOiJTVEFOREFSRC5XSURUSCIsNDczOiJTQ0VOQVJJTy5NRVJHRSIsNDc0OiJTVU1NQVJZLklORk8iLDQ3NToiRklORC5GSUxFIiw0NzY6IkFDVElWRS5DRUxMLkZPTlQiLDQ3NzoiRU5BQkxFLlRJUFdJWkFSRCIsNDc4OiJWQkEuTUFLRS5BRERJTiIsNDgwOiJJ''@;'; put 'put ''TlNFUlREQVRBVEFCTEUiLDQ4MToiV09SS0dST1VQLk9QVElPTlMiLDQ4MjoiTUFJTC5TRU5ELk1BSUxFUiIsNDg1OiJBVVRPQ09SUkVDVCIsNDg5OiJQT1NULkRPQ1VNRU5UIiw0OTE6IlBJQ0tMSVNUIiw0OTM6IlZJRVcuU0hPVyIsNDk0OiJWSUVXLkRFRklORSIsNDk1OiJWSUVXLkRFTEVU''@;'; put 'put ''RSIsNTA5OiJTSEVFVC5CQUNLR1JPVU5EIiw1MTA6IklOU0VSVC5NQVAuT0JKRUNUIiw1MTE6Ik9QVElPTlMuTUVOT05PIiw1MTc6Ik1TT0NIRUNLUyIsNTE4OiJOT1JNQUwiLDUxOToiTEFZT1VUIiw1MjA6IlJNLlBSSU5ULkFSRUEiLDUyMToiQ0xFQVIuUFJJTlQuQVJFQSIsNTIyOiJBREQu''@;'; put 'put ''UFJJTlQuQVJFQSIsNTIzOiJNT1ZFLkJSSyIsNTQ1OiJISURFQ1VSUi5OT1RFIiw1NDY6IkhJREVBTEwuTk9URVMiLDU0NzoiREVMRVRFLk5PVEUiLDU0ODoiVFJBVkVSU0UuTk9URVMiLDU0OToiQUNUSVZBVEUuTk9URVMiLDYyMDoiUFJPVEVDVC5SRVZJU0lPTlMiLDYyMToiVU5QUk9URUNU''@;'; put 'put ''LlJFVklTSU9OUyIsNjQ3OiJPUFRJT05TLk1FIiw2NTM6IldFQi5QVUJMSVNIIiw2Njc6Ik5FV1dFQlFVRVJZIiw2NzM6IlBJVk9ULlRBQkxFLkNIQVJUIiw3NTM6Ik9QVElPTlMuU0FWRSIsNzU1OiJPUFRJT05TLlNQRUxMIiw4MDg6IkhJREVBTEwuSU5LQU5OT1RTIn0scEQ9ezA6IkNPVU5U''@;'; put 'put ''IiwxOiJJRiIsMjoiSVNOQSIsMzoiSVNFUlJPUiIsNDoiU1VNIiw1OiJBVkVSQUdFIiw2OiJNSU4iLDc6Ik1BWCIsODoiUk9XIiw5OiJDT0xVTU4iLDEwOiJOQSIsMTE6Ik5QViIsMTI6IlNUREVWIiwxMzoiRE9MTEFSIiwxNDoiRklYRUQiLDE1OiJTSU4iLDE2OiJDT1MiLDE3OiJUQU4iLDE4''@;'; put 'put ''OiJBVEFOIiwxOToiUEkiLDIwOiJTUVJUIiwyMToiRVhQIiwyMjoiTE4iLDIzOiJMT0cxMCIsMjQ6IkFCUyIsMjU6IklOVCIsMjY6IlNJR04iLDI3OiJST1VORCIsMjg6IkxPT0tVUCIsMjk6IklOREVYIiwzMDoiUkVQVCIsMzE6Ik1JRCIsMzI6IkxFTiIsMzM6IlZBTFVFIiwzNDoiVFJVRSIs''@;'; put 'put ''MzU6IkZBTFNFIiwzNjoiQU5EIiwzNzoiT1IiLDM4OiJOT1QiLDM5OiJNT0QiLDQwOiJEQ09VTlQiLDQxOiJEU1VNIiw0MjoiREFWRVJBR0UiLDQzOiJETUlOIiw0NDoiRE1BWCIsNDU6IkRTVERFViIsNDY6IlZBUiIsNDc6IkRWQVIiLDQ4OiJURVhUIiw0OToiTElORVNUIiw1MDoiVFJFTkQi''@;'; put 'put ''LDUxOiJMT0dFU1QiLDUyOiJHUk9XVEgiLDUzOiJHT1RPIiw1NDoiSEFMVCIsNTU6IlJFVFVSTiIsNTY6IlBWIiw1NzoiRlYiLDU4OiJOUEVSIiw1OToiUE1UIiw2MDoiUkFURSIsNjE6Ik1JUlIiLDYyOiJJUlIiLDYzOiJSQU5EIiw2NDoiTUFUQ0giLDY1OiJEQVRFIiw2NjoiVElNRSIsNjc6''@;'; put 'put ''IkRBWSIsNjg6Ik1PTlRIIiw2OToiWUVBUiIsNzA6IldFRUtEQVkiLDcxOiJIT1VSIiw3MjoiTUlOVVRFIiw3MzoiU0VDT05EIiw3NDoiTk9XIiw3NToiQVJFQVMiLDc2OiJST1dTIiw3NzoiQ09MVU1OUyIsNzg6Ik9GRlNFVCIsNzk6IkFCU1JFRiIsODA6IlJFTFJFRiIsODE6IkFSR1VNRU5U''@;'; put 'put ''Iiw4MjoiU0VBUkNIIiw4MzoiVFJBTlNQT1NFIiw4NDoiRVJST1IiLDg1OiJTVEVQIiw4NjoiVFlQRSIsODc6IkVDSE8iLDg4OiJTRVQuTkFNRSIsODk6IkNBTExFUiIsOTA6IkRFUkVGIiw5MToiV0lORE9XUyIsOTI6IlNFUklFUyIsOTM6IkRPQ1VNRU5UUyIsOTQ6IkFDVElWRS5DRUxMIiw5''@;'; put 'put ''NToiU0VMRUNUSU9OIiw5NjoiUkVTVUxUIiw5NzoiQVRBTjIiLDk4OiJBU0lOIiw5OToiQUNPUyIsMTAwOiJDSE9PU0UiLDEwMToiSExPT0tVUCIsMTAyOiJWTE9PS1VQIiwxMDM6IkxJTktTIiwxMDQ6IklOUFVUIiwxMDU6IklTUkVGIiwxMDY6IkdFVC5GT1JNVUxBIiwxMDc6IkdFVC5OQU1F''@;'; put 'put ''IiwxMDg6IlNFVC5WQUxVRSIsMTA5OiJMT0ciLDExMDoiRVhFQyIsMTExOiJDSEFSIiwxMTI6IkxPV0VSIiwxMTM6IlVQUEVSIiwxMTQ6IlBST1BFUiIsMTE1OiJMRUZUIiwxMTY6IlJJR0hUIiwxMTc6IkVYQUNUIiwxMTg6IlRSSU0iLDExOToiUkVQTEFDRSIsMTIwOiJTVUJTVElUVVRFIiwx''@;'; put 'put ''MjE6IkNPREUiLDEyMjoiTkFNRVMiLDEyMzoiRElSRUNUT1JZIiwxMjQ6IkZJTkQiLDEyNToiQ0VMTCIsMTI2OiJJU0VSUiIsMTI3OiJJU1RFWFQiLDEyODoiSVNOVU1CRVIiLDEyOToiSVNCTEFOSyIsMTMwOiJUIiwxMzE6Ik4iLDEzMjoiRk9QRU4iLDEzMzoiRkNMT1NFIiwxMzQ6IkZTSVpF''@;'; put 'put ''IiwxMzU6IkZSRUFETE4iLDEzNjoiRlJFQUQiLDEzNzoiRldSSVRFTE4iLDEzODoiRldSSVRFIiwxMzk6IkZQT1MiLDE0MDoiREFURVZBTFVFIiwxNDE6IlRJTUVWQUxVRSIsMTQyOiJTTE4iLDE0MzoiU1lEIiwxNDQ6IkREQiIsMTQ1OiJHRVQuREVGIiwxNDY6IlJFRlRFWFQiLDE0NzoiVEVY''@;'; put 'put ''VFJFRiIsMTQ4OiJJTkRJUkVDVCIsMTQ5OiJSRUdJU1RFUiIsMTUwOiJDQUxMIiwxNTE6IkFERC5CQVIiLDE1MjoiQURELk1FTlUiLDE1MzoiQURELkNPTU1BTkQiLDE1NDoiRU5BQkxFLkNPTU1BTkQiLDE1NToiQ0hFQ0suQ09NTUFORCIsMTU2OiJSRU5BTUUuQ09NTUFORCIsMTU3OiJTSE9X''@;'; put 'put ''LkJBUiIsMTU4OiJERUxFVEUuTUVOVSIsMTU5OiJERUxFVEUuQ09NTUFORCIsMTYwOiJHRVQuQ0hBUlQuSVRFTSIsMTYxOiJESUFMT0cuQk9YIiwxNjI6IkNMRUFOIiwxNjM6Ik1ERVRFUk0iLDE2NDoiTUlOVkVSU0UiLDE2NToiTU1VTFQiLDE2NjoiRklMRVMiLDE2NzoiSVBNVCIsMTY4OiJQ''@;'; put 'put ''UE1UIiwxNjk6IkNPVU5UQSIsMTcwOiJDQU5DRUwuS0VZIiwxNzE6IkZPUiIsMTcyOiJXSElMRSIsMTczOiJCUkVBSyIsMTc0OiJORVhUIiwxNzU6IklOSVRJQVRFIiwxNzY6IlJFUVVFU1QiLDE3NzoiUE9LRSIsMTc4OiJFWEVDVVRFIiwxNzk6IlRFUk1JTkFURSIsMTgwOiJSRVNUQVJUIiwx''@;'; put 'put ''ODE6IkhFTFAiLDE4MjoiR0VULkJBUiIsMTgzOiJQUk9EVUNUIiwxODQ6IkZBQ1QiLDE4NToiR0VULkNFTEwiLDE4NjoiR0VULldPUktTUEFDRSIsMTg3OiJHRVQuV0lORE9XIiwxODg6IkdFVC5ET0NVTUVOVCIsMTg5OiJEUFJPRFVDVCIsMTkwOiJJU05PTlRFWFQiLDE5MToiR0VULk5PVEUi''@;'; put 'put ''LDE5MjoiTk9URSIsMTkzOiJTVERFVlAiLDE5NDoiVkFSUCIsMTk1OiJEU1RERVZQIiwxOTY6IkRWQVJQIiwxOTc6IlRSVU5DIiwxOTg6IklTTE9HSUNBTCIsMTk5OiJEQ09VTlRBIiwyMDA6IkRFTEVURS5CQVIiLDIwMToiVU5SRUdJU1RFUiIsMjA0OiJVU0RPTExBUiIsMjA1OiJGSU5EQiIs''@;'; put 'put ''MjA2OiJTRUFSQ0hCIiwyMDc6IlJFUExBQ0VCIiwyMDg6IkxFRlRCIiwyMDk6IlJJR0hUQiIsMjEwOiJNSURCIiwyMTE6IkxFTkIiLDIxMjoiUk9VTkRVUCIsMjEzOiJST1VORERPV04iLDIxNDoiQVNDIiwyMTU6IkRCQ1MiLDIxNjoiUkFOSyIsMjE5OiJBRERSRVNTIiwyMjA6IkRBWVMzNjAi''@;'; put 'put ''LDIyMToiVE9EQVkiLDIyMjoiVkRCIiwyMjM6IkVMU0UiLDIyNDoiRUxTRS5JRiIsMjI1OiJFTkQuSUYiLDIyNjoiRk9SLkNFTEwiLDIyNzoiTUVESUFOIiwyMjg6IlNVTVBST0RVQ1QiLDIyOToiU0lOSCIsMjMwOiJDT1NIIiwyMzE6IlRBTkgiLDIzMjoiQVNJTkgiLDIzMzoiQUNPU0giLDIz''@;'; put 'put ''NDoiQVRBTkgiLDIzNToiREdFVCIsMjM2OiJDUkVBVEUuT0JKRUNUIiwyMzc6IlZPTEFUSUxFIiwyMzg6IkxBU1QuRVJST1IiLDIzOToiQ1VTVE9NLlVORE8iLDI0MDoiQ1VTVE9NLlJFUEVBVCIsMjQxOiJGT1JNVUxBLkNPTlZFUlQiLDI0MjoiR0VULkxJTksuSU5GTyIsMjQzOiJURVhULkJP''@;'; put 'put ''WCIsMjQ0OiJJTkZPIiwyNDU6IkdST1VQIiwyNDY6IkdFVC5PQkpFQ1QiLDI0NzoiREIiLDI0ODoiUEFVU0UiLDI1MToiUkVTVU1FIiwyNTI6IkZSRVFVRU5DWSIsMjUzOiJBREQuVE9PTEJBUiIsMjU0OiJERUxFVEUuVE9PTEJBUiIsMjU1OiJVc2VyIiwyNTY6IlJFU0VULlRPT0xCQVIiLDI1''@;'; put 'put ''NzoiRVZBTFVBVEUiLDI1ODoiR0VULlRPT0xCQVIiLDI1OToiR0VULlRPT0wiLDI2MDoiU1BFTExJTkcuQ0hFQ0siLDI2MToiRVJST1IuVFlQRSIsMjYyOiJBUFAuVElUTEUiLDI2MzoiV0lORE9XLlRJVExFIiwyNjQ6IlNBVkUuVE9PTEJBUiIsMjY1OiJFTkFCTEUuVE9PTCIsMjY2OiJQUkVT''@;'; put 'put ''Uy5UT09MIiwyNjc6IlJFR0lTVEVSLklEIiwyNjg6IkdFVC5XT1JLQk9PSyIsMjY5OiJBVkVERVYiLDI3MDoiQkVUQURJU1QiLDI3MToiR0FNTUFMTiIsMjcyOiJCRVRBSU5WIiwyNzM6IkJJTk9NRElTVCIsMjc0OiJDSElESVNUIiwyNzU6IkNISUlOViIsMjc2OiJDT01CSU4iLDI3NzoiQ09O''@;'; put 'put ''RklERU5DRSIsMjc4OiJDUklUQklOT00iLDI3OToiRVZFTiIsMjgwOiJFWFBPTkRJU1QiLDI4MToiRkRJU1QiLDI4MjoiRklOViIsMjgzOiJGSVNIRVIiLDI4NDoiRklTSEVSSU5WIiwyODU6IkZMT09SIiwyODY6IkdBTU1BRElTVCIsMjg3OiJHQU1NQUlOViIsMjg4OiJDRUlMSU5HIiwyODk6''@;'; put 'put ''IkhZUEdFT01ESVNUIiwyOTA6IkxPR05PUk1ESVNUIiwyOTE6IkxPR0lOViIsMjkyOiJORUdCSU5PTURJU1QiLDI5MzoiTk9STURJU1QiLDI5NDoiTk9STVNESVNUIiwyOTU6Ik5PUk1JTlYiLDI5NjoiTk9STVNJTlYiLDI5NzoiU1RBTkRBUkRJWkUiLDI5ODoiT0REIiwyOTk6IlBFUk1VVCIs''@;'; put 'put ''MzAwOiJQT0lTU09OIiwzMDE6IlRESVNUIiwzMDI6IldFSUJVTEwiLDMwMzoiU1VNWE1ZMiIsMzA0OiJTVU1YMk1ZMiIsMzA1OiJTVU1YMlBZMiIsMzA2OiJDSElURVNUIiwzMDc6IkNPUlJFTCIsMzA4OiJDT1ZBUiIsMzA5OiJGT1JFQ0FTVCIsMzEwOiJGVEVTVCIsMzExOiJJTlRFUkNFUFQi''@;'; put 'put ''LDMxMjoiUEVBUlNPTiIsMzEzOiJSU1EiLDMxNDoiU1RFWVgiLDMxNToiU0xPUEUiLDMxNjoiVFRFU1QiLDMxNzoiUFJPQiIsMzE4OiJERVZTUSIsMzE5OiJHRU9NRUFOIiwzMjA6IkhBUk1FQU4iLDMyMToiU1VNU1EiLDMyMjoiS1VSVCIsMzIzOiJTS0VXIiwzMjQ6IlpURVNUIiwzMjU6IkxB''@;'; put 'put ''UkdFIiwzMjY6IlNNQUxMIiwzMjc6IlFVQVJUSUxFIiwzMjg6IlBFUkNFTlRJTEUiLDMyOToiUEVSQ0VOVFJBTksiLDMzMDoiTU9ERSIsMzMxOiJUUklNTUVBTiIsMzMyOiJUSU5WIiwzMzQ6Ik1PVklFLkNPTU1BTkQiLDMzNToiR0VULk1PVklFIiwzMzY6IkNPTkNBVEVOQVRFIiwzMzc6IlBP''@;'; put 'put ''V0VSIiwzMzg6IlBJVk9ULkFERC5EQVRBIiwzMzk6IkdFVC5QSVZPVC5UQUJMRSIsMzQwOiJHRVQuUElWT1QuRklFTEQiLDM0MToiR0VULlBJVk9ULklURU0iLDM0MjoiUkFESUFOUyIsMzQzOiJERUdSRUVTIiwzNDQ6IlNVQlRPVEFMIiwzNDU6IlNVTUlGIiwzNDY6IkNPVU5USUYiLDM0Nzoi''@;'; put 'put ''Q09VTlRCTEFOSyIsMzQ4OiJTQ0VOQVJJTy5HRVQiLDM0OToiT1BUSU9OUy5MSVNUUy5HRVQiLDM1MDoiSVNQTVQiLDM1MToiREFURURJRiIsMzUyOiJEQVRFU1RSSU5HIiwzNTM6Ik5VTUJFUlNUUklORyIsMzU0OiJST01BTiIsMzU1OiJPUEVOLkRJQUxPRyIsMzU2OiJTQVZFLkRJQUxPRyIs''@;'; put 'put ''MzU3OiJWSUVXLkdFVCIsMzU4OiJHRVRQSVZPVERBVEEiLDM1OToiSFlQRVJMSU5LIiwzNjA6IlBIT05FVElDIiwzNjE6IkFWRVJBR0VBIiwzNjI6Ik1BWEEiLDM2MzoiTUlOQSIsMzY0OiJTVERFVlBBIiwzNjU6IlZBUlBBIiwzNjY6IlNUREVWQSIsMzY3OiJWQVJBIiwzNjg6IkJBSFRURVhU''@;'; put 'put ''IiwzNjk6IlRIQUlEQVlPRldFRUsiLDM3MDoiVEhBSURJR0lUIiwzNzE6IlRIQUlNT05USE9GWUVBUiIsMzcyOiJUSEFJTlVNU09VTkQiLDM3MzoiVEhBSU5VTVNUUklORyIsMzc0OiJUSEFJU1RSSU5HTEVOR1RIIiwzNzU6IklTVEhBSURJR0lUIiwzNzY6IlJPVU5EQkFIVERPV04iLDM3Nzoi''@;'; put 'put ''Uk9VTkRCQUhUVVAiLDM3ODoiVEhBSVlFQVIiLDM3OToiUlREIiwzODA6IkNVQkVWQUxVRSIsMzgxOiJDVUJFTUVNQkVSIiwzODI6IkNVQkVNRU1CRVJQUk9QRVJUWSIsMzgzOiJDVUJFUkFOS0VETUVNQkVSIiwzODQ6IkhFWDJCSU4iLDM4NToiSEVYMkRFQyIsMzg2OiJIRVgyT0NUIiwzODc6''@;'; put 'put ''IkRFQzJCSU4iLDM4ODoiREVDMkhFWCIsMzg5OiJERUMyT0NUIiwzOTA6Ik9DVDJCSU4iLDM5MToiT0NUMkhFWCIsMzkyOiJPQ1QyREVDIiwzOTM6IkJJTjJERUMiLDM5NDoiQklOMk9DVCIsMzk1OiJCSU4ySEVYIiwzOTY6IklNU1VCIiwzOTc6IklNRElWIiwzOTg6IklNUE9XRVIiLDM5OToi''@;'; put 'put ''SU1BQlMiLDQwMDoiSU1TUVJUIiw0MDE6IklNTE4iLDQwMjoiSU1MT0cyIiw0MDM6IklNTE9HMTAiLDQwNDoiSU1TSU4iLDQwNToiSU1DT1MiLDQwNjoiSU1FWFAiLDQwNzoiSU1BUkdVTUVOVCIsNDA4OiJJTUNPTkpVR0FURSIsNDA5OiJJTUFHSU5BUlkiLDQxMDoiSU1SRUFMIiw0MTE6IkNP''@;'; put 'put ''TVBMRVgiLDQxMjoiSU1TVU0iLDQxMzoiSU1QUk9EVUNUIiw0MTQ6IlNFUklFU1NVTSIsNDE1OiJGQUNURE9VQkxFIiw0MTY6IlNRUlRQSSIsNDE3OiJRVU9USUVOVCIsNDE4OiJERUxUQSIsNDE5OiJHRVNURVAiLDQyMDoiSVNFVkVOIiw0MjE6IklTT0REIiw0MjI6Ik1ST1VORCIsNDIzOiJF''@;'; put 'put ''UkYiLDQyNDoiRVJGQyIsNDI1OiJCRVNTRUxKIiw0MjY6IkJFU1NFTEsiLDQyNzoiQkVTU0VMWSIsNDI4OiJCRVNTRUxJIiw0Mjk6IlhJUlIiLDQzMDoiWE5QViIsNDMxOiJQUklDRU1BVCIsNDMyOiJZSUVMRE1BVCIsNDMzOiJJTlRSQVRFIiw0MzQ6IlJFQ0VJVkVEIiw0MzU6IkRJU0MiLDQz''@;'; put 'put ''NjoiUFJJQ0VESVNDIiw0Mzc6IllJRUxERElTQyIsNDM4OiJUQklMTEVRIiw0Mzk6IlRCSUxMUFJJQ0UiLDQ0MDoiVEJJTExZSUVMRCIsNDQxOiJQUklDRSIsNDQyOiJZSUVMRCIsNDQzOiJET0xMQVJERSIsNDQ0OiJET0xMQVJGUiIsNDQ1OiJOT01JTkFMIiw0NDY6IkVGRkVDVCIsNDQ3OiJD''@;'; put 'put ''VU1QUklOQyIsNDQ4OiJDVU1JUE1UIiw0NDk6IkVEQVRFIiw0NTA6IkVPTU9OVEgiLDQ1MToiWUVBUkZSQUMiLDQ1MjoiQ09VUERBWUJTIiw0NTM6IkNPVVBEQVlTIiw0NTQ6IkNPVVBEQVlTTkMiLDQ1NToiQ09VUE5DRCIsNDU2OiJDT1VQTlVNIiw0NTc6IkNPVVBQQ0QiLDQ1ODoiRFVSQVRJ''@;'; put 'put ''T04iLDQ1OToiTURVUkFUSU9OIiw0NjA6Ik9ERExQUklDRSIsNDYxOiJPRERMWUlFTEQiLDQ2MjoiT0RERlBSSUNFIiw0NjM6Ik9EREZZSUVMRCIsNDY0OiJSQU5EQkVUV0VFTiIsNDY1OiJXRUVLTlVNIiw0NjY6IkFNT1JERUdSQyIsNDY3OiJBTU9STElOQyIsNDY4OiJDT05WRVJUIiw3MjQ6''@;'; put 'put ''IlNIRUVUSlMiLDQ2OToiQUNDUklOVCIsNDcwOiJBQ0NSSU5UTSIsNDcxOiJXT1JLREFZIiw0NzI6Ik5FVFdPUktEQVlTIiw0NzM6IkdDRCIsNDc0OiJNVUxUSU5PTUlBTCIsNDc1OiJMQ00iLDQ3NjoiRlZTQ0hFRFVMRSIsNDc3OiJDVUJFS1BJTUVNQkVSIiw0Nzg6IkNVQkVTRVQiLDQ3OToi''@;'; put 'put ''Q1VCRVNFVENPVU5UIiw0ODA6IklGRVJST1IiLDQ4MToiQ09VTlRJRlMiLDQ4MjoiU1VNSUZTIiw0ODM6IkFWRVJBR0VJRiIsNDg0OiJBVkVSQUdFSUZTIn0sZWo9ezI6MSwzOjEsMTA6MCwxNToxLDE2OjEsMTc6MSwxODoxLDE5OjAsMjA6MSwyMToxLDIyOjEsMjM6MSwyNDoxLDI1OjEsMjY6''@;'; put 'put ''MSwyNzoyLDMwOjIsMzE6MywzMjoxLDMzOjEsMzQ6MCwzNTowLDM4OjEsMzk6Miw0MDozLDQxOjMsNDI6Myw0MzozLDQ0OjMsNDU6Myw0NzozLDQ4OjIsNTM6MSw2MTozLDYzOjAsNjU6Myw2NjozLDY3OjEsNjg6MSw2OToxLDcwOjEsNzE6MSw3MjoxLDczOjEsNzQ6MCw3NToxLDc2OjEsNzc6''@;'; put 'put ''MSw3OToyLDgwOjIsODM6MSw4NTowLDg2OjEsODk6MCw5MDoxLDk0OjAsOTU6MCw5NzoyLDk4OjEsOTk6MSwxMDE6MywxMDI6MywxMDU6MSwxMDY6MSwxMDg6MiwxMTE6MSwxMTI6MSwxMTM6MSwxMTQ6MSwxMTc6MiwxMTg6MSwxMTk6NCwxMjE6MSwxMjY6MSwxMjc6MSwxMjg6MSwxMjk6MSwx''@;'; put 'put ''MzA6MSwxMzE6MSwxMzM6MSwxMzQ6MSwxMzU6MSwxMzY6MiwxMzc6MiwxMzg6MiwxNDA6MSwxNDE6MSwxNDI6MywxNDM6NCwxNDQ6NCwxNjE6MSwxNjI6MSwxNjM6MSwxNjQ6MSwxNjU6MiwxNzI6MSwxNzU6MiwxNzY6MiwxNzc6MywxNzg6MiwxNzk6MSwxODQ6MSwxODY6MSwxODk6MywxOTA6''@;'; put 'put ''MSwxOTU6MywxOTY6MywxOTc6MSwxOTg6MSwxOTk6MywyMDE6MSwyMDc6NCwyMTA6MywyMTE6MSwyMTI6MiwyMTM6MiwyMTQ6MSwyMTU6MSwyMjU6MCwyMjk6MSwyMzA6MSwyMzE6MSwyMzI6MSwyMzM6MSwyMzQ6MSwyMzU6MywyNDQ6MSwyNDc6NCwyNTI6MiwyNTc6MSwyNjE6MSwyNzE6MSwy''@;'; put 'put ''NzM6NCwyNzQ6MiwyNzU6MiwyNzY6MiwyNzc6MywyNzg6MywyNzk6MSwyODA6MywyODE6MywyODI6MywyODM6MSwyODQ6MSwyODU6MiwyODY6NCwyODc6MywyODg6MiwyODk6NCwyOTA6MywyOTE6MywyOTI6MywyOTM6NCwyOTQ6MSwyOTU6MywyOTY6MSwyOTc6MywyOTg6MSwyOTk6MiwzMDA6''@;'; put 'put ''MywzMDE6MywzMDI6NCwzMDM6MiwzMDQ6MiwzMDU6MiwzMDY6MiwzMDc6MiwzMDg6MiwzMDk6MywzMTA6MiwzMTE6MiwzMTI6MiwzMTM6MiwzMTQ6MiwzMTU6MiwzMTY6NCwzMjU6MiwzMjY6MiwzMjc6MiwzMjg6MiwzMzE6MiwzMzI6MiwzMzc6MiwzNDI6MSwzNDM6MSwzNDY6MiwzNDc6MSwz''@;'; put 'put ''NTA6NCwzNTE6MywzNTI6MSwzNTM6MiwzNjA6MSwzNjg6MSwzNjk6MSwzNzA6MSwzNzE6MSwzNzI6MSwzNzM6MSwzNzQ6MSwzNzU6MSwzNzY6MSwzNzc6MSwzNzg6MSwzODI6MywzODU6MSwzOTI6MSwzOTM6MSwzOTY6MiwzOTc6MiwzOTg6MiwzOTk6MSw0MDA6MSw0MDE6MSw0MDI6MSw0MDM6''@;'; put 'put ''MSw0MDQ6MSw0MDU6MSw0MDY6MSw0MDc6MSw0MDg6MSw0MDk6MSw0MTA6MSw0MTQ6NCw0MTU6MSw0MTY6MSw0MTc6Miw0MjA6MSw0MjE6MSw0MjI6Miw0MjQ6MSw0MjU6Miw0MjY6Miw0Mjc6Miw0Mjg6Miw0MzA6Myw0Mzg6Myw0Mzk6Myw0NDA6Myw0NDM6Miw0NDQ6Miw0NDU6Miw0NDY6Miw0''@;'; put 'put ''NDc6Niw0NDg6Niw0NDk6Miw0NTA6Miw0NjQ6Miw0Njg6Myw0NzY6Miw0Nzk6MSw0ODA6Miw2NTUzNTowfSxhYj17Il94bGZuLkFDT1QiOiJBQ09UIiwiX3hsZm4uQUNPVEgiOiJBQ09USCIsIl94bGZuLkFHR1JFR0FURSI6IkFHR1JFR0FURSIsIl94bGZuLkFSQUJJQyI6IkFSQUJJQyIsIl94''@;'; put 'put ''bGZuLkFWRVJBR0VJRiI6IkFWRVJBR0VJRiIsIl94bGZuLkFWRVJBR0VJRlMiOiJBVkVSQUdFSUZTIiwiX3hsZm4uQkFTRSI6IkJBU0UiLCJfeGxmbi5CRVRBLkRJU1QiOiJCRVRBLkRJU1QiLCJfeGxmbi5CRVRBLklOViI6IkJFVEEuSU5WIiwiX3hsZm4uQklOT00uRElTVCI6IkJJTk9NLkRJ''@;'; put 'put ''U1QiLCJfeGxmbi5CSU5PTS5ESVNULlJBTkdFIjoiQklOT00uRElTVC5SQU5HRSIsIl94bGZuLkJJTk9NLklOViI6IkJJTk9NLklOViIsIl94bGZuLkJJVEFORCI6IkJJVEFORCIsIl94bGZuLkJJVExTSElGVCI6IkJJVExTSElGVCIsIl94bGZuLkJJVE9SIjoiQklUT1IiLCJfeGxmbi5CSVRS''@;'; put 'put ''U0hJRlQiOiJCSVRSU0hJRlQiLCJfeGxmbi5CSVRYT1IiOiJCSVRYT1IiLCJfeGxmbi5DRUlMSU5HLk1BVEgiOiJDRUlMSU5HLk1BVEgiLCJfeGxmbi5DRUlMSU5HLlBSRUNJU0UiOiJDRUlMSU5HLlBSRUNJU0UiLCJfeGxmbi5DSElTUS5ESVNUIjoiQ0hJU1EuRElTVCIsIl94bGZuLkNISVNR''@;'; put 'put ''LkRJU1QuUlQiOiJDSElTUS5ESVNULlJUIiwiX3hsZm4uQ0hJU1EuSU5WIjoiQ0hJU1EuSU5WIiwiX3hsZm4uQ0hJU1EuSU5WLlJUIjoiQ0hJU1EuSU5WLlJUIiwiX3hsZm4uQ0hJU1EuVEVTVCI6IkNISVNRLlRFU1QiLCJfeGxmbi5DT01CSU5BIjoiQ09NQklOQSIsIl94bGZuLkNPTkNBVCI6''@;'; put 'put ''IkNPTkNBVCIsIl94bGZuLkNPTkZJREVOQ0UuTk9STSI6IkNPTkZJREVOQ0UuTk9STSIsIl94bGZuLkNPTkZJREVOQ0UuVCI6IkNPTkZJREVOQ0UuVCIsIl94bGZuLkNPVCI6IkNPVCIsIl94bGZuLkNPVEgiOiJDT1RIIiwiX3hsZm4uQ09VTlRJRlMiOiJDT1VOVElGUyIsIl94bGZuLkNPVkFS''@;'; put 'put ''SUFOQ0UuUCI6IkNPVkFSSUFOQ0UuUCIsIl94bGZuLkNPVkFSSUFOQ0UuUyI6IkNPVkFSSUFOQ0UuUyIsIl94bGZuLkNTQyI6IkNTQyIsIl94bGZuLkNTQ0giOiJDU0NIIiwiX3hsZm4uREFZUyI6IkRBWVMiLCJfeGxmbi5ERUNJTUFMIjoiREVDSU1BTCIsIl94bGZuLkVDTUEuQ0VJTElORyI6''@;'; put 'put ''IkVDTUEuQ0VJTElORyIsIl94bGZuLkVSRi5QUkVDSVNFIjoiRVJGLlBSRUNJU0UiLCJfeGxmbi5FUkZDLlBSRUNJU0UiOiJFUkZDLlBSRUNJU0UiLCJfeGxmbi5FWFBPTi5ESVNUIjoiRVhQT04uRElTVCIsIl94bGZuLkYuRElTVCI6IkYuRElTVCIsIl94bGZuLkYuRElTVC5SVCI6IkYuRElT''@;'; put 'put ''VC5SVCIsIl94bGZuLkYuSU5WIjoiRi5JTlYiLCJfeGxmbi5GLklOVi5SVCI6IkYuSU5WLlJUIiwiX3hsZm4uRi5URVNUIjoiRi5URVNUIiwiX3hsZm4uRklMVEVSWE1MIjoiRklMVEVSWE1MIiwiX3hsZm4uRkxPT1IuTUFUSCI6IkZMT09SLk1BVEgiLCJfeGxmbi5GTE9PUi5QUkVDSVNFIjoi''@;'; put 'put ''RkxPT1IuUFJFQ0lTRSIsIl94bGZuLkZPUkVDQVNULkVUUyI6IkZPUkVDQVNULkVUUyIsIl94bGZuLkZPUkVDQVNULkVUUy5DT05GSU5UIjoiRk9SRUNBU1QuRVRTLkNPTkZJTlQiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiOiJGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiLCJf''@;'; put 'put ''eGxmbi5GT1JFQ0FTVC5FVFMuU1RBVCI6IkZPUkVDQVNULkVUUy5TVEFUIiwiX3hsZm4uRk9SRUNBU1QuTElORUFSIjoiRk9SRUNBU1QuTElORUFSIiwiX3hsZm4uRk9STVVMQVRFWFQiOiJGT1JNVUxBVEVYVCIsIl94bGZuLkdBTU1BIjoiR0FNTUEiLCJfeGxmbi5HQU1NQS5ESVNUIjoiR0FN''@;'; put 'put ''TUEuRElTVCIsIl94bGZuLkdBTU1BLklOViI6IkdBTU1BLklOViIsIl94bGZuLkdBTU1BTE4uUFJFQ0lTRSI6IkdBTU1BTE4uUFJFQ0lTRSIsIl94bGZuLkdBVVNTIjoiR0FVU1MiLCJfeGxmbi5IWVBHRU9NLkRJU1QiOiJIWVBHRU9NLkRJU1QiLCJfeGxmbi5JRkVSUk9SIjoiSUZFUlJPUiIs''@;'; put 'put ''Il94bGZuLklGTkEiOiJJRk5BIiwiX3hsZm4uSUZTIjoiSUZTIiwiX3hsZm4uSU1DT1NIIjoiSU1DT1NIIiwiX3hsZm4uSU1DT1QiOiJJTUNPVCIsIl94bGZuLklNQ1NDIjoiSU1DU0MiLCJfeGxmbi5JTUNTQ0giOiJJTUNTQ0giLCJfeGxmbi5JTVNFQyI6IklNU0VDIiwiX3hsZm4uSU1TRUNI''@;'; put 'put ''IjoiSU1TRUNIIiwiX3hsZm4uSU1TSU5IIjoiSU1TSU5IIiwiX3hsZm4uSU1UQU4iOiJJTVRBTiIsIl94bGZuLklTRk9STVVMQSI6IklTRk9STVVMQSIsIl94bGZuLklTTy5DRUlMSU5HIjoiSVNPLkNFSUxJTkciLCJfeGxmbi5JU09XRUVLTlVNIjoiSVNPV0VFS05VTSIsIl94bGZuLkxPR05P''@;'; put 'put ''Uk0uRElTVCI6IkxPR05PUk0uRElTVCIsIl94bGZuLkxPR05PUk0uSU5WIjoiTE9HTk9STS5JTlYiLCJfeGxmbi5NQVhJRlMiOiJNQVhJRlMiLCJfeGxmbi5NSU5JRlMiOiJNSU5JRlMiLCJfeGxmbi5NT0RFLk1VTFQiOiJNT0RFLk1VTFQiLCJfeGxmbi5NT0RFLlNOR0wiOiJNT0RFLlNOR0wi''@;'; put 'put ''LCJfeGxmbi5NVU5JVCI6Ik1VTklUIiwiX3hsZm4uTkVHQklOT00uRElTVCI6Ik5FR0JJTk9NLkRJU1QiLCJfeGxmbi5ORVRXT1JLREFZUy5JTlRMIjoiTkVUV09SS0RBWVMuSU5UTCIsIl94bGZuLk5JR0JJTk9NIjoiTklHQklOT00iLCJfeGxmbi5OT1JNLkRJU1QiOiJOT1JNLkRJU1QiLCJf''@;'; put 'put ''eGxmbi5OT1JNLklOViI6Ik5PUk0uSU5WIiwiX3hsZm4uTk9STS5TLkRJU1QiOiJOT1JNLlMuRElTVCIsIl94bGZuLk5PUk0uUy5JTlYiOiJOT1JNLlMuSU5WIiwiX3hsZm4uTlVNQkVSVkFMVUUiOiJOVU1CRVJWQUxVRSIsIl94bGZuLlBEVVJBVElPTiI6IlBEVVJBVElPTiIsIl94bGZuLlBF''@;'; put 'put ''UkNFTlRJTEUuRVhDIjoiUEVSQ0VOVElMRS5FWEMiLCJfeGxmbi5QRVJDRU5USUxFLklOQyI6IlBFUkNFTlRJTEUuSU5DIiwiX3hsZm4uUEVSQ0VOVFJBTksuRVhDIjoiUEVSQ0VOVFJBTksuRVhDIiwiX3hsZm4uUEVSQ0VOVFJBTksuSU5DIjoiUEVSQ0VOVFJBTksuSU5DIiwiX3hsZm4uUEVS''@;'; put 'put ''TVVUQVRJT05BIjoiUEVSTVVUQVRJT05BIiwiX3hsZm4uUEhJIjoiUEhJIiwiX3hsZm4uUE9JU1NPTi5ESVNUIjoiUE9JU1NPTi5ESVNUIiwiX3hsZm4uUVVBUlRJTEUuRVhDIjoiUVVBUlRJTEUuRVhDIiwiX3hsZm4uUVVBUlRJTEUuSU5DIjoiUVVBUlRJTEUuSU5DIiwiX3hsZm4uUVVFUllT''@;'; put 'put ''VFJJTkciOiJRVUVSWVNUUklORyIsIl94bGZuLlJBTksuQVZHIjoiUkFOSy5BVkciLCJfeGxmbi5SQU5LLkVRIjoiUkFOSy5FUSIsIl94bGZuLlJSSSI6IlJSSSIsIl94bGZuLlNFQyI6IlNFQyIsIl94bGZuLlNFQ0giOiJTRUNIIiwiX3hsZm4uU0hFRVQiOiJTSEVFVCIsIl94bGZuLlNIRUVU''@;'; put 'put ''UyI6IlNIRUVUUyIsIl94bGZuLlNLRVcuUCI6IlNLRVcuUCIsIl94bGZuLlNUREVWLlAiOiJTVERFVi5QIiwiX3hsZm4uU1RERVYuUyI6IlNUREVWLlMiLCJfeGxmbi5TVU1JRlMiOiJTVU1JRlMiLCJfeGxmbi5TV0lUQ0giOiJTV0lUQ0giLCJfeGxmbi5ULkRJU1QiOiJULkRJU1QiLCJfeGxm''@;'; put 'put ''bi5ULkRJU1QuMlQiOiJULkRJU1QuMlQiLCJfeGxmbi5ULkRJU1QuUlQiOiJULkRJU1QuUlQiLCJfeGxmbi5ULklOViI6IlQuSU5WIiwiX3hsZm4uVC5JTlYuMlQiOiJULklOVi4yVCIsIl94bGZuLlQuVEVTVCI6IlQuVEVTVCIsIl94bGZuLlRFWFRKT0lOIjoiVEVYVEpPSU4iLCJfeGxmbi5V''@;'; put 'put ''TklDSEFSIjoiVU5JQ0hBUiIsIl94bGZuLlVOSUNPREUiOiJVTklDT0RFIiwiX3hsZm4uVkFSLlAiOiJWQVIuUCIsIl94bGZuLlZBUi5TIjoiVkFSLlMiLCJfeGxmbi5XRUJTRVJWSUNFIjoiV0VCU0VSVklDRSIsIl94bGZuLldFSUJVTEwuRElTVCI6IldFSUJVTEwuRElTVCIsIl94bGZuLldP''@;'; put 'put ''UktEQVkuSU5UTCI6IldPUktEQVkuSU5UTCIsIl94bGZuLlhPUiI6IlhPUiIsIl94bGZuLlouVEVTVCI6IlouVEVTVCJ9O2Z1bmN0aW9uIGlTKFMpe3JldHVybiJvZjoiPT1TLnNsaWNlKDAsMykmJihTPVMuc2xpY2UoMykpLDYxPT1TLmNoYXJDb2RlQXQoMCkmJjYxPT0oUz1TLnNsaWNlKDEp''@;'; put 'put ''KS5jaGFyQ29kZUF0KDApJiYoUz1TLnNsaWNlKDEpKSwoUz0oUz0oUz1TLnJlcGxhY2UoL0NPTVwuTUlDUk9TT0ZUXC4vZywiIikpLnJlcGxhY2UoL1xbKCg/OlwuW0EtWl0rWzAtOV0rKSg/OjpcLltBLVpdK1swLTldKyk/KVxdL2csZnVuY3Rpb24oUixrKXtyZXR1cm4gay5yZXBsYWNlKC9c''@;'; put 'put ''Li9nLCIiKX0pKS5yZXBsYWNlKC9cWy4oI1tBLVpdKls/IV0pXF0vZywiJDEiKSkucmVwbGFjZSgvWzt+XS9nLCIsIikucmVwbGFjZSgvXHwvZywiOyIpfWZ1bmN0aW9uIFo0KFMpe3JldHVybigib2Y6PSIrUy5yZXBsYWNlKG0yLCIkMVsuJDIkMyQ0JDVdIikucmVwbGFjZSgvXF06XFsvZywi''@;'; put 'put ''OiIpKS5yZXBsYWNlKC87L2csInwiKS5yZXBsYWNlKC8sL2csIjsiKX1mdW5jdGlvbiBvYihTKXt2YXIgUj1TLnNwbGl0KCI6Iik7cmV0dXJuW1JbMF0uc3BsaXQoIi4iKVswXSxSWzBdLnNwbGl0KCIuIilbMV0rKFIubGVuZ3RoPjE/IjoiKyhSWzFdLnNwbGl0KCIuIilbMV18fFJbMV0uc3Bs''@;'; put 'put ''aXQoIi4iKVswXSk6IiIpXX1mdW5jdGlvbiBnRChTKXtyZXR1cm4gUy5yZXBsYWNlKC9cLi8sIiEiKX12YXIgbDg9e30sYzg9e307S2EuV1M9WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIsImh0''@;'; put 'put ''dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL29mZmljZURvY3VtZW50L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0Il07dmFyIHEzPXR5cGVvZiBNYXA8InUiO2Z1bmN0aW9uIGFTKFMsUixrLEcpe3ZhciBRPTAsb2U9Uy5sZW5ndGg7aWYoRyl7aWYocTM/Ry5oYXMoUik6T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsUikpZm9yKHZhciBnZT1xMz9HLmdldChSKTpHW1JdO1E8Z2UubGVuZ3RoOysrUSlpZihTW2dlW1FdXS50PT09UiYmKCFTW2dlW1FdXS5yJiYha3x8U1tnZVtRXV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxnZVtRXX1lbHNlIGZvcig7UTxvZTsrK1Ep''@;'; put 'put ''aWYoU1tRXS50PT09UiYmKCFTW1FdLnImJiFrfHxTW1FdLnI9PWspKXJldHVybiBTLkNvdW50KyssUTtyZXR1cm4gU1tvZV09e3Q6UixyOmt9LFMuQ291bnQrKyxTLlVuaXF1ZSsrLEcmJihxMz8oRy5oYXMoUil8fEcuc2V0KFIsW10pLEcuZ2V0KFIpLnB1c2gob2UpKTooT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsUil8fChHW1JdPVtdKSxHW1JdLnB1c2gob2UpKSksb2V9ZnVuY3Rpb24gdTgoUyxSKXt2YXIgaz17bWluOlMrMSxtYXg6UysxfSxHPVRjO2lmKCFSKXJldHVybiBSO3ZhciBRPS0xO3JldHVybiBSLmF1dG8mJihrLmJlc3RGaXQ9MSxSLmJlc3R3''@;'; put 'put ''aWR0aCYmKFE9Ui5iZXN0d2lkdGgpLGRlbGV0ZSBSLmJlc3R3aWR0aCksbnVsbCE9Ui53cHg/UT14NShSLndweCk6bnVsbCE9Ui53Y2g/UT1SLndjaDpudWxsIT1SLndpZHRoJiYoay5jdXN0b21XaWR0aD0xKSxRPi0xPyhrLndpZHRoPWtmKFEpLGsuY3VzdG9tV2lkdGg9MSk6bnVsbCE9Ui53''@;'; put 'put ''aWR0aCYmKGsud2lkdGg9Ui53aWR0aCksUi5oaWRkZW4mJihrLmhpZGRlbj0hMCksay5iZXN0Rml0JiZkZWxldGUgay5jdXN0b21XaWR0aCxUYz1HLG51bGwhPVIubGV2ZWwmJihrLm91dGxpbmVMZXZlbD1rLmxldmVsPVIubGV2ZWwpLG51bGwhPVIuc3R5bGUmJihrLnN0eWxlPVIuc3R5bGUp''@;'; put 'put ''LGt9ZnVuY3Rpb24gb1MoUyxSLGspe3ZhciBHPU1zKFNbIiFyZWYiXSksUT0wLG9lPVNbIiFtZXJnZXMiXXx8W10sZ2U9QXJyYXkuaXNBcnJheShTKTtlOmZvcih2YXIgcGU9MDtwZTw9Ry5lLnI7KytwZSl7Zm9yKHZhciB5ZT0wO3llPG9lLmxlbmd0aDsrK3llKWlmKG9lW3llXS5zLnI8PXBl''@;'; put 'put ''JiZwZTw9b2VbeWVdLmUuciYmb2VbeWVdLnMuYzw9ayYmazw9b2VbeWVdLmUuYyljb250aW51ZSBlO3ZhciBQZT1nZT8oU1twZV18fFtdKVtrXTpTW3FpKHtyOnBlLGM6a30pXTtpZihQZSl7dmFyIE5lPTE7aWYoUGUucyYmKE5lPXlDKFBlLnMpL2JDLkNhbGlicmlbMTJdfHwxKSxQZS53KVE9''@;'; put 'put ''TWF0aC5tYXgoUSxQZS53Lmxlbmd0aCpOZSk7ZWxzZSBzd2l0Y2goUGUudCl7Y2FzZSJiIjpjYXNlImUiOlE9TWF0aC5tYXgoUSw1Kk5lKTticmVhaztjYXNlInMiOlE9TWF0aC5tYXgoUSxQZS52Lmxlbmd0aCpOZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjphNShQZSxQZS52KSxRPU1hdGgubWF4''@;'; put 'put ''KFEsU3RyaW5nKFBlLnd8fFBlLnYpLmxlbmd0aCpOZSk7YnJlYWs7Y2FzZSJkIjpRPU1hdGgubWF4KFEsOCpOZSl9fX1RPDEmJihRPTEpLFIuYmVzdHdpZHRoPVF9ZnVuY3Rpb24gWDMoUyxSKXtpZihTKXt2YXIgaz1bLjcsLjcsLjc1LC43NSwuMywuM107InhsbWwiPT1SJiYoaz1bMSwxLDEs''@;'; put 'put ''MSwuNSwuNV0pLG51bGw9PVMubGVmdCYmKFMubGVmdD1rWzBdKSxudWxsPT1TLnJpZ2h0JiYoUy5yaWdodD1rWzFdKSxudWxsPT1TLnRvcCYmKFMudG9wPWtbMl0pLG51bGw9PVMuYm90dG9tJiYoUy5ib3R0b209a1szXSksbnVsbD09Uy5oZWFkZXImJihTLmhlYWRlcj1rWzRdKSxudWxsPT1T''@;'; put 'put ''LmZvb3RlciYmKFMuZm9vdGVyPWtbNV0pfX1mdW5jdGlvbiBsUyhTLFIpe2Zvcih2YXIgaz1PZShSKSxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPSEwLG9lPVNbR107aWYob2UmJmsubGVuZ3RoPT1PZShvZSkubGVuZ3RoJiYoay5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZihRKXtpZihudWxs''@;'; put 'put ''PT09UltnZV0hPShudWxsPT09b2VbZ2VdKSlyZXR1cm4gdm9pZChRPSExKTtpZigib2JqZWN0Ij09dHlwZW9mIFJbZ2VdKWlmKFsiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmluZGV4T2YoZ2UpPi0xKXtpZihvaChSW2dlXSxvZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpfWVsc2V7aWYo''@;'; put 'put ''IShbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmluZGV4T2YoZ2UpPi0xKSlyZXR1cm4gdm9pZChRPSExKTtpZihoayhSW2dlXSxvZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpfWlmKFJbZ2VdIT1vZVtnZV0pcmV0dXJuIHZvaWQoUT0hMSl9fSksUSkpcmV0dXJuIEd9cmV0dXJuIFNb''@;'; put 'put ''Uy5sZW5ndGhdPXF0KFIpLFMubGVuZ3RoLTF9ZnVuY3Rpb24gbDAoUyxSLGssRyl7dmFyIFE9Ry5yZXZzc2ZbbnVsbCE9ay56P2suejoiR2VuZXJhbCJdLG9lPTYwLGdlPVMubGVuZ3RoO2lmKG51bGw9PVEmJkcuc3NmKWZvcig7b2U8MzkyOysrb2UpaWYobnVsbD09Ry5zc2Zbb2VdKXtBLmxv''@;'; put 'put ''YWQoay56LG9lKSxHLnNzZltvZV09ay56LEcucmV2c3NmW2suel09UT1vZTticmVha312YXIgcGU9MCx5ZT0wLFBlPTAsTmU9MDtpZihHLmNlbGxTdHlsZXMpe2lmKGsucyl7aWYoRy5Gb250cyl7ay5zLmNvbG9yfHwoay5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIg''@;'; put 'put ''WWU9KGsucy5ib2xkPzE6MCl8KGsucy5pdGFsaWM/MjowKXwoay5zLnN0cmlrZT80OjApfChrLnMuc2hhZG93Pzg6MCk7cGU8Ry5Gb250cy5sZW5ndGg7KytwZSl7dmFyIGV0PUcuRm9udHNbcGVdO2lmKG51bGw9PWV0LmZvbnRoYXNoJiYoZXQuZm9udGhhc2g9KGV0LmJvbGQ/MTowKXwoZXQu''@;'; put 'put ''aXRhbGljPzI6MCl8KGV0LnN0cmlrZT80OjApfChldC5zaGFkb3c/ODowKSksIShZZSE9ZXQuZm9udGhhc2h8fCEhay5zLmNvbG9yIT0hIWV0LmNvbG9yfHxrLnMudmFsaWduIT1ldC52YWxpZ258fChrLnMuc3p8fGV0LnN6KSYmKGsucy5zenx8MTIpIT0oZXQuc3p8fDEyKXx8ay5zLm5hbWUm''@;'; put 'put ''Jmsucy5uYW1lIT1ldC5uYW1lfHwoay5zLnVuZGVybGluZXx8MCkhPShldC51bmRlcmxpbmV8fDApfHxrLnMuY29sb3ImJm9oKGsucy5jb2xvcixldC5jb2xvcikpKWJyZWFrfXBlPT1HLkZvbnRzLmxlbmd0aCYmKEcuRm9udHMucHVzaCh7c3o6ay5zLnN6fHwxMixjb2xvcjprLnMuY29sb3J8''@;'; put 'put ''fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTprLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTprLnMuZmFtaWx5fHwyLHNjaGVtZTprLnMuc2NoZW1lLGJvbGQ6ay5zLmJvbGQsaXRhbGljOmsucy5pdGFsaWMsc3RyaWtlOmsucy5zdHJpa2Usc2hhZG93Omsucy5zaGFkb3csdmFsaWduOmsu''@;'; put 'put ''cy52YWxpZ24sdW5kZXJsaW5lOmsucy51bmRlcmxpbmV9KSwxPT1HLkZvbnRzLmxlbmd0aCYmSTQoRy5Gb250c1swXSkpfWlmKEcuRmlsbHMpe2Zvcig7eWU8Ry5GaWxscy5sZW5ndGg7Kyt5ZSl7dmFyIGN0PUcuRmlsbHNbeWVdO2lmKCEhay5zLnN0b3BzPT0hIWN0LnN0b3BzKXtpZihrLnMu''@;'; put 'put ''c3RvcHMpe2lmKGsucy5hbmdsZSE9Y3QuYW5nbGUpY29udGludWU7dmFyIEV0PSEwO2lmKGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LE90KXtvaChrdCxjdC5zdG9wc1tPdF0pJiYoRXQ9ITEpLGt0LnYhPWN0LnN0b3BzW090XS52JiYoRXQ9ITEpfSksIUV0KWNvbnRpbnVlfWVsc2V7''@;'; put 'put ''aWYobnVsbD09ay5zLnBhdHRlcm5UeXBlJiZrLnMuZmdDb2xvciYmKGsucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1rLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoay5zLnBhdHRlcm5UeXBlIT1jdC5wYXR0ZXJuVHlwZXx8b2goay5zLmZnQ29sb3IsY3QuZmdDb2xvcil8fG9oKGsucy5i''@;'; put 'put ''Z0NvbG9yLGN0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFrfX1pZih5ZT09Ry5GaWxscy5sZW5ndGgpe3ZhciBhdD17fTtrLnMuc3RvcHM/KG51bGwhPWsucy5hbmdsZSYmKGF0LmFuZ2xlPWsucy5hbmdsZSksYXQuc3RvcHM9W10say5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3Qpe2F0LnN0''@;'; put 'put ''b3BzLnB1c2gocXQoa3QpKX0pKTphdD17cGF0dGVyblR5cGU6ay5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6ay5zLmZnQ29sb3IsYmdDb2xvcjprLnMuYmdDb2xvcn0sRy5GaWxscy5wdXNoKGF0KX19aWYoRy5Cb3JkZXJzKXtmb3IoO1BlPEcuQm9yZGVycy5sZW5ndGg7KytQZSl7dmFyIGJ0PUcu''@;'; put 'put ''Qm9yZGVyc1tQZV0sanQ9InRvcCI7aWYoay5zW2p0XSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJib3R0b20iXSl7''@;'; put 'put ''aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJsZWZ0Il0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5z''@;'; put 'put ''dHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0icmlnaHQiXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xv''@;'; put 'put ''cikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7YnJlYWt9UGU9PUcuQm9yZGVycy5sZW5ndGgmJkcuQm9yZGVycy5wdXNoKHt0b3A6ay5zLnRvcCYmcXQoay5zLnRvcCl8fHZvaWQgMCxib3R0b206ay5zLmJvdHRvbSYmcXQoay5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0''@;'; put 'put ''Omsucy5sZWZ0JiZxdChrLnMubGVmdCl8fHZvaWQgMCxyaWdodDprLnMucmlnaHQmJnF0KGsucy5yaWdodCl8fHZvaWQgMH0pfWlmKFImJmsucy5zdHlsZSYmIk5vcm1hbCIhPT1rLnMuc3R5bGUpe2ZvcihOZT0xO05lPFIubGVuZ3RoJiZSW05lXS5uYW1lIT1rLnMuc3R5bGU7KytOZSk7TmU9''@;'; put 'put ''PVIubGVuZ3RoJiZSLnB1c2goe25hbWU6ay5zLnN0eWxlLG51bUZtdElkOlEsZm9udElkOnBlLGZpbGxJZDp5ZSxib3JkZXJJZDpQZX0pfX1mb3Iob2U9MDtvZSE9Z2U7KytvZSlpZihTW29lXS5udW1GbXRJZD09USYmU1tvZV0uZm9udElkPT1wZSYmU1tvZV0uZmlsbElkPT15ZSYmU1tvZV0u''@;'; put 'put ''Ym9yZGVySWQ9PVBlJiZTW29lXS54ZklkPT1OZSl7aWYoay5zJiZrLnMuYWxpZ25tZW50KXtpZighU1tvZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9U1tvZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fGsucy5hbGlnbm1lbnQudmVydGljYWwhPVNb''@;'; put 'put ''b2VdLmFsaWdubWVudC52ZXJ0aWNhbHx8ay5zLmFsaWdubWVudC53cmFwVGV4dCE9U1tvZV0uYWxpZ25tZW50LndyYXBUZXh0fHxrLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT1TW29lXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fGsucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT1TW29lXS5h''@;'; put 'put ''bGlnbm1lbnQudGV4dFJvdGF0aW9ufHxrLnMuYWxpZ25tZW50LmluZGVudCE9U1tvZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKFNbb2VdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMpe2lmKCEhay5zLmhpZGRlbj09KCFTW29lXS5wcm90ZWN0aW9ufHwhU1tvZV0ucHJv''@;'; put 'put ''dGVjdGlvbi5oaWRkZW4pfHwhIWsucy5lZGl0YWJsZT09KCFTW29lXS5wcm90ZWN0aW9ufHwhU1tvZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZihTW29lXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBvZX19ZWxzZSBmb3Iob2U9MDtvZSE9Z2U7KytvZSlpZihT''@;'; put 'put ''W29lXS5udW1GbXRJZD09PVEpcmV0dXJuIG9lO3JldHVybiBTW2dlXT17bnVtRm10SWQ6USxmb250SWQ6cGUsZmlsbElkOnllLGJvcmRlcklkOlBlLHhmSWQ6TmUsYXBwbHlOdW1iZXJGb3JtYXQ6MX0scGU+MCYmKFNbZ2VdLmFwcGx5Rm9udD0xKSx5ZT4wJiYoU1tnZV0uYXBwbHlGaWxsPTEp''@;'; put 'put ''LFBlPjAmJihTW2dlXS5hcHBseUJvcmRlcj0xKSwhUiYmay5zJiZrLnMuc3R5bGUmJiJOb3JtYWwiIT1rLnMuc3R5bGUmJihTW2dlXS5zdHlsZT1rLnMuc3R5bGUpLGsucyYmay5zLmFsaWdubWVudCYmKFNbZ2VdLmFsaWdubWVudD17fSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIndyYXBU''@;'; put 'put ''ZXh0Iiwic2hyaW5rVG9GaXQiLCJpbmRlbnQiLCJ0ZXh0Um90YXRpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtudWxsIT1rLnMuYWxpZ25tZW50W2t0XSYmKFNbZ2VdLmFsaWdubWVudFtrdF09ay5zLmFsaWdubWVudFtrdF0pfSkpLGsucyYmay5zLmhpZGRlbiYmKFNbZ2VdLnByb3RlY3Rp''@;'; put 'put ''b258fChTW2dlXS5wcm90ZWN0aW9uPXt9KSxTW2dlXS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksay5zJiZrLnMuZWRpdGFibGUmJihTW2dlXS5wcm90ZWN0aW9ufHwoU1tnZV0ucHJvdGVjdGlvbj17fSksU1tnZV0ucHJvdGVjdGlvbi5lZGl0YWJsZT0hMCksZ2V9ZnVuY3Rpb24gSjMoUyxSLGss''@;'; put 'put ''RyxRLG9lLGdlLHBlKXsiZCI9PT1TLnQmJiJzdHJpbmciPT10eXBlb2YgUy52JiYoUy52PUhlKFMudikpO3RyeXtvZS5jZWxsTkYmJihTLno9QS5fdGFibGVbUl0pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYoKCFvZXx8ITEhPT1vZS5jZWxsVGV4dCkmJiJ6IiE9Uy50KXRyeXtp''@;'; put 'put ''ZihudWxsPT1BLl90YWJsZVtSXSYmQS5sb2FkKHNlW1JdfHwiR2VuZXJhbCIsUiksImUiPT09Uy50KVMudz1TLnd8fE1jW1Mudl07ZWxzZSBpZigwPT09UilpZigibiI9PT1TLnQpUy53PSgwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpO2Vsc2Ug''@;'; put 'put ''aWYoImQiPT09Uy50KXt2YXIgeWU9UWUoUy52KTtTLnc9KDB8eWUpPT09eWU/QS5fZ2VuZXJhbF9pbnQoeWUpOkEuX2dlbmVyYWxfbnVtKHllKX1lbHNle2lmKHZvaWQgMD09PVMudilyZXR1cm4iIjtTLnc9QS5fZ2VuZXJhbChTLnYsYzgpfWVsc2UgUy53PUEuZm9ybWF0KFIsImQiPT09Uy50''@;'; put 'put ''P1FlKFMudik6Uy52LGM4KX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfWlmKG9lLmNlbGxTdHlsZXMmJnBlKXtpZihTLnM9e30sbnVsbCE9ayYmcGUuRmlsbHMpdHJ5e1B0KFMucyxwZS5GaWxsc1trXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihudWxsIT1HJiZwZS5G''@;'; put 'put ''b250cyl0cnl7UHQoUy5zLHBlLkZvbnRzW0ddKX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfWlmKG51bGwhPVEmJnBlLkJvcmRlcnMpdHJ5e1B0KFMucyxwZS5Cb3JkZXJzW1FdKX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfX19ZnVuY3Rpb24gbUQoUyxSLGspe2lmKFMmJlNb''@;'; put 'put ''IiFyZWYiXSl7dmFyIEc9b28oU1siIXJlZiJdKTtpZihHLmUuYzxHLnMuY3x8Ry5lLnI8Ry5zLnIpdGhyb3cgbmV3IEVycm9yKCJCYWQgcmFuZ2UgKCIraysiKTogIitTWyIhcmVmIl0pfX12YXIgZDg9LzwoPzpcdzopP21lcmdlQ2VsbCByZWY9IltBLVowLTk6XSsiXHMqW1wvXT8+L2csdkQ9''@;'; put 'put ''LzwoPzpcdys6KT9zaGVldERhdGFbXj5dKj4oW1xzXFNdKik8XC8oPzpcdys6KT9zaGVldERhdGE+Lyx1Uz0vPCg/Olx3Oik/aHlwZXJsaW5rIFtePl0qPi9nbSxzYj0vIihcdyo6XHcqKSIvLHRqPS88KD86XHc6KT9jb2xcYltePl0qW1wvXT8+L2csYkQ9LzwoPzpcdzopP2NvbnRyb2xcYlte''@;'; put 'put ''Pl0qW1wvXT8+L2csbmo9LzwoPzpcdzopP2F1dG9GaWx0ZXJbXj5dKihbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2F1dG9GaWx0ZXIpPi9nLHlEPS88KD86XHc6KT9wYWdlTWFyZ2luc1tePl0qXC8+L2csX0Q9LzwoPzpcdzopP3NoZWV0UHJcYig/OltePmEtel1bXj5dKik/XC8+Lyx3RD0v''@;'; put 'put ''PCg/Olx3Oik/c2hlZXRQcm90ZWN0aW9uXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sQ0Q9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+LyxSbz0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86''@;'; put 'put ''XHc6KT9zaGVldFZpZXdzKT4vLGZlPS88KD86XHcrOik/ZGF0YVZhbGlkYXRpb25zW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/ZGF0YVZhbGlkYXRpb25zKT4vLGRTPS88KD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nXGJbXj5dKig/OltcL118PihbXHNcU10qPyk8''@;'; put 'put ''XC8oPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmcpPi9nLEdlPS88KD86XHc6KT9zaGVldEZvcm1hdFByW14+XSpcLz4vLFNEPS88KD86XHcrOik/dGFibGVQYXJ0cy4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGFibGVQYXJ0cz4vLE1EPS88KD86XHc6KT9wYWdlU2V0dXBbXj5dKlwv''@;'; put 'put ''Pi8scmo9LzwoPzpcdzopP3Jvd0JyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9yb3dCcmVha3MpPi8sbGI9LzwoPzpcdzopP2NvbEJyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9jb2xCcmVha3MpPi8sajU9LzwoPzpcdzopP2hlYWRlckZvb3Rl''@;'; put 'put ''cltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9oZWFkZXJGb290ZXIpPi8saFM9LzwoPzpcdzopP3ByaW50T3B0aW9uc1xiW14+XC9dKlwvPi87dmFyIGZTPS88KD86XHc6KT90YWJsZVBhcnRcYlteXC8+XSpbXC9dPz4vZztmdW5jdGlvbiBjYihTLFIsayxHKXt2YXIgUT12cihT''@;'; put 'put ''KTtrLlNoZWV0c1tHXXx8KGsuU2hlZXRzW0ddPXt9KSxRLmNvZGVOYW1lJiYoay5TaGVldHNbR10uQ29kZU5hbWU9US5jb2RlTmFtZSl9dmFyIG1TPS88KD86XHc6KT90YWJDb2xvcltePl0qW1wvXT8+Lyxpaj0vPCg/Olx3Oik/cGFnZVNldFVwUHJbXj5dKltcL10/Pi8sYWo9LzwoPzpcdzop''@;'; put 'put ''P291dGxpbmVQcltePl0qW1wvXT8+LyxURD17ZGlzcGxheWVkOiJhc0Rpc3BsYXllZCIsZW5kOiJhdEVuZCIsbm9uZToibm9uZSJ9LEFEPVZlKFREKSxrRD17ZGlzcGxheWVkOiJkaXNwbGF5ZWQiLG5vbmU6ImJsYW5rIixkYXNoOiJkYXNoIiwibi9hIjoiTkEifSxERD1WZShrRCksRjA9Lzwo''@;'; put 'put ''PzpcdzopP2Jya1tePl0qXC8+L2csYlM9WyJvYmplY3RzIiwic2NlbmFyaW9zIiwic2VsZWN0TG9ja2VkQ2VsbHMiLCJzZWxlY3RVbmxvY2tlZENlbGxzIl0sTEQ9WyJmb3JtYXRDb2x1bW5zIiwiZm9ybWF0Um93cyIsImZvcm1hdENlbGxzIiwiaW5zZXJ0Q29sdW1ucyIsImluc2VydFJvd3Mi''@;'; put 'put ''LCJpbnNlcnRIeXBlcmxpbmtzIiwiZGVsZXRlQ29sdW1ucyIsImRlbGV0ZVJvd3MiLCJzb3J0IiwiYXV0b0ZpbHRlciIsInBpdm90VGFibGVzIl07ZnVuY3Rpb24gUEQoUyl7dmFyIFI9e307cmV0dXJuWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKGspe1Nba10mJihSW2tdPXBhcnNlRmxvYXQoU1trXSkpfSksUn12YXIgdWg9e0N1c3RvbToiY3VzdG9tIixEYXRlOiJkYXRlIixUaW1lOiJ0aW1lIixMZW5ndGg6InRleHRMZW5ndGgiLExpc3Q6Imxpc3QiLERlY2ltYWw6ImRlY2ltYWwiLFdob2xlOiJ3aG9sZSIs''@;'; put 'put ''QW55OiJub25lIn0sX1M9VmUodWgpLHViPXtJTjoiYmV0d2VlbiIsT1Q6Im5vdEJldHdlZW4iLEVROiJlcXVhbCIsTkU6Im5vdEVxdWFsIixHVDoiZ3JlYXRlclRoYW4iLExUOiJsZXNzVGhhbiIsR0U6ImdyZWF0ZXJUaGFuT3JFcXVhbCIsTEU6Imxlc3NUaGFuT3JFcXVhbCJ9LEZEPVZlKHVi''@;'; put 'put ''KTtmdW5jdGlvbiB3UyhTLFIsayl7dmFyIEc9W10sUT17fSxvZT0iIixnZT0hMSxwZT0wLHllPTA7cmV0dXJuIFMucmVwbGFjZShlbixmdW5jdGlvbihQZSxOZSl7dmFyIFllPXZyKFBlKTtzd2l0Y2goV24oWWVbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0''@;'; put 'put ''aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6UT17dDpfU1tZZS50eXBlfHwibm9uZSJdLHJlZjoob2U9WWUuc3FyZWYpP29lLmluZGV4T2YoIiAiKT4tMT9vZTpvbyhvZSk6IiJ9LFllLm9wZXJhdG9yJiYoUS5vcD1GRFtZZS5vcGVy''@;'; put 'put ''YXRvcl0pLFEuYmxhbms9ISFZZS5hbGxvd0JsYW5rJiZ0aShZZS5hbGxvd0JsYW5rKSwoIVllLnNob3dJbnB1dE1lc3NhZ2V8fCF0aShZZS5zaG93SW5wdXRNZXNzYWdlKSkmJihRLmlucHV0PSExKSxZZS5wcm9tcHRUaXRsZSYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLnRpdGxlPVFyKFll''@;'; put 'put ''LnByb21wdFRpdGxlKSksWWUucHJvbXB0JiYoKFEuaW5wdXR8fChRLmlucHV0PXt9KSkubWVzc2FnZT1RcihZZS5wcm9tcHQpKSwoIVllLnNob3dFcnJvck1lc3NhZ2V8fCF0aShZZS5zaG93RXJyb3JNZXNzYWdlKSkmJihRLmVycm9yPSExKSxZZS5lcnJvclRpdGxlJiYoKFEuZXJyb3J8fChR''@;'; put 'put ''LmVycm9yPXt9KSkudGl0bGU9UXIoWWUuZXJyb3JUaXRsZSkpLFllLmVycm9yJiYoKFEuZXJyb3J8fChRLmVycm9yPXt9KSkubWVzc2FnZT1RcihZZS5lcnJvcikpLFEuZXJyb3I/US5lcnJvci5zdHlsZT1ZZS5lcnJvclN0eWxlfHwic3RvcCI6WWUuZXJyb3JTdHlsZSYmKFEuZXJyb3I9e3N0''@;'; put 'put ''eWxlOlllLmVycm9yU3R5bGV9KSxRLnQmJkcucHVzaChRKTticmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOnllPU5lK1BlLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpvZT1TLnNsaWNlKHllLE5lKSxR''@;'; put 'put ''LnJlZj1vZT9vZS5pbmRleE9mKCIgIik+LTE/b2U6b28ob2UpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+IjpwZT1OZStQZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2Fz''@;'; put 'put ''ZSI8L2Zvcm11bGEyPiI6aWYoaylicmVhaztjYXNlIjwvZj4iOnZhciBldD1RcihnbyhTLnNsaWNlKHBlLE5lKSkpO3N3aXRjaChRLnQpe2Nhc2UiTGlzdCI6aWYoUS5sfHxRLmYpYnJlYWs7aWYoMzQ9PWV0LmNoYXJDb2RlQXQoMCkpe1EubD1ldC5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2Jy''@;'; put 'put ''ZWFrfWNhc2UiQ3VzdG9tIjpudWxsPT1RLmYmJihRLmY9ZXQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpRLm9wfHwoUS5vcD0iSU4iKSxudWxsPT1RLnY/US52PWlzTmFOKCtldCk/ZXQ6K2V0OihRLm1pbj1RLnYs''@;'; put 'put ''US5tYXg9aXNOYU4oK2V0KT9ldDorZXQsZGVsZXRlIFEudil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihSJiZSLldURiYmIWdl''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrWWVbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gUGV9KSxHfXZhciBmOD17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LGRiPVZlKGY4KSx5''@;'; put 'put ''aj17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIsTFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxORD1WZSh5aik7ZnVuY3Rpb24g''@;'; put 'put ''cDgoUyl7dmFyIFI9e307cmV0dXJuIG51bGwhPVMudmFsJiYoaXNOYU4oK1MudmFsKT9SLmY9Uy52YWw6Ui52PStTLnZhbCksUi50PVMudHlwZSxSfWZ1bmN0aW9uIFc0KFMpe3JldHVybiBQcigiY2Z2byIsbnVsbCx7dHlwZTpTLnQsdmFsOm51bGwhPVMudj9TLnY6THIoUy5mKX0pfWZ1bmN0''@;'; put 'put ''aW9uIHo1KFMsUixrLEcpe3ZhciBRPXA4KFMpO3JldHVybiBRLmNvbG9yPWdrKFIsayxHKSxRfWZ1bmN0aW9uIHYyKFMsUixrLEcsUSl7dmFyIG9lPShTLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBDUyhTLFIsayxHLFEsb2Upe3ZhciBnZT0h''@;'; put 'put ''MSxwZT1bXSx5ZT17ZjpbXX0sUGU9MCxOZT0wLFllPXtjZnZvczpbXSxjb2xvcnM6W119LGV0PXt9LGN0PS0xLEV0PTAsYXQ9IiI7cmV0dXJuIFMucmVwbGFjZShlbixmdW5jdGlvbihidCxqdCl7dmFyIGt0PXZyKGJ0KTtzd2l0Y2goV24oa3RbMF0pKXtjYXNlIjxjb25kaXRpb25hbEZvcm1h''@;'; put 'put ''dHRpbmciOmNhc2UiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+IjpicmVhaztjYXNlIjxjZlJ1bGUiOmNhc2UiPGNmUnVsZT4iOmlmKE5lPWp0LGV0PWt0LHllPXtyZWY6UixmOltdfSwhYnQubWF0Y2goL1wvPi8pKWJyZWFrO2Nhc2UiPC9jZlJ1bGU+Ijpzd2l0Y2goZXQuZHhmSWQmJlEmJlEu''@;'; put 'put ''RFhGJiYoeWUucz1RLkRYRlsrZXQuZHhmSWRdKSxldC50eXBlKXtjYXNlImR1cGxpY2F0ZVZhbHVlcyI6eWUudD0iZHVwIjticmVhaztjYXNlInVuaXF1ZVZhbHVlcyI6eWUudD0idW5pcXVlIjticmVhaztjYXNlImNvbnRhaW5zQmxhbmtzIjp5ZS50PSJibGFuayIseWUudj0hMDticmVhaztj''@;'; put 'put ''YXNlIm5vdENvbnRhaW5zQmxhbmtzIjp5ZS50PSJibGFuayIseWUudj0hMTticmVhaztjYXNlImNvbnRhaW5zRXJyb3JzIjp5ZS50PSJlcnJvciIseWUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjp5ZS50PSJlcnJvciIseWUudj0hMTticmVhaztjYXNlImNlbGxJcyI6c3dp''@;'; put 'put ''dGNoKGV0Lm9wZXJhdG9yKXtjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWlucyI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZih5ZS50PSJ0ZXh0Iix5ZS5vcD1kYltldC5vcGVyYXRvcl0sbnVsbD09ZXQudGV4dCl0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVs''@;'; put 'put ''ZSAiK3llLm9wKyIgbWlzc2luZyB0ZXh0Iik7eWUudj1ldC50ZXh0LHllLmY9eWUuZlswXSxudWxsPT15ZS5mJiZkZWxldGUgeWUuZjticmVhaztkZWZhdWx0OnllLnQ9InZhbCIseWUub3A9RkRbZXQub3BlcmF0b3JdLDE9PXllLmYubGVuZ3RoP2lzTmFOKCt5ZS5mWzBdKT95ZS5mPXllLmZb''@;'; put 'put ''MF06KHllLnY9K3llLmZbMF0sZGVsZXRlIHllLmYpOih5ZS5taW49aXNOYU4oK3llLmZbMF0pP3llLmZbMF06K3llLmZbMF0seWUubWF4PWlzTmFOKCt5ZS5mWzFdKT95ZS5mWzFdOit5ZS5mWzFdLGRlbGV0ZSB5ZS5mKX1icmVhaztjYXNlImV4cHJlc3Npb24iOnllLnQ9ImZvcm11bGEiLHll''@;'; put 'put ''LmY9eWUuZlswXTticmVhaztjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWluc1RleHQiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoeWUudD0idGV4dCIseWUub3A9ZGJbZXQudHlwZV0sbnVsbD09ZXQudGV4dCYmeWUuZi5sZW5ndGg8Mil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkNGIFRleHQgUnVsZSAiK3llLm9wKyIgbWlzc2luZyB0ZXh0Iik7eWUudj1udWxsIT1ldC50ZXh0P2V0LnRleHQ6eWUuZlsxXS5tYXRjaCgvIi4qIi8pP3llLmZbMV0uc2xpY2UoMSwtMSk6eWUuZlsxXSx5ZS5mPXllLmZbMF0sbnVsbD09eWUuZiYmZGVsZXRlIHllLmY7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJjb2xvclNjYWxlIjppZih5ZS50PSJzY2FsZSIsIXllLmNvbG9yU2NhbGUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNvbG9yU2NhbGUiKTt5ZS5jbWluPXo1KChZZT15ZS5jb2xvclNjYWxlKS5jZnZvc1swXSxZZS5jb2xvcnNbMF0sUSxHKSwzPT1ZZS5jZnZvcy5sZW5ndGgmJih5ZS5j''@;'; put 'put ''bWlkPXo1KFllLmNmdm9zWzFdLFllLmNvbG9yc1sxXSxRLEcpKSx5ZS5jbWF4PXo1KFllLmNmdm9zW1llLmNmdm9zLmxlbmd0aC0xXSxZZS5jb2xvcnNbWWUuY2Z2b3MubGVuZ3RoLTFdLFEsRyk7YnJlYWs7Y2FzZSJkYXRhQmFyIjppZih5ZS50PSJiYXIiLCF5ZS5kYXRhQmFyKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigibWlzc2luZyBkYXRhQmFyIik7KFllPXllLmRhdGFCYXIpLmNvbG9yc1swXSYmKHllLmNvbG9yPWdrKFllLmNvbG9yc1swXSxRLEcpKSx5ZS5jbWluPXA4KFllLmNmdm9zWzBdKSx5ZS5jbWF4PXA4KFllLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKHllLnQ9Imlj''@;'; put 'put ''b24iLCF5ZS5pY29uU2V0KXRocm93IG5ldyBFcnJvcigibWlzc2luZyBpY29uU2V0Iik7eWUudGhyZXNoPShZZT15ZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oT3Qpe3JldHVybiBwOChPdCl9KSx5ZS52PVllLnRhZyYmWWUudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLHll''@;'; put 'put ''LnJldj10aShZZS50YWcucmV2ZXJzZXx8ImZhbHNlIikseWUucGN0PXRpKFllLnRhZy5wZXJjZW50fHwidHJ1ZSIpLHllLmhpZGRlbj0hdGkoWWUudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOnllLnQ9ImRhdGUiLHllLm9wPU5EW2V0LnRpbWVQZXJpb2Rd''@;'; put 'put ''O2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjp5ZS50PSJhdmciLHllLm9wPSIwIj09ZXQuYWJvdmVBdmVyYWdlPyJMIjoiRyIseWUub3ArPWV0LnN0ZERldj9ldC5zdGREZXY6dGkoZXQuZXF1YWxBdmVyYWdlfHwiMCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6eWUudD0icmFuayIseWUu''@;'; put 'put ''b3A9KHRpKGV0LmJvdHRvbXx8IjAiKT8iQiI6IlQiKSsodGkoZXQucGVyY2VudHx8IjAiKT8iUCI6IlYiKSx5ZS52PStldC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK2V0LnR5cGV9aWYoZGVsZXRlIHllLmNvbG9yU2NhbGUsZGVsZXRlIHllLmRhdGFC''@;'; put 'put ''YXIsZGVsZXRlIHllLmljb25TZXQsIXllLnQpdGhyb3cgY29uc29sZS5sb2coUy5zbGljZShOZSxqdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPXllLmYmJiF5ZS5mLmxlbmd0aCYmZGVsZXRlIHllLmYseWUuZGVsfHxwZS5wdXNoKHllKTticmVhaztjYXNlIjxmb3JtdWxhIjpj''@;'; put 'put ''YXNlIjxmb3JtdWxhPiI6UGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhPiI6eWUuZi5wdXNoKFFyKFMuc2xpY2UoUGUsanQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOlBlPWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZj4iOnllLmYucHVzaChRcihTLnNsaWNlKFBl''@;'; put 'put ''LGp0KSkpO2JyZWFrO2Nhc2UiPHNxcmVmPiI6RXQ9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOmF0PVMuc2xpY2UoRXQsanQpLFI9YXQ/YXQuaW5kZXhPZigiICIpPi0xP2F0Om9vKGF0KToiIix5ZS5yZWY9UixwZS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdC5yZWY9Un0pO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPGNvbG9yU2NhbGUiOmNhc2UiPGNvbG9yU2NhbGU+IjpjYXNlIjxkYXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOlllPXtjZnZvczpbXSxjb2xvcnM6W10sdGFnOmt0fSxQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Nv''@;'; put 'put ''bG9yU2NhbGU+Ijp5ZS5jb2xvclNjYWxlPVllO2JyZWFrO2Nhc2UiPC9kYXRhQmFyPiI6eWUuZGF0YUJhcj1ZZTticmVhaztjYXNlIjwvaWNvblNldD4iOnllLmljb25TZXQ9WWU7YnJlYWs7Y2FzZSI8Y2Z2byI6Y2FzZSI8Y2Z2by8+IjpZZS5jZnZvcy5wdXNoKGt0KTticmVhaztjYXNlIjwv''@;'; put 'put ''Y2Z2bz4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpZZS5jb2xvcnMucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7''@;'; put 'put ''Y2FzZSI8bmVnYXRpdmVGaWxsQ29sb3IiOmNhc2UiPGF4aXNDb2xvciI6Y2FzZSI8Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6eWUuZGVsPSEwO2JyZWFrO2Nhc2UiPGR4Zj4iOmdlPSEwLGN0PWp0O2JyZWFrO2Nhc2UiPC9keGY+IjpnZT0h''@;'; put 'put ''MSx5ZS5zPUw0KFMuc2xpY2UoY3QsanQrYnQubGVuZ3RoKSxRLEcsayk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil7aWYob2UpYnJlYWs7aWYoIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3RbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHBlfShTLG9lLFIs''@;'; put 'put ''ayxHLFEpfXZhciBTUz0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+L2c7ZnVuY3Rpb24gbTgoUyxSKXt2YXIgaz0wLEc9MCxRPTAsb2U9MDtpZighUnx8IVIuQ2VsbFhmKXJldHVybiBudWxsO3ZhciBnZT1SLkNlbGxYZltTXTtudWxsIT1nZSYmKG51bGwhPWdlLm51''@;'; put 'put ''bUZtdElkJiYoaz1nZS5udW1GbXRJZCksbnVsbCE9Z2UuZmlsbElkJiYoRz1nZS5maWxsSWQpLG51bGwhPWdlLmZvbnRJZCYmKFE9Z2UuZm9udElkKSxudWxsIT1nZS5ib3JkZXJJZCYmKG9lPWdlLmJvcmRlcklkKSk7dmFyIHBlPXt0OiJ6In07dHJ5e0ozKHBlLGssRyxRLG9lLHtXVEY6MSxj''@;'; put 'put ''ZWxsU3R5bGVzOiEwfSwwLFIpfWNhdGNoe31yZXR1cm4gcGUuc31mdW5jdGlvbiBVNShTLFIsayxHKXtpZih2b2lkIDA9PT1TLnYmJnZvaWQgMD09PVMuZiYmbnVsbD09Uy5zJiYhUy5jfHwieiI9PT1TLnQmJiFTLmMmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIFE9IiIsb2U9Uy50LGdl''@;'; put 'put ''PVMudjtpZigieiIhPT1TLnQpc3dpdGNoKFMudCl7Y2FzZSJiIjpRPVMudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6UT0iIitTLnY7YnJlYWs7Y2FzZSJlIjpRPU1jW1Mudl07YnJlYWs7Y2FzZSJkIjpHJiZHLmNlbGxEYXRlcz9RPUhlKFMudiwtMSkudG9JU09TdHJpbmcoKTooKFM9cXQoUykp''@;'; put 'put ''LnQ9Im4iLFE9IiIrKFMudj1RZShIZShTLnYpKSkpLHR5cGVvZiBTLno+InUiJiYoUy56PUEuX3RhYmxlWzE0XSk7YnJlYWs7ZGVmYXVsdDpRPVMudn12YXIgcGU9InoiPT1TLnQ/IiI6SGEoInYiLExyKFEpKSx5ZT17cjpSfSxQZT1HP2wwKEcuY2VsbFhmcyxHLmNlbGxTdHlsZVhmcyxTLEcp''@;'; put 'put ''OjA7c3dpdGNoKDAhPT1QZSYmKHllLnM9UGUpLFMudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6eWUudD0iZCI7YnJlYWs7Y2FzZSJiIjp5ZS50PSJiIjticmVhaztjYXNlImUiOnllLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09Uy52KXtkZWxldGUgUy50O2JyZWFrfWlm''@;'; put 'put ''KEcmJkcuYm9va1NTVCl7cGU9SGEoInYiLCIiK2FTKEcuU3RyaW5ncyxTLnYsUy5SP1Mucj1RcyhTLlIpOm51bGwsRy5yZXZTdHJpbmdzKSkseWUudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheShTLlIpPyhwZT0iPGlzPiIrUXMoUy5SKSsiPC9pcz4iLHllLnQ9ImlubGluZVN0ciIpOnllLnQ9''@;'; put 'put ''InN0ciJ9aWYoUy50IT1vZSYmKFMudD1vZSxTLnY9Z2UpLFMuZil7dmFyIE5lPVMuRiYmUy5GLnNsaWNlKDAsUi5sZW5ndGgpPT1SP3t0OiJhcnJheSIscmVmOlMuRn06bnVsbDtwZT1QcigiZiIsTHIoUy5mKSxOZSkrKG51bGwhPVMudj9wZToiIil9cmV0dXJuIFMubCYma1siIWxpbmtzIl0u''@;'; put 'put ''cHVzaChbUixTLmxdKSxTLmMmJmtbIiFjb21tZW50cyJdLnB1c2goW1IsUy5jXSksUHIoImMiLHBlLHllKX12YXIgdjg9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2NbIFwvPl0vLFI9LzxcLyg/Olx3KzopP3Jvdz4vLGs9L3I9WyInXShbXiInXSopWyInXS8sRz0vPCg/Olx3KzopP2lz''@;'; put 'put ''PihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLFE9L3JlZj1bIiddKFteIiddKilbIiddLyxvZT1EMCgidiIpLGdlPUQwKCJmIik7cmV0dXJuIGZ1bmN0aW9uKHllLFBlLE5lLFllLGV0LGN0LEV0KXtmb3IodmFyIFNuLGxyLGZyLGJyLExpLGF0PTAsYnQ9IiIsanQ9W10sa3Q9W10sT3Q9MCxL''@;'; put 'put ''dD0wLFRuPTAscnI9IiIsWG49MCxCbj0wLGVyPTAsTWk9MCxGaT0wLG5hPTAsY2E9QXJyYXkuaXNBcnJheShFdC5DZWxsWGYpLGtyPVtdLFZuPVtdLEJyPUFycmF5LmlzQXJyYXkoTmUpLF9yPVtdLEZuPXt9LGpyPSExLFppPXllLnNwbGl0KFIpLHlpPSEhWWUuc2hlZXRTdHVicyxfYT0hIVll''@;'; put 'put ''LmNlbGxIVE1MLHNvPSEoITE9PT1ZZS5jZWxsVGV4dCYmIVllLmNlbGxORiYmIVllLmNlbGxTdHlsZXMpLGlhPTAsTG89WmkubGVuZ3RoO2lhIT1MbzsrK2lhKXt2YXIgT2E9KGJ0PVppW2lhXS50cmltKCkpLmxlbmd0aDtpZigwIT09T2Epe3ZhciBobz0wO2U6Zm9yKGF0PTA7YXQ8T2E7Kyth''@;'; put 'put ''dClzd2l0Y2goYnRbYXRdKXtjYXNlIj4iOmlmKCIvIiE9YnRbYXQtMV0peysrYXQ7YnJlYWsgZX1ZZS5jZWxsU3R5bGVzJiZudWxsIT0obHI9dnIoYnQuc2xpY2UoaG8sYXQpLCEwKSkuciYmcGFyc2VJbnQobHIuciwxMCkmJihYbj1wYXJzZUludChsci5yLDEwKSxGbj17fSxqcj0hMSxsci5o''@;'; put 'put ''dCYmKGpyPSEwLEZuLmhwdD1wYXJzZUZsb2F0KGxyLmh0KSxGbi5ocHg9c2goRm4uaHB0KSksbHIuZHlEZXNjZW50JiYoanI9ITAsRm4uZHlEZXNjZW50PWxyLmR5RGVzY2VudCksIjEiPT1sci5oaWRkZW4mJihqcj0hMCxGbi5oaWRkZW49ITApLG51bGwhPWxyLm91dGxpbmVMZXZlbCYmKGpy''@;'; put 'put ''PSEwLEZuLmxldmVsPStsci5vdXRsaW5lTGV2ZWwpLGxyLnMmJkV0JiZFdC5DZWxsWGYmJihqcj0hMCxGbi5zPW04KGxyLnMsRXQpKSxqciYmKF9yW1huLTFdPUZuKSk7YnJlYWs7Y2FzZSI8Ijpobz1hdH1pZihobz49YXQpYnJlYWs7aWYoWG49bnVsbCE9KGxyPXZyKGJ0LnNsaWNlKGhvLGF0''@;'; put 'put ''KSwhMCkpLnI/cGFyc2VJbnQobHIuciwxMCk6WG4rMSxCbj0tMSwhKFllLnNoZWV0Um93cyYmWWUuc2hlZXRSb3dzPFhuKSl7WWUubm9kaW18fChldC5zLnI+WG4tMSYmKGV0LnMucj1Ybi0xKSxldC5lLnI8WG4tMSYmKGV0LmUucj1Ybi0xKSk7dmFyIEphPXt0OiJyb3ciLHJvdzpbXSxSOlhu''@;'; put 'put ''LTEsaWR4OlBlfTtZZS5jZWxsU3R5bGVzJiYoRm49e30sanI9ITEsbHIuaHQmJihqcj0hMCxGbi5ocHQ9cGFyc2VGbG9hdChsci5odCksRm4uaHB4PXNoKEZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKGpyPSEwLEZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIxIj09bHIuaGlkZGVuJiYoanI9''@;'; put 'put ''ITAsRm4uaGlkZGVuPSEwKSxudWxsIT1sci5vdXRsaW5lTGV2ZWwmJihqcj0hMCxGbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiYoanI9ITAsRm4ucz1tOChsci5zLEV0KSksanImJihZZS5jYWxsYmFjaz9KYS5wcm9wcz1GbjpfcltYbi0xXT1GbikpLGp0PWJ0LnNsaWNlKGF0KS5z''@;'; put 'put ''cGxpdChTKTtmb3IodmFyIEJpPTA7QmkhPWp0Lmxlbmd0aCYmIjwiPT1qdFtCaV0udHJpbSgpLmNoYXJBdCgwKTsrK0JpKTtmb3IoanQ9anQuc2xpY2UoQmkpLGF0PTA7YXQhPWp0Lmxlbmd0aDsrK2F0KWlmKDAhPT0oYnQ9anRbYXRdLnRyaW0oKSkubGVuZ3RoKXtpZihrdD1idC5tYXRjaChr''@;'; put 'put ''KSxPdD1hdCxLdD0wLFRuPTAsYnQ9IjxjICIrKCI8Ij09YnQuc2xpY2UoMCwxKT8iPiI6IiIpK2J0LG51bGwhPWt0JiYyPT09a3QubGVuZ3RoKXtmb3IoT3Q9MCxycj1rdFsxXSxLdD0wO0t0IT1yci5sZW5ndGgmJiEoKFRuPXJyLmNoYXJDb2RlQXQoS3QpLTY0KTwxfHxUbj4yNik7KytLdClP''@;'; put 'put ''dD0yNipPdCtUbjtCbj0tLU90fWVsc2UrK0JuO2ZvcihLdD0wO0t0IT1idC5sZW5ndGgmJjYyIT09YnQuY2hhckNvZGVBdChLdCk7KytLdCk7aWYoKytLdCwobHI9dnIoYnQuc2xpY2UoMCxLdCksITApKS5yfHwobHIucj1xaSh7cjpYbi0xLGM6Qm59KSksU249e3Q6IiJ9LG51bGwhPShrdD0o''@;'; put 'put ''cnI9YnQuc2xpY2UoS3QpKS5tYXRjaChvZSkpJiYiIiE9PWt0WzFdJiYoU24udj1RcihrdFsxXSkpLFllLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oa3Q9cnIubWF0Y2goZ2UpKSYmIiIhPT1rdFsxXSl7aWYoU24uZj1RcihnbyhrdFsxXSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxZZS54bGZu''@;'; put 'put ''fHwoU24uZj1FQihTbi5mKSksa3RbMF0uaW5kZXhPZigndD0iYXJyYXkiJyk+LTEpU24uRj0ocnIubWF0Y2goUSl8fFtdKVsxXSxTbi5GLmluZGV4T2YoIjoiKT4tMSYma3IucHVzaChbb28oU24uRiksU24uRl0pO2Vsc2UgaWYoa3RbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXticj12''@;'; put 'put ''cihrdFswXSk7dmFyIElzPVFyKGdvKGt0WzFdKSk7WWUueGxmbnx8KElzPUVCKElzKSksVm5bcGFyc2VJbnQoYnIuc2ksMTApXT1bYnIsSXMsbHIucl19fWVsc2Uoa3Q9cnIubWF0Y2goLzxmW14+XSpcLz4vKSkmJlZuWyhicj12cihrdFswXSkpLnNpXSYmKFNuLmY9ZG5lKFZuW2JyLnNpXVsx''@;'; put 'put ''XSxWbltici5zaV1bMl0sbHIucikpO3ZhciBQbj1Obyhsci5yKTtmb3IoS3Q9MDtLdDxrci5sZW5ndGg7KytLdClQbi5yPj1rcltLdF1bMF0ucy5yJiZQbi5yPD1rcltLdF1bMF0uZS5yJiZQbi5jPj1rcltLdF1bMF0ucy5jJiZQbi5jPD1rcltLdF1bMF0uZS5jJiYoU24uRj1rcltLdF1bMV0p''@;'; put 'put ''fWlmKG51bGw9PWxyLnQmJnZvaWQgMD09PVNuLnYpaWYoU24uZnx8U24uRilTbi52PTAsU24udD0ibiI7ZWxzZXtpZigheWkpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi50PWxyLnR8fCJuIjtzd2l0Y2goZXQucy5jPkJuJiYoZXQucy5jPUJuKSxldC5lLmM8Qm4mJihldC5lLmM9Qm4pLFNu''@;'; put 'put ''LnQpe2Nhc2UibiI6aWYoIiI9PVNuLnZ8fG51bGw9PVNuLnYpe2lmKCF5aSljb250aW51ZTtTbi50PSJ6In1lbHNlIFNuLnY9cGFyc2VGbG9hdChTbi52KTticmVhaztjYXNlInMiOmlmKHR5cGVvZiBTbi52PiJ1Iil7aWYoIXlpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgZnI9bDhbcGFyc2VJ''@;'; put 'put ''bnQoU24udiwxMCldLFNuLnY9ZnIudCxTbi5yPWZyLnIsZnIuUiYmKFNuLlI9ZnIuUiksX2EmJihTbi5oPWZyLmgpO2JyZWFrO2Nhc2Uic3RyIjpTbi50PSJzIixTbi52PW51bGwhPVNuLnY/Z28oU24udik6IiIsX2EmJihTbi5oPWxhKFNuLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6a3Q9''@;'; put 'put ''cnIubWF0Y2goRyksU24udD0icyIsbnVsbCE9a3QmJihmcj11QyhrdFsxXSkpPyhTbi52PWZyLnQsZnIuUiYmKFNuLlI9ZnIuUiksX2EmJihTbi5oPWZyLmgpKTpTbi52PSIiO2JyZWFrO2Nhc2UiYiI6U24udj10aShTbi52KTticmVhaztjYXNlImQiOlllLmNlbGxEYXRlcz9Tbi52PUhlKFNu''@;'; put 'put ''LnYsMSk6KFNuLnY9UWUoSGUoU24udiwxKSksU24udD0ibiIpO2JyZWFrO2Nhc2UiZSI6ITEhPT1ZZS5jZWxsVGV4dCYmKFNuLnc9U24udiksU24udj1QM1tTbi52XX1pZihzbyl7ZXI9TWk9Rmk9bmE9MCxMaT1udWxsLGNhJiZ2b2lkIDAhPT1sci5zJiZudWxsIT0oTGk9RXQuQ2VsbFhmW2xy''@;'; put 'put ''LnNdKSYmKG51bGwhPUxpLm51bUZtdElkJiYoZXI9TGkubnVtRm10SWQpLFllLmNlbGxTdHlsZXMmJihudWxsIT1MaS5maWxsSWQmJihNaT1MaS5maWxsSWQpLG51bGwhPUxpLmZvbnRJZCYmKEZpPUxpLmZvbnRJZCksbnVsbCE9TGkuYm9yZGVySWQmJihuYT1MaS5ib3JkZXJJZCkpKTt0cnl7''@;'; put 'put ''SjMoU24sZXIsTWksRmksbmEsWWUsMCxFdCl9Y2F0Y2h7fVllLmNlbGxTdHlsZXMmJlNuLnMmJihMaSYmTGkuYWxpZ25tZW50JiYoU24ucy5hbGlnbm1lbnQ9cXQoTGkuYWxpZ25tZW50KSksTGkmJkxpLnByb3RlY3Rpb24mJihudWxsIT1MaS5wcm90ZWN0aW9uLmhpZGRlbiYmKFNuLnMuaGlk''@;'; put 'put ''ZGVuPUxpLnByb3RlY3Rpb24uaGlkZGVuKSxudWxsIT1MaS5wcm90ZWN0aW9uLmVkaXRhYmxlJiYoU24ucy5lZGl0YWJsZT1MaS5wcm90ZWN0aW9uLmVkaXRhYmxlKSksTGkmJkxpLnN0eWxlJiYoU24ucy5zdHlsZT1MaS5zdHlsZSkpLFllLmNlbGxEYXRlcyYmY2EmJiJuIj09U24udCYmQS5p''@;'; put 'put ''c19kYXRlKEEuX3RhYmxlW2VyXSkmJihTbi50PSJkIixTbi52PXVuKFNuLnYpKX12YXIgV287WWUubm9kaW0mJihXbz1Obyhsci5yKSxldC5zLnI+V28uciYmKGV0LnMucj1Xby5yKSxldC5lLnI8V28uciYmKGV0LmUucj1Xby5yKSksWWUuY2FsbGJhY2s/KFdvPU5vKGxyLnIpLEphLnJvd1tX''@;'; put 'put ''by5jXT1Tbik6QnI/KE5lWyhXbz1Obyhsci5yKSkucl18fChOZVtXby5yXT1bXSksTmVbV28ucl1bV28uY109U24pOk5lW2xyLnJdPVNufVllLmNhbGxiYWNrJiZZZS5jYWxsYmFjayhKYSl9fX15aSYmIVllLmNhbGxiYWNrJiZtOCgwLEV0KSxfci5sZW5ndGg+MCYmKE5lWyIhcm93cyJdPV9y''@;'; put 'put ''KX19KCksYjg9UHIoIndvcmtzaGVldCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWkuciwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiLCJtYzpJZ25vcmFibGUiOiJ4MTRhYyJ9KTtmdW5jdGlvbiBWRChTLFIsayxHKXt2YXIgZ2UsUT1bSWksYjhdLHBlPSIiLHllPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV07bnVsbD09eWUmJih5ZT17fSk7dmFy''@;'; put 'put ''IFBlPXllWyIhcmVmIl18fCJBMSIsTmU9b28oUGUpO2lmKE5lLmUuYz4xNjM4M3x8TmUuZS5yPjEwNDg1NzUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitQZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtOZS5lLmM9TWF0aC5taW4oTmUuZS5jLDE2''@;'; put 'put ''MzgzKSxOZS5lLnI9TWF0aC5taW4oTmUuZS5jLDEwNDg1NzUpLFBlPXJhKE5lKX1HfHwoRz17fSkseWVbIiFjb21tZW50cyJdPVtdO3ZhciBZZT1bXSxldD15ZVsiIXByaW50Il07aWYoZnVuY3Rpb24gRUQoUyxSLGssRyxRKXt2YXIgb2U9ITEsZ2U9e30scGU9bnVsbDtpZigieGxzeCIhPT1H''@;'; put 'put ''LmJvb2tUeXBlJiZSLnZiYXJhdyl7dmFyIHllPVIuU2hlZXROYW1lc1trXTt0cnl7Ui5Xb3JrYm9vayYmKHllPVIuV29ya2Jvb2suU2hlZXRzW2tdLkNvZGVOYW1lfHx5ZSl9Y2F0Y2h7fW9lPSEwLGdlLmNvZGVOYW1lPUxyKHllKX1TJiZTWyIhY29uZGZtdCJdJiYoZ2UuZW5hYmxlRm9ybWF0''@;'; put 'put ''Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIiksUyYmU1siIXRhYmNvbG9yIl0mJihwZT0ocGV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK1AwKFNbIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBQZT0hMSxOZT17fTtpZigoKChTfHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5m''@;'; put 'put ''aXQmJihQZT0hMCxOZS5maXRUb1BhZ2U9MSksUGUmJihwZT0ocGV8fCIiKStQcigicGFnZVNldFVwUHIiLG51bGwsTmUpKSxTJiZTWyIhb3V0bGluZSJdKXt2YXIgWWU9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTtTWyIhb3V0bGluZSJdLmFib3ZlJiYoWWUuc3VtbWFyeUJlbG93''@;'; put 'put ''PTApLFNbIiFvdXRsaW5lIl0ubGVmdCYmKFllLnN1bW1hcnlSaWdodD0wKSxwZT0ocGV8fCIiKStQcigib3V0bGluZVByIixudWxsLFllKX0hb2UmJiFwZXx8KFFbUS5sZW5ndGhdPVByKCJzaGVldFByIixwZSxnZSkpfSh5ZSxrLFMsUixRKSxRW1EubGVuZ3RoXT1QcigiZGltZW5zaW9uIixu''@;'; put 'put ''dWxsLHtyZWY6UGV9KSxRW1EubGVuZ3RoXT1mdW5jdGlvbiBnOChTLFIsayxHKXt2YXIgUT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIG9lPUcuV29ya2Jvb2suVmlld3MsZ2U9b2Vba118fG9lWzBdO1Eucmln''@;'; put 'put ''aHRUb0xlZnQ9Z2UuUlRMPyIxIjoiMCIsZ2Uuem9vbSYmKFEuem9vbVNjYWxlPWdlLnpvb20pLG51bGwhPWdlLmdyaWQmJihRLnNob3dHcmlkTGluZXM9Z2UuZ3JpZCksZ2UudmlldyYmKFEudmlldz1nZS52aWV3KX1udWxsIT1TWyIhZ3JpZGxpbmVzIl0mJihRLnNob3dHcmlkTGluZXM9ISFT''@;'; put 'put ''WyIhZ3JpZGxpbmVzIl0pO3ZhciBwZT0iIix5ZT17cjowLGM6MH07aWYoU1siIXNlbCJdKXtpZighKHllPVNbIiFzZWwiXS5jZWxsKSl7aWYoIVNbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7eWU9TXMoU1si''@;'; put 'put ''IXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnN9InN0cmluZyI9PXR5cGVvZiB5ZSYmKHllPU5vKHllKSl9dmFyIE5lPVNbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIFNbIiFmcmVlemUiXT9ObyhTWyIhZnJlZXplIl0pOlNbIiFmcmVlemUiXTp7YzowLHI6MH07aWYoU1si''@;'; put 'put ''IWZyZWV6ZSJdKXt2YXIgWWU9cWkoTmUpLGV0PXtzdGF0ZToiZnJvemVuIix4U3BsaXQ6TmUuYyx5U3BsaXQ6TmUucix0b3BMZWZ0Q2VsbDpZZX07U1siIXNlbCJdJiYoZXQuYWN0aXZlUGFuZT0oeWUucj49TmUuciYmTmUucj4wPyJib3R0b20iOiJ0b3AiKSsoeWUuYz49TmUuYyYmTmUuYz4w''@;'; put 'put ''PyJSaWdodCI6IkxlZnQiKSkscGU9UHIoInBhbmUiLG51bGwsZXQpfWlmKFNbIiFzZWwiXSl7dmFyIGN0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgeWU/eWU6cWkoeWUpfTtjdC5zcXJlZj1TWyIhc2VsIl0ucmFuZ2U/U1siIXNlbCJdLnJhbmdlOmN0LmFjdGl2ZUNlbGwrIjoiK2N0''@;'; put 'put ''LmFjdGl2ZUNlbGwscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpLFNbIiFmcmVlemUiXSYmKE5lLmM+MCYmKGN0LnBhbmU9InRvcFJpZ2h0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLE5lLnI+MCYmKGN0LnBhbmU9ImJvdHRvbUxlZnQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxs''@;'; put 'put ''LGN0KSksTmUuYz4wJiZOZS5yPjAmJihjdC5wYW5lPSJib3R0b21SaWdodCIscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpKSl9cmV0dXJuIFByKCJzaGVldFZpZXdzIixQcigic2hlZXRWaWV3IixwZXx8bnVsbCxRKSx7fSl9KHllLDAsUyxrKSxSLnNoZWV0Rm9ybWF0KXt2YXIgY3Q9e2Rl''@;'; put 'put ''ZmF1bHRSb3dIZWlnaHQ6Ui5zaGVldEZvcm1hdC5kZWZhdWx0Um93SGVpZ2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpSLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0aHx8IjEwIn07bnVsbCE9Ui5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihjdC5vdXRsaW5lTGV2ZWxSb3c9Ui5zaGVldEZv''@;'; put 'put ''cm1hdC5vdXRsaW5lTGV2ZWxSb3cpLFFbUS5sZW5ndGhdPVByKCJzaGVldEZvcm1hdFByIixudWxsLGN0KX1lbHNlIGlmKHllWyIhc2hlZXRGb3JtYXQiXSl7dmFyIEV0PXt9LGF0PSExO3llWyIhc2hlZXRGb3JtYXQiXS5yb3cmJih5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdD8oYXQ9ITAs''@;'; put 'put ''RXQuZGVmYXVsdFJvd0hlaWdodD15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdCxFdC5jdXN0b21IZWlnaHQ9MSk6eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KGF0PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9VTMoeWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHgpLEV0LmN1c3RvbUhlaWdo''@;'; put 'put ''dD0xKTooMD09PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0fHwwPT09eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKGF0PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9RXQuZGVmYXVsdFJvd0hlaWdodHx8MTYsRXQuY3VzdG9tSGVp''@;'; put 'put ''Z2h0PTEsRXQuemVyb0hlaWdodD0xKSx5ZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50JiYoRXRbIngxNGFjOmR5RGVzY2VudCJdPXllWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSx5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sJiYoeWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2h8fFEwKHll''@;'; put 'put ''WyIhc2hlZXRGb3JtYXQiXS5jb2wpLEV0LmRlZmF1bHRDb2xXaWR0aD15ZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L1RjfHwwLGF0PSEwKSxudWxsPT1FdC5kZWZhdWx0Um93SGVpZ2h0JiYoRXQuZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09RXQuZGVmYXVsdENvbFdpZHRoJiYoRXQu''@;'; put 'put ''ZGVmYXVsdENvbFdpZHRoPTEwKSxFdC5vdXRsaW5lTGV2ZWxSb3c9RXQub3V0bGluZUxldmVsUm93fHw3LGF0JiYoUVtRLmxlbmd0aF09UHIoInNoZWV0Rm9ybWF0UHIiLG51bGwsRXQpKX1udWxsIT15ZVsiIWNvbHMiXSYmeWVbIiFjb2xzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1mdW5j''@;'; put 'put ''dGlvbiBwaihTLFIsayl7Zm9yKHZhciBRLEc9WyI8Y29scz4iXSxvZT0wO29lIT1SLmxlbmd0aDsrK29lKWlmKFE9UltvZV0pe2lmKFEuYXV0byYmb1MoUyxRLG9lKSxRLnN8fFEueil7dmFyIGdlPXt0OiJ6In07bnVsbCE9US5zJiYoZ2Uucz1RLnMpLG51bGwhPVEueiYmKGdlLno9US56KSxR''@;'; put 'put ''LnN0eWxlPWwwKGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyxnZSxrKX1HW0cubGVuZ3RoXT1QcigiY29sIixudWxsLHU4KG9lLFEpKX1yZXR1cm4gR1tHLmxlbmd0aF09IjwvY29scz4iLEcuam9pbigiIil9KHllLHllWyIhY29scyJdLFIpKSxRW2dlPVEubGVuZ3RoXT0iPHNoZWV0RGF0YS8+''@;'; put 'put ''Iix5ZVsiIWxpbmtzIl09W10sbnVsbCE9eWVbIiFyZWYiXSYmKHBlPWZ1bmN0aW9uIE1TKFMsUixrLEcpe3ZhciB5ZSxidCxRPVtdLG9lPVtdLGdlPW9vKFNbIiFyZWYiXSkscGU9IiIsUGU9IiIsTmU9W10sWWU9MCxldD0wLGN0PVNbIiFyb3dzIl0sRXQ9QXJyYXkuaXNBcnJheShTKSxhdD17''@;'; put 'put ''cjpQZX0sanQ9LTE7Zm9yKGV0PWdlLnMuYztldDw9Z2UuZS5jOysrZXQpTmVbZXRdPVRhKGV0KTtmb3IoWWU9Z2Uucy5yO1llPD1nZS5lLnI7KytZZSl7Zm9yKG9lPVtdLFBlPWppKFllKSxldD1nZS5zLmM7ZXQ8PWdlLmUuYzsrK2V0KXt5ZT1OZVtldF0rUGU7dmFyIGt0PUV0PyhTW1llXXx8''@;'; put 'put ''W10pW2V0XTpTW3llXTt2b2lkIDAhPT1rdCYmbnVsbCE9KHBlPVU1KGt0LHllLFMsUikpJiZvZS5wdXNoKHBlKX0ob2UubGVuZ3RoPjB8fGN0JiZjdFtZZV0pJiYoYXQ9e3I6UGV9LGN0JiZjdFtZZV0mJigoYnQ9Y3RbWWVdKS5oaWRkZW4mJihhdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4P2p0''@;'; put 'put ''PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKGF0Lmh0PWp0LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYoYXRbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYmKGF0''@;'; put 'put ''LnM9bDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmJ0LnN9LFIpLGF0LmN1c3RvbUZvcm1hdD0xKSksUVtRLmxlbmd0aF09UHIoInJvdyIsb2Uuam9pbigiIiksYXQpKX1pZihjdClmb3IoO1llPGN0Lmxlbmd0aDsrK1llKWN0JiZjdFtZZV0mJihhdD17cjpZZSsxfSwoYnQ9''@;'; put 'put ''Y3RbWWVdKS5oaWRkZW4mJihhdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4P2p0PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKGF0Lmh0PWp0LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksUVtRLmxlbmd0aF09UHIo''@;'; put 'put ''InJvdyIsIiIsYXQpKTtyZXR1cm4gUS5qb2luKCIiKX0oeWUsUikscGUubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1wZSkpLFEubGVuZ3RoPmdlKzEmJihRW1EubGVuZ3RoXT0iPC9zaGVldERhdGE+IixRW2dlXT1RW2dlXS5yZXBsYWNlKCIvPiIsIj4iKSkseWVbIiFwcm90ZWN0Il0mJihRW1Eu''@;'; put 'put ''bGVuZ3RoXT1mdW5jdGlvbiBkaihTKXt2YXIgUj17c2hlZXQ6MX07cmV0dXJuIGJTLmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmU1trXSYmKFJba109IjEiKX0pLExELmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmIVNba10mJihSW2tdPSIwIil9KSxTLnBhc3N3b3Jk''@;'; put 'put ''P1IucGFzc3dvcmQ9SHYoUy5wYXNzd29yZCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Uy5lbmNyeXB0aW9uJiYoUi5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvLFIuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoLFIuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0LFIu''@;'; put 'put ''c3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSxQcigic2hlZXRQcm90ZWN0aW9uIixudWxsLFIpfSh5ZVsiIXByb3RlY3QiXSkpLG51bGwhPXllWyIhYXV0b2ZpbHRlciJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gbWooUyxSLGssRyl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBTLnJlZj9T''@;'; put 'put ''LnJlZjpyYShTLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgb2U9ay5Xb3JrYm9vay5OYW1lcyxnZT1NcyhRKTtnZS5zLnI9PWdlLmUuciYmKGdlLmUucj1NcyhSWyIhcmVmIl0pLmUu''@;'; put 'put ''cixRPXJhKGdlKSk7Zm9yKHZhciBwZT0wO3BlPG9lLmxlbmd0aDsrK3BlKXt2YXIgeWU9b2VbcGVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT15ZS5OYW1lJiZ5ZS5TaGVldD09Ryl7eWUuUmVmPSInIitrLlNoZWV0TmFtZXNbR10rIichIitRO2JyZWFrfX1yZXR1cm4gcGU9PW9lLmxl''@;'; put 'put ''bmd0aCYmb2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpHLFJlZjoiJyIray5TaGVldE5hbWVzW0ddKyInISIrUX0pLFByKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6UX0pfSh5ZVsiIWF1dG9maWx0ZXIiXSx5ZSxrLFMpKSxudWxsIT15ZVsiIW1lcmdlcyJdJiZ5''@;'; put 'put ''ZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gZ1MoUyl7aWYoMD09PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj0nPG1lcmdlQ2VsbHMgY291bnQ9IicrUy5sZW5ndGgrJyI+JyxrPTA7ayE9Uy5sZW5ndGg7KytrKVIrPSc8bWVyZ2VDZWxsIHJlZj0iJyty''@;'; put 'put ''YShTW2tdKSsnIi8+JztyZXR1cm4gUisiPC9tZXJnZUNlbGxzPiJ9KHllWyIhbWVyZ2VzIl0pKSx5ZVsiIWNvbmRmbXQiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIHdqKFMsUil7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGssRyl7cmV0dXJuIGZ1bmN0aW9uIF9qKFMsUixrKXt2YXIgRz1TLnM/''@;'; put 'put ''bFMoay5EWEYsUy5zKTotMSxRPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6cmEoUy5yZWYpLGdlPW9vKFEucmVwbGFjZSgvXHMuKiQvLCIiKSkucztnZS5yPDAmJihnZS5yPTApLGdlLmM8MCYmKGdlLmM9MCk7dmFyIHBlPSIiLHllPXtwcmlvcml0eTpSKzF9O3N3aXRjaChHPi0xJiYo''@;'; put 'put ''eWUuZHhmSWQ9RyksUy50KXtjYXNlInVuaXF1ZSI6eWUudHlwZT0idW5pcXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6eWUudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjp5ZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHBlPSI8Zm9ybXVs''@;'; put 'put ''YT5MRU4oVFJJTSgiK3FpKGdlKSsiKSkiKyhTLnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjp5ZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6eWUudHlwZT0iZXhwcmVzc2lvbiIscGU9UHIoImZv''@;'; put 'put ''cm11bGEiLExyKFMuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6eWUudHlwZT0idGltZVBlcmlvZCIseWUudGltZVBlcmlvZD15altTLm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaCh5ZS50eXBlPXllLm9wZXJhdG9yPWY4W1Mub3BdLHllLnRleHQ9Uy52LFMub3Ape2Nhc2UiSU4iOnBlPSc8''@;'; put 'put ''Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrTHIoUy52KSsnIiwnK3FpKGdlKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6cGU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK0xyKFMudikrJyIsJytxaShnZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6cGU9''@;'; put 'put ''Ijxmb3JtdWxhPkxFRlQoIitxaShnZSkrJyxMRU4oIicrTHIoUy52KSsnIikpPSInK0xyKFMudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjpwZT0iPGZvcm11bGE+UklHSFQoIitxaShnZSkrJyxMRU4oIicrTHIoUy52KSsnIikpPSInK0xyKFMudikrJyI8L2Zvcm11bGE+J31icmVh''@;'; put 'put ''aztjYXNlInZhbCI6eWUudHlwZT0iY2VsbElzIix5ZS5vcGVyYXRvcj11YltTLm9wXSxwZT1udWxsIT1TLm1pbj9QcigiZm9ybXVsYSIsTHIoU3RyaW5nKFMubWluKSkse30pK1ByKCJmb3JtdWxhIixMcihTdHJpbmcoUy5tYXgpKSx7fSk6UHIoImZvcm11bGEiLExyKG51bGwhPVMudj9TdHJp''@;'; put 'put ''bmcoInN0cmluZyI9PXR5cGVvZiBTLnY/JyInK1Mudi5yZXBsYWNlKC8iL2csJyIiJykrJyInOlMudik6Uy5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaCh5ZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLHllLmFib3ZlQXZlcmFnZT0iTCI9PVMub3AuY2hhckF0KDApPyIwIjoiMSIsUy5vcC5j''@;'; put 'put ''aGFyQXQoMSkpe2Nhc2UiVCI6eWUuZXF1YWxBdmVyYWdlPSIwIjticmVhaztjYXNlIkUiOnllLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDp5ZS5zdGREZXY9Uy5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjp5ZS50eXBlPSJ0b3AxMCIseWUuYm90dG9tPSJCIj09Uy5vcC5j''@;'; put 'put ''aGFyQXQoMCk/IjEiOiIwIix5ZS5wZXJjZW50PSJQIj09Uy5vcC5jaGFyQXQoMSk/IjEiOiIwIix5ZS5yYW5rPVMudjticmVhaztjYXNlImljb24iOnllLnR5cGU9Imljb25TZXQiO3ZhciBQZT17aWNvblNldDpTLnYscGVyY2VudDpTLnBjdD8idHJ1ZSI6ImZhbHNlIn07Uy5yZXYmJihQZS5y''@;'; put 'put ''ZXZlcnNlPSJ0cnVlIiksUy5oaWRkZW4mJihQZS5zaG93VmFsdWU9ImZhbHNlIikscGU9UHIoImljb25TZXQiLFMudGhyZXNoLm1hcChXNCkuam9pbigiIiksUGUpO2JyZWFrO2Nhc2Uic2NhbGUiOnllLnR5cGU9ImNvbG9yU2NhbGUiLHBlKz1XNChTLmNtaW4pLFMuY21pZCYmKHBlKz1XNChT''@;'; put 'put ''LmNtaWQpKSxwZSs9VzQoUy5jbWF4KSxwZSs9Z2QoUy5jbWluLmNvbG9yKSxTLmNtaWQmJihwZSs9Z2QoUy5jbWlkLmNvbG9yKSkscGU9UHIoImNvbG9yU2NhbGUiLHBlKz1nZChTLmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6eWUudHlwZT0iZGF0YUJhciIscGUrPVc0KFMuY21p''@;'; put 'put ''bikscGUrPVc0KFMuY21heCkscGU9UHIoImRhdGFCYXIiLHBlKz1nZChTLmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyhTKSwiQ0YgbWlzc2luZyB0eXBlICIrUy50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK1ErJyI+JytQcigiY2ZS''@;'; put 'put ''dWxlIiwiIj09cGU/bnVsbDpwZSx5ZSkrIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiJ9KGssRyxSKX0pLmpvaW4oIiIpfSh5ZVsiIWNvbmRmbXQiXSxSKSkseWVbIiF2YWxpZGF0aW9ucyJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gSEQoUyl7aWYoIVN8fDA9PVMubGVuZ3RoKXJldHVybiIi''@;'; put 'put ''O2Zvcih2YXIgUj1bXSxrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIgUT1TW0ddLG9lPXVoW1EudF07aWYoUS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIFEucmVmfHwtMSE9US5yZWYuaW5kZXhPZigiICIpfHwoUS5yZWY9b28oUS5yZWYpLFEucmVmLnMmJiEoUS5yZWYucy5jPDApKSkpeysr''@;'; put 'put ''azt2YXIgZ2U9e3R5cGU6b2UsYWxsb3dCbGFuazorKDAhPVEuYmxhbmspLHNob3dJbnB1dE1lc3NhZ2U6KygwIT1RLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9US5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpyYShRLnJlZil9O2lmKFEuaW5wdXQmJihR''@;'; put 'put ''LmlucHV0LnRpdGxlJiYoZ2UucHJvbXB0VGl0bGU9V2koUS5pbnB1dC50aXRsZSkpLFEuaW5wdXQubWVzc2FnZSYmKGdlLnByb21wdD1XaShRLmlucHV0Lm1lc3NhZ2UpKSksUS5lcnJvciYmKFEuZXJyb3IudGl0bGUmJihnZS5lcnJvclRpdGxlPVdpKFEuZXJyb3IudGl0bGUpKSxRLmVycm9y''@;'; put 'put ''Lm1lc3NhZ2UmJihnZS5lcnJvcj1XaShRLmVycm9yLm1lc3NhZ2UpKSxRLmVycm9yLnN0eWxlJiYoZ2UuZXJyb3JTdHlsZT1RLmVycm9yLnN0eWxlKSksIW9lKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrUS50KTt2YXIgcGU9IiI7c3dpdGNo''@;'; put 'put ''KFEudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2UiTGlzdCI6Y2FzZSJDdXN0b20iOmlmKFEubCl7aWYoUS5sLmpvaW4oIiwiKS5sZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4gMjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3Vw''@;'; put 'put ''IHRhYmxlIik7cGU9Jzxmb3JtdWxhMT4iJytMcihRLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIHBlPSI8Zm9ybXVsYTE+IitMcihRLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hv''@;'; put 'put ''bGUiOmlmKCF1YltRLm9wXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1Eub3ArIiBmb3IgIitRLnQpO2lmKGdlLm9wZXJhdG9yPXViW1Eub3BdLG51bGwhPVEudilwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKFEudiBpbnN0YW5jZW9mIERhdGU/UWUoUS52''@;'; put 'put ''KTpRLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7aWYobnVsbD09US5taW58fG51bGw9PVEubWF4KXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUS50KTtwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKFEu''@;'; put 'put ''bWluIGluc3RhbmNlb2YgRGF0ZT9RZShRLm1pbik6US5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitMcihTdHJpbmcoUS5tYXggaW5zdGFuY2VvZiBEYXRlP1FlKFEubWF4KTpRLm1heCkpKyI8L2Zvcm11bGEyPiJ9fVIucHVzaChQcigiZGF0YVZhbGlkYXRpb24iLHBlfHxudWxsLGdl''@;'; put 'put ''KSl9fXJldHVybiBrPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9IicraysnIj4nK1Iuam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KHllWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBqdCxidD0tMSxrdD0tMTtpZih5ZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT0i''@;'; put 'put ''PGh5cGVybGlua3M+Iix5ZVsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihTbil7U25bMV0uVGFyZ2V0JiYoanQ9e3JlZjpTblswXX0sIiMiIT1TblsxXS5UYXJnZXQuY2hhckF0KDApJiYoa3Q9RXIoRywtMSxMcihTblsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSxLYS5ITElOSyks''@;'; put 'put ''anRbInI6aWQiXT0icklkIitrdCksKGJ0PVNuWzFdLlRhcmdldC5pbmRleE9mKCIjIikpPi0xJiYoanQubG9jYXRpb249THIoU25bMV0uVGFyZ2V0LnNsaWNlKGJ0KzEpKSksU25bMV0uVG9vbHRpcCYmKGp0LnRvb2x0aXA9THIoU25bMV0uVG9vbHRpcCkpLFFbUS5sZW5ndGhdPVByKCJoeXBl''@;'; put 'put ''cmxpbmsiLG51bGwsanQpKX0pLFFbUS5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIHllWyIhbGlua3MiXSxldCl7dmFyIE90PWZ1bmN0aW9uIGxqKFMpe2lmKFMucHJvcHMpe3ZhciBSPXt9LGs9Uy5wcm9wcztyZXR1cm4gay5ncmlkbGluZXMmJihSLmdyaWRMaW5lcz1SLmdyaWRM''@;'; put 'put ''aW5lc1NldD0xKSxrLmhlYWRpbmdzJiYoUi5oZWFkaW5ncz0xKSxrLmNlbnRlclgmJihSLmhvcml6b250YWxDZW50ZXJlZD0xKSxrLmNlbnRlclkmJihSLnZlcnRpY2FsQ2VudGVyZWQ9MSksUHIoInByaW50T3B0aW9ucyIsbnVsbCxSKX1yZXR1cm4iIn0oZXQpO090Lmxlbmd0aCYmKFFbUS5s''@;'; put 'put ''ZW5ndGhdPU90KX1pZigobnVsbCE9eWVbIiFtYXJnaW5zIl18fGV0JiZldC5tYXJnaW5zKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGZqKFMpe3JldHVybiBYMyhTKSxQcigicGFnZU1hcmdpbnMiLG51bGwsUyl9KHllWyIhbWFyZ2lucyJdfHxldC5tYXJnaW5zKSksZXQpe3ZhciBLdD1mdW5j''@;'; put 'put ''dGlvbiBSRChTKXtpZihTLnByb3BzKXt2YXIgUj17fSxrPVMucHJvcHM7aWYoay5vcmllbnRhdGlvbiYmKFIub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKFIuc2NhbGU9ay5zY2FsZSksay5maXQmJihudWxsIT1rLmZpdC5oZWlnaHQmJihSLmZpdFRvSGVpZ2h0PWsuZml0''@;'; put 'put ''LmhlaWdodCksbnVsbCE9ay5maXQud2lkdGgmJihSLmZpdFRvV2lkdGg9ay5maXQud2lkdGgpKSxrLmRwaSYmKFIuaG9yaXpvbnRhbERwaT1SLnZlcnRpY2FsRHBpPWsuZHBpKSxudWxsIT1rLmZpcnN0JiYoUi5maXJzdFBhZ2VOdW1iZXI9ay5maXJzdCxSLnVzZUZpcnN0UGFnZU51bWJlcj0x''@;'; put 'put ''KSxrLmJ3JiYoUi5ibGFja0FuZFdoaXRlPTEpLGsuZHJhZnQmJihSLmRyYWZ0PTEpLGsuY29tbWVudHMmJihSLmNlbGxDb21tZW50cz1URFtrLmNvbW1lbnRzXXx8Im5vbmUiKSxrLmVycm9ycyYmKFIuZXJyb3JzPWtEW2suZXJyb3JzXXx8Im5vbmUiKSxrLnBhcGVyKXN3aXRjaCh0eXBlb2Yg''@;'; put 'put ''ay5wYXBlcil7Y2FzZSJudW1iZXIiOlIucGFwZXJTaXplPWsucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOnVCW2sucGFwZXJdP1IucGFwZXJTaXplPXVCW2sucGFwZXJdOitrLnBhcGVyJiYoUi5wYXBlclNpemU9K2sucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighay5wYXBlci5oZWln''@;'; put 'put ''aHR8fCFrLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7Ui5wYXBlckhlaWdodD1rLnBhcGVyLmhlaWdodCxSLnBhcGVyV2lkdGg9ay5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9m''@;'; put 'put ''KGsub3JkZXIpPi0xJiYoUi5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLFByKCJwYWdlU2V0dXAiLG51bGwsUil9cmV0dXJuIiJ9KGV0KTtLdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1LdCksS3Q9ZnVuY3Rpb24gYmooUyl7dmFyIFI9W10saz0iIixHPSIiLFE9IiIsb2U9IiIsZ2U9IiIscGU9''@;'; put 'put ''IiIseWU9IiIsUGU9dDEoUy5oZWFkZXIpO1BlLmxlbmd0aCYmKEc9UGVbMF0scGU9UGVbMV0sb2U9UGVbMl0pO3ZhciBOZT10MShTLmZvb3Rlcik7cmV0dXJuIE5lLmxlbmd0aCYmKFE9TmVbMF0seWU9TmVbMV0sZ2U9TmVbMl0pLEcmJlIucHVzaCgiPG9kZEhlYWRlcj4iK0xyKEcpKyI8L29k''@;'; put 'put ''ZEhlYWRlcj4iKSxRJiZSLnB1c2goIjxvZGRGb290ZXI+IitMcihRKSsiPC9vZGRGb290ZXI+IiksKGdlIT1RfHxvZSE9RykmJihrKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxSLnB1c2goIjxldmVuSGVhZGVyPiIrTHIob2UpKyI8L2V2ZW5IZWFkZXI+IiksUi5wdXNoKCI8ZXZlbkZvb3Rl''@;'; put 'put ''cj4iK0xyKGdlKSsiPC9ldmVuRm9vdGVyPiIpKSwoeWUhPVF8fHBlIT1HKSYmKGsrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxSLnB1c2goIjxmaXJzdEhlYWRlcj4iK0xyKHBlKSsiPC9maXJzdEhlYWRlcj4iKSxSLnB1c2goIjxmaXJzdEZvb3Rlcj4iK0xyKHllKSsiPC9maXJzdEZvb3Rlcj4i''@;'; put 'put ''KSksUi5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK2srIj4iK1Iuam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KGV0KSxLdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1LdCl9aWYoKG51bGwhPXllWyIhcm93QnJlYWtzIl18fGV0JiZldC5yb3dCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rp''@;'; put 'put ''b24gdWooUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPVsnPHJvd0JyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJzxicmsgaWQ9IicrU1trXS5SKyciIG1hbj0i''@;'; put 'put ''MSIvPicpO3JldHVybiBSLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifSh5ZVsiIXJvd0JyZWFrcyJdfHxldC5yb3dCcmVha3MpKSwobnVsbCE9eWVbIiFjb2xCcmVha3MiXXx8ZXQmJmV0LmNvbEJyZWFrcykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiB2UyhTKXtpZigwPT1TLmxlbmd0aClyZXR1''@;'; put 'put ''cm4iIjtmb3IodmFyIFI9Wyc8Y29sQnJlYWtzIGNvdW50PSInK1MubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKVIucHVzaCgnPGJyayBpZD0iJytTW2tdLkMrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIFIuam9pbigiIikrIjwv''@;'; put 'put ''Y29sQnJlYWtzPiJ9KHllWyIhY29sQnJlYWtzIl18fGV0LmNvbEJyZWFrcykpLCghUnx8Ui5pZ25vcmVFQ3x8bnVsbD09Ui5pZ25vcmVFQykmJihRW1EubGVuZ3RoXT1IYSgiaWdub3JlZEVycm9ycyIsUHIoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNUZXh0OjEsc3FyZWY6''@;'; put 'put ''UGV9KSkpLHllWyIhY2hhcnRzIl0mJlllLnB1c2guYXBwbHkoWWUseWVbIiFjaGFydHMiXSkseWVbIiFpbWFnZXMiXSYmWWUucHVzaC5hcHBseShZZSx5ZVsiIWltYWdlcyJdKSx5ZVsiIXNoYXBlcyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhc2hhcGVzIl0pLFllLmxlbmd0aD4wJiYoa3Q9''@;'; put 'put ''RXIoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwiLEthLkRSQVcpLFFbUS5sZW5ndGhdPVByKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWRyYXdpbmciXT1ZZSksKHllWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KHllWyIhY29udHJvbHMiXXx8''@;'; put 'put ''W10pLmxlbmd0aD4wKSYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyIudm1sIixLYS5WTUwpLFFbUS5sZW5ndGhdPVByKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWxlZ2FjeSJdPWt0KSx5ZVsiIXByaW50Il0mJnllWyIh''@;'; put 'put ''cHJpbnQiXS5pbWFnZXMpe3ZhciBUbj15ZVsiIXByaW50Il0uaW1hZ2VzLHJyPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtUbltTbl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihscil7VG5bU25dW2xyXSYmWyJsZWZ0Iiwicmln''@;'; put 'put ''aHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFhuKXtpZihBcnJheS5pc0FycmF5KFRuW1NuXVtscl1bWG5dKSlmb3IodmFyIEJuPTA7Qm48VG5bU25dW2xyXVtYbl0ubGVuZ3RoOysrQm4pVG5bU25dW2xyXVtYbl1bQm5dJiYoVG5bU25dW2xyXVtYbl1bQm5dLl9jbnQ9cnIrKyl9KX0p''@;'; put 'put ''fSkscnI+MCYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyJIRi52bWwiLEthLlZNTCksUVtRLmxlbmd0aF09UHIoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFsZWdhY3lIRiJdPWt0KX1yZXR1cm4oeWVbIiF0YWJsZXMi''@;'; put 'put ''XXx8W10pLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09Jzx0YWJsZVBhcnRzIGNvdW50PSInK3llWyIhdGFibGVzIl0ubGVuZ3RoKyciPicseWVbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuLGxyKXtrdD1FcihHLC0xLCIuLi90YWJsZXMvdGFibGUiKyhTKzEpKyJfIitscisiLnhtbCIs''@;'; put 'put ''S2EuVEFCTEUpLFFbUS5sZW5ndGhdPSc8dGFibGVQYXJ0IHI6aWQ9InJJZCcra3QrJyIvPid9KSxRW1EubGVuZ3RoXT0iPC90YWJsZVBhcnRzPiIpLFEubGVuZ3RoPjEmJihRW1EubGVuZ3RoXT0iPC93b3Jrc2hlZXQ+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9''@;'; put 'put ''ZnVuY3Rpb24gTWooUyxSLGssRyl7dmFyIFE9ZnVuY3Rpb24gU2ooUyxSLGspe3ZhciBHPWJuKDE0NSksUT0oa1siIXJvd3MiXXx8W10pW1NdfHx7fTtHLndyaXRlX3NoaWZ0KDQsUyksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBvZT0zMjA7US5ocHg/b2U9MjAqVTMoUS5ocHgpOlEuaHB0JiYo''@;'; put 'put ''b2U9MjAqUS5ocHQpLEcud3JpdGVfc2hpZnQoMixvZSksRy53cml0ZV9zaGlmdCgxLDApO3ZhciBnZT0wO1EubGV2ZWwmJihnZXw9US5sZXZlbCksUS5oaWRkZW4mJihnZXw9MTYpLChRLmhweHx8US5ocHQpJiYoZ2V8PTMyKSxHLndyaXRlX3NoaWZ0KDEsZ2UpLEcud3JpdGVfc2hpZnQoMSww''@;'; put 'put ''KTt2YXIgcGU9MCx5ZT1HLmw7Ry5sKz00O2Zvcih2YXIgUGU9e3I6UyxjOjB9LE5lPTA7TmU8MTY7KytOZSlpZighKFIucy5jPk5lKzE8PDEwfHxSLmUuYzxOZTw8MTApKXtmb3IodmFyIFllPS0xLGV0PS0xLGN0PU5lPDwxMDtjdDxOZSsxPDwxMDsrK2N0KVBlLmM9Y3QsKEFycmF5LmlzQXJy''@;'; put 'put ''YXkoayk/KGtbUGUucl18fFtdKVtQZS5jXTprW3FpKFBlKV0pJiYoWWU8MCYmKFllPWN0KSxldD1jdCk7WWU8MHx8KCsrcGUsRy53cml0ZV9zaGlmdCg0LFllKSxHLndyaXRlX3NoaWZ0KDQsZXQpKX12YXIgYXQ9Ry5sO3JldHVybiBHLmw9eWUsRy53cml0ZV9zaGlmdCg0LHBlKSxHLmw9YXQs''@;'; put 'put ''Ry5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwpOkd9KEcsayxSKTsoUS5sZW5ndGg+MTd8fChSWyIhcm93cyJdfHxbXSlbR10pJiZGcihTLCJCcnRSb3dIZHIiLFEpfXZhciB4aj1tdSxFaj1nZjtmdW5jdGlvbiBGaihTKXtyZXR1cm5bSmgoUyksUGwoUyksIm4iXX12YXIgV0Q9bXUsQzg9Z2Ys''@;'; put 'put ''S0Q9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxxRD1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLERTPVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJd''@;'; put 'put ''O2Z1bmN0aW9uIFhEKFMpe3ZhciBSPWJuKDQpLGs9W1JdLEc9cUQuaW5kZXhPZihTLnQpO2lmKEc8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1MudCk7dmFyIG9lPURTLmluZGV4T2YoUy5vcCk7c3dpdGNoKEcpe2Nhc2UgMDpjYXNlIDM6''@;'; put 'put ''Y2FzZSA3Om9lPTA7YnJlYWs7ZGVmYXVsdDppZigtMT09b2UpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLm9wKyIgZm9yICIrUy50KX1SLndyaXRlX3NoaWZ0KDEsMHxHKSxSLndyaXRlX3NoaWZ0KDEsMSksUi53cml0ZV9zaGlmdCgxLDEyfG9lPDw0KSxS''@;'; put 'put ''LndyaXRlX3NoaWZ0KDEsMCksay5wdXNoKGZ1bmN0aW9uIFIzKFMpe3ZhciBSPVMuc3BsaXQoL1xzKixccyovKSxrPWJuKDQpO2sud3JpdGVfc2hpZnQoNCxSLmxlbmd0aCk7dmFyIEc9W2tdO3JldHVybiBSLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGdmKG9vKFEpKSl9KSxqKEcpfSgi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKSkpO3ZhciBnZT1ibigxNik7Z2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxnZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3''@;'; put 'put ''Mjk1KSxrLnB1c2goZ2UpO3ZhciBwZT1ibig4KTtwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHllPTE7c3dpdGNoKFMudCl7Y2FzZSJBbnkiOmsucHVzaChwZSksay5wdXNoKHBlKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xl''@;'; put 'put ''IjppZihudWxsIT1TLnZ8fG51bGwhPVMuZilrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLnY/dFMoUy52KTpVNChudWxsPT1TLnY/Uy5mOlMudikpO2Vsc2V7aWYobnVsbD09Uy5taW58fG51bGw9PVMubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5g''@;'; put 'put ''K2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2sucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWluP3RTKFMubWluKTpVNChTLm1pbikpLGsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWF4P3RTKFMubWF4KTpVNChTLm1heCkpLHllPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT1T''@;'; put 'put ''Lmwpe2sucHVzaChuUyhTLmwuam9pbigiLCIpKSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9Uy5mKXtrLnB1c2goVTQoUy5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PVMudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQg''@;'; put 'put ''Zm9yIFR5cGUgIitTLnQ7ZGVmYXVsdDp0aHJvdyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLnR9cmV0dXJuIDE9PXllJiZrLnB1c2gocGUpLGooayl9ZnVuY3Rpb24gZXooUyxSLGssRyxRLG9lLGdlKXtpZih2b2lkIDA9PT1SLnYmJm51bGw9PVIuc3x8''@;'; put 'put ''InoiPT09Ui50JiYhUS5zaGVldFN0dWJzKXJldHVybiExO3ZhciBwZT0iIjtzd2l0Y2goUi50KXtjYXNlImIiOnBlPVIudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KFI9cXQoUikpLno9Ui56fHxBLl90YWJsZVsxNF0sUi52PVFlKEhlKFIudikpLFIudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNl''@;'; put 'put ''ImUiOnBlPSIiK1IudjticmVhaztkZWZhdWx0OnBlPVIudn12YXIgeWU9e3I6ayxjOkd9O3N3aXRjaCh5ZS5zPWwwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyxSLFEpLFIubCYmb2VbIiFsaW5rcyJdLnB1c2goW3FpKHllKSxSLmxdKSxSLmMmJm9lWyIhY29tbWVudHMiXS5wdXNoKFtxaSh5''@;'; put 'put ''ZSksUi5jXSksUi50KXtjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tTU1Qpe2lmKHBlPWFTKFEuU3RyaW5ncyxSLnYsUi5SP1Iucj1RcyhSLlIpOm51bGwsUS5yZXZTdHJpbmdzKSxSLlIpZm9yKHZhciBQZT0wO1BlPFIuUi5sZW5ndGg7KytQZSlSLlJbUGVdLnMmJmwwKFEuY2VsbFhmcyxR''@;'; put 'put ''LmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6Ui5SW1BlXS5zfSxRKTt5ZS50PSJzIix5ZS52PXBlLGdlP0ZyKFMsIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gZmIoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSxrLndyaXRlX3NoaWZ0KDQsUi52KSxrfSgwLHllKSk6''@;'; put 'put ''RnIoUywiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIExqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSx4cihSLGspLGsud3JpdGVfc2hpZnQoNCxSLnYpLGt9KDAseWUpKX1lbHNlIHllLnQ9InN0ciIsZ2U/RnIoUywiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gemooUyxSLGspe3JldHVy''@;'; put 'put ''biBudWxsPT1rJiYoaz1ibig4KzQqUy52Lmxlbmd0aCkpLGZpKFIsayksRmMoUy52LGspLGsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprfShSLHllKSk6RnIoUywiQnJ0Q2VsbFN0IixmdW5jdGlvbiBCaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKzQqUy52Lmxlbmd0aCkp''@;'; put 'put ''LHhyKFIsayksRmMoUy52LGspLGsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprfShSLHllKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gUi52PT0oMHxSLnYpJiZSLnY+LTFlMyYmUi52PDFlMz9nZT9GcihTLCJCcnRTaG9ydFJrIixmdW5jdGlvbiBWaihTLFIsayl7cmV0dXJuIG51bGw9''@;'; put 'put ''PWsmJihrPWJuKDgpKSxmaShSLGspLHV2KFMudixrKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbFJrIixmdW5jdGlvbiBOaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSkseHIoUixrKSx1dihTLnYsayksa30oUix5ZSkpOmdlP0ZyKFMsIkJydFNob3J0UmVhbCIsZnVuY3Rpb24g''@;'; put 'put ''SW5lKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSxmaShSLGspLE91KFMudixrKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIFBqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTYpKSx4cihSLGspLE91KFMudixrKSxrfShSLHllKSksITA7Y2Fz''@;'; put 'put ''ZSJiIjpyZXR1cm4geWUudD0iYiIsZ2U/RnIoUywiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiB4UyhTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDUpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIElqKFMs''@;'; put 'put ''UixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOSkpLHhyKFIsayksay53cml0ZV9zaGlmdCgxLFMudj8xOjApLGt9KFIseWUpKSwhMDtjYXNlImUiOnJldHVybiB5ZS50PSJlIixnZT9GcihTLCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBTbChTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJu''@;'; put 'put ''KDgpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoMSxTLnYpLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa30oUix5ZSkpOkZyKFMsIkJydENlbGxFcnJvciIsZnVuY3Rpb24geTgoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig5KSkseHIoUixrKSxrLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsUy52KSxrfShSLHllKSksITB9cmV0dXJuIGdlP0ZyKFMsIkJydFNob3J0QmxhbmsiLGZ1bmN0aW9uIHpEKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oNCkpLGZpKFIsayl9KDAseWUpKTpGcihTLCJCcnRDZWxsQmxhbmsiLGZ1bmN0aW9uIEFqKFMsUixrKXtyZXR1cm4gbnVs''@;'; put 'put ''bD09ayYmKGs9Ym4oOCkpLHhyKFIsayl9KDAseWUpKSwhMH1mdW5jdGlvbiBXNShTLFIsayxHKXt2YXIgUT1iaSgpLG9lPWsuU2hlZXROYW1lc1tTXSxnZT1rLlNoZWV0c1tvZV18fHt9LHBlPW9lO3RyeXtrJiZrLldvcmtib29rJiYocGU9ay5Xb3JrYm9vay5TaGVldHNbU10uQ29kZU5hbWV8''@;'; put 'put ''fHBlKX1jYXRjaHt9dmFyIHllPW9vKGdlWyIhcmVmIl18fCJBMSIpO2lmKHllLmUuYz4xNjM4M3x8eWUuZS5yPjEwNDg1NzUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoZ2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7''@;'; put 'put ''eWUuZS5jPU1hdGgubWluKHllLmUuYywxNjM4MykseWUuZS5yPU1hdGgubWluKHllLmUuYywxMDQ4NTc1KX1yZXR1cm4gZ2VbIiFsaW5rcyJdPVtdLGdlWyIhY29tbWVudHMiXT1bXSxGcihRLCJCcnRCZWdpblNoZWV0IiksKGsudmJhcmF3fHxnZVsiIW91dGxpbmUiXSkmJkZyKFEsIkJydFdz''@;'; put 'put ''UHJvcCIsZnVuY3Rpb24gVGooUyxSLGspe251bGw9PWsmJihrPWJuKDg0KzQqUy5sZW5ndGgpKTt2YXIgRz0xOTI7UiYmKFIuYWJvdmUmJihHJj0tNjUpLFIubGVmdCYmKEcmPS0xMjkpKSxrLndyaXRlX3NoaWZ0KDEsRyk7Zm9yKHZhciBRPTE7UTwzOysrUSlrLndyaXRlX3NoaWZ0KDEsMCk7''@;'; put 'put ''cmV0dXJuIG1mKHthdXRvOjF9LGspLGsud3JpdGVfc2hpZnQoLTQsLTEpLGsud3JpdGVfc2hpZnQoLTQsLTEpLHM1KFMsayksay5zbGljZSgwLGsubCl9KHBlLGdlWyIhb3V0bGluZSJdKSksRnIoUSwiQnJ0V3NEaW0iLEVqKHllKSksZnVuY3Rpb24gaXooUyxSLGspe0ZyKFMsIkJydEJlZ2lu''@;'; put 'put ''V3NWaWV3cyIpLEZyKFMsIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBNOChTLFIsayl7bnVsbD09ayYmKGs9Ym4oMzApKTt2YXIgRz05MjQ7cmV0dXJuKCgoUnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihHfD0zMiksV3QoU1siIWdyaWRsaW5lcyJdKSYmKEcmPS01KSxXdCgoKChS''@;'; put 'put ''fHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoRyY9LTUpLGsud3JpdGVfc2hpZnQoMixHKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUixrKSksUlsiIWZyZWV6ZSJdJiZGcihTLCJCcnRQYW5lIixmdW5jdGlvbiBaaihTKXt2YXIgUj1O''@;'; put 'put ''byhTWyIhZnJlZXplIl0pLGs9Ym4oMjkpO3JldHVybiBrLndyaXRlX3NoaWZ0KDgsUi5jLCJmIiksay53cml0ZV9zaGlmdCg4LFIuciwiZiIpLGsud3JpdGVfc2hpZnQoNCxSLnIpLGsud3JpdGVfc2hpZnQoNCxSLmMpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMyksa30o''@;'; put 'put ''UikpLFJbIiFzZWwiXSYmRnIoUywiQnJ0U2VsIixmdW5jdGlvbiBXaihTLFIpe3ZhciBrPWJuKDM2KSxHPVMuY2VsbDtpZighRyl7aWYoIVMucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO0c9cWkoTXMoUy5yYW5nZS5yZXBs''@;'; put 'put ''YWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgUT0ic3RyaW5nIj09dHlwZW9mIEc/Tm8oRyk6RztpZihSKXt2YXIgb2U9InN0cmluZyI9PXR5cGVvZiBSP05vKFIpOlI7ay53cml0ZV9zaGlmdCg0LFEucj49b2UuciYmUS5jPj1vZS5jPzA6US5yPj1vZS5yJiZRLmM8b2UuYz8yOlEucjxvZS5yJiZR''@;'; put 'put ''LmM+PW9lLmM/MTozKX1lbHNlIGsud3JpdGVfc2hpZnQoNCwzKTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwxKSxrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5y''@;'; put 'put ''KSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrfShSWyIhc2VsIl0sUlsiIWZyZWV6ZSJdKSksRnIoUywiQnJ0RW5kV3NWaWV3IiksRnIoUywiQnJ0RW5kV3NWaWV3cyIpfShRLGdlLGsuV29ya2Jvb2spLGZ1bmN0aW9uIG56KFMsUil7IVJ8fCFSWyIhY29scyJd''@;'; put 'put ''fHwoRnIoUywiQnJ0QmVnaW5Db2xJbmZvcyIpLFJbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihrLEcpe2smJkZyKFMsIkJydENvbEluZm8iLGZ1bmN0aW9uIEdqKFMsUixrKXtudWxsPT1rJiYoaz1ibigxOCkpO3ZhciBHPXU4KFMsUik7ay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3No''@;'; put 'put ''aWZ0KC00LFMpLGsud3JpdGVfc2hpZnQoNCwyNTYqKEcud2lkdGh8fDEwKSksay53cml0ZV9zaGlmdCg0LDApO3ZhciBRPTA7cmV0dXJuIFIuaGlkZGVuJiYoUXw9MSksIm51bWJlciI9PXR5cGVvZiBHLndpZHRoJiYoUXw9MiksUi5sZXZlbCYmKFF8PVIubGV2ZWw8PDgpLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixRKSxrfShHLGspKX0pLEZyKFMsIkJydEVuZENvbEluZm9zIikpfShRLGdlKSxmdW5jdGlvbiBKRChTLFIsayxHKXt2YXIgUT1vbyhSWyIhcmVmIl18fCJBMSIpLGdlPSIiLHBlPVtdO0ZyKFMsIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIHllPUFycmF5LmlzQXJyYXkoUiksUGU9US5l''@;'; put 'put ''LnI7UlsiIXJvd3MiXSYmKFBlPU1hdGgubWF4KFEuZS5yLFJbIiFyb3dzIl0ubGVuZ3RoLTEpKTtmb3IodmFyIE5lPVEucy5yO05lPD1QZTsrK05lKXtnZT1qaShOZSksTWooUyxSLFEsTmUpO3ZhciBZZT0hMTtpZihOZTw9US5lLnIpZm9yKHZhciBldD1RLnMuYztldDw9US5lLmM7KytldCl7''@;'; put 'put ''TmU9PT1RLnMuciYmKHBlW2V0XT1UYShldCkpO3ZhciBjdD15ZT8oUltOZV18fFtdKVtldF06UltwZVtldF0rZ2VdO1llPSEhY3QmJmV6KFMsY3QsTmUsZXQsRyxSLFllKX19RnIoUywiQnJ0RW5kU2hlZXREYXRhIil9KFEsZ2UsMCxSKSxmdW5jdGlvbiBPbmUoUyxSKXtSWyIhcHJvdGVjdCJd''@;'; put 'put ''JiZGcihTLCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIG1iKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDY2KSksUi53cml0ZV9zaGlmdCgyLFMucGFzc3dvcmQ/SHYoUy5wYXNzd29yZCk6MCksUi53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIs''@;'; put 'put ''ITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxb''@;'; put 'put ''InNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1Iud3JpdGVfc2hpZnQoNCxrWzFdP251bGw9PVNba1swXV18fFNba1swXV0/''@;'; put 'put ''MDoxOm51bGwhPVNba1swXV0mJlNba1swXV0/MDoxKX0pLFJ9KFJbIiFwcm90ZWN0Il0pKX0oUSxnZSksZnVuY3Rpb24gUUQoUyxSLGssRyl7aWYoUlsiIWF1dG9maWx0ZXIiXSl7dmFyIFE9UlsiIWF1dG9maWx0ZXIiXSxvZT0ic3RyaW5nIj09dHlwZW9mIFEucmVmP1EucmVmOnJhKFEucmVm''@;'; put 'put ''KTtrLldvcmtib29rfHwoay5Xb3JrYm9vaz17U2hlZXRzOltdfSksay5Xb3JrYm9vay5OYW1lc3x8KGsuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBnZT1rLldvcmtib29rLk5hbWVzLHBlPU1zKG9lKTtwZS5zLnI9PXBlLmUuciYmKHBlLmUucj1NcyhSWyIhcmVmIl0pLmUucixvZT1yYShwZSkp''@;'; put 'put ''O2Zvcih2YXIgeWU9MDt5ZTxnZS5sZW5ndGg7Kyt5ZSl7dmFyIFBlPWdlW3llXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09UGUuTmFtZSYmUGUuU2hlZXQ9PUcpe1BlLlJlZj0iJyIray5TaGVldE5hbWVzW0ddKyInISIrb2U7YnJlYWt9fXllPT1nZS5sZW5ndGgmJmdlLnB1c2goe05h''@;'; put 'put ''bWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6RyxSZWY6IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK29lfSksRnIoUywiQnJ0QmVnaW5BRmlsdGVyIixnZihvbyhvZSkpKSxGcihTLCJCcnRFbmRBRmlsdGVyIil9fShRLGdlLGssUyksZnVuY3Rpb24gdHooUyxSKXshUnx8IVJbIiFt''@;'; put 'put ''ZXJnZXMiXXx8KEZyKFMsIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rpb24gWUQoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoNCxTKSxSfShSWyIhbWVyZ2VzIl0ubGVuZ3RoKSksUlsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oayl7RnIoUywiQnJ0''@;'; put 'put ''TWVyZ2VDZWxsIixDOChrKSl9KSxGcihTLCJCcnRFbmRNZXJnZUNlbGxzIikpfShRLGdlKSxmdW5jdGlvbiBveihTLFIpe2lmKFIpe0ZyKFMsIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIHZiKFMsUil7bnVsbD09UiYmKFI9Ym4oMTgpKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKSgoU1tHXXx8e30pLnJlZnx8e30pLnMmJlNbR10ucmVmLnMuYzwwfHwrK2s7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCxrKSxSfShSKSk7Zm9yKHZhciBrPTA7''@;'; put 'put ''azxSLmxlbmd0aDsrK2spKChSW2tdfHx7fSkucmVmfHx7fSkucyYmUltrXS5yZWYucy5jPDB8fEZyKFMsIkJydERWYWwiLFhEKFJba10pKTtGcihTLCJCcnRFbmREVmFscyIpfX0oUSxnZVsiIXZhbGlkYXRpb25zIl0pLGZ1bmN0aW9uIGJiKFMsUixrKXtSWyIhbGlua3MiXS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKEcpe2lmKEdbMV0uVGFyZ2V0KXt2YXIgUT1FcihrLC0xLEdbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxLYS5ITElOSyk7RnIoUywiQnJ0SExpbmsiLGZ1bmN0aW9uIFM4KFMsUil7dmFyIGs9Ym4oNTArNCooU1sxXS5UYXJnZXQubGVuZ3RoKyhTWzFdLlRvb2x0aXB8fCIi''@;'; put 'put ''KS5sZW5ndGgpKTtnZih7czpObyhTWzBdKSxlOk5vKFNbMF0pfSxrKSxjNSgicklkIitSLGspO3ZhciBHPVNbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gRmMoKC0xPT1HPyIiOlNbMV0uVGFyZ2V0LnNsaWNlKEcrMSkpfHwiIixrKSxGYyhTWzFdLlRvb2x0aXB8fCIiLGspLEZjKCIi''@;'; put 'put ''LGspLGsuc2xpY2UoMCxrLmwpfShHLFEpKX19KSxkZWxldGUgUlsiIWxpbmtzIl19KFEsZ2UsRyksZ2VbIiFtYXJnaW5zIl0mJkZyKFEsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIEtqKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQ4KSksWDMoUyksS0QuZm9yRWFjaChmdW5jdGlvbihrKXtP''@;'; put 'put ''dShTW2tdLFIpfSksUn0oZ2VbIiFtYXJnaW5zIl0pKSwoIVJ8fFIuaWdub3JlRUN8fG51bGw9PVIuaWdub3JlRUMpJiZmdW5jdGlvbiBaNShTLFIpeyFSfHwhUlsiIXJlZiJdfHwoRnIoUywiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksRnIoUywiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiBx''@;'; put 'put ''aihTKXt2YXIgUj1ibigyNCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCw0KSxSLndyaXRlX3NoaWZ0KDQsMSksZ2YoUyxSKSxSfShvbyhSWyIhcmVmIl0pKSksRnIoUywiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0oUSxnZSksZnVuY3Rpb24gcnooUyxSLGssRyl7aWYoUlsiIWNvbW1lbnRzIl0u''@;'; put 'put ''bGVuZ3RoPjApe3ZhciBRPUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhrKzEpKyIudm1sIixLYS5WTUwpO0ZyKFMsIkJydExlZ2FjeURyYXdpbmciLGM1KCJySWQiK1EpKSxSWyIhbGVnYWN5Il09UX19KFEsZ2UsUyxHKSxGcihRLCJCcnRFbmRTaGVldCIpLFEuZW5kKCl9ZnVu''@;'; put 'put ''Y3Rpb24geDgoUyl7dmFyIEcsUj1bXSxrPVMubWF0Y2goL148YzpudW1DYWNoZT4vKTsoUy5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9b2UubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2Pigu''@;'; put 'put ''Kik8XC9jOnY+PFwvYzpwdD4vKTtnZSYmKFJbK2dlWzFdXT1rPytnZVsyXTpnZVsyXSl9KTt2YXIgUT1RcigoUy5tYXRjaCgvPGM6Zm9ybWF0Q29kZT4oW1xzXFNdKj8pPFwvYzpmb3JtYXRDb2RlPi8pfHxbIiIsIkdlbmVyYWwiXSlbMV0pO3JldHVybihTLm1hdGNoKC88YzpmPiguKj8pPFwv''@;'; put 'put ''YzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtHPW9lLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksW1IsUSxHXX1LYS5DSEFSVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsS2EuQ0hBUlRF''@;'; put 'put ''WD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBsej0vPCg/Olx3KzopP2NoYXJ0PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4vLFJTPS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3Kzop''@;'; put 'put ''P3Bsb3RBcmVhPi8sUG5lPS88KD86XHcrOik/bGVnZW5kPihbXHNcU10qPyk8XC8oPzpcdys6KT9sZWdlbmQ+LyxlST0vPCg/Olx3KzopP3RpdGxlPihbXHNcU10qPyk8XC8oPzpcdys6KT90aXRsZT4vO2Z1bmN0aW9uIGIyKFMsUixrLEcsUSxvZSxnZSxwZSl7dmFyIHllPW9lfHx7IiF0eXBl''@;'; put 'put ''IjoiY2hhcnQifTtpZighUylyZXR1cm4gb2U7Z2UmJmdlLkFuY2hvciYmKHllWyIhcG9zIl09TDUoZ2UuQW5jaG9yLHBlKSx5ZVsiIXBvc1R5cGUiXT1nZS5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSx5ZVsiIWFic3BvcyJdPUw1KGdlLkFuY2hvcixwZSkseWVbIiFyZWxwb3Mi''@;'; put 'put ''XT1BQyhnZS5BbmNob3IscGUpKSx5ZVsiIXBsb3QiXT1bXTt2YXIgUGU9IiIsTmU9IiIsWWU9Uy5tYXRjaChseik7WWU/KFBlPVMuc2xpY2UoMCxZZS5pbmRleCksTmU9Uy5zbGljZShZZS5pbmRleCtZZVswXS5sZW5ndGgpKTpQZT1OZT1TO3ZhciBldD1bXSxjdD1QZS5tYXRjaCgvPGM6bGFu''@;'; put 'put ''Zy4qPz4vKXx8Uy5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8TmUubWF0Y2goLzxjOmxhbmcuKj8+Lyk7cmV0dXJuIGN0JiYoeWVbIiFsYW5nIl09KHZyKGN0WzBdKXx8e30pLnZhbHx8ImVuLVVTIiksWWUmJigoZXQ9WWVbMV0ubWF0Y2goZUkpKSYmZnVuY3Rpb24gc3ooUyxSKXt2YXIgaz0iIjtT''@;'; put 'put ''Lm1hdGNoKC88YzpyaWNoPi8pJiZTLnJlcGxhY2UoLzxhOnQ+KFtcc1xTXSo/KTxcL2E6dD4vZyxmdW5jdGlvbihHLFEpe2srPVF9KSxSWyIhdGl0bGUiXT1rfHwiQ2hhcnQgVGl0bGUifShldFsxXSx5ZSksZnVuY3Rpb24gRm5lKFMsUil7aWYoUyl7dmFyIGs9MCxHPTAsUT0iQSIsb2U9e3M6''@;'; put 'put ''e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07Uy5yZXBsYWNlKHRJLGZ1bmN0aW9uKGdlLHBlKXt2YXIgeWU9e3Q6cGUsYzprLHc6MCxzZXI6W119LFBlPVtdLE5lPShnZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxZZT1OZT9nZS5zbGljZSgwLE5lKTpnZTsic2NhdHRlciI9PXBlJiYo''@;'; put 'put ''UGU9Z2UubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9tKSkmJnZyKFBlWzBdKSwiYmFyIj09cGUmJihQZT1nZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKHllLmJhckRpcj0iYmFyIj09dnIoUGVbMF0pLnZhbD8iaCI6InYiKSwoUGU9WWUubWF0Y2goLzxj''@;'; put 'put ''Omdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKHllLmdyb3VwaW5nPXZyKFBlWzBdKS52YWx8fCJzdGFuZGFyZCIpLChnZS5tYXRjaChjeil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXt2YXIgRXQ9W10sYXQ9e30sYnQ9W107aWYoY3QubWF0Y2goLzxjOnR4Pi8pKXt2YXIganQ9eDgoKGN0''@;'; put 'put ''Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFdfHwiIil8fFtdO2p0WzBdJiZqdFswXVswXSYmKGF0Lm5hbWU9anRbMF1bMF0pLGp0WzJdJiYoYXQubmFtZXJlZj1qdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGt0KXt2YXIgS3QsT3Q9Y3QubWF0Y2gobmV3IFJlZ0V4cCgiPGM6IitrdCsiPltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7T3QmJigoT3RbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe0t0PVRuLnJlcGxhY2Uo''@;'; put 'put ''LzwuKj8+L2csIiIpfSksKE90WzBdLm1hdGNoKC88YzooPzpcdyopQ2FjaGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7dmFyIHJyPXg4KFRuKTtvZS5zLnI9b2Uucy5jPTAsb2UuZS5jPWssUT1UYShrKSxyclswXS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKFNuLGxyKXtSW1EramkobHIpXT17dDoibnVtYmVyIj09dHlwZW9mIFNuPyJuIjoicyIsdjpTbix6OnJyWzFdfSxHPWxyfSksb2UuZS5yPEcmJihvZS5lLnI9RyksKytrLHllLncrKyxFdC5wdXNoKGt0KSwocnJbMl18fEt0KSYmYnQucHVzaChyclsyXXx8S3QpLCJ2YWwiPT1rdCYm''@;'; put 'put ''KGF0Lno9cnJbMV18fCJHZW5lcmFsIil9KSl9KSwoUGU9Z2UubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihhdC5zbW9vdGg9bnVsbD09dnIoUGVbMF0pLnZhbHx8dGkodnIoUGVbMF0pLnZhbCkpLGF0LmNvbHM9RXQsYXQucmFuZ2VzPWJ0LHllLnNlci5wdXNoKGF0KX0pLCJk''@;'; put 'put ''b3VnaG51dCI9PXBlJiYoUGU9Z2UubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKHllLmhvbGU9KHZyKFBlWzBdKS52YWx8fDEwKS8xMDApLFJbIiFwbG90Il0ucHVzaCh5ZSl9KSxrPjAmJihSWyIhcmVmIl09cmEob2UpKX19KChZZVsxXS5tYXRjaChSUyl8fFtdKVsxXSx5''@;'; put 'put ''ZSksbnVsbCE9KGV0PVllWzFdLm1hdGNoKFBuZSkpJiZmdW5jdGlvbiBFbyhTLFIpe3ZhciBrO1JbIiFsZWdlbmQiXT17cG9zOiJyIn0sKGs9Uy5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKFJbIiFsZWdlbmQiXS5wb3M9dnIoa1swXSkudmFsfHwiciIpfShldFswXSx5''@;'; put 'put ''ZSkpLHllfXZhciB0ST0vPGM6KCg/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3Vn''@;'; put 'put ''aG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxjej0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207S2EuQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVl''@;'; put 'put ''dCI7dmFyIFdhPVByKCJjaGFydHNoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczpyIjpZaS5yfSk7ZnVuY3Rpb24gTFMoUyxSLGssRyl7dmFyIFE9W0lpLFdhXTtyZXR1cm4gUS5wdXNoKCI8c2hlZXRQci8+IiksUS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21T''@;'; put 'put ''Y2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLFFbUS5sZW5ndGhdPVByKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksRXIoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwiLEthLkRSQVcpLFEubGVu''@;'; put 'put ''Z3RoPjImJihRW1EubGVuZ3RoXT0iPC9jaGFydHNoZWV0PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE9TKCl7dmFyIFM9YmkoKTtyZXR1cm4gRnIoUywiQnJ0QmVnaW5TaGVldCIpLEZyKFMsIkJydEVuZFNoZWV0IiksUy5lbmQoKX12YXIgeWI9''@;'; put 'put ''W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRvQ29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsiZGF0ZTE5MDQiLCExLCJib29sIl0s''@;'; put 'put ''WyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRlclByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEsImJvb2wiXSxbInJlZnJlc2hBbGxD''@;'; put 'put ''b25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExpbmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVjdHMiLCJhbGwiXSxbInNob3dQaXZv''@;'; put 'put ''dENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3MiLCJ1c2VyU2V0Il1dLG5JPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0sWyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJtaW5pbWl6ZWQiLCExLCJib29sIl0sWyJz''@;'; put 'put ''aG93SG9yaXpvbnRhbFNjcm9sbCIsITAsImJvb2wiXSxbInNob3dTaGVldFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3JvbGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1dLHJJPVtdLGZ6PVtbImNhbGNDb21wbGV0''@;'; put 'put ''ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIsImF1dG8iXSxbImNhbGNPblNhdmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUiXSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRlIiwiZmFsc2UiXSxbIml0ZXJhdGVDb3Vu''@;'; put 'put ''dCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRhIiwiMC4wMDEiXSxbInJlZk1vZGUiLCJBMSJdXTtmdW5jdGlvbiBpSShTLFIpe2Zvcih2YXIgaz0wO2shPVMubGVuZ3RoOysraylmb3IodmFyIEc9U1trXSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgb2U9UltRXTtpZihudWxsPT1HW29lWzBdXSlH''@;'; put 'put ''W29lWzBdXT1vZVsxXTtlbHNlIHN3aXRjaChvZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIEdbb2VbMF1dJiYoR1tvZVswXV09dGkoR1tvZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBHW29lWzBdXSYmKEdbb2VbMF1dPXBhcnNlSW50KEdbb2VbMF1d''@;'; put 'put ''LDEwKSl9fX1mdW5jdGlvbiBRMyhTLFIpe2Zvcih2YXIgaz0wO2shPVIubGVuZ3RoOysrayl7dmFyIEc9UltrXTtpZihudWxsPT1TW0dbMF1dKVNbR1swXV09R1sxXTtlbHNlIHN3aXRjaChHWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgU1tHWzBdXSYmKFNbR1swXV09dGkoU1tH''@;'; put 'put ''WzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIFNbR1swXV0mJihTW0dbMF1dPXBhcnNlSW50KFNbR1swXV0sMTApKX19fWZ1bmN0aW9uIFBTKFMpe1EzKFMuV0JQcm9wcyx5YiksUTMoUy5DYWxjUHIsZnopLGlJKFMuV0JWaWV3LG5JKSxpSShTLlNoZWV0cyxySSksYzgu''@;'; put 'put ''ZGF0ZTE5MDQ9dGkoUy5XQlByb3BzLmRhdGUxOTA0KX12YXIgcHo9Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBfYihTLFIpe2lmKFMubGVuZ3RoPjMxKXtpZihSKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBr''@;'; put 'put ''PSEwO3JldHVybiBwei5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKC0xIT1TLmluZGV4T2YoRykpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO2s9ITF9fSksa312YXIgRTg9Lzxcdys6d29ya2Jvb2svLHNJPVByKCJ3b3Jr''@;'; put 'put ''Ym9vayIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWkucn0pO2Z1bmN0aW9uIFQ4KFMsUil7dmFyIGs9Unx8e30sRz1bSWldO0dbRy5sZW5ndGhdPXNJO3ZhciBRPVMuV29ya2Jvb2smJihTLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7Uy5Xb3JrYm9vayYmUy5Xb3Jr''@;'; put 'put ''Ym9vay5Nb2RpZnkmJihHW0cubGVuZ3RoXT1mdW5jdGlvbiBlcChTKXt2YXIgUj17fTtyZXR1cm4gUy53YXJuJiYoUi5yZWFkT25seVJlY29tbWVuZGVkPTEpLFIudXNlck5hbWU9Uy51c2VyfHwiU2hlZXQgSlMiLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoUi5hbGdvcml0''@;'; put 'put ''aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvKSxTLmVuY3J5cHRpb24uaGFzaCYmKFIuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2FsdCYmKFIuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKFIuc3BpbkNvdW50PVMuZW5j''@;'; put 'put ''cnlwdGlvbi5zcGluKSksUHIoImZpbGVTaGFyaW5nIixudWxsLFIpfShTLldvcmtib29rLk1vZGlmeSkpO3ZhciBvZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O1MuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wcyYmKHliLmZvckVhY2goZnVuY3Rpb24oUGUpe251bGwhPVMuV29ya2Jv''@;'; put 'put ''b2suV0JQcm9wc1tQZVswXV0mJlMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0hPVBlWzFdJiYob2VbUGVbMF1dPVMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0pfSksUy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYob2UuY29kZU5hbWU9Uy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRl''@;'; put 'put ''bGV0ZSBvZS5Db2RlTmFtZSkpLEdbRy5sZW5ndGhdPVByKCJ3b3JrYm9va1ByIixudWxsLG9lKSxTLldvcmtib29rJiZTLldvcmtib29rLlByb3RlY3Rpb24mJihHW0cubGVuZ3RoXT1mdW5jdGlvbiB3YihTKXt2YXIgUj17fTtyZXR1cm4gUy5sb2NrU3RydWN0dXJlJiYoUi5sb2NrU3RydWN0''@;'; put 'put ''dXJlPTEpLFMubG9ja1dpbmRvd3MmJihSLmxvY2tXaW5kb3dzPTEpLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoUi53b3JrYm9va0FsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMuZW5jcnlwdGlvbi5oYXNoJiYoUi53b3JrYm9va0hhc2hWYWx1ZT1TLmVuY3J5''@;'; put 'put ''cHRpb24uaGFzaCksUy5lbmNyeXB0aW9uLnNhbHQmJihSLndvcmtib29rU2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKFIud29ya2Jvb2tTcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pKSxQcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLFIpfShT''@;'; put 'put ''Lldvcmtib29rLlByb3RlY3Rpb24pKTt2YXIgZ2U9Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHN8fFtdLHBlPTA7aWYoZ2UmJmdlWzBdJiZnZVswXS5IaWRkZW4pe2ZvcihHW0cubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGgmJmdlW3BlXSYm''@;'; put 'put ''Z2VbcGVdLkhpZGRlbjsrK3BlKTtwZT09Uy5TaGVldE5hbWVzLmxlbmd0aCYmKHBlPTApLEdbRy5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrcGUrJyIgYWN0aXZlVGFiPSInK3BlKyciLz4nLEdbRy5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihHW0cubGVuZ3RoXT0i''@;'; put 'put ''PHNoZWV0cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGg7KytwZSl7dmFyIHllPXtuYW1lOkxyKFMuU2hlZXROYW1lc1twZV0uc2xpY2UoMCwzMSkpfTtpZih5ZS5zaGVldElkPSIiKyhwZSsxKSx5ZVsicjppZCJdPSJySWQiKyhwZSsxKSxnZVtwZV0pc3dpdGNoKGdlW3BlXS5IaWRk''@;'; put 'put ''ZW4pe2Nhc2UgMTp5ZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6eWUuc3RhdGU9InZlcnlIaWRkZW4ifUdbRy5sZW5ndGhdPVByKCJzaGVldCIsbnVsbCx5ZSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L3NoZWV0cz4iLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmxlbmd0aCYmKEdb''@;'; put 'put ''Ry5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKFMuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUsTmUpe3ZhciBZZT1FcihrLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhOZSsxKSsiLnhtbCIsS2EuWExJTkspO0dbRy5sZW5ndGhdPSc8''@;'; put 'put ''ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytZZSsnIi8+J30pLEdbRy5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxRJiYoR1tHLmxlbmd0aF09IjxkZWZpbmVkTmFtZXM+IixTLldvcmtib29rJiZTLldvcmtib29rLk5hbWVzJiZTLldvcmtib29rLk5hbWVzLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUGUpe3ZhciBOZT17bmFtZTpQZS5OYW1lfTtQZS5Db21tZW50JiYoTmUuY29tbWVudD1QZS5Db21tZW50KSxudWxsIT1QZS5TaGVldCYmKE5lLmxvY2FsU2hlZXRJZD0iIitQZS5TaGVldCksUGUuSGlkZGVuJiYoTmUuaGlkZGVuPSIxIiksUGUuUmVmJiYoR1tHLmxlbmd0aF09''@;'; put 'put ''UHIoImRlZmluZWROYW1lIixMcihQZS5SZWYpLE5lKSl9KSxHW0cubGVuZ3RoXT0iPC9kZWZpbmVkTmFtZXM+IiksayYmay5waXZvdHMmJmsucGl2b3RzLmxlbmd0aD4wJiYoRy5wdXNoKCI8cGl2b3RDYWNoZXM+Iiksay5waXZvdHMuZm9yRWFjaChmdW5jdGlvbihQZSxOZSl7Ry5wdXNoKCc8''@;'; put 'put ''cGl2b3RDYWNoZSBjYWNoZUlkPSInKyhOZSsxKSsnIiByOmlkPSJySWQnK1BlWzJdKyciLz4nKX0pLEcucHVzaCgiPC9waXZvdENhY2hlcz4iKSksRy5sZW5ndGg+MiYmKEdbRy5sZW5ndGhdPSI8L3dvcmtib29rPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfWZ1''@;'; put 'put ''bmN0aW9uIG16KFMsUil7cmV0dXJuIFJ8fChSPWJuKDEyNykpLFIud3JpdGVfc2hpZnQoNCxTLkhpZGRlbiksUi53cml0ZV9zaGlmdCg0LFMuaVRhYklEKSxjNShTLnN0clJlbElELFIpLEZjKFMubmFtZS5zbGljZSgwLDMxKSxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un1mdW5j''@;'; put 'put ''dGlvbiB0cChTLFIpe3ZhciBrPXt9O3JldHVybiBTLnJlYWRfc2hpZnQoNCksay5BcmNoSUQ9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9Ui04LGt9ZnVuY3Rpb24gU2IoUyxSKXt2YXIgaz1iaSgpO3JldHVybiBGcihrLCJCcnRCZWdpbkJvb2siKSxGcihrLCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rp''@;'; put 'put ''b24gY0koUyxSKXtSfHwoUj1ibigxMjcpKTtmb3IodmFyIGs9MDs0IT1rOysraylSLndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIEZjKCJTaGVldEpTIixSKSxGYyh3LnZlcnNpb24sUiksRmMody52ZXJzaW9uLFIpLEZjKCI3MjYyIixSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un0o''@;'; put 'put ''KSksRnIoaywiQnJ0V2JQcm9wIixmdW5jdGlvbiBsSShTLFIpe1J8fChSPWJuKDcyKSk7dmFyIGs9MDtyZXR1cm4gUyYmUy5maWx0ZXJQcml2YWN5JiYoa3w9OCksUi53cml0ZV9zaGlmdCg0LGspLFIud3JpdGVfc2hpZnQoNCwwKSxzNShTJiZTLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIixS''@;'; put 'put ''KSxSLnNsaWNlKDAsUi5sKX0oUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzfHxudWxsKSksZnVuY3Rpb24gdnooUyxSKXtpZihSLldvcmtib29rJiZSLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBrPVIuV29ya2Jvb2suU2hlZXRzLEc9MCxRPS0xLG9lPS0xO0c8ay5sZW5ndGg7KytH''@;'; put 'put ''KSFrW0ddfHwha1tHXS5IaWRkZW4mJi0xPT1RP1E9RzoxPT1rW0ddLkhpZGRlbiYmLTE9PW9lJiYob2U9Ryk7b2U+UXx8KEZyKFMsIkJydEJlZ2luQm9va1ZpZXdzIiksRnIoUywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIHVJKFMsUil7cmV0dXJuIFJ8fChSPWJuKDI5KSksUi53cml0ZV9zaGlm''@;'; put 'put ''dCgtNCwwKSxSLndyaXRlX3NoaWZ0KC00LDQ2MCksUi53cml0ZV9zaGlmdCg0LDI4ODAwKSxSLndyaXRlX3NoaWZ0KDQsMTc2MDApLFIud3JpdGVfc2hpZnQoNCw1MDApLFIud3JpdGVfc2hpZnQoNCxTKSxSLndyaXRlX3NoaWZ0KDQsUyksUi53cml0ZV9zaGlmdCgxLDEyMCksUi5sZW5ndGg+''@;'; put 'put ''Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KFEpKSxGcihTLCJCcnRFbmRCb29rVmlld3MiKSl9fShrLFMpLGZ1bmN0aW9uIENiKFMsUil7RnIoUywiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIGs9MDtrIT1SLlNoZWV0TmFtZXMubGVuZ3RoOysraylGcihTLCJCcnRCdW5kbGVTaCIsbXooe0hp''@;'; put 'put ''ZGRlbjpSLldvcmtib29rJiZSLldvcmtib29rLlNoZWV0cyYmUi5Xb3JrYm9vay5TaGVldHNba10mJlIuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbnx8MCxpVGFiSUQ6aysxLHN0clJlbElEOiJySWQiKyhrKzEpLG5hbWU6Ui5TaGVldE5hbWVzW2tdfSkpO0ZyKFMsIkJydEVuZEJ1bmRsZVNo''@;'; put 'put ''cyIpfShrLFMpLEZyKGssIkJydEVuZEJvb2siKSxrLmVuZCgpfWZ1bmN0aW9uIGRJKFMsUixrLEcsUSl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP1c1OlZEKShTLGssRyxRKX1mdW5jdGlvbiBoSShTLFIsayxHLFEpe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9PUzpMUykoUyxr''@;'; put 'put ''LEcsUSl9ZnVuY3Rpb24gZkkoUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT91azpSdikoUyxrKX1mdW5jdGlvbiBBeihTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP05DOkhDKShTLGspfXZhciBCUz0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/Oicp''@;'; put 'put ''KFteJ10qKSg/OicpKS9nLE1iPS8oW1x3Ol0rKT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gSDAoUyxSKXt2YXIgaz1TLnNwbGl0KC9ccysvKSxHPVtdO2lmKFJ8fChHWzBdPWtbMF0pLDE9PT1rLmxlbmd0aClyZXR1cm4gRzt2YXIgb2UsZ2Us''@;'; put 'put ''eWUsUT1TLm1hdGNoKEJTKTtpZihRKWZvcih5ZT0wO3llIT1RLmxlbmd0aDsrK3llKS0xPT09KGdlPShvZT1RW3llXS5tYXRjaChNYikpWzFdLmluZGV4T2YoIjoiKSk/R1tvZVsxXV09b2VbMl0uc2xpY2UoMSxvZVsyXS5sZW5ndGgtMSk6R1sieG1sbnM6Ij09PW9lWzFdLnNsaWNlKDAsNik/''@;'; put 'put ''InhtbG5zIitvZVsxXS5zbGljZSg2KTpvZVsxXS5zbGljZShnZSsxKV09b2VbMl0uc2xpY2UoMSxvZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEd9ZnVuY3Rpb24galMoUyl7dmFyIGs9e307aWYoMT09PVMuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gazt2YXIgUSxvZSxwZSxHPVMubWF0Y2go''@;'; put 'put ''QlMpO2lmKEcpZm9yKHBlPTA7cGUhPUcubGVuZ3RoOysrcGUpLTE9PT0ob2U9KFE9R1twZV0ubWF0Y2goTWIpKVsxXS5pbmRleE9mKCI6IikpP2tbUVsxXV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpOmtbInhtbG5zOiI9PT1RWzFdLnNsaWNlKDAsNik/InhtbG5zIitRWzFdLnNsaWNl''@;'; put 'put ''KDYpOlFbMV0uc2xpY2Uob2UrMSldPVFbMl0uc2xpY2UoMSxRWzJdLmxlbmd0aC0xKTtyZXR1cm4ga31mdW5jdGlvbiBreihTKXt2YXIgUj17fTtpZihTLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBrPXtocHg6NCpwYXJzZUludChTLkRlZmF1bHRSb3dIZWlnaHQpLzN9O2p2KGspLFIucm93PWt9''@;'; put 'put ''aWYoUy5EZWZhdWx0Q29sV2lkdGgpe3ZhciBHPXt3cHg6NCpwYXJzZUludChTLkRlZmF1bHRDb2xXaWR0aCkvM307UTAoRyksUi5jb2w9R31yZXR1cm4gUn1mdW5jdGlvbiBJeihTLFIsayxHKXt2YXIgUT1HO3N3aXRjaCgoa1swXS5tYXRjaCgvZHQ6ZHQ9IihbXHcuXSspIi8pfHxbIiIsIiJd''@;'; put 'put ''KVsxXSl7Y2FzZSJib29sZWFuIjpRPXRpKEcpO2JyZWFrO2Nhc2UiaTIiOmNhc2UiaW50IjpRPXBhcnNlSW50KEcsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOlE9cGFyc2VGbG9hdChHKTticmVhaztjYXNlImRhdGUiOmNhc2UiZGF0ZVRpbWUudHoiOlE9SGUoRyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVpZCI6Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIra1swXSl9U1tRcihSKV09UX12YXIgeGI9ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91YmxlIiwzMzoi''@;'; put 'put ''U2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxwST1rZSh4Yik7ZnVuY3Rpb24gVVMoUyxSLGssRyl7aWYoRy5jZWxsU3R5bGVzKXtpZihrPWsucmVwbGFjZSgvXHMrL2csIiAiKSxSLkludGVyaW9yKXt2YXIgUT1SLkludGVyaW9yO1EuUGF0dGVybiYmKFEucGF0dGVy''@;'; put 'put ''blR5cGU9bUNbUS5QYXR0ZXJuXXx8US5QYXR0ZXJuKSxRLkNvbG9yJiZRLkNvbG9yLm1hdGNoKC8jWzAtOUEtRmEtZl0qLykmJihRLmZnQ29sb3I9e3JnYjpRLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIFJ6KFMpe1MuQm9yZGVycyYmKFMuQm9yZGVycy5mb3JFYWNoKGZ1bmN0aW9uKFIp''@;'; put 'put ''e3ZhciBrPVIuUG9zaXRpb24udG9Mb3dlckNhc2UoKTtTW2tdPXtzdHlsZTpaUyhSLkxpbmVTdHlsZSwrUi5XZWlnaHQpLGNvbG9yOntyZ2I6KFIuQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSBTLkJvcmRlcnMpfShSKTt2YXIgZ2Usb2U9ay5tYXRjaCgvPCg/Olx3Kzop''@;'; put 'put ''P0ZvbnRcc1tePl0qPi8pO29lJiYodGkoKGdlPXZyKG9lWzBdKSkuQm9sZCkmJihSLkJvbGQ9ITApLHRpKGdlLkl0YWxpYykmJihSLkl0YWxpYz0hMCksdGkoZ2UuU3RyaWtlVGhyb3VnaCkmJihSLlN0cmlrZT0hMCksZ2UuU2l6ZSYmKFIuU2l6ZT0rZ2UuU2l6ZSksUi5Gb250TmFtZT1nZS5G''@;'; put 'put ''b250TmFtZT9nZS5Gb250TmFtZToiQXJpYWwiLGdlLlVuZGVybGluZSYmKFIuVW5kZXJsaW5lPXBJW2dlLlVuZGVybGluZV0pLGdlLkNvbG9yJiYoUi5SR0I9Z2UuQ29sb3Iuc2xpY2UoLTYpKSksUi5BbGlnbm1lbnQmJihSLmFsaWdubWVudD17fSxSLkFsaWdubWVudC5WZXJ0aWNhbCYmKFIu''@;'; put 'put ''YWxpZ25tZW50LnZlcnRpY2FsPVIuQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLFIuQWxpZ25tZW50Lkhvcml6b250YWwmJihSLmFsaWdubWVudC5ob3Jpem9udGFsPVIuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSksdGkoUi5BbGlnbm1lbnQuV3JhcFRleHR8''@;'; put 'put ''fCIwIik/Ui5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09Ui5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBSLmFsaWdubWVudC53cmFwVGV4dCx0aShSLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKFIuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSwrUi5BbGlnbm1lbnQuSW5k''@;'; put 'put ''ZW50JiYoUi5hbGlnbm1lbnQuaW5kZW50PStSLkFsaWdubWVudC5JbmRlbnR8fDApLCtSLkFsaWdubWVudC5Sb3RhdGUmJihSLmFsaWdubWVudC50ZXh0Um90YXRpb249K1IuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfVNbUi5JRF09UiwoIkRlZmF1bHQiPT1SLklEfHwiTm9ybWFsIj09Ui5OYW1l''@;'; put 'put ''KSYmSTQoUil9ZnVuY3Rpb24gWlMoUyxSKXtzd2l0Y2goUyl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJEYXNoRG90RG90IjpyZXR1cm4i''@;'; put 'put ''ZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrUnx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRoaW4iO2Nhc2UgMjpyZXR1cm4i''@;'; put 'put ''bWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIFN9ZnVuY3Rpb24gZ0koUyxSLGssRyxRLG9lLGdlLHBlLHllLFBlKXt2YXIgTmU9IkdlbmVyYWwiLFllPUcuU3R5bGVJRCxldD17fTtQZT1QZXx8e307dmFyIGN0PVtdLEV0PTA7Zm9yKHZvaWQgMD09PVll''@;'; put 'put ''JiZwZSYmKFllPXBlLlN0eWxlSUQpLHZvaWQgMD09PVllJiZnZSYmKFllPWdlLlN0eWxlSUQpO3ZvaWQgMCE9PW9lW1llXTspe3ZhciBhdD1vZVtZZV07aWYoIkdlbmVyYWwiPT1OZSYmYXQubmYmJihOZT1vZVtZZV0ubmYpLGF0LkludGVyaW9yJiZjdC5wdXNoKG9lW1llXS5JbnRlcmlvciks''@;'; put 'put ''YXQuYWxpZ25tZW50JiYoZXQuYWxpZ25tZW50fHwoZXQuYWxpZ25tZW50PXF0KGF0LmFsaWdubWVudCkpKSxudWxsPT1ldC5ib2xkJiZhdC5Cb2xkJiYoZXQuYm9sZD0hMCksbnVsbD09ZXQuaXRhbGljJiZhdC5JdGFsaWMmJihldC5pdGFsaWM9ITApLG51bGw9PWV0LnN0cmlrZSYmYXQuU3Ry''@;'; put 'put ''aWtlJiYoZXQuc3RyaWtlPSEwKSxudWxsPT1ldC5zeiYmYXQuU2l6ZSYmKGV0LnN6PWF0LlNpemUpLG51bGw9PWV0Lm5hbWUmJmF0LkZvbnROYW1lJiYoZXQubmFtZT1hdC5Gb250TmFtZSksbnVsbD09ZXQudW5kZXJsaW5lJiZhdC5VbmRlcmxpbmUmJihldC51bmRlcmxpbmU9YXQuVW5kZXJs''@;'; put 'put ''aW5lKSxudWxsPT1ldC5jb2xvciYmYXQuUkdCJiYoZXQuY29sb3I9e3JnYjphdC5SR0J9KSxbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oT3Qpe251bGw9PWV0W090XSYmYXRbT3RdJiYoZXRbT3RdPXF0KGF0W090XSkpfSksIkRlZmF1bHQiPT1ZZSli''@;'; put 'put ''cmVhaztZZT1hdC5QYXJlbnR8fCJEZWZhdWx0In1ldC5uYW1lfHwoZXQubmFtZT1vZS5EZWZhdWx0JiZvZS5EZWZhdWx0LkZvbnROYW1lfHwiQXJpYWwiKSxldC5zenx8KGV0LnN6PW9lLkRlZmF1bHQmJm9lLkRlZmF1bHQuU2l6ZXx8MTIpO3ZhciBidD0iIjtpZihTfHxHLkZvcm11bGF8fCJT''@;'; put 'put ''dHJpbmciPT1rLlR5cGV8fCJOdW1iZXIiPT1rLlR5cGUpc3dpdGNoKGsuVHlwZSl7Y2FzZSJCb29sZWFuIjpHLnQ9ImIiLEcudj10aShTKTticmVhaztjYXNlIlN0cmluZyI6Ry50PSJzIixidD1MYShRcihTKSksRy52PVMuaW5kZXhPZigiPCIpPi0xP1FyKFJ8fFMpLnJlcGxhY2UoLzxbXl0q''@;'; put 'put ''Pz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9bWQuaHRtbF90b19ycyhRcihTKSkpO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9Uy5zbGljZSgtMSkmJihTKz0iWiIpLEcudj0oSGUoUyktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxHLnYhPUcudj9H''@;'; put 'put ''LnY9UXIoUyk6Ry52PDYwJiYoRy52PUcudi0xKSwoIU5lfHwiR2VuZXJhbCI9PU5lKSYmKE5lPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PUcudiYmKEcudj0rUyksRy50fHwoRy50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6Ry50PSJlIixHLnY9UDNbU10sITEhPT1QZS5j''@;'; put 'put ''ZWxsVGV4dCYmKEcudz1TKTticmVhaztkZWZhdWx0OiIiPT1TJiYiIj09Uj9HLnQ9InoiOihHLnQ9InMiLGJ0PUxhKFFyKFMpKSxHLnY9Uy5pbmRleE9mKCI8Iik+LTE/UXIoUnx8UykucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCxTLmluZGV4T2YoIjwiKT4tMSYmKEcuUj1tZC5odG1sX3Rv''@;'; put 'put ''X3JzKFFyKFMpKSkpfWVsc2UgRy50PSJ6IixkZWxldGUgRy52O2lmKGZ1bmN0aW9uIHpTKFMsUixrKXtpZigieiIhPT1TLnQpe2lmKCFrfHwhMSE9PWsuY2VsbFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxNY1tTLnZdOiJHZW5lcmFsIj09PVI/Im4iPT09Uy50PygwfFMudik9PT1TLnY/''@;'; put 'put ''QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpOkEuX2dlbmVyYWwoUy52KTpmdW5jdGlvbiBEeihTLFIpe3ZhciBrPXRlW1NdfHxRcihTKTtyZXR1cm4iR2VuZXJhbCI9PT1rP0EuX2dlbmVyYWwoUik6QS5mb3JtYXQoayxSKX0oUnx8IkdlbmVyYWwiLFMudil9Y2F0Y2go''@;'; put 'put ''b2Upe2lmKGsuV1RGKXRocm93IG9lfXRyeXt2YXIgRz10ZVtSXXx8Unx8IkdlbmVyYWwiO2lmKGsuY2VsbE5GJiYoUy56PUcpLGsuY2VsbERhdGVzJiYibiI9PVMudCYmQS5pc19kYXRlKEcpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShR''@;'; put 'put ''LnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX1jYXRjaChvZSl7aWYoay5XVEYpdGhyb3cgb2V9fX0oRyxOZSxQZSksITEhPT1QZS5jZWxsRm9ybXVsYSlpZihHLkZvcm11bGEpe3ZhciBqdD1RcihHLkZvcm11bGEpOzYxPT1qdC5jaGFyQ29kZUF0KDApJiYoanQ9anQuc2xpY2UoMSkp''@;'; put 'put ''LEcuZj1INShqdCxRKSxkZWxldGUgRy5Gb3JtdWxhLCJSQyI9PUcuQXJyYXlSYW5nZT9HLkY9SDUoIlJDOlJDIixRKTpHLkFycmF5UmFuZ2UmJihHLkY9SDUoRy5BcnJheVJhbmdlLFEpLHllLnB1c2goW29vKEcuRiksRy5GXSkpfWVsc2UgZm9yKEV0PTA7RXQ8eWUubGVuZ3RoOysrRXQpUS5y''@;'; put 'put ''Pj15ZVtFdF1bMF0ucy5yJiZRLnI8PXllW0V0XVswXS5lLnImJlEuYz49eWVbRXRdWzBdLnMuYyYmUS5jPD15ZVtFdF1bMF0uZS5jJiYoRy5GPXllW0V0XVsxXSk7aWYoUGUuY2VsbFN0eWxlcyYmKGN0LmZvckVhY2goZnVuY3Rpb24oT3QpeyFldC5wYXR0ZXJuVHlwZSYmT3QucGF0dGVyblR5''@;'; put 'put ''cGUmJihldC5wYXR0ZXJuVHlwZT1PdC5wYXR0ZXJuVHlwZSksIWV0LmZnQ29sb3ImJk90LmZnQ29sb3ImJihldC5mZ0NvbG9yPU90LmZnQ29sb3IpfSksRy5zPWV0KSx2b2lkIDAhPT1HLlN0eWxlSUQmJihHLml4ZmU9Ry5TdHlsZUlEKSxHLlImJkcucyl7dmFyIGt0PXF0KEcucyk7ZGVsZXRl''@;'; put 'put ''IGt0LmJvbGQsZGVsZXRlIGt0Lml0YWxpYyxkZWxldGUga3QudW5kZXJsaW5lLGRlbGV0ZSBrdC5zdHJpa2UsRy5SLmZvckVhY2goZnVuY3Rpb24oT3Qpe090LnM9UHQocXQoa3QpLE90LnMpfSl9fWZ1bmN0aW9uIEx6KFMpe1MudD1TLnZ8fCIiLFMudD1TLnQucmVwbGFjZSgvXHJcbi9nLCJc''@;'; put 'put ''biIpLnJlcGxhY2UoL1xyL2csIlxuIiksUy52PVMudz1TLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIFdTKFMpe2lmKFRlJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIFMudG9TdHJpbmcoInV0ZjgiKTtpZigic3RyaW5nIj09dHlwZW9mIFMpcmV0dXJuIFM7aWYodHlwZW9mIFVpbnQ4QXJyYXk8''@;'; put 'put ''InUiJiZTIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZ28oQyhIKFMpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIFk1PS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/''@;'; put 'put ''OjxcL11bXj5dKik/Pi9nbTtmdW5jdGlvbiBEOChTLFIpe3ZhciBrPVJ8fHt9LEc9SihXUyhTKSk7KCJiaW5hcnkiPT1rLnR5cGV8fCJhcnJheSI9PWsudHlwZXx8ImJhc2U2NCI9PWsudHlwZSkmJihHPXR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxZKEcp''@;'; put 'put ''KTpnbyhHKSk7dmFyIFE9Ry5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksb2U9ITE7aWYoKDEwMjMmUS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmUS5pbmRleE9mKCIsIiksMTAyMyZRLmluZGV4T2YoIjsiKSkpe3ZhciBnZT1xdChrKTtyZXR1cm4gZ2UudHlwZT0ic3RyaW5nIixq''@;'; put 'put ''My50b193b3JrYm9vayhHLGdlKX1pZigtMT09US5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHl1KXtRLmluZGV4T2YoIjwiK3l1KT49MCYmKG9lPSEwKX0pLG9lKXJldHVybiBt''@;'; put 'put ''ZC50b193b3JrYm9vayhHLGspO3ZhciBwZSxQZSx5ZT1bXTtudWxsIT1sZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9bGUpO3ZhciBrcixOZT17fSxZZT1bXSxldD1rLmRlbnNlP1tdOnt9LGN0PSIiLEV0PXt9LGF0PXt9LGJ0PXt9LGp0PUgwKCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicp''@;'; put 'put ''LGt0PTAsT3Q9MCxLdD0wLFRuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LHJyPXt9LFNuPXt9LGxyPSIiLFhuPTAsQm49W10sZnI9e30sYnI9e30sZXI9MCxNaT1bXSxGaT17fSxuYT1bXSxjYT17fSxMaT1bXSxWbj0hMSxCcj1bXSxfcj1bXSxGbj17fSxqcj0wLFppPTAseWk9e1No''@;'; put 'put ''ZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LF9hPXt9O1k1Lmxhc3RJbmRleD0wLEc9Ry5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBzbz0iIjtwZT1ZNS5leGVjKEcpOylzd2l0Y2gocGVbM109KHNvPXBlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRh''@;'; put 'put ''dGEiOmlmKCJkYXRhIj09c28pe2lmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBd''@;'; put 'put ''KTticmVha31pZih5ZVt5ZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09cGVbMV0/Z0koRy5zbGljZShrdCxwZS5pbmRleCksbHIsanQsImNvbW1lbnQiPT15ZVt5ZS5sZW5ndGgtMV1bMF0/Y2E6YXQse2M6T3QscjpLdH0scnIsTGlbT3RdLGJ0LEJyLGspOihscj0iIixqdD1IMChwZVswXSks''@;'; put 'put ''a3Q9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwiOmlmKCIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigoYXQ9alMocGVbMF0pKS5JbmRleCYmKE90PSthdC5JbmRleC0xKSxPdDxUbi5zLmMmJihU''@;'; put 'put ''bi5zLmM9T3QpLE90PlRuLmUuYyYmKFRuLmUuYz1PdCksbmE9W10sIWsuc2hlZXRTdHVicyl7KytPdDticmVha31nSSgiIiwiIix7fSwiY29tbWVudCI9PXllW3llLmxlbmd0aC0xXVswXT9jYTphdCx7YzpPdCxyOkt0fSxycixMaVtPdF0sYnQsQnIsayl9aWYobmEubGVuZ3RoPjAmJihhdC5j''@;'; put 'put ''PW5hKSwoIWsuc2hlZXRSb3dzfHxrLnNoZWV0Um93cz5LdCkmJih2b2lkIDAhPT1hdC52fHxrLnNoZWV0U3R1YnMpJiYoay5kZW5zZT8oZXRbS3RdfHwoZXRbS3RdPVtdKSxldFtLdF1bT3RdPWF0KTpldFtUYShPdCkramkoS3QpXT1hdCksYXQuSFJlZiYmKGF0Lmw9e1RhcmdldDpRcihhdC5I''@;'; put 'put ''UmVmKX0sYXQuSFJlZlNjcmVlblRpcCYmKGF0LmwuVG9vbHRpcD1hdC5IUmVmU2NyZWVuVGlwKSxkZWxldGUgYXQuSFJlZixkZWxldGUgYXQuSFJlZlNjcmVlblRpcCksKGF0Lk1lcmdlQWNyb3NzfHxhdC5NZXJnZURvd24pJiYoanI9T3QrKDB8cGFyc2VJbnQoYXQuTWVyZ2VBY3Jvc3MsMTAp''@;'; put 'put ''KSxaaT1LdCsoMHxwYXJzZUludChhdC5NZXJnZURvd24sMTApKSwoanI+T3R8fFppPkt0KSYmQm4ucHVzaCh7czp7YzpPdCxyOkt0fSxlOntjOmpyLHI6Wml9fSkpLGsuc2hlZXRTdHVicylpZihhdC5NZXJnZUFjcm9zc3x8YXQuTWVyZ2VEb3duKXtmb3IodmFyIGlhPU90O2lhPD1qcjsrK2lh''@;'; put 'put ''KWZvcih2YXIgTG89S3Q7TG88PVppOysrTG8pKGlhPk90fHxMbz5LdCkmJihrLmRlbnNlPyhldFtMb118fChldFtMb109W10pLGV0W0xvXVtpYV09e3Q6InoifSk6ZXRbVGEoaWEpK2ppKExvKV09e3Q6InoifSk7T3Q9anIrMX1lbHNlKytPdDtlbHNlIGF0Lk1lcmdlQWNyb3NzP090PWpyKzE6''@;'; put 'put ''KytPdH1lbHNlKGF0PWpTKHBlWzBdKSkuSW5kZXgmJihPdD0rYXQuSW5kZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJisrT3QsbmE9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXBlWzFdfHwiLz4iPT09''@;'; put 'put ''cGVbMF0uc2xpY2UoLTIpPyhLdDxUbi5zLnImJihUbi5zLnI9S3QpLEt0PlRuLmUuciYmKFRuLmUucj1LdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKGJ0PUgwKHBlWzBdKSkuSW5kZXgmJihLdD0rYnQuSW5kZXgtMSksT3Q9MCwrK0t0KTooKGJ0PUgwKHBlWzBdKSkuSW5kZXgmJihLdD0r''@;'; put 'put ''YnQuSW5kZXgtMSksRm49e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdodHx8YnQuSGVpZ2h0KSYmKEZuLmhwdD1wYXJzZUZsb2F0KGJ0LkhlaWdodCksRm4uaHB4PXNoKEZuLmhwdCksX3JbS3RdPUZuKSwiMSI9PWJ0LkhpZGRlbiYmKEZuLmhpZGRlbj0hMCxfcltLdF09Rm4pKTticmVhaztjYXNl''@;'; put 'put ''IndvcmtzaGVldCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO1llLnB1c2goY3QpLFRuLnMucjw9VG4uZS5yJiZUbi5zLmM8PVRuLmUuYyYmKGV0WyIhcmVmIl09cmEoVG4pLGsu''@;'; put 'put ''c2hlZXRSb3dzJiZrLnNoZWV0Um93czw9VG4uZS5yJiYoZXRbIiFmdWxscmVmIl09ZXRbIiFyZWYiXSxUbi5lLnI9ay5zaGVldFJvd3MtMSxldFsiIXJlZiJdPXJhKFRuKSkpLEJuLmxlbmd0aCYmKGV0WyIhbWVyZ2VzIl09Qm4pLExpLmxlbmd0aD4wJiYoZXRbIiFjb2xzIl09TGkpLF9yLmxl''@;'; put 'put ''bmd0aD4wJiYoZXRbIiFyb3dzIl09X3IpLEV0JiYoZXRbIiFzaGVldEZvcm1hdCJdPWt6KEV0KSksTmVbY3RdPWV0fWVsc2UgVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sS3Q9T3Q9MCx5ZS5wdXNoKFtwZVszXSwhMV0pLFBlPUgwKHBlWzBdKSxjdD1RcihQZS5OYW1lKSxldD1r''@;'; put 'put ''LmRlbnNlP1tdOnt9LEJuPVtdLEJyPVtdLF9yPVtdLHlpLlNoZWV0cy5wdXNoKF9hPXtuYW1lOmN0LEhpZGRlbjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5q''@;'; put 'put ''b2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09cGVbMF0uc2xpY2UoLTIpKWJyZWFrO0V0PUgwKHBlWzBdKSx5ZS5wdXNoKFtwZVszXSwhMV0pLExpPVtdLFZuPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXBlWzFdP1VTKHJyLFNuLGxyLGspOihTbj1IMChwZVswXSksbHI9IiIpO2JyZWFrO2Nh''@;'; put 'put ''c2UibnVtYmVyZm9ybWF0IjpTbi5uZj1RcihIMChwZVswXSkuRm9ybWF0fHwiR2VuZXJhbCIpLHRlW1NuLm5mXSYmKFNuLm5mPXRlW1NuLm5mXSk7Zm9yKHZhciBPYT0wOzM5MiE9T2EmJkEuX3RhYmxlW09hXSE9U24ubmY7KytPYSk7aWYoMzkyPT1PYSlmb3IoT2E9NTc7MzkyIT1PYTsrK09h''@;'; put 'put ''KWlmKG51bGw9PUEuX3RhYmxlW09hXSl7QS5sb2FkKFNuLm5mLE9hKTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PXllW3llLmxlbmd0aC0xXVswXXx8Ii8iPT09cGVbMV0pYnJlYWs7aWYoKGtyPUgwKHBlWzBdKSkuSGlkZGVuJiYoa3IuaGlkZGVuPSEwLGRlbGV0ZSBr''@;'; put 'put ''ci5IaWRkZW4pLGtyLldpZHRoP2tyLndweD00KnBhcnNlSW50KGtyLldpZHRoLDEwKS8zOitrci5BdXRvRml0V2lkdGgmJihrci5hdXRvPTEpLCFWbiYma3Iud3B4PjEwKXtWbj0hMCxUYz1maztmb3IodmFyIGhvPTA7aG88TGkubGVuZ3RoOysraG8pTGlbaG9dJiZRMChMaVtob10pfVZuJiZR''@;'; put 'put ''MChrciksTGlba3IuSW5kZXgtMXx8TGkubGVuZ3RoXT1rcjtmb3IodmFyIEphPTA7SmE8K2tyLlNwYW47KytKYSlMaVtMaS5sZW5ndGhdPXF0KGtyKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PXBlWzFdKWJyZWFrO3lpLk5hbWVzfHwoeWkuTmFtZXM9W10pO3ZhciBCaT12cihw''@;'; put 'put ''ZVswXSksSXM9e05hbWU6QmkuTmFtZSxSZWY6SDUoQmkuUmVmZXJzVG8uc2xpY2UoMSkse3I6MCxjOjB9KX07eWkuU2hlZXRzLmxlbmd0aD4wJiYoSXMuU2hlZXQ9eWkuU2hlZXRzLmxlbmd0aC0xKSx5aS5OYW1lcy5wdXNoKElzKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNl''@;'; put 'put ''ImkiOmNhc2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpjYXNlImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFncmFwaHMiOmNhc2UibmFtZSI6YnJlYWs7Y2FzZSJhbGlnbm1lbnQiOmlmKCFrLmNlbGxTdHlsZXN8fCIv''@;'; put 'put ''Ij09PXBlWzFdKWJyZWFrO1NuLkFsaWdubWVudD1IMChwZVswXSk7YnJlYWs7Y2FzZSJib3JkZXJzIjoiLyIhPT1wZVsxXSYmKFNuLkJvcmRlcnM9W10pO2JyZWFrO2Nhc2UiYm9yZGVyIjppZigiLyI9PT1wZVsxXSlicmVhaztTbi5Cb3JkZXJzfHwoU24uQm9yZGVycz1bXSksU24uQm9yZGVy''@;'; put 'put ''cy5wdXNoKEgwKHBlWzBdKSk7YnJlYWs7Y2FzZSJmb250IjppZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtscis9cGVbMF07YnJlYWt9Ii8iPT09cGVbMV0/bHIrPUcuc2xpY2UoWG4scGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTpYbj1wZS5pbmRleDticmVhaztjYXNlImludGVyaW9yIjppZigh''@;'; put 'put ''ay5jZWxsU3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztTbi5JbnRlcmlvcj1IMChwZVswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNl''@;'; put 'put ''ImNvbXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2Ui''@;'; put 'put ''aWRlbnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0YzKGZyLHNvLEcuc2xpY2UoZXIscGUuaW5kZXgpKTplcj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Ui''@;'; put 'put ''d29ya2Jvb2siOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIHllLnB1c2goW3BlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT1wZVsxXSl7aWYoKFBl''@;'; put 'put ''PXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSk7THooY2EpLG5hLnB1c2goY2EpfWVsc2UgeWUucHVzaChbcGVbM10sITFdKSxjYT17YTooUGU9SDAocGVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYo''@;'; put 'put ''Ii8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSl7dmFyIFBuPUgwKHBlWzBdKTtldFsiIWF1dG9maWx0ZXIiXT17''@;'; put 'put ''cmVmOkg1KFBuLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0seWUucHVzaChbcGVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihldFsiIXZhbGlkYXRpb25zIl18fChldFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09''@;'; put 'put ''cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBdKSxGaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXBlWzFdKXt2YXIgV289''@;'; put 'put ''K0cuc2xpY2Uoa3QscGUuaW5kZXgpOyg3Mj09V298fDk2PT1XbykmJklmKFdvKX1lbHNlIGt0PXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2UiZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2Fz''@;'; put 'put ''ZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6Y2FzZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVlcnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZv''@;'; put 'put ''cm1hdHRpbmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0dGFncyI6Y2FzZSJleGNlbHdvcmtib29rIjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigwPT15ZS5sZW5ndGgmJiJkb2N1bWVudCI9PXBlWzNdfHwwPT15ZS5sZW5ndGgmJiJ1b2YiPT1w''@;'; put 'put ''ZVszXSlyZXR1cm4gSUkoRyxrKTt2YXIgaHI9ITA7c3dpdGNoKHllW3llLmxlbmd0aC0xXVswXSl7Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2gocGVbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBv''@;'; put 'put ''bmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJjb21w''@;'; put 'put ''b25lbnRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidG9vbGJhciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVy''@;'; put 'put ''IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiZXhjZWx3b3JrYm9vayI6c3dpdGNoKHBlWzNdKXtjYXNlImRhdGUxOTA0Ijp5aS5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Ui''@;'; put 'put ''d2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJv''@;'; put 'put ''b2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNl''@;'; put 'put ''Im1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUi''@;'; put 'put ''OmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3Vs''@;'; put 'put ''YXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNh''@;'; put 'put ''c2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1wZVsxXSlzd2l0Y2goRy5zbGljZShlcixwZS5pbmRleCkpe2Nhc2UiU2hl''@;'; put 'put ''ZXRIaWRkZW4iOl9hLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRWZXJ5SGlkZGVuIjpfYS5IaWRkZW49Mn1lbHNlIGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJn''@;'; put 'put ''aW5zIl0uaGVhZGVyPXZyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJmb290ZXIiOmV0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmZvb3Rlcj12cihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBRbD12''@;'; put 'put ''cihwZVswXSk7ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksUWwuVG9wJiYoZXRbIiFtYXJnaW5zIl0udG9wPVFsLlRvcCksUWwuTGVmdCYmKGV0WyIhbWFyZ2lucyJdLmxlZnQ9UWwuTGVmdCksUWwuUmlnaHQmJihldFsiIW1hcmdpbnMiXS5yaWdodD1RbC5S''@;'; put 'put ''aWdodCksUWwuQm90dG9tJiYoZXRbIiFtYXJnaW5zIl0uYm90dG9tPVFsLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOnlpLlZpZXdzfHwoeWkuVmlld3M9W10pLHlpLlZpZXdzWzBdfHwoeWkuVmlld3NbMF09e30pLHlpLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNl''@;'; put 'put ''ImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2UiYWN0aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2Ui''@;'; put 'put ''cGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIiOmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHBy''@;'; put 'put ''aW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNlInZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNl''@;'; put 'put ''InJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNlInBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVm''@;'; put 'put ''dHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRo''@;'; put 'put ''eXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxsb3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUi''@;'; put 'put ''OmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2VicmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZp''@;'; put 'put ''ZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXBlWzFdKXtldFsiIWZyZWV6ZSJdfHwoZXRbIiFmcmVl''@;'; put 'put ''emUiXT0iQTEiKTt2YXIgWWw9Tm8oZXRbIiFmcmVlemUiXSk7InNwbGl0aG9yaXpvbnRhbCI9PXBlWzNdP1lsLnI9K0cuc2xpY2UoZXIscGUuaW5kZXgpOllsLmM9K0cuc2xpY2UoZXIscGUuaW5kZXgpLGV0WyIhZnJlZXplIl09cWkoWWwpfWVsc2UgZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3Ro''@;'; put 'put ''O2JyZWFrO2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpldFsiIWdyaWRsaW5lcyJdPSExO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5v''@;'; put 'put ''c3VtbWFyeWNvbHVtbnNyaWdodGRldGFpbCI6ZXRbIiFvdXRsaW5lIl18fChldFsiIW91dGxpbmUiXT17fSksZXRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2gocGVbM10pe2Nhc2Ui''@;'; put 'put ''aW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxv''@;'; put 'put ''Y2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNh''@;'; put 'put ''c2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJu''@;'; put 'put ''b3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNl''@;'; put 'put ''Im1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVt''@;'; put 'put ''aW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHBlWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJl''@;'; put 'put ''YWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2VuZCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaChwZVszXSl7Y2FzZSJhdXRvZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRl''@;'; put 'put ''cmFuZCI6Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJxdWVyeXRhYmxlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0''@;'; put 'put ''eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6''@;'; put 'put ''Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5n''@;'; put 'put ''bWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztk''@;'; put 'put ''ZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6RmkucmVmPXBlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vu''@;'; put 'put ''c2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVh''@;'; put 'put ''bGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpjYXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHBlWzNdKXtj''@;'; put 'put ''YXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxl''@;'; put 'put ''IjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNh''@;'; put 'put ''c2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKHBlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNl''@;'; put 'put ''ImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6''@;'; put 'put ''Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9aWYoaHJ8fHBlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lmKCF5ZVt5ZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsi''@;'; put 'put ''fCIreWUuam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09eWVbeWUubGVuZ3RoLTFdWzBdKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0l6KGJyLHNvLE1pLEcuc2xpY2UoZXIscGUuaW5kZXgpKTooTWk9cGUsZXI9cGUuaW5kZXgr''@;'; put 'put ''cGVbMF0ubGVuZ3RoKTticmVha31pZihrLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3BlWzNdKyJ8Iit5ZS5qb2luKCJ8Iil9dmFyIEdsPXt9O3JldHVybiFrLmJvb2tTaGVldHMmJiFrLmJvb2tQcm9wcyYmKEdsLlNoZWV0cz1OZSksR2wuU2hlZXROYW1lcz1ZZSxHbC5Xb3JrYm9v''@;'; put 'put ''az15aSxHbC5TU0Y9QS5nZXRfdGFibGUoKSxHbC5Qcm9wcz1mcixHbC5DdXN0cHJvcHM9YnIsR2wuU2hlZXRzJiZHbC5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oeXUpe3ZhciBNbD1HbC5TaGVldHNbeXVdO01sWyIhbWVyZ2VzIl0mJk1sWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihsbil7InN0cmluZyI9PXR5cGVvZiBsbiYmKGxuPXcudXRpbHMuZGVjb2RlX3JhbmdlKGxuKSk7dmFyIEVuPXcudXRpbHMuZW5jb2RlX2NlbGwobG4ucyksVW49QXJyYXkuaXNBcnJheShNbCk/KE1sW2xuLnMucl18fFtdKVtsbi5zLmNdOk1sW0VuXTtVbiYmVW4ucyYmKG51bGwhPVVuLnMu''@;'; put 'put ''dG9wJiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se3RvcDpVbi5zLnRvcH0pLG51bGwhPVVuLnMuYm90dG9tJiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se2JvdHRvbTpVbi5zLmJvdHRvbX0pLG51bGwhPVVuLnMubGVmdCYmenUuc2hlZXRfc2V0X3JhbmdlX3N0eWxl''@;'; put 'put ''KE1sLGxuLHtsZWZ0OlVuLnMubGVmdH0pLG51bGwhPVVuLnMucmlnaHQmJnp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7cmlnaHQ6VW4ucy5yaWdodH0pKX0pfSksR2x9ZnVuY3Rpb24gSTgoUyxSKXtzd2l0Y2goTkkoUj1SfHx7fSksUi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNl''@;'; put 'put ''NjQiOnJldHVybiBEOChfZS5kZWNvZGUoUyksUik7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiBEOChTLFIpO2Nhc2UiYXJyYXkiOnJldHVybiBEOChDKFMpLFIpfX1mdW5jdGlvbiB5SShTKXtyZXR1cm4gUHIoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1l''@;'; put 'put ''IjpTLk5hbWUsInNzOlJlZmVyc1RvIjoiPSIrSDQoUy5SZWYse3I6MCxjOjB9KX0pfWZ1bmN0aW9uIE5uZShTLFIsayxHLFEsb2UsZ2Upe2lmKCFTfHxudWxsPT1TLnYmJm51bGw9PVMuZiYmIUcuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgcGU9e307aWYoUy5mJiYocGVbInNzOkZvcm11bGEi''@;'; put 'put ''XT0iPSIrTHIoSDQoUy5mLGdlKSkpLFMuRiYmUy5GLnNsaWNlKDAsUi5sZW5ndGgpPT1SKXt2YXIgeWU9Tm8oUy5GLnNsaWNlKFIubGVuZ3RoKzEpKTtwZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpSIisoeWUucj09Z2Uucj8iIjoiWyIrKHllLnItZ2UucikrIl0iKSsiQyIrKHllLmM9PWdlLmM/''@;'; put 'put ''IiI6IlsiKyh5ZS5jLWdlLmMpKyJdIil9aWYoUy5sJiZTLmwuVGFyZ2V0JiYocGVbInNzOkhSZWYiXT1McihTLmwuVGFyZ2V0KSxTLmwuVG9vbHRpcCYmKHBlWyJ4OkhSZWZTY3JlZW5UaXAiXT1McihTLmwuVG9vbHRpcCkpKSxrWyIhbWVyZ2VzIl0pZm9yKHZhciBQZT1rWyIhbWVyZ2VzIl0s''@;'; put 'put ''TmU9MDtOZSE9UGUubGVuZ3RoOysrTmUpUGVbTmVdLnMuYyE9Z2UuY3x8UGVbTmVdLnMuciE9Z2Uucnx8KFBlW05lXS5lLmM+UGVbTmVdLnMuYyYmKHBlWyJzczpNZXJnZUFjcm9zcyJdPVBlW05lXS5lLmMtUGVbTmVdLnMuYyksUGVbTmVdLmUucj5QZVtOZV0ucy5yJiYocGVbInNzOk1lcmdl''@;'; put 'put ''RG93biJdPVBlW05lXS5lLnItUGVbTmVdLnMucikpO3ZhciBZZT0iIixldD0iIjtzd2l0Y2goUy50KXtjYXNlInoiOmlmKCFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpZZT0iTnVtYmVyIixldD1TdHJpbmcoUy52KTticmVhaztjYXNlImIiOlllPSJCb29sZWFuIixldD1T''@;'; put 'put ''LnY/IjEiOiIwIjticmVhaztjYXNlImUiOlllPSJFcnJvciIsZXQ9TWNbUy52XTticmVhaztjYXNlImQiOlllPSJEYXRlVGltZSIsZXQ9bmV3IERhdGUoUy52KS50b0lTT1N0cmluZygpLG51bGw9PVMueiYmKFMuej1TLnp8fEEuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpZZT0iU3RyaW5n''@;'; put 'put ''IixldD15YShTLnZ8fCIiKX12YXIgY3Q9bDAoRy5jZWxsWGZzLG51bGwsUyxHKTtwZVsic3M6U3R5bGVJRCJdPSJzIisoMjErY3QpLHBlWyJzczpJbmRleCJdPWdlLmMrMTt2YXIgRXQ9bnVsbCE9Uy52P2V0OiIiLGF0PSJ6Ij09Uy50PyIiOlMuUj9mdW5jdGlvbiBFYihTKXtyZXR1cm4nPHNz''@;'; put 'put ''OkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+JytTLm1hcChmdW5jdGlvbihrKXt2YXIgRz15YShrLnYpO3JldHVybiBrLnMmJihrLnMuYm9sZCYmKEc9IjxCPiIrRysiPC9CPiIpLGsucy5pdGFsaWMmJihHPSI8ST4iK0crIjwv''@;'; put 'put ''ST4iKSxrLnMuc3RyaWtlJiYoRz0iPFM+IitHKyI8L1M+Iiksay5zLnVuZGVybGluZSYmKEc9IjxVPiIrRysiPC9VPiIpLCJzdXBlciI9PWsucy52YWxpZ24mJihHPSI8U3VwPiIrRysiPC9TdXA+IiksInN1YiI9PWsucy52YWxpZ24mJihHPSI8U3ViPiIrRysiPC9TdWI+IiksKGsucy5uYW1l''@;'; put 'put ''fHxrLnMuc3p8fGsucy5jb2xvciYmbnVsbCE9ay5zLmNvbG9yLnJnYikmJihHPVsiPEZvbnQiLGsucy5uYW1lPycgaHRtbDpGYWNlPSInK2sucy5uYW1lKyciJzoiIixrLnMuc3o/JyBodG1sOlNpemU9Iicray5zLnN6KyciJzoiIixrLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAw''@;'; put 'put ''MCIrKCJudW1iZXIiPT10eXBlb2Ygay5zLmNvbG9yLnJnYj9rLnMuY29sb3IucmdiLnRvU3RyaW5nKDE2KTprLnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsRywiPC9Gb250PiJdLmpvaW4oIiIpKSksR30pLmpvaW4oIiIpKyI8L0RhdGE+In0oUy5SKTonPERhdGEgc3M6VHlw''@;'; put 'put ''ZT0iJytZZSsnIj4nK0V0KyI8L0RhdGE+IjtyZXR1cm4oUy5jfHxbXSkubGVuZ3RoPjAmJihhdCs9ZnVuY3Rpb24gd0koUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKFIpe3ZhciBHPVByKCJzczpEYXRhIixGYShSLnR8fCIiKSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1s''@;'; put 'put ''NDAifSk7cmV0dXJuIFByKCJDb21tZW50IixHLHsic3M6QXV0aG9yIjpSLmF9KX0pLmpvaW4oIiIpfShTLmMpKSxQcigiQ2VsbCIsYXQscGUpfWZ1bmN0aW9uIFZuZShTLFIpe3ZhciBrPSc8Um93IHNzOkluZGV4PSInKyhTKzEpKyciJztyZXR1cm4gUiYmKFIuaHB4JiYhUi5ocHQmJihSLmhw''@;'; put 'put ''dD1VMyhSLmhweCkpLFIuaHB0JiYoays9JyBzczpBdXRvRml0SGVpZ2h0PSIwIiBzczpIZWlnaHQ9IicrUi5ocHQrJyInKSxSLmhpZGRlbiYmKGsrPScgc3M6SGlkZGVuPSIxIicpKSxrKyI+In1mdW5jdGlvbiBDSShTLFIsayl7dmFyIEc9W10sb2U9ay5TaGVldHNbay5TaGVldE5hbWVzW1Nd''@;'; put 'put ''XSxnZT1vZT9mdW5jdGlvbiBPeihTLFIsayxHKXtpZighU3x8ISgoR3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBRPUcuV29ya2Jvb2suTmFtZXMsb2U9W10sZ2U9MDtnZTxRLmxlbmd0aDsrK2dlKXt2YXIgcGU9UVtnZV07cGUuU2hlZXQ9PWsmJihwZS5OYW1l''@;'; put 'put ''Lm1hdGNoKC9eX3hsZm5cLi8pfHxvZS5wdXNoKHlJKHBlKSkpfXJldHVybiBvZS5qb2luKCIiKX0ob2UsMCxTLGspOiIiO3JldHVybiBnZS5sZW5ndGg+MCYmRy5wdXNoKCI8TmFtZXM+IitnZSsiPC9OYW1lcz4iKSxnZT1vZT9mdW5jdGlvbiBQeihTLFIsayxHKXtpZighU1siIXJlZiJdKXJl''@;'; put 'put ''dHVybiIiO3ZhciBRPW9vKFNbIiFyZWYiXSksb2U9U1siIW1lcmdlcyJdfHxbXSxnZT0wLHBlPVtdO1NbIiFjb2xzIl0mJlNbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihidCxqdCl7UTAoYnQpO3ZhciBrdD0hIWJ0LndpZHRoLE90PXU4KGp0LGJ0KSxLdD17InNzOkluZGV4IjpqdCsxfTtr''@;'; put 'put ''dCYmKEt0WyJzczpXaWR0aCJdPU01KE90LndpZHRoKSksYnQuaGlkZGVuJiYoS3RbInNzOkhpZGRlbiJdPSIxIikscGUucHVzaChQcigiQ29sdW1uIixudWxsLEt0KSl9KTtmb3IodmFyIHllPUFycmF5LmlzQXJyYXkoUyksUGU9US5zLnI7UGU8PVEuZS5yOysrUGUpe2Zvcih2YXIgTmU9W1Zu''@;'; put 'put ''ZShQZSwoU1siIXJvd3MiXXx8W10pW1BlXSldLFllPVEucy5jO1llPD1RLmUuYzsrK1llKXt2YXIgZXQ9ITE7Zm9yKGdlPTA7Z2UhPW9lLmxlbmd0aDsrK2dlKWlmKCEob2VbZ2VdLnMuYz5ZZXx8b2VbZ2VdLnMucj5QZXx8b2VbZ2VdLmUuYzxZZXx8b2VbZ2VdLmUucjxQZSkpeyhvZVtnZV0u''@;'; put 'put ''cy5jIT1ZZXx8b2VbZ2VdLnMuciE9UGUpJiYoZXQ9ITApO2JyZWFrfWlmKCFldCl7dmFyIGN0PXtyOlBlLGM6WWV9LEV0PXFpKGN0KTtOZS5wdXNoKE5uZSh5ZT8oU1tQZV18fFtdKVtZZV06U1tFdF0sRXQsUyxSLDAsMCxjdCkpfX1OZS5wdXNoKCI8L1Jvdz4iKSxOZS5sZW5ndGg+MiYmcGUu''@;'; put 'put ''cHVzaChOZS5qb2luKCIiKSl9cmV0dXJuIHBlLmpvaW4oIiIpfShvZSxSKToiIixnZS5sZW5ndGg+MCYmRy5wdXNoKCI8VGFibGU+IitnZSsiPC9UYWJsZT4iKSxHLnB1c2goZnVuY3Rpb24gWVMoUyxSLGssRyl7aWYoIVMpcmV0dXJuIiI7dmFyIFE9W107aWYoU1siIW1hcmdpbnMiXSYmKFEu''@;'; put 'put ''cHVzaCgiPFBhZ2VTZXR1cD4iKSxTWyIhbWFyZ2lucyJdLmhlYWRlciYmUS5wdXNoKFByKCJIZWFkZXIiLG51bGwseyJ4Ok1hcmdpbiI6U1siIW1hcmdpbnMiXS5oZWFkZXJ9KSksU1siIW1hcmdpbnMiXS5mb290ZXImJlEucHVzaChQcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFt''@;'; put 'put ''YXJnaW5zIl0uZm9vdGVyfSkpLFEucHVzaChQcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6U1siIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0IjpTWyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0IjpTWyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpU''@;'; put 'put ''b3AiOlNbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSksUS5wdXNoKCI8L1BhZ2VTZXR1cD4iKSksRyYmRy5Xb3JrYm9vayYmRy5Xb3JrYm9vay5TaGVldHMmJkcuV29ya2Jvb2suU2hlZXRzW2tdKWlmKEcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbilRLnB1c2goUHIoIlZpc2libGUiLDE9''@;'; put 'put ''PUcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbj8iU2hlZXRIaWRkZW4iOiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3IodmFyIG9lPTA7b2U8ayYmKCFHLldvcmtib29rLlNoZWV0c1tvZV18fEcuV29ya2Jvb2suU2hlZXRzW29lXS5IaWRkZW4pOysrb2UpO29lPT1rJiZRLnB1c2go''@;'; put 'put ''IjxTZWxlY3RlZC8+Iil9aWYoKCgoKEd8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJlEucHVzaCgiPERpc3BsYXlSaWdodFRvTGVmdC8+IiksV3QoU1siIWdyaWRsaW5lcyJdKSYmUS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSxTWyIhZnJlZXpl''@;'; put 'put ''Il0pe1EucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxRLnB1c2goIjxGcm96ZW5Ob1NwbGl0Lz4iKTt2YXIgZ2U9Tm8oU1siIWZyZWV6ZSJdKTtnZS5yPjAmJihRLnB1c2goSGEoIlNwbGl0SG9yaXpvbnRhbCIsIiIrZ2UucikpLFEucHVzaChIYSgiVG9wUm93Qm90dG9tUGFuZSIsIiIrZ2Uucikp''@;'; put 'put ''KSxnZS5jPjAmJihRLnB1c2goSGEoIlNwbGl0VmVydGljYWwiLCIiK2dlLmMpKSxRLnB1c2goSGEoIkxlZnRDb2x1bW5SaWdodFBhbmUiLCIiK2dlLmMpKSl9cmV0dXJuIFNbIiFwcm90ZWN0Il0mJihRLnB1c2goSGEoIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5v''@;'; put 'put ''YmplY3RzJiZRLnB1c2goSGEoIlByb3RlY3RPYmplY3RzIiwiVHJ1ZSIpKSxTWyIhcHJvdGVjdCJdLnNjZW5hcmlvcyYmUS5wdXNoKEhhKCJQcm90ZWN0U2NlbmFyaW9zIiwiVHJ1ZSIpKSxudWxsPT1TWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHxTWyIhcHJvdGVjdCJdLnNlbGVj''@;'; put 'put ''dExvY2tlZENlbGxzP251bGwhPVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmIVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmUS5wdXNoKEhhKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOlEucHVzaChIYSgiRW5hYmxlU2VsZWN0aW9uIiwi''@;'; put 'put ''Tm9TZWxlY3Rpb24iKSksW1siZm9ybWF0Q2VsbHMiLCJBbGxvd0Zvcm1hdENlbGxzIl0sWyJmb3JtYXRDb2x1bW5zIiwiQWxsb3dTaXplQ29scyJdLFsiZm9ybWF0Um93cyIsIkFsbG93U2l6ZVJvd3MiXSxbImluc2VydENvbHVtbnMiLCJBbGxvd0luc2VydENvbHMiXSxbImluc2VydFJvd3Mi''@;'; put 'put ''LCJBbGxvd0luc2VydFJvd3MiXSxbImluc2VydEh5cGVybGlua3MiLCJBbGxvd0luc2VydEh5cGVybGlua3MiXSxbImRlbGV0ZUNvbHVtbnMiLCJBbGxvd0RlbGV0ZUNvbHMiXSxbImRlbGV0ZVJvd3MiLCJBbGxvd0RlbGV0ZVJvd3MiXSxbInNvcnQiLCJBbGxvd1NvcnQiXSxbImF1dG9GaWx0''@;'; put 'put ''ZXIiLCJBbGxvd0ZpbHRlciJdLFsicGl2b3RUYWJsZXMiLCJBbGxvd1VzZVBpdm90VGFibGVzIl1dLmZvckVhY2goZnVuY3Rpb24ocGUpe1NbIiFwcm90ZWN0Il1bcGVbMF1dJiZRLnB1c2goIjwiK3BlWzFdKyIvPiIpfSkpLDA9PVEubGVuZ3RoPyIiOlByKCJXb3Jrc2hlZXRPcHRpb25zIixR''@;'; put 'put ''LmpvaW4oIiIpLHt4bWxuczp5bC54fSl9KG9lLDAsUyxrKSksRy5qb2luKCIiKX1mdW5jdGlvbiBTSShTLFIpe1J8fChSPXt9KSxTLlNTRnx8KFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxSLnJldnNzZj1rZShTLlNTRiksUi5yZXZzc2Zb''@;'; put 'put ''Uy5TU0ZbNjU1MzVdXT0wLFIuc3NmPVMuU1NGLFMuU3R5bGVzPXtGb250czpSLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlIuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9''@;'; put 'put ''LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlIuQm9yZGVycz1be31dfSxSLmNlbGxYZnM9W10sUi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sbDAoUi5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgaz1bXTtrLnB1c2goZnVuY3Rpb24g''@;'; put 'put ''bUkoUyxSKXt2YXIgaz1bXTtyZXR1cm4gUy5Qcm9wcyYmay5wdXNoKGZ1bmN0aW9uIFp3KFMsUil7dmFyIGs9W107cmV0dXJuIE9lKFA2KS5tYXAoZnVuY3Rpb24oRyl7Zm9yKHZhciBRPTA7UTxSMC5sZW5ndGg7KytRKWlmKFIwW1FdWzFdPT1HKXJldHVybiBSMFtRXTtmb3IoUT0wO1E8cmgu''@;'; put 'put ''bGVuZ3RoOysrUSlpZihyaFtRXVsxXT09RylyZXR1cm4gcmhbUV07dGhyb3cgR30pLmZvckVhY2goZnVuY3Rpb24oRyl7aWYobnVsbCE9U1tHWzFdXSl7dmFyIFE9UiYmUi5Qcm9wcyYmbnVsbCE9Ui5Qcm9wc1tHWzFdXT9SLlByb3BzW0dbMV1dOlNbR1sxXV07ImRhdGUiPT09R1syXSYmKFE9''@;'; put 'put ''bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCJaIikpLCJudW1iZXIiPT10eXBlb2YgUT9RPVN0cmluZyhRKTohMD09PVF8fCExPT09UT9RPVE/IjEiOiIwIjpRIGluc3RhbmNlb2YgRGF0ZSYmKFE9bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9c''@;'; put 'put ''LlxkKlovLCIiKSksay5wdXNoKEhhKFA2W0dbMV1dfHxHWzFdLFEpKX19KSxQcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixrLmpvaW4oIiIpLHt4bWxuczp5bC5vfSl9KFMuUHJvcHMsUikpLFMuQ3VzdHByb3BzJiZrLnB1c2goZnVuY3Rpb24gSDYoUyxSKXt2YXIgaz1bIldvcmtzaGVldHMiLCJT''@;'; put 'put ''aGVldE5hbWVzIl0sRz0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixRPVtdO3JldHVybiBTJiZPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxvZSkpe2Zvcih2YXIgZ2U9MDtnZTxSMC5sZW5ndGg7KytnZSlpZihv''@;'; put 'put ''ZT09UjBbZ2VdWzFdKXJldHVybjtmb3IoZ2U9MDtnZTxyaC5sZW5ndGg7KytnZSlpZihvZT09cmhbZ2VdWzFdKXJldHVybjtmb3IoZ2U9MDtnZTxrLmxlbmd0aDsrK2dlKWlmKG9lPT1rW2dlXSlyZXR1cm47dmFyIHBlPVNbb2VdLHllPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgcGU/KHll''@;'; put 'put ''PSJmbG9hdCIscGU9U3RyaW5nKHBlKSk6ITA9PT1wZXx8ITE9PT1wZT8oeWU9ImJvb2xlYW4iLHBlPXBlPyIxIjoiMCIpOnBlPVN0cmluZyhwZSksUS5wdXNoKFByKHBhKG9lKSxwZSx7ImR0OmR0Ijp5ZX0pKX19KSxSJiZPZShSKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihPYmplY3QucHJv''@;'; put 'put ''dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixvZSkmJighU3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLG9lKSkpe3ZhciBnZT1SW29lXSxwZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIGdlPyhwZT0iZmxvYXQiLGdlPVN0cmluZyhnZSkpOiEwPT09Z2V8''@;'; put 'put ''fCExPT09Z2U/KHBlPSJib29sZWFuIixnZT1nZT8iMSI6IjAiKTpnZSBpbnN0YW5jZW9mIERhdGU/KHBlPSJkYXRlVGltZS50eiIsZ2U9Z2UudG9JU09TdHJpbmcoKSk6Z2U9U3RyaW5nKGdlKSxRLnB1c2goUHIocGEob2UpLGdlLHsiZHQ6ZHQiOnBlfSkpfX0pLCI8IitHKycgeG1sbnM9Iicr''@;'; put 'put ''eWwubysnIj4nK1Euam9pbigiIikrIjwvIitHKyI+In0oUy5Qcm9wcyxTLkN1c3Rwcm9wcykpLGsuam9pbigiIil9KFMsUikpLGsucHVzaCgiIiksay5wdXNoKCIiKSxrLnB1c2goIiIpO2Zvcih2YXIgRz0wO0c8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK0cpay5wdXNoKFByKCJXb3Jrc2hlZXQi''@;'; put 'put ''LENJKEcsUixTKSx7InNzOk5hbWUiOkxyKFMuU2hlZXROYW1lc1tHXSl9KSk7cmV0dXJuIGtbMl09ZnVuY3Rpb24gYkkoUyxSKXt2YXIgRz1bWyc8U3R5bGUgc3M6SUQ9IkRlZmF1bHQiIHNzOk5hbWU9Ik5vcm1hbCI+JywnPEFsaWdubWVudCBzczpWZXJ0aWNhbD0iQm90dG9tIi8+JywiPEJv''@;'; put 'put ''cmRlcnMvPiIsJzxGb250IHNzOkZvbnROYW1lPSJDYWxpYnJpIiB4OkZhbWlseT0iU3dpc3MiIHNzOlNpemU9IjEyIiBzczpDb2xvcj0iIzAwMDAwMCIvPicsIjxJbnRlcmlvci8+IiwiPE51bWJlckZvcm1hdC8+IiwiPFByb3RlY3Rpb24vPiIsIjwvU3R5bGU+Il0uam9pbigiIildO3JldHVy''@;'; put 'put ''biBSLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihRLG9lKXt2YXIgZ2U9W107aWYoUS5hbGlnbm1lbnQpe3ZhciBwZT17fTtRLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKHBlWyJzczpTaHJpbmtUb0ZpdCJdPSIxIiksUS5hbGlnbm1lbnQud3JhcFRleHQmJihwZVsic3M6V3JhcFRleHQiXT0i''@;'; put 'put ''MSIpLFEuYWxpZ25tZW50LnZlcnRpY2FsJiYocGVbInNzOlZlcnRpY2FsIl09QXQoUS5hbGlnbm1lbnQudmVydGljYWwpKSxRLmFsaWdubWVudC5ob3Jpem9udGFsJiYocGVbInNzOkhvcml6b250YWwiXT1BdChRLmFsaWdubWVudC5ob3Jpem9udGFsKSksUS5hbGlnbm1lbnQuaW5kZW50JiYo''@;'; put 'put ''cGVbInNzOkluZGVudCJdPVEuYWxpZ25tZW50LmluZGVudCksUS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uJiYocGVbInNzOlJvdGF0ZSJdPVEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiksZ2UucHVzaChQcigiQWxpZ25tZW50IixudWxsLHBlKSl9ZTppZihudWxsIT1RLmZvbnRJZCl7dmFyIHll''@;'; put 'put ''PVIuRm9udHNbUS5mb250SWRdO2lmKCF5ZSlicmVhayBlO3ZhciBQZT17InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LE5lPSExO3llLmJvbGQmJihOZT0hMCxQZVsic3M6Qm9sZCJdPSIxIikseWUuaXRhbGljJiYoTmU9ITAsUGVbInNzOkl0YWxpYyJdPSIxIikseWUu''@;'; put 'put ''c3RyaWtlJiYoTmU9ITAsUGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPXllLnVuZGVybGluZSYmKE5lPSEwLFBlWyJzczpVbmRlcmxpbmUiXT14Ylt5ZS51bmRlcmxpbmVdfHwoeWUudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPXllLnN6JiYoTmU9ITAsUGVbInNz''@;'; put 'put ''OlNpemUiXT15ZS5zeiksbnVsbCE9eWUubmFtZSYmKE5lPSEwLFBlWyJzczpGb250TmFtZSJdPXllLm5hbWUpLHllLmNvbG9yJiZudWxsIT15ZS5jb2xvci5yZ2ImJihOZT0hMCxQZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgeWUuY29sb3IucmdiPyIwMDAwMDAiK3llLmNv''@;'; put 'put ''bG9yLnJnYi50b1N0cmluZygxNik6eWUuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKHllLnZhbGlnbik+LTEmJihQZVsic3M6VmVydGljYWxBbGlnbiJdPUF0KHllLnZhbGlnbikrInNjcmlwdCIpLE5lJiZnZS5wdXNoKFByKCJGb250IixudWxsLFBlKSl9''@;'; put 'put ''ZTppZihRLmZpbGxJZD4wKXt2YXIgWWU9Ui5GaWxsc1tRLmZpbGxJZF07aWYoIVllfHwhWWUuZmdDb2xvcnx8bnVsbD09WWUuZmdDb2xvci5yZ2IpYnJlYWsgZTtnZS5wdXNoKFByKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4iOnZDW1llLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6''@;'; put 'put ''Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBZZS5mZ0NvbG9yLnJnYj8iMDAiK1llLmZnQ29sb3IucmdiLnRvU3RyaW5nKDE2KTpZZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfWdlLnB1c2goUHIoIk51bWJlckZvcm1hdCIsbnVsbCx7InNzOkZvcm1hdCI6THIoQS5fdGFibGVbUS5u''@;'; put 'put ''dW1GbXRJZF0pfSkpO3ZhciBldD17InNzOklEIjoicyIrKDIxK29lKX07US5zdHlsZSYmKGV0WyJzczpOYW1lIl09US5zdHlsZSksRy5wdXNoKFByKCJTdHlsZSIsZ2Uuam9pbigiIiksZXQpKX0pLFByKCJTdHlsZXMiLEcuam9pbigiIikpfSgwLFIpLGtbM109ZnVuY3Rpb24gX0koUyl7aWYo''@;'; put 'put ''ISgoU3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBSPVMuV29ya2Jvb2suTmFtZXMsaz1bXSxHPTA7RzxSLmxlbmd0aDsrK0cpe3ZhciBRPVJbR107bnVsbD09US5TaGVldCYmKFEuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8ay5wdXNoKHlJKFEpKSl9cmV0dXJu''@;'; put 'put ''IFByKCJOYW1lcyIsay5qb2luKCIiKSl9KFMpLElpK1ByKCJXb3JrYm9vayIsay5qb2luKCIiKSx7eG1sbnM6eWwuc3MsInhtbG5zOm8iOnlsLm8sInhtbG5zOngiOnlsLngsInhtbG5zOnNzIjp5bC5zcywieG1sbnM6ZHQiOnlsLmR0LCJ4bWxuczpodG1sIjp5bC5odG1sfSl9ZnVuY3Rpb24g''@;'; put 'put ''TUkoUyxSLGssRyl7dmFyIFE9ayxvZT1bXSxnZT1SLnNsaWNlKFIubCxSLmwrUSk7aWYoRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmZ2UubGVuZ3RoPjApc3dpdGNoKFMubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJS''@;'; put 'put ''REluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JFeGNsIjpjYXNlIkVPRiI6Ry5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6Z2UubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSxnZT1CdWZmZXIuY29uY2F0''@;'; put 'put ''KFtCdWZmZXIuZnJvbShnZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShHLmVuYy5pbnNpdHUoZ2Uuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6Z2U9Ry5lbmMuaW5zaXR1KGdlKX1BcnJheS5pc0FycmF5KFIpJiYhQXJyYXkuaXNBcnJheShnZSkmJihnZT1BcnJheS5mcm9tKGdlKSksb2Uu''@;'; put 'put ''cHVzaChnZSksUi5sKz1RO2Zvcih2YXIgcGU9S1NbZW8oUixSLmwpXSx5ZT0wO251bGwhPXBlJiYiQ29udGludWUiPT09cGUubi5zbGljZSgwLDgpOylRPWVvKFIsUi5sKzIpLHllPVIubCs0LEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjR9KSwic2tp''@;'; put 'put ''cCIpLCJDb250aW51ZUZydCI9PXBlLm4/eWUrPTQ6IkNvbnRpbnVlRnJ0Ij09cGUubi5zbGljZSgwLDExKSYmKHllKz0xMixHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo4fSksInNraXAiKSksZ2U9Ui5zbGljZSh5ZSxSLmwrNCtRKSxHJiZHLmVuYyYm''@;'; put 'put ''Ry5lbmMuaW5zaXR1JiZnZS5sZW5ndGg+MCYmKGdlPUcuZW5jLmluc2l0dShnZSkpLG9lLnB1c2goZ2UpLFIubCs9NCtRLHBlPUtTW2VvKFIsUi5sKV07dmFyIFBlPWoob2UpO21uKFBlLDApO3ZhciBOZT0wO1BlLmxlbnM9W107Zm9yKHZhciBZZT0wO1llPG9lLmxlbmd0aDsrK1llKVBlLmxl''@;'; put 'put ''bnMucHVzaChOZSksTmUrPW9lW1llXS5sZW5ndGg7aWYoUGUubGVuZ3RoPGspdGhyb3ciWExTIFJlY29yZCAiKyhTJiZTLm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK1BlLmxlbmd0aCsiIDwgIitrO3JldHVybiBTLmYoUGUsUGUubGVuZ3RoLEcpfWZ1bmN0aW9uIGRoKFMsUixrKXtpZigieiIh''@;'; put 'put ''PT1TLnQmJlMuWEYpe3ZhciBHPTA7dHJ5e0c9Uy56fHxTLlhGLm51bUZtdElkfHwwLFIuY2VsbE5GJiYoUy56PUEuX3RhYmxlW0ddKX1jYXRjaChvZSl7aWYoUi5XVEYpdGhyb3cgb2V9aWYoIVJ8fCExIT09Ui5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fE1jW1Mudl06MD09PUd8''@;'; put 'put ''fCJHZW5lcmFsIj09Rz8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOkEuZm9ybWF0KEcsUy52LHtkYXRlMTkwNDohIWssZGF0ZU5GOlImJlIuZGF0ZU5GfSl9Y2F0Y2gob2Upe2lmKFIuV1RGKXRo''@;'; put 'put ''cm93IG9lfWlmKFIuY2VsbERhdGVzJiZHJiYibiI9PVMudCYmQS5pc19kYXRlKEEuX3RhYmxlW0ddfHxTdHJpbmcoRykpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShRLnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX19ZnVuY3Rp''@;'; put 'put ''b24gUjgoUyxSLGspe3JldHVybnt2OlMsaXhmZTpSLHQ6a319dmFyIHhJPWZ1bmN0aW9uKFMsUixrKXtSWyIhb2JqZWN0cyJdPVN9LFRiPXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVk''@;'; put 'put ''NWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUifTtmdW5jdGlvbiAkUyhTLFIpe3ZhciBrLEcsUSxvZTtpZihSfHwoUj17fSksTkkoUiksVygpLFIuY29kZXBhZ2UmJkwoUi5jb2RlcGFnZSksUy5GdWxsUGF0aHMpe2lmKHZlLmZpbmQoUywiL2VuY3J5cHRpb24iKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7az12ZS5maW5kKFMsIiFDb21wT2JqIiksRz12ZS5maW5kKFMsIi9Xb3JrYm9vayIpfHx2ZS5maW5kKFMsIi9Cb29rIil9ZWxzZXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6Uz1iKF9lLmRlY29kZShTKSk7YnJlYWs7Y2FzZSJi''@;'; put 'put ''aW5hcnkiOlM9YihTKTticmVhaztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShTKXx8KFM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUykpfW1uKFMsMCksRz17Y29udGVudDpTfX1pZihrJiZmdW5jdGlvbiBHUyhTKXt2YXIgUj17fSxrPVMuY29udGVu''@;'; put 'put ''dDtpZihrLmw9MjgsUi5BbnNpVXNlclR5cGU9ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxSLkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gXzAoUyl7cmV0dXJuIFB3KFMsMSl9KGspLGsubGVuZ3RoLWsubDw9NClyZXR1cm4gUjt2YXIgRz1rLnJlYWRfc2hpZnQoNCk7aWYoMD09''@;'; put 'put ''R3x8Rz40MHx8KGsubC09NCxSLlJlc2VydmVkMT1rLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLGsubGVuZ3RoLWsubDw9NCl8fDE5MDc1MDU2NTIhPT0oRz1rLnJlYWRfc2hpZnQoNCkpfHwoUi5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIEE2KFMpe3JldHVybiBQdyhTLDIp''@;'; put 'put ''fShrKSwwPT0oRz1rLnJlYWRfc2hpZnQoNCkpfHxHPjQwKSlyZXR1cm4gUjtrLmwtPTQsUi5SZXNlcnZlZDI9ay5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShrKSxSLmJvb2tQcm9wcyYmIVIuYm9va1NoZWV0cylRPXt9O2Vsc2V7dmFyIGdlPVRlPyJidWZmZXIiOiJhcnJheSI7aWYoRyYmRy5j''@;'; put 'put ''b250ZW50KVE9ZnVuY3Rpb24gRnooUyxSKXt2YXIgaz17b3B0czp7fX0sRz17fTtudWxsIT1sZSYmbnVsbD09Ui5kZW5zZSYmKFIuZGVuc2U9bGUpO3ZhciBZZSxjdCxhdCxidCxPdCxLdCxRPVIuZGVuc2U/W106e30sb2U9e30sZ2U9e30scGU9bnVsbCx5ZT1bXSxQZT0iIixOZT17fSxldD0i''@;'; put 'put ''IixqdD17fSxrdD1bXSxUbj1bXSxycj1bXSxTbj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfSxWaWV3czpbe31dfSxscj17fSxYbj17Rm9udHM6W119LEJuPWZ1bmN0aW9uKERpKXtyZXR1cm4gRGk8OD9yMFtEaV06RGk8NjQmJnJyW0RpLThdfHxyMFtEaV19LGZyPWZ1bmN0aW9u''@;'; put 'put ''KERpLGNzKXt2YXIgeGwsWW89RGkuWEYuZGF0YTtZbyYmKFlvLnBhdHRlcm5UeXBlfHxudWxsIT1Zby5pY3ZGb3JlKSYmY3MmJmNzLmNlbGxTdHlsZXMmJihEaS5zPXt9LERpLnMucGF0dGVyblR5cGU9WW8ucGF0dGVyblR5cGUsRGkuWEYuZm9udCYmUHQoRGkucyxEaS5YRi5mb250KSxZby5m''@;'; put 'put ''V3JhcCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkud3JhcFRleHQ9ITApLFlvLmZTaHJpbmtUb0ZpdCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuc2hyaW5rVG9GaXQ9ITApLFlvLmhhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMu''@;'; put 'put ''YWxpZ25tZW50PXt9KSkuaG9yaXpvbnRhbD1Zby5oYWxpZ24pLFlvLnZhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkudmVydGljYWw9WW8udmFsaWduKSxZby5jSW5kZW50JiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS5pbmRlbnQ9''@;'; put 'put ''WW8uY0luZGVudCksNjQhPVlvLmljdkZvcmUmJjY1IT1Zby5pY3ZCYWNrJiYoKHhsPWhkKEJuKFlvLmljdkZvcmUpKSkmJihEaS5zLmZnQ29sb3I9e3JnYjp4bH0pLCh4bD1oZChCbihZby5pY3ZCYWNrKSkpJiYoRGkucy5iZ0NvbG9yPXtyZ2I6eGx9KSksWyJMZWZ0IiwiUmlnaHQiLCJUb3Ai''@;'; put 'put ''LCJCb3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKF91KXtZb1siZGciK191XSYmKERpLnNbX3UudG9Mb3dlckNhc2UoKV09e3N0eWxlOnBkW1lvWyJkZyIrX3VdXSxjb2xvcjp7cmdiOmhkKEJuKFlvWyJpY3YiK191XSkpfX0pfSkpfSxicj1mdW5jdGlvbihEaSxjcyxZbyl7aWYoIShaaT4xfHxZ''@;'; put 'put ''by5zaGVldFJvd3MmJkRpLnI+PVlvLnNoZWV0Um93cykpe2lmKFlvLmNlbGxTdHlsZXMmJmNzLlhGJiZjcy5YRi5kYXRhJiZmcihjcyxZbyksZGVsZXRlIGNzLml4ZmUsZGVsZXRlIGNzLlhGLFllPURpLGV0PXFpKERpKSwoIWdlfHwhZ2Uuc3x8IWdlLmUpJiYoZ2U9e3M6e3I6MCxjOjB9LGU6''@;'; put 'put ''e3I6MCxjOjB9fSksRGkucjxnZS5zLnImJihnZS5zLnI9RGkuciksRGkuYzxnZS5zLmMmJihnZS5zLmM9RGkuYyksRGkucisxPmdlLmUuciYmKGdlLmUucj1EaS5yKzEpLERpLmMrMT5nZS5lLmMmJihnZS5lLmM9RGkuYysxKSxZby5jZWxsRm9ybXVsYSYmY3MuZilmb3IodmFyIHhsPTA7eGw8''@;'; put 'put ''a3QubGVuZ3RoOysreGwpaWYoIShrdFt4bF1bMF0ucy5jPkRpLmN8fGt0W3hsXVswXS5zLnI+RGkucnx8a3RbeGxdWzBdLmUuYzxEaS5jfHxrdFt4bF1bMF0uZS5yPERpLnIpKXtjcy5GPXJhKGt0W3hsXVswXSksKGt0W3hsXVswXS5zLmMhPURpLmN8fGt0W3hsXVswXS5zLnIhPURpLnIpJiZk''@;'; put 'put ''ZWxldGUgY3MuZixjcy5mJiYoY3MuZj0iIitzMChrdFt4bF1bMV0sZ2UsRGksRm4sZXIpKTticmVha31Zby5kZW5zZT8oUVtEaS5yXXx8KFFbRGkucl09W10pLFFbRGkucl1bRGkuY109Y3MpOlFbZXRdPWNzfX0sZXI9e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFyZWRmOmp0LGFycmF5''@;'; put 'put ''ZjprdCxycnRhYmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFnZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISFSJiYhIVIuY2VsbFN0eWxlcyxXVEY6ISFSJiYhIVIud3RmfTtlci5wYXNzd29yZD1SLnBhc3N3b3JkP1IucGFzc3dvcmQ6IlZlbHZldFN3ZWF0c2hvcCI7dmFyIEZp''@;'; put 'put ''LE1pPW51bGwsbmE9W10sY2E9W10sTGk9W10sa3I9W10sX3I9ITEsRm49W107Rm4uU2hlZXROYW1lcz1lci5zbmFtZXMsRm4uc2hhcmVkZj1lci5zaGFyZWRmLEZuLmFycmF5Zj1lci5hcnJheWYsRm4ubmFtZXM9W10sRm4uWFRJPVtdO3ZhciBpYSxqcj0iIixaaT0wLHlpPTAsX2E9W10sc289''@;'; put 'put ''W107ZXIuY29kZXBhZ2U9MTIwMCxVKDEyMDApO2Zvcih2YXIgTG89ITE7Uy5sPFMubGVuZ3RoLTE7KXt2YXIgT2E9Uy5sLGhvPVMucmVhZF9zaGlmdCgyKTtpZihlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSwiaGVhZGVyLTAiKSwwPT09aG8mJiJF''@;'; put 'put ''T0YiPT09anIpYnJlYWs7dmFyIEphPVMubD09PVMubGVuZ3RoPzA6Uy5yZWFkX3NoaWZ0KDIpO2VyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2UoWzAsMF0pLCJsZW5ndGgtMCIpO3ZhciBCaT1LU1tob107aWYoQmkmJkJpLmYpe2lmKFIuYm9va1NoZWV0cyYmIkJv''@;'; put 'put ''dW5kU2hlZXQ4Ij09PWpyJiYiQm91bmRTaGVldDgiIT09QmkubilicmVhaztpZihqcj1CaS5uLDI9PT1CaS5yfHwxMj09Qmkucil7dmFyIElzPVMucmVhZF9zaGlmdCgyKTtpZihKYS09MixlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSksIWVyLmVu''@;'; put 'put ''YyYmSXMhPT1obyYmKCgyNTUmSXMpPDw4fElzPj44KSE9PWhvKXRocm93IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIrSXMrIiE9Iitobyk7MTI9PUJpLnImJihTLmwrPTEwLEphLT0xMCxlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDAsMCwwLDAsMCww''@;'; put 'put ''LDAsMCwwXSkpKX12YXIgUG49TUkoQmksUyxKYSxlciksV289QmkubjtpZigwPT1aaSYmIkJPRiIhPVdvKWNvbnRpbnVlO3N3aXRjaChXbyl7Y2FzZSJEYXRlMTkwNCI6ay5vcHRzLkRhdGUxOTA0PVNuLldCUHJvcHMuZGF0ZTE5MDQ9UG47YnJlYWs7Y2FzZSJXcml0ZVByb3RlY3QiOmsub3B0''@;'; put 'put ''cy5Xcml0ZVByb3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYoZXIuZW5jfHwoUy5sPTAsWmk9MCksZXIuZW5jPVBuLCFSLnBhc3N3b3JkJiZudWxsPT1Qbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7aWYobnVsbD09UG4udmFsaWQp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFQbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIpO2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOmVyLmxhc3R1c2VyPVBuO2JyZWFrO2Nhc2UiRmlsZVNoYXJpbmci''@;'; put 'put ''OmNhc2UiVGVtcGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VMRnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tFeHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2UiSW5kZXgiOmNhc2UiUHJvdDRSZXYi''@;'; put 'put ''OmNhc2UiUHJvdDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2YXIgaHI9TnVtYmVyKFBuKTtzd2l0Y2goaHIpe2Nhc2UgMjEwMTA6aHI9MTIwMDticmVhaztjYXNlIDMyNzY4OmhyPTFlNDticmVhaztjYXNlIDMyNzY5OmhyPTEyNTJ9VShlci5jb2RlcGFnZT1ociksTG89ITA7YnJl''@;'; put 'put ''YWs7Y2FzZSJSUlRhYklkIjplci5ycnRhYmlkPVBuO2JyZWFrO2Nhc2UiV2luUHJvdGVjdCI6ZXIud2lubG9ja2VkPVBuO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxjQ291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNlIkNhbGNNb2RlIjpjYXNlIkNhbGNQ''@;'; put 'put ''cmVjaXNpb24iOmNhc2UiQ2FsY1NhdmVSZWNhbGMiOmsub3B0c1tXb109UG47YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6ZXIuQ2FsY1JlZk1vZGU9UG47YnJlYWs7Y2FzZSJGb3JjZUZ1bGxDYWxjdWxhdGlvbiI6ay5vcHRzLkZ1bGxDYWxjPVBuO2JyZWFrO2Nhc2UiV3NCb29sIjpQbi5mRGlh''@;'; put 'put ''bG9nJiYoUVsiIXR5cGUiXT0iZGlhbG9nIiksUG4uZkJlbG93fHwoKFFbIiFvdXRsaW5lIl18fChRWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLFBuLmZSaWdodHx8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2JyZWFrO2Nhc2UiWEYiOlBuLmZvbnQ9''@;'; put 'put ''WG4uRm9udHNbUG4uaWZudDw0P1BuLmlmbnQ6UG4uaWZudC0xXSxUbi5wdXNoKFBuKTticmVhaztjYXNlIlN1cEJvb2siOkZuLnB1c2goW1BuXSksRm5bRm4ubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIkV4dGVybk5hbWUiOkZuW0ZuLmxlbmd0aC0xXS5wdXNoKFBuKTticmVhaztjYXNl''@;'; put 'put ''IkxibCI6aWE9e05hbWU6UG4uTmFtZSxSZWY6czAoUG4ucmdjZSxnZSxudWxsLEZuLGVyKX0sUG4uaXRhYj4wJiYoaWEuU2hlZXQ9UG4uaXRhYi0xKSxGbi5uYW1lcy5wdXNoKGlhKSxGblswXXx8KEZuWzBdPVtdLEZuWzBdLlhUST1bXSksRm5bRm4ubGVuZ3RoLTFdLnB1c2goUG4pLCJfeGxu''@;'; put 'put ''bS5fRmlsdGVyRGF0YWJhc2UiPT1Qbi5OYW1lJiZQbi5pdGFiPjAmJlBuLnJnY2UmJlBuLnJnY2VbMF0mJlBuLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1Qbi5yZ2NlWzBdWzBdWzBdJiYoc29bUG4uaXRhYi0xXT17cmVmOnJhKFBuLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSJF''@;'; put 'put ''eHRlcm5Db3VudCI6ZXIuRXh0ZXJuQ291bnQ9UG47YnJlYWs7Y2FzZSJFeHRlcm5TaGVldCI6MD09Rm4ubGVuZ3RoJiYoRm5bMF09W10sRm5bMF0uWFRJPVtdKSxGbltGbi5sZW5ndGgtMV0uWFRJPUZuW0ZuLmxlbmd0aC0xXS5YVEkuY29uY2F0KFBuKSxGbi5YVEk9Rm4uWFRJLmNvbmNhdChQ''@;'; put 'put ''bik7YnJlYWs7Y2FzZSJOYW1lQ210IjppZihlci5iaWZmPDgpYnJlYWs7bnVsbCE9aWEmJihpYS5Db21tZW50PVBuWzFdKTticmVhaztjYXNlIlByb3RlY3QiOlFbIiFwcm90ZWN0Il09UG47YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PVBuJiZlci5XVEYmJmNvbnNvbGUuZXJyb3IoIlBhc3N3''@;'; put 'put ''b3JkIHZlcmlmaWVyOiAiK1BuKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpvZVtQbi5wb3NdPVBuLGVyLnNuYW1lcy5wdXNoKFBuLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihRWyIhZ3JpZGxpbmVzIl09IU1pfHxNaS5ncmlkLE1pPW51bGwsLS1aaSlicmVhaztpZihnZS5lKXtpZihnZS5l''@;'; put 'put ''LnI+MCYmZ2UuZS5jPjApe2lmKGdlLmUuci0tLGdlLmUuYy0tLFFbIiFyZWYiXT1yYShnZSksUi5zaGVldFJvd3MmJlIuc2hlZXRSb3dzPD1nZS5lLnIpe3ZhciBRbD1nZS5lLnI7Z2UuZS5yPVIuc2hlZXRSb3dzLTEsUVsiIWZ1bGxyZWYiXT1RWyIhcmVmIl0sUVsiIXJlZiJdPXJhKGdlKSxn''@;'; put 'put ''ZS5lLnI9UWx9Z2UuZS5yKyssZ2UuZS5jKyt9bmEubGVuZ3RoPjAmJihRWyIhbWVyZ2VzIl09bmEpLGNhLmxlbmd0aD4wJiZ4SShjYSxRLFhuKSxMaS5sZW5ndGg+MCYmKFFbIiFjb2xzIl09TGkpLGtyLmxlbmd0aD4wJiYoUVsiIXJvd3MiXT1rciksU24uU2hlZXRzLnB1c2gobHIpfSIiPT09''@;'; put 'put ''UGU/TmU9UTpHW1BlXT1RLFE9Ui5kZW5zZT9bXTp7fTticmVhaztjYXNlIkJPRiI6aWYoOD09PWVyLmJpZmYmJihlci5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtob118fHs1MTI6Miw3Njg6MywxMDI0OjQsMTI4MDo1LDE1MzY6OCwyOjIsNzoyfVtQbi5CSUZGVmVyXXx8OCksZXIuYmlmZmd1''@;'; put 'put ''ZXNzPTA9PVBuLkJJRkZWZXIsMD09UG4uQklGRlZlciYmNDA5Nj09UG4uZHQmJihlci5iaWZmPTUsTG89ITAsVShlci5jb2RlcGFnZT0yODU5MSkpLDg9PWVyLmJpZmYmJjA9PVBuLkJJRkZWZXImJjE2PT1Qbi5kdCYmKGVyLmJpZmY9MiksWmkrKylicmVhaztpZihRPVIuZGVuc2U/W106e30s''@;'; put 'put ''ZXIuYmlmZjw4JiYhTG8mJihMbz0hMCxVKGVyLmNvZGVwYWdlPVIuY29kZXBhZ2V8fDEyNTIpKSxlci5iaWZmPDV8fDA9PVBuLkJJRkZWZXImJjQwOTY9PVBuLmR0KXsiIj09PVBlJiYoUGU9IlNoZWV0MSIpLGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIFlsPXtwb3M6Uy5sLUph''@;'; put 'put ''LG5hbWU6UGV9O29lW1lsLnBvc109WWwsZXIuc25hbWVzLnB1c2goUGUpfWVsc2UgUGU9KG9lW09hXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Qbi5kdCYmKFFbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PVBuLmR0JiYoUVsiIXR5cGUiXT0ibWFjcm8iKSxuYT1bXSxjYT1bXSxlci5hcnJheWY9a3Q9''@;'; put 'put ''W10sTGk9W10sa3I9W10sX3I9ITEsbHI9e0hpZGRlbjoob2VbT2FdfHx7aHM6MH0pLmhzLG5hbWU6UGV9O2JyZWFrO2Nhc2UiTnVtYmVyIjpjYXNlIkJJRkYyTlVNIjpjYXNlIkJJRkYySU5UIjoiY2hhcnQiPT1RWyIhdHlwZSJdJiYoUi5kZW5zZT8oUVtQbi5yXXx8W10pW1BuLmNdOlFbcWko''@;'; put 'put ''e2M6UG4uYyxyOlBuLnJ9KV0pJiYrK1BuLmMsT3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXXx8e30sdjpQbi52YWwsdDoibiJ9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFr''@;'; put 'put ''O2Nhc2UiQm9vbEVyciI6T3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXSx2OlBuLnZhbCx0OlBuLnR9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiUksiOk90PXtp''@;'; put 'put ''eGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdjpQbi5ya251bSx0OiJuIn0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUik7YnJlYWs7Y2FzZSJNdWxSayI6Zm9yKHZhciBHbD1Qbi5jO0dsPD1Q''@;'; put 'put ''bi5DOysrR2wpe3ZhciB5dT1Qbi5ya3JlY1tHbC1Qbi5jXVswXTtPdD17aXhmZTp5dSxYRjpUblt5dV0sdjpQbi5ya3JlY1tHbC1Qbi5jXVsxXSx0OiJuIn0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpHbCxyOlBuLnJ9LE90''@;'; put 'put ''LFIpfWJyZWFrO2Nhc2UiRm9ybXVsYSI6aWYoIlN0cmluZyI9PVBuLnZhbCl7cGU9UG47YnJlYWt9aWYoKE90PVI4KFBuLnZhbCxQbi5jZWxsLml4ZmUsUG4udHQpKS5YRj1UbltPdC5peGZlXSxSLmNlbGxGb3JtdWxhKXt2YXIgTWw9UG4uZm9ybXVsYTtpZihNbCYmTWxbMF0mJk1sWzBdWzBd''@;'; put 'put ''JiYiUHRnRXhwIj09TWxbMF1bMF1bMF0pe3ZhciBsbj1NbFswXVswXVsxXVswXSxFbj1NbFswXVswXVsxXVsxXSxVbj1xaSh7cjpsbixjOkVufSk7anRbVW5dP090LmY9IiIrczAoUG4uZm9ybXVsYSxnZSxQbi5jZWxsLEZuLGVyKTpPdC5GPSgoUi5kZW5zZT8oUVtsbl18fFtdKVtFbl06UVtV''@;'; put 'put ''bl0pfHx7fSkuRn1lbHNlIE90LmY9IiIrczAoUG4uZm9ybXVsYSxnZSxQbi5jZWxsLEZuLGVyKX15aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKFBuLmNlbGwsT3QsUikscGU9UG47YnJlYWs7Y2FzZSJTdHJpbmciOmlmKCFwZSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhIik7cGUudmFsPVBuLChPdD1SOChQbixwZS5jZWxsLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0sUi5jZWxsRm9ybXVsYSYmKE90LmY9IiIrczAocGUuZm9ybXVsYSxnZSxwZS5jZWxsLEZuLGVyKSkseWk+MCYmKE90''@;'; put 'put ''Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicihwZS5jZWxsLE90LFIpLHBlPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6a3QucHVzaChQbik7dmFyIHhpPXFpKFBuWzBdLnMpO2lmKGN0PVIuZGVuc2U/KFFbUG5bMF0ucy5yXXx8W10pW1BuWzBdLnMuY106''@;'; put 'put ''UVt4aV0sUi5jZWxsRm9ybXVsYSYmY3Qpe2lmKCFwZXx8IXhpfHwhY3QpYnJlYWs7Y3QuZj0iIitzMChQblsxXSxnZSxQblswXSxGbixlciksY3QuRj1yYShQblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighUi5jZWxsRm9ybXVsYSlicmVhaztpZihldCl7aWYoIXBlKWJyZWFrO2p0W3Fp''@;'; put 'put ''KHBlLmNlbGwpXT1QblswXSwoKGN0PVIuZGVuc2U/KFFbcGUuY2VsbC5yXXx8W10pW3BlLmNlbGwuY106UVtxaShwZS5jZWxsKV0pfHx7fSkuZj0iIitzMChQblswXSxnZSxZZSxGbixlcil9YnJlYWs7Y2FzZSJMYWJlbFNzdCI6T3Q9UjgoeWVbUG4uaXNzdF0udCxQbi5peGZlLCJzIikseWVb''@;'; put 'put ''UG4uaXNzdF0uaCYmKE90Lmg9eWVbUG4uaXNzdF0uaCksT3QuWEY9VG5bT3QuaXhmZV0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUikseWVbUG4uaXNzdF0uUiYmKE90LlI9eWVbUG4uaXNzdF0u''@;'; put 'put ''Ui5tYXAoZnVuY3Rpb24obWEpe3ZhciBEaT1xdChtYSk7cmV0dXJuIG1hLnM9PVhuLkZvbnRzWzBdJiYoRGkucz1PdC5zKSxEaX0pKTticmVhaztjYXNlIkJsYW5rIjpSLnNoZWV0U3R1YnMmJihPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHQ6InoifSx5aT4wJiYoT3Quej1fYVtP''@;'; put 'put ''dC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKSk7YnJlYWs7Y2FzZSJNdWxCbGFuayI6aWYoUi5zaGVldFN0dWJzKWZvcih2YXIgb3I9UG4uYztvcjw9UG4uQzsrK29yKXt2YXIgT2k9UG4uaXhmZVtvci1Qbi5jXTtPdD17aXhm''@;'; put 'put ''ZTpPaSxYRjpUbltPaV0sdDoieiJ9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6b3IscjpQbi5yfSxPdCxSKX1icmVhaztjYXNlIlJTdHJpbmciOmNhc2UiTGFiZWwiOmNhc2UiQklGRjJTVFIiOihPdD1SOChQbi52YWwsUG4u''@;'; put 'put ''aXhmZSwicyIpKS5YRj1UbltPdC5peGZlXSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIkRpbWVuc2lvbnMiOjE9PT1aaSYmKGdlPVBuKTticmVhaztjYXNlIlNTVCI6KHll''@;'; put 'put ''PVBuKS5mb3JFYWNoKGZ1bmN0aW9uKG1hKXttYS5fUj8obWEuX1JbMF0mJm1hLl9SWzBdLmlkeD4wJiZtYS5fUi51bnNoaWZ0KHtpZHg6MCxpZm50OjB9KSxtYS5SPW1hLl9SLm1hcChmdW5jdGlvbihEaSxjcyl7cmV0dXJue3Q6InMiLHY6bWEudC5zbGljZShEaS5pZHgsKG1hLl9SW2NzKzFd''@;'; put 'put ''fHx7fSkuaWR4KSxzOlhuLkZvbnRzW0RpLmlmbnQ8ND9EaS5pZm50OkRpLmlmbnQtMV19fSksUi5jZWxsSFRNTCYmKG1hLmg9VnUobWEuUikpKTpSLmNlbGxIVE1MJiYobWEuaD1sYShtYS50KSksZGVsZXRlIG1hLl9SfSk7YnJlYWs7Y2FzZSJGb3JtYXQiOmlmKDQ9PWVyLmJpZmYpe19hW3lp''@;'; put 'put ''KytdPVBuWzFdO2Zvcih2YXIgU3I9MDtTcjx5aSsxNjMmJkEuX3RhYmxlW1NyXSE9UG5bMV07KytTcik7U3I+PTE2MyYmQS5sb2FkKFBuWzFdLHlpKzE2Myl9ZWxzZSBBLmxvYWQoUG5bMV0sUG5bMF0pO2JyZWFrO2Nhc2UiQklGRjJGT1JNQVQiOl9hW3lpKytdPVBuO2Zvcih2YXIgUGk9MDtQ''@;'; put 'put ''aTx5aSsxNjMmJkEuX3RhYmxlW1BpXSE9UG47KytQaSk7UGk+PTE2MyYmQS5sb2FkKFBuLHlpKzE2Myk7YnJlYWs7Y2FzZSJNZXJnZUNlbGxzIjpuYT1uYS5jb25jYXQoUG4pO2JyZWFrO2Nhc2UiT2JqIjpjYVtQbi5jbW9bMF1dPWVyLmxhc3RvYmo9UG47YnJlYWs7Y2FzZSJUeE8iOmVyLmxh''@;'; put 'put ''c3RvYmouVHhPPVBuO2JyZWFrO2Nhc2UiSW1EYXRhIjplci5sYXN0b2JqLkltRGF0YT1QbjticmVhaztjYXNlIkhMaW5rIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3IoYXQ9UG5bMF0ucy5jO2F0PD1QblswXS5lLmM7KythdCkoY3Q9Ui5kZW5zZT8oUVtidF18fFtd''@;'; put 'put ''KVthdF06UVtxaSh7YzphdCxyOmJ0fSldKSYmKGN0Lmw9UG5bMV0pO2JyZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3IoYXQ9UG5bMF0ucy5jO2F0PD1QblswXS5lLmM7KythdCkoY3Q9Ui5kZW5zZT8oUVtidF18fFtdKVthdF06''@;'; put 'put ''UVtxaSh7YzphdCxyOmJ0fSldKSYmY3QubCYmKGN0LmwuVG9vbHRpcD1QblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihlci5iaWZmPD01JiZlci5iaWZmPj0yKWJyZWFrO2N0PVIuZGVuc2U/KFFbUG5bMF0ucl18fFtdKVtQblswXS5jXTpRW3FpKFBuWzBdKV07dmFyIFphPWNhW1BuWzJdXTtj''@;'; put 'put ''dHx8KFIuZGVuc2U/KFFbUG5bMF0ucl18fChRW1BuWzBdLnJdPVtdKSxjdD1RW1BuWzBdLnJdW1BuWzBdLmNdPXt0OiJ6In0pOmN0PVFbcWkoUG5bMF0pXT17dDoieiJ9LGdlLmUucj1NYXRoLm1heChnZS5lLnIsUG5bMF0uciksZ2Uucy5yPU1hdGgubWluKGdlLnMucixQblswXS5yKSxnZS5l''@;'; put 'put ''LmM9TWF0aC5tYXgoZ2UuZS5jLFBuWzBdLmMpLGdlLnMuYz1NYXRoLm1pbihnZS5zLmMsUG5bMF0uYykpLGN0LmN8fChjdC5jPVtdKSxjdC5jLnB1c2goe2E6UG5bMV0sdDpaYS5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIi''@;'; put 'put ''OmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpj''@;'; put 'put ''YXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxp''@;'; put 'put ''c3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpj''@;'; put 'put ''YXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6''@;'; put 'put ''Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50''@;'; put 'put ''U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVj''@;'; put 'put ''dFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5''@;'; put 'put ''IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNl''@;'; put 'put ''Ik1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3''@;'; put 'put ''RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOlBrKFRuW1BuLml4ZmVdLFBuLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighZXIuY2VsbFN0eWxlcylicmVhaztmb3IoO1BuLmU+PVBuLnM7KUxpW1BuLmUtLV09e3dpZHRo''@;'; put 'put ''OlBuLncvMjU2LGxldmVsOlBuLmxldmVsfHwwLGhpZGRlbjohISgxJlBuLmZsYWdzKX0sX3J8fChfcj0hMCksUTAoTGlbUG4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBIaT17fTtudWxsIT1Qbi5sZXZlbCYmKGtyW1BuLnJdPUhpLEhpLmxldmVsPVBuLmxldmVsKSxQbi5oaWRkZW4mJihr''@;'; put 'put ''cltQbi5yXT1IaSxIaS5oaWRkZW49ITApLFBuLmhwdCYmKGtyW1BuLnJdPUhpLEhpLmhwdD1Qbi5ocHQsSGkuaHB4PXNoKFBuLmhwdCkpLFBuLml4ZmUmJihrcltQbi5yXT1IaSxmcihPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdfHx7fSx2OjAsdDoibiJ9LFIpLEhpLnM9T3Qucyk7''@;'; put 'put ''YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOlFbIiFtYXJnaW5zIl18fFgzKFFbIiFtYXJnaW5zIl09e30pLFFbIiFtYXJnaW5zIl1bV28uc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV09UG47YnJlYWs7''@;'; put 'put ''Y2FzZSJTZWxlY3Rpb24iOlFbIiFzZWwiXT1QbjticmVhaztjYXNlIlNldHVwIjpRWyIhbWFyZ2lucyJdfHxYMyhRWyIhbWFyZ2lucyJdPXt9KSxRWyIhbWFyZ2lucyJdLmhlYWRlcj1Qbi5oZWFkZXIsUVsiIW1hcmdpbnMiXS5mb290ZXI9UG4uZm9vdGVyO2JyZWFrO2Nhc2UiV2luZG93MiI6''@;'; put 'put ''UG4uUlRMJiYoU24uVmlld3NbMF0uUlRMPSEwKSxNaT1QbjticmVhaztjYXNlIkNvdW50cnkiOkt0PVBuO2JyZWFrO2Nhc2UiRm9udCI6UG4uaWN2JiZCbihQbi5pY3YpJiYoUG4uY29sb3I9e3JnYjpoZChCbihQbi5pY3YpKX0pLGRlbGV0ZSBQbi5pY3YsMD09WG4uRm9udHMubGVuZ3RoJiZJ''@;'; put 'put ''NChQbiksWG4uRm9udHMucHVzaChQbik7YnJlYWs7Y2FzZSJQYWxldHRlIjpycj1QbjticmVhaztjYXNlIlRoZW1lIjpGaT1QbjticmVhaztjYXNlIkNvZGVOYW1lIjpQZT9sci5Db2RlTmFtZT1Qbnx8bHIubmFtZTpTbi5XQlByb3BzLkNvZGVOYW1lPVBufHwiVGhpc1dvcmtib29rIjticmVh''@;'; put 'put ''aztjYXNlIlBhbmUiOihNaXx8e30pLmZyb3plbiYmKFFbIiFmcmVlemUiXT1xaSh7cjpQbi55fHwwLGM6UG4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2Fz''@;'; put 'put ''ZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0''@;'; put 'put ''Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNl''@;'; put 'put ''IlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4''@;'; put 'put ''dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0Ijpj''@;'; put 'put ''YXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdl''@;'; put 'put ''IjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6''@;'; put 'put ''Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNT''@;'; put 'put ''dHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFn''@;'; put 'put ''ZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZh''@;'; put 'put ''dWx0OnN3aXRjaChCaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJ''@;'; put 'put ''RkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0Yi''@;'; put 'put ''OmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNl''@;'; put 'put ''Ikxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKFIuV1RGKXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitCaS5ufX19''@;'; put 'put ''fX1lbHNlIFMubCs9SmEsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZSh7bGVuZ3RoOkphfSkpfXJldHVybiBrLlNoZWV0TmFtZXM9T2Uob2UpLnNvcnQoZnVuY3Rpb24obWEsRGkpe3JldHVybiBOdW1iZXIobWEpLU51bWJlcihEaSl9KS5tYXAoZnVuY3Rpb24o''@;'; put 'put ''bWEpe3JldHVybiBvZVttYV0ubmFtZX0pLFIuYm9va1NoZWV0c3x8KGsuU2hlZXRzPUcpLCFrLlNoZWV0TmFtZXMubGVuZ3RoJiZOZVsiIXJlZiJdPyhrLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksay5TaGVldHMmJihrLlNoZWV0cy5TaGVldDE9TmUpKTprLlByZWFtYmxlPU5lLGsuU2hl''@;'; put 'put ''ZXRzJiZzby5mb3JFYWNoKGZ1bmN0aW9uKG1hLERpKXtrLlNoZWV0c1trLlNoZWV0TmFtZXNbRGldXVsiIWF1dG9maWx0ZXIiXT1tYX0pLGsuU3RyaW5ncz15ZSxrLlNTRj1BLmdldF90YWJsZSgpLGVyLmVuYyYmKGsuRW5jcnlwdGlvbj1lci5lbmMpLEZpJiYoay5UaGVtZXM9RmkpLGsuTWV0''@;'; put 'put ''YWRhdGE9e30sdm9pZCAwIT09S3QmJihrLk1ldGFkYXRhLkNvdW50cnk9S3QpLEZuLm5hbWVzLmxlbmd0aD4wJiYoU24uTmFtZXM9Rm4ubmFtZXMpLGsuV29ya2Jvb2s9U24sa30oRy5jb250ZW50LFIpO2Vsc2UgaWYoKG9lPXZlLmZpbmQoUywiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZvZS5j''@;'; put 'put ''b250ZW50KVE9SXYudG9fd29ya2Jvb2sob2UuY29udGVudCwoUi50eXBlPWdlLFIpKTtlbHNle2lmKCEob2U9dmUuZmluZChTLCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFvZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgV29ya2Jvb2sgc3RyZWFtIik7UT1Jdi50b193''@;'; put 'put ''b3JrYm9vayhvZS5jb250ZW50LChSLnR5cGU9Z2UsUikpfVIuYm9va1ZCQSYmUy5GdWxsUGF0aHMmJnZlLmZpbmQoUywiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYoUS52YmFyYXc9ZnVuY3Rpb24gWmsoUyl7dmFyIFI9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4g''@;'; put 'put ''Uy5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEcpe2lmKCIvIiE9PWsuc2xpY2UoLTEpJiZrLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBRPWsucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMu''@;'; put 'put ''Y2ZiX2FkZChSLFEsUy5GaWxlSW5kZXhbR10uY29udGVudCl9fSksdmUud3JpdGUoUil9KFMpKX12YXIgcGU9e307cmV0dXJuIFMuRnVsbFBhdGhzJiZmdW5jdGlvbiBCbmUoUyxSLGspe3ZhciBHPXZlLmZpbmQoUywiIURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIik7aWYoRyYmRy5zaXpl''@;'; put 'put ''PjApdHJ5e3ZhciBRPWo2KEcsbTQsVGIuRFNJKTtmb3IodmFyIG9lIGluIFEpUltvZV09UVtvZV19Y2F0Y2goUGUpe2lmKGsuV1RGKXRocm93IFBlfXZhciBnZT12ZS5maW5kKFMsIiFTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihnZSYmZ2Uuc2l6ZT4wKXRyeXt2YXIgcGU9ajYoZ2UsZDUsVGIu''@;'; put 'put ''U0kpO2Zvcih2YXIgeWUgaW4gcGUpbnVsbD09Ult5ZV0mJihSW3llXT1wZVt5ZV0pfWNhdGNoKFBlKXtpZihrLldURil0aHJvdyBQZX1SLkhlYWRpbmdQYWlycyYmUi5UaXRsZXNPZlBhcnRzJiYoXzQoUi5IZWFkaW5nUGFpcnMsUi5UaXRsZXNPZlBhcnRzLFIsayksZGVsZXRlIFIuSGVhZGlu''@;'; put 'put ''Z1BhaXJzLGRlbGV0ZSBSLlRpdGxlc09mUGFydHMpfShTLHBlLFIpLFEuUHJvcHM9US5DdXN0cHJvcHM9cGUsUi5ib29rRmlsZXMmJihRLmNmYj1TKSxRfXZhciBMOD17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIEJEKFMsUil7dmFyIGs9e30sRz1TLmwrUjtrLnI9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0xO3ZhciBvZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubD1HLDcmb2UmJihrLmxldmVsPTcmb2UpLDE2Jm9lJiYoay5oaWRkZW49ITApLDMyJm9lJiYoay5ocHQ9US8yMCksa319LDE6e246IkJydENlbGxCbGFuayIsZjpm''@;'; put 'put ''dW5jdGlvbiBEbmUoUyl7cmV0dXJuW0QxKFMpXX19LDI6e246IkJydENlbGxSayIsZjpmdW5jdGlvbiBIaihTKXtyZXR1cm5bRDEoUyksSTEoUyksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiBaRChTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0''@;'; put 'put ''OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBEaihTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBFUyhTKXtyZXR1cm5bRDEoUyksUGwoUyksIm4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBMbmUo''@;'; put 'put ''Uyl7cmV0dXJuW0QxKFMpLGd1KFMpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIFJqKFMpe3JldHVybltEMShTKSxTLnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gcGIoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7''@;'; put 'put ''US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsZ3UoUyksInN0ciJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1zMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rp''@;'; put 'put ''b24gQVMoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUGwoUyksIm4iXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109czAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4g''@;'; put 'put ''Z2V9fSwxMDp7bjoiQnJ0Rm1sYUJvb2wiLGY6ZnVuY3Rpb24gVFMoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUy5yZWFkX3NoaWZ0KDEpLCJiIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPXMw''@;'; put 'put ''KHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTE6e246IkJydEZtbGFFcnJvciIsZjpmdW5jdGlvbiB3OChTLFIsayl7dmFyIEc9Uy5sK1IsUT1EMShTKTtRLnI9a1siIXJvdyJdO3ZhciBnZT1bUSxTLnJlYWRfc2hpZnQoMSksImUiXTtpZihrLmNlbGxG''@;'; put 'put ''b3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109czAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBraihTKXtyZXR1cm5bSmgoUyldfX0sMTM6e246IkJydFNob3J0Umsi''@;'; put 'put ''LGY6ZnVuY3Rpb24gUm5lKFMpe3JldHVybltKaChTKSxJMShTKSwibiJdfX0sMTQ6e246IkJydFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24gXzgoUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBVRChTKXtyZXR1cm5b''@;'; put 'put ''SmgoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOkZqfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiBqaihTKXtyZXR1cm5bSmgoUyksZ3UoUyksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBPaihTKXtyZXR1cm5b''@;'; put 'put ''SmgoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjpzbH0sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJp''@;'; put 'put ''bmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFT''@;'; put 'put ''dHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoi''@;'; put 'put ''QnJ0TmFtZSIsZjpmdW5jdGlvbiBBOChTLFIsayl7dmFyIEc9Uy5sK1I7Uy5sKz00LFMubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoNCksb2U9bDUoUyksZ2U9ZkQoUywwLGspLHBlPXQwKFMpO1MubD1HO3ZhciB5ZT17TmFtZTpvZSxQdGc6Z2V9O3JldHVybiBRPDI2ODQzNTQ1NSYmKHllLlNo''@;'; put 'put ''ZWV0PVEpLHBlJiYoeWUuQ29tbWVudD1wZSkseWV9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24gelYoUyxSLGspe3ZhciBHPXt9O0cuc3o9Uy5yZWFkX3NoaWZ0KDIpLzIwO3ZhciBRPU93KFMpO3N3''@;'; put 'put ''aXRjaChRLmZCb2xkJiYoRy5ib2xkPTEpLFEuZkl0YWxpYyYmKEcuaXRhbGljPTEpLFEuZlVuZGVybGluZSYmKEcudW5kZXJsaW5lPTEpLFEuZkNvbmRlbnNlJiYoRy5jb25kZW5zZT0xKSxRLmZFeHRlbmQmJihHLmV4dGVuZD0xKSxRLmZTaGFkb3cmJihHLnNoYWRvdz0xKSxRLmZPdXRsaW5l''@;'; put 'put ''JiYoRy5vdXRsaW5lPTEpLFEuZlN0cmlrZW91dCYmKEcuc3RyaWtlPTEpLDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEcuYm9sZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpHLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpHLnZhbGlnbj0ic3ViIn12YXIgZ2U9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpOzAhPWdlJiYoRy51bmRlcmxpbmU9Z2UpO3ZhciBwZT1TLnJlYWRfc2hpZnQoMSk7cGU+MCYmKEcuZmFtaWx5PXBlKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaCh5ZT4wJiYoRy5jaGFyc2V0PXllKSxTLmwrKyxHLmNvbG9yPVFoKFMpLFMucmVhZF9zaGlmdCgxKSl7Y2FzZSAx''@;'; put 'put ''Okcuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOkcuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIEcubmFtZT1ndShTKSxHfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiBXdihTLFIpe3JldHVybltTLnJlYWRfc2hpZnQoMiksZ3UoUyldfX0sNDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24g''@;'; put 'put ''WVYoUyxSKXt2YXIgaz1TLmwrUixHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1RKXtHLnBhdHRlcm5UeXBlPU1DW1FdO3ZhciBvZT1RaChTKTs2NCE9b2UuaW5kZXgmJihHLmZnQ29sb3I9b2UpO3ZhciBnZT1RaChTKTs2NSE9Z2UuaW5kZXgmJihHLmJnQ29sb3I9Z2UpfWVsc2V7Uy5s''@;'; put 'put ''Kz0xNixTLnJlYWRfc2hpZnQoNCksUGwoUyksUGwoUyksUGwoUyksUGwoUyksUGwoUyk7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCkseWU9W10sUGU9MDtQZTxwZTsrK1BlKXllLnB1c2goWlYoUykpfXJldHVybiBTLmw9ayxHfX0sNDY6e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBHVihT''@;'; put 'put ''KXt2YXIgUj17fTtTLnJlYWRfc2hpZnQoMSk7dmFyIGs9STUoUyk7Im5vbmUiIT1rLnN0eWxlJiYoUi50b3A9ayk7dmFyIEc9STUoUyk7Im5vbmUiIT1HLnN0eWxlJiYoUi5ib3R0b209Ryk7dmFyIFE9STUoUyk7Im5vbmUiIT1RLnN0eWxlJiYoUi5sZWZ0PVEpO3ZhciBvZT1JNShTKTsibm9u''@;'; put 'put ''ZSIhPW9lLnN0eWxlJiYoUi5yaWdodD1vZSk7dmFyIGdlPUk1KFMpO3JldHVybiJub25lIiE9Z2Uuc3R5bGUmJihSLmRpYWc9Z2UpLFJ9fSw0Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24geEMoUyxSKXt2YXIgaz1TLmwrUixHPXt9LFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxnZT1TLnJlYWRfc2hpZnQoMikscGU9Uy5yZWFkX3NoaWZ0KDIpLHllPVMucmVhZF9zaGlmdCgyKSxQZT1TLnJlYWRfc2hpZnQoMSk7Uy5yZWFkX3NoaWZ0KDEpO3ZhciBOZT1TLnJlYWRfc2hpZnQoMiksWWU9Uy5yZWFkX3NoaWZ0KDEpO1MubD1rLEcueGZJZD1RLEcubnVtRm10SWQ9b2Us''@;'; put 'put ''Ry5mb250SWQ9Z2UsRy5maWxsSWQ9cGUsRy5ib3JkZXJJZD15ZSwxJlllJiYwIT1HLm51bUZtdElkJiYoRy5hcHBseU51bWJlckZvcm1hdD0hMCksRy5hbGlnbm1lbnQ9e30sUGU+MCYmKEcuYWxpZ25tZW50LnRleHRSb3RhdGlvbj1QZSk7dmFyIGV0PSExO3JldHVybiA3Jk5lJiYoZXQ9ITAs''@;'; put 'put ''Ry5hbGlnbm1lbnQuaG9yaXpvbnRhbD1ENVs3Jk5lXSksRy5hbGlnbm1lbnQudmVydGljYWw9dDhbTmU+Pj4zJjddLEcuYWxpZ25tZW50LnZlcnRpY2FsJiYoZXQ9ITApLE5lPj4+NiYxJiYoRy5hbGlnbm1lbnQud3JhcFRleHQ9ITApLE5lPj4+OCYxJiYoRy5hbGlnbm1lbnQuc2hyaW5rVG9G''@;'; put 'put ''aXQ9ITApLGV0fHxkZWxldGUgRy5hbGlnbm1lbnQsNCZZZSYmZXQmJihHLmFwcGx5QWxpZ25tZW50PSEwKSxHfX0sNDg6e246IkJydFN0eWxlIn0sNDk6e246IkJydENlbGxNZXRhIn0sNTA6e246IkJydFZhbHVlTWV0YSJ9LDUxOntuOiJCcnRNZGIifSw1Mjp7bjoiQnJ0QmVnaW5GbWQifSw1''@;'; put 'put ''Mzp7bjoiQnJ0RW5kRm1kIn0sNTQ6e246IkJydEJlZ2luTWR4In0sNTU6e246IkJydEVuZE1keCJ9LDU2OntuOiJCcnRCZWdpbk1keFR1cGxlIn0sNTc6e246IkJydEVuZE1keFR1cGxlIn0sNTg6e246IkJydE1keE1icklzdHIifSw1OTp7bjoiQnJ0U3RyIn0sNjA6e246IkJydENvbEluZm8i''@;'; put 'put ''LGY6ckN9LDYyOntuOiJCcnRDZWxsUlN0cmluZyJ9LDYzOntuOiJCcnRDYWxjQ2hhaW5JdGVtJCIsZjpmdW5jdGlvbiByOChTKXt2YXIgUj17fTtSLmk9Uy5yZWFkX3NoaWZ0KDQpO3ZhciBrPXt9O2sucj1TLnJlYWRfc2hpZnQoNCksay5jPVMucmVhZF9zaGlmdCg0KSxSLnI9cWkoayk7dmFy''@;'; put 'put ''IEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAyJkcmJihSLmw9IjEiKSw4JkcmJihSLmE9IjEiKSxSfX0sNjQ6e246IkJydERWYWwiLGY6ZnVuY3Rpb24gWGooUyxSLGspe3ZhciBHPVMubCtSLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPW4wKFMpLGdlPXQwKFMpLHBlPXQwKFMpLHllPXQwKFMpLFBl''@;'; put 'put ''PXQwKFMpLE5lPWhEKFMsUixrKSxZZT1TLmw8Rz9oRChTLFIsayk6bnVsbCxldD0xNSZRLGN0PXt0OnFEW2V0XSxzcXJmeDpvZSxzOltnZSxwZSx5ZSxQZV19O3JldHVybiBOZSYmKGN0LmYxPU5lKSxZZSYmKGN0LmYyPVllKSwwPT1ldHx8Mz09ZXR8fDc9PWV0fHwoY3Qub3A9RFNbUT4+MjAm''@;'; put 'put ''MTVdKSxjdH19LDY1OntuOiJCcnRTeHZjZWxsTnVtIn0sNjY6e246IkJydFN4dmNlbGxTdHIifSw2Nzp7bjoiQnJ0U3h2Y2VsbEJvb2wifSw2ODp7bjoiQnJ0U3h2Y2VsbEVyciJ9LDY5OntuOiJCcnRTeHZjZWxsRGF0ZSJ9LDcwOntuOiJCcnRTeHZjZWxsTmlsIn0sMTI4OntuOiJCcnRGaWxl''@;'; put 'put ''VmVyc2lvbiJ9LDEyOTp7bjoiQnJ0QmVnaW5TaGVldCJ9LDEzMDp7bjoiQnJ0RW5kU2hlZXQifSwxMzE6e246IkJydEJlZ2luQm9vayIsZjpJbixwOjB9LDEzMjp7bjoiQnJ0RW5kQm9vayJ9LDEzMzp7bjoiQnJ0QmVnaW5Xc1ZpZXdzIn0sMTM0OntuOiJCcnRFbmRXc1ZpZXdzIn0sMTM1Ontu''@;'; put 'put ''OiJCcnRCZWdpbkJvb2tWaWV3cyJ9LDEzNjp7bjoiQnJ0RW5kQm9va1ZpZXdzIn0sMTM3OntuOiJCcnRCZWdpbldzVmlldyIsZjpmdW5jdGlvbiBrUyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9Mjgse1JUTDozMiZSLGdyaWQ6ISEoNCZSKX19fSwxMzg6e246IkJydEVu''@;'; put 'put ''ZFdzVmlldyJ9LDEzOTp7bjoiQnJ0QmVnaW5Dc1ZpZXdzIn0sMTQwOntuOiJCcnRFbmRDc1ZpZXdzIn0sMTQxOntuOiJCcnRCZWdpbkNzVmlldyJ9LDE0Mjp7bjoiQnJ0RW5kQ3NWaWV3In0sMTQzOntuOiJCcnRCZWdpbkJ1bmRsZVNocyJ9LDE0NDp7bjoiQnJ0RW5kQnVuZGxlU2hzIn0sMTQ1''@;'; put 'put ''OntuOiJCcnRCZWdpblNoZWV0RGF0YSJ9LDE0Njp7bjoiQnJ0RW5kU2hlZXREYXRhIn0sMTQ3OntuOiJCcnRXc1Byb3AiLGY6ZnVuY3Rpb24gaGIoUyxSKXt2YXIgaz17fSxHPVNbUy5sXTtyZXR1cm4rK1MubCxrLmFib3ZlPSEoNjQmRyksay5sZWZ0PSEoMTI4JkcpLFMubCs9MTgsay5uYW1l''@;'; put 'put ''PW81KFMsUi0xOSksa319LDE0ODp7bjoiQnJ0V3NEaW0iLGY6eGoscDoxNn0sMTUxOntuOiJCcnRQYW5lIixmOmZ1bmN0aW9uIEdEKFMsUil7dmFyIGs9Uy5sK1I7UGwoUyksUGwoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQsImkiKSxRPVMucmVhZF9zaGlmdCg0LCJpIik7aWYoUy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLFMucmVhZF9zaGlmdCgxKSxrIT1TLmwpdGhyb3cgbmV3IEVycm9yKCJCYWQgQnJ0UGFuZTogIitrKyIgIT0gIitTLmwpO3JldHVybltxaSh7cjpHLGM6UX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uICREKFMsUil7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSx7Y2VsbDpx''@;'; put 'put ''aSh7cjpTLnJlYWRfc2hpZnQoNCksYzpTLnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBOUyhTLFIpe3ZhciBrPXt9LEc9Uy5yZWFkX3NoaWZ0KDQpO2suZGVmYXVsdFRoZW1lVmVyc2lvbj1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9Uj44P2d1KFMpOiIi''@;'; put 'put ''O3JldHVybiBRLmxlbmd0aD4wJiYoay5Db2RlTmFtZT1RKSxrLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JkcpLGsuYmFja3VwRmlsZT0hISg2NCZHKSxrLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JkcpLGsuZGF0ZTE5MDQ9ISEoMSZHKSxrLmZpbHRlclByaXZhY3k9ISEoOCZH''@;'; put 'put ''KSxrLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JkcpLGsucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmRyksay5wdWJsaXNoSXRlbXM9ISEoMjA0OCZHKSxrLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmRyksay5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZHKSxrLnNo''@;'; put 'put ''b3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmRyksay5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZHKSxrLnNob3dPYmplY3RzPVsiYWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW0c+PjEzJjNdLGsuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmRyksay51cGRhdGVMaW5rcz1b''@;'; put 'put ''InVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW0c+PjgmM10sa319LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gZ3ooUyxSKXt2YXIgaz17fTtyZXR1cm4gay5IaWRkZW49Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLGsuaVRhYklEPVMucmVhZF9zaGlmdCg0KSxrLnN0clJlbElEPWc0KFMsUi04KSxrLm5hbWU9Z3UoUyksa319LDE1Nzp7bjoiQnJ0Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBMdihTKXtyZXR1cm5bUy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOm11fSwxNjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6''@;'; put 'put ''e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRDb2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIi''@;'; put 'put ''fSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3VzdG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOldEfSwxNzc6e246IkJydEJl''@;'; put 'put ''Z2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntu''@;'; put 'put ''OiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6''@;'; put 'put ''e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0''@;'; put 'put ''RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMi''@;'; put 'put ''fSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1Bh''@;'; put 'put ''Z2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0''@;'; put 'put ''In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2Ui''@;'; put 'put ''fSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJy''@;'; put 'put ''dEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RT''@;'; put 'put ''RFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBS''@;'; put 'put ''RmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0''@;'; put 'put ''RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BU''@;'; put 'put ''YWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJy''@;'; put 'put ''dEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6''@;'; put 'put ''e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0''@;'; put 'put ''RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJ''@;'; put 'put ''UndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2''@;'; put 'put ''OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJy''@;'; put 'put ''dEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwz''@;'; put 'put ''MTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVu''@;'; put 'put ''ZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0s''@;'; put 'put ''MzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5k''@;'; put 'put ''RXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJC''@;'; put 'put ''cnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RD''@;'; put 'put ''Q0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6ZzR9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoi''@;'; put 'put ''QnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVyblNoZWV0IixmOlR2fSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJC''@;'; put 'put ''cnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6''@;'; put 'put ''e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4''@;'; put 'put ''S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoi''@;'; put 'put ''QnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoi''@;'; put 'put ''QnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0''@;'; put 'put ''SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUi''@;'; put 'put ''fSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNo''@;'; put 'put ''In0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6''@;'; put 'put ''e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gZ2IoUyxSLGspe3ZhciBHPVMubCtSLFE9''@;'; put 'put ''bGQoUyksb2U9Uy5yZWFkX3NoaWZ0KDEpLGdlPVtRXTtpZihnZVsyXT1vZSxrLmNlbGxGb3JtdWxhKXt2YXIgcGU9ZVMoUyxHLVMubCxrKTtnZVsxXT1wZX1lbHNlIFMubD1HO3JldHVybiBnZX19LDQyNzp7bjoiQnJ0U2hyRm1sYSIsZjpmdW5jdGlvbiBZaihTLFIsayl7dmFyIEc9Uy5sK1Is''@;'; put 'put ''b2U9W211KFMsMTYpXTtpZihrLmNlbGxGb3JtdWxhKXt2YXIgZ2U9SkIoUyxHLVMubCxrKTtvZVsxXT1nZSxTLmw9R31lbHNlIFMubD1HO3JldHVybiBvZX19LDQyODp7bjoiQnJ0VGFibGUifSw0Mjk6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbnMifSw0MzA6e246IkJydEVuZEV4dENvbm5l''@;'; put 'put ''Y3Rpb25zIn0sNDMxOntuOiJCcnRCZWdpblBDRENhbGNNZW1zIn0sNDMyOntuOiJCcnRFbmRQQ0RDYWxjTWVtcyJ9LDQzMzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtIn0sNDM0OntuOiJCcnRFbmRQQ0RDYWxjTWVtIn0sNDM1OntuOiJCcnRCZWdpblBDREhHTGV2ZWxzIn0sNDM2OntuOiJCcnRF''@;'; put 'put ''bmRQQ0RIR0xldmVscyJ9LDQzNzp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVsIn0sNDM4OntuOiJCcnRFbmRQQ0RIR0xldmVsIn0sNDM5OntuOiJCcnRCZWdpblBDREhHTEdyb3VwcyJ9LDQ0MDp7bjoiQnJ0RW5kUENESEdMR3JvdXBzIn0sNDQxOntuOiJCcnRCZWdpblBDREhHTEdyb3VwIn0sNDQy''@;'; put 'put ''OntuOiJCcnRFbmRQQ0RIR0xHcm91cCJ9LDQ0Mzp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVycyJ9LDQ0NDp7bjoiQnJ0RW5kUENESEdMR01lbWJlcnMifSw0NDU6e246IkJydEJlZ2luUENESEdMR01lbWJlciJ9LDQ0Njp7bjoiQnJ0RW5kUENESEdMR01lbWJlciJ9LDQ0Nzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5RU0kifSw0NDg6e246IkJydEVuZFFTSSJ9LDQ0OTp7bjoiQnJ0QmVnaW5RU0lSIn0sNDUwOntuOiJCcnRFbmRRU0lSIn0sNDUxOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lcyJ9LDQ1Mjp7bjoiQnJ0RW5kRGVsZXRlZE5hbWVzIn0sNDUzOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lIn0sNDU0''@;'; put 'put ''OntuOiJCcnRFbmREZWxldGVkTmFtZSJ9LDQ1NTp7bjoiQnJ0QmVnaW5RU0lGcyJ9LDQ1Njp7bjoiQnJ0RW5kUVNJRnMifSw0NTc6e246IkJydEJlZ2luUVNJRiJ9LDQ1ODp7bjoiQnJ0RW5kUVNJRiJ9LDQ1OTp7bjoiQnJ0QmVnaW5BdXRvU29ydFNjb3BlIn0sNDYwOntuOiJCcnRFbmRBdXRv''@;'; put 'put ''U29ydFNjb3BlIn0sNDYxOntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYzOntuOiJCcnRCZWdpbkNGUnVsZSJ9LDQ2NDp7bjoiQnJ0RW5kQ0ZSdWxlIn0sNDY1OntuOiJCcnRCZWdpbkljb25TZXQifSw0''@;'; put 'put ''NjY6e246IkJydEVuZEljb25TZXQifSw0Njc6e246IkJydEJlZ2luRGF0YWJhciJ9LDQ2ODp7bjoiQnJ0RW5kRGF0YWJhciJ9LDQ2OTp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlIn0sNDcwOntuOiJCcnRFbmRDb2xvclNjYWxlIn0sNDcxOntuOiJCcnRDRlZPIn0sNDcyOntuOiJCcnRFeHRlcm5W''@;'; put 'put ''YWx1ZU1ldGEifSw0NzM6e246IkJydEJlZ2luQ29sb3JQYWxldHRlIn0sNDc0OntuOiJCcnRFbmRDb2xvclBhbGV0dGUifSw0NzU6e246IkJydEluZGV4ZWRDb2xvciJ9LDQ3Njp7bjoiQnJ0TWFyZ2lucyIsZjpmdW5jdGlvbiAkaihTKXt2YXIgUj17fTtyZXR1cm4gS0QuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihrKXtSW2tdPVBsKFMpfSksUn19LDQ3Nzp7bjoiQnJ0UHJpbnRPcHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRIZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRGb3JtYXQifSw0''@;'; put 'put ''ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24gakQoUyl7dmFyIFI9e30saz17fSxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpLG9l''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKTtHLndjaD1RPD02NTUzNj9RLzI1NjpvZTt2YXIgZ2U9Uy5yZWFkX3NoaWZ0KDIpO2suaHB0PWdlLzIwO3ZhciBwZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDImcGUmJihrLmhpZGRlbj0hMCksNCZwZSYmKFIudG9wdGhpY2s9ITApLDgmcGUmJihSLmJvdHRoaWNr''@;'; put 'put ''PSEwKSxSLnJvd291dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLFIuY29sb3V0bGluZT1TLnJlYWRfc2hpZnQoMSksanYoayksUi5yb3c9ayxRMChHKSxSLmNvbD1HLFJ9fSw0ODY6e246IkJydEJlZ2luTWdzIn0sNDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBzIn0sNDg5''@;'; put 'put ''OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0OTE6e246IkJydEVuZE1HIn0sNDkyOntuOiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFwIn0sNDk0OntuOiJCcnRITGluayIsZjpmdW5jdGlvbiBVaihTLFIpe3ZhciBrPVMubCtSLEc9bXUoUywxNiksUT10''@;'; put 'put ''MChTKSxvZT1ndShTKSxnZT1ndShTKSxwZT1ndShTKTtTLmw9azt2YXIgeWU9e3JmeDpHLHJlbElkOlEsbG9jOm9lLGRpc3BsYXk6cGV9O3JldHVybiBnZSYmKHllLlRvb2x0aXA9Z2UpLHllfX0sNDk1OntuOiJCcnRCZWdpbkRDb24ifSw0OTY6e246IkJydEVuZERDb24ifSw0OTc6e246IkJy''@;'; put 'put ''dEJlZ2luRFJlZnMifSw0OTg6e246IkJydEVuZERSZWZzIn0sNDk5OntuOiJCcnREUmVmIn0sNTAwOntuOiJCcnRCZWdpblNjZW5NYW4ifSw1MDE6e246IkJydEVuZFNjZW5NYW4ifSw1MDI6e246IkJydEJlZ2luU2N0In0sNTAzOntuOiJCcnRFbmRTY3QifSw1MDQ6e246IkJydFNsYyJ9LDUw''@;'; put 'put ''NTp7bjoiQnJ0QmVnaW5EWEZzIn0sNTA2OntuOiJCcnRFbmREWEZzIn0sNTA3OntuOiJCcnREWEYifSw1MDg6e246IkJydEJlZ2luVGFibGVTdHlsZXMifSw1MDk6e246IkJydEVuZFRhYmxlU3R5bGVzIn0sNTEwOntuOiJCcnRCZWdpblRhYmxlU3R5bGUifSw1MTE6e246IkJydEVuZFRhYmxl''@;'; put 'put ''U3R5bGUifSw1MTI6e246IkJydFRhYmxlU3R5bGVFbGVtZW50In0sNTEzOntuOiJCcnRUYWJsZVN0eWxlQ2xpZW50In0sNTE0OntuOiJCcnRCZWdpblZvbERlcHMifSw1MTU6e246IkJydEVuZFZvbERlcHMifSw1MTY6e246IkJydEJlZ2luVm9sVHlwZSJ9LDUxNzp7bjoiQnJ0RW5kVm9sVHlw''@;'; put 'put ''ZSJ9LDUxODp7bjoiQnJ0QmVnaW5Wb2xNYWluIn0sNTE5OntuOiJCcnRFbmRWb2xNYWluIn0sNTIwOntuOiJCcnRCZWdpblZvbFRvcGljIn0sNTIxOntuOiJCcnRFbmRWb2xUb3BpYyJ9LDUyMjp7bjoiQnJ0Vm9sU3VidG9waWMifSw1MjM6e246IkJydFZvbFJlZiJ9LDUyNDp7bjoiQnJ0Vm9s''@;'; put 'put ''TnVtIn0sNTI1OntuOiJCcnRWb2xFcnIifSw1MjY6e246IkJydFZvbFN0ciJ9LDUyNzp7bjoiQnJ0Vm9sQm9vbCJ9LDUyODp7bjoiQnJ0QmVnaW5DYWxjQ2hhaW4kIn0sNTI5OntuOiJCcnRFbmRDYWxjQ2hhaW4kIn0sNTMwOntuOiJCcnRCZWdpblNvcnRTdGF0ZSJ9LDUzMTp7bjoiQnJ0RW5k''@;'; put 'put ''U29ydFN0YXRlIn0sNTMyOntuOiJCcnRCZWdpblNvcnRDb25kIn0sNTMzOntuOiJCcnRFbmRTb3J0Q29uZCJ9LDUzNDp7bjoiQnJ0Qm9va1Byb3RlY3Rpb24ifSw1MzU6e246IkJydFNoZWV0UHJvdGVjdGlvbiJ9LDUzNjp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uIn0sNTM3OntuOiJCcnRQaG9u''@;'; put 'put ''ZXRpY0luZm8ifSw1Mzg6e246IkJydEJlZ2luRUNUeHRXaXoifSw1Mzk6e246IkJydEVuZEVDVHh0V2l6In0sNTQwOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0In0sNTQxOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdCJ9LDU0Mjp7bjoiQnJ0QmVnaW5FQ1R3RmxkSW5mbyJ9LDU0ODp7bjoi''@;'; put 'put ''QnJ0RmlsZVNoYXJpbmcifSw1NDk6e246IkJydE9sZVNpemUifSw1NTA6e246IkJydERyYXdpbmciLGY6ZzR9LDU1MTp7bjoiQnJ0TGVnYWN5RHJhd2luZyJ9LDU1Mjp7bjoiQnJ0TGVnYWN5RHJhd2luZ0hGIn0sNTUzOntuOiJCcnRXZWJPcHQifSw1NTQ6e246IkJydEJlZ2luV2ViUHViSXRl''@;'; put 'put ''bXMifSw1NTU6e246IkJydEVuZFdlYlB1Ykl0ZW1zIn0sNTU2OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW0ifSw1NTc6e246IkJydEVuZFdlYlB1Ykl0ZW0ifSw1NTg6e246IkJydEJlZ2luU1hDb25kRm10In0sNTU5OntuOiJCcnRFbmRTWENvbmRGbXQifSw1NjA6e246IkJydEJlZ2luU1hDb25k''@;'; put 'put ''Rm10cyJ9LDU2MTp7bjoiQnJ0RW5kU1hDb25kRm10cyJ9LDU2Mjp7bjoiQnJ0QmtIaW0ifSw1NjQ6e246IkJydENvbG9yIn0sNTY1OntuOiJCcnRCZWdpbkluZGV4ZWRDb2xvcnMifSw1NjY6e246IkJydEVuZEluZGV4ZWRDb2xvcnMifSw1Njk6e246IkJydEJlZ2luTVJVQ29sb3JzIn0sNTcw''@;'; put 'put ''OntuOiJCcnRFbmRNUlVDb2xvcnMifSw1NzI6e246IkJydE1SVUNvbG9yIn0sNTczOntuOiJCcnRCZWdpbkRWYWxzIn0sNTc0OntuOiJCcnRFbmREVmFscyJ9LDU3Nzp7bjoiQnJ0U3VwTmFtZVN0YXJ0In0sNTc4OntuOiJCcnRTdXBOYW1lVmFsdWVTdGFydCJ9LDU3OTp7bjoiQnJ0U3VwTmFt''@;'; put 'put ''ZVZhbHVlRW5kIn0sNTgwOntuOiJCcnRTdXBOYW1lTnVtIn0sNTgxOntuOiJCcnRTdXBOYW1lRXJyIn0sNTgyOntuOiJCcnRTdXBOYW1lU3QifSw1ODM6e246IkJydFN1cE5hbWVOaWwifSw1ODQ6e246IkJydFN1cE5hbWVCb29sIn0sNTg1OntuOiJCcnRTdXBOYW1lRm1sYSJ9LDU4Njp7bjoi''@;'; put 'put ''QnJ0U3VwTmFtZUJpdHMifSw1ODc6e246IkJydFN1cE5hbWVFbmQifSw1ODg6e246IkJydEVuZFN1cEJvb2sifSw1ODk6e246IkJydENlbGxTbWFydFRhZ1Byb3BlcnR5In0sNTkwOntuOiJCcnRCZWdpbkNlbGxTbWFydFRhZyJ9LDU5MTp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFnIn0sNTkyOntu''@;'; put 'put ''OiJCcnRCZWdpbkNlbGxTbWFydFRhZ3MifSw1OTM6e246IkJydEVuZENlbGxTbWFydFRhZ3MifSw1OTQ6e246IkJydEJlZ2luU21hcnRUYWdzIn0sNTk1OntuOiJCcnRFbmRTbWFydFRhZ3MifSw1OTY6e246IkJydFNtYXJ0VGFnVHlwZSJ9LDU5Nzp7bjoiQnJ0QmVnaW5TbWFydFRhZ1R5cGVz''@;'; put 'put ''In0sNTk4OntuOiJCcnRFbmRTbWFydFRhZ1R5cGVzIn0sNTk5OntuOiJCcnRCZWdpblNYRmlsdGVycyJ9LDYwMDp7bjoiQnJ0RW5kU1hGaWx0ZXJzIn0sNjAxOntuOiJCcnRCZWdpblNYRklMVEVSIn0sNjAyOntuOiJCcnRFbmRTWEZpbHRlciJ9LDYwMzp7bjoiQnJ0QmVnaW5GaWxscyJ9LDYw''@;'; put 'put ''NDp7bjoiQnJ0RW5kRmlsbHMifSw2MDU6e246IkJydEJlZ2luQ2VsbFdhdGNoZXMifSw2MDY6e246IkJydEVuZENlbGxXYXRjaGVzIn0sNjA3OntuOiJCcnRDZWxsV2F0Y2gifSw2MDg6e246IkJydEJlZ2luQ1JFcnJzIn0sNjA5OntuOiJCcnRFbmRDUkVycnMifSw2MTA6e246IkJydENyYXNo''@;'; put 'put ''UmVjRXJyIn0sNjExOntuOiJCcnRCZWdpbkZvbnRzIn0sNjEyOntuOiJCcnRFbmRGb250cyJ9LDYxMzp7bjoiQnJ0QmVnaW5Cb3JkZXJzIn0sNjE0OntuOiJCcnRFbmRCb3JkZXJzIn0sNjE1OntuOiJCcnRCZWdpbkZtdHMifSw2MTY6e246IkJydEVuZEZtdHMifSw2MTc6e246IkJydEJlZ2lu''@;'; put 'put ''Q2VsbFhGcyJ9LDYxODp7bjoiQnJ0RW5kQ2VsbFhGcyJ9LDYxOTp7bjoiQnJ0QmVnaW5TdHlsZXMifSw2MjA6e246IkJydEVuZFN0eWxlcyJ9LDYyNTp7bjoiQnJ0QmlnTmFtZSJ9LDYyNjp7bjoiQnJ0QmVnaW5DZWxsU3R5bGVYRnMifSw2Mjc6e246IkJydEVuZENlbGxTdHlsZVhGcyJ9LDYy''@;'; put 'put ''ODp7bjoiQnJ0QmVnaW5Db21tZW50cyJ9LDYyOTp7bjoiQnJ0RW5kQ29tbWVudHMifSw2MzA6e246IkJydEJlZ2luQ29tbWVudEF1dGhvcnMifSw2MzE6e246IkJydEVuZENvbW1lbnRBdXRob3JzIn0sNjMyOntuOiJCcnRDb21tZW50QXV0aG9yIixmOndCfSw2MzM6e246IkJydEJlZ2luQ29t''@;'; put 'put ''bWVudExpc3QifSw2MzQ6e246IkJydEVuZENvbW1lbnRMaXN0In0sNjM1OntuOiJCcnRCZWdpbkNvbW1lbnQiLGY6ZnVuY3Rpb24gRjUoUyl7dmFyIFI9e307Ui5pYXV0aG9yPVMucmVhZF9zaGlmdCg0KTt2YXIgaz1tdShTLDE2KTtyZXR1cm4gUi5yZng9ay5zLFIucmVmPXFpKGsucyksUy5s''@;'; put 'put ''Kz0xNixSfX0sNjM2OntuOiJCcnRFbmRDb21tZW50In0sNjM3OntuOiJCcnRDb21tZW50VGV4dCIsZjpMd30sNjM4OntuOiJCcnRCZWdpbk9sZU9iamVjdHMifSw2Mzk6e246IkJydE9sZU9iamVjdCJ9LDY0MDp7bjoiQnJ0RW5kT2xlT2JqZWN0cyJ9LDY0MTp7bjoiQnJ0QmVnaW5TeHJ1bGVz''@;'; put 'put ''In0sNjQyOntuOiJCcnRFbmRTeFJ1bGVzIn0sNjQzOntuOiJCcnRCZWdpbkFjdGl2ZVhDb250cm9scyJ9LDY0NDp7bjoiQnJ0QWN0aXZlWCJ9LDY0NTp7bjoiQnJ0RW5kQWN0aXZlWENvbnRyb2xzIn0sNjQ2OntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyc1NvcnRCeSJ9LDY0ODp7bjoiQnJ0''@;'; put 'put ''QmVnaW5DZWxsSWdub3JlRUNzIn0sNjQ5OntuOiJCcnRDZWxsSWdub3JlRUMifSw2NTA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MifSw2NTE6e246IkJydENzUHJvcCIsZjpmdW5jdGlvbiBkeihTLFIpe3JldHVybiBTLmwrPTEwLHtuYW1lOmd1KFMpfX19LDY1Mjp7bjoiQnJ0Q3NQYWdlU2V0''@;'; put 'put ''dXAifSw2NTM6e246IkJydEJlZ2luVXNlckNzVmlld3MifSw2NTQ6e246IkJydEVuZFVzZXJDc1ZpZXdzIn0sNjU1OntuOiJCcnRCZWdpblVzZXJDc1ZpZXcifSw2NTY6e246IkJydEVuZFVzZXJDc1ZpZXcifSw2NTc6e246IkJydEJlZ2luUGNkU0ZDSUVudHJpZXMifSw2NTg6e246IkJydEVu''@;'; put 'put ''ZFBDRFNGQ0lFbnRyaWVzIn0sNjU5OntuOiJCcnRQQ0RTRkNJRW50cnkifSw2NjA6e246IkJydEJlZ2luTGlzdFBhcnRzIn0sNjYxOntuOiJCcnRMaXN0UGFydCJ9LDY2Mjp7bjoiQnJ0RW5kTGlzdFBhcnRzIn0sNjYzOntuOiJCcnRTaGVldENhbGNQcm9wIn0sNjY0OntuOiJCcnRCZWdpbkZu''@;'; put 'put ''R3JvdXAifSw2NjU6e246IkJydEZuR3JvdXAifSw2NjY6e246IkJydEVuZEZuR3JvdXAifSw2Njc6e246IkJydFN1cEFkZGluIn0sNjY4OntuOiJCcnRTWFRETVBPcmRlciJ9LDY2OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uIn0sNjcxOntuOiJCcnRCZWdpbldzU29ydE1hcCJ9LDY3Mjp7bjoiQnJ0''@;'; put 'put ''RW5kV3NTb3J0TWFwIn0sNjczOntuOiJCcnRCZWdpblJSU29ydCJ9LDY3NDp7bjoiQnJ0RW5kUlJTb3J0In0sNjc1OntuOiJCcnRSUlNvcnRJdGVtIn0sNjc2OntuOiJCcnRGaWxlU2hhcmluZ0lzbyJ9LDY3Nzp7bjoiQnJ0Qm9va1Byb3RlY3Rpb25Jc28ifSw2Nzg6e246IkJydFNoZWV0UHJv''@;'; put 'put ''dGVjdGlvbklzbyJ9LDY3OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uSXNvIn0sNjgwOntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28ifSw2ODE6e246IkJydERWYWxMaXN0In0sMTAyNDp7bjoiQnJ0UndEZXNjZW50In0sMTAyNTp7bjoiQnJ0S25vd25Gb250cyJ9LDEwMjY6e246IkJydEJlZ2luU1hU''@;'; put 'put ''dXBsZVNldCJ9LDEwMjc6e246IkJydEVuZFNYVHVwbGVTZXQifSwxMDI4OntuOiJCcnRCZWdpblNYVHVwbGVTZXRIZWFkZXIifSwxMDI5OntuOiJCcnRFbmRTWFR1cGxlU2V0SGVhZGVyIn0sMTAzMDp7bjoiQnJ0U1hUdXBsZVNldEhlYWRlckl0ZW0ifSwxMDMxOntuOiJCcnRCZWdpblNYVHVw''@;'; put 'put ''bGVTZXREYXRhIn0sMTAzMjp7bjoiQnJ0RW5kU1hUdXBsZVNldERhdGEifSwxMDMzOntuOiJCcnRCZWdpblNYVHVwbGVTZXRSb3cifSwxMDM0OntuOiJCcnRFbmRTWFR1cGxlU2V0Um93In0sMTAzNTp7bjoiQnJ0U1hUdXBsZVNldFJvd0l0ZW0ifSwxMDM2OntuOiJCcnROYW1lRXh0In0sMTAz''@;'; put 'put ''Nzp7bjoiQnJ0UENESDE0In0sMTAzODp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtMTQifSwxMDM5OntuOiJCcnRFbmRQQ0RDYWxjTWVtMTQifSwxMDQwOntuOiJCcnRTWFRIMTQifSwxMDQxOntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwIn0sMTA0Mjp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXAi''@;'; put 'put ''fSwxMDQzOntuOiJCcnRTcGFya2xpbmUifSwxMDQ0OntuOiJCcnRTWERJMTQifSwxMDQ1OntuOiJCcnRXc0ZtdEluZm9FeDE0In0sMTA0Njp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDc6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0ODp7''@;'; put 'put ''bjoiQnJ0QmVnaW5DRlJ1bGUxNCJ9LDEwNDk6e246IkJydEVuZENGUnVsZTE0In0sMTA1MDp7bjoiQnJ0Q0ZWTzE0In0sMTA1MTp7bjoiQnJ0QmVnaW5EYXRhYmFyMTQifSwxMDUyOntuOiJCcnRCZWdpbkljb25TZXQxNCJ9LDEwNTM6e246IkJydERWYWwxNCIsZjpmdW5jdGlvbiBJUyhTLFIs''@;'; put 'put ''ayl7dmFyIEc9ZnVuY3Rpb24gZG4oUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPXt9O3JldHVybiAxJkcmJihRLnJlZnM9ZnVuY3Rpb24gcW4oUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdO1ItLSA+MDspay5wdXNoKGlpKFMpKTtyZXR1cm4ga30oUykpLDImRyYmKFEu''@;'; put 'put ''c3FyZWZzPWZ1bmN0aW9uIElhKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXTtSLS0gPjA7KWsucHVzaChTbyhTKSk7cmV0dXJuIGt9KFMpKSw0JkcmJihRLmZvcm11bGFzPWZ1bmN0aW9uIGZzKFMsUixrKXtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9W107Ry0tID4wOylR''@;'; put 'put ''LnB1c2goTnUoUywwLGspKTtyZXR1cm4gUX0oUywwLGspKSw4JkcmJihRLnJlbElEPWZ1bmN0aW9uIGx2KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsInV0ZjE2bGUiKX0oUykpLFF9KFMsMCxrKSxRPVMucmVhZF9zaGlmdCg0KSxvZT10''@;'; put 'put ''MChTKSxnZT10MChTKSxwZT10MChTKSx5ZT10MChTKSxQZT0oRy5mb3JtdWxhc3x8W10pWzBdLE5lPShHLmZvcm11bGFzfHxbXSlbMV0sWWU9MTUmUSxldD17dDpxRFtZZV0sc3FyZng6Ry5zcXJlZnNbMF0sczpbb2UsZ2UscGUseWVdfTtyZXR1cm4gUGUmJihldC5mMT1QZSksTmUmJihldC5m''@;'; put 'put ''Mj1OZSksMD09WWV8fDM9PVllfHw3PT1ZZXx8KGV0Lm9wPURTW1E+PjIwJjE1XSksZXR9fSwxMDU0OntuOiJCcnRCZWdpbkRWYWxzMTQifSwxMDU1OntuOiJCcnRDb2xvcjE0In0sMTA1Njp7bjoiQnJ0QmVnaW5TcGFya2xpbmVzIn0sMTA1Nzp7bjoiQnJ0RW5kU3BhcmtsaW5lcyJ9LDEwNTg6''@;'; put 'put ''e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXBzIn0sMTA1OTp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXBzIn0sMTA2MTp7bjoiQnJ0U1hWRDE0In0sMTA2Mjp7bjoiQnJ0QmVnaW5TWFZpZXcxNCJ9LDEwNjM6e246IkJydEVuZFNYVmlldzE0In0sMTA2NDp7bjoiQnJ0QmVnaW5TWFZpZXcxNiJ9''@;'; put 'put ''LDEwNjU6e246IkJydEVuZFNYVmlldzE2In0sMTA2Njp7bjoiQnJ0QmVnaW5QQ0QxNCJ9LDEwNjc6e246IkJydEVuZFBDRDE0In0sMTA2ODp7bjoiQnJ0QmVnaW5FeHRDb25uMTQifSwxMDY5OntuOiJCcnRFbmRFeHRDb25uMTQifSwxMDcwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSURzIn0s''@;'; put 'put ''MTA3MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRHMifSwxMDcyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSUQifSwxMDczOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEIn0sMTA3NTp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZSJ9LDEwNzY6e246IkJydEVuZFNsaWNlckNhY2hlIn0sMTA3Nzp7bjoi''@;'; put 'put ''QnJ0QmVnaW5TbGljZXJDYWNoZURlZiJ9LDEwNzg6e246IkJydEVuZFNsaWNlckNhY2hlRGVmIn0sMTA3OTp7bjoiQnJ0QmVnaW5TbGljZXJzRXgifSwxMDgwOntuOiJCcnRFbmRTbGljZXJzRXgifSwxMDgxOntuOiJCcnRCZWdpblNsaWNlckV4In0sMTA4Mjp7bjoiQnJ0RW5kU2xpY2VyRXgi''@;'; put 'put ''fSwxMDgzOntuOiJCcnRCZWdpblNsaWNlciJ9LDEwODQ6e246IkJydEVuZFNsaWNlciJ9LDEwODU6e246IkJydFNsaWNlckNhY2hlUGl2b3RUYWJsZXMifSwxMDg2OntuOiJCcnRCZWdpblNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg3OntuOiJCcnRFbmRTbGljZXJDYWNoZU9sYXBJbXBsIn0s''@;'; put 'put ''MTA4ODp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDg5OntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDkwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkyOntu''@;'; put 'put ''OiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDkzOntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5NDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk1OntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk2OntuOiJCcnRTbGljZXJDYWNo''@;'; put 'put ''ZU9sYXBJdGVtIn0sMTA5Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMDk4OntuOiJCcnRTbGljZXJDYWNoZVNlbGVjdGlvbiJ9LDEwOTk6e246IkJydEVuZFNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDExMDA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVOYXRpdmUifSwx''@;'; put 'put ''MTAxOntuOiJCcnRFbmRTbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDI6e246IkJydFNsaWNlckNhY2hlTmF0aXZlSXRlbSJ9LDExMDM6e246IkJydFJhbmdlUHJvdGVjdGlvbjE0In0sMTEwNDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTQifSwxMTA1OntuOiJCcnRDZWxsSWdub3JlRUMxNCJ9''@;'; put 'put ''LDExMTE6e246IkJydExpc3QxNCJ9LDExMTI6e246IkJydENGSWNvbiJ9LDExMTM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE1OntuOiJCcnRCZWdpblNsaWNlcnMifSwxMTE2Ontu''@;'; put 'put ''OiJCcnRFbmRTbGljZXJzIn0sMTExNzp7bjoiQnJ0V2JQcm9wMTQifSwxMTE4OntuOiJCcnRCZWdpblNYRWRpdCJ9LDExMTk6e246IkJydEVuZFNYRWRpdCJ9LDExMjA6e246IkJydEJlZ2luU1hFZGl0cyJ9LDExMjE6e246IkJydEVuZFNYRWRpdHMifSwxMTIyOntuOiJCcnRCZWdpblNYQ2hh''@;'; put 'put ''bmdlIn0sMTEyMzp7bjoiQnJ0RW5kU1hDaGFuZ2UifSwxMTI0OntuOiJCcnRCZWdpblNYQ2hhbmdlcyJ9LDExMjU6e246IkJydEVuZFNYQ2hhbmdlcyJ9LDExMjY6e246IkJydFNYVHVwbGVJdGVtcyJ9LDExMjg6e246IkJydEJlZ2luU2xpY2VyU3R5bGUifSwxMTI5OntuOiJCcnRFbmRTbGlj''@;'; put 'put ''ZXJTdHlsZSJ9LDExMzA6e246IkJydFNsaWNlclN0eWxlRWxlbWVudCJ9LDExMzE6e246IkJydEJlZ2luU3R5bGVTaGVldEV4dDE0In0sMTEzMjp7bjoiQnJ0RW5kU3R5bGVTaGVldEV4dDE0In0sMTEzMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM0OntuOiJC''@;'; put 'put ''cnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM1OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM2OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtRXh0In0sMTEzODp7bjoiQnJ0RW5kUENE''@;'; put 'put ''Q2FsY01lbUV4dCJ9LDExMzk6e246IkJydEJlZ2luUENEQ2FsY01lbXNFeHQifSwxMTQwOntuOiJCcnRFbmRQQ0RDYWxjTWVtc0V4dCJ9LDExNDE6e246IkJydFBDREZpZWxkMTQifSwxMTQyOntuOiJCcnRCZWdpblNsaWNlclN0eWxlcyJ9LDExNDM6e246IkJydEVuZFNsaWNlclN0eWxlcyJ9''@;'; put 'put ''LDExNDQ6e246IkJydEJlZ2luU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDU6e246IkJydEVuZFNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ2OntuOiJCcnRDRlJ1bGVFeHQifSwxMTQ3OntuOiJCcnRCZWdpblNYQ29uZEZtdDE0In0sMTE0ODp7bjoiQnJ0RW5kU1hDb25kRm10MTQifSwxMTQ5''@;'; put 'put ''OntuOiJCcnRCZWdpblNYQ29uZEZtdHMxNCJ9LDExNTA6e246IkJydEVuZFNYQ29uZEZtdHMxNCJ9LDExNTI6e246IkJydEJlZ2luU29ydENvbmQxNCJ9LDExNTM6e246IkJydEVuZFNvcnRDb25kMTQifSwxMTU0OntuOiJCcnRFbmREVmFsczE0In0sMTE1NTp7bjoiQnJ0RW5kSWNvblNldDE0''@;'; put 'put ''In0sMTE1Njp7bjoiQnJ0RW5kRGF0YWJhcjE0In0sMTE1Nzp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlMTQifSwxMTU4OntuOiJCcnRFbmRDb2xvclNjYWxlMTQifSwxMTU5OntuOiJCcnRCZWdpblN4cnVsZXMxNCJ9LDExNjA6e246IkJydEVuZFN4cnVsZXMxNCJ9LDExNjE6e246IkJydEJlZ2lu''@;'; put 'put ''UFJ1bGUxNCJ9LDExNjI6e246IkJydEVuZFBSdWxlMTQifSwxMTYzOntuOiJCcnRCZWdpblBSRmlsdGVyczE0In0sMTE2NDp7bjoiQnJ0RW5kUFJGaWx0ZXJzMTQifSwxMTY1OntuOiJCcnRCZWdpblBSRmlsdGVyMTQifSwxMTY2OntuOiJCcnRFbmRQUkZpbHRlcjE0In0sMTE2Nzp7bjoiQnJ0''@;'; put 'put ''QmVnaW5QUkZJdGVtMTQifSwxMTY4OntuOiJCcnRFbmRQUkZJdGVtMTQifSwxMTY5OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MxNCJ9LDExNzA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MxNCJ9LDExNzE6e246IkJydER4ZjE0In0sMTE3Mjp7bjoiQnJ0QmVnaW5EeEYxNHMifSwxMTczOntu''@;'; put 'put ''OiJCcnRFbmREeGYxNHMifSwxMTc3OntuOiJCcnRGaWx0ZXIxNCJ9LDExNzg6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVyczE0In0sMTE4MDp7bjoiQnJ0Q3VzdG9tRmlsdGVyMTQifSwxMTgxOntuOiJCcnRJY29uRmlsdGVyMTQifSwxMTgyOntuOiJCcnRQaXZvdENhY2hlQ29ubmVjdGlvbk5h''@;'; put 'put ''bWUifSwyMDQ4OntuOiJCcnRCZWdpbkRlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDQ5OntuOiJCcnRFbmREZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA1MDp7bjoiQnJ0RGVjb3VwbGVkUGl2b3RDYWNoZUlEIn0sMjA1MTp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlUmVmcyJ9LDIwNTI6e246''@;'; put 'put ''IkJydEVuZFBpdm90VGFibGVSZWZzIn0sMjA1Mzp7bjoiQnJ0UGl2b3RUYWJsZVJlZiJ9LDIwNTQ6e246IkJydFNsaWNlckNhY2hlQm9va1Bpdm90VGFibGVzIn0sMjA1NTp7bjoiQnJ0QmVnaW5TeHZjZWxscyJ9LDIwNTY6e246IkJydEVuZFN4dmNlbGxzIn0sMjA1Nzp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''eFJvdyJ9LDIwNTg6e246IkJydEVuZFN4Um93In0sMjA2MDp7bjoiQnJ0UGNkQ2FsY01lbTE1In0sMjA2Nzp7bjoiQnJ0UXNpMTUifSwyMDY4OntuOiJCcnRCZWdpbldlYkV4dGVuc2lvbnMifSwyMDY5OntuOiJCcnRFbmRXZWJFeHRlbnNpb25zIn0sMjA3MDp7bjoiQnJ0V2ViRXh0ZW5zaW9u''@;'; put 'put ''In0sMjA3MTp7bjoiQnJ0QWJzUGF0aDE1In0sMjA3Mjp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzM6e246IkJydEVuZFBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3NTp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEcyJ9LDIwNzY6e246IkJydFRhYmxlU2xpY2VyQ2Fj''@;'; put 'put ''aGVJRCJ9LDIwNzc6e246IkJydEJlZ2luVGFibGVTbGljZXJDYWNoZSJ9LDIwNzg6e246IkJydEVuZFRhYmxlU2xpY2VyQ2FjaGUifSwyMDc5OntuOiJCcnRTeEZpbHRlcjE1In0sMjA4MDp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODE6e246IkJydEVuZFRp''@;'; put 'put ''bWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4Mjp7bjoiQnJ0VGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRCJ9LDIwODM6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEcyJ9LDIwODQ6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRHMifSwyMDg1OntuOiJCcnRCZWdpblRpbWVsaW5lQ2Fj''@;'; put 'put ''aGVJRCJ9LDIwODY6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRCJ9LDIwODc6e246IkJydEJlZ2luVGltZWxpbmVzRXgifSwyMDg4OntuOiJCcnRFbmRUaW1lbGluZXNFeCJ9LDIwODk6e246IkJydEJlZ2luVGltZWxpbmVFeCJ9LDIwOTA6e246IkJydEVuZFRpbWVsaW5lRXgifSwyMDkxOntu''@;'; put 'put ''OiJCcnRXb3JrQm9va1ByMTUifSwyMDkyOntuOiJCcnRQQ0RIMTUifSwyMDkzOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGUifSwyMDk0OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlIn0sMjA5NTp7bjoiQnJ0VGltZWxpbmVTdHlsZUVsZW1lbnQifSwyMDk2OntuOiJCcnRCZWdpblRpbWVsaW5l''@;'; put 'put ''U3R5bGVzaGVldEV4dDE1In0sMjA5Nzp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk4OntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVzIn0sMjA5OTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXMifSwyMTAwOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9''@;'; put 'put ''LDIxMDE6e246IkJydEVuZFRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDI6e246IkJydER4ZjE1In0sMjEwMzp7bjoiQnJ0QmVnaW5EeGZzMTUifSwyMTA0OntuOiJicnRFbmREeGZzMTUifSwyMTA1OntuOiJCcnRTbGljZXJDYWNoZUhpZGVJdGVtc1dpdGhOb0RhdGEifSwyMTA2OntuOiJC''@;'; put 'put ''cnRCZWdpbkl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDc6e246IkJydEVuZEl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDg6e246IkJydEl0ZW1VbmlxdWVOYW1lIn0sMjEwOTp7bjoiQnJ0QmVnaW5FeHRDb25uMTUifSwyMTEwOntuOiJCcnRFbmRFeHRDb25uMTUifSwyMTExOntuOiJCcnRCZWdpbk9sZWRi''@;'; put 'put ''UHIxNSJ9LDIxMTI6e246IkJydEVuZE9sZWRiUHIxNSJ9LDIxMTM6e246IkJydEJlZ2luRGF0YUZlZWRQcjE1In0sMjExNDp7bjoiQnJ0RW5kRGF0YUZlZWRQcjE1In0sMjExNTp7bjoiQnJ0VGV4dFByMTUifSwyMTE2OntuOiJCcnRSYW5nZVByMTUifSwyMTE3OntuOiJCcnREYkNvbW1hbmQx''@;'; put 'put ''NSJ9LDIxMTg6e246IkJydEJlZ2luRGJUYWJsZXMxNSJ9LDIxMTk6e246IkJydEVuZERiVGFibGVzMTUifSwyMTIwOntuOiJCcnREYlRhYmxlMTUifSwyMTIxOntuOiJCcnRCZWdpbkRhdGFNb2RlbCJ9LDIxMjI6e246IkJydEVuZERhdGFNb2RlbCJ9LDIxMjM6e246IkJydEJlZ2luTW9kZWxU''@;'; put 'put ''YWJsZXMifSwyMTI0OntuOiJCcnRFbmRNb2RlbFRhYmxlcyJ9LDIxMjU6e246IkJydE1vZGVsVGFibGUifSwyMTI2OntuOiJCcnRCZWdpbk1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjc6e246IkJydEVuZE1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjg6e246IkJydE1vZGVsUmVsYXRpb25zaGlw''@;'; put 'put ''In0sMjEyOTp7bjoiQnJ0QmVnaW5FQ1R4dFdpejE1In0sMjEzMDp7bjoiQnJ0RW5kRUNUeHRXaXoxNSJ9LDIxMzE6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzI6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0MTUifSwyMTMzOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvMTUifSwy''@;'; put 'put ''MTM0OntuOiJCcnRGaWVsZExpc3RBY3RpdmVJdGVtIn0sMjEzNTp7bjoiQnJ0UGl2b3RDYWNoZUlkVmVyc2lvbiJ9LDIxMzY6e246IkJydFNYREkxNSJ9LDIxMzc6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzODp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEz''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZyJ9LDIxNDA6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MTp7bjoiQnJ0TW9kZWxUaW1lR3JvdXBpbmdDYWxjQ29sIn0sMzA3Mjp7bjoiQnJ0VWlkIn0sMzA3Mzp7bjoiQnJ0UmV2aXNpb25QdHIifSw1MDk1OntuOiJCcnRC''@;'; put 'put ''ZWdpbkNhbGNGZWF0dXJlcyJ9LDUwOTY6e246IkJydEVuZENhbGNGZWF0dXJlcyJ9LDUwOTc6e246IkJydENhbGNGZWF0dXJlIn0sNjU1MzU6e246IiJ9fSxIej1JZShMOCwibiIpO0h6LkJydEZSVEFyY2hJRCQ9MTY7dmFyIEtTPXs2OntuOiJGb3JtdWxhIixmOlFDfSwxMDp7bjoiRU9GIixm''@;'; put 'put ''OnIyfSwxMjp7bjoiQ2FsY0NvdW50IixmOkVjfSwxMzp7bjoiQ2FsY01vZGUiLGY6RWN9LDE0OntuOiJDYWxjUHJlY2lzaW9uIixmOnVvfSwxNTp7bjoiQ2FsY1JlZk1vZGUiLGY6dW99LDE2OntuOiJDYWxjRGVsdGEiLGY6UGx9LDE3OntuOiJDYWxjSXRlciIsZjp1b30sMTg6e246IlByb3Rl''@;'; put 'put ''Y3QiLGY6dW99LDE5OntuOiJQYXNzd29yZCIsZjpFY30sMjA6e246IkhlYWRlciIsZjpKQX0sMjE6e246IkZvb3RlciIsZjpKQX0sMjM6e246IkV4dGVyblNoZWV0IixmOlR2fSwyNDp7bjoiTGJsIixmOnRDfSwyNTp7bjoiV2luUHJvdGVjdCIsZjp1b30sMjY6e246IlZlcnRpY2FsUGFnZUJy''@;'; put 'put ''ZWFrcyJ9LDI3OntuOiJIb3Jpem9udGFsUGFnZUJyZWFrcyJ9LDI4OntuOiJOb3RlIixmOmZ1bmN0aW9uIFFBKFMsUixrKXtyZXR1cm4gZnVuY3Rpb24gQ28oUyxSLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLGdlPVMucmVhZF9zaGlmdCgyKSxwZT1YMChTLDAsayk7cmV0dXJuIGsuYmlmZjw4JiZTLnJlYWRfc2hpZnQoMSksW3tyOkcsYzpRfSxwZSxnZSxvZV19fShTLDAsayl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFRmKFMsUixrKXtyZXR1cm4gayYmay5iaWZmPDU/KFMu''@;'; put 'put ''bCs9Uix7Y2VsbDp7cjowLGM6MH19KTooUy5yZWFkX3NoaWZ0KDEpLHtjZWxsOnFpKHtyOlMucmVhZF9zaGlmdCgyKSxjOlMucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6dW99LDM1OntuOiJFeHRlcm5OYW1lIixmOmVDfSwzODp7bjoiTGVmdE1hcmdpbiIsZjpQbH0s''@;'; put 'put ''Mzk6e246IlJpZ2h0TWFyZ2luIixmOlBsfSw0MDp7bjoiVG9wTWFyZ2luIixmOlBsfSw0MTp7bjoiQm90dG9tTWFyZ2luIixmOlBsfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6dW99LDQzOntuOiJQcmludEdyaWQiLGY6dW99LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiBnQyhTLFIsayl7''@;'; put 'put ''aWYoay5lbmMpcmV0dXJuIGsuZW5jO3ZhciBHPXtUeXBlOmsuYmlmZj49OD9TLnJlYWRfc2hpZnQoMik6MH07cmV0dXJuIEcuVHlwZT9mdW5jdGlvbiBOdihTLFIsayxHKXt2YXIgUT1HfHx7fTtpZihRLkluZm89Uy5yZWFkX3NoaWZ0KDIpLFMubC09MiwxPT09US5JbmZvKXtpZihRLkRhdGE9''@;'; put 'put ''ZnVuY3Rpb24gdG5lKFMpe3ZhciBSPXt9LGs9Ui5FbmNyeXB0aW9uVmVyc2lvbkluZm89UDEoUyw0KTtpZigxIT1rLk1ham9yfHwxIT1rLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitrLk1ham9yKyIgOiAiK2suTWlub3I7cmV0dXJuIFIuU2FsdD1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMTYpLFIuRW5jcnlwdGVkVmVyaWZpZXI9Uy5yZWFkX3NoaWZ0KDE2KSxSLkVuY3J5cHRlZFZlcmlmaWVySGFzaD1TLnJlYWRfc2hpZnQoMTYpLFJ9KFMpLGsucGFzc3dvcmQmJnR5cGVvZiBHNDwidSIpe3ZhciBvZT1HNChrLnBhc3N3b3JkLFEuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLGdl''@;'; put 'put ''PVNlKFEuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcitRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNoLCJoZXgiKSxwZT1YbC5yYzQoU2Uob2UsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSxnZSk7Ry52YWxpZD1YbC5tZDUocGUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbShwZS5zbGljZSgx''@;'; put 'put ''NikpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PW9lLEcuaW5zaXR1PWZ1bmN0aW9uIHF6KFMsUil7dmFyIGs9bmV3IEFycmF5KDI1NiksRz0wLFE9MCxvZT0wLGdlPTA7ZnVuY3Rpb24gcGUoZXQpe2ZvcihHPTAsUT0wLG9lPTAsZ2U9MCxRPTA7MjU2IT1ROysrUSlrW1FdPVE7Zm9yKG9l''@;'; put 'put ''PTAsUT0wOzI1NiE9UTsrK1Epe3RyeXtvZT1vZStrW1FdK2V0W1ElZXQubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NX1jYXRjaChjdCl7dGhyb3cgY29uc29sZS5sb2coUSxldFtRJWV0Lmxlbmd0aF0pLGN0fWdlPWtbUV0sa1tRXT1rW29lXSxrW29lXT1nZX1RPW9lPTB9ZnVuY3Rpb24geWUo''@;'; put 'put ''ZXQpe3ZhciBjdD1WKGV0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1ldC5sZW5ndGg7KytHKWdlPWtbUT1RKzEmMjU1XSxrW1FdPWtbb2U9KG9lK2tbUV0pJTI1Nl0sa1tvZV09Z2UsY3RbR109ZXRbR11ea1trW1FdK2tbb2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGN0KX12YXIgUGU9Uy5LZXks''@;'; put 'put ''TmU9MDtwZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgWWU9MDtyZXR1cm4gZnVuY3Rpb24oZXQpe2lmKFllK2V0Lmxlbmd0aDwxMDI0KXJldHVybiBZZSs9ZXQubGVuZ3RoLHllKGV0KTt2YXIgYXQ9MCxidD1TZShldC5zbGljZShhdCxhdCsoRXQ9MTAyNC1ZZSkpKTth''@;'; put 'put ''dCs9RXQsWWU9MDt2YXIganQ9eWUoYnQpO2ZvcihhdD09ZXQubGVuZ3RoJiYoKytOZSxQZT1HNChSLFMuU2FsdCxGOChOZSkpLHBlKFNlKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTthdDxldC5sZW5ndGg7KXsrK05lLFBlPUc0KFIsUy5TYWx0LEY4KE5lKSkscGUoQnVmZmVyLmZy''@;'; put 'put ''b20oUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEV0PU1hdGgubWluKDEwMjQsZXQubGVuZ3RoLWF0KTtidD1TZShldC5zbGljZShhdCxhdCtFdCkpLGF0Kz1FdCxZZT1FdCxqdD1CdWZmZXIuY29uY2F0KFtqdCx5ZShidCldKX1yZXR1cm4ganR9fShRLkRhdGEsay5wYXNzd29y''@;'; put 'put ''ZCl9fWVsc2UgaWYoUS5EYXRhPWZ1bmN0aW9uIEZ2KFMsUil7dmFyIGs9e30sRz1rLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1QMShTLDQpO2lmKFItPTQsMiE9Ry5NaW5vcil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtaW5vciB2ZXJzaW9uIGNvZGU6ICIrRy5NaW5vcik7aWYoRy5N''@;'; put 'put ''YWpvcj40fHxHLk1ham9yPDIpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAiK0cuTWFqb3IpO2suRmxhZ3M9Uy5yZWFkX3NoaWZ0KDQpLFItPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBSLT00LGsuRW5jcnlwdGlvbkhlYWRlcj1JVihT''@;'; put 'put ''LFEpLGsuRW5jcnlwdGlvblZlcmlmaWVyPVB2KFMsUi09USksa30oUyxSKSxRLkRhdGEmJlEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLkFsZ0lEJiZrLnBhc3N3b3JkJiZ0eXBlb2YgJDQ8InUiKXt2YXIgeWU9JDQoay5wYXNzd29yZCxR''@;'; put 'put ''LkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQudG9TdHJpbmcoImhleCIpLCIwMDAwMDAwMCIpLFBlPVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PVBlfHxQZTx5ZS5sZW5ndGgmJih5ZT15ZS5zbGljZSgwLFBlKSk7dmFyIE5lPVNlKFEuRGF0YS5FbmNyeXB0aW9u''@;'; put 'put ''VmVyaWZpZXIuVmVyaWZpZXIudG9TdHJpbmcoImhleCIpK1EuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4IiksWWU9WGwucmM0KHllLnRvU3RyaW5nKCJiaW5hcnkiKSxOZSk7Ry52YWxpZD1tYyhZZS5zbGljZSgwLFBlKSwiU0hBMSIp''@;'; put 'put ''LnRvU3RyaW5nKCJoZXgiKT09WWUuc2xpY2UoUGUpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PXllLEcudmFsaWQmJihHLmluc2l0dT1mdW5jdGlvbiB0cmUoUyxSKXt2YXIgaz1uZXcgQXJyYXkoMjU2KSxHPTAsUT0wLG9lPTAsZ2U9MCxwZT1TLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6''@;'; put 'put ''ZT4+PjM7ZnVuY3Rpb24geWUoY3Qpe2ZvcihjdD1CdWZmZXIuZnJvbShjdC5zbGljZSgwLHBlKSksRz0wLFE9MCxvZT0wLGdlPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihvZT0wLFE9MDsyNTYhPVE7KytRKXt2YXIgRXQ9Y3RbUSVjdC5sZW5ndGhdO29lPW9lK2tbUV0rKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgRXQ/RXQuY2hhckNvZGVBdCgwKTpFdCkmMjU1LGdlPWtbUV0sa1tRXT1rW29lXSxrW29lXT1nZX1RPW9lPTB9ZnVuY3Rpb24gUGUoY3Qpe3ZhciBFdD1WKGN0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1jdC5sZW5ndGg7KytHKWdlPWtbUT1RKzEmMjU1XSxrW1FdPWtbb2U9KG9lK2tb''@;'; put 'put ''UV0pJTI1Nl0sa1tvZV09Z2UsRXRbR109Y3RbR11ea1trW1FdK2tbb2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKEV0KX12YXIgTmU9Uy5LZXksWWU9MDt5ZShTZShOZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgZXQ9MDtyZXR1cm4gZnVuY3Rpb24oY3Qpe2lmKGV0K2N0Lmxl''@;'; put 'put ''bmd0aDwxMDI0KXJldHVybiBldCs9Y3QubGVuZ3RoLFBlKGN0KTt2YXIgYXQ9MTAyNC1ldCxidD0wLGp0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K2F0KSk7YnQrPWF0LGV0PTA7dmFyIGt0PVBlKGp0KTtmb3IoYnQ9PWN0Lmxlbmd0aCYmKCsrWWUsTmU9JDQoUixTLkVuY3J5cHRpb25W''@;'; put 'put ''ZXJpZmllci5TYWx0LEY4KFllKSkseWUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2J0PGN0Lmxlbmd0aDspKytZZSxOZT0kNChSLFMuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsRjgoWWUpKSx5ZShCdWZmZXIuZnJvbShOZSwiaGV4IikudG9TdHJpbmcoImJp''@;'; put 'put ''bmFyeSIpKSxhdD1NYXRoLm1pbigxMDI0LGN0Lmxlbmd0aC1idCksanQ9QnVmZmVyLmZyb20oY3Quc2xpY2UoYnQsYnQrYXQpKSxidCs9YXQsYXQ8MTAyNCYmKGV0PWF0KSxrdD1CdWZmZXIuY29uY2F0KFtrdCxQZShqdCldKTtyZXR1cm4ga3R9fShRLkRhdGEsay5wYXNzd29yZCkpfXJldHVy''@;'; put 'put ''biBRfShTLFItMixrLEcpOmZ1bmN0aW9uIE9WKFMsUixrLEcpe3ZhciBRPXtrZXk6RWMoUyksdmVyaWZpY2F0aW9uQnl0ZXM6RWMoUyl9O2sucGFzc3dvcmQmJihRLnZlcmlmaWVyPUh2KGsucGFzc3dvcmQpKSxHLnZhbGlkPVEudmVyaWZpY2F0aW9uQnl0ZXM9PT1RLnZlcmlmaWVyLEcudmFs''@;'; put 'put ''aWQmJihHLmluc2l0dT1mdW5jdGlvbihTLFIpe3ZhciBrPVJ8fDAsRz1wQyhTKTtyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIG9lPWZ1bmN0aW9uKFMsUixrLEcsUSl7dmFyIG9lLGdlO2ZvcihRfHwoUT1SKSxHfHwoRz1wQygiIikpLG9lPTA7b2UhPVIubGVuZ3RoOysrb2UpZ2U9MjU1JigoZ2U9''@;'; put 'put ''UltvZV0pPj41fGdlPDwzKSxRW29lXT1nZV49R1trXSxrPWsrMSYxNTtyZXR1cm5bUSxrLEddfSgwLFEsayxHKTtyZXR1cm4gaz1vZVsxXSxvZVswXX19KGsucGFzc3dvcmQsMCkpfShTLDAsayxHKSxHfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24gR0EoUyxSLGspe3ZhciBHPXtzejpTLnJl''@;'; put 'put ''YWRfc2hpZnQoMikvMjB9LFE9T3coUyk7US5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGluZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5z''@;'; put 'put ''aGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKTt2YXIgb2U9ayYmay5iaWZmfHw4O2lmKDIhPW9lJiYoRy5pY3Y9Uy5yZWFkX3NoaWZ0KDIpLDMhPW9lJiY0IT1vZSkpe3N3aXRjaCg3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJv''@;'; put 'put ''bGQ9MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIHBlPVMucmVhZF9zaGlmdCgxKTswIT1wZSYmKEcudW5kZXJsaW5lPXBlKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDEpO3llPjAmJihHLmZhbWlseT15ZSk7''@;'; put 'put ''dmFyIFBlPVMucmVhZF9zaGlmdCgxKTtQZT4wJiYoRy5jaGFyc2V0PVBlKSxTLmwrPTF9cmV0dXJuIEcubmFtZT1VYShTLDAsayksR319LDUxOntuOiJQcmludFNpemUiLGY6RWN9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5kb3cxIixmOmZ1bmN0aW9uICR0ZShTKXtyZXR1cm57UG9z''@;'; put 'put ''OltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxEaW06W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildLEZsYWdzOlMucmVhZF9zaGlmdCgyKSxDdXJUYWI6Uy5yZWFkX3NoaWZ0KDIpLEZpcnN0VGFiOlMucmVhZF9zaGlmdCgyKSxTZWxlY3RlZDpTLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksVGFiUmF0aW86Uy5yZWFkX3NoaWZ0KDIpfX19LDY0OntuOiJCYWNrdXAiLGY6dW99LDY1OntuOiJQYW5lIixmOmZ1bmN0aW9uIFlBKFMsUixrKXtpZihrJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz17fTtyZXR1cm4gRy54PVMucmVhZF9zaGlmdCgyKSxHLnk9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LEcucndUb3A9Uy5yZWFkX3NoaWZ0KDIpLEcuY29sTGVmdD1TLnJlYWRfc2hpZnQoMiksRy5wbm5BY2N0PVMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksR319LDY2OntuOiJDb2RlUGFnZSIsZjpFY30sNzc6e246IlBscyIsZjpJbn0sODA6e246IkRDb24ifSw4MTp7bjoiRENvblJl''@;'; put 'put ''ZiJ9LDgyOntuOiJEQ29uTmFtZSJ9LDg1OntuOiJEZWZDb2xXaWR0aCIsZjpFY30sODk6e246IlhDVCJ9LDkwOntuOiJDUk4ifSw5MTp7bjoiRmlsZVNoYXJpbmcifSw5Mjp7bjoiV3JpdGVBY2Nlc3MiLGY6ZnVuY3Rpb24gS3coUyxSLGspe2lmKGsuZW5jKXJldHVybiBTLmwrPVIsIiI7dmFy''@;'; put 'put ''IEc9Uy5sLFE9WDAoUywwLGspO3JldHVybiBTLnJlYWRfc2hpZnQoUitHLVMubCksUX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gZFYoUyxSLGspe2lmKGsmJmsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiB0ayhTLFIsayl7Uy5sKz00O3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz02O3ZhciBnZT1bXTtyZXR1cm4gZ2UucHVzaCgoZWtbR118fEluKShTLFItPTM2LGspKSx7Y21vOltRLEcsb2VdLGZ0Omdl''@;'; put 'put ''fX0oUyxSLGspO3ZhciBHPWI1KFMpLFE9ZnVuY3Rpb24gSjAoUyxSLGspe2Zvcih2YXIgRz1TLmwrUixRPVtdO1MubDxHOyl7dmFyIG9lPVMucmVhZF9zaGlmdCgyKTtTLmwtPTI7dHJ5e1Fbb2VdPUVmW29lXShTLEctUy5sKX1jYXRjaHtyZXR1cm4gUy5sPUcsUX19cmV0dXJuIFMubCE9RyYm''@;'; put 'put ''KFMubD1HKSxRfShTLFItMjIpO3JldHVybntjbW86RyxmdDpRfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjp1b30sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjp1b30sMTI1OntuOiJDb2xJbmZvIixmOnJD''@;'; put 'put ''fSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gc1YoUyl7Uy5sKz00O3ZhciBSPVtTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09UlswXSYmUlswXS0tLDAhPT1SWzFdJiZSWzFdLS0sUlswXT43fHxSWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitS''@;'; put 'put ''LmpvaW4oInwiKSk7cmV0dXJuIFJ9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBFdihTLFIsayl7dmFyIEc9ayYmOD09ay5iaWZmfHwyPT1SP1MucmVhZF9zaGlmdCgyKTooUy5sKz1SLDApO3JldHVybntmRGlhbG9nOjE2JkcsZkJlbG93OjY0JkcsZlJpZ2h0OjEyOCZHfX19LDEzMDp7''@;'; put 'put ''bjoiR3JpZFNldCIsZjpFY30sMTMxOntuOiJIQ2VudGVyIixmOnVvfSwxMzI6e246IlZDZW50ZXIiLGY6dW99LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gWjYoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPTMmUy5yZWFkX3NoaWZ0KDEpLG9lPVMucmVhZF9zaGlmdCgx''@;'; put 'put ''KTtzd2l0Y2gob2Upe2Nhc2UgMDpvZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6b2U9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpvZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Om9lPSJWQkFNb2R1bGUifXZhciBnZT1VYShTLDAsayk7cmV0dXJuIDA9PT1nZS5sZW5ndGgmJihnZT0i''@;'; put 'put ''U2hlZXQxIikse3BvczpHLGhzOlEsZHQ6b2UsbmFtZTpnZX19fSwxMzQ6e246IldyaXRlUHJvdGVjdCJ9LDE0MDp7bjoiQ291bnRyeSIsZjpmdW5jdGlvbiBtVihTKXt2YXIgayxSPVswLDBdO3JldHVybiBrPVMucmVhZF9zaGlmdCgyKSxSWzBdPUQ2W2tdfHxrLGs9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LFJbMV09RDZba118fGssUn19LDE0MTp7bjoiSGlkZU9iaiIsZjpFY30sMTQ0OntuOiJTb3J0In0sMTQ2OntuOiJQYWxldHRlIixmOmZ1bmN0aW9uIHd0KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1bXTtSLS0gPjA7KWsucHVzaCh1ZChTKSk7cmV0dXJuIGt9fSwxNTE6e246IlN5''@;'; put 'put ''bmMifSwxNTI6e246IkxQciJ9LDE1Mzp7bjoiRHhHQ29sIn0sMTU0OntuOiJGbkdyb3VwTmFtZSJ9LDE1NTp7bjoiRmlsdGVyTW9kZSJ9LDE1Njp7bjoiQnVpbHRJbkZuR3JvdXBDb3VudCIsZjpFY30sMTU3OntuOiJBdXRvRmlsdGVySW5mbyJ9LDE1ODp7bjoiQXV0b0ZpbHRlciJ9LDE2MDp7''@;'; put 'put ''bjoiU2NsIixmOm5rfSwxNjE6e246IlNldHVwIixmOmZ1bmN0aW9uIGgyKFMsUil7dmFyIGs9e307cmV0dXJuIFI8MzJ8fChTLmwrPTE2LGsuaGVhZGVyPVBsKFMpLGsuZm9vdGVyPVBsKFMpLFMubCs9Miksa319LDE3NDp7bjoiU2Nlbk1hbiJ9LDE3NTp7bjoiU0NFTkFSSU8ifSwxNzY6e246''@;'; put 'put ''IlN4VmlldyJ9LDE3Nzp7bjoiU3h2ZCJ9LDE3ODp7bjoiU1hWSSJ9LDE4MDp7bjoiU3hJdmQifSwxODE6e246IlNYTEkifSwxODI6e246IlNYUEkifSwxODQ6e246IkRvY1JvdXRlIn0sMTg1OntuOiJSZWNpcE5hbWUifSwxODk6e246Ik11bFJrIixmOmZ1bmN0aW9uIG9WKFMsUil7Zm9yKHZh''@;'; put 'put ''ciBrPVMubCtSLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9W107Uy5sPGs7KW9lLnB1c2god28oUykpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtpZihvZS5sZW5ndGghPWdlLVEr''@;'; put 'put ''MSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkcsYzpRLEM6Z2UscmtyZWM6b2V9fX0sMTkwOntuOiJNdWxCbGFuayIsZjpmdW5jdGlvbiBYdGUoUyxSKXtmb3IodmFyIGs9Uy5sK1ItMixHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxvZT1bXTtTLmw8azspb2UucHVzaChTLnJlYWRfc2hpZnQoMikpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtpZihvZS5sZW5ndGghPWdlLVErMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0''@;'; put 'put ''aCBtaXNtYXRjaCIpO3JldHVybntyOkcsYzpRLEM6Z2UsaXhmZTpvZX19fSwxOTM6e246Ik1tcyIsZjpyMn0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6dW99LDIw''@;'; put 'put ''Mzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3Ry''@;'; put 'put ''ZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6RWN9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6dW99LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIy''@;'; put 'put ''NDp7bjoiWEYiLGY6ZnVuY3Rpb24gSncoUyxSLGspe3ZhciBHPXt9O3JldHVybiBHLmlmbnQ9Uy5yZWFkX3NoaWZ0KDIpLEcubnVtRm10SWQ9Uy5yZWFkX3NoaWZ0KDIpLEcuZmxhZ3M9Uy5yZWFkX3NoaWZ0KDIpLEcuZlN0eWxlPUcuZmxhZ3M+PjImMSxHLmRhdGE9ZnVuY3Rpb24gQ2woUyxS''@;'; put 'put ''LGssRyl7dmFyIFE9e30sb2U9Uy5yZWFkX3NoaWZ0KDQpLGdlPVMucmVhZF9zaGlmdCg0KSxwZT1TLnJlYWRfc2hpZnQoNCkseWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKFEucGF0dGVyblR5cGU9aHZbcGU+PjI2XSwhRy5jZWxsU3R5bGVzKXJldHVybiBRO3ZhciBQZT03Jm9lO3N3aXRjaChQZSl7''@;'; put 'put ''Y2FzZSAxOlEuaGFsaWduPSJsZWZ0IjticmVhaztjYXNlIDI6US5oYWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOlEuaGFsaWduPSJyaWdodCJ9c3dpdGNoKFEuZldyYXA9b2U+PjMmMSxQZT1vZT4+NCY3KXtjYXNlIDA6US52YWxpZ249InRvcCI7YnJlYWs7Y2FzZSAxOlEudmFsaWduPSJj''@;'; put 'put ''ZW50ZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0iYm90dG9tIn1yZXR1cm4gUS5mSnVzdExhc3Q9b2U+PjcmMSxRLnRyb3Q9b2U+PjgmMjU1LFEuY0luZGVudD1vZT4+MTYmMTUsUS5mU2hyaW5rVG9GaXQ9b2U+PjIwJjEsUS5pUmVhZE9yZGVyPW9lPj4yMiYyLFEuZkF0ck51bT1vZT4+MjYm''@;'; put 'put ''MSxRLmZBdHJGbnQ9b2U+PjI3JjEsUS5mQXRyQWxjPW9lPj4yOCYxLFEuZkF0ckJkcj1vZT4+MjkmMSxRLmZBdHJQYXQ9b2U+PjMwJjEsUS5mQXRyUHJvdD1vZT4+MzEmMSxRLmRnTGVmdD0xNSZnZSxRLmRnUmlnaHQ9Z2U+PjQmMTUsUS5kZ1RvcD1nZT4+OCYxNSxRLmRnQm90dG9tPWdlPj4x''@;'; put 'put ''MiYxNSxRLmljdkxlZnQ9Z2U+PjE2JjEyNyxRLmljdlJpZ2h0PWdlPj4yMyYxMjcsUS5ncmJpdERpYWc9Z2U+PjMwJjMsUS5pY3ZUb3A9MTI3JnBlLFEuaWN2Qm90dG9tPXBlPj43JjEyNyxRLmljdkRpYWc9cGU+PjE0JjEyNyxRLmRnRGlhZz1wZT4+MjEmMTUsUS5pY3ZGb3JlPTEyNyZ5ZSxR''@;'; put 'put ''LmljdkJhY2s9eWU+PjcmMTI3LFEuZnN4QnV0dG9uPXllPj4xNCYxLFF9KFMsMCwwLGspLEd9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiAkdyhTLFIpe3JldHVybiAwPT09Unx8Uy5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpyMn0sMjI3''@;'; put 'put ''OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIEp0ZShTLFIpe2Zvcih2YXIgaz1bXSxHPVMucmVhZF9zaGlmdCgyKTtHLS07KWsucHVzaChzMihTKSk7cmV0dXJuIGt9fSwyMzM6e246IkJrSGltIn0sMjM1OntuOiJNc29EcmF3aW5nR3JvdXAifSwyMzY6e246Ik1z''@;'; put 'put ''b0RyYXdpbmcifSwyMzc6e246Ik1zb0RyYXdpbmdTZWxlY3Rpb24ifSwyMzk6e246IlBob25ldGljSW5mbyJ9LDI0MDp7bjoiU3hSdWxlIn0sMjQxOntuOiJTWEV4In0sMjQyOntuOiJTeEZpbHQifSwyNDQ6e246IlN4RFhGIn0sMjQ1OntuOiJTeEl0bSJ9LDI0Njp7bjoiU3hOYW1lIn0sMjQ3''@;'; put 'put ''OntuOiJTeFNlbGVjdCJ9LDI0ODp7bjoiU1hQYWlyIn0sMjQ5OntuOiJTeEZtbGEifSwyNTE6e246IlN4Rm9ybWF0In0sMjUyOntuOiJTU1QiLGY6ZnVuY3Rpb24gVzYoUyxSKXtmb3IodmFyIGs9Uy5sK1IsRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksb2U9W10sZ2U9MDtn''@;'; put 'put ''ZSE9USYmUy5sPGs7KytnZSlvZS5wdXNoKGZjKFMpKTtyZXR1cm4gb2UuQ291bnQ9RyxvZS5VbmlxdWU9USxvZX19LDI1Mzp7bjoiTGFiZWxTc3QiLGY6ZnVuY3Rpb24gclYoUyl7dmFyIFI9dzAoUyk7cmV0dXJuIFIuaXNzdD1TLnJlYWRfc2hpZnQoNCksUn19LDI1NTp7bjoiRXh0U1NUIixm''@;'; put 'put ''OmZ1bmN0aW9uIENlKFMsUil7dmFyIGs9e307cmV0dXJuIGsuZHNzdD1TLnJlYWRfc2hpZnQoMiksUy5sKz1SLTIsa319LDI1Njp7bjoiU1hWREV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1''@;'; put 'put ''OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOnc0fSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwzMjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246''@;'; put 'put ''IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwz''@;'; put 'put ''NTI6e246IlVzZXNFTEZzIixmOnVvfSwzNTM6e246IkRTRiIsZjpyMn0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQw''@;'; put 'put ''ODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQifSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gZDIoUyxSLGspe3ZhciBHPVMu''@;'; put 'put ''bCtSLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTtpZihrLnNiY2NoPW9lLDEwMjU9PW9lfHwxNDg0OT09b2UpcmV0dXJuW29lLFFdO2lmKG9lPDF8fG9lPjI1NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK29lKTtmb3IodmFyIGdlPXJj''@;'; put 'put ''KFMsb2UpLHBlPVtdO0c+Uy5sOylwZS5wdXNoKG51KFMpKTtyZXR1cm5bb2UsUSxnZSxwZV19fSw0MzE6e246IlByb3Q0UmV2IixmOnVvfSw0MzI6e246IkNvbmRGbXQifSw0MzM6e246IkNGIn0sNDM0OntuOiJEVmFsIn0sNDM3OntuOiJEQ29uQmluIn0sNDM4OntuOiJUeE8iLGY6ZnVuY3Rp''@;'; put 'put ''b24gXzUoUyxSLGspe3ZhciBHPVMubCxRPSIiLG9lPS0xO3RyeXtTLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoay5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9TLmwrPTY6ZnVuY3Rpb24gcGMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO1MubCsrO3ZhciBrPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgyKTtTLmwrPTJ9KFMpO3ZhciB5ZT1TLnJlYWRfc2hpZnQoMik7Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9TmU7Zm9yKHZhciBZZT0xO1llPFMubGVucy5sZW5ndGgtMTsrK1llKXtpZihTLmwtRyE9Uy5s''@;'; put 'put ''ZW5zW1llXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBldD1TW1MubF07aWYoKFErPXJjKFMsUy5sZW5zW1llKzFdLVMubGVuc1tZZV0tMSkpLmxlbmd0aD49KGV0P3llOjIqeWUpKWJyZWFrfWlmKFEubGVuZ3RoIT09eWUmJlEubGVuZ3RoIT09Mip5''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIreWUrIiAhPSAiK1EubGVuZ3RoKTtyZXR1cm4gUy5sPUcrUix7dDpRLGlmbnQ6b2V9fWNhdGNoe3JldHVybiBTLmw9RytSLHt0OlEsaWZudDpvZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOnVvfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0''@;'; put 'put ''aW9uIGhWKFMsUil7dmFyIGs9czIoUyk7Uy5sKz0xNjt2YXIgRz1mdW5jdGlvbiBabChTLFIpe3ZhciBrPVMubCtSLEc9Uy5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1HKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrRyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''O1MubCs9Mjt2YXIgb2UsZ2UscGUseWUsTmUsWWUsUGU9IiI7MTYmUSYmKG9lPUM0KFMpKSwxMjgmUSYmKGdlPUM0KFMpKSwhKDI1NyZ+USkmJihwZT1DNChTKSksMT09KDI1NyZRKSYmKHllPWZ1bmN0aW9uIFNmKFMsUil7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2goayl7Y2FzZSJl''@;'; put 'put ''MGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJuIGZ1bmN0aW9uIEwxKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMubCxHPSExO1I+MjQmJihTLmwrPVItMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PVMucmVhZF9zaGlmdCgxNikmJihHPSEw''@;'; put 'put ''KSxTLmw9ayk7dmFyIFE9Uy5yZWFkX3NoaWZ0KChHP1ItMjQ6Uik+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBHJiYoUy5sKz0yNCksUX0oUyk7Y2FzZSIwMzAzMDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIGJvKFMpe2Zvcih2YXIgUj1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMiksaz0iIjtSLS0gPjA7KWsrPSIuLi8iO3ZhciBHPVMucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIik7aWYoUy5sKz0yLDU3MDA1IT1TLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09Uy5yZWFkX3NoaWZ0KDQpKXJl''@;'; put 'put ''dHVybiBrK0cucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBvZT1TLnJlYWRfc2hpZnQoNCk7aWYoMyE9Uy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIGsrUy5yZWFkX3NoaWZ0KG9lPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKX0oUyk7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIitrKX19KFMpKSw4JlEmJihQZT1DNChTKSksMzImUSYmKE5lPVMucmVhZF9zaGlmdCgxNikpLDY0JlEmJihZZT1IMyhTKSksUy5sPWs7dmFyIGV0PWdlfHxwZXx8eWV8fCIiO2V0JiZQZSYmKGV0Kz0iIyIrUGUp''@;'; put 'put ''LGV0fHwoZXQ9IiMiK1BlKSwyJlEmJiIvIj09ZXQuY2hhckF0KDApJiYiLyIhPWV0LmNoYXJBdCgxKSYmKGV0PSJmaWxlOi8vIitldCk7dmFyIGN0PXtUYXJnZXQ6ZXR9O3JldHVybiBOZSYmKGN0Lmd1aWQ9TmUpLFllJiYoY3QudGltZT1ZZSksb2UmJihjdC5Ub29sdGlwPW9lKSxjdH0oUyxS''@;'; put 'put ''LTI0KTtyZXR1cm5bayxHXX19LDQ0MTp7bjoiTGVsIn0sNDQyOntuOiJDb2RlTmFtZSIsZjpudX0sNDQzOntuOiJTWEZEQlR5cGUifSw0NDQ6e246IlByb3Q0UmV2UGFzcyIsZjpFY30sNDQ1OntuOiJPYk5vTWFjcm9zIn0sNDQ2OntuOiJEdiJ9LDQ0ODp7bjoiRXhjZWw5RmlsZSIsZjpyMn0s''@;'; put 'put ''NDQ5OntuOiJSZWNhbGNJZCIsZjpmdW5jdGlvbiBkZChTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e246IkVudEV4VTIiLGY6cjJ9LDUxMjp7bjoiRGltZW5zaW9ucyIsZjpYd30sNTEzOntuOiJCbGFuayIsZjpRdGV9LDUxNTp7bjoiTnVtYmVy''@;'; put 'put ''IixmOmZ1bmN0aW9uIGxWKFMsUixrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBHPXcwKFMpLFE9UGwoUyk7cmV0dXJuIEcudmFsPVEsR319LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gS0EoUyxSLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9''@;'; put 'put ''NSk7dmFyIFE9dzAoUyk7Mj09ay5iaWZmJiZTLmwrKzt2YXIgb2U9bnUoUywwLGspO3JldHVybiBRLnZhbD1vZSxRfX0sNTE3OntuOiJCb29sRXJyIixmOkU0fSw1MTk6e246IlN0cmluZyIsZjpPMH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gS2UoUyl7dmFyIFI9e307Ui5yPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxSLmM9Uy5yZWFkX3NoaWZ0KDIpLFIuY250PVMucmVhZF9zaGlmdCgyKS1SLmM7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUi5peGZlPTQwOTUmUSw3JkcmJihSLmxl''@;'; put 'put ''dmVsPTcmRyksMzImRyYmKFIuaGlkZGVuPSEwKSw2NCZHJiYoUi5ocHQ9ay8yMCksUn19LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOmt2fSw1NDk6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDU2Njp7bjoiVGFibGUifSw1NzQ6e246IldpbmRvdzIiLGY6ZnVuY3Rpb24g''@;'; put 'put ''cXRlKFMsUixrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw1KXJldHVybnt9O3ZhciBHPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57UlRMOjY0JkcsZ3JpZDohISgyJkcpLGZyb3plbjohISg4JkcpfX19LDYzODp7bjoiUksiLGY6ZnVuY3Rpb24gWEEoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LGs9Uy5yZWFkX3NoaWZ0KDIpLEc9d28oUyk7cmV0dXJue3I6UixjOmssaXhmZTpHWzBdLHJrbnVtOkdbMV19fX0sNjU5OntuOiJTdHlsZSIsZjpmdW5jdGlvbiBMMChTLFIsayl7cmV0dXJuIFMubCs9Uix7fX19LDEwNDg6e246IkJpZ05hbWUifSwxMDU0OntuOiJGb3JtYXQiLGY6ZnVuY3Rp''@;'; put 'put ''b24gcXcoUyxSLGspe3JldHVybltTLnJlYWRfc2hpZnQoMiksWDAoUywwLGspXX19LDEwODQ6e246IkNvbnRpbnVlQmlnTmFtZSJ9LDEyMTI6e246IlNockZtbGEiLGY6ZnVuY3Rpb24gQXYoUyxSLGspe3ZhciBHPU00KFMpO1MubCsrO3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm5bSzMo''@;'; put 'put ''UyxSLT04LGspLFEsR119fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24gcFYoUyxSKXtTLnJlYWRfc2hpZnQoMik7dmFyIGs9czIoUyksRz1TLnJlYWRfc2hpZnQoKFItMTApLzIsImRiY3MtY29udCIpO3JldHVybltrLEc9Ry5yZXBsYWNlKEUsIiIpXX19LDIwNDk6e246Ildl''@;'; put 'put ''YlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIwNTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0YiLGY6VmN9LDIwNTg6''@;'; put 'put ''e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3OntuOiJSZWFsVGlt''@;'; put 'put ''ZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVyIn0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRMYWIifSwyMTM1Ontu''@;'; put 'put ''OiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJDckVyciJ9LDIxNTA6''@;'; put 'put ''e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6cjJ9LDIxNTI6e246IkZlYXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2Mjp7bjoiRmVhdHVy''@;'; put 'put ''ZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZydDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9''@;'; put 'put ''LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIHVsKFMpe1MubCs9Mjt2YXIgUj17Y3hmczowLGNyYzowfTtyZXR1cm4gUi5jeGZzPVMucmVhZF9zaGlmdCgyKSxSLmNyYz1TLnJlYWRfc2hpZnQoNCksUn0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gc0IoUyxSKXtTLmwrPTI7''@;'; put 'put ''dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mjtmb3IodmFyIFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVtdO1EtLSA+MDspb2UucHVzaCgkdihTKSk7cmV0dXJue2l4ZmU6RyxleHQ6b2V9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4''@;'; put 'put ''MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1EWFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBhdDEyIixmOnVvLHI6''@;'; put 'put ''MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEyfSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5j''@;'; put 'put ''dGlvbiBHNihTLFIsayl7aWYoIShrLmJpZmY8OCkpe3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm5bcmMoUyxHLGspLHJjKFMsUSxrKV19Uy5sKz1SfSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1bmN0aW9uIGFCKFMs''@;'; put 'put ''UixrKXt2YXIgRz1TLmwrUjtpZigxMjQyMjYhPT1TLnJlYWRfc2hpZnQoNCkpe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIHZvaWQoUy5sPUcpO3ZhciBnZSxvZT1TLnNsaWNlKFMubCk7Uy5sPUc7dHJ5e2dlPWNuKG9lLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59dmFyIHBlPW5yKGdl''@;'; put 'put ''LCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYocGUpcmV0dXJuIEVDKHBlLGspfX0scjoxMn0sMjE5OTp7bjoiR1VJRFR5cGVMaWIifSwyMjAwOntuOiJGbkdycDEyIn0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5jdGlvbiBUNChTKXty''@;'; put 'put ''ZXR1cm5bMCE9PVMucmVhZF9zaGlmdCg0KSwwIT09Uy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e246IkNvbXByZXNzUGljdHVyZXMiLGY6cjJ9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIwNjp7bjoiQ3J0TWxG''@;'; put 'put ''cnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoiRm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVuY3Rpb24gSXQoUyl7dmFyIFI9ZnVuY3Rpb24gbzIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTgse3R5cGU6Uixm''@;'; put 'put ''bGFnczprfX0oUyk7aWYoMjIxMSE9Ui50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrUi50eXBlKTtyZXR1cm4gMCE9PVMucmVhZF9zaGlmdCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNTdHJlYW0ifSwyMjE0''@;'; put 'put ''OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEyQSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7bjoiQ2hhcnQifSw0MDk5OntuOiJTZXJpZXMifSw0MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1hcmtlckZvcm1hdCJ9''@;'; put 'put ''LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQifSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0sNDEwOTp7bjoiU2VyaWVzVGV4dCJ9LDQxMTY6e246IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9LDQxMTk6e246IkJh''@;'; put 'put ''ciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntuOiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9LDQxMjQ6e246IkNydExpbmUifSw0MTI1OntuOiJBeGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJDYXRTZXJSYW5nZSJ9''@;'; put 'put ''LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQxMzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7bjoiVGV4dCJ9LDQxMzQ6e246IkZvbnRYIixmOkVjfSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdpbiJ9LDQxNDg6e246''@;'; put 'put ''IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQzZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3OntuOiJEcm9wQmFyIn0sNDE1ODp7bjoiUmFkYXIifSw0MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVudCJ9LDQxNjM6e246''@;'; put 'put ''IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1bmN0aW9uIGFDKFMsUixrKXt2YXIgRz17YXJlYTohMX07aWYoNSE9ay5iaWZmKXJldHVybiBTLmwrPVIsRzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9MywxNiZRJiYoRy5hcmVhPSEwKSxHfX0sNDE2''@;'; put 'put ''NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoi''@;'; put 'put ''QlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVuY3Rpb24gbHMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVtdO1ItLSA+MDspay5wdXNoKHVkKFMpKTtyZXR1cm4ga319LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0''@;'; put 'put ''M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0''@;'; put 'put ''MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpYd30sMTp7bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIHlWKFMpe3ZhciBSPXcwKFMpOysrUy5sO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUi50PSJuIixSLnZhbD1rLFJ9fSwzOntuOiJC''@;'; put 'put ''SUZGMk5VTSIsZjpmdW5jdGlvbiBiVihTKXt2YXIgUj13MChTKTsrK1MubDt2YXIgaz1QbChTKTtyZXR1cm4gUi50PSJuIixSLnZhbD1rLFJ9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiBBZihTLFIsayl7ay5iaWZmZ3Vlc3MmJjU9PWsuYmlmZiYmKGsuYmlmZj0yKTt2YXIgRz13MChT''@;'; put 'put ''KTsrK1MubDt2YXIgUT1YMChTLDAsayk7cmV0dXJuIEcudD0ic3RyIixHLnZhbD1RLEd9fSw1OntuOiJCb29sRXJyIixmOkU0fSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gb0MoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Uj8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChS''@;'; put 'put ''LCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9GIixmOlZjfSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6RWN9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjp1Mn0sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntu''@;'; put 'put ''OiJBcnJheSIsZjprdn0sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIHNDKFMsUil7Uy5sKz02LFMubCs9MixTLmwrPTEsUy5sKz0zLFMubCs9MSxTLmwrPVItMTN9fSw2Mjp7bjoiQklGRjJX''@;'; put 'put ''SU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJYRiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6RWN9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gYWgoUyl7dmFy''@;'; put 'put ''IFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9e2ZtdDpSLGVudjprLGxlbjpHLGRhdGE6Uy5zbGljZShTLmwsUy5sK0cpfTtyZXR1cm4gUy5sKz1HLFF9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6e246IlB1YiJ9LDE0''@;'; put 'put ''NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhOR3JhcGgifSwxNTA6e246IlNvdW5kIn0sMTY5OntuOiJDb29yZExpc3QifSwxNzE6e246IkdDVyJ9LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJhckVuZCJ9LDE5NDp7''@;'; put 'put ''bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0cmluZyIsZjpmdW5jdGlvbiBsQyhTLFIsayl7dmFyIEc9Uy5sK1IsUT13MChTKSxvZT1TLnJlYWRfc2hpZnQoMiksZ2U9cmMoUyxvZSxrKTtyZXR1cm4gUy5sPUcsUS50PSJzdHIiLFEudmFsPWdlLFF9fSwyMjM6e246''@;'; put 'put ''IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjpRQ30sNTIxOntuOiJCT0YiLGY6VmN9LDUzNjp7bjoiTGJsIixmOnRDfSw1NDc6e246IkV4dGVybk5hbWUiLGY6ZUN9LDU2MTp7''@;'; put 'put ''bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11bGEiLGY6UUN9LDEwMzM6e246IkJPRiIsZjpWY30sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0''@;'; put 'put ''b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7''@;'; put 'put ''bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxxUz1JZShLUywibiIpO2Z1bmN0aW9uIEdpKFMsUixrLEcpe3ZhciBRPStSfHwrcVNbUl07aWYoIWlzTmFOKFEpKXt2YXIgb2U9R3x8KGt8''@;'; put 'put ''fFtdKS5sZW5ndGh8fDAsZ2U9Uy5uZXh0KDQpO2dlLndyaXRlX3NoaWZ0KDIsUSksZ2Uud3JpdGVfc2hpZnQoMixvZSksb2U+MCYmQXIoaykmJlMucHVzaChrKX19ZnVuY3Rpb24gQWIoUyxSLGspe3JldHVybiBTfHwoUz1ibig3KSksUy53cml0ZV9zaGlmdCgyLFIpLFMud3JpdGVfc2hpZnQo''@;'; put 'put ''MixrKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgxLDApLFN9ZnVuY3Rpb24gWW5lKFMsUixrLEcpe2lmKG51bGwhPVIudilzd2l0Y2goUi50KXtjYXNlImQiOmNhc2UibiI6dmFyIFE9ImQiPT1SLnQ/UWUoSGUoUi52KSk6Ui52O3JldHVybiB2b2lkKFE9PSgwfFEpJiZRPj0w''@;'; put 'put ''JiZRPDY1NTM2P0dpKFMsMixmdW5jdGlvbiBfVihTLFIsayl7dmFyIEc9Ym4oOSk7cmV0dXJuIEFiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDIsayksR30oayxHLFEpKTpHaShTLDMsZnVuY3Rpb24gaWsoUyxSLGspe3ZhciBHPWJuKDE1KTtyZXR1cm4gQWIoRyxTLFIpLEcud3JpdGVfc2hpZnQo''@;'; put 'put ''OCxrLCJmIiksR30oayxHLFEpKSk7Y2FzZSJiIjpjYXNlImUiOnJldHVybiB2b2lkIEdpKFMsNSxmdW5jdGlvbiBabmUoUyxSLGssRyl7dmFyIFE9Ym4oOSk7cmV0dXJuIEFiKFEsUyxSKSxLaShrLEd8fCJiIixRKSxRfShrLEcsUi52LFIudCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2''@;'; put 'put ''b2lkIEdpKFMsNCxmdW5jdGlvbiBXbmUoUyxSLGspe3ZhciBHPWJuKDgrMiprLmxlbmd0aCk7cmV0dXJuIEFiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEcud3JpdGVfc2hpZnQoay5sZW5ndGgsaywic2JjcyIpLEcubDxHLmxlbmd0aD9HLnNsaWNlKDAsRy5sKTpHfShrLEcs''@;'; put 'put ''KFIudnx8IiIpLnNsaWNlKDAsMjU1KSkpfUdpKFMsMSxBYihudWxsLGssRykpfWZ1bmN0aW9uIFhuZShTLFIsayxHLFEpe3ZhciBvZT0xNitsMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMsUixRKTtpZihudWxsIT1SLnZ8fFIuYmYpaWYoUi5iZilHaShTLCJGb3JtdWxhIixmdW5jdGlvbiBC''@;'; put 'put ''NShTLFIsayxHLFEpe3ZhciBvZT1hMihSLGssUSksZ2U9ZnVuY3Rpb24gSkMoUyl7aWYobnVsbD09Uyl7dmFyIFI9Ym4oOCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoMSwzKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsNjU1MzUpLFJ9cmV0dXJuIE91KCJudW1iZXIiPT10eXBlb2YgUz9TOjApfShTLnYpLHBlPWJuKDYpO3BlLndyaXRlX3NoaWZ0KDIsMzMpLHBlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBQZT1ibihTLmJmLmxlbmd0aCksTmU9MDtOZTxTLmJmLmxlbmd0aDsrK05lKVBlW05lXT1T''@;'; put 'put ''LmJmW05lXTtyZXR1cm4gaihbb2UsZ2UscGUsUGVdKX0oUixrLEcsMCxvZSkpO2Vsc2Ugc3dpdGNoKFIudCl7Y2FzZSJkIjpjYXNlIm4iOkdpKFMsIk51bWJlciIsZnVuY3Rpb24gUXcoUyxSLGssRyl7dmFyIFE9Ym4oMTQpO3JldHVybiBhMihTLFIsRyxRKSxPdShrLFEpLFF9KGssRywiZCI9''@;'; put 'put ''PVIudD9RZShIZShSLnYpKTpSLnYsb2UpKTticmVhaztjYXNlImIiOmNhc2UiZSI6R2koUyw1MTcsZnVuY3Rpb24gTzEoUyxSLGssRyxRLG9lKXt2YXIgZ2U9Ym4oOCk7cmV0dXJuIGEyKFMsUixHLGdlKSxLaShrLG9lLGdlKSxnZX0oayxHLFIudixvZSwwLFIudCkpO2JyZWFrO2Nhc2UicyI6''@;'; put 'put ''Y2FzZSJzdHIiOmlmKFEuYm9va1NTVCl7dmFyIHBlPWFTKFEuU3RyaW5ncyxSLnYsUi5SP1Iucj1RcyhSLlIpOm51bGwsUS5yZXZTdHJpbmdzKTtpZihSLlIpZm9yKHZhciB5ZT0wO3llPFIuUi5sZW5ndGg7Kyt5ZSlSLlJbeWVdLnMmJmwwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx7dDoi''@;'; put 'put ''biIsdjowLHM6Ui5SW3llXS5zfSxRKTtHaShTLCJMYWJlbFNzdCIsZnVuY3Rpb24gJEEoUyxSLGssRyl7dmFyIFE9Ym4oMTApO3JldHVybiBhMihTLFIsRyxRKSxRLndyaXRlX3NoaWZ0KDQsayksUX0oayxHLHBlLG9lKSl9ZWxzZSBHaShTLCJMYWJlbCIsZnVuY3Rpb24gaVYoUyxSLGssRyxR''@;'; put 'put ''KXt2YXIgb2U9IVF8fDg9PVEuYmlmZixnZT1ibigrb2UrOCsoMStvZSkqay5sZW5ndGgpO3JldHVybiBhMihTLFIsRyxnZSksZ2Uud3JpdGVfc2hpZnQoMixrLmxlbmd0aCksb2UmJmdlLndyaXRlX3NoaWZ0KDEsMSksZ2Uud3JpdGVfc2hpZnQoKDErb2UpKmsubGVuZ3RoLGssb2U/InV0ZjE2''@;'; put 'put ''bGUiOiJzYmNzIiksZ2V9KGssRywoUi52fHwiIikuc2xpY2UoMCwyNTUpLG9lLFEpKTticmVhaztkZWZhdWx0OkdpKFMsIkJsYW5rIixhMihrLEcsb2UpKX1lbHNlIEdpKFMsIkJsYW5rIixhMihrLEcsb2UpKX1mdW5jdGlvbiBFSShTLFIsayl7dmFyIE5lLEc9YmkoKSxRPWsuU2hlZXROYW1l''@;'; put 'put ''c1tTXSxvZT1rLlNoZWV0c1tRXXx8e30sZ2U9KGt8fHt9KS5Xb3JrYm9va3x8e30scGU9KGdlLlNoZWV0c3x8W10pW1NdfHx7fSx5ZT1BcnJheS5pc0FycmF5KG9lKSxQZT04PT1SLmJpZmYsWWU9IiIsZXQ9W10sY3Q9b28ob2VbIiFyZWYiXXx8IkExIiksRXQ9UGU/NjU1MzY6MTYzODQ7aWYo''@;'; put 'put ''Y3QuZS5jPjI1NXx8Y3QuZS5yPj1FdCl7aWYoUi5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhvZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtjdC5lLmM9TWF0aC5taW4oY3QuZS5jLDI1NSksY3QuZS5yPU1hdGgubWluKGN0LmUuYyxF''@;'; put 'put ''dC0xKX1HaShHLDIwNTcseDQoMCwxNixSKSksR2koRywiQ2FsY01vZGUiLGEwKDEpKSxHaShHLCJDYWxjQ291bnQiLGEwKDEwMCkpLEdpKEcsIkNhbGNSZWZNb2RlIix0dSghMCkpLEdpKEcsIkNhbGNJdGVyIix0dSghMSkpLEdpKEcsIkNhbGNEZWx0YSIsT3UoLjAwMSkpLEdpKEcsIkNhbGNT''@;'; put 'put ''YXZlUmVjYWxjIix0dSghMCkpLEdpKEcsIlByaW50Um93Q29sIix0dSghMSkpLEdpKEcsIlByaW50R3JpZCIsdHUoITEpKSxHaShHLCJHcmlkU2V0IixhMCgxKSksR2koRywiR3V0cyIsZnVuY3Rpb24gWTYoUyl7dmFyIFI9Ym4oOCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsU1swXT9TWzBdKzE6MCksUi53cml0ZV9zaGlmdCgyLFNbMV0/U1sxXSsxOjApLFJ9KFswLDBdKSksR2koRywiSENlbnRlciIsdHUoITEpKSxHaShHLCJWQ2VudGVyIix0dSghMSkpO3ZhciBhdD1vZVsiIXByaW50Il0mJm9lWyIhcHJpbnQiXS5tYXJnaW5zfHxvZVsiIW1hcmdp''@;'; put 'put ''bnMiXTthdCYmKG51bGwhPWF0LmxlZnQmJkdpKEcsIkxlZnRNYXJnaW4iLE91KGF0LmxlZnQpKSxudWxsIT1hdC5yaWdodCYmR2koRywiUmlnaHRNYXJnaW4iLE91KGF0LnJpZ2h0KSksbnVsbCE9YXQudG9wJiZHaShHLCJUb3BNYXJnaW4iLE91KGF0LnRvcCkpLG51bGwhPWF0LmJvdHRvbSYm''@;'; put 'put ''R2koRywiQm90dG9tTWFyZ2luIixPdShhdC5ib3R0b20pKSwobnVsbCE9YXQuaGVhZGVyfHxudWxsIT1hdC5mb290ZXIpJiZHaShHLCJTZXR1cCIsZnVuY3Rpb24gaUMoUyxSKXt2YXIgaz1ibigzNCksRz0hMSxRPTcwO3JldHVybiJsYW5kc2NhcGUiPT0oUi5wcm9wc3x8e30pLm9yaWVudGF0''@;'; put 'put ''aW9uJiYoRz0hMCxRJj0tNjcpLEcmJihRJj0tNSksay53cml0ZV9zaGlmdCgyLDEpLGsud3JpdGVfc2hpZnQoMiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCks''@;'; put 'put ''ay53cml0ZV9zaGlmdCgyLDYwMCksay53cml0ZV9zaGlmdCgyLDYwMCksT3UobnVsbD09Uy5oZWFkZXI/LjU6Uy5oZWFkZXIsayksT3UobnVsbD09Uy5mb290ZXI/LjU6Uy5mb290ZXIsayksay53cml0ZV9zaGlmdCgyLDEpLGt9KGF0LG9lWyIhcHJpbnQiXXx8e30pKSksUGUmJmZ1bmN0aW9u''@;'; put 'put ''IFZ6KFMsUixrKXtpZihSKXt2YXIgRz0wO1IuZm9yRWFjaChmdW5jdGlvbihRLG9lKXsrK0c8PTI1NiYmUSYmKFEuYXV0byYmb1MoayxRLG9lKSxHaShTLCJDb2xJbmZvIixmdW5jdGlvbiAkNihTLFIpe3ZhciBrPWJuKDEyKTtrLndyaXRlX3NoaWZ0KDIsUiksay53cml0ZV9zaGlmdCgyLFIp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoMiwyNTYqUy53aWR0aCksay53cml0ZV9zaGlmdCgyLDApO3ZhciBHPTA7cmV0dXJuIFMuaGlkZGVuJiYoR3w9MSksay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxHPVMubGV2ZWx8fDApLGsud3JpdGVfc2hpZnQoMiwwKSxrfSh1OChvZSxRKSxvZSkp''@;'; put 'put ''KX0pfX0oRyxvZVsiIWNvbHMiXSxvZSksR2koRywiRGltZW5zaW9ucyIsZnVuY3Rpb24gcUEoUyxSKXt2YXIgaz04IT1SLmJpZmYmJlIuYmlmZj8yOjQsRz1ibigyKmsrNik7cmV0dXJuIEcud3JpdGVfc2hpZnQoayxTLnMuciksRy53cml0ZV9zaGlmdChrLFMuZS5yKzEpLEcud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixTLnMuYyksRy53cml0ZV9zaGlmdCgyLFMuZS5jKzEpLEcud3JpdGVfc2hpZnQoMiwwKSxHfShjdCxSKSksUGUmJihvZVsiIWxpbmtzIl09W10pLG9lWyIhcm93cyJdJiZQZSYmb2VbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihLdCxUbil7Zm9yKHZhciBycj1qaShUbiksU249MjU2''@;'; put 'put ''LGxyPTAsWG49S3Qucz8xNitsMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkt0LnN9LFIpOjAsQm49Y3Qucy5jO0JuPD1jdC5lLmM7KytCbikoeWU/KG9lW1RuXXx8W10pW0JuXTpvZVtldFtCbl0rcnJdKSYmKEJuPFNuJiYoU249Qm4pLEJuPmxyJiYobHI9Qm4pKTts''@;'; put 'put ''cjxTbiYmKFNuPWxyPTApLEdpKEcsIlJvdyIsZnVuY3Rpb24gbXQoUyxSLGspe3ZhciBHPWJuKDE2KTtHLndyaXRlX3NoaWZ0KDIsUiksRy53cml0ZV9zaGlmdCgyLGtbMF0pLEcud3JpdGVfc2hpZnQoMixrWzFdKzEpLEcud3JpdGVfc2hpZnQoMiwyMCpTLmhwdHx8MjAqVTMoUy5ocHgpfHwz''@;'; put 'put ''MzApLEcud3JpdGVfc2hpZnQoNCwwKTt2YXIgUT0wO3JldHVybiBRfD0wfFMubGV2ZWwsUy5oaWRkZW4mJihRfD0zMiksUXw9NjQsa1syXSYmKFF8PTEyOCksRy53cml0ZV9zaGlmdCgxLFEpLEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KDIsa1syXXx8MCksR30oS3QsVG4sW1Nu''@;'; put 'put ''LGxyLFhuXSkpfSk7Zm9yKHZhciBidD1jdC5zLnI7YnQ8PWN0LmUucjsrK2J0KXtZZT1qaShidCk7Zm9yKHZhciBqdD1jdC5zLmM7anQ8PWN0LmUuYzsrK2p0KXtidD09PWN0LnMuciYmKGV0W2p0XT1UYShqdCkpLE5lPWV0W2p0XStZZTt2YXIga3Q9eWU/KG9lW2J0XXx8W10pW2p0XTpvZVtO''@;'; put 'put ''ZV07a3QmJihYbmUoRyxrdCxidCxqdCxSKSxQZSYma3QubCYmb2VbIiFsaW5rcyJdLnB1c2goW05lLGt0LmxdKSl9fXZhciBPdD1wZS5Db2RlTmFtZXx8cGUubmFtZXx8UTtyZXR1cm4oUGV8fDU9PVIuYmlmZiYmb2VbIiFmcmVlemUiXSkmJkdpKEcsIldpbmRvdzIiLGZ1bmN0aW9uIHRWKFMs''@;'; put 'put ''UixrLEcpe3ZhciBRPUcmJkcuYmlmZnx8OCxvZT1ibig4PT1RPzE4OjEwKSxnZT0xNzE4O3JldHVybiBrPjAmJihnZSY9LTUxMyksV3QoUlsiIWdyaWRsaW5lcyJdKSYmKGdlJj0tMyksUlsiIWZyZWV6ZSJdJiYoZ2V8PTgpLFMmJlMuUlRMJiYoZ2V8PTY0KSw1PT1RJiYoZ2U9NDQ2KSxvZS53''@;'; put 'put ''cml0ZV9zaGlmdCgyLGdlKSw4PT1RPyhvZS53cml0ZV9zaGlmdCg0LDApLG9lLndyaXRlX3NoaWZ0KDQsNjQpLG9lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCwwKSk6KG9lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCwwKSksb2V9KChnZS5WaWV3c3x8W10p''@;'; put 'put ''WzBdLG9lLFMpKSwoUGV8fDU9PVIuYmlmZikmJm9lWyIhZnJlZXplIl0mJkdpKEcsIlBhbmUiLGZ1bmN0aW9uIHdsKFMpeyJzdHJpbmciPT10eXBlb2YgUyYmKFM9Tm8oUykpO3ZhciBSPWJuKDEwKTtyZXR1cm4gUi53cml0ZV9zaGlmdCgyLFMuYyksUi53cml0ZV9zaGlmdCgyLFMuciksUi53''@;'; put 'put ''cml0ZV9zaGlmdCgyLFMuciksUi53cml0ZV9zaGlmdCgyLFMuYyksUi53cml0ZV9zaGlmdCgxLDMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfShvZVsiIWZyZWV6ZSJdKSksUGUmJm9lWyIhc2VsIl0mJkdpKEcsIlNlbGVjdGlvbiIsZnVuY3Rpb24gcmsoUyxSKXt2YXIgaz1ibigxNSksRz1TLmNl''@;'; put 'put ''bGw7aWYoIUcpe2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPXFpKE1zKFMucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP05vKEcpOkc7aWYoUil7dmFyIG9l''@;'; put 'put ''PSJzdHJpbmciPT10eXBlb2YgUj9ObyhSKTpSO2sud3JpdGVfc2hpZnQoMSxRLnI+PW9lLnImJlEuYz49b2UuYz8wOlEucj49b2UuciYmUS5jPG9lLmM/MjpRLnI8b2UuciYmUS5jPj1vZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoMixRLnIp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoMixRLmMpLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMSksZnVuY3Rpb24gVjMoUyxSKXtSfHwoUj1ibig2KSksUi53cml0ZV9zaGlmdCgyLFMucz9TLnMucjpTLnIpLFIud3JpdGVfc2hpZnQoMixTLmU/Uy5lLnI6Uy5yKSxSLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsUy5zP1Mucy5jOlMuYyksUi53cml0ZV9zaGlmdCgxLFMuZT9TLmUuYzpTLmMpfSh7czpRLGU6UX0sayksa30ob2VbIiFzZWwiXSxvZVsiIWZyZWV6ZSJdKSksUGUmJihvZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZHaShHLCJNZXJnZUNlbGxzIixmdW5jdGlvbiB1VihTKXt2YXIgUj1i''@;'; put 'put ''bigyKzgqUy5sZW5ndGgpO1Iud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spdnUoU1trXSxSKTtyZXR1cm4gUn0ob2VbIiFtZXJnZXMiXSkpLFBlJiZmdW5jdGlvbiBPOChTLFIpe2Zvcih2YXIgaz0wO2s8UlsiIWxpbmtzIl0ubGVuZ3RoOysrayl7''@;'; put 'put ''dmFyIEc9UlsiIWxpbmtzIl1ba107R2koUywiSExpbmsiLGZWKEcpKSxHWzFdLlRvb2x0aXAmJkdpKFMsIkhMaW5rVG9vbHRpcCIsZ1YoRykpfWRlbGV0ZSBSWyIhbGlua3MiXX0oRyxvZSksR2koRywiQ29kZU5hbWUiLGNsKE90KSksUGUmJmZ1bmN0aW9uIE56KFMsUil7dmFyIGs9Ym4oMTkp''@;'; put 'put ''O2sud3JpdGVfc2hpZnQoNCwyMTUxKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9zaGlmdCg0LDApLEdpKFMsIkZlYXRIZHIiLGspLChrPWJuKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUy''@;'; put 'put ''KSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDQsNCksay53cml0ZV9zaGlmdCgyLDApLHZ1KG9vKFJbIiFy''@;'; put 'put ''ZWYiXXx8IkExIiksayksay53cml0ZV9zaGlmdCg0LDQpLEdpKFMsIkZlYXQiLGspfShHLG9lKSxHaShHLCJFT0YiKSxHLmVuZCgpfWZ1bmN0aW9uIEJ6KFMsUixrKXt2YXIgRz1iaSgpLFE9KFN8fHt9KS5Xb3JrYm9va3x8e30sb2U9US5TaGVldHN8fFtdLGdlPVEuV0JQcm9wc3x8e30scGU9''@;'; put 'put ''OD09ay5iaWZmLHllPTU9PWsuYmlmZjtHaShHLDIwNTcseDQoMCw1LGspKSwieGxhIj09ay5ib29rVHlwZSYmR2koRywiQWRkaW4iKSxHaShHLCJJbnRlcmZhY2VIZHIiLHBlP2EwKDEyMDApOm51bGwpLEdpKEcsIk1tcyIsZnVuY3Rpb24gR3coUyxSKXtSfHwoUj1ibihTKSk7Zm9yKHZhciBr''@;'; put 'put ''PTA7azxTOysraylSLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFJ9KDIpKSx5ZSYmR2koRywiVG9vbGJhckhkciIpLHllJiZHaShHLCJUb29sYmFyRW5kIiksR2koRywiSW50ZXJmYWNlRW5kIiksR2koRywiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIFU2KFMsUil7dmFyIGs9IVJ8fDg9PVIuYmlm''@;'; put 'put ''ZixHPWJuKGs/MTEyOjU0KTtmb3IoRy53cml0ZV9zaGlmdCg4PT1SLmJpZmY/MjoxLDcpLGsmJkcud3JpdGVfc2hpZnQoMSwwKSxHLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxHLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoaz8wOjUzNjg3MDkxMikpO0cubDxHLmxlbmd0aDspRy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLGs/MDozMik7cmV0dXJuIEd9KDAsaykpLEdpKEcsIkNvZGVQYWdlIixhMChwZT8xMjAwOjEyNTIpKSxwZSYmR2koRywiRFNGIixhMCgwKSkscGUmJkdpKEcsIkV4Y2VsOUZpbGUiKSxHaShHLCJSUlRhYklkIixmdW5jdGlvbiB2VihTKXtmb3IodmFyIFI9Ym4oMipTKSxrPTA7azxT''@;'; put 'put ''OysraylSLndyaXRlX3NoaWZ0KDIsaysxKTtyZXR1cm4gUn0oUy5TaGVldE5hbWVzLmxlbmd0aCkpLHBlJiZTLnZiYXJhdyYmR2koRywiT2JQcm9qIikscGUmJlMudmJhcmF3JiZHaShHLCJDb2RlTmFtZSIsY2woZ2UuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksR2koRywiQnVpbHRJbkZu''@;'; put 'put ''R3JvdXBDb3VudCIsYTAoMTcpKSxHaShHLCJXaW5Qcm90ZWN0Iix0dSghMSkpLEdpKEcsIlByb3RlY3QiLHR1KCExKSksR2koRywiUGFzc3dvcmQiLGEwKDApKSxwZSYmR2koRywiUHJvdDRSZXYiLHR1KCExKSkscGUmJkdpKEcsIlByb3Q0UmV2UGFzcyIsYTAoMCkpLEdpKEcsIldpbmRvdzEi''@;'; put 'put ''LGZ1bmN0aW9uIEt0ZSgpe3ZhciBTPWJuKDE4KTtyZXR1cm4gUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMjkyODApLFMud3JpdGVfc2hpZnQoMiwxNzYwMCksUy53cml0ZV9zaGlmdCgyLDU2KSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsNTAwKSxTfSgpKSxHaShHLCJCYWNrdXAiLHR1KCExKSksR2koRywiSGlkZU9iaiIsYTAoMCkpLEdpKEcsIkRhdGUxOTA0Iix0dSgidHJ1ZSI9PWZ1bmN0aW9uIEZTKFMpe3JldHVybiBTLldvcmtib29rJiZT''@;'; put 'put ''Lldvcmtib29rLldCUHJvcHMmJnRpKFMuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KFMpKSksR2koRywiQ2FsY1ByZWNpc2lvbiIsdHUoITApKSxwZSYmR2koRywiUmVmcmVzaEFsbCIsdHUoITEpKSxHaShHLCJCb29rQm9vbCIsYTAoMCkpLHIwPUk2KFswLDE2''@;'; put 'put ''Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIEtuZShTLFIsayl7KCgoUnx8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxbe3N6OjEyLGNv''@;'; put 'put ''bG9yOnt0aGVtZToxfSxuYW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihHKXtHaShTLCJGb250IixmdW5jdGlvbiBuVihTLFIpe3ZhciBrPVMubmFtZXx8IkFyaWFsIixHPVImJjU9PVIuYmlmZixvZT1ibihHPzE1K2subGVuZ3RoOjE2KzIq''@;'; put 'put ''ay5sZW5ndGgpO29lLndyaXRlX3NoaWZ0KDIsMjAqKFMuc3p8fDEyKSk7dmFyIGdlPTA7cmV0dXJuIFMuYm9sZCYmKGdlfD0xKSxTLml0YWxpYyYmKGdlfD0yKSxTLnN0cmlrZSYmKGdlfD04KSxTLnNoYWRvdyYmKGdlfD0zMiksb2Uud3JpdGVfc2hpZnQoMSxnZSksb2Uud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwwKSxvZS53cml0ZV9zaGlmdCgyLFMuY29sb3I/UDQoUy5jb2xvciw2NCk6NjQpLG9lLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApLG9lLndyaXRlX3NoaWZ0KDIsInN1cGVyIj09Uy52YWxpZ24/MToic3ViIj09Uy52YWxpZ24/MjowKSxvZS53cml0ZV9zaGlmdCgxLFMudW5kZXJs''@;'; put 'put ''aW5lfHwwKSxvZS53cml0ZV9zaGlmdCgxLG9lLmZhbWlseXx8MCksb2Uud3JpdGVfc2hpZnQoMSxvZS5jaGFyc2V0fHwwKSxvZS53cml0ZV9zaGlmdCgxLDApLG9lLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEd8fG9lLndyaXRlX3NoaWZ0KDEsMSksb2Uud3JpdGVfc2hpZnQoKEc/MToyKSpr''@;'; put 'put ''Lmxlbmd0aCxrLEc/InNiY3MiOiJ1dGYxNmxlIiksb2V9KEcsaykpfSl9KEcsUyxrKSxmdW5jdGlvbiBxbmUoUyxSLGspe1ImJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYm''@;'; put 'put ''R2koUywiRm9ybWF0IixhVihRLFJbUV0saykpfSl9KEcsUy5TU0YsayksZnVuY3Rpb24gRzUoUyxSKXtmb3IodmFyIGs9MDtrPDE2OysraylHaShTLCJYRiIseTUoe251bUZtdElkOjAsc3R5bGU6ITB9LDAsUikpO1IuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dpKFMsIlhGIix5NShH''@;'; put 'put ''LDAsUikpfSl9KEcsayksR2koRywiUGFsZXR0ZSIsZnVuY3Rpb24gQ3QoUyl7dmFyIFI9Ym4oMjI2KTtSLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgaz0wO2s8NTY7KytrKXt2YXIgRz1TW2srOF18fHY0W2srOF07Ui53cml0ZV9zaGlmdCgxLEdbMF0pLFIud3JpdGVfc2hpZnQoMSxHWzFd''@;'; put 'put ''KSxSLndyaXRlX3NoaWZ0KDEsR1syXSksUi53cml0ZV9zaGlmdCgxLDApfXJldHVybiBSfShyMCkpLHIwPXF0KHY0KSxwZSYmR2koRywiVXNlc0VMRnMiLHR1KCExKSk7dmFyIE5lPUcuZW5kKCksWWU9YmkoKTtwZSYmR2koWWUsIkNvdW50cnkiLGZ1bmN0aW9uIGRpKFMpe3JldHVybiBTfHwo''@;'; put 'put ''Uz1ibig0KSksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQoMiwxKSxTfSgpKSxwZSYmay5TdHJpbmdzJiZmdW5jdGlvbiBVbmUoUyxSLGssRyl7dmFyIFE9R3x8KGt8fFtdKS5sZW5ndGh8fDA7aWYoUTw9ODIyNClyZXR1cm4gR2koUyxSLGssUSk7dmFyIG9lPStSfHwrcVNbUl07''@;'; put 'put ''aWYoIWlzTmFOKG9lKSl7Zm9yKHZhciBnZT1rLnBhcnRzfHxbXSxwZT0wLHllPTAsUGU9MDtQZSsoZ2VbcGVdfHw4MjI0KTw9ODIyNDspUGUrPWdlW3BlXXx8ODIyNCxwZSsrO3ZhciBOZT1TLm5leHQoNCk7Zm9yKE5lLndyaXRlX3NoaWZ0KDIsb2UpLE5lLndyaXRlX3NoaWZ0KDIsUGUpLFMu''@;'; put 'put ''cHVzaChrLnNsaWNlKHllLHllK1BlKSkseWUrPVBlO3llPFE7KXtmb3IoKE5lPVMubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksUGU9MDtQZSsoZ2VbcGVdfHw4MjI0KTw9ODIyNDspUGUrPWdlW3BlXXx8ODIyNCxwZSsrO05lLndyaXRlX3NoaWZ0KDIsUGUpLFMucHVzaChrLnNsaWNlKHll''@;'; put 'put ''LHllK1BlKSkseWUrPVBlfX19KFllLCJTU1QiLGZ1bmN0aW9uIG1zKFMsUil7dmFyIGs9Ym4oOCk7ay53cml0ZV9zaGlmdCg0LFMuQ291bnQpLGsud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSk7Zm9yKHZhciBHPVtdLFE9MDtRPFMubGVuZ3RoOysrUSlHW1FdPU5jKFNbUV0sUik7dmFyIG9lPWoo''@;'; put 'put ''W2tdLmNvbmNhdChHKSk7cmV0dXJuIG9lLnBhcnRzPVtrLmxlbmd0aF0uY29uY2F0KEcubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2UubGVuZ3RofSkpLG9lfShrLlN0cmluZ3MsaykpLEdpKFllLCJFT0YiKTt2YXIgZXQ9WWUuZW5kKCksY3Q9YmkoKSxFdD0wLGF0PTA7Zm9yKGF0PTA7YXQ8''@;'; put 'put ''Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2F0KUV0Kz0ocGU/MTI6MTEpKyhwZT8yOjEpKlMuU2hlZXROYW1lc1thdF0ubGVuZ3RoO3ZhciBidD1OZS5sZW5ndGgrRXQrZXQubGVuZ3RoO2ZvcihhdD0wO2F0PFMuU2hlZXROYW1lcy5sZW5ndGg7KythdClHaShjdCwiQm91bmRTaGVldDgiLGwyKHtw''@;'; put 'put ''b3M6YnQsaHM6KG9lW2F0XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6Uy5TaGVldE5hbWVzW2F0XX0saykpLGJ0Kz1SW2F0XS5sZW5ndGg7dmFyIGt0PWN0LmVuZCgpO2lmKEV0IT1rdC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIitFdCsiICE9ICIra3QubGVuZ3RoKTt2YXIgT3Q9''@;'; put 'put ''W107cmV0dXJuIE5lLmxlbmd0aCYmT3QucHVzaChOZSksa3QubGVuZ3RoJiZPdC5wdXNoKGt0KSxldC5sZW5ndGgmJk90LnB1c2goZXQpLHkwKFtPdF0pfWZ1bmN0aW9uIFRJKFMsUil7dmFyIGs9Unx8e307c3dpdGNoKGsuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''Sm5lKFMsUil7dmFyIGs9Unx8e30sRz1bXTtJZihSJiZSLlBQSXx8OTYpLFMmJiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxrLnJldnNzZj1rZShTLlNTRiksay5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLGsuc3NmPVMu''@;'; put 'put ''U1NGKSxTLlN0eWxlcz17Rm9udHM6ay5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczprLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUi''@;'; put 'put ''fV0sQm9yZGVyczprLkJvcmRlcnM9W3t9XSxEWEY6ay5EWEY9Uy5TdHlsZXMmJlMuU3R5bGVzLkRYRnx8W119LEk0KGsuRm9udHNbMF0pLGsuU3RyaW5ncz1bXSxrLlN0cmluZ3MuQ291bnQ9MCxrLlN0cmluZ3MuVW5pcXVlPTAscTM/ay5yZXZTdHJpbmdzPW5ldyBNYXA6KGsucmV2U3RyaW5n''@;'; put 'put ''cz17fSxrLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBrLnJldlN0cmluZ3MuZm9vKSxQZihrKSxrLmNlbGxYZnM9W10say5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sbDAoay5jZWxsWGZzLGsuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwo''@;'; put 'put ''Uy5Qcm9wcz17fSk7Zm9yKHZhciBRPTA7UTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrUSlHW0cubGVuZ3RoXT1FSShRLGssUyk7cmV0dXJuIEcudW5zaGlmdChCeihTLEcsaykpLHkwKFtHXSl9KFMsUik7Y2FzZSA0OmNhc2UgMzpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uICRuZShTLFIpe3ZhciBr''@;'; put 'put ''PVJ8fHt9O251bGwhPWxlJiZudWxsPT1rLmRlbnNlJiYoay5kZW5zZT1sZSk7Zm9yKHZhciBHPWJpKCksUT0wLG9lPTA7b2U8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK29lKVMuU2hlZXROYW1lc1tvZV09PWsuc2hlZXQmJihRPW9lKTtpZigwPT1RJiZrLnNoZWV0JiZTLlNoZWV0TmFtZXNbMF0h''@;'; put 'put ''PWsuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIray5zaGVldCk7cmV0dXJuIEdpKEcsND09ay5iaWZmPzEwMzM6Mz09ay5iaWZmPzUyMTo5LHg0KDAsMTYsaykpLGZ1bmN0aW9uIEduZShTLFIsayxHKXt2YXIgZ2UsUT1BcnJheS5pc0FycmF5KFIpLG9lPW9vKFJb''@;'; put 'put ''IiFyZWYiXXx8IkExIikscGU9IiIseWU9W107aWYob2UuZS5jPjI1NXx8b2UuZS5yPjE2MzgzKXtpZihHLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKFJbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7b2UuZS5jPU1hdGgubWluKG9lLmUu''@;'; put 'put ''YywyNTUpLG9lLmUucj1NYXRoLm1pbihvZS5lLmMsMTYzODMpLGdlPXJhKG9lKX1mb3IodmFyIFBlPW9lLnMucjtQZTw9b2UuZS5yOysrUGUpe3BlPWppKFBlKTtmb3IodmFyIE5lPW9lLnMuYztOZTw9b2UuZS5jOysrTmUpe1BlPT09b2Uucy5yJiYoeWVbTmVdPVRhKE5lKSksZ2U9eWVbTmVd''@;'; put 'put ''K3BlO3ZhciBZZT1RPyhSW1BlXXx8W10pW05lXTpSW2dlXTtZZSYmWW5lKFMsWWUsUGUsTmUpfX19KEcsUy5TaGVldHNbUy5TaGVldE5hbWVzW1FdXSwwLGspLEdpKEcsMTApLEcuZW5kKCl9KFMsUil9dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitrLmJvb2tUeXBlKyIgZm9yIEJJ''@;'; put 'put ''RkYiKX12YXIgbWQ9ZnVuY3Rpb24oKXt2YXIgUz17Y2VudGVyQ29udGludW91czoiY2VudGVyIixqdXN0aWZ5OiJsZWZ0In07ZnVuY3Rpb24gayhZZSxldCl7dmFyIGN0PWV0fHx7fTtudWxsIT1sZSYmbnVsbD09Y3QuZGVuc2UmJihjdC5kZW5zZT1sZSk7dmFyIEV0PWN0LmRlbnNlP1tdOnt9''@;'; put 'put ''LGF0PShZZT1ZZS5yZXBsYWNlKC88IS0tLio/LS0+L2csIiIpKS5tYXRjaCgvPHRhYmxlL2kpO2lmKCFhdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBidD1ZZS5tYXRjaCgvPFwvdGFibGUvaSksanQ9YXQuaW5kZXgsa3Q9YnQm''@;'; put 'put ''JmJ0LmluZGV4fHxZZS5sZW5ndGgsT3Q9ZnVuY3Rpb24gZnQoUyxSLGspe2lmKGhufHwic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIFMuc3BsaXQoUik7Zm9yKHZhciBHPVMuc3BsaXQoUiksUT1bR1swXV0sb2U9MTtvZTxHLmxlbmd0aDsrK29lKVEucHVzaChrKSxRLnB1c2goR1tvZV0pO3Jl''@;'; put 'put ''dHVybiBRfShZZS5zbGljZShqdCxrdCksLyg6Pzx0cltePl0qPikvaSwiPHRyPiIpLEt0PS0xLFRuPTAscnI9MCxTbj0wLGxyPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LFhuPVtdO2ZvcihqdD0wO2p0PE90Lmxlbmd0aDsrK2p0KXt2YXIgQm49T3RbanRdLnRyaW0oKSxmcj1Cbi5z''@;'; put 'put ''bGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPWZyKXtpZigiPHRkIj09ZnJ8fCI8dGgiPT1mcil7dmFyIGJyPUJuLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGt0PTA7a3Q8YnIubGVuZ3RoOysra3Qpe3ZhciBlcj1icltrdF0udHJpbSgpO2lmKGVyLm1hdGNoKC88dFtkaF0vaSkp''@;'; put 'put ''e2Zvcih2YXIgTWk9ZXIsRmk9MDsiPCI9PU1pLmNoYXJBdCgwKSYmKEZpPU1pLmluZGV4T2YoIj4iKSk+LTE7KU1pPU1pLnNsaWNlKEZpKzEpO2Zvcih2YXIgbmE9MDtuYTxYbi5sZW5ndGg7KytuYSl7dmFyIGNhPVhuW25hXTtjYS5zLmM9PVRuJiZjYS5zLnI8S3QmJkt0PD1jYS5lLnImJihU''@;'; put 'put ''bj1jYS5lLmMrMSxuYT0tMSl9dmFyIExpPXZyKGVyLnNsaWNlKDAsZXIuaW5kZXhPZigiPiIpKSk7U249TGkuY29sc3Bhbj8rTGkuY29sc3BhbjoxLCgocnI9K0xpLnJvd3NwYW4pPjF8fFNuPjEpJiZYbi5wdXNoKHtzOntyOkt0LGM6VG59LGU6e3I6S3QrKHJyfHwxKS0xLGM6VG4rU24tMX19''@;'; put 'put ''KTt2YXIga3I9TGkudHx8TGlbImRhdGEtdCJdfHwiIjtpZighTWkubGVuZ3RoKXtUbis9U247Y29udGludWV9aWYoTWk9aXIoTWkpLGxyLnMucj5LdCYmKGxyLnMucj1LdCksbHIuZS5yPEt0JiYobHIuZS5yPUt0KSxsci5zLmM+VG4mJihsci5zLmM9VG4pLGxyLmUuYzxUbiYmKGxyLmUuYz1U''@;'; put 'put ''biksTWkubGVuZ3RoKXt2YXIgVm49e3Q6InMiLHY6TWl9O2N0LnJhd3x8IU1pLnRyaW0oKS5sZW5ndGh8fCJzIj09a3J8fChWbj1SaShNaSxjdCkpLGN0LmRlbnNlPyhFdFtLdF18fChFdFtLdF09W10pLEV0W0t0XVtUbl09Vm4pOkV0W3FpKHtyOkt0LGM6VG59KV09Vm4sVG4rPVNufX19fX1l''@;'; put 'put ''bHNle2lmKCsrS3QsY3Quc2hlZXRSb3dzJiZjdC5zaGVldFJvd3M8PUt0KXstLUt0O2JyZWFrfVRuPTB9fXJldHVybiBFdFsiIXJlZiJdPXJhKGxyKSxYbi5sZW5ndGgmJihFdFsiIW1lcmdlcyJdPVhuKSxFdH1mdW5jdGlvbiBRKFllLGV0LGN0LEV0LGF0LGJ0KXt2YXIgT3QsanQ9WWVbIiFt''@;'; put 'put ''ZXJnZXMiXXx8W10sa3Q9W10sS3Q9e3N0eWxlOltdfSxUbj0hMTtmdW5jdGlvbiBycihpYSxMbyxPYSl7dmFyIGhvPSIiLEphPTA7aWYoT3RbaWFdKXN3aXRjaChPdFtpYV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjpobz0ic29saWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOmhv''@;'; put 'put ''PSJzb2xpZCIsSmE9MjticmVhaztjYXNlInRoaWNrIjpobz0ic29saWQiLEphPTM7YnJlYWs7Y2FzZSJkb3VibGUiOmhvPSJkb3VibGUiLEphPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6aG89ImRvdHRlZCIsSmE9MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3Qi''@;'; put 'put ''OmhvPSJkb3R0ZWQiLEphPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOmhvPSJkYXNoZWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6aG89ImRhc2hlZCIsSmE9Mn1lOmlmKDA9PUphKXtzd2l0''@;'; put 'put ''Y2goaWEpe2Nhc2UidG9wIjotLUxvO2JyZWFrO2Nhc2UibGVmdCI6LS1PYTticmVhaztjYXNlImJvdHRvbSI6KytMbzticmVhaztjYXNlInJpZ2h0IjorK09hfXZhciBCaT1Mbz49MCYmT2E+PTA/RXQuZGVuc2U/KFllW0xvXXx8W10pW09hXTpZZVtxaSh7cjpMbyxjOk9hfSldOm51bGw7aWYo''@;'; put 'put ''Qmkpe2lmKEJpLnMmJkJpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1baWFdXSlicmVhayBlO0JpLnMmJkJpLnMuZmdDb2xvciYmKEphPTEpfU90LmZnQ29sb3ImJihKYT0xKSwhQmkmJlRuJiYwPT1KYSYmKEphPTEpfTAhPUphJiZKYSYm''@;'; put 'put ''KEt0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItc3R5bGU6IisoaG98fCJ0cmFuc3BhcmVudCIpKSxLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLXdpZHRoOiIrSmErInB4IiksIiI9PWhvP0t0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItY29sb3I6IHRyYW5zcGFyZW50Iik6T3Rb''@;'; put 'put ''aWFdLmNvbG9yJiZPdFtpYV0uY29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLWNvbG9yOiMiK1AwKE90W2lhXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciBTbj1ldC5zLmM7U248PWV0LmUuYzsrK1NuKXtmb3IodmFyIGxyPTAsWG49MCxCbj0wO0JuPGp0Lmxlbmd0aDsrK0Ju''@;'; put 'put ''KWlmKCEoanRbQm5dLnMucj5jdHx8anRbQm5dLnMuYz5Tbnx8anRbQm5dLmUucjxjdHx8anRbQm5dLmUuYzxTbikpe2lmKGp0W0JuXS5zLnI8Y3R8fGp0W0JuXS5zLmM8U24pe2xyPS0xO2JyZWFrfWxyPWp0W0JuXS5lLnItanRbQm5dLnMucisxLFhuPWp0W0JuXS5lLmMtanRbQm5dLnMuYysx''@;'; put 'put ''O2JyZWFrfWlmKCEobHI8MCkpe3ZhciBmcj1xaSh7cjpjdCxjOlNufSksYnI9RXQuZGVuc2U/KFllW2N0XXx8W10pW1NuXTpZZVtmcl07YnI/VG49ITE6KFRuPSEwLGJyPXt0OiJ6IixzOnt9fSk7dmFyIGVyPSJ6Ij09YnIudD8iIjpici5ofHxsYShici53fHwoX2woYnIpLGJyLncpfHwiIik7''@;'; put 'put ''aWYoS3Q9e3N0eWxlOltdfSxPdD1ici5zKXt2YXIgTWk9MTtpZigoInN1cGVyIj09T3QudmFsaWdufHwic3ViIj09T3QudmFsaWduKSYmKE1pPS44Myxlcj1Qcigic3BhbiIsZXIse3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitPdC52YWxpZ259KSksS3Quc3R5bGUucHVzaCgiZm9udC13ZWln''@;'; put 'put ''aHQ6IisoT3QuYm9sZD83MDA6NDAwKSksT3QuaXRhbGljJiZLdC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoT3QudW5kZXJsaW5lfHxPdC5zdHJpa2UpJiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoT3QudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKE90''@;'; put 'put ''LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxPdC5jb2xvciYmT3QuY29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrUDAoT3QuY29sb3IucmdiKSksT3QubmFtZSYmS3Quc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitPdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxPdC5zeiYm''@;'; put 'put ''S3Quc3R5bGUucHVzaCgiZm9udC1zaXplOiIrT3Quc3oqTWkrInB0IiksbnVsbCE9PU90LnBhdHRlcm5UeXBlJiZPdC5mZ0NvbG9yJiZPdC5mZ0NvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrUDAoT3QuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KSxscj4xfHxYbj4xKXt2YXIgRmk9cWkoe3I6Y3QrbHItMSxjOlNuK1huLTF9KSxuYT1FdC5kZW5zZT8oWWVbY3QrbHItMV18fFtdKVtTbitYbi0xXTpZZVtGaV0sTGk9T3Q7T3Q9bmEmJm5hLnN8fE90LFsiYm90dG9tIiwicmlnaHQi''@;'; put 'put ''XS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KSxPdD1MaX1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oaWEpe3JyKGlhLGN0LFNuKX0pO2lmKE90LmFsaWdubWVudCl7aWYoT3QuYWxpZ25tZW50Lmhvcml6b250YWw/S3Quc3R5bGUucHVzaCgidGV4''@;'; put 'put ''dC1hbGlnbjogIisoU1tPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fE90LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT1ici50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLE90LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIGtyPU90LmFsaWdubWVudC52ZXJ0aWNhbDtL''@;'; put 'put ''dC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9PWtyPyJtaWRkbGUiOmtyKSl9aWYoT3QuYWxpZ25tZW50LndyYXBUZXh0KUt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIFZuPUV0LmRlbnNlPyhZZVtjdF18fFtdKVtTbisxXTpZ''@;'; put 'put ''ZVtxaSh7cjpjdCxjOlNuKzF9KV07Vm4mJiJ6IiE9Vm4udCYmS3Quc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PWJyLnQmJkt0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIEJyPSgoWWVbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHg7''@;'; put 'put ''bnVsbD09QnImJihCcj0oKFllWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCl9dmFyIF9yPTA7aWYoWG48PTEmJmxyPD0xJiYoX3I9KChZZVsiIWNvbHMiXXx8W10pW1NuXXx8e30pLndweCkmJkt0LnN0eWxlLnB1c2goIndpZHRoOiAiK19yKyJweCIpLFllWyIhY29uZGZtdCJd''@;'; put 'put ''JiZvZShicixjdCxTbixZZVsiIWNvbmRmbXQiXSxLdC5zdHlsZSxZZSksMD09S3Quc3R5bGUubGVuZ3RoP2RlbGV0ZSBLdC5zdHlsZTpLdC5zdHlsZT1LdC5zdHlsZS5qb2luKCI7IiksRXQuY3NzKXt2YXIgRm49YXQuaW5kZXhPZihLdC5zdHlsZSk7LTE9PUZuJiYoYXQucHVzaChLdC5zdHls''@;'; put 'put ''ZSksRm49YXQubGVuZ3RoLTEpLGRlbGV0ZSBLdC5zdHlsZSxLdC5jbGFzcz0ic2pzIisoYnR8fCIiKSsiLSIrRm59bHI+MSYmKEt0LnJvd3NwYW49bHIpLFhuPjEmJihLdC5jb2xzcGFuPVhuKSxFdC5lZGl0YWJsZT9lcj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK2VyKyI8L3Nw''@;'; put 'put ''YW4+IjpiciYmKEt0WyJkYXRhLXQiXT1iciYmYnIudHx8InoiLG51bGwhPWJyLnYmJihLdFsiZGF0YS12Il09YnIudiksbnVsbCE9YnIueiYmKEt0WyJkYXRhLXoiXT1ici56KSksS3QuaWQ9KEV0LmlkfHwic2pzIikrIi0iK2ZyLGt0LnB1c2goUHIoInRkIixlcixLdCkpfX12YXIgWmksanI9''@;'; put 'put ''e3N0eWxlOltdfTsoWmk9WWVbIiFzaGVldEZvcm1hdCJdKSYmWmkucm93JiYoanYoWmkucm93KSxaaS5yb3cuaHB4JiYoanIuc3R5bGUucHVzaChbImhlaWdodCIsWmkucm93LmhweCsicHgiXSksanIuaGVpZ2h0PU1hdGgucm91bmQoWmkucm93LmhweCkpKTt2YXIgeWk9WWVbIiFyb3dzIl07''@;'; put 'put ''aWYoeWkmJnlpW2N0XSl7dmFyIF9hPXlpW2N0XTtfYS5ocHgmJihqci5zdHlsZS5wdXNoKFsiaGVpZ2h0IiwrX2EuaHB4KyJweCJdKSxqci5oZWlnaHQ9TWF0aC5yb3VuZChfYS5ocHgpKSxfYS5oaWRkZW4mJmpyLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgc289W107cmV0''@;'; put 'put ''dXJuIGpyLnN0eWxlPWpyLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oaWEpe3JldHVybiEoc28uaW5kZXhPZihpYVswXSk+LTF8fChzby5wdXNoKGlhWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24oaWEpe3JldHVybiBpYVswXSsiOiIraWFbMV19KSwwPT1qci5zdHlsZS5sZW5ndGg/''@;'; put 'put ''ZGVsZXRlIGpyLnN0eWxlOmpyLnN0eWxlPWpyLnN0eWxlLmpvaW4oIjsiKSxQcigidHIiLGt0LmpvaW4oIiIpLGpyKX1mdW5jdGlvbiBvZShZZSxldCxjdCxFdCxhdCxidCl7RXQuZm9yRWFjaChmdW5jdGlvbihqdCl7aWYoanQuX3JlZnx8KGp0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBqdC5y''@;'; put 'put ''ZWY/TXMoanQucmVmKTpqdC5yZWYpLCEoanQuX3JlZi5zLmM+Y3R8fGp0Ll9yZWYuZS5jPGN0fHxqdC5fcmVmLnMucj5ldHx8anQuX3JlZi5lLnI8ZXR8fCJzY2FsZSIhPT1qdC50KSl7aWYoIm4iIT1ZZS50KXJldHVybjt2YXIga3Q7aWYobnVsbD09anQuX21pbil7anQuX3ZhbHVlcz1bXTtm''@;'; put 'put ''b3IodmFyIE90PWp0Ll9yZWYucy5yO090PD1qdC5fcmVmLmUucjsrK090KWZvcih2YXIgS3Q9anQuX3JlZi5zLmM7S3Q8PWp0Ll9yZWYuZS5jOysrS3Qpe3ZhciBUbj1BcnJheS5pc0FycmF5KGJ0KT8oYnRbT3RdfHxbXSlbS3RdOmJ0W3FpKHtyOk90LGM6S3R9KV07VG4mJiJuIj09VG4udCYm''@;'; put 'put ''anQuX3ZhbHVlcy5wdXNoKFRuLnYpfWlmKGp0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihycixTbil7cmV0dXJuIHJyLVNufSksanQuX21pbj1qdC5fdmFsdWVzWzBdLGp0Ll9tYXg9anQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sanQuX2JhbmQ9anQuX21heC1qdC5fbWluLGp0LmNtaWQpe3N3aXRj''@;'; put 'put ''aChqdC5jbWlkLnQpe2Nhc2UibnVtIjpqdC5fbWlkPWp0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOmp0Ll9taWQ9anQuY21pZC52LzEwMCpqdC5fYmFuZCtqdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6anQuX21pZD1mdW5jdGlvbiBPcihTLFIpe2lmKDA9PVIpcmV0dXJuIFNb''@;'; put 'put ''MF07aWYoMTAwPT1SKXJldHVybiBTW1MubGVuZ3RoLTFdO3ZhciBHPVIvMTAwKihTLmxlbmd0aC0xKSxRPUctTWF0aC5mbG9vcihHKTtyZXR1cm4gUSpTW01hdGguY2VpbChHKV0rKDEtUSkqU1tNYXRoLmZsb29yKEcpXX0oanQuX3ZhbHVlcyxqdC5jbWlkLnYpfWp0Ll9iYW5kaD1qdC5fbWF4''@;'; put 'put ''LWp0Ll9taWQsanQuX2JhbmRsPWp0Ll9taWQtanQuX21pbn19KGt0PWp0LmNtaWQ/WWUudj49anQuX21pZD9fQyhqdC5jbWlkLmNvbG9yLGp0LmNtYXguY29sb3IsKFllLnYtanQuX21pZCkvanQuX2JhbmRoKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtaWQuY29sb3IsKFllLnYtanQuX21pbikv''@;'; put 'put ''anQuX2JhbmRsKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtYXguY29sb3IsKFllLnYtanQuX21pbikvanQuX2JhbmQpKSYmYXQucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIra3QpfX0pfWZ1bmN0aW9uIGdlKFllLGV0KXt2YXIgY3Q9e3NwYW46ZXR8fDEsc3R5bGU6IiJ9LEV0PVtdO3JldHVy''@;'; put 'put ''biBZZSYmWWUud3B4JiYoY3Qud2lkdGg9TWF0aC5yb3VuZCg0KlllLndweC8zKSxFdC5wdXNoKCJ3aWR0aDoiKyhZZS53cHh8fDApKyJweCIpKSxFdC5sZW5ndGg+MCYmKGN0LnN0eWxlPUV0LmpvaW4oIjsiKSksUHIoImNvbCIsbnVsbCxjdCl9ZnVuY3Rpb24gcGUoWWUsZXQsY3Qpe3ZhciBF''@;'; put 'put ''dD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtjdCYmY3QuaWQmJihFdC5pZD1jdC5pZCk7dmFyIGF0PVllWyIhY29scyJdLGJ0PVllWyIhc2hlZXRG''@;'; put 'put ''b3JtYXQiXTtpZihZZSYmYXQpe2Zvcih2YXIganQ9MCxPdD1ldC5zLmM7T3Q8PWV0LmUuYzsrK090KXt2YXIgS3Q9YXRbT3RdO2p0Kz1LdCYmS3Qud3B4P0t0LndweDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9RXQuc3R5bGUrPSI7d2lkdGg6IitqdCsicHgifXZhciBy''@;'; put 'put ''cixUbj1bIjx0YWJsZSIrTHUoRXQpKyI+Il07aWYoVG4ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlk''@;'; put 'put ''OyBib3JkZXItY29sb3I6IisoY3QmJmN0LmdyaWRjb2xvcj9jdC5ncmlkY29sb3I6V3QoWWVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxUbi5wdXNoKCc8Y29sZ3Jv''@;'; put 'put ''dXAgc3Bhbj0iJysoZXQuZS5jLWV0LnMuYysxKSsnIj4nKSxhdCl7Zm9yKHZhciBTbj1ldC5zLmM7U248TWF0aC5taW4oYXQubGVuZ3RoLGV0LmUuYysxKTsrK1NuKSEocnI9YXRbU25dKSYmYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShyciwx''@;'; put 'put ''KSk7ZXQuZS5jLWV0LnMuYysxPmF0Lmxlbmd0aCYmKHJyPW51bGwsYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShycixldC5lLmMtZXQucy5jKzEtYXQubGVuZ3RoKSkpfWVsc2UgcnI9bnVsbCxidCYmYnQuY29sJiYocnI9YnQuY29sKSxycnx8''@;'; put 'put ''KHJyPXt3cHg6NTN9KSxUbi5wdXNoKGdlKHJyLGV0LmUuYy1ldC5zLmMrMSkpO3JldHVybiBUbi5wdXNoKCI8L2NvbGdyb3VwPiIpLFRuLmpvaW4oIiIpfXZhciB5ZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxl''@;'; put 'put ''PjwvaGVhZD48Ym9keT4nLFBlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEcoWWUsZXQpe3JldHVybiB0aChrKFllLGV0KSxldCl9LHRvX3NoZWV0OmssX3JvdzpRLEJFR0lOOnllLEVORDpQZSxfcHJlYW1ibGU6cGUsaHRtbF90b19yczpmdW5jdGlvbiBS''@;'; put 'put ''KFllKXt2YXIgZXQ9W10sY3Q9e30sRXQ9MDtyZXR1cm4gWWUucmVwbGFjZSgvPChcLz8pKFteXHM/PiFcLzpdKjp8KShbXlxzPz46XC9dKylbXj5dKj4vZ20sZnVuY3Rpb24oYXQsYnQsanQsa3QsT3Qpe3ZhciBUbj1Xbih2cihhdClbMF0pLnJlcGxhY2UoL1s8XC8+XS9nLCIiKSxycj1ZZS5z''@;'; put 'put ''bGljZShFdCxPdCkucmVwbGFjZSgvXHMvZywiICIpO3N3aXRjaChyci5sZW5ndGg+MCYmKGV0LnB1c2goe3Q6InMiLHY6cnIsczpjdH0pLGN0PXF0KGN0KSksVG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJiIjoiLyIhPWJ0P2N0LmJvbGQ9ITA6ZGVsZXRlIGN0LmJvbGQ7YnJlYWs7Y2FzZSJpIjoi''@;'; put 'put ''LyIhPWJ0P2N0Lml0YWxpYz0hMDpkZWxldGUgY3QuaXRhbGljO2JyZWFrO2Nhc2UidSI6Ii8iIT1idD9jdC51bmRlcmxpbmU9MTpkZWxldGUgY3QudW5kZXJsaW5lO2JyZWFrO2Nhc2UicyI6Ii8iIT1idD9jdC5zdHJpa2U9ITA6ZGVsZXRlIGN0LnN0cmlrZX1yZXR1cm4gRXQ9T3QrYXQubGVu''@;'; put 'put ''Z3RoLGF0fSksZXR9LGZyb21fc2hlZXQ6ZnVuY3Rpb24gTmUoWWUsZXQpe3ZhciBjdD1ldHx8e30sYXQ9bnVsbCE9Y3QuZm9vdGVyP2N0LmZvb3RlcjpQZSxidD1bbnVsbCE9Y3QuaGVhZGVyP2N0LmhlYWRlcjp5ZSwiIl0sanQ9W10sa3Q9KG5ldyBEYXRlKS52YWx1ZU9mKCk7WWV8fChZZT17''@;'; put 'put ''fSksWWVbIiFyZWYiXXx8KFllWyIhcmVmIl09IkExOkExIik7dmFyIE90PU1zKFllWyIhcmVmIl0pO2lmKGN0LmRlbnNlPUFycmF5LmlzQXJyYXkoWWUpLGN0LnNraXBlbmQpe3ZhciBLdD1PdC5lLnI7ZTpmb3IoO0t0Pj1PdC5zLnI7LS1LdClmb3IodmFyIFRuPU90LmUuYztUbj49T3Qucy5j''@;'; put 'put ''Oy0tVG4paWYobnVsbCE9KChjdC5kZW5zZT8oWWVbS3RdfHxbXSlbVG5dOlllW3FpKHtyOkt0LGM6VG59KV0pfHx7fSkudilicmVhayBlO090LmUucj1LdDt2YXIgcnI9T3QuZS5jO2U6Zm9yKDtycj49T3Qucy5jOy0tcnIpZm9yKHZhciBTbj1PdC5lLnI7U24+PU90LnMucjstLVNuKWlmKG51''@;'; put 'put ''bGwhPSgoY3QuZGVuc2U/KFllW1NuXXx8W10pW3JyXTpZZVtxaSh7cjpTbixjOnJyfSldKXx8e30pLnYpYnJlYWsgZTtPdC5lLmM9cnJ9YnQucHVzaChwZShZZSxPdCxjdCkpO2Zvcih2YXIgbHI9T3Qucy5yO2xyPD1PdC5lLnI7KytscilidC5wdXNoKFEoWWUsT3QsbHIsY3QsanQsa3QpKTty''@;'; put 'put ''ZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK2F0KSxjdC5jc3MmJihidFsxXT0iPHN0eWxlPlxuIitqdC5tYXAoZnVuY3Rpb24oWG4sQm4pe3JldHVybiIuc2pzIitrdCsiLSIrQm4rIiB7IitYbisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24g''@;'; put 'put ''QUkoUyxSLGspe3ZhciBHPXt9O2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gRzt2YXIgUT1nZXRDb21wdXRlZFN0eWxlKFMpO2lmKCg3MDA9PVFbImZvbnQtd2VpZ2h0Il18fCJib2xkIj09UVsiZm9udC13ZWlnaHQiXSkmJihHLmJvbGQ9ITApLChRWyJmb250LXN0eWxl''@;'; put 'put ''Il18fCIiKS5tYXRjaCgvaXRhbGljLykmJihHLml0YWxpYz0hMCksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL3VuZGVybGluZS8pJiYoRy51bmRlcmxpbmU9MSksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoRy5zdHJpa2U9MSks''@;'; put 'put ''cGFyc2VJbnQoUVsiZm9udC1zaXplIl0pJiYoRy5zej1wYXJzZUZsb2F0KFFbImZvbnQtc2l6ZSJdKSooUVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxRWyJmb250LWZhbWlseSJdJiYoRy5uYW1lPVFbImZvbnQtZmFtaWx5Il0uc3BsaXQoIiwiKVswXS5yZXBsYWNlKC9ccyoi''@;'; put 'put ''XHMqL2csIiIpKSxRLmNvbG9yKXt2YXIgb2U9RTUoUS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTtvZT49MCYmKEcuY29sb3I9e3JnYjpvZX0pfXN3aXRjaChRWyJ0ZXh0LXRyYW5zZm9ybSJdJiYoRy50ZXh0X3RyYW5zZm9ybT1RWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJu''@;'; put 'put ''b25lIiE9KFFbInRleHQtc2hhZG93Il18fCJub25lIikmJihHLnNoYWRvdz0hMCksUVsidGV4dC1hbGlnbiJdKXtjYXNlImNlbnRlciI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImNlbnRlciJ9O2JyZWFrO2Nhc2UicmlnaHQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJyaWdodCJ9O2Jy''@;'; put 'put ''ZWFrO2Nhc2UibGVmdCI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImxlZnQifTticmVhaztjYXNlImp1c3RpZnkiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJqdXN0aWZ5In19c3dpdGNoKFFbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20i''@;'; put 'put ''OkcuYWxpZ25tZW50fHwoRy5hbGlnbm1lbnQ9e30pLEcuYWxpZ25tZW50LnZlcnRpY2FsPVFbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PUcuYWxpZ25tZW50LnZlcnRpY2FsJiYoRy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpH''@;'; put 'put ''LnZhbGlnbj1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLEcuc3omJihHLnN6Lz0uODMpfXZhciBnZT1SJiZnZXRDb21wdXRlZFN0eWxlKFIpO3JldHVybiBnZSYmayYmUiYmWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9cGUuY2hhckF0KDAp''@;'; put 'put ''LnRvVXBwZXJDYXNlKCkrcGUuc2xpY2UoMSksUGU9Z2VbImJvcmRlci0iK3BlKyItc3R5bGUiXTtpZigoIm5vbmUiPT1QZXx8IVBlKSYmKFBlPWdlWyJib3JkZXIiK3llKyJTdHlsZSJdKSwibm9uZSIhPVBlJiZQZSl7dmFyIE5lPXBhcnNlSW50KGdlWyJib3JkZXItIitwZSsiLXdpZHRoIl18''@;'; put 'put ''fGdlWyJib3JkZXIiK3llKyJXaWR0aCJdLDEwKSxZZT0idGhpbiI7aWYoTmU+MCl7c3dpdGNoKFBlKXtjYXNlImRvdWJsZSI6WWU9ImRvdWJsZSI7YnJlYWs7Y2FzZSJkYXNoZWQiOlllPU5lPj0yPyJtZWRpdW1EYXNoZWQiOiJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpZZT1OZT49Mj8i''@;'; put 'put ''bWVkaXVtRGFzaERvdERvdCI6ImRvdHRlZCI7YnJlYWs7Y2FzZSJzb2xpZCI6WWU9TmU+PTM/InRoaWNrIjpOZT49Mj8ibWVkaXVtIjoidGhpbiJ9aWYoR1twZV09e3N0eWxlOlllfSxnZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxnZVsiYm9yZGVyIit5ZSsiQ29sb3IiXSl7dmFyIGV0PUU1''@;'; put 'put ''KChnZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxnZVsiYm9yZGVyIit5ZSsiQ29sb3IiXSkudG9Mb3dlckNhc2UoKSwhMCk7ZXQ+PTAmJihHW3BlXS5jb2xvcj17cmdiOmV0fSl9fX19KSxHfWZ1bmN0aW9uIERJKFMsUixrKXt2YXIgRz1TLmNoaWxkTm9kZXM7aWYoMT09Uy5ub2RlVHlwZSlz''@;'; put 'put ''d2l0Y2goUy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UicCI6Ui5sZW5ndGg+MCYmUi5wdXNoKHt0OiJ0Iix2OiJcbiIsczprfSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnJldHVybiBmdW5jdGlvbiBrSShTLFIsayl7Ui5wdXNoKHt0OiJ0Iix2OlMuY2hpbGRyZW5bUy5zZWxlY3RlZEluZGV4''@;'; put 'put ''XS5pbm5lclRleHQsczprfSl9KFMsUixrKX1pZihHLmxlbmd0aD4wKXt2YXIgUT1BSShTLG51bGwsITEpO2smJihrLnVuZGVybGluZSYmKFEudW5kZXJsaW5lPWsudW5kZXJsaW5lKSxrLnN0cmlrZSYmKFEuc3RyaWtlPWsuc3RyaWtlKSk7Zm9yKHZhciBvZT0wO29lPEcubGVuZ3RoOysrb2Up''@;'; put 'put ''e3RyeXtpZihHW29lXS5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpY29udGludWV9Y2F0Y2h7fURJKEdbb2VdLFIsUSl9ZGVsZXRlIFEudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT1TLm5vZGVUeXBlKXt2YXIgZ2U9e3Q6InQiLHY6Uy5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8s''@;'; put 'put ''IiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6a307c3dpdGNoKGsudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjpnZS52PWdlLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6Z2Uudj1nZS52LnRvTG93ZXJDYXNlKCl9KFIubGVuZ3RoPjB8fGdlLnYmJiIg''@;'; put 'put ''IiE9Z2UudikmJlIucHVzaChnZSl9ZWxzZSAxPT1TLm5vZGVUeXBlJiYiYnIiPT09Uy50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlIucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pfWZ1bmN0aW9uIERiKFMsUixrLEcsUSl7dmFyIGdlLG9lPVMuaW5uZXJIVE1MO2lmKHR5cGVvZiBnZXRDb21wdXRl''@;'; put 'put ''ZFN0eWxlPCJ1Iilzd2l0Y2goZ2U9Z2V0Q29tcHV0ZWRTdHlsZShTKSwoZ2VbIndoaXRlLXNwYWNlIl18fCIiKS5tYXRjaCgvcHJlLykmJihvZT1vZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpKSwoZ2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2Fz''@;'; put 'put ''ZSI6b2U9b2UudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6b2U9b2UudG9Mb3dlckNhc2UoKX12YXIgcGU9ZnVuY3Rpb24ga2IoUyxSLGssRyl7dmFyIFE9e3Q6InMiLHY6Un0sb2U9IiI7aWYoUyl7az1TLmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fFMuZ2V0QXR0cmlidXRl''@;'; put 'put ''KCJ0Iik7dmFyIGdlPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKXx8Uy5nZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0ob2U9Uy5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHxTLmdldEF0dHJpYnV0ZSgieiIpKSYmKFEuej1vZSksbnVsbCE9ayYmbnVsbCE9Z2UpcmV0dXJuIFEudD1rLFEudj1n''@;'; put 'put ''ZSxRfXJldHVybiBudWxsIT1SJiYoMD09Ui5sZW5ndGg/US50PWt8fCJ6IjpHLnJhd3x8IVIudHJpbSgpLmxlbmd0aHx8InMiPT1rfHwoUT1SaShSLEcpKSksb2UmJihRLno9b2UpLFF9KFMsaXIob2UpLGssUSk7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiJiYocGUucz1BSShTLFIs''@;'; put 'put ''US5ib3JkZXJzKSxkZWxldGUgcGUucy50ZXh0X3RyYW5zZm9ybSxTLmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PVMuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPVMuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKERJKFMscGUuUj1bXSxudWxsKSxwZS5SJiZwZS5SW3BlLlIubGVuZ3RoLTFd''@;'; put 'put ''JiYiXG4iPT1wZS5SW3BlLlIubGVuZ3RoLTFdLnYmJnBlLlIubGVuZ3RoLS0sKGdlWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNl''@;'; put 'put ''Imxvd2VyY2FzZSI6cGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtldC52PWV0LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09cGUudCl7dmFyIHllPXBlLnYubWF0Y2goL1xuLyk7IXllJiZwZS5SJiZwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpeyJzdHJpbmciPT10eXBlb2YgZXQudiYmZXQu''@;'; put 'put ''di5tYXRjaCgvXG4vKSYmKHllPSEwKX0pLCJzIj09cGUudCYmeWUmJihwZS5zfHwocGUucz17fSkscGUucy5hbGlnbm1lbnR8fChwZS5zLmFsaWdubWVudD17fSkscGUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFIpe3ZhciBQZT0iIixOZT1SLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJB''@;'; put 'put ''Iik7aWYoTmUmJk5lLmxlbmd0aClmb3IodmFyIFllPTA7WWU8TmUubGVuZ3RoJiYoIU5lW1llXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oUGU9TmVbWWVdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrWWUpO1BlJiYiIyIhPVBlLmNoYXJBdCgwKSYmKHBlLmw9e1Rh''@;'; put 'put ''cmdldDpQZX0pfXJldHVybiBwZX1mdW5jdGlvbiBJYihTLFIsayl7dmFyIFEsRz1SLnJvd3M7aWYoIUcpe2lmKGsmJm51bGwhPWsub3JpZ2luKXRocm93IlVuc3VwcG9ydGVkIG9yaWdpbiB3aGVuICIrUi50YWdOYW1lKyIgaXMgbm90IGEgVEFCTEUiO3JldHVybiBmdW5jdGlvbiBRbmUoUyxS''@;'; put 'put ''LGspe2s9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShrfHx7fSkpO3ZhciBvZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O1NbIiFtZXJnZXMiXXx8KFNbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciBwZSxnZT1SLmNoaWxkcmVuLHllPTAsUGU9MDtQZTxnZS5sZW5ndGg7KytQZSl7dmFyIGV0''@;'; put 'put ''LE5lPWdlW1BlXSxZZT0iIjt0cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP2V0PWdldENvbXB1dGVkU3R5bGU6TmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIE5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYm''@;'; put 'put ''KGV0PU5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFldHx8Im5vbmUiIT1ldChOZSkuZGlzcGxheSlzd2l0Y2goTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjp5ZT0tMSxTWyIhcmVmIl0mJihrLm9yaWdpbj0tMSks''@;'; put 'put ''SWIoUyxOZSxrKTticmVhaztjYXNlIkJSIjpjYXNlIkhSIjp5ZT0tMSxTWyIhcmVmIl0/KCsrKG9lPU1zKFNbIiFyZWYiXSkpLmUucixTWyIhcmVmIl09cmEob2UpKTpTWyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpj''@;'; put 'put ''YXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2Ijp5ZT0tMSxwZT1EYihOZSxudWxsLCIiLDAsayksU1siIXJlZiJdPyhrLm9yaWdpbj0tMSxmNChTLFtbcGVdXSxrKSk6KFNbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoUyk/KFNbMF18fChTWzBdPVtdKSxTWzBdWzBdPXBlKTpTLkExPXBlKSxT''@;'; put 'put ''WyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksZXQmJihvZT1NcyhTWyIhcmVmIl0pLChZZT1ldChOZSkuaGVpZ2h0KSYmImF1dG8iIT1ZZSYmKFNbIiFyb3dzIl1bb2UuZS5yXT17aHB0OnBhcnNlSW50KFllLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVN''@;'; put 'put ''IjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6cGU9RGIoTmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXXx8KFNbIiFyZWYiXT0iQTE6QTEiKSxmNChTLFtbcGVdXSx7b3JpZ2luOnFpKHtyOih5ZTwwPzE6MCkrKG9lPU1zKFNbIiFyZWYiXSkp''@;'; put 'put ''LmUucixjOisreWV9KX0pO2JyZWFrO2Nhc2UiREwiOmNhc2UiVUwiOmNhc2UiT0wiOnllPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK05lLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDp5ZT0tMSxj''@;'; put 'put ''b25zb2xlLmVycm9yKCJTa2lwcGluZyAiK05lLnRhZ05hbWUudG9VcHBlckNhc2UoKSl9fXJldHVybiBTfShTLFIsayl9dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9RPWdldENvbXB1dGVkU3R5bGU6Ui5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgUi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihRPVIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIG9lPWt8fHt9O251bGwhPWxlJiYob2UuZGVuc2U9bGUpO3ZhciBnZT0wLHBlPTA7aWYobnVsbCE9''@;'; put 'put ''b2Uub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2Ygb2Uub3JpZ2luKWdlPW9lLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIG9lLm9yaWdpbj9ObyhvZS5vcmlnaW4pOm9lLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9dmFyIFBlPU1hdGgubWluKG9lLnNoZWV0Um93c3x8MWU3''@;'; put 'put ''LEcubGVuZ3RoKSxOZT17czp7cjowLGM6MH0sZTp7cjpnZSxjOnBlfX07aWYoU1siIXJlZiJdKXt2YXIgWWU9TXMoU1siIXJlZiJdKTtOZS5zLnI9TWF0aC5taW4oTmUucy5yLFllLnMuciksTmUucy5jPU1hdGgubWluKE5lLnMuYyxZZS5zLmMpLE5lLmUucj1NYXRoLm1heChOZS5lLnIsWWUu''@;'; put 'put ''ZS5yKSxOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLFllLmUuYyksLTE9PWdlJiYoTmUuZS5yPWdlPVllLmUucisxKX12YXIgZXQ9W10sY3Q9MCxFdD1TWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksYXQ9MCxidD0wLGp0PTAsa3Q9MCxPdD0wLEt0PTA7Zm9yKFNbIiFjb2xzIl18fChTWyIhY29s''@;'; put 'put ''cyJdPVtdKTthdDxHLmxlbmd0aCYmYnQ8UGU7KythdCl7Zm9yKHZhciBUbj1HW2F0XSxycj1Ubi5wYXJlbnRFbGVtZW50OyJUQUJMRSIhPXJyLnRhZ05hbWUudG9VcHBlckNhc2UoKTspcnI9cnIucGFyZW50RWxlbWVudDtpZihycj09Uil7ZTppZih0eXBlb2YgUTwidSIpe3ZhciBTbj1RKFRu''@;'; put 'put ''KTtpZihudWxsPT1TbilicmVhayBlO2lmKFNuLnN0eWxlfHwoU24uc3R5bGU9e30pLG9lLmRpc3BsYXkmJiJub25lIj09KFNuLmRpc3BsYXl8fFNuLnN0eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25lIj09KFNuLmRpc3BsYXl8fFNuLnN0eWxlLmRpc3BsYXkpJiYoKEV0W2J0XXx8KEV0W2J0''@;'; put 'put ''XT17fSkpLmhpZGRlbj0hMCl9dmFyIGxyPVRuLmNlbGxzO2ZvcihqdD1rdD0wO2p0PGxyLmxlbmd0aDsrK2p0KXt2YXIgWG49bHJbanRdLEJuPW51bGw7aWYoISh0eXBlb2YgUTwidSImJihudWxsPT1CbiYmKEJuPVEoWG4pKSxCbi5zdHlsZXx8KEJuLnN0eWxlPXt9KSxvZS5kaXNwbGF5JiZu''@;'; put 'put ''dWxsIT1CbiYmIm5vbmUiPT0oQm4uZGlzcGxheXx8Qm4uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKEt0PStYbi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KXt2YXIgZnI9ZXRbY3RdO2ZyLnMuYz09a3QrcGUmJmZyLnMucjxidCtnZSYmYnQrZ2U8PWZy''@;'; put 'put ''LmUuciYmKGt0PWZyLmUuYysxLXBlLGN0PS0xKX0oKE90PStYbi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8S3Q+MSkmJmV0LnB1c2goe3M6e3I6YnQrZ2UsYzprdCtwZX0sZTp7cjpidCtnZSsoT3R8fDEpLTEsYzprdCtwZSsoS3R8fDEpLTF9fSk7dmFyIGJyPVhuLmdldEF0dHJp''@;'; put 'put ''YnV0ZSgidCIpfHwiIixlcj1Ybi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiBRPCJ1Iil7aWYobnVsbD09Qm4mJihCbj1RKFhuKSksbnVsbD09Qm4pYnJlYWsgZTtpZihCbi5zdHlsZXx8KEJuLnN0eWxlPXt9KSwxPT1LdCYmQm4ud2lkdGgmJihTWyIhY29scyJdW2t0K3Bl''@;'; put 'put ''XT1TWyIhY29scyJdW2t0K3BlXXx8e30sQm4ud2lkdGgubWF0Y2goL3B4Lyk/U1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KEJuLndpZHRoLDEwKSs1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCk6Qm4ud2lkdGgubWF0Y2goL3B0LykmJihTWyIhY29scyJdW2t0K3Bl''@;'; put 'put ''XS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChCbi53aWR0aCwxMCkvMys1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCkpKSxPdDw9MSl7RXRbYnQrZ2VdfHwoRXRbYnQrZ2VdPXt9KTt2YXIgTWk9Qm4uaGVpZ2h0OyhNaT1NaS5tYXRjaCgvcHQvKT9zaChwYXJzZUludChNaSwxMCkpOnBhcnNl''@;'; put 'put ''SW50KE1pLDEwKSk+KEV0W2J0K2dlXS5ocHh8fHNoKEV0W2J0K2dlXS5ocHQpfHwwKSYmKGRlbGV0ZSBFdFtidCtnZV0uaHB0LEV0W2J0K2dlXS5ocHg9TWkpfX12YXIgRmk9WG47aWYoWG4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PVhuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1Ybi5maXJz''@;'; put 'put ''dEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIG5hPTAsY2E9WG4uY2hpbGROb2RlcyxMaT0wO0xpPGNhLmxlbmd0aDsrK0xpKTM9PWNhW0xpXS5ub2RlVHlwZSYmKytuYTswPT1uYSYmKFhuPVhuLmZpcnN0RWxlbWVudENoaWxkKX12YXIga3I9RGIoWG4sRmks''@;'; put 'put ''YnIsMCxvZSk7aWYoQm4pe3ZhciBWbj1RKFhuKTtpZihWbiYmIVZuLnN0eWxlJiYoVm4uc3R5bGU9e30pLChWbiYmVm5bImJhY2tncm91bmQtY29sb3IiXXx8Qm5bImJhY2tncm91bmQtY29sb3IiXSkmJihrci5zfHwoa3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBCcj1WbiYmVm5b''@;'; put 'put ''ImJhY2tncm91bmQtY29sb3IiXXx8Qm5bImJhY2tncm91bmQtY29sb3IiXTtCci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9pKSYmKEJyPUJuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBfcj1FNShCci50b0xvd2VyQ2FzZSgpLCEwKTtfcj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOl9yfSl9''@;'; put 'put ''Y2F0Y2h7fXN3aXRjaChCblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOmtyLnN8fChrci5zPXt9KSxrci5zLmFsaWdubWVudHx8KGtyLnMuYWxpZ25tZW50PXt9KSxrci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYoZXImJihrci5zfHwo''@;'; put 'put ''a3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBGbj1FNShlci50b0xvd2VyQ2FzZSgpLCEwKTtGbj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOkZufSl9Y2F0Y2h7fWlmKG9lLmRlbnNlPyhTW2J0K2dlXXx8KFNbYnQrZ2VdPVtdKSxTW2J0K2dlXVtrdCtwZV09a3IpOlNbcWkoe2M6a3Qr''@;'; put 'put ''cGUscjpidCtnZX0pXT1rcixPdD4xfHxLdD4xKWZvcih2YXIganI9YnQ7anI8YnQrT3Q7Kytqcilmb3IodmFyIFppPWt0O1ppPGt0K0t0OysrWmkpYnQ9PWpyJiZrdD09Wml8fChvZS5kZW5zZT8oU1tqcitnZV18fChTW2pyK2dlXT1bXSksU1tqcitnZV1bWmkrcGVdPXt0OiJ6IixzOnF0KGty''@;'; put 'put ''LnN8fHt9KX0pOlNbcWkoe2M6WmkrcGUscjpqcitnZX0pXT17dDoieiIsczpxdChrci5zfHx7fSl9KTtOZS5lLmM8a3QrcGUmJihOZS5lLmM9a3QrcGUpLGt0Kz1LdH19KytidH19aWYoZXQubGVuZ3RoJiYoU1siIW1lcmdlcyJdPShTWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoZXQpKSxOZS5l''@;'; put 'put ''LnI9TWF0aC5tYXgoTmUuZS5yLGJ0LTErZ2UpLFNbIiFyZWYiXT1yYShOZSksYnQ+PVBlJiYoU1siIWZ1bGxyZWYiXT1yYSgoTmUuZS5yPUcubGVuZ3RoLWF0K2J0LTErZ2UsTmUpKSksb2UuYm9yZGVycylmb3IoYnQ9TmUucy5yO2J0PD1OZS5lLnI7KytidClmb3Ioa3Q9TmUucy5jO2t0PD1O''@;'; put 'put ''ZS5lLmM7KytrdClpZighb2UuZGVuc2Upe3ZhciB5aT1TW3FpKHtyOmJ0LGM6a3R9KV07aWYoIXlpfHwheWkucyljb250aW51ZTtpZihidD4wKXt2YXIgX2E9U1txaSh7cjpidC0xLGM6a3R9KV07X2EmJl9hLnMmJl9hLnMuYm90dG9tJiZkZWxldGUgeWkucy50b3B9aWYoa3Q+MCl7dmFyIHNv''@;'; put 'put ''PVNbcWkoe3I6YnQsYzprdC0xfSldO3NvJiZzby5zJiZzby5zLmJvdHRvbSYmZGVsZXRlIHlpLnMubGVmdH19cmV0dXJuIFN9ZnVuY3Rpb24ganooUyxSKXtyZXR1cm4gSWIoKFJ8fHt9KS5kZW5zZT9bXTp7fSxTLFIpfXZhciBYUz1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKEcsUSxvZSl7''@;'; put 'put ''dmFyIGdlPUcucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKE5lLFllKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoWWUs''@;'; put 'put ''MTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLHBlPVFyKGdlLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLHllPVtdLFBlPTA7cmV0dXJuIGdlLnJlcGxhY2UoLyg8dGV4dDpzcGFu''@;'; put 'put ''Lio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKE5lLFllLGV0LGN0KXtjdCE9UGUmJnllLnB1c2goe3Q6InMiLHY6UXIoZ2Uuc2xpY2UoUGUsY3QpKX0pO3ZhciBFdD17dDoicyIsdjpRcihldCl9LGF0PXZyKFllKVsic3R5bGUtbmFtZSJdO3JldHVybiBhdCYmb2VbYXRdJiYo''@;'; put 'put ''RXQucz1xdChvZVthdF0pKSx5ZS5wdXNoKEV0KSxQZT1jdCtOZS5sZW5ndGgsIiJ9KSxQZTxnZS5sZW5ndGgmJnllLnB1c2goe3Q6InMiLHY6UXIoZ2Uuc2xpY2UoUGUpKX0pLFtwZSx5ZV19LFI9e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJz''@;'; put 'put ''OlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9mLXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LGs9ZnVuY3Rpb24o''@;'; put 'put ''RyxRKXt2YXIgb2U9dnIoRy5zbGljZSgwLEcuaW5kZXhPZigiPiIpKSksZ2U9Ry5zbGljZShHLmluZGV4T2YoIj4iKSsxKSxwZT17bmFtZTpvZS5uYW1lLGZhbWlseTpvZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFt''@;'; put 'put ''ZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtvZVtQZVsxXV0mJihwZVtQZVswXV09b2VbUGVbMV1dKX0pO3ZhciB5ZT17fTtnZS5yZXBsYWNlKGVuLGZ1bmN0aW9uKFBlKXt2YXIgTmU9dnIoUGUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0''@;'; put 'put ''aWVzIj09PU5lWzBdKXtpZihOZVsiZm9udC13ZWlnaHQiXSYmKHllLmJvbGQ9KygiYm9sZCI9PU5lWyJmb250LXdlaWdodCJdfHwiNzAwIj09TmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PU5lWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09TmVbImZvbnQtc3R5bGUiXSkmJih5ZS5p''@;'; put 'put ''dGFsaWM9MSksIm5vbmUiIT0oTmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/eWUudW5kZXJsaW5lPSJkb3VibGUiPT1OZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooTmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09TmVbInRleHQtdW5kZXJsaW5lLXR5''@;'; put 'put ''cGUiXSkmJih5ZS51bmRlcmxpbmU9MCksKE5lWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9wdCQvKSYmKHllLnN6PStOZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oTmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJih5ZS5zdHJpa2U9MSks''@;'; put 'put ''TmVbImZvbnQtbmFtZSJdJiYoeWUubmFtZT1OZVsiZm9udC1uYW1lIl0pLE5lLmNvbG9yKXt2YXIgWWU9RTUoTmUuY29sb3IsITApO1llPj0wJiYoeWUuY29sb3I9WWUpfXN3aXRjaChOZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjp5ZS52YWxpZ249InN1cGVyIjticmVhaztjYXNl''@;'; put 'put ''InN1YiI6eWUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KE5lWyJ0ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoeWUudmFsaWduPSItIj09TmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oTmVbInRleHQtc2hhZG93Il18fCJu''@;'; put 'put ''b25lIikmJih5ZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxRW29lLm5hbWVdPXllfTtyZXR1cm4gZnVuY3Rpb24oUSxvZSl7dmFyIGdlPW9lfHx7fTtudWxsIT1sZSYmbnVsbD09Z2UuZGVuc2UmJihnZS5kZW5zZT1sZSk7dmFyIFBlLE5lLEV0LGF0LE90LEt0LHBlPVdTKFEpLHllPVtdLFllPXtu''@;'; put 'put ''YW1lOiIifSxldD0iIixjdD0wLGJ0PXt9LGp0PVtdLGt0PWdlLmRlbnNlP1tdOnt9LFRuPXt2YWx1ZToiIn0scnI9IiIsU249MCxYbj1bXSxCbj0tMSxmcj0tMSxicj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxlcj0wLE1pPXt9LEZpPVtdLG5hPXt9LGNhPTAsTGk9MCxrcj1bXSxW''@;'; put 'put ''bj0xLEJyPTEsX3I9W10sRm49e05hbWVzOltdfSxqcj17fSxaaT1bIiIsIiJdLHlpPVtdLF9hPXt9LHNvPXt9LGlhPTAsTG89IiIsT2E9MCxobz0hMSxKYT0hMSxCaT0wO2ZvcihZNS5sYXN0SW5kZXg9MCxwZT1wZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgv''@;'; put 'put ''PCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO090PVk1LmV4ZWMocGUpOylzd2l0Y2goT3RbM109T3RbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09T3RbMV0/KGt0WyIhcmVmIl09YnIuZS5jPj1ici5zLmMm''@;'; put 'put ''JmJyLmUucj49YnIucy5yP3JhKGJyKToiQTE6QTEiLGdlLnNoZWV0Um93cz4wJiZnZS5zaGVldFJvd3M8PWJyLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0sYnIuZS5yPWdlLnNoZWV0Um93cy0xLGt0WyIhcmVmIl09cmEoYnIpKSxGaS5sZW5ndGgmJihrdFsiIW1lcmdlcyJdPUZp''@;'; put 'put ''KSxrci5sZW5ndGgmJihrdFsiIXJvd3MiXT1rciksRXQubmFtZT1FdC5cdTU0MGRcdTc5ZjB8fEV0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShFdCksanQucHVzaChFdC5uYW1lKSxidFtFdC5uYW1lXT1rdCxKYT0hMSk6Ii8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxl''@;'; put 'put ''bmd0aC0yKSYmKEV0PXZyKE90WzBdLCExKSxCbj1mcj0tMSxici5zLnI9YnIucy5jPTFlNyxici5lLnI9YnIuZS5jPTAsa3Q9Z2UuZGVuc2U/W106e30sRmk9W10sa3I9W10sSmE9ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1PdFsxXT8tLWVyOisrZXI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1PdFsxXSl7Qm4rPVZuLFZuPTE7YnJlYWt9aWYoKGF0PXZyKE90WzBdLCExKSkuXHU4ODRjXHU1M2Y3P0JuPWF0Llx1ODg0Y1x1NTNmNy0xOi0xPT1CbiYmKEJuPTApLChWbj0rYXRbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEp''@;'; put 'put ''PDEwKWZvcihCaT0wO0JpPFZuOysrQmkpZXI+MCYmKGtyW0JuK0JpXT17bGV2ZWw6ZXJ9KTtmcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09T3RbMV0mJisrZnIsZ2Uuc2hlZXRTdHVicyYmKGdlLmRlbnNlPyhrdFtCbl18fChrdFtCbl09W10pLGt0W0JuXVtmcl09''@;'; put 'put ''e3Q6InoifSk6a3RbcWkoe3I6Qm4sYzpmcn0pXT17dDoieiJ9KSxycj0iIixYbj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpKSsrZnIsVG49dnIoT3RbMF0sITEpLEJyPXBhcnNlSW50KFRu''@;'; put 'put ''WyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLEt0PXt0OiJ6Iix2Om51bGx9LFRuLmZvcm11bGEmJjAhPWdlLmNlbGxGb3JtdWxhJiYoS3QuZj1pUyhRcihUbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0oVG4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxUblsidmFsdWUtdHlw''@;'; put 'put ''ZSJdKSYmKEt0LnQ9InMiLEt0LnY9UXIoVG5bInN0cmluZy12YWx1ZSJdfHwiIiksZ2UuZGVuc2U/KGt0W0JuXXx8KGt0W0JuXT1bXSksa3RbQm5dW2ZyXT1LdCk6a3RbcWkoe3I6Qm4sYzpmcn0pXT1LdCksZnIrPUJyLTE7ZWxzZSBpZigiLyIhPT1PdFsxXSl7QnI9MTt2YXIgSXM9Vm4/Qm4r''@;'; put 'put ''Vm4tMTpCbjtpZigrK2ZyPmJyLmUuYyYmKGJyLmUuYz1mciksZnI8YnIucy5jJiYoYnIucy5jPWZyKSxCbjxici5zLnImJihici5zLnI9Qm4pLElzPmJyLmUuciYmKGJyLmUucj1JcykseWk9W10sX2E9e30sS3Q9e3Q6KFRuPXZyKE90WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1Nzhi''@;'; put 'put ''fHxUblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sZ2UuY2VsbEZvcm11bGEpaWYoVG4uZm9ybXVsYSYmKFRuLmZvcm11bGE9UXIoVG4uZm9ybXVsYSkpLFRuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKGNhPXBhcnNl''@;'; put 'put ''SW50KFRuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxMaT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsS3QuRj1yYShuYT17czp7cjpCbixjOmZyfSxlOntyOkJuK2NhLTEsYzpmcitMaS0xfX0pLF9yLnB1c2goW25hLEt0''@;'; put 'put ''LkZdKSksVG4uZm9ybXVsYSlLdC5mPWlTKFRuLmZvcm11bGEpO2Vsc2UgZm9yKEJpPTA7Qmk8X3IubGVuZ3RoOysrQmkpQm4+PV9yW0JpXVswXS5zLnImJkJuPD1fcltCaV1bMF0uZS5yJiZmcj49X3JbQmldWzBdLnMuYyYmZnI8PV9yW0JpXVswXS5lLmMmJihLdC5GPV9yW0JpXVsxXSk7c3dp''@;'; put 'put ''dGNoKChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxUblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKGNhPXBhcnNlSW50KFRuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLExpPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEZpLnB1c2go''@;'; put 'put ''bmE9e3M6e3I6Qm4sYzpmcn0sZTp7cjpCbitjYS0xLGM6ZnIrTGktMX19KSksVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJihCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLEt0LnQpe2Nhc2UiYm9vbGVhbiI6S3QudD0iYiIsS3Qudj10aShUblsi''@;'; put 'put ''Ym9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpLdC50PSJkIixLdC52PUhlKFRuWyJkYXRlLXZhbHVlIl0pLGdlLmNlbGxEYXRl''@;'; put 'put ''c3x8KEt0LnQ9Im4iLEt0LnY9UWUoS3QudikpLEt0Lno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpLdC50PSJuIixLdC52PWl0KFRuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLGdlLmNlbGxEYXRlcyYmKEt0LnQ9ImQiLEt0LnY9dW4oS3QudikpLEt0Lno9IkhIOk1NOlNTIjticmVhaztjYXNl''@;'; put 'put ''Im51bWJlciI6S3QudD0ibiIsS3Qudj1wYXJzZUZsb2F0KFRuLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PUt0LnQmJiJ0ZXh0IiE9PUt0LnQmJkt0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrS3QudCk7''@;'; put 'put ''S3QudD0icyIsbnVsbCE9VG5bInN0cmluZy12YWx1ZSJdJiYocnI9UXIoVG5bInN0cmluZy12YWx1ZSJdKSxYbj1bXSl9fWVsc2V7aWYoaG89ITEsInMiPT09S3QudCYmKEt0LnY9cnJ8fCIiLFhuLmxlbmd0aCYmKEt0LlI9WG4pLGhvPTA9PVNuKSxqci5UYXJnZXQmJihLdC5sPWpyKSx5aS5s''@;'; put 'put ''ZW5ndGg+MCYmKEt0LmM9eWkseWk9W10pLHJyJiYhMSE9PWdlLmNlbGxUZXh0JiYoS3Qudz1yciksaG8mJihLdC50PSJ6IixkZWxldGUgS3QudiksZ2UuY2VsbEhUTUwmJihLdC5oPUt0LlI/VnUoS3QuUik6bGEoIiIrS3QudikpLCghaG98fGdlLnNoZWV0U3R1YnMpJiYhKGdlLnNoZWV0Um93''@;'; put 'put ''cyYmZ2Uuc2hlZXRSb3dzPD1CbikpZm9yKHZhciBQbj0wO1BuPFZuOysrUG4pe2lmKEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLGdlLmRlbnNlKWZvcihrdFtCbitQbl18fChrdFtCbitQbl09W10pLGt0W0JuK1BuXVtmcl09MD09UG4/S3Q6cXQo''@;'; put 'put ''S3QpOy0tQnI+MDspa3RbQm4rUG5dW2ZyK0JyXT1xdChLdCk7ZWxzZSBmb3Ioa3RbcWkoe3I6Qm4rUG4sYzpmcn0pXT1LdDstLUJyPjA7KWt0W3FpKHtyOkJuK1BuLGM6ZnIrQnJ9KV09cXQoS3QpO2JyLmUuYzw9ZnImJihici5lLmM9ZnIpfWZyKz0oQnI9cGFyc2VJbnQoVG5bIm51bWJlci1j''@;'; put 'put ''b2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsQnI9MCxLdD17fSxycj0iIixYbj1bXX1qcj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0Ijpj''@;'; put 'put ''YXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90''@;'; put 'put ''WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJnllLnB1c2goW090WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1PdFsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZTtfYS50PXJyLFhuLmxlbmd0aCYmKF9hLlI9WG4p''@;'; put 'put ''LF9hLmE9TG8seWkucHVzaChfYSl9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJnllLnB1c2goW090WzNdLCExXSk7TG89IiIsT2E9MCxycj0iIixTbj0wLFhuPVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09T3RbMV0/TG89cGUuc2xpY2UoT2EsT3QuaW5kZXgp''@;'; put 'put ''Ok9hPU90LmluZGV4K090WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNh''@;'; put 'put ''c2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVy''@;'; put 'put ''cyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJnllLnB1c2goW090WzNdLCExXSk7cnI9IiIsU249MCxYbj1bXTticmVhaztj''@;'; put 'put ''YXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJtYXAi''@;'; put 'put ''OmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9u''@;'; put 'put ''IjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3Jt''@;'; put 'put ''cyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1w''@;'; put 'put ''cm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6''@;'; put 'put ''Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpj''@;'; put 'put ''YXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmls''@;'; put 'put ''dGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpj''@;'; put 'put ''YXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13''@;'; put 'put ''b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2Ui''@;'; put 'put ''Y2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRv''@;'; put 'put ''Y3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3Vy''@;'; put 'put ''Y2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxv''@;'; put 'put ''dC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5m''@;'; put 'put ''byI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29u''@;'; put 'put ''bmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2Zm''@;'; put 'put ''aWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PU90WzFdKXtpZihNaVtZZS5uYW1lXT1ldCwoUGU9eWUucG9wKCkpWzBdIT09T3Rb''@;'; put 'put ''M10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiYoZXQ9IiIsWWU9dnIoT3RbMF0sITEpLHllLnB1c2goW090WzNdLCEwXSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1PdFswXS5zbGljZSgtMik/ayhPdFswXSxzbyk6Ii8i''@;'; put 'put ''PT1PdFsxXT9rKHBlLnNsaWNlKGlhLE90LmluZGV4K090WzBdLmxlbmd0aCksc28pOmlhPU90LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3ZWVrLW9mLXllYXIiOmNhc2Ui''@;'; put 'put ''cXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpOZT12cihPdFswXSwhMSksZXQrPVJbT3RbM11dWyJsb25nIj09PU5lLnN0''@;'; put 'put ''eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09T3RbMF0uc2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PU90WzFdKXN3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6ZXQrPXBlLnNsaWNl''@;'; put 'put ''KGN0LE90LmluZGV4KX1lbHNlIGN0PU90LmluZGV4K090WzBdLmxlbmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpaaT1vYigoTmU9dnIoT3RbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBXbz17TmFtZTpOZS5uYW1lLFJlZjpaaVswXSsiISIrWmlbMV19O0phJiYoV28u''@;'; put 'put ''U2hlZXQ9anQubGVuZ3RoKSxGbi5OYW1lcy5wdXNoKFdvKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKHllW3llLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09T3RbMV18fFRuJiZUblsic3RyaW5nLXZh''@;'; put 'put ''bHVlIl0pdnIoT3RbMF0sITEpLFNuPU90LmluZGV4K090WzBdLmxlbmd0aDtlbHNle3ZhciBocj1TKHBlLnNsaWNlKFNuLE90LmluZGV4KSwwLHNvKTtycj0ocnIubGVuZ3RoPjA/cnIrIlxuIjoiIikraHJbMF0sWG49aHJbMV19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09''@;'; put 'put ''T3RbMV0pYnJlYWs7dHJ5e2J0WyhaaT1vYih2cihPdFswXSlbInRhcmdldC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpaaVsxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09T3RbMV0pe2lmKCEoanI9dnIoT3RbMF0sITEpKS5ocmVmKWJyZWFrO2py''@;'; put 'put ''LlRhcmdldD1Rcihqci5ocmVmKSxkZWxldGUganIuaHJlZiwiIyI9PWpyLlRhcmdldC5jaGFyQXQoMCkmJmpyLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KFppPW9iKGpyLlRhcmdldC5zbGljZSgxKSksanIuVGFyZ2V0PSIjIitaaVswXSsiISIrWmlbMV0pOmpyLlRhcmdldC5tYXRjaCgvXlwu''@;'; put 'put ''XC5bXFxcL10vKSYmKGpyLlRhcmdldD1qci5UYXJnZXQuc2xpY2UoMykpfWJyZWFrO2RlZmF1bHQ6c3dpdGNoKE90WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNl''@;'; put 'put ''ImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihnZS5XVEYpdGhyb3cgbmV3IEVycm9yKE90KX19dmFyIFFsPXtTaGVldHM6YnQsU2hlZXROYW1lczpqdCxXb3JrYm9vazpGbn07cmV0dXJuIGdlLmJvb2tT''@;'; put 'put ''aGVldHMmJmRlbGV0ZSBRbC5TaGVldHMsUWx9fSgpO2Z1bmN0aW9uIElJKFMsUil7cmV0dXJuIFhTKFMsUil9dmFyIFV6PWZ1bmN0aW9uKCl7dmFyIFM9WyIgIDxvZmZpY2U6bWFzdGVyLXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxlOm5hbWU9Im1wMSIgc3R5bGU6cGFn''@;'; put 'put ''ZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVhZGVyLz4iLCcgICAgICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFs''@;'; put 'put ''c2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwvb2ZmaWNlOm1hc3Rlci1zdHlsZXM+Il0uam9pbigiXG4iKSxSPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK0x1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZp''@;'; put 'put ''Y2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVz''@;'; put 'put ''OnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxl''@;'; put 'put ''OjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAi''@;'; put 'put ''LCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSsiPlxuIitTKyJc''@;'; put 'put ''bjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBJaStSfX0oKSxQOD1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKHBlLHllKXtyZXR1cm4gTHIocGUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKFBlKXtyZXR1cm4nPHRleHQ6cyB0ZXh0OmM9Iicr''@;'; put 'put ''UGUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6dGFiLz4iKS5yZXBsYWNlKC9cbi9nLHllPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIpLnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQvLCI8dGV4dDpzLz4iKX0sUj1mdW5j''@;'; put 'put ''dGlvbihwZSl7cmV0dXJuIHBlLm1hcChmdW5jdGlvbih5ZSl7dmFyIFBlPSIiO3JldHVybiBudWxsIT15ZS5vZHMmJihQZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK3llLm9kcysnIicpLHllLnY/Ijx0ZXh0OnNwYW4iK1BlKyI+IitTKHllLnYsITApKyI8L3RleHQ6c3Bhbj4iOiIifSkuam9p''@;'; put 'put ''bigiIil9LGs9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAvPlxuIixRPWZ1bmN0aW9uKHBlLHllLFBlKXt2YXIgTmU9W107TmUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRhYmxlOm5hbWU9IicrTHIoeWUuU2hlZXROYW1lc1tQZV0pKyciIHRhYmxlOnN0eWxlLW5hbWU9InRhMSI+''@;'; put 'put ''XG4nKTt2YXIgWWU9MCxldD0wLGN0PU1zKHBlWyIhcmVmIl18fCJBMSIpLEV0PXBlWyIhbWVyZ2VzIl18fFtdLGF0PTAsYnQ9QXJyYXkuaXNBcnJheShwZSk7aWYocGVbIiFjb2xzIl0pZm9yKGV0PTA7ZXQ8PWN0LmUuYzsrK2V0KU5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLWNvbHVt''@;'; put 'put ''biIrKHBlWyIhY29scyJdW2V0XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNvJytwZVsiIWNvbHMiXVtldF0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBrdD1wZVsiIXJvd3MiXXx8W107Zm9yKFllPTA7WWU8Y3Qucy5yOysrWWUpTmUucHVzaCgiICAgICAgICA8''@;'; put 'put ''dGFibGU6dGFibGUtcm93Iisoa3RbWWVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W1llXS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtZZTw9Y3QuZS5yOysrWWUpe2ZvcihOZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhrdFtZZV0/JyB0''@;'; put 'put ''YWJsZTpzdHlsZS1uYW1lPSJybycra3RbWWVdLm9kcysnIic6IiIpKyI+XG4iKSxldD0wO2V0PGN0LnMuYzsrK2V0KU5lLnB1c2goayk7Zm9yKDtldDw9Y3QuZS5jOysrZXQpe3ZhciBPdD0hMSxLdD17fSxUbj0iIjtmb3IoYXQ9MDthdCE9RXQubGVuZ3RoOysrYXQpaWYoIShFdFthdF0ucy5j''@;'; put 'put ''PmV0fHxFdFthdF0ucy5yPlllfHxFdFthdF0uZS5jPGV0fHxFdFthdF0uZS5yPFllKSl7KEV0W2F0XS5zLmMhPWV0fHxFdFthdF0ucy5yIT1ZZSkmJihPdD0hMCksS3RbInRhYmxlOm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXT1FdFthdF0uZS5jLUV0W2F0XS5zLmMrMSxLdFsidGFibGU6bnVt''@;'; put 'put ''YmVyLXJvd3Mtc3Bhbm5lZCJdPUV0W2F0XS5lLnItRXRbYXRdLnMucisxO2JyZWFrfWlmKE90KU5lLnB1c2goIiAgICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIpO2Vsc2V7dmFyIHJyPXFpKHtyOlllLGM6ZXR9KSxTbj1idD8ocGVbWWVdfHxbXSlbZXRdOnBlW3JyXTtp''@;'; put 'put ''ZihTbiYmU24uZiYmKEt0WyJ0YWJsZTpmb3JtdWxhIl09THIoWjQoU24uZikpLFNuLkYmJlNuLkYuc2xpY2UoMCxyci5sZW5ndGgpPT1ycikpe3ZhciBscj1NcyhTbi5GKTtLdFsidGFibGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT1sci5lLmMtbHIucy5jKzEsS3RbInRhYmxl''@;'; put 'put ''Om51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl09bHIuZS5yLWxyLnMucisxfWlmKFNuKXtzd2l0Y2goU24udCl7Y2FzZSJiIjpUbj1Tbi52PyJUUlVFIjoiRkFMU0UiLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixLdFsib2ZmaWNlOmJvb2xlYW4tdmFsdWUiXT1Tbi52PyJ0''@;'; put 'put ''cnVlIjoiZmFsc2UiO2JyZWFrO2Nhc2UibiI6VG49U24ud3x8U3RyaW5nKFNuLnZ8fDApLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJmbG9hdCIsS3RbIm9mZmljZTp2YWx1ZSJdPVNuLnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6VG49U24udixLdFsib2ZmaWNlOnZhbHVlLXR5cGUi''@;'; put 'put ''XT0ic3RyaW5nIjticmVhaztjYXNlImQiOlRuPVNuLnd8fEhlKFNuLnYpLnRvSVNPU3RyaW5nKCksS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09ImRhdGUiLEt0WyJvZmZpY2U6ZGF0ZS12YWx1ZSJdPUhlKFNuLnYpLnRvSVNPU3RyaW5nKCksS3RbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UxIjti''@;'; put 'put ''cmVhaztkZWZhdWx0Ok5lLnB1c2goayk7Y29udGludWV9bnVsbCE9U24ub2RzJiYhS3RbInRhYmxlOnN0eWxlLW5hbWUiXSYmKEt0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIitTbi5vZHMpO3ZhciBYbj0hU24uUnx8U24ubCYmU24ubC5UYXJnZXQ/UyhUbik6UihTbi5SKTtpZihTbi5sJiZT''@;'; put 'put ''bi5sLlRhcmdldCl7dmFyIEJuPVNuLmwuVGFyZ2V0OyIjIiE9KEJuPSIjIj09Qm4uY2hhckF0KDApPyIjIitnRChCbi5zbGljZSgxKSk6Qm4pLmNoYXJBdCgwKSYmIUJuLm1hdGNoKC9eXHcrOi8pJiYoQm49Ii4uLyIrQm4pLFhuPVByKCJ0ZXh0OmEiLFhuLHsieGxpbms6aHJlZiI6Qm4ucmVw''@;'; put 'put ''bGFjZSgvJi9nLCImYW1wOyIpfSl9TmUucHVzaCgiICAgICAgICAgICIrUHIoInRhYmxlOnRhYmxlLWNlbGwiLFByKCJ0ZXh0OnAiLFhuLHt9KSxLdCkrIlxuIil9ZWxzZSBOZS5wdXNoKGspfX1OZS5wdXNoKCIgICAgICAgIDwvdGFibGU6dGFibGUtcm93PlxuIil9cmV0dXJuIE5lLnB1c2go''@;'; put 'put ''IiAgICAgIDwvdGFibGU6dGFibGU+XG4iKSxOZS5qb2luKCIiKX0sb2U9e2NlbnRlcjoiY2VudGVyIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O3JldHVybiBmdW5jdGlvbih5ZSxQZSl7dmFyIE5lPVtJaV0sWWU9THUoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3Bl''@;'; put 'put ''bmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRl''@;'; put 'put ''eHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1s''@;'; put 'put ''bnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm1ldGEiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50Onht''@;'; put 'put ''bG5zOm1ldGE6MS4wIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6cHJlc2VudGF0aW9uIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVzZW50YXRpb246MS4wIiwieG1s''@;'; put 'put ''bnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpjaGFydCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y2hhcnQ6MS4wIiwieG1sbnM6ZHIzZCI6InVybjpvYXNpczpuYW1lczp0Yzpv''@;'; put 'put ''cGVuZG9jdW1lbnQ6eG1sbnM6ZHIzZDoxLjAiLCJ4bWxuczptYXRoIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsInhtbG5zOmZvcm0iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiwieG1sbnM6c2NyaXB0IjoidXJuOm9hc2lz''@;'; put 'put ''Om5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzY3JpcHQ6MS4wIiwieG1sbnM6b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiwieG1sbnM6b29vdyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L3dyaXRlciIsInhtbG5zOm9vb2MiOiJodHRwOi8vb3Blbm9m''@;'; put 'put ''ZmljZS5vcmcvMjAwNC9jYWxjIiwieG1sbnM6ZG9tIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIiwieG1sbnM6eGZvcm1zIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXMiLCJ4bWxuczp4c2QiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsInht''@;'; put 'put ''bG5zOnhzaSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiwieG1sbnM6c2hlZXQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnNoMzN0anM6MS4wIiwieG1sbnM6cnB0IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDUvcmVwb3J0IiwieG1s''@;'; put 'put ''bnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsInhtbG5zOnhodG1sIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInhtbG5zOmdyZGRsIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiLCJ4bWxuczp0YWJsZW9v''@;'; put 'put ''byI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlIiwieG1sbnM6ZHJhd29vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDEwL2RyYXciLCJ4bWxuczpjYWxjZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOmNhbGM6eG1sbnM6Y2Fs''@;'; put 'put ''Y2V4dDoxLjAiLCJ4bWxuczpsb2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpvZmZpY2U6eG1sbnM6bG9leHQ6MS4wIiwieG1sbnM6ZmllbGQiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b29vLW1zLWludGVyb3A6eG1sbnM6''@;'; put 'put ''ZmllbGQ6MS4wIiwieG1sbnM6Zm9ybXgiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b294bWwtb2RmLWludGVyb3A6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpjc3MzdCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8iLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9''@;'; put 'put ''KSxldD1MdSh7InhtbG5zOmNvbmZpZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y29uZmlnOjEuMCIsIm9mZmljZTptaW1ldHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQifSk7ImZvZHMiPT1QZS5ib29rVHlwZT8o''@;'; put 'put ''TmUucHVzaCgiPG9mZmljZTpkb2N1bWVudCIrWWUrZXQrIj5cbiIpLE5lLnB1c2goUjYoKS5yZXBsYWNlKC9vZmZpY2U6ZG9jdW1lbnQtbWV0YS9nLCJvZmZpY2U6bWV0YSIpKSk6TmUucHVzaCgiPG9mZmljZTpkb2N1bWVudC1jb250ZW50IitZZSsiPlxuIiksZnVuY3Rpb24ocGUseWUpe3Zh''@;'; put 'put ''ciBQZT1bXSxOZT17fTtQZS5wdXNoKCIgPG9mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIiksUGUucHVzaCgnICA8bnVtYmVyOmRhdGUtc3R5bGUgc3R5bGU6bmFtZT0iTjM3IiBudW1iZXI6YXV0b21hdGljLW9yZGVyPSJ0cnVlIj5cbicpLFBlLnB1c2goJyAgIDxudW1iZXI6bW9udGggbnVt''@;'; put 'put ''YmVyOnN0eWxlPSJsb25nIi8+XG4nKSxQZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxQZS5wdXNoKCcgICA8bnVtYmVyOmRheSBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLFBlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLFBl''@;'; put 'put ''LnB1c2goIiAgIDxudW1iZXI6eWVhci8+XG4iKSxQZS5wdXNoKCIgIDwvbnVtYmVyOmRhdGUtc3R5bGU+XG4iKTt2YXIgWWU9MDt5ZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIHllLlNoZWV0c1thdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihhdCYmYXRbIiFjb2xz''@;'; put 'put ''Il0pZm9yKHZhciBidD0wO2J0PGF0WyIhY29scyJdLmxlbmd0aDsrK2J0KWlmKGF0WyIhY29scyJdW2J0XSl7dmFyIGp0PWF0WyIhY29scyJdW2J0XTtpZihudWxsPT1qdC53aWR0aCYmbnVsbD09anQud3B4JiZudWxsPT1qdC53Y2gpY29udGludWU7UTAoanQpLGp0Lm9kcz1ZZTt2YXIga3Q9''@;'; put 'put ''YXRbIiFjb2xzIl1bYnRdLndweCsicHgiO1BlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNvJytZZSsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNvbHVtbiI+XG4nKSxQZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJh''@;'; put 'put ''dXRvIiBzdHlsZTpjb2x1bW4td2lkdGg9Iicra3QrJyIvPlxuJyksUGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytZZX19KTt2YXIgZXQ9MDt5ZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIHllLlNoZWV0c1thdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihh''@;'; put 'put ''dCYmYXRbIiFyb3dzIl0pZm9yKHZhciBidD0wO2J0PGF0WyIhcm93cyJdLmxlbmd0aDsrK2J0KWlmKGF0WyIhcm93cyJdW2J0XSl7YXRbIiFyb3dzIl1bYnRdLm9kcz1ldDt2YXIganQ9YXRbIiFyb3dzIl1bYnRdLmhweCsicHgiO1BlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9''@;'; put 'put ''InJvJytldCsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLXJvdyI+XG4nKSxQZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcm93LXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpyb3ctaGVpZ2h0PSInK2p0KyciLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIp''@;'; put 'put ''LCsrZXR9fSksUGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0idGExIiBzdHlsZTpmYW1pbHk9InRhYmxlIiBzdHlsZTptYXN0ZXItcGFnZS1uYW1lPSJtcDEiPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXMgdGFibGU6ZGlzcGxheT0idHJ1ZSIgc3R5''@;'; put 'put ''bGU6d3JpdGluZy1tb2RlPSJsci10YiIvPlxuJyksUGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksUGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY2UxIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNlbGwiIHN0eWxlOnBhcmVudC1zdHlsZS1uYW1lPSJEZWZhdWx0IiBzdHls''@;'; put 'put ''ZTpkYXRhLXN0eWxlLW5hbWU9Ik4zNyIvPlxuJyk7dmFyIGN0PTI7ZXQ9MCx5ZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIHllLlNoZWV0c1thdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihhdClmb3IodmFyIGJ0PTAsanQ9MCxrdD1NcyhhdFsiIXJlZiJdKSxPdD1B''@;'; put 'put ''cnJheS5pc0FycmF5KGF0KTtidDw9a3QuZS5yOysrYnQpZm9yKGp0PTA7anQ8PWt0LmUuYzsrK2p0KXt2YXIgS3Q9cWkoe3I6YnQsYzpqdH0pLFRuPU90PyhhdFtidF18fFtdKVtqdF06YXRbS3RdO2lmKFRuJiYoVG4uc3x8VG4uUikpe3ZhciBycj1bXTtUbi5zJiZyci5wdXNoKFtUbiwhMF0p''@;'; put 'put ''LFRuLlImJlRuLlIuZm9yRWFjaChmdW5jdGlvbihTbil7U24mJlNuLnMmJnJyLnB1c2goW1NuLCExXSl9KSxyci5mb3JFYWNoKGZ1bmN0aW9uKFNuKXt2YXIgbHI9U25bMF0sWG49bHIucyxCbj0iIixmcj17InN0eWxlOm5hbWUiOihTblsxXT8iY2UiOiJUIikrY3QsInN0eWxlOmZhbWlseSI6''@;'; put 'put ''U25bMV0/InRhYmxlLWNlbGwiOiJ0ZXh0In07U25bMV0mJihmclsic3R5bGU6cGFyZW50LXN0eWxlLW5hbWUiXT0iRGVmYXVsdCIsZnJbInN0eWxlOmRhdGEtc3R5bGUtbmFtZSJdPSJOMCIpO3ZhciBicj17fSxlcj0hMSxNaT17fSxGaT0hMSxuYT17fSxjYT0hMTtpZihYbi5jb2xvciYmKE1p''@;'; put 'put ''WyJmbzpjb2xvciJdPSIjIitQMChYbi5jb2xvci5yZ2IpLEZpPSEwKSxYbi5zeiYmKE1pWyJmbzpmb250LXNpemUiXT1Ybi5zeisicHQiLEZpPSEwKSxYbi5ib2xkJiYoTWlbImZvOmZvbnQtd2VpZ2h0Il09ImJvbGQiLEZpPSEwKSxYbi5pdGFsaWMmJihNaVsiZm86Zm9udC1zdHlsZSJdPSJp''@;'; put 'put ''dGFsaWMiLEZpPSEwKSxYbi5uYW1lJiYoTmVbWG4ubmFtZV18fChOZVtYbi5uYW1lXT1Ybi5uYW1lLm1hdGNoKC8gLyk/IiZhcG9zOyIrWG4ubmFtZSsiJmFwb3M7IjpYbi5uYW1lKSxNaVsic3R5bGU6Zm9udC1uYW1lIl09WG4ubmFtZSxGaT0hMCksWG4uc3RyaWtlJiYoTWlbInN0eWxlOnRl''@;'; put 'put ''eHQtbGluZS10aHJvdWdoLXN0eWxlIl09InNvbGlkIixNaVsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtdHlwZSJdPSJzaW5nbGUiLEZpPSEwKSxYbi51bmRlcmxpbmUmJihNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtc3R5bGUiXT0ic29saWQiLE1pWyJzdHlsZTp0ZXh0LXVuZGVybGluZS13''@;'; put 'put ''aWR0aCJdPSJhdXRvIixNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtY29sb3IiXT0iZm9udC1jb2xvciIsRmk9ITApLFNuWzFdKXtpZihYbi5hbGlnbm1lbnQpe3ZhciBMaT1Ybi5hbGlnbm1lbnQ7TGkud3JhcFRleHQmJihiclsiZm86d3JhcC1vcHRpb24iXT0id3JhcCIsZXI9ITApLExpLnZl''@;'; put 'put ''cnRpY2FsJiYoYnJbInN0eWxlOnZlcnRpY2FsLWFsaWduIl09ImNlbnRlciI9PUxpLnZlcnRpY2FsPyJtaWRkbGUiOkxpLnZlcnRpY2FsLGVyPSEwKSxvZVtMaS5ob3Jpem9udGFsXSYmKG5hWyJmbzp0ZXh0LWFsaWduIl09b2VbTGkuaG9yaXpvbnRhbF0sY2E9ITApfVhuLmZnQ29sb3ImJihi''@;'; put 'put ''clsiZm86YmFja2dyb3VuZC1jb2xvciJdPSIjIitQMChYbi5mZ0NvbG9yLnJnYiksZXI9ITApfWVyJiYoQm4rPVByKCJzdHlsZTp0YWJsZS1jZWxsLXByb3BlcnRpZXMiLG51bGwsYnIpKSxGaSYmKEJuKz1Qcigic3R5bGU6dGV4dC1wcm9wZXJ0aWVzIixudWxsLE1pKSksY2EmJihCbis9UHIo''@;'; put 'put ''InN0eWxlOnBhcmFncmFwaC1wcm9wZXJ0aWVzIixudWxsLG5hKSksUGUucHVzaCgiICAiK1ByKCJzdHlsZTpzdHlsZSIsQm4sZnIpKyJcbiIpLGxyLm9kcz1jdCwrK2N0fSl9fX0pLFBlLnB1c2goIiA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIik7dmFyIEV0PSIgPG9mZmljZTpmb250''@;'; put 'put ''LWZhY2UtZGVjbHM+XG4iK09lKE5lKS5tYXAoZnVuY3Rpb24oYXQpe3JldHVybicgIDxzdHlsZTpmb250LWZhY2Ugc3R5bGU6bmFtZT0iJythdCsnIiBzdmc6Zm9udC1mYW1pbHk9IicrTmVbYXRdKyciLz5cbid9KS5qb2luKCIiKSsiIDwvb2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiI7cGUu''@;'; put 'put ''cHVzaChFdCkscGUucHVzaChQZS5qb2luKCIiKSl9KE5lLHllKSxOZS5wdXNoKCIgIDxvZmZpY2U6Ym9keT5cbiIpLE5lLnB1c2goIiAgICA8b2ZmaWNlOnNwcmVhZHNoZWV0PlxuIik7Zm9yKHZhciBjdD0wO2N0IT15ZS5TaGVldE5hbWVzLmxlbmd0aDsrK2N0KU5lLnB1c2goUSh5ZS5TaGVl''@;'; put 'put ''dHNbeWUuU2hlZXROYW1lc1tjdF1dLHllLGN0KSk7cmV0dXJuIE5lLnB1c2goIiAgICA8L29mZmljZTpzcHJlYWRzaGVldD5cbiIpLE5lLnB1c2goIiAgPC9vZmZpY2U6Ym9keT5cbiIpLE5lLnB1c2goImZvZHMiPT1QZS5ib29rVHlwZT8iPC9vZmZpY2U6ZG9jdW1lbnQ+IjoiPC9vZmZpY2U6''@;'; put 'put ''ZG9jdW1lbnQtY29udGVudD4iKSxOZS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gUkkoUyxSKXtpZigiZm9kcyI9PVIuYm9va1R5cGUpcmV0dXJuIFA4KFMsUik7dmFyIGs9aGkoKSxHPSIiLFE9W10sb2U9W107cmV0dXJuIGpuKGssRz0ibWltZXR5cGUiLCJhcHBsaWNhdGlvbi92bmQub2FzaXMu''@;'; put 'put ''b3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Iiksam4oayxHPSJjb250ZW50LnhtbCIsUDgoUyxSKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxvZS5wdXNoKFtHLCJDb250ZW50RmlsZSJdKSxqbihrLEc9InN0eWxlcy54bWwiLFV6KFMsUikpLFEucHVzaChbRywidGV4dC94bWwiXSksb2UucHVz''@;'; put 'put ''aChbRywiU3R5bGVzRmlsZSJdKSxqbihrLEc9Im1ldGEueG1sIixJaStSNigpKSxRLnB1c2goW0csInRleHQveG1sIl0pLG9lLnB1c2goW0csIk1ldGFkYXRhRmlsZSJdKSxqbihrLEc9Im1hbmlmZXN0LnJkZiIsZnVuY3Rpb24gUHUoUyl7dmFyIFI9W0lpXTtSLnB1c2goJzxyZGY6UkRGIHht''@;'; put 'put ''bG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+XG4nKTtmb3IodmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spUi5wdXNoKGV1KFNba11bMF0sU1trXVsxXSkpLFIucHVzaChuMigiIixTW2tdWzBdKSk7cmV0dXJuIFIucHVzaChldSgiIiwiRG9jdW1l''@;'; put 'put ''bnQiLCJwa2ciKSksUi5wdXNoKCI8L3JkZjpSREY+IiksUi5qb2luKCIiKX0ob2UpKSxRLnB1c2goW0csImFwcGxpY2F0aW9uL3JkZit4bWwiXSksam4oayxHPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIHhjKFMpe3ZhciBSPVtJaV07Ui5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZl''@;'; put 'put ''c3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksUi5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVy''@;'; put 'put ''c2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSIn''@;'; put 'put ''K1Nba11bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJytTW2tdWzFdKyciLz5cbicpO3JldHVybiBSLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksUi5qb2luKCIiKX0oUSkpLGt9ZnVuY3Rpb24gT2YoUyl7cmV0dXJuIGZ1bmN0aW9uKGssRyl7dmFyIFE9ZnVuY3Rpb24gWnooUyxS''@;'; put 'put ''KXtpZighUilyZXR1cm4gMDt2YXIgaz1TLlNoZWV0TmFtZXMuaW5kZXhPZihSKTtpZigtMT09ayl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitSKTtyZXR1cm4ga30oayxHLnNoZWV0KTtyZXR1cm4gUy5mcm9tX3NoZWV0KGsuU2hlZXRzW2suU2hlZXROYW1lc1tRXV0sRyxr''@;'; put 'put ''KX19dmFyIFd6PU9mKG1kKSxZej1PZih7ZnJvbV9zaGVldDpDMH0pLEd6PU9mKHR5cGVvZiBjQzwidSI/Y0M6e30pLHZkPU9mKHR5cGVvZiBEdjwidSI/RHY6e30pLExJPU9mKHR5cGVvZiBqMzwidSI/ajM6e30pLE9JPU9mKHR5cGVvZiBWdjwidSI/VnY6e30pLCR6PU9mKHtmcm9tX3NoZWV0''@;'; put 'put ''OmpJfSksZXJlPU9mKHR5cGVvZiBCMzwidSI/QjM6e30pLFBJPU9mKHR5cGVvZiBLNjwidSI/SzY6e30pLFdsPXkoOTE0MjYpfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0b0Jyb3dzZXJpZnk7aWYoIVdsKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgY3J5cHRvIGV4dGVu''@;'; put 'put ''c2lvbnMhIik7dmFyIG5wPXtTSEE1MTI6InNoYTUxMiIsU0hBMjU2OiJzaGEyNTYiLFNIQTM4NDoic2hhMzg0IixTSEExOiJzaGExIixNRDU6Im1kNSIsTUQ0OiJtZDQiLE1EMjoibWQyIn07ZnVuY3Rpb24gbWMoUyxSKXtzd2l0Y2goUj0oUnx8IiIpLnJlcGxhY2UoLy0vZywiIikpe2Nhc2Ui''@;'; put 'put ''U0hBLTUxMiI6Y2FzZSJTSEE1MTIiOnJldHVybiBuZXcgV2wuY3JlYXRlSGFzaCgic2hhNTEyIikudXBkYXRlKFMpLmRpZ2VzdCgpO2Nhc2UiU0hBLTEiOmNhc2UiU0hBMSI6cmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKCJzaGExIikudXBkYXRlKFMpLmRpZ2VzdCgpO2Nhc2UiTUQyIjpyZXR1''@;'; put 'put ''cm4gbmV3IFdsLmNyZWF0ZUhhc2goIm1kMiIpLnVwZGF0ZShTKS5kaWdlc3QoKTtkZWZhdWx0OmlmKG5wW1JdKXJldHVybiBuZXcgV2wuY3JlYXRlSGFzaChucFtSXSkudXBkYXRlKFMpLmRpZ2VzdCgpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitSKX19''@;'; put 'put ''ZnVuY3Rpb24gWTQoUyxSLGspe2lmKCJyYzIiPT1rKXRocm93IlVuc3VwcG9ydGVkIFJDMiI7dmFyIEc9V2wuY3JlYXRlRGVjaXBoZXJpdihrfHwiYWVzLTI1Ni1jYmMiLFMsUik7cmV0dXJuIEcuc2V0QXV0b1BhZGRpbmcoITEpLEd9ZnVuY3Rpb24gRjgoUyl7cmV0dXJuWygiMDAiKygyNTUm''@;'; put 'put ''UykudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj44JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj4xNiYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+MjQmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKV0uam9pbigiIil9''@;'; put 'put ''dmFyIEc0PWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9InN0cmluZyI9PXR5cGVvZiBSP0J1ZmZlci5mcm9tKFIsImhleCIpOlIsUT0ic3RyaW5nIj09dHlwZW9mIFM/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxTKSk6UyxvZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVm''@;'; put 'put ''ZmVyLmZyb20oaywiaGV4Iik6ayxnZT1tYyhRLCJNRDUiKSxwZT1CdWZmZXIuY29uY2F0KFtnZS5zbGljZSgwLDUpLEddKSx5ZT0wO3llPDQ7Kyt5ZSlwZT1CdWZmZXIuY29uY2F0KFtwZSxwZV0pO3ZhciBQZT1tYyhwZSwiTUQ1Iik7cmV0dXJuKG1jKEJ1ZmZlci5jb25jYXQoW1BlLnNsaWNl''@;'; put 'put ''KDAsNSksb2VdKSwiTUQ1IikudG9TdHJpbmcoImhleCIpKyIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLnNsaWNlKDAsMzIpfSwkND1mdW5jdGlvbihTLFIsayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBSP0J1ZmZlci5mcm9tKFIsImhleCIpOlIsUT0ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFM/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxTKSk6UyxvZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVmZmVyLmZyb20oaywiaGV4Iik6ayxnZT1tYyhCdWZmZXIuY29uY2F0KFtHLFFdKSwiU0hBMSIpO3JldHVybiBtYyhCdWZmZXIuY29uY2F0KFtnZSxvZV0pLCJT''@;'; put 'put ''SEExIil9LFh6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUigpe31SLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbihhdCl7dGhpcy5faT0wO3ZhciBidD10aGlzLl9idWlsZChhdCwiIik7cmV0dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxv''@;'; put 'put ''bmU9InllcyI/PicrYnR9LFIucHJvdG90eXBlLl9idWlsZD1mdW5jdGlvbihhdCxidCl7aWYodGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWF0fHwib2JqZWN0IiE9dHlwZW9mIGF0JiYiZnVuY3Rpb24iIT10eXBlb2YgYXQpbnVsbCE9YXQmJihidCs9ZnVuY3Rpb24g''@;'; put 'put ''UyhhdCxidCl7cmV0dXJuIG51bGw9PWF0fHwoYXQ9YXQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksYnQmJihhdD1hdC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksYXR9KGF0KSk7ZWxzZXtpZighYXQu''@;'; put 'put ''bmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhhdmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShhdCkpO2J0Kz0iPCIrYXQubmFtZTt2YXIganQ9dGhpcztidCs9YXQuYXR0cmlidXRlcyYmTHUoYXQuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkoYXQuY2hpbGRy''@;'; put 'put ''ZW4pJiYwIT1hdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsYXQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihrdCl7YnQ9anQuX2J1aWxkKGt0LGJ0KX0pLGJ0Kz0iPC8iK2F0Lm5hbWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3ZhciBrPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAs''@;'; put 'put ''MCwwXSksb2U9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEs''@;'; put 'put ''MTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gZ2UoYXQsYnQsanQsa3QsT3QsS3Qpe3ZhciBU''@;'; put 'put ''bj1idC50b0xvd2VyQ2FzZSgpKyItIis4Kmt0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JDIiE9PWp0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIranQpO3ZhciBycj1XbFthdD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0oVG4rPSIt''@;'; put 'put ''Y2JjIixrdCxPdCk7cnIuc2V0QXV0b1BhZGRpbmcoITEpO3ZhciBTbj1yci51cGRhdGUoS3QpLGxyPVtTbl07dHJ5e3ZhciBYbj1yci5maW5hbCgpO2xyLnB1c2goWG4pfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdChscil9ZnVuY3Rpb24gcGUoYXQpe2F0PWF0LnRvTG93ZXJDYXNlKCk7''@;'; put 'put ''dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKFdsLmdldEhhc2hlcygpLmluZGV4T2YoYXQpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK2F0KTt2YXIga3Q9V2wuY3JlYXRlSGFzaChhdCk7cmV0dXJuIGt0LnVwZGF0ZShCdWZmZXIu''@;'; put 'put ''Y29uY2F0KGJ0KSksa3QuZGlnZXN0KCl9ZnVuY3Rpb24geWUoYXQsYnQsanQsa3QpeyJudW1iZXIiPT10eXBlb2Yga3QmJihrdD1QZShrdCkpO3ZhciBPdD1wZShhdCxidCxrdCk7aWYoT3QubGVuZ3RoPGp0KXt2YXIgS3Q9QnVmZmVyLmFsbG9jKGp0LDU0KTtPdC5jb3B5KEt0KSxPdD1LdH1l''@;'; put 'put ''bHNlIE90Lmxlbmd0aD5qdCYmKE90PU90LnNsaWNlKDAsanQpKTtyZXR1cm4gT3R9ZnVuY3Rpb24gUGUoYXQsYnQpe3ZhciBqdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBqdC53cml0ZVVJbnQzMkxFKGF0LDApLGp0fWZ1bmN0aW9uIE5lKGF0LGJ0LGp0LGt0LE90LEt0KXtmb3IodmFy''@;'; put 'put ''IHJyPXBlKGJ0LGp0LEJ1ZmZlci5mcm9tKGF0LCJ1dGYxNmxlIikpLFNuPTA7U248a3Q7U24rKylycj1wZShidCxQZShTbikscnIpO3ZhciBYbj1PdC84O2lmKChycj1wZShidCxycixLdCkpLmxlbmd0aDxYbil7dmFyIEJuPUJ1ZmZlci5hbGxvYyhYbiw1NCk7cnIuY29weShCbikscnI9Qm59''@;'; put 'put ''ZWxzZSByci5sZW5ndGg+WG4mJihycj1yci5zbGljZSgwLFhuKSk7cmV0dXJuIHJyfXJldHVybiBXbC5yYW5kb21CeXRlc3x8KFdsLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGF0KXtmb3IodmFyIGJ0PUJ1ZmZlci5hbGxvYyhhdCksanQ9MDtqdDxhdDsrK2p0KWJ0W2p0XT1NYXRoLmZsb29yKDI1''@;'; put 'put ''NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiBFdChhdCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBhdClyZXR1cm4gRXQoQnVmZmVyLmZyb20oYXQsImJpbmFyeSIpLGJ0KTt2YXIganQ9V2wucmFuZG9tQnl0ZXMoMzIpLGt0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06''@;'; put 'put ''IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOldsLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqanQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixj''@;'; put 'put ''aXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6V2wucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sT3Q9ZnVuY3Rpb24gWWUoYXQsYnQsanQsa3QsT3Qs''@;'; put 'put ''S3QsVG4scnIpe2Zvcih2YXIgU249W10sbHI9YXQ/MDo4LFhuPTAsQm49MCxmcj0wO2ZyPHJyLmxlbmd0aDspeyhmcj0oQm49ZnIpKzQwOTYpPnJyLmxlbmd0aCYmKGZyPXJyLmxlbmd0aCk7dmFyIGJyPXJyLnNsaWNlKEJuK2xyLGZyK2xyKSxlcj1ici5sZW5ndGglT3Q7ZXImJihicj1CdWZm''@;'; put 'put ''ZXIuY29uY2F0KFticixCdWZmZXIuYWxsb2MoT3QtZXIpXSkpO3ZhciBGaT1nZShhdCxidCxqdCxUbix5ZShrdCxLdCxPdCxYbiksYnIpO1NuLnB1c2goRmkpLFhuKyt9dmFyIG5hPUJ1ZmZlci5jb25jYXQoU24pO2lmKGF0KW5hPUJ1ZmZlci5jb25jYXQoW1BlKHJyLmxlbmd0aCw4KSxuYV0p''@;'; put 'put ''O2Vsc2V7dmFyIGNhPXJyLnJlYWRVSW50MzJMRSgwKTtuYT1uYS5zbGljZSgwLGNhKX1yZXR1cm4gbmF9KCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2UuYmxvY2tTaXplLGt0''@;'; put 'put ''LnBhY2thZ2Uuc2FsdFZhbHVlLGp0LGF0KSxLdD1XbC5yYW5kb21CeXRlcyg2NCksVG49eWUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLG9lLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSkscnI9Z2UoITAsa3QucGFja2Fn''@;'; put 'put ''ZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxqdCxUbixLdCksU249ZnVuY3Rpb24gZXQoYXQsYnQpe2F0PWF0LnRvTG93ZXJDYXNlKCk7dmFyIGp0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKFdsLmdldEhhc2hlcygpLmluZGV4T2YoYXQpPDApdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIithdCsiJyBub3Qgc3VwcG9ydGVkISIpO3ZhciBPdD1XbC5jcmVhdGVIbWFjKGF0LGJ0KTtyZXR1cm4gT3QudXBkYXRlKEJ1ZmZlci5jb25jYXQoanQpKSxPdC5kaWdlc3QoKX0oa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLEt0LE90KSxs''@;'; put 'put ''cj15ZShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5zYWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsb2UuZGF0YUludGVncml0eS5obWFjVmFsdWUpLFhuPWdlKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsanQs''@;'; put 'put ''bHIsU24pO2t0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6cnIsZW5jcnlwdGVkSG1hY1ZhbHVlOlhufTt2YXIgQm49TmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLG9lLmtleSk7a3Qua2V5''@;'; put 'put ''LmVuY3J5cHRlZEtleVZhbHVlPWdlKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLEJuLGt0LmtleS5zYWx0VmFsdWUsanQpO3ZhciBmcj1XbC5yYW5kb21CeXRlcygxNiksYnI9TmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1''@;'; put 'put ''ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLG9lLnZlcmlmaWVySGFzaC5pbnB1dCk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PWdlKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLGJyLGt0LmtleS5zYWx0VmFsdWUsZnIp''@;'; put 'put ''O3ZhciBlcj1wZShrdC5rZXkuaGFzaEFsZ29yaXRobSxmciksTWk9TmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLG9lLnZlcmlmaWVySGFzaC52YWx1ZSk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFz''@;'; put 'put ''aFZhbHVlPWdlKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLE1pLGt0LmtleS5zYWx0VmFsdWUsZXIpO3ZhciBGaT1mdW5jdGlvbiBjdChhdCl7dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''bWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1sbnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYv''@;'; put 'put ''a2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1lOiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0U2l6ZTphdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmF0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6YXQucGFja2FnZS5rZXlCaXRzLGhhc2hT''@;'; put 'put ''aXplOmF0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmF0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmF0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTphdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmF0LnBhY2th''@;'; put 'put ''Z2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJkYXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OmF0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOmF0LmRhdGFJ''@;'; put 'put ''bnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVu''@;'; put 'put ''Y3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNyeXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5Db3VudDphdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOmF0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTphdC5rZXkuYmxvY2tTaXplLGtleUJpdHM6YXQua2V5''@;'; put 'put ''LmtleUJpdHMsaGFzaFNpemU6YXQua2V5Lmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTphdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmF0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmF0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTphdC5rZXkuc2Fs''@;'; put 'put ''dFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dDphdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOmF0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1''@;'; put 'put ''ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6YXQua2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LGt0PShuZXcgUikuYnVpbGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGt0LCJ1dGY4IildKX0oa3Qp''@;'; put 'put ''LG5hPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gdmUudXRpbHMuY2ZiX2FkZChuYSwiRW5jcnlwdGlvbkluZm8iLEZpKSx2ZS51dGlscy5jZmJfYWRkKG5hLCJFbmNyeXB0ZWRQYWNrYWdlIixPdCksbmF9fSgpO2Z1bmN0aW9uIEhJKFMpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIEc9''@;'; put 'put ''MDtHIT1TLmxlbmd0aDsrK0cpe3ZhciBRPVNbR107dm9pZCAwPT09a1tRWzBdXSYmKGtbUVswXV09UVsxXSksIm4iPT09UVsyXSYmKGtbUVswXV09TnVtYmVyKGtbUVswXV0pKX19fXZhciBOST1mdW5jdGlvbihTKXtISShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwhMF0sWyJjZWxsRm9y''@;'; put 'put ''bXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJib29rRmlsZXMiLCEx''@;'; put 'put ''XSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKFMpLFMuYm9va0ltYWdlcyYmKFMuY2VsbFN0eWxlcz0hMCl9LFBmPUhJKFtbImNlbGxEYXRlcyIsITFdLFsiYm9va1NTVCIsITFdLFsiYm9va1R5cGUiLCJ4bHN4Il0sWyJjb21wcmVzc2lvbiIsITFdLFsiV1RG''@;'; put 'put ''IiwhMV1dKTtmdW5jdGlvbiBucmUoUyl7cmV0dXJuIEthLldTLmluZGV4T2YoUyk+LTE/InNoZWV0IjpLYS5DUyYmUz09S2EuQ1M/ImNoYXJ0IjpLYS5EUyYmUz09S2EuRFM/ImRpYWxvZyI6S2EuTVMmJlM9PUthLk1TPyJtYWNybyI6UyYmUy5sZW5ndGg/Uzoic2hlZXQifXZhciBQYj1bXTtm''@;'; put 'put ''dW5jdGlvbiB5MihTLFIsayxHLFEsb2UsZ2UscGUseWUsUGUsTmUsWWUpe3RyeXtvZVtHXT1iZihucihTLGssITApLFIpO3ZhciBjdCxldD1UdChTLFIpO3N3aXRjaChwZSl7Y2FzZSJzaGVldCI6Y3Q9ZnVuY3Rpb24gYnooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4iLmJpbiI9PT1SLnNs''@;'; put 'put ''aWNlKC00KT9mdW5jdGlvbiBRaihTLFIsayxHLFEsb2UsZ2Upe2lmKCFTKXJldHVybiBTO3ZhciBwZT1SfHx7fTtHfHwoRz17IiFpZCI6e319KSxudWxsIT1sZSYmbnVsbD09cGUuZGVuc2UmJihwZS5kZW5zZT1sZSk7dmFyIFBlLEV0LGF0LGJ0LGp0LGt0LE90LEt0LFRuLHJyLHllPXBlLmRl''@;'; put 'put ''bnNlP1tdOnt9LE5lPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFllPVtdLGV0PSExLGN0PSExLFNuPVtdO3BlLmJpZmY9MTIscGVbIiFyb3ciXT0wO3ZhciBscj0wLFhuPSExLEJuPVtdLGZyPXt9LGJyPXBlLnN1cGJvb2tzfHxRLnN1cGJvb2tzfHxbW11dO2lmKGJyLnNoYXJlZGY9''@;'; put 'put ''ZnIsYnIuYXJyYXlmPUJuLGJyLlNoZWV0TmFtZXM9US5TaGVldE5hbWVzfHxRLlNoZWV0cy5tYXAoZnVuY3Rpb24oTGkpe3JldHVybiBMaS5uYW1lfSksIXBlLnN1cGJvb2tzJiYocGUuc3VwYm9va3M9YnIsUS5OYW1lcykpZm9yKHZhciBlcj0wO2VyPFEuTmFtZXMubGVuZ3RoOysrZXIpYnJb''@;'; put 'put ''MF1bZXIrMV09US5OYW1lc1tlcl07dmFyIE1pPVtdLEZpPVtdLG5hPSExO2lmKEw4WzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOkZqfSx1cihTLGZ1bmN0aW9uKGtyLFZuLEJyKXtpZighY3Qpc3dpdGNoKEJyKXtjYXNlIDE0ODpQZT1rcjticmVhaztjYXNlIDA6RXQ9a3IscGUuc2hlZXRSb3dz''@;'; put 'put ''JiZwZS5zaGVldFJvd3M8PUV0LnImJihjdD0hMCksVG49amkoanQ9RXQucikscGVbIiFyb3ciXT1FdC5yLChrci5oaWRkZW58fGtyLmhwdHx8bnVsbCE9a3IubGV2ZWwpJiYoa3IuaHB0JiYoa3IuaHB4PXNoKGtyLmhwdCkpLEZpW2tyLnJdPWtyKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2Ug''@;'; put 'put ''NDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goYXQ9e3Q6a3JbMl19LGtyWzJdKXtjYXNlIm4iOmF0LnY9a3JbMV07YnJlYWs7Y2FzZSJzIjphdC52''@;'; put 'put ''PShLdD1sOFtrclsxXV0pLnQscGUuY2VsbFN0eWxlcyYmKGF0LlI9ZnVuY3Rpb24gRVYoUyxSKXtpZihTLlIpcmV0dXJuIFMuUjtpZihSJiZSLkZvbnRzJiYoMSE9Uy5yLmxlbmd0aHx8MCE9Uy5yWzBdLmljaCkpe1MuUj1bXTt2YXIgaz0wLEc9Uy5yW2tdLFE9Uy5yW2srMV07Zm9yKEcuaWNo''@;'; put 'put ''PjAmJlMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgwLEcuaWNoKX0pO2s8Uy5yLmxlbmd0aC0xOysraylTLlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoKEc9Uy5yW2tdKS5pY2gsKFE9Uy5yW2srMV0pLmljaCksczpSLkZvbnRzW0cuaWZudF19KTtyZXR1cm4gUy5SLnB1c2goe3Q6InMi''@;'; put 'put ''LHY6Uy50LnNsaWNlKChRfHxHKS5pY2gpLHM6Ui5Gb250c1soUXx8RykuaWZudF19KSxTLlJ9fShLdCxnZSkpO2JyZWFrO2Nhc2UiYiI6YXQudj0hIWtyWzFdO2JyZWFrO2Nhc2UiZSI6YXQudj1rclsxXSwhMSE9PXBlLmNlbGxUZXh0JiYoYXQudz1NY1thdC52XSk7YnJlYWs7Y2FzZSJzdHIi''@;'; put 'put ''OmF0LnQ9InMiLGF0LnY9a3JbMV19aWYoKGJ0PWdlLkNlbGxYZltrclswXS5pU3R5bGVSZWZdKSYmSjMoYXQsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCxwZSwwLGdlKSxwZS5jZWxsU3R5bGVzJiZhdC5zJiZidC5hbGlnbm1lbnQmJihhdC5zLmFsaWdubWVu''@;'; put 'put ''dD1xdChidC5hbGlnbm1lbnQpKSxrdD0tMT09a3JbMF0uYz9rdCsxOmtyWzBdLmMscGUuZGVuc2U/KHllW2p0XXx8KHllW2p0XT1bXSkseWVbanRdW2t0XT1hdCk6eWVbVGEoa3QpK1RuXT1hdCxwZS5jZWxsRm9ybXVsYSl7Zm9yKFhuPSExLGxyPTA7bHI8Qm4ubGVuZ3RoOysrbHIpe3ZhciBf''@;'; put 'put ''cj1Cbltscl07RXQucj49X3JbMF0ucy5yJiZFdC5yPD1fclswXS5lLnImJmt0Pj1fclswXS5zLmMmJmt0PD1fclswXS5lLmMmJihhdC5GPXJhKF9yWzBdKSxYbj0hMCl9IVhuJiZrci5sZW5ndGg+MyYmKGF0LmY9a3JbM10pfWlmKE5lLnMucj5FdC5yJiYoTmUucy5yPUV0LnIpLE5lLnMuYz5r''@;'; put 'put ''dCYmKE5lLnMuYz1rdCksTmUuZS5yPEV0LnImJihOZS5lLnI9RXQuciksTmUuZS5jPGt0JiYoTmUuZS5jPWt0KSxwZS5jZWxsRGF0ZXMmJmJ0JiYibiI9PWF0LnQmJkEuaXNfZGF0ZShBLl90YWJsZVtidC5udW1GbXRJZF0pKXt2YXIgRm49QS5wYXJzZV9kYXRlX2NvZGUoYXQudik7Rm4mJihh''@;'; put 'put ''dC50PSJkIixhdC52PW5ldyBEYXRlKEZuLnksRm4ubS0xLEZuLmQsRm4uSCxGbi5NLEZuLlMsRm4udSkpfWJyZWFrO2Nhc2UgMTpjYXNlIDEyOmlmKCFwZS5zaGVldFN0dWJzfHxldClicmVhazthdD17dDoieiIsdjp2b2lkIDB9LGt0PS0xPT1rclswXS5jP2t0KzE6a3JbMF0uYywoYnQ9Z2Uu''@;'; put 'put ''Q2VsbFhmW2tyWzBdLmlTdHlsZVJlZl0pJiZKMyhhdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHBlLDAsZ2UpLHBlLmNlbGxTdHlsZXMmJmF0LnMmJmJ0LmFsaWdubWVudCYmKGF0LnMuYWxpZ25tZW50PXF0KGJ0LmFsaWdubWVudCkpLHBlLmRlbnNlPyh5''@;'; put 'put ''ZVtqdF18fCh5ZVtqdF09W10pLHllW2p0XVtrdF09YXQpOnllW1RhKGt0KStUbl09YXQsTmUucy5yPkV0LnImJihOZS5zLnI9RXQuciksTmUucy5jPmt0JiYoTmUucy5jPWt0KSxOZS5lLnI8RXQuciYmKE5lLmUucj1FdC5yKSxOZS5lLmM8a3QmJihOZS5lLmM9a3QpO2JyZWFrO2Nhc2UgMTc2''@;'; put 'put ''OlNuLnB1c2goa3IpO2JyZWFrO2Nhc2UgNDk0OnZhciBqcj1HWyIhaWQiXVtrci5yZWxJZF07Zm9yKGpyPyhrci5UYXJnZXQ9anIuVGFyZ2V0LGtyLmxvYyYmKGtyLlRhcmdldCs9IiMiK2tyLmxvYyksa3IuUmVsPWpyKToiIj09a3IucmVsSWQmJihrci5UYXJnZXQ9IiMiK2tyLmxvYyksanQ9''@;'; put 'put ''a3IucmZ4LnMucjtqdDw9a3IucmZ4LmUucjsrK2p0KWZvcihrdD1rci5yZngucy5jO2t0PD1rci5yZnguZS5jOysra3QpcGUuZGVuc2U/KHllW2p0XXx8KHllW2p0XT1bXSkseWVbanRdW2t0XXx8KHllW2p0XVtrdF09e3Q6InoiLHY6dm9pZCAwfSkseWVbanRdW2t0XS5sPWtyKTooT3Q9cWko''@;'; put 'put ''e2M6a3QscjpqdH0pLHllW090XXx8KHllW090XT17dDoieiIsdjp2b2lkIDB9KSx5ZVtPdF0ubD1rcik7YnJlYWs7Y2FzZSA0MjY6aWYoIXBlLmNlbGxGb3JtdWxhKWJyZWFrO0JuLnB1c2goa3IpLChycj1wZS5kZW5zZT95ZVtqdF1ba3RdOnllW1RhKGt0KStUbl0pLmY9czAoa3JbMV0sTmUs''@;'; put 'put ''e3I6RXQucixjOmt0fSxicixwZSkscnIuRj1yYShrclswXSk7YnJlYWs7Y2FzZSA0Mjc6aWYoIXBlLmNlbGxGb3JtdWxhKWJyZWFrO2ZyW3FpKGtyWzBdLnMpXT1rclsxXSwocnI9cGUuZGVuc2U/eWVbanRdW2t0XTp5ZVtUYShrdCkrVG5dKS5mPXMwKGtyWzFdLE5lLHtyOkV0LnIsYzprdH0s''@;'; put 'put ''YnIscGUpO2JyZWFrO2Nhc2UgNjA6aWYoIXBlLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtrci5lPj1rci5zOylNaVtrci5lLS1dPXt3aWR0aDprci53LzI1NixoaWRkZW46ISEoMSZrci5mbGFncyksbGV2ZWw6a3IubGV2ZWx9LG5hfHwobmE9ITApLFEwKE1pW2tyLmUrMV0pO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MTYxOnllWyIhYXV0b2ZpbHRlciJdPXtyZWY6cmEoa3IpfTticmVhaztjYXNlIDQ3Njp5ZVsiIW1hcmdpbnMiXT1rcjticmVhaztjYXNlIDE0NzpRLlNoZWV0c1trXXx8KFEuU2hlZXRzW2tdPXt9KSxrci5uYW1lJiYoUS5TaGVldHNba10uQ29kZU5hbWU9a3IubmFtZSksKGtyLmFib3ZlfHxr''@;'; put 'put ''ci5sZWZ0KSYmKHllWyIhb3V0bGluZSJdPXthYm92ZTprci5hYm92ZSxsZWZ0OmtyLmxlZnR9KTticmVhaztjYXNlIDEzNzpRLlZpZXdzfHwoUS5WaWV3cz1be31dKSxRLlZpZXdzWzBdfHwoUS5WaWV3c1swXT17fSksa3IuUlRMJiYoUS5WaWV3c1swXS5SVEw9ITApLGtyLmdyaWR8fChRLlZp''@;'; put 'put ''ZXdzWzBdLmdyaWQ9ITEseWVbIiFncmlkbGluZXMiXT0hMSk7YnJlYWs7Y2FzZSA0ODU6eWVbIiFzaGVldEZvcm1hdCJdPWtyO2JyZWFrO2Nhc2UgNjQ6Y2FzZSAxMDUzOiFmdW5jdGlvbiBKaihTLFIsayxHKXtpZihSKXt2YXIgUT17cmVmOlIuc3FyZngsdDpSLnR9O1Iub3AmJihRLm9wPVIu''@;'; put 'put ''b3ApO3ZhciBvZT0iIixnZT0iIixwZT1SLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgUi5zcXJmeD9vbyhSLnNxcmZ4LnNwbGl0KCIsIilbMF0pOlIuc3FyZng6bnVsbDtpZihSLmYxJiYob2U9czAoUi5mMSxwZSxudWxsLGssRywhMCkpLFIuZjImJihnZT1zMChSLmYyLHBlLG51bGwsayxHLCEw''@;'; put 'put ''KSksUi5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZihSLm9wKT49LTEpUS5taW49b2UsUS5tYXg9Z2U7ZWxzZSBpZihSLm9wKVEudj1vZTtlbHNlIHRyeXtzd2l0Y2goUi50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09Ui5mMVswXVswXVswXSYmMT09Ui5mMVswXS5sZW5ndGgpe1EubD1SLmYx''@;'; put 'put ''WzBdWzBdWzFdLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOlEuZj1vZX19Y2F0Y2h7fVNbIiF2YWxpZGF0aW9ucyJdfHwoU1siIXZhbGlkYXRpb25zIl09W10pLFNbIiF2YWxpZGF0aW9ucyJdLnB1c2goUSl9fSh5ZSxrcixicixwZSk7YnJlYWs7Y2FzZSAxNTE6eWVbIiFmcmVlemUi''@;'; put 'put ''XT1rclswXTticmVhaztjYXNlIDE1Mjp5ZVsiIXNlbCJdPWtyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNh''@;'; put 'put ''c2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpj''@;'; put 'put ''YXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcw''@;'; put 'put ''OmNhc2UgMTA0NTpicmVhaztjYXNlIDM1OmV0PSEwO2JyZWFrO2Nhc2UgMzY6ZXQ9ITE7YnJlYWs7Y2FzZSAzNzpZZS5wdXNoKFZuKSxldD0hMDticmVhaztjYXNlIDM4OlllLnBvcCgpLGV0PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoVm58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChW''@;'; put 'put ''bnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWV0fHxwZS5XVEYmJiJCcnRBQ0JlZ2luIiE9WWVbWWUubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQnIrIiAiK1ZuKX19LHBlKSxkZWxldGUgcGUuc3VwYm9va3MsZGVsZXRlIHBlWyIhcm93Il0sIXll''@;'; put 'put ''WyIhcmVmIl0mJihOZS5zLnI8MmU2fHxQZSYmKFBlLmUucj4wfHxQZS5lLmM+MHx8UGUucy5yPjB8fFBlLnMuYz4wKSkmJih5ZVsiIXJlZiJdPXJhKFBlfHxOZSkpLHBlLnNoZWV0Um93cyYmeWVbIiFyZWYiXSl7dmFyIGNhPW9vKHllWyIhcmVmIl0pO3BlLnNoZWV0Um93czw9K2NhLmUuciYm''@;'; put 'put ''KGNhLmUucj1wZS5zaGVldFJvd3MtMSxjYS5lLnI+TmUuZS5yJiYoY2EuZS5yPU5lLmUuciksY2EuZS5yPGNhLnMuciYmKGNhLnMucj1jYS5lLnIpLGNhLmUuYz5OZS5lLmMmJihjYS5lLmM9TmUuZS5jKSxjYS5lLmM8Y2Eucy5jJiYoY2Eucy5jPWNhLmUuYykseWVbIiFmdWxscmVmIl09eWVb''@;'; put 'put ''IiFyZWYiXSx5ZVsiIXJlZiJdPXJhKGNhKSl9cmV0dXJuIFNuLmxlbmd0aD4wJiYoeWVbIiFtZXJnZXMiXT1TbiksTWkubGVuZ3RoPjAmJih5ZVsiIWNvbHMiXT1NaSksRmkubGVuZ3RoPjAmJih5ZVsiIXJvd3MiXT1GaSkseWV9KFMsRyxrLFEsb2UsMCxwZSk6ZnVuY3Rpb24gaDgoUyxSLGss''@;'; put 'put ''RyxRLG9lLGdlKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KSxudWxsIT1sZSYmbnVsbD09Ui5kZW5zZSYmKFIuZGVuc2U9bGUpO3ZhciBwZT1SLmRlbnNlP1tdOnt9LHllPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFBlPSIiLE5lPSIiLFllPVMubWF0Y2godkQpO1ll''@;'; put 'put ''PyhQZT1TLnNsaWNlKDAsWWUuaW5kZXgpLE5lPVMuc2xpY2UoWWUuaW5kZXgrWWVbMF0ubGVuZ3RoKSk6UGU9TmU9Uzt2YXIgZXQ9TmUubGFzdEluZGV4T2YoImV4dExzdCIpLEV0PSgtMT09ZXR8fE5lLnNsaWNlKGV0KSxQZS5tYXRjaChfRCkpO0V0P2NiKEV0WzBdLDAsUSxrKTooRXQ9UGUu''@;'; put 'put ''bWF0Y2goQ0QpKSYmZnVuY3Rpb24gb2ooUyxSLGssRyxRLG9lLGdlKXtjYihTLnNsaWNlKDAsUy5pbmRleE9mKCI+IikpLDAsRyxRKTt2YXIgcGU9Ui5tYXRjaChtUyk7aWYocGUpe3ZhciBQZT1nayh2cihwZVswXSksb2UsZ2UpO2tbIiF0YWJjb2xvciJdPVBlfWlmKChwZT1SLm1hdGNoKGlq''@;'; put 'put ''KSkmJnZyKHBlWzBdKS5maXRUb1BhZ2UmJihrWyIhcHJpbnQiXXx8KGtbIiFwcmludCJdPXt9KSxrWyIhcHJpbnQiXS5wcm9wc3x8KGtbIiFwcmludCJdLnByb3BzPXt9KSxrWyIhcHJpbnQiXS5wcm9wcy5maXR8fChrWyIhcHJpbnQiXS5wcm9wcy5maXQ9e30pLG51bGw9PWtbIiFwcmludCJd''@;'; put 'put ''LnByb3BzLmZpdC5oZWlnaHQmJihrWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0PTEpLG51bGw9PWtbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aCYmKGtbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aD0xKSkscGU9Ui5tYXRjaChhaikpe2tbIiFvdXRsaW5lIl09e307dmFyIFllPXZyKHBl''@;'; put 'put ''WzBdKTtZZS5zdW1tYXJ5QmVsb3cmJihrWyIhb3V0bGluZSJdLmFib3ZlPSF0aShZZS5zdW1tYXJ5QmVsb3cpKSxZZS5zdW1tYXJ5UmlnaHQmJihrWyIhb3V0bGluZSJdLmxlZnQ9IXRpKFllLnN1bW1hcnlSaWdodCkpfX0oRXRbMF0sRXRbMV18fCIiLHBlLFEsayxnZSxvZSk7dmFyIGF0PShQ''@;'; put 'put ''ZS5tYXRjaCgvPCg/Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtpZihhdD4wKXt2YXIgYnQ9UGUuc2xpY2UoYXQsYXQrNTApLm1hdGNoKHNiKTtidCYmKCFSfHwhUi5ub2RpbSkmJmZ1bmN0aW9uIGNTKFMsUil7dmFyIGs9b28oUik7ay5zLnI8PWsuZS5yJiZrLnMuYzw9''@;'; put 'put ''ay5lLmMmJmsucy5yPj0wJiZrLnMuYz49MCYmKFNbIiFyZWYiXT1yYShrKSl9KHBlLGJ0WzFdKX12YXIganQ9UGUubWF0Y2goUm8pO2p0JiZqdFsxXSYmZnVuY3Rpb24gQ2ooUyxSLGssRyl7ay5WaWV3c3x8KGsuVmlld3M9W3t9XSk7dmFyIFE9MDtTLnJlcGxhY2UoU1MsZnVuY3Rpb24ob2Us''@;'; put 'put ''Z2Upe3ZhciBwZT12cihvZSk7aWYoay5WaWV3c1tHXXx8KGsuVmlld3NbR109e30pLHRpKHBlLnJpZ2h0VG9MZWZ0KSYmKGsuVmlld3NbR10uUlRMPSEwKSxwZS5zaG93R3JpZExpbmVzJiYoay5WaWV3c1tHXS5ncmlkPXRpKHBlLnNob3dHcmlkTGluZXMpLG51bGw9PVJbIiFncmlkbGluZXMi''@;'; put 'put ''XSYmKFJbIiFncmlkbGluZXMiXT10aShwZS5zaG93R3JpZExpbmVzKSkpLCtwZS56b29tU2NhbGUmJihrLlZpZXdzW0ddLnpvb209K3BlLnpvb21TY2FsZSkscGUudmlldyYmKGsuVmlld3NbR10udmlldz1wZS52aWV3KSwxPT0rK1EmJiIvPiIhPW9lLnNsaWNlKC0yKSl7dmFyIHllPVMuc2xp''@;'; put 'put ''Y2UoZ2Urb2UubGVuZ3RoKSxQZT15ZS5tYXRjaCgvPFwvKD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZighUGUpcmV0dXJuIiI7dmFyIE5lPSh5ZT15ZS5zbGljZSgwLFBlLmluZGV4KSkubWF0Y2goLzwoPzpcdzopP3BhbmUoPzpbXj5hLXpdW14+XSopP1wvPz4v''@;'; put 'put ''KTtpZihOZSl7dmFyIFllPXZyKE5lWzBdKTsiZnJvemVuIj09WWUuc3RhdGU/UlsiIWZyZWV6ZSJdPVRhKCtZZS54U3BsaXR8fDApK2ppKCtZZS55U3BsaXR8fDApOlllLnRvcExlZnRDZWxsJiYoUlsiIWZyZWV6ZSJdPVllLnRvcExlZnRDZWxsKX12YXIgZXQ9eWUubWF0Y2goLzwoPzpcdzop''@;'; put 'put ''P3NlbGVjdGlvbig/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKGV0KXt2YXIgY3Q9dnIoZXRbMF0pO2lmKGN0LmFjdGl2ZUNlbGwmJihSWyIhc2VsIl09e2NlbGw6Y3QuYWN0aXZlQ2VsbH0pLGN0LnNxcmVmKXt2YXIgRXQ9Y3Quc3FyZWYucmVwbGFjZSgvXHMuKiQvLCIiKTtSWyIhc2VsIl18''@;'; put 'put ''fChSWyIhc2VsIl09e2NlbGw6cWkoTXMoRXQpLnMpfSksUlsiIXNlbCJdLnJhbmdlPWN0LnNxcmVmfX19cmV0dXJuIiJ9KX0oanRbMV0scGUsUSxrKTt2YXIga3Q9UGUubWF0Y2goR2UpLE90PVtdO2lmKFIuY2VsbFN0eWxlcyl7dmFyIEt0PVBlLm1hdGNoKHRqKTtLdCYmZnVuY3Rpb24geVMo''@;'; put 'put ''UyxSLGspe2Zvcih2YXIgRz0hMSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgb2U9dnIoUltRXSwhMCk7b2UuaGlkZGVuJiYob2UuaGlkZGVuPXRpKG9lLmhpZGRlbikpO3ZhciBnZT1wYXJzZUludChvZS5taW4sMTApLTEscGU9cGFyc2VJbnQob2UubWF4LDEwKS0xO2ZvcihvZS5vdXRsaW5l''@;'; put 'put ''TGV2ZWwmJihvZS5sZXZlbD0rb2Uub3V0bGluZUxldmVsfHwwKSxkZWxldGUgb2UubWluLGRlbGV0ZSBvZS5tYXgsb2Uud2lkdGg9K29lLndpZHRoLCFHJiZvZS53aWR0aCYmKEc9ITApLFEwKG9lKSxvZS5zdHlsZSYmKG9lLnM9bTgob2Uuc3R5bGUsaykpO2dlPD1wZTspU1tnZSsrXT1xdChv''@;'; put 'put ''ZSl9fShPdCxLdCxnZSl9aWYoWWUmJnY4KFllWzFdLGsscGUsUix5ZSxvZSxnZSksUi5jYWxsYmFjaylyZXR1cm4gcGU7dmFyIFRuPU5lLm1hdGNoKHdEKTtUbiYmKHBlWyIhcHJvdGVjdCJdPWZ1bmN0aW9uIGhqKFMpe3ZhciBSPXZyKFMsITAsITApLGs9e307aWYodGkoUi5zaGVldCkpcmV0''@;'; put 'put ''dXJuIGJTLmZvckVhY2goZnVuY3Rpb24oRyl7a1tHXT1udWxsIT1SW0ddJiZ0aShSW0ddKX0pLExELmZvckVhY2goZnVuY3Rpb24oRyl7a1tHXT1udWxsPT1SW0ddfHx0aShSW0ddKX0pLFIuYWxnb3JpdGhtTmFtZSYmKGsuZW5jcnlwdGlvbj17YWxnbzpSLmFsZ29yaXRobU5hbWUsaGFzaDpS''@;'; put 'put ''Lmhhc2hWYWx1ZSxzYWx0OlIuc2FsdFZhbHVlLHNwaW46K1Iuc3BpbkNvdW50fHwxZTV9KSxrfShUblswXSkpO3ZhciBycj1OZS5tYXRjaChuaik7cnImJihwZVsiIWF1dG9maWx0ZXIiXT1mdW5jdGlvbiBnaihTKXtyZXR1cm57cmVmOihTLm1hdGNoKC9yZWY9IihbXiJdKikiLyl8fFtdKVsx''@;'; put 'put ''XX19KHJyWzBdKSk7dmFyIFNuPVtdLGxyPU5lLm1hdGNoKGQ4KTtpZihscilmb3IoYXQ9MDthdCE9bHIubGVuZ3RoOysrYXQpU25bYXRdPW9vKGxyW2F0XS5zbGljZShsclthdF0uaW5kZXhPZignIicpKzEpKTt2YXIgWG49KC0xPT1ldD9OZTpOZS5zbGljZSgwLGV0KSkubWF0Y2goZFMpO1hu''@;'; put 'put ''JiYocGVbIiFjb25kZm10Il09W10uY29uY2F0LmFwcGx5KFtdLFhuLm1hcChmdW5jdGlvbihWbil7cmV0dXJuIHYyKFZuLFIsb2UsZ2UpfSkpKSxldD4tMSYmKFhuPU5lLnNsaWNlKGV0KS5tYXRjaChkUykpJiYocGVbIiFjb25kZm10Il18fChwZVsiIWNvbmRmbXQiXT1bXSkscGVbIiFjb25k''@;'; put 'put ''Zm10Il09cGVbIiFjb25kZm10Il0uY29uY2F0LmFwcGx5KHBlWyIhY29uZGZtdCJdLFhuLm1hcChmdW5jdGlvbihWbil7cmV0dXJuIHYyKFZuLFIsb2UsZ2UsITApfSkpKTt2YXIgQm49KC0xPT1ldD9OZTpOZS5zbGljZSgwLGV0KSkubWF0Y2goZmUpO0JuJiYocGVbIiF2YWxpZGF0aW9ucyJd''@;'; put 'put ''PXdTKEJuWzBdLFIpKSxldD4tMSYmKEJuPU5lLnNsaWNlKGV0KS5tYXRjaChmZSkpJiYocGVbIiF2YWxpZGF0aW9ucyJdfHwocGVbIiF2YWxpZGF0aW9ucyJdPVtdKSxwZVsiIXZhbGlkYXRpb25zIl09cGVbIiF2YWxpZGF0aW9ucyJdLmNvbmNhdCh3UyhCblswXSxSLCEwKSkpO3ZhciBmcj1O''@;'; put 'put ''ZS5tYXRjaCh1Uyk7ZnImJmZ1bmN0aW9uIE9EKFMsUixrKXtmb3IodmFyIEc9QXJyYXkuaXNBcnJheShTKSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgb2U9dnIoZ28oUltRXSksITApO2lmKCFvZS5yZWYpcmV0dXJuO3ZhciBnZT0oKGt8fHt9KVsiIWlkIl18fFtdKVtvZS5pZF07Z2U/KG9l''@;'; put 'put ''LlRhcmdldD1nZS5UYXJnZXQsb2UubG9jYXRpb24mJihvZS5UYXJnZXQrPSIjIitRcihvZS5sb2NhdGlvbikpKToob2UuVGFyZ2V0PSIjIitRcihvZS5sb2NhdGlvbiksZ2U9e1RhcmdldDpvZS5UYXJnZXQsVGFyZ2V0TW9kZToiSW50ZXJuYWwifSksb2UuUmVsPWdlLG9lLnRvb2x0aXAmJihv''@;'; put 'put ''ZS5Ub29sdGlwPW9lLnRvb2x0aXAsZGVsZXRlIG9lLnRvb2x0aXApO2Zvcih2YXIgcGU9b28ob2UucmVmKSx5ZT1wZS5zLnI7eWU8PXBlLmUucjsrK3llKWZvcih2YXIgUGU9cGUucy5jO1BlPD1wZS5lLmM7KytQZSl7dmFyIE5lPXFpKHtjOlBlLHI6eWV9KTtHPyhTW3llXXx8KFNbeWVdPVtd''@;'; put 'put ''KSxTW3llXVtQZV18fChTW3llXVtQZV09e3Q6InoiLHY6dm9pZCAwfSksU1t5ZV1bUGVdLmw9b2UpOihTW05lXXx8KFNbTmVdPXt0OiJ6Iix2OnZvaWQgMH0pLFNbTmVdLmw9b2UpfX19KHBlLGZyLEcpO3ZhciBicj1OZS5tYXRjaChoUyk7YnImJmZ1bmN0aW9uIHNqKFMsUil7dmFyIGs9dnIo''@;'; put 'put ''UywhMSwhMCk7UlsiIXByaW50Il18fChSWyIhcHJpbnQiXT17fSksUlsiIXByaW50Il0ucHJvcHN8fChSWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9UlsiIXByaW50Il0ucHJvcHM7ay5ncmlkTGluZXMmJihHLmdyaWRsaW5lcz10aShrLmdyaWRMaW5lcykpLG51bGwhPWsuaG9yaXpvbnRh''@;'; put 'put ''bENlbnRlcmVkJiYoRy5jZW50ZXJYPXRpKGsuaG9yaXpvbnRhbENlbnRlcmVkKSksbnVsbCE9ay52ZXJ0aWNhbENlbnRlcmVkJiYoRy5jZW50ZXJZPXRpKGsudmVydGljYWxDZW50ZXJlZCkpfShiclswXSxwZSk7dmFyIGVyPU5lLm1hdGNoKHlEKTtlciYmKChwZVsiIXByaW50Il18fChwZVsi''@;'; put 'put ''IXByaW50Il09e30pKS5tYXJnaW5zPXBlWyIhbWFyZ2lucyJdPVBEKHZyKGVyWzBdKSkpO3ZhciBNaT1OZS5tYXRjaChNRCk7TWkmJmZ1bmN0aW9uIElEKFMsUil7dmFyIGs9dnIoUywhMSwhMCk7ZGVsZXRlIGsuaWQsZGVsZXRlIGtbMF0sUlsiIXByaW50Il18fChSWyIhcHJpbnQiXT17fSks''@;'; put 'put ''UlsiIXByaW50Il0ucHJvcHN8fChSWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9UlsiIXByaW50Il0ucHJvcHM7ay5vcmllbnRhdGlvbiYmKEcub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKEcuc2NhbGU9K2suc2NhbGUpLCtrLmZpdFRvSGVpZ2h0Pj0wJiYoKEcuZml0''@;'; put 'put ''fHwoRy5maXQ9e30pKS5oZWlnaHQ9K2suZml0VG9IZWlnaHQpLCtrLmZpdFRvV2lkdGg+PTAmJigoRy5maXR8fChHLmZpdD17fSkpLndpZHRoPStrLmZpdFRvV2lkdGgpLGsucGFwZXJIZWlnaHQmJmsucGFwZXJXaWR0aD9HLnBhcGVyPXt3aWR0aDprLnBhcGVyV2lkdGgsaGVpZ2h0OmsucGFw''@;'; put 'put ''ZXJIZWlnaHR9OmsucGFwZXJTaXplJiYoRy5wYXBlcj1uOFtHLnBhcGVyPStrLnBhcGVyU2l6ZV18fEcucGFwZXIpLGsuaG9yaXpvbnRhbERwaT9HLmRwaT0ray5ob3Jpem9udGFsRHBpOmsudmVydGljYWxEcGkmJihHLmRwaT0ray52ZXJ0aWNhbERwaSksImF1dG9tYXRpYyIhPShrLmZpcnN0''@;'; put 'put ''UGFnZU51bWJlcnx8ImF1dG9tYXRpYyIpJiYoRy5maXJzdD0ray5maXJzdFBhZ2VOdW1iZXIpLHRpKGsuYmxhY2tBbmRXaGl0ZSkmJihHLmJ3PSEwKSx0aShrLmRyYWZ0KSYmKEcuZHJhZnQ9ITApLCJvdmVyVGhlbkRvd24iPT1rLnBhZ2VPcmRlciYmKEcub3JkZXI9Im92ZXIiKSxBRFtrLmNl''@;'; put 'put ''bGxDb21tZW50c10mJihHLmNvbW1lbnRzPUFEW2suY2VsbENvbW1lbnRzXSksRERbay5lcnJvcnNdJiYoRy5lcnJvcnM9RERbay5lcnJvcnNdKX0oTWlbMF0scGUpO3ZhciBGaT1OZS5tYXRjaChqNSk7RmkmJmZ1bmN0aW9uIHZqKFMsUil7aWYoUlsiIXByaW50Il18fChSWyIhcHJpbnQiXT17''@;'; put 'put ''fSksU1sxXSl7dmFyIGs9IiIsRz0wO1NbMV0ucmVwbGFjZShlbixmdW5jdGlvbihRLG9lKXtpZigiLyIhPVEuY2hhckF0KDEpKWs9US5zbGljZSgxLC0xKSxHPW9lK1EubGVuZ3RoO2Vsc2UgaWYoayl7dmFyIGdlPWsubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLHBlPWsucmVw''@;'; put 'put ''bGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO2s9IiIsUlsiIXByaW50Il1bZ2VdfHwoUlsiIXByaW50Il1bZ2VdPXt9KSxSWyIhcHJpbnQiXVtnZV1bcGVdPVFyKGdvKFNbMV0uc2xpY2UoRyxvZSkpKX19KX19KEZpLHBlKTt2YXIgbmE9TmUubWF0Y2gocmopO25hJiYoKHBlWyIhcHJpbnQiXXx8''@;'; put 'put ''KHBlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz1wZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIGNqKFMpe3ZhciBSPVtdO3JldHVybihTLm1hdGNoKEYwKXx8W10pLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9dnIoayk7Ui5wdXNoKHtSOitHLmlkfSl9KSxSfShuYVswXSkpO3ZhciBjYT1O''@;'; put 'put ''ZS5tYXRjaChsYik7Y2EmJigocGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXBlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24ga25lKFMpe3ZhciBSPVtdO3JldHVybihTLm1hdGNoKEYwKXx8W10pLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9dnIoayk7Ui5wdXNo''@;'; put 'put ''KHtDOitHLmlkfSl9KSxSfShjYVswXSkpO3ZhciBMaT1bXTtpZigoTGk9TmUubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFyZWwiXT1MaVsxXSksKExpPU5lLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHBlWyIhbGVncmVsIl09TGlbMV0pLChM''@;'; put 'put ''aT1OZS5tYXRjaChiRCkpJiYocGVbIiFjdHJsaWQiXT1MaS5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2cihWbil9KSksKExpPU5lLm1hdGNoKFNEKSkmJmZ1bmN0aW9uIHBTKFMsUil7U1siIXRhYmxlcmVmcyJdfHwoU1siIXRhYmxlcmVmcyJdPVtdKSwoUi5tYXRjaChmUyl8fFtdKS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKGspe1NbIiF0YWJsZXJlZnMiXS5wdXNoKHZyKGspLmlkKX0pfShwZSxMaVsxXSksUiYmUi5ub2RpbSYmKHllLnMuYz15ZS5zLnI9MCksIXBlWyIhcmVmIl0mJnllLmUuYz49eWUucy5jJiZ5ZS5lLnI+PXllLnMuciYmKHBlWyIhcmVmIl09cmEoeWUpKSxSLnNoZWV0Um93''@;'; put 'put ''cz4wJiZwZVsiIXJlZiJdKXt2YXIga3I9b28ocGVbIiFyZWYiXSk7Ui5zaGVldFJvd3M8PStrci5lLnImJihrci5lLnI9Ui5zaGVldFJvd3MtMSxrci5lLnI+eWUuZS5yJiYoa3IuZS5yPXllLmUuciksa3IuZS5yPGtyLnMuciYmKGtyLnMucj1rci5lLnIpLGtyLmUuYz55ZS5lLmMmJihrci5l''@;'; put 'put ''LmM9eWUuZS5jKSxrci5lLmM8a3Iucy5jJiYoa3Iucy5jPWtyLmUuYykscGVbIiFmdWxscmVmIl09cGVbIiFyZWYiXSxwZVsiIXJlZiJdPXJhKGtyKSl9cmV0dXJuIGt0JiYocGVbIiFzaGVldEZvcm1hdCJdPWZ1bmN0aW9uIHhEKFMpe3ZhciBSPXt9LGs9e30sRz0hMSxRPXt9LG9lPSExO3Jl''@;'; put 'put ''dHVybiBTLmRlZmF1bHRSb3dIZWlnaHQmJihHPSEwLGsuaHB0PXBhcnNlRmxvYXQoUy5kZWZhdWx0Um93SGVpZ2h0KSksUy56ZXJvSGVpZ2h0JiYoRz0hMCxrLmhpZGRlbj10aShTLnplcm9IZWlnaHQpKSxTLmJhc2VDb2xXaWR0aD8ob2U9ITAsUS53Y2g9cGFyc2VGbG9hdChTLmJhc2VDb2xX''@;'; put 'put ''aWR0aCkpOlMuZGVmYXVsdENvbFdpZHRoJiYob2U9ITAsUS53Y2g9cGFyc2VGbG9hdChTLmRlZmF1bHRDb2xXaWR0aCktNS9UYyksUy5vdXRsaW5lTGV2ZWxDb2wmJihSLmNvbG91dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2ZWxDb2wpKSxTLm91dGxpbmVMZXZlbFJvdyYmKFIucm93b3V0''@;'; put 'put ''bGluZT1wYXJzZUludChTLm91dGxpbmVMZXZlbFJvdykpLFMudGhpY2tCb3R0b20mJihSLmJvdHRoaWNrPXRpKFMudGhpY2tCb3R0b20pKSxTLnRoaWNrVG9wJiYoUi50b3B0aGljaz10aShTLnRoaWNrVG9wKSksUy5keURlc2NlbnQmJihSLmR5RGVzY2VudD1wYXJzZUZsb2F0KFMuZHlEZXNj''@;'; put 'put ''ZW50KSksRyYmKGp2KGspLFIucm93PWspLG9lJiYoUTAoUSksUi5jb2w9USksUn0odnIoa3RbMF0pKSksT3QubGVuZ3RoPjAmJihwZVsiIWNvbHMiXT1PdCksU24ubGVuZ3RoPjAmJihwZVsiIW1lcmdlcyJdPVNuKSxHWyIhaWQiXVtwZVsiIXJlbCJdXSYmKHBlWyIhZHJhd2VsIl09R1siIWlk''@;'; put 'put ''Il1bcGVbIiFyZWwiXV0pLEdbIiFpZCJdW3BlWyIhbGVncmVsIl1dJiYocGVbIiFsZWdkcmF3ZWwiXT1HWyIhaWQiXVtwZVsiIWxlZ3JlbCJdXSksKHBlWyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFZuKXtWbi5yZWw9R1siIWlkIl1bVm4uaWRdfSksbnVsbD09cGVbIiFncmlk''@;'; put 'put ''bGluZXMiXSYmKHBlWyIhZ3JpZGxpbmVzIl09ITApLHBlfShTLEcsayxRLG9lLGdlLHBlKX0oZXQsUixRLHllLG9lW0ddLFBlLE5lLFllKTticmVhaztjYXNlImNoYXJ0IjpjdD1mdW5jdGlvbiB5eihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0''@;'; put 'put ''aW9uIGh6KFMsUixrLEcsUSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSk7dmFyIG9lPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxnZT1bXSxwZT0hMTtyZXR1cm4gdXIoUyxmdW5jdGlvbihQZSxOZSxZZSl7c3dpdGNoKFllKXtjYXNlIDU1MDpv''@;'; put 'put ''ZVsiIXJlbCJdPVBlO2JyZWFrO2Nhc2UgNjUxOlEuU2hlZXRzW2tdfHwoUS5TaGVldHNba109e30pLFBlLm5hbWUmJihRLlNoZWV0c1trXS5Db2RlTmFtZT1QZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1MjpjYXNlIDY2OTpjYXNlIDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3''@;'; put 'put ''NjpjYXNlIDMwNzI6YnJlYWs7Y2FzZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2Nhc2UgMzc6Z2UucHVzaChOZSk7YnJlYWs7Y2FzZSAzODpnZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChOZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClnZS5wdXNoKE5lKTtlbHNlIGlm''@;'; put 'put ''KChOZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApZ2UucG9wKCk7ZWxzZSBpZighcGV8fFIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitZZSsiICIrTmUpfX0sUiksR1siIWlkIl1bb2VbIiFyZWwiXV0mJihvZVsiIWRyYXdlbCJdPUdbIiFpZCJdW29lWyIhcmVsIl1d''@;'; put 'put ''KSxvZX0oUyxHLGssUSxvZSk6ZnVuY3Rpb24gdXooUyxSLGssRyxRKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KTt2YXIgZ2Usb2U9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LHBlPVMubWF0Y2goX0QpO3BlJiZjYihwZVswXSwwLFEsayk7dmFy''@;'; put 'put ''IHllPVMubWF0Y2goeUQpO3JldHVybiB5ZSYmKG9lWyIhbWFyZ2lucyJdPVBEKHZyKHllWzBdKSkpLChnZT1TLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKG9lWyIhcmVsIl09Z2VbMV0pLEdbIiFpZCJdW29lWyIhcmVsIl1dJiYob2VbIiFkcmF3ZWwiXT1HWyIhaWQiXVtvZVsi''@;'; put 'put ''IXJlbCJdXSksb2V9KFMsMCxrLFEsb2UpfShldCxSLFEseWUsb2VbR10sUGUpO2JyZWFrO2Nhc2UibWFjcm8iOmN0PWZ1bmN0aW9uIF96KFMsUixrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIFIuc2xpY2UoLTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLFIpO2JyZWFrO2Nhc2UiZGlhbG9nIjpjdD1m''@;'; put 'put ''dW5jdGlvbiB3eihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVybiBSLnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsUik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrcGUpfWlmKHllLmNhbGxiYWNrKXJldHVybjtnZVtHXT1j''@;'; put 'put ''dCxmdW5jdGlvbiBKeihTLFIsayxHLFEsb2UsZ2UscGUpe2lmKFMmJlNbIiFkcmF3ZWwiXSl7dmFyIHllPWZuKFNbIiFkcmF3ZWwiXS5UYXJnZXQsRyksUGU9VnIoeWUpLE5lPWZ1bmN0aW9uIExDKFMsUixrLEcsUSl7dmFyIG9lPXtjaGFydHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYo''@;'; put 'put ''IVMpcmV0dXJuIG9lO3ZhciBnZT1RfHx7fTtyZXR1cm4oUy5tYXRjaCgvPFtePF0qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihwZSl7dmFyIHllPSIiLFBlPXt0eXBlOiIifSxOZT17fSxZZT0hMCxldD0hMSxjdD0hMSxFdD0hMSxhdD17czp7fX0sYnQ9LTEsanQ9W10sa3Q9W10sT3Q9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2VudGVyIn19fSxLdD0iIixUbj0tMSxTbj17''@;'; put 'put ''fTtwZS5yZXBsYWNlKGVuLGZ1bmN0aW9uKGxyLFhuKXtqdD1udWxsO3ZhciBCbj12cihsciksZnI9V24oQm5bMF0pLnJlcGxhY2UoL1tcL10/PiQvLCIiKTtzd2l0Y2goZnIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9y''@;'; put 'put ''IjpjYXNlIjx0d29DZWxsQW5jaG9yIjpQZS50eXBlPVduKEJuWzBdKS5yZXBsYWNlKC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztjYXNlIjxwb3MiOlBlLnBvcz17eDorQm4u''@;'; put 'put ''eCx5OitCbi55fTticmVhaztjYXNlIjxleHQiOlllJiYoUGUuZXh0PXt4OitCbi5jeCx5OitCbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2UiPHRvIjpOZT17fTticmVhaztjYXNlIjwvZnJvbSI6WWUmJihQZS5mcm9tPU5lKTticmVhaztjYXNlIjwvdG8iOlllJiYoUGUudG89TmUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJvd09mZiI6YnQ9WG4rbHIubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2wiOk5lLmM9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjwvY29sT2ZmIjpOZS5jT2ZmPStwZS5zbGljZShidCxYbik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L3JvdyI6TmUucj0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2UiPC9yb3dPZmYiOk5lLnJPZmY9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjxzcCI6eWU9InNoYXBlIixPdC5BbmNob3I9UGUsb2Uuc2hhcGVzLnB1c2goT3QpLFllPSExO2JyZWFrO2Nhc2UiPC9zcCI6WWU9ITA7''@;'; put 'put ''YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjp5ZT0iZ3JhcGhpYyIsWWU9ITE7YnJlYWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6WWU9ITA7YnJlYWs7Y2FzZSI8cGljIjp5ZT0icGljdHVyZSIsWWU9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6WWU9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOnllPSJncm91''@;'; put 'put ''cHNoYXBlIixZZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOlllPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNE''@;'; put 'put ''YXRhIjpldD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2JsaXBGaWxsIjpldD0hMTticmVhaztjYXNlIjwvYmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOmV0PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYo''@;'; put 'put ''Y3QpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTEpWzBdJiYoT3Qucy5mZ0NvbG9yPW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGN0fHxFdClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMilbMF0/T3Qucy5mZ0NvbG9yPVNuOiI8clByIj09a3Quc2xpY2UoLTIpWzBdJiZrdC5p''@;'; put 'put ''bmRleE9mKCI8dHhCb2R5Iik+LTEmJihhdC5zLmNvbG9yPVNuKSxTbj17fSxFdD0hMTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09eWUmJihPdFsiIXNoYXBlIl09Qm4ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5Ijpl''@;'; put 'put ''dD0hMCxPdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOmV0PSExO2JyZWFrO2Nhc2UiPGJvZHlQciI6T3Qucy5hbGlnbm1lbnQudmVydGljYWw9cEJbQm4uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2FzZSI8dCI6VG49WG4rbHIubGVuZ3RoO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpLdCs9IlxuIjticmVhaztjYXNlIjwvdCI6S3QrPXBlLnNsaWNlKFRuLFhuKTticmVhaztjYXNlIjxwUHIiOk90LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChPdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPVA1W0JuLmFsZ258fCJsIl18fCJsZWZ0''@;'; put 'put ''Iiksa3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoYXQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1QNVtCbi5hbGdufHwibCJdfHwibGVmdCIpO2JyZWFrO2Nhc2UiPHJQciI6Qm4uc3omJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKE90LnMuc3o9YXQucy5zej0rQm4uc3ovMTAwKTticmVh''@;'; put 'put ''aztjYXNlIjxwIjpLdD0iIixhdD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09eWUmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKE90LnY9KE90LnZ8fCIiKStLdCxhdC52PUt0LE90LlIucHVzaChhdCkpO2JyZWFrO2Nhc2UiPGxhdGlu''@;'; put 'put ''IjpCbi50eXBlZmFjZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoYXQucy5uYW1lPUJuLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6ZXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjpldD0hMSxjdD0hMTticmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2Fz''@;'; put 'put ''ZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJlZiI6IWN0JiYic2hhcGUiPT15ZSYmKE90LnMuZmdDb2xvcj1TbiksU249e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFjdCYmInNoYXBlIj09eWUmJihPdC5zLmNvbG9yPVNuKSxTbj17fTticmVhaztjYXNl''@;'; put 'put ''IjxzY2hlbWVDbHIiOnZhciBicj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRrMSIsdHgyOiJkazIifVtCbi52YWxdfHxCbi52YWwsZXI9KChHLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0aW9uKEZpKXtyZXR1cm4gRmkubmFtZT09YnJ9KTtlcj9Tbi5y''@;'; put 'put ''Z2I9ZXIucmdiOkV0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjpFdD0hMDticmVhaztjYXNlIjxzcmdiQ2xyIjpTbi5yZ2I9Qm4udmFsLnNsaWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8cHJzdENsciI6RXQ9ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOmp0''@;'; put 'put ''PW9lLmNoYXJ0czt2YXIgTWk9Qm4uaWQ7Y2FzZSI8YmxpcCI6anR8fChqdD1vZS5pbWFnZXMsTWk9Qm4uZW1iZWQpLGp0LnB1c2goe0FuY2hvcjpQZSxUYXJnZXQ6KFJbIiFpZCJdW01pXXx8e30pLlRhcmdldH0pLEJuLmxpbmsmJihqdFtqdC5sZW5ndGgtMV0uTGluaz0oUlsiIWlkIl1bQm4u''@;'; put 'put ''bGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ncnBTcFByIjpldD0hMTticmVhaztjYXNlIjxudkdycFNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPHNwUHIiOmV0PSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9zcFByIjpldD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNlIjwvc3RyZXRjaCI6Y2FzZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFt''@;'; put 'put ''ZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQciI6Y2FzZSI8L252UGljUHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNlIjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpjYXNlIjwvY052R3JwU3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6''@;'; put 'put ''Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFByIjpjYXNlIjwvY052U3BQciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7Y2FzZSI8Y052UHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Y3huU3AiOmV0PSEwO2JyZWFrO2Nhc2UiPC9j''@;'; put 'put ''eG5TcCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2NOdkN4blNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0THN0IjpldD0hMCxjdD0hMDticmVhaztjYXNlIjwvZXh0THN0''@;'; put 'put ''IjpldD0hMSxjdD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZhdWx0OmlmKGdlJiZnZS5XVEYmJiFldCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0JuWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9PWZyLnNsaWNlKDAsMik/a3QucG9wKCk6Ii8+IiE9bHIuc2xp''@;'; put 'put ''Y2UobHIubGVuZ3RoLTIpJiZrdC5wdXNoKGZyKSwiIn0pfSksb2V9KG5yKGsseWUsITApLGJmKG5yKGssUGUsITApLHllKSwwLHBlLFEpO2lmKE5lKXtpZihOZS5jaGFydHMpZm9yKHZhciBZZT0wO1llPE5lLmNoYXJ0cy5sZW5ndGg7KytZZSl7dmFyIGV0PU5lLmNoYXJ0c1tZZV0sY3Q9Zm4o''@;'; put 'put ''ZXQuVGFyZ2V0LHllKSxFdD1WcihjdCksYXQ9ImNoYXJ0Ij09UiYmMD09WWUsYnQ9YjIobnIoayxjdCwhMCksMCwwLGJmKG5yKGssRXQsITApLGN0KSwwLGF0P1M6bnVsbCxldCxhdD9udWxsOlMpO2F0fHwoU1siIWNoYXJ0cyJdfHwoU1siIWNoYXJ0cyJdPVtdKSxTWyIhY2hhcnRzIl0ucHVz''@;'; put 'put ''aChidCkpfWlmKFEuYm9va0ltYWdlcyYmTmUuaW1hZ2VzKWZvcih2YXIganQ9MDtqdDxOZS5pbWFnZXMubGVuZ3RoOysranQpe3ZhciBrdD1OZS5pbWFnZXNbanRdLE90PXsiIXR5cGUiOiJpbWFnZSIsIiFwb3MiOkZrKGt0LkFuY2hvciksIiFwb3NUeXBlIjprdC5BbmNob3IudHlwZS5yZXBs''@;'; put 'put ''YWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6TDUoa3QuQW5jaG9yLFMpLCIhcmVscG9zIjpBQyhrdC5BbmNob3IsUyl9O2lmKGt0LlRhcmdldCYmKE90WyIhcGF0aCJdPWZuKGt0LlRhcmdldCx5ZSksT3RbIiFkYXRhIl09VHQoayxPdFsiIXBhdGgiXSksT3RbIiFkYXRhdHlwZSJdPSJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgT3RbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIpLGt0LkxpbmsmJihPdFsiIWRhdGF0eXBlIl18fChPdFsiIWRhdGF0eXBlIl09InJlbW90ZSIpLE90WyIhbGluayJdPWt0LkxpbmspLCFPdFsiIWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91''@;'; put 'put ''bmQiO1NbIiFpbWFnZXMiXXx8KFNbIiFpbWFnZXMiXT1bXSksU1siIWltYWdlcyJdLnB1c2goT3QpfXZhciBLdCxUbjtpZihOZS5zaGFwZXMpZm9yKHZhciBTbj0wO1NuPE5lLnNoYXBlcy5sZW5ndGg7KytTbilUbj17IiF0eXBlIjoic2hhcGUiLCIhcG9zIjpMNSgoS3Q9TmUuc2hhcGVzW1Nu''@;'; put 'put ''XSkuQW5jaG9yLFMpLCIhcG9zVHlwZSI6S3QuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkw1KEt0LkFuY2hvcixTKSwiIXJlbHBvcyI6QUMoS3QuQW5jaG9yLFMpfSxbInYiLCIhc2hhcGUiLCJzIiwiUiJdLmZvckVhY2gocnIpLFNbIiFzaGFwZXMiXXx8KFNb''@;'; put 'put ''IiFzaGFwZXMiXT1bXSksU1siIXNoYXBlcyJdLnB1c2goVG4pfX1mdW5jdGlvbiBycihscil7S3RbbHJdJiYoVG5bbHJdPUt0W2xyXSl9fShjdCxwZSxTLFIseWUsMCwwLE5lKTt2YXIgRXQ9W107cmV0dXJuIG9lJiZvZVtHXSYmT2Uob2VbR10pLmZvckVhY2goZnVuY3Rpb24oYXQpe2lmKG9l''@;'; put 'put ''W0ddW2F0XS5UeXBlPT1LYS5DTU5UKXt2YXIgYnQ9Zm4ob2VbR11bYXRdLlRhcmdldCxSKTtpZighKEV0PWZ1bmN0aW9uIHh6KFMsUixrKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBlYihTLFIpe3ZhciBrPVtdLEc9W10sUT17fSxvZT0hMTtyZXR1cm4gdXIoUyxmdW5j''@;'; put 'put ''dGlvbihwZSx5ZSxQZSl7c3dpdGNoKFBlKXtjYXNlIDYzMjpHLnB1c2gocGUpO2JyZWFrO2Nhc2UgNjM1OlE9cGU7YnJlYWs7Y2FzZSA2Mzc6US50PXBlLnQsUS5oPXBlLmgsUS5yPXBlLnI7YnJlYWs7Y2FzZSA2MzY6aWYoUS5hdXRob3I9R1tRLmlhdXRob3JdLGRlbGV0ZSBRLmlhdXRob3Is''@;'; put 'put ''Ui5zaGVldFJvd3MmJlEucmZ4JiZSLnNoZWV0Um93czw9US5yZngucilicmVhaztRLnR8fChRLnQ9IiIpLGRlbGV0ZSBRLnJmeCxrLnB1c2goUSk7YnJlYWs7Y2FzZSAzMDcyOmNhc2UgMzc6Y2FzZSAzODpicmVhaztjYXNlIDM1Om9lPSEwO2JyZWFrO2Nhc2UgMzY6b2U9ITE7YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDppZighKCh5ZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKHllfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighb2V8fFIuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrUGUrIiAiK3llKX19KSxrfShTLGspOmZ1bmN0aW9uIHprKFMsUil7aWYoUy5t''@;'; put 'put ''YXRjaCgvPCg/Olx3KzopP2NvbW1lbnRzICpcLz4vKSlyZXR1cm5bXTt2YXIgaz1bXSxHPVtdLFE9Uy5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0aG9ycz4vKTtRJiZRWzFdJiZRWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGdlKXtpZigiIiE9PWdlJiYiIiE9PWdlLnRyaW0oKSl7dmFyIHBlPWdlLm1hdGNoKC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3BlJiZrLnB1c2gocGVbMV0pfX0pO3ZhciBvZT1TLm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/''@;'; put 'put ''Y29tbWVudExpc3Q+Lyk7cmV0dXJuIG9lJiZvZVsxXSYmb2VbMV0uc3BsaXQoLzxcL1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZigiIiE9PWdlJiYiIiE9PWdlLnRyaW0oKSl7dmFyIHBlPWdlLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHBlKXt2''@;'; put 'put ''YXIgeWU9dnIocGVbMF0pLFBlPXthdXRob3I6eWUuYXV0aG9ySWQmJmtbeWUuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6eWUucmVmLGd1aWQ6eWUuZ3VpZH0sTmU9Tm8oeWUucmVmKTtpZighKFIuc2hlZXRSb3dzJiZSLnNoZWV0Um93czw9TmUucikpe3ZhciBZZT1nZS5tYXRjaCgv''@;'; put 'put ''PCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4vKSxldD0hIVllJiYhIVllWzFdJiZ1QyhZZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07UGUucj1ldC5yLCI8dD48L3Q+Ij09ZXQuciYmKGV0LnQ9ZXQuaD0iIiksUGUudD0oZXQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywi''@;'; put 'put ''XG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFIuY2VsbEhUTUwmJihQZS5oPWV0LmgpLEcucHVzaChQZSl9fX19KSxHfShTLGspfShUdChTLGJ0LCEwKSxidCx5ZSkpfHwhRXQubGVuZ3RoKXJldHVybjshZnVuY3Rpb24gamsoUyxSKXt2YXIgRyxrPUFycmF5LmlzQXJyYXkoUyk7Ui5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFEpe3ZhciBvZT1ObyhRLnJlZik7aWYoaz8oU1tvZS5yXXx8KFNbb2Uucl09W10pLEc9U1tvZS5yXVtvZS5jXSk6Rz1TW1EucmVmXSwhRyl7Rz17dDoieiJ9LGs/U1tvZS5yXVtvZS5jXT1HOlNbUS5yZWZdPUc7dmFyIGdlPW9vKFNbIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpB''@;'; put 'put ''MSIpO2dlLnMucj5vZS5yJiYoZ2Uucy5yPW9lLnIpLGdlLmUucjxvZS5yJiYoZ2UuZS5yPW9lLnIpLGdlLnMuYz5vZS5jJiYoZ2Uucy5jPW9lLmMpLGdlLmUuYzxvZS5jJiYoZ2UuZS5jPW9lLmMpO3ZhciBwZT1yYShnZSk7cGUhPT1TWyIhcmVmIl0mJihTWyIhcmVmIl09cGUpfUcuY3x8KEcu''@;'; put 'put ''Yz1bXSk7dmFyIHllPXthOlEuYXV0aG9yLHQ6US50LHI6US5yfTt5ZS5yJiYic3RyaW5nIj09dHlwZW9mIHllLnImJih5ZS5SPXc1KHllLnIpKSxRLmgmJih5ZS5oPVEuaCksRy5jLnB1c2goeWUpfSl9KGN0LEV0KX19KSxmdW5jdGlvbiBKUyhTLFIsayxHLFEsb2UsZ2UpeyFTfHwhU1siIXRh''@;'; put 'put ''YmxlcmVmcyJdfHwha3x8IWtbIiFpZCJdfHwoU1siIXRhYmxlcyJdPVtdLFNbIiF0YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9a1siIWlkIl1bcGVdO2lmKHllJiZ5ZS5UYXJnZXQpe3ZhciBQZT1mbih5ZS5UYXJnZXQsRyk7IWZ1bmN0aW9uIHZCKFMsUixrLEcsUSl7''@;'; put 'put ''dmFyIG9lPXtzdHlsZTp7fSxoZWFkZXI6MH0sZ2U9ITE7Uy5yZXBsYWNlKGVuLGZ1bmN0aW9uKHBlKXt2YXIgeWU9dnIocGUpO3N3aXRjaChXbih5ZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC90YWJsZT4iOmNhc2UiPC9hdXRvRmlsdGVyPiI6Y2FzZSI8c29ydFN0YXRlIjpjYXNlIjxzb3J0''@;'; put 'put ''U3RhdGU+IjpjYXNlIjwvc29ydFN0YXRlPiI6Y2FzZSI8L3RhYmxlQ29sdW1ucyI6Y2FzZSI8L3RhYmxlQ29sdW1ucz4iOmNhc2UiPC90YWJsZUNvbHVtbj4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGEiOmNhc2UiPC9jYWxj''@;'; put 'put ''dWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhIjpjYXNlIjwvdG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHhtbENvbHVtblByPiI6Y2FzZSI8eG1sQ29sdW1uUHIiOmNhc2UiPC94bWxDb2x1bW5Qcj4iOmNhc2UiPHNv''@;'; put 'put ''cnRDb25kaXRpb24+IjpjYXNlIjxzb3J0Q29uZGl0aW9uIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8dGFibGUiOnllLnJlZiYmKG9lLnJlZj15ZS5yZWYpLHllLm5hbWU/b2UubmFtZT15ZS5uYW1lOnll''@;'; put 'put ''LmRpc3BsYXlOYW1lJiYob2UubmFtZT15ZS5kaXNwbGF5TmFtZSksbnVsbCE9eWUuaGVhZGVycm93Y291bnQmJjEhPSt5ZS5oZWFkZXJyb3djb3VudD9vZS5oZWFkZXI9K3llLmhlYWRlcnJvd2NvdW50Om51bGw9PXllLmhlYWRlcnJvd2NvdW50JiYob2UuaGVhZGVyPTEpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PGF1dG9GaWx0ZXIiOmNhc2UiPGF1dG9GaWx0ZXI+IjpvZS5maWx0ZXI9ITA7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW5zIjpjYXNlIjx0YWJsZUNvbHVtbnM+IjpvZS5jb2xzPVtdO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGVJbmZvIjp5ZS5zaG93Um93U3RyaXBlcyYmKG9lLnN0eWxlLnJvd3N0''@;'; put 'put ''cmlwZT10aSh5ZS5zaG93Um93U3RyaXBlcykpLHllLnNob3dDb2x1bW5TdHJpcGVzJiYob2Uuc3R5bGUuY29sc3RyaXBlPXRpKHllLnNob3dDb2x1bW5TdHJpcGVzKSkseWUuc2hvd0ZpcnN0Q29sdW1uJiYob2Uuc3R5bGUuY29sZmlyc3Q9dGkoeWUuc2hvd0ZpcnN0Q29sdW1uKSkseWUuc2hv''@;'; put 'put ''d0xhc3RDb2x1bW4mJihvZS5zdHlsZS5jb2xsYXN0PXRpKHllLnNob3dMYXN0Q29sdW1uKSkseWUubmFtZSYmKG9lLnN0eWxlLm5hbWU9eWUubmFtZS5yZXBsYWNlKC9eVGFibGVTdHlsZS8sIiIpKTticmVhaztjYXNlIjx0YWJsZUNvbHVtbiI6Y2FzZSI8dGFibGVDb2x1bW4+IjpvZS5jb2xz''@;'; put 'put ''LnB1c2goe2lkOit5ZS5pZCxuYW1lOnllLm5hbWV9KTticmVhaztjYXNlIjxmaWx0ZXJDb2x1bW4+IjpjYXNlIjxmaWx0ZXJDb2x1bW4iOmNhc2UiPGN1c3RvbUZpbHRlcnMiOmNhc2UiPGN1c3RvbUZpbHRlcnM+IjpjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9maWx0ZXJDb2x1bW4+''@;'; put 'put ''IjpjYXNlIjwvY3VzdG9tRmlsdGVycz4iOmNhc2UiPC9leHQ+IjpnZT0hMTticmVhaztkZWZhdWx0OmlmKCFnZSYmUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIit5ZVswXSsiIGluIHRhYmxlIil9cmV0dXJuIHBlfSksb2UuZmlsdGVyfHwob2UuZmlsdGVyPSExKSxvZS5z''@;'; put 'put ''dHlsZS5uYW1lJiYhb2Uuc3R5bGUubmFtZS5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLykmJmsuVGFibGUmJmsuVGFibGUuZm9yRWFjaChmdW5jdGlvbihwZSl7KHBlLm5hbWU9PW9lLnN0eWxlLm5hbWV8fHBlLnJhd25hbWU9PW9lLnN0eWxlLm5hbWUpJiYob2Uuc3R5bGUucmF3''@;'; put 'put ''PXF0KHBlKSl9KSxSWyIhdGFibGVzIl0ucHVzaChvZSl9KFR0KFIsUGUsITApLFMsUSwwLGdlKX19KSxkZWxldGUgU1siIXRhYmxlcmVmcyJdKX0oY3QsUyxvZVtHXSxSLFllLDAseWUpLHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSImJlBiLnB1c2goW2N0LFMsb2VbR10sUix7U2hlZXRz''@;'; put 'put ''OmdlfSxZZSx5ZV0pLGZ1bmN0aW9uIFF6KFMsUixrLEcsUSxvZSxnZSxwZSl7aWYoUyYmU1siIWxlZ2RyYXdlbCJdKXt2YXIgeWU9Zm4oU1siIWxlZ2RyYXdlbCJdLlRhcmdldCxHKSxQZT1ucihrLHllLCEwKTtQZSYmZnVuY3Rpb24gWHYoUyxSLGspe3ZhciBHPTA7KFMubWF0Y2goYkIpfHxb''@;'; put 'put ''XSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIganQsa3QsT3QsS3QsVG4scnIsU24sbHIsb2U9IiIsZ2U9ITAscGU9IiIseWU9LTEsUGU9e30sTmU9e30sWWU9e30sZXQ9LTEsY3Q9LTEsRXQ9IiIsYXQ9IiIsYnQ9IiIsWG49ITEsQm49ITE7c3dpdGNoKFEucmVwbGFjZShlbixmdW5jdGlvbihl''@;'; put 'put ''cixNaSl7dmFyIEZpPXZyKGVyKTtzd2l0Y2goV24oRmlbMF0pKXtjYXNlIjxzaGFwZSI6RmkuZmlsbGNvbG9yJiYoUGUuY29sb3IxPUZpLmZpbGxjb2xvciksRmkuc3Ryb2tlY29sb3ImJihZZS5jb2xvcj1GaS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8''@;'; put 'put ''djpmaWxsIj09RmlbMF0mJihGaS5jb2xvcjImJihQZS5jb2xvcjI9RmkuY29sb3IyKSxGaS50eXBlJiYoUGUudHlwZT1GaS50eXBlKSk7YnJlYWs7Y2FzZSI8L2ZpbGw+IjpjYXNlIjxsb2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6RmkuY29sb3ImJihOZS5jb2xvcj1G''@;'; put 'put ''aS5jb2xvciksRmkub24mJihOZS5vbj1GaS5vbik7YnJlYWs7Y2FzZSI8Q2xpZW50RGF0YSI6RmkuT2JqZWN0VHlwZSYmKG9lPUZpLk9iamVjdFR5cGUpO2JyZWFrO2Nhc2UiPFZpc2libGUiOmNhc2UiPFZpc2libGUvPiI6Z2U9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+''@;'; put 'put ''IjpjYXNlIjxSb3ciOmNhc2UiPFJvdz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8Q29sdW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNlIjxGbWxhTGluayI6Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNl''@;'; put 'put ''bFR5cGUiOmNhc2UiPFNlbFR5cGU+IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4iOmNhc2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+IjpjYXNlIjxJbmMiOmNhc2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVj''@;'; put 'put ''a2VkPiI6Y2FzZSI8dGV4dGJveCI6Y2FzZSI8dGV4dGJveD4iOnllPU1pK2VyLmxlbmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6cGU9US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9Sb3c+IjpldD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9Db2x1bW4+''@;'; put 'put ''IjpjdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTWFjcm8+IjpFdD1RLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFMaW5rPiI6YXQ9US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhUmFuZ2U+IjpTbj1RLnNsaWNlKHll''@;'; put 'put ''LE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L1NlbFR5cGU+Ijpscj1RLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L1ZhbD4iOmp0PStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L01pbj4iOmt0PStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L01h''@;'; put 'put ''eD4iOk90PStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L0luYz4iOkt0PStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L1BhZ2U+IjpUbj0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6cnI9K1Euc2xpY2UoeWUsTWkpLnRy''@;'; put 'put ''aW0oKTticmVhaztjYXNlIjwvdGV4dGJveD4iOmJ0PVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjxNb3ZlV2l0aENlbGxzLz4iOmNhc2UiPE1vdmVXaXRoQ2VsbHM+IjpYbj0hMDticmVhaztjYXNlIjxTaXplV2l0aENlbGxzLz4iOmNhc2UiPFNpemVXaXRoQ2VsbHM+IjpCbj0h''@;'; put 'put ''MH1yZXR1cm4iIn0pLG9lKXtjYXNlIk5vdGUiOnZhciBmcj16dS5zaGVldF9nZXRfY2VsbChSLGV0Pj0wJiZjdD49MD9xaSh7cjpldCxjOmN0fSk6a1tHXS5yZWYpO2ZyLmMmJihmci5jLmhpZGRlbj1nZSxwZSYmKGZyLmMucmF3YW5jaG9yPXBlLEhrKHBlLGZyLmMpLGxCKGZyLmNbIiFwb3Mi''@;'; put 'put ''XSwyKiEhWG4rISFCbixSKSksUGUuY29sb3IxJiYoZnIuYy5maWxsPVBlKSxOZS5jb2xvciYmKGZyLmMuc2hhZG93PU5lKSxZZS5jb2xvciYmKGZyLmMuc3Ryb2tlPVllKSksKytHO2JyZWFrO2Nhc2UiQnV0dG9uIjpjYXNlIkdCb3giOmNhc2UiRHJvcCI6Y2FzZSJMYWJlbCI6Y2FzZSJDaGVj''@;'; put 'put ''a2JveCI6Y2FzZSJTY3JvbGwiOmNhc2UiTGlzdCI6Y2FzZSJSYWRpbyI6Y2FzZSJTcGluIjpjYXNlIkVkaXQiOlJbIiFjb250cm9scyJdfHwoUlsiIWNvbnRyb2xzIl09W10pO3ZhciBicj17IiF0eXBlIjpvZX07cGUmJkhrKHBlLGJyKSxFdCYmKGJyLm1hY3JvPUV0LnJlcGxhY2UoIlswXSEi''@;'; put 'put ''LCIiKSksYXQmJihici5saW5rPWF0KSwiU2Nyb2xsIj09b2V8fCJTcGluIj09b2U/KG51bGw9PWp0JiYoanQ9MCksbnVsbD09a3QmJihrdD0wKSxudWxsPT1PdCYmKE90PTNlNCksbnVsbD09S3QmJihLdD0xKSwiU2Nyb2xsIj09b2UmJm51bGw9PVRuJiYoVG49MTApKToiUmFkaW8iPT1vZXx8''@;'; put 'put ''IkNoZWNrYm94Ij09b2U/KG51bGw9PXJyJiYocnI9MCksanQ9cnIpOigiTGlzdCI9PW9lfHwiRHJvcCI9PW9lKSYmKG51bGwhPVNuJiYoYnIucmVmPVNuKSxudWxsPT1sciYmKGxyPSJTaW5nbGUiKSwiTGlzdCI9PW9lJiYoYnIuc2VsPWxyKSksbnVsbCE9anQmJihici52YWw9anQpLG51bGwh''@;'; put 'put ''PWt0JiYoYnIubWluPWt0KSxudWxsIT1PdCYmKGJyLm1heD1PdCksbnVsbCE9S3QmJihici5zdGVwPUt0KSxudWxsIT1UbiYmKGJyLnBhZ2U9VG4pLGJ0JiYoYnIudD1idC5yZXBsYWNlKC9ccyo8W1xzXFNdKj8+XHMqL2csIiIpKSxSWyIhY29udHJvbHMiXS5wdXNoKGJyKX19KX0oZ28oUGUp''@;'; put 'put ''LFMscGV8fFtdKSxTWyIhTERQIl09eWUsU1siIWN0cmxpZCJdJiZTWyIhY3RybGlkIl0uZm9yRWFjaChmdW5jdGlvbihOZSl7aWYoTmUucmVsJiZOZS5yZWwuVGFyZ2V0KXt2YXIgWWU9Zm4oTmUucmVsLlRhcmdldCxHKTtOZS5wYXRoPVllLGRlbGV0ZSBOZS5yZWx9fSl9fShjdCwwLFMsUiww''@;'; put 'put ''LDAsMCxFdCksY3R9Y2F0Y2goYXQpe2lmKHllLldURil0aHJvdyBhdH19ZnVuY3Rpb24gQWMoUyl7cmV0dXJuIi8iPT1TLmNoYXJBdCgwKT9TLnNsaWNlKDEpOlN9dmFyIEJjPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBycChTLFIpe2lmKFBiPVtdLE5JKFI9Unx8e30pLHJpKFMsIk1FVEEtSU5G''@;'; put 'put ''L21hbmlmZXN0LnhtbCIpfHxyaShTLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBmdW5jdGlvbiB3YShTLFIpe1I9Unx8e30scmkoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIFZvKFMsUil7Zm9yKHZhciBHLFEsaz1XUyhTKTtHPVk1LmV4ZWMoayk7KXN3aXRjaChHWzNd''@;'; put 'put ''KXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09KFE9dnIoR1swXSwhMSkpLnBhdGgmJlEudHlwZSE9PWxsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0''@;'; put 'put ''YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKFImJlIuV1RGKXRocm93IEd9fShUdChTLCJNRVRBLUlORi9tYW5pZmVz''@;'; put 'put ''dC54bWwiKSxSKTt2YXIgaz1ucihTLCJjb250ZW50LnhtbCIpO2lmKCFrKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBHPVhTKGdvKGspLFIpO3JldHVybiByaShTLCJtZXRhLnhtbCIpJiYoRy5Qcm9wcz12dihUdChTLCJtZXRh''@;'; put 'put ''LnhtbCIpKSksR30oUyxSKTtpZihyaShTLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgZmlsZSIpO3ZhciBvZSxnZSxrPWZ1bmN0aW9uIHh0KFMpe2Zvcih2YXIgUj1TLkZ1bGxQYXRoc3x8T2UoUy5maWxlcyksaz1bXSxHPTA7RzxS''@;'; put 'put ''Lmxlbmd0aDsrK0cpIi8iIT1SW0ddLnNsaWNlKC0xKSYmay5wdXNoKFJbR10pO3JldHVybiBrLnNvcnQoKX0oUyksRz1mdW5jdGlvbiBOdyhTKXt2YXIgUj17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1l''@;'; put 'put ''bnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hh''@;'; put 'put ''cnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIVN8fCFTLm1hdGNoKXJldHVybiBSO3ZhciBrPXt9O2lmKChTLm1hdGNo''@;'; put 'put ''KGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFE9dnIoRyk7c3dpdGNoKFFbMF0ucmVwbGFjZSh1YSwiPCIpKXtjYXNlIjw/eG1sIjpicmVhaztjYXNlIjxUeXBlcyI6Ui54bWxucz1RWyJ4bWxucyIrKFFbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFrO2Nh''@;'; put 'put ''c2UiPERlZmF1bHQiOmtbUS5FeHRlbnNpb24udG9Mb3dlckNhc2UoKV09US5Db250ZW50VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09UltiNFtRLkNvbnRlbnRUeXBlXV0mJlJbYjRbUS5Db250ZW50VHlwZV1dLnB1c2goUS5QYXJ0TmFtZSl9fSksUi54bWxucyE9PVlpLkNU''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrUi54bWxucyk7cmV0dXJuIFIuY2FsY2NoYWluPVIuY2FsY2NoYWlucy5sZW5ndGg+MD9SLmNhbGNjaGFpbnNbMF06IiIsUi5zc3Q9Ui5zdHJzLmxlbmd0aD4wP1Iuc3Ryc1swXToiIixSLnN0eWxlPVIuc3R5bGVzLmxlbmd0''@;'; put 'put ''aD4wP1Iuc3R5bGVzWzBdOiIiLFIuY29ubj1SLmNvbm5zLmxlbmd0aD4wP1IuY29ubnNbMF06IiIsUi5kZWZhdWx0cz1rLGRlbGV0ZSBSLmNhbGNjaGFpbnMsUn0obnIoUywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxRPSExO2lmKDA9PT1HLndvcmtib29rcy5sZW5ndGgmJlR0KFMsZ2U9Inhs''@;'; put 'put ''L3dvcmtib29rLnhtbCIsITApJiZHLndvcmtib29rcy5wdXNoKGdlKSwwPT09Ry53b3JrYm9va3MubGVuZ3RoKXtpZighVHQoUyxnZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO0cud29ya2Jvb2tzLnB1c2goZ2UpLFE9''@;'; put 'put ''ITB9ImJpbiI9PUcud29ya2Jvb2tzWzBdLnNsaWNlKC0zKSYmKFE9ITApO3ZhciBwZT17fSx5ZT17fTtpZighUi5ib29rU2hlZXRzJiYhUi5ib29rUHJvcHMpe2lmKGw4PVtdLEcuc3N0KXRyeXtsOD1mdW5jdGlvbiBNeihTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rp''@;'; put 'put ''b24gT3YoUyxSKXt2YXIgaz1bXSxHPSExO3JldHVybiB1cihTLGZ1bmN0aW9uKG9lLGdlLHBlKXtzd2l0Y2gocGUpe2Nhc2UgMTU5OmsuQ291bnQ9b2VbMF0say5VbmlxdWU9b2VbMV07YnJlYWs7Y2FzZSAxOTprLnB1c2gob2UpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEwO2Nhc2UgMzU6Rz0h''@;'; put 'put ''MDticmVhaztjYXNlIDM2Okc9ITE7YnJlYWs7ZGVmYXVsdDppZihnZS5pbmRleE9mKCJCZWdpbiIpPjB8fGdlLmluZGV4T2YoIkVuZCIpLCFHfHxSLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrcGUrIiAiK2dlKX19KSxrfShTLGspOmZ1bmN0aW9uIGYyKFMsUil7''@;'; put 'put ''dmFyIGs9W10sRz0iIjtpZighUylyZXR1cm4gazt2YXIgUT1TLm1hdGNoKHNrKTtpZihRKXtHPVFbMl0ucmVwbGFjZShsaywiIikuc3BsaXQocTYpO2Zvcih2YXIgb2U9MDtvZSE9Ry5sZW5ndGg7KytvZSl7dmFyIGdlPXVDKEdbb2VdLnRyaW0oKSxSKTtudWxsIT1nZSYmKGtbay5sZW5ndGhd''@;'; put 'put ''PWdlKX1RPXZyKFFbMV0pLGsuQ291bnQ9US5jb3VudCxrLlVuaXF1ZT1RLnVuaXF1ZUNvdW50fXJldHVybiBrfShTLGspfShUdChTLEFjKEcuc3N0KSksRy5zc3QsUil9Y2F0Y2goX3Ipe2lmKFIuV1RGKXRocm93IF9yfVIuY2VsbFN0eWxlcyYmRy50aGVtZXMubGVuZ3RoJiYocGU9ZnVuY3Rp''@;'; put 'put ''b24gU3ooUyxSLGspe3JldHVybiBFQyhTLGspfShucihTLEcudGhlbWVzWzBdLnJlcGxhY2UoL15cLy8sIiIpLCEwKXx8IiIsMCxSKSksRy5zdHlsZSYmKHllPWZ1bmN0aW9uIEN6KFMsUixrLEcpe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIHhrKFMsUixrKXt2YXIgRz17''@;'; put 'put ''TnVtYmVyRm10OltdfTtmb3IodmFyIFEgaW4gQS5fdGFibGUpRy5OdW1iZXJGbXRbUV09QS5fdGFibGVbUV07Ry5DZWxsWGY9W10sRy5Gb250cz1bXSxHLkZpbGxzPVtdLEcuQm9yZGVycz1bXTt2YXIgb2U9W10sZ2U9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24oeWUsUGUsTmUpe3N3aXRjaChO''@;'; put 'put ''ZSl7Y2FzZSA0NDpHLk51bWJlckZtdFt5ZVswXV09eWVbMV0sQS5sb2FkKHllWzFdLHllWzBdKTticmVhaztjYXNlIDQzOll2KHllLmNvbG9yLFIpLEcuRm9udHMucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2FzZSA0NzU6Y2FzZSAxMTcxOmNh''@;'; put 'put ''c2UgMjEwMjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3MjpicmVhaztjYXNlIDQ1OnllLmZnQ29sb3ImJll2KHllLmZnQ29sb3IsUikseWUuYmdDb2xvciYmWXYoeWUuYmdDb2xvcixSKSxHLkZpbGxzLnB1c2goeWUpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0b20i''@;'; put 'put ''LCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihZZSl7eWVbWWVdJiZ5ZVtZZV0uY29sb3ImJll2KHllW1llXS5jb2xvcixSKX0pLEcuQm9yZGVycy5wdXNoKHllKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1vZVtvZS5sZW5ndGgtMV0mJkcuQ2VsbFhm''@;'; put 'put ''LnB1c2goeWUpO2JyZWFrO2Nhc2UgMzU6Z2U9ITA7YnJlYWs7Y2FzZSAzNjpnZT0hMTticmVhaztjYXNlIDM3Om9lLnB1c2goUGUpLGdlPSEwO2JyZWFrO2Nhc2UgMzg6b2UucG9wKCksZ2U9ITE7YnJlYWs7ZGVmYXVsdDppZigoUGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApb2UucHVzaChQ''@;'; put 'put ''ZSk7ZWxzZSBpZigoUGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKW9lLnBvcCgpO2Vsc2UgaWYoIWdlfHxrLldURiYmIkJydEFDQmVnaW4iIT1vZVtvZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK05lKyIgIitQZSl9fSksKEcuRm9udHN8fFtdKVswXSYm''@;'; put 'put ''STQoRy5Gb250c1swXSksR30oUyxrLEcpOl9rKFMsayxHKX0oVHQoUyxBYyhHLnN0eWxlKSksRy5zdHlsZSxwZSxSKSl9dmFyIFBlPUcubGlua3MubWFwKGZ1bmN0aW9uKF9yKXt0cnl7dmFyIEZuPWJmKG5yKFMsVnIoQWMoX3IpKSksX3IpO3JldHVybiBmdW5jdGlvbiBFeihTLFIsayxHKXty''@;'; put 'put ''ZXR1cm4iLmJpbiI9PT1rLnNsaWNlKC00KT9mdW5jdGlvbiBWayhTLFIsayxHKXtpZighUylyZXR1cm4gUzt2YXIgUT1HfHx7fSxvZT0hMTt1cihTLGZ1bmN0aW9uKHllLFBlLE5lKXtzd2l0Y2goTmUpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2Ug''@;'; put 'put ''MzY4OmNhc2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6b2U9ITA7YnJlYWs7''@;'; put 'put ''Y2FzZSAzNjpvZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKFBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoUGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFvZXx8US5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitOZS50b1N0cmluZygxNikrIiAiK1Bl''@;'; put 'put ''KX19LFEpfShTLDAsMCxHKTpmdW5jdGlvbiBOayhTLFIsayxHKXt2YXIgUT1HfHx7fSxvZT17U2hlZXROYW1lczpbXSxTaGVldHM6e319LHBlPSExLHllPXt9LFBlPS0xLE5lPS0xLFllPXtzOntyOjAsYzowfSxlOntyOi0xLGM6LTF9fSxldD17fSxjdD0wO3JldHVybihTfHwiIikucmVwbGFj''@;'; put 'put ''ZShlbixmdW5jdGlvbihFdCxhdCl7dmFyIGJ0PXZyKEV0KTtzd2l0Y2goV24oYnRbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxleHRlcm5hbExpbmsiOmNhc2UiPC9leHRlcm5hbExpbms+IjpjYXNlIjwvZXh0ZXJuYWxCb29rPiI6Y2FzZSI8c2hlZXROYW1lcyI6Y2FzZSI8c2hlZXROYW1lcz4i''@;'; put 'put ''OmNhc2UiPC9zaGVldE5hbWVzPiI6Y2FzZSI8c2hlZXREYXRhU2V0PiI6Y2FzZSI8c2hlZXREYXRhU2V0Lz4iOmNhc2UiPC9zaGVldERhdGFTZXQ+IjpjYXNlIjwvcm93PiI6YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxCb29rIjpjYXNlIjxleHRlcm5hbEJvb2s+IjpvZS5UYXJnZXQ9UlsiIWlkIl1b''@;'; put 'put ''YnQuaWRdLlRhcmdldCxvZS5NaXNzaW5nPVJbIiFpZCJdW2J0LmlkXS5UeXBlPT1LYS5YTUlTUzticmVhaztjYXNlIjxzaGVldE5hbWUiOm9lLlNoZWV0TmFtZXMucHVzaChRcihnbyhidC52YWwpKSk7YnJlYWs7Y2FzZSI8c2hlZXREYXRhIjp5ZT17fSxvZS5TaGVldHNbb2UuU2hlZXROYW1l''@;'; put 'put ''c1tidC5zaGVldElkXV09dGkoYnQucmVmcmVzaEVycm9yfHwiMCIpP251bGw6eWU7YnJlYWs7Y2FzZSI8L3NoZWV0RGF0YT4iOlllLmUuYz49MCYmKHllWyIhcmVmIl09cmEoWWUpKTticmVhaztjYXNlIjxyb3ciOmNhc2UiPHJvdz4iOmJ0LnI/UGU9cGFyc2VJbnQoYnQuciwxMCktMTpQZSsr''@;'; put 'put ''LE5lPS0xO2JyZWFrO2Nhc2UiPGNlbGwiOmNhc2UiPGNlbGw+IjpidC5yP05lPU5vKGJ0LnIpLmM6KytOZSxldC50PWJ0LnR8fCJuIiwic3RyIj09ZXQudCYmKGV0LnQ9InMiKTticmVhaztjYXNlIjwvY2VsbD4iOlllLmUucjxQZSYmKFllLmUucj1QZSksWWUuZS5jPE5lJiYoWWUuZS5jPU5l''@;'; put 'put ''KSx5ZVtxaSh7cjpQZSxjOk5lfSldPWV0LGV0PXt9O2JyZWFrO2Nhc2UiPHYiOmNhc2UiPHY+IjpjdD1FdC5sZW5ndGgrYXQ7YnJlYWs7Y2FzZSI8L3Y+Ijp2YXIganQ9UXIoUy5zbGljZShjdCxhdCkpO2V0LnY9Im4iPT1ldC50P3BhcnNlRmxvYXQoanQpOmp0O2JyZWFrO2Nhc2UiPHYvPiI6''@;'; put 'put ''ZXQudj0iIjticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpwZT0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZighcGUmJlEuV1RGKXRocm93InVucmVjb2duaXplZCAiK2J0WzBdKyIgaW4gZXh0ZXJuYWwgbGluayJ9fSksb2V9KFMsUiwwLEcp''@;'; put 'put ''fShUdChTLEFjKF9yKSksRm4sX3IsUil9Y2F0Y2h7fX0pLE5lPWZ1bmN0aW9uIGs4KFMsUixrKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBIbmUoUyxSKXt2YXIgaz17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHht''@;'; put 'put ''bG5zOiIifSxHPVtdLFE9ITE7Unx8KFI9e30pLFIuYmlmZj0xMjt2YXIgb2U9W10sZ2U9W1tdXTtyZXR1cm4gZ2UuU2hlZXROYW1lcz1bXSxnZS5YVEk9W10sTDhbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnRwfSx1cihTLGZ1bmN0aW9uKHllLFBlLE5lKXtzd2l0Y2goTmUpe2Nhc2UgMTU2''@;'; put 'put ''OmdlLlNoZWV0TmFtZXMucHVzaCh5ZS5uYW1lKSxrLlNoZWV0cy5wdXNoKHllKTticmVhaztjYXNlIDE1MzprLldCUHJvcHM9eWU7YnJlYWs7Y2FzZSAzOTpudWxsIT15ZS5TaGVldCYmKFIuU0lEPXllLlNoZWV0KSx5ZS5SZWY9czAoeWUuUHRnLG51bGwsbnVsbCxnZSxSKSxkZWxldGUgUi5T''@;'; put 'put ''SUQsZGVsZXRlIHllLlB0ZyxvZS5wdXNoKHllKTticmVhaztjYXNlIDEwMzY6Y2FzZSAzNjE6Y2FzZSAyMDcxOmNhc2UgMTU4OmNhc2UgMTQzOmNhc2UgNjY0OmNhc2UgMzUzOmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSA1MzQ6Y2FzZSA2Nzc6Y2FzZSAxNTc6Y2FzZSA2MTA6Y2FzZSAyMDUw''@;'; put 'put ''OmNhc2UgMTU1OmNhc2UgNTQ4OmNhc2UgNjc2OmNhc2UgMTI4OmNhc2UgNjY1OmNhc2UgMjEyODpjYXNlIDIxMjU6Y2FzZSA1NDk6Y2FzZSAyMDUzOmNhc2UgNTk2OmNhc2UgMjA3NjpjYXNlIDIwNzU6Y2FzZSAyMDgyOmNhc2UgMzk3OmNhc2UgMTU0OmNhc2UgMTExNzpjYXNlIDU1MzpjYXNl''@;'; put 'put ''IDIwOTE6Y2FzZSAxNjpicmVhaztjYXNlIDM1NzpjYXNlIDM1ODpjYXNlIDM1NTpjYXNlIDY2NzpnZVswXS5sZW5ndGg/Z2UucHVzaChbTmUseWVdKTpnZVswXT1bTmUseWVdLGdlW2dlLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSAzNjI6MD09PWdlLmxlbmd0aCYmKGdlWzBdPVtdLGdl''@;'; put 'put ''WzBdLlhUST1bXSksZ2VbZ2UubGVuZ3RoLTFdLlhUST1nZVtnZS5sZW5ndGgtMV0uWFRJLmNvbmNhdCh5ZSksZ2UuWFRJPWdlLlhUSS5jb25jYXQoeWUpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNzpHLnB1c2goUGUpLFE9ITA7YnJlYWs7Y2FzZSAzNjpjYXNlIDM4OkcucG9wKCksUT0hMTticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKCEoKFBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoUGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFRfHxSLldURiYmIkJydEFDQmVnaW4iIT1HW0cubGVuZ3RoLTFdJiYiQnJ0RlJUQmVnaW4iIT1HW0cubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''ZXhwZWN0ZWQgcmVjb3JkICIrTmUrIiAiK1BlKX19LFIpLFBTKGspLGsuTmFtZXM9b2Usay5zdXBib29rcz1nZSxrfShTLGspOmZ1bmN0aW9uIEhTKFMsUil7aWYoIVMpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIik7dmFyIGs9e0FwcFZlcnNpb246e30sV0JQcm9wczp7''@;'; put 'put ''fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSxOYW1lczpbXSxFeHRlcm46W10seG1sbnM6IiJ9LEc9ITEsUT0ieG1sbnMiLG9lPXt9LGdlPTA7aWYoUy5yZXBsYWNlKGVuLGZ1bmN0aW9uKHllLFBlKXt2YXIgTmU9dnIoeWUpO3N3aXRjaChXbihOZVswXSkpe2Nhc2UiPD94bWwiOmNh''@;'; put 'put ''c2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2Fz''@;'; put 'put ''ZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6''@;'; put 'put ''Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0''@;'; put 'put ''b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hl''@;'; put 'put ''cz4iOmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNlIjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6''@;'; put 'put ''Y2FzZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+IjpjYXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3Rz''@;'; put 'put ''PiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjp5ZS5tYXRjaChFOCkmJihRPSJ4bWxu''@;'; put 'put ''cyIreWUubWF0Y2goLzwoXHcrKTovKVsxXSksay54bWxucz1OZVtRXTticmVhaztjYXNlIjxmaWxlVmVyc2lvbiI6ZGVsZXRlIE5lWzBdLGsuQXBwVmVyc2lvbj1OZTticmVhaztjYXNlIjxmaWxlU2hhcmluZyI6ay5Nb2RpZnk9e3VzZXI6TmUudXNlck5hbWUsd2Fybjp0aShOZS5yZWFkT25s''@;'; put 'put ''eVJlY29tbWVuZGVkfHwiZmFsc2UiKX0sKE5lLmFsZ29yaXRobU5hbWV8fE5lLmhhc2hWYWx1ZXx8TmUuc2FsdFZhbHVlfHxOZS5zcGluQ291bnQpJiYoay5Nb2RpZnkuZW5jcnlwdGlvbj17YWxnbzpOZS5hbGdvcml0aG1OYW1lLGhhc2g6TmUuaGFzaFZhbHVlLHNhbHQ6TmUuc2FsdFZhbHVl''@;'; put 'put ''LHNwaW46K05lLnNwaW5Db3VudHx8MWU1fSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQciI6Y2FzZSI8d29ya2Jvb2tQci8+Ijp5Yi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtpZihudWxsIT1OZVtldFswXV0pc3dpdGNoKGV0WzJdKXtjYXNlImJvb2wiOmsuV0JQcm9wc1tldFswXV09dGkoTmVbZXRb''@;'; put 'put ''MF1dKTticmVhaztjYXNlImludCI6ay5XQlByb3BzW2V0WzBdXT1wYXJzZUludChOZVtldFswXV0sMTApO2JyZWFrO2RlZmF1bHQ6ay5XQlByb3BzW2V0WzBdXT1OZVtldFswXV19fSksTmUuY29kZU5hbWUmJihrLldCUHJvcHMuQ29kZU5hbWU9Z28oTmUuY29kZU5hbWUpKTticmVhaztjYXNl''@;'; put 'put ''Ijx3b3JrYm9va1Byb3RlY3Rpb24iOnZhciBZZT1rLlByb3RlY3Rpb258fHt9O1llLmxvY2tTdHJ1Y3R1cmU9dGkoTmUubG9ja1N0cnVjdHVyZXx8ImZhbHNlIiksWWUubG9ja1dpbmRvd3M9dGkoTmUubG9ja1dpbmRvd3N8fCJmYWxzZSIpLE5lLndvcmtib29rQWxnb3JpdGhtTmFtZSYmKFll''@;'; put 'put ''LmVuY3J5cHRpb249e2FsZ286TmUud29ya2Jvb2tBbGdvcml0aG1OYW1lLGhhc2g6TmUud29ya2Jvb2tIYXNoVmFsdWUsc2FsdDpOZS53b3JrYm9va1NhbHRWYWx1ZSxzcGluOitOZS53b3JrYm9va1NwaW5Db3VudHx8MWU1fSksay5Qcm90ZWN0aW9uPVllO2JyZWFrO2Nhc2UiPHdvcmtib29r''@;'; put 'put ''VmlldyI6Y2FzZSI8d29ya2Jvb2tWaWV3Lz4iOmRlbGV0ZSBOZVswXSxrLldCVmlldy5wdXNoKE5lKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKE5lLnN0YXRlKXtjYXNlImhpZGRlbiI6TmUuSGlkZGVuPTE7YnJlYWs7Y2FzZSJ2ZXJ5SGlkZGVuIjpOZS5IaWRkZW49MjticmVhaztkZWZh''@;'; put 'put ''dWx0Ok5lLkhpZGRlbj0wfWRlbGV0ZSBOZS5zdGF0ZSxOZS5uYW1lPVFyKGdvKE5lLm5hbWUpKSxkZWxldGUgTmVbMF0say5TaGVldHMucHVzaChOZSk7YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmsuRXh0ZXJuLnB1c2goTmUuaWQpO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4i''@;'; put 'put ''OmNhc2UiPGRlZmluZWROYW1lcyI6Y2FzZSI8ZXh0IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50PiI6Rz0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Rz0hMTticmVhaztj''@;'; put 'put ''YXNlIjxkZWZpbmVkTmFtZSI6KG9lPXt9KS5OYW1lPWdvKE5lLm5hbWUpLE5lLmNvbW1lbnQmJihvZS5Db21tZW50PU5lLmNvbW1lbnQpLE5lLmxvY2FsU2hlZXRJZCYmKG9lLlNoZWV0PStOZS5sb2NhbFNoZWV0SWQpLHRpKE5lLmhpZGRlbnx8IjAiKSYmKG9lLkhpZGRlbj0hMCksZ2U9UGUr''@;'; put 'put ''eWUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZT4iOm9lLlJlZj1RcihnbyhTLnNsaWNlKGdlLFBlKSkpLGsuTmFtZXMucHVzaChvZSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIE5lWzBdLGsuQ2FsY1ByPU5lO2JyZWFrO2RlZmF1bHQ6aWYoIUcm''@;'; put 'put ''JlIuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrTmVbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiB5ZX0pLC0xPT09WWkubWFpbi5pbmRleE9mKGsueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIray54bWxucyk7cmV0dXJuIFBTKGspLGt9''@;'; put 'put ''KFMsayl9KFR0KFMsQWMoRy53b3JrYm9va3NbMF0pKSxHLndvcmtib29rc1swXSxSKSxZZT17fSxldD0iIjtHLmNvcmVwcm9wcy5sZW5ndGgmJigoZXQ9VHQoUyxBYyhHLmNvcmVwcm9wc1swXSksITApKSYmKFllPXZ2KGV0KSksMCE9PUcuZXh0cHJvcHMubGVuZ3RoJiYoZXQ9VHQoUyxBYyhH''@;'; put 'put ''LmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiBXQShTLFIsayl7dmFyIEc9e307Unx8KFI9e30pLFM9Z28oUykscmguZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9KFMubWF0Y2goRDAoUVswXSkpfHxbXSlbMV07c3dpdGNoKFFbMl0pe2Nhc2Uic3RyaW5nIjpvZSYmKFJbUVsxXV09UXIo''@;'; put 'put ''b2UpKTticmVhaztjYXNlImJvb2wiOlJbUVsxXV09InRydWUiPT09b2U7YnJlYWs7Y2FzZSJyYXciOnZhciBnZT1TLm1hdGNoKG5ldyBSZWdFeHAoIjwiK1FbMF0rIltePl0qPihbXFxzXFxTXSo/KTwvIitRWzBdKyI+IikpO2dlJiZnZS5sZW5ndGg+MCYmKEdbUVsxXV09Z2VbMV0pfX0pLEcu''@;'; put 'put ''SGVhZGluZ1BhaXJzJiZHLlRpdGxlc09mUGFydHMmJl80KEcuSGVhZGluZ1BhaXJzLEcuVGl0bGVzT2ZQYXJ0cyxSLGspfShldCxZZSxSKSk7dmFyIGN0PXt9OyghUi5ib29rU2hlZXRzfHxSLmJvb2tQcm9wcykmJjAhPT1HLmN1c3Rwcm9wcy5sZW5ndGgmJihldD1ucihTLEFjKEcuY3VzdHBy''@;'; put 'put ''b3BzWzBdKSwhMCkpJiYoY3Q9ZnVuY3Rpb24geXYoUyxSKXt2YXIgaz17fSxHPSIiLFE9Uy5tYXRjaChPNik7aWYoUSlmb3IodmFyIG9lPTA7b2UhPVEubGVuZ3RoOysrb2Upe3ZhciBnZT1RW29lXSxwZT12cihnZSk7c3dpdGNoKHBlWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVz''@;'; put 'put ''IjpicmVhaztjYXNlIjxwcm9wZXJ0eSI6Rz1RcihwZS5uYW1lKTticmVhaztjYXNlIjwvcHJvcGVydHk+IjpHPW51bGw7YnJlYWs7ZGVmYXVsdDppZigwPT09Z2UuaW5kZXhPZigiPHZ0OiIpKXt2YXIgeWU9Z2Uuc3BsaXQoIj4iKSxQZT15ZVswXS5zbGljZSg0KSxOZT15ZVsxXTtzd2l0Y2go''@;'; put 'put ''UGUpe2Nhc2UibHBzdHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOmtbR109UXIoTmUpO2JyZWFrO2Nhc2UiYm9vbCI6a1tHXT10aShOZSk7YnJlYWs7Y2FzZSJpMSI6Y2FzZSJpMiI6Y2FzZSJpNCI6Y2FzZSJpOCI6Y2FzZSJpbnQiOmNhc2UidWludCI6''@;'; put 'put ''a1tHXT1wYXJzZUludChOZSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjprW0ddPXBhcnNlRmxvYXQoTmUpO2JyZWFrO2Nhc2UiZmlsZXRpbWUiOmNhc2UiZGF0ZSI6a1tHXT1IZShOZSk7YnJlYWs7ZGVmYXVsdDppZigiLyI9PVBlLnNsaWNlKC0xKSlicmVhaztS''@;'; put 'put ''LldURiYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLGdlLFBlLHllKX19ZWxzZSBpZigiPC8iIT09Z2Uuc2xpY2UoMCwyKSYmUi5XVEYpdGhyb3cgbmV3IEVycm9yKGdlKX19cmV0dXJuIGt9KGV0LFIpKTt2YXIgRXQ9e307aWYoKFIuYm9va1NoZWV0c3x8''@;'; put 'put ''Ui5ib29rUHJvcHMpJiYoTmUuU2hlZXRzP29lPU5lLlNoZWV0cy5tYXAoZnVuY3Rpb24oRm4pe3JldHVybiBGbi5uYW1lfSk6WWUuV29ya3NoZWV0cyYmWWUuU2hlZXROYW1lcy5sZW5ndGg+MCYmKG9lPVllLlNoZWV0TmFtZXMpLFIuYm9va1Byb3BzJiYoRXQuUHJvcHM9WWUsRXQuQ3VzdHBy''@;'; put 'put ''b3BzPWN0KSxSLmJvb2tTaGVldHMmJnR5cGVvZiBvZTwidSImJihFdC5TaGVldE5hbWVzPW9lKSxSLmJvb2tTaGVldHM/RXQuU2hlZXROYW1lczpSLmJvb2tQcm9wcykpcmV0dXJuIEV0O29lPXt9O3ZhciBhdD17fTtSLmJvb2tEZXBzJiZHLmNhbGNjaGFpbiYmKGF0PWZ1bmN0aW9uIERvKFMs''@;'; put 'put ''UixrKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBkQihTLFIsayl7dmFyIEc9W107cmV0dXJuIHVyKFMsZnVuY3Rpb24oZ2UscGUseWUpe2lmKDYzPT09eWUpRy5wdXNoKGdlKTtlbHNlIGlmKCEoKHBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wfHwocGV8fCIiKS5pbmRl''@;'; put 'put ''eE9mKCJFbmQiKT4wKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIreWUrIiAiK3BlKX0pLEd9KFMpOmZ1bmN0aW9uIElDKFMpe3ZhciBSPVtdO2lmKCFTKXJldHVybiBSO3ZhciBrPTE7cmV0dXJuKFMubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihHKXt2YXIg''@;'; put 'put ''UT12cihHKTtzd2l0Y2goUVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8Y2FsY0NoYWluIjpjYXNlIjxjYWxjQ2hhaW4+IjpjYXNlIjwvY2FsY0NoYWluPiI6YnJlYWs7Y2FzZSI8YyI6ZGVsZXRlIFFbMF0sUS5pP2s9US5pOlEuaT1rLFIucHVzaChRKX19KSxSfShTKX0oVHQoUyxBYyhHLmNhbGNj''@;'; put 'put ''aGFpbikpLEcuY2FsY2NoYWluKSk7dmFyIGt0LE90LGJ0PTAsanQ9e30sS3Q9TmUuU2hlZXRzO1llLldvcmtzaGVldHM9S3QubGVuZ3RoLFllLlNoZWV0TmFtZXM9W107Zm9yKHZhciBUbj0wO1RuIT1LdC5sZW5ndGg7KytUbilZZS5TaGVldE5hbWVzW1RuXT1LdFtUbl0ubmFtZTt2YXIgcnI9''@;'; put 'put ''UT8iYmluIjoieG1sIixTbj1HLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLGxyPShHLndvcmtib29rc1swXS5zbGljZSgwLFNuKzEpKyJfcmVscy8iK0cud29ya2Jvb2tzWzBdLnNsaWNlKFNuKzEpKyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO3JpKFMsbHIpfHwobHI9InhsL19y''@;'; put 'put ''ZWxzL3dvcmtib29rLiIrcnIrIi5yZWxzIik7dmFyIFhuPWJmKG5yKFMsbHIsITApLGxyKSxCbj1Ybixmcj1bXTtYbiYmKE5lJiZOZS5FeHRlcm4mJk5lLkV4dGVybi5sZW5ndGgmJk5lLkV4dGVybi5mb3JFYWNoKGZ1bmN0aW9uKF9yLEZuKXt2YXIgWmk9KCIveGwvIitYblsiIWlkIl1bX3Jd''@;'; put 'put ''LlRhcmdldCkucmVwbGFjZSgvW1wvXVtcL10vZywiLyIpLHlpPUcubGlua3MuaW5kZXhPZihaaSk7eWk+LTEmJihmcltGbl09UGVbeWldKX0pLE5lJiZkZWxldGUgTmUuRXh0ZXJuKSxYbiYmKFhuPWZ1bmN0aW9uIE9iKFMsUil7aWYoIVMpcmV0dXJuIDA7dHJ5e1M9Ui5tYXAoZnVuY3Rpb24o''@;'; put 'put ''Ryl7cmV0dXJuIEcuaWR8fChHLmlkPUcuc3RyUmVsSUQpLFtHLm5hbWUsU1siIWlkIl1bRy5pZF0uVGFyZ2V0LG5yZShTWyIhaWQiXVtHLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gUyYmMCE9PVMubGVuZ3RoP1M6bnVsbH0oWG4sTmUuU2hlZXRzKSk7dmFyIGJyPXJp''@;'; put 'put ''KFMsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLGVyPVtdLE1pPVtdO2U6Zm9yKGJ0PTA7YnQhPVllLldvcmtzaGVldHM7KytidCl7dmFyIEZpPSJzaGVldCI7aWYoWG4mJlhuW2J0XT8oa3Q9InhsLyIrWG5bYnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLHJpKFMsa3QpfHwo''@;'; put 'put ''a3Q9WG5bYnRdWzFdKSxyaShTLGt0KXx8KGt0PWxyLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStYbltidF1bMV0pLEZpPVhuW2J0XVsyXSk6a3Q9KGt0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoYnQrMS1icikrIi4iK3JyKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLE90PWt0LnJl''@;'; put 'put ''cGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxzLyQzLnJlbHMiKSxlci5wdXNoKGt0KSxSJiZudWxsIT1SLnNoZWV0cylzd2l0Y2godHlwZW9mIFIuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYoYnQhPVIuc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKFll''@;'; put 'put ''LlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkhPVIuc2hlZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoUi5zaGVldHMpKXtmb3IodmFyIG5hPTAsY2E9MDtjYSE9Ui5zaGVldHMubGVuZ3RoOysrY2Ep''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBSLnNoZWV0c1tjYV0mJlIuc2hlZXRzW2NhXT09YnQmJihuYT0xKSwic3RyaW5nIj09dHlwZW9mIFIuc2hlZXRzW2NhXSYmUi5zaGVldHNbY2FdLnRvTG93ZXJDYXNlKCk9PVllLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkmJihuYT0xKTtpZighbmEpY29u''@;'; put 'put ''dGludWUgZX19aWYoIVIuc2tpcFBhcnNlKXt2YXIgTGk9eTIoUyxrdCxPdCxZZS5TaGVldE5hbWVzW2J0XSxidCxqdCxvZSxGaSxSLE5lLHBlLHllKTtMaSYmTGlbIiFMRFAiXSYmKE1pW2J0XT1MaVsiIUxEUCJdLGRlbGV0ZSBMaVsiIUxEUCJdKX19aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bp''@;'; put 'put ''dm90PCJ1Iilmb3IoYnQ9MDtidDxQYi5sZW5ndGg7KytidClwYXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLFBiW2J0XSk7aWYoRXQ9e0RpcmVjdG9yeTpHLFdvcmtib29rOk5lLFByb3BzOlllLEN1c3Rwcm9wczpjdCxEZXBzOmF0LFNoZWV0czpvZSxTaGVldE5hbWVzOlllLlNoZWV0TmFt''@;'; put 'put ''ZXMsU3RyaW5nczpsOCxTdHlsZXM6eWUsVGhlbWVzOnBlLFNTRjpBLmdldF90YWJsZSgpfSwhUi5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIGtDKFMpeyFTfHwhUy5Xb3JrYm9va3x8IVMuV29ya2Jvb2suTmFtZXN8fFMuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihSKXtpZihSLk5h''@;'; put 'put ''bWUmJiJfeGxubS4iPT1SLk5hbWUuc2xpY2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09Ui5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09Ui5OYW1lKSl7dmFyIGs9Uy5TaGVldHNbUy5TaGVldE5hbWVzW1IuU2hlZXRdXTtpZihrKXtrWyIhcHJpbnQiXXx8KGtbIiFwcmludCJdPXt9''@;'; put 'put ''KSxrWyIhcHJpbnQiXS5wcm9wc3x8KGtbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgRz1rWyIhcHJpbnQiXSxRPVIuUmVmO2lmKCJfeGxubS5QcmludF9BcmVhIj09Ui5OYW1lKXtRLmluZGV4T2YoIiEiKT4tMSYmKFE9US5zbGljZShRLmluZGV4T2YoIiEiKSsxKSk7dmFyIG9lPW9vKFE9US5y''@;'; put 'put ''ZXBsYWNlKC9bJF0vZywiIikpO0cuYXJlYT1vZX1lbHNlIl94bG5tLlByaW50X1RpdGxlcyI9PVIuTmFtZSYmKEcudGl0bGVzPXtzOntyOi0xLGM6LTF9LGU6e3I6LTEsYzotMX19LFEuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgeWU9TXMoZ2Uuc2xpY2UoZ2UuaW5kZXhP''@;'; put 'put ''ZigiISIpKzEpLnJlcGxhY2UoL1skXS9nLCIiKSk7eWUucy5jPi0xJiYoRy50aXRsZXMucy5jPXllLnMuYykseWUuZS5jPi0xJiYoRy50aXRsZXMuZS5jPXllLmUuYykseWUucy5yPi0xJiYoRy50aXRsZXMucy5yPXllLnMucikseWUuZS5yPi0xJiYoRy50aXRsZXMuZS5yPXllLmUucil9KSl9''@;'; put 'put ''fX0pfShFdCksUiYmUi5ib29rRmlsZXMmJihFdC5rZXlzPWssRXQuZmlsZXM9Uy5maWxlcyksUiYmUi5ib29rVkJBJiYoRy52YmEubGVuZ3RoPjA/RXQudmJhcmF3PVR0KFMsQWMoRy52YmFbMF0pLCEwKTpHLmRlZmF1bHRzJiZHLmRlZmF1bHRzLmJpbj09PVVrJiYoRXQudmJhcmF3PVR0KFMs''@;'; put 'put ''InhsL3ZiYVByb2plY3QuYmluIiwhMCkpKSxCbiYmQm5bIiFpZCJdKXtmb3IodmFyIGtyPVtdLFZuPTE7Vm48PTEwMjQ7KytWbilCblsiIWlkIl1bInJJZCIrVm5dJiZCblsiIWlkIl1bInJJZCIrVm5dLlR5cGUmJi9jdXN0b21YbWwkLy50ZXN0KEJuWyIhaWQiXVsicklkIitWbl0uVHlwZSkm''@;'; put 'put ''JmtyLnB1c2goZm4oQm5bIiFpZCJdWyJySWQiK1ZuXS5UYXJnZXQsRy53b3JrYm9va3NbMF0pKTtrci5sZW5ndGg+MCYmKEV0LkN1c3RvbVhNTD1bXSxrci5mb3JFYWNoKGZ1bmN0aW9uKF9yKXt2YXIgRm49e2RhdGE6bnIoUyxBYyhfcikpfSxqcj1Wcihfcik7dHJ5e3ZhciBaaT1iZihucihT''@;'; put 'put ''LEFjKGpyKSwhMCksanIpO2lmKFppKWZvcih2YXIgeWk9MTt5aTw9MTAyNDsrK3lpKVppWyIhaWQiXVsicklkIit5aV0mJlppWyIhaWQiXVsicklkIit5aV0uVHlwZSYmL2N1c3RvbVhtbFByb3BzJC8udGVzdChaaVsiIWlkIl1bInJJZCIreWldLlR5cGUpJiYoRm4ucHJvcHM9bnIoUyxBYyhm''@;'; put 'put ''bihaaVsiIWlkIl1bInJJZCIreWldLlRhcmdldCxfcikpKSl9Y2F0Y2h7fUV0LkN1c3RvbVhNTC5wdXNoKEZuKX0pKX12YXIgQnI9aHQoUywieGwvbW9kZWwvaXRlbS5kYXRhIiwhMCk7QnImJihFdC5tb2RlbD1CciksRy5jb25uJiYoRXQuY29ubj1UdChTLEFjKEcuY29ubiksITApKSxmci5s''@;'; put 'put ''ZW5ndGgmJihFdC5FeHRlcm5hbFdCPWZyKSxOZSYmKE5lLlBQST1EZil9cmV0dXJuIFIudGVtcGxhdGUmJihFdC5fd3NwYXRocz1lcixFdC5fc3R5cGF0aD1BYyhHLnN0eWxlfHwiIiksRXQuX3dicGF0aD1BYyhHLndvcmtib29rc1swXXx8InhsL3dvcmtib29rLnhtbCIpLEV0Ll92bWxwYXRo''@;'; put 'put ''cz1NaSxFdC5fd2JyZWxzcGF0aD1scixFdC5fY3Q9bnIoUywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpLEV0LmZpbGVzPVMuZmlsZXMsQmMoRXQsUyxSKSksRXR9ZnVuY3Rpb24gRmIoUyxSKXt2YXIgaz1SfHx7fTtrLnBhc3N3b3JkfHwoay5wYXNzd29yZD0iVmVsdmV0U3dlYXRzaG9wIik7dmFy''@;'; put 'put ''IEc9Ildvcmtib29rIixRPXZlLmZpbmQoUyxHKTt0cnl7aWYoIShRPXZlLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvVmVyc2lvbiIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTtpZihmdW5jdGlvbiBUVihTKXt2YXIg''@;'; put 'put ''Uj17fTtSLmlkPVMucmVhZF9zaGlmdCgwLCJscHA0IiksUi5SPVAxKFMsNCksUi5VPVAxKFMsNCksUi5XPVAxKFMsNCl9KFEuY29udGVudCksIShRPXZlLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlTWFwIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYg''@;'; put 'put ''RW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBvZT1mdW5jdGlvbiBBVihTKXt2YXIgUj1bXTtTLmwrPTQ7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KTtrLS0gPjA7KVIucHVzaChoQyhTKSk7cmV0dXJuIFJ9KFEuY29udGVudCk7aWYoMSE9PW9lLmxlbmd0aHx8MSE9PW9lWzBdLmNv''@;'; put 'put ''bXBzLmxlbmd0aHx8MCE9PW9lWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PW9lWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PW9lWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitHKTtp''@;'; put 'put ''ZighKFE9dmUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9EYXRhU3BhY2VJbmZvL1N0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7dmFyIGdlPWZ1bmN0aW9uIGtWKFMpe3Zh''@;'; put 'put ''ciBSPVtdO1MubCs9NDtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO2stLSA+MDspUi5wdXNoKFMucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiBSfShRLmNvbnRlbnQpO2lmKDEhPWdlLmxlbmd0aHx8IlN0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0iIT1nZVswXSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK0cpO2lmKCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL1RyYW5zZm9ybUluZm8vU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybS8hUHJpbWFyeSIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5''@;'; put 'put ''cHRlZCBmaWxlIG1pc3NpbmcgIitHKTshZnVuY3Rpb24gZW5lKFMpe3ZhciBSPWZ1bmN0aW9uIERWKFMpe3ZhciBSPXt9O3JldHVybiBTLnJlYWRfc2hpZnQoNCksUy5sKz00LFIuaWQ9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxSLm5hbWU9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxSLlI9UDEo''@;'; put 'put ''Uyw0KSxSLlU9UDEoUyw0KSxSLlc9UDEoUyw0KSxSfShTKTtpZihSLmVuYW1lPVMucmVhZF9zaGlmdCgwLCI4bHBwNCIpLFIuYmxrc3o9Uy5yZWFkX3NoaWZ0KDQpLFIuY21vZGU9Uy5yZWFkX3NoaWZ0KDQpLDQhPVMucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFy''@;'; put 'put ''eSByZWNvcmQiKTtyZXR1cm4gUn0oUS5jb250ZW50KX1jYXRjaHt9aWYoIShRPXZlLmZpbmQoUyxHPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7dmFyIHBlPWZ1bmN0aW9uIFg2KFMp''@;'; put 'put ''e3ZhciBSPVAxKFMpO3N3aXRjaChSLk1pbm9yKXtjYXNlIDI6cmV0dXJuW1IuTWlub3IsUlYoUyldO2Nhc2UgMzpyZXR1cm5bUi5NaW5vcixKNigpXTtjYXNlIDQ6cmV0dXJuW1IuTWlub3IsZkMoUyldfXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgdW5yZWNvZ25p''@;'; put 'put ''emVkIFZlcnNpb246ICIrUi5NaW5vcil9KFEuY29udGVudCk7aWYoIShRPXZlLmZpbmQoUyxHPSIvRW5jcnlwdGVkUGFja2FnZSIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTtpZig0PT1wZVswXSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gTGIoUyxSLGssRyl7dmFyIFE9dmUudXRpbHMucHJlcF9ibG9iO2lmKCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIhPVMudXJpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUNNQS0zNzYgQWdpbGUgVVJJ''@;'; put 'put ''ICIrUy51cmkpO3ZhciBvZT1TLmVuY3NbMF0sZ2U9b2UuaGFzaEFsZ29yaXRobSxwZT0iYWVzLTI1Ni1jYmMiLHllPUJ1ZmZlci5mcm9tKG9lLnNhbHRWYWx1ZSwiYmFzZTY0IiksUGU9QnVmZmVyLmZyb20oUy5zYWx0VmFsdWUsImJhc2U2NCIpLE5lPStvZS5ibG9ja1NpemUsWWU9K29lLmtl''@;'; put 'put ''eUJpdHM+PjMsZXQ9bWMoQnVmZmVyLmNvbmNhdChbeWUsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrKSldKSxnZSksY3Q9QnVmZmVyLmFsbG9jKDQpO1EoY3QsMCk7Zm9yKHZhciBFdD0wO0V0PG9lLnNwaW5Db3VudDsrK0V0KWN0Lmw9MCxjdC53cml0ZV9zaGlmdCg0''@;'; put 'put ''LEV0KSxldD1tYyhCdWZmZXIuY29uY2F0KFtjdCxldF0pLGdlKTt2YXIgYXQ9ZnVuY3Rpb24oYnIsZXIsTWksRmkpe3ZhciBuYT1tYyhCdWZmZXIuY29uY2F0KFticixCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKV0pLEZpKSxjYT1uYS5sZW5ndGg+PU1pP25h''@;'; put 'put ''LnNsaWNlKDAsTWkpOkJ1ZmZlci5hbGxvYyhNaSk7aWYobmEubGVuZ3RoPE1pKXtmb3IodmFyIExpPTA7TGk8bmEubGVuZ3RoOysrTGkpY2FbTGldPW5hW0xpXTtmb3IoO0xpPE1pOysrTGkpY2FbTGldPTU0fXJldHVybiBjYX0oZXQsMCxZZSxnZSk7c3dpdGNoKG9lLmNpcGhlckFsZ29yaXRo''@;'; put 'put ''bSl7Y2FzZSJBRVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1vZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAiK29lLmNpcGhlckNoYWluaW5nKTtwZT0iYWVzLSIrb2Uua2V5Qml0cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIiOnBl''@;'; put 'put ''PSJyYzIiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK29lLmNpcGhlckFsZ29yaXRobSl9eWU9ZnVuY3Rpb24oZnIpe2Zvcih2YXIgYnI9QnVmZmVyLmFsbG9jKE5lKSxlcj0wO2VyPE5lOysrZXIpYnJbZXJdPWVyPGZyLmxlbmd0aD9m''@;'; put 'put ''cltlcl06NTQ7cmV0dXJuIGJyfSh5ZSk7dmFyIGJ0PUJ1ZmZlci5mcm9tKG9lLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxqdD1ZNChhdCx5ZSxwZSkudXBkYXRlKGJ0KSxrdD1ZNChtYyhCdWZmZXIuY29uY2F0KFtldCxCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIs''@;'; put 'put ''NzhdKV0pLGdlKS5zbGljZSgwLFllKSx5ZSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKG9lLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSksT3Q9bWMoWTQobWMoQnVmZmVyLmNvbmNhdChbZXQsQnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSld''@;'; put 'put ''KSxnZSkuc2xpY2UoMCxZZSkseWUscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShvZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLGdlKSxLdD0rb2UuaGFzaFNpemV8fE1hdGgubWluKGt0Lmxlbmd0aCxPdC5sZW5ndGgpO2lmKDAhPWt0LnNsaWNlKDAsS3QpLmNvbXBhcmUo''@;'; put 'put ''T3Quc2xpY2UoMCxLdCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7UShSLDApO3ZhciBUbj1SLnJlYWRfc2hpZnQoNCk7Ui5sKz00O3ZhciBycj1bXSxTbj1CdWZmZXIuY29uY2F0KFtQZSxCdWZmZXIuYWxsb2MoNCldKTtmb3IoUShTbiksRXQ9MDtSLmw8Ui5sZW5n''@;'; put 'put ''dGg7KVNuLmw9eWUubGVuZ3RoLFNuLndyaXRlX3NoaWZ0KDQsRXQpLHJyLnB1c2goWTQoanQsbWMoQnVmZmVyLmZyb20oU24pLGdlKS5zbGljZSgwLDE2KSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKFIuc2xpY2UoUi5sLFIubCs0MDk2KSkpKSxSLmwrPTQwOTYsKytFdDt2YXIgWG49QnVmZmVy''@;'; put 'put ''LmNvbmNhdChycikuc2xpY2UoMCxUbiksQm49cXQoRyk7cmV0dXJuIEJuLnR5cGU9ImJ1ZmZlciIsJDUoWG4sQm4pfShwZVsxXSxRLmNvbnRlbnQsay5wYXNzd29yZHx8IiIsayk7aWYoMj09cGVbMF0pcmV0dXJuIGZ1bmN0aW9uIEZJKFMsUixrLEcpe3ZhciBRPXZlLnV0aWxzLnByZXBfYmxv''@;'; put 'put ''YjtpZigiU3RkIiE9PVMudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7dmFyIG9lPVMudi5TYWx0LGdlPVMudi5WZXJpZmllcixwZT1TLnYuVmVyaWZpZXJIYXNoO2lmKDM2IT1TLmguRmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBT''@;'; put 'put ''dGFuZGFyZCBFbmNyeXB0aW9uIGJhZCBGbGFncyIpO3ZhciB5ZT0wLFBlPSIiO3N3aXRjaChTLmguQWxnSUQpe2Nhc2UgMjYxMjY6eWU9MTI4LFBlPSJhZXMtMTI4LWVjYiI7YnJlYWs7Y2FzZSAyNjEyNzp5ZT0xOTYsUGU9ImFlcy0xOTItZWNiIjticmVhaztjYXNlIDI2MTI4OnllPTI1NixQ''@;'; put 'put ''ZT0iYWVzLTI1Ni1lY2IiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpfWlmKDMyNzcyIT1TLmguQWxnSURIYXNoKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTtpZihTLmgu''@;'; put 'put ''S2V5U2l6ZSE9eWUpdGhyb3cgbmV3IEVycm9yKCJBbGdJRC9LZXlTaXplIG1pc21hdGNoIik7aWYoMjQhPVMuaC5Qcm92aWRlclR5cGUpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiB1bnN1cHBvcnRlZCBQcm92aWRlclR5cGUgIitTLmguUHJvdmlkZXJUeXBlKTtpZigiTWljcm9zb2Z0IEVu''@;'; put 'put ''aGFuY2VkIFJTQSBhbmQgQUVTIENyeXB0b2dyYXBoaWMgUHJvdmlkZXIiIT09Uy5oLkNTUE5hbWUuc2xpY2UoMCw1MykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDcnlwdG8gUHJvdmlkZXIgIitTLmguQ1NQTmFtZSk7dmFyIFllPSJTSEEtMSIsZXQ9eWU+PjMsY3Q9bWMoQnVmZmVy''@;'; put 'put ''LmNvbmNhdChbb2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrKV0pLFllKSxFdD1CdWZmZXIuYWxsb2MoNCk7UShFdCwwKTtmb3IodmFyIGF0PTA7YXQ8NWU0OysrYXQpRXQubD0wLEV0LndyaXRlX3NoaWZ0KDQsYXQpLGN0PW1jKEJ1ZmZlci5jb25jYXQoW0V0LGN0XSksWWUpO0V0Lmw9''@;'; put 'put ''MCxFdC53cml0ZV9zaGlmdCg0LDApO3ZhciBycixTbixscixYbixCbixqdD0oWG49KGxyPWZ1bmN0aW9uKGJyLGVyLE1pKXtmb3IodmFyIEZpPUJ1ZmZlci5hbGxvYyg2NCksbmE9MDtuYTxGaS5sZW5ndGg7KytuYSlGaVtuYV09YnI7Zm9yKG5hPTA7bmE8ZXIubGVuZ3RoOysrbmEpRmlbbmFd''@;'; put 'put ''Xj1lcltuYV07cmV0dXJuIG1jKEZpLE1pKX0pKDU0LHJyPW1jKEJ1ZmZlci5jb25jYXQoW2N0LEV0XSksWWUpLFNuPVllKSxCbj1scig5MixycixTbiksQnVmZmVyLmNvbmNhdChbWG4sQm5dKS5zbGljZSgwLGV0KSk7aWYoWTQoanQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUocGUpLnNs''@;'; put 'put ''aWNlKDAsMjApLmNvbXBhcmUobWMoWTQoanQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUoZ2UpLFllKSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtRKFIsMCk7dmFyIGt0PVIucmVhZF9zaGlmdCg0KTtSLmwrPTQ7dmFyIE90PVtdO2ZvcihhdD0wO1IubDxSLmxl''@;'; put 'put ''bmd0aDspT3QucHVzaChZNChqdCxCdWZmZXIuYWxsb2MoMCksUGUpLnVwZGF0ZShSLnNsaWNlKFIubCxSLmwrNDA5NikpKSxSLmwrPTQwOTYsKythdDtyZXR1cm4gJDUoQnVmZmVyLmNvbmNhdChPdCkuc2xpY2UoMCxrdCksRyl9KHBlWzFdLFEuY29udGVudCxrLnBhc3N3b3JkfHwiIixrKTt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIil9dmFyIGJkPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBIOChTLFIpe2lmKFIudGVtcGxhdGUpcmV0dXJuIGJkKFMsUik7aWYoIm9kcyI9PVIuYm9va1R5cGUpcmV0dXJuIFJJKFMsUik7SWYoUiYmUi5QUEl8fDk2KSxT''@;'; put 'put ''JiYhUy5TU0YmJihTLlNTRj1BLmdldF90YWJsZSgpKSxTJiZTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiksUi5yZXZzc2Y9a2UoUy5TU0YpLFIucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxSLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOlIuRm9udHM9W3tzejoxMixjb2xvcjp7''@;'; put 'put ''dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6Ui5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6Ui5Cb3JkZXJzPVt7fV0sRFhGOlIuRFhGPVMuU3R5bGVz''@;'; put 'put ''JiZTLlN0eWxlcy5EWEZ8fFtdLFRhYmxlOlIuVGFibGU9Uy5TdHlsZXMmJlMuU3R5bGVzLlRhYmxlfHxbXX0sUi5vdmVycmlkZU1EVz9UYz1SLm92ZXJyaWRlTURXOkk0KFIuRm9udHNbMF0pLFIucmVscz17fSxSLndicmVscz17fSxSLlN0cmluZ3M9W10sUi5TdHJpbmdzLkNvdW50PTAsUi5T''@;'; put 'put ''dHJpbmdzLlVuaXF1ZT0wLHEzP1IucmV2U3RyaW5ncz1uZXcgTWFwOihSLnJldlN0cmluZ3M9e30sUi5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgUi5yZXZTdHJpbmdzLmZvbyk7dmFyIGs9Inhsc2IiPT1SLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLEc9WWsuaW5kZXhPZihSLmJvb2tUeXBlKT4t''@;'; put 'put ''MSxRPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6''@;'; put 'put ''W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxj''@;'; put 'put ''dXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtQZihSPVJ8fHt9KTt2YXIgb2U9aGkoKSxnZT0iIixwZT0wO2lmKFIuY2VsbFhmcz1bXSxSLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxsMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJh''@;'; put 'put ''bDowfX0pLFMuUHJvcHN8fChTLlByb3BzPXt9KSxqbihvZSxnZT0iZG9jUHJvcHMvY29yZS54bWwiLGZ1bmN0aW9uIHp3KFMsUil7dmFyIGs9Unx8e30sRz1bSWksanddLFE9e307aWYoIVMmJiFrLlByb3BzKXJldHVybiBHLmpvaW4oIiIpO1MmJihudWxsIT1TLkNyZWF0ZWREYXRlJiZ5Zigi''@;'; put 'put ''ZGN0ZXJtczpjcmVhdGVkIiwic3RyaW5nIj09dHlwZW9mIFMuQ3JlYXRlZERhdGU/Uy5DcmVhdGVkRGF0ZTpjZihTLkNyZWF0ZWREYXRlLGsuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxHLFEpLG51bGwhPVMuTW9kaWZpZWREYXRlJiZ5ZigiZGN0ZXJtczptb2RpZmllZCIs''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBTLk1vZGlmaWVkRGF0ZT9TLk1vZGlmaWVkRGF0ZTpjZihTLk1vZGlmaWVkRGF0ZSxrLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sRyxRKSk7Zm9yKHZhciBvZT0wO29lIT1SMC5sZW5ndGg7KytvZSl7dmFyIGdlPVIwW29lXSxwZT1rLlByb3Bz''@;'; put 'put ''JiZudWxsIT1rLlByb3BzW2dlWzFdXT9rLlByb3BzW2dlWzFdXTpTP1NbZ2VbMV1dOm51bGw7ITA9PT1wZT9wZT0iMSI6ITE9PT1wZT9wZT0iMCI6Im51bWJlciI9PXR5cGVvZiBwZSYmKHBlPVN0cmluZyhwZSkpLG51bGwhPXBlJiZ5ZihnZVswXSxwZSxudWxsLEcsUSl9cmV0dXJuIEcubGVu''@;'; put 'put ''Z3RoPjImJihHW0cubGVuZ3RoXT0iPC9jcDpjb3JlUHJvcGVydGllcz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX0oUy5Qcm9wcyxSKSksUS5jb3JlcHJvcHMucHVzaChnZSksRXIoUi5yZWxzLDIsZ2UsS2EuQ09SRV9QUk9QUyksZ2U9ImRvY1Byb3BzL2FwcC54''@;'; put 'put ''bWwiLCFTLlByb3BzfHwhUy5Qcm9wcy5TaGVldE5hbWVzKWlmKFMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIHllPVtdLFBlPTA7UGU8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1BlKTIhPShTLldvcmtib29rLlNoZWV0c1tQZV18fHt9KS5IaWRkZW4mJnllLnB1c2goUy5T''@;'; put 'put ''aGVldE5hbWVzW1BlXSk7Uy5Qcm9wcy5TaGVldE5hbWVzPXllfWVsc2UgUy5Qcm9wcy5TaGVldE5hbWVzPVMuU2hlZXROYW1lcztTLlByb3BzLldvcmtzaGVldHM9Uy5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCxqbihvZSxnZSxmdW5jdGlvbiBVdyhTKXt2YXIgUj1bXSxrPVByO3JldHVybiBT''@;'; put 'put ''fHwoUz17fSksUy5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsUltSLmxlbmd0aF09SWksUltSLmxlbmd0aF09TDYscmguZm9yRWFjaChmdW5jdGlvbihHKXtpZih2b2lkIDAhPT1TW0dbMV1dKXt2YXIgUTtzd2l0Y2goR1syXSl7Y2FzZSJzdHJpbmciOlE9THIoU3RyaW5nKFNbR1sxXV0pKTticmVh''@;'; put 'put ''aztjYXNlImJvb2wiOlE9U1tHWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1RJiYoUltSLmxlbmd0aF09ayhHWzBdLFEpKX19KSxSW1IubGVuZ3RoXT1rKCJIZWFkaW5nUGFpcnMiLGsoInZ0OnZlY3RvciIsaygidnQ6dmFyaWFudCIsIjx2dDpscHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0''@;'; put 'put ''cj4iKStrKCJ2dDp2YXJpYW50IixrKCJ2dDppNCIsU3RyaW5nKFMuV29ya3NoZWV0cykpKSx7c2l6ZToyLGJhc2VUeXBlOiJ2YXJpYW50In0pKSxSW1IubGVuZ3RoXT1rKCJUaXRsZXNPZlBhcnRzIixrKCJ2dDp2ZWN0b3IiLFMuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIjx2''@;'; put 'put ''dDpscHN0cj4iK0xyKEcpKyI8L3Z0Omxwc3RyPiJ9KS5qb2luKCIiKSx7c2l6ZTpTLldvcmtzaGVldHMsYmFzZVR5cGU6Imxwc3RyIn0pKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLFJbMV09UlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX0oUy5Q''@;'; put 'put ''cm9wcykpLFEuZXh0cHJvcHMucHVzaChnZSksRXIoUi5yZWxzLDMsZ2UsS2EuRVhUX1BST1BTKSxTLkN1c3Rwcm9wcyE9PVMuUHJvcHMmJk9lKFMuQ3VzdHByb3BzfHx7fSkubGVuZ3RoPjAmJihqbihvZSxnZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gX2YoUyl7dmFyIFI9W0lp''@;'; put 'put ''LF92XTtpZighUylyZXR1cm4gUi5qb2luKCIiKTt2YXIgaz0xO3JldHVybiBPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFEpeysrayxSW1IubGVuZ3RoXT1QcigicHJvcGVydHkiLGZ1bmN0aW9uIENzKFMsUil7c3dpdGNoKHR5cGVvZiBTKXtjYXNlInN0cmluZyI6dmFyIGs9UHIoInZ0Omxwd3N0''@;'; put 'put ''ciIsTHIoUykpO3JldHVybiBSJiYoaz1rLnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAwMjJfIikpLGs7Y2FzZSJudW1iZXIiOnJldHVybiBQcigoMHxTKT09Uz8idnQ6aTQiOiJ2dDpyOCIsTHIoU3RyaW5nKFMpKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4gUHIoInZ0OmJvb2wiLFM/InRydWUiOiJm''@;'; put 'put ''YWxzZSIpfWlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBQcigidnQ6ZmlsZXRpbWUiLGNmKFMpKTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIitTKX0oU1tRXSwhMCkse2ZtdGlkOiJ7RDVDREQ1MDUtMkU5Qy0xMDFCLTkzOTctMDgwMDJCMkNGOUFFfSIscGlkOmss''@;'; put 'put ''bmFtZTpMcihRKX0pfSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9KFMuQ3VzdHByb3BzKSksUS5jdXN0cHJvcHMucHVzaChnZSksRXIoUi5yZWxzLDQsZ2UsS2EuQ1VTVF9QUk9QUykpO3Zh''@;'; put 'put ''ciBOZT1bXSxZZT1bXTtmdW5jdGlvbiBldChUbixycil7WWUucHVzaChbcGUtMSxycixUbl0pfWZ1bmN0aW9uIGN0KFRuKXtOZS5wdXNoKFtwZS0xLFRuXSksRXIoRXQsLTEsIi4uL3Bpdm90VGFibGVzL3Bpdm90VGFibGUiK05lLmxlbmd0aCsiLiIrayxLYS5QSVZPVCl9Zm9yKHBlPTE7cGU8''@;'; put 'put ''PVMuU2hlZXROYW1lcy5sZW5ndGg7KytwZSl7dmFyIEV0PXsiIWlkIjp7fX0sYXQ9Uy5TaGVldHNbUy5TaGVldE5hbWVzW3BlLTFdXSxidD0oYXR8fHt9KVsiIXR5cGUiXXx8InNoZWV0Ijtzd2l0Y2goYnQpe2Nhc2UiY2hhcnQiOmlmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSIpe2puKG9l''@;'; put 'put ''LGdlPSJ4bC9jaGFydHNoZWV0cy9zaGVldCIrcGUrIi4iK2ssaEkocGUtMSxnZSxSLFMsRXQpKSxRLmNoYXJ0cy5wdXNoKGdlKSxFcihSLndicmVscywtMSwiY2hhcnRzaGVldHMvc2hlZXQiK3BlKyIuIitrLEthLkNTKTticmVha31kZWZhdWx0OmpuKG9lLGdlPSJ4bC93b3Jrc2hlZXRzL3No''@;'; put 'put ''ZWV0IitwZSsiLiIrayxkSShwZS0xLGdlLFIsUyxFdCkpLFEuc2hlZXRzLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJ3b3Jrc2hlZXRzL3NoZWV0IitwZSsiLiIrayxLYS5XU1swXSl9aWYoYXQpeyJjaGFydCI9PWJ0JiYhYXRbIiFwb3MiXSYmKGF0WyIhcG9zIl09e3g6MCx5OjAsdzo5MDAs''@;'; put 'put ''aDo2MDB9KTt2YXIganQ9YXRbIiFjb21tZW50cyJdLGt0PSExO2lmKGp0JiZqdC5sZW5ndGg+MCl7dmFyIE90PSJ4bC9jb21tZW50cyIrcGUrIi4iK2s7am4ob2UsT3QsQXooanQsT3QsUikpLFEuY29tbWVudHMucHVzaChPdCksRXIoRXQsLTEsIi4uL2NvbW1lbnRzIitwZSsiLiIrayxLYS5D''@;'; put 'put ''TU5UKSxrdD0hMH0oYXRbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjAmJihrdD0hMCksYXRbIiFsZWdhY3kiXSYma3QmJmpuKG9lLCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitwZSsiLnZtbCIsT0MocGUsYXRbIiFjb21tZW50cyJdLGF0WyIhY29udHJvbHMiXSxhdCkpLGF0WyIhbGVnYWN5''@;'; put 'put ''SEYiXSYmQmsob2UsMCxwZSxhdFsiIXByaW50Il0uaW1hZ2VzKTt2YXIgS3Q9KCJjaGFydCI9PWF0WyIhdHlwZSJdP1thdF06YXRbIiFjaGFydHMiXXx8W10pLmNvbmNhdCgoYXRbIiFpbWFnZXMiXXx8W10pLm1hcChmdW5jdGlvbihUbil7cmV0dXJuIFRuWyIhdHlwZSJdfHwoVG5bIiF0eXBl''@;'; put 'put ''Il09ImltYWdlIiksVG59KSkuY29uY2F0KChhdFsiIXNoYXBlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKFRuKXtyZXR1cm4gVG5bIiF0eXBlIl18fChUblsiIXR5cGUiXT0ic2hhcGUiKSxUbn0pKTtLdCYmS3QubGVuZ3RoJiYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Ij93cml0ZV9kcmF3aW5n''@;'; put 'put ''XyhvZSxRLHBlLGF0LEt0KTooam4ob2UsInhsL2RyYXdpbmdzL2RyYXdpbmciK3BlKyIueG1sIixtQigpKSxRLmRyYXdpbmdzLnB1c2goInhsL2RyYXdpbmdzL2RyYXdpbmciK3BlKyIueG1sIikpKSxkZWxldGUgYXRbIiFjb21tZW50cyJdLGRlbGV0ZSBhdFsiIWxlZ2FjeSJdLGRlbGV0ZSBh''@;'; put 'put ''dFsiIWxlZ2FjeUhGIl19YXQmJmF0WyIhcGl2b3RzIl0mJiJ4bWwiPT1rJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmYXRbIiFwaXZvdHMiXS5mb3JFYWNoKGN0KSxFdFsiIWlkIl0ucklkMSYmam4ob2UsVnIoZ2UpLGtpKEV0KSksYXQmJmF0WyIhdGFibGVzIl0mJiJ4bWwiPT1rJiZh''@;'; put 'put ''dFsiIXRhYmxlcyJdLmZvckVhY2goZXQpfXJldHVybiBudWxsIT1SLlN0cmluZ3MmJlIuU3RyaW5ncy5sZW5ndGg+MCYmKGpuKG9lLGdlPSJ4bC9zaGFyZWRTdHJpbmdzLiIrayxmSShSLlN0cmluZ3MsZ2UsUikpLFEuc3Rycy5wdXNoKGdlKSxFcihSLndicmVscywtMSwic2hhcmVkU3RyaW5n''@;'; put 'put ''cy4iK2ssS2EuU1NUKSksInhtbCI9PWsmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZ3cml0ZV9waXZvdF94bWwoTmUsUyxvZSxRLFIpLCJ4bWwiPT1rJiZmdW5jdGlvbiBGNChTLFIsayxHKXtTLmZvckVhY2goZnVuY3Rpb24oUSxvZSl7dmFyIGdlPVIuU2hlZXRzW1IuU2hlZXROYW1l''@;'; put 'put ''c1tRWzBdXV0scGU9InhsL3RhYmxlcy90YWJsZSIrKFFbMF0rMSkrIl8iK1FbMV0rIi54bWwiO0cudGFibGVzLnB1c2gocGUpO3ZhciB5ZT1RWzJdLnJlZnx8Z2VbIiFyZWYiXTsic3RyaW5nIiE9dHlwZW9mIHllJiYoeWU9cmEoeWUpKTt2YXIgUGU9b28oeWUpLE5lPVFbMl0ubmFtZXx8InNq''@;'; put 'put ''c3RibF8iK1FbMF0rIl8iK1FbMV0sWWU9W0lpXSxldD0hV3QoUVsyXS5oZWFkZXIpLGN0PWV0JiYhV3QoUVsyXS5maWx0ZXIpO1llLnB1c2goJzx0YWJsZSB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiBpZD0iJysob2Ur''@;'; put 'put ''MSkrJyIgbmFtZT0iJytMcihOZSkrJyIgZGlzcGxheU5hbWU9IicrTHIoTmUpKyciIHJlZj0iJyt5ZSsnIiAnKyhudWxsIT1RWzJdLmhlYWRlciYmMSE9UVsyXS5oZWFkZXI/J2hlYWRlclJvd0NvdW50PSInKyhRWzJdLmhlYWRlcnx8MCkrJyIgJzoiIikrIj4iKSxjdCYmWWUucHVzaCgnPGF1''@;'; put 'put ''dG9GaWx0ZXIgcmVmPSInK3llKyciLz4nKSxZZS5wdXNoKCc8dGFibGVDb2x1bW5zIGNvdW50PSInKyhQZS5lLmMtUGUucy5jKzEpKyciPicpO2Zvcih2YXIgRXQ9W10sYXQ9UGUucy5jO2F0PD1QZS5lLmM7KythdClpZihldCl7Zm9yKHZhciBidD1xaSh7cjpQZS5zLnIsYzphdH0pLGp0PWdl''@;'; put 'put ''W2J0XSxrdD1RWzJdLmNvbHMmJlFbMl0uY29sc1thdC1QZS5zLmNdJiZRWzJdLmNvbHNbYXQtUGUucy5jXS5uYW1lfHxqdCYmKGp0Lnd8fGp0LnYpfHwiQ29sdW1uICIrKGF0LVBlLnMuYysxKSxPdD1rdCxLdD0xO0V0LmluZGV4T2YoT3QpPi0xJiYrK0t0PDE2Mzg0OylPdD1rdCtLdDtpZihP''@;'; put 'put ''dCE9a3QpdGhyb3cidGFibGUgY29sdW1ucyAiK2F0KyIgYW5kICIrKEV0LmluZGV4T2Yoa3QpK1BlLnMuYykrIiBoYXZlIHRoZSBzYW1lIGhlYWRlciAnIitrdCsiJzsgdHJ5IHNldHRpbmcgY2VsbCAiK2J0KyIgdG8gJyIrT3QrIiciO0V0LnB1c2goT3QpLFllLnB1c2goJzx0YWJsZUNvbHVt''@;'; put 'put ''biBpZD0iJysoUVsyXS5jb2xzJiZRWzJdLmNvbHNbYXQtUGUucy5jXSYmbnVsbCE9UVsyXS5jb2xzW2F0LVBlLnMuY10uaWQ/UVsyXS5jb2xzW2F0LVBlLnMuY10uaWQ6YXQtUGUucy5jKzEpKyciIG5hbWU9IicrTHIoT3QpKyciLz4nKX1lbHNlIFllLnB1c2goUVsyXS5jb2xzJiZRWzJdLmNv''@;'; put 'put ''bHNbYXQtUGUucy5jXT8nPHRhYmxlQ29sdW1uIGlkPSInK1FbMl0uY29sc1thdC1QZS5zLmNdLmlkKyciIG5hbWU9IicrUVsyXS5jb2xzW2F0LVBlLnMuY10ubmFtZSsnIi8+JzonPHRhYmxlQ29sdW1uIGlkPSInKyhhdC1QZS5zLmMrMSkrJyIgdW5pcXVlTmFtZT0iJysoYXQtUGUucy5jKzEp''@;'; put 'put ''KyciIG5hbWU9IicrKGF0LVBlLnMuYysxKSsnIi8+Jyk7WWUucHVzaCgiPC90YWJsZUNvbHVtbnM+Iik7dmFyIHJyPSsoITEhPT0oUVsyXS5zdHlsZXx8e30pLnJvd3N0cmlwZSksU249KyEhKFFbMl0uc3R5bGV8fHt9KS5jb2xzdHJpcGUsbHI9KyEhKFFbMl0uc3R5bGV8fHt9KS5jb2xmaXJz''@;'; put 'put ''dCxYbj0rISEoUVsyXS5zdHlsZXx8e30pLmNvbGxhc3QsQm49KFFbMl0uc3R5bGV8fHt9KS5uYW1lfHwiTWVkaXVtOSI7Qm49Qm4ubWF0Y2goL14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pPyJUYWJsZVN0eWxlIitCbjpCbixZZS5wdXNoKCc8dGFibGVTdHlsZUluZm8gbmFtZT0iJytCbisn''@;'; put 'put ''IiBzaG93Rmlyc3RDb2x1bW49IicrbHIrJyIgc2hvd0xhc3RDb2x1bW49IicrWG4rJyIgc2hvd1Jvd1N0cmlwZXM9IicrcnIrJyIgc2hvd0NvbHVtblN0cmlwZXM9IicrU24rJyIvPicpLFllLnB1c2goIjwvdGFibGU+Iiksam4oayxwZSxZZS5qb2luKCIiKSl9KX0oWWUsUyxvZSxRKSwieG1s''@;'; put 'put ''Ij09ayYmKFMuRXh0ZXJuYWxXQnx8W10pLmxlbmd0aCYmZnVuY3Rpb24gUkMoUyxSLGspe2subGlua3N8fChrLmxpbmtzPVtdKSxTLkV4dGVybmFsV0ImJlMuRXh0ZXJuYWxXQi5mb3JFYWNoKGZ1bmN0aW9uKEcsUSl7dmFyIG9lPSIveGwvZXh0ZXJuYWxMaW5rcy9fcmVscy9leHRlcm5hbExp''@;'; put 'put ''bmsiKyhRKzEpKyIueG1sLnJlbHMiLGdlPXt9O0VyKGdlLC0xLEcuVGFyZ2V0LEcuTWlzc2luZz9LYS5YTUlTUzpLYS5YUEFUSCksam4oUixBYyhvZSksa2koZ2UpKTt2YXIgcGU9Ii94bC9leHRlcm5hbExpbmtzL2V4dGVybmFsTGluayIrKFErMSkrIi54bWwiO2subGlua3MucHVzaChwZSks''@;'; put 'put ''am4oUixBYyhwZSksZnVuY3Rpb24gZkIoUyl7dmFyIFI9W0lpLGhCXTtyZXR1cm4oUy5TaGVldE5hbWVzfHxbXSkubGVuZ3RoJiYoUi5wdXNoKCc8ZXh0ZXJuYWxCb29rIHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0''@;'; put 'put ''aW9uc2hpcHMiIHI6aWQ9InJJZDEiPicpLFIucHVzaCgiPHNoZWV0TmFtZXM+IiksUy5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oayl7Ui5wdXNoKCc8c2hlZXROYW1lIHZhbD0iJytMcihrKSsnIi8+Jyl9KSxSLnB1c2goIjwvc2hlZXROYW1lcz4iKSxSLnB1c2goIjxzaGVldERhdGFT''@;'; put 'put ''ZXQ+IiksUy5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oayxHKXt2YXIgUT1TLlNoZWV0c1trXSxvZT17c2hlZXRJZDpHfSxnZT1udWxsO2lmKG51bGw9PVEpb2UucmVmcmVzaEVycm9yPTE7ZWxzZSBpZihRWyIhcmVmIl0pe3ZhciBwZT1NcyhRWyIhcmVmIl0pO2dlPSIiO2Zvcih2YXIg''@;'; put 'put ''eWU9cGUucy5yO3llPD1wZS5lLnI7Kyt5ZSl7Zm9yKHZhciBQZT0iIixOZT1wZS5zLmM7TmU8PXBlLmUuYzsrK05lKXt2YXIgWWU9cWkoe3I6eWUsYzpOZX0pO1FbWWVdJiYoUGV8fChQZT0nPHJvdyByPSInKyh5ZSsxKSsnIj4nKSxQZSs9JzxjZWxsIHI9IicrWWUrJyInKyhRW1llXS50Pycg''@;'; put 'put ''dD0iJytRW1llXS50KyciJzoiIikrIj48dj4iK0xyKFFbWWVdLnYpKyI8L3Y+PC9jZWxsPiIpfVBlJiYoZ2UrPVBlKyI8L3Jvdz4iKX19Ui5wdXNoKFByKCJzaGVldERhdGEiLGdlLG9lKSl9KSxSLnB1c2goIjwvc2hlZXREYXRhU2V0PiIpLFIucHVzaCgiPC9leHRlcm5hbEJvb2s+IikpLFIu''@;'; put 'put ''bGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9leHRlcm5hbExpbms+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9KEcpKX0pfShTLG9lLFEpLCJ4bWwiPT1rJiZmdW5jdGlvbiBEQyhTKXt2YXIgUixrO1MuV29ya2Jvb2t8fChTLldvcmtib29rPXtOYW1lczpbXX0p''@;'; put 'put ''LFMuV29ya2Jvb2suTmFtZXN8fChTLldvcmtib29rLk5hbWVzPVtdKTtmb3IodmFyIEc9Uy5Xb3JrYm9vay5OYW1lcyxRPTA7UTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrUSl7dmFyIG9lPVMuU2hlZXROYW1lc1tRXSxnZT1TLlNoZWV0c1tvZV07aWYoZ2UmJmdlWyIhcHJpbnQiXSl7dmFyIHBl''@;'; put 'put ''PSInIitvZSsiJyEiLHllPWdlWyIhcHJpbnQiXTtpZih5ZSl7dmFyIFBlPSEoUj15ZS5hcmVhKSxOZT0hKGs9eWUudGl0bGVzKSxZZT1SPyJzdHJpbmciPT10eXBlb2YgUj9SOnJhKFIpOiIiO2lmKFImJihHLmZvckVhY2goZnVuY3Rpb24oY3Qpe2N0LlNoZWV0PT1RJiYhUGUmJiJfeGxubS5Q''@;'; put 'put ''cmludF9BcmVhIj09Y3QuTmFtZSYmKFBlPSEwLGN0LlJlZj1wZStZZSl9KSxQZXx8Ry5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9BcmVhIixSZWY6cGUrWWUsU2hlZXQ6UX0pKSxrKXt2YXIgZXQ9IiI7ay5zLmM+LTEmJmsuZS5jPi0xJiYoZXQrPXBlK1RhKGsucy5jKSsiOiIrVGEoay5lLmMp''@;'; put 'put ''KyIsIiksay5zLnI+LTEmJmsuZS5yPi0xJiYoZXQrPXBlK2ppKGsucy5yKSsiOiIramkoay5lLnIpKyIsIiksZXQ9ZXQuc2xpY2UoMCwtMSksRy5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtjdC5TaGVldD09USYmIU5lJiYiX3hsbm0uUHJpbnRfVGl0bGVzIj09Y3QuTmFtZSYmKFBlPSEwLGN0LlJl''@;'; put 'put ''Zj1ldCl9KSxOZXx8Ry5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9UaXRsZXMiLFJlZjpldCxTaGVldDpRfSl9fX19fShTKSxqbihvZSxnZT0ieGwvd29ya2Jvb2suIitrLGZ1bmN0aW9uIFR6KFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/U2I6VDgpKFMsayl9KFMsZ2UsUikp''@;'; put 'put ''LFEud29ya2Jvb2tzLnB1c2goZ2UpLEVyKFIucmVscywxLGdlLEthLldCKSxqbihvZSxnZT0ieGwvdGhlbWUvdGhlbWUxLnhtbCIsaUIoUy5UaGVtZXMsUikpLFEudGhlbWVzLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJ0aGVtZS90aGVtZTEueG1sIixLYS5USEVNRSksam4ob2UsZ2U9Inhs''@;'; put 'put ''L3N0eWxlcy4iK2ssZnVuY3Rpb24gVlMoUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9EazpadikoUyxrKX0oUyxnZSxSKSksUS5zdHlsZXMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsInN0eWxlcy4iK2ssS2EuU1RZKSxTLnZiYXJhdyYmRyYmKGpuKG9lLGdlPSJ4bC92YmFQ''@;'; put 'put ''cm9qZWN0LmJpbiIsUy52YmFyYXcpLFEudmJhLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJ2YmFQcm9qZWN0LmJpbiIsS2EuVkJBKSksUy5tb2RlbCYmUy5tb2RlbC5sZW5ndGgmJihqbihvZSwieGwvbW9kZWwvaXRlbS5kYXRhIixTLm1vZGVsKSxFcihSLndicmVscywtMSwibW9kZWwvaXRl''@;'; put 'put ''bS5kYXRhIixLYS5QV1JQRCkpLFMuY29ubiYmKGpuKG9lLCJ4bC9jb25uZWN0aW9ucy54bWwiLFMuY29ubiksUS5jb25ucy5wdXNoKCIveGwvY29ubmVjdGlvbnMueG1sIiksRXIoUi53YnJlbHMsLTEsImNvbm5lY3Rpb25zLnhtbCIsS2EuQ09OTikpLFMuQ3VzdG9tWE1MJiZTLkN1c3RvbVhN''@;'; put 'put ''TC5mb3JFYWNoKGZ1bmN0aW9uKFRuLHJyKXtpZihqbihvZSwiY3VzdG9tWG1sL2l0ZW0iKyhycisxKSsiLnhtbCIsVG4uZGF0YSksRXIoUi53YnJlbHMsLTEsIi4uL2N1c3RvbVhtbC9pdGVtIisocnIrMSkrIi54bWwiLEthLkNYTUwpLFRuLnByb3BzKXtqbihvZSwiY3VzdG9tWG1sL2l0ZW1Q''@;'; put 'put ''cm9wcyIrKHJyKzEpKyIueG1sIixUbi5wcm9wcyksUS5jdXN0b214bWxwcm9wcy5wdXNoKCIvY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKHJyKzEpKyIueG1sIik7dmFyIFNuPXt9O0VyKFNuLC0xLCJpdGVtUHJvcHMiKyhycisxKSsiLnhtbCIsS2EuQ1hNTFApLGpuKG9lLCJjdXN0b21YbWwvX3Jl''@;'; put 'put ''bHMvaXRlbSIrKHJyKzEpKyIueG1sLnJlbHMiLGtpKFNuKSl9fSksam4ob2UsIltDb250ZW50X1R5cGVzXS54bWwiLGZ1bmN0aW9uIEJ3KFMsUixrKXt2YXIgUSxHPVtdO2t8fChHW0cubGVuZ3RoXT1JaSxHW0cubGVuZ3RoXT1tdixHPUcuY29uY2F0KFZ3KSk7dmFyIG9lPWZ1bmN0aW9uKHll''@;'; put 'put ''KXtTW3llXSYmU1t5ZV0ubGVuZ3RoPjAmJihHW0cubGVuZ3RoXT1QcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PShRPVNbeWVdWzBdKVswXT8iIjoiLyIpK1EsQ29udGVudFR5cGU6ZnZbeWVdW1IuYm9va1R5cGV8fCJ4bHN4Il19KSl9LGdlPWZ1bmN0aW9uKHllKXsoU1t5ZV18''@;'; put 'put ''fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtHW0cubGVuZ3RoXT1QcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PVBlWzBdPyIiOiIvIikrUGUsQ29udGVudFR5cGU6ZnZbeWVdW1IuYm9va1R5cGV8fCJ4bHN4Il19KX0pfSxwZT1mdW5jdGlvbih5ZSl7KFNbeWVdfHxbXSkuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihQZSl7R1tHLmxlbmd0aF09UHIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1QZVswXT8iIjoiLyIpK1BlLENvbnRlbnRUeXBlOnB2W3llXVswXX0pfSl9O3JldHVybiBvZSgid29ya2Jvb2tzIiksZ2UoInNoZWV0cyIpLGdlKCJjaGFydHMiKSxwZSgidGhl''@;'; put 'put ''bWVzIiksWyJzdHJzIiwic3R5bGVzIiwiY29ubnMiXS5mb3JFYWNoKG9lKSxbImNvcmVwcm9wcyIsImV4dHByb3BzIiwiY3VzdHByb3BzIl0uZm9yRWFjaChwZSkscGUoInZiYSIpLHBlKCJjb21tZW50cyIpLHBlKCJkcmF3aW5ncyIpLGdlKCJ0YWJsZXMiKSxnZSgicGl2b3RzIiksZ2UoInBp''@;'; put 'put ''dm90Y2FjaGVzIiksZ2UoInBpdm90cmVjb3JkcyIpLHBlKCJkYXRhbW9kZWxzIikscGUoImN0cmxwcm9wcyIpLHBlKCJjaGFydG9ianMiKSxwZSgiY2hhcnRzdHlsZXMiKSxwZSgiY2hhcnRjb2xvcnMiKSxwZSgiY2hhcnRleHMiKSxnZSgibGlua3MiKSxwZSgiY3VzdG9teG1scHJvcHMiKSwh''@;'; put 'put ''ayYmRy5sZW5ndGg+MiYmKEdbRy5sZW5ndGhdPSI8L1R5cGVzPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfShRLFIpKSxqbihvZSwiX3JlbHMvLnJlbHMiLGtpKFIucmVscykpLGpuKG9lLCJ4bC9fcmVscy93b3JrYm9vay4iK2srIi5yZWxzIixraShSLndicmVs''@;'; put 'put ''cykpLGRlbGV0ZSBSLkZvbnRzLGRlbGV0ZSBSLkZpbGxzLGRlbGV0ZSBSLkJvcmRlcnMsZGVsZXRlIFIucmV2c3NmLGRlbGV0ZSBSLnNzZixvZX1mdW5jdGlvbiBRUyhTLFIpe3ZhciBrPSIiO3N3aXRjaCgoUnx8e30pLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6''@;'; put 'put ''cmV0dXJuW1NbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XV07Y2FzZSJiYXNlNjQiOms9X2UuZGVjb2RlKFMuc2xpY2UoMCwxMikpO2JyZWFrO2Nhc2UiYmluYXJ5IjprPVM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrKFIm''@;'; put 'put ''JlIudHlwZXx8InVuZGVmaW5lZCIpKX1yZXR1cm5bay5jaGFyQ29kZUF0KDApLGsuY2hhckNvZGVBdCgxKSxrLmNoYXJDb2RlQXQoMiksay5jaGFyQ29kZUF0KDMpLGsuY2hhckNvZGVBdCg0KSxrLmNoYXJDb2RlQXQoNSksay5jaGFyQ29kZUF0KDYpLGsuY2hhckNvZGVBdCg3KV19ZnVuY3Rp''@;'; put 'put ''b24gZU0oUyxSKXt2YXIgaz0wO2U6Zm9yKDtrPFMubGVuZ3RoOylzd2l0Y2goUy5jaGFyQ29kZUF0KGspKXtjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjorK2s7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gSTgoUy5zbGljZShrKSxSKTtkZWZhdWx0OmJyZWFrIGV9cmV0dXJuIGozLnRvX3dvcmtib29r''@;'; put 'put ''KFMsUil9ZnVuY3Rpb24gSGIoUyxSLGssRyl7cmV0dXJuIEc/KGsudHlwZT0ic3RyaW5nIixqMy50b193b3JrYm9vayhTLGspKTpqMy50b193b3JrYm9vayhSLGspfWZ1bmN0aW9uICQ1KFMsUil7dmFyIGs9QS5nZXRsb2NhbGUoKTthZShBKSxBLnNldGxvY2FsZShrKSxXKCk7dmFyIEc9Unx8''@;'; put 'put ''e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmUyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiAkNShuZXcgVWludDhBcnJheShTKSwoKEc9cXQoRykpLnR5cGU9ImFycmF5IixHKSk7dmFyIG9lLFE9UyxnZT0hMTtpZihJZihEZj1HLlBQSXx8WXMpLEcuY2VsbFN0eWxlcyYmKEcu''@;'; put 'put ''Y2VsbE5GPSEwLEcuc2hlZXRTdHVicz0hMCksYzg9e30sRy5kYXRlTkYmJihjOC5kYXRlTkY9Ry5kYXRlTkYpLEcudHlwZXx8KEcudHlwZT1UZSYmQnVmZmVyLmlzQnVmZmVyKFMpPyJidWZmZXIiOiJiYXNlNjQiKSwiZmlsZSI9PUcudHlwZSYmKEcudHlwZT1UZT8iYnVmZmVyIjoiYmluYXJ5''@;'; put 'put ''IixRPWZ1bmN0aW9uIEZlKFMpe2lmKHR5cGVvZiBYZTwidSIpcmV0dXJuIFhlLnJlYWRGaWxlU3luYyhTKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBSPUZpbGUoUyk7Ui5vcGVuKCJyIiksUi5lbmNvZGluZz0iYmluYXJ5Ijt2''@;'; put 'put ''YXIgaz1SLnJlYWQoKTtyZXR1cm4gUi5jbG9zZSgpLGt9Y2F0Y2goRyl7aWYoIUcubWVzc2FnZXx8IUcubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBHfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrUyl9KFMpKSwic3RyaW5nIj09Ry50eXBlJiYoZ2U9ITAs''@;'; put 'put ''Ry50eXBlPSJiaW5hcnkiLEcuY29kZXBhZ2U9NjUwMDEsUT1mdW5jdGlvbiBqYyhTKXtyZXR1cm4gUy5tYXRjaCgvW15ceDAwLVx4N0ZdLyk/TnMoUyk6U30oUykpLCJhcnJheSI9PUcudHlwZSYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZTIGluc3RhbmNlb2YgVWludDhBcnJheSYmdHlwZW9m''@;'; put 'put ''IEFycmF5QnVmZmVyPCJ1Iil7dmFyIHBlPW5ldyBBcnJheUJ1ZmZlcigzKSx5ZT1uZXcgVWludDhBcnJheShwZSk7aWYoeWUuZm9vPSJiYXIiLCF5ZS5mb28pcmV0dXJuKEc9cXQoRykpLnR5cGU9ImFycmF5IiwkNShIKFEpLEcpfXN3aXRjaCgob2U9UVMoUSxHKSlbMF0pe2Nhc2UgMjA4Omlm''@;'; put 'put ''KDIwNz09PW9lWzFdJiYxNz09PW9lWzJdJiYyMjQ9PT1vZVszXSYmMTYxPT09b2VbNF0mJjE3Nz09PW9lWzVdJiYyNj09PW9lWzZdJiYyMjU9PT1vZVs3XSlyZXR1cm4gZnVuY3Rpb24gZ3QoUyxSKXtyZXR1cm4gdmUuZmluZChTLCJFbmNyeXB0ZWRQYWNrYWdlIik/RmIoUyxSKTokUyhTLFIp''@;'; put 'put ''fSh2ZS5yZWFkKFEsRyksRyk7YnJlYWs7Y2FzZSA5OmlmKG9lWzFdPD04KXJldHVybiAkUyhRLEcpO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIEk4KFEsRyk7Y2FzZSA3MzppZig3Mz09PW9lWzFdJiY0Mj09PW9lWzJdJiYwPT09b2VbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUg''@;'; put 'put ''aXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2OD09PW9lWzFdKXJldHVybiBmdW5jdGlvbiBhayhTLFIpe3ZhciBrPVJ8fHt9LEc9ISFrLldURjtrLldURj0hMDt0cnl7dmFyIFE9Y0MudG9fd29ya2Jvb2soUyxrKTtyZXR1cm4gay5XVEY9RyxRfWNhdGNoKG9lKXtpZihrLldURj1HLCFvZS5t''@;'; put 'put ''ZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQgSUQvKSYmRyl0aHJvdyBvZTtyZXR1cm4gajMudG9fd29ya2Jvb2soUyxSKX19KFEsRyk7YnJlYWs7Y2FzZSA4NDppZig2NT09PW9lWzFdJiY2Nj09PW9lWzJdJiY3Nj09PW9lWzNdKXJldHVybiBEdi50b193b3JrYm9vayhRLEcpO2JyZWFr''@;'; put 'put ''O2Nhc2UgODA6cmV0dXJuIDc1PT09b2VbMV0mJm9lWzJdPDkmJm9lWzNdPDk/ZnVuY3Rpb24gVkkoUyxSKXt2YXIgRz1TLFE9Unx8e307cmV0dXJuIFEudHlwZXx8KFEudHlwZT1UZSYmQnVmZmVyLmlzQnVmZmVyKFMpPyJidWZmZXIiOiJiYXNlNjQiKSxycChjbihHLFEpLFEpfShRLEcpOkhi''@;'; put 'put ''KFMsUSxHLGdlKTtjYXNlIDIzOTpyZXR1cm4gNjA9PT1vZVszXT9JOChRLEcpOkhiKFMsUSxHLGdlKTtjYXNlIDI1NTppZigyNTQ9PT1vZVsxXSlyZXR1cm4gZnVuY3Rpb24gdFUoUyxSKXt2YXIgaz1TO3JldHVybiJiYXNlNjQiPT1SLnR5cGUmJihrPV9lLmRlY29kZShrKSksaz1jcHRhYmxl''@;'; put 'put ''LnV0aWxzLmRlY29kZSgxMjAwLGsuc2xpY2UoMiksInN0ciIpLFIudHlwZT0iYmluYXJ5IixlTShrLFIpfShRLEcpO2JyZWFrO2Nhc2UgMDppZigwPT09b2VbMV0mJm9lWzJdPj0yJiYwPT09b2VbM10pcmV0dXJuIEl2LnRvX3dvcmtib29rKFEsRyk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNh''@;'; put 'put ''c2UgMTM5OmNhc2UgMTQwOnJldHVybiBCMy50b193b3JrYm9vayhRLEcpO2Nhc2UgMTIzOmlmKDkyPT09b2VbMV0mJjExND09PW9lWzJdJiYxMTY9PT1vZVszXSlyZXR1cm4gVnYudG9fd29ya2Jvb2soUSxHKTticmVhaztjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''ZVUoUyxSKXt2YXIgaz0iIixHPVFTKFMsUik7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOms9X2UuZGVjb2RlKFMpO2JyZWFrO2Nhc2UiYmluYXJ5IjprPVM7YnJlYWs7Y2FzZSJidWZmZXIiOms9Uy50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6az11dChTKTticmVh''@;'; put 'put ''aztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfXJldHVybiAyMzk9PUdbMF0mJjE4Nz09R1sxXSYmMTkxPT1HWzJdJiYoaz1nbyhrKSksZU0oayxSKX0oUSxHKX1yZXR1cm4gQjMudmVyc2lvbnMuaW5kZXhPZihvZVswXSk+LTEmJm9lWzJdPD0x''@;'; put 'put ''MiYmb2VbM108PTMxP0IzLnRvX3dvcmtib29rKFEsRyk6SGIoUyxRLEcsZ2UpfWZ1bmN0aW9uIGtjKFMsUil7dmFyIGs9Unx8e307cmV0dXJuIGsudHlwZT0iZmlsZSIsJDUoUyxrKX1mdW5jdGlvbiBLNShTLFIpe3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6YnJl''@;'; put 'put ''YWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOlIudHlwZT0iIjticmVhaztjYXNlImZpbGUiOnJldHVybiBEZShSLmZpbGUsdmUud3JpdGUoUyx7dHlwZTpUZT8iYnVmZmVyIjoiIn0pKTtjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlk''@;'; put 'put ''IGZvciAnIitSLmJvb2tUeXBlKyInIGZpbGVzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1yZXR1cm4gdmUud3JpdGUoUyxSKX1mdW5jdGlvbiBuMShTLFIsayl7a3x8KGs9IiIpO3ZhciBHPWsrUztzd2l0Y2goUi50eXBlKXtjYXNlImJh''@;'; put 'put ''c2U2NCI6cmV0dXJuIF9lLmVuY29kZShOcyhHKSk7Y2FzZSJiaW5hcnkiOnJldHVybiBOcyhHKTtjYXNlInN0cmluZyI6cmV0dXJuIFM7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoUi5maWxlLEcsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFRlP1NlKEcsInV0ZjgiKTpuMShHLHt0eXBlOiJi''@;'; put 'put ''aW5hcnkifSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9ZnVuY3Rpb24gdE0oUyxSKXtzd2l0Y2goUi50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJiYXNlNjQiOmNh''@;'; put 'put ''c2UiYmluYXJ5Ijpmb3IodmFyIGs9IiIsRz0wO0c8Uy5sZW5ndGg7KytHKWsrPVN0cmluZy5mcm9tQ2hhckNvZGUoU1tHXSk7cmV0dXJuImJhc2U2NCI9PVIudHlwZT9fZS5lbmNvZGUoayk6InN0cmluZyI9PVIudHlwZT9nbyhrKTprO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSxTKTtj''@;'; put 'put ''YXNlImJ1ZmZlciI6cmV0dXJuIFM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX19ZnVuY3Rpb24gTjgoUyxSKXtXKCksZnVuY3Rpb24gb0koUyl7aWYoIVN8fCFTLlNoZWV0TmFtZXN8fCFTLlNoZWV0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFs''@;'; put 'put ''aWQgV29ya2Jvb2siKTtpZighUy5TaGVldE5hbWVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIldvcmtib29rIGlzIGVtcHR5Iik7IWZ1bmN0aW9uIGFJKFMsUixrKXtTLmZvckVhY2goZnVuY3Rpb24oRyxRKXtfYihHKTtmb3IodmFyIG9lPTA7b2U8UTsrK29lKWlmKEc9PVNbb2VdKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrRyk7aWYoayl7dmFyIGdlPVImJlJbUV0mJlJbUV0uQ29kZU5hbWV8fEc7aWYoOTU9PWdlLmNoYXJDb2RlQXQoMCkmJmdlLmxlbmd0aD4yMil0aHJvdyBuZXcgRXJyb3IoIkJhZCBDb2RlIE5hbWU6IFdvcmtzaGVldCIrZ2UpfX0p''@;'; put 'put ''fShTLlNoZWV0TmFtZXMsUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHN8fFtdLCEhUy52YmFyYXcpO2Zvcih2YXIgaz0wO2s8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2spbUQoUy5TaGVldHNbUy5TaGVldE5hbWVzW2tdXSwwLGspfShTKTt2YXIgaz1SfHx7fTtpZihrLmNlbGxTdHlsZXMm''@;'; put 'put ''JihrLmNlbGxORj0hMCxrLnNoZWV0U3R1YnM9ITApLCJhcnJheSI9PWsudHlwZSl7ay50eXBlPSJiaW5hcnkiO3ZhciBHPU44KFMsayk7cmV0dXJuIGsudHlwZT0iYXJyYXkiLHgoRyl9c3dpdGNoKGsuYm9va1R5cGV8fCJ4bHNiIil7Y2FzZSJ4bWwiOmNhc2UieGxtbCI6cmV0dXJuIG4xKFNJ''@;'; put 'put ''KFMsayksayk7Y2FzZSJzbGsiOmNhc2Uic3lsayI6cmV0dXJuIG4xKEd6KFMsayksayk7Y2FzZSJodG0iOmNhc2UiaHRtbCI6cmV0dXJuIG4xKFd6KFMsayksayk7Y2FzZSJ0eHQiOnJldHVybiBmdW5jdGlvbiBWYihTLFIpe3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gX2Uu''@;'; put 'put ''ZW5jb2RlKFMpO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6cmV0dXJuIFM7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoUi5maWxlLFMsImJpbmFyeSIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gVGU/U2UoUywiYmluYXJ5Iik6Uy5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKGspe3JldHVybiBrLmNoYXJD''@;'; put 'put ''b2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX0oJHooUyxrKSxrKTtjYXNlImNzdiI6cmV0dXJuIG4xKFl6KFMsayksaywiXHVmZWZmIik7Y2FzZSJkaWYiOnJldHVybiBuMSh2ZChTLGspLGspO2Nhc2UiZGJmIjpyZXR1cm4gdE0oZXJlKFMs''@;'; put 'put ''ayksayk7Y2FzZSJwcm4iOnJldHVybiBuMShMSShTLGspLGspO2Nhc2UicnRmIjpyZXR1cm4gbjEoT0koUyxrKSxrKTtjYXNlImV0aCI6cmV0dXJuIG4xKFBJKFMsayksayk7Y2FzZSJmb2RzIjpyZXR1cm4gbjEoUkkoUyxrKSxrKTtjYXNlImJpZmYyIjprLmJpZmZ8fChrLmJpZmY9Mik7Y2Fz''@;'; put 'put ''ZSJiaWZmMyI6ay5iaWZmfHwoay5iaWZmPTMpO2Nhc2UiYmlmZjQiOnJldHVybiBrLmJpZmZ8fChrLmJpZmY9NCksdE0oVEkoUyxrKSxrKTtjYXNlImJpZmY1IjprLmJpZmZ8fChrLmJpZmY9NSk7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmNhc2UieGxzIjpyZXR1cm4gay5iaWZmfHwoay5iaWZm''@;'; put 'put ''PTgpLGZ1bmN0aW9uIE5iKFMsUil7dmFyIGs9Unx8e307cmV0dXJuIEs1KGZ1bmN0aW9uIHpuZShTLFIpe3ZhciBrPVJ8fHt9LEc9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxRPSIvV29ya2Jvb2siO3N3aXRjaChrLmJvb2tUeXBlfHwieGxzIil7Y2FzZSJ4bHMiOmsuYm9va1R5cGU9''@;'; put 'put ''ImJpZmY4IjtjYXNlInhsYSI6ay5ib29rVHlwZXx8KGsuYm9va1R5cGU9InhsYSIpO2Nhc2UiYmlmZjgiOlE9Ii9Xb3JrYm9vayIsay5iaWZmPTg7YnJlYWs7Y2FzZSJiaWZmNSI6UT0iL0Jvb2siLGsuYmlmZj01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUg''@;'; put 'put ''IitrLmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gdmUudXRpbHMuY2ZiX2FkZChHLFEsVEkoUyxrKSksOD09ay5iaWZmJiYoUy5Qcm9wc3x8Uy5DdXN0cHJvcHMpJiZmdW5jdGlvbiBqbmUoUyxSKXt2YXIgZ2Usaz1bXSxHPVtdLFE9W10sb2U9MDtpZihTLlByb3BzKWZvcihnZT1P''@;'; put 'put ''ZShTLlByb3BzKSxvZT0wO29lPGdlLmxlbmd0aDsrK29lKShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaDUsZ2Vbb2VdKT9rOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZixnZVtvZV0pP0c6USkucHVzaChbZ2Vbb2VdLFMuUHJvcHNbZ2Vbb2Vd''@;'; put 'put ''XV0pO2lmKFMuQ3VzdHByb3BzKWZvcihnZT1PZShTLkN1c3Rwcm9wcyksb2U9MDtvZTxnZS5sZW5ndGg7KytvZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUy5Qcm9wc3x8e30sZ2Vbb2VdKXx8KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoNSxn''@;'; put 'put ''ZVtvZV0pP2s6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZmLGdlW29lXSk/RzpRKS5wdXNoKFtnZVtvZV0sUy5DdXN0cHJvcHNbZ2Vbb2VdXV0pO3ZhciBwZT1bXTtmb3Iob2U9MDtvZTxRLmxlbmd0aDsrK29lKVY2LmluZGV4T2YoUVtvZV1bMF0pPi0xfHxudWxsIT1R''@;'; put 'put ''W29lXVsxXSYmcGUucHVzaChRW29lXSk7Ry5sZW5ndGgmJnZlLnV0aWxzLmNmYl9hZGQoUiwiL1x4MDVTdW1tYXJ5SW5mb3JtYXRpb24iLHppKEcsVGIuU0ksdmYsZDUpKSwoay5sZW5ndGh8fHBlLmxlbmd0aCkmJnZlLnV0aWxzLmNmYl9hZGQoUiwiL1x4MDVEb2N1bWVudFN1bW1hcnlJbmZv''@;'; put 'put ''cm1hdGlvbiIsemkoayxUYi5EU0ksaDUsbTQscGUubGVuZ3RoP3BlOm51bGwsVGIuVURJKSl9KFMsRyksOD09ay5iaWZmJiZTLnZiYXJhdyYmZnVuY3Rpb24gV2soUyxSKXtSLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7aWYoMCE9Ryl7dmFyIFE9ay5yZXBsYWNlKC9bXlwvXSpb''@;'; put 'put ''XC9dLywiL19WQkFfUFJPSkVDVF9DVVIvIik7Ii8iIT09US5zbGljZSgtMSkmJnZlLnV0aWxzLmNmYl9hZGQoUyxRLFIuRmlsZUluZGV4W0ddLmNvbnRlbnQpfX0pfShHLHZlLnJlYWQoUy52YmFyYXcse3R5cGU6InN0cmluZyI9PXR5cGVvZiBTLnZiYXJhdz8iYmluYXJ5IjoiYnVmZmVyIn0p''@;'; put 'put ''KSxHfShTLGspLGspfShTLGspO2Nhc2UieGxzeCI6Y2FzZSJ4bHNtIjpjYXNlInhsYW0iOmNhc2UieGxzYiI6Y2FzZSJvZHMiOnJldHVybiBmdW5jdGlvbiBxNShTLFIpe3ZhciBrPVJ8fHt9LEc9SDgoUyxrKSxRPXt9O2lmKGsuY29tcHJlc3Npb24mJihRLmNvbXByZXNzaW9uPSJERUZMQVRF''@;'; put 'put ''Iiksay5wYXNzd29yZClRLnR5cGU9VGU/Im5vZGVidWZmZXIiOiJzdHJpbmciO2Vsc2Ugc3dpdGNoKGsudHlwZSl7Y2FzZSJiYXNlNjQiOlEudHlwZT0iYmFzZTY0IjticmVhaztjYXNlImJpbmFyeSI6US50eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK2suYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpRLnR5cGU9VGU/Im5vZGVidWZmZXIiOiJzdHJpbmciO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAi''@;'; put 'put ''K2sudHlwZSl9dmFyIG9lPUcuRnVsbFBhdGhzP3ZlLndyaXRlKEcse2ZpbGVUeXBlOiJ6aXAiLHR5cGU6e25vZGVidWZmZXI6ImJ1ZmZlciIsc3RyaW5nOiJiaW5hcnkifVtRLnR5cGVdfHxRLnR5cGV9KTpHLmdlbmVyYXRlKFEpO3JldHVybiBrLnBhc3N3b3JkJiZ0eXBlb2YgWHo8InUiP0s1''@;'; put 'put ''KFh6KG9lLGsucGFzc3dvcmQpLGspOiJmaWxlIj09PWsudHlwZT9EZShrLmZpbGUsb2UpOiJzdHJpbmciPT1rLnR5cGU/Z28ob2UpOm9lfShTLGspO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgYm9va1R5cGUgfCIray5ib29rVHlwZSsifCIpfX1mdW5jdGlvbiBuTShT''@;'; put 'put ''KXtpZighUy5ib29rVHlwZSl7dmFyIGs9Uy5maWxlLnNsaWNlKFMuZmlsZS5sYXN0SW5kZXhPZigiLiIpKS50b0xvd2VyQ2FzZSgpO2subWF0Y2goL15cLlthLXpdKyQvKSYmKFMuYm9va1R5cGU9ay5zbGljZSgxKSksUy5ib29rVHlwZT17eGxzOiJiaWZmOCIsaHRtOiJodG1sIixzbGs6InN5''@;'; put 'put ''bGsiLHNvY2lhbGNhbGM6ImV0aCIsU2gzM3RKUzoiV1RGIn1bUy5ib29rVHlwZV18fFMuYm9va1R5cGV9fWZ1bmN0aW9uIFY4KFMsUixrKXt2YXIgRz1rfHx7fTtyZXR1cm4gRy50eXBlPSJmaWxlIixHLmZpbGU9UixuTShHKSxOOChTLEcpfWZ1bmN0aW9uIGlNKFMsUixrLEcsUSxvZSxnZSxw''@;'; put 'put ''ZSl7dmFyIHllPWppKGspLFBlPXBlLmRlZnZhbCxOZT1wZS5yYXcsWWU9ITAsZXQ9MT09PVE/W106e307aWYoMSE9PVEpaWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQsIl9fcm93TnVtX18iLHt2YWx1ZTprLGVudW1lcmFibGU6ITF9KX1jYXRj''@;'; put 'put ''aHtldC5fX3Jvd051bV9fPWt9ZWxzZSBldC5fX3Jvd051bV9fPWs7aWYoIWdlfHxTW2tdKWZvcih2YXIgY3Q9Ui5zLmM7Y3Q8PVIuZS5jOysrY3Qpe3ZhciBFdD1nZT9TW2tdW2N0XTpTW0dbY3RdK3llXTtpZih2b2lkIDAhPT1FdCYmdm9pZCAwIT09RXQudCl7dmFyIGF0PUV0LnY7c3dpdGNo''@;'; put 'put ''KEV0LnQpe2Nhc2UieiI6aWYobnVsbD09YXQpYnJlYWs7Y29udGludWU7Y2FzZSJlIjphdD0wPT1hdD9udWxsOnZvaWQgMDticmVhaztjYXNlInMiOmNhc2UiZCI6Y2FzZSJiIjpjYXNlIm4iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgdHlwZSAiK0V0LnQp''@;'; put 'put ''fWlmKG51bGwhPW9lW2N0XSl7aWYobnVsbD09YXQpaWYoImUiPT1FdC50JiZudWxsPT09YXQpZXRbb2VbY3RdXT1udWxsO2Vsc2UgaWYodm9pZCAwIT09UGUpZXRbb2VbY3RdXT1QZTtlbHNle2lmKCFOZXx8bnVsbCE9PWF0KWNvbnRpbnVlO2V0W29lW2N0XV09bnVsbH1lbHNlIGV0W29lW2N0''@;'; put 'put ''XV09TmU/YXQ6X2woRXQsYXQscGUpO251bGwhPWF0JiYoWWU9ITEpfX1lbHNle2lmKHZvaWQgMD09PVBlKWNvbnRpbnVlO251bGwhPW9lW2N0XSYmKGV0W29lW2N0XV09UGUpfX1yZXR1cm57cm93OmV0LGlzZW1wdHk6WWV9fWZ1bmN0aW9uIEs0KFMsUil7aWYobnVsbD09U3x8bnVsbD09U1si''@;'; put 'put ''IXJlZiJdKXJldHVybltdO3ZhciBrPXt0OiJuIix2OjB9LEc9MCxRPTEsb2U9W10sZ2U9MCxwZT0iIix5ZT1KU09OLnBhcnNlKCd7InMiOnsiciI6MCwiYyI6MH0sImUiOnsiciI6MCwiYyI6MH19JyksUGU9Unx8e30sTmU9bnVsbCE9UGUucmFuZ2U/UGUucmFuZ2U6U1siIXJlZiJdO3N3aXRj''@;'; put 'put ''aCgxPT09UGUuaGVhZGVyP0c9MToiQSI9PT1QZS5oZWFkZXI/Rz0yOkFycmF5LmlzQXJyYXkoUGUuaGVhZGVyKT9HPTM6bnVsbD09UGUuaGVhZGVyJiYoRz0wKSx0eXBlb2YgTmUpe2Nhc2Uic3RyaW5nIjp5ZT1vbyhOZSk7YnJlYWs7Y2FzZSJudW1iZXIiOih5ZT1vbyhTWyIhcmVmIl0pKS5z''@;'; put 'put ''LnI9TmU7YnJlYWs7ZGVmYXVsdDp5ZT1OZX1HPjAmJihRPTApO3ZhciBZZT1qaSh5ZS5zLnIpLGV0PVtdLGN0PVtdLEV0PTAsYXQ9MCxidD1BcnJheS5pc0FycmF5KFMpLGp0PXllLnMucixrdD0wLE90PTA7Zm9yKGJ0JiYhU1tqdF0mJihTW2p0XT1bXSksa3Q9eWUucy5jO2t0PD15ZS5lLmM7''@;'; put 'put ''KytrdClzd2l0Y2goZXRba3RdPVRhKGt0KSxrPWJ0P1NbanRdW2t0XTpTW2V0W2t0XStZZV0sRyl7Y2FzZSAxOm9lW2t0XT1rdC15ZS5zLmM7YnJlYWs7Y2FzZSAyOm9lW2t0XT1ldFtrdF07YnJlYWs7Y2FzZSAzOm9lW2t0XT1QZS5oZWFkZXJba3QteWUucy5jXTticmVhaztkZWZhdWx0OmZv''@;'; put 'put ''cihudWxsPT1rJiYoaz1KU09OLnBhcnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSxwZT1nZT1fbChrLG51bGwsUGUpLGF0PTAsT3Q9MDtPdDxvZS5sZW5ndGg7KytPdClvZVtPdF09PXBlJiYocGU9Z2UrIl8iKyArK2F0KTtvZVtrdF09cGV9Zm9yKGp0PXllLnMucitRO2p0PD15''@;'; put 'put ''ZS5lLnI7KytqdCl7dmFyIEt0PWlNKFMseWUsanQsZXQsRyxvZSxidCxQZSk7KCExPT09S3QuaXNlbXB0eXx8KDE9PT1HPyExIT09UGUuYmxhbmtyb3dzOlBlLmJsYW5rcm93cykpJiYoY3RbRXQrK109S3Qucm93KX1yZXR1cm4gY3QubGVuZ3RoPUV0LGN0fXZhciBfMj0vIi9nO2Z1bmN0aW9u''@;'; put 'put ''IEJJKFMsUixrLEcsUSxvZSxnZSxwZSl7Zm9yKHZhciB5ZT0hMCxQZT1bXSxOZT0iIixZZT1qaShrKSxldD1SLnMuYztldDw9Ui5lLmM7KytldClpZihHW2V0XSl7dmFyIGN0PXBlLmRlbnNlPyhTW2tdfHxbXSlbZXRdOlNbR1tldF0rWWVdO2lmKG51bGw9PWN0KU5lPSIiO2Vsc2UgaWYobnVs''@;'; put 'put ''bCE9Y3Qudil7eWU9ITEsTmU9IiIrX2woY3QsbnVsbCxwZSk7Zm9yKHZhciBFdD0wLGF0PTA7RXQhPT1OZS5sZW5ndGg7KytFdClpZigoYXQ9TmUuY2hhckNvZGVBdChFdCkpPT09UXx8YXQ9PT1vZXx8MzQ9PT1hdCl7TmU9JyInK05lLnJlcGxhY2UoXzIsJyIiJykrJyInO2JyZWFrfSJJRCI9''@;'; put 'put ''PU5lJiYoTmU9JyJJRCInKX1lbHNlIG51bGw9PWN0LmZ8fGN0LkY/TmU9IiI6KHllPSExLChOZT0iPSIrY3QuZikuaW5kZXhPZigiLCIpPj0wJiYoTmU9JyInK05lLnJlcGxhY2UoXzIsJyIiJykrJyInKSk7UGUucHVzaChOZSl9cmV0dXJuITE9PT1wZS5ibGFua3Jvd3MmJnllP251bGw6UGUu''@;'; put 'put ''am9pbihnZSl9ZnVuY3Rpb24gQzAoUyxSKXt2YXIgaz1bXSxHPVI/P3t9O2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm4iIjt2YXIgUT1vbyhTWyIhcmVmIl0pLG9lPXZvaWQgMCE9PUcuRlM/Ry5GUzoiLCIsZ2U9b2UuY2hhckNvZGVBdCgwKSxwZT12b2lkIDAhPT1HLlJTP0cu''@;'; put 'put ''UlM6IlxuIix5ZT1wZS5jaGFyQ29kZUF0KDApLFBlPW5ldyBSZWdFeHAoKCJ8Ij09b2U/IlxcfCI6b2UpKyIrJCIpLE5lPSIiLFllPVtdO0cuZGVuc2U9QXJyYXkuaXNBcnJheShTKTtmb3IodmFyIGV0PUcuc2tpcEhpZGRlbiYmU1siIWNvbHMiXXx8W10sY3Q9Ry5za2lwSGlkZGVuJiZTWyIh''@;'; put 'put ''cm93cyJdfHxbXSxFdD1RLnMuYztFdDw9US5lLmM7KytFdCkoZXRbRXRdfHx7fSkuaGlkZGVufHwoWWVbRXRdPVRhKEV0KSk7Zm9yKHZhciBhdD1RLnMucjthdDw9US5lLnI7KythdCkoY3RbYXRdfHx7fSkuaGlkZGVufHxudWxsIT0oTmU9QkkoUyxRLGF0LFllLGdlLHllLG9lLEcpKSYmKEcu''@;'; put 'put ''c3RyaXAmJihOZT1OZS5yZXBsYWNlKFBlLCIiKSksay5wdXNoKE5lK3BlKSk7cmV0dXJuIGRlbGV0ZSBHLmRlbnNlLGsuam9pbigiIil9ZnVuY3Rpb24gakkoUyxSKXtSfHwoUj17fSksUi5GUz0iXHQiLFIuUlM9IlxuIjt2YXIgaz1DMChTLFIpO3JldHVybiB0eXBlb2YgY3B0YWJsZT4idSJ8''@;'; put 'put ''fCJzdHJpbmciPT1SLnR5cGU/azoiXHhmZlx4ZmUiK2NwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsaywic3RyIil9ZnVuY3Rpb24gYU0oUyl7dmFyIGssUj0iIixHPSIiO2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcGUsUT1vbyhTWyIhcmVmIl0pLG9lPSIiLGdl''@;'; put 'put ''PVtdLHllPVtdLFBlPUFycmF5LmlzQXJyYXkoUyk7Zm9yKHBlPVEucy5jO3BlPD1RLmUuYzsrK3BlKWdlW3BlXT1UYShwZSk7Zm9yKHZhciBOZT1RLnMucjtOZTw9US5lLnI7KytOZSlmb3Iob2U9amkoTmUpLHBlPVEucy5jO3BlPD1RLmUuYzsrK3BlKWlmKFI9Z2VbcGVdK29lLEc9IiIsdm9p''@;'; put 'put ''ZCAwIT09KGs9UGU/KFNbTmVdfHxbXSlbcGVdOlNbUl0pKXtpZihudWxsIT1rLkYpe2lmKFI9ay5GLCFrLmYpY29udGludWU7Rz1rLmYsLTE9PVIuaW5kZXhPZigiOiIpJiYoUj1SKyI6IitSKX1pZihudWxsIT1rLmYpRz1rLmY7ZWxzZXtpZigieiI9PWsudCljb250aW51ZTtpZigibiI9PWsu''@;'; put 'put ''dCYmbnVsbCE9ay52KUc9IiIray52O2Vsc2UgaWYoImIiPT1rLnQpRz1rLnY/IlRSVUUiOiJGQUxTRSI7ZWxzZSBpZih2b2lkIDAhPT1rLncpRz0iJyIray53O2Vsc2V7aWYodm9pZCAwPT09ay52KWNvbnRpbnVlO0c9InMiPT1rLnQ/IiciK2sudjoiIitrLnZ9fXllW3llLmxlbmd0aF09Uisi''@;'; put 'put ''PSIrR31yZXR1cm4geWV9ZnVuY3Rpb24gQmIoUyxSLGspe3ZhciBHPWt8fHt9LFE9KyFHLnNraXBIZWFkZXIsb2U9U3x8e30sZ2U9MCxwZT0wO2lmKG9lJiZudWxsIT1HLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIEcub3JpZ2luKWdlPUcub3JpZ2luO2Vsc2V7dmFyIHllPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgRy5vcmlnaW4/Tm8oRy5vcmlnaW4pOkcub3JpZ2luO2dlPXllLnIscGU9eWUuY312YXIgUGUsTmU9SlNPTi5wYXJzZSgneyJzIjogeyJjIjowLCAiciI6MH0sICJlIjogeyJjIjowLCAiciI6MH19Jyk7aWYoTmUuZS5jPXBlLE5lLmUucj1nZStSLmxlbmd0aC0xK1Esb2VbIiFy''@;'; put 'put ''ZWYiXSl7dmFyIFllPW9vKG9lWyIhcmVmIl0pO05lLmUuYz1NYXRoLm1heChOZS5lLmMsWWUuZS5jKSxOZS5lLnI9TWF0aC5tYXgoTmUuZS5yLFllLmUuciksLTE9PWdlJiYoTmUuZS5yPShnZT1ZZS5lLnIrMSkrUi5sZW5ndGgtMStRKX1lbHNlLTE9PWdlJiYoZ2U9MCxOZS5lLnI9Ui5sZW5n''@;'; put 'put ''dGgtMStRKTt2YXIgZXQ9Ry5oZWFkZXJ8fFtdLGN0PTA7Ui5mb3JFYWNoKGZ1bmN0aW9uKGF0LGJ0KXtPZShhdCkuZm9yRWFjaChmdW5jdGlvbihqdCl7LTE9PShjdD1ldC5pbmRleE9mKGp0KSkmJihldFtjdD1ldC5sZW5ndGhdPWp0KTt2YXIga3Q9YXRbanRdLE90PSJ6IixLdD0iIixUbj1x''@;'; put 'put ''aSh7YzpwZStjdCxyOmdlK2J0K1F9KTtpZihQZT16dS5zaGVldF9nZXRfY2VsbChvZSxUbiksIWt0fHwib2JqZWN0IiE9dHlwZW9mIGt0fHxrdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2Yga3Q/T3Q9Im4iOiJib29sZWFuIj09dHlwZW9mIGt0P090PSJiIjoic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIGt0P090PSJzIjprdCBpbnN0YW5jZW9mIERhdGU/KE90PSJkIixHLmNlbGxEYXRlc3x8KE90PSJuIixrdD1RZShrdCkpLEt0PVBlLnomJkEuaXNfZGF0ZShQZS56KT9QZS56OkcuZGF0ZU5GfHxBLl90YWJsZVsxNF0pOm51bGw9PT1rdCYmRy5udWxsRXJyb3ImJihPdD0iZSIs''@;'; put 'put ''a3Q9MCksUGU/KFBlLnQ9T3QsUGUudj1rdCxkZWxldGUgUGUudyxkZWxldGUgUGUuUixLdCYmKFBlLno9S3QpKTpvZVtUbl09UGU9e3Q6T3QsdjprdH0sS3QmJihQZS56PUt0KSxQZSYmUGUuaCl0cnl7aWYoUGUuUj1tZC5odG1sX3RvX3JzKFBlLmgpLCFQZS52KXtQZS52PSIiO2Zvcih2YXIg''@;'; put 'put ''cnI9MDtycjxQZS5SLmxlbmd0aDsrK3JyKVBlLnYrPVBlLlJbcnJdLnZ8fCIifX1jYXRjaHt9fWVsc2Ugb2VbVG5dPWt0fSl9KSxOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLHBlK2V0Lmxlbmd0aC0xKTt2YXIgRXQ9amkoZ2UpO2lmKFEpZm9yKGN0PTA7Y3Q8ZXQubGVuZ3RoOysrY3Qpb2VbVGEo''@;'; put 'put ''Y3QrcGUpK0V0XT17dDoicyIsdjpldFtjdF19O3JldHVybiBvZVsiIXJlZiJdPXJhKE5lKSxvZX12YXIgenU9e2VuY29kZV9jb2w6VGEsZW5jb2RlX3JvdzpqaSxlbmNvZGVfY2VsbDpxaSxlbmNvZGVfcmFuZ2U6cmEsZGVjb2RlX2NvbDpDYSxkZWNvZGVfcm93Ol9vLHNwbGl0X2NlbGw6ZnVu''@;'; put 'put ''Y3Rpb24gJDAoUyl7cmV0dXJuIFMucmVwbGFjZSgvKFwkP1tBLVpdKikoXCQ/XGQqKS8sIiQxLCQyIikuc3BsaXQoIiwiKX0sZGVjb2RlX2NlbGw6Tm8sZGVjb2RlX3JhbmdlOk1zLGZvcm1hdF9jZWxsOl9sLGdldF9mb3JtdWxhZTphTSxtYWtlX2NzdjpDMCxtYWtlX2pzb246SzQsbWFrZV9m''@;'; put 'put ''b3JtdWxhZTphTSxodG1sX3RvX3JzOm1kLmh0bWxfdG9fcnMsc2hlZXRfYWRkX2FvYTpmNCxzaGVldF9hZGRfanNvbjpCYixzaGVldF9hZGRfZG9tOkliLGFvYV90b19zaGVldDpwNCxqc29uX3RvX3NoZWV0OmZ1bmN0aW9uIHpJKFMsUil7cmV0dXJuIEJiKG51bGwsUyxSKX0sdGFibGVfdG9f''@;'; put 'put ''c2hlZXQ6anosdGFibGVfdG9fYm9vazpmdW5jdGlvbiB6eihTLFIpe3JldHVybiB0aChqeihTLFIpLFIpfSxzaGVldF90b19jc3Y6QzAsc2hlZXRfdG9fdHh0OmpJLHNoZWV0X3RvX2pzb246SzQsc2hlZXRfdG9faHRtbDptZC5mcm9tX3NoZWV0LHNoZWV0X3RvX2Zvcm11bGFlOmFNLHNoZWV0''@;'; put 'put ''X3RvX3Jvd19vYmplY3RfYXJyYXk6SzR9O2Z1bmN0aW9uIFVJKFMsUixrLEcsUSl7dmFyIG9lO2lmKFMuc3R5bGUmJiEoUy5fcmFuZ2UmJihvZT0ic3RyaW5nIj09dHlwZW9mIFMuX3JhbmdlP3cudXRpbHMuZGVjb2RlX3JhbmdlKFMuX3JhbmdlKTpTLl9yYW5nZSxrLmM+b2UuZS5jfHxrLmM8''@;'; put 'put ''b2Uucy5jfHxrLnI+b2UuZS5yfHxrLnI8b2Uucy5yKSkmJm9lKXt2YXIgZ2U9Uy5zdHlsZS5zdHlsZTtpZihnZSl7Z2Uud2hvbGVUYWJsZSYmenUuYXBwbHlfc3R5bGVfZGVsdGEoRyxnZS53aG9sZVRhYmxlKTtlOmlmKGdlLmhlYWRlclJvdylpZihRKXtpZihrLnIhPW9lLnMucilicmVhayBl''@;'; put 'put ''O1d0KFMuc3R5bGUuY29saGVhZCl8fHp1LmFwcGx5X3N0eWxlX2RlbHRhKEcsZ2UuaGVhZGVyUm93KX1lbHNle2lmKGsuciE9b2Uucy5yKWJyZWFrIGU7V3QoUy5oZWFkZXIpfHx6dS5hcHBseV9zdHlsZV9kZWx0YShHLGdlLmhlYWRlclJvdyl9fX19enUudGVzdF9wYXNzd29yZD1mdW5jdGlv''@;'; put 'put ''biBLeihTLFIpe3ZhciBrPUJ1ZmZlci5mcm9tKFMuc2FsdCwiYmFzZTY0IiksRz1TLmFsZ28sUT1tYyhCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUikpXSksRyksb2U9QnVmZmVyLmFsbG9jKDQpO21uKG9lLDApO2Zvcih2YXIgZ2U9MDtn''@;'; put 'put ''ZTxTLnNwaW47KytnZSlvZS5sPTAsb2Uud3JpdGVfc2hpZnQoNCxnZSksUT1tYyhCdWZmZXIuY29uY2F0KFtRLG9lXSksRyk7dmFyIHBlPUJ1ZmZlci5mcm9tKFMuaGFzaCwiYmFzZTY0Iik7cmV0dXJuIDA9PVEuY29tcGFyZShwZSl9LHp1Lmhhc2hfcGFzc3dvcmQ9ZnVuY3Rpb24gUmIoUyl7''@;'; put 'put ''dmFyIFI9e2FsZ286IlNIQS01MTIiLHNhbHQ6IlUyaGxaWFJLVXk1amIyMHZlR3h6ZUE9PSIsc3BpbjoxZTN9LGs9QnVmZmVyLmZyb20oUi5zYWx0LCJiYXNlNjQiKSxHPVIuYWxnbyxRPW1jKEJ1ZmZlci5jb25jYXQoW2ssQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxT''@;'; put 'put ''KSldKSxHKSxvZT1CdWZmZXIuYWxsb2MoNCk7bW4ob2UsMCk7Zm9yKHZhciBnZT0wO2dlPFIuc3BpbjsrK2dlKW9lLmw9MCxvZS53cml0ZV9zaGlmdCg0LGdlKSxRPW1jKEJ1ZmZlci5jb25jYXQoW1Esb2VdKSxHKTtyZXR1cm4gUi5oYXNoPVEudG9TdHJpbmcoImJhc2U2NCIpLFJ9LHp1LnNo''@;'; put 'put ''ZWV0X3NldF9yYW5nZV9zdHlsZT1mdW5jdGlvbihTLFIsayl7aWYoayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBSP29vKFIpOlI7bnVsbCE9Ry5yJiZudWxsIT1HLmMmJihHPXtzOkcsZTpHfSk7dmFyIHBlLFE9Ry5zLnIsb2U9MCxnZT0iIix5ZT1NcyhTWyIhcmVmIl18fCJBMSIpO3llLnMu''@;'; put 'put ''cj5HLnMuciYmKHllLnMucj1HLnMucikseWUucy5jPkcucy5jJiYoeWUucy5jPUcucy5jKSx5ZS5lLnI8Ry5lLnImJih5ZS5lLnI9Ry5lLnIpLHllLmUuYzxHLmUuYyYmKHllLmUuYz1HLmUuYyksU1siIXJlZiJdPXJhKHllKTtmb3IodmFyIE5lPUFycmF5LmlzQXJyYXkoUyk7UTw9Ry5lLnI7''@;'; put 'put ''KytRKWZvcihvZT1HLnMuYztvZTw9Ry5lLmM7KytvZSlOZT8oU1tRXXx8KFNbUV09W10pLFNbUV1bb2VdfHwoU1tRXVtvZV09e3Q6InoifSkscGU9U1tRXVtvZV0pOihTW2dlPXFpKHtyOlEsYzpvZX0pXXx8KFNbZ2VdPXt0OiJ6In0pLHBlPVNbZ2VdKSxwZS5zfHwocGUucz17fSksT2JqZWN0''@;'; put 'put ''LmtleXMoaykuZm9yRWFjaChQZSkscGUucy5wYXR0ZXJuVHlwZSYmIXBlLnMuZmdDb2xvciYmKGRlbGV0ZSBwZS5zLnBhdHRlcm5UeXBlLGRlbGV0ZSBwZS5zLmJnQ29sb3IpLChwZS5zLmZnQ29sb3J8fHBlLnMuYmdDb2xvcikmJiJub25lIj09KHBlLnMucGF0dGVyblR5cGV8fCJub25lIikm''@;'; put 'put ''JihwZS5zLnBhdHRlcm5UeXBlPSJzb2xpZCIpO2lmKFE9Ry5zLnIsay50b3B8fG51bGw9PT1rLnRvcClmb3Iob2U9Ry5zLmM7b2U8PUcuZS5jOysrb2Upe2lmKE5lKXtpZighU1tRXSljb250aW51ZTtwZT1TW1FdW29lXX1lbHNlIGdlPXFpKHtyOlEsYzpvZX0pLHBlPVNbZ2VdO3BlJiYobnVs''@;'; put 'put ''bD09PWsudG9wP2RlbGV0ZSBwZS5zLnRvcDpwZS5zLnRvcD1xdChrLnRvcCkpfWlmKFE9Ry5lLnIsay5ib3R0b218fG51bGw9PT1rLmJvdHRvbSlmb3Iob2U9Ry5zLmM7b2U8PUcuZS5jOysrb2Upe2lmKE5lKXtpZighU1tRXSljb250aW51ZTtwZT1TW1FdW29lXX1lbHNlIGdlPXFpKHtyOlEs''@;'; put 'put ''YzpvZX0pLHBlPVNbZ2VdO3BlJiYobnVsbD09PWsuYm90dG9tP2RlbGV0ZSBwZS5zLmJvdHRvbTpwZS5zLmJvdHRvbT1xdChrLmJvdHRvbSkpfWlmKG9lPUcucy5jLGsubGVmdHx8bnVsbD09PWsubGVmdClmb3IoUT1HLnMucjtRPD1HLmUucjsrK1Epe2lmKE5lKXtpZighU1tRXSljb250aW51''@;'; put 'put ''ZTtwZT1TW1FdW29lXX1lbHNlIGdlPXFpKHtyOlEsYzpvZX0pLHBlPVNbZ2VdO3BlJiYobnVsbD09PWsubGVmdD9kZWxldGUgcGUucy5sZWZ0OnBlLnMubGVmdD1xdChrLmxlZnQpKX1pZihvZT1HLmUuYyxrLnJpZ2h0fHxudWxsPT09ay5yaWdodClmb3IoUT1HLnMucjtRPD1HLmUucjsrK1Ep''@;'; put 'put ''e2lmKE5lKXtpZighU1tRXSljb250aW51ZTtwZT1TW1FdW29lXX1lbHNlIGdlPXFpKHtyOlEsYzpvZX0pLHBlPVNbZ2VdO3BlJiYobnVsbD09PWsucmlnaHQ/ZGVsZXRlIHBlLnMucmlnaHQ6cGUucy5yaWdodD1xdChrLnJpZ2h0KSl9fWZ1bmN0aW9uIFBlKFllKXtpZigidG9wIiE9WWUmJiJi''@;'; put 'put ''b3R0b20iIT1ZZSYmImxlZnQiIT1ZZSYmInJpZ2h0IiE9WWUpe2lmKCJ6Ij09WWUpcmV0dXJuIHZvaWQocGUuej1rLnopO2lmKCJhbGlnbm1lbnQiPT1ZZSlyZXR1cm4gdm9pZChwZS5zW1llXT9PYmplY3Qua2V5cyhrW1llXSkuZm9yRWFjaChmdW5jdGlvbihldCl7cGUuc1tZZV1bZXRdPWtb''@;'; put 'put ''WWVdW2V0XX0pOnBlLnNbWWVdPXF0KGtbWWVdKSk7aWYoImluY29sIj09WWUpcmV0dXJuIG9lPkcucy5jJiYobnVsbD09PWsubGVmdD9kZWxldGUgcGUucy5sZWZ0OnBlLnMubGVmdD0ib2JqZWN0Ij09dHlwZW9mIGtbWWVdP3F0KGtbWWVdKTprW1llXSksdm9pZChvZTxHLmUuYyYmKG51bGw9''@;'; put 'put ''PT1rLnJpZ2h0P2RlbGV0ZSBwZS5zLnJpZ2h0OnBlLnMucmlnaHQ9Im9iamVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV0pKTtpZigiaW5yb3ciPT1ZZSlyZXR1cm4gUT5HLnMuciYmKG51bGw9PT1rLnRvcD9kZWxldGUgcGUucy50b3A6cGUucy50b3A9Im9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBrW1llXT9xdChrW1llXSk6a1tZZV0pLHZvaWQoUTxHLmUuciYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209Im9iamVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV0pKTtudWxsPT09a1tZZV0/ZGVsZXRlIHBlLnNbWWVdOnBlLnNbWWVd''@;'; put 'put ''PWtbWWVdJiZBcnJheS5pc0FycmF5KGtbWWVdKT9rW1llXS5zbGljZSgpLm1hcChmdW5jdGlvbihldCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBldD9xdChldCk6ZXR9KToib2JqZWN0Ij09dHlwZW9mIGtbWWVdP3F0KGtbWWVdKTprW1llXX19fSx6dS5hcHBseV9zdHlsZV9kZWx0YT1mdW5j''@;'; put 'put ''dGlvbihTLFIpe1sic3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9azsiYmdDb2xvciI9PWs/Rz0iZmdDb2xvciI6ImZnQ29sb3IiPT1rJiYoRz0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYobnVsbD09PVJba10/ZGVsZXRlIFNbR106bnVsbCE9UltrXSYmKFNbR109UltrXSkpfSksWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJd''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oayl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsaykmJihudWxsPT09UltrXT9kZWxldGUgU1trXTpudWxsIT1SW2tdJiYoU1trXT1xdChSW2tdKSkpfSl9LHp1LmdldF9jb21wdXRlZF9zdHlsZT1mdW5jdGlvbihTLFIpeyJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgUiYmKFI9dy51dGlscy5kZWNvZGVfY2VsbChSKSk7dmFyIGs9QXJyYXkuaXNBcnJheShTKT8oU1tSLnJdfHxbXSlbUi5jXTpTW3cudXRpbHMuZW5jb2RlX2NlbGwoUildLEc9cXQoayYmay5zfHx7fSk7cmV0dXJuIFNbIiF0YWJsZXMiXSYmU1siIXRhYmxlcyJdLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUSl7VUkoUSwwLFIsRyl9KSxTWyIhcGl2b3RzIl0mJlNbIiFwaXZvdHMiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1VJKFEsMCxSLEcsITApfSksR307dmFyIHpiPXt9O3p1LmNlbGxfYXJyYXlfdG9fY3N2X3Jvdz1mdW5jdGlvbihTLFIpe3ZhciBrPVI/P3t9LEc9dm9pZCAwIT09''@;'; put 'put ''ay5GUz9rLkZTOiIsIixRPUcuY2hhckNvZGVBdCgwKSxvZT12b2lkIDAhPT1rLlJTP2suUlM6IlxuIixnZT1vZS5jaGFyQ29kZUF0KDApLHBlPXpiW0ddfHwoemJbR109bmV3IFJlZ0V4cCgoInwiPT1HPyJcXHwiOkcpKyIrJCIpKSx5ZT1mdW5jdGlvbiBqYihTLFIsayxHLFEpe2Zvcih2YXIg''@;'; put 'put ''b2U9ITAsZ2U9W10scGU9IiIseWU9MDt5ZTw9Uy5sZW5ndGgtMTsrK3llKXt2YXIgUGU9U1t5ZV07aWYobnVsbD09UGUpcGU9IiI7ZWxzZSBpZihudWxsIT1QZS52KXtvZT0hMSxwZT0iIitfbChQZSxudWxsLFEpO2Zvcih2YXIgTmU9MCxZZT0wO05lIT09cGUubGVuZ3RoOysrTmUpaWYoKFll''@;'; put 'put ''PXBlLmNoYXJDb2RlQXQoTmUpKT09PVJ8fFllPT09a3x8MzQ9PT1ZZSl7cGU9JyInK3BlLnJlcGxhY2UoXzIsJyIiJykrJyInO2JyZWFrfSJJRCI9PXBlJiYocGU9JyJJRCInKX1lbHNlIG51bGw9PVBlLmZ8fFBlLkY/cGU9IiI6KG9lPSExLChwZT0iPSIrUGUuZikuaW5kZXhPZigiLCIpPj0w''@;'; put 'put ''JiYocGU9JyInK3BlLnJlcGxhY2UoXzIsJyIiJykrJyInKSk7Z2UucHVzaChwZSl9cmV0dXJuITE9PT1RLmJsYW5rcm93cyYmb2U/bnVsbDpnZS5qb2luKEcpfShTLFEsZ2UsRyxrKTtyZXR1cm4gay5zdHJpcCYmKHllPXllLnJlcGxhY2UocGUsIiIpKSx5ZStvZX0sZnVuY3Rpb24oUyl7ZnVu''@;'; put 'put ''Y3Rpb24gayhvZSxnZSxwZSl7cmV0dXJuIG51bGwhPW9lW2dlXT9vZVtnZV06b2VbZ2VdPXBlfWZ1bmN0aW9uIEcob2UsZ2UscGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZ2Upe2lmKEFycmF5LmlzQXJyYXkob2UpKXt2YXIgeWU9Tm8oZ2UpO3JldHVybiBvZVt5ZS5yXXx8KG9lW3llLnJdPVtd''@;'; put 'put ''KSxvZVt5ZS5yXVt5ZS5jXXx8KG9lW3llLnJdW3llLmNdPXt0OiJ6In0pfXJldHVybiBvZVtnZV18fChvZVtnZV09e3Q6InoifSl9cmV0dXJuIEcob2UscWkoIm51bWJlciIhPXR5cGVvZiBnZT9nZTp7cjpnZSxjOnBlfHwwfSkpfVMuY29uc3RzPVMuY29uc3RzfHx7fSxTLnNoZWV0X2dldF9j''@;'; put 'put ''ZWxsPUcsUy5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LFMuYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24ob2UsZ2UscGUpe2lmKCFwZSlmb3IodmFyIHllPTE7eWU8PTY1NTM1JiYtMSE9b2UuU2hlZXROYW1lcy5pbmRleE9mKHBlPSJTaGVl''@;'; put 'put ''dCIreWUpOysreWUpO2lmKF9iKHBlKSxvZS5TaGVldE5hbWVzLmluZGV4T2YocGUpPj0wKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IitwZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtvZS5TaGVldE5hbWVzLnB1c2gocGUpLG9lLlNoZWV0c1twZV09Z2V9LFMuYm9va19z''@;'; put 'put ''ZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihvZSxnZSxwZSl7ayhvZSwiV29ya2Jvb2siLHt9KSxrKG9lLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgeWU9ZnVuY3Rpb24gUShvZSxnZSl7aWYoIm51bWJlciI9PXR5cGVvZiBnZSl7aWYoZ2U+PTAmJm9lLlNoZWV0TmFtZXMubGVuZ3Ro''@;'; put 'put ''PmdlKXJldHVybiBnZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0ICMgIitnZSl9aWYoInN0cmluZyI9PXR5cGVvZiBnZSl7dmFyIHBlPW9lLlNoZWV0TmFtZXMuaW5kZXhPZihnZSk7aWYocGU+LTEpcmV0dXJuIHBlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hl''@;'; put 'put ''ZXQgbmFtZSB8IitnZSsifCIpfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgfCIrZ2UrInwiKX0ob2UsZ2UpO3N3aXRjaChrKG9lLldvcmtib29rLlNoZWV0cyx5ZSx7fSkscGUpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJC''@;'; put 'put ''YWQgc2hlZXQgdmlzaWJpbGl0eSBzZXR0aW5nICIrcGUpfW9lLldvcmtib29rLlNoZWV0c1t5ZV0uSGlkZGVuPXBlfSxmdW5jdGlvbiBSKG9lKXtvZS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtTLmNvbnN0c1tnZVswXV09Z2VbMV19KX0oW1siU0hFRVRfVklTSUJMRSIsMF0sWyJTSEVFVF9ISURE''@;'; put 'put ''RU4iLDFdLFsiU0hFRVRfVkVSWV9ISURERU4iLDJdXSksUy5jZWxsX3NldF9udW1iZXJfZm9ybWF0PWZ1bmN0aW9uKG9lLGdlKXtyZXR1cm4gb2Uuej1nZSxvZX0sUy5jZWxsX3NldF9oeXBlcmxpbms9ZnVuY3Rpb24ob2UsZ2UscGUpe3JldHVybiBnZT8ob2UubD17VGFyZ2V0OmdlfSxwZSYm''@;'; put 'put ''KG9lLmwuVG9vbHRpcD1wZSksb2Uuc3x8KG9lLnM9e30pLG9lLnMuY29sb3I9e3RoZW1lOjEwfSk6KGRlbGV0ZSBvZS5sLG9lLnMmJm9lLnMuY29sb3ImJjEwPT1vZS5zLmNvbG9yLnRoZW1lJiZkZWxldGUgb2Uucy5jb2xvciksb2V9LFMuY2VsbF9zZXRfaW50ZXJuYWxfbGluaz1mdW5jdGlv''@;'; put 'put ''bihvZSxnZSxwZSl7cmV0dXJuIFMuY2VsbF9zZXRfaHlwZXJsaW5rKG9lLCIjIitnZSxwZSl9LFMuY2VsbF9hZGRfY29tbWVudD1mdW5jdGlvbihvZSxnZSxwZSl7b2UuY3x8KG9lLmM9W10pLG9lLmMucHVzaCh7dDpnZSxhOnBlfHwiU2hlZXRKUyJ9KX0sUy5zaGVldF9zZXRfYXJyYXlfZm9y''@;'; put 'put ''bXVsYT1mdW5jdGlvbihvZSxnZSxwZSl7Zm9yKHZhciB5ZT0ic3RyaW5nIiE9dHlwZW9mIGdlP2dlOm9vKGdlKSxQZT0ic3RyaW5nIj09dHlwZW9mIGdlP2dlOnJhKGdlKSxOZT15ZS5zLnI7TmU8PXllLmUucjsrK05lKWZvcih2YXIgWWU9eWUucy5jO1llPD15ZS5lLmM7KytZZSl7dmFyIGV0''@;'; put 'put ''PUcob2UsTmUsWWUpO2V0LnQ9Im4iLGV0LkY9UGUsZGVsZXRlIGV0LnYsTmU9PXllLnMuciYmWWU9PXllLnMuYyYmKGV0LmY9cGUpfXJldHVybiBvZX19KHp1KSxUZSYmZnVuY3Rpb24oKXt2YXIgUz15KDcwNDUpLlJlYWRhYmxlO3cuc3RyZWFtPXt0b19qc29uOmZ1bmN0aW9uKFEsb2Upe3Zh''@;'; put 'put ''ciBnZT1TKHtvYmplY3RNb2RlOiEwfSk7aWYobnVsbD09UXx8bnVsbD09UVsiIXJlZiJdKXJldHVybiBnZS5wdXNoKG51bGwpLGdlO3ZhciBwZT17dDoibiIsdjowfSx5ZT0wLFBlPTEsTmU9W10sWWU9MCxldD0iIixjdD17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LEV0PW9lfHx7fSxhdD1u''@;'; put 'put ''dWxsIT1FdC5yYW5nZT9FdC5yYW5nZTpRWyIhcmVmIl07c3dpdGNoKDE9PT1FdC5oZWFkZXI/eWU9MToiQSI9PT1FdC5oZWFkZXI/eWU9MjpBcnJheS5pc0FycmF5KEV0LmhlYWRlcikmJih5ZT0zKSx0eXBlb2YgYXQpe2Nhc2Uic3RyaW5nIjpjdD1vbyhhdCk7YnJlYWs7Y2FzZSJudW1iZXIi''@;'; put 'put ''OihjdD1vbyhRWyIhcmVmIl0pKS5zLnI9YXQ7YnJlYWs7ZGVmYXVsdDpjdD1hdH15ZT4wJiYoUGU9MCk7dmFyIGJ0PWppKGN0LnMuciksanQ9W10sa3Q9MCxPdD1BcnJheS5pc0FycmF5KFEpLEt0PWN0LnMucixUbj0wLHJyPTA7Zm9yKE90JiYhUVtLdF0mJihRW0t0XT1bXSksVG49Y3Qucy5j''@;'; put 'put ''O1RuPD1jdC5lLmM7KytUbilzd2l0Y2goanRbVG5dPVRhKFRuKSxwZT1PdD9RW0t0XVtUbl06UVtqdFtUbl0rYnRdLHllKXtjYXNlIDE6TmVbVG5dPVRuLWN0LnMuYzticmVhaztjYXNlIDI6TmVbVG5dPWp0W1RuXTticmVhaztjYXNlIDM6TmVbVG5dPUV0LmhlYWRlcltUbi1jdC5zLmNdO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6Zm9yKG51bGw9PXBlJiYocGU9e3c6Il9fRU1QVFkiLHQ6InMifSksZXQ9WWU9X2wocGUsbnVsbCxFdCksa3Q9MCxycj0wO3JyPE5lLmxlbmd0aDsrK3JyKU5lW3JyXT09ZXQmJihldD1ZZSsiXyIrICsra3QpO05lW1RuXT1ldH1yZXR1cm4gS3Q9Y3Qucy5yK1BlLGdlLl9y''@;'; put 'put ''ZWFkPWZ1bmN0aW9uKCl7aWYoS3Q+Y3QuZS5yKXJldHVybiBnZS5wdXNoKG51bGwpO2Zvcig7S3Q8PWN0LmUucjspe3ZhciBTbj1pTShRLGN0LEt0LGp0LHllLE5lLE90LEV0KTtpZigrK0t0LCExPT09U24uaXNlbXB0eXx8KDE9PT15ZT8hMSE9PUV0LmJsYW5rcm93czpFdC5ibGFua3Jvd3Mp''@;'; put 'put ''KXtnZS5wdXNoKFNuLnJvdyk7YnJlYWt9fX0sZ2V9LHRvX2h0bWw6ZnVuY3Rpb24oUSxvZSl7dmFyIGdlPVMoKSxwZT1vZXx8e30sUGU9bnVsbCE9cGUuZm9vdGVyP3BlLmZvb3RlcjptZC5FTkQ7Z2UucHVzaChudWxsIT1wZS5oZWFkZXI/cGUuaGVhZGVyOm1kLkJFR0lOKTt2YXIgTmU9TXMo''@;'; put 'put ''UVsiIXJlZiJdKTtwZS5kZW5zZT1BcnJheS5pc0FycmF5KFEpLGdlLnB1c2gobWQuX3ByZWFtYmxlKFEsTmUscGUpKTt2YXIgWWU9TmUucy5yLGV0PSExLGN0PVtdO3JldHVybiBnZS5fcmVhZD1mdW5jdGlvbigpe2lmKFllPk5lLmUucilyZXR1cm4gZXR8fChldD0hMCxnZS5wdXNoKCI8L3Rh''@;'; put 'put ''YmxlPiIrUGUpKSxnZS5wdXNoKG51bGwpO2Zvcig7WWU8PU5lLmUucjspe2dlLnB1c2gobWQuX3JvdyhRLE5lLFllLHBlLGN0LCIiKSksKytZZTticmVha319LGdlfSx0b19jc3Y6ZnVuY3Rpb24oUSxvZSl7dmFyIGdlPVMoKSxwZT1vZT8/e307aWYobnVsbD09UXx8bnVsbD09UVsiIXJlZiJd''@;'; put 'put ''KXJldHVybiBnZS5wdXNoKG51bGwpLGdlO3ZhciB5ZT1vbyhRWyIhcmVmIl0pLFBlPXZvaWQgMCE9PXBlLkZTP3BlLkZTOiIsIixOZT1QZS5jaGFyQ29kZUF0KDApLFllPXZvaWQgMCE9PXBlLlJTP3BlLlJTOiJcbiIsZXQ9WWUuY2hhckNvZGVBdCgwKSxjdD1uZXcgUmVnRXhwKCgifCI9PVBl''@;'; put 'put ''PyJcXHwiOlBlKSsiKyQiKSxFdD0iIixhdD1bXTtwZS5kZW5zZT1BcnJheS5pc0FycmF5KFEpO2Zvcih2YXIgYnQ9cGUuc2tpcEhpZGRlbiYmUVsiIWNvbHMiXXx8W10sanQ9cGUuc2tpcEhpZGRlbiYmUVsiIXJvd3MiXXx8W10sa3Q9eWUucy5jO2t0PD15ZS5lLmM7KytrdCkoYnRba3RdfHx7''@;'; put 'put ''fSkuaGlkZGVufHwoYXRba3RdPVRhKGt0KSk7dmFyIE90PXllLnMucixLdD0hMTtyZXR1cm4gZ2UuX3JlYWQ9ZnVuY3Rpb24oKXtpZighS3QpcmV0dXJuIEt0PSEwLGdlLnB1c2goIlx1ZmVmZiIpO2Zvcig7T3Q8PXllLmUucjspaWYoKytPdCwhKGp0W090LTFdfHx7fSkuaGlkZGVuJiZudWxs''@;'; put 'put ''IT0oRXQ9QkkoUSx5ZSxPdC0xLGF0LE5lLGV0LFBlLHBlKSkpe3BlLnN0cmlwJiYoRXQ9RXQucmVwbGFjZShjdCwiIikpLGdlLnB1c2goRXQrWWUpO2JyZWFrfXJldHVybiBPdD55ZS5lLnI/Z2UucHVzaChudWxsKTp2b2lkIDB9LGdlfX19KCksdy5wYXJzZV94bHNjZmI9JFMsdy5wYXJzZV96''@;'; put 'put ''aXA9cnAsdy5yZWFkPSQ1LHcucmVhZEZpbGU9a2Msdy5yZWFkRmlsZVN5bmM9a2Msdy53cml0ZT1OOCx3LndyaXRlRmlsZT1WOCx3LndyaXRlRmlsZVN5bmM9Vjgsdy53cml0ZUZpbGVBc3luYz1mdW5jdGlvbiByTShTLFIsayxHKXt2YXIgUT1rfHx7fTtRLnR5cGU9ImZpbGUiLFEuZmlsZT1T''@;'; put 'put ''LG5NKFEpLFEudHlwZT0iYnVmZmVyIjt2YXIgb2U9RztyZXR1cm4gb2UgaW5zdGFuY2VvZiBGdW5jdGlvbnx8KG9lPWspLFhlLndyaXRlRmlsZShTLE44KFIsUSksb2UpfSx3LnNldF9kYXRlX3N0eWxlPWZ1bmN0aW9uIER0KFMpe3N3aXRjaChTKXtjYXNlIDA6eXQoKTticmVhaztjYXNlIDE6''@;'; put 'put ''IWZ1bmN0aW9uIE10KCl7dmFyIFM9bmV3IERhdGU7bnQ9X3QuZ2V0VGltZSgpKzZlNCooUy5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpO3ZhciBSPVMuZ2V0VGltZXpvbmVPZmZzZXQoKTtRZT1mdW5jdGlvbihHLFEpe3ZhciBvZT1HLmdldFRpbWUoKTtyZXR1''@;'; put 'put ''cm4gUSYmKG9lLT0xMjYzMTY4ZTUpLChvZS0oX3QuZ2V0VGltZSgpKzZlNCooRy5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9LHVuPWZ1bmN0aW9uKEcpe3ZhciBRPW5ldyBEYXRlO3JldHVybiBRLnNldFRpbWUoMjQqRyo2MCo2MCoxZTMrbnQp''@;'; put 'put ''LFEuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PVImJlEuc2V0VGltZShRLmdldFRpbWUoKSs2ZTQqKFEuZ2V0VGltZXpvbmVPZmZzZXQoKS1SKSksUX19KCl9fSx3LnV0aWxzPXp1LHcuU1NGPUEsdHlwZW9mIHZlPCJ1IiYmKHcuQ0ZCPXZlKX0oWCl9LDQ5NjA5Oih1ZSxYLHkpPT57dmFyIEk9WDtJ''@;'; put 'put ''LmJpZ251bT15KDk2ODY3KSxJLmRlZmluZT15KDE2NjI2KS5kZWZpbmUsSS5iYXNlPXkoMTUwNjYpLEkuY29uc3RhbnRzPXkoNDc3NDApLEkuZGVjb2RlcnM9eSg5MTU1OCksSS5lbmNvZGVycz15KDIyNzE0KX0sMTY2MjY6KHVlLFgseSk9Pnt2YXIgST15KDQ5NjA5KSxfPXkoNzE5OTMpO2Z1''@;'; put 'put ''bmN0aW9uIEIodyxQKXt0aGlzLm5hbWU9dyx0aGlzLmJvZHk9UCx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319WC5kZWZpbmU9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gbmV3IEIoUCxGKX0sQi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKFApe3ZhciBGO3RyeXtGPXko''@;'; put 'put ''ODY2MSkucnVuSW5UaGlzQ29udGV4dCgiKGZ1bmN0aW9uICIrdGhpcy5uYW1lKyIoZW50aXR5KSB7XG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xufSkiKX1jYXRjaHtGPWZ1bmN0aW9uKHope3RoaXMuX2luaXROYW1lZCh6KX19cmV0dXJuIF8oRixQKSxGLnByb3RvdHlwZS5faW5pdE5h''@;'; put 'put ''bWVkPWZ1bmN0aW9uKHope1AuY2FsbCh0aGlzLHopfSxuZXcgRih0aGlzKX0sQi5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVk''@;'; put 'put ''KEkuZGVjb2RlcnNbUF0pKSx0aGlzLmRlY29kZXJzW1BdfSxCLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKEYpLmRlY29kZShQLE8pfSxCLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5lbmNvZGVy''@;'; put 'put ''cy5oYXNPd25Qcm9wZXJ0eShQPVB8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNbUF09dGhpcy5fY3JlYXRlTmFtZWQoSS5lbmNvZGVyc1tQXSkpLHRoaXMuZW5jb2RlcnNbUF19LEIucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoRikuZW5j''@;'; put 'put ''b2RlKFAsTyl9fSw5NzI5MDoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSgxNTA2NikuUmVwb3J0ZXIsZz15KDgzODM4KS5CdWZmZXI7ZnVuY3Rpb24gQihQLEYpe18uY2FsbCh0aGlzLEYpLGcuaXNCdWZmZXIoUCk/KHRoaXMuYmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9''@;'; put 'put ''UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3fHwoTz1uZXcgdyhPLEYpKSx0aGlzLmxl''@;'; put 'put ''bmd0aCs9Ty5sZW5ndGgsT30sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYmUDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1nLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighZy5pc0J1ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPVAubGVuZ3RofX1JKEIsXyksWC50PUIs''@;'; put 'put ''Qi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sQi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihGKXt2YXIgTz1uZXcgQih0aGlzLmJhc2UpO3JldHVybiBPLm9mZnNldD1G''@;'; put 'put ''Lm9mZnNldCxPLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVyKSxPfSxCLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEIucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sQi5wcm90b3R5cGUuc2tpcD1mdW5jdGlv''@;'; put 'put ''bihGLE8pe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKE98fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgej1uZXcgQih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhp''@;'; put 'put ''cy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxCLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sWC5kPXcsdy5wcm90b3R5cGUuam9pbj1mdW5j''@;'; put 'put ''dGlvbihGLE8pe3JldHVybiBGfHwoRj1uZXcgZyh0aGlzLmxlbmd0aCkpLE98fChPPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHope3ouam9pbihGLE8pLE8rPXoubGVuZ3RofSk6KCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgdGhpcy52YWx1ZT9GW09dPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yud3JpdGUodGhpcy52YWx1ZSxPKTpnLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRixPKSxPKz10aGlzLmxlbmd0aCkpLEZ9fSwxNTA2NjoodWUsWCx5KT0+''@;'; put 'put ''e3ZhciBJPVg7SS5SZXBvcnRlcj15KDg1Njk3KS5hLEkuRGVjb2RlckJ1ZmZlcj15KDk3MjkwKS50LEkuRW5jb2RlckJ1ZmZlcj15KDk3MjkwKS5kLEkuTm9kZT15KDM0MzIwKX0sMzQzMjA6KHVlLFgseSk9Pnt2YXIgST15KDE1MDY2KS5SZXBvcnRlcixfPXkoMTUwNjYpLkVuY29kZXJCdWZm''@;'; put 'put ''ZXIsZz15KDE1MDY2KS5EZWNvZGVyQnVmZmVyLEI9eSgzOTIxMCksdz1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwi''@;'; put 'put ''Z2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLFA9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJk''@;'; put 'put ''ZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdCh3KTtmdW5jdGlvbiBPKE4sTCl7dmFyIEs9e307dGhpcy5fYmFzZVN0YXRlPUssSy5lbmM9TixLLnBhcmVudD1MfHxudWxsLEsuY2hpbGRyZW49bnVsbCxLLnRhZz1udWxsLEsuYXJncz1udWxsLEsucmV2ZXJzZUFyZ3M9bnVs''@;'; put 'put ''bCxLLmNob2ljZT1udWxsLEsub3B0aW9uYWw9ITEsSy5hbnk9ITEsSy5vYmo9ITEsSy51c2U9bnVsbCxLLnVzZURlY29kZXI9bnVsbCxLLmtleT1udWxsLEsuZGVmYXVsdD1udWxsLEsuZXhwbGljaXQ9bnVsbCxLLmltcGxpY2l0PW51bGwsSy5jb250YWlucz1udWxsLEsucGFyZW50fHwoSy5j''@;'; put 'put ''aGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXVlLmV4cG9ydHM9Tzt2YXIgej1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIs''@;'; put 'put ''ImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO08ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9e307ei5mb3JFYWNoKGZ1bmN0aW9uKFcpe0tbV109TFtXXX0pO3ZhciBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEsucGFyZW50KTtyZXR1''@;'; put 'put ''cm4gVS5fYmFzZVN0YXRlPUssVX0sTy5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGU7UC5mb3JFYWNoKGZ1bmN0aW9uKEspe3RoaXNbS109ZnVuY3Rpb24oKXt2YXIgVz1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gTC5jaGlsZHJlbi5w''@;'; put 'put ''dXNoKFcpLFdbS10uYXBwbHkoVyxhcmd1bWVudHMpfX0sdGhpcyl9LE8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtCKG51bGw9PT1LLnBhcmVudCksTC5jYWxsKHRoaXMpLEsuY2hpbGRyZW49Sy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oVSl7''@;'; put 'put ''cmV0dXJuIFUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxCLmVxdWFsKEsuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxPLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1M''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO0w9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIShXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKEIobnVsbD09PUsuY2hpbGRy''@;'; put 'put ''ZW4pLEsuY2hpbGRyZW49VSxVLmZvckVhY2goZnVuY3Rpb24oVyl7Vy5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PUwubGVuZ3RoJiYoQihudWxsPT09Sy5hcmdzKSxLLmFyZ3M9TCxLLnJldmVyc2VBcmdzPUwubWFwKGZ1bmN0aW9uKFcpe2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''V3x8Vy5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gVzt2YXIgWT17fTtyZXR1cm4gT2JqZWN0LmtleXMoVykuZm9yRWFjaChmdW5jdGlvbihxKXtxPT0oMHxxKSYmKHF8PTApLFlbV1txXV09cX0pLFl9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIi''@;'; put 'put ''LCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5j''@;'; put 'put ''b2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKE4rIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLHcuZm9yRWFjaChmdW5jdGlvbihO''@;'; put 'put ''KXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEIobnVsbD09PUsudGFnKSxLLnRhZz1OLHRoaXMuX3VzZUFyZ3MoVSksdGhpc319KSxPLnByb3RvdHlwZS51c2U9ZnVu''@;'; put 'put ''Y3Rpb24oTCl7QihMKTt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLnVzZT1MLHRoaXN9LE8ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5kZWY9ZnVu''@;'; put 'put ''Y3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmRlZmF1bHQpLEsuZGVmYXVsdD1MLEsub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4''@;'; put 'put ''cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5leHBsaWNpdD1MLHRoaXN9LE8ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuaW1wbGljaXQ9TCx0aGlz''@;'; put 'put ''fSxPLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsSz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBMLm9iaj0hMCwwIT09Sy5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoSyksdGhpc30sTy5wcm90b3R5cGUua2V5PWZ1bmN0''@;'; put 'put ''aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5rZXkpLEsua2V5PUwsdGhpc30sTy5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTy5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEwpe3ZhciBL''@;'; put 'put ''PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5jaG9pY2UpLEsuY2hvaWNlPUwsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhMKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIExbVV19KSksdGhpc30sTy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5f''@;'; put 'put ''YmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy5jb250YWlucz1MLHRoaXN9LE8ucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVUucGFyZW50KXJldHVybiBMLndyYXBSZXN1bHQoVS5jaGlsZHJlblswXS5fZGVj''@;'; put 'put ''b2RlKEwsSykpO3ZhciBuZSxXPVUuZGVmYXVsdCxZPSEwLHE9bnVsbDtpZihudWxsIT09VS5rZXkmJihxPUwuZW50ZXJLZXkoVS5rZXkpKSxVLm9wdGlvbmFsKXt2YXIgZWU9bnVsbDtpZihudWxsIT09VS5leHBsaWNpdD9lZT1VLmV4cGxpY2l0Om51bGwhPT1VLmltcGxpY2l0P2VlPVUuaW1w''@;'; put 'put ''bGljaXQ6bnVsbCE9PVUudGFnJiYoZWU9VS50YWcpLG51bGwhPT1lZXx8VS5hbnkpe2lmKFk9dGhpcy5fcGVla1RhZyhMLGVlLFUuYW55KSxMLmlzRXJyb3IoWSkpcmV0dXJuIFl9ZWxzZXt2YXIgSj1MLnNhdmUoKTt0cnl7bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50''@;'; put 'put ''YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSxZPSEwfWNhdGNoe1k9ITF9TC5yZXN0b3JlKEopfX1pZihVLm9iaiYmWSYmKG5lPUwuZW50ZXJPYmplY3QoKSksWSl7aWYobnVsbCE9PVUuZXhwbGljaXQpe3ZhciBpZT10aGlzLl9kZWNvZGVUYWcoTCxVLmV4cGxpY2l0KTtpZihMLmlz''@;'; put 'put ''RXJyb3IoaWUpKXJldHVybiBpZTtMPWllfXZhciBsZT1MLm9mZnNldDtpZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2ljZSl7VS5hbnkmJihKPUwuc2F2ZSgpKTt2YXIgbWU9dGhpcy5fZGVjb2RlVGFnKEwsbnVsbCE9PVUuaW1wbGljaXQ/VS5pbXBsaWNpdDpVLnRhZyxVLmFueSk7aWYo''@;'; put 'put ''TC5pc0Vycm9yKG1lKSlyZXR1cm4gbWU7VS5hbnk/Vz1MLnJhdyhKKTpMPW1lfWlmKEsmJksudHJhY2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxsZSxMLmxlbmd0aCwidGFnZ2VkIiksSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLEwub2Zmc2V0''@;'; put 'put ''LEwubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChXPW51bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSykpLEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZighVS5hbnkmJm51bGw9PT1VLmNob2ljZSYmbnVsbCE9PVUuY2hp''@;'; put 'put ''bGRyZW4mJlUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihTZSl7U2UuX2RlY29kZShMLEspfSksVS5jb250YWlucyYmKCJvY3RzdHIiPT09VS50YWd8fCJiaXRzdHIiPT09VS50YWcpKXt2YXIgX2U9bmV3IGcoVyk7Vz10aGlzLl9nZXRVc2UoVS5jb250YWlucyxMLl9yZXBvcnRlclN0YXRl''@;'; put 'put ''Lm9iaikuX2RlY29kZShfZSxLKX19cmV0dXJuIFUub2JqJiZZJiYoVz1MLmxlYXZlT2JqZWN0KG5lKSksbnVsbD09PVUua2V5fHxudWxsPT09VyYmITAhPT1ZP251bGwhPT1xJiZMLmV4aXRLZXkocSk6TC5sZWF2ZUtleShxLFUua2V5LFcpLFd9LE8ucHJvdG90eXBlLl9kZWNvZGVHZW5lcmlj''@;'; put 'put ''PWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1MfHwic2V0Ij09PUw/bnVsbDoic2Vxb2YiPT09THx8InNldG9mIj09PUw/dGhpcy5fZGVjb2RlTGlzdChLLEwsVy5hcmdzWzBdLFUpOi9zdHIkLy50ZXN0KEwpP3RoaXMuX2RlY29kZVN0cihLLEws''@;'; put 'put ''VSk6Im9iamlkIj09PUwmJlcuYXJncz90aGlzLl9kZWNvZGVPYmppZChLLFcuYXJnc1swXSxXLmFyZ3NbMV0sVSk6Im9iamlkIj09PUw/dGhpcy5fZGVjb2RlT2JqaWQoSyxudWxsLG51bGwsVSk6ImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TD90aGlzLl9kZWNvZGVUaW1lKEssTCxVKToi''@;'; put 'put ''bnVsbF8iPT09TD90aGlzLl9kZWNvZGVOdWxsKEssVSk6ImJvb2wiPT09TD90aGlzLl9kZWNvZGVCb29sKEssVSk6Im9iakRlc2MiPT09TD90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJpbnQiPT09THx8ImVudW0iPT09TD90aGlzLl9kZWNvZGVJbnQoSyxXLmFyZ3MmJlcuYXJnc1swXSxVKTpu''@;'; put 'put ''dWxsIT09Vy51c2U/dGhpcy5fZ2V0VXNlKFcudXNlLEsuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKEssVSk6Sy5lcnJvcigidW5rbm93biB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFUudXNlRGVj''@;'; put 'put ''b2Rlcj10aGlzLl91c2UoTCxLKSxCKG51bGw9PT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0IT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihVLnVzZURl''@;'; put 'put ''Y29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCksVS51c2VEZWNvZGVyfSxPLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9bnVsbCxZPSExO3JldHVy''@;'; put 'put ''biBPYmplY3Qua2V5cyhVLmNob2ljZSkuc29tZShmdW5jdGlvbihxKXt2YXIgZWU9TC5zYXZlKCksSj1VLmNob2ljZVtxXTt0cnl7dmFyIG5lPUouX2RlY29kZShMLEspO2lmKEwuaXNFcnJvcihuZSkpcmV0dXJuITE7Vz17dHlwZTpxLHZhbHVlOm5lfSxZPSEwfWNhdGNoe3JldHVybiBMLnJl''@;'; put 'put ''c3RvcmUoZWUpLCExfXJldHVybiEwfSx0aGlzKSxZP1c6TC5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LE8ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgXyhMLHRoaXMucmVwb3J0ZXIpfSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0''@;'; put 'put ''aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdHx8Vy5kZWZhdWx0IT09TCl7dmFyIFk9dGhpcy5fZW5jb2RlVmFsdWUoTCxLLFUpO2lmKHZvaWQgMCE9PVkmJiF0aGlzLl9za2lwRGVmYXVsdChZLEssVSkpcmV0dXJuIFl9fSxPLnByb3RvdHlwZS5f''@;'; put 'put ''ZW5jb2RlVmFsdWU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5wYXJlbnQpcmV0dXJuIFcuY2hpbGRyZW5bMF0uX2VuY29kZShMLEt8fG5ldyBJKTt2YXIgSj1udWxsO2lmKHRoaXMucmVwb3J0ZXI9SyxXLm9wdGlvbmFsJiZ2b2lkIDA9PT1MKXtp''@;'; put 'put ''ZihudWxsPT09Vy5kZWZhdWx0KXJldHVybjtMPVcuZGVmYXVsdH12YXIgWT1udWxsLHE9ITE7aWYoVy5hbnkpSj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2Vsc2UgaWYoVy5jaG9pY2UpSj10aGlzLl9lbmNvZGVDaG9pY2UoTCxLKTtlbHNlIGlmKFcuY29udGFpbnMpWT10aGlzLl9n''@;'; put 'put ''ZXRVc2UoVy5jb250YWlucyxVKS5fZW5jb2RlKEwsSykscT0hMDtlbHNlIGlmKFcuY2hpbGRyZW4pWT1XLmNoaWxkcmVuLm1hcChmdW5jdGlvbihsZSl7aWYoIm51bGxfIj09PWxlLl9iYXNlU3RhdGUudGFnKXJldHVybiBsZS5fZW5jb2RlKG51bGwsSyxMKTtpZihudWxsPT09bGUuX2Jhc2VT''@;'; put 'put ''dGF0ZS5rZXkpcmV0dXJuIEsuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIG1lPUsuZW50ZXJLZXkobGUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgTClyZXR1cm4gSy5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0''@;'; put 'put ''Iik7dmFyIF9lPWxlLl9lbmNvZGUoTFtsZS5fYmFzZVN0YXRlLmtleV0sSyxMKTtyZXR1cm4gSy5sZWF2ZUtleShtZSksX2V9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihsZSl7cmV0dXJuIGxlfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVcudGFn''@;'; put 'put ''fHwic2V0b2YiPT09Vy50YWcpe2lmKCFXLmFyZ3N8fDEhPT1XLmFyZ3MubGVuZ3RoKXJldHVybiBLLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVy50YWcpO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiBLLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5''@;'; put 'put ''Iik7dmFyIGVlPXRoaXMuY2xvbmUoKTtlZS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLEwpLl9lbmNvZGUobGUsSyl9LGVlKSl9''@;'; put 'put ''ZWxzZSBudWxsIT09Vy51c2U/Sj10aGlzLl9nZXRVc2UoVy51c2UsVSkuX2VuY29kZShMLEspOihZPXRoaXMuX2VuY29kZVByaW1pdGl2ZShXLnRhZyxMKSxxPSEwKTtpZighVy5hbnkmJm51bGw9PT1XLmNob2ljZSl7dmFyIG5lPW51bGwhPT1XLmltcGxpY2l0P1cuaW1wbGljaXQ6Vy50YWcs''@;'; put 'put ''aWU9bnVsbD09PVcuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1uZT9udWxsPT09Vy51c2UmJksuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1XLnVzZSYmKEo9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG5lLHEsaWUsWSkp''@;'; put 'put ''fXJldHVybiBudWxsIT09Vy5leHBsaWNpdCYmKEo9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFcuZXhwbGljaXQsITEsImNvbnRleHQiLEopKSxKfSxPLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9VS5jaG9pY2VbTC50eXBlXTty''@;'; put 'put ''ZXR1cm4gV3x8QighMSxMLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhVLmNob2ljZSkpKSxXLl9lbmNvZGUoTC52YWx1ZSxLKX0sTy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtp''@;'; put 'put ''Zigvc3RyJC8udGVzdChMKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEssTCk7aWYoIm9iamlkIj09PUwmJlUuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxVLnJldmVyc2VBcmdzWzBdLFUuYXJnc1sxXSk7aWYoIm9iamlkIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEss''@;'; put 'put ''bnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEssTCk7aWYoIm51bGxfIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUx8fCJlbnVtIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUludChLLFUu''@;'; put 'put ''YXJncyYmVS5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChLKTtpZigib2JqRGVzYyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2lz''@;'; put 'put ''TnVtc3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoTCl9LE8ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoTCl9fSw4NTY5NzoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMp''@;'; put 'put ''O2Z1bmN0aW9uIF8oQil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOkJ8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gZyhCLHcpe3RoaXMucGF0aD1CLHRoaXMucmV0aHJvdyh3KX1YLmE9XyxfLnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKHcpe3JldHVy''@;'; put 'put ''biB3IGluc3RhbmNlb2YgZ30sXy5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp3Lm9iaixwYXRoTGVuOncucGF0aC5sZW5ndGh9fSxfLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVy''@;'; put 'put ''U3RhdGU7UC5vYmo9dy5vYmosUC5wYXRoPVAucGF0aC5zbGljZSgwLHcucGF0aExlbil9LF8ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh3KX0sXy5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbih3KXt2YXIgUD10''@;'; put 'put ''aGlzLl9yZXBvcnRlclN0YXRlO1AucGF0aD1QLnBhdGguc2xpY2UoMCx3LTEpfSxfLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih3LFAsRil7dmFyIE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodyksbnVsbCE9PU8ub2JqJiYoTy5vYmpbUF09Ril9LF8ucHJvdG90eXBl''@;'; put 'put ''LnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sXy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlLFA9dy5vYmo7cmV0dXJuIHcub2JqPXt9LFB9LF8ucHJvdG90eXBlLmxlYXZl''@;'; put 'put ''T2JqZWN0PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGUsRj1QLm9iajtyZXR1cm4gUC5vYmo9dyxGfSxfLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih3KXt2YXIgUCxGPXRoaXMuX3JlcG9ydGVyU3RhdGUsTz13IGluc3RhbmNlb2YgZztpZihQPU8/dzpuZXcgZyhGLnBh''@;'; put 'put ''dGgubWFwKGZ1bmN0aW9uKHope3JldHVybiJbIitKU09OLnN0cmluZ2lmeSh6KSsiXSJ9KS5qb2luKCIiKSx3Lm1lc3NhZ2V8fHcsdy5zdGFjayksIUYub3B0aW9ucy5wYXJ0aWFsKXRocm93IFA7cmV0dXJuIE98fEYuZXJyb3JzLnB1c2goUCksUH0sXy5wcm90b3R5cGUud3JhcFJlc3VsdD1m''@;'; put 'put ''dW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBQLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih3KT9udWxsOncsZXJyb3JzOlAuZXJyb3JzfTp3fSxJKGcsRXJyb3IpLGcucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odyl7aWYodGhpcy5t''@;'; put 'put ''ZXNzYWdlPXcrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZyksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKFApe3RoaXMuc3RhY2s9''@;'; put 'put ''UC5zdGFja31yZXR1cm4gdGhpc319LDM2MjgzOih1ZSxYLHkpPT57dmFyIEk9eSg0Nzc0MCk7WC50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFgudGFnQ2xhc3NCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZ0NsYXNzKSxYLnRh''@;'; put 'put ''Zz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwx''@;'; put 'put ''Nzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwz''@;'; put 'put ''MDoiYm1wc3RyIn0sWC50YWdCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZyl9LDQ3NzQwOih1ZSxYLHkpPT57dmFyIEk9WDtJLl9yZXZlcnNlPWZ1bmN0aW9uKGcpe3ZhciBCPXt9O3JldHVybiBPYmplY3Qua2V5cyhnKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksQltnW3dd''@;'; put 'put ''XT13fSksQn0sSS5kZXI9eSgzNjI4Myl9LDU1OTQxOih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDQ5NjA5KSxnPV8uYmFzZSxCPV8uYmlnbnVtLHc9Xy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1O''@;'; put 'put ''LHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe2cuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPU4ucmVhZFVJbnQ4KEwpO2lmKE4uaXNFcnJvcihLKSlyZXR1cm4gSzt2YXIgVT13LnRhZ0NsYXNzW0s+PjZd''@;'; put 'put ''LFc9ISgzMiZLKTtpZigzMSZ+SylLJj0zMTtlbHNle3ZhciBZPUs7Zm9yKEs9MDshKDEyOCZ+WSk7KXtpZihZPU4ucmVhZFVJbnQ4KEwpLE4uaXNFcnJvcihZKSlyZXR1cm4gWTtLPDw9NyxLfD0xMjcmWX19cmV0dXJue2NsczpVLHByaW1pdGl2ZTpXLHRhZzpLLHRhZ1N0cjp3LnRhZ1tLXX19''@;'; put 'put ''ZnVuY3Rpb24geihOLEwsSyl7dmFyIFU9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFUpKXJldHVybiBVO2lmKCFMJiYxMjg9PT1VKXJldHVybiBudWxsO2lmKCEoMTI4JlUpKXJldHVybiBVO3ZhciBXPTEyNyZVO2lmKFc+NClyZXR1cm4gTi5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0''@;'; put 'put ''b28gbG9uZyIpO1U9MDtmb3IodmFyIFk9MDtZPFc7WSsrKXtVPDw9ODt2YXIgcT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IocSkpcmV0dXJuIHE7VXw9cX1yZXR1cm4gVX11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEwgaW5zdGFuY2Vv''@;'; put 'put ''ZiBnLkRlY29kZXJCdWZmZXJ8fChMPW5ldyBnLkRlY29kZXJCdWZmZXIoTCxLKSksdGhpcy50cmVlLl9kZWNvZGUoTCxLKX0sSShGLGcuTm9kZSksRi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oTCxLLFUpe2lmKEwuaXNFbXB0eSgpKXJldHVybiExO3ZhciBXPUwuc2F2ZSgpLFk9TyhM''@;'; put 'put ''LCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0srJyInKTtyZXR1cm4gTC5pc0Vycm9yKFkpP1k6KEwucmVzdG9yZShXKSxZLnRhZz09PUt8fFkudGFnU3RyPT09S3x8WS50YWdTdHIrIm9mIj09PUt8fFUpfSxGLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz1PKEws''@;'; put 'put ''J0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK0srJyInKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7dmFyIFk9eihMLFcucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFVJiZXLnRhZyE9PUsmJlcudGFn''@;'; put 'put ''U3RyIT09SyYmVy50YWdTdHIrIm9mIiE9PUspcmV0dXJuIEwuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0srJyInKTtpZihXLnByaW1pdGl2ZXx8bnVsbCE9PVkpcmV0dXJuIEwuc2tpcChZLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpO3ZhciBxPUwuc2F2ZSgp''@;'; put 'put ''LGVlPXRoaXMuX3NraXBVbnRpbEVuZChMLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBMLmlzRXJyb3IoZWUpP2VlOihZPUwub2Zmc2V0LXEub2Zmc2V0LEwucmVzdG9yZShxKSxMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNo''@;'; put 'put ''IGJvZHkgb2Y6ICInK0srJyInKSl9LEYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oTCxLKXtmb3IoOzspe3ZhciBVPU8oTCxLKTtpZihMLmlzRXJyb3IoVSkpcmV0dXJuIFU7dmFyIFksVz16KEwsVS5wcmltaXRpdmUsSyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKFk9''@;'; put 'put ''VS5wcmltaXRpdmV8fG51bGwhPT1XP0wuc2tpcChXKTp0aGlzLl9za2lwVW50aWxFbmQoTCxLKSxMLmlzRXJyb3IoWSkpcmV0dXJuIFk7aWYoImVuZCI9PT1VLnRhZ1N0cilicmVha319LEYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKEwsSyxVLFcpe2Zvcih2YXIgWT1bXTshTC5p''@;'; put 'put ''c0VtcHR5KCk7KXt2YXIgcT10aGlzLl9wZWVrVGFnKEwsImVuZCIpO2lmKEwuaXNFcnJvcihxKSlyZXR1cm4gcTt2YXIgZWU9VS5kZWNvZGUoTCwiZGVyIixXKTtpZihMLmlzRXJyb3IoZWUpJiZxKWJyZWFrO1kucHVzaChlZSl9cmV0dXJuIFl9LEYucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVu''@;'; put 'put ''Y3Rpb24oTCxLKXtpZigiYml0c3RyIj09PUspe3ZhciBVPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihVKT9VOnt1bnVzZWQ6VSxkYXRhOkwucmF3KCl9fWlmKCJibXBzdHIiPT09Syl7dmFyIFc9TC5yYXcoKTtpZihXLmxlbmd0aCUyPT0xKXJldHVybiBMLmVycm9yKCJEZWNvZGlu''@;'; put 'put ''ZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgWT0iIixxPTA7cTxXLmxlbmd0aC8yO3ErKylZKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcucmVhZFVJbnQxNkJFKDIqcSkpO3JldHVybiBZfWlmKCJudW1zdHIiPT09Syl7dmFyIGVlPUwucmF3KCkudG9T''@;'; put 'put ''dHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGVlKT9lZTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUspcmV0dXJuIEwucmF3KCk7aWYoIm9iakRlc2MiPT09SylyZXR1cm4g''@;'; put 'put ''TC5yYXcoKTtpZigicHJpbnRzdHIiPT09Syl7dmFyIEo9TC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihKKT9KOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0''@;'; put 'put ''ciQvLnRlc3QoSyk/TC5yYXcoKS50b1N0cmluZygpOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2Zvcih2YXIgVyxZPVtdLHE9MDshTC5pc0VtcHR5KCk7KXt2YXIg''@;'; put 'put ''ZWU9TC5yZWFkVUludDgoKTtxPDw9NyxxfD0xMjcmZWUsMTI4JmVlfHwoWS5wdXNoKHEpLHE9MCl9aWYoMTI4JmVlJiZZLnB1c2gocSksVz1VP1k6W1lbMF0vNDB8MCxZWzBdJTQwXS5jb25jYXQoWS5zbGljZSgxKSksSyl7dmFyIGllPUtbVy5qb2luKCIgIildO3ZvaWQgMD09PWllJiYoaWU9''@;'; put 'put ''S1tXLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWllJiYoVz1pZSl9cmV0dXJuIFd9LEYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFyIFU9TC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PUspdmFyIFc9MHxVLnNsaWNlKDAsNCksWT0wfFUuc2xpY2UoNCw2KSxx''@;'; put 'put ''PTB8VS5zbGljZSg2LDgpLGVlPTB8VS5zbGljZSg4LDEwKSxKPTB8VS5zbGljZSgxMCwxMiksbmU9MHxVLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUspcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtXPTB8VS5zbGlj''@;'; put 'put ''ZSgwLDIpLFk9MHxVLnNsaWNlKDIsNCkscT0wfFUuc2xpY2UoNCw2KSxlZT0wfFUuc2xpY2UoNiw4KSxKPTB8VS5zbGljZSg4LDEwKSxuZT0wfFUuc2xpY2UoMTAsMTIpLFc9Vzw3MD8yZTMrVzoxOTAwK1d9cmV0dXJuIERhdGUuVVRDKFcsWS0xLHEsZWUsSixuZSwwKX0sRi5wcm90b3R5cGUu''@;'; put 'put ''X2RlY29kZU51bGw9ZnVuY3Rpb24oTCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEwpe3ZhciBLPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihLKT9LOjAhPT1LfSxGLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKEwsSyl7dmFyIFU9''@;'; put 'put ''TC5yYXcoKSxXPW5ldyBCKFUpO3JldHVybiBLJiYoVz1LW1cudG9TdHJpbmcoMTApXXx8VyksV30sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKEspKSxMLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sOTE1NTg6KHVlLFgs''@;'; put 'put ''eSk9Pnt2YXIgST1YO0kuZGVyPXkoNTU5NDEpLEkucGVtPXkoNTkzMTYpfSw1OTMxNjoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg4MzgzOCkuQnVmZmVyLGc9eSg1NTk0MSk7ZnVuY3Rpb24gQih3KXtnLmNhbGwodGhpcyx3KSx0aGlzLmVuYz0icGVtIn1JKEIsZyksdWUuZXhwb3J0''@;'; put 'put ''cz1CLEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYpe2Zvcih2YXIgTz1QLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksej1GLmxhYmVsLnRvVXBwZXJDYXNlKCksTj0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sTD0tMSxLPS0xLFU9MDtVPE8ubGVuZ3RoO1Ur''@;'; put 'put ''Kyl7dmFyIFc9T1tVXS5tYXRjaChOKTtpZihudWxsIT09VyYmV1syXT09PXope2lmKC0xIT09TCl7aWYoIkVORCIhPT1XWzFdKWJyZWFrO0s9VTticmVha31pZigiQkVHSU4iIT09V1sxXSlicmVhaztMPVV9fWlmKC0xPT09THx8LTE9PT1LKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24g''@;'; put 'put ''bm90IGZvdW5kIGZvcjogIit6KTt2YXIgWT1PLnNsaWNlKEwrMSxLKS5qb2luKCIiKTtZLnJlcGxhY2UoL1teYS16MC05XCtcLz1dKy9naSwiIik7dmFyIHE9bmV3IF8oWSwiYmFzZTY0Iik7cmV0dXJuIGcucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMscSxGKX19LDcyMTkzOih1ZSxYLHkp''@;'; put 'put ''PT57dmFyIEk9eSg3MTk5MyksXz15KDgzODM4KS5CdWZmZXIsZz15KDQ5NjA5KSxCPWcuYmFzZSx3PWcuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0''@;'; put 'put ''KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtCLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIE8oTil7cmV0dXJuIE48MTA/IjAiK046Tn11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKEwsSykuam9pbigp''@;'; put 'put ''fSxJKEYsQi5Ob2RlKSxGLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKEwsSyxVLFcpe3ZhciBKLFk9ZnVuY3Rpb24geihOLEwsSyxVKXt2YXIgVztpZigic2Vxb2YiPT09Tj9OPSJzZXEiOiJzZXRvZiI9PT1OJiYoTj0ic2V0Iiksdy50YWdCeU5hbWUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoTikpVz13LnRhZ0J5TmFtZVtOXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgTnx8KDB8TikhPT1OKXJldHVybiBVLmVycm9yKCJVbmtub3duIHRhZzogIitOKTtXPU59cmV0dXJuIFc+PTMxP1UuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihMfHwo''@;'; put 'put ''V3w9MzIpLFd8PXcudGFnQ2xhc3NCeU5hbWVbS3x8InVuaXZlcnNhbCJdPDw2KX0oTCxLLFUsdGhpcy5yZXBvcnRlcik7aWYoVy5sZW5ndGg8MTI4KXJldHVybihKPW5ldyBfKDIpKVswXT1ZLEpbMV09Vy5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbSixXXSk7Zm9yKHZhciBx''@;'; put 'put ''PTEsZWU9Vy5sZW5ndGg7ZWU+PTI1NjtlZT4+PTgpcSsrOyhKPW5ldyBfKDIrcSkpWzBdPVksSlsxXT0xMjh8cSxlZT0xK3E7Zm9yKHZhciBuZT1XLmxlbmd0aDtuZT4wO2VlLS0sbmU+Pj04KUpbZWVdPTI1NSZuZTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbSixXXSl9LEYu''@;'; put 'put ''cHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oTCxLKXtpZigiYml0c3RyIj09PUspcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8TC51bnVzZWQsTC5kYXRhXSk7aWYoImJtcHN0ciI9PT1LKXtmb3IodmFyIFU9bmV3IF8oMipMLmxlbmd0aCksVz0wO1c8TC5sZW5ndGg7''@;'; put 'put ''VysrKVUud3JpdGVVSW50MTZCRShMLmNoYXJDb2RlQXQoVyksMipXKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihVKX1yZXR1cm4ibnVtc3RyIj09PUs/dGhpcy5faXNOdW1zdHIoTCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJF''@;'; put 'put ''bmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1LP3RoaXMuX2lzUHJpbnRzdHIoTCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJp''@;'; put 'put ''bmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xv''@;'; put 'put ''biwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KEspfHwib2JqRGVzYyI9PT1LP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrSysiIHVuc3VwcG9ydGVkIil9LEYucHJvdG90''@;'; put 'put ''eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihMLEssVSl7aWYoInN0cmluZyI9PXR5cGVvZiBMKXtpZighSylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFLLmhhc093blByb3BlcnR5KEwpKXJldHVy''@;'; put 'put ''biB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO0w9S1tMXS5zcGxpdCgvW1xzXC5dKy9nKTtmb3IodmFyIFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShMKSlmb3IoTD1MLnNsaWNlKCksVz0wO1c8TC5s''@;'; put 'put ''ZW5ndGg7VysrKUxbV118PTA7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShMKSk7aWYoIVUpe2lmKExbMV0+PTQwKXJldHVybiB0aGlz''@;'; put 'put ''LnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtMLnNwbGljZSgwLDIsNDAqTFswXStMWzFdKX12YXIgWT0wO2ZvcihXPTA7VzxMLmxlbmd0aDtXKyspe3ZhciBxPUxbV107Zm9yKFkrKztxPj0xMjg7cT4+PTcpWSsrfXZhciBlZT1uZXcgXyhZKSxKPWVlLmxl''@;'; put 'put ''bmd0aC0xO2ZvcihXPUwubGVuZ3RoLTE7Vz49MDtXLS0pZm9yKGVlW0otLV09MTI3JihxPUxbV10pOyhxPj49Nyk+MDspZWVbSi0tXT0xMjh8MTI3JnE7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZWUpfSxGLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihMLEspe3Zh''@;'; put 'put ''ciBVLFc9bmV3IERhdGUoTCk7cmV0dXJuImdlbnRpbWUiPT09Sz9VPVtPKFcuZ2V0RnVsbFllYXIoKSksTyhXLmdldFVUQ01vbnRoKCkrMSksTyhXLmdldFVUQ0RhdGUoKSksTyhXLmdldFVUQ0hvdXJzKCkpLE8oVy5nZXRVVENNaW51dGVzKCkpLE8oVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0u''@;'; put 'put ''am9pbigiIik6InV0Y3RpbWUiPT09Sz9VPVtPKFcuZ2V0RnVsbFllYXIoKSUxMDApLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5nZXRVVENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRo''@;'; put 'put ''aXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoVSwib2N0c3RyIil9LEYucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKEwsSyl7aWYoInN0cmluZyI9PXR5cGVvZiBMKXtpZighSylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFLLmhhc093blByb3BlcnR5KEwpKXJl''@;'; put 'put ''dHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShMKSk7TD1LW0xdfWlmKCJudW1iZXIiIT10eXBlb2YgTCYmIV8uaXNCdWZmZXIoTCkpe3ZhciBVPUwudG9BcnJheSgpOyFMLnNpZ24mJjEyOCZVWzBdJiZVLnVuc2hp''@;'; put 'put ''ZnQoMCksTD1uZXcgXyhVKX1pZihfLmlzQnVmZmVyKEwpKXt2YXIgVz1MLmxlbmd0aDswPT09TC5sZW5ndGgmJlcrKzt2YXIgcT1uZXcgXyhXKTtyZXR1cm4gTC5jb3B5KHEpLDA9PT1MLmxlbmd0aCYmKHFbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihxKX1pZihMPDEyOClyZXR1''@;'; put 'put ''cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTtpZihMPDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxMXSk7Vz0xO2Zvcih2YXIgWT1MO1k+PTI1NjtZPj49OClXKys7Zm9yKFk9KHE9bmV3IEFycmF5KFcpKS5sZW5ndGgtMTtZPj0wO1ktLSlxW1ldPTI1NSZM''@;'; put 'put ''LEw+Pj04O3JldHVybiAxMjgmcVswXSYmcS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IF8ocSkpfSxGLnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMPzI1NTowKX0sRi5wcm90b3R5cGUu''@;'; put 'put ''X3VzZT1mdW5jdGlvbihMLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKEspKSxMLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVlfSxGLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24oTCxLLFUpe3ZhciBZLFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLmRlZmF1''@;'; put 'put ''bHQpcmV0dXJuITE7dmFyIHE9TC5qb2luKCk7aWYodm9pZCAwPT09Vy5kZWZhdWx0QnVmZmVyJiYoVy5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKFcuZGVmYXVsdCxLLFUpLmpvaW4oKSkscS5sZW5ndGghPT1XLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihZPTA7''@;'; put 'put ''WTxxLmxlbmd0aDtZKyspaWYocVtZXSE9PVcuZGVmYXVsdEJ1ZmZlcltZXSlyZXR1cm4hMTtyZXR1cm4hMH19LDIyNzE0Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmRlcj15KDcyMTkzKSxJLnBlbT15KDI0ODE2KX0sMjQ4MTY6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNzIxOTMpO2Z1''@;'; put 'put ''bmN0aW9uIGcoQil7Xy5jYWxsKHRoaXMsQiksdGhpcy5lbmM9InBlbSJ9SShnLF8pLHVlLmV4cG9ydHM9ZyxnLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odyxQKXtmb3IodmFyIE89Xy5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyx3KS50b1N0cmluZygiYmFzZTY0Iiksej1bIi0tLS0t''@;'; put 'put ''QkVHSU4gIitQLmxhYmVsKyItLS0tLSJdLE49MDtOPE8ubGVuZ3RoO04rPTY0KXoucHVzaChPLnNsaWNlKE4sTis2NCkpO3JldHVybiB6LnB1c2goIi0tLS0tRU5EICIrUC5sYWJlbCsiLS0tLS0iKSx6LmpvaW4oIlxuIil9fSw5Njg2NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8p''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYu''@;'; put 'put ''cHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0x''@;'; put 'put ''MCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5''@;'; put 'put ''KDc4OTgyKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihW''@;'; put 'put ''LGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcu''@;'; put 'put ''bWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2lu''@;'; put 'put ''aXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJz''@;'; put 'put ''ZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8o''@;'; put 'put ''dGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxw''@;'; put 'put ''LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9''@;'; put 'put ''MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgs''@;'; put 'put ''aj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vs''@;'; put 'put ''c2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRz''@;'; put 'put ''W0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1i''@;'; put 'put ''KSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmlt''@;'; put 'put ''dWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/''@;'; put 'put ''dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxl''@;'; put 'put ''bmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7''@;'; put 'put ''dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjog''@;'; put 'put ''IjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3''@;'; put 'put ''MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYw''@;'; put 'put ''NDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jk''@;'; put 'put ''c1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9''@;'; put 'put ''MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8''@;'; put 'put ''fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09''@;'; put 'put ''MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZw''@;'; put 'put ''Pj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhd''@;'; put 'put ''K3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjIm''@;'; put 'put ''JmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBD''@;'; put 'put ''PXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQp''@;'; put 'put ''LEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigy''@;'; put 'put ''NTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxi''@;'; put 'put ''Pj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcm''@;'; put 'put ''Ynx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlz''@;'; put 'put ''Lmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31y''@;'; put 'put ''ZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEp''@;'; put 'put ''OnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zv''@;'; put 'put ''cig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVv''@;'; put 'put ''cj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8''@;'; put 'put ''Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlz''@;'; put 'put ''Lml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53''@;'; put 'put ''b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''ZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4''@;'; put 'put ''PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53''@;'; put 'put ''b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxi''@;'; put 'put ''PXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5n''@;'; put 'put ''dGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRz''@;'; put 'put ''W0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14''@;'; put 'put ''LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5u''@;'; put 'put ''ZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7''@;'; put 'put ''dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRz''@;'; put 'put ''W2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9y''@;'; put 'put ''KDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5''@;'; put 'put ''MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4s''@;'; put 'put ''TXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJp''@;'; put 'put ''Pj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEz''@;'; put 'put ''LGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11''@;'; put 'put ''bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8''@;'; put 'put ''MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2''@;'; put 'put ''cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZl''@;'; put 'put ''LFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkr''@;'; put 'put ''TWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStN''@;'; put 'put ''YXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2Us''@;'; put 'put ''UnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAs''@;'; put 'put ''QT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStN''@;'; put 'put ''YXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQs''@;'; put 'put ''UnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZl''@;'; put 'put ''LFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkr''@;'; put 'put ''TWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9l''@;'; put 'put ''LHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhO''@;'; put 'put ''aT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRl''@;'; put 'put ''LFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8''@;'; put 'put ''MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''WHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''emUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUs''@;'; put 'put ''enQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxl''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''a2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUs''@;'; put 'put ''WHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8''@;'; put 'put ''MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhM''@;'; put 'put ''YT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxl''@;'; put 'put ''bikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxI''@;'; put 'put ''WzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAo''@;'; put 'put ''VixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhp''@;'; put 'put ''cyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZh''@;'; put 'put ''ciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgr''@;'; put 'put ''KHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1m''@;'; put 'put ''dW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJl''@;'; put 'put ''dHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50''@;'; put 'put ''cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFy''@;'; put 'put ''IHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3Qs''@;'; put 'put ''Q1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8''@;'; put 'put ''PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5u''@;'; put 'put ''b3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxK''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZU''@;'; put 'put ''KSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10''@;'; put 'put ''aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndv''@;'; put 'put ''cmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0''@;'; put 'put ''ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAu''@;'; put 'put ''bmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxi''@;'; put 'put ''KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRv''@;'; put 'put ''KHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7''@;'; put 'put ''Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5l''@;'; put 'put ''dyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBl''@;'; put 'put ''Lml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3Ro''@;'; put 'put ''aXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtU''@;'; put 'put ''KyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2''@;'; put 'put ''YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7''@;'; put 'put ''bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhp''@;'; put 'put ''cy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSww''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3Rv''@;'; put 'put ''dHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMu''@;'; put 'put ''d29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9p''@;'; put 'put ''YWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0r''@;'; put 'put ''KztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2Ug''@;'; put 'put ''Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRu''@;'; put 'put ''KHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtq''@;'; put 'put ''PSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4g''@;'; put 'put ''dGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERp''@;'; put 'put ''dj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQu''@;'; put 'put ''bGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0''@;'; put 'put ''aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hs''@;'; put 'put ''bnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAh''@;'; put 'put ''PT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVn''@;'; put 'put ''YXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8o''@;'; put 'put ''SD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5l''@;'; put 'put ''Z2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09''@;'; put 'put ''PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9''@;'; put 'put ''LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAo''@;'; put 'put ''Qyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0''@;'; put 'put ''KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1pl''@;'; put 'put ''cm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hy''@;'; put 'put ''bigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgp''@;'; put 'put ''KSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEgu''@;'; put 'put ''aWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEp''@;'; put 'put ''PjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZt''@;'; put 'put ''PDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5j''@;'; put 'put ''bXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5l''@;'; put 'put ''Z2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIg''@;'; put 'put ''SD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24o''@;'; put 'put ''cCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIg''@;'; put 'put ''aj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYw''@;'; put 'put ''PT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7''@;'; put 'put ''YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxl''@;'; put 'put ''bmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVh''@;'; put 'put ''a319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHAp''@;'; put 'put ''Pj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5l''@;'; put 'put ''cT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxn''@;'; put 'put ''KDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJz''@;'; put 'put ''IGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFs''@;'; put 'put ''cmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJl''@;'; put 'put ''ZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMs''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJl''@;'; put 'put ''ZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks''@;'; put 'put ''dGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQu''@;'; put 'put ''cG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlz''@;'; put 'put ''Lm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5j''@;'; put 'put ''YWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmlt''@;'; put 'put ''ZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCks''@;'; put 'put ''dGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJp''@;'; put 'put ''bnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5l''@;'; put 'put ''dyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlz''@;'; put 'put ''Lm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihw''@;'; put 'put ''LGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9''@;'; put 'put ''MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIg''@;'; put 'put ''aj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNb''@;'; put 'put ''cC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAu''@;'; put 'put ''bGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2Is''@;'; put 'put ''VD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQi''@;'; put 'put ''PT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09''@;'; put 'put ''PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6''@;'; put 'put ''cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5t''@;'; put 'put ''KT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5w''@;'; put 'put ''cm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFy''@;'; put 'put ''IGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNo''@;'; put 'put ''cm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7''@;'; put 'put ''KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtn''@;'; put 'put ''KFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlz''@;'; put 'put ''Lm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigx''@;'; put 'put ''KSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3Io''@;'; put 'put ''MD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09''@;'; put 'put ''YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5j''@;'; put 'put ''dGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0s''@;'; put 'put ''amUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNb''@;'; put 'put ''MF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQu''@;'; put 'put ''aXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwo''@;'; put 'put ''YiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQu''@;'; put 'put ''aWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw1NTE4ODoodWUsWCk9Pnsh''@;'; put 'put ''ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Zm9yKHZhciB5PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixJPW5ldyBVaW50OEFycmF5KDI1NiksXz0wO188NjQ7XysrKUlbeS5jaGFyQ29kZUF0KF8pXT1fO1gubD1mdW5j''@;'; put 'put ''dGlvbihnKXt2YXIgdyxCPW5ldyBVaW50OEFycmF5KGcpLFA9Qi5sZW5ndGgsRj0iIjtmb3Iodz0wO3c8UDt3Kz0zKUYrPXlbQlt3XT4+Ml0sRis9eVsoMyZCW3ddKTw8NHxCW3crMV0+PjRdLEYrPXlbKDE1JkJbdysxXSk8PDJ8Qlt3KzJdPj42XSxGKz15WzYzJkJbdysyXV07cmV0dXJuIFAl''@;'; put 'put ''Mz09Mj9GPUYuc3Vic3RyaW5nKDAsRi5sZW5ndGgtMSkrIj0iOlAlMz09MSYmKEY9Ri5zdWJzdHJpbmcoMCxGLmxlbmd0aC0yKSsiPT0iKSxGfSxYLkQ9ZnVuY3Rpb24oZyl7dmFyIFAsTyx6LE4sTCxCPS43NSpnLmxlbmd0aCx3PWcubGVuZ3RoLEY9MDsiPSI9PT1nW2cubGVuZ3RoLTFdJiYo''@;'; put 'put ''Qi0tLCI9Ij09PWdbZy5sZW5ndGgtMl0mJkItLSk7dmFyIEs9bmV3IEFycmF5QnVmZmVyKEIpLFU9bmV3IFVpbnQ4QXJyYXkoSyk7Zm9yKFA9MDtQPHc7UCs9NClPPUlbZy5jaGFyQ29kZUF0KFApXSx6PUlbZy5jaGFyQ29kZUF0KFArMSldLE49SVtnLmNoYXJDb2RlQXQoUCsyKV0sTD1JW2cu''@;'; put 'put ''Y2hhckNvZGVBdChQKzMpXSxVW0YrK109Tzw8Mnx6Pj40LFVbRisrXT0oMTUmeik8PDR8Tj4+MixVW0YrK109KDMmTik8PDZ8NjMmTDtyZXR1cm4gS319KCl9LDEzOTgxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRihVKXt2YXIgVz1QKFUpLHE9V1sxXTty''@;'; put 'put ''ZXR1cm4gMyooV1swXStxKS80LXF9LFgudG9CeXRlQXJyYXk9ZnVuY3Rpb24geihVKXt2YXIgVyxsZSxZPVAoVSkscT1ZWzBdLGVlPVlbMV0sSj1uZXcgXyhmdW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gMyooVytZKS80LVl9KDAscSxlZSkpLG5lPTAsaWU9ZWU+MD9xLTQ6cTtmb3IobGU9MDts''@;'; put 'put ''ZTxpZTtsZSs9NClXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDE4fElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8MTJ8SVtVLmNoYXJDb2RlQXQobGUrMildPDw2fElbVS5jaGFyQ29kZUF0KGxlKzMpXSxKW25lKytdPVc+PjE2JjI1NSxKW25lKytdPVc+PjgmMjU1LEpbbmUrK109MjU1Jlc7cmV0dXJu''@;'; put 'put ''IDI9PT1lZSYmKFc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MnxJW1UuY2hhckNvZGVBdChsZSsxKV0+PjQsSltuZSsrXT0yNTUmVyksMT09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwxMHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDR8SVtVLmNoYXJDb2RlQXQobGUrMildPj4yLEpbbmUr''@;'; put 'put ''K109Vz4+OCYyNTUsSltuZSsrXT0yNTUmVyksSn0sWC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBXLFk9VS5sZW5ndGgscT1ZJTMsZWU9W10sSj0xNjM4MyxuZT0wLGllPVktcTtuZTxpZTtuZSs9SillZS5wdXNoKEwoVSxuZSxuZStKPmllP2llOm5lK0opKTtyZXR1cm4g''@;'; put 'put ''MT09PXE/ZWUucHVzaCh5WyhXPVVbWS0xXSk+PjJdK3lbVzw8NCY2M10rIj09Iik6Mj09PXEmJmVlLnB1c2goeVsoVz0oVVtZLTJdPDw4KStVW1ktMV0pPj4xMF0reVtXPj40JjYzXSt5W1c8PDImNjNdKyI9IiksZWUuam9pbigiIil9O2Zvcih2YXIgeT1bXSxJPVtdLF89dHlwZW9mIFVpbnQ4''@;'; put 'put ''QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksZz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsQj0wO0I8NjQ7KytCKXlbQl09Z1tCXSxJW2cuY2hhckNvZGVBdChCKV09QjtmdW5jdGlvbiBQKFUpe3ZhciBXPVUubGVu''@;'; put 'put ''Z3RoO2lmKFclND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBZPVUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09WSYmKFk9VyksW1ksWT09PVc/MDo0LVklNF19ZnVuY3Rpb24gTihVKXtyZXR1cm4geVtVPj4x''@;'; put 'put ''OCY2M10reVtVPj4xMiY2M10reVtVPj42JjYzXSt5WzYzJlVdfWZ1bmN0aW9uIEwoVSxXLFkpe2Zvcih2YXIgZWU9W10sSj1XO0o8WTtKKz0zKWVlLnB1c2goTigoVVtKXTw8MTYmMTY3MTE2ODApKyhVW0orMV08PDgmNjUyODApKygyNTUmVVtKKzJdKSkpO3JldHVybiBlZS5qb2luKCIiKX1J''@;'; put 'put ''WzQ1XT02MixJWzk1XT02M30sOTE3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoeCxDKXtpZigheCl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKHgsQyl7eC5zdXBlcl89Qzt2YXIgVD1mdW5j''@;'; put 'put ''dGlvbigpe307VC5wcm90b3R5cGU9Qy5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IFQseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5jdGlvbiB3KHgsQyxUKXtpZih3LmlzQk4oeCkpcmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRo''@;'; put 'put ''aXMucmVkPW51bGwsbnVsbCE9PXgmJigoImxlIj09PUN8fCJiZSI9PT1DKSYmKFQ9QyxDPTEwKSx0aGlzLl9pbml0KHh8fDAsQ3x8MTAsVHx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9m''@;'; put 'put ''IHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNDc3OTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVBdChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8''@;'; put 'put ''PTEwMj9ULTg3OnZvaWQgZyghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5jdGlvbiBPKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5n''@;'; put 'put ''dGgsVCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxFPWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcrMTA6YWUsZyhhZT49MCYmRTxILCJJbnZhbGlkIGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jk''@;'; put 'put ''cyx4Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMmJiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUm''@;'; put 'put ''JkFycmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''QylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLGcoVD09PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFj''@;'; put 'put ''ZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5faW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEpOkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3''@;'; put 'put ''MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEm''@;'; put 'put ''NjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEw''@;'; put 'put ''ODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhp''@;'; put 'put ''cy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4''@;'; put 'put ''NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1tt''@;'; put 'put ''Kz0xXXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxl''@;'; put 'put ''bmd0aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILHRlPTAsc2U9SDtzZTxhZTtzZSs9ail0ZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpO2lmKDAhPT1BKXt2YXIgd2U9''@;'; put 'put ''MTtmb3IodGU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKXdlKj1UO3RoaXMuaW11bG4od2UpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9t''@;'; put 'put ''b3ZlPWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2ln''@;'; put 'put ''bj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51''@;'; put 'put ''dGlsLmluc3BlY3QuY3VzdG9tIildPUx9Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1MfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1MO2Z1bmN0aW9uIEwoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIw''@;'; put 'put ''MCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFc9WzAsMCwzMzU1NDQzMiw0''@;'; put 'put ''MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYz''@;'; put 'put ''Miw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54''@;'; put 'put ''Lm5lZ2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgdGU9MTt0ZTxIO3RlKyspe2Zvcih2YXIg''@;'; put 'put ''c2U9YWU+Pj4yNix3ZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbih0ZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLHRlLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgud29yZHNbdGUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4''@;'; put 'put ''ODYzJm07VC53b3Jkc1t0ZV09MHx3ZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jkc1t0ZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtI''@;'; put 'put ''PSIiO2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtaiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5n''@;'; put 'put ''dGgtMT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIHRlPVVbQ10sc2U9''@;'; put 'put ''V1tDXTtIPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5lZ2F0aXZlPTA7IXdlLmlzWmVybygpOyl7dmFyIFVlPXdlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPSh3ZT13ZS5pZGl2bihzZSkpLmlzWmVybygpP1VlK0g6S1t0ZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJv''@;'; put 'put ''KCkmJihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNb''@;'; put 'put ''MF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25s''@;'; put 'put ''eSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b0FycmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3Ro''@;'; put 'put ''KCksRT1IfHxNYXRoLm1heCgxLGopO2coajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6''@;'; put 'put ''bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhp''@;'; put 'put ''cy53b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgmJihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0''@;'; put 'put ''aClmb3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1''@;'; put 'put ''JkEsSD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRC''@;'; put 'put ''aXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyksVD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+''@;'; put 'put ''PTIpLEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4gODE5MSZUfHwoSCs9MTMsVD4+Pj0xMyksMTI3JlR8fChIKz03LFQ+Pj49NyksMTUmVHx8KEgrPTQsVD4+Pj00KSwzJlR8fChIKz0yLFQ+Pj49Miks''@;'; put 'put ''MSZUfHxIKyssSH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlz''@;'; put 'put ''WmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tUXSk7aWYoQys9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5j''@;'; put 'put ''ZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0''@;'; put 'put ''aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWco''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9y''@;'; put 'put ''KHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10aGlzLndvcmRzW1RdfEMud29yZHNbVF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0s''@;'; put 'put ''dy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoQyk6Qy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCku''@;'; put 'put ''aXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oQyl7dmFyIFQ7VD10aGlzLmxlbmd0aD5DLmxlbmd0aD9DOnRoaXM7Zm9yKHZhciBIPTA7SDxULmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJkMud29yZHNbSF07cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxIO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhUPXRoaXMsSD1DKTooVD1DLEg9dGhpcyk7Zm9yKHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PVQpZm9yKDtqPFQubGVu''@;'; put 'put ''Z3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKEMpOkMuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4''@;'; put 'put ''b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9MHxNYXRoLmNlaWwoQy8yNiksSD1DJTI2O3RoaXMuX2V4cGFuZChUKSxIPjAmJlQtLTtmb3IodmFyIGo9MDtqPFQ7aisrKXRo''@;'; put 'put ''aXMud29yZHNbal09NjcxMDg4NjMmfnRoaXMud29yZHNbal07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbal09fnRoaXMud29yZHNbal0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihD''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgSD1DLzI2fDAsaj1DJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPVQ/dGhpcy53b3Jkc1tIXXwxPDxqOnRoaXMud29yZHNbSF0mfigxPDxqKSx0''@;'; put 'put ''aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMpe3ZhciBULEgsajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYo''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiBDLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KEg9dGhpcyxqPUMpOihIPUMsaj10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxqLmxl''@;'; put 'put ''bmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxILndvcmRzW21dKSsoMHxqLndvcmRzW21dKStFKSxFPVQ+Pj4yNjtmb3IoOzAhPT1FJiZtPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPUgubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7bTxILmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT1ILndvcmRzW21dO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7''@;'; put 'put ''dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLFQ9dGhpcy5zdWIoQyksQy5uZWdhdGl2ZV49MSxUKTowPT09Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChDKTpDLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5uZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5u''@;'; put 'put ''ZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGosRSxIPXRoaXMuY21wKEMpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KGo9dGhpcyxFPUMpOihqPUMsRT10aGlzKTtmb3IodmFyIG09MCxBPTA7QTxFLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKS0oMHxFLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZU''@;'; put 'put ''O2Zvcig7MCE9PW0mJkE8ai5sZW5ndGg7QSsrKW09KFQ9KDB8ai53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtpZigwPT09bSYmQTxqLmxlbmd0aCYmaiE9PXRoaXMpZm9yKDtBPGoubGVuZ3RoO0ErKyl0aGlzLndvcmRzW0FdPWoud29yZHNbQV07cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLGohPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKEMpfTt2YXIgSj1mdW5jdGlvbihDLFQsSCl7dmFyIGFlLHRl''@;'; put 'put ''LHNlLGo9Qy53b3JkcyxFPVQud29yZHMsbT1ILndvcmRzLEE9MCx3ZT0wfGpbMF0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8alsxXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxqWzJdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfGpbM10sT2U9ODE5MSZGZSxJZT1GZT4+PjEz''@;'; put 'put ''LFZlPTB8als0XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxqWzVdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfGpbNl0seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8als3XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxqWzhdLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0w''@;'; put 'put ''fGpbOV0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8RVswXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxFWzFdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfEVbMl0sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8RVszXSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxFWzRd''@;'; put 'put ''LFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfEVbNV0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8RVs2XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxFWzddLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfEVbOF0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzLHVhPTB8RVs5XSxFaT04''@;'; put 'put ''MTkxJnVhLHZyPXVhPj4+MTM7SC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFduPShBKyhhZT1NYXRoLmltdWwoVWUsUXQpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoVWUsc24pKStNYXRoLmltdWwoSmUsUXQpfDApKTw8MTMpfDA7QT0oKHNl''@;'; put 'put ''PU1hdGguaW11bChKZSxzbikpKyh0ZT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHhlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKHhlLHNuKSkrTWF0aC5pbXVsKHZlLFF0KXwwLHNlPU1hdGguaW11bCh2ZSxzbik7dmFyICRpPShBKyhhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwoVWUsaG4pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZnQpfDApKyh0ZT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHpl''@;'; put 'put ''LFF0KSx0ZT0odGU9TWF0aC5pbXVsKHplLHNuKSkrTWF0aC5pbXVsKERlLFF0KXwwLHNlPU1hdGguaW11bChEZSxzbiksYWU9YWUrTWF0aC5pbXVsKHhlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxzZT1zZStNYXRoLmltdWwodmUsZnQp''@;'; put 'put ''fDA7dmFyIGVpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV3QpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsQXQpfDApKyh0ZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxl''@;'; put 'put ''aSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE9lLFF0KSx0ZT0odGU9TWF0aC5pbXVsKE9lLHNuKSkrTWF0aC5pbXVsKEllLFF0KXwwLHNlPU1hdGguaW11bChJZSxzbiksYWU9YWUrTWF0aC5pbXVsKHplLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxo''@;'; put 'put ''bil8MCxzZT1zZStNYXRoLmltdWwoRGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxzZT1zZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIFFyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsc3QpfDAp''@;'; put 'put ''fDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsVXQpfDApKyh0ZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGtlLFF0KSx0ZT0odGU9''@;'; put 'put ''TWF0aC5pbXVsKGtlLHNuKSkrTWF0aC5pbXVsKEFlLFF0KXwwLHNlPU1hdGguaW11bChBZSxzbiksYWU9YWUrTWF0aC5pbXVsKE9lLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxzZT1zZStNYXRoLmltdWwoSWUsZnQpfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKHplLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxz''@;'; put 'put ''ZT1zZStNYXRoLmltdWwodmUsVXQpfDA7dmFyIFZpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV2UpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsVHQpfDApKyh0ZT4+''@;'; put 'put ''PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKG50LFF0KSx0ZT0odGU9TWF0aC5pbXVsKG50LHNuKSkrTWF0aC5pbXVsKFFlLFF0KXwwLHNlPU1hdGguaW11bChRZSxzbiksYWU9YWUrTWF0aC5pbXVsKGtlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2Us''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChBZSxobil8MCxzZT1zZStNYXRoLmltdWwoQWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVs''@;'; put 'put ''KHplLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxzZT1zZStN''@;'; put 'put ''YXRoLmltdWwodmUsVHQpfDA7dmFyIE5pPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUseHQpfDApKyh0ZT4+PjEzKXww''@;'; put 'put ''KSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKHl0LHNuKSkrTWF0aC5pbXVsKE10LFF0KXwwLHNlPU1hdGguaW11bChNdCxzbiksYWU9YWUrTWF0aC5pbXVsKG50LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZnQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxobil8MCxzZT1zZStNYXRoLmltdWwoUWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLHN0''@;'; put 'put ''KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxzZT1zZStNYXRoLmlt''@;'; put 'put ''dWwoRGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxzZT1zZStNYXRoLmltdWwodmUseHQpfDA7dmFyIERhPShBKyhhZT1hZStNYXRoLmltdWwoVWUscm4pfDApfDApKygoODE5MSYodGU9KHRl''@;'; put 'put ''PXRlK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsenQpfDApKyh0ZT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKGl0LHNuKSkr''@;'; put 'put ''TWF0aC5pbXVsKCRlLFF0KXwwLHNlPU1hdGguaW11bCgkZSxzbiksYWU9YWUrTWF0aC5pbXVsKHl0LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxzZT1zZStNYXRoLmltdWwoTXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFd0KXwwLHRl''@;'; put 'put ''PSh0ZT10ZStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoQWUs''@;'; put 'put ''VXQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoSWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUseHQpfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxodCl8MCxzZT1zZStNYXRoLmltdWwoRGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxzZT1zZStNYXRoLmltdWwodmUsenQpfDA7dmFyIExyPShBKyhhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''VWUsY24pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZm4pfDApKyh0ZT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEhlLFF0''@;'; put 'put ''KSx0ZT0odGU9TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLHNlPU1hdGguaW11bCh1dCxzbiksYWU9YWUrTWF0aC5pbXVsKGl0LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxzZT1zZStNYXRoLmltdWwoJGUsZnQpfDAs''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKHl0LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoQWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLGh0KXwwLHRlPSh0ZT10''@;'; put 'put ''ZStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxzZT1zZStNYXRoLmltdWwoSWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxzZT1zZStNYXRoLmltdWwoRGUsenQpfDAs''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKHhlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxzZT1zZStNYXRoLmltdWwodmUsZm4pfDA7dmFyIFdpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11''@;'; put 'put ''bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZW4pfDApKyh0ZT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHNuKSkrTWF0aC5pbXVsKFB0''@;'; put 'put ''LFF0KXwwLHNlPU1hdGguaW11bChQdCxzbiksYWU9YWUrTWF0aC5pbXVsKEhlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZnQpfDApK01hdGguaW11bCh1dCxobil8MCxzZT1zZStNYXRoLmltdWwodXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFd0KXwwLHRlPSh0ZT10ZStNYXRo''@;'; put 'put ''LmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsVXQpfDAsYWU9YWUr''@;'; put 'put ''TWF0aC5pbXVsKG50LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoUWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8''@;'; put 'put ''MCxzZT1zZStNYXRoLmltdWwoQWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxzZT1zZStNYXRoLmltdWwoSWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLGNuKXwwLHRlPSh0ZT10ZStNYXRo''@;'; put 'put ''LmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxzZT1zZStNYXRoLmltdWwoRGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCxzZT1zZStNYXRoLmltdWwodmUsZW4pfDA7dmFyIHBh''@;'; put 'put ''PShBKyhhZT1hZStNYXRoLmltdWwoVWUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx2cil8MCkrTWF0aC5pbXVsKEplLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsdnIpfDApKyh0ZT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4''@;'; put 'put ''NjMsYWU9TWF0aC5pbXVsKFJ0LGhuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGZ0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHNlPU1hdGguaW11bChQdCxmdCksYWU9YWUrTWF0aC5pbXVsKEhlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsQXQpfDApK01hdGguaW11bCh1dCxXdCl8MCxzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwodXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwo''@;'; put 'put ''eXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxzZT1zZStNYXRoLmltdWwoTXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxzZT1zZStNYXRoLmltdWwoUWUseHQpfDAsYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKGtlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxzZT1zZStNYXRoLmltdWwoQWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwoSWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHplLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsZW4pfDA7dmFyIFFuPShBKyhhZT1hZStNYXRoLmltdWwoeGUsRWkpfDApfDApKygoODE5''@;'; put 'put ''MSYodGU9KHRlPXRlK01hdGguaW11bCh4ZSx2cil8MCkrTWF0aC5pbXVsKHZlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwodmUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFd0KSx0ZT0odGU9TWF0aC5pbXVs''@;'; put 'put ''KFJ0LEF0KSkrTWF0aC5pbXVsKFB0LFd0KXwwLHNlPU1hdGguaW11bChQdCxBdCksYWU9YWUrTWF0aC5pbXVsKEhlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsVXQpfDApK01hdGguaW11bCh1dCxzdCl8MCxzZT1zZStNYXRoLmltdWwodXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0''@;'; put 'put ''LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoJGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxzZT1zZStNYXRo''@;'; put 'put ''LmltdWwoTXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxzZT1zZStNYXRoLmltdWwoUWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZm4p''@;'; put 'put ''fDApK01hdGguaW11bChBZSxjbil8MCxzZT1zZStNYXRoLmltdWwoQWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGxhPShBKyhhZT1hZStN''@;'; put 'put ''YXRoLmltdWwoemUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh6ZSx2cil8MCkrTWF0aC5pbXVsKERlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoRGUsdnIpfDApKyh0ZT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsYWU9TWF0aC5p''@;'; put 'put ''bXVsKFJ0LHN0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFV0KSkrTWF0aC5pbXVsKFB0LHN0KXwwLHNlPU1hdGguaW11bChQdCxVdCksYWU9YWUrTWF0aC5pbXVsKEhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsVHQpfDApK01hdGguaW11bCh1dCxXZSl8MCxzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''dXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxzZT1zZStNYXRoLmltdWwoJGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsenQpfDApK01h''@;'; put 'put ''dGguaW11bChNdCxybil8MCxzZT1zZStNYXRoLmltdWwoTXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxzZT1zZStNYXRoLmltdWwoUWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFh0KXww''@;'; put 'put ''LHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsZW4pfDA7dmFyIHlhPShBKyhhZT1hZStNYXRoLmltdWwoT2UsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChPZSx2cil8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFdlKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFR0KSkrTWF0aC5pbXVsKFB0LFdlKXwwLHNlPU1hdGguaW11bChQdCxU''@;'; put 'put ''dCksYWU9YWUrTWF0aC5pbXVsKEhlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUseHQpfDApK01hdGguaW11bCh1dCxodCl8MCxzZT1zZStNYXRoLmltdWwodXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11''@;'; put 'put ''bCgkZSxybil8MCxzZT1zZStNYXRoLmltdWwoJGUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxzZT1zZStNYXRoLmltdWwoTXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKG50LFh0KXwwLHRlPSh0''@;'; put 'put ''ZT10ZStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsZW4pfDA7dmFyIExhPShBKyhhZT1hZStNYXRoLmltdWwoa2UsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChrZSx2cil8MCkrTWF0aC5pbXVsKEFlLEVpKXww''@;'; put 'put ''KSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoQWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHh0KSkrTWF0aC5pbXVsKFB0LGh0KXwwLHNlPU1hdGguaW11bChQdCx4dCksYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKEhlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsenQpfDApK01hdGguaW11bCh1dCxybil8MCxzZT1zZStNYXRoLmltdWwodXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxj''@;'; put 'put ''bil8MCxzZT1zZStNYXRoLmltdWwoJGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsZW4pfDA7dmFyIEZhPShBKyhhZT1hZStNYXRoLmltdWwobnQsRWkpfDAp''@;'; put 'put ''fDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChudCx2cil8MCkrTWF0aC5pbXVsKFFlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoUWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHJuKSx0ZT0odGU9''@;'; put 'put ''TWF0aC5pbXVsKFJ0LHp0KSkrTWF0aC5pbXVsKFB0LHJuKXwwLHNlPU1hdGguaW11bChQdCx6dCksYWU9YWUrTWF0aC5pbXVsKEhlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZm4pfDApK01hdGguaW11bCh1dCxjbil8MCxzZT1zZStNYXRoLmltdWwodXQsZm4pfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKGl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsZW4pfDA7dmFyIHRpPShBKyhhZT1hZStNYXRoLmltdWwoeXQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh5dCx2cil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKE10LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoTXQsdnIpfDApKyh0ZT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGNuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGZuKSkrTWF0aC5pbXVsKFB0LGNuKXwwLHNl''@;'; put 'put ''PU1hdGguaW11bChQdCxmbiksYWU9YWUrTWF0aC5pbXVsKEhlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZW4pfDApK01hdGguaW11bCh1dCxYdCl8MCxzZT1zZStNYXRoLmltdWwodXQsZW4pfDA7dmFyIGdvPShBKyhhZT1hZStNYXRoLmltdWwoaXQsRWkpfDApfDApKygoODE5MSYo''@;'; put 'put ''dGU9KHRlPXRlK01hdGguaW11bChpdCx2cil8MCkrTWF0aC5pbXVsKCRlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoJGUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0''@;'; put 'put ''LGVuKSkrTWF0aC5pbXVsKFB0LFh0KXwwLHNlPU1hdGguaW11bChQdCxlbik7dmFyIE5zPShBKyhhZT1hZStNYXRoLmltdWwoSGUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChIZSx2cil8MCkrTWF0aC5pbXVsKHV0LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRo''@;'; put 'put ''LmltdWwodXQsdnIpfDApKyh0ZT4+PjEzKXwwKSsoTnM+Pj4yNil8MCxOcyY9NjcxMDg4NjM7dmFyIGJsPShBKyhhZT1NYXRoLmltdWwoUnQsRWkpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoUnQsdnIpKStNYXRoLmltdWwoUHQsRWkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChzZT1N''@;'; put 'put ''YXRoLmltdWwoUHQsdnIpKSsodGU+Pj4xMyl8MCkrKGJsPj4+MjYpfDAsYmwmPTY3MTA4ODYzLG1bMF09V24sbVsxXT0kaSxtWzJdPWVpLG1bM109UXIsbVs0XT1WaSxtWzVdPU5pLG1bNl09RGEsbVs3XT1McixtWzhdPVdpLG1bOV09cGEsbVsxMF09UW4sbVsxMV09bGEsbVsxMl09eWEsbVsx''@;'; put 'put ''M109TGEsbVsxNF09RmEsbVsxNV09dGksbVsxNl09Z28sbVsxN109TnMsbVsxOF09YmwsMCE9PUEmJihtWzE5XT1BLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIG5lKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3Io''@;'; put 'put ''dmFyIEg9MCxqPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBtPWo7aj0wO2Zvcih2YXIgQT02NzEwODg2MyZILGFlPU1hdGgubWluKEUsQy5sZW5ndGgtMSksdGU9TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO3RlPD1hZTt0ZSsrKXt2YXIgSmU9KDB8eC53b3Jkc1tFLXRlXSkqKDB8Qy53''@;'; put 'put ''b3Jkc1t0ZV0pLG90PTY3MTA4ODYzJkplO0E9NjcxMDg4NjMmKG90PW90K0F8MCksais9KG09KG09bSsoSmUvNjcxMDg4NjR8MCl8MCkrKG90Pj4+MjYpfDApPj4+MjYsbSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLEg9bSxtPWp9cmV0dXJuIDAhPT1IP1Qud29yZHNbRV09SDpULmxlbmd0aC0t''@;'; put 'put ''LFQuX3N0cmlwKCl9ZnVuY3Rpb24gaWUoeCxDLFQpe3JldHVybiBuZSh4LEMsVCl9ZnVuY3Rpb24gbGUoeCxDKXt0aGlzLng9eCx0aGlzLnk9Q31NYXRoLmltdWx8fChKPWVlKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihDLFQpe3ZhciBqPXRoaXMubGVuZ3RoK0MubGVuZ3RoO3JldHVy''@;'; put 'put ''biAxMD09PXRoaXMubGVuZ3RoJiYxMD09PUMubGVuZ3RoP0oodGhpcyxDLFQpOmo8NjM/ZWUodGhpcyxDLFQpOmo8MTAyND9uZSh0aGlzLEMsVCk6aWUodGhpcyxDLFQpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9dy5wcm90b3R5''@;'; put 'put ''cGUuX2NvdW50Qml0cyhDKS0xLGo9MDtqPEM7aisrKVRbal09dGhpcy5yZXZCaW4oaixILEMpO3JldHVybiBUfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKEMsVCxIKXtpZigwPT09Q3x8Qz09PUgtMSlyZXR1cm4gQztmb3IodmFyIGo9MCxFPTA7RTxUO0UrKylqfD0oMSZDKTw8VC1F''@;'; put 'put ''LTEsQz4+PTE7cmV0dXJuIGp9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKEMsVCxILGosRSxtKXtmb3IodmFyIEE9MDtBPG07QSsrKWpbQV09VFtDW0FdXSxFW0FdPUhbQ1tBXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oQyxULEgsaixFLG0pe3RoaXMucGVybXV0''@;'; put 'put ''ZShtLEMsVCxILGosRSk7Zm9yKHZhciBBPTE7QTxFO0E8PD0xKWZvcih2YXIgYWU9QTw8MSx0ZT1NYXRoLmNvcygyKk1hdGguUEkvYWUpLHNlPU1hdGguc2luKDIqTWF0aC5QSS9hZSksd2U9MDt3ZTxFO3dlKz1hZSlmb3IodmFyIFVlPXRlLEplPXNlLG90PTA7b3Q8QTtvdCsrKXt2YXIgeGU9''@;'; put 'put ''SFt3ZStvdF0sdmU9alt3ZStvdF0sWGU9SFt3ZStvdCtBXSx6ZT1qW3dlK290K0FdLERlPVVlKlhlLUplKnplO3plPVVlKnplK0plKlhlLEhbd2Urb3RdPXhlKyhYZT1EZSksalt3ZStvdF09dmUremUsSFt3ZStvdCtBXT14ZS1YZSxqW3dlK290K0FdPXZlLXplLG90IT09YWUmJihEZT10ZSpV''@;'; put 'put ''ZS1zZSpKZSxKZT10ZSpKZStzZSpVZSxVZT1EZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oQyxUKXt2YXIgSD0xfE1hdGgubWF4KFQsQyksaj0xJkgsRT0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKUUrKztyZXR1cm4gMTw8RSsxK2p9LGxlLnByb3RvdHlwZS5jb25qdWdh''@;'; put 'put ''dGU9ZnVuY3Rpb24oQyxULEgpe2lmKCEoSDw9MSkpZm9yKHZhciBqPTA7ajxILzI7aisrKXt2YXIgRT1DW2pdO0Nbal09Q1tILWotMV0sQ1tILWotMV09RSxFPVRbal0sVFtqXT0tVFtILWotMV0sVFtILWotMV09LUV9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKEMsVCl7''@;'; put 'put ''Zm9yKHZhciBIPTAsaj0wO2o8VC8yO2orKyl7dmFyIEU9ODE5MipNYXRoLnJvdW5kKENbMipqKzFdL1QpK01hdGgucm91bmQoQ1syKmpdL1QpK0g7Q1tqXT02NzEwODg2MyZFLEg9RTw2NzEwODg2ND8wOkUvNjcxMDg4NjR8MH1yZXR1cm4gQ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVu''@;'; put 'put ''Y3Rpb24oQyxULEgsail7Zm9yKHZhciBFPTAsbT0wO208VDttKyspSFsyKm1dPTgxOTEmKEUrPTB8Q1ttXSksSFsyKm0rMV09ODE5MSYoRT4+Pj0xMyksRT4+Pj0xMztmb3IobT0yKlQ7bTxqOysrbSlIW21dPTA7ZygwPT09RSksZyghKC04MTkyJkUpKX0sbGUucHJvdG90eXBlLnN0dWI9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPTA7SDxDO0grKylUW0hdPTA7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKEMsVCxIKXt2YXIgaj0yKnRoaXMuZ3Vlc3NMZW4xM2IoQy5sZW5ndGgsVC5sZW5ndGgpLEU9dGhpcy5tYWtlUkJUKGopLG09dGhpcy5z''@;'; put 'put ''dHViKGopLEE9bmV3IEFycmF5KGopLGFlPW5ldyBBcnJheShqKSx0ZT1uZXcgQXJyYXkoaiksc2U9bmV3IEFycmF5KGopLHdlPW5ldyBBcnJheShqKSxVZT1uZXcgQXJyYXkoaiksSmU9SC53b3JkcztKZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxBLGopLHRo''@;'; put 'put ''aXMuY29udmVydDEzYihULndvcmRzLFQubGVuZ3RoLHNlLGopLHRoaXMudHJhbnNmb3JtKEEsbSxhZSx0ZSxqLEUpLHRoaXMudHJhbnNmb3JtKHNlLG0sd2UsVWUsaixFKTtmb3IodmFyIG90PTA7b3Q8ajtvdCsrKXt2YXIgeGU9YWVbb3RdKndlW290XS10ZVtvdF0qVWVbb3RdO3RlW290XT1h''@;'; put 'put ''ZVtvdF0qVWVbb3RdK3RlW290XSp3ZVtvdF0sYWVbb3RdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShhZSx0ZSxqKSx0aGlzLnRyYW5zZm9ybShhZSx0ZSxKZSxtLGosRSksdGhpcy5jb25qdWdhdGUoSmUsbSxqKSx0aGlzLm5vcm1hbGl6ZTEzYihKZSxqKSxILm5lZ2F0aXZlPUMubmVnYXRp''@;'; put 'put ''dmVeVC5uZWdhdGl2ZSxILmxlbmd0aD1DLmxlbmd0aCtULmxlbmd0aCxILl9zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSx0aGlzLm11bFRvKEMsVCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSxpZSh0aGlzLEMsVCl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhDLHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpO2Zvcih2YXIgSD0wLGo9MDtqPHRoaXMubGVuZ3RoO2orKyl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkqQyxtPSg2NzEwODg2MyZF''@;'; put 'put ''KSsoNjcxMDg4NjMmSCk7SD4+PTI2LEgrPUUvNjcxMDg4NjR8MCxIKz1tPj4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZtfXJldHVybiAwIT09SCYmKHRoaXMud29yZHNbal09SCx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09Qz8xOnRoaXMubGVuZ3RoLFQ/dGhpcy5pbmVnKCk6''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMu''@;'; put 'put ''Y2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlvbiBxKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNbVF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3RoJiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxULmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJu''@;'; put 'put ''IEh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYoMCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhp''@;'; put 'put ''cy53b3Jkc1tFXSZqO3RoaXMud29yZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxtLG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tF''@;'; put 'put ''XTtmb3IoRT0wO0U8SDtFKyspdGhpcy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1m''@;'; put 'put ''dW5jdGlvbihDLFQsSCl7dmFyIGo7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02NzEwODg2M142NzEwODg2Mz4+PkU8PEUsYWU9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxq''@;'; put 'put ''KSxhZSl7Zm9yKHZhciB0ZT0wO3RlPG07dGUrKylhZS53b3Jkc1t0ZV09dGhpcy53b3Jkc1t0ZV07YWUubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0sdGU9MDt0ZTx0aGlzLmxlbmd0aDt0ZSsrKXRoaXMud29yZHNbdGVdPXRoaXMud29yZHNb''@;'; put 'put ''dGUrbV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtmb3IodGU9dGhpcy5sZW5ndGgtMTt0ZT49MCYmKDAhPT1zZXx8dGU+PWopO3RlLS0pe3ZhciB3ZT0wfHRoaXMud29yZHNbdGVdO3RoaXMud29yZHNbdGVdPXNlPDwyNi1FfHdlPj4+RSxzZT13ZSZBfXJl''@;'; put 'put ''dHVybiBhZSYmMCE9PXNlJiYoYWUud29yZHNbYWUubGVuZ3RoKytdPXNlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlKSx0aGlzLml1c2hybihDLFQsSCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1D''@;'; put 'put ''JTI2LEg9KEMtVCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVn''@;'; put 'put ''YXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEw''@;'; put 'put ''ODg2Mz4+PlQ8PFQpLHRoaXMuX3N0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpLEM8''@;'; put 'put ''MD90aGlzLmlzdWJuKC1DKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09''@;'; put 'put ''dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihDKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4''@;'; put 'put ''ODY0KSxDPDApcmV0dXJuIHRoaXMuaWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRo''@;'; put 'put ''aXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEwODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihDKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9leHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKysp''@;'; put 'put ''e209KDB8dGhpcy53b3Jkc1tFK0hdKStBO3ZhciBhZT0oMHxDLndvcmRzW0VdKSpUO0E9KChtLT02NzEwODg2MyZhZSk+PjI2KS0oYWUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hd''@;'; put 'put ''KStBKT4+MjYsdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKGcoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgwfHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0''@;'; put 'put ''dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGou''@;'; put 'put ''aXVzaGxuKEgpLG09MHxFLndvcmRzW0UubGVuZ3RoLTFdKTt2YXIgdGUsYWU9ai5sZW5ndGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsodGU9bmV3IHcobnVsbCkpLmxlbmd0aD1hZSsxLHRlLndvcmRzPW5ldyBBcnJheSh0ZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTx0ZS5sZW5ndGg7c2Ur''@;'; put 'put ''Kyl0ZS53b3Jkc1tzZV09MH12YXIgd2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEsYWUpOzA9PT13ZS5uZWdhdGl2ZSYmKGo9d2UsdGUmJih0ZS53b3Jkc1thZV09MSkpO2Zvcih2YXIgVWU9YWUtMTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtV''@;'; put 'put ''ZV0pKygwfGoud29yZHNbRS5sZW5ndGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9tfDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVnYXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0''@;'; put 'put ''aXZlXj0xKTt0ZSYmKHRlLndvcmRzW1VlXT1KZSl9cmV0dXJuIHRlJiZ0ZS5fc3RyaXAoKSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6dGV8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKCFDLmlz''@;'; put 'put ''WmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgm''@;'; put 'put ''JjAhPT1FLm5lZ2F0aXZlJiZFLmlhZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMu''@;'; put 'put ''bmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDAp''@;'; put 'put ''LG1vZDp0aGlzfToxPT09Qy5sZW5ndGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRo''@;'; put 'put ''aXMubW9kcm4oQy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxtfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChD''@;'; put 'put ''LCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2''@;'; put 'put ''O3ZhciBIPTAhPT1ULmRpdi5uZWdhdGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlqPShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5''@;'; put 'put ''cGUubW9kbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNb''@;'; put 'put ''al0pKzY3MTA4ODY0Kkg7dGhpcy53b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhpcy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlv''@;'; put 'put ''bihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksYWU9MDtULmlzRXZlbigp''@;'; put 'put ''JiZILmlzRXZlbigpOylULml1c2hybigxKSxILml1c2hybigxKSwrK2FlO2Zvcih2YXIgdGU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgd2U9MCxVZT0xOyEoVC53b3Jkc1swXSZVZSkmJndlPDI2Oysrd2UsVWU8PD0xKTtpZih3ZT4wKWZvcihULml1c2hy''@;'; put 'put ''bih3ZSk7d2UtLSA+MDspKGouaXNPZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZCh0ZSksRS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLG90PTE7IShILndvcmRzWzBdJm90KSYmSmU8MjY7KytKZSxvdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEpl''@;'; put 'put ''KTtKZS0tID4wOykobS5pc09kZCgpfHxBLmlzT2RkKCkpJiYobS5pYWRkKHRlKSxBLmlzdWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihtKSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJu''@;'; put 'put ''e2E6bSxiOkEsZ2NkOkguaXVzaGxuKGFlKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgd2UsVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9''@;'; put 'put ''bmV3IHcoMSksRT1uZXcgdygwKSxtPUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIEE9MCxhZT0xOyEoVC53b3Jkc1swXSZhZSkmJkE8MjY7KytBLGFlPDw9MSk7aWYoQT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGou''@;'; put 'put ''aXVzaHJuKDEpO2Zvcih2YXIgdGU9MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJnRlPDI2OysrdGUsc2U8PD0xKTtpZih0ZT4wKWZvcihILml1c2hybih0ZSk7dGUtLSA+MDspRS5pc09kZCgpJiZFLmlhZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkp''@;'; put 'put ''OihILmlzdWIoVCksRS5pc3ViKGopKX1yZXR1cm4od2U9MD09PVQuY21wbigxKT9qOkUpLmNtcG4oMCk8MCYmd2UuaWFkZChDKSx3ZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5h''@;'; put 'put ''YnMoKTt2YXIgVD10aGlzLmNsb25lKCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9y''@;'; put 'put ''KDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3ZhciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZWdjZChDKS5hLnVtb2QoQyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihD''@;'; put 'put ''KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9''@;'; put 'put ''aix0aGlzO2Zvcih2YXIgRT1qLG09SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmVClyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''MHwtSDpIfSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPzB8LVQ6VH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlzLmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jk''@;'; put 'put ''c1tIXSxFPTB8Qy53b3Jkc1tIXTtpZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTticmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNt''@;'; put 'put ''cChDKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmx0PWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUu''@;'; put 'put ''ZXFuPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IHAoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBn''@;'; put 'put ''KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcu''@;'; put 'put ''cHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFk''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''U3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3Fy''@;'; put 'put ''dCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQmJiFDLnJlZCwi''@;'; put 'put ''cmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxDKX07dmFyIG1lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiks''@;'; put 'put ''dGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBTZSgpe19lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gamUoKXtfZS5jYWxsKHRoaXMsInAx''@;'; put 'put ''OTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFYoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIp''@;'; put 'put ''fWZ1bmN0aW9uIHAoeCl7aWYoInN0cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmltZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIGcoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBi''@;'; put 'put ''KHgpe3AuY2FsbCh0aGlzLHgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSks''@;'; put 'put ''dGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90''@;'; put 'put ''bXA9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMpe3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5p''@;'; put 'put ''bXVsSyhUKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxULmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0''@;'; put 'put ''cmlwKCk6VC5fc3RyaXAoKSxUfSxfZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBDLmltdWwodGhpcy5rKX0sQihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KEMsVCl7Zm9yKHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4gQy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3Io''@;'; put 'put ''VC53b3Jkc1tULmxlbmd0aCsrXT1tJkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5''@;'; put 'put ''cGUuaW11bEs9ZnVuY3Rpb24oQyl7Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0MubGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0wfEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaiso''@;'; put 'put ''VC82NzEwODg2NHwwKX1yZXR1cm4gMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxlbmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxCKFNlLF9lKSxCKGplLF9lKSxCKFYsX2UpLFYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0w''@;'; put 'put ''LEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5ndGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYobWVbQ10pcmV0dXJuIG1l''@;'; put 'put ''W0NdO3ZhciBUO2lmKCJrMjU2Ij09PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1DKVQ9bmV3IFNlO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyBqZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBWfXJldHVybiBtZVtD''@;'; put 'put ''XT1ULFR9LHAucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxwLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihD''@;'; put 'put ''LFQpe2coIShDLm5lZ2F0aXZlfFQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5w''@;'; put 'put ''cmltZT90aGlzLnByaW1lLmlyZWR1Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0scC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3JldHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX0scC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMu''@;'; put 'put ''X3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHAucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0''@;'; put 'put ''aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHAucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVy''@;'; put 'put ''biB0aGlzLl92ZXJpZnkxKEMpLHRoaXMuaW1vZChDLnVzaGxuKFQpKX0scC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11bChUKSl9LHAucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMubXVsKFQpKX0scC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0scC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxwLnByb3RvdHlwZS5zcXJ0PWZ1bmN0''@;'; put 'put ''aW9uKEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0uYW5kbG4oMyk7aWYoZyhUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9''@;'; put 'put ''MDshai5pc1plcm8oKSYmMD09PWouYW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtnKCFqLmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksYWU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodGU9bmV3IHco''@;'; put 'put ''Mip0ZSp0ZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHRlLGFlKS5jbXAoQSk7KXRlLnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyh0ZSxqKSx3ZT10aGlzLnBvdyhDLGouYWRkbigxKS5pdXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9y''@;'; put 'put ''KHZhciBvdD1VZSx4ZT0wOzAhPT1vdC5jbXAobSk7eGUrKylvdD1vdC5yZWRTcXIoKTtnKHhlPEplKTt2YXIgdmU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLXhlLTEpKTt3ZT13ZS5yZWRNdWwodmUpLHNlPXZlLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9eGV9cmV0dXJu''@;'; put 'put ''IHdlfSxwLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygpKTp0aGlzLmltb2QoVCl9LHAucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4oMSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhpcyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwo''@;'; put 'put ''altFLTFdLEMpO3ZhciBtPWpbMF0sQT0wLGFlPTAsdGU9VC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXRlJiYodGU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0VdLHdlPXRlLTE7d2U+PTA7d2UtLSl7dmFyIFVlPXNlPj53ZSYxO20hPT1qWzBdJiYobT10''@;'; put 'put ''aGlzLnNxcihtKSksMCE9PVVlfHwwIT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrYWV8fDA9PT1FJiYwPT09d2UpJiYobT10aGlzLm11bChtLGpbQV0pLGFlPTAsQT0wKSk6YWU9MH10ZT0yNn1yZXR1cm4gbX0scC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0''@;'; put 'put ''aGlzLm0pO3JldHVybiBUPT09Qz9ULmNsb25lKCk6VH0scC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IGIoQyl9LEIoYixwKSxiLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0VG89ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hpZnQpKX0sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVsKHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LGIucHJvdG90eXBlLmltdWw9''@;'; put 'put ''ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3Vi''@;'; put 'put ''KGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxU''@;'; put 'put ''LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5tdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVy''@;'; put 'put ''biBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDM1Mjk0Oih1ZSxYLHkpPT57dmFyIEk7ZnVuY3Rpb24gXyhCKXt0aGlzLnJhbmQ9Qn1pZih1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBJfHwoST1uZXcgXyhudWxsKSksSS5nZW5lcmF0ZSh3KX0sdWUuZXhwb3J0cy5S''@;'; put 'put ''YW5kPV8sXy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJh''@;'; put 'put ''eSh3KSxGPTA7RjxQLmxlbmd0aDtGKyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWlu''@;'; put 'put ''dDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1z''@;'; put 'put ''Q3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgZz15KDkxNDI2KTtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgZy5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtyZXR1cm4gZy5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0sMTIzNzU6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24g''@;'; put 'put ''XyhPKXtJLmlzQnVmZmVyKE8pfHwoTz1JLmZyb20oTykpO2Zvcih2YXIgej1PLmxlbmd0aC80fDAsTj1uZXcgQXJyYXkoeiksTD0wO0w8ejtMKyspTltMXT1PLnJlYWRVSW50MzJCRSg0KkwpO3JldHVybiBOfWZ1bmN0aW9uIGcoTyl7Zm9yKDswPE8ubGVuZ3RoO08rKylPWzBdPTB9ZnVuY3Rp''@;'; put 'put ''b24gQihPLHosTixMLEspe2Zvcih2YXIgbGUsbWUsX2UsVGUsVT1OWzBdLFc9TlsxXSxZPU5bMl0scT1OWzNdLGVlPU9bMF1eelswXSxKPU9bMV1eelsxXSxuZT1PWzJdXnpbMl0saWU9T1szXV56WzNdLFNlPTQsamU9MTtqZTxLO2plKyspbGU9VVtlZT4+PjI0XV5XW0o+Pj4xNiYyNTVdXllb''@;'; put 'put ''bmU+Pj44JjI1NV1ecVsyNTUmaWVdXnpbU2UrK10sbWU9VVtKPj4+MjRdXldbbmU+Pj4xNiYyNTVdXllbaWU+Pj44JjI1NV1ecVsyNTUmZWVdXnpbU2UrK10sX2U9VVtuZT4+PjI0XV5XW2llPj4+MTYmMjU1XV5ZW2VlPj4+OCYyNTVdXnFbMjU1JkpdXnpbU2UrK10sVGU9VVtpZT4+PjI0XV5X''@;'; put 'put ''W2VlPj4+MTYmMjU1XV5ZW0o+Pj44JjI1NV1ecVsyNTUmbmVdXnpbU2UrK10sZWU9bGUsSj1tZSxuZT1fZSxpZT1UZTtyZXR1cm4gbGU9KExbZWU+Pj4yNF08PDI0fExbSj4+PjE2JjI1NV08PDE2fExbbmU+Pj44JjI1NV08PDh8TFsyNTUmaWVdKV56W1NlKytdLG1lPShMW0o+Pj4yNF08PDI0''@;'; put 'put ''fExbbmU+Pj4xNiYyNTVdPDwxNnxMW2llPj4+OCYyNTVdPDw4fExbMjU1JmVlXSleeltTZSsrXSxfZT0oTFtuZT4+PjI0XTw8MjR8TFtpZT4+PjE2JjI1NV08PDE2fExbZWU+Pj44JjI1NV08PDh8TFsyNTUmSl0pXnpbU2UrK10sVGU9KExbaWU+Pj4yNF08PDI0fExbZWU+Pj4xNiYyNTVdPDwx''@;'; put 'put ''NnxMW0o+Pj44JjI1NV08PDh8TFsyNTUmbmVdKV56W1NlKytdLFtsZT4+Pj0wLG1lPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sUD1mdW5jdGlvbigpe2Zvcih2YXIgTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09''@;'; put 'put ''ejwxMjg/ejw8MTp6PDwxXjI4Mztmb3IodmFyIE49W10sTD1bXSxLPVtbXSxbXSxbXSxbXV0sVT1bW10sW10sW10sW11dLFc9MCxZPTAscT0wO3E8MjU2OysrcSl7dmFyIGVlPVleWTw8MV5ZPDwyXlk8PDNeWTw8NDtOW1ddPWVlPWVlPj4+OF4yNTUmZWVeOTksTFtlZV09Vzt2YXIgSj1PW1dd''@;'; put 'put ''LG5lPU9bSl0saWU9T1tuZV0sbGU9MjU3Kk9bZWVdXjE2ODQzMDA4KmVlO0tbMF1bV109bGU8PDI0fGxlPj4+OCxLWzFdW1ddPWxlPDwxNnxsZT4+PjE2LEtbMl1bV109bGU8PDh8bGU+Pj4yNCxLWzNdW1ddPWxlLFVbMF1bZWVdPShsZT0xNjg0MzAwOSppZV42NTUzNypuZV4yNTcqSl4xNjg0''@;'; put 'put ''MzAwOCpXKTw8MjR8bGU+Pj44LFVbMV1bZWVdPWxlPDwxNnxsZT4+PjE2LFVbMl1bZWVdPWxlPDw4fGxlPj4+MjQsVVszXVtlZV09bGUsMD09PVc/Vz1ZPTE6KFc9Sl5PW09bT1tpZV5KXV1dLFlePU9bT1tZXV0pfXJldHVybntTQk9YOk4sSU5WX1NCT1g6TCxTVUJfTUlYOkssSU5WX1NVQl9N''@;'; put 'put ''SVg6VX19KCk7ZnVuY3Rpb24gRihPKXt0aGlzLl9rZXk9XyhPKSx0aGlzLl9yZXNldCgpfUYuYmxvY2tTaXplPTE2LEYua2V5U2l6ZT0zMixGLnByb3RvdHlwZS5ibG9ja1NpemU9Ri5ibG9ja1NpemUsRi5wcm90b3R5cGUua2V5U2l6ZT1GLmtleVNpemUsRi5wcm90b3R5cGUuX3Jlc2V0PWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBPPXRoaXMuX2tleSx6PU8ubGVuZ3RoLE49eis2LEw9NCooTisxKSxLPVtdLFU9MDtVPHo7VSsrKUtbVV09T1tVXTtmb3IoVT16O1U8TDtVKyspe3ZhciBXPUtbVS0xXTtVJXo9PTA/KFc9UC5TQk9YWyhXPVc8PDh8Vz4+PjI0KT4+PjI0XTw8MjR8UC5TQk9YW1c+''@;'; put 'put ''Pj4xNiYyNTVdPDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddLFdePXdbVS96fDBdPDwyNCk6ej42JiZVJXo9PTQmJihXPVAuU0JPWFtXPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10pLEtbVV09''@;'; put 'put ''S1tVLXpdXld9Zm9yKHZhciBZPVtdLHE9MDtxPEw7cSsrKXt2YXIgZWU9TC1xLEo9S1tlZS0ocSU0PzA6NCldO1lbcV09cTw0fHxlZTw9ND9KOlAuSU5WX1NVQl9NSVhbMF1bUC5TQk9YW0o+Pj4yNF1dXlAuSU5WX1NVQl9NSVhbMV1bUC5TQk9YW0o+Pj4xNiYyNTVdXV5QLklOVl9TVUJfTUlY''@;'; put 'put ''WzJdW1AuU0JPWFtKPj4+OCYyNTVdXV5QLklOVl9TVUJfTUlYWzNdW1AuU0JPWFsyNTUmSl1dfXRoaXMuX25Sb3VuZHM9Tix0aGlzLl9rZXlTY2hlZHVsZT1LLHRoaXMuX2ludktleVNjaGVkdWxlPVl9LEYucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihPKXtyZXR1cm4gQihP''@;'; put 'put ''PV8oTyksdGhpcy5fa2V5U2NoZWR1bGUsUC5TVUJfTUlYLFAuU0JPWCx0aGlzLl9uUm91bmRzKX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKE8pe3ZhciB6PXRoaXMuZW5jcnlwdEJsb2NrUmF3KE8pLE49SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIE4ud3JpdGVVSW50MzJC''@;'; put 'put ''RSh6WzBdLDApLE4ud3JpdGVVSW50MzJCRSh6WzFdLDQpLE4ud3JpdGVVSW50MzJCRSh6WzJdLDgpLE4ud3JpdGVVSW50MzJCRSh6WzNdLDEyKSxOfSxGLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9KE89XyhPKSlbMV07T1sxXT1PWzNdLE9bM109ejt2YXIgTj1C''@;'; put 'put ''KE8sdGhpcy5faW52S2V5U2NoZWR1bGUsUC5JTlZfU1VCX01JWCxQLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEw9SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVVSW50MzJCRShOWzBdLDApLEwud3JpdGVVSW50MzJCRShOWzNdLDQpLEwud3JpdGVVSW50MzJCRShOWzJdLDgpLEwu''@;'; put 'put ''d3JpdGVVSW50MzJCRShOWzFdLDEyKSxMfSxGLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe2codGhpcy5fa2V5U2NoZWR1bGUpLGcodGhpcy5faW52S2V5U2NoZWR1bGUpLGcodGhpcy5fa2V5KX0sdWUuZXhwb3J0cy5BRVM9Rn0sMTkzMDc6KHVlLFgseSk9Pnt2YXIgST15KDEyMzc1KSxf''@;'; put 'put ''PXkoMjcwNTQpLkJ1ZmZlcixnPXkoMzI0NyksQj15KDcxOTkzKSx3PXkoODU5MTcpLFA9eSgxMzU0NiksRj15KDk1NzI1KTtmdW5jdGlvbiBOKEwsSyxVLFcpe2cuY2FsbCh0aGlzKTt2YXIgWT1fLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBo''@;'; put 'put ''ZXIuZW5jcnlwdEJsb2NrKFkpO3RoaXMuX2doYXNoPW5ldyB3KHEpLFU9ZnVuY3Rpb24geihMLEssVSl7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTC5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwxXSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBXPW5l''@;'; put 'put ''dyB3KFUpLFk9Sy5sZW5ndGgscT1ZJTE2O1cudXBkYXRlKEspLHEmJlcudXBkYXRlKF8uYWxsb2MocT0xNi1xLDApKSxXLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlksSj1fLmFsbG9jKDgpO0oud3JpdGVVSW50QkUoZWUsMCw4KSxXLnVwZGF0ZShKKSxMLl9maW5JRD1XLnN0YXRl''@;'; put 'put ''O3ZhciBuZT1fLmZyb20oTC5fZmluSUQpO3JldHVybiBGKG5lKSxuZX0odGhpcyxVLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKFUpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRo''@;'; put 'put ''aXMuX2xlbj0wLHRoaXMuX21vZGU9TCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfUIoTixnKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxv''@;'; put 'put ''YyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOlUpLHRoaXMuX2xlbis9TC5sZW5ndGgsVX0sTi5wcm90b3R5cGUuX2ZpbmFs''@;'; put 'put ''PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiks''@;'; put 'put ''dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIE8oTCxLKXt2YXIgVT0wO0wubGVuZ3RoIT09Sy5sZW5ndGgmJlUrKztmb3IodmFyIFc9TWF0aC5taW4oTC5sZW5ndGgsSy5sZW5ndGgpLFk9MDtZPFc7KytZKVUrPUxbWV1e''@;'; put 'put ''S1tZXTtyZXR1cm4gVX0oTCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1m''@;'; put 'put ''dW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSx1ZS5leHBvcnRzPU59LDQzMzg4Oih1ZSxYLHkpPT57dmFyIEk9eSgzNTApLF89eSg2MDEwMiksZz15KDMyMTkp''@;'; put 'put ''O1guY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPUkuY3JlYXRlQ2lwaGVyLFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1JLmNyZWF0ZUNpcGhlcml2LFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1fLmNyZWF0ZURlY2lwaGVyLFguY3JlYXRlRGVjaXBoZXJpdj1YLkRlY2lwaGVyaXY9Xy5j''@;'; put 'put ''cmVhdGVEZWNpcGhlcml2LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIEIoKXtyZXR1cm4gT2JqZWN0LmtleXMoZyl9fSw2MDEwMjoodWUsWCx5KT0+e3ZhciBJPXkoMTkzMDcpLF89eSgyNzA1NCkuQnVmZmVyLGc9eSg2MDUwMyksQj15KDkxODIxKSx3PXkoMzI0NyksUD15''@;'; put 'put ''KDEyMzc1KSxGPXkoMTgyMTEpO2Z1bmN0aW9uIHooVyxZLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9Xy5mcm9tKHEpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0h''@;'; put 'put ''MH1mdW5jdGlvbiBOKCl7dGhpcy5jYWNoZT1fLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLHEpe3ZhciBlZT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Xy5m''@;'; put 'put ''cm9tKHEpKSwiR0NNIiE9PWVlLm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1fLmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxxLCEwKToiYXV0aCI9PT1lZS50eXBlP25ldyBJKGVlLm1vZHVsZSxZLHEsITApOm5ldyB6KGVlLm1vZHVsZSxZLHEpfXkoNzE5OTMpKHosdyksei5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZLHEsZWU9W107WT10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOylxPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFkpLGVlLnB1c2gocSk7cmV0dXJuIF8uY29uY2F0KGVlKX0s''@;'; put 'put ''ei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gTChXKXt2YXIgWT1XWzE1XTtpZihZPDF8fFk+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7''@;'; put 'put ''Zm9yKHZhciBxPS0xOysrcTxZOylpZihXW3ErKDE2LVkpXSE9PVkpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1ZKXJldHVybiBXLnNsaWNlKDAsMTYtWSl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFcpKTtpZihXKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''ZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2FjaGU9Xy5jb25jYXQoW3RoaXMu''@;'; put 'put ''Y2FjaGUsV10pfSxOLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVyl7dmFyIFk7aWYoVyl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFl9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0''@;'; put 'put ''aD49MTYpcmV0dXJuIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFk7cmV0dXJuIG51bGx9LE4ucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LFguY3JlYXRlRGVj''@;'; put 'put ''aXBoZXI9ZnVuY3Rpb24gVShXLFkpe3ZhciBxPWdbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCExLHEua2V5LHEuaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX0sWC5jcmVhdGVEZWNpcGhlcml2''@;'; put 'put ''PUt9LDM1MDoodWUsWCx5KT0+e3ZhciBJPXkoNjA1MDMpLF89eSgxOTMwNyksZz15KDI3MDU0KS5CdWZmZXIsQj15KDkxODIxKSx3PXkoMzI0NyksUD15KDEyMzc1KSxGPXkoMTgyMTEpO2Z1bmN0aW9uIHooVyxZLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTCx0aGlzLl9jaXBo''@;'; put 'put ''ZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9Zy5mcm9tKHEpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH15KDcxOTkzKSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxxLGVlPVtdO1k9dGhpcy5fY2Fj''@;'; put 'put ''aGUuZ2V0KCk7KXE9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWSksZWUucHVzaChxKTtyZXR1cm4gZy5jb25jYXQoZWUpfTt2YXIgTj1nLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBMKCl7dGhpcy5jYWNoZT1nLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLHEpe3ZhciBlZT1JW1cudG9M''@;'; put 'put ''b3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Zy5mcm9tKFkpKSxZLmxlbmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVu''@;'; put 'put ''Z3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPWcuZnJvbShxKSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1''@;'; put 'put ''bGUsWSxxKToiYXV0aCI9PT1lZS50eXBlP25ldyBfKGVlLm1vZHVsZSxZLHEpOm5ldyB6KGVlLm1vZHVsZSxZLHEpfXoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9dGhpcy5fbW9kZS5l''@;'; put 'put ''bmNyeXB0KHRoaXMsVyksdGhpcy5fY2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoTikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24o''@;'; put 'put ''Vyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1nLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVz10aGlz''@;'; put 'put ''LmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFk9Zy5hbGxvY1Vuc2FmZShXKSxxPS0xOysrcTxXOylZ''@;'; put 'put ''LndyaXRlVUludDgoVyxxKTtyZXR1cm4gZy5jb25jYXQoW3RoaXMuY2FjaGUsWV0pfSxYLmNyZWF0ZUNpcGhlcml2PUssWC5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gVShXLFkpe3ZhciBxPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRl''@;'; put 'put ''IHR5cGUiKTt2YXIgZWU9RihZLCExLHEua2V5LHEuaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX19LDg1OTE3Oih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBCKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndy''@;'; put 'put ''aXRlVUludDMyQkUoUFswXT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYud3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5j''@;'; put 'put ''YWNoZT1JLmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zvcih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBPLE4sUD1m''@;'; put 'put ''dW5jdGlvbiBnKFApe3JldHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLEw9LTE7KytMPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KEwvOCldJjE8PDctTCU4''@;'; put 'put ''KSYmKEZbMF1ePVBbMF0sRlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEoMSZQWzNdKSxPPTM7Tz4wO08tLSlQW09dPVBbT10+Pj4xfCgxJlBbTy0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09UFswXV4yMjU8PDI0KX10aGlzLnN0YXRlPUIoRil9LHcucHJvdG90''@;'; put 'put ''eXBlLnVwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goQihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSx1ZS5leHBvcnRzPXd9LDk1NzI1OnVlPT57dWUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbiBYKHkpe2Zvcih2YXIgXyxJPXkubGVuZ3RoO0ktLTspe2lmKDI1NSE9PShfPXkucmVhZFVJbnQ4KEkpKSl7XysrLHkud3JpdGVVSW50OChfLEkpO2JyZWFrfXkud3JpdGVVSW50OCgwLEkpfX19LDM0MTMzOih1ZSxYLHkpPT57dmFyIEk9eSgxMzU0Nik7WC5lbmNyeXB0''@;'; put 'put ''PWZ1bmN0aW9uKF8sZyl7dmFyIEI9SShnLF8uX3ByZXYpO3JldHVybiBfLl9wcmV2PV8uX2NpcGhlci5lbmNyeXB0QmxvY2soQiksXy5fcHJldn0sWC5kZWNyeXB0PWZ1bmN0aW9uKF8sZyl7dmFyIEI9Xy5fcHJldjtfLl9wcmV2PWc7dmFyIHc9Xy5fY2lwaGVyLmRlY3J5cHRCbG9jayhnKTty''@;'; put 'put ''ZXR1cm4gSSh3LEIpfX0sMTcwOTA6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDEzNTQ2KTtmdW5jdGlvbiBnKEIsdyxQKXt2YXIgRj13Lmxlbmd0aCxPPV8odyxCLl9jYWNoZSk7cmV0dXJuIEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKEYpLEIuX3ByZXY9SS5jb25jYXQo''@;'; put 'put ''W0IuX3ByZXYsUD93Ok9dKSxPfVguZW5jcnlwdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBPLEY9SS5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1CLl9jYWNoZS5sZW5ndGgmJihCLl9jYWNoZT1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpLEIuX3ByZXY9SS5hbGxv''@;'; put 'put ''Y1Vuc2FmZSgwKSksIShCLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7Rj1JLmNvbmNhdChbRixnKEIsdyxQKV0pO2JyZWFrfUY9SS5jb25jYXQoW0YsZyhCLHcuc2xpY2UoMCxPPUIuX2NhY2hlLmxlbmd0aCksUCldKSx3PXcuc2xpY2UoTyl9cmV0dXJuIEZ9fSw3MTAzOToodWUsWCx5KT0+''@;'; put 'put ''e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKEIsdyxQKXtmb3IodmFyIEwsSyxPPS0xLE49MDsrK088ODspTis9KDEyOCYoSz1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpWzBdXihMPXcmMTw8Ny1PPzEyODowKSkpPj5PJTgsQi5fcHJldj1nKEIuX3ByZXYsUD9MOksp''@;'; put 'put ''O3JldHVybiBOfWZ1bmN0aW9uIGcoQix3KXt2YXIgUD1CLmxlbmd0aCxGPS0xLE89SS5hbGxvY1Vuc2FmZShCLmxlbmd0aCk7Zm9yKEI9SS5jb25jYXQoW0IsSS5mcm9tKFt3XSldKTsrK0Y8UDspT1tGXT1CW0ZdPDwxfEJbRisxXT4+NztyZXR1cm4gT31YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3''@;'; put 'put ''LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxPPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspT1t6XT1fKEIsd1t6XSxQKTtyZXR1cm4gT319LDcyNTc2Oih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8oZyxCLHcpe3ZhciBGPWcuX2NpcGhlci5lbmNyeXB0Qmxv''@;'; put 'put ''Y2soZy5fcHJldilbMF1eQjtyZXR1cm4gZy5fcHJldj1JLmNvbmNhdChbZy5fcHJldi5zbGljZSgxKSxJLmZyb20oW3c/QjpGXSldKSxGfVguZW5jcnlwdD1mdW5jdGlvbihnLEIsdyl7Zm9yKHZhciBQPUIubGVuZ3RoLEY9SS5hbGxvY1Vuc2FmZShQKSxPPS0xOysrTzxQOylGW09dPV8oZyxC''@;'; put 'put ''W09dLHcpO3JldHVybiBGfX0sNzAzMzY6KHVlLFgseSk9Pnt2YXIgST15KDEzNTQ2KSxfPXkoMjcwNTQpLkJ1ZmZlcixnPXkoOTU3MjUpO2Z1bmN0aW9uIEIoUCl7dmFyIEY9UC5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhQLl9wcmV2KTtyZXR1cm4gZyhQLl9wcmV2KSxGfVguZW5jcnlwdD1m''@;'; put 'put ''dW5jdGlvbihQLEYpe3ZhciBPPU1hdGguY2VpbChGLmxlbmd0aC8xNiksej1QLl9jYWNoZS5sZW5ndGg7UC5fY2FjaGU9Xy5jb25jYXQoW1AuX2NhY2hlLF8uYWxsb2NVbnNhZmUoMTYqTyldKTtmb3IodmFyIE49MDtOPE87TisrKXt2YXIgTD1CKFApLEs9eisxNipOO1AuX2NhY2hlLndyaXRl''@;'; put 'put ''VUludDMyQkUoTFswXSxLKzApLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxLKzQpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxLKzgpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxLKzEyKX12YXIgVT1QLl9jYWNoZS5zbGljZSgwLEYubGVuZ3RoKTtyZXR1cm4gUC5fY2Fj''@;'; put 'put ''aGU9UC5fY2FjaGUuc2xpY2UoRi5sZW5ndGgpLEkoRixVKX19LDM3NTEzOih1ZSxYKT0+e1guZW5jcnlwdD1mdW5jdGlvbih5LEkpe3JldHVybiB5Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKEkpfSxYLmRlY3J5cHQ9ZnVuY3Rpb24oeSxJKXtyZXR1cm4geS5fY2lwaGVyLmRlY3J5cHRCbG9jayhJ''@;'; put 'put ''KX19LDYwNTAzOih1ZSxYLHkpPT57dmFyIEk9e0VDQjp5KDM3NTEzKSxDQkM6eSgzNDEzMyksQ0ZCOnkoMTcwOTApLENGQjg6eSg3MjU3NiksQ0ZCMTp5KDcxMDM5KSxPRkI6eSg0Njg1NCksQ1RSOnkoNzAzMzYpLEdDTTp5KDcwMzM2KX0sXz15KDMyMTkpO2Zvcih2YXIgZyBpbiBfKV9bZ10u''@;'; put 'put ''bW9kdWxlPUlbX1tnXS5tb2RlXTt1ZS5leHBvcnRzPV99LDQ2ODU0Oih1ZSxYLHkpPT57dmFyIEk9eSgxMzU0Nik7ZnVuY3Rpb24gXyhnKXtyZXR1cm4gZy5fcHJldj1nLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGcuX3ByZXYpLGcuX3ByZXZ9WC5lbmNyeXB0PWZ1bmN0aW9uKGcsQil7Zm9yKDtn''@;'; put 'put ''Ll9jYWNoZS5sZW5ndGg8Qi5sZW5ndGg7KWcuX2NhY2hlPUJ1ZmZlci5jb25jYXQoW2cuX2NhY2hlLF8oZyldKTt2YXIgdz1nLl9jYWNoZS5zbGljZSgwLEIubGVuZ3RoKTtyZXR1cm4gZy5fY2FjaGU9Zy5fY2FjaGUuc2xpY2UoQi5sZW5ndGgpLEkoQix3KX19LDkxODIxOih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSgxMjM3NSksXz15KDI3MDU0KS5CdWZmZXIsZz15KDMyNDcpO2Z1bmN0aW9uIHcoUCxGLE8seil7Zy5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj1fLmZyb20oTyksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNo''@;'; put 'put ''ZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9eSg3MTk5MykodyxnKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxQLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sdWUuZXhwb3J0cz13fSw4ODg2MjoodWUsWCx5KT0+e3ZhciBJPXkoMzk3OTkpLF89eSg0MzM4OCksZz15KDYwNTAzKSxCPXkoNTk1NzEpLHc9eSgxODIxMSk7ZnVuY3Rpb24gTyhMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSly''@;'; put 'put ''ZXR1cm4gXy5jcmVhdGVDaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24geihMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4g''@;'; put 'put ''Xy5jcmVhdGVEZWNpcGhlcml2KEwsSyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkwsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfVguY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPWZ1bmN0aW9uIFAoTCxLKXt2YXIg''@;'; put 'put ''VSxXO2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtVPTgqQltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiBPKEwsWS5rZXks''@;'; put 'put ''WS5pdil9LFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1PLFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1mdW5jdGlvbiBGKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4geihMLFkua2V5LFkuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PXosWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gTigp''@;'; put 'put ''e3JldHVybiBPYmplY3Qua2V5cyhCKS5jb25jYXQoXy5nZXRDaXBoZXJzKCkpfX0sMzk3OTk6KHVlLFgseSk9Pnt2YXIgST15KDMyNDcpLF89eSg3MTU0OSksZz15KDcxOTkzKSxCPXkoMjcwNTQpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRl''@;'; put 'put ''cy1lZGUzIjpfLkVERSwiZGVzLWVkZS1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZSI6Xy5FREUsImRlcy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uREVTKSwiZGVzLWVjYiI6Xy5ERVN9O2Z1bmN0aW9uIFAoRil7SS5jYWxsKHRoaXMpO3ZhciBOLE89Ri5tb2RlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCksej13W09dO049Ri5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9Ri5rZXk7Qi5pc0J1ZmZlcihMKXx8KEw9Qi5mcm9tKEwpKSwoImRlcy1lZGUiPT09T3x8ImRlcy1lZGUtY2JjIj09PU8pJiYoTD1CLmNvbmNhdChbTCxMLnNsaWNlKDAsOCldKSk7dmFyIEs9''@;'; put 'put ''Ri5pdjtCLmlzQnVmZmVyKEspfHwoSz1CLmZyb20oSykpLHRoaXMuX2Rlcz16LmNyZWF0ZSh7a2V5OkwsaXY6Syx0eXBlOk59KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLHVlLmV4cG9ydHM9UCxnKFAsSSksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bihGKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoRikpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDU5NTcxOih1ZSxYKT0+e1hbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sWFsiZGVzLWNiYyJdPVguZGVz''@;'; put 'put ''PXtrZXk6OCxpdjo4fSxYWyJkZXMtZWRlMy1jYmMiXT1YLmRlczM9e2tleToyNCxpdjo4fSxYWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sWFsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LFhbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwxNDEwNToodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDkxNyksXz15KDMzNDIpLGc9eSgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIEIoRil7dmFyIHosTz1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoXyhPKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5w''@;'; put 'put ''cmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBQKEYsTyl7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgTz1CKEYpO3JldHVybntibGluZGVyOk8udG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpPLmludm0o''@;'; put 'put ''Ri5tb2R1bHVzKX19KE8pLE49Ty5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoTy5tb2R1bHVzKSxLPUwudG9SZWQoSS5tb250KE8ucHJpbWUxKSksVT1MLnRvUmVkKEkubW9udChPLnByaW1lMikpLFc9Ty5jb2VmZmljaWVudCxZPU8ucHJpbWUx''@;'; put 'put ''LHE9Ty5wcmltZTIsZWU9Sy5yZWRQb3coTy5leHBvbmVudDEpLmZyb21SZWQoKSxKPVUucmVkUG93KE8uZXhwb25lbnQyKS5mcm9tUmVkKCksbmU9ZWUuaXN1YihKKS5pbXVsKFcpLnVtb2QoWSkuaW11bChxKTtyZXR1cm4gSi5pYWRkKG5lKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKE8ubW9k''@;'; put 'put ''dWx1cykudG9BcnJheUxpa2UoZywiYmUiLE4pfVAuZ2V0cj1CLHVlLmV4cG9ydHM9UH0sOTk1NjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz15KDYyOTUxKX0sNzkxNDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg2NzIxMSks''@;'; put 'put ''Zz15KDU5NDIpLEI9eSg3MTk5Myksdz15KDQzMTUwKSxQPXkoNzQ3NTQpLEY9eSg2Mjk1MSk7ZnVuY3Rpb24gTyhLKXtnLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1V''@;'; put 'put ''Lmhhc2gsdGhpcy5faGFzaD1fKFUuaGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIHooSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5f''@;'; put 'put ''aGFzaD1fKFUuaGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBPKEspfWZ1bmN0aW9uIEwoSyl7cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltL''@;'; put 'put ''XS5pZCwiaGV4IiksRltLLnRvTG93ZXJDYXNlKCldPUZbS119KSxCKE8sZy5Xcml0YWJsZSksTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LE8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNo''@;'; put 'put ''LnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihVLFcpe3RoaXMuZW5kKCk7dmFyIFk9dGhpcy5faGFzaC5kaWdlc3QoKSxxPXcoWSxVLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7''@;'; put 'put ''cmV0dXJuIFc/cS50b1N0cmluZyhXKTpxfSxCKHosZy5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFUsVyxZKXt2YXIgcT0ic3RyaW5nIj09dHlwZW9mIFc/SS5mcm9tKFcsWSk6Vzt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKHEsZWUsVSx0''@;'; put 'put ''aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSx1ZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5OkwsY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpMfX0sNDMxNTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg1NjQzMiksZz15KDE0MTA1KSxCPXkoOTA1''@;'; put 'put ''MTgpLmVjLHc9eSg5MTcpLFA9eSg2NTY2NyksRj15KDY0NTg5KTtmdW5jdGlvbiBVKEosbmUsaWUsbGUpe2lmKChKPUkuZnJvbShKLnRvQXJyYXkoKSkpLmxlbmd0aDxuZS5ieXRlTGVuZ3RoKCkpe3ZhciBtZT1JLmFsbG9jKG5lLmJ5dGVMZW5ndGgoKS1KLmxlbmd0aCk7Sj1JLmNvbmNhdChb''@;'; put 'put ''bWUsSl0pfXZhciBfZT1pZS5sZW5ndGgsVGU9ZnVuY3Rpb24gWShKLG5lKXtKPShKPVcoSixuZSkpLm1vZChuZSk7dmFyIGllPUkuZnJvbShKLnRvQXJyYXkoKSk7aWYoaWUubGVuZ3RoPG5lLmJ5dGVMZW5ndGgoKSl7dmFyIGxlPUkuYWxsb2MobmUuYnl0ZUxlbmd0aCgpLWllLmxlbmd0aCk7''@;'; put 'put ''aWU9SS5jb25jYXQoW2xlLGllXSl9cmV0dXJuIGllfShpZSxuZSksU2U9SS5hbGxvYyhfZSk7U2UuZmlsbCgxKTt2YXIgamU9SS5hbGxvYyhfZSk7cmV0dXJuIGplPV8obGUsamUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMF0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSxT''@;'; put 'put ''ZT1fKGxlLGplKS51cGRhdGUoU2UpLmRpZ2VzdCgpLHtrOmplPV8obGUsamUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMV0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSx2OlNlPV8obGUsamUpLnVwZGF0ZShTZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFcoSixuZSl7dmFyIGll''@;'; put 'put ''PW5ldyB3KEopLGxlPShKLmxlbmd0aDw8MyktbmUuYml0TGVuZ3RoKCk7cmV0dXJuIGxlPjAmJmllLmlzaHJuKGxlKSxpZX1mdW5jdGlvbiBxKEosbmUsaWUpe3ZhciBsZSxtZTtkb3tmb3IobGU9SS5hbGxvYygwKTs4KmxlLmxlbmd0aDxKLmJpdExlbmd0aCgpOyluZS52PV8oaWUsbmUuayku''@;'; put 'put ''dXBkYXRlKG5lLnYpLmRpZ2VzdCgpLGxlPUkuY29uY2F0KFtsZSxuZS52XSk7bWU9VyhsZSxKKSxuZS5rPV8oaWUsbmUuaykudXBkYXRlKG5lLnYpLnVwZGF0ZShJLmZyb20oWzBdKSkuZGlnZXN0KCksbmUudj1fKGllLG5lLmspLnVwZGF0ZShuZS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW1l''@;'; put 'put ''LmNtcChKKSk7cmV0dXJuIG1lfWZ1bmN0aW9uIGVlKEosbmUsaWUsbGUpe3JldHVybiBKLnRvUmVkKHcubW9udChpZSkpLnJlZFBvdyhuZSkuZnJvbVJlZCgpLm1vZChsZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiB6KEosbmUsaWUsbGUsbWUpe3ZhciBfZT1QKG5lKTtpZihfZS5jdXJ2ZSl7aWYo''@;'; put 'put ''ImVjZHNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1GW25lLmN1cnZlLmpvaW4oIi4iKV07aWYoIWllKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAi''@;'; put 'put ''K25lLmN1cnZlLmpvaW4oIi4iKSk7dmFyIF9lPW5ldyBCKGllKS5rZXlGcm9tUHJpdmF0ZShuZS5wcml2YXRlS2V5KS5zaWduKEopO3JldHVybiBJLmZyb20oX2UudG9ERVIoKSl9KEosX2UpfWlmKCJkc2EiPT09X2UudHlwZSl7aWYoImRzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25n''@;'; put 'put ''IHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTChKLG5lLGllKXtmb3IodmFyIGplLGxlPW5lLnBhcmFtcy5wcml2X2tleSxtZT1uZS5wYXJhbXMucCxfZT1uZS5wYXJhbXMucSxUZT1uZS5wYXJhbXMuZyxTZT1uZXcgdygwKSxWPVcoSixfZSkubW9kKF9lKSxwPSExLGI9VShs''@;'; put 'put ''ZSxfZSxKLGllKTshMT09PXA7KVNlPWVlKFRlLGplPXEoX2UsYixpZSksbWUsX2UpLDA9PT0ocD1qZS5pbnZtKF9lKS5pbXVsKFYuYWRkKGxlLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYocD0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIEsoSixuZSl7Sj1KLnRvQXJyYXko''@;'; put 'put ''KSxuZT1uZS50b0FycmF5KCksMTI4JkpbMF0mJihKPVswXS5jb25jYXQoSikpLDEyOCZuZVswXSYmKG5lPVswXS5jb25jYXQobmUpKTt2YXIgbGU9WzQ4LEoubGVuZ3RoK25lLmxlbmd0aCs0LDIsSi5sZW5ndGhdO3JldHVybiBsZT1sZS5jb25jYXQoSixbMixuZS5sZW5ndGhdLG5lKSxJLmZy''@;'; put 'put ''b20obGUpfShTZSxwKX0oSixfZSxpZSl9aWYoInJzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1uZS5wYWRkaW5nJiYxIT09bmUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3Ig''@;'; put 'put ''dW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7Sj1JLmNvbmNhdChbbWUsSl0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07Si5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgamU9LTE7KytqZTxKLmxlbmd0''@;'; put 'put ''aDspU2UucHVzaChKW2plXSk7cmV0dXJuIGcoU2UsX2UpfSx1ZS5leHBvcnRzLmdldEtleT1VLHVlLmV4cG9ydHMubWFrZUtleT1xfSw3NDc1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDkxNyksZz15KDkwNTE4KS5lYyxCPXkoNjU2NjcpLHc9''@;'; put 'put ''eSg2NDU4OSk7ZnVuY3Rpb24geihOLEwpe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTCk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLEwsSyxVLFcpe3ZhciBZPUIoSyk7aWYo''@;'; put 'put ''ImVjIj09PVkudHlwZSl7aWYoImVjZHNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighVSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBnKFUpLnZlcmlmeShMLE4sSy5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShOLEwsWSl9aWYoImRzYSI9PT1ZLnR5cGUpe2lmKCJkc2EiIT09VSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBPKE4sTCxLKXt2YXIgVT1LLmRhdGEucCxXPUsuZGF0YS5xLFk9Sy5kYXRhLmcscT1LLmRhdGEucHViX2tleSxlZT1CLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLG5lPWVlLnI7eihK''@;'; put 'put ''LFcpLHoobmUsVyk7dmFyIGllPV8ubW9udChVKSxsZT1KLmludm0oVyk7cmV0dXJuIDA9PT1ZLnRvUmVkKGllKS5yZWRQb3cobmV3IF8oTCkubXVsKGxlKS5tb2QoVykpLmZyb21SZWQoKS5tdWwocS50b1JlZChpZSkucmVkUG93KG5lLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkpLm1vZChV''@;'; put 'put ''KS5tb2QoVykuY21wKG5lKX0oTixMLFkpfWlmKCJyc2EiIT09VSYmImVjZHNhL3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7TD1JLmNvbmNhdChbVyxMXSk7Zm9yKHZhciBxPVkubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtMLmxlbmd0''@;'; put 'put ''aCtlZS5sZW5ndGgrMjxxOyllZS5wdXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgbmU9LTE7KytuZTxMLmxlbmd0aDspZWUucHVzaChMW25lXSk7ZWU9SS5mcm9tKGVlKTt2YXIgaWU9Xy5tb250KFkubW9kdWx1cyk7Tj0oTj1uZXcgXyhOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcg''@;'; put 'put ''XyhZLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgbGU9Sjw4PzE6MDtmb3IocT1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVuZ3RoIT09ZWUubGVuZ3RoJiYobGU9MSksbmU9LTE7KytuZTxxOylsZXw9TltuZV1eZWVbbmVdO3Jl''@;'; put 'put ''dHVybiAwPT09bGV9fSwxMzU0Njp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtmb3IodmFyIF89TWF0aC5taW4oeS5sZW5ndGgsSS5sZW5ndGgpLGc9bmV3IEJ1ZmZlcihfKSxCPTA7QjxfOysrQilnW0JdPXlbQl1eSVtCXTtyZXR1cm4gZ319LDgzODM4Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoMTM5ODEpLF89eSgyMjAyMCksZz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7WC5CdWZmZXI9RixYLlNsb3dCdWZmZXI9ZnVu''@;'; put 'put ''Y3Rpb24gSihJZSl7cmV0dXJuK0llIT1JZSYmKEllPTApLEYuYWxsb2MoK0llKX0sWC5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgQj0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIFAoSWUpe2lmKEllPkIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytJZSsnIiBpcyBpbnZhbGlkIGZv''@;'; put 'put ''ciBvcHRpb24gInNpemUiJyk7dmFyIFZlPW5ldyBVaW50OEFycmF5KEllKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFZlLEYucHJvdG90eXBlKSxWZX1mdW5jdGlvbiBGKEllLFZlLGtlKXtpZigibnVtYmVyIj09dHlwZW9mIEllKXtpZigic3RyaW5nIj09dHlwZW9mIFZlKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBMKEllKX1yZXR1cm4gTyhJZSxWZSxrZSl9ZnVuY3Rpb24gTyhJZSxWZSxrZSl7aWYoInN0cmluZyI9PXR5cGVvZiBJZSlyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gSyhJZSxWZSl7aWYoKCJzdHJpbmciIT10eXBlb2YgVmV8fCIiPT09VmUpJiYoVmU9InV0ZjgiKSwhRi5pc0VuY29kaW5nKFZlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1ZlKTt2YXIga2U9MHxuZShJZSxWZSksQWU9UChrZSksX3Q9QWUu''@;'; put 'put ''d3JpdGUoSWUsVmUpO3JldHVybiBfdCE9PWtlJiYoQWU9QWUuc2xpY2UoMCxfdCkpLEFlfShJZSxWZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEllKSlyZXR1cm4gZnVuY3Rpb24gVyhJZSl7aWYoRGUoSWUsVWludDhBcnJheSkpe3ZhciBWZT1uZXcgVWludDhBcnJheShJZSk7cmV0dXJuIFko''@;'; put 'put ''VmUuYnVmZmVyLFZlLmJ5dGVPZmZzZXQsVmUuYnl0ZUxlbmd0aCl9cmV0dXJuIFUoSWUpfShJZSk7aWYobnVsbD09SWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwg''@;'; put 'put ''b3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgSWUpO2lmKERlKEllLEFycmF5QnVmZmVyKXx8SWUmJkRlKEllLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihEZShJZSxTaGFyZWRBcnJheUJ1ZmZlcil8fEllJiZE''@;'; put 'put ''ZShJZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gWShJZSxWZSxrZSk7aWYoIm51bWJlciI9PXR5cGVvZiBJZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXIn''@;'; put 'put ''KTt2YXIgQWU9SWUudmFsdWVPZiYmSWUudmFsdWVPZigpO2lmKG51bGwhPUFlJiZBZSE9PUllKXJldHVybiBGLmZyb20oQWUsVmUsa2UpO3ZhciBfdD1mdW5jdGlvbiBxKEllKXtpZihGLmlzQnVmZmVyKEllKSl7dmFyIFZlPTB8ZWUoSWUubGVuZ3RoKSxrZT1QKFZlKTtyZXR1cm4gMD09PWtl''@;'; put 'put ''Lmxlbmd0aHx8SWUuY29weShrZSwwLDAsVmUpLGtlfXJldHVybiB2b2lkIDAhPT1JZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBJZS5sZW5ndGh8fEZlKEllLmxlbmd0aCk/UCgwKTpVKEllKToiQnVmZmVyIj09PUllLnR5cGUmJkFycmF5LmlzQXJyYXkoSWUuZGF0YSk/VShJZS5kYXRhKTp2''@;'; put 'put ''b2lkIDB9KEllKTtpZihfdClyZXR1cm4gX3Q7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIEYuZnJvbShJZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxW''@;'; put 'put ''ZSxrZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgSWUpfWZ1bmN0aW9uIHooSWUp''@;'; put 'put ''e2lmKCJudW1iZXIiIT10eXBlb2YgSWUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihJZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrSWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicp''@;'; put 'put ''fWZ1bmN0aW9uIEwoSWUpe3JldHVybiB6KEllKSxQKEllPDA/MDowfGVlKEllKSl9ZnVuY3Rpb24gVShJZSl7Zm9yKHZhciBWZT1JZS5sZW5ndGg8MD8wOjB8ZWUoSWUubGVuZ3RoKSxrZT1QKFZlKSxBZT0wO0FlPFZlO0FlKz0xKWtlW0FlXT0yNTUmSWVbQWVdO3JldHVybiBrZX1mdW5jdGlv''@;'; put 'put ''biBZKEllLFZlLGtlKXtpZihWZTwwfHxJZS5ieXRlTGVuZ3RoPFZlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihJZS5ieXRlTGVuZ3RoPFZlKyhrZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91''@;'; put 'put ''dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBBZTtyZXR1cm4gQWU9dm9pZCAwPT09VmUmJnZvaWQgMD09PWtlP25ldyBVaW50OEFycmF5KEllKTp2b2lkIDA9PT1rZT9uZXcgVWludDhBcnJheShJZSxWZSk6bmV3IFVpbnQ4QXJyYXkoSWUsVmUsa2UpLE9iamVjdC5zZXRQcm90b3R5cGVP''@;'; put 'put ''ZihBZSxGLnByb3RvdHlwZSksQWV9ZnVuY3Rpb24gZWUoSWUpe2lmKEllPj1CKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitCLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8SWV9ZnVu''@;'; put 'put ''Y3Rpb24gbmUoSWUsVmUpe2lmKEYuaXNCdWZmZXIoSWUpKXJldHVybiBJZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEllKXx8RGUoSWUsQXJyYXlCdWZmZXIpKXJldHVybiBJZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgSWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhl''@;'; put 'put ''ICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIEllKTt2YXIga2U9SWUubGVuZ3RoLEFlPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIUFlJiYw''@;'; put 'put ''PT09a2UpcmV0dXJuIDA7Zm9yKHZhciBfdD0hMTs7KXN3aXRjaChWZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ga2U7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gb3QoSWUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRm''@;'; put 'put ''MTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqa2U7Y2FzZSJoZXgiOnJldHVybiBrZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBYZShJZSkubGVuZ3RoO2RlZmF1bHQ6aWYoX3QpcmV0dXJuIEFlPy0xOm90KEllKS5sZW5ndGg7VmU9KCIiK1ZlKS50b0xvd2VyQ2FzZSgpLF90PSEwfX1m''@;'; put 'put ''dW5jdGlvbiBpZShJZSxWZSxrZSl7dmFyIEFlPSExO2lmKCh2b2lkIDA9PT1WZXx8VmU8MCkmJihWZT0wKSxWZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1rZXx8a2U+dGhpcy5sZW5ndGgpJiYoa2U9dGhpcy5sZW5ndGgpLGtlPD0wKXx8KGtlPj4+PTApPD0oVmU+Pj49MCkpcmV0dXJuIiI7''@;'; put 'put ''Zm9yKEllfHwoSWU9InV0ZjgiKTs7KXN3aXRjaChJZSl7Y2FzZSJoZXgiOnJldHVybiBFKHRoaXMsVmUsa2UpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHgodGhpcyxWZSxrZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIEgodGhpcyxWZSxrZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5''@;'; put 'put ''IjpyZXR1cm4gaih0aGlzLFZlLGtlKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyxWZSxrZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBtKHRoaXMsVmUsa2UpO2RlZmF1bHQ6aWYoQWUpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''VW5rbm93biBlbmNvZGluZzogIitJZSk7SWU9KEllKyIiKS50b0xvd2VyQ2FzZSgpLEFlPSEwfX1mdW5jdGlvbiBsZShJZSxWZSxrZSl7dmFyIEFlPUllW1ZlXTtJZVtWZV09SWVba2VdLEllW2tlXT1BZX1mdW5jdGlvbiBtZShJZSxWZSxrZSxBZSxfdCl7aWYoMD09PUllLmxlbmd0aClyZXR1''@;'; put 'put ''cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGtlPyhBZT1rZSxrZT0wKTprZT4yMTQ3NDgzNjQ3P2tlPTIxNDc0ODM2NDc6a2U8LTIxNDc0ODM2NDgmJihrZT0tMjE0NzQ4MzY0OCksRmUoa2U9K2tlKSYmKGtlPV90PzA6SWUubGVuZ3RoLTEpLGtlPDAmJihrZT1JZS5sZW5ndGgra2UpLGtlPj1J''@;'; put 'put ''ZS5sZW5ndGgpe2lmKF90KXJldHVybi0xO2tlPUllLmxlbmd0aC0xfWVsc2UgaWYoa2U8MCl7aWYoIV90KXJldHVybi0xO2tlPTB9aWYoInN0cmluZyI9PXR5cGVvZiBWZSYmKFZlPUYuZnJvbShWZSxBZSkpLEYuaXNCdWZmZXIoVmUpKXJldHVybiAwPT09VmUubGVuZ3RoPy0xOl9lKEllLFZl''@;'; put 'put ''LGtlLEFlLF90KTtpZigibnVtYmVyIj09dHlwZW9mIFZlKXJldHVybiBWZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP190P1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChJZSxWZSxrZSk6VWludDhBcnJheS5wcm90b3R5cGUu''@;'; put 'put ''bGFzdEluZGV4T2YuY2FsbChJZSxWZSxrZSk6X2UoSWUsW1ZlXSxrZSxBZSxfdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gX2UoSWUsVmUsa2UsQWUsX3Qpe3ZhciBNdCxudD0xLFFlPUllLmxlbmd0aCx1bj1W''@;'; put 'put ''ZS5sZW5ndGg7aWYodm9pZCAwIT09QWUmJigidWNzMiI9PT0oQWU9U3RyaW5nKEFlKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PUFlfHwidXRmMTZsZSI9PT1BZXx8InV0Zi0xNmxlIj09PUFlKSl7aWYoSWUubGVuZ3RoPDJ8fFZlLmxlbmd0aDwyKXJldHVybi0xO250PTIsUWUvPTIsdW4v''@;'; put 'put ''PTIsa2UvPTJ9ZnVuY3Rpb24geXQodHQsSGUpe3JldHVybiAxPT09bnQ/dHRbSGVdOnR0LnJlYWRVSW50MTZCRShIZSpudCl9aWYoX3Qpe3ZhciBEdD0tMTtmb3IoTXQ9a2U7TXQ8UWU7TXQrKylpZih5dChJZSxNdCk9PT15dChWZSwtMT09PUR0PzA6TXQtRHQpKXtpZigtMT09PUR0JiYoRHQ9''@;'; put 'put ''TXQpLE10LUR0KzE9PT11bilyZXR1cm4gRHQqbnR9ZWxzZS0xIT09RHQmJihNdC09TXQtRHQpLER0PS0xfWVsc2UgZm9yKGtlK3VuPlFlJiYoa2U9UWUtdW4pLE10PWtlO010Pj0wO010LS0pe2Zvcih2YXIgaXQ9ITAsJGU9MDskZTx1bjskZSsrKWlmKHl0KEllLE10KyRlKSE9PXl0KFZlLCRl''@;'; put 'put ''KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIE10fXJldHVybi0xfWZ1bmN0aW9uIFRlKEllLFZlLGtlLEFlKXtrZT1OdW1iZXIoa2UpfHwwO3ZhciBfdD1JZS5sZW5ndGgta2U7QWU/KEFlPU51bWJlcihBZSkpPl90JiYoQWU9X3QpOkFlPV90O3ZhciBudD1WZS5sZW5ndGg7QWU+bnQvMiYm''@;'; put 'put ''KEFlPW50LzIpO2Zvcih2YXIgUWU9MDtRZTxBZTsrK1FlKXt2YXIgdW49cGFyc2VJbnQoVmUuc3Vic3RyKDIqUWUsMiksMTYpO2lmKEZlKHVuKSlyZXR1cm4gUWU7SWVba2UrUWVdPXVufXJldHVybiBRZX1mdW5jdGlvbiBTZShJZSxWZSxrZSxBZSl7cmV0dXJuIHplKG90KFZlLEllLmxlbmd0''@;'; put 'put ''aC1rZSksSWUsa2UsQWUpfWZ1bmN0aW9uIGplKEllLFZlLGtlLEFlKXtyZXR1cm4gemUoZnVuY3Rpb24geGUoSWUpe2Zvcih2YXIgVmU9W10sa2U9MDtrZTxJZS5sZW5ndGg7KytrZSlWZS5wdXNoKDI1NSZJZS5jaGFyQ29kZUF0KGtlKSk7cmV0dXJuIFZlfShWZSksSWUsa2UsQWUpfWZ1bmN0''@;'; put 'put ''aW9uIFYoSWUsVmUsa2UsQWUpe3JldHVybiB6ZShYZShWZSksSWUsa2UsQWUpfWZ1bmN0aW9uIHAoSWUsVmUsa2UsQWUpe3JldHVybiB6ZShmdW5jdGlvbiB2ZShJZSxWZSl7Zm9yKHZhciBrZSxBZSxudD1bXSxRZT0wO1FlPEllLmxlbmd0aCYmISgoVmUtPTIpPDApOysrUWUpQWU9KGtlPUll''@;'; put 'put ''LmNoYXJDb2RlQXQoUWUpKT4+OCxudC5wdXNoKGtlJTI1NiksbnQucHVzaChBZSk7cmV0dXJuIG50fShWZSxJZS5sZW5ndGgta2UpLEllLGtlLEFlKX1mdW5jdGlvbiBiKEllLFZlLGtlKXtyZXR1cm4gSS5mcm9tQnl0ZUFycmF5KDA9PT1WZSYma2U9PT1JZS5sZW5ndGg/SWU6SWUuc2xpY2Uo''@;'; put 'put ''VmUsa2UpKX1mdW5jdGlvbiB4KEllLFZlLGtlKXtrZT1NYXRoLm1pbihJZS5sZW5ndGgsa2UpO2Zvcih2YXIgQWU9W10sX3Q9VmU7X3Q8a2U7KXt2YXIgeXQsTXQsRHQsaXQsbnQ9SWVbX3RdLFFlPW51bGwsdW49bnQ+MjM5PzQ6bnQ+MjIzPzM6bnQ+MTkxPzI6MTtpZihfdCt1bjw9a2Upc3dp''@;'; put 'put ''dGNoKHVuKXtjYXNlIDE6bnQ8MTI4JiYoUWU9bnQpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJihpdD0oMzEmbnQpPDw2fDYzJnl0KT4xMjcmJihRZT1pdCk7YnJlYWs7Y2FzZSAzOk10PUllW190KzJdLDEyOD09KDE5MiYoeXQ9SWVbX3QrMV0pKSYmMTI4PT0oMTky''@;'; put 'put ''Jk10KSYmKGl0PSgxNSZudCk8PDEyfCg2MyZ5dCk8PDZ8NjMmTXQpPjIwNDcmJihpdDw1NTI5Nnx8aXQ+NTczNDMpJiYoUWU9aXQpO2JyZWFrO2Nhc2UgNDpNdD1JZVtfdCsyXSxEdD1JZVtfdCszXSwxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJjEyOD09KDE5MiZNdCkmJjEyOD09KDE5MiZE''@;'; put 'put ''dCkmJihpdD0oMTUmbnQpPDwxOHwoNjMmeXQpPDwxMnwoNjMmTXQpPDw2fDYzJkR0KT42NTUzNSYmaXQ8MTExNDExMiYmKFFlPWl0KX1udWxsPT09UWU/KFFlPTY1NTMzLHVuPTEpOlFlPjY1NTM1JiYoQWUucHVzaCgoUWUtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLFFlPTU2MzIwfDEwMjMm''@;'; put 'put ''UWUpLEFlLnB1c2goUWUpLF90Kz11bn1yZXR1cm4gZnVuY3Rpb24gVChJZSl7dmFyIFZlPUllLmxlbmd0aDtpZihWZTw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsSWUpO2Zvcih2YXIga2U9IiIsQWU9MDtBZTxWZTspa2UrPVN0cmluZy5mcm9tQ2hhckNvZGUu''@;'; put 'put ''YXBwbHkoU3RyaW5nLEllLnNsaWNlKEFlLEFlKz1DKSk7cmV0dXJuIGtlfShBZSl9WC5rTWF4TGVuZ3RoPUIsIShGLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdygpe3RyeXt2YXIgSWU9bmV3IFVpbnQ4QXJyYXkoMSksVmU9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVy''@;'; put 'put ''biBPYmplY3Quc2V0UHJvdG90eXBlT2YoVmUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihJZSxWZSksNDI9PT1JZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9y''@;'; put 'put ''JiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoRi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe2lmKEYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxGLnBvb2xTaXplPTgxOTIsRi5mcm9tPWZ1bmN0aW9uKEllLFZlLGtlKXtyZXR1cm4gTyhJZSxWZSxrZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihGLnByb3RvdHlwZSxVaW50''@;'; put 'put ''OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKEYsVWludDhBcnJheSksRi5hbGxvYz1mdW5jdGlvbihJZSxWZSxrZSl7cmV0dXJuIGZ1bmN0aW9uIE4oSWUsVmUsa2Upe3JldHVybiB6KEllKSxJZTw9MD9QKEllKTp2b2lkIDAhPT1WZT8ic3RyaW5nIj09dHlwZW9mIGtl''@;'; put 'put ''P1AoSWUpLmZpbGwoVmUsa2UpOlAoSWUpLmZpbGwoVmUpOlAoSWUpfShJZSxWZSxrZSl9LEYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oSWUpe3JldHVybiBMKEllKX0sRi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oSWUpe3JldHVybiBMKEllKX0sRi5pc0J1ZmZlcj1mdW5jdGlvbihWZSl7cmV0''@;'; put 'put ''dXJuIG51bGwhPVZlJiYhMD09PVZlLl9pc0J1ZmZlciYmVmUhPT1GLnByb3RvdHlwZX0sRi5jb21wYXJlPWZ1bmN0aW9uKFZlLGtlKXtpZihEZShWZSxVaW50OEFycmF5KSYmKFZlPUYuZnJvbShWZSxWZS5vZmZzZXQsVmUuYnl0ZUxlbmd0aCkpLERlKGtlLFVpbnQ4QXJyYXkpJiYoa2U9Ri5m''@;'; put 'put ''cm9tKGtlLGtlLm9mZnNldCxrZS5ieXRlTGVuZ3RoKSksIUYuaXNCdWZmZXIoVmUpfHwhRi5pc0J1ZmZlcihrZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoVmU9''@;'; put 'put ''PT1rZSlyZXR1cm4gMDtmb3IodmFyIEFlPVZlLmxlbmd0aCxfdD1rZS5sZW5ndGgsbnQ9MCxRZT1NYXRoLm1pbihBZSxfdCk7bnQ8UWU7KytudClpZihWZVtudF0hPT1rZVtudF0pe0FlPVZlW250XSxfdD1rZVtudF07YnJlYWt9cmV0dXJuIEFlPF90Py0xOl90PEFlPzE6MH0sRi5pc0VuY29k''@;'; put 'put ''aW5nPWZ1bmN0aW9uKFZlKXtzd2l0Y2goU3RyaW5nKFZlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRm''@;'; put 'put ''MTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEYuY29uY2F0PWZ1bmN0aW9uKFZlLGtlKXtpZighQXJyYXkuaXNBcnJheShWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lm''@;'; put 'put ''KDA9PT1WZS5sZW5ndGgpcmV0dXJuIEYuYWxsb2MoMCk7dmFyIEFlO2lmKHZvaWQgMD09PWtlKWZvcihrZT0wLEFlPTA7QWU8VmUubGVuZ3RoOysrQWUpa2UrPVZlW0FlXS5sZW5ndGg7dmFyIF90PUYuYWxsb2NVbnNhZmUoa2UpLG50PTA7Zm9yKEFlPTA7QWU8VmUubGVuZ3RoOysrQWUpe3Zh''@;'; put 'put ''ciBRZT1WZVtBZV07aWYoRGUoUWUsVWludDhBcnJheSkpbnQrUWUubGVuZ3RoPl90Lmxlbmd0aD9GLmZyb20oUWUpLmNvcHkoX3QsbnQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKF90LFFlLG50KTtlbHNle2lmKCFGLmlzQnVmZmVyKFFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCci''@;'; put 'put ''bGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7UWUuY29weShfdCxudCl9bnQrPVFlLmxlbmd0aH1yZXR1cm4gX3R9LEYuYnl0ZUxlbmd0aD1uZSxGLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsRi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIFZlPXRo''@;'; put 'put ''aXMubGVuZ3RoO2lmKFZlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBrZT0wO2tlPFZlO2tlKz0yKWxlKHRoaXMsa2Usa2UrMSk7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnN3YXAzMj1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIga2U9MDtrZTxWZTtrZSs9NClsZSh0aGlzLGtlLGtlKzMpLGxlKHRoaXMsa2UrMSxrZSsyKTty''@;'; put 'put ''ZXR1cm4gdGhpc30sRi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubGVuZ3RoO2lmKFZlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBrZT0wO2tlPFZlO2tlKz04KWxl''@;'; put 'put ''KHRoaXMsa2Usa2UrNyksbGUodGhpcyxrZSsxLGtlKzYpLGxlKHRoaXMsa2UrMixrZSs1KSxsZSh0aGlzLGtlKzMsa2UrNCk7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPUYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiAwPT09VmU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/eCh0aGlzLDAsVmUpOmllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKFZlKXtpZighRi5pc0J1ZmZlcihWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBh''@;'; put 'put ''IEJ1ZmZlciIpO3JldHVybiB0aGlzPT09VmV8fDA9PT1GLmNvbXBhcmUodGhpcyxWZSl9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgVmU9IiIsa2U9WC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gVmU9dGhpcy50b1N0cmluZygiaGV4IiwwLGtlKS5yZXBsYWNlKC8oLnsy''@;'; put 'put ''fSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmtlJiYoVmUrPSIgLi4uICIpLCI8QnVmZmVyICIrVmUrIj4ifSxnJiYoRi5wcm90b3R5cGVbZ109Ri5wcm90b3R5cGUuaW5zcGVjdCksRi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihWZSxrZSxBZSxfdCxudCl7aWYoRGUoVmUsVWlu''@;'; put 'put ''dDhBcnJheSkmJihWZT1GLmZyb20oVmUsVmUub2Zmc2V0LFZlLmJ5dGVMZW5ndGgpKSwhRi5pc0J1ZmZlcihWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUg''@;'; put 'put ''Jyt0eXBlb2YgVmUpO2lmKHZvaWQgMD09PWtlJiYoa2U9MCksdm9pZCAwPT09QWUmJihBZT1WZT9WZS5sZW5ndGg6MCksdm9pZCAwPT09X3QmJihfdD0wKSx2b2lkIDA9PT1udCYmKG50PXRoaXMubGVuZ3RoKSxrZTwwfHxBZT5WZS5sZW5ndGh8fF90PDB8fG50PnRoaXMubGVuZ3RoKXRocm93''@;'; put 'put ''IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihfdD49bnQmJmtlPj1BZSlyZXR1cm4gMDtpZihfdD49bnQpcmV0dXJuLTE7aWYoa2U+PUFlKXJldHVybiAxO2lmKHRoaXM9PT1WZSlyZXR1cm4gMDtmb3IodmFyIFFlPShudD4+Pj0wKS0oX3Q+Pj49MCksdW49KEFlPj4+''@;'; put 'put ''PTApLShrZT4+Pj0wKSx5dD1NYXRoLm1pbihRZSx1biksTXQ9dGhpcy5zbGljZShfdCxudCksRHQ9VmUuc2xpY2Uoa2UsQWUpLGl0PTA7aXQ8eXQ7KytpdClpZihNdFtpdF0hPT1EdFtpdF0pe1FlPU10W2l0XSx1bj1EdFtpdF07YnJlYWt9cmV0dXJuIFFlPHVuPy0xOnVuPFFlPzE6MH0sRi5w''@;'; put 'put ''cm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKFZlLGtlLEFlKX0sRi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIG1lKHRoaXMsVmUsa2UsQWUsITApfSxGLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1m''@;'; put 'put ''dW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIG1lKHRoaXMsVmUsa2UsQWUsITEpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7aWYodm9pZCAwPT09a2UpX3Q9InV0ZjgiLEFlPXRoaXMubGVuZ3RoLGtlPTA7ZWxzZSBpZih2b2lkIDA9PT1BZSYmInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBrZSlfdD1rZSxBZT10aGlzLmxlbmd0aCxrZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGtlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7a2U+Pj49MCxpc0Zpbml0ZShB''@;'; put 'put ''ZSk/KEFlPj4+PTAsdm9pZCAwPT09X3QmJihfdD0idXRmOCIpKTooX3Q9QWUsQWU9dm9pZCAwKX12YXIgbnQ9dGhpcy5sZW5ndGgta2U7aWYoKHZvaWQgMD09PUFlfHxBZT5udCkmJihBZT1udCksVmUubGVuZ3RoPjAmJihBZTwwfHxrZTwwKXx8a2U+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7X3R8fChfdD0idXRmOCIpO2Zvcih2YXIgUWU9ITE7Oylzd2l0Y2goX3Qpe2Nhc2UiaGV4IjpyZXR1cm4gVGUodGhpcyxWZSxrZSxBZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gU2UodGhp''@;'; put 'put ''cyxWZSxrZSxBZSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gamUodGhpcyxWZSxrZSxBZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBWKHRoaXMsVmUsa2UsQWUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpy''@;'; put 'put ''ZXR1cm4gcCh0aGlzLFZlLGtlLEFlKTtkZWZhdWx0OmlmKFFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrX3QpO190PSgiIitfdCkudG9Mb3dlckNhc2UoKSxRZT0hMH19LEYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIi''@;'; put 'put ''LGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEM9NDA5NjtmdW5jdGlvbiBIKEllLFZlLGtlKXt2YXIgQWU9IiI7a2U9TWF0aC5taW4oSWUubGVuZ3RoLGtlKTtmb3IodmFyIF90PVZlO190PGtlOysrX3QpQWUrPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoMTI3JkllW190XSk7cmV0dXJuIEFlfWZ1bmN0aW9uIGooSWUsVmUsa2Upe3ZhciBBZT0iIjtrZT1NYXRoLm1pbihJZS5sZW5ndGgsa2UpO2Zvcih2YXIgX3Q9VmU7X3Q8a2U7KytfdClBZSs9U3RyaW5nLmZyb21DaGFyQ29kZShJZVtfdF0pO3JldHVybiBBZX1mdW5jdGlvbiBFKEll''@;'; put 'put ''LFZlLGtlKXt2YXIgQWU9SWUubGVuZ3RoOyghVmV8fFZlPDApJiYoVmU9MCksKCFrZXx8a2U8MHx8a2U+QWUpJiYoa2U9QWUpO2Zvcih2YXIgX3Q9IiIsbnQ9VmU7bnQ8a2U7KytudClfdCs9T2VbSWVbbnRdXTtyZXR1cm4gX3R9ZnVuY3Rpb24gbShJZSxWZSxrZSl7Zm9yKHZhciBBZT1JZS5z''@;'; put 'put ''bGljZShWZSxrZSksX3Q9IiIsbnQ9MDtudDxBZS5sZW5ndGgtMTtudCs9MilfdCs9U3RyaW5nLmZyb21DaGFyQ29kZShBZVtudF0rMjU2KkFlW250KzFdKTtyZXR1cm4gX3R9ZnVuY3Rpb24gQShJZSxWZSxrZSl7aWYoSWUlMSE9MHx8SWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0''@;'; put 'put ''IGlzIG5vdCB1aW50Iik7aWYoSWUrVmU+a2UpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBhZShJZSxWZSxrZSxBZSxfdCxudCl7aWYoIUYuaXNCdWZmZXIoSWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZm''@;'; put 'put ''ZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihWZT5fdHx8VmU8bnQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGtlK0FlPkllLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0''@;'; put 'put ''IG9mIHJhbmdlIil9ZnVuY3Rpb24gdGUoSWUsVmUsa2UsQWUsX3QsbnQpe2lmKGtlK0FlPkllLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoa2U8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24g''@;'; put 'put ''c2UoSWUsVmUsa2UsQWUsX3Qpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxfdHx8dGUoSWUsMCxrZSw0KSxfLndyaXRlKEllLFZlLGtlLEFlLDIzLDQpLGtlKzR9ZnVuY3Rpb24gd2UoSWUsVmUsa2UsQWUsX3Qpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxfdHx8dGUoSWUsMCxrZSw4KSxfLndyaXRl''@;'; put 'put ''KEllLFZlLGtlLEFlLDUyLDgpLGtlKzh9Ri5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oVmUsa2Upe3ZhciBBZT10aGlzLmxlbmd0aDsoVmU9fn5WZSk8MD8oVmUrPUFlKTwwJiYoVmU9MCk6VmU+QWUmJihWZT1BZSksKGtlPXZvaWQgMD09PWtlP0FlOn5+a2UpPDA/KGtlKz1BZSk8MCYmKGtl''@;'; put 'put ''PTApOmtlPkFlJiYoa2U9QWUpLGtlPFZlJiYoa2U9VmUpO3ZhciBfdD10aGlzLnN1YmFycmF5KFZlLGtlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKF90LEYucHJvdG90eXBlKSxfdH0sRi5wcm90b3R5cGUucmVhZFVpbnRMRT1GLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9u''@;'; put 'put ''KFZlLGtlLEFlKXtWZT4+Pj0wLGtlPj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tWZV0sbnQ9MSxRZT0wOysrUWU8a2UmJihudCo9MjU2KTspX3QrPXRoaXNbVmUrUWVdKm50O3JldHVybiBfdH0sRi5wcm90b3R5cGUucmVhZFVpbnRCRT1GLnByb3RvdHlw''@;'; put 'put ''ZS5yZWFkVUludEJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtWZT4+Pj0wLGtlPj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tWZSstLWtlXSxudD0xO2tlPjAmJihudCo9MjU2KTspX3QrPXRoaXNbVmUrLS1rZV0qbnQ7cmV0dXJuIF90fSxGLnByb3RvdHlwZS5y''@;'; put 'put ''ZWFkVWludDg9Ri5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSwxLHRoaXMubGVuZ3RoKSx0aGlzW1ZlXX0sRi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPUYucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihWZSxrZSl7cmV0''@;'; put 'put ''dXJuIFZlPj4+PTAsa2V8fEEoVmUsMix0aGlzLmxlbmd0aCksdGhpc1tWZV18dGhpc1tWZSsxXTw8OH0sRi5wcm90b3R5cGUucmVhZFVpbnQxNkJFPUYucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsMix0aGlzLmxlbmd0aCks''@;'; put 'put ''dGhpc1tWZV08PDh8dGhpc1tWZSsxXX0sRi5wcm90b3R5cGUucmVhZFVpbnQzMkxFPUYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksKHRoaXNbVmVdfHRoaXNbVmUrMV08PDh8dGhpc1tWZSsyXTw8''@;'; put 'put ''MTYpKzE2Nzc3MjE2KnRoaXNbVmUrM119LEYucHJvdG90eXBlLnJlYWRVaW50MzJCRT1GLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbVmVdKyh0aGlzW1ZlKzFdPDwxNnx0''@;'; put 'put ''aGlzW1ZlKzJdPDw4fHRoaXNbVmUrM10pfSxGLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oVmUsa2UsQWUpe1ZlPj4+PTAsa2U+Pj49MCxBZXx8QShWZSxrZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD10aGlzW1ZlXSxudD0xLFFlPTA7KytRZTxrZSYmKG50Kj0yNTYpOylfdCs9dGhp''@;'; put 'put ''c1tWZStRZV0qbnQ7cmV0dXJuIF90Pj0obnQqPTEyOCkmJihfdC09TWF0aC5wb3coMiw4KmtlKSksX3R9LEYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PWtlLG50PTEsUWU9''@;'; put 'put ''dGhpc1tWZSstLV90XTtfdD4wJiYobnQqPTI1Nik7KVFlKz10aGlzW1ZlKy0tX3RdKm50O3JldHVybiBRZT49KG50Kj0xMjgpJiYoUWUtPU1hdGgucG93KDIsOCprZSkpLFFlfSxGLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsMSx0''@;'; put 'put ''aGlzLmxlbmd0aCksMTI4JnRoaXNbVmVdPy0xKigyNTUtdGhpc1tWZV0rMSk6dGhpc1tWZV19LEYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKFZlLGtlKXtWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpO3ZhciBBZT10aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4O3JldHVybiAz''@;'; put 'put ''Mjc2OCZBZT80Mjk0OTAxNzYwfEFlOkFlfSxGLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihWZSxrZSl7VmU+Pj49MCxrZXx8QShWZSwyLHRoaXMubGVuZ3RoKTt2YXIgQWU9dGhpc1tWZSsxXXx0aGlzW1ZlXTw8ODtyZXR1cm4gMzI3NjgmQWU/NDI5NDkwMTc2MHxBZTpBZX0sRi5w''@;'; put 'put ''cm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLHRoaXNbVmVdfHRoaXNbVmUrMV08PDh8dGhpc1tWZSsyXTw8MTZ8dGhpc1tWZSszXTw8MjR9LEYucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKFZl''@;'; put 'put ''LGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSx0aGlzW1ZlXTw8MjR8dGhpc1tWZSsxXTw8MTZ8dGhpc1tWZSsyXTw8OHx0aGlzW1ZlKzNdfSxGLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0''@;'; put 'put ''aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITAsMjMsNCl9LEYucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSxfLnJlYWQodGhpcyxWZSwhMSwyMyw0KX0sRi5wcm90b3R5cGUucmVhZERvdWJsZUxF''@;'; put 'put ''PWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw4LHRoaXMubGVuZ3RoKSxfLnJlYWQodGhpcyxWZSwhMCw1Miw4KX0sRi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw4LHRoaXMubGVuZ3RoKSxfLnJl''@;'; put 'put ''YWQodGhpcyxWZSwhMSw1Miw4KX0sRi5wcm90b3R5cGUud3JpdGVVaW50TEU9Ri5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe1ZlPStWZSxrZT4+Pj0wLEFlPj4+PTAsX3R8fGFlKHRoaXMsVmUsa2UsQWUsTWF0aC5wb3coMiw4KkFlKS0xLDApO3ZhciBRZT0x''@;'; put 'put ''LHVuPTA7Zm9yKHRoaXNba2VdPTI1NSZWZTsrK3VuPEFlJiYoUWUqPTI1Nik7KXRoaXNba2UrdW5dPVZlL1FlJjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90eXBlLndyaXRlVWludEJFPUYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtWZT0rVmUsa2U+Pj49''@;'; put 'put ''MCxBZT4+Pj0wLF90fHxhZSh0aGlzLFZlLGtlLEFlLE1hdGgucG93KDIsOCpBZSktMSwwKTt2YXIgUWU9QWUtMSx1bj0xO2Zvcih0aGlzW2tlK1FlXT0yNTUmVmU7LS1RZT49MCYmKHVuKj0yNTYpOyl0aGlzW2tlK1FlXT1WZS91biYyNTU7cmV0dXJuIGtlK0FlfSxGLnByb3RvdHlwZS53cml0''@;'; put 'put ''ZVVpbnQ4PUYucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSwxLDI1NSwwKSx0aGlzW2tlXT0yNTUmVmUsa2UrMX0sRi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1GLnByb3RvdHlwZS53cml0ZVVJ''@;'; put 'put ''bnQxNkxFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsMiw2NTUzNSwwKSx0aGlzW2tlXT0yNTUmVmUsdGhpc1trZSsxXT1WZT4+Pjgsa2UrMn0sRi5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1GLnByb3RvdHlwZS53cml0ZVVJbnQx''@;'; put 'put ''NkJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsMiw2NTUzNSwwKSx0aGlzW2tlXT1WZT4+PjgsdGhpc1trZSsxXT0yNTUmVmUsa2UrMn0sRi5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1GLnByb3RvdHlwZS53cml0ZVVJbnQzMkxF''@;'; put 'put ''PWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsNCw0Mjk0OTY3Mjk1LDApLHRoaXNba2UrM109VmU+Pj4yNCx0aGlzW2tlKzJdPVZlPj4+MTYsdGhpc1trZSsxXT1WZT4+PjgsdGhpc1trZV09MjU1JlZlLGtlKzR9LEYucHJvdG90eXBl''@;'; put 'put ''LndyaXRlVWludDMyQkU9Ri5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2tlXT1WZT4+PjI0LHRoaXNba2UrMV09VmU+Pj4xNix0aGlzW2tlKzJdPVZl''@;'; put 'put ''Pj4+OCx0aGlzW2tlKzNdPTI1NSZWZSxrZSs0fSxGLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZihWZT0rVmUsa2U+Pj49MCwhX3Qpe3ZhciBudD1NYXRoLnBvdygyLDgqQWUtMSk7YWUodGhpcyxWZSxrZSxBZSxudC0xLC1udCl9dmFyIFFlPTAsdW49MSx5''@;'; put 'put ''dD0wO2Zvcih0aGlzW2tlXT0yNTUmVmU7KytRZTxBZSYmKHVuKj0yNTYpOylWZTwwJiYwPT09eXQmJjAhPT10aGlzW2tlK1FlLTFdJiYoeXQ9MSksdGhpc1trZStRZV09KFZlL3VufDApLXl0JjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oVmUsa2Us''@;'; put 'put ''QWUsX3Qpe2lmKFZlPStWZSxrZT4+Pj0wLCFfdCl7dmFyIG50PU1hdGgucG93KDIsOCpBZS0xKTthZSh0aGlzLFZlLGtlLEFlLG50LTEsLW50KX12YXIgUWU9QWUtMSx1bj0xLHl0PTA7Zm9yKHRoaXNba2UrUWVdPTI1NSZWZTstLVFlPj0wJiYodW4qPTI1Nik7KVZlPDAmJjA9PT15dCYmMCE9''@;'; put 'put ''PXRoaXNba2UrUWUrMV0mJih5dD0xKSx0aGlzW2tlK1FlXT0oVmUvdW58MCkteXQmMjU1O3JldHVybiBrZStBZX0sRi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsMSwxMjcsLTEyOCksVmU8MCYm''@;'; put 'put ''KFZlPTI1NStWZSsxKSx0aGlzW2tlXT0yNTUmVmUsa2UrMX0sRi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsMiwzMjc2NywtMzI3NjgpLHRoaXNba2VdPTI1NSZWZSx0aGlzW2tlKzFdPVZl''@;'; put 'put ''Pj4+OCxrZSsyfSxGLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSwyLDMyNzY3LC0zMjc2OCksdGhpc1trZV09VmU+Pj44LHRoaXNba2UrMV09MjU1JlZlLGtlKzJ9LEYucHJvdG90eXBlLndy''@;'; put 'put ''aXRlSW50MzJMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1trZV09MjU1JlZlLHRoaXNba2UrMV09VmU+Pj44LHRoaXNba2UrMl09VmU+Pj4xNix0aGlzW2tlKzNdPVZlPj4+''@;'; put 'put ''MjQsa2UrNH0sRi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxWZTwwJiYoVmU9NDI5NDk2NzI5NStWZSsxKSx0aGlzW2tlXT1WZT4+PjI0LHRo''@;'; put 'put ''aXNba2UrMV09VmU+Pj4xNix0aGlzW2tlKzJdPVZlPj4+OCx0aGlzW2tlKzNdPTI1NSZWZSxrZSs0fSxGLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBzZSh0aGlzLFZlLGtlLCEwLEFlKX0sRi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9u''@;'; put 'put ''KFZlLGtlLEFlKXtyZXR1cm4gc2UodGhpcyxWZSxrZSwhMSxBZSl9LEYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiB3ZSh0aGlzLFZlLGtlLCEwLEFlKX0sRi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJu''@;'; put 'put ''IHdlKHRoaXMsVmUsa2UsITEsQWUpfSxGLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZighRi5pc0J1ZmZlcihWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoQWV8fChBZT0wKSwhX3QmJjAhPT1fdCYmKF90PXRo''@;'; put 'put ''aXMubGVuZ3RoKSxrZT49VmUubGVuZ3RoJiYoa2U9VmUubGVuZ3RoKSxrZXx8KGtlPTApLF90PjAmJl90PEFlJiYoX3Q9QWUpLF90PT09QWV8fDA9PT1WZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihrZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBv''@;'; put 'put ''dXQgb2YgYm91bmRzIik7aWYoQWU8MHx8QWU+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihfdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO190PnRoaXMubGVuZ3RoJiYoX3Q9dGhpcy5s''@;'; put 'put ''ZW5ndGgpLFZlLmxlbmd0aC1rZTxfdC1BZSYmKF90PVZlLmxlbmd0aC1rZStBZSk7dmFyIG50PV90LUFlO3JldHVybiB0aGlzPT09VmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihrZSxBZSxfdCk6VWludDhBcnJh''@;'; put 'put ''eS5wcm90b3R5cGUuc2V0LmNhbGwoVmUsdGhpcy5zdWJhcnJheShBZSxfdCksa2UpLG50fSxGLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZigic3RyaW5nIj09dHlwZW9mIFZlKXtpZigic3RyaW5nIj09dHlwZW9mIGtlPyhfdD1rZSxrZT0wLEFlPXRoaXMubGVuZ3Ro''@;'; put 'put ''KToic3RyaW5nIj09dHlwZW9mIEFlJiYoX3Q9QWUsQWU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PV90JiYic3RyaW5nIiE9dHlwZW9mIF90KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIF90JiYhRi5pc0VuY29kaW5n''@;'; put 'put ''KF90KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK190KTtpZigxPT09VmUubGVuZ3RoKXt2YXIgbnQ9VmUuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09X3QmJm50PDEyOHx8ImxhdGluMSI9PT1fdCkmJihWZT1udCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIFZlP1Zl''@;'; put 'put ''Jj0yNTU6ImJvb2xlYW4iPT10eXBlb2YgVmUmJihWZT1OdW1iZXIoVmUpKTtpZihrZTwwfHx0aGlzLmxlbmd0aDxrZXx8dGhpcy5sZW5ndGg8QWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKEFlPD1rZSlyZXR1cm4gdGhpczt2YXIgUWU7aWYoa2U+Pj49''@;'; put 'put ''MCxBZT12b2lkIDA9PT1BZT90aGlzLmxlbmd0aDpBZT4+PjAsVmV8fChWZT0wKSwibnVtYmVyIj09dHlwZW9mIFZlKWZvcihRZT1rZTtRZTxBZTsrK1FlKXRoaXNbUWVdPVZlO2Vsc2V7dmFyIHVuPUYuaXNCdWZmZXIoVmUpP1ZlOkYuZnJvbShWZSxfdCkseXQ9dW4ubGVuZ3RoO2lmKDA9PT15''@;'; put 'put ''dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrVmUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihRZT0wO1FlPEFlLWtlOysrUWUpdGhpc1tRZStrZV09dW5bUWUleXRdfXJldHVybiB0aGlzfTt2YXIgVWU9L1teKy8wLTlBLVphLXotX10vZztmdW5j''@;'; put 'put ''dGlvbiBvdChJZSxWZSl7VmU9VmV8fDEvMDtmb3IodmFyIGtlLEFlPUllLmxlbmd0aCxfdD1udWxsLG50PVtdLFFlPTA7UWU8QWU7KytRZSl7aWYoKGtlPUllLmNoYXJDb2RlQXQoUWUpKT41NTI5NSYma2U8NTczNDQpe2lmKCFfdCl7aWYoa2U+NTYzMTkpeyhWZS09Myk+LTEmJm50LnB1c2go''@;'; put 'put ''MjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFFlKzE9PT1BZSl7KFZlLT0zKT4tMSYmbnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9X3Q9a2U7Y29udGludWV9aWYoa2U8NTYzMjApeyhWZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpLF90PWtlO2NvbnRpbnVlfWtlPTY1NTM2Kyhf''@;'; put 'put ''dC01NTI5Njw8MTB8a2UtNTYzMjApfWVsc2UgX3QmJihWZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2lmKF90PW51bGwsa2U8MTI4KXtpZigoVmUtPTEpPDApYnJlYWs7bnQucHVzaChrZSl9ZWxzZSBpZihrZTwyMDQ4KXtpZigoVmUtPTIpPDApYnJlYWs7bnQucHVzaChrZT4+Nnwx''@;'; put 'put ''OTIsNjMma2V8MTI4KX1lbHNlIGlmKGtlPDY1NTM2KXtpZigoVmUtPTMpPDApYnJlYWs7bnQucHVzaChrZT4+MTJ8MjI0LGtlPj42JjYzfDEyOCw2MyZrZXwxMjgpfWVsc2V7aWYoIShrZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChWZS09NCk8''@;'; put 'put ''MClicmVhaztudC5wdXNoKGtlPj4xOHwyNDAsa2U+PjEyJjYzfDEyOCxrZT4+NiY2M3wxMjgsNjMma2V8MTI4KX19cmV0dXJuIG50fWZ1bmN0aW9uIFhlKEllKXtyZXR1cm4gSS50b0J5dGVBcnJheShmdW5jdGlvbiBKZShJZSl7aWYoKEllPShJZT1JZS5zcGxpdCgiPSIpWzBdKS50cmltKCku''@;'; put 'put ''cmVwbGFjZShVZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7SWUubGVuZ3RoJTQhPTA7KUllKz0iPSI7cmV0dXJuIEllfShJZSkpfWZ1bmN0aW9uIHplKEllLFZlLGtlLEFlKXtmb3IodmFyIF90PTA7X3Q8QWUmJiEoX3Qra2U+PVZlLmxlbmd0aHx8X3Q+PUllLmxlbmd0aCk7KytfdClW''@;'; put 'put ''ZVtfdCtrZV09SWVbX3RdO3JldHVybiBfdH1mdW5jdGlvbiBEZShJZSxWZSl7cmV0dXJuIEllIGluc3RhbmNlb2YgVmV8fG51bGwhPUllJiZudWxsIT1JZS5jb25zdHJ1Y3RvciYmbnVsbCE9SWUuY29uc3RydWN0b3IubmFtZSYmSWUuY29uc3RydWN0b3IubmFtZT09PVZlLm5hbWV9ZnVuY3Rp''@;'; put 'put ''b24gRmUoSWUpe3JldHVybiBJZSE9SWV9dmFyIE9lPWZ1bmN0aW9uKCl7Zm9yKHZhciBJZT0iMDEyMzQ1Njc4OWFiY2RlZiIsVmU9bmV3IEFycmF5KDI1Niksa2U9MDtrZTwxNjsrK2tlKWZvcih2YXIgQWU9MTYqa2UsX3Q9MDtfdDwxNjsrK190KVZlW0FlK190XT1JZVtrZV0rSWVbX3RdO3Jl''@;'; put 'put ''dHVybiBWZX0oKX0sMzI0NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDcwNDUpLlRyYW5zZm9ybSxnPXkoNzg0NTQpLkk7ZnVuY3Rpb24gdyh6KXtfLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIHosdGhpcy5oYXNo''@;'; put 'put ''TW9kZT90aGlzW3pdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXkoNzE5''@;'; put 'put ''OTMpKHcsXyk7dmFyIFA9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7''@;'; put 'put ''dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHosTixMKXt2YXIgSz1mdW5jdGlvbiBPKHosTil7aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20oeixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5''@;'; put 'put ''dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIEw9SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9mZnNldCx6LmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihQJiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5j''@;'; put 'put ''b25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHouY29uc3RydWN0b3IuaXNCdWZmZXImJnouY29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3Ig''@;'; put 'put ''YW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxVPXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihMJiYoVT10aGlzLl90b1N0cmluZyhVLEwpKSxVKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rp''@;'; put 'put ''b24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRv''@;'; put 'put ''IHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLEwp''@;'; put 'put ''e3ZhciBLO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHopKX1jYXRjaChVKXtLPVV9ZmluYWxseXtMKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNh''@;'; put 'put ''dGNoKEwpe049TH16KE4pfSx3LnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixM''@;'; put 'put ''KXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgZyhOKSx0aGlzLl9lbmNvZGluZz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBM''@;'; put 'put ''JiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30sdWUuZXhwb3J0cz13fSwyNzYzNzoodWUsWCx5KT0+e2Z1bmN0aW9uIFkocSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChxKX1YLmlzQXJyYXk9ZnVuY3Rpb24gSShxKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJh''@;'; put 'put ''eS5pc0FycmF5KHEpOiJbb2JqZWN0IEFycmF5XSI9PT1ZKHEpfSxYLmlzQm9vbGVhbj1mdW5jdGlvbiBfKHEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHF9LFguaXNOdWxsPWZ1bmN0aW9uIGcocSl7cmV0dXJuIG51bGw9PT1xfSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIEIocSl7''@;'; put 'put ''cmV0dXJuIG51bGw9PXF9LFguaXNOdW1iZXI9ZnVuY3Rpb24gdyhxKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHF9LFguaXNTdHJpbmc9ZnVuY3Rpb24gUChxKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHF9LFguaXNTeW1ib2w9ZnVuY3Rpb24gRihxKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IHF9LFguaXNVbmRlZmluZWQ9ZnVuY3Rpb24gTyhxKXtyZXR1cm4gdm9pZCAwPT09cX0sWC5pc1JlZ0V4cD1mdW5jdGlvbiB6KHEpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09WShxKX0sWC5pc09iamVjdD1mdW5jdGlvbiBOKHEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgcSYmbnVsbCE9''@;'; put 'put ''PXF9LFguaXNEYXRlPWZ1bmN0aW9uIEwocSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09WShxKX0sWC5pc0Vycm9yPWZ1bmN0aW9uIEsocSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PVkocSl8fHEgaW5zdGFuY2VvZiBFcnJvcn0sWC5pc0Z1bmN0aW9uPWZ1bmN0aW9uIFUocSl7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIHF9LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gVyhxKXtyZXR1cm4gbnVsbD09PXF8fCJib29sZWFuIj09dHlwZW9mIHF8fCJudW1iZXIiPT10eXBlb2YgcXx8InN0cmluZyI9PXR5cGVvZiBxfHwic3ltYm9sIj09dHlwZW9mIHF8fHR5cGVvZiBxPiJ1In0sWC5p''@;'; put 'put ''c0J1ZmZlcj15KDgzODM4KS5CdWZmZXIuaXNCdWZmZXJ9LDg3MzAzOih1ZSxYLHkpPT57dmFyIEk9eSg5MDUxOCksXz15KDg5NjA2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3JldHVybiBuZXcgQihGKX07dmFyIGc9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMy''@;'; put 'put ''fSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRy''@;'; put 'put ''MTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gQihQKXt0aGlzLmN1cnZlVHlwZT1nW1BdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6UH0pLHRoaXMuY3VydmU9bmV3IEkuZWMo''@;'; put 'put ''dGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiB3KFAsRixPKXtBcnJheS5pc0FycmF5KFApfHwoUD1QLnRvQXJyYXkoKSk7dmFyIHo9bmV3IEJ1ZmZlcihQKTtpZihPJiZ6Lmxlbmd0aDxPKXt2YXIgTj1uZXcgQnVmZmVyKE8tei5sZW5ndGgpO04uZmlsbCgw''@;'; put 'put ''KSx6PUJ1ZmZlci5jb25jYXQoW04sel0pfXJldHVybiBGP3oudG9TdHJpbmcoRik6en1nLnAyMjQ9Zy5zZWNwMjI0cjEsZy5wMjU2PWcuc2VjcDI1NnIxPWcucHJpbWUyNTZ2MSxnLnAxOTI9Zy5zZWNwMTkycjE9Zy5wcmltZTE5MnYxLGcucDM4ND1nLnNlY3AzODRyMSxnLnA1MjE9Zy5zZWNw''@;'; put 'put ''NTIxcjEsQi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKFAsRil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShQLEYpfSxCLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRj1GfHwi''@;'; put 'put ''dXRmOCIsQnVmZmVyLmlzQnVmZmVyKFApfHwoUD1uZXcgQnVmZmVyKFAsRikpLHcodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKFApLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksTyx0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sQi5wcm90b3R5cGUu''@;'; put 'put ''Z2V0UHVibGljS2V5PWZ1bmN0aW9uKFAsRil7dmFyIE89dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1GLCEwKTtyZXR1cm4iaHlicmlkIj09PUYmJihPWzBdPU9bTy5sZW5ndGgtMV0lMj83OjYpLHcoTyxQKX0sQi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihQ''@;'; put 'put ''KXtyZXR1cm4gdyh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLFApfSxCLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gRj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFApfHwoUD1uZXcgQnVmZmVyKFAsRikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKFApLHRo''@;'; put 'put ''aXN9LEIucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oUCxGKXtGPUZ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoUCl8fChQPW5ldyBCdWZmZXIoUCxGKSk7dmFyIE89bmV3IF8oUCk7cmV0dXJuIE89Ty50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFp''@;'; put 'put ''cigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShPKSx0aGlzfX0sODk2MDY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixw''@;'; put 'put ''KXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jk''@;'; put 'put ''cz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53''@;'; put 'put ''b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3Nzk2NSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05''@;'; put 'put ''NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5j''@;'; put 'put ''aGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29y''@;'; put 'put ''ZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCku''@;'; put 'put ''cmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4''@;'; put 'put ''ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJv''@;'; put 'put ''dG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1u''@;'; put 'put ''ZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwx''@;'; put 'put ''Nik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8''@;'; put 'put ''aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82''@;'; put 'put ''KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02''@;'; put 'put ''NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndv''@;'; put 'put ''cmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9''@;'; put 'put ''cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09''@;'; put 'put ''eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFy''@;'; put 'put ''cmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''O3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1''@;'; put 'put ''MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0''@;'; put 'put ''ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxl''@;'; put 'put ''bmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0''@;'; put 'put ''aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21d''@;'; put 'put ''PTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jk''@;'; put 'put ''c1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7''@;'; put 'put ''eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2''@;'; put 'put ''YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSIt''@;'; put 'put ''Iit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50''@;'; put 'put ''b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVy''@;'; put 'put ''biB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhU''@;'; put 'put ''PjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7''@;'; put 'put ''bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1''@;'; put 'put ''bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3Ro''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDti''@;'; put 'put ''PHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRu''@;'; put 'put ''KDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jk''@;'; put 'put ''c1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpw''@;'; put 'put ''LmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlz''@;'; put 'put ''Lmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107''@;'; put 'put ''cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7Zygi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlv''@;'; put 'put ''bihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8''@;'; put 'put ''eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7''@;'; put 'put ''eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMu''@;'; put 'put ''d29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09''@;'; put 'put ''dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0w''@;'; put 'put ''fENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVd''@;'; put 'put ''LGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04''@;'; put 'put ''MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZy''@;'; put 'put ''aSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIu''@;'; put 'put ''bmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01h''@;'; put 'put ''dGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2''@;'; put 'put ''ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+''@;'; put 'put ''Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8''@;'; put 'put ''MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+''@;'; put 'put ''Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUs''@;'; put 'put ''eHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxm''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''a2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01h''@;'; put 'put ''dGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1''@;'; put 'put ''dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGor''@;'; put 'put ''KEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmlt''@;'; put 'put ''dWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhl''@;'; put 'put ''LEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhl''@;'; put 'put ''LFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGor''@;'; put 'put ''KEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmlt''@;'; put 'put ''dWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01h''@;'; put 'put ''dGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1''@;'; put 'put ''dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxl''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8''@;'; put 'put ''MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRp''@;'; put 'put ''Jj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhb''@;'; put 'put ''MThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0''@;'; put 'put ''aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYu''@;'; put 'put ''d29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jk''@;'; put 'put ''c1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2''@;'; put 'put ''QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9''@;'; put 'put ''ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUq''@;'; put 'put ''b3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtD''@;'; put 'put ''XTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01h''@;'; put 'put ''dGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4''@;'; put 'put ''WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnBy''@;'; put 'put ''b3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMp''@;'; put 'put ''LGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMu''@;'; put 'put ''dHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9y''@;'; put 'put ''bShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3Au''@;'; put 'put ''bGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4''@;'; put 'put ''PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIs''@;'; put 'put ''dGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBD''@;'; put 'put ''PWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14''@;'; put 'put ''LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1i''@;'; put 'put ''PDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9''@;'; put 'put ''PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxl''@;'; put 'put ''bmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgs''@;'; put 'put ''bT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3Ro''@;'; put 'put ''aXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24o''@;'; put 'put ''cCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''dXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9''@;'; put 'put ''KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKysp''@;'; put 'put ''dGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhp''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0x''@;'; put 'put ''O3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgs''@;'; put 'put ''aj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsr''@;'; put 'put ''KWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRz''@;'; put 'put ''KEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtB''@;'; put 'put ''PG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVu''@;'; put 'put ''Z3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMu''@;'; put 'put ''bmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1pl''@;'; put 'put ''cm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYw''@;'; put 'put ''IT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5l''@;'; put 'put ''Z2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxt''@;'; put 'put ''b2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMu''@;'; put 'put ''bW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1v''@;'; put 'put ''ZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFy''@;'; put 'put ''IHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJv''@;'; put 'put ''dG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEw''@;'; put 'put ''ODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5l''@;'; put 'put ''dyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUp''@;'; put 'put ''JiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwy''@;'; put 'put ''NjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4''@;'; put 'put ''LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdh''@;'; put 'put ''dGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGop''@;'; put 'put ''O2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49''@;'; put 'put ''MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihw''@;'; put 'put ''LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlz''@;'; put 'put ''RXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJv''@;'; put 'put ''dG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBh''@;'; put 'put ''bmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQs''@;'; put 'put ''dGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVy''@;'; put 'put ''bi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0''@;'; put 'put ''dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21w''@;'; put 'put ''KHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7''@;'; put 'put ''eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''bi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9S''@;'; put 'put ''ZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFt''@;'; put 'put ''ZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlv''@;'; put 'put ''biBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0''@;'; put 'put ''aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMu''@;'; put 'put ''cjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3Vi''@;'; put 'put ''KHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0''@;'; put 'put ''KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRo''@;'; put 'put ''aXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSks''@;'; put 'put ''bGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5n''@;'; put 'put ''dGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZw''@;'; put 'put ''Lmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02''@;'; put 'put ''NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUu''@;'; put 'put ''aW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1m''@;'; put 'put ''dW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBw''@;'; put 'put ''cmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5''@;'; put 'put ''cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6''@;'; put 'put ''dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5''@;'; put 'put ''cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7''@;'; put 'put ''cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJv''@;'; put 'put ''dG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''bXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5w''@;'; put 'put ''b3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxt''@;'; put 'put ''PXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMp''@;'; put 'put ''LHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUu''@;'; put 'put ''cmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBl''@;'; put 'put ''LnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5s''@;'; put 'put ''ZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFl''@;'; put 'put ''JjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7''@;'; put 'put ''dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNl''@;'; put 'put ''KSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGws''@;'; put 'put ''Yn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQp''@;'; put 'put ''Lm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJu''@;'; put 'put ''KHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAo''@;'; put 'put ''dGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNjcyMTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTk5MyksXz15KDM0NzI1KSxnPXkoMzY2MzYpLEI9eSgyNTQ0Myksdz15KDMyNDcpO2Z1bmN0aW9uIFAoRil7dy5j''@;'; put 'put ''YWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Rn1JKFAsdyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnVwZGF0ZShGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oTyl7cmV0dXJuIm1kNSI9PT0oTz1PLnRvTG93ZXJDYXNlKCkpP25ldyBfOiJybWQxNjAiPT09T3x8InJpcGVtZDE2MCI9PT1PP25ldyBnOm5ldyBQKEIoTykpfX0sODM0MDc6KHVlLFgseSk9Pnt2YXIgST15KDM0NzI1KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybihuZXcg''@;'; put 'put ''SSkudXBkYXRlKF8pLmRpZ2VzdCgpfX0sNTY0MzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTk5MyksXz15KDkwNTA5KSxnPXkoMzI0NyksQj15KDI3MDU0KS5CdWZmZXIsdz15KDgzNDA3KSxQPXkoMzY2MzYpLEY9eSgyNTQ0MyksTz1CLmFsbG9jKDEyOCk7ZnVuY3Rpb24g''@;'; put 'put ''eihOLEwpe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIEwmJihMPUIuZnJvbShMKSk7dmFyIEs9InNoYTUxMiI9PT1OfHwic2hhMzg0Ij09PU4/MTI4OjY0O3RoaXMuX2FsZz1OLHRoaXMuX2tleT1MLEwubGVuZ3RoPks/TD0oInJtZDE2MCI9PT1OP25ldyBQOkYoTikp''@;'; put 'put ''LnVwZGF0ZShMKS5kaWdlc3QoKTpMLmxlbmd0aDxLJiYoTD1CLmNvbmNhdChbTCxPXSxLKSk7Zm9yKHZhciBXPXRoaXMuX2lwYWQ9Qi5hbGxvY1Vuc2FmZShLKSxZPXRoaXMuX29wYWQ9Qi5hbGxvY1Vuc2FmZShLKSxxPTA7cTxLO3ErKylXW3FdPTU0XkxbcV0sWVtxXT05Ml5MW3FdO3RoaXMu''@;'; put 'put ''X2hhc2g9InJtZDE2MCI9PT1OP25ldyBQOkYoTiksdGhpcy5faGFzaC51cGRhdGUoVyl9SSh6LGcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7dGhpcy5faGFzaC51cGRhdGUoTil9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuX2hhc2guZGlnZXN0''@;'; put 'put ''KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBQOkYodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShOKS5kaWdlc3QoKX0sdWUuZXhwb3J0cz1mdW5jdGlvbihMLEspe3JldHVybiJybWQxNjAiPT09KEw9TC50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9''@;'; put 'put ''PT1MP25ldyB6KCJybWQxNjAiLEspOiJtZDUiPT09TD9uZXcgXyh3LEspOm5ldyB6KEwsSyl9fSw5MDUwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDcxOTkzKSxfPXkoMjcwNTQpLkJ1ZmZlcixnPXkoMzI0NyksQj1fLmFsbG9jKDEyOCksdz02NDtmdW5jdGlvbiBQKEYsTyl7''@;'; put 'put ''Zy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTyYmKE89Xy5mcm9tKE8pKSx0aGlzLl9hbGc9Rix0aGlzLl9rZXk9TyxPLmxlbmd0aD53P089RihPKTpPLmxlbmd0aDx3JiYoTz1fLmNvbmNhdChbTyxCXSx3KSk7Zm9yKHZhciB6PXRoaXMuX2lwYWQ9Xy5hbGxvY1Vuc2Fm''@;'; put 'put ''ZSh3KSxOPXRoaXMuX29wYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxMPTA7TDx3O0wrKyl6W0xdPTU0Xk9bTF0sTltMXT05Ml5PW0xdO3RoaXMuX2hhc2g9W3pdfUkoUCxnKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gucHVzaChGKX0sUC5wcm90b3R5cGUuX2ZpbmFs''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5fYWxnKF8uY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKF8uY29uY2F0KFt0aGlzLl9vcGFkLEZdKSl9LHVlLmV4cG9ydHM9UH0sOTE0MjY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC5yYW5kb21CeXRlcz1YLnJuZz1YLnBzZXVk''@;'; put 'put ''b1JhbmRvbUJ5dGVzPVgucHJuZz15KDMzNDIpLFguY3JlYXRlSGFzaD1YLkhhc2g9eSg2NzIxMSksWC5jcmVhdGVIbWFjPVguSG1hYz15KDU2NDMyKTt2YXIgST15KDk5NTYwKSxfPU9iamVjdC5rZXlzKEkpLGc9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwi''@;'; put 'put ''bWQ1Iiwicm1kMTYwIl0uY29uY2F0KF8pO1guZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGd9O3ZhciBCPXkoOTMzOTcpO1gucGJrZGYyPUIucGJrZGYyLFgucGJrZGYyU3luYz1CLnBia2RmMlN5bmM7dmFyIHc9eSg4ODg2Mik7WC5DaXBoZXI9dy5DaXBoZXIsWC5jcmVhdGVDaXBoZXI9''@;'; put 'put ''dy5jcmVhdGVDaXBoZXIsWC5DaXBoZXJpdj13LkNpcGhlcml2LFguY3JlYXRlQ2lwaGVyaXY9dy5jcmVhdGVDaXBoZXJpdixYLkRlY2lwaGVyPXcuRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcj13LmNyZWF0ZURlY2lwaGVyLFguRGVjaXBoZXJpdj13LkRlY2lwaGVyaXYsWC5jcmVhdGVEZWNp''@;'; put 'put ''cGhlcml2PXcuY3JlYXRlRGVjaXBoZXJpdixYLmdldENpcGhlcnM9dy5nZXRDaXBoZXJzLFgubGlzdENpcGhlcnM9dy5saXN0Q2lwaGVyczt2YXIgUD15KDQzNzcpO1guRGlmZmllSGVsbG1hbkdyb3VwPVAuRGlmZmllSGVsbG1hbkdyb3VwLFguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVAu''@;'; put 'put ''Y3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLFguZ2V0RGlmZmllSGVsbG1hbj1QLmdldERpZmZpZUhlbGxtYW4sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVAuY3JlYXRlRGlmZmllSGVsbG1hbixYLkRpZmZpZUhlbGxtYW49UC5EaWZmaWVIZWxsbWFuO3ZhciBGPXkoNzkxNDMpO1guY3JlYXRlU2ln''@;'; put 'put ''bj1GLmNyZWF0ZVNpZ24sWC5TaWduPUYuU2lnbixYLmNyZWF0ZVZlcmlmeT1GLmNyZWF0ZVZlcmlmeSxYLlZlcmlmeT1GLlZlcmlmeSxYLmNyZWF0ZUVDREg9eSg4NzMwMyk7dmFyIE89eSg1Mjk2NSk7WC5wdWJsaWNFbmNyeXB0PU8ucHVibGljRW5jcnlwdCxYLnByaXZhdGVFbmNyeXB0PU8u''@;'; put 'put ''cHJpdmF0ZUVuY3J5cHQsWC5wdWJsaWNEZWNyeXB0PU8ucHVibGljRGVjcnlwdCxYLnByaXZhdGVEZWNyeXB0PU8ucHJpdmF0ZURlY3J5cHQ7dmFyIHo9eSg5NjgyKTtYLnJhbmRvbUZpbGw9ei5yYW5kb21GaWxsLFgucmFuZG9tRmlsbFN5bmM9ei5yYW5kb21GaWxsU3luYyxYLmNyZWF0ZUNy''@;'; put 'put ''ZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Iil9LFgu''@;'; put 'put ''Y29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJ''@;'; put 'put ''Tkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBS''@;'; put 'put ''RVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMTc2NTY6ZnVuY3Rpb24odWUsWCx5KXt2YXIgSTt1ZS5leHBvcnRzPShJPUl8fGZ1bmN0aW9uKF8sZyl7dmFyIEI7aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG8mJihCPXdpbmRvdy5jcnlwdG8pLHR5cGVvZiBz''@;'; put 'put ''ZWxmPCJ1IiYmc2VsZi5jcnlwdG8mJihCPXNlbGYuY3J5cHRvKSx0eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXMuY3J5cHRvJiYoQj1nbG9iYWxUaGlzLmNyeXB0byksIUImJnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubXNDcnlwdG8mJihCPXdpbmRvdy5tc0NyeXB0byksIUIm''@;'; put 'put ''JnR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWwuY3J5cHRvJiYoQj1nbG9iYWwuY3J5cHRvKSwhQil0cnl7Qj15KDkxNDI2KX1jYXRjaHt9dmFyIHc9ZnVuY3Rpb24oKXtpZihCKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQi5nZXRSYW5kb21WYWx1ZXMpdHJ5e3JldHVybiBCLmdldFJhbmRvbVZh''@;'; put 'put ''bHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2YgQi5yYW5kb21CeXRlcyl0cnl7cmV0dXJuIEIucmFuZG9tQnl0ZXMoNCkucmVhZEludDMyTEUoKX1jYXRjaHt9fXRocm93IG5ldyBFcnJvcigiTmF0aXZlIGNyeXB0byBtb2R1bGUgY291bGQg''@;'; put 'put ''bm90IGJlIHVzZWQgdG8gZ2V0IHNlY3VyZSByYW5kb20gbnVtYmVyLiIpfSxQPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSigpe31yZXR1cm4gZnVuY3Rpb24obmUpe3ZhciBpZTtyZXR1cm4gSi5wcm90b3R5cGU9bmUsaWU9bmV3IEosSi5wcm90b3R5cGU9bnVsbCxpZX19''@;'; put 'put ''KCksRj17fSxPPUYubGliPXt9LHo9Ty5CYXNlPWZ1bmN0aW9uKCl7cmV0dXJue2V4dGVuZDpmdW5jdGlvbihKKXt2YXIgbmU9UCh0aGlzKTtyZXR1cm4gSiYmbmUubWl4SW4oSiksKCFuZS5oYXNPd25Qcm9wZXJ0eSgiaW5pdCIpfHx0aGlzLmluaXQ9PT1uZS5pbml0KSYmKG5lLmluaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtuZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxuZS5pbml0LnByb3RvdHlwZT1uZSxuZS4kc3VwZXI9dGhpcyxuZX0sY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5leHRlbmQoKTtyZXR1cm4gSi5pbml0LmFwcGx5KEosYXJndW1lbnRzKSxKfSxpbml0''@;'; put 'put ''OmZ1bmN0aW9uKCl7fSxtaXhJbjpmdW5jdGlvbihKKXtmb3IodmFyIG5lIGluIEopSi5oYXNPd25Qcm9wZXJ0eShuZSkmJih0aGlzW25lXT1KW25lXSk7Si5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9Si50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX19KCksTj1PLldvcmRBcnJheT16LmV4dGVuZCh7aW5pdDpmdW5jdGlvbihKLG5lKXtKPXRoaXMud29yZHM9Snx8W10sdGhpcy5zaWdCeXRlcz1udWxsIT1uZT9uZTo0KkoubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihKKXty''@;'; put 'put ''ZXR1cm4oSnx8Sykuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oSil7dmFyIG5lPXRoaXMud29yZHMsaWU9Si53b3JkcyxsZT10aGlzLnNpZ0J5dGVzLG1lPUouc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLGxlJTQpZm9yKHZhciBfZT0wO19lPG1lO19lKyspbmVbbGUrX2U+Pj4y''@;'; put 'put ''XXw9KGllW19lPj4+Ml0+Pj4yNC1fZSU0KjgmMjU1KTw8MjQtKGxlK19lKSU0Kjg7ZWxzZSBmb3IodmFyIFNlPTA7U2U8bWU7U2UrPTQpbmVbbGUrU2U+Pj4yXT1pZVtTZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1tZSx0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBKPXRoaXMud29y''@;'; put 'put ''ZHMsbmU9dGhpcy5zaWdCeXRlcztKW25lPj4+Ml0mPTQyOTQ5NjcyOTU8PDMyLW5lJTQqOCxKLmxlbmd0aD1fLmNlaWwobmUvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIEo9ei5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBKLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksSn0scmFuZG9tOmZ1''@;'; put 'put ''bmN0aW9uKEope2Zvcih2YXIgbmU9W10saWU9MDtpZTxKO2llKz00KW5lLnB1c2godygpKTtyZXR1cm4gbmV3IE4uaW5pdChuZSxKKX19KSxMPUYuZW5jPXt9LEs9TC5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihKKXtmb3IodmFyIG5lPUoud29yZHMsaWU9Si5zaWdCeXRlcyxsZT1bXSxtZT0w''@;'; put 'put ''O21lPGllO21lKyspe3ZhciBfZT1uZVttZT4+PjJdPj4+MjQtbWUlNCo4JjI1NTtsZS5wdXNoKChfZT4+PjQpLnRvU3RyaW5nKDE2KSksbGUucHVzaCgoMTUmX2UpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIGxlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihKKXtmb3IodmFyIG5lPUoubGVuZ3Ro''@;'; put 'put ''LGllPVtdLGxlPTA7bGU8bmU7bGUrPTIpaWVbbGU+Pj4zXXw9cGFyc2VJbnQoSi5zdWJzdHIobGUsMiksMTYpPDwyNC1sZSU4KjQ7cmV0dXJuIG5ldyBOLmluaXQoaWUsbmUvMil9fSxVPUwuTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1KLndvcmRzLGllPUouc2ln''@;'; put 'put ''Qnl0ZXMsbGU9W10sbWU9MDttZTxpZTttZSsrKWxlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuZVttZT4+PjJdPj4+MjQtbWUlNCo4JjI1NSkpO3JldHVybiBsZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1KLmxlbmd0aCxpZT1bXSxsZT0wO2xlPG5lO2xlKysp''@;'; put 'put ''aWVbbGU+Pj4yXXw9KDI1NSZKLmNoYXJDb2RlQXQobGUpKTw8MjQtbGUlNCo4O3JldHVybiBuZXcgTi5pbml0KGllLG5lKX19LFc9TC5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oSil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKFUuc3RyaW5naWZ5KEopKSl9Y2F0Y2h7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgVVRGLTggZGF0YSIpfX0scGFyc2U6ZnVuY3Rpb24oSil7cmV0dXJuIFUucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEopKSl9fSxZPU8uQnVmZmVyZWRCbG9ja0FsZ29yaXRobT16LmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLl9kYXRhPW5ldyBOLmluaXQsdGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKEopeyJzdHJpbmciPT10eXBlb2YgSiYmKEo9Vy5wYXJzZShKKSksdGhpcy5fZGF0YS5jb25jYXQoSiksdGhpcy5fbkRhdGFCeXRlcys9Si5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24o''@;'; put 'put ''Sil7dmFyIG5lLGllPXRoaXMuX2RhdGEsbGU9aWUud29yZHMsbWU9aWUuc2lnQnl0ZXMsX2U9dGhpcy5ibG9ja1NpemUsU2U9bWUvKDQqX2UpLGplPShTZT1KP18uY2VpbChTZSk6Xy5tYXgoKDB8U2UpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKl9lLFY9Xy5taW4oNCpqZSxtZSk7aWYoamUp''@;'; put 'put ''e2Zvcih2YXIgcD0wO3A8amU7cCs9X2UpdGhpcy5fZG9Qcm9jZXNzQmxvY2sobGUscCk7bmU9bGUuc3BsaWNlKDAsamUpLGllLnNpZ0J5dGVzLT1WfXJldHVybiBuZXcgTi5pbml0KG5lLFYpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBKPXouY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gSi5fZGF0''@;'; put 'put ''YT10aGlzLl9kYXRhLmNsb25lKCksSn0sX21pbkJ1ZmZlclNpemU6MH0pLGVlPShPLkhhc2hlcj1ZLmV4dGVuZCh7Y2ZnOnouZXh0ZW5kKCksaW5pdDpmdW5jdGlvbihKKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQoSiksdGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe1kucmVzZXQu''@;'; put 'put ''Y2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbihKKXtyZXR1cm4gdGhpcy5fYXBwZW5kKEopLHRoaXMuX3Byb2Nlc3MoKSx0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihKKXtyZXR1cm4gSiYmdGhpcy5fYXBwZW5kKEopLHRoaXMuX2RvRmluYWxpemUoKX0sYmxvY2tT''@;'; put 'put ''aXplOjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKG5lLGllKXtyZXR1cm4gbmV3IEouaW5pdChpZSkuZmluYWxpemUobmUpfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKG5lLGllKXtyZXR1cm4gbmV3IGVlLkhNQUMu''@;'; put 'put ''aW5pdChKLGllKS5maW5hbGl6ZShuZSl9fX0pLEYuYWxnbz17fSk7cmV0dXJuIEZ9KE1hdGgpLEkpfSw3ODg1NTpmdW5jdGlvbih1ZSxYLHkpe3ZhciBJO3VlLmV4cG9ydHM9KEk9eSgxNzY1NiksZnVuY3Rpb24oXyl7dmFyIGc9SSxCPWcubGliLHc9Qi5Xb3JkQXJyYXksUD1CLkhhc2hlcixG''@;'; put 'put ''PWcuYWxnbyxPPVtdOyFmdW5jdGlvbigpe2Zvcih2YXIgVz0wO1c8NjQ7VysrKU9bV109NDI5NDk2NzI5NipfLmFicyhfLnNpbihXKzEpKXwwfSgpO3ZhciB6PUYuTUQ1PVAuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IHcuaW5pdChbMTczMjU4NDE5Myw0MDIz''@;'; put 'put ''MjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihXLFkpe2Zvcih2YXIgcT0wO3E8MTY7cSsrKXt2YXIgZWU9WStxLEo9V1tlZV07V1tlZV09MTY3MTE5MzUmKEo8PDh8Sj4+PjI0KXw0Mjc4MjU1MzYwJihKPDwyNHxKPj4+OCl9dmFyIG5lPXRo''@;'; put 'put ''aXMuX2hhc2gud29yZHMsaWU9V1tZKzBdLGxlPVdbWSsxXSxtZT1XW1krMl0sX2U9V1tZKzNdLFRlPVdbWSs0XSxTZT1XW1krNV0samU9V1tZKzZdLFY9V1tZKzddLHA9V1tZKzhdLGI9V1tZKzldLHg9V1tZKzEwXSxDPVdbWSsxMV0sVD1XW1krMTJdLEg9V1tZKzEzXSxqPVdbWSsxNF0sRT1X''@;'; put 'put ''W1krMTVdLG09bmVbMF0sQT1uZVsxXSxhZT1uZVsyXSx0ZT1uZVszXTttPU4obSxBLGFlLHRlLGllLDcsT1swXSksdGU9Tih0ZSxtLEEsYWUsbGUsMTIsT1sxXSksYWU9TihhZSx0ZSxtLEEsbWUsMTcsT1syXSksQT1OKEEsYWUsdGUsbSxfZSwyMixPWzNdKSxtPU4obSxBLGFlLHRlLFRlLDcs''@;'; put 'put ''T1s0XSksdGU9Tih0ZSxtLEEsYWUsU2UsMTIsT1s1XSksYWU9TihhZSx0ZSxtLEEsamUsMTcsT1s2XSksQT1OKEEsYWUsdGUsbSxWLDIyLE9bN10pLG09TihtLEEsYWUsdGUscCw3LE9bOF0pLHRlPU4odGUsbSxBLGFlLGIsMTIsT1s5XSksYWU9TihhZSx0ZSxtLEEseCwxNyxPWzEwXSksQT1O''@;'; put 'put ''KEEsYWUsdGUsbSxDLDIyLE9bMTFdKSxtPU4obSxBLGFlLHRlLFQsNyxPWzEyXSksdGU9Tih0ZSxtLEEsYWUsSCwxMixPWzEzXSksYWU9TihhZSx0ZSxtLEEsaiwxNyxPWzE0XSksbT1MKG0sQT1OKEEsYWUsdGUsbSxFLDIyLE9bMTVdKSxhZSx0ZSxsZSw1LE9bMTZdKSx0ZT1MKHRlLG0sQSxh''@;'; put 'put ''ZSxqZSw5LE9bMTddKSxhZT1MKGFlLHRlLG0sQSxDLDE0LE9bMThdKSxBPUwoQSxhZSx0ZSxtLGllLDIwLE9bMTldKSxtPUwobSxBLGFlLHRlLFNlLDUsT1syMF0pLHRlPUwodGUsbSxBLGFlLHgsOSxPWzIxXSksYWU9TChhZSx0ZSxtLEEsRSwxNCxPWzIyXSksQT1MKEEsYWUsdGUsbSxUZSwy''@;'; put 'put ''MCxPWzIzXSksbT1MKG0sQSxhZSx0ZSxiLDUsT1syNF0pLHRlPUwodGUsbSxBLGFlLGosOSxPWzI1XSksYWU9TChhZSx0ZSxtLEEsX2UsMTQsT1syNl0pLEE9TChBLGFlLHRlLG0scCwyMCxPWzI3XSksbT1MKG0sQSxhZSx0ZSxILDUsT1syOF0pLHRlPUwodGUsbSxBLGFlLG1lLDksT1syOV0p''@;'; put 'put ''LGFlPUwoYWUsdGUsbSxBLFYsMTQsT1szMF0pLG09SyhtLEE9TChBLGFlLHRlLG0sVCwyMCxPWzMxXSksYWUsdGUsU2UsNCxPWzMyXSksdGU9Syh0ZSxtLEEsYWUscCwxMSxPWzMzXSksYWU9SyhhZSx0ZSxtLEEsQywxNixPWzM0XSksQT1LKEEsYWUsdGUsbSxqLDIzLE9bMzVdKSxtPUsobSxB''@;'; put 'put ''LGFlLHRlLGxlLDQsT1szNl0pLHRlPUsodGUsbSxBLGFlLFRlLDExLE9bMzddKSxhZT1LKGFlLHRlLG0sQSxWLDE2LE9bMzhdKSxBPUsoQSxhZSx0ZSxtLHgsMjMsT1szOV0pLG09SyhtLEEsYWUsdGUsSCw0LE9bNDBdKSx0ZT1LKHRlLG0sQSxhZSxpZSwxMSxPWzQxXSksYWU9SyhhZSx0ZSxt''@;'; put 'put ''LEEsX2UsMTYsT1s0Ml0pLEE9SyhBLGFlLHRlLG0samUsMjMsT1s0M10pLG09SyhtLEEsYWUsdGUsYiw0LE9bNDRdKSx0ZT1LKHRlLG0sQSxhZSxULDExLE9bNDVdKSxhZT1LKGFlLHRlLG0sQSxFLDE2LE9bNDZdKSxtPVUobSxBPUsoQSxhZSx0ZSxtLG1lLDIzLE9bNDddKSxhZSx0ZSxpZSw2''@;'; put 'put ''LE9bNDhdKSx0ZT1VKHRlLG0sQSxhZSxWLDEwLE9bNDldKSxhZT1VKGFlLHRlLG0sQSxqLDE1LE9bNTBdKSxBPVUoQSxhZSx0ZSxtLFNlLDIxLE9bNTFdKSxtPVUobSxBLGFlLHRlLFQsNixPWzUyXSksdGU9VSh0ZSxtLEEsYWUsX2UsMTAsT1s1M10pLGFlPVUoYWUsdGUsbSxBLHgsMTUsT1s1''@;'; put 'put ''NF0pLEE9VShBLGFlLHRlLG0sbGUsMjEsT1s1NV0pLG09VShtLEEsYWUsdGUscCw2LE9bNTZdKSx0ZT1VKHRlLG0sQSxhZSxFLDEwLE9bNTddKSxhZT1VKGFlLHRlLG0sQSxqZSwxNSxPWzU4XSksQT1VKEEsYWUsdGUsbSxILDIxLE9bNTldKSxtPVUobSxBLGFlLHRlLFRlLDYsT1s2MF0pLHRl''@;'; put 'put ''PVUodGUsbSxBLGFlLEMsMTAsT1s2MV0pLGFlPVUoYWUsdGUsbSxBLG1lLDE1LE9bNjJdKSxBPVUoQSxhZSx0ZSxtLGIsMjEsT1s2M10pLG5lWzBdPW5lWzBdK218MCxuZVsxXT1uZVsxXStBfDAsbmVbMl09bmVbMl0rYWV8MCxuZVszXT1uZVszXSt0ZXwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBXPXRoaXMuX2RhdGEsWT1XLndvcmRzLHE9OCp0aGlzLl9uRGF0YUJ5dGVzLGVlPTgqVy5zaWdCeXRlcztZW2VlPj4+NV18PTEyODw8MjQtZWUlMzI7dmFyIEo9Xy5mbG9vcihxLzQyOTQ5NjcyOTYpLG5lPXE7WVsxNSsoZWUrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKEo8PDh8Sj4+''@;'; put 'put ''PjI0KXw0Mjc4MjU1MzYwJihKPDwyNHxKPj4+OCksWVsxNCsoZWUrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKG5lPDw4fG5lPj4+MjQpfDQyNzgyNTUzNjAmKG5lPDwyNHxuZT4+PjgpLFcuc2lnQnl0ZXM9NCooWS5sZW5ndGgrMSksdGhpcy5fcHJvY2VzcygpO2Zvcih2YXIgaWU9dGhpcy5faGFz''@;'; put 'put ''aCxsZT1pZS53b3JkcyxtZT0wO21lPDQ7bWUrKyl7dmFyIF9lPWxlW21lXTtsZVttZV09MTY3MTE5MzUmKF9lPDw4fF9lPj4+MjQpfDQyNzgyNTUzNjAmKF9lPDwyNHxfZT4+PjgpfXJldHVybiBpZX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVz1QLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFcu''@;'; put 'put ''X2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLFd9fSk7ZnVuY3Rpb24gTihXLFkscSxlZSxKLG5lLGllKXt2YXIgbGU9VysoWSZxfH5ZJmVlKStKK2llO3JldHVybihsZTw8bmV8bGU+Pj4zMi1uZSkrWX1mdW5jdGlvbiBMKFcsWSxxLGVlLEosbmUsaWUpe3ZhciBsZT1XKyhZJmVlfHEmfmVlKStK''@;'; put 'put ''K2llO3JldHVybihsZTw8bmV8bGU+Pj4zMi1uZSkrWX1mdW5jdGlvbiBLKFcsWSxxLGVlLEosbmUsaWUpe3ZhciBsZT1XKyhZXnFeZWUpK0oraWU7cmV0dXJuKGxlPDxuZXxsZT4+PjMyLW5lKStZfWZ1bmN0aW9uIFUoVyxZLHEsZWUsSixuZSxpZSl7dmFyIGxlPVcrKHFeKFl8fmVlKSkrSitp''@;'; put 'put ''ZTtyZXR1cm4obGU8PG5lfGxlPj4+MzItbmUpK1l9Zy5NRDU9UC5fY3JlYXRlSGVscGVyKHopLGcuSG1hY01ENT1QLl9jcmVhdGVIbWFjSGVscGVyKHopfShNYXRoKSxJLk1ENSl9LDcxNTQ5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gudXRpbHM9eSg4NTY3MSksWC5DaXBoZXI9eSgxMDIx''@;'; put 'put ''OSksWC5ERVM9eSg2NDE2NiksWC5DQkM9eSg4ODgwMCksWC5FREU9eSg2MjEyMil9LDg4ODAwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzkyMTApLF89eSg3MTk5MyksZz17fTtmdW5jdGlvbiBCKFApe0kuZXF1YWwoUC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0''@;'; put 'put ''aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIEY9MDtGPHRoaXMuaXYubGVuZ3RoO0YrKyl0aGlzLml2W0ZdPVBbRl19WC5pbnN0YW50aWF0ZT1mdW5jdGlvbiB3KFApe2Z1bmN0aW9uIEYoTCl7UC5jYWxsKHRoaXMsTCksdGhpcy5fY2JjSW5pdCgpfV8oRixQKTtmb3IodmFyIE89T2JqZWN0''@;'; put 'put ''LmtleXMoZyksej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgTj1PW3pdO0YucHJvdG90eXBlW05dPWdbTl19cmV0dXJuIEYuY3JlYXRlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgRihLKX0sRn0sZy5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBGPW5ldyBCKHRoaXMub3B0aW9ucy5pdik7dGhpcy5f''@;'; put 'put ''Y2JjU3RhdGU9Rn0sZy5fdXBkYXRlPWZ1bmN0aW9uKEYsTyx6LE4pe3ZhciBLPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxVPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXV49''@;'; put 'put ''RltPK1ddO2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLFUsMCx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddPXpbTitXXX1lbHNle2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLEYsTyx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKyl6W04rV11ePVVbV107Zm9yKFc9MDtXPHRo''@;'; put 'put ''aXMuYmxvY2tTaXplO1crKylVW1ddPUZbTytXXX19fSwxMDIxOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKTtmdW5jdGlvbiBfKGcpe3RoaXMub3B0aW9ucz1nLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0''@;'; put 'put ''aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09Zy5wYWRkaW5nfXVlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sXy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEIpe3JldHVybiAw''@;'; put 'put ''PT09Qi5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoQik6dGhpcy5fdXBkYXRlRW5jcnlwdChCKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihCLHcpe2Zvcih2YXIgUD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZm''@;'; put 'put ''ZXJPZmYsQi5sZW5ndGgtdyksRj0wO0Y8UDtGKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrRl09Qlt3K0ZdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9UCxQfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oQix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVy''@;'; put 'put ''LDAsQix3KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihCKXt2YXIgdz0wLFA9MCxPPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0IubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7''@;'; put 'put ''MCE9PXRoaXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKEIsdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApKSk7Zm9yKHZhciB6PUIubGVuZ3RoLShCLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PHo7dys9dGhp''@;'; put 'put ''cy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKEIsdyxPLFApLFArPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxCLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Qlt3XTtyZXR1cm4gT30sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rp''@;'; put 'put ''b24oQil7Zm9yKHZhciB3PTAsUD0wLEY9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsTz1uZXcgQXJyYXkoRip0aGlzLmJsb2NrU2l6ZSk7Rj4wO0YtLSl3Kz10aGlzLl9idWZmZXIoQix3KSxQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApO3Jl''@;'; put 'put ''dHVybiB3Kz10aGlzLl9idWZmZXIoQix3KSxPfSxfLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihCKXt2YXIgdyxQO3JldHVybiBCJiYodz10aGlzLnVwZGF0ZShCKSksUD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93''@;'; put 'put ''LmNvbmNhdChQKTpQfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEIsdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3PEIubGVuZ3RoOylCW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhp''@;'; put 'put ''cy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBCPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsMCksQn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEIpe3JldHVybiBCfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1''@;'; put 'put ''bmN0aW9uKCl7SS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihCLDApLHRoaXMuX3VucGFkKEIpfX0sNjQxNjY6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOTIxMCksXz15KDcxOTkzKSxnPXkoODU2NzEpLEI9eSgxMDIxOSk7ZnVuY3Rpb24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBQKE8pe0IuY2FsbCh0aGlzLE8pO3ZhciB6PW5ldyB3O3RoaXMu''@;'; put 'put ''X2Rlc1N0YXRlPXosdGhpcy5kZXJpdmVLZXlzKHosTy5rZXkpfV8oUCxCKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBQKHopfTt2YXIgRj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07UC5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlv''@;'; put 'put ''bih6LE4pe3oua2V5cz1uZXcgQXJyYXkoMzIpLEkuZXF1YWwoTi5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBMPWcucmVhZFVJbnQzMkJFKE4sMCksSz1nLnJlYWRVSW50MzJCRShOLDQpO2cucGMxKEwsSyx6LnRtcCwwKSxMPXoudG1wWzBdLEs9ei50''@;'; put 'put ''bXBbMV07Zm9yKHZhciBVPTA7VTx6LmtleXMubGVuZ3RoO1UrPTIpe3ZhciBXPUZbVT4+PjFdO0w9Zy5yMjhzaGwoTCxXKSxLPWcucjI4c2hsKEssVyksZy5wYzIoTCxLLHoua2V5cyxVKX19LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixOLEwsSyl7dmFyIFU9dGhpcy5fZGVzU3Rh''@;'; put 'put ''dGUsVz1nLnJlYWRVSW50MzJCRSh6LE4pLFk9Zy5yZWFkVUludDMyQkUoeixOKzQpO2cuaXAoVyxZLFUudG1wLDApLFc9VS50bXBbMF0sWT1VLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChVLFcsWSxVLnRtcCwwKTp0aGlzLl9kZWNyeXB0KFUsVyxZLFUudG1w''@;'; put 'put ''LDApLFk9VS50bXBbMV0sZy53cml0ZVVJbnQzMkJFKEwsVz1VLnRtcFswXSxLKSxnLndyaXRlVUludDMyQkUoTCxZLEsrNCl9LFAucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oeixOKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIEw9ei5sZW5ndGgtTixLPU47Szx6Lmxl''@;'; put 'put ''bmd0aDtLKyspeltLXT1MO3JldHVybiEwfSxQLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oeil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIHo7Zm9yKHZhciBOPXpbei5sZW5ndGgtMV0sTD16Lmxlbmd0aC1OO0w8ei5sZW5ndGg7TCsrKUkuZXF1YWwoeltMXSxOKTtyZXR1cm4gei5z''@;'; put 'put ''bGljZSgwLHoubGVuZ3RoLU4pfSxQLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1OLFk9TCxxPTA7cTx6LmtleXMubGVuZ3RoO3ErPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChZLHoudG1wLDApO3ZhciBuZT1nLnN1''@;'; put 'put ''YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1ZO1k9KFdeZy5wZXJtdXRlKG5lKSk+Pj4wLFc9bGV9Zy5yaXAoWSxXLEssVSl9LFAucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKHosTixMLEssVSl7Zm9yKHZhciBXPUwsWT1OLHE9ei5rZXlzLmxlbmd0aC0yO3E+PTA7''@;'; put 'put ''cS09Mil7dmFyIGVlPXoua2V5c1txXSxKPXoua2V5c1txKzFdO2cuZXhwYW5kKFcsei50bXAsMCk7dmFyIG5lPWcuc3Vic3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0pLGxlPVc7Vz0oWV5nLnBlcm11dGUobmUpKT4+PjAsWT1sZX1nLnJpcChXLFksSyxVKX19LDYyMTIyOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzkyMTApLF89eSg3MTk5MyksZz15KDEwMjE5KSxCPXkoNjQxNjYpO2Z1bmN0aW9uIHcoRixPKXtJLmVxdWFsKE8ubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgej1PLnNsaWNlKDAsOCksTj1PLnNsaWNlKDgsMTYpLEw9Ty5z''@;'; put 'put ''bGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PUY/W0IuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6en0pLEIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6TH0pXTpbQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQi''@;'; put 'put ''LGtleTpMfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTp6fSldfWZ1bmN0aW9uIFAoRil7Zy5jYWxsKHRoaXMsRik7dmFyIE89bmV3IHcodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPU99XyhQ''@;'; put 'put ''LGcpLHVlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IFAoTyl9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyx6LE4sTCl7dmFyIEs9dGhpcy5fZWRlU3RhdGU7Sy5jaXBoZXJzWzBdLl91cGRhdGUoTyx6LE4sTCksSy5jaXBoZXJzWzFdLl91cGRhdGUo''@;'; put 'put ''TixMLE4sTCksSy5jaXBoZXJzWzJdLl91cGRhdGUoTixMLE4sTCl9LFAucHJvdG90eXBlLl9wYWQ9Qi5wcm90b3R5cGUuX3BhZCxQLnByb3RvdHlwZS5fdW5wYWQ9Qi5wcm90b3R5cGUuX3VucGFkfSw4NTY3MToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5yZWFkVUludDMyQkU9ZnVuY3Rpb24o''@;'; put 'put ''Qix3KXtyZXR1cm4oQlswK3ddPDwyNHxCWzErd108PDE2fEJbMit3XTw8OHxCWzMrd10pPj4+MH0sWC53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKEIsdyxQKXtCWzArUF09dz4+PjI0LEJbMStQXT13Pj4+MTYmMjU1LEJbMitQXT13Pj4+OCYyNTUsQlszK1BdPTI1NSZ3fSxYLmlwPWZ1bmN0aW9u''@;'; put 'put ''KEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTY7Tj49MDtOLT0yKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+Pj5MK04mMTtmb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9Qj4+PkwrTiYxfWZvcihOPTY7Tj49MDtOLT0yKXtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEs''@;'; put 'put ''enw9dz4+PkwrTiYxO2ZvcihMPTE7TDw9MjU7TCs9OCl6PDw9MSx6fD1CPj4+TCtOJjF9UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5yaXA9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49MDtOPDQ7TisrKWZvcih2YXIgTD0yNDtMPj0wO0wtPTgpTzw8PTEsT3w9dz4+''@;'; put 'put ''PkwrTiYxLE88PD0xLE98PUI+Pj5MK04mMTtmb3IoTj00O048ODtOKyspZm9yKEw9MjQ7TD49MDtMLT04KXo8PD0xLHp8PXc+Pj5MK04mMSx6PDw9MSx6fD1CPj4+TCtOJjE7UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5wYzE9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0w''@;'; put 'put ''LE49NztOPj01O04tLSl7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9Qj4+TCtOJjF9Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+PkwrTiYxO2ZvcihOPTE7Tjw9MztOKyspe2ZvcihMPTA7TDw9MjQ7TCs9''@;'; put 'put ''OCl6PDw9MSx6fD13Pj5MK04mMTtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9Qj4+TCtOJjF9Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucjI4c2hsPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIEI8PHcmMjY4NDM1NDU1''@;'; put 'put ''fEI+Pj4yOC13fTt2YXIgeT1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtYLnBjMj1mdW5jdGlvbihCLHcs''@;'; put 'put ''UCxGKXtmb3IodmFyIE89MCx6PTAsTj15Lmxlbmd0aD4+PjEsTD0wO0w8TjtMKyspTzw8PTEsT3w9Qj4+PnlbTF0mMTtmb3IoTD1OO0w8eS5sZW5ndGg7TCsrKXo8PD0xLHp8PXc+Pj55W0xdJjE7UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5leHBhbmQ9ZnVuY3Rpb24oQix3LFApe3Zh''@;'; put 'put ''ciBGPTAsTz0wO0Y9KDEmQik8PDV8Qj4+PjI3O2Zvcih2YXIgej0yMzt6Pj0xNTt6LT00KUY8PD02LEZ8PUI+Pj56JjYzO2Zvcih6PTExO3o+PTM7ei09NClPfD1CPj4+eiY2MyxPPDw9NjtPfD0oMzEmQik8PDF8Qj4+PjMxLHdbUCswXT1GPj4+MCx3W1ArMV09Tz4+PjB9O3ZhciBJPVsxNCww''@;'; put 'put ''LDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQs''@;'; put 'put ''Nyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUs''@;'; put 'put ''Niw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwy''@;'; put 'put ''LDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwx''@;'; put 'put ''MCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUs''@;'; put 'put ''MywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQs''@;'; put 'put ''MTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5''@;'; put 'put ''LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO1guc3Vic3RpdHV0ZT1mdW5jdGlvbihCLHcpe2Zvcih2YXIgUD0wLEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbNjQqRisoQj4+PjE4LTYqRiY2MyldO2ZvcihGPTA7Rjw0O0YrKylQPDw9NCxQ''@;'; put 'put ''fD1JWzI1Nis2NCpGKyh3Pj4+MTgtNipGJjYzKV07cmV0dXJuIFA+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107WC5wZXJtdXRlPWZ1bmN0aW9uKEIpe2Zvcih2''@;'; put 'put ''YXIgdz0wLFA9MDtQPF8ubGVuZ3RoO1ArKyl3PDw9MSx3fD1CPj4+X1tQXSYxO3JldHVybiB3Pj4+MH0sWC5wYWRTcGxpdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBGPUIudG9TdHJpbmcoMik7Ri5sZW5ndGg8dzspRj0iMCIrRjtmb3IodmFyIE89W10sej0wO3o8dzt6Kz1QKU8ucHVzaChG''@;'; put 'put ''LnNsaWNlKHoseitQKSk7cmV0dXJuIE8uam9pbigiICIpfX0sNDM3NzoodWUsWCx5KT0+e3ZhciBJPXkoMTI3MjcpLF89eSgyMzI0MSksZz15KDk0NTkzKSx3PXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07WC5EaWZmaWVIZWxsbWFuR3JvdXA9WC5jcmVhdGVEaWZmaWVIZWxsbWFuR3Jv''@;'; put 'put ''dXA9WC5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIEIoRil7dmFyIE89bmV3IEJ1ZmZlcihfW0ZdLnByaW1lLCJoZXgiKSx6PW5ldyBCdWZmZXIoX1tGXS5nZW4sImhleCIpO3JldHVybiBuZXcgZyhPLHopfSxYLmNyZWF0ZURpZmZpZUhlbGxtYW49WC5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9u''@;'; put 'put ''IFAoRixPLHosTil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihPKXx8dm9pZCAwPT09d1tPXT9QKEYsImJpbmFyeSIsTyx6KTooTz1PfHwiYmluYXJ5IixOPU58fCJiaW5hcnkiLHo9enx8bmV3IEJ1ZmZlcihbMl0pLEJ1ZmZlci5pc0J1ZmZlcih6KXx8KHo9bmV3IEJ1ZmZlcih6LE4pKSwibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIEY/bmV3IGcoSShGLHopLHosITApOihCdWZmZXIuaXNCdWZmZXIoRil8fChGPW5ldyBCdWZmZXIoRixPKSksbmV3IGcoRix6LCEwKSkpfX0sOTQ1OTM6KHVlLFgseSk9Pnt2YXIgST15KDM4MjgwKSxnPW5ldyh5KDUzNDU5KSksQj1uZXcgSSgyNCksdz1uZXcgSSgxMSks''@;'; put 'put ''UD1uZXcgSSgxMCksRj1uZXcgSSgzKSxPPW5ldyBJKDcpLHo9eSgxMjcyNyksTj15KDMzNDIpO2Z1bmN0aW9uIEwoZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEopKSx0aGlzLl9wdWI9bmV3IEkoZWUpLHRoaXN9ZnVuY3Rp''@;'; put 'put ''b24gSyhlZSxKKXtyZXR1cm4gSj1KfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKGVlKXx8KGVlPW5ldyBCdWZmZXIoZWUsSikpLHRoaXMuX3ByaXY9bmV3IEkoZWUpLHRoaXN9dWUuZXhwb3J0cz1ZO3ZhciBVPXt9O2Z1bmN0aW9uIFkoZWUsSixuZSl7dGhpcy5zZXRHZW5lcmF0b3IoSiksdGhp''@;'; put 'put ''cy5fX3ByaW1lPW5ldyBJKGVlKSx0aGlzLl9wcmltZT1JLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1lZS5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLG5lPyh0aGlzLnNldFB1YmxpY0tleT1MLHRoaXMu''@;'; put 'put ''c2V0UHJpdmF0ZUtleT1LKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBxKGVlLEope3ZhciBuZT1uZXcgQnVmZmVyKGVlLnRvQXJyYXkoKSk7cmV0dXJuIEo/bmUudG9TdHJpbmcoSik6bmV9T2JqZWN0LmRlZmluZVByb3BlcnR5KFkucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gVyhlZSxKKXt2YXIgbmU9Si50b1N0cmluZygiaGV4IiksaWU9W25lLGVlLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGllIGlu''@;'; put 'put ''IFUpcmV0dXJuIFVbaWVdO3ZhciBtZSxsZT0wO2lmKGVlLmlzRXZlbigpfHwhei5zaW1wbGVTaWV2ZXx8IXouZmVybWF0VGVzdChlZSl8fCFnLnRlc3QoZWUpKXJldHVybiBsZSs9MSxVW2llXT1sZSs9IjAyIj09PW5lfHwiMDUiPT09bmU/ODo0LGxlO3N3aXRjaChnLnRlc3QoZWUuc2hybigx''@;'; put 'put ''KSl8fChsZSs9MiksbmUpe2Nhc2UiMDIiOmVlLm1vZChCKS5jbXAodykmJihsZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KG1lPWVlLm1vZChQKSkuY21wKEYpJiZtZS5jbXAoTykmJihsZSs9OCk7YnJlYWs7ZGVmYXVsdDpsZSs9NH1yZXR1cm4gVVtpZV09bGUsbGV9KHRoaXMuX19wcmltZSx0aGlz''@;'; put 'put ''Ll9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLFkucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgSShOKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBv''@;'; put 'put ''dyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sWS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihlZSl7dmFyIEo9KGVlPShlZT1uZXcgSShlZSkpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxuZT1uZXcg''@;'; put 'put ''QnVmZmVyKEoudG9BcnJheSgpKSxpZT10aGlzLmdldFByaW1lKCk7aWYobmUubGVuZ3RoPGllLmxlbmd0aCl7dmFyIGxlPW5ldyBCdWZmZXIoaWUubGVuZ3RoLW5lLmxlbmd0aCk7bGUuZmlsbCgwKSxuZT1CdWZmZXIuY29uY2F0KFtsZSxuZV0pfXJldHVybiBuZX0sWS5wcm90b3R5cGUuZ2V0''@;'; put 'put ''UHVibGljS2V5PWZ1bmN0aW9uKEope3JldHVybiBxKHRoaXMuX3B1YixKKX0sWS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihKKXtyZXR1cm4gcSh0aGlzLl9wcml2LEopfSxZLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihlZSl7cmV0dXJuIHEodGhpcy5fX3ByaW1lLGVl''@;'; put 'put ''KX0sWS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGVlKXtyZXR1cm4gcSh0aGlzLl9nZW4sZWUpfSxZLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEop''@;'; put 'put ''KSx0aGlzLl9fZ2VuPWVlLHRoaXMuX2dlbj1uZXcgSShlZSksdGhpc319LDEyNzI3Oih1ZSxYLHkpPT57dmFyIEk9eSgzMzQyKTt1ZS5leHBvcnRzPWxlLGxlLnNpbXBsZVNpZXZlPW5lLGxlLmZlcm1hdFRlc3Q9aWU7dmFyIF89eSgzODI4MCksZz1uZXcgXygyNCksdz1uZXcoeSg1MzQ1OSkp''@;'; put 'put ''LFA9bmV3IF8oMSksRj1uZXcgXygyKSxPPW5ldyBfKDUpLEw9KG5ldyBfKDE2KSxuZXcgXyg4KSxuZXcgXygxMCkpLEs9bmV3IF8oMyksVz0obmV3IF8oNyksbmV3IF8oMTEpKSxZPW5ldyBfKDQpLGVlPShuZXcgXygxMiksbnVsbCk7ZnVuY3Rpb24gbmUobWUpe2Zvcih2YXIgX2U9ZnVuY3Rp''@;'; put 'put ''b24gSigpe2lmKG51bGwhPT1lZSlyZXR1cm4gZWU7dmFyIF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0xLFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciBqZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksVj0wO1Y8VGUmJl9lW1ZdPD1qZSYmU2UlX2VbVl0hPTA7VisrKTtUZSE9PVYm''@;'; put 'put ''Jl9lW1ZdPD1qZXx8KF9lW1RlKytdPVNlKX1yZXR1cm4gZWU9X2UsX2V9KCksVGU9MDtUZTxfZS5sZW5ndGg7VGUrKylpZigwPT09bWUubW9kbihfZVtUZV0pKXJldHVybiAwPT09bWUuY21wbihfZVtUZV0pO3JldHVybiEwfWZ1bmN0aW9uIGllKG1lKXt2YXIgX2U9Xy5tb250KG1lKTtyZXR1''@;'; put 'put ''cm4gMD09PUYudG9SZWQoX2UpLnJlZFBvdyhtZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBsZShtZSxfZSl7aWYobWU8MTYpcmV0dXJuIG5ldyBfKDI9PT1fZXx8NT09PV9lP1sxNDAsMTIzXTpbMTQwLDM5XSk7X2U9bmV3IF8oX2UpO2Zvcih2YXIgVGUsU2U7Oyl7Zm9y''@;'; put 'put ''KFRlPW5ldyBfKEkoTWF0aC5jZWlsKG1lLzgpKSk7VGUuYml0TGVuZ3RoKCk+bWU7KVRlLmlzaHJuKDEpO2lmKFRlLmlzRXZlbigpJiZUZS5pYWRkKFApLFRlLnRlc3RuKDEpfHxUZS5pYWRkKEYpLF9lLmNtcChGKSl7aWYoIV9lLmNtcChPKSlmb3IoO1RlLm1vZChMKS5jbXAoSyk7KVRlLmlh''@;'; put 'put ''ZGQoWSl9ZWxzZSBmb3IoO1RlLm1vZChnKS5jbXAoVyk7KVRlLmlhZGQoWSk7aWYobmUoU2U9VGUuc2hybigxKSkmJm5lKFRlKSYmaWUoU2UpJiZpZShUZSkmJncudGVzdChTZSkmJncudGVzdChUZSkpcmV0dXJuIFRlfX19LDM4MjgwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5w''@;'; put 'put ''cm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEw''@;'; put 'put ''KSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnko''@;'; put 'put ''NjYwODkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYs''@;'; put 'put ''Yi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5t''@;'; put 'put ''aW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5p''@;'; put 'put ''dEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNl''@;'; put 'put ''SGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0''@;'; put 'put ''aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAv''@;'; put 'put ''NjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0w''@;'; put 'put ''KXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxq''@;'; put 'put ''PTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxz''@;'; put 'put ''ZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIp''@;'; put 'put ''JTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11''@;'; put 'put ''bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90''@;'; put 'put ''aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVu''@;'; put 'put ''Z3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0''@;'; put 'put ''aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAi''@;'; put 'put ''OiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3Nzcy''@;'; put 'put ''MTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0''@;'; put 'put ''NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRz''@;'; put 'put ''WzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0w''@;'; put 'put ''fHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8''@;'; put 'put ''MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0y''@;'; put 'put ''NixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+''@;'; put 'put ''PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0r''@;'; put 'put ''dGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYm''@;'; put 'put ''ZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9''@;'; put 'put ''dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCks''@;'; put 'put ''QT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1''@;'; put 'put ''NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+''@;'; put 'put ''PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZi''@;'; put 'put ''fHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMu''@;'; put 'put ''bGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJl''@;'; put 'put ''dHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6''@;'; put 'put ''dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9y''@;'; put 'put ''KDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxi''@;'; put 'put ''Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMu''@;'; put 'put ''aXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3Ro''@;'; put 'put ''P3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndv''@;'; put 'put ''cmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9''@;'; put 'put ''cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndv''@;'; put 'put ''cmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9''@;'; put 'put ''dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNb''@;'; put 'put ''SF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgu''@;'; put 'put ''d29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5l''@;'; put 'put ''Z2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2''@;'; put 'put ''YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNb''@;'; put 'put ''al0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3Io''@;'; put 'put ''O2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkx''@;'; put 'put ''Jm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixN''@;'; put 'put ''dD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+''@;'; put 'put ''Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMs''@;'; put 'put ''aGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVs''@;'; put 'put ''KHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXww''@;'; put 'put ''LEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZy''@;'; put 'put ''Pj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Us''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5p''@;'; put 'put ''Pj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXww''@;'; put 'put ''LERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''eGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxY''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01h''@;'; put 'put ''dGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''QWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''TXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChr''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxY''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01h''@;'; put 'put ''dGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXww''@;'; put 'put ''LHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExh''@;'; put 'put ''Pj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVu''@;'; put 'put ''KSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhb''@;'; put 'put ''OF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChW''@;'; put 'put ''LHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlz''@;'; put 'put ''LHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFy''@;'; put 'put ''IGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCso''@;'; put 'put ''c2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1''@;'; put 'put ''bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0''@;'; put 'put ''dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRy''@;'; put 'put ''YW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIg''@;'; put 'put ''dGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxD''@;'; put 'put ''W2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8''@;'; put 'put ''VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5v''@;'; put 'put ''cm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEou''@;'; put 'put ''cHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQp''@;'; put 'put ''KX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRo''@;'; put 'put ''aXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29y''@;'; put 'put ''ZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRl''@;'; put 'put ''W3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5u''@;'; put 'put ''ZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8o''@;'; put 'put ''cCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTti''@;'; put 'put ''Pj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5j''@;'; put 'put ''dGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3''@;'; put 'put ''IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhp''@;'; put 'put ''cy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1Qr''@;'; put 'put ''Kyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3Zh''@;'; put 'put ''ciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDtt''@;'; put 'put ''PEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53''@;'; put 'put ''b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lh''@;'; put 'put ''ZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsr''@;'; put 'put ''O3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBm''@;'; put 'put ''b3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9''@;'; put 'put ''KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5s''@;'; put 'put ''ZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRp''@;'; put 'put ''dmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxu''@;'; put 'put ''c3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9''@;'; put 'put ''PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdh''@;'; put 'put ''dGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhI''@;'; put 'put ''PXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVn''@;'; put 'put ''YXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09''@;'; put 'put ''Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0s''@;'; put 'put ''dy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChD''@;'; put 'put ''KTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgt''@;'; put 'put ''MTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQq''@;'; put 'put ''Yjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVy''@;'; put 'put ''bygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJu''@;'; put 'put ''KDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkp''@;'; put 'put ''JiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5p''@;'; put 'put ''YWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9p''@;'; put 'put ''bnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+''@;'; put 'put ''MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08''@;'; put 'put ''MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNt''@;'; put 'put ''cG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVn''@;'; put 'put ''YXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBI''@;'; put 'put ''PWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihw''@;'; put 'put ''KXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBq''@;'; put 'put ''PTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9''@;'; put 'put ''PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXti''@;'; put 'put ''JiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFr''@;'; put 'put ''fX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVx''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGco''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMg''@;'; put 'put ''aW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxy''@;'; put 'put ''ZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''TXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5y''@;'; put 'put ''ZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5w''@;'; put 'put ''b3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMu''@;'; put 'put ''bikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNh''@;'; put 'put ''bGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1l''@;'; put 'put ''KFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0''@;'; put 'put ''aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmlu''@;'; put 'put ''di5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMu''@;'; put 'put ''bik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0w''@;'; put 'put ''O1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBq''@;'; put 'put ''PTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1tw''@;'; put 'put ''Lmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5s''@;'; put 'put ''ZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixU''@;'; put 'put ''PTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9''@;'; put 'put ''PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09''@;'; put 'put ''cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpw''@;'; put 'put ''LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5Mihw''@;'; put 'put ''LGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBl''@;'; put 'put ''LmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIg''@;'; put 'put ''Yj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hy''@;'; put 'put ''bigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTsp''@;'; put 'put ''bS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2co''@;'; put 'put ''VWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMu''@;'; put 'put ''bSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEp''@;'; put 'put ''KXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2Zvcigw''@;'; put 'put ''PT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1h''@;'; put 'put ''ZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxq''@;'; put 'put ''ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1sw''@;'; put 'put ''XT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5p''@;'; put 'put ''c3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChi''@;'; put 'put ''KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5p''@;'; put 'put ''YWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDkwNTE4Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPVg7SS52ZXJzaW9uPXkoMTYzNikuckUsSS51dGlscz15KDMxMzYpLEkucmFuZD15KDM1Mjk0KSxJLmN1cnZlPXkoODcyOSksSS5jdXJ2ZXM9eSgyMzQwMSksSS5lYz15KDI5MDQyKSxJLmVkZHNhPXkoODMwNDUpfSw5ODgyODoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDg4NzIzKSxfPXkoMzEzNiksZz1fLmdldE5BRixCPV8uZ2V0SlNGLHc9Xy5hc3NlcnQ7ZnVuY3Rpb24gUChPLHope3RoaXMudHlwZT1PLHRoaXMucD1uZXcgSSh6LnAsMTYpLHRoaXMucmVkPXoucHJpbWU/SS5yZWQoei5wcmltZSk6SS5tb250KHRoaXMucCksdGhpcy56''@;'; put 'put ''ZXJvPW5ldyBJKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgSSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj16Lm4mJm5ldyBJKHoubiwxNiksdGhpcy5nPXouZyYmdGhpcy5wb2ludEZyb21KU09OKHouZyx6LmdSZWQp''@;'; put 'put ''LHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgTj10aGlzLm4mJnRo''@;'; put 'put ''aXMucC5kaXYodGhpcy5uKTshTnx8Ti5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBGKE8seil7dGhpcy5jdXJ2ZT1PLHRoaXMudHlwZT16LHRoaXMucHJlY29tcHV0ZWQ9''@;'; put 'put ''bnVsbH11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLl9m''@;'; put 'put ''aXhlZE5hZk11bD1mdW5jdGlvbih6LE4pe3coei5wcmVjb21wdXRlZCk7dmFyIEw9ei5fZ2V0RG91YmxlcygpLEs9ZyhOLDEsdGhpcy5fYml0TGVuZ3RoKSxVPSgxPDxMLnN0ZXArMSktKEwuc3RlcCUyPT0wPzI6MSk7VS89Mzt2YXIgWSxxLFc9W107Zm9yKFk9MDtZPEsubGVuZ3RoO1krPUwu''@;'; put 'put ''c3RlcCl7cT0wO2Zvcih2YXIgZWU9WStMLnN0ZXAtMTtlZT49WTtlZS0tKXE9KHE8PDEpK0tbZWVdO1cucHVzaChxKX1mb3IodmFyIEo9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLG5lPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1VO2llPjA7aWUtLSl7Zm9yKFk9MDtZPFcu''@;'; put 'put ''bGVuZ3RoO1krKykocT1XW1ldKT09PWllP25lPW5lLm1peGVkQWRkKEwucG9pbnRzW1ldKTpxPT09LWllJiYobmU9bmUubWl4ZWRBZGQoTC5wb2ludHNbWV0ubmVnKCkpKTtKPUouYWRkKG5lKX1yZXR1cm4gSi50b1AoKX0sUC5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oeixOKXtmb3Io''@;'; put 'put ''dmFyIEw9NCxLPXouX2dldE5BRlBvaW50cyhMKSxVPUsucG9pbnRzLFc9ZyhOLEw9Sy53bmQsdGhpcy5fYml0TGVuZ3RoKSxZPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPVcubGVuZ3RoLTE7cT49MDtxLS0pe2Zvcih2YXIgZWU9MDtxPj0wJiYwPT09V1txXTtxLS0pZWUrKztpZihx''@;'; put 'put ''Pj0wJiZlZSsrLFk9WS5kYmxwKGVlKSxxPDApYnJlYWs7dmFyIEo9V1txXTt3KDAhPT1KKSxZPSJhZmZpbmUiPT09ei50eXBlP1kubWl4ZWRBZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKTpZLmFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZp''@;'; put 'put ''bmUiPT09ei50eXBlP1kudG9QKCk6WX0sUC5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oeixOLEwsSyxVKXt2YXIgSixuZSxpZSxXPXRoaXMuX3duYWZUMSxZPXRoaXMuX3duYWZUMixxPXRoaXMuX3duYWZUMyxlZT0wO2ZvcihKPTA7SjxLO0orKyl7dmFyIGxlPShpZT1OW0pdKS5f''@;'; put 'put ''Z2V0TkFGUG9pbnRzKHopO1dbSl09bGUud25kLFlbSl09bGUucG9pbnRzfWZvcihKPUstMTtKPj0xO0otPTIpe3ZhciBtZT1KLTEsX2U9SjtpZigxPT09V1ttZV0mJjE9PT1XW19lXSl7dmFyIFRlPVtOW21lXSxudWxsLG51bGwsTltfZV1dOzA9PT1OW21lXS55LmNtcChOW19lXS55KT8oVGVb''@;'; put 'put ''MV09TlttZV0uYWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpOjA9PT1OW21lXS55LmNtcChOW19lXS55LnJlZE5lZygpKT8oVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLmFkZChOW19lXS5uZWcoKSkpOihUZVsx''@;'; put 'put ''XT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTt2YXIgU2U9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10samU9QihMW21lXSxMW19lXSk7Zm9yKGVlPU1hdGgubWF4KGplWzBdLmxlbmd0aCxlZSkscVttZV09bmV3IEFy''@;'; put 'put ''cmF5KGVlKSxxW19lXT1uZXcgQXJyYXkoZWUpLG5lPTA7bmU8ZWU7bmUrKylxW21lXVtuZV09U2VbMyooMSsoMHxqZVswXVtuZV0pKSsoMSsoMHxqZVsxXVtuZV0pKV0scVtfZV1bbmVdPTAsWVttZV09VGV9ZWxzZSBxW21lXT1nKExbbWVdLFdbbWVdLHRoaXMuX2JpdExlbmd0aCkscVtfZV09''@;'; put 'put ''ZyhMW19lXSxXW19lXSx0aGlzLl9iaXRMZW5ndGgpLGVlPU1hdGgubWF4KHFbbWVdLmxlbmd0aCxlZSksZWU9TWF0aC5tYXgocVtfZV0ubGVuZ3RoLGVlKX12YXIgYj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKEo9ZWU7Sj49MDtKLS0pe2Zvcih2YXIg''@;'; put 'put ''Qz0wO0o+PTA7KXt2YXIgVD0hMDtmb3IobmU9MDtuZTxLO25lKyspeFtuZV09MHxxW25lXVtKXSwwIT09eFtuZV0mJihUPSExKTtpZighVClicmVhaztDKyssSi0tfWlmKEo+PTAmJkMrKyxiPWIuZGJscChDKSxKPDApYnJlYWs7Zm9yKG5lPTA7bmU8SztuZSsrKXt2YXIgSD14W25lXTswIT09''@;'; put 'put ''SCYmKEg+MD9pZT1ZW25lXVtILTE+PjFdOkg8MCYmKGllPVlbbmVdWy1ILTE+PjFdLm5lZygpKSxiPSJhZmZpbmUiPT09aWUudHlwZT9iLm1peGVkQWRkKGllKTpiLmFkZChpZSkpfX1mb3IoSj0wO0o8SztKKyspWVtKXT1udWxsO3JldHVybiBVP2I6Yi50b1AoKX0sUC5CYXNlUG9pbnQ9RixG''@;'; put 'put ''LnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LFAucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosTil7''@;'; put 'put ''ej1fLnRvQXJyYXkoeixOKTt2YXIgTD10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09elswXXx8Nj09PXpbMF18fDc9PT16WzBdKSYmei5sZW5ndGgtMT09MipMKXJldHVybiA2PT09elswXT93KHpbei5sZW5ndGgtMV0lMj09MCk6Nz09PXpbMF0mJncoelt6Lmxlbmd0aC0xXSUyPT0xKSx0''@;'; put 'put ''aGlzLnBvaW50KHouc2xpY2UoMSwxK0wpLHouc2xpY2UoMStMLDErMipMKSk7aWYoKDI9PT16WzBdfHwzPT09elswXSkmJnoubGVuZ3RoLTE9PT1MKXJldHVybiB0aGlzLnBvaW50RnJvbVgoei5zbGljZSgxLDErTCksMz09PXpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBm''@;'; put 'put ''b3JtYXQiKX0sRi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGUoeiwhMCl9LEYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxMPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJl''@;'; put 'put ''IixOKTtyZXR1cm4gej9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoTCk6WzRdLmNvbmNhdChMLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixOKSl9LEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih6LE4pe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoTikseil9LEYu''@;'; put 'put ''cHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTj17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIE4ubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxOLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxl''@;'; put 'put ''cyg0LHopLE4uYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1OLHRoaXN9LEYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHope2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBOPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIU4mJk4u''@;'; put 'put ''cG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh6LmJpdExlbmd0aCgpKzEpL04uc3RlcCl9LEYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHosTil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJs''@;'; put 'put ''ZXM7Zm9yKHZhciBMPVt0aGlzXSxLPXRoaXMsVT0wO1U8TjtVKz16KXtmb3IodmFyIFc9MDtXPHo7VysrKUs9Sy5kYmwoKTtMLnB1c2goSyl9cmV0dXJue3N0ZXA6eixwb2ludHM6TH19LEYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZCYm''@;'; put 'put ''dGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgTj1bdGhpc10sTD0oMTw8eiktMSxLPTE9PT1MP251bGw6dGhpcy5kYmwoKSxVPTE7VTxMO1UrKylOW1VdPU5bVS0xXS5hZGQoSyk7cmV0dXJue3duZDp6LHBvaW50czpOfX0sRi5wcm90b3R5''@;'; put 'put ''cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcyxMPTA7TDx6O0wrKylOPU4uZGJsKCk7cmV0dXJuIE59fSw1NTUzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMxMzYpLF89eSg4ODcy''@;'; put 'put ''MyksZz15KDcxOTkzKSxCPXkoOTg4MjgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUChPKXt0aGlzLnR3aXN0ZWQ9MSE9KDB8Ty5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfE8uYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLEIuY2FsbCh0aGlzLCJlZHdhcmRzIixPKSx0aGlz''@;'; put 'put ''LmE9bmV3IF8oTy5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgXyhPLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IF8oTy5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhp''@;'; put 'put ''cy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksdyghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Ty5jKX1mdW5jdGlvbiBGKE8seixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLE8sInByb2plY3RpdmUiKSxudWxsPT09eiYm''@;'; put 'put ''bnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IF8oeiwxNiksdGhpcy55PW5ldyBfKE4sMTYpLHRo''@;'; put 'put ''aXMuej1MP25ldyBfKEwsMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1LJiZuZXcgXyhLLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJl''@;'; put 'put ''ZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYo''@;'; put 'put ''dGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm1PbmVBP3oucmVkTmVnKCk6dGhp''@;'; put 'put ''cy5hLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMub25lQz96OnRoaXMuYy5yZWRNdWwoeil9LFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gdGhpcy5wb2ludCh6LE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRG''@;'; put 'put ''cm9tWD1mdW5jdGlvbih6LE4peyh6PW5ldyBfKHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChMKSksVT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoTCkp''@;'; put 'put ''LFc9Sy5yZWRNdWwoVS5yZWRJbnZtKCkpLFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBxPVkuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE4mJiFxfHwhTiYmcSkmJihZ''@;'; put 'put ''PVkucmVkTmVnKCkpLHRoaXMucG9pbnQoeixZKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbih6LE4peyh6PW5ldyBfKHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9TC5yZWRTdWIodGhpcy5jMiksVT1MLnJlZE11bCh0aGlzLmQp''@;'; put 'put ''LnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxXPUsucmVkTXVsKFUucmVkSW52bSgpKTtpZigwPT09Vy5jbXAodGhpcy56ZXJvKSl7aWYoTil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8seil9dmFyIFk9Vy5yZWRTcXJ0''@;'; put 'put ''KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiBZLmZyb21SZWQoKS5pc09kZCgpIT09TiYmKFk9WS5yZWROZWcoKSksdGhpcy5wb2ludChZLHopfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1m''@;'; put 'put ''dW5jdGlvbih6KXtpZih6LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt6Lm5vcm1hbGl6ZSgpO3ZhciBOPXoueC5yZWRTcXIoKSxMPXoueS5yZWRTcXIoKSxLPU4ucmVkTXVsKHRoaXMuYSkucmVkQWRkKEwpLFU9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoTiku''@;'; put 'put ''cmVkTXVsKEwpKSk7cmV0dXJuIDA9PT1LLmNtcChVKX0sZyhGLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHope3JldHVybiBGLmZyb21KU09OKHRoaXMseil9LFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcgRih0''@;'; put 'put ''aGlzLHosTixMLEspfSxGLmZyb21KU09OPWZ1bmN0aW9uKHosTil7cmV0dXJuIG5ldyBGKHosTlswXSxOWzFdLE5bMl0pfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIr''@;'; put 'put ''dGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMu''@;'; put 'put ''eC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sRi5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxMPXRoaXMuei5yZWRTcXIo''@;'; put 'put ''KTtMPUwucmVkSUFkZChMKTt2YXIgSz10aGlzLmN1cnZlLl9tdWxBKHopLFU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1YihOKSxXPUsucmVkQWRkKE4pLFk9Vy5yZWRTdWIoTCkscT1LLnJlZFN1YihOKSxlZT1VLnJlZE11bChZKSxKPVcucmVkTXVs''@;'; put 'put ''KHEpLG5lPVUucmVkTXVsKHEpLGllPVkucmVkTXVsKFcpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGVlLEosaWUsbmUpfSxGLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBLLFUsVyxZLHEsZWUsej10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksTj10aGlzLngucmVk''@;'; put 'put ''U3FyKCksTD10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgSj0oWT10aGlzLmN1cnZlLl9tdWxBKE4pKS5yZWRBZGQoTCk7dGhpcy56T25lPyhLPXoucmVkU3ViKE4pLnJlZFN1YihMKS5yZWRNdWwoSi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxVPUoucmVkTXVs''@;'; put 'put ''KFkucmVkU3ViKEwpKSxXPUoucmVkU3FyKCkucmVkU3ViKEopLnJlZFN1YihKKSk6KHE9dGhpcy56LnJlZFNxcigpLGVlPUoucmVkU3ViKHEpLnJlZElTdWIocSksSz16LnJlZFN1YihOKS5yZWRJU3ViKEwpLnJlZE11bChlZSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1KLnJlZE11bChl''@;'; put 'put ''ZSkpfWVsc2UgWT1OLnJlZEFkZChMKSxxPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxlZT1ZLnJlZFN1YihxKS5yZWRTdWIocSksSz10aGlzLmN1cnZlLl9tdWxDKHoucmVkSVN1YihZKSkucmVkTXVsKGVlKSxVPXRoaXMuY3VydmUuX211bEMoWSkucmVkTXVsKE4ucmVkSVN1''@;'; put 'put ''YihMKSksVz1ZLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVLFcpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHoueS5yZWRTdWIoei54KSksTD10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHoueS5yZWRBZGQoei54KSksSz10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11''@;'; put 'put ''bCh6LnQpLFU9dGhpcy56LnJlZE11bCh6LnoucmVkQWRkKHoueikpLFc9TC5yZWRTdWIoTiksWT1VLnJlZFN1YihLKSxxPVUucmVkQWRkKEspLGVlPUwucmVkQWRkKE4pLEo9Vy5yZWRNdWwoWSksbmU9cS5yZWRNdWwoZWUpLGllPVcucmVkTXVsKGVlKSxsZT1ZLnJlZE11bChxKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5jdXJ2ZS5wb2ludChKLG5lLGxlLGllKX0sRi5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oeil7dmFyIG5lLGllLE49dGhpcy56LnJlZE11bCh6LnopLEw9Ti5yZWRTcXIoKSxLPXRoaXMueC5yZWRNdWwoei54KSxVPXRoaXMueS5yZWRNdWwoei55KSxXPXRoaXMuY3VydmUuZC5y''@;'; put 'put ''ZWRNdWwoSykucmVkTXVsKFUpLFk9TC5yZWRTdWIoVykscT1MLnJlZEFkZChXKSxlZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHoueC5yZWRBZGQoei55KSkucmVkSVN1YihLKS5yZWRJU3ViKFUpLEo9Ti5yZWRNdWwoWSkucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lz''@;'; put 'put ''dGVkPyhuZT1OLnJlZE11bChxKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShLKSkpLGllPVkucmVkTXVsKHEpKToobmU9Ti5yZWRNdWwocSkucmVkTXVsKFUucmVkU3ViKEspKSxpZT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChxKSksdGhpcy5jdXJ2ZS5wb2ludChKLG5l''@;'; put 'put ''LGllKX0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT96OnouaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoeik6dGhpcy5fcHJvakFkZCh6KX0sRi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHope3Jl''@;'; put 'put ''dHVybiB0aGlzLl9oYXNEb3VibGVzKHopP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMseik6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHopfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3os''@;'; put 'put ''TF0sMiwhMSl9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3osTF0sMiwhMCl9LEYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgej10''@;'; put 'put ''aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh6KSx0aGlzLnk9dGhpcy55LnJlZE11bCh6KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh6KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxGLnByb3RvdHlwZS5uZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXM9PT16fHwwPT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcCh6LmdldFko''@;'; put 'put ''KSl9LEYucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih6KXt2YXIgTj16LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMDtmb3IodmFyIEw9ei5jbG9uZSgpLEs9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzsp''@;'; put 'put ''e2lmKEwuaWFkZCh0aGlzLmN1cnZlLm4pLEwuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoTi5yZWRJQWRkKEspLDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwfX0sRi5wcm90b3R5cGUudG9QPUYucHJvdG90eXBlLm5vcm1hbGl6ZSxGLnByb3RvdHlwZS5taXhlZEFkZD1GLnBy''@;'; put 'put ''b3RvdHlwZS5hZGR9LDg3Mjk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLmJhc2U9eSg5ODgyOCksSS5zaG9ydD15KDY4MDc1KSxJLm1vbnQ9eSg2NDk0NyksSS5lZHdhcmRzPXkoNTU1MzcpfSw2NDk0NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4NzIzKSxf''@;'; put 'put ''PXkoNzE5OTMpLGc9eSg5ODgyOCksQj15KDMxMzYpO2Z1bmN0aW9uIHcoRil7Zy5jYWxsKHRoaXMsIm1vbnQiLEYpLHRoaXMuYT1uZXcgSShGLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEkoRi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgSSg0KS50b1JlZCh0''@;'; put 'put ''aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gUChGLE8seil7Zy5CYXNlUG9pbnQuY2FsbCh0aGlzLEYsInByb2plY3RpdmUiKSxudWxsPT09''@;'; put 'put ''TyYmbnVsbD09PXo/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBJKE8sMTYpLHRoaXMuej1uZXcgSSh6LDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlz''@;'; put 'put ''Lno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfV8odyxnKSx1ZS5leHBvcnRzPXcsdy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTyl7dmFyIHo9Ty5ub3JtYWxpemUoKS54LE49ei5yZWRTcXIoKSxMPU4ucmVkTXVsKHopLnJlZEFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRB''@;'; put 'put ''ZGQoeik7cmV0dXJuIDA9PT1MLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoTCl9LF8oUCxnLkJhc2VQb2ludCksdy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTyx6KXtyZXR1cm4gdGhpcy5wb2ludChCLnRvQXJyYXkoTyx6KSwxKX0sdy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24o''@;'; put 'put ''Tyx6KXtyZXR1cm4gbmV3IFAodGhpcyxPLHopfSx3LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE8pe3JldHVybiBQLmZyb21KU09OKHRoaXMsTyl9LFAucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxQLmZyb21KU09OPWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKE8selswXSx6WzFdfHxPLm9uZSl9LFAucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmlu''@;'; put 'put ''aXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09''@;'; put 'put ''dGhpcy56LmNtcG4oMCl9LFAucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxMPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxLPXoucmVkU3ViKEwpLFU9ei5yZWRNdWwoTCksVz1LLnJlZE11bChMLnJlZEFkZCh0aGlz''@;'; put 'put ''LmN1cnZlLmEyNC5yZWRNdWwoSykpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLFcpfSxQLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKE8s''@;'; put 'put ''eil7dmFyIE49dGhpcy54LnJlZEFkZCh0aGlzLnopLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLEs9Ty54LnJlZEFkZChPLnopLFc9Ty54LnJlZFN1YihPLnopLnJlZE11bChOKSxZPUsucmVkTXVsKEwpLHE9ei56LnJlZE11bChXLnJlZEFkZChZKS5yZWRTcXIoKSksZWU9ei54LnJlZE11bChX''@;'; put 'put ''LnJlZElTdWIoWSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHEsZWUpfSxQLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTyl7Zm9yKHZhciB6PU8uY2xvbmUoKSxOPXRoaXMsTD10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksVT1bXTswIT09ei5jbXBuKDApO3ouaXVzaHJu''@;'; put 'put ''KDEpKVUucHVzaCh6LmFuZGxuKDEpKTtmb3IodmFyIFc9VS5sZW5ndGgtMTtXPj0wO1ctLSkwPT09VVtXXT8oTj1OLmRpZmZBZGQoTCx0aGlzKSxMPUwuZGJsKCkpOihMPU4uZGlmZkFkZChMLHRoaXMpLE49Ti5kYmwoKSk7cmV0dXJuIEx9LFAucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5lcT1mdW5jdGlvbihP''@;'; put 'put ''KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChPLmdldFgoKSl9LFAucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sUC5wcm90b3R5cGUuZ2V0WD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2ODA3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMxMzYpLF89eSg4ODcyMyksZz15KDcxOTkzKSxCPXkoOTg4MjgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXtCLmNhbGwodGhp''@;'; put 'put ''cywic2hvcnQiLHopLHRoaXMuYT1uZXcgXyh6LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IF8oei5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJl''@;'; put 'put ''ZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbSh6KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBGKHosTixMLEspe0IuQmFz''@;'; put 'put ''ZVBvaW50LmNhbGwodGhpcyx6LCJhZmZpbmUiKSxudWxsPT09TiYmbnVsbD09PUw/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBfKE4sMTYpLHRoaXMueT1uZXcgXyhMLDE2KSxLJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlz''@;'; put 'put ''LnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIE8oeixOLEwsSyl7Qi5C''@;'; put 'put ''YXNlUG9pbnQuY2FsbCh0aGlzLHosImphY29iaWFuIiksbnVsbD09PU4mJm51bGw9PT1MJiZudWxsPT09Sz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IF8oMCkpOih0aGlzLng9bmV3IF8oTiwxNiksdGhpcy55PW5ldyBfKEwsMTYpLHRo''@;'; put 'put ''aXMuej1uZXcgXyhLLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVk''@;'; put 'put ''KSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfWcoUCxCKSx1ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihOKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgTCxLO2lmKE4uYmV0''@;'; put 'put ''YSlMPW5ldyBfKE4uYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIFU9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7TD0oTD1VWzBdLmNtcChVWzFdKTwwP1VbMF06VVsxXSkudG9SZWQodGhpcy5yZWQpfWlmKE4ubGFtYmRhKUs9bmV3IF8oTi5sYW1iZGEsMTYpO2Vsc2V7dmFy''@;'; put 'put ''IFc9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoV1swXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEwpKT9LPVdbMF06dygwPT09dGhpcy5nLm11bChLPVdbMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSkpfXJldHVybntiZXRhOkwsbGFtYmRhOkssYmFzaXM6''@;'; put 'put ''Ti5iYXNpcz9OLmJhc2lzLm1hcChmdW5jdGlvbihxKXtyZXR1cm57YTpuZXcgXyhxLmEsMTYpLGI6bmV3IF8ocS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoSyl9fX0sUC5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihOKXt2YXIgTD1OPT09dGhpcy5wP3RoaXMucmVkOl8u''@;'; put 'put ''bW9udChOKSxLPW5ldyBfKDIpLnRvUmVkKEwpLnJlZEludm0oKSxVPUsucmVkTmVnKCksVz1uZXcgXygzKS50b1JlZChMKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKEspO3JldHVybltVLnJlZEFkZChXKS5mcm9tUmVkKCksVS5yZWRTdWIoVykuZnJvbVJlZCgpXX0sUC5wcm90b3R5cGUu''@;'; put 'put ''X2dldEVuZG9CYXNpcz1mdW5jdGlvbihOKXtmb3IodmFyIEosbmUsaWUsbGUsbWUsX2UsVGUsamUsVixMPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksSz1OLFU9dGhpcy5uLmNsb25lKCksVz1uZXcgXygxKSxZPW5ldyBfKDApLHE9bmV3IF8oMCksZWU9''@;'; put 'put ''bmV3IF8oMSksU2U9MDswIT09Sy5jbXBuKDApOyl7dmFyIHA9VS5kaXYoSyk7amU9VS5zdWIocC5tdWwoSykpLFY9cS5zdWIocC5tdWwoVykpO3ZhciBiPWVlLnN1YihwLm11bChZKSk7aWYoIWllJiZqZS5jbXAoTCk8MClKPVRlLm5lZygpLG5lPVcsaWU9amUubmVnKCksbGU9VjtlbHNlIGlm''@;'; put 'put ''KGllJiYyPT0rK1NlKWJyZWFrO1RlPWplLFU9SyxLPWplLHE9VyxXPVYsZWU9WSxZPWJ9bWU9amUubmVnKCksX2U9Vjt2YXIgeD1pZS5zcXIoKS5hZGQobGUuc3FyKCkpO3JldHVybiBtZS5zcXIoKS5hZGQoX2Uuc3FyKCkpLmNtcCh4KT49MCYmKG1lPUosX2U9bmUpLGllLm5lZ2F0aXZlJiYo''@;'; put 'put ''aWU9aWUubmVnKCksbGU9bGUubmVnKCkpLG1lLm5lZ2F0aXZlJiYobWU9bWUubmVnKCksX2U9X2UubmVnKCkpLFt7YTppZSxiOmxlfSx7YTptZSxiOl9lfV19LFAucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oTil7dmFyIEw9dGhpcy5lbmRvLmJhc2lzLEs9TFswXSxVPUxbMV0sVz1V''@;'; put 'put ''LmIubXVsKE4pLmRpdlJvdW5kKHRoaXMubiksWT1LLmIubmVnKCkubXVsKE4pLmRpdlJvdW5kKHRoaXMubikscT1XLm11bChLLmEpLGVlPVkubXVsKFUuYSksSj1XLm11bChLLmIpLG5lPVkubXVsKFUuYik7cmV0dXJue2sxOk4uc3ViKHEpLnN1YihlZSksazI6Si5hZGQobmUpLm5lZygpfX0s''@;'; put 'put ''UC5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihOLEwpeyhOPW5ldyBfKE4sMTYpKS5yZWR8fChOPU4udG9SZWQodGhpcy5yZWQpKTt2YXIgSz1OLnJlZFNxcigpLnJlZE11bChOKS5yZWRJQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxVPUsucmVkU3FydCgpO2lm''@;'; put 'put ''KDAhPT1VLnJlZFNxcigpLnJlZFN1YihLKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgVz1VLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihMJiYhV3x8IUwmJlcpJiYoVT1VLnJlZE5lZygpKSx0aGlzLnBvaW50KE4sVSl9LFAucHJvdG90eXBl''@;'; put 'put ''LnZhbGlkYXRlPWZ1bmN0aW9uKE4pe2lmKE4uaW5mKXJldHVybiEwO3ZhciBMPU4ueCxLPU4ueSxVPXRoaXMuYS5yZWRNdWwoTCksVz1MLnJlZFNxcigpLnJlZE11bChMKS5yZWRJQWRkKFUpLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PUsucmVkU3FyKCkucmVkSVN1YihXKS5jbXBuKDAp''@;'; put 'put ''fSxQLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oTixMLEspe2Zvcih2YXIgVT10aGlzLl9lbmRvV25hZlQxLFc9dGhpcy5fZW5kb1duYWZUMixZPTA7WTxOLmxlbmd0aDtZKyspe3ZhciBxPXRoaXMuX2VuZG9TcGxpdChMW1ldKSxlZT1OW1ldLEo9ZWUuX2dldEJldGEoKTtx''@;'; put 'put ''LmsxLm5lZ2F0aXZlJiYocS5rMS5pbmVnKCksZWU9ZWUubmVnKCEwKSkscS5rMi5uZWdhdGl2ZSYmKHEuazIuaW5lZygpLEo9Si5uZWcoITApKSxVWzIqWV09ZWUsVVsyKlkrMV09SixXWzIqWV09cS5rMSxXWzIqWSsxXT1xLmsyfWZvcih2YXIgbmU9dGhpcy5fd25hZk11bEFkZCgxLFUsVywy''@;'; put 'put ''KlksSyksaWU9MDtpZTwyKlk7aWUrKylVW2llXT1udWxsLFdbaWVdPW51bGw7cmV0dXJuIG5lfSxnKEYsQi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyxOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rp''@;'; put 'put ''b24oTixMKXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLE4sTCl9LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgTj10aGlzLnByZWNvbXB1dGVkO2lmKE4mJk4uYmV0YSlyZXR1cm4gTi5iZXRhO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhp''@;'; put 'put ''cy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihOKXt2YXIgSz10aGlzLmN1cnZlLFU9ZnVuY3Rpb24oVyl7cmV0dXJuIEsucG9pbnQoVy54LnJlZE11bChLLmVuZG8uYmV0YSksVy55KX07Ti5iZXRhPUwsTC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpOLm5h''@;'; put 'put ''ZiYme3duZDpOLm5hZi53bmQscG9pbnRzOk4ubmFmLnBvaW50cy5tYXAoVSl9LGRvdWJsZXM6Ti5kb3VibGVzJiZ7c3RlcDpOLmRvdWJsZXMuc3RlcCxwb2ludHM6Ti5kb3VibGVzLnBvaW50cy5tYXAoVSl9fX1yZXR1cm4gTH19LEYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xp''@;'; put 'put ''Y2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEYuZnJvbUpTT049ZnVuY3Rpb24oTixMLEspeyJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgTCYmKEw9SlNPTi5wYXJzZShMKSk7dmFyIFU9Ti5wb2ludChMWzBdLExbMV0sSyk7aWYoIUxbMl0pcmV0dXJuIFU7ZnVuY3Rpb24gVyhxKXtyZXR1cm4gTi5wb2ludChxWzBdLHFbMV0sSyl9dmFyIFk9TFsyXTtyZXR1cm4gVS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6''@;'; put 'put ''WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6W1VdLmNvbmNhdChZLmRvdWJsZXMucG9pbnRzLm1hcChXKSl9LG5hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOltVXS5jb25jYXQoWS5uYWYucG9pbnRzLm1hcChXKSl9fSxVfSxGLnByb3RvdHlwZS5pbnNwZWN0''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEYucHJvdG90eXBlLmlz''@;'; put 'put ''SW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gTjtpZihOLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKE4pKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoTikpcmV0dXJu''@;'; put 'put ''IHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChOLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy55LnJlZFN1YihOLnkpOzAhPT1MLmNtcG4oMCkmJihMPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoTi54KS5yZWRJbnZt''@;'; put 'put ''KCkpKTt2YXIgSz1MLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKE4ueCksVT1MLnJlZE11bCh0aGlzLngucmVkU3ViKEspKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYp''@;'; put 'put ''cmV0dXJuIHRoaXM7dmFyIE49dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1OLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLmN1cnZlLmEsSz10aGlzLngucmVkU3FyKCksVT1OLnJlZEludm0oKSxXPUsucmVkQWRkKEspLnJlZElBZGQo''@;'; put 'put ''SykucmVkSUFkZChMKS5yZWRNdWwoVSksWT1XLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxxPVcucmVkTXVsKHRoaXMueC5yZWRTdWIoWSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLHEpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4pe3JldHVybiBOPW5ldyBfKE4sMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFz''@;'; put 'put ''RG91YmxlcyhOKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLE4pOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW05dKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihOLEwsSyl7dmFy''@;'; put 'put ''IFU9W3RoaXMsTF0sVz1bTixLXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFUsVyk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFUsVywyKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihOLEwsSyl7dmFyIFU9W3RoaXMsTF0sVz1bTixL''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFUsVywhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFUsVywyLCEwKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXM9PT1OfHx0aGlzLmluZj09PU4uaW5mJiYodGhpcy5p''@;'; put 'put ''bmZ8fDA9PT10aGlzLnguY21wKE4ueCkmJjA9PT10aGlzLnkuY21wKE4ueSkpfSxGLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oTil7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihOJiZ0aGlzLnByZWNvbXB1''@;'; put 'put ''dGVkKXt2YXIgSz10aGlzLnByZWNvbXB1dGVkLFU9ZnVuY3Rpb24oVyl7cmV0dXJuIFcubmVnKCl9O0wucHJlY29tcHV0ZWQ9e25hZjpLLm5hZiYme3duZDpLLm5hZi53bmQscG9pbnRzOksubmFmLnBvaW50cy5tYXAoVSl9LGRvdWJsZXM6Sy5kb3VibGVzJiZ7c3RlcDpLLmRvdWJsZXMuc3Rl''@;'; put 'put ''cCxwb2ludHM6Sy5kb3VibGVzLnBvaW50cy5tYXAoVSl9fX1yZXR1cm4gTH0sRi5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUu''@;'; put 'put ''b25lKX0sZyhPLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVybiBuZXcgTyh0aGlzLE4sTCxLKX0sTy5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxs''@;'; put 'put ''KTt2YXIgTj10aGlzLnoucmVkSW52bSgpLEw9Ti5yZWRTcXIoKSxLPXRoaXMueC5yZWRNdWwoTCksVT10aGlzLnkucmVkTXVsKEwpLnJlZE11bChOKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxPLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9p''@;'; put 'put ''bnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxPLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIE47aWYoTi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9Ti56LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFU9dGhp''@;'; put 'put ''cy54LnJlZE11bChMKSxXPU4ueC5yZWRNdWwoSyksWT10aGlzLnkucmVkTXVsKEwucmVkTXVsKE4ueikpLHE9Ti55LnJlZE11bChLLnJlZE11bCh0aGlzLnopKSxlZT1VLnJlZFN1YihXKSxKPVkucmVkU3ViKHEpO2lmKDA9PT1lZS5jbXBuKDApKXJldHVybiAwIT09Si5jbXBuKDApP3RoaXMu''@;'; put 'put ''Y3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBuZT1lZS5yZWRTcXIoKSxpZT1uZS5yZWRNdWwoZWUpLGxlPVUucmVkTXVsKG5lKSxtZT1KLnJlZFNxcigpLnJlZElBZGQoaWUpLnJlZElTdWIobGUpLnJlZElTdWIobGUpLF9lPUoucmVkTXVsKGxlLnJlZElTdWIo''@;'; put 'put ''bWUpKS5yZWRJU3ViKFkucmVkTXVsKGllKSksVGU9dGhpcy56LnJlZE11bChOLnopLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG1lLF9lLFRlKX0sTy5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIE4udG9KKCk7''@;'; put 'put ''aWYoTi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy56LnJlZFNxcigpLEs9dGhpcy54LFU9Ti54LnJlZE11bChMKSxXPXRoaXMueSxZPU4ueS5yZWRNdWwoTCkucmVkTXVsKHRoaXMueikscT1LLnJlZFN1YihVKSxlZT1XLnJlZFN1YihZKTtpZigwPT09cS5jbXBuKDApKXJl''@;'; put 'put ''dHVybiAwIT09ZWUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgSj1xLnJlZFNxcigpLG5lPUoucmVkTXVsKHEpLGllPUsucmVkTXVsKEopLGxlPWVlLnJlZFNxcigpLnJlZElBZGQobmUpLnJlZElTdWIoaWUpLnJlZElTdWIoaWUpLG1l''@;'; put 'put ''PWVlLnJlZE11bChpZS5yZWRJU3ViKGxlKSkucmVkSVN1YihXLnJlZE11bChuZSkpLF9lPXRoaXMuei5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihOKXtpZigwPT09TilyZXR1cm4gdGhpcztpZih0aGlzLmlz''@;'; put 'put ''SW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighTilyZXR1cm4gdGhpcy5kYmwoKTt2YXIgTDtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIEs9dGhpcztmb3IoTD0wO0w8TjtMKyspSz1LLmRibCgpO3JldHVybiBLfXZhciBVPXRoaXMuY3VydmUuYSxXPXRoaXMu''@;'; put 'put ''Y3VydmUudGludixZPXRoaXMueCxxPXRoaXMueSxlZT10aGlzLnosSj1lZS5yZWRTcXIoKS5yZWRTcXIoKSxuZT1xLnJlZEFkZChxKTtmb3IoTD0wO0w8TjtMKyspe3ZhciBpZT1ZLnJlZFNxcigpLGxlPW5lLnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPWllLnJlZEFkZChpZSkucmVkSUFk''@;'; put 'put ''ZChpZSkucmVkSUFkZChVLnJlZE11bChKKSksVGU9WS5yZWRNdWwobGUpLFNlPV9lLnJlZFNxcigpLnJlZElTdWIoVGUucmVkQWRkKFRlKSksamU9VGUucmVkSVN1YihTZSksVj1fZS5yZWRNdWwoamUpO1Y9Vi5yZWRJQWRkKFYpLnJlZElTdWIobWUpO3ZhciBwPW5lLnJlZE11bChlZSk7TCsx''@;'; put 'put ''PE4mJihKPUoucmVkTXVsKG1lKSksWT1TZSxlZT1wLG5lPVZ9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFksbmUucmVkTXVsKFcpLGVlKX0sTy5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJv''@;'; put 'put ''RGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sTy5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgTixMLEs7aWYodGhpcy56T25lKXt2YXIgVT10aGlzLngucmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1XLnJlZFNxcigpLHE9''@;'; put 'put ''dGhpcy54LnJlZEFkZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSksbmU9WS5yZWRJQWRkKFkpO25lPShuZT1uZS5yZWRJQWRkKG5l''@;'; put 'put ''KSkucmVkSUFkZChuZSksTj1KLEw9ZWUucmVkTXVsKHEucmVkSVN1YihKKSkucmVkSVN1YihuZSksSz10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaWU9dGhpcy54LnJlZFNxcigpLGxlPXRoaXMueS5yZWRTcXIoKSxtZT1sZS5yZWRTcXIoKSxfZT10aGlzLngucmVkQWRkKGxlKS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRJU3ViKGllKS5yZWRJU3ViKG1lKTtfZT1fZS5yZWRJQWRkKF9lKTt2YXIgVGU9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKSxTZT1UZS5yZWRTcXIoKSxqZT1tZS5yZWRJQWRkKG1lKTtqZT0oamU9amUucmVkSUFkZChqZSkpLnJlZElBZGQoamUpLE49U2UucmVkSVN1Yihf''@;'; put 'put ''ZSkucmVkSVN1YihfZSksTD1UZS5yZWRNdWwoX2UucmVkSVN1YihOKSkucmVkSVN1YihqZSksSz0oSz10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoSyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KE4sTCxLKX0sTy5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIE4s''@;'; put 'put ''TCxLO2lmKHRoaXMuek9uZSl7dmFyIFU9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUp''@;'; put 'put ''LnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxKPWVlLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKTtOPUo7dmFyIG5lPVkucmVkSUFkZChZKTtuZT0obmU9bmUucmVkSUFkZChuZSkpLnJlZElBZGQobmUpLEw9ZWUucmVkTXVsKHEucmVkSVN1YihKKSkucmVkSVN1YihuZSksSz10aGlzLnku''@;'; put 'put ''cmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaWU9dGhpcy56LnJlZFNxcigpLGxlPXRoaXMueS5yZWRTcXIoKSxtZT10aGlzLngucmVkTXVsKGxlKSxfZT10aGlzLngucmVkU3ViKGllKS5yZWRNdWwodGhpcy54LnJlZEFkZChpZSkpO19lPV9lLnJlZEFkZChfZSkucmVkSUFkZChfZSk7dmFyIFRl''@;'; put 'put ''PW1lLnJlZElBZGQobWUpLFNlPShUZT1UZS5yZWRJQWRkKFRlKSkucmVkQWRkKFRlKTtOPV9lLnJlZFNxcigpLnJlZElTdWIoU2UpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIobGUpLnJlZElTdWIoaWUpO3ZhciBqZT1sZS5yZWRTcXIoKTtqZT0oamU9KGplPWpl''@;'; put 'put ''LnJlZElBZGQoamUpKS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSksTD1fZS5yZWRNdWwoVGUucmVkSVN1YihOKSkucmVkSVN1YihqZSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KE4sTCxLKX0sTy5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuY3VydmUuYSxMPXRoaXMu''@;'; put 'put ''eCxLPXRoaXMueSxVPXRoaXMueixXPVUucmVkU3FyKCkucmVkU3FyKCksWT1MLnJlZFNxcigpLHE9Sy5yZWRTcXIoKSxlZT1ZLnJlZEFkZChZKS5yZWRJQWRkKFkpLnJlZElBZGQoTi5yZWRNdWwoVykpLEo9TC5yZWRBZGQoTCksbmU9KEo9Si5yZWRJQWRkKEopKS5yZWRNdWwocSksaWU9ZWUu''@;'; put 'put ''cmVkU3FyKCkucmVkSVN1YihuZS5yZWRBZGQobmUpKSxsZT1uZS5yZWRJU3ViKGllKSxtZT1xLnJlZFNxcigpO21lPShtZT0obWU9bWUucmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIgX2U9ZWUucmVkTXVsKGxlKS5yZWRJU3ViKG1lKSxUZT1LLnJlZEFkZChLKS5y''@;'; put 'put ''ZWRNdWwoVSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGllLF9lLFRlKX0sTy5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgTj10aGlzLngucmVkU3FyKCksTD10aGlzLnkucmVkU3FyKCksSz10''@;'; put 'put ''aGlzLnoucmVkU3FyKCksVT1MLnJlZFNxcigpLFc9Ti5yZWRBZGQoTikucmVkSUFkZChOKSxZPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKEwpLnJlZFNxcigpLnJlZElTdWIoTikucmVkSVN1YihVKSxlZT0ocT0ocT0ocT1xLnJlZElBZGQocSkpLnJlZEFkZChxKS5yZWRJQWRkKHEpKS5y''@;'; put 'put ''ZWRJU3ViKFkpKS5yZWRTcXIoKSxKPVUucmVkSUFkZChVKTtKPShKPShKPUoucmVkSUFkZChKKSkucmVkSUFkZChKKSkucmVkSUFkZChKKTt2YXIgbmU9Vy5yZWRJQWRkKHEpLnJlZFNxcigpLnJlZElTdWIoWSkucmVkSVN1YihlZSkucmVkSVN1YihKKSxpZT1MLnJlZE11bChuZSk7aWU9KGll''@;'; put 'put ''PWllLnJlZElBZGQoaWUpKS5yZWRJQWRkKGllKTt2YXIgbGU9dGhpcy54LnJlZE11bChlZSkucmVkSVN1YihpZSk7bGU9KGxlPWxlLnJlZElBZGQobGUpKS5yZWRJQWRkKGxlKTt2YXIgbWU9dGhpcy55LnJlZE11bChuZS5yZWRNdWwoSi5yZWRJU3ViKG5lKSkucmVkSVN1YihxLnJlZE11bChl''@;'; put 'put ''ZSkpKTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIF9lPXRoaXMuei5yZWRBZGQocSkucmVkU3FyKCkucmVkSVN1YihLKS5yZWRJU3ViKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5tdWw9''@;'; put 'put ''ZnVuY3Rpb24oTixMKXtyZXR1cm4gTj1uZXcgXyhOLEwpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sTy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7aWYoImFmZmluZSI9PT1OLnR5cGUpcmV0dXJuIHRoaXMuZXEoTi50b0ooKSk7aWYodGhpcz09PU4pcmV0dXJuITA7dmFyIEw9dGhp''@;'; put 'put ''cy56LnJlZFNxcigpLEs9Ti56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKEspLnJlZElTdWIoTi54LnJlZE11bChMKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgVT1MLnJlZE11bCh0aGlzLnopLFc9Sy5yZWRNdWwoTi56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoVykucmVkSVN1''@;'; put 'put ''YihOLnkucmVkTXVsKFUpKS5jbXBuKDApfSxPLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oTil7dmFyIEw9dGhpcy56LnJlZFNxcigpLEs9Ti50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKEwpO2lmKDA9PT10aGlzLnguY21wKEspKXJldHVybiEwO2Zvcih2YXIgVT1OLmNsb25lKCks''@;'; put 'put ''Vz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKEwpOzspe2lmKFUuaWFkZCh0aGlzLmN1cnZlLm4pLFUuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoSy5yZWRJQWRkKFcpLDA9PT10aGlzLnguY21wKEspKXJldHVybiEwfX0sTy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMgSlBvaW50IHg6ICIrdGhpcy54LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LE8ucHJvdG90eXBlLmlzSW5m''@;'; put 'put ''aW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sMjM0MDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIE8sST1YLF89eSg1MjUyOSksZz15KDg3MjkpLHc9eSgzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXt0aGlzLmN1cnZlPSJzaG9ydCI9PT16LnR5cGU/''@;'; put 'put ''bmV3IGcuc2hvcnQoeik6ImVkd2FyZHMiPT09ei50eXBlP25ldyBnLmVkd2FyZHMoeik6bmV3IGcubW9udCh6KSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPXouaGFzaCx3KHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksdyh0aGlz''@;'; put 'put ''LmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIEYoeixOKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgTD1uZXcgUChOKTtyZXR1cm4g''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6TH0pLEx9fSl9SS5QcmVzZXRDdXJ2ZT1QLEYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5''@;'; put 'put ''ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0p''@;'; put 'put ''LEYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpb''@;'; put 'put ''ImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLEYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVs''@;'; put 'put ''bCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4''@;'; put 'put ''IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6''@;'; put 'put ''WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxGKCJwMzg0Iix7dHlw''@;'; put 'put ''ZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4''@;'; put 'put ''YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6Xy5zaGEzODQsZ1JlZDohMSxnOlsi''@;'; put 'put ''YWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBl''@;'; put 'put ''OWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksRigicDUyMSIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5''@;'; put 'put ''NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5''@;'; put 'put ''NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOl8uc2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJh''@;'; put 'put ''IGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkg''@;'; put 'put ''NWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLEYoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxGKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIs''@;'; put 'put ''cHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1''@;'; put 'put ''OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1''@;'; put 'put ''ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXtPPXkoNTE0MTYpfWNhdGNoe089dm9pZCAwfUYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOl8uc2hhMjU2''@;'; put 'put ''LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIy''@;'; put 'put ''MWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2Vm''@;'; put 'put ''OWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLE9dfSl9LDI5MDQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoODg3MjMpLF89eSgzMzU1NiksZz15KDMxMzYpLEI9eSgyMzQwMSksdz15KDM1Mjk0KSxQPWcuYXNzZXJ0LEY9eSg2MDU0MSksTz15KDQwNDg0KTtmdW5jdGlvbiB6KE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgeihOKTsic3RyaW5nIj09dHlwZW9mIE4mJihQKE9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pLCJVbmtub3duIGN1cnZlICIrTiksTj1CW05dKSxOIGluc3RhbmNlb2YgQi5QcmVzZXRDdXJ2ZSYmKE49e2N1cnZlOk59KSx0aGlzLmN1cnZlPU4uY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRo''@;'; put 'put ''aXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1OLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoTi5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1OLmhhc2h8fE4uY3VydmUuaGFzaH11ZS5leHBvcnRzPXosei5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlv''@;'; put 'put ''bihMKXtyZXR1cm4gbmV3IEYodGhpcyxMKX0sei5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gRi5mcm9tUHJpdmF0ZSh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gRi5mcm9tUHVibGljKHRoaXMs''@;'; put 'put ''TCxLKX0sei5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihMKXtMfHwoTD17fSk7Zm9yKHZhciBLPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxwZXJzOkwucGVycyxwZXJzRW5jOkwucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6TC5lbnRyb3B5fHx3KHRoaXMuaGFzaC5obWFjU3RyZW5ndGgp''@;'; put 'put ''LGVudHJvcHlFbmM6TC5lbnRyb3B5JiZMLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksVT10aGlzLm4uYnl0ZUxlbmd0aCgpLFc9dGhpcy5uLnN1YihuZXcgSSgyKSk7Oyl7dmFyIFk9bmV3IEkoSy5nZW5lcmF0ZShVKSk7aWYoIShZLmNtcChXKT4wKSlyZXR1''@;'; put 'put ''cm4gWS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKFkpfX0sei5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVztpZihJLmlzQk4oTCl8fCJudW1iZXIiPT10eXBlb2YgTClXPShMPW5ldyBJKEwsMTYpKS5ieXRlTGVuZ3RoKCk7ZWxzZSBpZigib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIEwpVz1MLmxlbmd0aCxMPW5ldyBJKEwsMTYpO2Vsc2V7dmFyIFk9TC50b1N0cmluZygpO1c9WS5sZW5ndGgrMT4+PjEsTD1uZXcgSShZLDE2KX0ibnVtYmVyIiE9dHlwZW9mIFUmJihVPTgqVyk7dmFyIHE9VS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHE+MCYmKEw9TC51''@;'; put 'put ''c2hybihxKSksIUsmJkwuY21wKHRoaXMubik+PTA/TC5zdWIodGhpcy5uKTpMfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEwsSyxVLFcpe2lmKCJvYmplY3QiPT10eXBlb2YgVSYmKFc9VSxVPW51bGwpLFd8fChXPXt9KSwic3RyaW5nIiE9dHlwZW9mIEwmJiJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''TCYmIUkuaXNCTihMKSl7UCgib2JqZWN0Ij09dHlwZW9mIEwmJkwmJiJudW1iZXIiPT10eXBlb2YgTC5sZW5ndGgsIkV4cGVjdGVkIG1lc3NhZ2UgdG8gYmUgYW4gYXJyYXktbGlrZSwgYSBoZXggc3RyaW5nLCBvciBhIEJOIGluc3RhbmNlIiksUChMLmxlbmd0aD4+PjA9PT1MLmxlbmd0aCk7''@;'; put 'put ''Zm9yKHZhciBZPTA7WTxMLmxlbmd0aDtZKyspUCgoMjU1JkxbWV0pPT09TFtZXSl9Sz10aGlzLmtleUZyb21Qcml2YXRlKEssVSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFcubXNnQml0TGVuZ3RoKSxQKCFMLmlzTmVnKCksIkNhbiBub3Qgc2lnbiBhIG5lZ2F0aXZlIG1lc3NhZ2UiKTt2''@;'; put 'put ''YXIgcT10aGlzLm4uYnl0ZUxlbmd0aCgpLGVlPUsuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixxKSxKPUwudG9BcnJheSgiYmUiLHEpO1AobmV3IEkoSikuZXEoTCksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciBuZT1uZXcgXyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTplZSxu''@;'; put 'put ''b25jZTpKLHBlcnM6Vy5wZXJzLHBlcnNFbmM6Vy5wZXJzRW5jfHwidXRmOCJ9KSxpZT10aGlzLm4uc3ViKG5ldyBJKDEpKSxsZT0wOztsZSsrKXt2YXIgbWU9Vy5rP1cuayhsZSk6bmV3IEkobmUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKG1lPXRoaXMuX3RydW5jYXRl''@;'; put 'put ''VG9OKG1lLCEwKSkuY21wbigxKTw9MHx8bWUuY21wKGllKT49MCkpe3ZhciBfZT10aGlzLmcubXVsKG1lKTtpZighX2UuaXNJbmZpbml0eSgpKXt2YXIgVGU9X2UuZ2V0WCgpLFNlPVRlLnVtb2QodGhpcy5uKTtpZigwIT09U2UuY21wbigwKSl7dmFyIGplPW1lLmludm0odGhpcy5uKS5tdWwo''@;'; put 'put ''U2UubXVsKEsuZ2V0UHJpdmF0ZSgpKS5pYWRkKEwpKTtpZigwIT09KGplPWplLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIFY9KF9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1UZS5jbXAoU2UpPzI6MCk7cmV0dXJuIFcuY2Fub25pY2FsJiZqZS5jbXAodGhpcy5uaCk+MCYmKGplPXRo''@;'; put 'put ''aXMubi5zdWIoamUpLFZePTEpLG5ldyBPKHtyOlNlLHM6amUscmVjb3ZlcnlQYXJhbTpWfSl9fX19fX0sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEwsSyxVLFcsWSl7WXx8KFk9e30pLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxZLm1zZ0JpdExlbmd0aCksVT10aGlzLmtleUZyb21Q''@;'; put 'put ''dWJsaWMoVSxXKTt2YXIgcT0oSz1uZXcgTyhLLCJoZXgiKSkucixlZT1LLnM7aWYocS5jbXBuKDEpPDB8fHEuY21wKHRoaXMubik+PTB8fGVlLmNtcG4oMSk8MHx8ZWUuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGxlLEo9ZWUuaW52bSh0aGlzLm4pLG5lPUoubXVsKEwpLnVtb2QodGhp''@;'; put 'put ''cy5uKSxpZT1KLm11bChxKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKGxlPXRoaXMuZy5qbXVsQWRkKG5lLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJmxlLmVxWFRvUChxKTohKGxlPXRoaXMuZy5tdWxBZGQobmUsVS5nZXRQdWJsaWMo''@;'; put 'put ''KSxpZSkpLmlzSW5maW5pdHkoKSYmMD09PWxlLmdldFgoKS51bW9kKHRoaXMubikuY21wKHEpfSx6LnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKE4sTCxLLFUpe1AoKDMmSyk9PT1LLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksTD1uZXcgTyhM''@;'; put 'put ''LFUpO3ZhciBXPXRoaXMubixZPW5ldyBJKE4pLHE9TC5yLGVlPUwucyxKPTEmSyxuZT1LPj4xO2lmKHEuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZuZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO3E9dGhp''@;'; put 'put ''cy5jdXJ2ZS5wb2ludEZyb21YKG5lP3EuYWRkKHRoaXMuY3VydmUubik6cSxKKTt2YXIgaWU9TC5yLmludm0oVyksbGU9Vy5zdWIoWSkubXVsKGllKS51bW9kKFcpLG1lPWVlLm11bChpZSkudW1vZChXKTtyZXR1cm4gdGhpcy5nLm11bEFkZChsZSxxLG1lKX0sei5wcm90b3R5cGUuZ2V0S2V5''@;'; put 'put ''UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihOLEwsSyxVKXtpZihudWxsIT09KEw9bmV3IE8oTCxVKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4gTC5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVz0wO1c8NDtXKyspe3ZhciBZO3RyeXtZPXRoaXMucmVjb3ZlclB1YktleShOLEwsVyl9Y2F0Y2h7Y29udGlu''@;'; put 'put ''dWV9aWYoWS5lcShLKSlyZXR1cm4gV310aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sNjA1NDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODcyMyksZz15KDMxMzYpLmFzc2VydDtmdW5jdGlvbiBCKHcsUCl7dGhpcy5l''@;'; put 'put ''Yz13LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsUC5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKFAucHJpdixQLnByaXZFbmMpLFAucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoUC5wdWIsUC5wdWJFbmMpfXVlLmV4cG9ydHM9QixCLmZyb21QdWJsaWM9ZnVuY3Rpb24oUCxGLE8pe3Jl''@;'; put 'put ''dHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3B1YjpGLHB1YkVuYzpPfSl9LEIuZnJvbVByaXZhdGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3ByaXY6Rixwcml2RW5jOk99KX0sQi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgUD10aGlzLmdldFB1YmxpYygpO3JldHVybiBQLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06UC52YWxpZGF0ZSgpP1AubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6''@;'; put 'put ''ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sQi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFAsRil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBQJiYoRj1QLFA9bnVsbCksdGhpcy5wdWJ8''@;'; put 'put ''fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLEY/dGhpcy5wdWIuZW5jb2RlKEYsUCk6dGhpcy5wdWJ9LEIucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuImhleCI9PT1QP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEIucHJvdG90''@;'; put 'put ''eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKFAsRil7dGhpcy5wcml2PW5ldyBJKFAsRnx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxCLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKFAsRil7aWYoUC54fHxQLnkpcmV0dXJuIm1vbnQi''@;'; put 'put ''PT09dGhpcy5lYy5jdXJ2ZS50eXBlP2coUC54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlfHwiZWR3YXJkcyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZnKFAueCYmUC55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlz''@;'; put 'put ''LnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KFAueCxQLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KFAsRil9LEIucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihQKXtyZXR1cm4gUC52YWxpZGF0ZSgpfHxnKFAudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxp''@;'; put 'put ''ZGF0ZWQiKSxQLm11bCh0aGlzLnByaXYpLmdldFgoKX0sQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMuc2lnbihQLHRoaXMsRixPKX0sQi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoUCxGLHRoaXMs''@;'; put 'put ''dm9pZCAwLE8pfSxCLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNDA0ODQ6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSg4ODcyMyksXz15KDMxMzYpLGc9Xy5hc3NlcnQ7ZnVuY3Rpb24gQih6LE4pe2lmKHogaW5zdGFuY2VvZiBCKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwoZyh6LnImJnoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJ''@;'; put 'put ''KHouciwxNiksdGhpcy5zPW5ldyBJKHoucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBQKHosTil7dmFyIEw9eltOLnBsYWNlKytdO2lmKCEoMTI4''@;'; put 'put ''JkwpKXJldHVybiBMO3ZhciBLPTE1Jkw7aWYoMD09PUt8fEs+NHx8MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBVPTAsVz0wLFk9Ti5wbGFjZTtXPEs7VysrLFkrKylVPDw9OCxVfD16W1ldLFU+Pj49MDtyZXR1cm4hKFU8PTEyNykmJihOLnBsYWNlPVksVSl9ZnVuY3Rpb24gRih6''@;'; put 'put ''KXtmb3IodmFyIE49MCxMPXoubGVuZ3RoLTE7IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48TDspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gTyh6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBMPTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHou''@;'; put 'put ''cHVzaCgxMjh8TCk7LS1MOyl6LnB1c2goTj4+PihMPDwzKSYyNTUpO3oucHVzaChOKX19dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixMKXtOPV8udG9BcnJheShOLEwpO3ZhciBLPW5ldyB3O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBV''@;'; put 'put ''PVAoTixLKTtpZighMT09PVV8fFUrSy5wbGFjZSE9PU4ubGVuZ3RofHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBXPVAoTixLKTtpZighMT09PVd8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBZPU4uc2xpY2UoSy5wbGFjZSxXK0sucGxhY2UpO2lmKEsucGxhY2UrPVcsMiE9''@;'; put 'put ''PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1QKE4sSyk7aWYoITE9PT1xfHxOLmxlbmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lmKDA9PT1ZWzBdKXtpZighKDEyOCZZWzFdKSlyZXR1cm4hMTtZ''@;'; put 'put ''PVkuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtpZighKDEyOCZlZVsxXSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShZKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxCLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2''@;'; put 'put ''YXIgTD10aGlzLnIudG9BcnJheSgpLEs9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JkxbMF0mJihMPVswXS5jb25jYXQoTCkpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxMPUYoTCksSz1GKEspOyEoS1swXXx8MTI4JktbMV0pOylLPUsuc2xpY2UoMSk7dmFyIFU9WzJdO08oVSxMLmxl''@;'; put 'put ''bmd0aCksKFU9VS5jb25jYXQoTCkpLnB1c2goMiksTyhVLEsubGVuZ3RoKTt2YXIgVz1VLmNvbmNhdChLKSxZPVs0OF07cmV0dXJuIE8oWSxXLmxlbmd0aCksWT1ZLmNvbmNhdChXKSxfLmVuY29kZShZLE4pfX0sODMwNDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MjUyOSks''@;'; put 'put ''Xz15KDIzNDAxKSxnPXkoMzEzNiksQj1nLmFzc2VydCx3PWcucGFyc2VCeXRlcyxQPXkoODcyMjIpLEY9eSg1NDUxKTtmdW5jdGlvbiBPKHope2lmKEIoImVkMjU1MTkiPT09eiwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBu''@;'; put 'put ''ZXcgTyh6KTt0aGlzLmN1cnZlPXo9X1t6XS5jdXJ2ZSx0aGlzLmc9ei5nLHRoaXMuZy5wcmVjb21wdXRlKHoubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9ei5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHoubi5iaXRMZW5ndGgoKS84''@;'; put 'put ''KSx0aGlzLmhhc2g9SS5zaGE1MTJ9dWUuZXhwb3J0cz1PLE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTixMKXtOPXcoTik7dmFyIEs9dGhpcy5rZXlGcm9tU2VjcmV0KEwpLFU9dGhpcy5oYXNoSW50KEsubWVzc2FnZVByZWZpeCgpLE4pLFc9dGhpcy5nLm11bChVKSxZPXRoaXMuZW5jb2Rl''@;'; put 'put ''UG9pbnQoVykscT10aGlzLmhhc2hJbnQoWSxLLnB1YkJ5dGVzKCksTikubXVsKEsucHJpdigpKSxlZT1VLmFkZChxKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpXLFM6ZWUsUmVuY29kZWQ6WX0pfSxPLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24o''@;'; put 'put ''TixMLEspe2lmKE49dyhOKSwoTD10aGlzLm1ha2VTaWduYXR1cmUoTCkpLlMoKS5ndGUoTC5lZGRzYS5jdXJ2ZS5uKXx8TC5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIgVT10aGlzLmtleUZyb21QdWJsaWMoSyksVz10aGlzLmhhc2hJbnQoTC5SZW5jb2RlZCgpLFUucHViQnl0ZXMoKSxOKSxZ''@;'; put 'put ''PXRoaXMuZy5tdWwoTC5TKCkpO3JldHVybiBMLlIoKS5hZGQoVS5wdWIoKS5tdWwoVykpLmVxKFkpfSxPLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBOPXRoaXMuaGFzaCgpLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKU4udXBkYXRlKGFyZ3VtZW50c1tMXSk7cmV0''@;'; put 'put ''dXJuIGcuaW50RnJvbUxFKE4uZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sTy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihOKXtyZXR1cm4gUC5mcm9tUHVibGljKHRoaXMsTil9LE8ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJv''@;'; put 'put ''bVNlY3JldCh0aGlzLE4pfSxPLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKHRoaXMsTil9LE8ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPU4uZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVu''@;'; put 'put ''Y29kaW5nTGVuZ3RoKTtyZXR1cm4gTFt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1OLmdldFgoKS5pc09kZCgpPzEyODowLEx9LE8ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPShOPWcucGFyc2VCeXRlcyhOKSkubGVuZ3RoLTEsSz1OLnNsaWNlKDAsTCkuY29uY2F0''@;'; put 'put ''KC0xMjkmTltMXSksVT0hISgxMjgmTltMXSksVz1nLmludEZyb21MRShLKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFcsVSl9LE8ucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gTi50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LE8ucHJvdG90''@;'; put 'put ''eXBlLmRlY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gZy5pbnRGcm9tTEUoTil9LE8ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw4NzIyMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMxMzYpLF89''@;'; put 'put ''SS5hc3NlcnQsZz1JLnBhcnNlQnl0ZXMsQj1JLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIHcoUCxGKXt0aGlzLmVkZHNhPVAsdGhpcy5fc2VjcmV0PWcoRi5zZWNyZXQpLFAuaXNQb2ludChGLnB1Yik/dGhpcy5fcHViPUYucHViOnRoaXMuX3B1YkJ5dGVzPWcoRi5wdWIpfXcuZnJvbVB1Ymxp''@;'; put 'put ''Yz1mdW5jdGlvbihGLE8pe3JldHVybiBPIGluc3RhbmNlb2Ygdz9POm5ldyB3KEYse3B1YjpPfSl9LHcuZnJvbVNlY3JldD1mdW5jdGlvbihGLE8pe3JldHVybiBPIGluc3RhbmNlb2Ygdz9POm5ldyB3KEYse3NlY3JldDpPfSl9LHcucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLl9zZWNyZXR9LEIodywicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxCKHcsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRl''@;'; put 'put ''cyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxCKHcsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgRj10aGlzLmVkZHNhLE89dGhpcy5oYXNoKCksej1GLmVuY29kaW5nTGVuZ3RoLTEsTj1PLnNsaWNlKDAsRi5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIE5bMF0mPTI0OCxOW3pd''@;'; put 'put ''Jj0xMjcsTlt6XXw9NjQsTn0pLEIodywicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxCKHcsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3Qo''@;'; put 'put ''KX0pLEIodywibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSx3LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEYpe3JldHVybiBfKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnki''@;'; put 'put ''KSx0aGlzLmVkZHNhLnNpZ24oRix0aGlzKX0sdy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KEYsTyx0aGlzKX0sdy5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKEYpe3JldHVybiBfKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBw''@;'; put 'put ''dWJsaWMgb25seSIpLEkuZW5jb2RlKHRoaXMuc2VjcmV0KCksRil9LHcucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihGKXtyZXR1cm4gSS5lbmNvZGUodGhpcy5wdWJCeXRlcygpLEYpfSx1ZS5leHBvcnRzPXd9LDU0NTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODcy''@;'; put 'put ''MyksXz15KDMxMzYpLGc9Xy5hc3NlcnQsQj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixPKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBPJiYoTz13KE8pKSxBcnJheS5pc0FycmF5KE8pJiYoZyhPLmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0''@;'; put 'put ''aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxPPXtSOk8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKSxTOk8uc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxnKE8uUiYmTy5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlzUG9pbnQoTy5SKSYmKHRoaXMuX1I9Ty5SKSxP''@;'; put 'put ''LlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1PLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoTy5SKT9PLlI6Ty5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KE8uUyk/Ty5TOk8uU2VuY29kZWR9QihQLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNh''@;'; put 'put ''LmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksQihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxCKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0p''@;'; put 'put ''LEIoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sdWUuZXhwb3J0cz1QfSw1MTQxNjp1ZT0+e3VlLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2''@;'; put 'put ''OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIx''@;'; put 'put ''MWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFm''@;'; put 'put ''NWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVl''@;'; put 'put ''OWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3''@;'; put 'put ''NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5''@;'; put 'put ''YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJh''@;'; put 'put ''MDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQx''@;'; put 'put ''OWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsi''@;'; put 'put ''ZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIy''@;'; put 'put ''MTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNh''@;'; put 'put ''ZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAx''@;'; put 'put ''ZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4''@;'; put 'put ''Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJk''@;'; put 'put ''ZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2''@;'; put 'put ''MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJj''@;'; put 'put ''MmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJk''@;'; put 'put ''ZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVl''@;'; put 'put ''MzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJi''@;'; put 'put ''OTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYz''@;'; put 'put ''MjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0''@;'; put 'put ''ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVm''@;'; put 'put ''Nzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsi''@;'; put 'put ''YjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3''@;'; put 'put ''ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0''@;'; put 'put ''ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRj''@;'; put 'put ''YmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYy''@;'; put 'put ''M2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4''@;'; put 'put ''ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0''@;'; put 'put ''ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2''@;'; put 'put ''N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4''@;'; put 'put ''YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFi''@;'; put 'put ''N2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhh''@;'; put 'put ''OWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEy''@;'; put 'put ''MTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0''@;'; put 'put ''MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZm''@;'; put 'put ''MjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVk''@;'; put 'put ''MGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVk''@;'; put 'put ''ZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZl''@;'; put 'put ''MjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBm''@;'; put 'put ''ODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdm''@;'; put 'put ''NzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3''@;'; put 'put ''MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5''@;'; put 'put ''YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1''@;'; put 'put ''N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4''@;'; put 'put ''OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFm''@;'; put 'put ''YTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVh''@;'; put 'put ''MTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0''@;'; put 'put ''MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0''@;'; put 'put ''MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgx''@;'; put 'put ''ZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhj''@;'; put 'put ''MjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQy''@;'; put 'put ''M2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5''@;'; put 'put ''Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1''@;'; put 'put ''NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1''@;'; put 'put ''NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFj''@;'; put 'put ''NjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFk''@;'; put 'put ''MTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFi''@;'; put 'put ''YmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4''@;'; put 'put ''MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJk''@;'; put 'put ''ODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIy''@;'; put 'put ''YjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMz''@;'; put 'put ''MzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVj''@;'; put 'put ''YWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3''@;'; put 'put ''MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0''@;'; put 'put ''MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2''@;'; put 'put ''OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBi''@;'; put 'put ''MGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5''@;'; put 'put ''NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRi''@;'; put 'put ''MDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJk''@;'; put 'put ''NTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTll''@;'; put 'put ''ZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIz''@;'; put 'put ''MTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2''@;'; put 'put ''NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5''@;'; put 'put ''OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2''@;'; put 'put ''ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1''@;'; put 'put ''NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgy''@;'; put 'put ''MTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5''@;'; put 'put ''MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4''@;'; put 'put ''MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAz''@;'; put 'put ''MzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjcz''@;'; put 'put ''N2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5''@;'; put 'put ''YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDVi''@;'; put 'put ''MjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDlj''@;'; put 'put ''NiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdj''@;'; put 'put ''MzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJk''@;'; put 'put ''YzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2Njlk''@;'; put 'put ''ODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQy''@;'; put 'put ''ZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUx''@;'; put 'put ''NDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5''@;'; put 'put ''OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3''@;'; put 'put ''NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4''@;'; put 'put ''YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3''@;'; put 'put ''YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFm''@;'; put 'put ''OGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3''@;'; put 'put ''MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0''@;'; put 'put ''Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0''@;'; put 'put ''YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkz''@;'; put 'put ''YiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWEx''@;'; put 'put ''NTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2''@;'; put 'put ''OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZi''@;'; put 'put ''NDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2''@;'; put 'put ''ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRm''@;'; put 'put ''NGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlk''@;'; put 'put ''MjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5''@;'; put 'put ''OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3''@;'; put 'put ''NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRj''@;'; put 'put ''NzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIy''@;'; put 'put ''OTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5''@;'; put 'put ''MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1''@;'; put 'put ''N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZh''@;'; put 'put ''ZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0s''@;'; put 'put ''WyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0''@;'; put 'put ''MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJi''@;'; put 'put ''Nzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2Zi''@;'; put 'put ''ZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4''@;'; put 'put ''ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMx''@;'; put 'put ''M2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRl''@;'; put 'put ''NDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJi''@;'; put 'put ''MjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdm''@;'; put 'put ''OGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1''@;'; put 'put ''OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMy''@;'; put 'put ''NDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0''@;'; put 'put ''NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4''@;'; put 'put ''NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2''@;'; put 'put ''Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIz''@;'; put 'put ''Nzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3''@;'; put 'put ''NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhi''@;'; put 'put ''NDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMw''@;'; put 'put ''ZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3''@;'; put 'put ''YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1''@;'; put 'put ''NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5''@;'; put 'put ''MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2''@;'; put 'put ''Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5''@;'; put 'put ''MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2''@;'; put 'put ''YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlm''@;'; put 'put ''YWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJl''@;'; put 'put ''YzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUw''@;'; put 'put ''ZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5''@;'; put 'put ''MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsi''@;'; put 'put ''NTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVm''@;'; put 'put ''YTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0''@;'; put 'put ''N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAx''@;'; put 'put ''YWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJk''@;'; put 'put ''YTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMw''@;'; put 'put ''MDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2''@;'; put 'put ''OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2''@;'; put 'put ''MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1''@;'; put 'put ''NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3''@;'; put 'put ''YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4''@;'; put 'put ''NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5''@;'; put 'put ''OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1''@;'; put 'put ''ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFl''@;'; put 'put ''MGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsi''@;'; put 'put ''MzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5''@;'; put 'put ''NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUz''@;'; put 'put ''MjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4''@;'; put 'put ''NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVl''@;'; put 'put ''YmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDMxMzY6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WCxfPXkoODg3MjMpLGc9eSgzOTIxMCksQj15KDIxODMyKTtJLmFzc2VydD1nLEkudG9BcnJheT1CLnRvQXJyYXksSS56ZXJvMj1CLnplcm8yLEkudG9IZXg9Qi50b0hleCxJLmVuY29kZT1CLmVuY29kZSxJLmdldE5BRj1mdW5jdGlvbiB3KE4s''@;'; put 'put ''TCxLKXt2YXIgVyxVPW5ldyBBcnJheShNYXRoLm1heChOLmJpdExlbmd0aCgpLEspKzEpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKz0xKVVbV109MDt2YXIgWT0xPDxMKzEscT1OLmNsb25lKCk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crKyl7dmFyIGVlLEo9cS5hbmRsbihZLTEpO3EuaXNPZGQoKT9x''@;'; put 'put ''LmlzdWJuKGVlPUo+KFk+PjEpLTE/KFk+PjEpLUo6Sik6ZWU9MCxVW1ddPWVlLHEuaXVzaHJuKDEpfXJldHVybiBVfSxJLmdldEpTRj1mdW5jdGlvbiBQKE4sTCl7dmFyIEs9W1tdLFtdXTtOPU4uY2xvbmUoKSxMPUwuY2xvbmUoKTtmb3IodmFyIFksVT0wLFc9MDtOLmNtcG4oLVUpPjB8fEwu''@;'; put 'put ''Y21wbigtVyk+MDspe3ZhciBKLG5lLHE9Ti5hbmRsbigzKStVJjMsZWU9TC5hbmRsbigzKStXJjM7Mz09PXEmJihxPS0xKSwzPT09ZWUmJihlZT0tMSksSj0xJnE/MyE9KFk9Ti5hbmRsbig3KStVJjcpJiY1IT09WXx8MiE9PWVlP3E6LXE6MCxLWzBdLnB1c2goSiksbmU9MSZlZT8zIT0oWT1M''@;'; put 'put ''LmFuZGxuKDcpK1cmNykmJjUhPT1ZfHwyIT09cT9lZTotZWU6MCxLWzFdLnB1c2gobmUpLDIqVT09PUorMSYmKFU9MS1VKSwyKlc9PT1uZSsxJiYoVz0xLVcpLE4uaXVzaHJuKDEpLEwuaXVzaHJuKDEpfXJldHVybiBLfSxJLmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uIEYoTixMLEspe3ZhciBV''@;'; put 'put ''PSJfIitMO04ucHJvdG90eXBlW0xdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbVV0/dGhpc1tVXTp0aGlzW1VdPUsuY2FsbCh0aGlzKX19LEkucGFyc2VCeXRlcz1mdW5jdGlvbiBPKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTj9JLnRvQXJyYXkoTiwiaGV4Iik6Tn0sSS5p''@;'; put 'put ''bnRGcm9tTEU9ZnVuY3Rpb24geihOKXtyZXR1cm4gbmV3IF8oTiwiaGV4IiwibGUiKX19LDg4NzIzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1m''@;'; put 'put ''dW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJO''@;'; put 'put ''PXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNzkzNjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8''@;'; put 'put ''PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtI''@;'; put 'put ''Kyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29y''@;'; put 'put ''ZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9''@;'; put 'put ''cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp''@;'; put 'put ''LGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4''@;'; put 'put ''ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXko''@;'; put 'put ''KSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMp''@;'; put 'put ''LHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFd''@;'; put 'put ''PDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8''@;'; put 'put ''cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgo''@;'; put 'put ''cC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhp''@;'; put 'put ''cy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8o''@;'; put 'put ''VC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9i''@;'; put 'put ''fDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3Zh''@;'; put 'put ''ciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtw''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUs''@;'; put 'put ''NjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUs''@;'; put 'put ''MTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3Au''@;'; put 'put ''bGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgu''@;'; put 'put ''bWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9''@;'; put 'put ''PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3Zh''@;'; put 'put ''ciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9T''@;'; put 'put ''dHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFl''@;'; put 'put ''LmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVk''@;'; put 'put ''IGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltt''@;'; put 'put ''XT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBl''@;'; put 'put ''Ll96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90''@;'; put 'put ''eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3Io''@;'; put 'put ''dmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgp''@;'; put 'put ''LzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMu''@;'; put 'put ''bm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7''@;'; put 'put ''YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVv''@;'; put 'put ''cih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVu''@;'; put 'put ''Z3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109''@;'; put 'put ''Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50''@;'; put 'put ''aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5j''@;'; put 'put ''dGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAu''@;'; put 'put ''bmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3''@;'; put 'put ''MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhp''@;'; put 'put ''cy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRp''@;'; put 'put ''dmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAu''@;'; put 'put ''bGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1p''@;'; put 'put ''ZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29y''@;'; put 'put ''ZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtq''@;'; put 'put ''KyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5s''@;'; put 'put ''ZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53''@;'; put 'put ''b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+''@;'; put 'put ''PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxx''@;'; put 'put ''dD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxU''@;'; put 'put ''WzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9''@;'; put 'put ''cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1''@;'; put 'put ''YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAs''@;'; put 'put ''QT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStN''@;'; put 'put ''YXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChE''@;'; put 'put ''ZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwo''@;'; put 'put ''c2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDAp''@;'; put 'put ''KTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChE''@;'; put 'put ''ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdl''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDAp''@;'; put 'put ''KTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmlt''@;'; put 'put ''dWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChB''@;'; put 'put ''ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwo''@;'; put 'put ''c2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStN''@;'; put 'put ''YXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1''@;'; put 'put ''dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQp''@;'; put 'put ''fDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAs''@;'; put 'put ''QT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHpl''@;'; put 'put ''LHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4p''@;'; put 'put ''fDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2Us''@;'; put 'put ''enQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhw''@;'; put 'put ''YT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRl''@;'; put 'put ''LFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQs''@;'; put 'put ''enQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4p''@;'; put 'put ''fDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAs''@;'; put 'put ''QT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1''@;'; put 'put ''dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSso''@;'; put 'put ''dGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1M''@;'; put 'put ''YSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89''@;'; put 'put ''ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVn''@;'; put 'put ''YXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKysp''@;'; put 'put ''e3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJu''@;'; put 'put ''IDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKysp''@;'; put 'put ''YltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5w''@;'; put 'put ''ZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8''@;'; put 'put ''PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2Fl''@;'; put 'put ''K3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vl''@;'; put 'put ''c3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtD''@;'; put 'put ''Kyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChw''@;'; put 'put ''WzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEm''@;'; put 'put ''KFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDty''@;'; put 'put ''ZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxB''@;'; put 'put ''PW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxF''@;'; put 'put ''LG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyks''@;'; put 'put ''dGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1''@;'; put 'put ''bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0''@;'; put 'put ''aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7''@;'; put 'put ''Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhp''@;'; put 'put ''cy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5t''@;'; put 'put ''dWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5n''@;'; put 'put ''dGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0''@;'; put 'put ''aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3''@;'; put 'put ''MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVu''@;'; put 'put ''Z3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAt''@;'; put 'put ''VCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRo''@;'; put 'put ''aXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhp''@;'; put 'put ''cy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''aHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5j''@;'; put 'put ''dGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7''@;'; put 'put ''dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1i''@;'; put 'put ''JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49''@;'; put 'put ''NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0''@;'; put 'put ''aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNb''@;'; put 'put ''MF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMu''@;'; put 'put ''d29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVu''@;'; put 'put ''Z3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlz''@;'; put 'put ''Lmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0p''@;'; put 'put ''K2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRo''@;'; put 'put ''aXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7''@;'; put 'put ''Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8''@;'; put 'put ''Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMu''@;'; put 'put ''aXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0''@;'; put 'put ''dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5t''@;'; put 'put ''b2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMu''@;'; put 'put ''bmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tk''@;'; put 'put ''aXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1v''@;'; put 'put ''ZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0''@;'; put 'put ''dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2Lmlh''@;'; put 'put ''ZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9u''@;'; put 'put ''KHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9''@;'; put 'put ''bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShi''@;'; put 'put ''LndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRz''@;'; put 'put ''WzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCks''@;'; put 'put ''VC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgp''@;'; put 'put ''O2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZv''@;'; put 'put ''cihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4o''@;'; put 'put ''MSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3Io''@;'; put 'put ''Ozspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29y''@;'; put 'put ''ZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1''@;'; put 'put ''cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhp''@;'; put 'put ''cy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8w''@;'; put 'put ''OkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3Zh''@;'; put 'put ''ciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNl''@;'; put 'put ''UmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3Vi''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRo''@;'; put 'put ''aXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNx''@;'; put 'put ''ciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk''@;'; put 'put ''Lmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUo''@;'; put 'put ''VixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAw''@;'; put 'put ''MDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAx''@;'; put 'put ''IiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlz''@;'; put 'put ''LnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1p''@;'; put 'put ''bnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7''@;'; put 'put ''ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6''@;'; put 'put ''Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMu''@;'; put 'put ''ayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09''@;'; put 'put ''MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVu''@;'; put 'put ''Z3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hd''@;'; put 'put ''O3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSks''@;'; put 'put ''VGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109Yiks''@;'; put 'put ''cH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJv''@;'; put 'put ''KCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlz''@;'; put 'put ''KX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3Zh''@;'; put 'put ''ciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlz''@;'; put 'put ''Lm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7''@;'; put 'put ''cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3Vibigx''@;'; put 'put ''KS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9''@;'; put 'put ''dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJl''@;'; put 'put ''ZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3Io''@;'; put 'put ''dmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0p''@;'; put 'put ''e3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRv''@;'; put 'put ''PWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBq''@;'; put 'put ''ZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVy''@;'; put 'put ''biBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNr''@;'; put 'put ''bih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBl''@;'; put 'put ''Lm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5p''@;'; put 'put ''c3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''bW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDQ0MzU2OnVlPT57InVzZSBzdHJpY3QiO3ZhciBJLFg9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCx5PVgmJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBYLmFwcGx5P1guYXBwbHk6ZnVuY3Rpb24oaWUsbGUsbWUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChpZSxsZSxtZSl9O0k9WCYmImZ1bmN0aW9uIj09dHlwZW9mIFgub3duS2V5cz9YLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlv''@;'; put 'put ''bihpZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGllKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhpZSkpfTpmdW5jdGlvbihpZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGllKX07dmFyIGc9TnVtYmVyLmlzTmFOfHxmdW5jdGlv''@;'; put 'put ''bihpZSl7cmV0dXJuIGllIT1pZX07ZnVuY3Rpb24gQigpe0IuaW5pdC5jYWxsKHRoaXMpfXVlLmV4cG9ydHM9Qix1ZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gcShuZSxpZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGxlLG1lKXtmdW5jdGlvbiBfZShTZSl7bmUucmVtb3ZlTGlzdGVu''@;'; put 'put ''ZXIoaWUsVGUpLG1lKFNlKX1mdW5jdGlvbiBUZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBuZS5yZW1vdmVMaXN0ZW5lciYmbmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixfZSksbGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1KKG5lLGllLFRlLHtvbmNlOiEwfSksImVycm9yIiE9PWllJiZm''@;'; put 'put ''dW5jdGlvbiBlZShuZSxpZSxsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIG5lLm9uJiZKKG5lLCJlcnJvciIsaWUsbGUpfShuZSxfZSx7b25jZTohMH0pfSl9LEIuRXZlbnRFbWl0dGVyPUIsQi5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsQi5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsQi5wcm90''@;'; put 'put ''b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHc9MTA7ZnVuY3Rpb24gUChuZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG5lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5''@;'; put 'put ''cGVvZiBuZSl9ZnVuY3Rpb24gRihuZSl7cmV0dXJuIHZvaWQgMD09PW5lLl9tYXhMaXN0ZW5lcnM/Qi5kZWZhdWx0TWF4TGlzdGVuZXJzOm5lLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gTyhuZSxpZSxsZSxtZSl7dmFyIF9lLFRlLFNlO2lmKFAobGUpLHZvaWQgMD09PShUZT1uZS5fZXZlbnRz''@;'; put 'put ''KT8oVGU9bmUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLG5lLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09VGUubmV3TGlzdGVuZXImJihuZS5lbWl0KCJuZXdMaXN0ZW5lciIsaWUsbGUubGlzdGVuZXI/bGUubGlzdGVuZXI6bGUpLFRlPW5lLl9ldmVudHMpLFNlPVRlW2llXSksdm9p''@;'; put 'put ''ZCAwPT09U2UpU2U9VGVbaWVdPWxlLCsrbmUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFNlP1NlPVRlW2llXT1tZT9bbGUsU2VdOltTZSxsZV06bWU/U2UudW5zaGlmdChsZSk6U2UucHVzaChsZSksKF9lPUYobmUpKT4wJiZTZS5sZW5ndGg+X2UmJiFTZS53YXJu''@;'; put 'put ''ZWQpe1NlLndhcm5lZD0hMDt2YXIgamU9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrU2UubGVuZ3RoKyIgIitTdHJpbmcoaWUpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFz''@;'; put 'put ''ZSBsaW1pdCIpO2plLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsamUuZW1pdHRlcj1uZSxqZS50eXBlPWllLGplLmNvdW50PVNlLmxlbmd0aCxmdW5jdGlvbiBfKG5lKXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihuZSl9KGplKX1yZXR1cm4gbmV9ZnVu''@;'; put 'put ''Y3Rpb24geigpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFw''@;'; put 'put ''cGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gTihuZSxpZSxsZSl7dmFyIG1lPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpuZSx0eXBlOmllLGxpc3RlbmVyOmxlfSxfZT16LmJpbmQobWUpO3JldHVybiBfZS5saXN0ZW5lcj1sZSxtZS53cmFwRm49X2UsX2V9ZnVu''@;'; put 'put ''Y3Rpb24gTChuZSxpZSxsZSl7dmFyIG1lPW5lLl9ldmVudHM7aWYodm9pZCAwPT09bWUpcmV0dXJuW107dmFyIF9lPW1lW2llXTtyZXR1cm4gdm9pZCAwPT09X2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIF9lP2xlP1tfZS5saXN0ZW5lcnx8X2VdOltfZV06bGU/ZnVuY3Rpb24gWShuZSl7Zm9y''@;'; put 'put ''KHZhciBpZT1uZXcgQXJyYXkobmUubGVuZ3RoKSxsZT0wO2xlPGllLmxlbmd0aDsrK2xlKWllW2xlXT1uZVtsZV0ubGlzdGVuZXJ8fG5lW2xlXTtyZXR1cm4gaWV9KF9lKTpVKF9lLF9lLmxlbmd0aCl9ZnVuY3Rpb24gSyhuZSl7dmFyIGllPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1pZSl7''@;'; put 'put ''dmFyIGxlPWllW25lXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbGUpcmV0dXJuIDE7aWYodm9pZCAwIT09bGUpcmV0dXJuIGxlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBVKG5lLGllKXtmb3IodmFyIGxlPW5ldyBBcnJheShpZSksbWU9MDttZTxpZTsrK21lKWxlW21lXT1uZVttZV07cmV0''@;'; put 'put ''dXJuIGxlfWZ1bmN0aW9uIEoobmUsaWUsbGUsbWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuZS5vbiltZS5vbmNlP25lLm9uY2UoaWUsbGUpOm5lLm9uKGllLGxlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Ro''@;'; put 'put ''ZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBuZSk7bmUuYWRkRXZlbnRMaXN0ZW5lcihpZSxmdW5jdGlvbiBfZShUZSl7bWUub25jZSYmbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpZSxfZSksbGUoVGUpfSl9''@;'; put 'put ''fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd30sc2V0OmZ1bmN0aW9uKG5lKXtpZigibnVtYmVyIiE9dHlwZW9mIG5lfHxuZTwwfHxnKG5lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhl''@;'; put 'put ''IHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK25lKyIuIik7dz1uZX19KSxCLmluaXQ9ZnVuY3Rpb24oKXsodm9pZCAwPT09dGhpcy5fZXZlbnRzfHx0aGlzLl9ldmVudHM9''@;'; put 'put ''PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LEIucHJvdG90eXBlLnNldE1heExpc3Rl''@;'; put 'put ''bmVycz1mdW5jdGlvbihpZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpZXx8aWU8MHx8ZyhpZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytpZSsiLiIpO3Jl''@;'; put 'put ''dHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9aWUsdGhpc30sQi5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIEYodGhpcyl9LEIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oaWUpe2Zvcih2YXIgbGU9W10sbWU9MTttZTxhcmd1bWVudHMubGVuZ3RoO21lKyspbGUu''@;'; put 'put ''cHVzaChhcmd1bWVudHNbbWVdKTt2YXIgX2U9ImVycm9yIj09PWllLFRlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1UZSlfZT1fZSYmdm9pZCAwPT09VGUuZXJyb3I7ZWxzZSBpZighX2UpcmV0dXJuITE7aWYoX2Upe3ZhciBTZTtpZihsZS5sZW5ndGg+MCYmKFNlPWxlWzBdKSxTZSBpbnN0''@;'; put 'put ''YW5jZW9mIEVycm9yKXRocm93IFNlO3ZhciBqZT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhTZT8iICgiK1NlLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgamUuY29udGV4dD1TZSxqZX12YXIgVj1UZVtpZV07aWYodm9pZCAwPT09VilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgVil5KFYsdGhpcyxsZSk7ZWxzZXt2YXIgcD1WLmxlbmd0aCxiPVUoVixwKTtmb3IobWU9MDttZTxwOysrbWUpeShiW21lXSx0aGlzLGxlKX1yZXR1cm4hMH0sQi5wcm90b3R5cGUub249Qi5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oaWUsbGUpe3JldHVybiBPKHRoaXMsaWUs''@;'; put 'put ''bGUsITEpfSxCLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oaWUsbGUpe3JldHVybiBPKHRoaXMsaWUsbGUsITApfSxCLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gUChsZSksdGhpcy5vbihpZSxOKHRoaXMsaWUsbGUpKSx0aGlzfSxCLnByb3RvdHlw''@;'; put 'put ''ZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gUChsZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoaWUsTih0aGlzLGllLGxlKSksdGhpc30sQi5wcm90b3R5cGUub2ZmPUIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXt2YXIgbWUsX2Us''@;'; put 'put ''VGUsU2UsamU7aWYoUChsZSksdm9pZCAwPT09KF9lPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG1lPV9lW2llXSkpcmV0dXJuIHRoaXM7aWYobWU9PT1sZXx8bWUubGlzdGVuZXI9PT1sZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3Qu''@;'; put 'put ''Y3JlYXRlKG51bGwpOihkZWxldGUgX2VbaWVdLF9lLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixpZSxtZS5saXN0ZW5lcnx8bGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl7Zm9yKFRlPS0xLFNlPW1lLmxlbmd0aC0xO1NlPj0wO1NlLS0paWYo''@;'; put 'put ''bWVbU2VdPT09bGV8fG1lW1NlXS5saXN0ZW5lcj09PWxlKXtqZT1tZVtTZV0ubGlzdGVuZXIsVGU9U2U7YnJlYWt9aWYoVGU8MClyZXR1cm4gdGhpczswPT09VGU/bWUuc2hpZnQoKTpmdW5jdGlvbiBXKG5lLGllKXtmb3IoO2llKzE8bmUubGVuZ3RoO2llKyspbmVbaWVdPW5lW2llKzFdO25l''@;'; put 'put ''LnBvcCgpfShtZSxUZSksMT09PW1lLmxlbmd0aCYmKF9lW2llXT1tZVswXSksdm9pZCAwIT09X2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGllLGplfHxsZSl9cmV0dXJuIHRoaXN9LEIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihp''@;'; put 'put ''ZSl7dmFyIGxlLG1lLF9lO2lmKHZvaWQgMD09PShtZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW1lLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291''@;'; put 'put ''bnQ9MCk6dm9pZCAwIT09bWVbaWVdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbWVbaWVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgU2UsVGU9T2JqZWN0LmtleXMobWUpO2ZvcihfZT0wO19lPFRl''@;'; put 'put ''Lmxlbmd0aDsrK19lKSJyZW1vdmVMaXN0ZW5lciIhPT0oU2U9VGVbX2VdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoU2UpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVu''@;'; put 'put ''dHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGxlPW1lW2llXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihpZSxsZSk7ZWxzZSBpZih2b2lkIDAhPT1sZSlmb3IoX2U9bGUubGVuZ3RoLTE7X2U+PTA7X2UtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGllLGxlW19lXSk7cmV0dXJuIHRo''@;'; put 'put ''aXN9LEIucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihpZSl7cmV0dXJuIEwodGhpcyxpZSwhMCl9LEIucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihpZSl7cmV0dXJuIEwodGhpcyxpZSwhMSl9LEIubGlzdGVuZXJDb3VudD1mdW5jdGlvbihuZSxpZSl7cmV0dXJuImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIG5lLmxpc3RlbmVyQ291bnQ/bmUubGlzdGVuZXJDb3VudChpZSk6Sy5jYWxsKG5lLGllKX0sQi5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1LLEIucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9JKHRoaXMuX2V2''@;'; put 'put ''ZW50cyk6W119fSwxODIxMToodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoMzQ3MjUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcsUCxGKXtpZihJLmlzQnVmZmVyKEIpfHwoQj1JLmZyb20oQiwiYmluYXJ5IikpLHcmJihJLmlzQnVmZmVyKHcpfHwodz1JLmZyb20odywi''@;'; put 'put ''YmluYXJ5IikpLDghPT13Lmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIE89UC84LHo9SS5hbGxvYyhPKSxOPUkuYWxsb2MoRnx8MCksTD1JLmFsbG9jKDApO08+MHx8Rj4wOyl7dmFyIEs9bmV3''@;'; put 'put ''IF87Sy51cGRhdGUoTCksSy51cGRhdGUoQiksdyYmSy51cGRhdGUodyksTD1LLmRpZ2VzdCgpO3ZhciBVPTA7aWYoTz4wKXt2YXIgVz16Lmxlbmd0aC1PO1U9TWF0aC5taW4oTyxMLmxlbmd0aCksTC5jb3B5KHosVywwLFUpLE8tPVV9aWYoVTxMLmxlbmd0aCYmRj4wKXt2YXIgWT1OLmxlbmd0''@;'; put 'put ''aC1GLHE9TWF0aC5taW4oRixMLmxlbmd0aC1VKTtMLmNvcHkoTixZLFUsVStxKSxGLT1xfX1yZXR1cm4gTC5maWxsKDApLHtrZXk6eixpdjpOfX19LDEzNjg2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoNzA0NSkuVHJhbnNmb3JtO2Z1bmN0aW9u''@;'; put 'put ''IEIoTyl7Xy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPUkuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX15KDcxOTkzKShCLF8pLEIucHJvdG90eXBlLl90cmFuc2Zvcm09''@;'; put 'put ''ZnVuY3Rpb24oTyx6LE4pe3ZhciBMPW51bGw7dHJ5e3RoaXMudXBkYXRlKE8seil9Y2F0Y2goSyl7TD1LfU4oTCl9LEIucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgej1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goTil7ej1OfU8oeil9O3ZhciB3PXR5''@;'; put 'put ''cGVvZiBVaW50OEFycmF5PCJ1IixQPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO0IucHJvdG90eXBlLnVwZGF0''@;'; put 'put ''ZT1mdW5jdGlvbihPLHope2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO089ZnVuY3Rpb24gRihPLHope2lmKE8gaW5zdGFuY2VvZiBJKXJldHVybiBPO2lmKCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gSS5mcm9tKE8seik7aWYo''@;'; put 'put ''UCYmQXJyYXlCdWZmZXIuaXNWaWV3KE8pKXtpZigwPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBOPUkuZnJvbShPLmJ1ZmZlcixPLmJ5dGVPZmZzZXQsTy5ieXRlTGVuZ3RoKTtpZihOLmJ5dGVMZW5ndGg9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIE59aWYodyYmTyBpbnN0''@;'; put 'put ''YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoTykmJk8uY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZPLmNvbnN0cnVjdG9yLmlzQnVmZmVyKE8pKXJldHVybiBJLmZyb20oTyk7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRh''@;'; put 'put ''IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KE8seik7Zm9yKHZhciBOPXRoaXMuX2Jsb2NrLEw9MDt0aGlzLl9ibG9ja09mZnNldCtPLmxlbmd0aC1MPj10aGlzLl9ibG9ja1NpemU7''@;'; put 'put ''KXtmb3IodmFyIEs9dGhpcy5fYmxvY2tPZmZzZXQ7Szx0aGlzLl9ibG9ja1NpemU7KU5bSysrXT1PW0wrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO0w8Ty5sZW5ndGg7KU5bdGhpcy5fYmxvY2tPZmZzZXQrK109T1tMKytdO2Zvcih2YXIgVT0wLFc9OCpPLmxl''@;'; put 'put ''bmd0aDtXPjA7KytVKXRoaXMuX2xlbmd0aFtVXSs9VywoVz10aGlzLl9sZW5ndGhbVV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW1VdLT00Mjk0OTY3Mjk2KlcpO3JldHVybiB0aGlzfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBk''@;'; put 'put ''YXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oTyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciB6PXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9''@;'; put 'put ''PU8mJih6PXoudG9TdHJpbmcoTykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIE49MDtOPDQ7KytOKXRoaXMuX2xlbmd0aFtOXT0wO3JldHVybiB6fSxCLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0''@;'; put 'put ''IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSx1ZS5leHBvcnRzPUJ9LDUyNTI5Oih1ZSxYLHkpPT57dmFyIEk9WDtJLnV0aWxzPXkoNjgyODMpLEkuY29tbW9uPXkoMTI5MDEpLEkuc2hhPXkoNzg1MjgpLEkucmlwZW1kPXkoMTUyODMpLEkuaG1hYz15KDM3MTYzKSxJLnNoYTE9SS5zaGEuc2hhMSxJ''@;'; put 'put ''LnNoYTI1Nj1JLnNoYS5zaGEyNTYsSS5zaGEyMjQ9SS5zaGEuc2hhMjI0LEkuc2hhMzg0PUkuc2hhLnNoYTM4NCxJLnNoYTUxMj1JLnNoYS5zaGE1MTIsSS5yaXBlbWQxNjA9SS5yaXBlbWQucmlwZW1kMTYwfSwxMjkwMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxf''@;'; put 'put ''PXkoMzkyMTApO2Z1bmN0aW9uIGcoKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5j''@;'; put 'put ''b25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfVguQmxvY2tIYXNoPWcsZy5w''@;'; put 'put ''cm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUCl7aWYodz1JLnRvQXJyYXkodyxQKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQodyk6dyx0aGlzLnBlbmRpbmdUb3RhbCs9dy5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2''@;'; put 'put ''YXIgRj0odz10aGlzLnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPXcuc2xpY2Uody5sZW5ndGgtRix3Lmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksdz1JLmpvaW4zMih3LDAsdy5sZW5ndGgtRix0aGlzLmVuZGlh''@;'; put 'put ''bik7Zm9yKHZhciBPPTA7Tzx3Lmxlbmd0aDtPKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZSh3LE8sTyt0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sZy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksXyhudWxsPT09dGhp''@;'; put 'put ''cy5wZW5kaW5nKSx0aGlzLl9kaWdlc3Qodyl9LGcucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLnBlbmRpbmdUb3RhbCxQPXRoaXMuX2RlbHRhOCxGPVAtKHcrdGhpcy5wYWRMZW5ndGgpJVAsTz1uZXcgQXJyYXkoRit0aGlzLnBhZExlbmd0aCk7T1swXT0xMjg7Zm9yKHZh''@;'; put 'put ''ciB6PTE7ejxGO3orKylPW3pdPTA7aWYodzw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBOPTg7Tjx0aGlzLnBhZExlbmd0aDtOKyspT1t6KytdPTA7T1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPXc+Pj4yNCYyNTUsT1t6KytdPXc+Pj4xNiYyNTUs''@;'; put 'put ''T1t6KytdPXc+Pj44JjI1NSxPW3orK109MjU1Jnd9ZWxzZSBmb3IoT1t6KytdPTI1NSZ3LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPXc+Pj4xNiYyNTUsT1t6KytdPXc+Pj4yNCYyNTUsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsTj04O048dGhpcy5wYWRMZW5ndGg7Tisr''@;'; put 'put ''KU9beisrXT0wO3JldHVybiBPfX0sMzcxNjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDM5MjEwKTtmdW5jdGlvbiBnKEIsdyxQKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGcoQix3LFApO3RoaXMuSGFzaD1CLHRoaXMuYmxvY2tTaXpl''@;'; put 'put ''PUIuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPUIub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChJLnRvQXJyYXkodyxQKSl9dWUuZXhwb3J0cz1nLGcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHcpe3cubGVuZ3RoPnRoaXMuYmxvY2tTaXpl''@;'; put 'put ''JiYodz0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLmRpZ2VzdCgpKSxfKHcubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBQPXcubGVuZ3RoO1A8dGhpcy5ibG9ja1NpemU7UCsrKXcucHVzaCgwKTtmb3IoUD0wO1A8dy5sZW5ndGg7UCsrKXdbUF1ePTU0O2Zvcih0aGlzLmlubmVy''@;'; put 'put ''PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodyksUD0wO1A8dy5sZW5ndGg7UCsrKXdbUF1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodyl9LGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh3LFApLHRoaXN9LGcu''@;'; put 'put ''cHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3Qodyl9fSwxNTI4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMTI5MDEpLGc9SS5yb3RsMzIs''@;'; put 'put ''Qj1JLnN1bTMyLHc9SS5zdW0zMl8zLFA9SS5zdW0zMl80LEY9Xy5CbG9ja0hhc2g7ZnVuY3Rpb24gTygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTztGLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4''@;'; put 'put ''NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24geihxLGVlLEosbmUpe3JldHVybiBxPD0xNT9lZV5KXm5lOnE8PTMxP2VlJkp8fmVlJm5lOnE8PTQ3PyhlZXx+SilebmU6cTw9NjM/ZWUmbmV8SiZ+bmU6ZWVeKEp8fm5lKX1mdW5jdGlvbiBMKHEpe3JldHVybiBxPD0xNT8x''@;'; put 'put ''MzUyODI5OTI2OnE8PTMxPzE1NDg2MDM2ODQ6cTw9NDc/MTgzNjA3MjY5MTpxPD02Mz8yMDUzOTk0MjE3OjB9SS5pbmhlcml0cyhPLEYpLFgucmlwZW1kMTYwPU8sTy5ibG9ja1NpemU9NTEyLE8ub3V0U2l6ZT0xNjAsTy5obWFjU3RyZW5ndGg9MTkyLE8ucGFkTGVuZ3RoPTY0LE8ucHJvdG90''@;'; put 'put ''eXBlLl91cGRhdGU9ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciBuZT10aGlzLmhbMF0saWU9dGhpcy5oWzFdLGxlPXRoaXMuaFsyXSxtZT10aGlzLmhbM10sX2U9dGhpcy5oWzRdLFRlPW5lLFNlPWllLGplPWxlLFY9bWUscD1fZSxiPTA7Yjw4MDtiKyspe3ZhciB4PUIoZyhQKG5lLHooYixpZSxs''@;'; put 'put ''ZSxtZSksZWVbS1tiXStKXSwocT1iKTw9MTU/MDpxPD0zMT8xNTE4NTAwMjQ5OnE8PTQ3PzE4NTk3NzUzOTM6cTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxXW2JdKSxfZSk7bmU9X2UsX2U9bWUsbWU9ZyhsZSwxMCksbGU9aWUsaWU9eCx4PUIoZyhQKFRlLHooNzktYixTZSxqZSxWKSxl''@;'; put 'put ''ZVtVW2JdK0pdLEwoYikpLFlbYl0pLHApLFRlPXAscD1WLFY9ZyhqZSwxMCksamU9U2UsU2U9eH12YXIgcTt4PXcodGhpcy5oWzFdLGxlLFYpLHRoaXMuaFsxXT13KHRoaXMuaFsyXSxtZSxwKSx0aGlzLmhbMl09dyh0aGlzLmhbM10sX2UsVGUpLHRoaXMuaFszXT13KHRoaXMuaFs0XSxuZSxT''@;'; put 'put ''ZSksdGhpcy5oWzRdPXcodGhpcy5oWzBdLGllLGplKSx0aGlzLmhbMF09eH0sTy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihlZSl7cmV0dXJuImhleCI9PT1lZT9JLnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTpJLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEs9WzAsMSwyLDMs''@;'; put 'put ''NCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQs''@;'; put 'put ''MSwzLDgsMTEsNiwxNSwxM10sVT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDks''@;'; put 'put ''NywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxXPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEy''@;'; put 'put ''LDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxZPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEz''@;'; put 'put ''LDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sNzg1Mjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC5zaGExPXko''@;'; put 'put ''MzM0NjgpLFguc2hhMjI0PXkoNTU2MyksWC5zaGEyNTY9eSgyNzEzOCksWC5zaGEzODQ9eSg5Mzg5OCksWC5zaGE1MTI9eSgxMDgyNyl9LDMzNDY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgxMjkwMSksZz15KDk1NTQyKSxCPUkucm90bDMyLHc9SS5zdW0z''@;'; put 'put ''MixQPUkuc3VtMzJfNSxGPWcuZnRfMSxPPV8uQmxvY2tIYXNoLHo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIE4oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE47Ty5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5''@;'; put 'put ''Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUkuaW5oZXJpdHMoTixPKSx1ZS5leHBvcnRzPU4sTi5ibG9ja1NpemU9NTEyLE4ub3V0U2l6ZT0xNjAsTi5obWFjU3RyZW5ndGg9ODAsTi5wYWRMZW5ndGg9NjQsTi5wcm90''@;'; put 'put ''b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihLLFUpe2Zvcih2YXIgVz10aGlzLlcsWT0wO1k8MTY7WSsrKVdbWV09S1tVK1ldO2Zvcig7WTxXLmxlbmd0aDtZKyspV1tZXT1CKFdbWS0zXV5XW1ktOF1eV1tZLTE0XV5XW1ktMTZdLDEpO3ZhciBxPXRoaXMuaFswXSxlZT10aGlzLmhbMV0sSj10aGlz''@;'; put 'put ''LmhbMl0sbmU9dGhpcy5oWzNdLGllPXRoaXMuaFs0XTtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKXt2YXIgbGU9fn4oWS8yMCksbWU9UChCKHEsNSksRihsZSxlZSxKLG5lKSxpZSxXW1ldLHpbbGVdKTtpZT1uZSxuZT1KLEo9QihlZSwzMCksZWU9cSxxPW1lfXRoaXMuaFswXT13KHRoaXMuaFsw''@;'; put 'put ''XSxxKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sZWUpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxKKSx0aGlzLmhbM109dyh0aGlzLmhbM10sbmUpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxpZSl9LE4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJuImhleCI9PT1LP0kudG9IZXgz''@;'; put 'put ''Mih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNTU2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMjcxMzgpO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7Xy5jYWxsKHRoaXMpLHRoaXMu''@;'; put 'put ''aD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLF8pLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT01MTIsZy5vdXRTaXplPTIyNCxnLmhtYWNTdHJlbmd0aD0x''@;'; put 'put ''OTIsZy5wYWRMZW5ndGg9NjQsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sMjcxMzg6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSg2ODI4MyksXz15KDEyOTAxKSxnPXkoOTU1NDIpLEI9eSgzOTIxMCksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0zMl81LE89Zy5jaDMyLHo9Zy5tYWozMixOPWcuczBfMjU2LEw9Zy5zMV8yNTYsSz1nLmcwXzI1NixVPWcuZzFfMjU2LFc9Xy5CbG9ja0hhc2gsWT1b''@;'; put 'put ''MTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0''@;'; put 'put ''ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2''@;'; put 'put ''OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0''@;'; put 'put ''LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3''@;'; put 'put ''MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBxKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxO1cuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0''@;'; put 'put ''LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx0aGlzLlc9bmV3IEFycmF5KDY0KX1JLmluaGVyaXRzKHEsVyksdWUuZXhwb3J0cz1xLHEuYmxvY2tTaXplPTUxMixxLm91dFNpemU9MjU2LHEuaG1hY1N0cmVuZ3RoPTE5MixxLnBhZExlbmd0aD02NCxxLnByb3RvdHlwZS5fdXBkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKEosbmUpe2Zvcih2YXIgaWU9dGhpcy5XLGxlPTA7bGU8MTY7bGUrKylpZVtsZV09SltuZStsZV07Zm9yKDtsZTxpZS5sZW5ndGg7bGUrKylpZVtsZV09UChVKGllW2xlLTJdKSxpZVtsZS03XSxLKGllW2xlLTE1XSksaWVbbGUtMTZdKTt2YXIgbWU9dGhpcy5oWzBdLF9lPXRo''@;'; put 'put ''aXMuaFsxXSxUZT10aGlzLmhbMl0sU2U9dGhpcy5oWzNdLGplPXRoaXMuaFs0XSxWPXRoaXMuaFs1XSxwPXRoaXMuaFs2XSxiPXRoaXMuaFs3XTtmb3IoQih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSxsZT0wO2xlPGllLmxlbmd0aDtsZSsrKXt2YXIgeD1GKGIsTChqZSksTyhqZSxWLHAp''@;'; put 'put ''LHRoaXMua1tsZV0saWVbbGVdKSxDPXcoTihtZSkseihtZSxfZSxUZSkpO2I9cCxwPVYsVj1qZSxqZT13KFNlLHgpLFNlPVRlLFRlPV9lLF9lPW1lLG1lPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0sbWUpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5o''@;'; put 'put ''WzJdLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbM10sU2UpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxqZSksdGhpcy5oWzVdPXcodGhpcy5oWzVdLFYpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxwKSx0aGlzLmhbN109dyh0aGlzLmhbN10sYil9LHEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24o''@;'; put 'put ''Sil7cmV0dXJuImhleCI9PT1KP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sOTM4OTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDEwODI3KTtmdW5jdGlvbiBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0''@;'; put 'put ''dXJuIG5ldyBnO18uY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUw''@;'; put 'put ''MDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyxfKSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9MTAyNCxnLm91dFNpemU9Mzg0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD0xMjgsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3''@;'; put 'put ''KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSwxMDgyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMTI5MDEpLGc9eSgzOTIxMCksQj1JLnJv''@;'; put 'put ''dHI2NF9oaSx3PUkucm90cjY0X2xvLFA9SS5zaHI2NF9oaSxGPUkuc2hyNjRfbG8sTz1JLnN1bTY0LHo9SS5zdW02NF9oaSxOPUkuc3VtNjRfbG8sTD1JLnN1bTY0XzRfaGksSz1JLnN1bTY0XzRfbG8sVT1JLnN1bTY0XzVfaGksVz1JLnN1bTY0XzVfbG8sWT1fLkJsb2NrSGFzaCxxPVsxMTE2''@;'; put 'put ''MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYw''@;'; put 'put ''OTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgw''@;'; put 'put ''LDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5''@;'; put 'put ''NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgz''@;'; put 'put ''MjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1''@;'; put 'put ''MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYs''@;'; put 'put ''NDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIz''@;'; put 'put ''NDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4''@;'; put 'put ''NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQs''@;'; put 'put ''MTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUx''@;'; put 'put ''NTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gZWUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlZSkpcmV0dXJuIG5ldyBlZTtZLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAs''@;'; put 'put ''MzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9cSx0aGlz''@;'; put 'put ''Llc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gSih4LEMsVCxILGope3ZhciBFPXgmVF5+eCZqO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIG5lKHgsQyxULEgsaixFKXt2YXIgbT1DJkhefkMmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBp''@;'; put 'put ''ZSh4LEMsVCxILGope3ZhciBFPXgmVF54JmpeVCZqO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGxlKHgsQyxULEgsaixFKXt2YXIgbT1DJkheQyZFXkgmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBtZSh4LEMpe3ZhciBFPUIoeCxDLDI4''@;'; put 'put ''KV5CKEMseCwyKV5CKEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBfZSh4LEMpe3ZhciBFPXcoeCxDLDI4KV53KEMseCwyKV53KEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBUZSh4LEMpe3ZhciBFPUIoeCxDLDE0KV5C''@;'; put 'put ''KHgsQywxOCleQihDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gU2UoeCxDKXt2YXIgRT13KHgsQywxNCledyh4LEMsMTgpXncoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGplKHgsQyl7dmFyIEU9Qih4LEMsMSleQih4''@;'; put 'put ''LEMsOCleUCh4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVih4LEMpe3ZhciBFPXcoeCxDLDEpXncoeCxDLDgpXkYoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHAoeCxDKXt2YXIgRT1CKHgsQywxOSleQihDLHgsMjkp''@;'; put 'put ''XlAoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGIoeCxDKXt2YXIgRT13KHgsQywxOSledyhDLHgsMjkpXkYoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfUkuaW5oZXJpdHMoZWUsWSksdWUuZXhwb3J0cz1lZSxlZS5ibG9ja1NpemU9''@;'; put 'put ''MTAyNCxlZS5vdXRTaXplPTUxMixlZS5obWFjU3RyZW5ndGg9MTkyLGVlLnBhZExlbmd0aD0xMjgsZWUucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9dGhpcy5XLGo9MDtqPDMyO2orKylIW2pdPUNbVCtqXTtmb3IoO2o8SC5sZW5ndGg7ais9Mil7dmFy''@;'; put 'put ''IEU9cChIW2otNF0sSFtqLTNdKSxtPWIoSFtqLTRdLEhbai0zXSksQT1IW2otMTRdLGFlPUhbai0xM10sdGU9amUoSFtqLTMwXSxIW2otMjldKSxzZT1WKEhbai0zMF0sSFtqLTI5XSksd2U9SFtqLTMyXSxVZT1IW2otMzFdO0hbal09TChFLG0sQSxhZSx0ZSxzZSx3ZSxVZSksSFtqKzFdPUso''@;'; put 'put ''RSxtLEEsYWUsdGUsc2Usd2UsVWUpfX0sZWUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQyxUKXt0aGlzLl9wcmVwYXJlQmxvY2soQyxUKTt2YXIgSD10aGlzLlcsaj10aGlzLmhbMF0sRT10aGlzLmhbMV0sbT10aGlzLmhbMl0sQT10aGlzLmhbM10sYWU9dGhpcy5oWzRdLHRlPXRoaXMu''@;'; put 'put ''aFs1XSxzZT10aGlzLmhbNl0sd2U9dGhpcy5oWzddLFVlPXRoaXMuaFs4XSxKZT10aGlzLmhbOV0sb3Q9dGhpcy5oWzEwXSx4ZT10aGlzLmhbMTFdLHZlPXRoaXMuaFsxMl0sWGU9dGhpcy5oWzEzXSx6ZT10aGlzLmhbMTRdLERlPXRoaXMuaFsxNV07Zyh0aGlzLmsubGVuZ3RoPT09SC5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgRmU9MDtGZTxILmxlbmd0aDtGZSs9Mil7dmFyIE9lPXplLEllPURlLFZlPVRlKFVlLEplKSxrZT1TZShVZSxKZSksQWU9SihVZSwwLG90LDAsdmUpLF90PW5lKDAsSmUsMCx4ZSwwLFhlKSxudD10aGlzLmtbRmVdLFFlPXRoaXMua1tGZSsxXSx1bj1IW0ZlXSx5dD1IW0Zl''@;'; put 'put ''KzFdLE10PVUoT2UsSWUsVmUsa2UsQWUsX3QsbnQsUWUsdW4seXQpLER0PVcoT2UsSWUsVmUsa2UsQWUsX3QsbnQsUWUsdW4seXQpO09lPW1lKGosRSksSWU9X2UoaixFKSxWZT1pZShqLDAsbSwwLGFlKSxrZT1sZSgwLEUsMCxBLDAsdGUpO3ZhciBpdD16KE9lLEllLFZlLGtlKSwkZT1OKE9l''@;'; put 'put ''LEllLFZlLGtlKTt6ZT12ZSxEZT1YZSx2ZT1vdCxYZT14ZSxvdD1VZSx4ZT1KZSxVZT16KHNlLHdlLE10LER0KSxKZT1OKHdlLHdlLE10LER0KSxzZT1hZSx3ZT10ZSxhZT1tLHRlPUEsbT1qLEE9RSxqPXooTXQsRHQsaXQsJGUpLEU9TihNdCxEdCxpdCwkZSl9Tyh0aGlzLmgsMCxqLEUpLE8o''@;'; put 'put ''dGhpcy5oLDIsbSxBKSxPKHRoaXMuaCw0LGFlLHRlKSxPKHRoaXMuaCw2LHNlLHdlKSxPKHRoaXMuaCw4LFVlLEplKSxPKHRoaXMuaCwxMCxvdCx4ZSksTyh0aGlzLmgsMTIsdmUsWGUpLE8odGhpcy5oLDE0LHplLERlKX0sZWUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''ImhleCI9PT1DP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sOTU1NDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF89eSg2ODI4Mykucm90cjMyO2Z1bmN0aW9uIEIoTCxLLFUpe3JldHVybiBMJktefkwmVX1mdW5jdGlvbiB3KEwsSyxVKXty''@;'; put 'put ''ZXR1cm4gTCZLXkwmVV5LJlV9ZnVuY3Rpb24gUChMLEssVSl7cmV0dXJuIExeS15VfVguZnRfMT1mdW5jdGlvbiBnKEwsSyxVLFcpe3JldHVybiAwPT09TD9CKEssVSxXKToxPT09THx8Mz09PUw/UChLLFUsVyk6Mj09PUw/dyhLLFUsVyk6dm9pZCAwfSxYLmNoMzI9QixYLm1hajMyPXcsWC5w''@;'; put 'put ''MzI9UCxYLnMwXzI1Nj1mdW5jdGlvbiBGKEwpe3JldHVybiBfKEwsMileXyhMLDEzKV5fKEwsMjIpfSxYLnMxXzI1Nj1mdW5jdGlvbiBPKEwpe3JldHVybiBfKEwsNileXyhMLDExKV5fKEwsMjUpfSxYLmcwXzI1Nj1mdW5jdGlvbiB6KEwpe3JldHVybiBfKEwsNyleXyhMLDE4KV5MPj4+M30s''@;'; put 'put ''WC5nMV8yNTY9ZnVuY3Rpb24gTihMKXtyZXR1cm4gXyhMLDE3KV5fKEwsMTkpXkw+Pj4xMH19LDY4MjgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzkyMTApLF89eSg3MTk5Myk7ZnVuY3Rpb24gZyhiLHgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZiLmNoYXJDb2RlQXQoeCkp''@;'; put 'put ''fHx4PDB8fHgrMT49Yi5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJmIuY2hhckNvZGVBdCh4KzEpKX1mdW5jdGlvbiBQKGIpe3JldHVybihiPj4+MjR8Yj4+PjgmNjUyODB8Yjw8OCYxNjcxMTY4MHwoMjU1JmIpPDwyNCk+Pj4wfWZ1bmN0aW9uIE8oYil7cmV0dXJuIDE9PT1iLmxlbmd0aD8iMCIr''@;'; put 'put ''YjpifWZ1bmN0aW9uIHooYil7cmV0dXJuIDc9PT1iLmxlbmd0aD8iMCIrYjo2PT09Yi5sZW5ndGg/IjAwIitiOjU9PT1iLmxlbmd0aD8iMDAwIitiOjQ9PT1iLmxlbmd0aD8iMDAwMCIrYjozPT09Yi5sZW5ndGg/IjAwMDAwIitiOjI9PT1iLmxlbmd0aD8iMDAwMDAwIitiOjE9PT1iLmxlbmd0''@;'; put 'put ''aD8iMDAwMDAwMCIrYjpifVguaW5oZXJpdHM9XyxYLnRvQXJyYXk9ZnVuY3Rpb24gQihiLHgpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuc2xpY2UoKTtpZighYilyZXR1cm5bXTt2YXIgQz1bXTtpZigic3RyaW5nIj09dHlwZW9mIGIpaWYoeCl7aWYoImhleCI9PT14KWZvcigoYj1i''@;'; put 'put ''LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKGI9IjAiK2IpLEg9MDtIPGIubGVuZ3RoO0grPTIpQy5wdXNoKHBhcnNlSW50KGJbSF0rYltIKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBqPWIuY2hhckNvZGVBdChIKTtq''@;'; put 'put ''PDEyOD9DW1QrK109ajpqPDIwNDg/KENbVCsrXT1qPj42fDE5MixDW1QrK109NjMmanwxMjgpOmcoYixIKT8oaj02NTUzNisoKDEwMjMmaik8PDEwKSsoMTAyMyZiLmNoYXJDb2RlQXQoKytIKSksQ1tUKytdPWo+PjE4fDI0MCxDW1QrK109aj4+MTImNjN8MTI4LENbVCsrXT1qPj42JjYzfDEy''@;'; put 'put ''OCxDW1QrK109NjMmanwxMjgpOihDW1QrK109aj4+MTJ8MjI0LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpfWVsc2UgZm9yKEg9MDtIPGIubGVuZ3RoO0grKylDW0hdPTB8YltIXTtyZXR1cm4gQ30sWC50b0hleD1mdW5jdGlvbiB3KGIpe2Zvcih2YXIgeD0iIixDPTA7Qzxi''@;'; put 'put ''Lmxlbmd0aDtDKyspeCs9TyhiW0NdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHh9LFguaHRvbmw9UCxYLnRvSGV4MzI9ZnVuY3Rpb24gRihiLHgpe2Zvcih2YXIgQz0iIixUPTA7VDxiLmxlbmd0aDtUKyspe3ZhciBIPWJbVF07ImxpdHRsZSI9PT14JiYoSD1QKEgpKSxDKz16KEgudG9TdHJpbmco''@;'; put 'put ''MTYpKX1yZXR1cm4gQ30sWC56ZXJvMj1PLFguemVybzg9eixYLmpvaW4zMj1mdW5jdGlvbiBOKGIseCxDLFQpe3ZhciBIPUMteDtJKEglND09MCk7Zm9yKHZhciBqPW5ldyBBcnJheShILzQpLEU9MCxtPXg7RTxqLmxlbmd0aDtFKyssbSs9NClqW0VdPSgiYmlnIj09PVQ/YlttXTw8MjR8Yltt''@;'; put 'put ''KzFdPDwxNnxiW20rMl08PDh8YlttKzNdOmJbbSszXTw8MjR8YlttKzJdPDwxNnxiW20rMV08PDh8YlttXSk+Pj4wO3JldHVybiBqfSxYLnNwbGl0MzI9ZnVuY3Rpb24gTChiLHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoNCpiLmxlbmd0aCksVD0wLEg9MDtUPGIubGVuZ3RoO1QrKyxIKz00KXt2''@;'; put 'put ''YXIgaj1iW1RdOyJiaWciPT09eD8oQ1tIXT1qPj4+MjQsQ1tIKzFdPWo+Pj4xNiYyNTUsQ1tIKzJdPWo+Pj44JjI1NSxDW0grM109MjU1JmopOihDW0grM109aj4+PjI0LENbSCsyXT1qPj4+MTYmMjU1LENbSCsxXT1qPj4+OCYyNTUsQ1tIXT0yNTUmail9cmV0dXJuIEN9LFgucm90cjMyPWZ1''@;'; put 'put ''bmN0aW9uIEsoYix4KXtyZXR1cm4gYj4+Pnh8Yjw8MzIteH0sWC5yb3RsMzI9ZnVuY3Rpb24gVShiLHgpe3JldHVybiBiPDx4fGI+Pj4zMi14fSxYLnN1bTMyPWZ1bmN0aW9uIFcoYix4KXtyZXR1cm4gYit4Pj4+MH0sWC5zdW0zMl8zPWZ1bmN0aW9uIFkoYix4LEMpe3JldHVybiBiK3grQz4+''@;'; put 'put ''PjB9LFguc3VtMzJfND1mdW5jdGlvbiBxKGIseCxDLFQpe3JldHVybiBiK3grQytUPj4+MH0sWC5zdW0zMl81PWZ1bmN0aW9uIGVlKGIseCxDLFQsSCl7cmV0dXJuIGIreCtDK1QrSD4+PjB9LFguc3VtNjQ9ZnVuY3Rpb24gSihiLHgsQyxUKXt2YXIgRT1UK2JbeCsxXT4+PjA7Ylt4XT0oRTxU''@;'; put 'put ''PzE6MCkrQytiW3hdPj4+MCxiW3grMV09RX0sWC5zdW02NF9oaT1mdW5jdGlvbiBuZShiLHgsQyxUKXtyZXR1cm4oeCtUPj4+MDx4PzE6MCkrYitDPj4+MH0sWC5zdW02NF9sbz1mdW5jdGlvbiBpZShiLHgsQyxUKXtyZXR1cm4geCtUPj4+MH0sWC5zdW02NF80X2hpPWZ1bmN0aW9uIGxlKGIs''@;'; put 'put ''eCxDLFQsSCxqLEUsbSl7dmFyIEE9MCxhZT14O3JldHVybiBBKz0oYWU9YWUrVD4+PjApPHg/MTowLEErPShhZT1hZStqPj4+MCk8aj8xOjAsYitDK0grRSsoQSs9KGFlPWFlK20+Pj4wKTxtPzE6MCk+Pj4wfSxYLnN1bTY0XzRfbG89ZnVuY3Rpb24gbWUoYix4LEMsVCxILGosRSxtKXtyZXR1''@;'; put 'put ''cm4geCtUK2orbT4+PjB9LFguc3VtNjRfNV9oaT1mdW5jdGlvbiBfZShiLHgsQyxULEgsaixFLG0sQSxhZSl7dmFyIHRlPTAsc2U9eDtyZXR1cm4gdGUrPShzZT1zZStUPj4+MCk8eD8xOjAsdGUrPShzZT1zZStqPj4+MCk8aj8xOjAsdGUrPShzZT1zZSttPj4+MCk8bT8xOjAsYitDK0grRStB''@;'; put 'put ''Kyh0ZSs9KHNlPXNlK2FlPj4+MCk8YWU/MTowKT4+PjB9LFguc3VtNjRfNV9sbz1mdW5jdGlvbiBUZShiLHgsQyxULEgsaixFLG0sQSxhZSl7cmV0dXJuIHgrVCtqK20rYWU+Pj4wfSxYLnJvdHI2NF9oaT1mdW5jdGlvbiBTZShiLHgsQyl7cmV0dXJuKHg8PDMyLUN8Yj4+PkMpPj4+MH0sWC5y''@;'; put 'put ''b3RyNjRfbG89ZnVuY3Rpb24gamUoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9LFguc2hyNjRfaGk9ZnVuY3Rpb24gVihiLHgsQyl7cmV0dXJuIGI+Pj5DfSxYLnNocjY0X2xvPWZ1bmN0aW9uIHAoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9fSwzMzU1NjoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUyNTI5KSxfPXkoMjE4MzIpLGc9eSgzOTIxMCk7ZnVuY3Rpb24gQih3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIodyk7dGhpcy5oYXNoPXcuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF3LnByZWRSZXNpc3QsdGhpcy5v''@;'; put 'put ''dXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXcubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIFA9Xy50b0FycmF5KHcuZW50''@;'; put 'put ''cm9weSx3LmVudHJvcHlFbmN8fCJoZXgiKSxGPV8udG9BcnJheSh3Lm5vbmNlLHcubm9uY2VFbmN8fCJoZXgiKSxPPV8udG9BcnJheSh3LnBlcnMsdy5wZXJzRW5jfHwiaGV4Iik7ZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczog''@;'; put 'put ''Iit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChQLEYsTyl9dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFAsRixPKXt2YXIgej1QLmNvbmNhdChGKS5jb25jYXQoTyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFy''@;'; put 'put ''cmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgTj0wO048dGhpcy5WLmxlbmd0aDtOKyspdGhpcy5LW05dPTAsdGhpcy5WW05dPTE7dGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxCLnByb3RvdHlwZS5faG1hYz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBuZXcgSS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3ZhciBGPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtQJiYoRj1GLnVwZGF0ZShQKSksdGhpcy5LPUYuZGlnZXN0KCksdGhpcy5W''@;'; put 'put ''PXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxQJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoUCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LEIucHJvdG90eXBl''@;'; put 'put ''LnJlc2VlZD1mdW5jdGlvbihQLEYsTyx6KXsic3RyaW5nIiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksUD1fLnRvQXJyYXkoUCxGKSxPPV8udG9BcnJheShPLHopLGcoUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhp''@;'; put 'put ''cy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShQLmNvbmNhdChPfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxCLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihQLEYsTyx6KXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2Vl''@;'; put 'put ''ZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxPJiYoTz1fLnRvQXJyYXkoTyx6fHwiaGV4IiksdGhpcy5fdXBkYXRlKE8pKTtmb3IodmFyIE49W107Ti5sZW5ndGg8UDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3Qo''@;'; put 'put ''KSxOPU4uY29uY2F0KHRoaXMuVik7dmFyIEw9Ti5zbGljZSgwLFApO3JldHVybiB0aGlzLl91cGRhdGUoTyksdGhpcy5fcmVzZWVkKyssXy5lbmNvZGUoTCxGKX19LDkzNjk0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtYLl9kYmNzPXo7Zm9yKHZhciBf''@;'; put 'put ''PS0xLGc9LTIsQj0tMTAsdz0tMWUzLFA9bmV3IEFycmF5KDI1NiksTz0wO088MjU2O08rKylQW09dPV87ZnVuY3Rpb24geihVLFcpe2lmKHRoaXMuZW5jb2RpbmdOYW1lPVUuZW5jb2RpbmdOYW1lLCFVKXRocm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUg''@;'; put 'put ''ZGF0YS4iKTtpZighVS50YWJsZSl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3RoaXMuZW5jb2RpbmdOYW1lKyInIGhhcyBubyBkYXRhLiIpO3ZhciBZPVUudGFibGUoKTt0aGlzLmRlY29kZVRhYmxlcz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1QLnNsaWNlKDApLHRoaXMuZGVjb2Rl''@;'; put 'put ''VGFibGVTZXE9W107Zm9yKHZhciBxPTA7cTxZLmxlbmd0aDtxKyspdGhpcy5fYWRkRGVjb2RlQ2h1bmsoWVtxXSk7dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vy5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5lbmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBlZT17fTtp''@;'; put 'put ''ZihVLmVuY29kZVNraXBWYWxzKWZvcihxPTA7cTxVLmVuY29kZVNraXBWYWxzLmxlbmd0aDtxKyspe3ZhciBKPVUuZW5jb2RlU2tpcFZhbHNbcV07aWYoIm51bWJlciI9PXR5cGVvZiBKKWVlW0pdPSEwO2Vsc2UgZm9yKHZhciBuZT1KLmZyb207bmU8PUoudG87bmUrKyllZVtuZV09ITB9aWYo''@;'; put 'put ''dGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsMCxlZSksVS5lbmNvZGVBZGQpZm9yKHZhciBpZSBpbiBVLmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVS5lbmNvZGVBZGQsaWUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKGllLmNoYXJDb2RlQXQoMCksVS5lbmNv''@;'; put 'put ''ZGVBZGRbaWVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1cuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09XyYmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9''@;'; put 'put ''PT1fJiYodGhpcy5kZWZDaGFyU0I9NjMpLCJmdW5jdGlvbiI9PXR5cGVvZiBVLmdiMTgwMzApe3RoaXMuZ2IxODAzMD1VLmdiMTgwMzAoKTt2YXIgbGU9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLG1lPXRoaXMuZGVjb2RlVGFibGVzW2xlXT1QLnNsaWNlKDApLF9lPXRoaXMuZGVjb2RlVGFi''@;'; put 'put ''bGVzLmxlbmd0aCxUZT10aGlzLmRlY29kZVRhYmxlc1tfZV09UC5zbGljZSgwKTtmb3IocT0xMjk7cTw9MjU0O3ErKyl7dmFyIGplPXRoaXMuZGVjb2RlVGFibGVzW3ctdGhpcy5kZWNvZGVUYWJsZXNbMF1bcV1dO2ZvcihuZT00ODtuZTw9NTc7bmUrKylqZVtuZV09dy1sZX1mb3IocT0xMjk7''@;'; put 'put ''cTw9MjU0O3ErKyltZVtxXT13LV9lO2ZvcihxPTQ4O3E8PTU3O3ErKylUZVtxXT1nfX1mdW5jdGlvbiBOKFUsVyl7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29kZVRhYmxlPVcuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1XLmVuY29k''@;'; put 'put ''ZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPVcuZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1XLmdiMTgwMzB9ZnVuY3Rpb24gTChVLFcpe3RoaXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj1JLmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVcuZGVjb2RlVGFibGVzLHRoaXMu''@;'; put 'put ''ZGVjb2RlVGFibGVTZXE9Vy5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1XLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vy5nYjE4MDMwfWZ1bmN0aW9uIEsoVSxXKXtpZihVWzBdPlcpcmV0dXJuLTE7Zm9yKHZhciBZPTAscT1VLmxlbmd0aDtZPHEtMTsp''@;'; put 'put ''e3ZhciBlZT1ZK01hdGguZmxvb3IoKHEtWSsxKS8yKTtVW2VlXTw9Vz9ZPWVlOnE9ZWV9cmV0dXJuIFl9ei5wcm90b3R5cGUuZW5jb2Rlcj1OLHoucHJvdG90eXBlLmRlY29kZXI9TCx6LnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPVtdO1U+MDtV''@;'; put 'put ''Pj49OClXLnB1c2goMjU1JlUpOzA9PVcubGVuZ3RoJiZXLnB1c2goMCk7Zm9yKHZhciBZPXRoaXMuZGVjb2RlVGFibGVzWzBdLHE9Vy5sZW5ndGgtMTtxPjA7cS0tKXt2YXIgZWU9WVtXW3FdXTtpZihlZT09XylZW1dbcV1dPXctdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2Rl''@;'; put 'put ''VGFibGVzLnB1c2goWT1QLnNsaWNlKDApKTtlbHNle2lmKCEoZWU8PXcpKXRocm93IG5ldyBFcnJvcigiT3ZlcndyaXRlIGJ5dGUgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiLCBhZGRyOiAiK1UudG9TdHJpbmcoMTYpKTtZPXRoaXMuZGVjb2RlVGFibGVzW3ctZWVdfX1yZXR1cm4gWX0sei5w''@;'; put 'put ''cm90b3R5cGUuX2FkZERlY29kZUNodW5rPWZ1bmN0aW9uKFUpe3ZhciBXPXBhcnNlSW50KFVbMF0sMTYpLFk9dGhpcy5fZ2V0RGVjb2RlVHJpZU5vZGUoVyk7VyY9MjU1O2Zvcih2YXIgcT0xO3E8VS5sZW5ndGg7cSsrKXt2YXIgZWU9VVtxXTtpZigic3RyaW5nIj09dHlwZW9mIGVlKWZvcih2''@;'; put 'put ''YXIgSj0wO0o8ZWUubGVuZ3RoOyl7dmFyIG5lPWVlLmNoYXJDb2RlQXQoSisrKTtpZig1NTI5Njw9bmUmJm5lPDU2MzIwKXt2YXIgaWU9ZWUuY2hhckNvZGVBdChKKyspO2lmKCEoNTYzMjA8PWllJiZpZTw1NzM0NCkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIg''@;'; put 'put ''aW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIrVVswXSk7WVtXKytdPTY1NTM2KzEwMjQqKG5lLTU1Mjk2KSsoaWUtNTYzMjApfWVsc2UgaWYoNDA4MDxuZSYmbmU8PTQwOTUpe2Zvcih2YXIgbGU9NDA5NS1uZSsyLG1lPVtdLF9lPTA7X2U8bGU7X2UrKyltZS5wdXNoKGVlLmNo''@;'; put 'put ''YXJDb2RlQXQoSisrKSk7WVtXKytdPUItdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5kZWNvZGVUYWJsZVNlcS5wdXNoKG1lKX1lbHNlIFlbVysrXT1uZX1lbHNle2lmKCJudW1iZXIiIT10eXBlb2YgZWUpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2Yg''@;'; put 'put ''ZWUrIicgZ2l2ZW4gaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIrVVswXSk7dmFyIFRlPVlbVy0xXSsxO2ZvcihKPTA7SjxlZTtKKyspWVtXKytdPVRlKyt9fWlmKFc+MjU1KXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IGNodW5rIGluICIrdGhpcy5lbmNvZGluZ05hbWUr''@;'; put 'put ''IiBhdCBhZGRyICIrVVswXSsiOiB0b28gbG9uZyIrVyl9LHoucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQ9ZnVuY3Rpb24oVSl7dmFyIFc9VT4+ODtyZXR1cm4gdm9pZCAwPT09dGhpcy5lbmNvZGVUYWJsZVtXXSYmKHRoaXMuZW5jb2RlVGFibGVbV109UC5zbGljZSgwKSksdGhpcy5lbmNv''@;'; put 'put ''ZGVUYWJsZVtXXX0sei5wcm90b3R5cGUuX3NldEVuY29kZUNoYXI9ZnVuY3Rpb24oVSxXKXt2YXIgWT10aGlzLl9nZXRFbmNvZGVCdWNrZXQoVSkscT0yNTUmVTtZW3FdPD1CP3RoaXMuZW5jb2RlVGFibGVTZXFbQi1ZW3FdXVstMV09VzpZW3FdPT1fJiYoWVtxXT1XKX0sei5wcm90b3R5cGUu''@;'; put 'put ''X3NldEVuY29kZVNlcXVlbmNlPWZ1bmN0aW9uKFUsVyl7dmFyIEosWT1VWzBdLHE9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KFkpLGVlPTI1NSZZO3FbZWVdPD1CP0o9dGhpcy5lbmNvZGVUYWJsZVNlcVtCLXFbZWVdXTooSj17fSxxW2VlXSE9PV8mJihKWy0xXT1xW2VlXSkscVtlZV09Qi10aGlz''@;'; put 'put ''LmVuY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmVuY29kZVRhYmxlU2VxLnB1c2goSikpO2Zvcih2YXIgbmU9MTtuZTxVLmxlbmd0aC0xO25lKyspe3ZhciBpZT1KW1ldOyJvYmplY3QiPT10eXBlb2YgaWU/Sj1pZTooSj1KW1ldPXt9LHZvaWQgMCE9PWllJiYoSlstMV09aWUpKX1KW1k9VVtV''@;'; put 'put ''Lmxlbmd0aC0xXV09V30sei5wcm90b3R5cGUuX2ZpbGxFbmNvZGVUYWJsZT1mdW5jdGlvbihVLFcsWSl7Zm9yKHZhciBxPXRoaXMuZGVjb2RlVGFibGVzW1VdLGVlPTA7ZWU8MjU2O2VlKyspe3ZhciBKPXFbZWVdLG5lPVcrZWU7WVtuZV18fChKPj0wP3RoaXMuX3NldEVuY29kZUNoYXIoSixu''@;'; put 'put ''ZSk6Sjw9dz90aGlzLl9maWxsRW5jb2RlVGFibGUody1KLG5lPDw4LFkpOko8PUImJnRoaXMuX3NldEVuY29kZVNlcXVlbmNlKHRoaXMuZGVjb2RlVGFibGVTZXFbQi1KXSxuZSkpfX0sTi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPUkuYWxsb2MoVS5sZW5ndGgqKHRo''@;'; put 'put ''aXMuZ2IxODAzMD80OjMpKSxZPXRoaXMubGVhZFN1cnJvZ2F0ZSxxPXRoaXMuc2VxT2JqLGVlPS0xLEo9MCxuZT0wOzspe2lmKC0xPT09ZWUpe2lmKEo9PVUubGVuZ3RoKWJyZWFrO3ZhciBpZT1VLmNoYXJDb2RlQXQoSisrKX1lbHNlIGllPWVlLGVlPS0xO2lmKDU1Mjk2PD1pZSYmaWU8NTcz''@;'; put 'put ''NDQpaWYoaWU8NTYzMjApe2lmKC0xPT09WSl7WT1pZTtjb250aW51ZX1ZPWllLGllPV99ZWxzZS0xIT09WT8oaWU9NjU1MzYrMTAyNCooWS01NTI5NikrKGllLTU2MzIwKSxZPS0xKTppZT1fO2Vsc2UtMSE9PVkmJihlZT1pZSxpZT1fLFk9LTEpO3ZhciBsZT1fO2lmKHZvaWQgMCE9PXEmJmll''@;'; put 'put ''IT1fKXt2YXIgbWU9cVtpZV07aWYoIm9iamVjdCI9PXR5cGVvZiBtZSl7cT1tZTtjb250aW51ZX0ibnVtYmVyIj09dHlwZW9mIG1lP2xlPW1lOm51bGw9PW1lJiZ2b2lkIDAhPT0obWU9cVstMV0pJiYobGU9bWUsZWU9aWUpLHE9dm9pZCAwfWVsc2UgaWYoaWU+PTApe3ZhciBfZT10aGlzLmVu''@;'; put 'put ''Y29kZVRhYmxlW2llPj44XTtpZih2b2lkIDAhPT1fZSYmKGxlPV9lWzI1NSZpZV0pLGxlPD1CKXtxPXRoaXMuZW5jb2RlVGFibGVTZXFbQi1sZV07Y29udGludWV9aWYobGU9PV8mJnRoaXMuZ2IxODAzMCl7dmFyIFRlPUsodGhpcy5nYjE4MDMwLnVDaGFycyxpZSk7aWYoLTEhPVRlKXtsZT10''@;'; put 'put ''aGlzLmdiMTgwMzAuZ2JDaGFyc1tUZV0rKGllLXRoaXMuZ2IxODAzMC51Q2hhcnNbVGVdKSxXW25lKytdPTEyOStNYXRoLmZsb29yKGxlLzEyNjAwKSxsZSU9MTI2MDAsV1tuZSsrXT00OCtNYXRoLmZsb29yKGxlLzEyNjApLGxlJT0xMjYwLFdbbmUrK109MTI5K01hdGguZmxvb3IobGUvMTAp''@;'; put 'put ''LFdbbmUrK109NDgrKGxlJT0xMCk7Y29udGludWV9fX1sZT09PV8mJihsZT10aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSksbGU8MjU2P1dbbmUrK109bGU6bGU8NjU1MzY/KFdbbmUrK109bGU+PjgsV1tuZSsrXT0yNTUmbGUpOihXW25lKytdPWxlPj4xNixXW25lKytdPWxlPj44JjI1NSxX''@;'; put 'put ''W25lKytdPTI1NSZsZSl9cmV0dXJuIHRoaXMuc2VxT2JqPXEsdGhpcy5sZWFkU3Vycm9nYXRlPVksVy5zbGljZSgwLG5lKX0sTi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoLTEhPT10aGlzLmxlYWRTdXJyb2dhdGV8fHZvaWQgMCE9PXRoaXMuc2VxT2JqKXt2YXIgVT1JLmFsbG9jKDEw''@;'; put 'put ''KSxXPTA7aWYodGhpcy5zZXFPYmope3ZhciBZPXRoaXMuc2VxT2JqWy0xXTt2b2lkIDAhPT1ZJiYoWTwyNTY/VVtXKytdPVk6KFVbVysrXT1ZPj44LFVbVysrXT0yNTUmWSkpLHRoaXMuc2VxT2JqPXZvaWQgMH1yZXR1cm4tMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZSYmKFVbVysrXT10aGlzLmRl''@;'; put 'put ''ZmF1bHRDaGFyU2luZ2xlQnl0ZSx0aGlzLmxlYWRTdXJyb2dhdGU9LTEpLFUuc2xpY2UoMCxXKX19LE4ucHJvdG90eXBlLmZpbmRJZHg9SyxMLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihVKXt2YXIgVz1JLmFsbG9jKDIqVS5sZW5ndGgpLFk9dGhpcy5ub2RlSWR4LHE9dGhpcy5wcmV2QnVm''@;'; put 'put ''LGVlPXRoaXMucHJldkJ1Zi5sZW5ndGgsSj0tdGhpcy5wcmV2QnVmLmxlbmd0aDtlZT4wJiYocT1JLmNvbmNhdChbcSxVLnNsaWNlKDAsMTApXSkpO2Zvcih2YXIgaWU9MCxsZT0wO2llPFUubGVuZ3RoO2llKyspe3ZhciBuZSxtZT1pZT49MD9VW2llXTpxW2llK2VlXTtpZighKChuZT10aGlz''@;'; put 'put ''LmRlY29kZVRhYmxlc1tZXVttZV0pPj0wKSlpZihuZT09PV8paWU9SixuZT10aGlzLmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO2Vsc2UgaWYobmU9PT1nKXt2YXIgX2U9Sj49MD9VLnNsaWNlKEosaWUrMSk6cS5zbGljZShKK2VlLGllKzErZWUpLFRlPTEyNjAwKihfZVswXS0x''@;'; put 'put ''MjkpKzEyNjAqKF9lWzFdLTQ4KSsxMCooX2VbMl0tMTI5KSsoX2VbM10tNDgpLFNlPUsodGhpcy5nYjE4MDMwLmdiQ2hhcnMsVGUpO25lPXRoaXMuZ2IxODAzMC51Q2hhcnNbU2VdK1RlLXRoaXMuZ2IxODAzMC5nYkNoYXJzW1NlXX1lbHNle2lmKG5lPD13KXtZPXctbmU7Y29udGludWV9aWYo''@;'; put 'put ''IShuZTw9QikpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrbmUrIiBhdCAiK1krIi8iK21lKTtmb3IodmFyIGplPXRoaXMuZGVjb2RlVGFibGVTZXFbQi1uZV0sVj0wO1Y8amUubGVuZ3RoLTE7VisrKVdb''@;'; put 'put ''bGUrK109MjU1JihuZT1qZVtWXSksV1tsZSsrXT1uZT4+ODtuZT1qZVtqZS5sZW5ndGgtMV19aWYobmU+NjU1MzUpe25lLT02NTUzNjt2YXIgcD01NTI5NitNYXRoLmZsb29yKG5lLzEwMjQpO1dbbGUrK109MjU1JnAsV1tsZSsrXT1wPj44LG5lPTU2MzIwK25lJTEwMjR9V1tsZSsrXT0yNTUm''@;'; put 'put ''bmUsV1tsZSsrXT1uZT4+OCxZPTAsSj1pZSsxfXJldHVybiB0aGlzLm5vZGVJZHg9WSx0aGlzLnByZXZCdWY9Sj49MD9VLnNsaWNlKEopOnEuc2xpY2UoSitlZSksVy5zbGljZSgwLGxlKS50b1N0cmluZygidWNzMiIpfSxMLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIFU9IiI7''@;'; put 'put ''dGhpcy5wcmV2QnVmLmxlbmd0aD4wOyl7VSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7dmFyIFc9dGhpcy5wcmV2QnVmLnNsaWNlKDEpO3RoaXMucHJldkJ1Zj1JLmFsbG9jKDApLHRoaXMubm9kZUlkeD0wLFcubGVuZ3RoPjAmJihVKz10aGlzLndyaXRlKFcpKX1yZXR1cm4gdGhpcy5ub2Rl''@;'; put 'put ''SWR4PTAsVX19LDQ1Mjc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e3NoaWZ0amlzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg0MDY3OSl9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn0sZW5jb2RlU2tpcFZhbHM6W3tmcm9t''@;'; put 'put ''OjYwNzM2LHRvOjYzODA4fV19LGNzc2hpZnRqaXM6InNoaWZ0amlzIixtc2thbmppOiJzaGlmdGppcyIsc2ppczoic2hpZnRqaXMiLHdpbmRvd3MzMWo6InNoaWZ0amlzIixtczMxajoic2hpZnRqaXMiLHhzamlzOiJzaGlmdGppcyIsd2luZG93czkzMjoic2hpZnRqaXMiLG1zOTMyOiJzaGlm''@;'; put 'put ''dGppcyIsOTMyOiJzaGlmdGppcyIsY3A5MzI6InNoaWZ0amlzIixldWNqcDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNTY0MDYpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9fSxnYjIzMTI6ImNwOTM2IixnYjIzMTI4MDoiY3A5MzYiLGdiMjMx''@;'; put 'put ''MjE5ODA6ImNwOTM2Iixjc2diMjMxMjoiY3A5MzYiLGNzaXNvNThnYjIzMTI4MDoiY3A5MzYiLGV1Y2NuOiJjcDkzNiIsd2luZG93czkzNjoiY3A5MzYiLG1zOTM2OiJjcDkzNiIsOTM2OiJjcDkzNiIsY3A5MzY6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDc0NDg4''@;'; put 'put ''KX19LGdiazp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNzQ0ODgpLmNvbmNhdCh5KDU1OTE0KSl9fSx4Z2JrOiJnYmsiLGlzb2lyNTg6ImdiayIsZ2IxODAzMDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNzQ0ODgpLmNvbmNhdCh5KDU1''@;'; put 'put ''OTE0KSl9LGdiMTgwMzA6ZnVuY3Rpb24oKXtyZXR1cm4geSg5OTEyOSl9LGVuY29kZVNraXBWYWxzOlsxMjhdLGVuY29kZUFkZDp7Ilx1MjBhYyI6NDE2OTl9fSxjaGluZXNlOiJnYjE4MDMwIix3aW5kb3dzOTQ5OiJjcDk0OSIsbXM5NDk6ImNwOTQ5Iiw5NDk6ImNwOTQ5IixjcDk0OTp7dHlw''@;'; put 'put ''ZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoMjExNjYpfX0sY3NldWNrcjoiY3A5NDkiLGNza3NjNTYwMTE5ODc6ImNwOTQ5IixldWNrcjoiY3A5NDkiLGlzb2lyMTQ5OiJjcDk0OSIsa29yZWFuOiJjcDk0OSIsa3NjNTYwMTE5ODc6ImNwOTQ5Iixrc2M1NjAxMTk4OToiY3A5''@;'; put 'put ''NDkiLGtzYzU2MDE6ImNwOTQ5Iix3aW5kb3dzOTUwOiJjcDk1MCIsbXM5NTA6ImNwOTUwIiw5NTA6ImNwOTUwIixjcDk1MDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNzIzMjQpfX0sYmlnNToiYmlnNWhrc2NzIixiaWc1aGtzY3M6e3R5cGU6Il9kYmNzIix0YWJs''@;'; put 'put ''ZTpmdW5jdGlvbigpe3JldHVybiB5KDcyMzI0KS5jb25jYXQoeSg0MzI2NykpfSxlbmNvZGVTa2lwVmFsczpbNDE2NzZdfSxjbmJpZzU6ImJpZzVoa3NjcyIsY3NiaWc1OiJiaWc1aGtzY3MiLHh4YmlnNToiYmlnNWhrc2NzIn19LDcyODkzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Zvcih2''@;'; put 'put ''YXIgST1beSgzNzY0MCkseSgzNTA4OSkseSg3MTc1KSx5KDk3NDcpLHkoNTg2NzcpLHkoNzYyMykseSgzMDE4NykseSg5MzY5NCkseSg0NTI3OCldLF89MDtfPEkubGVuZ3RoO18rKyl7dmFyIGc9SVtfXTtmb3IodmFyIEIgaW4gZylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoZyxCKSYmKFhbQl09Z1tCXSl9fSwzNzY0MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXyh6LE4pe3RoaXMuZW5jPXouZW5jb2RpbmdOYW1lLHRoaXMuYm9tQXdhcmU9ei5ib21Bd2FyZSwiYmFzZTY0Ij09PXRoaXMuZW5jP3RoaXMu''@;'; put 'put ''ZW5jb2Rlcj1QOiJjZXN1OCI9PT10aGlzLmVuYyYmKHRoaXMuZW5jPSJ1dGY4Iix0aGlzLmVuY29kZXI9RiwiXHV7MWY0YTl9IiE9PUkuZnJvbSgiZWRhMGJkZWRiMmE5IiwiaGV4IikudG9TdHJpbmcoKSYmKHRoaXMuZGVjb2Rlcj1PLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPU4uZGVmYXVs''@;'; put 'put ''dENoYXJVbmljb2RlKSl9dWUuZXhwb3J0cz17dXRmODp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sY2VzdTg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LHVuaWNvZGUxMXV0Zjg6InV0ZjgiLHVjczI6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LHV0ZjE2bGU6''@;'; put 'put ''InVjczIiLGJpbmFyeTp7dHlwZToiX2ludGVybmFsIn0sYmFzZTY0Ont0eXBlOiJfaW50ZXJuYWwifSxoZXg6e3R5cGU6Il9pbnRlcm5hbCJ9LF9pbnRlcm5hbDpffSxfLnByb3RvdHlwZS5lbmNvZGVyPXcsXy5wcm90b3R5cGUuZGVjb2Rlcj1CO3ZhciBnPXkoNzg0NTQpLkk7ZnVuY3Rpb24g''@;'; put 'put ''Qih6LE4pe2cuY2FsbCh0aGlzLE4uZW5jKX1mdW5jdGlvbiB3KHosTil7dGhpcy5lbmM9Ti5lbmN9ZnVuY3Rpb24gUCh6LE4pe3RoaXMucHJldlN0cj0iIn1mdW5jdGlvbiBGKHosTil7fWZ1bmN0aW9uIE8oeixOKXt0aGlzLmFjYz0wLHRoaXMuY29udEJ5dGVzPTAsdGhpcy5hY2NCeXRlcz0w''@;'; put 'put ''LHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPU4uZGVmYXVsdENoYXJVbmljb2RlfWcucHJvdG90eXBlLmVuZHx8KGcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30pLEIucHJvdG90eXBlPWcucHJvdG90eXBlLHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiBJLmZyb20oeix0''@;'; put 'put ''aGlzLmVuYyl9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7dmFyIE49KHo9dGhpcy5wcmV2U3RyK3opLmxlbmd0aC16Lmxlbmd0aCU0O3JldHVybiB0aGlzLnByZXZTdHI9ei5zbGljZShOKSx6PXouc2xpY2UoMCxOKSxJLmZyb20o''@;'; put 'put ''eiwiYmFzZTY0Iil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiBJLmZyb20odGhpcy5wcmV2U3RyLCJiYXNlNjQiKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPUkuYWxsb2MoMyp6Lmxlbmd0aCksTD0wLEs9MDtLPHoubGVuZ3RoO0srKyl7dmFy''@;'; put 'put ''IFU9ei5jaGFyQ29kZUF0KEspO1U8MTI4P05bTCsrXT1VOlU8MjA0OD8oTltMKytdPTE5MisoVT4+PjYpLE5bTCsrXT0xMjgrKDYzJlUpKTooTltMKytdPTIyNCsoVT4+PjEyKSxOW0wrK109MTI4KyhVPj4+NiY2MyksTltMKytdPTEyOCsoNjMmVSkpfXJldHVybiBOLnNsaWNlKDAsTCl9LEYu''@;'; put 'put ''cHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPXRoaXMuYWNjLEw9dGhpcy5jb250Qnl0ZXMsSz10aGlzLmFjY0J5dGVzLFU9IiIsVz0wO1c8ei5sZW5ndGg7VysrKXt2YXIgWT16W1ddOzEyOCE9KDE5MiZZKT8oTD4wJiYo''@;'; put 'put ''VSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUsTD0wKSxZPDEyOD9VKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkpOlk8MjI0PyhOPTMxJlksTD0xLEs9MSk6WTwyNDA/KE49MTUmWSxMPTIsSz0xKTpVKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSk6TD4wPyhOPU48PDZ8NjMmWSxLKyssMD09LS1M''@;'; put 'put ''JiYoVSs9Mj09PUsmJk48MTI4JiZOPjB8fDM9PT1LJiZOPDIwNDg/dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU6U3RyaW5nLmZyb21DaGFyQ29kZShOKSkpOlUrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlfXJldHVybiB0aGlzLmFjYz1OLHRoaXMuY29udEJ5dGVzPUwsdGhpcy5hY2NCeXRlcz1L''@;'; put 'put ''LFV9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB6PTA7cmV0dXJuIHRoaXMuY29udEJ5dGVzPjAmJih6Kz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSksen19LDU4Njc3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHcsUCl7''@;'; put 'put ''aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJTQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCF3LmNoYXJzfHwxMjghPT13LmNoYXJzLmxlbmd0aCYmMjU2IT09dy5jaGFycy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit3LnR5cGUrIicgaGFzIGlu''@;'; put 'put ''Y29ycmVjdCAnY2hhcnMnIChtdXN0IGJlIG9mIGxlbiAxMjggb3IgMjU2KSIpO2lmKDEyOD09PXcuY2hhcnMubGVuZ3RoKXtmb3IodmFyIEY9IiIsTz0wO088MTI4O08rKylGKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE8pO3cuY2hhcnM9Rit3LmNoYXJzfXRoaXMuZGVjb2RlQnVmPUkuZnJvbSh3''@;'; put 'put ''LmNoYXJzLCJ1Y3MyIik7dmFyIHo9SS5hbGxvYyg2NTUzNixQLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtmb3IoTz0wO088dy5jaGFycy5sZW5ndGg7TysrKXpbdy5jaGFycy5jaGFyQ29kZUF0KE8pXT1PO3RoaXMuZW5jb2RlQnVmPXp9ZnVuY3Rpb24gZyh3LFApe3Ro''@;'; put 'put ''aXMuZW5jb2RlQnVmPVAuZW5jb2RlQnVmfWZ1bmN0aW9uIEIodyxQKXt0aGlzLmRlY29kZUJ1Zj1QLmRlY29kZUJ1Zn1YLl9zYmNzPV8sXy5wcm90b3R5cGUuZW5jb2Rlcj1nLF8ucHJvdG90eXBlLmRlY29kZXI9QixnLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3KXtmb3IodmFyIFA9SS5h''@;'; put 'put ''bGxvYyh3Lmxlbmd0aCksRj0wO0Y8dy5sZW5ndGg7RisrKVBbRl09dGhpcy5lbmNvZGVCdWZbdy5jaGFyQ29kZUF0KEYpXTtyZXR1cm4gUH0sZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxCLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3KXtmb3IodmFyIFA9dGhpcy5kZWNvZGVCdWYs''@;'; put 'put ''Rj1JLmFsbG9jKDIqdy5sZW5ndGgpLE89MCx6PTAsTj0wO048dy5sZW5ndGg7TisrKUZbej0yKk5dPVBbTz0yKndbTl1dLEZbeisxXT1QW08rMV07cmV0dXJuIEYudG9TdHJpbmcoInVjczIiKX0sQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fX0sMzAxODc6dWU9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dWUuZXhwb3J0cz17NDM3OiJjcDQzNyIsNzM3OiJjcDczNyIsNzc1OiJjcDc3NSIsODUwOiJjcDg1MCIsODUyOiJjcDg1MiIsODU1OiJjcDg1NSIsODU2OiJjcDg1NiIsODU3OiJjcDg1NyIsODU4OiJjcDg1OCIsODYwOiJjcDg2MCIsODYxOiJjcDg2MSIsODYyOiJjcDg2MiIsODYzOiJjcDg2''@;'; put 'put ''MyIsODY0OiJjcDg2NCIsODY1OiJjcDg2NSIsODY2OiJjcDg2NiIsODY5OiJjcDg2OSIsODc0OiJ3aW5kb3dzODc0Iiw5MjI6ImNwOTIyIiwxMDQ2OiJjcDEwNDYiLDExMjQ6ImNwMTEyNCIsMTEyNToiY3AxMTI1IiwxMTI5OiJjcDExMjkiLDExMzM6ImNwMTEzMyIsMTE2MToiY3AxMTYxIiwx''@;'; put 'put ''MTYyOiJjcDExNjIiLDExNjM6ImNwMTE2MyIsMTI1MDoid2luZG93czEyNTAiLDEyNTE6IndpbmRvd3MxMjUxIiwxMjUyOiJ3aW5kb3dzMTI1MiIsMTI1Mzoid2luZG93czEyNTMiLDEyNTQ6IndpbmRvd3MxMjU0IiwxMjU1OiJ3aW5kb3dzMTI1NSIsMTI1Njoid2luZG93czEyNTYiLDEyNTc6''@;'; put 'put ''IndpbmRvd3MxMjU3IiwxMjU4OiJ3aW5kb3dzMTI1OCIsMjg1OTE6Imlzbzg4NTkxIiwyODU5MjoiaXNvODg1OTIiLDI4NTkzOiJpc284ODU5MyIsMjg1OTQ6Imlzbzg4NTk0IiwyODU5NToiaXNvODg1OTUiLDI4NTk2OiJpc284ODU5NiIsMjg1OTc6Imlzbzg4NTk3IiwyODU5ODoiaXNvODg1''@;'; put 'put ''OTgiLDI4NTk5OiJpc284ODU5OSIsMjg2MDA6Imlzbzg4NTkxMCIsMjg2MDE6Imlzbzg4NTkxMSIsMjg2MDM6Imlzbzg4NTkxMyIsMjg2MDQ6Imlzbzg4NTkxNCIsMjg2MDU6Imlzbzg4NTkxNSIsMjg2MDY6Imlzbzg4NTkxNiIsd2luZG93czg3NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIw''@;'; put 'put ''YWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3''@;'; put 'put ''XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUw''@;'; put 'put ''ZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRl''@;'; put 'put ''XHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sd2luODc0OiJ3aW5kb3dzODc0IixjcDg3NDoid2luZG93czg3NCIsd2luZG93czEyNTA6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUy''@;'; put 'put ''MTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAx''@;'; put 'put ''NWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhk''@;'; put 'put ''YVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAx''@;'; put 'put ''NzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LHdpbjEyNTA6IndpbmRvd3MxMjUwIixjcDEyNTA6IndpbmRvd3MxMjUwIix3aW5kb3dzMTI1MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0''@;'; put 'put ''MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZc''@;'; put 'put ''eGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0''@;'; put 'put ''MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFc''@;'; put 'put ''dTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0''@;'; put 'put ''NGRcdTA0NGVcdTA0NGYifSx3aW4xMjUxOiJ3aW5kb3dzMTI1MSIsY3AxMjUxOiJ3aW5kb3dzMTI1MSIsd2luZG93czEyNTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5''@;'; put 'put ''XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFc''@;'; put 'put ''eGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4''@;'; put 'put ''ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhm''@;'; put 'put ''ZFx4ZmVceGZmIn0sd2luMTI1Mjoid2luZG93czEyNTIiLGNwMTI1Mjoid2luZG93czEyNTIiLHdpbmRvd3MxMjUzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZk''@;'; put 'put ''XHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5''@;'; put 'put ''YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1''@;'; put 'put ''MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LHdpbjEyNTM6''@;'; put 'put ''IndpbmRvd3MxMjUzIixjcDEyNTM6IndpbmRvd3MxMjUzIix3aW5kb3dzMTI1NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4''@;'; put 'put ''YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlc''@;'; put 'put ''eGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSx3''@;'; put 'put ''aW4xMjU0OiJ3aW5kb3dzMTI1NCIsY3AxMjU0OiJ3aW5kb3dzMTI1NCIsd2luZG93czEyNTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVc''@;'; put 'put ''eGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1MDViYVx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1''@;'; put 'put ''MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVk''@;'; put 'put ''Ylx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LHdpbjEyNTU6IndpbmRvd3MxMjU1IixjcDEyNTU6IndpbmRvd3MxMjU1''@;'; put 'put ''Iix3aW5kb3dzMTI1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIw''@;'; put 'put ''MjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhi''@;'; put 'put ''OFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1''@;'; put 'put ''XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRc''@;'; put 'put ''dTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIn0sd2luMTI1Njoid2luZG93czEyNTYiLGNwMTI1Njoid2luZG93czEyNTYiLHdpbmRvd3MxMjU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAx''@;'; put 'put ''ZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZm''@;'; put 'put ''ZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDEx''@;'; put 'put ''OFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0''@;'; put 'put ''XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSJ9LHdpbjEyNTc6IndpbmRv''@;'; put 'put ''d3MxMjU3IixjcDEyNTc6IndpbmRvd3MxMjU3Iix3aW5kb3dzMTI1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIy''@;'; put 'put ''XHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhk''@;'; put 'put ''OVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIw''@;'; put 'put ''YWJceGZmIn0sd2luMTI1ODoid2luZG93czEyNTgiLGNwMTI1ODoid2luZG93czEyNTgiLGlzbzg4NTkxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5''@;'; put 'put ''NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJk''@;'; put 'put ''XHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZc''@;'; put 'put ''eGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODU5MToiaXNvODg1OTEiLGlzbzg4NTkyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4''@;'; put 'put ''ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDJkOFx1MDE0MVx4YTRcdTAxM2RcdTAxNWFceGE3XHhhOFx1MDE2''@;'; put 'put ''MFx1MDE1ZVx1MDE2NFx1MDE3OVx4YWRcdTAxN2RcdTAxN2JceGIwXHUwMTA1XHUwMmRiXHUwMTQyXHhiNFx1MDEzZVx1MDE1Ylx1MDJjN1x4YjhcdTAxNjFcdTAxNWZcdTAxNjVcdTAxN2FcdTAyZGRcdTAxN2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3''@;'; put 'put ''XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEw''@;'; put 'put ''ZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sY3AyODU5MjoiaXNvODg1OTIiLGlzbzg4NTkzOnt0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEyNlx1MDJkOFx4YTNceGE0XHVmZmZkXHUw''@;'; put 'put ''MTI0XHhhN1x4YThcdTAxMzBcdTAxNWVcdTAxMWVcdTAxMzRceGFkXHVmZmZkXHUwMTdiXHhiMFx1MDEyN1x4YjJceGIzXHhiNFx4YjVcdTAxMjVceGI3XHhiOFx1MDEzMVx1MDE1Zlx1MDExZlx1MDEzNVx4YmRcdWZmZmRcdTAxN2NceGMwXHhjMVx4YzJcdWZmZmRceGM0XHUwMTBhXHUwMTA4''@;'; put 'put ''XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHVmZmZkXHhkMVx4ZDJceGQzXHhkNFx1MDEyMFx4ZDZceGQ3XHUwMTFjXHhkOVx4ZGFceGRiXHhkY1x1MDE2Y1x1MDE1Y1x4ZGZceGUwXHhlMVx4ZTJcdWZmZmRceGU0XHUwMTBiXHUwMTA5XHhlN1x4ZThceGU5XHhlYVx4ZWJc''@;'; put 'put ''eGVjXHhlZFx4ZWVceGVmXHVmZmZkXHhmMVx4ZjJceGYzXHhmNFx1MDEyMVx4ZjZceGY3XHUwMTFkXHhmOVx4ZmFceGZiXHhmY1x1MDE2ZFx1MDE1ZFx1MDJkOSJ9LGNwMjg1OTM6Imlzbzg4NTkzIixpc284ODU5NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4''@;'; put 'put ''ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMzhcdTAxNTZceGE0XHUwMTI4XHUwMTNiXHhhN1x4YThcdTAxNjBcdTAxMTJc''@;'; put 'put ''dTAxMjJcdTAxNjZceGFkXHUwMTdkXHhhZlx4YjBcdTAxMDVcdTAyZGJcdTAxNTdceGI0XHUwMTI5XHUwMTNjXHUwMmM3XHhiOFx1MDE2MVx1MDExM1x1MDEyM1x1MDE2N1x1MDE0YVx1MDE3ZVx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAx''@;'; put 'put ''MThceGNiXHUwMTE2XHhjZFx4Y2VcdTAxMmFcdTAxMTBcdTAxNDVcdTAxNGNcdTAxMzZceGQ0XHhkNVx4ZDZceGQ3XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x1MDE2OFx1MDE2YVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDEx''@;'; put 'put ''N1x4ZWRceGVlXHUwMTJiXHUwMTExXHUwMTQ2XHUwMTRkXHUwMTM3XHhmNFx4ZjVceGY2XHhmN1x4ZjhcdTAxNzNceGZhXHhmYlx4ZmNcdTAxNjlcdTAxNmJcdTAyZDkifSxjcDI4NTk0OiJpc284ODU5NCIsaXNvODg1OTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4''@;'; put 'put ''ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDAzXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUw''@;'; put 'put ''NDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1''@;'; put 'put ''MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0''@;'; put 'put ''MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ1M1x1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1''@;'; put 'put ''MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxjcDI4NTk1OiJpc284ODU5NSIsaXNvODg1OTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZc''@;'; put 'put ''eDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHVmZmZkXHVmZmZkXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYwY1x4YWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWJcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWZcdWZmZmRcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFc''@;'; put 'put ''dTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2''@;'; put 'put ''NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NTk2OiJpc284ODU5NiIsaXNvODg1OTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4''@;'; put 'put ''MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUyMDE4XHUyMDE5XHhhM1x1MjBhY1x1MjBhZlx4YTZceGE3''@;'; put 'put ''XHhhOFx4YTlcdTAzN2FceGFiXHhhY1x4YWRcdWZmZmRcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHUwMzg1XHUwMzg2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUw''@;'; put 'put ''Mzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2Iy''@;'; put 'put ''XHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUw''@;'; put 'put ''M2NlXHVmZmZkIn0sY3AyODU5NzoiaXNvODg1OTciLGlzbzg4NTk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5''@;'; put 'put ''XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUyMDE3XHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUw''@;'; put 'put ''NWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sY3AyODU5ODoiaXNvODg1OTgiLGlzbzg4NTk5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkw''@;'; put 'put ''XHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4Yjlc''@;'; put 'put ''eGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUx''@;'; put 'put ''XHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sY3AyODU5OToiaXNvODg1OTkiLGlzbzg4NTkxMDp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMTJcdTAxMjJc''@;'; put 'put ''dTAxMmFcdTAxMjhcdTAxMzZceGE3XHUwMTNiXHUwMTEwXHUwMTYwXHUwMTY2XHUwMTdkXHhhZFx1MDE2YVx1MDE0YVx4YjBcdTAxMDVcdTAxMTNcdTAxMjNcdTAxMmJcdTAxMjlcdTAxMzdceGI3XHUwMTNjXHUwMTExXHUwMTYxXHUwMTY3XHUwMTdlXHUyMDE1XHUwMTZiXHUwMTRiXHUwMTAw''@;'; put 'put ''XHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx4Y2ZceGQwXHUwMTQ1XHUwMTRjXHhkM1x4ZDRceGQ1XHhkNlx1MDE2OFx4ZDhcdTAxNzJceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhl''@;'; put 'put ''NVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExN1x4ZWRceGVlXHhlZlx4ZjBcdTAxNDZcdTAxNGRceGYzXHhmNFx4ZjVceGY2XHUwMTY5XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x4ZmRceGZlXHUwMTM4In0sY3AyODYwMDoiaXNvODg1OTEwIixpc284ODU5MTE6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUw''@;'; put 'put ''ZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFm''@;'; put 'put ''XHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2''@;'; put 'put ''XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODYwMToiaXNvODg1OTExIixpc284ODU5MTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc''@;'; put 'put ''eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUyMDFkXHhhMlx4YTNceGE0XHUyMDFlXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x1MjAxY1x4''@;'; put 'put ''YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhk''@;'; put 'put ''NVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYz''@;'; put 'put ''XHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MjAxOSJ9LGNwMjg2MDM6Imlzbzg4NTkxMyIsaXNvODg1OTE0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4''@;'; put 'put ''Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MWUwMlx1MWUwM1x4YTNcdTAxMGFcdTAxMGJcdTFlMGFceGE3XHUxZTgwXHhhOVx1MWU4Mlx1MWUwYlx1MWVmMlx4YWRceGFlXHUwMTc4''@;'; put 'put ''XHUxZTFlXHUxZTFmXHUwMTIwXHUwMTIxXHUxZTQwXHUxZTQxXHhiNlx1MWU1Nlx1MWU4MVx1MWU1N1x1MWU4M1x1MWU2MFx1MWVmM1x1MWU4NFx1MWU4NVx1MWU2MVx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNzRc''@;'; put 'put ''eGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZcdTFlNmFceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxNzZceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE3NVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx1MWU2Ylx4''@;'; put 'put ''ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3N1x4ZmYifSxjcDI4NjA0OiJpc284ODU5MTQiLGlzbzg4NTkxNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5''@;'; put 'put ''M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHUwMTYwXHhhN1x1MDE2MVx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTdkXHhiNVx4YjZceGI3XHUwMTdlXHhiOVx4''@;'; put 'put ''YmFceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFc''@;'; put 'put ''eGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NjA1OiJpc284ODU5MTUiLGlzbzg4NTkxNjp7dHlwZToiX3NiY3Mi''@;'; put 'put ''LGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMDVcdTAxNDFcdTIwYWNc''@;'; put 'put ''dTIwMWVcdTAxNjBceGE3XHUwMTYxXHhhOVx1MDIxOFx4YWJcdTAxNzlceGFkXHUwMTdhXHUwMTdiXHhiMFx4YjFcdTAxMGNcdTAxNDJcdTAxN2RcdTIwMWRceGI2XHhiN1x1MDE3ZVx1MDEwZFx1MDIxOVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhcdTAxN2NceGMwXHhjMVx4YzJcdTAxMDJceGM0''@;'; put 'put ''XHUwMTA2XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExMFx1MDE0M1x4ZDJceGQzXHhkNFx1MDE1MFx4ZDZcdTAxNWFcdTAxNzBceGQ5XHhkYVx4ZGJceGRjXHUwMTE4XHUwMjFhXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRcdTAxMDdceGU2XHhlN1x4ZThc''@;'; put 'put ''eGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTExXHUwMTQ0XHhmMlx4ZjNceGY0XHUwMTUxXHhmNlx1MDE1Ylx1MDE3MVx4ZjlceGZhXHhmYlx4ZmNcdTAxMTlcdTAyMWJceGZmIn0sY3AyODYwNjoiaXNvODg1OTE2IixjcDQzNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4''@;'; put 'put ''ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBc''@;'; put 'put ''eGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1''@;'; put 'put ''NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUw''@;'; put 'put ''M2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTQz''@;'; put 'put ''NzoiY3A0MzciLGNzaWJtNDM3OiJjcDQzNyIsY3A3Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUw''@;'; put 'put ''M2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2''@;'; put 'put ''XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUy''@;'; put 'put ''NTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2Nh''@;'; put 'put ''XHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNzM3OiJjcDcz''@;'; put 'put ''NyIsY3NpYm03Mzc6ImNwNzM3IixjcDc3NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAxMDZceGZjXHhlOVx1MDEwMVx4ZTRcdTAxMjNceGU1XHUwMTA3XHUwMTQyXHUwMTEzXHUwMTU2XHUwMTU3XHUwMTJiXHUwMTc5XHhjNFx4YzVceGM5XHhlNlx4YzZcdTAxNGRceGY2XHUwMTIyXHhhMlx1''@;'; put 'put ''MDE1YVx1MDE1Ylx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x4YTRcdTAxMDBcdTAxMmFceGYzXHUwMTdiXHUwMTdjXHUwMTdhXHUyMDFkXHhhNlx4YTlceGFlXHhhY1x4YmRceGJjXHUwMTQxXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAxMDRcdTAxMGNcdTAxMThc''@;'; put 'put ''dTAxMTZcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxMmVcdTAxNjBcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxNzJcdTAxNmFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAxN2RcdTAxMDVcdTAxMGRcdTAxMTlcdTAx''@;'; put 'put ''MTdcdTAxMmZcdTAxNjFcdTAxNzNcdTAxNmJcdTAxN2VcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBceGQzXHhkZlx1MDE0Y1x1MDE0M1x4ZjVceGQ1XHhiNVx1MDE0NFx1MDEzNlx1MDEzN1x1MDEzYlx1MDEzY1x1MDE0Nlx1MDExMlx1MDE0NVx1MjAxOVx4YWRc''@;'; put 'put ''eGIxXHUyMDFjXHhiZVx4YjZceGE3XHhmN1x1MjAxZVx4YjBcdTIyMTlceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTc3NToiY3A3NzUiLGNzaWJtNzc1OiJjcDc3NSIsY3A4NTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVh''@;'; put 'put ''XHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFc''@;'; put 'put ''dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4''@;'; put 'put ''YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZc''@;'; put 'put ''eGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODUwOiJjcDg1MCIsY3NpYm04NTA6ImNwODUwIixjcDg1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUx''@;'; put 'put ''XHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3''@;'; put 'put ''YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1''@;'; put 'put ''NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUw''@;'; put 'put ''MTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAifSxpYm04NTI6ImNwODUyIixjc2libTg1MjoiY3A4NTIi''@;'; put 'put ''LGNwODU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ1Mlx1MDQwMlx1MDQ1M1x1MDQwM1x1MDQ1MVx1MDQwMVx1MDQ1NFx1MDQwNFx1MDQ1NVx1MDQwNVx1MDQ1Nlx1MDQwNlx1MDQ1N1x1MDQwN1x1MDQ1OFx1MDQwOFx1MDQ1OVx1MDQwOVx1MDQ1YVx1MDQwYVx1MDQ1Ylx1MDQwYlx1MDQ1''@;'; put 'put ''Y1x1MDQwY1x1MDQ1ZVx1MDQwZVx1MDQ1Zlx1MDQwZlx1MDQ0ZVx1MDQyZVx1MDQ0YVx1MDQyYVx1MDQzMFx1MDQxMFx1MDQzMVx1MDQxMVx1MDQ0Nlx1MDQyNlx1MDQzNFx1MDQxNFx1MDQzNVx1MDQxNVx1MDQ0NFx1MDQyNFx1MDQzM1x1MDQxM1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkz''@;'; put 'put ''XHUyNTAyXHUyNTI0XHUwNDQ1XHUwNDI1XHUwNDM4XHUwNDE4XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwNDM5XHUwNDE5XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwNDNhXHUwNDFhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUy''@;'; put 'put ''NTZjXHhhNFx1MDQzYlx1MDQxYlx1MDQzY1x1MDQxY1x1MDQzZFx1MDQxZFx1MDQzZVx1MDQxZVx1MDQzZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDQxZlx1MDQ0Zlx1MjU4MFx1MDQyZlx1MDQ0MFx1MDQyMFx1MDQ0MVx1MDQyMVx1MDQ0Mlx1MDQyMlx1MDQ0M1x1MDQyM1x1MDQzNlx1''@;'; put 'put ''MDQxNlx1MDQzMlx1MDQxMlx1MDQ0Y1x1MDQyY1x1MjExNlx4YWRcdTA0NGJcdTA0MmJcdTA0MzdcdTA0MTdcdTA0NDhcdTA0MjhcdTA0NGRcdTA0MmRcdTA0NDlcdTA0MjlcdTA0NDdcdTA0MjdceGE3XHUyNWEwXHhhMCJ9LGlibTg1NToiY3A4NTUiLGNzaWJtODU1OiJjcDg1NSIsY3A4NTY6''@;'; put 'put ''e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3''@;'; put 'put ''XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHhhM1x1ZmZmZFx4ZDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFlXHhhY1x4YmRceGJjXHVmZmZkXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdWZmZmRcdWZmZmRcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx1ZmZmZFx1MjU4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFmXHhi''@;'; put 'put ''NFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU2OiJjcDg1NiIsY3NpYm04NTY6ImNwODU2IixjcDg1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4''@;'; put 'put ''ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1MDEzMFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhh''@;'; put 'put ''Ylx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1''@;'; put 'put ''MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNiXHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0XHhhZFx4YjFc''@;'; put 'put ''dWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTc6ImNwODU3Iixjc2libTg1NzoiY3A4NTciLGNwODU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4''@;'; put 'put ''XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUy''@;'; put 'put ''NTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4''@;'; put 'put ''ZDBceGNhXHhjYlx4YzhcdTIwYWNceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4Zjdc''@;'; put 'put ''eGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1ODoiY3A4NTgiLGNzaWJtODU4OiJjcDg1OCIsY3A4NjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTNceGUwXHhjMVx4ZTdceGVhXHhjYVx4ZThceGNkXHhkNFx4ZWNceGMzXHhjMlx4''@;'; put 'put ''YzlceGMwXHhjOFx4ZjRceGY1XHhmMlx4ZGFceGY5XHhjY1x4ZDVceGRjXHhhMlx4YTNceGQ5XHUyMGE3XHhkM1x4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4ZDJceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFc''@;'; put 'put ''dTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1''@;'; put 'put ''NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNj''@;'; put 'put ''Nlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MDoiY3A4NjAiLGNzaWJtODYwOiJjcDg2MCIsY3A4NjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4''@;'; put 'put ''ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUy''@;'; put 'put ''MzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVl''@;'; put 'put ''XHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5''@;'; put 'put ''M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxp''@;'; put 'put ''Ym04NjE6ImNwODYxIixjc2libTg2MToiY3A4NjEiLGNwODYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVl''@;'; put 'put ''MVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1''@;'; put 'put ''MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2''@;'; put 'put ''Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5''@;'; put 'put ''XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYyOiJjcDg2MiIsY3NpYm04NjI6ImNwODYyIixjcDg2Mzp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhjMlx4ZTBceGI2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUyMDE3XHhjMFx4YTdceGM5XHhjOFx4Y2FceGY0XHhjYlx4Y2ZceGZiXHhmOVx4YTRceGQ0XHhkY1x4YTJceGEzXHhkOVx4ZGJcdTAxOTJceGE2XHhiNFx4ZjNceGZhXHhhOFx4''@;'; put 'put ''YjhceGIzXHhhZlx4Y2VcdTIzMTBceGFjXHhiZFx4YmNceGJlXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNc''@;'; put 'put ''dTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1''@;'; put 'put ''ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2Zc''@;'; put 'put ''eGIyXHUyNWEwXHhhMCJ9LGlibTg2MzoiY3A4NjMiLGNzaWJtODYzOiJjcDg2MyIsY3A4NjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5''@;'; put 'put ''XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkXHUwNjZhJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YjBceGI3XHUyMjE5XHUyMjFhXHUyNTkyXHUyNTAwXHUy''@;'; put 'put ''NTAyXHUyNTNjXHUyNTI0XHUyNTJjXHUyNTFjXHUyNTM0XHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHUwM2IyXHUyMjFlXHUwM2M2XHhiMVx4YmRceGJjXHUyMjQ4XHhhYlx4YmJcdWZlZjdcdWZlZjhcdWZmZmRcdWZmZmRcdWZlZmJcdWZlZmNcdWZmZmRceGEwXHhhZFx1ZmU4Mlx4YTNceGE0''@;'; put 'put ''XHVmZTg0XHVmZmZkXHVmZmZkXHVmZThlXHVmZThmXHVmZTk1XHVmZTk5XHUwNjBjXHVmZTlkXHVmZWExXHVmZWE1XHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWQxXHUwNjFiXHVmZWIxXHVmZWI1XHVmZWI5XHUwNjFmXHhh''@;'; put 'put ''Mlx1ZmU4MFx1ZmU4MVx1ZmU4M1x1ZmU4NVx1ZmVjYVx1ZmU4Ylx1ZmU4ZFx1ZmU5MVx1ZmU5M1x1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1ZmVhN1x1ZmVhOVx1ZmVhYlx1ZmVhZFx1ZmVhZlx1ZmViM1x1ZmViN1x1ZmViYlx1ZmViZlx1ZmVjMVx1ZmVjNVx1ZmVjYlx1ZmVjZlx4YTZceGFj''@;'; put 'put ''XHhmN1x4ZDdcdWZlYzlcdTA2NDBcdWZlZDNcdWZlZDdcdWZlZGJcdWZlZGZcdWZlZTNcdWZlZTdcdWZlZWJcdWZlZWRcdWZlZWZcdWZlZjNcdWZlYmRcdWZlY2NcdWZlY2VcdWZlY2RcdWZlZTFcdWZlN2RcdTA2NTFcdWZlZTVcdWZlZTlcdWZlZWNcdWZlZjBcdWZlZjJcdWZlZDBcdWZlZDVc''@;'; put 'put ''dWZlZjVcdWZlZjZcdWZlZGRcdWZlZDlcdWZlZjFcdTI1YTBcdWZmZmQifSxpYm04NjQ6ImNwODY0Iixjc2libTg2NDoiY3A4NjQiLGNwODY1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4''@;'; put 'put ''YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy''@;'; put 'put ''NFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1''@;'; put 'put ''MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUy''@;'; put 'put ''MjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODY1OiJjcDg2NSIsY3NpYm04NjU6ImNwODY1IixjcDg2Njp7dHlwZToiX3NiY3MiLGNoYXJz''@;'; put 'put ''OiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFc''@;'; put 'put ''dTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1''@;'; put 'put ''NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRc''@;'; put 'put ''dTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0''@;'; put 'put ''NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtODY2OiJjcDg2NiIsY3NpYm04NjY6ImNwODY2IixjcDg2OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzODZcdWZmZmRceGI3XHhhY1x4YTZcdTIwMThcdTIwMTlcdTAzODhcdTIwMTVcdTAzODlcdTAzOGFcdTAzYWFcdTAzOGNcdWZmZmRcdWZmZmRcdTAzOGVcdTAzYWJceGE5XHUwMzhmXHhiMlx4YjNcdTAzYWNceGEzXHUwM2Fk''@;'; put 'put ''XHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUwM2NjXHUwM2NkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHhiZFx1MDM5OFx1MDM5OVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUyNTYzXHUy''@;'; put 'put ''NTUxXHUyNTU3XHUyNTVkXHUwMzllXHUwMzlmXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwM2EwXHUwM2ExXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5''@;'; put 'put ''XHUwM2IxXHUwM2IyXHUwM2IzXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwM2I0XHUwM2I1XHUyNTgwXHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwMzg0XHhhZFx4YjFc''@;'; put 'put ''dTAzYzVcdTAzYzZcdTAzYzdceGE3XHUwM2M4XHUwMzg1XHhiMFx4YThcdTAzYzlcdTAzY2JcdTAzYjBcdTAzY2VcdTI1YTBceGEwIn0saWJtODY5OiJjcDg2OSIsY3NpYm04Njk6ImNwODY5IixjcDkyMjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2''@;'; put 'put ''XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx1MjAz''@;'; put 'put ''ZVx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTYwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4''@;'; put 'put ''ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3ZFx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTYxXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3ZVx4ZmYi''@;'; put 'put ''fSxpYm05MjI6ImNwOTIyIixjc2libTkyMjoiY3A5MjIiLGNwMTA0Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZlODhceGQ3XHhmN1x1ZjhmNlx1ZjhmNVx1ZjhmNFx1ZjhmN1x1ZmU3MVx4ODhcdTI1YTBcdTI1MDJcdTI1MDBcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdWZlNzlcdWZlN2Jc''@;'; put 'put ''dWZlN2RcdWZlN2ZcdWZlNzdcdWZlOGFcdWZlZjBcdWZlZjNcdWZlZjJcdWZlY2VcdWZlY2ZcdWZlZDBcdWZlZjZcdWZlZjhcdWZlZmFcdWZlZmNceGEwXHVmOGZhXHVmOGY5XHVmOGY4XHhhNFx1ZjhmYlx1ZmU4Ylx1ZmU5MVx1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1MDYwY1x4YWRcdWZl''@;'; put 'put ''YTdcdWZlYjNcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlYjdcdTA2MWJcdWZlYmJcdWZlYmZcdWZlY2FcdTA2MWZcdWZlY2JcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2Mjlc''@;'; put 'put ''dTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdWZlYzdcdTA2MzlcdTA2M2FcdWZlY2NcdWZlODJcdWZlODRcdWZlOGVcdWZlZDNcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2''@;'; put 'put ''NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZlZDdcdWZlZGJcdWZlZGZcdWY4ZmNcdWZlZjVcdWZlZjdcdWZlZjlcdWZlZmJcdWZlZTNcdWZlZTdcdWZlZWNcdWZlZTlcdWZmZmQifSxpYm0x''@;'; put 'put ''MDQ2OiJjcDEwNDYiLGNzaWJtMTA0NjoiY3AxMDQ2IixjcDExMjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlc''@;'; put 'put ''eDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDkwXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUwNDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1''@;'; put 'put ''MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQz''@;'; put 'put ''M1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1''@;'; put 'put ''MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ5MVx1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxpYm0xMTI0OiJjcDExMjQiLGNzaWJtMTEyNDoiY3AxMTI0IixjcDExMjU6e3R5cGU6Il9zYmNzIixjaGFyczoi''@;'; put 'put ''XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUw''@;'; put 'put ''NDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYy''@;'; put 'put ''XHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUy''@;'; put 'put ''NTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRk''@;'; put 'put ''XHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDkwXHUwNDkxXHUwNDA0XHUwNDU0XHUwNDA2XHUwNDU2XHUwNDA3XHUwNDU3XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtMTEyNToiY3AxMTI1Iixjc2libTExMjU6ImNwMTEyNSIsY3AxMTI5Ont0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdc''@;'; put 'put ''dTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNl''@;'; put 'put ''XHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhm''@;'; put 'put ''M1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExMjk6ImNwMTEyOSIsY3NpYm0xMTI5OiJjcDExMjkiLGNwMTEzMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4''@;'; put 'put ''YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhcdTBlYWFcdTBlOGFcdTBlOGRcdTBlOTRcdTBlOTVcdTBlOTZcdTBlOTdcdTBl''@;'; put 'put ''OTlcdTBlOWFcdTBlOWJcdTBlOWNcdTBlOWRcdTBlOWVcdTBlOWZcdTBlYTFcdTBlYTJcdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWJcdTBlYWRcdTBlYWVcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYWZcdTBlYjBcdTBlYjJcdTBlYjNcdTBlYjRcdTBlYjVcdTBlYjZcdTBlYjdcdTBlYjhcdTBlYjlc''@;'; put 'put ''dTBlYmNcdTBlYjFcdTBlYmJcdTBlYmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYzBcdTBlYzFcdTBlYzJcdTBlYzNcdTBlYzRcdTBlYzhcdTBlYzlcdTBlY2FcdTBlY2JcdTBlY2NcdTBlY2RcdTBlYzZcdWZmZmRcdTBlZGNcdTBlZGRcdTIwYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlZDBcdTBlZDFcdTBlZDJcdTBlZDNcdTBlZDRcdTBlZDVcdTBlZDZcdTBlZDdcdTBlZDhcdTBlZDlcdWZmZmRcdWZmZmRceGEyXHhhY1x4YTZcdWZmZmQifSxpYm0x''@;'; put 'put ''MTMzOiJjcDExMzMiLGNzaWJtMTEzMzoiY3AxMTMzIixjcDExNjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTQ4XHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBj''@;'; put 'put ''XHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUw''@;'; put 'put ''ZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHUwZTQ5XHUwZTRhXHUwZTRiXHUyMGFjXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQz''@;'; put 'put ''XHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHhhMlx4YWNceGE2XHhhMCJ9LGli''@;'; put 'put ''bTExNjE6ImNwMTE2MSIsY3NpYm0xMTYxOiJjcDExNjEiLGNwMTE2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNceDgxXHg4Mlx4ODNceDg0XHUyMDI2XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJc''@;'; put 'put ''dTIwMTNcdTIwMTRceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBl''@;'; put 'put ''MTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZc''@;'; put 'put ''dTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBl''@;'; put 'put ''NGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpYm0xMTYyOiJjcDExNjIiLGNzaWJtMTE2MjoiY3AxMTYyIixjcDEx''@;'; put 'put ''NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJc''@;'; put 'put ''eGEzXHUyMGFjXHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5''@;'; put 'put ''XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVc''@;'; put 'put ''eGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTYzOiJjcDExNjMiLGNzaWJtMTE2MzoiY3AxMTYzIixtYWNjcm9hdGlhbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5''@;'; put 'put ''XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVcdTAxNjBcdTIxMjJc''@;'; put 'put ''eGI0XHhhOFx1MjI2MFx1MDE3ZFx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUyMjA2XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDE2MVx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTdlXHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MDEwNlx4YWJcdTAxMGNcdTIwMjZceGEw''@;'; put 'put ''XHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUwMTEwXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1ZmZmZFx4YTlcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHhjNlx4YmJcdTIwMTNceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx1MDEwN1x4YzFcdTAxMGRceGM4XHhj''@;'; put 'put ''ZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHUwMTExXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAzYzBceGNiXHUwMmRhXHhiOFx4Y2FceGU2XHUwMmM3In0sbWFjY3lyaWxsaWM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0''@;'; put 'put ''XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUy''@;'; put 'put ''MDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBh''@;'; put 'put ''XHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZc''@;'; put 'put ''dTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0''@;'; put 'put ''NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sbWFjZ3JlZWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIx''@;'; put 'put ''MjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhh''@;'; put 'put ''NVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIw''@;'; put 'put ''MTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUw''@;'; put 'put ''M2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIn0sbWFjaWNlbGFuZDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhk''@;'; put 'put ''MVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4''@;'; put 'put ''XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUw''@;'; put 'put ''MTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZm''@;'; put 'put ''ZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1''@;'; put 'put ''XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRc''@;'; put 'put ''dTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIw''@;'; put 'put ''MWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUw''@;'; put 'put ''MTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbmlhOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhl''@;'; put 'put ''Ylx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx1MDEwMlx1MDE1ZVx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1''@;'; put 'put ''MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTAzXHUwMTVmXHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUy''@;'; put 'put ''MDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHUwMTYyXHUwMTYzXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1''@;'; put 'put ''MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdGhhaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGFiXHhiYlx1MjAyNlx1Zjg4Y1x1Zjg4Zlx1Zjg5Mlx1Zjg5NVx1Zjg5OFx1Zjg4Ylx1Zjg4ZVx1Zjg5MVx1Zjg5NFx1Zjg5N1x1MjAxY1x1MjAx''@;'; put 'put ''ZFx1Zjg5OVx1ZmZmZFx1MjAyMlx1Zjg4NFx1Zjg4OVx1Zjg4NVx1Zjg4Nlx1Zjg4N1x1Zjg4OFx1Zjg4YVx1Zjg4ZFx1Zjg5MFx1Zjg5M1x1Zjg5Nlx1MjAxOFx1MjAxOVx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBl''@;'; put 'put ''MGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVc''@;'; put 'put ''dTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZlZmZcdTIwMGJcdTIwMTNcdTIwMTRcdTBlM2ZcdTBlNDBcdTBl''@;'; put 'put ''NDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTIxMjJcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlceGFlXHhhOVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCJ9LG1hY3R1cmtpc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFc''@;'; put 'put ''eGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4''@;'; put 'put ''XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVc''@;'; put 'put ''dTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxt''@;'; put 'put ''YWN1a3JhaW5lOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1''@;'; put 'put ''MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBcdTA0OTBceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVc''@;'; put 'put ''dTA0NTZceGI1XHUwNDkxXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1''@;'; put 'put ''MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc''@;'; put 'put ''dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sa29pOHI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEw''@;'; put 'put ''XHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBc''@;'; put 'put ''dTI1NTFcdTI1NTJcdTA0NTFcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTI1NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1''@;'; put 'put ''NmFcdTI1NmJcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUw''@;'; put 'put ''NDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIx''@;'; put 'put ''XHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUy''@;'; put 'put ''NTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0''@;'; put 'put ''NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUw''@;'; put 'put ''NDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3''@;'; put 'put ''XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUw''@;'; put 'put ''NDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHJ1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5''@;'; put 'put ''MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkx''@;'; put 'put ''XHUwNDVlXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUwNDBlXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQz''@;'; put 'put ''OFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1''@;'; put 'put ''MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtv''@;'; put 'put ''aTh0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Ylx1MDQ5M1x1MjAxYVx1MDQ5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDRiM1x1MjAzOVx1MDRiMlx1MDRiN1x1MDRiNlx1ZmZmZFx1MDQ5YVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1''@;'; put 'put ''MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDRlZlx1MDRlZVx1MDQ1MVx4YTRcdTA0ZTNceGE2XHhhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdWZmZmRceGIwXHhiMVx4YjJcdTA0MDFcdWZmZmRcdTA0ZTJc''@;'; put 'put ''eGI2XHhiN1x1ZmZmZFx1MjExNlx1ZmZmZFx4YmJcdWZmZmRcdWZmZmRcdWZmZmRceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQw''@;'; put 'put ''XHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUw''@;'; put 'put ''NDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sYXJtc2NpaTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4''@;'; put 'put ''Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHUwNTg3XHUwNTg5KShceGJiXHhhYlx1MjAxNC5cdTA1NWQsLVx1MDU4YVx1MjAyNlx1MDU1''@;'; put 'put ''Y1x1MDU1Ylx1MDU1ZVx1MDUzMVx1MDU2MVx1MDUzMlx1MDU2Mlx1MDUzM1x1MDU2M1x1MDUzNFx1MDU2NFx1MDUzNVx1MDU2NVx1MDUzNlx1MDU2Nlx1MDUzN1x1MDU2N1x1MDUzOFx1MDU2OFx1MDUzOVx1MDU2OVx1MDUzYVx1MDU2YVx1MDUzYlx1MDU2Ylx1MDUzY1x1MDU2Y1x1MDUzZFx1''@;'; put 'put ''MDU2ZFx1MDUzZVx1MDU2ZVx1MDUzZlx1MDU2Zlx1MDU0MFx1MDU3MFx1MDU0MVx1MDU3MVx1MDU0Mlx1MDU3Mlx1MDU0M1x1MDU3M1x1MDU0NFx1MDU3NFx1MDU0NVx1MDU3NVx1MDU0Nlx1MDU3Nlx1MDU0N1x1MDU3N1x1MDU0OFx1MDU3OFx1MDU0OVx1MDU3OVx1MDU0YVx1MDU3YVx1MDU0''@;'; put 'put ''Ylx1MDU3Ylx1MDU0Y1x1MDU3Y1x1MDU0ZFx1MDU3ZFx1MDU0ZVx1MDU3ZVx1MDU0Zlx1MDU3Zlx1MDU1MFx1MDU4MFx1MDU1MVx1MDU4MVx1MDU1Mlx1MDU4Mlx1MDU1M1x1MDU4M1x1MDU1NFx1MDU4NFx1MDU1NVx1MDU4NVx1MDU1Nlx1MDU4Nlx1MDU1YVx1ZmZmZCJ9LHJrMTA0ODp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0OWFcdTA0YmFcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZm''@;'; put 'put ''ZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0OWJcdTA0YmJcdTA0NWZceGEwXHUwNGIwXHUwNGIxXHUwNGQ4XHhhNFx1MDRlOFx4YTZceGE3XHUwNDAxXHhhOVx1MDQ5Mlx4YWJceGFjXHhhZFx4YWVcdTA0YWVceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDRlOVx4YjVceGI2XHhiN1x1MDQ1''@;'; put 'put ''MVx1MjExNlx1MDQ5M1x4YmJcdTA0ZDlcdTA0YTJcdTA0YTNcdTA0YWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0''@;'; put 'put ''MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2Zc''@;'; put 'put ''dTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx0Y3ZuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHhkYVx1MWVlNFx4MDNcdTFlZWFcdTFlZWNcdTFlZWVceDA3XGJc''@;'; put 'put ''dFxuXHZcZlxyXHgwZVx4MGZceDEwXHUxZWU4XHUxZWYwXHUxZWYyXHUxZWY2XHUxZWY4XHhkZFx1MWVmNFx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2Rl''@;'; put 'put ''ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGMwXHUxZWEyXHhjM1x4YzFcdTFlYTBcdTFlYjZcdTFlYWNceGM4XHUxZWJhXHUxZWJjXHhjOVx1MWViOFx1MWVjNlx4Y2NcdTFlYzhcdTAxMjhceGNkXHUxZWNhXHhkMlx1MWVjZVx4ZDVceGQzXHUxZWNjXHUxZWQ4XHUxZWRjXHUxZWRl''@;'; put 'put ''XHUxZWUwXHUxZWRhXHUxZWUyXHhkOVx1MWVlNlx1MDE2OFx4YTBcdTAxMDJceGMyXHhjYVx4ZDRcdTAxYTBcdTAxYWZcdTAxMTBcdTAxMDNceGUyXHhlYVx4ZjRcdTAxYTFcdTAxYjBcdTAxMTFcdTFlYjBcdTAzMDBcdTAzMDlcdTAzMDNcdTAzMDFcdTAzMjNceGUwXHUxZWEzXHhlM1x4ZTFc''@;'; put 'put ''dTFlYTFcdTFlYjJcdTFlYjFcdTFlYjNcdTFlYjVcdTFlYWZcdTFlYjRcdTFlYWVcdTFlYTZcdTFlYThcdTFlYWFcdTFlYTRcdTFlYzBcdTFlYjdcdTFlYTdcdTFlYTlcdTFlYWJcdTFlYTVcdTFlYWRceGU4XHUxZWMyXHUxZWJiXHUxZWJkXHhlOVx1MWViOVx1MWVjMVx1MWVjM1x1MWVjNVx1''@;'; put 'put ''MWViZlx1MWVjN1x4ZWNcdTFlYzlcdTFlYzRcdTFlYmVcdTFlZDJcdTAxMjlceGVkXHUxZWNiXHhmMlx1MWVkNFx1MWVjZlx4ZjVceGYzXHUxZWNkXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWQxXHUxZWQ5XHUxZWRkXHUxZWRmXHUxZWUxXHUxZWRiXHUxZWUzXHhmOVx1MWVkNlx1MWVlN1x1MDE2''@;'; put 'put ''OVx4ZmFcdTFlZTVcdTFlZWJcdTFlZWRcdTFlZWZcdTFlZTlcdTFlZjFcdTFlZjNcdTFlZjdcdTFlZjlceGZkXHUxZWY1XHUxZWQwIn0sZ2VvcmdpYW5hY2FkZW15Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2''@;'; put 'put ''XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhh''@;'; put 'put ''OVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEw''@;'; put 'put ''ZGNcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZWZcdTEwZjBcdTEwZjFcdTEwZjJcdTEwZjNcdTEwZjRcdTEwZjVcdTEwZjZceGU3XHhl''@;'; put 'put ''OFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sZ2VvcmdpYW5wczp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAy''@;'; put 'put ''MFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4''@;'; put 'put ''YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGYxXHUxMGQ3XHUxMGQ4XHUx''@;'; put 'put ''MGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGYyXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGYzXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGY0XHUxMGVmXHUxMGYwXHUxMGY1''@;'; put 'put ''XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxwdDE1NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OTZcdTA0OTJcdTA0ZWVcdTA0OTNcdTIwMWVc''@;'; put 'put ''dTIwMjZcdTA0YjZcdTA0YWVcdTA0YjJcdTA0YWZcdTA0YTBcdTA0ZTJcdTA0YTJcdTA0OWFcdTA0YmFcdTA0YjhcdTA0OTdcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA0YjNcdTA0YjdcdTA0YTFcdTA0ZTNcdTA0YTNcdTA0OWJcdTA0YmJcdTA0YjlceGEw''@;'; put 'put ''XHUwNDBlXHUwNDVlXHUwNDA4XHUwNGU4XHUwNDk4XHUwNGIwXHhhN1x1MDQwMVx4YTlcdTA0ZDhceGFiXHhhY1x1MDRlZlx4YWVcdTA0OWNceGIwXHUwNGIxXHUwNDA2XHUwNDU2XHUwNDk5XHUwNGU5XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0ZDlceGJiXHUwNDU4XHUwNGFhXHUwNGFiXHUw''@;'; put 'put ''NDlkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJh''@;'; put 'put ''XHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUw''@;'; put 'put ''NDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdmlzY2lpOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx1MWViMlx4MDNceDA0XHUxZWI0XHUxZWFhXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x1MWVm''@;'; put 'put ''Nlx4MTVceDE2XHgxN1x4MThcdTFlZjhceDFhXHgxYlx4MWNceDFkXHUxZWY0XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUxZWEwXHUxZWFlXHUx''@;'; put 'put ''ZWIwXHUxZWI2XHUxZWE0XHUxZWE2XHUxZWE4XHUxZWFjXHUxZWJjXHUxZWI4XHUxZWJlXHUxZWMwXHUxZWMyXHUxZWM0XHUxZWM2XHUxZWQwXHUxZWQyXHUxZWQ0XHUxZWQ2XHUxZWQ4XHUxZWUyXHUxZWRhXHUxZWRjXHUxZWRlXHUxZWNhXHUxZWNlXHUxZWNjXHUxZWM4XHUxZWU2XHUwMTY4''@;'; put 'put ''XHUxZWU0XHUxZWYyXHhkNVx1MWVhZlx1MWViMVx1MWViN1x1MWVhNVx1MWVhN1x1MWVhOVx1MWVhZFx1MWViZFx1MWViOVx1MWViZlx1MWVjMVx1MWVjM1x1MWVjNVx1MWVjN1x1MWVkMVx1MWVkM1x1MWVkNVx1MWVkN1x1MWVlMFx1MDFhMFx1MWVkOVx1MWVkZFx1MWVkZlx1MWVjYlx1MWVm''@;'; put 'put ''MFx1MWVlOFx1MWVlYVx1MWVlY1x1MDFhMVx1MWVkYlx1MDFhZlx4YzBceGMxXHhjMlx4YzNcdTFlYTJcdTAxMDJcdTFlYjNcdTFlYjVceGM4XHhjOVx4Y2FcdTFlYmFceGNjXHhjZFx1MDEyOFx1MWVmM1x1MDExMFx1MWVlOVx4ZDJceGQzXHhkNFx1MWVhMVx1MWVmN1x1MWVlYlx1MWVlZFx4''@;'; put 'put ''ZDlceGRhXHUxZWY5XHUxZWY1XHhkZFx1MWVlMVx1MDFiMFx4ZTBceGUxXHhlMlx4ZTNcdTFlYTNcdTAxMDNcdTFlZWZcdTFlYWJceGU4XHhlOVx4ZWFcdTFlYmJceGVjXHhlZFx1MDEyOVx1MWVjOVx1MDExMVx1MWVmMVx4ZjJceGYzXHhmNFx4ZjVcdTFlY2ZcdTFlY2RcdTFlZTVceGY5XHhm''@;'; put 'put ''YVx1MDE2OVx1MWVlN1x4ZmRcdTFlZTNcdTFlZWUifSxpc282NDZjbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNc''@;'; put 'put ''eDFkXHgxZVx4MWYgIVwiI1x4YTUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saXNvNjQ2anA6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx''@;'; put 'put ''NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1x4YTVdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saHByb21hbjg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4''@;'; put 'put ''XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhjMFx4YzJceGM4XHhjYVx4Y2JceGNlXHhjZlx4YjRcdTAyY2JcdTAyYzZceGE4XHUwMmRjXHhkOVx4ZGJcdTIwYTRc''@;'; put 'put ''eGFmXHhkZFx4ZmRceGIwXHhjN1x4ZTdceGQxXHhmMVx4YTFceGJmXHhhNFx4YTNceGE1XHhhN1x1MDE5Mlx4YTJceGUyXHhlYVx4ZjRceGZiXHhlMVx4ZTlceGYzXHhmYVx4ZTBceGU4XHhmMlx4ZjlceGU0XHhlYlx4ZjZceGZjXHhjNVx4ZWVceGQ4XHhjNlx4ZTVceGVkXHhmOFx4ZTZceGM0''@;'; put 'put ''XHhlY1x4ZDZceGRjXHhjOVx4ZWZceGRmXHhkNFx4YzFceGMzXHhlM1x4ZDBceGYwXHhjZFx4Y2NceGQzXHhkMlx4ZDVceGY1XHUwMTYwXHUwMTYxXHhkYVx1MDE3OFx4ZmZceGRlXHhmZVx4YjdceGI1XHhiNlx4YmVcdTIwMTRceGJjXHhiZFx4YWFceGJhXHhhYlx1MjVhMFx4YmJceGIxXHVm''@;'; put 'put ''ZmZkIn0sbWFjaW50b3NoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZj''@;'; put 'put ''XHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhh''@;'; put 'put ''Y1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4''@;'; put 'put ''YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LGFzY2lpOnt0eXBlOiJf''@;'; put 'put ''c2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LHRpczYyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThc''@;'; put 'put ''dTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBl''@;'; put 'put ''MzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZc''@;'; put 'put ''dTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifX19LDc2MjM6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17MTAwMjk6Im1hY2NlbnRldXJvIixtYWNjZW50ZXVy''@;'; put 'put ''bzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4''@;'; put 'put ''ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUw''@;'; put 'put ''MTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNh''@;'; put 'put ''XHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBc''@;'; put 'put ''dTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyJ9LDgwODoiY3A4MDgiLGlibTgwODoiY3A4MDgiLGNwODA4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQx''@;'; put 'put ''N1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1''@;'; put 'put ''MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1''@;'; put 'put ''Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1''@;'; put 'put ''MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1''@;'; put 'put ''N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHUyMGFjXHUyNWEwXHhhMCJ9LG1pazp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0''@;'; put 'put ''MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0Mzhc''@;'; put 'put ''dTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1''@;'; put 'put ''MDBcdTI1M2NcdTI1NjNcdTI1NTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1MTBcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTIxMTZceGE3XHUyNTU3XHUyNTVkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUw''@;'; put 'put ''M2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1''@;'; put 'put ''MjVhMFx4YTAifSxjcDcyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ZTlceGUyXHg4NFx4ZTBceDg2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHg4ZFx4OGVceDhmXHg5MFx1MDY1MVx1MDY1Mlx4ZjRceGE0XHUwNjQwXHhmYlx4ZjlcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRc''@;'; put 'put ''eGEzXHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1''@;'; put 'put ''NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlc''@;'; put 'put ''dTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDFceGI1XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRh''@;'; put 'put ''XHUyMjYxXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGFzY2lpOGJpdDoiYXNjaWkiLHVzYXNjaWk6ImFzY2lpIixhbnNpeDM0OiJhc2NpaSIsYW5zaXgzNDE5Njg6ImFzY2lpIixhbnNp''@;'; put 'put ''eDM0MTk4NjoiYXNjaWkiLGNzYXNjaWk6ImFzY2lpIixjcDM2NzoiYXNjaWkiLGlibTM2NzoiYXNjaWkiLGlzb2lyNjoiYXNjaWkiLGlzbzY0NnVzOiJhc2NpaSIsaXNvNjQ2aXJ2OiJhc2NpaSIsdXM6ImFzY2lpIixsYXRpbjE6Imlzbzg4NTkxIixsYXRpbjI6Imlzbzg4NTkyIixsYXRpbjM6''@;'; put 'put ''Imlzbzg4NTkzIixsYXRpbjQ6Imlzbzg4NTk0IixsYXRpbjU6Imlzbzg4NTk5IixsYXRpbjY6Imlzbzg4NTkxMCIsbGF0aW43OiJpc284ODU5MTMiLGxhdGluODoiaXNvODg1OTE0IixsYXRpbjk6Imlzbzg4NTkxNSIsbGF0aW4xMDoiaXNvODg1OTE2Iixjc2lzb2xhdGluMToiaXNvODg1OTEi''@;'; put 'put ''LGNzaXNvbGF0aW4yOiJpc284ODU5MiIsY3Npc29sYXRpbjM6Imlzbzg4NTkzIixjc2lzb2xhdGluNDoiaXNvODg1OTQiLGNzaXNvbGF0aW5jeXJpbGxpYzoiaXNvODg1OTUiLGNzaXNvbGF0aW5hcmFiaWM6Imlzbzg4NTk2Iixjc2lzb2xhdGluZ3JlZWs6Imlzbzg4NTk3Iixjc2lzb2xhdGlu''@;'; put 'put ''aGVicmV3OiJpc284ODU5OCIsY3Npc29sYXRpbjU6Imlzbzg4NTk5Iixjc2lzb2xhdGluNjoiaXNvODg1OTEwIixsMToiaXNvODg1OTEiLGwyOiJpc284ODU5MiIsbDM6Imlzbzg4NTkzIixsNDoiaXNvODg1OTQiLGw1OiJpc284ODU5OSIsbDY6Imlzbzg4NTkxMCIsbDc6Imlzbzg4NTkxMyIs''@;'; put 'put ''bDg6Imlzbzg4NTkxNCIsbDk6Imlzbzg4NTkxNSIsbDEwOiJpc284ODU5MTYiLGlzb2lyMTQ6ImlzbzY0NmpwIixpc29pcjU3OiJpc282NDZjbiIsaXNvaXIxMDA6Imlzbzg4NTkxIixpc29pcjEwMToiaXNvODg1OTIiLGlzb2lyMTA5OiJpc284ODU5MyIsaXNvaXIxMTA6Imlzbzg4NTk0Iixp''@;'; put 'put ''c29pcjE0NDoiaXNvODg1OTUiLGlzb2lyMTI3OiJpc284ODU5NiIsaXNvaXIxMjY6Imlzbzg4NTk3Iixpc29pcjEzODoiaXNvODg1OTgiLGlzb2lyMTQ4OiJpc284ODU5OSIsaXNvaXIxNTc6Imlzbzg4NTkxMCIsaXNvaXIxNjY6InRpczYyMCIsaXNvaXIxNzk6Imlzbzg4NTkxMyIsaXNvaXIx''@;'; put 'put ''OTk6Imlzbzg4NTkxNCIsaXNvaXIyMDM6Imlzbzg4NTkxNSIsaXNvaXIyMjY6Imlzbzg4NTkxNiIsY3A4MTk6Imlzbzg4NTkxIixpYm04MTk6Imlzbzg4NTkxIixjeXJpbGxpYzoiaXNvODg1OTUiLGFyYWJpYzoiaXNvODg1OTYiLGFyYWJpYzg6Imlzbzg4NTk2IixlY21hMTE0OiJpc284ODU5''@;'; put 'put ''NiIsYXNtbzcwODoiaXNvODg1OTYiLGdyZWVrOiJpc284ODU5NyIsZ3JlZWs4OiJpc284ODU5NyIsZWNtYTExODoiaXNvODg1OTciLGVsb3Q5Mjg6Imlzbzg4NTk3IixoZWJyZXc6Imlzbzg4NTk4IixoZWJyZXc4OiJpc284ODU5OCIsdHVya2lzaDoiaXNvODg1OTkiLHR1cmtpc2g4OiJpc284''@;'; put 'put ''ODU5OSIsdGhhaToiaXNvODg1OTExIix0aGFpODoiaXNvODg1OTExIixjZWx0aWM6Imlzbzg4NTkxNCIsY2VsdGljODoiaXNvODg1OTE0Iixpc29jZWx0aWM6Imlzbzg4NTkxNCIsdGlzNjIwMDoidGlzNjIwIix0aXM2MjAyNTI5MToidGlzNjIwIix0aXM2MjAyNTMzMDoidGlzNjIwIiwxZTQ6''@;'; put 'put ''Im1hY3JvbWFuIiwxMDAwNjoibWFjZ3JlZWsiLDEwMDA3OiJtYWNjeXJpbGxpYyIsMTAwNzk6Im1hY2ljZWxhbmQiLDEwMDgxOiJtYWN0dXJraXNoIixjc3BjOGNvZGVwYWdlNDM3OiJjcDQzNyIsY3NwYzc3NWJhbHRpYzoiY3A3NzUiLGNzcGM4NTBtdWx0aWxpbmd1YWw6ImNwODUwIixjc3Bj''@;'; put 'put ''cDg1MjoiY3A4NTIiLGNzcGM4NjJsYXRpbmhlYnJldzoiY3A4NjIiLGNwZ3I6ImNwODY5Iixtc2VlOiJjcDEyNTAiLG1zY3lybDoiY3AxMjUxIixtc2Fuc2k6ImNwMTI1MiIsbXNncmVlazoiY3AxMjUzIixtc3R1cms6ImNwMTI1NCIsbXNoZWJyOiJjcDEyNTUiLG1zYXJhYjoiY3AxMjU2Iix3''@;'; put 'put ''aW5iYWx0cmltOiJjcDEyNTciLGNwMjA4NjY6ImtvaThyIiwyMDg2Njoia29pOHIiLGlibTg3ODoia29pOHIiLGNza29pOHI6ImtvaThyIixjcDIxODY2OiJrb2k4dSIsMjE4NjY6ImtvaTh1IixpYm0xMTY4OiJrb2k4dSIsc3RyazEwNDgyMDAyOiJyazEwNDgiLHRjdm41NzEyOiJ0Y3ZuIix0''@;'; put 'put ''Y3ZuNTcxMjE6InRjdm4iLGdiMTk4ODgwOiJpc282NDZjbiIsY246ImlzbzY0NmNuIixjc2lzbzE0amlzYzYyMjBybzoiaXNvNjQ2anAiLGppc2M2MjIwMTk2OXJvOiJpc282NDZqcCIsanA6ImlzbzY0NmpwIixjc2hwcm9tYW44OiJocHJvbWFuOCIscjg6Imhwcm9tYW44Iixyb21hbjg6Imhw''@;'; put 'put ''cm9tYW44Iix4cm9tYW44OiJocHJvbWFuOCIsaWJtMTA1MToiaHByb21hbjgiLG1hYzoibWFjaW50b3NoIixjc21hY2ludG9zaDoibWFjaW50b3NoIn19LDcxNzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gZygp''@;'; put 'put ''e31mdW5jdGlvbiBCKCl7dGhpcy5vdmVyZmxvd0J5dGU9LTF9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuaWNvbnY9Tn1mdW5jdGlvbiBQKHosTil7dm9pZCAwPT09KHo9enx8e30pLmFkZEJPTSYmKHouYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9Ti5pY29udi5nZXRFbmNvZGVyKCJ1dGYtMTZsZSIs''@;'; put 'put ''eil9ZnVuY3Rpb24gRih6LE4pe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPXp8fHt9LHRoaXMuaWNvbnY9Ti5pY29udn1mdW5jdGlvbiBPKHosTil7dmFyIEw9Tnx8InV0Zi0xNmxlIjtpZih6Lmxlbmd0''@;'; put 'put ''aD49MilpZigyNTQ9PXpbMF0mJjI1NT09elsxXSlMPSJ1dGYtMTZiZSI7ZWxzZSBpZigyNTU9PXpbMF0mJjI1ND09elsxXSlMPSJ1dGYtMTZsZSI7ZWxzZXtmb3IodmFyIEs9MCxVPTAsVz1NYXRoLm1pbih6Lmxlbmd0aC16Lmxlbmd0aCUyLDY0KSxZPTA7WTxXO1krPTIpMD09PXpbWV0mJjAh''@;'; put 'put ''PT16W1krMV0mJlUrKywwIT09eltZXSYmMD09PXpbWSsxXSYmSysrO1U+Sz9MPSJ1dGYtMTZiZSI6VTxLJiYoTD0idXRmLTE2bGUiKX1yZXR1cm4gTH1YLnV0ZjE2YmU9XyxfLnByb3RvdHlwZS5lbmNvZGVyPWcsXy5wcm90b3R5cGUuZGVjb2Rlcj1CLF8ucHJvdG90eXBlLmJvbUF3YXJlPSEw''@;'; put 'put ''LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmZyb20oeiwidWNzMiIpLEw9MDtMPE4ubGVuZ3RoO0wrPTIpe3ZhciBLPU5bTF07TltMXT1OW0wrMV0sTltMKzFdPUt9cmV0dXJuIE59LGcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sQi5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGU9ZnVuY3Rpb24oeil7aWYoMD09ei5sZW5ndGgpcmV0dXJuIiI7dmFyIE49SS5hbGxvYyh6Lmxlbmd0aCsxKSxMPTAsSz0wO2ZvcigtMSE9PXRoaXMub3ZlcmZsb3dCeXRlJiYoTlswXT16WzBdLE5bMV09dGhpcy5vdmVyZmxvd0J5dGUsTD0xLEs9Mik7TDx6Lmxlbmd0aC0xO0wrPTIsSys9''@;'; put 'put ''MilOW0tdPXpbTCsxXSxOW0srMV09eltMXTtyZXR1cm4gdGhpcy5vdmVyZmxvd0J5dGU9TD09ei5sZW5ndGgtMT96W3oubGVuZ3RoLTFdOi0xLE4uc2xpY2UoMCxLKS50b1N0cmluZygidWNzMiIpfSxCLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFgudXRmMTY9dyx3LnByb3RvdHlwZS5l''@;'; put 'put ''bmNvZGVyPVAsdy5wcm90b3R5cGUuZGVjb2Rlcj1GLFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoeil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEYucHJvdG90eXBlLndyaXRlPWZ1''@;'; put 'put ''bmN0aW9uKHope2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goeiksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPXoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDE2KXJldHVybiIiO3ZhciBOPU8oej1JLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5v''@;'; put 'put ''cHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihOLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZSh6KX0sRi5wcm90b3R5cGUu''@;'; put 'put ''ZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIHo9SS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLE49Tyh6LHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTix0aGlzLm9wdGlvbnMpO3ZhciBMPXRoaXMu''@;'; put 'put ''ZGVjb2Rlci53cml0ZSh6KSxLPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gSz9MK0s6TH1yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sMzUwODk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8oeixOKXt0aGlzLmljb252PU4sdGhp''@;'; put 'put ''cy5ib21Bd2FyZT0hMCx0aGlzLmlzTEU9ei5pc0xFfWZ1bmN0aW9uIGcoeixOKXt0aGlzLmlzTEU9Ti5pc0xFLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wfWZ1bmN0aW9uIEIoeixOKXt0aGlzLmlzTEU9Ti5pc0xFLHRoaXMuYmFkQ2hhcj1OLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApLHRoaXMub3ZlcmZsb3c9bnVsbH1mdW5jdGlvbiB3KHosTil7dGhpcy5pY29udj1OfWZ1bmN0aW9uIFAoeixOKXt2b2lkIDA9PT0oej16fHx7fSkuYWRkQk9NJiYoei5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1OLmljb252LmdldEVuY29kZXIoei5kZWZhdWx0RW5jb2Rpbmd8fCJ1''@;'; put 'put ''dGYtMzJsZSIseil9ZnVuY3Rpb24gRih6LE4pe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPXp8fHt9LHRoaXMuaWNvbnY9Ti5pY29udn1mdW5jdGlvbiBPKHosTil7dmFyIEw9Tnx8InV0Zi0zMmxlIjtp''@;'; put 'put ''Zih6Lmxlbmd0aD49NClpZig2NTI3OT09PXoucmVhZFVJbnQzMkJFKDApKUw9InV0Zi0zMmJlIjtlbHNlIGlmKDY1Mjc5PT09ei5yZWFkVUludDMyTEUoMCkpTD0idXRmLTMybGUiO2Vsc2V7Zm9yKHZhciBLPTAsVT0wLFc9MCxZPTAscT1NYXRoLm1pbih6Lmxlbmd0aC16Lmxlbmd0aCU0LDEy''@;'; put 'put ''OCksZWU9MDtlZTxxO2VlKz00KXt2YXIgSj16W2VlXSxuZT16W2VlKzFdLGllPXpbZWUrMl0sbGU9eltlZSszXTsoMCE9PUp8fG5lPjE2KSYmKytVLCgwIT09bGV8fGllPjE2KSYmKytLLDA9PT1KJiYwPT09bmUmJjA9PT1pZSYmMCE9PWxlJiZZKyssMCE9PUomJjA9PT1uZSYmMD09PWllJiYw''@;'; put 'put ''PT09bGUmJlcrK31VPEs/TD0idXRmLTMyYmUiOks8VSYmKEw9InV0Zi0zMmxlIiksWT5XP0w9InV0Zi0zMmJlIjpZPFcmJihMPSJ1dGYtMzJsZSIpfXJldHVybiBMfVguX3V0ZjMyPV8sWC51dGYzMmxlPXt0eXBlOiJfdXRmMzIiLGlzTEU6ITB9LFgudXRmMzJiZT17dHlwZToiX3V0ZjMyIixp''@;'; put 'put ''c0xFOiExfSxYLnVjczRsZT0idXRmMzJsZSIsWC51Y3M0YmU9InV0ZjMyYmUiLF8ucHJvdG90eXBlLmVuY29kZXI9ZyxfLnByb3RvdHlwZS5kZWNvZGVyPUIsZy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPUkuZnJvbSh6LCJ1Y3MyIiksTD1JLmFsbG9jKDIqTi5sZW5n''@;'; put 'put ''dGgpLEs9dGhpcy5pc0xFP0wud3JpdGVVSW50MzJMRTpMLndyaXRlVUludDMyQkUsVT0wLFc9MDtXPE4ubGVuZ3RoO1crPTIpe3ZhciBZPU4ucmVhZFVJbnQxNkxFKFcpLHE9NTUyOTY8PVkmJlk8NTYzMjA7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXtpZighcSYmNTYzMjA8PVkmJlk8NTczNDQp''@;'; put 'put ''e0suY2FsbChMLDY1NTM2Kyh0aGlzLmhpZ2hTdXJyb2dhdGUtNTUyOTY8PDEwfFktNTYzMjApLFUpLFUrPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTA7Y29udGludWV9Sy5jYWxsKEwsdGhpcy5oaWdoU3Vycm9nYXRlLFUpLFUrPTR9cT90aGlzLmhpZ2hTdXJyb2dhdGU9WTooSy5jYWxsKEwsWSxV''@;'; put 'put ''KSxVKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wKX1yZXR1cm4gVTxMLmxlbmd0aCYmKEw9TC5zbGljZSgwLFUpKSxMfSxnLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe3ZhciB6PUkuYWxsb2MoNCk7cmV0dXJuIHRoaXMuaXNMRT96LndyaXRlVUludDMy''@;'; put 'put ''TEUodGhpcy5oaWdoU3Vycm9nYXRlLDApOnoud3JpdGVVSW50MzJCRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCksdGhpcy5oaWdoU3Vycm9nYXRlPTAsen19LEIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKDA9PT16Lmxlbmd0aClyZXR1cm4iIjt0aGlzLm92ZXJmbG93JiYoej1JLmNv''@;'; put 'put ''bmNhdChbdGhpcy5vdmVyZmxvdyx6XSkpO3ZhciBOPXoubGVuZ3RoLXoubGVuZ3RoJTQ7ei5sZW5ndGghPT1OPyh0aGlzLm92ZXJmbG93PXouc2xpY2UoTiksej16LnNsaWNlKDAsTikpOnRoaXMub3ZlcmZsb3c9bnVsbDtmb3IodmFyIEw9SS5hbGxvYyhOKSxLPTAsVT0wO1U8TjtVKz00KXt2''@;'; put 'put ''YXIgVz10aGlzLmlzTEU/ei5yZWFkVUludDMyTEUoVSk6ei5yZWFkVUludDMyQkUoVSk7aWYoVzw2NTUzNilMLndyaXRlVUludDE2TEUoVyxLKSxLKz0yO2Vsc2UgaWYoVz4xMTE0MTExKUwud3JpdGVVSW50MTZMRSh0aGlzLmJhZENoYXIsSyksSys9MjtlbHNle3ZhciBxPTU2MzIwKygxMDIz''@;'; put 'put ''JihXLT02NTUzNikpO0wud3JpdGVVSW50MTZMRSg1NTI5NnxXPj4xMCxLKSxMLndyaXRlVUludDE2TEUocSxLKz0yKSxLKz0yfX1yZXR1cm4gTC5zbGljZSgwLEspLnRvU3RyaW5nKCJ1Y3MyIil9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMub3ZlcmZsb3c9bnVsbH0sWC51dGYz''@;'; put 'put ''Mj13LFgudWNzND13LHcucHJvdG90eXBlLmVuY29kZXI9UCx3LnByb3RvdHlwZS5kZWNvZGVyPUYsUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZSh6KX0sUC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5l''@;'; put 'put ''bmQoKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaCh6KSx0aGlzLmluaXRpYWxCeXRlc0xlbis9ei5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MzIpcmV0dXJuIiI7dmFyIEw9TyhJLmNvbmNhdCh0''@;'; put 'put ''aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihMLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rl''@;'; put 'put ''ci53cml0ZSh6KX0sRi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIHo9SS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLE49Tyh6LHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTix0''@;'; put 'put ''aGlzLm9wdGlvbnMpO3ZhciBMPXRoaXMuZGVjb2Rlci53cml0ZSh6KSxLPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gSz9MK0s6TH1yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTc0NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24g''@;'; put 'put ''XyhxLGVlKXt0aGlzLmljb252PWVlfVgudXRmNz1fLFgudW5pY29kZTExdXRmNz0idXRmNyIsXy5wcm90b3R5cGUuZW5jb2Rlcj1CLF8ucHJvdG90eXBlLmRlY29kZXI9dyxfLnByb3RvdHlwZS5ib21Bd2FyZT0hMDt2YXIgZz0vW15BLVphLXowLTknXChcKSwtXC5cLzpcPyBcblxyXHRdKy9n''@;'; put 'put ''O2Z1bmN0aW9uIEIocSxlZSl7dGhpcy5pY29udj1lZS5pY29udn1mdW5jdGlvbiB3KHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIifUIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe3JldHVybiBJLmZyb20ocS5yZXBsYWNl''@;'; put 'put ''KGcsZnVuY3Rpb24oZWUpe3JldHVybiIrIisoIisiPT09ZWU/IiI6dGhpcy5pY29udi5lbmNvZGUoZWUsInV0ZjE2LWJlIikudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoLz0rJC8sIiIpKSsiLSJ9LmJpbmQodGhpcykpKX0sQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fTtmb3IodmFy''@;'; put 'put ''IFA9L1tBLVphLXowLTlcLytdLyxGPVtdLE89MDtPPDI1NjtPKyspRltPXT1QLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShPKSk7dmFyIE49NDU7ZnVuY3Rpb24gSyhxLGVlKXt0aGlzLmljb252PWVlfWZ1bmN0aW9uIFUocSxlZSl7dGhpcy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0''@;'; put 'put ''PSExLHRoaXMuYmFzZTY0QWNjdW09SS5hbGxvYyg2KSx0aGlzLmJhc2U2NEFjY3VtSWR4PTB9ZnVuY3Rpb24gVyhxLGVlKXt0aGlzLmljb252PWVlLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn13LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtmb3IodmFy''@;'; put 'put ''IGVlPSIiLEo9MCxuZT10aGlzLmluQmFzZTY0LGllPXRoaXMuYmFzZTY0QWNjdW0sbGU9MDtsZTxxLmxlbmd0aDtsZSsrKWlmKG5lKXtpZighRltxW2xlXV0pe2lmKGxlPT1KJiZxW2xlXT09TillZSs9IisiO2Vsc2V7dmFyIG1lPWllK3Euc2xpY2UoSixsZSkudG9TdHJpbmcoKTtlZSs9dGhp''@;'; put 'put ''cy5pY29udi5kZWNvZGUoSS5mcm9tKG1lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1xW2xlXSE9TiYmbGUtLSxKPWxlKzEsbmU9ITEsaWU9IiJ9fWVsc2UgNDM9PXFbbGVdJiYoZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoSixsZSksImFzY2lpIiksSj1sZSsxLG5lPSEwKTtpZihuZSl7''@;'; put 'put ''dmFyIF9lPShtZT1pZStxLnNsaWNlKEopLnRvU3RyaW5nKCkpLmxlbmd0aC1tZS5sZW5ndGglODtpZT1tZS5zbGljZShfZSksbWU9bWUuc2xpY2UoMCxfZSksZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBlZSs9dGhpcy5pY29udi5k''@;'; put 'put ''ZWNvZGUocS5zbGljZShKKSwiYXNjaWkiKTtyZXR1cm4gdGhpcy5pbkJhc2U2ND1uZSx0aGlzLmJhc2U2NEFjY3VtPWllLGVlfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgcT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKHE9dGhp''@;'; put 'put ''cy5pY29udi5kZWNvZGUoSS5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIscX0sWC51dGY3aW1hcD1LLEsucHJvdG90eXBlLmVuY29kZXI9VSxLLnByb3RvdHlwZS5kZWNvZGVyPVcsSy5wcm90''@;'; put 'put ''b3R5cGUuYm9tQXdhcmU9ITAsVS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT10aGlzLmluQmFzZTY0LEo9dGhpcy5iYXNlNjRBY2N1bSxuZT10aGlzLmJhc2U2NEFjY3VtSWR4LGllPUkuYWxsb2MoNSpxLmxlbmd0aCsxMCksbGU9MCxtZT0wO21lPHEubGVuZ3RoO21l''@;'; put 'put ''Kyspe3ZhciBfZT1xLmNoYXJDb2RlQXQobWUpOzMyPD1fZSYmX2U8PTEyNj8oZWUmJihuZT4wJiYobGUrPWllLndyaXRlKEouc2xpY2UoMCxuZSkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxsZSksbmU9MCksaWVbbGUrK109TixlZT0h''@;'; put 'put ''MSksZWV8fChpZVtsZSsrXT1fZSwzOD09PV9lJiYoaWVbbGUrK109TikpKTooZWV8fChpZVtsZSsrXT0zOCxlZT0hMCksZWUmJihKW25lKytdPV9lPj44LEpbbmUrK109MjU1Jl9lLG5lPT1KLmxlbmd0aCYmKGxlKz1pZS53cml0ZShKLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9n''@;'; put 'put ''LCIsIiksbGUpLG5lPTApKSl9cmV0dXJuIHRoaXMuaW5CYXNlNjQ9ZWUsdGhpcy5iYXNlNjRBY2N1bUlkeD1uZSxpZS5zbGljZSgwLGxlKX0sVS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHE9SS5hbGxvYygxMCksZWU9MDtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmKHRoaXMuYmFzZTY0''@;'; put 'put ''QWNjdW1JZHg+MCYmKGVlKz1xLndyaXRlKHRoaXMuYmFzZTY0QWNjdW0uc2xpY2UoMCx0aGlzLmJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLnJlcGxhY2UoLz0rJC8sIiIpLGVlKSx0aGlzLmJhc2U2NEFjY3VtSWR4PTApLHFbZWUrK109Tix0''@;'; put 'put ''aGlzLmluQmFzZTY0PSExKSxxLnNsaWNlKDAsZWUpfTt2YXIgWT1GLnNsaWNlKCk7WVs0NF09ITAsVy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT0iIixKPTAsbmU9dGhpcy5pbkJhc2U2NCxpZT10aGlzLmJhc2U2NEFjY3VtLGxlPTA7bGU8cS5sZW5ndGg7bGUrKylp''@;'; put 'put ''ZihuZSl7aWYoIVlbcVtsZV1dKXtpZihsZT09SiYmcVtsZV09PU4pZWUrPSImIjtlbHNle3ZhciBtZT1pZStxLnNsaWNlKEosbGUpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIik7ZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9cVtsZV0h''@;'; put 'put ''PU4mJmxlLS0sSj1sZSsxLG5lPSExLGllPSIifX1lbHNlIDM4PT1xW2xlXSYmKGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEosbGUpLCJhc2NpaSIpLEo9bGUrMSxuZT0hMCk7aWYobmUpe3ZhciBfZT0obWU9aWUrcS5zbGljZShKKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIp''@;'; put 'put ''KS5sZW5ndGgtbWUubGVuZ3RoJTg7aWU9bWUuc2xpY2UoX2UpLG1lPW1lLnNsaWNlKDAsX2UpLGVlKz10aGlzLmljb252LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoSiksImFzY2lpIik7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW5CYXNlNjQ9bmUsdGhpcy5iYXNlNjRBY2N1bT1pZSxlZX0sVy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHE9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihxPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbSh0aGlzLmJhc2U2NEFj''@;'; put 'put ''Y3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHF9fSwyOTQyMjoodWUsWCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEIpe3RoaXMuZW5jb2Rlcj1nLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIF8oZyxCKXt0aGlzLmRl''@;'; put 'put ''Y29kZXI9Zyx0aGlzLnBhc3M9ITEsdGhpcy5vcHRpb25zPUJ8fHt9fVguUHJlcGVuZEJPTT1JLEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmFkZEJPTSYmKGc9Ilx1ZmVmZiIrZyx0aGlzLmFkZEJPTT0hMSksdGhpcy5lbmNvZGVyLndyaXRlKGcpfSxJLnByb3Rv''@;'; put 'put ''dHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxYLlN0cmlwQk9NPV8sXy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZyl7dmFyIEI9dGhpcy5kZWNvZGVyLndyaXRlKGcpO3JldHVybiB0aGlzLnBhc3N8fCFCfHwoIlx1ZmVmZiI9PT1CWzBdJiYoQj1CLnNs''@;'; put 'put ''aWNlKDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlzLnBhc3M9ITApLEJ9LF8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw5NDI0ODoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXIsXz15KDI5NDIyKSxnPXVlLmV4cG9ydHM7Zy5lbmNvZGluZ3M9bnVsbCxnLmRlZmF1bHRDaGFyVW5pY29kZT0iXHVmZmZkIixnLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT0iPyIsZy5lbmNvZGU9ZnVuY3Rpb24oRixPLHope0Y9IiIrKEZ8''@;'; put 'put ''fCIiKTt2YXIgTj1nLmdldEVuY29kZXIoTyx6KSxMPU4ud3JpdGUoRiksSz1OLmVuZCgpO3JldHVybiBLJiZLLmxlbmd0aD4wP0kuY29uY2F0KFtMLEtdKTpMfSxnLmRlY29kZT1mdW5jdGlvbihGLE8seil7InN0cmluZyI9PXR5cGVvZiBGJiYoZy5za2lwRGVjb2RlV2FybmluZ3x8KGNvbnNv''@;'; put 'put ''bGUuZXJyb3IoIkljb252LWxpdGUgd2FybmluZzogZGVjb2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmciKSxnLnNraXBEZWNvZGVXYXJu''@;'; put 'put ''aW5nPSEwKSxGPUkuZnJvbSgiIisoRnx8IiIpLCJiaW5hcnkiKSk7dmFyIE49Zy5nZXREZWNvZGVyKE8seiksTD1OLndyaXRlKEYpLEs9Ti5lbmQoKTtyZXR1cm4gSz9MK0s6TH0sZy5lbmNvZGluZ0V4aXN0cz1mdW5jdGlvbihGKXt0cnl7cmV0dXJuIGcuZ2V0Q29kZWMoRiksITB9Y2F0Y2h7''@;'; put 'put ''cmV0dXJuITF9fSxnLnRvRW5jb2Rpbmc9Zy5lbmNvZGUsZy5mcm9tRW5jb2Rpbmc9Zy5kZWNvZGUsZy5fY29kZWNEYXRhQ2FjaGU9e30sZy5nZXRDb2RlYz1mdW5jdGlvbihGKXtnLmVuY29kaW5nc3x8KGcuZW5jb2RpbmdzPXkoNzI4OTMpKTtmb3IodmFyIE89Zy5fY2Fub25pY2FsaXplRW5j''@;'; put 'put ''b2RpbmcoRiksej17fTs7KXt2YXIgTj1nLl9jb2RlY0RhdGFDYWNoZVtPXTtpZihOKXJldHVybiBOO3ZhciBMPWcuZW5jb2RpbmdzW09dO3N3aXRjaCh0eXBlb2YgTCl7Y2FzZSJzdHJpbmciOk89TDticmVhaztjYXNlIm9iamVjdCI6Zm9yKHZhciBLIGluIEwpeltLXT1MW0tdO3ouZW5jb2Rp''@;'; put 'put ''bmdOYW1lfHwoei5lbmNvZGluZ05hbWU9TyksTz1MLnR5cGU7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIHouZW5jb2RpbmdOYW1lfHwoei5lbmNvZGluZ05hbWU9TyksTj1uZXcgTCh6LGcpLGcuX2NvZGVjRGF0YUNhY2hlW3ouZW5jb2RpbmdOYW1lXT1OLE47ZGVmYXVsdDp0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAnIitGKyInIChzZWFyY2hlZCBhczogJyIrTysiJykiKX19fSxnLl9jYW5vbmljYWxpemVFbmNvZGluZz1mdW5jdGlvbihQKXtyZXR1cm4oIiIrUCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC86XGR7NH0kfFteMC05YS16XS9nLCIi''@;'; put 'put ''KX0sZy5nZXRFbmNvZGVyPWZ1bmN0aW9uKEYsTyl7dmFyIHo9Zy5nZXRDb2RlYyhGKSxOPW5ldyB6LmVuY29kZXIoTyx6KTtyZXR1cm4gei5ib21Bd2FyZSYmTyYmTy5hZGRCT00mJihOPW5ldyBfLlByZXBlbmRCT00oTixPKSksTn0sZy5nZXREZWNvZGVyPWZ1bmN0aW9uKEYsTyl7dmFyIHo9''@;'; put 'put ''Zy5nZXRDb2RlYyhGKSxOPW5ldyB6LmRlY29kZXIoTyx6KTtyZXR1cm4gei5ib21Bd2FyZSYmIShPJiYhMT09PU8uc3RyaXBCT00pJiYoTj1uZXcgXy5TdHJpcEJPTShOLE8pKSxOfTt2YXIgQj10eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MudmVyc2lvbnMmJnByb2Nlc3MudmVyc2lvbnMu''@;'; put 'put ''bm9kZTtpZihCKXt2YXIgdz1CLnNwbGl0KCIuIikubWFwKE51bWJlcik7KHdbMF0+MHx8d1sxXT49MTApJiZ5KDYxMDkzKShnKSx5KDE1NzkxKShnKX19LDIyMDIwOih1ZSxYKT0+e1gucmVhZD1mdW5jdGlvbih5LEksXyxnLEIpe3ZhciB3LFAsRj04KkItZy0xLE89KDE8PEYpLTEsej1PPj4x''@;'; put 'put ''LE49LTcsTD1fP0ItMTowLEs9Xz8tMToxLFU9eVtJK0xdO2ZvcihMKz1LLHc9VSYoMTw8LU4pLTEsVT4+PS1OLE4rPUY7Tj4wO3c9MjU2KncreVtJK0xdLEwrPUssTi09OCk7Zm9yKFA9dyYoMTw8LU4pLTEsdz4+PS1OLE4rPWc7Tj4wO1A9MjU2KlAreVtJK0xdLEwrPUssTi09OCk7aWYoMD09''@;'; put 'put ''PXcpdz0xLXo7ZWxzZXtpZih3PT09TylyZXR1cm4gUD9OYU46MS8wKihVPy0xOjEpO1ArPU1hdGgucG93KDIsZyksdy09en1yZXR1cm4oVT8tMToxKSpQKk1hdGgucG93KDIsdy1nKX0sWC53cml0ZT1mdW5jdGlvbih5LEksXyxnLEIsdyl7dmFyIFAsRixPLHo9OCp3LUItMSxOPSgxPDx6KS0x''@;'; put 'put ''LEw9Tj4+MSxLPTIzPT09Qj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsVT1nPzA6dy0xLFc9Zz8xOi0xLFk9STwwfHwwPT09SSYmMS9JPDA/MTowO2ZvcihJPU1hdGguYWJzKEkpLGlzTmFOKEkpfHxJPT09MS8wPyhGPWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3Io''@;'; put 'put ''TWF0aC5sb2coSSkvTWF0aC5MTjIpLEkqKE89TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sTyo9MiksKEkrPVArTD49MT9LL086SypNYXRoLnBvdygyLDEtTCkpKk8+PTImJihQKyssTy89MiksUCtMPj1OPyhGPTAsUD1OKTpQK0w+PTE/KEY9KEkqTy0xKSpNYXRoLnBvdygyLEIpLFArPUwpOihG''@;'; put 'put ''PUkqTWF0aC5wb3coMixMLTEpKk1hdGgucG93KDIsQiksUD0wKSk7Qj49ODt5W18rVV09MjU1JkYsVSs9VyxGLz0yNTYsQi09OCk7Zm9yKFA9UDw8QnxGLHorPUI7ej4wO3lbXytVXT0yNTUmUCxVKz1XLFAvPTI1Nix6LT04KTt5W18rVS1XXXw9MTI4Kll9fSw3MTk5Mzp1ZT0+e3VlLmV4cG9y''@;'; put 'put ''dHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oeSxJKXtJJiYoeS5zdXBlcl89SSx5LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6eSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MH19KSl9OmZ1bmN0aW9uKHksSSl7aWYoSSl7eS5zdXBlcl89STt2YXIgXz1mdW5jdGlvbigpe307Xy5wcm90b3R5cGU9SS5wcm90b3R5cGUseS5wcm90b3R5cGU9bmV3IF8seS5wcm90b3R5cGUuY29uc3RydWN0b3I9eX19fSwyMDA1Mzp1ZT0+e3ZhciBYPXt9LnRvU3RyaW5nO3VlLmV4cG9y''@;'; put 'put ''dHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oeSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09WC5jYWxsKHkpfX0sMzQ3MjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTk5MyksXz15KDEzNjg2KSxnPXkoMjcwNTQpLkJ1ZmZlcixCPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24g''@;'; put 'put ''dygpe18uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBQKEwsSyl7cmV0dXJuIEw8PEt8TD4+PjMyLUt9ZnVuY3Rpb24gRihMLEssVSxXLFkscSxlZSl7cmV0dXJu''@;'; put 'put ''IFAoTCsoSyZVfH5LJlcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24gTyhMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoSyZXfFUmflcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24geihMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoS15VXlcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24gTihM''@;'; put 'put ''LEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoVV4oS3x+VykpK1krcXwwLGVlKStLfDB9SSh3LF8pLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEw9QixLPTA7SzwxNjsrK0spTFtLXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkspO3ZhciBVPXRoaXMuX2EsVz10''@;'; put 'put ''aGlzLl9iLFk9dGhpcy5fYyxxPXRoaXMuX2Q7VT1GKFUsVyxZLHEsTFswXSwzNjE0MDkwMzYwLDcpLHE9RihxLFUsVyxZLExbMV0sMzkwNTQwMjcxMCwxMiksWT1GKFkscSxVLFcsTFsyXSw2MDYxMDU4MTksMTcpLFc9RihXLFkscSxVLExbM10sMzI1MDQ0MTk2NiwyMiksVT1GKFUsVyxZLHEs''@;'; put 'put ''TFs0XSw0MTE4NTQ4Mzk5LDcpLHE9RihxLFUsVyxZLExbNV0sMTIwMDA4MDQyNiwxMiksWT1GKFkscSxVLFcsTFs2XSwyODIxNzM1OTU1LDE3KSxXPUYoVyxZLHEsVSxMWzddLDQyNDkyNjEzMTMsMjIpLFU9RihVLFcsWSxxLExbOF0sMTc3MDAzNTQxNiw3KSxxPUYocSxVLFcsWSxMWzldLDIz''@;'; put 'put ''MzY1NTI4NzksMTIpLFk9RihZLHEsVSxXLExbMTBdLDQyOTQ5MjUyMzMsMTcpLFc9RihXLFkscSxVLExbMTFdLDIzMDQ1NjMxMzQsMjIpLFU9RihVLFcsWSxxLExbMTJdLDE4MDQ2MDM2ODIsNykscT1GKHEsVSxXLFksTFsxM10sNDI1NDYyNjE5NSwxMiksWT1GKFkscSxVLFcsTFsxNF0sMjc5''@;'; put 'put ''Mjk2NTAwNiwxNyksVT1PKFUsVz1GKFcsWSxxLFUsTFsxNV0sMTIzNjUzNTMyOSwyMiksWSxxLExbMV0sNDEyOTE3MDc4Niw1KSxxPU8ocSxVLFcsWSxMWzZdLDMyMjU0NjU2NjQsOSksWT1PKFkscSxVLFcsTFsxMV0sNjQzNzE3NzEzLDE0KSxXPU8oVyxZLHEsVSxMWzBdLDM5MjEwNjk5OTQs''@;'; put 'put ''MjApLFU9TyhVLFcsWSxxLExbNV0sMzU5MzQwODYwNSw1KSxxPU8ocSxVLFcsWSxMWzEwXSwzODAxNjA4Myw5KSxZPU8oWSxxLFUsVyxMWzE1XSwzNjM0NDg4OTYxLDE0KSxXPU8oVyxZLHEsVSxMWzRdLDM4ODk0Mjk0NDgsMjApLFU9TyhVLFcsWSxxLExbOV0sNTY4NDQ2NDM4LDUpLHE9Tyhx''@;'; put 'put ''LFUsVyxZLExbMTRdLDMyNzUxNjM2MDYsOSksWT1PKFkscSxVLFcsTFszXSw0MTA3NjAzMzM1LDE0KSxXPU8oVyxZLHEsVSxMWzhdLDExNjM1MzE1MDEsMjApLFU9TyhVLFcsWSxxLExbMTNdLDI4NTAyODU4MjksNSkscT1PKHEsVSxXLFksTFsyXSw0MjQzNTYzNTEyLDkpLFk9TyhZLHEsVSxX''@;'; put 'put ''LExbN10sMTczNTMyODQ3MywxNCksVT16KFUsVz1PKFcsWSxxLFUsTFsxMl0sMjM2ODM1OTU2MiwyMCksWSxxLExbNV0sNDI5NDU4ODczOCw0KSxxPXoocSxVLFcsWSxMWzhdLDIyNzIzOTI4MzMsMTEpLFk9eihZLHEsVSxXLExbMTFdLDE4MzkwMzA1NjIsMTYpLFc9eihXLFkscSxVLExbMTRd''@;'; put 'put ''LDQyNTk2NTc3NDAsMjMpLFU9eihVLFcsWSxxLExbMV0sMjc2Mzk3NTIzNiw0KSxxPXoocSxVLFcsWSxMWzRdLDEyNzI4OTMzNTMsMTEpLFk9eihZLHEsVSxXLExbN10sNDEzOTQ2OTY2NCwxNiksVz16KFcsWSxxLFUsTFsxMF0sMzIwMDIzNjY1NiwyMyksVT16KFUsVyxZLHEsTFsxM10sNjgx''@;'; put 'put ''Mjc5MTc0LDQpLHE9eihxLFUsVyxZLExbMF0sMzkzNjQzMDA3NCwxMSksWT16KFkscSxVLFcsTFszXSwzNTcyNDQ1MzE3LDE2KSxXPXooVyxZLHEsVSxMWzZdLDc2MDI5MTg5LDIzKSxVPXooVSxXLFkscSxMWzldLDM2NTQ2MDI4MDksNCkscT16KHEsVSxXLFksTFsxMl0sMzg3MzE1MTQ2MSwx''@;'; put 'put ''MSksWT16KFkscSxVLFcsTFsxNV0sNTMwNzQyNTIwLDE2KSxVPU4oVSxXPXooVyxZLHEsVSxMWzJdLDMyOTk2Mjg2NDUsMjMpLFkscSxMWzBdLDQwOTYzMzY0NTIsNikscT1OKHEsVSxXLFksTFs3XSwxMTI2ODkxNDE1LDEwKSxZPU4oWSxxLFUsVyxMWzE0XSwyODc4NjEyMzkxLDE1KSxXPU4o''@;'; put 'put ''VyxZLHEsVSxMWzVdLDQyMzc1MzMyNDEsMjEpLFU9TihVLFcsWSxxLExbMTJdLDE3MDA0ODU1NzEsNikscT1OKHEsVSxXLFksTFszXSwyMzk5OTgwNjkwLDEwKSxZPU4oWSxxLFUsVyxMWzEwXSw0MjkzOTE1NzczLDE1KSxXPU4oVyxZLHEsVSxMWzFdLDIyNDAwNDQ0OTcsMjEpLFU9TihVLFcs''@;'; put 'put ''WSxxLExbOF0sMTg3MzMxMzM1OSw2KSxxPU4ocSxVLFcsWSxMWzE1XSw0MjY0MzU1NTUyLDEwKSxZPU4oWSxxLFUsVyxMWzZdLDI3MzQ3Njg5MTYsMTUpLFc9TihXLFkscSxVLExbMTNdLDEzMDkxNTE2NDksMjEpLFU9TihVLFcsWSxxLExbNF0sNDE0OTQ0NDIyNiw2KSxxPU4ocSxVLFcsWSxM''@;'; put 'put ''WzExXSwzMTc0NzU2OTE3LDEwKSxZPU4oWSxxLFUsVyxMWzJdLDcxODc4NzI1OSwxNSksVz1OKFcsWSxxLFUsTFs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErVXwwLHRoaXMuX2I9dGhpcy5fYitXfDAsdGhpcy5fYz10aGlzLl9jK1l8MCx0aGlzLl9kPXRoaXMuX2QrcXwwfSx3''@;'; put 'put ''LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0w''@;'; put 'put ''KSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEw9Zy5hbGxvY1Vu''@;'; put 'put ''c2FmZSgxNik7cmV0dXJuIEwud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksTC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxMLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEx9LHVlLmV4cG9ydHM9d30sNTM0NTk6KHVlLFgseSk9Pnt2YXIgST15KDU3''@;'; put 'put ''MjIzKSxfPXkoMzUyOTQpO2Z1bmN0aW9uIGcoQil7dGhpcy5yYW5kPUJ8fG5ldyBfLlJhbmR9dWUuZXhwb3J0cz1nLGcuY3JlYXRlPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcgZyh3KX0sZy5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbih3KXt2YXIgUD13LmJpdExlbmd0aCgpLEY9TWF0''@;'; put 'put ''aC5jZWlsKFAvOCk7ZG97dmFyIE89bmV3IEkodGhpcy5yYW5kLmdlbmVyYXRlKEYpKX13aGlsZShPLmNtcCh3KT49MCk7cmV0dXJuIE99LGcucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24odyxQKXt2YXIgRj1QLnN1Yih3KTtyZXR1cm4gdy5hZGQodGhpcy5fcmFuZGJlbG93KEYpKX0s''@;'; put 'put ''Zy5wcm90b3R5cGUudGVzdD1mdW5jdGlvbih3LFAsRil7dmFyIE89dy5iaXRMZW5ndGgoKSx6PUkubW9udCh3KSxOPW5ldyBJKDEpLnRvUmVkKHopO1B8fChQPU1hdGgubWF4KDEsTy80OHwwKSk7Zm9yKHZhciBMPXcuc3VibigxKSxLPTA7IUwudGVzdG4oSyk7SysrKTtmb3IodmFyIFU9dy5z''@;'; put 'put ''aHJuKEspLFc9TC50b1JlZCh6KTtQPjA7UC0tKXt2YXIgcT10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTCk7RiYmRihxKTt2YXIgZWU9cS50b1JlZCh6KS5yZWRQb3coVSk7aWYoMCE9PWVlLmNtcChOKSYmMCE9PWVlLmNtcChXKSl7Zm9yKHZhciBKPTE7SjxLO0orKyl7aWYoMD09PShlZT1l''@;'; put 'put ''ZS5yZWRTcXIoKSkuY21wKE4pKXJldHVybiExO2lmKDA9PT1lZS5jbXAoVykpYnJlYWt9aWYoSj09PUspcmV0dXJuITF9fXJldHVybiEwfSxnLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHcsUCl7dmFyIEY9dy5iaXRMZW5ndGgoKSxPPUkubW9udCh3KSx6PW5ldyBJKDEpLnRvUmVk''@;'; put 'put ''KE8pO1B8fChQPU1hdGgubWF4KDEsRi80OHwwKSk7Zm9yKHZhciBOPXcuc3VibigxKSxMPTA7IU4udGVzdG4oTCk7TCsrKTtmb3IodmFyIEs9dy5zaHJuKEwpLFU9Ti50b1JlZChPKTtQPjA7UC0tKXt2YXIgVz10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTiksWT13LmdjZChXKTtpZigwIT09''@;'; put 'put ''WS5jbXBuKDEpKXJldHVybiBZO3ZhciBxPVcudG9SZWQoTykucmVkUG93KEspO2lmKDAhPT1xLmNtcCh6KSYmMCE9PXEuY21wKFUpKXtmb3IodmFyIGVlPTE7ZWU8TDtlZSsrKXtpZigwPT09KHE9cS5yZWRTcXIoKSkuY21wKHopKXJldHVybiBxLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KTtp''@;'; put 'put ''ZigwPT09cS5jbXAoVSkpYnJlYWt9aWYoZWU9PT1MKXJldHVybihxPXEucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0dXJuITF9fSw1NzIyMzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAs''@;'; put 'put ''Yil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIg''@;'; put 'put ''UDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDY0Njg4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2''@;'; put 'put ''YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFy''@;'; put 'put ''IEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYm''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpi''@;'; put 'put ''fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09''@;'; put 'put ''KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxl''@;'; put 'put ''Ij09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6''@;'; put 'put ''cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJs''@;'; put 'put ''ZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0''@;'; put 'put ''aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+''@;'; put 'put ''PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtD''@;'; put 'put ''Kz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1''@;'; put 'put ''bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1w''@;'; put 'put ''Lmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMp''@;'; put 'put ''PDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBD''@;'; put 'put ''PTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndv''@;'; put 'put ''cmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRp''@;'; put 'put ''dmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsr''@;'; put 'put ''XT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBO''@;'; put 'put ''PVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCww''@;'; put 'put ''LDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4''@;'; put 'put ''NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAu''@;'; put 'put ''bmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zv''@;'; put 'put ''cih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4''@;'; put 'put ''NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3Io''@;'; put 'put ''dmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYt''@;'; put 'put ''RS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIg''@;'; put 'put ''YWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxl''@;'; put 'put ''bmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlz''@;'; put 'put ''Lmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAg''@;'; put 'put ''dG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxp''@;'; put 'put ''a2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtn''@;'; put 'put ''KEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJv''@;'; put 'put ''KCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcu''@;'; put 'put ''cHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQp''@;'; put 'put ''LGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMm''@;'; put 'put ''Ynx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUp''@;'; put 'put ''KSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5n''@;'; put 'put ''dGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4''@;'; put 'put ''XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5k''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9''@;'; put 'put ''PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4''@;'; put 'put ''b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIg''@;'; put 'put ''Qz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRz''@;'; put 'put ''W3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9''@;'; put 'put ''MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+''@;'; put 'put ''PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRo''@;'; put 'put ''aXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChw''@;'; put 'put ''KTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tq''@;'; put 'put ''XT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNb''@;'; put 'put ''al07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4''@;'; put 'put ''KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERl''@;'; put 'put ''PVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+''@;'; put 'put ''PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxS''@;'; put 'put ''bj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxU''@;'; put 'put ''WzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''dGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFl''@;'; put 'put ''LFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10''@;'; put 'put ''LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''dGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQs''@;'; put 'put ''V3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01h''@;'; put 'put ''dGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXww''@;'; put 'put ''LFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXww''@;'; put 'put ''LFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01h''@;'; put 'put ''dGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxj''@;'; put 'put ''biksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4g''@;'; put 'put ''aj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09''@;'; put 'put ''cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9''@;'; put 'put ''cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9u''@;'; put 'put ''IHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEp''@;'; put 'put ''LG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgm''@;'; put 'put ''PTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5w''@;'; put 'put ''cm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnAp''@;'; put 'put ''PDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVy''@;'; put 'put ''bXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUr''@;'; put 'put ''d2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Us''@;'; put 'put ''c2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24o''@;'; put 'put ''cCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxD''@;'; put 'put ''PTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMp''@;'; put 'put ''e2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZh''@;'; put 'put ''ciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJy''@;'; put 'put ''YXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29y''@;'; put 'put ''ZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxF''@;'; put 'put ''W3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCti''@;'; put 'put ''Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9''@;'; put 'put ''bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYw''@;'; put 'put ''PT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9''@;'; put 'put ''aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhi''@;'; put 'put ''LWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5n''@;'; put 'put ''dGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7''@;'; put 'put ''bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5s''@;'; put 'put ''ZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3''@;'; put 'put ''LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVu''@;'; put 'put ''Y3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlz''@;'; put 'put ''Lmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBd''@;'; put 'put ''PXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2''@;'; put 'put ''YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5n''@;'; put 'put ''dGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihw''@;'; put 'put ''KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1ti''@;'; put 'put ''XTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0''@;'; put 'put ''aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRo''@;'; put 'put ''aXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9''@;'; put 'put ''cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxl''@;'; put 'put ''bmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0''@;'; put 'put ''ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxD''@;'; put 'put ''Lm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3''@;'; put 'put ''LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9''@;'; put 'put ''PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9''@;'; put 'put ''SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpw''@;'; put 'put ''Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jk''@;'; put 'put ''c1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcu''@;'; put 'put ''cHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBi''@;'; put 'put ''PXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1i''@;'; put 'put ''LmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVw''@;'; put 'put ''O3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5l''@;'; put 'put ''Z2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUo''@;'; put 'put ''KTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQu''@;'; put 'put ''aXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJu''@;'; put 'put ''KDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZygh''@;'; put 'put ''cC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53''@;'; put 'put ''b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTtt''@;'; put 'put ''LS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdj''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2''@;'; put 'put ''ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigx''@;'; put 'put ''KSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0o''@;'; put 'put ''cC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndv''@;'; put 'put ''cmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5j''@;'; put 'put ''dGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28g''@;'; put 'put ''YmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxw''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21w''@;'; put 'put ''bihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3''@;'; put 'put ''LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVy''@;'; put 'put ''dEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0''@;'; put 'put ''aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJl''@;'; put 'put ''ZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3Fy''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu''@;'; put 'put ''cmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVs''@;'; put 'put ''bCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1m''@;'; put 'put ''dW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1''@;'; put 'put ''MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5n''@;'; put 'put ''dG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMu''@;'; put 'put ''c2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhp''@;'; put 'put ''cy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJv''@;'; put 'put ''dG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3Jl''@;'; put 'put ''dHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUu''@;'; put 'put ''aW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxl''@;'; put 'put ''bmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxI''@;'; put 'put ''Pj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4''@;'; put 'put ''PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVu''@;'; put 'put ''Z3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31y''@;'; put 'put ''ZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcg''@;'; put 'put ''X2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRp''@;'; put 'put ''dmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90''@;'; put 'put ''b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5t''@;'; put 'put ''KT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1''@;'; put 'put ''Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlz''@;'; put 'put ''dWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlz''@;'; put 'put ''Ll92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxw''@;'; put 'put ''LmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7''@;'; put 'put ''dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9S''@;'; put 'put ''ZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxh''@;'; put 'put ''ZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNo''@;'; put 'put ''bG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7''@;'; put 'put ''Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zv''@;'; put 'put ''cih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9''@;'; put 'put ''bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51''@;'; put 'put ''bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5t''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhp''@;'; put 'put ''cy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYp''@;'; put 'put ''LmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJv''@;'; put 'put ''dG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSwzOTIxMDp1ZT0+e2Z1bmN0aW9uIFgoeSxJKXtpZigheSl0aHJvdyBuZXcgRXJyb3IoSXx8IkFz''@;'; put 'put ''c2VydGlvbiBmYWlsZWQiKX11ZS5leHBvcnRzPVgsWC5lcXVhbD1mdW5jdGlvbihJLF8sZyl7aWYoSSE9Xyl0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQ6ICIrSSsiICE9ICIrXyl9fSwyMTgzMjoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIHk9WDtmdW5jdGlvbiBfKEIp''@;'; put 'put ''e3JldHVybiAxPT09Qi5sZW5ndGg/IjAiK0I6Qn1mdW5jdGlvbiBnKEIpe2Zvcih2YXIgdz0iIixQPTA7UDxCLmxlbmd0aDtQKyspdys9XyhCW1BdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9eS50b0FycmF5PWZ1bmN0aW9uIEkoQix3KXtpZihBcnJheS5pc0FycmF5KEIpKXJldHVybiBCLnNs''@;'; put 'put ''aWNlKCk7aWYoIUIpcmV0dXJuW107dmFyIFA9W107aWYoInN0cmluZyIhPXR5cGVvZiBCKXtmb3IodmFyIEY9MDtGPEIubGVuZ3RoO0YrKylQW0ZdPTB8QltGXTtyZXR1cm4gUH1pZigiaGV4Ij09PXcpZm9yKChCPUIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYo''@;'; put 'put ''Qj0iMCIrQiksRj0wO0Y8Qi5sZW5ndGg7Ris9MilQLnB1c2gocGFyc2VJbnQoQltGXStCW0YrMV0sMTYpKTtlbHNlIGZvcihGPTA7RjxCLmxlbmd0aDtGKyspe3ZhciBPPUIuY2hhckNvZGVBdChGKSx6PU8+PjgsTj0yNTUmTzt6P1AucHVzaCh6LE4pOlAucHVzaChOKX1yZXR1cm4gUH0seS56''@;'; put 'put ''ZXJvMj1fLHkudG9IZXg9Zyx5LmVuY29kZT1mdW5jdGlvbih3LFApe3JldHVybiJoZXgiPT09UD9nKHcpOnd9fSwxMTU0NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFmIix7bW9udGhzOiJKYW51YXJpZV9GZWJydWFyaWVfTWFh''@;'; put 'put ''cnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''U29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTWFfRGlfV29fRG9fVnJfU2EiLnNwbGl0''@;'; put 'put ''KCJfIiksbWVyaWRpZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybi9ebm0kL2kudGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyP3c/InZtIjoiVk0iOnc/Im5tIjoiTk0ifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhI''@;'; put 'put ''Om1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltWYW5kYWcgb21dIExUIixuZXh0RGF5OiJbTVx4ZjRyZSBvbV0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltHaXN0ZXIgb21dIExUIixsYXN0V2VlazoiW0xhYXNdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib29yICVzIixwYXN0OiIlcyBnZWxlZGUiLHM6IiduIHBhYXIgc2Vrb25kZXMiLHNzOiIlZCBzZWtv''@;'; put 'put ''bmRlcyIsbToiJ24gbWludXV0IixtbToiJWQgbWludXRlIixoOiInbiB1dXIiLGhoOiIlZCB1cmUiLGQ6IiduIGRhZyIsZGQ6IiVkIGRhZSIsTToiJ24gbWFhbmQiLE1NOiIlZCBtYWFuZGUiLHk6IiduIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnKygxPT09Z3x8OD09PWd8fGc+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1MjE1NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ZnVu''@;'; put 'put ''Y3Rpb24oRil7cmV0dXJuIDA9PT1GPzA6MT09PUY/MToyPT09Rj8yOkYlMTAwPj0zJiZGJTEwMDw9MTA/MzpGJTEwMD49MTE/NDo1fSxnPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2''@;'; put 'put ''NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2''@;'; put 'put ''NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFc''@;'; put 'put ''dTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZc''@;'; put 'put ''dTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1''@;'; put 'put ''MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0''@;'; put 'put ''IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRc''@;'; put 'put ''dTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUw''@;'; put 'put ''NjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2''@;'; put 'put ''NDUiXX0sQj1mdW5jdGlvbihGKXtyZXR1cm4gZnVuY3Rpb24oTyx6LE4sTCl7dmFyIEs9XyhPKSxVPWdbRl1bXyhPKV07cmV0dXJuIDI9PT1LJiYoVT1VW3o/MDoxXSksVS5yZXBsYWNlKC8lZC9pLE8pfX0sdz1bIlx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YSIsIlx1MDY0MVx1MDY0''@;'; put 'put ''YVx1MDY0MVx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDYyN1x1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYy''@;'; put 'put ''OSIsIlx1MDYyM1x1MDY0OFx1MDYyYSIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0''@;'; put 'put ''NVx1MDYyOFx1MDYzMSJdO0kuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczp3LG1vbnRoc1Nob3J0Oncsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJi''@;'; put 'put ''XHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2Mjdc''@;'; put 'put ''dTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVt''@;'; put 'put ''UGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oRil7cmV0dXJuIlx1MDY0NSI9PT1GfSxtZXJpZGllbTpmdW5jdGlvbihGLE8seil7cmV0dXJuIEY8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1''@;'; put 'put ''IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Qigi''@;'; put 'put ''cyIpLHNzOkIoInMiKSxtOkIoIm0iKSxtbTpCKCJtIiksaDpCKCJoIiksaGg6QigiaCIpLGQ6QigiZCIpLGRkOkIoImQiKSxNOkIoIk0iKSxNTTpCKCJNIikseTpCKCJ5IikseXk6QigieSIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoLywvZywiXHUwNjBjIil9''@;'; put 'put ''LHdlZWs6e2RvdzowLGRveTo0fX0pfSh5KDk3NTg2KSl9LDUzNTgzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXIta3ciLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFc''@;'; put 'put ''dTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2''@;'; put 'put ''M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUw''@;'; put 'put ''NjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2''@;'; put 'put ''MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUw''@;'; put 'put ''NjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2''@;'; put 'put ''NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh''@;'; put 'put ''MCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2Mjld''@;'; put 'put ''IExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixz''@;'; put 'put ''OiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUw''@;'; put 'put ''NjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMz''@;'; put 'put ''XHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDQxNjM4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiMSIsMjoiMiIsMzoiMyIsNDoi''@;'; put 'put ''NCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIsMDoiMCJ9LGc9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT1PPzA6MT09PU8/MToyPT09Tz8yOk8lMTAwPj0zJiZPJTEwMDw9MTA/MzpPJTEwMD49MTE/NDo1fSxCPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2''@;'; put 'put ''MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1''@;'; put 'put ''MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZc''@;'; put 'put ''dTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYy''@;'; put 'put ''YVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2''@;'; put 'put ''MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBc''@;'; put 'put ''dTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2''@;'; put 'put ''NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIl''@;'; put 'put ''ZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYz''@;'; put 'put ''NFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2''@;'; put 'put ''NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2Mzlc''@;'; put 'put ''dTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sdz1mdW5jdGlvbihPKXtyZXR1cm4gZnVuY3Rpb24oeixOLEwsSyl7dmFyIFU9Zyh6KSxXPUJbT11bZyh6KV07cmV0dXJuIDI9PT1VJiYoVz1XW04/MDoxXSksVy5yZXBsYWNlKC8lZC9pLHopfX0sUD1b''@;'; put 'put ''Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0''@;'; put 'put ''YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1''@;'; put 'put ''MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO0kuZGVmaW5lTG9jYWxlKCJhci1seSIse21vbnRoczpQLG1vbnRoc1Nob3J0OlAsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYy''@;'; put 'put ''ZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2''@;'; put 'put ''X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTyl7cmV0dXJuIlx1MDY0NSI9PT1PfSxtZXJpZGllbTpmdW5jdGlvbihPLHosTil7cmV0dXJuIE88MTI/''@;'; put 'put ''Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3''@;'; put 'put ''IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2''@;'; put 'put ''MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6dygicyIpLHNzOncoInMiKSxtOncoIm0iKSxtbTp3KCJtIiksaDp3KCJoIiksaGg6dygiaCIpLGQ6dygiZCIpLGRkOncoImQiKSxNOncoIk0iKSxNTTp3KCJNIikseTp3KCJ5''@;'; put 'put ''IikseXk6dygieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oeil7cmV0dXJuIF9bel19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3''@;'; put 'put ''ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sODc4MjM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJhci1tYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1''@;'; put 'put ''MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYz''@;'; put 'put ''YVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2''@;'; put 'put ''XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2''@;'; put 'put ''MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYy''@;'; put 'put ''Ylx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2''@;'; put 'put ''MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0''@;'; put 'put ''NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6''@;'; put 'put ''Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNc''@;'; put 'put ''dTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3NzEyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6''@;'; put 'put ''Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sZz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2Ijoi''@;'; put 'put ''NiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYXItcHMiLHttb250aHM6Ilx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjM0XHUw''@;'; put 'put ''NjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1MDYzMV9cdTA2NDZcdTA2NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3XHUwNjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhc''@;'; put 'put ''dTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0NFx1MDY0OFx1MDY0NF9cdTA2MmFcdTA2MzRcdTA2MzFcdTA2NGEgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4XHUwNjUxXHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NGFfXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjQzXHUwNjYyX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2Mjdc''@;'; put 'put ''dTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2''@;'; put 'put ''NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjYxX1x1MDYyYVx1MDY2Ml9cdTA2NDNcdTA2NjEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1''@;'; put 'put ''MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2''@;'; put 'put ''MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov''@;'; put 'put ''XHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5''@;'; put 'put ''XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2''@;'; put 'put ''MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1''@;'; put 'put ''MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUw''@;'; put 'put ''NjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1''@;'; put 'put ''MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5zcGxpdCgiIikucmV2ZXJz''@;'; put 'put ''ZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJdKD8hW1x1MDYyYVx1MDY0M10pL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJu''@;'; put 'put ''IHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDc4MjYxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYx''@;'; put 'put ''IiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sZz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUi''@;'; put 'put ''OiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYXItc2EiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFc''@;'; put 'put ''dTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2''@;'; put 'put ''MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRh''@;'; put 'put ''XHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2''@;'; put 'put ''MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIx''@;'; put 'put ''X1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYy''@;'; put 'put ''ZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1''@;'; put 'put ''MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUw''@;'; put 'put ''NjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMw''@;'; put 'put ''ICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUw''@;'; put 'put ''NjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToi''@;'; put 'put ''XHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxm''@;'; put 'put ''dW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0p''@;'; put 'put ''fSh5KDk3NTg2KSl9LDU2NzAzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXItdG4iLHttb250aHM6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUw''@;'; put 'put ''NjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJh''@;'; put 'put ''XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2MmNcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhc''@;'; put 'put ''dTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0''@;'; put 'put ''YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2Mjdc''@;'; put 'put ''dTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFc''@;'; put 'put ''dTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0''@;'; put 'put ''OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0''@;'; put 'put ''V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJc''@;'; put 'put ''dTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoi''@;'; put 'put ''JWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUw''@;'; put 'put ''NjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzMxMDg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYz''@;'; put 'put ''Iiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxnPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUw''@;'; put 'put ''NjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LEI9ZnVuY3Rpb24oeil7cmV0dXJuIDA9PT16PzA6MT09PXo/MToyPT09ej8yOnolMTAwPj0zJiZ6JTEwMDw9MTA/Mzp6JTEwMD49MTE/NDo1fSx3PXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1''@;'; put 'put ''MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0''@;'; put 'put ''NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1''@;'; put 'put ''MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1''@;'; put 'put ''MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0''@;'; put 'put ''NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFc''@;'; put 'put ''dTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJc''@;'; put 'put ''dTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0''@;'; put 'put ''NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2Mzlc''@;'; put 'put ''dTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIl''@;'; put 'put ''ZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sUD1mdW5jdGlvbih6KXtyZXR1cm4gZnVuY3Rpb24oTixMLEssVSl7dmFyIFc9QihOKSxZPXdbel1bQihOKV07cmV0dXJuIDI9PT1XJiYoWT1ZW0w/MDoxXSksWS5yZXBsYWNlKC8lZC9p''@;'; put 'put ''LE4pfX0sRj1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0''@;'; put 'put ''OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0''@;'; put 'put ''OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO0kuZGVmaW5lTG9jYWxlKCJhciIse21vbnRoczpGLG1vbnRoc1Nob3J0OkYsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''M1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRh''@;'; put 'put ''XHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oeil7cmV0dXJuIlx1MDY0NSI9PT16fSxtZXJpZGllbTpmdW5jdGlvbih6LE4sTCl7cmV0dXJu''@;'; put 'put ''IHo8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRi''@;'; put 'put ''XHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2''@;'; put 'put ''NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6UCgicyIpLHNzOlAoInMiKSxtOlAoIm0iKSxtbTpQKCJtIiksaDpQKCJoIiksaGg6UCgiaCIpLGQ6UCgiZCIpLGRkOlAoImQiKSxNOlAoIk0iKSxNTTpQKCJNIiks''@;'; put 'put ''eTpQKCJ5IikseXk6UCgieSIpfSxwcmVwYXJzZTpmdW5jdGlvbih6KXtyZXR1cm4gei5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKE4pe3JldHVybiBnW05dfSkucmVwbGFjZSgvXHUwNjBj''@;'; put 'put ''L2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih6KXtyZXR1cm4gei5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE4pe3JldHVybiBfW05dfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDQ2NTA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1''@;'; put 'put ''bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNc''@;'; put 'put ''eGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O0kuZGVmaW5lTG9jYWxlKCJheiIse21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZx''@;'; put 'put ''dXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydFx1MDI1OXNpX1x4YzdcdTAyNTly''@;'; put 'put ''XHUwMTVmXHUwMjU5bmJcdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5X0NceGZjbVx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX0NceGZjbVx1MDI1OV9cdTAxNWVcdTAyNTluYlx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJCYXpf''@;'; put 'put ''QnpFX1x4YzdBeF9ceGM3XHUwMjU5cl9DQXhfQ1x4ZmNtX1x1MDE1ZVx1MDI1OW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkJ6X0JFX1x4YzdBX1x4YzdcdTAyNTlfQ0FfQ1x4ZmNfXHUwMTVlXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToi''@;'; put 'put ''W3NhYmFoIHNhYXRdIExUIixuZXh0V2VlazoiW2dcdTAyNTlsXHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXHUwMjU5bl0gTFQiLGxhc3RXZWVrOiJba2VceGU3XHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHUwMjU5dnZcdTAyNTlsIixzOiJiaXIgbmVceGU3XHUwMjU5IHNhbml5XHUwMjU5IixzczoiJWQgc2FuaXlcdTAyNTkiLG06ImJpciBkXHUwMjU5cWlxXHUwMjU5IixtbToiJWQgZFx1MDI1OXFp''@;'; put 'put ''cVx1MDI1OSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIGlsIix5eToiJWQgaWwifSxtZXJpZGllbVBhcnNlOi9nZWNcdTAyNTl8c1x1MDI1OWhcdTAyNTlyfGdceGZjbmRceGZjenxh''@;'; put 'put ''eFx1MDE1ZmFtLyxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybi9eKGdceGZjbmRceGZjenxheFx1MDE1ZmFtKSQvLnRlc3QoQil9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjw0PyJnZWNcdTAyNTkiOkI8MTI/InNcdTAyNTloXHUwMjU5ciI6QjwxNz8iZ1x4ZmNuZFx4ZmN6Ijoi''@;'; put 'put ''YXhcdTAxNWZhbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDEzMW5jXHUwMTMxfGluY2l8bmNpfFx4ZmNuY1x4ZmN8bmNcdTAxMzF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24oQil7aWYoMD09PUIpcmV0dXJuIEIrIi1cdTAxMzFuY1x1MDEzMSI7dmFyIHc9QiUxMDty''@;'; put 'put ''ZXR1cm4gQisoX1t3XXx8X1tCJTEwMC13XXx8X1tCPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMTY3NjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcodyxQLEYpe3JldHVybiJtIj09PUY/UD8i''@;'; put 'put ''XHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoiaCI9PT1GP1A/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1''@;'; put 'put ''MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6dysiICIrZnVuY3Rpb24gXyh3LFApe3ZhciBGPXcuc3BsaXQoIl8iKTtyZXR1cm4gUCUxMD09MSYmUCUxMDAhPTExP0ZbMF06UCUxMD49MiYmUCUxMDw9NCYmKFAlMTAwPDEwfHxQJTEwMD49MjApP0ZbMV06RlsyXX0oe3NzOlA/Ilx1MDQ0MVx1MDQz''@;'; put 'put ''NVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOlA/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJf''@;'; put 'put ''XHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiLGho''@;'; put 'put ''OlA/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNk''@;'; put 'put ''XHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1MDQ1MVx1MDQz''@;'; put 'put ''ZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwXHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0''@;'; put 'put ''Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtGXSwrdyl9SS5kZWZpbmVMb2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBf''@;'; put 'put ''XHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMy''@;'; put 'put ''XHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0''@;'; put 'put ''MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0''@;'; put 'put ''NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUw''@;'; put 'put ''NDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUw''@;'; put 'put ''NDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQz''@;'; put 'put ''Ml9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBc''@;'; put 'put ''dTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQz''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMw''@;'; put 'put ''XHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3Bs''@;'; put 'put ''aXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9c''@;'; put 'put ''dTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUw''@;'; put 'put ''NDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0M2RcdTA0M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBc''@;'; put 'put ''dTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA0MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6''@;'; put 'put ''Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0NWVdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2Jc''@;'; put 'put ''dTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0''@;'; put 'put ''Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06ZyxtbTpnLGg6ZyxoaDpnLGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6ZyxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOmcseToiXHUwNDMzXHUwNDNl''@;'; put 'put ''XHUwNDM0Iix5eTpnfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRifFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24odyl7''@;'; put 'put ''cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCkkLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjp3PDEyPyJcdTA0NDBcdTA0MzBcdTA0M2Rc''@;'; put 'put ''dTA0NTZcdTA0NDZcdTA0NGIiOnc8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbih3''@;'; put 'put ''LFApe3N3aXRjaChQKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdyUxMCE9MiYmdyUxMCE9M3x8dyUxMDA9PTEyfHx3JTEwMD09MTM/dysiLVx1MDQ0YiI6dysiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gdysiLVx1MDQzM1x1MDQzMCI7ZGVmYXVs''@;'; put 'put ''dDpyZXR1cm4gd319LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDI4NTY0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYmciLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0''@;'; put 'put ''NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBc''@;'; put 'put ''dTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJc''@;'; put 'put ''dTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0NDNfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUw''@;'; put 'put ''NDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRm''@;'; put 'put ''XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDQxXHUwNDRhXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQ0YVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUw''@;'; put 'put ''NDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIs''@;'; put 'put ''TExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQz''@;'; put 'put ''MFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDM4XHUwNDRmXSBkZGRkIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVzIixzOiJcdTA0M2RcdTA0NGZcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1''@;'; put 'put ''MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIix3OiJcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIseToiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUw''@;'; put 'put ''NDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciBCPWclMTAsdz1nJTEwMDtyZXR1cm4gMD09PWc/ZysiLVx1MDQzNVx1MDQzMiI6MD09PXc/ZysiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwyMD9nKyItXHUwNDQyXHUwNDM4IjoxPT09Qj9nKyItXHUwNDMyXHUwNDM4IjoyPT09Qj9nKyItXHUwNDQwXHUwNDM4Ijo3PT09Qnx8OD09PUI/Zysi''@;'; put 'put ''LVx1MDQzY1x1MDQzOCI6ZysiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDk3NDYyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXll''@;'; put 'put ''a2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1Ym5rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0YnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJaYW5fRmV3X01hcl9Bd2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVidF9cdTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1Ym5fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiS2FyX050XHUwMjViX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0''@;'; put 'put ''aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJy''@;'; put 'put ''XHUwMjViXSBMVCIsbmV4dERheToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJc''@;'; put 'put ''dTAyNWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBrXHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEgZGFtYSIsc3M6InNla29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoi''@;'; put 'put ''bFx1MDI1YnJcdTAyNWIga2VsZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoidGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4iLHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MzQz''@;'; put 'put ''ODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LGc9''@;'; put 'put ''eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoImJuLWJkIix7bW9udGhzOiJc''@;'; put 'put ''dTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBc''@;'; put 'put ''dTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDli''@;'; put 'put ''MF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUw''@;'; put 'put ''OTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTlj''@;'; put 'put ''XHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlh''@;'; put 'put ''Y1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDli''@;'; put 'put ''MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJm''@;'; put 'put ''X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19c''@;'; put 'put ''dTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoi''@;'; put 'put ''REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIs''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIl''@;'; put 'put ''ZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5''@;'; put 'put ''Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5''@;'; put 'put ''YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUw''@;'; put 'put ''OWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWFkXHUwOWNi''@;'; put 'put ''XHUwOWIwfFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZXxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVt''@;'; put 'put ''SG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09UD93PDQ/dzp3KzEyOiJcdTA5YWRcdTA5Y2JcdTA5YjAiPT09UHx8Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI9PT1QP3c6Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDli''@;'; put 'put ''MCI9PT1QP3c+PTM/dzp3KzEyOiJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09UHx8Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwOWIwXHUw''@;'; put 'put ''OWJlXHUwOWE0Ijp3PDY/Ilx1MDlhZFx1MDljYlx1MDliMCI6dzwxMj8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjp3PDE1PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MTg/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6dzwyMD8iXHUwOWI4XHUwOWE4XHUw''@;'; put 'put ''OWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sMTcxMDc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoi''@;'; put 'put ''XHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxnPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2''@;'; put 'put ''IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1''@;'; put 'put ''MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4''@;'; put 'put ''Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlh''@;'; put 'put ''Y1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUw''@;'; put 'put ''OWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNk''@;'; put 'put ''XHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFj''@;'; put 'put ''XHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIw''@;'; put 'put ''X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlc''@;'; put 'put ''dTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5''@;'; put 'put ''YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiks''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwg''@;'; put 'put ''TFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3''@;'; put 'put ''XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4''@;'; put 'put ''XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUw''@;'; put 'put ''OWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0s''@;'; put 'put ''cHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJl''@;'; put 'put ''cGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDli''@;'; put 'put ''MFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1QJiZ3Pj00fHwiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PVAmJnc8NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1''@;'; put 'put ''MDliMiI9PT1QP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjp3PDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MjA/Ilx1MDlhY1x1MDliZlx1''@;'; put 'put ''MDk5NVx1MDliZVx1MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDkwMDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJc''@;'; put 'put ''dTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIsOToiXHUwZjI5IiwwOiJcdTBmMjAifSxnPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3Ijoi''@;'; put 'put ''NyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibyIse21vbnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1''@;'; put 'put ''MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1''@;'; put 'put ''MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUw''@;'; put 'put ''Zjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2Mlx1MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUw''@;'; put 'put ''ZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBm''@;'; put 'put ''NTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZi''@;'; put 'put ''M1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1MGY1Zlx1MGZiM1x1MGYwYjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1''@;'; put 'put ''MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIzXHUwZjBiXGR7MSwyfSkvLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZc''@;'; put 'put ''dTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1''@;'; put 'put ''MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1''@;'; put 'put ''MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2''@;'; put 'put ''Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUwZjU4XHUwZjcyXHUwZjQyX1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJc''@;'; put 'put ''dTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2Fc''@;'; put 'put ''dTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2Nlx1MGY0NF0gTFQiLGxhc3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRk''@;'; put 'put ''LCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYzXHUwZjBiIixwYXN0OiIlcyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYw''@;'; put 'put ''Ylx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJc''@;'; put 'put ''dTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVm''@;'; put 'put ''XHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixNTToiJWQgXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5j''@;'; put 'put ''dGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0XHUwZjI1XHUwZjI2XHUwZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxm''@;'; put 'put ''dW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxc''@;'; put 'put ''dTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdj''@;'; put 'put ''Ij09PVAmJnc+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiPT09UCYmdzw1fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PVA/dysxMjp3fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUw''@;'; put 'put ''ZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjp3PDEwPyJcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjYiOnc8MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6dzwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0''@;'; put 'put ''XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sNTA5Mjc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oWSxxLGVlKXtyZXR1''@;'; put 'put ''cm4gWSsiICIrZnVuY3Rpb24gdyhZLHEpe3JldHVybiAyPT09cT9mdW5jdGlvbiBQKFkpe3ZhciBxPXttOiJ2IixiOiJ2IixkOiJ6In07cmV0dXJuIHZvaWQgMD09PXFbWS5jaGFyQXQoMCldP1k6cVtZLmNoYXJBdCgwKV0rWS5zdWJzdHJpbmcoMSl9KFkpOll9KHttbToibXVudXRlbm4iLE1N''@;'; put 'put ''OiJtaXoiLGRkOiJkZXZlemgifVtlZV0sWSl9ZnVuY3Rpb24gQihZKXtyZXR1cm4gWT45P0IoWSUxMCk6WX12YXIgRj1bL15nZW4vaSwvXmNbXHUwMmJjXCddaHdlL2ksL15tZXUvaSwvXmVici9pLC9ebWFlL2ksL14obWV6fGV2ZSkvaSwvXmdvdS9pLC9eZW9zL2ksL15nd2UvaSwvXmhlci9p''@;'; put 'put ''LC9eZHUvaSwvXmtlci9pXSxPPS9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1fGdlbnxjW1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtl''@;'; put 'put ''cikvaSxVPVsvXlN1L2ksL15MdS9pLC9eTWUoW15yXXwkKS9pLC9eTWVyL2ksL15ZYS9pLC9eR3cvaSwvXlNhL2ldO0kuZGVmaW5lTG9jYWxlKCJiciIse21vbnRoczoiR2VudmVyX0NcdTAyYmNod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9f''@;'; put 'put ''SGVyZV9EdV9LZXJ6dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiR2VuX0NcdTAyYmNod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXIiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bF9MdW5fTWV1cnpoX01lcmNcdTAyYmNoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTHVfTWVfTWVyX1lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2U6VSxmdWxsV2Vla2RheXNQYXJzZTpbL15zdWwvaSwvXmx1bi9pLC9e''@;'; put 'put ''bWV1cnpoL2ksL15tZXJjW1x1MDJiY1wnXWhlci9pLC9eeWFvdS9pLC9eZ3dlbmVyL2ksL15zYWRvcm4vaV0sc2hvcnRXZWVrZGF5c1BhcnNlOlsvXlN1bC9pLC9eTHVuL2ksL15NZXUvaSwvXk1lci9pLC9eWWFvL2ksL15Hd2UvaSwvXlNhZC9pXSxtaW5XZWVrZGF5c1BhcnNlOlUsbW9udGhz''@;'; put 'put ''UmVnZXg6Tyxtb250aHNTaG9ydFJlZ2V4Ok8sbW9udGhzU3RyaWN0UmVnZXg6L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihn''@;'; put 'put ''ZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbW9udGhzUGFyc2U6Rixsb25nTW9udGhzUGFyc2U6RixzaG9ydE1vbnRoc1BhcnNlOkYsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZ''@;'; put 'put ''WSIsTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkiLExMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGl6aXYgZGFdIExUIixuZXh0RGF5OiJbV2FyY1x1MDJiY2hvYXpoIGRhXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQgW2RhXSBMVCIsbGFzdERheToiW0RlY1x1MDJiY2ggZGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzZXQgZGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhLWJlbm4gJXMiLHBhc3Q6IiVzIFx1MDJiY3pvIixzOiJ1biBuZWJldWQg''@;'; put 'put ''c2Vnb25kZW5ub1x4ZjkiLHNzOiIlZCBlaWxlbm4iLG06InVyIHZ1bnV0ZW5uIixtbTpfLGg6InVuIGV1ciIsaGg6IiVkIGV1ciIsZDoidW4gZGV2ZXpoIixkZDpfLE06InVyIG1peiIsTU06Xyx5OiJ1ciBibG9heiIseXk6ZnVuY3Rpb24gZyhZKXtzd2l0Y2goQihZKSl7Y2FzZSAxOmNhc2Ug''@;'; put 'put ''MzpjYXNlIDQ6Y2FzZSA1OmNhc2UgOTpyZXR1cm4gWSsiIGJsb2F6IjtkZWZhdWx0OnJldHVybiBZKyIgdmxvYXoifX19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oYVx4ZjF8dmV0KS8sb3JkaW5hbDpmdW5jdGlvbihZKXtyZXR1cm4gWSsoMT09PVk/ImFceGYxIjoidmV0Iil9''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo0fSxtZXJpZGllbVBhcnNlOi9hLm0ufGcubS4vLGlzUE06ZnVuY3Rpb24oWSl7cmV0dXJuImcubS4iPT09WX0sbWVyaWRpZW06ZnVuY3Rpb24oWSxxLGVlKXtyZXR1cm4gWTwxMj8iYS5tLiI6ImcubS4ifX0pfSh5KDk3NTg2KSl9LDg3NzY4OmZ1bmN0aW9uKHVl''@;'; put 'put ''LFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHcsUCxGKXt2YXIgTz13KyIgIjtzd2l0Y2goRil7Y2FzZSJzcyI6cmV0dXJuIE8rKDE9PT13PyJzZWt1bmRhIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibW0iOnJldHVybiBP''@;'; put 'put ''KygxPT09dz8ibWludXRhIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiJqZWRhbiBzYXQiO2Nhc2UiaGgiOnJldHVybiBPKygxPT09dz8ic2F0IjoyPT09d3x8Mz09PXd8fDQ9PT13PyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBP''@;'; put 'put ''KygxPT09dz8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBPKygxPT09dz8ibWplc2VjIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBPKygxPT09dz8iZ29kaW5hIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJnb2RpbmUiOiJnb2Rp''@;'; put 'put ''bmEiKX19SS5kZWZpbmVMb2NhbGUoImJzIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21h''@;'; put 'put ''ai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rp''@;'; put 'put ''b24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVy''@;'; put 'put ''biJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBb''@;'; put 'put ''c3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczpnLG06ZnVu''@;'; put 'put ''Y3Rpb24gXyh3LFAsRixPKXtpZigibSI9PT1GKXJldHVybiBQPyJqZWRuYSBtaW51dGEiOk8/ImplZG51IG1pbnV0dSI6ImplZG5lIG1pbnV0ZSJ9LG1tOmcsaDpnLGhoOmcsZDoiZGFuIixkZDpnLE06Im1qZXNlYyIsTU06Zyx5OiJnb2RpbnUiLHl5Omd9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw1NjI5MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJf''@;'; put 'put ''bWFyXHhlN19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyXHhlN19kJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9k''@;'; put 'put ''ZSBzZXRlbWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46ImRnX2RsX2R0X2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F2''@;'; put 'put ''dWkgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbZGVtXHhlMCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthICIrKDEhPT10''@;'; put 'put ''aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthaGlyIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzc2F0IGEgIisoMSE9PXRoaXMu''@;'; put 'put ''aG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVucyBzZWdvbnMiLHNzOiIlZCBzZWdvbnMiLG06InVuIG1pbnV0IixtbToiJWQgbWludXRzIixoOiJ1bmEgaG9yYSIsaGg6''@;'; put 'put ''IiVkIGhvcmVzIixkOiJ1biBkaWEiLGRkOiIlZCBkaWVzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNvcyIseToidW4gYW55Iix5eToiJWQgYW55cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3ZhciB3PTE9PT1n''@;'; put 'put ''PyJyIjoyPT09Zz8ibiI6Mz09PWc/InIiOjQ9PT1nPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PUJ8fCJXIj09PUIpJiYodz0iYSIpLGcrd30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODUzMDE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBfPXtzdGFuZGFsb25lOiJsZWRlbl9ceGZhbm9yX2JcdTAxNTllemVuX2R1YmVuX2t2XHUwMTFidGVuX1x1MDEwZGVydmVuX1x1MDEwZGVydmVuZWNfc3JwZW5felx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksZm9ybWF0OiJsZWRu''@;'; put 'put ''YV9ceGZhbm9yYV9iXHUwMTU5ZXpuYV9kdWJuYV9rdlx1MDExYnRuYV9cdTAxMGRlcnZuYV9cdTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkam5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovREQ/W28uXT8oXFtbXlxbXF1dKlxd''@;'; put 'put ''fFxzKStNTU1NL30sZz0ibGVkX1x4ZmFub19iXHUwMTU5ZV9kdWJfa3ZcdTAxMWJfXHUwMTBkdm5fXHUwMTBkdmNfc3JwX3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRqX2xpc19wcm8iLnNwbGl0KCJfIiksQj1bL15sZWQvaSwvXlx4ZmFuby9pLC9eYlx1MDE1OWUvaSwvXmR1Yi9pLC9ea3ZcdTAx''@;'; put 'put ''MWIvaSwvXihcdTAxMGR2bnxcdTAxMGRlcnZlbiR8XHUwMTBkZXJ2bmEpL2ksL14oXHUwMTBkdmN8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlKS9pLC9ec3JwL2ksL156XHhlMVx1MDE1OS9pLC9eXHUwMTU5XHhlZGovaSwvXmxpcy9pLC9ecHJvL2ldLHc9L14obGVkZW58XHhmYW5vcnxi''@;'; put 'put ''XHUwMTU5ZXplbnxkdWJlbnxrdlx1MDExYnRlbnxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAx''@;'; put 'put ''MWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2k7ZnVuY3Rpb24gUCh6KXtyZXR1cm4gej4xJiZ6PDUmJjEhPX5+KHovMTApfWZ1bmN0aW9uIEYoeixOLEwsSyl7dmFyIFU9eisiICI7c3dpdGNoKEwpe2Nhc2UicyI6cmV0dXJuIE58fEs/''@;'; put 'put ''InBceGUxciBzZWt1bmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJzZWt1bmR5Ijoic2VrdW5kIik6VSsic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBOPyJtaW51dGEiOks/Im1pbnV0dSI6Im1pbnV0b3UiO2Nhc2UibW0iOnJldHVybiBOfHxL''@;'; put 'put ''P1UrKFAoeik/Im1pbnV0eSI6Im1pbnV0Iik6VSsibWludXRhbWkiO2Nhc2UiaCI6cmV0dXJuIE4/ImhvZGluYSI6Sz8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIE58fEs/VSsoUCh6KT8iaG9kaW55IjoiaG9kaW4iKTpVKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gTnx8''@;'; put 'put ''Sz8iZGVuIjoiZG5lbSI7Y2FzZSJkZCI6cmV0dXJuIE58fEs/VSsoUCh6KT8iZG55IjoiZG5ceGVkIik6VSsiZG55IjtjYXNlIk0iOnJldHVybiBOfHxLPyJtXHUwMTFic1x4ZWRjIjoibVx1MDExYnNceGVkY2VtIjtjYXNlIk1NIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJtXHUwMTFic1x4ZWRj''@;'; put 'put ''ZSI6Im1cdTAxMWJzXHhlZGNcdTAxNmYiKTpVKyJtXHUwMTFic1x4ZWRjaSI7Y2FzZSJ5IjpyZXR1cm4gTnx8Sz8icm9rIjoicm9rZW0iO2Nhc2UieXkiOnJldHVybiBOfHxLP1UrKFAoeik/InJva3kiOiJsZXQiKTpVKyJsZXR5In19SS5kZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOl8sbW9u''@;'; put 'put ''dGhzU2hvcnQ6Zyxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUwMTFidGVufGt2XHUwMTFidG5hfFx1MDEwZGVydmVu''@;'; put 'put ''ZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnxzcnBuYXx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGxl''@;'; put 'put ''ZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLHdlZWtkYXlzOiJuZWRcdTAxMWJsZV9wb25k''@;'; put 'put ''XHUwMTFibFx4ZWRfXHhmYXRlclx4ZmRfc3RcdTAxNTllZGFfXHUwMTBkdHZydGVrX3BceGUxdGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb19ceGZhdF9zdF9c''@;'; put 'put ''dTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZ''@;'; put 'put ''WVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbelx4ZWR0cmEgdl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBk''@;'; put 'put ''ZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3Zc''@;'; put 'put ''dTAxMGRlcmEgdl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bG91''@;'; put 'put ''IHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBkZGRkIFt2XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InBcdTAxNTllZCAl''@;'; put 'put ''cyIsczpGLHNzOkYsbTpGLG1tOkYsaDpGLGhoOkYsZDpGLGRkOkYsTTpGLE1NOkYseTpGLHl5OkZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NjY2NjpmdW5jdGlvbih1ZSxYLHkpeyFm''@;'; put 'put ''dW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJcdTA0M2FcdTA0ZDFcdTA0NDBcdTA0M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNj''@;'; put 'put ''XHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1''@;'; put 'put ''MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDNhXHUwNGQxXHUwNDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0''@;'; put 'put ''ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBcdTA0MzJcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MFx1''@;'; put 'put ''MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJcdTA0NDNcdTA0M2RcdTA0NDJcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZVx1MDQzZFx1''@;'; put 'put ''MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzY1x1MDQzMFx1MDQ0Mlx1MDQzYVx1''@;'; put 'put ''MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0NDBfXHUwNDQyXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2Mi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUwNDRiXHUwNDQyX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10iLExMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNi''@;'; put 'put ''XHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1''@;'; put 'put ''MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHREYXk6''@;'; put 'put ''IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4''@;'; put 'put ''dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNkXHUwNGQ3XSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVc''@;'; put 'put ''dTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKGcpe3JldHVybiBnKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMoZyk/Ilx1MDQ0MFx1MDQzNVx1MDQzZCI6L1x1MDRhYlx1MDQ0M1x1MDQz''@;'; put 'put ''YiQvaS5leGVjKGcpPyJcdTA0NDJcdTA0MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2QiKX0scGFzdDoiJXMgXHUwNDNhXHUwNDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUwNDM4XHUwNDNhIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1''@;'; put 'put ''MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVkIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsbToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoi''@;'; put 'put ''XHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUw''@;'; put 'put ''NDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIseToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRhYlx1MDQ0M1x1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0ZDdcdTA0NDgiLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDU1MTYzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiY3ki''@;'; put 'put ''LHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1Rh''@;'; put 'put ''Y2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lmb3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIsbGFzdERheToiW0Rkb2UgYW1dIExUIixsYXN0V2VlazoiZGRkZCBb''@;'; put 'put ''ZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJtZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJk''@;'; put 'put ''aXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgdz0iIjtyZXR1''@;'; put 'put ''cm4gZz4yMD93PTQwPT09Z3x8NTA9PT1nfHw2MD09PWd8fDgwPT09Z3x8MTAwPT09Zz8iZmVkIjoiYWluIjpnPjAmJih3PVsiIiwiYWYiLCJpbCIsInlkZCIsInlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZlZCIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZWci''@;'; put 'put ''LCJmZWQiLCJlZyIsImZlZCJdW2ddKSxnK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDg3MzYwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2Fwcmls''@;'; put 'put ''X21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjhuZGFnX21h''@;'; put 'put ''bmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9mcmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRkW3Mga2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG1ceGU1bmVkIixNTToi''@;'; put 'put ''JWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MzI0ODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbQisiIFRhZ2UiLEIrIiBUYWdlbiJdLHc6WyJlaW5lIFdv''@;'; put 'put ''Y2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbQisiIE1vbmF0ZSIsQisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W0IrIiBKYWhyZSIsQisiIEphaHJlbiJdfTtyZXR1cm4gdz9PW1BdWzBdOk9bUF1bMV19SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9B''@;'; put 'put ''cHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1N''@;'; put 'put ''LllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJd''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3Vu''@;'; put 'put ''ZGVuIixzczoiJWQgU2VrdW5kZW4iLG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIlZCBTdHVuZGVuIixkOl8sZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntk''@;'; put 'put ''b3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4MzIyMjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRl''@;'; put 'put ''Il0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbQisiIFRhZ2UiLEIrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbQisiIE1vbmF0ZSIsQisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5l''@;'; put 'put ''bSBKYWhyIl0seXk6W0IrIiBKYWhyZSIsQisiIEphaHJlbiJdfTtyZXR1cm4gdz9PW1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImRlLWNoIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05v''@;'; put 'put ''dmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5z''@;'; put 'put ''dGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1d''@;'; put 'put ''IExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDQ1OTMyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXttOlsiZWluZSBN''@;'; put 'put ''aW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltCKyIgVGFnZSIsQisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25h''@;'; put 'put ''dCJdLE1NOltCKyIgTW9uYXRlIixCKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbQisiIEphaHJlIixCKyIgSmFocmVuIl19O3JldHVybiB3P09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0''@;'; put 'put ''cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBM''@;'; put 'put ''VCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0''@;'; put 'put ''dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY0MDU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNzk2XHUwN2FjXHUwNzgyXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzhhXHUwN2FjXHUwNzg0XHUwN2IwXHUwNzgzXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzg5XHUwN2E3XHUwNzgzXHUwN2E4''@;'; put 'put ''XHUwNzk3XHUwN2FhIiwiXHUwNzg3XHUwN2FkXHUwNzk1XHUwN2IwXHUwNzgzXHUwN2E5XHUwNzhkXHUwN2FhIiwiXHUwNzg5XHUwN2FkIiwiXHUwNzk2XHUwN2FiXHUwNzgyXHUwN2IwIiwiXHUwNzk2XHUwN2FhXHUwNzhkXHUwN2E2XHUwNzg3XHUwN2E4IiwiXHUwNzg3XHUwN2FmXHUwNzhl''@;'; put 'put ''XHUwN2E2XHUwNzkwXHUwN2IwXHUwNzkzXHUwN2FhIiwiXHUwNzkwXHUwN2FjXHUwNzk1XHUwN2IwXHUwNzkzXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzg3XHUwN2FlXHUwNzg2XHUwN2IwXHUwNzkzXHUwN2FmXHUwNzg0XHUwN2E2XHUwNzgzXHUw''@;'; put 'put ''N2FhIiwiXHUwNzgyXHUwN2FlXHUwNzg4XHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzkxXHUwN2E4XHUwNzkwXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIl0sZz1bIlx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOFx1MDc4''@;'; put 'put ''N1x1MDdiMFx1MDc4Y1x1MDdhNiIsIlx1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNiIsIlx1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMFx1MDc4ZVx1MDdhN1x1MDc4M1x1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN1x1MDc5MFx1MDdiMFx1''@;'; put 'put ''MDc4YVx1MDdhNlx1MDc4Y1x1MDdhOCIsIlx1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhYSIsIlx1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOFx1MDc4MFx1MDdhOFx1MDc4M1x1MDdhYSJdO0kuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczpfLG1vbnRoc1Nob3J0Ol8sd2Vla2Rh''@;'; put 'put ''eXM6Zyx3ZWVrZGF5c1Nob3J0Omcsd2Vla2RheXNNaW46Ilx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZfXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgw''@;'; put 'put ''XHUwN2FhXHUwNzg2XHUwN2FhX1x1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQg''@;'; put 'put ''TU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2fFx1MDc4OVx1MDc4YS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNzg5XHUwNzhhIj09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUw''@;'; put 'put ''NzhhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA3ODlcdTA3YThcdTA3ODdcdTA3YTZcdTA3OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5XHUwN2E3XHUwNzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3''@;'; put 'put ''ODdcdTA3YjBcdTA3OTRcdTA3YWNdIExUIixsYXN0V2VlazoiW1x1MDc4YVx1MDdhN1x1MDc4N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdhOF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUw''@;'; put 'put ''N2E2XHUwNzg3XHUwN2E4ICVzIixwYXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YThcdTA3ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1''@;'; put 'put ''MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYSIsbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FjXHUwNzg3XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3''@;'; put 'put ''OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLGhoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4''@;'; put 'put ''Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUwNzg5XHUwN2E2XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5''@;'; put 'put ''OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWEgJWQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3''@;'; put 'put ''LGRveToxMn19KX0oeSg5NzU4NikpfSw2MDcxODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAz''@;'; put 'put ''YmZcdTAzYzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAz''@;'; put 'put ''YzJfXHUwMzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUw''@;'; put 'put ''M2JmXHUwM2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUw''@;'; put 'put ''M2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAz''@;'; put 'put ''YmZcdTAzYzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAz''@;'; put 'put ''YzVfXHUwMzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUw''@;'; put 'put ''M2JmXHUwM2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUw''@;'; put 'put ''M2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24oQix3KXtyZXR1cm4gQj8ic3RyaW5nIj09dHlwZW9mIHcmJi9ELy50ZXN0KHcuc3Vic3RyaW5n''@;'; put 'put ''KDAsdy5pbmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW0IubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW0IubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsfSxtb250aHNTaG9ydDoiXHUwMzk5XHUwM2IxXHUwM2JkX1x1MDNhNlx1MDNiNVx1''@;'; put 'put ''MDNiMl9cdTAzOWNcdTAzYjFcdTAzYzFfXHUwMzkxXHUwM2MwXHUwM2MxX1x1MDM5Y1x1MDNiMVx1MDNjYV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiX1x1MDM5MVx1MDNjNVx1MDNiM19cdTAzYTNcdTAzYjVcdTAzYzBfXHUwMzlmXHUwM2JhXHUw''@;'; put 'put ''M2M0X1x1MDM5ZFx1MDNiZlx1MDNiNV9cdTAzOTRcdTAzYjVcdTAzYmEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDM5YVx1MDNjNVx1MDNjMVx1MDNiOVx1MDNiMVx1MDNiYVx1MDNhZV9cdTAzOTRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYWRcdTAzYzFcdTAzYjFfXHUwM2E0XHUwM2MxXHUw''@;'; put 'put ''M2FmXHUwM2M0XHUwM2I3X1x1MDNhNFx1MDNiNVx1MDNjNFx1MDNhY1x1MDNjMVx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYWRcdTAzYmNcdTAzYzBcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2IxXHUwM2MxXHUwM2IxXHUwM2MzXHUwM2JhXHUwM2I1XHUwM2M1XHUwM2FlX1x1MDNhM1x1MDNhY1x1''@;'; put 'put ''MDNiMlx1MDNiMlx1MDNiMVx1MDNjNFx1MDNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAzOWFcdTAzYzVcdTAzYzFfXHUwMzk0XHUwM2I1XHUwM2M1X1x1MDNhNFx1MDNjMVx1MDNiOV9cdTAzYTRcdTAzYjVcdTAzYzRfXHUwM2EwXHUwM2I1XHUwM2JjX1x1MDNhMFx1MDNiMVx1''@;'; put 'put ''MDNjMV9cdTAzYTNcdTAzYjFcdTAzYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDM5YVx1MDNjNV9cdTAzOTRcdTAzYjVfXHUwM2E0XHUwM2MxX1x1MDNhNFx1MDNiNV9cdTAzYTBcdTAzYjVfXHUwM2EwXHUwM2IxX1x1MDNhM1x1MDNiMSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5j''@;'; put 'put ''dGlvbihCLHcsUCl7cmV0dXJuIEI+MTE/UD8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzljIjpQPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJcdTAzYmMiPT09KEIrIiIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tc''@;'; put 'put ''dTAzYTBcdTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2Fs''@;'; put 'put ''ZW5kYXJFbDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNiMSB7fV0gTFQiLG5leHREYXk6IltcdTAzOTFcdTAzY2RcdTAzYzFcdTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1''@;'; put 'put ''XHUwM2MyIHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5KCk/IltcdTAzYzRcdTAzYmYgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUw''@;'; put 'put ''M2I3XHUwM2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10gZGRkZCBbe31dIExUIn0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihCLHcpe3ZhciBQPXRoaXMuX2NhbGVuZGFyRWxbQl0sRj13JiZ3Lmhv''@;'; put 'put ''dXJzKCk7cmV0dXJuIGZ1bmN0aW9uIF8oQil7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJkIgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChCKX0oUCkmJihQPVAuYXBwbHkodykpLFAucmVwbGFjZSgi''@;'; put 'put ''e30iLEYlMTI9PTE/Ilx1MDNjM1x1MDNjNFx1MDNiNyI6Ilx1MDNjM1x1MDNjNFx1MDNiOVx1MDNjMiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwM2MzXHUwM2I1ICVzIixwYXN0OiIlcyBcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmQiLHM6Ilx1MDNiYlx1MDNhZlx1MDNiM1x1MDNiMSBc''@;'; put 'put ''dTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLHNzOiIlZCBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLG06Ilx1MDNhZFx1''@;'; put 'put ''MDNiZFx1MDNiMSBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzY2MiLG1tOiIlZCBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWMiLGg6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzY2VcdTAzYzFcdTAzYjEiLGhoOiIlZCBcdTAzY2VcdTAzYzFcdTAzYjVcdTAzYzIiLGQ6Ilx1MDNi''@;'; put 'put ''Y1x1MDNhZlx1MDNiMSBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEiLGRkOiIlZCBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjVcdTAzYzIiLE06Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjFcdTAzYzIiLE1NOiIlZCBcdTAzYmNcdTAzYWVcdTAzYmRc''@;'; put 'put ''dTAzYjVcdTAzYzIiLHk6Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYmZcdTAzYzIiLHl5OiIlZCBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYjlcdTAzYjEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwM2I3Lyxv''@;'; put 'put ''cmRpbmFsOiIlZFx1MDNiNyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzYzMTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1hdSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlf''@;'; put 'put ''SnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVl''@;'; put 'put ''c2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3Jt''@;'; put 'put ''YXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToi''@;'; put 'put ''W1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZl''@;'; put 'put ''dyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KHko''@;'; put 'put ''OTc1ODYpKX0sODA1OTc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJl''@;'; put 'put ''cl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1N''@;'; put 'put ''LUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBM''@;'; put 'put ''VCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUi''@;'; put 'put ''LG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX19KX0oeSg5NzU4NikpfSw1MTgwMDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''SS5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1''@;'; put 'put ''bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQg''@;'; put 'put ''TU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMi''@;'; put 'put ''LE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09''@;'; put 'put ''PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgwNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5''@;'; put 'put ''X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''U3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBM''@;'; put 'put ''VCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMg''@;'; put 'put ''YWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVh''@;'; put 'put ''cnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95OjR9fSl9KHkoOTc1ODYpKX0sOTU5NjA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1pbCIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0''@;'; put 'put ''b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5''@;'; put 'put ''X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''YXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1p''@;'; put 'put ''bnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8''@;'; put 'put ''dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfX0pfSh5KDk3NTg2KSl9LDg0NDE4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtJLmRlZmluZUxvY2FsZSgiZW4taW4iLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9N''@;'; put 'put ''YXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0''@;'; put 'put ''XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6''@;'; put 'put ''IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTAp''@;'; put 'put ''PyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDQ2ODY1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tbnoiLHttb250aHM6IkphbnVh''@;'; put 'put ''cnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0Zy''@;'; put 'put ''X1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi''@;'; put 'put ''aW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEg''@;'; put 'put ''eWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRo''@;'; put 'put ''Iil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDMyNjQ3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tc2ciLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1''@;'; put 'put ''c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5''@;'; put 'put ''X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i''@;'; put 'put ''LExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQg''@;'; put 'put ''c2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjE5MzE6ZnVu''@;'; put 'put ''Y3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbyIse21vbnRoczoiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hXHUwMTZkZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8i''@;'; put 'put ''LnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFydF9hcHJfbWFqX2p1bl9qdWxfYVx1MDE2ZGdfc2VwdF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZGltYW5cdTAxMDlvX2x1bmRvX21hcmRvX21lcmtyZWRvX1x1MDEzNWFcdTAxNmRkb192ZW5kcmVkb19zYWJh''@;'; put 'put ''dG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltX2x1bl9tYXJkX21lcmtfXHUwMTM1YVx1MDE2ZF92ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9cdTAxMzVhX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoi''@;'; put 'put ''SEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIixMTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgW2xhXSBEWy1hbiBk''@;'; put 'put ''ZV0gTU1NLCBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovW2FwXVwudFwubS9pLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuInAiPT09Zy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPjExP3c/InAudC5tLiI6IlAuVC5NLiI6dz8i''@;'; put 'put ''YS50Lm0uIjoiQS5ULk0uIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2RpYVx1MDE2ZCBqZV0gTFQiLG5leHREYXk6IltNb3JnYVx1MDE2ZCBqZV0gTFQiLG5leHRXZWVrOiJkZGRkW24gamVdIExUIixsYXN0RGF5OiJbSGllcmFcdTAxNmQgamVdIExUIixsYXN0V2VlazoiW3Bhc2ludGFuXSBk''@;'; put 'put ''ZGRkW24gamVdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwb3N0ICVzIixwYXN0OiJhbnRhXHUwMTZkICVzIixzOiJrZWxrYWogc2VrdW5kb2oiLHNzOiIlZCBzZWt1bmRvaiIsbToidW51IG1pbnV0byIsbW06IiVkIG1pbnV0b2oiLGg6InVudSBob3JvIixoaDoi''@;'; put 'put ''JWQgaG9yb2oiLGQ6InVudSB0YWdvIixkZDoiJWQgdGFnb2oiLE06InVudSBtb25hdG8iLE1NOiIlZCBtb25hdG9qIix5OiJ1bnUgamFybyIseXk6IiVkIGphcm9qIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfWEvLG9yZGluYWw6IiVkYSIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9''@;'; put 'put ''KHkoOTc1ODYpKX0sNDE4MDU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxnPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1''@;'; put 'put ''bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxCPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFi''@;'; put 'put ''cmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJlcy1kbyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLE8pe3JldHVybiBGPy8tTU1NLS8u''@;'; put 'put ''dGVzdChPKT9nW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmll''@;'; put 'put ''bWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNo''@;'; put 'put ''b3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQg''@;'; put 'put ''W2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlth''@;'; put 'put ''eWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi''@;'; put 'put ''ZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVk''@;'; put 'put ''IHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODM0NDU6ZnVuY3Rp''@;'; put 'put ''b24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxnPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2Rp''@;'; put 'put ''YyIuc3BsaXQoIl8iKSxCPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdv''@;'; put 'put ''c3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcy1teCIse21vbnRoczoiZW5l''@;'; put 'put ''cm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLE8pe3JldHVybiBGPy8tTU1NLS8udGVzdChPKT9nW0YubW9udGgoKV06X1tG''@;'; put 'put ''Lm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhz''@;'; put 'put ''U2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5''@;'; put 'put ''czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9t''@;'; put 'put ''aV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygx''@;'; put 'put ''IT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6''@;'; put 'put ''IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNl''@;'; put 'put ''Z3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNl''@;'; put 'put ''cyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KHkoOTc1ODYpKX0sODE1MTY6ZnVuY3Rp''@;'; put 'put ''b24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxnPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2Rp''@;'; put 'put ''YyIuc3BsaXQoIl8iKSxCPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdv''@;'; put 'put ''c3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRoczoiZW5l''@;'; put 'put ''cm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLE8pe3JldHVybiBGPy8tTU1NLS8udGVzdChPKT9nW0YubW9udGgoKV06X1tG''@;'; put 'put ''Lm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhz''@;'; put 'put ''U2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5''@;'; put 'put ''czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9t''@;'; put 'put ''aV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJNTS9ERC9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1t''@;'; put 'put ''IEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEg''@;'; put 'put ''YSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3Vy''@;'; put 'put ''cygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6''@;'; put 'put ''InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06''@;'; put 'put ''IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sNDY2Nzk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxnPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxCPVsvXmVuZS9p''@;'; put 'put ''LC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxu''@;'; put 'put ''b3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlv''@;'; put 'put ''X2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLE8pe3JldHVybiBGPy8tTU1NLS8udGVzdChPKT9nW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4Oncs''@;'; put 'put ''bW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98''@;'; put 'put ''ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlc''@;'; put 'put ''eGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0g''@;'; put 'put ''WVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0g''@;'; put 'put ''TFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06''@;'; put 'put ''InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4''@;'; put 'put ''ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KHkoOTc1ODYpKX0sODgxNTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e3M6WyJtXHhmNW5lIHNla3VuZGkiLCJtXHhmNW5pIHNla3VuZCIsInBhYXIgc2VrdW5kaXQiXSxzczpbQisic2VrdW5kaSIsQisic2VrdW5kaXQiXSxtOlsiXHhmY2hlIG1pbnV0aSIsIlx4ZmNrcyBtaW51dCJdLG1tOltCKyIg''@;'; put 'put ''bWludXRpIixCKyIgbWludXRpdCJdLGg6WyJceGZjaGUgdHVubmkiLCJ0dW5kIGFlZ2EiLCJceGZja3MgdHVuZCJdLGhoOltCKyIgdHVubmkiLEIrIiB0dW5kaSJdLGQ6WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCJceGZja3Mg''@;'; put 'put ''a3V1Il0sTU06W0IrIiBrdXUiLEIrIiBrdXVkIl0seTpbIlx4ZmNoZSBhYXN0YSIsImFhc3RhIiwiXHhmY2tzIGFhc3RhIl0seXk6W0IrIiBhYXN0YSIsQisiIGFhc3RhdCJdfTtyZXR1cm4gdz9PW1BdWzJdP09bUF1bMl06T1tQXVsxXTpGP09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbVx4ZTRydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFhbl92ZWVicl9tXHhlNHJ0c19hcHJfbWFpX2p1''@;'; put 'put ''dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoicFx4ZmNoYXBceGU0ZXZfZXNtYXNwXHhlNGV2X3RlaXNpcFx4ZTRldl9rb2xtYXBceGU0ZXZfbmVsamFwXHhlNGV2X3JlZWRlX2xhdXBceGU0ZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''UF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RceGU0bmEsXSBMVCIsbmV4dERheToiW0hvbW1lLF0gTFQiLG5leHRXZWVrOiJbSlx4ZTRyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0gTFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRyYXN0IixwYXN0OiIlcyB0YWdhc2kiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDoiJWQgcFx4ZTRldmEiLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx''@;'; put 'put ''LDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODA3NTc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJldSIse21vbnRoczoidXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxh''@;'; put 'put ''X21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuIi5zcGxpdCgiXyIpLG1vbnRoc1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsd2Vla2RheXM6ImlnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0ZWF6a2VuYV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJpZ19hbF9hcl9hel9vZ19vbF9sciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1b''@;'; put 'put ''cmVuXSBEW2FdIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsbDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoiZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRbZXRhbl0iLG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10gZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRvIGJhdHp1ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3JkdSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJo''@;'; put 'put ''aWxhYmV0ZSBiYXQiLE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDY1NzQyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1''@;'; put 'put ''bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNmYxIiwyOiJcdTA2ZjIiLDM6Ilx1MDZmMyIsNDoiXHUwNmY0Iiw1OiJcdTA2ZjUiLDY6Ilx1MDZmNiIsNzoiXHUwNmY3Iiw4OiJcdTA2ZjgiLDk6Ilx1MDZmOSIsMDoiXHUwNmYwIn0sZz17Ilx1MDZmMSI6IjEiLCJcdTA2ZjIi''@;'; put 'put ''OiIyIiwiXHUwNmYzIjoiMyIsIlx1MDZmNCI6IjQiLCJcdTA2ZjUiOiI1IiwiXHUwNmY2IjoiNiIsIlx1MDZmNyI6IjciLCJcdTA2ZjgiOiI4IiwiXHUwNmY5IjoiOSIsIlx1MDZmMCI6IjAifTtJLmRlZmluZUxvY2FsZSgiZmEiLHttb250aHM6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1''@;'; put 'put ''MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0''@;'; put 'put ''N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUw''@;'; put 'put ''NjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3''@;'; put 'put ''X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUw''@;'; put 'put ''NjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2''@;'; put 'put ''MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUw''@;'; put 'put ''NjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4''@;'; put 'put ''XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2MmNfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzF8XHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2''@;'; put 'put ''MzhcdTA2NDdcdTA2MzEvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuL1x1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2Mjdc''@;'; put 'put ''dTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIjoiXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NVx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbXHUwNjQxXHUwNjMxXHUwNjJmXHUwNjI3IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNmNjXHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYz''@;'; put 'put ''OVx1MDYyYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2N2VcdTA2Y2NcdTA2MzRdIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MmZcdTA2MzEgJXMiLHBhc3Q6IiVzIFx1MDY3ZVx1MDZjY1x1MDYzNCIsczoi''@;'; put 'put ''XHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsbToiXHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDZjY1x1''@;'; put 'put ''MDY0Mlx1MDY0NyIsaDoiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsZDoiXHUwNmNjXHUwNmE5IFx1MDYzMVx1MDY0OFx1MDYzMiIsZGQ6IiVkIFx1MDYzMVx1MDY0OFx1MDYzMiIsTToiXHUwNmNjXHUwNmE5''@;'; put 'put ''IFx1MDY0NVx1MDYyN1x1MDY0NyIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0NyIseToiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2ZjAtXHUwNmY5''@;'; put 'put ''XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sZGF5T2ZNb250aE9yZGlu''@;'; put 'put ''YWxQYXJzZTovXGR7MSwyfVx1MDY0NS8sb3JkaW5hbDoiJWRcdTA2NDUiLHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSwzMzk1ODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89Im5vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsalx4ZTQg''@;'; put 'put ''dmlpc2kga3V1c2kgc2VpdHNlbVx4ZTRuIGthaGRla3NhbiB5aGRla3NceGU0biIuc3BsaXQoIiAiKSxnPVsibm9sbGEiLCJ5aGRlbiIsImthaGRlbiIsImtvbG1lbiIsIm5lbGpceGU0biIsInZpaWRlbiIsImt1dWRlbiIsX1s3XSxfWzhdLF9bOV1dO2Z1bmN0aW9uIEIoRixPLHosTil7dmFy''@;'; put 'put ''IEw9IiI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIE4/Im11dXRhbWFuIHNla3VubmluIjoibXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjpMPU4/InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJuIE4/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOkw9Tj8i''@;'; put 'put ''bWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIE4/InR1bm5pbiI6InR1bnRpIjtjYXNlImhoIjpMPU4/InR1bm5pbiI6InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gTj8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOkw9Tj8icFx4ZTRp''@;'; put 'put ''dlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBOPyJrdXVrYXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJNTSI6TD1OPyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0dXJuIE4/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjpMPU4/InZ1''@;'; put 'put ''b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIHcoRixPKXtyZXR1cm4gRjwxMD9PP2dbRl06X1tGXTpGfShGLE4pKyIgIitMfUkuZGVmaW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVp''@;'; put 'put ''blx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InRhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3Bl''@;'; put 'put ''X2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xv''@;'; put 'put ''XSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJb''@;'; put 'put ''aHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIs''@;'; put 'put ''cGFzdDoiJXMgc2l0dGVuIixzOkIsc3M6QixtOkIsbW06QixoOkIsaGg6QixkOkIsZGQ6QixNOkIsTU06Qix5OkIseXk6Qn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDQ2NzIwOmZ1bmN0''@;'; put 'put ''aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZmlsIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y''@;'; put 'put ''dDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixM''@;'; put 'put ''TEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJM''@;'; put 'put ''VCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNh''@;'; put 'put ''bmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov''@;'; put 'put ''XGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sOTgzNTI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJf''@;'; put 'put ''bWFyc19hcHJceGVkbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''InN1bm51ZGFndXJfbVx4ZTFuYWRhZ3VyX3RceGZkc2RhZ3VyX21pa3VkYWd1cl9oXHhmM3NkYWd1cl9mclx4ZWRnZ2phZGFndXJfbGV5Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl90XHhmZHNfbWlrX2hceGYzc19mclx4ZWRfbGV5Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJzdV9tXHhlMV90XHhmZF9taV9oXHhmM19mcl9sZSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQg''@;'; put 'put ''RC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4Y2QgbW9yZ2luIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhjZCBnalx4ZTFyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRc''@;'; put 'put ''eGYwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InVtICVzIixwYXN0OiIlcyBzXHhlZFx4ZjBhbmkiLHM6ImZceGUxIHNla3VuZCIsc3M6IiVkIHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHRc''@;'; put 'put ''eGVkbWkiLGhoOiIlZCB0XHhlZG1hciIsZDoiZWluIGRhZ3VyIixkZDoiJWQgZGFnYXIiLE06ImVpbiBtXHhlMW5hXHhmMHVyIixNTToiJWQgbVx4ZTFuYVx4ZjBpciIseToiZWl0dCBceGUxciIseXk6IiVkIFx4ZTFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRp''@;'; put 'put ''bmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDQyMDk2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZnItY2EiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1''@;'; put 'put ''aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQg''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJu''@;'; put 'put ''aWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIl''@;'; put 'put ''ZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtkZWZhdWx0OmNh''@;'; put 'put ''c2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBnKygxPT09Zz8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKygxPT09Zz8icmUiOiJlIil9fX0pfSh5KDk3NTg2KSl9LDk1NzU5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZnItY2giLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5f''@;'; put 'put ''Zlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4g''@;'; put 'put ''XHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxx''@;'; put 'put ''dWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBnKygxPT09Zz8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJl''@;'; put 'put ''dHVybiBnKygxPT09Zz8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MDU5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgQj0vKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFv''@;'; put 'put ''XHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuP3xqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksdz1bL15qYW52L2ksL15mXHhlOXZyL2ksL15tYXJz''@;'; put 'put ''L2ksL15hdnIvaSwvXm1haS9pLC9eanVpbi9pLC9eanVpbC9pLC9eYW9ceGZidC9pLC9ec2VwdC9pLC9eb2N0L2ksL15ub3YvaSwvXmRceGU5Yy9pXTtJLmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9c''@;'; put 'put ''eGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6''@;'; put 'put ''Qixtb250aHNTaG9ydFJlZ2V4OkIsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6Lyhq''@;'; put 'put ''YW52XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj8pL2ksbW9udGhzUGFyc2U6dyxsb25nTW9udGhzUGFyc2U6dyxzaG9ydE1vbnRoc1BhcnNlOncsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRp''@;'; put 'put ''X21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltB''@;'; put 'put ''dWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLHc6InVu''@;'; put 'put ''ZSBzZW1haW5lIix3dzoiJWQgc2VtYWluZXMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8KS8sb3JkaW5hbDpmdW5jdGlvbihGLE8pe3N3aXRjaChPKXtjYXNlIkQiOnJldHVybiBGKygx''@;'; put 'put ''PT09Rj8iZXIiOiIiKTtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gRisoMT09PUY/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gRisoMT09PUY/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMTU5NTg6''@;'; put 'put ''ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21haV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLGc9Imphbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9u''@;'; put 'put ''b3ZfZGVzIi5zcGxpdCgiXyIpO0kuZGVmaW5lTG9jYWxlKCJmeSIse21vbnRoczoiamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDpmdW5jdGlvbih3LFApe3JldHVybiB3Py8tTU1NLS8udGVzdChQKT9nW3cubW9udGgoKV06X1t3Lm1vbnRoKCldOl99LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6InNpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU2lfTW9fVGlfV29fVG9fRnJfU28iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGpvZWQgb21dIExUIixuZXh0RGF5OiJbbW9hcm4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21d''@;'; put 'put ''IExUIixsYXN0RGF5OiJbanVzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltceGY0ZnJceGZibmVdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib2VyICVzIixwYXN0OiIlcyBseW4iLHM6ImluIHBlYXIgc2Vrb25kZW4iLHNzOiIlZCBzZWtvbmRlbiIs''@;'; put 'put ''bToiaWVuIG1pblx4ZmF0IixtbToiJWQgbWludXRlbiIsaDoiaWVuIG9lcmUiLGhoOiIlZCBvZXJlbiIsZDoiaWVuIGRlaSIsZGQ6IiVkIGRhZ2VuIixNOiJpZW4gbW9hbm5lIixNTToiJWQgbW9hbm5lbiIseToiaWVuIGppZXIiLHl5OiIlZCBqaWVycmVuIn0sZGF5T2ZNb250aE9yZGluYWxQ''@;'; put 'put ''YXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KygxPT09d3x8OD09PXd8fHc+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw5NDE0MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7SS5kZWZpbmVMb2NhbGUoImdhIix7bW9udGhzOlsiRWFuXHhlMWlyIiwiRmVhYmhyYSIsIk1ceGUxcnRhIiwiQWlicmVceGUxbiIsIkJlYWx0YWluZSIsIk1laXRoZWFtaCIsIklceGZhaWwiLCJMXHhmYW5hc2EiLCJNZVx4ZTFuIEZceGYzbWhhaXIiLCJEZWlyZWFkaCBGXHhmM21oYWly''@;'; put 'put ''IiwiU2FtaGFpbiIsIk5vbGxhaWciXSxtb250aHNTaG9ydDpbIkVhbiIsIkZlYWJoIiwiTVx4ZTFydCIsIkFpYiIsIkJlYWwiLCJNZWl0aCIsIklceGZhaWwiLCJMXHhmYW4iLCJNLkYuIiwiRC5GLiIsIlNhbWgiLCJOb2xsIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRceGU5''@;'; put 'put ''IERvbWhuYWlnaCIsIkRceGU5IEx1YWluIiwiRFx4ZTkgTVx4ZTFpcnQiLCJEXHhlOSBDXHhlOWFkYW9pbiIsIkRceGU5YXJkYW9pbiIsIkRceGU5IGhBb2luZSIsIkRceGU5IFNhdGhhaXJuIl0sd2Vla2RheXNTaG9ydDpbIkRvbWgiLCJMdWFuIiwiTVx4ZTFpcnQiLCJDXHhlOWFkIiwiRFx4''@;'; put 'put ''ZTlhciIsIkFvaW5lIiwiU2F0aCJdLHdlZWtkYXlzTWluOlsiRG8iLCJMdSIsIk1ceGUxIiwiQ1x4ZTkiLCJEXHhlOSIsIkEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lubml1IGFnXSBMVCIsbmV4dERheToiW0FtXHhlMXJhY2ggYWddIExUIixuZXh0V2VlazoiZGRkZCBbYWddIExUIixsYXN0RGF5OiJbSW5uXHhlOSBhZ10gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImkgJXMiLHBhc3Q6IiVzIFx4ZjMgc2hpbiIsczoiY1x4ZmFwbGEgc29pY2luZCIsc3M6IiVkIHNvaWNpbmQiLG06Im5ceGYzaW1ceGU5YWQiLG1tOiIlZCBuXHhmM2ltXHhlOWFk''@;'; put 'put ''IixoOiJ1YWlyIGFuIGNobG9pZyIsaGg6IiVkIHVhaXIgYW4gY2hsb2lnIixkOiJsXHhlMSIsZGQ6IiVkIGxceGUxIixNOiJtXHhlZCIsTU06IiVkIG1ceGVkb25uYSIseToiYmxpYWluIix5eToiJWQgYmxpYWluIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbihPKXtyZXR1cm4gTysoMT09PU8/ImQiOk8lMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjcwMjg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJnZCIse21v''@;'; put 'put ''bnRoczpbIkFtIEZhb2lsbGVhY2giLCJBbiBHZWFycmFuIiwiQW0gTVx4ZTBydCIsIkFuIEdpYmxlYW4iLCJBbiBDXHhlOGl0ZWFuIiwiQW4gdC1ceGQyZ21oaW9zIiwiQW4gdC1JdWNoYXIiLCJBbiBMXHhmOW5hc3RhbCIsIkFuIHQtU3VsdGFpbiIsIkFuIERceGUwbWhhaXIiLCJBbiB0LVNh''@;'; put 'put ''bWhhaW4iLCJBbiBEXHhmOWJobGFjaGQiXSxtb250aHNTaG9ydDpbIkZhb2kiLCJHZWFyIiwiTVx4ZTBydCIsIkdpYmwiLCJDXHhlOGl0IiwiXHhkMmdtaCIsIkl1Y2giLCJMXHhmOW4iLCJTdWx0IiwiRFx4ZTBtaCIsIlNhbWgiLCJEXHhmOWJoIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVr''@;'; put 'put ''ZGF5czpbIkRpZFx4ZjJtaG5haWNoIiwiRGlsdWFpbiIsIkRpbVx4ZTBpcnQiLCJEaWNpYWRhaW4iLCJEaWFyZGFvaW4iLCJEaWhhb2luZSIsIkRpc2F0aGFpcm5lIl0sd2Vla2RheXNTaG9ydDpbIkRpZCIsIkRpbCIsIkRpbSIsIkRpYyIsIkRpYSIsIkRpaCIsIkRpcyJdLHdlZWtkYXlzTWlu''@;'; put 'put ''OlsiRFx4ZjIiLCJMdSIsIk1ceGUwIiwiQ2kiLCJBciIsIkhhIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBbi1kaXVnaCBhaWddIExUIixuZXh0RGF5OiJbQS1tXHhlMGlyZWFjaCBhaWddIExUIixuZXh0V2VlazoiZGRkZCBbYWlnXSBMVCIsbGFzdERheToiW0FuLWRceGU4IGFpZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2hhaWRoXSBbYWln''@;'; put 'put ''XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYW5uIGFuICVzIixwYXN0OiJiaG8gY2hpb25uICVzIixzOiJiZWFnYW4gZGlvZ2FuIixzczoiJWQgZGlvZ2FuIixtOiJtaW9uYWlkIixtbToiJWQgbWlvbmFpZGVhbiIsaDoidWFpciIsaGg6IiVkIHVhaXJlYW4iLGQ6''@;'; put 'put ''ImxhdGhhIixkZDoiJWQgbGF0aGEiLE06Im1ceGVjb3MiLE1NOiIlZCBtXHhlY29zYW4iLHk6ImJsaWFkaG5hIix5eToiJWQgYmxpYWRobmEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKE8pe3JldHVybiBPKygxPT09Tz8iZCI6''@;'; put 'put ''TyUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4MDQyODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImdsIix7bW9udGhzOiJ4YW5laXJvX2ZlYnJlaXJvX21hcnpvX2FicmlsX21haW9f''@;'; put 'put ''eHVceGYxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1XHhmMS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFy''@;'; put 'put ''c2VFeGFjdDohMCx3ZWVrZGF5czoiZG9taW5nb19sdW5zX21hcnRlc19tXHhlOXJjb3Jlc194b3Zlc192ZW5yZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21ceGU5ci5feG92Ll92ZW4uX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46ImRvX2x1X21hX21ceGU5X3hvX3ZlX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBb''@;'; put 'put ''ZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG94ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iW21hXHhmMVx4ZTEgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFsiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW29udGUg''@;'; put 'put ''IisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMSI6ImEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltvXSBkZGRkIFtwYXNhZG8gIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiAwPT09Zy5pbmRleE9mKCJ1biIpPyJuIitnOiJlbiAiK2d9LHBhc3Q6ImhhaSAlcyIsczoidW5zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuaGEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhl''@;'; put 'put ''ZGEiLGRkOiIlZCBkXHhlZGFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDc2ODYxOmZ1''@;'; put 'put ''bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXtzOlsiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTJmXHUwOTNlIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsIlx1MDky''@;'; put 'put ''NVx1MDk0Ylx1MDkyMVx1MDk0NyBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxzczpbQisiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQisiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLG06WyJcdTA5MGZc''@;'; put 'put ''dTA5MTVcdTA5M2UgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0Mlx1MDkxZiJdLG1tOltCKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIgXHUwOTJl''@;'; put 'put ''XHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyIl0saDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwIl0saGg6W0IrIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIrIiBcdTA5''@;'; put 'put ''MzVcdTA5MzBcdTA5M2VcdTA5MDIiXSxkOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5NDBcdTA5MzgiXSxkZDpbQisiIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIs''@;'; put 'put ''QisiIFx1MDkyNlx1MDk0MFx1MDkzOCJdLE06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0YiJdLE1NOltCKyIg''@;'; put 'put ''XHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4XHUwOTQwIixCKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTQ3Il0seTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5Mjgi''@;'; put 'put ''LCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4Il0seXk6W0IrIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDIiXX07cmV0dXJuIEY/T1tQXVswXTpPW1Bd''@;'; put 'put ''WzFdfUkuZGVmaW5lTG9jYWxlKCJnb20tZGV2YSIse21vbnRoczp7c3RhbmRhbG9uZToiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5''@;'; put 'put ''MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFc''@;'; put 'put ''dTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJc''@;'; put 'put ''dTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQw''@;'; put 'put ''XHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYVx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTQ3''@;'; put 'put ''XHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0Mlx1MDkyOFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRk''@;'; put 'put ''XHUwOTFmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBcdTA5M2Vc''@;'; put 'put ''dTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1''@;'; put 'put ''MDk0ZFx1MDkyZlx1MDkzZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFf''@;'; put 'put ''XHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwLl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0''@;'; put 'put ''Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkyZlx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJc''@;'; put 'put ''dTA5MmVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTQxXHUwOTE1''@;'; put 'put ''XHUwOTRkXHUwOTMwXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0N1x1MDkyOFx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MmZcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzLl9cdTA5MmNcdTA5''@;'; put 'put ''NDFcdTA5MjcuX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNC5fXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5NDdcdTA5MjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDZfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9c''@;'; put 'put ''dTA5MmNcdTA5NDFfXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3X1x1MDkzOFx1MDk0MV9cdTA5MzZcdTA5NDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixM''@;'; put 'put ''VFM6IkEgaDptbTpzcyBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTExMTDoiZGRkZCwgTU1N''@;'; put 'put ''TSBEbywgWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTJmXHUw''@;'; put 'put ''OTFjXSBMVCIsbmV4dERheToiW1x1MDkyYlx1MDkzZVx1MDkzMlx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMl0gTFQiLG5leHRXZWVrOiJbXHUwOTJiXHUwOTQxXHUwOTIxXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6''@;'; put 'put ''IltcdTA5MmJcdTA5M2VcdTA5MWZcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBcdTA5MDZcdTA5MjZcdTA5NDBcdTA5MDIiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpf''@;'; put 'put ''LHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0N1x1MDkzMCkvLG9yZGluYWw6ZnVuY3Rpb24oQix3KXtyZXR1cm4iRCI9PT13P0IrIlx1MDkzNVx1MDk0N1x1MDkzMCI6Qn0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L1x1MDkz''@;'; put 'put ''MFx1MDkzZVx1MDkyNFx1MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDJ8XHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEIsdyl7cmV0dXJu''@;'; put 'put ''IDEyPT09QiYmKEI9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT13P0I8ND9COkIrMTI6Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT13P0I6Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI9PT13P0I+MTI/QjpCKzEyOiJc''@;'; put 'put ''dTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciPT09dz9CKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI6QjwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIjpCPDE2PyJcdTA5''@;'; put 'put ''MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOkI8MjA/Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCJ9fSl9KHkoOTc1ODYpKX0sNTc3MTg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e3M6WyJ0aG9kZGVhIHNla29uZGFtbmkiLCJ0aG9kZGUgc2Vrb25kIl0sc3M6W0IrIiBzZWtvbmRhbW5pIixCKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1tOltCKyIgbWludGFtbmkiLEIrIiBtaW50YW0iXSxo''@;'; put 'put ''OlsiZWthIHZvcmFuIiwiZWsgdm9yIl0saGg6W0IrIiB2b3JhbW5pIixCKyIgdm9yYW0iXSxkOlsiZWthIGRpc2FuIiwiZWsgZGlzIl0sZGQ6W0IrIiBkaXNhbW5pIixCKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltCKyIgbWhvaW5lYW1uaSIsQisiIG1ob2lu''@;'; put 'put ''ZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3MiXSx5eTpbQisiIHZvcnNhbW5pIixCKyIgdm9yc2FtIl19O3JldHVybiBGP09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZ29tLWxhdG4iLHttb250aHM6e3N0YW5kYWxvbmU6IkphbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9K''@;'; put 'put ''dW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnIiLnNwbGl0KCJfIiksZm9ybWF0OiJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1''@;'; put 'put ''YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsd2Vla2RheXM6IkFpdGFyX1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmlyZXN0YXJfU3VrcmFyX1Nvbid2YXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWlf''@;'; put 'put ''U21fTW9fQnVfQnJfU3VfU24iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFt2YXp0YV0iLExUUzoiQSBoOm1tOnNzIFt2YXp0YV0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6''@;'; put 'put ''bW0gW3ZhenRhXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0ifSxjYWxlbmRhcjp7c2FtZURheToiW0Fpel0gTFQiLG5leHREYXk6IltGYWxlYW1dIExUIixuZXh0V2VlazoiW0Z1ZGRsb10g''@;'; put 'put ''ZGRkZFssXSBMVCIsbGFzdERheToiW0thbF0gTFQiLGxhc3RXZWVrOiJbRmF0dGxvXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgYWRpbSIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpf''@;'; put 'put ''LHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXIpLyxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIkQiPT09dz9CKyJlciI6Qn0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLG1lcmlkaWVtSG91''@;'; put 'put ''cjpmdW5jdGlvbihCLHcpe3JldHVybiAxMj09PUImJihCPTApLCJyYXRpIj09PXc/Qjw0P0I6QisxMjoic29rYWxsaW0iPT09dz9COiJkb25wYXJhbSI9PT13P0I+MTI/QjpCKzEyOiJzYW5qZSI9PT13P0IrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8ND8i''@;'; put 'put ''cmF0aSI6QjwxMj8ic29rYWxsaW0iOkI8MTY/ImRvbnBhcmFtIjpCPDIwPyJzYW5qZSI6InJhdGkifX0pfSh5KDk3NTg2KSl9LDI2ODI3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwYWU3IiwyOiJcdTBhZTgiLDM6Ilx1MGFlOSIsNDoi''@;'; put 'put ''XHUwYWVhIiw1OiJcdTBhZWIiLDY6Ilx1MGFlYyIsNzoiXHUwYWVkIiw4OiJcdTBhZWUiLDk6Ilx1MGFlZiIsMDoiXHUwYWU2In0sZz17Ilx1MGFlNyI6IjEiLCJcdTBhZTgiOiIyIiwiXHUwYWU5IjoiMyIsIlx1MGFlYSI6IjQiLCJcdTBhZWIiOiI1IiwiXHUwYWVjIjoiNiIsIlx1MGFlZCI6''@;'; put 'put ''IjciLCJcdTBhZWUiOiI4IiwiXHUwYWVmIjoiOSIsIlx1MGFlNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiZ3UiLHttb250aHM6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzFc''@;'; put 'put ''dTBhODZcdTBhYjBcdTBhYzBfXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZlx1MGFiMl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZVx1MGE4OF9cdTBhOTFcdTBhOTdcdTBh''@;'; put 'put ''YjhcdTBhY2RcdTBhOWZfXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYThcdTBhYjVcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWExXHUw''@;'; put 'put ''YWJmXHUwYWI4XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzEuX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMS5fXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNk''@;'; put 'put ''XHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZi5fXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmUuX1x1MGE5MVx1MGE5Ny5fXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3Ll9cdTBhOTFcdTBhOTVcdTBhY2RcdTBh''@;'; put 'put ''OWZcdTBhY2QuX1x1MGFhOFx1MGFiNVx1MGFjNy5fXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBhYjBcdTBhYjVcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI4XHUwYWNiXHUwYWFlXHUwYWI1XHUwYWJl''@;'; put 'put ''XHUwYWIwX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM1x1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFi''@;'; put 'put ''MFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYWIwXHUwYWI1XHUwYWJmX1x1MGFiOFx1MGFjYlx1MGFhZV9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNfXHUwYWFjXHUwYWMxXHUwYWE3''@;'; put 'put ''XHUwYWNkX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMV9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhYjBfXHUwYWI4XHUwYWNiX1x1MGFhZVx1MGE4Ml9cdTBhYWNcdTBhYzFfXHUwYTk3XHUwYWMx''@;'; put 'put ''X1x1MGFiNlx1MGFjMV9cdTBhYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMVFM6IkEgaDptbTpzcyBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLEw6IkREL01NL1lZWVki''@;'; put 'put ''LExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzcifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW1x1MGE4Nlx1MGE5Y10gTFQiLG5leHREYXk6IltcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhOTdcdTBhODdcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixsYXN0V2VlazoiW1x1MGFhYVx1MGFiZVx1MGE5''@;'; put 'put ''Ylx1MGFiMlx1MGFiZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGFhZVx1MGFiZSIscGFzdDoiJXMgXHUwYWFhXHUwYWI5XHUwYWM3XHUwYWIyXHUwYWJlIixzOiJcdTBhODVcdTBhYWVcdTBhYzFcdTBhOTUgXHUwYWFhXHUwYWIzXHUwYWNi''@;'; put 'put ''IixzczoiJWQgXHUwYWI4XHUwYWM3XHUwYTk1XHUwYTgyXHUwYWExIixtOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixtbToiJWQgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixoOiJcdTBhOGZcdTBhOTUgXHUwYTk1XHUwYWIyXHUwYWJlXHUw''@;'; put 'put ''YTk1IixoaDoiJWQgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixkOiJcdTBhOGZcdTBhOTUgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixkZDoiJWQgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixNOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIixNTToi''@;'; put 'put ''JWQgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIix5OiJcdTBhOGZcdTBhOTUgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3Iix5eToiJWQgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGFlN1x1MGFlOFx1''@;'; put 'put ''MGFlOVx1MGFlYVx1MGFlYlx1MGFlY1x1MGFlZFx1MGFlZVx1MGFlZlx1MGFlNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTov''@;'; put 'put ''XHUwYWIwXHUwYWJlXHUwYWE0fFx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMHxcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjB8XHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYWIwXHUwYWJlXHUwYWE0Ij09''@;'; put 'put ''PVA/dzw0P3c6dysxMjoiXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIj09PVA/dzoiXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIj09PVA/dz49MTA/dzp3KzEyOiJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVy''@;'; put 'put ''biB3PDQ/Ilx1MGFiMFx1MGFiZVx1MGFhNCI6dzwxMD8iXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIjp3PDE3PyJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiOnc8MjA/Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI6Ilx1MGFiMFx1MGFiZVx1MGFhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0p''@;'; put 'put ''fSh5KDk3NTg2KSl9LDIxOTM2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWRl''@;'; put 'put ''XHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUxXHUwNWU0XHUw''@;'; put 'put ''NWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA1ZDlc''@;'; put 'put ''dTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUw''@;'; put 'put ''NWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5XHUwNWQ1XHUw''@;'; put 'put ''NWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUwNWVhIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1ZDJfXHUwNWQz''@;'; put 'put ''X1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW1x1''@;'; put 'put ''MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFcdTA1YmVdTFQi''@;'; put 'put ''LG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RXZWVrOiJbXHUw''@;'; put 'put ''NWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQzICVzIixwYXN0''@;'; put 'put ''OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06IiVkIFx1MDVk''@;'; put 'put ''M1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlvbihnKXtyZXR1cm4gMj09PWc/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6ZysiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVkNVx1MDVkZCIs''@;'; put 'put ''ZGQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmcrIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKGcpe3JldHVybiAyPT09Zz8iXHUwNWQ3XHUw''@;'; put 'put ''NWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjpnKyIgXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihnKXtyZXR1cm4gMj09PWc/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1MDVkOVx1MDVk''@;'; put 'put ''ZCI6ZyUxMD09MCYmMTAhPT1nP2crIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOmcrIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVl''@;'; put 'put ''OFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUw''@;'; put 'put ''NWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1''@;'; put 'put ''MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDU/Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOmc8MTA/Ilx1MDVk''@;'; put 'put ''MVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6ZzwxMj93PydcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2JzoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6ZzwxOD93PydcdTA1ZDBcdTA1ZDdcdTA1ZDQi''@;'; put 'put ''XHUwNWU2JzoiXHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6Ilx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSJ9fSl9KHkoOTc1ODYpKX0sMzEzMzI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxnPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwi''@;'; put 'put ''XHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LEI9Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzB8XHUwOTJiXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5''@;'; put 'put ''MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJ8XHUwOTM4''@;'; put 'put ''XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1MDkyOFx1MDkzNXxcdTA5MjhcdTA5MzVcdTA5MDIvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMnxcdTA5MjZcdTA5M2ZcdTA5MzgvaV07SS5kZWZpbmVMb2NhbGUoImhpIix7bW9udGhzOntm''@;'; put 'put ''b3JtYXQ6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUw''@;'; put 'put ''OTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5Mjhc''@;'; put 'put ''dTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJl''@;'; put 'put ''XHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUw''@;'; put 'put ''OTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoi''@;'; put 'put ''XHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5M2NcdTA5MzAuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDguX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MDVcdTA5MTcuX1x1''@;'; put 'put ''MDkzOFx1MDkzZlx1MDkyNC5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyLl9cdTA5MjhcdTA5MzUuX1x1MDkyNlx1MDkzZlx1MDkzOC4iLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5''@;'; put 'put ''MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUw''@;'; put 'put ''OTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMl9cdTA5MmNcdTA5NDFcdTA5''@;'; put 'put ''MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUw''@;'; put 'put ''OTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQSBoOm1tOnNzIFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6''@;'; put 'put ''bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyJ9LG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpbL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMC9p''@;'; put 'put ''LC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNm''@;'; put 'put ''XHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1MDkyOFx1MDkzNS9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4L2ldLG1vbnRoc1JlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMw''@;'; put 'put ''XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMw''@;'; put 'put ''XHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUw''@;'; put 'put ''OTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5Mjhc''@;'; put 'put ''dTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1''@;'; put 'put ''MDkzZlx1MDkzOFwuPykvaSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5M2Nc''@;'; put 'put ''dTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJc''@;'; put 'put ''dTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5''@;'; put 'put ''MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwfFx1''@;'; put 'put ''MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBc''@;'; put 'put ''dTA5NDA/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyP3xcdTA5MmVcdTA5MDg/fFx1MDkx''@;'; put 'put ''Y1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4P3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjQ/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4''@;'; put 'put ''XHUwOTNmXHUwOTI0P1wuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzA/fFx1''@;'; put 'put ''MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzA/KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBc''@;'; put 'put ''dTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFm''@;'; put 'put ''XHUwOTQyXC4/fFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6IltcdTA5MmFcdTA5M2ZcdTA5MWJcdTA5MzJcdTA5NDddIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5MmVcdTA5NDdcdTA5MDIiLHBhc3Q6IiVzIFx1MDkyYVx1MDkzOVx1MDkzMlx1MDk0NyIsczoiXHUwOTE1XHUwOTQxXHUw''@;'; put 'put ''OTFiIFx1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLGg6Ilx1MDkw''@;'; put 'put ''Zlx1MDkxNSBcdTA5MThcdTA5MDJcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MDJcdTA5MWZcdTA5NDciLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5NDBc''@;'; put 'put ''dTA5MjhcdTA5NDciLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5NDciLHk6Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciLHl5OiIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzcifSxwcmVwYXJzZTpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNl''@;'; put 'put ''KC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBnW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4gX1tPXX0p''@;'; put 'put ''fSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjR8XHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5fFx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMHxcdTA5MzZcdTA5M2VcdTA5MmUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihGLE8pe3JldHVybiAxMj09PUYmJihGPTApLCJcdTA5''@;'; put 'put ''MzBcdTA5M2VcdTA5MjQiPT09Tz9GPDQ/RjpGKzEyOiJcdTA5MzhcdTA5NDFcdTA5MmNcdTA5MzkiPT09Tz9GOiJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiPT09Tz9GPj0xMD9GOkYrMTI6Ilx1MDkzNlx1MDkzZVx1MDkyZSI9PT1PP0YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5j''@;'; put 'put ''dGlvbihGLE8seil7cmV0dXJuIEY8ND8iXHUwOTMwXHUwOTNlXHUwOTI0IjpGPDEwPyJcdTA5MzhcdTA5NDFcdTA5MmNcdTA5MzkiOkY8MTc/Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI6RjwyMD8iXHUwOTM2XHUwOTNlXHUwOTJlIjoiXHUwOTMwXHUwOTNlXHUwOTI0In0sd2Vl''@;'; put 'put ''azp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sOTE5NTc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFApe3ZhciBGPUIrIiAiO3N3aXRjaChQKXtjYXNlInNzIjpyZXR1cm4gRisoMT09PUI/InNla3VuZGEiOjI9PT1CfHwzPT09''@;'; put 'put ''Qnx8ND09PUI/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gdz8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gRisoMT09PUI/Im1pbnV0YSI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4g''@;'; put 'put ''dz8iamVkYW4gc2F0IjoiamVkbm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiBGKygxPT09Qj8ic2F0IjoyPT09Qnx8Mz09PUJ8fDQ9PT1CPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBGKygxPT09Qj8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBGKygxPT09Qj8ibWplc2Vj''@;'; put 'put ''IjoyPT09Qnx8Mz09PUJ8fDQ9PT1CPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBGKygxPT09Qj8iZ29kaW5hIjoyPT09Qnx8Mz09PUJ8fDQ9PT1CPyJnb2RpbmUiOiJnb2RpbmEiKX19SS5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRu''@;'; put 'put ''amFfdmVsamFcdTAxMGRlX29cdTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFual92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtf''@;'; put 'put ''dHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9z''@;'; put 'put ''dWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExM''@;'; put 'put ''OiJEbyBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3Vd''@;'; put 'put ''IFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVy''@;'; put 'put ''IHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcm9cdTAxNjFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFs''@;'; put 'put ''ZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6Xyxt''@;'; put 'put ''Ol8sbW06XyxoOl8saGg6XyxkOiJkYW4iLGRkOl8sTToibWplc2VjIixNTTpfLHk6ImdvZGludSIseXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDQ4OTI4OmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0idmFzXHhlMXJuYXAgaFx4ZTl0Zlx1MDE1MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO2Z1bmN0aW9uIGcoUCxGLE8seil7dmFyIE49''@;'; put 'put ''UDtzd2l0Y2goTyl7Y2FzZSJzIjpyZXR1cm4genx8Rj8iblx4ZTloXHhlMW55IG1ceGUxc29kcGVyYyI6Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gTisoenx8Rik/IiBtXHhlMXNvZHBlcmMiOiIgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5''@;'; put 'put ''Iisoenx8Rj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4gTisoenx8Rj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyh6fHxGPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0dXJuIE4rKHp8fEY/IiBceGYzcmEiOiIgXHhmM3JceGUx''@;'; put 'put ''amEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyh6fHxGPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJkZCI6cmV0dXJuIE4rKHp8fEY/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyh6fHxGPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBOKyh6fHxG''@;'; put 'put ''PyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UieSI6cmV0dXJuImVneSIrKHp8fEY/IiBceGU5diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gTisoenx8Rj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0aW9uIEIoUCl7cmV0dXJuKFA/IiI6IlttXHhmYWx0XSAi''@;'; put 'put ''KSsiWyIrX1t0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9SS5kZWZpbmVMb2NhbGUoImh1Iix7bW9udGhzOiJqYW51XHhlMXJfZmVicnVceGUxcl9tXHhlMXJjaXVzX1x4ZTFwcmlsaXNfbVx4ZTFqdXNfalx4ZmFuaXVzX2pceGZhbGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3RceGYzYmVy''@;'; put 'put ''X25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbVx4ZTFyYy5fXHhlMXByLl9tXHhlMWouX2pceGZhbi5falx4ZmFsLl9hdWcuX3N6ZXB0Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJ2''@;'; put 'put ''YXNceGUxcm5hcF9oXHhlOXRmXHUwMTUxX2tlZGRfc3plcmRhX2NzXHhmY3RceGY2cnRceGY2a19wXHhlOW50ZWtfc3pvbWJhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ2YXNfaFx4ZTl0X2tlZGRfc3plX2NzXHhmY3RfcFx4ZTluX3N6byIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''dl9oX2tfc3plX2NzX3Bfc3pvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVkuIE1NTU0gRC4iLExMTDoiWVlZWS4gTU1NTSBELiBIOm1tIixMTExMOiJZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0ifSxt''@;'; put 'put ''ZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oUCl7cmV0dXJuInUiPT09UC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBQPDEyPyEwPT09Tz8iZGUiOiJERSI6ITA9PT1PPyJkdSI6IkRVIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IlttYV0gTFRbLWtvcl0iLG5leHREYXk6Iltob2xuYXBdIExUWy1rb3JdIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiBCLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiBCLmNhbGwodGhpcywhMSl9LHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZhbHZhIixwYXN0OiIlcyIsczpnLHNzOmcsbTpnLG1tOmcsaDpnLGhoOmcsZDpnLGRkOmcsTTpnLE1NOmcseTpnLHl5Omd9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVr''@;'; put 'put ''Ontkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1NjIxNTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImh5LWFtIix7bW9udGhzOntmb3JtYXQ6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2''@;'; put 'put ''Yl9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmXHUwNTZiX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y1x1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUw''@;'; put 'put ''NTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RcdTA1NmJfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUw''@;'; put 'put ''NTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUw''@;'; put 'put ''NTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTc0XHUwNTYxXHUwNTgwXHUw''@;'; put 'put ''NTdmX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y19cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2Rc''@;'; put 'put ''dTA1N2ZcdTA1NzhcdTA1N2RfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJc''@;'; put 'put ''dTA1NjVcdTA1ODBfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNTcwXHUwNTc2XHUwNTdlX1x1MDU4M1x1MDU3Zlx1MDU4MF9cdTA1NzRcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUw''@;'; put 'put ''NTgwX1x1MDU3NFx1MDU3NVx1MDU3ZF9cdTA1NzBcdTA1NzZcdTA1N2RfXHUwNTcwXHUwNTZjXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3ZF9cdTA1N2RcdTA1N2FcdTA1N2ZfXHUwNTcwXHUwNTZmXHUwNTdmX1x1MDU3Nlx1MDU3NFx1MDU2Ml9cdTA1NjRcdTA1NmZcdTA1N2YiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXM6Ilx1MDU2Zlx1MDU2Ylx1MDU4MFx1MDU2MVx1MDU2Zlx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NmZcdTA1NzhcdTA1ODJcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZi''@;'; put 'put ''X1x1MDU3OVx1MDU3OFx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzBcdTA1NmJcdTA1NzZcdTA1NjNcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyXHUwNTYxXHUwNTY5X1x1MDU3N1x1MDU2''@;'; put 'put ''MVx1MDU2Mlx1MDU2MVx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2''@;'; put 'put ''Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYy''@;'; put 'put ''X1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiIsTExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVkgXHUwNTY5LiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDU2MVx1MDU3NVx1MDU3ZFx1MDU4NVx1MDU4MF0gTFQiLG5leHREYXk6IltcdTA1N2VcdTA1NjFcdTA1NzJcdTA1NjhdIExUIixsYXN0RGF5OiJbXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNTYxXHUwNTc2XHUwNTgxXHUwNTYxXHUwNTZlXSBkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUw''@;'; put 'put ''NTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDU3MFx1MDU2NVx1MDU3Zlx1MDU3OCIscGFzdDoiJXMgXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdiIixzOiJcdTA1NzRcdTA1NmIgXHUwNTg0XHUwNTYxXHUwNTc2XHUw''@;'; put 'put ''NTZiIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsc3M6IiVkIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsbToiXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixtbToiJWQgXHUwNTgwXHUwNTc4XHUwNTdh''@;'; put 'put ''XHUwNTY1IixoOiJcdTA1NmFcdTA1NjFcdTA1NzQiLGhoOiIlZCBcdTA1NmFcdTA1NjFcdTA1NzQiLGQ6Ilx1MDU4NVx1MDU4MCIsZGQ6IiVkIFx1MDU4NVx1MDU4MCIsTToiXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIixNTToiJWQgXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIix5OiJcdTA1''@;'; put 'put ''N2ZcdTA1NjFcdTA1ODBcdTA1NmIiLHl5OiIlZCBcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIifSxtZXJpZGllbVBhcnNlOi9cdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjF8XHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxfFx1''@;'; put 'put ''MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuL14oXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2''@;'; put 'put ''NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NikkLy50ZXN0KGcpfSxtZXJpZGllbTpmdW5jdGlvbihnKXtyZXR1cm4gZzw0PyJcdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjEiOmc8MTI/Ilx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1''@;'; put 'put ''MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MSI6ZzwxNz8iXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxIjoiXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9''@;'; put 'put ''LShcdTA1NmJcdTA1NzZ8XHUwNTgwXHUwNTY0KS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOmNhc2UiREREbyI6cmV0dXJuIDE9PT1nP2crIi1cdTA1NmJcdTA1NzYiOmcrIi1cdTA1ODBcdTA1NjQiO2RlZmF1bHQ6cmV0dXJuIGd9''@;'; put 'put ''fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw1ODY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpZCIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2Vw''@;'; put 'put ''dGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRf''@;'; put 'put ''U2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJE''@;'; put 'put ''RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7''@;'; put 'put ''cmV0dXJuIDEyPT09ZyYmKGc9MCksInBhZ2kiPT09Qj9nOiJzaWFuZyI9PT1CP2c+PTExP2c6ZysxMjoic29yZSI9PT1CfHwibWFsYW0iPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDExPyJwYWdpIjpnPDE1PyJzaWFuZyI6ZzwxOT8ic29yZSI6''@;'; put 'put ''Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltCZXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZW1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xhbHUgcHVrdWxdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsYWx1IixzOiJiZWJlcmFwYSBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZW1lbml0IixtbToiJWQgbWVuaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBo''@;'; put 'put ''YXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDkwMjExOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKHcpe3JldHVybiB3JTEw''@;'; put 'put ''MD09MTF8fHclMTAhPTF9ZnVuY3Rpb24gZyh3LFAsRixPKXt2YXIgej13KyIgIjtzd2l0Y2goRil7Y2FzZSJzIjpyZXR1cm4gUHx8Tz8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5kdW0iO2Nhc2Uic3MiOnJldHVybiBfKHcpP3orKFB8fE8/InNla1x4ZmFuZHVyIjoi''@;'; put 'put ''c2VrXHhmYW5kdW0iKTp6KyJzZWtceGZhbmRhIjtjYXNlIm0iOnJldHVybiBQPyJtXHhlZG5ceGZhdGEiOiJtXHhlZG5ceGZhdHUiO2Nhc2UibW0iOnJldHVybiBfKHcpP3orKFB8fE8/Im1ceGVkblx4ZmF0dXIiOiJtXHhlZG5ceGZhdHVtIik6UD96KyJtXHhlZG5ceGZhdGEiOnorIm1ceGVk''@;'; put 'put ''blx4ZmF0dSI7Y2FzZSJoaCI6cmV0dXJuIF8odyk/eisoUHx8Tz8ia2x1a2t1c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0iKTp6KyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gUD8iZGFndXIiOk8/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiBfKHcpP1A/eisiZGFnYXIiOnorKE8/''@;'; put 'put ''ImRhZ2EiOiJkXHhmNmd1bSIpOlA/eisiZGFndXIiOnorKE8/ImRhZyI6ImRlZ2kiKTtjYXNlIk0iOnJldHVybiBQPyJtXHhlMW51XHhmMHVyIjpPPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2FzZSJNTSI6cmV0dXJuIF8odyk/UD96KyJtXHhlMW51XHhmMGlyIjp6KyhPPyJtXHhl''@;'; put 'put ''MW51XHhmMGkiOiJtXHhlMW51XHhmMHVtIik6UD96KyJtXHhlMW51XHhmMHVyIjp6KyhPPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIFB8fE8/Ilx4ZTFyIjoiXHhlMXJpIjtjYXNlInl5IjpyZXR1cm4gXyh3KT96KyhQfHxPPyJceGUxciI6Ilx4ZTFydW0i''@;'; put 'put ''KTp6KyhQfHxPPyJceGUxciI6Ilx4ZTFyaSIpfX1JLmRlZmluZUxvY2FsZSgiaXMiLHttb250aHM6Imphblx4ZmFhcl9mZWJyXHhmYWFyX21hcnNfYXByXHhlZGxfbWFceGVkX2pceGZhblx4ZWRfalx4ZmFsXHhlZF9ceGUxZ1x4ZmFzdF9zZXB0ZW1iZXJfb2t0XHhmM2Jlcl9uXHhmM3ZlbWJl''@;'; put 'put ''cl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hXHhlZF9qXHhmYW5falx4ZmFsX1x4ZTFnXHhmYV9zZXBfb2t0X25ceGYzdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFudWRhZ3VyX1x4ZmVyaVx4ZjBqdWRhZ3Vy''@;'; put 'put ''X21pXHhmMHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mXHhmNnN0dWRhZ3VyX2xhdWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fXHhmZXJpX21pXHhmMF9maW1fZlx4ZjZzX2xhdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTVx4ZTFfXHhkZXJfTWlf''@;'; put 'put ''RmlfRlx4ZjZfTGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIn0s''@;'; put 'put ''Y2FsZW5kYXI6e3NhbWVEYXk6IltceGVkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhlMSBtb3JndW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGVkIGdceGU2ciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMGFzdGFdIGRkZGQgW2tsLl0gTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVmdGlyICVzIixwYXN0OiJmeXJpciAlcyBzXHhlZFx4ZjBhbiIsczpnLHNzOmcsbTpnLG1tOmcsaDoia2x1a2t1c3R1bmQiLGhoOmcsZDpnLGRkOmcsTTpnLE1NOmcseTpnLHl5Omd9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6''@;'; put 'put ''L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwyMjM0MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIml0LWNoIix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2Fw''@;'; put 'put ''cmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJk''@;'; put 'put ''b21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dp''@;'; put 'put ''X3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbT2dnaSBhbGxlXSBMVCIsbmV4dERheToiW0RvbWFuaSBhbGxlXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FsbGVdIExUIixsYXN0RGF5OiJbSWVyaSBhbGxlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExU''@;'; put 'put ''IjoiW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKGcpe3JldHVybigvXlswLTldLiskLy50ZXN0KGcpPyJ0cmEiOiJpbiIpKyIgIitnfSxwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBz''@;'; put 'put ''ZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MDE3MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIml0Iix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2Fw''@;'; put 'put ''cmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJk''@;'; put 'put ''b21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dp''@;'; put 'put ''X3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIltPZ2dpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltEb21hbmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIg''@;'; put 'put ''IjoibGwnIikrIl1MVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltJZXJpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxl''@;'; put 'put ''ICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW0xhIHNjb3JzYV0gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCI6IltMbyBz''@;'; put 'put ''Y29yc29dIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ0cmEgJXMiLHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGki''@;'; put 'put ''LG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLHc6InVuYSBzZXR0aW1hbmEiLHd3OiIlZCBzZXR0aW1hbmUiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5u''@;'; put 'put ''aSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDM5NzcwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiamEiLHtlcmFz''@;'; put 'put ''Olt7c2luY2U6IjIwMTktMDUtMDEiLG9mZnNldDoxLG5hbWU6Ilx1NGVlNFx1NTQ4YyIsbmFycm93OiJcdTMyZmYiLGFiYnI6IlIifSx7c2luY2U6IjE5ODktMDEtMDgiLHVudGlsOiIyMDE5LTA0LTMwIixvZmZzZXQ6MSxuYW1lOiJcdTVlNzNcdTYyMTAiLG5hcnJvdzoiXHUzMzdiIixhYmJy''@;'; put 'put ''OiJIIn0se3NpbmNlOiIxOTI2LTEyLTI1Iix1bnRpbDoiMTk4OS0wMS0wNyIsb2Zmc2V0OjEsbmFtZToiXHU2NjJkXHU1NDhjIixuYXJyb3c6Ilx1MzM3YyIsYWJicjoiUyJ9LHtzaW5jZToiMTkxMi0wNy0zMCIsdW50aWw6IjE5MjYtMTItMjQiLG9mZnNldDoxLG5hbWU6Ilx1NTkyN1x1NmI2''@;'; put 'put ''MyIsbmFycm93OiJcdTMzN2QiLGFiYnI6IlQifSx7c2luY2U6IjE4NzMtMDEtMDEiLHVudGlsOiIxOTEyLTA3LTI5IixvZmZzZXQ6NixuYW1lOiJcdTY2MGVcdTZjYmIiLG5hcnJvdzoiXHUzMzdlIixhYmJyOiJNIn0se3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoiMTg3My0xMi0zMSIsb2Zm''@;'; put 'put ''c2V0OjEsbmFtZToiXHU4OTdmXHU2NmE2IixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJcdTdkMDBcdTUxNDNcdTUyNGQiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyhcdTUx''@;'; put 'put ''NDN8XGQrKVx1NWU3NC8sZXJhWWVhck9yZGluYWxQYXJzZTpmdW5jdGlvbihnLEIpe3JldHVybiJcdTUxNDMiPT09QlsxXT8xOnBhcnNlSW50KEJbMV18fGcsMTApfSxtb250aHM6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1Njcw''@;'; put 'put ''OF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5czoiXHU2NWU1XHU2NmRjXHU2NWU1X1x1NjcwOFx1NjZkY1x1NjVlNV9cdTcwNmJcdTY2ZGNcdTY1ZTVfXHU2YzM0XHU2NmRjXHU2NWU1X1x1NjcyOFx1NjZkY1x1NjVlNV9cdTkxZDFcdTY2ZGNcdTY1ZTVfXHU1NzFmXHU2NmRjXHU2NWU1Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIs''@;'; put 'put ''bGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNShkZGQpIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MzQ4XHU1MjRkfFx1NTM0OFx1NWY4Yy9pLGlzUE06ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIlx1NTM0OFx1NWY4YyI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQi''@;'; put 'put ''LG5leHRXZWVrOmZ1bmN0aW9uKGcpe3JldHVybiBnLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU2NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1NjVlNV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndlZWsoKSE9PWcud2Vlaygp''@;'; put 'put ''PyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UieSI6cmV0dXJuIDE9PT1nPyJcdTUxNDNcdTVlNzQiOmcrIlx1NWU3''@;'; put 'put ''NCI7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2NWU1IjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU2NTcwXHU3OWQyIixzczoiJWRcdTc5ZDIiLG06IjFcdTUyMDYiLG1tOiIlZFx1''@;'; put 'put ''NTIwNiIsaDoiMVx1NjY0Mlx1OTU5MyIsaGg6IiVkXHU2NjQyXHU5NTkzIixkOiIxXHU2NWU1IixkZDoiJWRcdTY1ZTUiLE06IjFcdTMwZjZcdTY3MDgiLE1NOiIlZFx1MzBmNlx1NjcwOCIseToiMVx1NWU3NCIseXk6IiVkXHU1ZTc0In19KX0oeSg5NzU4NikpfSw3Mzg3NTpmdW5jdGlvbih1''@;'; put 'put ''ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImp2Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1Jl''@;'; put 'put ''Yl9LZW1fSmVtX1NlcCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU3AiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtw''@;'; put 'put ''dWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksImVuamluZyI9PT1CP2c6InNpeWFu''@;'; put 'put ''ZyI9PT1CP2c+PTExP2c6ZysxMjoic29udGVuIj09PUJ8fCJuZGFsdSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTE/ImVuamluZyI6ZzwxNT8ic2l5YW5nIjpnPDE5PyJzb250ZW4iOiJuZGFsdSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGlu''@;'; put 'put ''dGVuIHB1bmlrbyBwdWt1bF0gTFQiLG5leHREYXk6IltNYmVuamFuZyBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLYWxhIHdpbmdpIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6IndvbnRlbiBpbmcgJXMiLHBhc3Q6IiVzIGluZ2thbmcga2VwZW5na2VyIixzOiJzYXdldGF3aXMgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2V0dW5nZ2FsIG1lbml0IixtbToiJWQgbWVuaXQiLGg6InNldHVuZ2dhbCBqYW0iLGhoOiIlZCBqYW0iLGQ6InNl''@;'; put 'put ''ZGludGVuIixkZDoiJWQgZGludGVuIixNOiJzZXd1bGFuIixNTToiJWQgd3VsYW4iLHk6InNldGF1biIseXk6IiVkIHRhdW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw3OTQ5OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoImthIix7bW9udGhzOiJcdTEwZDhcdTEwZDBcdTEwZGNcdTEwZDVcdTEwZDBcdTEwZTBcdTEwZDhfXHUxMGQ3XHUxMGQ0XHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ1XHUxMGQwXHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBlMFx1MTBlMlx1MTBkOF9cdTEwZDBcdTEwZGVcdTEw''@;'; put 'put ''ZTBcdTEwZDhcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY1x1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGFcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQwXHUxMGQyXHUxMGQ1XHUxMGQ4XHUxMGUxXHUxMGUyXHUx''@;'; put 'put ''MGRkX1x1MTBlMVx1MTBkNFx1MTBlNVx1MTBlMlx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGRcdTEwZTVcdTEwZTJcdTEwZGRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRjXHUxMGRkXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUx''@;'; put 'put ''MGQ4X1x1MTBkM1x1MTBkNFx1MTBkOVx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMGQ4XHUxMGQwXHUxMGRjX1x1MTBkN1x1MTBkNFx1MTBkMV9cdTEwZGJcdTEwZDBcdTEwZTBfXHUxMGQwXHUxMGRlXHUxMGUwX1x1MTBk''@;'; put 'put ''Ylx1MTBkMFx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNfXHUxMGQ4XHUxMGQ1XHUxMGRhX1x1MTBkMFx1MTBkMlx1MTBkNV9cdTEwZTFcdTEwZDRcdTEwZTVfXHUxMGRkXHUxMGU1XHUxMGUyX1x1MTBkY1x1MTBkZFx1MTBkNF9cdTEwZDNcdTEwZDRcdTEwZDkiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6e3N0YW5kYWxvbmU6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMF9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZFx1MTBkN1x1''@;'; put 'put ''MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGQ4X1x1MTBlOFx1MTBkMFx1''@;'; put 'put ''MTBkMVx1MTBkMFx1MTBkN1x1MTBkOCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMFx1MTBlMV9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQx''@;'; put 'put ''XHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5''@;'; put 'put ''XHUxMGQ0XHUxMGQ1XHUxMGUxX1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovKFx1MTBlY1x1MTBkOFx1MTBkY1x1MTBkMHxcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDIpL30sd2Vla2RheXNTaG9ydDoiXHUxMGQ5''@;'; put 'put ''XHUxMGQ1XHUxMGQ4X1x1MTBkZFx1MTBlMFx1MTBlOF9cdTEwZTFcdTEwZDBcdTEwZGJfXHUxMGRkXHUxMGQ3XHUxMGVlX1x1MTBlZVx1MTBlM1x1MTBkN19cdTEwZGVcdTEwZDBcdTEwZTBfXHUxMGU4XHUxMGQwXHUxMGQxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwZDlcdTEwZDVf''@;'; put 'put ''XHUxMGRkXHUxMGUwX1x1MTBlMVx1MTBkMF9cdTEwZGRcdTEwZDdfXHUxMGVlXHUxMGUzX1x1MTBkZVx1MTBkMF9cdTEwZThcdTEwZDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixM''@;'; put 'put ''TEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMGQzXHUxMGU2XHUxMGQ0XHUxMGUxXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dERheToiW1x1MTBlZVx1MTBkNVx1MTBkMFx1MTBkYV0gTFRbLVx1MTBk''@;'; put 'put ''Nlx1MTBkNF0iLGxhc3REYXk6IltcdTEwZDJcdTEwZTNcdTEwZThcdTEwZDhcdTEwZGNdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0V2VlazoiW1x1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMl0gZGRkZCBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdFdlZWs6IltcdTEwZWNcdTEw''@;'; put 'put ''ZDhcdTEwZGNcdTEwZDBdIGRkZGQgTFQtXHUxMGQ2XHUxMGQ0IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UoLyhcdTEwZWNcdTEwZDBcdTEwZGJ8XHUxMGVjXHUxMGUzXHUxMGQ3fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBk''@;'; put 'put ''N3xcdTEwZWNcdTEwZDRcdTEwZGF8XHUxMGQzXHUxMGU2fFx1MTBkN1x1MTBkNSkoXHUxMGQ4fFx1MTBkNCkvLGZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4iXHUxMGQ4Ij09PVA/dysiXHUxMGU4XHUxMGQ4Ijp3K1ArIlx1MTBlOFx1MTBkOCJ9KX0scGFzdDpmdW5jdGlvbihnKXtyZXR1cm4vKFx1''@;'; put 'put ''MTBlY1x1MTBkMFx1MTBkYlx1MTBkOHxcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDh8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4fFx1MTBkM1x1MTBlNlx1MTBkNHxcdTEwZDdcdTEwZDVcdTEwZDQpLy50ZXN0KGcpP2cucmVwbGFjZSgvKFx1MTBkOHxcdTEwZDQpJC8sIlx1MTBkOFx1''@;'; put 'put ''MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTovXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Ly50ZXN0KGcpP2cucmVwbGFjZSgvXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4JC8sIlx1MTBlY1x1MTBkYVx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTpnfSxzOiJcdTEwZTBcdTEwZDBc''@;'; put 'put ''dTEwZGJcdTEwZDNcdTEwZDRcdTEwZGNcdTEwZDhcdTEwZGJcdTEwZDQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixzczoiJWQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixtOiJcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLG1tOiIlZCBcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLGg6''@;'; put 'put ''Ilx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsaGg6IiVkIFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsZDoiXHUxMGQzXHUxMGU2XHUxMGQ0IixkZDoiJWQgXHUxMGQzXHUxMGU2XHUxMGQ0IixNOiJcdTEwZDdcdTEwZDVcdTEwZDQiLE1NOiIlZCBcdTEwZDdcdTEwZDVc''@;'; put 'put ''dTEwZDQiLHk6Ilx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCIseXk6IiVkIFx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LzB8MS1cdTEwZGFcdTEwZDh8XHUxMGRiXHUxMGQ0LVxkezEsMn18XGR7MSwyfS1cdTEwZDQvLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIDA9PT1nP2c6MT09PWc/ZysiLVx1MTBkYVx1MTBkOCI6ZzwyMHx8Zzw9MTAwJiZnJTIwPT0wfHxnJTEwMD09MD8iXHUxMGRiXHUxMGQ0LSIrZzpnKyItXHUxMGQ0In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sOTM1NzM6ZnVuY3Rpb24odWUsWCx5KXshZnVu''@;'; put 'put ''Y3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQ4XHUwNDU2IiwxOiItXHUwNDQ4XHUwNDU2IiwyOiItXHUwNDQ4XHUwNDU2IiwzOiItXHUwNDQ4XHUwNDU2Iiw0OiItXHUwNDQ4XHUwNDU2Iiw1OiItXHUwNDQ4XHUwNDU2Iiw2OiItXHUwNDQ4XHUwNDRiIiw3OiItXHUwNDQ4''@;'; put 'put ''XHUwNDU2Iiw4OiItXHUwNDQ4XHUwNDU2Iiw5OiItXHUwNDQ4XHUwNDRiIiwxMDoiLVx1MDQ0OFx1MDQ0YiIsMjA6Ii1cdTA0NDhcdTA0NGIiLDMwOiItXHUwNDQ4XHUwNDRiIiw0MDoiLVx1MDQ0OFx1MDQ0YiIsNTA6Ii1cdTA0NDhcdTA0NTYiLDYwOiItXHUwNDQ4XHUwNDRiIiw3MDoiLVx1''@;'; put 'put ''MDQ0OFx1MDQ1NiIsODA6Ii1cdTA0NDhcdTA0NTYiLDkwOiItXHUwNDQ4XHUwNDRiIiwxMDA6Ii1cdTA0NDhcdTA0NTYifTtJLmRlZmluZUxvY2FsZSgia2siLHttb250aHM6Ilx1MDQ5Ylx1MDQzMFx1MDRhM1x1MDQ0Mlx1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0OWJcdTA0M2ZcdTA0MzBcdTA0''@;'; put 'put ''M2RfXHUwNDNkXHUwNDMwXHUwNDQzXHUwNDQwXHUwNDRiXHUwNDM3X1x1MDQ0MVx1MDRkOVx1MDQ0M1x1MDQ1Nlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0M2NcdTA0NGJcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQzXHUwNDQxXHUwNDRiXHUwNDNjX1x1MDQ0OFx1MDQ1Nlx1MDQzYlx1MDQzNFx1''@;'; put 'put ''MDQzNV9cdTA0NDJcdTA0MzBcdTA0M2NcdTA0NGJcdTA0MzdfXHUwNDliXHUwNDRiXHUwNDQwXHUwNDNhXHUwNGFmXHUwNDM5XHUwNDM1XHUwNDNhX1x1MDQ5Ylx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzZF9cdTA0OWJcdTA0MzBcdTA0NDBcdTA0MzBcdTA0NDhcdTA0MzBfXHUwNDM2XHUwNDM1''@;'; put 'put ''XHUwNDNiXHUwNDQyXHUwNDNlXHUwNDliXHUwNDQxXHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0OWJcdTA0MzBcdTA0YTNfXHUwNDMwXHUwNDliXHUwNDNmX1x1MDQzZFx1MDQzMFx1MDQ0M19cdTA0NDFcdTA0ZDlcdTA0NDNfXHUwNDNjXHUwNDMwXHUwNDNjX1x1''@;'; put 'put ''MDQzY1x1MDQzMFx1MDQ0M19cdTA0NDhcdTA0NTZcdTA0M2JfXHUwNDQyXHUwNDMwXHUwNDNjX1x1MDQ5Ylx1MDQ0Ylx1MDQ0MF9cdTA0OWJcdTA0MzBcdTA0MzdfXHUwNDliXHUwNDMwXHUwNDQwX1x1MDQzNlx1MDQzNVx1MDQzYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDM2XHUwNDM1''@;'; put 'put ''XHUwNDNhXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNFx1MDRhZlx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNGQ5XHUwNDQwXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzMVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzZcdTA0YjFcdTA0M2NcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzNlx1MDQzNVx1''@;'; put 'put ''MDQzYV9cdTA0MzRcdTA0YWZcdTA0MzlfXHUwNDQxXHUwNDM1XHUwNDM5X1x1MDQ0MVx1MDRkOVx1MDQ0MF9cdTA0MzFcdTA0MzVcdTA0MzlfXHUwNDM2XHUwNGIxXHUwNDNjX1x1MDQ0MVx1MDQzNVx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDM2XHUwNDNhX1x1MDQzNFx1''@;'; put 'put ''MDQzOV9cdTA0NDFcdTA0MzlfXHUwNDQxXHUwNDQwX1x1MDQzMVx1MDQzOV9cdTA0MzZcdTA0M2NfXHUwNDQxXHUwNDNkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDQ1Nlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDE1XHUwNDQwXHUwNDQyXHUw''@;'; put 'put ''NDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNDM1XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDRhM10gZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiJXMgXHUwNDU2XHUwNDQ4XHUwNDU2XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0MzFcdTA0YjFcdTA0NDBcdTA0NGJcdTA0M2QiLHM6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0''@;'; put 'put ''MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0''@;'; put 'put ''MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDhcdTA0NTZ8XHUwNDQ4XHUwNDRiKS8sb3Jk''@;'; put 'put ''aW5hbDpmdW5jdGlvbihCKXtyZXR1cm4gQisoX1tCXXx8X1tCJTEwXXx8X1tCPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNjg4MDc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTE3ZTEiLDI6''@;'; put 'put ''Ilx1MTdlMiIsMzoiXHUxN2UzIiw0OiJcdTE3ZTQiLDU6Ilx1MTdlNSIsNjoiXHUxN2U2Iiw3OiJcdTE3ZTciLDg6Ilx1MTdlOCIsOToiXHUxN2U5IiwwOiJcdTE3ZTAifSxnPXsiXHUxN2UxIjoiMSIsIlx1MTdlMiI6IjIiLCJcdTE3ZTMiOiIzIiwiXHUxN2U0IjoiNCIsIlx1MTdlNSI6IjUi''@;'; put 'put ''LCJcdTE3ZTYiOiI2IiwiXHUxN2U3IjoiNyIsIlx1MTdlOCI6IjgiLCJcdTE3ZTkiOiI5IiwiXHUxN2UwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJrbSIse21vbnRoczoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThc''@;'; put 'put ''dTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdi''@;'; put 'put ''Nl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTc5OFx1''@;'; put 'put ''MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2''@;'; put 'put ''X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3''@;'; put 'put ''YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTE3YTJcdTE3YjZcdTE3OTFcdTE3YjdcdTE3OGZcdTE3ZDJcdTE3OTlfXHUxNzg1XHUxN2QwXHUxNzkzXHUxN2QyXHUxNzkxX1x1MTdhMlx1MTc4NFx1MTdkMlx1MTc4Mlx1MTdiNlx1MTc5YV9cdTE3''@;'; put 'put ''OTZcdTE3YmJcdTE3OTJfXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2EwXHUxNzlmXHUxN2QyXHUxNzk0XHUxNzhmXHUxN2I3XHUxN2NkX1x1MTc5Zlx1MTdiYlx1MTc4MFx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YzVcdTE3OWFcdTE3Y2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxN2Ey''@;'; put 'put ''XHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxt''@;'; put 'put ''ZXJpZGllbVBhcnNlOi9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODB8XHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3Jl''@;'; put 'put ''dHVybiB3PDEyPyJcdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODAiOiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTc5MFx1MTdkMlx1MTc4NFx1MTdjM1x1MTc5M1x1MTdjMVx1MTdjNyBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRd''@;'; put 'put ''IExUIixuZXh0RGF5OiJbXHUxNzlmXHUxN2QyXHUxN2EyXHUxN2MyXHUxNzgwIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0RGF5OiJbXHUxNzk4XHUxN2QyXHUxNzlmXHUxN2I3XHUxNzliXHUx''@;'; put 'put ''Nzk4XHUxN2I3XHUxNzg5IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTE3OWZcdTE3OTRcdTE3ZDJcdTE3OGZcdTE3YjZcdTE3YTBcdTE3Y2RcdTE3OThcdTE3YmJcdTE3OTNdIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MTc5MVx1MTdjMFx1MTc4ZiIscGFzdDoiJXNcdTE3OThcdTE3YmJcdTE3OTMiLHM6Ilx1MTc5NFx1MTdjOVx1MTdiYlx1MTc5M1x1MTdkMlx1MTc5OFx1MTdiNlx1MTc5M1x1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIs''@;'; put 'put ''c3M6IiVkIFx1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtbToiJWQgXHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixoOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OThcdTE3YzlcdTE3YzRc''@;'; put 'put ''dTE3ODQiLGhoOiIlZCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGQ6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsZGQ6IiVkIFx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsTToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzgxXHUxN2MyIixNTToiJWQgXHUx''@;'; put 'put ''NzgxXHUxN2MyIix5OiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYiLHl5OiIlZCBcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTE3OTFcdTE3YjhcZHsxLDJ9LyxvcmRpbmFsOiJcdTE3OTFc''@;'; put 'put ''dTE3YjglZCIscHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MTdlMVx1MTdlMlx1MTdlM1x1MTdlNFx1MTdlNVx1MTdlNlx1MTdlN1x1MTdlOFx1MTdlOVx1MTdlMF0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjUwODI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBjZTciLDI6Ilx1MGNlOCIsMzoiXHUw''@;'; put 'put ''Y2U5Iiw0OiJcdTBjZWEiLDU6Ilx1MGNlYiIsNjoiXHUwY2VjIiw3OiJcdTBjZWQiLDg6Ilx1MGNlZSIsOToiXHUwY2VmIiwwOiJcdTBjZTYifSxnPXsiXHUwY2U3IjoiMSIsIlx1MGNlOCI6IjIiLCJcdTBjZTkiOiIzIiwiXHUwY2VhIjoiNCIsIlx1MGNlYiI6IjUiLCJcdTBjZWMiOiI2Iiwi''@;'; put 'put ''XHUwY2VkIjoiNyIsIlx1MGNlZSI6IjgiLCJcdTBjZWYiOiI5IiwiXHUwY2U2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJrbiIse21vbnRoczoiXHUwYzljXHUwY2E4XHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBj''@;'; put 'put ''YWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1''@;'; put 'put ''MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhOFx1MGNiNVx1MGNjNlx1''@;'; put 'put ''MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGM5Y1x1MGNhOF9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2Nk''@;'; put 'put ''XHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBj''@;'; put 'put ''Y2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyIi5zcGxpdCgiXyIpLG1vbnRoc1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhY1x1''@;'; put 'put ''MGNjMVx1MGNhN1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZlx1MGNiNVx1MGNiZVx1MGNiMCIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM19cdTBjYWNcdTBjYzFcdTBjYTdfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxX1x1MGNiNlx1MGNjMVx1MGM5NVx1''@;'; put 'put ''MGNjZFx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGNhZFx1MGNiZV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2FlXHUwYzgyX1x1MGNhY1x1MGNjMV9cdTBjOTdcdTBjYzFfXHUwY2I2XHUwY2MxX1x1MGNiNiIuc3BsaXQoIl8iKSxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjODdcdTBj''@;'; put 'put ''ODJcdTBjYTZcdTBjYzFdIExUIixuZXh0RGF5OiJbXHUwY2E4XHUwY2JlXHUwY2IzXHUwY2M2XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwY2E4XHUwY2JmXHUwY2E4XHUwY2NkXHUwY2E4XHUwY2M2XSBMVCIsbGFzdFdlZWs6IltcdTBjOTVcdTBjYzZcdTBjYzJcdTBj''@;'; put 'put ''YThcdTBjYzZcdTBjYWZdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjYThcdTBjODJcdTBjYTRcdTBjYjAiLHBhc3Q6IiVzIFx1MGNiOVx1MGNiZlx1MGM4Mlx1MGNhNlx1MGNjNiIsczoiXHUwYzk1XHUwY2M2XHUwY2IyXHUwY2I1XHUwY2Mx''@;'; put 'put ''IFx1MGM5NVx1MGNjZFx1MGNiN1x1MGNhM1x1MGM5N1x1MGNiM1x1MGNjMSIsc3M6IiVkIFx1MGNiOFx1MGNjNlx1MGM5NVx1MGNjNlx1MGM4Mlx1MGNhMVx1MGNjMVx1MGM5N1x1MGNiM1x1MGNjMSIsbToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNi''@;'; put 'put ''Zlx1MGNiNyIsbW06IiVkIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsaDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsaGg6IiVkIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsZDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1''@;'; put 'put ''MGNhNlx1MGNiZlx1MGNhOCIsZGQ6IiVkIFx1MGNhNlx1MGNiZlx1MGNhOCIsTToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIsTU06IiVkIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIseToiXHUwYzky''@;'; put 'put ''XHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyIseXk6IiVkIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBjZTdcdTBjZThcdTBjZTlcdTBjZWFcdTBjZWJcdTBjZWNcdTBjZWRcdTBj''@;'; put 'put ''ZWVcdTBjZWZcdTBjZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1''@;'; put 'put ''MGNiZnxcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzZ8XHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4fFx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEy''@;'; put 'put ''PT09dyYmKHc9MCksIlx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI9PT1QP3c8ND93OncrMTI6Ilx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI9PT1QP3c6Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNj''@;'; put 'put ''ZFx1MGNhOCI9PT1QP3c+PTEwP3c6dysxMjoiXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2Ij09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiOnc8MTA/Ilx1MGNhY1x1MGNjNlx1''@;'; put 'put ''MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI6dzwxNz8iXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4Ijp3PDIwPyJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiOiJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYifSxk''@;'; put 'put ''YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MGNhOFx1MGNjNlx1MGNkNSkvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrIlx1MGNhOFx1MGNjNlx1MGNkNSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDIwMTM3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0''@;'; put 'put ''aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgia28iLHttb250aHM6IjFcdWM2ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHVjNzdjXHVjNjk0XHVjNzdjX1x1YzZkNFx1YzY5NFx1Yzc3''@;'; put 'put ''Y19cdWQ2NTRcdWM2OTRcdWM3N2NfXHVjMjE4XHVjNjk0XHVjNzdjX1x1YmFhOVx1YzY5NFx1Yzc3Y19cdWFlMDhcdWM2OTRcdWM3N2NfXHVkMWEwXHVjNjk0XHVjNzdjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4''@;'; put 'put ''X1x1ZDFhMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZXHVi''@;'; put 'put ''MTQ0IE1NTU0gRFx1Yzc3YyIsTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLExMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIixsOiJZWVlZLk1NLkRELiIsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixsbGw6IllZWVlcdWIxNDQgTU1NTSBE''@;'; put 'put ''XHVjNzdjIEEgaDptbSIsbGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiXHVjNjI0XHViMjk4IExUIixuZXh0RGF5OiJcdWIwYjRcdWM3N2MgTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJcdWM1YjRcdWM4MWMgTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJcdWM5YzBcdWIwOWNcdWM4ZmMgZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHVkNmM0IixwYXN0OiIlcyBcdWM4MDQiLHM6Ilx1YmE4NyBcdWNkMDgiLHNzOiIlZFx1Y2QwOCIsbToiMVx1YmQ4NCIsbW06IiVkXHViZDg0IixoOiJc''@;'; put 'put ''dWQ1NWMgXHVjMmRjXHVhYzA0IixoaDoiJWRcdWMyZGNcdWFjMDQiLGQ6Ilx1ZDU1OFx1YjhlOCIsZGQ6IiVkXHVjNzdjIixNOiJcdWQ1NWMgXHViMmVjIixNTToiJWRcdWIyZWMiLHk6Ilx1Yzc3YyBcdWIxNDQiLHl5OiIlZFx1YjE0NCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEs''@;'; put 'put ''Mn0oXHVjNzdjfFx1YzZkNHxcdWM4ZmMpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1Yzc3YyI7Y2FzZSJNIjpyZXR1cm4gZysiXHVjNmQ0IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1YzhmYyI7ZGVm''@;'; put 'put ''YXVsdDpyZXR1cm4gZ319LG1lcmlkaWVtUGFyc2U6L1x1YzYyNFx1YzgwNHxcdWM2MjRcdWQ2YzQvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuIlx1YzYyNFx1ZDZjNCI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/Ilx1YzYyNFx1YzgwNCI6Ilx1YzYyNFx1ZDZj''@;'; put 'put ''NCJ9fSl9KHkoOTc1ODYpKX0sNjM3NDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8odyxQLEYsTyl7dmFyIHo9e3M6WyJceGU3ZW5kIHNhblx4ZWV5ZSIsIlx4ZTdlbmQgc2FuXHhlZXlleWFuIl0sc3M6W3crIiBzYW5ceGVleWUiLHcrIiBz''@;'; put 'put ''YW5ceGVleWV5YW4iXSxtOlsiZGVxXHhlZXFleWVrIiwiZGVxXHhlZXFleWVrXHhlYSJdLG1tOlt3KyIgZGVxXHhlZXFlIix3KyIgZGVxXHhlZXFleWFuIl0saDpbInNhZXRlayIsInNhZXRla1x4ZWEiXSxoaDpbdysiIHNhZXQiLHcrIiBzYWV0YW4iXSxkOlsicm9qZWsiLCJyb2pla1x4ZWEi''@;'; put 'put ''XSxkZDpbdysiIHJvaiIsdysiIHJvamFuIl0sdzpbImhlZnRleWVrIiwiaGVmdGV5ZWtceGVhIl0sd3c6W3crIiBoZWZ0ZSIsdysiIGhlZnRleWFuIl0sTTpbIm1laGVrIiwibWVoZWtceGVhIl0sTU06W3crIiBtZWgiLHcrIiBtZWhhbiJdLHk6WyJzYWxlayIsInNhbGVrXHhlYSJdLHl5Olt3''@;'; put 'put ''KyIgc2FsIix3KyIgc2FsYW4iXX07cmV0dXJuIFA/eltGXVswXTp6W0ZdWzFdfUkuZGVmaW5lTG9jYWxlKCJrdS1rbXIiLHttb250aHM6IlJceGVhYmVuZGFuX1NpYmF0X0FkYXJfTlx4ZWVzYW5fR3VsYW5fSGV6XHhlZXJhbl9UXHhlZXJtZWhfVGViYXhfXHhjZWxvbl9Db3RtZWhfTWlqZGFy''@;'; put 'put ''X0JlcmZhbmJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiUlx4ZWFiX1NpYl9BZGFfTlx4ZWVzX0d1bF9IZXpfVFx4ZWVyX1RlYl9ceGNlbG9fQ290X01pal9CZXIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiWWVrXHUwMTVmZW1fRHVcdTAxNWZlbV9TXHhl''@;'; put 'put ''YVx1MDE1ZmVtX1x4Yzdhclx1MDE1ZmVtX1BceGVhbmNcdTAxNWZlbV9ceGNlbl9cdTAxNWVlbVx4ZWUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWVrX0R1X1NceGVhX1x4Yzdhcl9QXHhlYW5fXHhjZW5fXHUwMTVlZW0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlllX0R1X1NceGVh''@;'; put 'put ''X1x4YzdhX1BceGVhX1x4Y2VuX1x1MDE1ZWUiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyP0Y/ImJuIjoiQk4iOkY/InBuIjoiUE4ifSxtZXJpZGllbVBhcnNlOi9ibnxCTnxwbnxQTi8sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDpt''@;'; put 'put ''bTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0iLExMTDoiRG8gTU1NTVthXSBZWVlZW2FuXSBISDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTVthXSBZWVlZW2FuXSBISDptbSIsbGw6IkRvIE1NTVsuXSBZWVlZW2FuXSIsbGxsOiJEbyBNTU1bLl0gWVlZWVthbl0g''@;'; put 'put ''SEg6bW0iLGxsbGw6ImRkZFsuXSwgRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGNlcm8gZGkgc2FldF0gTFQgW2RlXSIsbmV4dERheToiW1NpYlx4ZWEgZGkgc2FldF0gTFQgW2RlXSIsbmV4dFdlZWs6ImRkZGQgW2RpIHNhZXRdIExUIFtkZV0iLGxh''@;'; put 'put ''c3REYXk6IltEdWggZGkgc2FldF0gTFQgW2RlXSIsbGFzdFdlZWs6ImRkZGRbYSBib3JceGVlIGRpIHNhZXRdIExUIFtkZV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRpICVzIGRlIixwYXN0OiJiZXJceGVlICVzIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6Xyxk''@;'; put 'put ''Ol8sZGQ6Xyx3Ol8sd3c6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSg/OnlceGVhfFx4ZWF8XC4pLyxvcmRpbmFsOmZ1bmN0aW9uKHcsUCl7dmFyIEY9UC50b0xvd2VyQ2FzZSgpO3JldHVybiBGLmluY2x1ZGVzKCJ3Iil8fEYuaW5jbHVkZXMo''@;'; put 'put ''Im0iKT93KyIuIjp3K2Z1bmN0aW9uIGcodyl7dmFyIFA9KHc9IiIrdykuc3Vic3RyaW5nKHcubGVuZ3RoLTEpLEY9dy5sZW5ndGg+MT93LnN1YnN0cmluZyh3Lmxlbmd0aC0yKToiIjtyZXR1cm4gMTI9PUZ8fDEzPT1GfHwiMiIhPVAmJiIzIiE9UCYmIjUwIiE9RiYmIjcwIiE9UCYmIjgwIiE9''@;'; put 'put ''UD8iXHhlYSI6InlceGVhIn0odyl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcwMTExOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUi''@;'; put 'put ''LDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sZz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4Iiwi''@;'; put 'put ''XHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxCPVsiXHUwNmE5XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDYzNFx1MDY0OFx1MDYyOFx1MDYyN1x1MDYyYSIsIlx1MDYyNlx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIs''@;'; put 'put ''Ilx1MDY0Nlx1MDZjY1x1MDYzM1x1MDYyN1x1MDY0NiIsIlx1MDYyNlx1MDYyN1x1MDZjY1x1MDYyN1x1MDYzMSIsIlx1MDYyZFx1MDY0OFx1MDYzMlx1MDZkNVx1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyYVx1MDZkNVx1MDY0NVx1MDY0NVx1MDY0OFx1MDYzMiIsIlx1MDYyNlx1''@;'; put 'put ''MDYyN1x1MDYyOCIsIlx1MDYyNlx1MDZkNVx1MDZjY1x1MDY0NFx1MDY0OFx1MDY0OFx1MDY0NCIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2NDNcdTA2ZDVcdTA2NDUiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2Mg''@;'; put 'put ''XHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDZhOVx1MDZkNVx1MDY0NSJdO0kuZGVmaW5lTG9jYWxlKCJrdSIse21vbnRoczpCLG1vbnRoc1Nob3J0OkIsd2Vla2RheXM6Ilx1MDZjY1x1''@;'; put 'put ''MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUw''@;'; put 'put ''NjQ3XHUyMDBjX1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUw''@;'; put 'put ''NmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3''@;'; put 'put ''XHUyMDBjXHUwNjQ1X1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY0N1x1MDY0N1x1MjAw''@;'; put 'put ''Y1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjQ3X1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYyNlx1MDZjZVx1''@;'; put 'put ''MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwY3xcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MvLGlzUE06ZnVuY3Rpb24oUCl7cmV0dXJuL1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYy8udGVzdChQKX0sbWVyaWRpZW06ZnVuY3Rp''@;'; put 'put ''b24oUCxGLE8pe3JldHVybiBQPDEyPyJcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MiOiJcdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyNlx1MDY0N1x1MjAwY1x1MDY0NVx1MDYzMVx1''@;'; put 'put ''MDZjNiBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0RGF5OiJbXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHRXZWVrOiJk''@;'; put 'put ''ZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNjQ4XHUwNmNlXHUwNjQ2XHUwNmNlIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2NDNc''@;'; put 'put ''dTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDRcdTA2NDdcdTIwMGMgJXMiLHBhc3Q6IiVzIixzOiJcdTA2ODZcdTA2NDdcdTIwMGNcdTA2NDZcdTA2MmYgXHUwNjg2XHUwNjMxXHUwNjQzXHUw''@;'; put 'put ''NjQ3XHUyMDBjXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIixzczoiXHUwNjg2XHUwNjMxXHUwNjQzXHUwNjQ3XHUyMDBjICVkIixtOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUwNjQ3XHUyMDBjXHUwNjQzIixtbToiJWQgXHUwNjJlXHUwNjQ4XHUwNjQ0''@;'; put 'put ''XHUwNjQ3XHUyMDBjXHUwNjQzIixoOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixoaDoiJWQgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixkOiJcdTA2Y2NcdTA2NDdcdTIwMGNc''@;'; put 'put ''dTA2NDMgXHUwNjk1XHUwNmM2XHUwNjk4IixkZDoiJWQgXHUwNjk1XHUwNmM2XHUwNjk4IixNOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNmFmIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNmFmIix5OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2''@;'; put 'put ''NDMgXHUwNjMzXHUwNjI3XHUwNmI1Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNmI1In0scHJlcGFyc2U6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihG''@;'; put 'put ''KXtyZXR1cm4gZ1tGXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4''@;'; put 'put ''NikpfSw5OTE4NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezA6Ii1cdTA0NDdcdTA0YWYiLDE6Ii1cdTA0NDdcdTA0MzgiLDI6Ii1cdTA0NDdcdTA0MzgiLDM6Ii1cdTA0NDdcdTA0YWYiLDQ6Ii1cdTA0NDdcdTA0YWYiLDU6Ii1cdTA0NDdcdTA0''@;'; put 'put ''MzgiLDY6Ii1cdTA0NDdcdTA0NGIiLDc6Ii1cdTA0NDdcdTA0MzgiLDg6Ii1cdTA0NDdcdTA0MzgiLDk6Ii1cdTA0NDdcdTA0NDMiLDEwOiItXHUwNDQ3XHUwNDQzIiwyMDoiLVx1MDQ0N1x1MDQ0YiIsMzA6Ii1cdTA0NDdcdTA0NDMiLDQwOiItXHUwNDQ3XHUwNDRiIiw1MDoiLVx1MDQ0N1x1''@;'; put 'put ''MDRhZiIsNjA6Ii1cdTA0NDdcdTA0NGIiLDcwOiItXHUwNDQ3XHUwNDM4Iiw4MDoiLVx1MDQ0N1x1MDQzOCIsOTA6Ii1cdTA0NDdcdTA0NDMiLDEwMDoiLVx1MDQ0N1x1MDRhZiJ9O0kuZGVmaW5lTG9jYWxlKCJreSIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUw''@;'; put 'put ''NDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRl''@;'; put 'put ''XHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQz''@;'; put 'put ''MVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MF9c''@;'; put 'put ''dTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MTZcdTA0MzVcdTA0M2FcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE0XHUwNGFmXHUwNDM5XHUwNDQ4XHUwNGU5XHUwNDNjXHUwNDMxXHUwNGFmX1x1MDQyOFx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQz''@;'; put 'put ''OF9cdTA0MjhcdTA0MzBcdTA0NDBcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDExXHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MThcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzgiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDE2XHUwNDM1XHUwNDNhX1x1MDQxNFx1MDRhZlx1MDQzOV9cdTA0MjhcdTA0MzVcdTA0MzlfXHUwNDI4XHUwNDMwXHUwNDQwX1x1MDQxMVx1MDQzNVx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDE4XHUwNDQ4XHUwNDM1Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJcdTA0MTZcdTA0M2FfXHUwNDE0XHUwNDM5X1x1MDQyOFx1MDQzOV9cdTA0MjhcdTA0NDBfXHUwNDExXHUwNDM5X1x1MDQxNlx1MDQzY19cdTA0MThcdTA0NDgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNGFmXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQi''@;'; put 'put ''LG5leHREYXk6IltcdTA0MmRcdTA0NDBcdTA0NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDdcdTA0NGRcdTA0NGQgXHUwNDQx''@;'; put 'put ''XHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2FcdTA0ZTlcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0YWZcdTA0M2RcdTA0YWZdIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0''@;'; put 'put ''NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0MzhcdTA0NDdcdTA0MzhcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQzY1x1MDQ0M1x1MDQ0MFx1MDQ0M1x1MDQzZCIsczoiXHUwNDMxXHUwNDM4XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ3''@;'; put 'put ''XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDRhZlx1''@;'; put 'put ''MDQzZFx1MDRlOVx1MDQ0MiIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQz''@;'; put 'put ''ZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1''@;'; put 'put ''MDQ0N1x1MDQzOHxcdTA0NDdcdTA0NGJ8XHUwNDQ3XHUwNGFmfFx1MDQ0N1x1MDQ0MykvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKF9bQl18fF9bQiUxMF18fF9bQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDM1OTY5OmZ1bmN0aW9u''@;'; put 'put ''KHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEYsTyx6LE4pe3ZhciBMPXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdlciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50Iiwi''@;'; put 'put ''ZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIE8/TFt6XVswXTpMW3pdWzFdfWZ1bmN0aW9uIHcoRil7aWYoRj1wYXJzZUludChGLDEwKSxpc05hTihGKSlyZXR1cm4hMTtpZihGPDApcmV0dXJuITA7aWYoRjwxMClyZXR1cm4gNDw9RiYmRjw9NztpZihG''@;'; put 'put ''PDEwMCl7dmFyIE89RiUxMDtyZXR1cm4gdygwPT09Tz9GLzEwOk8pfWlmKEY8MWU0KXtmb3IoO0Y+PTEwOylGLz0xMDtyZXR1cm4gdyhGKX1yZXR1cm4gdyhGLz0xZTMpfUkuZGVmaW5lTG9jYWxlKCJsYiIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRlcnpfQWJyXHhlYmxsX01lZV9K''@;'; put 'put ''dW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dDohMCx3ZWVrZGF5czoiU29ubmRlZ19NXHhlOWluZGVnX0RceGVibnNjaGRlZ19NXHhlYnR0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTVx4ZTkuX0RceGViLl9NXHhlYi5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46IlNvX01ceGU5X0RceGViX01ceGViX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixM''@;'; put 'put ''TEw6IkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFz''@;'; put 'put ''dERheToiW0dceGVic2NodGVyIHVtXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltMZXNjaHRlXSBkZGRkIFt1bV0gTFQifX19LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOmZ1bmN0aW9uIGcoRil7cmV0dXJuIHcoRi5zdWJzdHIoMCxGLmluZGV4T2YoIiAiKSkpPyJhICIrRjoiYW4gIitGfSxwYXN0OmZ1bmN0aW9uIEIoRil7cmV0dXJuIHcoRi5zdWJzdHIoMCxGLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrRjoidmlydW4gIitGfSxzOiJlIHB1ZXIg''@;'; put 'put ''U2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTpfLG1tOiIlZCBNaW51dHRlbiIsaDpfLGhoOiIlZCBTdG9ubmVuIixkOl8sZGQ6IiVkIERlZWciLE06XyxNTToiJWQgTVx4ZTlpbnQiLHk6Xyx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5h''@;'; put 'put ''bDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzMzUyNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUw''@;'; put 'put ''ZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2Rc''@;'; put 'put ''dTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5''@;'; put 'put ''OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1''@;'; put 'put ''MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlc''@;'; put 'put ''dTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGVhZFx1MGViMlx1MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFc''@;'; put 'put ''dTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBl''@;'; put 'put ''YjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGU5N19cdTBlODhfXHUwZWFkXHUwZTg0X1x1MGU5ZV9cdTBlOWVcdTBlYWJfXHUwZWFhXHUwZTgxX1x1MGVhYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDpt''@;'; put 'put ''bTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJcdTBlYTdcdTBlYjFcdTBlOTlkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUw''@;'; put 'put ''ZWM5XHUwZWIyfFx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4Ny8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Ij09PWd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj8iXHUwZTk1XHUwZWFk''@;'; put 'put ''XHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyIjoiXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBlYTFcdTBlYjdcdTBlYzlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWFkXHUwZWI3XHUwZWM4XHUwZTk5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlZGNcdTBlYzlcdTBlYjJcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWE3XHUwZWIyXHUwZTk5XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlYzFcdTBlYTVcdTBlYzlcdTBlYTdcdTBlOTlcdTBlYjVc''@;'; put 'put ''dTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTBlYWRcdTBlYjVcdTBlODEgJXMiLHBhc3Q6IiVzXHUwZTljXHUwZWM4XHUwZWIyXHUwZTk5XHUwZWExXHUwZWIyIixzOiJcdTBlOWFcdTBlY2RcdTBlYzhcdTBl''@;'; put 'put ''YzBcdTBlOTdcdTBlYmJcdTBlYzhcdTBlYjJcdTBlYzNcdTBlOTRcdTBlYTdcdTBlYjRcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLHNzOiIlZCBcdTBlYTdcdTBlYjRcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG06IjEgXHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtbToiJWQgXHUwZTk5''@;'; put 'put ''XHUwZWIyXHUwZTk3XHUwZWI1IixoOiIxIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVhMVx1MGU4NyIsaGg6IiVkIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVhMVx1MGU4NyIsZDoiMSBcdTBlYTFcdTBlYjdcdTBlYzkiLGRkOiIlZCBcdTBlYTFcdTBlYjdc''@;'; put 'put ''dTBlYzkiLE06IjEgXHUwZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5IixNTToiJWQgXHUwZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5Iix5OiIxIFx1MGU5Ylx1MGViNSIseXk6IiVkIFx1MGU5Ylx1MGViNSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LyhcdTBlOTdcdTBlYjVcdTBl''@;'; put 'put ''YzgpXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4iXHUwZTk3XHUwZWI1XHUwZWM4IitnfX0pfSh5KDk3NTg2KSl9LDkwNDExOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17c3M6InNla3VuZFx1MDExN19zZWt1bmRcdTAxN2VpXHUw''@;'; put 'put ''MTczX3Nla3VuZGVzIixtOiJtaW51dFx1MDExN19taW51dFx1MDExN3NfbWludXRcdTAxMTkiLG1tOiJtaW51dFx1MDExN3NfbWludVx1MDEwZGlcdTAxNzNfbWludXRlcyIsaDoidmFsYW5kYV92YWxhbmRvc192YWxhbmRcdTAxMDUiLGhoOiJ2YWxhbmRvc192YWxhbmRcdTAxNzNfdmFsYW5k''@;'; put 'put ''YXMiLGQ6ImRpZW5hX2RpZW5vc19kaWVuXHUwMTA1IixkZDoiZGllbm9zX2RpZW5cdTAxNzNfZGllbmFzIixNOiJtXHUwMTE3bnVvX21cdTAxMTduZXNpb19tXHUwMTE3bmVzXHUwMTJmIixNTToibVx1MDExN25lc2lhaV9tXHUwMTE3bmVzaVx1MDE3M19tXHUwMTE3bmVzaXVzIix5OiJtZXRh''@;'; put 'put ''aV9tZXRcdTAxNzNfbWV0dXMiLHl5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMifTtmdW5jdGlvbiBCKHosTixMLEspe3JldHVybiBOP1AoTClbMF06Sz9QKEwpWzFdOlAoTClbMl19ZnVuY3Rpb24gdyh6KXtyZXR1cm4geiUxMD09MHx8ej4xMCYmejwyMH1mdW5jdGlvbiBQKHope3JldHVybiBf''@;'; put 'put ''W3pdLnNwbGl0KCJfIil9ZnVuY3Rpb24gRih6LE4sTCxLKXt2YXIgVT16KyIgIjtyZXR1cm4gMT09PXo/VStCKDAsTixMWzBdLEspOk4/VSsodyh6KT9QKEwpWzFdOlAoTClbMF0pOks/VStQKEwpWzFdOlUrKHcoeik/UChMKVsxXTpQKEwpWzJdKX1JLmRlZmluZUxvY2FsZSgibHQiLHttb250''@;'; put 'put ''aHM6e2Zvcm1hdDoic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmRcdTAxN2Vpb19nZWd1XHUwMTdlXHUwMTE3c19iaXJcdTAxN2VlbGlvX2xpZXBvc19ydWdwalx1MDE2Ylx1MDEwZGlvX3J1Z3NcdTAxMTdqb19zcGFsaW9fbGFwa3JpXHUwMTBkaW9fZ3J1b2RcdTAxN2VpbyIuc3BsaXQoIl8i''@;'; put 'put ''KSxzdGFuZGFsb25lOiJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1XHUwMTdlXHUwMTE3X2Jpclx1MDE3ZWVsaXNfbGllcGFfcnVncGpcdTAxNmJ0aXNfcnVnc1x1MDExN2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhc''@;'; put 'put ''W1teXFtcXV0qXF18XHMpK01NTU0/fE1NTU0/KFxbW15cW1xdXSpcXXxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6InNhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6InNla21hZGllblx1MDEyZl9waXJt''@;'; put 'put ''YWRpZW5cdTAxMmZfYW50cmFkaWVuXHUwMTJmX3RyZVx1MDEwZGlhZGllblx1MDEyZl9rZXR2aXJ0YWRpZW5cdTAxMmZfcGVua3RhZGllblx1MDEyZl9cdTAxNjFlXHUwMTYxdGFkaWVuXHUwMTJmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJh''@;'; put 'put ''ZGllbmlzX3RyZVx1MDEwZGlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc19cdTAxNjFlXHUwMTYxdGFkaWVuaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L2RkZGQgSEg6bW0vfSx3ZWVrZGF5c1Nob3J0OiJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl9cdTAxNjBlXHUwMTYxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTX1BfQV9UX0tfUG5fXHUwMTYwIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6''@;'; put 'put ''IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2''@;'; put 'put ''YWwuXSIsbGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwaWFuZGllbl0gTFQiLG5leHREYXk6IltSeXRval0gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbVmFrYXJdIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W1ByYVx1MDExN2p1c1x1MDEyZl0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG8gJXMiLHBhc3Q6InByaWVcdTAxNjEgJXMiLHM6ZnVuY3Rpb24gZyh6LE4sTCxLKXtyZXR1cm4gTj8ia2VsaW9zIHNla3VuZFx1MDExN3MiOks/ImtlbGlcdTAxNzMgc2Vr''@;'; put 'put ''dW5kXHUwMTdlaVx1MDE3MyI6ImtlbGlhcyBzZWt1bmRlcyJ9LHNzOkYsbTpCLG1tOkYsaDpCLGhoOkYsZDpCLGRkOkYsTTpCLE1NOkYseTpCLHl5OkZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKHope3JldHVybiB6KyItb2ppIn0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzI2MjE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXtzczoic2VrdW5kZXNfc2VrdW5kXHUwMTEzbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pblx1MDE2YnRlc19taW5cdTAx''@;'; put 'put ''NmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksbW06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0''@;'; put 'put ''KCJfIiksaGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksZGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibVx1MDExM25l''@;'; put 'put ''XHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIiksTU06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLHk6ImdhZGFfZ2FkaWVt''@;'; put 'put ''X2dhZHNfZ2FkaSIuc3BsaXQoIl8iKSx5eToiZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpfTtmdW5jdGlvbiBnKE8seixOKXtyZXR1cm4gTj96JTEwPT0xJiZ6JTEwMCE9MTE/T1syXTpPWzNdOnolMTA9PTEmJnolMTAwIT0xMT9PWzBdOk9bMV19ZnVuY3Rpb24gQihPLHosTil7''@;'; put 'put ''cmV0dXJuIE8rIiAiK2coX1tOXSxPLHopfWZ1bmN0aW9uIHcoTyx6LE4pe3JldHVybiBnKF9bTl0sTyx6KX1JLmRlZmluZUxvY2FsZSgibHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJs''@;'; put 'put ''aWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEz''@;'; put 'put ''dGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmVcdTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBE''@;'; put 'put ''LiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUlx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0''@;'; put 'put ''V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUwMTAxXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBQKE8seil7cmV0dXJuIHo/ImRhXHUwMTdlYXMgc2VrdW5kZXMi''@;'; put 'put ''OiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUwMTEzbSJ9LHNzOkIsbTp3LG1tOkIsaDp3LGhoOkIsZDp3LGRkOkIsTTp3LE1NOkIseTp3LHl5OkJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4Nikp''@;'; put 'put ''fSw4NTg2OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3dvcmRzOntzczpbInNla3VuZCIsInNla3VuZGEiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxo''@;'; put 'put ''OlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWplc2VjIiwibWplc2VjYSIsIm1qZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxD''@;'; put 'put ''YXNlOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIDE9PT1CP3dbMF06Qj49MiYmQjw9ND93WzFdOndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihCLHcsUCl7dmFyIEY9Xy53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVuZ3RoP3c/RlswXTpGWzFdOkIrIiAiK18uY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShC''@;'; put 'put ''LEYpfX07SS5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpf''@;'; put 'put ''anVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''bmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIs''@;'; put 'put ''TDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigp''@;'; put 'put ''e3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1''@;'; put 'put ''XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkamVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3Jr''@;'; put 'put ''YV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpfLnRyYW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDoiZGFuIixkZDpfLnRy''@;'; put 'put ''YW5zbGF0ZSxNOiJtamVzZWMiLE1NOl8udHJhbnNsYXRlLHk6ImdvZGludSIseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwzNTg4MTpmdW5jdGlvbih1ZSxYLHkp''@;'; 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 ''dSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDkyMzkxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWsiLHttb250''@;'; put 'put ''aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkXHUwNDM4X1x1MDQ1OFx1MDQ0M1x1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0''@;'; put 'put ''Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0''@;'; put 'put ''M2RfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0''@;'; put 'put ''M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQz''@;'; put 'put ''YV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDQxXHUw''@;'; put 'put ''NDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQzNV9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUw''@;'; put 'put ''NDQyX1x1MDQ0MVx1MDQzMFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkZV9cdTA0M2ZvX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRT''@;'; put 'put ''OiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0MzVcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXHUwNDNlXSBMVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJcdTA0M2VdIExUIixuZXh0V2VlazoiW1x1MDQxMlx1MDQzZV0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJcdTA0M2VdIExUIixsYXN0''@;'; put 'put ''V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCI7Y2FzZSAxOmNhc2UgMjpj''@;'; put 'put ''YXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNlXHUwNDQyXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFz''@;'; put 'put ''dDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0NDMgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0''@;'; put 'put ''XHUwNDM4IixtOiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDQ3XHUwNDMwXHUwNDQx''@;'; put 'put ''IixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIixNOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Iix5OiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTAsdz1nJTEwMDtyZXR1cm4gMD09''@;'; put 'put ''PWc/ZysiLVx1MDQzNVx1MDQzMiI6MD09PXc/ZysiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwyMD9nKyItXHUwNDQyXHUwNDM4IjoxPT09Qj9nKyItXHUwNDMyXHUwNDM4IjoyPT09Qj9nKyItXHUwNDQwXHUwNDM4Ijo3PT09Qnx8OD09PUI/ZysiLVx1MDQzY1x1MDQzOCI6ZysiLVx1MDQ0Mlx1''@;'; put 'put ''MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDIxMTI2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWwiLHttb250aHM6Ilx1MGQxY1x1MGQyOFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmJcdTBk''@;'; put 'put ''NDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJlXHUwZDNlXHUwZDdjXHUwZDFhXHUwZDRkXHUwZDFhXHUwZDRkX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1MGQzZlx1MGQ3ZF9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUw''@;'; put 'put ''ZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OF9cdTBkMTNcdTBkMTdcdTBkMzhcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGRfXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1''@;'; put 'put ''MGQ0Ylx1MGQyY1x1MGQ3Y19cdTBkMjhcdTBkMzVcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyXHUwZDJjXHUwZDdjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkMWNcdTBkMjhcdTBkNDEuX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0''@;'; put 'put ''MS5fXHUwZDJlXHUwZDNlXHUwZDdjLl9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2YuX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFjXHUwZDQyXHUwZDMyXHUwZDQ4Ll9cdTBkMTNcdTBkMTcuX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1''@;'; put 'put ''MGQzMVx1MGQ0ZFx1MGQzMS5fXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiLl9cdTBkMjhcdTBkMzVcdTBkMDIuX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDMxXHUw''@;'; put 'put ''ZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQzM1x1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRcdTBkMzVcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDI4XHUw''@;'; put 'put ''ZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2ZcdTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM2XHUwZDI4XHUwZDNmXHUw''@;'; put 'put ''ZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQ3Y19cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkN2VfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1X1x1MGQyY1x1MGQ0MVx1MGQy''@;'; put 'put ''N1x1MGQ3Yl9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkMDJfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmX1x1MGQzNlx1MGQyOFx1MGQzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDFlXHUwZDNlX1x1MGQyNFx1MGQzZl9cdTBkMWFcdTBkNGFf''@;'; put 'put ''XHUwZDJjXHUwZDQxX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZV9cdTBkMzVcdTBkNDZfXHUwZDM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExUUzoiQSBoOm1tOnNzIC1cdTBkMjhcdTBkNDEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDRkXSBMVCIsbmV4dERheToiW1x1''@;'; put 'put ''MGQyOFx1MGQzZVx1MGQzM1x1MGQ0Nl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQzMlx1MGQ0Nl0gTFQiLGxhc3RXZWVrOiJbXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXSBkZGRkLCBMVCIsc2FtZUVs''@;'; put 'put ''c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIixwYXN0OiIlcyBcdTBkMmVcdTBkNDFcdTBkN2JcdTBkMmFcdTBkNGQiLHM6Ilx1MGQwNVx1MGQ3ZFx1MGQyYSBcdTBkMjhcdTBkM2ZcdTBkMmVcdTBkM2Zc''@;'; put 'put ''dTBkMzdcdTBkMTlcdTBkNGRcdTBkMTlcdTBkN2UiLHNzOiIlZCBcdTBkMzhcdTBkNDZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkN2JcdTBkMjFcdTBkNGQiLG06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLG1tOiIl''@;'; put 'put ''ZCBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLGg6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGhoOiIlZCBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBk''@;'; put 'put ''MTVcdTBkNDJcdTBkN2MiLGQ6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLGRkOiIlZCBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLE06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLE1NOiIlZCBc''@;'; put 'put ''dTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLHk6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIiLHl5OiIlZCBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIifSxtZXJpZGllbVBhcnNlOi9cdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2Z8XHUwZDMw''@;'; put 'put ''XHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2fFx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGR8XHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyfFx1MGQz''@;'; put 'put ''MFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZi9pLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiPT09QiYmZz49NHx8Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVc''@;'; put 'put ''dTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09Qnx8Ilx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI9PT1CP2crMTI6Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDQ/Ilx1MGQzMFx1MGQz''@;'; put 'put ''ZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6ZzwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2IjpnPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIjpnPDIwPyJcdTBkMzVcdTBkNDhc''@;'; put 'put ''dTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfSh5KDk3NTg2KSl9LDQ0ODkyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIs''@;'; put 'put ''dyxQLEYpe3N3aXRjaChQKXtjYXNlInMiOnJldHVybiB3PyJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2QgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''YVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIEIrKHc/IiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiXHUwNDNkIik7Y2FzZSJtIjpjYXNlIm1tIjpy''@;'; put 'put ''ZXR1cm4gQisodz8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBCKyh3PyIgXHUwNDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1''@;'; put 'put ''MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIEIrKHc/IiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiOiIgXHUwNGU5XHUwNDM0XHUwNDQwXHUwNDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJNIjpjYXNlIk1NIjpyZXR1cm4gQisodz8iIFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXkiOnJldHVybiBCKyh3PyIgXHUwNDM2XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIEJ9fUkuZGVmaW5lTG9jYWxlKCJt''@;'; put 'put ''biIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQw''@;'; put 'put ''X1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMyXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1''@;'; put 'put ''MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBc''@;'; put 'put ''dTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMw''@;'; put 'put ''XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBcdTA0NDFcdTA0MzBcdTA0NDBfMiBcdTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBcdTA0NDFcdTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBfOSBcdTA0NDFcdTA0MzBcdTA0NDBfMTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMiBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VF''@;'; put 'put ''eGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMlx1MDQzMFx1MDQzMF9cdTA0MWNcdTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1XHUwNDMwXHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0''@;'; put 'put ''ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUwNDRmXHUwNDNjXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQx''@;'; put 'put ''Ylx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1MDQxMVx1MDQ0Zlx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1MDQzMF9cdTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0''@;'; put 'put ''MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6''@;'; put 'put ''IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVu''@;'; put 'put ''Y3Rpb24oQil7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1CfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8MTI/Ilx1MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQw''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0OF0gTFQiLG5leHRXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5OiJbXHUwNGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0ZTlcdTA0M2RdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzNFx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNj''@;'; put 'put ''XHUwNDNkXHUwNGU5IixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAvLG9yZGluYWw6ZnVuY3Rpb24oQix3KXtzd2l0Y2godyl7Y2FzZSJk''@;'; put 'put ''IjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gQisiIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MCI7ZGVmYXVsdDpyZXR1cm4gQn19fSl9KHkoOTc1ODYpKX0sNTkwODA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2''@;'; put 'put ''OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxnPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5''@;'; put 'put ''NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9O2Z1bmN0aW9uIEIoUCxGLE8seil7dmFyIE49IiI7aWYoRilzd2l0Y2goTyl7Y2FzZSJzIjpOPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAy''@;'; put 'put ''XHUwOTI2IjticmVhaztjYXNlInNzIjpOPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjYiO2JyZWFrO2Nhc2UibSI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZiI7YnJlYWs7Y2FzZSJtbSI6Tj0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUw''@;'; put 'put ''OTNmXHUwOTFmXHUwOTQ3IjticmVhaztjYXNlImgiOk49Ilx1MDkwZlx1MDkxNSBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiaGgiOk49IiVkIFx1MDkyNFx1MDkzZVx1MDkzOCI7YnJlYWs7Y2FzZSJkIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4Ijti''@;'; put 'put ''cmVhaztjYXNlImRkIjpOPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzgiO2JyZWFrO2Nhc2UiTSI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6Tj0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTQ3IjticmVh''@;'; put 'put ''aztjYXNlInkiOk49Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciO2JyZWFrO2Nhc2UieXkiOk49IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDk0NyJ9ZWxzZSBzd2l0Y2goTyl7Y2FzZSJzIjpOPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUw''@;'; put 'put ''OTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlInNzIjpOPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UibSI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkx''@;'; put 'put ''Zlx1MDkzZSI7YnJlYWs7Y2FzZSJtbSI6Tj0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlImgiOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2UiO2JyZWFrO2Nhc2UiaGgiOk49IiVkIFx1MDkyNFx1''@;'; put 'put ''MDkzZVx1MDkzOFx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJkIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlIjticmVhaztjYXNlImRkIjpOPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiTSI6''@;'; put 'put ''Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6Tj0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlInkiOk49Ilx1MDkwZlx1MDkx''@;'; put 'put ''NVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2UiO2JyZWFrO2Nhc2UieXkiOk49IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDkzZVx1MDkwMiJ9cmV0dXJuIE4ucmVwbGFjZSgvJWQvaSxQKX1JLmRlZmluZUxvY2FsZSgibXIiLHttb250aHM6Ilx1MDkxY1x1MDkz''@;'; put 'put ''ZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkz''@;'; put 'put ''Ml9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDk0OF9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1''@;'; put 'put ''MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcu''@;'; put 'put ''X1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhLl9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDk0Ny5fXHUwOTFjXHUwOTQyXHUwOTI4Ll9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDguX1x1''@;'; put 'put ''MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFc''@;'; put 'put ''dTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNfXHUwOTJjXHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4''@;'; put 'put ''XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTM1XHUwOTNlXHUw''@;'; put 'put ''OTFjXHUwOTI0XHUwOTNlIixMVFM6IkEgaDptbTpzcyBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTExMTDoiZGRkZCwg''@;'; put 'put ''RCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MDlcdTA5MjZcdTA5NGRcdTA5MmZcdTA5M2VdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6''@;'; put 'put ''IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyZVx1MDkzZVx1MDkxN1x1MDk0MFx1MDkzMl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUwOTI3XHUwOTRkXHUwOTJmXHUwOTQ3IixwYXN0OiIlc1x1MDkyYVx1''@;'; put 'put ''MDk0Mlx1MDkzMFx1MDk0ZFx1MDkzNVx1MDk0MCIsczpCLHNzOkIsbTpCLG1tOkIsaDpCLGhoOkIsZDpCLGRkOkIsTTpCLE1NOkIseTpCLHl5OkJ9LHByZXBhcnNlOmZ1bmN0aW9uKFApe3JldHVybiBQLnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5''@;'; put 'put ''NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oRil7cmV0dXJuIGdbRl19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1''@;'; put 'put ''MDk0N3xcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwfFx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAvLG1lcmlk''@;'; put 'put ''aWVtSG91cjpmdW5jdGlvbihQLEYpe3JldHVybiAxMj09PVAmJihQPTApLCJcdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDciPT09Rnx8Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1GP1A6Ilx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MCI9PT1GfHwi''@;'; put 'put ''XHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIj09PUZ8fCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAiPT09Rj9QPj0xMj9QOlArMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihQLEYsTyl7cmV0dXJuIFA+PTAmJlA8Nj8iXHUw''@;'; put 'put ''OTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3IjpQPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiOlA8MTc/Ilx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MCI6UDwyMD8iXHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQw''@;'; put 'put ''IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sMjU5NTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtcy1teSIse21vbnRoczoiSmFudWFyaV9G''@;'; put 'put ''ZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdh''@;'; put 'put ''aGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/ZzoidGVuZ2FoYXJpIj09PUI/Zz49MTE/ZzpnKzEyOiJwZXRhbmciPT09Qnx8Im1hbGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9u''@;'; put 'put ''KGcsQix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8idGVuZ2FoYXJpIjpnPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3RE''@;'; put 'put ''YXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5p''@;'; put 'put ''dCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw3MDM5OTpmdW5jdGlvbih1''@;'; put 'put ''ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1zIix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0toYV9K''@;'; put 'put ''dW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBI''@;'; put 'put ''SC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksInBhZ2kiPT09Qj9nOiJ0ZW5nYWhhcmkiPT09''@;'; put 'put ''Qj9nPj0xMT9nOmcrMTI6InBldGFuZyI9PT1CfHwibWFsYW0iPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDExPyJwYWdpIjpnPDE1PyJ0ZW5nYWhhcmkiOmc8MTk/InBldGFuZyI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGlu''@;'; put 'put ''aSBwdWt1bF0gTFQiLG5leHREYXk6IltFc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tlbG1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlcGFzIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi''@;'; put 'put ''ZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGVwYXMiLHM6ImJlYmVyYXBhIHNhYXQiLHNzOiIlZCBzYWF0IixtOiJzZW1pbml0IixtbToiJWQgbWluaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNl''@;'; put 'put ''dGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDc5OTAyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXQiLHttb250aHM6Ikphbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X1x1''@;'; put 'put ''MDEyMHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EaVx1MDEwYmVtYnJ1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRnJhX01hcl9BcHJfTWVqX1x1MDEyMHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGlcdTAxMGIiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6IklsLVx1MDEyNmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnXHUwMTI3YV9JbC1cdTAxMjZhbWlzX0lsLVx1MDEyMGltZ1x1MDEyN2FfSXMtU2lidCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAxMjZhZF9UbmVfVGxpX0VyYl9cdTAxMjZhbV9cdTAxMjBpbV9TaWIiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDEyNmFfVG5fVGxfRXJfXHUwMTI2YV9cdTAxMjBpX1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lsbHVtIGZpbC1dTFQiLG5leHREYXk6IltHXHUwMTI3YWRhIGZpbC1dTFQiLG5leHRXZWVrOiJkZGRkIFtmaWwtXUxUIixsYXN0RGF5OiJbSWwtYmllcmFcdTAxMjcgZmlsLV1MVCIsbGFzdFdl''@;'; put 'put ''ZWs6ImRkZGQgW2xpIGdcdTAxMjdhZGRhXSBbZmlsLV1MVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZlx1MjAxOSAlcyIscGFzdDoiJXMgaWx1IixzOiJmdGl0IHNla29uZGkiLHNzOiIlZCBzZWtvbmRpIixtOiJtaW51dGEiLG1tOiIlZCBtaW51dGkiLGg6InNpZWdc''@;'; put 'put ''dTAxMjdhIixoaDoiJWQgc2llZ1x1MDEyN2F0IixkOiJcdTAxMjF1cm5hdGEiLGRkOiIlZCBcdTAxMjFyYW5ldCIsTToieGFoYXIiLE1NOiIlZCB4aHVyIix5OiJzZW5hIix5eToiJWQgc25pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIs''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzI5ODU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTEwNDEiLDI6Ilx1MTA0MiIsMzoiXHUxMDQzIiw0OiJcdTEwNDQiLDU6Ilx1MTA0NSIsNjoiXHUxMDQ2Iiw3OiJcdTEwNDci''@;'; put 'put ''LDg6Ilx1MTA0OCIsOToiXHUxMDQ5IiwwOiJcdTEwNDAifSxnPXsiXHUxMDQxIjoiMSIsIlx1MTA0MiI6IjIiLCJcdTEwNDMiOiIzIiwiXHUxMDQ0IjoiNCIsIlx1MTA0NSI6IjUiLCJcdTEwNDYiOiI2IiwiXHUxMDQ3IjoiNyIsIlx1MTA0OCI6IjgiLCJcdTEwNDkiOiI5IiwiXHUxMDQwIjoi''@;'; put 'put ''MCJ9O0kuZGVmaW5lTG9jYWxlKCJteSIse21vbnRoczoiXHUxMDA3XHUxMDE0XHUxMDNhXHUxMDE0XHUxMDFkXHUxMDJiXHUxMDFiXHUxMDJlX1x1MTAxNlx1MTAzMVx1MTAxNlx1MTAzMVx1MTAyY1x1MTAzYVx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTlcdTEwMTBcdTEwM2FfXHUx''@;'; put 'put ''MDI3XHUxMDE1XHUxMDNjXHUxMDJlX1x1MTAxOVx1MTAzMV9cdTEwMDdcdTEwM2RcdTEwMTRcdTEwM2FfXHUxMDA3XHUxMDMwXHUxMDFjXHUxMDJkXHUxMDJmXHUxMDA0XHUxMDNhX1x1MTAxZVx1MTAzY1x1MTAwMlx1MTAyZlx1MTAxMFx1MTAzYV9cdTEwMDVcdTEwMDBcdTEwM2FcdTEwMTBc''@;'; put 'put ''dTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDIxXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNhXHUxMDEwXHUxMDJkXHUxMDJmXHUxMDE4XHUxMDJjX1x1MTAxNFx1MTAyZFx1MTAyZlx1MTAxZFx1MTAwNFx1MTAzYVx1MTAxOFx1MTAyY19cdTEwMTJcdTEwMmVcdTEwMDdcdTEwMDRcdTEwM2Fc''@;'; put 'put ''dTEwMThcdTEwMmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTAwN1x1MTAxNFx1MTAzYV9cdTEwMTZcdTEwMzFfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAxY1x1MTAyZFx1MTAyZlx1''@;'; put 'put ''MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NfXHUxMDA1XHUxMDAwXHUxMDNhX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYV9cdTEwMTRcdTEwMmRcdTEwMmZfXHUxMDEyXHUxMDJlIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTEwMTBcdTEwMTRcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJc''@;'; put 'put ''dTEwMTRcdTEwM2RcdTEwMzFfXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDFjXHUxMDJjX1x1MTAyMVx1MTAwNFx1MTAzYVx1MTAzOVx1MTAwMlx1MTAyYl9cdTEwMTdcdTEwMmZcdTEwMTJcdTEwMzlcdTEwMTNcdTEwMWZcdTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJj''@;'; put 'put ''XHUxMDFlXHUxMDE1XHUxMDEwXHUxMDMxXHUxMDM4X1x1MTAxZVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMDVcdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFm''@;'; put 'put ''XHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDFjXHUxMDJjX1x1MTAwMlx1MTAyYl9cdTEwMWZcdTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNj''@;'; put 'put ''XHUxMDJjX1x1MTAxZVx1MTAzMVx1MTAyY19cdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1N''@;'; put 'put ''TSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTEwMWFcdTEwMTRcdTEwMzEuXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbmV4dERheToiW1x1MTAxOVx1MTAxNFx1MTAwMFx1MTAzYVx1MTAxNlx1MTAzY1x1MTAxNFx1MTAzYV0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10i''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0RGF5OiJbXHUxMDE5XHUxMDE0XHUxMDMxLlx1MTAwMF0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLGxhc3RXZWVrOiJbXHUxMDE1XHUxMDNjXHUxMDJlXHUxMDM4XHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUx''@;'; put 'put ''MDMxXHUxMDJjXSBkZGRkIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTEwMWNcdTEwMmNcdTEwMTlcdTEwMGFcdTEwM2FcdTEwMzcgJXMgXHUxMDE5XHUxMDNlXHUxMDJjIixwYXN0OiJcdTEwMWNcdTEwM2RcdTEwMTRcdTEw''@;'; put 'put ''M2FcdTEwMDFcdTEwMzJcdTEwMzdcdTEwMWVcdTEwMzFcdTEwMmMgJXMgXHUxMDAwIixzOiJcdTEwMDVcdTEwMDBcdTEwMzlcdTEwMDBcdTEwMTRcdTEwM2EuXHUxMDIxXHUxMDE0XHUxMDBhXHUxMDNhXHUxMDM4XHUxMDA0XHUxMDFhXHUxMDNhIixzczoiJWQgXHUxMDA1XHUxMDAwXHUxMDM5''@;'; put 'put ''XHUxMDAwXHUxMDE0XHUxMDM3XHUxMDNhIixtOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTlcdTEwMmRcdTEwMTRcdTEwMDVcdTEwM2EiLG1tOiIlZCBcdTEwMTlcdTEwMmRcdTEwMTRcdTEwMDVcdTEwM2EiLGg6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxNFx1MTAyY1x1MTAxYlx1MTAyZSIs''@;'; put 'put ''aGg6IiVkIFx1MTAxNFx1MTAyY1x1MTAxYlx1MTAyZSIsZDoiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFiXHUxMDAwXHUxMDNhIixkZDoiJWQgXHUxMDFiXHUxMDAwXHUxMDNhIixNOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMWMiLE1NOiIlZCBcdTEwMWMiLHk6Ilx1MTAxMFx1MTAwNVx1MTAz''@;'; put 'put ''YVx1MTAxNFx1MTAzZVx1MTAwNVx1MTAzYSIseXk6IiVkIFx1MTAxNFx1MTAzZVx1MTAwNVx1MTAzYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTEwNDFcdTEwNDJcdTEwNDNcdTEwNDRcdTEwNDVcdTEwNDZcdTEwNDdcdTEwNDhcdTEwNDlcdTEwNDBdL2cs''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY3ODU5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibmIiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9t''@;'; put 'put ''YXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoic1x4ZjguX21hLl90aS5fb24uX3RvLl9mci5fbFx4ZjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDpt''@;'; put 'put ''bTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wu''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoibm9lbiBzZWt1''@;'; put 'put ''bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldHQgbWludXR0IixtbToiJWQgbWludXR0ZXIiLGg6Ilx4ZTluIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiXHhlOW4gZGFnIixkZDoiJWQgZGFnZXIiLHc6Ilx4ZTluIHVrZSIsd3c6IiVkIHVrZXIiLE06Ilx4ZTluIG1ceGU1bmVkIixNTToiJWQg''@;'; put 'put ''bVx4ZTVuZWRlciIseToiZXR0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMTM2NDI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxnPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIz''@;'; put 'put ''IiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJuZSIse21vbnRoczoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0''@;'; put 'put ''N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmXHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDFcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUw''@;'; put 'put ''OTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzN1x1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5NDdcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkyZFx1''@;'; put 'put ''MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5''@;'; put 'put ''M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOC5fXHUwOTA1XHUwOTE3Ll9cdTA5MzhcdTA5NDdcdTA5MmFcdTA5NGRcdTA5MWYuX1x1''@;'; put 'put ''MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTJkXHUwOTQ3Ll9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkwN1x1MDkyNFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5''@;'; put 'put ''MzhcdTA5NGJcdTA5MmVcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTE5XHUwOTRkXHUwOTE3XHUwOTMyXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5MzBfXHUw''@;'; put 'put ''OTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkyY1x1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MDdcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTE5XHUw''@;'; put 'put ''OTRkXHUwOTE3XHUwOTMyLl9cdTA5MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZi5fXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5MjhcdTA5M2YuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDYuX1x1MDkzOFx1MDk0Yi5fXHUw''@;'; put 'put ''OTJlXHUwOTAyLl9cdTA5MmNcdTA5NDEuX1x1MDkyY1x1MDkzZi5fXHUwOTM2XHUwOTQxLl9cdTA5MzYuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQVx1MDkx''@;'; put 'put ''NVx1MDk0YiBoOm1tOnNzIFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBo''@;'; put 'put ''Om1tIFx1MDkyY1x1MDkxY1x1MDk0NyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1h''@;'; put 'put ''dDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZnxcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5Mjh8XHUwOTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4''@;'; put 'put ''XHUwOTRifFx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiI9PT1QP3c8ND93OncrMTI6Ilx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOCI9PT1QP3c6Ilx1''@;'; put 'put ''MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI9PT1QP3c+PTEwP3c6dysxMjoiXHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwzPyJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiOnc8MTI/''@;'; put 'put ''Ilx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOCI6dzwxNj8iXHUwOTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4XHUwOTRiIjp3PDIwPyJcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQiOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1''@;'; put 'put ''MDkxY10gTFQiLG5leHREYXk6IltcdTA5MmRcdTA5NGJcdTA5MzJcdTA5M2ZdIExUIixuZXh0V2VlazoiW1x1MDkwNlx1MDkwOVx1MDkwMVx1MDkyNlx1MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkzOVx1MDkzZlx1MDkxY1x1MDk0Yl0gTFQiLGxhc3RXZWVrOiJbXHUwOTE3XHUw''@;'; put 'put ''OTBmXHUwOTE1XHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkzZSIscGFzdDoiJXMgXHUwOTA1XHUwOTE3XHUwOTNlXHUwOTIxXHUwOTNmIixzOiJcdTA5MTVcdTA5NDdcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUw''@;'; put 'put ''OTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTQ3XHUwOTIzXHUwOTRkXHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQ3XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQ3XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUg''@;'; put 'put ''XHUwOTE4XHUwOTIzXHUwOTRkXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTIzXHUwOTRkXHUwOTFmXHUwOTNlIixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUw''@;'; put 'put ''OTNmXHUwOTI4XHUwOTNlIixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTNlIix5OiJcdTA5MGZcdTA5MTUgXHUwOTJjXHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTJjXHUwOTMwXHUwOTRkXHUwOTM3In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0s''@;'; put 'put ''OTk4NzU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLGc9Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2Vw''@;'; put 'put ''X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLEI9Wy9eamFuL2ksL15mZWIvaSwvXihtYWFydHxtcnRcLj8pJC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1bFtpLl0/JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0sdz0vXihqYW51YXJpfGZl''@;'; put 'put ''YnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaTtJLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgibmwtYmUiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLE8pe3JldHVybiBGPy8tTU1NLS8udGVz''@;'; put 'put ''dChPKT9nW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8''@;'; put 'put ''ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98bWVpfGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJz''@;'; put 'put ''ZTpCLHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29f''@;'; put 'put ''ZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdmFuZGFhZyBvbV0gTFQiLG5leHREYXk6Ilttb3JnZW4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbZ2lzdGVyZW4gb21dIExUIixsYXN0V2VlazoiW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvdmVyICVzIixwYXN0OiIlcyBnZWxlZGVuIixzOiJlZW4gcGFhciBzZWNvbmRlbiIsc3M6IiVkIHNlY29uZGVuIixtOiJceGU5XHhlOW4gbWludXV0IixtbToiJWQgbWludXRlbiIsaDoiXHhlOVx4ZTluIHV1ciIsaGg6IiVkIHV1ciIsZDoiXHhl''@;'; put 'put ''OVx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VuIixNOiJceGU5XHhlOW4gbWFhbmQiLE1NOiIlZCBtYWFuZGVuIix5OiJceGU5XHhlOW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oRil7cmV0dXJuIEYr''@;'; put 'put ''KDE9PT1GfHw4PT09Rnx8Rj49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY1NDQxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2Vw''@;'; put 'put ''Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxCPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15q''@;'; put 'put ''dWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xh''@;'; put 'put ''cHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoIm5sIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVj''@;'; put 'put ''ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1''@;'; put 'put ''YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98''@;'; put 'put ''bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6''@;'; put 'put ''by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToi''@;'; put 'put ''W2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4''@;'; put 'put ''ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsdzoiXHhlOVx4ZTluIHdlZWsiLHd3OiIlZCB3ZWtlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhl''@;'; put 'put ''OVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEYpe3JldHVybiBGKygxPT09Rnx8OD09PUZ8fEY+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4''@;'; put 'put ''MTMxMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm5uIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InN1bmRhZ19tXHhlNW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRh''@;'; put 'put ''Z19sYXVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1Ll9tXHhlNS5fdHkuX29uLl90by5fZnIuX2xhdS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGU1X3R5X29uX3RvX2ZyX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSSBkYWcga2xva2thXSBM''@;'; put 'put ''VCIsbmV4dERheToiW0kgbW9yZ29uIGtsb2trYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9ra2FdIExUIixsYXN0RGF5OiJbSSBnXHhlNXIga2xva2thXSBMVCIsbGFzdFdlZWs6IltGXHhmOHJlZ1x4ZTVhbmRlXSBkZGRkIFtrbG9ra2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkYW4iLHM6Im5va3JlIHNla3VuZCIsc3M6IiVkIHNla3VuZCIsbToiZWl0IG1pbnV0dCIsbW06IiVkIG1pbnV0dCIsaDoiZWluIHRpbWUiLGhoOiIlZCB0aW1hciIsZDoiZWluIGRhZyIsZGQ6IiVkIGRhZ2FyIix3OiJlaSB2ZWtlIix3dzoi''@;'; put 'put ''JWQgdmVrZXIiLE06ImVpbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImVpdCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyNTY3OmZ1''@;'; put 'put ''bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgib2MtbG5jIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5pXHhlOHJfZmVicmlceGU4cl9tYXJceGU3X2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3RceGYyYnJlX25v''@;'; put 'put ''dmVtYnJlX2RlY2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuaVx4ZThyX2RlIGZlYnJpXHhlOHJfZGUgbWFyXHhlN19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0XHhmMmJyZV9kZSBub3ZlbWJyZV9kZSBkZWNlbWJyZSIu''@;'; put 'put ''c3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyXHhlN19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1lbmdl''@;'; put 'put ''X2RpbHVuc19kaW1hcnNfZGltXHhlOGNyZXNfZGlqXHhmMnVzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2RtX2RjX2RqX2R2X2RzIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbDoiRCBNTU0gWVlZ''@;'; put 'put ''WSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdVx4ZThpIGFdIExUIixuZXh0RGF5OiJbZGVtYW4gYV0gTFQiLG5leHRXZWVrOiJkZGRkIFthXSBMVCIsbGFzdERheToi''@;'; put 'put ''W2lceGU4ciBhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc3NhdCBhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5hcyBzZWdvbmRhcyIsc3M6IiVkIHNlZ29uZGFzIixtOiJ1bmEgbWludXRhIixtbToiJWQg''@;'; put 'put ''bWludXRhcyIsaDoidW5hIG9yYSIsaGg6IiVkIG9yYXMiLGQ6InVuIGpvcm4iLGRkOiIlZCBqb3JucyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKGcsQil7dmFyIHc9MT09PWc/InIiOjI9PT1nPyJuIjozPT09Zz8iciI6ND09PWc/InQiOiJceGU4IjtyZXR1cm4oInciPT09Qnx8IlciPT09QikmJih3PSJhIiksZyt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1Njk2MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5j''@;'; put 'put ''dGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGE2NyIsMjoiXHUwYTY4IiwzOiJcdTBhNjkiLDQ6Ilx1MGE2YSIsNToiXHUwYTZiIiw2OiJcdTBhNmMiLDc6Ilx1MGE2ZCIsODoiXHUwYTZlIiw5OiJcdTBhNmYiLDA6Ilx1MGE2NiJ9LGc9eyJcdTBhNjciOiIxIiwiXHUwYTY4Ijoi''@;'; put 'put ''MiIsIlx1MGE2OSI6IjMiLCJcdTBhNmEiOiI0IiwiXHUwYTZiIjoiNSIsIlx1MGE2YyI6IjYiLCJcdTBhNmQiOiI3IiwiXHUwYTZlIjoiOCIsIlx1MGE2ZiI6IjkiLCJcdTBhNjYiOiIwIn07SS5kZWZpbmVMb2NhbGUoInBhLWluIix7bW9udGhzOiJcdTBhMWNcdTBhMjhcdTBhMzVcdTBhMzBc''@;'; put 'put ''dTBhNDBfXHUwYTJiXHUwYTNjXHUwYTMwXHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyZVx1MGEzZVx1MGEzMFx1MGExYV9cdTBhMDVcdTBhMmFcdTBhNGRcdTBhMzBcdTBhNDhcdTBhMzJfXHUwYTJlXHUwYTA4X1x1MGExY1x1MGE0Mlx1MGEyOF9cdTBhMWNcdTBhNDFcdTBhMzJcdTBhM2VcdTBh''@;'; put 'put ''MDhfXHUwYTA1XHUwYTE3XHUwYTM4XHUwYTI0X1x1MGEzOFx1MGEyNFx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMDVcdTBhMTVcdTBhMjRcdTBhNDJcdTBhMmNcdTBhMzBfXHUwYTI4XHUwYTM1XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEyNlx1MGEzOFx1MGE3MFx1MGEyY1x1MGEzMCIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBh''@;'; put 'put ''MWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1''@;'; put 'put ''MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGExMFx1MGEyNFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhNGJcdTBhMmVcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyXHUwYTM1XHUwYTNlXHUw''@;'; put 'put ''YTMwX1x1MGEyY1x1MGE0MVx1MGEyN1x1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzVcdTBhNDBcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTQxXHUwYTcxXHUwYTE1XHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MFx1MGExYVx1''@;'; put 'put ''MGEzMFx1MGEzNVx1MGEzZVx1MGEzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhMTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1''@;'; put 'put ''MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGExMFx1MGEyNF9cdTBhMzhcdTBhNGJcdTBhMmVfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyX1x1MGEyY1x1MGE0MVx1MGEyN19cdTBhMzVcdTBhNDBcdTBhMzBfXHUwYTM4XHUw''@;'; put 'put ''YTNjXHUwYTQxXHUwYTE1XHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDciLExUUzoiQSBoOm1tOnNzIFx1MGEzNVx1MGExY1x1MGE0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1N''@;'; put 'put ''TSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTA1XHUwYTFjXSBMVCIsbmV4dERheToiW1x1MGExNVx1MGEz''@;'; put 'put ''Ml0gTFQiLG5leHRXZWVrOiJbXHUwYTA1XHUwYTE3XHUwYTMyXHUwYTNlXSBkZGRkLCBMVCIsbGFzdERheToiW1x1MGExNVx1MGEzMl0gTFQiLGxhc3RXZWVrOiJbXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiJXMgXHUwYTM1XHUwYTNmXHUwYTcxXHUwYTFhIixwYXN0OiIlcyBcdTBhMmFcdTBhM2ZcdTBhMWJcdTBhMzJcdTBhNDciLHM6Ilx1MGExNVx1MGE0MVx1MGExZCBcdTBhMzhcdTBhMTVcdTBhM2ZcdTBhNzBcdTBhMWYiLHNzOiIlZCBcdTBhMzhcdTBhMTVcdTBhM2ZcdTBhNzBcdTBh''@;'; put 'put ''MWYiLG06Ilx1MGEwN1x1MGExNSBcdTBhMmVcdTBhM2ZcdTBhNzBcdTBhMWYiLG1tOiIlZCBcdTBhMmVcdTBhM2ZcdTBhNzBcdTBhMWYiLGg6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMThcdTBhNzBcdTBhMWZcdTBhM2UiLGhoOiIlZCBcdTBhMThcdTBhNzBcdTBhMWZcdTBhNDciLGQ6Ilx1''@;'; put 'put ''MGEwN1x1MGE3MVx1MGExNSBcdTBhMjZcdTBhM2ZcdTBhMjgiLGRkOiIlZCBcdTBhMjZcdTBhM2ZcdTBhMjgiLE06Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMmVcdTBhMzlcdTBhNDBcdTBhMjhcdTBhM2UiLE1NOiIlZCBcdTBhMmVcdTBhMzlcdTBhNDBcdTBhMjhcdTBhNDciLHk6Ilx1MGEw''@;'; put 'put ''N1x1MGE3MVx1MGExNSBcdTBhMzhcdTBhM2VcdTBhMzIiLHl5OiIlZCBcdTBhMzhcdTBhM2VcdTBhMzIifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYTY3XHUwYTY4XHUwYTY5XHUwYTZhXHUwYTZiXHUwYTZjXHUwYTZkXHUwYTZlXHUwYTZmXHUwYTY2XS9n''@;'; put 'put ''LGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhMzBcdTBhM2VcdTBhMjR8XHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwfFx1MGEy''@;'; put 'put ''Nlx1MGE0MVx1MGEyYVx1MGEzOVx1MGEzZlx1MGEzMHxcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBhMzBcdTBhM2VcdTBhMjQiPT09UD93PDQ/dzp3KzEyOiJcdTBhMzhcdTBhMzVcdTBhNDdcdTBh''@;'; put 'put ''MzAiPT09UD93OiJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiPT09UD93Pj0xMD93OncrMTI6Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwYTMwXHUwYTNlXHUwYTI0''@;'; put 'put ''Ijp3PDEwPyJcdTBhMzhcdTBhMzVcdTBhNDdcdTBhMzAiOnc8MTc/Ilx1MGEyNlx1MGE0MVx1MGEyYVx1MGEzOVx1MGEzZlx1MGEzMCI6dzwyMD8iXHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlIjoiXHUwYTMwXHUwYTNlXHUwYTI0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0s''@;'; put 'put ''NjEwNjM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJzdHljemVcdTAxNDRfbHV0eV9tYXJ6ZWNfa3dpZWNpZVx1MDE0NF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWVcdTAxNDRfd3J6ZXNpZVx1MDE0NF9wYVx1MDE3YWR6aWVybmlrX2xpc3Rv''@;'; put 'put ''cGFkX2dydWR6aWVcdTAxNDQiLnNwbGl0KCJfIiksZz0ic3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplXHUwMTVibmlhX3BhXHUwMTdhZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhIi5zcGxpdCgiXyIpLEI9Wy9ec3R5L2ks''@;'; put 'put ''L15sdXQvaSwvXm1hci9pLC9ea3dpL2ksL15tYWovaSwvXmN6ZS9pLC9ebGlwL2ksL15zaWUvaSwvXndyei9pLC9ecGFcdTAxN2EvaSwvXmxpcy9pLC9eZ3J1L2ldO2Z1bmN0aW9uIHcoTyl7cmV0dXJuIE8lMTA8NSYmTyUxMD4xJiZ+fihPLzEwKSUxMCE9MX1mdW5jdGlvbiBQKE8seixOKXt2''@;'; put 'put ''YXIgTD1PKyIgIjtzd2l0Y2goTil7Y2FzZSJzcyI6cmV0dXJuIEwrKHcoTyk/InNla3VuZHkiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiB6PyJtaW51dGEiOiJtaW51dFx1MDExOSI7Y2FzZSJtbSI6cmV0dXJuIEwrKHcoTyk/Im1pbnV0eSI6Im1pbnV0Iik7Y2FzZSJoIjpyZXR1cm4gej8i''@;'; put 'put ''Z29kemluYSI6ImdvZHppblx1MDExOSI7Y2FzZSJoaCI6cmV0dXJuIEwrKHcoTyk/ImdvZHppbnkiOiJnb2R6aW4iKTtjYXNlInd3IjpyZXR1cm4gTCsodyhPKT8idHlnb2RuaWUiOiJ0eWdvZG5pIik7Y2FzZSJNTSI6cmV0dXJuIEwrKHcoTyk/Im1pZXNpXHUwMTA1Y2UiOiJtaWVzaVx1MDEx''@;'; put 'put ''OWN5Iik7Y2FzZSJ5eSI6cmV0dXJuIEwrKHcoTyk/ImxhdGEiOiJsYXQiKX19SS5kZWZpbmVMb2NhbGUoInBsIix7bW9udGhzOmZ1bmN0aW9uKE8seil7cmV0dXJuIE8/L0QgTU1NTS8udGVzdCh6KT9nW08ubW9udGgoKV06X1tPLm1vbnRoKCldOl99LG1vbnRoc1Nob3J0OiJzdHlfbHV0X21h''@;'; put 'put ''cl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYVx1MDE3YV9saXNfZ3J1Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLHdlZWtkYXlzOiJuaWVkemllbGFfcG9uaWVkemlhXHUwMTQyZWtfd3RvcmVrX1x1MDE1YnJvZGFfY3p3''@;'; put 'put ''YXJ0ZWtfcGlcdTAxMDV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5kel9wb25fd3RfXHUwMTVicl9jendfcHRfc29iIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJOZF9Qbl9XdF9cdTAxNWFyX0N6X1B0X1NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0R6aVx1MDE1YiBvXSBMVCIsbmV4dERheToiW0p1dHJvIG9d''@;'; put 'put ''IExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIG5pZWR6aWVsXHUwMTE5IG9dIExUIjtjYXNlIDI6cmV0dXJuIltXZSB3dG9yZWsgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgXHUwMTVicm9kXHUwMTE5IG9dIExUIjtjYXNlIDY6cmV0''@;'; put 'put ''dXJuIltXIHNvYm90XHUwMTE5IG9dIExUIjtkZWZhdWx0OnJldHVybiJbV10gZGRkZCBbb10gTFQifX0sbGFzdERheToiW1djem9yYWogb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBuaWVkemll''@;'; put 'put ''bFx1MDExOSBvXSBMVCI7Y2FzZSAzOnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IHNvYm90XHUwMTE5IG9dIExUIjtkZWZhdWx0OnJldHVybiJbVyB6ZXN6XHUwMTQyeV0gZGRkZCBbb10g''@;'; put 'put ''TFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6IiVzIHRlbXUiLHM6ImtpbGthIHNla3VuZCIsc3M6UCxtOlAsbW06UCxoOlAsaGg6UCxkOiIxIGR6aWVcdTAxNDQiLGRkOiIlZCBkbmkiLHc6InR5ZHppZVx1MDE0NCIsd3c6UCxNOiJtaWVzaVx1''@;'; put 'put ''MDEwNWMiLE1NOlAseToicm9rIix5eTpQfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sOTc0NzY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJwdC1iciIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyXHhlN29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2Zldl9tYXJfYWJyX21haV9qdW5f''@;'; put 'put ''anVsX2Fnb19zZXRfb3V0X25vdl9kZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWluZ29fc2VndW5kYS1mZWlyYV90ZXJceGU3YS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJhX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fc2Vn''@;'; put 'put ''X3Rlcl9xdWFfcXVpX3NleF9zXHhlMWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvXzJceGFhXzNceGFhXzRceGFhXzVceGFhXzZceGFhX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbXHhlMHNdIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10g''@;'; put 'put ''TFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQg''@;'; put 'put ''W1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoicG91Y29zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVtIG1pbnV0byIsbW06IiVkIG1pbnV0''@;'; put 'put ''b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsaW52''@;'; put 'put ''YWxpZERhdGU6IkRhdGEgaW52XHhlMWxpZGEifSl9KHkoOTc1ODYpKX0sNzg3MTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJwdCIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyXHhlN29fYWJyaWxfbWFpb19qdW5ob19q''@;'; put 'put ''dWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ29fU2VndW5kYS1mZWlyYV9U''@;'; put 'put ''ZXJceGU3YS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEb21fU2VnX1Rlcl9RdWFfUXVpX1NleF9TXHhlMWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvXzJceGFhXzNceGFhXzRceGFh''@;'; put 'put ''XzVceGFhXzZceGFhX1NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBI''@;'; put 'put ''SDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2plIFx4ZTBzXSBMVCIsbmV4dERheToiW0FtYW5oXHhlMyBceGUwc10gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwc10gTFQiLGxhc3REYXk6IltPbnRlbSBceGUwc10g''@;'; put 'put ''TFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpfHw2PT09dGhpcy5kYXkoKT8iW1x4ZGFsdGltb10gZGRkZCBbXHhlMHNdIExUIjoiW1x4ZGFsdGltYV0gZGRkZCBbXHhlMHNdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW0gJXMi''@;'; put 'put ''LHBhc3Q6ImhceGUxICVzIixzOiJzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIix3OiJ1bWEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW0g''@;'; put 'put ''bVx4ZWFzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1MTAwNDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCl7dmFyIE89IiAiO3JldHVybihCJTEwMD49MjB8fEI+PTEwMCYmQiUxMDA9PTApJiYoTz0iIGRlICIpLEIrTyt7c3M6InNlY3VuZGUiLG1tOiJtaW51dGUiLGhoOiJvcmUiLGRkOiJ6aWxlIix3dzoic1x1MDEwM3B0XHUwMTAzbVx4''@;'; put 'put ''ZTJuaSIsTU06Imx1bmkiLHl5OiJhbmkifVtQXX1JLmRlZmluZUxvY2FsZSgicm8iLHttb250aHM6ImlhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6Imlhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkdW1pbmljXHUwMTAzX2x1bmlfbWFyXHUwMjFiaV9taWVyY3VyaV9qb2lfdmlu''@;'; put 'put ''ZXJpX3NceGUybWJcdTAxMDN0XHUwMTAzIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkR1bV9MdW5fTWFyX01pZV9Kb2lfVmluX1NceGUybSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRHVfTHVfTWFfTWlfSm9fVmlfU1x4ZTIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''Om1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlthemkgbGFdIExUIixuZXh0RGF5OiJbbVx4ZTJpbmUgbGFdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBbbGFdIExUIixsYXN0RGF5OiJbaWVyaSBsYV0gTFQiLGxhc3RXZWVrOiJbZm9zdGFdIGRkZGQgW2xhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicGVzdGUgJXMiLHBhc3Q6IiVzIFx4ZWVuIHVybVx1MDEwMyIsczoiY1x4ZTJ0ZXZhIHNl''@;'; put 'put ''Y3VuZGUiLHNzOl8sbToidW4gbWludXQiLG1tOl8saDoibyBvclx1MDEwMyIsaGg6XyxkOiJvIHppIixkZDpfLHc6Im8gc1x1MDEwM3B0XHUwMTAzbVx4ZTJuXHUwMTAzIix3dzpfLE06Im8gbHVuXHUwMTAzIixNTTpfLHk6InVuIGFuIix5eTpffSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5''@;'; put 'put ''NzU4NikpfSw1MTMyNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhQLEYsTyl7cmV0dXJuIm0iPT09Tz9GPyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0''@;'; put 'put ''NDMiOlArIiAiK2Z1bmN0aW9uIF8oUCxGKXt2YXIgTz1QLnNwbGl0KCJfIik7cmV0dXJuIEYlMTA9PTEmJkYlMTAwIT0xMT9PWzBdOkYlMTA+PTImJkYlMTA8PTQmJihGJTEwMDwxMHx8RiUxMDA+PTIwKT9PWzFdOk9bMl19KHtzczpGPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2Rc''@;'; put 'put ''dTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0''@;'; put 'put ''M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpGPyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzBfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6''@;'; put 'put ''Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0M19cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoaDoiXHUwNDQ3XHUwNDMwXHUwNDQxX1x1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMF9cdTA0NDdcdTA0''@;'; put 'put ''MzBcdTA0NDFcdTA0M2VcdTA0MzIiLGRkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDRmX1x1MDQzNFx1MDQzZFx1MDQzNVx1MDQzOSIsd3c6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''M2JcdTA0MzhfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjIixNTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMF9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzVcdTA0MzIiLHl5''@;'; put 'put ''OiJcdTA0MzNcdTA0M2VcdTA0MzRfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDMwX1x1MDQzYlx1MDQzNVx1MDQ0MiJ9W09dLCtQKX12YXIgQj1bL15cdTA0NGZcdTA0M2RcdTA0MzIvaSwvXlx1MDQ0NFx1MDQzNVx1MDQzMi9pLC9eXHUwNDNjXHUwNDMwXHUwNDQwL2ksL15cdTA0MzBcdTA0M2Zc''@;'; put 'put ''dTA0NDAvaSwvXlx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdL2ksL15cdTA0MzhcdTA0NGVcdTA0M2QvaSwvXlx1MDQzOFx1MDQ0ZVx1MDQzYi9pLC9eXHUwNDMwXHUwNDMyXHUwNDMzL2ksL15cdTA0NDFcdTA0MzVcdTA0M2QvaSwvXlx1MDQzZVx1MDQzYVx1MDQ0Mi9pLC9eXHUwNDNkXHUw''@;'; put 'put ''NDNlXHUwNDRmL2ksL15cdTA0MzRcdTA0MzVcdTA0M2EvaV07SS5kZWZpbmVMb2NhbGUoInJ1Iix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Zl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMw''@;'; put 'put ''XHUwNDQwXHUwNDQyXHUwNDMwX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0''@;'; put 'put ''MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUw''@;'; put 'put ''NDQwXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1''@;'; put 'put ''MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRj''@;'; put 'put ''X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDp7Zm9ybWF0OiJcdTA0NGZc''@;'; put 'put ''dTA0M2RcdTA0MzIuX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRmX1x1MDQzMFx1MDQzMlx1MDQz''@;'; put 'put ''My5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzIuX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MC5f''@;'; put 'put ''XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDIuX1x1MDQz''@;'; put 'put ''ZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxLl9cdTA0MzRcdTA0MzVcdTA0M2EuIi5zcGxpdCgiXyIpfSx3ZWVrZGF5czp7c3RhbmRhbG9uZToiXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjXHUwNDM1X1x1''@;'; put 'put ''MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1''@;'; put 'put ''MDQzNVx1MDQ0MFx1MDQzM19cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0MzBfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDM1XHUwNDQx''@;'; put 'put ''XHUwNDM1XHUwNDNkXHUwNDRjXHUwNDM1X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQz''@;'; put 'put ''X1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM19cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQxMlx1''@;'; put 'put ''MDQzMl0gPyg/Olx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZXxcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGV8XHUwNDRkXHUwNDQyXHUwNDQzKT8gP10gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0''@;'; put 'put ''NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MV9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdc''@;'; put 'put ''dTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qixtb250aHNSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0''@;'; put 'put ''M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBc''@;'; put 'put ''dTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1''@;'; put 'put ''MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0''@;'; put 'put ''NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQzYVwuPykvaSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0Zlx1MDQzZFx1MDQzMlwuP3xcdTA0NDRcdTA0MzVc''@;'; put 'put ''dTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC4/fFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDNjXHUwNDMwXHUwNDQwXC4/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGNcdTA0NGZd''@;'; put 'put ''fFx1MDQzMFx1MDQzZlx1MDQ0MFwuP3xcdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RcLj98XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNiXC4/fFx1MDQz''@;'; put 'put ''MFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDMyXHUwNDMzXC4/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLj98XHUwNDNlXHUwNDNhXHUwNDQy''@;'; put 'put ''XHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNlXHUwNDNhXHUwNDQyXC4/fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLj98XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQw''@;'; put 'put ''W1x1MDQ0Y1x1MDQ0Zl18XHUwNDM0XHUwNDM1XHUwNDNhXC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzY1x1''@;'; put 'put ''MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Zlx1MDQ0Y118XHUwNDNjXHUwNDMwW1x1MDQ0Zlx1MDQzOV18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Zlx1MDQ0Y118XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Zlx1MDQ0Y118XHUw''@;'; put 'put ''NDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''NGZcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlwufFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLnxcdTA0M2Nc''@;'; put 'put ''dTA0MzBcdTA0NDBbXHUwNDQyLl18XHUwNDMwXHUwNDNmXHUwNDQwXC58XHUwNDNjXHUwNDMwW1x1MDQ0Zlx1MDQzOV18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zi5dfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGYuXXxcdTA0MzBcdTA0MzJcdTA0MzNcLnxcdTA0NDFc''@;'; put 'put ''dTA0MzVcdTA0M2RcdTA0NDI/XC58XHUwNDNlXHUwNDNhXHUwNDQyXC58XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wufFx1MDQzNFx1MDQzNVx1MDQzYVwuKS9pLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkg''@;'; put 'put ''XHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuLCBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0MzMuLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0MzRcdTA0M2RcdTA0NGYsIFx1MDQzMl0gTFQiLG5leHREYXk6''@;'; put 'put ''IltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAsIFx1MDQzMl0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAsIFx1MDQzMl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKFApe2lmKFAud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10''@;'; put 'put ''aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJdIGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQzNVx1''@;'; put 'put ''MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQzOFx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJb''@;'; put 'put ''XHUwNDEyIFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQ0M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sbGFzdFdlZWs6ZnVuY3Rpb24oUCl7aWYoUC53ZWVrKCk9PT10aGlzLndlZWsoKSlyZXR1cm4gMj09PXRoaXMuZGF5KCk/IltcdTA0MTJcdTA0''@;'; put 'put ''M2VdIGRkZGQsIFtcdTA0MzJdIExUIjoiW1x1MDQxMl0gZGRkZCwgW1x1MDQzMl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0MTIgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDM1XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNh''@;'; put 'put ''c2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MTIgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDRiXHUwNDM5XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MTIgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDQzXHUw''@;'; put 'put ''NDRlXSBkZGRkLCBbXHUwNDMyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzcgJXMiLHBhc3Q6IiVzIFx1MDQzZFx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzNCIsczoiXHUwNDNkXHUwNDM1XHUwNDQxXHUwNDNh''@;'; put 'put ''XHUwNDNlXHUwNDNiXHUwNDRjXHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6ZyxtOmcsbW06ZyxoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOmcsZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIixkZDpnLHc6Ilx1MDQzZFx1MDQzNVx1MDQz''@;'; put 'put ''NFx1MDQzNVx1MDQzYlx1MDQ0ZiIsd3c6ZyxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOmcseToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTpnfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0Mzh8XHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwfFx1MDQz''@;'; put 'put ''NFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAvaSxpc1BNOmZ1bmN0aW9uKFApe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzApJC8udGVzdChQKX0sbWVyaWRpZW06ZnVuY3Rpb24o''@;'; put 'put ''UCxGLE8pe3JldHVybiBQPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQzOCI6UDwxMj8iXHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwIjpQPDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''Oi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlfFx1MDQ0ZikvLG9yZGluYWw6ZnVuY3Rpb24oUCxGKXtzd2l0Y2goRil7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpyZXR1cm4gUCsiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gUCsiLVx1MDQzM1x1MDQzZSI7Y2FzZSJ3IjpjYXNlIlci''@;'; put 'put ''OnJldHVybiBQKyItXHUwNDRmIjtkZWZhdWx0OnJldHVybiBQfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzI2MDg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNjRhIiwiXHUw''@;'; put 'put ''NjQxXHUwNjRhXHUwNjI4XHUwNjMxXHUwNjQ4XHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdlXHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUw''@;'; put 'put ''NjI3XHUwNjIxXHUwNjUwIiwiXHUwNjIyXHUwNmFmXHUwNjMzXHUwNjdkIiwiXHUwNjMzXHUwNjRhXHUwNjdlXHUwNjdkXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIyXHUwNmFhXHUwNjdkXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUw''@;'; put 'put ''NjhhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0sZz1bIlx1MDYyMlx1MDY4Nlx1MDYzMSIsIlx1MDYzM1x1MDY0OFx1MDY0NVx1MDYzMSIsIlx1MDYyN1x1MDZiMVx1MDYyN1x1MDYzMVx1MDY0OCIsIlx1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOSIsIlx1MDYyZVx1MDY0NVx1MDY0YVx1MDYz''@;'; put 'put ''MyIsIlx1MDYyY1x1MDY0NVx1MDYzOSIsIlx1MDY4N1x1MDY0Nlx1MDY4N1x1MDYzMSJdO0kuZGVmaW5lTG9jYWxlKCJzZCIse21vbnRoczpfLG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6Zyx3ZWVrZGF5c1Nob3J0Omcsd2Vla2RheXNNaW46Zyxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BN''@;'; put 'put ''OmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY4NF0gTFQiLG5l''@;'; put 'put ''eHREYXk6IltcdTA2MzNcdTA2ODBcdTA2MjdcdTA2YmJcdTA2NGFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI3XHUwNmIzXHUwNjRhXHUwNjQ2IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YSBcdTA2MmFcdTA2NGFdIExUIixsYXN0RGF5OiJbXHUwNmFhXHUwNjI3XHUwNjQ0XHUwNjQ3XHUw''@;'; put 'put ''NjQ3XSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzJcdTA2MzFcdTA2NGFcdTA2NDQgXHUwNjQ3XHUwNjQxXHUwNjJhXHUwNjRhXSBkZGRkIFtcdTA2MmFcdTA2NGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2N2VcdTA2NDhcdTA2MjEiLHBhc3Q6''@;'; put 'put ''IiVzIFx1MDYyN1x1MDZiMyIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsc3M6IiVkIFx1MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsbToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsbW06IiVkIFx1MDY0NVx1MDY0''@;'; put 'put ''Nlx1MDY3ZCIsaDoiXHUwNjQ3XHUwNmFhIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsaGg6IiVkIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsZDoiXHUwNjQ3XHUwNmFhIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsZGQ6IiVkIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1''@;'; put 'put ''MDY0NiIsTToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDY0OCIsTU06IiVkIFx1MDY0NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDYyNyIseToiXHUwNjQ3XHUwNmFhIFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNl''@;'; put 'put ''OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMTM5MTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzZSIse21vbnRoczoib1x1MDExMVx1MDExMWFqYWdlbVx4ZTFubnVfZ3VvdnZhbVx4ZTFubnVfbmp1a1x1MDEwZGFtXHhlMW5udV9jdW9cdTAxNGJvbVx4ZTFubnVfbWllc3NlbVx4ZTFubnVfZ2Vhc3NlbVx4ZTFubnVfc3VvaWRu''@;'; put 'put ''ZW1ceGUxbm51X2JvcmdlbVx4ZTFubnVfXHUwMTBkYWtcdTAxMGRhbVx4ZTFubnVfZ29sZ2dvdG1ceGUxbm51X3NrXHhlMWJtYW1ceGUxbm51X2p1b3ZsYW1ceGUxbm51Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJvXHUwMTExXHUwMTExal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9p''@;'; put 'put ''X2JvcmdfXHUwMTBkYWtcdTAxMGRfZ29sZ19za1x4ZTFiX2p1b3YiLnNwbGl0KCJfIiksd2Vla2RheXM6InNvdG5hYmVhaXZpX3Z1b3NzXHhlMXJnYV9tYVx1MDE0Ylx1MDE0YmViXHhlMXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2xceGUxdnZhcmRhdCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJzb3RuX3Z1b3NfbWFcdTAxNGJfZ2Fza19kdW9yX2JlYXJfbFx4ZTF2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzX3ZfbV9nX2RfYl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVki''@;'; put 'put ''LExMOiJNTU1NIEQuIFtiLl0gWVlZWSIsTExMOiJNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW290bmUgdGldIExUIixuZXh0RGF5OiJbaWh0dGluIHRpXSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6ImRkZGQgW3RpXSBMVCIsbGFzdERheToiW2lrdGUgdGldIExUIixsYXN0V2VlazoiW292ZGRpdF0gZGRkZCBbdGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBnZWFcdTAxN2VlcyIscGFzdDoibWFcdTAxNGJpdCAlcyIsczoibW9hZGRlIHNla3Vu''@;'; put 'put ''ZGRhdCIsc3M6IiVkIHNla3VuZGRhdCIsbToib2t0YSBtaW51aHRhIixtbToiJWQgbWludWh0YXQiLGg6Im9rdGEgZGlpbW11IixoaDoiJWQgZGlpbW11dCIsZDoib2t0YSBiZWFpdmkiLGRkOiIlZCBiZWFpdnZpdCIsTToib2t0YSBtXHhlMW5udSIsTU06IiVkIG1ceGUxbnV0Iix5OiJva3Rh''@;'; put 'put ''IGphaGtpIix5eToiJWQgamFnaXQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMjUxNDc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJzaSIse21vbnRoczoiXHUwZGEyXHUwZGIxXHUwZGMwXHUwZGNmXHUwZGJiXHUwZGQyX1x1MGRiNFx1MGRkOVx1MGRiNlx1MGRiYlx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjhcdTBkY2ZcdTBkYmJcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZDg1XHUwZGI0XHUwZGNhXHUyMDBk''@;'; put 'put ''XHUwZGJiXHUwZGRhXHUwZGJkXHUwZGNhX1x1MGRiOFx1MGRkMFx1MGRiYVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYjFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGJkXHUwZGQyX1x1MGQ4NVx1MGQ5Y1x1MGRkZFx1MGRjM1x1MGRjYVx1MGRhZFx1MGRkNF9cdTBkYzNcdTBkZDBcdTBkYjRcdTBk''@;'; put 'put ''Y2FcdTBkYWRcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZDk0XHUwZDlhXHUwZGNhXHUwZGFkXHUwZGRkXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGRiMVx1MGRkY1x1MGRjMFx1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYWZcdTBkZDlcdTBk''@;'; put 'put ''YzNcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2EiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGRhMlx1MGRiMV9cdTBkYjRcdTBkZDlcdTBkYjZfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhX1x1MGQ4NVx1MGRiNFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJf''@;'; put 'put ''XHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBkODVcdTBkOWNcdTBkZGRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBkODlcdTBkYmJcdTBkZDJcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGIzXHUwZGQ0XHUwZGFmXHUwZGNmX1x1MGQ4NVx1MGQ5Zlx1MGRjNFx1MGRiYlx1MGRkNFx1MGRjMFx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkYWZcdTBkY2ZcdTBkYWZcdTBk''@;'; put 'put ''Y2ZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGM0XHUwZGMzXHUwZGNhXHUwZGI0XHUwZGFkXHUwZGQyXHUwZGIxXHUwZGNhXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRkMlx1MGQ5YVx1MGRkNFx1MGRiYlx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDlcdTBkYjFcdTBkYzNcdTBk''@;'; put 'put ''ZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2YiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZDg5XHUwZGJiXHUwZGQyX1x1MGRjM1x1MGRiM1x1MGRkNF9cdTBkODVcdTBkOWZfXHUwZGI2XHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNF9cdTBkYzNcdTBk''@;'; put 'put ''ZDJcdTBkOWFcdTBkZDRfXHUwZGMzXHUwZGQ5XHUwZGIxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBkODlfXHUwZGMzX1x1MGQ4NV9cdTBkYjZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiX1x1MGRjM1x1MGRkMl9cdTBkYzNcdTBkZDkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiYSBoOm1tIixMVFM6ImEgaDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVkgTU1NTSBEIixMTEw6IllZWVkgTU1NTSBELCBhIGg6bW0iLExMTEw6IllZWVkgTU1NTSBEIFtcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDJdIGRkZGQsIGEgaDpt''@;'; put 'put ''bTpzcyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZDg1XHUwZGFmXSBMVFtcdTBkYTddIixuZXh0RGF5OiJbXHUwZGM0XHUwZGQ5XHUwZGE3XSBMVFtcdTBkYTddIixuZXh0V2VlazoiZGRkZCBMVFtcdTBkYTddIixsYXN0RGF5OiJbXHUwZDhhXHUwZGJhXHUwZGRhXSBMVFtcdTBkYTddIixs''@;'; put 'put ''YXN0V2VlazoiW1x1MGRiNFx1MGRjM1x1MGRkNFx1MGQ5Y1x1MGRkMlx1MGRiYV0gZGRkZCBMVFtcdTBkYTddIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MGQ5YVx1MGRkMlx1MGRiMVx1MGRjYSIscGFzdDoiJXNcdTBkOWFcdTBkYTcgXHUwZGI0XHUwZGQ5XHUw''@;'; put 'put ''ZGJiIixzOiJcdTBkYWRcdTBkYWRcdTBkY2FcdTBkYjRcdTBkYmIgXHUwZDlhXHUwZGQyXHUwZGM0XHUwZGQyXHUwZGI0XHUwZGJhIixzczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiICVkIixtOiJcdTBkYjhcdTBkZDJcdTBkYjFcdTBkZDJcdTBkYWRcdTBkY2FcdTBkYWRcdTBk''@;'; put 'put ''ZDRcdTBkYzAiLG1tOiJcdTBkYjhcdTBkZDJcdTBkYjFcdTBkZDJcdTBkYWRcdTBkY2FcdTBkYWRcdTBkZDQgJWQiLGg6Ilx1MGRiNFx1MGRkMFx1MGRiYSIsaGg6Ilx1MGRiNFx1MGRkMFx1MGRiYSAlZCIsZDoiXHUwZGFmXHUwZGQyXHUwZGIxXHUwZGJhIixkZDoiXHUwZGFmXHUwZGQyXHUw''@;'; put 'put ''ZGIxICVkIixNOiJcdTBkYjhcdTBkY2ZcdTBkYzNcdTBkYmEiLE1NOiJcdTBkYjhcdTBkY2ZcdTBkYzMgJWQiLHk6Ilx1MGRjMFx1MGRjM1x1MGRiYiIseXk6Ilx1MGRjMFx1MGRjM1x1MGRiYiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwZGMwXHUwZGQwXHUwZGIx''@;'; put 'put ''XHUwZGQyLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnKyIgXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyIn0sbWVyaWRpZW1QYXJzZTovXHUwZGI0XHUwZGQ5XHUwZGJiIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0fFx1MGRiNFx1''@;'; put 'put ''MGRkOS5cdTBkYzB8XHUwZGI0Llx1MGRjMC4vLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuIlx1MGRiNC5cdTBkYzAuIj09PWd8fCJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0Ij09PWd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZz4xMT93PyJcdTBkYjQu''@;'; put 'put ''XHUwZGMwLiI6Ilx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiOnc/Ilx1MGRiNFx1MGRkOS5cdTBkYzAuIjoiXHUwZGI0XHUwZGQ5XHUwZGJiIFx1MGRjMFx1MGRiYlx1MGRkNCJ9fSl9KHkoOTc1ODYpKX0sMjM3NDE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBfPSJqYW51XHhlMXJfZmVicnVceGUxcl9tYXJlY19hcHJceGVkbF9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWd1c3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tYXJfYXByX21ceGUxal9qXHhm''@;'; put 'put ''YW5falx4ZmFsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gQihGKXtyZXR1cm4gRj4xJiZGPDV9ZnVuY3Rpb24gdyhGLE8seixOKXt2YXIgTD1GKyIgIjtzd2l0Y2goeil7Y2FzZSJzIjpyZXR1cm4gT3x8Tj8icFx4ZTFyIHNla1x4ZmFuZCI6InBceGUxciBzZWt1''@;'; put 'put ''bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBPfHxOP0wrKEIoRik/InNla3VuZHkiOiJzZWtceGZhbmQiKTpMKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIE8/Im1pblx4ZmF0YSI6Tj8ibWluXHhmYXR1IjoibWluXHhmYXRvdSI7Y2FzZSJtbSI6cmV0dXJuIE98fE4/TCsoQihGKT8ibWluXHhm''@;'; put 'put ''YXR5IjoibWluXHhmYXQiKTpMKyJtaW5ceGZhdGFtaSI7Y2FzZSJoIjpyZXR1cm4gTz8iaG9kaW5hIjpOPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJob2RpbnkiOiJob2RceGVkbiIpOkwrImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBPfHxOPyJk''@;'; put 'put ''ZVx1MDE0OCI6ImRcdTAxNDhvbSI7Y2FzZSJkZCI6cmV0dXJuIE98fE4/TCsoQihGKT8iZG5pIjoiZG5ceGVkIik6TCsiZFx1MDE0OGFtaSI7Y2FzZSJNIjpyZXR1cm4gT3x8Tj8ibWVzaWFjIjoibWVzaWFjb20iO2Nhc2UiTU0iOnJldHVybiBPfHxOP0wrKEIoRik/Im1lc2lhY2UiOiJtZXNp''@;'; put 'put ''YWNvdiIpOkwrIm1lc2lhY21pIjtjYXNlInkiOnJldHVybiBPfHxOPyJyb2siOiJyb2tvbSI7Y2FzZSJ5eSI6cmV0dXJuIE98fE4/TCsoQihGKT8icm9reSI6InJva292Iik6TCsicm9rbWkifX1JLmRlZmluZUxvY2FsZSgic2siLHttb250aHM6Xyxtb250aHNTaG9ydDpnLHdlZWtkYXlzOiJu''@;'; put 'put ''ZWRlXHUwMTNlYV9wb25kZWxva191dG9yb2tfc3RyZWRhX1x1MDE2MXR2cnRva19waWF0b2tfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX3V0X3N0X1x1MDE2MXRfcGlfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3N0X1x1MDE2MXRfcGlfc28i''@;'; put 'put ''LnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMg''@;'; put 'put ''b10gTFQiLG5leHREYXk6Ilt6YWp0cmEgb10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkZVx1MDEzZXUgb10gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFtvXSBMVCI7Y2FzZSAzOnJldHVybiJbdiBzdHJl''@;'; put 'put ''ZHUgb10gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZvIFx1MDE2MXR2cnRvayBvXSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwaWF0b2sgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IG9dIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRj''@;'; put 'put ''aCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51bFx4ZmEgbmVkZVx1MDEzZXUgb10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsXHhmYSBzdHJlZHUgb10gTFQiO2Nhc2UgNjpy''@;'; put 'put ''ZXR1cm4iW21pbnVsXHhmYSBzb2JvdHUgb10gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZWQgJXMiLHM6dyxzczp3LG06dyxtbTp3LGg6dyxoaDp3LGQ6dyxkZDp3LE06dyxNTTp3LHk6dyx5eTp3fSxkYXlPZk1vbnRoT3JkaW5hbFBh''@;'; put 'put ''cnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sOTNlMzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz1CKyIgIjtzd2l0Y2goUCl7Y2FzZSJzIjpyZXR1''@;'; put 'put ''cm4gd3x8Rj8ibmVrYWogc2VrdW5kIjoibmVrYWogc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gTysoMT09PUI/dz8ic2VrdW5kbyI6InNla3VuZGkiOjI9PT1CP3d8fEY/InNla3VuZGkiOiJzZWt1bmRhaCI6Qjw1P3d8fEY/InNla3VuZGUiOiJzZWt1bmRhaCI6InNla3VuZCIpO2Nhc2Ui''@;'; put 'put ''bSI6cmV0dXJuIHc/ImVuYSBtaW51dGEiOiJlbm8gbWludXRvIjtjYXNlIm1tIjpyZXR1cm4gTysoMT09PUI/dz8ibWludXRhIjoibWludXRvIjoyPT09Qj93fHxGPyJtaW51dGkiOiJtaW51dGFtYSI6Qjw1P3d8fEY/Im1pbnV0ZSI6Im1pbnV0YW1pIjp3fHxGPyJtaW51dCI6Im1pbnV0YW1p''@;'; put 'put ''Iik7Y2FzZSJoIjpyZXR1cm4gdz8iZW5hIHVyYSI6ImVubyB1cm8iO2Nhc2UiaGgiOnJldHVybiBPKygxPT09Qj93PyJ1cmEiOiJ1cm8iOjI9PT1CP3d8fEY/InVyaSI6InVyYW1hIjpCPDU/d3x8Rj8idXJlIjoidXJhbWkiOnd8fEY/InVyIjoidXJhbWkiKTtjYXNlImQiOnJldHVybiB3fHxG''@;'; put 'put ''PyJlbiBkYW4iOiJlbmltIGRuZW0iO2Nhc2UiZGQiOnJldHVybiBPKygxPT09Qj93fHxGPyJkYW4iOiJkbmVtIjoyPT09Qj93fHxGPyJkbmkiOiJkbmV2b21hIjp3fHxGPyJkbmkiOiJkbmV2aSIpO2Nhc2UiTSI6cmV0dXJuIHd8fEY/ImVuIG1lc2VjIjoiZW5pbSBtZXNlY2VtIjtjYXNlIk1N''@;'; put 'put ''IjpyZXR1cm4gTysoMT09PUI/d3x8Rj8ibWVzZWMiOiJtZXNlY2VtIjoyPT09Qj93fHxGPyJtZXNlY2EiOiJtZXNlY2VtYSI6Qjw1P3d8fEY/Im1lc2VjZSI6Im1lc2VjaSI6d3x8Rj8ibWVzZWNldiI6Im1lc2VjaSIpO2Nhc2UieSI6cmV0dXJuIHd8fEY/ImVubyBsZXRvIjoiZW5pbSBsZXRv''@;'; put 'put ''bSI7Y2FzZSJ5eSI6cmV0dXJuIE8rKDE9PT1CP3d8fEY/ImxldG8iOiJsZXRvbSI6Mj09PUI/d3x8Rj8ibGV0aSI6ImxldG9tYSI6Qjw1P3d8fEY/ImxldGEiOiJsZXRpIjp3fHxGPyJsZXQiOiJsZXRpIil9fUkuZGVmaW5lTG9jYWxlKCJzbCIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFy''@;'; put 'put ''ZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX1x1MDEwZGV0cnRla19wZXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3Rvci5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zb2IuIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJuZV9wb190b19zcl9cdTAxMGRlX3BlX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuIE1NLiBZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZ''@;'; put 'put ''WSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuZXMgb2JdIExUIixuZXh0RGF5OiJbanV0cmkgb2JdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2XSBbbmVkZWxqb10g''@;'; put 'put ''W29iXSBMVCI7Y2FzZSAzOnJldHVybiJbdl0gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0dXJuIlt2XSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt2XSBkZGRkIFtvYl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmFqIG9iXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJlalx1MDE2MW5qb10gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbcHJlalx1MDE2MW5qb10g''@;'; put 'put ''W3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJlalx1MDE2MW5qaV0gZGRkZCBbb2JdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDEwZGV6ICVzIixwYXN0OiJwcmVkICVzIixzOl8sc3M6XyxtOl8sbW06''@;'; put 'put ''XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDYwNDUxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtJLmRlZmluZUxvY2FsZSgic3EiLHttb250aHM6IkphbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX05ceGVibnRvcl9EaGpldG9yIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fU2hrX01hcl9QcmlfTWFqX1Flcl9L''@;'; put 'put ''b3JfR3VzX1NodF9UZXRfTlx4ZWJuX0RoaiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRSBEaWVsX0UgSFx4ZWJuXHhlYl9FIE1hcnRceGViX0UgTVx4ZWJya3VyXHhlYl9FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW5ceGViIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRpZV9IXHhlYm5fTWFy''@;'; put 'put ''X01ceGVicl9FbmpfUHJlX1NodCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRF9IX01hX01ceGViX0VfUF9TaCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovUER8TUQvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuIk0iPT09Zy5jaGFyQXQoMCl9LG1l''@;'; put 'put ''cmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj8iUEQiOiJNRCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1NvdCBuXHhlYl0gTFQiLG5leHREYXk6IltOZXNceGViciBuXHhlYl0gTFQiLG5leHRXZWVrOiJkZGRkIFtuXHhlYl0gTFQiLGxhc3REYXk6IltEamUgblx4ZWJdIExUIixsYXN0V2VlazoiZGRkZCBbZSBrYWx1YXIgblx4ZWJdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuXHhlYiAlcyIscGFzdDoiJXMgbVx4ZWIgcGFyXHhlYiIsczoiZGlzYSBzZWtvbmRhIixzczoiJWQgc2Vrb25kYSIsbToibmpceGViIG1pbnV0XHhlYiIsbW06IiVkIG1pbnV0YSIsaDoibmpceGViIG9yXHhlYiIsaGg6IiVkIG9y''@;'; put 'put ''XHhlYiIsZDoibmpceGViIGRpdFx4ZWIiLGRkOiIlZCBkaXRceGViIixNOiJualx4ZWIgbXVhaiIsTU06IiVkIG11YWoiLHk6Im5qXHhlYiB2aXQiLHl5OiIlZCB2aXRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0''@;'; put 'put ''fX0pfSh5KDk3NTg2KSl9LDQwOTA1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17d29yZHM6e3NzOlsiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwIiwiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0''@;'; put 'put ''XHUwNDM1IiwiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4Il0sbTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDNj''@;'; put 'put ''XHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIl0sbW06WyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLCJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLCJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxoOlsiXHUwNDU4XHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzAiXSxoaDpbIlx1MDQ0MVx1MDQzMFx1MDQ0MiIsIlx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCIsIlx1MDQ0MVx1''@;'; put 'put ''MDQzMFx1MDQ0Mlx1MDQzOCJdLGQ6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDM0XHUwNDMwXHUwNDNkIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCJdLGRkOlsiXHUwNDM0XHUwNDMwXHUwNDNkIiwi''@;'; put 'put ''XHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIiwiXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sTTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDNj''@;'; put 'put ''XHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIl0sTU06WyJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLCJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLCJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiXSx5OlsiXHUwNDU4XHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDNkXHUwNDQzIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzNSBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzUiXSx5eTpbIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1''@;'; put 'put ''MDQ0MyIsIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSIsIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIEIlMTA+PTEmJkIlMTA8PTQmJihCJTEwMDwxMHx8QiUxMDA+''@;'; put 'put ''PTIwKT9CJTEwPT0xP3dbMF06d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oQix3LFAsRil7dmFyIHosTz1fLndvcmRzW1BdO3JldHVybiAxPT09UC5sZW5ndGg/InkiPT09UCYmdz8iXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1''@;'; put 'put ''MDQzZFx1MDQzMCI6Rnx8dz9PWzBdOk9bMV06KHo9Xy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKEIsTyksInl5Ij09PVAmJncmJiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiPT09ej9CKyIgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjpCKyIgIit6''@;'; put 'put ''KX19O0kuZGVmaW5lTG9jYWxlKCJzci1jeXJsIix7bW9udGhzOiJcdTA0NThcdTA0MzBcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMxXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0''@;'; put 'put ''MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0M2Vc''@;'; put 'put ''dTA0M2FcdTA0NDJcdTA0M2VcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDMyXHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQ0Nlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDU4''@;'; put 'put ''XHUwNDMwXHUwNDNkLl9cdTA0NDRcdTA0MzVcdTA0MzEuX1x1MDQzY1x1MDQzMFx1MDQ0MC5fXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzZi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0MzIuX1x1MDQzNFx1MDQzNVx1MDQ0Ni4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1''@;'; put 'put ''MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzMFx1MDQzYV9cdTA0NDNcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzMFx1MDQzYV9cdTA0M2ZcdTA0MzVc''@;'; put 'put ''dTA0NDJcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNC5fXHUwNDNmXHUwNDNlXHUwNDNkLl9cdTA0NDNcdTA0NDJcdTA0M2UuX1x1MDQ0MVx1MDQ0MFx1MDQzNS5fXHUw''@;'; put 'put ''NDQ3XHUwNDM1XHUwNDQyLl9cdTA0M2ZcdTA0MzVcdTA0NDIuX1x1MDQ0MVx1MDQ0M1x1MDQzMS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNV9cdTA0M2ZcdTA0M2VfXHUwNDQzXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0MzVfXHUwNDNmXHUwNDM1X1x1MDQ0''@;'; put 'put ''MVx1MDQ0MyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuIE0uIFlZWVkuIixMTDoiRC4gTU1NTSBZWVlZLiIsTExMOiJELiBNTU1NIFlZWVkuIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZ''@;'; put 'put ''WS4gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwXHUwNDQxIFx1MDQ0M10gTFQiLG5leHREYXk6IltcdTA0NDFcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzAgXHUwNDQzXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7''@;'; put 'put ''Y2FzZSAwOnJldHVybiJbXHUwNDQzXSBbXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDQzXSBbXHUwNDQzXSBMVCI7Y2FzZSAzOnJldHVybiJbXHUwNDQzXSBbXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQzXSBbXHUwNDQzXSBMVCI7Y2FzZSA2OnJldHVybiJbXHUwNDQz''@;'; put 'put ''XSBbXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzXSBbXHUwNDQzXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDQzXSBkZGRkIFtcdTA0NDNdIExUIn19LGxhc3REYXk6IltcdTA0NThcdTA0NDNcdTA0NDdcdTA0MzUgXHUwNDQzXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0MzVdIFtcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzVdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10g''@;'; put 'put ''W1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQzXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBM''@;'; put 'put ''VCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0MzVdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzVdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0''@;'; put 'put ''MFx1MDQ0Mlx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0MzVd''@;'; put 'put ''IFtcdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzVdIFtcdTA0NDNdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1ICVzIixzOiJcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0M2FcdTA0M2VcdTA0M2JcdTA0MzhcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczpfLnRyYW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDpfLnRyYW5zbGF0''@;'; put 'put ''ZSxkZDpfLnRyYW5zbGF0ZSxNOl8udHJhbnNsYXRlLE1NOl8udHJhbnNsYXRlLHk6Xy50cmFuc2xhdGUseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw1NTA0Njpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3dvcmRzOntzczpbInNla3VuZGEiLCJzZWt1bmRlIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFu''@;'; put 'put ''IHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGQ6WyJqZWRhbiBkYW4iLCJqZWRub2cgZGFuYSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNOlsiamVkYW4gbWVzZWMiLCJqZWRub2cgbWVzZWNhIl0sTU06WyJtZXNlYyIsIm1lc2VjYSIsIm1lc2VjaSJd''@;'; put 'put ''LHk6WyJqZWRudSBnb2RpbnUiLCJqZWRuZSBnb2RpbmUiXSx5eTpbImdvZGludSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIEIlMTA+PTEmJkIlMTA8PTQmJihCJTEwMDwxMHx8QiUxMDA+PTIwKT9CJTEwPT0xP3dbMF06''@;'; put 'put ''d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oQix3LFAsRil7dmFyIHosTz1fLndvcmRzW1BdO3JldHVybiAxPT09UC5sZW5ndGg/InkiPT09UCYmdz8iamVkbmEgZ29kaW5hIjpGfHx3P09bMF06T1sxXTooej1fLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoQixPKSwieXkiPT09UCYmdyYm''@;'; put 'put ''ImdvZGludSI9PT16P0IrIiBnb2RpbmEiOkIrIiAiK3opfX07SS5kZWZpbmVMb2NhbGUoInNyIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNT''@;'; put 'put ''aG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamFrX3V0b3Jha19zcmVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmUuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0gWVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0''@;'; put 'put ''cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRlbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNl''@;'; put 'put ''IDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRlbGplXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRlbGprYV0gW3VdIExU''@;'; put 'put ''IiwiW3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JlZGVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3Vd''@;'; put 'put ''IExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5z''@;'; put 'put ''bGF0ZSxkOl8udHJhbnNsYXRlLGRkOl8udHJhbnNsYXRlLE06Xy50cmFuc2xhdGUsTU06Xy50cmFuc2xhdGUseTpfLnRyYW5zbGF0ZSx5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5''@;'; put 'put ''KDk3NTg2KSl9LDg1NzY1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic3MiLHttb250aHM6IkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9J''@;'; put 'put ''bmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkJoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNp''@;'; put 'put ''dHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfVXNfTGJfTHRfTHNfTGhfVWciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltOYW11aGxh''@;'; put 'put ''IG5nYV0gTFQiLG5leHREYXk6IltLdXNhc2EgbmdhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25nYV0gTFQiLGxhc3REYXk6IltJdG9sbyBuZ2FdIExUIixsYXN0V2VlazoiZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuZ2Eg''@;'; put 'put ''JXMiLHBhc3Q6IndlbnRla2EgbmdhICVzIixzOiJlbWl6dXp3YW5hIGxvbWNhbmUiLHNzOiIlZCBtenV6d2FuYSIsbToidW16dXp1IixtbToiJWQgZW1penV6dSIsaDoibGlob3JhIixoaDoiJWQgZW1haG9yYSIsZDoibGlsYW5nYSIsZGQ6IiVkIGVtYWxhbmdhIixNOiJpbnlhbmdhIixNTToi''@;'; put 'put ''JWQgdGlueWFuZ2EiLHk6InVtbnlha2EiLHl5OiIlZCBpbWlueWFrYSJ9LG1lcmlkaWVtUGFyc2U6L2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTE/ImVrdXNlbmkiOmc8MTU/ImVtaW5pIjpnPDE5PyJlbnRzYW1i''@;'; put 'put ''YW1hIjoiZWJ1c3VrdSJ9LG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJla3VzZW5pIj09PUI/ZzoiZW1pbmkiPT09Qj9nPj0xMT9nOmcrMTI6ImVudHNhbWJhbWEiPT09Qnx8ImVidXN1a3UiPT09Qj8wPT09Zz8wOmcrMTI6dm9pZCAwfSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOiIlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sOTkyOTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzdiIse21vbnRoczoiamFudWFyaV9mZWJydWFy''@;'; put 'put ''aV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''InNceGY2bmRhZ19tXHhlNW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmNnJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjZuX21ceGU1bl90aXNfb25zX3Rvcl9mcmVfbFx4ZjZyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmNl9tXHhlNV90aV9v''@;'; put 'put ''bl90b19mcl9sXHhmNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0i''@;'; put 'put ''LGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lkYWddIExUIixuZXh0RGF5OiJbSW1vcmdvbl0gTFQiLGxhc3REYXk6IltJZ1x4ZTVyXSBMVCIsbmV4dFdlZWs6IltQXHhlNV0gZGRkZCBMVCIsbGFzdFdlZWs6''@;'; put 'put ''IltJXSBkZGRkW3NdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiZlx4ZjZyICVzIHNlZGFuIixzOiJuXHhlNWdyYSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJlbiBtaW51dCIsbW06IiVkIG1pbnV0ZXIiLGg6ImVuIHRpbW1lIixo''@;'; put 'put ''aDoiJWQgdGltbWFyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdhciIsTToiZW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJldHQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXDplfFw6YSkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7''@;'; put 'put ''dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyI6ZSI6MT09PUJ8fDI9PT1CPyI6YSI6IjplIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDUzNDQ5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgi''@;'; put 'put ''c3ciLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92''@;'; put 'put ''X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiSjJfSjNfSjRfSjVfQWxfSWpfSjEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaGg6bW0gQSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbGVvIHNhYV0gTFQiLG5leHREYXk6IltrZXNobyBzYWFdIExUIixuZXh0V2VlazoiW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbamFuYV0gTFQiLGxhc3RXZWVrOiJbd2lraSBpbGl5''@;'; put 'put ''b3BpdGFdIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYWFkYXllIixwYXN0OiJ0b2tlYSAlcyIsczoiaGl2aSBwdW5kZSIsc3M6InNla3VuZGUgJWQiLG06ImRha2lrYSBtb2phIixtbToiZGFraWthICVkIixoOiJzYWEgbGltb2phIixo''@;'; put 'put ''aDoibWFzYWEgJWQiLGQ6InNpa3UgbW9qYSIsZGQ6InNpa3UgJWQiLE06Im13ZXppIG1tb2phIixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw3MjY4ODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGJlNyIsMjoiXHUwYmU4IiwzOiJcdTBiZTkiLDQ6Ilx1MGJlYSIsNToiXHUwYmViIiw2OiJcdTBiZWMiLDc6Ilx1MGJlZCIsODoiXHUwYmVlIiw5OiJcdTBiZWYiLDA6Ilx1MGJlNiJ9LGc9eyJcdTBiZTciOiIxIiwiXHUwYmU4IjoiMiIs''@;'; put 'put ''Ilx1MGJlOSI6IjMiLCJcdTBiZWEiOiI0IiwiXHUwYmViIjoiNSIsIlx1MGJlYyI6IjYiLCJcdTBiZWQiOiI3IiwiXHUwYmVlIjoiOCIsIlx1MGJlZiI6IjkiLCJcdTBiZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoInRhIix7bW9udGhzOiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZf''@;'; put 'put ''XHUwYmFhXHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhZVx1MGJiZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjJcdTBiY2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBi''@;'; put 'put ''OWNcdTBiYzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBi''@;'; put 'put ''YWFcdTBiYjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1''@;'; put 'put ''MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjlj''@;'; put 'put ''XHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFh''@;'; put 'put ''XHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjZFx1''@;'; put 'put ''MGJiMVx1MGJjMVx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYTRcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYjlhXHUwYmM2XHUwYmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUw''@;'; put 'put ''YmFmXHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJhYVx1MGJjMVx1MGJhNFx1MGJhOVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYjVcdTBiYmZcdTBiYWZcdTBiYmVcdTBiYjRcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBi''@;'; put 'put ''YWVcdTBiYzhfXHUwYmI1XHUwYmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJhOVx1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOCIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiYzFfXHUwYmE0XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJhZlx1MGJjZF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlc''@;'; put 'put ''dTBiY2RfXHUwYmI1XHUwYmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYmE5XHUwYmNkX1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZl9cdTBiOWFcdTBiYTlcdTBiYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGI5ZVx1MGJiZV9cdTBiYTRcdTBiYmZfXHUwYjlhXHUw''@;'; put 'put ''YmM2X1x1MGJhYVx1MGJjMV9cdTBiYjVcdTBiYmZfXHUwYmI1XHUwYmM2X1x1MGI5YSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGI4N1x1MGJhOVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLG5leHREYXk6IltcdTBiYThcdTBiYmVcdTBiYjNcdTBiYzhdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBiYThcdTBi''@;'; put 'put ''YzdcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixsYXN0V2VlazoiW1x1MGI5NVx1MGI5Zlx1MGJhOFx1MGJjZFx1MGJhNCBcdTBiYjVcdTBiYmVcdTBiYjBcdTBiYWVcdTBiY2RdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBiODdcdTBi''@;'; put 'put ''YjJcdTBiY2QiLHBhc3Q6IiVzIFx1MGJhZVx1MGJjMVx1MGJhOVx1MGJjZCIsczoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGI5YVx1MGJiZlx1MGJiMiBcdTBiYjVcdTBiYmZcdTBiYThcdTBiYmVcdTBiOWZcdTBiYmZcdTBiOTVcdTBiYjNcdTBiY2QiLHNzOiIlZCBcdTBiYjVcdTBiYmZcdTBi''@;'; put 'put ''YThcdTBiYmVcdTBiOWZcdTBiYmZcdTBiOTVcdTBiYjNcdTBiY2QiLG06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYThcdTBiYmZcdTBiYWVcdTBiYmZcdTBiOWZcdTBiYWVcdTBiY2QiLG1tOiIlZCBcdTBiYThcdTBiYmZcdTBiYWVcdTBiYmZcdTBiOWZcdTBiOTlcdTBiY2RcdTBiOTVcdTBi''@;'; put 'put ''YjNcdTBiY2QiLGg6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYTNcdTBiYmYgXHUwYmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixoaDoiJWQgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJhZVx1MGJjZCIsZDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1''@;'; put 'put ''MGJhOFx1MGJiZVx1MGJiM1x1MGJjZCIsZGQ6IiVkIFx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZCIsTToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJiZVx1MGJhNFx1MGJhZVx1MGJjZCIsTU06IiVkIFx1MGJhZVx1MGJiZVx1MGJhNFx1MGI5OVx1MGJj''@;'; put 'put ''ZFx1MGI5NVx1MGJiM1x1MGJjZCIseToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJiNVx1MGJiMFx1MGJjMVx1MGI5Zlx1MGJhZVx1MGJjZCIseXk6IiVkIFx1MGI4Nlx1MGJhM1x1MGJjZFx1MGI5Zlx1MGJjMVx1MGI5NVx1MGJiM1x1MGJjZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn1cdTBiYjVcdTBiYTRcdTBiYzEvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrIlx1MGJiNVx1MGJhNFx1MGJjMSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBiZTdcdTBiZThcdTBiZTlcdTBiZWFcdTBiZWJcdTBiZWNcdTBiZWRcdTBiZWVc''@;'; put 'put ''dTBiZWZcdTBiZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZHxcdTBi''@;'; put 'put ''YjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzh8XHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4fFx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZHxcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFcdTBiYmVcdTBiOWZcdTBiYzF8XHUwYmFlXHUwYmJlXHUwYmIyXHUwYmM4Lyxt''@;'; put 'put ''ZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8Mj8iIFx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCI6dzw2PyIgXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ijp3PDEwPyIgXHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4Ijp3PDE0PyIgXHUwYmE4XHUwYmEzXHUwYmNk''@;'; put 'put ''XHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkIjp3PDE4PyIgXHUwYjhlXHUwYmIxXHUwYmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxIjp3PDIyPyIgXHUwYmFlXHUwYmJlXHUwYmIyXHUwYmM4IjoiIFx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCJ9LG1lcmlkaWVtSG91cjpmdW5jdGlv''@;'; put 'put ''bih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiPT09UD93PDI/dzp3KzEyOiJcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgiPT09UHx8Ilx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI9PT1QfHwiXHUwYmE4XHUwYmEzXHUwYmNk''@;'; put 'put ''XHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkIj09PVAmJnc+PTEwP3c6dysxMn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sMzIwNjA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0ZSIse21vbnRoczoiXHUwYzFjXHUw''@;'; put 'put ''YzI4XHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyYlx1MGMzZlx1MGMyY1x1MGM0ZFx1MGMzMFx1MGMzNVx1MGMzMFx1MGMzZl9cdTBjMmVcdTBjM2VcdTBjMzBcdTBjNGRcdTBjMWFcdTBjM2ZfXHUwYzBmXHUwYzJhXHUwYzRkXHUwYzMwXHUwYzNmXHUwYzMyXHUwYzRkX1x1MGMyZVx1MGM0N19c''@;'; put 'put ''dTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMxN1x1MGMzOFx1MGM0ZFx1MGMxZlx1MGM0MV9cdTBjMzhcdTBjNDZcdTBjMmFcdTBjNGRcdTBjMWZcdTBjNDZcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzA1XHUwYzE1XHUwYzRk''@;'; put 'put ''XHUwYzFmXHUwYzRiXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyOFx1MGMzNVx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMjFcdTBjM2ZcdTBjMzhcdTBjNDZcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGMxY1x1MGMyOC5fXHUwYzJiXHUw''@;'; put 'put ''YzNmXHUwYzJjXHUwYzRkXHUwYzMwLl9cdTBjMmVcdTBjM2VcdTBjMzBcdTBjNGRcdTBjMWFcdTBjM2ZfXHUwYzBmXHUwYzJhXHUwYzRkXHUwYzMwXHUwYzNmLl9cdTBjMmVcdTBjNDdfXHUwYzFjXHUwYzQyXHUwYzI4XHUwYzRkX1x1MGMxY1x1MGM0MVx1MGMzMlx1MGM0OF9cdTBjMDZcdTBj''@;'; put 'put ''MTcuX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZC5fXHUwYzA1XHUwYzE1XHUwYzRkXHUwYzFmXHUwYzRiLl9cdTBjMjhcdTBjMzUuX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Ni4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwYzA2XHUwYzI2XHUwYzNmXHUw''@;'; put 'put ''YzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzOFx1MGM0Ylx1MGMyZVx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzJjXHUwYzQxXHUwYzI3XHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMxN1x1''@;'; put 'put ''MGM0MVx1MGMzMFx1MGM0MVx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM2XHUwYzI4XHUwYzNmXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''Ilx1MGMwNlx1MGMyNlx1MGMzZl9cdTBjMzhcdTBjNGJcdTBjMmVfXHUwYzJlXHUwYzAyXHUwYzE3XHUwYzMzX1x1MGMyY1x1MGM0MVx1MGMyN19cdTBjMTdcdTBjNDFcdTBjMzBcdTBjNDFfXHUwYzM2XHUwYzQxXHUwYzE1XHUwYzRkXHUwYzMwX1x1MGMzNlx1MGMyOFx1MGMzZiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiXHUwYzA2X1x1MGMzOFx1MGM0Yl9cdTBjMmVcdTBjMDJfXHUwYzJjXHUwYzQxX1x1MGMxN1x1MGM0MV9cdTBjMzZcdTBjNDFfXHUwYzM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZ''@;'; put 'put ''WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGMyOFx1MGM0N1x1MGMyMVx1MGM0MV0gTFQiLG5leHREYXk6IltcdTBjMzBcdTBjNDdcdTBjMmFcdTBjNDFd''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBjMjhcdTBjM2ZcdTBjMjhcdTBjNGRcdTBjMjhdIExUIixsYXN0V2VlazoiW1x1MGMxN1x1MGMyNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGMzMlx1MGM0YiIscGFzdDoi''@;'; put 'put ''JXMgXHUwYzE1XHUwYzRkXHUwYzMwXHUwYzNmXHUwYzI0XHUwYzAyIixzOiJcdTBjMTVcdTBjNGFcdTBjMjhcdTBjNGRcdTBjMjhcdTBjM2YgXHUwYzE1XHUwYzRkXHUwYzM3XHUwYzIzXHUwYzNlXHUwYzMyXHUwYzQxIixzczoiJWQgXHUwYzM4XHUwYzQ2XHUwYzE1XHUwYzI4XHUwYzRkXHUw''@;'; put 'put ''YzMyXHUwYzQxIixtOiJcdTBjMTJcdTBjMTUgXHUwYzI4XHUwYzNmXHUwYzJlXHUwYzNmXHUwYzM3XHUwYzAyIixtbToiJWQgXHUwYzI4XHUwYzNmXHUwYzJlXHUwYzNmXHUwYzM3XHUwYzNlXHUwYzMyXHUwYzQxIixoOiJcdTBjMTJcdTBjMTUgXHUwYzE3XHUwYzAyXHUwYzFmIixoaDoiJWQg''@;'; put 'put ''XHUwYzE3XHUwYzAyXHUwYzFmXHUwYzMyXHUwYzQxIixkOiJcdTBjMTJcdTBjMTUgXHUwYzMwXHUwYzRiXHUwYzFjXHUwYzQxIixkZDoiJWQgXHUwYzMwXHUwYzRiXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQxIixNOiJcdTBjMTJcdTBjMTUgXHUwYzI4XHUwYzQ2XHUwYzMyIixNTToiJWQgXHUw''@;'; put 'put ''YzI4XHUwYzQ2XHUwYzMyXHUwYzMyXHUwYzQxIix5OiJcdTBjMTJcdTBjMTUgXHUwYzM4XHUwYzAyXHUwYzM1XHUwYzI0XHUwYzRkXHUwYzM4XHUwYzMwXHUwYzAyIix5eToiJWQgXHUwYzM4XHUwYzAyXHUwYzM1XHUwYzI0XHUwYzRkXHUwYzM4XHUwYzMwXHUwYzNlXHUwYzMyXHUwYzQxIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MGMzNS8sb3JkaW5hbDoiJWRcdTBjMzUiLG1lcmlkaWVtUGFyc2U6L1x1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZnxcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDJ8XHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNl''@;'; put 'put ''XHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyfFx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI9PT1C''@;'; put 'put ''P2c8ND9nOmcrMTI6Ilx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMiI9PT1CP2c6Ilx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMiI9PT1CP2c+PTEwP2c6ZysxMjoiXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUw''@;'; put 'put ''YzAyIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzw0PyJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YiOmc8MTA/Ilx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMiI6ZzwxNz8iXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNl''@;'; put 'put ''XHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIjpnPDIwPyJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIiOiJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw5MzI5MDpmdW5j''@;'; put 'put ''dGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRldCIse21vbnRoczoiSmFuZWlydV9GZXZlcmVpcnVfTWFyc3VfQWJyaWxfTWFpdV9KdVx4ZjF1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Ii5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1NldF9PdXRfTm92X0RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''RG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb19TZWdfVGVfS3VfS2lfU2VzX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIs''@;'; put 'put ''TExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09oaW4gaWhhXSBMVCIsbmV4dERheToiW0FiYW4gaWhhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2loYV0gTFQiLGxhc3REYXk6IltIb3Jpc2VpayBpaGFdIExU''@;'; put 'put ''IixsYXN0V2VlazoiZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaWhhICVzIixwYXN0OiIlcyBsaXViYSIsczoic2VndW5kdSBiYWx1biIsc3M6InNlZ3VuZHUgJWQiLG06Im1pbnV0dSBpZGEiLG1tOiJtaW51dHUgJWQi''@;'; put 'put ''LGg6Im9yYXMgaWRhIixoaDoib3JhcyAlZCIsZDoibG9yb24gaWRhIixkZDoibG9yb24gJWQiLE06ImZ1bGFuIGlkYSIsTU06ImZ1bGFuICVkIix5OiJ0aW5hbiBpZGEiLHl5OiJ0aW5hbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4Mjk0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0M1x1MDQzYyIsMToiLVx1MDQ0M1x1MDQzYyIsMjoiLVx1MDQ0ZVx1MDQzYyIsMzoiLVx1MDQ0ZVx1MDQzYyIsNDoiLVx1MDQ0M1x1MDQzYyIsNToiLVx1MDQ0M1x1MDQzYyIsNjoiLVx1MDQ0M1x1MDQzYyIsNzoiLVx1MDQ0M1x1MDQzYyIsODoi''@;'; put 'put ''LVx1MDQ0M1x1MDQzYyIsOToiLVx1MDQ0M1x1MDQzYyIsMTA6Ii1cdTA0NDNcdTA0M2MiLDEyOiItXHUwNDQzXHUwNDNjIiwxMzoiLVx1MDQ0M1x1MDQzYyIsMjA6Ii1cdTA0NDNcdTA0M2MiLDMwOiItXHUwNDRlXHUwNDNjIiw0MDoiLVx1MDQ0M1x1MDQzYyIsNTA6Ii1cdTA0NDNcdTA0M2Mi''@;'; put 'put ''LDYwOiItXHUwNDQzXHUwNDNjIiw3MDoiLVx1MDQ0M1x1MDQzYyIsODA6Ii1cdTA0NDNcdTA0M2MiLDkwOiItXHUwNDQzXHUwNDNjIiwxMDA6Ii1cdTA0NDNcdTA0M2MifTtJLmRlZmluZUxvY2FsZSgidGciLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQw''@;'; put 'put ''XHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzhfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQzOVx1MDQzOF9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0''@;'; put 'put ''MzhfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1''@;'; put 'put ''MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1''@;'; put 'put ''MDQzYl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0''@;'; put 'put ''MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJc''@;'; put 'put ''dTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDRmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQzNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1''@;'; put 'put ''MDQzNV9cdTA0NDFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQzZlx1MDQzMFx1MDQzZFx1MDRiN1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0YjdcdTA0NDNc''@;'; put 'put ''dTA0M2NcdTA0NGFcdTA0MzBfXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQ0Zlx1MDQ0OFx1MDQzMV9cdTA0MzRcdTA0NDhcdTA0MzFfXHUwNDQxXHUwNDQ4XHUwNDMxX1x1MDQ0N1x1MDQ0OFx1MDQzMV9cdTA0M2ZcdTA0NDhc''@;'; put 'put ''dTA0MzFfXHUwNGI3XHUwNDQzXHUwNDNjX1x1MDQ0OFx1MDQzZFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDRmXHUwNDQ4X1x1MDQzNFx1MDQ0OF9cdTA0NDFcdTA0NDhfXHUwNDQ3XHUwNDQ4X1x1MDQzZlx1MDQ0OF9cdTA0YjdcdTA0M2NfXHUwNDQ4XHUwNDMxIi5zcGxp''@;'; put 'put ''dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxOFx1''@;'; put 'put ''MDQzY1x1MDQ0MFx1MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0RGF5OiJbXHUwNDI0XHUwNDMwXHUwNDQwXHUwNDM0XHUwNDNlIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLGxhc3REYXk6IltcdTA0MTRcdTA0MzhcdTA0NDBc''@;'; put 'put ''dTA0ZWZcdTA0MzcgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dFdlZWs6ImRkZGRbXHUwNDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0XHUwNDQyXHUwNDMwXHUwNDM4IFx1MDQzZVx1MDQ0Zlx1MDQzZFx1MDQzNFx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJc''@;'; put 'put ''dTA0MzhdIExUIixsYXN0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDMzXHUwNDQzXHUwNDM3XHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzMVx1MDQzMFx1MDQ0YVx1MDQzNFx1MDQzOCAlcyIscGFzdDoiJXMgXHUwNDNmXHUwNDM1XHUwNDQ4IixzOiJcdTA0NGZcdTA0M2FcdTA0NDdcdTA0MzBcdTA0M2RcdTA0MzQgXHUwNDQxXHUwNDNlXHUwNDNkXHUwNDM4XHUwNDRmIixtOiJcdTA0''@;'; put 'put ''NGZcdTA0M2EgXHUwNDM0XHUwNDMwXHUwNDliXHUwNDM4XHUwNDliXHUwNDMwIixtbToiJWQgXHUwNDM0XHUwNDMwXHUwNDliXHUwNDM4XHUwNDliXHUwNDMwIixoOiJcdTA0NGZcdTA0M2EgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQy''@;'; put 'put ''IixkOiJcdTA0NGZcdTA0M2EgXHUwNDQwXHUwNGVmXHUwNDM3IixkZDoiJWQgXHUwNDQwXHUwNGVmXHUwNDM3IixNOiJcdTA0NGZcdTA0M2EgXHUwNDNjXHUwNDNlXHUwNGIzIixNTToiJWQgXHUwNDNjXHUwNDNlXHUwNGIzIix5OiJcdTA0NGZcdTA0M2EgXHUwNDQxXHUwNDNlXHUwNDNiIix5''@;'; put 'put ''eToiJWQgXHUwNDQxXHUwNDNlXHUwNDNiIn0sbWVyaWRpZW1QYXJzZTovXHUwNDQ4XHUwNDMwXHUwNDMxfFx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiM3xcdTA0NDBcdTA0ZWZcdTA0Mzd8XHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oQix3KXty''@;'; put 'put ''ZXR1cm4gMTI9PT1CJiYoQj0wKSwiXHUwNDQ4XHUwNDMwXHUwNDMxIj09PXc/Qjw0P0I6QisxMjoiXHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzIj09PXc/QjoiXHUwNDQwXHUwNGVmXHUwNDM3Ij09PXc/Qj49MTE/QjpCKzEyOiJcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMiPT09dz9C''@;'; put 'put ''KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDQ/Ilx1MDQ0OFx1MDQzMFx1MDQzMSI6QjwxMT8iXHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzIjpCPDE2PyJcdTA0NDBcdTA0ZWZcdTA0MzciOkI8MTk/Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI6''@;'; put 'put ''Ilx1MDQ0OFx1MDQzMFx1MDQzMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0M1x1MDQzY3xcdTA0NGVcdTA0M2MpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe3JldHVybiBCKyhfW0JdfHxfW0IlMTBdfHxfW0I+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''N319KX0oeSg5NzU4NikpfSwxMjMxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGgiLHttb250aHM6Ilx1MGUyMVx1MGUwMVx1MGUyM1x1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzhcdTBlMjFcdTBlMjBcdTBlMzJcdTBl''@;'; put 'put ''MWVcdTBlMzFcdTBlMTlcdTBlMThcdTBlNGNfXHUwZTIxXHUwZTM1XHUwZTE5XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGU0MFx1MGUyMVx1MGUyOVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMWVcdTBlMjRcdTBlMjlcdTBlMjBcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTIxXHUwZTM0XHUwZTE2XHUw''@;'; put 'put ''ZTM4XHUwZTE5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUwMVx1MGUyM1x1MGUwMVx1MGUwZVx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMmFcdTBlMzRcdTBlMDdcdTBlMmJcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTAxXHUwZTMxXHUwZTE5XHUwZTIyXHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxNVx1''@;'; put 'put ''MGUzOFx1MGUyNVx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMWVcdTBlMjRcdTBlMjhcdTBlMDhcdTBlMzRcdTBlMDFcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE4XHUwZTMxXHUwZTE5XHUwZTI3XHUwZTMyXHUwZTA0XHUwZTIxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBlMjEuXHUwZTA0''@;'; put 'put ''Ll9cdTBlMDEuXHUwZTFlLl9cdTBlMjFcdTBlMzUuXHUwZTA0Ll9cdTBlNDBcdTBlMjEuXHUwZTIyLl9cdTBlMWUuXHUwZTA0Ll9cdTBlMjFcdTBlMzQuXHUwZTIyLl9cdTBlMDEuXHUwZTA0Ll9cdTBlMmEuXHUwZTA0Ll9cdTBlMDEuXHUwZTIyLl9cdTBlMTUuXHUwZTA0Ll9cdTBlMWUuXHUw''@;'; put 'put ''ZTIyLl9cdTBlMTguXHUwZTA0LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUw''@;'; put 'put ''NFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMxXHUwZTJhXHUwZTFhXHUwZTE0XHUwZTM1X1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiXHUwZTJkXHUwZTMyXHUwZTE3XHUwZTM0XHUwZTE1XHUwZTIyXHUwZTRjX1x1MGUwOFx1MGUzMVx1MGUxOVx1MGUxN1x1MGUyM1x1MGU0Y19cdTBlMmRcdTBlMzFcdTBlMDdcdTBlMDRcdTBlMzJcdTBlMjNfXHUwZTFlXHUwZTM4XHUwZTE4X1x1MGUxZVx1MGUyNFx1MGUyYlx1MGUz''@;'; put 'put ''MVx1MGUyYV9cdTBlMjhcdTBlMzhcdTBlMDFcdTBlMjNcdTBlNGNfXHUwZTQwXHUwZTJhXHUwZTMyXHUwZTIzXHUwZTRjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBlMmRcdTBlMzIuX1x1MGUwOC5fXHUwZTJkLl9cdTBlMWUuX1x1MGUxZVx1MGUyNC5fXHUwZTI4Ll9cdTBlMmEuIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMiBIOm1tIixMTExMOiJcdTBlMjdc''@;'; put 'put ''dTBlMzFcdTBlMTlkZGRkXHUwZTE3XHUwZTM1XHUwZTQ4IEQgTU1NTSBZWVlZIFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMiBIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTAxXHUwZTQ4XHUwZTJkXHUwZTE5XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3fFx1MGUyYlx1MGUy''@;'; put 'put ''NVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNy8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iXHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Ij09PWd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3''@;'; put 'put ''KXtyZXR1cm4gZzwxMj8iXHUwZTAxXHUwZTQ4XHUwZTJkXHUwZTE5XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3IjoiXHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBl''@;'; put 'put ''MjdcdTBlMzFcdTBlMTlcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbmV4dERheToiW1x1MGUxZVx1MGUyM1x1MGUzOFx1MGU0OFx1MGUwN1x1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZFtcdTBlMmJcdTBlMTlcdTBlNDlcdTBlMzIgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbGFzdERheToiW1x1MGU0MFx1MGUyMVx1MGUzN1x1MGU0OFx1MGUyZFx1MGUyN1x1MGUzMlx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixs''@;'; put 'put ''YXN0V2VlazoiW1x1MGUyN1x1MGUzMVx1MGUxOV1kZGRkW1x1MGUxN1x1MGUzNVx1MGU0OFx1MGU0MVx1MGUyNVx1MGU0OVx1MGUyNyBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTBlMmRcdTBlMzVcdTBlMDEgJXMi''@;'; put 'put ''LHBhc3Q6IiVzXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixzOiJcdTBlNDRcdTBlMjFcdTBlNDhcdTBlMDFcdTBlMzVcdTBlNDhcdTBlMjdcdTBlMzRcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLHNzOiIlZCBcdTBlMjdcdTBlMzRcdTBlMTlcdTBlMzJcdTBl''@;'; put 'put ''MTdcdTBlMzUiLG06IjEgXHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixtbToiJWQgXHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixoOiIxIFx1MGUwYVx1MGUzMVx1MGU0OFx1MGUyN1x1MGU0Mlx1MGUyMVx1MGUwNyIsaGg6IiVkIFx1MGUwYVx1MGUzMVx1MGU0OFx1MGUyN1x1MGU0Mlx1MGUy''@;'; put 'put ''MVx1MGUwNyIsZDoiMSBcdTBlMjdcdTBlMzFcdTBlMTkiLGRkOiIlZCBcdTBlMjdcdTBlMzFcdTBlMTkiLHc6IjEgXHUwZTJhXHUwZTMxXHUwZTFiXHUwZTE0XHUwZTMyXHUwZTJiXHUwZTRjIix3dzoiJWQgXHUwZTJhXHUwZTMxXHUwZTFiXHUwZTE0XHUwZTMyXHUwZTJiXHUwZTRjIixNOiIx''@;'; put 'put ''IFx1MGU0MFx1MGUxNFx1MGUzN1x1MGUyZFx1MGUxOSIsTU06IiVkIFx1MGU0MFx1MGUxNFx1MGUzN1x1MGUyZFx1MGUxOSIseToiMSBcdTBlMWJcdTBlMzUiLHl5OiIlZCBcdTBlMWJcdTBlMzUifX0pfSh5KDk3NTg2KSl9LDM3NDY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBfPXsxOiInaW5qaSIsNToiJ2luamkiLDg6IidpbmppIiw3MDoiJ2luamkiLDgwOiInaW5qaSIsMjoiJ25qaSIsNzoiJ25qaSIsMjA6IiduamkiLDUwOiInbmppIiwzOiInXHhmY25qaSIsNDoiJ1x4ZmNuamkiLDEwMDoiJ1x4ZmNuamkiLDY6IiduankiLDk6Iid1bmp5''@;'; put 'put ''IiwxMDoiJ3VuankiLDMwOiIndW5qeSIsNjA6Iid5bmp5Iiw5MDoiJ3luankifTtJLmRlZmluZUxvY2FsZSgidGsiLHttb250aHM6Ilx4ZGRhbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYVx4ZmRfSVx4ZmR1bl9JXHhmZHVsX0F3Z3VzdF9TZW50XHhmZGFicl9Pa3RceGZkYWJyX05vXHhmZGFi''@;'; put 'put ''cl9EZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx4ZGRhbl9GZXdfTWFyX0Fwcl9NYVx4ZmRfSVx4ZmRuX0lceGZkbF9Bd2dfU2VuX09rdF9Ob1x4ZmRfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJceGRkZWtcdTAxNWZlbmJlX0R1XHUwMTVmZW5iZV9TaVx1MDE1ZmVuYmVfXHhj''@;'; put 'put ''N2FyXHUwMTVmZW5iZV9QZW5cdTAxNWZlbmJlX0FubmFfXHUwMTVlZW5iZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJceGRkZWtfRHVcdTAxNWZfU2lcdTAxNWZfXHhjN2FyX1Blbl9Bbm5fXHUwMTVlZW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx4ZGRrX0RcdTAxNWZfU1x1MDE1''@;'; put 'put ''Zl9ceGM3cl9Qbl9Bbl9cdTAxNWVuIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhZ2F0XSBMVCIsbmV4dERheToiW2VydGlyIHNhZ2F0XSBMVCIsbmV4dFdlZWs6IltpbmRpa2ldIGRkZGQgW3NhZ2F0XSBMVCIsbGFzdERheToiW2RceGZjXHhmZG5dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWdhdF0gTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvXHUwMTQ4IixwYXN0OiIlcyBceGY2XHUwMTQ4IixzOiJiaXJuXHhlNFx4ZTdlIHNla3VudCIsbToiYmlyIG1pbnV0IixtbToiJWQgbWludXQiLGg6ImJpciBzYWdhdCIsaGg6IiVkIHNhZ2F0IixkOiJiaXIgZ1x4ZmNu''@;'; put 'put ''IixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYVx4ZmQiLE1NOiIlZCBhXHhmZCIseToiYmlyIFx4ZmR5bCIseXk6IiVkIFx4ZmR5bCJ9LG9yZGluYWw6ZnVuY3Rpb24oQix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBCO2RlZmF1bHQ6aWYoMD09''@;'; put 'put ''PUIpcmV0dXJuIEIrIid1bmp5Ijt2YXIgUD1CJTEwO3JldHVybiBCKyhfW1BdfHxfW0IlMTAwLVBdfHxfW0I+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNDkwNDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0ku''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJ0bC1waCIse21vbnRoczoiRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1''@;'; put 'put ''bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1N''@;'; put 'put ''TU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25nYXlvbmcgYXJhd10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2Fy''@;'; put 'put ''YWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToic2EgbG9vYiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3Jh''@;'; put 'put ''cyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixNOiJpc2FuZyBidXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGd9''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDE3MTg3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0icGFnaF93YVx1MjAxOV9jaGFcdTIwMTlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3JnaF9IdXQiLnNwbGl0KCJfIik7ZnVuY3Rp''@;'; put 'put ''b24gdyhPLHosTixMKXt2YXIgSz1mdW5jdGlvbiBQKE8pe3ZhciB6PU1hdGguZmxvb3IoTyUxZTMvMTAwKSxOPU1hdGguZmxvb3IoTyUxMDAvMTApLEw9TyUxMCxLPSIiO3JldHVybiB6PjAmJihLKz1fW3pdKyJ2YXRsaCIpLE4+MCYmKEsrPSgiIiE9PUs/IiAiOiIiKStfW05dKyJtYUgiKSxM''@;'; put 'put ''PjAmJihLKz0oIiIhPT1LPyIgIjoiIikrX1tMXSksIiI9PT1LPyJwYWdoIjpLfShPKTtzd2l0Y2goTil7Y2FzZSJzcyI6cmV0dXJuIEsrIiBsdXAiO2Nhc2UibW0iOnJldHVybiBLKyIgdHVwIjtjYXNlImhoIjpyZXR1cm4gSysiIHJlcCI7Y2FzZSJkZCI6cmV0dXJuIEsrIiBqYWoiO2Nhc2Ui''@;'; put 'put ''TU0iOnJldHVybiBLKyIgamFyIjtjYXNlInl5IjpyZXR1cm4gSysiIERJUyJ9fUkuZGVmaW5lTG9jYWxlKCJ0bGgiLHttb250aHM6InRlcmFcdTIwMTkgamFyIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIGNoYVx1MjAxOV90ZXJhXHUyMDE5IGphciB3ZWpfdGVyYVx1MjAxOSBqYXIgbG9TX3Rl''@;'; put 'put ''cmFcdTIwMTkgamFyIHZhZ2hfdGVyYVx1MjAxOSBqYXIgamF2X3RlcmFcdTIwMTkgamFyIFNvY2hfdGVyYVx1MjAxOSBqYXIgY2hvcmdoX3RlcmFcdTIwMTkgamFyIEh1dF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCB3YVx1MjAxOV90ZXJh''@;'; put 'put ''XHUyMDE5IGphciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphciB3YVx1MjAxOV9qYXIgY2hhXHUyMDE5X2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFyIEh1dF9qYXIgd2FcdTIwMTltYUhfamFy''@;'; put 'put ''IHdhXHUyMDE5bWFIIHdhXHUyMDE5X2phciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0RhSGphal0gTFQiLG5leHREYXk6''@;'; put 'put ''Ilt3YVx1MjAxOWxlU10gTFQiLG5leHRXZWVrOiJMTEwiLGxhc3REYXk6Ilt3YVx1MjAxOUh1XHUyMDE5XSBMVCIsbGFzdFdlZWs6IkxMTCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBnKE8pe3ZhciB6PU87cmV0dXJuLTEhPT1PLmluZGV4T2YoImphaiIp''@;'; put 'put ''P3ouc2xpY2UoMCwtMykrImxlUyI6LTEhPT1PLmluZGV4T2YoImphciIpP3ouc2xpY2UoMCwtMykrIndhUSI6LTEhPT1PLmluZGV4T2YoIkRJUyIpP3ouc2xpY2UoMCwtMykrIm5lbSI6eisiIHBJcSJ9LHBhc3Q6ZnVuY3Rpb24gQihPKXt2YXIgej1PO3JldHVybi0xIT09Ty5pbmRleE9mKCJq''@;'; put 'put ''YWoiKT96LnNsaWNlKDAsLTMpKyJIdVx1MjAxOSI6LTEhPT1PLmluZGV4T2YoImphciIpP3ouc2xpY2UoMCwtMykrIndlbiI6LTEhPT1PLmluZGV4T2YoIkRJUyIpP3ouc2xpY2UoMCwtMykrImJlbiI6eisiIHJldCJ9LHM6InB1UyBsdXAiLHNzOncsbToid2FcdTIwMTkgdHVwIixtbTp3LGg6''@;'; put 'put ''IndhXHUyMDE5IHJlcCIsaGg6dyxkOiJ3YVx1MjAxOSBqYWoiLGRkOncsTToid2FcdTIwMTkgamFyIixNTTp3LHk6IndhXHUyMDE5IERJUyIseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2''@;'; put 'put ''KSl9LDYwMTUzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMi''@;'; put 'put ''LDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNceGZjIiw2OiInbmNcdTAxMzEiLDk6Iid1bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O0kuZGVmaW5lTG9jYWxlKCJ0ciIse21vbnRoczoiT2Nha19cdTAxNWV1''@;'; put 'put ''YmF0X01hcnRfTmlzYW5fTWF5XHUwMTMxc19IYXppcmFuX1RlbW11el9BXHUwMTFmdXN0b3NfRXlsXHhmY2xfRWtpbV9LYXNcdTAxMzFtX0FyYWxcdTAxMzFrIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJPY2FfXHUwMTVldWJfTWFyX05pc19NYXlfSGF6X1RlbV9BXHUwMTFmdV9FeWxfRWtp''@;'; put 'put ''X0thc19BcmEiLnNwbGl0KCJfIiksd2Vla2RheXM6IlBhemFyX1BhemFydGVzaV9TYWxcdTAxMzFfXHhjN2FyXHUwMTVmYW1iYV9QZXJcdTAxNWZlbWJlX0N1bWFfQ3VtYXJ0ZXNpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBhel9QenRfU2FsX1x4Yzdhcl9QZXJfQ3VtX0NtdCIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiUHpfUHRfU2FfXHhjN2FfUGVfQ3VfQ3QiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDEyP1A/Ilx4ZjZceGY2IjoiXHhkNlx4ZDYiOlA/Ilx4ZjZzIjoiXHhkNlMifSxtZXJpZGllbVBhcnNlOi9ceGY2XHhmNnxceGQ2''@;'; put 'put ''XHhkNnxceGY2c3xceGQ2Uy8saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iXHhmNnMiPT09Qnx8Ilx4ZDZTIj09PUJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIs''@;'; put 'put ''TExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJbeWFyXHUwMTMxbiBzYWF0XSBMVCIsbmV4dFdlZWs6IltnZWxlY2VrXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjbl0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHhmNm5jZSIsczoiYmlya2FceGU3IHNhbml5ZSIsc3M6IiVkIHNhbml5ZSIsbToiYmlyIGRha2lrYSIsbW06IiVkIGRha2lrYSIsaDoi''@;'; put 'put ''YmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIix3OiJiaXIgaGFmdGEiLHd3OiIlZCBoYWZ0YSIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciB5XHUwMTMxbCIseXk6IiVkIHlcdTAxMzFsIn0sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3N3aXRj''@;'; put 'put ''aCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIEI7ZGVmYXVsdDppZigwPT09QilyZXR1cm4gQisiJ1x1MDEzMW5jXHUwMTMxIjt2YXIgUD1CJTEwO3JldHVybiBCKyhfW1BdfHxfW0IlMTAwLVBdfHxfW0I+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95Ojd9fSl9KHkoOTc1ODYpKX0sODg1MjE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoQix3LFAsRil7dmFyIE89e3M6WyJ2aWVuc2FzIHNlY3VuZHMiLCInaWVuc2FzIHNlY3VuZHMiXSxzczpbQisiIHNlY3VuZHMiLEIrIiBzZWN1bmRz''@;'; put 'put ''Il0sbTpbIiduIG1ceGVkdXQiLCInaWVucyBtXHhlZHV0Il0sbW06W0IrIiBtXHhlZHV0cyIsQisiIG1ceGVkdXRzIl0saDpbIiduIFx4ZmVvcmEiLCInaWVuc2EgXHhmZW9yYSJdLGhoOltCKyIgXHhmZW9yYXMiLEIrIiBceGZlb3JhcyJdLGQ6WyInbiB6aXVhIiwiJ2llbnNhIHppdWEiXSxk''@;'; put 'put ''ZDpbQisiIHppdWFzIixCKyIgeml1YXMiXSxNOlsiJ24gbWVzIiwiJ2llbnMgbWVzIl0sTU06W0IrIiBtZXNlbiIsQisiIG1lc2VuIl0seTpbIiduIGFyIiwiJ2llbnMgYXIiXSx5eTpbQisiIGFycyIsQisiIGFycyJdfTtyZXR1cm4gRnx8dz9PW1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoInR6bCIse21vbnRoczoiSmFudWFyX0ZldnJhZ2xoX01hclx4ZTdfQXZyXHhlZnVfTWFpX0dceGZjbl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9wXHhlNHRzX05vZW12YXJfWmVjZW12YXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0F2cl9NYWlfR1x4ZmNu''@;'; put 'put ''X0p1bF9HdXNfU2V0X0xpc19Ob2VfWmVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTXHhmYWxhZGlfTFx4ZmFuZVx4ZTdpX01haXR6aV9NXHhlMXJjdXJpX1hoXHhmYWFkaV9WaVx4ZTluZXJceGU3aV9TXHhlMXR1cmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU1x4ZmFsX0xceGZhbl9N''@;'; put 'put ''YWlfTVx4ZTFyX1hoXHhmYV9WaVx4ZTlfU1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTXHhmYV9MXHhmYV9NYV9NXHhlMV9YaF9WaV9TXHhlMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4g''@;'; put 'put ''TU1NTSBbZGFsbGFzXSBZWVlZIixMTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSIsTExMTDoiZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0ifSxtZXJpZGllbVBhcnNlOi9kXCdvfGRcJ2EvaSxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJkJ28iPT09Qi50b0xv''@;'; put 'put ''d2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI+MTE/UD8iZCdvIjoiRCdPIjpQPyJkJ2EiOiJEJ0EifSxjYWxlbmRhcjp7c2FtZURheToiW294aGkgXHhlMF0gTFQiLG5leHREYXk6IltkZW1ceGUwIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQi''@;'; put 'put ''LGxhc3REYXk6IltpZWlyaSBceGUwXSBMVCIsbGFzdFdlZWs6IltzXHhmY3IgZWxdIGRkZGQgW2xhc3RldSBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3NwcmVpICVzIixwYXN0OiJqYSVzIixzOmcsc3M6ZyxtOmcsbW06ZyxoOmcsaGg6ZyxkOmcsZGQ6''@;'; put 'put ''ZyxNOmcsTU06Zyx5OmcseXk6Z30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDIyMjM0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgidHptLWxhdG4iLHttb250aHM6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzU2hvcnQ6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiYXNhbWFz''@;'; put 'put ''X2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2FzZGtoIGddIExUIixuZXh0RGF5OiJbYXNrYSBnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ddIExUIixsYXN0RGF5OiJbYXNzYW50IGddIExUIixsYXN0V2VlazoiZGRkZCBbZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6ImRhZGtoIHMgeWFuICVzIixwYXN0OiJ5YW4gJXMiLHM6ImltaWsiLHNzOiIlZCBpbWlrIixtOiJtaW51XHUxZTBkIixtbToiJWQgbWludVx1MWUwZCIsaDoic2FcdTAyNWJhIixoaDoiJWQgdGFzc2FcdTAyNWJpbiIsZDoiYXNzIixkZDoiJWQgb3NzYW4iLE06''@;'; put 'put ''ImF5b3dyIixNTToiJWQgaXl5aXJuIix5OiJhc2dhcyIseXk6IiVkIGlzZ2FzbiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSwxODAxMDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInR6bSIse21vbnRoczoiXHUy''@;'; put 'put ''ZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQzMFx1MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNc''@;'; put 'put ''dTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUyZDYzX1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0''@;'; put 'put ''Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdcdTJkNTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MmQ0OVx1MmQ0Zlx1MmQ0Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJk''@;'; put 'put ''MzBcdTJkNjJcdTJkNTVfXHUyZDRlXHUyZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1''@;'; put 'put ''MmQ2M19cdTJkNTZcdTJkNTNcdTJkNWJcdTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJkNjFcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3''@;'; put 'put ''XHUyZDUzXHUyZDRhXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9c''@;'; put 'put ''dTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1''@;'; put 'put ''MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMw''@;'; put 'put ''XHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1''@;'; put 'put ''OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRk''@;'; put 'put ''IEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTJkMzBcdTJkNTlcdTJkMzdcdTJkNDUgXHUyZDM0XSBMVCIsbmV4dERheToiW1x1MmQzMFx1MmQ1OVx1MmQzZFx1MmQzMCBcdTJkMzRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUyZDM0XSBMVCIsbGFzdERheToiW1x1''@;'; put 'put ''MmQzMFx1MmQ1YVx1MmQzMFx1MmQ0Zlx1MmQ1YyBcdTJkMzRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUyZDM0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUyZDM3XHUyZDMwXHUyZDM3XHUyZDQ1IFx1MmQ1OSBcdTJkNjJcdTJkMzBcdTJkNGYgJXMiLHBhc3Q6''@;'; put 'put ''Ilx1MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIsczoiXHUyZDQ5XHUyZDRlXHUyZDQ5XHUyZDNkIixzczoiJWQgXHUyZDQ5XHUyZDRlXHUyZDQ5XHUyZDNkIixtOiJcdTJkNGVcdTJkNDlcdTJkNGZcdTJkNTNcdTJkM2EiLG1tOiIlZCBcdTJkNGVcdTJkNDlcdTJkNGZcdTJkNTNcdTJkM2EiLGg6Ilx1''@;'; put 'put ''MmQ1OVx1MmQzMFx1MmQ0NFx1MmQzMCIsaGg6IiVkIFx1MmQ1Y1x1MmQzMFx1MmQ1OVx1MmQ1OVx1MmQzMFx1MmQ0NFx1MmQ0OVx1MmQ0ZiIsZDoiXHUyZDMwXHUyZDU5XHUyZDU5IixkZDoiJWQgb1x1MmQ1OVx1MmQ1OVx1MmQzMFx1MmQ0ZiIsTToiXHUyZDMwXHUyZDYyb1x1MmQ1M1x1MmQ1''@;'; put 'put ''NCIsTU06IiVkIFx1MmQ0OVx1MmQ2Mlx1MmQ2Mlx1MmQ0OVx1MmQ1NFx1MmQ0ZiIseToiXHUyZDMwXHUyZDU5XHUyZDMzXHUyZDMwXHUyZDU5Iix5eToiJWQgXHUyZDQ5XHUyZDU5XHUyZDMzXHUyZDMwXHUyZDU5XHUyZDRmIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDYz''@;'; put 'put ''MzQ5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidWctY24iLHttb250aHM6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2''@;'; put 'put ''MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUw''@;'; put 'put ''NjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2MjdcdTA2NDZcdTA2Y2JcdTA2MjdcdTA2MzFfXHUwNjQxXHUwNmQwXHUwNmNiXHUwNjMxXHUwNjI3XHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyYV9cdTA2MjZcdTA2Mjdc''@;'; put 'put ''dTA2N2VcdTA2MzFcdTA2ZDBcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0Nl9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDRfXHUwNjI2XHUwNjI3XHUwNmNiXHUwNjNhXHUwNmM3XHUwNjMzXHUwNjJhX1x1MDYzM1x1MDZkMFx1MDY0''@;'; put 'put ''Nlx1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MjZcdTA2YzZcdTA2NDNcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjRhXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyZlx1MDZkMFx1MDY0M1x1MDYyN1x1MDYyOFx1MDY0OVx1MDYz''@;'; put 'put ''MSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjRhXHUwNmQ1XHUwNjQzXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyZlx1MDZjOFx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MzNcdTA2ZDVcdTA2NGFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVf''@;'; put 'put ''XHUwNjg2XHUwNjI3XHUwNjMxXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDY3ZVx1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MmNcdTA2YzhcdTA2NDVcdTA2ZDVfXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6Ilx1MDY0YVx1MDZkNV9cdTA2MmZcdTA2YzhfXHUwNjMzXHUwNmQ1X1x1MDY4Nlx1MDYyN19cdTA2N2VcdTA2ZDVfXHUwNjJjXHUwNmM4X1x1MDYzNFx1MDZkNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNc''@;'; put 'put ''dTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUw''@;'; put 'put ''NjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDkiLExMTDoiWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBj''@;'; put 'put ''IEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIFlZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OVx1MDYwYyBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDY0YVx1MDZkMFx1MDYz''@;'; put 'put ''MVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDV8XHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxfFx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDZ8XHUwNjg2XHUwNmM4XHUwNjM0fFx1MDY4Nlx1''@;'; put 'put ''MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDZ8XHUwNjQzXHUwNmQ1XHUwNjg2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHUwNjRhXHUwNmQwXHUwNjMxXHUwNjQ5XHUwNjQ1IFx1MDY0''@;'; put 'put ''M1x1MDZkMFx1MDY4Nlx1MDZkNSI9PT1CfHwiXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIj09PUJ8fCJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2Ij09PUI/ZzoiXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJh''@;'; put 'put ''XHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiI9PT1CfHwiXHUwNjQzXHUwNmQ1XHUwNjg2Ij09PUI/ZysxMjpnPj0xMT9nOmcrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHUwNjRhXHUwNmQwXHUwNjMx''@;'; put 'put ''XHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNSI6UDw5MDA/Ilx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMSI6UDwxMTMwPyJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IjpQPDEyMzA/Ilx1''@;'; put 'put ''MDY4Nlx1MDZjOFx1MDYzNCI6UDwxODAwPyJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2IjoiXHUwNjQzXHUwNmQ1XHUwNjg2In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjhcdTA2YzhcdTA2YWZcdTA2YzhcdTA2''@;'; put 'put ''NDYgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDYyNlx1MDZkNVx1MDYyYVx1MDZkNSBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0V2VlazoiW1x1MDY0M1x1MDZkMFx1MDY0NFx1MDZkNVx1MDYzMVx1MDY0M1x1MDY0OV0g''@;'; put 'put ''ZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDYyYVx1MDZjNlx1MDY0Nlx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0Nl0gTFQiLGxhc3RXZWVrOiJbXHUwNjI2XHUwNjI3XHUwNjQ0XHUwNjJmXHUwNjQ5XHUwNjQ2XHUwNjQyXHUwNjQ5XSBkZGRk''@;'; put 'put ''IFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiLHBhc3Q6IiVzIFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiIsczoiXHUwNjQ2XHUwNmQ1''@;'; put 'put ''XHUwNjg2XHUwNjg2XHUwNmQ1IFx1MDYzM1x1MDZkMFx1MDY0M1x1MDY0OFx1MDY0Nlx1MDYyYSIsc3M6IiVkIFx1MDYzM1x1MDZkMFx1MDY0M1x1MDY0OFx1MDY0Nlx1MDYyYSIsbToiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDY0NVx1MDY0OVx1MDY0Nlx1MDZjN1x1MDYyYSIsbW06IiVkIFx1''@;'; put 'put ''MDY0NVx1MDY0OVx1MDY0Nlx1MDZjN1x1MDYyYSIsaDoiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYSIsZDoiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDY0M1x1MDZjOFx1MDY0NiIs''@;'; put 'put ''ZGQ6IiVkIFx1MDY0M1x1MDZjOFx1MDY0NiIsTToiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDYyNlx1MDYyN1x1MDY0YSIsTU06IiVkIFx1MDYyNlx1MDYyN1x1MDY0YSIseToiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDY0YVx1MDY0OVx1MDY0NCIseXk6IiVkIFx1MDY0YVx1MDY0OVx1MDY0NCJ9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oLVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OXwtXHUwNjI2XHUwNjI3XHUwNjRhfC1cdTA2YmVcdTA2ZDVcdTA2N2VcdTA2MmFcdTA2ZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNl''@;'; put 'put ''IkRERCI6cmV0dXJuIGcrIi1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDkiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiLVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSI7ZGVmYXVsdDpyZXR1cm4gZ319LHByZXBhcnNlOmZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UoL1x1MDYw''@;'; put 'put ''Yy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNjg0Nzk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoRixPLHop''@;'; put 'put ''e3JldHVybiJtIj09PXo/Tz8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDQzIjoiaCI9PT16P08/Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1''@;'; put 'put ''MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI6RisiICIrZnVuY3Rpb24gXyhGLE8pe3ZhciB6PUYuc3BsaXQoIl8iKTtyZXR1cm4gTyUxMD09MSYmTyUxMDAhPTExP3pbMF06TyUxMD49MiYmTyUxMDw9NCYmKE8lMTAwPDEwfHxPJTEwMD49MjApP3pbMV06elsyXX0oe3NzOk8/Ilx1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1''@;'; put 'put ''MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOk8/Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2Rc''@;'; put 'put ''dTA0MzhfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0''@;'; put 'put ''M2QiLGhoOk8/Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkIjoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQz''@;'; put 'put ''ZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiLGRkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzZFx1MDQ1Nlx1MDQzMiIsTU06Ilx1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0''@;'; put 'put ''Nlx1MDQ0Y19cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZfXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDU2XHUwNDMyIix5eToiXHUwNDQwXHUwNDU2XHUwNDNhX1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzOF9cdTA0NDBcdTA0M2VcdTA0M2FcdTA0NTZcdTA0''@;'; put 'put ''MzIifVt6XSwrRil9ZnVuY3Rpb24gdyhGKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRisiXHUwNDNlIisoMTE9PT10aGlzLmhvdXJzKCk/Ilx1MDQzMSI6IiIpKyJdIExUIn19SS5kZWZpbmVMb2NhbGUoInVrIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N1x1MDQzZFx1''@;'; put 'put ''MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0M2VcdTA0MzNcdTA0M2VfXHUwNDMxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3XHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Mlx1MDQzZFx1MDQ0Zl9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDQ3''@;'; put 'put ''XHUwNDM1XHUwNDQwXHUwNDMyXHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0''@;'; put 'put ''Mlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N1x1MDQzNVx1MDQzZFx1MDQ0''@;'; put 'put ''Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzhcdTA0MzlfXHUwNDMxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Mlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0''@;'; put 'put ''NGNfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNkXHUwNDRjX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Mlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNT''@;'; put 'put ''aG9ydDoiXHUwNDQxXHUwNDU2XHUwNDQ3X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0MzFcdTA0MzVcdTA0NDBfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDM4XHUwNDNmX1x1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQ0MFx1MDQzZl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Ml9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzQiLnNwbGl0KCJfIiksd2Vla2RheXM6ZnVuY3Rpb24gQihGLE8pe3ZhciB6PXtub21pbmF0aXZl''@;'; put 'put ''OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0''@;'; put 'put ''MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0Zl9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksYWNjdXNhdGl2ZToiXHUw''@;'; put 'put ''NDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzZVx1MDQzYV9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUw''@;'; put 'put ''NDM0XHUwNDQzX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGVfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLGdlbml0aXZlOiJcdTA0M2RcdTA0''@;'; put 'put ''MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NTZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNhXHUwNDMwX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzYVx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0''@;'; put 'put ''MzhfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzXHUwNDMwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ1Nl9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzgiLnNwbGl0KCJfIil9O3JldHVybiEwPT09Rj96''@;'; put 'put ''Lm5vbWluYXRpdmUuc2xpY2UoMSw3KS5jb25jYXQoei5ub21pbmF0aXZlLnNsaWNlKDAsMSkpOkY/elsvKFxbW1x1MDQxMlx1MDQzMlx1MDQyM1x1MDQ0M11cXSkgP2RkZGQvLnRlc3QoTyk/ImFjY3VzYXRpdmUiOi9cWz8oPzpcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0M2JcdTA0M2Vc''@;'; put 'put ''dTA0NTd8XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDNlXHUwNDU3KT8gP1xdID9kZGRkLy50ZXN0KE8pPyJnZW5pdGl2ZSI6Im5vbWluYXRpdmUiXVtGLmRheSgpXTp6Lm5vbWluYXRpdmV9LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2Zc''@;'; put 'put ''dTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0''@;'; put 'put ''M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0NDAuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1N''@;'; put 'put ''TU0gWVlZWSBcdTA0NDAuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OncoIltcdTA0MjFcdTA0NGNcdTA0M2VcdTA0MzNcdTA0M2VcdTA0MzRcdTA0M2RcdTA0NTYgIiksbmV4dERheTp3KCJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwICIpLGxhc3REYXk6dygiW1x1''@;'; put 'put ''MDQxMlx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCAiKSxuZXh0V2Vlazp3KCJbXHUwNDIzXSBkZGRkIFsiKSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIHcoIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0NDNc''@;'; put 'put ''dTA0M2JcdTA0M2VcdTA0NTddIGRkZGQgWyIpLmNhbGwodGhpcyk7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIHcoIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0NDNcdTA0M2JcdTA0M2VcdTA0MzNcdTA0M2VdIGRkZGQgWyIpLmNhbGwodGhpcyl9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQ0MyIsczoiXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDU2XHUwNDNiXHUwNDRjXHUwNDNhXHUwNDMwIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6ZyxtOmcs''@;'; put 'put ''bW06ZyxoOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLGhoOmcsZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIixkZDpnLE06Ilx1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ0YyIsTU06Zyx5OiJcdTA0NDBcdTA0NTZcdTA0M2EiLHl5Omd9LG1lcmlk''@;'; put 'put ''aWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NnxcdTA0NDBcdTA0MzBcdTA0M2RcdTA0M2FcdTA0NDN8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMC8saXNQTTpmdW5jdGlvbihGKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0''@;'; put 'put ''NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwKSQvLnRlc3QoRil9LG1lcmlkaWVtOmZ1bmN0aW9uKEYsTyx6KXtyZXR1cm4gRjw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NTYiOkY8MTI/Ilx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0MyI6RjwxNz8iXHUwNDM0''@;'; put 'put ''XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZSkvLG9yZGluYWw6ZnVuY3Rpb24oRixPKXtzd2l0Y2goTyl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiRERE''@;'; put 'put ''IjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIEYrIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIEYrIi1cdTA0MzNcdTA0M2UiO2RlZmF1bHQ6cmV0dXJuIEZ9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw0MzAyNDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIF89WyJcdTA2MmNcdTA2NDZcdTA2NDhcdTA2MzFcdTA2Y2MiLCJcdTA2NDFcdTA2MzFcdTA2NDhcdTA2MzFcdTA2Y2MiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2ODYiLCJcdTA2MjdcdTA2N2VcdTA2MzFcdTA2Y2NcdTA2NDQiLCJcdTA2NDVcdTA2MjZcdTA2Y2MiLCJcdTA2''@;'; put 'put ''MmNcdTA2NDhcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NDRcdTA2MjdcdTA2MjZcdTA2Y2MiLCJcdTA2MjdcdTA2YWZcdTA2MzNcdTA2MmEiLCJcdTA2MzNcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjdcdTA2YTlcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2''@;'; put 'put ''NDhcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXSxnPVsiXHUwNjI3XHUwNjJhXHUwNjQ4XHUwNjI3XHUwNjMxIiwiXHUwNjdlXHUwNmNjXHUwNjMxIiwiXHUwNjQ1XHUwNjQ2XHUwNmFmXHUwNjQ0IiwiXHUwNjI4XHUwNjJmXHUwNmJlIiwiXHUw''@;'; put 'put ''NjJjXHUwNjQ1XHUwNjM5XHUwNjMxXHUwNjI3XHUwNjJhIiwiXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNmMxIiwiXHUwNmMxXHUwNjQxXHUwNjJhXHUwNmMxIl07SS5kZWZpbmVMb2NhbGUoInVyIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Xyx3ZWVrZGF5czpnLHdlZWtkYXlzU2hvcnQ6Zyx3ZWVr''@;'; put 'put ''ZGF5c01pbjpnLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYz''@;'; put 'put ''NVx1MDYyOFx1MDYyZHxcdTA2MzRcdTA2MjdcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDYzNFx1MDYyN1x1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDYzNVx1MDYyOFx1MDYyZCI6Ilx1MDYzNFx1MDYyN1x1MDY0NSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbXHUwNjIyXHUwNjJjIFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2YTlcdTA2NDQgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLGxhc3RE''@;'; put 'put ''YXk6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzEgXHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxXSBkZGRkIFtcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2MjhcdTA2MzlcdTA2MmYiLHBhc3Q6IiVzIFx1MDY0Mlx1MDYyOFx1MDY0NCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDZjY1x1MDZhOVx1MDY0Nlx1MDY4OCIsc3M6IiVkIFx1MDYzM1x1MDZjY1x1MDZh''@;'; put 'put ''OVx1MDY0Nlx1MDY4OCIsbToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDY0NVx1MDY0Nlx1MDY3OSIsbW06IiVkIFx1MDY0NVx1MDY0Nlx1MDY3OSIsaDoiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDZhZlx1MDZiZVx1MDY0Nlx1MDY3OVx1MDZjMSIsaGg6IiVkIFx1MDZhZlx1MDZiZVx1MDY0Nlx1''@;'; put 'put ''MDY3OVx1MDZkMiIsZDoiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0NiIsZGQ6IiVkIFx1MDYyZlx1MDY0NiIsTToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDZjMSIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDZjMSIseToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDYz''@;'; put 'put ''M1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95OjR9fSl9KHkoOTc1ODYpKX0sNzIzNzY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ1ei1sYXRuIix7bW9udGhzOiJZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJf''@;'; put 'put ''Tm95YWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFf''@;'; put 'put ''U2hhbmJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IllhX0R1X1NlX0Nob19QYV9KdV9TaGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpz''@;'; put 'put ''cyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQnVndW4gc29hdF0gTFQgW2RhXSIsbmV4dERheToiW0VydGFnYV0gTFQgW2RhXSIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsbGFzdERheToiW0tlY2hhIHNvYXRdIExUIFtkYV0iLGxhc3RXZWVrOiJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IllhcWluICVzIGljaGlkYSIscGFzdDoi''@;'; put 'put ''QmlyIG5lY2hhICVzIG9sZGluIixzOiJzb25peWEiLHNzOiIlZCBzb25peWEiLG06ImJpciBkYXFpcWEiLG1tOiIlZCBkYXFpcWEiLGg6ImJpciBzb2F0IixoaDoiJWQgc29hdCIsZDoiYmlyIGt1biIsZGQ6IiVkIGt1biIsTToiYmlyIG95IixNTToiJWQgb3kiLHk6ImJpciB5aWwiLHl5OiIl''@;'; put 'put ''ZCB5aWwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwxOTgwMDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInV6Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUw''@;'; put 'put ''NDMyXHUwNDQwXHUwNDMwXHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQx''@;'; put 'put ''XHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MCIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQz''@;'; put 'put ''M19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQyZlx1MDQzYVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MTRcdTA0NDNcdTA0NDhcdTA0''@;'; put 'put ''MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDIxXHUwNDM1XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQyN1x1MDQzZVx1MDQ0MFx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MWZcdTA0MzBcdTA0MzlcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUw''@;'; put 'put ''NDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQyOFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MmZcdTA0M2FcdTA0NDhfXHUwNDE0XHUwNDQzXHUwNDQ4X1x1MDQyMVx1MDQzNVx1MDQ0OF9cdTA0MjdcdTA0M2VcdTA0NDBfXHUwNDFmXHUw''@;'; put 'put ''NDMwXHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MjhcdTA0MzBcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQyZlx1MDQzYV9cdTA0MTRcdTA0NDNfXHUwNDIxXHUwNDM1X1x1MDQyN1x1MDQzZV9cdTA0MWZcdTA0MzBfXHUwNDE2XHUwNDQzX1x1MDQyOFx1MDQzMCIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0''@;'; put 'put ''MTFcdTA0NDNcdTA0MzNcdTA0NDNcdTA0M2QgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF0gTFQgW1x1MDQzNFx1MDQzMF0iLG5leHRXZWVrOiJkZGRkIFtcdTA0M2FcdTA0''@;'; put 'put ''NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0V2VlazoiW1x1MDQyM1x1MDQ0Mlx1''@;'; put 'put ''MDQzM1x1MDQzMFx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM4IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQyZlx1MDQzYVx1MDQzOFx1MDQzZCAlcyBcdTA0Mzhc''@;'; put 'put ''dTA0NDdcdTA0MzhcdTA0MzRcdTA0MzAiLHBhc3Q6Ilx1MDQxMVx1MDQzOFx1MDQ0MCBcdTA0M2RcdTA0MzVcdTA0NDdcdTA0MzAgJXMgXHUwNDNlXHUwNDNiXHUwNDM0XHUwNDM4XHUwNDNkIixzOiJcdTA0NDRcdTA0NDNcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDIiLHNzOiIlZCBcdTA0NDRc''@;'; put 'put ''dTA0NDNcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDIiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzRcdTA0MzBcdTA0M2FcdTA0MzhcdTA0M2FcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0M2FcdTA0MzhcdTA0M2FcdTA0MzAiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFc''@;'; put 'put ''dTA0M2VcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0NDNcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2VcdTA0MzkiLE1NOiIlZCBc''@;'; put 'put ''dTA0M2VcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzlcdTA0MzhcdTA0M2IiLHl5OiIlZCBcdTA0MzlcdTA0MzhcdTA0M2IifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw4OTM2NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''SS5kZWZpbmVMb2NhbGUoInZpIix7bW9udGhzOiJ0aFx4ZTFuZyAxX3RoXHhlMW5nIDJfdGhceGUxbmcgM190aFx4ZTFuZyA0X3RoXHhlMW5nIDVfdGhceGUxbmcgNl90aFx4ZTFuZyA3X3RoXHhlMW5nIDhfdGhceGUxbmcgOV90aFx4ZTFuZyAxMF90aFx4ZTFuZyAxMV90aFx4ZTFuZyAxMiIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiY2hcdTFlZTcgbmhcdTFl''@;'; put 'put ''YWR0X3RoXHUxZWU5IGhhaV90aFx1MWVlOSBiYV90aFx1MWVlOSB0XHUwMWIwX3RoXHUxZWU5IG5cdTAxMDNtX3RoXHUxZWU5IHNceGUxdV90aFx1MWVlOSBiXHUxZWEzeSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlkaWVtUGFyc2U6L3NhfGNoL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXmNoJC9pLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj93PyJz''@;'; put 'put ''YSI6IlNBIjp3PyJjaCI6IkNIIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkiLExMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFtuXHUw''@;'; put 'put ''MTAzbV0gWVlZWSBISDptbSIsbDoiREQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hceGY0bSBuYXkgbFx4ZmFjXSBMVCIsbmV4dERheToiW05nXHhlMHkgbWFp''@;'; put 'put ''IGxceGZhY10gTFQiLG5leHRXZWVrOiJkZGRkIFt0dVx1MWVhN24gdFx1MWVkYmkgbFx4ZmFjXSBMVCIsbGFzdERheToiW0hceGY0bSBxdWEgbFx4ZmFjXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0clx1MDFiMFx1MWVkYmMgbFx4ZmFjXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiJXMgdFx1MWVkYmkiLHBhc3Q6IiVzIHRyXHUwMWIwXHUxZWRiYyIsczoidlx4ZTBpIGdpXHhlMnkiLHNzOiIlZCBnaVx4ZTJ5IixtOiJtXHUxZWQ5dCBwaFx4ZmF0IixtbToiJWQgcGhceGZhdCIsaDoibVx1MWVkOXQgZ2lcdTFlZGQiLGhoOiIlZCBnaVx1MWVk''@;'; put 'put ''ZCIsZDoibVx1MWVkOXQgbmdceGUweSIsZGQ6IiVkIG5nXHhlMHkiLHc6Im1cdTFlZDl0IHR1XHUxZWE3biIsd3c6IiVkIHR1XHUxZWE3biIsTToibVx1MWVkOXQgdGhceGUxbmciLE1NOiIlZCB0aFx4ZTFuZyIseToibVx1MWVkOXQgblx1MDEwM20iLHl5OiIlZCBuXHUwMTAzbSJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGd9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY5NzAyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgieC1wc2V1ZG8i''@;'; put 'put ''LHttb250aHM6Ikp+XHhlMVx4ZjFceGZhXHhlMX5yXHhmZF9Gflx4ZTliclx4ZmF+XHhlMXJceGZkX35NXHhlMXJjfmhfXHhjMXB+clx4ZWRsX35NXHhlMVx4ZmRffkpceGZhXHhmMVx4ZTl+X0pceGZhbH5ceGZkX1x4YzFceGZhfmdceGZhc3R+X1NceGU5cH50XHhlOW1iflx4ZTlyX1x4ZDN+''@;'; put 'put ''Y3RceGYzYn5ceGU5cl9ceGQxflx4ZjN2XHhlOW1+Ylx4ZTlyX35EXHhlOWNceGU5fm1iXHhlOXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikp+XHhlMVx4ZjFffkZceGU5Yl9+TVx4ZTFyX35ceGMxcHJffk1ceGUxXHhmZF9+Slx4ZmFceGYxX35KXHhmYWxfflx4YzFceGZhZ19+U1x4ZTlw''@;'; put 'put ''X35ceGQzY3Rfflx4ZDFceGYzdl9+RFx4ZTljIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlN+XHhmYVx4ZjFkXHhlMX5ceGZkX01ceGYzflx4ZjFkXHhlMVx4ZmR+X1RceGZhXHhlOX5zZFx4ZTFceGZkfl9XXHhlOWR+XHhmMVx4ZTlzZH5ceGUxXHhmZF9Ufmhc''@;'; put 'put ''eGZhcnN+ZFx4ZTFceGZkX35Gclx4ZWRkflx4ZTFceGZkX1N+XHhlMXRceGZhcn5kXHhlMVx4ZmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU35ceGZhXHhmMV9+TVx4ZjNceGYxX35UXHhmYVx4ZTlffldceGU5ZF9+VGhceGZhX35Gclx4ZWRfflNceGUxdCIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiU35ceGZhX01ceGYzfl9UXHhmYV9+V1x4ZTlfVH5oX0Zyfl9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVH5ceGYzZFx4ZTF+XHhmZCBceGUxdF0gTFQiLG5leHREYXk6IltUflx4ZjNtXHhmM35yclx4ZjN+dyBceGUxdF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUxdF0gTFQiLGxhc3REYXk6IltceGRk''@;'; put 'put ''flx4ZTlzdH5ceGU5cmRceGUxflx4ZmQgXHhlMXRdIExUIixsYXN0V2VlazoiW0x+XHhlMXN0XSBkZGRkIFtceGUxdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx4ZWR+XHhmMSAlcyIscGFzdDoiJXMgXHhlMX5nXHhmMyIsczoiXHhlMSB+Zlx4ZTl3IH5zXHhl''@;'; put 'put ''OWNceGYzflx4ZjFkcyIsc3M6IiVkIHN+XHhlOWNceGYzXHhmMX5kcyIsbToiXHhlMSB+bVx4ZWRceGYxflx4ZmF0XHhlOSIsbW06IiVkIG1+XHhlZFx4ZjFceGZhfnRceGU5cyIsaDoiXHhlMX5ceGYxIGhceGYzflx4ZmFyIixoaDoiJWQgaH5ceGYzXHhmYXJzIixkOiJceGUxIH5kXHhlMVx4''@;'; put 'put ''ZmQiLGRkOiIlZCBkflx4ZTFceGZkcyIsTToiXHhlMSB+bVx4ZjNceGYxfnRoIixNTToiJWQgbX5ceGYzXHhmMXR+aHMiLHk6Ilx4ZTEgflx4ZmRceGU5XHhlMXIiLHl5OiIlZCBceGZkflx4ZTlceGUxcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzI2NTU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ5byIse21vbnRoczoiU1x1MWViOVx1MDMwMXJcdTFlYjlcdTAzMDFfRVx1MDMwMHJlXHUwMzAwbGVcdTAzMDBfXHUxZWI4clx1MWViOVx1MDMwMG5hXHUwMzAwX0lcdTAzMDBnYmVcdTAzMDFfRVx1MDMwMGJpYmlfT1x1MDMwMGt1''@;'; put 'put ''XHUwMzAwZHVfQWdcdTFlYjltb19PXHUwMzAwZ3VcdTAzMDFuX093ZXdlX1x1MWVjY1x1MDMwMHdhXHUwMzAwcmFcdTAzMDBfQmVcdTAzMDFsdVx1MDMwMV9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJTXHUxZWI5XHUwMzAxcl9FXHUw''@;'; put 'put ''MzAwcmxfXHUxZWI4cm5fSVx1MDMwMGdiX0VcdTAzMDBiaV9PXHUwMzAwa3VcdTAzMDBfQWdcdTFlYjlfT1x1MDMwMGd1XHUwMzAxX093ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMF9CZVx1MDMwMWxfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''QVx1MDMwMGlcdTAzMDBrdVx1MDMwMV9BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFndW5fXHUxZWNjalx1MWVjZFx1MDMwMXJ1XHUwMzAxX1x1MWVjY2pcdTFlY2RcdTAzMDFiXHUxZWNkX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMW1cdTFlYjlcdTAzMDF0YSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJBXHUwMzAwaVx1MDMwMGtfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxX1x1MWVjY2pyX1x1MWVjY2piX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQVx1MDMwMGlcdTAzMDBfQWpfSVx1MDMw''@;'; put 'put ''MHNfXHUxZWNjcl9cdTFlY2NiX1x1MWViOHRfQVx1MDMwMGIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1N''@;'; put 'put ''TU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW09cdTAzMDBuaVx1MDMwMCBuaV0gTFQiLG5leHREYXk6IltcdTFlY2NcdTAzMDBsYSBuaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbidiXHUxZWNkXSBbbmldIExUIixsYXN0RGF5''@;'; put 'put ''OiJbQVx1MDMwMG5hIG5pXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFsXHUxZWNkXHUwMzAxXSBbbmldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuaVx1MDMwMSAlcyIscGFzdDoiJXMga1x1MWVjZGphXHUwMzAxIixz''@;'; put 'put ''OiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGFheWFcdTAzMDEgZGllIixzczoiYWF5YVx1MDMwMSAlZCIsbToiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBrYW4iLG1tOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxICVkIixoOiJ3YVx1MDMwMWthdGkga2FuIixoaDoid2FcdTAzMDFrYXRpICVkIixk''@;'; put 'put ''OiJcdTFlY2RqXHUxZWNkXHUwMzAxIGthbiIsZGQ6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLE06Im9zdVx1MDMwMCBrYW4iLE1NOiJvc3VcdTAzMDAgJWQiLHk6Ilx1MWVjZGR1XHUwMzAxbiBrYW4iLHl5OiJcdTFlY2RkdVx1MDMwMW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''dTFlY2RqXHUxZWNkXHUwMzAxXHNcZHsxLDJ9LyxvcmRpbmFsOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1NzU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ6aC1jbiIs''@;'; put 'put ''e21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFc''@;'; put 'put ''dTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZc''@;'; put 'put ''dTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU1NDY4XHU2NWU1''@;'; put 'put ''X1x1NTQ2OFx1NGUwMF9cdTU0NjhcdTRlOGNfXHU1NDY4XHU0ZTA5X1x1NTQ2OFx1NTZkYl9cdTU0NjhcdTRlOTRfXHU1NDY4XHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiks''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVBaFx1NzBiOW1tXHU1MjA2IixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVk''@;'; put 'put ''ZGRkQWhcdTcwYjltbVx1NTIwNiIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNj''@;'; put 'put ''XHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTUxY2NcdTY2NjgiPT09Qnx8Ilx1NjVlOVx1NGUwYSI9PT1CfHwiXHU0''@;'; put 'put ''ZTBhXHU1MzQ4Ij09PUI/ZzoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOmc+PTExP2c6ZysxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEiOlA8''@;'; put 'put ''MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIGcud2VlaygpIT09dGhpcy53ZWVrKCk/IltcdTRlMGJdZGRkTFQiOiJbXHU2NzJjXWRkZExUIn0sbGFzdERheToiW1x1NjYyOFx1NTkyOV1MVCIsbGFzdFdlZWs6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud2VlaygpIT09Zy53ZWVrKCk/IltcdTRlMGFdZGRkTFQiOiJbXHU2NzJj''@;'; put 'put ''XWRkZExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU1NDY4KS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0''@;'; put 'put ''dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdTU0NjgiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTU0MGUiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTUxZTBcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDlm''@;'; put 'put ''IixtbToiJWQgXHU1MjA2XHU5NDlmIixoOiIxIFx1NWMwZlx1NjVmNiIsaGg6IiVkIFx1NWMwZlx1NjVmNiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLHc6IjEgXHU1NDY4Iix3dzoiJWQgXHU1NDY4IixNOiIxIFx1NGUyYVx1NjcwOCIsTU06IiVkIFx1NGUyYVx1NjcwOCIseToiMSBc''@;'; put 'put ''dTVlNzQiLHl5OiIlZCBcdTVlNzQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwxODM1MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInpoLWhrIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1''@;'; put 'put ''NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi''@;'; put 'put ''MVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFm''@;'; put 'put ''XHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRl''@;'; put 'put ''MDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERc''@;'; put 'put ''dTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0''@;'; put 'put ''OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTUxY2NcdTY2NjgiPT09Qnx8Ilx1NjVlOVx1NGUwYSI9PT1CfHwiXHU0ZTBhXHU1MzQ4Ij09PUI/ZzoiXHU0ZTJkXHU1MzQ4Ij09PUI/Zz49MTE/ZzpnKzEyOiJcdTRlMGJc''@;'; put 'put ''dTUzNDgiPT09Qnx8Ilx1NjY1YVx1NGUwYSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1NTFjY1x1NjY2OCI6UDw5MDA/Ilx1NjVlOVx1NGUwYSI6UDwxMjAwPyJcdTRlMGFcdTUzNDgiOjEyMDA9PT1QPyJc''@;'; put 'put ''dTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldTFQiLG5leHRXZWVrOiJbXHU0ZTBiXWRkZGRMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV1M''@;'; put 'put ''VCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcr''@;'; put 'put ''Ilx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gZysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1OTAzMSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIsc3M6IiVkIFx1Nzlk''@;'; put 'put ''MiIsbToiMSBcdTUyMDZcdTk0MTgiLG1tOiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBmXHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsTToiMSBcdTUwMGJcdTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5''@;'; put 'put ''eToiJWQgXHU1ZTc0In19KX0oeSg5NzU4NikpfSw1MTYyNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInpoLW1vIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0''@;'; put 'put ''ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1''@;'; put 'put ''NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1''@;'; put 'put ''NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5''@;'; put 'put ''NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiWVlZ''@;'; put 'put ''WVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSIsbDoiRC9NL1lZWVkiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3''@;'; put 'put ''MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91''@;'; put 'put ''cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTUxY2NcdTY2NjgiPT09Qnx8Ilx1NjVlOVx1NGUwYSI9PT1CfHwiXHU0ZTBhXHU1MzQ4Ij09PUI/ZzoiXHU0ZTJkXHU1MzQ4Ij09PUI/Zz49MTE/ZzpnKzEyOiJcdTRlMGJcdTUzNDgiPT09Qnx8Ilx1NjY1YVx1NGUwYSI9''@;'; put 'put ''PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1NTFjY1x1NjY2OCI6UDw5MDA/Ilx1NjVlOVx1NGUwYSI6UDwxMTMwPyJcdTRlMGFcdTUzNDgiOlA8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1''@;'; put 'put ''NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV0gTFQiLG5leHRXZWVrOiJbXHU0ZTBiXWRkZGQgTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldIExUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRk''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4g''@;'; put 'put ''ZysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1OTAzMSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NTE2NyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0MTgiLG1t''@;'; put 'put ''OiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBmXHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsTToiMSBcdTUwMGJcdTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In19KX0oeSg5NzU4''@;'; put 'put ''NikpfSw4ODg3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtdHciLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1''@;'; put 'put ''NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2''@;'; put 'put ''NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9c''@;'; put 'put ''dTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExM''@;'; put 'put ''TDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZ''@;'; put 'put ''WVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEy''@;'; put 'put ''PT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRlMGFcdTUzNDgiPT09Qj9nOiJcdTRlMmRcdTUzNDgiPT09Qj9nPj0xMT9nOmcrMTI6Ilx1NGUwYlx1NTM0OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVt''@;'; put 'put ''OmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBnKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJX''@;'; put 'put ''IjpyZXR1cm4gZysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBc''@;'; put 'put ''dTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfSh5KDk3NTg2KSl9LDk3NTg2OmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7KHVlPXkubm1kKHVlKSkuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgSSxxO2Z1bmN0aW9uIF8oKXtyZXR1cm4gSS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQihDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgQXJyYXl8fCJbb2JqZWN0IEFycmF5XSI9PT1P''@;'; put 'put ''YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIHcoQ2Upe3JldHVybiBudWxsIT1DZSYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIFAoQ2UsS2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoQ2UsS2UpfWZ1bmN0aW9uIEYoQ2Upe2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiAwPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQ2UpLmxlbmd0aDt2YXIgS2U7Zm9yKEtlIGluIENlKWlmKFAoQ2UsS2UpKXJldHVybiExO3JldHVy''@;'; put 'put ''biEwfWZ1bmN0aW9uIE8oQ2Upe3JldHVybiB2b2lkIDA9PT1DZX1mdW5jdGlvbiB6KENlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIENlfHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gTihDZSl7cmV0dXJuIENlIGluc3Rh''@;'; put 'put ''bmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiBMKENlLEtlKXt2YXIgSXQsbXQ9W10sZG49Q2UubGVuZ3RoO2ZvcihJdD0wO0l0PGRuOysrSXQpbXQucHVzaChLZShDZVtJdF0sSXQpKTtyZXR1cm4gbXR9ZnVu''@;'; put 'put ''Y3Rpb24gSyhDZSxLZSl7Zm9yKHZhciBtdCBpbiBLZSlQKEtlLG10KSYmKENlW210XT1LZVttdF0pO3JldHVybiBQKEtlLCJ0b1N0cmluZyIpJiYoQ2UudG9TdHJpbmc9S2UudG9TdHJpbmcpLFAoS2UsInZhbHVlT2YiKSYmKENlLnZhbHVlT2Y9S2UudmFsdWVPZiksQ2V9ZnVuY3Rpb24gVShD''@;'; put 'put ''ZSxLZSxtdCxJdCl7cmV0dXJuIGN2KENlLEtlLG10LEl0LCEwKS51dGMoKX1mdW5jdGlvbiBZKENlKXtyZXR1cm4gbnVsbD09Q2UuX3BmJiYoQ2UuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1''@;'; put 'put ''dDohMSxpbnZhbGlkRXJhOm51bGwsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxlcmE6bnVsbCxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksQ2UuX3BmfWZ1''@;'; put 'put ''bmN0aW9uIGVlKENlKXt2YXIgS2U9bnVsbCxtdD0hMSxJdD1DZS5fZCYmIWlzTmFOKENlLl9kLmdldFRpbWUoKSk7cmV0dXJuIEl0JiYoS2U9WShDZSksbXQ9cS5jYWxsKEtlLnBhcnNlZERhdGVQYXJ0cyxmdW5jdGlvbihkbil7cmV0dXJuIG51bGwhPWRufSksSXQ9S2Uub3ZlcmZsb3c8MCYm''@;'; put 'put ''IUtlLmVtcHR5JiYhS2UuaW52YWxpZEVyYSYmIUtlLmludmFsaWRNb250aCYmIUtlLmludmFsaWRXZWVrZGF5JiYhS2Uud2Vla2RheU1pc21hdGNoJiYhS2UubnVsbElucHV0JiYhS2UuaW52YWxpZEZvcm1hdCYmIUtlLnVzZXJJbnZhbGlkYXRlZCYmKCFLZS5tZXJpZGllbXx8S2UubWVyaWRp''@;'; put 'put ''ZW0mJm10KSxDZS5fc3RyaWN0JiYoSXQ9SXQmJjA9PT1LZS5jaGFyc0xlZnRPdmVyJiYwPT09S2UudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09S2UuYmlnSG91cikpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKENlKT9JdDooQ2UuX2lzVmFsaWQ9SXQsQ2Uu''@;'; put 'put ''X2lzVmFsaWQpfWZ1bmN0aW9uIEooQ2Upe3ZhciBLZT1VKE5hTik7cmV0dXJuIG51bGwhPUNlP0soWShLZSksQ2UpOlkoS2UpLnVzZXJJbnZhbGlkYXRlZD0hMCxLZX1xPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKENlKXt2YXIgSXQsS2U9T2Jq''@;'; put 'put ''ZWN0KHRoaXMpLG10PUtlLmxlbmd0aD4+PjA7Zm9yKEl0PTA7SXQ8bXQ7SXQrKylpZihJdCBpbiBLZSYmQ2UuY2FsbCh0aGlzLEtlW0l0XSxJdCxLZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBuZT1fLm1vbWVudFByb3BlcnRpZXM9W10saWU9ITE7ZnVuY3Rpb24gbGUoQ2UsS2Upe3ZhciBt''@;'; put 'put ''dCxJdCxkbixxbj1uZS5sZW5ndGg7aWYoTyhLZS5faXNBTW9tZW50T2JqZWN0KXx8KENlLl9pc0FNb21lbnRPYmplY3Q9S2UuX2lzQU1vbWVudE9iamVjdCksTyhLZS5faSl8fChDZS5faT1LZS5faSksTyhLZS5fZil8fChDZS5fZj1LZS5fZiksTyhLZS5fbCl8fChDZS5fbD1LZS5fbCksTyhL''@;'; put 'put ''ZS5fc3RyaWN0KXx8KENlLl9zdHJpY3Q9S2UuX3N0cmljdCksTyhLZS5fdHptKXx8KENlLl90em09S2UuX3R6bSksTyhLZS5faXNVVEMpfHwoQ2UuX2lzVVRDPUtlLl9pc1VUQyksTyhLZS5fb2Zmc2V0KXx8KENlLl9vZmZzZXQ9S2UuX29mZnNldCksTyhLZS5fcGYpfHwoQ2UuX3BmPVkoS2Up''@;'; put 'put ''KSxPKEtlLl9sb2NhbGUpfHwoQ2UuX2xvY2FsZT1LZS5fbG9jYWxlKSxxbj4wKWZvcihtdD0wO210PHFuO210KyspTyhkbj1LZVtJdD1uZVttdF1dKXx8KENlW0l0XT1kbik7cmV0dXJuIENlfWZ1bmN0aW9uIG1lKENlKXtsZSh0aGlzLENlKSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPUNlLl9k''@;'; put 'put ''P0NlLl9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PWllJiYoaWU9ITAsXy51cGRhdGVPZmZzZXQodGhpcyksaWU9ITEpfWZ1bmN0aW9uIF9lKENlKXtyZXR1cm4gQ2UgaW5zdGFuY2VvZiBtZXx8bnVsbCE9Q2UmJm51bGwhPUNl''@;'; put 'put ''Ll9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gVGUoQ2UpeyExPT09Xy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrQ2UpfWZ1bmN0aW9uIFNlKENlLEtlKXt2''@;'; put 'put ''YXIgbXQ9ITA7cmV0dXJuIEsoZnVuY3Rpb24oKXtpZihudWxsIT1fLmRlcHJlY2F0aW9uSGFuZGxlciYmXy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCxDZSksbXQpe3ZhciBkbixxbixpaSxJdD1bXSxJYT1hcmd1bWVudHMubGVuZ3RoO2Zvcihxbj0wO3FuPElhO3FuKyspe2lmKGRuPSIiLCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgYXJndW1lbnRzW3FuXSl7Zm9yKGlpIGluIGRuKz0iXG5bIitxbisiXSAiLGFyZ3VtZW50c1swXSlQKGFyZ3VtZW50c1swXSxpaSkmJihkbis9aWkrIjogIithcmd1bWVudHNbMF1baWldKyIsICIpO2RuPWRuLnNsaWNlKDAsLTIpfWVsc2UgZG49YXJndW1lbnRzW3Fu''@;'; put 'put ''XTtJdC5wdXNoKGRuKX1UZShDZSsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoSXQpLmpvaW4oIiIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLG10PSExfXJldHVybiBLZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEtlKX12YXIgVCxqZT17fTtmdW5jdGlvbiBW''@;'; put 'put ''KENlLEtlKXtudWxsIT1fLmRlcHJlY2F0aW9uSGFuZGxlciYmXy5kZXByZWNhdGlvbkhhbmRsZXIoQ2UsS2UpLGplW0NlXXx8KFRlKEtlKSxqZVtDZV09ITApfWZ1bmN0aW9uIHAoQ2Upe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZDZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVj''@;'; put 'put ''dCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiB4KENlLEtlKXt2YXIgSXQsbXQ9Syh7fSxDZSk7Zm9yKEl0IGluIEtlKVAoS2UsSXQpJiYodyhDZVtJdF0pJiZ3KEtlW0l0XSk/KG10W0l0XT17fSxLKG10W0l0XSxDZVtJdF0pLEsobXRb''@;'; put 'put ''SXRdLEtlW0l0XSkpOm51bGwhPUtlW0l0XT9tdFtJdF09S2VbSXRdOmRlbGV0ZSBtdFtJdF0pO2ZvcihJdCBpbiBDZSlQKENlLEl0KSYmIVAoS2UsSXQpJiZ3KENlW0l0XSkmJihtdFtJdF09Syh7fSxtdFtJdF0pKTtyZXR1cm4gbXR9ZnVuY3Rpb24gQyhDZSl7bnVsbCE9Q2UmJnRoaXMuc2V0''@;'; put 'put ''KENlKX1fLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxfLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLFQ9T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24oQ2Upe3ZhciBLZSxtdD1bXTtmb3IoS2UgaW4gQ2UpUChDZSxLZSkmJm10LnB1c2goS2UpO3JldHVybiBtdH07ZnVu''@;'; put 'put ''Y3Rpb24gRShDZSxLZSxtdCl7dmFyIEl0PSIiK01hdGguYWJzKENlKTtyZXR1cm4oQ2U+PTA/bXQ/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxLZS1JdC5sZW5ndGgpKS50b1N0cmluZygpLnN1YnN0cigxKStJdH12YXIgbT0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShz''@;'; put 'put ''cyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xa''@;'; put 'put ''Wj98LikvZyxBPS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLGFlPXt9LHRlPXt9O2Z1bmN0aW9uIHNlKENlLEtlLG10LEl0KXt2YXIgZG49SXQ7InN0cmluZyI9PXR5cGVvZiBJdCYmKGRuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbSXRdKCl9KSxDZSYmKHRl''@;'; put 'put ''W0NlXT1kbiksS2UmJih0ZVtLZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gRShkbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksS2VbMV0sS2VbMl0pfSksbXQmJih0ZVttdF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChkbi5hcHBseSh0aGlzLGFyZ3VtZW50cyks''@;'; put 'put ''Q2UpfSl9ZnVuY3Rpb24gd2UoQ2Upe3JldHVybiBDZS5tYXRjaCgvXFtbXHNcU10vKT9DZS5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOkNlLnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIEplKENlLEtlKXtyZXR1cm4gQ2UuaXNWYWxpZCgpPyhLZT1vdChLZSxDZS5sb2NhbGVEYXRhKCkpLGFl''@;'; put 'put ''W0tlXT1hZVtLZV18fGZ1bmN0aW9uIFVlKENlKXt2YXIgbXQsSXQsS2U9Q2UubWF0Y2gobSk7Zm9yKG10PTAsSXQ9S2UubGVuZ3RoO210PEl0O210KyspS2VbbXRdPXRlW0tlW210XV0/dGVbS2VbbXRdXTp3ZShLZVttdF0pO3JldHVybiBmdW5jdGlvbihkbil7dmFyIGlpLHFuPSIiO2Zvcihp''@;'; put 'put ''aT0wO2lpPEl0O2lpKyspcW4rPXAoS2VbaWldKT9LZVtpaV0uY2FsbChkbixDZSk6S2VbaWldO3JldHVybiBxbn19KEtlKSxhZVtLZV0oQ2UpKTpDZS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBvdChDZSxLZSl7dmFyIG10PTU7ZnVuY3Rpb24gSXQoZG4pe3JldHVybiBL''@;'; put 'put ''ZS5sb25nRGF0ZUZvcm1hdChkbil8fGRufWZvcihBLmxhc3RJbmRleD0wO210Pj0wJiZBLnRlc3QoQ2UpOylDZT1DZS5yZXBsYWNlKEEsSXQpLEEubGFzdEluZGV4PTAsbXQtPTE7cmV0dXJuIENlfXZhciBBZT17RDoiZGF0ZSIsZGF0ZXM6ImRhdGUiLGRhdGU6ImRhdGUiLGQ6ImRheSIsZGF5''@;'; put 'put ''czoiZGF5IixkYXk6ImRheSIsZToid2Vla2RheSIsd2Vla2RheXM6IndlZWtkYXkiLHdlZWtkYXk6IndlZWtkYXkiLEU6Imlzb1dlZWtkYXkiLGlzb3dlZWtkYXlzOiJpc29XZWVrZGF5Iixpc293ZWVrZGF5OiJpc29XZWVrZGF5IixEREQ6ImRheU9mWWVhciIsZGF5b2Z5ZWFyczoiZGF5T2ZZ''@;'; put 'put ''ZWFyIixkYXlvZnllYXI6ImRheU9mWWVhciIsaDoiaG91ciIsaG91cnM6ImhvdXIiLGhvdXI6ImhvdXIiLG1zOiJtaWxsaXNlY29uZCIsbWlsbGlzZWNvbmRzOiJtaWxsaXNlY29uZCIsbWlsbGlzZWNvbmQ6Im1pbGxpc2Vjb25kIixtOiJtaW51dGUiLG1pbnV0ZXM6Im1pbnV0ZSIsbWludXRl''@;'; put 'put ''OiJtaW51dGUiLE06Im1vbnRoIixtb250aHM6Im1vbnRoIixtb250aDoibW9udGgiLFE6InF1YXJ0ZXIiLHF1YXJ0ZXJzOiJxdWFydGVyIixxdWFydGVyOiJxdWFydGVyIixzOiJzZWNvbmQiLHNlY29uZHM6InNlY29uZCIsc2Vjb25kOiJzZWNvbmQiLGdnOiJ3ZWVrWWVhciIsd2Vla3llYXJz''@;'; put 'put ''OiJ3ZWVrWWVhciIsd2Vla3llYXI6IndlZWtZZWFyIixHRzoiaXNvV2Vla1llYXIiLGlzb3dlZWt5ZWFyczoiaXNvV2Vla1llYXIiLGlzb3dlZWt5ZWFyOiJpc29XZWVrWWVhciIsdzoid2VlayIsd2Vla3M6IndlZWsiLHdlZWs6IndlZWsiLFc6Imlzb1dlZWsiLGlzb3dlZWtzOiJpc29XZWVr''@;'; put 'put ''Iixpc293ZWVrOiJpc29XZWVrIix5OiJ5ZWFyIix5ZWFyczoieWVhciIseWVhcjoieWVhciJ9O2Z1bmN0aW9uIF90KENlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIENlP0FlW0NlXXx8QWVbQ2UudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIG50KENlKXt2YXIgbXQsSXQsS2U9e307''@;'; put 'put ''Zm9yKEl0IGluIENlKVAoQ2UsSXQpJiYobXQ9X3QoSXQpKSYmKEtlW210XT1DZVtJdF0pO3JldHVybiBLZX12YXIgUWU9e2RhdGU6OSxkYXk6MTEsd2Vla2RheToxMSxpc29XZWVrZGF5OjExLGRheU9mWWVhcjo0LGhvdXI6MTMsbWlsbGlzZWNvbmQ6MTYsbWludXRlOjE0LG1vbnRoOjgscXVh''@;'; put 'put ''cnRlcjo3LHNlY29uZDoxNSx3ZWVrWWVhcjoxLGlzb1dlZWtZZWFyOjEsd2Vlazo1LGlzb1dlZWs6NSx5ZWFyOjF9O3ZhciBBdCx5dD0vXGQvLE10PS9cZFxkLyxEdD0vXGR7M30vLGl0PS9cZHs0fS8sJGU9L1srLV0/XGR7Nn0vLHR0PS9cZFxkPy8sSGU9L1xkXGRcZFxkPy8sdXQ9L1xkXGRc''@;'; put 'put ''ZFxkXGRcZD8vLHF0PS9cZHsxLDN9LyxSdD0vXGR7MSw0fS8sUHQ9L1srLV0/XGR7MSw2fS8sY2k9L1xkKy8sUXQ9L1srLV0/XGQrLyxzbj0vWnxbKy1dXGRcZDo/XGRcZC9naSxSaT0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLGZ0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZc''@;'; put 'put ''dTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksT3I9L15bMS05XVxkPy8sV3Q9L14oWzEtOV1cZHxcZCkvO2Z1bmN0aW9uIFJu''@;'; put 'put ''KENlLEtlLG10KXtBdFtDZV09cChLZSk/S2U6ZnVuY3Rpb24oSXQsZG4pe3JldHVybiBJdCYmbXQ/bXQ6S2V9fWZ1bmN0aW9uIHN0KENlLEtlKXtyZXR1cm4gUChBdCxDZSk/QXRbQ2VdKEtlLl9zdHJpY3QsS2UuX2xvY2FsZSk6bmV3IFJlZ0V4cChmdW5jdGlvbiBVdChDZSl7cmV0dXJuIHJp''@;'; put 'put ''KENlLnJlcGxhY2UoIlxcIiwiIikucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLGZ1bmN0aW9uKEtlLG10LEl0LGRuLHFuKXtyZXR1cm4gbXR8fEl0fHxkbnx8cW59KSl9KENlKSl9ZnVuY3Rpb24gcmkoQ2Upe3JldHVybiBDZS5yZXBsYWNlKC9bLVwvXFxe''@;'; put 'put ''JCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIFdlKENlKXtyZXR1cm4gQ2U8MD9NYXRoLmNlaWwoQ2UpfHwwOk1hdGguZmxvb3IoQ2UpfWZ1bmN0aW9uIFR0KENlKXt2YXIgS2U9K0NlLG10PTA7cmV0dXJuIDAhPT1LZSYmaXNGaW5pdGUoS2UpJiYobXQ9V2UoS2UpKSxtdH1BdD17''@;'; put 'put ''fTt2YXIgbnI9e307ZnVuY3Rpb24gaHQoQ2UsS2Upe3ZhciBtdCxkbixJdD1LZTtmb3IoInN0cmluZyI9PXR5cGVvZiBDZSYmKENlPVtDZV0pLHooS2UpJiYoSXQ9ZnVuY3Rpb24ocW4saWkpe2lpW0tlXT1UdChxbil9KSxkbj1DZS5sZW5ndGgsbXQ9MDttdDxkbjttdCsrKW5yW0NlW210XV09''@;'; put 'put ''SXR9ZnVuY3Rpb24geHQoQ2UsS2Upe2h0KENlLGZ1bmN0aW9uKG10LEl0LGRuLHFuKXtkbi5fdz1kbi5fd3x8e30sS2UobXQsZG4uX3csZG4scW4pfSl9ZnVuY3Rpb24gam4oQ2UsS2UsbXQpe251bGwhPUtlJiZQKG5yLENlKSYmbnJbQ2VdKEtlLG10Ll9hLG10LENlKX1mdW5jdGlvbiBybihD''@;'; put 'put ''ZSl7cmV0dXJuIENlJTQ9PTAmJkNlJTEwMCE9MHx8Q2UlNDAwPT0wfXZhciB6dD0wLGhpPTEsY249Mixmbj0zLElpPTQsWHQ9NSxlbj02LHVhPTcsRWk9ODtmdW5jdGlvbiB2cihDZSl7cmV0dXJuIHJuKENlKT8zNjY6MzY1fXNlKCJZIiwwLDAsZnVuY3Rpb24oKXt2YXIgQ2U9dGhpcy55ZWFy''@;'; put 'put ''KCk7cmV0dXJuIENlPD05OTk5P0UoQ2UsNCk6IisiK0NlfSksc2UoMCxbIllZIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pLHNlKDAsWyJZWVlZIiw0XSwwLCJ5ZWFyIiksc2UoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIiksc2UoMCxbIllZWVlZWSIsNiwhMF0sMCwi''@;'; put 'put ''eWVhciIpLFJuKCJZIixRdCksUm4oIllZIix0dCxNdCksUm4oIllZWVkiLFJ0LGl0KSxSbigiWVlZWVkiLFB0LCRlKSxSbigiWVlZWVlZIixQdCwkZSksaHQoWyJZWVlZWSIsIllZWVlZWSJdLHp0KSxodCgiWVlZWSIsZnVuY3Rpb24oQ2UsS2Upe0tlW3p0XT0yPT09Q2UubGVuZ3RoP18ucGFy''@;'; put 'put ''c2VUd29EaWdpdFllYXIoQ2UpOlR0KENlKX0pLGh0KCJZWSIsZnVuY3Rpb24oQ2UsS2Upe0tlW3p0XT1fLnBhcnNlVHdvRGlnaXRZZWFyKENlKX0pLGh0KCJZIixmdW5jdGlvbihDZSxLZSl7S2VbenRdPXBhcnNlSW50KENlLDEwKX0pLF8ucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oQ2Up''@;'; put 'put ''e3JldHVybiBUdChDZSkrKFR0KENlKT42OD8xOTAwOjJlMyl9O3ZhciBXaSxXbj1laSgiRnVsbFllYXIiLCEwKTtmdW5jdGlvbiBlaShDZSxLZSl7cmV0dXJuIGZ1bmN0aW9uKG10KXtyZXR1cm4gbnVsbCE9bXQ/KFZpKHRoaXMsQ2UsbXQpLF8udXBkYXRlT2Zmc2V0KHRoaXMsS2UpLHRoaXMp''@;'; put 'put ''OlFyKHRoaXMsQ2UpfX1mdW5jdGlvbiBRcihDZSxLZSl7aWYoIUNlLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciBtdD1DZS5fZCxJdD1DZS5faXNVVEM7c3dpdGNoKEtlKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIEl0P210LmdldFVUQ01pbGxpc2Vjb25kcygpOm10LmdldE1pbGxpc2Vj''@;'; put 'put ''b25kcygpO2Nhc2UiU2Vjb25kcyI6cmV0dXJuIEl0P210LmdldFVUQ1NlY29uZHMoKTptdC5nZXRTZWNvbmRzKCk7Y2FzZSJNaW51dGVzIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDTWludXRlcygpOm10LmdldE1pbnV0ZXMoKTtjYXNlIkhvdXJzIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDSG91cnMoKTpt''@;'; put 'put ''dC5nZXRIb3VycygpO2Nhc2UiRGF0ZSI6cmV0dXJuIEl0P210LmdldFVUQ0RhdGUoKTptdC5nZXREYXRlKCk7Y2FzZSJEYXkiOnJldHVybiBJdD9tdC5nZXRVVENEYXkoKTptdC5nZXREYXkoKTtjYXNlIk1vbnRoIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDTW9udGgoKTptdC5nZXRNb250aCgpO2Nh''@;'; put 'put ''c2UiRnVsbFllYXIiOnJldHVybiBJdD9tdC5nZXRVVENGdWxsWWVhcigpOm10LmdldEZ1bGxZZWFyKCk7ZGVmYXVsdDpyZXR1cm4gTmFOfX1mdW5jdGlvbiBWaShDZSxLZSxtdCl7dmFyIEl0LGRuLHFuLGlpLElhO2lmKENlLmlzVmFsaWQoKSYmIWlzTmFOKG10KSl7c3dpdGNoKEl0PUNlLl9k''@;'; put 'put ''LGRuPUNlLl9pc1VUQyxLZSl7Y2FzZSJNaWxsaXNlY29uZHMiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ01pbGxpc2Vjb25kcyhtdCk6SXQuc2V0TWlsbGlzZWNvbmRzKG10KSk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gdm9pZChkbj9JdC5zZXRVVENTZWNvbmRzKG10KTpJdC5zZXRTZWNvbmRz''@;'; put 'put ''KG10KSk7Y2FzZSJNaW51dGVzIjpyZXR1cm4gdm9pZChkbj9JdC5zZXRVVENNaW51dGVzKG10KTpJdC5zZXRNaW51dGVzKG10KSk7Y2FzZSJIb3VycyI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDSG91cnMobXQpOkl0LnNldEhvdXJzKG10KSk7Y2FzZSJEYXRlIjpyZXR1cm4gdm9pZChkbj9J''@;'; put 'put ''dC5zZXRVVENEYXRlKG10KTpJdC5zZXREYXRlKG10KSk7Y2FzZSJGdWxsWWVhciI6YnJlYWs7ZGVmYXVsdDpyZXR1cm59cW49bXQsaWk9Q2UubW9udGgoKSxJYT0yOSE9PShJYT1DZS5kYXRlKCkpfHwxIT09aWl8fHJuKHFuKT9JYToyOCxkbj9JdC5zZXRVVENGdWxsWWVhcihxbixpaSxJYSk6''@;'; put 'put ''SXQuc2V0RnVsbFllYXIocW4saWksSWEpfX1mdW5jdGlvbiBwYShDZSxLZSl7aWYoaXNOYU4oQ2UpfHxpc05hTihLZSkpcmV0dXJuIE5hTjt2YXIgbXQ9ZnVuY3Rpb24gTHIoQ2UsS2Upe3JldHVybihDZSVLZStLZSklS2V9KEtlLDEyKTtyZXR1cm4gQ2UrPShLZS1tdCkvMTIsMT09PW10P3Ju''@;'; put 'put ''KENlKT8yOToyODozMS1tdCU3JTJ9V2k9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBlLmluZGV4T2Y6ZnVuY3Rpb24oQ2Upe3ZhciBLZTtmb3IoS2U9MDtLZTx0aGlzLmxlbmd0aDsrK0tlKWlmKHRoaXNbS2VdPT09Q2UpcmV0dXJuIEtlO3JldHVybi0xfSxzZSgiTSIs''@;'; put 'put ''WyJNTSIsMl0sIk1vIixmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pLHNlKCJNTU0iLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsQ2UpfSksc2UoIk1NTU0iLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9j''@;'; put 'put ''YWxlRGF0YSgpLm1vbnRocyh0aGlzLENlKX0pLFJuKCJNIix0dCxPciksUm4oIk1NIix0dCxNdCksUm4oIk1NTSIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS5tb250aHNTaG9ydFJlZ2V4KENlKX0pLFJuKCJNTU1NIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLm1vbnRoc1JlZ2V4KENl''@;'; put 'put ''KX0pLGh0KFsiTSIsIk1NIl0sZnVuY3Rpb24oQ2UsS2Upe0tlW2hpXT1UdChDZSktMX0pLGh0KFsiTU1NIiwiTU1NTSJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXt2YXIgZG49bXQuX2xvY2FsZS5tb250aHNQYXJzZShDZSxJdCxtdC5fc3RyaWN0KTtudWxsIT1kbj9LZVtoaV09ZG46WShtdCku''@;'; put 'put ''aW52YWxpZE1vbnRoPUNlfSk7dmFyIFFuPSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLGxhPSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9P''@;'; put 'put ''Y3RfTm92X0RlYyIuc3BsaXQoIl8iKSx5YT0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLExhPWZ0LEZhPWZ0O2Z1bmN0aW9uIE5zKENlLEtlLG10KXt2YXIgSXQsZG4scW4saWk9Q2UudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21v''@;'; put 'put ''bnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLEl0PTA7SXQ8MTI7KytJdClxbj1VKFsyZTMsSXRdKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0l0XT10aGlzLm1vbnRoc1Nob3J0KHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgp''@;'; put 'put ''LHRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF09dGhpcy5tb250aHMocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG10PyJNTU0iPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGlpKSk/ZG46bnVsbDotMSE9PShkbj1XaS5jYWxsKHRoaXMuX2xv''@;'; put 'put ''bmdNb250aHNQYXJzZSxpaSkpP2RuOm51bGw6Ik1NTSI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsaWkpKT9kbjpudWxsOi0xIT09KGRuPVdpLmNhbGwodGhpcy5fbG9uZ01v''@;'; put 'put ''bnRoc1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxpaSkpP2RuOm51bGx9ZnVuY3Rpb24gcHUoQ2UsS2Upe2lmKCFDZS5pc1ZhbGlkKCkpcmV0dXJuIENlO2lmKCJzdHJpbmciPT10eXBlb2YgS2UpaWYoL15cZCskLy50ZXN0KEtlKSlLZT1UdChL''@;'; put 'put ''ZSk7ZWxzZSBpZigheihLZT1DZS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UoS2UpKSlyZXR1cm4gQ2U7dmFyIG10PUtlLEl0PUNlLmRhdGUoKTtyZXR1cm4gSXQ9SXQ8Mjk/SXQ6TWF0aC5taW4oSXQscGEoQ2UueWVhcigpLG10KSksQ2UuX2lzVVRDP0NlLl9kLnNldFVUQ01vbnRoKG10LEl0''@;'; put 'put ''KTpDZS5fZC5zZXRNb250aChtdCxJdCksQ2V9ZnVuY3Rpb24gTGMoQ2Upe3JldHVybiBudWxsIT1DZT8ocHUodGhpcyxDZSksXy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcyk6UXIodGhpcywiTW9udGgiKX1mdW5jdGlvbiB1aSgpe2Z1bmN0aW9uIENlKFNvLGZzKXtyZXR1cm4gZnMubGVu''@;'; put 'put ''Z3RoLVNvLmxlbmd0aH12YXIgZG4scW4saWksSWEsS2U9W10sbXQ9W10sSXQ9W107Zm9yKGRuPTA7ZG48MTI7ZG4rKylxbj1VKFsyZTMsZG5dKSxpaT1yaSh0aGlzLm1vbnRoc1Nob3J0KHFuLCIiKSksSWE9cmkodGhpcy5tb250aHMocW4sIiIpKSxLZS5wdXNoKGlpKSxtdC5wdXNoKElhKSxJ''@;'; put 'put ''dC5wdXNoKElhKSxJdC5wdXNoKGlpKTtLZS5zb3J0KENlKSxtdC5zb3J0KENlKSxJdC5zb3J0KENlKSx0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKCJeKCIrSXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9u''@;'; put 'put ''dGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK210LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitLZS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gVnQoQ2UsS2UsbXQsSXQsZG4scW4saWkpe3ZhciBJYTtyZXR1''@;'; put 'put ''cm4gQ2U8MTAwJiZDZT49MD8oSWE9bmV3IERhdGUoQ2UrNDAwLEtlLG10LEl0LGRuLHFuLGlpKSxpc0Zpbml0ZShJYS5nZXRGdWxsWWVhcigpKSYmSWEuc2V0RnVsbFllYXIoQ2UpKTpJYT1uZXcgRGF0ZShDZSxLZSxtdCxJdCxkbixxbixpaSksSWF9ZnVuY3Rpb24gSnIoQ2Upe3ZhciBLZSxt''@;'; put 'put ''dDtyZXR1cm4gQ2U8MTAwJiZDZT49MD8oKG10PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpWzBdPUNlKzQwMCxLZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLG10KSksaXNGaW5pdGUoS2UuZ2V0VVRDRnVsbFllYXIoKSkmJktlLnNldFVUQ0Z1bGxZZWFyKENl''@;'; put 'put ''KSk6S2U9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxhcmd1bWVudHMpKSxLZX1mdW5jdGlvbiBiMChDZSxLZSxtdCl7dmFyIEl0PTcrS2UtbXQ7cmV0dXJuLSg3K0pyKENlLDAsSXQpLmdldFVUQ0RheSgpLUtlKSU3K0l0LTF9ZnVuY3Rpb24gSGEoQ2UsS2UsbXQsSXQsZG4pe3ZhciBT''@;'; put 'put ''byxmcyxJYT0xKzcqKEtlLTEpKyg3K210LUl0KSU3K2IwKENlLEl0LGRuKTtyZXR1cm4gSWE8PTA/ZnM9dnIoU289Q2UtMSkrSWE6SWE+dnIoQ2UpPyhTbz1DZSsxLGZzPUlhLXZyKENlKSk6KFNvPUNlLGZzPUlhKSx7eWVhcjpTbyxkYXlPZlllYXI6ZnN9fWZ1bmN0aW9uIEx1KENlLEtlLG10''@;'; put 'put ''KXt2YXIgcW4saWksSXQ9YjAoQ2UueWVhcigpLEtlLG10KSxkbj1NYXRoLmZsb29yKChDZS5kYXlPZlllYXIoKS1JdC0xKS83KSsxO3JldHVybiBkbjwxP3FuPWRuK1ByKGlpPUNlLnllYXIoKS0xLEtlLG10KTpkbj5QcihDZS55ZWFyKCksS2UsbXQpPyhxbj1kbi1QcihDZS55ZWFyKCksS2Us''@;'; put 'put ''bXQpLGlpPUNlLnllYXIoKSsxKTooaWk9Q2UueWVhcigpLHFuPWRuKSx7d2Vlazpxbix5ZWFyOmlpfX1mdW5jdGlvbiBQcihDZSxLZSxtdCl7dmFyIEl0PWIwKENlLEtlLG10KSxkbj1iMChDZSsxLEtlLG10KTtyZXR1cm4odnIoQ2UpLUl0K2RuKS83fXNlKCJ3IixbInd3IiwyXSwid28iLCJ3''@;'; put 'put ''ZWVrIiksc2UoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxSbigidyIsdHQsT3IpLFJuKCJ3dyIsdHQsTXQpLFJuKCJXIix0dCxPciksUm4oIldXIix0dCxNdCkseHQoWyJ3Iiwid3ciLCJXIiwiV1ciXSxmdW5jdGlvbihDZSxLZSxtdCxJdCl7S2VbSXQuc3Vic3RyKDAsMSldPVR0KENl''@;'; put 'put ''KX0pO2Z1bmN0aW9uIHkwKENlLEtlKXtyZXR1cm4gQ2Uuc2xpY2UoS2UsNykuY29uY2F0KENlLnNsaWNlKDAsS2UpKX1zZSgiZCIsMCwiZG8iLCJkYXkiKSxzZSgiZGQiLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsQ2UpfSksc2Uo''@;'; put 'put ''ImRkZCIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLENlKX0pLHNlKCJkZGRkIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLENlKX0pLHNlKCJlIiwwLDAsIndlZWtkYXki''@;'; put 'put ''KSxzZSgiRSIsMCwwLCJpc29XZWVrZGF5IiksUm4oImQiLHR0KSxSbigiZSIsdHQpLFJuKCJFIix0dCksUm4oImRkIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLndlZWtkYXlzTWluUmVnZXgoQ2UpfSksUm4oImRkZCIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS53ZWVrZGF5c1Nob3J0''@;'; put 'put ''UmVnZXgoQ2UpfSksUm4oImRkZGQiLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2Uud2Vla2RheXNSZWdleChDZSl9KSx4dChbImRkIiwiZGRkIiwiZGRkZCJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXt2YXIgZG49bXQuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKENlLEl0LG10Ll9zdHJpY3QpO251''@;'; put 'put ''bGwhPWRuP0tlLmQ9ZG46WShtdCkuaW52YWxpZFdlZWtkYXk9Q2V9KSx4dChbImQiLCJlIiwiRSJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXtLZVtJdF09VHQoQ2UpfSk7dmFyIHI1PSJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3Bs''@;'; put 'put ''aXQoIl8iKSxPbD0iU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHVmPSJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxzZD1mdCxkZj1mdCxrMT1mdDtmdW5jdGlvbiBHaChDZSxLZSxtdCl7dmFyIEl0LGRuLHFuLGlpPUNlLnRvTG9jYWxlTG93ZXJDYXNl''@;'; put 'put ''KCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sSXQ9MDtJdDw3OysrSXQpcW49VShbMmUzLDFdKS5kYXkoSXQpLHRoaXMuX21pbldlZWtkYXlzUGFy''@;'; put 'put ''c2VbSXRdPXRoaXMud2Vla2RheXNNaW4ocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0l0XT10aGlzLndlZWtkYXlzU2hvcnQocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fd2Vla2RheXNQYXJzZVtJdF09dGhpcy53ZWVrZGF5cyhx''@;'; put 'put ''biwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbXQ/ImRkZGQiPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDoiZGRkIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDot''@;'; put 'put ''MSE9PShkbj1XaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOiJkZGRkIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1X''@;'; put 'put ''aS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOiJkZGQiPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhp''@;'; put 'put ''cy5fbWluV2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxp''@;'; put 'put ''aSkpP2RuOm51bGx9ZnVuY3Rpb24gYW4oKXtmdW5jdGlvbiBDZShOdSxkZCl7cmV0dXJuIGRkLmxlbmd0aC1OdS5sZW5ndGh9dmFyIHFuLGlpLElhLFNvLGZzLEtlPVtdLG10PVtdLEl0PVtdLGRuPVtdO2Zvcihxbj0wO3FuPDc7cW4rKylpaT1VKFsyZTMsMV0pLmRheShxbiksSWE9cmkodGhp''@;'; put 'put ''cy53ZWVrZGF5c01pbihpaSwiIikpLFNvPXJpKHRoaXMud2Vla2RheXNTaG9ydChpaSwiIikpLGZzPXJpKHRoaXMud2Vla2RheXMoaWksIiIpKSxLZS5wdXNoKElhKSxtdC5wdXNoKFNvKSxJdC5wdXNoKGZzKSxkbi5wdXNoKElhKSxkbi5wdXNoKFNvKSxkbi5wdXNoKGZzKTtLZS5zb3J0KENl''@;'; put 'put ''KSxtdC5zb3J0KENlKSxJdC5zb3J0KENlKSxkbi5zb3J0KENlKSx0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitkbi5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10''@;'; put 'put ''aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0l0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK210LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5''@;'; put 'put ''c01pblN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitLZS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gdmkoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBQbyhDZSxLZSl7c2UoQ2UsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlk''@;'; put 'put ''aWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxLZSl9KX1mdW5jdGlvbiBlbyhDZSxLZSl7cmV0dXJuIEtlLl9tZXJpZGllbVBhcnNlfXNlKCJIIixbIkhIIiwyXSwwLCJob3VyIiksc2UoImgiLFsiaGgiLDJdLDAsdmkpLHNlKCJrIixbImtrIiwyXSwwLGZ1bmN0aW9uIEFyKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaG91cnMoKXx8MjR9KSxzZSgiaG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit2aS5hcHBseSh0aGlzKStFKHRoaXMubWludXRlcygpLDIpfSksc2UoImhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit2aS5hcHBseSh0aGlzKStFKHRoaXMubWludXRlcygpLDIpK0Uo''@;'; put 'put ''dGhpcy5zZWNvbmRzKCksMil9KSxzZSgiSG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrRSh0aGlzLm1pbnV0ZXMoKSwyKX0pLHNlKCJIbW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK0UodGhpcy5taW51dGVzKCksMikrRSh0aGlzLnNl''@;'; put 'put ''Y29uZHMoKSwyKX0pLFBvKCJhIiwhMCksUG8oIkEiLCExKSxSbigiYSIsZW8pLFJuKCJBIixlbyksUm4oIkgiLHR0LFd0KSxSbigiaCIsdHQsT3IpLFJuKCJrIix0dCxPciksUm4oIkhIIix0dCxNdCksUm4oImhoIix0dCxNdCksUm4oImtrIix0dCxNdCksUm4oImhtbSIsSGUpLFJuKCJobW1z''@;'; put 'put ''cyIsdXQpLFJuKCJIbW0iLEhlKSxSbigiSG1tc3MiLHV0KSxodChbIkgiLCJISCJdLGZuKSxodChbImsiLCJrayJdLGZ1bmN0aW9uKENlLEtlLG10KXt2YXIgSXQ9VHQoQ2UpO0tlW2ZuXT0yND09PUl0PzA6SXR9KSxodChbImEiLCJBIl0sZnVuY3Rpb24oQ2UsS2UsbXQpe210Ll9pc1BtPW10''@;'; put 'put ''Ll9sb2NhbGUuaXNQTShDZSksbXQuX21lcmlkaWVtPUNlfSksaHQoWyJoIiwiaGgiXSxmdW5jdGlvbihDZSxLZSxtdCl7S2VbZm5dPVR0KENlKSxZKG10KS5iaWdIb3VyPSEwfSksaHQoImhtbSIsZnVuY3Rpb24oQ2UsS2UsbXQpe3ZhciBJdD1DZS5sZW5ndGgtMjtLZVtmbl09VHQoQ2Uuc3Vi''@;'; put 'put ''c3RyKDAsSXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3RyKEl0KSksWShtdCkuYmlnSG91cj0hMH0pLGh0KCJobW1zcyIsZnVuY3Rpb24oQ2UsS2UsbXQpe3ZhciBJdD1DZS5sZW5ndGgtNCxkbj1DZS5sZW5ndGgtMjtLZVtmbl09VHQoQ2Uuc3Vic3RyKDAsSXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3Ry''@;'; put 'put ''KEl0LDIpKSxLZVtYdF09VHQoQ2Uuc3Vic3RyKGRuKSksWShtdCkuYmlnSG91cj0hMH0pLGh0KCJIbW0iLGZ1bmN0aW9uKENlLEtlLG10KXt2YXIgSXQ9Q2UubGVuZ3RoLTI7S2VbZm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCkpfSksaHQoIkhtbXNzIixm''@;'; put 'put ''dW5jdGlvbihDZSxLZSxtdCl7dmFyIEl0PUNlLmxlbmd0aC00LGRuPUNlLmxlbmd0aC0yO0tlW2ZuXT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQsMikpLEtlW1h0XT1UdChDZS5zdWJzdHIoZG4pKX0pO3ZhciBWcz1laSgiSG91cnMiLCEwKTt2YXIgU3Qsamw9''@;'; put 'put ''e2NhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0sbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxpbnZhbGlkRGF0ZToiSW52YWxpZCBkYXRlIixvcmRpbmFs''@;'; put 'put ''OiIlZCIsZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBo''@;'; put 'put ''b3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIix3OiJhIHdlZWsiLHd3OiIlZCB3ZWVrcyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxtb250aHM6UW4sbW9udGhzU2hvcnQ6bGEsd2Vlazp7ZG93OjAsZG95OjZ9LHdlZWtkYXlzOnI1LHdl''@;'; put 'put ''ZWtkYXlzTWluOnVmLHdlZWtkYXlzU2hvcnQ6T2wsbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2l9LEhvPXt9LGtvPXt9O2Z1bmN0aW9uIEJ0KENlLEtlKXt2YXIgbXQsSXQ9TWF0aC5taW4oQ2UubGVuZ3RoLEtlLmxlbmd0aCk7Zm9yKG10PTA7bXQ8SXQ7bXQrPTEpaWYoQ2VbbXRdIT09''@;'; put 'put ''S2VbbXRdKXJldHVybiBtdDtyZXR1cm4gSXR9ZnVuY3Rpb24gX24oQ2Upe3JldHVybiBDZSYmQ2UudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpfWZ1bmN0aW9uIGJuKENlKXt2YXIgS2U9bnVsbDtpZih2b2lkIDA9PT1Ib1tDZV0mJnVlJiZ1ZS5leHBvcnRzJiZmdW5jdGlvbiBJbihD''@;'; put 'put ''ZSl7cmV0dXJuISghQ2V8fCFDZS5tYXRjaCgiXlteL1xcXFxdKiQiKSl9KENlKSl0cnl7S2U9U3QuX2FiYnIseSgzNTM1OCkoIi4vIitDZSksdXIoS2UpfWNhdGNoe0hvW0NlXT1udWxsfXJldHVybiBIb1tDZV19ZnVuY3Rpb24gdXIoQ2UsS2Upe3ZhciBtdDtyZXR1cm4gQ2UmJigobXQ9TyhL''@;'; put 'put ''ZSk/dGEoQ2UpOmJpKENlLEtlKSk/U3Q9bXQ6dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiTG9jYWxlICIrQ2UrIiBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/IikpLFN0Ll9hYmJyfWZ1bmN0aW9uIGJpKENlLEtlKXtpZihudWxs''@;'; put 'put ''IT09S2Upe3ZhciBtdCxJdD1qbDtpZihLZS5hYmJyPUNlLG51bGwhPUhvW0NlXSlWKCJkZWZpbmVMb2NhbGVPdmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2Fs''@;'; put 'put ''ZShsb2NhbGVOYW1lLCBjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpLEl0PUhvW0NlXS5fY29uZmlnO2Vsc2Ug''@;'; put 'put ''aWYobnVsbCE9S2UucGFyZW50TG9jYWxlKWlmKG51bGwhPUhvW0tlLnBhcmVudExvY2FsZV0pSXQ9SG9bS2UucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KG10PWJuKEtlLnBhcmVudExvY2FsZSkpKXJldHVybiBrb1tLZS5wYXJlbnRMb2NhbGVdfHwoa29bS2UucGFyZW50''@;'; put 'put ''TG9jYWxlXT1bXSksa29bS2UucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOkNlLGNvbmZpZzpLZX0pLG51bGw7SXQ9bXQuX2NvbmZpZ31yZXR1cm4gSG9bQ2VdPW5ldyBDKHgoSXQsS2UpKSxrb1tDZV0mJmtvW0NlXS5mb3JFYWNoKGZ1bmN0aW9uKGRuKXtiaShkbi5uYW1lLGRuLmNvbmZpZyl9''@;'; put 'put ''KSx1cihDZSksSG9bQ2VdfXJldHVybiBkZWxldGUgSG9bQ2VdLG51bGx9ZnVuY3Rpb24gdGEoQ2Upe3ZhciBLZTtpZihDZSYmQ2UuX2xvY2FsZSYmQ2UuX2xvY2FsZS5fYWJiciYmKENlPUNlLl9sb2NhbGUuX2FiYnIpLCFDZSlyZXR1cm4gU3Q7aWYoIUIoQ2UpKXtpZihLZT1ibihDZSkpcmV0''@;'; put 'put ''dXJuIEtlO0NlPVtDZV19cmV0dXJuIGZ1bmN0aW9uIG1uKENlKXtmb3IodmFyIG10LEl0LGRuLHFuLEtlPTA7S2U8Q2UubGVuZ3RoOyl7Zm9yKG10PShxbj1fbihDZVtLZV0pLnNwbGl0KCItIikpLmxlbmd0aCxJdD0oSXQ9X24oQ2VbS2UrMV0pKT9JdC5zcGxpdCgiLSIpOm51bGw7bXQ+MDsp''@;'; put 'put ''e2lmKGRuPWJuKHFuLnNsaWNlKDAsbXQpLmpvaW4oIi0iKSkpcmV0dXJuIGRuO2lmKEl0JiZJdC5sZW5ndGg+PW10JiZCdChxbixJdCk+PW10LTEpYnJlYWs7bXQtLX1LZSsrfXJldHVybiBTdH0oQ2UpfWZ1bmN0aW9uIFZhKENlKXt2YXIgS2UsbXQ9Q2UuX2E7cmV0dXJuIG10JiYtMj09PVko''@;'; put 'put ''Q2UpLm92ZXJmbG93JiYoS2U9bXRbaGldPDB8fG10W2hpXT4xMT9oaTptdFtjbl08MXx8bXRbY25dPnBhKG10W3p0XSxtdFtoaV0pP2NuOm10W2ZuXTwwfHxtdFtmbl0+MjR8fDI0PT09bXRbZm5dJiYoMCE9PW10W0lpXXx8MCE9PW10W1h0XXx8MCE9PW10W2VuXSk/Zm46bXRbSWldPDB8fG10''@;'; put 'put ''W0lpXT41OT9JaTptdFtYdF08MHx8bXRbWHRdPjU5P1h0Om10W2VuXTwwfHxtdFtlbl0+OTk5P2VuOi0xLFkoQ2UpLl9vdmVyZmxvd0RheU9mWWVhciYmKEtlPHp0fHxLZT5jbikmJihLZT1jbiksWShDZSkuX292ZXJmbG93V2Vla3MmJi0xPT09S2UmJihLZT11YSksWShDZSkuX292ZXJmbG93''@;'; put 'put ''V2Vla2RheSYmLTE9PT1LZSYmKEtlPUVpKSxZKENlKS5vdmVyZmxvdz1LZSksQ2V9dmFyICRvPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6XGRcZCg/OlsuLF1cZCspPyk/''@;'; put 'put ''KT8pKFsrLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxYbD0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pKD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZHwpKSg/OihUfCApKFxkXGQoPzpcZFxkKD86XGRcZCg/OlsuLF1cZCspPyk/KT8pKFsrLV1cZFxkKD86Oj9cZFxk''@;'; put 'put ''KT98XHMqWik/KT8kLyx0bz0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/Lyxfbz1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1cZC9dLFsiR0dHRy1bV11XVyIs''@;'; put 'put ''L1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0tXGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHszfS9dLFsiR0dHR1tXXVdXIiwv''@;'; put 'put ''XGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dLFsiWVlZWU1NIiwvXGR7Nn0vLCExXSxbIllZWVkiLC9cZHs0fS8sITFdXSxqaT1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6XGRcZDpcZFxkLFxkKy9dLFsi''@;'; put 'put ''SEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NTIiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10sWyJISG1tIiwvXGRcZFxkXGQv''@;'; put 'put ''XSxbIkhIIiwvXGRcZC9dXSxQYz0vXlwvP0RhdGVcKCgtP1xkKykvaSx6bD0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9ccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMoXGR7Miw0fSlccyhcZFxkKToo''@;'; put 'put ''XGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxkezR9KSkkLyxDYT17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07ZnVuY3Rpb24gVGEo''@;'; put 'put ''Q2Upe3ZhciBLZSxtdCxxbixpaSxJYSxTbyxJdD1DZS5faSxkbj0kby5leGVjKEl0KXx8WGwuZXhlYyhJdCksZnM9X28ubGVuZ3RoLE51PWppLmxlbmd0aDtpZihkbil7Zm9yKFkoQ2UpLmlzbz0hMCxLZT0wLG10PWZzO0tlPG10O0tlKyspaWYoX29bS2VdWzFdLmV4ZWMoZG5bMV0pKXtpaT1f''@;'; put 'put ''b1tLZV1bMF0scW49ITEhPT1fb1tLZV1bMl07YnJlYWt9aWYobnVsbD09aWkpcmV0dXJuIHZvaWQoQ2UuX2lzVmFsaWQ9ITEpO2lmKGRuWzNdKXtmb3IoS2U9MCxtdD1OdTtLZTxtdDtLZSsrKWlmKGppW0tlXVsxXS5leGVjKGRuWzNdKSl7SWE9KGRuWzJdfHwiICIpK2ppW0tlXVswXTticmVh''@;'; put 'put ''a31pZihudWxsPT1JYSlyZXR1cm4gdm9pZChDZS5faXNWYWxpZD0hMSl9aWYoIXFuJiZudWxsIT1JYSlyZXR1cm4gdm9pZChDZS5faXNWYWxpZD0hMSk7aWYoZG5bNF0pe2lmKCF0by5leGVjKGRuWzRdKSlyZXR1cm4gdm9pZChDZS5faXNWYWxpZD0hMSk7U289IloifUNlLl9mPWlpKyhJYXx8''@;'; put 'put ''IiIpKyhTb3x8IiIpLGY0KENlKX1lbHNlIENlLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIEcwKENlKXt2YXIgS2U9cGFyc2VJbnQoQ2UsMTApO3JldHVybiBLZTw9NDk/MmUzK0tlOktlPD05OTk/MTkwMCtLZTpLZX1mdW5jdGlvbiBNcyhDZSl7dmFyIG10LEtlPXpsLmV4ZWMoZnVuY3Rpb24gJDAo''@;'; put 'put ''Q2Upe3JldHVybiBDZS5yZXBsYWNlKC9cKFteKCldKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIil9KENlLl9pKSk7aWYoS2Upe2lmKG10PWZ1bmN0aW9uIFhoKENlLEtlLG10LEl0LGRuLHFu''@;'; put 'put ''KXt2YXIgaWk9W0cwKENlKSxsYS5pbmRleE9mKEtlKSxwYXJzZUludChtdCwxMCkscGFyc2VJbnQoSXQsMTApLHBhcnNlSW50KGRuLDEwKV07cmV0dXJuIHFuJiZpaS5wdXNoKHBhcnNlSW50KHFuLDEwKSksaWl9KEtlWzRdLEtlWzNdLEtlWzJdLEtlWzVdLEtlWzZdLEtlWzddKSwhZnVuY3Rp''@;'; put 'put ''b24gTm8oQ2UsS2UsbXQpe3JldHVybiFDZXx8T2wuaW5kZXhPZihDZSk9PT1uZXcgRGF0ZShLZVswXSxLZVsxXSxLZVsyXSkuZ2V0RGF5KCl8fChZKG10KS53ZWVrZGF5TWlzbWF0Y2g9ITAsbXQuX2lzVmFsaWQ9ITEsITEpfShLZVsxXSxtdCxDZSkpcmV0dXJuO0NlLl9hPW10LENlLl90em09''@;'; put 'put ''ZnVuY3Rpb24gcWkoQ2UsS2UsbXQpe2lmKENlKXJldHVybiBDYVtDZV07aWYoS2UpcmV0dXJuIDA7dmFyIEl0PXBhcnNlSW50KG10LDEwKSxkbj1JdCUxMDA7cmV0dXJuKEl0LWRuKS8xMDAqNjArZG59KEtlWzhdLEtlWzldLEtlWzEwXSksQ2UuX2Q9SnIuYXBwbHkobnVsbCxDZS5fYSksQ2Uu''@;'; put 'put ''X2Quc2V0VVRDTWludXRlcyhDZS5fZC5nZXRVVENNaW51dGVzKCktQ2UuX3R6bSksWShDZSkucmZjMjgyMj0hMH1lbHNlIENlLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIG9vKENlLEtlLG10KXtyZXR1cm4gQ2U/P0tlPz9tdH1mdW5jdGlvbiBfbChDZSl7dmFyIEtlLG10LGRuLHFuLGlpLEl0PVtd''@;'; put 'put ''O2lmKCFDZS5fZCl7Zm9yKGRuPWZ1bmN0aW9uIGE1KENlKXt2YXIgS2U9bmV3IERhdGUoXy5ub3coKSk7cmV0dXJuIENlLl91c2VVVEM/W0tlLmdldFVUQ0Z1bGxZZWFyKCksS2UuZ2V0VVRDTW9udGgoKSxLZS5nZXRVVENEYXRlKCldOltLZS5nZXRGdWxsWWVhcigpLEtlLmdldE1vbnRoKCks''@;'; put 'put ''S2UuZ2V0RGF0ZSgpXX0oQ2UpLENlLl93JiZudWxsPT1DZS5fYVtjbl0mJm51bGw9PUNlLl9hW2hpXSYmZnVuY3Rpb24gdGgoQ2Upe3ZhciBLZSxtdCxJdCxkbixxbixpaSxJYSxTbyxmcztudWxsIT0oS2U9Q2UuX3cpLkdHfHxudWxsIT1LZS5XfHxudWxsIT1LZS5FPyhxbj0xLGlpPTQsbXQ9''@;'; put 'put ''b28oS2UuR0csQ2UuX2FbenRdLEx1KHNsKCksMSw0KS55ZWFyKSxJdD1vbyhLZS5XLDEpLCgoZG49b28oS2UuRSwxKSk8MXx8ZG4+NykmJihTbz0hMCkpOihxbj1DZS5fbG9jYWxlLl93ZWVrLmRvdyxpaT1DZS5fbG9jYWxlLl93ZWVrLmRveSxmcz1MdShzbCgpLHFuLGlpKSxtdD1vbyhLZS5n''@;'; put 'put ''ZyxDZS5fYVt6dF0sZnMueWVhciksSXQ9b28oS2Uudyxmcy53ZWVrKSxudWxsIT1LZS5kPygoZG49S2UuZCk8MHx8ZG4+NikmJihTbz0hMCk6bnVsbCE9S2UuZT8oZG49S2UuZStxbiwoS2UuZTwwfHxLZS5lPjYpJiYoU289ITApKTpkbj1xbiksSXQ8MXx8SXQ+UHIobXQscW4saWkpP1koQ2Up''@;'; put 'put ''Ll9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPVNvP1koQ2UpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KElhPUhhKG10LEl0LGRuLHFuLGlpKSxDZS5fYVt6dF09SWEueWVhcixDZS5fZGF5T2ZZZWFyPUlhLmRheU9mWWVhcil9KENlKSxudWxsIT1DZS5fZGF5T2ZZZWFyJiYoaWk9b28oQ2UuX2FbenRd''@;'; put 'put ''LGRuW3p0XSksKENlLl9kYXlPZlllYXI+dnIoaWkpfHwwPT09Q2UuX2RheU9mWWVhcikmJihZKENlKS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLG10PUpyKGlpLDAsQ2UuX2RheU9mWWVhciksQ2UuX2FbaGldPW10LmdldFVUQ01vbnRoKCksQ2UuX2FbY25dPW10LmdldFVUQ0RhdGUoKSksS2U9''@;'; put 'put ''MDtLZTwzJiZudWxsPT1DZS5fYVtLZV07KytLZSlDZS5fYVtLZV09SXRbS2VdPWRuW0tlXTtmb3IoO0tlPDc7S2UrKylDZS5fYVtLZV09SXRbS2VdPW51bGw9PUNlLl9hW0tlXT8yPT09S2U/MTowOkNlLl9hW0tlXTsyND09PUNlLl9hW2ZuXSYmMD09PUNlLl9hW0lpXSYmMD09PUNlLl9hW1h0''@;'; put 'put ''XSYmMD09PUNlLl9hW2VuXSYmKENlLl9uZXh0RGF5PSEwLENlLl9hW2ZuXT0wKSxDZS5fZD0oQ2UuX3VzZVVUQz9KcjpWdCkuYXBwbHkobnVsbCxJdCkscW49Q2UuX3VzZVVUQz9DZS5fZC5nZXRVVENEYXkoKTpDZS5fZC5nZXREYXkoKSxudWxsIT1DZS5fdHptJiZDZS5fZC5zZXRVVENNaW51''@;'; put 'put ''dGVzKENlLl9kLmdldFVUQ01pbnV0ZXMoKS1DZS5fdHptKSxDZS5fbmV4dERheSYmKENlLl9hW2ZuXT0yNCksQ2UuX3cmJnR5cGVvZiBDZS5fdy5kPCJ1IiYmQ2UuX3cuZCE9PXFuJiYoWShDZSkud2Vla2RheU1pc21hdGNoPSEwKX19ZnVuY3Rpb24gZjQoQ2Upe2lmKENlLl9mIT09Xy5JU09f''@;'; put 'put ''ODYwMSlpZihDZS5fZiE9PV8uUkZDXzI4MjIpe0NlLl9hPVtdLFkoQ2UpLmVtcHR5PSEwO3ZhciBtdCxJdCxkbixxbixpaSxmcyxOdSxLZT0iIitDZS5faSxJYT1LZS5sZW5ndGgsU289MDtmb3IoTnU9KGRuPW90KENlLl9mLENlLl9sb2NhbGUpLm1hdGNoKG0pfHxbXSkubGVuZ3RoLG10PTA7''@;'; put 'put ''bXQ8TnU7bXQrKykoSXQ9KEtlLm1hdGNoKHN0KHFuPWRuW210XSxDZSkpfHxbXSlbMF0pJiYoKGlpPUtlLnN1YnN0cigwLEtlLmluZGV4T2YoSXQpKSkubGVuZ3RoPjAmJlkoQ2UpLnVudXNlZElucHV0LnB1c2goaWkpLEtlPUtlLnNsaWNlKEtlLmluZGV4T2YoSXQpK0l0Lmxlbmd0aCksU28r''@;'; put 'put ''PUl0Lmxlbmd0aCksdGVbcW5dPyhJdD9ZKENlKS5lbXB0eT0hMTpZKENlKS51bnVzZWRUb2tlbnMucHVzaChxbiksam4ocW4sSXQsQ2UpKTpDZS5fc3RyaWN0JiYhSXQmJlkoQ2UpLnVudXNlZFRva2Vucy5wdXNoKHFuKTtZKENlKS5jaGFyc0xlZnRPdmVyPUlhLVNvLEtlLmxlbmd0aD4wJiZZ''@;'; put 'put ''KENlKS51bnVzZWRJbnB1dC5wdXNoKEtlKSxDZS5fYVtmbl08PTEyJiYhMD09PVkoQ2UpLmJpZ0hvdXImJkNlLl9hW2ZuXT4wJiYoWShDZSkuYmlnSG91cj12b2lkIDApLFkoQ2UpLnBhcnNlZERhdGVQYXJ0cz1DZS5fYS5zbGljZSgwKSxZKENlKS5tZXJpZGllbT1DZS5fbWVyaWRpZW0sQ2Uu''@;'; put 'put ''X2FbZm5dPWZ1bmN0aW9uIHA0KENlLEtlLG10KXt2YXIgSXQ7cmV0dXJuIG51bGw9PW10P0tlOm51bGwhPUNlLm1lcmlkaWVtSG91cj9DZS5tZXJpZGllbUhvdXIoS2UsbXQpOihudWxsIT1DZS5pc1BNJiYoKEl0PUNlLmlzUE0obXQpKSYmS2U8MTImJihLZSs9MTIpLCFJdCYmMTI9PT1LZSYm''@;'; put 'put ''KEtlPTApKSxLZSl9KENlLl9sb2NhbGUsQ2UuX2FbZm5dLENlLl9tZXJpZGllbSksbnVsbCE9PShmcz1ZKENlKS5lcmEpJiYoQ2UuX2FbenRdPUNlLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGZzLENlLl9hW3p0XSkpLF9sKENlKSxWYShDZSl9ZWxzZSBNcyhDZSk7ZWxzZSBUYShDZSl9ZnVu''@;'; put 'put ''Y3Rpb24gbHYoQ2Upe3ZhciBLZT1DZS5faSxtdD1DZS5fZjtyZXR1cm4gQ2UuX2xvY2FsZT1DZS5fbG9jYWxlfHx0YShDZS5fbCksbnVsbD09PUtlfHx2b2lkIDA9PT1tdCYmIiI9PT1LZT9KKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBLZSYmKENlLl9pPUtlPUNlLl9sb2Nh''@;'; put 'put ''bGUucHJlcGFyc2UoS2UpKSxfZShLZSk/bmV3IG1lKFZhKEtlKSk6KE4oS2UpP0NlLl9kPUtlOkIobXQpP2Z1bmN0aW9uIEswKENlKXt2YXIgS2UsbXQsSXQsZG4scW4saWksSWE9ITEsU289Q2UuX2YubGVuZ3RoO2lmKDA9PT1TbylyZXR1cm4gWShDZSkuaW52YWxpZEZvcm1hdD0hMCx2b2lk''@;'; put 'put ''KENlLl9kPW5ldyBEYXRlKE5hTikpO2Zvcihkbj0wO2RuPFNvO2RuKyspcW49MCxpaT0hMSxLZT1sZSh7fSxDZSksbnVsbCE9Q2UuX3VzZVVUQyYmKEtlLl91c2VVVEM9Q2UuX3VzZVVUQyksS2UuX2Y9Q2UuX2ZbZG5dLGY0KEtlKSxlZShLZSkmJihpaT0hMCkscW4rPVkoS2UpLmNoYXJzTGVm''@;'; put 'put ''dE92ZXIscW4rPTEwKlkoS2UpLnVudXNlZFRva2Vucy5sZW5ndGgsWShLZSkuc2NvcmU9cW4sSWE/cW48SXQmJihJdD1xbixtdD1LZSk6KG51bGw9PUl0fHxxbjxJdHx8aWkpJiYoSXQ9cW4sbXQ9S2UsaWkmJihJYT0hMCkpO0soQ2UsbXR8fEtlKX0oQ2UpOm10P2Y0KENlKTpmdW5jdGlvbiBS''@;'; put 'put ''dyhDZSl7dmFyIEtlPUNlLl9pO08oS2UpP0NlLl9kPW5ldyBEYXRlKF8ubm93KCkpOk4oS2UpP0NlLl9kPW5ldyBEYXRlKEtlLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiBLZT9mdW5jdGlvbiByYShDZSl7dmFyIEtlPVBjLmV4ZWMoQ2UuX2kpO251bGw9PT1LZT8oVGEoQ2UpLCExPT09''@;'; put 'put ''Q2UuX2lzVmFsaWQmJihkZWxldGUgQ2UuX2lzVmFsaWQsTXMoQ2UpLCExPT09Q2UuX2lzVmFsaWQmJihkZWxldGUgQ2UuX2lzVmFsaWQsQ2UuX3N0cmljdD9DZS5faXNWYWxpZD0hMTpfLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKENlKSkpKTpDZS5fZD1uZXcgRGF0ZSgrS2VbMV0pfShDZSk6''@;'; put 'put ''QihLZSk/KENlLl9hPUwoS2Uuc2xpY2UoMCksZnVuY3Rpb24obXQpe3JldHVybiBwYXJzZUludChtdCwxMCl9KSxfbChDZSkpOncoS2UpP2Z1bmN0aW9uIGd1KENlKXtpZighQ2UuX2Qpe3ZhciBLZT1udChDZS5faSk7Q2UuX2E9TChbS2UueWVhcixLZS5tb250aCx2b2lkIDA9PT1LZS5kYXk/''@;'; put 'put ''S2UuZGF0ZTpLZS5kYXksS2UuaG91cixLZS5taW51dGUsS2Uuc2Vjb25kLEtlLm1pbGxpc2Vjb25kXSxmdW5jdGlvbihJdCl7cmV0dXJuIEl0JiZwYXJzZUludChJdCwxMCl9KSxfbChDZSl9fShDZSk6eihLZSk/Q2UuX2Q9bmV3IERhdGUoS2UpOl8uY3JlYXRlRnJvbUlucHV0RmFsbGJhY2so''@;'; put 'put ''Q2UpfShDZSksZWUoQ2UpfHwoQ2UuX2Q9bnVsbCksQ2UpKX1mdW5jdGlvbiBjdihDZSxLZSxtdCxJdCxkbil7dmFyIHFuPXt9O3JldHVybighMD09PUtlfHwhMT09PUtlKSYmKEl0PUtlLEtlPXZvaWQgMCksKCEwPT09bXR8fCExPT09bXQpJiYoSXQ9bXQsbXQ9dm9pZCAwKSwodyhDZSkmJkYo''@;'; put 'put ''Q2UpfHxCKENlKSYmMD09PUNlLmxlbmd0aCkmJihDZT12b2lkIDApLHFuLl9pc0FNb21lbnRPYmplY3Q9ITAscW4uX3VzZVVUQz1xbi5faXNVVEM9ZG4scW4uX2w9bXQscW4uX2k9Q2UscW4uX2Y9S2UscW4uX3N0cmljdD1JdCxmdW5jdGlvbiBGYyhDZSl7dmFyIEtlPW5ldyBtZShWYShsdihD''@;'; put 'put ''ZSkpKTtyZXR1cm4gS2UuX25leHREYXkmJihLZS5hZGQoMSwiZCIpLEtlLl9uZXh0RGF5PXZvaWQgMCksS2V9KHFuKX1mdW5jdGlvbiBzbChDZSxLZSxtdCxJdCl7cmV0dXJuIGN2KENlLEtlLG10LEl0LCExKX1fLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPVNlKCJ2YWx1ZSBwcm92aWRlZCBp''@;'; put 'put ''cyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0''@;'; put 'put ''ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4iLGZ1bmN0aW9uKENlKXtDZS5fZD1uZXcgRGF0ZShDZS5faSsoQ2UuX3VzZVVUQz8iIFVUQyI6IiIpKX0p''@;'; put 'put ''LF8uSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LF8uUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBJMz1TZSgibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIENlPXNsLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJkNlLmlzVmFsaWQoKT9DZTx0aGlzP3RoaXM6Q2U6SigpfSksTHc9U2UoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9t''@;'; put 'put ''ZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBDZT1zbC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZDZS5pc1ZhbGlkKCk/Q2U+dGhpcz90aGlzOkNlOkooKX0pO2Z1bmN0aW9uIG5oKENlLEtlKXt2YXIgbXQs''@;'; put 'put ''SXQ7aWYoMT09PUtlLmxlbmd0aCYmQihLZVswXSkmJihLZT1LZVswXSksIUtlLmxlbmd0aClyZXR1cm4gc2woKTtmb3IobXQ9S2VbMF0sSXQ9MTtJdDxLZS5sZW5ndGg7KytJdCkoIUtlW0l0XS5pc1ZhbGlkKCl8fEtlW0l0XVtDZV0obXQpKSYmKG10PUtlW0l0XSk7cmV0dXJuIG10fXZhciBm''@;'; put 'put ''aT1bInllYXIiLCJxdWFydGVyIiwibW9udGgiLCJ3ZWVrIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIl07ZnVuY3Rpb24gcGYoQ2Upe3ZhciBLZT1udChDZSksbXQ9S2UueWVhcnx8MCxJdD1LZS5xdWFydGVyfHwwLGRuPUtlLm1vbnRofHwwLHFuPUtlLndl''@;'; put 'put ''ZWt8fEtlLmlzb1dlZWt8fDAsaWk9S2UuZGF5fHwwLElhPUtlLmhvdXJ8fDAsU289S2UubWludXRlfHwwLGZzPUtlLnNlY29uZHx8MCxOdT1LZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uIG81KENlKXt2YXIgS2UsSXQsbXQ9ITEsZG49ZmkubGVuZ3RoO2ZvcihLZSBp''@;'; put 'put ''biBDZSlpZihQKENlLEtlKSYmKC0xPT09V2kuY2FsbChmaSxLZSl8fG51bGwhPUNlW0tlXSYmaXNOYU4oQ2VbS2VdKSkpcmV0dXJuITE7Zm9yKEl0PTA7SXQ8ZG47KytJdClpZihDZVtmaVtJdF1dKXtpZihtdClyZXR1cm4hMTtwYXJzZUZsb2F0KENlW2ZpW0l0XV0pIT09VHQoQ2VbZmlbSXRd''@;'; put 'put ''XSkmJihtdD0hMCl9cmV0dXJuITB9KEtlKSx0aGlzLl9taWxsaXNlY29uZHM9K051KzFlMypmcys2ZTQqU28rMWUzKklhKjYwKjYwLHRoaXMuX2RheXM9K2lpKzcqcW4sdGhpcy5fbW9udGhzPStkbiszKkl0KzEyKm10LHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXRhKCksdGhpcy5fYnVi''@;'; put 'put ''YmxlKCl9ZnVuY3Rpb24gbDUoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIHBmfWZ1bmN0aW9uIGc0KENlKXtyZXR1cm4gQ2U8MD8tMSpNYXRoLnJvdW5kKC0xKkNlKTpNYXRoLnJvdW5kKENlKX1mdW5jdGlvbiBJMShDZSxLZSl7c2UoQ2UsMCwwLGZ1bmN0aW9uKCl7dmFyIG10PXRoaXMudXRj''@;'; put 'put ''T2Zmc2V0KCksSXQ9IisiO3JldHVybiBtdDwwJiYobXQ9LW10LEl0PSItIiksSXQrRSh+fihtdC82MCksMikrS2UrRSh+fm10JTYwLDIpfSl9STEoIloiLCI6IiksSTEoIlpaIiwiIiksUm4oIloiLFJpKSxSbigiWloiLFJpKSxodChbIloiLCJaWiJdLGZ1bmN0aW9uKENlLEtlLG10KXttdC5f''@;'; put 'put ''dXNlVVRDPSEwLG10Ll90em09bGQoUmksQ2UpfSk7dmFyIHV2PS8oW1wrXC1dfFxkXGQpL2dpO2Z1bmN0aW9uIGxkKENlLEtlKXt2YXIgZG4scW4sbXQ9KEtlfHwiIikubWF0Y2goQ2UpO3JldHVybiBudWxsPT09bXQ/bnVsbDowPT09KHFuPTYwKihkbj0oKG10W210Lmxlbmd0aC0xXXx8W10p''@;'; put 'put ''KyIiKS5tYXRjaCh1dil8fFsiLSIsMCwwXSlbMV0rVHQoZG5bMl0pKT8wOiIrIj09PWRuWzBdP3FuOi1xbn1mdW5jdGlvbiBUNihDZSxLZSl7dmFyIG10LEl0O3JldHVybiBLZS5faXNVVEM/KG10PUtlLmNsb25lKCksSXQ9KF9lKENlKXx8TihDZSk/Q2UudmFsdWVPZigpOnNsKENlKS52YWx1''@;'; put 'put ''ZU9mKCkpLW10LnZhbHVlT2YoKSxtdC5fZC5zZXRUaW1lKG10Ll9kLnZhbHVlT2YoKStJdCksXy51cGRhdGVPZmZzZXQobXQsITEpLG10KTpzbChDZSkubG9jYWwoKX1mdW5jdGlvbiBtdShDZSl7cmV0dXJuLU1hdGgucm91bmQoQ2UuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24g''@;'; put 'put ''XzAoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQyYmMD09PXRoaXMuX29mZnNldH1fLnVwZGF0ZU9mZnNldD1mdW5jdGlvbigpe307dmFyIEE2PS9eKC18XCspPyg/OihcZCopWy4gXSk/KFxkKyk6KFxkKykoPzo6KFxkKykoXC5cZCopPyk/JC8sZTI9L14oLXxcKyk/UCg/''@;'; put 'put ''OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO2Z1bmN0aW9uIEps''@;'; put 'put ''KENlLEtlKXt2YXIgZG4scW4saWksbXQ9Q2UsSXQ9bnVsbDtyZXR1cm4gbDUoQ2UpP210PXttczpDZS5fbWlsbGlzZWNvbmRzLGQ6Q2UuX2RheXMsTTpDZS5fbW9udGhzfTp6KENlKXx8IWlzTmFOKCtDZSk/KG10PXt9LEtlP210W0tlXT0rQ2U6bXQubWlsbGlzZWNvbmRzPStDZSk6KEl0PUE2''@;'; put 'put ''LmV4ZWMoQ2UpKT8oZG49Ii0iPT09SXRbMV0/LTE6MSxtdD17eTowLGQ6VHQoSXRbY25dKSpkbixoOlR0KEl0W2ZuXSkqZG4sbTpUdChJdFtJaV0pKmRuLHM6VHQoSXRbWHRdKSpkbixtczpUdChnNCgxZTMqSXRbZW5dKSkqZG59KTooSXQ9ZTIuZXhlYyhDZSkpP210PXt5OlIxKEl0WzJdLGRu''@;'; put 'put ''PSItIj09PUl0WzFdPy0xOjEpLE06UjEoSXRbM10sZG4pLHc6UjEoSXRbNF0sZG4pLGQ6UjEoSXRbNV0sZG4pLGg6UjEoSXRbNl0sZG4pLG06UjEoSXRbN10sZG4pLHM6UjEoSXRbOF0sZG4pfTpudWxsPT1tdD9tdD17fToib2JqZWN0Ij09dHlwZW9mIG10JiYoImZyb20iaW4gbXR8fCJ0byJp''@;'; put 'put ''biBtdCkmJihpaT1mdW5jdGlvbiB0cyhDZSxLZSl7dmFyIG10O3JldHVybiBDZS5pc1ZhbGlkKCkmJktlLmlzVmFsaWQoKT8oS2U9VDYoS2UsQ2UpLENlLmlzQmVmb3JlKEtlKT9tdD1JMChDZSxLZSk6KChtdD1JMChLZSxDZSkpLm1pbGxpc2Vjb25kcz0tbXQubWlsbGlzZWNvbmRzLG10Lm1v''@;'; put 'put ''bnRocz0tbXQubW9udGhzKSxtdCk6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX0oc2wobXQuZnJvbSksc2wobXQudG8pKSwobXQ9e30pLm1zPWlpLm1pbGxpc2Vjb25kcyxtdC5NPWlpLm1vbnRocykscW49bmV3IHBmKG10KSxsNShDZSkmJlAoQ2UsIl9sb2NhbGUiKSYmKHFuLl9sb2NhbGU9''@;'; put 'put ''Q2UuX2xvY2FsZSksbDUoQ2UpJiZQKENlLCJfaXNWYWxpZCIpJiYocW4uX2lzVmFsaWQ9Q2UuX2lzVmFsaWQpLHFufWZ1bmN0aW9uIFIxKENlLEtlKXt2YXIgbXQ9Q2UmJnBhcnNlRmxvYXQoQ2UucmVwbGFjZSgiLCIsIi4iKSk7cmV0dXJuKGlzTmFOKG10KT8wOm10KSpLZX1mdW5jdGlvbiBJ''@;'; put 'put ''MChDZSxLZSl7dmFyIG10PXt9O3JldHVybiBtdC5tb250aHM9S2UubW9udGgoKS1DZS5tb250aCgpKzEyKihLZS55ZWFyKCktQ2UueWVhcigpKSxDZS5jbG9uZSgpLmFkZChtdC5tb250aHMsIk0iKS5pc0FmdGVyKEtlKSYmLS1tdC5tb250aHMsbXQubWlsbGlzZWNvbmRzPStLZS0rQ2UuY2xv''@;'; put 'put ''bmUoKS5hZGQobXQubW9udGhzLCJNIiksbXR9ZnVuY3Rpb24gdDIoQ2UsS2Upe3JldHVybiBmdW5jdGlvbihtdCxJdCl7dmFyIHFuO3JldHVybiBudWxsIT09SXQmJiFpc05hTigrSXQpJiYoVihLZSwibW9tZW50KCkuIitLZSsiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVh''@;'; put 'put ''c2UgdXNlIG1vbWVudCgpLiIrS2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxxbj1tdCxtdD1JdCxJdD1xbiksTDModGhpcyxKbChtdCxJdCksQ2UpLHRoaXN9''@;'; put 'put ''fWZ1bmN0aW9uIEwzKENlLEtlLG10LEl0KXt2YXIgZG49S2UuX21pbGxpc2Vjb25kcyxxbj1nNChLZS5fZGF5cyksaWk9ZzQoS2UuX21vbnRocyk7Q2UuaXNWYWxpZCgpJiYoSXQ9SXQ/PyEwLGlpJiZwdShDZSxRcihDZSwiTW9udGgiKStpaSptdCkscW4mJlZpKENlLCJEYXRlIixRcihDZSwi''@;'; put 'put ''RGF0ZSIpK3FuKm10KSxkbiYmQ2UuX2Quc2V0VGltZShDZS5fZC52YWx1ZU9mKCkrZG4qbXQpLEl0JiZfLnVwZGF0ZU9mZnNldChDZSxxbnx8aWkpKX1KbC5mbj1wZi5wcm90b3R5cGUsSmwuaW52YWxpZD1mdW5jdGlvbiB0MCgpe3JldHVybiBKbChOYU4pfTt2YXIgazY9dDIoMSwiYWRkIiks''@;'; put 'put ''dTU9dDIoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gTzMoQ2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2V8fENlIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIEpzKENlKXtyZXR1cm4gX2UoQ2UpfHxOKENlKXx8TzMoQ2UpfHx6KENlKXx8ZnVuY3Rpb24gRncoQ2Upe3ZhciBLZT1CKENl''@;'; put 'put ''KSxtdD0hMTtyZXR1cm4gS2UmJihtdD0wPT09Q2UuZmlsdGVyKGZ1bmN0aW9uKEl0KXtyZXR1cm4heihJdCkmJk8zKENlKX0pLmxlbmd0aCksS2UmJm10fShDZSl8fGZ1bmN0aW9uIE5uKENlKXt2YXIgZG4sS2U9dyhDZSkmJiFGKENlKSxtdD0hMSxJdD1bInllYXJzIiwieWVhciIsInkiLCJt''@;'; put 'put ''b250aHMiLCJtb250aCIsIk0iLCJkYXlzIiwiZGF5IiwiZCIsImRhdGVzIiwiZGF0ZSIsIkQiLCJob3VycyIsImhvdXIiLCJoIiwibWludXRlcyIsIm1pbnV0ZSIsIm0iLCJzZWNvbmRzIiwic2Vjb25kIiwicyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibXMiXSxpaT1JdC5sZW5n''@;'; put 'put ''dGg7Zm9yKGRuPTA7ZG48aWk7ZG4rPTEpbXQ9bXR8fFAoQ2UsSXRbZG5dKTtyZXR1cm4gS2UmJm10fShDZSl8fG51bGw9PUNlfWZ1bmN0aW9uIFAzKENlLEtlKXtpZihDZS5kYXRlKCk8S2UuZGF0ZSgpKXJldHVybi1QMyhLZSxDZSk7dmFyIG10PTEyKihLZS55ZWFyKCktQ2UueWVhcigpKSso''@;'; put 'put ''S2UubW9udGgoKS1DZS5tb250aCgpKSxJdD1DZS5jbG9uZSgpLmFkZChtdCwibW9udGhzIik7cmV0dXJuLShtdCsoS2UtSXQ8MD8oS2UtSXQpLyhJdC1DZS5jbG9uZSgpLmFkZChtdC0xLCJtb250aHMiKSk6KEtlLUl0KS8oQ2UuY2xvbmUoKS5hZGQobXQrMSwibW9udGhzIiktSXQpKSl8fDB9''@;'; put 'put ''ZnVuY3Rpb24gS2EoQ2Upe3ZhciBLZTtyZXR1cm4gdm9pZCAwPT09Q2U/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0oS2U9dGEoQ2UpKSYmKHRoaXMuX2xvY2FsZT1LZSksdGhpcyl9Xy5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsXy5kZWZhdWx0Rm9ybWF0VXRjPSJZ''@;'; put 'put ''WVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgVnI9U2UoIm1vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5n''@;'; put 'put ''ZSBsYW5ndWFnZXMuIixmdW5jdGlvbihDZSl7cmV0dXJuIHZvaWQgMD09PUNlP3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKENlKX0pO2Z1bmN0aW9uIGJmKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIga2k9NmU0LHk0PTYwKmtpLEVyPTM1MDYzMjgqeTQ7ZnVuY3Rpb24gbGwoQ2Us''@;'; put 'put ''S2Upe3JldHVybihDZSVLZStLZSklS2V9ZnVuY3Rpb24gVm8oQ2UsS2UsbXQpe3JldHVybiBDZTwxMDAmJkNlPj0wP25ldyBEYXRlKENlKzQwMCxLZSxtdCktRXI6bmV3IERhdGUoQ2UsS2UsbXQpLnZhbHVlT2YoKX1mdW5jdGlvbiB4YyhDZSxLZSxtdCl7cmV0dXJuIENlPDEwMCYmQ2U+PTA/''@;'; put 'put ''RGF0ZS5VVEMoQ2UrNDAwLEtlLG10KS1FcjpEYXRlLlVUQyhDZSxLZSxtdCl9ZnVuY3Rpb24gRjMoQ2UsS2Upe3JldHVybiBLZS5lcmFzQWJiclJlZ2V4KENlKX1mdW5jdGlvbiBoYygpe3ZhciBkbixxbixpaSxJYSxTbyxDZT1bXSxLZT1bXSxtdD1bXSxJdD1bXSxmcz10aGlzLmVyYXMoKTtm''@;'; put 'put ''b3IoZG49MCxxbj1mcy5sZW5ndGg7ZG48cW47KytkbilpaT1yaShmc1tkbl0ubmFtZSksSWE9cmkoZnNbZG5dLmFiYnIpLFNvPXJpKGZzW2RuXS5uYXJyb3cpLEtlLnB1c2goaWkpLENlLnB1c2goSWEpLG10LnB1c2goU28pLEl0LnB1c2goaWkpLEl0LnB1c2goSWEpLEl0LnB1c2goU28pO3Ro''@;'; put 'put ''aXMuX2VyYXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrSXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYW1lUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzQWJiclJlZ2V4PW5ldyBSZWdFeHAoIl4oIitDZS5qb2luKCJ8IikrIikiLCJp''@;'; put 'put ''IiksdGhpcy5fZXJhc05hcnJvd1JlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gY2QoQ2UsS2Upe3NlKDAsW0NlLENlLmxlbmd0aF0sMCxLZSl9ZnVuY3Rpb24gU3YoQ2UsS2UsbXQsSXQsZG4pe3ZhciBxbjtyZXR1cm4gbnVsbD09Q2U/THUodGhp''@;'; put 'put ''cyxJdCxkbikueWVhcjooS2U+KHFuPVByKENlLEl0LGRuKSkmJihLZT1xbiksWXcuY2FsbCh0aGlzLENlLEtlLG10LEl0LGRuKSl9ZnVuY3Rpb24gWXcoQ2UsS2UsbXQsSXQsZG4pe3ZhciBxbj1IYShDZSxLZSxtdCxJdCxkbiksaWk9SnIocW4ueWVhciwwLHFuLmRheU9mWWVhcik7cmV0dXJu''@;'; put 'put ''IHRoaXMueWVhcihpaS5nZXRVVENGdWxsWWVhcigpKSx0aGlzLm1vbnRoKGlpLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShpaS5nZXRVVENEYXRlKCkpLHRoaXN9c2UoIk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTiIsMCwwLCJlcmFBYmJyIiksc2UoIk5OTiIsMCwwLCJlcmFBYmJyIiksc2Uo''@;'; put 'put ''Ik5OTk4iLDAsMCwiZXJhTmFtZSIpLHNlKCJOTk5OTiIsMCwwLCJlcmFOYXJyb3ciKSxzZSgieSIsWyJ5IiwxXSwieW8iLCJlcmFZZWFyIiksc2UoInkiLFsieXkiLDJdLDAsImVyYVllYXIiKSxzZSgieSIsWyJ5eXkiLDNdLDAsImVyYVllYXIiKSxzZSgieSIsWyJ5eXl5Iiw0XSwwLCJlcmFZ''@;'; put 'put ''ZWFyIiksUm4oIk4iLEYzKSxSbigiTk4iLEYzKSxSbigiTk5OIixGMyksUm4oIk5OTk4iLGZ1bmN0aW9uIFp3KENlLEtlKXtyZXR1cm4gS2UuZXJhc05hbWVSZWdleChDZSl9KSxSbigiTk5OTk4iLGZ1bmN0aW9uIEg2KENlLEtlKXtyZXR1cm4gS2UuZXJhc05hcnJvd1JlZ2V4KENlKX0pLGh0''@;'; put 'put ''KFsiTiIsIk5OIiwiTk5OIiwiTk5OTiIsIk5OTk5OIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe3ZhciBkbj1tdC5fbG9jYWxlLmVyYXNQYXJzZShDZSxJdCxtdC5fc3RyaWN0KTtkbj9ZKG10KS5lcmE9ZG46WShtdCkuaW52YWxpZEVyYT1DZX0pLFJuKCJ5IixjaSksUm4oInl5IixjaSksUm4o''@;'; put 'put ''Inl5eSIsY2kpLFJuKCJ5eXl5IixjaSksUm4oInlvIixmdW5jdGlvbiBIMyhDZSxLZSl7cmV0dXJuIEtlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4fHxjaX0pLGh0KFsieSIsInl5IiwieXl5IiwieXl5eSJdLHp0KSxodChbInlvIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe3ZhciBkbjttdC5fbG9j''@;'; put 'put ''YWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4JiYoZG49Q2UubWF0Y2gobXQuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkpLEtlW3p0XT1tdC5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2U/bXQuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKENlLGRuKTpwYXJzZUludChDZSwxMCl9''@;'; put 'put ''KSxzZSgwLFsiZ2ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pLHNlKDAsWyJHRyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSksY2QoImdnZ2ciLCJ3ZWVrWWVhciIpLGNkKCJnZ2dnZyIsIndlZWtZZWFyIiksY2Qo''@;'; put 'put ''IkdHR0ciLCJpc29XZWVrWWVhciIpLGNkKCJHR0dHRyIsImlzb1dlZWtZZWFyIiksUm4oIkciLFF0KSxSbigiZyIsUXQpLFJuKCJHRyIsdHQsTXQpLFJuKCJnZyIsdHQsTXQpLFJuKCJHR0dHIixSdCxpdCksUm4oImdnZ2ciLFJ0LGl0KSxSbigiR0dHR0ciLFB0LCRlKSxSbigiZ2dnZ2ciLFB0''@;'; put 'put ''LCRlKSx4dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXtLZVtJdC5zdWJzdHIoMCwyKV09VHQoQ2UpfSkseHQoWyJnZyIsIkdHIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe0tlW0l0XT1fLnBhcnNlVHdvRGlnaXRZZWFyKENlKX0pLHNlKCJR''@;'; put 'put ''IiwwLCJRbyIsInF1YXJ0ZXIiKSxSbigiUSIseXQpLGh0KCJRIixmdW5jdGlvbihDZSxLZSl7S2VbaGldPTMqKFR0KENlKS0xKX0pLHNlKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksUm4oIkQiLHR0LE9yKSxSbigiREQiLHR0LE10KSxSbigiRG8iLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4g''@;'; put 'put ''Q2U/S2UuX2RheU9mTW9udGhPcmRpbmFsUGFyc2V8fEtlLl9vcmRpbmFsUGFyc2U6S2UuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSksaHQoWyJEIiwiREQiXSxjbiksaHQoIkRvIixmdW5jdGlvbihDZSxLZSl7S2VbY25dPVR0KENlLm1hdGNoKHR0KVswXSl9KTt2YXIgcTA9ZWko''@;'; put 'put ''IkRhdGUiLCEwKTtzZSgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksUm4oIkRERCIscXQpLFJuKCJEREREIixEdCksaHQoWyJEREQiLCJEREREIl0sZnVuY3Rpb24oQ2UsS2UsbXQpe210Ll9kYXlPZlllYXI9VHQoQ2UpfSksc2UoIm0iLFsibW0iLDJdLDAsIm1pbnV0ZSIp''@;'; put 'put ''LFJuKCJtIix0dCxXdCksUm4oIm1tIix0dCxNdCksaHQoWyJtIiwibW0iXSxJaSk7dmFyIHdmPWVpKCJNaW51dGVzIiwhMSk7c2UoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLFJuKCJzIix0dCxXdCksUm4oInNzIix0dCxNdCksaHQoWyJzIiwic3MiXSxYdCk7dmFyIGloLFY2LENmPWVpKCJT''@;'; put 'put ''ZWNvbmRzIiwhMSk7Zm9yKHNlKCJTIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pLHNlKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxzZSgwLFsiU1NTIiwzXSwwLCJtaWxsaXNlY29uZCIp''@;'; put 'put ''LHNlKDAsWyJTU1NTIiw0XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTUyIsNl0sMCxmdW5jdGlvbigpe3JldHVybiAxZTMq''@;'; put 'put ''dGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTU1MiLDddLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTU1NT''@;'; put 'put ''UyIsOV0sMCxmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSksUm4oIlMiLHF0LHl0KSxSbigiU1MiLHF0LE10KSxSbigiU1NTIixxdCxEdCksaWg9IlNTU1MiO2loLmxlbmd0aDw9OTtpaCs9IlMiKVJuKGloLGNpKTtmdW5jdGlvbiBIYyhDZSxLZSl7S2VbZW5dPVR0''@;'; put 'put ''KDFlMyooIjAuIitDZSkpfWZvcihpaD0iUyI7aWgubGVuZ3RoPD05O2loKz0iUyIpaHQoaWgsSGMpO1Y2PWVpKCJNaWxsaXNlY29uZHMiLCExKSxzZSgieiIsMCwwLCJ6b25lQWJiciIpLHNlKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciB6aT1tZS5wcm90b3R5cGU7ZnVuY3Rpb24geHYoQ2Up''@;'; put 'put ''e3JldHVybiBDZX16aS5hZGQ9azYsemkuY2FsZW5kYXI9ZnVuY3Rpb24gaDUoQ2UsS2UpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoYXJndW1lbnRzWzBdP0pzKGFyZ3VtZW50c1swXSk/KENlPWFyZ3VtZW50c1swXSxLZT12b2lkIDApOmZ1bmN0aW9uIG00KENlKXt2YXIgZG4sS2U9dyhDZSkm''@;'; put 'put ''JiFGKENlKSxtdD0hMSxJdD1bInNhbWVEYXkiLCJuZXh0RGF5IiwibGFzdERheSIsIm5leHRXZWVrIiwibGFzdFdlZWsiLCJzYW1lRWxzZSJdO2Zvcihkbj0wO2RuPEl0Lmxlbmd0aDtkbis9MSltdD1tdHx8UChDZSxJdFtkbl0pO3JldHVybiBLZSYmbXR9KGFyZ3VtZW50c1swXSkmJihLZT1h''@;'; put 'put ''cmd1bWVudHNbMF0sQ2U9dm9pZCAwKTooQ2U9dm9pZCAwLEtlPXZvaWQgMCkpO3ZhciBtdD1DZXx8c2woKSxJdD1UNihtdCx0aGlzKS5zdGFydE9mKCJkYXkiKSxkbj1fLmNhbGVuZGFyRm9ybWF0KHRoaXMsSXQpfHwic2FtZUVsc2UiLHFuPUtlJiYocChLZVtkbl0pP0tlW2RuXS5jYWxsKHRo''@;'; put 'put ''aXMsbXQpOktlW2RuXSk7cmV0dXJuIHRoaXMuZm9ybWF0KHFufHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihkbix0aGlzLHNsKG10KSkpfSx6aS5jbG9uZT1mdW5jdGlvbiB2Zigpe3JldHVybiBuZXcgbWUodGhpcyl9LHppLmRpZmY9ZnVuY3Rpb24gTWMoQ2UsS2UsbXQpe3ZhciBJdCxk''@;'; put 'put ''bixxbjtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKEl0PVQ2KENlLHRoaXMpKS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtzd2l0Y2goZG49NmU0KihJdC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxLZT1fdChLZSkpe2Nhc2UieWVhciI6cW49UDModGhpcyxJdCkvMTI7''@;'; put 'put ''YnJlYWs7Y2FzZSJtb250aCI6cW49UDModGhpcyxJdCk7YnJlYWs7Y2FzZSJxdWFydGVyIjpxbj1QMyh0aGlzLEl0KS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjpxbj0odGhpcy1JdCkvMWUzO2JyZWFrO2Nhc2UibWludXRlIjpxbj0odGhpcy1JdCkvNmU0O2JyZWFrO2Nhc2UiaG91ciI6cW49KHRo''@;'; put 'put ''aXMtSXQpLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOnFuPSh0aGlzLUl0LWRuKS84NjRlNTticmVhaztjYXNlIndlZWsiOnFuPSh0aGlzLUl0LWRuKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDpxbj10aGlzLUl0fXJldHVybiBtdD9xbjpXZShxbil9LHppLmVuZE9mPWZ1bmN0aW9uIG4yKENlKXt2YXIg''@;'; put 'put ''S2UsbXQ7aWYodm9pZCAwPT09KENlPV90KENlKSl8fCJtaWxsaXNlY29uZCI9PT1DZXx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3N3aXRjaChtdD10aGlzLl9pc1VUQz94YzpWbyxDZSl7Y2FzZSJ5ZWFyIjpLZT1tdCh0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0''@;'; put 'put ''ZXIiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKzEsMSktMTticmVhaztjYXNlIndlZWsiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlz''@;'; put 'put ''LmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOktlPW10KHRoaXMueWVhcigpLHRo''@;'; put 'put ''aXMubW9udGgoKSx0aGlzLmRhdGUoKSsxKS0xO2JyZWFrO2Nhc2UiaG91ciI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UrPXk0LWxsKEtlKyh0aGlzLl9pc1VUQz8wOnRoaXMudXRjT2Zmc2V0KCkqa2kpLHk0KS0xO2JyZWFrO2Nhc2UibWludXRlIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZSs9''@;'; put 'put ''a2ktbGwoS2Usa2kpLTE7YnJlYWs7Y2FzZSJzZWNvbmQiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlKz0xZTMtbGwoS2UsMWUzKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoS2UpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHppLmZvcm1hdD1mdW5jdGlvbiBndihDZSl7Q2V8fChD''@;'; put 'put ''ZT10aGlzLmlzVXRjKCk/Xy5kZWZhdWx0Rm9ybWF0VXRjOl8uZGVmYXVsdEZvcm1hdCk7dmFyIEtlPUplKHRoaXMsQ2UpO3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KEtlKX0semkuZnJvbT1mdW5jdGlvbiBOdyhDZSxLZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoX2Uo''@;'; put 'put ''Q2UpJiZDZS5pc1ZhbGlkKCl8fHNsKENlKS5pc1ZhbGlkKCkpP0psKHt0bzp0aGlzLGZyb206Q2V9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIUtlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSx6aS5mcm9tTm93PWZ1bmN0aW9uIG12KENlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5mcm9tKHNsKCksQ2UpfSx6aS50bz1mdW5jdGlvbiBWdyhDZSxLZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoX2UoQ2UpJiZDZS5pc1ZhbGlkKCl8fHNsKENlKS5pc1ZhbGlkKCkpP0psKHtmcm9tOnRoaXMsdG86Q2V9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIUtlKTp0''@;'; put 'put ''aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSx6aS50b05vdz1mdW5jdGlvbiBCdyhDZSl7cmV0dXJuIHRoaXMudG8oc2woKSxDZSl9LHppLmdldD1mdW5jdGlvbiBOaShDZSl7cmV0dXJuIHAodGhpc1tDZT1fdChDZSldKT90aGlzW0NlXSgpOnRoaXN9LHppLmludmFsaWRBdD1mdW5j''@;'; put 'put ''dGlvbiByaCgpe3JldHVybiBZKHRoaXMpLm92ZXJmbG93fSx6aS5pc0FmdGVyPWZ1bmN0aW9uIEQ2KENlLEtlKXt2YXIgbXQ9X2UoQ2UpP0NlOnNsKENlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KEtlPV90KEtlKXx8Im1pbGxp''@;'; put 'put ''c2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bXQudmFsdWVPZigpOm10LnZhbHVlT2YoKTx0aGlzLmNsb25lKCkuc3RhcnRPZihLZSkudmFsdWVPZigpKX0semkuaXNCZWZvcmU9ZnVuY3Rpb24gaHYoQ2UsS2Upe3ZhciBtdD1fZShDZSk/Q2U6c2woQ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgp''@;'; put 'put ''fHwhbXQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oS2U9X3QoS2UpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKTxtdC52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKEtlKS52YWx1ZU9mKCk8bXQudmFsdWVPZigpKX0semkuaXNCZXR3ZWVuPWZ1bmN0aW9uIEk2KENl''@;'; put 'put ''LEtlLG10LEl0KXt2YXIgZG49X2UoQ2UpP0NlOnNsKENlKSxxbj1fZShLZSk/S2U6c2woS2UpO3JldHVybiEhKHRoaXMuaXNWYWxpZCgpJiZkbi5pc1ZhbGlkKCkmJnFuLmlzVmFsaWQoKSkmJigiKCI9PT0oSXQ9SXR8fCIoKSIpWzBdP3RoaXMuaXNBZnRlcihkbixtdCk6IXRoaXMuaXNCZWZv''@;'; put 'put ''cmUoZG4sbXQpKSYmKCIpIj09PUl0WzFdP3RoaXMuaXNCZWZvcmUocW4sbXQpOiF0aGlzLmlzQWZ0ZXIocW4sbXQpKX0semkuaXNTYW1lPWZ1bmN0aW9uIHY0KENlLEtlKXt2YXIgSXQsbXQ9X2UoQ2UpP0NlOnNsKENlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkm''@;'; put 'put ''JigibWlsbGlzZWNvbmQiPT09KEtlPV90KEtlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk9PT1tdC52YWx1ZU9mKCk6KEl0PW10LnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZihLZSkudmFsdWVPZigpPD1JdCYmSXQ8PXRoaXMuY2xvbmUoKS5lbmRPZihLZSkudmFsdWVP''@;'; put 'put ''ZigpKSl9LHppLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24gcjAoQ2UsS2Upe3JldHVybiB0aGlzLmlzU2FtZShDZSxLZSl8fHRoaXMuaXNBZnRlcihDZSxLZSl9LHppLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uIEh3KENlLEtlKXtyZXR1cm4gdGhpcy5pc1NhbWUoQ2UsS2UpfHx0aGlzLmlzQmVm''@;'; put 'put ''b3JlKENlLEtlKX0semkuaXNWYWxpZD1mdW5jdGlvbiB5Zigpe3JldHVybiBlZSh0aGlzKX0semkubGFuZz1Wcix6aS5sb2NhbGU9S2EsemkubG9jYWxlRGF0YT1iZix6aS5tYXg9THcsemkubWluPUkzLHppLnBhcnNpbmdGbGFncz1mdW5jdGlvbiB6dygpe3JldHVybiBLKHt9LFkodGhpcykp''@;'; put 'put ''fSx6aS5zZXQ9ZnVuY3Rpb24gRGEoQ2UsS2Upe2lmKCJvYmplY3QiPT10eXBlb2YgQ2Upe3ZhciBJdCxtdD1mdW5jdGlvbiB1bihDZSl7dmFyIG10LEtlPVtdO2ZvcihtdCBpbiBDZSlQKENlLG10KSYmS2UucHVzaCh7dW5pdDptdCxwcmlvcml0eTpRZVttdF19KTtyZXR1cm4gS2Uuc29ydChm''@;'; put 'put ''dW5jdGlvbihJdCxkbil7cmV0dXJuIEl0LnByaW9yaXR5LWRuLnByaW9yaXR5fSksS2V9KENlPW50KENlKSksZG49bXQubGVuZ3RoO2ZvcihJdD0wO0l0PGRuO0l0KyspdGhpc1ttdFtJdF0udW5pdF0oQ2VbbXRbSXRdLnVuaXRdKX1lbHNlIGlmKHAodGhpc1tDZT1fdChDZSldKSlyZXR1cm4g''@;'; put 'put ''dGhpc1tDZV0oS2UpO3JldHVybiB0aGlzfSx6aS5zdGFydE9mPWZ1bmN0aW9uIGV1KENlKXt2YXIgS2UsbXQ7aWYodm9pZCAwPT09KENlPV90KENlKSl8fCJtaWxsaXNlY29uZCI9PT1DZXx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3N3aXRjaChtdD10aGlzLl9pc1VUQz94YzpWbyxD''@;'; put 'put ''ZSl7Y2FzZSJ5ZWFyIjpLZT1tdCh0aGlzLnllYXIoKSwwLDEpO2JyZWFrO2Nhc2UicXVhcnRlciI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzLDEpO2JyZWFrO2Nhc2UibW9udGgiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztj''@;'; put 'put ''YXNlIndlZWsiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSk7YnJlYWs7Y2FzZSJpc29XZWVrIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKTticmVhaztjYXNl''@;'; put 'put ''ImRheSI6Y2FzZSJkYXRlIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UtPWxsKEtlKyh0aGlzLl9pc1VUQz8wOnRoaXMudXRjT2Zmc2V0KCkqa2kpLHk0KTticmVhaztjYXNlIm1pbnV0''@;'; put 'put ''ZSI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UtPWxsKEtlLGtpKTticmVhaztjYXNlInNlY29uZCI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UtPWxsKEtlLDFlMyl9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShLZSksXy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30semkuc3VidHJhY3Q9dTUs''@;'; put 'put ''emkudG9BcnJheT1mdW5jdGlvbiBwNSgpe3ZhciBDZT10aGlzO3JldHVybltDZS55ZWFyKCksQ2UubW9udGgoKSxDZS5kYXRlKCksQ2UuaG91cigpLENlLm1pbnV0ZSgpLENlLnNlY29uZCgpLENlLm1pbGxpc2Vjb25kKCldfSx6aS50b09iamVjdD1mdW5jdGlvbiB2digpe3ZhciBDZT10aGlz''@;'; put 'put ''O3JldHVybnt5ZWFyczpDZS55ZWFyKCksbW9udGhzOkNlLm1vbnRoKCksZGF0ZTpDZS5kYXRlKCksaG91cnM6Q2UuaG91cnMoKSxtaW51dGVzOkNlLm1pbnV0ZXMoKSxzZWNvbmRzOkNlLnNlY29uZHMoKSxtaWxsaXNlY29uZHM6Q2UubWlsbGlzZWNvbmRzKCl9fSx6aS50b0RhdGU9ZnVuY3Rp''@;'; put 'put ''b24gUjAoKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSx6aS50b0lTT1N0cmluZz1mdW5jdGlvbiBmdihDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsO3ZhciBLZT0hMCE9PUNlLG10PUtlP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBtdC55ZWFyKCk8''@;'; put 'put ''MHx8bXQueWVhcigpPjk5OTk/SmUobXQsS2U/IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKTpwKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKT9LZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhp''@;'; put 'put ''cy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsSmUobXQsIloiKSk6SmUobXQsS2U/IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpfSx6aS5pbnNwZWN0PWZ1bmN0aW9u''@;'; put 'put ''IHB2KCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiJtb21lbnQuaW52YWxpZCgvKiAiK3RoaXMuX2krIiAqLykiO3ZhciBtdCxJdCxDZT0ibW9tZW50IixLZT0iIjtyZXR1cm4gdGhpcy5pc0xvY2FsKCl8fChDZT0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5w''@;'; put 'put ''YXJzZVpvbmUiLEtlPSJaIiksbXQ9IlsiK0NlKycoIl0nLEl0PTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsdGhpcy5mb3JtYXQobXQrSXQrIi1NTS1ERFtUXUhIOm1tOnNzLlNTUyIrS2UrJ1siKV0nKX0sdHlwZW9mIFN5bWJvbDwidSImJm51bGwh''@;'; put 'put ''PVN5bWJvbC5mb3ImJih6aVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1mdW5jdGlvbigpe3JldHVybiJNb21lbnQ8Iit0aGlzLmZvcm1hdCgpKyI+In0pLHppLnRvSlNPTj1mdW5jdGlvbiBqdygpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3Ry''@;'; put 'put ''aW5nKCk6bnVsbH0semkudG9TdHJpbmc9ZnVuY3Rpb24gYjQoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgiZW4iKS5mb3JtYXQoImRkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaIil9LHppLnVuaXg9ZnVuY3Rpb24gUjYoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVl''@;'; put 'put ''T2YoKS8xZTMpfSx6aS52YWx1ZU9mPWZ1bmN0aW9uIFB1KCl7cmV0dXJuIHRoaXMuX2QudmFsdWVPZigpLTZlNCoodGhpcy5fb2Zmc2V0fHwwKX0semkuY3JlYXRpb25EYXRhPWZ1bmN0aW9uIGJ2KCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xv''@;'; put 'put ''Y2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX0semkuZXJhTmFtZT1mdW5jdGlvbiBVdygpe3ZhciBDZSxLZSxtdCxJdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9SXQubGVuZ3RoO0NlPEtlOysrQ2UpaWYobXQ9dGhpcy5jbG9uZSgpLnN0''@;'; put 'put ''YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxJdFtDZV0uc2luY2U8PW10JiZtdDw9SXRbQ2VdLnVudGlsfHxJdFtDZV0udW50aWw8PW10JiZtdDw9SXRbQ2VdLnNpbmNlKXJldHVybiBJdFtDZV0ubmFtZTtyZXR1cm4iIn0semkuZXJhTmFycm93PWZ1bmN0aW9uIE82KCl7dmFyIENlLEtlLG10LEl0''@;'; put 'put ''PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1JdC5sZW5ndGg7Q2U8S2U7KytDZSlpZihtdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLEl0W0NlXS5zaW5jZTw9bXQmJm10PD1JdFtDZV0udW50aWx8fEl0W0NlXS51bnRpbDw9bXQmJm10PD1JdFtD''@;'; put 'put ''ZV0uc2luY2UpcmV0dXJuIEl0W0NlXS5uYXJyb3c7cmV0dXJuIiJ9LHppLmVyYUFiYnI9ZnVuY3Rpb24geXYoKXt2YXIgQ2UsS2UsbXQsSXQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihDZT0wLEtlPUl0Lmxlbmd0aDtDZTxLZTsrK0NlKWlmKG10PXRoaXMuY2xvbmUoKS5zdGFydE9m''@;'; put 'put ''KCJkYXkiKS52YWx1ZU9mKCksSXRbQ2VdLnNpbmNlPD1tdCYmbXQ8PUl0W0NlXS51bnRpbHx8SXRbQ2VdLnVudGlsPD1tdCYmbXQ8PUl0W0NlXS5zaW5jZSlyZXR1cm4gSXRbQ2VdLmFiYnI7cmV0dXJuIiJ9LHppLmVyYVllYXI9ZnVuY3Rpb24gX3YoKXt2YXIgQ2UsS2UsbXQsSXQsZG49dGhp''@;'; put 'put ''cy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihDZT0wLEtlPWRuLmxlbmd0aDtDZTxLZTsrK0NlKWlmKG10PWRuW0NlXS5zaW5jZTw9ZG5bQ2VdLnVudGlsPzE6LTEsSXQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxkbltDZV0uc2luY2U8PUl0JiZJdDw9ZG5bQ2VdLnVu''@;'; put 'put ''dGlsfHxkbltDZV0udW50aWw8PUl0JiZJdDw9ZG5bQ2VdLnNpbmNlKXJldHVybih0aGlzLnllYXIoKS1fKGRuW0NlXS5zaW5jZSkueWVhcigpKSptdCtkbltDZV0ub2Zmc2V0O3JldHVybiB0aGlzLnllYXIoKX0semkueWVhcj1Xbix6aS5pc0xlYXBZZWFyPWZ1bmN0aW9uICRpKCl7cmV0dXJu''@;'; put 'put ''IHJuKHRoaXMueWVhcigpKX0semkud2Vla1llYXI9ZnVuY3Rpb24gZzUoQ2Upe3JldHVybiBTdi5jYWxsKHRoaXMsQ2UsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCkrdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURh''@;'; put 'put ''dGEoKS5fd2Vlay5kb3kpfSx6aS5pc29XZWVrWWVhcj1mdW5jdGlvbiB3dihDZSl7cmV0dXJuIFN2LmNhbGwodGhpcyxDZSx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSx6aS5xdWFydGVyPXppLnF1YXJ0ZXJzPWZ1bmN0aW9uIG01KENlKXtyZXR1cm4gbnVsbD09Q2U/''@;'; put 'put ''TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKihDZS0xKSt0aGlzLm1vbnRoKCklMyl9LHppLm1vbnRoPUxjLHppLmRheXNJbk1vbnRoPWZ1bmN0aW9uIEQwKCl7cmV0dXJuIHBhKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LHppLndlZWs9emkud2Vla3M9ZnVu''@;'; put 'put ''Y3Rpb24gWWkoQ2Upe3ZhciBLZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT1DZT9LZTp0aGlzLmFkZCg3KihDZS1LZSksImQiKX0semkuaXNvV2Vlaz16aS5pc29XZWVrcz1mdW5jdGlvbiB5bChDZSl7dmFyIEtlPUx1KHRoaXMsMSw0KS53ZWVrO3JldHVybiBu''@;'; put 'put ''dWxsPT1DZT9LZTp0aGlzLmFkZCg3KihDZS1LZSksImQiKX0semkud2Vla3NJblllYXI9ZnVuY3Rpb24gTjMoKXt2YXIgQ2U9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFByKHRoaXMueWVhcigpLENlLmRvdyxDZS5kb3kpfSx6aS53ZWVrc0luV2Vla1llYXI9ZnVuY3Rpb24gV3co''@;'; put 'put ''KXt2YXIgQ2U9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFByKHRoaXMud2Vla1llYXIoKSxDZS5kb3csQ2UuZG95KX0semkuaXNvV2Vla3NJblllYXI9ZnVuY3Rpb24gTjYoKXtyZXR1cm4gUHIodGhpcy55ZWFyKCksMSw0KX0semkuaXNvV2Vla3NJbklTT1dlZWtZZWFyPWZ1bmN0''@;'; put 'put ''aW9uIEN2KCl7cmV0dXJuIFByKHRoaXMuaXNvV2Vla1llYXIoKSwxLDQpfSx6aS5kYXRlPXEwLHppLmRheT16aS5kYXlzPWZ1bmN0aW9uIE5hKENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPUNlP3RoaXM6TmFOO3ZhciBLZT1Rcih0aGlzLCJEYXkiKTtyZXR1cm4gbnVsbCE9''@;'; put 'put ''Q2U/KENlPWZ1bmN0aW9uIFFjKENlLEtlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIENlP0NlOmlzTmFOKENlKT8ibnVtYmVyIj09dHlwZW9mKENlPUtlLndlZWtkYXlzUGFyc2UoQ2UpKT9DZTpudWxsOnBhcnNlSW50KENlLDEwKX0oQ2UsdGhpcy5sb2NhbGVEYXRhKCkpLHRoaXMuYWRkKENl''@;'; put 'put ''LUtlLCJkIikpOktlfSx6aS53ZWVrZGF5PWZ1bmN0aW9uIEQzKENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPUNlP3RoaXM6TmFOO3ZhciBLZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQo''@;'; put 'put ''Q2UtS2UsImQiKX0semkuaXNvV2Vla2RheT1mdW5jdGlvbiAkaChDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1DZT90aGlzOk5hTjtpZihudWxsIT1DZSl7dmFyIEtlPWZ1bmN0aW9uIG41KENlLEtlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIENlP0tlLndlZWtkYXlzUGFy''@;'; put 'put ''c2UoQ2UpJTd8fDc6aXNOYU4oQ2UpP251bGw6Q2V9KENlLHRoaXMubG9jYWxlRGF0YSgpKTtyZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSU3P0tlOktlLTcpfXJldHVybiB0aGlzLmRheSgpfHw3fSx6aS5kYXlPZlllYXI9ZnVuY3Rpb24gTXYoQ2Upe3ZhciBLZT1NYXRoLnJvdW5kKCh0aGlz''@;'; put 'put ''LmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PUNlP0tlOnRoaXMuYWRkKENlLUtlLCJkIil9LHppLmhvdXI9emkuaG91cnM9VnMsemkubWludXRlPXppLm1pbnV0ZXM9d2Ysemkuc2Vjb25kPXppLnNlY29u''@;'; put 'put ''ZHM9Q2YsemkubWlsbGlzZWNvbmQ9emkubWlsbGlzZWNvbmRzPVY2LHppLnV0Y09mZnNldD1mdW5jdGlvbiBnZihDZSxLZSxtdCl7dmFyIGRuLEl0PXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPUNlP3RoaXM6TmFOO2lmKG51bGwhPUNlKXtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIENlKXtpZihudWxsPT09KENlPWxkKFJpLENlKSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyhDZSk8MTYmJiFtdCYmKENlKj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZLZSYmKGRuPW11KHRoaXMpKSx0aGlzLl9vZmZzZXQ9Q2UsdGhpcy5faXNVVEM9ITAsbnVsbCE9''@;'; put 'put ''ZG4mJnRoaXMuYWRkKGRuLCJtIiksSXQhPT1DZSYmKCFLZXx8dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz9MMyh0aGlzLEpsKENlLUl0LCJtIiksMSwhMSk6dGhpcy5fY2hhbmdlSW5Qcm9ncmVzc3x8KHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9ITAsXy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhp''@;'; put 'put ''cy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsKSksdGhpc31yZXR1cm4gdGhpcy5faXNVVEM/SXQ6bXUodGhpcyl9LHppLnV0Yz1mdW5jdGlvbiBSMyhDZSl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsQ2UpfSx6aS5sb2NhbD1mdW5jdGlvbiBQbChDZSl7cmV0dXJuIHRoaXMuX2lzVVRDJiYodGhp''@;'; put 'put ''cy51dGNPZmZzZXQoMCxDZSksdGhpcy5faXNVVEM9ITEsQ2UmJnRoaXMuc3VidHJhY3QobXUodGhpcyksIm0iKSksdGhpc30semkucGFyc2Vab25lPWZ1bmN0aW9uIE91KCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHRoaXMuX2kpe3ZhciBDZT1sZChzbix0aGlzLl9pKTtudWxsIT1DZT90aGlzLnV0Y09mZnNldChDZSk6dGhpcy51dGNPZmZzZXQoMCwhMCl9cmV0dXJuIHRoaXN9LHppLmhhc0FsaWduZWRIb3VyT2Zmc2V0PWZ1bmN0aW9uIFFoKENlKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgp''@;'; put 'put ''JiYoQ2U9Q2U/c2woQ2UpLnV0Y09mZnNldCgpOjAsKHRoaXMudXRjT2Zmc2V0KCktQ2UpJTYwPT0wKX0semkuaXNEU1Q9ZnVuY3Rpb24gbWYoKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5j''@;'; put 'put ''bG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSx6aS5pc0xvY2FsPWZ1bmN0aW9uIGR2KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSx6aS5pc1V0Y09mZnNldD1mdW5jdGlvbiBQdygpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSx6aS5pc1V0''@;'; put 'put ''Yz1fMCx6aS5pc1VUQz1fMCx6aS56b25lQWJicj1mdW5jdGlvbiBCNigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0semkuem9uZU5hbWU9ZnVuY3Rpb24gajYoKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0semkuZGF0ZXM9U2UoImRh''@;'; put 'put ''dGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuIixxMCksemkubW9udGhzPVNlKCJtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQiLExjKSx6aS55ZWFycz1TZSgieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNl''@;'; put 'put ''IHllYXIgaW5zdGVhZCIsV24pLHppLnpvbmU9U2UoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvIixmdW5jdGlvbiBuMChDZSxLZSl7cmV0dXJuIG51''@;'; put 'put ''bGwhPUNlPygic3RyaW5nIiE9dHlwZW9mIENlJiYoQ2U9LUNlKSx0aGlzLnV0Y09mZnNldChDZSxLZSksdGhpcyk6LXRoaXMudXRjT2Zmc2V0KCl9KSx6aS5pc0RTVFNoaWZ0ZWQ9U2UoImlzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMv''@;'; put 'put ''Iy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24iLGZ1bmN0aW9uIE93KCl7aWYoIU8odGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciBLZSxDZT17fTtyZXR1cm4gbGUoQ2UsdGhpcyksKENlPWx2KENlKSkuX2E/KEtlPUNl''@;'; put 'put ''Ll9pc1VUQz9VKENlLl9hKTpzbChDZS5fYSksdGhpcy5faXNEU1RTaGlmdGVkPXRoaXMuaXNWYWxpZCgpJiZmdW5jdGlvbiBjNShDZSxLZSxtdCl7dmFyIGlpLEl0PU1hdGgubWluKENlLmxlbmd0aCxLZS5sZW5ndGgpLGRuPU1hdGguYWJzKENlLmxlbmd0aC1LZS5sZW5ndGgpLHFuPTA7Zm9y''@;'; put 'put ''KGlpPTA7aWk8SXQ7aWkrKykobXQmJkNlW2lpXSE9PUtlW2lpXXx8IW10JiZUdChDZVtpaV0pIT09VHQoS2VbaWldKSkmJnFuKys7cmV0dXJuIHFuK2RufShDZS5fYSxLZS50b0FycmF5KCkpPjApOnRoaXMuX2lzRFNUU2hpZnRlZD0hMSx0aGlzLl9pc0RTVFNoaWZ0ZWR9KTt2YXIgdW89Qy5w''@;'; put 'put ''cm90b3R5cGU7ZnVuY3Rpb24gdHUoQ2UsS2UsbXQsSXQpe3ZhciBkbj10YSgpLHFuPVUoKS5zZXQoSXQsS2UpO3JldHVybiBkblttdF0ocW4sQ2UpfWZ1bmN0aW9uIEVjKENlLEtlLG10KXtpZih6KENlKSYmKEtlPUNlLENlPXZvaWQgMCksQ2U9Q2V8fCIiLG51bGwhPUtlKXJldHVybiB0dShD''@;'; put 'put ''ZSxLZSxtdCwibW9udGgiKTt2YXIgSXQsZG49W107Zm9yKEl0PTA7SXQ8MTI7SXQrKylkbltJdF09dHUoQ2UsSXQsbXQsIm1vbnRoIik7cmV0dXJuIGRufWZ1bmN0aW9uIGEwKENlLEtlLG10LEl0KXsiYm9vbGVhbiI9PXR5cGVvZiBDZT8oeihLZSkmJihtdD1LZSxLZT12b2lkIDApLEtlPUtl''@;'; put 'put ''fHwiIik6KG10PUtlPUNlLENlPSExLHooS2UpJiYobXQ9S2UsS2U9dm9pZCAwKSxLZT1LZXx8IiIpO3ZhciBpaSxkbj10YSgpLHFuPUNlP2RuLl93ZWVrLmRvdzowLElhPVtdO2lmKG51bGwhPW10KXJldHVybiB0dShLZSwobXQrcW4pJTcsSXQsImRheSIpO2ZvcihpaT0wO2lpPDc7aWkrKylJ''@;'; put 'put ''YVtpaV09dHUoS2UsKGlpK3FuKSU3LEl0LCJkYXkiKTtyZXR1cm4gSWF9dW8uY2FsZW5kYXI9ZnVuY3Rpb24gaihDZSxLZSxtdCl7dmFyIEl0PXRoaXMuX2NhbGVuZGFyW0NlXXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIHAoSXQpP0l0LmNhbGwoS2UsbXQpOkl0fSx1by5sb25n''@;'; put 'put ''RGF0ZUZvcm1hdD1mdW5jdGlvbiB2ZShDZSl7dmFyIEtlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlXSxtdD10aGlzLl9sb25nRGF0ZUZvcm1hdFtDZS50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gS2V8fCFtdD9LZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2VdPW10Lm1hdGNoKG0pLm1hcChmdW5j''@;'; put 'put ''dGlvbihJdCl7cmV0dXJuIk1NTU0iPT09SXR8fCJNTSI9PT1JdHx8IkREIj09PUl0fHwiZGRkZCI9PT1JdD9JdC5zbGljZSgxKTpJdH0pLmpvaW4oIiIpLHRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlXSl9LHVvLmludmFsaWREYXRlPWZ1bmN0aW9uIHplKCl7cmV0dXJuIHRoaXMuX2ludmFsaWRE''@;'; put 'put ''YXRlfSx1by5vcmRpbmFsPWZ1bmN0aW9uIE9lKENlKXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsQ2UpfSx1by5wcmVwYXJzZT14dix1by5wb3N0Zm9ybWF0PXh2LHVvLnJlbGF0aXZlVGltZT1mdW5jdGlvbiBWZShDZSxLZSxtdCxJdCl7dmFyIGRuPXRoaXMuX3JlbGF0aXZl''@;'; put 'put ''VGltZVttdF07cmV0dXJuIHAoZG4pP2RuKENlLEtlLG10LEl0KTpkbi5yZXBsYWNlKC8lZC9pLENlKX0sdW8ucGFzdEZ1dHVyZT1mdW5jdGlvbiBrZShDZSxLZSl7dmFyIG10PXRoaXMuX3JlbGF0aXZlVGltZVtDZT4wPyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIHAobXQpP210KEtlKTptdC5y''@;'; put 'put ''ZXBsYWNlKC8lcy9pLEtlKX0sdW8uc2V0PWZ1bmN0aW9uIGIoQ2Upe3ZhciBLZSxtdDtmb3IobXQgaW4gQ2UpUChDZSxtdCkmJihwKEtlPUNlW210XSk/dGhpc1ttdF09S2U6dGhpc1siXyIrbXRdPUtlKTt0aGlzLl9jb25maWc9Q2UsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmll''@;'; put 'put ''bnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sdW8uZXJhcz1mdW5jdGlvbiBfNChDZSxLZSl7dmFyIG10LEl0LGRuLHFuPXRoaXMuX2VyYXN8fHRhKCJlbiIp''@;'; put 'put ''Ll9lcmFzO2ZvcihtdD0wLEl0PXFuLmxlbmd0aDttdDxJdDsrK210KXN3aXRjaCgic3RyaW5nIj09dHlwZW9mIHFuW210XS5zaW5jZSYmKGRuPV8ocW5bbXRdLnNpbmNlKS5zdGFydE9mKCJkYXkiKSxxblttdF0uc2luY2U9ZG4udmFsdWVPZigpKSx0eXBlb2YgcW5bbXRdLnVudGlsKXtjYXNl''@;'; put 'put ''InVuZGVmaW5lZCI6cW5bbXRdLnVudGlsPTEvMDticmVhaztjYXNlInN0cmluZyI6ZG49XyhxblttdF0udW50aWwpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxxblttdF0udW50aWw9ZG4udmFsdWVPZigpfXJldHVybiBxbn0sdW8uZXJhc1BhcnNlPWZ1bmN0aW9uIFdBKENlLEtlLG10KXt2''@;'; put 'put ''YXIgSXQsZG4saWksSWEsU28scW49dGhpcy5lcmFzKCk7Zm9yKENlPUNlLnRvVXBwZXJDYXNlKCksSXQ9MCxkbj1xbi5sZW5ndGg7SXQ8ZG47KytJdClpZihpaT1xbltJdF0ubmFtZS50b1VwcGVyQ2FzZSgpLElhPXFuW0l0XS5hYmJyLnRvVXBwZXJDYXNlKCksU289cW5bSXRdLm5hcnJvdy50''@;'; put 'put ''b1VwcGVyQ2FzZSgpLG10KXN3aXRjaChLZSl7Y2FzZSJOIjpjYXNlIk5OIjpjYXNlIk5OTiI6aWYoSWE9PT1DZSlyZXR1cm4gcW5bSXRdO2JyZWFrO2Nhc2UiTk5OTiI6aWYoaWk9PT1DZSlyZXR1cm4gcW5bSXRdO2JyZWFrO2Nhc2UiTk5OTk4iOmlmKFNvPT09Q2UpcmV0dXJuIHFuW0l0XX1l''@;'; put 'put ''bHNlIGlmKFtpaSxJYSxTb10uaW5kZXhPZihDZSk+PTApcmV0dXJuIHFuW0l0XX0sdW8uZXJhc0NvbnZlcnRZZWFyPWZ1bmN0aW9uIEw2KENlLEtlKXt2YXIgbXQ9Q2Uuc2luY2U8PUNlLnVudGlsPzE6LTE7cmV0dXJuIHZvaWQgMD09PUtlP18oQ2Uuc2luY2UpLnllYXIoKTpfKENlLnNpbmNl''@;'; put 'put ''KS55ZWFyKCkrKEtlLUNlLm9mZnNldCkqbXR9LHVvLmVyYXNBYmJyUmVnZXg9ZnVuY3Rpb24gUDYoQ2Upe3JldHVybiBQKHRoaXMsIl9lcmFzQWJiclJlZ2V4Iil8fGhjLmNhbGwodGhpcyksQ2U/dGhpcy5fZXJhc0FiYnJSZWdleDp0aGlzLl9lcmFzUmVnZXh9LHVvLmVyYXNOYW1lUmVnZXg9''@;'; put 'put ''ZnVuY3Rpb24gX2YoQ2Upe3JldHVybiBQKHRoaXMsIl9lcmFzTmFtZVJlZ2V4Iil8fGhjLmNhbGwodGhpcyksQ2U/dGhpcy5fZXJhc05hbWVSZWdleDp0aGlzLl9lcmFzUmVnZXh9LHVvLmVyYXNOYXJyb3dSZWdleD1mdW5jdGlvbiBGNihDZSl7cmV0dXJuIFAodGhpcywiX2VyYXNOYXJyb3dS''@;'; put 'put ''ZWdleCIpfHxoYy5jYWxsKHRoaXMpLENlP3RoaXMuX2VyYXNOYXJyb3dSZWdleDp0aGlzLl9lcmFzUmVnZXh9LHVvLm1vbnRocz1mdW5jdGlvbiB0aShDZSxLZSl7cmV0dXJuIENlP0IodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbQ2UubW9udGgoKV06dGhpcy5fbW9udGhzWyh0aGlzLl9t''@;'; put 'put ''b250aHMuaXNGb3JtYXR8fHlhKS50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW0NlLm1vbnRoKCldOkIodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LHVvLm1vbnRoc1Nob3J0PWZ1bmN0aW9uIGdvKENlLEtlKXtyZXR1cm4gQ2U/Qih0''@;'; put 'put ''aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbQ2UubW9udGgoKV06dGhpcy5fbW9udGhzU2hvcnRbeWEudGVzdChLZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtDZS5tb250aCgpXTpCKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNT''@;'; put 'put ''aG9ydC5zdGFuZGFsb25lfSx1by5tb250aHNQYXJzZT1mdW5jdGlvbiBibChDZSxLZSxtdCl7dmFyIEl0LGRuLHFuO2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIE5zLmNhbGwodGhpcyxDZSxLZSxtdCk7Zm9yKHRoaXMuX21vbnRoc1BhcnNlfHwodGhpcy5fbW9udGhzUGFyc2U9''@;'; put 'put ''W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10pLEl0PTA7SXQ8MTI7SXQrKyl7aWYoZG49VShbMmUzLEl0XSksbXQmJiF0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdJiYodGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0''@;'; put 'put ''aGlzLm1vbnRocyhkbiwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzU2hvcnQoZG4sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksIW10JiYhdGhpcy5fbW9udGhzUGFyc2VbSXRdJiYo''@;'; put 'put ''cW49Il4iK3RoaXMubW9udGhzKGRuLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoZG4sIiIpLHRoaXMuX21vbnRoc1BhcnNlW0l0XT1uZXcgUmVnRXhwKHFuLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxtdCYmIk1NTU0iPT09S2UmJnRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF0udGVzdChDZSkp''@;'; put 'put ''cmV0dXJuIEl0O2lmKG10JiYiTU1NIj09PUtlJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYoIW10JiZ0aGlzLl9tb250aHNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0fX0sdW8ubW9udGhzUmVnZXg9ZnVuY3Rpb24geGEoQ2Upe3JldHVybiB0''@;'; put 'put ''aGlzLl9tb250aHNQYXJzZUV4YWN0PyhQKHRoaXMsIl9tb250aHNSZWdleCIpfHx1aS5jYWxsKHRoaXMpLENlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooUCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PUZhKSx0aGlzLl9tb250''@;'; put 'put ''aHNTdHJpY3RSZWdleCYmQ2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpfSx1by5tb250aHNTaG9ydFJlZ2V4PWZ1bmN0aW9uIGlyKENlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oUCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8dWkuY2FsbCh0aGlz''@;'; put 'put ''KSxDZT90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpOihQKHRoaXMsIl9tb250aHNTaG9ydFJlZ2V4Iil8fCh0aGlzLl9tb250aHNTaG9ydFJlZ2V4PUxhKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4JiZDZT90aGlzLl9tb250aHNTaG9y''@;'; put 'put ''dFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpfSx1by53ZWVrPWZ1bmN0aW9uIG9kKENlKXtyZXR1cm4gTHUoQ2UsdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9LHVvLmZpcnN0RGF5T2ZZZWFyPWZ1bmN0aW9uIENzKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG95''@;'; put 'put ''fSx1by5maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBjZigpe3JldHVybiB0aGlzLl93ZWVrLmRvd30sdW8ud2Vla2RheXM9ZnVuY3Rpb24gaGYoQ2UsS2Upe3ZhciBtdD1CKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1tDZSYmITAhPT1DZSYmdGhpcy5fd2Vl''@;'; put 'put ''a2RheXMuaXNGb3JtYXQudGVzdChLZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXTtyZXR1cm4hMD09PUNlP3kwKG10LHRoaXMuX3dlZWsuZG93KTpDZT9tdFtDZS5kYXkoKV06bXR9LHVvLndlZWtkYXlzTWluPWZ1bmN0aW9uIGZmKENlKXtyZXR1cm4hMD09PUNlP3kwKHRoaXMuX3dlZWtkYXlz''@;'; put 'put ''TWluLHRoaXMuX3dlZWsuZG93KTpDZT90aGlzLl93ZWVrZGF5c01pbltDZS5kYXkoKV06dGhpcy5fd2Vla2RheXNNaW59LHVvLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gZWgoQ2Upe3JldHVybiEwPT09Q2U/eTAodGhpcy5fd2Vla2RheXNTaG9ydCx0aGlzLl93ZWVrLmRvdyk6Q2U/dGhpcy5f''@;'; put 'put ''d2Vla2RheXNTaG9ydFtDZS5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sdW8ud2Vla2RheXNQYXJzZT1mdW5jdGlvbiBPYyhDZSxLZSxtdCl7dmFyIEl0LGRuLHFuO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gR2guY2FsbCh0aGlzLENlLEtlLG10KTtmb3IodGhpcy5f''@;'; put 'put ''d2Vla2RheXNQYXJzZXx8KHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2U9W10pLEl0PTA7SXQ8NztJdCsrKXtpZihkbj1VKFsyZTMsMV0pLmRheShJdCksbXQm''@;'; put 'put ''JiF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtJdF0mJih0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhkbiwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAo''@;'; put 'put ''Il4iK3RoaXMud2Vla2RheXNTaG9ydChkbiwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKGRuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpKSx0aGlzLl93ZWVr''@;'; put 'put ''ZGF5c1BhcnNlW0l0XXx8KHFuPSJeIit0aGlzLndlZWtkYXlzKGRuLCIiKSsifF4iK3RoaXMud2Vla2RheXNTaG9ydChkbiwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGRuLCIiKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0l0XT1uZXcgUmVnRXhwKHFuLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxt''@;'; put 'put ''dCYmImRkZGQiPT09S2UmJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYobXQmJiJkZGQiPT09S2UmJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKG10JiYiZGQiPT09S2UmJnRoaXMuX21pbldlZWtkYXlz''@;'; put 'put ''UGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZighbXQmJnRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdH19LHVvLndlZWtkYXlzUmVnZXg9ZnVuY3Rpb24gS2goQ2Upe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KFAodGhpcywiX3dlZWtkYXlz''@;'; put 'put ''UmVnZXgiKXx8YW4uY2FsbCh0aGlzKSxDZT90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXNkKSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZDZT90aGlzLl93ZWVr''@;'; put 'put ''ZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSx1by53ZWVrZGF5c1Nob3J0UmVnZXg9ZnVuY3Rpb24gcWgoQ2Upe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KFAodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8YW4uY2FsbCh0aGlzKSxDZT90aGlzLl93ZWVrZGF5''@;'; put 'put ''c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooUCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9ZGYpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmQ2U/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmlj''@;'; put 'put ''dFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCl9LHVvLndlZWtkYXlzTWluUmVnZXg9ZnVuY3Rpb24gQW4oQ2Upe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KFAodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8YW4uY2FsbCh0aGlzKSxDZT90aGlzLl93ZWVrZGF5c01pblN0''@;'; put 'put ''cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihQKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PWsxKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZDZT90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtk''@;'; put 'put ''YXlzTWluUmVnZXgpfSx1by5pc1BNPWZ1bmN0aW9uIG9sKENlKXtyZXR1cm4icCI9PT0oQ2UrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSx1by5tZXJpZGllbT1mdW5jdGlvbiBTcyhDZSxLZSxtdCl7cmV0dXJuIENlPjExP210PyJwbSI6IlBNIjptdD8iYW0iOiJBTSJ9LHVyKCJlbiIs''@;'; put 'put ''e2VyYXM6W3tzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6MS8wLG9mZnNldDoxLG5hbWU6IkFubm8gRG9taW5pIixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJCZWZvcmUgQ2hyaXN0IixuYXJyb3c6IkJDIixhYmJy''@;'; put 'put ''OiJCQyJ9XSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbihDZSl7dmFyIEtlPUNlJTEwO3JldHVybiBDZSsoMT09PVR0KENlJTEwMC8xMCk/InRoIjoxPT09S2U/InN0IjoyPT09S2U/Im5kIjozPT09S2U/InJkIjoidGgiKX19''@;'; put 'put ''KSxfLmxhbmc9U2UoIm1vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuIix1ciksXy5sYW5nRGF0YT1TZSgibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIsdGEpO3ZhciBOYz1NYXRo''@;'; put 'put ''LmFicztmdW5jdGlvbiBudShDZSxLZSxtdCxJdCl7dmFyIGRuPUpsKEtlLG10KTtyZXR1cm4gQ2UuX21pbGxpc2Vjb25kcys9SXQqZG4uX21pbGxpc2Vjb25kcyxDZS5fZGF5cys9SXQqZG4uX2RheXMsQ2UuX21vbnRocys9SXQqZG4uX21vbnRocyxDZS5fYnViYmxlKCl9ZnVuY3Rpb24gcGMo''@;'; put 'put ''Q2Upe3JldHVybiBDZTwwP01hdGguZmxvb3IoQ2UpOk1hdGguY2VpbChDZSl9ZnVuY3Rpb24gYm8oQ2Upe3JldHVybiA0ODAwKkNlLzE0NjA5N31mdW5jdGlvbiBTZihDZSl7cmV0dXJuIDE0NjA5NypDZS80ODAwfWZ1bmN0aW9uIG8wKENlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5hcyhDZSl9fXZhciBabD1vMCgibXMiKSxTND1vMCgicyIpLE1mPW8wKCJtIiksdWQ9bzAoImgiKSx3MD1vMCgiZCIpLGEyPW8wKCJ3IiksbzI9bzAoIk0iKSx2NT1vMCgiUSIpLHhmPW8wKCJ5Iiksd289Wmw7ZnVuY3Rpb24gdnUoQ2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzVmFsaWQoKT90aGlzLl9kYXRhW0NlXTpOYU59fXZhciBNND12dSgibWlsbGlzZWNvbmRzIiksVjM9dnUoInNlY29uZHMiKSxnYz12dSgibWludXRlcyIpLGI1PXZ1KCJob3VycyIpLEZ1PXZ1KCJkYXlzIiksSHU9dnUoIm1vbnRocyIpLHJ1PXZ1KCJ5ZWFycyIpO3ZhciBKMD1NYXRoLnJv''@;'; put 'put ''dW5kLFZjPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LHc6bnVsbCxNOjExfTtmdW5jdGlvbiB4NChDZSxLZSxtdCxJdCxkbil7cmV0dXJuIGRuLnJlbGF0aXZlVGltZShLZXx8MSwhIW10LENlLEl0KX12YXIgWjY9TWF0aC5hYnM7ZnVuY3Rpb24gbDIoQ2Upe3JldHVybihDZT4wKS0oQ2U8''@;'; put 'put ''MCl8fCtDZX1mdW5jdGlvbiBXNigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgSXQsZG4scW4saWksU28sZnMsTnUsZGQsQ2U9WjYodGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMsS2U9WjYodGhpcy5fZGF5cyksbXQ9WjYodGhp''@;'; put 'put ''cy5fbW9udGhzKSxJYT10aGlzLmFzU2Vjb25kcygpO3JldHVybiBJYT8oSXQ9V2UoQ2UvNjApLGRuPVdlKEl0LzYwKSxDZSU9NjAsSXQlPTYwLHFuPVdlKG10LzEyKSxtdCU9MTIsaWk9Q2U/Q2UudG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixTbz1JYTwwPyItIjoiIixmcz1s''@;'; put 'put ''Mih0aGlzLl9tb250aHMpIT09bDIoSWEpPyItIjoiIixOdT1sMih0aGlzLl9kYXlzKSE9PWwyKElhKT8iLSI6IiIsZGQ9bDIodGhpcy5fbWlsbGlzZWNvbmRzKSE9PWwyKElhKT8iLSI6IiIsU28rIlAiKyhxbj9mcytxbisiWSI6IiIpKyhtdD9mcyttdCsiTSI6IiIpKyhLZT9OdStLZSsiRCI6''@;'; put 'put ''IiIpKyhkbnx8SXR8fENlPyJUIjoiIikrKGRuP2RkK2RuKyJIIjoiIikrKEl0P2RkK0l0KyJNIjoiIikrKENlP2RkK2lpKyJTIjoiIikpOiJQMEQifXZhciBtcz1wZi5wcm90b3R5cGU7cmV0dXJuIG1zLmlzVmFsaWQ9ZnVuY3Rpb24gczUoKXtyZXR1cm4gdGhpcy5faXNWYWxpZH0sbXMuYWJz''@;'; put 'put ''PWZ1bmN0aW9uIHJjKCl7dmFyIENlPXRoaXMuX2RhdGE7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcz1OYyh0aGlzLl9taWxsaXNlY29uZHMpLHRoaXMuX2RheXM9TmModGhpcy5fZGF5cyksdGhpcy5fbW9udGhzPU5jKHRoaXMuX21vbnRocyksQ2UubWlsbGlzZWNvbmRzPU5jKENlLm1pbGxp''@;'; put 'put ''c2Vjb25kcyksQ2Uuc2Vjb25kcz1OYyhDZS5zZWNvbmRzKSxDZS5taW51dGVzPU5jKENlLm1pbnV0ZXMpLENlLmhvdXJzPU5jKENlLmhvdXJzKSxDZS5tb250aHM9TmMoQ2UubW9udGhzKSxDZS55ZWFycz1OYyhDZS55ZWFycyksdGhpc30sbXMuYWRkPWZ1bmN0aW9uIFgwKENlLEtlKXtyZXR1''@;'; put 'put ''cm4gbnUodGhpcyxDZSxLZSwxKX0sbXMuc3VidHJhY3Q9ZnVuY3Rpb24gY2woQ2UsS2Upe3JldHVybiBudSh0aGlzLENlLEtlLC0xKX0sbXMuYXM9ZnVuY3Rpb24gQzQoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciBLZSxtdCxJdD10aGlzLl9taWxsaXNlY29uZHM7aWYo''@;'; put 'put ''Im1vbnRoIj09PShDZT1fdChDZSkpfHwicXVhcnRlciI9PT1DZXx8InllYXIiPT09Q2Upc3dpdGNoKEtlPXRoaXMuX2RheXMrSXQvODY0ZTUsbXQ9dGhpcy5fbW9udGhzK2JvKEtlKSxDZSl7Y2FzZSJtb250aCI6cmV0dXJuIG10O2Nhc2UicXVhcnRlciI6cmV0dXJuIG10LzM7Y2FzZSJ5ZWFy''@;'; put 'put ''IjpyZXR1cm4gbXQvMTJ9ZWxzZSBzd2l0Y2goS2U9dGhpcy5fZGF5cytNYXRoLnJvdW5kKFNmKHRoaXMuX21vbnRocykpLENlKXtjYXNlIndlZWsiOnJldHVybiBLZS83K0l0LzYwNDhlNTtjYXNlImRheSI6cmV0dXJuIEtlK0l0Lzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KktlK0l0LzM2''@;'; put 'put ''ZTU7Y2FzZSJtaW51dGUiOnJldHVybiAxNDQwKktlK0l0LzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIDg2NDAwKktlK0l0LzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSpLZSkrSXQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdW5pdCAiK0Nl''@;'; put 'put ''KX19LG1zLmFzTWlsbGlzZWNvbmRzPVpsLG1zLmFzU2Vjb25kcz1TNCxtcy5hc01pbnV0ZXM9TWYsbXMuYXNIb3Vycz11ZCxtcy5hc0RheXM9dzAsbXMuYXNXZWVrcz1hMixtcy5hc01vbnRocz1vMixtcy5hc1F1YXJ0ZXJzPXY1LG1zLmFzWWVhcnM9eGYsbXMudmFsdWVPZj13byxtcy5fYnVi''@;'; put 'put ''YmxlPWZ1bmN0aW9uIEwxKCl7dmFyIGRuLHFuLGlpLElhLFNvLENlPXRoaXMuX21pbGxpc2Vjb25kcyxLZT10aGlzLl9kYXlzLG10PXRoaXMuX21vbnRocyxJdD10aGlzLl9kYXRhO3JldHVybiBDZT49MCYmS2U+PTAmJm10Pj0wfHxDZTw9MCYmS2U8PTAmJm10PD0wfHwoQ2UrPTg2NGU1KnBj''@;'; put 'put ''KFNmKG10KStLZSksS2U9MCxtdD0wKSxJdC5taWxsaXNlY29uZHM9Q2UlMWUzLGRuPVdlKENlLzFlMyksSXQuc2Vjb25kcz1kbiU2MCxxbj1XZShkbi82MCksSXQubWludXRlcz1xbiU2MCxpaT1XZShxbi82MCksSXQuaG91cnM9aWklMjQsS2UrPVdlKGlpLzI0KSxtdCs9U289V2UoYm8oS2Up''@;'; put 'put ''KSxLZS09cGMoU2YoU28pKSxJYT1XZShtdC8xMiksbXQlPTEyLEl0LmRheXM9S2UsSXQubW9udGhzPW10LEl0LnllYXJzPUlhLHRoaXN9LG1zLmNsb25lPWZ1bmN0aW9uIHo2KCl7cmV0dXJuIEpsKHRoaXMpfSxtcy5nZXQ9ZnVuY3Rpb24gczIoQ2Upe3JldHVybiBDZT1fdChDZSksdGhpcy5p''@;'; put 'put ''c1ZhbGlkKCk/dGhpc1tDZSsicyJdKCk6TmFOfSxtcy5taWxsaXNlY29uZHM9TTQsbXMuc2Vjb25kcz1WMyxtcy5taW51dGVzPWdjLG1zLmhvdXJzPWI1LG1zLmRheXM9RnUsbXMud2Vla3M9ZnVuY3Rpb24gRWYoKXtyZXR1cm4gV2UodGhpcy5kYXlzKCkvNyl9LG1zLm1vbnRocz1IdSxtcy55''@;'; put 'put ''ZWFycz1ydSxtcy5odW1hbml6ZT1mdW5jdGlvbiBFdihDZSxLZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBkbixxbixtdD0hMSxJdD1WYztyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIENlJiYoS2U9Q2UsQ2U9ITEpLCJib29s''@;'; put 'put ''ZWFuIj09dHlwZW9mIENlJiYobXQ9Q2UpLCJvYmplY3QiPT10eXBlb2YgS2UmJihJdD1PYmplY3QuYXNzaWduKHt9LFZjLEtlKSxudWxsIT1LZS5zJiZudWxsPT1LZS5zcyYmKEl0LnNzPUtlLnMtMSkpLHFuPWZ1bmN0aW9uICR3KENlLEtlLG10LEl0KXt2YXIgZG49SmwoQ2UpLmFicygpLHFu''@;'; put 'put ''PUowKGRuLmFzKCJzIikpLGlpPUowKGRuLmFzKCJtIikpLElhPUowKGRuLmFzKCJoIikpLFNvPUowKGRuLmFzKCJkIikpLGZzPUowKGRuLmFzKCJNIikpLE51PUowKGRuLmFzKCJ3IikpLGRkPUowKGRuLmFzKCJ5IikpLGMyPXFuPD1tdC5zcyYmWyJzIixxbl18fHFuPG10LnMmJlsic3MiLHFu''@;'; put 'put ''XXx8aWk8PTEmJlsibSJdfHxpaTxtdC5tJiZbIm1tIixpaV18fElhPD0xJiZbImgiXXx8SWE8bXQuaCYmWyJoaCIsSWFdfHxTbzw9MSYmWyJkIl18fFNvPG10LmQmJlsiZGQiLFNvXTtyZXR1cm4gbnVsbCE9bXQudyYmKGMyPWMyfHxOdTw9MSYmWyJ3Il18fE51PG10LncmJlsid3ciLE51XSks''@;'; put 'put ''KGMyPWMyfHxmczw9MSYmWyJNIl18fGZzPG10Lk0mJlsiTU0iLGZzXXx8ZGQ8PTEmJlsieSJdfHxbInl5IixkZF0pWzJdPUtlLGMyWzNdPStDZT4wLGMyWzRdPUl0LHg0LmFwcGx5KG51bGwsYzIpfSh0aGlzLCFtdCxJdCxkbj10aGlzLmxvY2FsZURhdGEoKSksbXQmJihxbj1kbi5wYXN0RnV0''@;'; put 'put ''dXJlKCt0aGlzLHFuKSksZG4ucG9zdGZvcm1hdChxbil9LG1zLnRvSVNPU3RyaW5nPVc2LG1zLnRvU3RyaW5nPVc2LG1zLnRvSlNPTj1XNixtcy5sb2NhbGU9S2EsbXMubG9jYWxlRGF0YT1iZixtcy50b0lzb1N0cmluZz1TZSgidG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2Ug''@;'; put 'put ''dXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscykiLFc2KSxtcy5sYW5nPVZyLHNlKCJYIiwwLDAsInVuaXgiKSxzZSgieCIsMCwwLCJ2YWx1ZU9mIiksUm4oIngiLFF0KSxSbigiWCIsL1srLV0/XGQrKFwuXGR7MSwzfSk/LyksaHQoIlgiLGZ1bmN0aW9uKENl''@;'; put 'put ''LEtlLG10KXttdC5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdChDZSkpfSksaHQoIngiLGZ1bmN0aW9uKENlLEtlLG10KXttdC5fZD1uZXcgRGF0ZShUdChDZSkpfSksXy52ZXJzaW9uPSIyLjMwLjEiLGZ1bmN0aW9uIGcoQ2Upe0k9Q2V9KHNsKSxfLmZuPXppLF8ubWluPWZ1bmN0aW9uIEQx''@;'; put 'put ''KCl7cmV0dXJuIG5oKCJpc0JlZm9yZSIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxfLm1heD1mdW5jdGlvbiB4cigpe3JldHVybiBuaCgiaXNBZnRlciIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxfLm5vdz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdz9EYXRlLm5vdygp''@;'; put 'put ''OituZXcgRGF0ZX0sXy51dGM9VSxfLnVuaXg9ZnVuY3Rpb24gcjIoQ2Upe3JldHVybiBzbCgxZTMqQ2UpfSxfLm1vbnRocz1mdW5jdGlvbiB3NChDZSxLZSl7cmV0dXJuIEVjKENlLEtlLCJtb250aHMiKX0sXy5pc0RhdGU9TixfLmxvY2FsZT11cixfLmludmFsaWQ9SixfLmR1cmF0aW9uPUps''@;'; put 'put ''LF8uaXNNb21lbnQ9X2UsXy53ZWVrZGF5cz1mdW5jdGlvbiBLaShDZSxLZSxtdCl7cmV0dXJuIGEwKENlLEtlLG10LCJ3ZWVrZGF5cyIpfSxfLnBhcnNlWm9uZT1mdW5jdGlvbiBHdygpe3JldHVybiBzbC5hcHBseShudWxsLGFyZ3VtZW50cykucGFyc2Vab25lKCl9LF8ubG9jYWxlRGF0YT10''@;'; put 'put ''YSxfLmlzRHVyYXRpb249bDUsXy5tb250aHNTaG9ydD1mdW5jdGlvbiBVbChDZSxLZSl7cmV0dXJuIEVjKENlLEtlLCJtb250aHNTaG9ydCIpfSxfLndlZWtkYXlzTWluPWZ1bmN0aW9uIGZjKENlLEtlLG10KXtyZXR1cm4gYTAoQ2UsS2UsbXQsIndlZWtkYXlzTWluIil9LF8uZGVmaW5lTG9j''@;'; put 'put ''YWxlPWJpLF8udXBkYXRlTG9jYWxlPWZ1bmN0aW9uIEZyKENlLEtlKXtpZihudWxsIT1LZSl7dmFyIG10LEl0LGRuPWpsO251bGwhPUhvW0NlXSYmbnVsbCE9SG9bQ2VdLnBhcmVudExvY2FsZT9Ib1tDZV0uc2V0KHgoSG9bQ2VdLl9jb25maWcsS2UpKToobnVsbCE9KEl0PWJuKENlKSkmJihk''@;'; put 'put ''bj1JdC5fY29uZmlnKSxLZT14KGRuLEtlKSxudWxsPT1JdCYmKEtlLmFiYnI9Q2UpLChtdD1uZXcgQyhLZSkpLnBhcmVudExvY2FsZT1Ib1tDZV0sSG9bQ2VdPW10KSx1cihDZSl9ZWxzZSBudWxsIT1Ib1tDZV0mJihudWxsIT1Ib1tDZV0ucGFyZW50TG9jYWxlPyhIb1tDZV09SG9bQ2VdLnBh''@;'; put 'put ''cmVudExvY2FsZSxDZT09PXVyKCkmJnVyKENlKSk6bnVsbCE9SG9bQ2VdJiZkZWxldGUgSG9bQ2VdKTtyZXR1cm4gSG9bQ2VdfSxfLmxvY2FsZXM9ZnVuY3Rpb24gb2EoKXtyZXR1cm4gVChIbyl9LF8ud2Vla2RheXNTaG9ydD1mdW5jdGlvbiBVYShDZSxLZSxtdCl7cmV0dXJuIGEwKENlLEtl''@;'; put 'put ''LG10LCJ3ZWVrZGF5c1Nob3J0Iil9LF8ubm9ybWFsaXplVW5pdHM9X3QsXy5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbiBLdyhDZSl7cmV0dXJuIHZvaWQgMD09PUNlP0owOiJmdW5jdGlvbiI9PXR5cGVvZiBDZSYmKEowPUNlLCEwKX0sXy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQ9ZnVu''@;'; put 'put ''Y3Rpb24gVTYoQ2UsS2Upe3JldHVybiB2b2lkIDAhPT1WY1tDZV0mJih2b2lkIDA9PT1LZT9WY1tDZV06KFZjW0NlXT1LZSwicyI9PT1DZSYmKFZjLnNzPUtlLTEpLCEwKSl9LF8uY2FsZW5kYXJGb3JtYXQ9ZnVuY3Rpb24gZDUoQ2UsS2Upe3ZhciBtdD1DZS5kaWZmKEtlLCJkYXlzIiwhMCk7''@;'; put 'put ''cmV0dXJuIG10PC02PyJzYW1lRWxzZSI6bXQ8LTE/Imxhc3RXZWVrIjptdDwwPyJsYXN0RGF5IjptdDwxPyJzYW1lRGF5IjptdDwyPyJuZXh0RGF5IjptdDw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0sXy5wcm90b3R5cGU9emksXy5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1N''@;'; put 'put ''LUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJI''@;'; put 'put ''SDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0sX30oKX0sNzgzNzU6ZnVuY3Rpb24odWUpe3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dHlwZW9mIGdsb2JhbFRoaXM8InUifHx0eXBlb2Ygd2luZG93PCJ1Inx8dHlwZW9mIGdsb2JhbDwi''@;'; put 'put ''dSImJmdsb2JhbDt2YXIgeT17fSxJPXtleHBvcnRzOnt9fTtJLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFn''@;'; put 'put ''OiJiZyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQxOCIsbWlsbGlvbjoiXHUwNDEwIixiaWxsaW9uOiJNIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiJcdTA0M2JcdTA0''@;'; put 'put ''MzIuIixjb2RlOiJCR04ifX0pO3ZhciBfPUkuZXhwb3J0cyxnPXtleHBvcnRzOnt9fTtnLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpW''@;'; put 'put ''dH0oe2xhbmd1YWdlVGFnOiJjcy1DWiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJceGEwIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRpcy4iLG1pbGxpb246Im1pbC4iLGJpbGxpb246Im1sZC4iLHRyaWxsaW9uOiJiaWwuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiS1x1MDEwZCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNaSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQ3VycmVuY3k6ITAsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50''@;'; put 'put ''aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KTt2YXIgQj1nLmV4cG9ydHMsdz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGEtREsiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaW8iLGJpbGxpb246Im1pYSIsdHJpbGxpb246''@;'; put 'put ''ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkRLSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19KX0odyk7dmFyIFA9dy5leHBvcnRzLEY9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQi''@;'; put 'put ''KT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRlLUFUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fSl9KEYpO3ZhciBPPUYuZXhwb3J0cyx6PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJcdTIwMTkiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlv''@;'; put 'put ''bjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fSh6KTt2YXIgTj16LmV4cG9ydHMsTD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1''@;'; put 'put ''bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGUtREUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNaSIsYmlsbGlvbjoiTWEiLHRyaWxsaW9uOiJCaSJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0b3RhbExlbmd0aDo0LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShMKTt2YXIgSz1MLmV4cG9ydHMsVT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGUtTEkiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiJyIsZGVj''@;'; put 'put ''aW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJl''@;'; put 'put ''bmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhO''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oVSk7dmFyIFc9VS5leHBvcnRzLFk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0''@;'; put 'put ''dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVsIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91''@;'; put 'put ''c2FuZDoiXHUwM2M3IixtaWxsaW9uOiJcdTAzYjUiLGJpbGxpb246Ilx1MDNiNCIsdHJpbGxpb246Ilx1MDNjNCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oWSk7dmFyIHE9WS5leHBvcnRzLGVlPXtleHBv''@;'; put 'put ''cnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1BVSIs''@;'; put 'put ''ZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1K''@;'; put 'put ''cj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkFVRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZWUpO3ZhciBKPWVlLmV4cG9ydHMsbmU9e2V4cG9ydHM6e319OyFmdW5j''@;'; put 'put ''dGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVuLUdCIixkZWxpbWl0ZXJzOnt0''@;'; put 'put ''aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpyPyJzdCI6Mj09PUpy''@;'; put 'put ''PyJuZCI6Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhMyIscG9zaXRpb246InByZWZpeCIsY29kZToiR0JQIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITEsc3BhY2VTZXBhcmF0ZWRDdXJy''@;'; put 'put ''ZW5jeTohMSxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiExLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkOiExLG1h''@;'; put 'put ''bnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkOiExLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fShuZSk7dmFyIGllPW5lLmV4cG9ydHMsbGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5k''@;'; put 'put ''ZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVuLUlFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3Jl''@;'; put 'put ''dHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpyPyJzdCI6Mj09PUpyPyJuZCI6Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJFVVIifX0pfShsZSk7dmFyIG1lPWxlLmV4cG9ydHMsX2U9e2V4cG9ydHM6e319''@;'; put 'put ''OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVuLU5aIixkZWxpbWl0''@;'; put 'put ''ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpyPyJzdCI6''@;'; put 'put ''Mj09PUpyPyJuZCI6Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiTlpEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRD''@;'; put 'put ''dXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1''@;'; put 'put ''cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShfZSk7dmFyIFRlPV9lLmV4cG9ydHMsU2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihp''@;'; put 'put ''cix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVuLVpBIixkZWxpbWl0ZXJzOnt0aG91c2Fu''@;'; put 'put ''ZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpyPyJzdCI6Mj09PUpyPyJuZCI6''@;'; put 'put ''Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiUiIscG9zaXRpb246InByZWZpeCIsY29kZToiWkFSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50''@;'; put 'put ''aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShTZSk7dmFyIGplPVNlLmV4cG9ydHMsVj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtQVIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1h''@;'; put 'put ''bDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpy''@;'; put 'put ''PyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkFSUyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVu''@;'; put 'put ''Y3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0o''@;'; put 'put ''Vik7dmFyIHA9Vi5leHBvcnRzLGI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0''@;'; put 'put ''OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4g''@;'; put 'put ''MT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkNMUCJ9LGN1cnJlbmN5Rm9ybWF0OntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''Iix0aG91c2FuZFNlcGFyYXRlZDohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTow''@;'; put 'put ''fX19KX0oYik7dmFyIHg9Yi5leHBvcnRzLEM9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5k''@;'; put 'put ''ZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDty''@;'; put 'put ''ZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''bWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEMpO3ZhciBUPUMuZXhwb3J0cyxIPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1DUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmls''@;'; put 'put ''bGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTEiLHBvc2l0aW9uOiJwb3N0''@;'; put 'put ''Zml4Iixjb2RlOiJDUkMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEgpO3ZhciBqPUguZXhwb3J0cyxFPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1FUyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFs''@;'; put 'put ''OiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/''@;'; put 'put ''InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1''@;'; put 'put ''cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19''@;'; put 'put ''fSl9KEUpO3ZhciBtPUUuZXhwb3J0cyxBPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVm''@;'; put 'put ''YXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1NWCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oVnQpe2xldCBKcj1W''@;'; put 'put ''dCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJNWE4ifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShBKTt2YXIgYWU9QS5leHBvcnRzLHRlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1OSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0''@;'; put 'put ''cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJDJCIscG9zaXRpb246InByZWZp''@;'; put 'put ''eCIsY29kZToiTklPIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh0ZSk7dmFyIHNlPXRlLmV4cG9ydHMsd2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLVBFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2lt''@;'; put 'put ''YWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1K''@;'; put 'put ''cj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IlMvLiIscG9zaXRpb246InByZWZpeCIsY29kZToiUEVOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJy''@;'; put 'put ''ZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fSh3ZSk7dmFyIFVlPXdlLmV4cG9ydHMsSmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5k''@;'; put 'put ''ZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLVBSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDty''@;'; put 'put ''ZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSmUpO3ZhciBvdD1KZS5leHBvcnRzLHhlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1TViIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxp''@;'; put 'put ''b246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9s''@;'; put 'put ''OiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJTVkMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3Rv''@;'; put 'put ''dGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21h''@;'; put 'put ''bnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHhlKTt2YXIgdmU9eGUuZXhwb3J0cyxYZT17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXQtRUUiLGRlbGltaXRlcnM6''@;'; put 'put ''e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0dWgiLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoidHJsIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlv''@;'; put 'put ''bjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShYZSk7dmFyIHplPVhlLmV4cG9ydHMsRGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4''@;'; put 'put ''YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZhLUlSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6''@;'; put 'put ''Ilx1MDYwYyIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA2NDdcdTA2MzJcdTA2MjdcdTA2MzEiLG1pbGxpb246Ilx1MDY0NVx1MDZjY1x1MDY0NFx1MDZjY1x1MDY0OFx1MDY0NiIsYmlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjI3XHUwNjMx''@;'; put 'put ''XHUwNjJmIix0cmlsbGlvbjoiXHUwNjJhXHUwNjMxXHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJcdTA2MjdcdTA2NDUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdWZkZmMiLGNvZGU6IklSUiJ9fSl9KERlKTt2YXIgRmU9RGUuZXhwb3J0''@;'; put 'put ''cyxPZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRh''@;'; put 'put ''ZzoiZmktRkkiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNIixiaWxsaW9uOiJHIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1''@;'; put 'put ''MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7''@;'; put 'put ''dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7''@;'; put 'put ''bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oT2UpO3ZhciBJZT1PZS5leHBvcnRzLFZlPXtleHBvcnRzOnt9fTsh''@;'; put 'put ''ZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmaWwtUEgiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0Ijoy''@;'; put 'put ''PT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjEiLGNvZGU6IlBIUCJ9fSl9KFZlKTt2YXIga2U9VmUuZXhwb3J0cyxBZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0''@;'; put 'put ''Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZnItQ0EiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJr''@;'; put 'put ''IixtaWxsaW9uOiJNIixiaWxsaW9uOiJHIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6VnQ9PjE9PT1WdD8iZXIiOiJceGU4bWUiLHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShBZSk7dmFyIF90PUFl''@;'; put 'put ''LmV4cG9ydHMsbnQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFu''@;'; put 'put ''Z3VhZ2VUYWc6ImZyLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT4xPT09VnQ/ImVyIjoiXHhlOG1lIixjdXJyZW5jeTp7''@;'; put 'put ''c3ltYm9sOiJDSEYiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJE''@;'; put 'put ''aWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3Vy''@;'; put 'put ''cmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG50KTt2YXIgUWU9bnQuZXhwb3J0cyx1bj17ZXhwb3J0''@;'; put 'put ''czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZnItRlIiLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNIixiaWxsaW9uOiJNcmQiLHRyaWxsaW9uOiJiaWxsaW9uIn0sb3JkaW5hbDpWdD0+MT09PVZ0PyJlciI6Ilx4ZThtZSIsYnl0ZXM6e2JpbmFyeVN1ZmZpeGVz''@;'; put 'put ''OlsibyIsIktpbyIsIk1pbyIsIkdpbyIsIlRpbyIsIlBpbyIsIkVpbyIsIlppbyIsIllpbyJdLGRlY2ltYWxTdWZmaXhlczpbIm8iLCJLbyIsIk1vIiwiR28iLCJUbyIsIlBvIiwiRW8iLCJabyIsIllvIl19LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNv''@;'; put 'put ''ZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0odW4pO3ZhciB5dD11bi5leHBvcnRzLE10PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJoZS1JTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIu''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDVkMFx1MDVkY1x1MDVlMyIsbWlsbGlvbjoiXHUwNWRlXHUwNWQ5XHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWRmIixiaWxsaW9uOiJcdTA1ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDBcdTA1ZThcdTA1ZDMiLHRyaWxsaW9uOiJcdTA1ZDhc''@;'; put 'put ''dTA1ZThcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWEiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IklMUyJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToy''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oTXQpO3ZhciBEdD1NdC5leHBvcnRzLGl0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJodS1IVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6IkUiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246''@;'; put 'put ''IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJGdCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkhVRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19KX0oaXQpO3ZhciAkZT1pdC5leHBvcnRzLHR0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZh''@;'; put 'put ''dWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJpZCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InIiLG1pbGxpb246ImoiLGJpbGxpb246Im0iLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiUnAiLGNvZGU6IklEUiJ9fSl9KHR0KTt2YXIgSGU9dHQuZXhwb3J0cyx1dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaXQtQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiJyIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxp''@;'; put 'put ''b246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGIwIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixjb2RlOiJDSEYifX0pfSh1dCk7dmFyIHF0PXV0LmV4cG9ydHMsUnQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Iml0LUlUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0aG91c2FuZDoibWlsYSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5''@;'; put 'put ''Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxm''@;'; put 'put ''dWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0Rl''@;'; put 'put ''Y2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oUnQpO3ZhciBQdD1SdC5leHBvcnRzLGNpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3Jl''@;'; put 'put ''dHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJqYS1KUCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7''@;'; put 'put ''dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJceGE1Iixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJKUFki''@;'; put 'put ''fSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZl''@;'; put 'put ''cmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGNpKTt2YXIgUXQ9Y2kuZXhwb3J0cyxzbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFz''@;'; put 'put ''T3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoia28tS1IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdWNjOWMiLG1pbGxpb246Ilx1YmMzMVx1YjljYyIsYmls''@;'; put 'put ''bGlvbjoiXHVjMmVkXHVjNWI1Iix0cmlsbGlvbjoiXHVjNzdjXHVjODcwIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGE5Iixjb2RlOiJLUFcifX0pfShzbik7dmFyIFJpPXNuLmV4cG9ydHMsaG49e2V4cG9ydHM6e319OyFmdW5jdGlvbihp''@;'; put 'put ''cix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Imx2LUxWIixkZWxpbWl0ZXJzOnt0aG91c2Fu''@;'; put 'put ''ZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidFx1MDE2YmtzdC4iLG1pbGxpb246Im1pbGouIixiaWxsaW9uOiJtbGpyZC4iLHRyaWxsaW9uOiJ0cmlsai4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMi''@;'; put 'put ''LHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFs''@;'; put 'put ''TGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRp''@;'; put 'put ''c3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGhuKTt2YXIgZnQ9aG4uZXhwb3J0cyxPcj17ZXhwb3J0czp7fX07IWZ1bmN0''@;'; put 'put ''aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibmItTk8iLGRlbGltaXRlcnM6e3Ro''@;'; put 'put ''b3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246ImIifSxvcmRpbmFsOigpPT4iIixjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik5PSyJ9LGN1cnJl''@;'; put 'put ''bmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhO''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oT3IpO3ZhciBXdD1Pci5leHBvcnRzLEF0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQp''@;'; put 'put ''e3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJuYiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7''@;'; put 'put ''dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixjb2RlOiJOT0sifX0pfShBdCk7dmFyIFJuPUF0LmV4cG9ydHMsc3Q9e2V4cG9ydHM6e319OyFmdW5j''@;'; put 'put ''dGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5sLUJFIixkZWxpbWl0ZXJzOnt0''@;'; put 'put ''aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwMDtyZXR1cm4gMCE9PVZ0JiZKcjw9MXx8OD09PUpyfHxKcj49MjA/InN0''@;'; put 'put ''ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0''@;'; put 'put ''czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5j''@;'; put 'put ''eTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oc3QpO3ZhciBVdD1zdC5leHBvcnRzLHJpPXtleHBvcnRzOnt9''@;'; put 'put ''fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJubC1OTCIsZGVsaW1p''@;'; put 'put ''dGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibXJkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDA7cmV0dXJuIDAhPT1WdCYmSnI8PTF8fDg9PT1Kcnx8SnI+''@;'; put 'put ''PTIwPyJzdGUiOiJkZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InByZWZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToh''@;'; put 'put ''MCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShyaSk7''@;'; put 'put ''dmFyIFdlPXJpLmV4cG9ydHMsVHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0''@;'; put 'put ''OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5uIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3Vy''@;'; put 'put ''cmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KFR0KTt2YXIgbnI9VHQuZXhwb3J0cyxodD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicGwtUEwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0eXMuIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJp''@;'; put 'put ''bGxpb246ImJsbiJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiIgelx1MDE0MiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlBMTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19KX0oaHQpO3ZhciB4dD1odC5leHBvcnRzLGpuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZh''@;'; put 'put ''dWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJwdC1CUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbCIsbWlsbGlvbjoibWlsaFx4ZjVlcyIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJSJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQlJMIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0''@;'; put 'put ''czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oam4pO3ZhciBybj1qbi5leHBvcnRzLHp0''@;'; put 'put ''PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJw''@;'; put 'put ''dC1QVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUy''@;'; put 'put ''MGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oenQpO3ZhciBoaT16dC5leHBvcnRzLGNuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJyby1STyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIs''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1paSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIgbGVpIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUk9OIn0sY3Vy''@;'; put 'put ''cmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6''@;'; put 'put ''ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0''@;'; put 'put ''aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShjbik7dmFyIGZuPWNuLmV4cG9ydHMsSWk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShW''@;'; put 'put ''dCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRp''@;'; put 'put ''b25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KElpKTt2YXIgWHQ9SWkuZXhwb3J0cyxlbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQm''@;'; put 'put ''JlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicnUtUlUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5k''@;'; put 'put ''OiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUwNDQwXHUwNDQzXHUwNDMxLiIscG9zaXRpb246InBvc3RmaXgi''@;'; put 'put ''LGNvZGU6IlJVQiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdp''@;'; put 'put ''dGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFs''@;'; put 'put ''czp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGVuKTt2YXIgdWE9ZW4uZXhwb3J0cyxFaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4g''@;'; put 'put ''VnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicnUtVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGI0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVUFI''@;'; put 'put ''In0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oRWkpO3ZhciB2cj1FaS5leHBvcnRzLFduPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19l''@;'; put 'put ''c01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJzay1TSyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJceGEwIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRp''@;'; put 'put ''cy4iLG1pbGxpb246Im1pbC4iLGJpbGxpb246Im1sZC4iLHRyaWxsaW9uOiJiaWwuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lG''@;'; put 'put ''b3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1''@;'; put 'put ''bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShXbik7dmFyICRpPVduLmV4cG9ydHMsZWk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0''@;'; put 'put ''dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InNsIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91''@;'; put 'put ''c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fSl9KGVpKTt2YXIgUXI9ZWkuZXhwb3J0cyxWaT17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoic3ItQ3lybC1SUyIsZGVsaW1p''@;'; put 'put ''dGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOigpPT4iLiIsY3VycmVuY3k6e3N5bWJv''@;'; put 'put ''bDoiUlNEIixjb2RlOiJSU0QifX0pfShWaSk7dmFyIE5pPVZpLmV4cG9ydHMsRGE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InN2LVNFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoiTSIsYmlsbGlvbjoibWQiLHRyaWxsaW9uOiJ0bWQifSxvcmRp''@;'; put 'put ''bmFsOigpPT4iIixjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlNFSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6''@;'; put 'put ''e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KERhKTt2YXIgTHI9RGEuZXhwb3J0cyxXaT17ZXhwb3J0czp7fX07''@;'; put 'put ''IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoidGgtVEgiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTBlMWVcdTBlMzFcdTBlMTkiLG1pbGxpb246Ilx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSIsYmlsbGlvbjoiXHUwZTFlXHUwZTMxXHUwZTE5XHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5Iix0''@;'; put 'put ''cmlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5XHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUwZTNmIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVEhCIn0sY3VycmVuY3lGb3JtYXQ6e3Ro''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oV2kpO3ZhciBwYT1XaS5leHBvcnRzLFFuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24oKXtjb25zdCBWdD17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6''@;'; put 'put ''IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMiLDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNceGZjIiw2OiInbmNcdTAxMzEiLDk6Iid1bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNDA6IidcdTAxMzFu''@;'; put 'put ''Y1x1MDEzMSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O3JldHVybiBmdW5jdGlvbiB1aShKcil7cmV0dXJuIEpyJiZKci5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSnIsImRlZmF1bHQiKT9Kci5kZWZhdWx0Okpy''@;'; put 'put ''fSh7bGFuZ3VhZ2VUYWc6InRyLVRSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiYmluIixtaWxsaW9uOiJtaWx5b24iLGJpbGxpb246Im1pbHlhciIsdHJpbGxpb246InRyaWx5b24ifSxvcmRpbmFsOkpyPT57aWYoMD09''@;'; put 'put ''PUpyKXJldHVybiInXHUwMTMxbmNcdTAxMzEiO2xldCBiMD1KciUxMDtyZXR1cm4gVnRbYjBdfHxWdFtKciUxMDAtYjBdfHxWdFtKcj49MTAwPzEwMDpudWxsXX0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGJhIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVFJZIn0sY3VycmVuY3lGb3JtYXQ6''@;'; put 'put ''e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRo''@;'; put 'put ''VHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6''@;'; put 'put ''e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSgpfShRbik7dmFyIGxhPVFuLmV4cG9ydHMseWE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJu''@;'; put 'put ''IFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InVrLVVBIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91''@;'; put 'put ''c2FuZDoiXHUwNDQyXHUwNDM4XHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0NDBcdTA0MzQiLHRyaWxsaW9uOiJcdTA0MzFcdTA0M2JcdTA0M2QifSxvcmRpbmFsOigpPT4iIixjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBv''@;'; put 'put ''c2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2''@;'; put 'put ''ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxm''@;'; put 'put ''dWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh5YSk7dmFyIExhPXlhLmV4cG9ydHMsRmE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InpoLUNOIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NGViZiIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgi''@;'; put 'put ''LGNvZGU6IkNOWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdp''@;'; put 'put ''dGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEZhKTt2YXIgdGk9RmEuZXhwb3J0cyxnbz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiemgtTU8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1ODQyYyIsYmlsbGlvbjoiXHU1MzQxXHU1''@;'; put 'put ''MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiTU9QIixjb2RlOiJNT1AifX0pfShnbyk7dmFyIE5zPWdvLmV4cG9ydHMsYmw9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InpoLVNHIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NGViZiIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLGNvZGU6IlNHRCJ9fSl9KGJsKTt2''@;'; put 'put ''YXIgcHU9YmwuZXhwb3J0cyxMYz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6''@;'; put 'put ''VnR9KHtsYW5ndWFnZVRhZzoiemgtVFciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1ODQyYyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0sb3Jk''@;'; put 'put ''aW5hbDpmdW5jdGlvbigpe3JldHVybiJcdTdiMmMifSxjdXJyZW5jeTp7c3ltYm9sOiJOVCQiLGNvZGU6IlRXRCJ9fSl9KExjKTt2YXIgRDA9TGMuZXhwb3J0cztyZXR1cm4gZnVuY3Rpb24oaXIpe2lyLmJnPV8saXJbImNzLUNaIl09QixpclsiZGEtREsiXT1QLGlyWyJkZS1BVCJdPU8saXJb''@;'; put 'put ''ImRlLUNIIl09TixpclsiZGUtREUiXT1LLGlyWyJkZS1MSSJdPVcsaXIuZWw9cSxpclsiZW4tQVUiXT1KLGlyWyJlbi1HQiJdPWllLGlyWyJlbi1JRSJdPW1lLGlyWyJlbi1OWiJdPVRlLGlyWyJlbi1aQSJdPWplLGlyWyJlcy1BUiJdPXAsaXJbImVzLUNMIl09eCxpclsiZXMtQ08iXT1ULGly''@;'; put 'put ''WyJlcy1DUiJdPWosaXJbImVzLUVTIl09bSxpclsiZXMtTVgiXT1hZSxpclsiZXMtTkkiXT1zZSxpclsiZXMtUEUiXT1VZSxpclsiZXMtUFIiXT1vdCxpclsiZXMtU1YiXT12ZSxpclsiZXQtRUUiXT16ZSxpclsiZmEtSVIiXT1GZSxpclsiZmktRkkiXT1JZSxpclsiZmlsLVBIIl09a2UsaXJb''@;'; put 'put ''ImZyLUNBIl09X3QsaXJbImZyLUNIIl09UWUsaXJbImZyLUZSIl09eXQsaXJbImhlLUlMIl09RHQsaXJbImh1LUhVIl09JGUsaXIuaWQ9SGUsaXJbIml0LUNIIl09cXQsaXJbIml0LUlUIl09UHQsaXJbImphLUpQIl09UXQsaXJbImtvLUtSIl09UmksaXJbImx2LUxWIl09ZnQsaXJbIm5iLU5P''@;'; put 'put ''Il09V3QsaXIubmI9Um4saXJbIm5sLUJFIl09VXQsaXJbIm5sLU5MIl09V2UsaXIubm49bnIsaXJbInBsLVBMIl09eHQsaXJbInB0LUJSIl09cm4saXJbInB0LVBUIl09aGksaXJbInJvLVJPIl09Zm4saXIucm89WHQsaXJbInJ1LVJVIl09dWEsaXJbInJ1LVVBIl09dnIsaXJbInNrLVNLIl09''@;'; put 'put ''JGksaXIuc2w9UXIsaXJbInNyLUN5cmwtUlMiXT1OaSxpclsic3YtU0UiXT1McixpclsidGgtVEgiXT1wYSxpclsidHItVFIiXT1sYSxpclsidWstVUEiXT1MYSxpclsiemgtQ04iXT10aSxpclsiemgtTU8iXT1OcyxpclsiemgtU0ciXT1wdSxpclsiemgtVFciXT1EMH0oeSksZnVuY3Rpb24g''@;'; put 'put ''WChpcil7cmV0dXJuIGlyJiZpci5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXIsImRlZmF1bHQiKT9pci5kZWZhdWx0OmlyfSh5KX0oKX0sODMxMzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0OTYwOSk7WC5jZXJ0aWZpY2F0ZT15''@;'; put 'put ''KDk0NzcyKTt2YXIgXz1JLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZh''@;'; put 'put ''dGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtYLlJTQVBy''@;'; put 'put ''aXZhdGVLZXk9Xzt2YXIgZz1JLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7WC5SU0FQdWJsaWNLZXk9Zzt2YXIgQj1JLmRlZmluZSgiQWxn''@;'; put 'put ''b3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIp''@;'; put 'put ''LnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGht''@;'; put 'put ''IikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7WC5QdWJsaWNLZXk9dzt2YXIgUD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3Jp''@;'; put 'put ''dGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guUHJpdmF0ZUtleT1QO3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCku''@;'; put 'put ''b2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0''@;'; put 'put ''aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guRW5jcnlwdGVkUHJpdmF0''@;'; put 'put ''ZUtleT1GO3ZhciBPPUkuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9r''@;'; put 'put ''ZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtYLkRTQVByaXZhdGVLZXk9TyxYLkRTQXBhcmFtPUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2lj''@;'; put 'put ''ZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLE49SS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5v''@;'; put 'put ''cHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6KSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtYLkVDUHJpdmF0ZUtleT1OLFguc2lnbmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhp''@;'; put 'put ''cy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSw5NDc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ5NjA5KSxfPUkuZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRo''@;'; put 'put ''aXMuZ2VudGltZSgpfSl9KSxnPUkuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLEI9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksUD1JLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKGcpfSksRj1JLmRlZmlu''@;'; put 'put ''ZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihQKX0pLE89SS5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKEYpfSl9KSx6PUkuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlz''@;'; put 'put ''LmtleSgibm90QmVmb3JlIikudXNlKF8pLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShfKSl9KSxOPUkuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZigh''@;'; put 'put ''MSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLEw9SS5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIiku''@;'; put 'put ''aW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShCKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKE8pLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZSh6KSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShPKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UodyksdGhpcy5rZXko''@;'; put 'put ''Imlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKE4pLm9wdGlvbmFsKCkp''@;'; put 'put ''fSksSz1JLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShMKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigp''@;'; put 'put ''KX0pO3VlLmV4cG9ydHM9S30sODk0NzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylb''@;'; put 'put ''XG5ccl0rL20sXz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sZz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxCPXkoMTgyMTEpLHc9eSg0MzM4OCksUD15''@;'; put 'put ''KDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe3ZhciBMLHo9Ri50b1N0cmluZygpLE49ei5tYXRjaChJKTtpZihOKXt2YXIgVT0iYWVzIitOWzFdLFc9UC5mcm9tKE5bMl0sImhleCIpLFk9UC5mcm9tKE5bM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxx''@;'; put 'put ''PUIoTyxXLnNsaWNlKDAsOCkscGFyc2VJbnQoTlsxXSwxMCkpLmtleSxlZT1bXSxKPXcuY3JlYXRlRGVjaXBoZXJpdihVLHEsVyk7ZWUucHVzaChKLnVwZGF0ZShZKSksZWUucHVzaChKLmZpbmFsKCkpLEw9UC5jb25jYXQoZWUpfWVsc2V7dmFyIEs9ei5tYXRjaChnKTtMPVAuZnJvbShLWzJd''@;'; put 'put ''LnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzp6Lm1hdGNoKF8pWzFdLGRhdGE6TH19fSw2NTY2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDgzMTM4KSxfPXkoMTU1NzkpLGc9eSg4OTQ3MiksQj15KDQzMzg4KSx3PXkoOTMzOTcpLFA9eSgyNzA1''@;'; put 'put ''NCkuQnVmZmVyO2Z1bmN0aW9uIE8oeil7dmFyIE47Im9iamVjdCI9PXR5cGVvZiB6JiYhUC5pc0J1ZmZlcih6KSYmKE49ei5wYXNzcGhyYXNlLHo9ei5rZXkpLCJzdHJpbmciPT10eXBlb2YgeiYmKHo9UC5mcm9tKHopKTt2YXIgVyxZLEw9Zyh6LE4pLEs9TC50YWcsVT1MLmRhdGE7c3dpdGNo''@;'; put 'put ''KEspe2Nhc2UiQ0VSVElGSUNBVEUiOlk9SS5jZXJ0aWZpY2F0ZS5kZWNvZGUoVSwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goWXx8KFk9SS5QdWJsaWNLZXkuZGVjb2RlKFUsImRlciIpKSxXPVkuYWxnb3JpdGhtLmFs''@;'; put 'put ''Z29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoWS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBZLnN1YmplY3RQcml2YXRlS2V5PVkuc3ViamVj''@;'; put 'put ''dFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6WX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOlkuYWxnb3JpdGht''@;'; put 'put ''LnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOlU9ZnVuY3Rpb24gRih6LE4pe3ZhciBMPXouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LEs9cGFyc2VJbnQoei5hbGdvcml0''@;'; put 'put ''aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLFU9X1t6LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sVz16LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixZPXouc3ViamVjdFByaXZhdGVLZXkscT1wYXJzZUludChVLnNwbGl0''@;'; put 'put ''KCItIilbMV0sMTApLzgsZWU9dy5wYmtkZjJTeW5jKE4sTCxLLHEsInNoYTEiKSxKPUIuY3JlYXRlRGVjaXBoZXJpdihVLGVlLFcpLG5lPVtdO3JldHVybiBuZS5wdXNoKEoudXBkYXRlKFkpKSxuZS5wdXNoKEouZmluYWwoKSksUC5jb25jYXQobmUpfShVPUkuRW5jcnlwdGVkUHJpdmF0ZUtl''@;'; put 'put ''eS5kZWNvZGUoVSwiZGVyIiksTik7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFc9KFk9SS5Qcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVj''@;'; put 'put ''b2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpZLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5OkkuRUNQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKS5wcml2YXRlS2V5fTtjYXNlIjEu''@;'; put 'put ''Mi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gWS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtu''@;'; put 'put ''b3duIGtleSBpZCAiK1cpfWNhc2UiUlNBIFBVQkxJQyBLRVkiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57''@;'; put 'put ''dHlwZToiZHNhIixwYXJhbXM6SS5EU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJue2N1cnZlOihVPUkuRUNQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OlUucHJpdmF0ZUtleX07ZGVm''@;'; put 'put ''YXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IHR5cGUgIitLKX19Ty5zaWduYXR1cmU9SS5zaWduYXR1cmUsdWUuZXhwb3J0cz1PfSw5MzM5NzoodWUsWCx5KT0+e1gucGJrZGYyPXkoODI2ODUpLFgucGJrZGYyU3luYz15KDU5MTExKX0sODI2ODU6KHVlLFgseSk9Pnt2YXIgUCxM''@;'; put 'put ''LEk9eSgyNzA1NCkuQnVmZmVyLF89eSg4NjExMSksZz15KDQ1MzkyKSxCPXkoNTkxMTEpLHc9eSg3NjY0MyksRj1nbG9iYWwuY3J5cHRvJiZnbG9iYWwuY3J5cHRvLnN1YnRsZSxPPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNo''@;'; put 'put ''YS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSx6PVtdO2Z1bmN0aW9uIEsoKXtyZXR1cm4gTHx8KEw9Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLm5leHRUaWNrP2ds''@;'; put 'put ''b2JhbC5wcm9jZXNzLm5leHRUaWNrOmdsb2JhbC5xdWV1ZU1pY3JvdGFzaz9nbG9iYWwucXVldWVNaWNyb3Rhc2s6Z2xvYmFsLnNldEltbWVkaWF0ZT9nbG9iYWwuc2V0SW1tZWRpYXRlOmdsb2JhbC5zZXRUaW1lb3V0KX1mdW5jdGlvbiBVKFkscSxlZSxKLG5lKXtyZXR1cm4gRi5pbXBvcnRL''@;'; put 'put ''ZXkoInJhdyIsWSx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBGLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpxLGl0ZXJhdGlvbnM6ZWUsaGFzaDp7bmFtZTpuZX19LGllLEo8PDMpfSkudGhlbihmdW5jdGlvbihpZSl7''@;'; put 'put ''cmV0dXJuIEkuZnJvbShpZSl9KX11ZS5leHBvcnRzPWZ1bmN0aW9uKFkscSxlZSxKLG5lLGllKXsiZnVuY3Rpb24iPT10eXBlb2YgbmUmJihpZT1uZSxuZT12b2lkIDApO3ZhciBsZT1PWyhuZT1uZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihsZSYmImZ1bmN0aW9uIj09dHlwZW9mIGds''@;'; put 'put ''b2JhbC5Qcm9taXNlKXtpZihfKGVlLEopLFk9dyhZLGcsIlBhc3N3b3JkIikscT13KHEsZywiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBXKFkscSl7WS50aGVuKGZ1bmN0aW9u''@;'; put 'put ''KGVlKXtLKCkoZnVuY3Rpb24oKXtxKG51bGwsZWUpfSl9LGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKGVlKX0pfSl9KGZ1bmN0aW9uIE4oWSl7aWYoZ2xvYmFsLnByb2Nlc3MmJiFnbG9iYWwucHJvY2Vzcy5icm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJl''@;'; put 'put ''dHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbWV0pcmV0dXJuIHpbWV07dmFyIHE9VShQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsWSkudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiB6W1ldPXEscX0obGUp''@;'; put 'put ''LnRoZW4oZnVuY3Rpb24obWUpe3JldHVybiBtZT9VKFkscSxlZSxKLGxlKTpCKFkscSxlZSxKLG5lKX0pLGllKX1lbHNlIEsoKShmdW5jdGlvbigpe3ZhciBtZTt0cnl7bWU9QihZLHEsZWUsSixuZSl9Y2F0Y2goX2Upe3JldHVybiBpZShfZSl9aWUobnVsbCxtZSl9KX19LDQ1MzkyOnVlPT57''@;'; put 'put ''dmFyIFg7WD1nbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MuYnJvd3Nlcj8idXRmLTgiOmdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KHByb2Nlc3MudmVyc2lvbi5zcGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnki''@;'; put 'put ''OiJ1dGYtOCIsdWUuZXhwb3J0cz1YfSw4NjExMTp1ZT0+e3ZhciBYPU1hdGgucG93KDIsMzApLTE7dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2lmKCJudW1iZXIiIT10eXBlb2YgeSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKHk8MCl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lmKEk8MHx8ST5YfHxJIT1JKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSw1OTExMToo''@;'; put 'put ''dWUsWCx5KT0+e3ZhciBJPXkoODM0MDcpLF89eSgzNjYzNiksZz15KDI1NDQzKSxCPXkoMjcwNTQpLkJ1ZmZlcix3PXkoODYxMTEpLFA9eSg0NTM5MiksRj15KDc2NjQzKSxPPUIuYWxsb2MoMTI4KSx6PXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1''@;'; put 'put ''MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gTihVLFcsWSl7dmFyIHE9ZnVuY3Rpb24gTChVKXtyZXR1cm4icm1kMTYwIj09PVV8fCJyaXBlbWQxNjAiPT09VT9mdW5jdGlvbiBZKHEpe3JldHVybihuZXcgXykudXBkYXRlKHEpLmRpZ2VzdCgpfToibWQ1Ij09PVU/STpm''@;'; put 'put ''dW5jdGlvbiBXKHEpe3JldHVybiBnKFUpLnVwZGF0ZShxKS5kaWdlc3QoKX19KFUpLGVlPSJzaGE1MTIiPT09VXx8InNoYTM4NCI9PT1VPzEyODo2NDtXLmxlbmd0aD5lZT9XPXEoVyk6Vy5sZW5ndGg8ZWUmJihXPUIuY29uY2F0KFtXLE9dLGVlKSk7Zm9yKHZhciBKPUIuYWxsb2NVbnNhZmUo''@;'; put 'put ''ZWUreltVXSksbmU9Qi5hbGxvY1Vuc2FmZShlZSt6W1VdKSxpZT0wO2llPGVlO2llKyspSltpZV09NTReV1tpZV0sbmVbaWVdPTkyXldbaWVdO3ZhciBsZT1CLmFsbG9jVW5zYWZlKGVlK1krNCk7Si5jb3B5KGxlLDAsMCxlZSksdGhpcy5pcGFkMT1sZSx0aGlzLmlwYWQyPUosdGhpcy5vcGFk''@;'; put 'put ''PW5lLHRoaXMuYWxnPVUsdGhpcy5ibG9ja3NpemU9ZWUsdGhpcy5oYXNoPXEsdGhpcy5zaXplPXpbVV19Ti5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIFUuY29weShXLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goVykuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUp''@;'; put 'put ''LHRoaXMuaGFzaCh0aGlzLm9wYWQpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uIEsoVSxXLFkscSxlZSl7dyhZLHEpO3ZhciBKPW5ldyBOKGVlPWVlfHwic2hhMSIsVT1GKFUsUCwiUGFzc3dvcmQiKSwoVz1GKFcsUCwiU2FsdCIpKS5sZW5ndGgpLG5lPUIuYWxsb2NVbnNhZmUocSksaWU9Qi5hbGxv''@;'; put 'put ''Y1Vuc2FmZShXLmxlbmd0aCs0KTtXLmNvcHkoaWUsMCwwLFcubGVuZ3RoKTtmb3IodmFyIGxlPTAsbWU9eltlZV0sX2U9TWF0aC5jZWlsKHEvbWUpLFRlPTE7VGU8PV9lO1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsVy5sZW5ndGgpO2Zvcih2YXIgU2U9Si5ydW4oaWUsSi5pcGFkMSksamU9''@;'; put 'put ''U2UsVj0xO1Y8WTtWKyspe2plPUoucnVuKGplLEouaXBhZDIpO2Zvcih2YXIgcD0wO3A8bWU7cCsrKVNlW3BdXj1qZVtwXX1TZS5jb3B5KG5lLGxlKSxsZSs9bWV9cmV0dXJuIG5lfX0sNzY2NDM6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihf''@;'; put 'put ''LGcsQil7aWYoSS5pc0J1ZmZlcihfKSlyZXR1cm4gXztpZigic3RyaW5nIj09dHlwZW9mIF8pcmV0dXJuIEkuZnJvbShfLGcpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhfKSlyZXR1cm4gSS5mcm9tKF8uYnVmZmVyKTt0aHJvdyBuZXcgVHlwZUVycm9yKEIrIiBtdXN0IGJlIGEgc3RyaW5nLCBh''@;'; put 'put ''IEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSw5NjU2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9dHlwZW9mIHByb2Nlc3M+InUifHwhcHJvY2Vzcy52ZXJzaW9ufHwwPT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09cHJvY2Vzcy52ZXJz''@;'; put 'put ''aW9uLmluZGV4T2YoInYxLiIpJiYwIT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIFgoeSxJLF8sZyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHkpdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVu''@;'; put 'put ''Y3Rpb24nKTt2YXIgdyxQLEI9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goQil7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayh5KTtjYXNlIDI6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXt5LmNhbGwobnVsbCxJKX0pO2Nhc2UgMzpyZXR1cm4gcHJvY2Vz''@;'; put 'put ''cy5uZXh0VGljayhmdW5jdGlvbigpe3kuY2FsbChudWxsLEksXyl9KTtjYXNlIDQ6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXt5LmNhbGwobnVsbCxJLF8sZyl9KTtkZWZhdWx0OmZvcih3PW5ldyBBcnJheShCLTEpLFA9MDtQPHcubGVuZ3RoOyl3W1ArK109YXJndW1lbnRz''@;'; put 'put ''W1BdO3JldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7eS5hcHBseShudWxsLHcpfSl9fX06cHJvY2Vzc30sNTI5NjU6KHVlLFgseSk9PntYLnB1YmxpY0VuY3J5cHQ9eSg4NzI2NyksWC5wcml2YXRlRGVjcnlwdD15KDk4NjEzKSxYLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKF8s''@;'; put 'put ''Zyl7cmV0dXJuIFgucHVibGljRW5jcnlwdChfLGcsITApfSxYLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gWC5wcml2YXRlRGVjcnlwdChfLGcsITApfX0sMzA3MTU6KHVlLFgseSk9Pnt2YXIgST15KDY3MjExKSxfPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBnKEIpe3Zh''@;'; put 'put ''ciB3PV8uYWxsb2NVbnNhZmUoNCk7cmV0dXJuIHcud3JpdGVVSW50MzJCRShCLDApLHd9dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe2Zvcih2YXIgTyxQPV8uYWxsb2MoMCksRj0wO1AubGVuZ3RoPHc7KU89ZyhGKyspLFA9Xy5jb25jYXQoW1AsSSgic2hhMSIpLnVwZGF0ZShCKS51cGRhdGUo''@;'; put 'put ''TykuZGlnZXN0KCldKTtyZXR1cm4gUC5zbGljZSgwLHcpfX0sMTY1MDg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtW''@;'; put 'put ''LnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1u''@;'; put 'put ''dWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3Jk''@;'; put 'put ''U2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg1MTA2OSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYm''@;'; put 'put ''Yjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFy''@;'; put 'put ''Q29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNp''@;'; put 'put ''emUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVw''@;'; put 'put ''bGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0''@;'; put 'put ''JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90''@;'; put 'put ''eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcg''@;'; put 'put ''QXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8''@;'; put 'put ''PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2''@;'; put 'put ''NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0''@;'; put 'put ''aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEw''@;'; put 'put ''ODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRz''@;'; put 'put ''W0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5s''@;'; put 'put ''ZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihw''@;'; put 'put ''LEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBw''@;'; put 'put ''PW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3Ro''@;'; put 'put ''aXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYw''@;'; put 'put ''NywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkw''@;'; put 'put ''NywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0''@;'; put 'put ''aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0x''@;'; put 'put ''KSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8''@;'; put 'put ''RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tI''@;'; put 'put ''XSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5s''@;'; put 'put ''ZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIg''@;'; put 'put ''dGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4''@;'; put 'put ''KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9''@;'; put 'put ''PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pT''@;'; put 'put ''T049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0''@;'; put 'put ''aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAs''@;'; put 'put ''IlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsr''@;'; put 'put ''KWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMy''@;'; put 'put ''LU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0''@;'; put 'put ''aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRo''@;'; put 'put ''aXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEp''@;'; put 'put ''LmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1ti''@;'; put 'put ''XT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNs''@;'; put 'put ''b25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxl''@;'; put 'put ''bmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0''@;'; put 'put ''dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihw''@;'; put 'put ''KXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4g''@;'; put 'put ''cC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53''@;'; put 'put ''b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVn''@;'; put 'put ''YXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4w''@;'; put 'put ''PyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29y''@;'; put 'put ''ZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhp''@;'; put 'put ''cyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENb''@;'; put 'put ''MF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtl''@;'; put 'put ''PTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkx''@;'; put 'put ''JnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxU''@;'; put 'put ''dD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVn''@;'; put 'put ''YXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQ''@;'; put 'put ''dCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxl''@;'; put 'put ''aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHpl''@;'; put 'put ''LFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2Us''@;'; put 'put ''VXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxz''@;'; put 'put ''biksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9''@;'; put 'put ''RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''SGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0''@;'; put 'put ''KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUs''@;'; put 'put ''Zm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0''@;'; put 'put ''KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9''@;'; put 'put ''RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''SGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6''@;'; put 'put ''dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxG''@;'; put 'put ''YSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02''@;'; put 'put ''NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThd''@;'; put 'put ''PXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3Zh''@;'; put 'put ''ciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1W''@;'; put 'put ''Lmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29y''@;'; put 'put ''ZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tU''@;'; put 'put ''XT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2Qmlu''@;'; put 'put ''KEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24o''@;'; put 'put ''cCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8''@;'; put 'put ''MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qt''@;'; put 'put ''c2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtw''@;'; put 'put ''W0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgu''@;'; put 'put ''cm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIq''@;'; put 'put ''SCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3Rv''@;'; put 'put ''dHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFl''@;'; put 'put ''PW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJh''@;'; put 'put ''bnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShF''@;'; put 'put ''LG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9''@;'; put 'put ''bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVu''@;'; put 'put ''Z3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7''@;'; put 'put ''eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhp''@;'; put 'put ''cy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIl''@;'; put 'put ''MjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNx''@;'; put 'put ''cigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwy''@;'; put 'put ''Ni1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgp''@;'; put 'put ''e2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''ZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0''@;'; put 'put ''aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0w''@;'; put 'put ''O208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMu''@;'; put 'put ''d29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNo''@;'; put 'put ''bG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAt''@;'; put 'put ''YikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhp''@;'; put 'put ''cy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3Jl''@;'; put 'put ''dHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0w''@;'; put 'put ''O2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9''@;'; put 'put ''KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29y''@;'; put 'put ''ZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgp''@;'; put 'put ''KSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0u''@;'; put 'put ''bGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3Ro''@;'; put 'put ''K3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVn''@;'; put 'put ''YXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8o''@;'; put 'put ''KSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09''@;'; put 'put ''VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0''@;'; put 'put ''aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6''@;'; put 'put ''dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9k''@;'; put 'put ''bihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIs''@;'; put 'put ''ITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9''@;'; put 'put ''MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90''@;'; put 'put ''eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2''@;'; put 'put ''Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3''@;'; put 'put ''KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZh''@;'; put 'put ''ZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsr''@;'; put 'put ''K3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4Lmlz''@;'; put 'put ''dWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2''@;'; put 'put ''ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2ot''@;'; put 'put ''LSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8o''@;'; put 'put ''Yi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlz''@;'; put 'put ''WmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZl''@;'; put 'put ''bigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52''@;'; put 'put ''bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQo''@;'; put 'put ''eCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhp''@;'; put 'put ''cy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0x''@;'; put 'put ''O2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJu''@;'; put 'put ''IDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHAp''@;'; put 'put ''O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0t''@;'; put 'put ''KXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0x''@;'; put 'put ''PT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAo''@;'; put 'put ''cCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1W''@;'; put 'put ''LHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBf''@;'; put 'put ''ZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlz''@;'; put 'put ''LnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9''@;'; put 'put ''dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRo''@;'; put 'put ''aXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIs''@;'; put 'put ''dGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMu''@;'; put 'put ''cCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUu''@;'; put 'put ''cHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9''@;'; put 'put ''MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxl''@;'; put 'put ''bmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEw''@;'; put 'put ''ODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11''@;'; put 'put ''bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5j''@;'; put 'put ''dGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmlt''@;'; put 'put ''ZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''aW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhp''@;'; put 'put ''cy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''aWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0''@;'; put 'put ''dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90''@;'; put 'put ''eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVs''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5t''@;'; put 'put ''dWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3co''@;'; put 'put ''cCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRo''@;'; put 'put ''aXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNl''@;'; put 'put ''PVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVk''@;'; put 'put ''TXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBv''@;'; put 'put ''dz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5n''@;'; put 'put ''dGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7''@;'; put 'put ''SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxq''@;'; put 'put ''ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0s''@;'; put 'put ''amUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11''@;'; put 'put ''bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRo''@;'; put 'put ''aXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhp''@;'; put 'put ''cy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sOTg2MTM6KHVlLFgseSk9Pnt2YXIgST15KDY1NjY3KSxfPXkoMzA3MTUpLGc9eSgzNzE5NiksQj15KDE2NTA4KSx3PXkoMTQxMDUpLFA9eSg2NzIxMSksRj15KDEwNTY4KSxPPXkoMjcwNTQp''@;'; put 'put ''LkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFUsVyxZKXt2YXIgcTtxPVUucGFkZGluZz9VLnBhZGRpbmc6WT8xOjQ7dmFyIG5lLGVlPUkoVSksSj1lZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5KfHxuZXcgQihXKS5jbXAoZWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJkZWNyeXB0aW9uIGVycm9yIik7bmU9WT9GKG5ldyBCKFcpLGVlKTp3KFcsZWUpO3ZhciBpZT1PLmFsbG9jKEotbmUubGVuZ3RoKTtpZihuZT1PLmNvbmNhdChbaWUsbmVdLEopLDQ9PT1xKXJldHVybiBmdW5jdGlvbiB6KEssVSl7dmFyIFc9Sy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxZ''@;'; put 'put ''PVAoInNoYTEiKS51cGRhdGUoTy5hbGxvYygwKSkuZGlnZXN0KCkscT1ZLmxlbmd0aDtpZigwIT09VVswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgZWU9VS5zbGljZSgxLHErMSksSj1VLnNsaWNlKHErMSksbmU9ZyhlZSxfKEoscSkpLGllPWcoSixfKG5lLFct''@;'; put 'put ''cS0xKSk7aWYoZnVuY3Rpb24gTChLLFUpe0s9Ty5mcm9tKEspLFU9Ty5mcm9tKFUpO3ZhciBXPTAsWT1LLmxlbmd0aDtLLmxlbmd0aCE9PVUubGVuZ3RoJiYoVysrLFk9TWF0aC5taW4oSy5sZW5ndGgsVS5sZW5ndGgpKTtmb3IodmFyIHE9LTE7KytxPFk7KVcrPUtbcV1eVVtxXTtyZXR1cm4g''@;'; put 'put ''V30oWSxpZS5zbGljZSgwLHEpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIGxlPXE7MD09PWllW2xlXTspbGUrKztpZigxIT09aWVbbGUrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGllLnNsaWNlKGxlKX0oZWUsbmUp''@;'; put 'put ''O2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbiBOKEssVSxXKXtmb3IodmFyIFk9VS5zbGljZSgwLDIpLHE9MixlZT0wOzAhPT1VW3ErK107KWlmKHE+PVUubGVuZ3RoKXtlZSsrO2JyZWFrfXZhciBKPVUuc2xpY2UoMixxLTEpO2lmKCgiMDAwMiIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmIVd8fCIw''@;'; put 'put ''MDAxIiE9PVkudG9TdHJpbmcoImhleCIpJiZXKSYmZWUrKyxKLmxlbmd0aDw4JiZlZSsrLGVlKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBVLnNsaWNlKHEpfSgwLG5lLFkpO2lmKDM9PT1xKXJldHVybiBuZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFk''@;'; put 'put ''ZGluZyIpfX0sODcyNjc6KHVlLFgseSk9Pnt2YXIgST15KDY1NjY3KSxfPXkoMzM0MiksZz15KDY3MjExKSxCPXkoMzA3MTUpLHc9eSgzNzE5NiksUD15KDE2NTA4KSxGPXkoMTA1NjgpLE89eSgxNDEwNSksej15KDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihXLFkscSl7dmFy''@;'; put 'put ''IGVlO2VlPVcucGFkZGluZz9XLnBhZGRpbmc6cT8xOjQ7dmFyIG5lLEo9SShXKTtpZig0PT09ZWUpbmU9ZnVuY3Rpb24gTihVLFcpe3ZhciBZPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCkscT1XLmxlbmd0aCxlZT1nKCJzaGExIikudXBkYXRlKHouYWxsb2MoMCkpLmRpZ2VzdCgpLEo9ZWUubGVu''@;'; put 'put ''Z3RoLG5lPTIqSjtpZihxPlktbmUtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgaWU9ei5hbGxvYyhZLXEtbmUtMiksbGU9WS1KLTEsbWU9XyhKKSxfZT13KHouY29uY2F0KFtlZSxpZSx6LmFsbG9jKDEsMSksV10sbGUpLEIobWUsbGUpKSxUZT13KG1lLEIoX2Us''@;'; put 'put ''SikpO3JldHVybiBuZXcgUCh6LmNvbmNhdChbei5hbGxvYygxKSxUZSxfZV0sWSkpfShKLFkpO2Vsc2UgaWYoMT09PWVlKW5lPWZ1bmN0aW9uIEwoVSxXLFkpe3ZhciBKLHE9Vy5sZW5ndGgsZWU9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihxPmVlLTExKXRocm93IG5ldyBFcnJvcigibWVz''@;'; put 'put ''c2FnZSB0b28gbG9uZyIpO3JldHVybiBKPVk/ei5hbGxvYyhlZS1xLTMsMjU1KTpmdW5jdGlvbiBLKFUpe2Zvcih2YXIgSixXPXouYWxsb2NVbnNhZmUoVSksWT0wLHE9XygyKlUpLGVlPTA7WTxVOyllZT09PXEubGVuZ3RoJiYocT1fKDIqVSksZWU9MCksKEo9cVtlZSsrXSkmJihXW1krK109''@;'; put 'put ''Sik7cmV0dXJuIFd9KGVlLXEtMyksbmV3IFAoei5jb25jYXQoW3ouZnJvbShbMCxZPzE6Ml0pLEosei5hbGxvYygxKSxXXSxlZSkpfShKLFkscSk7ZWxzZXtpZigzIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigobmU9bmV3IFAoWSkpLmNtcChKLm1vZHVsdXMp''@;'; put 'put ''Pj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiBxP08obmUsSik6RihuZSxKKX19LDEwNTY4Oih1ZSxYLHkpPT57dmFyIEk9eSgxNjUwOCksXz15KDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyl7cmV0dXJuIF8uZnJv''@;'; put 'put ''bShCLnRvUmVkKEkubW9udCh3Lm1vZHVsdXMpKS5yZWRQb3cobmV3IEkody5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sMzcxOTY6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7Zm9yKHZhciBfPXkubGVuZ3RoLGc9LTE7KytnPF87KXlbZ11ePUlbZ107cmV0''@;'; put 'put ''dXJuIHl9fSwzMzQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPTY1NTM2LEI9eSgyNzA1NCkuQnVmZmVyLHc9Z2xvYmFsLmNyeXB0b3x8Z2xvYmFsLm1zQ3J5cHRvO3VlLmV4cG9ydHM9dyYmdy5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gUChGLE8pe2lmKEY+NDI5NDk2NzI5NSl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciB6PUIuYWxsb2NVbnNhZmUoRik7aWYoRj4wKWlmKEY+SSlmb3IodmFyIE49MDtOPEY7Tis9SSl3LmdldFJhbmRvbVZhbHVlcyh6LnNsaWNlKE4sTitJKSk7ZWxzZSB3LmdldFJhbmRvbVZh''@;'; put 'put ''bHVlcyh6KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTz9wcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7TyhudWxsLHopfSk6en06ZnVuY3Rpb24gZygpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMg''@;'; put 'put ''YnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDk2ODI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSSgpe3Rocm93IG5ldyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5''@;'; put 'put ''IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfXZhciBfPXkoMjcwNTQpLGc9eSgzMzQyKSxCPV8uQnVmZmVyLHc9Xy5rTWF4TGVuZ3RoLFA9Z2xvYmFsLmNyeXB0b3x8Z2xvYmFsLm1zQ3J5cHRvLEY9TWF0aC5wb3coMiwzMiktMTtm''@;'; put 'put ''dW5jdGlvbiBPKFUsVyl7aWYoIm51bWJlciIhPXR5cGVvZiBVfHxVIT1VKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVT5GfHxVPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihVPnd8fFU+Vyl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHooVSxXLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgVXx8VSE9VSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihVPkZ8fFU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJz''@;'; put 'put ''aXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihVK1c+WXx8VT53KXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gTChVLFcsWSxxKXtpZihwcm9jZXNzLmJyb3dzZXIpe3ZhciBKPW5ldyBVaW50OEFycmF5KFUuYnVmZmVyLFcsWSk7cmV0dXJuIFAuZ2V0''@;'; put 'put ''UmFuZG9tVmFsdWVzKEopLHE/dm9pZCBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7cShudWxsLFUpfSk6VX1pZighcSlyZXR1cm4gZyhZKS5jb3B5KFUsVyksVTtnKFksZnVuY3Rpb24oaWUsbGUpe2lmKGllKXJldHVybiBxKGllKTtsZS5jb3B5KFUsVykscShudWxsLFUpfSl9UCYmUC5n''@;'; put 'put ''ZXRSYW5kb21WYWx1ZXN8fCFwcm9jZXNzLmJyb3dzZXI/KFgucmFuZG9tRmlsbD1mdW5jdGlvbiBOKFUsVyxZLHEpe2lmKCEoQi5pc0J1ZmZlcihVKXx8VSBpbnN0YW5jZW9mIGdsb2JhbC5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEg''@;'; put 'put ''QnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVylxPVcsVz0wLFk9VS5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgWSlxPVksWT1VLmxlbmd0aC1XO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEpdGhyb3cgbmV3IFR5cGVFcnJvcignImNi''@;'; put 'put ''IiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gTyhXLFUubGVuZ3RoKSx6KFksVyxVLmxlbmd0aCksTChVLFcsWSxxKX0sWC5yYW5kb21GaWxsU3luYz1mdW5jdGlvbiBLKFUsVyxZKXtpZih0eXBlb2YgVz4idSImJihXPTApLCEoQi5pc0J1ZmZlcihVKXx8VSBpbnN0YW5j''@;'; put 'put ''ZW9mIGdsb2JhbC5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4gTyhXLFUubGVuZ3RoKSx2b2lkIDA9PT1ZJiYoWT1VLmxlbmd0aC1XKSx6KFksVyxVLmxlbmd0aCksTChVLFcsWSl9''@;'; put 'put ''KTooWC5yYW5kb21GaWxsPUksWC5yYW5kb21GaWxsU3luYz1JKX0sNzQwNzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NjU2KSxfPU9iamVjdC5rZXlzfHxmdW5jdGlvbihLKXt2YXIgVT1bXTtmb3IodmFyIFcgaW4gSylVLnB1c2goVyk7cmV0dXJuIFV9O3VlLmV4cG9ydHM9''@;'; put 'put ''ejt2YXIgZz1PYmplY3QuY3JlYXRlKHkoMjc2MzcpKTtnLmluaGVyaXRzPXkoNzE5OTMpO3ZhciBCPXkoMTk2MDkpLHc9eSg0Nzg0OSk7Zy5pbmhlcml0cyh6LEIpO2Zvcih2YXIgUD1fKHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKyspe3ZhciBPPVBbRl07ei5wcm90b3R5cGVbT118''@;'; put 'put ''fCh6LnByb3RvdHlwZVtPXT13LnByb3RvdHlwZVtPXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Qi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1L''@;'; put 'put ''LndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhMLHRoaXMpfWZ1bmN0aW9uIEwoSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFUpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soVSxLKX19LDE4ODIzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Zzt2YXIgST15KDI5MDkp''@;'; put 'put ''LF89T2JqZWN0LmNyZWF0ZSh5KDI3NjM3KSk7ZnVuY3Rpb24gZyhCKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGcoQik7SS5jYWxsKHRoaXMsQil9Xy5pbmhlcml0cz15KDcxOTkzKSxfLmluaGVyaXRzKGcsSSksZy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihC''@;'; put 'put ''LHcsUCl7UChudWxsLEIpfX0sMTk2MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NjU2KTt1ZS5leHBvcnRzPWllO3ZhciBnLF89eSgyMDA1Myk7aWUuUmVhZGFibGVTdGF0ZT1uZSx5KDQ0MzU2KTt2YXIgdz1mdW5jdGlvbih4ZSx2ZSl7cmV0dXJuIHhlLmxpc3RlbmVycyh2''@;'; put 'put ''ZSkubGVuZ3RofSxQPXkoMTgzNDIpLEY9eSgyNjU1KS5CdWZmZXIsTz0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEw9T2JqZWN0LmNyZWF0ZSh5KDI3NjM3''@;'; put 'put ''KSk7TC5pbmhlcml0cz15KDcxOTkzKTt2YXIgSz15KDc5ODM4KSxVPXZvaWQgMDtVPUsmJksuZGVidWdsb2c/Sy5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBxLFc9eSgyNzgwOSksWT15KDIxNTA5KTtMLmluaGVyaXRzKGllLFApO3ZhciBlZT1bImVycm9yIiwiY2xvc2Ui''@;'; put 'put ''LCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBuZSh4ZSx2ZSl7dmFyIFhlPXZlIGluc3RhbmNlb2YoZz1nfHx5KDc0MDc1KSk7dGhpcy5vYmplY3RNb2RlPSEhKHhlPXhlfHx7fSkub2JqZWN0TW9kZSxYZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEh''@;'; put 'put ''eGUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgemU9eGUuaGlnaFdhdGVyTWFyayxEZT14ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPXplfHwwPT09emU/emU6WGUmJihEZXx8MD09PURlKT9EZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0''@;'; put 'put ''ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgVyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9eGUuZGVmYXVsdEVu''@;'; put 'put ''Y29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwseGUuZW5jb2RpbmcmJihxfHwocT15KDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9bmV3IHEoeGUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rp''@;'; put 'put ''bmc9eGUuZW5jb2RpbmcpfWZ1bmN0aW9uIGllKHhlKXtpZihnPWd8fHkoNzQwNzUpLCEodGhpcyBpbnN0YW5jZW9mIGllKSlyZXR1cm4gbmV3IGllKHhlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBuZSh4ZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLHhlJiYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IHhlLnJlYWQmJih0aGlzLl9yZWFkPXhlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT14ZS5kZXN0cm95KSksUC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGxlKHhlLHZlLFhlLHplLERlKXt2YXIgT2UsRmU9eGUuX3JlYWRhYmxlU3RhdGU7cmV0dXJu''@;'; put 'put ''IG51bGw9PT12ZT8oRmUucmVhZGluZz0hMSxmdW5jdGlvbiBwKHhlLHZlKXtpZighdmUuZW5kZWQpe2lmKHZlLmRlY29kZXIpe3ZhciBYZT12ZS5kZWNvZGVyLmVuZCgpO1hlJiZYZS5sZW5ndGgmJih2ZS5idWZmZXIucHVzaChYZSksdmUubGVuZ3RoKz12ZS5vYmplY3RNb2RlPzE6WGUubGVu''@;'; put 'put ''Z3RoKX12ZS5lbmRlZD0hMCxiKHhlKX19KHhlLEZlKSk6KERlfHwoT2U9ZnVuY3Rpb24gX2UoeGUsdmUpe3ZhciBYZTtyZXR1cm4hZnVuY3Rpb24gTih4ZSl7cmV0dXJuIEYuaXNCdWZmZXIoeGUpfHx4ZSBpbnN0YW5jZW9mIE99KHZlKSYmInN0cmluZyIhPXR5cGVvZiB2ZSYmdm9pZCAwIT09''@;'; put 'put ''dmUmJiF4ZS5vYmplY3RNb2RlJiYoWGU9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxYZX0oRmUsdmUpKSxPZT94ZS5lbWl0KCJlcnJvciIsT2UpOkZlLm9iamVjdE1vZGV8fHZlJiZ2ZS5sZW5ndGg+MD8oInN0cmluZyIhPXR5cGVvZiB2ZSYmIUZl''@;'; put 'put ''Lm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZih2ZSkhPT1GLnByb3RvdHlwZSYmKHZlPWZ1bmN0aW9uIHooeGUpe3JldHVybiBGLmZyb20oeGUpfSh2ZSkpLHplP0ZlLmVuZEVtaXR0ZWQ/eGUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBl''@;'; put 'put ''bmQgZXZlbnQiKSk6bWUoeGUsRmUsdmUsITApOkZlLmVuZGVkP3hlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihGZS5yZWFkaW5nPSExLEZlLmRlY29kZXImJiFYZT8odmU9RmUuZGVjb2Rlci53cml0ZSh2ZSksRmUub2JqZWN0TW9kZXx8MCE9''@;'; put 'put ''PXZlLmxlbmd0aD9tZSh4ZSxGZSx2ZSwhMSk6Qyh4ZSxGZSkpOm1lKHhlLEZlLHZlLCExKSkpOnplfHwoRmUucmVhZGluZz0hMSkpLGZ1bmN0aW9uIFRlKHhlKXtyZXR1cm4heGUuZW5kZWQmJih4ZS5uZWVkUmVhZGFibGV8fHhlLmxlbmd0aDx4ZS5oaWdoV2F0ZXJNYXJrfHwwPT09eGUubGVu''@;'; put 'put ''Z3RoKX0oRmUpfWZ1bmN0aW9uIG1lKHhlLHZlLFhlLHplKXt2ZS5mbG93aW5nJiYwPT09dmUubGVuZ3RoJiYhdmUuc3luYz8oeGUuZW1pdCgiZGF0YSIsWGUpLHhlLnJlYWQoMCkpOih2ZS5sZW5ndGgrPXZlLm9iamVjdE1vZGU/MTpYZS5sZW5ndGgsemU/dmUuYnVmZmVyLnVuc2hpZnQoWGUp''@;'; put 'put ''OnZlLmJ1ZmZlci5wdXNoKFhlKSx2ZS5uZWVkUmVhZGFibGUmJmIoeGUpKSxDKHhlLHZlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaWUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih4ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXhlKX19KSxpZS5wcm90b3R5cGUuZGVzdHJveT1ZLmRlc3Ryb3ksaWUucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRlc3Ryb3ksaWUu''@;'; put 'put ''cHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHhlLHZlKXt0aGlzLnB1c2gobnVsbCksdmUoeGUpfSxpZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih4ZSx2ZSl7dmFyIHplLFhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFhlLm9iamVjdE1vZGU/emU9ITA6InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiB4ZSYmKCh2ZT12ZXx8WGUuZGVmYXVsdEVuY29kaW5nKSE9PVhlLmVuY29kaW5nJiYoeGU9Ri5mcm9tKHhlLHZlKSx2ZT0iIiksemU9ITApLGxlKHRoaXMseGUsdmUsITEsemUpfSxpZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih4ZSl7cmV0dXJuIGxlKHRoaXMseGUsbnVsbCwhMCwh''@;'; put 'put ''MSl9LGllLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxpZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oeGUpe3JldHVybiBxfHwocT15KDc4NDU0KS5JKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29k''@;'; put 'put ''ZXI9bmV3IHEoeGUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9eGUsdGhpc307ZnVuY3Rpb24gVih4ZSx2ZSl7cmV0dXJuIHhlPD0wfHwwPT09dmUubGVuZ3RoJiZ2ZS5lbmRlZD8wOnZlLm9iamVjdE1vZGU/MTp4ZSE9eGU/dmUuZmxvd2luZyYmdmUubGVuZ3RoP3ZlLmJ1ZmZlci5o''@;'; put 'put ''ZWFkLmRhdGEubGVuZ3RoOnZlLmxlbmd0aDooeGU+dmUuaGlnaFdhdGVyTWFyayYmKHZlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gamUoeGUpe3JldHVybiB4ZT49ODM4ODYwOD94ZT04Mzg4NjA4Oih4ZS0tLHhlfD14ZT4+PjEseGV8PXhlPj4+Mix4ZXw9eGU+Pj40LHhlfD14ZT4+PjgseGV8''@;'; put 'put ''PXhlPj4+MTYseGUrKykseGV9KHhlKSkseGU8PXZlLmxlbmd0aD94ZTp2ZS5lbmRlZD92ZS5sZW5ndGg6KHZlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gYih4ZSl7dmFyIHZlPXhlLl9yZWFkYWJsZVN0YXRlO3ZlLm5lZWRSZWFkYWJsZT0hMSx2ZS5lbWl0dGVkUmVhZGFibGV8fChV''@;'; put 'put ''KCJlbWl0UmVhZGFibGUiLHZlLmZsb3dpbmcpLHZlLmVtaXR0ZWRSZWFkYWJsZT0hMCx2ZS5zeW5jP0kubmV4dFRpY2soeCx4ZSk6eCh4ZSkpfWZ1bmN0aW9uIHgoeGUpe1UoImVtaXQgcmVhZGFibGUiKSx4ZS5lbWl0KCJyZWFkYWJsZSIpLEEoeGUpfWZ1bmN0aW9uIEMoeGUsdmUpe3ZlLnJl''@;'; put 'put ''YWRpbmdNb3JlfHwodmUucmVhZGluZ01vcmU9ITAsSS5uZXh0VGljayhULHhlLHZlKSl9ZnVuY3Rpb24gVCh4ZSx2ZSl7Zm9yKHZhciBYZT12ZS5sZW5ndGg7IXZlLnJlYWRpbmcmJiF2ZS5mbG93aW5nJiYhdmUuZW5kZWQmJnZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrJiYoVSgibWF5YmVS''@;'; put 'put ''ZWFkTW9yZSByZWFkIDAiKSx4ZS5yZWFkKDApLFhlIT09dmUubGVuZ3RoKTspWGU9dmUubGVuZ3RoO3ZlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIGooeGUpe1UoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHhlLnJlYWQoMCl9ZnVuY3Rpb24gbSh4ZSx2ZSl7dmUucmVhZGluZ3x8KFUo''@;'; put 'put ''InJlc3VtZSByZWFkIDAiKSx4ZS5yZWFkKDApKSx2ZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdmUuYXdhaXREcmFpbj0wLHhlLmVtaXQoInJlc3VtZSIpLEEoeGUpLHZlLmZsb3dpbmcmJiF2ZS5yZWFkaW5nJiZ4ZS5yZWFkKDApfWZ1bmN0aW9uIEEoeGUpe3ZhciB2ZT14ZS5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZTtmb3IoVSgiZmxvdyIsdmUuZmxvd2luZyk7dmUuZmxvd2luZyYmbnVsbCE9PXhlLnJlYWQoKTspO31mdW5jdGlvbiBhZSh4ZSx2ZSl7cmV0dXJuIDA9PT12ZS5sZW5ndGg/bnVsbDoodmUub2JqZWN0TW9kZT9YZT12ZS5idWZmZXIuc2hpZnQoKToheGV8fHhlPj12ZS5sZW5ndGg/KFhlPXZl''@;'; put 'put ''LmRlY29kZXI/dmUuYnVmZmVyLmpvaW4oIiIpOjE9PT12ZS5idWZmZXIubGVuZ3RoP3ZlLmJ1ZmZlci5oZWFkLmRhdGE6dmUuYnVmZmVyLmNvbmNhdCh2ZS5sZW5ndGgpLHZlLmJ1ZmZlci5jbGVhcigpKTpYZT1mdW5jdGlvbiB0ZSh4ZSx2ZSxYZSl7dmFyIHplO3JldHVybiB4ZTx2ZS5oZWFk''@;'; put 'put ''LmRhdGEubGVuZ3RoPyh6ZT12ZS5oZWFkLmRhdGEuc2xpY2UoMCx4ZSksdmUuaGVhZC5kYXRhPXZlLmhlYWQuZGF0YS5zbGljZSh4ZSkpOnplPXhlPT09dmUuaGVhZC5kYXRhLmxlbmd0aD92ZS5zaGlmdCgpOlhlP2Z1bmN0aW9uIHNlKHhlLHZlKXt2YXIgWGU9dmUuaGVhZCx6ZT0xLERlPVhl''@;'; put 'put ''LmRhdGE7Zm9yKHhlLT1EZS5sZW5ndGg7WGU9WGUubmV4dDspe3ZhciBGZT1YZS5kYXRhLE9lPXhlPkZlLmxlbmd0aD9GZS5sZW5ndGg6eGU7aWYoRGUrPU9lPT09RmUubGVuZ3RoP0ZlOkZlLnNsaWNlKDAseGUpLDA9PSh4ZS09T2UpKXtPZT09PUZlLmxlbmd0aD8oKyt6ZSx2ZS5oZWFkPVhl''@;'; put 'put ''Lm5leHQ/WGUubmV4dDp2ZS50YWlsPW51bGwpOih2ZS5oZWFkPVhlLFhlLmRhdGE9RmUuc2xpY2UoT2UpKTticmVha30rK3plfXJldHVybiB2ZS5sZW5ndGgtPXplLERlfSh4ZSx2ZSk6ZnVuY3Rpb24gd2UoeGUsdmUpe3ZhciBYZT1GLmFsbG9jVW5zYWZlKHhlKSx6ZT12ZS5oZWFkLERlPTE7''@;'; put 'put ''Zm9yKHplLmRhdGEuY29weShYZSkseGUtPXplLmRhdGEubGVuZ3RoO3plPXplLm5leHQ7KXt2YXIgRmU9emUuZGF0YSxPZT14ZT5GZS5sZW5ndGg/RmUubGVuZ3RoOnhlO2lmKEZlLmNvcHkoWGUsWGUubGVuZ3RoLXhlLDAsT2UpLDA9PSh4ZS09T2UpKXtPZT09PUZlLmxlbmd0aD8oKytEZSx2''@;'; put 'put ''ZS5oZWFkPXplLm5leHQ/emUubmV4dDp2ZS50YWlsPW51bGwpOih2ZS5oZWFkPXplLHplLmRhdGE9RmUuc2xpY2UoT2UpKTticmVha30rK0RlfXJldHVybiB2ZS5sZW5ndGgtPURlLFhlfSh4ZSx2ZSksemV9KHhlLHZlLmJ1ZmZlcix2ZS5kZWNvZGVyKSxYZSk7dmFyIFhlfWZ1bmN0aW9uIFVl''@;'; put 'put ''KHhlKXt2YXIgdmU9eGUuX3JlYWRhYmxlU3RhdGU7aWYodmUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt2ZS5lbmRFbWl0dGVkfHwodmUuZW5kZWQ9ITAsSS5uZXh0VGljayhKZSx2ZSx4ZSkpfWZ1bmN0aW9u''@;'; put 'put ''IEplKHhlLHZlKXsheGUuZW5kRW1pdHRlZCYmMD09PXhlLmxlbmd0aCYmKHhlLmVuZEVtaXR0ZWQ9ITAsdmUucmVhZGFibGU9ITEsdmUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIG90KHhlLHZlKXtmb3IodmFyIFhlPTAsemU9eGUubGVuZ3RoO1hlPHplO1hlKyspaWYoeGVbWGVdPT09dmUpcmV0''@;'; put 'put ''dXJuIFhlO3JldHVybi0xfWllLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHhlKXtVKCJyZWFkIix4ZSkseGU9cGFyc2VJbnQoeGUsMTApO3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlLFhlPXhlO2lmKDAhPT14ZSYmKHZlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXhlJiZ2ZS5uZWVkUmVh''@;'; put 'put ''ZGFibGUmJih2ZS5sZW5ndGg+PXZlLmhpZ2hXYXRlck1hcmt8fHZlLmVuZGVkKSlyZXR1cm4gVSgicmVhZDogZW1pdFJlYWRhYmxlIix2ZS5sZW5ndGgsdmUuZW5kZWQpLDA9PT12ZS5sZW5ndGgmJnZlLmVuZGVkP1VlKHRoaXMpOmIodGhpcyksbnVsbDtpZigwPT09KHhlPVYoeGUsdmUpKSYm''@;'; put 'put ''dmUuZW5kZWQpcmV0dXJuIDA9PT12ZS5sZW5ndGgmJlVlKHRoaXMpLG51bGw7dmFyIERlLHplPXZlLm5lZWRSZWFkYWJsZTtyZXR1cm4gVSgibmVlZCByZWFkYWJsZSIsemUpLCgwPT09dmUubGVuZ3RofHx2ZS5sZW5ndGgteGU8dmUuaGlnaFdhdGVyTWFyaykmJlUoImxlbmd0aCBsZXNzIHRo''@;'; put 'put ''YW4gd2F0ZXJtYXJrIix6ZT0hMCksdmUuZW5kZWR8fHZlLnJlYWRpbmc/VSgicmVhZGluZyBvciBlbmRlZCIsemU9ITEpOnplJiYoVSgiZG8gcmVhZCIpLHZlLnJlYWRpbmc9ITAsdmUuc3luYz0hMCwwPT09dmUubGVuZ3RoJiYodmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHZlLmhp''@;'; put 'put ''Z2hXYXRlck1hcmspLHZlLnN5bmM9ITEsdmUucmVhZGluZ3x8KHhlPVYoWGUsdmUpKSksbnVsbD09PShEZT14ZT4wP2FlKHhlLHZlKTpudWxsKT8odmUubmVlZFJlYWRhYmxlPSEwLHhlPTApOnZlLmxlbmd0aC09eGUsMD09PXZlLmxlbmd0aCYmKHZlLmVuZGVkfHwodmUubmVlZFJlYWRhYmxl''@;'; put 'put ''PSEwKSxYZSE9PXhlJiZ2ZS5lbmRlZCYmVWUodGhpcykpLG51bGwhPT1EZSYmdGhpcy5lbWl0KCJkYXRhIixEZSksRGV9LGllLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih4ZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0saWUu''@;'; put 'put ''cHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oeGUsdmUpe3ZhciBYZT10aGlzLHplPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKHplLnBpcGVzQ291bnQpe2Nhc2UgMDp6ZS5waXBlcz14ZTticmVhaztjYXNlIDE6emUucGlwZXM9W3plLnBpcGVzLHhlXTticmVhaztkZWZhdWx0OnplLnBpcGVz''@;'; put 'put ''LnB1c2goeGUpfXplLnBpcGVzQ291bnQrPTEsVSgicGlwZSBjb3VudD0lZCBvcHRzPSVqIix6ZS5waXBlc0NvdW50LHZlKTt2YXIgRmU9dmUmJiExPT09dmUuZW5kfHx4ZT09PXByb2Nlc3Muc3Rkb3V0fHx4ZT09PXByb2Nlc3Muc3RkZXJyP010OkllO2Z1bmN0aW9uIEllKCl7VSgib25lbmQi''@;'; put 'put ''KSx4ZS5lbmQoKX16ZS5lbmRFbWl0dGVkP0kubmV4dFRpY2soRmUpOlhlLm9uY2UoImVuZCIsRmUpLHhlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIE9lKER0LGl0KXtVKCJvbnVucGlwZSIpLER0PT09WGUmJml0JiYhMT09PWl0Lmhhc1VucGlwZWQmJihpdC5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9u''@;'; put 'put ''IEFlKCl7VSgiY2xlYW51cCIpLHhlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdW4pLHhlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHl0KSx4ZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFZlKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFFlKSx4ZS5yZW1vdmVMaXN0ZW5lcigidW5waXBl''@;'; put 'put ''IixPZSksWGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsSWUpLFhlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE10KSxYZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsbnQpLGtlPSEwLHplLmF3YWl0RHJhaW4mJigheGUuX3dyaXRhYmxlU3RhdGV8fHhlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJlZl''@;'; put 'put ''KCl9KCkpfSk7dmFyIFZlPWZ1bmN0aW9uIEgoeGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB2ZT14ZS5fcmVhZGFibGVTdGF0ZTtVKCJwaXBlT25EcmFpbiIsdmUuYXdhaXREcmFpbiksdmUuYXdhaXREcmFpbiYmdmUuYXdhaXREcmFpbi0tLDA9PT12ZS5hd2FpdERyYWluJiZ3KHhlLCJkYXRh''@;'; put 'put ''IikmJih2ZS5mbG93aW5nPSEwLEEoeGUpKX19KFhlKTt4ZS5vbigiZHJhaW4iLFZlKTt2YXIga2U9ITEsX3Q9ITE7ZnVuY3Rpb24gbnQoRHQpe1UoIm9uZGF0YSIpLF90PSExLCExPT09eGUud3JpdGUoRHQpJiYhX3QmJigoMT09PXplLnBpcGVzQ291bnQmJnplLnBpcGVzPT09eGV8fHplLnBp''@;'; put 'put ''cGVzQ291bnQ+MSYmLTEhPT1vdCh6ZS5waXBlcyx4ZSkpJiYha2UmJihVKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLHplLmF3YWl0RHJhaW4pLHplLmF3YWl0RHJhaW4rKyxfdD0hMCksWGUucGF1c2UoKSl9ZnVuY3Rpb24gUWUoRHQpe1UoIm9uZXJyb3IiLER0KSxNdCgpLHhlLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJlcnJvciIsUWUpLDA9PT13KHhlLCJlcnJvciIpJiZ4ZS5lbWl0KCJlcnJvciIsRHQpfWZ1bmN0aW9uIHVuKCl7eGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIseXQpLE10KCl9ZnVuY3Rpb24geXQoKXtVKCJvbmZpbmlzaCIpLHhlLnJlbW92ZUxpc3RlbmVyKCJjbG9z''@;'; put 'put ''ZSIsdW4pLE10KCl9ZnVuY3Rpb24gTXQoKXtVKCJ1bnBpcGUiKSxYZS51bnBpcGUoeGUpfXJldHVybiBYZS5vbigiZGF0YSIsbnQpLGZ1bmN0aW9uIEooeGUsdmUsWGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHhlLnByZXBlbmRMaXN0ZW5lcih2''@;'; put 'put ''ZSxYZSk7eGUuX2V2ZW50cyYmeGUuX2V2ZW50c1t2ZV0/Xyh4ZS5fZXZlbnRzW3ZlXSk/eGUuX2V2ZW50c1t2ZV0udW5zaGlmdChYZSk6eGUuX2V2ZW50c1t2ZV09W1hlLHhlLl9ldmVudHNbdmVdXTp4ZS5vbih2ZSxYZSl9KHhlLCJlcnJvciIsUWUpLHhlLm9uY2UoImNsb3NlIix1bikseGUu''@;'; put 'put ''b25jZSgiZmluaXNoIix5dCkseGUuZW1pdCgicGlwZSIsWGUpLHplLmZsb3dpbmd8fChVKCJwaXBlIHJlc3VtZSIpLFhlLnJlc3VtZSgpKSx4ZX0saWUucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih4ZSl7dmFyIHZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWGU9e2hhc1VucGlwZWQ6ITF9O2lm''@;'; put 'put ''KDA9PT12ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT12ZS5waXBlc0NvdW50KXJldHVybiB4ZSYmeGUhPT12ZS5waXBlc3x8KHhlfHwoeGU9dmUucGlwZXMpLHZlLnBpcGVzPW51bGwsdmUucGlwZXNDb3VudD0wLHZlLmZsb3dpbmc9ITEseGUmJnhlLmVtaXQoInVucGlwZSIsdGhp''@;'; put 'put ''cyxYZSkpLHRoaXM7aWYoIXhlKXt2YXIgemU9dmUucGlwZXMsRGU9dmUucGlwZXNDb3VudDt2ZS5waXBlcz1udWxsLHZlLnBpcGVzQ291bnQ9MCx2ZS5mbG93aW5nPSExO2Zvcih2YXIgRmU9MDtGZTxEZTtGZSsrKXplW0ZlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTty''@;'; put 'put ''ZXR1cm4gdGhpc312YXIgT2U9b3QodmUucGlwZXMseGUpO3JldHVybi0xPT09T2V8fCh2ZS5waXBlcy5zcGxpY2UoT2UsMSksdmUucGlwZXNDb3VudC09MSwxPT09dmUucGlwZXNDb3VudCYmKHZlLnBpcGVzPXZlLnBpcGVzWzBdKSx4ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWGUpKSx0aGlzfSxp''@;'; put 'put ''ZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9aWUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHhlLHZlKXt2YXIgWGU9UC5wcm90b3R5cGUub24uY2FsbCh0aGlzLHhlLHZlKTtpZigiZGF0YSI9PT14ZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKTtlbHNlIGlm''@;'; put 'put ''KCJyZWFkYWJsZSI9PT14ZSl7dmFyIHplPXRoaXMuX3JlYWRhYmxlU3RhdGU7IXplLmVuZEVtaXR0ZWQmJiF6ZS5yZWFkYWJsZUxpc3RlbmluZyYmKHplLnJlYWRhYmxlTGlzdGVuaW5nPXplLm5lZWRSZWFkYWJsZT0hMCx6ZS5lbWl0dGVkUmVhZGFibGU9ITEsemUucmVhZGluZz96ZS5sZW5n''@;'; put 'put ''dGgmJmIodGhpcyk6SS5uZXh0VGljayhqLHRoaXMpKX1yZXR1cm4gWGV9LGllLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4geGUuZmxvd2luZ3x8KFUoInJlc3VtZSIpLHhlLmZsb3dpbmc9ITAsZnVuY3Rpb24gRSh4ZSx2ZSl7''@;'; put 'put ''dmUucmVzdW1lU2NoZWR1bGVkfHwodmUucmVzdW1lU2NoZWR1bGVkPSEwLEkubmV4dFRpY2sobSx4ZSx2ZSkpfSh0aGlzLHhlKSksdGhpc30saWUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFUoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5m''@;'; put 'put ''bG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFUoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30saWUucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oeGUpe3ZhciB2ZT10aGlzLFhlPXRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUsemU9ITE7Zm9yKHZhciBEZSBpbiB4ZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFUoIndyYXBwZWQgZW5kIiksWGUuZGVjb2RlciYmIVhlLmVuZGVkKXt2YXIgT2U9WGUuZGVjb2Rlci5lbmQoKTtPZSYmT2UubGVuZ3RoJiZ2ZS5wdXNoKE9lKX12ZS5wdXNoKG51bGwpfSks''@;'; put 'put ''eGUub24oImRhdGEiLGZ1bmN0aW9uKE9lKXtVKCJ3cmFwcGVkIGRhdGEiKSxYZS5kZWNvZGVyJiYoT2U9WGUuZGVjb2Rlci53cml0ZShPZSkpLFhlLm9iamVjdE1vZGUmJm51bGw9PU9lfHwhKFhlLm9iamVjdE1vZGV8fE9lJiZPZS5sZW5ndGgpfHx2ZS5wdXNoKE9lKXx8KHplPSEwLHhlLnBh''@;'; put 'put ''dXNlKCkpfSkseGUpdm9pZCAwPT09dGhpc1tEZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiB4ZVtEZV0mJih0aGlzW0RlXT1mdW5jdGlvbihPZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHhlW09lXS5hcHBseSh4ZSxhcmd1bWVudHMpfX0oRGUpKTtmb3IodmFyIEZlPTA7RmU8ZWUubGVuZ3Ro''@;'; put 'put ''O0ZlKyspeGUub24oZWVbRmVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsZWVbRmVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oT2Upe1UoIndyYXBwZWQgX3JlYWQiLE9lKSx6ZSYmKHplPSExLHhlLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLnByb3RvdHlw''@;'; put 'put ''ZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLGllLl9mcm9tTGlzdD1hZX0sMjkwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUI7dmFyIEk9''@;'; put 'put ''eSg3NDA3NSksXz1PYmplY3QuY3JlYXRlKHkoMjc2MzcpKTtmdW5jdGlvbiBnKEYsTyl7dmFyIHo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ei50cmFuc2Zvcm1pbmc9ITE7dmFyIE49ei53cml0ZWNiO2lmKCFOKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxi''@;'; put 'put ''YWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTt6LndyaXRlY2h1bms9bnVsbCx6LndyaXRlY2I9bnVsbCxudWxsIT1PJiZ0aGlzLnB1c2goTyksTihGKTt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlO0wucmVhZGluZz0hMSwoTC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVy''@;'; put 'put ''TWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBCKEYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihGKTtJLmNhbGwodGhpcyxGKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Zy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zv''@;'; put 'put ''cm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsRiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGLnRyYW5z''@;'; put 'put ''Zm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1GLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIEYuZmx1c2gmJih0aGlzLl9mbHVzaD1GLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix3KX1mdW5jdGlvbiB3KCl7dmFyIEY9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/''@;'; put 'put ''dGhpcy5fZmx1c2goZnVuY3Rpb24oTyx6KXtQKEYsTyx6KX0pOlAodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIFAoRixPLHope2lmKE8pcmV0dXJuIEYuZW1pdCgiZXJyb3IiLE8pO2lmKG51bGwhPXomJkYucHVzaCh6KSxGLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKEYuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gRi5wdXNoKG51bGwp''@;'; put 'put ''fV8uaW5oZXJpdHM9eSg3MTk5MyksXy5pbmhlcml0cyhCLEkpLEIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxJLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxGLE8pfSxCLnByb3RvdHlwZS5fdHJhbnNm''@;'; put 'put ''b3JtPWZ1bmN0aW9uKEYsTyx6KXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEYsTyx6KXt2YXIgTj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihOLndyaXRlY2I9eixOLndyaXRlY2h1bms9RixO''@;'; put 'put ''LndyaXRlZW5jb2Rpbmc9TywhTi50cmFuc2Zvcm1pbmcpe3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7KE4ubmVlZFRyYW5zZm9ybXx8TC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX19LEIucHJvdG90eXBlLl9y''@;'; put 'put ''ZWFkPWZ1bmN0aW9uKEYpe3ZhciBPPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1PLndyaXRlY2h1bmsmJk8ud3JpdGVjYiYmIU8udHJhbnNmb3JtaW5nPyhPLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oTy53cml0ZWNodW5rLE8ud3JpdGVlbmNvZGluZyxPLmFmdGVyVHJh''@;'; put 'put ''bnNmb3JtKSk6Ty5uZWVkVHJhbnNmb3JtPSEwfSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihGLE8pe3ZhciB6PXRoaXM7SS5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEYsZnVuY3Rpb24oTil7TyhOKSx6LmVtaXQoImNsb3NlIil9KX19LDQ3ODQ5Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoOTY1Nik7ZnVuY3Rpb24gZyhFKXt2YXIgbT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBqKEUsbSxBKXt2YXIgYWU9RS5lbnRyeTtmb3IoRS5lbnRyeT1udWxsO2FlOyl7dmFyIHRl''@;'; put 'put ''PWFlLmNhbGxiYWNrO20ucGVuZGluZ2NiLS0sdGUoQSksYWU9YWUubmV4dH1tLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PUV9KG0sRSl9fXVlLmV4cG9ydHM9ZWU7dmFyIHcsQj0hcHJvY2Vzcy5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRleE9mKHByb2Nlc3MudmVyc2lvbi5zbGlj''@;'; put 'put ''ZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6SS5uZXh0VGljaztlZS5Xcml0YWJsZVN0YXRlPVk7dmFyIFA9T2JqZWN0LmNyZWF0ZSh5KDI3NjM3KSk7UC5pbmhlcml0cz15KDcxOTkzKTt2YXIgcSxGPXtkZXByZWNhdGU6eSgzMzk4KX0sTz15KDE4MzQyKSx6PXkoMjY1NSkuQnVmZmVyLE49KHR5''@;'; put 'put ''cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxVPXkoMjE1MDkpO2Z1bmN0aW9uIFcoKXt9ZnVuY3Rpb24gWShFLG0pe3c9d3x8eSg3NDA3NSk7dmFyIEE9bSBpbnN0''@;'; put 'put ''YW5jZW9mIHc7dGhpcy5vYmplY3RNb2RlPSEhKEU9RXx8e30pLm9iamVjdE1vZGUsQSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBhZT1FLmhpZ2hXYXRlck1hcmssdGU9RS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrPWFlfHwwPT09YWU/YWU6QSYmKHRlfHwwPT09dGUpP3RlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5l''@;'; put 'put ''bmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09RS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1FLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhp''@;'; put 'put ''cy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oVWUpeyFmdW5jdGlvbiBTZShFLG0pe3ZhciBBPUUuX3dyaXRhYmxlU3RhdGUsYWU9QS5zeW5jLHRlPUEud3JpdGVjYjtpZihmdW5jdGlv''@;'; put 'put ''biBUZShFKXtFLndyaXRpbmc9ITEsRS53cml0ZWNiPW51bGwsRS5sZW5ndGgtPUUud3JpdGVsZW4sRS53cml0ZWxlbj0wfShBKSxtKSFmdW5jdGlvbiBfZShFLG0sQSxhZSx0ZSl7LS1tLnBlbmRpbmdjYixBPyhJLm5leHRUaWNrKHRlLGFlKSxJLm5leHRUaWNrKFQsRSxtKSxFLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxFLmVtaXQoImVycm9yIixhZSkpOih0ZShhZSksRS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRS5lbWl0KCJlcnJvciIsYWUpLFQoRSxtKSl9KEUsQSxhZSxtLHRlKTtlbHNle3ZhciBzZT1iKEEpOyFzZSYmIUEuY29ya2VkJiYhQS5idWZm''@;'; put 'put ''ZXJQcm9jZXNzaW5nJiZBLmJ1ZmZlcmVkUmVxdWVzdCYmcChFLEEpLGFlP0IoamUsRSxBLHNlLHRlKTpqZShFLEEsc2UsdGUpfX0obSxVZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVz''@;'; put 'put ''dD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGcodGhpcyl9ZnVuY3Rpb24gZWUoRSl7aWYodz13fHx5KDc0MDc1KSwhKHEu''@;'; put 'put ''Y2FsbChlZSx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIHcpKXJldHVybiBuZXcgZWUoRSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgWShFLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsRSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBFLndyaXRlJiYodGhpcy5fd3JpdGU9RS53cml0ZSksImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIEUud3JpdGV2JiYodGhpcy5fd3JpdGV2PUUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgRS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1FLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLmZpbmFsJiYodGhpcy5fZmluYWw9RS5maW5hbCkpLE8uY2FsbCh0aGlzKX1m''@;'; put 'put ''dW5jdGlvbiBtZShFLG0sQSxhZSx0ZSxzZSx3ZSl7bS53cml0ZWxlbj1hZSxtLndyaXRlY2I9d2UsbS53cml0aW5nPSEwLG0uc3luYz0hMCxBP0UuX3dyaXRldih0ZSxtLm9ud3JpdGUpOkUuX3dyaXRlKHRlLHNlLG0ub253cml0ZSksbS5zeW5jPSExfWZ1bmN0aW9uIGplKEUsbSxBLGFlKXtB''@;'; put 'put ''fHxmdW5jdGlvbiBWKEUsbSl7MD09PW0ubGVuZ3RoJiZtLm5lZWREcmFpbiYmKG0ubmVlZERyYWluPSExLEUuZW1pdCgiZHJhaW4iKSl9KEUsbSksbS5wZW5kaW5nY2ItLSxhZSgpLFQoRSxtKX1mdW5jdGlvbiBwKEUsbSl7bS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBBPW0uYnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0O2lmKEUuX3dyaXRldiYmQSYmQS5uZXh0KXt2YXIgdGU9bmV3IEFycmF5KG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHNlPW0uY29ya2VkUmVxdWVzdHNGcmVlO3NlLmVudHJ5PUE7Zm9yKHZhciB3ZT0wLFVlPSEwO0E7KXRlW3dlXT1BLEEuaXNCdWZ8fChVZT0hMSksQT1BLm5leHQs''@;'; put 'put ''d2UrPTE7dGUuYWxsQnVmZmVycz1VZSxtZShFLG0sITAsbS5sZW5ndGgsdGUsIiIsc2UuZmluaXNoKSxtLnBlbmRpbmdjYisrLG0ubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHNlLm5leHQ/KG0uY29ya2VkUmVxdWVzdHNGcmVlPXNlLm5leHQsc2UubmV4dD1udWxsKTptLmNvcmtlZFJlcXVl''@;'; put 'put ''c3RzRnJlZT1uZXcgZyhtKSxtLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO0E7KXt2YXIgSmU9QS5jaHVuaztpZihtZShFLG0sITEsbS5vYmplY3RNb2RlPzE6SmUubGVuZ3RoLEplLEEuZW5jb2RpbmcsQS5jYWxsYmFjayksQT1BLm5leHQsbS5idWZmZXJlZFJlcXVlc3RDb3Vu''@;'; put 'put ''dC0tLG0ud3JpdGluZylicmVha31udWxsPT09QSYmKG0ubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1tLmJ1ZmZlcmVkUmVxdWVzdD1BLG0uYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBiKEUpe3JldHVybiBFLmVuZGluZyYmMD09PUUubGVuZ3RoJiZudWxsPT09RS5idWZmZXJlZFJl''@;'; put 'put ''cXVlc3QmJiFFLmZpbmlzaGVkJiYhRS53cml0aW5nfWZ1bmN0aW9uIHgoRSxtKXtFLl9maW5hbChmdW5jdGlvbihBKXttLnBlbmRpbmdjYi0tLEEmJkUuZW1pdCgiZXJyb3IiLEEpLG0ucHJlZmluaXNoZWQ9ITAsRS5lbWl0KCJwcmVmaW5pc2giKSxUKEUsbSl9KX1mdW5jdGlvbiBUKEUsbSl7''@;'; put 'put ''dmFyIEE9YihtKTtyZXR1cm4gQSYmKGZ1bmN0aW9uIEMoRSxtKXshbS5wcmVmaW5pc2hlZCYmIW0uZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iPT10eXBlb2YgRS5fZmluYWw/KG0ucGVuZGluZ2NiKyssbS5maW5hbENhbGxlZD0hMCxJLm5leHRUaWNrKHgsRSxtKSk6KG0ucHJlZmluaXNoZWQ9''@;'; put 'put ''ITAsRS5lbWl0KCJwcmVmaW5pc2giKSkpfShFLG0pLDA9PT1tLnBlbmRpbmdjYiYmKG0uZmluaXNoZWQ9ITAsRS5lbWl0KCJmaW5pc2giKSkpLEF9UC5pbmhlcml0cyhlZSxPKSxZLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG09dGhpcy5idWZmZXJlZFJlcXVlc3Qs''@;'; put 'put ''QT1bXTttOylBLnB1c2gobSksbT1tLm5leHQ7cmV0dXJuIEF9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OkYuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5i''@;'; put 'put ''dWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90''@;'; put 'put ''eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHE9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oRSl7cmV0dXJuISFxLmNhbGwodGhpcyxFKXx8dGhpcz09PWVlJiZF''@;'; put 'put ''JiZFLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgWX19KSk6cT1mdW5jdGlvbihFKXtyZXR1cm4gRSBpbnN0YW5jZW9mIHRoaXN9LGVlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikpfSxl''@;'; put 'put ''ZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRSxtLEEpe3ZhciBhZT10aGlzLl93cml0YWJsZVN0YXRlLHRlPSExLHNlPSFhZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBLKEUpe3JldHVybiB6LmlzQnVmZmVyKEUpfHxFIGluc3RhbmNlb2YgTn0oRSk7cmV0dXJuIHNlJiYhei5pc0J1ZmZlcihF''@;'; put 'put ''KSYmKEU9ZnVuY3Rpb24gTChFKXtyZXR1cm4gei5mcm9tKEUpfShFKSksImZ1bmN0aW9uIj09dHlwZW9mIG0mJihBPW0sbT1udWxsKSxzZT9tPSJidWZmZXIiOm18fChtPWFlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIEEmJihBPVcpLGFlLmVuZGVkP2Z1bmN0aW9uIEoo''@;'; put 'put ''RSxtKXt2YXIgQT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO0UuZW1pdCgiZXJyb3IiLEEpLEkubmV4dFRpY2sobSxBKX0odGhpcyxBKTooc2V8fGZ1bmN0aW9uIG5lKEUsbSxBLGFlKXt2YXIgdGU9ITAsc2U9ITE7cmV0dXJuIG51bGw9PT1BP3NlPW5ldyBUeXBlRXJyb3IoIk1heSBu''@;'; put 'put ''b3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyIhPXR5cGVvZiBBJiZ2b2lkIDAhPT1BJiYhbS5vYmplY3RNb2RlJiYoc2U9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxzZSYmKEUuZW1pdCgiZXJyb3IiLHNlKSxJLm5leHRU''@;'; put 'put ''aWNrKGFlLHNlKSx0ZT0hMSksdGV9KHRoaXMsYWUsRSxBKSkmJihhZS5wZW5kaW5nY2IrKyx0ZT1mdW5jdGlvbiBsZShFLG0sQSxhZSx0ZSxzZSl7aWYoIUEpe3ZhciB3ZT1mdW5jdGlvbiBpZShFLG0sQSl7cmV0dXJuIUUub2JqZWN0TW9kZSYmITEhPT1FLmRlY29kZVN0cmluZ3MmJiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgbSYmKG09ei5mcm9tKG0sQSkpLG19KG0sYWUsdGUpO2FlIT09d2UmJihBPSEwLHRlPSJidWZmZXIiLGFlPXdlKX12YXIgVWU9bS5vYmplY3RNb2RlPzE6YWUubGVuZ3RoO20ubGVuZ3RoKz1VZTt2YXIgSmU9bS5sZW5ndGg8bS5oaWdoV2F0ZXJNYXJrO2lmKEplfHwobS5u''@;'; put 'put ''ZWVkRHJhaW49ITApLG0ud3JpdGluZ3x8bS5jb3JrZWQpe3ZhciBvdD1tLmxhc3RCdWZmZXJlZFJlcXVlc3Q7bS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazphZSxlbmNvZGluZzp0ZSxpc0J1ZjpBLGNhbGxiYWNrOnNlLG5leHQ6bnVsbH0sb3Q/b3QubmV4dD1tLmxhc3RCdWZmZXJlZFJl''@;'; put 'put ''cXVlc3Q6bS5idWZmZXJlZFJlcXVlc3Q9bS5sYXN0QnVmZmVyZWRSZXF1ZXN0LG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBtZShFLG0sITEsVWUsYWUsdGUsc2UpO3JldHVybiBKZX0odGhpcyxhZSxzZSxFLG0sQSkpLHRlfSxlZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LGVlLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgRT10aGlzLl93cml0YWJsZVN0YXRlO0UuY29ya2VkJiYoRS5jb3JrZWQtLSwhRS53cml0aW5nJiYhRS5jb3JrZWQmJiFFLmJ1ZmZlclByb2Nlc3NpbmcmJkUuYnVmZmVyZWRSZXF1''@;'; put 'put ''ZXN0JiZwKHRoaXMsRSkpfSxlZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKG0pe2lmKCJzdHJpbmciPT10eXBlb2YgbSYmKG09bS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNz''@;'; put 'put ''LTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChtKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIittKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9bSx0aGlzfSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoZWUucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksZWUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihFLG0sQSl7''@;'; put 'put ''QShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sZWUucHJvdG90eXBlLl93cml0ZXY9bnVsbCxlZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKEUsbSxBKXt2YXIgYWU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgRT8oQT1FLEU9bnVsbCxt''@;'; put 'put ''PW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoQT1tLG09bnVsbCksbnVsbCE9RSYmdGhpcy53cml0ZShFLG0pLGFlLmNvcmtlZCYmKGFlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLGFlLmVuZGluZ3x8ZnVuY3Rpb24gSChFLG0sQSl7bS5lbmRpbmc9ITAsVChFLG0pLEEmJihtLmZpbmlz''@;'; put 'put ''aGVkP0kubmV4dFRpY2soQSk6RS5vbmNlKCJmaW5pc2giLEEpKSxtLmVuZGVkPSEwLEUud3JpdGFibGU9ITF9KHRoaXMsYWUsQSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1FKX19KSxlZS5wcm90b3R5cGUuZGVzdHJveT1VLmRlc3Ryb3ksZWUucHJvdG90eXBlLl91bmRl''@;'; put 'put ''c3Ryb3k9VS51bmRlc3Ryb3ksZWUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEUsbSl7dGhpcy5lbmQoKSxtKEUpfX0sMjc4MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF89eSgyNjU1KS5CdWZmZXIsZz15KDE1MzQwKTtmdW5jdGlvbiBCKHcsUCxGKXt3LmNvcHkoUCxGKX11''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1u''@;'; put 'put ''dWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Tzp0aGlzLmhlYWQ9Tyx0aGlzLnRhaWw9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNo''@;'; put 'put ''aWZ0PWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1PKSx0aGlzLmhlYWQ9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEY9dGhpcy5o''@;'; put 'put ''ZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90''@;'; put 'put ''b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBPPXRoaXMuaGVhZCx6PSIiK08uZGF0YTtPPU8ubmV4dDspeis9RitPLmRhdGE7cmV0dXJuIHp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgp''@;'; put 'put ''cmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBPPV8uYWxsb2NVbnNhZmUoRj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylCKHouZGF0YSxPLE4pLE4rPXouZGF0YS5sZW5ndGgsej16Lm5leHQ7cmV0dXJuIE99LHd9KCksZyYmZy5pbnNwZWN0JiZnLmluc3BlY3QuY3VzdG9tJiYodWUuZXhwb3J0''@;'; put 'put ''cy5wcm90b3R5cGVbZy5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1nLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sMjE1MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NjU2KTtmdW5j''@;'; put 'put ''dGlvbiBCKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsdGhpcyx3KSk6SS5uZXh0VGljayhCLHRoaXMs''@;'; put 'put ''dykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0Yu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsRixOKSk6SS5uZXh0VGljayhCLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gZygpe3RoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSwxODM0MjoodWUsWCx5KT0+e3VlLmV4cG9ydHM9eSg0NDM1NikuRXZlbnRFbWl0dGVyfSwyNjU1Oih1ZSxYLHkpPT57dmFyIEk9eSg4MzgzOCksXz1JLkJ1ZmZlcjtmdW5j''@;'; put 'put ''dGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLGcoXyxCKSxCLmZy''@;'; put 'put ''b209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5''@;'; put 'put ''cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNTk0MjoodWUsWCx5KT0+eyhYPXVlLmV4cG9ydHM9eSgxOTYwOSkpLlN0cmVhbT1YLFguUmVhZGFibGU9WCxYLldyaXRhYmxlPXkoNDc4NDkpLFguRHVwbGV4PXkoNzQwNzUpLFguVHJhbnNmb3JtPXkoMjkwOSksWC5QYXNzVGhyb3VnaD15''@;'; put 'put ''KDE4ODIzKX0sMzY2MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4MzgzOCkuQnVmZmVyLF89eSg3MTk5MyksZz15KDEzNjg2KSxCPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5''@;'; put 'put ''LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwz''@;'; put 'put ''LDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0''@;'; put 'put ''LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEs''@;'; put 'put ''Niw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLE89WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwx''@;'; put 'put ''NCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIx''@;'; put 'put ''NywwXTtmdW5jdGlvbiBMKCl7Zy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEosbmUpe3JldHVybiBKPDxuZXxKPj4+MzIt''@;'; put 'put ''bmV9ZnVuY3Rpb24gVShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZV5pZV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBXKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lJmllfH5uZSZsZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBZ''@;'; put 'put ''KEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKChuZXx+aWUpXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIHEoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmUmbGV8aWUmfmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIGVlKEosbmUsaWUs''@;'; put 'put ''bGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lXihpZXx+bGUpKStfZStUZXwwLFNlKSttZXwwfV8oTCxnKSxMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBKPUIsbmU9MDtuZTwxNjsrK25lKUpbbmVdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqbmUpO2Zvcih2''@;'; put 'put ''YXIgaWU9MHx0aGlzLl9hLGxlPTB8dGhpcy5fYixtZT0wfHRoaXMuX2MsX2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5fZSxTZT0wfHRoaXMuX2EsamU9MHx0aGlzLl9iLFY9MHx0aGlzLl9jLHA9MHx0aGlzLl9kLGI9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEpe3ZhciBDLFQ7eDwxNj8oQz1VKGll''@;'; put 'put ''LGxlLG1lLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVlKFNlLGplLFYscCxiLEpbUFt4XV0sTlswXSxPW3hdKSk6eDwzMj8oQz1XKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsxXSxGW3hdKSxUPXEoU2UsamUsVixwLGIsSltQW3hdXSxOWzFdLE9beF0pKTp4PDQ4PyhDPVkoaWUsbGUs''@;'; put 'put ''bWUsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9WShTZSxqZSxWLHAsYixKW1BbeF1dLE5bMl0sT1t4XSkpOng8NjQ/KEM9cShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbM10sRlt4XSksVD1XKFNlLGplLFYscCxiLEpbUFt4XV0sTlszXSxPW3hdKSk6KEM9ZWUoaWUsbGUsbWUsX2UsVGUs''@;'; put 'put ''Slt3W3hdXSx6WzRdLEZbeF0pLFQ9VShTZSxqZSxWLHAsYixKW1BbeF1dLE5bNF0sT1t4XSkpLGllPVRlLFRlPV9lLF9lPUsobWUsMTApLG1lPWxlLGxlPUMsU2U9YixiPXAscD1LKFYsMTApLFY9amUsamU9VH12YXIgSD10aGlzLl9iK21lK3B8MDt0aGlzLl9iPXRoaXMuX2MrX2UrYnwwLHRo''@;'; put 'put ''aXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStqZXwwLHRoaXMuX2U9dGhpcy5fYStsZStWfDAsdGhpcy5fYT1IfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0''@;'; put 'put ''PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBd''@;'; put 'put ''LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxKLndy''@;'; put 'put ''aXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLEp9LHVlLmV4cG9ydHM9TH0sMjcwNTQ6KHVlLFgseSk9Pnt2YXIgST15KDgzODM4KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4g''@;'; put 'put ''dylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEksWCksWC5CdWZmZXI9QiksQi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfLnByb3RvdHlw''@;'; put 'put ''ZSksZyhfLEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtp''@;'; put 'put ''ZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw5MzgwNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQixJPXkoODM4MzgpLF89SS5CdWZmZXIsZz17fTtmb3IoQiBpbiBJKUkuaGFzT3duUHJvcGVydHkoQikmJigiU2xvd0J1ZmZlciI9PT1CfHwiQnVmZmVy''@;'; put 'put ''Ij09PUJ8fChnW0JdPUlbQl0pKTt2YXIgdz1nLkJ1ZmZlcj17fTtmb3IoQiBpbiBfKV8uaGFzT3duUHJvcGVydHkoQikmJigiYWxsb2NVbnNhZmUiPT09Qnx8ImFsbG9jVW5zYWZlU2xvdyI9PT1CfHwod1tCXT1fW0JdKSk7aWYoZy5CdWZmZXIucHJvdG90eXBlPV8ucHJvdG90eXBlLCghdy5m''@;'; put 'put ''cm9tfHx3LmZyb209PT1VaW50OEFycmF5LmZyb20pJiYody5mcm9tPWZ1bmN0aW9uKFAsRixPKXtpZigibnVtYmVyIj09dHlwZW9mIFApdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0''@;'; put 'put ''eXBlb2YgUCk7aWYoUCYmdHlwZW9mIFAubGVuZ3RoPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlw''@;'; put 'put ''ZSAiK3R5cGVvZiBQKTtyZXR1cm4gXyhQLEYsTyl9KSx3LmFsbG9jfHwody5hbGxvYz1mdW5jdGlvbihQLEYsTyl7aWYoIm51bWJlciIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlw''@;'; put 'put ''ZSAnK3R5cGVvZiBQKTtpZihQPDB8fFA+PTIqKDE8PDMwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1ArJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciB6PV8oUCk7cmV0dXJuIEYmJjAhPT1GLmxlbmd0aD8ic3RyaW5nIj09dHlwZW9mIE8/ei5maWxs''@;'; put 'put ''KEYsTyk6ei5maWxsKEYpOnouZmlsbCgwKSx6fSksIWcua1N0cmluZ01heExlbmd0aCl0cnl7Zy5rU3RyaW5nTWF4TGVuZ3RoPXByb2Nlc3MuYmluZGluZygiYnVmZmVyIikua1N0cmluZ01heExlbmd0aH1jYXRjaHt9Zy5jb25zdGFudHN8fChnLmNvbnN0YW50cz17TUFYX0xFTkdUSDpnLmtN''@;'; put 'put ''YXhMZW5ndGh9LGcua1N0cmluZ01heExlbmd0aCYmKGcuY29uc3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIPWcua1N0cmluZ01heExlbmd0aCkpLHVlLmV4cG9ydHM9Z30sOTgwODM6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJOyFmdW5jdGlvbigpe3ZhciBfPVh8fHt9O3ZvaWQgMCE9PShJ''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIF99LmFwcGx5KFgsW10pKSYmKHVlLmV4cG9ydHM9SSksXy5kZWZhdWx0PV87dmFyIGc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIix3PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsRj0vdXJsXChbIiddPyguKz8pWyInXT9cKS8sTz17d29m''@;'; put 'put ''ZjI6ImZvbnQvd29mZjIiLHdvZmY6ImZvbnQvd29mZiIsb3RmOiJhcHBsaWNhdGlvbi94LWZvbnQtb3BlbnR5cGUiLHR0ZjoiYXBwbGljYXRpb24veC1mb250LXR0ZiIsZW90OiJhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCIsc2ZudDoiYXBwbGljYXRpb24vZm9udC1zZm50Iixzdmc6''@;'; put 'put ''ImltYWdlL3N2Zyt4bWwifSx6PWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGIgaW5zdGFuY2VvZiBTVkdFbGVtZW50fSxOPWZ1bmN0aW9uKGIpe2lmKCF6KGIpKXRocm93IG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1''@;'; put 'put ''aXJlZDsgZ290ICIrYil9LEw9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHgsQyl7eihiKT94KGIpOkMobmV3IEVycm9yKCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVpcmVkOyBnb3QgIitiKSl9KX0sVT1mdW5jdGlvbihiKXt2YXIgeD1PYmpl''@;'; put 'put ''Y3Qua2V5cyhPKS5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIGIuaW5kZXhPZigiLiIrQyk+MH0pLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gT1tDXX0pO3JldHVybiB4P3hbMF06KGNvbnNvbGUuZXJyb3IoIlVua25vd24gZm9udCBmb3JtYXQgZm9yICIrYisiLiBGb250cyBtYXkgbm90IGJl''@;'; put 'put ''IHdvcmtpbmcgY29ycmVjdGx5LiIpLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKX0sWT1mdW5jdGlvbihiLHgsQyl7dmFyIFQ9Yi52aWV3Qm94JiZiLnZpZXdCb3guYmFzZVZhbCYmYi52aWV3Qm94LmJhc2VWYWxbQ118fG51bGwhPT14LmdldEF0dHJpYnV0ZShDKSYmIXguZ2V0QXR0cmli''@;'; put 'put ''dXRlKEMpLm1hdGNoKC8lJC8pJiZwYXJzZUludCh4LmdldEF0dHJpYnV0ZShDKSl8fGIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbQ118fHBhcnNlSW50KHguc3R5bGVbQ10pfHxwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKEMpKTtyZXR1cm4g''@;'; put 'put ''dHlwZW9mIFQ+InUifHxudWxsPT09VHx8aXNOYU4ocGFyc2VGbG9hdChUKSk/MDpUfSxKPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD13aW5kb3cuYXRvYihiLnNwbGl0KCIsIilbMV0pLEM9Yi5zcGxpdCgiLCIpWzBdLnNwbGl0KCI6IilbMV0uc3BsaXQoIjsiKVswXSxUPW5ldyBBcnJheUJ1ZmZl''@;'; put 'put ''cih4Lmxlbmd0aCksSD1uZXcgVWludDhBcnJheShUKSxqPTA7ajx4Lmxlbmd0aDtqKyspSFtqXT14LmNoYXJDb2RlQXQoaik7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpDfSl9LG1lPXt9LFRlPW51bGwsamU9ZnVuY3Rpb24oYix4KXt2YXIgQz14fHx7fSxUPUMuc2VsZWN0b3JSZW1hcCxI''@;'; put 'put ''PUMubW9kaWZ5U3R5bGUsRT1DLmZvbnRzLG09Qy5leGNsdWRlVW51c2VkQ3NzLEE9Qy5tb2RpZnlDc3N8fGZ1bmN0aW9uKHdlLFVlKXtyZXR1cm4oVD9UKHdlKTp3ZSkrInsiKyhIP0goVWUpOlVlKSsifVxuIn0sYWU9W10sdGU9dHlwZW9mIEU+InUiLHNlPUV8fFtdO3JldHVybihUZXx8KFRl''@;'; put 'put ''PUFycmF5LmZyb20oZG9jdW1lbnQuc3R5bGVTaGVldHMpLm1hcChmdW5jdGlvbihiKXt0cnl7cmV0dXJue3J1bGVzOmIuY3NzUnVsZXMsaHJlZjpiLmhyZWZ9fWNhdGNoKHgpe3JldHVybiBjb25zb2xlLndhcm4oIlN0eWxlc2hlZXQgY291bGQgbm90IGJlIGxvYWRlZDogIitiLmhyZWYseCks''@;'; put 'put ''e319fSkpKS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXt2YXIgVWU9d2UucnVsZXMsSmU9d2UuaHJlZjtVZSYmQXJyYXkuZnJvbShVZSkuZm9yRWFjaChmdW5jdGlvbihvdCl7aWYodHlwZW9mIG90LnN0eWxlPCJ1IilpZihmdW5jdGlvbihiLHgpe2lmKHgpdHJ5e3JldHVybiBiLnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3IoeCl8fGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoeCl9Y2F0Y2goQyl7Y29uc29sZS53YXJuKCdJbnZhbGlkIENTUyBzZWxlY3RvciAiJyt4KyciJyxDKX19KGIsb3Quc2VsZWN0b3JUZXh0KSlhZS5wdXNoKEEob3Quc2VsZWN0b3JUZXh0LG90LnN0eWxlLmNz''@;'; put 'put ''c1RleHQpKTtlbHNlIGlmKHRlJiZvdC5jc3NUZXh0Lm1hdGNoKC9eQGZvbnQtZmFjZS8pKXt2YXIgeGU9ZnVuY3Rpb24oYix4KXt2YXIgQz1iLmNzc1RleHQubWF0Y2goRiksVD1DJiZDWzFdfHwiIjtpZihUJiYhVC5tYXRjaCgvXmRhdGE6LykmJiJhYm91dDpibGFuayIhPT1UKXt2YXIgSD1U''@;'; put 'put ''LnN0YXJ0c1dpdGgoIi4uLyIpP3grIi8uLi8iK1Q6VC5zdGFydHNXaXRoKCIuLyIpP3grIi8uIitUOlQ7cmV0dXJue3RleHQ6Yi5jc3NUZXh0LGZvcm1hdDpVKEgpLHVybDpIfX19KG90LEplKTt4ZSYmc2UucHVzaCh4ZSl9ZWxzZSBtfHxhZS5wdXNoKG90LmNzc1RleHQpfSl9KSxmdW5jdGlv''@;'; put 'put ''bihiKXtyZXR1cm4gUHJvbWlzZS5hbGwoYi5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEMsVCl7aWYobWVbeC51cmxdKXJldHVybiBDKG1lW3gudXJsXSk7dmFyIEg9bmV3IFhNTEh0dHBSZXF1ZXN0O0guYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgaj1mdW5jdGlvbihiKXtmb3IodmFyIHg9IiIsQz1uZXcgVWludDhBcnJheShiKSxUPTA7VDxDLmJ5dGVMZW5ndGg7VCsrKXgrPVN0cmluZy5mcm9tQ2hhckNvZGUoQ1tUXSk7cmV0dXJuIHdpbmRvdy5idG9hKHgpfShILnJlc3BvbnNlKSxFPXgudGV4dC5yZXBsYWNlKEYsJ3Vy''@;'; put 'put ''bCgiZGF0YTonK3guZm9ybWF0KyI7YmFzZTY0LCIraisnIiknKSsiXG4iO21lW3gudXJsXT1FLEMoRSl9KSxILmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihqKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBsb2FkIGZvbnQgZnJvbTogIit4LnVybCxqKSxtZVt4LnVybF09bnVs''@;'; put 'put ''bCxDKG51bGwpfSksSC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsZnVuY3Rpb24oail7Y29uc29sZS53YXJuKCJBYm9ydGVkIGxvYWRpbmcgZm9udCBmcm9tOiAiK3gudXJsLGopLEMobnVsbCl9KSxILm9wZW4oIkdFVCIseC51cmwpLEgucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsSC5z''@;'; put 'put ''ZW5kKCl9KX0pKS50aGVuKGZ1bmN0aW9uKHgpe3JldHVybiB4LmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQ30pLmpvaW4oIiIpfSl9KHNlKS50aGVuKGZ1bmN0aW9uKHdlKXtyZXR1cm4gYWUuam9pbigiXG4iKSt3ZX0pfSxWPWZ1bmN0aW9uKCl7aWYoIW5hdmlnYXRvci5tc1NhdmVPck9w''@;'; put 'put ''ZW5CbG9iJiYhKCJkb3dubG9hZCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpKXJldHVybntwb3B1cDp3aW5kb3cub3BlbigpfX07Xy5wcmVwYXJlU3ZnPWZ1bmN0aW9uKHAsYix4KXtOKHApO3ZhciBDPWJ8fHt9LFQ9Qy5sZWZ0LEg9dm9pZCAwPT09VD8wOlQsaj1DLnRvcCxFPXZv''@;'; put 'put ''aWQgMD09PWo/MDpqLG09Qy53aWR0aCxBPUMuaGVpZ2h0LGFlPUMuc2NhbGUsdGU9dm9pZCAwPT09YWU/MTphZSxzZT1DLnJlc3BvbnNpdmUsd2U9dm9pZCAwIT09c2UmJnNlLFVlPUMuZXhjbHVkZUNzcyxKZT12b2lkIDAhPT1VZSYmVWU7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBQcm9t''@;'; put 'put ''aXNlLmFsbChBcnJheS5mcm9tKGIucXVlcnlTZWxlY3RvckFsbCgiaW1hZ2UiKSkubWFwKGZ1bmN0aW9uKHgpe3ZhciBDPXguZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIil8fHguZ2V0QXR0cmlidXRlKCJocmVmIik7cmV0dXJuIEM/KGZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiBiJiYwPT09Yi5sYXN0SW5kZXhPZigiaHR0cCIsMCkmJi0xPT09Yi5sYXN0SW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCl9KEMpJiYoQys9KC0xPT09Qy5pbmRleE9mKCI/Iik/Ij8iOiImIikrInQ9IisobmV3IERhdGUpLnZhbHVlT2YoKSksbmV3IFByb21pc2Uo''@;'; put 'put ''ZnVuY3Rpb24oVCxIKXt2YXIgaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxFPW5ldyBJbWFnZTtFLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLEUuc3JjPUMsRS5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIEgobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAiK0MpKX0sRS5v''@;'; put 'put ''bmxvYWQ9ZnVuY3Rpb24oKXtqLndpZHRoPUUud2lkdGgsai5oZWlnaHQ9RS5oZWlnaHQsai5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShFLDAsMCkseC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhyZWYiLGoudG9EYXRhVVJMKCJpbWFnZS9wbmci''@;'; put 'put ''KSksVCghMCl9fSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0pKX0ocCkudGhlbihmdW5jdGlvbigpe3ZhciBvdD1wLmNsb25lTm9kZSghMCk7b3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPShifHx7fSkuYmFja2dyb3VuZENvbG9yfHxwLnN0eWxlLmJhY2tncm91bmRDb2xvcjt2YXIgeGU9ZnVu''@;'; put 'put ''Y3Rpb24oYix4LEMsVCl7aWYoInN2ZyI9PT1iLnRhZ05hbWUpcmV0dXJue3dpZHRoOkN8fFkoYix4LCJ3aWR0aCIpLGhlaWdodDpUfHxZKGIseCwiaGVpZ2h0Iil9O2lmKGIuZ2V0QkJveCl7dmFyIEg9Yi5nZXRCQm94KCk7cmV0dXJue3dpZHRoOkgueCtILndpZHRoLGhlaWdodDpILnkrSC5o''@;'; put 'put ''ZWlnaHR9fX0ocCxvdCxtLEEpLHZlPXhlLndpZHRoLFhlPXhlLmhlaWdodDtpZigic3ZnIiE9PXAudGFnTmFtZSl7aWYoIXAuZ2V0QkJveClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJBdHRlbXB0ZWQgdG8gcmVuZGVyIG5vbi1TVkcgZWxlbWVudCIscCk7bnVsbCE9b3QuZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJ0cmFuc2Zvcm0iKSYmb3Quc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLG90LmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikucmVwbGFjZSgvdHJhbnNsYXRlXCguKj9cKS8sIiIpKTt2YXIgemU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2''@;'; put 'put ''ZyIsInN2ZyIpO3plLmFwcGVuZENoaWxkKG90KSxvdD16ZX1pZihvdC5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxvdC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtILEUsdmUsWGVdLmpvaW4oIiAiKSksb3QuZ2V0QXR0cmlidXRlKCJ4bWxucyIpfHxvdC5zZXRBdHRyaWJ1dGVOUyhn''@;'; put 'put ''LCJ4bWxucyIsdyksb3QuZ2V0QXR0cmlidXRlKCJ4bWxuczp4bGluayIpfHxvdC5zZXRBdHRyaWJ1dGVOUyhnLCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSx3ZT8ob3QucmVtb3ZlQXR0cmlidXRlKCJ3aWR0aCIpLG90LnJlbW92ZUF0dHJpYnV0ZSgiaGVp''@;'; put 'put ''Z2h0Iiksb3Quc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpKToob3Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsdmUqdGUpLG90LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixYZSp0ZSkpLEFycmF5LmZyb20ob3QucXVlcnlTZWxlY3RvckFsbCgiZm9yZWln''@;'; put 'put ''bk9iamVjdCA+ICoiKSkuZm9yRWFjaChmdW5jdGlvbihPZSl7T2Uuc2V0QXR0cmlidXRlTlMoZywieG1sbnMiLCJzdmciPT09T2UudGFnTmFtZT93OiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIil9KSwhSmUpcmV0dXJuIGplKHAsYikudGhlbihmdW5jdGlvbihPZSl7dmFyIEllPWRv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7SWUuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxJZS5pbm5lckhUTUw9IjwhW0NEQVRBW1xuIitPZSsiXG5dXT4iO3ZhciBWZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWZzIik7VmUuYXBwZW5kQ2hpbGQoSWUpLG90Lmlu''@;'; put 'put ''c2VydEJlZm9yZShWZSxvdC5maXJzdENoaWxkKTt2YXIga2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7a2UuYXBwZW5kQ2hpbGQob3QpO3ZhciBBZT1rZS5pbm5lckhUTUwucmVwbGFjZSgvTlNcZCs6aHJlZi9naSwneG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv''@;'; put 'put ''eGxpbmsiIHhsaW5rOmhyZWYnKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeClyZXR1cm57c3JjOkFlLHdpZHRoOnZlLGhlaWdodDpYZX07eChBZSx2ZSxYZSl9KTt2YXIgRGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7RGUuYXBwZW5kQ2hpbGQob3QpO3ZhciBGZT1EZS5pbm5lckhU''@;'; put 'put ''TUw7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHgpcmV0dXJue3NyYzpGZSx3aWR0aDp2ZSxoZWlnaHQ6WGV9O3goRmUsdmUsWGUpfSl9LF8uc3ZnQXNEYXRhVXJpPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gTihwKSxfLnByZXBhcmVTdmcocCxiKS50aGVuKGZ1bmN0aW9uKEMpe3ZhciBIPUMud2lk''@;'; put 'put ''dGgsaj1DLmhlaWdodCxFPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIrd2luZG93LmJ0b2EoZnVuY3Rpb24oYil7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoYikucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxmdW5jdGlvbih4LEMpe3ZhciBUPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoIjB4IitDKTtyZXR1cm4iJSI9PT1UPyIlMjUiOlR9KSl9KCc8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3Mv''@;'; put 'put ''U1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbPCFFTlRJVFkgbmJzcCAiJiMxNjA7Ij5dPicrQy5zcmMpKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeCYmeChFLEgsaiksRX0pfSxfLnN2Z0FzUG5nVXJpPWZ1bmN0aW9uKHAsYix4KXtOKHApO3ZhciBDPWJ8fHt9LFQ9Qy5lbmNvZGVyVHlwZSxI''@;'; put 'put ''PXZvaWQgMD09PVQ/ImltYWdlL3BuZyI6VCxqPUMuZW5jb2Rlck9wdGlvbnMsRT12b2lkIDA9PT1qPy44OmosbT1DLmNhbnZnLEE9ZnVuY3Rpb24odGUpe3ZhciBzZT10ZS5zcmMsd2U9dGUud2lkdGgsVWU9dGUuaGVpZ2h0LEplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG90''@;'; put 'put ''PUplLmdldENvbnRleHQoIjJkIikseGU9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7SmUud2lkdGg9d2UqeGUsSmUuaGVpZ2h0PVVlKnhlLEplLnN0eWxlLndpZHRoPUplLndpZHRoKyJweCIsSmUuc3R5bGUuaGVpZ2h0PUplLmhlaWdodCsicHgiLG90LnNldFRyYW5zZm9ybSh4ZSwwLDAs''@;'; put 'put ''eGUsMCwwKSxtP20oSmUsc2UpOm90LmRyYXdJbWFnZShzZSwwLDApO3ZhciB2ZT12b2lkIDA7dHJ5e3ZlPUplLnRvRGF0YVVSTChILEUpfWNhdGNoKFhlKXtpZih0eXBlb2YgU2VjdXJpdHlFcnJvcjwidSImJlhlIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcnx8IlNlY3VyaXR5RXJyb3IiPT09''@;'; put 'put ''WGUubmFtZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJSZW5kZXJlZCBTVkcgaW1hZ2VzIGNhbm5vdCBiZSBkb3dubG9hZGVkIGluIHRoaXMgYnJvd3Nlci4iKTt0aHJvdyBYZX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeCYmeCh2ZSxKZS53aWR0aCxKZS5oZWlnaHQpLFByb21pc2Uu''@;'; put 'put ''cmVzb2x2ZSh2ZSl9O3JldHVybiBtP18ucHJlcGFyZVN2ZyhwLGIpLnRoZW4oQSk6Xy5zdmdBc0RhdGFVcmkocCxiKS50aGVuKGZ1bmN0aW9uKGFlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odGUsc2Upe3ZhciB3ZT1uZXcgSW1hZ2U7d2Uub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRlKEEoe3NyYzp3ZSx3aWR0aDp3ZS53aWR0aCxoZWlnaHQ6d2UuaGVpZ2h0fSkpfSx3ZS5vbmVycm9yPWZ1bmN0aW9uKCl7c2UoIlRoZXJlIHdhcyBhbiBlcnJvciBsb2FkaW5nIHRoZSBkYXRhIFVSSSBhcyBhbiBpbWFnZSBvbiB0aGUgZm9sbG93aW5nIFNWR1xuIit3aW5kb3cuYXRvYihh''@;'; put 'put ''ZS5zbGljZSgyNikpKyJPcGVuIHRoZSBmb2xsb3dpbmcgbGluayB0byBzZWUgYnJvd3NlcidzIGRpYWdub3Npc1xuIithZSl9LHdlLnNyYz1hZX0pfSl9LF8uZG93bmxvYWQ9ZnVuY3Rpb24ocCxiLHgpe2lmKG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKW5hdmlnYXRvci5tc1NhdmVPck9w''@;'; put 'put ''ZW5CbG9iKEooYikscCk7ZWxzZXt2YXIgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYoImRvd25sb2FkImluIEMpe0MuZG93bmxvYWQ9cCxDLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQyk7dHJ5e3ZhciBUPUooYiksSD1VUkwuY3JlYXRl''@;'; put 'put ''T2JqZWN0VVJMKFQpO0MuaHJlZj1ILEMub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTChIKX0pfX1jYXRjaChqKXtjb25zb2xlLmVycm9yKGopLGNvbnNvbGUud2FybigiRXJyb3Igd2hp''@;'; put 'put ''bGUgZ2V0dGluZyBvYmplY3QgVVJMLiBGYWxsaW5nIGJhY2sgdG8gc3RyaW5nIFVSTC4iKSxDLmhyZWY9Yn1DLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChDKX1lbHNlIHgmJngucG9wdXAmJih4LnBvcHVwLmRvY3VtZW50LnRpdGxlPXAseC5wb3B1cC5sb2NhdGlvbi5yZXBs''@;'; put 'put ''YWNlKGIpKX19LF8uc2F2ZVN2Zz1mdW5jdGlvbihwLGIseCl7dmFyIEM9VigpO3JldHVybiBMKHApLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uc3ZnQXNEYXRhVXJpKFQseHx8e30pfSkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5kb3dubG9hZChiLFQsQyl9KX0sXy5zYXZlU3ZnQXNQ''@;'; put 'put ''bmc9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPVYoKTtyZXR1cm4gTChwKS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLnN2Z0FzUG5nVXJpKFQseHx8e30pfSkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5kb3dubG9hZChiLFQsQyl9KX19KCl9LDcwNDYzOih1ZSxYLHkpPT57dmFyIEk9eSgy''@;'; put 'put ''NzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8oZyxCKXt0aGlzLl9ibG9jaz1JLmFsbG9jKGcpLHRoaXMuX2ZpbmFsU2l6ZT1CLHRoaXMuX2Jsb2NrU2l6ZT1nLHRoaXMuX2xlbj0wfV8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihnLEIpeyJzdHJpbmciPT10eXBlb2YgZyYmKGc9SS5mcm9tKGcs''@;'; put 'put ''Qj1CfHwidXRmOCIpKTtmb3IodmFyIHc9dGhpcy5fYmxvY2ssUD10aGlzLl9ibG9ja1NpemUsRj1nLmxlbmd0aCxPPXRoaXMuX2xlbix6PTA7ejxGOyl7Zm9yKHZhciBOPU8lUCxMPU1hdGgubWluKEYteixQLU4pLEs9MDtLPEw7SysrKXdbTitLXT1nW3orS107eis9TCwoTys9TCklUD09MCYm''@;'; put 'put ''dGhpcy5fdXBkYXRlKHcpfXJldHVybiB0aGlzLl9sZW4rPUYsdGhpc30sXy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGcpe3ZhciBCPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbQl09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxCKzEpLEI+PXRoaXMuX2ZpbmFsU2l6''@;'; put 'put ''ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIHc9OCp0aGlzLl9sZW47aWYodzw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKHcsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIFA9KDQyOTQ5NjcyOTUmdyk+Pj4wO3Ro''@;'; put 'put ''aXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKHctUCkvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShQLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBPPXRoaXMuX2hhc2goKTtyZXR1cm4gZz9PLnRv''@;'; put 'put ''U3RyaW5nKGcpOk99LF8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSx1ZS5leHBvcnRzPV99LDI1NDQzOih1ZSxYLHkpPT57dmFyIEk9dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtn''@;'; put 'put ''PWcudG9Mb3dlckNhc2UoKTt2YXIgQj1JW2ddO2lmKCFCKXRocm93IG5ldyBFcnJvcihnKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBCfTtJLnNoYT15KDQ4NTg1KSxJLnNoYTE9eSgyMTI3MCksSS5zaGEyMjQ9eSg0MjcwOSksSS5z''@;'; put 'put ''aGEyNTY9eSgzMjE0OCksSS5zaGEzODQ9eSg1MTg1NiksSS5zaGE1MTI9eSgzMTIxKX0sNDg1ODU6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNzA0NjMpLGc9eSgyNzA1NCkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5l''@;'; put 'put ''dyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjw8MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLEwsSyxVKXtyZXR1cm4gMD09PU4/''@;'; put 'put ''TCZLfH5MJlU6Mj09PU4/TCZLfEwmVXxLJlU6TF5LXlV9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3''@;'; put 'put ''NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7Zm9yKHZhciBMPXRoaXMuX3csSz0wfHRoaXMuX2EsVT0wfHRoaXMuX2IsVz0wfHRoaXMuX2MsWT0wfHRoaXMuX2QscT0wfHRoaXMuX2UsZWU9MDtlZTwxNjsrK2VlKUxbZWVdPU4ucmVhZEludDMyQkUoNCplZSk7Zm9y''@;'; put 'put ''KDtlZTw4MDsrK2VlKUxbZWVdPUxbZWUtM11eTFtlZS04XV5MW2VlLTE0XV5MW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIG5lPX5+KEovMjApLGllPUYoSykreihuZSxVLFcsWSkrcStMW0pdK0JbbmVdfDA7cT1ZLFk9VyxXPU8oVSksVT1LLEs9aWV9dGhpcy5fYT1LK3RoaXMu''@;'; put 'put ''X2F8MCx0aGlzLl9iPVUrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1ZK3RoaXMuX2R8MCx0aGlzLl9lPXErdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBOPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJCRSgwfHRo''@;'; put 'put ''aXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTn0sdWUuZXhwb3J0cz1QfSwyMTI3MDoodWUsWCx5KT0+e3ZhciBJPXko''@;'; put 'put ''NzE5OTMpLF89eSg3MDQ2MyksZz15KDI3MDU0KS5CdWZmZXIsQj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBG''@;'; put 'put ''KEwpe3JldHVybiBMPDwxfEw+Pj4zMX1mdW5jdGlvbiBPKEwpe3JldHVybiBMPDw1fEw+Pj4yN31mdW5jdGlvbiB6KEwpe3JldHVybiBMPDwzMHxMPj4+Mn1mdW5jdGlvbiBOKEwsSyxVLFcpe3JldHVybiAwPT09TD9LJlV8fksmVzoyPT09TD9LJlV8SyZXfFUmVzpLXlVeV31JKFAsXyksUC5w''@;'; put 'put ''cm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtm''@;'; put 'put ''b3IodmFyIEs9dGhpcy5fdyxVPTB8dGhpcy5fYSxXPTB8dGhpcy5fYixZPTB8dGhpcy5fYyxxPTB8dGhpcy5fZCxlZT0wfHRoaXMuX2UsSj0wO0o8MTY7KytKKUtbSl09TC5yZWFkSW50MzJCRSg0KkopO2Zvcig7Sjw4MDsrK0opS1tKXT1GKEtbSi0zXV5LW0otOF1eS1tKLTE0XV5LW0otMTZd''@;'; put 'put ''KTtmb3IodmFyIG5lPTA7bmU8ODA7KytuZSl7dmFyIGllPX5+KG5lLzIwKSxsZT1PKFUpK04oaWUsVyxZLHEpK2VlK0tbbmVdK0JbaWVdfDA7ZWU9cSxxPVksWT16KFcpLFc9VSxVPWxlfXRoaXMuX2E9VSt0aGlzLl9hfDAsdGhpcy5fYj1XK3RoaXMuX2J8MCx0aGlzLl9jPVkrdGhpcy5fY3ww''@;'; put 'put ''LHRoaXMuX2Q9cSt0aGlzLl9kfDAsdGhpcy5fZT1lZSt0aGlzLl9lfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTC53cml0''@;'; put 'put ''ZUludDMyQkUoMHx0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxMfSx1ZS5leHBvcnRzPVB9LDQyNzA5Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDMyMTQ4KSxnPXkoNzA0NjMpLEI9eSgyNzA1NCkuQnVm''@;'; put 'put ''ZmVyLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDY0LDU2KX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3''@;'; put 'put ''MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoMjgpO3JldHVy''@;'; put 'put ''biBGLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxGLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndy''@;'; put 'put ''aXRlSW50MzJCRSh0aGlzLl9nLDI0KSxGfSx1ZS5leHBvcnRzPVB9LDMyMTQ4Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDcwNDYzKSxnPXkoMjcwNTQpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcw''@;'; put 'put ''OTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4Mywx''@;'; put 'put ''MjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUx''@;'; put 'put ''ODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3''@;'; put 'put ''LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhp''@;'; put 'put ''cy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKFUsVyxZKXtyZXR1cm4gWV5VJihXXlkpfWZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiBVJld8WSYoVXxXKX1mdW5jdGlvbiB6KFUpe3JldHVybihVPj4+MnxVPDwzMCleKFU+Pj4xM3xVPDwxOSleKFU+Pj4y''@;'; put 'put ''MnxVPDwxMCl9ZnVuY3Rpb24gTihVKXtyZXR1cm4oVT4+PjZ8VTw8MjYpXihVPj4+MTF8VTw8MjEpXihVPj4+MjV8VTw8Nyl9ZnVuY3Rpb24gTChVKXtyZXR1cm4oVT4+Pjd8VTw8MjUpXihVPj4+MTh8VTw8MTQpXlU+Pj4zfWZ1bmN0aW9uIEsoVSl7cmV0dXJuKFU+Pj4xN3xVPDwxNSleKFU+''@;'; put 'put ''Pj4xOXxVPDwxMyleVT4+PjEwfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0y''@;'; put 'put ''NjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz10aGlzLl93LFk9MHx0aGlzLl9hLHE9MHx0aGlzLl9iLGVlPTB8dGhpcy5fYyxKPTB8dGhpcy5fZCxuZT0wfHRoaXMuX2Us''@;'; put 'put ''aWU9MHx0aGlzLl9mLGxlPTB8dGhpcy5fZyxtZT0wfHRoaXMuX2gsX2U9MDtfZTwxNjsrK19lKVdbX2VdPVUucmVhZEludDMyQkUoNCpfZSk7Zm9yKDtfZTw2NDsrK19lKVdbX2VdPUsoV1tfZS0yXSkrV1tfZS03XStMKFdbX2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsr''@;'; put 'put ''K1RlKXt2YXIgU2U9bWUrTihuZSkrRihuZSxpZSxsZSkrQltUZV0rV1tUZV18MCxqZT16KFkpK08oWSxxLGVlKXwwO21lPWxlLGxlPWllLGllPW5lLG5lPUorU2V8MCxKPWVlLGVlPXEscT1ZLFk9U2UramV8MH10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9cSt0aGlzLl9ifDAsdGhpcy5f''@;'; put 'put ''Yz1lZSt0aGlzLl9jfDAsdGhpcy5fZD1KK3RoaXMuX2R8MCx0aGlzLl9lPW5lK3RoaXMuX2V8MCx0aGlzLl9mPWllK3RoaXMuX2Z8MCx0aGlzLl9nPWxlK3RoaXMuX2d8MCx0aGlzLl9oPW1lK3RoaXMuX2h8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVT1nLmFsbG9jVW5z''@;'; put 'put ''YWZlKDMyKTtyZXR1cm4gVS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksVS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksVS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksVS53cml0ZUludDMyQkUodGhp''@;'; put 'put ''cy5fZiwyMCksVS53cml0ZUludDMyQkUodGhpcy5fZywyNCksVS53cml0ZUludDMyQkUodGhpcy5faCwyOCksVX0sdWUuZXhwb3J0cz1QfSw1MTg1NjoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSgzMTIxKSxnPXkoNzA0NjMpLEI9eSgyNzA1NCkuQnVmZmVyLHc9bmV3IEFycmF5KDE2''@;'; put 'put ''MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhpcywxMjgsMTEyKX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlz''@;'; put 'put ''Ll9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0''@;'; put 'put ''NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9Qi5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gTyh6LE4sTCl7''@;'; put 'put ''Ri53cml0ZUludDMyQkUoeixMKSxGLndyaXRlSW50MzJCRShOLEwrNCl9cmV0dXJuIE8odGhpcy5fYWgsdGhpcy5fYWwsMCksTyh0aGlzLl9iaCx0aGlzLl9ibCw4KSxPKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxPKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxPKHRoaXMuX2VoLHRoaXMuX2VsLDMy''@;'; put 'put ''KSxPKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxGfSx1ZS5leHBvcnRzPVB9LDMxMjE6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNzA0NjMpLGc9eSgyNzA1NCkuQnVmZmVyLEI9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0''@;'; put 'put ''ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUy''@;'; put 'put ''NzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzks''@;'; put 'put ''MjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2''@;'; put 'put ''Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkx''@;'; put 'put ''MiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYw''@;'; put 'put ''LDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEw''@;'; put 'put ''MDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYy''@;'; put 'put ''MjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQy''@;'; put 'put ''NywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIw''@;'; put 'put ''NjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMx''@;'; put 'put ''NiwxMjQ2MTg5NTkxXSx3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gRihxLGVlLEope3JldHVybiBKXnEmKGVlXkopfWZ1bmN0aW9uIE8ocSxlZSxKKXtyZXR1cm4gcSZlZXxKJihxfGVlKX1m''@;'; put 'put ''dW5jdGlvbiB6KHEsZWUpe3JldHVybihxPj4+Mjh8ZWU8PDQpXihlZT4+PjJ8cTw8MzApXihlZT4+Pjd8cTw8MjUpfWZ1bmN0aW9uIE4ocSxlZSl7cmV0dXJuKHE+Pj4xNHxlZTw8MTgpXihxPj4+MTh8ZWU8PDE0KV4oZWU+Pj45fHE8PDIzKX1mdW5jdGlvbiBMKHEsZWUpe3JldHVybihxPj4+''@;'; put 'put ''MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXnE+Pj43fWZ1bmN0aW9uIEsocSxlZSl7cmV0dXJuKHE+Pj4xfGVlPDwzMSleKHE+Pj44fGVlPDwyNCleKHE+Pj43fGVlPDwyNSl9ZnVuY3Rpb24gVShxLGVlKXtyZXR1cm4ocT4+PjE5fGVlPDwxMyleKGVlPj4+Mjl8cTw8MylecT4+PjZ9ZnVuY3Rp''@;'; put 'put ''b24gVyhxLGVlKXtyZXR1cm4ocT4+PjE5fGVlPDwxMyleKGVlPj4+Mjl8cTw8MyleKHE+Pj42fGVlPDwyNil9ZnVuY3Rpb24gWShxLGVlKXtyZXR1cm4gcT4+PjA8ZWU+Pj4wPzE6MH1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAz''@;'; put 'put ''LHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMu''@;'; put 'put ''X2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24ocSl7Zm9yKHZhciBlZT10aGlzLl93LEo9MHx0aGlzLl9haCxuZT0wfHRoaXMuX2JoLGllPTB8dGhpcy5fY2gsbGU9MHx0aGlzLl9kaCxtZT0wfHRoaXMuX2VoLF9lPTB8dGhpcy5fZmgsVGU9MHx0aGlzLl9naCxTZT0wfHRoaXMuX2hoLGplPTB8dGhpcy5fYWwsVj0wfHRoaXMuX2JsLHA9''@;'; put 'put ''MHx0aGlzLl9jbCxiPTB8dGhpcy5fZGwseD0wfHRoaXMuX2VsLEM9MHx0aGlzLl9mbCxUPTB8dGhpcy5fZ2wsSD0wfHRoaXMuX2hsLGo9MDtqPDMyO2orPTIpZWVbal09cS5yZWFkSW50MzJCRSg0KmopLGVlW2orMV09cS5yZWFkSW50MzJCRSg0KmorNCk7Zm9yKDtqPDE2MDtqKz0yKXt2YXIg''@;'; put 'put ''RT1lZVtqLTMwXSxtPWVlW2otMzArMV0sQT1MKEUsbSksYWU9SyhtLEUpLHRlPVUoRT1lZVtqLTRdLG09ZWVbai00KzFdKSxzZT1XKG0sRSksSmU9ZWVbai0zMl0sb3Q9ZWVbai0zMisxXSx4ZT1hZStlZVtqLTE0KzFdfDAsdmU9QStlZVtqLTE0XStZKHhlLGFlKXwwO3ZlPSh2ZT12ZSt0ZStZ''@;'; put 'put ''KHhlPXhlK3NlfDAsc2UpfDApK0plK1koeGU9eGUrb3R8MCxvdCl8MCxlZVtqXT12ZSxlZVtqKzFdPXhlfWZvcih2YXIgWGU9MDtYZTwxNjA7WGUrPTIpe3ZlPWVlW1hlXSx4ZT1lZVtYZSsxXTt2YXIgemU9TyhKLG5lLGllKSxEZT1PKGplLFYscCksRmU9eihKLGplKSxPZT16KGplLEopLEll''@;'; put 'put ''PU4obWUseCksVmU9Tih4LG1lKSxrZT1CW1hlXSxBZT1CW1hlKzFdLF90PUYobWUsX2UsVGUpLG50PUYoeCxDLFQpLFFlPUgrVmV8MCx1bj1TZStJZStZKFFlLEgpfDA7dW49KHVuPSh1bj11bitfdCtZKFFlPVFlK250fDAsbnQpfDApK2tlK1koUWU9UWUrQWV8MCxBZSl8MCkrdmUrWShRZT1R''@;'; put 'put ''ZSt4ZXwwLHhlKXwwO3ZhciB5dD1PZStEZXwwLE10PUZlK3plK1koeXQsT2UpfDA7U2U9VGUsSD1ULFRlPV9lLFQ9QyxfZT1tZSxDPXgsbWU9bGUrdW4rWSh4PWIrUWV8MCxiKXwwLGxlPWllLGI9cCxpZT1uZSxwPVYsbmU9SixWPWplLEo9dW4rTXQrWShqZT1RZSt5dHwwLFFlKXwwfXRoaXMu''@;'; put 'put ''X2FsPXRoaXMuX2FsK2plfDAsdGhpcy5fYmw9dGhpcy5fYmwrVnwwLHRoaXMuX2NsPXRoaXMuX2NsK3B8MCx0aGlzLl9kbD10aGlzLl9kbCtifDAsdGhpcy5fZWw9dGhpcy5fZWwreHwwLHRoaXMuX2ZsPXRoaXMuX2ZsK0N8MCx0aGlzLl9nbD10aGlzLl9nbCtUfDAsdGhpcy5faGw9dGhpcy5f''@;'; put 'put ''aGwrSHwwLHRoaXMuX2FoPXRoaXMuX2FoK0orWSh0aGlzLl9hbCxqZSl8MCx0aGlzLl9iaD10aGlzLl9iaCtuZStZKHRoaXMuX2JsLFYpfDAsdGhpcy5fY2g9dGhpcy5fY2graWUrWSh0aGlzLl9jbCxwKXwwLHRoaXMuX2RoPXRoaXMuX2RoK2xlK1kodGhpcy5fZGwsYil8MCx0aGlzLl9laD10''@;'; put 'put ''aGlzLl9laCttZStZKHRoaXMuX2VsLHgpfDAsdGhpcy5fZmg9dGhpcy5fZmgrX2UrWSh0aGlzLl9mbCxDKXwwLHRoaXMuX2doPXRoaXMuX2doK1RlK1kodGhpcy5fZ2wsVCl8MCx0aGlzLl9oaD10aGlzLl9oaCtTZStZKHRoaXMuX2hsLEgpfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHE9Zy5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gZWUoSixuZSxpZSl7cS53cml0ZUludDMyQkUoSixpZSkscS53cml0ZUludDMyQkUobmUsaWUrNCl9cmV0dXJuIGVlKHRoaXMuX2FoLHRoaXMuX2FsLDApLGVlKHRoaXMuX2JoLHRoaXMuX2JsLDgpLGVlKHRoaXMuX2NoLHRoaXMu''@;'; put 'put ''X2NsLDE2KSxlZSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksZWUodGhpcy5fZWgsdGhpcy5fZWwsMzIpLGVlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxlZSh0aGlzLl9naCx0aGlzLl9nbCw0OCksZWUodGhpcy5faGgsdGhpcy5faGwsNTYpLHF9LHVlLmV4cG9ydHM9UH0sNzA0NToodWUsWCx5KT0+''@;'; put 'put ''e3VlLmV4cG9ydHM9Zzt2YXIgST15KDQ0MzU2KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gZygpe0kuY2FsbCh0aGlzKX15KDcxOTkzKShnLEkpLGcuUmVhZGFibGU9eSg2MTA5MiksZy5Xcml0YWJsZT15KDE1NDkyKSxnLkR1cGxleD15KDEwMzApLGcuVHJhbnNmb3JtPXkoNDM0MTApLGcuUGFz''@;'; put 'put ''c1Rocm91Z2g9eSg4MzgyNCksZy5maW5pc2hlZD15KDU3ODU0KSxnLnBpcGVsaW5lPXkoNjg0NiksZy5TdHJlYW09ZyxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFcpe0Iud3JpdGFibGUmJiExPT09Qi53cml0ZShXKSYmUC5wYXVzZSYmUC5w''@;'; put 'put ''YXVzZSgpfWZ1bmN0aW9uIE8oKXtQLnJlYWRhYmxlJiZQLnJlc3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRhIixGKSxCLm9uKCJkcmFpbiIsTyksIUIuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQiLE4pLFAub24oImNsb3NlIixMKSk7dmFyIHo9ITE7ZnVuY3Rpb24g''@;'; put 'put ''Tigpe3p8fCh6PSEwLEIuZW5kKCkpfWZ1bmN0aW9uIEwoKXt6fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2YgQi5kZXN0cm95JiZCLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhXKXtpZihVKCksMD09PUkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVuY3Rpb24gVSgpe1Au''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImRhdGEiLEYpLEIucmVtb3ZlTGlzdGVuZXIoImRyYWluIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksQi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLFAu''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImVuZCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFUpLEIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLEIub24oImVycm9yIixLKSxQLm9uKCJlbmQiLFUpLFAub24oImNsb3NlIixVKSxCLm9uKCJjbG9zZSIsVSks''@;'; put 'put ''Qi5lbWl0KCJwaXBlIixQKSxCfX0sMzA0NjQ6dWU9PnsidXNlIHN0cmljdCI7dmFyIHk9e307ZnVuY3Rpb24gSShQLEYsTyl7T3x8KE89RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEsoVSxXLFkpe3JldHVybiBMLmNhbGwodGhpcyxmdW5jdGlvbiB6KEwsSyxVKXtyZXR1cm4i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIEY/RjpGKEwsSyxVKX0oVSxXLFkpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxMKSxLfShPKTtOLnByb3Rv''@;'; put 'put ''dHlwZS5uYW1lPU8ubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAseVtQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgTz1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopfSksTz4yPyJvbmUgb2YgIi5jb25jYXQoRiwi''@;'; put 'put ''ICIpLmNvbmNhdChQLnNsaWNlKDAsTy0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbTy0xXToyPT09Tz8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25j''@;'; put 'put ''YXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5j''@;'; put 'put ''dGlvbihQLEYsTyl7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBQLnN1YnN0cighT3x8TzwwPzA6K08sRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3Qg''@;'; put 'put ''YmUiLGZ1bmN0aW9uIEIoUCxGLE8pe3JldHVybih2b2lkIDA9PT1PfHxPPlAubGVuZ3RoKSYmKE89UC5sZW5ndGgpLFAuc3Vic3RyaW5nKE8tRi5sZW5ndGgsTyk9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlw''@;'; put 'put ''ZSIpKTtlbHNle3ZhciBMPWZ1bmN0aW9uIHcoUCxGLE8pe3JldHVybiJudW1iZXIiIT10eXBlb2YgTyYmKE89MCksIShPK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixPKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJyku''@;'; put 'put ''Y29uY2F0KEwsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgTyl9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgi''@;'; put 'put ''RVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5j''@;'; put 'put ''dGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUs''@;'; put 'put ''IG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5H''@;'; put 'put ''IixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLHVlLmV4cG9ydHMuRj15fSwxMDMwOih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPU9iamVjdC5rZXlzfHxmdW5jdGlvbihOKXt2YXIgTD1bXTtmb3IodmFyIEsgaW4gTilMLnB1c2goSyk7cmV0dXJuIEx9O3VlLmV4cG9ydHM9Rjt2YXIgXz15KDYxMDkyKSxnPXkoMTU0OTIpO3koNzE5OTMpKEYsXyk7Zm9yKHZhciBCPUkoZy5wcm90b3R5cGUpLHc9''@;'; put 'put ''MDt3PEIubGVuZ3RoO3crKyl7dmFyIFA9Qlt3XTtGLnByb3RvdHlwZVtQXXx8KEYucHJvdG90eXBlW1BdPWcucHJvdG90eXBlW1BdKX1mdW5jdGlvbiBGKE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIEYpKXJldHVybiBuZXcgRihOKTtfLmNhbGwodGhpcyxOKSxnLmNhbGwodGhpcyxOKSx0aGlz''@;'; put 'put ''LmFsbG93SGFsZk9wZW49ITAsTiYmKCExPT09Ti5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09Ti53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09Ti5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixPKSkpfWZ1bmN0''@;'; put 'put ''aW9uIE8oKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxwcm9jZXNzLm5leHRUaWNrKHosdGhpcyl9ZnVuY3Rpb24geihOKXtOLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoRi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEwpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1MLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUwpfX0p''@;'; put 'put ''fSw4MzgyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPV87dmFyIEk9eSg0MzQxMCk7ZnVuY3Rpb24gXyhnKXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF8oZyk7SS5jYWxsKHRoaXMsZyl9eSg3MTk5MykoXyxJKSxfLnByb3RvdHlwZS5fdHJhbnNmb3Jt''@;'; put 'put ''PWZ1bmN0aW9uKGcsQix3KXt3KG51bGwsZyl9fSw2MTA5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTt1ZS5leHBvcnRzPVYsVi5SZWFkYWJsZVN0YXRlPWplLHkoNDQzNTYpO3ZhciBOLGc9ZnVuY3Rpb24oRmUsT2Upe3JldHVybiBGZS5saXN0ZW5lcnMoT2UpLmxlbmd0aH0sQj15''@;'; put 'put ''KDEyNjAxKSx3PXkoODM4MzgpLkJ1ZmZlcixQPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sej15KDc3MTk5KTtOPXomJnouZGVidWdsb2c/ei5kZWJ1Z2xv''@;'; put 'put ''Zygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBpZSxsZSxtZSxMPXkoNzUyMjUpLEs9eSg4ODE1MiksVz15KDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFk9eSgzMDQ2NCkuRixxPVkuRVJSX0lOVkFMSURfQVJHX1RZUEUsZWU9WS5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLEo9WS5FUlJf''@;'; put 'put ''TUVUSE9EX05PVF9JTVBMRU1FTlRFRCxuZT1ZLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7eSg3MTk5MykoVixCKTt2YXIgX2U9Sy5lcnJvck9yRGVzdHJveSxUZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBqZShEZSxG''@;'; put 'put ''ZSxPZSl7ST1JfHx5KDEwMzApLCJib29sZWFuIiE9dHlwZW9mIE9lJiYoT2U9RmUgaW5zdGFuY2VvZiBJKSx0aGlzLm9iamVjdE1vZGU9ISEoRGU9RGV8fHt9KS5vYmplY3RNb2RlLE9lJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFEZS5yZWFkYWJsZU9iamVjdE1vZGUp''@;'; put 'put ''LHRoaXMuaGlnaFdhdGVyTWFyaz1XKHRoaXMsRGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsT2UpLHRoaXMuYnVmZmVyPW5ldyBMLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRF''@;'; put 'put ''bWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0h''@;'; put 'put ''MSE9PURlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhRGUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RGUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29k''@;'; put 'put ''ZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsRGUuZW5jb2RpbmcmJihpZXx8KGllPXkoNzg0NTQpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgaWUoRGUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9RGUuZW5jb2RpbmcpfWZ1bmN0aW9uIFYoRGUpe2lmKEk9SXx8eSgxMDMwKSwhKHRoaXMgaW5zdGFu''@;'; put 'put ''Y2VvZiBWKSlyZXR1cm4gbmV3IFYoRGUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGplKERlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIEkpLHRoaXMucmVhZGFibGU9ITAsRGUmJigiZnVuY3Rpb24iPT10eXBlb2YgRGUucmVhZCYmKHRoaXMuX3JlYWQ9RGUucmVhZCksImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIERlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PURlLmRlc3Ryb3kpKSxCLmNhbGwodGhpcyl9ZnVuY3Rpb24gcChEZSxGZSxPZSxJZSxWZSl7TigicmVhZGFibGVBZGRDaHVuayIsRmUpO3ZhciBBZSxrZT1EZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09RmUpa2UucmVhZGluZz0hMSxm''@;'; put 'put ''dW5jdGlvbiBqKERlLEZlKXtpZihOKCJvbkVvZkNodW5rIiksIUZlLmVuZGVkKXtpZihGZS5kZWNvZGVyKXt2YXIgT2U9RmUuZGVjb2Rlci5lbmQoKTtPZSYmT2UubGVuZ3RoJiYoRmUuYnVmZmVyLnB1c2goT2UpLEZlLmxlbmd0aCs9RmUub2JqZWN0TW9kZT8xOk9lLmxlbmd0aCl9RmUuZW5k''@;'; put 'put ''ZWQ9ITAsRmUuc3luYz9FKERlKTooRmUubmVlZFJlYWRhYmxlPSExLEZlLmVtaXR0ZWRSZWFkYWJsZXx8KEZlLmVtaXR0ZWRSZWFkYWJsZT0hMCxtKERlKSkpfX0oRGUsa2UpO2Vsc2UgaWYoVmV8fChBZT1mdW5jdGlvbiB4KERlLEZlKXt2YXIgT2U7cmV0dXJuIWZ1bmN0aW9uIE8oRGUpe3Jl''@;'; put 'put ''dHVybiB3LmlzQnVmZmVyKERlKXx8RGUgaW5zdGFuY2VvZiBQfShGZSkmJiJzdHJpbmciIT10eXBlb2YgRmUmJnZvaWQgMCE9PUZlJiYhRGUub2JqZWN0TW9kZSYmKE9lPW5ldyBxKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sRmUpKSxPZX0oa2UsRmUpKSxBZSlf''@;'; put 'put ''ZShEZSxBZSk7ZWxzZSBpZihrZS5vYmplY3RNb2RlfHxGZSYmRmUubGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBGZSYmIWtlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihGZSkhPT13LnByb3RvdHlwZSYmKEZlPWZ1bmN0aW9uIEYoRGUpe3JldHVybiB3LmZyb20oRGUp''@;'; put 'put ''fShGZSkpLEllKWtlLmVuZEVtaXR0ZWQ/X2UoRGUsbmV3IG5lKTpiKERlLGtlLEZlLCEwKTtlbHNlIGlmKGtlLmVuZGVkKV9lKERlLG5ldyBlZSk7ZWxzZXtpZihrZS5kZXN0cm95ZWQpcmV0dXJuITE7a2UucmVhZGluZz0hMSxrZS5kZWNvZGVyJiYhT2U/KEZlPWtlLmRlY29kZXIud3JpdGUo''@;'; put 'put ''RmUpLGtlLm9iamVjdE1vZGV8fDAhPT1GZS5sZW5ndGg/YihEZSxrZSxGZSwhMSk6QShEZSxrZSkpOmIoRGUsa2UsRmUsITEpfWVsc2UgSWV8fChrZS5yZWFkaW5nPSExLEEoRGUsa2UpKTtyZXR1cm4ha2UuZW5kZWQmJihrZS5sZW5ndGg8a2UuaGlnaFdhdGVyTWFya3x8MD09PWtlLmxlbmd0''@;'; put 'put ''aCl9ZnVuY3Rpb24gYihEZSxGZSxPZSxJZSl7RmUuZmxvd2luZyYmMD09PUZlLmxlbmd0aCYmIUZlLnN5bmM/KEZlLmF3YWl0RHJhaW49MCxEZS5lbWl0KCJkYXRhIixPZSkpOihGZS5sZW5ndGgrPUZlLm9iamVjdE1vZGU/MTpPZS5sZW5ndGgsSWU/RmUuYnVmZmVyLnVuc2hpZnQoT2UpOkZl''@;'; put 'put ''LmJ1ZmZlci5wdXNoKE9lKSxGZS5uZWVkUmVhZGFibGUmJkUoRGUpKSxBKERlLEZlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oRmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1GZSl9fSksVi5wcm90b3R5cGUuZGVzdHJveT1LLmRlc3Ryb3ksVi5wcm90b3R5cGUuX3VuZGVzdHJveT1LLnVuZGVz''@;'; put 'put ''dHJveSxWLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihEZSxGZSl7RmUoRGUpfSxWLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKERlLEZlKXt2YXIgSWUsT2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gT2Uub2JqZWN0TW9kZT9JZT0hMDoic3RyaW5nIj09dHlwZW9mIERlJiYoKEZl''@;'; put 'put ''PUZlfHxPZS5kZWZhdWx0RW5jb2RpbmcpIT09T2UuZW5jb2RpbmcmJihEZT13LmZyb20oRGUsRmUpLEZlPSIiKSxJZT0hMCkscCh0aGlzLERlLEZlLCExLEllKX0sVi5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihEZSl7cmV0dXJuIHAodGhpcyxEZSxudWxsLCEwLCExKX0sVi5wcm90b3R5''@;'; put 'put ''cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sVi5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oRGUpe2llfHwoaWU9eSg3ODQ1NCkuSSk7dmFyIEZlPW5ldyBpZShEZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVy''@;'; put 'put ''PUZlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgT2U9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxJZT0iIjtudWxsIT09T2U7KUllKz1GZS53cml0ZShPZS5kYXRhKSxPZT1PZS5uZXh0O3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09SWUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goSWUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPUllLmxlbmd0aCx0aGlzfTt2YXIgQz0xMDczNzQxODI0O2Z1bmN0aW9uIEgoRGUsRmUpe3Jl''@;'; put 'put ''dHVybiBEZTw9MHx8MD09PUZlLmxlbmd0aCYmRmUuZW5kZWQ/MDpGZS5vYmplY3RNb2RlPzE6RGUhPURlP0ZlLmZsb3dpbmcmJkZlLmxlbmd0aD9GZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpGZS5sZW5ndGg6KERlPkZlLmhpZ2hXYXRlck1hcmsmJihGZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0''@;'; put 'put ''aW9uIFQoRGUpe3JldHVybiBEZT49Qz9EZT1DOihEZS0tLERlfD1EZT4+PjEsRGV8PURlPj4+MixEZXw9RGU+Pj40LERlfD1EZT4+PjgsRGV8PURlPj4+MTYsRGUrKyksRGV9KERlKSksRGU8PUZlLmxlbmd0aD9EZTpGZS5lbmRlZD9GZS5sZW5ndGg6KEZlLm5lZWRSZWFkYWJsZT0hMCwwKSl9''@;'; put 'put ''ZnVuY3Rpb24gRShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0YXRlO04oImVtaXRSZWFkYWJsZSIsRmUubmVlZFJlYWRhYmxlLEZlLmVtaXR0ZWRSZWFkYWJsZSksRmUubmVlZFJlYWRhYmxlPSExLEZlLmVtaXR0ZWRSZWFkYWJsZXx8KE4oImVtaXRSZWFkYWJsZSIsRmUuZmxvd2luZyksRmUu''@;'; put 'put ''ZW1pdHRlZFJlYWRhYmxlPSEwLHByb2Nlc3MubmV4dFRpY2sobSxEZSkpfWZ1bmN0aW9uIG0oRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJlbWl0UmVhZGFibGVfIixGZS5kZXN0cm95ZWQsRmUubGVuZ3RoLEZlLmVuZGVkKSwhRmUuZGVzdHJveWVkJiYoRmUubGVuZ3RofHxGZS5l''@;'; put 'put ''bmRlZCkmJihEZS5lbWl0KCJyZWFkYWJsZSIpLEZlLmVtaXR0ZWRSZWFkYWJsZT0hMSksRmUubmVlZFJlYWRhYmxlPSFGZS5mbG93aW5nJiYhRmUuZW5kZWQmJkZlLmxlbmd0aDw9RmUuaGlnaFdhdGVyTWFyayxvdChEZSl9ZnVuY3Rpb24gQShEZSxGZSl7RmUucmVhZGluZ01vcmV8fChGZS5y''@;'; put 'put ''ZWFkaW5nTW9yZT0hMCxwcm9jZXNzLm5leHRUaWNrKGFlLERlLEZlKSl9ZnVuY3Rpb24gYWUoRGUsRmUpe2Zvcig7IUZlLnJlYWRpbmcmJiFGZS5lbmRlZCYmKEZlLmxlbmd0aDxGZS5oaWdoV2F0ZXJNYXJrfHxGZS5mbG93aW5nJiYwPT09RmUubGVuZ3RoKTspe3ZhciBPZT1GZS5sZW5ndGg7''@;'; put 'put ''aWYoTigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxEZS5yZWFkKDApLE9lPT09RmUubGVuZ3RoKWJyZWFrfUZlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHNlKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7RmUucmVhZGFibGVMaXN0ZW5pbmc9RGUubGlzdGVuZXJDb3VudCgicmVhZGFi''@;'; put 'put ''bGUiKT4wLEZlLnJlc3VtZVNjaGVkdWxlZCYmIUZlLnBhdXNlZD9GZS5mbG93aW5nPSEwOkRlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZEZS5yZXN1bWUoKX1mdW5jdGlvbiB3ZShEZSl7TigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksRGUucmVhZCgwKX1mdW5jdGlvbiBKZShEZSxG''@;'; put 'put ''ZSl7TigicmVzdW1lIixGZS5yZWFkaW5nKSxGZS5yZWFkaW5nfHxEZS5yZWFkKDApLEZlLnJlc3VtZVNjaGVkdWxlZD0hMSxEZS5lbWl0KCJyZXN1bWUiKSxvdChEZSksRmUuZmxvd2luZyYmIUZlLnJlYWRpbmcmJkRlLnJlYWQoMCl9ZnVuY3Rpb24gb3QoRGUpe3ZhciBGZT1EZS5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZTtmb3IoTigiZmxvdyIsRmUuZmxvd2luZyk7RmUuZmxvd2luZyYmbnVsbCE9PURlLnJlYWQoKTspO31mdW5jdGlvbiB4ZShEZSxGZSl7cmV0dXJuIDA9PT1GZS5sZW5ndGg/bnVsbDooRmUub2JqZWN0TW9kZT9PZT1GZS5idWZmZXIuc2hpZnQoKTohRGV8fERlPj1GZS5sZW5ndGg/''@;'; put 'put ''KE9lPUZlLmRlY29kZXI/RmUuYnVmZmVyLmpvaW4oIiIpOjE9PT1GZS5idWZmZXIubGVuZ3RoP0ZlLmJ1ZmZlci5maXJzdCgpOkZlLmJ1ZmZlci5jb25jYXQoRmUubGVuZ3RoKSxGZS5idWZmZXIuY2xlYXIoKSk6T2U9RmUuYnVmZmVyLmNvbnN1bWUoRGUsRmUuZGVjb2RlciksT2UpO3ZhciBP''@;'; put 'put ''ZX1mdW5jdGlvbiB2ZShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0YXRlO04oImVuZFJlYWRhYmxlIixGZS5lbmRFbWl0dGVkKSxGZS5lbmRFbWl0dGVkfHwoRmUuZW5kZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhYZSxGZSxEZSkpfWZ1bmN0aW9uIFhlKERlLEZlKXtpZihOKCJlbmRSZWFkYWJs''@;'; put 'put ''ZU5UIixEZS5lbmRFbWl0dGVkLERlLmxlbmd0aCksIURlLmVuZEVtaXR0ZWQmJjA9PT1EZS5sZW5ndGgmJihEZS5lbmRFbWl0dGVkPSEwLEZlLnJlYWRhYmxlPSExLEZlLmVtaXQoImVuZCIpLERlLmF1dG9EZXN0cm95KSl7dmFyIE9lPUZlLl93cml0YWJsZVN0YXRlOyghT2V8fE9lLmF1dG9E''@;'; put 'put ''ZXN0cm95JiZPZS5maW5pc2hlZCkmJkZlLmRlc3Ryb3koKX19ZnVuY3Rpb24gemUoRGUsRmUpe2Zvcih2YXIgT2U9MCxJZT1EZS5sZW5ndGg7T2U8SWU7T2UrKylpZihEZVtPZV09PT1GZSlyZXR1cm4gT2U7cmV0dXJuLTF9Vi5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihEZSl7TigicmVhZCIs''@;'; put 'put ''RGUpLERlPXBhcnNlSW50KERlLDEwKTt2YXIgRmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxPZT1EZTtpZigwIT09RGUmJihGZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1EZSYmRmUubmVlZFJlYWRhYmxlJiYoKDAhPT1GZS5oaWdoV2F0ZXJNYXJrP0ZlLmxlbmd0aD49RmUuaGlnaFdhdGVyTWFy''@;'; put 'put ''azpGZS5sZW5ndGg+MCl8fEZlLmVuZGVkKSlyZXR1cm4gTigicmVhZDogZW1pdFJlYWRhYmxlIixGZS5sZW5ndGgsRmUuZW5kZWQpLDA9PT1GZS5sZW5ndGgmJkZlLmVuZGVkP3ZlKHRoaXMpOkUodGhpcyksbnVsbDtpZigwPT09KERlPUgoRGUsRmUpKSYmRmUuZW5kZWQpcmV0dXJuIDA9PT1G''@;'; put 'put ''ZS5sZW5ndGgmJnZlKHRoaXMpLG51bGw7dmFyIFZlLEllPUZlLm5lZWRSZWFkYWJsZTtyZXR1cm4gTigibmVlZCByZWFkYWJsZSIsSWUpLCgwPT09RmUubGVuZ3RofHxGZS5sZW5ndGgtRGU8RmUuaGlnaFdhdGVyTWFyaykmJk4oImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixJZT0hMCks''@;'; put 'put ''RmUuZW5kZWR8fEZlLnJlYWRpbmc/TigicmVhZGluZyBvciBlbmRlZCIsSWU9ITEpOkllJiYoTigiZG8gcmVhZCIpLEZlLnJlYWRpbmc9ITAsRmUuc3luYz0hMCwwPT09RmUubGVuZ3RoJiYoRmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKEZlLmhpZ2hXYXRlck1hcmspLEZlLnN5bmM9''@;'; put 'put ''ITEsRmUucmVhZGluZ3x8KERlPUgoT2UsRmUpKSksbnVsbD09PShWZT1EZT4wP3hlKERlLEZlKTpudWxsKT8oRmUubmVlZFJlYWRhYmxlPUZlLmxlbmd0aDw9RmUuaGlnaFdhdGVyTWFyayxEZT0wKTooRmUubGVuZ3RoLT1EZSxGZS5hd2FpdERyYWluPTApLDA9PT1GZS5sZW5ndGgmJihGZS5l''@;'; put 'put ''bmRlZHx8KEZlLm5lZWRSZWFkYWJsZT0hMCksT2UhPT1EZSYmRmUuZW5kZWQmJnZlKHRoaXMpKSxudWxsIT09VmUmJnRoaXMuZW1pdCgiZGF0YSIsVmUpLFZlfSxWLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihEZSl7X2UodGhpcyxuZXcgSigiX3JlYWQoKSIpKX0sVi5wcm90b3R5cGUucGlw''@;'; put 'put ''ZT1mdW5jdGlvbihEZSxGZSl7dmFyIE9lPXRoaXMsSWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goSWUucGlwZXNDb3VudCl7Y2FzZSAwOkllLnBpcGVzPURlO2JyZWFrO2Nhc2UgMTpJZS5waXBlcz1bSWUucGlwZXMsRGVdO2JyZWFrO2RlZmF1bHQ6SWUucGlwZXMucHVzaChEZSl9SWUu''@;'; put 'put ''cGlwZXNDb3VudCs9MSxOKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLEllLnBpcGVzQ291bnQsRmUpO3ZhciBrZT1GZSYmITE9PT1GZS5lbmR8fERlPT09cHJvY2Vzcy5zdGRvdXR8fERlPT09cHJvY2Vzcy5zdGRlcnI/JGU6X3Q7ZnVuY3Rpb24gX3QoKXtOKCJvbmVuZCIpLERlLmVuZCgpfUll''@;'; put 'put ''LmVuZEVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhrZSk6T2Uub25jZSgiZW5kIixrZSksRGUub24oInVucGlwZSIsZnVuY3Rpb24gQWUodHQsSGUpe04oIm9udW5waXBlIiksdHQ9PT1PZSYmSGUmJiExPT09SGUuaGFzVW5waXBlZCYmKEhlLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gdW4oKXtO''@;'; put 'put ''KCJjbGVhbnVwIiksRGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixEdCksRGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaXQpLERlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsbnQpLERlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsTXQpLERlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEFlKSxP''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixfdCksT2UucmVtb3ZlTGlzdGVuZXIoImVuZCIsJGUpLE9lLnJlbW92ZUxpc3RlbmVyKCJkYXRhIix5dCksUWU9ITAsSWUuYXdhaXREcmFpbiYmKCFEZS5fd3JpdGFibGVTdGF0ZXx8RGUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmbnQoKX0oKSl9''@;'; put 'put ''KTt2YXIgbnQ9ZnVuY3Rpb24gdGUoRGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBPZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJwaXBlT25EcmFpbiIsT2UuYXdhaXREcmFpbiksT2UuYXdhaXREcmFpbiYmT2UuYXdhaXREcmFpbi0tLDA9PT1PZS5hd2FpdERyYWluJiZnKERlLCJkYXRhIikmJihP''@;'; put 'put ''ZS5mbG93aW5nPSEwLG90KERlKSl9fShPZSk7RGUub24oImRyYWluIixudCk7dmFyIFFlPSExO2Z1bmN0aW9uIHl0KHR0KXtOKCJvbmRhdGEiKTt2YXIgSGU9RGUud3JpdGUodHQpO04oImRlc3Qud3JpdGUiLEhlKSwhMT09PUhlJiYoKDE9PT1JZS5waXBlc0NvdW50JiZJZS5waXBlcz09PURl''@;'; put 'put ''fHxJZS5waXBlc0NvdW50PjEmJi0xIT09emUoSWUucGlwZXMsRGUpKSYmIVFlJiYoTigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixJZS5hd2FpdERyYWluKSxJZS5hd2FpdERyYWluKyspLE9lLnBhdXNlKCkpfWZ1bmN0aW9uIE10KHR0KXtOKCJvbmVycm9yIix0dCksJGUoKSxEZS5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiZXJyb3IiLE10KSwwPT09ZyhEZSwiZXJyb3IiKSYmX2UoRGUsdHQpfWZ1bmN0aW9uIER0KCl7RGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaXQpLCRlKCl9ZnVuY3Rpb24gaXQoKXtOKCJvbmZpbmlzaCIpLERlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRHQpLCRl''@;'; put 'put ''KCl9ZnVuY3Rpb24gJGUoKXtOKCJ1bnBpcGUiKSxPZS51bnBpcGUoRGUpfXJldHVybiBPZS5vbigiZGF0YSIseXQpLGZ1bmN0aW9uIFNlKERlLEZlLE9lKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBEZS5wcmVwZW5kTGlzdGVuZXIoRmUsT2UpO0Rl''@;'; put 'put ''Ll9ldmVudHMmJkRlLl9ldmVudHNbRmVdP0FycmF5LmlzQXJyYXkoRGUuX2V2ZW50c1tGZV0pP0RlLl9ldmVudHNbRmVdLnVuc2hpZnQoT2UpOkRlLl9ldmVudHNbRmVdPVtPZSxEZS5fZXZlbnRzW0ZlXV06RGUub24oRmUsT2UpfShEZSwiZXJyb3IiLE10KSxEZS5vbmNlKCJjbG9zZSIsRHQp''@;'; put 'put ''LERlLm9uY2UoImZpbmlzaCIsaXQpLERlLmVtaXQoInBpcGUiLE9lKSxJZS5mbG93aW5nfHwoTigicGlwZSByZXN1bWUiKSxPZS5yZXN1bWUoKSksRGV9LFYucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihEZSl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsT2U9e2hhc1VucGlwZWQ6ITF9''@;'; put 'put ''O2lmKDA9PT1GZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1GZS5waXBlc0NvdW50KXJldHVybiBEZSYmRGUhPT1GZS5waXBlc3x8KERlfHwoRGU9RmUucGlwZXMpLEZlLnBpcGVzPW51bGwsRmUucGlwZXNDb3VudD0wLEZlLmZsb3dpbmc9ITEsRGUmJkRlLmVtaXQoInVucGlwZSIs''@;'; put 'put ''dGhpcyxPZSkpLHRoaXM7aWYoIURlKXt2YXIgSWU9RmUucGlwZXMsVmU9RmUucGlwZXNDb3VudDtGZS5waXBlcz1udWxsLEZlLnBpcGVzQ291bnQ9MCxGZS5mbG93aW5nPSExO2Zvcih2YXIga2U9MDtrZTxWZTtrZSsrKUllW2tlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9''@;'; put 'put ''KTtyZXR1cm4gdGhpc312YXIgQWU9emUoRmUucGlwZXMsRGUpO3JldHVybi0xPT09QWV8fChGZS5waXBlcy5zcGxpY2UoQWUsMSksRmUucGlwZXNDb3VudC09MSwxPT09RmUucGlwZXNDb3VudCYmKEZlLnBpcGVzPUZlLnBpcGVzWzBdKSxEZS5lbWl0KCJ1bnBpcGUiLHRoaXMsT2UpKSx0aGlz''@;'; put 'put ''fSxWLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1WLnByb3RvdHlwZS5vbj1mdW5jdGlvbihEZSxGZSl7dmFyIE9lPUIucHJvdG90eXBlLm9uLmNhbGwodGhpcyxEZSxGZSksSWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1EZT8oSWUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5s''@;'; put 'put ''aXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1JZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09RGUmJiFJZS5lbmRFbWl0dGVkJiYhSWUucmVhZGFibGVMaXN0ZW5pbmcmJihJZS5yZWFkYWJsZUxpc3RlbmluZz1JZS5uZWVkUmVhZGFibGU9ITAsSWUuZmxvd2lu''@;'; put 'put ''Zz0hMSxJZS5lbWl0dGVkUmVhZGFibGU9ITEsTigib24gcmVhZGFibGUiLEllLmxlbmd0aCxJZS5yZWFkaW5nKSxJZS5sZW5ndGg/RSh0aGlzKTpJZS5yZWFkaW5nfHxwcm9jZXNzLm5leHRUaWNrKHdlLHRoaXMpKSxPZX0sVi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRGUs''@;'; put 'put ''RmUpe3ZhciBPZT1CLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsRGUsRmUpO3JldHVybiJyZWFkYWJsZSI9PT1EZSYmcHJvY2Vzcy5uZXh0VGljayhzZSx0aGlzKSxPZX0sVi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKERlKXt2YXIgRmU9Qi5wcm90''@;'; put 'put ''b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PURlfHx2b2lkIDA9PT1EZSkmJnByb2Nlc3MubmV4dFRpY2soc2UsdGhpcyksRmV9LFYucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBEZT10aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlO3JldHVybiBEZS5mbG93aW5nfHwoTigicmVzdW1lIiksRGUuZmxvd2luZz0hRGUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gVWUoRGUsRmUpe0ZlLnJlc3VtZVNjaGVkdWxlZHx8KEZlLnJlc3VtZVNjaGVkdWxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKEplLERlLEZlKSl9KHRo''@;'; put 'put ''aXMsRGUpKSxEZS5wYXVzZWQ9ITEsdGhpc30sVi5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTigicGF1c2UiKSx0''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxWLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKERlKXt2YXIgRmU9dGhpcyxPZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPSExO2Zvcih2YXIg''@;'; put 'put ''VmUgaW4gRGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihOKCJ3cmFwcGVkIGVuZCIpLE9lLmRlY29kZXImJiFPZS5lbmRlZCl7dmFyIEFlPU9lLmRlY29kZXIuZW5kKCk7QWUmJkFlLmxlbmd0aCYmRmUucHVzaChBZSl9RmUucHVzaChudWxsKX0pLERlLm9uKCJkYXRhIixmdW5jdGlvbihBZSl7''@;'; put 'put ''Tigid3JhcHBlZCBkYXRhIiksT2UuZGVjb2RlciYmKEFlPU9lLmRlY29kZXIud3JpdGUoQWUpKSxPZS5vYmplY3RNb2RlJiZudWxsPT1BZXx8IShPZS5vYmplY3RNb2RlfHxBZSYmQWUubGVuZ3RoKXx8RmUucHVzaChBZSl8fChJZT0hMCxEZS5wYXVzZSgpKX0pLERlKXZvaWQgMD09PXRoaXNb''@;'; put 'put ''VmVdJiYiZnVuY3Rpb24iPT10eXBlb2YgRGVbVmVdJiYodGhpc1tWZV09ZnVuY3Rpb24oX3Qpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBEZVtfdF0uYXBwbHkoRGUsYXJndW1lbnRzKX19KFZlKSk7Zm9yKHZhciBrZT0wO2tlPFRlLmxlbmd0aDtrZSsrKURlLm9uKFRlW2tlXSx0aGlzLmVt''@;'; put 'put ''aXQuYmluZCh0aGlzLFRlW2tlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKEFlKXtOKCJ3cmFwcGVkIF9yZWFkIixBZSksSWUmJihJZT0hMSxEZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRv''@;'; put 'put ''cl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bGUmJihsZT15KDEyNjgzKSksbGUodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihGZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZmxvd2luZz1GZSl9fSksVi5fZnJvbUxpc3Q9eGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWLmZyb209ZnVuY3Rpb24oRGUsRmUpe3JldHVybiB2b2lkIDA9PT1tZSYmKG1lPXkoNDc3NjUpKSxtZShWLERlLEZlKX0pfSw0MzQxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU87dmFyIEk9eSgzMDQ2NCkuRixfPUkuRVJSX01F''@;'; put 'put ''VEhPRF9OT1RfSU1QTEVNRU5URUQsZz1JLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxCPUkuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx3PUkuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLFA9eSgxMDMwKTtmdW5jdGlvbiBGKEwsSyl7dmFyIFU9dGhpcy5fdHJhbnNmb3Jt''@;'; put 'put ''U3RhdGU7VS50cmFuc2Zvcm1pbmc9ITE7dmFyIFc9VS53cml0ZWNiO2lmKG51bGw9PT1XKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgZyk7VS53cml0ZWNodW5rPW51bGwsVS53cml0ZWNiPW51bGwsbnVsbCE9SyYmdGhpcy5wdXNoKEspLFcoTCk7dmFyIFk9dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZTtZLnJlYWRpbmc9ITEsKFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gTyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oTCk7UC5jYWxsKHRoaXMsTCksdGhpcy5f''@;'; put 'put ''dHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOkYuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEwmJigiZnVuY3Rpb24iPT10eXBlb2YgTC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09TC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBMLmZsdXNoJiYodGhpcy5fZmx1c2g9TC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIseil9''@;'; put 'put ''ZnVuY3Rpb24geigpe3ZhciBMPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9OKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihLLFUpe04oTCxLLFUpfSl9ZnVuY3Rpb24gTihMLEssVSl7aWYoSyly''@;'; put 'put ''ZXR1cm4gTC5lbWl0KCJlcnJvciIsSyk7aWYobnVsbCE9VSYmTC5wdXNoKFUpLEwuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB3O2lmKEwuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgQjtyZXR1cm4gTC5wdXNoKG51bGwpfXkoNzE5OTMpKE8sUCksTy5w''@;'; put 'put ''cm90b3R5cGUucHVzaD1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEwsSyl9LE8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxLLFUpe1UobmV3IF8oIl90cmFuc2Zvcm0o''@;'; put 'put ''KSIpKX0sTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihXLndyaXRlY2I9VSxXLndyaXRlY2h1bms9TCxXLndyaXRlZW5jb2Rpbmc9SywhVy50cmFuc2Zvcm1pbmcpe3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFcubmVl''@;'; put 'put ''ZFRyYW5zZm9ybXx8WS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX19LE8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsu''@;'; put 'put ''dHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxPLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihMLEspe1AucHJvdG90eXBlLl9k''@;'; put 'put ''ZXN0cm95LmNhbGwodGhpcyxMLGZ1bmN0aW9uKFUpe0soVSl9KX19LDE1NDkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8ob3Qpe3ZhciB4ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBKZShv''@;'; put 'put ''dCx4ZSx2ZSl7dmFyIFhlPW90LmVudHJ5O2ZvcihvdC5lbnRyeT1udWxsO1hlOyl7dmFyIHplPVhlLmNhbGxiYWNrO3hlLnBlbmRpbmdjYi0tLHplKHZlKSxYZT1YZS5uZXh0fXhlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW90fSh4ZSxvdCl9fXZhciBnO3VlLmV4cG9ydHM9amUsamUuV3Jp''@;'; put 'put ''dGFibGVTdGF0ZT1UZTt2YXIgU2UsQj17ZGVwcmVjYXRlOnkoMzM5OCl9LHc9eSgxMjYwMSksUD15KDgzODM4KS5CdWZmZXIsRj0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVu''@;'; put 'put ''Y3Rpb24oKXt9LE49eSg4ODE1MiksSz15KDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFU9eSgzMDQ2NCkuRixXPVUuRVJSX0lOVkFMSURfQVJHX1RZUEUsWT1VLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHE9VS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssZWU9VS5FUlJfU1RSRUFNX0NBTk5P''@;'; put 'put ''VF9QSVBFLEo9VS5FUlJfU1RSRUFNX0RFU1RST1lFRCxuZT1VLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsaWU9VS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxsZT1VLkVSUl9VTktOT1dOX0VOQ09ESU5HLG1lPU4uZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gVGUo''@;'; put 'put ''b3QseGUsdmUpe2c9Z3x8eSgxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiB2ZSYmKHZlPXhlIGluc3RhbmNlb2YgZyksdGhpcy5vYmplY3RNb2RlPSEhKG90PW90fHx7fSkub2JqZWN0TW9kZSx2ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhb3Qud3JpdGFibGVPYmplY3RN''@;'; put 'put ''b2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Syh0aGlzLG90LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHZlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0''@;'; put 'put ''aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PW90LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPW90LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vz''@;'; put 'put ''c2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oemUpeyFmdW5jdGlvbiBqKG90LHhlKXt2YXIgdmU9b3QuX3dyaXRhYmxlU3RhdGUsWGU9dmUuc3luYyx6ZT12ZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB6ZSl0aHJvdyBuZXcgcTtpZihmdW5jdGlvbiBIKG90KXtvdC53cml0''@;'; put 'put ''aW5nPSExLG90LndyaXRlY2I9bnVsbCxvdC5sZW5ndGgtPW90LndyaXRlbGVuLG90LndyaXRlbGVuPTB9KHZlKSx4ZSkhZnVuY3Rpb24gVChvdCx4ZSx2ZSxYZSx6ZSl7LS14ZS5wZW5kaW5nY2IsdmU/KHByb2Nlc3MubmV4dFRpY2soemUsWGUpLHByb2Nlc3MubmV4dFRpY2sod2Usb3QseGUp''@;'; put 'put ''LG90Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtZShvdCxYZSkpOih6ZShYZSksb3QuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG1lKG90LFhlKSx3ZShvdCx4ZSkpfShvdCx2ZSxYZSx4ZSx6ZSk7ZWxzZXt2YXIgRGU9YWUodmUpfHxvdC5kZXN0cm95ZWQ7IURlJiYh''@;'; put 'put ''dmUuY29ya2VkJiYhdmUuYnVmZmVyUHJvY2Vzc2luZyYmdmUuYnVmZmVyZWRSZXF1ZXN0JiZBKG90LHZlKSxYZT9wcm9jZXNzLm5leHRUaWNrKEUsb3QsdmUsRGUsemUpOkUob3QsdmUsRGUsemUpfX0oeGUsemUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZm''@;'; put 'put ''ZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1vdC5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIW90LmF1dG9E''@;'; put 'put ''ZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgXyh0aGlzKX1mdW5jdGlvbiBqZShvdCl7dmFyIHhlPXRoaXMgaW5zdGFuY2VvZihnPWd8fHkoMTAzMCkpO2lmKCF4ZSYmIVNlLmNhbGwoamUsdGhpcykpcmV0dXJuIG5ldyBqZShv''@;'; put 'put ''dCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgVGUob3QsdGhpcyx4ZSksdGhpcy53cml0YWJsZT0hMCxvdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvdC53cml0ZSYmKHRoaXMuX3dyaXRlPW90LndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2Ygb3Qud3JpdGV2JiYodGhpcy5fd3JpdGV2PW90Lndy''@;'; put 'put ''aXRldiksImZ1bmN0aW9uIj09dHlwZW9mIG90LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PW90LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBvdC5maW5hbCYmKHRoaXMuX2ZpbmFsPW90LmZpbmFsKSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIEMob3QseGUsdmUsWGUsemUsRGUsRmUpe3hl''@;'; put 'put ''LndyaXRlbGVuPVhlLHhlLndyaXRlY2I9RmUseGUud3JpdGluZz0hMCx4ZS5zeW5jPSEwLHhlLmRlc3Ryb3llZD94ZS5vbndyaXRlKG5ldyBKKCJ3cml0ZSIpKTp2ZT9vdC5fd3JpdGV2KHplLHhlLm9ud3JpdGUpOm90Ll93cml0ZSh6ZSxEZSx4ZS5vbndyaXRlKSx4ZS5zeW5jPSExfWZ1bmN0''@;'; put 'put ''aW9uIEUob3QseGUsdmUsWGUpe3ZlfHxmdW5jdGlvbiBtKG90LHhlKXswPT09eGUubGVuZ3RoJiZ4ZS5uZWVkRHJhaW4mJih4ZS5uZWVkRHJhaW49ITEsb3QuZW1pdCgiZHJhaW4iKSl9KG90LHhlKSx4ZS5wZW5kaW5nY2ItLSxYZSgpLHdlKG90LHhlKX1mdW5jdGlvbiBBKG90LHhlKXt4ZS5i''@;'; put 'put ''dWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB2ZT14ZS5idWZmZXJlZFJlcXVlc3Q7aWYob3QuX3dyaXRldiYmdmUmJnZlLm5leHQpe3ZhciB6ZT1uZXcgQXJyYXkoeGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLERlPXhlLmNvcmtlZFJlcXVlc3RzRnJlZTtEZS5lbnRyeT12ZTtmb3IodmFyIEZlPTAs''@;'; put 'put ''T2U9ITA7dmU7KXplW0ZlXT12ZSx2ZS5pc0J1Znx8KE9lPSExKSx2ZT12ZS5uZXh0LEZlKz0xO3plLmFsbEJ1ZmZlcnM9T2UsQyhvdCx4ZSwhMCx4ZS5sZW5ndGgsemUsIiIsRGUuZmluaXNoKSx4ZS5wZW5kaW5nY2IrKyx4ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsRGUubmV4dD8oeGUu''@;'; put 'put ''Y29ya2VkUmVxdWVzdHNGcmVlPURlLm5leHQsRGUubmV4dD1udWxsKTp4ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IF8oeGUpLHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3ZlOyl7dmFyIEllPXZlLmNodW5rO2lmKEMob3QseGUsITEseGUub2JqZWN0TW9kZT8xOkllLmxl''@;'; put 'put ''bmd0aCxJZSx2ZS5lbmNvZGluZyx2ZS5jYWxsYmFjayksdmU9dmUubmV4dCx4ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHhlLndyaXRpbmcpYnJlYWt9bnVsbD09PXZlJiYoeGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX14ZS5idWZmZXJlZFJlcXVlc3Q9dmUseGUuYnVmZmVyUHJvY2Vz''@;'; put 'put ''c2luZz0hMX1mdW5jdGlvbiBhZShvdCl7cmV0dXJuIG90LmVuZGluZyYmMD09PW90Lmxlbmd0aCYmbnVsbD09PW90LmJ1ZmZlcmVkUmVxdWVzdCYmIW90LmZpbmlzaGVkJiYhb3Qud3JpdGluZ31mdW5jdGlvbiB0ZShvdCx4ZSl7b3QuX2ZpbmFsKGZ1bmN0aW9uKHZlKXt4ZS5wZW5kaW5nY2It''@;'; put 'put ''LSx2ZSYmbWUob3QsdmUpLHhlLnByZWZpbmlzaGVkPSEwLG90LmVtaXQoInByZWZpbmlzaCIpLHdlKG90LHhlKX0pfWZ1bmN0aW9uIHdlKG90LHhlKXt2YXIgdmU9YWUoeGUpO2lmKHZlJiYoZnVuY3Rpb24gc2Uob3QseGUpeyF4ZS5wcmVmaW5pc2hlZCYmIXhlLmZpbmFsQ2FsbGVkJiYoImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIG90Ll9maW5hbHx8eGUuZGVzdHJveWVkPyh4ZS5wcmVmaW5pc2hlZD0hMCxvdC5lbWl0KCJwcmVmaW5pc2giKSk6KHhlLnBlbmRpbmdjYisrLHhlLmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2sodGUsb3QseGUpKSl9KG90LHhlKSwwPT09eGUucGVuZGlu''@;'; put 'put ''Z2NiJiYoeGUuZmluaXNoZWQ9ITAsb3QuZW1pdCgiZmluaXNoIikseGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIFhlPW90Ll9yZWFkYWJsZVN0YXRlOyghWGV8fFhlLmF1dG9EZXN0cm95JiZYZS5lbmRFbWl0dGVkKSYmb3QuZGVzdHJveSgpfXJldHVybiB2ZX15KDcxOTkzKShqZSx3KSxUZS5wcm90''@;'; put 'put ''b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB4ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx2ZT1bXTt4ZTspdmUucHVzaCh4ZSkseGU9eGUubmV4dDtyZXR1cm4gdmV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShUZS5wcm90b3R5cGUsImJ1ZmZlciIse2dl''@;'; put 'put ''dDpCLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhTZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsU3ltYm9s''@;'; put 'put ''Lmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih4ZSl7cmV0dXJuISFTZS5jYWxsKHRoaXMseGUpfHx0aGlzPT09amUmJnhlJiZ4ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFRlfX0pKTpTZT1mdW5jdGlvbih4ZSl7cmV0dXJuIHhlIGluc3RhbmNlb2YgdGhpc30samUucHJvdG90eXBl''@;'; put 'put ''LnBpcGU9ZnVuY3Rpb24oKXttZSh0aGlzLG5ldyBlZSl9LGplLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihvdCx4ZSx2ZSl7dmFyIFhlPXRoaXMuX3dyaXRhYmxlU3RhdGUsemU9ITEsRGU9IVhlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIHoob3Qpe3JldHVybiBQLmlzQnVmZmVyKG90KXx8b3Qg''@;'; put 'put ''aW5zdGFuY2VvZiBGfShvdCk7cmV0dXJuIERlJiYhUC5pc0J1ZmZlcihvdCkmJihvdD1mdW5jdGlvbiBPKG90KXtyZXR1cm4gUC5mcm9tKG90KX0ob3QpKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKSxEZT94ZT0iYnVmZmVyIjp4ZXx8KHhlPVhlLmRlZmF1bHRFbmNv''@;'; put 'put ''ZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIHZlJiYodmU9X2UpLFhlLmVuZGluZz9mdW5jdGlvbiBWKG90LHhlKXt2YXIgdmU9bmV3IGllO21lKG90LHZlKSxwcm9jZXNzLm5leHRUaWNrKHhlLHZlKX0odGhpcyx2ZSk6KERlfHxmdW5jdGlvbiBwKG90LHhlLHZlLFhlKXt2YXIgemU7cmV0dXJu''@;'; put 'put ''IG51bGw9PT12ZT96ZT1uZXcgbmU6InN0cmluZyIhPXR5cGVvZiB2ZSYmIXhlLm9iamVjdE1vZGUmJih6ZT1uZXcgVygiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sdmUpKSwhemV8fChtZShvdCx6ZSkscHJvY2Vzcy5uZXh0VGljayhYZSx6ZSksITEpfSh0aGlzLFhlLG90LHZlKSkmJihY''@;'; put 'put ''ZS5wZW5kaW5nY2IrKyx6ZT1mdW5jdGlvbiB4KG90LHhlLHZlLFhlLHplLERlKXtpZighdmUpe3ZhciBGZT1mdW5jdGlvbiBiKG90LHhlLHZlKXtyZXR1cm4hb3Qub2JqZWN0TW9kZSYmITEhPT1vdC5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHhlJiYoeGU9UC5mcm9tKHhlLHZl''@;'; put 'put ''KSkseGV9KHhlLFhlLHplKTtYZSE9PUZlJiYodmU9ITAsemU9ImJ1ZmZlciIsWGU9RmUpfXZhciBPZT14ZS5vYmplY3RNb2RlPzE6WGUubGVuZ3RoO3hlLmxlbmd0aCs9T2U7dmFyIEllPXhlLmxlbmd0aDx4ZS5oaWdoV2F0ZXJNYXJrO2lmKEllfHwoeGUubmVlZERyYWluPSEwKSx4ZS53cml0''@;'; put 'put ''aW5nfHx4ZS5jb3JrZWQpe3ZhciBWZT14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3hlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOlhlLGVuY29kaW5nOnplLGlzQnVmOnZlLGNhbGxiYWNrOkRlLG5leHQ6bnVsbH0sVmU/VmUubmV4dD14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnhlLmJ1ZmZl''@;'; put 'put ''cmVkUmVxdWVzdD14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgQyhvdCx4ZSwhMSxPZSxYZSx6ZSxEZSk7cmV0dXJuIEllfSh0aGlzLFhlLERlLG90LHhlLHZlKSksemV9LGplLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZS5jb3JrZWQrK30samUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBvdD10aGlzLl93cml0YWJsZVN0YXRlO290LmNvcmtlZCYmKG90LmNvcmtlZC0tLCFvdC53cml0aW5nJiYhb3QuY29ya2VkJiYhb3QuYnVmZmVyUHJvY2Vzc2luZyYmb3QuYnVmZmVyZWRSZXF1''@;'; put 'put ''ZXN0JiZBKHRoaXMsb3QpKX0samUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih4ZSl7aWYoInN0cmluZyI9PXR5cGVvZiB4ZSYmKHhlPXhlLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIi''@;'; put 'put ''LCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHhlKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IGxlKHhlKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9eGUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGpl''@;'; put 'put ''LnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqZS5wcm90b3R5cGUsIndyaXRhYmxl''@;'; put 'put ''SGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxqZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKG90LHhlLHZlKXt2ZShuZXcgWSgiX3dyaXRlKCkiKSl9LGplLnByb3RvdHlwZS5f''@;'; put 'put ''d3JpdGV2PW51bGwsamUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihvdCx4ZSx2ZSl7dmFyIFhlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG90Pyh2ZT1vdCxvdD1udWxsLHhlPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKHZlPXhlLHhlPW51bGwp''@;'; put 'put ''LG51bGwhPW90JiZ0aGlzLndyaXRlKG90LHhlKSxYZS5jb3JrZWQmJihYZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxYZS5lbmRpbmd8fGZ1bmN0aW9uIFVlKG90LHhlLHZlKXt4ZS5lbmRpbmc9ITAsd2Uob3QseGUpLHZlJiYoeGUuZmluaXNoZWQ/cHJvY2Vzcy5uZXh0VGljayh2ZSk6b3Qu''@;'; put 'put ''b25jZSgiZmluaXNoIix2ZSkpLHhlLmVuZGVkPSEwLG90LndyaXRhYmxlPSExfSh0aGlzLFhlLHZlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoamUucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxz''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oeGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD14ZSl9fSksamUucHJvdG90eXBlLmRlc3Ryb3k9Ti5kZXN0cm95LGplLnByb3RvdHlwZS5fdW5kZXN0cm95PU4udW5kZXN0cm95LGplLnByb3RvdHlwZS5fZGVzdHJveT1m''@;'; put 'put ''dW5jdGlvbihvdCx4ZSl7eGUob3QpfX0sMTI2ODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk7ZnVuY3Rpb24gXyhpZSxsZSxtZSl7cmV0dXJuIGxlPWZ1bmN0aW9uIGcoaWUpe3ZhciBsZT1mdW5jdGlvbiBCKGllLGxlKXtpZigib2JqZWN0IiE9dHlwZW9mIGllfHxudWxsPT09aWUp''@;'; put 'put ''cmV0dXJuIGllO3ZhciBtZT1pZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW1lKXt2YXIgX2U9bWUuY2FsbChpZSxsZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIF9lKXJldHVybiBfZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWxlP1N0cmluZzpOdW1iZXIpKGllKX0oaWUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbGU/bGU6U3RyaW5nKGxlKX0obGUpLGxlIGluIGllP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSxsZSx7dmFs''@;'; put 'put ''dWU6bWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTppZVtsZV09bWUsaWV9dmFyIHc9eSg1Nzg1NCksUD1TeW1ib2woImxhc3RSZXNvbHZlIiksRj1TeW1ib2woImxhc3RSZWplY3QiKSxPPVN5bWJvbCgiZXJyb3IiKSx6PVN5bWJvbCgiZW5kZWQiKSxOPVN5''@;'; put 'put ''bWJvbCgibGFzdFByb21pc2UiKSxMPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLEs9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBVKGllLGxlKXtyZXR1cm57dmFsdWU6aWUsZG9uZTpsZX19ZnVuY3Rpb24gVyhpZSl7dmFyIGxlPWllW1BdO2lmKG51bGwhPT1sZSl7dmFyIG1lPWllW0tdLnJl''@;'; put 'put ''YWQoKTtudWxsIT09bWUmJihpZVtOXT1udWxsLGllW1BdPW51bGwsaWVbRl09bnVsbCxsZShVKG1lLCExKSkpfX1mdW5jdGlvbiBZKGllKXtwcm9jZXNzLm5leHRUaWNrKFcsaWUpfXZhciBlZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxKPU9iamVjdC5zZXRQcm90b3R5''@;'; put 'put ''cGVPZigoXyhJPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbS119LG5leHQ6ZnVuY3Rpb24oKXt2YXIgbGU9dGhpcyxtZT10aGlzW09dO2lmKG51bGwhPT1tZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobWUpO2lmKHRoaXNbel0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShVKHZvaWQgMCwhMCkp''@;'; put 'put ''O2lmKHRoaXNbS10uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihqZSxWKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7bGVbT10/VihsZVtPXSk6amUoVSh2b2lkIDAsITApKX0pfSk7dmFyIFRlLF9lPXRoaXNbTl07aWYoX2UpVGU9bmV3IFByb21pc2UoZnVuY3Rp''@;'; put 'put ''b24gcShpZSxsZSl7cmV0dXJuIGZ1bmN0aW9uKG1lLF9lKXtpZS50aGVuKGZ1bmN0aW9uKCl7bGVbel0/bWUoVSh2b2lkIDAsITApKTpsZVtMXShtZSxfZSl9LF9lKX19KF9lLHRoaXMpKTtlbHNle3ZhciBTZT10aGlzW0tdLnJlYWQoKTtpZihudWxsIT09U2UpcmV0dXJuIFByb21pc2UucmVz''@;'; put 'put ''b2x2ZShVKFNlLCExKSk7VGU9bmV3IFByb21pc2UodGhpc1tMXSl9cmV0dXJuIHRoaXNbTl09VGUsVGV9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksXyhJLCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGxlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1''@;'; put 'put ''bmN0aW9uKG1lLF9lKXtsZVtLXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oVGUpe1RlP19lKFRlKTptZShVKHZvaWQgMCwhMCkpfSl9KX0pLEkpLGVlKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGxlKXt2YXIgbWUsX2U9T2JqZWN0LmNyZWF0ZShKLChfKG1lPXt9LEsse3ZhbHVlOmxlLHdyaXRhYmxl''@;'; put 'put ''OiEwfSksXyhtZSxQLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksXyhtZSxGLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksXyhtZSxPLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksXyhtZSx6LHt2YWx1ZTpsZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksXyht''@;'; put 'put ''ZSxMLHt2YWx1ZTpmdW5jdGlvbihTZSxqZSl7dmFyIFY9X2VbS10ucmVhZCgpO1Y/KF9lW05dPW51bGwsX2VbUF09bnVsbCxfZVtGXT1udWxsLFNlKFUoViwhMSkpKTooX2VbUF09U2UsX2VbRl09amUpfSx3cml0YWJsZTohMH0pLG1lKSk7cmV0dXJuIF9lW05dPW51bGwsdyhsZSxmdW5jdGlv''@;'; put 'put ''bihUZSl7aWYoVGUmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1UZS5jb2RlKXt2YXIgU2U9X2VbRl07cmV0dXJuIG51bGwhPT1TZSYmKF9lW05dPW51bGwsX2VbUF09bnVsbCxfZVtGXT1udWxsLFNlKFRlKSksdm9pZChfZVtPXT1UZSl9dmFyIGplPV9lW1BdO251bGwhPT1qZSYm''@;'; put 'put ''KF9lW05dPW51bGwsX2VbUF09bnVsbCxfZVtGXT1udWxsLGplKFUodm9pZCAwLCEwKSkpLF9lW3pdPSEwfSksbGUub24oInJlYWRhYmxlIixZLmJpbmQobnVsbCxfZSkpLF9lfX0sNzUyMjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShZLHEpe3ZhciBlZT1PYmplY3Qua2V5''@;'; put 'put ''cyhZKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFkpO3EmJihKPUouZmlsdGVyKGZ1bmN0aW9uKG5lKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihZLG5lKS5lbnVtZXJhYmxlfSkpLGVl''@;'; put 'put ''LnB1c2guYXBwbHkoZWUsSil9cmV0dXJuIGVlfWZ1bmN0aW9uIF8oWSl7Zm9yKHZhciBxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPW51bGwhPWFyZ3VtZW50c1txXT9hcmd1bWVudHNbcV06e307cSUyP0koT2JqZWN0KGVlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihKKXtnKFks''@;'; put 'put ''SixlZVtKXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGVlKSk6SShPYmplY3QoZWUpKS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eShZ''@;'; put 'put ''LEosT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlZSxKKSl9KX1yZXR1cm4gWX1mdW5jdGlvbiBnKFkscSxlZSl7cmV0dXJuKHE9RihxKSlpbiBZP09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLHEse3ZhbHVlOmVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6WVtxXT1lZSxZfWZ1bmN0aW9uIHcoWSxxKXtmb3IodmFyIGVlPTA7ZWU8cS5sZW5ndGg7ZWUrKyl7dmFyIEo9cVtlZV07Si5lbnVtZXJhYmxlPUouZW51bWVyYWJsZXx8ITEsSi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEomJihKLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWSxGKEoua2V5KSxKKX19ZnVuY3Rpb24gRihZKXt2YXIgcT1mdW5jdGlvbiBPKFkscSl7aWYoIm9iamVjdCIhPXR5cGVvZiBZfHxudWxsPT09WSlyZXR1cm4gWTt2YXIgZWU9WVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWVlKXt2YXIgSj1lZS5jYWxsKFkscXx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuIEo7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1xP1N0cmluZzpOdW1iZXIpKFkpfShZLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIHE/cTpTdHJpbmcocSl9dmFyIE49eSg4MzgzOCkuQnVmZmVyLEs9eSg2Mzc3OSkuaW5zcGVjdCxVPUsmJksuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gVyhZLHEsZWUpe04ucHJvdG90eXBlLmNvcHkuY2FsbChZLHEsZWUpfXVlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uIEIoWSxxKXtpZighKFkgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9''@;'; put 'put ''MH1yZXR1cm4gZnVuY3Rpb24gUChZLHEsZWUpe3EmJncoWS5wcm90b3R5cGUscSksZWUmJncoWSxlZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFksW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0''@;'; put 'put ''Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Sjp0aGlzLmhlYWQ9Six0aGlzLnRhaWw9SiwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlz''@;'; put 'put ''LnRhaWw9SiksdGhpcy5oZWFkPUosKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVh''@;'; put 'put ''ZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''Sj10aGlzLmhlYWQsbmU9IiIrSi5kYXRhO0o9Si5uZXh0OyluZSs9ZWUrSi5kYXRhO3JldHVybiBuZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtmb3IodmFyIEo9Ti5hbGxvY1Vuc2FmZShlZT4+PjApLG5l''@;'; put 'put ''PXRoaXMuaGVhZCxpZT0wO25lOylXKG5lLmRhdGEsSixpZSksaWUrPW5lLmRhdGEubGVuZ3RoLG5lPW5lLm5leHQ7cmV0dXJuIEp9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihlZSxKKXt2YXIgbmU7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8obmU9dGhpcy5oZWFk''@;'; put 'put ''LmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpuZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Sj90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSksbmV9fSx7a2V5OiJmaXJzdCIsdmFs''@;'; put 'put ''dWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9dGhpcy5oZWFkLG5lPTEsaWU9Si5kYXRhO2ZvcihlZS09aWUubGVuZ3RoO0o9Si5uZXh0Oyl7dmFyIGxlPUouZGF0YSxtZT1lZT5sZS5sZW5ndGg/''@;'; put 'put ''bGUubGVuZ3RoOmVlO2lmKGllKz1tZT09PWxlLmxlbmd0aD9sZTpsZS5zbGljZSgwLGVlKSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsrbmUsdGhpcy5oZWFkPUoubmV4dD9KLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SixKLmRhdGE9bGUuc2xpY2UobWUpKTticmVh''@;'; put 'put ''a30rK25lfXJldHVybiB0aGlzLmxlbmd0aC09bmUsaWV9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9Ti5hbGxvY1Vuc2FmZShlZSksbmU9dGhpcy5oZWFkLGllPTE7Zm9yKG5lLmRhdGEuY29weShKKSxlZS09bmUuZGF0YS5sZW5ndGg7bmU9bmUubmV4dDsp''@;'; put 'put ''e3ZhciBsZT1uZS5kYXRhLG1lPWVlPmxlLmxlbmd0aD9sZS5sZW5ndGg6ZWU7aWYobGUuY29weShKLEoubGVuZ3RoLWVlLDAsbWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytpZSx0aGlzLmhlYWQ9bmUubmV4dD9uZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPW5l''@;'; put 'put ''LG5lLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK2llfXJldHVybiB0aGlzLmxlbmd0aC09aWUsSn19LHtrZXk6VSx2YWx1ZTpmdW5jdGlvbihlZSxKKXtyZXR1cm4gSyh0aGlzLF8oXyh7fSxKKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxZfSgpfSw4ODE1Mjp1ZT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KHcsUCl7Zyh3LFApLEkodyl9ZnVuY3Rpb24gSSh3KXt3Ll93cml0YWJsZVN0YXRlJiYhdy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuX3JlYWRhYmxlU3RhdGUmJiF3Ll9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8dy5lbWl0KCJjbG9zZSIp''@;'; put 'put ''fWZ1bmN0aW9uIGcodyxQKXt3LmVtaXQoImVycm9yIixQKX11ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIFgodyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2soZyx0aGlzLHcpKTpwcm9jZXNz''@;'; put 'put ''Lm5leHRUaWNrKGcsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVu''@;'; put 'put ''Y3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9wcm9jZXNzLm5leHRUaWNrKEksRik6KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2soeSxGLE4pKTpwcm9jZXNzLm5leHRUaWNrKHksRixO''@;'; put 'put ''KTpQPyhwcm9jZXNzLm5leHRUaWNrKEksRiksUChOKSk6cHJvY2Vzcy5uZXh0VGljayhJLEYpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBfKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVh''@;'; put 'put ''ZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJv''@;'; put 'put ''ck9yRGVzdHJveTpmdW5jdGlvbiBCKHcsUCl7dmFyIEY9dy5fcmVhZGFibGVTdGF0ZSxPPXcuX3dyaXRhYmxlU3RhdGU7RiYmRi5hdXRvRGVzdHJveXx8TyYmTy5hdXRvRGVzdHJveT93LmRlc3Ryb3koUCk6dy5lbWl0KCJlcnJvciIsUCl9fX0sNTc4NTQ6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSgzMDQ2NCkuRi5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBnKCl7fXVlLmV4cG9ydHM9ZnVuY3Rpb24gdyhQLEYsTyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEYpcmV0dXJuIHcoUCxudWxsLEYpO0Z8fChGPXt9KSxPPWZ1bmN0aW9uIF8oUCl7dmFyIEY9''@;'; put 'put ''ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIUYpe0Y9ITA7Zm9yKHZhciBPPWFyZ3VtZW50cy5sZW5ndGgsej1uZXcgQXJyYXkoTyksTj0wO048TztOKyspeltOXT1hcmd1bWVudHNbTl07UC5hcHBseSh0aGlzLHopfX19KE98fGcpO3ZhciB6PUYucmVhZGFibGV8fCExIT09Ri5yZWFkYWJsZSYm''@;'; put 'put ''UC5yZWFkYWJsZSxOPUYud3JpdGFibGV8fCExIT09Ri53cml0YWJsZSYmUC53cml0YWJsZSxMPWZ1bmN0aW9uKCl7UC53cml0YWJsZXx8VSgpfSxLPVAuX3dyaXRhYmxlU3RhdGUmJlAuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsVT1mdW5jdGlvbigpe049ITEsSz0hMCx6fHxPLmNhbGwoUCl9''@;'; put 'put ''LFc9UC5fcmVhZGFibGVTdGF0ZSYmUC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFk9ZnVuY3Rpb24oKXt6PSExLFc9ITAsTnx8Ty5jYWxsKFApfSxxPWZ1bmN0aW9uKGllKXtPLmNhbGwoUCxpZSl9LGVlPWZ1bmN0aW9uKCl7dmFyIGllO3JldHVybiB6JiYhVz8oKCFQLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlfHwhUC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksTy5jYWxsKFAsaWUpKTpOJiYhSz8oKCFQLl93cml0YWJsZVN0YXRlfHwhUC5fd3JpdGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksTy5jYWxsKFAsaWUpKTp2b2lkIDB9LEo9ZnVuY3Rpb24oKXtQLnJlcS5vbigi''@;'; put 'put ''ZmluaXNoIixVKX07cmV0dXJuIGZ1bmN0aW9uIEIoUCl7cmV0dXJuIFAuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgUC5hYm9ydH0oUCk/KFAub24oImNvbXBsZXRlIixVKSxQLm9uKCJhYm9ydCIsZWUpLFAucmVxP0ooKTpQLm9uKCJyZXF1ZXN0IixKKSk6TiYmIVAuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUmJihQLm9uKCJlbmQiLEwpLFAub24oImNsb3NlIixMKSksUC5vbigiZW5kIixZKSxQLm9uKCJmaW5pc2giLFUpLCExIT09Ri5lcnJvciYmUC5vbigiZXJyb3IiLHEpLFAub24oImNsb3NlIixlZSksZnVuY3Rpb24oKXtQLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsVSksUC5yZW1v''@;'; put 'put ''dmVMaXN0ZW5lcigiYWJvcnQiLGVlKSxQLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixKKSxQLnJlcSYmUC5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZmluaXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixxKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZWUpfX19LDQ3NzY1OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBu''@;'; put 'put ''b3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw2ODQ2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJLGc9eSgzMDQ2NCkuRixCPWcuRVJSX01JU1NJTkdfQVJHUyx3PWcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gUChVKXtpZihVKXRocm93IFV9ZnVuY3Rpb24geihV''@;'; put 'put ''KXtVKCl9ZnVuY3Rpb24gTihVLFcpe3JldHVybiBVLnBpcGUoVyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBLKCl7Zm9yKHZhciBVPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVSksWT0wO1k8VTtZKyspV1tZXT1hcmd1bWVudHNbWV07dmFyIHE9ZnVuY3Rpb24gTChVKXtyZXR1cm4gVS5s''@;'; put 'put ''ZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBVW1UubGVuZ3RoLTFdP1UucG9wKCk6UH0oVyk7aWYoQXJyYXkuaXNBcnJheShXWzBdKSYmKFc9V1swXSksVy5sZW5ndGg8Mil0aHJvdyBuZXcgQigic3RyZWFtcyIpO3ZhciBlZSxKPVcubWFwKGZ1bmN0aW9uKG5lLGllKXt2YXIgbGU9aWU8Vy5s''@;'; put 'put ''ZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gTyhVLFcsWSxxKXtxPWZ1bmN0aW9uIF8oVSl7dmFyIFc9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7V3x8KFc9ITAsVS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShxKTt2YXIgZWU9ITE7VS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZWU9ITB9KSx2b2lk''@;'; put 'put ''IDA9PT1JJiYoST15KDU3ODU0KSksSShVLHtyZWFkYWJsZTpXLHdyaXRhYmxlOll9LGZ1bmN0aW9uKG5lKXtpZihuZSlyZXR1cm4gcShuZSk7ZWU9ITAscSgpfSk7dmFyIEo9ITE7cmV0dXJuIGZ1bmN0aW9uKG5lKXtpZighZWUmJiFKKXtpZihKPSEwLGZ1bmN0aW9uIEYoVSl7cmV0dXJuIFUu''@;'; put 'put ''c2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVS5hYm9ydH0oVSkpcmV0dXJuIFUuYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVS5kZXN0cm95KXJldHVybiBVLmRlc3Ryb3koKTtxKG5lfHxuZXcgdygicGlwZSIpKX19fShuZSxsZSxpZT4wLGZ1bmN0aW9uKF9lKXtlZXx8KGVl''@;'; put 'put ''PV9lKSxfZSYmSi5mb3JFYWNoKHopLCFsZSYmKEouZm9yRWFjaCh6KSxxKGVlKSl9KX0pO3JldHVybiBXLnJlZHVjZShOKX19LDIyODI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzA0NjQpLkYuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO3VlLmV4cG9ydHM9e2dldEhpZ2hXYXRl''@;'; put 'put ''ck1hcms6ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz1mdW5jdGlvbiBfKEIsdyxQKXtyZXR1cm4gbnVsbCE9Qi5oaWdoV2F0ZXJNYXJrP0IuaGlnaFdhdGVyTWFyazp3P0JbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPU8pe2lmKCFpc0Zpbml0ZShPKXx8TWF0aC5mbG9vcihPKSE9PU98fE88''@;'; put 'put ''MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLE8pO3JldHVybiBNYXRoLmZsb29yKE8pfXJldHVybiBCLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMTI2MDE6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoNDQzNTYpLkV2ZW50RW1pdHRlcn0sNzg0NTQ6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg1NDI3MikuQnVmZmVyLF89SS5pc0VuY29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNl''@;'; put 'put ''InVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KEope3ZhciBuZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBCKEope3ZhciBuZT1mdW5jdGlvbiBnKEope2lm''@;'; put 'put ''KCFKKXJldHVybiJ1dGY4Ijtmb3IodmFyIG5lOzspc3dpdGNoKEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmlu''@;'; put 'put ''YXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYobmUpcmV0dXJuO0o9KCIiK0opLnRvTG93ZXJDYXNlKCksbmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIG5lJiYoSS5pc0VuY29kaW5nPT09X3x8IV8o''@;'; put 'put ''SikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitKKTtyZXR1cm4gbmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9VSxuZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD16LG5lPTQ7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJiYXNlNjQiOnRoaXMudGV4dD1XLHRoaXMuZW5kPVksbmU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXEsdm9pZCh0aGlzLmVuZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFsbG9jVW5zYWZlKG5lKX1mdW5jdGlvbiBQ''@;'; put 'put ''KEope3JldHVybiBKPD0xMjc/MDpKPj41PT02PzI6Sj4+ND09MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIgbmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBPKEosbmUsaWUpe2lmKDEyOCE9KDE5MiZuZVswXSkpcmV0dXJu''@;'; put 'put ''IEoubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjEmJm5lLmxlbmd0aD4xKXtpZigxMjghPSgxOTImbmVbMV0pKXJldHVybiBKLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZuZS5sZW5ndGg+MiYmMTI4IT0oMTkyJm5lWzJdKSlyZXR1cm4gSi5sYXN0TmVl''@;'; put 'put ''ZD0yLCJcdWZmZmQifX0odGhpcyxKKTtyZXR1cm4gdm9pZCAwIT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxhc3RDaGFyLG5lLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwp''@;'; put 'put ''KTooSi5jb3B5KHRoaXMubGFzdENoYXIsbmUsMCxKLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixuZSl7aWYoKEoubGVuZ3RoLW5lKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIsbmUpO2lmKGllKXt2YXIgbGU9aWUuY2hhckNv''@;'; put 'put ''ZGVBdChpZS5sZW5ndGgtMSk7aWYobGU+PTU1Mjk2JiZsZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0saWUuc2xpY2UoMCwtMSl9cmV0dXJu''@;'; put 'put ''IGllfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmluZygidXRmMTZsZSIsbmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gVShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1''@;'; put 'put ''cm4gdGhpcy5sYXN0TmVlZD9uZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIFcoSixuZSl7dmFyIGllPShKLmxlbmd0aC1uZSklMztyZXR1cm4gMD09PWllP0oudG9TdHJpbmcoImJhc2U2NCIsbmUp''@;'; put 'put ''Oih0aGlzLmxhc3ROZWVkPTMtaWUsdGhpcy5sYXN0VG90YWw9MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxKLnRvU3RyaW5nKCJiYXNlNjQiLG5lLEou''@;'; put 'put ''bGVuZ3RoLWllKSl9ZnVuY3Rpb24gWShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBxKEope3JldHVybiBKLnRv''@;'; put 'put ''U3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGVlKEope3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifVguST13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgbmUsaWU7aWYodGhpcy5sYXN0TmVlZCl7aWYo''@;'; put 'put ''dm9pZCAwPT09KG5lPXRoaXMuZmlsbExhc3QoSikpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8Si5sZW5ndGg/bmU/bmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpuZXx8IiJ9LHcucHJvdG90eXBlLmVuZD1m''@;'; put 'put ''dW5jdGlvbiBMKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lKyJcdWZmZmQiOm5lfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixuZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixuZSxpZSl7dmFyIGxlPW5lLmxlbmd0aC0x''@;'; put 'put ''O2lmKGxlPGllKXJldHVybiAwO3ZhciBtZT1QKG5lW2xlXSk7cmV0dXJuIG1lPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0yKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOiht''@;'; put 'put ''ZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6Si5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxKLG5lKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIsbmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBsZT1KLmxlbmd0aC0oaWUtdGhpcy5sYXN0''@;'; put 'put ''TmVlZCk7cmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLDAsbGUpLEoudG9TdHJpbmcoInV0ZjgiLG5lLGxlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRv''@;'; put 'put ''dGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEoubGVuZ3RoKSx0aGlzLmxhc3ROZWVk''@;'; put 'put ''LT1KLmxlbmd0aH19LDU0MjcyOih1ZSxYLHkpPT57dmFyIEk9eSg4MzgzOCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8u''@;'; put 'put ''YWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcs''@;'; put 'put ''UCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZp''@;'; put 'put ''bGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51''@;'; put 'put ''bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNzg3NTU6KHVlLFgseSk9Pnt2YXIgST15KDY0MzE4KTt1ZS5leHBvcnRzPXtUZXh0RW5jb2RlcjpJLlRleHRFbmNvZGVyLFRleHRE''@;'; put 'put ''ZWNvZGVyOkkuVGV4dERlY29kZXJ9fSw2Nzk1MTpmdW5jdGlvbih1ZSl7IWZ1bmN0aW9uKFgpeyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzJiYodWUuZXhwb3J0cz1YKSxYWyJlbmNvZGluZy1pbmRleGVzIl09e2JpZzU6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3MzkyLDE5NTA2LDE3OTIzLDE3ODMwLDE3Nzg0LDE2MDM1OSwxOTgzMSwxNzg0MywxNjI5OTMsMTk2ODIsMTYzMDEzLDE1MjUzLDE4MjMwLDE4MjQ0LDE5NTI3LDE5NTIwLDE0ODE1OSwxNDQ5MTksMTYw''@;'; put 'put ''NTk0LDE1OTM3MSwxNTk5NTQsMTk1NDMsMTcyODgxLDE4MjU1LDE3ODgyLDE5NTg5LDE2MjkyNCwxOTcxOSwxOTEwOCwxODA4MSwxNTg0OTksMjkyMjEsMTU0MTk2LDEzNzgyNywxNDY5NTAsMTQ3Mjk3LDI2MTg5LDIyMjY3LG51bGwsMzIxNDksMjI4MTMsMTY2ODQxLDE1ODYwLDM4NzA4LDE2''@;'; put 'put ''Mjc5OSwyMzUxNSwxMzg1OTAsMjMyMDQsMTM4NjEsMTcxNjk2LDIzMjQ5LDIzNDc5LDIzODA0LDI2NDc4LDM0MTk1LDE3MDMwOSwyOTc5MywyOTg1MywxNDQ1MywxMzg1NzksMTQ1MDU0LDE1NTY4MSwxNjEwOCwxNTM4MjIsMTUwOTMsMzE0ODQsNDA4NTUsMTQ3ODA5LDE2NjE1NywxNDM4NTAs''@;'; put 'put ''MTMzNzcwLDE0Mzk2NiwxNzE2MiwzMzkyNCw0MDg1NCwzNzkzNSwxODczNiwzNDMyMywyMjY3OCwzODczMCwzNzQwMCwzMTE4NCwzMTI4MiwyNjIwOCwyNzE3NywzNDk3MywyOTc3MiwzMTY4NSwyNjQ5OCwzMTI3NiwyMTA3MSwzNjkzNCwxMzU0MiwyOTYzNiwxNTUwNjUsMjk4OTQsNDA5MDMs''@;'; put 'put ''MjI0NTEsMTg3MzUsMjE1ODAsMTY2ODksMTQ1MDM4LDIyNTUyLDMxMzQ2LDE2MjY2MSwzNTcyNywxODA5NCwxNTkzNjgsMTY3NjksMTU1MDMzLDMxNjYyLDE0MDQ3Niw0MDkwNCwxNDA0ODEsMTQwNDg5LDE0MDQ5Miw0MDkwNSwzNDA1MiwxNDQ4MjcsMTY1NjQsNDA5MDYsMTc2MzMsMTc1NjE1''@;'; put 'put ''LDI1MjgxLDI4NzgyLDQwOTA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsMTI3MzYsMTI3MzcsMTI3MzgsMTI3MzksMTI3NDAsMTMxMzQwLDEyNzQxLDEzMTI4MSwxMzEyNzcsMTI3NDIsMTI3NDMsMTMxMjc1LDEzOTI0MCwxMjc0NCwxMzEyNzQsMTI3NDUsMTI3NDYsMTI3NDcsMTI3NDgsMTMxMzQyLDEyNzQ5LDEyNzUwLDI1NiwxOTMsNDYxLDE5Miwy''@;'; put 'put ''NzQsMjAxLDI4MiwyMDAsMzMyLDIxMSw0NjUsMjEwLG51bGwsNzg3MCxudWxsLDc4NzIsMjAyLDI1NywyMjUsNDYyLDIyNCw1OTMsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsbnVsbCw3''@;'; put 'put ''ODcxLG51bGwsNzg3MywyMzQsNjA5LDkxNzgsOTE3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzI5NjksMTM1NDkzLG51bGwsMjU4NjYsbnVsbCxudWxsLDIwMDI5LDI4''@;'; put 'put ''MzgxLDQwMjcwLDM3MzQzLG51bGwsbnVsbCwxNjE1ODksMjU3NDUsMjAyNTAsMjAyNjQsMjAzOTIsMjA4MjIsMjA4NTIsMjA4OTIsMjA5NjQsMjExNTMsMjExNjAsMjEzMDcsMjEzMjYsMjE0NTcsMjE0NjQsMjIyNDIsMjI3NjgsMjI3ODgsMjI3OTEsMjI4MzQsMjI4MzYsMjMzOTgsMjM0NTQs''@;'; put 'put ''MjM0NTUsMjM3MDYsMjQxOTgsMjQ2MzUsMjU5OTMsMjY2MjIsMjY2MjgsMjY3MjUsMjc5ODIsMjg4NjAsMzAwMDUsMzI0MjAsMzI0MjgsMzI0NDIsMzI0NTUsMzI0NjMsMzI0NzksMzI1MTgsMzI1NjcsMzM0MDIsMzM0ODcsMzM2NDcsMzUyNzAsMzU3NzQsMzU4MTAsMzY3MTAsMzY3MTEsMzY3''@;'; put 'put ''MTgsMjk3MTMsMzE5OTYsMzIyMDUsMjY5NTAsMzE0MzMsMjEwMzEsbnVsbCxudWxsLG51bGwsbnVsbCwzNzI2MCwzMDkwNCwzNzIxNCwzMjk1NixudWxsLDM2MTA3LDMzMDE0LDEzMzYwNyxudWxsLG51bGwsMzI5MjcsNDA2NDcsMTk2NjEsNDAzOTMsNDA0NjAsMTk1MTgsMTcxNTEwLDE1OTc1''@;'; put 'put ''OCw0MDQ1OCwxNzIzMzksMTM3NjEsbnVsbCwyODMxNCwzMzM0MiwyOTk3NyxudWxsLDE4NzA1LDM5NTMyLDM5NTY3LDQwODU3LDMxMTExLDE2NDk3MiwxMzg2OTgsMTMyNTYwLDE0MjA1NCwyMDAwNCwyMDA5NywyMDA5NiwyMDEwMywyMDE1OSwyMDIwMywyMDI3OSwxMzM4OCwyMDQxMywxNTk0''@;'; put 'put ''NCwyMDQ4MywyMDYxNiwxMzQzNywxMzQ1OSwxMzQ3NywyMDg3MCwyMjc4OSwyMDk1NSwyMDk4OCwyMDk5NywyMDEwNSwyMTExMywyMTEzNiwyMTI4NywxMzc2NywyMTQxNywxMzY0OSwyMTQyNCwxMzY1MSwyMTQ0MiwyMTUzOSwxMzY3NywxMzY4MiwxMzk1MywyMTY1MSwyMTY2NywyMTY4NCwy''@;'; put 'put ''MTY4OSwyMTcxMiwyMTc0MywyMTc4NCwyMTc5NSwyMTgwMCwxMzcyMCwyMTgyMywxMzczMywxMzc1OSwyMTk3NSwxMzc2NSwxNjMyMDQsMjE3OTcsbnVsbCwxMzQyMTAsMTM0NDIxLDE1MTg1MSwyMTkwNCwxNDI1MzQsMTQ4MjgsMTMxOTA1LDM2NDIyLDE1MDk2OCwxNjkxODksMTY0NjcsMTY0''@;'; put 'put ''MDMwLDMwNTg2LDE0MjM5MiwxNDkwMCwxODM4OSwxNjQxODksMTU4MTk0LDE1MTAxOCwyNTgyMSwxMzQ1MjQsMTM1MDkyLDEzNDM1NywxMzU0MTIsMjU3NDEsMzY0NzgsMTM0ODA2LDEzNDE1NSwxMzUwMTIsMTQyNTA1LDE2NDQzOCwxNDg2OTEsbnVsbCwxMzQ0NzAsMTcwNTczLDE2NDA3Mywx''@;'; put 'put ''ODQyMCwxNTEyMDcsMTQyNTMwLDM5NjAyLDE0OTUxLDE2OTQ2MCwxNjM2NSwxMzU3NCwxNTIyNjMsMTY5OTQwLDE2MTk5MiwxNDI2NjAsNDAzMDIsMzg5MzMsbnVsbCwxNzM2OSwxNTU4MTMsMjU3ODAsMjE3MzEsMTQyNjY4LDE0MjI4MiwxMzUyODcsMTQ4NDMsMTM1Mjc5LDE1NzQwMiwxNTc0''@;'; put 'put ''NjIsMTYyMjA4LDI1ODM0LDE1MTYzNCwxMzQyMTEsMzY0NTYsMTM5NjgxLDE2NjczMiwxMzI5MTMsbnVsbCwxODQ0MywxMzE0OTcsMTYzNzgsMjI2NDMsMTQyNzMzLG51bGwsMTQ4OTM2LDEzMjM0OCwxNTU3OTksMTM0OTg4LDEzNDU1MCwyMTg4MSwxNjU3MSwxNzMzOCxudWxsLDE5MTI0LDE0''@;'; put 'put ''MTkyNiwxMzUzMjUsMzMxOTQsMzkxNTcsMTM0NTU2LDI1NDY1LDE0ODQ2LDE0MTE3MywzNjI4OCwyMjE3NywyNTcyNCwxNTkzOSxudWxsLDE3MzU2OSwxMzQ2NjUsMTQyMDMxLDE0MjUzNyxudWxsLDEzNTM2OCwxNDU4NTgsMTQ3MzgsMTQ4NTQsMTY0NTA3LDEzNjg4LDE1NTIwOSwxMzk0NjMs''@;'; put 'put ''MjIwOTgsMTM0OTYxLDE0MjUxNCwxNjk3NjAsMTM1MDAsMjc3MDksMTUxMDk5LG51bGwsbnVsbCwxNjExNDAsMTQyOTg3LDEzOTc4NCwxNzM2NTksMTY3MTE3LDEzNDc3OCwxMzQxOTYsMTU3NzI0LDMyNjU5LDEzNTM3NSwxNDEzMTUsMTQxNjI1LDEzODE5LDE1MjAzNSwxMzQ3OTYsMTM1MDUz''@;'; put 'put ''LDEzNDgyNiwxNjI3NSwxMzQ5NjAsMTM0NDcxLDEzNTUwMywxMzQ3MzIsbnVsbCwxMzQ4MjcsMTM0MDU3LDEzNDQ3MiwxMzUzNjAsMTM1NDg1LDE2Mzc3LDE0MDk1MCwyNTY1MCwxMzUwODUsMTQ0MzcyLDE2MTMzNywxNDIyODYsMTM0NTI2LDEzNDUyNywxNDI0MTcsMTQyNDIxLDE0ODcyLDEz''@;'; put 'put ''NDgwOCwxMzUzNjcsMTM0OTU4LDE3MzYxOCwxNTg1NDQsMTY3MTIyLDE2NzMyMSwxNjcxMTQsMzgzMTQsMjE3MDgsMzM0NzYsMjE5NDUsbnVsbCwxNzE3MTUsMzk5NzQsMzk2MDYsMTYxNjMwLDE0MjgzMCwyODk5MiwzMzEzMywzMzAwNCwyMzU4MCwxNTcwNDIsMzMwNzYsMTQyMzEsMjEzNDMs''@;'; put 'put ''MTY0MDI5LDM3MzAyLDEzNDkwNiwxMzQ2NzEsMTM0Nzc1LDEzNDkwNywxMzc4OSwxNTEwMTksMTM4MzMsMTM0MzU4LDIyMTkxLDE0MTIzNywxMzUzNjksMTM0NjcyLDEzNDc3NiwxMzUyODgsMTM1NDk2LDE2NDM1OSwxMzYyNzcsMTM0Nzc3LDE1MTEyMCwxNDI3NTYsMjMxMjQsMTM1MTk3LDEz''@;'; put 'put ''NTE5OCwxMzU0MTMsMTM1NDE0LDIyNDI4LDEzNDY3MywxNjE0MjgsMTY0NTU3LDEzNTA5MywxMzQ3NzksMTUxOTM0LDE0MDgzLDEzNTA5NCwxMzU1NTIsMTUyMjgwLDE3MjczMywxNDk5NzgsMTM3Mjc0LDE0NzgzMSwxNjQ0NzYsMjI2ODEsMjEwOTYsMTM4NTAsMTUzNDA1LDMxNjY2LDIzNDAw''@;'; put 'put ''LDE4NDMyLDE5MjQ0LDQwNzQzLDE4OTE5LDM5OTY3LDM5ODIxLDE1NDQ4NCwxNDM2NzcsMjIwMTEsMTM4MTAsMjIxNTMsMjAwMDgsMjI3ODYsMTM4MTc3LDE5NDY4MCwzODczNywxMzEyMDYsMjAwNTksMjAxNTUsMTM2MzAsMjM1ODcsMjQ0MDEsMjQ1MTYsMTQ1ODYsMjUxNjQsMjU5MDksMjc1''@;'; put 'put ''MTQsMjc3MDEsMjc3MDYsMjg3ODAsMjkyMjcsMjAwMTIsMjkzNTcsMTQ5NzM3LDMyNTk0LDMxMDM1LDMxOTkzLDMyNTk1LDE1NjI2NiwxMzUwNSxudWxsLDE1NjQ5MSwzMjc3MCwzMjg5NiwxNTcyMDIsMTU4MDMzLDIxMzQxLDM0OTE2LDM1MjY1LDE2MTk3MCwzNTc0NCwzNjEyNSwzODAyMSwz''@;'; put 'put ''ODI2NCwzODI3MSwzODM3NiwxNjc0MzksMzg4ODYsMzkwMjksMzkxMTgsMzkxMzQsMzkyNjcsMTdlNCw0MDA2MCw0MDQ3OSw0MDY0NCwyNzUwMyw2Mzc1MSwyMDAyMywxMzEyMDcsMzg0MjksMjUxNDMsMzgwNTAsbnVsbCwyMDUzOSwyODE1OCwxNzExMjMsNDA4NzAsMTU4MTcsMzQ5NTksMTQ3''@;'; put 'put ''NzkwLDI4NzkxLDIzNzk3LDE5MjMyLDE1MjAxMywxMzY1NywxNTQ5MjgsMjQ4NjYsMTY2NDUwLDM2Nzc1LDM3MzY2LDI5MDczLDI2MzkzLDI5NjI2LDE0NDAwMSwxNzIyOTUsMTU0OTksMTM3NjAwLDE5MjE2LDMwOTQ4LDI5Njk4LDIwOTEwLDE2NTY0NywxNjM5MywyNzIzNSwxNzI3MzAsMTY5''@;'; put 'put ''MzEsMzQzMTksMTMzNzQzLDMxMjc0LDE3MDMxMSwxNjY2MzQsMzg3NDEsMjg3NDksMjEyODQsMTM5MzkwLDM3ODc2LDMwNDI1LDE2NjM3MSw0MDg3MSwzMDY4NSwyMDEzMSwyMDQ2NCwyMDY2OCwyMDAxNSwyMDI0Nyw0MDg3MiwyMTU1NiwzMjEzOSwyMjY3NCwyMjczNiwxMzg2NzgsMjQyMTAs''@;'; put 'put ''MjQyMTcsMjQ1MTQsMTQxMDc0LDI1OTk1LDE0NDM3NywyNjkwNSwyNzIwMywxNDY1MzEsMjc5MDMsbnVsbCwyOTE4NCwxNDg3NDEsMjk1ODAsMTYwOTEsMTUwMDM1LDIzMzE3LDI5ODgxLDM1NzE1LDE1NDc4OCwxNTMyMzcsMzEzNzksMzE3MjQsMzE5MzksMzIzNjQsMzM1MjgsMzQxOTksNDA4''@;'; put 'put ''NzMsMzQ5NjAsNDA4NzQsMzY1MzcsNDA4NzUsMzY4MTUsMzQxNDMsMzkzOTIsMzc0MDksNDA4NzYsMTY3MzUzLDEzNjI1NSwxNjQ5NywxNzA1OCwyMzA2NixudWxsLG51bGwsbnVsbCwzOTAxNiwyNjQ3NSwxNzAxNCwyMjMzMyxudWxsLDM0MjYyLDE0OTg4MywzMzQ3MSwxNjAwMTMsMTk1ODUs''@;'; put 'put ''MTU5MDkyLDIzOTMxLDE1ODQ4NSwxNTk2NzgsNDA4NzcsNDA4NzgsMjM0NDYsNDA4NzksMjYzNDMsMzIzNDcsMjgyNDcsMzExNzgsMTU3NTIsMTc2MDMsMTQzOTU4LDE0MTIwNiwxNzMwNiwxNzcxOCxudWxsLDIzNzY1LDE0NjIwMiwzNTU3NywyMzY3MiwxNTYzNCwxNDQ3MjEsMjM5MjgsNDA4''@;'; put 'put ''ODIsMjkwMTUsMTc3NTIsMTQ3NjkyLDEzODc4NywxOTU3NSwxNDcxMiwxMzM4NiwxMzE0OTIsMTU4Nzg1LDM1NTMyLDIwNDA0LDEzMTY0MSwyMjk3NSwzMzEzMiwzODk5OCwxNzAyMzQsMjQzNzksMTM0MDQ3LG51bGwsMTM5NzEzLDE2NjI1MywxNjY0MiwxODEwNywxNjgwNTcsMTYxMzUsNDA4''@;'; put 'put ''ODMsMTcyNDY5LDE2NjMyLDE0Mjk0LDE4MTY3LDE1ODc5MCwxNjc2NCwxNjU1NTQsMTYwNzY3LDE3NzczLDE0NTQ4LDE1MjczMCwxNzc2MSwxNzY5MSwxOTg0OSwxOTU3OSwxOTgzMCwxNzg5OCwxNjMyOCwxNTAyODcsMTM5MjEsMTc2MzAsMTc1OTcsMTY4NzcsMjM4NzAsMjM4ODAsMjM4OTQs''@;'; put 'put ''MTU4NjgsMTQzNTEsMjM5NzIsMjM5OTMsMTQzNjgsMTQzOTIsMjQxMzAsMjQyNTMsMjQzNTcsMjQ0NTEsMTQ2MDAsMTQ2MTIsMTQ2NTUsMTQ2NjksMjQ3OTEsMjQ4OTMsMjM3ODEsMTQ3MjksMjUwMTUsMjUwMTcsMjUwMzksMTQ3NzYsMjUxMzIsMjUyMzIsMjUzMTcsMjUzNjgsMTQ4NDAsMjIx''@;'; put 'put ''OTMsMTQ4NTEsMjU1NzAsMjU1OTUsMjU2MDcsMjU2OTAsMTQ5MjMsMjU3OTIsMjM4MjksMjIwNDksNDA4NjMsMTQ5OTksMjU5OTAsMTUwMzcsMjYxMTEsMjYxOTUsMTUwOTAsMjYyNTgsMTUxMzgsMjYzOTAsMTUxNzAsMjY1MzIsMjY2MjQsMTUxOTIsMjY2OTgsMjY3NTYsMTUyMTgsMTUyMTcs''@;'; put 'put ''MTUyMjcsMjY4ODksMjY5NDcsMjkyNzYsMjY5ODAsMjcwMzksMjcwMTMsMTUyOTIsMjcwOTQsMTUzMjUsMjcyMzcsMjcyNTIsMjcyNDksMjcyNjYsMTUzNDAsMjcyODksMTUzNDYsMjczMDcsMjczMTcsMjczNDgsMjczODIsMjc1MjEsMjc1ODUsMjc2MjYsMjc3NjUsMjc4MTgsMTU1NjMsMjc5''@;'; put 'put ''MDYsMjc5MTAsMjc5NDIsMjgwMzMsMTU1OTksMjgwNjgsMjgwODEsMjgxODEsMjgxODQsMjgyMDEsMjgyOTQsMTY2MzM2LDI4MzQ3LDI4Mzg2LDI4Mzc4LDQwODMxLDI4MzkyLDI4MzkzLDI4NDUyLDI4NDY4LDE1Njg2LDE0NzI2NSwyODU0NSwyODYwNiwxNTcyMiwxNTczMywyOTExMSwyMzcw''@;'; put 'put ''NSwxNTc1NCwyODcxNiwxNTc2MSwyODc1MiwyODc1NiwyODc4MywyODc5OSwyODgwOSwxMzE4NzcsMTczNDUsMTM4MDksMTM0ODcyLDE0NzE1OSwyMjQ2MiwxNTk0NDMsMjg5OTAsMTUzNTY4LDEzOTAyLDI3MDQyLDE2Njg4OSwyMzQxMiwzMTMwNSwxNTM4MjUsMTY5MTc3LDMxMzMzLDMxMzU3''@;'; put 'put ''LDE1NDAyOCwzMTQxOSwzMTQwOCwzMTQyNiwzMTQyNywyOTEzNywxNTY4MTMsMTY4NDIsMzE0NTAsMzE0NTMsMzE0NjYsMTY4NzksMjE2ODIsMTU0NjI1LDMxNDk5LDMxNTczLDMxNTI5LDE1MjMzNCwxNTQ4NzgsMzE2NTAsMzE1OTksMzM2OTIsMTU0NTQ4LDE1ODg0NywzMTY5NiwzMzgyNSwz''@;'; put 'put ''MTYzNCwzMTY3MiwxNTQ5MTIsMTU3ODksMTU0NzI1LDMzOTM4LDMxNzM4LDMxNzUwLDMxNzk3LDE1NDgxNywzMTgxMiwzMTg3NSwxNDk2MzQsMzE5MTAsMjYyMzcsMTQ4ODU2LDMxOTQ1LDMxOTQzLDMxOTc0LDMxODYwLDMxOTg3LDMxOTg5LDMxOTUwLDMyMzU5LDE3NjkzLDE1OTMwMCwzMjA5''@;'; put 'put ''MywxNTk0NDYsMjk4MzcsMzIxMzcsMzIxNzEsMjg5ODEsMzIxNzksMzIyMTAsMTQ3NTQzLDE1NTY4OSwzMjIyOCwxNTYzNSwzMjI0NSwxMzcyMDksMzIyMjksMTY0NzE3LDMyMjg1LDE1NTkzNywxNTU5OTQsMzIzNjYsMzI0MDIsMTcxOTUsMzc5OTYsMzIyOTUsMzI1NzYsMzI1NzcsMzI1ODMs''@;'; put 'put ''MzEwMzAsMTU2MzY4LDM5MzkzLDMyNjYzLDE1NjQ5NywzMjY3NSwxMzY4MDEsMTMxMTc2LDE3NzU2LDE0NTI1NCwxNzY2NywxNjQ2NjYsMzI3NjIsMTU2ODA5LDMyNzczLDMyNzc2LDMyNzk3LDMyODA4LDMyODE1LDE3MjE2NywxNTg5MTUsMzI4MjcsMzI4MjgsMzI4NjUsMTQxMDc2LDE4ODI1''@;'; put 'put ''LDE1NzIyMiwxNDY5MTUsMTU3NDE2LDI2NDA1LDMyOTM1LDE2NjQ3MiwzMzAzMSwzMzA1MCwyMjcwNCwxNDEwNDYsMjc3NzUsMTU2ODI0LDE1MTQ4MCwyNTgzMSwxMzYzMzAsMzMzMDQsMTM3MzEwLDI3MjE5LDE1MDExNywxNTAxNjUsMTc1MzAsMzMzMjEsMTMzOTAxLDE1ODI5MCwxNDY4MTQs''@;'; put 'put ''MjA0NzMsMTM2NDQ1LDM0MDE4LDMzNjM0LDE1ODQ3NCwxNDk5MjcsMTQ0Njg4LDEzNzA3NSwxNDY5MzYsMzM0NTAsMjY5MDcsMTk0OTY0LDE2ODU5LDM0MTIzLDMzNDg4LDMzNTYyLDEzNDY3OCwxMzcxNDAsMTQwMTcsMTQzNzQxLDE0NDczMCwzMzQwMywzMzUwNiwzMzU2MCwxNDcwODMsMTU5''@;'; put 'put ''MTM5LDE1ODQ2OSwxNTg2MTUsMTQ0ODQ2LDE1ODA3LDMzNTY1LDIxOTk2LDMzNjY5LDE3Njc1LDE1OTE0MSwzMzcwOCwzMzcyOSwzMzc0NywxMzQzOCwxNTk0NDQsMjcyMjMsMzQxMzgsMTM0NjIsMTU5Mjk4LDE0MzA4NywzMzg4MCwxNTQ1OTYsMzM5MDUsMTU4MjcsMTc2MzYsMjczMDMsMzM4''@;'; put 'put ''NjYsMTQ2NjEzLDMxMDY0LDMzOTYwLDE1ODYxNCwxNTkzNTEsMTU5Mjk5LDM0MDE0LDMzODA3LDMzNjgxLDE3NTY4LDMzOTM5LDM0MDIwLDE1NDc2OSwxNjk2MCwxNTQ4MTYsMTc3MzEsMzQxMDAsMjMyODIsMTU5Mzg1LDE3NzAzLDM0MTYzLDE3Njg2LDI2NTU5LDM0MzI2LDE2NTQxMywxNjU0''@;'; put 'put ''MzUsMzQyNDEsMTU5ODgwLDM0MzA2LDEzNjU3OCwxNTk5NDksMTk0OTk0LDE3NzcwLDM0MzQ0LDEzODk2LDEzNzM3OCwyMTQ5NSwxNjA2NjYsMzQ0MzAsMzQ2NzMsMTcyMjgwLDM0Nzk4LDE0MjM3NSwzNDczNywzNDc3OCwzNDgzMSwyMjExMywzNDQxMiwyNjcxMCwxNzkzNSwzNDg4NSwzNDg4''@;'; put 'put ''NiwxNjEyNDgsMTQ2ODczLDE2MTI1MiwzNDkxMCwzNDk3MiwxODAxMSwzNDk5NiwzNDk5NywyNTUzNywzNTAxMywzMDU4MywxNjE1NTEsMzUyMDcsMzUyMTAsMzUyMzgsMzUyNDEsMzUyMzksMzUyNjAsMTY2NDM3LDM1MzAzLDE2MjA4NCwxNjI0OTMsMzU0ODQsMzA2MTEsMzczNzQsMzU0NzIs''@;'; put 'put ''MTYyMzkzLDMxNDY1LDE2MjYxOCwxNDczNDMsMTgxOTUsMTYyNjE2LDI5MDUyLDM1NTk2LDM1NjE1LDE1MjYyNCwxNTI5MzMsMzU2NDcsMzU2NjAsMzU2NjEsMzU0OTcsMTUwMTM4LDM1NzI4LDM1NzM5LDM1NTAzLDEzNjkyNywxNzk0MSwzNDg5NSwzNTk5NSwxNjMxNTYsMTYzMjE1LDE5NTAy''@;'; put 'put ''OCwxNDExNywxNjMxNTUsMzYwNTQsMTYzMjI0LDE2MzI2MSwzNjExNCwzNjA5OSwxMzc0ODgsMzYwNTksMjg3NjQsMzYxMTMsMTUwNzI5LDE2MDgwLDM2MjE1LDM2MjY1LDE2Mzg0MiwxMzUxODgsMTQ5ODk4LDE1MjI4LDE2NDI4NCwxNjAwMTIsMzE0NjMsMzY1MjUsMzY1MzQsMzY1NDcsMzc1''@;'; put 'put ''ODgsMzY2MzMsMzY2NTMsMTY0NzA5LDE2NDg4MiwzNjc3MywzNzYzNSwxNzI3MDMsMTMzNzEyLDM2Nzg3LDE4NzMwLDE2NjM2NiwxNjUxODEsMTQ2ODc1LDI0MzEyLDE0Mzk3MCwzNjg1NywxNzIwNTIsMTY1NTY0LDE2NTEyMSwxNDAwNjksMTQ3MjAsMTU5NDQ3LDM2OTE5LDE2NTE4MCwxNjI0''@;'; put 'put ''OTQsMzY5NjEsMTY1MjI4LDE2NTM4NywzNzAzMiwxNjU2NTEsMzcwNjAsMTY1NjA2LDM3MDM4LDM3MTE3LDM3MjIzLDE1MDg4LDM3Mjg5LDM3MzE2LDMxOTE2LDE2NjE5NSwxMzg4ODksMzczOTAsMjc4MDcsMzc0NDEsMzc0NzQsMTUzMDE3LDM3NTYxLDE2NjU5OCwxNDY1ODcsMTY2NjY4LDE1''@;'; put 'put ''MzA1MSwxMzQ0NDksMzc2NzYsMzc3MzksMTY2NjI1LDE2Njg5MSwyODgxNSwyMzIzNSwxNjY2MjYsMTY2NjI5LDE4Nzg5LDM3NDQ0LDE2Njg5MiwxNjY5NjksMTY2OTExLDM3NzQ3LDM3OTc5LDM2NTQwLDM4Mjc3LDM4MzEwLDM3OTI2LDM4MzA0LDI4NjYyLDE3MDgxLDE0MDkyMiwxNjU1OTIs''@;'; put 'put ''MTM1ODA0LDE0Njk5MCwxODkxMSwyNzY3NiwzODUyMywzODU1MCwxNjc0OCwzODU2MywxNTk0NDUsMjUwNTAsMzg1ODIsMzA5NjUsMTY2NjI0LDM4NTg5LDIxNDUyLDE4ODQ5LDE1ODkwNCwxMzE3MDAsMTU2Njg4LDE2ODExMSwxNjgxNjUsMTUwMjI1LDEzNzQ5MywxNDQxMzgsMzg3MDUsMzQz''@;'; put 'put ''NzAsMzg3MTAsMTg5NTksMTc3MjUsMTc3OTcsMTUwMjQ5LDI4Nzg5LDIzMzYxLDM4NjgzLDM4NzQ4LDE2ODQwNSwzODc0MywyMzM3MCwxNjg0MjcsMzg3NTEsMzc5MjUsMjA2ODgsMTQzNTQzLDE0MzU0OCwzODc5MywzODgxNSwzODgzMywzODg0NiwzODg0OCwzODg2NiwzODg4MCwxNTI2ODQs''@;'; put 'put ''Mzg4OTQsMjk3MjQsMTY5MDExLDM4OTExLDM4OTAxLDE2ODk4OSwxNjIxNzAsMTkxNTMsMzg5NjQsMzg5NjMsMzg5ODcsMzkwMTQsMTUxMTgsMTYwMTE3LDE1Njk3LDEzMjY1NiwxNDc4MDQsMTUzMzUwLDM5MTE0LDM5MDk1LDM5MTEyLDM5MTExLDE5MTk5LDE1OTAxNSwxMzY5MTUsMjE5MzYs''@;'; put 'put ''MzkxMzcsMzkxNDIsMzkxNDgsMzc3NTIsMzkyMjUsMTUwMDU3LDE5MzE0LDE3MDA3MSwxNzAyNDUsMzk0MTMsMzk0MzYsMzk0ODMsMzk0NDAsMzk1MTIsMTUzMzgxLDE0MDIwLDE2ODExMywxNzA5NjUsMzk2NDgsMzk2NTAsMTcwNzU3LDM5NjY4LDE5NDcwLDM5NzAwLDM5NzI1LDE2NTM3Niwy''@;'; put 'put ''MDUzMiwzOTczMiwxNTgxMjAsMTQ1MzEsMTQzNDg1LDM5NzYwLDM5NzQ0LDE3MTMyNiwyMzEwOSwxMzczMTUsMzk4MjIsMTQ4MDQzLDM5OTM4LDM5OTM1LDM5OTQ4LDE3MTYyNCw0MDQwNCwxNzE5NTksMTcyNDM0LDE3MjQ1OSwxNzIyNTcsMTcyMzIzLDE3MjUxMSw0MDMxOCw0MDMyMywxNzIz''@;'; put 'put ''NDAsNDA0NjIsMjY3NjAsNDAzODgsMTM5NjExLDE3MjQzNSwxNzI1NzYsMTM3NTMxLDE3MjU5NSw0MDI0OSwxNzIyMTcsMTcyNzI0LDQwNTkyLDQwNTk3LDQwNjA2LDQwNjEwLDE5NzY0LDQwNjE4LDQwNjIzLDE0ODMyNCw0MDY0MSwxNTIwMCwxNDgyMSwxNTY0NSwyMDI3NCwxNDI3MCwxNjY5''@;'; put 'put ''NTUsNDA3MDYsNDA3MTIsMTkzNTAsMzc5MjQsMTU5MTM4LDQwNzI3LDQwNzI2LDQwNzYxLDIyMTc1LDIyMTU0LDQwNzczLDM5MzUyLDE2ODA3NSwzODg5OCwzMzkxOSw0MDgwMiw0MDgwOSwzMTQ1Miw0MDg0NiwyOTIwNiwxOTM5MCwxNDk4NzcsMTQ5OTQ3LDI5MDQ3LDE1MDAwOCwxNDgyOTYs''@;'; put 'put ''MTUwMDk3LDI5NTk4LDE2Njg3NCwxMzc0NjYsMzExMzUsMTY2MjcwLDE2NzQ3OCwzNzczNywzNzg3NSwxNjY0NjgsMzc2MTIsMzc3NjEsMzc4MzUsMTY2MjUyLDE0ODY2NSwyOTIwNywxNjEwNywzMDU3OCwzMTI5OSwyODg4MCwxNDg1OTUsMTQ4NDcyLDI5MDU0LDEzNzE5OSwyODgzNSwxMzc0''@;'; put 'put ''MDYsMTQ0NzkzLDE2MDcxLDEzNzM0OSwxNTI2MjMsMTM3MjA4LDE0MTE0LDEzNjk1NSwxMzcyNzMsMTQwNDksMTM3MDc2LDEzNzQyNSwxNTU0NjcsMTQxMTUsMTM2ODk2LDIyMzYzLDE1MDA1MywxMzYxOTAsMTM1ODQ4LDEzNjEzNCwxMzYzNzQsMzQwNTEsMTQ1MDYyLDM0MDUxLDMzODc3LDE0''@;'; put 'put ''OTkwOCwxNjAxMDEsMTQ2OTkzLDE1MjkyNCwxNDcxOTUsMTU5ODI2LDE3NjUyLDE0NTEzNCwxNzAzOTcsMTU5NTI2LDI2NjE3LDE0MTMxLDE1MzgxLDE1ODQ3LDIyNjM2LDEzNzUwNiwyNjY0MCwxNjQ3MSwxNDUyMTUsMTQ3NjgxLDE0NzU5NSwxNDc3MjcsMTU4NzUzLDIxNzA3LDIyMTc0LDE1''@;'; put 'put ''NzM2MSwyMjE2MiwxMzUxMzUsMTM0MDU2LDEzNDY2OSwzNzgzMCwxNjY2NzUsMzc3ODgsMjAyMTYsMjA3NzksMTQzNjEsMTQ4NTM0LDIwMTU2LDEzMjE5NywxMzE5NjcsMjAyOTksMjAzNjIsMTUzMTY5LDIzMTQ0LDEzMTQ5OSwxMzIwNDMsMTQ3NDUsMTMxODUwLDEzMjExNiwxMzM2NSwyMDI2''@;'; put 'put ''NSwxMzE3NzYsMTY3NjAzLDEzMTcwMSwzNTU0NiwxMzE1OTYsMjAxMjAsMjA2ODUsMjA3NDksMjAzODYsMjAyMjcsMTUwMDMwLDE0NzA4MiwyMDI5MCwyMDUyNiwyMDU4OCwyMDYwOSwyMDQyOCwyMDQ1MywyMDU2OCwyMDczMiwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyODI3OCwxNDQ3ODks''@;'; put 'put ''MTQ3MDAxLDE0NzEzNSwyODAxOCwxMzczNDgsMTQ3MDgxLDIwOTA0LDIwOTMxLDEzMjU3NiwxNzYyOSwxMzIyNTksMTMyMjQyLDEzMjI0MSwzNjIxOCwxNjY1NTYsMTMyODc4LDIxMDgxLDIxMTU2LDEzMzIzNSwyMTIxNywzNzc0MiwxODA0MiwyOTA2OCwxNDgzNjQsMTM0MTc2LDE0OTkzMiwx''@;'; put 'put ''MzUzOTYsMjcwODksMTM0Njg1LDI5ODE3LDE2MDk0LDI5ODQ5LDI5NzE2LDI5NzgyLDI5NTkyLDE5MzQyLDE1MDIwNCwxNDc1OTcsMjE0NTYsMTM3MDAsMjkxOTksMTQ3NjU3LDIxOTQwLDEzMTkwOSwyMTcwOSwxMzQwODYsMjIzMDEsMzc0NjksMzg2NDQsMzc3MzQsMjI0OTMsMjI0MTMsMjIz''@;'; put 'put ''OTksMTM4ODYsMjI3MzEsMjMxOTMsMTY2NDcwLDEzNjk1NCwxMzcwNzEsMTM2OTc2LDIzMDg0LDIyOTY4LDM3NTE5LDIzMTY2LDIzMjQ3LDIzMDU4LDE1MzkyNiwxMzc3MTUsMTM3MzEzLDE0ODExNywxNDA2OSwyNzkwOSwyOTc2MywyMzA3MywxNTUyNjcsMjMxNjksMTY2ODcxLDEzMjExNSwz''@;'; put 'put ''Nzg1NiwyOTgzNiwxMzU5MzksMjg5MzMsMTg4MDIsMzc4OTYsMTY2Mzk1LDM3ODIxLDE0MjQwLDIzNTgyLDIzNzEwLDI0MTU4LDI0MTM2LDEzNzYyMiwxMzc1OTYsMTQ2MTU4LDI0MjY5LDIzMzc1LDEzNzQ3NSwxMzc0NzYsMTQwODEsMTM3Mzc2LDE0MDQ1LDEzNjk1OCwxNDAzNSwzMzA2Niwx''@;'; put 'put ''NjY0NzEsMTM4NjgyLDE0NDQ5OCwxNjYzMTIsMjQzMzIsMjQzMzQsMTM3NTExLDEzNzEzMSwyMzE0NywxMzcwMTksMjMzNjQsMzQzMjQsMTYxMjc3LDM0OTEyLDI0NzAyLDE0MTQwOCwxNDA4NDMsMjQ1MzksMTYwNTYsMTQwNzE5LDE0MDczNCwxNjgwNzIsMTU5NjAzLDI1MDI0LDEzMTEzNCwx''@;'; put 'put ''MzExNDIsMTQwODI3LDI0OTg1LDI0OTg0LDI0NjkzLDE0MjQ5MSwxNDI1OTksMTQ5MjA0LDE2ODI2OSwyNTcxMywxNDkwOTMsMTQyMTg2LDE0ODg5LDE0MjExNCwxNDQ0NjQsMTcwMjE4LDE0Mjk2OCwyNTM5OSwxNzMxNDcsMjU3ODIsMjUzOTMsMjU1NTMsMTQ5OTg3LDE0MjY5NSwyNTI1Miwx''@;'; put 'put ''NDI0OTcsMjU2NTksMjU5NjMsMjY5OTQsMTUzNDgsMTQzNTAyLDE0NDA0NSwxNDk4OTcsMTQ0MDQzLDIxNzczLDE0NDA5NiwxMzc0MzMsMTY5MDIzLDI2MzE4LDE0NDAwOSwxNDM3OTUsMTUwNzIsMTY3ODQsMTUyOTY0LDE2NjY5MCwxNTI5NzUsMTM2OTU2LDE1MjkyMywxNTI2MTMsMzA5NTgs''@;'; put 'put ''MTQzNjE5LDEzNzI1OCwxNDM5MjQsMTM0MTIsMTQzODg3LDE0Mzc0NiwxNDgxNjksMjYyNTQsMTU5MDEyLDI2MjE5LDE5MzQ3LDI2MTYwLDE2MTkwNCwxMzg3MzEsMjYyMTEsMTQ0MDgyLDE0NDA5NywyNjE0MiwxNTM3MTQsMTQ1NDUsMTQ1NDY2LDE0NTM0MCwxNTI1NywxNDUzMTQsMTQ0Mzgy''@;'; put 'put ''LDI5OTA0LDE1MjU0LDI2NTExLDE0OTAzNCwyNjgwNiwyNjY1NCwxNTMwMCwyNzMyNiwxNDQzNSwxNDUzNjUsMTQ4NjE1LDI3MTg3LDI3MjE4LDI3MzM3LDI3Mzk3LDEzNzQ5MCwyNTg3MywyNjc3NiwyNzIxMiwxNTMxOSwyNzI1OCwyNzQ3OSwxNDczOTIsMTQ2NTg2LDM3NzkyLDM3NjE4LDE2''@;'; put 'put ''Njg5MCwxNjY2MDMsMzc1MTMsMTYzODcwLDE2NjM2NCwzNzk5MSwyODA2OSwyODQyNywxNDk5OTYsMjgwMDcsMTQ3MzI3LDE1NzU5LDI4MTY0LDE0NzUxNiwyMzEwMSwyODE3MCwyMjU5OSwyNzk0MCwzMDc4NiwyODk4NywxNDgyNTAsMTQ4MDg2LDI4OTEzLDI5MjY0LDI5MzE5LDI5MzMyLDE0''@;'; put 'put ''OTM5MSwxNDkyODUsMjA4NTcsMTUwMTgwLDEzMjU4NywyOTgxOCwxNDcxOTIsMTQ0OTkxLDE1MDA5MCwxNDk3ODMsMTU1NjE3LDE2MTM0LDE2MDQ5LDE1MDIzOSwxNjY5NDcsMTQ3MjUzLDI0NzQzLDE2MTE1LDI5OTAwLDI5NzU2LDM3NzY3LDI5NzUxLDE3NTY3LDE1OTIxMCwxNzc0NSwzMDA4''@;'; put 'put ''MywxNjIyNywxNTA3NDUsMTUwNzkwLDE2MjE2LDMwMDM3LDMwMzIzLDE3MzUxMCwxNTEyOSwyOTgwMCwxNjY2MDQsMTQ5OTMxLDE0OTkwMiwxNTA5OSwxNTgyMSwxNTAwOTQsMTYxMjcsMTQ5OTU3LDE0OTc0NywzNzM3MCwyMjMyMiwzNzY5OCwxNjY2MjcsMTM3MzE2LDIwNzAzLDE1MjA5Nywx''@;'; put 'put ''NTIwMzksMzA1ODQsMTQzOTIyLDMwNDc4LDMwNDc5LDMwNTg3LDE0OTE0MywxNDUyODEsMTQ5NDIsMTQ5NzQ0LDI5NzUyLDI5ODUxLDE2MDYzLDE1MDIwMiwxNTAyMTUsMTY1ODQsMTUwMTY2LDE1NjA3OCwzNzYzOSwxNTI5NjEsMzA3NTAsMzA4NjEsMzA4NTYsMzA5MzAsMjk2NDgsMzEwNjUs''@;'; put 'put ''MTYxNjAxLDE1MzMxNSwxNjY1NCwzMTEzMSwzMzk0MiwzMTE0MSwyNzE4MSwxNDcxOTQsMzEyOTAsMzEyMjAsMTY3NTAsMTM2OTM0LDE2NjkwLDM3NDI5LDMxMjE3LDEzNDQ3NiwxNDk5MDAsMTMxNzM3LDE0Njg3NCwxMzcwNzAsMTM3MTksMjE4NjcsMTM2ODAsMTM5OTQsMTMxNTQwLDEzNDE1''@;'; put 'put ''NywzMTQ1OCwyMzEyOSwxNDEwNDUsMTU0Mjg3LDE1NDI2OCwyMzA1MywxMzE2NzUsMzA5NjAsMjMwODIsMTU0NTY2LDMxNDg2LDE2ODg5LDMxODM3LDMxODUzLDE2OTEzLDE1NDU0NywxNTUzMjQsMTU1MzAyLDMxOTQ5LDE1MDAwOSwxMzcxMzYsMzE4ODYsMzE4NjgsMzE5MTgsMjczMTQsMzIy''@;'; put 'put ''MjAsMzIyNjMsMzIyMTEsMzI1OTAsMTU2MjU3LDE1NTk5NiwxNjI2MzIsMzIxNTEsMTU1MjY2LDE3MDAyLDE1ODU4MSwxMzMzOTgsMjY1ODIsMTMxMTUwLDE0NDg0NywyMjQ2OCwxNTY2OTAsMTU2NjY0LDE0OTg1OCwzMjczMywzMTUyNywxMzMxNjQsMTU0MzQ1LDE1NDk0NywzMTUwMCwxNTUx''@;'; put 'put ''NTAsMzkzOTgsMzQzNzMsMzk1MjMsMjcxNjQsMTQ0NDQ3LDE0ODE4LDE1MDAwNywxNTcxMDEsMzk0NTUsMTU3MDg4LDMzOTIwLDE2MDAzOSwxNTg5MjksMTc2NDIsMzMwNzksMTc0MTAsMzI5NjYsMzMwMzMsMzMwOTAsMTU3NjIwLDM5MTA3LDE1ODI3NCwzMzM3OCwzMzM4MSwxNTgyODksMzM4''@;'; put 'put ''NzUsMTU5MTQzLDM0MzIwLDE2MDI4MywyMzE3NCwxNjc2NywxMzcyODAsMjMzMzksMTM3Mzc3LDIzMjY4LDEzNzQzMiwzNDQ2NCwxOTUwMDQsMTQ2ODMxLDM0ODYxLDE2MDgwMiwyMzA0MiwzNDkyNiwyMDI5MywzNDk1MSwzNTAwNywzNTA0NiwzNTE3MywzNTE0OSwxNTMyMTksMzUxNTYsMTYx''@;'; put 'put ''NjY5LDE2MTY2OCwxNjY5MDEsMTY2ODczLDE2NjgxMiwxNjYzOTMsMTYwNDUsMzM5NTUsMTgxNjUsMTgxMjcsMTQzMjIsMzUzODksMzUzNTYsMTY5MDMyLDI0Mzk3LDM3NDE5LDE0ODEwMCwyNjA2OCwyODk2OSwyODg2OCwxMzcyODUsNDAzMDEsMzU5OTksMzYwNzMsMTYzMjkyLDIyOTM4LDMw''@;'; put 'put ''NjU5LDIzMDI0LDE3MjYyLDE0MDM2LDM2Mzk0LDM2NTE5LDE1MDUzNywzNjY1NiwzNjY4MiwxNzE0MCwyNzczNiwyODYwMywxNDAwNjUsMTg1ODcsMjg1MzcsMjgyOTksMTM3MTc4LDM5OTEzLDE0MDA1LDE0OTgwNywzNzA1MSwzNzAxNSwyMTg3MywxODY5NCwzNzMwNywzNzg5MiwxNjY0NzUs''@;'; put 'put ''MTY0ODIsMTY2NjUyLDM3OTI3LDE2Njk0MSwxNjY5NzEsMzQwMjEsMzUzNzEsMzgyOTcsMzgzMTEsMzgyOTUsMzgyOTQsMTY3MjIwLDI5NzY1LDE2MDY2LDE0OTc1OSwxNTAwODIsMTQ4NDU4LDE2MTAzLDE0MzkwOSwzODU0MywxNjc2NTUsMTY3NTI2LDE2NzUyNSwxNjA3NiwxNDk5OTcsMTUw''@;'; put 'put ''MTM2LDE0NzQzOCwyOTcxNCwyOTgwMywxNjEyNCwzODcyMSwxNjgxMTIsMjY2OTUsMTg5NzMsMTY4MDgzLDE1MzU2NywzODc0OSwzNzczNiwxNjYyODEsMTY2OTUwLDE2NjcwMywxNTY2MDYsMzc1NjIsMjMzMTMsMzU2ODksMTg3NDgsMjk2ODksMTQ3OTk1LDM4ODExLDM4NzY5LDM5MjI0LDEz''@;'; put 'put ''NDk1MCwyNDAwMSwxNjY4NTMsMTUwMTk0LDM4OTQzLDE2OTE3OCwzNzYyMiwxNjk0MzEsMzczNDksMTc2MDAsMTY2NzM2LDE1MDExOSwxNjY3NTYsMzkxMzIsMTY2NDY5LDE2MTI4LDM3NDE4LDE4NzI1LDMzODEyLDM5MjI3LDM5MjQ1LDE2MjU2NiwxNTg2OSwzOTMyMywxOTMxMSwzOTMzOCwz''@;'; put 'put ''OTUxNiwxNjY3NTcsMTUzODAwLDI3Mjc5LDM5NDU3LDIzMjk0LDM5NDcxLDE3MDIyNSwxOTM0NCwxNzAzMTIsMzkzNTYsMTkzODksMTkzNTEsMzc3NTcsMjI2NDIsMTM1OTM4LDIyNTYyLDE0OTk0NCwxMzY0MjQsMzA3ODgsMTQxMDg3LDE0Njg3MiwyNjgyMSwxNTc0MSwzNzk3NiwxNDYzMSwy''@;'; put 'put ''NDkxMiwxNDExODUsMTQxNjc1LDI0ODM5LDQwMDE1LDQwMDE5LDQwMDU5LDM5OTg5LDM5OTUyLDM5ODA3LDM5ODg3LDE3MTU2NSwzOTgzOSwxNzI1MzMsMTcyMjg2LDQwMjI1LDE5NjMwLDE0NzcxNiw0MDQ3MiwxOTYzMiw0MDIwNCwxNzI0NjgsMTcyMjY5LDE3MjI3NSwxNzAyODcsNDAzNTcs''@;'; put 'put ''MzM5ODEsMTU5MjUwLDE1OTcxMSwxNTg1OTQsMzQzMDAsMTc3MTUsMTU5MTQwLDE1OTM2NCwxNTkyMTYsMzM4MjQsMzQyODYsMTU5MjMyLDE0NTM2NywxNTU3NDgsMzEyMDIsMTQ0Nzk2LDE0NDk2MCwxODczMywxNDk5ODIsMTU3MTQsMzc4NTEsMzc1NjYsMzc3MDQsMTMxNzc1LDMwOTA1LDM3''@;'; put 'put ''NDk1LDM3OTY1LDIwNDUyLDEzMzc2LDM2OTY0LDE1MjkyNSwzMDc4MSwzMDgwNCwzMDkwMiwzMDc5NSwxMzcwNDcsMTQzODE3LDE0OTgyNSwxMzk3OCwyMDMzOCwyODYzNCwyODYzMywyODcwMiwyODcwMiwyMTUyNCwxNDc4OTMsMjI0NTksMjI3NzEsMjI0MTAsNDAyMTQsMjI0ODcsMjg5ODAs''@;'; put 'put ''MTM0ODcsMTQ3ODg0LDI5MTYzLDE1ODc4NCwxNTE0NDcsMjMzMzYsMTM3MTQxLDE2NjQ3MywyNDg0NCwyMzI0NiwyMzA1MSwxNzA4NCwxNDg2MTYsMTQxMjQsMTkzMjMsMTY2Mzk2LDM3ODE5LDM3ODE2LDEzNzQzMCwxMzQ5NDEsMzM5MDYsMTU4OTEyLDEzNjIxMSwxNDgyMTgsMTQyMzc0LDE0''@;'; put 'put ''ODQxNywyMjkzMiwxNDY4NzEsMTU3NTA1LDMyMTY4LDE1NTk5NSwxNTU4MTIsMTQ5OTQ1LDE0OTg5OSwxNjYzOTQsMzc2MDUsMjk2NjYsMTYxMDUsMjk4NzYsMTY2NzU1LDEzNzM3NSwxNjA5NywxNTAxOTUsMjczNTIsMjk2ODMsMjk2OTEsMTYwODYsMTUwMDc4LDE1MDE2NCwxMzcxNzcsMTUw''@;'; put 'put ''MTE4LDEzMjAwNywxMzYyMjgsMTQ5OTg5LDI5NzY4LDE0OTc4MiwyODgzNywxNDk4NzgsMzc1MDgsMjk2NzAsMzc3MjcsMTMyMzUwLDM3NjgxLDE2NjYwNiwxNjY0MjIsMzc3NjYsMTY2ODg3LDE1MzA0NSwxODc0MSwxNjY1MzAsMjkwMzUsMTQ5ODI3LDEzNDM5OSwyMjE4MCwxMzI2MzQsMTM0''@;'; put 'put ''MTIzLDEzNDMyOCwyMTc2MiwzMTE3MiwxMzcyMTAsMzIyNTQsMTM2ODk4LDE1MDA5NiwxMzcyOTgsMTc3MTAsMzc4ODksMTQwOTAsMTY2NTkyLDE0OTkzMywyMjk2MCwxMzc0MDcsMTM3MzQ3LDE2MDkwMCwyMzIwMSwxNDA1MCwxNDY3NzksMTRlMywzNzQ3MSwyMzE2MSwxNjY1MjksMTM3MzE0''@;'; put 'put ''LDM3NzQ4LDE1NTY1LDEzMzgxMiwxOTA5NCwxNDczMCwyMDcyNCwxNTcyMSwxNTY5MiwxMzYwOTIsMjkwNDUsMTcxNDcsMTY0Mzc2LDI4MTc1LDE2ODE2NCwxNzY0MywyNzk5MSwxNjM0MDcsMjg3NzUsMjc4MjMsMTU1NzQsMTQ3NDM3LDE0Njk4OSwyODE2MiwyODQyOCwxNTcyNywxMzIwODUs''@;'; put 'put ''MzAwMzMsMTQwMTIsMTM1MTIsMTgwNDgsMTYwOTAsMTg1NDUsMjI5ODAsMzc0ODYsMTg3NTAsMzY2NzMsMTY2OTQwLDE1ODY1NiwyMjU0NiwyMjQ3MiwxNDAzOCwxMzYyNzQsMjg5MjYsMTQ4MzIyLDE1MDEyOSwxNDMzMzEsMTM1ODU2LDE0MDIyMSwyNjgwOSwyNjk4MywxMzYwODgsMTQ0NjEz''@;'; put 'put ''LDE2MjgwNCwxNDUxMTksMTY2NTMxLDE0NTM2NiwxNDQzNzgsMTUwNjg3LDI3MTYyLDE0NTA2OSwxNTg5MDMsMzM4NTQsMTc2MzEsMTc2MTQsMTU5MDE0LDE1OTA1NywxNTg4NTAsMTU5NzEwLDI4NDM5LDE2MDAwOSwzMzU5NywxMzcwMTgsMzM3NzMsMTU4ODQ4LDE1OTgyNywxMzcxNzksMjI5''@;'; put 'put ''MjEsMjMxNzAsMTM3MTM5LDIzMTM3LDIzMTUzLDEzNzQ3NywxNDc5NjQsMTQxMjUsMjMwMjMsMTM3MDIwLDE0MDIzLDI5MDcwLDM3Nzc2LDI2MjY2LDE0ODEzMywyMzE1MCwyMzA4MywxNDgxMTUsMjcxNzksMTQ3MTkzLDE2MTU5MCwxNDg1NzEsMTQ4MTcwLDI4OTU3LDE0ODA1NywxNjYzNjks''@;'; put 'put ''MjA0MDAsMTU5MDE2LDIzNzQ2LDE0ODY4NiwxNjM0MDUsMTQ4NDEzLDI3MTQ4LDE0ODA1NCwxMzU5NDAsMjg4MzgsMjg5NzksMTQ4NDU3LDE1NzgxLDI3ODcxLDE5NDU5NywxNTAwOTUsMzIzNTcsMjMwMTksMjM4NTUsMTU4NTksMjQ0MTIsMTUwMTA5LDEzNzE4MywzMjE2NCwzMzgzMCwyMTYz''@;'; put 'put ''NywxNDYxNzAsMTQ0MTI4LDEzMTYwNCwyMjM5OCwxMzMzMzMsMTMyNjMzLDE2MzU3LDEzOTE2NiwxNzI3MjYsMjg2NzUsMTY4MjgzLDIzOTIwLDI5NTgzLDMxOTU1LDE2NjQ4OSwxNjg5OTIsMjA0MjQsMzI3NDMsMjkzODksMjk0NTYsMTYyNTQ4LDI5NDk2LDI5NDk3LDE1MzMzNCwyOTUwNSwy''@;'; put 'put ''OTUxMiwxNjA0MSwxNjI1ODQsMzY5NzIsMjkxNzMsMTQ5NzQ2LDI5NjY1LDMzMjcwLDE2MDc0LDMwNDc2LDE2MDgxLDI3ODEwLDIyMjY5LDI5NzIxLDI5NzI2LDI5NzI3LDE2MDk4LDE2MTEyLDE2MTE2LDE2MTIyLDI5OTA3LDE2MTQyLDE2MjExLDMwMDE4LDMwMDYxLDMwMDY2LDMwMDkzLDE2''@;'; put 'put ''MjUyLDMwMTUyLDMwMTcyLDE2MzIwLDMwMjg1LDE2MzQzLDMwMzI0LDE2MzQ4LDMwMzMwLDE1MTM4OCwyOTA2NCwyMjA1MSwzNTIwMCwyMjYzMywxNjQxMywzMDUzMSwxNjQ0MSwyNjQ2NSwxNjQ1MywxMzc4NywzMDYxNiwxNjQ5MCwxNjQ5NSwyMzY0NiwzMDY1NCwzMDY2NywyMjc3MCwzMDc0''@;'; put 'put ''NCwyODg1NywzMDc0OCwxNjU1MiwzMDc3NywzMDc5MSwzMDgwMSwzMDgyMiwzMzg2NCwxNTI4ODUsMzEwMjcsMjY2MjcsMzEwMjYsMTY2NDMsMTY2NDksMzExMjEsMzExMjksMzY3OTUsMzEyMzgsMzY3OTYsMTY3NDMsMzEzNzcsMTY4MTgsMzE0MjAsMzM0MDEsMTY4MzYsMzE0MzksMzE0NTEs''@;'; put 'put ''MTY4NDcsMjAwMDEsMzE1ODYsMzE1OTYsMzE2MTEsMzE3NjIsMzE3NzEsMTY5OTIsMTcwMTgsMzE4NjcsMzE5MDAsMTcwMzYsMzE5MjgsMTcwNDQsMzE5ODEsMzY3NTUsMjg4NjQsMTM0MzUxLDMyMjA3LDMyMjEyLDMyMjA4LDMyMjUzLDMyNjg2LDMyNjkyLDI5MzQzLDE3MzAzLDMyODAwLDMy''@;'; put 'put ''ODA1LDMxNTQ1LDMyODE0LDMyODE3LDMyODUyLDE1ODIwLDIyNDUyLDI4ODMyLDMyOTUxLDMzMDAxLDE3Mzg5LDMzMDM2LDI5NDgyLDMzMDM4LDMzMDQyLDMwMDQ4LDMzMDQ0LDE3NDA5LDE1MTYxLDMzMTEwLDMzMTEzLDMzMTE0LDE3NDI3LDIyNTg2LDMzMTQ4LDMzMTU2LDE3NDQ1LDMzMTcx''@;'; put 'put ''LDE3NDUzLDMzMTg5LDIyNTExLDMzMjE3LDMzMjUyLDMzMzY0LDE3NTUxLDMzNDQ2LDMzMzk4LDMzNDgyLDMzNDk2LDMzNTM1LDE3NTg0LDMzNjIzLDM4NTA1LDI3MDE4LDMzNzk3LDI4OTE3LDMzODkyLDI0ODAzLDMzOTI4LDE3NjY4LDMzOTgyLDM0MDE3LDM0MDQwLDM0MDY0LDM0MTA0LDM0''@;'; put 'put ''MTMwLDE3NzIzLDM0MTU5LDM0MTYwLDM0MjcyLDE3NzgzLDM0NDE4LDM0NDUwLDM0NDgyLDM0NTQzLDM4NDY5LDM0Njk5LDE3OTI2LDE3OTQzLDM0OTkwLDM1MDcxLDM1MTA4LDM1MTQzLDM1MjE3LDE2MjE1MSwzNTM2OSwzNTM4NCwzNTQ3NiwzNTUwOCwzNTkyMSwzNjA1MiwzNjA4MiwzNjEy''@;'; put 'put ''NCwxODMyOCwyMjYyMywzNjI5MSwxODQxMywyMDIwNiwzNjQxMCwyMTk3NiwyMjM1NiwzNjQ2NSwyMjAwNSwzNjUyOCwxODQ4NywzNjU1OCwzNjU3OCwzNjU4MCwzNjU4OSwzNjU5NCwzNjc5MSwzNjgwMSwzNjgxMCwzNjgxMiwzNjkxNSwzOTM2NCwxODYwNSwzOTEzNiwzNzM5NSwxODcxOCwz''@;'; put 'put ''NzQxNiwzNzQ2NCwzNzQ4MywzNzU1MywzNzU1MCwzNzU2NywzNzYwMywzNzYxMSwzNzYxOSwzNzYyMCwzNzYyOSwzNzY5OSwzNzc2NCwzNzgwNSwxODc1NywxODc2OSw0MDYzOSwzNzkxMSwyMTI0OSwzNzkxNywzNzkzMywzNzk1MCwxODc5NCwzNzk3MiwzODAwOSwzODE4OSwzODMwNiwxODg1''@;'; put 'put ''NSwzODM4OCwzODQ1MSwxODkxNywyNjUyOCwxODk4MCwzODcyMCwxODk5NywzODgzNCwzODg1MCwyMjEwMCwxOTE3MiwyNDgwOCwzOTA5NywxOTIyNSwzOTE1MywyMjU5NiwzOTE4MiwzOTE5MywyMDkxNiwzOTE5NiwzOTIyMywzOTIzNCwzOTI2MSwzOTI2NiwxOTMxMiwzOTM2NSwxOTM1Nywz''@;'; put 'put ''OTQ4NCwzOTY5NSwzMTM2MywzOTc4NSwzOTgwOSwzOTkwMSwzOTkyMSwzOTkyNCwxOTU2NSwzOTk2OCwxNDE5MSwxMzgxNzgsNDAyNjUsMzk5OTQsNDA3MDIsMjIwOTYsNDAzMzksNDAzODEsNDAzODQsNDA0NDQsMzgxMzQsMzY3OTAsNDA1NzEsNDA2MjAsNDA2MjUsNDA2MzcsNDA2NDYsMzgx''@;'; put 'put ''MDgsNDA2NzQsNDA2ODksNDA2OTYsMzE0MzIsNDA3NzIsMTMxMjIwLDEzMTc2NywxMzJlMywyNjkwNiwzODA4MywyMjk1NiwxMzIzMTEsMjI1OTIsMzgwODEsMTQyNjUsMTMyNTY1LDEzMjYyOSwxMzI3MjYsMTM2ODkwLDIyMzU5LDI5MDQzLDEzMzgyNiwxMzM4MzcsMTM0MDc5LDIxNjEwLDE5''@;'; put 'put ''NDYxOSwxMzQwOTEsMjE2NjIsMTM0MTM5LDEzNDIwMywxMzQyMjcsMTM0MjQ1LDEzNDI2OCwyNDgwNywxMzQyODUsMjIxMzgsMTM0MzI1LDEzNDM2NSwxMzQzODEsMTM0NTExLDEzNDU3OCwxMzQ2MDAsMjY5NjUsMzk5ODMsMzQ3MjUsMTM0NjYwLDEzNDY3MCwxMzQ4NzEsMTM1MDU2LDEzNDk1''@;'; put 'put ''NywxMzQ3NzEsMjM1ODQsMTM1MTAwLDI0MDc1LDEzNTI2MCwxMzUyNDcsMTM1Mjg2LDI2Mzk4LDEzNTI5MSwxMzUzMDQsMTM1MzE4LDEzODk1LDEzNTM1OSwxMzUzNzksMTM1NDcxLDEzNTQ4MywyMTM0OCwzMzk2NSwxMzU5MDcsMTM2MDUzLDEzNTk5MCwzNTcxMywxMzY1NjcsMTM2NzI5LDEz''@;'; put 'put ''NzE1NSwxMzcxNTksMjAwODgsMjg4NTksMTM3MjYxLDEzNzU3OCwxMzc3NzMsMTM3Nzk3LDEzODI4MiwxMzgzNTIsMTM4NDEyLDEzODk1MiwyNTI4MywxMzg5NjUsMTM5MDI5LDI5MDgwLDI2NzA5LDEzOTMzMywyNzExMywxNDAyNCwxMzk5MDAsMTQwMjQ3LDE0MDI4MiwxNDEwOTgsMTQxNDI1''@;'; put 'put ''LDE0MTY0NywzMzUzMywxNDE2NzEsMTQxNzE1LDE0MjAzNywzNTIzNywxNDIwNTYsMzY3NjgsMTQyMDk0LDM4ODQwLDE0MjE0MywzODk4MywzOTYxMywxNDI0MTIsbnVsbCwxNDI0NzIsMTQyNTE5LDE1NDYwMCwxNDI2MDAsMTQyNjEwLDE0Mjc3NSwxNDI3NDEsMTQyOTE0LDE0MzIyMCwxNDMz''@;'; put 'put ''MDgsMTQzNDExLDE0MzQ2MiwxNDQxNTksMTQ0MzUwLDI0NDk3LDI2MTg0LDI2MzAzLDE2MjQyNSwxNDQ3NDMsMTQ0ODgzLDI5MTg1LDE0OTk0NiwzMDY3OSwxNDQ5MjIsMTQ1MTc0LDMyMzkxLDEzMTkxMCwyMjcwOSwyNjM4MiwyNjkwNCwxNDYwODcsMTYxMzY3LDE1NTYxOCwxNDY5NjEsMTQ3''@;'; put 'put ''MTI5LDE2MTI3OCwxMzk0MTgsMTg2NDAsMTkxMjgsMTQ3NzM3LDE2NjU1NCwxNDgyMDYsMTQ4MjM3LDE0NzUxNSwxNDgyNzYsMTQ4Mzc0LDE1MDA4NSwxMzI1NTQsMjA5NDYsMTMyNjI1LDIyOTQzLDEzODkyMCwxNTI5NCwxNDY2ODcsMTQ4NDg0LDE0ODY5NCwyMjQwOCwxNDkxMDgsMTQ3NDcs''@;'; put 'put ''MTQ5Mjk1LDE2NTM1MiwxNzA0NDEsMTQxNzgsMTM5NzE1LDM1Njc4LDE2NjczNCwzOTM4MiwxNDk1MjIsMTQ5NzU1LDE1MDAzNywyOTE5MywxNTAyMDgsMTM0MjY0LDIyODg1LDE1MTIwNSwxNTE0MzAsMTMyOTg1LDM2NTcwLDE1MTU5NiwyMTEzNSwyMjMzNSwyOTA0MSwxNTIyMTcsMTUyNjAx''@;'; put 'put ''LDE0NzI3NCwxNTAxODMsMjE5NDgsMTUyNjQ2LDE1MjY4NiwxNTg1NDYsMzczMzIsMTM0MjcsMTUyODk1LDE2MTMzMCwxNTI5MjYsMTgyMDAsMTUyOTMwLDE1MjkzNCwxNTM1NDMsMTQ5ODIzLDE1MzY5MywyMDU4MiwxMzU2MywxNDQzMzIsMjQ3OTgsMTUzODU5LDE4MzAwLDE2NjIxNiwxNTQy''@;'; put 'put ''ODYsMTU0NTA1LDE1NDYzMCwxMzg2NDAsMjI0MzMsMjkwMDksMjg1OTgsMTU1OTA2LDE2MjgzNCwzNjk1MCwxNTYwODIsMTUxNDUwLDM1NjgyLDE1NjY3NCwxNTY3NDYsMjM4OTksMTU4NzExLDM2NjYyLDE1NjgwNCwxMzc1MDAsMzU1NjIsMTUwMDA2LDE1NjgwOCwxNDc0MzksMTU2OTQ2LDE5''@;'; put 'put ''MzkyLDE1NzExOSwxNTczNjUsMTQxMDgzLDM3OTg5LDE1MzU2OSwyNDk4MSwyMzA3OSwxOTQ3NjUsMjA0MTEsMjIyMDEsMTQ4NzY5LDE1NzQzNiwyMDA3NCwxNDk4MTIsMzg0ODYsMjgwNDcsMTU4OTA5LDEzODQ4LDM1MTkxLDE1NzU5MywxNTc4MDYsMTU2Njg5LDE1Nzc5MCwyOTE1MSwxNTc4''@;'; put 'put ''OTUsMzE1NTQsMTY4MTI4LDEzMzY0OSwxNTc5OTAsMzcxMjQsMTU4MDA5LDMxMzAxLDQwNDMyLDE1ODIwMiwzOTQ2MiwxNTgyNTMsMTM5MTksMTU2Nzc3LDEzMTEwNSwzMTEwNywxNTgyNjAsMTU4NTU1LDIzODUyLDE0NDY2NSwzMzc0MywxNTg2MjEsMTgxMjgsMTU4ODg0LDMwMDExLDM0OTE3''@;'; put 'put ''LDE1OTE1MCwyMjcxMCwxNDEwOCwxNDA2ODUsMTU5ODE5LDE2MDIwNSwxNTQ0NCwxNjAzODQsMTYwMzg5LDM3NTA1LDEzOTY0MiwxNjAzOTUsMzc2ODAsMTYwNDg2LDE0OTk2OCwyNzcwNSwzODA0NywxNjA4NDgsMTM0OTA0LDM0ODU1LDM1MDYxLDE0MTYwNiwxNjQ5NzksMTM3MTM3LDI4MzQ0''@;'; put 'put ''LDE1MDA1OCwxMzcyNDgsMTQ3NTYsMTQwMDksMjM1NjgsMzEyMDMsMTc3MjcsMjYyOTQsMTcxMTgxLDE3MDE0OCwzNTEzOSwxNjE3NDAsMTYxODgwLDIyMjMwLDE2NjA3LDEzNjcxNCwxNDc1MywxNDUxOTksMTY0MDcyLDEzNjEzMywyOTEwMSwzMzYzOCwxNjIyNjksMTY4MzYwLDIzMTQzLDE5''@;'; put 'put ''NjM5LDE1OTkxOSwxNjYzMTUsMTYyMzAxLDE2MjMxNCwxNjI1NzEsMTYzMTc0LDE0NzgzNCwzMTU1NSwzMTEwMiwxNjM4NDksMjg1OTcsMTcyNzY3LDI3MTM5LDE2NDYzMiwyMTQxMCwxNTkyMzksMzc4MjMsMjY2NzgsMzg3NDksMTY0MjA3LDE2Mzg3NSwxNTgxMzMsMTM2MTczLDE0MzkxOSwx''@;'; put 'put ''NjM5MTIsMjM5NDEsMTY2OTYwLDE2Mzk3MSwyMjI5MywzODk0NywxNjYyMTcsMjM5NzksMTQ5ODk2LDI2MDQ2LDI3MDkzLDIxNDU4LDE1MDE4MSwxNDczMjksMTUzNzcsMjY0MjIsMTYzOTg0LDE2NDA4NCwxNjQxNDIsMTM5MTY5LDE2NDE3NSwxNjQyMzMsMTY0MjcxLDE2NDM3OCwxNjQ2MTQs''@;'; put 'put ''MTY0NjU1LDE2NDc0NiwxMzc3MCwxNjQ5NjgsMTY1NTQ2LDE4NjgyLDI1NTc0LDE2NjIzMCwzMDcyOCwzNzQ2MSwxNjYzMjgsMTczOTQsMTY2Mzc1LDE3Mzc1LDE2NjM3NiwxNjY3MjYsMTY2ODY4LDIzMDMyLDE2NjkyMSwzNjYxOSwxNjc4NzcsMTY4MTcyLDMxNTY5LDE2ODIwOCwxNjgyNTIs''@;'; put 'put ''MTU4NjMsMTY4Mjg2LDE1MDIxOCwzNjgxNiwyOTMyNywyMjE1NSwxNjkxOTEsMTY5NDQ5LDE2OTM5MiwxNjk0MDAsMTY5Nzc4LDE3MDE5MywxNzAzMTMsMTcwMzQ2LDE3MDQzNSwxNzA1MzYsMTcwNzY2LDE3MTM1NCwxNzE0MTksMzI0MTUsMTcxNzY4LDE3MTgxMSwxOTYyMCwzODIxNSwxNzI2''@;'; put 'put ''OTEsMjkwOTAsMTcyNzk5LDE5ODU3LDM2ODgyLDE3MzUxNSwxOTg2OCwxMzQzMDAsMzY3OTgsMjE5NTMsMzY3OTQsMTQwNDY0LDM2NzkzLDE1MDE2MywxNzY3MywzMjM4MywyODUwMiwyNzMxMywyMDIwMiwxMzU0MCwxNjY3MDAsMTYxOTQ5LDE0MTM4LDM2NDgwLDEzNzIwNSwxNjM4NzYsMTY2''@;'; put 'put ''NzY0LDE2NjgwOSwxNjIzNjYsMTU3MzU5LDE1ODUxLDE2MTM2NSwxNDY2MTUsMTUzMTQxLDE1Mzk0MiwyMDEyMiwxNTUyNjUsMTU2MjQ4LDIyMjA3LDEzNDc2NSwzNjM2NiwyMzQwNSwxNDcwODAsMTUwNjg2LDI1NTY2LDI1Mjk2LDEzNzIwNiwxMzczMzksMjU5MDQsMjIwNjEsMTU0Njk4LDIx''@;'; put 'put ''NTMwLDE1MjMzNywxNTgxNCwxNzE0MTYsMTk1ODEsMjIwNTAsMjIwNDYsMzI1ODUsMTU1MzUyLDIyOTAxLDE0Njc1MiwzNDY3MiwxOTk5NiwxMzUxNDYsMTM0NDczLDE0NTA4MiwzMzA0Nyw0MDI4NiwzNjEyMCwzMDI2Nyw0MDAwNSwzMDI4NiwzMDY0OSwzNzcwMSwyMTU1NCwzMzA5NiwzMzUy''@;'; put 'put ''NywyMjA1MywzMzA3NCwzMzgxNiwzMjk1NywyMTk5NCwzMTA3NCwyMjA4MywyMTUyNiwxMzQ4MTMsMTM3NzQsMjIwMjEsMjIwMDEsMjYzNTMsMTY0NTc4LDEzODY5LDMwMDA0LDIyZTMsMjE5NDYsMjE2NTUsMjE4NzQsMTM0MjA5LDEzNDI5NCwyNDI3MiwxNTE4ODAsMTM0Nzc0LDE0MjQzNCwx''@;'; put 'put ''MzQ4MTgsNDA2MTksMzIwOTAsMjE5ODIsMTM1Mjg1LDI1MjQ1LDM4NzY1LDIxNjUyLDM2MDQ1LDI5MTc0LDM3MjM4LDI1NTk2LDI1NTI5LDI1NTk4LDIxODY1LDE0MjE0Nyw0MDA1MCwxNDMwMjcsMjA4OTAsMTM1MzUsMTM0NTY3LDIwOTAzLDIxNTgxLDIxNzkwLDIxNzc5LDMwMzEwLDM2Mzk3''@;'; put 'put ''LDE1NzgzNCwzMDEyOSwzMjk1MCwzNDgyMCwzNDY5NCwzNTAxNSwzMzIwNiwzMzgyMCwxMzUzNjEsMTc2NDQsMjk0NDQsMTQ5MjU0LDIzNDQwLDMzNTQ3LDE1Nzg0MywyMjEzOSwxNDEwNDQsMTYzMTE5LDE0Nzg3NSwxNjMxODcsMTU5NDQwLDE2MDQzOCwzNzIzMiwxMzU2NDEsMzczODQsMTQ2''@;'; put 'put ''Njg0LDE3MzczNywxMzQ4MjgsMTM0OTA1LDI5Mjg2LDEzODQwMiwxODI1NCwxNTE0OTAsMTYzODMzLDEzNTE0NywxNjYzNCw0MDAyOSwyNTg4NywxNDI3NTIsMTg2NzUsMTQ5NDcyLDE3MTM4OCwxMzUxNDgsMTM0NjY2LDI0Njc0LDE2MTE4NywxMzUxNDksbnVsbCwxNTU3MjAsMTM1NTU5LDI5''@;'; put 'put ''MDkxLDMyMzk4LDQwMjcyLDE5OTk0LDE5OTcyLDEzNjg3LDIzMzA5LDI3ODI2LDIxMzUxLDEzOTk2LDE0ODEyLDIxMzczLDEzOTg5LDE0OTAxNiwyMjY4MiwxNTAzODIsMzMzMjUsMjE1NzksMjI0NDIsMTU0MjYxLDEzMzQ5NyxudWxsLDE0OTMwLDE0MDM4OSwyOTU1NiwxNzE2OTIsMTk3MjEs''@;'; put 'put ''Mzk5MTcsMTQ2Njg2LDE3MTgyNCwxOTU0NywxNTE0NjUsMTY5Mzc0LDE3MTk5OCwzMzg4NCwxNDY4NzAsMTYwNDM0LDE1NzYxOSwxNDUxODQsMjUzOTAsMzIwMzcsMTQ3MTkxLDE0Njk4OCwxNDg5MCwzNjg3MiwyMTE5NiwxNTk4OCwxMzk0NiwxNzg5NywxMzIyMzgsMzAyNzIsMjMyODAsMTM0''@;'; put 'put ''ODM4LDMwODQyLDE2MzYzMCwyMjY5NSwxNjU3NSwyMjE0MCwzOTgxOSwyMzkyNCwzMDI5MiwxNzMxMDgsNDA1ODEsMTk2ODEsMzAyMDEsMTQzMzEsMjQ4NTcsMTQzNTc4LDE0ODQ2NixudWxsLDIyMTA5LDEzNTg0OSwyMjQzOSwxNDk4NTksMTcxNTI2LDIxMDQ0LDE1OTkxOCwxMzc0MSwyNzcy''@;'; put 'put ''Miw0MDMxNiwzMTgzMCwzOTczNywyMjQ5NCwxMzcwNjgsMjM2MzUsMjU4MTEsMTY5MTY4LDE1NjQ2OSwxNjAxMDAsMzQ0NzcsMTM0NDQwLDE1OTAxMCwxNTAyNDIsMTM0NTEzLG51bGwsMjA5OTAsMTM5MDIzLDIzOTUwLDM4NjU5LDEzODcwNSw0MDU3NywzNjk0MCwzMTUxOSwzOTY4MiwyMzc2''@;'; put 'put ''MSwzMTY1MSwyNTE5MiwyNTM5NywzOTY3OSwzMTY5NSwzOTcyMiwzMTg3MCwzOTcyNiwzMTgxMCwzMTg3OCwzOTk1NywzMTc0MCwzOTY4OSw0MDcyNywzOTk2MywxNDk4MjIsNDA3OTQsMjE4NzUsMjM0OTEsMjA0NzcsNDA2MDAsMjA0NjYsMjEwODgsMTU4NzgsMjEyMDEsMjIzNzUsMjA1NjYs''@;'; put 'put ''MjI5NjcsMjQwODIsMzg4NTYsNDAzNjMsMzY3MDAsMjE2MDksMzg4MzYsMzkyMzIsMzg4NDIsMjEyOTIsMjQ4ODAsMjY5MjQsMjE0NjYsMzk5NDYsNDAxOTQsMTk1MTUsMzg0NjUsMjcwMDgsMjA2NDYsMzAwMjIsMTM3MDY5LDM5Mzg2LDIxMTA3LG51bGwsMzcyMDksMzg1MjksMzcyMTIsbnVs''@;'; put 'put ''bCwzNzIwMSwxNjc1NzUsMjU0NzEsMTU5MDExLDI3MzM4LDIyMDMzLDM3MjYyLDMwMDc0LDI1MjIxLDEzMjA5MiwyOTUxOSwzMTg1NiwxNTQ2NTcsMTQ2Njg1LG51bGwsMTQ5Nzg1LDMwNDIyLDM5ODM3LDIwMDEwLDEzNDM1NiwzMzcyNiwzNDg4MixudWxsLDIzNjI2LDI3MDcyLDIwNzE3LDIy''@;'; put 'put ''Mzk0LDIxMDIzLDI0MDUzLDIwMTc0LDI3Njk3LDEzMTU3MCwyMDI4MSwyMTY2MCwyMTcyMiwyMTE0NiwzNjIyNiwxMzgyMiwyNDMzMiwxMzgxMSxudWxsLDI3NDc0LDM3MjQ0LDQwODY5LDM5ODMxLDM4OTU4LDM5MDkyLDM5NjEwLDQwNjE2LDQwNTgwLDI5MDUwLDMxNTA4LG51bGwsMjc2NDIs''@;'; put 'put ''MzQ4NDAsMzI2MzIsbnVsbCwyMjA0OCwxNzM2NDIsMzY0NzEsNDA3ODcsbnVsbCwzNjMwOCwzNjQzMSw0MDQ3NiwzNjM1MywyNTIxOCwxNjQ3MzMsMzYzOTIsMzY0NjksMzE0NDMsMTUwMTM1LDMxMjk0LDMwOTM2LDI3ODgyLDM1NDMxLDMwMjE1LDE2NjQ5MCw0MDc0MiwyNzg1NCwzNDc3NCwz''@;'; put 'put ''MDE0NywxNzI3MjIsMzA4MDMsMTk0NjI0LDM2MTA4LDI5NDEwLDI5NTUzLDM1NjI5LDI5NDQyLDI5OTM3LDM2MDc1LDE1MDIwMywzNDM1MSwyNDUwNiwzNDk3NiwxNzU5MSxudWxsLDEzNzI3NSwxNTkyMzcsbnVsbCwzNTQ1NCwxNDA1NzEsbnVsbCwyNDgyOSwzMDMxMSwzOTYzOSw0MDI2MCwz''@;'; put 'put ''Nzc0MiwzOTgyMywzNDgwNSxudWxsLDM0ODMxLDM2MDg3LDI5NDg0LDM4Njg5LDM5ODU2LDEzNzgyLDI5MzYyLDE5NDYzLDMxODI1LDM5MjQyLDE1NTk5MywyNDkyMSwxOTQ2MCw0MDU5OCwyNDk1NyxudWxsLDIyMzY3LDI0OTQzLDI1MjU0LDI1MTQ1LDI1Mjk0LDE0OTQwLDI1MDU4LDIxNDE4''@;'; put 'put ''LDE0NDM3MywyNTQ0NCwyNjYyNiwxMzc3OCwyMzg5NSwxNjY4NTAsMzY4MjYsMTY3NDgxLG51bGwsMjA2OTcsMTM4NTY2LDMwOTgyLDIxMjk4LDM4NDU2LDEzNDk3MSwxNjQ4NSxudWxsLDMwNzE4LG51bGwsMzE5MzgsMTU1NDE4LDMxOTYyLDMxMjc3LDMyODcwLDMyODY3LDMyMDc3LDI5OTU3''@;'; put 'put ''LDI5OTM4LDM1MjIwLDMzMzA2LDI2MzgwLDMyODY2LDE2MDkwMiwzMjg1OSwyOTkzNiwzMzAyNywzMDUwMCwzNTIwOSwxNTc2NDQsMzAwMzUsMTU5NDQxLDM0NzI5LDM0NzY2LDMzMjI0LDM0NzAwLDM1NDAxLDM2MDEzLDM1NjUxLDMwNTA3LDI5OTQ0LDM0MDEwLDEzODc3LDI3MDU4LDM2MjYy''@;'; put 'put ''LG51bGwsMzUyNDEsMjk4MDAsMjgwODksMzQ3NTMsMTQ3NDczLDI5OTI3LDE1ODM1LDI5MDQ2LDI0NzQwLDI0OTg4LDE1NTY5LDI5MDI2LDI0Njk1LG51bGwsMzI2MjUsMTY2NzAxLDI5MjY0LDI0ODA5LDE5MzI2LDIxMDI0LDE1Mzg0LDE0NjYzMSwxNTUzNTEsMTYxMzY2LDE1Mjg4MSwxMzc1''@;'; put 'put ''NDAsMTM1OTM0LDE3MDI0MywxNTkxOTYsMTU5OTE3LDIzNzQ1LDE1NjA3NywxNjY0MTUsMTQ1MDE1LDEzMTMxMCwxNTc3NjYsMTUxMzEwLDE3NzYyLDIzMzI3LDE1NjQ5Miw0MDc4NCw0MDYxNCwxNTYyNjcsMTIyODgsNjUyOTIsMTIyODksMTIyOTAsNjUyOTQsODIzMSw2NTMwNyw2NTMwNiw2''@;'; put 'put ''NTMxMSw2NTI4MSw2NTA3Miw4MjMwLDgyMjksNjUxMDQsNjUxMDUsNjUxMDYsMTgzLDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MzcyLDgyMTEsNjUwNzMsODIxMiw2NTA3NSw5NTg4LDY1MDc2LDY1MTAzLDY1Mjg4LDY1Mjg5LDY1MDc3LDY1MDc4LDY1MzcxLDY1MzczLDY1MDc5LDY1MDgw''@;'; put 'put ''LDEyMzA4LDEyMzA5LDY1MDgxLDY1MDgyLDEyMzA0LDEyMzA1LDY1MDgzLDY1MDg0LDEyMjk4LDEyMjk5LDY1MDg1LDY1MDg2LDEyMjk2LDEyMjk3LDY1MDg3LDY1MDg4LDEyMzAwLDEyMzAxLDY1MDg5LDY1MDkwLDEyMzAyLDEyMzAzLDY1MDkxLDY1MDkyLDY1MTEzLDY1MTE0LDY1MTE1LDY1''@;'; put 'put ''MTE2LDY1MTE3LDY1MTE4LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMTcsMTIzMTgsODI0NSw4MjQyLDY1MjgzLDY1Mjg2LDY1MjkwLDgyNTEsMTY3LDEyMjkxLDk2NzUsOTY3OSw5NjUxLDk2NTAsOTY3OCw5NzM0LDk3MzMsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjYxLDk2NjAsMTI5NjMsODQ1''@;'; put 'put ''MywxNzUsNjU1MDcsNjUzNDMsNzE3LDY1MDk3LDY1MDk4LDY1MTAxLDY1MTAyLDY1MDk5LDY1MTAwLDY1MTE5LDY1MTIwLDY1MTIxLDY1MjkxLDY1MjkzLDIxNSwyNDcsMTc3LDg3MzAsNjUzMDgsNjUzMTAsNjUzMDksODgwNiw4ODA3LDg4MDAsODczNCw4Nzg2LDg4MDEsNjUxMjIsNjUxMjMs''@;'; put 'put ''NjUxMjQsNjUxMjUsNjUxMjYsNjUzNzQsODc0NSw4NzQ2LDg4NjksODczNiw4NzM1LDg4OTUsMTMyNjYsMTMyNjUsODc0Nyw4NzUwLDg3NTcsODc1Niw5NzkyLDk3OTQsODg1Myw4ODU3LDg1OTMsODU5NSw4NTkyLDg1OTQsODU5OCw4NTk5LDg2MDEsODYwMCw4NzQxLDg3MzksNjUyOTUsNjUz''@;'; put 'put ''NDAsODcyNSw2NTEyOCw2NTI4NCw2NTUwOSwxMjMwNiw2NTUwNCw2NTUwNSw2NTI4NSw2NTMxMiw4NDUxLDg0NTcsNjUxMjksNjUxMzAsNjUxMzEsMTMyNjksMTMyMTIsMTMyMTMsMTMyMTQsMTMyNjIsMTMyMTcsMTMxOTgsMTMxOTksMTMyNTIsMTc2LDIwODI1LDIwODI3LDIwODMwLDIwODI5''@;'; put 'put ''LDIwODMzLDIwODM1LDIxOTkxLDI5OTI5LDMxOTUwLDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjE1LDk2MTQsOTYxMyw5NjEyLDk2MTEsOTYxMCw5NjA5LDk1MzIsOTUyNCw5NTE2LDk1MDgsOTUwMCw5NjIwLDk0NzIsOTQ3NCw5NjIxLDk0ODQsOTQ4OCw5NDky''@;'; put 'put ''LDk0OTYsOTU4MSw5NTgyLDk1ODQsOTU4Myw5NTUyLDk1NjYsOTU3OCw5NTY5LDk2OTgsOTY5OSw5NzAxLDk3MDAsOTU4NSw5NTg2LDk1ODcsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4''@;'; put 'put ''LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MywxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwyMTMxMywyMTMxNiwyMTMxNyw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2''@;'; put 'put ''NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1''@;'; put 'put ''Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5''@;'; put 'put ''MzUsOTM2LDkzNyw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1''@;'; put 'put ''OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw3''@;'; put 'put ''MjksNzEzLDcxNCw3MTEsNzE1LDkyMTYsOTIxNyw5MjE4LDkyMTksOTIyMCw5MjIxLDkyMjIsOTIyMyw5MjI0LDkyMjUsOTIyNiw5MjI3LDkyMjgsOTIyOSw5MjMwLDkyMzEsOTIzMiw5MjMzLDkyMzQsOTIzNSw5MjM2LDkyMzcsOTIzOCw5MjM5LDkyNDAsOTI0MSw5MjQyLDkyNDMsOTI0NCw5''@;'; put 'put ''MjQ1LDkyNDYsOTI0Nyw5MjQ5LDgzNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDE5OTY4LDIwMDU3LDE5OTY5LDE5OTcxLDIwMDM1LDIwMDYxLDIwMTAyLDIwMTA4LDIwMTU0LDIwNzk5LDIwODM3LDIwODQzLDIwOTYwLDIwOTkyLDIwOTkzLDIxMTQ3LDIxMjY5LDIxMzEzLDIxMzQwLDIxNDQ4LDE5OTc3LDE5OTc5LDE5OTc2LDE5OTc4LDIwMDExLDIwMDI0LDIwOTYx''@;'; put 'put ''LDIwMDM3LDIwMDQwLDIwMDYzLDIwMDYyLDIwMTEwLDIwMTI5LDIwODAwLDIwOTk1LDIxMjQyLDIxMzE1LDIxNDQ5LDIxNDc1LDIyMzAzLDIyNzYzLDIyODA1LDIyODIzLDIyODk5LDIzMzc2LDIzMzc3LDIzMzc5LDIzNTQ0LDIzNTY3LDIzNTg2LDIzNjA4LDIzNjY1LDI0MDI5LDI0MDM3LDI0''@;'; put 'put ''MDQ5LDI0MDUwLDI0MDUxLDI0MDYyLDI0MTc4LDI0MzE4LDI0MzMxLDI0MzM5LDI1MTY1LDE5OTg1LDE5OTg0LDE5OTgxLDIwMDEzLDIwMDE2LDIwMDI1LDIwMDQzLDIzNjA5LDIwMTA0LDIwMTEzLDIwMTE3LDIwMTE0LDIwMTE2LDIwMTMwLDIwMTYxLDIwMTYwLDIwMTYzLDIwMTY2LDIwMTY3''@;'; put 'put ''LDIwMTczLDIwMTcwLDIwMTcxLDIwMTY0LDIwODAzLDIwODAxLDIwODM5LDIwODQ1LDIwODQ2LDIwODQ0LDIwODg3LDIwOTgyLDIwOTk4LDIwOTk5LDIxZTMsMjEyNDMsMjEyNDYsMjEyNDcsMjEyNzAsMjEzMDUsMjEzMjAsMjEzMTksMjEzMTcsMjEzNDIsMjEzODAsMjE0NTEsMjE0NTAsMjE0''@;'; put 'put ''NTMsMjI3NjQsMjI4MjUsMjI4MjcsMjI4MjYsMjI4MjksMjMzODAsMjM1NjksMjM1ODgsMjM2MTAsMjM2NjMsMjQwNTIsMjQxODcsMjQzMTksMjQzNDAsMjQzNDEsMjQ1MTUsMjUwOTYsMjUxNDIsMjUxNjMsMjUxNjYsMjU5MDMsMjU5OTEsMjYwMDcsMjYwMjAsMjYwNDEsMjYwODUsMjYzNTIs''@;'; put 'put ''MjYzNzYsMjY0MDgsMjc0MjQsMjc0OTAsMjc1MTMsMjc1OTUsMjc2MDQsMjc2MTEsMjc2NjMsMjc3MDAsMjg3NzksMjkyMjYsMjkyMzgsMjkyNDMsMjkyNTUsMjkyNzMsMjkyNzUsMjkzNTYsMjk1NzksMTk5OTMsMTk5OTAsMTk5ODksMTk5ODgsMTk5OTIsMjAwMjcsMjAwNDUsMjAwNDcsMjAw''@;'; put 'put ''NDYsMjAxOTcsMjAxODQsMjAxODAsMjAxODEsMjAxODIsMjAxODMsMjAxOTUsMjAxOTYsMjAxODUsMjAxOTAsMjA4MDUsMjA4MDQsMjA4NzMsMjA4NzQsMjA5MDgsMjA5ODUsMjA5ODYsMjA5ODQsMjEwMDIsMjExNTIsMjExNTEsMjEyNTMsMjEyNTQsMjEyNzEsMjEyNzcsMjAxOTEsMjEzMjIs''@;'; put 'put ''MjEzMjEsMjEzNDUsMjEzNDQsMjEzNTksMjEzNTgsMjE0MzUsMjE0ODcsMjE0NzYsMjE0OTEsMjE0ODQsMjE0ODYsMjE0ODEsMjE0ODAsMjE1MDAsMjE0OTYsMjE0OTMsMjE0ODMsMjE0NzgsMjE0ODIsMjE0OTAsMjE0ODksMjE0ODgsMjE0NzcsMjE0ODUsMjE0OTksMjIyMzUsMjIyMzQsMjI4''@;'; put 'put ''MDYsMjI4MzAsMjI4MzMsMjI5MDAsMjI5MDIsMjMzODEsMjM0MjcsMjM2MTIsMjQwNDAsMjQwMzksMjQwMzgsMjQwNjYsMjQwNjcsMjQxNzksMjQxODgsMjQzMjEsMjQzNDQsMjQzNDMsMjQ1MTcsMjUwOTgsMjUxNzEsMjUxNzIsMjUxNzAsMjUxNjksMjYwMjEsMjYwODYsMjY0MTQsMjY0MTIs''@;'; put 'put ''MjY0MTAsMjY0MTEsMjY0MTMsMjc0OTEsMjc1OTcsMjc2NjUsMjc2NjQsMjc3MDQsMjc3MTMsMjc3MTIsMjc3MTAsMjkzNTksMjk1NzIsMjk1NzcsMjk5MTYsMjk5MjYsMjk5NzYsMjk5ODMsMjk5OTIsMjk5OTMsM2U0LDMwMDAxLDMwMDAyLDMwMDAzLDMwMDkxLDMwMzMzLDMwMzgyLDMwMzk5''@;'; put 'put ''LDMwNDQ2LDMwNjgzLDMwNjkwLDMwNzA3LDMxMDM0LDMxMTY2LDMxMzQ4LDMxNDM1LDE5OTk4LDE5OTk5LDIwMDUwLDIwMDUxLDIwMDczLDIwMTIxLDIwMTMyLDIwMTM0LDIwMTMzLDIwMjIzLDIwMjMzLDIwMjQ5LDIwMjM0LDIwMjQ1LDIwMjM3LDIwMjQwLDIwMjQxLDIwMjM5LDIwMjEwLDIw''@;'; put 'put ''MjE0LDIwMjE5LDIwMjA4LDIwMjExLDIwMjIxLDIwMjI1LDIwMjM1LDIwODA5LDIwODA3LDIwODA2LDIwODA4LDIwODQwLDIwODQ5LDIwODc3LDIwOTEyLDIxMDE1LDIxMDA5LDIxMDEwLDIxMDA2LDIxMDE0LDIxMTU1LDIxMjU2LDIxMjgxLDIxMjgwLDIxMzYwLDIxMzYxLDIxNTEzLDIxNTE5''@;'; put 'put ''LDIxNTE2LDIxNTE0LDIxNTIwLDIxNTA1LDIxNTE1LDIxNTA4LDIxNTIxLDIxNTE3LDIxNTEyLDIxNTA3LDIxNTE4LDIxNTEwLDIxNTIyLDIyMjQwLDIyMjM4LDIyMjM3LDIyMzIzLDIyMzIwLDIyMzEyLDIyMzE3LDIyMzE2LDIyMzE5LDIyMzEzLDIyODA5LDIyODEwLDIyODM5LDIyODQwLDIy''@;'; put 'put ''OTE2LDIyOTA0LDIyOTE1LDIyOTA5LDIyOTA1LDIyOTE0LDIyOTEzLDIzMzgzLDIzMzg0LDIzNDMxLDIzNDMyLDIzNDI5LDIzNDMzLDIzNTQ2LDIzNTc0LDIzNjczLDI0MDMwLDI0MDcwLDI0MTgyLDI0MTgwLDI0MzM1LDI0MzQ3LDI0NTM3LDI0NTM0LDI1MTAyLDI1MTAwLDI1MTAxLDI1MTA0''@;'; put 'put ''LDI1MTg3LDI1MTc5LDI1MTc2LDI1OTEwLDI2MDg5LDI2MDg4LDI2MDkyLDI2MDkzLDI2MzU0LDI2MzU1LDI2Mzc3LDI2NDI5LDI2NDIwLDI2NDE3LDI2NDIxLDI3NDI1LDI3NDkyLDI3NTE1LDI3NjcwLDI3NzQxLDI3NzM1LDI3NzM3LDI3NzQzLDI3NzQ0LDI3NzI4LDI3NzMzLDI3NzQ1LDI3''@;'; put 'put ''NzM5LDI3NzI1LDI3NzI2LDI4Nzg0LDI5Mjc5LDI5Mjc3LDMwMzM0LDMxNDgxLDMxODU5LDMxOTkyLDMyNTY2LDMyNjUwLDMyNzAxLDMyNzY5LDMyNzcxLDMyNzgwLDMyNzg2LDMyODE5LDMyODk1LDMyOTA1LDMyOTA3LDMyOTA4LDMzMjUxLDMzMjU4LDMzMjY3LDMzMjc2LDMzMjkyLDMzMzA3''@;'; put 'put ''LDMzMzExLDMzMzkwLDMzMzk0LDMzNDA2LDM0NDExLDM0ODgwLDM0ODkyLDM0OTE1LDM1MTk5LDM4NDMzLDIwMDE4LDIwMTM2LDIwMzAxLDIwMzAzLDIwMjk1LDIwMzExLDIwMzE4LDIwMjc2LDIwMzE1LDIwMzA5LDIwMjcyLDIwMzA0LDIwMzA1LDIwMjg1LDIwMjgyLDIwMjgwLDIwMjkxLDIw''@;'; put 'put ''MzA4LDIwMjg0LDIwMjk0LDIwMzIzLDIwMzE2LDIwMzIwLDIwMjcxLDIwMzAyLDIwMjc4LDIwMzEzLDIwMzE3LDIwMjk2LDIwMzE0LDIwODEyLDIwODExLDIwODEzLDIwODUzLDIwOTE4LDIwOTE5LDIxMDI5LDIxMDI4LDIxMDMzLDIxMDM0LDIxMDMyLDIxMTYzLDIxMTYxLDIxMTYyLDIxMTY0''@;'; put 'put ''LDIxMjgzLDIxMzYzLDIxMzY1LDIxNTMzLDIxNTQ5LDIxNTM0LDIxNTY2LDIxNTQyLDIxNTgyLDIxNTQzLDIxNTc0LDIxNTcxLDIxNTU1LDIxNTc2LDIxNTcwLDIxNTMxLDIxNTQ1LDIxNTc4LDIxNTYxLDIxNTYzLDIxNTYwLDIxNTUwLDIxNTU3LDIxNTU4LDIxNTM2LDIxNTY0LDIxNTY4LDIx''@;'; put 'put ''NTUzLDIxNTQ3LDIxNTM1LDIxNTQ4LDIyMjUwLDIyMjU2LDIyMjQ0LDIyMjUxLDIyMzQ2LDIyMzUzLDIyMzM2LDIyMzQ5LDIyMzQzLDIyMzUwLDIyMzM0LDIyMzUyLDIyMzUxLDIyMzMxLDIyNzY3LDIyODQ2LDIyOTQxLDIyOTMwLDIyOTUyLDIyOTQyLDIyOTQ3LDIyOTM3LDIyOTM0LDIyOTI1''@;'; put 'put ''LDIyOTQ4LDIyOTMxLDIyOTIyLDIyOTQ5LDIzMzg5LDIzMzg4LDIzMzg2LDIzMzg3LDIzNDM2LDIzNDM1LDIzNDM5LDIzNTk2LDIzNjE2LDIzNjE3LDIzNjE1LDIzNjE0LDIzNjk2LDIzNjk3LDIzNzAwLDIzNjkyLDI0MDQzLDI0MDc2LDI0MjA3LDI0MTk5LDI0MjAyLDI0MzExLDI0MzI0LDI0''@;'; put 'put ''MzUxLDI0NDIwLDI0NDE4LDI0NDM5LDI0NDQxLDI0NTM2LDI0NTI0LDI0NTM1LDI0NTI1LDI0NTYxLDI0NTU1LDI0NTY4LDI0NTU0LDI1MTA2LDI1MTA1LDI1MjIwLDI1MjM5LDI1MjM4LDI1MjE2LDI1MjA2LDI1MjI1LDI1MTk3LDI1MjI2LDI1MjEyLDI1MjE0LDI1MjA5LDI1MjAzLDI1MjM0''@;'; put 'put ''LDI1MTk5LDI1MjQwLDI1MTk4LDI1MjM3LDI1MjM1LDI1MjMzLDI1MjIyLDI1OTEzLDI1OTE1LDI1OTEyLDI2MDk3LDI2MzU2LDI2NDYzLDI2NDQ2LDI2NDQ3LDI2NDQ4LDI2NDQ5LDI2NDYwLDI2NDU0LDI2NDYyLDI2NDQxLDI2NDM4LDI2NDY0LDI2NDUxLDI2NDU1LDI3NDkzLDI3NTk5LDI3''@;'; put 'put ''NzE0LDI3NzQyLDI3ODAxLDI3Nzc3LDI3Nzg0LDI3Nzg1LDI3NzgxLDI3ODAzLDI3NzU0LDI3NzcwLDI3NzkyLDI3NzYwLDI3Nzg4LDI3NzUyLDI3Nzk4LDI3Nzk0LDI3NzczLDI3Nzc5LDI3NzYyLDI3Nzc0LDI3NzY0LDI3NzgyLDI3NzY2LDI3Nzg5LDI3Nzk2LDI3ODAwLDI3Nzc4LDI4Nzkw''@;'; put 'put ''LDI4Nzk2LDI4Nzk3LDI4NzkyLDI5MjgyLDI5MjgxLDI5MjgwLDI5MzgwLDI5Mzc4LDI5NTkwLDI5OTk2LDI5OTk1LDMwMDA3LDMwMDA4LDMwMzM4LDMwNDQ3LDMwNjkxLDMxMTY5LDMxMTY4LDMxMTY3LDMxMzUwLDMxOTk1LDMyNTk3LDMyOTE4LDMyOTE1LDMyOTI1LDMyOTIwLDMyOTIzLDMy''@;'; put 'put ''OTIyLDMyOTQ2LDMzMzkxLDMzNDI2LDMzNDE5LDMzNDIxLDM1MjExLDM1MjgyLDM1MzI4LDM1ODk1LDM1OTEwLDM1OTI1LDM1OTk3LDM2MTk2LDM2MjA4LDM2Mjc1LDM2NTIzLDM2NTU0LDM2NzYzLDM2Nzg0LDM2ODAyLDM2ODA2LDM2ODA1LDM2ODA0LDI0MDMzLDM3MDA5LDM3MDI2LDM3MDM0''@;'; put 'put ''LDM3MDMwLDM3MDI3LDM3MTkzLDM3MzE4LDM3MzI0LDM4NDUwLDM4NDQ2LDM4NDQ5LDM4NDQyLDM4NDQ0LDIwMDA2LDIwMDU0LDIwMDgzLDIwMTA3LDIwMTIzLDIwMTI2LDIwMTM5LDIwMTQwLDIwMzM1LDIwMzgxLDIwMzY1LDIwMzM5LDIwMzUxLDIwMzMyLDIwMzc5LDIwMzYzLDIwMzU4LDIw''@;'; put 'put ''MzU1LDIwMzM2LDIwMzQxLDIwMzYwLDIwMzI5LDIwMzQ3LDIwMzc0LDIwMzUwLDIwMzY3LDIwMzY5LDIwMzQ2LDIwODIwLDIwODE4LDIwODIxLDIwODQxLDIwODU1LDIwODU0LDIwODU2LDIwOTI1LDIwOTg5LDIxMDUxLDIxMDQ4LDIxMDQ3LDIxMDUwLDIxMDQwLDIxMDM4LDIxMDQ2LDIxMDU3''@;'; put 'put ''LDIxMTgyLDIxMTc5LDIxMzMwLDIxMzMyLDIxMzMxLDIxMzI5LDIxMzUwLDIxMzY3LDIxMzY4LDIxMzY5LDIxNDYyLDIxNDYwLDIxNDYzLDIxNjE5LDIxNjIxLDIxNjU0LDIxNjI0LDIxNjUzLDIxNjMyLDIxNjI3LDIxNjIzLDIxNjM2LDIxNjUwLDIxNjM4LDIxNjI4LDIxNjQ4LDIxNjE3LDIx''@;'; put 'put ''NjIyLDIxNjQ0LDIxNjU4LDIxNjAyLDIxNjA4LDIxNjQzLDIxNjI5LDIxNjQ2LDIyMjY2LDIyNDAzLDIyMzkxLDIyMzc4LDIyMzc3LDIyMzY5LDIyMzc0LDIyMzcyLDIyMzk2LDIyODEyLDIyODU3LDIyODU1LDIyODU2LDIyODUyLDIyODY4LDIyOTc0LDIyOTcxLDIyOTk2LDIyOTY5LDIyOTU4''@;'; put 'put ''LDIyOTkzLDIyOTgyLDIyOTkyLDIyOTg5LDIyOTg3LDIyOTk1LDIyOTg2LDIyOTU5LDIyOTYzLDIyOTk0LDIyOTgxLDIzMzkxLDIzMzk2LDIzMzk1LDIzNDQ3LDIzNDUwLDIzNDQ4LDIzNDUyLDIzNDQ5LDIzNDUxLDIzNTc4LDIzNjI0LDIzNjIxLDIzNjIyLDIzNzM1LDIzNzEzLDIzNzM2LDIz''@;'; put 'put ''NzIxLDIzNzIzLDIzNzI5LDIzNzMxLDI0MDg4LDI0MDkwLDI0MDg2LDI0MDg1LDI0MDkxLDI0MDgxLDI0MTg0LDI0MjE4LDI0MjE1LDI0MjIwLDI0MjEzLDI0MjE0LDI0MzEwLDI0MzU4LDI0MzU5LDI0MzYxLDI0NDQ4LDI0NDQ5LDI0NDQ3LDI0NDQ0LDI0NTQxLDI0NTQ0LDI0NTczLDI0NTY1''@;'; put 'put ''LDI0NTc1LDI0NTkxLDI0NTk2LDI0NjIzLDI0NjI5LDI0NTk4LDI0NjE4LDI0NTk3LDI0NjA5LDI0NjE1LDI0NjE3LDI0NjE5LDI0NjAzLDI1MTEwLDI1MTA5LDI1MTUxLDI1MTUwLDI1MTUyLDI1MjE1LDI1Mjg5LDI1MjkyLDI1Mjg0LDI1Mjc5LDI1MjgyLDI1MjczLDI1Mjk4LDI1MzA3LDI1''@;'; put 'put ''MjU5LDI1Mjk5LDI1MzAwLDI1MjkxLDI1Mjg4LDI1MjU2LDI1Mjc3LDI1Mjc2LDI1Mjk2LDI1MzA1LDI1Mjg3LDI1MjkzLDI1MjY5LDI1MzA2LDI1MjY1LDI1MzA0LDI1MzAyLDI1MzAzLDI1Mjg2LDI1MjYwLDI1Mjk0LDI1OTE4LDI2MDIzLDI2MDQ0LDI2MTA2LDI2MTMyLDI2MTMxLDI2MTI0''@;'; put 'put ''LDI2MTE4LDI2MTE0LDI2MTI2LDI2MTEyLDI2MTI3LDI2MTMzLDI2MTIyLDI2MTE5LDI2MzgxLDI2Mzc5LDI2NDc3LDI2NTA3LDI2NTE3LDI2NDgxLDI2NTI0LDI2NDgzLDI2NDg3LDI2NTAzLDI2NTI1LDI2NTE5LDI2NDc5LDI2NDgwLDI2NDk1LDI2NTA1LDI2NDk0LDI2NTEyLDI2NDg1LDI2''@;'; put 'put ''NTIyLDI2NTE1LDI2NDkyLDI2NDc0LDI2NDgyLDI3NDI3LDI3NDk0LDI3NDk1LDI3NTE5LDI3NjY3LDI3Njc1LDI3ODc1LDI3ODgwLDI3ODkxLDI3ODI1LDI3ODUyLDI3ODc3LDI3ODI3LDI3ODM3LDI3ODM4LDI3ODM2LDI3ODc0LDI3ODE5LDI3ODYxLDI3ODU5LDI3ODMyLDI3ODQ0LDI3ODMz''@;'; put 'put ''LDI3ODQxLDI3ODIyLDI3ODYzLDI3ODQ1LDI3ODg5LDI3ODM5LDI3ODM1LDI3ODczLDI3ODY3LDI3ODUwLDI3ODIwLDI3ODg3LDI3ODY4LDI3ODYyLDI3ODcyLDI4ODIxLDI4ODE0LDI4ODE4LDI4ODEwLDI4ODI1LDI5MjI4LDI5MjI5LDI5MjQwLDI5MjU2LDI5Mjg3LDI5Mjg5LDI5Mzc2LDI5''@;'; put 'put ''MzkwLDI5NDAxLDI5Mzk5LDI5MzkyLDI5NjA5LDI5NjA4LDI5NTk5LDI5NjExLDI5NjA1LDMwMDEzLDMwMTA5LDMwMTA1LDMwMTA2LDMwMzQwLDMwNDAyLDMwNDUwLDMwNDUyLDMwNjkzLDMwNzE3LDMxMDM4LDMxMDQwLDMxMDQxLDMxMTc3LDMxMTc2LDMxMzU0LDMxMzUzLDMxNDgyLDMxOTk4''@;'; put 'put ''LDMyNTk2LDMyNjUyLDMyNjUxLDMyNzczLDMyOTU0LDMyOTMzLDMyOTMwLDMyOTQ1LDMyOTI5LDMyOTM5LDMyOTM3LDMyOTQ4LDMyOTM4LDMyOTQzLDMzMjUzLDMzMjc4LDMzMjkzLDMzNDU5LDMzNDM3LDMzNDMzLDMzNDUzLDMzNDY5LDMzNDM5LDMzNDY1LDMzNDU3LDMzNDUyLDMzNDQ1LDMz''@;'; put 'put ''NDU1LDMzNDY0LDMzNDQzLDMzNDU2LDMzNDcwLDMzNDYzLDM0MzgyLDM0NDE3LDIxMDIxLDM0OTIwLDM2NTU1LDM2ODE0LDM2ODIwLDM2ODE3LDM3MDQ1LDM3MDQ4LDM3MDQxLDM3MDQ2LDM3MzE5LDM3MzI5LDM4MjYzLDM4MjcyLDM4NDI4LDM4NDY0LDM4NDYzLDM4NDU5LDM4NDY4LDM4NDY2''@;'; put 'put ''LDM4NTg1LDM4NjMyLDM4NzM4LDM4NzUwLDIwMTI3LDIwMTQxLDIwMTQyLDIwNDQ5LDIwNDA1LDIwMzk5LDIwNDE1LDIwNDQ4LDIwNDMzLDIwNDMxLDIwNDQ1LDIwNDE5LDIwNDA2LDIwNDQwLDIwNDQ3LDIwNDI2LDIwNDM5LDIwMzk4LDIwNDMyLDIwNDIwLDIwNDE4LDIwNDQyLDIwNDMwLDIw''@;'; put 'put ''NDQ2LDIwNDA3LDIwODIzLDIwODgyLDIwODgxLDIwODk2LDIxMDcwLDIxMDU5LDIxMDY2LDIxMDY5LDIxMDY4LDIxMDY3LDIxMDYzLDIxMTkxLDIxMTkzLDIxMTg3LDIxMTg1LDIxMjYxLDIxMzM1LDIxMzcxLDIxNDAyLDIxNDY3LDIxNjc2LDIxNjk2LDIxNjcyLDIxNzEwLDIxNzA1LDIxNjg4''@;'; put 'put ''LDIxNjcwLDIxNjgzLDIxNzAzLDIxNjk4LDIxNjkzLDIxNjc0LDIxNjk3LDIxNzAwLDIxNzA0LDIxNjc5LDIxNjc1LDIxNjgxLDIxNjkxLDIxNjczLDIxNjcxLDIxNjk1LDIyMjcxLDIyNDAyLDIyNDExLDIyNDMyLDIyNDM1LDIyNDM0LDIyNDc4LDIyNDQ2LDIyNDE5LDIyODY5LDIyODY1LDIy''@;'; put 'put ''ODYzLDIyODYyLDIyODY0LDIzMDA0LDIzZTMsMjMwMzksMjMwMTEsMjMwMTYsMjMwNDMsMjMwMTMsMjMwMTgsMjMwMDIsMjMwMTQsMjMwNDEsMjMwMzUsMjM0MDEsMjM0NTksMjM0NjIsMjM0NjAsMjM0NTgsMjM0NjEsMjM1NTMsMjM2MzAsMjM2MzEsMjM2MjksMjM2MjcsMjM3NjksMjM3NjIs''@;'; put 'put ''MjQwNTUsMjQwOTMsMjQxMDEsMjQwOTUsMjQxODksMjQyMjQsMjQyMzAsMjQzMTQsMjQzMjgsMjQzNjUsMjQ0MjEsMjQ0NTYsMjQ0NTMsMjQ0NTgsMjQ0NTksMjQ0NTUsMjQ0NjAsMjQ0NTcsMjQ1OTQsMjQ2MDUsMjQ2MDgsMjQ2MTMsMjQ1OTAsMjQ2MTYsMjQ2NTMsMjQ2ODgsMjQ2ODAsMjQ2''@;'; put 'put ''NzQsMjQ2NDYsMjQ2NDMsMjQ2ODQsMjQ2ODMsMjQ2ODIsMjQ2NzYsMjUxNTMsMjUzMDgsMjUzNjYsMjUzNTMsMjUzNDAsMjUzMjUsMjUzNDUsMjUzMjYsMjUzNDEsMjUzNTEsMjUzMjksMjUzMzUsMjUzMjcsMjUzMjQsMjUzNDIsMjUzMzIsMjUzNjEsMjUzNDYsMjU5MTksMjU5MjUsMjYwMjcs''@;'; put 'put ''MjYwNDUsMjYwODIsMjYxNDksMjYxNTcsMjYxNDQsMjYxNTEsMjYxNTksMjYxNDMsMjYxNTIsMjYxNjEsMjYxNDgsMjYzNTksMjY2MjMsMjY1NzksMjY2MDksMjY1ODAsMjY1NzYsMjY2MDQsMjY1NTAsMjY1NDMsMjY2MTMsMjY2MDEsMjY2MDcsMjY1NjQsMjY1NzcsMjY1NDgsMjY1ODYsMjY1''@;'; put 'put ''OTcsMjY1NTIsMjY1NzUsMjY1OTAsMjY2MTEsMjY1NDQsMjY1ODUsMjY1OTQsMjY1ODksMjY1NzgsMjc0OTgsMjc1MjMsMjc1MjYsMjc1NzMsMjc2MDIsMjc2MDcsMjc2NzksMjc4NDksMjc5MTUsMjc5NTQsMjc5NDYsMjc5NjksMjc5NDEsMjc5MTYsMjc5NTMsMjc5MzQsMjc5MjcsMjc5NjMs''@;'; put 'put ''Mjc5NjUsMjc5NjYsMjc5NTgsMjc5MzEsMjc4OTMsMjc5NjEsMjc5NDMsMjc5NjAsMjc5NDUsMjc5NTAsMjc5NTcsMjc5MTgsMjc5NDcsMjg4NDMsMjg4NTgsMjg4NTEsMjg4NDQsMjg4NDcsMjg4NDUsMjg4NTYsMjg4NDYsMjg4MzYsMjkyMzIsMjkyOTgsMjkyOTUsMjkzMDAsMjk0MTcsMjk0''@;'; put 'put ''MDgsMjk0MDksMjk2MjMsMjk2NDIsMjk2MjcsMjk2MTgsMjk2NDUsMjk2MzIsMjk2MTksMjk5NzgsMjk5OTcsMzAwMzEsMzAwMjgsMzAwMzAsMzAwMjcsMzAxMjMsMzAxMTYsMzAxMTcsMzAxMTQsMzAxMTUsMzAzMjgsMzAzNDIsMzAzNDMsMzAzNDQsMzA0MDgsMzA0MDYsMzA0MDMsMzA0MDUs''@;'; put 'put ''MzA0NjUsMzA0NTcsMzA0NTYsMzA0NzMsMzA0NzUsMzA0NjIsMzA0NjAsMzA0NzEsMzA2ODQsMzA3MjIsMzA3NDAsMzA3MzIsMzA3MzMsMzEwNDYsMzEwNDksMzEwNDgsMzEwNDcsMzExNjEsMzExNjIsMzExODUsMzExODYsMzExNzksMzEzNTksMzEzNjEsMzE0ODcsMzE0ODUsMzE4NjksMzIw''@;'; put 'put ''MDIsMzIwMDUsMzJlMywzMjAwOSwzMjAwNywzMjAwNCwzMjAwNiwzMjU2OCwzMjY1NCwzMjcwMywzMjc3MiwzMjc4NCwzMjc4MSwzMjc4NSwzMjgyMiwzMjk4MiwzMjk5NywzMjk4NiwzMjk2MywzMjk2NCwzMjk3MiwzMjk5MywzMjk4NywzMjk3NCwzMjk5MCwzMjk5NiwzMjk4OSwzMzI2OCwz''@;'; put 'put ''MzMxNCwzMzUxMSwzMzUzOSwzMzU0MSwzMzUwNywzMzQ5OSwzMzUxMCwzMzU0MCwzMzUwOSwzMzUzOCwzMzU0NSwzMzQ5MCwzMzQ5NSwzMzUyMSwzMzUzNywzMzUwMCwzMzQ5MiwzMzQ4OSwzMzUwMiwzMzQ5MSwzMzUwMywzMzUxOSwzMzU0MiwzNDM4NCwzNDQyNSwzNDQyNywzNDQyNiwzNDg5''@;'; put 'put ''MywzNDkyMywzNTIwMSwzNTI4NCwzNTMzNiwzNTMzMCwzNTMzMSwzNTk5OCwzNmUzLDM2MjEyLDM2MjExLDM2Mjc2LDM2NTU3LDM2NTU2LDM2ODQ4LDM2ODM4LDM2ODM0LDM2ODQyLDM2ODM3LDM2ODQ1LDM2ODQzLDM2ODM2LDM2ODQwLDM3MDY2LDM3MDcwLDM3MDU3LDM3MDU5LDM3MTk1LDM3''@;'; put 'put ''MTk0LDM3MzI1LDM4Mjc0LDM4NDgwLDM4NDc1LDM4NDc2LDM4NDc3LDM4NzU0LDM4NzYxLDM4ODU5LDM4ODkzLDM4ODk5LDM4OTEzLDM5MDgwLDM5MTMxLDM5MTM1LDM5MzE4LDM5MzIxLDIwMDU2LDIwMTQ3LDIwNDkyLDIwNDkzLDIwNTE1LDIwNDYzLDIwNTE4LDIwNTE3LDIwNDcyLDIwNTIx''@;'; put 'put ''LDIwNTAyLDIwNDg2LDIwNTQwLDIwNTExLDIwNTA2LDIwNDk4LDIwNDk3LDIwNDc0LDIwNDgwLDIwNTAwLDIwNTIwLDIwNDY1LDIwNTEzLDIwNDkxLDIwNTA1LDIwNTA0LDIwNDY3LDIwNDYyLDIwNTI1LDIwNTIyLDIwNDc4LDIwNTIzLDIwNDg5LDIwODYwLDIwOTAwLDIwOTAxLDIwODk4LDIw''@;'; put 'put ''OTQxLDIwOTQwLDIwOTM0LDIwOTM5LDIxMDc4LDIxMDg0LDIxMDc2LDIxMDgzLDIxMDg1LDIxMjkwLDIxMzc1LDIxNDA3LDIxNDA1LDIxNDcxLDIxNzM2LDIxNzc2LDIxNzYxLDIxODE1LDIxNzU2LDIxNzMzLDIxNzQ2LDIxNzY2LDIxNzU0LDIxNzgwLDIxNzM3LDIxNzQxLDIxNzI5LDIxNzY5''@;'; put 'put ''LDIxNzQyLDIxNzM4LDIxNzM0LDIxNzk5LDIxNzY3LDIxNzU3LDIxNzc1LDIyMjc1LDIyMjc2LDIyNDY2LDIyNDg0LDIyNDc1LDIyNDY3LDIyNTM3LDIyNzk5LDIyODcxLDIyODcyLDIyODc0LDIzMDU3LDIzMDY0LDIzMDY4LDIzMDcxLDIzMDY3LDIzMDU5LDIzMDIwLDIzMDcyLDIzMDc1LDIz''@;'; put 'put ''MDgxLDIzMDc3LDIzMDUyLDIzMDQ5LDIzNDAzLDIzNjQwLDIzNDcyLDIzNDc1LDIzNDc4LDIzNDc2LDIzNDcwLDIzNDc3LDIzNDgxLDIzNDgwLDIzNTU2LDIzNjMzLDIzNjM3LDIzNjMyLDIzNzg5LDIzODA1LDIzODAzLDIzNzg2LDIzNzg0LDIzNzkyLDIzNzk4LDIzODA5LDIzNzk2LDI0MDQ2''@;'; put 'put ''LDI0MTA5LDI0MTA3LDI0MjM1LDI0MjM3LDI0MjMxLDI0MzY5LDI0NDY2LDI0NDY1LDI0NDY0LDI0NjY1LDI0Njc1LDI0Njc3LDI0NjU2LDI0NjYxLDI0Njg1LDI0NjgxLDI0Njg3LDI0NzA4LDI0NzM1LDI0NzMwLDI0NzE3LDI0NzI0LDI0NzE2LDI0NzA5LDI0NzI2LDI1MTU5LDI1MzMxLDI1''@;'; put 'put ''MzUyLDI1MzQzLDI1NDIyLDI1NDA2LDI1MzkxLDI1NDI5LDI1NDEwLDI1NDE0LDI1NDIzLDI1NDE3LDI1NDAyLDI1NDI0LDI1NDA1LDI1Mzg2LDI1Mzg3LDI1Mzg0LDI1NDIxLDI1NDIwLDI1OTI4LDI1OTI5LDI2MDA5LDI2MDQ5LDI2MDUzLDI2MTc4LDI2MTg1LDI2MTkxLDI2MTc5LDI2MTk0''@;'; put 'put ''LDI2MTg4LDI2MTgxLDI2MTc3LDI2MzYwLDI2Mzg4LDI2Mzg5LDI2MzkxLDI2NjU3LDI2NjgwLDI2Njk2LDI2Njk0LDI2NzA3LDI2NjgxLDI2NjkwLDI2NzA4LDI2NjY1LDI2ODAzLDI2NjQ3LDI2NzAwLDI2NzA1LDI2Njg1LDI2NjEyLDI2NzA0LDI2Njg4LDI2Njg0LDI2NjkxLDI2NjY2LDI2''@;'; put 'put ''NjkzLDI2NjQzLDI2NjQ4LDI2Njg5LDI3NTMwLDI3NTI5LDI3NTc1LDI3NjgzLDI3Njg3LDI3Njg4LDI3Njg2LDI3Njg0LDI3ODg4LDI4MDEwLDI4MDUzLDI4MDQwLDI4MDM5LDI4MDA2LDI4MDI0LDI4MDIzLDI3OTkzLDI4MDUxLDI4MDEyLDI4MDQxLDI4MDE0LDI3OTk0LDI4MDIwLDI4MDA5''@;'; put 'put ''LDI4MDQ0LDI4MDQyLDI4MDI1LDI4MDM3LDI4MDA1LDI4MDUyLDI4ODc0LDI4ODg4LDI4OTAwLDI4ODg5LDI4ODcyLDI4ODc5LDI5MjQxLDI5MzA1LDI5NDM2LDI5NDMzLDI5NDM3LDI5NDMyLDI5NDMxLDI5NTc0LDI5Njc3LDI5NzA1LDI5Njc4LDI5NjY0LDI5Njc0LDI5NjYyLDMwMDM2LDMw''@;'; put 'put ''MDQ1LDMwMDQ0LDMwMDQyLDMwMDQxLDMwMTQyLDMwMTQ5LDMwMTUxLDMwMTMwLDMwMTMxLDMwMTQxLDMwMTQwLDMwMTM3LDMwMTQ2LDMwMTM2LDMwMzQ3LDMwMzg0LDMwNDEwLDMwNDEzLDMwNDE0LDMwNTA1LDMwNDk1LDMwNDk2LDMwNTA0LDMwNjk3LDMwNzY4LDMwNzU5LDMwNzc2LDMwNzQ5''@;'; put 'put ''LDMwNzcyLDMwNzc1LDMwNzU3LDMwNzY1LDMwNzUyLDMwNzUxLDMwNzcwLDMxMDYxLDMxMDU2LDMxMDcyLDMxMDcxLDMxMDYyLDMxMDcwLDMxMDY5LDMxMDYzLDMxMDY2LDMxMjA0LDMxMjAzLDMxMjA3LDMxMTk5LDMxMjA2LDMxMjA5LDMxMTkyLDMxMzY0LDMxMzY4LDMxNDQ5LDMxNDk0LDMx''@;'; put 'put ''NTA1LDMxODgxLDMyMDMzLDMyMDIzLDMyMDExLDMyMDEwLDMyMDMyLDMyMDM0LDMyMDIwLDMyMDE2LDMyMDIxLDMyMDI2LDMyMDI4LDMyMDEzLDMyMDI1LDMyMDI3LDMyNTcwLDMyNjA3LDMyNjYwLDMyNzA5LDMyNzA1LDMyNzc0LDMyNzkyLDMyNzg5LDMyNzkzLDMyNzkxLDMyODI5LDMyODMx''@;'; put 'put ''LDMzMDA5LDMzMDI2LDMzMDA4LDMzMDI5LDMzMDA1LDMzMDEyLDMzMDMwLDMzMDE2LDMzMDExLDMzMDMyLDMzMDIxLDMzMDM0LDMzMDIwLDMzMDA3LDMzMjYxLDMzMjYwLDMzMjgwLDMzMjk2LDMzMzIyLDMzMzIzLDMzMzIwLDMzMzI0LDMzNDY3LDMzNTc5LDMzNjE4LDMzNjIwLDMzNjEwLDMz''@;'; put 'put ''NTkyLDMzNjE2LDMzNjA5LDMzNTg5LDMzNTg4LDMzNjE1LDMzNTg2LDMzNTkzLDMzNTkwLDMzNTU5LDMzNjAwLDMzNTg1LDMzNTc2LDMzNjAzLDM0Mzg4LDM0NDQyLDM0NDc0LDM0NDUxLDM0NDY4LDM0NDczLDM0NDQ0LDM0NDY3LDM0NDYwLDM0OTI4LDM0OTM1LDM0OTQ1LDM0OTQ2LDM0OTQx''@;'; put 'put ''LDM0OTM3LDM1MzUyLDM1MzQ0LDM1MzQyLDM1MzQwLDM1MzQ5LDM1MzM4LDM1MzUxLDM1MzQ3LDM1MzUwLDM1MzQzLDM1MzQ1LDM1OTEyLDM1OTYyLDM1OTYxLDM2MDAxLDM2MDAyLDM2MjE1LDM2NTI0LDM2NTYyLDM2NTY0LDM2NTU5LDM2Nzg1LDM2ODY1LDM2ODcwLDM2ODU1LDM2ODY0LDM2''@;'; put 'put ''ODU4LDM2ODUyLDM2ODY3LDM2ODYxLDM2ODY5LDM2ODU2LDM3MDEzLDM3MDg5LDM3MDg1LDM3MDkwLDM3MjAyLDM3MTk3LDM3MTk2LDM3MzM2LDM3MzQxLDM3MzM1LDM3MzQwLDM3MzM3LDM4Mjc1LDM4NDk4LDM4NDk5LDM4NDk3LDM4NDkxLDM4NDkzLDM4NTAwLDM4NDg4LDM4NDk0LDM4NTg3''@;'; put 'put ''LDM5MTM4LDM5MzQwLDM5NTkyLDM5NjQwLDM5NzE3LDM5NzMwLDM5NzQwLDIwMDk0LDIwNjAyLDIwNjA1LDIwNTcyLDIwNTUxLDIwNTQ3LDIwNTU2LDIwNTcwLDIwNTUzLDIwNTgxLDIwNTk4LDIwNTU4LDIwNTY1LDIwNTk3LDIwNTk2LDIwNTk5LDIwNTU5LDIwNDk1LDIwNTkxLDIwNTg5LDIw''@;'; put 'put ''ODI4LDIwODg1LDIwOTc2LDIxMDk4LDIxMTAzLDIxMjAyLDIxMjA5LDIxMjA4LDIxMjA1LDIxMjY0LDIxMjYzLDIxMjczLDIxMzExLDIxMzEyLDIxMzEwLDIxNDQzLDI2MzY0LDIxODMwLDIxODY2LDIxODYyLDIxODI4LDIxODU0LDIxODU3LDIxODI3LDIxODM0LDIxODA5LDIxODQ2LDIxODM5''@;'; put 'put ''LDIxODQ1LDIxODA3LDIxODYwLDIxODE2LDIxODA2LDIxODUyLDIxODA0LDIxODU5LDIxODExLDIxODI1LDIxODQ3LDIyMjgwLDIyMjgzLDIyMjgxLDIyNDk1LDIyNTMzLDIyNTM4LDIyNTM0LDIyNDk2LDIyNTAwLDIyNTIyLDIyNTMwLDIyNTgxLDIyNTE5LDIyNTIxLDIyODE2LDIyODgyLDIz''@;'; put 'put ''MDk0LDIzMTA1LDIzMTEzLDIzMTQyLDIzMTQ2LDIzMTA0LDIzMTAwLDIzMTM4LDIzMTMwLDIzMTEwLDIzMTE0LDIzNDA4LDIzNDk1LDIzNDkzLDIzNDkyLDIzNDkwLDIzNDg3LDIzNDk0LDIzNTYxLDIzNTYwLDIzNTU5LDIzNjQ4LDIzNjQ0LDIzNjQ1LDIzODE1LDIzODE0LDIzODIyLDIzODM1''@;'; put 'put ''LDIzODMwLDIzODQyLDIzODI1LDIzODQ5LDIzODI4LDIzODMzLDIzODQ0LDIzODQ3LDIzODMxLDI0MDM0LDI0MTIwLDI0MTE4LDI0MTE1LDI0MTE5LDI0MjQ3LDI0MjQ4LDI0MjQ2LDI0MjQ1LDI0MjU0LDI0MzczLDI0Mzc1LDI0NDA3LDI0NDI4LDI0NDI1LDI0NDI3LDI0NDcxLDI0NDczLDI0''@;'; put 'put ''NDc4LDI0NDcyLDI0NDgxLDI0NDgwLDI0NDc2LDI0NzAzLDI0NzM5LDI0NzEzLDI0NzM2LDI0NzQ0LDI0Nzc5LDI0NzU2LDI0ODA2LDI0NzY1LDI0NzczLDI0NzYzLDI0NzU3LDI0Nzk2LDI0NzY0LDI0NzkyLDI0Nzg5LDI0Nzc0LDI0Nzk5LDI0NzYwLDI0Nzk0LDI0Nzc1LDI1MTE0LDI1MTE1''@;'; put 'put ''LDI1MTYwLDI1NTA0LDI1NTExLDI1NDU4LDI1NDk0LDI1NTA2LDI1NTA5LDI1NDYzLDI1NDQ3LDI1NDk2LDI1NTE0LDI1NDU3LDI1NTEzLDI1NDgxLDI1NDc1LDI1NDk5LDI1NDUxLDI1NTEyLDI1NDc2LDI1NDgwLDI1NDk3LDI1NTA1LDI1NTE2LDI1NDkwLDI1NDg3LDI1NDcyLDI1NDY3LDI1''@;'; put 'put ''NDQ5LDI1NDQ4LDI1NDY2LDI1OTQ5LDI1OTQyLDI1OTM3LDI1OTQ1LDI1OTQzLDIxODU1LDI1OTM1LDI1OTQ0LDI1OTQxLDI1OTQwLDI2MDEyLDI2MDExLDI2MDI4LDI2MDYzLDI2MDU5LDI2MDYwLDI2MDYyLDI2MjA1LDI2MjAyLDI2MjEyLDI2MjE2LDI2MjE0LDI2MjA2LDI2MzYxLDIxMjA3''@;'; put 'put ''LDI2Mzk1LDI2NzUzLDI2Nzk5LDI2Nzg2LDI2NzcxLDI2ODA1LDI2NzUxLDI2NzQyLDI2ODAxLDI2NzkxLDI2Nzc1LDI2ODAwLDI2NzU1LDI2ODIwLDI2Nzk3LDI2NzU4LDI2NzU3LDI2NzcyLDI2NzgxLDI2NzkyLDI2NzgzLDI2Nzg1LDI2NzU0LDI3NDQyLDI3NTc4LDI3NjI3LDI3NjI4LDI3''@;'; put 'put ''NjkxLDI4MDQ2LDI4MDkyLDI4MTQ3LDI4MTIxLDI4MDgyLDI4MTI5LDI4MTA4LDI4MTMyLDI4MTU1LDI4MTU0LDI4MTY1LDI4MTAzLDI4MTA3LDI4MDc5LDI4MTEzLDI4MDc4LDI4MTI2LDI4MTUzLDI4MDg4LDI4MTUxLDI4MTQ5LDI4MTAxLDI4MTE0LDI4MTg2LDI4MDg1LDI4MTIyLDI4MTM5''@;'; put 'put ''LDI4MTIwLDI4MTM4LDI4MTQ1LDI4MTQyLDI4MTM2LDI4MTAyLDI4MTAwLDI4MDc0LDI4MTQwLDI4MDk1LDI4MTM0LDI4OTIxLDI4OTM3LDI4OTM4LDI4OTI1LDI4OTExLDI5MjQ1LDI5MzA5LDI5MzEzLDI5NDY4LDI5NDY3LDI5NDYyLDI5NDU5LDI5NDY1LDI5NTc1LDI5NzAxLDI5NzA2LDI5''@;'; put 'put ''Njk5LDI5NzAyLDI5Njk0LDI5NzA5LDI5OTIwLDI5OTQyLDI5OTQzLDI5OTgwLDI5OTg2LDMwMDUzLDMwMDU0LDMwMDUwLDMwMDY0LDMwMDk1LDMwMTY0LDMwMTY1LDMwMTMzLDMwMTU0LDMwMTU3LDMwMzUwLDMwNDIwLDMwNDE4LDMwNDI3LDMwNTE5LDMwNTI2LDMwNTI0LDMwNTE4LDMwNTIw''@;'; put 'put ''LDMwNTIyLDMwODI3LDMwNzg3LDMwNzk4LDMxMDc3LDMxMDgwLDMxMDg1LDMxMjI3LDMxMzc4LDMxMzgxLDMxNTIwLDMxNTI4LDMxNTE1LDMxNTMyLDMxNTI2LDMxNTEzLDMxNTE4LDMxNTM0LDMxODkwLDMxODk1LDMxODkzLDMyMDcwLDMyMDY3LDMyMTEzLDMyMDQ2LDMyMDU3LDMyMDYwLDMy''@;'; put 'put ''MDY0LDMyMDQ4LDMyMDUxLDMyMDY4LDMyMDQ3LDMyMDY2LDMyMDUwLDMyMDQ5LDMyNTczLDMyNjcwLDMyNjY2LDMyNzE2LDMyNzE4LDMyNzIyLDMyNzk2LDMyODQyLDMyODM4LDMzMDcxLDMzMDQ2LDMzMDU5LDMzMDY3LDMzMDY1LDMzMDcyLDMzMDYwLDMzMjgyLDMzMzMzLDMzMzM1LDMzMzM0''@;'; put 'put ''LDMzMzM3LDMzNjc4LDMzNjk0LDMzNjg4LDMzNjU2LDMzNjk4LDMzNjg2LDMzNzI1LDMzNzA3LDMzNjgyLDMzNjc0LDMzNjgzLDMzNjczLDMzNjk2LDMzNjU1LDMzNjU5LDMzNjYwLDMzNjcwLDMzNzAzLDM0Mzg5LDI0NDI2LDM0NTAzLDM0NDk2LDM0NDg2LDM0NTAwLDM0NDg1LDM0NTAyLDM0''@;'; put 'put ''NTA3LDM0NDgxLDM0NDc5LDM0NTA1LDM0ODk5LDM0OTc0LDM0OTUyLDM0OTg3LDM0OTYyLDM0OTY2LDM0OTU3LDM0OTU1LDM1MjE5LDM1MjE1LDM1MzcwLDM1MzU3LDM1MzYzLDM1MzY1LDM1Mzc3LDM1MzczLDM1MzU5LDM1MzU1LDM1MzYyLDM1OTEzLDM1OTMwLDM2MDA5LDM2MDEyLDM2MDEx''@;'; put 'put ''LDM2MDA4LDM2MDEwLDM2MDA3LDM2MTk5LDM2MTk4LDM2Mjg2LDM2MjgyLDM2NTcxLDM2NTc1LDM2ODg5LDM2ODc3LDM2ODkwLDM2ODg3LDM2ODk5LDM2ODk1LDM2ODkzLDM2ODgwLDM2ODg1LDM2ODk0LDM2ODk2LDM2ODc5LDM2ODk4LDM2ODg2LDM2ODkxLDM2ODg0LDM3MDk2LDM3MTAxLDM3''@;'; put 'put ''MTE3LDM3MjA3LDM3MzI2LDM3MzY1LDM3MzUwLDM3MzQ3LDM3MzUxLDM3MzU3LDM3MzUzLDM4MjgxLDM4NTA2LDM4NTE3LDM4NTE1LDM4NTIwLDM4NTEyLDM4NTE2LDM4NTE4LDM4NTE5LDM4NTA4LDM4NTkyLDM4NjM0LDM4NjMzLDMxNDU2LDMxNDU1LDM4OTE0LDM4OTE1LDM5NzcwLDQwMTY1''@;'; put 'put ''LDQwNTY1LDQwNTc1LDQwNjEzLDQwNjM1LDIwNjQyLDIwNjIxLDIwNjEzLDIwNjMzLDIwNjI1LDIwNjA4LDIwNjMwLDIwNjMyLDIwNjM0LDI2MzY4LDIwOTc3LDIxMTA2LDIxMTA4LDIxMTA5LDIxMDk3LDIxMjE0LDIxMjEzLDIxMjExLDIxMzM4LDIxNDEzLDIxODgzLDIxODg4LDIxOTI3LDIx''@;'; put 'put ''ODg0LDIxODk4LDIxOTE3LDIxOTEyLDIxODkwLDIxOTE2LDIxOTMwLDIxOTA4LDIxODk1LDIxODk5LDIxODkxLDIxOTM5LDIxOTM0LDIxOTE5LDIxODIyLDIxOTM4LDIxOTE0LDIxOTQ3LDIxOTMyLDIxOTM3LDIxODg2LDIxODk3LDIxOTMxLDIxOTEzLDIyMjg1LDIyNTc1LDIyNTcwLDIyNTgw''@;'; put 'put ''LDIyNTY0LDIyNTc2LDIyNTc3LDIyNTYxLDIyNTU3LDIyNTYwLDIyNzc3LDIyNzc4LDIyODgwLDIzMTU5LDIzMTk0LDIzMTY3LDIzMTg2LDIzMTk1LDIzMjA3LDIzNDExLDIzNDA5LDIzNTA2LDIzNTAwLDIzNTA3LDIzNTA0LDIzNTYyLDIzNTYzLDIzNjAxLDIzODg0LDIzODg4LDIzODYwLDIz''@;'; put 'put ''ODc5LDI0MDYxLDI0MTMzLDI0MTI1LDI0MTI4LDI0MTMxLDI0MTkwLDI0MjY2LDI0MjU3LDI0MjU4LDI0MjYwLDI0MzgwLDI0NDI5LDI0NDg5LDI0NDkwLDI0NDg4LDI0Nzg1LDI0ODAxLDI0NzU0LDI0NzU4LDI0ODAwLDI0ODYwLDI0ODY3LDI0ODI2LDI0ODUzLDI0ODE2LDI0ODI3LDI0ODIw''@;'; put 'put ''LDI0OTM2LDI0ODE3LDI0ODQ2LDI0ODIyLDI0ODQxLDI0ODMyLDI0ODUwLDI1MTE5LDI1MTYxLDI1NTA3LDI1NDg0LDI1NTUxLDI1NTM2LDI1NTc3LDI1NTQ1LDI1NTQyLDI1NTQ5LDI1NTU0LDI1NTcxLDI1NTUyLDI1NTY5LDI1NTU4LDI1NTgxLDI1NTgyLDI1NDYyLDI1NTg4LDI1NTc4LDI1''@;'; put 'put ''NTYzLDI1NjgyLDI1NTYyLDI1NTkzLDI1OTUwLDI1OTU4LDI1OTU0LDI1OTU1LDI2MDAxLDI2ZTMsMjYwMzEsMjYyMjIsMjYyMjQsMjYyMjgsMjYyMzAsMjYyMjMsMjYyNTcsMjYyMzQsMjYyMzgsMjYyMzEsMjYzNjYsMjYzNjcsMjYzOTksMjYzOTcsMjY4NzQsMjY4MzcsMjY4NDgsMjY4NDAs''@;'; put 'put ''MjY4MzksMjY4ODUsMjY4NDcsMjY4NjksMjY4NjIsMjY4NTUsMjY4NzMsMjY4MzQsMjY4NjYsMjY4NTEsMjY4MjcsMjY4MjksMjY4OTMsMjY4OTgsMjY4OTQsMjY4MjUsMjY4NDIsMjY5OTAsMjY4NzUsMjc0NTQsMjc0NTAsMjc0NTMsMjc1NDQsMjc1NDIsMjc1ODAsMjc2MzEsMjc2OTQsMjc2''@;'; put 'put ''OTUsMjc2OTIsMjgyMDcsMjgyMTYsMjgyNDQsMjgxOTMsMjgyMTAsMjgyNjMsMjgyMzQsMjgxOTIsMjgxOTcsMjgxOTUsMjgxODcsMjgyNTEsMjgyNDgsMjgxOTYsMjgyNDYsMjgyNzAsMjgyMDUsMjgxOTgsMjgyNzEsMjgyMTIsMjgyMzcsMjgyMTgsMjgyMDQsMjgyMjcsMjgxODksMjgyMjIs''@;'; put 'put ''MjgzNjMsMjgyOTcsMjgxODUsMjgyMzgsMjgyNTksMjgyMjgsMjgyNzQsMjgyNjUsMjgyNTUsMjg5NTMsMjg5NTQsMjg5NjYsMjg5NzYsMjg5NjEsMjg5ODIsMjkwMzgsMjg5NTYsMjkyNjAsMjkzMTYsMjkzMTIsMjk0OTQsMjk0NzcsMjk0OTIsMjk0ODEsMjk3NTQsMjk3MzgsMjk3NDcsMjk3''@;'; put 'put ''MzAsMjk3MzMsMjk3NDksMjk3NTAsMjk3NDgsMjk3NDMsMjk3MjMsMjk3MzQsMjk3MzYsMjk5ODksMjk5OTAsMzAwNTksMzAwNTgsMzAxNzgsMzAxNzEsMzAxNzksMzAxNjksMzAxNjgsMzAxNzQsMzAxNzYsMzAzMzEsMzAzMzIsMzAzNTgsMzAzNTUsMzAzODgsMzA0MjgsMzA1NDMsMzA3MDEs''@;'; put 'put ''MzA4MTMsMzA4MjgsMzA4MzEsMzEyNDUsMzEyNDAsMzEyNDMsMzEyMzcsMzEyMzIsMzEzODQsMzEzODMsMzEzODIsMzE0NjEsMzE0NTksMzE1NjEsMzE1NzQsMzE1NTgsMzE1NjgsMzE1NzAsMzE1NzIsMzE1NjUsMzE1NjMsMzE1NjcsMzE1NjksMzE5MDMsMzE5MDksMzIwOTQsMzIwODAsMzIx''@;'; put 'put ''MDQsMzIwODUsMzIwNDMsMzIxMTAsMzIxMTQsMzIwOTcsMzIxMDIsMzIwOTgsMzIxMTIsMzIxMTUsMjE4OTIsMzI3MjQsMzI3MjUsMzI3NzksMzI4NTAsMzI5MDEsMzMxMDksMzMxMDgsMzMwOTksMzMxMDUsMzMxMDIsMzMwODEsMzMwOTQsMzMwODYsMzMxMDAsMzMxMDcsMzMxNDAsMzMyOTgs''@;'; put 'put ''MzMzMDgsMzM3NjksMzM3OTUsMzM3ODQsMzM4MDUsMzM3NjAsMzM3MzMsMzM4MDMsMzM3MjksMzM3NzUsMzM3NzcsMzM3ODAsMzM4NzksMzM4MDIsMzM3NzYsMzM4MDQsMzM3NDAsMzM3ODksMzM3NzgsMzM3MzgsMzM4NDgsMzM4MDYsMzM3OTYsMzM3NTYsMzM3OTksMzM3NDgsMzM3NTksMzQz''@;'; put 'put ''OTUsMzQ1MjcsMzQ1MjEsMzQ1NDEsMzQ1MTYsMzQ1MjMsMzQ1MzIsMzQ1MTIsMzQ1MjYsMzQ5MDMsMzUwMDksMzUwMTAsMzQ5OTMsMzUyMDMsMzUyMjIsMzUzODcsMzU0MjQsMzU0MTMsMzU0MjIsMzUzODgsMzUzOTMsMzU0MTIsMzU0MTksMzU0MDgsMzUzOTgsMzUzODAsMzUzODYsMzUzODIs''@;'; put 'put ''MzU0MTQsMzU5MzcsMzU5NzAsMzYwMTUsMzYwMjgsMzYwMTksMzYwMjksMzYwMzMsMzYwMjcsMzYwMzIsMzYwMjAsMzYwMjMsMzYwMjIsMzYwMzEsMzYwMjQsMzYyMzQsMzYyMjksMzYyMjUsMzYzMDIsMzYzMTcsMzYyOTksMzYzMTQsMzYzMDUsMzYzMDAsMzYzMTUsMzYyOTQsMzY2MDMsMzY2''@;'; put 'put ''MDAsMzY2MDQsMzY3NjQsMzY5MTAsMzY5MTcsMzY5MTMsMzY5MjAsMzY5MTQsMzY5MTgsMzcxMjIsMzcxMDksMzcxMjksMzcxMTgsMzcyMTksMzcyMjEsMzczMjcsMzczOTYsMzczOTcsMzc0MTEsMzczODUsMzc0MDYsMzczODksMzczOTIsMzczODMsMzczOTMsMzgyOTIsMzgyODcsMzgyODMs''@;'; put 'put ''MzgyODksMzgyOTEsMzgyOTAsMzgyODYsMzg1MzgsMzg1NDIsMzg1MzksMzg1MjUsMzg1MzMsMzg1MzQsMzg1NDEsMzg1MTQsMzg1MzIsMzg1OTMsMzg1OTcsMzg1OTYsMzg1OTgsMzg1OTksMzg2MzksMzg2NDIsMzg4NjAsMzg5MTcsMzg5MTgsMzg5MjAsMzkxNDMsMzkxNDYsMzkxNTEsMzkx''@;'; put 'put ''NDUsMzkxNTQsMzkxNDksMzkzNDIsMzkzNDEsNDA2NDMsNDA2NTMsNDA2NTcsMjAwOTgsMjA2NTMsMjA2NjEsMjA2NTgsMjA2NTksMjA2NzcsMjA2NzAsMjA2NTIsMjA2NjMsMjA2NjcsMjA2NTUsMjA2NzksMjExMTksMjExMTEsMjExMTcsMjEyMTUsMjEyMjIsMjEyMjAsMjEyMTgsMjEyMTks''@;'; put 'put ''MjEyOTUsMjE5ODMsMjE5OTIsMjE5NzEsMjE5OTAsMjE5NjYsMjE5ODAsMjE5NTksMjE5NjksMjE5ODcsMjE5ODgsMjE5OTksMjE5NzgsMjE5ODUsMjE5NTcsMjE5NTgsMjE5ODksMjE5NjEsMjIyOTAsMjIyOTEsMjI2MjIsMjI2MDksMjI2MTYsMjI2MTUsMjI2MTgsMjI2MTIsMjI2MzUsMjI2''@;'; put 'put ''MDQsMjI2MzcsMjI2MDIsMjI2MjYsMjI2MTAsMjI2MDMsMjI4ODcsMjMyMzMsMjMyNDEsMjMyNDQsMjMyMzAsMjMyMjksMjMyMjgsMjMyMTksMjMyMzQsMjMyMTgsMjM5MTMsMjM5MTksMjQxNDAsMjQxODUsMjQyNjUsMjQyNjQsMjQzMzgsMjQ0MDksMjQ0OTIsMjQ0OTQsMjQ4NTgsMjQ4NDcs''@;'; put 'put ''MjQ5MDQsMjQ4NjMsMjQ4MTksMjQ4NTksMjQ4MjUsMjQ4MzMsMjQ4NDAsMjQ5MTAsMjQ5MDgsMjQ5MDAsMjQ5MDksMjQ4OTQsMjQ4ODQsMjQ4NzEsMjQ4NDUsMjQ4MzgsMjQ4ODcsMjUxMjEsMjUxMjIsMjU2MTksMjU2NjIsMjU2MzAsMjU2NDIsMjU2NDUsMjU2NjEsMjU2NDQsMjU2MTUsMjU2''@;'; put 'put ''MjgsMjU2MjAsMjU2MTMsMjU2NTQsMjU2MjIsMjU2MjMsMjU2MDYsMjU5NjQsMjYwMTUsMjYwMzIsMjYyNjMsMjYyNDksMjYyNDcsMjYyNDgsMjYyNjIsMjYyNDQsMjYyNjQsMjYyNTMsMjYzNzEsMjcwMjgsMjY5ODksMjY5NzAsMjY5OTksMjY5NzYsMjY5NjQsMjY5OTcsMjY5MjgsMjcwMTAs''@;'; put 'put ''MjY5NTQsMjY5ODQsMjY5ODcsMjY5NzQsMjY5NjMsMjcwMDEsMjcwMTQsMjY5NzMsMjY5NzksMjY5NzEsMjc0NjMsMjc1MDYsMjc1ODQsMjc1ODMsMjc2MDMsMjc2NDUsMjgzMjIsMjgzMzUsMjgzNzEsMjgzNDIsMjgzNTQsMjgzMDQsMjgzMTcsMjgzNTksMjgzNTcsMjgzMjUsMjgzMTIsMjgz''@;'; put 'put ''NDgsMjgzNDYsMjgzMzEsMjgzNjksMjgzMTAsMjgzMTYsMjgzNTYsMjgzNzIsMjgzMzAsMjgzMjcsMjgzNDAsMjkwMDYsMjkwMTcsMjkwMzMsMjkwMjgsMjkwMDEsMjkwMzEsMjkwMjAsMjkwMzYsMjkwMzAsMjkwMDQsMjkwMjksMjkwMjIsMjg5OTgsMjkwMzIsMjkwMTQsMjkyNDIsMjkyNjYs''@;'; put 'put ''Mjk0OTUsMjk1MDksMjk1MDMsMjk1MDIsMjk4MDcsMjk3ODYsMjk3ODEsMjk3OTEsMjk3OTAsMjk3NjEsMjk3NTksMjk3ODUsMjk3ODcsMjk3ODgsMzAwNzAsMzAwNzIsMzAyMDgsMzAxOTIsMzAyMDksMzAxOTQsMzAxOTMsMzAyMDIsMzAyMDcsMzAxOTYsMzAxOTUsMzA0MzAsMzA0MzEsMzA1''@;'; put 'put ''NTUsMzA1NzEsMzA1NjYsMzA1NTgsMzA1NjMsMzA1ODUsMzA1NzAsMzA1NzIsMzA1NTYsMzA1NjUsMzA1NjgsMzA1NjIsMzA3MDIsMzA4NjIsMzA4OTYsMzA4NzEsMzA4NzIsMzA4NjAsMzA4NTcsMzA4NDQsMzA4NjUsMzA4NjcsMzA4NDcsMzEwOTgsMzExMDMsMzExMDUsMzM4MzYsMzExNjUs''@;'; put 'put ''MzEyNjAsMzEyNTgsMzEyNjQsMzEyNTIsMzEyNjMsMzEyNjIsMzEzOTEsMzEzOTIsMzE2MDcsMzE2ODAsMzE1ODQsMzE1OTgsMzE1OTEsMzE5MjEsMzE5MjMsMzE5MjUsMzIxNDcsMzIxMjEsMzIxNDUsMzIxMjksMzIxNDMsMzIwOTEsMzI2MjIsMzI2MTcsMzI2MTgsMzI2MjYsMzI2ODEsMzI2''@;'; put 'put ''ODAsMzI2NzYsMzI4NTQsMzI4NTYsMzI5MDIsMzI5MDAsMzMxMzcsMzMxMzYsMzMxNDQsMzMxMjUsMzMxMzQsMzMxMzksMzMxMzEsMzMxNDUsMzMxNDYsMzMxMjYsMzMyODUsMzMzNTEsMzM5MjIsMzM5MTEsMzM4NTMsMzM4NDEsMzM5MDksMzM4OTQsMzM4OTksMzM4NjUsMzM5MDAsMzM4ODMs''@;'; put 'put ''MzM4NTIsMzM4NDUsMzM4ODksMzM4OTEsMzM4OTcsMzM5MDEsMzM4NjIsMzQzOTgsMzQzOTYsMzQzOTksMzQ1NTMsMzQ1NzksMzQ1NjgsMzQ1NjcsMzQ1NjAsMzQ1NTgsMzQ1NTUsMzQ1NjIsMzQ1NjMsMzQ1NjYsMzQ1NzAsMzQ5MDUsMzUwMzksMzUwMjgsMzUwMzMsMzUwMzYsMzUwMzIsMzUw''@;'; put 'put ''MzcsMzUwNDEsMzUwMTgsMzUwMjksMzUwMjYsMzUyMjgsMzUyOTksMzU0MzUsMzU0NDIsMzU0NDMsMzU0MzAsMzU0MzMsMzU0NDAsMzU0NjMsMzU0NTIsMzU0MjcsMzU0ODgsMzU0NDEsMzU0NjEsMzU0MzcsMzU0MjYsMzU0MzgsMzU0MzYsMzU0NDksMzU0NTEsMzUzOTAsMzU0MzIsMzU5Mzgs''@;'; put 'put ''MzU5NzgsMzU5NzcsMzYwNDIsMzYwMzksMzYwNDAsMzYwMzYsMzYwMTgsMzYwMzUsMzYwMzQsMzYwMzcsMzYzMjEsMzYzMTksMzYzMjgsMzYzMzUsMzYzMzksMzYzNDYsMzYzMzAsMzYzMjQsMzYzMjYsMzY1MzAsMzY2MTEsMzY2MTcsMzY2MDYsMzY2MTgsMzY3NjcsMzY3ODYsMzY5MzksMzY5''@;'; put 'put ''MzgsMzY5NDcsMzY5MzAsMzY5NDgsMzY5MjQsMzY5NDksMzY5NDQsMzY5MzUsMzY5NDMsMzY5NDIsMzY5NDEsMzY5NDUsMzY5MjYsMzY5MjksMzcxMzgsMzcxNDMsMzcyMjgsMzcyMjYsMzcyMjUsMzczMjEsMzc0MzEsMzc0NjMsMzc0MzIsMzc0MzcsMzc0NDAsMzc0MzgsMzc0NjcsMzc0NTEs''@;'; put 'put ''Mzc0NzYsMzc0NTcsMzc0MjgsMzc0NDksMzc0NTMsMzc0NDUsMzc0MzMsMzc0MzksMzc0NjYsMzgyOTYsMzg1NTIsMzg1NDgsMzg1NDksMzg2MDUsMzg2MDMsMzg2MDEsMzg2MDIsMzg2NDcsMzg2NTEsMzg2NDksMzg2NDYsMzg3NDIsMzg3NzIsMzg3NzQsMzg5MjgsMzg5MjksMzg5MzEsMzg5''@;'; put 'put ''MjIsMzg5MzAsMzg5MjQsMzkxNjQsMzkxNTYsMzkxNjUsMzkxNjYsMzkzNDcsMzkzNDUsMzkzNDgsMzk2NDksNDAxNjksNDA1NzgsNDA3MTgsNDA3MjMsNDA3MzYsMjA3MTEsMjA3MTgsMjA3MDksMjA2OTQsMjA3MTcsMjA2OTgsMjA2OTMsMjA2ODcsMjA2ODksMjA3MjEsMjA2ODYsMjA3MTMs''@;'; put 'put ''MjA4MzQsMjA5NzksMjExMjMsMjExMjIsMjEyOTcsMjE0MjEsMjIwMTQsMjIwMTYsMjIwNDMsMjIwMzksMjIwMTMsMjIwMzYsMjIwMjIsMjIwMjUsMjIwMjksMjIwMzAsMjIwMDcsMjIwMzgsMjIwNDcsMjIwMjQsMjIwMzIsMjIwMDYsMjIyOTYsMjIyOTQsMjI2NDUsMjI2NTQsMjI2NTksMjI2''@;'; put 'put ''NzUsMjI2NjYsMjI2NDksMjI2NjEsMjI2NTMsMjI3ODEsMjI4MjEsMjI4MTgsMjI4MjAsMjI4OTAsMjI4ODksMjMyNjUsMjMyNzAsMjMyNzMsMjMyNTUsMjMyNTQsMjMyNTYsMjMyNjcsMjM0MTMsMjM1MTgsMjM1MjcsMjM1MjEsMjM1MjUsMjM1MjYsMjM1MjgsMjM1MjIsMjM1MjQsMjM1MTks''@;'; put 'put ''MjM1NjUsMjM2NTAsMjM5NDAsMjM5NDMsMjQxNTUsMjQxNjMsMjQxNDksMjQxNTEsMjQxNDgsMjQyNzUsMjQyNzgsMjQzMzAsMjQzOTAsMjQ0MzIsMjQ1MDUsMjQ5MDMsMjQ4OTUsMjQ5MDcsMjQ5NTEsMjQ5MzAsMjQ5MzEsMjQ5MjcsMjQ5MjIsMjQ5MjAsMjQ5NDksMjUxMzAsMjU3MzUsMjU2''@;'; put 'put ''ODgsMjU2ODQsMjU3NjQsMjU3MjAsMjU2OTUsMjU3MjIsMjU2ODEsMjU3MDMsMjU2NTIsMjU3MDksMjU3MjMsMjU5NzAsMjYwMTcsMjYwNzEsMjYwNzAsMjYyNzQsMjYyODAsMjYyNjksMjcwMzYsMjcwNDgsMjcwMjksMjcwNzMsMjcwNTQsMjcwOTEsMjcwODMsMjcwMzUsMjcwNjMsMjcwNjcs''@;'; put 'put ''MjcwNTEsMjcwNjAsMjcwODgsMjcwODUsMjcwNTMsMjcwODQsMjcwNDYsMjcwNzUsMjcwNDMsMjc0NjUsMjc0NjgsMjc2OTksMjg0NjcsMjg0MzYsMjg0MTQsMjg0MzUsMjg0MDQsMjg0NTcsMjg0NzgsMjg0NDgsMjg0NjAsMjg0MzEsMjg0MTgsMjg0NTAsMjg0MTUsMjgzOTksMjg0MjIsMjg0''@;'; put 'put ''NjUsMjg0NzIsMjg0NjYsMjg0NTEsMjg0MzcsMjg0NTksMjg0NjMsMjg1NTIsMjg0NTgsMjgzOTYsMjg0MTcsMjg0MDIsMjgzNjQsMjg0MDcsMjkwNzYsMjkwODEsMjkwNTMsMjkwNjYsMjkwNjAsMjkwNzQsMjkyNDYsMjkzMzAsMjkzMzQsMjk1MDgsMjk1MjAsMjk3OTYsMjk3OTUsMjk4MDIs''@;'; put 'put ''Mjk4MDgsMjk4MDUsMjk5NTYsMzAwOTcsMzAyNDcsMzAyMjEsMzAyMTksMzAyMTcsMzAyMjcsMzA0MzMsMzA0MzUsMzA1OTYsMzA1ODksMzA1OTEsMzA1NjEsMzA5MTMsMzA4NzksMzA4ODcsMzA4OTksMzA4ODksMzA4ODMsMzExMTgsMzExMTksMzExMTcsMzEyNzgsMzEyODEsMzE0MDIsMzE0''@;'; put 'put ''MDEsMzE0NjksMzE0NzEsMzE2NDksMzE2MzcsMzE2MjcsMzE2MDUsMzE2MzksMzE2NDUsMzE2MzYsMzE2MzEsMzE2NzIsMzE2MjMsMzE2MjAsMzE5MjksMzE5MzMsMzE5MzQsMzIxODcsMzIxNzYsMzIxNTYsMzIxODksMzIxOTAsMzIxNjAsMzIyMDIsMzIxODAsMzIxNzgsMzIxNzcsMzIxODYs''@;'; put 'put ''MzIxNjIsMzIxOTEsMzIxODEsMzIxODQsMzIxNzMsMzIyMTAsMzIxOTksMzIxNzIsMzI2MjQsMzI3MzYsMzI3MzcsMzI3MzUsMzI4NjIsMzI4NTgsMzI5MDMsMzMxMDQsMzMxNTIsMzMxNjcsMzMxNjAsMzMxNjIsMzMxNTEsMzMxNTQsMzMyNTUsMzMyNzQsMzMyODcsMzMzMDAsMzMzMTAsMzMz''@;'; put 'put ''NTUsMzM5OTMsMzM5ODMsMzM5OTAsMzM5ODgsMzM5NDUsMzM5NTAsMzM5NzAsMzM5NDgsMzM5OTUsMzM5NzYsMzM5ODQsMzQwMDMsMzM5MzYsMzM5ODAsMzQwMDEsMzM5OTQsMzQ2MjMsMzQ1ODgsMzQ2MTksMzQ1OTQsMzQ1OTcsMzQ2MTIsMzQ1ODQsMzQ2NDUsMzQ2MTUsMzQ2MDEsMzUwNTks''@;'; put 'put ''MzUwNzQsMzUwNjAsMzUwNjUsMzUwNjQsMzUwNjksMzUwNDgsMzUwOTgsMzUwNTUsMzU0OTQsMzU0NjgsMzU0ODYsMzU0OTEsMzU0NjksMzU0ODksMzU0NzUsMzU0OTIsMzU0OTgsMzU0OTMsMzU0OTYsMzU0ODAsMzU0NzMsMzU0ODIsMzU0OTUsMzU5NDYsMzU5ODEsMzU5ODAsMzYwNTEsMzYw''@;'; put 'put ''NDksMzYwNTAsMzYyMDMsMzYyNDksMzYyNDUsMzYzNDgsMzY2MjgsMzY2MjYsMzY2MjksMzY2MjcsMzY3NzEsMzY5NjAsMzY5NTIsMzY5NTYsMzY5NjMsMzY5NTMsMzY5NTgsMzY5NjIsMzY5NTcsMzY5NTUsMzcxNDUsMzcxNDQsMzcxNTAsMzcyMzcsMzcyNDAsMzcyMzksMzcyMzYsMzc0OTYs''@;'; put 'put ''Mzc1MDQsMzc1MDksMzc1MjgsMzc1MjYsMzc0OTksMzc1MjMsMzc1MzIsMzc1NDQsMzc1MDAsMzc1MjEsMzgzMDUsMzgzMTIsMzgzMTMsMzgzMDcsMzgzMDksMzgzMDgsMzg1NTMsMzg1NTYsMzg1NTUsMzg2MDQsMzg2MTAsMzg2NTYsMzg3ODAsMzg3ODksMzg5MDIsMzg5MzUsMzg5MzYsMzkw''@;'; put 'put ''ODcsMzkwODksMzkxNzEsMzkxNzMsMzkxODAsMzkxNzcsMzkzNjEsMzk1OTksMzk2MDAsMzk2NTQsMzk3NDUsMzk3NDYsNDAxODAsNDAxODIsNDAxNzksNDA2MzYsNDA3NjMsNDA3NzgsMjA3NDAsMjA3MzYsMjA3MzEsMjA3MjUsMjA3MjksMjA3MzgsMjA3NDQsMjA3NDUsMjA3NDEsMjA5NTYs''@;'; put 'put ''MjExMjcsMjExMjgsMjExMjksMjExMzMsMjExMzAsMjEyMzIsMjE0MjYsMjIwNjIsMjIwNzUsMjIwNzMsMjIwNjYsMjIwNzksMjIwNjgsMjIwNTcsMjIwOTksMjIwOTQsMjIxMDMsMjIxMzIsMjIwNzAsMjIwNjMsMjIwNjQsMjI2NTYsMjI2ODcsMjI2ODYsMjI3MDcsMjI2ODQsMjI3MDIsMjI2''@;'; put 'put ''OTcsMjI2OTQsMjI4OTMsMjMzMDUsMjMyOTEsMjMzMDcsMjMyODUsMjMzMDgsMjMzMDQsMjM1MzQsMjM1MzIsMjM1MjksMjM1MzEsMjM2NTIsMjM2NTMsMjM5NjUsMjM5NTYsMjQxNjIsMjQxNTksMjQxNjEsMjQyOTAsMjQyODIsMjQyODcsMjQyODUsMjQyOTEsMjQyODgsMjQzOTIsMjQ0MzMs''@;'; put 'put ''MjQ1MDMsMjQ1MDEsMjQ5NTAsMjQ5MzUsMjQ5NDIsMjQ5MjUsMjQ5MTcsMjQ5NjIsMjQ5NTYsMjQ5NDQsMjQ5MzksMjQ5NTgsMjQ5OTksMjQ5NzYsMjUwMDMsMjQ5NzQsMjUwMDQsMjQ5ODYsMjQ5OTYsMjQ5ODAsMjUwMDYsMjUxMzQsMjU3MDUsMjU3MTEsMjU3MjEsMjU3NTgsMjU3NzgsMjU3''@;'; put 'put ''MzYsMjU3NDQsMjU3NzYsMjU3NjUsMjU3NDcsMjU3NDksMjU3NjksMjU3NDYsMjU3NzQsMjU3NzMsMjU3NzEsMjU3NTQsMjU3NzIsMjU3NTMsMjU3NjIsMjU3NzksMjU5NzMsMjU5NzUsMjU5NzYsMjYyODYsMjYyODMsMjYyOTIsMjYyODksMjcxNzEsMjcxNjcsMjcxMTIsMjcxMzcsMjcxNjYs''@;'; put 'put ''MjcxNjEsMjcxMzMsMjcxNjksMjcxNTUsMjcxNDYsMjcxMjMsMjcxMzgsMjcxNDEsMjcxMTcsMjcxNTMsMjc0NzIsMjc0NzAsMjc1NTYsMjc1ODksMjc1OTAsMjg0NzksMjg1NDAsMjg1NDgsMjg0OTcsMjg1MTgsMjg1MDAsMjg1NTAsMjg1MjUsMjg1MDcsMjg1MzYsMjg1MjYsMjg1NTgsMjg1''@;'; put 'put ''MzgsMjg1MjgsMjg1MTYsMjg1NjcsMjg1MDQsMjgzNzMsMjg1MjcsMjg1MTIsMjg1MTEsMjkwODcsMjkxMDAsMjkxMDUsMjkwOTYsMjkyNzAsMjkzMzksMjk1MTgsMjk1MjcsMjk4MDEsMjk4MzUsMjk4MjcsMjk4MjIsMjk4MjQsMzAwNzksMzAyNDAsMzAyNDksMzAyMzksMzAyNDQsMzAyNDYs''@;'; put 'put ''MzAyNDEsMzAyNDIsMzAzNjIsMzAzOTQsMzA0MzYsMzA2MDYsMzA1OTksMzA2MDQsMzA2MDksMzA2MDMsMzA5MjMsMzA5MTcsMzA5MDYsMzA5MjIsMzA5MTAsMzA5MzMsMzA5MDgsMzA5MjgsMzEyOTUsMzEyOTIsMzEyOTYsMzEyOTMsMzEyODcsMzEyOTEsMzE0MDcsMzE0MDYsMzE2NjEsMzE2''@;'; put 'put ''NjUsMzE2ODQsMzE2NjgsMzE2ODYsMzE2ODcsMzE2ODEsMzE2NDgsMzE2OTIsMzE5NDYsMzIyMjQsMzIyNDQsMzIyMzksMzIyNTEsMzIyMTYsMzIyMzYsMzIyMjEsMzIyMzIsMzIyMjcsMzIyMTgsMzIyMjIsMzIyMzMsMzIxNTgsMzIyMTcsMzIyNDIsMzIyNDksMzI2MjksMzI2MzEsMzI2ODcs''@;'; put 'put ''MzI3NDUsMzI4MDYsMzMxNzksMzMxODAsMzMxODEsMzMxODQsMzMxNzgsMzMxNzYsMzQwNzEsMzQxMDksMzQwNzQsMzQwMzAsMzQwOTIsMzQwOTMsMzQwNjcsMzQwNjUsMzQwODMsMzQwODEsMzQwNjgsMzQwMjgsMzQwODUsMzQwNDcsMzQwNTQsMzQ2OTAsMzQ2NzYsMzQ2NzgsMzQ2NTYsMzQ2''@;'; put 'put ''NjIsMzQ2ODAsMzQ2NjQsMzQ2NDksMzQ2NDcsMzQ2MzYsMzQ2NDMsMzQ5MDcsMzQ5MDksMzUwODgsMzUwNzksMzUwOTAsMzUwOTEsMzUwOTMsMzUwODIsMzU1MTYsMzU1MzgsMzU1MjcsMzU1MjQsMzU0NzcsMzU1MzEsMzU1NzYsMzU1MDYsMzU1MjksMzU1MjIsMzU1MTksMzU1MDQsMzU1NDIs''@;'; put 'put ''MzU1MzMsMzU1MTAsMzU1MTMsMzU1NDcsMzU5MTYsMzU5MTgsMzU5NDgsMzYwNjQsMzYwNjIsMzYwNzAsMzYwNjgsMzYwNzYsMzYwNzcsMzYwNjYsMzYwNjcsMzYwNjAsMzYwNzQsMzYwNjUsMzYyMDUsMzYyNTUsMzYyNTksMzYzOTUsMzYzNjgsMzYzODEsMzYzODYsMzYzNjcsMzYzOTMsMzYz''@;'; put 'put ''ODMsMzYzODUsMzYzODIsMzY1MzgsMzY2MzcsMzY2MzUsMzY2MzksMzY2NDksMzY2NDYsMzY2NTAsMzY2MzYsMzY2MzgsMzY2NDUsMzY5NjksMzY5NzQsMzY5NjgsMzY5NzMsMzY5ODMsMzcxNjgsMzcxNjUsMzcxNTksMzcxNjksMzcyNTUsMzcyNTcsMzcyNTksMzcyNTEsMzc1NzMsMzc1NjMs''@;'; put 'put ''Mzc1NTksMzc2MTAsMzc1NDgsMzc2MDQsMzc1NjksMzc1NTUsMzc1NjQsMzc1ODYsMzc1NzUsMzc2MTYsMzc1NTQsMzgzMTcsMzgzMjEsMzg2NjAsMzg2NjIsMzg2NjMsMzg2NjUsMzg3NTIsMzg3OTcsMzg3OTUsMzg3OTksMzg5NDUsMzg5NTUsMzg5NDAsMzkwOTEsMzkxNzgsMzkxODcsMzkx''@;'; put 'put ''ODYsMzkxOTIsMzkzODksMzkzNzYsMzkzOTEsMzkzODcsMzkzNzcsMzkzODEsMzkzNzgsMzkzODUsMzk2MDcsMzk2NjIsMzk2NjMsMzk3MTksMzk3NDksMzk3NDgsMzk3OTksMzk3OTEsNDAxOTgsNDAyMDEsNDAxOTUsNDA2MTcsNDA2MzgsNDA2NTQsMjI2OTYsNDA3ODYsMjA3NTQsMjA3NjAs''@;'; put 'put ''MjA3NTYsMjA3NTIsMjA3NTcsMjA4NjQsMjA5MDYsMjA5NTcsMjExMzcsMjExMzksMjEyMzUsMjIxMDUsMjIxMjMsMjIxMzcsMjIxMjEsMjIxMTYsMjIxMzYsMjIxMjIsMjIxMjAsMjIxMTcsMjIxMjksMjIxMjcsMjIxMjQsMjIxMTQsMjIxMzQsMjI3MjEsMjI3MTgsMjI3MjcsMjI3MjUsMjI4''@;'; put 'put ''OTQsMjMzMjUsMjMzNDgsMjM0MTYsMjM1MzYsMjM1NjYsMjQzOTQsMjUwMTAsMjQ5NzcsMjUwMDEsMjQ5NzAsMjUwMzcsMjUwMTQsMjUwMjIsMjUwMzQsMjUwMzIsMjUxMzYsMjU3OTcsMjU3OTMsMjU4MDMsMjU3ODcsMjU3ODgsMjU4MTgsMjU3OTYsMjU3OTksMjU3OTQsMjU4MDUsMjU3OTEs''@;'; put 'put ''MjU4MTAsMjU4MTIsMjU3OTAsMjU5NzIsMjYzMTAsMjYzMTMsMjYyOTcsMjYzMDgsMjYzMTEsMjYyOTYsMjcxOTcsMjcxOTIsMjcxOTQsMjcyMjUsMjcyNDMsMjcyMjQsMjcxOTMsMjcyMDQsMjcyMzQsMjcyMzMsMjcyMTEsMjcyMDcsMjcxODksMjcyMzEsMjcyMDgsMjc0ODEsMjc1MTEsMjc2''@;'; put 'put ''NTMsMjg2MTAsMjg1OTMsMjg1NzcsMjg2MTEsMjg1ODAsMjg2MDksMjg1ODMsMjg1OTUsMjg2MDgsMjg2MDEsMjg1OTgsMjg1ODIsMjg1NzYsMjg1OTYsMjkxMTgsMjkxMjksMjkxMzYsMjkxMzgsMjkxMjgsMjkxNDEsMjkxMTMsMjkxMzQsMjkxNDUsMjkxNDgsMjkxMjMsMjkxMjQsMjk1NDQs''@;'; put 'put ''Mjk4NTIsMjk4NTksMjk4NDgsMjk4NTUsMjk4NTQsMjk5MjIsMjk5NjQsMjk5NjUsMzAyNjAsMzAyNjQsMzAyNjYsMzA0MzksMzA0MzcsMzA2MjQsMzA2MjIsMzA2MjMsMzA2MjksMzA5NTIsMzA5MzgsMzA5NTYsMzA5NTEsMzExNDIsMzEzMDksMzEzMTAsMzEzMDIsMzEzMDgsMzEzMDcsMzE0''@;'; put 'put ''MTgsMzE3MDUsMzE3NjEsMzE2ODksMzE3MTYsMzE3MDcsMzE3MTMsMzE3MjEsMzE3MTgsMzE5NTcsMzE5NTgsMzIyNjYsMzIyNzMsMzIyNjQsMzIyODMsMzIyOTEsMzIyODYsMzIyODUsMzIyNjUsMzIyNzIsMzI2MzMsMzI2OTAsMzI3NTIsMzI3NTMsMzI3NTAsMzI4MDgsMzMyMDMsMzMxOTMs''@;'; put 'put ''MzMxOTIsMzMyNzUsMzMyODgsMzMzNjgsMzMzNjksMzQxMjIsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNTMsMzQxMTUsMzQxMjEsMzQxNTcsMzQxNTQsMzQxNDIsMzQ2OTEsMzQ3MTksMzQ3MTgsMzQ3MjIsMzQ3MDEsMzQ5MTMsMzUxMTQsMzUxMjIsMzUxMDksMzUxMTUsMzUxMDUsMzUyNDIsMzUy''@;'; put 'put ''MzgsMzU1NTgsMzU1NzgsMzU1NjMsMzU1NjksMzU1ODQsMzU1NDgsMzU1NTksMzU1NjYsMzU1ODIsMzU1ODUsMzU1ODYsMzU1NzUsMzU1NjUsMzU1NzEsMzU1NzQsMzU1ODAsMzU5NDcsMzU5NDksMzU5ODcsMzYwODQsMzY0MjAsMzY0MDEsMzY0MDQsMzY0MTgsMzY0MDksMzY0MDUsMzY2Njcs''@;'; put 'put ''MzY2NTUsMzY2NjQsMzY2NTksMzY3NzYsMzY3NzQsMzY5ODEsMzY5ODAsMzY5ODQsMzY5NzgsMzY5ODgsMzY5ODYsMzcxNzIsMzcyNjYsMzc2NjQsMzc2ODYsMzc2MjQsMzc2ODMsMzc2NzksMzc2NjYsMzc2MjgsMzc2NzUsMzc2MzYsMzc2NTgsMzc2NDgsMzc2NzAsMzc2NjUsMzc2NTMsMzc2''@;'; put 'put ''NzgsMzc2NTcsMzgzMzEsMzg1NjcsMzg1NjgsMzg1NzAsMzg2MTMsMzg2NzAsMzg2NzMsMzg2NzgsMzg2NjksMzg2NzUsMzg2NzEsMzg3NDcsMzg3NDgsMzg3NTgsMzg4MDgsMzg5NjAsMzg5NjgsMzg5NzEsMzg5NjcsMzg5NTcsMzg5NjksMzg5NDgsMzkxODQsMzkyMDgsMzkxOTgsMzkxOTUs''@;'; put 'put ''MzkyMDEsMzkxOTQsMzk0MDUsMzkzOTQsMzk0MDksMzk2MDgsMzk2MTIsMzk2NzUsMzk2NjEsMzk3MjAsMzk4MjUsNDAyMTMsNDAyMjcsNDAyMzAsNDAyMzIsNDAyMTAsNDAyMTksNDA2NjQsNDA2NjAsNDA4NDUsNDA4NjAsMjA3NzgsMjA3NjcsMjA3NjksMjA3ODYsMjEyMzcsMjIxNTgsMjIx''@;'; put 'put ''NDQsMjIxNjAsMjIxNDksMjIxNTEsMjIxNTksMjI3NDEsMjI3MzksMjI3MzcsMjI3MzQsMjMzNDQsMjMzMzgsMjMzMzIsMjM0MTgsMjM2MDcsMjM2NTYsMjM5OTYsMjM5OTQsMjM5OTcsMjM5OTIsMjQxNzEsMjQzOTYsMjQ1MDksMjUwMzMsMjUwMjYsMjUwMzEsMjUwNjIsMjUwMzUsMjUxMzgs''@;'; put 'put ''MjUxNDAsMjU4MDYsMjU4MDIsMjU4MTYsMjU4MjQsMjU4NDAsMjU4MzAsMjU4MzYsMjU4NDEsMjU4MjYsMjU4MzcsMjU5ODYsMjU5ODcsMjYzMjksMjYzMjYsMjcyNjQsMjcyODQsMjcyNjgsMjcyOTgsMjcyOTIsMjczNTUsMjcyOTksMjcyNjIsMjcyODcsMjcyODAsMjcyOTYsMjc0ODQsMjc1''@;'; put 'put ''NjYsMjc2MTAsMjc2NTYsMjg2MzIsMjg2NTcsMjg2MzksMjg2NDAsMjg2MzUsMjg2NDQsMjg2NTEsMjg2NTUsMjg1NDQsMjg2NTIsMjg2NDEsMjg2NDksMjg2MjksMjg2NTQsMjg2NTYsMjkxNTksMjkxNTEsMjkxNjYsMjkxNTgsMjkxNTcsMjkxNjUsMjkxNjQsMjkxNzIsMjkxNTIsMjkyMzcs''@;'; put 'put ''MjkyNTQsMjk1NTIsMjk1NTQsMjk4NjUsMjk4NzIsMjk4NjIsMjk4NjQsMzAyNzgsMzAyNzQsMzAyODQsMzA0NDIsMzA2NDMsMzA2MzQsMzA2NDAsMzA2MzYsMzA2MzEsMzA2MzcsMzA3MDMsMzA5NjcsMzA5NzAsMzA5NjQsMzA5NTksMzA5NzcsMzExNDMsMzExNDYsMzEzMTksMzE0MjMsMzE3''@;'; put 'put ''NTEsMzE3NTcsMzE3NDIsMzE3MzUsMzE3NTYsMzE3MTIsMzE5NjgsMzE5NjQsMzE5NjYsMzE5NzAsMzE5NjcsMzE5NjEsMzE5NjUsMzIzMDIsMzIzMTgsMzIzMjYsMzIzMTEsMzIzMDYsMzIzMjMsMzIyOTksMzIzMTcsMzIzMDUsMzIzMjUsMzIzMjEsMzIzMDgsMzIzMTMsMzIzMjgsMzIzMDks''@;'; put 'put ''MzIzMTksMzIzMDMsMzI1ODAsMzI3NTUsMzI3NjQsMzI4ODEsMzI4ODIsMzI4ODAsMzI4NzksMzI4ODMsMzMyMjIsMzMyMTksMzMyMTAsMzMyMTgsMzMyMTYsMzMyMTUsMzMyMTMsMzMyMjUsMzMyMTQsMzMyNTYsMzMyODksMzMzOTMsMzQyMTgsMzQxODAsMzQxNzQsMzQyMDQsMzQxOTMsMzQx''@;'; put 'put ''OTYsMzQyMjMsMzQyMDMsMzQxODMsMzQyMTYsMzQxODYsMzQ0MDcsMzQ3NTIsMzQ3NjksMzQ3MzksMzQ3NzAsMzQ3NTgsMzQ3MzEsMzQ3NDcsMzQ3NDYsMzQ3NjAsMzQ3NjMsMzUxMzEsMzUxMjYsMzUxNDAsMzUxMjgsMzUxMzMsMzUyNDQsMzU1OTgsMzU2MDcsMzU2MDksMzU2MTEsMzU1OTQs''@;'; put 'put ''MzU2MTYsMzU2MTMsMzU1ODgsMzU2MDAsMzU5MDUsMzU5MDMsMzU5NTUsMzYwOTAsMzYwOTMsMzYwOTIsMzYwODgsMzYwOTEsMzYyNjQsMzY0MjUsMzY0MjcsMzY0MjQsMzY0MjYsMzY2NzYsMzY2NzAsMzY2NzQsMzY2NzcsMzY2NzEsMzY5OTEsMzY5ODksMzY5OTYsMzY5OTMsMzY5OTQsMzY5''@;'; put 'put ''OTIsMzcxNzcsMzcyODMsMzcyNzgsMzcyNzYsMzc3MDksMzc3NjIsMzc2NzIsMzc3NDksMzc3MDYsMzc3MzMsMzc3MDcsMzc2NTYsMzc3NTgsMzc3NDAsMzc3MjMsMzc3NDQsMzc3MjIsMzc3MTYsMzgzNDYsMzgzNDcsMzgzNDgsMzgzNDQsMzgzNDIsMzg1NzcsMzg1ODQsMzg2MTQsMzg2ODQs''@;'; put 'put ''Mzg2ODYsMzg4MTYsMzg4NjcsMzg5ODIsMzkwOTQsMzkyMjEsMzk0MjUsMzk0MjMsMzk4NTQsMzk4NTEsMzk4NTAsMzk4NTMsNDAyNTEsNDAyNTUsNDA1ODcsNDA2NTUsNDA2NzAsNDA2NjgsNDA2NjksNDA2NjcsNDA3NjYsNDA3NzksMjE0NzQsMjIxNjUsMjIxOTAsMjI3NDUsMjI3NDQsMjMz''@;'; put 'put ''NTIsMjQ0MTMsMjUwNTksMjUxMzksMjU4NDQsMjU4NDIsMjU4NTQsMjU4NjIsMjU4NTAsMjU4NTEsMjU4NDcsMjYwMzksMjYzMzIsMjY0MDYsMjczMTUsMjczMDgsMjczMzEsMjczMjMsMjczMjAsMjczMzAsMjczMTAsMjczMTEsMjc0ODcsMjc1MTIsMjc1NjcsMjg2ODEsMjg2ODMsMjg2NzAs''@;'; put 'put ''Mjg2NzgsMjg2NjYsMjg2ODksMjg2ODcsMjkxNzksMjkxODAsMjkxODIsMjkxNzYsMjk1NTksMjk1NTcsMjk4NjMsMjk4ODcsMjk5NzMsMzAyOTQsMzAyOTYsMzAyOTAsMzA2NTMsMzA2NTUsMzA2NTEsMzA2NTIsMzA5OTAsMzExNTAsMzEzMjksMzEzMzAsMzEzMjgsMzE0MjgsMzE0MjksMzE3''@;'; put 'put ''ODcsMzE3ODMsMzE3ODYsMzE3NzQsMzE3NzksMzE3NzcsMzE5NzUsMzIzNDAsMzIzNDEsMzIzNTAsMzIzNDYsMzIzNTMsMzIzMzgsMzIzNDUsMzI1ODQsMzI3NjEsMzI3NjMsMzI4ODcsMzI4ODYsMzMyMjksMzMyMzEsMzMyOTAsMzQyNTUsMzQyMTcsMzQyNTMsMzQyNTYsMzQyNDksMzQyMjQs''@;'; put 'put ''MzQyMzQsMzQyMzMsMzQyMTQsMzQ3OTksMzQ3OTYsMzQ4MDIsMzQ3ODQsMzUyMDYsMzUyNTAsMzUzMTYsMzU2MjQsMzU2NDEsMzU2MjgsMzU2MjcsMzU5MjAsMzYxMDEsMzY0NDEsMzY0NTEsMzY0NTQsMzY0NTIsMzY0NDcsMzY0MzcsMzY1NDQsMzY2ODEsMzY2ODUsMzY5OTksMzY5OTUsMzdl''@;'; put 'put ''MywzNzI5MSwzNzI5MiwzNzMyOCwzNzc4MCwzNzc3MCwzNzc4MiwzNzc5NCwzNzgxMSwzNzgwNiwzNzgwNCwzNzgwOCwzNzc4NCwzNzc4NiwzNzc4MywzODM1NiwzODM1OCwzODM1MiwzODM1NywzODYyNiwzODYyMCwzODYxNywzODYxOSwzODYyMiwzODY5MiwzODgxOSwzODgyMiwzODgyOSwz''@;'; put 'put ''ODkwNSwzODk4OSwzODk5MSwzODk4OCwzODk5MCwzODk5NSwzOTA5OCwzOTIzMCwzOTIzMSwzOTIyOSwzOTIxNCwzOTMzMywzOTQzOCwzOTYxNywzOTY4MywzOTY4NiwzOTc1OSwzOTc1OCwzOTc1NywzOTg4MiwzOTg4MSwzOTkzMywzOTg4MCwzOTg3Miw0MDI3Myw0MDI4NSw0MDI4OCw0MDY3''@;'; put 'put ''Miw0MDcyNSw0MDc0OCwyMDc4NywyMjE4MSwyMjc1MCwyMjc1MSwyMjc1NCwyMzU0MSw0MDg0OCwyNDMwMCwyNTA3NCwyNTA3OSwyNTA3OCwyNTA3NywyNTg1NiwyNTg3MSwyNjMzNiwyNjMzMywyNzM2NSwyNzM1NywyNzM1NCwyNzM0NywyODY5OSwyODcwMywyODcxMiwyODY5OCwyODcwMSwy''@;'; put 'put ''ODY5MywyODY5NiwyOTE5MCwyOTE5NywyOTI3MiwyOTM0NiwyOTU2MCwyOTU2MiwyOTg4NSwyOTg5OCwyOTkyMywzMDA4NywzMDA4NiwzMDMwMywzMDMwNSwzMDY2MywzMTAwMSwzMTE1MywzMTMzOSwzMTMzNywzMTgwNiwzMTgwNywzMTgwMCwzMTgwNSwzMTc5OSwzMTgwOCwzMjM2MywzMjM2''@;'; put 'put ''NSwzMjM3NywzMjM2MSwzMjM2MiwzMjY0NSwzMjM3MSwzMjY5NCwzMjY5NywzMjY5NiwzMzI0MCwzNDI4MSwzNDI2OSwzNDI4MiwzNDI2MSwzNDI3NiwzNDI3NywzNDI5NSwzNDgxMSwzNDgyMSwzNDgyOSwzNDgwOSwzNDgxNCwzNTE2OCwzNTE2NywzNTE1OCwzNTE2NiwzNTY0OSwzNTY3Niwz''@;'; put 'put ''NTY3MiwzNTY1NywzNTY3NCwzNTY2MiwzNTY2MywzNTY1NCwzNTY3MywzNjEwNCwzNjEwNiwzNjQ3NiwzNjQ2NiwzNjQ4NywzNjQ3MCwzNjQ2MCwzNjQ3NCwzNjQ2OCwzNjY5MiwzNjY4NiwzNjc4MSwzNzAwMiwzNzAwMywzNzI5NywzNzI5NCwzNzg1NywzNzg0MSwzNzg1NSwzNzgyNywzNzgz''@;'; put 'put ''MiwzNzg1MiwzNzg1MywzNzg0NiwzNzg1OCwzNzgzNywzNzg0OCwzNzg2MCwzNzg0NywzNzg2NCwzODM2NCwzODU4MCwzODYyNywzODY5OCwzODY5NSwzODc1MywzODg3NiwzODkwNywzOTAwNiwzOWUzLDM5MDAzLDM5MTAwLDM5MjM3LDM5MjQxLDM5NDQ2LDM5NDQ5LDM5NjkzLDM5OTEyLDM5''@;'; put 'put ''OTExLDM5ODk0LDM5ODk5LDQwMzI5LDQwMjg5LDQwMzA2LDQwMjk4LDQwMzAwLDQwNTk0LDQwNTk5LDQwNTk1LDQwNjI4LDIxMjQwLDIyMTg0LDIyMTk5LDIyMTk4LDIyMTk2LDIyMjA0LDIyNzU2LDIzMzYwLDIzMzYzLDIzNDIxLDIzNTQyLDI0MDA5LDI1MDgwLDI1MDgyLDI1ODgwLDI1ODc2''@;'; put 'put ''LDI1ODgxLDI2MzQyLDI2NDA3LDI3MzcyLDI4NzM0LDI4NzIwLDI4NzIyLDI5MjAwLDI5NTYzLDI5OTAzLDMwMzA2LDMwMzA5LDMxMDE0LDMxMDE4LDMxMDIwLDMxMDE5LDMxNDMxLDMxNDc4LDMxODIwLDMxODExLDMxODIxLDMxOTgzLDMxOTg0LDM2NzgyLDMyMzgxLDMyMzgwLDMyMzg2LDMy''@;'; put 'put ''NTg4LDMyNzY4LDMzMjQyLDMzMzgyLDM0Mjk5LDM0Mjk3LDM0MzIxLDM0Mjk4LDM0MzEwLDM0MzE1LDM0MzExLDM0MzE0LDM0ODM2LDM0ODM3LDM1MTcyLDM1MjU4LDM1MzIwLDM1Njk2LDM1NjkyLDM1Njg2LDM1Njk1LDM1Njc5LDM1NjkxLDM2MTExLDM2MTA5LDM2NDg5LDM2NDgxLDM2NDg1''@;'; put 'put ''LDM2NDgyLDM3MzAwLDM3MzIzLDM3OTEyLDM3ODkxLDM3ODg1LDM4MzY5LDM4NzA0LDM5MTA4LDM5MjUwLDM5MjQ5LDM5MzM2LDM5NDY3LDM5NDcyLDM5NDc5LDM5NDc3LDM5OTU1LDM5OTQ5LDQwNTY5LDQwNjI5LDQwNjgwLDQwNzUxLDQwNzk5LDQwODAzLDQwODAxLDIwNzkxLDIwNzkyLDIy''@;'; put 'put ''MjA5LDIyMjA4LDIyMjEwLDIyODA0LDIzNjYwLDI0MDEzLDI1MDg0LDI1MDg2LDI1ODg1LDI1ODg0LDI2MDA1LDI2MzQ1LDI3Mzg3LDI3Mzk2LDI3Mzg2LDI3NTcwLDI4NzQ4LDI5MjExLDI5MzUxLDI5OTEwLDI5OTA4LDMwMzEzLDMwNjc1LDMxODI0LDMyMzk5LDMyMzk2LDMyNzAwLDM0MzI3''@;'; put 'put ''LDM0MzQ5LDM0MzMwLDM0ODUxLDM0ODUwLDM0ODQ5LDM0ODQ3LDM1MTc4LDM1MTgwLDM1MjYxLDM1NzAwLDM1NzAzLDM1NzA5LDM2MTE1LDM2NDkwLDM2NDkzLDM2NDkxLDM2NzAzLDM2NzgzLDM3MzA2LDM3OTM0LDM3OTM5LDM3OTQxLDM3OTQ2LDM3OTQ0LDM3OTM4LDM3OTMxLDM4MzcwLDM4''@;'; put 'put ''NzEyLDM4NzEzLDM4NzA2LDM4OTExLDM5MDE1LDM5MDEzLDM5MjU1LDM5NDkzLDM5NDkxLDM5NDg4LDM5NDg2LDM5NjMxLDM5NzY0LDM5NzYxLDM5OTgxLDM5OTczLDQwMzY3LDQwMzcyLDQwMzg2LDQwMzc2LDQwNjA1LDQwNjg3LDQwNzI5LDQwNzk2LDQwODA2LDQwODA3LDIwNzk2LDIwNzk1''@;'; put 'put ''LDIyMjE2LDIyMjE4LDIyMjE3LDIzNDIzLDI0MDIwLDI0MDE4LDI0Mzk4LDI1MDg3LDI1ODkyLDI3NDAyLDI3NDg5LDI4NzUzLDI4NzYwLDI5NTY4LDI5OTI0LDMwMDkwLDMwMzE4LDMwMzE2LDMxMTU1LDMxODQwLDMxODM5LDMyODk0LDMyODkzLDMzMjQ3LDM1MTg2LDM1MTgzLDM1MzI0LDM1''@;'; put 'put ''NzEyLDM2MTE4LDM2MTE5LDM2NDk3LDM2NDk5LDM2NzA1LDM3MTkyLDM3OTU2LDM3OTY5LDM3OTcwLDM4NzE3LDM4NzE4LDM4ODUxLDM4ODQ5LDM5MDE5LDM5MjUzLDM5NTA5LDM5NTAxLDM5NjM0LDM5NzA2LDQwMDA5LDM5OTg1LDM5OTk4LDM5OTk1LDQwNDAzLDQwNDA3LDQwNzU2LDQwODEy''@;'; put 'put ''LDQwODEwLDQwODUyLDIyMjIwLDI0MDIyLDI1MDg4LDI1ODkxLDI1ODk5LDI1ODk4LDI2MzQ4LDI3NDA4LDI5OTE0LDMxNDM0LDMxODQ0LDMxODQzLDMxODQ1LDMyNDAzLDMyNDA2LDMyNDA0LDMzMjUwLDM0MzYwLDM0MzY3LDM0ODY1LDM1NzIyLDM3MDA4LDM3MDA3LDM3OTg3LDM3OTg0LDM3''@;'; put 'put ''OTg4LDM4NzYwLDM5MDIzLDM5MjYwLDM5NTE0LDM5NTE1LDM5NTExLDM5NjM1LDM5NjM2LDM5NjMzLDQwMDIwLDQwMDIzLDQwMDIyLDQwNDIxLDQwNjA3LDQwNjkyLDIyMjI1LDIyNzYxLDI1OTAwLDI4NzY2LDMwMzIxLDMwMzIyLDMwNjc5LDMyNTkyLDMyNjQ4LDM0ODcwLDM0ODczLDM0OTE0''@;'; put 'put ''LDM1NzMxLDM1NzMwLDM1NzM0LDMzMzk5LDM2MTIzLDM3MzEyLDM3OTk0LDM4NzIyLDM4NzI4LDM4NzI0LDM4ODU0LDM5MDI0LDM5NTE5LDM5NzE0LDM5NzY4LDQwMDMxLDQwNDQxLDQwNDQyLDQwNTcyLDQwNTczLDQwNzExLDQwODIzLDQwODE4LDI0MzA3LDI3NDE0LDI4NzcxLDMxODUyLDMx''@;'; put 'put ''ODU0LDM0ODc1LDM1MjY0LDM2NTEzLDM3MzEzLDM4MDAyLDM4ZTMsMzkwMjUsMzkyNjIsMzk2MzgsMzk3MTUsNDA2NTIsMjg3NzIsMzA2ODIsMzU3MzgsMzgwMDcsMzg4NTcsMzk1MjIsMzk1MjUsMzI0MTIsMzU3NDAsMzY1MjIsMzczMTcsMzgwMTMsMzgwMTQsMzgwMTIsNDAwNTUsNDAwNTYs''@;'; put 'put ''NDA2OTUsMzU5MjQsMzgwMTUsNDA0NzQsMjkyMjQsMzk1MzAsMzk3MjksNDA0NzUsNDA0NzgsMzE4NTgsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDg1NjAs''@;'; put 'put ''ODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksMjAwMjIsMjAwMzEsMjAxMDEsMjAxMjgsMjA4NjYsMjA4ODYsMjA5MDcsMjEyNDEsMjEzMDQsMjEzNTMsMjE0MzAsMjI3OTQsMjM0MjQsMjQwMjcsMTIwODMsMjQxOTEsMjQzMDgsMjQ0MDAsMjQ0MTcsMjU5MDgs''@;'; put 'put ''MjYwODAsMzAwOTgsMzAzMjYsMzY3ODksMzg1ODIsMTY4LDcxMCwxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw2NTMzOSw2NTM0MSwxMDA0NSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwx''@;'; put 'put ''MjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4''@;'; put 'put ''OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwx''@;'; put 'put ''MjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1''@;'; put 'put ''NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4Mywx''@;'; put 'put ''MjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUx''@;'; put 'put ''MSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQs''@;'; put 'put ''MTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYs''@;'; put 'put ''MTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw4Njc5LDg2MzIsODYzMywxMjc1MSwxMzEy''@;'; put 'put ''NzYsMjAwNTgsMTMxMjEwLDIwOTk0LDE3NTUzLDQwODgwLDIwODcyLDQwODgxLDE2MTI4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0NzAsODQ4MSwxMjQ0MywxMjQ0NCwxMTkwNCwxMTkwOCwxMTkxMCwxMTkxMSwx''@;'; put 'put ''MTkxMiwxMTkxNCwxMTkxNiwxMTkxNywxMTkyNSwxMTkzMiwxMTkzMywxMTk0MSwxMTk0MywxMTk0NiwxMTk0OCwxMTk1MCwxMTk1OCwxMTk2NCwxMTk2NiwxMTk3NCwxMTk3OCwxMTk4MCwxMTk4MSwxMTk4MywxMTk5MCwxMTk5MSwxMTk5OCwxMjAwMyxudWxsLG51bGwsbnVsbCw2NDMsNTky''@;'; put 'put ''LDYwMyw1OTYsNjI5LDMzOSwyNDgsMzMxLDY1MCw2MTgsMjAwMzQsMjAwNjAsMjA5ODEsMjEyNzQsMjEzNzgsMTk5NzUsMTk5ODAsMjAwMzksMjAxMDksMjIyMzEsNjQwMTIsMjM2NjIsMjQ0MzUsMTk5ODMsMjA4NzEsMTk5ODIsMjAwMTQsMjAxMTUsMjAxNjIsMjAxNjksMjAxNjgsMjA4ODgs''@;'; put 'put ''MjEyNDQsMjEzNTYsMjE0MzMsMjIzMDQsMjI3ODcsMjI4MjgsMjM1NjgsMjQwNjMsMjYwODEsMjc1NzEsMjc1OTYsMjc2NjgsMjkyNDcsMjAwMTcsMjAwMjgsMjAyMDAsMjAxODgsMjAyMDEsMjAxOTMsMjAxODksMjAxODYsMjEwMDQsMjEyNzYsMjEzMjQsMjIzMDYsMjIzMDcsMjI4MDcsMjI4''@;'; put 'put ''MzEsMjM0MjUsMjM0MjgsMjM1NzAsMjM2MTEsMjM2NjgsMjM2NjcsMjQwNjgsMjQxOTIsMjQxOTQsMjQ1MjEsMjUwOTcsMjUxNjgsMjc2NjksMjc3MDIsMjc3MTUsMjc3MTEsMjc3MDcsMjkzNTgsMjkzNjAsMjk1NzgsMzExNjAsMzI5MDYsMzg0MzAsMjAyMzgsMjAyNDgsMjAyNjgsMjAyMTMs''@;'; put 'put ''MjAyNDQsMjAyMDksMjAyMjQsMjAyMTUsMjAyMzIsMjAyNTMsMjAyMjYsMjAyMjksMjAyNTgsMjAyNDMsMjAyMjgsMjAyMTIsMjAyNDIsMjA5MTMsMjEwMTEsMjEwMDEsMjEwMDgsMjExNTgsMjEyODIsMjEyNzksMjEzMjUsMjEzODYsMjE1MTEsMjIyNDEsMjIyMzksMjIzMTgsMjIzMTQsMjIz''@;'; put 'put ''MjQsMjI4NDQsMjI5MTIsMjI5MDgsMjI5MTcsMjI5MDcsMjI5MTAsMjI5MDMsMjI5MTEsMjMzODIsMjM1NzMsMjM1ODksMjM2NzYsMjM2NzQsMjM2NzUsMjM2NzgsMjQwMzEsMjQxODEsMjQxOTYsMjQzMjIsMjQzNDYsMjQ0MzYsMjQ1MzMsMjQ1MzIsMjQ1MjcsMjUxODAsMjUxODIsMjUxODgs''@;'; put 'put ''MjUxODUsMjUxOTAsMjUxODYsMjUxNzcsMjUxODQsMjUxNzgsMjUxODksMjYwOTUsMjYwOTQsMjY0MzAsMjY0MjUsMjY0MjQsMjY0MjcsMjY0MjYsMjY0MzEsMjY0MjgsMjY0MTksMjc2NzIsMjc3MTgsMjc3MzAsMjc3NDAsMjc3MjcsMjc3MjIsMjc3MzIsMjc3MjMsMjc3MjQsMjg3ODUsMjky''@;'; put 'put ''NzgsMjkzNjQsMjkzNjUsMjk1ODIsMjk5OTQsMzAzMzUsMzEzNDksMzI1OTMsMzM0MDAsMzM0MDQsMzM0MDgsMzM0MDUsMzM0MDcsMzQzODEsMzUxOTgsMzcwMTcsMzcwMTUsMzcwMTYsMzcwMTksMzcwMTIsMzg0MzQsMzg0MzYsMzg0MzIsMzg0MzUsMjAzMTAsMjAyODMsMjAzMjIsMjAyOTcs''@;'; put 'put ''MjAzMDcsMjAzMjQsMjAyODYsMjAzMjcsMjAzMDYsMjAzMTksMjAyODksMjAzMTIsMjAyNjksMjAyNzUsMjAyODcsMjAzMjEsMjA4NzksMjA5MjEsMjEwMjAsMjEwMjIsMjEwMjUsMjExNjUsMjExNjYsMjEyNTcsMjEzNDcsMjEzNjIsMjEzOTAsMjEzOTEsMjE1NTIsMjE1NTksMjE1NDYsMjE1''@;'; put 'put ''ODgsMjE1NzMsMjE1MjksMjE1MzIsMjE1NDEsMjE1MjgsMjE1NjUsMjE1ODMsMjE1NjksMjE1NDQsMjE1NDAsMjE1NzUsMjIyNTQsMjIyNDcsMjIyNDUsMjIzMzcsMjIzNDEsMjIzNDgsMjIzNDUsMjIzNDcsMjIzNTQsMjI3OTAsMjI4NDgsMjI5NTAsMjI5MzYsMjI5NDQsMjI5MzUsMjI5MjYs''@;'; put 'put ''MjI5NDYsMjI5MjgsMjI5MjcsMjI5NTEsMjI5NDUsMjM0MzgsMjM0NDIsMjM1OTIsMjM1OTQsMjM2OTMsMjM2OTUsMjM2ODgsMjM2OTEsMjM2ODksMjM2OTgsMjM2OTAsMjM2ODYsMjM2OTksMjM3MDEsMjQwMzIsMjQwNzQsMjQwNzgsMjQyMDMsMjQyMDEsMjQyMDQsMjQyMDAsMjQyMDUsMjQz''@;'; put 'put ''MjUsMjQzNDksMjQ0NDAsMjQ0MzgsMjQ1MzAsMjQ1MjksMjQ1MjgsMjQ1NTcsMjQ1NTIsMjQ1NTgsMjQ1NjMsMjQ1NDUsMjQ1NDgsMjQ1NDcsMjQ1NzAsMjQ1NTksMjQ1NjcsMjQ1NzEsMjQ1NzYsMjQ1NjQsMjUxNDYsMjUyMTksMjUyMjgsMjUyMzAsMjUyMzEsMjUyMzYsMjUyMjMsMjUyMDEs''@;'; put 'put ''MjUyMTEsMjUyMTAsMjUyMDAsMjUyMTcsMjUyMjQsMjUyMDcsMjUyMTMsMjUyMDIsMjUyMDQsMjU5MTEsMjYwOTYsMjYxMDAsMjYwOTksMjYwOTgsMjYxMDEsMjY0MzcsMjY0MzksMjY0NTcsMjY0NTMsMjY0NDQsMjY0NDAsMjY0NjEsMjY0NDUsMjY0NTgsMjY0NDMsMjc2MDAsMjc2NzMsMjc2''@;'; put 'put ''NzQsMjc3NjgsMjc3NTEsMjc3NTUsMjc3ODAsMjc3ODcsMjc3OTEsMjc3NjEsMjc3NTksMjc3NTMsMjc4MDIsMjc3NTcsMjc3ODMsMjc3OTcsMjc4MDQsMjc3NTAsMjc3NjMsMjc3NDksMjc3NzEsMjc3OTAsMjg3ODgsMjg3OTQsMjkyODMsMjkzNzUsMjkzNzMsMjkzNzksMjkzODIsMjkzNzcs''@;'; put 'put ''MjkzNzAsMjkzODEsMjk1ODksMjk1OTEsMjk1ODcsMjk1ODgsMjk1ODYsMzAwMTAsMzAwMDksMzAxMDAsMzAxMDEsMzAzMzcsMzEwMzcsMzI4MjAsMzI5MTcsMzI5MjEsMzI5MTIsMzI5MTQsMzI5MjQsMzM0MjQsMzM0MjMsMzM0MTMsMzM0MjIsMzM0MjUsMzM0MjcsMzM0MTgsMzM0MTEsMzM0''@;'; put 'put ''MTIsMzU5NjAsMzY4MDksMzY3OTksMzcwMjMsMzcwMjUsMzcwMjksMzcwMjIsMzcwMzEsMzcwMjQsMzg0NDgsMzg0NDAsMzg0NDcsMzg0NDUsMjAwMTksMjAzNzYsMjAzNDgsMjAzNTcsMjAzNDksMjAzNTIsMjAzNTksMjAzNDIsMjAzNDAsMjAzNjEsMjAzNTYsMjAzNDMsMjAzMDAsMjAzNzUs''@;'; put 'put ''MjAzMzAsMjAzNzgsMjAzNDUsMjAzNTMsMjAzNDQsMjAzNjgsMjAzODAsMjAzNzIsMjAzODIsMjAzNzAsMjAzNTQsMjAzNzMsMjAzMzEsMjAzMzQsMjA4OTQsMjA5MjQsMjA5MjYsMjEwNDUsMjEwNDIsMjEwNDMsMjEwNjIsMjEwNDEsMjExODAsMjEyNTgsMjEyNTksMjEzMDgsMjEzOTQsMjEz''@;'; put 'put ''OTYsMjE2MzksMjE2MzEsMjE2MzMsMjE2NDksMjE2MzQsMjE2NDAsMjE2MTEsMjE2MjYsMjE2MzAsMjE2MDUsMjE2MTIsMjE2MjAsMjE2MDYsMjE2NDUsMjE2MTUsMjE2MDEsMjE2MDAsMjE2NTYsMjE2MDMsMjE2MDcsMjE2MDQsMjIyNjMsMjIyNjUsMjIzODMsMjIzODYsMjIzODEsMjIzNzks''@;'; put 'put ''MjIzODUsMjIzODQsMjIzOTAsMjI0MDAsMjIzODksMjIzOTUsMjIzODcsMjIzODgsMjIzNzAsMjIzNzYsMjIzOTcsMjI3OTYsMjI4NTMsMjI5NjUsMjI5NzAsMjI5OTEsMjI5OTAsMjI5NjIsMjI5ODgsMjI5NzcsMjI5NjYsMjI5NzIsMjI5NzksMjI5OTgsMjI5NjEsMjI5NzMsMjI5NzYsMjI5''@;'; put 'put ''ODQsMjI5NjQsMjI5ODMsMjMzOTQsMjMzOTcsMjM0NDMsMjM0NDUsMjM2MjAsMjM2MjMsMjM3MjYsMjM3MTYsMjM3MTIsMjM3MzMsMjM3MjcsMjM3MjAsMjM3MjQsMjM3MTEsMjM3MTUsMjM3MjUsMjM3MTQsMjM3MjIsMjM3MTksMjM3MDksMjM3MTcsMjM3MzQsMjM3MjgsMjM3MTgsMjQwODcs''@;'; put 'put ''MjQwODQsMjQwODksMjQzNjAsMjQzNTQsMjQzNTUsMjQzNTYsMjQ0MDQsMjQ0NTAsMjQ0NDYsMjQ0NDUsMjQ1NDIsMjQ1NDksMjQ2MjEsMjQ2MTQsMjQ2MDEsMjQ2MjYsMjQ1ODcsMjQ2MjgsMjQ1ODYsMjQ1OTksMjQ2MjcsMjQ2MDIsMjQ2MDYsMjQ2MjAsMjQ2MTAsMjQ1ODksMjQ1OTIsMjQ2''@;'; put 'put ''MjIsMjQ1OTUsMjQ1OTMsMjQ1ODgsMjQ1ODUsMjQ2MDQsMjUxMDgsMjUxNDksMjUyNjEsMjUyNjgsMjUyOTcsMjUyNzgsMjUyNTgsMjUyNzAsMjUyOTAsMjUyNjIsMjUyNjcsMjUyNjMsMjUyNzUsMjUyNTcsMjUyNjQsMjUyNzIsMjU5MTcsMjYwMjQsMjYwNDMsMjYxMjEsMjYxMDgsMjYxMTYs''@;'; put 'put ''MjYxMzAsMjYxMjAsMjYxMDcsMjYxMTUsMjYxMjMsMjYxMjUsMjYxMTcsMjYxMDksMjYxMjksMjYxMjgsMjYzNTgsMjYzNzgsMjY1MDEsMjY0NzYsMjY1MTAsMjY1MTQsMjY0ODYsMjY0OTEsMjY1MjAsMjY1MDIsMjY1MDAsMjY0ODQsMjY1MDksMjY1MDgsMjY0OTAsMjY1MjcsMjY1MTMsMjY1''@;'; put 'put ''MjEsMjY0OTksMjY0OTMsMjY0OTcsMjY0ODgsMjY0ODksMjY1MTYsMjc0MjksMjc1MjAsMjc1MTgsMjc2MTQsMjc2NzcsMjc3OTUsMjc4ODQsMjc4ODMsMjc4ODYsMjc4NjUsMjc4MzAsMjc4NjAsMjc4MjEsMjc4NzksMjc4MzEsMjc4NTYsMjc4NDIsMjc4MzQsMjc4NDMsMjc4NDYsMjc4ODUs''@;'; put 'put ''Mjc4OTAsMjc4NTgsMjc4NjksMjc4MjgsMjc3ODYsMjc4MDUsMjc3NzYsMjc4NzAsMjc4NDAsMjc5NTIsMjc4NTMsMjc4NDcsMjc4MjQsMjc4OTcsMjc4NTUsMjc4ODEsMjc4NTcsMjg4MjAsMjg4MjQsMjg4MDUsMjg4MTksMjg4MDYsMjg4MDQsMjg4MTcsMjg4MjIsMjg4MDIsMjg4MjYsMjg4''@;'; put 'put ''MDMsMjkyOTAsMjkzOTgsMjkzODcsMjk0MDAsMjkzODUsMjk0MDQsMjkzOTQsMjkzOTYsMjk0MDIsMjkzODgsMjkzOTMsMjk2MDQsMjk2MDEsMjk2MTMsMjk2MDYsMjk2MDIsMjk2MDAsMjk2MTIsMjk1OTcsMjk5MTcsMjk5MjgsMzAwMTUsMzAwMTYsMzAwMTQsMzAwOTIsMzAxMDQsMzAzODMs''@;'; put 'put ''MzA0NTEsMzA0NDksMzA0NDgsMzA0NTMsMzA3MTIsMzA3MTYsMzA3MTMsMzA3MTUsMzA3MTQsMzA3MTEsMzEwNDIsMzEwMzksMzExNzMsMzEzNTIsMzEzNTUsMzE0ODMsMzE4NjEsMzE5OTcsMzI4MjEsMzI5MTEsMzI5NDIsMzI5MzEsMzI5NTIsMzI5NDksMzI5NDEsMzMzMTIsMzM0NDAsMzM0''@;'; put 'put ''NzIsMzM0NTEsMzM0MzQsMzM0MzIsMzM0MzUsMzM0NjEsMzM0NDcsMzM0NTQsMzM0NjgsMzM0MzgsMzM0NjYsMzM0NjAsMzM0NDgsMzM0NDEsMzM0NDksMzM0NzQsMzM0NDQsMzM0NzUsMzM0NjIsMzM0NDIsMzQ0MTYsMzQ0MTUsMzQ0MTMsMzQ0MTQsMzU5MjYsMzY4MTgsMzY4MTEsMzY4MTks''@;'; put 'put ''MzY4MTMsMzY4MjIsMzY4MjEsMzY4MjMsMzcwNDIsMzcwNDQsMzcwMzksMzcwNDMsMzcwNDAsMzg0NTcsMzg0NjEsMzg0NjAsMzg0NTgsMzg0NjcsMjA0MjksMjA0MjEsMjA0MzUsMjA0MDIsMjA0MjUsMjA0MjcsMjA0MTcsMjA0MzYsMjA0NDQsMjA0NDEsMjA0MTEsMjA0MDMsMjA0NDMsMjA0''@;'; put 'put ''MjMsMjA0MzgsMjA0MTAsMjA0MTYsMjA0MDksMjA0NjAsMjEwNjAsMjEwNjUsMjExODQsMjExODYsMjEzMDksMjEzNzIsMjEzOTksMjEzOTgsMjE0MDEsMjE0MDAsMjE2OTAsMjE2NjUsMjE2NzcsMjE2NjksMjE3MTEsMjE2OTksMzM1NDksMjE2ODcsMjE2NzgsMjE3MTgsMjE2ODYsMjE3MDEs''@;'; put 'put ''MjE3MDIsMjE2NjQsMjE2MTYsMjE2OTIsMjE2NjYsMjE2OTQsMjE2MTgsMjE3MjYsMjE2ODAsMjI0NTMsMjI0MzAsMjI0MzEsMjI0MzYsMjI0MTIsMjI0MjMsMjI0MjksMjI0MjcsMjI0MjAsMjI0MjQsMjI0MTUsMjI0MjUsMjI0MzcsMjI0MjYsMjI0MjEsMjI3NzIsMjI3OTcsMjI4NjcsMjMw''@;'; put 'put ''MDksMjMwMDYsMjMwMjIsMjMwNDAsMjMwMjUsMjMwMDUsMjMwMzQsMjMwMzcsMjMwMzYsMjMwMzAsMjMwMTIsMjMwMjYsMjMwMzEsMjMwMDMsMjMwMTcsMjMwMjcsMjMwMjksMjMwMDgsMjMwMzgsMjMwMjgsMjMwMjEsMjM0NjQsMjM2MjgsMjM3NjAsMjM3NjgsMjM3NTYsMjM3NjcsMjM3NTUs''@;'; put 'put ''MjM3NzEsMjM3NzQsMjM3NzAsMjM3NTMsMjM3NTEsMjM3NTQsMjM3NjYsMjM3NjMsMjM3NjQsMjM3NTksMjM3NTIsMjM3NTAsMjM3NTgsMjM3NzUsMjM4MDAsMjQwNTcsMjQwOTcsMjQwOTgsMjQwOTksMjQwOTYsMjQxMDAsMjQyNDAsMjQyMjgsMjQyMjYsMjQyMTksMjQyMjcsMjQyMjksMjQz''@;'; put 'put ''MjcsMjQzNjYsMjQ0MDYsMjQ0NTQsMjQ2MzEsMjQ2MzMsMjQ2NjAsMjQ2OTAsMjQ2NzAsMjQ2NDUsMjQ2NTksMjQ2NDcsMjQ2NDksMjQ2NjcsMjQ2NTIsMjQ2NDAsMjQ2NDIsMjQ2NzEsMjQ2MTIsMjQ2NDQsMjQ2NjQsMjQ2NzgsMjQ2ODYsMjUxNTQsMjUxNTUsMjUyOTUsMjUzNTcsMjUzNTUs''@;'; put 'put ''MjUzMzMsMjUzNTgsMjUzNDcsMjUzMjMsMjUzMzcsMjUzNTksMjUzNTYsMjUzMzYsMjUzMzQsMjUzNDQsMjUzNjMsMjUzNjQsMjUzMzgsMjUzNjUsMjUzMzksMjUzMjgsMjU5MjEsMjU5MjMsMjYwMjYsMjYwNDcsMjYxNjYsMjYxNDUsMjYxNjIsMjYxNjUsMjYxNDAsMjYxNTAsMjYxNDYsMjYx''@;'; put 'put ''NjMsMjYxNTUsMjYxNzAsMjYxNDEsMjYxNjQsMjYxNjksMjYxNTgsMjYzODMsMjYzODQsMjY1NjEsMjY2MTAsMjY1NjgsMjY1NTQsMjY1ODgsMjY1NTUsMjY2MTYsMjY1ODQsMjY1NjAsMjY1NTEsMjY1NjUsMjY2MDMsMjY1OTYsMjY1OTEsMjY1NDksMjY1NzMsMjY1NDcsMjY2MTUsMjY2MTQs''@;'; put 'put ''MjY2MDYsMjY1OTUsMjY1NjIsMjY1NTMsMjY1NzQsMjY1OTksMjY2MDgsMjY1NDYsMjY2MjAsMjY1NjYsMjY2MDUsMjY1NzIsMjY1NDIsMjY1OTgsMjY1ODcsMjY2MTgsMjY1NjksMjY1NzAsMjY1NjMsMjY2MDIsMjY1NzEsMjc0MzIsMjc1MjIsMjc1MjQsMjc1NzQsMjc2MDYsMjc2MDgsMjc2''@;'; put 'put ''MTYsMjc2ODAsMjc2ODEsMjc5NDQsMjc5NTYsMjc5NDksMjc5MzUsMjc5NjQsMjc5NjcsMjc5MjIsMjc5MTQsMjc4NjYsMjc5NTUsMjc5MDgsMjc5MjksMjc5NjIsMjc5MzAsMjc5MjEsMjc5MDQsMjc5MzMsMjc5NzAsMjc5MDUsMjc5MjgsMjc5NTksMjc5MDcsMjc5MTksMjc5NjgsMjc5MTEs''@;'; put 'put ''Mjc5MzYsMjc5NDgsMjc5MTIsMjc5MzgsMjc5MTMsMjc5MjAsMjg4NTUsMjg4MzEsMjg4NjIsMjg4NDksMjg4NDgsMjg4MzMsMjg4NTIsMjg4NTMsMjg4NDEsMjkyNDksMjkyNTcsMjkyNTgsMjkyOTIsMjkyOTYsMjkyOTksMjkyOTQsMjkzODYsMjk0MTIsMjk0MTYsMjk0MTksMjk0MDcsMjk0''@;'; put 'put ''MTgsMjk0MTQsMjk0MTEsMjk1NzMsMjk2NDQsMjk2MzQsMjk2NDAsMjk2MzcsMjk2MjUsMjk2MjIsMjk2MjEsMjk2MjAsMjk2NzUsMjk2MzEsMjk2MzksMjk2MzAsMjk2MzUsMjk2MzgsMjk2MjQsMjk2NDMsMjk5MzIsMjk5MzQsMjk5OTgsMzAwMjMsMzAwMjQsMzAxMTksMzAxMjIsMzAzMjks''@;'; put 'put ''MzA0MDQsMzA0NzIsMzA0NjcsMzA0NjgsMzA0NjksMzA0NzQsMzA0NTUsMzA0NTksMzA0NTgsMzA2OTUsMzA2OTYsMzA3MjYsMzA3MzcsMzA3MzgsMzA3MjUsMzA3MzYsMzA3MzUsMzA3MzQsMzA3MjksMzA3MjMsMzA3MzksMzEwNTAsMzEwNTIsMzEwNTEsMzEwNDUsMzEwNDQsMzExODksMzEx''@;'; put 'put ''ODEsMzExODMsMzExOTAsMzExODIsMzEzNjAsMzEzNTgsMzE0NDEsMzE0ODgsMzE0ODksMzE4NjYsMzE4NjQsMzE4NjUsMzE4NzEsMzE4NzIsMzE4NzMsMzIwMDMsMzIwMDgsMzIwMDEsMzI2MDAsMzI2NTcsMzI2NTMsMzI3MDIsMzI3NzUsMzI3ODIsMzI3ODMsMzI3ODgsMzI4MjMsMzI5ODQs''@;'; put 'put ''MzI5NjcsMzI5OTIsMzI5NzcsMzI5NjgsMzI5NjIsMzI5NzYsMzI5NjUsMzI5OTUsMzI5ODUsMzI5ODgsMzI5NzAsMzI5ODEsMzI5NjksMzI5NzUsMzI5ODMsMzI5OTgsMzI5NzMsMzMyNzksMzMzMTMsMzM0MjgsMzM0OTcsMzM1MzQsMzM1MjksMzM1NDMsMzM1MTIsMzM1MzYsMzM0OTMsMzM1''@;'; put 'put ''OTQsMzM1MTUsMzM0OTQsMzM1MjQsMzM1MTYsMzM1MDUsMzM1MjIsMzM1MjUsMzM1NDgsMzM1MzEsMzM1MjYsMzM1MjAsMzM1MTQsMzM1MDgsMzM1MDQsMzM1MzAsMzM1MjMsMzM1MTcsMzQ0MjMsMzQ0MjAsMzQ0MjgsMzQ0MTksMzQ4ODEsMzQ4OTQsMzQ5MTksMzQ5MjIsMzQ5MjEsMzUyODMs''@;'; put 'put ''MzUzMzIsMzUzMzUsMzYyMTAsMzY4MzUsMzY4MzMsMzY4NDYsMzY4MzIsMzcxMDUsMzcwNTMsMzcwNTUsMzcwNzcsMzcwNjEsMzcwNTQsMzcwNjMsMzcwNjcsMzcwNjQsMzczMzIsMzczMzEsMzg0ODQsMzg0NzksMzg0ODEsMzg0ODMsMzg0NzQsMzg0NzgsMjA1MTAsMjA0ODUsMjA0ODcsMjA0''@;'; put 'put ''OTksMjA1MTQsMjA1MjgsMjA1MDcsMjA0NjksMjA0NjgsMjA1MzEsMjA1MzUsMjA1MjQsMjA0NzAsMjA0NzEsMjA1MDMsMjA1MDgsMjA1MTIsMjA1MTksMjA1MzMsMjA1MjcsMjA1MjksMjA0OTQsMjA4MjYsMjA4ODQsMjA4ODMsMjA5MzgsMjA5MzIsMjA5MzMsMjA5MzYsMjA5NDIsMjEwODks''@;'; put 'put ''MjEwODIsMjEwNzQsMjEwODYsMjEwODcsMjEwNzcsMjEwOTAsMjExOTcsMjEyNjIsMjE0MDYsMjE3OTgsMjE3MzAsMjE3ODMsMjE3NzgsMjE3MzUsMjE3NDcsMjE3MzIsMjE3ODYsMjE3NTksMjE3NjQsMjE3NjgsMjE3MzksMjE3NzcsMjE3NjUsMjE3NDUsMjE3NzAsMjE3NTUsMjE3NTEsMjE3''@;'; put 'put ''NTIsMjE3MjgsMjE3NzQsMjE3NjMsMjE3NzEsMjIyNzMsMjIyNzQsMjI0NzYsMjI1NzgsMjI0ODUsMjI0ODIsMjI0NTgsMjI0NzAsMjI0NjEsMjI0NjAsMjI0NTYsMjI0NTQsMjI0NjMsMjI0NzEsMjI0ODAsMjI0NTcsMjI0NjUsMjI3OTgsMjI4NTgsMjMwNjUsMjMwNjIsMjMwODUsMjMwODYs''@;'; put 'put ''MjMwNjEsMjMwNTUsMjMwNjMsMjMwNTAsMjMwNzAsMjMwOTEsMjM0MDQsMjM0NjMsMjM0NjksMjM0NjgsMjM1NTUsMjM2MzgsMjM2MzYsMjM3ODgsMjM4MDcsMjM3OTAsMjM3OTMsMjM3OTksMjM4MDgsMjM4MDEsMjQxMDUsMjQxMDQsMjQyMzIsMjQyMzgsMjQyMzQsMjQyMzYsMjQzNzEsMjQz''@;'; put 'put ''NjgsMjQ0MjMsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ3MzgsMjQ3MTIsMjQ3MDQsMjQ3MjIsMjQ3MDUsMjQ3MzMsMjQ3MDcsMjQ3MjUsMjQ3MzEsMjQ3MjcsMjQ3MTEsMjQ3MzIsMjQ3MTgsMjUxMTMsMjUxNTgsMjUzMzAsMjUzNjAsMjU0MzAsMjUzODgsMjU0MTIsMjU0MTMsMjUzOTgs''@;'; put 'put ''MjU0MTEsMjU1NzIsMjU0MDEsMjU0MTksMjU0MTgsMjU0MDQsMjUzODUsMjU0MDksMjUzOTYsMjU0MzIsMjU0MjgsMjU0MzMsMjUzODksMjU0MTUsMjUzOTUsMjU0MzQsMjU0MjUsMjU0MDAsMjU0MzEsMjU0MDgsMjU0MTYsMjU5MzAsMjU5MjYsMjYwNTQsMjYwNTEsMjYwNTIsMjYwNTAsMjYx''@;'; put 'put ''ODYsMjYyMDcsMjYxODMsMjYxOTMsMjYzODYsMjYzODcsMjY2NTUsMjY2NTAsMjY2OTcsMjY2NzQsMjY2NzUsMjY2ODMsMjY2OTksMjY3MDMsMjY2NDYsMjY2NzMsMjY2NTIsMjY2NzcsMjY2NjcsMjY2NjksMjY2NzEsMjY3MDIsMjY2OTIsMjY2NzYsMjY2NTMsMjY2NDIsMjY2NDQsMjY2NjIs''@;'; put 'put ''MjY2NjQsMjY2NzAsMjY3MDEsMjY2ODIsMjY2NjEsMjY2NTYsMjc0MzYsMjc0MzksMjc0MzcsMjc0NDEsMjc0NDQsMjc1MDEsMzI4OTgsMjc1MjgsMjc2MjIsMjc2MjAsMjc2MjQsMjc2MTksMjc2MTgsMjc2MjMsMjc2ODUsMjgwMjYsMjgwMDMsMjgwMDQsMjgwMjIsMjc5MTcsMjgwMDEsMjgw''@;'; put 'put ''NTAsMjc5OTIsMjgwMDIsMjgwMTMsMjgwMTUsMjgwNDksMjgwNDUsMjgxNDMsMjgwMzEsMjgwMzgsMjc5OTgsMjgwMDcsMjhlMywyODA1NSwyODAxNiwyODAyOCwyNzk5OSwyODAzNCwyODA1NiwyNzk1MSwyODAwOCwyODA0MywyODAzMCwyODAzMiwyODAzNiwyNzkyNiwyODAzNSwyODAyNywy''@;'; put 'put ''ODAyOSwyODAyMSwyODA0OCwyODg5MiwyODg4MywyODg4MSwyODg5MywyODg3NSwzMjU2OSwyODg5OCwyODg4NywyODg4MiwyODg5NCwyODg5NiwyODg4NCwyODg3NywyODg2OSwyODg3MCwyODg3MSwyODg5MCwyODg3OCwyODg5NywyOTI1MCwyOTMwNCwyOTMwMywyOTMwMiwyOTQ0MCwyOTQz''@;'; put 'put ''NCwyOTQyOCwyOTQzOCwyOTQzMCwyOTQyNywyOTQzNSwyOTQ0MSwyOTY1MSwyOTY1NywyOTY2OSwyOTY1NCwyOTYyOCwyOTY3MSwyOTY2NywyOTY3MywyOTY2MCwyOTY1MCwyOTY1OSwyOTY1MiwyOTY2MSwyOTY1OCwyOTY1NSwyOTY1NiwyOTY3MiwyOTkxOCwyOTkxOSwyOTk0MCwyOTk0MSwy''@;'; put 'put ''OTk4NSwzMDA0MywzMDA0NywzMDEyOCwzMDE0NSwzMDEzOSwzMDE0OCwzMDE0NCwzMDE0MywzMDEzNCwzMDEzOCwzMDM0NiwzMDQwOSwzMDQ5MywzMDQ5MSwzMDQ4MCwzMDQ4MywzMDQ4MiwzMDQ5OSwzMDQ4MSwzMDQ4NSwzMDQ4OSwzMDQ5MCwzMDQ5OCwzMDUwMywzMDc1NSwzMDc2NCwzMDc1''@;'; put 'put ''NCwzMDc3MywzMDc2NywzMDc2MCwzMDc2NiwzMDc2MywzMDc1MywzMDc2MSwzMDc3MSwzMDc2MiwzMDc2OSwzMTA2MCwzMTA2NywzMTA1NSwzMTA2OCwzMTA1OSwzMTA1OCwzMTA1NywzMTIxMSwzMTIxMiwzMTIwMCwzMTIxNCwzMTIxMywzMTIxMCwzMTE5NiwzMTE5OCwzMTE5NywzMTM2Niwz''@;'; put 'put ''MTM2OSwzMTM2NSwzMTM3MSwzMTM3MiwzMTM3MCwzMTM2NywzMTQ0OCwzMTUwNCwzMTQ5MiwzMTUwNywzMTQ5MywzMTUwMywzMTQ5NiwzMTQ5OCwzMTUwMiwzMTQ5NywzMTUwNiwzMTg3NiwzMTg4OSwzMTg4MiwzMTg4NCwzMTg4MCwzMTg4NSwzMTg3NywzMjAzMCwzMjAyOSwzMjAxNywzMjAx''@;'; put 'put ''NCwzMjAyNCwzMjAyMiwzMjAxOSwzMjAzMSwzMjAxOCwzMjAxNSwzMjAxMiwzMjYwNCwzMjYwOSwzMjYwNiwzMjYwOCwzMjYwNSwzMjYwMywzMjY2MiwzMjY1OCwzMjcwNywzMjcwNiwzMjcwNCwzMjc5MCwzMjgzMCwzMjgyNSwzMzAxOCwzMzAxMCwzMzAxNywzMzAxMywzMzAyNSwzMzAxOSwz''@;'; put 'put ''MzAyNCwzMzI4MSwzMzMyNywzMzMxNywzMzU4NywzMzU4MSwzMzYwNCwzMzU2MSwzMzYxNywzMzU3MywzMzYyMiwzMzU5OSwzMzYwMSwzMzU3NCwzMzU2NCwzMzU3MCwzMzYwMiwzMzYxNCwzMzU2MywzMzU3OCwzMzU0NCwzMzU5NiwzMzYxMywzMzU1OCwzMzU3MiwzMzU2OCwzMzU5MSwzMzU4''@;'; put 'put ''MywzMzU3NywzMzYwNywzMzYwNSwzMzYxMiwzMzYxOSwzMzU2NiwzMzU4MCwzMzYxMSwzMzU3NSwzMzYwOCwzNDM4NywzNDM4NiwzNDQ2NiwzNDQ3MiwzNDQ1NCwzNDQ0NSwzNDQ0OSwzNDQ2MiwzNDQzOSwzNDQ1NSwzNDQzOCwzNDQ0MywzNDQ1OCwzNDQzNywzNDQ2OSwzNDQ1NywzNDQ2NSwz''@;'; put 'put ''NDQ3MSwzNDQ1MywzNDQ1NiwzNDQ0NiwzNDQ2MSwzNDQ0OCwzNDQ1MiwzNDg4MywzNDg4NCwzNDkyNSwzNDkzMywzNDkzNCwzNDkzMCwzNDk0NCwzNDkyOSwzNDk0MywzNDkyNywzNDk0NywzNDk0MiwzNDkzMiwzNDk0MCwzNTM0NiwzNTkxMSwzNTkyNywzNTk2MywzNjAwNCwzNjAwMywzNjIx''@;'; put 'put ''NCwzNjIxNiwzNjI3NywzNjI3OSwzNjI3OCwzNjU2MSwzNjU2MywzNjg2MiwzNjg1MywzNjg2NiwzNjg2MywzNjg1OSwzNjg2OCwzNjg2MCwzNjg1NCwzNzA3OCwzNzA4OCwzNzA4MSwzNzA4MiwzNzA5MSwzNzA4NywzNzA5MywzNzA4MCwzNzA4MywzNzA3OSwzNzA4NCwzNzA5MiwzNzIwMCwz''@;'; put 'put ''NzE5OCwzNzE5OSwzNzMzMywzNzM0NiwzNzMzOCwzODQ5MiwzODQ5NSwzODU4OCwzOTEzOSwzOTY0NywzOTcyNywyMDA5NSwyMDU5MiwyMDU4NiwyMDU3NywyMDU3NCwyMDU3NiwyMDU2MywyMDU1NSwyMDU3MywyMDU5NCwyMDU1MiwyMDU1NywyMDU0NSwyMDU3MSwyMDU1NCwyMDU3OCwyMDUw''@;'; put 'put ''MSwyMDU0OSwyMDU3NSwyMDU4NSwyMDU4NywyMDU3OSwyMDU4MCwyMDU1MCwyMDU0NCwyMDU5MCwyMDU5NSwyMDU2NywyMDU2MSwyMDk0NCwyMTA5OSwyMTEwMSwyMTEwMCwyMTEwMiwyMTIwNiwyMTIwMywyMTI5MywyMTQwNCwyMTg3NywyMTg3OCwyMTgyMCwyMTgzNywyMTg0MCwyMTgxMiwy''@;'; put 'put ''MTgwMiwyMTg0MSwyMTg1OCwyMTgxNCwyMTgxMywyMTgwOCwyMTg0MiwyMTgyOSwyMTc3MiwyMTgxMCwyMTg2MSwyMTgzOCwyMTgxNywyMTgzMiwyMTgwNSwyMTgxOSwyMTgyNCwyMTgzNSwyMjI4MiwyMjI3OSwyMjUyMywyMjU0OCwyMjQ5OCwyMjUxOCwyMjQ5MiwyMjUxNiwyMjUyOCwyMjUw''@;'; put 'put ''OSwyMjUyNSwyMjUzNiwyMjUyMCwyMjUzOSwyMjUxNSwyMjQ3OSwyMjUzNSwyMjUxMCwyMjQ5OSwyMjUxNCwyMjUwMSwyMjUwOCwyMjQ5NywyMjU0MiwyMjUyNCwyMjU0NCwyMjUwMywyMjUyOSwyMjU0MCwyMjUxMywyMjUwNSwyMjUxMiwyMjU0MSwyMjUzMiwyMjg3NiwyMzEzNiwyMzEyOCwy''@;'; put 'put ''MzEyNSwyMzE0MywyMzEzNCwyMzA5NiwyMzA5MywyMzE0OSwyMzEyMCwyMzEzNSwyMzE0MSwyMzE0OCwyMzEyMywyMzE0MCwyMzEyNywyMzEwNywyMzEzMywyMzEyMiwyMzEwOCwyMzEzMSwyMzExMiwyMzE4MiwyMzEwMiwyMzExNywyMzA5NywyMzExNiwyMzE1MiwyMzE0NSwyMzExMSwyMzEy''@;'; put 'put ''MSwyMzEyNiwyMzEwNiwyMzEzMiwyMzQxMCwyMzQwNiwyMzQ4OSwyMzQ4OCwyMzY0MSwyMzgzOCwyMzgxOSwyMzgzNywyMzgzNCwyMzg0MCwyMzgyMCwyMzg0OCwyMzgyMSwyMzg0NiwyMzg0NSwyMzgyMywyMzg1NiwyMzgyNiwyMzg0MywyMzgzOSwyMzg1NCwyNDEyNiwyNDExNiwyNDI0MSwy''@;'; put 'put ''NDI0NCwyNDI0OSwyNDI0MiwyNDI0MywyNDM3NCwyNDM3NiwyNDQ3NSwyNDQ3MCwyNDQ3OSwyNDcxNCwyNDcyMCwyNDcxMCwyNDc2NiwyNDc1MiwyNDc2MiwyNDc4NywyNDc4OCwyNDc4MywyNDgwNCwyNDc5MywyNDc5NywyNDc3NiwyNDc1MywyNDc5NSwyNDc1OSwyNDc3OCwyNDc2NywyNDc3''@;'; put 'put ''MSwyNDc4MSwyNDc2OCwyNTM5NCwyNTQ0NSwyNTQ4MiwyNTQ3NCwyNTQ2OSwyNTUzMywyNTUwMiwyNTUxNywyNTUwMSwyNTQ5NSwyNTUxNSwyNTQ4NiwyNTQ1NSwyNTQ3OSwyNTQ4OCwyNTQ1NCwyNTUxOSwyNTQ2MSwyNTUwMCwyNTQ1MywyNTUxOCwyNTQ2OCwyNTUwOCwyNTQwMywyNTUwMywy''@;'; put 'put ''NTQ2NCwyNTQ3NywyNTQ3MywyNTQ4OSwyNTQ4NSwyNTQ1NiwyNTkzOSwyNjA2MSwyNjIxMywyNjIwOSwyNjIwMywyNjIwMSwyNjIwNCwyNjIxMCwyNjM5MiwyNjc0NSwyNjc1OSwyNjc2OCwyNjc4MCwyNjczMywyNjczNCwyNjc5OCwyNjc5NSwyNjk2NiwyNjczNSwyNjc4NywyNjc5NiwyNjc5''@;'; put 'put ''MywyNjc0MSwyNjc0MCwyNjgwMiwyNjc2NywyNjc0MywyNjc3MCwyNjc0OCwyNjczMSwyNjczOCwyNjc5NCwyNjc1MiwyNjczNywyNjc1MCwyNjc3OSwyNjc3NCwyNjc2MywyNjc4NCwyNjc2MSwyNjc4OCwyNjc0NCwyNjc0NywyNjc2OSwyNjc2NCwyNjc2MiwyNjc0OSwyNzQ0NiwyNzQ0Mywy''@;'; put 'put ''NzQ0NywyNzQ0OCwyNzUzNywyNzUzNSwyNzUzMywyNzUzNCwyNzUzMiwyNzY5MCwyODA5NiwyODA3NSwyODA4NCwyODA4MywyODI3NiwyODA3NiwyODEzNywyODEzMCwyODA4NywyODE1MCwyODExNiwyODE2MCwyODEwNCwyODEyOCwyODEyNywyODExOCwyODA5NCwyODEzMywyODEyNCwyODEy''@;'; put 'put ''NSwyODEyMywyODE0OCwyODEwNiwyODA5MywyODE0MSwyODE0NCwyODA5MCwyODExNywyODA5OCwyODExMSwyODEwNSwyODExMiwyODE0NiwyODExNSwyODE1NywyODExOSwyODEwOSwyODEzMSwyODA5MSwyODkyMiwyODk0MSwyODkxOSwyODk1MSwyODkxNiwyODk0MCwyODkxMiwyODkzMiwy''@;'; put 'put ''ODkxNSwyODk0NCwyODkyNCwyODkyNywyODkzNCwyODk0NywyODkyOCwyODkyMCwyODkxOCwyODkzOSwyODkzMCwyODk0MiwyOTMxMCwyOTMwNywyOTMwOCwyOTMxMSwyOTQ2OSwyOTQ2MywyOTQ0NywyOTQ1NywyOTQ2NCwyOTQ1MCwyOTQ0OCwyOTQzOSwyOTQ1NSwyOTQ3MCwyOTU3NiwyOTY4''@;'; put 'put ''NiwyOTY4OCwyOTY4NSwyOTcwMCwyOTY5NywyOTY5MywyOTcwMywyOTY5NiwyOTY5MCwyOTY5MiwyOTY5NSwyOTcwOCwyOTcwNywyOTY4NCwyOTcwNCwzMDA1MiwzMDA1MSwzMDE1OCwzMDE2MiwzMDE1OSwzMDE1NSwzMDE1NiwzMDE2MSwzMDE2MCwzMDM1MSwzMDM0NSwzMDQxOSwzMDUyMSwz''@;'; put 'put ''MDUxMSwzMDUwOSwzMDUxMywzMDUxNCwzMDUxNiwzMDUxNSwzMDUyNSwzMDUwMSwzMDUyMywzMDUxNywzMDc5MiwzMDgwMiwzMDc5MywzMDc5NywzMDc5NCwzMDc5NiwzMDc1OCwzMDc4OSwzMDgwMCwzMTA3NiwzMTA3OSwzMTA4MSwzMTA4MiwzMTA3NSwzMTA4MywzMTA3MywzMTE2MywzMTIy''@;'; put 'put ''NiwzMTIyNCwzMTIyMiwzMTIyMywzMTM3NSwzMTM4MCwzMTM3NiwzMTU0MSwzMTU1OSwzMTU0MCwzMTUyNSwzMTUzNiwzMTUyMiwzMTUyNCwzMTUzOSwzMTUxMiwzMTUzMCwzMTUxNywzMTUzNywzMTUzMSwzMTUzMywzMTUzNSwzMTUzOCwzMTU0NCwzMTUxNCwzMTUyMywzMTg5MiwzMTg5Niwz''@;'; put 'put ''MTg5NCwzMTkwNywzMjA1MywzMjA2MSwzMjA1NiwzMjA1NCwzMjA1OCwzMjA2OSwzMjA0NCwzMjA0MSwzMjA2NSwzMjA3MSwzMjA2MiwzMjA2MywzMjA3NCwzMjA1OSwzMjA0MCwzMjYxMSwzMjY2MSwzMjY2OCwzMjY2OSwzMjY2NywzMjcxNCwzMjcxNSwzMjcxNywzMjcyMCwzMjcyMSwzMjcx''@;'; put 'put ''MSwzMjcxOSwzMjcxMywzMjc5OSwzMjc5OCwzMjc5NSwzMjgzOSwzMjgzNSwzMjg0MCwzMzA0OCwzMzA2MSwzMzA0OSwzMzA1MSwzMzA2OSwzMzA1NSwzMzA2OCwzMzA1NCwzMzA1NywzMzA0NSwzMzA2MywzMzA1MywzMzA1OCwzMzI5NywzMzMzNiwzMzMzMSwzMzMzOCwzMzMzMiwzMzMzMCwz''@;'; put 'put ''MzM5NiwzMzY4MCwzMzY5OSwzMzcwNCwzMzY3NywzMzY1OCwzMzY1MSwzMzcwMCwzMzY1MiwzMzY3OSwzMzY2NSwzMzY4NSwzMzY4OSwzMzY1MywzMzY4NCwzMzcwNSwzMzY2MSwzMzY2NywzMzY3NiwzMzY5MywzMzY5MSwzMzcwNiwzMzY3NSwzMzY2MiwzMzcwMSwzMzcxMSwzMzY3MiwzMzY4''@;'; put 'put ''NywzMzcxMiwzMzY2MywzMzcwMiwzMzY3MSwzMzcxMCwzMzY1NCwzMzY5MCwzNDM5MywzNDM5MCwzNDQ5NSwzNDQ4NywzNDQ5OCwzNDQ5NywzNDUwMSwzNDQ5MCwzNDQ4MCwzNDUwNCwzNDQ4OSwzNDQ4MywzNDQ4OCwzNDUwOCwzNDQ4NCwzNDQ5MSwzNDQ5MiwzNDQ5OSwzNDQ5MywzNDQ5NCwz''@;'; put 'put ''NDg5OCwzNDk1MywzNDk2NSwzNDk4NCwzNDk3OCwzNDk4NiwzNDk3MCwzNDk2MSwzNDk3NywzNDk3NSwzNDk2OCwzNDk4MywzNDk2OSwzNDk3MSwzNDk2NywzNDk4MCwzNDk4OCwzNDk1NiwzNDk2MywzNDk1OCwzNTIwMiwzNTI4NiwzNTI4OSwzNTI4NSwzNTM3NiwzNTM2NywzNTM3MiwzNTM1''@;'; put 'put ''OCwzNTg5NywzNTg5OSwzNTkzMiwzNTkzMywzNTk2NSwzNjAwNSwzNjIyMSwzNjIxOSwzNjIxNywzNjI4NCwzNjI5MCwzNjI4MSwzNjI4NywzNjI4OSwzNjU2OCwzNjU3NCwzNjU3MywzNjU3MiwzNjU2NywzNjU3NiwzNjU3NywzNjkwMCwzNjg3NSwzNjg4MSwzNjg5MiwzNjg3NiwzNjg5Nywz''@;'; put 'put ''NzEwMywzNzA5OCwzNzEwNCwzNzEwOCwzNzEwNiwzNzEwNywzNzA3NiwzNzA5OSwzNzEwMCwzNzA5NywzNzIwNiwzNzIwOCwzNzIxMCwzNzIwMywzNzIwNSwzNzM1NiwzNzM2NCwzNzM2MSwzNzM2MywzNzM2OCwzNzM0OCwzNzM2OSwzNzM1NCwzNzM1NSwzNzM2NywzNzM1MiwzNzM1OCwzODI2''@;'; put 'put ''NiwzODI3OCwzODI4MCwzODUyNCwzODUwOSwzODUwNywzODUxMywzODUxMSwzODU5MSwzODc2MiwzODkxNiwzOTE0MSwzOTMxOSwyMDYzNSwyMDYyOSwyMDYyOCwyMDYzOCwyMDYxOSwyMDY0MywyMDYxMSwyMDYyMCwyMDYyMiwyMDYzNywyMDU4NCwyMDYzNiwyMDYyNiwyMDYxMCwyMDYxNSwy''@;'; put 'put ''MDgzMSwyMDk0OCwyMTI2NiwyMTI2NSwyMTQxMiwyMTQxNSwyMTkwNSwyMTkyOCwyMTkyNSwyMTkzMywyMTg3OSwyMjA4NSwyMTkyMiwyMTkwNywyMTg5NiwyMTkwMywyMTk0MSwyMTg4OSwyMTkyMywyMTkwNiwyMTkyNCwyMTg4NSwyMTkwMCwyMTkyNiwyMTg4NywyMTkwOSwyMTkyMSwyMTkw''@;'; put 'put ''MiwyMjI4NCwyMjU2OSwyMjU4MywyMjU1MywyMjU1OCwyMjU2NywyMjU2MywyMjU2OCwyMjUxNywyMjYwMCwyMjU2NSwyMjU1NiwyMjU1NSwyMjU3OSwyMjU5MSwyMjU4MiwyMjU3NCwyMjU4NSwyMjU4NCwyMjU3MywyMjU3MiwyMjU4NywyMjg4MSwyMzIxNSwyMzE4OCwyMzE5OSwyMzE2Miwy''@;'; put 'put ''MzIwMiwyMzE5OCwyMzE2MCwyMzIwNiwyMzE2NCwyMzIwNSwyMzIxMiwyMzE4OSwyMzIxNCwyMzA5NSwyMzE3MiwyMzE3OCwyMzE5MSwyMzE3MSwyMzE3OSwyMzIwOSwyMzE2MywyMzE2NSwyMzE4MCwyMzE5NiwyMzE4MywyMzE4NywyMzE5NywyMzUzMCwyMzUwMSwyMzQ5OSwyMzUwOCwyMzUw''@;'; put 'put ''NSwyMzQ5OCwyMzUwMiwyMzU2NCwyMzYwMCwyMzg2MywyMzg3NSwyMzkxNSwyMzg3MywyMzg4MywyMzg3MSwyMzg2MSwyMzg4OSwyMzg4NiwyMzg5MywyMzg1OSwyMzg2NiwyMzg5MCwyMzg2OSwyMzg1NywyMzg5NywyMzg3NCwyMzg2NSwyMzg4MSwyMzg2NCwyMzg2OCwyMzg1OCwyMzg2Miwy''@;'; put 'put ''Mzg3MiwyMzg3NywyNDEzMiwyNDEyOSwyNDQwOCwyNDQ4NiwyNDQ4NSwyNDQ5MSwyNDc3NywyNDc2MSwyNDc4MCwyNDgwMiwyNDc4MiwyNDc3MiwyNDg1MiwyNDgxOCwyNDg0MiwyNDg1NCwyNDgzNywyNDgyMSwyNDg1MSwyNDgyNCwyNDgyOCwyNDgzMCwyNDc2OSwyNDgzNSwyNDg1NiwyNDg2''@;'; put 'put ''MSwyNDg0OCwyNDgzMSwyNDgzNiwyNDg0MywyNTE2MiwyNTQ5MiwyNTUyMSwyNTUyMCwyNTU1MCwyNTU3MywyNTU3NiwyNTU4MywyNTUzOSwyNTc1NywyNTU4NywyNTU0NiwyNTU2OCwyNTU5MCwyNTU1NywyNTU4NiwyNTU4OSwyNTY5NywyNTU2NywyNTUzNCwyNTU2NSwyNTU2NCwyNTU0MCwy''@;'; put 'put ''NTU2MCwyNTU1NSwyNTUzOCwyNTU0MywyNTU0OCwyNTU0NywyNTU0NCwyNTU4NCwyNTU1OSwyNTU2MSwyNTkwNiwyNTk1OSwyNTk2MiwyNTk1NiwyNTk0OCwyNTk2MCwyNTk1NywyNTk5NiwyNjAxMywyNjAxNCwyNjAzMCwyNjA2NCwyNjA2NiwyNjIzNiwyNjIyMCwyNjIzNSwyNjI0MCwyNjIy''@;'; put 'put ''NSwyNjIzMywyNjIxOCwyNjIyNiwyNjM2OSwyNjg5MiwyNjgzNSwyNjg4NCwyNjg0NCwyNjkyMiwyNjg2MCwyNjg1OCwyNjg2NSwyNjg5NSwyNjgzOCwyNjg3MSwyNjg1OSwyNjg1MiwyNjg3MCwyNjg5OSwyNjg5NiwyNjg2NywyNjg0OSwyNjg4NywyNjgyOCwyNjg4OCwyNjk5MiwyNjgwNCwy''@;'; put 'put ''Njg5NywyNjg2MywyNjgyMiwyNjkwMCwyNjg3MiwyNjgzMiwyNjg3NywyNjg3NiwyNjg1NiwyNjg5MSwyNjg5MCwyNjkwMywyNjgzMCwyNjgyNCwyNjg0NSwyNjg0NiwyNjg1NCwyNjg2OCwyNjgzMywyNjg4NiwyNjgzNiwyNjg1NywyNjkwMSwyNjkxNywyNjgyMywyNzQ0OSwyNzQ1MSwyNzQ1''@;'; put 'put ''NSwyNzQ1MiwyNzU0MCwyNzU0MywyNzU0NSwyNzU0MSwyNzU4MSwyNzYzMiwyNzYzNCwyNzYzNSwyNzY5NiwyODE1NiwyODIzMCwyODIzMSwyODE5MSwyODIzMywyODI5NiwyODIyMCwyODIyMSwyODIyOSwyODI1OCwyODIwMywyODIyMywyODIyNSwyODI1MywyODI3NSwyODE4OCwyODIxMSwy''@;'; put 'put ''ODIzNSwyODIyNCwyODI0MSwyODIxOSwyODE2MywyODIwNiwyODI1NCwyODI2NCwyODI1MiwyODI1NywyODIwOSwyODIwMCwyODI1NiwyODI3MywyODI2NywyODIxNywyODE5NCwyODIwOCwyODI0MywyODI2MSwyODE5OSwyODI4MCwyODI2MCwyODI3OSwyODI0NSwyODI4MSwyODI0MiwyODI2''@;'; put 'put ''MiwyODIxMywyODIxNCwyODI1MCwyODk2MCwyODk1OCwyODk3NSwyODkyMywyODk3NCwyODk3NywyODk2MywyODk2NSwyODk2MiwyODk3OCwyODk1OSwyODk2OCwyODk4NiwyODk1NSwyOTI1OSwyOTI3NCwyOTMyMCwyOTMyMSwyOTMxOCwyOTMxNywyOTMyMywyOTQ1OCwyOTQ1MSwyOTQ4OCwy''@;'; put 'put ''OTQ3NCwyOTQ4OSwyOTQ5MSwyOTQ3OSwyOTQ5MCwyOTQ4NSwyOTQ3OCwyOTQ3NSwyOTQ5MywyOTQ1MiwyOTc0MiwyOTc0MCwyOTc0NCwyOTczOSwyOTcxOCwyOTcyMiwyOTcyOSwyOTc0MSwyOTc0NSwyOTczMiwyOTczMSwyOTcyNSwyOTczNywyOTcyOCwyOTc0NiwyOTk0NywyOTk5OSwzMDA2''@;'; put 'put ''MywzMDA2MCwzMDE4MywzMDE3MCwzMDE3NywzMDE4MiwzMDE3MywzMDE3NSwzMDE4MCwzMDE2NywzMDM1NywzMDM1NCwzMDQyNiwzMDUzNCwzMDUzNSwzMDUzMiwzMDU0MSwzMDUzMywzMDUzOCwzMDU0MiwzMDUzOSwzMDU0MCwzMDY4NiwzMDcwMCwzMDgxNiwzMDgyMCwzMDgyMSwzMDgxMiwz''@;'; put 'put ''MDgyOSwzMDgzMywzMDgyNiwzMDgzMCwzMDgzMiwzMDgyNSwzMDgyNCwzMDgxNCwzMDgxOCwzMTA5MiwzMTA5MSwzMTA5MCwzMTA4OCwzMTIzNCwzMTI0MiwzMTIzNSwzMTI0NCwzMTIzNiwzMTM4NSwzMTQ2MiwzMTQ2MCwzMTU2MiwzMTU0NywzMTU1NiwzMTU2MCwzMTU2NCwzMTU2NiwzMTU1''@;'; put 'put ''MiwzMTU3NiwzMTU1NywzMTkwNiwzMTkwMiwzMTkxMiwzMTkwNSwzMjA4OCwzMjExMSwzMjA5OSwzMjA4MywzMjA4NiwzMjEwMywzMjEwNiwzMjA3OSwzMjEwOSwzMjA5MiwzMjEwNywzMjA4MiwzMjA4NCwzMjEwNSwzMjA4MSwzMjA5NSwzMjA3OCwzMjU3NCwzMjU3NSwzMjYxMywzMjYxNCwz''@;'; put 'put ''MjY3NCwzMjY3MiwzMjY3MywzMjcyNywzMjg0OSwzMjg0NywzMjg0OCwzMzAyMiwzMjk4MCwzMzA5MSwzMzA5OCwzMzEwNiwzMzEwMywzMzA5NSwzMzA4NSwzMzEwMSwzMzA4MiwzMzI1NCwzMzI2MiwzMzI3MSwzMzI3MiwzMzI3MywzMzI4NCwzMzM0MCwzMzM0MSwzMzM0MywzMzM5NywzMzU5''@;'; put 'put ''NSwzMzc0MywzMzc4NSwzMzgyNywzMzcyOCwzMzc2OCwzMzgxMCwzMzc2NywzMzc2NCwzMzc4OCwzMzc4MiwzMzgwOCwzMzczNCwzMzczNiwzMzc3MSwzMzc2MywzMzcyNywzMzc5MywzMzc1NywzMzc2NSwzMzc1MiwzMzc5MSwzMzc2MSwzMzczOSwzMzc0MiwzMzc1MCwzMzc4MSwzMzczNywz''@;'; put 'put ''MzgwMSwzMzgwNywzMzc1OCwzMzgwOSwzMzc5OCwzMzczMCwzMzc3OSwzMzc0OSwzMzc4NiwzMzczNSwzMzc0NSwzMzc3MCwzMzgxMSwzMzczMSwzMzc3MiwzMzc3NCwzMzczMiwzMzc4NywzMzc1MSwzMzc2MiwzMzgxOSwzMzc1NSwzMzc5MCwzNDUyMCwzNDUzMCwzNDUzNCwzNDUxNSwzNDUz''@;'; put 'put ''MSwzNDUyMiwzNDUzOCwzNDUyNSwzNDUzOSwzNDUyNCwzNDU0MCwzNDUzNywzNDUxOSwzNDUzNiwzNDUxMywzNDg4OCwzNDkwMiwzNDkwMSwzNTAwMiwzNTAzMSwzNTAwMSwzNWUzLDM1MDA4LDM1MDA2LDM0OTk4LDM1MDA0LDM0OTk5LDM1MDA1LDM0OTk0LDM1MDczLDM1MDE3LDM1MjIxLDM1''@;'; put 'put ''MjI0LDM1MjIzLDM1MjkzLDM1MjkwLDM1MjkxLDM1NDA2LDM1NDA1LDM1Mzg1LDM1NDE3LDM1MzkyLDM1NDE1LDM1NDE2LDM1Mzk2LDM1Mzk3LDM1NDEwLDM1NDAwLDM1NDA5LDM1NDAyLDM1NDA0LDM1NDA3LDM1OTM1LDM1OTY5LDM1OTY4LDM2MDI2LDM2MDMwLDM2MDE2LDM2MDI1LDM2MDIx''@;'; put 'put ''LDM2MjI4LDM2MjI0LDM2MjMzLDM2MzEyLDM2MzA3LDM2MzAxLDM2Mjk1LDM2MzEwLDM2MzE2LDM2MzAzLDM2MzA5LDM2MzEzLDM2Mjk2LDM2MzExLDM2MjkzLDM2NTkxLDM2NTk5LDM2NjAyLDM2NjAxLDM2NTgyLDM2NTkwLDM2NTgxLDM2NTk3LDM2NTgzLDM2NTg0LDM2NTk4LDM2NTg3LDM2''@;'; put 'put ''NTkzLDM2NTg4LDM2NTk2LDM2NTg1LDM2OTA5LDM2OTE2LDM2OTExLDM3MTI2LDM3MTY0LDM3MTI0LDM3MTE5LDM3MTE2LDM3MTI4LDM3MTEzLDM3MTE1LDM3MTIxLDM3MTIwLDM3MTI3LDM3MTI1LDM3MTIzLDM3MjE3LDM3MjIwLDM3MjE1LDM3MjE4LDM3MjE2LDM3Mzc3LDM3Mzg2LDM3NDEz''@;'; put 'put ''LDM3Mzc5LDM3NDAyLDM3NDE0LDM3MzkxLDM3Mzg4LDM3Mzc2LDM3Mzk0LDM3Mzc1LDM3MzczLDM3MzgyLDM3MzgwLDM3NDE1LDM3Mzc4LDM3NDA0LDM3NDEyLDM3NDAxLDM3Mzk5LDM3MzgxLDM3Mzk4LDM4MjY3LDM4Mjg1LDM4Mjg0LDM4Mjg4LDM4NTM1LDM4NTI2LDM4NTM2LDM4NTM3LDM4''@;'; put 'put ''NTMxLDM4NTI4LDM4NTk0LDM4NjAwLDM4NTk1LDM4NjQxLDM4NjQwLDM4NzY0LDM4NzY4LDM4NzY2LDM4OTE5LDM5MDgxLDM5MTQ3LDQwMTY2LDQwNjk3LDIwMDk5LDIwMTAwLDIwMTUwLDIwNjY5LDIwNjcxLDIwNjc4LDIwNjU0LDIwNjc2LDIwNjgyLDIwNjYwLDIwNjgwLDIwNjc0LDIwNjU2''@;'; put 'put ''LDIwNjczLDIwNjY2LDIwNjU3LDIwNjgzLDIwNjgxLDIwNjYyLDIwNjY0LDIwOTUxLDIxMTE0LDIxMTEyLDIxMTE1LDIxMTE2LDIxOTU1LDIxOTc5LDIxOTY0LDIxOTY4LDIxOTYzLDIxOTYyLDIxOTgxLDIxOTUyLDIxOTcyLDIxOTU2LDIxOTkzLDIxOTUxLDIxOTcwLDIxOTAxLDIxOTY3LDIx''@;'; put 'put ''OTczLDIxOTg2LDIxOTc0LDIxOTYwLDIyMDAyLDIxOTY1LDIxOTc3LDIxOTU0LDIyMjkyLDIyNjExLDIyNjMyLDIyNjI4LDIyNjA3LDIyNjA1LDIyNjAxLDIyNjM5LDIyNjEzLDIyNjA2LDIyNjIxLDIyNjE3LDIyNjI5LDIyNjE5LDIyNTg5LDIyNjI3LDIyNjQxLDIyNzgwLDIzMjM5LDIzMjM2''@;'; put 'put ''LDIzMjQzLDIzMjI2LDIzMjI0LDIzMjE3LDIzMjIxLDIzMjE2LDIzMjMxLDIzMjQwLDIzMjI3LDIzMjM4LDIzMjIzLDIzMjMyLDIzMjQyLDIzMjIwLDIzMjIyLDIzMjQ1LDIzMjI1LDIzMTg0LDIzNTEwLDIzNTEyLDIzNTEzLDIzNTgzLDIzNjAzLDIzOTIxLDIzOTA3LDIzODgyLDIzOTA5LDIz''@;'; put 'put ''OTIyLDIzOTE2LDIzOTAyLDIzOTEyLDIzOTExLDIzOTA2LDI0MDQ4LDI0MTQzLDI0MTQyLDI0MTM4LDI0MTQxLDI0MTM5LDI0MjYxLDI0MjY4LDI0MjYyLDI0MjY3LDI0MjYzLDI0Mzg0LDI0NDk1LDI0NDkzLDI0ODIzLDI0OTA1LDI0OTA2LDI0ODc1LDI0OTAxLDI0ODg2LDI0ODgyLDI0ODc4''@;'; put 'put ''LDI0OTAyLDI0ODc5LDI0OTExLDI0ODczLDI0ODk2LDI1MTIwLDM3MjI0LDI1MTIzLDI1MTI1LDI1MTI0LDI1NTQxLDI1NTg1LDI1NTc5LDI1NjE2LDI1NjE4LDI1NjA5LDI1NjMyLDI1NjM2LDI1NjUxLDI1NjY3LDI1NjMxLDI1NjIxLDI1NjI0LDI1NjU3LDI1NjU1LDI1NjM0LDI1NjM1LDI1''@;'; put 'put ''NjEyLDI1NjM4LDI1NjQ4LDI1NjQwLDI1NjY1LDI1NjUzLDI1NjQ3LDI1NjEwLDI1NjI2LDI1NjY0LDI1NjM3LDI1NjM5LDI1NjExLDI1NTc1LDI1NjI3LDI1NjQ2LDI1NjMzLDI1NjE0LDI1OTY3LDI2MDAyLDI2MDY3LDI2MjQ2LDI2MjUyLDI2MjYxLDI2MjU2LDI2MjUxLDI2MjUwLDI2MjY1''@;'; put 'put ''LDI2MjYwLDI2MjMyLDI2NDAwLDI2OTgyLDI2OTc1LDI2OTM2LDI2OTU4LDI2OTc4LDI2OTkzLDI2OTQzLDI2OTQ5LDI2OTg2LDI2OTM3LDI2OTQ2LDI2OTY3LDI2OTY5LDI3MDAyLDI2OTUyLDI2OTUzLDI2OTMzLDI2OTg4LDI2OTMxLDI2OTQxLDI2OTgxLDI2ODY0LDI3ZTMsMjY5MzIsMjY5''@;'; put 'put ''ODUsMjY5NDQsMjY5OTEsMjY5NDgsMjY5OTgsMjY5NjgsMjY5NDUsMjY5OTYsMjY5NTYsMjY5MzksMjY5NTUsMjY5MzUsMjY5NzIsMjY5NTksMjY5NjEsMjY5MzAsMjY5NjIsMjY5MjcsMjcwMDMsMjY5NDAsMjc0NjIsMjc0NjEsMjc0NTksMjc0NTgsMjc0NjQsMjc0NTcsMjc1NDcsNjQwMTMs''@;'; put 'put ''Mjc2NDMsMjc2NDQsMjc2NDEsMjc2MzksMjc2NDAsMjgzMTUsMjgzNzQsMjgzNjAsMjgzMDMsMjgzNTIsMjgzMTksMjgzMDcsMjgzMDgsMjgzMjAsMjgzMzcsMjgzNDUsMjgzNTgsMjgzNzAsMjgzNDksMjgzNTMsMjgzMTgsMjgzNjEsMjgzNDMsMjgzMzYsMjgzNjUsMjgzMjYsMjgzNjcsMjgz''@;'; put 'put ''MzgsMjgzNTAsMjgzNTUsMjgzODAsMjgzNzYsMjgzMTMsMjgzMDYsMjgzMDIsMjgzMDEsMjgzMjQsMjgzMjEsMjgzNTEsMjgzMzksMjgzNjgsMjgzNjIsMjgzMTEsMjgzMzQsMjgzMjMsMjg5OTksMjkwMTIsMjkwMTAsMjkwMjcsMjkwMjQsMjg5OTMsMjkwMjEsMjkwMjYsMjkwNDIsMjkwNDgs''@;'; put 'put ''MjkwMzQsMjkwMjUsMjg5OTQsMjkwMTYsMjg5OTUsMjkwMDMsMjkwNDAsMjkwMjMsMjkwMDgsMjkwMTEsMjg5OTYsMjkwMDUsMjkwMTgsMjkyNjMsMjkzMjUsMjkzMjQsMjkzMjksMjkzMjgsMjkzMjYsMjk1MDAsMjk1MDYsMjk0OTksMjk0OTgsMjk1MDQsMjk1MTQsMjk1MTMsMjk3NjQsMjk3''@;'; put 'put ''NzAsMjk3NzEsMjk3NzgsMjk3NzcsMjk3ODMsMjk3NjAsMjk3NzUsMjk3NzYsMjk3NzQsMjk3NjIsMjk3NjYsMjk3NzMsMjk3ODAsMjk5MjEsMjk5NTEsMjk5NTAsMjk5NDksMjk5ODEsMzAwNzMsMzAwNzEsMjcwMTEsMzAxOTEsMzAyMjMsMzAyMTEsMzAxOTksMzAyMDYsMzAyMDQsMzAyMDEs''@;'; put 'put ''MzAyMDAsMzAyMjQsMzAyMDMsMzAxOTgsMzAxODksMzAxOTcsMzAyMDUsMzAzNjEsMzAzODksMzA0MjksMzA1NDksMzA1NTksMzA1NjAsMzA1NDYsMzA1NTAsMzA1NTQsMzA1NjksMzA1NjcsMzA1NDgsMzA1NTMsMzA1NzMsMzA2ODgsMzA4NTUsMzA4NzQsMzA4NjgsMzA4NjMsMzA4NTIsMzA4''@;'; put 'put ''NjksMzA4NTMsMzA4NTQsMzA4ODEsMzA4NTEsMzA4NDEsMzA4NzMsMzA4NDgsMzA4NzAsMzA4NDMsMzExMDAsMzExMDYsMzExMDEsMzEwOTcsMzEyNDksMzEyNTYsMzEyNTcsMzEyNTAsMzEyNTUsMzEyNTMsMzEyNjYsMzEyNTEsMzEyNTksMzEyNDgsMzEzOTUsMzEzOTQsMzEzOTAsMzE0Njcs''@;'; put 'put ''MzE1OTAsMzE1ODgsMzE1OTcsMzE2MDQsMzE1OTMsMzE2MDIsMzE1ODksMzE2MDMsMzE2MDEsMzE2MDAsMzE1ODUsMzE2MDgsMzE2MDYsMzE1ODcsMzE5MjIsMzE5MjQsMzE5MTksMzIxMzYsMzIxMzQsMzIxMjgsMzIxNDEsMzIxMjcsMzIxMzMsMzIxMjIsMzIxNDIsMzIxMjMsMzIxMzEsMzIx''@;'; put 'put ''MjQsMzIxNDAsMzIxNDgsMzIxMzIsMzIxMjUsMzIxNDYsMzI2MjEsMzI2MTksMzI2MTUsMzI2MTYsMzI2MjAsMzI2NzgsMzI2NzcsMzI2NzksMzI3MzEsMzI3MzIsMzI4MDEsMzMxMjQsMzMxMjAsMzMxNDMsMzMxMTYsMzMxMjksMzMxMTUsMzMxMjIsMzMxMzgsMjY0MDEsMzMxMTgsMzMxNDIs''@;'; put 'put ''MzMxMjcsMzMxMzUsMzMwOTIsMzMxMjEsMzMzMDksMzMzNTMsMzMzNDgsMzMzNDQsMzMzNDYsMzMzNDksMzQwMzMsMzM4NTUsMzM4NzgsMzM5MTAsMzM5MTMsMzM5MzUsMzM5MzMsMzM4OTMsMzM4NzMsMzM4NTYsMzM5MjYsMzM4OTUsMzM4NDAsMzM4NjksMzM5MTcsMzM4ODIsMzM4ODEsMzM5''@;'; put 'put ''MDgsMzM5MDcsMzM4ODUsMzQwNTUsMzM4ODYsMzM4NDcsMzM4NTAsMzM4NDQsMzM5MTQsMzM4NTksMzM5MTIsMzM4NDIsMzM4NjEsMzM4MzMsMzM3NTMsMzM4NjcsMzM4MzksMzM4NTgsMzM4MzcsMzM4ODcsMzM5MDQsMzM4NDksMzM4NzAsMzM4NjgsMzM4NzQsMzM5MDMsMzM5ODksMzM5MzQs''@;'; put 'put ''MzM4NTEsMzM4NjMsMzM4NDYsMzM4NDMsMzM4OTYsMzM5MTgsMzM4NjAsMzM4MzUsMzM4ODgsMzM4NzYsMzM5MDIsMzM4NzIsMzQ1NzEsMzQ1NjQsMzQ1NTEsMzQ1NzIsMzQ1NTQsMzQ1MTgsMzQ1NDksMzQ2MzcsMzQ1NTIsMzQ1NzQsMzQ1NjksMzQ1NjEsMzQ1NTAsMzQ1NzMsMzQ1NjUsMzUw''@;'; put 'put ''MzAsMzUwMTksMzUwMjEsMzUwMjIsMzUwMzgsMzUwMzUsMzUwMzQsMzUwMjAsMzUwMjQsMzUyMDUsMzUyMjcsMzUyOTUsMzUzMDEsMzUzMDAsMzUyOTcsMzUyOTYsMzUyOTgsMzUyOTIsMzUzMDIsMzU0NDYsMzU0NjIsMzU0NTUsMzU0MjUsMzUzOTEsMzU0NDcsMzU0NTgsMzU0NjAsMzU0NDUs''@;'; put 'put ''MzU0NTksMzU0NTcsMzU0NDQsMzU0NTAsMzU5MDAsMzU5MTUsMzU5MTQsMzU5NDEsMzU5NDAsMzU5NDIsMzU5NzQsMzU5NzIsMzU5NzMsMzYwNDQsMzYyMDAsMzYyMDEsMzYyNDEsMzYyMzYsMzYyMzgsMzYyMzksMzYyMzcsMzYyNDMsMzYyNDQsMzYyNDAsMzYyNDIsMzYzMzYsMzYzMjAsMzYz''@;'; put 'put ''MzIsMzYzMzcsMzYzMzQsMzYzMDQsMzYzMjksMzYzMjMsMzYzMjIsMzYzMjcsMzYzMzgsMzYzMzEsMzYzNDAsMzY2MTQsMzY2MDcsMzY2MDksMzY2MDgsMzY2MTMsMzY2MTUsMzY2MTYsMzY2MTAsMzY2MTksMzY5NDYsMzY5MjcsMzY5MzIsMzY5MzcsMzY5MjUsMzcxMzYsMzcxMzMsMzcxMzUs''@;'; put 'put ''MzcxMzcsMzcxNDIsMzcxNDAsMzcxMzEsMzcxMzQsMzcyMzAsMzcyMzEsMzc0NDgsMzc0NTgsMzc0MjQsMzc0MzQsMzc0NzgsMzc0MjcsMzc0NzcsMzc0NzAsMzc1MDcsMzc0MjIsMzc0NTAsMzc0NDYsMzc0ODUsMzc0ODQsMzc0NTUsMzc0NzIsMzc0NzksMzc0ODcsMzc0MzAsMzc0NzMsMzc0''@;'; put 'put ''ODgsMzc0MjUsMzc0NjAsMzc0NzUsMzc0NTYsMzc0OTAsMzc0NTQsMzc0NTksMzc0NTIsMzc0NjIsMzc0MjYsMzgzMDMsMzgzMDAsMzgzMDIsMzgyOTksMzg1NDYsMzg1NDcsMzg1NDUsMzg1NTEsMzg2MDYsMzg2NTAsMzg2NTMsMzg2NDgsMzg2NDUsMzg3NzEsMzg3NzUsMzg3NzYsMzg3NzAs''@;'; put 'put ''Mzg5MjcsMzg5MjUsMzg5MjYsMzkwODQsMzkxNTgsMzkxNjEsMzkzNDMsMzkzNDYsMzkzNDQsMzkzNDksMzk1OTcsMzk1OTUsMzk3NzEsNDAxNzAsNDAxNzMsNDAxNjcsNDA1NzYsNDA3MDEsMjA3MTAsMjA2OTIsMjA2OTUsMjA3MTIsMjA3MjMsMjA2OTksMjA3MTQsMjA3MDEsMjA3MDgsMjA2''@;'; put 'put ''OTEsMjA3MTYsMjA3MjAsMjA3MTksMjA3MDcsMjA3MDQsMjA5NTIsMjExMjAsMjExMjEsMjEyMjUsMjEyMjcsMjEyOTYsMjE0MjAsMjIwNTUsMjIwMzcsMjIwMjgsMjIwMzQsMjIwMTIsMjIwMzEsMjIwNDQsMjIwMTcsMjIwMzUsMjIwMTgsMjIwMTAsMjIwNDUsMjIwMjAsMjIwMTUsMjIwMDks''@;'; put 'put ''MjI2NjUsMjI2NTIsMjI2NzIsMjI2ODAsMjI2NjIsMjI2NTcsMjI2NTUsMjI2NDQsMjI2NjcsMjI2NTAsMjI2NjMsMjI2NzMsMjI2NzAsMjI2NDYsMjI2NTgsMjI2NjQsMjI2NTEsMjI2NzYsMjI2NzEsMjI3ODIsMjI4OTEsMjMyNjAsMjMyNzgsMjMyNjksMjMyNTMsMjMyNzQsMjMyNTgsMjMy''@;'; put 'put ''NzcsMjMyNzUsMjMyODMsMjMyNjYsMjMyNjQsMjMyNTksMjMyNzYsMjMyNjIsMjMyNjEsMjMyNTcsMjMyNzIsMjMyNjMsMjM0MTUsMjM1MjAsMjM1MjMsMjM2NTEsMjM5MzgsMjM5MzYsMjM5MzMsMjM5NDIsMjM5MzAsMjM5MzcsMjM5MjcsMjM5NDYsMjM5NDUsMjM5NDQsMjM5MzQsMjM5MzIs''@;'; put 'put ''MjM5NDksMjM5MjksMjM5MzUsMjQxNTIsMjQxNTMsMjQxNDcsMjQyODAsMjQyNzMsMjQyNzksMjQyNzAsMjQyODQsMjQyNzcsMjQyODEsMjQyNzQsMjQyNzYsMjQzODgsMjQzODcsMjQ0MzEsMjQ1MDIsMjQ4NzYsMjQ4NzIsMjQ4OTcsMjQ5MjYsMjQ5NDUsMjQ5NDcsMjQ5MTQsMjQ5MTUsMjQ5''@;'; put 'put ''NDYsMjQ5NDAsMjQ5NjAsMjQ5NDgsMjQ5MTYsMjQ5NTQsMjQ5MjMsMjQ5MzMsMjQ4OTEsMjQ5MzgsMjQ5MjksMjQ5MTgsMjUxMjksMjUxMjcsMjUxMzEsMjU2NDMsMjU2NzcsMjU2OTEsMjU2OTMsMjU3MTYsMjU3MTgsMjU3MTQsMjU3MTUsMjU3MjUsMjU3MTcsMjU3MDIsMjU3NjYsMjU2Nzgs''@;'; put 'put ''MjU3MzAsMjU2OTQsMjU2OTIsMjU2NzUsMjU2ODMsMjU2OTYsMjU2ODAsMjU3MjcsMjU2NjMsMjU3MDgsMjU3MDcsMjU2ODksMjU3MDEsMjU3MTksMjU5NzEsMjYwMTYsMjYyNzMsMjYyNzIsMjYyNzEsMjYzNzMsMjYzNzIsMjY0MDIsMjcwNTcsMjcwNjIsMjcwODEsMjcwNDAsMjcwODYsMjcw''@;'; put 'put ''MzAsMjcwNTYsMjcwNTIsMjcwNjgsMjcwMjUsMjcwMzMsMjcwMjIsMjcwNDcsMjcwMjEsMjcwNDksMjcwNzAsMjcwNTUsMjcwNzEsMjcwNzYsMjcwNjksMjcwNDQsMjcwOTIsMjcwNjUsMjcwODIsMjcwMzQsMjcwODcsMjcwNTksMjcwMjcsMjcwNTAsMjcwNDEsMjcwMzgsMjcwOTcsMjcwMzEs''@;'; put 'put ''MjcwMjQsMjcwNzQsMjcwNjEsMjcwNDUsMjcwNzgsMjc0NjYsMjc0NjksMjc0NjcsMjc1NTAsMjc1NTEsMjc1NTIsMjc1ODcsMjc1ODgsMjc2NDYsMjgzNjYsMjg0MDUsMjg0MDEsMjg0MTksMjg0NTMsMjg0MDgsMjg0NzEsMjg0MTEsMjg0NjIsMjg0MjUsMjg0OTQsMjg0NDEsMjg0NDIsMjg0''@;'; put 'put ''NTUsMjg0NDAsMjg0NzUsMjg0MzQsMjgzOTcsMjg0MjYsMjg0NzAsMjg1MzEsMjg0MDksMjgzOTgsMjg0NjEsMjg0ODAsMjg0NjQsMjg0NzYsMjg0NjksMjgzOTUsMjg0MjMsMjg0MzAsMjg0ODMsMjg0MjEsMjg0MTMsMjg0MDYsMjg0NzMsMjg0NDQsMjg0MTIsMjg0NzQsMjg0NDcsMjg0Mjks''@;'; put 'put ''Mjg0NDYsMjg0MjQsMjg0NDksMjkwNjMsMjkwNzIsMjkwNjUsMjkwNTYsMjkwNjEsMjkwNTgsMjkwNzEsMjkwNTEsMjkwNjIsMjkwNTcsMjkwNzksMjkyNTIsMjkyNjcsMjkzMzUsMjkzMzMsMjkzMzEsMjk1MDcsMjk1MTcsMjk1MjEsMjk1MTYsMjk3OTQsMjk4MTEsMjk4MDksMjk4MTMsMjk4''@;'; put 'put ''MTAsMjk3OTksMjk4MDYsMjk5NTIsMjk5NTQsMjk5NTUsMzAwNzcsMzAwOTYsMzAyMzAsMzAyMTYsMzAyMjAsMzAyMjksMzAyMjUsMzAyMTgsMzAyMjgsMzAzOTIsMzA1OTMsMzA1ODgsMzA1OTcsMzA1OTQsMzA1NzQsMzA1OTIsMzA1NzUsMzA1OTAsMzA1OTUsMzA4OTgsMzA4OTAsMzA5MDAs''@;'; put 'put ''MzA4OTMsMzA4ODgsMzA4NDYsMzA4OTEsMzA4NzgsMzA4ODUsMzA4ODAsMzA4OTIsMzA4ODIsMzA4ODQsMzExMjgsMzExMTQsMzExMTUsMzExMjYsMzExMjUsMzExMjQsMzExMjMsMzExMjcsMzExMTIsMzExMjIsMzExMjAsMzEyNzUsMzEzMDYsMzEyODAsMzEyNzksMzEyNzIsMzEyNzAsMzE0''@;'; put 'put ''MDAsMzE0MDMsMzE0MDQsMzE0NzAsMzE2MjQsMzE2NDQsMzE2MjYsMzE2MzMsMzE2MzIsMzE2MzgsMzE2MjksMzE2MjgsMzE2NDMsMzE2MzAsMzE2MjEsMzE2NDAsMjExMjQsMzE2NDEsMzE2NTIsMzE2MTgsMzE5MzEsMzE5MzUsMzE5MzIsMzE5MzAsMzIxNjcsMzIxODMsMzIxOTQsMzIxNjMs''@;'; put 'put ''MzIxNzAsMzIxOTMsMzIxOTIsMzIxOTcsMzIxNTcsMzIyMDYsMzIxOTYsMzIxOTgsMzIyMDMsMzIyMDQsMzIxNzUsMzIxODUsMzIxNTAsMzIxODgsMzIxNTksMzIxNjYsMzIxNzQsMzIxNjksMzIxNjEsMzIyMDEsMzI2MjcsMzI3MzgsMzI3MzksMzI3NDEsMzI3MzQsMzI4MDQsMzI4NjEsMzI4''@;'; put 'put ''NjAsMzMxNjEsMzMxNTgsMzMxNTUsMzMxNTksMzMxNjUsMzMxNjQsMzMxNjMsMzMzMDEsMzM5NDMsMzM5NTYsMzM5NTMsMzM5NTEsMzM5NzgsMzM5OTgsMzM5ODYsMzM5NjQsMzM5NjYsMzM5NjMsMzM5NzcsMzM5NzIsMzM5ODUsMzM5OTcsMzM5NjIsMzM5NDYsMzM5NjksMzRlMywzMzk0OSwz''@;'; put 'put ''Mzk1OSwzMzk3OSwzMzk1NCwzMzk0MCwzMzk5MSwzMzk5NiwzMzk0NywzMzk2MSwzMzk2NywzMzk2MCwzNDAwNiwzMzk0NCwzMzk3NCwzMzk5OSwzMzk1MiwzNDAwNywzNDAwNCwzNDAwMiwzNDAxMSwzMzk2OCwzMzkzNywzNDQwMSwzNDYxMSwzNDU5NSwzNDYwMCwzNDY2NywzNDYyNCwzNDYw''@;'; put 'put ''NiwzNDU5MCwzNDU5MywzNDU4NSwzNDU4NywzNDYyNywzNDYwNCwzNDYyNSwzNDYyMiwzNDYzMCwzNDU5MiwzNDYxMCwzNDYwMiwzNDYwNSwzNDYyMCwzNDU3OCwzNDYxOCwzNDYwOSwzNDYxMywzNDYyNiwzNDU5OCwzNDU5OSwzNDYxNiwzNDU5NiwzNDU4NiwzNDYwOCwzNDU3NywzNTA2Mywz''@;'; put 'put ''NTA0NywzNTA1NywzNTA1OCwzNTA2NiwzNTA3MCwzNTA1NCwzNTA2OCwzNTA2MiwzNTA2NywzNTA1NiwzNTA1MiwzNTA1MSwzNTIyOSwzNTIzMywzNTIzMSwzNTIzMCwzNTMwNSwzNTMwNywzNTMwNCwzNTQ5OSwzNTQ4MSwzNTQ2NywzNTQ3NCwzNTQ3MSwzNTQ3OCwzNTkwMSwzNTk0NCwzNTk0''@;'; put 'put ''NSwzNjA1MywzNjA0NywzNjA1NSwzNjI0NiwzNjM2MSwzNjM1NCwzNjM1MSwzNjM2NSwzNjM0OSwzNjM2MiwzNjM1NSwzNjM1OSwzNjM1OCwzNjM1NywzNjM1MCwzNjM1MiwzNjM1NiwzNjYyNCwzNjYyNSwzNjYyMiwzNjYyMSwzNzE1NSwzNzE0OCwzNzE1MiwzNzE1NCwzNzE1MSwzNzE0OSwz''@;'; put 'put ''NzE0NiwzNzE1NiwzNzE1MywzNzE0NywzNzI0MiwzNzIzNCwzNzI0MSwzNzIzNSwzNzU0MSwzNzU0MCwzNzQ5NCwzNzUzMSwzNzQ5OCwzNzUzNiwzNzUyNCwzNzU0NiwzNzUxNywzNzU0MiwzNzUzMCwzNzU0NywzNzQ5NywzNzUyNywzNzUwMywzNzUzOSwzNzYxNCwzNzUxOCwzNzUwNiwzNzUy''@;'; put 'put ''NSwzNzUzOCwzNzUwMSwzNzUxMiwzNzUzNywzNzUxNCwzNzUxMCwzNzUxNiwzNzUyOSwzNzU0MywzNzUwMiwzNzUxMSwzNzU0NSwzNzUzMywzNzUxNSwzNzQyMSwzODU1OCwzODU2MSwzODY1NSwzODc0NCwzODc4MSwzODc3OCwzODc4MiwzODc4NywzODc4NCwzODc4NiwzODc3OSwzODc4OCwz''@;'; put 'put ''ODc4NSwzODc4MywzODg2MiwzODg2MSwzODkzNCwzOTA4NSwzOTA4NiwzOTE3MCwzOTE2OCwzOTE3NSwzOTMyNSwzOTMyNCwzOTM2MywzOTM1MywzOTM1NSwzOTM1NCwzOTM2MiwzOTM1NywzOTM2NywzOTYwMSwzOTY1MSwzOTY1NSwzOTc0MiwzOTc0MywzOTc3NiwzOTc3NywzOTc3NSw0MDE3''@;'; put 'put ''Nyw0MDE3OCw0MDE4MSw0MDYxNSwyMDczNSwyMDczOSwyMDc4NCwyMDcyOCwyMDc0MiwyMDc0MywyMDcyNiwyMDczNCwyMDc0NywyMDc0OCwyMDczMywyMDc0NiwyMTEzMSwyMTEzMiwyMTIzMywyMTIzMSwyMjA4OCwyMjA4MiwyMjA5MiwyMjA2OSwyMjA4MSwyMjA5MCwyMjA4OSwyMjA4Niwy''@;'; put 'put ''MjEwNCwyMjEwNiwyMjA4MCwyMjA2NywyMjA3NywyMjA2MCwyMjA3OCwyMjA3MiwyMjA1OCwyMjA3NCwyMjI5OCwyMjY5OSwyMjY4NSwyMjcwNSwyMjY4OCwyMjY5MSwyMjcwMywyMjcwMCwyMjY5MywyMjY4OSwyMjc4MywyMzI5NSwyMzI4NCwyMzI5MywyMzI4NywyMzI4NiwyMzI5OSwyMzI4''@;'; put 'put ''OCwyMzI5OCwyMzI4OSwyMzI5NywyMzMwMywyMzMwMSwyMzMxMSwyMzY1NSwyMzk2MSwyMzk1OSwyMzk2NywyMzk1NCwyMzk3MCwyMzk1NSwyMzk1NywyMzk2OCwyMzk2NCwyMzk2OSwyMzk2MiwyMzk2NiwyNDE2OSwyNDE1NywyNDE2MCwyNDE1NiwzMjI0MywyNDI4MywyNDI4NiwyNDI4OSwy''@;'; put 'put ''NDM5MywyNDQ5OCwyNDk3MSwyNDk2MywyNDk1MywyNTAwOSwyNTAwOCwyNDk5NCwyNDk2OSwyNDk4NywyNDk3OSwyNTAwNywyNTAwNSwyNDk5MSwyNDk3OCwyNTAwMiwyNDk5MywyNDk3MywyNDkzNCwyNTAxMSwyNTEzMywyNTcxMCwyNTcxMiwyNTc1MCwyNTc2MCwyNTczMywyNTc1MSwyNTc1''@;'; put 'put ''NiwyNTc0MywyNTczOSwyNTczOCwyNTc0MCwyNTc2MywyNTc1OSwyNTcwNCwyNTc3NywyNTc1MiwyNTk3NCwyNTk3OCwyNTk3NywyNTk3OSwyNjAzNCwyNjAzNSwyNjI5MywyNjI4OCwyNjI4MSwyNjI5MCwyNjI5NSwyNjI4MiwyNjI4NywyNzEzNiwyNzE0MiwyNzE1OSwyNzEwOSwyNzEyOCwy''@;'; put 'put ''NzE1NywyNzEyMSwyNzEwOCwyNzE2OCwyNzEzNSwyNzExNiwyNzEwNiwyNzE2MywyNzE2NSwyNzEzNCwyNzE3NSwyNzEyMiwyNzExOCwyNzE1NiwyNzEyNywyNzExMSwyNzIwMCwyNzE0NCwyNzExMCwyNzEzMSwyNzE0OSwyNzEzMiwyNzExNSwyNzE0NSwyNzE0MCwyNzE2MCwyNzE3MywyNzE1''@;'; put 'put ''MSwyNzEyNiwyNzE3NCwyNzE0MywyNzEyNCwyNzE1OCwyNzQ3MywyNzU1NywyNzU1NSwyNzU1NCwyNzU1OCwyNzY0OSwyNzY0OCwyNzY0NywyNzY1MCwyODQ4MSwyODQ1NCwyODU0MiwyODU1MSwyODYxNCwyODU2MiwyODU1NywyODU1MywyODU1NiwyODUxNCwyODQ5NSwyODU0OSwyODUwNiwy''@;'; put 'put ''ODU2NiwyODUzNCwyODUyNCwyODU0NiwyODUwMSwyODUzMCwyODQ5OCwyODQ5NiwyODUwMywyODU2NCwyODU2MywyODUwOSwyODQxNiwyODUxMywyODUyMywyODU0MSwyODUxOSwyODU2MCwyODQ5OSwyODU1NSwyODUyMSwyODU0MywyODU2NSwyODUxNSwyODUzNSwyODUyMiwyODUzOSwyOTEw''@;'; put 'put ''NiwyOTEwMywyOTA4MywyOTEwNCwyOTA4OCwyOTA4MiwyOTA5NywyOTEwOSwyOTA4NSwyOTA5MywyOTA4NiwyOTA5MiwyOTA4OSwyOTA5OCwyOTA4NCwyOTA5NSwyOTEwNywyOTMzNiwyOTMzOCwyOTUyOCwyOTUyMiwyOTUzNCwyOTUzNSwyOTUzNiwyOTUzMywyOTUzMSwyOTUzNywyOTUzMCwy''@;'; put 'put ''OTUyOSwyOTUzOCwyOTgzMSwyOTgzMywyOTgzNCwyOTgzMCwyOTgyNSwyOTgyMSwyOTgyOSwyOTgzMiwyOTgyMCwyOTgxNywyOTk2MCwyOTk1OSwzMDA3OCwzMDI0NSwzMDIzOCwzMDIzMywzMDIzNywzMDIzNiwzMDI0MywzMDIzNCwzMDI0OCwzMDIzNSwzMDM2NCwzMDM2NSwzMDM2NiwzMDM2''@;'; put 'put ''MywzMDYwNSwzMDYwNywzMDYwMSwzMDYwMCwzMDkyNSwzMDkwNywzMDkyNywzMDkyNCwzMDkyOSwzMDkyNiwzMDkzMiwzMDkyMCwzMDkxNSwzMDkxNiwzMDkyMSwzMTEzMCwzMTEzNywzMTEzNiwzMTEzMiwzMTEzOCwzMTEzMSwyNzUxMCwzMTI4OSwzMTQxMCwzMTQxMiwzMTQxMSwzMTY3MSwz''@;'; put 'put ''MTY5MSwzMTY3OCwzMTY2MCwzMTY5NCwzMTY2MywzMTY3MywzMTY5MCwzMTY2OSwzMTk0MSwzMTk0NCwzMTk0OCwzMTk0NywzMjI0NywzMjIxOSwzMjIzNCwzMjIzMSwzMjIxNSwzMjIyNSwzMjI1OSwzMjI1MCwzMjIzMCwzMjI0NiwzMjI0MSwzMjI0MCwzMjIzOCwzMjIyMywzMjYzMCwzMjY4''@;'; put 'put ''NCwzMjY4OCwzMjY4NSwzMjc0OSwzMjc0NywzMjc0NiwzMjc0OCwzMjc0MiwzMjc0NCwzMjg2OCwzMjg3MSwzMzE4NywzMzE4MywzMzE4MiwzMzE3MywzMzE4NiwzMzE3NywzMzE3NSwzMzMwMiwzMzM1OSwzMzM2MywzMzM2MiwzMzM2MCwzMzM1OCwzMzM2MSwzNDA4NCwzNDEwNywzNDA2Mywz''@;'; put 'put ''NDA0OCwzNDA4OSwzNDA2MiwzNDA1NywzNDA2MSwzNDA3OSwzNDA1OCwzNDA4NywzNDA3NiwzNDA0MywzNDA5MSwzNDA0MiwzNDA1NiwzNDA2MCwzNDAzNiwzNDA5MCwzNDAzNCwzNDA2OSwzNDAzOSwzNDAyNywzNDAzNSwzNDA0NCwzNDA2NiwzNDAyNiwzNDAyNSwzNDA3MCwzNDA0NiwzNDA4''@;'; put 'put ''OCwzNDA3NywzNDA5NCwzNDA1MCwzNDA0NSwzNDA3OCwzNDAzOCwzNDA5NywzNDA4NiwzNDAyMywzNDAyNCwzNDAzMiwzNDAzMSwzNDA0MSwzNDA3MiwzNDA4MCwzNDA5NiwzNDA1OSwzNDA3MywzNDA5NSwzNDQwMiwzNDY0NiwzNDY1OSwzNDY2MCwzNDY3OSwzNDc4NSwzNDY3NSwzNDY0OCwz''@;'; put 'put ''NDY0NCwzNDY1MSwzNDY0MiwzNDY1NywzNDY1MCwzNDY0MSwzNDY1NCwzNDY2OSwzNDY2NiwzNDY0MCwzNDYzOCwzNDY1NSwzNDY1MywzNDY3MSwzNDY2OCwzNDY4MiwzNDY3MCwzNDY1MiwzNDY2MSwzNDYzOSwzNDY4MywzNDY3NywzNDY1OCwzNDY2MywzNDY2NSwzNDkwNiwzNTA3NywzNTA4''@;'; put 'put ''NCwzNTA5MiwzNTA4MywzNTA5NSwzNTA5NiwzNTA5NywzNTA3OCwzNTA5NCwzNTA4OSwzNTA4NiwzNTA4MSwzNTIzNCwzNTIzNiwzNTIzNSwzNTMwOSwzNTMxMiwzNTMwOCwzNTUzNSwzNTUyNiwzNTUxMiwzNTUzOSwzNTUzNywzNTU0MCwzNTU0MSwzNTUxNSwzNTU0MywzNTUxOCwzNTUyMCwz''@;'; put 'put ''NTUyNSwzNTU0NCwzNTUyMywzNTUxNCwzNTUxNywzNTU0NSwzNTkwMiwzNTkxNywzNTk4MywzNjA2OSwzNjA2MywzNjA1NywzNjA3MiwzNjA1OCwzNjA2MSwzNjA3MSwzNjI1NiwzNjI1MiwzNjI1NywzNjI1MSwzNjM4NCwzNjM4NywzNjM4OSwzNjM4OCwzNjM5OCwzNjM3MywzNjM3OSwzNjM3''@;'; put 'put ''NCwzNjM2OSwzNjM3NywzNjM5MCwzNjM5MSwzNjM3MiwzNjM3MCwzNjM3NiwzNjM3MSwzNjM4MCwzNjM3NSwzNjM3OCwzNjY1MiwzNjY0NCwzNjYzMiwzNjYzNCwzNjY0MCwzNjY0MywzNjYzMCwzNjYzMSwzNjk3OSwzNjk3NiwzNjk3NSwzNjk2NywzNjk3MSwzNzE2NywzNzE2MywzNzE2MSwz''@;'; put 'put ''NzE2MiwzNzE3MCwzNzE1OCwzNzE2NiwzNzI1MywzNzI1NCwzNzI1OCwzNzI0OSwzNzI1MCwzNzI1MiwzNzI0OCwzNzU4NCwzNzU3MSwzNzU3MiwzNzU2OCwzNzU5MywzNzU1OCwzNzU4MywzNzYxNywzNzU5OSwzNzU5MiwzNzYwOSwzNzU5MSwzNzU5NywzNzU4MCwzNzYxNSwzNzU3MCwzNzYw''@;'; put 'put ''OCwzNzU3OCwzNzU3NiwzNzU4MiwzNzYwNiwzNzU4MSwzNzU4OSwzNzU3NywzNzYwMCwzNzU5OCwzNzYwNywzNzU4NSwzNzU4NywzNzU1NywzNzYwMSwzNzU3NCwzNzU1NiwzODI2OCwzODMxNiwzODMxNSwzODMxOCwzODMyMCwzODU2NCwzODU2MiwzODYxMSwzODY2MSwzODY2NCwzODY1OCwz''@;'; put 'put ''ODc0NiwzODc5NCwzODc5OCwzODc5MiwzODg2NCwzODg2MywzODk0MiwzODk0MSwzODk1MCwzODk1MywzODk1MiwzODk0NCwzODkzOSwzODk1MSwzOTA5MCwzOTE3NiwzOTE2MiwzOTE4NSwzOTE4OCwzOTE5MCwzOTE5MSwzOTE4OSwzOTM4OCwzOTM3MywzOTM3NSwzOTM3OSwzOTM4MCwzOTM3''@;'; put 'put ''NCwzOTM2OSwzOTM4MiwzOTM4NCwzOTM3MSwzOTM4MywzOTM3MiwzOTYwMywzOTY2MCwzOTY1OSwzOTY2NywzOTY2NiwzOTY2NSwzOTc1MCwzOTc0NywzOTc4MywzOTc5NiwzOTc5MywzOTc4MiwzOTc5OCwzOTc5NywzOTc5MiwzOTc4NCwzOTc4MCwzOTc4OCw0MDE4OCw0MDE4Niw0MDE4OSw0''@;'; put 'put ''MDE5MSw0MDE4Myw0MDE5OSw0MDE5Miw0MDE4NSw0MDE4Nyw0MDIwMCw0MDE5Nyw0MDE5Niw0MDU3OSw0MDY1OSw0MDcxOSw0MDcyMCwyMDc2NCwyMDc1NSwyMDc1OSwyMDc2MiwyMDc1MywyMDk1OCwyMTMwMCwyMTQ3MywyMjEyOCwyMjExMiwyMjEyNiwyMjEzMSwyMjExOCwyMjExNSwyMjEy''@;'; put 'put ''NSwyMjEzMCwyMjExMCwyMjEzNSwyMjMwMCwyMjI5OSwyMjcyOCwyMjcxNywyMjcyOSwyMjcxOSwyMjcxNCwyMjcyMiwyMjcxNiwyMjcyNiwyMzMxOSwyMzMyMSwyMzMyMywyMzMyOSwyMzMxNiwyMzMxNSwyMzMxMiwyMzMxOCwyMzMzNiwyMzMyMiwyMzMyOCwyMzMyNiwyMzUzNSwyMzk4MCwy''@;'; put 'put ''Mzk4NSwyMzk3NywyMzk3NSwyMzk4OSwyMzk4NCwyMzk4MiwyMzk3OCwyMzk3NiwyMzk4NiwyMzk4MSwyMzk4MywyMzk4OCwyNDE2NywyNDE2OCwyNDE2NiwyNDE3NSwyNDI5NywyNDI5NSwyNDI5NCwyNDI5NiwyNDI5MywyNDM5NSwyNDUwOCwyNDk4OSwyNWUzLDI0OTgyLDI1MDI5LDI1MDEy''@;'; put 'put ''LDI1MDMwLDI1MDI1LDI1MDM2LDI1MDE4LDI1MDIzLDI1MDE2LDI0OTcyLDI1ODE1LDI1ODE0LDI1ODA4LDI1ODA3LDI1ODAxLDI1Nzg5LDI1NzM3LDI1Nzk1LDI1ODE5LDI1ODQzLDI1ODE3LDI1OTA3LDI1OTgzLDI1OTgwLDI2MDE4LDI2MzEyLDI2MzAyLDI2MzA0LDI2MzE0LDI2MzE1LDI2''@;'; put 'put ''MzE5LDI2MzAxLDI2Mjk5LDI2Mjk4LDI2MzE2LDI2NDAzLDI3MTg4LDI3MjM4LDI3MjA5LDI3MjM5LDI3MTg2LDI3MjQwLDI3MTk4LDI3MjI5LDI3MjQ1LDI3MjU0LDI3MjI3LDI3MjE3LDI3MTc2LDI3MjI2LDI3MTk1LDI3MTk5LDI3MjAxLDI3MjQyLDI3MjM2LDI3MjE2LDI3MjE1LDI3MjIw''@;'; put 'put ''LDI3MjQ3LDI3MjQxLDI3MjMyLDI3MTk2LDI3MjMwLDI3MjIyLDI3MjIxLDI3MjEzLDI3MjE0LDI3MjA2LDI3NDc3LDI3NDc2LDI3NDc4LDI3NTU5LDI3NTYyLDI3NTYzLDI3NTkyLDI3NTkxLDI3NjUyLDI3NjUxLDI3NjU0LDI4NTg5LDI4NjE5LDI4NTc5LDI4NjE1LDI4NjA0LDI4NjIyLDI4''@;'; put 'put ''NjE2LDI4NTEwLDI4NjEyLDI4NjA1LDI4NTc0LDI4NjE4LDI4NTg0LDI4Njc2LDI4NTgxLDI4NTkwLDI4NjAyLDI4NTg4LDI4NTg2LDI4NjIzLDI4NjA3LDI4NjAwLDI4NTc4LDI4NjE3LDI4NTg3LDI4NjIxLDI4NTkxLDI4NTk0LDI4NTkyLDI5MTI1LDI5MTIyLDI5MTE5LDI5MTEyLDI5MTQy''@;'; put 'put ''LDI5MTIwLDI5MTIxLDI5MTMxLDI5MTQwLDI5MTMwLDI5MTI3LDI5MTM1LDI5MTE3LDI5MTQ0LDI5MTE2LDI5MTI2LDI5MTQ2LDI5MTQ3LDI5MzQxLDI5MzQyLDI5NTQ1LDI5NTQyLDI5NTQzLDI5NTQ4LDI5NTQxLDI5NTQ3LDI5NTQ2LDI5ODIzLDI5ODUwLDI5ODU2LDI5ODQ0LDI5ODQyLDI5''@;'; put 'put ''ODQ1LDI5ODU3LDI5OTYzLDMwMDgwLDMwMjU1LDMwMjUzLDMwMjU3LDMwMjY5LDMwMjU5LDMwMjY4LDMwMjYxLDMwMjU4LDMwMjU2LDMwMzk1LDMwNDM4LDMwNjE4LDMwNjIxLDMwNjI1LDMwNjIwLDMwNjE5LDMwNjI2LDMwNjI3LDMwNjEzLDMwNjE3LDMwNjE1LDMwOTQxLDMwOTUzLDMwOTQ5''@;'; put 'put ''LDMwOTU0LDMwOTQyLDMwOTQ3LDMwOTM5LDMwOTQ1LDMwOTQ2LDMwOTU3LDMwOTQzLDMwOTQ0LDMxMTQwLDMxMzAwLDMxMzA0LDMxMzAzLDMxNDE0LDMxNDE2LDMxNDEzLDMxNDA5LDMxNDE1LDMxNzEwLDMxNzE1LDMxNzE5LDMxNzA5LDMxNzAxLDMxNzE3LDMxNzA2LDMxNzIwLDMxNzM3LDMx''@;'; put 'put ''NzAwLDMxNzIyLDMxNzE0LDMxNzA4LDMxNzIzLDMxNzA0LDMxNzExLDMxOTU0LDMxOTU2LDMxOTU5LDMxOTUyLDMxOTUzLDMyMjc0LDMyMjg5LDMyMjc5LDMyMjY4LDMyMjg3LDMyMjg4LDMyMjc1LDMyMjcwLDMyMjg0LDMyMjc3LDMyMjgyLDMyMjkwLDMyMjY3LDMyMjcxLDMyMjc4LDMyMjY5''@;'; put 'put ''LDMyMjc2LDMyMjkzLDMyMjkyLDMyNTc5LDMyNjM1LDMyNjM2LDMyNjM0LDMyNjg5LDMyNzUxLDMyODEwLDMyODA5LDMyODc2LDMzMjAxLDMzMTkwLDMzMTk4LDMzMjA5LDMzMjA1LDMzMTk1LDMzMjAwLDMzMTk2LDMzMjA0LDMzMjAyLDMzMjA3LDMzMTkxLDMzMjY2LDMzMzY1LDMzMzY2LDMz''@;'; put 'put ''MzY3LDM0MTM0LDM0MTE3LDM0MTU1LDM0MTI1LDM0MTMxLDM0MTQ1LDM0MTM2LDM0MTEyLDM0MTE4LDM0MTQ4LDM0MTEzLDM0MTQ2LDM0MTE2LDM0MTI5LDM0MTE5LDM0MTQ3LDM0MTEwLDM0MTM5LDM0MTYxLDM0MTI2LDM0MTU4LDM0MTY1LDM0MTMzLDM0MTUxLDM0MTQ0LDM0MTg4LDM0MTUw''@;'; put 'put ''LDM0MTQxLDM0MTMyLDM0MTQ5LDM0MTU2LDM0NDAzLDM0NDA1LDM0NDA0LDM0NzE1LDM0NzAzLDM0NzExLDM0NzA3LDM0NzA2LDM0Njk2LDM0Njg5LDM0NzEwLDM0NzEyLDM0NjgxLDM0Njk1LDM0NzIzLDM0NjkzLDM0NzA0LDM0NzA1LDM0NzE3LDM0NjkyLDM0NzA4LDM0NzE2LDM0NzE0LDM0''@;'; put 'put ''Njk3LDM1MTAyLDM1MTEwLDM1MTIwLDM1MTE3LDM1MTE4LDM1MTExLDM1MTIxLDM1MTA2LDM1MTEzLDM1MTA3LDM1MTE5LDM1MTE2LDM1MTAzLDM1MzEzLDM1NTUyLDM1NTU0LDM1NTcwLDM1NTcyLDM1NTczLDM1NTQ5LDM1NjA0LDM1NTU2LDM1NTUxLDM1NTY4LDM1NTI4LDM1NTUwLDM1NTUz''@;'; put 'put ''LDM1NTYwLDM1NTgzLDM1NTY3LDM1NTc5LDM1OTg1LDM1OTg2LDM1OTg0LDM2MDg1LDM2MDc4LDM2MDgxLDM2MDgwLDM2MDgzLDM2MjA0LDM2MjA2LDM2MjYxLDM2MjYzLDM2NDAzLDM2NDE0LDM2NDA4LDM2NDE2LDM2NDIxLDM2NDA2LDM2NDEyLDM2NDEzLDM2NDE3LDM2NDAwLDM2NDE1LDM2''@;'; put 'put ''NTQxLDM2NjYyLDM2NjU0LDM2NjYxLDM2NjU4LDM2NjY1LDM2NjYzLDM2NjYwLDM2OTgyLDM2OTg1LDM2OTg3LDM2OTk4LDM3MTE0LDM3MTcxLDM3MTczLDM3MTc0LDM3MjY3LDM3MjY0LDM3MjY1LDM3MjYxLDM3MjYzLDM3NjcxLDM3NjYyLDM3NjQwLDM3NjYzLDM3NjM4LDM3NjQ3LDM3NzU0''@;'; put 'put ''LDM3Njg4LDM3NjkyLDM3NjU5LDM3NjY3LDM3NjUwLDM3NjMzLDM3NzAyLDM3Njc3LDM3NjQ2LDM3NjQ1LDM3NTc5LDM3NjYxLDM3NjI2LDM3NjY5LDM3NjUxLDM3NjI1LDM3NjIzLDM3Njg0LDM3NjM0LDM3NjY4LDM3NjMxLDM3NjczLDM3Njg5LDM3Njg1LDM3Njc0LDM3NjUyLDM3NjQ0LDM3''@;'; put 'put ''NjQzLDM3NjMwLDM3NjQxLDM3NjMyLDM3NjI3LDM3NjU0LDM4MzMyLDM4MzQ5LDM4MzM0LDM4MzI5LDM4MzMwLDM4MzI2LDM4MzM1LDM4MzI1LDM4MzMzLDM4NTY5LDM4NjEyLDM4NjY3LDM4Njc0LDM4NjcyLDM4ODA5LDM4ODA3LDM4ODA0LDM4ODk2LDM4OTA0LDM4OTY1LDM4OTU5LDM4OTYy''@;'; put 'put ''LDM5MjA0LDM5MTk5LDM5MjA3LDM5MjA5LDM5MzI2LDM5NDA2LDM5NDA0LDM5Mzk3LDM5Mzk2LDM5NDA4LDM5Mzk1LDM5NDAyLDM5NDAxLDM5Mzk5LDM5NjA5LDM5NjE1LDM5NjA0LDM5NjExLDM5NjcwLDM5Njc0LDM5NjczLDM5NjcxLDM5NzMxLDM5ODA4LDM5ODEzLDM5ODE1LDM5ODA0LDM5''@;'; put 'put ''ODA2LDM5ODAzLDM5ODEwLDM5ODI3LDM5ODI2LDM5ODI0LDM5ODAyLDM5ODI5LDM5ODA1LDM5ODE2LDQwMjI5LDQwMjE1LDQwMjI0LDQwMjIyLDQwMjEyLDQwMjMzLDQwMjIxLDQwMjE2LDQwMjI2LDQwMjA4LDQwMjE3LDQwMjIzLDQwNTg0LDQwNTgyLDQwNTgzLDQwNjIyLDQwNjIxLDQwNjYx''@;'; put 'put ''LDQwNjYyLDQwNjk4LDQwNzIyLDQwNzY1LDIwNzc0LDIwNzczLDIwNzcwLDIwNzcyLDIwNzY4LDIwNzc3LDIxMjM2LDIyMTYzLDIyMTU2LDIyMTU3LDIyMTUwLDIyMTQ4LDIyMTQ3LDIyMTQyLDIyMTQ2LDIyMTQzLDIyMTQ1LDIyNzQyLDIyNzQwLDIyNzM1LDIyNzM4LDIzMzQxLDIzMzMzLDIz''@;'; put 'put ''MzQ2LDIzMzMxLDIzMzQwLDIzMzM1LDIzMzM0LDIzMzQzLDIzMzQyLDIzNDE5LDIzNTM3LDIzNTM4LDIzOTkxLDI0MTcyLDI0MTcwLDI0NTEwLDI0NTA3LDI1MDI3LDI1MDEzLDI1MDIwLDI1MDYzLDI1MDU2LDI1MDYxLDI1MDYwLDI1MDY0LDI1MDU0LDI1ODM5LDI1ODMzLDI1ODI3LDI1ODM1''@;'; put 'put ''LDI1ODI4LDI1ODMyLDI1OTg1LDI1OTg0LDI2MDM4LDI2MDc0LDI2MzIyLDI3Mjc3LDI3Mjg2LDI3MjY1LDI3MzAxLDI3MjczLDI3Mjk1LDI3MjkxLDI3Mjk3LDI3Mjk0LDI3MjcxLDI3MjgzLDI3Mjc4LDI3Mjg1LDI3MjY3LDI3MzA0LDI3MzAwLDI3MjgxLDI3MjYzLDI3MzAyLDI3MjkwLDI3''@;'; put 'put ''MjY5LDI3Mjc2LDI3MjgyLDI3NDgzLDI3NTY1LDI3NjU3LDI4NjIwLDI4NTg1LDI4NjYwLDI4NjI4LDI4NjQzLDI4NjM2LDI4NjUzLDI4NjQ3LDI4NjQ2LDI4NjM4LDI4NjU4LDI4NjM3LDI4NjQyLDI4NjQ4LDI5MTUzLDI5MTY5LDI5MTYwLDI5MTcwLDI5MTU2LDI5MTY4LDI5MTU0LDI5NTU1''@;'; put 'put ''LDI5NTUwLDI5NTUxLDI5ODQ3LDI5ODc0LDI5ODY3LDI5ODQwLDI5ODY2LDI5ODY5LDI5ODczLDI5ODYxLDI5ODcxLDI5OTY4LDI5OTY5LDI5OTcwLDI5OTY3LDMwMDg0LDMwMjc1LDMwMjgwLDMwMjgxLDMwMjc5LDMwMzcyLDMwNDQxLDMwNjQ1LDMwNjM1LDMwNjQyLDMwNjQ3LDMwNjQ2LDMw''@;'; put 'put ''NjQ0LDMwNjQxLDMwNjMyLDMwNzA0LDMwOTYzLDMwOTczLDMwOTc4LDMwOTcxLDMwOTcyLDMwOTYyLDMwOTgxLDMwOTY5LDMwOTc0LDMwOTgwLDMxMTQ3LDMxMTQ0LDMxMzI0LDMxMzIzLDMxMzE4LDMxMzIwLDMxMzE2LDMxMzIyLDMxNDIyLDMxNDI0LDMxNDI1LDMxNzQ5LDMxNzU5LDMxNzMw''@;'; put 'put ''LDMxNzQ0LDMxNzQzLDMxNzM5LDMxNzU4LDMxNzMyLDMxNzU1LDMxNzMxLDMxNzQ2LDMxNzUzLDMxNzQ3LDMxNzQ1LDMxNzM2LDMxNzQxLDMxNzUwLDMxNzI4LDMxNzI5LDMxNzYwLDMxNzU0LDMxOTc2LDMyMzAxLDMyMzE2LDMyMzIyLDMyMzA3LDM4OTg0LDMyMzEyLDMyMjk4LDMyMzI5LDMy''@;'; put 'put ''MzIwLDMyMzI3LDMyMjk3LDMyMzMyLDMyMzA0LDMyMzE1LDMyMzEwLDMyMzI0LDMyMzE0LDMyNTgxLDMyNjM5LDMyNjM4LDMyNjM3LDMyNzU2LDMyNzU0LDMyODEyLDMzMjExLDMzMjIwLDMzMjI4LDMzMjI2LDMzMjIxLDMzMjIzLDMzMjEyLDMzMjU3LDMzMzcxLDMzMzcwLDMzMzcyLDM0MTc5''@;'; put 'put ''LDM0MTc2LDM0MTkxLDM0MjE1LDM0MTk3LDM0MjA4LDM0MTg3LDM0MjExLDM0MTcxLDM0MjEyLDM0MjAyLDM0MjA2LDM0MTY3LDM0MTcyLDM0MTg1LDM0MjA5LDM0MTcwLDM0MTY4LDM0MTM1LDM0MTkwLDM0MTk4LDM0MTgyLDM0MTg5LDM0MjAxLDM0MjA1LDM0MTc3LDM0MjEwLDM0MTc4LDM0''@;'; put 'put ''MTg0LDM0MTgxLDM0MTY5LDM0MTY2LDM0MjAwLDM0MTkyLDM0MjA3LDM0NDA4LDM0NzUwLDM0NzMwLDM0NzMzLDM0NzU3LDM0NzM2LDM0NzMyLDM0NzQ1LDM0NzQxLDM0NzQ4LDM0NzM0LDM0NzYxLDM0NzU1LDM0NzU0LDM0NzY0LDM0NzQzLDM0NzM1LDM0NzU2LDM0NzYyLDM0NzQwLDM0NzQy''@;'; put 'put ''LDM0NzUxLDM0NzQ0LDM0NzQ5LDM0NzgyLDM0NzM4LDM1MTI1LDM1MTIzLDM1MTMyLDM1MTM0LDM1MTM3LDM1MTU0LDM1MTI3LDM1MTM4LDM1MjQ1LDM1MjQ3LDM1MjQ2LDM1MzE0LDM1MzE1LDM1NjE0LDM1NjA4LDM1NjA2LDM1NjAxLDM1NTg5LDM1NTk1LDM1NjE4LDM1NTk5LDM1NjAyLDM1''@;'; put 'put ''NjA1LDM1NTkxLDM1NTk3LDM1NTkyLDM1NTkwLDM1NjEyLDM1NjAzLDM1NjEwLDM1OTE5LDM1OTUyLDM1OTU0LDM1OTUzLDM1OTUxLDM1OTg5LDM1OTg4LDM2MDg5LDM2MjA3LDM2NDMwLDM2NDI5LDM2NDM1LDM2NDMyLDM2NDI4LDM2NDIzLDM2Njc1LDM2NjcyLDM2OTk3LDM2OTkwLDM3MTc2''@;'; put 'put ''LDM3Mjc0LDM3MjgyLDM3Mjc1LDM3MjczLDM3Mjc5LDM3MjgxLDM3Mjc3LDM3MjgwLDM3NzkzLDM3NzYzLDM3ODA3LDM3NzMyLDM3NzE4LDM3NzAzLDM3NzU2LDM3NzIwLDM3NzI0LDM3NzUwLDM3NzA1LDM3NzEyLDM3NzEzLDM3NzI4LDM3NzQxLDM3Nzc1LDM3NzA4LDM3NzM4LDM3NzUzLDM3''@;'; put 'put ''NzE5LDM3NzE3LDM3NzE0LDM3NzExLDM3NzQ1LDM3NzUxLDM3NzU1LDM3NzI5LDM3NzI2LDM3NzMxLDM3NzM1LDM3NzYwLDM3NzEwLDM3NzIxLDM4MzQzLDM4MzM2LDM4MzQ1LDM4MzM5LDM4MzQxLDM4MzI3LDM4NTc0LDM4NTc2LDM4NTcyLDM4Njg4LDM4Njg3LDM4NjgwLDM4Njg1LDM4Njgx''@;'; put 'put ''LDM4ODEwLDM4ODE3LDM4ODEyLDM4ODE0LDM4ODEzLDM4ODY5LDM4ODY4LDM4ODk3LDM4OTc3LDM4OTgwLDM4OTg2LDM4OTg1LDM4OTgxLDM4OTc5LDM5MjA1LDM5MjExLDM5MjEyLDM5MjEwLDM5MjE5LDM5MjE4LDM5MjE1LDM5MjEzLDM5MjE3LDM5MjE2LDM5MzIwLDM5MzMxLDM5MzI5LDM5''@;'; put 'put ''NDI2LDM5NDE4LDM5NDEyLDM5NDE1LDM5NDE3LDM5NDE2LDM5NDE0LDM5NDE5LDM5NDIxLDM5NDIyLDM5NDIwLDM5NDI3LDM5NjE0LDM5Njc4LDM5Njc3LDM5NjgxLDM5Njc2LDM5NzUyLDM5ODM0LDM5ODQ4LDM5ODM4LDM5ODM1LDM5ODQ2LDM5ODQxLDM5ODQ1LDM5ODQ0LDM5ODE0LDM5ODQy''@;'; put 'put ''LDM5ODQwLDM5ODU1LDQwMjQzLDQwMjU3LDQwMjk1LDQwMjQ2LDQwMjM4LDQwMjM5LDQwMjQxLDQwMjQ4LDQwMjQwLDQwMjYxLDQwMjU4LDQwMjU5LDQwMjU0LDQwMjQ3LDQwMjU2LDQwMjUzLDMyNzU3LDQwMjM3LDQwNTg2LDQwNTg1LDQwNTg5LDQwNjI0LDQwNjQ4LDQwNjY2LDQwNjk5LDQw''@;'; put 'put ''NzAzLDQwNzQwLDQwNzM5LDQwNzM4LDQwNzg4LDQwODY0LDIwNzg1LDIwNzgxLDIwNzgyLDIyMTY4LDIyMTcyLDIyMTY3LDIyMTcwLDIyMTczLDIyMTY5LDIyODk2LDIzMzU2LDIzNjU3LDIzNjU4LDI0ZTMsMjQxNzMsMjQxNzQsMjUwNDgsMjUwNTUsMjUwNjksMjUwNzAsMjUwNzMsMjUwNjYs''@;'; put 'put ''MjUwNzIsMjUwNjcsMjUwNDYsMjUwNjUsMjU4NTUsMjU4NjAsMjU4NTMsMjU4NDgsMjU4NTcsMjU4NTksMjU4NTIsMjYwMDQsMjYwNzUsMjYzMzAsMjYzMzEsMjYzMjgsMjczMzMsMjczMjEsMjczMjUsMjczNjEsMjczMzQsMjczMjIsMjczMTgsMjczMTksMjczMzUsMjczMTYsMjczMDksMjc0''@;'; put 'put ''ODYsMjc1OTMsMjc2NTksMjg2NzksMjg2ODQsMjg2ODUsMjg2NzMsMjg2NzcsMjg2OTIsMjg2ODYsMjg2NzEsMjg2NzIsMjg2NjcsMjg3MTAsMjg2NjgsMjg2NjMsMjg2ODIsMjkxODUsMjkxODMsMjkxNzcsMjkxODcsMjkxODEsMjk1NTgsMjk4ODAsMjk4ODgsMjk4NzcsMjk4ODksMjk4ODYs''@;'; put 'put ''Mjk4NzgsMjk4ODMsMjk4OTAsMjk5NzIsMjk5NzEsMzAzMDAsMzAzMDgsMzAyOTcsMzAyODgsMzAyOTEsMzAyOTUsMzAyOTgsMzAzNzQsMzAzOTcsMzA0NDQsMzA2NTgsMzA2NTAsMzA5NzUsMzA5ODgsMzA5OTUsMzA5OTYsMzA5ODUsMzA5OTIsMzA5OTQsMzA5OTMsMzExNDksMzExNDgsMzEz''@;'; put 'put ''MjcsMzE3NzIsMzE3ODUsMzE3NjksMzE3NzYsMzE3NzUsMzE3ODksMzE3NzMsMzE3ODIsMzE3ODQsMzE3NzgsMzE3ODEsMzE3OTIsMzIzNDgsMzIzMzYsMzIzNDIsMzIzNTUsMzIzNDQsMzIzNTQsMzIzNTEsMzIzMzcsMzIzNTIsMzIzNDMsMzIzMzksMzI2OTMsMzI2OTEsMzI3NTksMzI3NjAs''@;'; put 'put ''MzI4ODUsMzMyMzMsMzMyMzQsMzMyMzIsMzMzNzUsMzMzNzQsMzQyMjgsMzQyNDYsMzQyNDAsMzQyNDMsMzQyNDIsMzQyMjcsMzQyMjksMzQyMzcsMzQyNDcsMzQyNDQsMzQyMzksMzQyNTEsMzQyNTQsMzQyNDgsMzQyNDUsMzQyMjUsMzQyMzAsMzQyNTgsMzQzNDAsMzQyMzIsMzQyMzEsMzQy''@;'; put 'put ''MzgsMzQ0MDksMzQ3OTEsMzQ3OTAsMzQ3ODYsMzQ3NzksMzQ3OTUsMzQ3OTQsMzQ3ODksMzQ3ODMsMzQ4MDMsMzQ3ODgsMzQ3NzIsMzQ3ODAsMzQ3NzEsMzQ3OTcsMzQ3NzYsMzQ3ODcsMzQ3MjQsMzQ3NzUsMzQ3NzcsMzQ4MTcsMzQ4MDQsMzQ3OTIsMzQ3ODEsMzUxNTUsMzUxNDcsMzUxNTEs''@;'; put 'put ''MzUxNDgsMzUxNDIsMzUxNTIsMzUxNTMsMzUxNDUsMzU2MjYsMzU2MjMsMzU2MTksMzU2MzUsMzU2MzIsMzU2MzcsMzU2NTUsMzU2MzEsMzU2NDQsMzU2NDYsMzU2MzMsMzU2MjEsMzU2MzksMzU2MjIsMzU2MzgsMzU2MzAsMzU2MjAsMzU2NDMsMzU2NDUsMzU2NDIsMzU5MDYsMzU5NTcsMzU5''@;'; put 'put ''OTMsMzU5OTIsMzU5OTEsMzYwOTQsMzYxMDAsMzYwOTgsMzYwOTYsMzY0NDQsMzY0NTAsMzY0NDgsMzY0MzksMzY0MzgsMzY0NDYsMzY0NTMsMzY0NTUsMzY0NDMsMzY0NDIsMzY0NDksMzY0NDUsMzY0NTcsMzY0MzYsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODMsMzcxNjAsMzcxNzgsMzcxNzks''@;'; put 'put ''MzcxODIsMzcyODgsMzcyODUsMzcyODcsMzcyOTUsMzcyOTAsMzc4MTMsMzc3NzIsMzc3NzgsMzc4MTUsMzc3ODcsMzc3ODksMzc3NjksMzc3OTksMzc3NzQsMzc4MDIsMzc3OTAsMzc3OTgsMzc3ODEsMzc3NjgsMzc3ODUsMzc3OTEsMzc3NzMsMzc4MDksMzc3NzcsMzc4MTAsMzc3OTYsMzc4''@;'; put 'put ''MDAsMzc4MTIsMzc3OTUsMzc3OTcsMzgzNTQsMzgzNTUsMzgzNTMsMzg1NzksMzg2MTUsMzg2MTgsMjQwMDIsMzg2MjMsMzg2MTYsMzg2MjEsMzg2OTEsMzg2OTAsMzg2OTMsMzg4MjgsMzg4MzAsMzg4MjQsMzg4MjcsMzg4MjAsMzg4MjYsMzg4MTgsMzg4MjEsMzg4NzEsMzg4NzMsMzg4NzAs''@;'; put 'put ''Mzg4NzIsMzg5MDYsMzg5OTIsMzg5OTMsMzg5OTQsMzkwOTYsMzkyMzMsMzkyMjgsMzkyMjYsMzk0MzksMzk0MzUsMzk0MzMsMzk0MzcsMzk0MjgsMzk0NDEsMzk0MzQsMzk0MjksMzk0MzEsMzk0MzAsMzk2MTYsMzk2NDQsMzk2ODgsMzk2ODQsMzk2ODUsMzk3MjEsMzk3MzMsMzk3NTQsMzk3''@;'; put 'put ''NTYsMzk3NTUsMzk4NzksMzk4NzgsMzk4NzUsMzk4NzEsMzk4NzMsMzk4NjEsMzk4NjQsMzk4OTEsMzk4NjIsMzk4NzYsMzk4NjUsMzk4NjksNDAyODQsNDAyNzUsNDAyNzEsNDAyNjYsNDAyODMsNDAyNjcsNDAyODEsNDAyNzgsNDAyNjgsNDAyNzksNDAyNzQsNDAyNzYsNDAyODcsNDAyODAs''@;'; put 'put ''NDAyODIsNDA1OTAsNDA1ODgsNDA2NzEsNDA3MDUsNDA3MDQsNDA3MjYsNDA3NDEsNDA3NDcsNDA3NDYsNDA3NDUsNDA3NDQsNDA3ODAsNDA3ODksMjA3ODgsMjA3ODksMjExNDIsMjEyMzksMjE0MjgsMjIxODcsMjIxODksMjIxODIsMjIxODMsMjIxODYsMjIxODgsMjI3NDYsMjI3NDksMjI3''@;'; put 'put ''NDcsMjI4MDIsMjMzNTcsMjMzNTgsMjMzNTksMjQwMDMsMjQxNzYsMjQ1MTEsMjUwODMsMjU4NjMsMjU4NzIsMjU4NjksMjU4NjUsMjU4NjgsMjU4NzAsMjU5ODgsMjYwNzgsMjYwNzcsMjYzMzQsMjczNjcsMjczNjAsMjczNDAsMjczNDUsMjczNTMsMjczMzksMjczNTksMjczNTYsMjczNDQs''@;'; put 'put ''MjczNzEsMjczNDMsMjczNDEsMjczNTgsMjc0ODgsMjc1NjgsMjc2NjAsMjg2OTcsMjg3MTEsMjg3MDQsMjg2OTQsMjg3MTUsMjg3MDUsMjg3MDYsMjg3MDcsMjg3MTMsMjg2OTUsMjg3MDgsMjg3MDAsMjg3MTQsMjkxOTYsMjkxOTQsMjkxOTEsMjkxODYsMjkxODksMjkzNDksMjkzNTAsMjkz''@;'; put 'put ''NDgsMjkzNDcsMjkzNDUsMjk4OTksMjk4OTMsMjk4NzksMjk4OTEsMjk5NzQsMzAzMDQsMzA2NjUsMzA2NjYsMzA2NjAsMzA3MDUsMzEwMDUsMzEwMDMsMzEwMDksMzEwMDQsMzA5OTksMzEwMDYsMzExNTIsMzEzMzUsMzEzMzYsMzE3OTUsMzE4MDQsMzE4MDEsMzE3ODgsMzE4MDMsMzE5ODAs''@;'; put 'put ''MzE5NzgsMzIzNzQsMzIzNzMsMzIzNzYsMzIzNjgsMzIzNzUsMzIzNjcsMzIzNzgsMzIzNzAsMzIzNzIsMzIzNjAsMzI1ODcsMzI1ODYsMzI2NDMsMzI2NDYsMzI2OTUsMzI3NjUsMzI3NjYsMzI4ODgsMzMyMzksMzMyMzcsMzMzODAsMzMzNzcsMzMzNzksMzQyODMsMzQyODksMzQyODUsMzQy''@;'; put 'put ''NjUsMzQyNzMsMzQyODAsMzQyNjYsMzQyNjMsMzQyODQsMzQyOTAsMzQyOTYsMzQyNjQsMzQyNzEsMzQyNzUsMzQyNjgsMzQyNTcsMzQyODgsMzQyNzgsMzQyODcsMzQyNzAsMzQyNzQsMzQ4MTYsMzQ4MTAsMzQ4MTksMzQ4MDYsMzQ4MDcsMzQ4MjUsMzQ4MjgsMzQ4MjcsMzQ4MjIsMzQ4MTIs''@;'; put 'put ''MzQ4MjQsMzQ4MTUsMzQ4MjYsMzQ4MTgsMzUxNzAsMzUxNjIsMzUxNjMsMzUxNTksMzUxNjksMzUxNjQsMzUxNjAsMzUxNjUsMzUxNjEsMzUyMDgsMzUyNTUsMzUyNTQsMzUzMTgsMzU2NjQsMzU2NTYsMzU2NTgsMzU2NDgsMzU2NjcsMzU2NzAsMzU2NjgsMzU2NTksMzU2NjksMzU2NjUsMzU2''@;'; put 'put ''NTAsMzU2NjYsMzU2NzEsMzU5MDcsMzU5NTksMzU5NTgsMzU5OTQsMzYxMDIsMzYxMDMsMzYxMDUsMzYyNjgsMzYyNjYsMzYyNjksMzYyNjcsMzY0NjEsMzY0NzIsMzY0NjcsMzY0NTgsMzY0NjMsMzY0NzUsMzY1NDYsMzY2OTAsMzY2ODksMzY2ODcsMzY2ODgsMzY2OTEsMzY3ODgsMzcxODQs''@;'; put 'put ''MzcxODMsMzcyOTYsMzcyOTMsMzc4NTQsMzc4MzEsMzc4MzksMzc4MjYsMzc4NTAsMzc4NDAsMzc4ODEsMzc4NjgsMzc4MzYsMzc4NDksMzc4MDEsMzc4NjIsMzc4MzQsMzc4NDQsMzc4NzAsMzc4NTksMzc4NDUsMzc4MjgsMzc4MzgsMzc4MjQsMzc4NDIsMzc4NjMsMzgyNjksMzgzNjIsMzgz''@;'; put 'put ''NjMsMzg2MjUsMzg2OTcsMzg2OTksMzg3MDAsMzg2OTYsMzg2OTQsMzg4MzUsMzg4MzksMzg4MzgsMzg4NzcsMzg4NzgsMzg4NzksMzkwMDQsMzkwMDEsMzkwMDUsMzg5OTksMzkxMDMsMzkxMDEsMzkwOTksMzkxMDIsMzkyNDAsMzkyMzksMzkyMzUsMzkzMzQsMzkzMzUsMzk0NTAsMzk0NDUs''@;'; put 'put ''Mzk0NjEsMzk0NTMsMzk0NjAsMzk0NTEsMzk0NTgsMzk0NTYsMzk0NjMsMzk0NTksMzk0NTQsMzk0NTIsMzk0NDQsMzk2MTgsMzk2OTEsMzk2OTAsMzk2OTQsMzk2OTIsMzk3MzUsMzk5MTQsMzk5MTUsMzk5MDQsMzk5MDIsMzk5MDgsMzk5MTAsMzk5MDYsMzk5MjAsMzk4OTIsMzk4OTUsMzk5''@;'; put 'put ''MTYsMzk5MDAsMzk4OTcsMzk5MDksMzk4OTMsMzk5MDUsMzk4OTgsNDAzMTEsNDAzMjEsNDAzMzAsNDAzMjQsNDAzMjgsNDAzMDUsNDAzMjAsNDAzMTIsNDAzMjYsNDAzMzEsNDAzMzIsNDAzMTcsNDAyOTksNDAzMDgsNDAzMDksNDAzMDQsNDAyOTcsNDAzMjUsNDAzMDcsNDAzMTUsNDAzMjIs''@;'; put 'put ''NDAzMDMsNDAzMTMsNDAzMTksNDAzMjcsNDAyOTYsNDA1OTYsNDA1OTMsNDA2NDAsNDA3MDAsNDA3NDksNDA3NjgsNDA3NjksNDA3ODEsNDA3OTAsNDA3OTEsNDA3OTIsMjEzMDMsMjIxOTQsMjIxOTcsMjIxOTUsMjI3NTUsMjMzNjUsMjQwMDYsMjQwMDcsMjQzMDIsMjQzMDMsMjQ1MTIsMjQ1''@;'; put 'put ''MTMsMjUwODEsMjU4NzksMjU4NzgsMjU4NzcsMjU4NzUsMjYwNzksMjYzNDQsMjYzMzksMjYzNDAsMjczNzksMjczNzYsMjczNzAsMjczNjgsMjczODUsMjczNzcsMjczNzQsMjczNzUsMjg3MzIsMjg3MjUsMjg3MTksMjg3MjcsMjg3MjQsMjg3MjEsMjg3MzgsMjg3MjgsMjg3MzUsMjg3MzAs''@;'; put 'put ''Mjg3MjksMjg3MzYsMjg3MzEsMjg3MjMsMjg3MzcsMjkyMDMsMjkyMDQsMjkzNTIsMjk1NjUsMjk1NjQsMjk4ODIsMzAzNzksMzAzNzgsMzAzOTgsMzA0NDUsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NjksMzA3MDYsMzEwMTMsMzEwMTEsMzEwMTUsMzEwMTYsMzEwMTIsMzEwMTcsMzExNTQsMzEz''@;'; put 'put ''NDIsMzEzNDAsMzEzNDEsMzE0NzksMzE4MTcsMzE4MTYsMzE4MTgsMzE4MTUsMzE4MTMsMzE5ODIsMzIzNzksMzIzODIsMzIzODUsMzIzODQsMzI2OTgsMzI3NjcsMzI4ODksMzMyNDMsMzMyNDEsMzMyOTEsMzMzODQsMzMzODUsMzQzMzgsMzQzMDMsMzQzMDUsMzQzMDIsMzQzMzEsMzQzMDQs''@;'; put 'put ''MzQyOTQsMzQzMDgsMzQzMTMsMzQzMDksMzQzMTYsMzQzMDEsMzQ4NDEsMzQ4MzIsMzQ4MzMsMzQ4MzksMzQ4MzUsMzQ4MzgsMzUxNzEsMzUxNzQsMzUyNTcsMzUzMTksMzU2ODAsMzU2OTAsMzU2NzcsMzU2ODgsMzU2ODMsMzU2ODUsMzU2ODcsMzU2OTMsMzYyNzAsMzY0ODYsMzY0ODgsMzY0''@;'; put 'put ''ODQsMzY2OTcsMzY2OTQsMzY2OTUsMzY2OTMsMzY2OTYsMzY2OTgsMzcwMDUsMzcxODcsMzcxODUsMzczMDMsMzczMDEsMzcyOTgsMzcyOTksMzc4OTksMzc5MDcsMzc4ODMsMzc5MjAsMzc5MDMsMzc5MDgsMzc4ODYsMzc5MDksMzc5MDQsMzc5MjgsMzc5MTMsMzc5MDEsMzc4NzcsMzc4ODgs''@;'; put 'put ''Mzc4NzksMzc4OTUsMzc5MDIsMzc5MTAsMzc5MDYsMzc4ODIsMzc4OTcsMzc4ODAsMzc4OTgsMzc4ODcsMzc4ODQsMzc5MDAsMzc4NzgsMzc5MDUsMzc4OTQsMzgzNjYsMzgzNjgsMzgzNjcsMzg3MDIsMzg3MDMsMzg4NDEsMzg4NDMsMzg5MDksMzg5MTAsMzkwMDgsMzkwMTAsMzkwMTEsMzkw''@;'; put 'put ''MDcsMzkxMDUsMzkxMDYsMzkyNDgsMzkyNDYsMzkyNTcsMzkyNDQsMzkyNDMsMzkyNTEsMzk0NzQsMzk0NzYsMzk0NzMsMzk0NjgsMzk0NjYsMzk0NzgsMzk0NjUsMzk0NzAsMzk0ODAsMzk0NjksMzk2MjMsMzk2MjYsMzk2MjIsMzk2OTYsMzk2OTgsMzk2OTcsMzk5NDcsMzk5NDQsMzk5Mjcs''@;'; put 'put ''Mzk5NDEsMzk5NTQsMzk5MjgsNGU0LDM5OTQzLDM5OTUwLDM5OTQyLDM5OTU5LDM5OTU2LDM5OTQ1LDQwMzUxLDQwMzQ1LDQwMzU2LDQwMzQ5LDQwMzM4LDQwMzQ0LDQwMzM2LDQwMzQ3LDQwMzUyLDQwMzQwLDQwMzQ4LDQwMzYyLDQwMzQzLDQwMzUzLDQwMzQ2LDQwMzU0LDQwMzYwLDQwMzUw''@;'; put 'put ''LDQwMzU1LDQwMzgzLDQwMzYxLDQwMzQyLDQwMzU4LDQwMzU5LDQwNjAxLDQwNjAzLDQwNjAyLDQwNjc3LDQwNjc2LDQwNjc5LDQwNjc4LDQwNzUyLDQwNzUwLDQwNzk1LDQwODAwLDQwNzk4LDQwNzk3LDQwNzkzLDQwODQ5LDIwNzk0LDIwNzkzLDIxMTQ0LDIxMTQzLDIyMjExLDIyMjA1LDIy''@;'; put 'put ''MjA2LDIzMzY4LDIzMzY3LDI0MDExLDI0MDE1LDI0MzA1LDI1MDg1LDI1ODgzLDI3Mzk0LDI3Mzg4LDI3Mzk1LDI3Mzg0LDI3MzkyLDI4NzM5LDI4NzQwLDI4NzQ2LDI4NzQ0LDI4NzQ1LDI4NzQxLDI4NzQyLDI5MjEzLDI5MjEwLDI5MjA5LDI5NTY2LDI5OTc1LDMwMzE0LDMwNjcyLDMxMDIx''@;'; put 'put ''LDMxMDI1LDMxMDIzLDMxODI4LDMxODI3LDMxOTg2LDMyMzk0LDMyMzkxLDMyMzkyLDMyMzk1LDMyMzkwLDMyMzk3LDMyNTg5LDMyNjk5LDMyODE2LDMzMjQ1LDM0MzI4LDM0MzQ2LDM0MzQyLDM0MzM1LDM0MzM5LDM0MzMyLDM0MzI5LDM0MzQzLDM0MzUwLDM0MzM3LDM0MzM2LDM0MzQ1LDM0''@;'; put 'put ''MzM0LDM0MzQxLDM0ODU3LDM0ODQ1LDM0ODQzLDM0ODQ4LDM0ODUyLDM0ODQ0LDM0ODU5LDM0ODkwLDM1MTgxLDM1MTc3LDM1MTgyLDM1MTc5LDM1MzIyLDM1NzA1LDM1NzA0LDM1NjUzLDM1NzA2LDM1NzA3LDM2MTEyLDM2MTE2LDM2MjcxLDM2NDk0LDM2NDkyLDM2NzAyLDM2Njk5LDM2NzAx''@;'; put 'put ''LDM3MTkwLDM3MTg4LDM3MTg5LDM3MzA1LDM3OTUxLDM3OTQ3LDM3OTQyLDM3OTI5LDM3OTQ5LDM3OTQ4LDM3OTM2LDM3OTQ1LDM3OTMwLDM3OTQzLDM3OTMyLDM3OTUyLDM3OTM3LDM4MzczLDM4MzcyLDM4MzcxLDM4NzA5LDM4NzE0LDM4ODQ3LDM4ODgxLDM5MDEyLDM5MTEzLDM5MTEwLDM5''@;'; put 'put ''MTA0LDM5MjU2LDM5MjU0LDM5NDgxLDM5NDg1LDM5NDk0LDM5NDkyLDM5NDkwLDM5NDg5LDM5NDgyLDM5NDg3LDM5NjI5LDM5NzAxLDM5NzAzLDM5NzA0LDM5NzAyLDM5NzM4LDM5NzYyLDM5OTc5LDM5OTY1LDM5OTY0LDM5OTgwLDM5OTcxLDM5OTc2LDM5OTc3LDM5OTcyLDM5OTY5LDQwMzc1''@;'; put 'put ''LDQwMzc0LDQwMzgwLDQwMzg1LDQwMzkxLDQwMzk0LDQwMzk5LDQwMzgyLDQwMzg5LDQwMzg3LDQwMzc5LDQwMzczLDQwMzk4LDQwMzc3LDQwMzc4LDQwMzY0LDQwMzkyLDQwMzY5LDQwMzY1LDQwMzk2LDQwMzcxLDQwMzk3LDQwMzcwLDQwNTcwLDQwNjA0LDQwNjgzLDQwNjg2LDQwNjg1LDQw''@;'; put 'put ''NzMxLDQwNzI4LDQwNzMwLDQwNzUzLDQwNzgyLDQwODA1LDQwODA0LDQwODUwLDIwMTUzLDIyMjE0LDIyMjEzLDIyMjE5LDIyODk3LDIzMzcxLDIzMzcyLDI0MDIxLDI0MDE3LDI0MzA2LDI1ODg5LDI1ODg4LDI1ODk0LDI1ODkwLDI3NDAzLDI3NDAwLDI3NDAxLDI3NjYxLDI4NzU3LDI4NzU4''@;'; put 'put ''LDI4NzU5LDI4NzU0LDI5MjE0LDI5MjE1LDI5MzUzLDI5NTY3LDI5OTEyLDI5OTA5LDI5OTEzLDI5OTExLDMwMzE3LDMwMzgxLDMxMDI5LDMxMTU2LDMxMzQ0LDMxMzQ1LDMxODMxLDMxODM2LDMxODMzLDMxODM1LDMxODM0LDMxOTg4LDMxOTg1LDMyNDAxLDMyNTkxLDMyNjQ3LDMzMjQ2LDMz''@;'; put 'put ''Mzg3LDM0MzU2LDM0MzU3LDM0MzU1LDM0MzQ4LDM0MzU0LDM0MzU4LDM0ODYwLDM0ODU2LDM0ODU0LDM0ODU4LDM0ODUzLDM1MTg1LDM1MjYzLDM1MjYyLDM1MzIzLDM1NzEwLDM1NzE2LDM1NzE0LDM1NzE4LDM1NzE3LDM1NzExLDM2MTE3LDM2NTAxLDM2NTAwLDM2NTA2LDM2NDk4LDM2NDk2''@;'; put 'put ''LDM2NTAyLDM2NTAzLDM2NzA0LDM2NzA2LDM3MTkxLDM3OTY0LDM3OTY4LDM3OTYyLDM3OTYzLDM3OTY3LDM3OTU5LDM3OTU3LDM3OTYwLDM3OTYxLDM3OTU4LDM4NzE5LDM4ODgzLDM5MDE4LDM5MDE3LDM5MTE1LDM5MjUyLDM5MjU5LDM5NTAyLDM5NTA3LDM5NTA4LDM5NTAwLDM5NTAzLDM5''@;'; put 'put ''NDk2LDM5NDk4LDM5NDk3LDM5NTA2LDM5NTA0LDM5NjMyLDM5NzA1LDM5NzIzLDM5NzM5LDM5NzY2LDM5NzY1LDQwMDA2LDQwMDA4LDM5OTk5LDQwMDA0LDM5OTkzLDM5OTg3LDQwMDAxLDM5OTk2LDM5OTkxLDM5OTg4LDM5OTg2LDM5OTk3LDM5OTkwLDQwNDExLDQwNDAyLDQwNDE0LDQwNDEw''@;'; put 'put ''LDQwMzk1LDQwNDAwLDQwNDEyLDQwNDAxLDQwNDE1LDQwNDI1LDQwNDA5LDQwNDA4LDQwNDA2LDQwNDM3LDQwNDA1LDQwNDEzLDQwNjMwLDQwNjg4LDQwNzU3LDQwNzU1LDQwNzU0LDQwNzcwLDQwODExLDQwODUzLDQwODY2LDIwNzk3LDIxMTQ1LDIyNzYwLDIyNzU5LDIyODk4LDIzMzczLDI0''@;'; put 'put ''MDI0LDM0ODYzLDI0Mzk5LDI1MDg5LDI1MDkxLDI1MDkyLDI1ODk3LDI1ODkzLDI2MDA2LDI2MzQ3LDI3NDA5LDI3NDEwLDI3NDA3LDI3NTk0LDI4NzYzLDI4NzYyLDI5MjE4LDI5NTcwLDI5NTY5LDI5NTcxLDMwMzIwLDMwNjc2LDMxODQ3LDMxODQ2LDMyNDA1LDMzMzg4LDM0MzYyLDM0MzY4''@;'; put 'put ''LDM0MzYxLDM0MzY0LDM0MzUzLDM0MzYzLDM0MzY2LDM0ODY0LDM0ODY2LDM0ODYyLDM0ODY3LDM1MTkwLDM1MTg4LDM1MTg3LDM1MzI2LDM1NzI0LDM1NzI2LDM1NzIzLDM1NzIwLDM1OTA5LDM2MTIxLDM2NTA0LDM2NzA4LDM2NzA3LDM3MzA4LDM3OTg2LDM3OTczLDM3OTgxLDM3OTc1LDM3''@;'; put 'put ''OTgyLDM4ODUyLDM4ODUzLDM4OTEyLDM5NTEwLDM5NTEzLDM5NzEwLDM5NzExLDM5NzEyLDQwMDE4LDQwMDI0LDQwMDE2LDQwMDEwLDQwMDEzLDQwMDExLDQwMDIxLDQwMDI1LDQwMDEyLDQwMDE0LDQwNDQzLDQwNDM5LDQwNDMxLDQwNDE5LDQwNDI3LDQwNDQwLDQwNDIwLDQwNDM4LDQwNDE3''@;'; put 'put ''LDQwNDMwLDQwNDIyLDQwNDM0LDQwNDMyLDQwNDE4LDQwNDI4LDQwNDM2LDQwNDM1LDQwNDI0LDQwNDI5LDQwNjQyLDQwNjU2LDQwNjkwLDQwNjkxLDQwNzEwLDQwNzMyLDQwNzYwLDQwNzU5LDQwNzU4LDQwNzcxLDQwNzgzLDQwODE3LDQwODE2LDQwODE0LDQwODE1LDIyMjI3LDIyMjIxLDIz''@;'; put 'put ''Mzc0LDIzNjYxLDI1OTAxLDI2MzQ5LDI2MzUwLDI3NDExLDI4NzY3LDI4NzY5LDI4NzY1LDI4NzY4LDI5MjE5LDI5OTE1LDI5OTI1LDMwNjc3LDMxMDMyLDMxMTU5LDMxMTU4LDMxODUwLDMyNDA3LDMyNjQ5LDMzMzg5LDM0MzcxLDM0ODcyLDM0ODcxLDM0ODY5LDM0ODkxLDM1NzMyLDM1NzMz''@;'; put 'put ''LDM2NTEwLDM2NTExLDM2NTEyLDM2NTA5LDM3MzEwLDM3MzA5LDM3MzE0LDM3OTk1LDM3OTkyLDM3OTkzLDM4NjI5LDM4NzI2LDM4NzIzLDM4NzI3LDM4ODU1LDM4ODg1LDM5NTE4LDM5NjM3LDM5NzY5LDQwMDM1LDQwMDM5LDQwMDM4LDQwMDM0LDQwMDMwLDQwMDMyLDQwNDUwLDQwNDQ2LDQw''@;'; put 'put ''NDU1LDQwNDUxLDQwNDU0LDQwNDUzLDQwNDQ4LDQwNDQ5LDQwNDU3LDQwNDQ3LDQwNDQ1LDQwNDUyLDQwNjA4LDQwNzM0LDQwNzc0LDQwODIwLDQwODIxLDQwODIyLDIyMjI4LDI1OTAyLDI2MDQwLDI3NDE2LDI3NDE3LDI3NDE1LDI3NDE4LDI4NzcwLDI5MjIyLDI5MzU0LDMwNjgwLDMwNjgx''@;'; put 'put ''LDMxMDMzLDMxODQ5LDMxODUxLDMxOTkwLDMyNDEwLDMyNDA4LDMyNDExLDMyNDA5LDMzMjQ4LDMzMjQ5LDM0Mzc0LDM0Mzc1LDM0Mzc2LDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk1LDM1MzI3LDM1NzM2LDM1NzM3LDM2NTE3LDM2NTE2LDM2NTE1LDM3OTk4LDM3OTk3LDM3OTk5LDM4MDAxLDM4''@;'; put 'put ''MDAzLDM4NzI5LDM5MDI2LDM5MjYzLDQwMDQwLDQwMDQ2LDQwMDQ1LDQwNDU5LDQwNDYxLDQwNDY0LDQwNDYzLDQwNDY2LDQwNDY1LDQwNjA5LDQwNjkzLDQwNzEzLDQwNzc1LDQwODI0LDQwODI3LDQwODI2LDQwODI1LDIyMzAyLDI4Nzc0LDMxODU1LDM0ODc2LDM2Mjc0LDM2NTE4LDM3MzE1''@;'; put 'put ''LDM4MDA0LDM4MDA4LDM4MDA2LDM4MDA1LDM5NTIwLDQwMDUyLDQwMDUxLDQwMDQ5LDQwMDUzLDQwNDY4LDQwNDY3LDQwNjk0LDQwNzE0LDQwODY4LDI4Nzc2LDI4NzczLDMxOTkxLDM0NDEwLDM0ODc4LDM0ODc3LDM0ODc5LDM1NzQyLDM1OTk2LDM2NTIxLDM2NTUzLDM4NzMxLDM5MDI3LDM5''@;'; put 'put ''MDI4LDM5MTE2LDM5MjY1LDM5MzM5LDM5NTI0LDM5NTI2LDM5NTI3LDM5NzE2LDQwNDY5LDQwNDcxLDQwNzc2LDI1MDk1LDI3NDIyLDI5MjIzLDM0MzgwLDM2NTIwLDM4MDE4LDM4MDE2LDM4MDE3LDM5NTI5LDM5NTI4LDM5NzI2LDQwNDczLDI5MjI1LDM0Mzc5LDM1NzQzLDM4MDE5LDQwMDU3''@;'; put 'put ''LDQwNjMxLDMwMzI1LDM5NTMxLDQwMDU4LDQwNDc3LDI4Nzc3LDI4Nzc4LDQwNjEyLDQwODMwLDQwNzc3LDQwODU2LDMwODQ5LDM3NTYxLDM1MDIzLDIyNzE1LDI0NjU4LDMxOTExLDIzMjkwLDk1NTYsOTU3NCw5NTU5LDk1NjgsOTU4MCw5NTcxLDk1NjIsOTU3Nyw5NTY1LDk1NTQsOTU3Miw5''@;'; put 'put ''NTU3LDk1NjYsOTU3OCw5NTY5LDk1NjAsOTU3NSw5NTYzLDk1NTUsOTU3Myw5NTU4LDk1NjcsOTU3OSw5NTcwLDk1NjEsOTU3Niw5NTY0LDk1NTMsOTU1Miw5NTgxLDk1ODIsOTU4NCw5NTgzLDY1NTE3LDEzMjQyMywzNzU5NSwxMzI1NzUsMTQ3Mzk3LDM0MTI0LDE3MDc3LDI5Njc5LDIwOTE3''@;'; put 'put ''LDEzODk3LDE0OTgyNiwxNjYzNzIsMzc3MDAsMTM3NjkxLDMzNTE4LDE0NjYzMiwzMDc4MCwyNjQzNiwyNTMxMSwxNDk4MTEsMTY2MzE0LDEzMTc0NCwxNTg2NDMsMTM1OTQxLDIwMzk1LDE0MDUyNSwyMDQ4OCwxNTkwMTcsMTYyNDM2LDE0NDg5NiwxNTAxOTMsMTQwNTYzLDIwNTIxLDEzMTk2''@;'; put 'put ''NiwyNDQ4NCwxMzE5NjgsMTMxOTExLDI4Mzc5LDEzMjEyNywyMDYwNSwyMDczNywxMzQzNCwyMDc1MCwzOTAyMCwxNDE0NywzMzgxNCwxNDk5MjQsMTMyMjMxLDIwODMyLDE0NDMwOCwyMDg0MiwxMzQxNDMsMTM5NTE2LDEzMTgxMywxNDA1OTIsMTMyNDk0LDE0MzkyMywxMzc2MDMsMjM0MjYs''@;'; put 'put ''MzQ2ODUsMTMyNTMxLDE0NjU4NSwyMDkxNCwyMDkyMCw0MDI0NCwyMDkzNywyMDk0MywyMDk0NSwxNTU4MCwyMDk0NywxNTAxODIsMjA5MTUsMjA5NjIsMjEzMTQsMjA5NzMsMzM3NDEsMjY5NDIsMTQ1MTk3LDI0NDQzLDIxMDAzLDIxMDMwLDIxMDUyLDIxMTczLDIxMDc5LDIxMTQwLDIxMTc3''@;'; put 'put ''LDIxMTg5LDMxNzY1LDM0MTE0LDIxMjE2LDM0MzE3LDE1ODQ4MywyMTI1MywxNjY2MjIsMjE4MzMsMjgzNzcsMTQ3MzI4LDEzMzQ2MCwxNDc0MzYsMjEyOTksMjEzMTYsMTM0MTE0LDI3ODUxLDEzNjk5OCwyNjY1MSwyOTY1MywyNDY1MCwxNjA0MiwxNDU0MCwxMzY5MzYsMjkxNDksMTc1NzAs''@;'; put 'put ''MjEzNTcsMjEzNjQsMTY1NTQ3LDIxMzc0LDIxMzc1LDEzNjU5OCwxMzY3MjMsMzA2OTQsMjEzOTUsMTY2NTU1LDIxNDA4LDIxNDE5LDIxNDIyLDI5NjA3LDE1MzQ1OCwxNjIxNywyOTU5NiwyMTQ0MSwyMTQ0NSwyNzcyMSwyMDA0MSwyMjUyNiwyMTQ2NSwxNTAxOSwxMzQwMzEsMjE0NzIsMTQ3''@;'; put 'put ''NDM1LDE0Mjc1NSwyMTQ5NCwxMzQyNjMsMjE1MjMsMjg3OTMsMjE4MDMsMjYxOTksMjc5OTUsMjE2MTMsMTU4NTQ3LDEzNDUxNiwyMTg1MywyMTY0NywyMTY2OCwxODM0MiwxMzY5NzMsMTM0ODc3LDE1Nzk2LDEzNDQ3NywxNjYzMzIsMTQwOTUyLDIxODMxLDE5NjkzLDIxNTUxLDI5NzE5LDIx''@;'; put 'put ''ODk0LDIxOTI5LDIyMDIxLDEzNzQzMSwxNDc1MTQsMTc3NDYsMTQ4NTMzLDI2MjkxLDEzNTM0OCwyMjA3MSwyNjMxNywxNDQwMTAsMjYyNzYsMjYyODUsMjIwOTMsMjIwOTUsMzA5NjEsMjIyNTcsMzg3OTEsMjE1MDIsMjIyNzIsMjIyNTUsMjIyNTMsMTY2NzU4LDEzODU5LDEzNTc1OSwyMjM0''@;'; put 'put ''MiwxNDc4NzcsMjc3NTgsMjg4MTEsMjIzMzgsMTQwMDEsMTU4ODQ2LDIyNTAyLDEzNjIxNCwyMjUzMSwxMzYyNzYsMTQ4MzIzLDIyNTY2LDE1MDUxNywyMjYyMCwyMjY5OCwxMzY2NSwyMjc1MiwyMjc0OCwxMzU3NDAsMjI3NzksMjM1NTEsMjIzMzksMTcyMzY4LDE0ODA4OCwzNzg0MywxMzcy''@;'; put 'put ''OSwyMjgxNSwyNjc5MCwxNDAxOSwyODI0OSwxMzY3NjYsMjMwNzYsMjE4NDMsMTM2ODUwLDM0MDUzLDIyOTg1LDEzNDQ3OCwxNTg4NDksMTU5MDE4LDEzNzE4MCwyMzAwMSwxMzcyMTEsMTM3MTM4LDE1OTE0MiwyODAxNywxMzcyNTYsMTM2OTE3LDIzMDMzLDE1OTMwMSwyMzIxMSwyMzEzOSwx''@;'; put 'put ''NDA1NCwxNDk5MjksMjMxNTksMTQwODgsMjMxOTAsMjk3OTcsMjMyNTEsMTU5NjQ5LDE0MDYyOCwxNTc0OSwxMzc0ODksMTQxMzAsMTM2ODg4LDI0MTk1LDIxMjAwLDIzNDE0LDI1OTkyLDIzNDIwLDE2MjMxOCwxNjM4OCwxODUyNSwxMzE1ODgsMjM1MDksMjQ5MjgsMTM3NzgwLDE1NDA2MCwx''@;'; put 'put ''MzI1MTcsMjM1MzksMjM0NTMsMTk3MjgsMjM1NTcsMTM4MDUyLDIzNTcxLDI5NjQ2LDIzNTcyLDEzODQwNSwxNTg1MDQsMjM2MjUsMTg2NTMsMjM2ODUsMjM3ODUsMjM3OTEsMjM5NDcsMTM4NzQ1LDEzODgwNywyMzgyNCwyMzgzMiwyMzg3OCwxMzg5MTYsMjM3MzgsMjQwMjMsMzM1MzIsMTQz''@;'; put 'put ''ODEsMTQ5NzYxLDEzOTMzNywxMzk2MzUsMzM0MTUsMTQzOTAsMTUyOTgsMjQxMTAsMjcyNzQsMjQxODEsMjQxODYsMTQ4NjY4LDEzNDM1NSwyMTQxNCwyMDE1MSwyNDI3MiwyMTQxNiwxMzcwNzMsMjQwNzMsMjQzMDgsMTY0OTk0LDI0MzEzLDI0MzE1LDE0NDk2LDI0MzE2LDI2Njg2LDM3OTE1''@;'; put 'put ''LDI0MzMzLDEzMTUyMSwxOTQ3MDgsMTUwNzAsMTg2MDYsMTM1OTk0LDI0Mzc4LDE1NzgzMiwxNDAyNDAsMjQ0MDgsMTQwNDAxLDI0NDE5LDM4ODQ1LDE1OTM0MiwyNDQzNCwzNzY5NiwxNjY0NTQsMjQ0ODcsMjM5OTAsMTU3MTEsMTUyMTQ0LDEzOTExNCwxNTk5OTIsMTQwOTA0LDM3MzM0LDEz''@;'; put 'put ''MTc0MiwxNjY0NDEsMjQ2MjUsMjYyNDUsMTM3MzM1LDE0NjkxLDE1ODE1LDEzODgxLDIyNDE2LDE0MTIzNiwzMTA4OSwxNTkzNiwyNDczNCwyNDc0MCwyNDc1NSwxNDk4OTAsMTQ5OTAzLDE2MjM4NywyOTg2MCwyMDcwNSwyMzIwMCwyNDkzMiwzMzgyOCwyNDg5OCwxOTQ3MjYsMTU5NDQyLDI0''@;'; put 'put ''OTYxLDIwOTgwLDEzMjY5NCwyNDk2NywyMzQ2NiwxNDczODMsMTQxNDA3LDI1MDQzLDE2NjgxMywxNzAzMzMsMjUwNDAsMTQ2NDIsMTQxNjk2LDE0MTUwNSwyNDYxMSwyNDkyNCwyNTg4NiwyNTQ4MywxMzEzNTIsMjUyODUsMTM3MDcyLDI1MzAxLDE0Mjg2MSwyNTQ1MiwxNDk5ODMsMTQ4NzEs''@;'; put 'put ''MjU2NTYsMjU1OTIsMTM2MDc4LDEzNzIxMiwyNTc0NCwyODU1NCwxNDI5MDIsMzg5MzIsMTQ3NTk2LDE1MzM3MywyNTgyNSwyNTgyOSwzODAxMSwxNDk1MCwyNTY1OCwxNDkzNSwyNTkzMywyODQzOCwxNTAwNTYsMTUwMDUxLDI1OTg5LDI1OTY1LDI1OTUxLDE0MzQ4NiwyNjAzNywxNDk4MjQs''@;'; put 'put ''MTkyNTUsMjYwNjUsMTY2MDAsMTM3MjU3LDI2MDgwLDI2MDgzLDI0NTQzLDE0NDM4NCwyNjEzNiwxNDM4NjMsMTQzODY0LDI2MTgwLDE0Mzc4MCwxNDM3ODEsMjYxODcsMTM0NzczLDI2MjE1LDE1MjAzOCwyNjIyNywyNjIyOCwxMzg4MTMsMTQzOTIxLDE2NTM2NCwxNDM4MTYsMTUyMzM5LDMw''@;'; put 'put ''NjYxLDE0MTU1OSwzOTMzMiwyNjM3MCwxNDgzODAsMTUwMDQ5LDE1MTQ3LDI3MTMwLDE0NTM0NiwyNjQ2MiwyNjQ3MSwyNjQ2NiwxNDc5MTcsMTY4MTczLDI2NTgzLDE3NjQxLDI2NjU4LDI4MjQwLDM3NDM2LDI2NjI1LDE0NDM1OCwxNTkxMzYsMjY3MTcsMTQ0NDk1LDI3MTA1LDI3MTQ3LDE2''@;'; put 'put ''NjYyMywyNjk5NSwyNjgxOSwxNDQ4NDUsMjY4ODEsMjY4ODAsMTU2NjYsMTQ4NDksMTQ0OTU2LDE1MjMyLDI2NTQwLDI2OTc3LDE2NjQ3NCwxNzE0OCwyNjkzNCwyNzAzMiwxNTI2NSwxMzIwNDEsMzM2MzUsMjA2MjQsMjcxMjksMTQ0OTg1LDEzOTU2MiwyNzIwNSwxNDUxNTUsMjcyOTMsMTUz''@;'; put 'put ''NDcsMjY1NDUsMjczMzYsMTY4MzQ4LDE1MzczLDI3NDIxLDEzMzQxMSwyNDc5OCwyNzQ0NSwyNzUwOCwxNDEyNjEsMjgzNDEsMTQ2MTM5LDEzMjAyMSwxMzc1NjAsMTQxNDQsMjE1MzcsMTQ2MjY2LDI3NjE3LDE0NzE5NiwyNzYxMiwyNzcwMywxNDA0MjcsMTQ5NzQ1LDE1ODU0NSwyNzczOCwz''@;'; put 'put ''MzMxOCwyNzc2OSwxNDY4NzYsMTc2MDUsMTQ2ODc3LDE0Nzg3NiwxNDk3NzIsMTQ5NzYwLDE0NjYzMywxNDA1MywxNTU5NSwxMzQ0NTAsMzk4MTEsMTQzODY1LDE0MDQzMywzMjY1NSwyNjY3OSwxNTkwMTMsMTU5MTM3LDE1OTIxMSwyODA1NCwyNzk5NiwyODI4NCwyODQyMCwxNDk4ODcsMTQ3''@;'; put 'put ''NTg5LDE1OTM0NiwzNDA5OSwxNTk2MDQsMjA5MzUsMjc4MDQsMjgxODksMzM4MzgsMTY2Njg5LDI4MjA3LDE0Njk5MSwyOTc3OSwxNDczMzAsMzExODAsMjgyMzksMjMxODUsMTQzNDM1LDI4NjY0LDE0MDkzLDI4NTczLDE0Njk5MiwyODQxMCwxMzYzNDMsMTQ3NTE3LDE3NzQ5LDM3ODcyLDI4''@;'; put 'put ''NDg0LDI4NTA4LDE1Njk0LDI4NTMyLDE2ODMwNCwxNTY3NSwyODU3NSwxNDc3ODAsMjg2MjcsMTQ3NjAxLDE0Nzc5NywxNDc1MTMsMTQ3NDQwLDE0NzM4MCwxNDc3NzUsMjA5NTksMTQ3Nzk4LDE0Nzc5OSwxNDc3NzYsMTU2MTI1LDI4NzQ3LDI4Nzk4LDI4ODM5LDI4ODAxLDI4ODc2LDI4ODg1''@;'; put 'put ''LDI4ODg2LDI4ODk1LDE2NjQ0LDE1ODQ4LDI5MTA4LDI5MDc4LDE0ODA4NywyODk3MSwyODk5NywyMzE3NiwyOTAwMiwyOTAzOCwyMzcwOCwxNDgzMjUsMjkwMDcsMzc3MzAsMTQ4MTYxLDI4OTcyLDE0ODU3MCwxNTAwNTUsMTUwMDUwLDI5MTE0LDE2Njg4OCwyODg2MSwyOTE5OCwzNzk1NCwy''@;'; put 'put ''OTIwNSwyMjgwMSwzNzk1NSwyOTIyMCwzNzY5NywxNTMwOTMsMjkyMzAsMjkyNDgsMTQ5ODc2LDI2ODEzLDI5MjY5LDI5MjcxLDE1OTU3LDE0MzQyOCwyNjYzNywyODQ3NywyOTMxNCwyOTQ4MiwyOTQ4MywxNDk1MzksMTY1OTMxLDE4NjY5LDE2NTg5MiwyOTQ4MCwyOTQ4NiwyOTY0NywyOTYx''@;'; put 'put ''MCwxMzQyMDIsMTU4MjU0LDI5NjQxLDI5NzY5LDE0NzkzOCwxMzY5MzUsMTUwMDUyLDI2MTQ3LDE0MDIxLDE0OTk0MywxNDk5MDEsMTUwMDExLDI5Njg3LDI5NzE3LDI2ODgzLDE1MDA1NCwyOTc1MywxMzI1NDcsMTYwODcsMjk3ODgsMTQxNDg1LDI5NzkyLDE2NzYwMiwyOTc2NywyOTY2OCwy''@;'; put 'put ''OTgxNCwzMzcyMSwyOTgwNCwxNDEyOCwyOTgxMiwzNzg3MywyNzE4MCwyOTgyNiwxODc3MSwxNTAxNTYsMTQ3ODA3LDE1MDEzNywxNjY3OTksMjMzNjYsMTY2OTE1LDEzNzM3NCwyOTg5NiwxMzc2MDgsMjk5NjYsMjk5MjksMjk5ODIsMTY3NjQxLDEzNzgwMywyMzUxMSwxNjc1OTYsMzc3NjUs''@;'; put 'put ''MzAwMjksMzAwMjYsMzAwNTUsMzAwNjIsMTUxNDI2LDE2MTMyLDE1MDgwMywzMDA5NCwyOTc4OSwzMDExMCwzMDEzMiwzMDIxMCwzMDI1MiwzMDI4OSwzMDI4NywzMDMxOSwzMDMyNiwxNTY2NjEsMzAzNTIsMzMyNjMsMTQzMjgsMTU3OTY5LDE1Nzk2NiwzMDM2OSwzMDM3MywzMDM5MSwzMDQx''@;'; put 'put ''MiwxNTk2NDcsMzM4OTAsMTUxNzA5LDE1MTkzMywxMzg3ODAsMzA0OTQsMzA1MDIsMzA1MjgsMjU3NzUsMTUyMDk2LDMwNTUyLDE0NDA0NCwzMDYzOSwxNjYyNDQsMTY2MjQ4LDEzNjg5NywzMDcwOCwzMDcyOSwxMzYwNTQsMTUwMDM0LDI2ODI2LDMwODk1LDMwOTE5LDMwOTMxLDM4NTY1LDMx''@;'; put 'put ''MDIyLDE1MzA1NiwzMDkzNSwzMTAyOCwzMDg5NywxNjEyOTIsMzY3OTIsMzQ5NDgsMTY2Njk5LDE1NTc3OSwxNDA4MjgsMzExMTAsMzUwNzIsMjY4ODIsMzExMDQsMTUzNjg3LDMxMTMzLDE2MjYxNywzMTAzNiwzMTE0NSwyODIwMiwxNjAwMzgsMTYwNDAsMzExNzQsMTY4MjA1LDMxMTg4XSwi''@;'; put 'put ''ZXVjLWtyIjpbNDQwMzQsNDQwMzUsNDQwMzcsNDQwMzgsNDQwNDMsNDQwNDQsNDQwNDUsNDQwNDYsNDQwNDcsNDQwNTYsNDQwNjIsNDQwNjMsNDQwNjUsNDQwNjYsNDQwNjcsNDQwNjksNDQwNzAsNDQwNzEsNDQwNzIsNDQwNzMsNDQwNzQsNDQwNzUsNDQwNzgsNDQwODIsNDQwODMsNDQwODQs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQwODUsNDQwODYsNDQwODcsNDQwOTAsNDQwOTEsNDQwOTMsNDQwOTQsNDQwOTUsNDQwOTcsNDQwOTgsNDQwOTksNDQxMDAsNDQxMDEsNDQxMDIsNDQxMDMsNDQxMDQsNDQxMDUsNDQxMDYsNDQxMDgsNDQxMTAsNDQxMTEsNDQxMTIsNDQx''@;'; put 'put ''MTMsNDQxMTQsNDQxMTUsNDQxMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQxMTgsNDQxMTksNDQxMjEsNDQxMjIsNDQxMjMsNDQxMjUsNDQxMjYsNDQxMjcsNDQxMjgsNDQxMjksNDQxMzAsNDQxMzEsNDQxMzIsNDQxMzMsNDQxMzQsNDQxMzUsNDQxMzYsNDQxMzcsNDQxMzgs''@;'; put 'put ''NDQxMzksNDQxNDAsNDQxNDEsNDQxNDIsNDQxNDMsNDQxNDYsNDQxNDcsNDQxNDksNDQxNTAsNDQxNTMsNDQxNTUsNDQxNTYsNDQxNTcsNDQxNTgsNDQxNTksNDQxNjIsNDQxNjcsNDQxNjgsNDQxNzMsNDQxNzQsNDQxNzUsNDQxNzcsNDQxNzgsNDQxNzksNDQxODEsNDQxODIsNDQxODMsNDQx''@;'; put 'put ''ODQsNDQxODUsNDQxODYsNDQxODcsNDQxOTAsNDQxOTQsNDQxOTUsNDQxOTYsNDQxOTcsNDQxOTgsNDQxOTksNDQyMDMsNDQyMDUsNDQyMDYsNDQyMDksNDQyMTAsNDQyMTEsNDQyMTIsNDQyMTMsNDQyMTQsNDQyMTUsNDQyMTgsNDQyMjIsNDQyMjMsNDQyMjQsNDQyMjYsNDQyMjcsNDQyMjks''@;'; put 'put ''NDQyMzAsNDQyMzEsNDQyMzMsNDQyMzQsNDQyMzUsNDQyMzcsNDQyMzgsNDQyMzksNDQyNDAsNDQyNDEsNDQyNDIsNDQyNDMsNDQyNDQsNDQyNDYsNDQyNDgsNDQyNDksNDQyNTAsNDQyNTEsNDQyNTIsNDQyNTMsNDQyNTQsNDQyNTUsNDQyNTgsNDQyNTksNDQyNjEsNDQyNjIsNDQyNjUsNDQy''@;'; put 'put ''NjcsNDQyNjksNDQyNzAsNDQyNzQsNDQyNzYsNDQyNzksNDQyODAsNDQyODEsNDQyODIsNDQyODMsNDQyODYsNDQyODcsNDQyODksNDQyOTAsNDQyOTEsNDQyOTMsNDQyOTUsNDQyOTYsNDQyOTcsNDQyOTgsNDQyOTksNDQzMDIsNDQzMDQsNDQzMDYsNDQzMDcsNDQzMDgsNDQzMDksNDQzMTAs''@;'; put 'put ''NDQzMTEsNDQzMTMsNDQzMTQsNDQzMTUsNDQzMTcsNDQzMTgsNDQzMTksNDQzMjEsNDQzMjIsNDQzMjMsNDQzMjQsNDQzMjUsNDQzMjYsNDQzMjcsNDQzMjgsNDQzMzAsNDQzMzEsNDQzMzQsNDQzMzUsNDQzMzYsNDQzMzcsNDQzMzgsNDQzMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNDQzNDIsNDQzNDMsNDQzNDUsNDQzNDYsNDQzNDcsNDQzNDksNDQzNTAsNDQzNTEsNDQzNTIsNDQzNTMsNDQzNTQsNDQzNTUsNDQzNTgsNDQzNjAsNDQzNjIsNDQzNjMsNDQzNjQsNDQzNjUsNDQzNjYsNDQzNjcsNDQzNjksNDQzNzAsNDQzNzEsNDQzNzMsNDQzNzQsNDQzNzUsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNzcsNDQzNzgsNDQzNzksNDQzODAsNDQzODEsNDQzODIsNDQzODMsNDQzODQsNDQzODYsNDQzODgsNDQzODksNDQzOTAsNDQzOTEsNDQzOTIsNDQzOTMsNDQzOTQsNDQzOTUsNDQzOTgsNDQzOTksNDQ0MDEsNDQ0MDIsNDQ0MDcsNDQ0MDgsNDQ0''@;'; put 'put ''MDksNDQ0MTAsNDQ0MTQsNDQ0MTYsNDQ0MTksNDQ0MjAsNDQ0MjEsNDQ0MjIsNDQ0MjMsNDQ0MjYsNDQ0MjcsNDQ0MjksNDQ0MzAsNDQ0MzEsNDQ0MzMsNDQ0MzQsNDQ0MzUsNDQ0MzYsNDQ0MzcsNDQ0MzgsNDQ0MzksNDQ0NDAsNDQ0NDEsNDQ0NDIsNDQ0NDMsNDQ0NDYsNDQ0NDcsNDQ0NDgs''@;'; put 'put ''NDQ0NDksNDQ0NTAsNDQ0NTEsNDQ0NTMsNDQ0NTQsNDQ0NTUsNDQ0NTYsNDQ0NTcsNDQ0NTgsNDQ0NTksNDQ0NjAsNDQ0NjEsNDQ0NjIsNDQ0NjMsNDQ0NjQsNDQ0NjUsNDQ0NjYsNDQ0NjcsNDQ0NjgsNDQ0NjksNDQ0NzAsNDQ0NzIsNDQ0NzMsNDQ0NzQsNDQ0NzUsNDQ0NzYsNDQ0NzcsNDQ0''@;'; put 'put ''NzgsNDQ0NzksNDQ0ODIsNDQ0ODMsNDQ0ODUsNDQ0ODYsNDQ0ODcsNDQ0ODksNDQ0OTAsNDQ0OTEsNDQ0OTIsNDQ0OTMsNDQ0OTQsNDQ0OTUsNDQ0OTgsNDQ1MDAsNDQ1MDEsNDQ1MDIsNDQ1MDMsNDQ1MDQsNDQ1MDUsNDQ1MDYsNDQ1MDcsNDQ1MDksNDQ1MTAsNDQ1MTEsNDQ1MTMsNDQ1MTQs''@;'; put 'put ''NDQ1MTUsNDQ1MTcsNDQ1MTgsNDQ1MTksNDQ1MjAsNDQ1MjEsNDQ1MjIsNDQ1MjMsNDQ1MjQsNDQ1MjUsNDQ1MjYsNDQ1MjcsNDQ1MjgsNDQ1MjksNDQ1MzAsNDQ1MzEsNDQ1MzIsNDQ1MzMsNDQ1MzQsNDQ1MzUsNDQ1MzgsNDQ1MzksNDQ1NDEsNDQ1NDIsNDQ1NDYsNDQ1NDcsNDQ1NDgsNDQ1''@;'; put 'put ''NDksNDQ1NTAsNDQ1NTEsNDQ1NTQsNDQ1NTYsNDQ1NTgsNDQ1NTksNDQ1NjAsNDQ1NjEsNDQ1NjIsNDQ1NjMsNDQ1NjUsNDQ1NjYsNDQ1NjcsNDQ1NjgsNDQ1NjksNDQ1NzAsNDQ1NzEsNDQ1NzIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ1NzMsNDQ1NzQsNDQ1NzUsNDQ1NzYs''@;'; put 'put ''NDQ1NzcsNDQ1NzgsNDQ1NzksNDQ1ODAsNDQ1ODEsNDQ1ODIsNDQ1ODMsNDQ1ODQsNDQ1ODUsNDQ1ODYsNDQ1ODcsNDQ1ODgsNDQ1ODksNDQ1OTAsNDQ1OTEsNDQ1OTQsNDQ1OTUsNDQ1OTcsNDQ1OTgsNDQ2MDEsNDQ2MDMsNDQ2MDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ2''@;'; put 'put ''MDUsNDQ2MDYsNDQ2MDcsNDQ2MTAsNDQ2MTIsNDQ2MTUsNDQ2MTYsNDQ2MTcsNDQ2MTksNDQ2MjMsNDQ2MjUsNDQ2MjYsNDQ2MjcsNDQ2MjksNDQ2MzEsNDQ2MzIsNDQ2MzMsNDQ2MzQsNDQ2MzUsNDQ2MzgsNDQ2NDIsNDQ2NDMsNDQ2NDQsNDQ2NDYsNDQ2NDcsNDQ2NTAsNDQ2NTEsNDQ2NTMs''@;'; put 'put ''NDQ2NTQsNDQ2NTUsNDQ2NTcsNDQ2NTgsNDQ2NTksNDQ2NjAsNDQ2NjEsNDQ2NjIsNDQ2NjMsNDQ2NjYsNDQ2NzAsNDQ2NzEsNDQ2NzIsNDQ2NzMsNDQ2NzQsNDQ2NzUsNDQ2NzgsNDQ2NzksNDQ2ODAsNDQ2ODEsNDQ2ODIsNDQ2ODMsNDQ2ODUsNDQ2ODYsNDQ2ODcsNDQ2ODgsNDQ2ODksNDQ2''@;'; put 'put ''OTAsNDQ2OTEsNDQ2OTIsNDQ2OTMsNDQ2OTQsNDQ2OTUsNDQ2OTYsNDQ2OTcsNDQ2OTgsNDQ2OTksNDQ3MDAsNDQ3MDEsNDQ3MDIsNDQ3MDMsNDQ3MDQsNDQ3MDUsNDQ3MDYsNDQ3MDcsNDQ3MDgsNDQ3MDksNDQ3MTAsNDQ3MTEsNDQ3MTIsNDQ3MTMsNDQ3MTQsNDQ3MTUsNDQ3MTYsNDQ3MTcs''@;'; put 'put ''NDQ3MTgsNDQ3MTksNDQ3MjAsNDQ3MjEsNDQ3MjIsNDQ3MjMsNDQ3MjQsNDQ3MjUsNDQ3MjYsNDQ3MjcsNDQ3MjgsNDQ3MjksNDQ3MzAsNDQ3MzEsNDQ3MzUsNDQ3MzcsNDQ3MzgsNDQ3MzksNDQ3NDEsNDQ3NDIsNDQ3NDMsNDQ3NDQsNDQ3NDUsNDQ3NDYsNDQ3NDcsNDQ3NTAsNDQ3NTQsNDQ3''@;'; put 'put ''NTUsNDQ3NTYsNDQ3NTcsNDQ3NTgsNDQ3NTksNDQ3NjIsNDQ3NjMsNDQ3NjUsNDQ3NjYsNDQ3NjcsNDQ3NjgsNDQ3NjksNDQ3NzAsNDQ3NzEsNDQ3NzIsNDQ3NzMsNDQ3NzQsNDQ3NzUsNDQ3NzcsNDQ3NzgsNDQ3ODAsNDQ3ODIsNDQ3ODMsNDQ3ODQsNDQ3ODUsNDQ3ODYsNDQ3ODcsNDQ3ODks''@;'; put 'put ''NDQ3OTAsNDQ3OTEsNDQ3OTMsNDQ3OTQsNDQ3OTUsNDQ3OTcsNDQ3OTgsNDQ3OTksNDQ4MDAsNDQ4MDEsNDQ4MDIsNDQ4MDMsNDQ4MDQsNDQ4MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MDYsNDQ4MDksNDQ4MTAsNDQ4MTEsNDQ4MTIsNDQ4MTQsNDQ4MTUsNDQ4MTcsNDQ4''@;'; put 'put ''MTgsNDQ4MTksNDQ4MjAsNDQ4MjEsNDQ4MjIsNDQ4MjMsNDQ4MjQsNDQ4MjUsNDQ4MjYsNDQ4MjcsNDQ4MjgsNDQ4MjksNDQ4MzAsNDQ4MzEsNDQ4MzIsNDQ4MzMsNDQ4MzQsNDQ4MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MzYsNDQ4MzcsNDQ4MzgsNDQ4MzksNDQ4NDAs''@;'; put 'put ''NDQ4NDEsNDQ4NDIsNDQ4NDMsNDQ4NDYsNDQ4NDcsNDQ4NDksNDQ4NTEsNDQ4NTMsNDQ4NTQsNDQ4NTUsNDQ4NTYsNDQ4NTcsNDQ4NTgsNDQ4NTksNDQ4NjIsNDQ4NjQsNDQ4NjgsNDQ4NjksNDQ4NzAsNDQ4NzEsNDQ4NzQsNDQ4NzUsNDQ4NzYsNDQ4NzcsNDQ4NzgsNDQ4NzksNDQ4ODEsNDQ4''@;'; put 'put ''ODIsNDQ4ODMsNDQ4ODQsNDQ4ODUsNDQ4ODYsNDQ4ODcsNDQ4ODgsNDQ4ODksNDQ4OTAsNDQ4OTEsNDQ4OTQsNDQ4OTUsNDQ4OTYsNDQ4OTcsNDQ4OTgsNDQ4OTksNDQ5MDIsNDQ5MDMsNDQ5MDQsNDQ5MDUsNDQ5MDYsNDQ5MDcsNDQ5MDgsNDQ5MDksNDQ5MTAsNDQ5MTEsNDQ5MTIsNDQ5MTMs''@;'; put 'put ''NDQ5MTQsNDQ5MTUsNDQ5MTYsNDQ5MTcsNDQ5MTgsNDQ5MTksNDQ5MjAsNDQ5MjIsNDQ5MjMsNDQ5MjQsNDQ5MjUsNDQ5MjYsNDQ5MjcsNDQ5MjksNDQ5MzAsNDQ5MzEsNDQ5MzMsNDQ5MzQsNDQ5MzUsNDQ5MzcsNDQ5MzgsNDQ5MzksNDQ5NDAsNDQ5NDEsNDQ5NDIsNDQ5NDMsNDQ5NDYsNDQ5''@;'; put 'put ''NDcsNDQ5NDgsNDQ5NTAsNDQ5NTEsNDQ5NTIsNDQ5NTMsNDQ5NTQsNDQ5NTUsNDQ5NTcsNDQ5NTgsNDQ5NTksNDQ5NjAsNDQ5NjEsNDQ5NjIsNDQ5NjMsNDQ5NjQsNDQ5NjUsNDQ5NjYsNDQ5NjcsNDQ5NjgsNDQ5NjksNDQ5NzAsNDQ5NzEsNDQ5NzIsNDQ5NzMsNDQ5NzQsNDQ5NzUsNDQ5NzYs''@;'; put 'put ''NDQ5NzcsNDQ5NzgsNDQ5NzksNDQ5ODAsNDQ5ODEsNDQ5ODIsNDQ5ODMsNDQ5ODYsNDQ5ODcsNDQ5ODksNDQ5OTAsNDQ5OTEsNDQ5OTMsNDQ5OTQsNDQ5OTUsNDQ5OTYsNDQ5OTcsNDQ5OTgsNDUwMDIsNDUwMDQsNDUwMDcsNDUwMDgsNDUwMDksNDUwMTAsNDUwMTEsNDUwMTMsNDUwMTQsNDUw''@;'; put 'put ''MTUsNDUwMTYsNDUwMTcsNDUwMTgsNDUwMTksNDUwMjEsNDUwMjIsNDUwMjMsNDUwMjQsNDUwMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwMjYsNDUwMjcsNDUwMjgsNDUwMjksNDUwMzAsNDUwMzEsNDUwMzQsNDUwMzUsNDUwMzYsNDUwMzcsNDUwMzgsNDUwMzksNDUwNDIs''@;'; put 'put ''NDUwNDMsNDUwNDUsNDUwNDYsNDUwNDcsNDUwNDksNDUwNTAsNDUwNTEsNDUwNTIsNDUwNTMsNDUwNTQsNDUwNTUsNDUwNTgsNDUwNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwNjEsNDUwNjIsNDUwNjMsNDUwNjQsNDUwNjUsNDUwNjYsNDUwNjcsNDUwNjksNDUwNzAsNDUw''@;'; put 'put ''NzEsNDUwNzMsNDUwNzQsNDUwNzUsNDUwNzcsNDUwNzgsNDUwNzksNDUwODAsNDUwODEsNDUwODIsNDUwODMsNDUwODYsNDUwODcsNDUwODgsNDUwODksNDUwOTAsNDUwOTEsNDUwOTIsNDUwOTMsNDUwOTQsNDUwOTUsNDUwOTcsNDUwOTgsNDUwOTksNDUxMDAsNDUxMDEsNDUxMDIsNDUxMDMs''@;'; put 'put ''NDUxMDQsNDUxMDUsNDUxMDYsNDUxMDcsNDUxMDgsNDUxMDksNDUxMTAsNDUxMTEsNDUxMTIsNDUxMTMsNDUxMTQsNDUxMTUsNDUxMTYsNDUxMTcsNDUxMTgsNDUxMTksNDUxMjAsNDUxMjEsNDUxMjIsNDUxMjMsNDUxMjYsNDUxMjcsNDUxMjksNDUxMzEsNDUxMzMsNDUxMzUsNDUxMzYsNDUx''@;'; put 'put ''MzcsNDUxMzgsNDUxNDIsNDUxNDQsNDUxNDYsNDUxNDcsNDUxNDgsNDUxNTAsNDUxNTEsNDUxNTIsNDUxNTMsNDUxNTQsNDUxNTUsNDUxNTYsNDUxNTcsNDUxNTgsNDUxNTksNDUxNjAsNDUxNjEsNDUxNjIsNDUxNjMsNDUxNjQsNDUxNjUsNDUxNjYsNDUxNjcsNDUxNjgsNDUxNjksNDUxNzAs''@;'; put 'put ''NDUxNzEsNDUxNzIsNDUxNzMsNDUxNzQsNDUxNzUsNDUxNzYsNDUxNzcsNDUxNzgsNDUxNzksNDUxODIsNDUxODMsNDUxODUsNDUxODYsNDUxODcsNDUxODksNDUxOTAsNDUxOTEsNDUxOTIsNDUxOTMsNDUxOTQsNDUxOTUsNDUxOTgsNDUyMDAsNDUyMDIsNDUyMDMsNDUyMDQsNDUyMDUsNDUy''@;'; put 'put ''MDYsNDUyMDcsNDUyMTEsNDUyMTMsNDUyMTQsNDUyMTksNDUyMjAsNDUyMjEsNDUyMjIsNDUyMjMsNDUyMjYsNDUyMzIsNDUyMzQsNDUyMzgsNDUyMzksNDUyNDEsNDUyNDIsNDUyNDMsNDUyNDUsNDUyNDYsNDUyNDcsNDUyNDgsNDUyNDksNDUyNTAsNDUyNTEsNDUyNTQsNDUyNTgsNDUyNTks''@;'; put 'put ''NDUyNjAsNDUyNjEsNDUyNjIsNDUyNjMsNDUyNjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyNjcsNDUyNjksNDUyNzAsNDUyNzEsNDUyNzMsNDUyNzQsNDUyNzUsNDUyNzYsNDUyNzcsNDUyNzgsNDUyNzksNDUyODEsNDUyODIsNDUyODMsNDUyODQsNDUyODYsNDUyODcsNDUy''@;'; put 'put ''ODgsNDUyODksNDUyOTAsNDUyOTEsNDUyOTIsNDUyOTMsNDUyOTQsNDUyOTUsNDUyOTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyOTcsNDUyOTgsNDUyOTksNDUzMDAsNDUzMDEsNDUzMDIsNDUzMDMsNDUzMDQsNDUzMDUsNDUzMDYsNDUzMDcsNDUzMDgsNDUzMDksNDUzMTAs''@;'; put 'put ''NDUzMTEsNDUzMTIsNDUzMTMsNDUzMTQsNDUzMTUsNDUzMTYsNDUzMTcsNDUzMTgsNDUzMTksNDUzMjIsNDUzMjUsNDUzMjYsNDUzMjcsNDUzMjksNDUzMzIsNDUzMzMsNDUzMzQsNDUzMzUsNDUzMzgsNDUzNDIsNDUzNDMsNDUzNDQsNDUzNDUsNDUzNDYsNDUzNTAsNDUzNTEsNDUzNTMsNDUz''@;'; put 'put ''NTQsNDUzNTUsNDUzNTcsNDUzNTgsNDUzNTksNDUzNjAsNDUzNjEsNDUzNjIsNDUzNjMsNDUzNjYsNDUzNzAsNDUzNzEsNDUzNzIsNDUzNzMsNDUzNzQsNDUzNzUsNDUzNzgsNDUzNzksNDUzODEsNDUzODIsNDUzODMsNDUzODUsNDUzODYsNDUzODcsNDUzODgsNDUzODksNDUzOTAsNDUzOTEs''@;'; put 'put ''NDUzOTQsNDUzOTUsNDUzOTgsNDUzOTksNDU0MDEsNDU0MDIsNDU0MDMsNDU0MDUsNDU0MDYsNDU0MDcsNDU0MDksNDU0MTAsNDU0MTEsNDU0MTIsNDU0MTMsNDU0MTQsNDU0MTUsNDU0MTYsNDU0MTcsNDU0MTgsNDU0MTksNDU0MjAsNDU0MjEsNDU0MjIsNDU0MjMsNDU0MjQsNDU0MjUsNDU0''@;'; put 'put ''MjYsNDU0MjcsNDU0MjgsNDU0MjksNDU0MzAsNDU0MzEsNDU0MzQsNDU0MzUsNDU0MzcsNDU0MzgsNDU0MzksNDU0NDEsNDU0NDMsNDU0NDQsNDU0NDUsNDU0NDYsNDU0NDcsNDU0NTAsNDU0NTIsNDU0NTQsNDU0NTUsNDU0NTYsNDU0NTcsNDU0NjEsNDU0NjIsNDU0NjMsNDU0NjUsNDU0NjYs''@;'; put 'put ''NDU0NjcsNDU0NjksNDU0NzAsNDU0NzEsNDU0NzIsNDU0NzMsNDU0NzQsNDU0NzUsNDU0NzYsNDU0NzcsNDU0NzgsNDU0NzksNDU0ODEsNDU0ODIsNDU0ODMsNDU0ODQsNDU0ODUsNDU0ODYsNDU0ODcsNDU0ODgsNDU0ODksNDU0OTAsNDU0OTEsNDU0OTIsNDU0OTMsNDU0OTQsNDU0OTUsNDU0''@;'; put 'put ''OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU0OTcsNDU0OTgsNDU0OTksNDU1MDAsNDU1MDEsNDU1MDIsNDU1MDMsNDU1MDQsNDU1MDUsNDU1MDYsNDU1MDcsNDU1MDgsNDU1MDksNDU1MTAsNDU1MTEsNDU1MTIsNDU1MTMsNDU1MTQsNDU1MTUsNDU1MTcsNDU1MTgsNDU1MTks''@;'; put 'put ''NDU1MjEsNDU1MjIsNDU1MjMsNDU1MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU1MjYsNDU1MjcsNDU1MjgsNDU1MjksNDU1MzAsNDU1MzEsNDU1MzQsNDU1MzYsNDU1MzcsNDU1MzgsNDU1MzksNDU1NDAsNDU1NDEsNDU1NDIsNDU1NDMsNDU1NDYsNDU1NDcsNDU1NDksNDU1''@;'; put 'put ''NTAsNDU1NTEsNDU1NTMsNDU1NTQsNDU1NTUsNDU1NTYsNDU1NTcsNDU1NTgsNDU1NTksNDU1NjAsNDU1NjIsNDU1NjQsNDU1NjYsNDU1NjcsNDU1NjgsNDU1NjksNDU1NzAsNDU1NzEsNDU1NzQsNDU1NzUsNDU1NzcsNDU1NzgsNDU1ODEsNDU1ODIsNDU1ODMsNDU1ODQsNDU1ODUsNDU1ODYs''@;'; put 'put ''NDU1ODcsNDU1OTAsNDU1OTIsNDU1OTQsNDU1OTUsNDU1OTYsNDU1OTcsNDU1OTgsNDU1OTksNDU2MDEsNDU2MDIsNDU2MDMsNDU2MDQsNDU2MDUsNDU2MDYsNDU2MDcsNDU2MDgsNDU2MDksNDU2MTAsNDU2MTEsNDU2MTIsNDU2MTMsNDU2MTQsNDU2MTUsNDU2MTYsNDU2MTcsNDU2MTgsNDU2''@;'; put 'put ''MTksNDU2MjEsNDU2MjIsNDU2MjMsNDU2MjQsNDU2MjUsNDU2MjYsNDU2MjcsNDU2MjksNDU2MzAsNDU2MzEsNDU2MzIsNDU2MzMsNDU2MzQsNDU2MzUsNDU2MzYsNDU2MzcsNDU2MzgsNDU2MzksNDU2NDAsNDU2NDEsNDU2NDIsNDU2NDMsNDU2NDQsNDU2NDUsNDU2NDYsNDU2NDcsNDU2NDgs''@;'; put 'put ''NDU2NDksNDU2NTAsNDU2NTEsNDU2NTIsNDU2NTMsNDU2NTQsNDU2NTUsNDU2NTcsNDU2NTgsNDU2NTksNDU2NjEsNDU2NjIsNDU2NjMsNDU2NjUsNDU2NjYsNDU2NjcsNDU2NjgsNDU2NjksNDU2NzAsNDU2NzEsNDU2NzQsNDU2NzUsNDU2NzYsNDU2NzcsNDU2NzgsNDU2NzksNDU2ODAsNDU2''@;'; put 'put ''ODEsNDU2ODIsNDU2ODMsNDU2ODYsNDU2ODcsNDU2ODgsNDU2ODksNDU2OTAsNDU2OTEsNDU2OTMsNDU2OTQsNDU2OTUsNDU2OTYsNDU2OTcsNDU2OTgsNDU2OTksNDU3MDIsNDU3MDMsNDU3MDQsNDU3MDYsNDU3MDcsNDU3MDgsNDU3MDksNDU3MTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNDU3MTEsNDU3MTQsNDU3MTUsNDU3MTcsNDU3MTgsNDU3MTksNDU3MjMsNDU3MjQsNDU3MjUsNDU3MjYsNDU3MjcsNDU3MzAsNDU3MzIsNDU3MzUsNDU3MzYsNDU3MzcsNDU3MzksNDU3NDEsNDU3NDIsNDU3NDMsNDU3NDUsNDU3NDYsNDU3NDcsNDU3NDksNDU3NTAsNDU3NTEsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3NTIsNDU3NTMsNDU3NTQsNDU3NTUsNDU3NTYsNDU3NTcsNDU3NTgsNDU3NTksNDU3NjAsNDU3NjEsNDU3NjIsNDU3NjMsNDU3NjQsNDU3NjUsNDU3NjYsNDU3NjcsNDU3NzAsNDU3NzEsNDU3NzMsNDU3NzQsNDU3NzUsNDU3NzcsNDU3Nzks''@;'; put 'put ''NDU3ODAsNDU3ODEsNDU3ODIsNDU3ODMsNDU3ODYsNDU3ODgsNDU3OTAsNDU3OTEsNDU3OTIsNDU3OTMsNDU3OTUsNDU3OTksNDU4MDEsNDU4MDIsNDU4MDgsNDU4MDksNDU4MTAsNDU4MTQsNDU4MjAsNDU4MjEsNDU4MjIsNDU4MjYsNDU4MjcsNDU4MjksNDU4MzAsNDU4MzEsNDU4MzMsNDU4''@;'; put 'put ''MzQsNDU4MzUsNDU4MzYsNDU4MzcsNDU4MzgsNDU4MzksNDU4NDIsNDU4NDYsNDU4NDcsNDU4NDgsNDU4NDksNDU4NTAsNDU4NTEsNDU4NTMsNDU4NTQsNDU4NTUsNDU4NTYsNDU4NTcsNDU4NTgsNDU4NTksNDU4NjAsNDU4NjEsNDU4NjIsNDU4NjMsNDU4NjQsNDU4NjUsNDU4NjYsNDU4Njcs''@;'; put 'put ''NDU4NjgsNDU4NjksNDU4NzAsNDU4NzEsNDU4NzIsNDU4NzMsNDU4NzQsNDU4NzUsNDU4NzYsNDU4NzcsNDU4NzgsNDU4NzksNDU4ODAsNDU4ODEsNDU4ODIsNDU4ODMsNDU4ODQsNDU4ODUsNDU4ODYsNDU4ODcsNDU4ODgsNDU4ODksNDU4OTAsNDU4OTEsNDU4OTIsNDU4OTMsNDU4OTQsNDU4''@;'; put 'put ''OTUsNDU4OTYsNDU4OTcsNDU4OTgsNDU4OTksNDU5MDAsNDU5MDEsNDU5MDIsNDU5MDMsNDU5MDQsNDU5MDUsNDU5MDYsNDU5MDcsNDU5MTEsNDU5MTMsNDU5MTQsNDU5MTcsNDU5MjAsNDU5MjEsNDU5MjIsNDU5MjMsNDU5MjYsNDU5MjgsNDU5MzAsNDU5MzIsNDU5MzMsNDU5MzUsNDU5Mzgs''@;'; put 'put ''NDU5MzksNDU5NDEsNDU5NDIsNDU5NDMsNDU5NDUsNDU5NDYsNDU5NDcsNDU5NDgsNDU5NDksNDU5NTAsNDU5NTEsNDU5NTQsNDU5NTgsNDU5NTksNDU5NjAsNDU5NjEsNDU5NjIsNDU5NjMsNDU5NjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5NjYsNDU5NjcsNDU5NjksNDU5''@;'; put 'put ''NzAsNDU5NzEsNDU5NzMsNDU5NzQsNDU5NzUsNDU5NzYsNDU5NzcsNDU5NzgsNDU5NzksNDU5ODAsNDU5ODEsNDU5ODIsNDU5ODMsNDU5ODYsNDU5ODcsNDU5ODgsNDU5ODksNDU5OTAsNDU5OTEsNDU5OTMsNDU5OTQsNDU5OTUsNDU5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NDU5OTgsNDU5OTksNDZlMyw0NjAwMSw0NjAwMiw0NjAwMyw0NjAwNCw0NjAwNSw0NjAwNiw0NjAwNyw0NjAwOCw0NjAwOSw0NjAxMCw0NjAxMSw0NjAxMiw0NjAxMyw0NjAxNCw0NjAxNSw0NjAxNiw0NjAxNyw0NjAxOCw0NjAxOSw0NjAyMiw0NjAyMyw0NjAyNSw0NjAyNiw0NjAyOSw0NjAz''@;'; put 'put ''MSw0NjAzMyw0NjAzNCw0NjAzNSw0NjAzOCw0NjA0MCw0NjA0Miw0NjA0NCw0NjA0Niw0NjA0Nyw0NjA0OSw0NjA1MCw0NjA1MSw0NjA1Myw0NjA1NCw0NjA1NSw0NjA1Nyw0NjA1OCw0NjA1OSw0NjA2MCw0NjA2MSw0NjA2Miw0NjA2Myw0NjA2NCw0NjA2NSw0NjA2Niw0NjA2Nyw0NjA2OCw0''@;'; put 'put ''NjA2OSw0NjA3MCw0NjA3MSw0NjA3Miw0NjA3Myw0NjA3NCw0NjA3NSw0NjA3Nyw0NjA3OCw0NjA3OSw0NjA4MCw0NjA4MSw0NjA4Miw0NjA4Myw0NjA4NCw0NjA4NSw0NjA4Niw0NjA4Nyw0NjA4OCw0NjA4OSw0NjA5MCw0NjA5MSw0NjA5Miw0NjA5Myw0NjA5NCw0NjA5NSw0NjA5Nyw0NjA5''@;'; put 'put ''OCw0NjA5OSw0NjEwMCw0NjEwMSw0NjEwMiw0NjEwMyw0NjEwNSw0NjEwNiw0NjEwNyw0NjEwOSw0NjExMCw0NjExMSw0NjExMyw0NjExNCw0NjExNSw0NjExNiw0NjExNyw0NjExOCw0NjExOSw0NjEyMiw0NjEyNCw0NjEyNSw0NjEyNiw0NjEyNyw0NjEyOCw0NjEyOSw0NjEzMCw0NjEzMSw0''@;'; put 'put ''NjEzMyw0NjEzNCw0NjEzNSw0NjEzNiw0NjEzNyw0NjEzOCw0NjEzOSw0NjE0MCw0NjE0MSw0NjE0Miw0NjE0Myw0NjE0NCw0NjE0NSw0NjE0Niw0NjE0Nyw0NjE0OCw0NjE0OSw0NjE1MCw0NjE1MSw0NjE1Miw0NjE1Myw0NjE1NCw0NjE1NSw0NjE1Niw0NjE1Nyw0NjE1OCw0NjE1OSw0NjE2''@;'; put 'put ''Miw0NjE2Myw0NjE2NSw0NjE2Niw0NjE2Nyw0NjE2OSw0NjE3MCw0NjE3MSw0NjE3Miw0NjE3Myw0NjE3NCw0NjE3NSw0NjE3OCw0NjE4MCw0NjE4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjE4Myw0NjE4NCw0NjE4NSw0NjE4Niw0NjE4Nyw0NjE4OSw0NjE5MCw0NjE5MSw0''@;'; put 'put ''NjE5Miw0NjE5Myw0NjE5NCw0NjE5NSw0NjE5Niw0NjE5Nyw0NjE5OCw0NjE5OSw0NjIwMCw0NjIwMSw0NjIwMiw0NjIwMyw0NjIwNCw0NjIwNSw0NjIwNiw0NjIwNyw0NjIwOSw0NjIxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjIxMSw0NjIxMiw0NjIxMyw0NjIxNCw0NjIx''@;'; put 'put ''NSw0NjIxNyw0NjIxOCw0NjIxOSw0NjIyMCw0NjIyMSw0NjIyMiw0NjIyMyw0NjIyNCw0NjIyNSw0NjIyNiw0NjIyNyw0NjIyOCw0NjIyOSw0NjIzMCw0NjIzMSw0NjIzMiw0NjIzMyw0NjIzNCw0NjIzNSw0NjIzNiw0NjIzOCw0NjIzOSw0NjI0MCw0NjI0MSw0NjI0Miw0NjI0Myw0NjI0NSw0''@;'; put 'put ''NjI0Niw0NjI0Nyw0NjI0OSw0NjI1MCw0NjI1MSw0NjI1Myw0NjI1NCw0NjI1NSw0NjI1Niw0NjI1Nyw0NjI1OCw0NjI1OSw0NjI2MCw0NjI2Miw0NjI2NCw0NjI2Niw0NjI2Nyw0NjI2OCw0NjI2OSw0NjI3MCw0NjI3MSw0NjI3Myw0NjI3NCw0NjI3NSw0NjI3Nyw0NjI3OCw0NjI3OSw0NjI4''@;'; put 'put ''MSw0NjI4Miw0NjI4Myw0NjI4NCw0NjI4NSw0NjI4Niw0NjI4Nyw0NjI4OSw0NjI5MCw0NjI5MSw0NjI5Miw0NjI5NCw0NjI5NSw0NjI5Niw0NjI5Nyw0NjI5OCw0NjI5OSw0NjMwMiw0NjMwMyw0NjMwNSw0NjMwNiw0NjMwOSw0NjMxMSw0NjMxMiw0NjMxMyw0NjMxNCw0NjMxNSw0NjMxOCw0''@;'; put 'put ''NjMyMCw0NjMyMiw0NjMyMyw0NjMyNCw0NjMyNSw0NjMyNiw0NjMyNyw0NjMyOSw0NjMzMCw0NjMzMSw0NjMzMiw0NjMzMyw0NjMzNCw0NjMzNSw0NjMzNiw0NjMzNyw0NjMzOCw0NjMzOSw0NjM0MCw0NjM0MSw0NjM0Miw0NjM0Myw0NjM0NCw0NjM0NSw0NjM0Niw0NjM0Nyw0NjM0OCw0NjM0''@;'; put 'put ''OSw0NjM1MCw0NjM1MSw0NjM1Miw0NjM1Myw0NjM1NCw0NjM1NSw0NjM1OCw0NjM1OSw0NjM2MSw0NjM2Miw0NjM2NSw0NjM2Niw0NjM2Nyw0NjM2OCw0NjM2OSw0NjM3MCw0NjM3MSw0NjM3NCw0NjM3OSw0NjM4MCw0NjM4MSw0NjM4Miw0NjM4Myw0NjM4Niw0NjM4Nyw0NjM4OSw0NjM5MCw0''@;'; put 'put ''NjM5MSw0NjM5Myw0NjM5NCw0NjM5NSw0NjM5Niw0NjM5Nyw0NjM5OCw0NjM5OSw0NjQwMiw0NjQwNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjQwNyw0NjQwOCw0NjQwOSw0NjQxMCw0NjQxNCw0NjQxNSw0NjQxNyw0NjQxOCw0NjQxOSw0NjQyMSw0NjQyMiw0NjQyMyw0NjQy''@;'; put 'put ''NCw0NjQyNSw0NjQyNiw0NjQyNyw0NjQzMCw0NjQzNCw0NjQzNSw0NjQzNiw0NjQzNyw0NjQzOCw0NjQzOSw0NjQ0MCw0NjQ0MSw0NjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjQ0Myw0NjQ0NCw0NjQ0NSw0NjQ0Niw0NjQ0Nyw0NjQ0OCw0NjQ0OSw0NjQ1MCw0NjQ1MSw0''@;'; put 'put ''NjQ1Miw0NjQ1Myw0NjQ1NCw0NjQ1NSw0NjQ1Niw0NjQ1Nyw0NjQ1OCw0NjQ1OSw0NjQ2MCw0NjQ2MSw0NjQ2Miw0NjQ2Myw0NjQ2NCw0NjQ2NSw0NjQ2Niw0NjQ2Nyw0NjQ2OCw0NjQ2OSw0NjQ3MCw0NjQ3MSw0NjQ3Miw0NjQ3Myw0NjQ3NCw0NjQ3NSw0NjQ3Niw0NjQ3Nyw0NjQ3OCw0NjQ3''@;'; put 'put ''OSw0NjQ4MCw0NjQ4MSw0NjQ4Miw0NjQ4Myw0NjQ4NCw0NjQ4NSw0NjQ4Niw0NjQ4Nyw0NjQ4OCw0NjQ4OSw0NjQ5MCw0NjQ5MSw0NjQ5Miw0NjQ5Myw0NjQ5NCw0NjQ5NSw0NjQ5OCw0NjQ5OSw0NjUwMSw0NjUwMiw0NjUwMyw0NjUwNSw0NjUwOCw0NjUwOSw0NjUxMCw0NjUxMSw0NjUxNCw0''@;'; put 'put ''NjUxOCw0NjUxOSw0NjUyMCw0NjUyMSw0NjUyMiw0NjUyNiw0NjUyNyw0NjUyOSw0NjUzMCw0NjUzMSw0NjUzMyw0NjUzNCw0NjUzNSw0NjUzNiw0NjUzNyw0NjUzOCw0NjUzOSw0NjU0Miw0NjU0Niw0NjU0Nyw0NjU0OCw0NjU0OSw0NjU1MCw0NjU1MSw0NjU1Myw0NjU1NCw0NjU1NSw0NjU1''@;'; put 'put ''Niw0NjU1Nyw0NjU1OCw0NjU1OSw0NjU2MCw0NjU2MSw0NjU2Miw0NjU2Myw0NjU2NCw0NjU2NSw0NjU2Niw0NjU2Nyw0NjU2OCw0NjU2OSw0NjU3MCw0NjU3MSw0NjU3Myw0NjU3NCw0NjU3NSw0NjU3Niw0NjU3Nyw0NjU3OCw0NjU3OSw0NjU4MCw0NjU4MSw0NjU4Miw0NjU4Myw0NjU4NCw0''@;'; put 'put ''NjU4NSw0NjU4Niw0NjU4Nyw0NjU4OCw0NjU4OSw0NjU5MCw0NjU5MSw0NjU5Miw0NjU5Myw0NjU5NCw0NjU5NSw0NjU5Niw0NjU5Nyw0NjU5OCw0NjU5OSw0NjYwMCw0NjYwMSw0NjYwMiw0NjYwMyw0NjYwNCw0NjYwNSw0NjYwNiw0NjYwNyw0NjYxMCw0NjYxMSw0NjYxMyw0NjYxNCw0NjYx''@;'; put 'put ''NSw0NjYxNyw0NjYxOCw0NjYxOSw0NjYyMCw0NjYyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjYyMiw0NjYyMyw0NjYyNCw0NjYyNSw0NjYyNiw0NjYyNyw0NjYyOCw0NjYzMCw0NjYzMSw0NjYzMiw0NjYzMyw0NjYzNCw0NjYzNSw0NjYzNyw0NjYzOCw0NjYzOSw0NjY0MCw0''@;'; put 'put ''NjY0MSw0NjY0Miw0NjY0Myw0NjY0NSw0NjY0Niw0NjY0Nyw0NjY0OCw0NjY0OSw0NjY1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjY1MSw0NjY1Miw0NjY1Myw0NjY1NCw0NjY1NSw0NjY1Niw0NjY1Nyw0NjY1OCw0NjY1OSw0NjY2MCw0NjY2MSw0NjY2Miw0NjY2Myw0NjY2''@;'; put 'put ''NSw0NjY2Niw0NjY2Nyw0NjY2OCw0NjY2OSw0NjY3MCw0NjY3MSw0NjY3Miw0NjY3Myw0NjY3NCw0NjY3NSw0NjY3Niw0NjY3Nyw0NjY3OCw0NjY3OSw0NjY4MCw0NjY4MSw0NjY4Miw0NjY4Myw0NjY4NCw0NjY4NSw0NjY4Niw0NjY4Nyw0NjY4OCw0NjY4OSw0NjY5MCw0NjY5MSw0NjY5Myw0''@;'; put 'put ''NjY5NCw0NjY5NSw0NjY5Nyw0NjY5OCw0NjY5OSw0NjcwMCw0NjcwMSw0NjcwMiw0NjcwMyw0NjcwNCw0NjcwNSw0NjcwNiw0NjcwNyw0NjcwOCw0NjcwOSw0NjcxMCw0NjcxMSw0NjcxMiw0NjcxMyw0NjcxNCw0NjcxNSw0NjcxNiw0NjcxNyw0NjcxOCw0NjcxOSw0NjcyMCw0NjcyMSw0Njcy''@;'; put 'put ''Miw0NjcyMyw0NjcyNCw0NjcyNSw0NjcyNiw0NjcyNyw0NjcyOCw0NjcyOSw0NjczMCw0NjczMSw0NjczMiw0NjczMyw0NjczNCw0NjczNSw0NjczNiw0NjczNyw0NjczOCw0NjczOSw0Njc0MCw0Njc0MSw0Njc0Miw0Njc0Myw0Njc0NCw0Njc0NSw0Njc0Niw0Njc0Nyw0Njc1MCw0Njc1MSw0''@;'; put 'put ''Njc1Myw0Njc1NCw0Njc1NSw0Njc1Nyw0Njc1OCw0Njc1OSw0Njc2MCw0Njc2MSw0Njc2Miw0Njc2NSw0Njc2Niw0Njc2Nyw0Njc2OCw0Njc3MCw0Njc3MSw0Njc3Miw0Njc3Myw0Njc3NCw0Njc3NSw0Njc3Niw0Njc3Nyw0Njc3OCw0Njc3OSw0Njc4MCw0Njc4MSw0Njc4Miw0Njc4Myw0Njc4''@;'; put 'put ''NCw0Njc4NSw0Njc4Niw0Njc4Nyw0Njc4OCw0Njc4OSw0Njc5MCw0Njc5MSw0Njc5Miw0Njc5Myw0Njc5NCw0Njc5NSw0Njc5Niw0Njc5Nyw0Njc5OCw0Njc5OSw0NjgwMCw0NjgwMSw0NjgwMiw0NjgwMyw0NjgwNSw0NjgwNiw0NjgwNyw0NjgwOCw0NjgwOSw0NjgxMCw0NjgxMSw0NjgxMiw0''@;'; put 'put ''NjgxMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjgxNCw0NjgxNSw0NjgxNiw0NjgxNyw0NjgxOCw0NjgxOSw0NjgyMCw0NjgyMSw0NjgyMiw0NjgyMyw0NjgyNCw0NjgyNSw0NjgyNiw0NjgyNyw0NjgyOCw0NjgyOSw0NjgzMCw0NjgzMSw0NjgzMyw0NjgzNCw0NjgzNSw0Njgz''@;'; put 'put ''Nyw0NjgzOCw0NjgzOSw0Njg0MSw0Njg0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Njg0Myw0Njg0NCw0Njg0NSw0Njg0Niw0Njg0Nyw0Njg1MCw0Njg1MSw0Njg1Miw0Njg1NCw0Njg1NSw0Njg1Niw0Njg1Nyw0Njg1OCw0Njg1OSw0Njg2MCw0Njg2MSw0Njg2Miw0Njg2Myw0''@;'; put 'put ''Njg2NCw0Njg2NSw0Njg2Niw0Njg2Nyw0Njg2OCw0Njg2OSw0Njg3MCw0Njg3MSw0Njg3Miw0Njg3Myw0Njg3NCw0Njg3NSw0Njg3Niw0Njg3Nyw0Njg3OCw0Njg3OSw0Njg4MCw0Njg4MSw0Njg4Miw0Njg4Myw0Njg4NCw0Njg4NSw0Njg4Niw0Njg4Nyw0Njg5MCw0Njg5MSw0Njg5Myw0Njg5''@;'; put 'put ''NCw0Njg5Nyw0Njg5OCw0Njg5OSw0NjkwMCw0NjkwMSw0NjkwMiw0NjkwMyw0NjkwNiw0NjkwOCw0NjkwOSw0NjkxMCw0NjkxMSw0NjkxMiw0NjkxMyw0NjkxNCw0NjkxNSw0NjkxNyw0NjkxOCw0NjkxOSw0NjkyMSw0NjkyMiw0NjkyMyw0NjkyNSw0NjkyNiw0NjkyNyw0NjkyOCw0NjkyOSw0''@;'; put 'put ''NjkzMCw0NjkzMSw0NjkzNCw0NjkzNSw0NjkzNiw0NjkzNyw0NjkzOCw0NjkzOSw0Njk0MCw0Njk0MSw0Njk0Miw0Njk0Myw0Njk0NSw0Njk0Niw0Njk0Nyw0Njk0OSw0Njk1MCw0Njk1MSw0Njk1Myw0Njk1NCw0Njk1NSw0Njk1Niw0Njk1Nyw0Njk1OCw0Njk1OSw0Njk2Miw0Njk2NCw0Njk2''@;'; put 'put ''Niw0Njk2Nyw0Njk2OCw0Njk2OSw0Njk3MCw0Njk3MSw0Njk3NCw0Njk3NSw0Njk3Nyw0Njk3OCw0Njk3OSw0Njk4MSw0Njk4Miw0Njk4Myw0Njk4NCw0Njk4NSw0Njk4Niw0Njk4Nyw0Njk5MCw0Njk5NSw0Njk5Niw0Njk5Nyw0NzAwMiw0NzAwMyw0NzAwNSw0NzAwNiw0NzAwNyw0NzAwOSw0''@;'; put 'put ''NzAxMCw0NzAxMSw0NzAxMiw0NzAxMyw0NzAxNCw0NzAxNSw0NzAxOCw0NzAyMiw0NzAyMyw0NzAyNCw0NzAyNSw0NzAyNiw0NzAyNyw0NzAzMCw0NzAzMSw0NzAzMyw0NzAzNCw0NzAzNSw0NzAzNiw0NzAzNyw0NzAzOCw0NzAzOSw0NzA0MCw0NzA0MSxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw0NzA0Miw0NzA0Myw0NzA0NCw0NzA0NSw0NzA0Niw0NzA0OCw0NzA1MCw0NzA1MSw0NzA1Miw0NzA1Myw0NzA1NCw0NzA1NSw0NzA1Niw0NzA1Nyw0NzA1OCw0NzA1OSw0NzA2MCw0NzA2MSw0NzA2Miw0NzA2Myw0NzA2NCw0NzA2NSw0NzA2Niw0NzA2Nyw0NzA2OCw0NzA2OSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzA3MCw0NzA3MSw0NzA3Miw0NzA3Myw0NzA3NCw0NzA3NSw0NzA3Niw0NzA3Nyw0NzA3OCw0NzA3OSw0NzA4MCw0NzA4MSw0NzA4Miw0NzA4Myw0NzA4Niw0NzA4Nyw0NzA4OSw0NzA5MCw0NzA5MSw0NzA5Myw0NzA5NCw0NzA5NSw0NzA5''@;'; put 'put ''Niw0NzA5Nyw0NzA5OCw0NzA5OSw0NzEwMiw0NzEwNiw0NzEwNyw0NzEwOCw0NzEwOSw0NzExMCw0NzExNCw0NzExNSw0NzExNyw0NzExOCw0NzExOSw0NzEyMSw0NzEyMiw0NzEyMyw0NzEyNCw0NzEyNSw0NzEyNiw0NzEyNyw0NzEzMCw0NzEzMiw0NzEzNCw0NzEzNSw0NzEzNiw0NzEzNyw0''@;'; put 'put ''NzEzOCw0NzEzOSw0NzE0Miw0NzE0Myw0NzE0NSw0NzE0Niw0NzE0Nyw0NzE0OSw0NzE1MCw0NzE1MSw0NzE1Miw0NzE1Myw0NzE1NCw0NzE1NSw0NzE1OCw0NzE2Miw0NzE2Myw0NzE2NCw0NzE2NSw0NzE2Niw0NzE2Nyw0NzE2OSw0NzE3MCw0NzE3MSw0NzE3Myw0NzE3NCw0NzE3NSw0NzE3''@;'; put 'put ''Niw0NzE3Nyw0NzE3OCw0NzE3OSw0NzE4MCw0NzE4MSw0NzE4Miw0NzE4Myw0NzE4NCw0NzE4Niw0NzE4OCw0NzE4OSw0NzE5MCw0NzE5MSw0NzE5Miw0NzE5Myw0NzE5NCw0NzE5NSw0NzE5OCw0NzE5OSw0NzIwMSw0NzIwMiw0NzIwMyw0NzIwNSw0NzIwNiw0NzIwNyw0NzIwOCw0NzIwOSw0''@;'; put 'put ''NzIxMCw0NzIxMSw0NzIxNCw0NzIxNiw0NzIxOCw0NzIxOSw0NzIyMCw0NzIyMSw0NzIyMiw0NzIyMyw0NzIyNSw0NzIyNiw0NzIyNyw0NzIyOSw0NzIzMCw0NzIzMSw0NzIzMiw0NzIzMyw0NzIzNCw0NzIzNSw0NzIzNiw0NzIzNyw0NzIzOCw0NzIzOSw0NzI0MCw0NzI0MSw0NzI0Miw0NzI0''@;'; put 'put ''Myw0NzI0NCw0NzI0Niw0NzI0Nyw0NzI0OCw0NzI0OSw0NzI1MCw0NzI1MSw0NzI1Miw0NzI1Myw0NzI1NCw0NzI1NSw0NzI1Niw0NzI1Nyw0NzI1OCw0NzI1OSw0NzI2MCw0NzI2MSw0NzI2Miw0NzI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzI2NCw0NzI2NSw0NzI2Niw0''@;'; put 'put ''NzI2Nyw0NzI2OCw0NzI2OSw0NzI3MCw0NzI3MSw0NzI3Myw0NzI3NCw0NzI3NSw0NzI3Niw0NzI3Nyw0NzI3OCw0NzI3OSw0NzI4MSw0NzI4Miw0NzI4Myw0NzI4NSw0NzI4Niw0NzI4Nyw0NzI4OSw0NzI5MCw0NzI5MSw0NzI5Miw0NzI5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw0NzI5NCw0NzI5NSw0NzI5OCw0NzMwMCw0NzMwMiw0NzMwMyw0NzMwNCw0NzMwNSw0NzMwNiw0NzMwNyw0NzMwOSw0NzMxMCw0NzMxMSw0NzMxMyw0NzMxNCw0NzMxNSw0NzMxNyw0NzMxOCw0NzMxOSw0NzMyMCw0NzMyMSw0NzMyMiw0NzMyMyw0NzMyNCw0NzMyNiw0NzMyOCw0NzMzMCw0''@;'; put 'put ''NzMzMSw0NzMzMiw0NzMzMyw0NzMzNCw0NzMzNSw0NzMzOCw0NzMzOSw0NzM0MSw0NzM0Miw0NzM0Myw0NzM0NSw0NzM0Niw0NzM0Nyw0NzM0OCw0NzM0OSw0NzM1MCw0NzM1MSw0NzM1NCw0NzM1Niw0NzM1OCw0NzM1OSw0NzM2MCw0NzM2MSw0NzM2Miw0NzM2Myw0NzM2NSw0NzM2Niw0NzM2''@;'; put 'put ''Nyw0NzM2OCw0NzM2OSw0NzM3MCw0NzM3MSw0NzM3Miw0NzM3Myw0NzM3NCw0NzM3NSw0NzM3Niw0NzM3Nyw0NzM3OCw0NzM3OSw0NzM4MCw0NzM4MSw0NzM4Miw0NzM4Myw0NzM4NSw0NzM4Niw0NzM4Nyw0NzM4OCw0NzM4OSw0NzM5MCw0NzM5MSw0NzM5Myw0NzM5NCw0NzM5NSw0NzM5Niw0''@;'; put 'put ''NzM5Nyw0NzM5OCw0NzM5OSw0NzQwMCw0NzQwMSw0NzQwMiw0NzQwMyw0NzQwNCw0NzQwNSw0NzQwNiw0NzQwNyw0NzQwOCw0NzQwOSw0NzQxMCw0NzQxMSw0NzQxMiw0NzQxMyw0NzQxNCw0NzQxNSw0NzQxNiw0NzQxNyw0NzQxOCw0NzQxOSw0NzQyMiw0NzQyMyw0NzQyNSw0NzQyNiw0NzQy''@;'; put 'put ''Nyw0NzQyOSw0NzQzMCw0NzQzMSw0NzQzMiw0NzQzMyw0NzQzNCw0NzQzNSw0NzQzNyw0NzQzOCw0NzQ0MCw0NzQ0Miw0NzQ0Myw0NzQ0NCw0NzQ0NSw0NzQ0Niw0NzQ0Nyw0NzQ1MCw0NzQ1MSw0NzQ1Myw0NzQ1NCw0NzQ1NSw0NzQ1Nyw0NzQ1OCw0NzQ1OSw0NzQ2MCw0NzQ2MSw0NzQ2Miw0''@;'; put 'put ''NzQ2Myw0NzQ2Niw0NzQ2OCw0NzQ3MCw0NzQ3MSw0NzQ3Miw0NzQ3Myw0NzQ3NCw0NzQ3NSw0NzQ3OCw0NzQ3OSw0NzQ4MSw0NzQ4Miw0NzQ4Myw0NzQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzQ4Niw0NzQ4Nyw0NzQ4OCw0NzQ4OSw0NzQ5MCw0NzQ5MSw0NzQ5NCw0NzQ5''@;'; put 'put ''Niw0NzQ5OSw0NzUwMCw0NzUwMyw0NzUwNCw0NzUwNSw0NzUwNiw0NzUwNyw0NzUwOCw0NzUwOSw0NzUxMCw0NzUxMSw0NzUxMiw0NzUxMyw0NzUxNCw0NzUxNSw0NzUxNiw0NzUxNyw0NzUxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzUxOSw0NzUyMCw0NzUyMSw0NzUyMiw0''@;'; put 'put ''NzUyMyw0NzUyNCw0NzUyNSw0NzUyNiw0NzUyNyw0NzUyOCw0NzUyOSw0NzUzMCw0NzUzMSw0NzUzNCw0NzUzNSw0NzUzNyw0NzUzOCw0NzUzOSw0NzU0MSw0NzU0Miw0NzU0Myw0NzU0NCw0NzU0NSw0NzU0Niw0NzU0Nyw0NzU1MCw0NzU1Miw0NzU1NCw0NzU1NSw0NzU1Niw0NzU1Nyw0NzU1''@;'; put 'put ''OCw0NzU1OSw0NzU2Miw0NzU2Myw0NzU2NSw0NzU3MSw0NzU3Miw0NzU3Myw0NzU3NCw0NzU3NSw0NzU3OCw0NzU4MCw0NzU4Myw0NzU4NCw0NzU4Niw0NzU5MCw0NzU5MSw0NzU5Myw0NzU5NCw0NzU5NSw0NzU5Nyw0NzU5OCw0NzU5OSw0NzYwMCw0NzYwMSw0NzYwMiw0NzYwMyw0NzYwNiw0''@;'; put 'put ''NzYxMSw0NzYxMiw0NzYxMyw0NzYxNCw0NzYxNSw0NzYxOCw0NzYxOSw0NzYyMCw0NzYyMSw0NzYyMiw0NzYyMyw0NzYyNSw0NzYyNiw0NzYyNyw0NzYyOCw0NzYyOSw0NzYzMCw0NzYzMSw0NzYzMiw0NzYzMyw0NzYzNCw0NzYzNSw0NzYzNiw0NzYzOCw0NzYzOSw0NzY0MCw0NzY0MSw0NzY0''@;'; put 'put ''Miw0NzY0Myw0NzY0NCw0NzY0NSw0NzY0Niw0NzY0Nyw0NzY0OCw0NzY0OSw0NzY1MCw0NzY1MSw0NzY1Miw0NzY1Myw0NzY1NCw0NzY1NSw0NzY1Niw0NzY1Nyw0NzY1OCw0NzY1OSw0NzY2MCw0NzY2MSw0NzY2Miw0NzY2Myw0NzY2NCw0NzY2NSw0NzY2Niw0NzY2Nyw0NzY2OCw0NzY2OSw0''@;'; put 'put ''NzY3MCw0NzY3MSw0NzY3NCw0NzY3NSw0NzY3Nyw0NzY3OCw0NzY3OSw0NzY4MSw0NzY4Myw0NzY4NCw0NzY4NSw0NzY4Niw0NzY4Nyw0NzY5MCw0NzY5Miw0NzY5NSw0NzY5Niw0NzY5Nyw0NzY5OCw0NzcwMiw0NzcwMyw0NzcwNSw0NzcwNiw0NzcwNyw0NzcwOSw0NzcxMCw0NzcxMSw0Nzcx''@;'; put 'put ''Miw0NzcxMyw0NzcxNCw0NzcxNSw0NzcxOCw0NzcyMiw0NzcyMyw0NzcyNCw0NzcyNSw0NzcyNiw0NzcyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzczMCw0NzczMSw0NzczMyw0NzczNCw0NzczNSw0NzczNyw0NzczOCw0NzczOSw0Nzc0MCw0Nzc0MSw0Nzc0Miw0Nzc0Myw0''@;'; put 'put ''Nzc0NCw0Nzc0NSw0Nzc0Niw0Nzc1MCw0Nzc1Miw0Nzc1Myw0Nzc1NCw0Nzc1NSw0Nzc1Nyw0Nzc1OCw0Nzc1OSw0Nzc2MCw0Nzc2MSw0Nzc2MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzc2Myw0Nzc2NCw0Nzc2NSw0Nzc2Niw0Nzc2Nyw0Nzc2OCw0Nzc2OSw0Nzc3MCw0Nzc3''@;'; put 'put ''MSw0Nzc3Miw0Nzc3Myw0Nzc3NCw0Nzc3NSw0Nzc3Niw0Nzc3Nyw0Nzc3OCw0Nzc3OSw0Nzc4MCw0Nzc4MSw0Nzc4Miw0Nzc4Myw0Nzc4Niw0Nzc4OSw0Nzc5MCw0Nzc5MSw0Nzc5Myw0Nzc5NSw0Nzc5Niw0Nzc5Nyw0Nzc5OCw0Nzc5OSw0NzgwMiw0NzgwNCw0NzgwNiw0NzgwNyw0NzgwOCw0''@;'; put 'put ''NzgwOSw0NzgxMCw0NzgxMSw0NzgxMyw0NzgxNCw0NzgxNSw0NzgxNyw0NzgxOCw0NzgxOSw0NzgyMCw0NzgyMSw0NzgyMiw0NzgyMyw0NzgyNCw0NzgyNSw0NzgyNiw0NzgyNyw0NzgyOCw0NzgyOSw0NzgzMCw0NzgzMSw0NzgzNCw0NzgzNSw0NzgzNiw0NzgzNyw0NzgzOCw0NzgzOSw0Nzg0''@;'; put 'put ''MCw0Nzg0MSw0Nzg0Miw0Nzg0Myw0Nzg0NCw0Nzg0NSw0Nzg0Niw0Nzg0Nyw0Nzg0OCw0Nzg0OSw0Nzg1MCw0Nzg1MSw0Nzg1Miw0Nzg1Myw0Nzg1NCw0Nzg1NSw0Nzg1Niw0Nzg1Nyw0Nzg1OCw0Nzg1OSw0Nzg2MCw0Nzg2MSw0Nzg2Miw0Nzg2Myw0Nzg2NCw0Nzg2NSw0Nzg2Niw0Nzg2Nyw0''@;'; put 'put ''Nzg2OSw0Nzg3MCw0Nzg3MSw0Nzg3Myw0Nzg3NCw0Nzg3NSw0Nzg3Nyw0Nzg3OCw0Nzg3OSw0Nzg4MCw0Nzg4MSw0Nzg4Miw0Nzg4Myw0Nzg4NCw0Nzg4Niw0Nzg4OCw0Nzg5MCw0Nzg5MSw0Nzg5Miw0Nzg5Myw0Nzg5NCw0Nzg5NSw0Nzg5Nyw0Nzg5OCw0Nzg5OSw0NzkwMSw0NzkwMiw0Nzkw''@;'; put 'put ''Myw0NzkwNSw0NzkwNiw0NzkwNyw0NzkwOCw0NzkwOSw0NzkxMCw0NzkxMSw0NzkxMiw0NzkxNCw0NzkxNiw0NzkxNyw0NzkxOCw0NzkxOSw0NzkyMCw0NzkyMSw0NzkyMiw0NzkyMyw0NzkyNyw0NzkyOSw0NzkzMCw0NzkzNSw0NzkzNiw0NzkzNyw0NzkzOCw0NzkzOSw0Nzk0Miw0Nzk0NCw0''@;'; put 'put ''Nzk0Niw0Nzk0Nyw0Nzk0OCw0Nzk1MCw0Nzk1Myw0Nzk1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzk1NSw0Nzk1Nyw0Nzk1OCw0Nzk1OSw0Nzk2MSw0Nzk2Miw0Nzk2Myw0Nzk2NCw0Nzk2NSw0Nzk2Niw0Nzk2Nyw0Nzk2OCw0Nzk3MCw0Nzk3Miw0Nzk3Myw0Nzk3NCw0Nzk3''@;'; put 'put ''NSw0Nzk3Niw0Nzk3Nyw0Nzk3OCw0Nzk3OSw0Nzk4MSw0Nzk4Miw0Nzk4Myw0Nzk4NCw0Nzk4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzk4Niw0Nzk4Nyw0Nzk4OCw0Nzk4OSw0Nzk5MCw0Nzk5MSw0Nzk5Miw0Nzk5Myw0Nzk5NCw0Nzk5NSw0Nzk5Niw0Nzk5Nyw0Nzk5OCw0''@;'; put 'put ''Nzk5OSw0OGUzLDQ4MDAxLDQ4MDAyLDQ4MDAzLDQ4MDA0LDQ4MDA1LDQ4MDA2LDQ4MDA3LDQ4MDA5LDQ4MDEwLDQ4MDExLDQ4MDEzLDQ4MDE0LDQ4MDE1LDQ4MDE3LDQ4MDE4LDQ4MDE5LDQ4MDIwLDQ4MDIxLDQ4MDIyLDQ4MDIzLDQ4MDI0LDQ4MDI1LDQ4MDI2LDQ4MDI3LDQ4MDI4LDQ4MDI5''@;'; put 'put ''LDQ4MDMwLDQ4MDMxLDQ4MDMyLDQ4MDMzLDQ4MDM0LDQ4MDM1LDQ4MDM3LDQ4MDM4LDQ4MDM5LDQ4MDQxLDQ4MDQyLDQ4MDQzLDQ4MDQ1LDQ4MDQ2LDQ4MDQ3LDQ4MDQ4LDQ4MDQ5LDQ4MDUwLDQ4MDUxLDQ4MDUzLDQ4MDU0LDQ4MDU2LDQ4MDU3LDQ4MDU4LDQ4MDU5LDQ4MDYwLDQ4MDYxLDQ4''@;'; put 'put ''MDYyLDQ4MDYzLDQ4MDY1LDQ4MDY2LDQ4MDY3LDQ4MDY5LDQ4MDcwLDQ4MDcxLDQ4MDczLDQ4MDc0LDQ4MDc1LDQ4MDc2LDQ4MDc3LDQ4MDc4LDQ4MDc5LDQ4MDgxLDQ4MDgyLDQ4MDg0LDQ4MDg1LDQ4MDg2LDQ4MDg3LDQ4MDg4LDQ4MDg5LDQ4MDkwLDQ4MDkxLDQ4MDkyLDQ4MDkzLDQ4MDk0''@;'; put 'put ''LDQ4MDk1LDQ4MDk2LDQ4MDk3LDQ4MDk4LDQ4MDk5LDQ4MTAwLDQ4MTAxLDQ4MTAyLDQ4MTAzLDQ4MTA0LDQ4MTA1LDQ4MTA2LDQ4MTA3LDQ4MTA4LDQ4MTA5LDQ4MTEwLDQ4MTExLDQ4MTEyLDQ4MTEzLDQ4MTE0LDQ4MTE1LDQ4MTE2LDQ4MTE3LDQ4MTE4LDQ4MTE5LDQ4MTIyLDQ4MTIzLDQ4''@;'; put 'put ''MTI1LDQ4MTI2LDQ4MTI5LDQ4MTMxLDQ4MTMyLDQ4MTMzLDQ4MTM0LDQ4MTM1LDQ4MTM4LDQ4MTQyLDQ4MTQ0LDQ4MTQ2LDQ4MTQ3LDQ4MTUzLDQ4MTU0LDQ4MTYwLDQ4MTYxLDQ4MTYyLDQ4MTYzLDQ4MTY2LDQ4MTY4LDQ4MTcwLDQ4MTcxLDQ4MTcyLDQ4MTc0LDQ4MTc1LDQ4MTc4LDQ4MTc5''@;'; put 'put ''LDQ4MTgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MTgyLDQ4MTgzLDQ4MTg1LDQ4MTg2LDQ4MTg3LDQ4MTg4LDQ4MTg5LDQ4MTkwLDQ4MTkxLDQ4MTk0LDQ4MTk4LDQ4MTk5LDQ4MjAwLDQ4MjAyLDQ4MjAzLDQ4MjA2LDQ4MjA3LDQ4MjA5LDQ4MjEwLDQ4MjExLDQ4MjEyLDQ4''@;'; put 'put ''MjEzLDQ4MjE0LDQ4MjE1LDQ4MjE2LDQ4MjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MjE4LDQ4MjE5LDQ4MjIwLDQ4MjIyLDQ4MjIzLDQ4MjI0LDQ4MjI1LDQ4MjI2LDQ4MjI3LDQ4MjI4LDQ4MjI5LDQ4MjMwLDQ4MjMxLDQ4MjMyLDQ4MjMzLDQ4MjM0LDQ4MjM1LDQ4MjM2''@;'; put 'put ''LDQ4MjM3LDQ4MjM4LDQ4MjM5LDQ4MjQwLDQ4MjQxLDQ4MjQyLDQ4MjQzLDQ4MjQ0LDQ4MjQ1LDQ4MjQ2LDQ4MjQ3LDQ4MjQ4LDQ4MjQ5LDQ4MjUwLDQ4MjUxLDQ4MjUyLDQ4MjUzLDQ4MjU0LDQ4MjU1LDQ4MjU2LDQ4MjU3LDQ4MjU4LDQ4MjU5LDQ4MjYyLDQ4MjYzLDQ4MjY1LDQ4MjY2LDQ4''@;'; put 'put ''MjY5LDQ4MjcxLDQ4MjcyLDQ4MjczLDQ4Mjc0LDQ4Mjc1LDQ4Mjc4LDQ4MjgwLDQ4MjgzLDQ4Mjg0LDQ4Mjg1LDQ4Mjg2LDQ4Mjg3LDQ4MjkwLDQ4MjkxLDQ4MjkzLDQ4Mjk0LDQ4Mjk3LDQ4Mjk4LDQ4Mjk5LDQ4MzAwLDQ4MzAxLDQ4MzAyLDQ4MzAzLDQ4MzA2LDQ4MzEwLDQ4MzExLDQ4MzEy''@;'; put 'put ''LDQ4MzEzLDQ4MzE0LDQ4MzE1LDQ4MzE4LDQ4MzE5LDQ4MzIxLDQ4MzIyLDQ4MzIzLDQ4MzI1LDQ4MzI2LDQ4MzI3LDQ4MzI4LDQ4MzI5LDQ4MzMwLDQ4MzMxLDQ4MzMyLDQ4MzM0LDQ4MzM4LDQ4MzM5LDQ4MzQwLDQ4MzQyLDQ4MzQzLDQ4MzQ1LDQ4MzQ2LDQ4MzQ3LDQ4MzQ5LDQ4MzUwLDQ4''@;'; put 'put ''MzUxLDQ4MzUyLDQ4MzUzLDQ4MzU0LDQ4MzU1LDQ4MzU2LDQ4MzU3LDQ4MzU4LDQ4MzU5LDQ4MzYwLDQ4MzYxLDQ4MzYyLDQ4MzYzLDQ4MzY0LDQ4MzY1LDQ4MzY2LDQ4MzY3LDQ4MzY4LDQ4MzY5LDQ4MzcwLDQ4MzcxLDQ4Mzc1LDQ4Mzc3LDQ4Mzc4LDQ4Mzc5LDQ4MzgxLDQ4MzgyLDQ4Mzgz''@;'; put 'put ''LDQ4Mzg0LDQ4Mzg1LDQ4Mzg2LDQ4Mzg3LDQ4MzkwLDQ4MzkyLDQ4Mzk0LDQ4Mzk1LDQ4Mzk2LDQ4Mzk3LDQ4Mzk4LDQ4Mzk5LDQ4NDAxLDQ4NDAyLDQ4NDAzLDQ4NDA1LDQ4NDA2LDQ4NDA3LDQ4NDA4LDQ4NDA5LDQ4NDEwLDQ4NDExLDQ4NDEyLDQ4NDEzLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDQ4NDE0LDQ4NDE1LDQ4NDE2LDQ4NDE3LDQ4NDE4LDQ4NDE5LDQ4NDIxLDQ4NDIyLDQ4NDIzLDQ4NDI0LDQ4NDI1LDQ4NDI2LDQ4NDI3LDQ4NDI5LDQ4NDMwLDQ4NDMxLDQ4NDMyLDQ4NDMzLDQ4NDM0LDQ4NDM1LDQ4NDM2LDQ4NDM3LDQ4NDM4LDQ4NDM5LDQ4NDQwLDQ4NDQx''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDQyLDQ4NDQzLDQ4NDQ0LDQ4NDQ1LDQ4NDQ2LDQ4NDQ3LDQ4NDQ5LDQ4NDUwLDQ4NDUxLDQ4NDUyLDQ4NDUzLDQ4NDU0LDQ4NDU1LDQ4NDU4LDQ4NDU5LDQ4NDYxLDQ4NDYyLDQ4NDYzLDQ4NDY1LDQ4NDY2LDQ4NDY3LDQ4NDY4LDQ4''@;'; put 'put ''NDY5LDQ4NDcwLDQ4NDcxLDQ4NDc0LDQ4NDc1LDQ4NDc2LDQ4NDc3LDQ4NDc4LDQ4NDc5LDQ4NDgwLDQ4NDgxLDQ4NDgyLDQ4NDgzLDQ4NDg1LDQ4NDg2LDQ4NDg3LDQ4NDg5LDQ4NDkwLDQ4NDkxLDQ4NDkyLDQ4NDkzLDQ4NDk0LDQ4NDk1LDQ4NDk2LDQ4NDk3LDQ4NDk4LDQ4NDk5LDQ4NTAw''@;'; put 'put ''LDQ4NTAxLDQ4NTAyLDQ4NTAzLDQ4NTA0LDQ4NTA1LDQ4NTA2LDQ4NTA3LDQ4NTA4LDQ4NTA5LDQ4NTEwLDQ4NTExLDQ4NTE0LDQ4NTE1LDQ4NTE3LDQ4NTE4LDQ4NTIzLDQ4NTI0LDQ4NTI1LDQ4NTI2LDQ4NTI3LDQ4NTMwLDQ4NTMyLDQ4NTM0LDQ4NTM1LDQ4NTM2LDQ4NTM5LDQ4NTQxLDQ4''@;'; put 'put ''NTQyLDQ4NTQzLDQ4NTQ0LDQ4NTQ1LDQ4NTQ2LDQ4NTQ3LDQ4NTQ5LDQ4NTUwLDQ4NTUxLDQ4NTUyLDQ4NTUzLDQ4NTU0LDQ4NTU1LDQ4NTU2LDQ4NTU3LDQ4NTU4LDQ4NTU5LDQ4NTYxLDQ4NTYyLDQ4NTYzLDQ4NTY0LDQ4NTY1LDQ4NTY2LDQ4NTY3LDQ4NTY5LDQ4NTcwLDQ4NTcxLDQ4NTcy''@;'; put 'put ''LDQ4NTczLDQ4NTc0LDQ4NTc1LDQ4NTc2LDQ4NTc3LDQ4NTc4LDQ4NTc5LDQ4NTgwLDQ4NTgxLDQ4NTgyLDQ4NTgzLDQ4NTg0LDQ4NTg1LDQ4NTg2LDQ4NTg3LDQ4NTg4LDQ4NTg5LDQ4NTkwLDQ4NTkxLDQ4NTkyLDQ4NTkzLDQ4NTk0LDQ4NTk1LDQ4NTk4LDQ4NTk5LDQ4NjAxLDQ4NjAyLDQ4''@;'; put 'put ''NjAzLDQ4NjA1LDQ4NjA2LDQ4NjA3LDQ4NjA4LDQ4NjA5LDQ4NjEwLDQ4NjExLDQ4NjEyLDQ4NjEzLDQ4NjE0LDQ4NjE1LDQ4NjE2LDQ4NjE4LDQ4NjE5LDQ4NjIwLDQ4NjIxLDQ4NjIyLDQ4NjIzLDQ4NjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjI2LDQ4NjI3LDQ4NjI5''@;'; put 'put ''LDQ4NjMwLDQ4NjMxLDQ4NjMzLDQ4NjM0LDQ4NjM1LDQ4NjM2LDQ4NjM3LDQ4NjM4LDQ4NjM5LDQ4NjQxLDQ4NjQyLDQ4NjQ0LDQ4NjQ2LDQ4NjQ3LDQ4NjQ4LDQ4NjQ5LDQ4NjUwLDQ4NjUxLDQ4NjU0LDQ4NjU1LDQ4NjU3LDQ4NjU4LDQ4NjU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDQ4NjYxLDQ4NjYyLDQ4NjYzLDQ4NjY0LDQ4NjY1LDQ4NjY2LDQ4NjY3LDQ4NjcwLDQ4NjcyLDQ4NjczLDQ4Njc0LDQ4Njc1LDQ4Njc2LDQ4Njc3LDQ4Njc4LDQ4Njc5LDQ4NjgwLDQ4NjgxLDQ4NjgyLDQ4NjgzLDQ4Njg0LDQ4Njg1LDQ4Njg2LDQ4Njg3LDQ4Njg4LDQ4Njg5LDQ4Njkw''@;'; put 'put ''LDQ4NjkxLDQ4NjkyLDQ4NjkzLDQ4Njk0LDQ4Njk1LDQ4Njk2LDQ4Njk3LDQ4Njk4LDQ4Njk5LDQ4NzAwLDQ4NzAxLDQ4NzAyLDQ4NzAzLDQ4NzA0LDQ4NzA1LDQ4NzA2LDQ4NzA3LDQ4NzEwLDQ4NzExLDQ4NzEzLDQ4NzE0LDQ4NzE1LDQ4NzE3LDQ4NzE5LDQ4NzIwLDQ4NzIxLDQ4NzIyLDQ4''@;'; put 'put ''NzIzLDQ4NzI2LDQ4NzI4LDQ4NzMyLDQ4NzMzLDQ4NzM0LDQ4NzM1LDQ4NzM4LDQ4NzM5LDQ4NzQxLDQ4NzQyLDQ4NzQzLDQ4NzQ1LDQ4NzQ3LDQ4NzQ4LDQ4NzQ5LDQ4NzUwLDQ4NzUxLDQ4NzU0LDQ4NzU4LDQ4NzU5LDQ4NzYwLDQ4NzYxLDQ4NzYyLDQ4NzY2LDQ4NzY3LDQ4NzY5LDQ4Nzcw''@;'; put 'put ''LDQ4NzcxLDQ4NzczLDQ4Nzc0LDQ4Nzc1LDQ4Nzc2LDQ4Nzc3LDQ4Nzc4LDQ4Nzc5LDQ4NzgyLDQ4Nzg2LDQ4Nzg3LDQ4Nzg4LDQ4Nzg5LDQ4NzkwLDQ4NzkxLDQ4Nzk0LDQ4Nzk1LDQ4Nzk2LDQ4Nzk3LDQ4Nzk4LDQ4Nzk5LDQ4ODAwLDQ4ODAxLDQ4ODAyLDQ4ODAzLDQ4ODA0LDQ4ODA1LDQ4''@;'; put 'put ''ODA2LDQ4ODA3LDQ4ODA5LDQ4ODEwLDQ4ODExLDQ4ODEyLDQ4ODEzLDQ4ODE0LDQ4ODE1LDQ4ODE2LDQ4ODE3LDQ4ODE4LDQ4ODE5LDQ4ODIwLDQ4ODIxLDQ4ODIyLDQ4ODIzLDQ4ODI0LDQ4ODI1LDQ4ODI2LDQ4ODI3LDQ4ODI4LDQ4ODI5LDQ4ODMwLDQ4ODMxLDQ4ODMyLDQ4ODMzLDQ4ODM0''@;'; put 'put ''LDQ4ODM1LDQ4ODM2LDQ4ODM3LDQ4ODM4LDQ4ODM5LDQ4ODQwLDQ4ODQxLDQ4ODQyLDQ4ODQzLDQ4ODQ0LDQ4ODQ1LDQ4ODQ2LDQ4ODQ3LDQ4ODUwLDQ4ODUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODUzLDQ4ODU0LDQ4ODU3LDQ4ODU4LDQ4ODU5LDQ4ODYwLDQ4ODYxLDQ4''@;'; put 'put ''ODYyLDQ4ODYzLDQ4ODY1LDQ4ODY2LDQ4ODcwLDQ4ODcxLDQ4ODcyLDQ4ODczLDQ4ODc0LDQ4ODc1LDQ4ODc3LDQ4ODc4LDQ4ODc5LDQ4ODgwLDQ4ODgxLDQ4ODgyLDQ4ODgzLDQ4ODg0LDQ4ODg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODg2LDQ4ODg3LDQ4ODg4LDQ4ODg5''@;'; put 'put ''LDQ4ODkwLDQ4ODkxLDQ4ODkyLDQ4ODkzLDQ4ODk0LDQ4ODk1LDQ4ODk2LDQ4ODk4LDQ4ODk5LDQ4OTAwLDQ4OTAxLDQ4OTAyLDQ4OTAzLDQ4OTA2LDQ4OTA3LDQ4OTA4LDQ4OTA5LDQ4OTEwLDQ4OTExLDQ4OTEyLDQ4OTEzLDQ4OTE0LDQ4OTE1LDQ4OTE2LDQ4OTE3LDQ4OTE4LDQ4OTE5LDQ4''@;'; put 'put ''OTIyLDQ4OTI2LDQ4OTI3LDQ4OTI4LDQ4OTI5LDQ4OTMwLDQ4OTMxLDQ4OTMyLDQ4OTMzLDQ4OTM0LDQ4OTM1LDQ4OTM2LDQ4OTM3LDQ4OTM4LDQ4OTM5LDQ4OTQwLDQ4OTQxLDQ4OTQyLDQ4OTQzLDQ4OTQ0LDQ4OTQ1LDQ4OTQ2LDQ4OTQ3LDQ4OTQ4LDQ4OTQ5LDQ4OTUwLDQ4OTUxLDQ4OTUy''@;'; put 'put ''LDQ4OTUzLDQ4OTU0LDQ4OTU1LDQ4OTU2LDQ4OTU3LDQ4OTU4LDQ4OTU5LDQ4OTYyLDQ4OTYzLDQ4OTY1LDQ4OTY2LDQ4OTY3LDQ4OTY5LDQ4OTcwLDQ4OTcxLDQ4OTcyLDQ4OTczLDQ4OTc0LDQ4OTc1LDQ4OTc4LDQ4OTc5LDQ4OTgwLDQ4OTgyLDQ4OTgzLDQ4OTg0LDQ4OTg1LDQ4OTg2LDQ4''@;'; put 'put ''OTg3LDQ4OTg4LDQ4OTg5LDQ4OTkwLDQ4OTkxLDQ4OTkyLDQ4OTkzLDQ4OTk0LDQ4OTk1LDQ4OTk2LDQ4OTk3LDQ4OTk4LDQ4OTk5LDQ5ZTMsNDkwMDEsNDkwMDIsNDkwMDMsNDkwMDQsNDkwMDUsNDkwMDYsNDkwMDcsNDkwMDgsNDkwMDksNDkwMTAsNDkwMTEsNDkwMTIsNDkwMTMsNDkwMTQs''@;'; put 'put ''NDkwMTUsNDkwMTYsNDkwMTcsNDkwMTgsNDkwMTksNDkwMjAsNDkwMjEsNDkwMjIsNDkwMjMsNDkwMjQsNDkwMjUsNDkwMjYsNDkwMjcsNDkwMjgsNDkwMjksNDkwMzAsNDkwMzEsNDkwMzIsNDkwMzMsNDkwMzQsNDkwMzUsNDkwMzYsNDkwMzcsNDkwMzgsNDkwMzksNDkwNDAsNDkwNDEsNDkw''@;'; put 'put ''NDIsNDkwNDMsNDkwNDUsNDkwNDYsNDkwNDcsNDkwNDgsNDkwNDksNDkwNTAsNDkwNTEsNDkwNTIsNDkwNTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwNTQsNDkwNTUsNDkwNTYsNDkwNTcsNDkwNTgsNDkwNTksNDkwNjAsNDkwNjEsNDkwNjIsNDkwNjMsNDkwNjQsNDkwNjUs''@;'; put 'put ''NDkwNjYsNDkwNjcsNDkwNjgsNDkwNjksNDkwNzAsNDkwNzEsNDkwNzMsNDkwNzQsNDkwNzUsNDkwNzYsNDkwNzcsNDkwNzgsNDkwNzksNDkwODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwODEsNDkwODIsNDkwODMsNDkwODQsNDkwODUsNDkwODYsNDkwODcsNDkwODgsNDkw''@;'; put 'put ''ODksNDkwOTAsNDkwOTEsNDkwOTIsNDkwOTQsNDkwOTUsNDkwOTYsNDkwOTcsNDkwOTgsNDkwOTksNDkxMDIsNDkxMDMsNDkxMDUsNDkxMDYsNDkxMDcsNDkxMDksNDkxMTAsNDkxMTEsNDkxMTIsNDkxMTMsNDkxMTQsNDkxMTUsNDkxMTcsNDkxMTgsNDkxMjAsNDkxMjIsNDkxMjMsNDkxMjQs''@;'; put 'put ''NDkxMjUsNDkxMjYsNDkxMjcsNDkxMjgsNDkxMjksNDkxMzAsNDkxMzEsNDkxMzIsNDkxMzMsNDkxMzQsNDkxMzUsNDkxMzYsNDkxMzcsNDkxMzgsNDkxMzksNDkxNDAsNDkxNDEsNDkxNDIsNDkxNDMsNDkxNDQsNDkxNDUsNDkxNDYsNDkxNDcsNDkxNDgsNDkxNDksNDkxNTAsNDkxNTEsNDkx''@;'; put 'put ''NTIsNDkxNTMsNDkxNTQsNDkxNTUsNDkxNTYsNDkxNTcsNDkxNTgsNDkxNTksNDkxNjAsNDkxNjEsNDkxNjIsNDkxNjMsNDkxNjQsNDkxNjUsNDkxNjYsNDkxNjcsNDkxNjgsNDkxNjksNDkxNzAsNDkxNzEsNDkxNzIsNDkxNzMsNDkxNzQsNDkxNzUsNDkxNzYsNDkxNzcsNDkxNzgsNDkxNzks''@;'; put 'put ''NDkxODAsNDkxODEsNDkxODIsNDkxODMsNDkxODQsNDkxODUsNDkxODYsNDkxODcsNDkxODgsNDkxODksNDkxOTAsNDkxOTEsNDkxOTIsNDkxOTMsNDkxOTQsNDkxOTUsNDkxOTYsNDkxOTcsNDkxOTgsNDkxOTksNDkyMDAsNDkyMDEsNDkyMDIsNDkyMDMsNDkyMDQsNDkyMDUsNDkyMDYsNDky''@;'; put 'put ''MDcsNDkyMDgsNDkyMDksNDkyMTAsNDkyMTEsNDkyMTMsNDkyMTQsNDkyMTUsNDkyMTYsNDkyMTcsNDkyMTgsNDkyMTksNDkyMjAsNDkyMjEsNDkyMjIsNDkyMjMsNDkyMjQsNDkyMjUsNDkyMjYsNDkyMjcsNDkyMjgsNDkyMjksNDkyMzAsNDkyMzEsNDkyMzIsNDkyMzQsNDkyMzUsNDkyMzYs''@;'; put 'put ''NDkyMzcsNDkyMzgsNDkyMzksNDkyNDEsNDkyNDIsNDkyNDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNDUsNDkyNDYsNDkyNDcsNDkyNDksNDkyNTAsNDkyNTEsNDkyNTIsNDkyNTMsNDkyNTQsNDkyNTUsNDkyNTgsNDkyNTksNDkyNjAsNDkyNjEsNDkyNjIsNDkyNjMsNDky''@;'; put 'put ''NjQsNDkyNjUsNDkyNjYsNDkyNjcsNDkyNjgsNDkyNjksNDkyNzAsNDkyNzEsNDkyNzIsNDkyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNzQsNDkyNzUsNDkyNzYsNDkyNzcsNDkyNzgsNDkyNzksNDkyODAsNDkyODEsNDkyODIsNDkyODMsNDkyODQsNDkyODUsNDkyODYs''@;'; put 'put ''NDkyODcsNDkyODgsNDkyODksNDkyOTAsNDkyOTEsNDkyOTIsNDkyOTMsNDkyOTQsNDkyOTUsNDkyOTgsNDkyOTksNDkzMDEsNDkzMDIsNDkzMDMsNDkzMDUsNDkzMDYsNDkzMDcsNDkzMDgsNDkzMDksNDkzMTAsNDkzMTEsNDkzMTQsNDkzMTYsNDkzMTgsNDkzMTksNDkzMjAsNDkzMjEsNDkz''@;'; put 'put ''MjIsNDkzMjMsNDkzMjYsNDkzMjksNDkzMzAsNDkzMzUsNDkzMzYsNDkzMzcsNDkzMzgsNDkzMzksNDkzNDIsNDkzNDYsNDkzNDcsNDkzNDgsNDkzNTAsNDkzNTEsNDkzNTQsNDkzNTUsNDkzNTcsNDkzNTgsNDkzNTksNDkzNjEsNDkzNjIsNDkzNjMsNDkzNjQsNDkzNjUsNDkzNjYsNDkzNjcs''@;'; put 'put ''NDkzNzAsNDkzNzQsNDkzNzUsNDkzNzYsNDkzNzcsNDkzNzgsNDkzNzksNDkzODIsNDkzODMsNDkzODUsNDkzODYsNDkzODcsNDkzODksNDkzOTAsNDkzOTEsNDkzOTIsNDkzOTMsNDkzOTQsNDkzOTUsNDkzOTgsNDk0MDAsNDk0MDIsNDk0MDMsNDk0MDQsNDk0MDUsNDk0MDYsNDk0MDcsNDk0''@;'; put 'put ''MDksNDk0MTAsNDk0MTEsNDk0MTMsNDk0MTQsNDk0MTUsNDk0MTcsNDk0MTgsNDk0MTksNDk0MjAsNDk0MjEsNDk0MjIsNDk0MjMsNDk0MjUsNDk0MjYsNDk0MjcsNDk0MjgsNDk0MzAsNDk0MzEsNDk0MzIsNDk0MzMsNDk0MzQsNDk0MzUsNDk0NDEsNDk0NDIsNDk0NDUsNDk0NDgsNDk0NDks''@;'; put 'put ''NDk0NTAsNDk0NTEsNDk0NTQsNDk0NTgsNDk0NTksNDk0NjAsNDk0NjEsNDk0NjMsNDk0NjYsNDk0NjcsNDk0NjksNDk0NzAsNDk0NzEsNDk0NzMsNDk0NzQsNDk0NzUsNDk0NzYsNDk0NzcsNDk0NzgsNDk0NzksNDk0ODIsNDk0ODYsNDk0ODcsNDk0ODgsNDk0ODksNDk0OTAsNDk0OTEsNDk0''@;'; put 'put ''OTQsNDk0OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk0OTcsNDk0OTgsNDk0OTksNDk1MDEsNDk1MDIsNDk1MDMsNDk1MDQsNDk1MDUsNDk1MDYsNDk1MDcsNDk1MTAsNDk1MTQsNDk1MTUsNDk1MTYsNDk1MTcsNDk1MTgsNDk1MTksNDk1MjEsNDk1MjIsNDk1MjMsNDk1MjUs''@;'; put 'put ''NDk1MjYsNDk1MjcsNDk1MjksNDk1MzAsNDk1MzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk1MzIsNDk1MzMsNDk1MzQsNDk1MzUsNDk1MzYsNDk1MzcsNDk1MzgsNDk1MzksNDk1NDAsNDk1NDIsNDk1NDMsNDk1NDQsNDk1NDUsNDk1NDYsNDk1NDcsNDk1NTEsNDk1NTMsNDk1''@;'; put 'put ''NTQsNDk1NTUsNDk1NTcsNDk1NTksNDk1NjAsNDk1NjEsNDk1NjIsNDk1NjMsNDk1NjYsNDk1NjgsNDk1NzAsNDk1NzEsNDk1NzIsNDk1NzQsNDk1NzUsNDk1NzgsNDk1NzksNDk1ODEsNDk1ODIsNDk1ODMsNDk1ODUsNDk1ODYsNDk1ODcsNDk1ODgsNDk1ODksNDk1OTAsNDk1OTEsNDk1OTIs''@;'; put 'put ''NDk1OTMsNDk1OTQsNDk1OTUsNDk1OTYsNDk1OTgsNDk1OTksNDk2MDAsNDk2MDEsNDk2MDIsNDk2MDMsNDk2MDUsNDk2MDYsNDk2MDcsNDk2MDksNDk2MTAsNDk2MTEsNDk2MTMsNDk2MTQsNDk2MTUsNDk2MTYsNDk2MTcsNDk2MTgsNDk2MTksNDk2MjEsNDk2MjIsNDk2MjUsNDk2MjYsNDk2''@;'; put 'put ''MjcsNDk2MjgsNDk2MjksNDk2MzAsNDk2MzEsNDk2MzMsNDk2MzQsNDk2MzUsNDk2MzcsNDk2MzgsNDk2MzksNDk2NDEsNDk2NDIsNDk2NDMsNDk2NDQsNDk2NDUsNDk2NDYsNDk2NDcsNDk2NTAsNDk2NTIsNDk2NTMsNDk2NTQsNDk2NTUsNDk2NTYsNDk2NTcsNDk2NTgsNDk2NTksNDk2NjIs''@;'; put 'put ''NDk2NjMsNDk2NjUsNDk2NjYsNDk2NjcsNDk2NjksNDk2NzAsNDk2NzEsNDk2NzIsNDk2NzMsNDk2NzQsNDk2NzUsNDk2NzgsNDk2ODAsNDk2ODIsNDk2ODMsNDk2ODQsNDk2ODUsNDk2ODYsNDk2ODcsNDk2OTAsNDk2OTEsNDk2OTMsNDk2OTQsNDk2OTcsNDk2OTgsNDk2OTksNDk3MDAsNDk3''@;'; put 'put ''MDEsNDk3MDIsNDk3MDMsNDk3MDYsNDk3MDgsNDk3MTAsNDk3MTIsNDk3MTUsNDk3MTcsNDk3MTgsNDk3MTksNDk3MjAsNDk3MjEsNDk3MjIsNDk3MjMsNDk3MjQsNDk3MjUsNDk3MjYsNDk3MjcsNDk3MjgsNDk3MjksNDk3MzAsNDk3MzEsNDk3MzIsNDk3MzMsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNDk3MzQsNDk3MzUsNDk3MzcsNDk3MzgsNDk3MzksNDk3NDAsNDk3NDEsNDk3NDIsNDk3NDMsNDk3NDYsNDk3NDcsNDk3NDksNDk3NTAsNDk3NTEsNDk3NTMsNDk3NTQsNDk3NTUsNDk3NTYsNDk3NTcsNDk3NTgsNDk3NTksNDk3NjEsNDk3NjIsNDk3NjMsNDk3NjQsNDk3''@;'; put 'put ''NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3NjcsNDk3NjgsNDk3NjksNDk3NzAsNDk3NzEsNDk3NzQsNDk3NzUsNDk3NzcsNDk3NzgsNDk3NzksNDk3ODEsNDk3ODIsNDk3ODMsNDk3ODQsNDk3ODUsNDk3ODYsNDk3ODcsNDk3OTAsNDk3OTIsNDk3OTQsNDk3OTUsNDk3OTYs''@;'; put 'put ''NDk3OTcsNDk3OTgsNDk3OTksNDk4MDIsNDk4MDMsNDk4MDQsNDk4MDUsNDk4MDYsNDk4MDcsNDk4MDksNDk4MTAsNDk4MTEsNDk4MTIsNDk4MTMsNDk4MTQsNDk4MTUsNDk4MTcsNDk4MTgsNDk4MjAsNDk4MjIsNDk4MjMsNDk4MjQsNDk4MjUsNDk4MjYsNDk4MjcsNDk4MzAsNDk4MzEsNDk4''@;'; put 'put ''MzMsNDk4MzQsNDk4MzUsNDk4MzgsNDk4MzksNDk4NDAsNDk4NDEsNDk4NDIsNDk4NDMsNDk4NDYsNDk4NDgsNDk4NTAsNDk4NTEsNDk4NTIsNDk4NTMsNDk4NTQsNDk4NTUsNDk4NTYsNDk4NTcsNDk4NTgsNDk4NTksNDk4NjAsNDk4NjEsNDk4NjIsNDk4NjMsNDk4NjQsNDk4NjUsNDk4NjYs''@;'; put 'put ''NDk4NjcsNDk4NjgsNDk4NjksNDk4NzAsNDk4NzEsNDk4NzIsNDk4NzMsNDk4NzQsNDk4NzUsNDk4NzYsNDk4NzcsNDk4NzgsNDk4NzksNDk4ODAsNDk4ODEsNDk4ODIsNDk4ODMsNDk4ODYsNDk4ODcsNDk4ODksNDk4OTAsNDk4OTMsNDk4OTQsNDk4OTUsNDk4OTYsNDk4OTcsNDk4OTgsNDk5''@;'; put 'put ''MDIsNDk5MDQsNDk5MDYsNDk5MDcsNDk5MDgsNDk5MDksNDk5MTEsNDk5MTQsNDk5MTcsNDk5MTgsNDk5MTksNDk5MjEsNDk5MjIsNDk5MjMsNDk5MjQsNDk5MjUsNDk5MjYsNDk5MjcsNDk5MzAsNDk5MzEsNDk5MzQsNDk5MzUsNDk5MzYsNDk5MzcsNDk5MzgsNDk5NDIsNDk5NDMsNDk5NDUs''@;'; put 'put ''NDk5NDYsNDk5NDcsNDk5NDksNDk5NTAsNDk5NTEsNDk5NTIsNDk5NTMsNDk5NTQsNDk5NTUsNDk5NTgsNDk5NTksNDk5NjIsNDk5NjMsNDk5NjQsNDk5NjUsNDk5NjYsNDk5NjcsNDk5NjgsNDk5NjksNDk5NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5NzEsNDk5NzIsNDk5''@;'; put 'put ''NzMsNDk5NzQsNDk5NzUsNDk5NzYsNDk5NzcsNDk5NzgsNDk5NzksNDk5ODAsNDk5ODEsNDk5ODIsNDk5ODMsNDk5ODQsNDk5ODUsNDk5ODYsNDk5ODcsNDk5ODgsNDk5OTAsNDk5OTEsNDk5OTIsNDk5OTMsNDk5OTQsNDk5OTUsNDk5OTYsNDk5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNDk5OTgsNDk5OTksNWU0LDUwMDAxLDUwMDAyLDUwMDAzLDUwMDA0LDUwMDA1LDUwMDA2LDUwMDA3LDUwMDA4LDUwMDA5LDUwMDEwLDUwMDExLDUwMDEyLDUwMDEzLDUwMDE0LDUwMDE1LDUwMDE2LDUwMDE3LDUwMDE4LDUwMDE5LDUwMDIwLDUwMDIxLDUwMDIyLDUwMDIzLDUwMDI2''@;'; put 'put ''LDUwMDI3LDUwMDI5LDUwMDMwLDUwMDMxLDUwMDMzLDUwMDM1LDUwMDM2LDUwMDM3LDUwMDM4LDUwMDM5LDUwMDQyLDUwMDQzLDUwMDQ2LDUwMDQ3LDUwMDQ4LDUwMDQ5LDUwMDUwLDUwMDUxLDUwMDUzLDUwMDU0LDUwMDU1LDUwMDU3LDUwMDU4LDUwMDU5LDUwMDYxLDUwMDYyLDUwMDYzLDUw''@;'; put 'put ''MDY0LDUwMDY1LDUwMDY2LDUwMDY3LDUwMDY4LDUwMDY5LDUwMDcwLDUwMDcxLDUwMDcyLDUwMDczLDUwMDc0LDUwMDc1LDUwMDc2LDUwMDc3LDUwMDc4LDUwMDc5LDUwMDgwLDUwMDgxLDUwMDgyLDUwMDgzLDUwMDg0LDUwMDg1LDUwMDg2LDUwMDg3LDUwMDg4LDUwMDg5LDUwMDkwLDUwMDkx''@;'; put 'put ''LDUwMDkyLDUwMDkzLDUwMDk0LDUwMDk1LDUwMDk2LDUwMDk3LDUwMDk4LDUwMDk5LDUwMTAwLDUwMTAxLDUwMTAyLDUwMTAzLDUwMTA0LDUwMTA1LDUwMTA2LDUwMTA3LDUwMTA4LDUwMTA5LDUwMTEwLDUwMTExLDUwMTEzLDUwMTE0LDUwMTE1LDUwMTE2LDUwMTE3LDUwMTE4LDUwMTE5LDUw''@;'; put 'put ''MTIwLDUwMTIxLDUwMTIyLDUwMTIzLDUwMTI0LDUwMTI1LDUwMTI2LDUwMTI3LDUwMTI4LDUwMTI5LDUwMTMwLDUwMTMxLDUwMTMyLDUwMTMzLDUwMTM0LDUwMTM1LDUwMTM4LDUwMTM5LDUwMTQxLDUwMTQyLDUwMTQ1LDUwMTQ3LDUwMTQ4LDUwMTQ5LDUwMTUwLDUwMTUxLDUwMTU0LDUwMTU1''@;'; put 'put ''LDUwMTU2LDUwMTU4LDUwMTU5LDUwMTYwLDUwMTYxLDUwMTYyLDUwMTYzLDUwMTY2LDUwMTY3LDUwMTY5LDUwMTcwLDUwMTcxLDUwMTcyLDUwMTczLDUwMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMTc1LDUwMTc2LDUwMTc3LDUwMTc4LDUwMTc5LDUwMTgwLDUwMTgxLDUw''@;'; put 'put ''MTgyLDUwMTgzLDUwMTg1LDUwMTg2LDUwMTg3LDUwMTg4LDUwMTg5LDUwMTkwLDUwMTkxLDUwMTkzLDUwMTk0LDUwMTk1LDUwMTk2LDUwMTk3LDUwMTk4LDUwMTk5LDUwMjAwLDUwMjAxLDUwMjAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMjAzLDUwMjA0LDUwMjA1LDUwMjA2''@;'; put 'put ''LDUwMjA3LDUwMjA4LDUwMjA5LDUwMjEwLDUwMjExLDUwMjEzLDUwMjE0LDUwMjE1LDUwMjE2LDUwMjE3LDUwMjE4LDUwMjE5LDUwMjIxLDUwMjIyLDUwMjIzLDUwMjI1LDUwMjI2LDUwMjI3LDUwMjI5LDUwMjMwLDUwMjMxLDUwMjMyLDUwMjMzLDUwMjM0LDUwMjM1LDUwMjM4LDUwMjM5LDUw''@;'; put 'put ''MjQwLDUwMjQxLDUwMjQyLDUwMjQzLDUwMjQ0LDUwMjQ1LDUwMjQ2LDUwMjQ3LDUwMjQ5LDUwMjUwLDUwMjUxLDUwMjUyLDUwMjUzLDUwMjU0LDUwMjU1LDUwMjU2LDUwMjU3LDUwMjU4LDUwMjU5LDUwMjYwLDUwMjYxLDUwMjYyLDUwMjYzLDUwMjY0LDUwMjY1LDUwMjY2LDUwMjY3LDUwMjY4''@;'; put 'put ''LDUwMjY5LDUwMjcwLDUwMjcxLDUwMjcyLDUwMjczLDUwMjc0LDUwMjc1LDUwMjc4LDUwMjc5LDUwMjgxLDUwMjgyLDUwMjgzLDUwMjg1LDUwMjg2LDUwMjg3LDUwMjg4LDUwMjg5LDUwMjkwLDUwMjkxLDUwMjk0LDUwMjk1LDUwMjk2LDUwMjk4LDUwMjk5LDUwMzAwLDUwMzAxLDUwMzAyLDUw''@;'; put 'put ''MzAzLDUwMzA1LDUwMzA2LDUwMzA3LDUwMzA4LDUwMzA5LDUwMzEwLDUwMzExLDUwMzEyLDUwMzEzLDUwMzE0LDUwMzE1LDUwMzE2LDUwMzE3LDUwMzE4LDUwMzE5LDUwMzIwLDUwMzIxLDUwMzIyLDUwMzIzLDUwMzI1LDUwMzI2LDUwMzI3LDUwMzI4LDUwMzI5LDUwMzMwLDUwMzMxLDUwMzMz''@;'; put 'put ''LDUwMzM0LDUwMzM1LDUwMzM2LDUwMzM3LDUwMzM4LDUwMzM5LDUwMzQwLDUwMzQxLDUwMzQyLDUwMzQzLDUwMzQ0LDUwMzQ1LDUwMzQ2LDUwMzQ3LDUwMzQ4LDUwMzQ5LDUwMzUwLDUwMzUxLDUwMzUyLDUwMzUzLDUwMzU0LDUwMzU1LDUwMzU2LDUwMzU3LDUwMzU4LDUwMzU5LDUwMzYxLDUw''@;'; put 'put ''MzYyLDUwMzYzLDUwMzY1LDUwMzY2LDUwMzY3LDUwMzY4LDUwMzY5LDUwMzcwLDUwMzcxLDUwMzcyLDUwMzczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMzc0LDUwMzc1LDUwMzc2LDUwMzc3LDUwMzc4LDUwMzc5LDUwMzgwLDUwMzgxLDUwMzgyLDUwMzgzLDUwMzg0LDUwMzg1''@;'; put 'put ''LDUwMzg2LDUwMzg3LDUwMzg4LDUwMzg5LDUwMzkwLDUwMzkxLDUwMzkyLDUwMzkzLDUwMzk0LDUwMzk1LDUwMzk2LDUwMzk3LDUwMzk4LDUwMzk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNDAwLDUwNDAxLDUwNDAyLDUwNDAzLDUwNDA0LDUwNDA1LDUwNDA2LDUwNDA3LDUw''@;'; put 'put ''NDA4LDUwNDEwLDUwNDExLDUwNDEyLDUwNDEzLDUwNDE0LDUwNDE1LDUwNDE4LDUwNDE5LDUwNDIxLDUwNDIyLDUwNDIzLDUwNDI1LDUwNDI3LDUwNDI4LDUwNDI5LDUwNDMwLDUwNDM0LDUwNDM1LDUwNDM2LDUwNDM3LDUwNDM4LDUwNDM5LDUwNDQwLDUwNDQxLDUwNDQyLDUwNDQzLDUwNDQ1''@;'; put 'put ''LDUwNDQ2LDUwNDQ3LDUwNDQ5LDUwNDUwLDUwNDUxLDUwNDUzLDUwNDU0LDUwNDU1LDUwNDU2LDUwNDU3LDUwNDU4LDUwNDU5LDUwNDYxLDUwNDYyLDUwNDYzLDUwNDY0LDUwNDY1LDUwNDY2LDUwNDY3LDUwNDY4LDUwNDY5LDUwNDcwLDUwNDcxLDUwNDc0LDUwNDc1LDUwNDc3LDUwNDc4LDUw''@;'; put 'put ''NDc5LDUwNDgxLDUwNDgyLDUwNDgzLDUwNDg0LDUwNDg1LDUwNDg2LDUwNDg3LDUwNDkwLDUwNDkyLDUwNDk0LDUwNDk1LDUwNDk2LDUwNDk3LDUwNDk4LDUwNDk5LDUwNTAyLDUwNTAzLDUwNTA3LDUwNTExLDUwNTEyLDUwNTEzLDUwNTE0LDUwNTE4LDUwNTIyLDUwNTIzLDUwNTI0LDUwNTI3''@;'; put 'put ''LDUwNTMwLDUwNTMxLDUwNTMzLDUwNTM0LDUwNTM1LDUwNTM3LDUwNTM4LDUwNTM5LDUwNTQwLDUwNTQxLDUwNTQyLDUwNTQzLDUwNTQ2LDUwNTUwLDUwNTUxLDUwNTUyLDUwNTUzLDUwNTU0LDUwNTU1LDUwNTU4LDUwNTU5LDUwNTYxLDUwNTYyLDUwNTYzLDUwNTY1LDUwNTY2LDUwNTY4LDUw''@;'; put 'put ''NTY5LDUwNTcwLDUwNTcxLDUwNTc0LDUwNTc2LDUwNTc4LDUwNTc5LDUwNTgwLDUwNTgyLDUwNTg1LDUwNTg2LDUwNTg3LDUwNTg5LDUwNTkwLDUwNTkxLDUwNTkzLDUwNTk0LDUwNTk1LDUwNTk2LDUwNTk3LDUwNTk4LDUwNTk5LDUwNjAwLDUwNjAyLDUwNjAzLDUwNjA0LDUwNjA1LDUwNjA2''@;'; put 'put ''LDUwNjA3LDUwNjA4LDUwNjA5LDUwNjEwLDUwNjExLDUwNjE0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjE1LDUwNjE4LDUwNjIzLDUwNjI0LDUwNjI1LDUwNjI2LDUwNjI3LDUwNjM1LDUwNjM3LDUwNjM5LDUwNjQyLDUwNjQzLDUwNjQ1LDUwNjQ2LDUwNjQ3LDUwNjQ5LDUw''@;'; put 'put ''NjUwLDUwNjUxLDUwNjUyLDUwNjUzLDUwNjU0LDUwNjU1LDUwNjU4LDUwNjYwLDUwNjYyLDUwNjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjY0LDUwNjY1LDUwNjY2LDUwNjY3LDUwNjcxLDUwNjczLDUwNjc0LDUwNjc1LDUwNjc3LDUwNjgwLDUwNjgxLDUwNjgyLDUwNjgz''@;'; put 'put ''LDUwNjkwLDUwNjkxLDUwNjkyLDUwNjk3LDUwNjk4LDUwNjk5LDUwNzAxLDUwNzAyLDUwNzAzLDUwNzA1LDUwNzA2LDUwNzA3LDUwNzA4LDUwNzA5LDUwNzEwLDUwNzExLDUwNzE0LDUwNzE3LDUwNzE4LDUwNzE5LDUwNzIwLDUwNzIxLDUwNzIyLDUwNzIzLDUwNzI2LDUwNzI3LDUwNzI5LDUw''@;'; put 'put ''NzMwLDUwNzMxLDUwNzM1LDUwNzM3LDUwNzM4LDUwNzQyLDUwNzQ0LDUwNzQ2LDUwNzQ4LDUwNzQ5LDUwNzUwLDUwNzUxLDUwNzU0LDUwNzU1LDUwNzU3LDUwNzU4LDUwNzU5LDUwNzYxLDUwNzYyLDUwNzYzLDUwNzY0LDUwNzY1LDUwNzY2LDUwNzY3LDUwNzcwLDUwNzc0LDUwNzc1LDUwNzc2''@;'; put 'put ''LDUwNzc3LDUwNzc4LDUwNzc5LDUwNzgyLDUwNzgzLDUwNzg1LDUwNzg2LDUwNzg3LDUwNzg4LDUwNzg5LDUwNzkwLDUwNzkxLDUwNzkyLDUwNzkzLDUwNzk0LDUwNzk1LDUwNzk3LDUwNzk4LDUwODAwLDUwODAyLDUwODAzLDUwODA0LDUwODA1LDUwODA2LDUwODA3LDUwODEwLDUwODExLDUw''@;'; put 'put ''ODEzLDUwODE0LDUwODE1LDUwODE3LDUwODE4LDUwODE5LDUwODIwLDUwODIxLDUwODIyLDUwODIzLDUwODI2LDUwODI4LDUwODMwLDUwODMxLDUwODMyLDUwODMzLDUwODM0LDUwODM1LDUwODM4LDUwODM5LDUwODQxLDUwODQyLDUwODQzLDUwODQ1LDUwODQ2LDUwODQ3LDUwODQ4LDUwODQ5''@;'; put 'put ''LDUwODUwLDUwODUxLDUwODU0LDUwODU2LDUwODU4LDUwODU5LDUwODYwLDUwODYxLDUwODYyLDUwODYzLDUwODY2LDUwODY3LDUwODY5LDUwODcwLDUwODcxLDUwODc1LDUwODc2LDUwODc3LDUwODc4LDUwODc5LDUwODgyLDUwODg0LDUwODg2LDUwODg3LDUwODg4LDUwODg5LDUwODkwLDUw''@;'; put 'put ''ODkxLDUwODk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwODk1LDUwODk3LDUwODk4LDUwODk5LDUwOTAxLDUwOTAyLDUwOTAzLDUwOTA0LDUwOTA1LDUwOTA2LDUwOTA3LDUwOTEwLDUwOTExLDUwOTE0LDUwOTE1LDUwOTE2LDUwOTE3LDUwOTE4LDUwOTE5LDUwOTIyLDUwOTIz''@;'; put 'put ''LDUwOTI1LDUwOTI2LDUwOTI3LDUwOTI5LDUwOTMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwOTMxLDUwOTMyLDUwOTMzLDUwOTM0LDUwOTM1LDUwOTM4LDUwOTM5LDUwOTQwLDUwOTQyLDUwOTQzLDUwOTQ0LDUwOTQ1LDUwOTQ2LDUwOTQ3LDUwOTUwLDUwOTUxLDUwOTUzLDUw''@;'; put 'put ''OTU0LDUwOTU1LDUwOTU3LDUwOTU4LDUwOTU5LDUwOTYwLDUwOTYxLDUwOTYyLDUwOTYzLDUwOTY2LDUwOTY4LDUwOTcwLDUwOTcxLDUwOTcyLDUwOTczLDUwOTc0LDUwOTc1LDUwOTc4LDUwOTc5LDUwOTgxLDUwOTgyLDUwOTgzLDUwOTg1LDUwOTg2LDUwOTg3LDUwOTg4LDUwOTg5LDUwOTkw''@;'; put 'put ''LDUwOTkxLDUwOTk0LDUwOTk2LDUwOTk4LDUxZTMsNTEwMDEsNTEwMDIsNTEwMDMsNTEwMDYsNTEwMDcsNTEwMDksNTEwMTAsNTEwMTEsNTEwMTMsNTEwMTQsNTEwMTUsNTEwMTYsNTEwMTcsNTEwMTksNTEwMjIsNTEwMjQsNTEwMzMsNTEwMzQsNTEwMzUsNTEwMzcsNTEwMzgsNTEwMzksNTEw''@;'; put 'put ''NDEsNTEwNDIsNTEwNDMsNTEwNDQsNTEwNDUsNTEwNDYsNTEwNDcsNTEwNDksNTEwNTAsNTEwNTIsNTEwNTMsNTEwNTQsNTEwNTUsNTEwNTYsNTEwNTcsNTEwNTgsNTEwNTksNTEwNjIsNTEwNjMsNTEwNjUsNTEwNjYsNTEwNjcsNTEwNzEsNTEwNzIsNTEwNzMsNTEwNzQsNTEwNzgsNTEwODMs''@;'; put 'put ''NTEwODQsNTEwODUsNTEwODcsNTEwOTAsNTEwOTEsNTEwOTMsNTEwOTcsNTEwOTksNTExMDAsNTExMDEsNTExMDIsNTExMDMsNTExMDYsNTExMTEsNTExMTIsNTExMTMsNTExMTQsNTExMTUsNTExMTgsNTExMTksNTExMjEsNTExMjIsNTExMjMsNTExMjUsNTExMjYsNTExMjcsNTExMjgsNTEx''@;'; put 'put ''MjksNTExMzAsNTExMzEsNTExMzQsNTExMzgsNTExMzksNTExNDAsNTExNDEsNTExNDIsNTExNDMsNTExNDYsNTExNDcsNTExNDksNTExNTEsNTExNTMsNTExNTQsNTExNTUsNTExNTYsNTExNTcsNTExNTgsNTExNTksNTExNjEsNTExNjIsNTExNjMsNTExNjQsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTExNjYsNTExNjcsNTExNjgsNTExNjksNTExNzAsNTExNzEsNTExNzMsNTExNzQsNTExNzUsNTExNzcsNTExNzgsNTExNzksNTExODEsNTExODIsNTExODMsNTExODQsNTExODUsNTExODYsNTExODcsNTExODgsNTExODksNTExOTAsNTExOTEsNTExOTIsNTExOTMsNTEx''@;'; put 'put ''OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExOTUsNTExOTYsNTExOTcsNTExOTgsNTExOTksNTEyMDIsNTEyMDMsNTEyMDUsNTEyMDYsNTEyMDcsNTEyMDksNTEyMTEsNTEyMTIsNTEyMTMsNTEyMTQsNTEyMTUsNTEyMTgsNTEyMjAsNTEyMjMsNTEyMjQsNTEyMjUsNTEyMjYs''@;'; put 'put ''NTEyMjcsNTEyMzAsNTEyMzEsNTEyMzMsNTEyMzQsNTEyMzUsNTEyMzcsNTEyMzgsNTEyMzksNTEyNDAsNTEyNDEsNTEyNDIsNTEyNDMsNTEyNDYsNTEyNDgsNTEyNTAsNTEyNTEsNTEyNTIsNTEyNTMsNTEyNTQsNTEyNTUsNTEyNTcsNTEyNTgsNTEyNTksNTEyNjEsNTEyNjIsNTEyNjMsNTEy''@;'; put 'put ''NjUsNTEyNjYsNTEyNjcsNTEyNjgsNTEyNjksNTEyNzAsNTEyNzEsNTEyNzQsNTEyNzUsNTEyNzgsNTEyNzksNTEyODAsNTEyODEsNTEyODIsNTEyODMsNTEyODUsNTEyODYsNTEyODcsNTEyODgsNTEyODksNTEyOTAsNTEyOTEsNTEyOTIsNTEyOTMsNTEyOTQsNTEyOTUsNTEyOTYsNTEyOTcs''@;'; put 'put ''NTEyOTgsNTEyOTksNTEzMDAsNTEzMDEsNTEzMDIsNTEzMDMsNTEzMDQsNTEzMDUsNTEzMDYsNTEzMDcsNTEzMDgsNTEzMDksNTEzMTAsNTEzMTEsNTEzMTQsNTEzMTUsNTEzMTcsNTEzMTgsNTEzMTksNTEzMjEsNTEzMjMsNTEzMjQsNTEzMjUsNTEzMjYsNTEzMjcsNTEzMzAsNTEzMzIsNTEz''@;'; put 'put ''MzYsNTEzMzcsNTEzMzgsNTEzNDIsNTEzNDMsNTEzNDQsNTEzNDUsNTEzNDYsNTEzNDcsNTEzNDksNTEzNTAsNTEzNTEsNTEzNTIsNTEzNTMsNTEzNTQsNTEzNTUsNTEzNTYsNTEzNTgsNTEzNjAsNTEzNjIsNTEzNjMsNTEzNjQsNTEzNjUsNTEzNjYsNTEzNjcsNTEzNjksNTEzNzAsNTEzNzEs''@;'; put 'put ''NTEzNzIsNTEzNzMsNTEzNzQsNTEzNzUsNTEzNzYsNTEzNzcsNTEzNzgsNTEzNzksNTEzODAsNTEzODEsNTEzODIsNTEzODMsNTEzODQsNTEzODUsNTEzODYsNTEzODcsNTEzOTAsNTEzOTEsNTEzOTIsNTEzOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTEzOTQsNTEzOTUsNTEz''@;'; put 'put ''OTcsNTEzOTgsNTEzOTksNTE0MDEsNTE0MDIsNTE0MDMsNTE0MDUsNTE0MDYsNTE0MDcsNTE0MDgsNTE0MDksNTE0MTAsNTE0MTEsNTE0MTQsNTE0MTYsNTE0MTgsNTE0MTksNTE0MjAsNTE0MjEsNTE0MjIsNTE0MjMsNTE0MjYsNTE0MjcsNTE0MjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTE0MzAsNTE0MzEsNTE0MzIsNTE0MzMsNTE0MzQsNTE0MzUsNTE0MzYsNTE0MzcsNTE0MzgsNTE0MzksNTE0NDAsNTE0NDEsNTE0NDIsNTE0NDMsNTE0NDQsNTE0NDYsNTE0NDcsNTE0NDgsNTE0NDksNTE0NTAsNTE0NTEsNTE0NTQsNTE0NTUsNTE0NTcsNTE0NTgsNTE0NTksNTE0''@;'; put 'put ''NjMsNTE0NjQsNTE0NjUsNTE0NjYsNTE0NjcsNTE0NzAsMTIyODgsMTIyODksMTIyOTAsMTgzLDgyMjksODIzMCwxNjgsMTIyOTEsMTczLDgyMTMsODc0MSw2NTM0MCw4NzY0LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIz''@;'; put 'put ''MDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODgwMCw4ODA0LDg4MDUsODczNCw4NzU2LDE3Niw4MjQyLDgyNDMsODQ1MSw4NDkxLDY1NTA0LDY1NTA1LDY1NTA5LDk3OTQsOTc5Miw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDE2Nyw4MjUxLDk3MzQs''@;'; put 'put ''OTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODU5NCw4NTkyLDg1OTMsODU5NSw4NTk2LDEyMzA3LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2''@;'; put 'put ''LDg3NDUsODc0Myw4NzQ0LDY1NTA2LDUxNDcyLDUxNDc0LDUxNDc1LDUxNDc2LDUxNDc3LDUxNDc4LDUxNDc5LDUxNDgxLDUxNDgyLDUxNDgzLDUxNDg0LDUxNDg1LDUxNDg2LDUxNDg3LDUxNDg4LDUxNDg5LDUxNDkwLDUxNDkxLDUxNDkyLDUxNDkzLDUxNDk0LDUxNDk1LDUxNDk2LDUxNDk3''@;'; put 'put ''LDUxNDk4LDUxNDk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTAxLDUxNTAyLDUxNTAzLDUxNTA0LDUxNTA1LDUxNTA2LDUxNTA3LDUxNTA5LDUxNTEwLDUxNTExLDUxNTEyLDUxNTEzLDUxNTE0LDUxNTE1LDUxNTE2LDUxNTE3LDUxNTE4LDUxNTE5LDUxNTIwLDUxNTIxLDUx''@;'; put 'put ''NTIyLDUxNTIzLDUxNTI0LDUxNTI1LDUxNTI2LDUxNTI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTI4LDUxNTI5LDUxNTMwLDUxNTMxLDUxNTMyLDUxNTMzLDUxNTM0LDUxNTM1LDUxNTM4LDUxNTM5LDUxNTQxLDUxNTQyLDUxNTQzLDUxNTQ1LDUxNTQ2LDUxNTQ3LDUxNTQ4''@;'; put 'put ''LDUxNTQ5LDUxNTUwLDUxNTUxLDUxNTU0LDUxNTU2LDUxNTU3LDUxNTU4LDUxNTU5LDUxNTYwLDUxNTYxLDUxNTYyLDUxNTYzLDUxNTY1LDUxNTY2LDUxNTY3LDg2NTgsODY2MCw4NzA0LDg3MDcsMTgwLDY1Mzc0LDcxMSw3MjgsNzMzLDczMCw3MjksMTg0LDczMSwxNjEsMTkxLDcyMCw4NzUw''@;'; put 'put ''LDg3MjEsODcxOSwxNjQsODQ1Nyw4MjQwLDk2NjUsOTY2NCw5NjU1LDk2NTQsOTgyOCw5ODI0LDk4MjUsOTgyOSw5ODMxLDk4MjcsODg1Nyw5NjcyLDk2MzUsOTY4MCw5NjgxLDk2MTgsOTYzNiw5NjM3LDk2NDAsOTYzOSw5NjM4LDk2NDEsOTgzMiw5NzQzLDk3NDIsOTc1Niw5NzU4LDE4Miw4''@;'; put 'put ''MjI0LDgyMjUsODU5Nyw4NTk5LDg2MDEsODU5OCw4NjAwLDk4MzcsOTgzMyw5ODM0LDk4MzYsMTI5MjcsMTI4MjgsODQ3MCwxMzI1NSw4NDgyLDEzMjUwLDEzMjcyLDg0ODEsODM2NCwxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTY5LDUxNTcwLDUxNTcxLDUxNTczLDUxNTc0LDUxNTc1LDUxNTc2LDUxNTc3LDUxNTc4LDUxNTc5LDUxNTgxLDUxNTgyLDUxNTgzLDUxNTg0LDUxNTg1LDUxNTg2LDUxNTg3LDUxNTg4''@;'; put 'put ''LDUxNTg5LDUxNTkwLDUxNTkxLDUxNTk0LDUxNTk1LDUxNTk3LDUxNTk4LDUxNTk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjAxLDUxNjAyLDUxNjAzLDUxNjA0LDUxNjA1LDUxNjA2LDUxNjA3LDUxNjEwLDUxNjEyLDUxNjE0LDUxNjE1LDUxNjE2LDUxNjE3LDUxNjE4LDUx''@;'; put 'put ''NjE5LDUxNjIwLDUxNjIxLDUxNjIyLDUxNjIzLDUxNjI0LDUxNjI1LDUxNjI2LDUxNjI3LDUxNjI4LDUxNjI5LDUxNjMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjMxLDUxNjMyLDUxNjMzLDUxNjM0LDUxNjM1LDUxNjM2LDUxNjM3LDUxNjM4LDUxNjM5LDUxNjQwLDUxNjQx''@;'; put 'put ''LDUxNjQyLDUxNjQzLDUxNjQ0LDUxNjQ1LDUxNjQ2LDUxNjQ3LDUxNjUwLDUxNjUxLDUxNjUzLDUxNjU0LDUxNjU3LDUxNjU5LDUxNjYwLDUxNjYxLDUxNjYyLDUxNjYzLDUxNjY2LDUxNjY4LDUxNjcxLDUxNjcyLDUxNjc1LDY1MjgxLDY1MjgyLDY1MjgzLDY1Mjg0LDY1Mjg1LDY1Mjg2LDY1''@;'; put 'put ''Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0''@;'; put 'put ''LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1NTEwLDY1MzQxLDY1''@;'; put 'put ''MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5''@;'; put 'put ''LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDUxNjc4LDUxNjc5LDUxNjgxLDUxNjgzLDUxNjg1LDUxNjg2LDUxNjg4LDUxNjg5LDUxNjkwLDUxNjkxLDUxNjk0LDUxNjk4LDUxNjk5LDUxNzAwLDUxNzAxLDUxNzAyLDUxNzAzLDUxNzA2LDUxNzA3LDUxNzA5LDUxNzEwLDUxNzExLDUx''@;'; put 'put ''NzEzLDUxNzE0LDUxNzE1LDUxNzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzE3LDUxNzE4LDUxNzE5LDUxNzIyLDUxNzI2LDUxNzI3LDUxNzI4LDUxNzI5LDUxNzMwLDUxNzMxLDUxNzMzLDUxNzM0LDUxNzM1LDUxNzM3LDUxNzM4LDUxNzM5LDUxNzQwLDUxNzQxLDUxNzQy''@;'; put 'put ''LDUxNzQzLDUxNzQ0LDUxNzQ1LDUxNzQ2LDUxNzQ3LDUxNzQ4LDUxNzQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzUwLDUxNzUxLDUxNzUyLDUxNzU0LDUxNzU1LDUxNzU2LDUxNzU3LDUxNzU4LDUxNzU5LDUxNzYwLDUxNzYxLDUxNzYyLDUxNzYzLDUxNzY0LDUxNzY1LDUx''@;'; put 'put ''NzY2LDUxNzY3LDUxNzY4LDUxNzY5LDUxNzcwLDUxNzcxLDUxNzcyLDUxNzczLDUxNzc0LDUxNzc1LDUxNzc2LDUxNzc3LDUxNzc4LDUxNzc5LDUxNzgwLDUxNzgxLDUxNzgyLDEyNTkzLDEyNTk0LDEyNTk1LDEyNTk2LDEyNTk3LDEyNTk4LDEyNTk5LDEyNjAwLDEyNjAxLDEyNjAyLDEyNjAz''@;'; put 'put ''LDEyNjA0LDEyNjA1LDEyNjA2LDEyNjA3LDEyNjA4LDEyNjA5LDEyNjEwLDEyNjExLDEyNjEyLDEyNjEzLDEyNjE0LDEyNjE1LDEyNjE2LDEyNjE3LDEyNjE4LDEyNjE5LDEyNjIwLDEyNjIxLDEyNjIyLDEyNjIzLDEyNjI0LDEyNjI1LDEyNjI2LDEyNjI3LDEyNjI4LDEyNjI5LDEyNjMwLDEy''@;'; put 'put ''NjMxLDEyNjMyLDEyNjMzLDEyNjM0LDEyNjM1LDEyNjM2LDEyNjM3LDEyNjM4LDEyNjM5LDEyNjQwLDEyNjQxLDEyNjQyLDEyNjQzLDEyNjQ0LDEyNjQ1LDEyNjQ2LDEyNjQ3LDEyNjQ4LDEyNjQ5LDEyNjUwLDEyNjUxLDEyNjUyLDEyNjUzLDEyNjU0LDEyNjU1LDEyNjU2LDEyNjU3LDEyNjU4''@;'; put 'put ''LDEyNjU5LDEyNjYwLDEyNjYxLDEyNjYyLDEyNjYzLDEyNjY0LDEyNjY1LDEyNjY2LDEyNjY3LDEyNjY4LDEyNjY5LDEyNjcwLDEyNjcxLDEyNjcyLDEyNjczLDEyNjc0LDEyNjc1LDEyNjc2LDEyNjc3LDEyNjc4LDEyNjc5LDEyNjgwLDEyNjgxLDEyNjgyLDEyNjgzLDEyNjg0LDEyNjg1LDEy''@;'; put 'put ''Njg2LDUxNzgzLDUxNzg0LDUxNzg1LDUxNzg2LDUxNzg3LDUxNzkwLDUxNzkxLDUxNzkzLDUxNzk0LDUxNzk1LDUxNzk3LDUxNzk4LDUxNzk5LDUxODAwLDUxODAxLDUxODAyLDUxODAzLDUxODA2LDUxODEwLDUxODExLDUxODEyLDUxODEzLDUxODE0LDUxODE1LDUxODE3LDUxODE4LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODE5LDUxODIwLDUxODIxLDUxODIyLDUxODIzLDUxODI0LDUxODI1LDUxODI2LDUxODI3LDUxODI4LDUxODI5LDUxODMwLDUxODMxLDUxODMyLDUxODMzLDUxODM0LDUxODM1LDUxODM2LDUxODM4LDUxODM5LDUxODQwLDUxODQxLDUxODQyLDUx''@;'; put 'put ''ODQzLDUxODQ1LDUxODQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODQ3LDUxODQ4LDUxODQ5LDUxODUwLDUxODUxLDUxODUyLDUxODUzLDUxODU0LDUxODU1LDUxODU2LDUxODU3LDUxODU4LDUxODU5LDUxODYwLDUxODYxLDUxODYyLDUxODYzLDUxODY1LDUxODY2LDUxODY3''@;'; put 'put ''LDUxODY4LDUxODY5LDUxODcwLDUxODcxLDUxODcyLDUxODczLDUxODc0LDUxODc1LDUxODc2LDUxODc3LDUxODc4LDUxODc5LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NDQsODU0NSw4NTQ2LDg1''@;'; put 'put ''NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTE4ODAsNTE4ODEsNTE4ODIsNTE4ODMsNTE4ODQsNTE4ODUsNTE4ODYsNTE4ODcsNTE4ODgsNTE4ODksNTE4OTAsNTE4OTEsNTE4OTIsNTE4OTMsNTE4OTQsNTE4OTUsNTE4OTYsNTE4OTcsNTE4OTgsNTE4OTksNTE5MDIsNTE5MDMsNTE5MDUsNTE5MDYsNTE5MDcsNTE5MDksbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNTE5MTAsNTE5MTEsNTE5MTIsNTE5MTMsNTE5MTQsNTE5MTUsNTE5MTgsNTE5MjAsNTE5MjIsNTE5MjQsNTE5MjUsNTE5MjYsNTE5MjcsNTE5MzAsNTE5MzEsNTE5MzIsNTE5MzMsNTE5MzQsNTE5MzUsNTE5MzcsNTE5MzgsNTE5MzksNTE5NDAsNTE5NDEs''@;'; put 'put ''NTE5NDIsNTE5NDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NDQsNTE5NDUsNTE5NDYsNTE5NDcsNTE5NDksNTE5NTAsNTE5NTEsNTE5NTIsNTE5NTMsNTE5NTQsNTE5NTUsNTE5NTcsNTE5NTgsNTE5NTksNTE5NjAsNTE5NjEsNTE5NjIsNTE5NjMsNTE5NjQsNTE5NjUsNTE5''@;'; put 'put ''NjYsNTE5NjcsNTE5NjgsNTE5NjksNTE5NzAsNTE5NzEsNTE5NzIsNTE5NzMsNTE5NzQsNTE5NzUsNTE5NzcsNTE5NzgsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5''@;'; put 'put ''NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LDk0OTAsOTQ4OSw5NDk4LDk0OTcsOTQ5NCw5NDkzLDk0ODYsOTQ4NSw5NTAyLDk1MDMsOTUwNSw5NTA2LDk1MTAsOTUxMSw5NTEzLDk1MTQsOTUxNyw5NTE4LDk1MjEsOTUyMiw5''@;'; put 'put ''NTI1LDk1MjYsOTUyOSw5NTMwLDk1MzMsOTUzNCw5NTM2LDk1MzcsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk3OSw1MTk4MCw1MTk4MSw1MTk4Miw1MTk4Myw1MTk4NSw1MTk4Niw1MTk4Nyw1MTk4OSw1MTk5MCw1MTk5MSw1MTk5Myw1MTk5NCw1MTk5NSw1MTk5Niw1MTk5Nyw1MTk5OCw1MTk5OSw1MjAwMiw1MjAwMyw1''@;'; put 'put ''MjAwNCw1MjAwNSw1MjAwNiw1MjAwNyw1MjAwOCw1MjAwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAxMCw1MjAxMSw1MjAxMiw1MjAxMyw1MjAxNCw1MjAxNSw1MjAxNiw1MjAxNyw1MjAxOCw1MjAxOSw1MjAyMCw1MjAyMSw1MjAyMiw1MjAyMyw1MjAyNCw1MjAyNSw1MjAy''@;'; put 'put ''Niw1MjAyNyw1MjAyOCw1MjAyOSw1MjAzMCw1MjAzMSw1MjAzMiw1MjAzNCw1MjAzNSw1MjAzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAzNyw1MjAzOCw1MjAzOSw1MjA0Miw1MjA0Myw1MjA0NSw1MjA0Niw1MjA0Nyw1MjA0OSw1MjA1MCw1MjA1MSw1MjA1Miw1MjA1Myw1''@;'; put 'put ''MjA1NCw1MjA1NSw1MjA1OCw1MjA1OSw1MjA2MCw1MjA2Miw1MjA2Myw1MjA2NCw1MjA2NSw1MjA2Niw1MjA2Nyw1MjA2OSw1MjA3MCw1MjA3MSw1MjA3Miw1MjA3Myw1MjA3NCw1MjA3NSw1MjA3NiwxMzIwNSwxMzIwNiwxMzIwNyw4NDY3LDEzMjA4LDEzMjUyLDEzMjE5LDEzMjIwLDEzMjIx''@;'; put 'put ''LDEzMjIyLDEzMjA5LDEzMjEwLDEzMjExLDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE1LDEzMjE2LDEzMjE3LDEzMjE4LDEzMjU4LDEzMTk3LDEzMTk4LDEzMTk5LDEzMjYzLDEzMTkyLDEzMTkzLDEzMjU2LDEzMjIzLDEzMjI0LDEzMjMyLDEzMjMzLDEzMjM0LDEzMjM1LDEzMjM2LDEzMjM3LDEz''@;'; put 'put ''MjM4LDEzMjM5LDEzMjQwLDEzMjQxLDEzMTg0LDEzMTg1LDEzMTg2LDEzMTg3LDEzMTg4LDEzMjQyLDEzMjQzLDEzMjQ0LDEzMjQ1LDEzMjQ2LDEzMjQ3LDEzMjAwLDEzMjAxLDEzMjAyLDEzMjAzLDEzMjA0LDg0ODYsMTMyNDgsMTMyNDksMTMxOTQsMTMxOTUsMTMxOTYsMTMyNzAsMTMyNTMs''@;'; put 'put ''MTMyMjksMTMyMzAsMTMyMzEsMTMyNzUsMTMyMjUsMTMyMjYsMTMyMjcsMTMyMjgsMTMyNzcsMTMyNjQsMTMyNjcsMTMyNTEsMTMyNTcsMTMyNzYsMTMyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTIwNzcsNTIwNzgsNTIwNzksNTIwODAsNTIwODEsNTIwODIsNTIwODMsNTIwODQsNTIwODUsNTIwODYsNTIwODcsNTIwOTAsNTIwOTEsNTIwOTIsNTIwOTMsNTIwOTQsNTIwOTUsNTIwOTYsNTIwOTcsNTIwOTgsNTIwOTksNTIxMDAsNTIxMDEsNTIxMDIsNTIxMDMsNTIxMDQsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNTIxMDUsNTIxMDYsNTIxMDcsNTIxMDgsNTIxMDksNTIxMTAsNTIxMTEsNTIxMTIsNTIxMTMsNTIxMTQsNTIxMTUsNTIxMTYsNTIxMTcsNTIxMTgsNTIxMTksNTIxMjAsNTIxMjEsNTIxMjIsNTIxMjMsNTIxMjUsNTIxMjYsNTIxMjcsNTIxMjgsNTIxMjks''@;'; put 'put ''NTIxMzAsNTIxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMzIsNTIxMzMsNTIxMzQsNTIxMzUsNTIxMzYsNTIxMzcsNTIxMzgsNTIxMzksNTIxNDAsNTIxNDEsNTIxNDIsNTIxNDMsNTIxNDQsNTIxNDUsNTIxNDYsNTIxNDcsNTIxNDgsNTIxNDksNTIxNTAsNTIxNTEsNTIx''@;'; put 'put ''NTMsNTIxNTQsNTIxNTUsNTIxNTYsNTIxNTcsNTIxNTgsNTIxNTksNTIxNjAsNTIxNjEsNTIxNjIsNTIxNjMsNTIxNjQsMTk4LDIwOCwxNzAsMjk0LG51bGwsMzA2LG51bGwsMzE5LDMyMSwyMTYsMzM4LDE4NiwyMjIsMzU4LDMzMCxudWxsLDEyODk2LDEyODk3LDEyODk4LDEyODk5LDEyOTAw''@;'; put 'put ''LDEyOTAxLDEyOTAyLDEyOTAzLDEyOTA0LDEyOTA1LDEyOTA2LDEyOTA3LDEyOTA4LDEyOTA5LDEyOTEwLDEyOTExLDEyOTEyLDEyOTEzLDEyOTE0LDEyOTE1LDEyOTE2LDEyOTE3LDEyOTE4LDEyOTE5LDEyOTIwLDEyOTIxLDEyOTIyLDEyOTIzLDk0MjQsOTQyNSw5NDI2LDk0MjcsOTQyOCw5''@;'; put 'put ''NDI5LDk0MzAsOTQzMSw5NDMyLDk0MzMsOTQzNCw5NDM1LDk0MzYsOTQzNyw5NDM4LDk0MzksOTQ0MCw5NDQxLDk0NDIsOTQ0Myw5NDQ0LDk0NDUsOTQ0Niw5NDQ3LDk0NDgsOTQ0OSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5''@;'; put 'put ''MzI0LDkzMjUsOTMyNiwxODksODUzMSw4NTMyLDE4OCwxOTAsODUzOSw4NTQwLDg1NDEsODU0Miw1MjE2NSw1MjE2Niw1MjE2Nyw1MjE2OCw1MjE2OSw1MjE3MCw1MjE3MSw1MjE3Miw1MjE3Myw1MjE3NCw1MjE3NSw1MjE3Niw1MjE3Nyw1MjE3OCw1MjE3OSw1MjE4MSw1MjE4Miw1MjE4Myw1''@;'; put 'put ''MjE4NCw1MjE4NSw1MjE4Niw1MjE4Nyw1MjE4OCw1MjE4OSw1MjE5MCw1MjE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjE5Miw1MjE5Myw1MjE5NCw1MjE5NSw1MjE5Nyw1MjE5OCw1MjIwMCw1MjIwMiw1MjIwMyw1MjIwNCw1MjIwNSw1MjIwNiw1MjIwNyw1MjIwOCw1MjIw''@;'; put 'put ''OSw1MjIxMCw1MjIxMSw1MjIxMiw1MjIxMyw1MjIxNCw1MjIxNSw1MjIxNiw1MjIxNyw1MjIxOCw1MjIxOSw1MjIyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjIyMSw1MjIyMiw1MjIyMyw1MjIyNCw1MjIyNSw1MjIyNiw1MjIyNyw1MjIyOCw1MjIyOSw1MjIzMCw1MjIzMSw1''@;'; put 'put ''MjIzMiw1MjIzMyw1MjIzNCw1MjIzNSw1MjIzOCw1MjIzOSw1MjI0MSw1MjI0Miw1MjI0Myw1MjI0NSw1MjI0Niw1MjI0Nyw1MjI0OCw1MjI0OSw1MjI1MCw1MjI1MSw1MjI1NCw1MjI1NSw1MjI1Niw1MjI1OSw1MjI2MCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIwLDMyMiwyNDgs''@;'; put 'put ''MzM5LDIyMywyNTQsMzU5LDMzMSwzMjksMTI4MDAsMTI4MDEsMTI4MDIsMTI4MDMsMTI4MDQsMTI4MDUsMTI4MDYsMTI4MDcsMTI4MDgsMTI4MDksMTI4MTAsMTI4MTEsMTI4MTIsMTI4MTMsMTI4MTQsMTI4MTUsMTI4MTYsMTI4MTcsMTI4MTgsMTI4MTksMTI4MjAsMTI4MjEsMTI4MjIsMTI4''@;'; put 'put ''MjMsMTI4MjQsMTI4MjUsMTI4MjYsMTI4MjcsOTM3Miw5MzczLDkzNzQsOTM3NSw5Mzc2LDkzNzcsOTM3OCw5Mzc5LDkzODAsOTM4MSw5MzgyLDkzODMsOTM4NCw5Mzg1LDkzODYsOTM4Nyw5Mzg4LDkzODksOTM5MCw5MzkxLDkzOTIsOTM5Myw5Mzk0LDkzOTUsOTM5Niw5Mzk3LDkzMzIsOTMz''@;'; put 'put ''Myw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDE4NSwxNzgsMTc5LDgzMDgsODMxOSw4MzIxLDgzMjIsODMyMyw4MzI0LDUyMjYxLDUyMjYyLDUyMjY2LDUyMjY3LDUyMjY5LDUyMjcxLDUyMjczLDUyMjc0LDUyMjc1LDUy''@;'; put 'put ''Mjc2LDUyMjc3LDUyMjc4LDUyMjc5LDUyMjgyLDUyMjg3LDUyMjg4LDUyMjg5LDUyMjkwLDUyMjkxLDUyMjk0LDUyMjk1LDUyMjk3LDUyMjk4LDUyMjk5LDUyMzAxLDUyMzAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzAzLDUyMzA0LDUyMzA1LDUyMzA2LDUyMzA3LDUyMzEw''@;'; put 'put ''LDUyMzE0LDUyMzE1LDUyMzE2LDUyMzE3LDUyMzE4LDUyMzE5LDUyMzIxLDUyMzIyLDUyMzIzLDUyMzI1LDUyMzI3LDUyMzI5LDUyMzMwLDUyMzMxLDUyMzMyLDUyMzMzLDUyMzM0LDUyMzM1LDUyMzM3LDUyMzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzM5LDUyMzQwLDUy''@;'; put 'put ''MzQyLDUyMzQzLDUyMzQ0LDUyMzQ1LDUyMzQ2LDUyMzQ3LDUyMzQ4LDUyMzQ5LDUyMzUwLDUyMzUxLDUyMzUyLDUyMzUzLDUyMzU0LDUyMzU1LDUyMzU2LDUyMzU3LDUyMzU4LDUyMzU5LDUyMzYwLDUyMzYxLDUyMzYyLDUyMzYzLDUyMzY0LDUyMzY1LDUyMzY2LDUyMzY3LDUyMzY4LDUyMzY5''@;'; put 'put ''LDUyMzcwLDUyMzcxLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEy''@;'; put 'put ''Mzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1''@;'; put 'put ''LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEy''@;'; put 'put ''NDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjM3Miw1MjM3Myw1MjM3NCw1MjM3NSw1MjM3OCw1MjM3OSw1MjM4MSw1MjM4Miw1MjM4Myw1MjM4NSw1MjM4Niw1MjM4Nyw1MjM4OCw1MjM4OSw1MjM5MCw1MjM5''@;'; put 'put ''MSw1MjM5NCw1MjM5OCw1MjM5OSw1MjQwMCw1MjQwMSw1MjQwMiw1MjQwMyw1MjQwNiw1MjQwNyw1MjQwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQxMCw1MjQxMSw1MjQxMyw1MjQxNCw1MjQxNSw1MjQxNiw1MjQxNyw1MjQxOCw1MjQxOSw1MjQyMiw1MjQyNCw1MjQyNiw1''@;'; put 'put ''MjQyNyw1MjQyOCw1MjQyOSw1MjQzMCw1MjQzMSw1MjQzMyw1MjQzNCw1MjQzNSw1MjQzNyw1MjQzOCw1MjQzOSw1MjQ0MCw1MjQ0MSw1MjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ0Myw1MjQ0NCw1MjQ0NSw1MjQ0Niw1MjQ0Nyw1MjQ0OCw1MjQ0OSw1MjQ1MCw1MjQ1''@;'; put 'put ''MSw1MjQ1Myw1MjQ1NCw1MjQ1NSw1MjQ1Niw1MjQ1Nyw1MjQ1OCw1MjQ1OSw1MjQ2MSw1MjQ2Miw1MjQ2Myw1MjQ2NSw1MjQ2Niw1MjQ2Nyw1MjQ2OCw1MjQ2OSw1MjQ3MCw1MjQ3MSw1MjQ3Miw1MjQ3Myw1MjQ3NCw1MjQ3NSw1MjQ3Niw1MjQ3NywxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1Miwx''@;'; put 'put ''MjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4''@;'; put 'put ''MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywx''@;'; put 'put ''MjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NzgsNTI0NzksNTI0ODAsNTI0ODIsNTI0ODMsNTI0ODQsNTI0ODUsNTI0ODYsNTI0ODcsNTI0OTAsNTI0OTEsNTI0OTMsNTI0OTQsNTI0OTUsNTI0OTcsNTI0OTgsNTI0OTksNTI1MDAsNTI1MDEsNTI1MDIsNTI1MDMsNTI1''@;'; put 'put ''MDYsNTI1MDgsNTI1MTAsNTI1MTEsNTI1MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1MTMsNTI1MTQsNTI1MTUsNTI1MTcsNTI1MTgsNTI1MTksNTI1MjEsNTI1MjIsNTI1MjMsNTI1MjUsNTI1MjYsNTI1MjcsNTI1MjgsNTI1MjksNTI1MzAsNTI1MzEsNTI1MzIsNTI1MzMs''@;'; put 'put ''NTI1MzQsNTI1MzUsNTI1MzYsNTI1MzgsNTI1MzksNTI1NDAsNTI1NDEsNTI1NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NDMsNTI1NDQsNTI1NDUsNTI1NDYsNTI1NDcsNTI1NDgsNTI1NDksNTI1NTAsNTI1NTEsNTI1NTIsNTI1NTMsNTI1NTQsNTI1NTUsNTI1NTYsNTI1''@;'; put 'put ''NTcsNTI1NTgsNTI1NTksNTI1NjAsNTI1NjEsNTI1NjIsNTI1NjMsNTI1NjQsNTI1NjUsNTI1NjYsNTI1NjcsNTI1NjgsNTI1NjksNTI1NzAsNTI1NzEsNTI1NzMsNTI1NzQsNTI1NzUsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAs''@;'; put 'put ''MTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAs''@;'; put 'put ''MTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU3Nyw1MjU3OCw1MjU3OSw1MjU4MSw1MjU4Miw1MjU4Myw1MjU4NCw1MjU4NSw1MjU4Niw1MjU4Nyw1MjU5MCw1MjU5Miw1MjU5NCw1MjU5NSw1''@;'; put 'put ''MjU5Niw1MjU5Nyw1MjU5OCw1MjU5OSw1MjYwMSw1MjYwMiw1MjYwMyw1MjYwNCw1MjYwNSw1MjYwNiw1MjYwNyw1MjYwOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjYwOSw1MjYxMCw1MjYxMSw1MjYxMiw1MjYxMyw1MjYxNCw1MjYxNSw1MjYxNyw1MjYxOCw1MjYxOSw1MjYy''@;'; put 'put ''MCw1MjYyMSw1MjYyMiw1MjYyMyw1MjYyNCw1MjYyNSw1MjYyNiw1MjYyNyw1MjYzMCw1MjYzMSw1MjYzMyw1MjYzNCw1MjYzNSw1MjYzNyw1MjYzOCw1MjYzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY0MCw1MjY0MSw1MjY0Miw1MjY0Myw1MjY0Niw1MjY0OCw1MjY1MCw1''@;'; put 'put ''MjY1MSw1MjY1Miw1MjY1Myw1MjY1NCw1MjY1NSw1MjY1Nyw1MjY1OCw1MjY1OSw1MjY2MCw1MjY2MSw1MjY2Miw1MjY2Myw1MjY2NCw1MjY2NSw1MjY2Niw1MjY2Nyw1MjY2OCw1MjY2OSw1MjY3MCw1MjY3MSw1MjY3Miw1MjY3Myw1MjY3NCw1MjY3NSw1MjY3NyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjc4LDUyNjc5LDUyNjgwLDUyNjgxLDUyNjgyLDUyNjgzLDUyNjg1''@;'; put 'put ''LDUyNjg2LDUyNjg3LDUyNjg5LDUyNjkwLDUyNjkxLDUyNjkyLDUyNjkzLDUyNjk0LDUyNjk1LDUyNjk2LDUyNjk3LDUyNjk4LDUyNjk5LDUyNzAwLDUyNzAxLDUyNzAyLDUyNzAzLDUyNzA0LDUyNzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzA2LDUyNzA3LDUyNzA4LDUy''@;'; put 'put ''NzA5LDUyNzEwLDUyNzExLDUyNzEzLDUyNzE0LDUyNzE1LDUyNzE3LDUyNzE4LDUyNzE5LDUyNzIxLDUyNzIyLDUyNzIzLDUyNzI0LDUyNzI1LDUyNzI2LDUyNzI3LDUyNzMwLDUyNzMyLDUyNzM0LDUyNzM1LDUyNzM2LDUyNzM3LDUyNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDUyNzM5LDUyNzQxLDUyNzQyLDUyNzQzLDUyNzQ1LDUyNzQ2LDUyNzQ3LDUyNzQ5LDUyNzUwLDUyNzUxLDUyNzUyLDUyNzUzLDUyNzU0LDUyNzU1LDUyNzU3LDUyNzU4LDUyNzU5LDUyNzYwLDUyNzYyLDUyNzYzLDUyNzY0LDUyNzY1LDUyNzY2LDUyNzY3LDUyNzcwLDUyNzcxLDUyNzczLDUy''@;'; put 'put ''Nzc0LDUyNzc1LDUyNzc3LDUyNzc4LDUyNzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNTI3ODAsNTI3ODEsNTI3ODIsNTI3ODMsNTI3ODYsNTI3ODgsNTI3OTAsNTI3OTEsNTI3OTIsNTI3OTMsNTI3OTQsNTI3OTUsNTI3OTYsNTI3OTcsNTI3OTgsNTI3OTksNTI4MDAsNTI4MDEsNTI4MDIsNTI4MDMsNTI4MDQsNTI4MDUsNTI4MDYsNTI4MDcsNTI4MDgsNTI4MDksbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4MTAsNTI4MTEsNTI4MTIsNTI4MTMsNTI4MTQsNTI4MTUsNTI4MTYsNTI4MTcsNTI4MTgsNTI4MTksNTI4MjAsNTI4MjEsNTI4MjIsNTI4MjMsNTI4MjYsNTI4MjcsNTI4MjksNTI4MzAsNTI4MzQsNTI4MzUsNTI4MzYsNTI4MzcsNTI4MzgsNTI4''@;'; put 'put ''MzksNTI4NDIsNTI4NDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4NDYsNTI4NDcsNTI4NDgsNTI4NDksNTI4NTAsNTI4NTEsNTI4NTQsNTI4NTUsNTI4NTcsNTI4NTgsNTI4NTksNTI4NjEsNTI4NjIsNTI4NjMsNTI4NjQsNTI4NjUsNTI4NjYsNTI4NjcsNTI4NzAsNTI4NzIs''@;'; put 'put ''NTI4NzQsNTI4NzUsNTI4NzYsNTI4NzcsNTI4NzgsNTI4NzksNTI4ODIsNTI4ODMsNTI4ODUsNTI4ODYsNTI4ODcsNTI4ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg5MCw1Mjg5MSw1Mjg5Miw1Mjg5Myw1Mjg5NCw1Mjg5NSw1Mjg5OCw1MjkwMiw1MjkwMyw1MjkwNCw1MjkwNSw1MjkwNiw1MjkwNyw1MjkxMCw1MjkxMSw1MjkxMiw1MjkxMyw1MjkxNCw1MjkxNSw1Mjkx''@;'; put 'put ''Niw1MjkxNyw1MjkxOCw1MjkxOSw1MjkyMCw1MjkyMSw1MjkyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjkyMyw1MjkyNCw1MjkyNSw1MjkyNiw1MjkyNyw1MjkyOCw1MjkzMCw1MjkzMSw1MjkzMiw1MjkzMyw1MjkzNCw1MjkzNSw1MjkzNiw1MjkzNyw1MjkzOCw1MjkzOSw1''@;'; put 'put ''Mjk0MCw1Mjk0MSw1Mjk0Miw1Mjk0Myw1Mjk0NCw1Mjk0NSw1Mjk0Niw1Mjk0Nyw1Mjk0OCw1Mjk0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjk1MCw1Mjk1MSw1Mjk1Miw1Mjk1Myw1Mjk1NCw1Mjk1NSw1Mjk1Niw1Mjk1Nyw1Mjk1OCw1Mjk1OSw1Mjk2MCw1Mjk2MSw1Mjk2''@;'; put 'put ''Miw1Mjk2Myw1Mjk2Niw1Mjk2Nyw1Mjk2OSw1Mjk3MCw1Mjk3Myw1Mjk3NCw1Mjk3NSw1Mjk3Niw1Mjk3Nyw1Mjk3OCw1Mjk3OSw1Mjk4Miw1Mjk4Niw1Mjk4Nyw1Mjk4OCw1Mjk4OSw1Mjk5MCw1Mjk5MSw0NDAzMiw0NDAzMyw0NDAzNiw0NDAzOSw0NDA0MCw0NDA0MSw0NDA0Miw0NDA0OCw0''@;'; put 'put ''NDA0OSw0NDA1MCw0NDA1MSw0NDA1Miw0NDA1Myw0NDA1NCw0NDA1NSw0NDA1Nyw0NDA1OCw0NDA1OSw0NDA2MCw0NDA2MSw0NDA2NCw0NDA2OCw0NDA3Niw0NDA3Nyw0NDA3OSw0NDA4MCw0NDA4MSw0NDA4OCw0NDA4OSw0NDA5Miw0NDA5Niw0NDEwNyw0NDEwOSw0NDExNiw0NDEyMCw0NDEy''@;'; put 'put ''NCw0NDE0NCw0NDE0NSw0NDE0OCw0NDE1MSw0NDE1Miw0NDE1NCw0NDE2MCw0NDE2MSw0NDE2Myw0NDE2NCw0NDE2NSw0NDE2Niw0NDE2OSw0NDE3MCw0NDE3MSw0NDE3Miw0NDE3Niw0NDE4MCw0NDE4OCw0NDE4OSw0NDE5MSw0NDE5Miw0NDE5Myw0NDIwMCw0NDIwMSw0NDIwMiw0NDIwNCw0''@;'; put 'put ''NDIwNyw0NDIwOCw0NDIxNiw0NDIxNyw0NDIxOSw0NDIyMCw0NDIyMSw0NDIyNSw0NDIyOCw0NDIzMiw0NDIzNiw0NDI0NSw0NDI0Nyw0NDI1Niw0NDI1Nyw0NDI2MCw0NDI2Myw0NDI2NCw0NDI2Niw0NDI2OCw0NDI3MSw0NDI3Miw0NDI3Myw0NDI3NSw0NDI3Nyw0NDI3OCw0NDI4NCw0NDI4''@;'; put 'put ''NSw0NDI4OCw0NDI5Miw0NDI5NCw1Mjk5NCw1Mjk5NSw1Mjk5Nyw1Mjk5OCw1Mjk5OSw1MzAwMSw1MzAwMiw1MzAwMyw1MzAwNCw1MzAwNSw1MzAwNiw1MzAwNyw1MzAxMCw1MzAxMiw1MzAxNCw1MzAxNSw1MzAxNiw1MzAxNyw1MzAxOCw1MzAxOSw1MzAyMSw1MzAyMiw1MzAyMyw1MzAyNSw1''@;'; put 'put ''MzAyNiw1MzAyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzAyOSw1MzAzMCw1MzAzMSw1MzAzMiw1MzAzMyw1MzAzNCw1MzAzNSw1MzAzOCw1MzA0Miw1MzA0Myw1MzA0NCw1MzA0NSw1MzA0Niw1MzA0Nyw1MzA0OSw1MzA1MCw1MzA1MSw1MzA1Miw1MzA1Myw1MzA1NCw1MzA1''@;'; put 'put ''NSw1MzA1Niw1MzA1Nyw1MzA1OCw1MzA1OSw1MzA2MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzA2MSw1MzA2Miw1MzA2Myw1MzA2NCw1MzA2NSw1MzA2Niw1MzA2Nyw1MzA2OCw1MzA2OSw1MzA3MCw1MzA3MSw1MzA3Miw1MzA3Myw1MzA3NCw1MzA3NSw1MzA3OCw1MzA3OSw1''@;'; put 'put ''MzA4MSw1MzA4Miw1MzA4Myw1MzA4NSw1MzA4Niw1MzA4Nyw1MzA4OCw1MzA4OSw1MzA5MCw1MzA5MSw1MzA5NCw1MzA5Niw1MzA5OCw1MzA5OSw1MzEwMCw0NDMwMCw0NDMwMSw0NDMwMyw0NDMwNSw0NDMxMiw0NDMxNiw0NDMyMCw0NDMyOSw0NDMzMiw0NDMzMyw0NDM0MCw0NDM0MSw0NDM0''@;'; put 'put ''NCw0NDM0OCw0NDM1Niw0NDM1Nyw0NDM1OSw0NDM2MSw0NDM2OCw0NDM3Miw0NDM3Niw0NDM4NSw0NDM4Nyw0NDM5Niw0NDM5Nyw0NDQwMCw0NDQwMyw0NDQwNCw0NDQwNSw0NDQwNiw0NDQxMSw0NDQxMiw0NDQxMyw0NDQxNSw0NDQxNyw0NDQxOCw0NDQyNCw0NDQyNSw0NDQyOCw0NDQzMiw0''@;'; put 'put ''NDQ0NCw0NDQ0NSw0NDQ1Miw0NDQ3MSw0NDQ4MCw0NDQ4MSw0NDQ4NCw0NDQ4OCw0NDQ5Niw0NDQ5Nyw0NDQ5OSw0NDUwOCw0NDUxMiw0NDUxNiw0NDUzNiw0NDUzNyw0NDU0MCw0NDU0Myw0NDU0NCw0NDU0NSw0NDU1Miw0NDU1Myw0NDU1NSw0NDU1Nyw0NDU2NCw0NDU5Miw0NDU5Myw0NDU5''@;'; put 'put ''Niw0NDU5OSw0NDYwMCw0NDYwMiw0NDYwOCw0NDYwOSw0NDYxMSw0NDYxMyw0NDYxNCw0NDYxOCw0NDYyMCw0NDYyMSw0NDYyMiw0NDYyNCw0NDYyOCw0NDYzMCw0NDYzNiw0NDYzNyw0NDYzOSw0NDY0MCw0NDY0MSw0NDY0NSw0NDY0OCw0NDY0OSw0NDY1Miw0NDY1Niw0NDY2NCw1MzEwMSw1''@;'; put 'put ''MzEwMiw1MzEwMyw1MzEwNiw1MzEwNyw1MzEwOSw1MzExMCw1MzExMSw1MzExMyw1MzExNCw1MzExNSw1MzExNiw1MzExNyw1MzExOCw1MzExOSw1MzEyMSw1MzEyMiw1MzEyMyw1MzEyNCw1MzEyNiw1MzEyNyw1MzEyOCw1MzEyOSw1MzEzMCw1MzEzMSw1MzEzMyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1MzEzNCw1MzEzNSw1MzEzNiw1MzEzNyw1MzEzOCw1MzEzOSw1MzE0MCw1MzE0MSw1MzE0Miw1MzE0Myw1MzE0NCw1MzE0NSw1MzE0Niw1MzE0Nyw1MzE0OCw1MzE0OSw1MzE1MCw1MzE1MSw1MzE1Miw1MzE1NCw1MzE1NSw1MzE1Niw1MzE1Nyw1MzE1OCw1MzE1OSw1''@;'; put 'put ''MzE2MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzE2Miw1MzE2Myw1MzE2NCw1MzE2NSw1MzE2Niw1MzE2Nyw1MzE2OSw1MzE3MCw1MzE3MSw1MzE3Miw1MzE3Myw1MzE3NCw1MzE3NSw1MzE3Niw1MzE3Nyw1MzE3OCw1MzE3OSw1MzE4MCw1MzE4MSw1MzE4Miw1MzE4Myw1MzE4''@;'; put 'put ''NCw1MzE4NSw1MzE4Niw1MzE4Nyw1MzE4OSw1MzE5MCw1MzE5MSw1MzE5Miw1MzE5Myw1MzE5NCw1MzE5NSw0NDY2NSw0NDY2Nyw0NDY2OCw0NDY2OSw0NDY3Niw0NDY3Nyw0NDY4NCw0NDczMiw0NDczMyw0NDczNCw0NDczNiw0NDc0MCw0NDc0OCw0NDc0OSw0NDc1MSw0NDc1Miw0NDc1Myw0''@;'; put 'put ''NDc2MCw0NDc2MSw0NDc2NCw0NDc3Niw0NDc3OSw0NDc4MSw0NDc4OCw0NDc5Miw0NDc5Niw0NDgwNyw0NDgwOCw0NDgxMyw0NDgxNiw0NDg0NCw0NDg0NSw0NDg0OCw0NDg1MCw0NDg1Miw0NDg2MCw0NDg2MSw0NDg2Myw0NDg2NSw0NDg2Niw0NDg2Nyw0NDg3Miw0NDg3Myw0NDg4MCw0NDg5''@;'; put 'put ''Miw0NDg5Myw0NDkwMCw0NDkwMSw0NDkyMSw0NDkyOCw0NDkzMiw0NDkzNiw0NDk0NCw0NDk0NSw0NDk0OSw0NDk1Niw0NDk4NCw0NDk4NSw0NDk4OCw0NDk5Miw0NDk5OSw0NWUzLDQ1MDAxLDQ1MDAzLDQ1MDA1LDQ1MDA2LDQ1MDEyLDQ1MDIwLDQ1MDMyLDQ1MDMzLDQ1MDQwLDQ1MDQxLDQ1''@;'; put 'put ''MDQ0LDQ1MDQ4LDQ1MDU2LDQ1MDU3LDQ1MDYwLDQ1MDY4LDQ1MDcyLDQ1MDc2LDQ1MDg0LDQ1MDg1LDQ1MDk2LDQ1MTI0LDQ1MTI1LDQ1MTI4LDQ1MTMwLDQ1MTMyLDQ1MTM0LDQ1MTM5LDQ1MTQwLDQ1MTQxLDQ1MTQzLDQ1MTQ1LDUzMTk2LDUzMTk3LDUzMTk4LDUzMTk5LDUzMjAwLDUzMjAx''@;'; put 'put ''LDUzMjAyLDUzMjAzLDUzMjA0LDUzMjA1LDUzMjA2LDUzMjA3LDUzMjA4LDUzMjA5LDUzMjEwLDUzMjExLDUzMjEyLDUzMjEzLDUzMjE0LDUzMjE1LDUzMjE4LDUzMjE5LDUzMjIxLDUzMjIyLDUzMjIzLDUzMjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMjI2LDUzMjI3LDUz''@;'; put 'put ''MjI4LDUzMjI5LDUzMjMwLDUzMjMxLDUzMjM0LDUzMjM2LDUzMjM4LDUzMjM5LDUzMjQwLDUzMjQxLDUzMjQyLDUzMjQzLDUzMjQ1LDUzMjQ2LDUzMjQ3LDUzMjQ5LDUzMjUwLDUzMjUxLDUzMjUzLDUzMjU0LDUzMjU1LDUzMjU2LDUzMjU3LDUzMjU4LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUzMjU5LDUzMjYwLDUzMjYxLDUzMjYyLDUzMjYzLDUzMjY0LDUzMjY2LDUzMjY3LDUzMjY4LDUzMjY5LDUzMjcwLDUzMjcxLDUzMjczLDUzMjc0LDUzMjc1LDUzMjc2LDUzMjc3LDUzMjc4LDUzMjc5LDUzMjgwLDUzMjgxLDUzMjgyLDUzMjgzLDUzMjg0LDUzMjg1LDUzMjg2LDUz''@;'; put 'put ''Mjg3LDUzMjg4LDUzMjg5LDUzMjkwLDUzMjkxLDUzMjkyLDQ1MTQ5LDQ1MTgwLDQ1MTgxLDQ1MTg0LDQ1MTg4LDQ1MTk2LDQ1MTk3LDQ1MTk5LDQ1MjAxLDQ1MjA4LDQ1MjA5LDQ1MjEwLDQ1MjEyLDQ1MjE1LDQ1MjE2LDQ1MjE3LDQ1MjE4LDQ1MjI0LDQ1MjI1LDQ1MjI3LDQ1MjI4LDQ1MjI5''@;'; put 'put ''LDQ1MjMwLDQ1MjMxLDQ1MjMzLDQ1MjM1LDQ1MjM2LDQ1MjM3LDQ1MjQwLDQ1MjQ0LDQ1MjUyLDQ1MjUzLDQ1MjU1LDQ1MjU2LDQ1MjU3LDQ1MjY0LDQ1MjY1LDQ1MjY4LDQ1MjcyLDQ1MjgwLDQ1Mjg1LDQ1MzIwLDQ1MzIxLDQ1MzIzLDQ1MzI0LDQ1MzI4LDQ1MzMwLDQ1MzMxLDQ1MzM2LDQ1''@;'; put 'put ''MzM3LDQ1MzM5LDQ1MzQwLDQ1MzQxLDQ1MzQ3LDQ1MzQ4LDQ1MzQ5LDQ1MzUyLDQ1MzU2LDQ1MzY0LDQ1MzY1LDQ1MzY3LDQ1MzY4LDQ1MzY5LDQ1Mzc2LDQ1Mzc3LDQ1MzgwLDQ1Mzg0LDQ1MzkyLDQ1MzkzLDQ1Mzk2LDQ1Mzk3LDQ1NDAwLDQ1NDA0LDQ1NDA4LDQ1NDMyLDQ1NDMzLDQ1NDM2''@;'; put 'put ''LDQ1NDQwLDQ1NDQyLDQ1NDQ4LDQ1NDQ5LDQ1NDUxLDQ1NDUzLDQ1NDU4LDQ1NDU5LDQ1NDYwLDQ1NDY0LDQ1NDY4LDQ1NDgwLDQ1NTE2LDQ1NTIwLDQ1NTI0LDQ1NTMyLDQ1NTMzLDUzMjk0LDUzMjk1LDUzMjk2LDUzMjk3LDUzMjk4LDUzMjk5LDUzMzAyLDUzMzAzLDUzMzA1LDUzMzA2LDUz''@;'; put 'put ''MzA3LDUzMzA5LDUzMzEwLDUzMzExLDUzMzEyLDUzMzEzLDUzMzE0LDUzMzE1LDUzMzE4LDUzMzIwLDUzMzIyLDUzMzIzLDUzMzI0LDUzMzI1LDUzMzI2LDUzMzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMzI5LDUzMzMwLDUzMzMxLDUzMzMzLDUzMzM0LDUzMzM1LDUzMzM3''@;'; put 'put ''LDUzMzM4LDUzMzM5LDUzMzQwLDUzMzQxLDUzMzQyLDUzMzQzLDUzMzQ1LDUzMzQ2LDUzMzQ3LDUzMzQ4LDUzMzQ5LDUzMzUwLDUzMzUxLDUzMzUyLDUzMzUzLDUzMzU0LDUzMzU1LDUzMzU4LDUzMzU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMzYxLDUzMzYyLDUzMzYzLDUz''@;'; put 'put ''MzY1LDUzMzY2LDUzMzY3LDUzMzY4LDUzMzY5LDUzMzcwLDUzMzcxLDUzMzc0LDUzMzc1LDUzMzc2LDUzMzc4LDUzMzc5LDUzMzgwLDUzMzgxLDUzMzgyLDUzMzgzLDUzMzg0LDUzMzg1LDUzMzg2LDUzMzg3LDUzMzg4LDUzMzg5LDUzMzkwLDUzMzkxLDUzMzkyLDUzMzkzLDUzMzk0LDUzMzk1''@;'; put 'put ''LDUzMzk2LDQ1NTM1LDQ1NTQ0LDQ1NTQ1LDQ1NTQ4LDQ1NTUyLDQ1NTYxLDQ1NTYzLDQ1NTY1LDQ1NTcyLDQ1NTczLDQ1NTc2LDQ1NTc5LDQ1NTgwLDQ1NTg4LDQ1NTg5LDQ1NTkxLDQ1NTkzLDQ1NjAwLDQ1NjIwLDQ1NjI4LDQ1NjU2LDQ1NjYwLDQ1NjY0LDQ1NjcyLDQ1NjczLDQ1Njg0LDQ1''@;'; put 'put ''Njg1LDQ1NjkyLDQ1NzAwLDQ1NzAxLDQ1NzA1LDQ1NzEyLDQ1NzEzLDQ1NzE2LDQ1NzIwLDQ1NzIxLDQ1NzIyLDQ1NzI4LDQ1NzI5LDQ1NzMxLDQ1NzMzLDQ1NzM0LDQ1NzM4LDQ1NzQwLDQ1NzQ0LDQ1NzQ4LDQ1NzY4LDQ1NzY5LDQ1NzcyLDQ1Nzc2LDQ1Nzc4LDQ1Nzg0LDQ1Nzg1LDQ1Nzg3''@;'; put 'put ''LDQ1Nzg5LDQ1Nzk0LDQ1Nzk2LDQ1Nzk3LDQ1Nzk4LDQ1ODAwLDQ1ODAzLDQ1ODA0LDQ1ODA1LDQ1ODA2LDQ1ODA3LDQ1ODExLDQ1ODEyLDQ1ODEzLDQ1ODE1LDQ1ODE2LDQ1ODE3LDQ1ODE4LDQ1ODE5LDQ1ODIzLDQ1ODI0LDQ1ODI1LDQ1ODI4LDQ1ODMyLDQ1ODQwLDQ1ODQxLDQ1ODQzLDQ1''@;'; put 'put ''ODQ0LDQ1ODQ1LDQ1ODUyLDQ1OTA4LDQ1OTA5LDQ1OTEwLDQ1OTEyLDQ1OTE1LDQ1OTE2LDQ1OTE4LDQ1OTE5LDQ1OTI0LDQ1OTI1LDUzMzk3LDUzMzk4LDUzMzk5LDUzNDAwLDUzNDAxLDUzNDAyLDUzNDAzLDUzNDA0LDUzNDA1LDUzNDA2LDUzNDA3LDUzNDA4LDUzNDA5LDUzNDEwLDUzNDEx''@;'; put 'put ''LDUzNDE0LDUzNDE1LDUzNDE3LDUzNDE4LDUzNDE5LDUzNDIxLDUzNDIyLDUzNDIzLDUzNDI0LDUzNDI1LDUzNDI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNDI3LDUzNDMwLDUzNDMyLDUzNDM0LDUzNDM1LDUzNDM2LDUzNDM3LDUzNDM4LDUzNDM5LDUzNDQyLDUzNDQzLDUz''@;'; put 'put ''NDQ1LDUzNDQ2LDUzNDQ3LDUzNDUwLDUzNDUxLDUzNDUyLDUzNDUzLDUzNDU0LDUzNDU1LDUzNDU4LDUzNDYyLDUzNDYzLDUzNDY0LDUzNDY1LDUzNDY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNDY3LDUzNDcwLDUzNDcxLDUzNDczLDUzNDc0LDUzNDc1LDUzNDc3LDUzNDc4''@;'; put 'put ''LDUzNDc5LDUzNDgwLDUzNDgxLDUzNDgyLDUzNDgzLDUzNDg2LDUzNDkwLDUzNDkxLDUzNDkyLDUzNDkzLDUzNDk0LDUzNDk1LDUzNDk3LDUzNDk4LDUzNDk5LDUzNTAwLDUzNTAxLDUzNTAyLDUzNTAzLDUzNTA0LDUzNTA1LDUzNTA2LDUzNTA3LDUzNTA4LDQ1OTI3LDQ1OTI5LDQ1OTMxLDQ1''@;'; put 'put ''OTM0LDQ1OTM2LDQ1OTM3LDQ1OTQwLDQ1OTQ0LDQ1OTUyLDQ1OTUzLDQ1OTU1LDQ1OTU2LDQ1OTU3LDQ1OTY0LDQ1OTY4LDQ1OTcyLDQ1OTg0LDQ1OTg1LDQ1OTkyLDQ1OTk2LDQ2MDIwLDQ2MDIxLDQ2MDI0LDQ2MDI3LDQ2MDI4LDQ2MDMwLDQ2MDMyLDQ2MDM2LDQ2MDM3LDQ2MDM5LDQ2MDQx''@;'; put 'put ''LDQ2MDQzLDQ2MDQ1LDQ2MDQ4LDQ2MDUyLDQ2MDU2LDQ2MDc2LDQ2MDk2LDQ2MTA0LDQ2MTA4LDQ2MTEyLDQ2MTIwLDQ2MTIxLDQ2MTIzLDQ2MTMyLDQ2MTYwLDQ2MTYxLDQ2MTY0LDQ2MTY4LDQ2MTc2LDQ2MTc3LDQ2MTc5LDQ2MTgxLDQ2MTg4LDQ2MjA4LDQ2MjE2LDQ2MjM3LDQ2MjQ0LDQ2''@;'; put 'put ''MjQ4LDQ2MjUyLDQ2MjYxLDQ2MjYzLDQ2MjY1LDQ2MjcyLDQ2Mjc2LDQ2MjgwLDQ2Mjg4LDQ2MjkzLDQ2MzAwLDQ2MzAxLDQ2MzA0LDQ2MzA3LDQ2MzA4LDQ2MzEwLDQ2MzE2LDQ2MzE3LDQ2MzE5LDQ2MzIxLDQ2MzI4LDQ2MzU2LDQ2MzU3LDQ2MzYwLDQ2MzYzLDQ2MzY0LDQ2MzcyLDQ2Mzcz''@;'; put 'put ''LDQ2Mzc1LDQ2Mzc2LDQ2Mzc3LDQ2Mzc4LDQ2Mzg0LDQ2Mzg1LDQ2Mzg4LDQ2MzkyLDUzNTA5LDUzNTEwLDUzNTExLDUzNTEyLDUzNTEzLDUzNTE0LDUzNTE1LDUzNTE2LDUzNTE4LDUzNTE5LDUzNTIwLDUzNTIxLDUzNTIyLDUzNTIzLDUzNTI0LDUzNTI1LDUzNTI2LDUzNTI3LDUzNTI4LDUz''@;'; put 'put ''NTI5LDUzNTMwLDUzNTMxLDUzNTMyLDUzNTMzLDUzNTM0LDUzNTM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNTM2LDUzNTM3LDUzNTM4LDUzNTM5LDUzNTQwLDUzNTQxLDUzNTQyLDUzNTQzLDUzNTQ0LDUzNTQ1LDUzNTQ2LDUzNTQ3LDUzNTQ4LDUzNTQ5LDUzNTUwLDUzNTUx''@;'; put 'put ''LDUzNTU0LDUzNTU1LDUzNTU3LDUzNTU4LDUzNTU5LDUzNTYxLDUzNTYzLDUzNTY0LDUzNTY1LDUzNTY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNTY3LDUzNTcwLDUzNTc0LDUzNTc1LDUzNTc2LDUzNTc3LDUzNTc4LDUzNTc5LDUzNTgyLDUzNTgzLDUzNTg1LDUzNTg2LDUz''@;'; put 'put ''NTg3LDUzNTg5LDUzNTkwLDUzNTkxLDUzNTkyLDUzNTkzLDUzNTk0LDUzNTk1LDUzNTk4LDUzNjAwLDUzNjAyLDUzNjAzLDUzNjA0LDUzNjA1LDUzNjA2LDUzNjA3LDUzNjA5LDUzNjEwLDUzNjExLDUzNjEzLDQ2NDAwLDQ2NDAxLDQ2NDAzLDQ2NDA0LDQ2NDA1LDQ2NDExLDQ2NDEyLDQ2NDEz''@;'; put 'put ''LDQ2NDE2LDQ2NDIwLDQ2NDI4LDQ2NDI5LDQ2NDMxLDQ2NDMyLDQ2NDMzLDQ2NDk2LDQ2NDk3LDQ2NTAwLDQ2NTA0LDQ2NTA2LDQ2NTA3LDQ2NTEyLDQ2NTEzLDQ2NTE1LDQ2NTE2LDQ2NTE3LDQ2NTIzLDQ2NTI0LDQ2NTI1LDQ2NTI4LDQ2NTMyLDQ2NTQwLDQ2NTQxLDQ2NTQzLDQ2NTQ0LDQ2''@;'; put 'put ''NTQ1LDQ2NTUyLDQ2NTcyLDQ2NjA4LDQ2NjA5LDQ2NjEyLDQ2NjE2LDQ2NjI5LDQ2NjM2LDQ2NjQ0LDQ2NjY0LDQ2NjkyLDQ2Njk2LDQ2NzQ4LDQ2NzQ5LDQ2NzUyLDQ2NzU2LDQ2NzYzLDQ2NzY0LDQ2NzY5LDQ2ODA0LDQ2ODMyLDQ2ODM2LDQ2ODQwLDQ2ODQ4LDQ2ODQ5LDQ2ODUzLDQ2ODg4''@;'; put 'put ''LDQ2ODg5LDQ2ODkyLDQ2ODk1LDQ2ODk2LDQ2OTA0LDQ2OTA1LDQ2OTA3LDQ2OTE2LDQ2OTIwLDQ2OTI0LDQ2OTMyLDQ2OTMzLDQ2OTQ0LDQ2OTQ4LDQ2OTUyLDQ2OTYwLDQ2OTYxLDQ2OTYzLDQ2OTY1LDQ2OTcyLDQ2OTczLDQ2OTc2LDQ2OTgwLDQ2OTg4LDQ2OTg5LDQ2OTkxLDQ2OTkyLDQ2''@;'; put 'put ''OTkzLDQ2OTk0LDQ2OTk4LDQ2OTk5LDUzNjE0LDUzNjE1LDUzNjE2LDUzNjE3LDUzNjE4LDUzNjE5LDUzNjIwLDUzNjIxLDUzNjIyLDUzNjIzLDUzNjI0LDUzNjI1LDUzNjI2LDUzNjI3LDUzNjI5LDUzNjMwLDUzNjMxLDUzNjMyLDUzNjMzLDUzNjM0LDUzNjM1LDUzNjM3LDUzNjM4LDUzNjM5''@;'; put 'put ''LDUzNjQxLDUzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNjQzLDUzNjQ0LDUzNjQ1LDUzNjQ2LDUzNjQ3LDUzNjQ4LDUzNjQ5LDUzNjUwLDUzNjUxLDUzNjUyLDUzNjUzLDUzNjU0LDUzNjU1LDUzNjU2LDUzNjU3LDUzNjU4LDUzNjU5LDUzNjYwLDUzNjYxLDUzNjYyLDUz''@;'; put 'put ''NjYzLDUzNjY2LDUzNjY3LDUzNjY5LDUzNjcwLDUzNjcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNjczLDUzNjc0LDUzNjc1LDUzNjc2LDUzNjc3LDUzNjc4LDUzNjc5LDUzNjgyLDUzNjg0LDUzNjg2LDUzNjg3LDUzNjg4LDUzNjg5LDUzNjkxLDUzNjkzLDUzNjk0LDUzNjk1''@;'; put 'put ''LDUzNjk3LDUzNjk4LDUzNjk5LDUzNzAwLDUzNzAxLDUzNzAyLDUzNzAzLDUzNzA0LDUzNzA1LDUzNzA2LDUzNzA3LDUzNzA4LDUzNzA5LDUzNzEwLDUzNzExLDQ3ZTMsNDcwMDEsNDcwMDQsNDcwMDgsNDcwMTYsNDcwMTcsNDcwMTksNDcwMjAsNDcwMjEsNDcwMjgsNDcwMjksNDcwMzIsNDcw''@;'; put 'put ''NDcsNDcwNDksNDcwODQsNDcwODUsNDcwODgsNDcwOTIsNDcxMDAsNDcxMDEsNDcxMDMsNDcxMDQsNDcxMDUsNDcxMTEsNDcxMTIsNDcxMTMsNDcxMTYsNDcxMjAsNDcxMjgsNDcxMjksNDcxMzEsNDcxMzMsNDcxNDAsNDcxNDEsNDcxNDQsNDcxNDgsNDcxNTYsNDcxNTcsNDcxNTksNDcxNjAs''@;'; put 'put ''NDcxNjEsNDcxNjgsNDcxNzIsNDcxODUsNDcxODcsNDcxOTYsNDcxOTcsNDcyMDAsNDcyMDQsNDcyMTIsNDcyMTMsNDcyMTUsNDcyMTcsNDcyMjQsNDcyMjgsNDcyNDUsNDcyNzIsNDcyODAsNDcyODQsNDcyODgsNDcyOTYsNDcyOTcsNDcyOTksNDczMDEsNDczMDgsNDczMTIsNDczMTYsNDcz''@;'; put 'put ''MjUsNDczMjcsNDczMjksNDczMzYsNDczMzcsNDczNDAsNDczNDQsNDczNTIsNDczNTMsNDczNTUsNDczNTcsNDczNjQsNDczODQsNDczOTIsNDc0MjAsNDc0MjEsNDc0MjQsNDc0MjgsNDc0MzYsNDc0MzksNDc0NDEsNDc0NDgsNDc0NDksNDc0NTIsNDc0NTYsNDc0NjQsNDc0NjUsNTM3MTIs''@;'; put 'put ''NTM3MTMsNTM3MTQsNTM3MTUsNTM3MTYsNTM3MTcsNTM3MTgsNTM3MTksNTM3MjEsNTM3MjIsNTM3MjMsNTM3MjQsNTM3MjUsNTM3MjYsNTM3MjcsNTM3MjgsNTM3MjksNTM3MzAsNTM3MzEsNTM3MzIsNTM3MzMsNTM3MzQsNTM3MzUsNTM3MzYsNTM3MzcsNTM3MzgsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTM3MzksNTM3NDAsNTM3NDEsNTM3NDIsNTM3NDMsNTM3NDQsNTM3NDUsNTM3NDYsNTM3NDcsNTM3NDksNTM3NTAsNTM3NTEsNTM3NTMsNTM3NTQsNTM3NTUsNTM3NTYsNTM3NTcsNTM3NTgsNTM3NTksNTM3NjAsNTM3NjEsNTM3NjIsNTM3NjMsNTM3NjQsNTM3NjUs''@;'; put 'put ''NTM3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3NjgsNTM3NzAsNTM3NzEsNTM3NzIsNTM3NzMsNTM3NzQsNTM3NzUsNTM3NzcsNTM3NzgsNTM3NzksNTM3ODAsNTM3ODEsNTM3ODIsNTM3ODMsNTM3ODQsNTM3ODUsNTM3ODYsNTM3ODcsNTM3ODgsNTM3ODksNTM3OTAsNTM3''@;'; put 'put ''OTEsNTM3OTIsNTM3OTMsNTM3OTQsNTM3OTUsNTM3OTYsNTM3OTcsNTM3OTgsNTM3OTksNTM4MDAsNTM4MDEsNDc0NjcsNDc0NjksNDc0NzYsNDc0NzcsNDc0ODAsNDc0ODQsNDc0OTIsNDc0OTMsNDc0OTUsNDc0OTcsNDc0OTgsNDc1MDEsNDc1MDIsNDc1MzIsNDc1MzMsNDc1MzYsNDc1NDAs''@;'; put 'put ''NDc1NDgsNDc1NDksNDc1NTEsNDc1NTMsNDc1NjAsNDc1NjEsNDc1NjQsNDc1NjYsNDc1NjcsNDc1NjgsNDc1NjksNDc1NzAsNDc1NzYsNDc1NzcsNDc1NzksNDc1ODEsNDc1ODIsNDc1ODUsNDc1ODcsNDc1ODgsNDc1ODksNDc1OTIsNDc1OTYsNDc2MDQsNDc2MDUsNDc2MDcsNDc2MDgsNDc2''@;'; put 'put ''MDksNDc2MTAsNDc2MTYsNDc2MTcsNDc2MjQsNDc2MzcsNDc2NzIsNDc2NzMsNDc2NzYsNDc2ODAsNDc2ODIsNDc2ODgsNDc2ODksNDc2OTEsNDc2OTMsNDc2OTQsNDc2OTksNDc3MDAsNDc3MDEsNDc3MDQsNDc3MDgsNDc3MTYsNDc3MTcsNDc3MTksNDc3MjAsNDc3MjEsNDc3MjgsNDc3Mjks''@;'; put 'put ''NDc3MzIsNDc3MzYsNDc3NDcsNDc3NDgsNDc3NDksNDc3NTEsNDc3NTYsNDc3ODQsNDc3ODUsNDc3ODcsNDc3ODgsNDc3OTIsNDc3OTQsNDc4MDAsNDc4MDEsNDc4MDMsNDc4MDUsNDc4MTIsNDc4MTYsNDc4MzIsNDc4MzMsNDc4NjgsNTM4MDIsNTM4MDMsNTM4MDYsNTM4MDcsNTM4MDksNTM4''@;'; put 'put ''MTAsNTM4MTEsNTM4MTMsNTM4MTQsNTM4MTUsNTM4MTYsNTM4MTcsNTM4MTgsNTM4MTksNTM4MjIsNTM4MjQsNTM4MjYsNTM4MjcsNTM4MjgsNTM4MjksNTM4MzAsNTM4MzEsNTM4MzMsNTM4MzQsNTM4MzUsNTM4MzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4MzcsNTM4Mzgs''@;'; put 'put ''NTM4MzksNTM4NDAsNTM4NDEsNTM4NDIsNTM4NDMsNTM4NDQsNTM4NDUsNTM4NDYsNTM4NDcsNTM4NDgsNTM4NDksNTM4NTAsNTM4NTEsNTM4NTMsNTM4NTQsNTM4NTUsNTM4NTYsNTM4NTcsNTM4NTgsNTM4NTksNTM4NjEsNTM4NjIsNTM4NjMsNTM4NjQsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTM4NjUsNTM4NjYsNTM4NjcsNTM4NjgsNTM4NjksNTM4NzAsNTM4NzEsNTM4NzIsNTM4NzMsNTM4NzQsNTM4NzUsNTM4NzYsNTM4NzcsNTM4NzgsNTM4NzksNTM4ODAsNTM4ODEsNTM4ODIsNTM4ODMsNTM4ODQsNTM4ODUsNTM4ODYsNTM4ODcsNTM4OTAsNTM4OTEsNTM4OTMs''@;'; put 'put ''NTM4OTQsNTM4OTUsNTM4OTcsNTM4OTgsNTM4OTksNTM5MDAsNDc4NzIsNDc4NzYsNDc4ODUsNDc4ODcsNDc4ODksNDc4OTYsNDc5MDAsNDc5MDQsNDc5MTMsNDc5MTUsNDc5MjQsNDc5MjUsNDc5MjYsNDc5MjgsNDc5MzEsNDc5MzIsNDc5MzMsNDc5MzQsNDc5NDAsNDc5NDEsNDc5NDMsNDc5''@;'; put 'put ''NDUsNDc5NDksNDc5NTEsNDc5NTIsNDc5NTYsNDc5NjAsNDc5NjksNDc5NzEsNDc5ODAsNDgwMDgsNDgwMTIsNDgwMTYsNDgwMzYsNDgwNDAsNDgwNDQsNDgwNTIsNDgwNTUsNDgwNjQsNDgwNjgsNDgwNzIsNDgwODAsNDgwODMsNDgxMjAsNDgxMjEsNDgxMjQsNDgxMjcsNDgxMjgsNDgxMzAs''@;'; put 'put ''NDgxMzYsNDgxMzcsNDgxMzksNDgxNDAsNDgxNDEsNDgxNDMsNDgxNDUsNDgxNDgsNDgxNDksNDgxNTAsNDgxNTEsNDgxNTIsNDgxNTUsNDgxNTYsNDgxNTcsNDgxNTgsNDgxNTksNDgxNjQsNDgxNjUsNDgxNjcsNDgxNjksNDgxNzMsNDgxNzYsNDgxNzcsNDgxODAsNDgxODQsNDgxOTIsNDgx''@;'; put 'put ''OTMsNDgxOTUsNDgxOTYsNDgxOTcsNDgyMDEsNDgyMDQsNDgyMDUsNDgyMDgsNDgyMjEsNDgyNjAsNDgyNjEsNDgyNjQsNDgyNjcsNDgyNjgsNDgyNzAsNDgyNzYsNDgyNzcsNDgyNzksNTM5MDEsNTM5MDIsNTM5MDMsNTM5MDYsNTM5MDcsNTM5MDgsNTM5MTAsNTM5MTEsNTM5MTIsNTM5MTMs''@;'; put 'put ''NTM5MTQsNTM5MTUsNTM5MTcsNTM5MTgsNTM5MTksNTM5MjEsNTM5MjIsNTM5MjMsNTM5MjUsNTM5MjYsNTM5MjcsNTM5MjgsNTM5MjksNTM5MzAsNTM5MzEsNTM5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5MzQsNTM5MzUsNTM5MzYsNTM5MzgsNTM5MzksNTM5NDAsNTM5''@;'; put 'put ''NDEsNTM5NDIsNTM5NDMsNTM5NDYsNTM5NDcsNTM5NDksNTM5NTAsNTM5NTMsNTM5NTUsNTM5NTYsNTM5NTcsNTM5NTgsNTM5NTksNTM5NjIsNTM5NjQsNTM5NjUsNTM5NjYsNTM5NjcsNTM5NjgsNTM5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5NzAsNTM5NzEsNTM5NzMs''@;'; put 'put ''NTM5NzQsNTM5NzUsNTM5NzcsNTM5NzgsNTM5NzksNTM5ODEsNTM5ODIsNTM5ODMsNTM5ODQsNTM5ODUsNTM5ODYsNTM5ODcsNTM5OTAsNTM5OTEsNTM5OTIsNTM5OTMsNTM5OTQsNTM5OTUsNTM5OTYsNTM5OTcsNTM5OTgsNTM5OTksNTQwMDIsNTQwMDMsNTQwMDUsNTQwMDYsNTQwMDcsNTQw''@;'; put 'put ''MDksNTQwMTAsNDgyODEsNDgyODIsNDgyODgsNDgyODksNDgyOTIsNDgyOTUsNDgyOTYsNDgzMDQsNDgzMDUsNDgzMDcsNDgzMDgsNDgzMDksNDgzMTYsNDgzMTcsNDgzMjAsNDgzMjQsNDgzMzMsNDgzMzUsNDgzMzYsNDgzMzcsNDgzNDEsNDgzNDQsNDgzNDgsNDgzNzIsNDgzNzMsNDgzNzQs''@;'; put 'put ''NDgzNzYsNDgzODAsNDgzODgsNDgzODksNDgzOTEsNDgzOTMsNDg0MDAsNDg0MDQsNDg0MjAsNDg0MjgsNDg0NDgsNDg0NTYsNDg0NTcsNDg0NjAsNDg0NjQsNDg0NzIsNDg0NzMsNDg0ODQsNDg0ODgsNDg1MTIsNDg1MTMsNDg1MTYsNDg1MTksNDg1MjAsNDg1MjEsNDg1MjIsNDg1MjgsNDg1''@;'; put 'put ''MjksNDg1MzEsNDg1MzMsNDg1MzcsNDg1MzgsNDg1NDAsNDg1NDgsNDg1NjAsNDg1NjgsNDg1OTYsNDg1OTcsNDg2MDAsNDg2MDQsNDg2MTcsNDg2MjQsNDg2MjgsNDg2MzIsNDg2NDAsNDg2NDMsNDg2NDUsNDg2NTIsNDg2NTMsNDg2NTYsNDg2NjAsNDg2NjgsNDg2NjksNDg2NzEsNDg3MDgs''@;'; put 'put ''NDg3MDksNDg3MTIsNDg3MTYsNDg3MTgsNDg3MjQsNDg3MjUsNDg3MjcsNDg3MjksNDg3MzAsNDg3MzEsNDg3MzYsNDg3MzcsNDg3NDAsNTQwMTEsNTQwMTIsNTQwMTMsNTQwMTQsNTQwMTUsNTQwMTgsNTQwMjAsNTQwMjIsNTQwMjMsNTQwMjQsNTQwMjUsNTQwMjYsNTQwMjcsNTQwMzEsNTQw''@;'; put 'put ''MzMsNTQwMzQsNTQwMzUsNTQwMzcsNTQwMzksNTQwNDAsNTQwNDEsNTQwNDIsNTQwNDMsNTQwNDYsNTQwNTAsNTQwNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwNTIsNTQwNTQsNTQwNTUsNTQwNTgsNTQwNTksNTQwNjEsNTQwNjIsNTQwNjMsNTQwNjUsNTQwNjYsNTQwNjcs''@;'; put 'put ''NTQwNjgsNTQwNjksNTQwNzAsNTQwNzEsNTQwNzQsNTQwNzgsNTQwNzksNTQwODAsNTQwODEsNTQwODIsNTQwODMsNTQwODYsNTQwODcsNTQwODgsNTQwODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwOTAsNTQwOTEsNTQwOTIsNTQwOTMsNTQwOTQsNTQwOTUsNTQwOTYsNTQw''@;'; put 'put ''OTcsNTQwOTgsNTQwOTksNTQxMDAsNTQxMDEsNTQxMDIsNTQxMDMsNTQxMDQsNTQxMDUsNTQxMDYsNTQxMDcsNTQxMDgsNTQxMDksNTQxMTAsNTQxMTEsNTQxMTIsNTQxMTMsNTQxMTQsNTQxMTUsNTQxMTYsNTQxMTcsNTQxMTgsNTQxMTksNTQxMjAsNTQxMjEsNDg3NDQsNDg3NDYsNDg3NTIs''@;'; put 'put ''NDg3NTMsNDg3NTUsNDg3NTYsNDg3NTcsNDg3NjMsNDg3NjQsNDg3NjUsNDg3NjgsNDg3NzIsNDg3ODAsNDg3ODEsNDg3ODMsNDg3ODQsNDg3ODUsNDg3OTIsNDg3OTMsNDg4MDgsNDg4NDgsNDg4NDksNDg4NTIsNDg4NTUsNDg4NTYsNDg4NjQsNDg4NjcsNDg4NjgsNDg4NjksNDg4NzYsNDg4''@;'; put 'put ''OTcsNDg5MDQsNDg5MDUsNDg5MjAsNDg5MjEsNDg5MjMsNDg5MjQsNDg5MjUsNDg5NjAsNDg5NjEsNDg5NjQsNDg5NjgsNDg5NzYsNDg5NzcsNDg5ODEsNDkwNDQsNDkwNzIsNDkwOTMsNDkxMDAsNDkxMDEsNDkxMDQsNDkxMDgsNDkxMTYsNDkxMTksNDkxMjEsNDkyMTIsNDkyMzMsNDkyNDAs''@;'; put 'put ''NDkyNDQsNDkyNDgsNDkyNTYsNDkyNTcsNDkyOTYsNDkyOTcsNDkzMDAsNDkzMDQsNDkzMTIsNDkzMTMsNDkzMTUsNDkzMTcsNDkzMjQsNDkzMjUsNDkzMjcsNDkzMjgsNDkzMzEsNDkzMzIsNDkzMzMsNDkzMzQsNDkzNDAsNDkzNDEsNDkzNDMsNDkzNDQsNDkzNDUsNDkzNDksNDkzNTIsNDkz''@;'; put 'put ''NTMsNDkzNTYsNDkzNjAsNDkzNjgsNDkzNjksNDkzNzEsNDkzNzIsNDkzNzMsNDkzODAsNTQxMjIsNTQxMjMsNTQxMjQsNTQxMjUsNTQxMjYsNTQxMjcsNTQxMjgsNTQxMjksNTQxMzAsNTQxMzEsNTQxMzIsNTQxMzMsNTQxMzQsNTQxMzUsNTQxMzYsNTQxMzcsNTQxMzgsNTQxMzksNTQxNDIs''@;'; put 'put ''NTQxNDMsNTQxNDUsNTQxNDYsNTQxNDcsNTQxNDksNTQxNTAsNTQxNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxNTIsNTQxNTMsNTQxNTQsNTQxNTUsNTQxNTgsNTQxNjIsNTQxNjMsNTQxNjQsNTQxNjUsNTQxNjYsNTQxNjcsNTQxNzAsNTQxNzEsNTQxNzMsNTQxNzQsNTQx''@;'; put 'put ''NzUsNTQxNzcsNTQxNzgsNTQxNzksNTQxODAsNTQxODEsNTQxODIsNTQxODMsNTQxODYsNTQxODgsNTQxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxOTEsNTQxOTIsNTQxOTMsNTQxOTQsNTQxOTUsNTQxOTcsNTQxOTgsNTQxOTksNTQyMDEsNTQyMDIsNTQyMDMsNTQyMDUs''@;'; put 'put ''NTQyMDYsNTQyMDcsNTQyMDgsNTQyMDksNTQyMTAsNTQyMTEsNTQyMTQsNTQyMTUsNTQyMTgsNTQyMTksNTQyMjAsNTQyMjEsNTQyMjIsNTQyMjMsNTQyMjUsNTQyMjYsNTQyMjcsNTQyMjgsNTQyMjksNTQyMzAsNDkzODEsNDkzODQsNDkzODgsNDkzOTYsNDkzOTcsNDkzOTksNDk0MDEsNDk0''@;'; put 'put ''MDgsNDk0MTIsNDk0MTYsNDk0MjQsNDk0MjksNDk0MzYsNDk0MzcsNDk0MzgsNDk0MzksNDk0NDAsNDk0NDMsNDk0NDQsNDk0NDYsNDk0NDcsNDk0NTIsNDk0NTMsNDk0NTUsNDk0NTYsNDk0NTcsNDk0NjIsNDk0NjQsNDk0NjUsNDk0NjgsNDk0NzIsNDk0ODAsNDk0ODEsNDk0ODMsNDk0ODQs''@;'; put 'put ''NDk0ODUsNDk0OTIsNDk0OTMsNDk0OTYsNDk1MDAsNDk1MDgsNDk1MDksNDk1MTEsNDk1MTIsNDk1MTMsNDk1MjAsNDk1MjQsNDk1MjgsNDk1NDEsNDk1NDgsNDk1NDksNDk1NTAsNDk1NTIsNDk1NTYsNDk1NTgsNDk1NjQsNDk1NjUsNDk1NjcsNDk1NjksNDk1NzMsNDk1NzYsNDk1NzcsNDk1''@;'; put 'put ''ODAsNDk1ODQsNDk1OTcsNDk2MDQsNDk2MDgsNDk2MTIsNDk2MjAsNDk2MjMsNDk2MjQsNDk2MzIsNDk2MzYsNDk2NDAsNDk2NDgsNDk2NDksNDk2NTEsNDk2NjAsNDk2NjEsNDk2NjQsNDk2NjgsNDk2NzYsNDk2NzcsNDk2NzksNDk2ODEsNDk2ODgsNDk2ODksNDk2OTIsNDk2OTUsNDk2OTYs''@;'; put 'put ''NDk3MDQsNDk3MDUsNDk3MDcsNDk3MDksNTQyMzEsNTQyMzMsNTQyMzQsNTQyMzUsNTQyMzYsNTQyMzcsNTQyMzgsNTQyMzksNTQyNDAsNTQyNDIsNTQyNDQsNTQyNDUsNTQyNDYsNTQyNDcsNTQyNDgsNTQyNDksNTQyNTAsNTQyNTEsNTQyNTQsNTQyNTUsNTQyNTcsNTQyNTgsNTQyNTksNTQy''@;'; put 'put ''NjEsNTQyNjIsNTQyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyNjQsNTQyNjUsNTQyNjYsNTQyNjcsNTQyNzAsNTQyNzIsNTQyNzQsNTQyNzUsNTQyNzYsNTQyNzcsNTQyNzgsNTQyNzksNTQyODEsNTQyODIsNTQyODMsNTQyODQsNTQyODUsNTQyODYsNTQyODcsNTQyODgs''@;'; put 'put ''NTQyODksNTQyOTAsNTQyOTEsNTQyOTIsNTQyOTMsNTQyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyOTUsNTQyOTYsNTQyOTcsNTQyOTgsNTQyOTksNTQzMDAsNTQzMDIsNTQzMDMsNTQzMDQsNTQzMDUsNTQzMDYsNTQzMDcsNTQzMDgsNTQzMDksNTQzMTAsNTQzMTEsNTQz''@;'; put 'put ''MTIsNTQzMTMsNTQzMTQsNTQzMTUsNTQzMTYsNTQzMTcsNTQzMTgsNTQzMTksNTQzMjAsNTQzMjEsNTQzMjIsNTQzMjMsNTQzMjQsNTQzMjUsNTQzMjYsNTQzMjcsNDk3MTEsNDk3MTMsNDk3MTQsNDk3MTYsNDk3MzYsNDk3NDQsNDk3NDUsNDk3NDgsNDk3NTIsNDk3NjAsNDk3NjUsNDk3NzIs''@;'; put 'put ''NDk3NzMsNDk3NzYsNDk3ODAsNDk3ODgsNDk3ODksNDk3OTEsNDk3OTMsNDk4MDAsNDk4MDEsNDk4MDgsNDk4MTYsNDk4MTksNDk4MjEsNDk4MjgsNDk4MjksNDk4MzIsNDk4MzYsNDk4MzcsNDk4NDQsNDk4NDUsNDk4NDcsNDk4NDksNDk4ODQsNDk4ODUsNDk4ODgsNDk4OTEsNDk4OTIsNDk4''@;'; put 'put ''OTksNDk5MDAsNDk5MDEsNDk5MDMsNDk5MDUsNDk5MTAsNDk5MTIsNDk5MTMsNDk5MTUsNDk5MTYsNDk5MjAsNDk5MjgsNDk5MjksNDk5MzIsNDk5MzMsNDk5MzksNDk5NDAsNDk5NDEsNDk5NDQsNDk5NDgsNDk5NTYsNDk5NTcsNDk5NjAsNDk5NjEsNDk5ODksNTAwMjQsNTAwMjUsNTAwMjgs''@;'; put 'put ''NTAwMzIsNTAwMzQsNTAwNDAsNTAwNDEsNTAwNDQsNTAwNDUsNTAwNTIsNTAwNTYsNTAwNjAsNTAxMTIsNTAxMzYsNTAxMzcsNTAxNDAsNTAxNDMsNTAxNDQsNTAxNDYsNTAxNTIsNTAxNTMsNTAxNTcsNTAxNjQsNTAxNjUsNTAxNjgsNTAxODQsNTAxOTIsNTAyMTIsNTAyMjAsNTAyMjQsNTQz''@;'; put 'put ''MjgsNTQzMjksNTQzMzAsNTQzMzEsNTQzMzIsNTQzMzMsNTQzMzQsNTQzMzUsNTQzMzcsNTQzMzgsNTQzMzksNTQzNDEsNTQzNDIsNTQzNDMsNTQzNDQsNTQzNDUsNTQzNDYsNTQzNDcsNTQzNDgsNTQzNDksNTQzNTAsNTQzNTEsNTQzNTIsNTQzNTMsNTQzNTQsNTQzNTUsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTQzNTYsNTQzNTcsNTQzNTgsNTQzNTksNTQzNjAsNTQzNjEsNTQzNjIsNTQzNjMsNTQzNjUsNTQzNjYsNTQzNjcsNTQzNjksNTQzNzAsNTQzNzEsNTQzNzMsNTQzNzQsNTQzNzUsNTQzNzYsNTQzNzcsNTQzNzgsNTQzNzksNTQzODAsNTQzODIsNTQzODQsNTQz''@;'; put 'put ''ODUsNTQzODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzODcsNTQzODgsNTQzODksNTQzOTAsNTQzOTEsNTQzOTQsNTQzOTUsNTQzOTcsNTQzOTgsNTQ0MDEsNTQ0MDMsNTQ0MDQsNTQ0MDUsNTQ0MDYsNTQ0MDcsNTQ0MTAsNTQ0MTIsNTQ0MTQsNTQ0MTUsNTQ0MTYsNTQ0MTcs''@;'; put 'put ''NTQ0MTgsNTQ0MTksNTQ0MjEsNTQ0MjIsNTQ0MjMsNTQ0MjQsNTQ0MjUsNTQ0MjYsNTQ0MjcsNTQ0MjgsNTQ0MjksNTAyMjgsNTAyMzYsNTAyMzcsNTAyNDgsNTAyNzYsNTAyNzcsNTAyODAsNTAyODQsNTAyOTIsNTAyOTMsNTAyOTcsNTAzMDQsNTAzMjQsNTAzMzIsNTAzNjAsNTAzNjQsNTA0''@;'; put 'put ''MDksNTA0MTYsNTA0MTcsNTA0MjAsNTA0MjQsNTA0MjYsNTA0MzEsNTA0MzIsNTA0MzMsNTA0NDQsNTA0NDgsNTA0NTIsNTA0NjAsNTA0NzIsNTA0NzMsNTA0NzYsNTA0ODAsNTA0ODgsNTA0ODksNTA0OTEsNTA0OTMsNTA1MDAsNTA1MDEsNTA1MDQsNTA1MDUsNTA1MDYsNTA1MDgsNTA1MDks''@;'; put 'put ''NTA1MTAsNTA1MTUsNTA1MTYsNTA1MTcsNTA1MTksNTA1MjAsNTA1MjEsNTA1MjUsNTA1MjYsNTA1MjgsNTA1MjksNTA1MzIsNTA1MzYsNTA1NDQsNTA1NDUsNTA1NDcsNTA1NDgsNTA1NDksNTA1NTYsNTA1NTcsNTA1NjAsNTA1NjQsNTA1NjcsNTA1NzIsNTA1NzMsNTA1NzUsNTA1NzcsNTA1''@;'; put 'put ''ODEsNTA1ODMsNTA1ODQsNTA1ODgsNTA1OTIsNTA2MDEsNTA2MTIsNTA2MTMsNTA2MTYsNTA2MTcsNTA2MTksNTA2MjAsNTA2MjEsNTA2MjIsNTA2MjgsNTA2MjksNTA2MzAsNTA2MzEsNTA2MzIsNTA2MzMsNTA2MzQsNTA2MzYsNTA2MzgsNTQ0MzAsNTQ0MzEsNTQ0MzIsNTQ0MzMsNTQ0MzQs''@;'; put 'put ''NTQ0MzUsNTQ0MzYsNTQ0MzcsNTQ0MzgsNTQ0MzksNTQ0NDAsNTQ0NDIsNTQ0NDMsNTQ0NDQsNTQ0NDUsNTQ0NDYsNTQ0NDcsNTQ0NDgsNTQ0NDksNTQ0NTAsNTQ0NTEsNTQ0NTIsNTQ0NTMsNTQ0NTQsNTQ0NTUsNTQ0NTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0NTcsNTQ0''@;'; put 'put ''NTgsNTQ0NTksNTQ0NjAsNTQ0NjEsNTQ0NjIsNTQ0NjMsNTQ0NjQsNTQ0NjUsNTQ0NjYsNTQ0NjcsNTQ0NjgsNTQ0NjksNTQ0NzAsNTQ0NzEsNTQ0NzIsNTQ0NzMsNTQ0NzQsNTQ0NzUsNTQ0NzcsNTQ0NzgsNTQ0NzksNTQ0ODEsNTQ0ODIsNTQ0ODMsNTQ0ODUsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTQ0ODYsNTQ0ODcsNTQ0ODgsNTQ0ODksNTQ0OTAsNTQ0OTEsNTQ0OTMsNTQ0OTQsNTQ0OTYsNTQ0OTcsNTQ0OTgsNTQ0OTksNTQ1MDAsNTQ1MDEsNTQ1MDIsNTQ1MDMsNTQ1MDUsNTQ1MDYsNTQ1MDcsNTQ1MDksNTQ1MTAsNTQ1MTEsNTQ1MTMsNTQ1MTQsNTQ1MTUsNTQ1''@;'; put 'put ''MTYsNTQ1MTcsNTQ1MTgsNTQ1MTksNTQ1MjEsNTQ1MjIsNTQ1MjQsNTA2NDAsNTA2NDEsNTA2NDQsNTA2NDgsNTA2NTYsNTA2NTcsNTA2NTksNTA2NjEsNTA2NjgsNTA2NjksNTA2NzAsNTA2NzIsNTA2NzYsNTA2NzgsNTA2NzksNTA2ODQsNTA2ODUsNTA2ODYsNTA2ODcsNTA2ODgsNTA2ODks''@;'; put 'put ''NTA2OTMsNTA2OTQsNTA2OTUsNTA2OTYsNTA3MDAsNTA3MDQsNTA3MTIsNTA3MTMsNTA3MTUsNTA3MTYsNTA3MjQsNTA3MjUsNTA3MjgsNTA3MzIsNTA3MzMsNTA3MzQsNTA3MzYsNTA3MzksNTA3NDAsNTA3NDEsNTA3NDMsNTA3NDUsNTA3NDcsNTA3NTIsNTA3NTMsNTA3NTYsNTA3NjAsNTA3''@;'; put 'put ''NjgsNTA3NjksNTA3NzEsNTA3NzIsNTA3NzMsNTA3ODAsNTA3ODEsNTA3ODQsNTA3OTYsNTA3OTksNTA4MDEsNTA4MDgsNTA4MDksNTA4MTIsNTA4MTYsNTA4MjQsNTA4MjUsNTA4MjcsNTA4MjksNTA4MzYsNTA4MzcsNTA4NDAsNTA4NDQsNTA4NTIsNTA4NTMsNTA4NTUsNTA4NTcsNTA4NjQs''@;'; put 'put ''NTA4NjUsNTA4NjgsNTA4NzIsNTA4NzMsNTA4NzQsNTA4ODAsNTA4ODEsNTA4ODMsNTA4ODUsNTA4OTIsNTA4OTMsNTA4OTYsNTA5MDAsNTA5MDgsNTA5MDksNTA5MTIsNTA5MTMsNTA5MjAsNTQ1MjYsNTQ1MjcsNTQ1MjgsNTQ1MjksNTQ1MzAsNTQ1MzEsNTQ1MzMsNTQ1MzQsNTQ1MzUsNTQ1''@;'; put 'put ''MzcsNTQ1MzgsNTQ1MzksNTQ1NDEsNTQ1NDIsNTQ1NDMsNTQ1NDQsNTQ1NDUsNTQ1NDYsNTQ1NDcsNTQ1NTAsNTQ1NTIsNTQ1NTMsNTQ1NTQsNTQ1NTUsNTQ1NTYsNTQ1NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1NTgsNTQ1NTksNTQ1NjAsNTQ1NjEsNTQ1NjIsNTQ1NjMs''@;'; put 'put ''NTQ1NjQsNTQ1NjUsNTQ1NjYsNTQ1NjcsNTQ1NjgsNTQ1NjksNTQ1NzAsNTQ1NzEsNTQ1NzIsNTQ1NzMsNTQ1NzQsNTQ1NzUsNTQ1NzYsNTQ1NzcsNTQ1NzgsNTQ1NzksNTQ1ODAsNTQ1ODEsNTQ1ODIsNTQ1ODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1ODQsNTQ1ODUsNTQ1''@;'; put 'put ''ODYsNTQ1ODcsNTQ1OTAsNTQ1OTEsNTQ1OTMsNTQ1OTQsNTQ1OTUsNTQ1OTcsNTQ1OTgsNTQ1OTksNTQ2MDAsNTQ2MDEsNTQ2MDIsNTQ2MDMsNTQ2MDYsNTQ2MDgsNTQ2MTAsNTQ2MTEsNTQ2MTIsNTQ2MTMsNTQ2MTQsNTQ2MTUsNTQ2MTgsNTQ2MTksNTQ2MjEsNTQ2MjIsNTQ2MjMsNTQ2MjUs''@;'; put 'put ''NTQ2MjYsNTQ2MjcsNTA5MjEsNTA5MjQsNTA5MjgsNTA5MzYsNTA5MzcsNTA5NDEsNTA5NDgsNTA5NDksNTA5NTIsNTA5NTYsNTA5NjQsNTA5NjUsNTA5NjcsNTA5NjksNTA5NzYsNTA5NzcsNTA5ODAsNTA5ODQsNTA5OTIsNTA5OTMsNTA5OTUsNTA5OTcsNTA5OTksNTEwMDQsNTEwMDUsNTEw''@;'; put 'put ''MDgsNTEwMTIsNTEwMTgsNTEwMjAsNTEwMjEsNTEwMjMsNTEwMjUsNTEwMjYsNTEwMjcsNTEwMjgsNTEwMjksNTEwMzAsNTEwMzEsNTEwMzIsNTEwMzYsNTEwNDAsNTEwNDgsNTEwNTEsNTEwNjAsNTEwNjEsNTEwNjQsNTEwNjgsNTEwNjksNTEwNzAsNTEwNzUsNTEwNzYsNTEwNzcsNTEwNzks''@;'; put 'put ''NTEwODAsNTEwODEsNTEwODIsNTEwODYsNTEwODgsNTEwODksNTEwOTIsNTEwOTQsNTEwOTUsNTEwOTYsNTEwOTgsNTExMDQsNTExMDUsNTExMDcsNTExMDgsNTExMDksNTExMTAsNTExMTYsNTExMTcsNTExMjAsNTExMjQsNTExMzIsNTExMzMsNTExMzUsNTExMzYsNTExMzcsNTExNDQsNTEx''@;'; put 'put ''NDUsNTExNDgsNTExNTAsNTExNTIsNTExNjAsNTExNjUsNTExNzIsNTExNzYsNTExODAsNTEyMDAsNTEyMDEsNTEyMDQsNTEyMDgsNTEyMTAsNTQ2MjgsNTQ2MzAsNTQ2MzEsNTQ2MzQsNTQ2MzYsNTQ2MzgsNTQ2MzksNTQ2NDAsNTQ2NDEsNTQ2NDIsNTQ2NDMsNTQ2NDYsNTQ2NDcsNTQ2NDks''@;'; put 'put ''NTQ2NTAsNTQ2NTEsNTQ2NTMsNTQ2NTQsNTQ2NTUsNTQ2NTYsNTQ2NTcsNTQ2NTgsNTQ2NTksNTQ2NjIsNTQ2NjYsNTQ2NjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2NjgsNTQ2NjksNTQ2NzAsNTQ2NzEsNTQ2NzMsNTQ2NzQsNTQ2NzUsNTQ2NzYsNTQ2NzcsNTQ2NzgsNTQ2''@;'; put 'put ''NzksNTQ2ODAsNTQ2ODEsNTQ2ODIsNTQ2ODMsNTQ2ODQsNTQ2ODUsNTQ2ODYsNTQ2ODcsNTQ2ODgsNTQ2ODksNTQ2OTAsNTQ2OTEsNTQ2OTIsNTQ2OTQsNTQ2OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2OTYsNTQ2OTcsNTQ2OTgsNTQ2OTksNTQ3MDAsNTQ3MDEsNTQ3MDIs''@;'; put 'put ''NTQ3MDMsNTQ3MDQsNTQ3MDUsNTQ3MDYsNTQ3MDcsNTQ3MDgsNTQ3MDksNTQ3MTAsNTQ3MTEsNTQ3MTIsNTQ3MTMsNTQ3MTQsNTQ3MTUsNTQ3MTYsNTQ3MTcsNTQ3MTgsNTQ3MTksNTQ3MjAsNTQ3MjEsNTQ3MjIsNTQ3MjMsNTQ3MjQsNTQ3MjUsNTQ3MjYsNTQ3MjcsNTEyMTYsNTEyMTcsNTEy''@;'; put 'put ''MTksNTEyMjEsNTEyMjIsNTEyMjgsNTEyMjksNTEyMzIsNTEyMzYsNTEyNDQsNTEyNDUsNTEyNDcsNTEyNDksNTEyNTYsNTEyNjAsNTEyNjQsNTEyNzIsNTEyNzMsNTEyNzYsNTEyNzcsNTEyODQsNTEzMTIsNTEzMTMsNTEzMTYsNTEzMjAsNTEzMjIsNTEzMjgsNTEzMjksNTEzMzEsNTEzMzMs''@;'; put 'put ''NTEzMzQsNTEzMzUsNTEzMzksNTEzNDAsNTEzNDEsNTEzNDgsNTEzNTcsNTEzNTksNTEzNjEsNTEzNjgsNTEzODgsNTEzODksNTEzOTYsNTE0MDAsNTE0MDQsNTE0MTIsNTE0MTMsNTE0MTUsNTE0MTcsNTE0MjQsNTE0MjUsNTE0MjgsNTE0NDUsNTE0NTIsNTE0NTMsNTE0NTYsNTE0NjAsNTE0''@;'; put 'put ''NjEsNTE0NjIsNTE0NjgsNTE0NjksNTE0NzEsNTE0NzMsNTE0ODAsNTE1MDAsNTE1MDgsNTE1MzYsNTE1MzcsNTE1NDAsNTE1NDQsNTE1NTIsNTE1NTMsNTE1NTUsNTE1NjQsNTE1NjgsNTE1NzIsNTE1ODAsNTE1OTIsNTE1OTMsNTE1OTYsNTE2MDAsNTE2MDgsNTE2MDksNTE2MTEsNTE2MTMs''@;'; put 'put ''NTE2NDgsNTE2NDksNTE2NTIsNTE2NTUsNTE2NTYsNTE2NTgsNTE2NjQsNTE2NjUsNTE2NjcsNTQ3MzAsNTQ3MzEsNTQ3MzMsNTQ3MzQsNTQ3MzUsNTQ3MzcsNTQ3MzksNTQ3NDAsNTQ3NDEsNTQ3NDIsNTQ3NDMsNTQ3NDYsNTQ3NDgsNTQ3NTAsNTQ3NTEsNTQ3NTIsNTQ3NTMsNTQ3NTQsNTQ3''@;'; put 'put ''NTUsNTQ3NTgsNTQ3NTksNTQ3NjEsNTQ3NjIsNTQ3NjMsNTQ3NjUsNTQ3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ3NjcsNTQ3NjgsNTQ3NjksNTQ3NzAsNTQ3NzEsNTQ3NzQsNTQ3NzYsNTQ3NzgsNTQ3NzksNTQ3ODAsNTQ3ODEsNTQ3ODIsNTQ3ODMsNTQ3ODYsNTQ3ODcs''@;'; put 'put ''NTQ3ODksNTQ3OTAsNTQ3OTEsNTQ3OTMsNTQ3OTQsNTQ3OTUsNTQ3OTYsNTQ3OTcsNTQ3OTgsNTQ3OTksNTQ4MDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MDYsNTQ4MDcsNTQ4MDgsNTQ4MDksNTQ4MTAsNTQ4MTEsNTQ4MTMsNTQ4MTQsNTQ4MTUsNTQ4MTcsNTQ4MTgsNTQ4''@;'; put 'put ''MTksNTQ4MjEsNTQ4MjIsNTQ4MjMsNTQ4MjQsNTQ4MjUsNTQ4MjYsNTQ4MjcsNTQ4MjgsNTQ4MzAsNTQ4MzEsNTQ4MzIsNTQ4MzMsNTQ4MzQsNTQ4MzUsNTQ4MzYsNTQ4MzcsNTQ4MzgsNTQ4MzksNTQ4NDIsNTQ4NDMsNTE2NjksNTE2NzAsNTE2NzMsNTE2NzQsNTE2NzYsNTE2NzcsNTE2ODAs''@;'; put 'put ''NTE2ODIsNTE2ODQsNTE2ODcsNTE2OTIsNTE2OTMsNTE2OTUsNTE2OTYsNTE2OTcsNTE3MDQsNTE3MDUsNTE3MDgsNTE3MTIsNTE3MjAsNTE3MjEsNTE3MjMsNTE3MjQsNTE3MjUsNTE3MzIsNTE3MzYsNTE3NTMsNTE3ODgsNTE3ODksNTE3OTIsNTE3OTYsNTE4MDQsNTE4MDUsNTE4MDcsNTE4''@;'; put 'put ''MDgsNTE4MDksNTE4MTYsNTE4MzcsNTE4NDQsNTE4NjQsNTE5MDAsNTE5MDEsNTE5MDQsNTE5MDgsNTE5MTYsNTE5MTcsNTE5MTksNTE5MjEsNTE5MjMsNTE5MjgsNTE5MjksNTE5MzYsNTE5NDgsNTE5NTYsNTE5NzYsNTE5ODQsNTE5ODgsNTE5OTIsNTJlMyw1MjAwMSw1MjAzMyw1MjA0MCw1''@;'; put 'put ''MjA0MSw1MjA0NCw1MjA0OCw1MjA1Niw1MjA1Nyw1MjA2MSw1MjA2OCw1MjA4OCw1MjA4OSw1MjEyNCw1MjE1Miw1MjE4MCw1MjE5Niw1MjE5OSw1MjIwMSw1MjIzNiw1MjIzNyw1MjI0MCw1MjI0NCw1MjI1Miw1MjI1Myw1MjI1Nyw1MjI1OCw1MjI2Myw1MjI2NCw1MjI2NSw1MjI2OCw1MjI3''@;'; put 'put ''MCw1MjI3Miw1MjI4MCw1MjI4MSw1MjI4Myw1NDg0NSw1NDg0Niw1NDg0Nyw1NDg0OSw1NDg1MCw1NDg1MSw1NDg1Miw1NDg1NCw1NDg1NSw1NDg1OCw1NDg2MCw1NDg2Miw1NDg2Myw1NDg2NCw1NDg2Niw1NDg2Nyw1NDg3MCw1NDg3MSw1NDg3Myw1NDg3NCw1NDg3NSw1NDg3Nyw1NDg3OCw1''@;'; put 'put ''NDg3OSw1NDg4MCw1NDg4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDg4Miw1NDg4Myw1NDg4NCw1NDg4NSw1NDg4Niw1NDg4OCw1NDg5MCw1NDg5MSw1NDg5Miw1NDg5Myw1NDg5NCw1NDg5NSw1NDg5OCw1NDg5OSw1NDkwMSw1NDkwMiw1NDkwMyw1NDkwNCw1NDkwNSw1NDkw''@;'; put 'put ''Niw1NDkwNyw1NDkwOCw1NDkwOSw1NDkxMCw1NDkxMSw1NDkxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDkxMyw1NDkxNCw1NDkxNiw1NDkxOCw1NDkxOSw1NDkyMCw1NDkyMSw1NDkyMiw1NDkyMyw1NDkyNiw1NDkyNyw1NDkyOSw1NDkzMCw1NDkzMSw1NDkzMyw1NDkzNCw1''@;'; put 'put ''NDkzNSw1NDkzNiw1NDkzNyw1NDkzOCw1NDkzOSw1NDk0MCw1NDk0Miw1NDk0NCw1NDk0Niw1NDk0Nyw1NDk0OCw1NDk0OSw1NDk1MCw1NDk1MSw1NDk1Myw1NDk1NCw1MjI4NCw1MjI4NSw1MjI4Niw1MjI5Miw1MjI5Myw1MjI5Niw1MjMwMCw1MjMwOCw1MjMwOSw1MjMxMSw1MjMxMiw1MjMx''@;'; put 'put ''Myw1MjMyMCw1MjMyNCw1MjMyNiw1MjMyOCw1MjMzNiw1MjM0MSw1MjM3Niw1MjM3Nyw1MjM4MCw1MjM4NCw1MjM5Miw1MjM5Myw1MjM5NSw1MjM5Niw1MjM5Nyw1MjQwNCw1MjQwNSw1MjQwOCw1MjQxMiw1MjQyMCw1MjQyMSw1MjQyMyw1MjQyNSw1MjQzMiw1MjQzNiw1MjQ1Miw1MjQ2MCw1''@;'; put 'put ''MjQ2NCw1MjQ4MSw1MjQ4OCw1MjQ4OSw1MjQ5Miw1MjQ5Niw1MjUwNCw1MjUwNSw1MjUwNyw1MjUwOSw1MjUxNiw1MjUyMCw1MjUyNCw1MjUzNyw1MjU3Miw1MjU3Niw1MjU4MCw1MjU4OCw1MjU4OSw1MjU5MSw1MjU5Myw1MjYwMCw1MjYxNiw1MjYyOCw1MjYyOSw1MjYzMiw1MjYzNiw1MjY0''@;'; put 'put ''NCw1MjY0NSw1MjY0Nyw1MjY0OSw1MjY1Niw1MjY3Niw1MjY4NCw1MjY4OCw1MjcxMiw1MjcxNiw1MjcyMCw1MjcyOCw1MjcyOSw1MjczMSw1MjczMyw1Mjc0MCw1Mjc0NCw1Mjc0OCw1Mjc1Niw1Mjc2MSw1Mjc2OCw1Mjc2OSw1Mjc3Miw1Mjc3Niw1Mjc4NCw1Mjc4NSw1Mjc4Nyw1Mjc4OSw1''@;'; put 'put ''NDk1NSw1NDk1Nyw1NDk1OCw1NDk1OSw1NDk2MSw1NDk2Miw1NDk2Myw1NDk2NCw1NDk2NSw1NDk2Niw1NDk2Nyw1NDk2OCw1NDk3MCw1NDk3Miw1NDk3Myw1NDk3NCw1NDk3NSw1NDk3Niw1NDk3Nyw1NDk3OCw1NDk3OSw1NDk4Miw1NDk4Myw1NDk4NSw1NDk4Niw1NDk4NyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1NDk4OSw1NDk5MCw1NDk5MSw1NDk5Miw1NDk5NCw1NDk5NSw1NDk5Nyw1NDk5OCw1NWUzLDU1MDAyLDU1MDAzLDU1MDA0LDU1MDA1LDU1MDA2LDU1MDA3LDU1MDA5LDU1MDEwLDU1MDExLDU1MDEzLDU1MDE0LDU1MDE1LDU1MDE3LDU1MDE4LDU1MDE5LDU1''@;'; put 'put ''MDIwLDU1MDIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MDIyLDU1MDIzLDU1MDI1LDU1MDI2LDU1MDI3LDU1MDI4LDU1MDMwLDU1MDMxLDU1MDMyLDU1MDMzLDU1MDM0LDU1MDM1LDU1MDM4LDU1MDM5LDU1MDQxLDU1MDQyLDU1MDQzLDU1MDQ1LDU1MDQ2LDU1MDQ3LDU1MDQ4''@;'; put 'put ''LDU1MDQ5LDU1MDUwLDU1MDUxLDU1MDUyLDU1MDUzLDU1MDU0LDU1MDU1LDU1MDU2LDU1MDU4LDU1MDU5LDU1MDYwLDUyODI0LDUyODI1LDUyODI4LDUyODMxLDUyODMyLDUyODMzLDUyODQwLDUyODQxLDUyODQzLDUyODQ1LDUyODUyLDUyODUzLDUyODU2LDUyODYwLDUyODY4LDUyODY5LDUy''@;'; put 'put ''ODcxLDUyODczLDUyODgwLDUyODgxLDUyODg0LDUyODg4LDUyODk2LDUyODk3LDUyODk5LDUyOTAwLDUyOTAxLDUyOTA4LDUyOTA5LDUyOTI5LDUyOTY0LDUyOTY1LDUyOTY4LDUyOTcxLDUyOTcyLDUyOTgwLDUyOTgxLDUyOTgzLDUyOTg0LDUyOTg1LDUyOTkyLDUyOTkzLDUyOTk2LDUzZTMs''@;'; put 'put ''NTMwMDgsNTMwMDksNTMwMTEsNTMwMTMsNTMwMjAsNTMwMjQsNTMwMjgsNTMwMzYsNTMwMzcsNTMwMzksNTMwNDAsNTMwNDEsNTMwNDgsNTMwNzYsNTMwNzcsNTMwODAsNTMwODQsNTMwOTIsNTMwOTMsNTMwOTUsNTMwOTcsNTMxMDQsNTMxMDUsNTMxMDgsNTMxMTIsNTMxMjAsNTMxMjUsNTMx''@;'; put 'put ''MzIsNTMxNTMsNTMxNjAsNTMxNjgsNTMxODgsNTMyMTYsNTMyMTcsNTMyMjAsNTMyMjQsNTMyMzIsNTMyMzMsNTMyMzUsNTMyMzcsNTMyNDQsNTMyNDgsNTMyNTIsNTMyNjUsNTMyNzIsNTMyOTMsNTMzMDAsNTMzMDEsNTMzMDQsNTMzMDgsNTUwNjEsNTUwNjIsNTUwNjMsNTUwNjYsNTUwNjcs''@;'; put 'put ''NTUwNjksNTUwNzAsNTUwNzEsNTUwNzMsNTUwNzQsNTUwNzUsNTUwNzYsNTUwNzcsNTUwNzgsNTUwNzksNTUwODIsNTUwODQsNTUwODYsNTUwODcsNTUwODgsNTUwODksNTUwOTAsNTUwOTEsNTUwOTQsNTUwOTUsNTUwOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwOTgsNTUw''@;'; put 'put ''OTksNTUxMDEsNTUxMDIsNTUxMDMsNTUxMDQsNTUxMDUsNTUxMDYsNTUxMDcsNTUxMDksNTUxMTAsNTUxMTIsNTUxMTQsNTUxMTUsNTUxMTYsNTUxMTcsNTUxMTgsNTUxMTksNTUxMjIsNTUxMjMsNTUxMjUsNTUxMzAsNTUxMzEsNTUxMzIsNTUxMzMsNTUxMzQsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTUxMzUsNTUxMzgsNTUxNDAsNTUxNDIsNTUxNDMsNTUxNDQsNTUxNDYsNTUxNDcsNTUxNDksNTUxNTAsNTUxNTEsNTUxNTMsNTUxNTQsNTUxNTUsNTUxNTcsNTUxNTgsNTUxNTksNTUxNjAsNTUxNjEsNTUxNjIsNTUxNjMsNTUxNjYsNTUxNjcsNTUxNjgsNTUxNzAsNTUx''@;'; put 'put ''NzEsNTUxNzIsNTUxNzMsNTUxNzQsNTUxNzUsNTUxNzgsNTUxNzksNTMzMTYsNTMzMTcsNTMzMTksNTMzMjEsNTMzMjgsNTMzMzIsNTMzMzYsNTMzNDQsNTMzNTYsNTMzNTcsNTMzNjAsNTMzNjQsNTMzNzIsNTMzNzMsNTMzNzcsNTM0MTIsNTM0MTMsNTM0MTYsNTM0MjAsNTM0MjgsNTM0Mjks''@;'; put 'put ''NTM0MzEsNTM0MzMsNTM0NDAsNTM0NDEsNTM0NDQsNTM0NDgsNTM0NDksNTM0NTYsNTM0NTcsNTM0NTksNTM0NjAsNTM0NjEsNTM0NjgsNTM0NjksNTM0NzIsNTM0NzYsNTM0ODQsNTM0ODUsNTM0ODcsNTM0ODgsNTM0ODksNTM0OTYsNTM1MTcsNTM1NTIsNTM1NTMsNTM1NTYsNTM1NjAsNTM1''@;'; put 'put ''NjIsNTM1NjgsNTM1NjksNTM1NzEsNTM1NzIsNTM1NzMsNTM1ODAsNTM1ODEsNTM1ODQsNTM1ODgsNTM1OTYsNTM1OTcsNTM1OTksNTM2MDEsNTM2MDgsNTM2MTIsNTM2MjgsNTM2MzYsNTM2NDAsNTM2NjQsNTM2NjUsNTM2NjgsNTM2NzIsNTM2ODAsNTM2ODEsNTM2ODMsNTM2ODUsNTM2OTAs''@;'; put 'put ''NTM2OTIsNTM2OTYsNTM3MjAsNTM3NDgsNTM3NTIsNTM3NjcsNTM3NjksNTM3NzYsNTM4MDQsNTM4MDUsNTM4MDgsNTM4MTIsNTM4MjAsNTM4MjEsNTM4MjMsNTM4MjUsNTM4MzIsNTM4NTIsNTUxODEsNTUxODIsNTUxODMsNTUxODUsNTUxODYsNTUxODcsNTUxODgsNTUxODksNTUxOTAsNTUx''@;'; put 'put ''OTEsNTUxOTQsNTUxOTYsNTUxOTgsNTUxOTksNTUyMDAsNTUyMDEsNTUyMDIsNTUyMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjAsNTM4ODgsNTM4ODksNTM4OTIsNTM4OTYsNTM5MDQsNTM5MDUsNTM5MDksNTM5MTYs''@;'; put 'put ''NTM5MjAsNTM5MjQsNTM5MzIsNTM5MzcsNTM5NDQsNTM5NDUsNTM5NDgsNTM5NTEsNTM5NTIsNTM5NTQsNTM5NjAsNTM5NjEsNTM5NjMsNTM5NzIsNTM5NzYsNTM5ODAsNTM5ODgsNTM5ODksNTRlMyw1NDAwMSw1NDAwNCw1NDAwOCw1NDAxNiw1NDAxNyw1NDAxOSw1NDAyMSw1NDAyOCw1NDAy''@;'; put 'put ''OSw1NDAzMCw1NDAzMiw1NDAzNiw1NDAzOCw1NDA0NCw1NDA0NSw1NDA0Nyw1NDA0OCw1NDA0OSw1NDA1Myw1NDA1Niw1NDA1Nyw1NDA2MCw1NDA2NCw1NDA3Miw1NDA3Myw1NDA3NSw1NDA3Niw1NDA3Nyw1NDA4NCw1NDA4NSw1NDE0MCw1NDE0MSw1NDE0NCw1NDE0OCw1NDE1Niw1NDE1Nyw1''@;'; put 'put ''NDE1OSw1NDE2MCw1NDE2MSw1NDE2OCw1NDE2OSw1NDE3Miw1NDE3Niw1NDE4NCw1NDE4NSw1NDE4Nyw1NDE4OSw1NDE5Niw1NDIwMCw1NDIwNCw1NDIxMiw1NDIxMyw1NDIxNiw1NDIxNyw1NDIyNCw1NDIzMiw1NDI0MSw1NDI0Myw1NDI1Miw1NDI1Myw1NDI1Niw1NDI2MCw1NDI2OCw1NDI2''@;'; put 'put ''OSw1NDI3MSw1NDI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''NDI4MCw1NDMwMSw1NDMzNiw1NDM0MCw1NDM2NCw1NDM2OCw1NDM3Miw1NDM4MSw1NDM4Myw1NDM5Miw1NDM5Myw1NDM5Niw1NDM5OSw1NDQwMCw1NDQwMiw1NDQwOCw1NDQwOSw1NDQxMSw1NDQxMyw1NDQyMCw1NDQ0MSw1NDQ3Niw1NDQ4MCw1NDQ4NCw1NDQ5Miw1NDQ5NSw1NDUwNCw1NDUw''@;'; put 'put ''OCw1NDUxMiw1NDUyMCw1NDUyMyw1NDUyNSw1NDUzMiw1NDUzNiw1NDU0MCw1NDU0OCw1NDU0OSw1NDU1MSw1NDU4OCw1NDU4OSw1NDU5Miw1NDU5Niw1NDYwNCw1NDYwNSw1NDYwNyw1NDYwOSw1NDYxNiw1NDYxNyw1NDYyMCw1NDYyNCw1NDYyOSw1NDYzMiw1NDYzMyw1NDYzNSw1NDYzNyw1''@;'; put 'put ''NDY0NCw1NDY0NSw1NDY0OCw1NDY1Miw1NDY2MCw1NDY2MSw1NDY2Myw1NDY2NCw1NDY2NSw1NDY3Miw1NDY5Myw1NDcyOCw1NDcyOSw1NDczMiw1NDczNiw1NDczOCw1NDc0NCw1NDc0NSw1NDc0Nyw1NDc0OSw1NDc1Niw1NDc1Nyw1NDc2MCw1NDc2NCw1NDc3Miw1NDc3Myw1NDc3NSw1NDc3''@;'; put 'put ''Nyw1NDc4NCw1NDc4NSw1NDc4OCw1NDc5Miw1NDgwMCw1NDgwMSw1NDgwMyw1NDgwNCw1NDgwNSw1NDgxMiw1NDgxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgyMCw1NDgyOSw1NDg0MCw1NDg0MSw1NDg0NCw1NDg0OCw1NDg1Myw1NDg1Niw1NDg1Nyw1NDg1OSw1NDg2MSw1NDg2NSw1NDg2OCw1NDg2OSw1NDg3Miw1NDg3Niw1NDg4Nyw1NDg4OSw1NDg5''@;'; put 'put ''Niw1NDg5Nyw1NDkwMCw1NDkxNSw1NDkxNyw1NDkyNCw1NDkyNSw1NDkyOCw1NDkzMiw1NDk0MSw1NDk0Myw1NDk0NSw1NDk1Miw1NDk1Niw1NDk2MCw1NDk2OSw1NDk3MSw1NDk4MCw1NDk4MSw1NDk4NCw1NDk4OCw1NDk5Myw1NDk5Niw1NDk5OSw1NTAwMSw1NTAwOCw1NTAxMiw1NTAxNiw1''@;'; put 'put ''NTAyNCw1NTAyOSw1NTAzNiw1NTAzNyw1NTA0MCw1NTA0NCw1NTA1Nyw1NTA2NCw1NTA2NSw1NTA2OCw1NTA3Miw1NTA4MCw1NTA4MSw1NTA4Myw1NTA4NSw1NTA5Miw1NTA5Myw1NTA5Niw1NTEwMCw1NTEwOCw1NTExMSw1NTExMyw1NTEyMCw1NTEyMSw1NTEyNCw1NTEyNiw1NTEyNyw1NTEy''@;'; put 'put ''OCw1NTEyOSw1NTEzNiw1NTEzNyw1NTEzOSw1NTE0MSw1NTE0NSw1NTE0OCw1NTE1Miw1NTE1Niw1NTE2NCw1NTE2NSw1NTE2OSw1NTE3Niw1NTE3Nyw1NTE4MCw1NTE4NCw1NTE5Miw1NTE5Myw1NTE5NSw1NTE5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; 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 ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMjg1LDIwMzM5LDIwNTUxLDIwNzI5LDIxMTUyLDIxNDg3LDIxNjIxLDIxNzMzLDIyMDI1LDIzMjMzLDIzNDc4LDI2MjQ3LDI2NTUwLDI2NTUxLDI2NjA3LDI3NDY4LDI5''@;'; put 'put ''NjM0LDMwMTQ2LDMxMjkyLDMzNDk5LDMzNTQwLDM0OTAzLDM0OTUyLDM1MzgyLDM2MDQwLDM2MzAzLDM2NjAzLDM2ODM4LDM5MzgxLDIxMDUxLDIxMzY0LDIxNTA4LDI0NjgyLDI0OTMyLDI3NTgwLDI5NjQ3LDMzMDUwLDM1MjU4LDM1MjgyLDM4MzA3LDIwMzU1LDIxMDAyLDIyNzE4LDIyOTA0''@;'; put 'put ''LDIzMDE0LDI0MTc4LDI0MTg1LDI1MDMxLDI1NTM2LDI2NDM4LDI2NjA0LDI2NzUxLDI4NTY3LDMwMjg2LDMwNDc1LDMwOTY1LDMxMjQwLDMxNDg3LDMxNzc3LDMyOTI1LDMzMzkwLDMzMzkzLDM1NTYzLDM4MjkxLDIwMDc1LDIxOTE3LDI2MzU5LDI4MjEyLDMwODgzLDMxNDY5LDMzODgzLDM1''@;'; put 'put ''MDg4LDM0NjM4LDM4ODI0LDIxMjA4LDIyMzUwLDIyNTcwLDIzODg0LDI0ODYzLDI1MDIyLDI1MTIxLDI1OTU0LDI2NTc3LDI3MjA0LDI4MTg3LDI5OTc2LDMwMTMxLDMwNDM1LDMwNjQwLDMyMDU4LDM3MDM5LDM3OTY5LDM3OTcwLDQwODUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMjgzLDIzNzI0LDMwMDAyLDMyOTg3LDM3NDQwLDM4Mjk2LDIxMDgzLDIy''@;'; put 'put ''NTM2LDIzMDA0LDIzNzEzLDIzODMxLDI0MjQ3LDI0Mzc4LDI0Mzk0LDI0OTUxLDI3NzQzLDMwMDc0LDMwMDg2LDMxOTY4LDMyMTE1LDMyMTc3LDMyNjUyLDMzMTA4LDMzMzEzLDM0MTkzLDM1MTM3LDM1NjExLDM3NjI4LDM4NDc3LDQwMDA3LDIwMTcxLDIwMjE1LDIwNDkxLDIwOTc3LDIyNjA3''@;'; put 'put ''LDI0ODg3LDI0ODk0LDI0OTM2LDI1OTEzLDI3MTE0LDI4NDMzLDMwMTE3LDMwMzQyLDMwNDIyLDMxNjIzLDMzNDQ1LDMzOTk1LDYzNzQ0LDM3Nzk5LDM4MjgzLDIxODg4LDIzNDU4LDIyMzUzLDYzNzQ1LDMxOTIzLDMyNjk3LDM3MzAxLDIwNTIwLDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1''@;'; put 'put ''NDU0LDI1ODE4LDI1ODMxLDI4MTkyLDI4ODQ0LDMxMDY3LDM2MzE3LDM2MzgyLDYzNzQ2LDM2OTg5LDM3NDQ1LDM3NjI0LDIwMDk0LDIwMjE0LDIwNTgxLDI0MDYyLDI0MzE0LDI0ODM4LDI2OTY3LDMzMTM3LDM0Mzg4LDM2NDIzLDM3NzQ5LDM5NDY3LDIwMDYyLDIwNjI1LDI2NDgwLDI2Njg4''@;'; put 'put ''LDIwNzQ1LDIxMTMzLDIxMTM4LDI3Mjk4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDMwNjUyLDM3MzkyLDQwNjYwLDIxMTYzLDI0NjIzLDM2ODUwLDIwNTUyLDI1MDAxLDI1NTgxLDI1ODAyLDI2Njg0LDI3MjY4LDI4NjA4LDMzMTYwLDM1MjMzLDM4NTQ4LDIyNTMzLDI5MzA5LDI5MzU2LDI5OTU2LDMyMTIxLDMyMzY1LDMyOTM3LDM1MjExLDM1NzAwLDM2OTYz''@;'; put 'put ''LDQwMjczLDI1MjI1LDI3NzcwLDI4NTAwLDMyMDgwLDMyNTcwLDM1MzYzLDIwODYwLDI0OTA2LDMxNjQ1LDM1NjA5LDM3NDYzLDM3NzcyLDIwMTQwLDIwNDM1LDIwNTEwLDIwNjcwLDIwNzQyLDIxMTg1LDIxMTk3LDIxMzc1LDIyMzg0LDIyNjU5LDI0MjE4LDI0NDY1LDI0OTUwLDI1MDA0LDI1''@;'; put 'put ''ODA2LDI1OTY0LDI2MjIzLDI2Mjk5LDI2MzU2LDI2Nzc1LDI4MDM5LDI4ODA1LDI4OTEzLDI5ODU1LDI5ODYxLDI5ODk4LDMwMTY5LDMwODI4LDMwOTU2LDMxNDU1LDMxNDc4LDMyMDY5LDMyMTQ3LDMyNzg5LDMyODMxLDMzMDUxLDMzNjg2LDM1Njg2LDM2NjI5LDM2ODg1LDM3ODU3LDM4OTE1''@;'; put 'put ''LDM4OTY4LDM5NTE0LDM5OTEyLDIwNDE4LDIxODQzLDIyNTg2LDIyODY1LDIzMzk1LDIzNjIyLDI0NzYwLDI1MTA2LDI2NjkwLDI2ODAwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODU2LDI4MzMwLDMwMDI4LDMwMzI4LDMwOTI2LDMxMjkzLDMxOTk1LDMyMzYzLDMyMzgwLDM1MzM2LDM1NDg5LDM1OTAzLDM4NTQyLDQwMzg4LDIxNDc2LDIxNDgxLDIxNTc4''@;'; put 'put ''LDIxNjE3LDIyMjY2LDIyOTkzLDIzMzk2LDIzNjExLDI0MjM1LDI1MzM1LDI1OTExLDI1OTI1LDI1OTcwLDI2MjcyLDI2NTQzLDI3MDczLDI3ODM3LDMwMjA0LDMwMzUyLDMwNTkwLDMxMjk1LDMyNjYwLDMyNzcxLDMyOTI5LDMzMTY3LDMzNTEwLDMzNTMzLDMzNzc2LDM0MjQxLDM0ODY1LDM0''@;'; put 'put ''OTk2LDM1NDkzLDYzNzQ3LDM2NzY0LDM3Njc4LDM4NTk5LDM5MDE1LDM5NjQwLDQwNzIzLDIxNzQxLDI2MDExLDI2MzU0LDI2NzY3LDMxMjk2LDM1ODk1LDQwMjg4LDIyMjU2LDIyMzcyLDIzODI1LDI2MTE4LDI2ODAxLDI2ODI5LDI4NDE0LDI5NzM2LDM0OTc0LDM5OTA4LDI3NzUyLDYzNzQ4''@;'; put 'put ''LDM5NTkyLDIwMzc5LDIwODQ0LDIwODQ5LDIxMTUxLDIzMzgwLDI0MDM3LDI0NjU2LDI0Njg1LDI1MzI5LDI1NTExLDI1OTE1LDI5NjU3LDMxMzU0LDM0NDY3LDM2MDAyLDM4Nzk5LDIwMDE4LDIzNTIxLDI1MDk2LDI2NTI0LDI5OTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTg1LDMzNzQ3LDM1NDYzLDM1NTA2LDM2MzI4LDM2OTQyLDM3NzA3LDM4OTgy''@;'; put 'put ''LDI0Mjc1LDI3MTEyLDM0MzAzLDM3MTAxLDYzNzQ5LDIwODk2LDIzNDQ4LDIzNTMyLDI0OTMxLDI2ODc0LDI3NDU0LDI4NzQ4LDI5NzQzLDI5OTEyLDMxNjQ5LDMyNTkyLDMzNzMzLDM1MjY0LDM2MDExLDM4MzY0LDM5MjA4LDIxMDM4LDI0NjY5LDI1MzI0LDM2ODY2LDIwMzYyLDIwODA5LDIx''@;'; put 'put ''MjgxLDIyNzQ1LDI0MjkxLDI2MzM2LDI3OTYwLDI4ODI2LDI5Mzc4LDI5NjU0LDMxNTY4LDMzMDA5LDM3OTc5LDIxMzUwLDI1NDk5LDMyNjE5LDIwMDU0LDIwNjA4LDIyNjAyLDIyNzUwLDI0NjE4LDI0ODcxLDI1Mjk2LDI3MDg4LDM5NzQ1LDIzNDM5LDMyMDI0LDMyOTQ1LDM2NzAzLDIwMTMy''@;'; put 'put ''LDIwNjg5LDIxNjc2LDIxOTMyLDIzMzA4LDIzOTY4LDI0MDM5LDI1ODk4LDI1OTM0LDI2NjU3LDI3MjExLDI5NDA5LDMwMzUwLDMwNzAzLDMyMDk0LDMyNzYxLDMzMTg0LDM0MTI2LDM0NTI3LDM2NjExLDM2Njg2LDM3MDY2LDM5MTcxLDM5NTA5LDM5ODUxLDE5OTkyLDIwMDM3LDIwMDYxLDIw''@;'; put 'put ''MTY3LDIwNDY1LDIwODU1LDIxMjQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDIxMzEyLDIxNDc1LDIxNDc3LDIxNjQ2LDIyMDM2LDIyMzg5LDIyNDM0LDIzNDk1LDIzOTQzLDI0MjcyLDI1MDg0LDI1MzA0LDI1OTM3LDI2NTUyLDI2NjAxLDI3MDgzLDI3NDcyLDI3NTkwLDI3NjI4LDI3NzE0LDI4MzE3LDI4NzkyLDI5Mzk5LDI5NTkwLDI5Njk5LDMwNjU1LDMw''@;'; put 'put ''Njk3LDMxMzUwLDMyMTI3LDMyNzc3LDMzMjc2LDMzMjg1LDMzMjkwLDMzNTAzLDM0OTE0LDM1NjM1LDM2MDkyLDM2NTQ0LDM2ODgxLDM3MDQxLDM3NDc2LDM3NTU4LDM5Mzc4LDM5NDkzLDQwMTY5LDQwNDA3LDQwODYwLDIyMjgzLDIzNjE2LDMzNzM4LDM4ODE2LDM4ODI3LDQwNjI4LDIxNTMx''@;'; put 'put ''LDMxMzg0LDMyNjc2LDM1MDMzLDM2NTU3LDM3MDg5LDIyNTI4LDIzNjI0LDI1NDk2LDMxMzkxLDIzNDcwLDI0MzM5LDMxMzUzLDMxNDA2LDMzNDIyLDM2NTI0LDIwNTE4LDIxMDQ4LDIxMjQwLDIxMzY3LDIyMjgwLDI1MzMxLDI1NDU4LDI3NDAyLDI4MDk5LDMwNTE5LDIxNDEzLDI5NTI3LDM0''@;'; put 'put ''MTUyLDM2NDcwLDM4MzU3LDI2NDI2LDI3MzMxLDI4NTI4LDM1NDM3LDM2NTU2LDM5MjQzLDYzNzUwLDI2MjMxLDI3NTEyLDM2MDIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM5NzQwLDYzNzUxLDIxNDgzLDIyMzE3LDIyODYyLDI1NTQyLDI3MTMxLDI5Njc0LDMwNzg5LDMxNDE4LDMxNDI5LDMxOTk4LDMzOTA5LDM1MjE1LDM2MjExLDM2OTE3LDM4MzEyLDIx''@;'; put 'put ''MjQzLDIyMzQzLDMwMDIzLDMxNTg0LDMzNzQwLDM3NDA2LDYzNzUyLDI3MjI0LDIwODExLDIxMDY3LDIxMTI3LDI1MTE5LDI2ODQwLDI2OTk3LDM4NTUzLDIwNjc3LDIxMTU2LDIxMjIwLDI1MDI3LDI2MDIwLDI2NjgxLDI3MTM1LDI5ODIyLDMxNTYzLDMzNDY1LDMzNzcxLDM1MjUwLDM1NjQx''@;'; put 'put ''LDM2ODE3LDM5MjQxLDYzNzUzLDIwMTcwLDIyOTM1LDI1ODEwLDI2MTI5LDI3Mjc4LDI5NzQ4LDMxMTA1LDMxMTY1LDMzNDQ5LDM0OTQyLDM0OTQzLDM1MTY3LDYzNzU0LDM3NjcwLDIwMjM1LDIxNDUwLDI0NjEzLDI1MjAxLDI3NzYyLDMyMDI2LDMyMTAyLDIwMTIwLDIwODM0LDMwNjg0LDMy''@;'; put 'put ''OTQzLDIwMjI1LDIwMjM4LDIwODU0LDIwODY0LDIxOTgwLDIyMTIwLDIyMzMxLDIyNTIyLDIyNTI0LDIyODA0LDIyODU1LDIyOTMxLDIzNDkyLDIzNjk2LDIzODIyLDI0MDQ5LDI0MTkwLDI0NTI0LDI1MjE2LDI2MDcxLDI2MDgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2Mzk4LDI2Mzk5LDI2NDYyLDI2ODI3LDI2ODIwLDI3MjMxLDI3NDUwLDI3NjgzLDI3''@;'; put 'put ''NzczLDI3Nzc4LDI4MTAzLDI5NTkyLDI5NzM0LDI5NzM4LDI5ODI2LDI5ODU5LDMwMDcyLDMwMDc5LDMwODQ5LDMwOTU5LDMxMDQxLDMxMDQ3LDMxMDQ4LDMxMDk4LDMxNjM3LDMyZTMsMzIxODYsMzI2NDgsMzI3NzQsMzI4MTMsMzI5MDgsMzUzNTIsMzU2NjMsMzU5MTIsMzYyMTUsMzc2NjUs''@;'; put 'put ''Mzc2NjgsMzkxMzgsMzkyNDksMzk0MzgsMzk0MzksMzk1MjUsNDA1OTQsMzIyMDIsMjAzNDIsMjE1MTMsMjUzMjYsMjY3MDgsMzczMjksMjE5MzEsMjA3OTQsNjM3NTUsNjM3NTYsMjMwNjgsMjUwNjIsNjM3NTcsMjUyOTUsMjUzNDMsNjM3NTgsNjM3NTksNjM3NjAsNjM3NjEsNjM3NjIsNjM3''@;'; put 'put ''NjMsMzcwMjcsNjM3NjQsNjM3NjUsNjM3NjYsNjM3NjcsNjM3NjgsMzU1ODIsNjM3NjksNjM3NzAsNjM3NzEsNjM3NzIsMjYyNjIsNjM3NzMsMjkwMTQsNjM3NzQsNjM3NzUsMzg2MjcsNjM3NzYsMjU0MjMsMjU0NjYsMjEzMzUsNjM3NzcsMjY1MTEsMjY5NzYsMjgyNzUsNjM3NzgsMzAwMDcs''@;'; put 'put ''NjM3NzksNjM3ODAsNjM3ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsMzIwMTMsNjM3ODIsNjM3ODMsMzQ5MzAsMjIyMTgsMjMwNjQsNjM3ODQsNjM3ODUsNjM3ODYsNjM3ODcsNjM3ODgsMjAwMzUsNjM3ODksMjA4MzksMjI4NTYsMjY2MDgsMzI3ODQsNjM3OTAsMjI4OTksMjQxODAsMjU3NTQsMzExNzgsMjQ1NjUsMjQ2ODQsMjUyODgsMjU0NjcsMjM1Mjcs''@;'; put 'put ''MjM1MTEsMjExNjIsNjM3OTEsMjI5MDAsMjQzNjEsMjQ1OTQsNjM3OTIsNjM3OTMsNjM3OTQsMjk3ODUsNjM3OTUsNjM3OTYsNjM3OTcsNjM3OTgsNjM3OTksNjM4MDAsMzkzNzcsNjM4MDEsNjM4MDIsNjM4MDMsNjM4MDQsNjM4MDUsNjM4MDYsNjM4MDcsNjM4MDgsNjM4MDksNjM4MTAsNjM4''@;'; put 'put ''MTEsMjg2MTEsNjM4MTIsNjM4MTMsMzMyMTUsMzY3ODYsMjQ4MTcsNjM4MTQsNjM4MTUsMzMxMjYsNjM4MTYsNjM4MTcsMjM2MTUsNjM4MTgsNjM4MTksNjM4MjAsNjM4MjEsNjM4MjIsNjM4MjMsNjM4MjQsNjM4MjUsMjMyNzMsMzUzNjUsMjY0OTEsMzIwMTYsNjM4MjYsNjM4MjcsNjM4Mjgs''@;'; put 'put ''NjM4MjksNjM4MzAsNjM4MzEsMzMwMjEsNjM4MzIsNjM4MzMsMjM2MTIsMjc4NzcsMjEzMTEsMjgzNDYsMjI4MTAsMzM1OTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAwMjUsMjAxNTAsMjAyOTQsMjE5MzQsMjIyOTYsMjI3MjcsMjQ0MDYsMjYwMzksMjYwODYsMjcyNjQsMjc1NzMsMjgyMzcsMzA3MDEsMzE0NzEsMzE3NzQsMzIyMjIsMzQ1MDcsMzQ5NjIs''@;'; put 'put ''MzcxNzAsMzc3MjMsMjU3ODcsMjg2MDYsMjk1NjIsMzAxMzYsMzY5NDgsMjE4NDYsMjIzNDksMjUwMTgsMjU4MTIsMjYzMTEsMjgxMjksMjgyNTEsMjg1MjUsMjg2MDEsMzAxOTIsMzI4MzUsMzMyMTMsMzQxMTMsMzUyMDMsMzU1MjcsMzU2NzQsMzc2NjMsMjc3OTUsMzAwMzUsMzE1NzIsMzYz''@;'; put 'put ''NjcsMzY5NTcsMjE3NzYsMjI1MzAsMjI2MTYsMjQxNjIsMjUwOTUsMjU3NTgsMjY4NDgsMzAwNzAsMzE5NTgsMzQ3MzksNDA2ODAsMjAxOTUsMjI0MDgsMjIzODIsMjI4MjMsMjM1NjUsMjM3MjksMjQxMTgsMjQ0NTMsMjUxNDAsMjU4MjUsMjk2MTksMzMyNzQsMzQ5NTUsMzYwMjQsMzg1Mzgs''@;'; put 'put ''NDA2NjcsMjM0MjksMjQ1MDMsMjQ3NTUsMjA0OTgsMjA5OTIsMjEwNDAsMjIyOTQsMjI1ODEsMjI2MTUsMjM1NjYsMjM2NDgsMjM3OTgsMjM5NDcsMjQyMzAsMjQ0NjYsMjQ3NjQsMjUzNjEsMjU0ODEsMjU2MjMsMjY2OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NzMsMjczMzAsMjgxMjAsMjgxOTMsMjgzNzIsMjg2NDQsMjkxODIsMzA0MjgsMzA1ODUs''@;'; put 'put ''MzExNTMsMzEyOTEsMzM3OTYsMzUyNDEsMzYwNzcsMzYzMzksMzY0MjQsMzY4NjcsMzY4ODQsMzY5NDcsMzcxMTcsMzc3MDksMzg1MTgsMzg4NzYsMjc2MDIsMjg2NzgsMjkyNzIsMjkzNDYsMjk1NDQsMzA1NjMsMzExNjcsMzE3MTYsMzI0MTEsMzU3MTIsMjI2OTcsMjQ3NzUsMjU5NTgsMjYx''@;'; put 'put ''MDksMjYzMDIsMjc3ODgsMjg5NTgsMjkxMjksMzU5MzAsMzg5MzEsMjAwNzcsMzEzNjEsMjAxODksMjA5MDgsMjA5NDEsMjEyMDUsMjE1MTYsMjQ5OTksMjY0ODEsMjY3MDQsMjY4NDcsMjc5MzQsMjg1NDAsMzAxNDAsMzA2NDMsMzE0NjEsMzMwMTIsMzM4OTEsMzc1MDksMjA4MjgsMjYwMDcs''@;'; put 'put ''MjY0NjAsMjY1MTUsMzAxNjgsMzE0MzEsMzM2NTEsNjM4MzQsMzU5MTAsMzY4ODcsMzg5NTcsMjM2NjMsMzMyMTYsMzM0MzQsMzY5MjksMzY5NzUsMzczODksMjQ0NzEsMjM5NjUsMjcyMjUsMjkxMjgsMzAzMzEsMzE1NjEsMzQyNzYsMzU1ODgsMzcxNTksMzk0NzIsMjE4OTUsMjUwNzgsNjM4''@;'; put 'put ''MzUsMzAzMTMsMzI2NDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MzQzNjcsMzQ3NDYsMzUwNjQsMzcwMDcsNjM4MzYsMjc5MzEsMjg4ODksMjk2NjIsMzIwOTcsMzM4NTMsNjM4MzcsMzcyMjYsMzk0MDksNjM4MzgsMjAwOTgsMjEzNjUsMjczOTYsMjc0MTAsMjg3MzQsMjkyMTEsMzQzNDksNDA0NzgsMjEwNjgsMzY3NzEsMjM4ODgsMjU4MjksMjU5MDAsMjc0''@;'; put 'put ''MTQsMjg2NTEsMzE4MTEsMzI0MTIsMzQyNTMsMzUxNzIsMzUyNjEsMjUyODksMzMyNDAsMzQ4NDcsMjQyNjYsMjYzOTEsMjgwMTAsMjk0MzYsMjk3MDEsMjk4MDcsMzQ2OTAsMzcwODYsMjAzNTgsMjM4MjEsMjQ0ODAsMzM4MDIsMjA5MTksMjU1MDQsMzAwNTMsMjAxNDIsMjA0ODYsMjA4NDEs''@;'; put 'put ''MjA5MzcsMjY3NTMsMjcxNTMsMzE5MTgsMzE5MjEsMzE5NzUsMzMzOTEsMzU1MzgsMzY2MzUsMzczMjcsMjA0MDYsMjA3OTEsMjEyMzcsMjE1NzAsMjQzMDAsMjQ5NDIsMjUxNTAsMjYwNTMsMjczNTQsMjg2NzAsMzEwMTgsMzQyNjgsMzQ4NTEsMzgzMTcsMzk1MjIsMzk1MzAsNDA1OTksNDA2''@;'; put 'put ''NTQsMjExNDcsMjYzMTAsMjc1MTEsMjg3MDEsMzEwMTksMzY3MDYsMzg3MjIsMjQ5NzYsMjUwODgsMjU4OTEsMjg0NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkwMDEsMjk4MzMsMzIyNDQsMzI4NzksMzQwMzAsMzY2NDYsMzY4OTksMzc3MDYsMjA5MjUsMjEwMTUsMjExNTUsMjc5MTYsMjg4NzIsMzUwMTAsMjQyNjUsMjU5ODYsMjc1NjYsMjg2MTAsMzE4''@;'; put 'put ''MDYsMjk1NTcsMjAxOTYsMjAyNzgsMjIyNjUsNjM4MzksMjM3MzgsMjM5OTQsMjQ2MDQsMjk2MTgsMzE1MzMsMzI2NjYsMzI3MTgsMzI4MzgsMzY4OTQsMzc0MjgsMzg2NDYsMzg3MjgsMzg5MzYsNDA4MDEsMjAzNjMsMjg1ODMsMzExNTAsMzczMDAsMzg1ODMsMjEyMTQsNjM4NDAsMjU3MzYs''@;'; put 'put ''MjU3OTYsMjczNDcsMjg1MTAsMjg2OTYsMjkyMDAsMzA0MzksMzI3NjksMzQzMTAsMzQzOTYsMzYzMzUsMzY2MTMsMzg3MDYsMzk3OTEsNDA0NDIsNDA1NjUsMzA4NjAsMzExMDMsMzIxNjAsMzM3MzcsMzc2MzYsNDA1NzUsNDA1OTUsMzU1NDIsMjI3NTEsMjQzMjQsMjY0MDcsMjg3MTEsMjk5''@;'; put 'put ''MDMsMzE4NDAsMzI4OTQsMjA3NjksMjg3MTIsMjkyODIsMzA5MjIsMzYwMzQsMzYwNTgsMzYwODQsMzg2NDcsMjAxMDIsMjA2OTgsMjM1MzQsMjQyNzgsMjYwMDksMjkxMzQsMzAyNzQsMzA2MzcsMzI4NDIsMzQwNDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5ODgsMzk3MTksNDA4NDUsMjI3NDQsMjMxMDUsMjM2NTAsMjcxNTUsMjgxMjIsMjg0MzEsMzAy''@;'; put 'put ''NjcsMzIwNDcsMzIzMTEsMzQwNzgsMzUxMjgsMzc4NjAsMzg0NzUsMjExMjksMjYwNjYsMjY2MTEsMjcwNjAsMjc5NjksMjgzMTYsMjg2ODcsMjk3MDUsMjk3OTIsMzAwNDEsMzAyNDQsMzA4MjcsMzU2MjgsMzkwMDYsMjA4NDUsMjUxMzQsMzg1MjAsMjAzNzQsMjA1MjMsMjM4MzMsMjgxMzgs''@;'; put 'put ''MzIxODQsMzY2NTAsMjQ0NTksMjQ5MDAsMjY2NDcsNjM4NDEsMzg1MzQsMjEyMDIsMzI5MDcsMjA5NTYsMjA5NDAsMjY5NzQsMzEyNjAsMzIxOTAsMzM3NzcsMzg1MTcsMjA0NDIsMjEwMzMsMjE0MDAsMjE1MTksMjE3NzQsMjM2NTMsMjQ3NDMsMjY0NDYsMjY3OTIsMjgwMTIsMjkzMTMsMjk0''@;'; put 'put ''MzIsMjk3MDIsMjk4MjcsNjM4NDIsMzAxNzgsMzE4NTIsMzI2MzMsMzI2OTYsMzM2NzMsMzUwMjMsMzUwNDEsMzczMjQsMzczMjgsMzg2MjYsMzk4ODEsMjE1MzMsMjg1NDIsMjkxMzYsMjk4NDgsMzQyOTgsMzY1MjIsMzg1NjMsNDAwMjMsNDA2MDcsMjY1MTksMjgxMDcsMjk3NDcsMzMyNTYs''@;'; put 'put ''Mzg2NzgsMzA3NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzE0''@;'; put 'put ''MzUsMzE1MjAsMzE4OTAsMjU3MDUsMjk4MDIsMzAxOTQsMzA5MDgsMzA5NTIsMzkzNDAsMzk3NjQsNDA2MzUsMjM1MTgsMjQxNDksMjg0NDgsMzMxODAsMzM3MDcsMzdlMywxOTk3NSwyMTMyNSwyMzA4MSwyNDAxOCwyNDM5OCwyNDkzMCwyNTQwNSwyNjIxNywyNjM2NCwyODQxNSwyODQ1OSwy''@;'; put 'put ''ODc3MSwzMDYyMiwzMzgzNiwzNDA2NywzNDg3NSwzNjYyNywzOTIzNywzOTk5NSwyMTc4OCwyNTI3MywyNjQxMSwyNzgxOSwzMzU0NSwzNTE3OCwzODc3OCwyMDEyOSwyMjkxNiwyNDUzNiwyNDUzNywyNjM5NSwzMjE3OCwzMjU5NiwzMzQyNiwzMzU3OSwzMzcyNSwzNjYzOCwzNzAxNywyMjQ3''@;'; put 'put ''NSwyMjk2OSwyMzE4NiwyMzUwNCwyNjE1MSwyNjUyMiwyNjc1NywyNzU5OSwyOTAyOCwzMjYyOSwzNjAyMywzNjA2NywzNjk5MywzOTc0OSwzMzAzMiwzNTk3OCwzODQ3NiwzOTQ4OCw0MDYxMywyMzM5MSwyNzY2NywyOTQ2NywzMDQ1MCwzMDQzMSwzMzgwNCwyMDkwNiwzNTIxOSwyMDgxMywy''@;'; put 'put ''MDg4NSwyMTE5MywyNjgyNSwyNzc5NiwzMDQ2OCwzMDQ5NiwzMjE5MSwzMjIzNiwzODc1NCw0MDYyOSwyODM1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDA2NSwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwyNjI2OSwyNjkxOSwyODMxOSwzMDM5OSwzMDYwOSwzMzU1OSwzMzk4NiwzNDcxOSwzNzIyNSwzNzUyOCw0MDE4MCwzNDk0NiwyMDM5OCwyMDg4Miwy''@;'; put 'put ''MTIxNSwyMjk4MiwyNDEyNSwyNDkxNywyNTcyMCwyNTcyMSwyNjI4NiwyNjU3NiwyNzE2OSwyNzU5NywyNzYxMSwyOTI3OSwyOTI4MSwyOTc2MSwzMDUyMCwzMDY4MywzMjc5MSwzMzQ2OCwzMzU0MSwzNTU4NCwzNTYyNCwzNTk4MCwyNjQwOCwyNzc5MiwyOTI4NywzMDQ0NiwzMDU2NiwzMTMw''@;'; put 'put ''Miw0MDM2MSwyNzUxOSwyNzc5NCwyMjgxOCwyNjQwNiwzMzk0NSwyMTM1OSwyMjY3NSwyMjkzNywyNDI4NywyNTU1MSwyNjE2NCwyNjQ4MywyODIxOCwyOTQ4MywzMTQ0NywzMzQ5NSwzNzY3MiwyMTIwOSwyNDA0MywyNTAwNiwyNTAzNSwyNTA5OCwyNTI4NywyNTc3MSwyNjA4MCwyNjk2OSwy''@;'; put 'put ''NzQ5NCwyNzU5NSwyODk2MSwyOTY4NywzMDA0NSwzMjMyNiwzMzMxMCwzMzUzOCwzNDE1NCwzNTQ5MSwzNjAzMSwzODY5NSw0MDI4OSwyMjY5Niw0MDY2NCwyMDQ5NywyMTAwNiwyMTU2MywyMTgzOSwyNTk5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzc2NiwzMjAxMCwzMjAxMSwzMjg2MiwzNDQ0MiwzODI3MiwzODYzOSwyMTI0NywyNzc5NywyOTI4OSwy''@;'; put 'put ''MTYxOSwyMzE5NCwyMzYxNCwyMzg4MywyNDM5NiwyNDQ5NCwyNjQxMCwyNjgwNiwyNjk3OSwyODIyMCwyODIyOCwzMDQ3MywzMTg1OSwzMjY1NCwzNDE4MywzNTU5OCwzNjg1NSwzODc1Myw0MDY5MiwyMzczNSwyNDc1OCwyNDg0NSwyNTAwMywyNTkzNSwyNjEwNywyNjEwOCwyNzY2NSwyNzg4''@;'; put 'put ''NywyOTU5OSwyOTY0MSwzMjIyNSwzODI5MiwyMzQ5NCwzNDU4OCwzNTYwMCwyMTA4NSwyMTMzOCwyNTI5MywyNTYxNSwyNTc3OCwyNjQyMCwyNzE5MiwyNzg1MCwyOTYzMiwyOTg1NCwzMTYzNiwzMTg5MywzMjI4MywzMzE2MiwzMzMzNCwzNDE4MCwzNjg0MywzODY0OSwzOTM2MSwyMDI3Niwy''@;'; put 'put ''MTMyMiwyMTQ1MywyMTQ2NywyNTI5MiwyNTY0NCwyNTg1NiwyNjAwMSwyNzA3NSwyNzg4NiwyODUwNCwyOTY3NywzMDAzNiwzMDI0MiwzMDQzNiwzMDQ2MCwzMDkyOCwzMDk3MSwzMTAyMCwzMjA3MCwzMzMyNCwzNDc4NCwzNjgyMCwzODkzMCwzOTE1MSwyMTE4NywyNTMwMCwyNTc2NSwyODE5''@;'; put 'put ''NiwyODQ5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDMzMiwz''@;'; put 'put ''NjI5OSwzNzI5NywzNzQ3NCwzOTY2MiwzOTc0NywyMDUxNSwyMDYyMSwyMjM0NiwyMjk1MiwyMzU5MiwyNDEzNSwyNDQzOSwyNTE1MSwyNTkxOCwyNjA0MSwyNjA0OSwyNjEyMSwyNjUwNywyNzAzNiwyODM1NCwzMDkxNywzMjAzMywzMjkzOCwzMzE1MiwzMzMyMywzMzQ1OSwzMzk1MywzNDQ0''@;'; put 'put ''NCwzNTM3MCwzNTYwNywzNzAzMCwzODQ1MCw0MDg0OCwyMDQ5MywyMDQ2Nyw2Mzg0MywyMjUyMSwyNDQ3MiwyNTMwOCwyNTQ5MCwyNjQ3OSwyODIyNywyODk1MywzMDQwMywzMjk3MiwzMjk4NiwzNTA2MCwzNTA2MSwzNTA5NywzNjA2NCwzNjY0OSwzNzE5NywzODUwNiwyMDI3MSwyMDMzNiwy''@;'; put 'put ''NDA5MSwyNjU3NSwyNjY1OCwzMDMzMywzMDMzNCwzOTc0OCwyNDE2MSwyNzE0NiwyOTAzMywyOTE0MCwzMDA1OCw2Mzg0NCwzMjMyMSwzNDExNSwzNDI4MSwzOTEzMiwyMDI0MCwzMTU2NywzMjYyNCwzODMwOSwyMDk2MSwyNDA3MCwyNjgwNSwyNzcxMCwyNzcyNiwyNzg2NywyOTM1OSwzMTY4''@;'; put 'put ''NCwzMzUzOSwyNzg2MSwyOTc1NCwyMDczMSwyMTEyOCwyMjcyMSwyNTgxNiwyNzI4NywyOTg2MywzMDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDg4NywzNDMyNywzODM3MCwzODcxMyw2Mzg0NSwyMTM0MiwyNDMyMSwzNTcyMiwzNjc3NiwzNjc4MywzNzAwMiwyMTAyOSwzMDYyOSw0MDAwOSw0MDcxMiwxOTk5MywyMDQ4MiwyMDg1MywyMzY0MywyNDE4''@;'; put 'put ''MywyNjE0MiwyNjE3MCwyNjU2NCwyNjgyMSwyODg1MSwyOTk1MywzMDE0OSwzMTE3NywzMTQ1MywzNjY0NywzOTIwMCwzOTQzMiwyMDQ0NSwyMjU2MSwyMjU3NywyMzU0MiwyNjIyMiwyNzQ5MywyNzkyMSwyODI4MiwyODU0MSwyOTY2OCwyOTk5NSwzMzc2OSwzNTAzNiwzNTA5MSwzNTY3Niwz''@;'; put 'put ''NjYyOCwyMDIzOSwyMDY5MywyMTI2NCwyMTM0MCwyMzQ0MywyNDQ4OSwyNjM4MSwzMTExOSwzMzE0NSwzMzU4MywzNDA2OCwzNTA3OSwzNTIwNiwzNjY2NSwzNjY2NywzOTMzMywzOTk1NCwyNjQxMiwyMDA4NiwyMDQ3MiwyMjg1NywyMzU1MywyMzc5MSwyMzc5MiwyNTQ0NywyNjgzNCwyODky''@;'; put 'put ''NSwyOTA5MCwyOTczOSwzMjI5OSwzNDAyOCwzNDU2MiwzNjg5OCwzNzU4Niw0MDE3OSwxOTk4MSwyMDE4NCwyMDQ2MywyMDYxMywyMTA3OCwyMTEwMywyMTU0MiwyMTY0OCwyMjQ5NiwyMjgyNywyMzE0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzM4NiwyMzQxMywyMzUwMCwyNDIyMCw2Mzg0NiwyNTIwNiwyNTk3NSwyNjAyMywyODAxNCwyODMyNSwyOTIz''@;'; put 'put ''OCwzMTUyNiwzMTgwNywzMjU2NiwzMzEwNCwzMzEwNSwzMzE3OCwzMzM0NCwzMzQzMywzMzcwNSwzNTMzMSwzNmUzLDM2MDcwLDM2MDkxLDM2MjEyLDM2MjgyLDM3MDk2LDM3MzQwLDM4NDI4LDM4NDY4LDM5Mzg1LDQwMTY3LDIxMjcxLDIwOTk4LDIxNTQ1LDIyMTMyLDIyNzA3LDIyODY4LDIy''@;'; put 'put ''ODk0LDI0NTc1LDI0OTk2LDI1MTk4LDI2MTI4LDI3Nzc0LDI4OTU0LDMwNDA2LDMxODgxLDMxOTY2LDMyMDI3LDMzNDUyLDM2MDMzLDM4NjQwLDYzODQ3LDIwMzE1LDI0MzQzLDI0NDQ3LDI1MjgyLDIzODQ5LDI2Mzc5LDI2ODQyLDMwODQ0LDMyMzIzLDQwMzAwLDE5OTg5LDIwNjMzLDIxMjY5''@;'; put 'put ''LDIxMjkwLDIxMzI5LDIyOTE1LDIzMTM4LDI0MTk5LDI0NzU0LDI0OTcwLDI1MTYxLDI1MjA5LDI2ZTMsMjY1MDMsMjcwNDcsMjc2MDQsMjc2MDYsMjc2MDcsMjc2MDgsMjc4MzIsNjM4NDgsMjk3NDksMzAyMDIsMzA3MzgsMzA4NjUsMzExODksMzExOTIsMzE4NzUsMzIyMDMsMzI3MzcsMzI5''@;'; put 'put ''MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzMwODYsMzMyMTgs''@;'; put 'put ''MzM3NzgsMzQ1ODYsMzUwNDgsMzU1MTMsMzU2OTIsMzYwMjcsMzcxNDUsMzg3NTAsMzkxMzEsNDA3NjMsMjIxODgsMjMzMzgsMjQ0MjgsMjU5OTYsMjczMTUsMjc1NjcsMjc5OTYsMjg2NTcsMjg2OTMsMjkyNzcsMjk2MTMsMzYwMDcsMzYwNTEsMzg5NzEsMjQ5NzcsMjc3MDMsMzI4NTYsMzk0''@;'; put 'put ''MjUsMjAwNDUsMjAxMDcsMjAxMjMsMjAxODEsMjAyODIsMjAyODQsMjAzNTEsMjA0NDcsMjA3MzUsMjE0OTAsMjE0OTYsMjE3NjYsMjE5ODcsMjIyMzUsMjI3NjMsMjI4ODIsMjMwNTcsMjM1MzEsMjM1NDYsMjM1NTYsMjQwNTEsMjQxMDcsMjQ0NzMsMjQ2MDUsMjU0NDgsMjYwMTIsMjYwMzEs''@;'; put 'put ''MjY2MTQsMjY2MTksMjY3OTcsMjc1MTUsMjc4MDEsMjc4NjMsMjgxOTUsMjg2ODEsMjk1MDksMzA3MjIsMzEwMzgsMzEwNDAsMzEwNzIsMzExNjksMzE3MjEsMzIwMjMsMzIxMTQsMzI5MDIsMzMyOTMsMzM2NzgsMzQwMDEsMzQ1MDMsMzUwMzksMzU0MDgsMzU0MjIsMzU2MTMsMzYwNjAsMzYx''@;'; put 'put ''OTgsMzY3ODEsMzcwMzQsMzkxNjQsMzkzOTEsNDA2MDUsMjEwNjYsNjM4NDksMjYzODgsNjM4NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjA2MzIsMjEwMzQsMjM2NjUsMjU5NTUsMjc3MzMsMjk2NDIsMjk5ODcsMzAxMDksMzE2MzksMzM5NDgsMzcyNDAsMzg3MDQsMjAwODcsMjU3NDYsMjc1NzgsMjkwMjIsMzQyMTcsMTk5NzcsNjM4NTEsMjY0NDEsMjY4''@;'; put 'put ''NjIsMjgxODMsMzM0MzksMzQwNzIsMzQ5MjMsMjU1OTEsMjg1NDUsMzczOTQsMzkwODcsMTk5NzgsMjA2NjMsMjA2ODcsMjA3NjcsMjE4MzAsMjE5MzAsMjIwMzksMjMzNjAsMjM1NzcsMjM3NzYsMjQxMjAsMjQyMDIsMjQyMjQsMjQyNTgsMjQ4MTksMjY3MDUsMjcyMzMsMjgyNDgsMjkyNDUs''@;'; put 'put ''MjkyNDgsMjkzNzYsMzA0NTYsMzEwNzcsMzE2NjUsMzI3MjQsMzUwNTksMzUzMTYsMzU0NDMsMzU5MzcsMzYwNjIsMzg2ODQsMjI2MjIsMjk4ODUsMzYwOTMsMjE5NTksNjM4NTIsMzEzMjksMzIwMzQsMzMzOTQsMjkyOTgsMjk5ODMsMjk5ODksNjM4NTMsMzE1MTMsMjI2NjEsMjI3NzksMjM5''@;'; put 'put ''OTYsMjQyMDcsMjQyNDYsMjQ0NjQsMjQ2NjEsMjUyMzQsMjU0NzEsMjU5MzMsMjYyNTcsMjYzMjksMjYzNjAsMjY2NDYsMjY4NjYsMjkzMTIsMjk3OTAsMzE1OTgsMzIxMTAsMzIyMTQsMzI2MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzI5OTcsMzMyOTgsMzQyMjMsMzUxOTksMzU0NzUsMzY4OTMsMzc2MDQsNDA2NTMsNDA3MzYsMjI4MDUsMjI4OTMsMjQx''@;'; put 'put ''MDksMjQ3OTYsMjYxMzIsMjYyMjcsMjY1MTIsMjc3MjgsMjgxMDEsMjg1MTEsMzA3MDcsMzA4ODksMzM5OTAsMzczMjMsMzc2NzUsMjAxODUsMjA2ODIsMjA4MDgsMjE4OTIsMjMzMDcsMjM0NTksMjUxNTksMjU5ODIsMjYwNTksMjgyMTAsMjkwNTMsMjk2OTcsMjk3NjQsMjk4MzEsMjk4ODcs''@;'; put 'put ''MzAzMTYsMzExNDYsMzIyMTgsMzIzNDEsMzI2ODAsMzMxNDYsMzMyMDMsMzMzMzcsMzQzMzAsMzQ3OTYsMzU0NDUsMzYzMjMsMzY5ODQsMzc1MjEsMzc5MjUsMzkyNDUsMzk4NTQsMjEzNTIsMjM2MzMsMjY5NjQsMjc4NDQsMjc5NDUsMjgyMDMsMzMyOTIsMzQyMDMsMzUxMzEsMzUzNzMsMzU0''@;'; put 'put ''OTgsMzg2MzQsNDA4MDcsMjEwODksMjYyOTcsMjc1NzAsMzI0MDYsMzQ4MTQsMzYxMDksMzgyNzUsMzg0OTMsMjU4ODUsMjgwNDEsMjkxNjYsNjM4NTQsMjI0NzgsMjI5OTUsMjM0NjgsMjQ2MTUsMjQ4MjYsMjUxMDQsMjYxNDMsMjYyMDcsMjk0ODEsMjk2ODksMzA0MjcsMzA0NjUsMzE1OTYs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzI4NTQsMzI4ODIsMzMx''@;'; put 'put ''MjUsMzU0ODgsMzcyNjYsMTk5OTAsMjEyMTgsMjc1MDYsMjc5MjcsMzEyMzcsMzE1NDUsMzIwNDgsNjM4NTUsMzYwMTYsMjE0ODQsMjIwNjMsMjI2MDksMjM0NzcsMjM1NjcsMjM1NjksMjQwMzQsMjUxNTIsMjU0NzUsMjU2MjAsMjYxNTcsMjY4MDMsMjc4MzYsMjgwNDAsMjgzMzUsMjg3MDMs''@;'; put 'put ''Mjg4MzYsMjkxMzgsMjk5OTAsMzAwOTUsMzAwOTQsMzAyMzMsMzE1MDUsMzE3MTIsMzE3ODcsMzIwMzIsMzIwNTcsMzQwOTIsMzQxNTcsMzQzMTEsMzUzODAsMzY4NzcsMzY5NjEsMzcwNDUsMzc1NTksMzg5MDIsMzk0NzksMjA0MzksMjM2NjAsMjY0NjMsMjgwNDksMzE5MDMsMzIzOTYsMzU2''@;'; put 'put ''MDYsMzYxMTgsMzY4OTUsMjM0MDMsMjQwNjEsMjU2MTMsMzM5ODQsMzY5NTYsMzkxMzcsMjk1NzUsMjM0MzUsMjQ3MzAsMjY0OTQsMjgxMjYsMzUzNTksMzU0OTQsMzY4NjUsMzg5MjQsMjEwNDcsNjM4NTYsMjg3NTMsMzA4NjIsMzc3ODIsMzQ5MjgsMzczMzUsMjA0NjIsMjE0NjMsMjIwMTMs''@;'; put 'put ''MjIyMzQsMjI0MDIsMjI3ODEsMjMyMzQsMjM0MzIsMjM3MjMsMjM3NDQsMjQxMDEsMjQ4MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjUxMDEsMjUxNjMsMjU0ODAsMjU2MjgsMjU5MTAsMjU5NzYsMjcxOTMsMjc1MzAsMjc3MDAsMjc5MjksMjg0NjUsMjkxNTksMjk0MTcsMjk1NjAsMjk3MDMsMjk4NzQsMzAyNDYsMzA1NjEsMzExNjgsMzEzMTksMzE0NjYs''@;'; put 'put ''MzE5MjksMzIxNDMsMzIxNzIsMzIzNTMsMzI2NzAsMzMwNjUsMzM1ODUsMzM5MzYsMzQwMTAsMzQyODIsMzQ5NjYsMzU1MDQsMzU3MjgsMzY2NjQsMzY5MzAsMzY5OTUsMzcyMjgsMzc1MjYsMzc1NjEsMzg1MzksMzg1NjcsMzg1NjgsMzg2MTQsMzg2NTYsMzg5MjAsMzkzMTgsMzk2MzUsMzk3''@;'; put 'put ''MDYsMjE0NjAsMjI2NTQsMjI4MDksMjM0MDgsMjM0ODcsMjgxMTMsMjg1MDYsMjkwODcsMjk3MjksMjk4ODEsMzI5MDEsMzM3ODksMjQwMzMsMjQ0NTUsMjQ0OTAsMjQ2NDIsMjYwOTIsMjY2NDIsMjY5OTEsMjcyMTksMjc1MjksMjc5NTcsMjgxNDcsMjk2NjcsMzA0NjIsMzA2MzYsMzE1NjUs''@;'; put 'put ''MzIwMjAsMzMwNTksMzMzMDgsMzM2MDAsMzQwMzYsMzQxNDcsMzU0MjYsMzU1MjQsMzcyNTUsMzc2NjIsMzg5MTgsMzkzNDgsMjUxMDAsMzQ4OTksMzY4NDgsMzc0NzcsMjM4MTUsMjM4NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjM5MTMsMjk3OTEsMzMxODEsMzQ2NjQsMjg2MjksMjUzNDIsMzI3MjIsMzUxMjYsMzUxODYsMTk5OTgsMjAwNTYsMjA3MTEs''@;'; put 'put ''MjEyMTMsMjEzMTksMjUyMTUsMjYxMTksMzIzNjEsMzQ4MjEsMzg0OTQsMjAzNjUsMjEyNzMsMjIwNzAsMjI5ODcsMjMyMDQsMjM2MDgsMjM2MzAsMjM2MjksMjQwNjYsMjQzMzcsMjQ2NDMsMjYwNDUsMjYxNTksMjYxNzgsMjY1NTgsMjY2MTIsMjk0NjgsMzA2OTAsMzEwMzQsMzI3MDksMzM5''@;'; put 'put ''NDAsMzM5OTcsMzUyMjIsMzU0MzAsMzU0MzMsMzU1NTMsMzU5MjUsMzU5NjIsMjI1MTYsMjM1MDgsMjQzMzUsMjQ2ODcsMjUzMjUsMjY4OTMsMjc1NDIsMjgyNTIsMjkwNjAsMzE2OTgsMzQ2NDUsMzU2NzIsMzY2MDYsMzkxMzUsMzkxNjYsMjAyODAsMjAzNTMsMjA0NDksMjE2MjcsMjMwNzIs''@;'; put 'put ''MjM0ODAsMjQ4OTIsMjYwMzIsMjYyMTYsMjkxODAsMzAwMDMsMzEwNzAsMzIwNTEsMzMxMDIsMzMyNTEsMzM2ODgsMzQyMTgsMzQyNTQsMzQ1NjMsMzUzMzgsMzY1MjMsMzY3NjMsNjM4NTcsMzY4MDUsMjI4MzMsMjM0NjAsMjM1MjYsMjQ3MTMsMjM1MjksMjM1NjMsMjQ1MTUsMjc3NzcsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM4NTgsMjgxNDUsMjg2ODMs''@;'; put 'put ''Mjk5NzgsMzM0NTUsMzU1NzQsMjAxNjAsMjEzMTMsNjM4NTksMzg2MTcsMjc2NjMsMjAxMjYsMjA0MjAsMjA4MTgsMjE4NTQsMjMwNzcsMjM3ODQsMjUxMDUsMjkyNzMsMzM0NjksMzM3MDYsMzQ1NTgsMzQ5MDUsMzUzNTcsMzg0NjMsMzg1OTcsMzkxODcsNDAyMDEsNDAyODUsMjI1MzgsMjM3''@;'; put 'put ''MzEsMjM5OTcsMjQxMzIsMjQ4MDEsMjQ4NTMsMjU1NjksMjcxMzgsMjgxOTcsMzcxMjIsMzc3MTYsMzg5OTAsMzk5NTIsNDA4MjMsMjM0MzMsMjM3MzYsMjUzNTMsMjYxOTEsMjY2OTYsMzA1MjQsMzg1OTMsMzg3OTcsMzg5OTYsMzk4MzksMjYwMTcsMzU1ODUsMzY1NTUsMzgzMzIsMjE4MTMs''@;'; put 'put ''MjM3MjEsMjQwMjIsMjQyNDUsMjYyNjMsMzAyODQsMzM3ODAsMzgzNDMsMjI3MzksMjUyNzYsMjkzOTAsNDAyMzIsMjAyMDgsMjI4MzAsMjQ1OTEsMjYxNzEsMjc1MjMsMzEyMDcsNDAyMzAsMjEzOTUsMjE2OTYsMjI0NjcsMjM4MzAsMjQ4NTksMjYzMjYsMjgwNzksMzA4NjEsMzM0MDYsMzg1''@;'; put 'put ''NTIsMzg3MjQsMjEzODAsMjUyMTIsMjU0OTQsMjgwODIsMzIyNjYsMzMwOTksMzg5ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjczODcsMzI1ODgsNDAzNjcsNDA0NzQsMjAwNjMsMjA1MzksMjA5MTgsMjI4MTIsMjQ4MjUsMjU1OTAsMjY5MjgsMjkyNDIsMzI4MjIsNjM4NjAsMzczMjYsMjQzNjksNjM4NjEsNjM4NjIsMzIwMDQsMzM1MDksMzM5MDMsMzM5''@;'; put 'put ''NzksMzQyNzcsMzY0OTMsNjM4NjMsMjAzMzUsNjM4NjQsNjM4NjUsMjI3NTYsMjMzNjMsMjQ2NjUsMjU1NjIsMjU4ODAsMjU5NjUsMjYyNjQsNjM4NjYsMjY5NTQsMjcxNzEsMjc5MTUsMjg2NzMsMjkwMzYsMzAxNjIsMzAyMjEsMzExNTUsMzEzNDQsNjM4NjcsMzI2NTAsNjM4NjgsMzUxNDAs''@;'; put 'put ''NjM4NjksMzU3MzEsMzczMTIsMzg1MjUsNjM4NzAsMzkxNzgsMjIyNzYsMjQ0ODEsMjYwNDQsMjg0MTcsMzAyMDgsMzExNDIsMzU0ODYsMzkzNDEsMzk3NzAsNDA4MTIsMjA3NDAsMjUwMTQsMjUyMzMsMjcyNzcsMzMyMjIsMjA1NDcsMjI1NzYsMjQ0MjIsMjg5MzcsMzUzMjgsMzU1NzgsMjM0''@;'; put 'put ''MjAsMzQzMjYsMjA0NzQsMjA3OTYsMjIxOTYsMjI4NTIsMjU1MTMsMjgxNTMsMjM5NzgsMjY5ODksMjA4NzAsMjAxMDQsMjAzMTMsNjM4NzEsNjM4NzIsNjM4NzMsMjI5MTQsNjM4NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM4NzUsMjc0ODcsMjc3NDEsNjM4NzYsMjk4NzcsMzA5OTgsNjM4NzcsMzMyODcsMzMzNDksMzM1OTMsMzY2NzEsMzY3MDEsNjM4''@;'; put 'put ''NzgsMzkxOTIsNjM4NzksNjM4ODAsNjM4ODEsMjAxMzQsNjM4ODIsMjI0OTUsMjQ0NDEsMjYxMzEsNjM4ODMsNjM4ODQsMzAxMjMsMzIzNzcsMzU2OTUsNjM4ODUsMzY4NzAsMzk1MTUsMjIxODEsMjI1NjcsMjMwMzIsMjMwNzEsMjM0NzYsNjM4ODYsMjQzMTAsNjM4ODcsNjM4ODgsMjU0MjQs''@;'; put 'put ''MjU0MDMsNjM4ODksMjY5NDEsMjc3ODMsMjc4MzksMjgwNDYsMjgwNTEsMjgxNDksMjg0MzYsNjM4OTAsMjg4OTUsMjg5ODIsMjkwMTcsNjM4OTEsMjkxMjMsMjkxNDEsNjM4OTIsMzA3OTksMzA4MzEsNjM4OTMsMzE2MDUsMzIyMjcsNjM4OTQsMzIzMDMsNjM4OTUsMzQ4OTMsMzY1NzUsNjM4''@;'; put 'put ''OTYsNjM4OTcsNjM4OTgsMzc0NjcsNjM4OTksNDAxODIsNjM5MDAsNjM5MDEsNjM5MDIsMjQ3MDksMjgwMzcsNjM5MDMsMjkxMDUsNjM5MDQsNjM5MDUsMzgzMjEsMjE0MjEsNjM5MDYsNjM5MDcsNjM5MDgsMjY1NzksNjM5MDksMjg4MTQsMjg5NzYsMjk3NDQsMzMzOTgsMzM0OTAsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM5MTAsMzgzMzEsMzk2NTMsNDA1''@;'; put 'put ''NzMsMjYzMDgsNjM5MTEsMjkxMjEsMzM4NjUsNjM5MTIsNjM5MTMsMjI2MDMsNjM5MTQsNjM5MTUsMjM5OTIsMjQ0MzMsNjM5MTYsMjYxNDQsMjYyNTQsMjcwMDEsMjcwNTQsMjc3MDQsMjc4OTEsMjgyMTQsMjg0ODEsMjg2MzQsMjg2OTksMjg3MTksMjkwMDgsMjkxNTEsMjk1NTIsNjM5MTcs''@;'; put 'put ''Mjk3ODcsNjM5MTgsMjk5MDgsMzA0MDgsMzEzMTAsMzI0MDMsNjM5MTksNjM5MjAsMzM1MjEsMzU0MjQsMzY4MTQsNjM5MjEsMzc3MDQsNjM5MjIsMzg2ODEsNjM5MjMsNjM5MjQsMjAwMzQsMjA1MjIsNjM5MjUsMjFlMywyMTQ3MywyNjM1NSwyNzc1NywyODYxOCwyOTQ1MCwzMDU5MSwzMTMz''@;'; put 'put ''MCwzMzQ1NCwzNDI2OSwzNDMwNiw2MzkyNiwzNTAyOCwzNTQyNywzNTcwOSwzNTk0Nyw2MzkyNywzNzU1NSw2MzkyOCwzODY3NSwzODkyOCwyMDExNiwyMDIzNywyMDQyNSwyMDY1OCwyMTMyMCwyMTU2NiwyMTU1NSwyMTk3OCwyMjYyNiwyMjcxNCwyMjg4NywyMzA2NywyMzUyNCwyNDczNSw2''@;'; put 'put ''MzkyOSwyNTAzNCwyNTk0MiwyNjExMSwyNjIxMiwyNjc5MSwyNzczOCwyODU5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODg3OSwyOTEwMCwyOTUyMiwzMTYxMywzNDU2OCwzNTQ5MiwzOTk4Niw0MDcxMSwyMzYyNywyNzc3OSwyOTUwOCwyOTU3NywzNzQzNCwyODMzMSwyOTc5NywzMDIzOSwzMTMzNywzMjI3NywzNDMxNCwyMDgwMCwyMjcyNSwyNTc5Mywy''@;'; put 'put ''OTkzNCwyOTk3MywzMDMyMCwzMjcwNSwzNzAxMywzODYwNSwzOTI1MiwyODE5OCwyOTkyNiwzMTQwMSwzMTQwMiwzMzI1MywzNDUyMSwzNDY4MCwzNTM1NSwyMzExMywyMzQzNiwyMzQ1MSwyNjc4NSwyNjg4MCwyODAwMywyOTYwOSwyOTcxNSwyOTc0MCwzMDg3MSwzMjIzMywzMjc0NywzMzA0''@;'; put 'put ''OCwzMzEwOSwzMzY5NCwzNTkxNiwzODQ0NiwzODkyOSwyNjM1MiwyNDQ0OCwyNjEwNiwyNjUwNSwyNzc1NCwyOTU3OSwyMDUyNSwyMzA0MywyNzQ5OCwzMDcwMiwyMjgwNiwyMzkxNiwyNDAxMywyOTQ3NywzMDAzMSw2MzkzMCw2MzkzMSwyMDcwOSwyMDk4NSwyMjU3NSwyMjgyOSwyMjkzNCwy''@;'; put 'put ''MzAwMiwyMzUyNSw2MzkzMiw2MzkzMywyMzk3MCwyNTMwMywyNTYyMiwyNTc0NywyNTg1NCw2MzkzNCwyNjMzMiw2MzkzNSwyNzIwOCw2MzkzNiwyOTE4MywyOTc5Niw2MzkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTM2OCwzMTQwNywzMjMyNywzMjM1MCwzMjc2OCwzMzEzNiw2MzkzOCwzNDc5OSwzNTIwMSwzNTYxNiwzNjk1Myw2MzkzOSwzNjk5Miwz''@;'; put 'put ''OTI1MCwyNDk1OCwyNzQ0MiwyODAyMCwzMjI4NywzNTEwOSwzNjc4NSwyMDQzMywyMDY1MywyMDg4NywyMTE5MSwyMjQ3MSwyMjY2NSwyMzQ4MSwyNDI0OCwyNDg5OCwyNzAyOSwyODA0NCwyODI2MywyODM0MiwyOTA3NiwyOTc5NCwyOTk5MiwyOTk5NiwzMjg4MywzMzU5MiwzMzk5MywzNjM2''@;'; put 'put ''MiwzNzc4MCwzNzg1NCw2Mzk0MCwyMDExMCwyMDMwNSwyMDU5OCwyMDc3OCwyMTQ0OCwyMTQ1MSwyMTQ5MSwyMzQzMSwyMzUwNywyMzU4OCwyNDg1OCwyNDk2MiwyNjEwMCwyOTI3NSwyOTU5MSwyOTc2MCwzMDQwMiwzMTA1NiwzMTEyMSwzMTE2MSwzMjAwNiwzMjcwMSwzMzQxOSwzNDI2MSwz''@;'; put 'put ''NDM5OCwzNjgwMiwzNjkzNSwzNzEwOSwzNzM1NCwzODUzMywzODYzMiwzODYzMywyMTIwNiwyNDQyMywyNjA5MywyNjE2MSwyNjY3MSwyOTAyMCwzMTI4NiwzNzA1NywzODkyMiwyMDExMyw2Mzk0MSwyNzIxOCwyNzU1MCwyODU2MCwyOTA2NSwzMjc5MiwzMzQ2NCwzNDEzMSxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjkzOSwzODU0OSwzODY0MiwzODkwNywz''@;'; put 'put ''NDA3NCwzOTcyOSwyMDExMiwyOTA2NiwzODU5NiwyMDgwMywyMTQwNywyMTcyOSwyMjI5MSwyMjI5MCwyMjQzNSwyMzE5NSwyMzIzNiwyMzQ5MSwyNDYxNiwyNDg5NSwyNTU4OCwyNzc4MSwyNzk2MSwyODI3NCwyODMwNCwyOTIzMiwyOTUwMywyOTc4MywzMzQ4OSwzNDk0NSwzNjY3NywzNjk2''@;'; put 'put ''MCw2Mzk0MiwzODQ5OCwzOWUzLDQwMjE5LDI2Mzc2LDM2MjM0LDM3NDcwLDIwMzAxLDIwNTUzLDIwNzAyLDIxMzYxLDIyMjg1LDIyOTk2LDIzMDQxLDIzNTYxLDI0OTQ0LDI2MjU2LDI4MjA1LDI5MjM0LDI5NzcxLDMyMjM5LDMyOTYzLDMzODA2LDMzODk0LDM0MTExLDM0NjU1LDM0OTA3LDM1''@;'; put 'put ''MDk2LDM1NTg2LDM2OTQ5LDM4ODU5LDM5NzU5LDIwMDgzLDIwMzY5LDIwNzU0LDIwODQyLDYzOTQzLDIxODA3LDIxOTI5LDIzNDE4LDIzNDYxLDI0MTg4LDI0MTg5LDI0MjU0LDI0NzM2LDI0Nzk5LDI0ODQwLDI0ODQxLDI1NTQwLDI1OTEyLDI2Mzc3LDYzOTQ0LDI2NTgwLDI2NTg2LDYzOTQ1''@;'; put 'put ''LDI2OTc3LDI2OTc4LDI3ODMzLDI3OTQzLDYzOTQ2LDI4MjE2LDYzOTQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4NjQxLDI5NDk0LDI5NDk1LDYzOTQ4LDI5Nzg4LDMwMDAxLDYzOTQ5LDMwMjkwLDYzOTUwLDYzOTUxLDMyMTczLDMzMjc4LDMzODQ4LDM1MDI5LDM1NDgwLDM1NTQ3LDM1NTY1LDM2NDAwLDM2NDE4LDM2OTM4LDM2OTI2LDM2OTg2LDM3MTkz''@;'; put 'put ''LDM3MzIxLDM3NzQyLDYzOTUyLDYzOTUzLDIyNTM3LDYzOTU0LDI3NjAzLDMyOTA1LDMyOTQ2LDYzOTU1LDYzOTU2LDIwODAxLDIyODkxLDIzNjA5LDYzOTU3LDYzOTU4LDI4NTE2LDI5NjA3LDMyOTk2LDM2MTAzLDYzOTU5LDM3Mzk5LDM4Mjg3LDYzOTYwLDYzOTYxLDYzOTYyLDYzOTYzLDMy''@;'; put 'put ''ODk1LDI1MTAyLDI4NzAwLDMyMTA0LDM0NzAxLDYzOTY0LDIyNDMyLDI0NjgxLDI0OTAzLDI3NTc1LDM1NTE4LDM3NTA0LDM4NTc3LDIwMDU3LDIxNTM1LDI4MTM5LDM0MDkzLDM4NTEyLDM4ODk5LDM5MTUwLDI1NTU4LDI3ODc1LDM3MDA5LDIwOTU3LDI1MDMzLDMzMjEwLDQwNDQxLDIwMzgx''@;'; put 'put ''LDIwNTA2LDIwNzM2LDIzNDUyLDI0ODQ3LDI1MDg3LDI1ODM2LDI2ODg1LDI3NTg5LDMwMDk3LDMwNjkxLDMyNjgxLDMzMzgwLDM0MTkxLDM0ODExLDM0OTE1LDM1NTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM1Njk2LDM3MjkxLDIwMTA4LDIwMTk3LDIwMjM0LDYzOTY1LDYzOTY2LDIyODM5LDIzMDE2LDYzOTY3LDI0MDUwLDI0MzQ3LDI0NDExLDI0NjA5''@;'; put 'put ''LDYzOTY4LDYzOTY5LDYzOTcwLDYzOTcxLDI5MjQ2LDI5NjY5LDYzOTcyLDMwMDY0LDMwMTU3LDYzOTczLDMxMjI3LDYzOTc0LDMyNzgwLDMyODE5LDMyOTAwLDMzNTA1LDMzNjE3LDYzOTc1LDYzOTc2LDM2MDI5LDM2MDE5LDM2OTk5LDYzOTc3LDYzOTc4LDM5MTU2LDM5MTgwLDYzOTc5LDYz''@;'; put 'put ''OTgwLDI4NzI3LDMwNDEwLDMyNzE0LDMyNzE2LDMyNzY0LDM1NjEwLDIwMTU0LDIwMTYxLDIwOTk1LDIxMzYwLDYzOTgxLDIxNjkzLDIyMjQwLDIzMDM1LDIzNDkzLDI0MzQxLDI0NTI1LDI4MjcwLDYzOTgyLDYzOTgzLDMyMTA2LDMzNTg5LDYzOTg0LDM0NDUxLDM1NDY5LDYzOTg1LDM4NzY1''@;'; put 'put ''LDM4Nzc1LDYzOTg2LDYzOTg3LDE5OTY4LDIwMzE0LDIwMzUwLDIyNzc3LDI2MDg1LDI4MzIyLDM2OTIwLDM3ODA4LDM5MzUzLDIwMjE5LDIyNzY0LDIyOTIyLDIzMDAxLDI0NjQxLDYzOTg4LDYzOTg5LDMxMjUyLDYzOTkwLDMzNjE1LDM2MDM1LDIwODM3LDIxMzE2LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTkxLDYzOTkyLDYzOTkzLDIwMTczLDIxMDk3''@;'; put 'put ''LDIzMzgxLDMzNDcxLDIwMTgwLDIxMDUwLDIxNjcyLDIyOTg1LDIzMDM5LDIzMzc2LDIzMzgzLDIzMzg4LDI0Njc1LDI0OTA0LDI4MzYzLDI4ODI1LDI5MDM4LDI5NTc0LDI5OTQzLDMwMTMzLDMwOTEzLDMyMDQzLDMyNzczLDMzMjU4LDMzNTc2LDM0MDcxLDM0MjQ5LDM1NTY2LDM2MDM5LDM4''@;'; put 'put ''NjA0LDIwMzE2LDIxMjQyLDIyMjA0LDI2MDI3LDI2MTUyLDI4Nzk2LDI4ODU2LDI5MjM3LDMyMTg5LDMzNDIxLDM3MTk2LDM4NTkyLDQwMzA2LDIzNDA5LDI2ODU1LDI3NTQ0LDI4NTM4LDMwNDMwLDIzNjk3LDI2MjgzLDI4NTA3LDMxNjY4LDMxNzg2LDM0ODcwLDM4NjIwLDE5OTc2LDIwMTgz''@;'; put 'put ''LDIxMjgwLDIyNTgwLDIyNzE1LDIyNzY3LDIyODkyLDIzNTU5LDI0MTE1LDI0MTk2LDI0MzczLDI1NDg0LDI2MjkwLDI2NDU0LDI3MTY3LDI3Mjk5LDI3NDA0LDI4NDc5LDI5MjU0LDYzOTk0LDI5NTIwLDI5ODM1LDMxNDU2LDMxOTExLDMzMTQ0LDMzMjQ3LDMzMjU1LDMzNjc0LDMzOTAwLDM0''@;'; put 'put ''MDgzLDM0MTk2LDM0MjU1LDM1MDM3LDM2MTE1LDM3MjkyLDM4MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NTU2LDIwODc3LDIxNzA1LDIyMzEyLDIzNDcyLDI1MTY1LDI2NDQ4LDI2Njg1LDI2NzcxLDI4MjIxLDI4MzcxLDI4Nzk3LDMyMjg5LDM1MDA5LDM2MDAxLDM2NjE3LDQwNzc5LDQwNzgyLDI5MjI5LDMxNjMxLDM1NTMzLDM3NjU4LDIwMjk1LDIw''@;'; put 'put ''MzAyLDIwNzg2LDIxNjMyLDIyOTkyLDI0MjEzLDI1MjY5LDI2NDg1LDI2OTkwLDI3MTU5LDI3ODIyLDI4MTg2LDI5NDAxLDI5NDgyLDMwMTQxLDMxNjcyLDMyMDUzLDMzNTExLDMzNzg1LDMzODc5LDM0Mjk1LDM1NDE5LDM2MDE1LDM2NDg3LDM2ODg5LDM3MDQ4LDM4NjA2LDQwNzk5LDIxMjE5''@;'; put 'put ''LDIxNTE0LDIzMjY1LDIzNDkwLDI1Njg4LDI1OTczLDI4NDA0LDI5MzgwLDYzOTk1LDMwMzQwLDMxMzA5LDMxNTE1LDMxODIxLDMyMzE4LDMyNzM1LDMzNjU5LDM1NjI3LDM2MDQyLDM2MTk2LDM2MzIxLDM2NDQ3LDM2ODQyLDM2ODU3LDM2OTY5LDM3ODQxLDIwMjkxLDIwMzQ2LDIwNjU5LDIw''@;'; put 'put ''ODQwLDIwODU2LDIxMDY5LDIxMDk4LDIyNjI1LDIyNjUyLDIyODgwLDIzNTYwLDIzNjM3LDI0MjgzLDI0NzMxLDI1MTM2LDI2NjQzLDI3NTgzLDI3NjU2LDI4NTkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDA2LDI5NzI4LDNlNCwzMDAwOCwzMDAzMywzMDMyMiwzMTU2NCwzMTYyNywzMTY2MSwzMTY4NiwzMjM5OSwzNTQzOCwzNjY3MCwzNjY4MSwzNzQz''@;'; put 'put ''OSwzNzUyMywzNzY2NiwzNzkzMSwzODY1MSwzOTAwMiwzOTAxOSwzOTE5OCwyMDk5OSwyNTEzMCwyNTI0MCwyNzk5MywzMDMwOCwzMTQzNCwzMTY4MCwzMjExOCwyMTM0NCwyMzc0MiwyNDIxNSwyODQ3MiwyODg1NywzMTg5NiwzODY3MywzOTgyMiw0MDY3MCwyNTUwOSwyNTcyMiwzNDY3OCwx''@;'; put 'put ''OTk2OSwyMDExNywyMDE0MSwyMDU3MiwyMDU5NywyMTU3NiwyMjk3OSwyMzQ1MCwyNDEyOCwyNDIzNywyNDMxMSwyNDQ0OSwyNDc3MywyNTQwMiwyNTkxOSwyNTk3MiwyNjA2MCwyNjIzMCwyNjIzMiwyNjYyMiwyNjk4NCwyNzI3MywyNzQ5MSwyNzcxMiwyODA5NiwyODEzNiwyODE5MSwyODI1''@;'; put 'put ''NCwyODcwMiwyODgzMywyOTU4MiwyOTY5MywzMDAxMCwzMDU1NSwzMDg1NSwzMTExOCwzMTI0MywzMTM1NywzMTkzNCwzMjE0MiwzMzM1MSwzNTMzMCwzNTU2MiwzNTk5OCwzNzE2NSwzNzE5NCwzNzMzNiwzNzQ3OCwzNzU4MCwzNzY2NCwzODY2MiwzODc0MixudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODc0OCwzODkxNCw0MDcxOCwyMTA0NiwyMTEzNywyMTg4''@;'; put 'put ''NCwyMjU2NCwyNDA5MywyNDM1MSwyNDcxNiwyNTU1MiwyNjc5OSwyODYzOSwzMTA4NSwzMTUzMiwzMzIyOSwzNDIzNCwzNTA2OSwzNTU3NiwzNjQyMCwzNzI2MSwzODUwMCwzODU1NSwzODcxNywzODk4OCw0MDc3OCwyMDQzMCwyMDgwNiwyMDkzOSwyMTE2MSwyMjA2NiwyNDM0MCwyNDQyNywy''@;'; put 'put ''NTUxNCwyNTgwNSwyNjA4OSwyNjE3NywyNjM2MiwyNjM2MSwyNjM5NywyNjc4MSwyNjgzOSwyNzEzMywyODQzNywyODUyNiwyOTAzMSwyOTE1NywyOTIyNiwyOTg2NiwzMDUyMiwzMTA2MiwzMTA2NiwzMTE5OSwzMTI2NCwzMTM4MSwzMTg5NSwzMTk2NywzMjA2OCwzMjM2OCwzMjkwMywzNDI5''@;'; put 'put ''OSwzNDQ2OCwzNTQxMiwzNTUxOSwzNjI0OSwzNjQ4MSwzNjg5NiwzNjk3MywzNzM0NywzODQ1OSwzODYxMyw0MDE2NSwyNjA2MywzMTc1MSwzNjI3NSwzNzgyNywyMzM4NCwyMzU2MiwyMTMzMCwyNTMwNSwyOTQ2OSwyMDUxOSwyMzQ0NywyNDQ3OCwyNDc1MiwyNDkzOSwyNjgzNywyODEyMSwy''@;'; put 'put ''OTc0MiwzMTI3OCwzMjA2NiwzMjE1NiwzMjMwNSwzMzEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCwzNjM5NCwzNjQwNSwzNzc1OCwzNzkxMiwyMDMwNCwyMjM1MiwyNDAzOCwyNDIzMSwyNTM4NywzMjYxOCwyMDAyNywyMDMwMywyMDM2NywyMDU3MCwyMzAwNSwzMjk2NCwyMTYxMCwyMTYwOCwyMjAxNCwyMjg2MywyMzQ0OSwyNDAzMCwyNDI4MiwyNjIwNSwy''@;'; put 'put ''NjQxNywyNjYwOSwyNjY2NiwyNzg4MCwyNzk1NCwyODIzNCwyODU1NywyODg1NSwyOTY2NCwzMDA4NywzMTgyMCwzMjAwMiwzMjA0NCwzMjE2MiwzMzMxMSwzNDUyMywzNTM4NywzNTQ2MSwzNjIwOCwzNjQ5MCwzNjY1OSwzNjkxMywzNzE5OCwzNzIwMiwzNzk1NiwzOTM3NiwzMTQ4MSwzMTkw''@;'; put 'put ''OSwyMDQyNiwyMDczNywyMDkzNCwyMjQ3MiwyMzUzNSwyMzgwMywyNjIwMSwyNzE5NywyNzk5NCwyODMxMCwyODY1MiwyODk0MCwzMDA2MywzMTQ1OSwzNDg1MCwzNjg5NywzNjk4MSwzODYwMywzOTQyMywzMzUzNywyMDAxMywyMDIxMCwzNDg4NiwzNzMyNSwyMTM3MywyNzM1NSwyNjk4Nywy''@;'; put 'put ''NzcxMywzMzkxNCwyMjY4NiwyNDk3NCwyNjM2NiwyNTMyNywyODg5MywyOTk2OSwzMDE1MSwzMjMzOCwzMzk3NiwzNTY1NywzNjEwNCwyMDA0MywyMTQ4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY3NSwyMjMyMCwyMjMzNiwyNDUzNSwyNTM0NSwyNTM1MSwyNTcxMSwyNTkwMywyNjA4OCwyNjIzNCwyNjUyNSwyNjU0NywyNzQ5MCwyNzc0NCwyNzgwMiwy''@;'; put 'put ''ODQ2MCwzMDY5MywzMDc1NywzMTA0OSwzMTA2MywzMjAyNSwzMjkzMCwzMzAyNiwzMzI2NywzMzQzNywzMzQ2MywzNDU4NCwzNTQ2OCw2Mzk5NiwzNjEwMCwzNjI4NiwzNjk3OCwzMDQ1MiwzMTI1NywzMTI4NywzMjM0MCwzMjg4NywyMTc2NywyMTk3MiwyMjY0NSwyNTM5MSwyNTYzNCwyNjE4''@;'; put 'put ''NSwyNjE4NywyNjczMywyNzAzNSwyNzUyNCwyNzk0MSwyODMzNywyOTY0NSwyOTgwMCwyOTg1NywzMDA0MywzMDEzNywzMDQzMywzMDQ5NCwzMDYwMywzMTIwNiwzMjI2NSwzMjI4NSwzMzI3NSwzNDA5NSwzNDk2NywzNTM4NiwzNjA0OSwzNjU4NywzNjc4NCwzNjkxNCwzNzgwNSwzODQ5OSwz''@;'; put 'put ''ODUxNSwzODY2MywyMDM1NiwyMTQ4OSwyMzAxOCwyMzI0MSwyNDA4OSwyNjcwMiwyOTg5NCwzMDE0MiwzMTIwOSwzMTM3OCwzMzE4NywzNDU0MSwzNjA3NCwzNjMwMCwzNjg0NSwyNjAxNSwyNjM4OSw2Mzk5NywyMjUxOSwyODUwMywzMjIyMSwzNjY1NSxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzg3OCwzODU5OCwyNDUwMSwyNTA3NCwyODU0OCwxOTk4OCwy''@;'; put 'put ''MDM3NiwyMDUxMSwyMTQ0OSwyMTk4MywyMzkxOSwyNDA0NiwyNzQyNSwyNzQ5MiwzMDkyMywzMTY0Miw2Mzk5OCwzNjQyNSwzNjU1NCwzNjk3NCwyNTQxNywyNTY2MiwzMDUyOCwzMTM2NCwzNzY3OSwzODAxNSw0MDgxMCwyNTc3NiwyODU5MSwyOTE1OCwyOTg2NCwyOTkxNCwzMTQyOCwzMTc2''@;'; put 'put ''MiwzMjM4NiwzMTkyMiwzMjQwOCwzNTczOCwzNjEwNiwzODAxMywzOTE4NCwzOTI0NCwyMTA0OSwyMzUxOSwyNTgzMCwyNjQxMywzMjA0NiwyMDcxNywyMTQ0MywyMjY0OSwyNDkyMCwyNDkyMSwyNTA4MiwyNjAyOCwzMTQ0OSwzNTczMCwzNTczNCwyMDQ4OSwyMDUxMywyMTEwOSwyMTgwOSwy''@;'; put 'put ''MzEwMCwyNDI4OCwyNDQzMiwyNDg4NCwyNTk1MCwyNjEyNCwyNjE2NiwyNjI3NCwyNzA4NSwyODM1NiwyODQ2NiwyOTQ2MiwzMDI0MSwzMTM3OSwzMzA4MSwzMzM2OSwzMzc1MCwzMzk4MCwyMDY2MSwyMjUxMiwyMzQ4OCwyMzUyOCwyNDQyNSwyNTUwNSwzMDc1OCwzMjE4MSwzMzc1NiwzNDA4''@;'; put 'put ''MSwzNzMxOSwzNzM2NSwyMDg3NCwyNjYxMywzMTU3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCwzNjAxMiwyMDkzMiwyMjk3MSwyNDc2NSwzNDM4OSwyMDUwOCw2Mzk5OSwyMTA3NiwyMzYxMCwyNDk1NywyNTExNCwyNTI5OSwyNTg0MiwyNjAyMSwyODM2NCwzMDI0MCwzMzAzNCwzNjQ0OCwzODQ5NSwzODU4NywyMDE5MSwyMTMxNSwyMTkxMiwyMjgyNSwyNDAy''@;'; put 'put ''OSwyNTc5NywyNzg0OSwyODE1NCwyOTU4OCwzMTM1OSwzMzMwNywzNDIxNCwzNjA2OCwzNjM2OCwzNjk4MywzNzM1MSwzODM2OSwzODQzMywzODg1NCwyMDk4NCwyMTc0NiwyMTg5NCwyNDUwNSwyNTc2NCwyODU1MiwzMjE4MCwzNjYzOSwzNjY4NSwzNzk0MSwyMDY4MSwyMzU3NCwyNzgzOCwy''@;'; put 'put ''ODE1NSwyOTk3OSwzMDY1MSwzMTgwNSwzMTg0NCwzNTQ0OSwzNTUyMiwyMjU1OCwyMjk3NCwyNDA4NiwyNTQ2MywyOTI2NiwzMDA5MCwzMDU3MSwzNTU0OCwzNjAyOCwzNjYyNiwyNDMwNywyNjIyOCwyODE1MiwzMjg5MywzMzcyOSwzNTUzMSwzODczNywzOTg5NCw2NGUzLDIxMDU5LDI2MzY3''@;'; put 'put ''LDI4MDUzLDI4Mzk5LDMyMjI0LDM1NTU4LDM2OTEwLDM2OTU4LDM5NjM2LDIxMDIxLDIxMTE5LDIxNzM2LDI0OTgwLDI1MjIwLDI1MzA3LDI2Nzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODk4LDI2OTcwLDI3MTg5LDI4ODE4LDI4OTY2LDMwODEzLDMwOTc3LDMwOTkwLDMxMTg2LDMxMjQ1LDMyOTE4LDMzNDAwLDMzNDkzLDMzNjA5LDM0MTIxLDM1OTcw''@;'; put 'put ''LDM2MjI5LDM3MjE4LDM3MjU5LDM3Mjk0LDIwNDE5LDIyMjI1LDI5MTY1LDMwNjc5LDM0NTYwLDM1MzIwLDIzNTQ0LDI0NTM0LDI2NDQ5LDM3MDMyLDIxNDc0LDIyNjE4LDIzNTQxLDI0NzQwLDI0OTYxLDI1Njk2LDMyMzE3LDMyODgwLDM0MDg1LDM3NTA3LDI1Nzc0LDIwNjUyLDIzODI4LDI2''@;'; put 'put ''MzY4LDIyNjg0LDI1Mjc3LDI1NTEyLDI2ODk0LDI3ZTMsMjcxNjYsMjgyNjcsMzAzOTQsMzExNzksMzM0NjcsMzM4MzMsMzU1MzUsMzYyNjQsMzY4NjEsMzcxMzgsMzcxOTUsMzcyNzYsMzc2NDgsMzc2NTYsMzc3ODYsMzg2MTksMzk0NzgsMzk5NDksMTk5ODUsMzAwNDQsMzEwNjksMzE0ODIs''@;'; put 'put ''MzE1NjksMzE2ODksMzIzMDIsMzM5ODgsMzY0NDEsMzY0NjgsMzY2MDAsMzY4ODAsMjYxNDksMjY5NDMsMjk3NjMsMjA5ODYsMjY0MTQsNDA2NjgsMjA4MDUsMjQ1NDQsMjc3OTgsMzQ4MDIsMzQ5MDksMzQ5MzUsMjQ3NTYsMzMyMDUsMzM3OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYxMDEsMjE0NjIsMjE1NjEsMjIwNjgsMjMwOTQsMjM2MDEsMjg4MTAs''@;'; put 'put ''MzI3MzYsMzI4NTgsMzMwMzAsMzMyNjEsMzYyNTksMzcyNTcsMzk1MTksNDA0MzQsMjA1OTYsMjAxNjQsMjE0MDgsMjQ4MjcsMjgyMDQsMjM2NTIsMjAzNjAsMjA1MTYsMjE5ODgsMjM3NjksMjQxNTksMjQ2NzcsMjY3NzIsMjc4MzUsMjgxMDAsMjkxMTgsMzAxNjQsMzAxOTYsMzAzMDUsMzEy''@;'; put 'put ''NTgsMzEzMDUsMzIxOTksMzIyNTEsMzI2MjIsMzMyNjgsMzQ0NzMsMzY2MzYsMzg2MDEsMzkzNDcsNDA3ODYsMjEwNjMsMjExODksMzkxNDksMzUyNDIsMTk5NzEsMjY1NzgsMjg0MjIsMjA0MDUsMjM1MjIsMjY1MTcsMjc3ODQsMjgwMjQsMjk3MjMsMzA3NTksMzczNDEsMzc3NTYsMzQ3NTYs''@;'; put 'put ''MzEyMDQsMzEyODEsMjQ1NTUsMjAxODIsMjE2NjgsMjE4MjIsMjI3MDIsMjI5NDksMjQ4MTYsMjUxNzEsMjUzMDIsMjY0MjIsMjY5NjUsMzMzMzMsMzg0NjQsMzkzNDUsMzkzODksMjA1MjQsMjEzMzEsMjE4MjgsMjIzOTYsNjQwMDEsMjUxNzYsNjQwMDIsMjU4MjYsMjYyMTksMjY1ODksMjg2''@;'; put 'put ''MDksMjg2NTUsMjk3MzAsMjk3NTIsMzUzNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsMzc5NDQsMjE1ODUsMjIwMjIsMjIzNzQsMjQzOTIsMjQ5ODYsMjc0NzAsMjg3NjAsMjg4NDUsMzIxODcsMzU0NzcsMjI4OTAsMzMwNjcsMjU1MDYsMzA0NzIsMzI4MjksMzYwMTAsMjI2MTIsMjU2NDUsMjcwNjcsMjM0NDUsMjQwODEsMjgyNzEsNjQwMDMsMzQxNTMsMjA4''@;'; put 'put ''MTIsMjE0ODgsMjI4MjYsMjQ2MDgsMjQ5MDcsMjc1MjYsMjc3NjAsMjc4ODgsMzE1MTgsMzI5NzQsMzM0OTIsMzYyOTQsMzcwNDAsMzkwODksNjQwMDQsMjU3OTksMjg1ODAsMjU3NDUsMjU4NjAsMjA4MTQsMjE1MjAsMjIzMDMsMzUzNDIsMjQ5MjcsMjY3NDIsNjQwMDUsMzAxNzEsMzE1NzAs''@;'; put 'put ''MzIxMTMsMzY4OTAsMjI1MzQsMjcwODQsMzMxNTEsMzUxMTQsMzY4NjQsMzg5NjksMjA2MDAsMjI4NzEsMjI5NTYsMjUyMzcsMzY4NzksMzk3MjIsMjQ5MjUsMjkzMDUsMzgzNTgsMjIzNjksMjMxMTAsMjQwNTIsMjUyMjYsMjU3NzMsMjU4NTAsMjY0ODcsMjc4NzQsMjc5NjYsMjkyMjgsMjk3''@;'; put 'put ''NTAsMzA3NzIsMzI2MzEsMzM0NTMsMzYzMTUsMzg5MzUsMjEwMjgsMjIzMzgsMjY0OTUsMjkyNTYsMjk5MjMsMzYwMDksMzY3NzQsMzczOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg0NDIsMjA4NDMsMjE0ODUsMjU0MjAsMjAzMjksMjE3NjQsMjQ3MjYsMjU5NDMsMjc4MDMsMjgwMzEsMjkyNjAsMjk0MzcsMzEyNTUsMzUyMDcsMzU5OTcsMjQ0MjksMjg1''@;'; put 'put ''NTgsMjg5MjEsMzMxOTIsMjQ4NDYsMjA0MTUsMjA1NTksMjUxNTMsMjkyNTUsMzE2ODcsMzIyMzIsMzI3NDUsMzY5NDEsMzg4MjksMzk0NDksMzYwMjIsMjIzNzgsMjQxNzksMjY1NDQsMzM4MDUsMzU0MTMsMjE1MzYsMjMzMTgsMjQxNjMsMjQyOTAsMjQzMzAsMjU5ODcsMzI5NTQsMzQxMDks''@;'; put 'put ''MzgyODEsMzg0OTEsMjAyOTYsMjEyNTMsMjEyNjEsMjEyNjMsMjE2MzgsMjE3NTQsMjIyNzUsMjQwNjcsMjQ1OTgsMjUyNDMsMjUyNjUsMjU0MjksNjQwMDYsMjc4NzMsMjgwMDYsMzAxMjksMzA3NzAsMzI5OTAsMzMwNzEsMzM1MDIsMzM4ODksMzM5NzAsMzQ5NTcsMzUwOTAsMzY4NzUsMzc2''@;'; put 'put ''MTAsMzkxNjUsMzk4MjUsMjQxMzMsMjYyOTIsMjYzMzMsMjg2ODksMjkxOTAsNjQwMDcsMjA0NjksMjExMTcsMjQ0MjYsMjQ5MTUsMjY0NTEsMjcxNjEsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU5NjEsMzkxMTEsMzkxMDgsMzk0OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjE2OTcsMzEyNjMsMjY5NjMsMzU1NzUsMzU5MTQsMzkwODAsMzkzNDIsMjQ0''@;'; put 'put ''NDQsMjUyNTksMzAxMzAsMzAzODIsMzQ5ODcsMzY5OTEsMzg0NjYsMjEzMDUsMjQzODAsMjQ1MTcsMjc4NTIsMjk2NDQsMzAwNTAsMzAwOTEsMzE1NTgsMzM1MzQsMzkzMjUsMjAwNDcsMzY5MjQsMTk5NzksMjAzMDksMjE0MTQsMjI3OTksMjQyNjQsMjYxNjAsMjc4MjcsMjk3ODEsMzM2NTUs''@;'; put 'put ''MzQ2NjIsMzYwMzIsMzY5NDQsMzg2ODYsMzk5NTcsMjI3MzcsMjM0MTYsMzQzODQsMzU2MDQsNDAzNzIsMjM1MDYsMjQ2ODAsMjQ3MTcsMjYwOTcsMjc3MzUsMjg0NTAsMjg1NzksMjg2OTgsMzI1OTcsMzI3NTIsMzgyODksMzgyOTAsMzg0ODAsMzg4NjcsMjExMDYsMzY2NzYsMjA5ODksMjE1''@;'; put 'put ''NDcsMjE2ODgsMjE4NTksMjE4OTgsMjczMjMsMjgwODUsMzIyMTYsMzMzODIsMzc1MzIsMzg1MTksNDA1NjksMjE1MTIsMjE3MDQsMzA0MTgsMzQ1MzIsMzgzMDgsMzgzNTYsMzg0OTIsMjAxMzAsMjAyMzMsMjMwMjIsMjMyNzAsMjQwNTUsMjQ2NTgsMjUyMzksMjY0NzcsMjY2ODksMjc3ODIs''@;'; put 'put ''MjgyMDcsMzI1NjgsMzI5MjMsMzMzMjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNjQwMDgsNjQwMDksMzg5MTcsMjAxMzMsMjA1NjUsMjE2ODMsMjI0MTksMjI4NzQsMjM0MDEsMjM0NzUsMjUwMzIsMjY5OTksMjgwMjMsMjg3MDcsMzQ4MDksMzUyOTksMzU0NDIsMzU1NTksMzY5OTQsMzk0MDUsMzk2MDgsMjExODIsMjY2ODAsMjA1MDIsMjQxODQsMjY0NDcs''@;'; put 'put ''MzM2MDcsMzQ4OTIsMjAxMzksMjE1MjEsMjIxOTAsMjk2NzAsMzcxNDEsMzg5MTEsMzkxNzcsMzkyNTUsMzkzMjEsMjIwOTksMjI2ODcsMzQzOTUsMzUzNzcsMjUwMTAsMjczODIsMjk1NjMsMzY1NjIsMjc0NjMsMzg1NzAsMzk1MTEsMjI4NjksMjkxODQsMzYyMDMsMzg3NjEsMjA0MzYsMjM3''@;'; put 'put ''OTYsMjQzNTgsMjUwODAsMjYyMDMsMjc4ODMsMjg4NDMsMjk1NzIsMjk2MjUsMjk2OTQsMzA1MDUsMzA1NDEsMzIwNjcsMzIwOTgsMzIyOTEsMzMzMzUsMzQ4OTgsNjQwMTAsMzYwNjYsMzc0NDksMzkwMjMsMjMzNzcsMzEzNDgsMzQ4ODAsMzg5MTMsMjMyNDQsMjA0NDgsMjEzMzIsMjI4NDYs''@;'; put 'put ''MjM4MDUsMjU0MDYsMjgwMjUsMjk0MzMsMzMwMjksMzMwMzEsMzM2OTgsMzc1ODMsMzg5NjAsMjAxMzYsMjA4MDQsMjEwMDksMjI0MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQ0MTgsMjc4NDIsMjgzNjYsMjg2NzcsMjg3NTIsMjg4NDcsMjkwNzQsMjk2NzMsMjk4MDEsMzM2MTAsMzQ3MjIsMzQ5MTMsMzY4NzIsMzcwMjYsMzc3OTUsMzkzMzYsMjA4NDYs''@;'; put 'put ''MjQ0MDcsMjQ4MDAsMjQ5MzUsMjYyOTEsMzQxMzcsMzY0MjYsMzcyOTUsMzg3OTUsMjAwNDYsMjAxMTQsMjE2MjgsMjI3NDEsMjI3NzgsMjI5MDksMjM3MzMsMjQzNTksMjUxNDIsMjUxNjAsMjYxMjIsMjYyMTUsMjc2MjcsMjgwMDksMjgxMTEsMjgyNDYsMjg0MDgsMjg1NjQsMjg2NDAsMjg2''@;'; put 'put ''NDksMjg3NjUsMjkzOTIsMjk3MzMsMjk3ODYsMjk5MjAsMzAzNTUsMzEwNjgsMzE5NDYsMzIyODYsMzI5OTMsMzM0NDYsMzM4OTksMzM5ODMsMzQzODIsMzQzOTksMzQ2NzYsMzU3MDMsMzU5NDYsMzc4MDQsMzg5MTIsMzkwMTMsMjQ3ODUsMjUxMTAsMzcyMzksMjMxMzAsMjYxMjcsMjgxNTEs''@;'; put 'put ''MjgyMjIsMjk3NTksMzk3NDYsMjQ1NzMsMjQ3OTQsMzE1MDMsMjE3MDAsMjQzNDQsMjc3NDIsMjc4NTksMjc5NDYsMjg4ODgsMzIwMDUsMzQ0MjUsMzUzNDAsNDAyNTEsMjEyNzAsMjE2NDQsMjMzMDEsMjcxOTQsMjg3NzksMzAwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExMTcsMzExNjYsMzM0NTcsMzM3NzUsMzU0NDEsMzU2NDksMzYwMDgsMzg3NzIs''@;'; put 'put ''NjQwMTEsMjU4NDQsMjU4OTksMzA5MDYsMzA5MDcsMzEzMzksMjAwMjQsMjE5MTQsMjI4NjQsMjM0NjIsMjQxODcsMjQ3MzksMjU1NjMsMjc0ODksMjYyMTMsMjY3MDcsMjgxODUsMjkwMjksMjk4NzIsMzIwMDgsMzY5OTYsMzk1MjksMzk5NzMsMjc5NjMsMjgzNjksMjk1MDIsMzU5MDUsMzgz''@;'; put 'put ''NDYsMjA5NzYsMjQxNDAsMjQ0ODgsMjQ2NTMsMjQ4MjIsMjQ4ODAsMjQ5MDgsMjYxNzksMjYxODAsMjcwNDUsMjc4NDEsMjgyNTUsMjgzNjEsMjg1MTQsMjkwMDQsMjk4NTIsMzAzNDMsMzE2ODEsMzE3ODMsMzM2MTgsMzQ2NDcsMzY5NDUsMzg1NDEsNDA2NDMsMjEyOTUsMjIyMzgsMjQzMTUs''@;'; put 'put ''MjQ0NTgsMjQ2NzQsMjQ3MjQsMjUwNzksMjYyMTQsMjYzNzEsMjcyOTIsMjgxNDIsMjg1OTAsMjg3ODQsMjk1NDYsMzIzNjIsMzMyMTQsMzM1ODgsMzQ1MTYsMzU0OTYsMzYwMzYsMjExMjMsMjk1NTQsMjM0NDYsMjcyNDMsMzc4OTIsMjE3NDIsMjIxNTAsMjMzODksMjU5MjgsMjU5ODksMjYz''@;'; put 'put ''MTMsMjY3ODMsMjgwNDUsMjgxMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsMjkyNDMsMzI5NDgsMzcyMzcsMzk1MDEsMjAzOTksMjA1MDUsMjE0MDIsMjE1MTgsMjE1NjQsMjE4OTcsMjE5NTcsMjQxMjcsMjQ0NjAsMjY0MjksMjkwMzAsMjk2NjEsMzY4NjksMjEyMTEsMjEyMzUsMjI2MjgsMjI3MzQsMjg5MzIsMjkwNzEsMjkxNzksMzQyMjQsMzUzNDcsMjYy''@;'; put 'put ''NDgsMzQyMTYsMjE5MjcsMjYyNDQsMjkwMDIsMzM4NDEsMjEzMjEsMjE5MTMsMjc1ODUsMjQ0MDksMjQ1MDksMjU1ODIsMjYyNDksMjg5OTksMzU1NjksMzY2MzcsNDA2MzgsMjAyNDEsMjU2NTgsMjg4NzUsMzAwNTQsMzQ0MDcsMjQ2NzYsMzU2NjIsNDA0NDAsMjA4MDcsMjA5ODIsMjEyNTYs''@;'; put 'put ''Mjc5NTgsMzMwMTYsNDA2NTcsMjYxMzMsMjc0MjcsMjg4MjQsMzAxNjUsMjE1MDcsMjM2NzMsMzIwMDcsMzUzNTAsMjc0MjQsMjc0NTMsMjc0NjIsMjE1NjAsMjQ2ODgsMjc5NjUsMzI3MjUsMzMyODgsMjA2OTQsMjA5NTgsMjE5MTYsMjIxMjMsMjIyMjEsMjMwMjAsMjMzMDUsMjQwNzYsMjQ5''@;'; put 'put ''ODUsMjQ5ODQsMjUxMzcsMjYyMDYsMjYzNDIsMjkwODEsMjkxMTMsMjkxMTQsMjkzNTEsMzExNDMsMzEyMzIsMzI2OTAsMzU0NDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sZ2IxODAzMDpbMTk5NzAsMTk5NzIsMTk5NzMsMTk5NzQsMTk5ODMsMTk5ODYsMTk5OTEsMTk5OTksMmU0LDIwMDAxLDIwMDAzLDIwMDA2LDIwMDA5LDIwMDE0LDIwMDE1LDIwMDE3LDIwMDE5LDIwMDIxLDIwMDIzLDIwMDI4LDIw''@;'; put 'put ''MDMyLDIwMDMzLDIwMDM0LDIwMDM2LDIwMDM4LDIwMDQyLDIwMDQ5LDIwMDUzLDIwMDU1LDIwMDU4LDIwMDU5LDIwMDY2LDIwMDY3LDIwMDY4LDIwMDY5LDIwMDcxLDIwMDcyLDIwMDc0LDIwMDc1LDIwMDc2LDIwMDc3LDIwMDc4LDIwMDc5LDIwMDgyLDIwMDg0LDIwMDg1LDIwMDg2LDIwMDg3''@;'; put 'put ''LDIwMDg4LDIwMDg5LDIwMDkwLDIwMDkxLDIwMDkyLDIwMDkzLDIwMDk1LDIwMDk2LDIwMDk3LDIwMDk4LDIwMDk5LDIwMTAwLDIwMTAxLDIwMTAzLDIwMTA2LDIwMTEyLDIwMTE4LDIwMTE5LDIwMTIxLDIwMTI0LDIwMTI1LDIwMTI2LDIwMTMxLDIwMTM4LDIwMTQzLDIwMTQ0LDIwMTQ1LDIw''@;'; put 'put ''MTQ4LDIwMTUwLDIwMTUxLDIwMTUyLDIwMTUzLDIwMTU2LDIwMTU3LDIwMTU4LDIwMTY4LDIwMTcyLDIwMTc1LDIwMTc2LDIwMTc4LDIwMTg2LDIwMTg3LDIwMTg4LDIwMTkyLDIwMTk0LDIwMTk4LDIwMTk5LDIwMjAxLDIwMjA1LDIwMjA2LDIwMjA3LDIwMjA5LDIwMjEyLDIwMjE2LDIwMjE3''@;'; put 'put ''LDIwMjE4LDIwMjIwLDIwMjIyLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjI4LDIwMjI5LDIwMjMwLDIwMjMxLDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQzLDIwMjQ0LDIwMjQ1LDIwMjQ2LDIwMjUyLDIwMjUzLDIwMjU3LDIwMjU5LDIwMjY0LDIwMjY1LDIwMjY4LDIwMjY5LDIwMjcwLDIw''@;'; put 'put ''MjczLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLDIwMjkyLDIwMjkzLDIwMjk1LDIwMjk2LDIwMjk3LDIwMjk4LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzIxLDIwMzIyLDIwMzI2LDIwMzI4LDIwMzMwLDIwMzMx''@;'; put 'put ''LDIwMzMzLDIwMzM0LDIwMzM3LDIwMzM4LDIwMzQxLDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUyLDIwMzUzLDIwMzU0LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzczLDIwMzc0LDIwMzc2LDIwMzc3LDIwMzc4LDIw''@;'; put 'put ''MzgwLDIwMzgyLDIwMzgzLDIwMzg1LDIwMzg2LDIwMzg4LDIwMzk1LDIwMzk3LDIwNDAwLDIwNDAxLDIwNDAyLDIwNDAzLDIwNDA0LDIwNDA2LDIwNDA3LDIwNDA4LDIwNDA5LDIwNDEwLDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDE4LDIwNDIyLDIwNDIzLDIwNDI0''@;'; put 'put ''LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDM0LDIwNDM1LDIwNDM2LDIwNDM3LDIwNDM4LDIwNDQxLDIwNDQzLDIwNDQ4LDIwNDUwLDIwNDUyLDIwNDUzLDIwNDU1LDIwNDU5LDIwNDYwLDIwNDY0LDIwNDY2LDIwNDY4LDIwNDY5LDIwNDcwLDIwNDcxLDIwNDczLDIwNDc1LDIwNDc2LDIw''@;'; put 'put ''NDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDgyLDIwNDgzLDIwNDg0LDIwNDg1LDIwNDg2LDIwNDg3LDIwNDg4LDIwNDg5LDIwNDkwLDIwNDkxLDIwNDk0LDIwNDk2LDIwNDk3LDIwNDk5LDIwNTAxLDIwNTAyLDIwNTAzLDIwNTA3LDIwNTA5LDIwNTEwLDIwNTEyLDIwNTE0LDIwNTE1LDIwNTE2''@;'; put 'put ''LDIwNTE5LDIwNTIzLDIwNTI3LDIwNTI4LDIwNTI5LDIwNTMwLDIwNTMxLDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3LDIwNTM5LDIwNTQxLDIwNTQzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ4LDIwNTQ5LDIwNTUwLDIwNTUzLDIwNTU0LDIwNTU1LDIwNTU3LDIwNTYwLDIw''@;'; put 'put ''NTYxLDIwNTYyLDIwNTYzLDIwNTY0LDIwNTY2LDIwNTY3LDIwNTY4LDIwNTY5LDIwNTcxLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIwNTc3LDIwNTc4LDIwNTc5LDIwNTgwLDIwNTgyLDIwNTgzLDIwNTg0LDIwNTg1LDIwNTg2LDIwNTg3LDIwNTg5LDIwNTkwLDIwNTkxLDIwNTkyLDIwNTkz''@;'; put 'put ''LDIwNTk0LDIwNTk1LDIwNTk2LDIwNTk3LDIwNjAwLDIwNjAxLDIwNjAyLDIwNjA0LDIwNjA1LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEyLDIwNjE0LDIwNjE1LDIwNjE3LDIwNjE4LDIwNjE5LDIwNjIwLDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI1LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjI5LDIw''@;'; put 'put ''NjMwLDIwNjMxLDIwNjMyLDIwNjMzLDIwNjM0LDIwNjM1LDIwNjM2LDIwNjM3LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjQ0LDIwNjQ2LDIwNjUwLDIwNjUxLDIwNjUzLDIwNjU0LDIwNjU1LDIwNjU2LDIwNjU3LDIwNjU5LDIwNjYwLDIwNjYxLDIwNjYyLDIwNjYzLDIwNjY0''@;'; put 'put ''LDIwNjY1LDIwNjY4LDIwNjY5LDIwNjcwLDIwNjcxLDIwNjcyLDIwNjczLDIwNjc0LDIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LDIwNjg4LDIwNjg5LDIwNjkwLDIwNjkxLDIwNjkyLDIwNjkzLDIwNjk1LDIw''@;'; put 'put ''Njk2LDIwNjk3LDIwNjk5LDIwNzAwLDIwNzAxLDIwNzAyLDIwNzAzLDIwNzA0LDIwNzA1LDIwNzA2LDIwNzA3LDIwNzA4LDIwNzA5LDIwNzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLDIwNzI0LDIwNzI2LDIwNzI3LDIwNzI4LDIwNzI5LDIwNzMwLDIwNzMy''@;'; put 'put ''LDIwNzMzLDIwNzM0LDIwNzM1LDIwNzM2LDIwNzM3LDIwNzM4LDIwNzM5LDIwNzQwLDIwNzQxLDIwNzQ0LDIwNzQ1LDIwNzQ2LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUzLDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LDIwNzU5LDIwNzYwLDIwNzYxLDIwNzYyLDIwNzYzLDIw''@;'; put 'put ''NzY0LDIwNzY1LDIwNzY2LDIwNzY3LDIwNzY4LDIwNzcwLDIwNzcxLDIwNzcyLDIwNzczLDIwNzc0LDIwNzc1LDIwNzc2LDIwNzc3LDIwNzc4LDIwNzc5LDIwNzgwLDIwNzgxLDIwNzgyLDIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkwLDIwNzkxLDIwNzky''@;'; put 'put ''LDIwNzkzLDIwNzk0LDIwNzk1LDIwNzk2LDIwNzk3LDIwNzk4LDIwODAyLDIwODA3LDIwODEwLDIwODEyLDIwODE0LDIwODE1LDIwODE2LDIwODE4LDIwODE5LDIwODIzLDIwODI0LDIwODI1LDIwODI3LDIwODI5LDIwODMwLDIwODMxLDIwODMyLDIwODMzLDIwODM1LDIwODM2LDIwODM4LDIw''@;'; put 'put ''ODM5LDIwODQxLDIwODQyLDIwODQ3LDIwODUwLDIwODU4LDIwODYyLDIwODYzLDIwODY3LDIwODY4LDIwODcwLDIwODcxLDIwODc0LDIwODc1LDIwODc4LDIwODc5LDIwODgwLDIwODgxLDIwODgzLDIwODg0LDIwODg4LDIwODkwLDIwODkzLDIwODk0LDIwODk1LDIwODk3LDIwODk5LDIwOTAy''@;'; put 'put ''LDIwOTAzLDIwOTA0LDIwOTA1LDIwOTA2LDIwOTA5LDIwOTEwLDIwOTE2LDIwOTIwLDIwOTIxLDIwOTIyLDIwOTI2LDIwOTI3LDIwOTI5LDIwOTMwLDIwOTMxLDIwOTMzLDIwOTM2LDIwOTM4LDIwOTQxLDIwOTQyLDIwOTQ0LDIwOTQ2LDIwOTQ3LDIwOTQ4LDIwOTQ5LDIwOTUwLDIwOTUxLDIw''@;'; put 'put ''OTUyLDIwOTUzLDIwOTU0LDIwOTU2LDIwOTU4LDIwOTU5LDIwOTYyLDIwOTYzLDIwOTY1LDIwOTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIwOTcwLDIwOTcyLDIwOTc0LDIwOTc3LDIwOTc4LDIwOTgwLDIwOTgzLDIwOTkwLDIwOTk2LDIwOTk3LDIxMDAxLDIxMDAzLDIxMDA0LDIxMDA3LDIxMDA4''@;'; put 'put ''LDIxMDExLDIxMDEyLDIxMDEzLDIxMDIwLDIxMDIyLDIxMDIzLDIxMDI1LDIxMDI2LDIxMDI3LDIxMDI5LDIxMDMwLDIxMDMxLDIxMDM0LDIxMDM2LDIxMDM5LDIxMDQxLDIxMDQyLDIxMDQ0LDIxMDQ1LDIxMDUyLDIxMDU0LDIxMDYwLDIxMDYxLDIxMDYyLDIxMDYzLDIxMDY0LDIxMDY1LDIx''@;'; put 'put ''MDY3LDIxMDcwLDIxMDcxLDIxMDc0LDIxMDc1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgxLDIxMDgyLDIxMDgzLDIxMDg1LDIxMDg3LDIxMDg4LDIxMDkwLDIxMDkxLDIxMDkyLDIxMDk0LDIxMDk2LDIxMDk5LDIxMTAwLDIxMTAxLDIxMTAyLDIxMTA0LDIxMTA1LDIxMTA3LDIxMTA4LDIxMTA5''@;'; put 'put ''LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIxMTE0LDIxMTE1LDIxMTE2LDIxMTE4LDIxMTIwLDIxMTIzLDIxMTI0LDIxMTI1LDIxMTI2LDIxMTI3LDIxMTI5LDIxMTMwLDIxMTMxLDIxMTMyLDIxMTMzLDIxMTM0LDIxMTM1LDIxMTM3LDIxMTM4LDIxMTQwLDIxMTQxLDIxMTQyLDIxMTQzLDIx''@;'; put 'put ''MTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY2LDIxMTY3LDIxMTY4LDIxMTcyLDIxMTczLDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc3LDIxMTc4LDIxMTc5LDIxMTgwLDIxMTgxLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg4LDIxMTg5LDIxMTkwLDIxMTky''@;'; put 'put ''LDIxMTk0LDIxMTk2LDIxMTk3LDIxMTk4LDIxMTk5LDIxMjAxLDIxMjAzLDIxMjA0LDIxMjA1LDIxMjA3LDIxMjA5LDIxMjEwLDIxMjExLDIxMjEyLDIxMjEzLDIxMjE0LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI3LDIx''@;'; put 'put ''MjI4LDIxMjI5LDIxMjMwLDIxMjMxLDIxMjMzLDIxMjM0LDIxMjM1LDIxMjM2LDIxMjM3LDIxMjM4LDIxMjM5LDIxMjQwLDIxMjQzLDIxMjQ0LDIxMjQ1LDIxMjQ5LDIxMjUwLDIxMjUxLDIxMjUyLDIxMjU1LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYyLDIxMjY1LDIxMjY2LDIxMjY3''@;'; put 'put ''LDIxMjY4LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjgyLDIxMjg0LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LDIxMjk5LDIxMzAwLDIxMzAxLDIxMzAyLDIxMzAzLDIxMzA0LDIxMzA4LDIxMzA5LDIx''@;'; put 'put ''MzEyLDIxMzE0LDIxMzE2LDIxMzE4LDIxMzIzLDIxMzI0LDIxMzI1LDIxMzI4LDIxMzMyLDIxMzM2LDIxMzM3LDIxMzM5LDIxMzQxLDIxMzQ5LDIxMzUyLDIxMzU0LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY2LDIxMzY5LDIxMzcxLDIxMzcyLDIxMzczLDIxMzc0LDIxMzc2LDIxMzc3LDIxMzc5''@;'; put 'put ''LDIxMzgzLDIxMzg0LDIxMzg2LDIxMzkwLDIxMzkxLDIxMzkyLDIxMzkzLDIxMzk0LDIxMzk1LDIxMzk2LDIxMzk4LDIxMzk5LDIxNDAxLDIxNDAzLDIxNDA0LDIxNDA2LDIxNDA4LDIxNDA5LDIxNDEyLDIxNDE1LDIxNDE4LDIxNDE5LDIxNDIwLDIxNDIxLDIxNDIzLDIxNDI0LDIxNDI1LDIx''@;'; put 'put ''NDI2LDIxNDI3LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDMzLDIxNDM0LDIxNDM2LDIxNDM3LDIxNDM4LDIxNDQwLDIxNDQzLDIxNDQ0LDIxNDQ1LDIxNDQ2LDIxNDQ3LDIxNDU0LDIxNDU1LDIxNDU2LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDcz''@;'; put 'put ''LDIxNDc0LDIxNDc5LDIxNDkyLDIxNDk4LDIxNTAyLDIxNTAzLDIxNTA0LDIxNTA2LDIxNTA5LDIxNTExLDIxNTE1LDIxNTI0LDIxNTI4LDIxNTI5LDIxNTMwLDIxNTMyLDIxNTM4LDIxNTQwLDIxNTQxLDIxNTQ2LDIxNTUyLDIxNTU1LDIxNTU4LDIxNTU5LDIxNTYyLDIxNTY1LDIxNTY3LDIx''@;'; put 'put ''NTY5LDIxNTcwLDIxNTcyLDIxNTczLDIxNTc1LDIxNTc3LDIxNTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg1LDIxNTk0LDIxNTk3LDIxNTk4LDIxNTk5LDIxNjAwLDIxNjAxLDIxNjAzLDIxNjA1LDIxNjA3LDIxNjA5LDIxNjEwLDIxNjExLDIxNjEyLDIxNjEzLDIxNjE0LDIxNjE1LDIxNjE2''@;'; put 'put ''LDIxNjIwLDIxNjI1LDIxNjI2LDIxNjMwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjM5LDIxNjQwLDIxNjQxLDIxNjQyLDIxNjQ1LDIxNjQ5LDIxNjUxLDIxNjU1LDIxNjU2LDIxNjYwLDIxNjYyLDIxNjYzLDIxNjY0LDIxNjY1LDIxNjY2LDIxNjY5LDIxNjc4LDIxNjgwLDIxNjgyLDIx''@;'; put 'put ''Njg1LDIxNjg2LDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkyLDIxNjk0LDIxNjk5LDIxNzAxLDIxNzA2LDIxNzA3LDIxNzE4LDIxNzIwLDIxNzIzLDIxNzI4LDIxNzI5LDIxNzMwLDIxNzMxLDIxNzMyLDIxNzM5LDIxNzQwLDIxNzQzLDIxNzQ0LDIxNzQ1LDIxNzQ4LDIxNzQ5LDIxNzUwLDIxNzUx''@;'; put 'put ''LDIxNzUyLDIxNzUzLDIxNzU1LDIxNzU4LDIxNzYwLDIxNzYyLDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY4LDIxNzcwLDIxNzcxLDIxNzcyLDIxNzczLDIxNzc0LDIxNzc4LDIxNzc5LDIxNzgxLDIxNzgyLDIxNzgzLDIxNzg0LDIxNzg1LDIxNzg2LDIxNzg4LDIxNzg5LDIxNzkwLDIxNzkxLDIx''@;'; put 'put ''NzkzLDIxNzk3LDIxNzk4LDIxODAwLDIxODAxLDIxODAzLDIxODA1LDIxODEwLDIxODEyLDIxODEzLDIxODE0LDIxODE2LDIxODE3LDIxODE4LDIxODE5LDIxODIxLDIxODI0LDIxODI2LDIxODI5LDIxODMxLDIxODMyLDIxODM1LDIxODM2LDIxODM3LDIxODM4LDIxODM5LDIxODQxLDIxODQy''@;'; put 'put ''LDIxODQzLDIxODQ0LDIxODQ3LDIxODQ4LDIxODQ5LDIxODUwLDIxODUxLDIxODUzLDIxODU0LDIxODU1LDIxODU2LDIxODU4LDIxODU5LDIxODY0LDIxODY1LDIxODY3LDIxODcxLDIxODcyLDIxODczLDIxODc0LDIxODc1LDIxODc2LDIxODgxLDIxODgyLDIxODg1LDIxODg3LDIxODkzLDIx''@;'; put 'put ''ODk0LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTA0LDIxOTA2LDIxOTA3LDIxOTA5LDIxOTEwLDIxOTExLDIxOTE0LDIxOTE1LDIxOTE4LDIxOTIwLDIxOTIxLDIxOTIyLDIxOTIzLDIxOTI0LDIxOTI1LDIxOTI2LDIxOTI4LDIxOTI5LDIxOTMwLDIxOTMxLDIxOTMyLDIxOTMzLDIxOTM0LDIxOTM1''@;'; put 'put ''LDIxOTM2LDIxOTM4LDIxOTQwLDIxOTQyLDIxOTQ0LDIxOTQ2LDIxOTQ4LDIxOTUxLDIxOTUyLDIxOTUzLDIxOTU0LDIxOTU1LDIxOTU4LDIxOTU5LDIxOTYwLDIxOTYyLDIxOTYzLDIxOTY2LDIxOTY3LDIxOTY4LDIxOTczLDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgyLDIx''@;'; put 'put ''OTg0LDIxOTg2LDIxOTkxLDIxOTkzLDIxOTk3LDIxOTk4LDIyZTMsMjIwMDEsMjIwMDQsMjIwMDYsMjIwMDgsMjIwMDksMjIwMTAsMjIwMTEsMjIwMTIsMjIwMTUsMjIwMTgsMjIwMTksMjIwMjAsMjIwMjEsMjIwMjIsMjIwMjMsMjIwMjYsMjIwMjcsMjIwMjksMjIwMzIsMjIwMzMsMjIwMzQs''@;'; put 'put ''MjIwMzUsMjIwMzYsMjIwMzcsMjIwMzgsMjIwMzksMjIwNDEsMjIwNDIsMjIwNDQsMjIwNDUsMjIwNDgsMjIwNDksMjIwNTAsMjIwNTMsMjIwNTQsMjIwNTYsMjIwNTcsMjIwNTgsMjIwNTksMjIwNjIsMjIwNjMsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzIsMjIwNzQsMjIwNzYsMjIw''@;'; put 'put ''NzcsMjIwNzgsMjIwODAsMjIwODEsMjIwODIsMjIwODMsMjIwODQsMjIwODUsMjIwODYsMjIwODcsMjIwODgsMjIwODksMjIwOTAsMjIwOTEsMjIwOTUsMjIwOTYsMjIwOTcsMjIwOTgsMjIwOTksMjIxMDEsMjIxMDIsMjIxMDYsMjIxMDcsMjIxMDksMjIxMTAsMjIxMTEsMjIxMTIsMjIxMTMs''@;'; put 'put ''MjIxMTUsMjIxMTcsMjIxMTgsMjIxMTksMjIxMjUsMjIxMjYsMjIxMjcsMjIxMjgsMjIxMzAsMjIxMzEsMjIxMzIsMjIxMzMsMjIxMzUsMjIxMzYsMjIxMzcsMjIxMzgsMjIxNDEsMjIxNDIsMjIxNDMsMjIxNDQsMjIxNDUsMjIxNDYsMjIxNDcsMjIxNDgsMjIxNTEsMjIxNTIsMjIxNTMsMjIx''@;'; put 'put ''NTQsMjIxNTUsMjIxNTYsMjIxNTcsMjIxNjAsMjIxNjEsMjIxNjIsMjIxNjQsMjIxNjUsMjIxNjYsMjIxNjcsMjIxNjgsMjIxNjksMjIxNzAsMjIxNzEsMjIxNzIsMjIxNzMsMjIxNzQsMjIxNzUsMjIxNzYsMjIxNzcsMjIxNzgsMjIxODAsMjIxODEsMjIxODIsMjIxODMsMjIxODQsMjIxODUs''@;'; put 'put ''MjIxODYsMjIxODcsMjIxODgsMjIxODksMjIxOTAsMjIxOTIsMjIxOTMsMjIxOTQsMjIxOTUsMjIxOTYsMjIxOTcsMjIxOTgsMjIyMDAsMjIyMDEsMjIyMDIsMjIyMDMsMjIyMDUsMjIyMDYsMjIyMDcsMjIyMDgsMjIyMDksMjIyMTAsMjIyMTEsMjIyMTIsMjIyMTMsMjIyMTQsMjIyMTUsMjIy''@;'; put 'put ''MTYsMjIyMTcsMjIyMTksMjIyMjAsMjIyMjEsMjIyMjIsMjIyMjMsMjIyMjQsMjIyMjUsMjIyMjYsMjIyMjcsMjIyMjksMjIyMzAsMjIyMzIsMjIyMzMsMjIyMzYsMjIyNDMsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNDksMjIyNTAsMjIyNTIsMjIyNTQsMjIyNTUsMjIyNTgsMjIyNTks''@;'; put 'put ''MjIyNjIsMjIyNjMsMjIyNjQsMjIyNjcsMjIyNjgsMjIyNzIsMjIyNzMsMjIyNzQsMjIyNzcsMjIyNzksMjIyODMsMjIyODQsMjIyODUsMjIyODYsMjIyODcsMjIyODgsMjIyODksMjIyOTAsMjIyOTEsMjIyOTIsMjIyOTMsMjIyOTQsMjIyOTUsMjIyOTYsMjIyOTcsMjIyOTgsMjIyOTksMjIz''@;'; put 'put ''MDEsMjIzMDIsMjIzMDQsMjIzMDUsMjIzMDYsMjIzMDgsMjIzMDksMjIzMTAsMjIzMTEsMjIzMTUsMjIzMjEsMjIzMjIsMjIzMjQsMjIzMjUsMjIzMjYsMjIzMjcsMjIzMjgsMjIzMzIsMjIzMzMsMjIzMzUsMjIzMzcsMjIzMzksMjIzNDAsMjIzNDEsMjIzNDIsMjIzNDQsMjIzNDUsMjIzNDcs''@;'; put 'put ''MjIzNTQsMjIzNTUsMjIzNTYsMjIzNTcsMjIzNTgsMjIzNjAsMjIzNjEsMjIzNzAsMjIzNzEsMjIzNzMsMjIzNzUsMjIzODAsMjIzODIsMjIzODQsMjIzODUsMjIzODYsMjIzODgsMjIzODksMjIzOTIsMjIzOTMsMjIzOTQsMjIzOTcsMjIzOTgsMjIzOTksMjI0MDAsMjI0MDEsMjI0MDcsMjI0''@;'; put 'put ''MDgsMjI0MDksMjI0MTAsMjI0MTMsMjI0MTQsMjI0MTUsMjI0MTYsMjI0MTcsMjI0MjAsMjI0MjEsMjI0MjIsMjI0MjMsMjI0MjQsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzcsMjI0NDAsMjI0NDIsMjI0NDQsMjI0NDcsMjI0NDgsMjI0NDksMjI0NTEsMjI0NTMs''@;'; put 'put ''MjI0NTQsMjI0NTUsMjI0NTcsMjI0NTgsMjI0NTksMjI0NjAsMjI0NjEsMjI0NjIsMjI0NjMsMjI0NjQsMjI0NjUsMjI0NjgsMjI0NjksMjI0NzAsMjI0NzEsMjI0NzIsMjI0NzMsMjI0NzQsMjI0NzYsMjI0NzcsMjI0ODAsMjI0ODEsMjI0ODMsMjI0ODYsMjI0ODcsMjI0OTEsMjI0OTIsMjI0''@;'; put 'put ''OTQsMjI0OTcsMjI0OTgsMjI0OTksMjI1MDEsMjI1MDIsMjI1MDMsMjI1MDQsMjI1MDUsMjI1MDYsMjI1MDcsMjI1MDgsMjI1MTAsMjI1MTIsMjI1MTMsMjI1MTQsMjI1MTUsMjI1MTcsMjI1MTgsMjI1MTksMjI1MjMsMjI1MjQsMjI1MjYsMjI1MjcsMjI1MjksMjI1MzEsMjI1MzIsMjI1MzMs''@;'; put 'put ''MjI1MzYsMjI1MzcsMjI1MzgsMjI1NDAsMjI1NDIsMjI1NDMsMjI1NDQsMjI1NDYsMjI1NDcsMjI1NDgsMjI1NTAsMjI1NTEsMjI1NTIsMjI1NTQsMjI1NTUsMjI1NTYsMjI1NTcsMjI1NTksMjI1NjIsMjI1NjMsMjI1NjUsMjI1NjYsMjI1NjcsMjI1NjgsMjI1NjksMjI1NzEsMjI1NzIsMjI1''@;'; put 'put ''NzMsMjI1NzQsMjI1NzUsMjI1NzcsMjI1NzgsMjI1NzksMjI1ODAsMjI1ODIsMjI1ODMsMjI1ODQsMjI1ODUsMjI1ODYsMjI1ODcsMjI1ODgsMjI1ODksMjI1OTAsMjI1OTEsMjI1OTIsMjI1OTMsMjI1OTQsMjI1OTUsMjI1OTcsMjI1OTgsMjI1OTksMjI2MDAsMjI2MDEsMjI2MDIsMjI2MDMs''@;'; put 'put ''MjI2MDYsMjI2MDcsMjI2MDgsMjI2MTAsMjI2MTEsMjI2MTMsMjI2MTQsMjI2MTUsMjI2MTcsMjI2MTgsMjI2MTksMjI2MjAsMjI2MjEsMjI2MjMsMjI2MjQsMjI2MjUsMjI2MjYsMjI2MjcsMjI2MjgsMjI2MzAsMjI2MzEsMjI2MzIsMjI2MzMsMjI2MzQsMjI2MzcsMjI2MzgsMjI2MzksMjI2''@;'; put 'put ''NDAsMjI2NDEsMjI2NDIsMjI2NDMsMjI2NDQsMjI2NDUsMjI2NDYsMjI2NDcsMjI2NDgsMjI2NDksMjI2NTAsMjI2NTEsMjI2NTIsMjI2NTMsMjI2NTUsMjI2NTgsMjI2NjAsMjI2NjIsMjI2NjMsMjI2NjQsMjI2NjYsMjI2NjcsMjI2NjgsMjI2NjksMjI2NzAsMjI2NzEsMjI2NzIsMjI2NzMs''@;'; put 'put ''MjI2NzYsMjI2NzcsMjI2NzgsMjI2NzksMjI2ODAsMjI2ODMsMjI2ODQsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTEsMjI2OTIsMjI2OTMsMjI2OTQsMjI2OTUsMjI2OTgsMjI2OTksMjI3MDAsMjI3MDEsMjI3MDIsMjI3MDMsMjI3MDQsMjI3MDUsMjI3MDYsMjI3MDcsMjI3MDgsMjI3''@;'; put 'put ''MDksMjI3MTAsMjI3MTEsMjI3MTIsMjI3MTMsMjI3MTQsMjI3MTUsMjI3MTcsMjI3MTgsMjI3MTksMjI3MjAsMjI3MjIsMjI3MjMsMjI3MjQsMjI3MjYsMjI3MjcsMjI3MjgsMjI3MjksMjI3MzAsMjI3MzEsMjI3MzIsMjI3MzMsMjI3MzQsMjI3MzUsMjI3MzYsMjI3MzgsMjI3MzksMjI3NDAs''@;'; put 'put ''MjI3NDIsMjI3NDMsMjI3NDQsMjI3NDUsMjI3NDYsMjI3NDcsMjI3NDgsMjI3NDksMjI3NTAsMjI3NTEsMjI3NTIsMjI3NTMsMjI3NTQsMjI3NTUsMjI3NTcsMjI3NTgsMjI3NTksMjI3NjAsMjI3NjEsMjI3NjIsMjI3NjUsMjI3NjcsMjI3NjksMjI3NzAsMjI3NzIsMjI3NzMsMjI3NzUsMjI3''@;'; put 'put ''NzYsMjI3NzgsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODIsMjI3ODMsMjI3ODQsMjI3ODUsMjI3ODcsMjI3ODksMjI3OTAsMjI3OTIsMjI3OTMsMjI3OTQsMjI3OTUsMjI3OTYsMjI3OTgsMjI4MDAsMjI4MDEsMjI4MDIsMjI4MDMsMjI4MDcsMjI4MDgsMjI4MTEsMjI4MTMsMjI4MTQsMjI4MTYs''@;'; put 'put ''MjI4MTcsMjI4MTgsMjI4MTksMjI4MjIsMjI4MjQsMjI4MjgsMjI4MzIsMjI4MzQsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDMsMjI4NDUsMjI4NDYsMjI4NDcsMjI4NDgsMjI4NTEsMjI4NTMsMjI4NTQsMjI4NTgsMjI4NjAsMjI4NjEsMjI4NjQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4''@;'; put 'put ''NzYsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4ODQsMjI4ODYsMjI4ODcsMjI4ODgsMjI4ODksMjI4OTAsMjI4OTEsMjI4OTIsMjI4OTMsMjI4OTQsMjI4OTUsMjI4OTYsMjI4OTcsMjI4OTgsMjI5MDEsMjI5MDMsMjI5MDYsMjI5MDcsMjI5MDgsMjI5MTAsMjI5MTEsMjI5MTIs''@;'; put 'put ''MjI5MTcsMjI5MjEsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MjcsMjI5MjgsMjI5MjksMjI5MzIsMjI5MzMsMjI5MzYsMjI5MzgsMjI5MzksMjI5NDAsMjI5NDEsMjI5NDMsMjI5NDQsMjI5NDUsMjI5NDYsMjI5NTAsMjI5NTEsMjI5NTYsMjI5NTcsMjI5NjAsMjI5NjEsMjI5NjMsMjI5NjQsMjI5''@;'; put 'put ''NjUsMjI5NjYsMjI5NjcsMjI5NjgsMjI5NzAsMjI5NzIsMjI5NzMsMjI5NzUsMjI5NzYsMjI5NzcsMjI5NzgsMjI5NzksMjI5ODAsMjI5ODEsMjI5ODMsMjI5ODQsMjI5ODUsMjI5ODgsMjI5ODksMjI5OTAsMjI5OTEsMjI5OTcsMjI5OTgsMjMwMDEsMjMwMDMsMjMwMDYsMjMwMDcsMjMwMDgs''@;'; put 'put ''MjMwMDksMjMwMTAsMjMwMTIsMjMwMTQsMjMwMTUsMjMwMTcsMjMwMTgsMjMwMTksMjMwMjEsMjMwMjIsMjMwMjMsMjMwMjQsMjMwMjUsMjMwMjYsMjMwMjcsMjMwMjgsMjMwMjksMjMwMzAsMjMwMzEsMjMwMzIsMjMwMzQsMjMwMzYsMjMwMzcsMjMwMzgsMjMwNDAsMjMwNDIsMjMwNTAsMjMw''@;'; put 'put ''NTEsMjMwNTMsMjMwNTQsMjMwNTUsMjMwNTYsMjMwNTgsMjMwNjAsMjMwNjEsMjMwNjIsMjMwNjMsMjMwNjUsMjMwNjYsMjMwNjcsMjMwNjksMjMwNzAsMjMwNzMsMjMwNzQsMjMwNzYsMjMwNzgsMjMwNzksMjMwODAsMjMwODIsMjMwODMsMjMwODQsMjMwODUsMjMwODYsMjMwODcsMjMwODgs''@;'; put 'put ''MjMwOTEsMjMwOTMsMjMwOTUsMjMwOTYsMjMwOTcsMjMwOTgsMjMwOTksMjMxMDEsMjMxMDIsMjMxMDMsMjMxMDUsMjMxMDYsMjMxMDcsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTUsMjMxMTYsMjMxMTcsMjMxMTgsMjMxMTksMjMxMjAsMjMxMjEsMjMxMjIsMjMxMjMsMjMxMjQsMjMx''@;'; put 'put ''MjYsMjMxMjcsMjMxMjgsMjMxMjksMjMxMzEsMjMxMzIsMjMxMzMsMjMxMzQsMjMxMzUsMjMxMzYsMjMxMzcsMjMxMzksMjMxNDAsMjMxNDEsMjMxNDIsMjMxNDQsMjMxNDUsMjMxNDcsMjMxNDgsMjMxNDksMjMxNTAsMjMxNTEsMjMxNTIsMjMxNTMsMjMxNTQsMjMxNTUsMjMxNjAsMjMxNjEs''@;'; put 'put ''MjMxNjMsMjMxNjQsMjMxNjUsMjMxNjYsMjMxNjgsMjMxNjksMjMxNzAsMjMxNzEsMjMxNzIsMjMxNzMsMjMxNzQsMjMxNzUsMjMxNzYsMjMxNzcsMjMxNzgsMjMxNzksMjMxODAsMjMxODEsMjMxODIsMjMxODMsMjMxODQsMjMxODUsMjMxODcsMjMxODgsMjMxODksMjMxOTAsMjMxOTEsMjMx''@;'; put 'put ''OTIsMjMxOTMsMjMxOTYsMjMxOTcsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDEsMjMyMDIsMjMyMDMsMjMyMDQsMjMyMDUsMjMyMDYsMjMyMDcsMjMyMDgsMjMyMDksMjMyMTEsMjMyMTIsMjMyMTMsMjMyMTQsMjMyMTUsMjMyMTYsMjMyMTcsMjMyMjAsMjMyMjIsMjMyMjMsMjMyMjUsMjMyMjYs''@;'; put 'put ''MjMyMjcsMjMyMjgsMjMyMjksMjMyMzEsMjMyMzIsMjMyMzUsMjMyMzYsMjMyMzcsMjMyMzgsMjMyMzksMjMyNDAsMjMyNDIsMjMyNDMsMjMyNDUsMjMyNDYsMjMyNDcsMjMyNDgsMjMyNDksMjMyNTEsMjMyNTMsMjMyNTUsMjMyNTcsMjMyNTgsMjMyNTksMjMyNjEsMjMyNjIsMjMyNjMsMjMy''@;'; put 'put ''NjYsMjMyNjgsMjMyNjksMjMyNzEsMjMyNzIsMjMyNzQsMjMyNzYsMjMyNzcsMjMyNzgsMjMyNzksMjMyODAsMjMyODIsMjMyODMsMjMyODQsMjMyODUsMjMyODYsMjMyODcsMjMyODgsMjMyODksMjMyOTAsMjMyOTEsMjMyOTIsMjMyOTMsMjMyOTQsMjMyOTUsMjMyOTYsMjMyOTcsMjMyOTgs''@;'; put 'put ''MjMyOTksMjMzMDAsMjMzMDEsMjMzMDIsMjMzMDMsMjMzMDQsMjMzMDYsMjMzMDcsMjMzMDgsMjMzMDksMjMzMTAsMjMzMTEsMjMzMTIsMjMzMTMsMjMzMTQsMjMzMTUsMjMzMTYsMjMzMTcsMjMzMjAsMjMzMjEsMjMzMjIsMjMzMjMsMjMzMjQsMjMzMjUsMjMzMjYsMjMzMjcsMjMzMjgsMjMz''@;'; put 'put ''MjksMjMzMzAsMjMzMzEsMjMzMzIsMjMzMzMsMjMzMzQsMjMzMzUsMjMzMzYsMjMzMzcsMjMzMzgsMjMzMzksMjMzNDAsMjMzNDEsMjMzNDIsMjMzNDMsMjMzNDQsMjMzNDUsMjMzNDcsMjMzNDksMjMzNTAsMjMzNTIsMjMzNTMsMjMzNTQsMjMzNTUsMjMzNTYsMjMzNTcsMjMzNTgsMjMzNTks''@;'; put 'put ''MjMzNjEsMjMzNjIsMjMzNjMsMjMzNjQsMjMzNjUsMjMzNjYsMjMzNjcsMjMzNjgsMjMzNjksMjMzNzAsMjMzNzEsMjMzNzIsMjMzNzMsMjMzNzQsMjMzNzUsMjMzNzgsMjMzODIsMjMzOTAsMjMzOTIsMjMzOTMsMjMzOTksMjM0MDAsMjM0MDMsMjM0MDUsMjM0MDYsMjM0MDcsMjM0MTAsMjM0''@;'; put 'put ''MTIsMjM0MTQsMjM0MTUsMjM0MTYsMjM0MTcsMjM0MTksMjM0MjAsMjM0MjIsMjM0MjMsMjM0MjYsMjM0MzAsMjM0MzQsMjM0MzcsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDIsMjM0NDQsMjM0NDYsMjM0NTUsMjM0NjMsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzAsMjM0NzEsMjM0NzMs''@;'; put 'put ''MjM0NzQsMjM0NzksMjM0ODIsMjM0ODMsMjM0ODQsMjM0ODgsMjM0ODksMjM0OTEsMjM0OTYsMjM0OTcsMjM0OTgsMjM0OTksMjM1MDEsMjM1MDIsMjM1MDMsMjM1MDUsMjM1MDgsMjM1MDksMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MTUsMjM1MTYsMjM1MjAsMjM1MjIsMjM1''@;'; put 'put ''MjMsMjM1MjYsMjM1MjcsMjM1MjksMjM1MzAsMjM1MzEsMjM1MzIsMjM1MzMsMjM1MzUsMjM1MzcsMjM1MzgsMjM1MzksMjM1NDAsMjM1NDEsMjM1NDIsMjM1NDMsMjM1NDksMjM1NTAsMjM1NTIsMjM1NTQsMjM1NTUsMjM1NTcsMjM1NTksMjM1NjAsMjM1NjMsMjM1NjQsMjM1NjUsMjM1NjYs''@;'; put 'put ''MjM1NjgsMjM1NzAsMjM1NzEsMjM1NzUsMjM1NzcsMjM1NzksMjM1ODIsMjM1ODMsMjM1ODQsMjM1ODUsMjM1ODcsMjM1OTAsMjM1OTIsMjM1OTMsMjM1OTQsMjM1OTUsMjM1OTcsMjM1OTgsMjM1OTksMjM2MDAsMjM2MDIsMjM2MDMsMjM2MDUsMjM2MDYsMjM2MDcsMjM2MTksMjM2MjAsMjM2''@;'; put 'put ''MjIsMjM2MjMsMjM2MjgsMjM2MjksMjM2MzQsMjM2MzUsMjM2MzYsMjM2MzgsMjM2MzksMjM2NDAsMjM2NDIsMjM2NDMsMjM2NDQsMjM2NDUsMjM2NDcsMjM2NTAsMjM2NTIsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NTgsMjM2NTksMjM2NjAsMjM2NjEsMjM2NjQsMjM2NjYsMjM2NjcsMjM2Njgs''@;'; put 'put ''MjM2NjksMjM2NzAsMjM2NzEsMjM2NzIsMjM2NzUsMjM2NzYsMjM2NzcsMjM2NzgsMjM2ODAsMjM2ODMsMjM2ODQsMjM2ODUsMjM2ODYsMjM2ODcsMjM2ODksMjM2OTAsMjM2OTEsMjM2OTQsMjM2OTUsMjM2OTgsMjM2OTksMjM3MDEsMjM3MDksMjM3MTAsMjM3MTEsMjM3MTIsMjM3MTMsMjM3''@;'; put 'put ''MTYsMjM3MTcsMjM3MTgsMjM3MTksMjM3MjAsMjM3MjIsMjM3MjYsMjM3MjcsMjM3MjgsMjM3MzAsMjM3MzIsMjM3MzQsMjM3MzcsMjM3MzgsMjM3MzksMjM3NDAsMjM3NDIsMjM3NDQsMjM3NDYsMjM3NDcsMjM3NDksMjM3NTAsMjM3NTEsMjM3NTIsMjM3NTMsMjM3NTQsMjM3NTYsMjM3NTcs''@;'; put 'put ''MjM3NTgsMjM3NTksMjM3NjAsMjM3NjEsMjM3NjMsMjM3NjQsMjM3NjUsMjM3NjYsMjM3NjcsMjM3NjgsMjM3NzAsMjM3NzEsMjM3NzIsMjM3NzMsMjM3NzQsMjM3NzUsMjM3NzYsMjM3NzgsMjM3NzksMjM3ODMsMjM3ODUsMjM3ODcsMjM3ODgsMjM3OTAsMjM3OTEsMjM3OTMsMjM3OTQsMjM3''@;'; put 'put ''OTUsMjM3OTYsMjM3OTcsMjM3OTgsMjM3OTksMjM4MDAsMjM4MDEsMjM4MDIsMjM4MDQsMjM4MDUsMjM4MDYsMjM4MDcsMjM4MDgsMjM4MDksMjM4MTIsMjM4MTMsMjM4MTYsMjM4MTcsMjM4MTgsMjM4MTksMjM4MjAsMjM4MjEsMjM4MjMsMjM4MjQsMjM4MjUsMjM4MjYsMjM4MjcsMjM4Mjks''@;'; put 'put ''MjM4MzEsMjM4MzIsMjM4MzMsMjM4MzQsMjM4MzYsMjM4MzcsMjM4MzksMjM4NDAsMjM4NDEsMjM4NDIsMjM4NDMsMjM4NDUsMjM4NDgsMjM4NTAsMjM4NTEsMjM4NTIsMjM4NTUsMjM4NTYsMjM4NTcsMjM4NTgsMjM4NTksMjM4NjEsMjM4NjIsMjM4NjMsMjM4NjQsMjM4NjUsMjM4NjYsMjM4''@;'; put 'put ''NjcsMjM4NjgsMjM4NzEsMjM4NzIsMjM4NzMsMjM4NzQsMjM4NzUsMjM4NzYsMjM4NzcsMjM4NzgsMjM4ODAsMjM4ODEsMjM4ODUsMjM4ODYsMjM4ODcsMjM4ODgsMjM4ODksMjM4OTAsMjM4OTEsMjM4OTIsMjM4OTMsMjM4OTQsMjM4OTUsMjM4OTcsMjM4OTgsMjM5MDAsMjM5MDIsMjM5MDMs''@;'; put 'put ''MjM5MDQsMjM5MDUsMjM5MDYsMjM5MDcsMjM5MDgsMjM5MDksMjM5MTAsMjM5MTEsMjM5MTIsMjM5MTQsMjM5MTcsMjM5MTgsMjM5MjAsMjM5MjEsMjM5MjIsMjM5MjMsMjM5MjUsMjM5MjYsMjM5MjcsMjM5MjgsMjM5MjksMjM5MzAsMjM5MzEsMjM5MzIsMjM5MzMsMjM5MzQsMjM5MzUsMjM5''@;'; put 'put ''MzYsMjM5MzcsMjM5MzksMjM5NDAsMjM5NDEsMjM5NDIsMjM5NDMsMjM5NDQsMjM5NDUsMjM5NDYsMjM5NDcsMjM5NDgsMjM5NDksMjM5NTAsMjM5NTEsMjM5NTIsMjM5NTMsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NTgsMjM5NTksMjM5NjAsMjM5NjIsMjM5NjMsMjM5NjQsMjM5NjYs''@;'; put 'put ''MjM5NjcsMjM5NjgsMjM5NjksMjM5NzAsMjM5NzEsMjM5NzIsMjM5NzMsMjM5NzQsMjM5NzUsMjM5NzYsMjM5NzcsMjM5NzgsMjM5NzksMjM5ODAsMjM5ODEsMjM5ODIsMjM5ODMsMjM5ODQsMjM5ODUsMjM5ODYsMjM5ODcsMjM5ODgsMjM5ODksMjM5OTAsMjM5OTIsMjM5OTMsMjM5OTQsMjM5''@;'; put 'put ''OTUsMjM5OTYsMjM5OTcsMjM5OTgsMjM5OTksMjRlMywyNDAwMSwyNDAwMiwyNDAwMywyNDAwNCwyNDAwNiwyNDAwNywyNDAwOCwyNDAwOSwyNDAxMCwyNDAxMSwyNDAxMiwyNDAxNCwyNDAxNSwyNDAxNiwyNDAxNywyNDAxOCwyNDAxOSwyNDAyMCwyNDAyMSwyNDAyMiwyNDAyMywyNDAyNCwy''@;'; put 'put ''NDAyNSwyNDAyNiwyNDAyOCwyNDAzMSwyNDAzMiwyNDAzNSwyNDAzNiwyNDA0MiwyNDA0NCwyNDA0NSwyNDA0OCwyNDA1MywyNDA1NCwyNDA1NiwyNDA1NywyNDA1OCwyNDA1OSwyNDA2MCwyNDA2MywyNDA2NCwyNDA2OCwyNDA3MSwyNDA3MywyNDA3NCwyNDA3NSwyNDA3NywyNDA3OCwyNDA4''@;'; put 'put ''MiwyNDA4MywyNDA4NywyNDA5NCwyNDA5NSwyNDA5NiwyNDA5NywyNDA5OCwyNDA5OSwyNDEwMCwyNDEwMSwyNDEwNCwyNDEwNSwyNDEwNiwyNDEwNywyNDEwOCwyNDExMSwyNDExMiwyNDExNCwyNDExNSwyNDExNiwyNDExNywyNDExOCwyNDEyMSwyNDEyMiwyNDEyNiwyNDEyNywyNDEyOCwy''@;'; put 'put ''NDEyOSwyNDEzMSwyNDEzNCwyNDEzNSwyNDEzNiwyNDEzNywyNDEzOCwyNDEzOSwyNDE0MSwyNDE0MiwyNDE0MywyNDE0NCwyNDE0NSwyNDE0NiwyNDE0NywyNDE1MCwyNDE1MSwyNDE1MiwyNDE1MywyNDE1NCwyNDE1NiwyNDE1NywyNDE1OSwyNDE2MCwyNDE2MywyNDE2NCwyNDE2NSwyNDE2''@;'; put 'put ''NiwyNDE2NywyNDE2OCwyNDE2OSwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NSwyNDE3NiwyNDE3NywyNDE4MSwyNDE4MywyNDE4NSwyNDE5MCwyNDE5MywyNDE5NCwyNDE5NSwyNDE5NywyNDIwMCwyNDIwMSwyNDIwNCwyNDIwNSwyNDIwNiwyNDIxMCwyNDIxNiwyNDIxOSwy''@;'; put 'put ''NDIyMSwyNDIyNSwyNDIyNiwyNDIyNywyNDIyOCwyNDIzMiwyNDIzMywyNDIzNCwyNDIzNSwyNDIzNiwyNDIzOCwyNDIzOSwyNDI0MCwyNDI0MSwyNDI0MiwyNDI0NCwyNDI1MCwyNDI1MSwyNDI1MiwyNDI1MywyNDI1NSwyNDI1NiwyNDI1NywyNDI1OCwyNDI1OSwyNDI2MCwyNDI2MSwyNDI2''@;'; put 'put ''MiwyNDI2MywyNDI2NCwyNDI2NywyNDI2OCwyNDI2OSwyNDI3MCwyNDI3MSwyNDI3MiwyNDI3NiwyNDI3NywyNDI3OSwyNDI4MCwyNDI4MSwyNDI4MiwyNDI4NCwyNDI4NSwyNDI4NiwyNDI4NywyNDI4OCwyNDI4OSwyNDI5MCwyNDI5MSwyNDI5MiwyNDI5MywyNDI5NCwyNDI5NSwyNDI5Nywy''@;'; put 'put ''NDI5OSwyNDMwMCwyNDMwMSwyNDMwMiwyNDMwMywyNDMwNCwyNDMwNSwyNDMwNiwyNDMwNywyNDMwOSwyNDMxMiwyNDMxMywyNDMxNSwyNDMxNiwyNDMxNywyNDMyNSwyNDMyNiwyNDMyNywyNDMyOSwyNDMzMiwyNDMzMywyNDMzNCwyNDMzNiwyNDMzOCwyNDM0MCwyNDM0MiwyNDM0NSwyNDM0''@;'; put 'put ''NiwyNDM0OCwyNDM0OSwyNDM1MCwyNDM1MywyNDM1NCwyNDM1NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3MCwyNDM3MSwyNDM3MiwyNDM3MywyNDM3NCwyNDM3NSwyNDM3NiwyNDM3OSwyNDM4MSwyNDM4MiwyNDM4MywyNDM4NSwyNDM4NiwyNDM4NywyNDM4OCwy''@;'; put 'put ''NDM4OSwyNDM5MCwyNDM5MSwyNDM5MiwyNDM5MywyNDM5NCwyNDM5NSwyNDM5NiwyNDM5NywyNDM5OCwyNDM5OSwyNDQwMSwyNDQwNCwyNDQwOSwyNDQxMCwyNDQxMSwyNDQxMiwyNDQxNCwyNDQxNSwyNDQxNiwyNDQxOSwyNDQyMSwyNDQyMywyNDQyNCwyNDQyNywyNDQzMCwyNDQzMSwyNDQz''@;'; put 'put ''NCwyNDQzNiwyNDQzNywyNDQzOCwyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ0NywyNDQ1MSwyNDQ1NCwyNDQ2MSwyNDQ2MiwyNDQ2MywyNDQ2NSwyNDQ2NywyNDQ2OCwyNDQ3MCwyNDQ3NCwyNDQ3NSwyNDQ3NywyNDQ3OCwyNDQ3OSwyNDQ4MCwyNDQ4MiwyNDQ4MywyNDQ4NCwyNDQ4NSwy''@;'; put 'put ''NDQ4NiwyNDQ4NywyNDQ4OSwyNDQ5MSwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDQ5OCwyNDQ5OSwyNDUwMCwyNDUwMiwyNDUwNCwyNDUwNSwyNDUwNiwyNDUwNywyNDUxMCwyNDUxMSwyNDUxMiwyNDUxMywyNDUxNCwyNDUxOSwyNDUyMCwyNDUyMiwyNDUyMywyNDUyNiwyNDUzMSwyNDUz''@;'; put 'put ''MiwyNDUzMywyNDUzOCwyNDUzOSwyNDU0MCwyNDU0MiwyNDU0MywyNDU0NiwyNDU0NywyNDU0OSwyNDU1MCwyNDU1MiwyNDU1MywyNDU1NiwyNDU1OSwyNDU2MCwyNDU2MiwyNDU2MywyNDU2NCwyNDU2NiwyNDU2NywyNDU2OSwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NCwyNDU4NSwyNDU4Nywy''@;'; put 'put ''NDU4OCwyNDU5MiwyNDU5MywyNDU5NSwyNDU5OSwyNDYwMCwyNDYwMiwyNDYwNiwyNDYwNywyNDYxMCwyNDYxMSwyNDYxMiwyNDYyMCwyNDYyMSwyNDYyMiwyNDYyNCwyNDYyNSwyNDYyNiwyNDYyNywyNDYyOCwyNDYzMCwyNDYzMSwyNDYzMiwyNDYzMywyNDYzNCwyNDYzNywyNDYzOCwyNDY0''@;'; put 'put ''MCwyNDY0NCwyNDY0NSwyNDY0NiwyNDY0NywyNDY0OCwyNDY0OSwyNDY1MCwyNDY1MiwyNDY1NCwyNDY1NSwyNDY1NywyNDY1OSwyNDY2MCwyNDY2MiwyNDY2MywyNDY2NCwyNDY2NywyNDY2OCwyNDY3MCwyNDY3MSwyNDY3MiwyNDY3MywyNDY3NywyNDY3OCwyNDY4NiwyNDY4OSwyNDY5MCwy''@;'; put 'put ''NDY5MiwyNDY5MywyNDY5NSwyNDcwMiwyNDcwNCwyNDcwNSwyNDcwNiwyNDcwOSwyNDcxMCwyNDcxMSwyNDcxMiwyNDcxNCwyNDcxNSwyNDcxOCwyNDcxOSwyNDcyMCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyNywyNDcyOCwyNDcyOSwyNDczMiwyNDczNCwyNDczNywyNDczOCwyNDc0MCwyNDc0''@;'; put 'put ''MSwyNDc0MywyNDc0NSwyNDc0NiwyNDc1MCwyNDc1MiwyNDc1NSwyNDc1NywyNDc1OCwyNDc1OSwyNDc2MSwyNDc2MiwyNDc2NSwyNDc2NiwyNDc2NywyNDc2OCwyNDc2OSwyNDc3MCwyNDc3MSwyNDc3MiwyNDc3NSwyNDc3NiwyNDc3NywyNDc4MCwyNDc4MSwyNDc4MiwyNDc4MywyNDc4NCwy''@;'; put 'put ''NDc4NiwyNDc4NywyNDc4OCwyNDc5MCwyNDc5MSwyNDc5MywyNDc5NSwyNDc5OCwyNDgwMSwyNDgwMiwyNDgwMywyNDgwNCwyNDgwNSwyNDgxMCwyNDgxNywyNDgxOCwyNDgyMSwyNDgyMywyNDgyNCwyNDgyNywyNDgyOCwyNDgyOSwyNDgzMCwyNDgzMSwyNDgzNCwyNDgzNSwyNDgzNiwyNDgz''@;'; put 'put ''NywyNDgzOSwyNDg0MiwyNDg0MywyNDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NiwyNDg1NywyNDg1OSwyNDg2MCwyNDg2MSwyNDg2MiwyNDg2NSwyNDg2NiwyNDg2OSwyNDg3MiwyNDg3MywyNDg3NCwyNDg3NiwyNDg3NywyNDg3OCwyNDg3OSwy''@;'; put 'put ''NDg4MCwyNDg4MSwyNDg4MiwyNDg4MywyNDg4NCwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OCwyNDg4OSwyNDg5MCwyNDg5MSwyNDg5MiwyNDg5MywyNDg5NCwyNDg5NiwyNDg5NywyNDg5OCwyNDg5OSwyNDkwMCwyNDkwMSwyNDkwMiwyNDkwMywyNDkwNSwyNDkwNywyNDkwOSwyNDkxMSwyNDkx''@;'; put 'put ''MiwyNDkxNCwyNDkxNSwyNDkxNiwyNDkxOCwyNDkxOSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkyMywyNDkyNCwyNDkyNiwyNDkyNywyNDkyOCwyNDkyOSwyNDkzMSwyNDkzMiwyNDkzMywyNDkzNCwyNDkzNywyNDkzOCwyNDkzOSwyNDk0MCwyNDk0MSwyNDk0MiwyNDk0MywyNDk0NSwyNDk0Niwy''@;'; put 'put ''NDk0NywyNDk0OCwyNDk1MCwyNDk1MiwyNDk1MywyNDk1NCwyNDk1NSwyNDk1NiwyNDk1NywyNDk1OCwyNDk1OSwyNDk2MCwyNDk2MSwyNDk2MiwyNDk2MywyNDk2NCwyNDk2NSwyNDk2NiwyNDk2NywyNDk2OCwyNDk2OSwyNDk3MCwyNDk3MiwyNDk3MywyNDk3NSwyNDk3NiwyNDk3NywyNDk3''@;'; put 'put ''OCwyNDk3OSwyNDk4MSwyNDk4MiwyNDk4MywyNDk4NCwyNDk4NSwyNDk4NiwyNDk4NywyNDk4OCwyNDk5MCwyNDk5MSwyNDk5MiwyNDk5MywyNDk5NCwyNDk5NSwyNDk5NiwyNDk5NywyNDk5OCwyNTAwMiwyNTAwMywyNTAwNSwyNTAwNiwyNTAwNywyNTAwOCwyNTAwOSwyNTAxMCwyNTAxMSwy''@;'; put 'put ''NTAxMiwyNTAxMywyNTAxNCwyNTAxNiwyNTAxNywyNTAxOCwyNTAxOSwyNTAyMCwyNTAyMSwyNTAyMywyNTAyNCwyNTAyNSwyNTAyNywyNTAyOCwyNTAyOSwyNTAzMCwyNTAzMSwyNTAzMywyNTAzNiwyNTAzNywyNTAzOCwyNTAzOSwyNTA0MCwyNTA0MywyNTA0NSwyNTA0NiwyNTA0NywyNTA0''@;'; put 'put ''OCwyNTA0OSwyNTA1MCwyNTA1MSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NiwyNTA1NywyNTA1OCwyNTA1OSwyNTA2MCwyNTA2MSwyNTA2MywyNTA2NCwyNTA2NSwyNTA2NiwyNTA2NywyNTA2OCwyNTA2OSwyNTA3MCwyNTA3MSwyNTA3MiwyNTA3MywyNTA3NCwyNTA3NSwyNTA3Niwy''@;'; put 'put ''NTA3OCwyNTA3OSwyNTA4MCwyNTA4MSwyNTA4MiwyNTA4MywyNTA4NCwyNTA4NSwyNTA4NiwyNTA4OCwyNTA4OSwyNTA5MCwyNTA5MSwyNTA5MiwyNTA5MywyNTA5NSwyNTA5NywyNTEwNywyNTEwOCwyNTExMywyNTExNiwyNTExNywyNTExOCwyNTEyMCwyNTEyMywyNTEyNiwyNTEyNywyNTEy''@;'; put 'put ''OCwyNTEyOSwyNTEzMSwyNTEzMywyNTEzNSwyNTEzNiwyNTEzNywyNTEzOCwyNTE0MSwyNTE0MiwyNTE0NCwyNTE0NSwyNTE0NiwyNTE0NywyNTE0OCwyNTE1NCwyNTE1NiwyNTE1NywyNTE1OCwyNTE2MiwyNTE2NywyNTE2OCwyNTE3MywyNTE3NCwyNTE3NSwyNTE3NywyNTE3OCwyNTE4MCwy''@;'; put 'put ''NTE4MSwyNTE4MiwyNTE4MywyNTE4NCwyNTE4NSwyNTE4NiwyNTE4OCwyNTE4OSwyNTE5MiwyNTIwMSwyNTIwMiwyNTIwNCwyNTIwNSwyNTIwNywyNTIwOCwyNTIxMCwyNTIxMSwyNTIxMywyNTIxNywyNTIxOCwyNTIxOSwyNTIyMSwyNTIyMiwyNTIyMywyNTIyNCwyNTIyNywyNTIyOCwyNTIy''@;'; put 'put ''OSwyNTIzMCwyNTIzMSwyNTIzMiwyNTIzNiwyNTI0MSwyNTI0NCwyNTI0NSwyNTI0NiwyNTI1MSwyNTI1NCwyNTI1NSwyNTI1NywyNTI1OCwyNTI2MSwyNTI2MiwyNTI2MywyNTI2NCwyNTI2NiwyNTI2NywyNTI2OCwyNTI3MCwyNTI3MSwyNTI3MiwyNTI3NCwyNTI3OCwyNTI4MCwyNTI4MSwy''@;'; put 'put ''NTI4MywyNTI5MSwyNTI5NSwyNTI5NywyNTMwMSwyNTMwOSwyNTMxMCwyNTMxMiwyNTMxMywyNTMxNiwyNTMyMiwyNTMyMywyNTMyOCwyNTMzMCwyNTMzMywyNTMzNiwyNTMzNywyNTMzOCwyNTMzOSwyNTM0NCwyNTM0NywyNTM0OCwyNTM0OSwyNTM1MCwyNTM1NCwyNTM1NSwyNTM1NiwyNTM1''@;'; put 'put ''NywyNTM1OSwyNTM2MCwyNTM2MiwyNTM2MywyNTM2NCwyNTM2NSwyNTM2NywyNTM2OCwyNTM2OSwyNTM3MiwyNTM4MiwyNTM4MywyNTM4NSwyNTM4OCwyNTM4OSwyNTM5MCwyNTM5MiwyNTM5MywyNTM5NSwyNTM5NiwyNTM5NywyNTM5OCwyNTM5OSwyNTQwMCwyNTQwMywyNTQwNCwyNTQwNiwy''@;'; put 'put ''NTQwNywyNTQwOCwyNTQwOSwyNTQxMiwyNTQxNSwyNTQxNiwyNTQxOCwyNTQyNSwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMCwyNTQzMSwyNTQzMiwyNTQzMywyNTQzNCwyNTQzNSwyNTQzNiwyNTQzNywyNTQ0MCwyNTQ0NCwyNTQ0NSwyNTQ0NiwyNTQ0OCwyNTQ1MCwyNTQ1MSwyNTQ1MiwyNTQ1''@;'; put 'put ''NSwyNTQ1NiwyNTQ1OCwyNTQ1OSwyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2NSwyNTQ2OCwyNTQ2OSwyNTQ3MCwyNTQ3MSwyNTQ3MywyNTQ3NSwyNTQ3NiwyNTQ3NywyNTQ3OCwyNTQ4MywyNTQ4NSwyNTQ4OSwyNTQ5MSwyNTQ5MiwyNTQ5MywyNTQ5NSwyNTQ5NywyNTQ5OCwyNTQ5OSwyNTUwMCwy''@;'; put 'put ''NTUwMSwyNTUwMiwyNTUwMywyNTUwNSwyNTUwOCwyNTUxMCwyNTUxNSwyNTUxOSwyNTUyMSwyNTUyMiwyNTUyNSwyNTUyNiwyNTUyOSwyNTUzMSwyNTUzMywyNTUzNSwyNTUzNiwyNTUzNywyNTUzOCwyNTUzOSwyNTU0MSwyNTU0MywyNTU0NCwyNTU0NiwyNTU0NywyNTU0OCwyNTU1MywyNTU1''@;'; put 'put ''NSwyNTU1NiwyNTU1NywyNTU1OSwyNTU2MCwyNTU2MSwyNTU2MiwyNTU2MywyNTU2NCwyNTU2NSwyNTU2NywyNTU3MCwyNTU3MiwyNTU3MywyNTU3NCwyNTU3NSwyNTU3NiwyNTU3OSwyNTU4MCwyNTU4MiwyNTU4MywyNTU4NCwyNTU4NSwyNTU4NywyNTU4OSwyNTU5MSwyNTU5MywyNTU5NCwy''@;'; put 'put ''NTU5NSwyNTU5NiwyNTU5OCwyNTYwMywyNTYwNCwyNTYwNiwyNTYwNywyNTYwOCwyNTYwOSwyNTYxMCwyNTYxMywyNTYxNCwyNTYxNywyNTYxOCwyNTYyMSwyNTYyMiwyNTYyMywyNTYyNCwyNTYyNSwyNTYyNiwyNTYyOSwyNTYzMSwyNTYzNCwyNTYzNSwyNTYzNiwyNTYzNywyNTYzOSwyNTY0''@;'; put 'put ''MCwyNTY0MSwyNTY0MywyNTY0NiwyNTY0NywyNTY0OCwyNTY0OSwyNTY1MCwyNTY1MSwyNTY1MywyNTY1NCwyNTY1NSwyNTY1NiwyNTY1NywyNTY1OSwyNTY2MCwyNTY2MiwyNTY2NCwyNTY2NiwyNTY2NywyNTY3MywyNTY3NSwyNTY3NiwyNTY3NywyNTY3OCwyNTY3OSwyNTY4MCwyNTY4MSwy''@;'; put 'put ''NTY4MywyNTY4NSwyNTY4NiwyNTY4NywyNTY4OSwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OCwyNTY5OSwyNTcwMCwyNTcwMSwyNTcwMiwyNTcwNCwyNTcwNiwyNTcwNywyNTcwOCwyNTcxMCwyNTcxMSwyNTcxMiwyNTcxMywyNTcxNCwyNTcxNSwyNTcx''@;'; put 'put ''NiwyNTcxNywyNTcxOCwyNTcxOSwyNTcyMywyNTcyNCwyNTcyNSwyNTcyNiwyNTcyNywyNTcyOCwyNTcyOSwyNTczMSwyNTczNCwyNTczNiwyNTczNywyNTczOCwyNTczOSwyNTc0MCwyNTc0MSwyNTc0MiwyNTc0MywyNTc0NCwyNTc0NywyNTc0OCwyNTc1MSwyNTc1MiwyNTc1NCwyNTc1NSwy''@;'; put 'put ''NTc1NiwyNTc1NywyNTc1OSwyNTc2MCwyNTc2MSwyNTc2MiwyNTc2MywyNTc2NSwyNTc2NiwyNTc2NywyNTc2OCwyNTc3MCwyNTc3MSwyNTc3NSwyNTc3NywyNTc3OCwyNTc3OSwyNTc4MCwyNTc4MiwyNTc4NSwyNTc4NywyNTc4OSwyNTc5MCwyNTc5MSwyNTc5MywyNTc5NSwyNTc5NiwyNTc5''@;'; put 'put ''OCwyNTc5OSwyNTgwMCwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNywyNTgwOSwyNTgxMSwyNTgxMiwyNTgxMywyNTgxNCwyNTgxNywyNTgxOCwyNTgxOSwyNTgyMCwyNTgyMSwyNTgyMywyNTgyNCwyNTgyNSwyNTgyNywyNTgyOSwyNTgzMSwyNTgzMiwyNTgzMywyNTgzNCwyNTgzNSwy''@;'; put 'put ''NTgzNiwyNTgzNywyNTgzOCwyNTgzOSwyNTg0MCwyNTg0MSwyNTg0MiwyNTg0MywyNTg0NCwyNTg0NSwyNTg0NiwyNTg0NywyNTg0OCwyNTg0OSwyNTg1MCwyNTg1MSwyNTg1MiwyNTg1MywyNTg1NCwyNTg1NSwyNTg1NywyNTg1OCwyNTg1OSwyNTg2MCwyNTg2MSwyNTg2MiwyNTg2MywyNTg2''@;'; put 'put ''NCwyNTg2NiwyNTg2NywyNTg2OCwyNTg2OSwyNTg3MCwyNTg3MSwyNTg3MiwyNTg3MywyNTg3NSwyNTg3NiwyNTg3NywyNTg3OCwyNTg3OSwyNTg4MSwyNTg4MiwyNTg4MywyNTg4NCwyNTg4NSwyNTg4NiwyNTg4NywyNTg4OCwyNTg4OSwyNTg5MCwyNTg5MSwyNTg5MiwyNTg5NCwyNTg5NSwy''@;'; put 'put ''NTg5NiwyNTg5NywyNTg5OCwyNTkwMCwyNTkwMSwyNTkwNCwyNTkwNSwyNTkwNiwyNTkwNywyNTkxMSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMCwyNTkyMSwyNTkyMiwyNTkyMywyNTkyNCwyNTkyNiwyNTkyNywyNTkzMCwyNTkzMSwyNTkzMywyNTkzNCwyNTkzNiwyNTkzOCwyNTkzOSwyNTk0''@;'; put 'put ''MCwyNTk0MywyNTk0NCwyNTk0NiwyNTk0OCwyNTk1MSwyNTk1MiwyNTk1MywyNTk1NiwyNTk1NywyNTk1OSwyNTk2MCwyNTk2MSwyNTk2MiwyNTk2NSwyNTk2NiwyNTk2NywyNTk2OSwyNTk3MSwyNTk3MywyNTk3NCwyNTk3NiwyNTk3NywyNTk3OCwyNTk3OSwyNTk4MCwyNTk4MSwyNTk4Miwy''@;'; put 'put ''NTk4MywyNTk4NCwyNTk4NSwyNTk4NiwyNTk4NywyNTk4OCwyNTk4OSwyNTk5MCwyNTk5MiwyNTk5MywyNTk5NCwyNTk5NywyNTk5OCwyNTk5OSwyNjAwMiwyNjAwNCwyNjAwNSwyNjAwNiwyNjAwOCwyNjAxMCwyNjAxMywyNjAxNCwyNjAxNiwyNjAxOCwyNjAxOSwyNjAyMiwyNjAyNCwyNjAy''@;'; put 'put ''NiwyNjAyOCwyNjAzMCwyNjAzMywyNjAzNCwyNjAzNSwyNjAzNiwyNjAzNywyNjAzOCwyNjAzOSwyNjA0MCwyNjA0MiwyNjA0MywyNjA0NiwyNjA0NywyNjA0OCwyNjA1MCwyNjA1NSwyNjA1NiwyNjA1NywyNjA1OCwyNjA2MSwyNjA2NCwyNjA2NSwyNjA2NywyNjA2OCwyNjA2OSwyNjA3Miwy''@;'; put 'put ''NjA3MywyNjA3NCwyNjA3NSwyNjA3NiwyNjA3NywyNjA3OCwyNjA3OSwyNjA4MSwyNjA4MywyNjA4NCwyNjA5MCwyNjA5MSwyNjA5OCwyNjA5OSwyNjEwMCwyNjEwMSwyNjEwNCwyNjEwNSwyNjEwNywyNjEwOCwyNjEwOSwyNjExMCwyNjExMSwyNjExMywyNjExNiwyNjExNywyNjExOSwyNjEy''@;'; put 'put ''MCwyNjEyMSwyNjEyMywyNjEyNSwyNjEyOCwyNjEyOSwyNjEzMCwyNjEzNCwyNjEzNSwyNjEzNiwyNjEzOCwyNjEzOSwyNjE0MCwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MiwyNjE2MywyNjE2Nywy''@;'; put 'put ''NjE2OCwyNjE2OSwyNjE3MCwyNjE3MSwyNjE3MywyNjE3NSwyNjE3NiwyNjE3OCwyNjE4MCwyNjE4MSwyNjE4MiwyNjE4MywyNjE4NCwyNjE4NSwyNjE4NiwyNjE4OSwyNjE5MCwyNjE5MiwyNjE5MywyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwNSwyNjIwNiwyNjIwOCwyNjIxMCwyNjIx''@;'; put 'put ''MSwyNjIxMywyNjIxNSwyNjIxNywyNjIxOCwyNjIxOSwyNjIyMCwyNjIyMSwyNjIyNSwyNjIyNiwyNjIyNywyNjIyOSwyNjIzMiwyNjIzMywyNjIzNSwyNjIzNiwyNjIzNywyNjIzOSwyNjI0MCwyNjI0MSwyNjI0MywyNjI0NSwyNjI0NiwyNjI0OCwyNjI0OSwyNjI1MCwyNjI1MSwyNjI1Mywy''@;'; put 'put ''NjI1NCwyNjI1NSwyNjI1NiwyNjI1OCwyNjI1OSwyNjI2MCwyNjI2MSwyNjI2NCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MCwyNjI3MSwyNjI3MiwyNjI3MywyNjI3NCwyNjI3NSwyNjI3NiwyNjI3NywyNjI3OCwyNjI4MSwyNjI4MiwyNjI4MywyNjI4NCwyNjI4NSwyNjI4NywyNjI4''@;'; put 'put ''OCwyNjI4OSwyNjI5MCwyNjI5MSwyNjI5MywyNjI5NCwyNjI5NSwyNjI5NiwyNjI5OCwyNjI5OSwyNjMwMCwyNjMwMSwyNjMwMywyNjMwNCwyNjMwNSwyNjMwNiwyNjMwNywyNjMwOCwyNjMwOSwyNjMxMCwyNjMxMSwyNjMxMiwyNjMxMywyNjMxNCwyNjMxNSwyNjMxNiwyNjMxNywyNjMxOCwy''@;'; put 'put ''NjMxOSwyNjMyMCwyNjMyMSwyNjMyMiwyNjMyMywyNjMyNCwyNjMyNSwyNjMyNiwyNjMyNywyNjMyOCwyNjMzMCwyNjMzNCwyNjMzNSwyNjMzNiwyNjMzNywyNjMzOCwyNjMzOSwyNjM0MCwyNjM0MSwyNjM0MywyNjM0NCwyNjM0NiwyNjM0NywyNjM0OCwyNjM0OSwyNjM1MCwyNjM1MSwyNjM1''@;'; put 'put ''MywyNjM1NywyNjM1OCwyNjM2MCwyNjM2MiwyNjM2MywyNjM2NSwyNjM2OSwyNjM3MCwyNjM3MSwyNjM3MiwyNjM3MywyNjM3NCwyNjM3NSwyNjM4MCwyNjM4MiwyNjM4MywyNjM4NSwyNjM4NiwyNjM4NywyNjM5MCwyNjM5MiwyNjM5MywyNjM5NCwyNjM5NiwyNjM5OCwyNjQwMCwyNjQwMSwy''@;'; put 'put ''NjQwMiwyNjQwMywyNjQwNCwyNjQwNSwyNjQwNywyNjQwOSwyNjQxNCwyNjQxNiwyNjQxOCwyNjQxOSwyNjQyMiwyNjQyMywyNjQyNCwyNjQyNSwyNjQyNywyNjQyOCwyNjQzMCwyNjQzMSwyNjQzMywyNjQzNiwyNjQzNywyNjQzOSwyNjQ0MiwyNjQ0MywyNjQ0NSwyNjQ1MCwyNjQ1MiwyNjQ1''@;'; put 'put ''MywyNjQ1NSwyNjQ1NiwyNjQ1NywyNjQ1OCwyNjQ1OSwyNjQ2MSwyNjQ2NiwyNjQ2NywyNjQ2OCwyNjQ3MCwyNjQ3MSwyNjQ3NSwyNjQ3NiwyNjQ3OCwyNjQ4MSwyNjQ4NCwyNjQ4NiwyNjQ4OCwyNjQ4OSwyNjQ5MCwyNjQ5MSwyNjQ5MywyNjQ5NiwyNjQ5OCwyNjQ5OSwyNjUwMSwyNjUwMiwy''@;'; put 'put ''NjUwNCwyNjUwNiwyNjUwOCwyNjUwOSwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNCwyNjUxNSwyNjUxNiwyNjUxOCwyNjUyMSwyNjUyMywyNjUyNywyNjUyOCwyNjUyOSwyNjUzMiwyNjUzNCwyNjUzNywyNjU0MCwyNjU0MiwyNjU0NSwyNjU0NiwyNjU0OCwyNjU1MywyNjU1NCwyNjU1NSwyNjU1''@;'; put 'put ''NiwyNjU1NywyNjU1OCwyNjU1OSwyNjU2MCwyNjU2MiwyNjU2NSwyNjU2NiwyNjU2NywyNjU2OCwyNjU2OSwyNjU3MCwyNjU3MSwyNjU3MiwyNjU3MywyNjU3NCwyNjU4MSwyNjU4MiwyNjU4MywyNjU4NywyNjU5MSwyNjU5MywyNjU5NSwyNjU5NiwyNjU5OCwyNjU5OSwyNjYwMCwyNjYwMiwy''@;'; put 'put ''NjYwMywyNjYwNSwyNjYwNiwyNjYxMCwyNjYxMywyNjYxNCwyNjYxNSwyNjYxNiwyNjYxNywyNjYxOCwyNjYxOSwyNjYyMCwyNjYyMiwyNjYyNSwyNjYyNiwyNjYyNywyNjYyOCwyNjYzMCwyNjYzNywyNjY0MCwyNjY0MiwyNjY0NCwyNjY0NSwyNjY0OCwyNjY0OSwyNjY1MCwyNjY1MSwyNjY1''@;'; put 'put ''MiwyNjY1NCwyNjY1NSwyNjY1NiwyNjY1OCwyNjY1OSwyNjY2MCwyNjY2MSwyNjY2MiwyNjY2MywyNjY2NCwyNjY2NywyNjY2OCwyNjY2OSwyNjY3MCwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NiwyNjY3NywyNjY3OCwyNjY4MiwyNjY4MywyNjY4NywyNjY5NSwyNjY5OSwyNjcwMSwyNjcwMywy''@;'; put 'put ''NjcwNiwyNjcxMCwyNjcxMSwyNjcxMiwyNjcxMywyNjcxNCwyNjcxNSwyNjcxNiwyNjcxNywyNjcxOCwyNjcxOSwyNjczMCwyNjczMiwyNjczMywyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjczOSwyNjc0MSwyNjc0NCwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc0OSwyNjc1''@;'; put 'put ''MCwyNjc1MSwyNjc1MiwyNjc1NCwyNjc1NiwyNjc1OSwyNjc2MCwyNjc2MSwyNjc2MiwyNjc2MywyNjc2NCwyNjc2NSwyNjc2NiwyNjc2OCwyNjc2OSwyNjc3MCwyNjc3MiwyNjc3MywyNjc3NCwyNjc3NiwyNjc3NywyNjc3OCwyNjc3OSwyNjc4MCwyNjc4MSwyNjc4MiwyNjc4MywyNjc4NCwy''@;'; put 'put ''Njc4NSwyNjc4NywyNjc4OCwyNjc4OSwyNjc5MywyNjc5NCwyNjc5NSwyNjc5NiwyNjc5OCwyNjgwMSwyNjgwMiwyNjgwNCwyNjgwNiwyNjgwNywyNjgwOCwyNjgwOSwyNjgxMCwyNjgxMSwyNjgxMiwyNjgxMywyNjgxNCwyNjgxNSwyNjgxNywyNjgxOSwyNjgyMCwyNjgyMSwyNjgyMiwyNjgy''@;'; put 'put ''MywyNjgyNCwyNjgyNiwyNjgyOCwyNjgzMCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzNiwyNjgzOCwyNjgzOSwyNjg0MSwyNjg0MywyNjg0NCwyNjg0NSwyNjg0NiwyNjg0NywyNjg0OSwyNjg1MCwyNjg1MiwyNjg1MywyNjg1NCwyNjg1NSwyNjg1NiwyNjg1NywyNjg1OCwyNjg1OSwy''@;'; put 'put ''Njg2MCwyNjg2MSwyNjg2MywyNjg2NiwyNjg2NywyNjg2OCwyNjg3MCwyNjg3MSwyNjg3MiwyNjg3NSwyNjg3NywyNjg3OCwyNjg3OSwyNjg4MCwyNjg4MiwyNjg4MywyNjg4NCwyNjg4NiwyNjg4NywyNjg4OCwyNjg4OSwyNjg5MCwyNjg5MiwyNjg5NSwyNjg5NywyNjg5OSwyNjkwMCwyNjkw''@;'; put 'put ''MSwyNjkwMiwyNjkwMywyNjkwNCwyNjkwNSwyNjkwNiwyNjkwNywyNjkwOCwyNjkwOSwyNjkxMCwyNjkxMywyNjkxNCwyNjkxNSwyNjkxNywyNjkxOCwyNjkxOSwyNjkyMCwyNjkyMSwyNjkyMiwyNjkyMywyNjkyNCwyNjkyNiwyNjkyNywyNjkyOSwyNjkzMCwyNjkzMSwyNjkzMywyNjkzNCwy''@;'; put 'put ''NjkzNSwyNjkzNiwyNjkzOCwyNjkzOSwyNjk0MCwyNjk0MiwyNjk0NCwyNjk0NSwyNjk0NywyNjk0OCwyNjk0OSwyNjk1MCwyNjk1MSwyNjk1MiwyNjk1MywyNjk1NCwyNjk1NSwyNjk1NiwyNjk1NywyNjk1OCwyNjk1OSwyNjk2MCwyNjk2MSwyNjk2MiwyNjk2MywyNjk2NSwyNjk2NiwyNjk2''@;'; put 'put ''OCwyNjk2OSwyNjk3MSwyNjk3MiwyNjk3NSwyNjk3NywyNjk3OCwyNjk4MCwyNjk4MSwyNjk4MywyNjk4NCwyNjk4NSwyNjk4NiwyNjk4OCwyNjk4OSwyNjk5MSwyNjk5MiwyNjk5NCwyNjk5NSwyNjk5NiwyNjk5NywyNjk5OCwyNzAwMiwyNzAwMywyNzAwNSwyNzAwNiwyNzAwNywyNzAwOSwy''@;'; put 'put ''NzAxMSwyNzAxMywyNzAxOCwyNzAxOSwyNzAyMCwyNzAyMiwyNzAyMywyNzAyNCwyNzAyNSwyNzAyNiwyNzAyNywyNzAzMCwyNzAzMSwyNzAzMywyNzAzNCwyNzAzNywyNzAzOCwyNzAzOSwyNzA0MCwyNzA0MSwyNzA0MiwyNzA0MywyNzA0NCwyNzA0NSwyNzA0NiwyNzA0OSwyNzA1MCwyNzA1''@;'; put 'put ''MiwyNzA1NCwyNzA1NSwyNzA1NiwyNzA1OCwyNzA1OSwyNzA2MSwyNzA2MiwyNzA2NCwyNzA2NSwyNzA2NiwyNzA2OCwyNzA2OSwyNzA3MCwyNzA3MSwyNzA3MiwyNzA3NCwyNzA3NSwyNzA3NiwyNzA3NywyNzA3OCwyNzA3OSwyNzA4MCwyNzA4MSwyNzA4MywyNzA4NSwyNzA4NywyNzA4OSwy''@;'; put 'put ''NzA5MCwyNzA5MSwyNzA5MywyNzA5NCwyNzA5NSwyNzA5NiwyNzA5NywyNzA5OCwyNzEwMCwyNzEwMSwyNzEwMiwyNzEwNSwyNzEwNiwyNzEwNywyNzEwOCwyNzEwOSwyNzExMCwyNzExMSwyNzExMiwyNzExMywyNzExNCwyNzExNSwyNzExNiwyNzExOCwyNzExOSwyNzEyMCwyNzEyMSwyNzEy''@;'; put 'put ''MywyNzEyNCwyNzEyNSwyNzEyNiwyNzEyNywyNzEyOCwyNzEyOSwyNzEzMCwyNzEzMSwyNzEzMiwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOCwyNzEzOSwyNzE0MCwyNzE0MSwyNzE0MiwyNzE0MywyNzE0NCwyNzE0NSwyNzE0NywyNzE0OCwyNzE0OSwyNzE1MCwyNzE1MSwyNzE1MiwyNzE1Mywy''@;'; put 'put ''NzE1NCwyNzE1NSwyNzE1NiwyNzE1NywyNzE1OCwyNzE2MSwyNzE2MiwyNzE2MywyNzE2NCwyNzE2NSwyNzE2NiwyNzE2OCwyNzE3MCwyNzE3MSwyNzE3MiwyNzE3MywyNzE3NCwyNzE3NSwyNzE3NywyNzE3OSwyNzE4MCwyNzE4MSwyNzE4MiwyNzE4NCwyNzE4NiwyNzE4NywyNzE4OCwyNzE5''@;'; put 'put ''MCwyNzE5MSwyNzE5MiwyNzE5MywyNzE5NCwyNzE5NSwyNzE5NiwyNzE5OSwyNzIwMCwyNzIwMSwyNzIwMiwyNzIwMywyNzIwNSwyNzIwNiwyNzIwOCwyNzIwOSwyNzIxMCwyNzIxMSwyNzIxMiwyNzIxMywyNzIxNCwyNzIxNSwyNzIxNywyNzIxOCwyNzIxOSwyNzIyMCwyNzIyMSwyNzIyMiwy''@;'; put 'put ''NzIyMywyNzIyNiwyNzIyOCwyNzIyOSwyNzIzMCwyNzIzMSwyNzIzMiwyNzIzNCwyNzIzNSwyNzIzNiwyNzIzOCwyNzIzOSwyNzI0MCwyNzI0MSwyNzI0MiwyNzI0MywyNzI0NCwyNzI0NSwyNzI0NiwyNzI0NywyNzI0OCwyNzI1MCwyNzI1MSwyNzI1MiwyNzI1MywyNzI1NCwyNzI1NSwyNzI1''@;'; put 'put ''NiwyNzI1OCwyNzI1OSwyNzI2MSwyNzI2MiwyNzI2MywyNzI2NSwyNzI2NiwyNzI2NywyNzI2OSwyNzI3MCwyNzI3MSwyNzI3MiwyNzI3MywyNzI3NCwyNzI3NSwyNzI3NiwyNzI3NywyNzI3OSwyNzI4MiwyNzI4MywyNzI4NCwyNzI4NSwyNzI4NiwyNzI4OCwyNzI4OSwyNzI5MCwyNzI5MSwy''@;'; put 'put ''NzI5MiwyNzI5MywyNzI5NCwyNzI5NSwyNzI5NywyNzI5OCwyNzI5OSwyNzMwMCwyNzMwMSwyNzMwMiwyNzMwMywyNzMwNCwyNzMwNiwyNzMwOSwyNzMxMCwyNzMxMSwyNzMxMiwyNzMxMywyNzMxNCwyNzMxNSwyNzMxNiwyNzMxNywyNzMxOCwyNzMxOSwyNzMyMCwyNzMyMSwyNzMyMiwyNzMy''@;'; put 'put ''MywyNzMyNCwyNzMyNSwyNzMyNiwyNzMyNywyNzMyOCwyNzMyOSwyNzMzMCwyNzMzMSwyNzMzMiwyNzMzMywyNzMzNCwyNzMzNSwyNzMzNiwyNzMzNywyNzMzOCwyNzMzOSwyNzM0MCwyNzM0MSwyNzM0MiwyNzM0MywyNzM0NCwyNzM0NSwyNzM0NiwyNzM0NywyNzM0OCwyNzM0OSwyNzM1MCwy''@;'; put 'put ''NzM1MSwyNzM1MiwyNzM1MywyNzM1NCwyNzM1NSwyNzM1NiwyNzM1NywyNzM1OCwyNzM1OSwyNzM2MCwyNzM2MSwyNzM2MiwyNzM2MywyNzM2NCwyNzM2NSwyNzM2NiwyNzM2NywyNzM2OCwyNzM2OSwyNzM3MCwyNzM3MSwyNzM3MiwyNzM3MywyNzM3NCwyNzM3NSwyNzM3NiwyNzM3NywyNzM3''@;'; put 'put ''OCwyNzM3OSwyNzM4MCwyNzM4MSwyNzM4MiwyNzM4MywyNzM4NCwyNzM4NSwyNzM4NiwyNzM4NywyNzM4OCwyNzM4OSwyNzM5MCwyNzM5MSwyNzM5MiwyNzM5MywyNzM5NCwyNzM5NSwyNzM5NiwyNzM5NywyNzM5OCwyNzM5OSwyNzQwMCwyNzQwMSwyNzQwMiwyNzQwMywyNzQwNCwyNzQwNSwy''@;'; put 'put ''NzQwNiwyNzQwNywyNzQwOCwyNzQwOSwyNzQxMCwyNzQxMSwyNzQxMiwyNzQxMywyNzQxNCwyNzQxNSwyNzQxNiwyNzQxNywyNzQxOCwyNzQxOSwyNzQyMCwyNzQyMSwyNzQyMiwyNzQyMywyNzQyOSwyNzQzMCwyNzQzMiwyNzQzMywyNzQzNCwyNzQzNSwyNzQzNiwyNzQzNywyNzQzOCwyNzQz''@;'; put 'put ''OSwyNzQ0MCwyNzQ0MSwyNzQ0MywyNzQ0NCwyNzQ0NSwyNzQ0NiwyNzQ0OCwyNzQ1MSwyNzQ1MiwyNzQ1MywyNzQ1NSwyNzQ1NiwyNzQ1NywyNzQ1OCwyNzQ2MCwyNzQ2MSwyNzQ2NCwyNzQ2NiwyNzQ2NywyNzQ2OSwyNzQ3MCwyNzQ3MSwyNzQ3MiwyNzQ3MywyNzQ3NCwyNzQ3NSwyNzQ3Niwy''@;'; put 'put ''NzQ3NywyNzQ3OCwyNzQ3OSwyNzQ4MCwyNzQ4MiwyNzQ4MywyNzQ4NCwyNzQ4NSwyNzQ4NiwyNzQ4NywyNzQ4OCwyNzQ4OSwyNzQ5NiwyNzQ5NywyNzQ5OSwyNzUwMCwyNzUwMSwyNzUwMiwyNzUwMywyNzUwNCwyNzUwNSwyNzUwNiwyNzUwNywyNzUwOCwyNzUwOSwyNzUxMCwyNzUxMSwyNzUx''@;'; put 'put ''MiwyNzUxNCwyNzUxNywyNzUxOCwyNzUxOSwyNzUyMCwyNzUyNSwyNzUyOCwyNzUzMiwyNzUzNCwyNzUzNSwyNzUzNiwyNzUzNywyNzU0MCwyNzU0MSwyNzU0MywyNzU0NCwyNzU0NSwyNzU0OCwyNzU0OSwyNzU1MCwyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU1NiwyNzU1NywyNzU1OCwy''@;'; put 'put ''NzU1OSwyNzU2MCwyNzU2MSwyNzU2MywyNzU2NCwyNzU2NSwyNzU2NiwyNzU2NywyNzU2OCwyNzU2OSwyNzU3MCwyNzU3NCwyNzU3NiwyNzU3NywyNzU3OCwyNzU3OSwyNzU4MCwyNzU4MSwyNzU4MiwyNzU4NCwyNzU4NywyNzU4OCwyNzU5MCwyNzU5MSwyNzU5MiwyNzU5MywyNzU5NCwyNzU5''@;'; put 'put ''NiwyNzU5OCwyNzYwMCwyNzYwMSwyNzYwOCwyNzYxMCwyNzYxMiwyNzYxMywyNzYxNCwyNzYxNSwyNzYxNiwyNzYxOCwyNzYxOSwyNzYyMCwyNzYyMSwyNzYyMiwyNzYyMywyNzYyNCwyNzYyNSwyNzYyOCwyNzYyOSwyNzYzMCwyNzYzMiwyNzYzMywyNzYzNCwyNzYzNiwyNzYzOCwyNzYzOSwy''@;'; put 'put ''NzY0MCwyNzY0MiwyNzY0MywyNzY0NCwyNzY0NiwyNzY0NywyNzY0OCwyNzY0OSwyNzY1MCwyNzY1MSwyNzY1MiwyNzY1NiwyNzY1NywyNzY1OCwyNzY1OSwyNzY2MCwyNzY2MiwyNzY2NiwyNzY3MSwyNzY3NiwyNzY3NywyNzY3OCwyNzY4MCwyNzY4MywyNzY4NSwyNzY5MSwyNzY5MiwyNzY5''@;'; put 'put ''MywyNzY5NywyNzY5OSwyNzcwMiwyNzcwMywyNzcwNSwyNzcwNiwyNzcwNywyNzcwOCwyNzcxMCwyNzcxMSwyNzcxNSwyNzcxNiwyNzcxNywyNzcyMCwyNzcyMywyNzcyNCwyNzcyNSwyNzcyNiwyNzcyNywyNzcyOSwyNzczMCwyNzczMSwyNzczNCwyNzczNiwyNzczNywyNzczOCwyNzc0Niwy''@;'; put 'put ''Nzc0NywyNzc0OSwyNzc1MCwyNzc1MSwyNzc1NSwyNzc1NiwyNzc1NywyNzc1OCwyNzc1OSwyNzc2MSwyNzc2MywyNzc2NSwyNzc2NywyNzc2OCwyNzc3MCwyNzc3MSwyNzc3MiwyNzc3NSwyNzc3NiwyNzc4MCwyNzc4MywyNzc4NiwyNzc4NywyNzc4OSwyNzc5MCwyNzc5MywyNzc5NCwyNzc5''@;'; put 'put ''NywyNzc5OCwyNzc5OSwyNzgwMCwyNzgwMiwyNzgwNCwyNzgwNSwyNzgwNiwyNzgwOCwyNzgxMCwyNzgxNiwyNzgyMCwyNzgyMywyNzgyNCwyNzgyOCwyNzgyOSwyNzgzMCwyNzgzMSwyNzgzNCwyNzg0MCwyNzg0MSwyNzg0MiwyNzg0MywyNzg0NiwyNzg0NywyNzg0OCwyNzg1MSwyNzg1Mywy''@;'; put 'put ''Nzg1NCwyNzg1NSwyNzg1NywyNzg1OCwyNzg2NCwyNzg2NSwyNzg2NiwyNzg2OCwyNzg2OSwyNzg3MSwyNzg3NiwyNzg3OCwyNzg3OSwyNzg4MSwyNzg4NCwyNzg4NSwyNzg5MCwyNzg5MiwyNzg5NywyNzkwMywyNzkwNCwyNzkwNiwyNzkwNywyNzkwOSwyNzkxMCwyNzkxMiwyNzkxMywyNzkx''@;'; put 'put ''NCwyNzkxNywyNzkxOSwyNzkyMCwyNzkyMSwyNzkyMywyNzkyNCwyNzkyNSwyNzkyNiwyNzkyOCwyNzkzMiwyNzkzMywyNzkzNSwyNzkzNiwyNzkzNywyNzkzOCwyNzkzOSwyNzk0MCwyNzk0MiwyNzk0NCwyNzk0NSwyNzk0OCwyNzk0OSwyNzk1MSwyNzk1MiwyNzk1NiwyNzk1OCwyNzk1OSwy''@;'; put 'put ''Nzk2MCwyNzk2MiwyNzk2NywyNzk2OCwyNzk3MCwyNzk3MiwyNzk3NywyNzk4MCwyNzk4NCwyNzk4OSwyNzk5MCwyNzk5MSwyNzk5MiwyNzk5NSwyNzk5NywyNzk5OSwyODAwMSwyODAwMiwyODAwNCwyODAwNSwyODAwNywyODAwOCwyODAxMSwyODAxMiwyODAxMywyODAxNiwyODAxNywyODAx''@;'; put 'put ''OCwyODAxOSwyODAyMSwyODAyMiwyODAyNSwyODAyNiwyODAyNywyODAyOSwyODAzMCwyODAzMSwyODAzMiwyODAzMywyODAzNSwyODAzNiwyODAzOCwyODAzOSwyODA0MiwyODA0MywyODA0NSwyODA0NywyODA0OCwyODA1MCwyODA1NCwyODA1NSwyODA1NiwyODA1NywyODA1OCwyODA2MCwy''@;'; put 'put ''ODA2NiwyODA2OSwyODA3NiwyODA3NywyODA4MCwyODA4MSwyODA4MywyODA4NCwyODA4NiwyODA4NywyODA4OSwyODA5MCwyODA5MSwyODA5MiwyODA5MywyODA5NCwyODA5NywyODA5OCwyODA5OSwyODEwNCwyODEwNSwyODEwNiwyODEwOSwyODExMCwyODExMSwyODExMiwyODExNCwyODEx''@;'; put 'put ''NSwyODExNiwyODExNywyODExOSwyODEyMiwyODEyMywyODEyNCwyODEyNywyODEzMCwyODEzMSwyODEzMywyODEzNSwyODEzNiwyODEzNywyODEzOCwyODE0MSwyODE0MywyODE0NCwyODE0NiwyODE0OCwyODE0OSwyODE1MCwyODE1MiwyODE1NCwyODE1NywyODE1OCwyODE1OSwyODE2MCwy''@;'; put 'put ''ODE2MSwyODE2MiwyODE2MywyODE2NCwyODE2NiwyODE2NywyODE2OCwyODE2OSwyODE3MSwyODE3NSwyODE3OCwyODE3OSwyODE4MSwyODE4NCwyODE4NSwyODE4NywyODE4OCwyODE5MCwyODE5MSwyODE5NCwyODE5OCwyODE5OSwyODIwMCwyODIwMiwyODIwNCwyODIwNiwyODIwOCwyODIw''@;'; put 'put ''OSwyODIxMSwyODIxMywyODIxNCwyODIxNSwyODIxNywyODIxOSwyODIyMCwyODIyMSwyODIyMiwyODIyMywyODIyNCwyODIyNSwyODIyNiwyODIyOSwyODIzMCwyODIzMSwyODIzMiwyODIzMywyODIzNCwyODIzNSwyODIzNiwyODIzOSwyODI0MCwyODI0MSwyODI0MiwyODI0NSwyODI0Nywy''@;'; put 'put ''ODI0OSwyODI1MCwyODI1MiwyODI1MywyODI1NCwyODI1NiwyODI1NywyODI1OCwyODI1OSwyODI2MCwyODI2MSwyODI2MiwyODI2MywyODI2NCwyODI2NSwyODI2NiwyODI2OCwyODI2OSwyODI3MSwyODI3MiwyODI3MywyODI3NCwyODI3NSwyODI3NiwyODI3NywyODI3OCwyODI3OSwyODI4''@;'; put 'put ''MCwyODI4MSwyODI4MiwyODI4MywyODI4NCwyODI4NSwyODI4OCwyODI4OSwyODI5MCwyODI5MiwyODI5NSwyODI5NiwyODI5OCwyODI5OSwyODMwMCwyODMwMSwyODMwMiwyODMwNSwyODMwNiwyODMwNywyODMwOCwyODMwOSwyODMxMCwyODMxMSwyODMxMywyODMxNCwyODMxNSwyODMxNywy''@;'; put 'put ''ODMxOCwyODMyMCwyODMyMSwyODMyMywyODMyNCwyODMyNiwyODMyOCwyODMyOSwyODMzMSwyODMzMiwyODMzMywyODMzNCwyODMzNiwyODMzOSwyODM0MSwyODM0NCwyODM0NSwyODM0OCwyODM1MCwyODM1MSwyODM1MiwyODM1NSwyODM1NiwyODM1NywyODM1OCwyODM2MCwyODM2MSwyODM2''@;'; put 'put ''MiwyODM2NCwyODM2NSwyODM2NiwyODM2OCwyODM3MCwyODM3NCwyODM3NiwyODM3NywyODM3OSwyODM4MCwyODM4MSwyODM4NywyODM5MSwyODM5NCwyODM5NSwyODM5NiwyODM5NywyODM5OCwyODM5OSwyODQwMCwyODQwMSwyODQwMiwyODQwMywyODQwNSwyODQwNiwyODQwNywyODQwOCwy''@;'; put 'put ''ODQxMCwyODQxMSwyODQxMiwyODQxMywyODQxNCwyODQxNSwyODQxNiwyODQxNywyODQxOSwyODQyMCwyODQyMSwyODQyMywyODQyNCwyODQyNiwyODQyNywyODQyOCwyODQyOSwyODQzMCwyODQzMiwyODQzMywyODQzNCwyODQzOCwyODQzOSwyODQ0MCwyODQ0MSwyODQ0MiwyODQ0MywyODQ0''@;'; put 'put ''NCwyODQ0NSwyODQ0NiwyODQ0NywyODQ0OSwyODQ1MCwyODQ1MSwyODQ1MywyODQ1NCwyODQ1NSwyODQ1NiwyODQ2MCwyODQ2MiwyODQ2NCwyODQ2NiwyODQ2OCwyODQ2OSwyODQ3MSwyODQ3MiwyODQ3MywyODQ3NCwyODQ3NSwyODQ3NiwyODQ3NywyODQ3OSwyODQ4MCwyODQ4MSwyODQ4Miwy''@;'; put 'put ''ODQ4MywyODQ4NCwyODQ4NSwyODQ4OCwyODQ4OSwyODQ5MCwyODQ5MiwyODQ5NCwyODQ5NSwyODQ5NiwyODQ5NywyODQ5OCwyODQ5OSwyODUwMCwyODUwMSwyODUwMiwyODUwMywyODUwNSwyODUwNiwyODUwNywyODUwOSwyODUxMSwyODUxMiwyODUxMywyODUxNSwyODUxNiwyODUxNywyODUx''@;'; put 'put ''OSwyODUyMCwyODUyMSwyODUyMiwyODUyMywyODUyNCwyODUyNywyODUyOCwyODUyOSwyODUzMSwyODUzMywyODUzNCwyODUzNSwyODUzNywyODUzOSwyODU0MSwyODU0MiwyODU0MywyODU0NCwyODU0NSwyODU0NiwyODU0NywyODU0OSwyODU1MCwyODU1MSwyODU1NCwyODU1NSwyODU1OSwy''@;'; put 'put ''ODU2MCwyODU2MSwyODU2MiwyODU2MywyODU2NCwyODU2NSwyODU2NiwyODU2NywyODU2OCwyODU2OSwyODU3MCwyODU3MSwyODU3MywyODU3NCwyODU3NSwyODU3NiwyODU3OCwyODU3OSwyODU4MCwyODU4MSwyODU4MiwyODU4NCwyODU4NSwyODU4NiwyODU4NywyODU4OCwyODU4OSwyODU5''@;'; put 'put ''MCwyODU5MSwyODU5MiwyODU5MywyODU5NCwyODU5NiwyODU5NywyODU5OSwyODYwMCwyODYwMiwyODYwMywyODYwNCwyODYwNSwyODYwNiwyODYwNywyODYwOSwyODYxMSwyODYxMiwyODYxMywyODYxNCwyODYxNSwyODYxNiwyODYxOCwyODYxOSwyODYyMCwyODYyMSwyODYyMiwyODYyMywy''@;'; put 'put ''ODYyNCwyODYyNywyODYyOCwyODYyOSwyODYzMCwyODYzMSwyODYzMiwyODYzMywyODYzNCwyODYzNSwyODYzNiwyODYzNywyODYzOSwyODY0MiwyODY0MywyODY0NCwyODY0NSwyODY0NiwyODY0NywyODY0OCwyODY0OSwyODY1MCwyODY1MSwyODY1MiwyODY1MywyODY1NiwyODY1NywyODY1''@;'; put 'put ''OCwyODY1OSwyODY2MCwyODY2MSwyODY2MiwyODY2MywyODY2NCwyODY2NSwyODY2NiwyODY2NywyODY2OCwyODY2OSwyODY3MCwyODY3MSwyODY3MiwyODY3MywyODY3NCwyODY3NSwyODY3NiwyODY3NywyODY3OCwyODY3OSwyODY4MCwyODY4MSwyODY4MiwyODY4MywyODY4NCwyODY4NSwy''@;'; put 'put ''ODY4NiwyODY4NywyODY4OCwyODY5MCwyODY5MSwyODY5MiwyODY5MywyODY5NCwyODY5NSwyODY5NiwyODY5NywyODcwMCwyODcwMSwyODcwMiwyODcwMywyODcwNCwyODcwNSwyODcwNiwyODcwOCwyODcwOSwyODcxMCwyODcxMSwyODcxMiwyODcxMywyODcxNCwyODcxNSwyODcxNiwyODcx''@;'; put 'put ''NywyODcxOCwyODcxOSwyODcyMCwyODcyMSwyODcyMiwyODcyMywyODcyNCwyODcyNiwyODcyNywyODcyOCwyODczMCwyODczMSwyODczMiwyODczMywyODczNCwyODczNSwyODczNiwyODczNywyODczOCwyODczOSwyODc0MCwyODc0MSwyODc0MiwyODc0MywyODc0NCwyODc0NSwyODc0Niwy''@;'; put 'put ''ODc0NywyODc0OSwyODc1MCwyODc1MiwyODc1MywyODc1NCwyODc1NSwyODc1NiwyODc1NywyODc1OCwyODc1OSwyODc2MCwyODc2MSwyODc2MiwyODc2MywyODc2NCwyODc2NSwyODc2NywyODc2OCwyODc2OSwyODc3MCwyODc3MSwyODc3MiwyODc3MywyODc3NCwyODc3NSwyODc3NiwyODc3''@;'; put 'put ''NywyODc3OCwyODc4MiwyODc4NSwyODc4NiwyODc4NywyODc4OCwyODc5MSwyODc5MywyODc5NCwyODc5NSwyODc5NywyODgwMSwyODgwMiwyODgwMywyODgwNCwyODgwNiwyODgwNywyODgwOCwyODgxMSwyODgxMiwyODgxMywyODgxNSwyODgxNiwyODgxNywyODgxOSwyODgyMywyODgyNCwy''@;'; put 'put ''ODgyNiwyODgyNywyODgzMCwyODgzMSwyODgzMiwyODgzMywyODgzNCwyODgzNSwyODgzNiwyODgzNywyODgzOCwyODgzOSwyODg0MCwyODg0MSwyODg0MiwyODg0OCwyODg1MCwyODg1MiwyODg1MywyODg1NCwyODg1OCwyODg2MiwyODg2MywyODg2OCwyODg2OSwyODg3MCwyODg3MSwyODg3''@;'; put 'put ''MywyODg3NSwyODg3NiwyODg3NywyODg3OCwyODg3OSwyODg4MCwyODg4MSwyODg4MiwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4NywyODg5MCwyODg5MiwyODg5MywyODg5NCwyODg5NiwyODg5NywyODg5OCwyODg5OSwyODkwMSwyODkwNiwyODkxMCwyODkxMiwyODkxMywyODkxNCwy''@;'; put 'put ''ODkxNSwyODkxNiwyODkxNywyODkxOCwyODkyMCwyODkyMiwyODkyMywyODkyNCwyODkyNiwyODkyNywyODkyOCwyODkyOSwyODkzMCwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzNiwyODkzOSwyODk0MCwyODk0MSwyODk0MiwyODk0MywyODk0NSwyODk0NiwyODk0OCwyODk1''@;'; put 'put ''MSwyODk1NSwyODk1NiwyODk1NywyODk1OCwyODk1OSwyODk2MCwyODk2MSwyODk2MiwyODk2MywyODk2NCwyODk2NSwyODk2NywyODk2OCwyODk2OSwyODk3MCwyODk3MSwyODk3MiwyODk3MywyODk3NCwyODk3OCwyODk3OSwyODk4MCwyODk4MSwyODk4MywyODk4NCwyODk4NSwyODk4Niwy''@;'; put 'put ''ODk4NywyODk4OCwyODk4OSwyODk5MCwyODk5MSwyODk5MiwyODk5MywyODk5NCwyODk5NSwyODk5NiwyODk5OCwyODk5OSwyOWUzLDI5MDAxLDI5MDAzLDI5MDA1LDI5MDA3LDI5MDA4LDI5MDA5LDI5MDEwLDI5MDExLDI5MDEyLDI5MDEzLDI5MDE0LDI5MDE1LDI5MDE2LDI5MDE3LDI5MDE4''@;'; put 'put ''LDI5MDE5LDI5MDIxLDI5MDIzLDI5MDI0LDI5MDI1LDI5MDI2LDI5MDI3LDI5MDI5LDI5MDMzLDI5MDM0LDI5MDM1LDI5MDM2LDI5MDM3LDI5MDM5LDI5MDQwLDI5MDQxLDI5MDQ0LDI5MDQ1LDI5MDQ2LDI5MDQ3LDI5MDQ5LDI5MDUxLDI5MDUyLDI5MDU0LDI5MDU1LDI5MDU2LDI5MDU3LDI5''@;'; put 'put ''MDU4LDI5MDU5LDI5MDYxLDI5MDYyLDI5MDYzLDI5MDY0LDI5MDY1LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcyLDI5MDczLDI5MDc0LDI5MDc1LDI5MDc3LDI5MDc4LDI5MDc5LDI5MDgyLDI5MDgzLDI5MDg0LDI5MDg1LDI5MDg2LDI5MDg5LDI5MDkwLDI5MDkxLDI5MDkyLDI5MDkz''@;'; put 'put ''LDI5MDk0LDI5MDk1LDI5MDk3LDI5MDk4LDI5MDk5LDI5MTAxLDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA4LDI5MTEwLDI5MTExLDI5MTEyLDI5MTE0LDI5MTE1LDI5MTE2LDI5MTE3LDI5MTE4LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTIyLDI5MTI0LDI5MTI1LDI5MTI2LDI5''@;'; put 'put ''MTI3LDI5MTI4LDI5MTI5LDI5MTMwLDI5MTMxLDI5MTMyLDI5MTMzLDI5MTM1LDI5MTM2LDI5MTM3LDI5MTM4LDI5MTM5LDI5MTQyLDI5MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2LDI5MTQ3LDI5MTQ4LDI5MTQ5LDI5MTUwLDI5MTUxLDI5MTUzLDI5MTU0LDI5MTU1LDI5MTU2LDI5MTU4LDI5MTYw''@;'; put 'put ''LDI5MTYxLDI5MTYyLDI5MTYzLDI5MTY0LDI5MTY1LDI5MTY3LDI5MTY4LDI5MTY5LDI5MTcwLDI5MTcxLDI5MTcyLDI5MTczLDI5MTc0LDI5MTc1LDI5MTc2LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLDI5MTgzLDI5MTg0LDI5MTg1LDI5MTg2LDI5MTg3LDI5MTg4LDI5MTg5LDI5''@;'; put 'put ''MTkxLDI5MTkyLDI5MTkzLDI5MTk0LDI5MTk1LDI5MTk2LDI5MTk3LDI5MTk4LDI5MTk5LDI5MjAwLDI5MjAxLDI5MjAyLDI5MjAzLDI5MjA0LDI5MjA1LDI5MjA2LDI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5MjExLDI5MjEyLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LDI5MjE5''@;'; put 'put ''LDI5MjIwLDI5MjIxLDI5MjIyLDI5MjIzLDI5MjI1LDI5MjI3LDI5MjI5LDI5MjMwLDI5MjMxLDI5MjM0LDI5MjM1LDI5MjM2LDI5MjQyLDI5MjQ0LDI5MjQ2LDI5MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LDI5MjU3LDI5MjU4LDI5MjU5LDI5MjYyLDI5MjYzLDI5''@;'; put 'put ''MjY0LDI5MjY1LDI5MjY3LDI5MjY4LDI5MjY5LDI5MjcxLDI5MjcyLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg0LDI5Mjg1LDI5Mjg4LDI5MjkwLDI5MjkxLDI5MjkyLDI5MjkzLDI5Mjk2LDI5Mjk3LDI5Mjk5LDI5MzAwLDI5MzAyLDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4''@;'; put 'put ''LDI5MzA5LDI5MzE0LDI5MzE1LDI5MzE3LDI5MzE4LDI5MzE5LDI5MzIwLDI5MzIxLDI5MzI0LDI5MzI2LDI5MzI4LDI5MzI5LDI5MzMxLDI5MzMyLDI5MzMzLDI5MzM0LDI5MzM1LDI5MzM2LDI5MzM3LDI5MzM4LDI5MzM5LDI5MzQwLDI5MzQxLDI5MzQyLDI5MzQ0LDI5MzQ1LDI5MzQ2LDI5''@;'; put 'put ''MzQ3LDI5MzQ4LDI5MzQ5LDI5MzUwLDI5MzUxLDI5MzUyLDI5MzUzLDI5MzU0LDI5MzU1LDI5MzU4LDI5MzYxLDI5MzYyLDI5MzYzLDI5MzY1LDI5MzcwLDI5MzcxLDI5MzcyLDI5MzczLDI5Mzc0LDI5Mzc1LDI5Mzc2LDI5MzgxLDI5MzgyLDI5MzgzLDI5Mzg1LDI5Mzg2LDI5Mzg3LDI5Mzg4''@;'; put 'put ''LDI5MzkxLDI5MzkzLDI5Mzk1LDI5Mzk2LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDAyLDI5NDAzLDU4NTY2LDU4NTY3LDU4NTY4LDU4NTY5LDU4NTcwLDU4NTcxLDU4NTcyLDU4NTczLDU4NTc0LDU4NTc1LDU4NTc2LDU4NTc3LDU4NTc4LDU4NTc5LDU4NTgwLDU4NTgxLDU4NTgyLDU4NTgzLDU4''@;'; put 'put ''NTg0LDU4NTg1LDU4NTg2LDU4NTg3LDU4NTg4LDU4NTg5LDU4NTkwLDU4NTkxLDU4NTkyLDU4NTkzLDU4NTk0LDU4NTk1LDU4NTk2LDU4NTk3LDU4NTk4LDU4NTk5LDU4NjAwLDU4NjAxLDU4NjAyLDU4NjAzLDU4NjA0LDU4NjA1LDU4NjA2LDU4NjA3LDU4NjA4LDU4NjA5LDU4NjEwLDU4NjEx''@;'; put 'put ''LDU4NjEyLDU4NjEzLDU4NjE0LDU4NjE1LDU4NjE2LDU4NjE3LDU4NjE4LDU4NjE5LDU4NjIwLDU4NjIxLDU4NjIyLDU4NjIzLDU4NjI0LDU4NjI1LDU4NjI2LDU4NjI3LDU4NjI4LDU4NjI5LDU4NjMwLDU4NjMxLDU4NjMyLDU4NjMzLDU4NjM0LDU4NjM1LDU4NjM2LDU4NjM3LDU4NjM4LDU4''@;'; put 'put ''NjM5LDU4NjQwLDU4NjQxLDU4NjQyLDU4NjQzLDU4NjQ0LDU4NjQ1LDU4NjQ2LDU4NjQ3LDU4NjQ4LDU4NjQ5LDU4NjUwLDU4NjUxLDU4NjUyLDU4NjUzLDU4NjU0LDU4NjU1LDU4NjU2LDU4NjU3LDU4NjU4LDU4NjU5LDU4NjYwLDU4NjYxLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw3MTMsNzEx''@;'; put 'put ''LDE2OCwxMjI5MSwxMjI5Myw4MjEyLDY1Mzc0LDgyMTQsODIzMCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzEwLDEyMzExLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg3NTgsODc0Myw4''@;'; put 'put ''NzQ0LDg3MjEsODcxOSw4NzQ2LDg3NDUsODcxMiw4NzU5LDg3MzAsODg2OSw4NzQxLDg3MzYsODk3OCw4ODU3LDg3NDcsODc1MCw4ODAxLDg3ODAsODc3Niw4NzY1LDg3MzMsODgwMCw4ODE0LDg4MTUsODgwNCw4ODA1LDg3MzQsODc1Nyw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0''@;'; put 'put ''NTEsNjUyODQsMTY0LDY1NTA0LDY1NTA1LDgyNDAsMTY3LDg0NzAsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDgyNTEsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyw1ODY2Miw1ODY2Myw1ODY2NCw1ODY2NSw1ODY2Niw1ODY2Nyw1ODY2''@;'; put 'put ''OCw1ODY2OSw1ODY3MCw1ODY3MSw1ODY3Miw1ODY3Myw1ODY3NCw1ODY3NSw1ODY3Niw1ODY3Nyw1ODY3OCw1ODY3OSw1ODY4MCw1ODY4MSw1ODY4Miw1ODY4Myw1ODY4NCw1ODY4NSw1ODY4Niw1ODY4Nyw1ODY4OCw1ODY4OSw1ODY5MCw1ODY5MSw1ODY5Miw1ODY5Myw1ODY5NCw1ODY5NSw1''@;'; put 'put ''ODY5Niw1ODY5Nyw1ODY5OCw1ODY5OSw1ODcwMCw1ODcwMSw1ODcwMiw1ODcwMyw1ODcwNCw1ODcwNSw1ODcwNiw1ODcwNyw1ODcwOCw1ODcwOSw1ODcxMCw1ODcxMSw1ODcxMiw1ODcxMyw1ODcxNCw1ODcxNSw1ODcxNiw1ODcxNyw1ODcxOCw1ODcxOSw1ODcyMCw1ODcyMSw1ODcyMiw1ODcy''@;'; put 'put ''Myw1ODcyNCw1ODcyNSw1ODcyNiw1ODcyNyw1ODcyOCw1ODcyOSw1ODczMCw1ODczMSw1ODczMiw1ODczMyw1ODczNCw1ODczNSw1ODczNiw1ODczNyw1ODczOCw1ODczOSw1ODc0MCw1ODc0MSw1ODc0Miw1ODc0Myw1ODc0NCw1ODc0NSw1ODc0Niw1ODc0Nyw1ODc0OCw1ODc0OSw1ODc1MCw1''@;'; put 'put ''ODc1MSw1ODc1Miw1ODc1Myw1ODc1NCw1ODc1NSw1ODc1Niw1ODc1Nyw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDU5MjM4LDU5MjM5LDU5MjQwLDU5MjQxLDU5MjQyLDU5MjQzLDkzNTIsOTM1Myw5MzU0LDkzNTUsOTM1Niw5MzU3LDkzNTgsOTM1''@;'; put 'put ''OSw5MzYwLDkzNjEsOTM2Miw5MzYzLDkzNjQsOTM2NSw5MzY2LDkzNjcsOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEsOTMx''@;'; put 'put ''Miw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw4MzY0LDU5MjQ1LDEyODMyLDEyODMzLDEyODM0LDEyODM1LDEyODM2LDEyODM3LDEyODM4LDEyODM5LDEyODQwLDEyODQxLDU5MjQ2LDU5MjQ3LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAs''@;'; put 'put ''ODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDU5MjQ4LDU5MjQ5LDU4NzU4LDU4NzU5LDU4NzYwLDU4NzYxLDU4NzYyLDU4NzYzLDU4NzY0LDU4NzY1LDU4NzY2LDU4NzY3LDU4NzY4LDU4NzY5LDU4NzcwLDU4NzcxLDU4NzcyLDU4NzczLDU4Nzc0LDU4Nzc1LDU4Nzc2LDU4Nzc3LDU4Nzc4LDU4''@;'; put 'put ''Nzc5LDU4NzgwLDU4NzgxLDU4NzgyLDU4NzgzLDU4Nzg0LDU4Nzg1LDU4Nzg2LDU4Nzg3LDU4Nzg4LDU4Nzg5LDU4NzkwLDU4NzkxLDU4NzkyLDU4NzkzLDU4Nzk0LDU4Nzk1LDU4Nzk2LDU4Nzk3LDU4Nzk4LDU4Nzk5LDU4ODAwLDU4ODAxLDU4ODAyLDU4ODAzLDU4ODA0LDU4ODA1LDU4ODA2''@;'; put 'put ''LDU4ODA3LDU4ODA4LDU4ODA5LDU4ODEwLDU4ODExLDU4ODEyLDU4ODEzLDU4ODE0LDU4ODE1LDU4ODE2LDU4ODE3LDU4ODE4LDU4ODE5LDU4ODIwLDU4ODIxLDU4ODIyLDU4ODIzLDU4ODI0LDU4ODI1LDU4ODI2LDU4ODI3LDU4ODI4LDU4ODI5LDU4ODMwLDU4ODMxLDU4ODMyLDU4ODMzLDU4''@;'; put 'put ''ODM0LDU4ODM1LDU4ODM2LDU4ODM3LDU4ODM4LDU4ODM5LDU4ODQwLDU4ODQxLDU4ODQyLDU4ODQzLDU4ODQ0LDU4ODQ1LDU4ODQ2LDU4ODQ3LDU4ODQ4LDU4ODQ5LDU4ODUwLDU4ODUxLDU4ODUyLDEyMjg4LDY1MjgxLDY1MjgyLDY1MjgzLDY1NTA5LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4''@;'; put 'put ''LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1''@;'; put 'put ''MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1MzQwLDY1MzQxLDY1MzQyLDY1MzQz''@;'; put 'put ''LDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1''@;'; put 'put ''MzcxLDY1MzcyLDY1MzczLDY1NTA3LDU4ODU0LDU4ODU1LDU4ODU2LDU4ODU3LDU4ODU4LDU4ODU5LDU4ODYwLDU4ODYxLDU4ODYyLDU4ODYzLDU4ODY0LDU4ODY1LDU4ODY2LDU4ODY3LDU4ODY4LDU4ODY5LDU4ODcwLDU4ODcxLDU4ODcyLDU4ODczLDU4ODc0LDU4ODc1LDU4ODc2LDU4ODc3''@;'; put 'put ''LDU4ODc4LDU4ODc5LDU4ODgwLDU4ODgxLDU4ODgyLDU4ODgzLDU4ODg0LDU4ODg1LDU4ODg2LDU4ODg3LDU4ODg4LDU4ODg5LDU4ODkwLDU4ODkxLDU4ODkyLDU4ODkzLDU4ODk0LDU4ODk1LDU4ODk2LDU4ODk3LDU4ODk4LDU4ODk5LDU4OTAwLDU4OTAxLDU4OTAyLDU4OTAzLDU4OTA0LDU4''@;'; put 'put ''OTA1LDU4OTA2LDU4OTA3LDU4OTA4LDU4OTA5LDU4OTEwLDU4OTExLDU4OTEyLDU4OTEzLDU4OTE0LDU4OTE1LDU4OTE2LDU4OTE3LDU4OTE4LDU4OTE5LDU4OTIwLDU4OTIxLDU4OTIyLDU4OTIzLDU4OTI0LDU4OTI1LDU4OTI2LDU4OTI3LDU4OTI4LDU4OTI5LDU4OTMwLDU4OTMxLDU4OTMy''@;'; put 'put ''LDU4OTMzLDU4OTM0LDU4OTM1LDU4OTM2LDU4OTM3LDU4OTM4LDU4OTM5LDU4OTQwLDU4OTQxLDU4OTQyLDU4OTQzLDU4OTQ0LDU4OTQ1LDU4OTQ2LDU4OTQ3LDU4OTQ4LDU4OTQ5LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEy''@;'; put 'put ''MzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkw''@;'; put 'put ''LDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEy''@;'; put 'put ''NDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDU5MjUwLDU5MjUxLDU5MjUyLDU5MjUzLDU5MjU0LDU5MjU1LDU5MjU2LDU5MjU3LDU5MjU4LDU5MjU5''@;'; put 'put ''LDU5MjYwLDU4OTUwLDU4OTUxLDU4OTUyLDU4OTUzLDU4OTU0LDU4OTU1LDU4OTU2LDU4OTU3LDU4OTU4LDU4OTU5LDU4OTYwLDU4OTYxLDU4OTYyLDU4OTYzLDU4OTY0LDU4OTY1LDU4OTY2LDU4OTY3LDU4OTY4LDU4OTY5LDU4OTcwLDU4OTcxLDU4OTcyLDU4OTczLDU4OTc0LDU4OTc1LDU4''@;'; put 'put ''OTc2LDU4OTc3LDU4OTc4LDU4OTc5LDU4OTgwLDU4OTgxLDU4OTgyLDU4OTgzLDU4OTg0LDU4OTg1LDU4OTg2LDU4OTg3LDU4OTg4LDU4OTg5LDU4OTkwLDU4OTkxLDU4OTkyLDU4OTkzLDU4OTk0LDU4OTk1LDU4OTk2LDU4OTk3LDU4OTk4LDU4OTk5LDU5ZTMsNTkwMDEsNTkwMDIsNTkwMDMs''@;'; put 'put ''NTkwMDQsNTkwMDUsNTkwMDYsNTkwMDcsNTkwMDgsNTkwMDksNTkwMTAsNTkwMTEsNTkwMTIsNTkwMTMsNTkwMTQsNTkwMTUsNTkwMTYsNTkwMTcsNTkwMTgsNTkwMTksNTkwMjAsNTkwMjEsNTkwMjIsNTkwMjMsNTkwMjQsNTkwMjUsNTkwMjYsNTkwMjcsNTkwMjgsNTkwMjksNTkwMzAsNTkw''@;'; put 'put ''MzEsNTkwMzIsNTkwMzMsNTkwMzQsNTkwMzUsNTkwMzYsNTkwMzcsNTkwMzgsNTkwMzksNTkwNDAsNTkwNDEsNTkwNDIsNTkwNDMsNTkwNDQsNTkwNDUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEs''@;'; put 'put ''MTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0''@;'; put 'put ''ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYs''@;'; put 'put ''MTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsNTkyNjEsNTkyNjIsNTkyNjMsNTkyNjQsNTkyNjUsNTkyNjYsNTkyNjcsNTkyNjgsNTkwNDYsNTkw''@;'; put 'put ''NDcsNTkwNDgsNTkwNDksNTkwNTAsNTkwNTEsNTkwNTIsNTkwNTMsNTkwNTQsNTkwNTUsNTkwNTYsNTkwNTcsNTkwNTgsNTkwNTksNTkwNjAsNTkwNjEsNTkwNjIsNTkwNjMsNTkwNjQsNTkwNjUsNTkwNjYsNTkwNjcsNTkwNjgsNTkwNjksNTkwNzAsNTkwNzEsNTkwNzIsNTkwNzMsNTkwNzQs''@;'; put 'put ''NTkwNzUsNTkwNzYsNTkwNzcsNTkwNzgsNTkwNzksNTkwODAsNTkwODEsNTkwODIsNTkwODMsNTkwODQsNTkwODUsNTkwODYsNTkwODcsNTkwODgsNTkwODksNTkwOTAsNTkwOTEsNTkwOTIsNTkwOTMsNTkwOTQsNTkwOTUsNTkwOTYsNTkwOTcsNTkwOTgsNTkwOTksNTkxMDAsNTkxMDEsNTkx''@;'; put 'put ''MDIsNTkxMDMsNTkxMDQsNTkxMDUsNTkxMDYsNTkxMDcsNTkxMDgsNTkxMDksNTkxMTAsNTkxMTEsNTkxMTIsNTkxMTMsNTkxMTQsNTkxMTUsNTkxMTYsNTkxMTcsNTkxMTgsNTkxMTksNTkxMjAsNTkxMjEsNTkxMjIsNTkxMjMsNTkxMjQsNTkxMjUsNTkxMjYsNTkxMjcsNTkxMjgsNTkxMjks''@;'; put 'put ''NTkxMzAsNTkxMzEsNTkxMzIsNTkxMzMsNTkxMzQsNTkxMzUsNTkxMzYsNTkxMzcsNTkxMzgsNTkxMzksNTkxNDAsNTkxNDEsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5''@;'; put 'put ''MzcsNTkyNjksNTkyNzAsNTkyNzEsNTkyNzIsNTkyNzMsNTkyNzQsNTkyNzUsNTkyNzYsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksNTkyNzcsNTkyNzgsNTkyNzks''@;'; put 'put ''NTkyODAsNTkyODEsNTkyODIsNTkyODMsNjUwNzcsNjUwNzgsNjUwODEsNjUwODIsNjUwODcsNjUwODgsNjUwODUsNjUwODYsNjUwODksNjUwOTAsNjUwOTEsNjUwOTIsNTkyODQsNTkyODUsNjUwODMsNjUwODQsNjUwNzksNjUwODAsNjUwNzMsNTkyODYsNjUwNzUsNjUwNzYsNTkyODcsNTky''@;'; put 'put ''ODgsNTkyODksNTkyOTAsNTkyOTEsNTkyOTIsNTkyOTMsNTkyOTQsNTkyOTUsNTkxNDIsNTkxNDMsNTkxNDQsNTkxNDUsNTkxNDYsNTkxNDcsNTkxNDgsNTkxNDksNTkxNTAsNTkxNTEsNTkxNTIsNTkxNTMsNTkxNTQsNTkxNTUsNTkxNTYsNTkxNTcsNTkxNTgsNTkxNTksNTkxNjAsNTkxNjEs''@;'; put 'put ''NTkxNjIsNTkxNjMsNTkxNjQsNTkxNjUsNTkxNjYsNTkxNjcsNTkxNjgsNTkxNjksNTkxNzAsNTkxNzEsNTkxNzIsNTkxNzMsNTkxNzQsNTkxNzUsNTkxNzYsNTkxNzcsNTkxNzgsNTkxNzksNTkxODAsNTkxODEsNTkxODIsNTkxODMsNTkxODQsNTkxODUsNTkxODYsNTkxODcsNTkxODgsNTkx''@;'; put 'put ''ODksNTkxOTAsNTkxOTEsNTkxOTIsNTkxOTMsNTkxOTQsNTkxOTUsNTkxOTYsNTkxOTcsNTkxOTgsNTkxOTksNTkyMDAsNTkyMDEsNTkyMDIsNTkyMDMsNTkyMDQsNTkyMDUsNTkyMDYsNTkyMDcsNTkyMDgsNTkyMDksNTkyMTAsNTkyMTEsNTkyMTIsNTkyMTMsNTkyMTQsNTkyMTUsNTkyMTYs''@;'; put 'put ''NTkyMTcsNTkyMTgsNTkyMTksNTkyMjAsNTkyMjEsNTkyMjIsNTkyMjMsNTkyMjQsNTkyMjUsNTkyMjYsNTkyMjcsNTkyMjgsNTkyMjksNTkyMzAsNTkyMzEsNTkyMzIsNTkyMzMsNTkyMzQsNTkyMzUsNTkyMzYsNTkyMzcsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2''@;'; put 'put ''LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsNTkyOTYsNTkyOTcsNTkyOTgsNTkyOTksNTkzMDAsNTkzMDEsNTkz''@;'; put 'put ''MDIsNTkzMDMsNTkzMDQsNTkzMDUsNTkzMDYsNTkzMDcsNTkzMDgsNTkzMDksNTkzMTAsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkz''@;'; put 'put ''LDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsNTkzMTEsNTkzMTIsNTkzMTMsNTkzMTQsNTkzMTUsNTkzMTYsNTkzMTcsNTkzMTgsNTkzMTksNTkzMjAsNTkzMjEsNTkzMjIsNTkzMjMsNzE0LDcxNSw3MjksODIxMSw4MjEzLDgyMjksODI0NSw4NDUz''@;'; put 'put ''LDg0NTcsODU5OCw4NTk5LDg2MDAsODYwMSw4NzI1LDg3MzUsODczOSw4Nzg2LDg4MDYsODgwNyw4ODk1LDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcy''@;'; put 'put ''LDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NTgxLDk1ODIsOTU4Myw5NTg0LDk1ODUsOTU4Niw5NTg3LDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjA5LDk2MTAsOTYxMSw5NjEyLDk2MTMsOTYxNCw5NjE1LDk2MTksOTYyMCw5NjIx''@;'; put 'put ''LDk2NjAsOTY2MSw5Njk4LDk2OTksOTcwMCw5NzAxLDk3MzcsODg1MywxMjMwNiwxMjMxNywxMjMxOCw1OTMyNCw1OTMyNSw1OTMyNiw1OTMyNyw1OTMyOCw1OTMyOSw1OTMzMCw1OTMzMSw1OTMzMiw1OTMzMyw1OTMzNCwyNTcsMjI1LDQ2MiwyMjQsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcs''@;'; put 'put ''NDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsMjM0LDU5Myw3NzQzLDMyNCwzMjgsNTA1LDYwOSw1OTMzNyw1OTMzOCw1OTMzOSw1OTM0MCwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1''@;'; put 'put ''NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwx''@;'; put 'put ''MjU4NSw1OTM0MSw1OTM0Miw1OTM0Myw1OTM0NCw1OTM0NSw1OTM0Niw1OTM0Nyw1OTM0OCw1OTM0OSw1OTM1MCw1OTM1MSw1OTM1Miw1OTM1Myw1OTM1NCw1OTM1NSw1OTM1Niw1OTM1Nyw1OTM1OCw1OTM1OSw1OTM2MCw1OTM2MSwxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMy''@;'; put 'put ''NiwxMjMyNywxMjMyOCwxMjMyOSwxMjk2MywxMzE5OCwxMzE5OSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNywxMzI1MiwxMzI2MiwxMzI2NSwxMzI2NiwxMzI2OSw2NTA3Miw2NTUwNiw2NTUwOCw1OTM2Miw4NDgxLDEyODQ5LDU5MzYzLDgyMDgsNTkzNjQsNTkzNjUsNTkzNjYsMTI1NDAsMTI0''@;'; put 'put ''NDMsMTI0NDQsMTI1NDEsMTI1NDIsMTIyOTQsMTI0NDUsMTI0NDYsNjUwOTcsNjUwOTgsNjUwOTksNjUxMDAsNjUxMDEsNjUxMDIsNjUxMDMsNjUxMDQsNjUxMDUsNjUxMDYsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsNjUxMTks''@;'; put 'put ''NjUxMjAsNjUxMjEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUxMjgsNjUxMjksNjUxMzAsNjUxMzEsMTIzNTAsMTIyNzIsMTIyNzMsMTIyNzQsMTIyNzUsMTIyNzYsMTIyNzcsMTIyNzgsMTIyNzksMTIyODAsMTIyODEsMTIyODIsMTIyODMsMTIyOTUsNTkzODAsNTkzODEsNTkz''@;'; put 'put ''ODIsNTkzODMsNTkzODQsNTkzODUsNTkzODYsNTkzODcsNTkzODgsNTkzODksNTkzOTAsNTkzOTEsNTkzOTIsOTQ3Miw5NDczLDk0NzQsOTQ3NSw5NDc2LDk0NzcsOTQ3OCw5NDc5LDk0ODAsOTQ4MSw5NDgyLDk0ODMsOTQ4NCw5NDg1LDk0ODYsOTQ4Nyw5NDg4LDk0ODksOTQ5MCw5NDkxLDk0''@;'; put 'put ''OTIsOTQ5Myw5NDk0LDk0OTUsOTQ5Niw5NDk3LDk0OTgsOTQ5OSw5NTAwLDk1MDEsOTUwMiw5NTAzLDk1MDQsOTUwNSw5NTA2LDk1MDcsOTUwOCw5NTA5LDk1MTAsOTUxMSw5NTEyLDk1MTMsOTUxNCw5NTE1LDk1MTYsOTUxNyw5NTE4LDk1MTksOTUyMCw5NTIxLDk1MjIsOTUyMyw5NTI0LDk1''@;'; put 'put ''MjUsOTUyNiw5NTI3LDk1MjgsOTUyOSw5NTMwLDk1MzEsOTUzMiw5NTMzLDk1MzQsOTUzNSw5NTM2LDk1MzcsOTUzOCw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsOTU0Nyw1OTM5Myw1OTM5NCw1OTM5NSw1OTM5Niw1OTM5Nyw1OTM5OCw1OTM5OSw1OTQwMCw1OTQw''@;'; put 'put ''MSw1OTQwMiw1OTQwMyw1OTQwNCw1OTQwNSw1OTQwNiw1OTQwNywyOTQwNCwyOTQwNSwyOTQwNywyOTQxMCwyOTQxMSwyOTQxMiwyOTQxMywyOTQxNCwyOTQxNSwyOTQxOCwyOTQxOSwyOTQyOSwyOTQzMCwyOTQzMywyOTQzNywyOTQzOCwyOTQzOSwyOTQ0MCwyOTQ0MiwyOTQ0NCwyOTQ0NSwy''@;'; put 'put ''OTQ0NiwyOTQ0NywyOTQ0OCwyOTQ0OSwyOTQ1MSwyOTQ1MiwyOTQ1MywyOTQ1NSwyOTQ1NiwyOTQ1NywyOTQ1OCwyOTQ2MCwyOTQ2NCwyOTQ2NSwyOTQ2NiwyOTQ3MSwyOTQ3MiwyOTQ3NSwyOTQ3NiwyOTQ3OCwyOTQ3OSwyOTQ4MCwyOTQ4NSwyOTQ4NywyOTQ4OCwyOTQ5MCwyOTQ5MSwyOTQ5''@;'; put 'put ''MywyOTQ5NCwyOTQ5OCwyOTQ5OSwyOTUwMCwyOTUwMSwyOTUwNCwyOTUwNSwyOTUwNiwyOTUwNywyOTUwOCwyOTUwOSwyOTUxMCwyOTUxMSwyOTUxMiwyOTUxMywyOTUxNCwyOTUxNSwyOTUxNiwyOTUxOCwyOTUxOSwyOTUyMSwyOTUyMywyOTUyNCwyOTUyNSwyOTUyNiwyOTUyOCwyOTUyOSwy''@;'; put 'put ''OTUzMCwyOTUzMSwyOTUzMiwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNywyOTUzOCwyOTUzOSwyOTU0MCwyOTU0MSwyOTU0MiwyOTU0MywyOTU0NCwyOTU0NSwyOTU0NiwyOTU0NywyOTU1MCwyOTU1MiwyOTU1Myw1NzM0NCw1NzM0NSw1NzM0Niw1NzM0Nyw1NzM0OCw1NzM0OSw1NzM1MCw1NzM1''@;'; put 'put ''MSw1NzM1Miw1NzM1Myw1NzM1NCw1NzM1NSw1NzM1Niw1NzM1Nyw1NzM1OCw1NzM1OSw1NzM2MCw1NzM2MSw1NzM2Miw1NzM2Myw1NzM2NCw1NzM2NSw1NzM2Niw1NzM2Nyw1NzM2OCw1NzM2OSw1NzM3MCw1NzM3MSw1NzM3Miw1NzM3Myw1NzM3NCw1NzM3NSw1NzM3Niw1NzM3Nyw1NzM3OCw1''@;'; put 'put ''NzM3OSw1NzM4MCw1NzM4MSw1NzM4Miw1NzM4Myw1NzM4NCw1NzM4NSw1NzM4Niw1NzM4Nyw1NzM4OCw1NzM4OSw1NzM5MCw1NzM5MSw1NzM5Miw1NzM5Myw1NzM5NCw1NzM5NSw1NzM5Niw1NzM5Nyw1NzM5OCw1NzM5OSw1NzQwMCw1NzQwMSw1NzQwMiw1NzQwMyw1NzQwNCw1NzQwNSw1NzQw''@;'; put 'put ''Niw1NzQwNyw1NzQwOCw1NzQwOSw1NzQxMCw1NzQxMSw1NzQxMiw1NzQxMyw1NzQxNCw1NzQxNSw1NzQxNiw1NzQxNyw1NzQxOCw1NzQxOSw1NzQyMCw1NzQyMSw1NzQyMiw1NzQyMyw1NzQyNCw1NzQyNSw1NzQyNiw1NzQyNyw1NzQyOCw1NzQyOSw1NzQzMCw1NzQzMSw1NzQzMiw1NzQzMyw1''@;'; put 'put ''NzQzNCw1NzQzNSw1NzQzNiw1NzQzNywyOTU1NCwyOTU1NSwyOTU1NiwyOTU1NywyOTU1OCwyOTU1OSwyOTU2MCwyOTU2MSwyOTU2MiwyOTU2MywyOTU2NCwyOTU2NSwyOTU2NywyOTU2OCwyOTU2OSwyOTU3MCwyOTU3MSwyOTU3MywyOTU3NCwyOTU3NiwyOTU3OCwyOTU4MCwyOTU4MSwyOTU4''@;'; put 'put ''MywyOTU4NCwyOTU4NiwyOTU4NywyOTU4OCwyOTU4OSwyOTU5MSwyOTU5MiwyOTU5MywyOTU5NCwyOTU5NiwyOTU5NywyOTU5OCwyOTYwMCwyOTYwMSwyOTYwMywyOTYwNCwyOTYwNSwyOTYwNiwyOTYwNywyOTYwOCwyOTYxMCwyOTYxMiwyOTYxMywyOTYxNywyOTYyMCwyOTYyMSwyOTYyMiwy''@;'; put 'put ''OTYyNCwyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMCwyOTYzMSwyOTYzMywyOTYzNSwyOTYzNiwyOTYzNywyOTYzOCwyOTYzOSwyOTY0MywyOTY0NCwyOTY0NiwyOTY1MCwyOTY1MSwyOTY1MiwyOTY1MywyOTY1NCwyOTY1NSwyOTY1NiwyOTY1OCwyOTY1OSwyOTY2MCwyOTY2MSwyOTY2MywyOTY2''@;'; put 'put ''NSwyOTY2NiwyOTY2NywyOTY2OCwyOTY3MCwyOTY3MiwyOTY3NCwyOTY3NSwyOTY3NiwyOTY3OCwyOTY3OSwyOTY4MCwyOTY4MSwyOTY4MywyOTY4NCwyOTY4NSwyOTY4NiwyOTY4Nyw1NzQzOCw1NzQzOSw1NzQ0MCw1NzQ0MSw1NzQ0Miw1NzQ0Myw1NzQ0NCw1NzQ0NSw1NzQ0Niw1NzQ0Nyw1''@;'; put 'put ''NzQ0OCw1NzQ0OSw1NzQ1MCw1NzQ1MSw1NzQ1Miw1NzQ1Myw1NzQ1NCw1NzQ1NSw1NzQ1Niw1NzQ1Nyw1NzQ1OCw1NzQ1OSw1NzQ2MCw1NzQ2MSw1NzQ2Miw1NzQ2Myw1NzQ2NCw1NzQ2NSw1NzQ2Niw1NzQ2Nyw1NzQ2OCw1NzQ2OSw1NzQ3MCw1NzQ3MSw1NzQ3Miw1NzQ3Myw1NzQ3NCw1NzQ3''@;'; put 'put ''NSw1NzQ3Niw1NzQ3Nyw1NzQ3OCw1NzQ3OSw1NzQ4MCw1NzQ4MSw1NzQ4Miw1NzQ4Myw1NzQ4NCw1NzQ4NSw1NzQ4Niw1NzQ4Nyw1NzQ4OCw1NzQ4OSw1NzQ5MCw1NzQ5MSw1NzQ5Miw1NzQ5Myw1NzQ5NCw1NzQ5NSw1NzQ5Niw1NzQ5Nyw1NzQ5OCw1NzQ5OSw1NzUwMCw1NzUwMSw1NzUwMiw1''@;'; put 'put ''NzUwMyw1NzUwNCw1NzUwNSw1NzUwNiw1NzUwNyw1NzUwOCw1NzUwOSw1NzUxMCw1NzUxMSw1NzUxMiw1NzUxMyw1NzUxNCw1NzUxNSw1NzUxNiw1NzUxNyw1NzUxOCw1NzUxOSw1NzUyMCw1NzUyMSw1NzUyMiw1NzUyMyw1NzUyNCw1NzUyNSw1NzUyNiw1NzUyNyw1NzUyOCw1NzUyOSw1NzUz''@;'; put 'put ''MCw1NzUzMSwyOTY4OCwyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MiwyOTY5MywyOTY5NCwyOTY5NSwyOTY5NiwyOTY5NywyOTY5OCwyOTcwMCwyOTcwMywyOTcwNCwyOTcwNywyOTcwOCwyOTcwOSwyOTcxMCwyOTcxMywyOTcxNCwyOTcxNSwyOTcxNiwyOTcxNywyOTcxOCwyOTcxOSwyOTcyMCwy''@;'; put 'put ''OTcyMSwyOTcyNCwyOTcyNSwyOTcyNiwyOTcyNywyOTcyOCwyOTcyOSwyOTczMSwyOTczMiwyOTczNSwyOTczNywyOTczOSwyOTc0MSwyOTc0MywyOTc0NSwyOTc0NiwyOTc1MSwyOTc1MiwyOTc1MywyOTc1NCwyOTc1NSwyOTc1NywyOTc1OCwyOTc1OSwyOTc2MCwyOTc2MiwyOTc2MywyOTc2''@;'; put 'put ''NCwyOTc2NSwyOTc2NiwyOTc2NywyOTc2OCwyOTc2OSwyOTc3MCwyOTc3MSwyOTc3MiwyOTc3MywyOTc3NCwyOTc3NSwyOTc3NiwyOTc3NywyOTc3OCwyOTc3OSwyOTc4MCwyOTc4MiwyOTc4NCwyOTc4OSwyOTc5MiwyOTc5MywyOTc5NCwyOTc5NSwyOTc5NiwyOTc5NywyOTc5OCwyOTc5OSwy''@;'; put 'put ''OTgwMCwyOTgwMSwyOTgwMiwyOTgwMywyOTgwNCwyOTgwNiwyOTgwNywyOTgwOSwyOTgxMCwyOTgxMSwyOTgxMiwyOTgxMywyOTgxNiwyOTgxNywyOTgxOCw1NzUzMiw1NzUzMyw1NzUzNCw1NzUzNSw1NzUzNiw1NzUzNyw1NzUzOCw1NzUzOSw1NzU0MCw1NzU0MSw1NzU0Miw1NzU0Myw1NzU0''@;'; put 'put ''NCw1NzU0NSw1NzU0Niw1NzU0Nyw1NzU0OCw1NzU0OSw1NzU1MCw1NzU1MSw1NzU1Miw1NzU1Myw1NzU1NCw1NzU1NSw1NzU1Niw1NzU1Nyw1NzU1OCw1NzU1OSw1NzU2MCw1NzU2MSw1NzU2Miw1NzU2Myw1NzU2NCw1NzU2NSw1NzU2Niw1NzU2Nyw1NzU2OCw1NzU2OSw1NzU3MCw1NzU3MSw1''@;'; put 'put ''NzU3Miw1NzU3Myw1NzU3NCw1NzU3NSw1NzU3Niw1NzU3Nyw1NzU3OCw1NzU3OSw1NzU4MCw1NzU4MSw1NzU4Miw1NzU4Myw1NzU4NCw1NzU4NSw1NzU4Niw1NzU4Nyw1NzU4OCw1NzU4OSw1NzU5MCw1NzU5MSw1NzU5Miw1NzU5Myw1NzU5NCw1NzU5NSw1NzU5Niw1NzU5Nyw1NzU5OCw1NzU5''@;'; put 'put ''OSw1NzYwMCw1NzYwMSw1NzYwMiw1NzYwMyw1NzYwNCw1NzYwNSw1NzYwNiw1NzYwNyw1NzYwOCw1NzYwOSw1NzYxMCw1NzYxMSw1NzYxMiw1NzYxMyw1NzYxNCw1NzYxNSw1NzYxNiw1NzYxNyw1NzYxOCw1NzYxOSw1NzYyMCw1NzYyMSw1NzYyMiw1NzYyMyw1NzYyNCw1NzYyNSwyOTgxOSwy''@;'; put 'put ''OTgyMCwyOTgyMSwyOTgyMywyOTgyNiwyOTgyOCwyOTgyOSwyOTgzMCwyOTgzMiwyOTgzMywyOTgzNCwyOTgzNiwyOTgzNywyOTgzOSwyOTg0MSwyOTg0MiwyOTg0MywyOTg0NCwyOTg0NSwyOTg0NiwyOTg0NywyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MSwyOTg1MywyOTg1NSwyOTg1NiwyOTg1''@;'; put 'put ''NywyOTg1OCwyOTg1OSwyOTg2MCwyOTg2MSwyOTg2MiwyOTg2NiwyOTg2NywyOTg2OCwyOTg2OSwyOTg3MCwyOTg3MSwyOTg3MiwyOTg3MywyOTg3NCwyOTg3NSwyOTg3NiwyOTg3NywyOTg3OCwyOTg3OSwyOTg4MCwyOTg4MSwyOTg4MywyOTg4NCwyOTg4NSwyOTg4NiwyOTg4NywyOTg4OCwy''@;'; put 'put ''OTg4OSwyOTg5MCwyOTg5MSwyOTg5MiwyOTg5MywyOTg5NCwyOTg5NSwyOTg5NiwyOTg5NywyOTg5OCwyOTg5OSwyOTkwMCwyOTkwMSwyOTkwMiwyOTkwMywyOTkwNCwyOTkwNSwyOTkwNywyOTkwOCwyOTkwOSwyOTkxMCwyOTkxMSwyOTkxMiwyOTkxMywyOTkxNCwyOTkxNSwyOTkxNywyOTkx''@;'; put 'put ''OSwyOTkyMSwyOTkyNSwyOTkyNywyOTkyOCwyOTkyOSwyOTkzMCwyOTkzMSwyOTkzMiwyOTkzMywyOTkzNiwyOTkzNywyOTkzOCw1NzYyNiw1NzYyNyw1NzYyOCw1NzYyOSw1NzYzMCw1NzYzMSw1NzYzMiw1NzYzMyw1NzYzNCw1NzYzNSw1NzYzNiw1NzYzNyw1NzYzOCw1NzYzOSw1NzY0MCw1''@;'; put 'put ''NzY0MSw1NzY0Miw1NzY0Myw1NzY0NCw1NzY0NSw1NzY0Niw1NzY0Nyw1NzY0OCw1NzY0OSw1NzY1MCw1NzY1MSw1NzY1Miw1NzY1Myw1NzY1NCw1NzY1NSw1NzY1Niw1NzY1Nyw1NzY1OCw1NzY1OSw1NzY2MCw1NzY2MSw1NzY2Miw1NzY2Myw1NzY2NCw1NzY2NSw1NzY2Niw1NzY2Nyw1NzY2''@;'; put 'put ''OCw1NzY2OSw1NzY3MCw1NzY3MSw1NzY3Miw1NzY3Myw1NzY3NCw1NzY3NSw1NzY3Niw1NzY3Nyw1NzY3OCw1NzY3OSw1NzY4MCw1NzY4MSw1NzY4Miw1NzY4Myw1NzY4NCw1NzY4NSw1NzY4Niw1NzY4Nyw1NzY4OCw1NzY4OSw1NzY5MCw1NzY5MSw1NzY5Miw1NzY5Myw1NzY5NCw1NzY5NSw1''@;'; put 'put ''NzY5Niw1NzY5Nyw1NzY5OCw1NzY5OSw1NzcwMCw1NzcwMSw1NzcwMiw1NzcwMyw1NzcwNCw1NzcwNSw1NzcwNiw1NzcwNyw1NzcwOCw1NzcwOSw1NzcxMCw1NzcxMSw1NzcxMiw1NzcxMyw1NzcxNCw1NzcxNSw1NzcxNiw1NzcxNyw1NzcxOCw1NzcxOSwyOTkzOSwyOTk0MSwyOTk0NCwyOTk0''@;'; put 'put ''NSwyOTk0NiwyOTk0NywyOTk0OCwyOTk0OSwyOTk1MCwyOTk1MiwyOTk1MywyOTk1NCwyOTk1NSwyOTk1NywyOTk1OCwyOTk1OSwyOTk2MCwyOTk2MSwyOTk2MiwyOTk2MywyOTk2NCwyOTk2NiwyOTk2OCwyOTk3MCwyOTk3MiwyOTk3MywyOTk3NCwyOTk3NSwyOTk3OSwyOTk4MSwyOTk4Miwy''@;'; put 'put ''OTk4NCwyOTk4NSwyOTk4NiwyOTk4NywyOTk4OCwyOTk5MCwyOTk5MSwyOTk5NCwyOTk5OCwzMDAwNCwzMDAwNiwzMDAwOSwzMDAxMiwzMDAxMywzMDAxNSwzMDAxNywzMDAxOCwzMDAxOSwzMDAyMCwzMDAyMiwzMDAyMywzMDAyNSwzMDAyNiwzMDAyOSwzMDAzMiwzMDAzMywzMDAzNCwzMDAz''@;'; put 'put ''NSwzMDAzNywzMDAzOCwzMDAzOSwzMDA0MCwzMDA0NSwzMDA0NiwzMDA0NywzMDA0OCwzMDA0OSwzMDA1MCwzMDA1MSwzMDA1MiwzMDA1NSwzMDA1NiwzMDA1NywzMDA1OSwzMDA2MCwzMDA2MSwzMDA2MiwzMDA2MywzMDA2NCwzMDA2NSwzMDA2NywzMDA2OSwzMDA3MCwzMDA3MSwzMDA3NCwz''@;'; put 'put ''MDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MCwzMDA4MSwzMDA4MiwzMDA4NCwzMDA4NSwzMDA4Nyw1NzcyMCw1NzcyMSw1NzcyMiw1NzcyMyw1NzcyNCw1NzcyNSw1NzcyNiw1NzcyNyw1NzcyOCw1NzcyOSw1NzczMCw1NzczMSw1NzczMiw1NzczMyw1NzczNCw1NzczNSw1NzczNiw1Nzcz''@;'; put 'put ''Nyw1NzczOCw1NzczOSw1Nzc0MCw1Nzc0MSw1Nzc0Miw1Nzc0Myw1Nzc0NCw1Nzc0NSw1Nzc0Niw1Nzc0Nyw1Nzc0OCw1Nzc0OSw1Nzc1MCw1Nzc1MSw1Nzc1Miw1Nzc1Myw1Nzc1NCw1Nzc1NSw1Nzc1Niw1Nzc1Nyw1Nzc1OCw1Nzc1OSw1Nzc2MCw1Nzc2MSw1Nzc2Miw1Nzc2Myw1Nzc2NCw1''@;'; put 'put ''Nzc2NSw1Nzc2Niw1Nzc2Nyw1Nzc2OCw1Nzc2OSw1Nzc3MCw1Nzc3MSw1Nzc3Miw1Nzc3Myw1Nzc3NCw1Nzc3NSw1Nzc3Niw1Nzc3Nyw1Nzc3OCw1Nzc3OSw1Nzc4MCw1Nzc4MSw1Nzc4Miw1Nzc4Myw1Nzc4NCw1Nzc4NSw1Nzc4Niw1Nzc4Nyw1Nzc4OCw1Nzc4OSw1Nzc5MCw1Nzc5MSw1Nzc5''@;'; put 'put ''Miw1Nzc5Myw1Nzc5NCw1Nzc5NSw1Nzc5Niw1Nzc5Nyw1Nzc5OCw1Nzc5OSw1NzgwMCw1NzgwMSw1NzgwMiw1NzgwMyw1NzgwNCw1NzgwNSw1NzgwNiw1NzgwNyw1NzgwOCw1NzgwOSw1NzgxMCw1NzgxMSw1NzgxMiw1NzgxMywzMDA4OCwzMDA4OSwzMDA5MCwzMDA5MiwzMDA5MywzMDA5NCwz''@;'; put 'put ''MDA5NiwzMDA5OSwzMDEwMSwzMDEwNCwzMDEwNywzMDEwOCwzMDExMCwzMDExNCwzMDExOCwzMDExOSwzMDEyMCwzMDEyMSwzMDEyMiwzMDEyNSwzMDEzNCwzMDEzNSwzMDEzOCwzMDEzOSwzMDE0MywzMDE0NCwzMDE0NSwzMDE1MCwzMDE1NSwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2MCwzMDE2''@;'; put 'put ''MSwzMDE2MywzMDE2NywzMDE2OSwzMDE3MCwzMDE3MiwzMDE3MywzMDE3NSwzMDE3NiwzMDE3NywzMDE4MSwzMDE4NSwzMDE4OCwzMDE4OSwzMDE5MCwzMDE5MSwzMDE5NCwzMDE5NSwzMDE5NywzMDE5OCwzMDE5OSwzMDIwMCwzMDIwMiwzMDIwMywzMDIwNSwzMDIwNiwzMDIxMCwzMDIxMiwz''@;'; put 'put ''MDIxNCwzMDIxNSwzMDIxNiwzMDIxNywzMDIxOSwzMDIyMSwzMDIyMiwzMDIyMywzMDIyNSwzMDIyNiwzMDIyNywzMDIyOCwzMDIzMCwzMDIzNCwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MSwzMDI0MywzMDI0NywzMDI0OCwzMDI1MiwzMDI1NCwzMDI1NSwzMDI1NywzMDI1OCwzMDI2MiwzMDI2''@;'; put 'put ''MywzMDI2NSwzMDI2NiwzMDI2NywzMDI2OSwzMDI3MywzMDI3NCwzMDI3Niw1NzgxNCw1NzgxNSw1NzgxNiw1NzgxNyw1NzgxOCw1NzgxOSw1NzgyMCw1NzgyMSw1NzgyMiw1NzgyMyw1NzgyNCw1NzgyNSw1NzgyNiw1NzgyNyw1NzgyOCw1NzgyOSw1NzgzMCw1NzgzMSw1NzgzMiw1NzgzMyw1''@;'; put 'put ''NzgzNCw1NzgzNSw1NzgzNiw1NzgzNyw1NzgzOCw1NzgzOSw1Nzg0MCw1Nzg0MSw1Nzg0Miw1Nzg0Myw1Nzg0NCw1Nzg0NSw1Nzg0Niw1Nzg0Nyw1Nzg0OCw1Nzg0OSw1Nzg1MCw1Nzg1MSw1Nzg1Miw1Nzg1Myw1Nzg1NCw1Nzg1NSw1Nzg1Niw1Nzg1Nyw1Nzg1OCw1Nzg1OSw1Nzg2MCw1Nzg2''@;'; put 'put ''MSw1Nzg2Miw1Nzg2Myw1Nzg2NCw1Nzg2NSw1Nzg2Niw1Nzg2Nyw1Nzg2OCw1Nzg2OSw1Nzg3MCw1Nzg3MSw1Nzg3Miw1Nzg3Myw1Nzg3NCw1Nzg3NSw1Nzg3Niw1Nzg3Nyw1Nzg3OCw1Nzg3OSw1Nzg4MCw1Nzg4MSw1Nzg4Miw1Nzg4Myw1Nzg4NCw1Nzg4NSw1Nzg4Niw1Nzg4Nyw1Nzg4OCw1''@;'; put 'put ''Nzg4OSw1Nzg5MCw1Nzg5MSw1Nzg5Miw1Nzg5Myw1Nzg5NCw1Nzg5NSw1Nzg5Niw1Nzg5Nyw1Nzg5OCw1Nzg5OSw1NzkwMCw1NzkwMSw1NzkwMiw1NzkwMyw1NzkwNCw1NzkwNSw1NzkwNiw1NzkwNywzMDI3NywzMDI3OCwzMDI3OSwzMDI4MCwzMDI4MSwzMDI4MiwzMDI4MywzMDI4NiwzMDI4''@;'; put 'put ''NywzMDI4OCwzMDI4OSwzMDI5MCwzMDI5MSwzMDI5MywzMDI5NSwzMDI5NiwzMDI5NywzMDI5OCwzMDI5OSwzMDMwMSwzMDMwMywzMDMwNCwzMDMwNSwzMDMwNiwzMDMwOCwzMDMwOSwzMDMxMCwzMDMxMSwzMDMxMiwzMDMxMywzMDMxNCwzMDMxNiwzMDMxNywzMDMxOCwzMDMyMCwzMDMyMSwz''@;'; put 'put ''MDMyMiwzMDMyMywzMDMyNCwzMDMyNSwzMDMyNiwzMDMyNywzMDMyOSwzMDMzMCwzMDMzMiwzMDMzNSwzMDMzNiwzMDMzNywzMDMzOSwzMDM0MSwzMDM0NSwzMDM0NiwzMDM0OCwzMDM0OSwzMDM1MSwzMDM1MiwzMDM1NCwzMDM1NiwzMDM1NywzMDM1OSwzMDM2MCwzMDM2MiwzMDM2MywzMDM2''@;'; put 'put ''NCwzMDM2NSwzMDM2NiwzMDM2NywzMDM2OCwzMDM2OSwzMDM3MCwzMDM3MSwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3NywzMDM3OCwzMDM3OSwzMDM4MCwzMDM4MSwzMDM4MywzMDM4NCwzMDM4NywzMDM4OSwzMDM5MCwzMDM5MSwzMDM5MiwzMDM5MywzMDM5NCwzMDM5NSwzMDM5Niwz''@;'; put 'put ''MDM5NywzMDM5OCwzMDQwMCwzMDQwMSwzMDQwMywyMTgzNCwzODQ2MywyMjQ2NywyNTM4NCwyMTcxMCwyMTc2OSwyMTY5NiwzMDM1MywzMDI4NCwzNDEwOCwzMDcwMiwzMzQwNiwzMDg2MSwyOTIzMywzODU1MiwzODc5NywyNzY4OCwyMzQzMywyMDQ3NCwyNTM1MywyNjI2MywyMzczNiwzMzAx''@;'; put 'put ''OCwyNjY5NiwzMjk0MiwyNjExNCwzMDQxNCwyMDk4NSwyNTk0MiwyOTEwMCwzMjc1MywzNDk0OCwyMDY1OCwyMjg4NSwyNTAzNCwyODU5NSwzMzQ1MywyNTQyMCwyNTE3MCwyMTQ4NSwyMTU0MywzMTQ5NCwyMDg0MywzMDExNiwyNDA1MiwyNTMwMCwzNjI5OSwzODc3NCwyNTIyNiwzMjc5Mywy''@;'; put 'put ''MjM2NSwzODcxMiwzMjYxMCwyOTI0MCwzMDMzMywyNjU3NSwzMDMzNCwyNTY3MCwyMDMzNiwzNjEzMywyNTMwOCwzMTI1NSwyNjAwMSwyOTY3NywyNTY0NCwyNTIwMywzMzMyNCwzOTA0MSwyNjQ5NSwyOTI1NiwyNTE5OCwyNTI5MiwyMDI3NiwyOTkyMywyMTMyMiwyMTE1MCwzMjQ1OCwzNzAz''@;'; put 'put ''MCwyNDExMCwyNjc1OCwyNzAzNiwzMzE1MiwzMjQ2NSwyNjgzNCwzMDkxNywzNDQ0NCwzODIyNSwyMDYyMSwzNTg3NiwzMzUwMiwzMjk5MCwyMTI1MywzNTA5MCwyMTA5MywzMDQwNCwzMDQwNywzMDQwOSwzMDQxMSwzMDQxMiwzMDQxOSwzMDQyMSwzMDQyNSwzMDQyNiwzMDQyOCwzMDQyOSwz''@;'; put 'put ''MDQzMCwzMDQzMiwzMDQzMywzMDQzNCwzMDQzNSwzMDQzNiwzMDQzOCwzMDQzOSwzMDQ0MCwzMDQ0MSwzMDQ0MiwzMDQ0MywzMDQ0NCwzMDQ0NSwzMDQ0OCwzMDQ1MSwzMDQ1MywzMDQ1NCwzMDQ1NSwzMDQ1OCwzMDQ1OSwzMDQ2MSwzMDQ2MywzMDQ2NCwzMDQ2NiwzMDQ2NywzMDQ2OSwzMDQ3''@;'; put 'put ''MCwzMDQ3NCwzMDQ3NiwzMDQ3OCwzMDQ3OSwzMDQ4MCwzMDQ4MSwzMDQ4MiwzMDQ4MywzMDQ4NCwzMDQ4NSwzMDQ4NiwzMDQ4NywzMDQ4OCwzMDQ5MSwzMDQ5MiwzMDQ5MywzMDQ5NCwzMDQ5NywzMDQ5OSwzMDUwMCwzMDUwMSwzMDUwMywzMDUwNiwzMDUwNywzMDUwOCwzMDUxMCwzMDUxMiwz''@;'; put 'put ''MDUxMywzMDUxNCwzMDUxNSwzMDUxNiwzMDUyMSwzMDUyMywzMDUyNSwzMDUyNiwzMDUyNywzMDUzMCwzMDUzMiwzMDUzMywzMDUzNCwzMDUzNiwzMDUzNywzMDUzOCwzMDUzOSwzMDU0MCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU0NywzMDU0OCwzMDU0OSwzMDU1MCwzMDU1MSwzMDU1''@;'; put 'put ''MiwzMDU1MywzMDU1NiwzNDE4MCwzODY0OSwyMDQ0NSwyMjU2MSwzOTI4MSwyMzQ1MywyNTI2NSwyNTI1MywyNjI5MiwzNTk2MSw0MDA3NywyOTE5MCwyNjQ3OSwzMDg2NSwyNDc1NCwyMTMyOSwyMTI3MSwzNjc0NCwzMjk3MiwzNjEyNSwzODA0OSwyMDQ5MywyOTM4NCwyMjc5MSwyNDgxMSwy''@;'; put 'put ''ODk1MywzNDk4NywyMjg2OCwzMzUxOSwyNjQxMiwzMTUyOCwyMzg0OSwzMjUwMywyOTk5NywyNzg5MywzNjQ1NCwzNjg1NiwzNjkyNCw0MDc2MywyNzYwNCwzNzE0NSwzMTUwOCwyNDQ0NCwzMDg4NywzNDAwNiwzNDEwOSwyNzYwNSwyNzYwOSwyNzYwNiwyNDA2NSwyNDE5OSwzMDIwMSwzODM4''@;'; put 'put ''MSwyNTk0OSwyNDMzMCwyNDUxNywzNjc2NywyMjcyMSwzMzIxOCwzNjk5MSwzODQ5MSwzODgyOSwzNjc5MywzMjUzNCwzNjE0MCwyNTE1MywyMDQxNSwyMTQ2NCwyMTM0MiwzNjc3NiwzNjc3NywzNjc3OSwzNjk0MSwyNjYzMSwyNDQyNiwzMzE3NiwzNDkyMCw0MDE1MCwyNDk3MSwyMTAzNSwz''@;'; put 'put ''MDI1MCwyNDQyOCwyNTk5NiwyODYyNiwyODM5MiwyMzQ4NiwyNTY3MiwyMDg1MywyMDkxMiwyNjU2NCwxOTk5MywzMTE3NywzOTI5MiwyODg1MSwzMDU1NywzMDU1OCwzMDU1OSwzMDU2MCwzMDU2NCwzMDU2NywzMDU2OSwzMDU3MCwzMDU3MywzMDU3NCwzMDU3NSwzMDU3NiwzMDU3NywzMDU3''@;'; put 'put ''OCwzMDU3OSwzMDU4MCwzMDU4MSwzMDU4MiwzMDU4MywzMDU4NCwzMDU4NiwzMDU4NywzMDU4OCwzMDU5MywzMDU5NCwzMDU5NSwzMDU5OCwzMDU5OSwzMDYwMCwzMDYwMSwzMDYwMiwzMDYwMywzMDYwNywzMDYwOCwzMDYxMSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxNSwzMDYxNiwzMDYxNywz''@;'; put 'put ''MDYxOCwzMDYxOSwzMDYyMCwzMDYyMSwzMDYyMiwzMDYyNSwzMDYyNywzMDYyOCwzMDYzMCwzMDYzMiwzMDYzNSwzMDYzNywzMDYzOCwzMDYzOSwzMDY0MSwzMDY0MiwzMDY0NCwzMDY0NiwzMDY0NywzMDY0OCwzMDY0OSwzMDY1MCwzMDY1MiwzMDY1NCwzMDY1NiwzMDY1NywzMDY1OCwzMDY1''@;'; put 'put ''OSwzMDY2MCwzMDY2MSwzMDY2MiwzMDY2MywzMDY2NCwzMDY2NSwzMDY2NiwzMDY2NywzMDY2OCwzMDY3MCwzMDY3MSwzMDY3MiwzMDY3MywzMDY3NCwzMDY3NSwzMDY3NiwzMDY3NywzMDY3OCwzMDY4MCwzMDY4MSwzMDY4MiwzMDY4NSwzMDY4NiwzMDY4NywzMDY4OCwzMDY4OSwzMDY5Miwz''@;'; put 'put ''MDE0OSwyNDE4MiwyOTYyNywzMzc2MCwyNTc3MywyNTMyMCwzODA2OSwyNzg3NCwyMTMzOCwyMTE4NywyNTYxNSwzODA4MiwzMTYzNiwyMDI3MSwyNDA5MSwzMzMzNCwzMzA0NiwzMzE2MiwyODE5NiwyNzg1MCwzOTUzOSwyNTQyOSwyMTM0MCwyMTc1NCwzNDkxNywyMjQ5NiwxOTk4MSwyNDA2''@;'; put 'put ''NywyNzQ5MywzMTgwNywzNzA5NiwyNDU5OCwyNTgzMCwyOTQ2OCwzNTAwOSwyNjQ0OCwyNTE2NSwzNjEzMCwzMDU3MiwzNjM5MywzNzMxOSwyNDQyNSwzMzc1NiwzNDA4MSwzOTE4NCwyMTQ0MiwzNDQ1MywyNzUzMSwyNDgxMywyNDgwOCwyODc5OSwzMzQ4NSwzMzMyOSwyMDE3OSwyNzgxNSwz''@;'; put 'put ''NDI1NSwyNTgwNSwzMTk2MSwyNzEzMywyNjM2MSwzMzYwOSwyMTM5NywzMTU3NCwyMDM5MSwyMDg3NiwyNzk3OSwyMzYxOCwzNjQ2MSwyNTU1NCwyMTQ0OSwzMzU4MCwzMzU5MCwyNjU5NywzMDkwMCwyNTY2MSwyMzUxOSwyMzcwMCwyNDA0NiwzNTgxNSwyNTI4NiwyNjYxMiwzNTk2MiwyNTYw''@;'; put 'put ''MCwyNTUzMCwzNDYzMywzOTMwNywzNTg2MywzMjU0NCwzODEzMCwyMDEzNSwzODQxNiwzOTA3NiwyNjEyNCwyOTQ2MiwzMDY5NCwzMDY5NiwzMDY5OCwzMDcwMywzMDcwNCwzMDcwNSwzMDcwNiwzMDcwOCwzMDcwOSwzMDcxMSwzMDcxMywzMDcxNCwzMDcxNSwzMDcxNiwzMDcyMywzMDcyNCwz''@;'; put 'put ''MDcyNSwzMDcyNiwzMDcyNywzMDcyOCwzMDczMCwzMDczMSwzMDczNCwzMDczNSwzMDczNiwzMDczOSwzMDc0MSwzMDc0NSwzMDc0NywzMDc1MCwzMDc1MiwzMDc1MywzMDc1NCwzMDc1NiwzMDc2MCwzMDc2MiwzMDc2MywzMDc2NiwzMDc2NywzMDc2OSwzMDc3MCwzMDc3MSwzMDc3MywzMDc3''@;'; put 'put ''NCwzMDc4MSwzMDc4MywzMDc4NSwzMDc4NiwzMDc4NywzMDc4OCwzMDc5MCwzMDc5MiwzMDc5MywzMDc5NCwzMDc5NSwzMDc5NywzMDc5OSwzMDgwMSwzMDgwMywzMDgwNCwzMDgwOCwzMDgwOSwzMDgxMCwzMDgxMSwzMDgxMiwzMDgxNCwzMDgxNSwzMDgxNiwzMDgxNywzMDgxOCwzMDgxOSwz''@;'; put 'put ''MDgyMCwzMDgyMSwzMDgyMiwzMDgyMywzMDgyNCwzMDgyNSwzMDgzMSwzMDgzMiwzMDgzMywzMDgzNCwzMDgzNSwzMDgzNiwzMDgzNywzMDgzOCwzMDg0MCwzMDg0MSwzMDg0MiwzMDg0MywzMDg0NSwzMDg0NiwzMDg0NywzMDg0OCwzMDg0OSwzMDg1MCwzMDg1MSwyMjMzMCwyMzU4MSwyNDEy''@;'; put 'put ''MCwzODI3MSwyMDYwNywzMjkyOCwyMTM3OCwyNTk1MCwzMDAyMSwyMTgwOSwyMDUxMywzNjIyOSwyNTIyMCwzODA0NiwyNjM5NywyMjA2NiwyODUyNiwyNDAzNCwyMTU1NywyODgxOCwzNjcxMCwyNTE5OSwyNTc2NCwyNTUwNywyNDQ0MywyODU1MiwzNzEwOCwzMzI1MSwzNjc4NCwyMzU3Niwy''@;'; put 'put ''NjIxNiwyNDU2MSwyNzc4NSwzODQ3MiwzNjIyNSwzNDkyNCwyNTc0NSwzMTIxNiwyMjQ3OCwyNzIyNSwyNTEwNCwyMTU3NiwyMDA1NiwzMTI0MywyNDgwOSwyODU0OCwzNTgwMiwyNTIxNSwzNjg5NCwzOTU2MywzMTIwNCwyMTUwNywzMDE5NiwyNTM0NSwyMTI3MywyNzc0NCwzNjgzMSwyNDM0''@;'; put 'put ''NywzOTUzNiwzMjgyNyw0MDgzMSwyMDM2MCwyMzYxMCwzNjE5NiwzMjcwOSwyNjAyMSwyODg2MSwyMDgwNSwyMDkxNCwzNDQxMSwyMzgxNSwyMzQ1NiwyNTI3NywzNzIyOCwzMDA2OCwzNjM2NCwzMTI2NCwyNDgzMywzMTYwOSwyMDE2NywzMjUwNCwzMDU5NywxOTk4NSwzMzI2MSwyMTAyMSwy''@;'; put 'put ''MDk4NiwyNzI0OSwyMTQxNiwzNjQ4NywzODE0OCwzODYwNywyODM1MywzODUwMCwyNjk3MCwzMDg1MiwzMDg1MywzMDg1NCwzMDg1NiwzMDg1OCwzMDg1OSwzMDg2MywzMDg2NCwzMDg2NiwzMDg2OCwzMDg2OSwzMDg3MCwzMDg3MywzMDg3NywzMDg3OCwzMDg4MCwzMDg4MiwzMDg4NCwzMDg4''@;'; put 'put ''NiwzMDg4OCwzMDg4OSwzMDg5MCwzMDg5MSwzMDg5MiwzMDg5MywzMDg5NCwzMDg5NSwzMDkwMSwzMDkwMiwzMDkwMywzMDkwNCwzMDkwNiwzMDkwNywzMDkwOCwzMDkwOSwzMDkxMSwzMDkxMiwzMDkxNCwzMDkxNSwzMDkxNiwzMDkxOCwzMDkxOSwzMDkyMCwzMDkyNCwzMDkyNSwzMDkyNiwz''@;'; put 'put ''MDkyNywzMDkyOSwzMDkzMCwzMDkzMSwzMDkzNCwzMDkzNSwzMDkzNiwzMDkzOCwzMDkzOSwzMDk0MCwzMDk0MSwzMDk0MiwzMDk0MywzMDk0NCwzMDk0NSwzMDk0NiwzMDk0NywzMDk0OCwzMDk0OSwzMDk1MCwzMDk1MSwzMDk1MywzMDk1NCwzMDk1NSwzMDk1NywzMDk1OCwzMDk1OSwzMDk2''@;'; put 'put ''MCwzMDk2MSwzMDk2MywzMDk2NSwzMDk2NiwzMDk2OCwzMDk2OSwzMDk3MSwzMDk3MiwzMDk3MywzMDk3NCwzMDk3NSwzMDk3NiwzMDk3OCwzMDk3OSwzMDk4MCwzMDk4MiwzMDk4MywzMDk4NCwzMDk4NSwzMDk4NiwzMDk4NywzMDk4OCwzMDc4NCwyMDY0OCwzMDY3OSwyNTYxNiwzNTMwMiwy''@;'; put 'put ''Mjc4OCwyNTU3MSwyNDAyOSwzMTM1OSwyNjk0MSwyMDI1NiwzMzMzNywyMTkxMiwyMDAxOCwzMDEyNiwzMTM4MywyNDE2MiwyNDIwMiwzODM4MywyMTAxOSwyMTU2MSwyODgxMCwyNTQ2MiwzODE4MCwyMjQwMiwyNjE0OSwyNjk0MywzNzI1NSwyMTc2NywyODE0NywzMjQzMSwzNDg1MCwyNTEz''@;'; put 'put ''OSwzMjQ5NiwzMDEzMywzMzU3NiwzMDkxMywzODYwNCwzNjc2NiwyNDkwNCwyOTk0MywzNTc4OSwyNzQ5MiwyMTA1MCwzNjE3NiwyNzQyNSwzMjg3NCwzMzkwNSwyMjI1NywyMTI1NCwyMDE3NCwxOTk5NSwyMDk0NSwzMTg5NSwzNzI1OSwzMTc1MSwyMDQxOSwzNjQ3OSwzMTcxMywzMTM4OCwy''@;'; put 'put ''NTcwMywyMzgyOCwyMDY1MiwzMzAzMCwzMDIwOSwzMTkyOSwyODE0MCwzMjczNiwyNjQ0OSwyMzM4NCwyMzU0NCwzMDkyMywyNTc3NCwyNTYxOSwyNTUxNCwyNTM4NywzODE2OSwyNTY0NSwzNjc5OCwzMTU3MiwzMDI0OSwyNTE3MSwyMjgyMywyMTU3NCwyNzUxMywyMDY0MywyNTE0MCwyNDEw''@;'; put 'put ''MiwyNzUyNiwyMDE5NSwzNjE1MSwzNDk1NSwyNDQ1MywzNjkxMCwzMDk4OSwzMDk5MCwzMDk5MSwzMDk5MiwzMDk5MywzMDk5NCwzMDk5NiwzMDk5NywzMDk5OCwzMDk5OSwzMWUzLDMxMDAxLDMxMDAyLDMxMDAzLDMxMDA0LDMxMDA1LDMxMDA3LDMxMDA4LDMxMDA5LDMxMDEwLDMxMDExLDMx''@;'; put 'put ''MDEzLDMxMDE0LDMxMDE1LDMxMDE2LDMxMDE3LDMxMDE4LDMxMDE5LDMxMDIwLDMxMDIxLDMxMDIyLDMxMDIzLDMxMDI0LDMxMDI1LDMxMDI2LDMxMDI3LDMxMDI5LDMxMDMwLDMxMDMxLDMxMDMyLDMxMDMzLDMxMDM3LDMxMDM5LDMxMDQyLDMxMDQzLDMxMDQ0LDMxMDQ1LDMxMDQ3LDMxMDUw''@;'; put 'put ''LDMxMDUxLDMxMDUyLDMxMDUzLDMxMDU0LDMxMDU1LDMxMDU2LDMxMDU3LDMxMDU4LDMxMDYwLDMxMDYxLDMxMDY0LDMxMDY1LDMxMDczLDMxMDc1LDMxMDc2LDMxMDc4LDMxMDgxLDMxMDgyLDMxMDgzLDMxMDg0LDMxMDg2LDMxMDg4LDMxMDg5LDMxMDkwLDMxMDkxLDMxMDkyLDMxMDkzLDMx''@;'; put 'put ''MDk0LDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAxLDMxMTAyLDMxMTAzLDMxMTA2LDMxMTA3LDMxMTEwLDMxMTExLDMxMTEyLDMxMTEzLDMxMTE1LDMxMTE2LDMxMTE3LDMxMTE4LDMxMTIwLDMxMTIxLDMxMTIyLDI0NjA4LDMyODI5LDI1Mjg1LDIwMDI1LDIxMzMzLDM3MTEyLDI1NTI4LDMyOTY2''@;'; put 'put ''LDI2MDg2LDI3Njk0LDIwMjk0LDI0ODE0LDI4MTI5LDM1ODA2LDI0Mzc3LDM0NTA3LDI0NDAzLDI1Mzc3LDIwODI2LDMzNjMzLDI2NzIzLDIwOTkyLDI1NDQzLDM2NDI0LDIwNDk4LDIzNzA3LDMxMDk1LDIzNTQ4LDIxMDQwLDMxMjkxLDI0NzY0LDM2OTQ3LDMwNDIzLDI0NTAzLDI0NDcxLDMw''@;'; put 'put ''MzQwLDM2NDYwLDI4NzgzLDMwMzMxLDMxNTYxLDMwNjM0LDIwOTc5LDM3MDExLDIyNTY0LDIwMzAyLDI4NDA0LDM2ODQyLDI1OTMyLDMxNTE1LDI5MzgwLDI4MDY4LDMyNzM1LDIzMjY1LDI1MjY5LDI0MjEzLDIyMzIwLDMzOTIyLDMxNTMyLDI0MDkzLDI0MzUxLDM2ODgyLDMyNTMyLDM5MDcy''@;'; put 'put ''LDI1NDc0LDI4MzU5LDMwODcyLDI4ODU3LDIwODU2LDM4NzQ3LDIyNDQzLDMwMDA1LDIwMjkxLDMwMDA4LDI0MjE1LDI0ODA2LDIyODgwLDI4MDk2LDI3NTgzLDMwODU3LDIxNTAwLDM4NjEzLDIwOTM5LDIwOTkzLDI1NDgxLDIxNTE0LDM4MDM1LDM1ODQzLDM2MzAwLDI5MjQxLDMwODc5LDM0''@;'; put 'put ''Njc4LDM2ODQ1LDM1ODUzLDIxNDcyLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI3LDMxMTI4LDMxMTI5LDMxMTMxLDMxMTMyLDMxMTMzLDMxMTM0LDMxMTM1LDMxMTM2LDMxMTM3LDMxMTM4LDMxMTM5LDMxMTQwLDMxMTQxLDMxMTQyLDMxMTQ0LDMxMTQ1LDMxMTQ2LDMxMTQ3LDMxMTQ4''@;'; put 'put ''LDMxMTQ5LDMxMTUwLDMxMTUxLDMxMTUyLDMxMTUzLDMxMTU0LDMxMTU2LDMxMTU3LDMxMTU4LDMxMTU5LDMxMTYwLDMxMTY0LDMxMTY3LDMxMTcwLDMxMTcyLDMxMTczLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgwLDMxMTgyLDMxMTgzLDMxMTg0LDMxMTg3LDMxMTg4LDMxMTkwLDMxMTkxLDMx''@;'; put 'put ''MTkzLDMxMTk0LDMxMTk1LDMxMTk2LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAxLDMxMjAyLDMxMjA1LDMxMjA4LDMxMjEwLDMxMjEyLDMxMjE0LDMxMjE3LDMxMjE4LDMxMjE5LDMxMjIwLDMxMjIxLDMxMjIyLDMxMjIzLDMxMjI1LDMxMjI2LDMxMjI4LDMxMjMwLDMxMjMxLDMxMjMzLDMxMjM2''@;'; put 'put ''LDMxMjM3LDMxMjM5LDMxMjQwLDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ3LDMxMjQ4LDMxMjQ5LDMxMjUwLDMxMjUxLDMxMjUzLDMxMjU0LDMxMjU2LDMxMjU3LDMxMjU5LDMxMjYwLDE5OTY5LDMwNDQ3LDIxNDg2LDM4MDI1LDM5MDMwLDQwNzE4LDM4MTg5LDIzNDUwLDM1NzQ2LDIwMDAyLDE5''@;'; put 'put ''OTk2LDIwOTA4LDMzODkxLDI1MDI2LDIxMTYwLDI2NjM1LDIwMzc1LDI0NjgzLDIwOTIzLDI3OTM0LDIwODI4LDI1MjM4LDI2MDA3LDM4NDk3LDM1OTEwLDM2ODg3LDMwMTY4LDM3MTE3LDMwNTYzLDI3NjAyLDI5MzIyLDI5NDIwLDM1ODM1LDIyNTgxLDMwNTg1LDM2MTcyLDI2NDYwLDM4MjA4''@;'; put 'put ''LDMyOTIyLDI0MjMwLDI4MTkzLDIyOTMwLDMxNDcxLDMwNzAxLDM4MjAzLDI3NTczLDI2MDI5LDMyNTI2LDIyNTM0LDIwODE3LDM4NDMxLDIzNTQ1LDIyNjk3LDIxNTQ0LDM2NDY2LDI1OTU4LDM5MDM5LDIyMjQ0LDM4MDQ1LDMwNDYyLDM2OTI5LDI1NDc5LDIxNzAyLDIyODEwLDIyODQyLDIy''@;'; put 'put ''NDI3LDM2NTMwLDI2NDIxLDM2MzQ2LDMzMzMzLDIxMDU3LDI0ODE2LDIyNTQ5LDM0NTU4LDIzNzg0LDQwNTE3LDIwNDIwLDM5MDY5LDM1NzY5LDIzMDc3LDI0Njk0LDIxMzgwLDI1MjEyLDM2OTQzLDM3MTIyLDM5Mjk1LDI0NjgxLDMyNzgwLDIwNzk5LDMyODE5LDIzNTcyLDM5Mjg1LDI3OTUz''@;'; put 'put ''LDIwMTA4LDMxMjYxLDMxMjYzLDMxMjY1LDMxMjY2LDMxMjY4LDMxMjY5LDMxMjcwLDMxMjcxLDMxMjcyLDMxMjczLDMxMjc0LDMxMjc1LDMxMjc2LDMxMjc3LDMxMjc4LDMxMjc5LDMxMjgwLDMxMjgxLDMxMjgyLDMxMjg0LDMxMjg1LDMxMjg2LDMxMjg4LDMxMjkwLDMxMjk0LDMxMjk2LDMx''@;'; put 'put ''Mjk3LDMxMjk4LDMxMjk5LDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA1LDMxMzA2LDMxMzA3LDMxMzA4LDMxMzA5LDMxMzEwLDMxMzExLDMxMzEyLDMxMzE0LDMxMzE1LDMxMzE2LDMxMzE3LDMxMzE4LDMxMzIwLDMxMzIxLDMxMzIyLDMxMzIzLDMxMzI0LDMxMzI1LDMxMzI2LDMxMzI3''@;'; put 'put ''LDMxMzI4LDMxMzI5LDMxMzMwLDMxMzMxLDMxMzMyLDMxMzMzLDMxMzM0LDMxMzM1LDMxMzM2LDMxMzM3LDMxMzM4LDMxMzM5LDMxMzQwLDMxMzQxLDMxMzQyLDMxMzQzLDMxMzQ1LDMxMzQ2LDMxMzQ3LDMxMzQ5LDMxMzU1LDMxMzU2LDMxMzU3LDMxMzU4LDMxMzYyLDMxMzY1LDMxMzY3LDMx''@;'; put 'put ''MzY5LDMxMzcwLDMxMzcxLDMxMzcyLDMxMzc0LDMxMzc1LDMxMzc2LDMxMzc5LDMxMzgwLDMxMzg1LDMxMzg2LDMxMzg3LDMxMzkwLDMxMzkzLDMxMzk0LDM2MTQ0LDIxNDU3LDMyNjAyLDMxNTY3LDIwMjQwLDIwMDQ3LDM4NDAwLDI3ODYxLDI5NjQ4LDM0MjgxLDI0MDcwLDMwMDU4LDMyNzYz''@;'; put 'put ''LDI3MTQ2LDMwNzE4LDM4MDM0LDMyMzIxLDIwOTYxLDI4OTAyLDIxNDUzLDM2ODIwLDMzNTM5LDM2MTM3LDI5MzU5LDM5Mjc3LDI3ODY3LDIyMzQ2LDMzNDU5LDI2MDQxLDMyOTM4LDI1MTUxLDM4NDUwLDIyOTUyLDIwMjIzLDM1Nzc1LDMyNDQyLDI1OTE4LDMzNzc4LDM4NzUwLDIxODU3LDM5''@;'; put 'put ''MTM0LDMyOTMzLDIxMjkwLDM1ODM3LDIxNTM2LDMyOTU0LDI0MjIzLDI3ODMyLDM2MTUzLDMzNDUyLDM3MjEwLDIxNTQ1LDI3Njc1LDIwOTk4LDMyNDM5LDIyMzY3LDI4OTU0LDI3Nzc0LDMxODgxLDIyODU5LDIwMjIxLDI0NTc1LDI0ODY4LDMxOTE0LDIwMDE2LDIzNTUzLDI2NTM5LDM0NTYy''@;'; put 'put ''LDIzNzkyLDM4MTU1LDM5MTE4LDMwMTI3LDI4OTI1LDM2ODk4LDIwOTExLDMyNTQxLDM1NzczLDIyODU3LDIwOTY0LDIwMzE1LDIxNTQyLDIyODI3LDI1OTc1LDMyOTMyLDIzNDEzLDI1MjA2LDI1MjgyLDM2NzUyLDI0MTMzLDI3Njc5LDMxNTI2LDIwMjM5LDIwNDQwLDI2MzgxLDMxMzk1LDMx''@;'; put 'put ''Mzk2LDMxMzk5LDMxNDAxLDMxNDAyLDMxNDAzLDMxNDA2LDMxNDA3LDMxNDA4LDMxNDA5LDMxNDEwLDMxNDEyLDMxNDEzLDMxNDE0LDMxNDE1LDMxNDE2LDMxNDE3LDMxNDE4LDMxNDE5LDMxNDIwLDMxNDIxLDMxNDIyLDMxNDI0LDMxNDI1LDMxNDI2LDMxNDI3LDMxNDI4LDMxNDI5LDMxNDMw''@;'; put 'put ''LDMxNDMxLDMxNDMyLDMxNDMzLDMxNDM0LDMxNDM2LDMxNDM3LDMxNDM4LDMxNDM5LDMxNDQwLDMxNDQxLDMxNDQyLDMxNDQzLDMxNDQ0LDMxNDQ1LDMxNDQ3LDMxNDQ4LDMxNDUwLDMxNDUxLDMxNDUyLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYwLDMxNDYzLDMxNDY0LDMxNDY1LDMxNDY2LDMx''@;'; put 'put ''NDY3LDMxNDY4LDMxNDcwLDMxNDcyLDMxNDczLDMxNDc0LDMxNDc1LDMxNDc2LDMxNDc3LDMxNDc4LDMxNDc5LDMxNDgwLDMxNDgzLDMxNDg0LDMxNDg2LDMxNDg4LDMxNDg5LDMxNDkwLDMxNDkzLDMxNDk1LDMxNDk3LDMxNTAwLDMxNTAxLDMxNTAyLDMxNTA0LDMxNTA2LDMxNTA3LDMxNTEw''@;'; put 'put ''LDMxNTExLDMxNTEyLDMxNTE0LDMxNTE2LDMxNTE3LDMxNTE5LDMxNTIxLDMxNTIyLDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMzLDI4MDE0LDI4MDc0LDMxMTE5LDM0OTkzLDI0MzQzLDI5OTk1LDI1MjQyLDM2NzQxLDIwNDYzLDM3MzQwLDI2MDIzLDMzMDcxLDMzMTA1LDI0MjIwLDMzMTA0LDM2''@;'; put 'put ''MjEyLDIxMTAzLDM1MjA2LDM2MTcxLDIyNzk3LDIwNjEzLDIwMTg0LDM4NDI4LDI5MjM4LDMzMTQ1LDM2MTI3LDIzNTAwLDM1NzQ3LDM4NDY4LDIyOTE5LDMyNTM4LDIxNjQ4LDIyMTM0LDIyMDMwLDM1ODEzLDI1OTEzLDI3MDEwLDM4MDQxLDMwNDIyLDI4Mjk3LDI0MTc4LDI5OTc2LDI2NDM4''@;'; put 'put ''LDI2NTc3LDMxNDg3LDMyOTI1LDM2MjE0LDI0ODYzLDMxMTc0LDI1OTU0LDM2MTk1LDIwODcyLDIxMDE4LDM4MDUwLDMyNTY4LDMyOTIzLDMyNDM0LDIzNzAzLDI4MjA3LDI2NDY0LDMxNzA1LDMwMzQ3LDM5NjQwLDMzMTY3LDMyNjYwLDMxOTU3LDI1NjMwLDM4MjI0LDMxMjk1LDIxNTc4LDIx''@;'; put 'put ''NzMzLDI3NDY4LDI1NjAxLDI1MDk2LDQwNTA5LDMzMDExLDMwMTA1LDIxMTA2LDM4NzYxLDMzODgzLDI2Njg0LDM0NTMyLDM4NDAxLDM4NTQ4LDM4MTI0LDIwMDEwLDIxNTA4LDMyNDczLDI2NjgxLDM2MzE5LDMyNzg5LDI2MzU2LDI0MjE4LDMyNjk3LDMxNTM1LDMxNTM2LDMxNTM4LDMxNTQw''@;'; put 'put ''LDMxNTQxLDMxNTQyLDMxNTQzLDMxNTQ1LDMxNTQ3LDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU0LDMxNTU1LDMxNTU2LDMxNTU4LDMxNTYwLDMxNTYyLDMxNTY1LDMxNTY2LDMxNTcxLDMxNTczLDMxNTc1LDMxNTc3LDMxNTgwLDMxNTgyLDMxNTgzLDMxNTg1LDMxNTg3LDMxNTg4LDMx''@;'; put 'put ''NTg5LDMxNTkwLDMxNTkxLDMxNTkyLDMxNTkzLDMxNTk0LDMxNTk1LDMxNTk2LDMxNTk3LDMxNTk5LDMxNjAwLDMxNjAzLDMxNjA0LDMxNjA2LDMxNjA4LDMxNjEwLDMxNjEyLDMxNjEzLDMxNjE1LDMxNjE3LDMxNjE4LDMxNjE5LDMxNjIwLDMxNjIyLDMxNjIzLDMxNjI0LDMxNjI1LDMxNjI2''@;'; put 'put ''LDMxNjI3LDMxNjI4LDMxNjMwLDMxNjMxLDMxNjMzLDMxNjM0LDMxNjM1LDMxNjM4LDMxNjQwLDMxNjQxLDMxNjQyLDMxNjQzLDMxNjQ2LDMxNjQ3LDMxNjQ4LDMxNjUxLDMxNjUyLDMxNjUzLDMxNjYyLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY3LDMxNjY5LDMxNjcwLDMxNjcxLDMxNjczLDMx''@;'; put 'put ''Njc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjc4LDMxNjc5LDMxNjgwLDMxNjgyLDMxNjgzLDMxNjg0LDIyNDY2LDMyODMxLDI2Nzc1LDI0MDM3LDI1OTE1LDIxMTUxLDI0Njg1LDQwODU4LDIwMzc5LDM2NTI0LDIwODQ0LDIzNDY3LDI0MzM5LDI0MDQxLDI3NzQyLDI1MzI5LDM2MTI5LDIwODQ5''@;'; put 'put ''LDM4MDU3LDIxMjQ2LDI3ODA3LDMzNTAzLDI5Mzk5LDIyNDM0LDI2NTAwLDM2MTQxLDIyODE1LDM2NzY0LDMzNzM1LDIxNjUzLDMxNjI5LDIwMjcyLDI3ODM3LDIzMzk2LDIyOTkzLDQwNzIzLDIxNDc2LDM0NTA2LDM5NTkyLDM1ODk1LDMyOTI5LDI1OTI1LDM5MDM4LDIyMjY2LDM4NTk5LDIx''@;'; put 'put ''MDM4LDI5OTE2LDIxMDcyLDIzNTIxLDI1MzQ2LDM1MDc0LDIwMDU0LDI1Mjk2LDI0NjE4LDI2ODc0LDIwODUxLDIzNDQ4LDIwODk2LDM1MjY2LDMxNjQ5LDM5MzAyLDMyNTkyLDI0ODE1LDI4NzQ4LDM2MTQzLDIwODA5LDI0MTkxLDM2ODkxLDI5ODA4LDM1MjY4LDIyMzE3LDMwNzg5LDI0NDAy''@;'; put 'put ''LDQwODYzLDM4Mzk0LDM2NzEyLDM5NzQwLDM1ODA5LDMwMzI4LDI2NjkwLDI2NTg4LDM2MzMwLDM2MTQ5LDIxMDUzLDM2NzQ2LDI4Mzc4LDI2ODI5LDM4MTQ5LDM3MTAxLDIyMjY5LDI2NTI0LDM1MDY1LDM2ODA3LDIxNzA0LDMxNjg1LDMxNjg4LDMxNjg5LDMxNjkwLDMxNjkxLDMxNjkzLDMx''@;'; put 'put ''Njk0LDMxNjk1LDMxNjk2LDMxNjk4LDMxNzAwLDMxNzAxLDMxNzAyLDMxNzAzLDMxNzA0LDMxNzA3LDMxNzA4LDMxNzEwLDMxNzExLDMxNzEyLDMxNzE0LDMxNzE1LDMxNzE2LDMxNzE5LDMxNzIwLDMxNzIxLDMxNzIzLDMxNzI0LDMxNzI1LDMxNzI3LDMxNzI4LDMxNzMwLDMxNzMxLDMxNzMy''@;'; put 'put ''LDMxNzMzLDMxNzM0LDMxNzM2LDMxNzM3LDMxNzM4LDMxNzM5LDMxNzQxLDMxNzQzLDMxNzQ0LDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzQ5LDMxNzUwLDMxNzUyLDMxNzUzLDMxNzU0LDMxNzU3LDMxNzU4LDMxNzYwLDMxNzYxLDMxNzYyLDMxNzYzLDMxNzY0LDMxNzY1LDMxNzY3LDMx''@;'; put 'put ''NzY4LDMxNzY5LDMxNzcwLDMxNzcxLDMxNzcyLDMxNzczLDMxNzc0LDMxNzc2LDMxNzc3LDMxNzc4LDMxNzc5LDMxNzgwLDMxNzgxLDMxNzg0LDMxNzg1LDMxNzg3LDMxNzg4LDMxNzg5LDMxNzkwLDMxNzkxLDMxNzkyLDMxNzkzLDMxNzk0LDMxNzk1LDMxNzk2LDMxNzk3LDMxNzk4LDMxNzk5''@;'; put 'put ''LDMxODAxLDMxODAyLDMxODAzLDMxODA0LDMxODA1LDMxODA2LDMxODEwLDM5NjA4LDIzNDAxLDI4MDIzLDI3Njg2LDIwMTMzLDIzNDc1LDM5NTU5LDM3MjE5LDI1ZTMsMzcwMzksMzg4ODksMjE1NDcsMjgwODUsMjM1MDYsMjA5ODksMjE4OTgsMzI1OTcsMzI3NTIsMjU3ODgsMjU0MjEsMjYw''@;'; put 'put ''OTcsMjUwMjIsMjQ3MTcsMjg5MzgsMjc3MzUsMjc3MjEsMjI4MzEsMjY0NzcsMzMzMjIsMjI3NDEsMjIxNTgsMzU5NDYsMjc2MjcsMzcwODUsMjI5MDksMzI3OTEsMjE0OTUsMjgwMDksMjE2MjEsMjE5MTcsMzM2NTUsMzM3NDMsMjY2ODAsMzExNjYsMjE2NDQsMjAzMDksMjE1MTIsMzA0MTgs''@;'; put 'put ''MzU5NzcsMzg0MDIsMjc4MjcsMjgwODgsMzYyMDMsMzUwODgsNDA1NDgsMzYxNTQsMjIwNzksNDA2NTcsMzAxNjUsMjQ0NTYsMjk0MDgsMjQ2ODAsMjE3NTYsMjAxMzYsMjcxNzgsMzQ5MTMsMjQ2NTgsMzY3MjAsMjE3MDAsMjg4ODgsMzQ0MjUsNDA1MTEsMjc5NDYsMjM0MzksMjQzNDQsMzI0''@;'; put 'put ''MTgsMjE4OTcsMjAzOTksMjk0OTIsMjE1NjQsMjE0MDIsMjA1MDUsMjE1MTgsMjE2MjgsMjAwNDYsMjQ1NzMsMjk3ODYsMjI3NzQsMzM4OTksMzI5OTMsMzQ2NzYsMjkzOTIsMzE5NDYsMjgyNDYsMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcsMzE4MTgsMzE4MTks''@;'; put 'put ''MzE4MjAsMzE4MjIsMzE4MjMsMzE4MjQsMzE4MjUsMzE4MjYsMzE4MjcsMzE4MjgsMzE4MjksMzE4MzAsMzE4MzEsMzE4MzIsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4MzksMzE4NDAsMzE4NDEsMzE4NDIsMzE4NDMsMzE4NDQsMzE4NDUsMzE4NDYsMzE4NDcsMzE4''@;'; put 'put ''NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4NTQsMzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsMzE4NjEsMzE4NjIsMzE4NjMsMzE4NjQsMzE4NjUsMzE4NjYsMzE4NzAsMzE4NzEsMzE4NzIsMzE4NzMsMzE4NzQsMzE4NzUsMzE4NzYsMzE4NzcsMzE4NzgsMzE4NzksMzE4ODAs''@;'; put 'put ''MzE4ODIsMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcsMzE4ODgsMzE4OTEsMzE4OTIsMzE4OTQsMzE4OTcsMzE4OTgsMzE4OTksMzE5MDQsMzE5MDUsMzE5MDcsMzE5MTAsMzE5MTEsMzE5MTIsMzE5MTMsMzE5MTUsMzE5MTYsMzE5MTcsMzE5MTksMzE5MjAsMzE5MjQsMzE5MjUsMzE5''@;'; put 'put ''MjYsMzE5MjcsMzE5MjgsMzE5MzAsMzE5MzEsMjQzNTksMzQzODIsMjE4MDQsMjUyNTIsMjAxMTQsMjc4MTgsMjUxNDMsMzM0NTcsMjE3MTksMjEzMjYsMjk1MDIsMjgzNjksMzAwMTEsMjEwMTAsMjEyNzAsMzU4MDUsMjcwODgsMjQ0NTgsMjQ1NzYsMjgxNDIsMjIzNTEsMjc0MjYsMjk2MTUs''@;'; put 'put ''MjY3MDcsMzY4MjQsMzI1MzEsMjU0NDIsMjQ3MzksMjE3OTYsMzAxODYsMzU5MzgsMjg5NDksMjgwNjcsMjM0NjIsMjQxODcsMzM2MTgsMjQ5MDgsNDA2NDQsMzA5NzAsMzQ2NDcsMzE3ODMsMzAzNDMsMjA5NzYsMjQ4MjIsMjkwMDQsMjYxNzksMjQxNDAsMjQ2NTMsMzU4NTQsMjg3ODQsMjUz''@;'; put 'put ''ODEsMzY3NDUsMjQ1MDksMjQ2NzQsMzQ1MTYsMjIyMzgsMjc1ODUsMjQ3MjQsMjQ5MzUsMjEzMjEsMjQ4MDAsMjYyMTQsMzYxNTksMzEyMjksMjAyNTAsMjg5MDUsMjc3MTksMzU3NjMsMzU4MjYsMzI0NzIsMzM2MzYsMjYxMjcsMjMxMzAsMzk3NDYsMjc5ODUsMjgxNTEsMzU5MDUsMjc5NjMs''@;'; put 'put ''MjAyNDksMjg3NzksMzM3MTksMjUxMTAsMjQ3ODUsMzg2NjksMzYxMzUsMzEwOTYsMjA5ODcsMjIzMzQsMjI1MjIsMjY0MjYsMzAwNzIsMzEyOTMsMzEyMTUsMzE2MzcsMzE5MzUsMzE5MzYsMzE5MzgsMzE5MzksMzE5NDAsMzE5NDIsMzE5NDUsMzE5NDcsMzE5NTAsMzE5NTEsMzE5NTIsMzE5''@;'; put 'put ''NTMsMzE5NTQsMzE5NTUsMzE5NTYsMzE5NjAsMzE5NjIsMzE5NjMsMzE5NjUsMzE5NjYsMzE5NjksMzE5NzAsMzE5NzEsMzE5NzIsMzE5NzMsMzE5NzQsMzE5NzUsMzE5NzcsMzE5NzgsMzE5NzksMzE5ODAsMzE5ODEsMzE5ODIsMzE5ODQsMzE5ODUsMzE5ODYsMzE5ODcsMzE5ODgsMzE5ODks''@;'; put 'put ''MzE5OTAsMzE5OTEsMzE5OTMsMzE5OTQsMzE5OTYsMzE5OTcsMzE5OTgsMzE5OTksMzJlMywzMjAwMSwzMjAwMiwzMjAwMywzMjAwNCwzMjAwNSwzMjAwNiwzMjAwNywzMjAwOCwzMjAwOSwzMjAxMSwzMjAxMiwzMjAxMywzMjAxNCwzMjAxNSwzMjAxNiwzMjAxNywzMjAxOCwzMjAxOSwzMjAy''@;'; put 'put ''MCwzMjAyMSwzMjAyMiwzMjAyMywzMjAyNCwzMjAyNSwzMjAyNiwzMjAyNywzMjAyOCwzMjAyOSwzMjAzMCwzMjAzMSwzMjAzMywzMjAzNSwzMjAzNiwzMjAzNywzMjAzOCwzMjA0MCwzMjA0MSwzMjA0MiwzMjA0NCwzMjA0NSwzMjA0NiwzMjA0OCwzMjA0OSwzMjA1MCwzMjA1MSwzMjA1Miwz''@;'; put 'put ''MjA1MywzMjA1NCwzMjkwOCwzOTI2OSwzNjg1NywyODYwOCwzNTc0OSw0MDQ4MSwyMzAyMCwzMjQ4OSwzMjUyMSwyMTUxMywyNjQ5NywyNjg0MCwzNjc1MywzMTgyMSwzODU5OCwyMTQ1MCwyNDYxMywzMDE0MiwyNzc2MiwyMTM2MywyMzI0MSwzMjQyMywyNTM4MCwyMDk2MCwzMzAzNCwyNDA0''@;'; put 'put ''OSwzNDAxNSwyNTIxNiwyMDg2NCwyMzM5NSwyMDIzOCwzMTA4NSwyMTA1OCwyNDc2MCwyNzk4MiwyMzQ5MiwyMzQ5MCwzNTc0NSwzNTc2MCwyNjA4MiwyNDUyNCwzODQ2OSwyMjkzMSwzMjQ4NywzMjQyNiwyMjAyNSwyNjU1MSwyMjg0MSwyMDMzOSwyMzQ3OCwyMTE1MiwzMzYyNiwzOTA1MCwz''@;'; put 'put ''NjE1OCwzMDAwMiwzODA3OCwyMDU1MSwzMTI5MiwyMDIxNSwyNjU1MCwzOTU1MCwyMzIzMywyNzUxNiwzMDQxNywyMjM2MiwyMzU3NCwzMTU0NiwzODM4OCwyOTAwNiwyMDg2MCwzMjkzNywzMzM5MiwyMjkwNCwzMjUxNiwzMzU3NSwyNjgxNiwyNjYwNCwzMDg5NywzMDgzOSwyNTMxNSwyNTQ0''@;'; put 'put ''MSwzMTYxNiwyMDQ2MSwyMTA5OCwyMDk0MywzMzYxNiwyNzA5OSwzNzQ5MiwzNjM0MSwzNjE0NSwzNTI2NSwzODE5MCwzMTY2MSwyMDIxNCwzMjA1NSwzMjA1NiwzMjA1NywzMjA1OCwzMjA1OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2MywzMjA2NCwzMjA2NSwzMjA2NiwzMjA2NywzMjA2OCwz''@;'; put 'put ''MjA2OSwzMjA3MCwzMjA3MSwzMjA3MiwzMjA3MywzMjA3NCwzMjA3NSwzMjA3NiwzMjA3NywzMjA3OCwzMjA3OSwzMjA4MCwzMjA4MSwzMjA4MiwzMjA4MywzMjA4NCwzMjA4NSwzMjA4NiwzMjA4NywzMjA4OCwzMjA4OSwzMjA5MCwzMjA5MSwzMjA5MiwzMjA5MywzMjA5NCwzMjA5NSwzMjA5''@;'; put 'put ''NiwzMjA5NywzMjA5OCwzMjA5OSwzMjEwMCwzMjEwMSwzMjEwMiwzMjEwMywzMjEwNCwzMjEwNSwzMjEwNiwzMjEwNywzMjEwOCwzMjEwOSwzMjExMSwzMjExMiwzMjExMywzMjExNCwzMjExNSwzMjExNiwzMjExNywzMjExOCwzMjEyMCwzMjEyMSwzMjEyMiwzMjEyMywzMjEyNCwzMjEyNSwz''@;'; put 'put ''MjEyNiwzMjEyNywzMjEyOCwzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMiwzMjEzMywzMjEzNCwzMjEzNSwzMjEzNiwzMjEzNywzMjEzOCwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0MiwzMjE0MywzMjE0NCwzMjE0NSwzMjE0NiwzMjE0NywzMjE0OCwzMjE0OSwzMjE1MCwzMjE1MSwzMjE1MiwyMDU4''@;'; put 'put ''MSwzMzMyOCwyMTA3MywzOTI3OSwyODE3NiwyODI5MywyODA3MSwyNDMxNCwyMDcyNSwyMzAwNCwyMzU1OCwyNzk3NCwyNzc0MywzMDA4NiwzMzkzMSwyNjcyOCwyMjg3MCwzNTc2MiwyMTI4MCwzNzIzMywzODQ3NywzNDEyMSwyNjg5OCwzMDk3NywyODk2NiwzMzAxNCwyMDEzMiwzNzA2Niwy''@;'; put 'put ''Nzk3NSwzOTU1NiwyMzA0NywyMjIwNCwyNTYwNSwzODEyOCwzMDY5OSwyMDM4OSwzMzA1MCwyOTQwOSwzNTI4MiwzOTI5MCwzMjU2NCwzMjQ3OCwyMTExOSwyNTk0NSwzNzIzNywzNjczNSwzNjczOSwyMTQ4MywzMTM4MiwyNTU4MSwyNTUwOSwzMDM0MiwzMTIyNCwzNDkwMywzODQ1NCwyNTEz''@;'; put 'put ''MCwyMTE2MywzMzQxMCwyNjcwOCwyNjQ4MCwyNTQ2MywzMDU3MSwzMTQ2OSwyNzkwNSwzMjQ2NywzNTI5OSwyMjk5MiwyNTEwNiwzNDI0OSwzMzQ0NSwzMDAyOCwyMDUxMSwyMDE3MSwzMDExNywzNTgxOSwyMzYyNiwyNDA2MiwzMTU2MywyNjAyMCwzNzMyOSwyMDE3MCwyNzk0MSwzNTE2Nywz''@;'; put 'put ''MjAzOSwzODE4MiwyMDE2NSwzNTg4MCwzNjgyNywzODc3MSwyNjE4NywzMTEwNSwzNjgxNywyODkwOCwyODAyNCwzMjE1MywzMjE1NCwzMjE1NSwzMjE1NiwzMjE1NywzMjE1OCwzMjE1OSwzMjE2MCwzMjE2MSwzMjE2MiwzMjE2MywzMjE2NCwzMjE2NSwzMjE2NywzMjE2OCwzMjE2OSwzMjE3''@;'; put 'put ''MCwzMjE3MSwzMjE3MiwzMjE3MywzMjE3NSwzMjE3NiwzMjE3NywzMjE3OCwzMjE3OSwzMjE4MCwzMjE4MSwzMjE4MiwzMjE4MywzMjE4NCwzMjE4NSwzMjE4NiwzMjE4NywzMjE4OCwzMjE4OSwzMjE5MCwzMjE5MSwzMjE5MiwzMjE5MywzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwz''@;'; put 'put ''MjE5OSwzMjIwMCwzMjIwMSwzMjIwMiwzMjIwMywzMjIwNCwzMjIwNSwzMjIwNiwzMjIwNywzMjIwOCwzMjIwOSwzMjIxMCwzMjIxMSwzMjIxMiwzMjIxMywzMjIxNCwzMjIxNSwzMjIxNiwzMjIxNywzMjIxOCwzMjIxOSwzMjIyMCwzMjIyMSwzMjIyMiwzMjIyMywzMjIyNCwzMjIyNSwzMjIy''@;'; put 'put ''NiwzMjIyNywzMjIyOCwzMjIyOSwzMjIzMCwzMjIzMSwzMjIzMiwzMjIzMywzMjIzNCwzMjIzNSwzMjIzNiwzMjIzNywzMjIzOCwzMjIzOSwzMjI0MCwzMjI0MSwzMjI0MiwzMjI0MywzMjI0NCwzMjI0NSwzMjI0NiwzMjI0NywzMjI0OCwzMjI0OSwzMjI1MCwyMzYxMywyMTE3MCwzMzYwNiwy''@;'; put 'put ''MDgzNCwzMzU1MCwzMDU1NSwyNjIzMCw0MDEyMCwyMDE0MCwyNDc3OCwzMTkzNCwzMTkyMywzMjQ2MywyMDExNywzNTY4NiwyNjIyMywzOTA0OCwzODc0NSwyMjY1OSwyNTk2NCwzODIzNiwyNDQ1MiwzMDE1MywzODc0MiwzMTQ1NSwzMTQ1NCwyMDkyOCwyODg0NywzMTM4NCwyNTU3OCwzMTM1''@;'; put 'put ''MCwzMjQxNiwyOTU5MCwzODg5MywyMDAzNywyODc5MiwyMDA2MSwzNzIwMiwyMTQxNywyNTkzNywyNjA4NywzMzI3NiwzMzI4NSwyMTY0NiwyMzYwMSwzMDEwNiwzODgxNiwyNTMwNCwyOTQwMSwzMDE0MSwyMzYyMSwzOTU0NSwzMzczOCwyMzYxNiwyMTYzMiwzMDY5NywyMDAzMCwyNzgyMiwz''@;'; put 'put ''Mjg1OCwyNTI5OCwyNTQ1NCwyNDA0MCwyMDg1NSwzNjMxNywzNjM4MiwzODE5MSwyMDQ2NSwyMTQ3NywyNDgwNywyODg0NCwyMTA5NSwyNTQyNCw0MDUxNSwyMzA3MSwyMDUxOCwzMDUxOSwyMTM2NywzMjQ4MiwyNTczMywyNTg5OSwyNTIyNSwyNTQ5NiwyMDUwMCwyOTIzNywzNTI3MywyMDkx''@;'; put 'put ''NSwzNTc3NiwzMjQ3NywyMjM0MywzMzc0MCwzODA1NSwyMDg5MSwyMTUzMSwyMzgwMywzMjI1MSwzMjI1MiwzMjI1MywzMjI1NCwzMjI1NSwzMjI1NiwzMjI1NywzMjI1OCwzMjI1OSwzMjI2MCwzMjI2MSwzMjI2MiwzMjI2MywzMjI2NCwzMjI2NSwzMjI2NiwzMjI2NywzMjI2OCwzMjI2OSwz''@;'; put 'put ''MjI3MCwzMjI3MSwzMjI3MiwzMjI3MywzMjI3NCwzMjI3NSwzMjI3NiwzMjI3NywzMjI3OCwzMjI3OSwzMjI4MCwzMjI4MSwzMjI4MiwzMjI4MywzMjI4NCwzMjI4NSwzMjI4NiwzMjI4NywzMjI4OCwzMjI4OSwzMjI5MCwzMjI5MSwzMjI5MiwzMjI5MywzMjI5NCwzMjI5NSwzMjI5NiwzMjI5''@;'; put 'put ''NywzMjI5OCwzMjI5OSwzMjMwMCwzMjMwMSwzMjMwMiwzMjMwMywzMjMwNCwzMjMwNSwzMjMwNiwzMjMwNywzMjMwOCwzMjMwOSwzMjMxMCwzMjMxMSwzMjMxMiwzMjMxMywzMjMxNCwzMjMxNiwzMjMxNywzMjMxOCwzMjMxOSwzMjMyMCwzMjMyMiwzMjMyMywzMjMyNCwzMjMyNSwzMjMyNiwz''@;'; put 'put ''MjMyOCwzMjMyOSwzMjMzMCwzMjMzMSwzMjMzMiwzMjMzMywzMjMzNCwzMjMzNSwzMjMzNiwzMjMzNywzMjMzOCwzMjMzOSwzMjM0MCwzMjM0MSwzMjM0MiwzMjM0MywzMjM0NCwzMjM0NSwzMjM0NiwzMjM0NywzMjM0OCwzMjM0OSwyMDQyNiwzMTQ1OSwyNzk5NCwzNzA4OSwzOTU2NywyMTg4''@;'; put 'put ''OCwyMTY1NCwyMTM0NSwyMTY3OSwyNDMyMCwyNTU3NywyNjk5OSwyMDk3NSwyNDkzNiwyMTAwMiwyMjU3MCwyMTIwOCwyMjM1MCwzMDczMywzMDQ3NSwyNDI0NywyNDk1MSwzMTk2OCwyNTE3OSwyNTIzOSwyMDEzMCwyODgyMSwzMjc3MSwyNTMzNSwyODkwMCwzODc1MiwyMjM5MSwzMzQ5OSwy''@;'; put 'put ''NjYwNywyNjg2OSwzMDkzMywzOTA2MywzMTE4NSwyMjc3MSwyMTY4MywyMTQ4NywyODIxMiwyMDgxMSwyMTA1MSwyMzQ1OCwzNTgzOCwzMjk0MywyMTgyNywyMjQzOCwyNDY5MSwyMjM1MywyMTU0OSwzMTM1NCwyNDY1NiwyMzM4MCwyNTUxMSwyNTI0OCwyMTQ3NSwyNTE4NywyMzQ5NSwyNjU0''@;'; put 'put ''MywyMTc0MSwzMTM5MSwzMzUxMCwzNzIzOSwyNDIxMSwzNTA0NCwyMjg0MCwyMjQ0NiwyNTM1OCwzNjMyOCwzMzAwNywyMjM1OSwzMTYwNywyMDM5MywyNDU1NSwyMzQ4NSwyNzQ1NCwyMTI4MSwzMTU2OCwyOTM3OCwyNjY5NCwzMDcxOSwzMDUxOCwyNjEwMywyMDkxNywyMDExMSwzMDQyMCwy''@;'; put 'put ''Mzc0MywzMTM5NywzMzkwOSwyMjg2MiwzOTc0NSwyMDYwOCwzMjM1MCwzMjM1MSwzMjM1MiwzMjM1MywzMjM1NCwzMjM1NSwzMjM1NiwzMjM1NywzMjM1OCwzMjM1OSwzMjM2MCwzMjM2MSwzMjM2MiwzMjM2MywzMjM2NCwzMjM2NSwzMjM2NiwzMjM2NywzMjM2OCwzMjM2OSwzMjM3MCwzMjM3''@;'; put 'put ''MSwzMjM3MiwzMjM3MywzMjM3NCwzMjM3NSwzMjM3NiwzMjM3NywzMjM3OCwzMjM3OSwzMjM4MCwzMjM4MSwzMjM4MiwzMjM4MywzMjM4NCwzMjM4NSwzMjM4NywzMjM4OCwzMjM4OSwzMjM5MCwzMjM5MSwzMjM5MiwzMjM5MywzMjM5NCwzMjM5NSwzMjM5NiwzMjM5NywzMjM5OCwzMjM5OSwz''@;'; put 'put ''MjQwMCwzMjQwMSwzMjQwMiwzMjQwMywzMjQwNCwzMjQwNSwzMjQwNiwzMjQwNywzMjQwOCwzMjQwOSwzMjQxMCwzMjQxMiwzMjQxMywzMjQxNCwzMjQzMCwzMjQzNiwzMjQ0MywzMjQ0NCwzMjQ3MCwzMjQ4NCwzMjQ5MiwzMjUwNSwzMjUyMiwzMjUyOCwzMjU0MiwzMjU2NywzMjU2OSwzMjU3''@;'; put 'put ''MSwzMjU3MiwzMjU3MywzMjU3NCwzMjU3NSwzMjU3NiwzMjU3NywzMjU3OSwzMjU4MiwzMjU4MywzMjU4NCwzMjU4NSwzMjU4NiwzMjU4NywzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MSwzMjU5NCwzMjU5NSwzOTMwNCwyNDg3MSwyODI5MSwyMjM3MiwyNjExOCwyNTQxNCwyMjI1NiwyNTMyNCwy''@;'; put 'put ''NTE5MywyNDI3NSwzODQyMCwyMjQwMywyNTI4OSwyMTg5NSwzNDU5MywzMzA5OCwzNjc3MSwyMTg2MiwzMzcxMywyNjQ2OSwzNjE4MiwzNDAxMywyMzE0NiwyNjYzOSwyNTMxOCwzMTcyNiwzODQxNywyMDg0OCwyODU3MiwzNTg4OCwyNTU5NywzNTI3MiwyNTA0MiwzMjUxOCwyODg2NiwyODM4''@;'; put 'put ''OSwyOTcwMSwyNzAyOCwyOTQzNiwyNDI2NiwzNzA3MCwyNjM5MSwyODAxMCwyNTQzOCwyMTE3MSwyOTI4MiwzMjc2OSwyMDMzMiwyMzAxMywzNzIyNiwyODg4OSwyODA2MSwyMTIwMiwyMDA0OCwzODY0NywzODI1MywzNDE3NCwzMDkyMiwzMjA0NywyMDc2OSwyMjQxOCwyNTc5NCwzMjkwNywz''@;'; put 'put ''MTg2NywyNzg4MiwyNjg2NSwyNjk3NCwyMDkxOSwyMTQwMCwyNjc5MiwyOTMxMyw0MDY1NCwzMTcyOSwyOTQzMiwzMTE2MywyODQzNSwyOTcwMiwyNjQ0NiwzNzMyNCw0MDEwMCwzMTAzNiwzMzY3MywzMzYyMCwyMTUxOSwyNjY0NywyMDAyOSwyMTM4NSwyMTE2OSwzMDc4MiwyMTM4MiwyMTAz''@;'; put 'put ''MywyMDYxNiwyMDM2MywyMDQzMiwzMjU5OCwzMjYwMSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwNiwzMjYwOCwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYxNSwzMjYxOSwzMjYyMCwzMjYyMSwzMjYyMywzMjYyNCwzMjYyNywzMjYyOSwzMjYzMCwzMjYzMSwzMjYzMiwzMjYzNCwzMjYzNSwz''@;'; put 'put ''MjYzNiwzMjYzNywzMjYzOSwzMjY0MCwzMjY0MiwzMjY0MywzMjY0NCwzMjY0NSwzMjY0NiwzMjY0NywzMjY0OCwzMjY0OSwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY1OCwzMjY1OSwzMjY2MSwzMjY2MiwzMjY2MywzMjY2NCwzMjY2NSwzMjY2NywzMjY2OCwzMjY3MiwzMjY3''@;'; put 'put ''NCwzMjY3NSwzMjY3NywzMjY3OCwzMjY4MCwzMjY4MSwzMjY4MiwzMjY4MywzMjY4NCwzMjY4NSwzMjY4NiwzMjY4OSwzMjY5MSwzMjY5MiwzMjY5MywzMjY5NCwzMjY5NSwzMjY5OCwzMjY5OSwzMjcwMiwzMjcwNCwzMjcwNiwzMjcwNywzMjcwOCwzMjcxMCwzMjcxMSwzMjcxMiwzMjcxMywz''@;'; put 'put ''MjcxNSwzMjcxNywzMjcxOSwzMjcyMCwzMjcyMSwzMjcyMiwzMjcyMywzMjcyNiwzMjcyNywzMjcyOSwzMjczMCwzMjczMSwzMjczMiwzMjczMywzMjczNCwzMjczOCwzMjczOSwzMDE3OCwzMTQzNSwzMTg5MCwyNzgxMywzODU4MiwyMTE0NywyOTgyNywyMTczNywyMDQ1NywzMjg1MiwzMzcx''@;'; put 'put ''NCwzNjgzMCwzODI1NiwyNDI2NSwyNDYwNCwyODA2MywyNDA4OCwyNTk0NywzMzA4MCwzODE0MiwyNDY1MSwyODg2MCwzMjQ1MSwzMTkxOCwyMDkzNywyNjc1MywzMTkyMSwzMzM5MSwyMDAwNCwzNjc0MiwzNzMyNywyNjIzOCwyMDE0MiwzNTg0NSwyNTc2OSwzMjg0MiwyMDY5OCwzMDEwMywy''@;'; put 'put ''OTEzNCwyMzUyNSwzNjc5NywyODUxOCwyMDEwMiwyNTczMCwzODI0MywyNDI3OCwyNjAwOSwyMTAxNSwzNTAxMCwyODg3MiwyMTE1NSwyOTQ1NCwyOTc0NywyNjUxOSwzMDk2NywzODY3OCwyMDAyMCwzNzA1MSw0MDE1OCwyODEwNywyMDk1NSwzNjE2MSwyMTUzMywyNTI5NCwyOTYxOCwzMzc3''@;'; put 'put ''NywzODY0Niw0MDgzNiwzODA4MywyMDI3OCwzMjY2NiwyMDk0MCwyODc4OSwzODUxNywyMzcyNSwzOTA0NiwyMTQ3OCwyMDE5NiwyODMxNiwyOTcwNSwyNzA2MCwzMDgyNywzOTMxMSwzMDA0MSwyMTAxNiwzMDI0NCwyNzk2OSwyNjYxMSwyMDg0NSw0MDg1NywzMjg0MywyMTY1NywzMTU0OCwz''@;'; put 'put ''MTQyMywzMjc0MCwzMjc0MywzMjc0NCwzMjc0NiwzMjc0NywzMjc0OCwzMjc0OSwzMjc1MSwzMjc1NCwzMjc1NiwzMjc1NywzMjc1OCwzMjc1OSwzMjc2MCwzMjc2MSwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3MCwzMjc3NSwzMjc3NiwzMjc3NywzMjc3OCwzMjc4MiwzMjc4MywzMjc4''@;'; put 'put ''NSwzMjc4NywzMjc5NCwzMjc5NSwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMSwzMjgwMywzMjgwNCwzMjgxMSwzMjgxMiwzMjgxMywzMjgxNCwzMjgxNSwzMjgxNiwzMjgxOCwzMjgyMCwzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzMywzMjgzNiwzMjgzNywzMjgzOSwzMjg0MCwz''@;'; put 'put ''Mjg0MSwzMjg0NiwzMjg0NywzMjg0OCwzMjg0OSwzMjg1MSwzMjg1MywzMjg1NCwzMjg1NSwzMjg1NywzMjg1OSwzMjg2MCwzMjg2MSwzMjg2MiwzMjg2MywzMjg2NCwzMjg2NSwzMjg2NiwzMjg2NywzMjg2OCwzMjg2OSwzMjg3MCwzMjg3MSwzMjg3MiwzMjg3NSwzMjg3NiwzMjg3NywzMjg3''@;'; put 'put ''OCwzMjg3OSwzMjg4MCwzMjg4MiwzMjg4MywzMjg4NCwzMjg4NSwzMjg4NiwzMjg4NywzMjg4OCwzMjg4OSwzMjg5MCwzMjg5MSwzMjg5MiwzMjg5MywzODUzNCwyMjQwNCwyNTMxNCwzODQ3MSwyNzAwNCwyMzA0NCwyNTYwMiwzMTY5OSwyODQzMSwzODQ3NSwzMzQ0NiwyMTM0NiwzOTA0NSwy''@;'; put 'put ''NDIwOCwyODgwOSwyNTUyMywyMTM0OCwzNDM4Myw0MDA2NSw0MDU5NSwzMDg2MCwzODcwNiwzNjMzNSwzNjE2Miw0MDU3NSwyODUxMCwzMTEwOCwyNDQwNSwzODQ3MCwyNTEzNCwzOTU0MCwyMTUyNSwzODEwOSwyMDM4NywyNjA1MywyMzY1MywyMzY0OSwzMjUzMywzNDM4NSwyNzY5NSwyNDQ1''@;'; put 'put ''OSwyOTU3NSwyODM4OCwzMjUxMSwyMzc4MiwyNTM3MSwyMzQwMiwyODM5MCwyMTM2NSwyMDA4MSwyNTUwNCwzMDA1MywyNTI0OSwzNjcxOCwyMDI2MiwyMDE3NywyNzgxNCwzMjQzOCwzNTc3MCwzMzgyMSwzNDc0NiwzMjU5OSwzNjkyMywzODE3OSwzMTY1NywzOTU4NSwzNTA2NCwzMzg1Mywy''@;'; put 'put ''NzkzMSwzOTU1OCwzMjQ3NiwyMjkyMCw0MDYzNSwyOTU5NSwzMDcyMSwzNDQzNCwzOTUzMiwzOTU1NCwyMjA0MywyMTUyNywyMjQ3NSwyMDA4MCw0MDYxNCwyMTMzNCwzNjgwOCwzMzAzMywzMDYxMCwzOTMxNCwzNDU0MiwyODM4NSwzNDA2NywyNjM2NCwyNDkzMCwyODQ1OSwzMjg5NCwzMjg5''@;'; put 'put ''NywzMjg5OCwzMjkwMSwzMjkwNCwzMjkwNiwzMjkwOSwzMjkxMCwzMjkxMSwzMjkxMiwzMjkxMywzMjkxNCwzMjkxNiwzMjkxNywzMjkxOSwzMjkyMSwzMjkyNiwzMjkzMSwzMjkzNCwzMjkzNSwzMjkzNiwzMjk0MCwzMjk0NCwzMjk0NywzMjk0OSwzMjk1MCwzMjk1MiwzMjk1MywzMjk1NSwz''@;'; put 'put ''Mjk2NSwzMjk2NywzMjk2OCwzMjk2OSwzMjk3MCwzMjk3MSwzMjk3NSwzMjk3NiwzMjk3NywzMjk3OCwzMjk3OSwzMjk4MCwzMjk4MSwzMjk4NCwzMjk5MSwzMjk5MiwzMjk5NCwzMjk5NSwzMjk5OCwzMzAwNiwzMzAxMywzMzAxNSwzMzAxNywzMzAxOSwzMzAyMiwzMzAyMywzMzAyNCwzMzAy''@;'; put 'put ''NSwzMzAyNywzMzAyOCwzMzAyOSwzMzAzMSwzMzAzMiwzMzAzNSwzMzAzNiwzMzA0NSwzMzA0NywzMzA0OSwzMzA1MSwzMzA1MiwzMzA1MywzMzA1NSwzMzA1NiwzMzA1NywzMzA1OCwzMzA1OSwzMzA2MCwzMzA2MSwzMzA2MiwzMzA2MywzMzA2NCwzMzA2NSwzMzA2NiwzMzA2NywzMzA2OSwz''@;'; put 'put ''MzA3MCwzMzA3MiwzMzA3NSwzMzA3NiwzMzA3NywzMzA3OSwzMzA4MSwzMzA4MiwzMzA4MywzMzA4NCwzMzA4NSwzMzA4NywzNTg4MSwzMzQyNiwzMzU3OSwzMDQ1MCwyNzY2NywyNDUzNywzMzcyNSwyOTQ4MywzMzU0MSwzODE3MCwyNzYxMSwzMDY4MywzODA4NiwyMTM1OSwzMzUzOCwyMDg4''@;'; put 'put ''MiwyNDEyNSwzNTk4MCwzNjE1MiwyMDA0MCwyOTYxMSwyNjUyMiwyNjc1NywzNzIzOCwzODY2NSwyOTAyOCwyNzgwOSwzMDQ3MywyMzE4NiwzODIwOSwyNzU5OSwzMjY1NCwyNjE1MSwyMzUwNCwyMjk2OSwyMzE5NCwzODM3NiwzODM5MSwyMDIwNCwzMzgwNCwzMzk0NSwyNzMwOCwzMDQzMSwz''@;'; put 'put ''ODE5MiwyOTQ2NywyNjc5MCwyMzM5MSwzMDUxMSwzNzI3NCwzODc1MywzMTk2NCwzNjg1NSwzNTg2OCwyNDM1NywzMTg1OSwzMTE5MiwzNTI2OSwyNzg1MiwzNDU4OCwyMzQ5NCwyNDEzMCwyNjgyNSwzMDQ5NiwzMjUwMSwyMDg4NSwyMDgxMywyMTE5MywyMzA4MSwzMjUxNywzODc1NCwzMzQ5''@;'; put 'put ''NSwyNTU1MSwzMDU5NiwzNDI1NiwzMTE4NiwyODIxOCwyNDIxNywyMjkzNywzNDA2NSwyODc4MSwyNzY2NSwyNTI3OSwzMDM5OSwyNTkzNSwyNDc1MSwzODM5NywyNjEyNiwzNDcxOSw0MDQ4MywzODEyNSwyMTUxNywyMTYyOSwzNTg4NCwyNTcyMCwzMzA4OCwzMzA4OSwzMzA5MCwzMzA5MSwz''@;'; put 'put ''MzA5MiwzMzA5MywzMzA5NSwzMzA5NywzMzEwMSwzMzEwMiwzMzEwMywzMzEwNiwzMzExMCwzMzExMSwzMzExMiwzMzExNSwzMzExNiwzMzExNywzMzExOCwzMzExOSwzMzEyMSwzMzEyMiwzMzEyMywzMzEyNCwzMzEyNiwzMzEyOCwzMzEzMCwzMzEzMSwzMzEzMiwzMzEzNSwzMzEzOCwzMzEz''@;'; put 'put ''OSwzMzE0MSwzMzE0MiwzMzE0MywzMzE0NCwzMzE1MywzMzE1NSwzMzE1NiwzMzE1NywzMzE1OCwzMzE1OSwzMzE2MSwzMzE2MywzMzE2NCwzMzE2NSwzMzE2NiwzMzE2OCwzMzE3MCwzMzE3MSwzMzE3MiwzMzE3MywzMzE3NCwzMzE3NSwzMzE3NywzMzE3OCwzMzE4MiwzMzE4MywzMzE4NCwz''@;'; put 'put ''MzE4NSwzMzE4NiwzMzE4OCwzMzE4OSwzMzE5MSwzMzE5MywzMzE5NSwzMzE5NiwzMzE5NywzMzE5OCwzMzE5OSwzMzIwMCwzMzIwMSwzMzIwMiwzMzIwNCwzMzIwNSwzMzIwNiwzMzIwNywzMzIwOCwzMzIwOSwzMzIxMiwzMzIxMywzMzIxNCwzMzIxNSwzMzIyMCwzMzIyMSwzMzIyMywzMzIy''@;'; put 'put ''NCwzMzIyNSwzMzIyNywzMzIyOSwzMzIzMCwzMzIzMSwzMzIzMiwzMzIzMywzMzIzNCwzMzIzNSwyNTcyMSwzNDMyMSwyNzE2OSwzMzE4MCwzMDk1MiwyNTcwNSwzOTc2NCwyNTI3MywyNjQxMSwzMzcwNywyMjY5Niw0MDY2NCwyNzgxOSwyODQ0OCwyMzUxOCwzODQ3NiwzNTg1MSwyOTI3OSwy''@;'; put 'put ''NjU3NiwyNTI4NywyOTI4MSwyMDEzNywyMjk4MiwyNzU5NywyMjY3NSwyNjI4NiwyNDE0OSwyMTIxNSwyNDkxNywyNjQwOCwzMDQ0NiwzMDU2NiwyOTI4NywzMTMwMiwyNTM0MywyMTczOCwyMTU4NCwzODA0OCwzNzAyNywyMzA2OCwzMjQzNSwyNzY3MCwyMDAzNSwyMjkwMiwzMjc4NCwyMjg1''@;'; put 'put ''NiwyMTMzNSwzMDAwNywzODU5MCwyMjIxOCwyNTM3NiwzMzA0MSwyNDcwMCwzODM5MywyODExOCwyMTYwMiwzOTI5NywyMDg2OSwyMzI3MywzMzAyMSwyMjk1OCwzODY3NSwyMDUyMiwyNzg3NywyMzYxMiwyNTMxMSwyMDMyMCwyMTMxMSwzMzE0NywzNjg3MCwyODM0NiwzNDA5MSwyNTI4OCwy''@;'; put 'put ''NDE4MCwzMDkxMCwyNTc4MSwyNTQ2NywyNDU2NSwyMzA2NCwzNzI0Nyw0MDQ3OSwyMzYxNSwyNTQyMywzMjgzNCwyMzQyMSwyMTg3MCwzODIxOCwzODIyMSwyODAzNywyNDc0NCwyNjU5MiwyOTQwNiwyMDk1NywyMzQyNSwzMzIzNiwzMzIzNywzMzIzOCwzMzIzOSwzMzI0MCwzMzI0MSwzMzI0''@;'; put 'put ''MiwzMzI0MywzMzI0NCwzMzI0NSwzMzI0NiwzMzI0NywzMzI0OCwzMzI0OSwzMzI1MCwzMzI1MiwzMzI1MywzMzI1NCwzMzI1NiwzMzI1NywzMzI1OSwzMzI2MiwzMzI2MywzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MSwzMzI3MiwzMzI3MywzMzI3NCwzMzI3NywzMzI3OSwz''@;'; put 'put ''MzI4MywzMzI4NywzMzI4OCwzMzI4OSwzMzI5MCwzMzI5MSwzMzI5NCwzMzI5NSwzMzI5NywzMzI5OSwzMzMwMSwzMzMwMiwzMzMwMywzMzMwNCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMiwzMzMxNiwzMzMxNywzMzMxOCwzMzMxOSwzMzMyMSwzMzMyNiwzMzMzMCwzMzMzOCwzMzM0MCwzMzM0''@;'; put 'put ''MSwzMzM0MywzMzM0NCwzMzM0NSwzMzM0NiwzMzM0NywzMzM0OSwzMzM1MCwzMzM1MiwzMzM1NCwzMzM1NiwzMzM1NywzMzM1OCwzMzM2MCwzMzM2MSwzMzM2MiwzMzM2MywzMzM2NCwzMzM2NSwzMzM2NiwzMzM2NywzMzM2OSwzMzM3MSwzMzM3MiwzMzM3MywzMzM3NCwzMzM3NiwzMzM3Nywz''@;'; put 'put ''MzM3OCwzMzM3OSwzMzM4MCwzMzM4MSwzMzM4MiwzMzM4MywzMzM4NSwyNTMxOSwyNzg3MCwyOTI3NSwyNTE5NywzODA2MiwzMjQ0NSwzMzA0MywyNzk4NywyMDg5MiwyNDMyNCwyMjkwMCwyMTE2MiwyNDU5NCwyMjg5OSwyNjI2MiwzNDM4NCwzMDExMSwyNTM4NiwyNTA2MiwzMTk4MywzNTgz''@;'; put 'put ''NCwyMTczNCwyNzQzMSw0MDQ4NSwyNzU3MiwzNDI2MSwyMTU4OSwyMDU5OCwyNzgxMiwyMTg2NiwzNjI3NiwyOTIyOCwyNDA4NSwyNDU5NywyOTc1MCwyNTI5MywyNTQ5MCwyOTI2MCwyNDQ3MiwyODIyNywyNzk2NiwyNTg1NiwyODUwNCwzMDQyNCwzMDkyOCwzMDQ2MCwzMDAzNiwyMTAyOCwy''@;'; put 'put ''MTQ2NywyMDA1MSwyNDIyMiwyNjA0OSwzMjgxMCwzMjk4MiwyNTI0MywyMTYzOCwyMTAzMiwyODg0NiwzNDk1NywzNjMwNSwyNzg3MywyMTYyNCwzMjk4NiwyMjUyMSwzNTA2MCwzNjE4MCwzODUwNiwzNzE5NywyMDMyOSwyNzgwMywyMTk0MywzMDQwNiwzMDc2OCwyNTI1NiwyODkyMSwyODU1''@;'; put 'put ''OCwyNDQyOSwzNDAyOCwyNjg0MiwzMDg0NCwzMTczNSwzMzE5MiwyNjM3OSw0MDUyNywyNTQ0NywzMDg5NiwyMjM4MywzMDczOCwzODcxMywyNTIwOSwyNTI1OSwyMTEyOCwyOTc0OSwyNzYwNywzMzM4NiwzMzM4NywzMzM4OCwzMzM4OSwzMzM5MywzMzM5NywzMzM5OCwzMzM5OSwzMzQwMCwz''@;'; put 'put ''MzQwMywzMzQwNCwzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMywzMzQxNCwzMzQxNSwzMzQxNywzMzQyMCwzMzQyNCwzMzQyNywzMzQyOCwzMzQyOSwzMzQzMCwzMzQzNCwzMzQzNSwzMzQzOCwzMzQ0MCwzMzQ0MiwzMzQ0MywzMzQ0NywzMzQ1OCwzMzQ2MSwzMzQ2MiwzMzQ2NiwzMzQ2NywzMzQ2''@;'; put 'put ''OCwzMzQ3MSwzMzQ3MiwzMzQ3NCwzMzQ3NSwzMzQ3NywzMzQ3OCwzMzQ4MSwzMzQ4OCwzMzQ5NCwzMzQ5NywzMzQ5OCwzMzUwMSwzMzUwNiwzMzUxMSwzMzUxMiwzMzUxMywzMzUxNCwzMzUxNiwzMzUxNywzMzUxOCwzMzUyMCwzMzUyMiwzMzUyMywzMzUyNSwzMzUyNiwzMzUyOCwzMzUzMCwz''@;'; put 'put ''MzUzMiwzMzUzMywzMzUzNCwzMzUzNSwzMzUzNiwzMzU0NiwzMzU0NywzMzU0OSwzMzU1MiwzMzU1NCwzMzU1NSwzMzU1OCwzMzU2MCwzMzU2MSwzMzU2NSwzMzU2NiwzMzU2NywzMzU2OCwzMzU2OSwzMzU3MCwzMzU3MSwzMzU3MiwzMzU3MywzMzU3NCwzMzU3NywzMzU3OCwzMzU4MiwzMzU4''@;'; put 'put ''NCwzMzU4NiwzMzU5MSwzMzU5NSwzMzU5NywyMTg2MCwzMzA4NiwzMDEzMCwzMDM4MiwyMTMwNSwzMDE3NCwyMDczMSwyMzYxNywzNTY5MiwzMTY4NywyMDU1OSwyOTI1NSwzOTU3NSwzOTEyOCwyODQxOCwyOTkyMiwzMTA4MCwyNTczNSwzMDYyOSwyNTM0MCwzOTA1NywzNjEzOSwyMTY5Nywz''@;'; put 'put ''Mjg1NiwyMDA1MCwyMjM3OCwzMzUyOSwzMzgwNSwyNDE3OSwyMDk3MywyOTk0MiwzNTc4MCwyMzYzMSwyMjM2OSwyNzkwMCwzOTA0NywyMzExMCwzMDc3MiwzOTc0OCwzNjg0MywzMTg5MywyMTA3OCwyNTE2OSwzODEzOCwyMDE2NiwzMzY3MCwzMzg4OSwzMzc2OSwzMzk3MCwyMjQ4NCwyNjQy''@;'; put 'put ''MCwyMjI3NSwyNjIyMiwyODAwNiwzNTg4OSwyNjMzMywyODY4OSwyNjM5OSwyNzQ1MCwyNjY0NiwyNTExNCwyMjk3MSwxOTk3MSwyMDkzMiwyODQyMiwyNjU3OCwyNzc5MSwyMDg1NCwyNjgyNywyMjg1NSwyNzQ5NSwzMDA1NCwyMzgyMiwzMzA0MCw0MDc4NCwyNjA3MSwzMTA0OCwzMTA0MSwz''@;'; put 'put ''OTU2OSwzNjIxNSwyMzY4MiwyMDA2MiwyMDIyNSwyMTU1MSwyMjg2NSwzMDczMiwyMjEyMCwyNzY2OCwzNjgwNCwyNDMyMywyNzc3MywyNzg3NSwzNTc1NSwyNTQ4OCwzMzU5OCwzMzU5OSwzMzYwMSwzMzYwMiwzMzYwNCwzMzYwNSwzMzYwOCwzMzYxMCwzMzYxMSwzMzYxMiwzMzYxMywzMzYx''@;'; put 'put ''NCwzMzYxOSwzMzYyMSwzMzYyMiwzMzYyMywzMzYyNCwzMzYyNSwzMzYyOSwzMzYzNCwzMzY0OCwzMzY0OSwzMzY1MCwzMzY1MSwzMzY1MiwzMzY1MywzMzY1NCwzMzY1NywzMzY1OCwzMzY2MiwzMzY2MywzMzY2NCwzMzY2NSwzMzY2NiwzMzY2NywzMzY2OCwzMzY3MSwzMzY3MiwzMzY3NCwz''@;'; put 'put ''MzY3NSwzMzY3NiwzMzY3NywzMzY3OSwzMzY4MCwzMzY4MSwzMzY4NCwzMzY4NSwzMzY4NiwzMzY4NywzMzY4OSwzMzY5MCwzMzY5MywzMzY5NSwzMzY5NywzMzY5OCwzMzY5OSwzMzcwMCwzMzcwMSwzMzcwMiwzMzcwMywzMzcwOCwzMzcwOSwzMzcxMCwzMzcxMSwzMzcxNywzMzcyMywzMzcy''@;'; put 'put ''NiwzMzcyNywzMzczMCwzMzczMSwzMzczMiwzMzczNCwzMzczNiwzMzczNywzMzczOSwzMzc0MSwzMzc0MiwzMzc0NCwzMzc0NSwzMzc0NiwzMzc0NywzMzc0OSwzMzc1MSwzMzc1MywzMzc1NCwzMzc1NSwzMzc1OCwzMzc2MiwzMzc2MywzMzc2NCwzMzc2NiwzMzc2NywzMzc2OCwzMzc3MSwz''@;'; put 'put ''Mzc3MiwzMzc3MywyNDY4OCwyNzk2NSwyOTMwMSwyNTE5MCwzODAzMCwzODA4NSwyMTMxNSwzNjgwMSwzMTYxNCwyMDE5MSwzNTg3OCwyMDA5NCw0MDY2MCwzODA2NSwzODA2NywyMTA2OSwyODUwOCwzNjk2MywyNzk3MywzNTg5MiwyMjU0NSwyMzg4NCwyNzQyNCwyNzQ2NSwyNjUzOCwyMTU5''@;'; put 'put ''NSwzMzEwOCwzMjY1MiwyMjY4MSwzNDEwMywyNDM3OCwyNTI1MCwyNzIwNywzODIwMSwyNTk3MCwyNDcwOCwyNjcyNSwzMDYzMSwyMDA1MiwyMDM5MiwyNDAzOSwzODgwOCwyNTc3MiwzMjcyOCwyMzc4OSwyMDQzMSwzMTM3MywyMDk5OSwzMzU0MCwxOTk4OCwyNDYyMywzMTM2MywzODA1NCwy''@;'; put 'put ''MDQwNSwyMDE0NiwzMTIwNiwyOTc0OCwyMTIyMCwzMzQ2NSwyNTgxMCwzMTE2NSwyMzUxNywyNzc3NywzODczOCwzNjczMSwyNzY4MiwyMDU0MiwyMTM3NSwyODE2NSwyNTgwNiwyNjIyOCwyNzY5NiwyNDc3MywzOTAzMSwzNTgzMSwyNDE5OCwyOTc1NiwzMTM1MSwzMTE3OSwxOTk5MiwzNzA0''@;'; put 'put ''MSwyOTY5OSwyNzcxNCwyMjIzNCwzNzE5NSwyNzg0NSwzNjIzNSwyMTMwNiwzNDUwMiwyNjM1NCwzNjUyNywyMzYyNCwzOTUzNywyODE5MiwzMzc3NCwzMzc3NSwzMzc3OSwzMzc4MCwzMzc4MSwzMzc4MiwzMzc4MywzMzc4NiwzMzc4NywzMzc4OCwzMzc5MCwzMzc5MSwzMzc5MiwzMzc5NCwz''@;'; put 'put ''Mzc5NywzMzc5OSwzMzgwMCwzMzgwMSwzMzgwMiwzMzgwOCwzMzgxMCwzMzgxMSwzMzgxMiwzMzgxMywzMzgxNCwzMzgxNSwzMzgxNywzMzgxOCwzMzgxOSwzMzgyMiwzMzgyMywzMzgyNCwzMzgyNSwzMzgyNiwzMzgyNywzMzgzMywzMzgzNCwzMzgzNSwzMzgzNiwzMzgzNywzMzgzOCwzMzgz''@;'; put 'put ''OSwzMzg0MCwzMzg0MiwzMzg0MywzMzg0NCwzMzg0NSwzMzg0NiwzMzg0NywzMzg0OSwzMzg1MCwzMzg1MSwzMzg1NCwzMzg1NSwzMzg1NiwzMzg1NywzMzg1OCwzMzg1OSwzMzg2MCwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NSwzMzg2NiwzMzg2NywzMzg2OCwzMzg2OSwzMzg3MCwzMzg3MSwz''@;'; put 'put ''Mzg3MiwzMzg3NCwzMzg3NSwzMzg3NiwzMzg3NywzMzg3OCwzMzg4MCwzMzg4NSwzMzg4NiwzMzg4NywzMzg4OCwzMzg5MCwzMzg5MiwzMzg5MywzMzg5NCwzMzg5NSwzMzg5NiwzMzg5OCwzMzkwMiwzMzkwMywzMzkwNCwzMzkwNiwzMzkwOCwzMzkxMSwzMzkxMywzMzkxNSwzMzkxNiwyMTQ2''@;'; put 'put ''MiwyMzA5NCw0MDg0MywzNjI1OSwyMTQzNSwyMjI4MCwzOTA3OSwyNjQzNSwzNzI3NSwyNzg0OSwyMDg0MCwzMDE1NCwyNTMzMSwyOTM1NiwyMTA0OCwyMTE0OSwzMjU3MCwyODgyMCwzMDI2NCwyMTM2NCw0MDUyMiwyNzA2MywzMDgzMCwzODU5MiwzNTAzMywzMjY3NiwyODk4MiwyOTEyMywy''@;'; put 'put ''MDg3MywyNjU3OSwyOTkyNCwyMjc1NiwyNTg4MCwyMjE5OSwzNTc1MywzOTI4NiwyNTIwMCwzMjQ2OSwyNDgyNSwyODkwOSwyMjc2NCwyMDE2MSwyMDE1NCwyNDUyNSwzODg4NywyMDIxOSwzNTc0OCwyMDk5NSwyMjkyMiwzMjQyNywyNTE3MiwyMDE3MywyNjA4NSwyNTEwMiwzMzU5MiwzMzk5''@;'; put 'put ''MywzMzYzNSwzNDcwMSwyOTA3NiwyODM0MiwyMzQ4MSwzMjQ2NiwyMDg4NywyNTU0NSwyNjU4MCwzMjkwNSwzMzU5MywzNDgzNywyMDc1NCwyMzQxOCwyMjkxNCwzNjc4NSwyMDA4MywyNzc0MSwyMDgzNywzNTEwOSwzNjcxOSwzODQ0NiwzNDEyMiwyOTc5MCwzODE2MCwzODM4NCwyODA3MCwz''@;'; put 'put ''MzUwOSwyNDM2OSwyNTc0NiwyNzkyMiwzMzgzMiwzMzEzNCw0MDEzMSwyMjYyMiwzNjE4NywxOTk3NywyMTQ0MSwzMzkxNywzMzkxOCwzMzkxOSwzMzkyMCwzMzkyMSwzMzkyMywzMzkyNCwzMzkyNSwzMzkyNiwzMzkzMCwzMzkzMywzMzkzNSwzMzkzNiwzMzkzNywzMzkzOCwzMzkzOSwzMzk0''@;'; put 'put ''MCwzMzk0MSwzMzk0MiwzMzk0NCwzMzk0NiwzMzk0NywzMzk0OSwzMzk1MCwzMzk1MSwzMzk1MiwzMzk1NCwzMzk1NSwzMzk1NiwzMzk1NywzMzk1OCwzMzk1OSwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2MywzMzk2NCwzMzk2NSwzMzk2NiwzMzk2OCwzMzk2OSwzMzk3MSwzMzk3MywzMzk3NCwz''@;'; put 'put ''Mzk3NSwzMzk3OSwzMzk4MCwzMzk4MiwzMzk4NCwzMzk4NiwzMzk4NywzMzk4OSwzMzk5MCwzMzk5MSwzMzk5MiwzMzk5NSwzMzk5NiwzMzk5OCwzMzk5OSwzNDAwMiwzNDAwNCwzNDAwNSwzNDAwNywzNDAwOCwzNDAwOSwzNDAxMCwzNDAxMSwzNDAxMiwzNDAxNCwzNDAxNywzNDAxOCwzNDAy''@;'; put 'put ''MCwzNDAyMywzNDAyNCwzNDAyNSwzNDAyNiwzNDAyNywzNDAyOSwzNDAzMCwzNDAzMSwzNDAzMywzNDAzNCwzNDAzNSwzNDAzNiwzNDAzNywzNDAzOCwzNDAzOSwzNDA0MCwzNDA0MSwzNDA0MiwzNDA0MywzNDA0NSwzNDA0NiwzNDA0OCwzNDA0OSwzNDA1MCwyMDI1NCwyNTk1NSwyNjcwNSwy''@;'; put 'put ''MTk3MSwyMDAwNywyNTYyMCwzOTU3OCwyNTE5NSwyMzIzNCwyOTc5MSwzMzM5NCwyODA3MywyNjg2MiwyMDcxMSwzMzY3OCwzMDcyMiwyNjQzMiwyMTA0OSwyNzgwMSwzMjQzMywyMDY2NywyMTg2MSwyOTAyMiwzMTU3OSwyNjE5NCwyOTY0MiwzMzUxNSwyNjQ0MSwyMzY2NSwyMTAyNCwyOTA1''@;'; put 'put ''MywzNDkyMywzODM3OCwzODQ4NSwyNTc5NywzNjE5MywzMzIwMywyMTg5MiwyNzczMywyNTE1OSwzMjU1OCwyMjY3NCwyMDI2MCwyMTgzMCwzNjE3NSwyNjE4OCwxOTk3OCwyMzU3OCwzNTA1OSwyNjc4NiwyNTQyMiwzMTI0NSwyODkwMywzMzQyMSwyMTI0MiwzODkwMiwyMzU2OSwyMTczNiwz''@;'; put 'put ''NzA0NSwzMjQ2MSwyMjg4MiwzNjE3MCwzNDUwMywzMzI5MiwzMzI5MywzNjE5OCwyNTY2OCwyMzU1NiwyNDkxMywyODA0MSwzMTAzOCwzNTc3NCwzMDc3NSwzMDAwMywyMTYyNywyMDI4MCwzNjUyMywyODE0NSwyMzA3MiwzMjQ1MywzMTA3MCwyNzc4NCwyMzQ1NywyMzE1OCwyOTk3OCwzMjk1''@;'; put 'put ''OCwyNDkxMCwyODE4MywyMjc2OCwyOTk4MywyOTk4OSwyOTI5OCwyMTMxOSwzMjQ5OSwzNDA1MSwzNDA1MiwzNDA1MywzNDA1NCwzNDA1NSwzNDA1NiwzNDA1NywzNDA1OCwzNDA1OSwzNDA2MSwzNDA2MiwzNDA2MywzNDA2NCwzNDA2NiwzNDA2OCwzNDA2OSwzNDA3MCwzNDA3MiwzNDA3Mywz''@;'; put 'put ''NDA3NSwzNDA3NiwzNDA3NywzNDA3OCwzNDA4MCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NiwzNDA4NywzNDA4OCwzNDA4OSwzNDA5MCwzNDA5MywzNDA5NCwzNDA5NSwzNDA5NiwzNDA5NywzNDA5OCwzNDA5OSwzNDEwMCwzNDEwMSwzNDEwMiwzNDExMCwzNDExMSwzNDExMiwzNDEx''@;'; put 'put ''MywzNDExNCwzNDExNiwzNDExNywzNDExOCwzNDExOSwzNDEyMywzNDEyNCwzNDEyNSwzNDEyNiwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzMiwzNDEzMywzNDEzNSwzNDEzNiwzNDEzOCwzNDEzOSwzNDE0MCwzNDE0MSwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0Nywz''@;'; put 'put ''NDE0OSwzNDE1MCwzNDE1MSwzNDE1MywzNDE1NCwzNDE1NSwzNDE1NiwzNDE1NywzNDE1OCwzNDE1OSwzNDE2MCwzNDE2MSwzNDE2MywzNDE2NSwzNDE2NiwzNDE2NywzNDE2OCwzNDE3MiwzNDE3MywzNDE3NSwzNDE3NiwzNDE3NywzMDQ2NSwzMDQyNywyMTA5NywzMjk4OCwyMjMwNywyNDA3''@;'; put 'put ''MiwyMjgzMywyOTQyMiwyNjA0NSwyODI4NywzNTc5OSwyMzYwOCwzNDQxNywyMTMxMywzMDcwNywyNTM0MiwyNjEwMiwyMDE2MCwzOTEzNSwzNDQzMiwyMzQ1NCwzNTc4MiwyMTQ5MCwzMDY5MCwyMDM1MSwyMzYzMCwzOTU0MiwyMjk4NywyNDMzNSwzMTAzNCwyMjc2MywxOTk5MCwyNjYyMywy''@;'; put 'put ''MDEwNywyNTMyNSwzNTQ3NSwzNjg5MywyMTE4MywyNjE1OSwyMTk4MCwyMjEyNCwzNjg2NiwyMDE4MSwyMDM2NSwzNzMyMiwzOTI4MCwyNzY2MywyNDA2NiwyNDY0MywyMzQ2MCwzNTI3MCwzNTc5NywyNTkxMCwyNTE2MywzOTMxOCwyMzQzMiwyMzU1MSwyNTQ4MCwyMTgwNiwyMTQ2MywzMDI0''@;'; put 'put ''NiwyMDg2MSwzNDA5MiwyNjUzMCwyNjgwMywyNzUzMCwyNTIzNCwzNjc1NSwyMTQ2MCwzMzI5OCwyODExMywzMDA5NSwyMDA3MCwzNjE3NCwyMzQwOCwyOTA4NywzNDIyMywyNjI1NywyNjMyOSwzMjYyNiwzNDU2MCw0MDY1Myw0MDczNiwyMzY0NiwyNjQxNSwzNjg0OCwyNjY0MSwyNjQ2Mywy''@;'; put 'put ''NTEwMSwzMTQ0NiwyMjY2MSwyNDI0NiwyNTk2OCwyODQ2NSwzNDE3OCwzNDE3OSwzNDE4MiwzNDE4NCwzNDE4NSwzNDE4NiwzNDE4NywzNDE4OCwzNDE4OSwzNDE5MCwzNDE5MiwzNDE5MywzNDE5NCwzNDE5NSwzNDE5NiwzNDE5NywzNDE5OCwzNDE5OSwzNDIwMCwzNDIwMSwzNDIwMiwzNDIw''@;'; put 'put ''NSwzNDIwNiwzNDIwNywzNDIwOCwzNDIwOSwzNDIxMCwzNDIxMSwzNDIxMywzNDIxNCwzNDIxNSwzNDIxNywzNDIxOSwzNDIyMCwzNDIyMSwzNDIyNSwzNDIyNiwzNDIyNywzNDIyOCwzNDIyOSwzNDIzMCwzNDIzMiwzNDIzNCwzNDIzNSwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MCwz''@;'; put 'put ''NDI0MiwzNDI0MywzNDI0NCwzNDI0NSwzNDI0NiwzNDI0NywzNDI0OCwzNDI1MCwzNDI1MSwzNDI1MiwzNDI1MywzNDI1NCwzNDI1NywzNDI1OCwzNDI2MCwzNDI2MiwzNDI2MywzNDI2NCwzNDI2NSwzNDI2NiwzNDI2NywzNDI2OSwzNDI3MCwzNDI3MSwzNDI3MiwzNDI3MywzNDI3NCwzNDI3''@;'; put 'put ''NSwzNDI3NywzNDI3OCwzNDI3OSwzNDI4MCwzNDI4MiwzNDI4MywzNDI4NCwzNDI4NSwzNDI4NiwzNDI4NywzNDI4OCwzNDI4OSwzNDI5MCwzNDI5MSwzNDI5MiwzNDI5MywzNDI5NCwzNDI5NSwzNDI5NiwyNDY2MSwyMTA0NywzMjc4MSwyNTY4NCwzNDkyOCwyOTk5MywyNDA2OSwyNjY0Mywy''@;'; put 'put ''NTMzMiwzODY4NCwyMTQ1MiwyOTI0NSwzNTg0MSwyNzcwMCwzMDU2MSwzMTI0NiwyMTU1MCwzMDYzNiwzOTAzNCwzMzMwOCwzNTgyOCwzMDgwNSwyNjM4OCwyODg2NSwyNjAzMSwyNTc0OSwyMjA3MCwyNDYwNSwzMTE2OSwyMTQ5NiwxOTk5NywyNzUxNSwzMjkwMiwyMzU0NiwyMTk4NywyMjIz''@;'; put 'put ''NSwyMDI4MiwyMDI4NCwzOTI4MiwyNDA1MSwyNjQ5NCwzMjgyNCwyNDU3OCwzOTA0MiwzNjg2NSwyMzQzNSwzNTc3MiwzNTgyOSwyNTYyOCwzMzM2OCwyNTgyMiwyMjAxMywzMzQ4NywzNzIyMSwyMDQzOSwzMjAzMiwzNjg5NSwzMTkwMywyMDcyMywyMjYwOSwyODMzNSwyMzQ4NywzNTc4NSwz''@;'; put 'put ''Mjg5OSwzNzI0MCwzMzk0OCwzMTYzOSwzNDQyOSwzODUzOSwzODU0MywzMjQ4NSwzOTYzNSwzMDg2MiwyMzY4MSwzMTMxOSwzNjkzMCwzODU2NywzMTA3MSwyMzM4NSwyNTQzOSwzMTQ5OSwzNDAwMSwyNjc5NywyMTc2NiwzMjU1MywyOTcxMiwzMjAzNCwzODE0NSwyNTE1MiwyMjYwNCwyMDE4''@;'; put 'put ''MiwyMzQyNywyMjkwNSwyMjYxMiwzNDI5NywzNDI5OCwzNDMwMCwzNDMwMSwzNDMwMiwzNDMwNCwzNDMwNSwzNDMwNiwzNDMwNywzNDMwOCwzNDMxMCwzNDMxMSwzNDMxMiwzNDMxMywzNDMxNCwzNDMxNSwzNDMxNiwzNDMxNywzNDMxOCwzNDMxOSwzNDMyMCwzNDMyMiwzNDMyMywzNDMyNCwz''@;'; put 'put ''NDMyNSwzNDMyNywzNDMyOCwzNDMyOSwzNDMzMCwzNDMzMSwzNDMzMiwzNDMzMywzNDMzNCwzNDMzNSwzNDMzNiwzNDMzNywzNDMzOCwzNDMzOSwzNDM0MCwzNDM0MSwzNDM0MiwzNDM0NCwzNDM0NiwzNDM0NywzNDM0OCwzNDM0OSwzNDM1MCwzNDM1MSwzNDM1MiwzNDM1MywzNDM1NCwzNDM1''@;'; put 'put ''NSwzNDM1NiwzNDM1NywzNDM1OCwzNDM1OSwzNDM2MSwzNDM2MiwzNDM2MywzNDM2NSwzNDM2NiwzNDM2NywzNDM2OCwzNDM2OSwzNDM3MCwzNDM3MSwzNDM3MiwzNDM3MywzNDM3NCwzNDM3NSwzNDM3NiwzNDM3NywzNDM3OCwzNDM3OSwzNDM4MCwzNDM4NiwzNDM4NywzNDM4OSwzNDM5MCwz''@;'; put 'put ''NDM5MSwzNDM5MiwzNDM5MywzNDM5NSwzNDM5NiwzNDM5NywzNDM5OSwzNDQwMCwzNDQwMSwzNDQwMywzNDQwNCwzNDQwNSwzNDQwNiwzNDQwNywzNDQwOCwzNDQwOSwzNDQxMCwyOTU0OSwyNTM3NCwzNjQyNywzNjM2NywzMjk3NCwzMzQ5MiwyNTI2MCwyMTQ4OCwyNzg4OCwzNzIxNCwyMjgy''@;'; put 'put ''NiwyNDU3NywyNzc2MCwyMjM0OSwyNTY3NCwzNjEzOCwzMDI1MSwyODM5MywyMjM2MywyNzI2NCwzMDE5MiwyODUyNSwzNTg4NSwzNTg0OCwyMjM3NCwyNzYzMSwzNDk2MiwzMDg5OSwyNTUwNiwyMTQ5NywyODg0NSwyNzc0OCwyMjYxNiwyNTY0MiwyMjUzMCwyNjg0OCwzMzE3OSwyMTc3Niwz''@;'; put 'put ''MTk1OCwyMDUwNCwzNjUzOCwyODEwOCwzNjI1NSwyODkwNywyNTQ4NywyODA1OSwyODM3MiwzMjQ4NiwzMzc5NiwyNjY5MSwzNjg2NywyODEyMCwzODUxOCwzNTc1MiwyMjg3MSwyOTMwNSwzNDI3NiwzMzE1MCwzMDE0MCwzNTQ2NiwyNjc5OSwyMTA3NiwzNjM4NiwzODE2MSwyNTU1MiwzOTA2''@;'; put 'put ''NCwzNjQyMCwyMTg4NCwyMDMwNywyNjM2NywyMjE1OSwyNDc4OSwyODA1MywyMTA1OSwyMzYyNSwyMjgyNSwyODE1NSwyMjYzNSwzZTQsMjk5ODAsMjQ2ODQsMzMzMDAsMzMwOTQsMjUzNjEsMjY0NjUsMzY4MzQsMzA1MjIsMzYzMzksMzYxNDgsMzgwODEsMjQwODYsMjEzODEsMjE1NDgsMjg4''@;'; put 'put ''NjcsMzQ0MTMsMzQ0MTUsMzQ0MTYsMzQ0MTgsMzQ0MTksMzQ0MjAsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjQsMzQ0MzUsMzQ0MzYsMzQ0MzcsMzQ0MzgsMzQ0MzksMzQ0NDAsMzQ0NDEsMzQ0NDYsMzQ0NDcsMzQ0NDgsMzQ0NDksMzQ0NTAsMzQ0NTIsMzQ0NTQsMzQ0NTUsMzQ0NTYsMzQ0NTcs''@;'; put 'put ''MzQ0NTgsMzQ0NTksMzQ0NjIsMzQ0NjMsMzQ0NjQsMzQ0NjUsMzQ0NjYsMzQ0NjksMzQ0NzAsMzQ0NzUsMzQ0NzcsMzQ0NzgsMzQ0ODIsMzQ0ODMsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTEsMzQ0OTIsMzQ0OTMsMzQ0OTQsMzQ0OTUsMzQ0OTcsMzQ0OTgsMzQ0OTksMzQ1MDEsMzQ1MDQsMzQ1''@;'; put 'put ''MDgsMzQ1MDksMzQ1MTQsMzQ1MTUsMzQ1MTcsMzQ1MTgsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjUsMzQ1MjgsMzQ1MjksMzQ1MzAsMzQ1MzEsMzQ1MzMsMzQ1MzQsMzQ1MzUsMzQ1MzYsMzQ1MzgsMzQ1MzksMzQ1NDAsMzQ1NDMsMzQ1NDksMzQ1NTAsMzQ1NTEsMzQ1NTQsMzQ1NTUsMzQ1NTYs''@;'; put 'put ''MzQ1NTcsMzQ1NTksMzQ1NjEsMzQ1NjQsMzQ1NjUsMzQ1NjYsMzQ1NzEsMzQ1NzIsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzcsMzQ1ODAsMzQ1ODIsMjc3MTIsMjQzMTEsMjA1NzIsMjAxNDEsMjQyMzcsMjU0MDIsMzMzNTEsMzY4OTAsMjY3MDQsMzcyMzAsMzA2NDMsMjE1MTYsMzgxMDgsMjQ0''@;'; put 'put ''MjAsMzE0NjEsMjY3NDIsMjU0MTMsMzE1NzAsMzI0NzksMzAxNzEsMjA1OTksMjUyMzcsMjI4MzYsMzY4NzksMjA5ODQsMzExNzEsMzEzNjEsMjIyNzAsMjQ0NjYsMzY4ODQsMjgwMzQsMjM2NDgsMjIzMDMsMjE1MjAsMjA4MjAsMjgyMzcsMjIyNDIsMjU1MTIsMzkwNTksMzMxNTEsMzQ1ODEs''@;'; put 'put ''MzUxMTQsMzY4NjQsMjE1MzQsMjM2NjMsMzMyMTYsMjUzMDIsMjUxNzYsMzMwNzMsNDA1MDEsMzg0NjQsMzk1MzQsMzk1NDgsMjY5MjUsMjI5NDksMjUyOTksMjE4MjIsMjUzNjYsMjE3MDMsMzQ1MjEsMjc5NjQsMjMwNDMsMjk5MjYsMzQ5NzIsMjc0OTgsMjI4MDYsMzU5MTYsMjQzNjcsMjgy''@;'; put 'put ''ODYsMjk2MDksMzkwMzcsMjAwMjQsMjg5MTksMjM0MzYsMzA4NzEsMjU0MDUsMjYyMDIsMzAzNTgsMjQ3NzksMjM0NTEsMjMxMTMsMTk5NzUsMzMxMDksMjc3NTQsMjk1NzksMjAxMjksMjY1MDUsMzI1OTMsMjQ0NDgsMjYxMDYsMjYzOTUsMjQ1MzYsMjI5MTYsMjMwNDEsMzQ1ODUsMzQ1ODcs''@;'; put 'put ''MzQ1ODksMzQ1OTEsMzQ1OTIsMzQ1OTYsMzQ1OTgsMzQ1OTksMzQ2MDAsMzQ2MDIsMzQ2MDMsMzQ2MDQsMzQ2MDUsMzQ2MDcsMzQ2MDgsMzQ2MTAsMzQ2MTEsMzQ2MTMsMzQ2MTQsMzQ2MTYsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjQsMzQ2MjUsMzQ2MjYsMzQ2MjcsMzQ2MjgsMzQ2''@;'; put 'put ''MjksMzQ2MzAsMzQ2MzQsMzQ2MzUsMzQ2MzcsMzQ2MzksMzQ2NDAsMzQ2NDEsMzQ2NDIsMzQ2NDQsMzQ2NDUsMzQ2NDYsMzQ2NDgsMzQ2NTAsMzQ2NTEsMzQ2NTIsMzQ2NTMsMzQ2NTQsMzQ2NTUsMzQ2NTcsMzQ2NTgsMzQ2NjIsMzQ2NjMsMzQ2NjQsMzQ2NjUsMzQ2NjYsMzQ2NjcsMzQ2Njgs''@;'; put 'put ''MzQ2NjksMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2NzUsMzQ2NzcsMzQ2NzksMzQ2ODAsMzQ2ODEsMzQ2ODIsMzQ2ODcsMzQ2ODgsMzQ2ODksMzQ2OTIsMzQ2OTQsMzQ2OTUsMzQ2OTcsMzQ2OTgsMzQ3MDAsMzQ3MDIsMzQ3MDMsMzQ3MDQsMzQ3MDUsMzQ3MDYsMzQ3MDgsMzQ3MDksMzQ3MTAsMzQ3''@;'; put 'put ''MTIsMzQ3MTMsMzQ3MTQsMzQ3MTUsMzQ3MTYsMzQ3MTcsMzQ3MTgsMzQ3MjAsMzQ3MjEsMzQ3MjIsMzQ3MjMsMzQ3MjQsMjQwMTMsMjQ0OTQsMjEzNjEsMzg4ODYsMzY4MjksMjY2OTMsMjIyNjAsMjE4MDcsMjQ3OTksMjAwMjYsMjg0OTMsMzI1MDAsMzM0NzksMzM4MDYsMjI5OTYsMjAyNTUs''@;'; put 'put ''MjAyNjYsMjM2MTQsMzI0MjgsMjY0MTAsMzQwNzQsMjE2MTksMzAwMzEsMzI5NjMsMjE4OTAsMzk3NTksMjAzMDEsMjgyMDUsMzU4NTksMjM1NjEsMjQ5NDQsMjEzNTUsMzAyMzksMjgyMDEsMzQ0NDIsMjU5OTEsMzgzOTUsMzI0NDEsMjE1NjMsMzEyODMsMzIwMTAsMzgzODIsMjE5ODUsMzI3''@;'; put 'put ''MDUsMjk5MzQsMjUzNzMsMzQ1ODMsMjgwNjUsMzEzODksMjUxMDUsMjYwMTcsMjEzNTEsMjU1NjksMjc3NzksMjQwNDMsMjE1OTYsMzgwNTYsMjAwNDQsMjc3NDUsMzU4MjAsMjM2MjcsMjYwODAsMzM0MzYsMjY3OTEsMjE1NjYsMjE1NTYsMjc1OTUsMjc0OTQsMjAxMTYsMjU0MTAsMjEzMjAs''@;'; put 'put ''MzMzMTAsMjAyMzcsMjAzOTgsMjIzNjYsMjUwOTgsMzg2NTQsMjYyMTIsMjkyODksMjEyNDcsMjExNTMsMjQ3MzUsMzU4MjMsMjYxMzIsMjkwODEsMjY1MTIsMzUxOTksMzA4MDIsMzA3MTcsMjYyMjQsMjIwNzUsMjE1NjAsMzgxNzcsMjkzMDYsMzQ3MjUsMzQ3MjYsMzQ3MjcsMzQ3MjksMzQ3''@;'; put 'put ''MzAsMzQ3MzQsMzQ3MzYsMzQ3MzcsMzQ3MzgsMzQ3NDAsMzQ3NDIsMzQ3NDMsMzQ3NDQsMzQ3NDUsMzQ3NDcsMzQ3NDgsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NTQsMzQ3NTUsMzQ3NTYsMzQ3NTcsMzQ3NTksMzQ3NjAsMzQ3NjEsMzQ3NjQsMzQ3NjUsMzQ3NjYsMzQ3NjcsMzQ3NjgsMzQ3NzIs''@;'; put 'put ''MzQ3NzMsMzQ3NzQsMzQ3NzUsMzQ3NzYsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODEsMzQ3ODIsMzQ3ODMsMzQ3ODUsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTAsMzQ3OTEsMzQ3OTIsMzQ3OTMsMzQ3OTUsMzQ3OTYsMzQ3OTcsMzQ3OTksMzQ4MDAsMzQ4MDEsMzQ4MDIsMzQ4MDMsMzQ4MDQsMzQ4''@;'; put 'put ''MDUsMzQ4MDYsMzQ4MDcsMzQ4MDgsMzQ4MTAsMzQ4MTEsMzQ4MTIsMzQ4MTMsMzQ4MTUsMzQ4MTYsMzQ4MTcsMzQ4MTgsMzQ4MjAsMzQ4MjEsMzQ4MjIsMzQ4MjMsMzQ4MjQsMzQ4MjUsMzQ4MjcsMzQ4MjgsMzQ4MjksMzQ4MzAsMzQ4MzEsMzQ4MzIsMzQ4MzMsMzQ4MzQsMzQ4MzYsMzQ4Mzks''@;'; put 'put ''MzQ4NDAsMzQ4NDEsMzQ4NDIsMzQ4NDQsMzQ4NDUsMzQ4NDYsMzQ4NDcsMzQ4NDgsMzQ4NTEsMzEyMzIsMjQ2ODcsMjQwNzYsMjQ3MTMsMzMxODEsMjI4MDUsMjQ3OTYsMjkwNjAsMjg5MTEsMjgzMzAsMjc3MjgsMjkzMTIsMjcyNjgsMzQ5ODksMjQxMDksMjAwNjQsMjMyMTksMjE5MTYsMzgx''@;'; put 'put ''MTUsMjc5MjcsMzE5OTUsMzg1NTMsMjUxMDMsMzI0NTQsMzA2MDYsMzQ0MzAsMjEyODMsMzg2ODYsMzY3NTgsMjYyNDcsMjM3NzcsMjAzODQsMjk0MjEsMTk5NzksMjE0MTQsMjI3OTksMjE1MjMsMjU0NzIsMzgxODQsMjA4MDgsMjAxODUsNDAwOTIsMzI0MjAsMjE2ODgsMzYxMzIsMzQ5MDAs''@;'; put 'put ''MzMzMzUsMzgzODYsMjgwNDYsMjQzNTgsMjMyNDQsMjYxNzQsMzg1MDUsMjk2MTYsMjk0ODYsMjE0MzksMzMxNDYsMzkzMDEsMzI2NzMsMjM0NjYsMzg1MTksMzg0ODAsMzI0NDcsMzA0NTYsMjE0MTAsMzgyNjIsMzkzMjEsMzE2NjUsMzUxNDAsMjgyNDgsMjAwNjUsMzI3MjQsMzEwNzcsMzU4''@;'; put 'put ''MTQsMjQ4MTksMjE3MDksMjAxMzksMzkwMzMsMjQwNTUsMjcyMzMsMjA2ODcsMjE1MjEsMzU5MzcsMzM4MzEsMzA4MTMsMzg2NjAsMjEwNjYsMjE3NDIsMjIxNzksMzgxNDQsMjgwNDAsMjM0NzcsMjgxMDIsMjYxOTUsMzQ4NTIsMzQ4NTMsMzQ4NTQsMzQ4NTUsMzQ4NTYsMzQ4NTcsMzQ4NTgs''@;'; put 'put ''MzQ4NTksMzQ4NjAsMzQ4NjEsMzQ4NjIsMzQ4NjMsMzQ4NjQsMzQ4NjUsMzQ4NjcsMzQ4NjgsMzQ4NjksMzQ4NzAsMzQ4NzEsMzQ4NzIsMzQ4NzQsMzQ4NzUsMzQ4NzcsMzQ4NzgsMzQ4NzksMzQ4ODEsMzQ4ODIsMzQ4ODMsMzQ4ODYsMzQ4ODcsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4''@;'; put 'put ''OTQsMzQ4OTUsMzQ4OTYsMzQ4OTcsMzQ4OTgsMzQ4OTksMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDcsMzQ5MDgsMzQ5MDksMzQ5MTAsMzQ5MTEsMzQ5MTIsMzQ5MTgsMzQ5MTksMzQ5MjIsMzQ5MjUsMzQ5MjcsMzQ5MjksMzQ5MzEsMzQ5MzIsMzQ5MzMsMzQ5MzQsMzQ5MzYsMzQ5Mzcs''@;'; put 'put ''MzQ5MzgsMzQ5MzksMzQ5NDAsMzQ5NDQsMzQ5NDcsMzQ5NTAsMzQ5NTEsMzQ5NTMsMzQ5NTQsMzQ5NTYsMzQ5NTgsMzQ5NTksMzQ5NjAsMzQ5NjEsMzQ5NjMsMzQ5NjQsMzQ5NjUsMzQ5NjcsMzQ5NjgsMzQ5NjksMzQ5NzAsMzQ5NzEsMzQ5NzMsMzQ5NzQsMzQ5NzUsMzQ5NzYsMzQ5NzcsMzQ5''@;'; put 'put ''NzksMzQ5ODEsMzQ5ODIsMzQ5ODMsMzQ5ODQsMzQ5ODUsMzQ5ODYsMjM1NjcsMjMzODksMjY2NTcsMzI5MTgsMjE4ODAsMzE1MDUsMjU5MjgsMjY5NjQsMjAxMjMsMjc0NjMsMzQ2MzgsMzg3OTUsMjEzMjcsMjUzNzUsMjU2NTgsMzcwMzQsMjYwMTIsMzI5NjEsMzU4NTYsMjA4ODksMjY4MDAs''@;'; put 'put ''MjEzNjgsMzQ4MDksMjUwMzIsMjc4NDQsMjc4OTksMzU4NzQsMjM2MzMsMzQyMTgsMzM0NTUsMzgxNTYsMjc0MjcsMzY3NjMsMjYwMzIsMjQ1NzEsMjQ1MTUsMjA0NDksMzQ4ODUsMjYxNDMsMzMxMjUsMjk0ODEsMjQ4MjYsMjA4NTIsMjEwMDksMjI0MTEsMjQ0MTgsMzcwMjYsMzQ4OTIsMzcy''@;'; put 'put ''NjYsMjQxODQsMjY0NDcsMjQ2MTUsMjI5OTUsMjA4MDQsMjA5ODIsMzMwMTYsMjEyNTYsMjc3NjksMzg1OTYsMjkwNjYsMjAyNDEsMjA0NjIsMzI2NzAsMjY0MjksMjE5NTcsMzgxNTIsMzExNjgsMzQ5NjYsMzI0ODMsMjI2ODcsMjUxMDAsMzg2NTYsMzQzOTQsMjIwNDAsMzkwMzUsMjQ0NjQs''@;'; put 'put ''MzU3NjgsMzM5ODgsMzcyMDcsMjE0NjUsMjYwOTMsMjQyMDcsMzAwNDQsMjQ2NzYsMzIxMTAsMjMxNjcsMzI0OTAsMzI0OTMsMzY3MTMsMjE5MjcsMjM0NTksMjQ3NDgsMjYwNTksMjk1NzIsMzQ5ODgsMzQ5OTAsMzQ5OTEsMzQ5OTIsMzQ5OTQsMzQ5OTUsMzQ5OTYsMzQ5OTcsMzQ5OTgsMzVl''@;'; put 'put ''MywzNTAwMSwzNTAwMiwzNTAwMywzNTAwNSwzNTAwNiwzNTAwNywzNTAwOCwzNTAxMSwzNTAxMiwzNTAxNSwzNTAxNiwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMywzNTAyNCwzNTAyNSwzNTAyNywzNTAzMCwzNTAzMSwzNTAzNCwzNTAzNSwzNTAzNiwzNTAzNywzNTAzOCwzNTA0MCwz''@;'; put 'put ''NTA0MSwzNTA0NiwzNTA0NywzNTA0OSwzNTA1MCwzNTA1MSwzNTA1MiwzNTA1MywzNTA1NCwzNTA1NSwzNTA1OCwzNTA2MSwzNTA2MiwzNTA2MywzNTA2NiwzNTA2NywzNTA2OSwzNTA3MSwzNTA3MiwzNTA3MywzNTA3NSwzNTA3NiwzNTA3NywzNTA3OCwzNTA3OSwzNTA4MCwzNTA4MSwzNTA4''@;'; put 'put ''MywzNTA4NCwzNTA4NSwzNTA4NiwzNTA4NywzNTA4OSwzNTA5MiwzNTA5MywzNTA5NCwzNTA5NSwzNTA5NiwzNTEwMCwzNTEwMSwzNTEwMiwzNTEwMywzNTEwNCwzNTEwNiwzNTEwNywzNTEwOCwzNTExMCwzNTExMSwzNTExMiwzNTExMywzNTExNiwzNTExNywzNTExOCwzNTExOSwzNTEyMSwz''@;'; put 'put ''NTEyMiwzNTEyMywzNTEyNSwzNTEyNywzNjg3MywzMDMwNywzMDUwNSwzMjQ3NCwzODc3MiwzNDIwMywyMzM5OCwzMTM0OCwzODYzNCwzNDg4MCwyMTE5NSwyOTA3MSwyNDQ5MCwyNjA5MiwzNTgxMCwyMzU0NywzOTUzNSwyNDAzMywyNzUyOSwyNzczOSwzNTc1NywzNTc1OSwzNjg3NCwzNjgw''@;'; put 'put ''NSwyMTM4NywyNTI3Niw0MDQ4Niw0MDQ5MywyMTU2OCwyMDAxMSwzMzQ2OSwyOTI3MywzNDQ2MCwyMzgzMCwzNDkwNSwyODA3OSwzODU5NywyMTcxMywyMDEyMiwzNTc2NiwyODkzNywyMTY5MywzODQwOSwyODg5NSwyODE1MywzMDQxNiwyMDAwNSwzMDc0MCwzNDU3OCwyMzcyMSwyNDMxMCwz''@;'; put 'put ''NTMyOCwzOTA2OCwzODQxNCwyODgxNCwyNzgzOSwyMjg1MiwyNTUxMywzMDUyNCwzNDg5MywyODQzNiwzMzM5NSwyMjU3NiwyOTE0MSwyMTM4OCwzMDc0NiwzODU5MywyMTc2MSwyNDQyMiwyODk3NiwyMzQ3NiwzNTg2NiwzOTU2NCwyNzUyMywyMjgzMCw0MDQ5NSwzMTIwNywyNjQ3MiwyNTE5''@;'; put 'put ''NiwyMDMzNSwzMDExMywzMjY1MCwyNzkxNSwzODQ1MSwyNzY4NywyMDIwOCwzMDE2MiwyMDg1OSwyNjY3OSwyODQ3OCwzNjk5MiwzMzEzNiwyMjkzNCwyOTgxNCwzNTEyOCwzNTEyOSwzNTEzMCwzNTEzMSwzNTEzMiwzNTEzMywzNTEzNCwzNTEzNSwzNTEzNiwzNTEzOCwzNTEzOSwzNTE0MSwz''@;'; put 'put ''NTE0MiwzNTE0MywzNTE0NCwzNTE0NSwzNTE0NiwzNTE0NywzNTE0OCwzNTE0OSwzNTE1MCwzNTE1MSwzNTE1MiwzNTE1MywzNTE1NCwzNTE1NSwzNTE1NiwzNTE1NywzNTE1OCwzNTE1OSwzNTE2MCwzNTE2MSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2NSwzNTE2OCwzNTE2OSwzNTE3MCwzNTE3''@;'; put 'put ''MSwzNTE3MiwzNTE3MywzNTE3NSwzNTE3NiwzNTE3NywzNTE3OCwzNTE3OSwzNTE4MCwzNTE4MSwzNTE4MiwzNTE4MywzNTE4NCwzNTE4NSwzNTE4NiwzNTE4NywzNTE4OCwzNTE4OSwzNTE5MCwzNTE5MSwzNTE5MiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NywzNTE5OCwzNTIwMCwzNTIwMiwz''@;'; put 'put ''NTIwNCwzNTIwNSwzNTIwNywzNTIwOCwzNTIwOSwzNTIxMCwzNTIxMSwzNTIxMiwzNTIxMywzNTIxNCwzNTIxNSwzNTIxNiwzNTIxNywzNTIxOCwzNTIxOSwzNTIyMCwzNTIyMSwzNTIyMiwzNTIyMywzNTIyNCwzNTIyNSwzNTIyNiwzNTIyNywzNTIyOCwzNTIyOSwzNTIzMCwzNTIzMSwzNTIz''@;'; put 'put ''MiwzNTIzMywyNTY3MSwyMzU5MSwzNjk2NSwzMTM3NywzNTg3NSwyMzAwMiwyMTY3NiwzMzI4MCwzMzY0NywzNTIwMSwzMjc2OCwyNjkyOCwyMjA5NCwzMjgyMiwyOTIzOSwzNzMyNiwyMDkxOCwyMDA2MywzOTAyOSwyNTQ5NCwxOTk5NCwyMTQ5NCwyNjM1NSwzMzA5OSwyMjgxMiwyODA4Miwx''@;'; put 'put ''OTk2OCwyMjc3NywyMTMwNywyNTU1OCwzODEyOSwyMDM4MSwyMDIzNCwzNDkxNSwzOTA1NiwyMjgzOSwzNjk1MSwzMTIyNywyMDIwMiwzMzAwOCwzMDA5NywyNzc3OCwyMzQ1MiwyMzAxNiwyNDQxMywyNjg4NSwzNDQzMywyMDUwNiwyNDA1MCwyMDA1NywzMDY5MSwyMDE5NywzMzQwMiwyNTIz''@;'; put 'put ''MywyNjEzMSwzNzAwOSwyMzY3MywyMDE1OSwyNDQ0MSwzMzIyMiwzNjkyMCwzMjkwMCwzMDEyMywyMDEzNCwzNTAyOCwyNDg0NywyNzU4OSwyNDUxOCwyMDA0MSwzMDQxMCwyODMyMiwzNTgxMSwzNTc1OCwzNTg1MCwzNTc5MywyNDMyMiwzMjc2NCwzMjcxNiwzMjQ2MiwzMzU4OSwzMzY0Mywy''@;'; put 'put ''MjI0MCwyNzU3NSwzODg5OSwzODQ1MiwyMzAzNSwyMTUzNSwzODEzNCwyODEzOSwyMzQ5MywzOTI3OCwyMzYwOSwyNDM0MSwzODU0NCwzNTIzNCwzNTIzNSwzNTIzNiwzNTIzNywzNTIzOCwzNTIzOSwzNTI0MCwzNTI0MSwzNTI0MiwzNTI0MywzNTI0NCwzNTI0NSwzNTI0NiwzNTI0NywzNTI0''@;'; put 'put ''OCwzNTI0OSwzNTI1MCwzNTI1MSwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI1NiwzNTI1NywzNTI1OCwzNTI1OSwzNTI2MCwzNTI2MSwzNTI2MiwzNTI2MywzNTI2NCwzNTI2NywzNTI3NywzNTI4MywzNTI4NCwzNTI4NSwzNTI4NywzNTI4OCwzNTI4OSwzNTI5MSwzNTI5MywzNTI5NSwz''@;'; put 'put ''NTI5NiwzNTI5NywzNTI5OCwzNTMwMCwzNTMwMywzNTMwNCwzNTMwNSwzNTMwNiwzNTMwOCwzNTMwOSwzNTMxMCwzNTMxMiwzNTMxMywzNTMxNCwzNTMxNiwzNTMxNywzNTMxOCwzNTMxOSwzNTMyMCwzNTMyMSwzNTMyMiwzNTMyMywzNTMyNCwzNTMyNSwzNTMyNiwzNTMyNywzNTMyOSwzNTMz''@;'; put 'put ''MCwzNTMzMSwzNTMzMiwzNTMzMywzNTMzNCwzNTMzNiwzNTMzNywzNTMzOCwzNTMzOSwzNTM0MCwzNTM0MSwzNTM0MiwzNTM0MywzNTM0NCwzNTM0NSwzNTM0NiwzNTM0NywzNTM0OCwzNTM0OSwzNTM1MCwzNTM1MSwzNTM1MiwzNTM1MywzNTM1NCwzNTM1NSwzNTM1NiwzNTM1NywyMTM2MCwz''@;'; put 'put ''MzUyMSwyNzE4NSwyMzE1Niw0MDU2MCwyNDIxMiwzMjU1MiwzMzcyMSwzMzgyOCwzMzgyOSwzMzYzOSwzNDYzMSwzNjgxNCwzNjE5NCwzMDQwOCwyNDQzMywzOTA2MiwzMDgyOCwyNjE0NCwyMTcyNywyNTMxNywyMDMyMywzMzIxOSwzMDE1MiwyNDI0OCwzODYwNSwzNjM2MiwzNDU1MywyMTY0''@;'; put 'put ''NywyNzg5MSwyODA0NCwyNzcwNCwyNDcwMywyMTE5MSwyOTk5MiwyNDE4OSwyMDI0OCwyNDczNiwyNDU1MSwyMzU4OCwzMDAwMSwzNzAzOCwzODA4MCwyOTM2OSwyNzgzMywyODIxNiwzNzE5MywyNjM3NywyMTQ1MSwyMTQ5MSwyMDMwNSwzNzMyMSwzNTgyNSwyMTQ0OCwyNDE4OCwzNjgwMiwy''@;'; put 'put ''ODEzMiwyMDExMCwzMDQwMiwyNzAxNCwzNDM5OCwyNDg1OCwzMzI4NiwyMDMxMywyMDQ0NiwzNjkyNiw0MDA2MCwyNDg0MSwyODE4OSwyODE4MCwzODUzMywyMDEwNCwyMzA4OSwzODYzMiwxOTk4MiwyMzY3OSwzMTE2MSwyMzQzMSwzNTgyMSwzMjcwMSwyOTU3NywyMjQ5NSwzMzQxOSwzNzA1''@;'; put 'put ''NywyMTUwNSwzNjkzNSwyMTk0NywyMzc4NiwyNDQ4MSwyNDg0MCwyNzQ0MiwyOTQyNSwzMjk0NiwzNTQ2NSwzNTM1OCwzNTM1OSwzNTM2MCwzNTM2MSwzNTM2MiwzNTM2MywzNTM2NCwzNTM2NSwzNTM2NiwzNTM2NywzNTM2OCwzNTM2OSwzNTM3MCwzNTM3MSwzNTM3MiwzNTM3MywzNTM3NCwz''@;'; put 'put ''NTM3NSwzNTM3NiwzNTM3NywzNTM3OCwzNTM3OSwzNTM4MCwzNTM4MSwzNTM4MiwzNTM4MywzNTM4NCwzNTM4NSwzNTM4NiwzNTM4NywzNTM4OCwzNTM4OSwzNTM5MSwzNTM5MiwzNTM5MywzNTM5NCwzNTM5NSwzNTM5NiwzNTM5NywzNTM5OCwzNTM5OSwzNTQwMSwzNTQwMiwzNTQwMywzNTQw''@;'; put 'put ''NCwzNTQwNSwzNTQwNiwzNTQwNywzNTQwOCwzNTQwOSwzNTQxMCwzNTQxMSwzNTQxMiwzNTQxMywzNTQxNCwzNTQxNSwzNTQxNiwzNTQxNywzNTQxOCwzNTQxOSwzNTQyMCwzNTQyMSwzNTQyMiwzNTQyMywzNTQyNCwzNTQyNSwzNTQyNiwzNTQyNywzNTQyOCwzNTQyOSwzNTQzMCwzNTQzMSwz''@;'; put 'put ''NTQzMiwzNTQzMywzNTQzNCwzNTQzNSwzNTQzNiwzNTQzNywzNTQzOCwzNTQzOSwzNTQ0MCwzNTQ0MSwzNTQ0MiwzNTQ0MywzNTQ0NCwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OCwzNTQ1MCwzNTQ1MSwzNTQ1MiwzNTQ1MywzNTQ1NCwzNTQ1NSwzNTQ1NiwyODAyMCwyMzUwNywzNTAyOSwzOTA0''@;'; put 'put ''NCwzNTk0NywzOTUzMyw0MDQ5OSwyODE3MCwyMDkwMCwyMDgwMywyMjQzNSwzNDk0NSwyMTQwNywyNTU4OCwzNjc1NywyMjI1MywyMTU5MiwyMjI3OCwyOTUwMywyODMwNCwzMjUzNiwzNjgyOCwzMzQ4OSwyNDg5NSwyNDYxNiwzODQ5OCwyNjM1MiwzMjQyMiwzNjIzNCwzNjI5MSwzODA1Mywy''@;'; put 'put ''MzczMSwzMTkwOCwyNjM3NiwyNDc0MiwzODQwNSwzMjc5MiwyMDExMywzNzA5NSwyMTI0OCwzODUwNCwyMDgwMSwzNjgxNiwzNDE2NCwzNzIxMywyNjE5NywzODkwMSwyMzM4MSwyMTI3NywzMDc3NiwyNjQzNCwyNjY4NSwyMTcwNSwyODc5OCwyMzQ3MiwzNjczMywyMDg3NywyMjMxMiwyMTY4''@;'; put 'put ''MSwyNTg3NCwyNjI0MiwzNjE5MCwzNjE2MywzMzAzOSwzMzkwMCwzNjk3MywzMTk2NywyMDk5MSwzNDI5OSwyNjUzMSwyNjA4OSwyODU3NywzNDQ2OCwzNjQ4MSwyMjEyMiwzNjg5NiwzMDMzOCwyODc5MCwyOTE1NywzNjEzMSwyNTMyMSwyMTAxNywyNzkwMSwzNjE1NiwyNDU5MCwyMjY4Niwy''@;'; put 'put ''NDk3NCwyNjM2NiwzNjE5MiwyNTE2NiwyMTkzOSwyODE5NSwyNjQxMywzNjcxMSwzNTQ1NywzNTQ1OCwzNTQ1OSwzNTQ2MCwzNTQ2MSwzNTQ2MiwzNTQ2MywzNTQ2NCwzNTQ2NywzNTQ2OCwzNTQ2OSwzNTQ3MCwzNTQ3MSwzNTQ3MiwzNTQ3MywzNTQ3NCwzNTQ3NiwzNTQ3NywzNTQ3OCwzNTQ3''@;'; put 'put ''OSwzNTQ4MCwzNTQ4MSwzNTQ4MiwzNTQ4MywzNTQ4NCwzNTQ4NSwzNTQ4NiwzNTQ4NywzNTQ4OCwzNTQ4OSwzNTQ5MCwzNTQ5MSwzNTQ5MiwzNTQ5MywzNTQ5NCwzNTQ5NSwzNTQ5NiwzNTQ5NywzNTQ5OCwzNTQ5OSwzNTUwMCwzNTUwMSwzNTUwMiwzNTUwMywzNTUwNCwzNTUwNSwzNTUwNiwz''@;'; put 'put ''NTUwNywzNTUwOCwzNTUwOSwzNTUxMCwzNTUxMSwzNTUxMiwzNTUxMywzNTUxNCwzNTUxNSwzNTUxNiwzNTUxNywzNTUxOCwzNTUxOSwzNTUyMCwzNTUyMSwzNTUyMiwzNTUyMywzNTUyNCwzNTUyNSwzNTUyNiwzNTUyNywzNTUyOCwzNTUyOSwzNTUzMCwzNTUzMSwzNTUzMiwzNTUzMywzNTUz''@;'; put 'put ''NCwzNTUzNSwzNTUzNiwzNTUzNywzNTUzOCwzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MiwzNTU0MywzNTU0NCwzNTU0NSwzNTU0NiwzNTU0NywzNTU0OCwzNTU0OSwzNTU1MCwzNTU1MSwzNTU1MiwzNTU1MywzNTU1NCwzNTU1NSwzODExMywzODM5MiwzMDUwNCwyNjYyOSwyNzA0OCwyMTY0Mywy''@;'; put 'put ''MDA0NSwyODg1NiwzNTc4NCwyNTY4OCwyNTk5NSwyMzQyOSwzMTM2NCwyMDUzOCwyMzUyOCwzMDY1MSwyNzYxNywzNTQ0OSwzMTg5NiwyNzgzOCwzMDQxNSwyNjAyNSwzNjc1OSwyMzg1MywyMzYzNywzNDM2MCwyNjYzMiwyMTM0NCwyNTExMiwzMTQ0OSwyODI1MSwzMjUwOSwyNzE2NywzMTQ1''@;'; put 'put ''NiwyNDQzMiwyODQ2NywyNDM1MiwyNTQ4NCwyODA3MiwyNjQ1NCwxOTk3NiwyNDA4MCwzNjEzNCwyMDE4MywzMjk2MCwzMDI2MCwzODU1NiwyNTMwNywyNjE1NywyNTIxNCwyNzgzNiwzNjIxMywyOTAzMSwzMjYxNywyMDgwNiwzMjkwMywyMTQ4NCwzNjk3NCwyNTI0MCwyMTc0NiwzNDU0NCwz''@;'; put 'put ''Njc2MSwzMjc3MywzODE2NywzNDA3MSwzNjgyNSwyNzk5MywyOTY0NSwyNjAxNSwzMDQ5NSwyOTk1NiwzMDc1OSwzMzI3NSwzNjEyNiwzODAyNCwyMDM5MCwyNjUxNywzMDEzNywzNTc4NiwzODY2MywyNTM5MSwzODIxNSwzODQ1MywzMzk3NiwyNTM3OSwzMDUyOSwyNDQ0OSwyOTQyNCwyMDEw''@;'; put 'put ''NSwyNDU5NiwyNTk3MiwyNTMyNywyNzQ5MSwyNTkxOSwzNTU1NiwzNTU1NywzNTU1OCwzNTU1OSwzNTU2MCwzNTU2MSwzNTU2MiwzNTU2MywzNTU2NCwzNTU2NSwzNTU2NiwzNTU2NywzNTU2OCwzNTU2OSwzNTU3MCwzNTU3MSwzNTU3MiwzNTU3MywzNTU3NCwzNTU3NSwzNTU3NiwzNTU3Nywz''@;'; put 'put ''NTU3OCwzNTU3OSwzNTU4MCwzNTU4MSwzNTU4MiwzNTU4MywzNTU4NCwzNTU4NSwzNTU4NiwzNTU4NywzNTU4OCwzNTU4OSwzNTU5MCwzNTU5MiwzNTU5MywzNTU5NCwzNTU5NSwzNTU5NiwzNTU5NywzNTU5OCwzNTU5OSwzNTYwMCwzNTYwMSwzNTYwMiwzNTYwMywzNTYwNCwzNTYwNSwzNTYw''@;'; put 'put ''NiwzNTYwNywzNTYwOCwzNTYwOSwzNTYxMCwzNTYxMSwzNTYxMiwzNTYxMywzNTYxNCwzNTYxNSwzNTYxNiwzNTYxNywzNTYxOCwzNTYxOSwzNTYyMCwzNTYyMSwzNTYyMywzNTYyNCwzNTYyNSwzNTYyNiwzNTYyNywzNTYyOCwzNTYyOSwzNTYzMCwzNTYzMSwzNTYzMiwzNTYzMywzNTYzNCwz''@;'; put 'put ''NTYzNSwzNTYzNiwzNTYzNywzNTYzOCwzNTYzOSwzNTY0MCwzNTY0MSwzNTY0MiwzNTY0MywzNTY0NCwzNTY0NSwzNTY0NiwzNTY0NywzNTY0OCwzNTY0OSwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywyNDEwMywzMDE1MSwzNzA3MywzNTc3NywzMzQzNywyNjUyNSwyNTkwMywyMTU1MywzNDU4''@;'; put 'put ''NCwzMDY5MywzMjkzMCwzMzAyNiwyNzcxMywyMDA0MywzMjQ1NSwzMjg0NCwzMDQ1MiwyNjg5MywyNzU0MiwyNTE5MSwyMDU0MCwyMDM1NiwyMjMzNiwyNTM1MSwyNzQ5MCwzNjI4NiwyMTQ4MiwyNjA4OCwzMjQ0MCwyNDUzNSwyNTM3MCwyNTUyNywzMzI2NywzMzI2OCwzMjYyMiwyNDA5Miwy''@;'; put 'put ''Mzc2OSwyMTA0NiwyNjIzNCwzMTIwOSwzMTI1OCwzNjEzNiwyODgyNSwzMDE2NCwyODM4MiwyNzgzNSwzMTM3OCwyMDAxMywzMDQwNSwyNDU0NCwzODA0NywzNDkzNSwzMjQ1NiwzMTE4MSwzMjk1OSwzNzMyNSwyMDIxMCwyMDI0NywzMzMxMSwyMTYwOCwyNDAzMCwyNzk1NCwzNTc4OCwzMTkw''@;'; put 'put ''OSwzNjcyNCwzMjkyMCwyNDA5MCwyMTY1MCwzMDM4NSwyMzQ0OSwyNjE3MiwzOTU4OCwyOTY2NCwyNjY2NiwzNDUyMywyNjQxNywyOTQ4MiwzNTgzMiwzNTgwMywzNjg4MCwzMTQ4MSwyODg5MSwyOTAzOCwyNTI4NCwzMDYzMywyMjA2NSwyMDAyNywzMzg3OSwyNjYwOSwyMTE2MSwzNDQ5Niwz''@;'; put 'put ''NjE0MiwzODEzNiwzMTU2OSwzNTY1NCwzNTY1NSwzNTY1NiwzNTY1NywzNTY1OCwzNTY1OSwzNTY2MCwzNTY2MSwzNTY2MiwzNTY2MywzNTY2NCwzNTY2NSwzNTY2NiwzNTY2NywzNTY2OCwzNTY2OSwzNTY3MCwzNTY3MSwzNTY3MiwzNTY3MywzNTY3NCwzNTY3NSwzNTY3NiwzNTY3NywzNTY3''@;'; put 'put ''OCwzNTY3OSwzNTY4MCwzNTY4MSwzNTY4MiwzNTY4MywzNTY4NCwzNTY4NSwzNTY4NywzNTY4OCwzNTY4OSwzNTY5MCwzNTY5MSwzNTY5MywzNTY5NCwzNTY5NSwzNTY5NiwzNTY5NywzNTY5OCwzNTY5OSwzNTcwMCwzNTcwMSwzNTcwMiwzNTcwMywzNTcwNCwzNTcwNSwzNTcwNiwzNTcwNywz''@;'; put 'put ''NTcwOCwzNTcwOSwzNTcxMCwzNTcxMSwzNTcxMiwzNTcxMywzNTcxNCwzNTcxNSwzNTcxNiwzNTcxNywzNTcxOCwzNTcxOSwzNTcyMCwzNTcyMSwzNTcyMiwzNTcyMywzNTcyNCwzNTcyNSwzNTcyNiwzNTcyNywzNTcyOCwzNTcyOSwzNTczMCwzNTczMSwzNTczMiwzNTczMywzNTczNCwzNTcz''@;'; put 'put ''NSwzNTczNiwzNTczNywzNTczOCwzNTczOSwzNTc0MCwzNTc0MSwzNTc0MiwzNTc0MywzNTc1NiwzNTc2MSwzNTc3MSwzNTc4MywzNTc5MiwzNTgxOCwzNTg0OSwzNTg3MCwyMDMwMywyNzg4MCwzMTA2OSwzOTU0NywyNTIzNSwyOTIyNiwyNTM0MSwxOTk4NywzMDc0MiwzNjcxNiwyNTc3Niwz''@;'; put 'put ''NjE4NiwzMTY4NiwyNjcyOSwyNDE5NiwzNTAxMywyMjkxOCwyNTc1OCwyMjc2NiwyOTM2NiwyNjg5NCwzODE4MSwzNjg2MSwzNjE4NCwyMjM2OCwzMjUxMiwzNTg0NiwyMDkzNCwyNTQxNywyNTMwNSwyMTMzMSwyNjcwMCwyOTczMCwzMzUzNywzNzE5NiwyMTgyOCwzMDUyOCwyODc5NiwyNzk3''@;'; put 'put ''OCwyMDg1NywyMTY3MiwzNjE2NCwyMzAzOSwyODM2MywyODEwMCwyMzM4OCwzMjA0MywyMDE4MCwzMTg2OSwyODM3MSwyMzM3NiwzMzI1OCwyODE3MywyMzM4MywzOTY4MywyNjgzNywzNjM5NCwyMzQ0NywzMjUwOCwyNDYzNSwzMjQzNywzNzA0OSwzNjIwOCwyMjg2MywyNTU0OSwzMTE5OSwz''@;'; put 'put ''NjI3NSwyMTMzMCwyNjA2MywzMTA2MiwzNTc4MSwzODQ1OSwzMjQ1MiwzODA3NSwzMjM4NiwyMjA2OCwzNzI1NywyNjM2OCwzMjYxOCwyMzU2MiwzNjk4MSwyNjE1MiwyNDAzOCwyMDMwNCwyNjU5MCwyMDU3MCwyMDMxNiwyMjM1MiwyNDIzMSw1OTQwOCw1OTQwOSw1OTQxMCw1OTQxMSw1OTQx''@;'; put 'put ''MiwzNTg5NiwzNTg5NywzNTg5OCwzNTg5OSwzNTkwMCwzNTkwMSwzNTkwMiwzNTkwMywzNTkwNCwzNTkwNiwzNTkwNywzNTkwOCwzNTkwOSwzNTkxMiwzNTkxNCwzNTkxNSwzNTkxNywzNTkxOCwzNTkxOSwzNTkyMCwzNTkyMSwzNTkyMiwzNTkyMywzNTkyNCwzNTkyNiwzNTkyNywzNTkyOCwz''@;'; put 'put ''NTkyOSwzNTkzMSwzNTkzMiwzNTkzMywzNTkzNCwzNTkzNSwzNTkzNiwzNTkzOSwzNTk0MCwzNTk0MSwzNTk0MiwzNTk0MywzNTk0NCwzNTk0NSwzNTk0OCwzNTk0OSwzNTk1MCwzNTk1MSwzNTk1MiwzNTk1MywzNTk1NCwzNTk1NiwzNTk1NywzNTk1OCwzNTk1OSwzNTk2MywzNTk2NCwzNTk2''@;'; put 'put ''NSwzNTk2NiwzNTk2NywzNTk2OCwzNTk2OSwzNTk3MSwzNTk3MiwzNTk3NCwzNTk3NSwzNTk3NiwzNTk3OSwzNTk4MSwzNTk4MiwzNTk4MywzNTk4NCwzNTk4NSwzNTk4NiwzNTk4NywzNTk4OSwzNTk5MCwzNTk5MSwzNTk5MywzNTk5NCwzNTk5NSwzNTk5NiwzNTk5NywzNTk5OCwzNTk5OSwz''@;'; put 'put ''NmUzLDM2MDAxLDM2MDAyLDM2MDAzLDM2MDA0LDM2MDA1LDM2MDA2LDM2MDA3LDM2MDA4LDM2MDA5LDM2MDEwLDM2MDExLDM2MDEyLDM2MDEzLDIwMTA5LDE5OTgwLDIwODAwLDE5OTg0LDI0MzE5LDIxMzE3LDE5OTg5LDIwMTIwLDE5OTk4LDM5NzMwLDIzNDA0LDIyMTIxLDIwMDA4LDMxMTYy''@;'; put 'put ''LDIwMDMxLDIxMjY5LDIwMDM5LDIyODI5LDI5MjQzLDIxMzU4LDI3NjY0LDIyMjM5LDMyOTk2LDM5MzE5LDI3NjAzLDMwNTkwLDQwNzI3LDIwMDIyLDIwMTI3LDQwNzIwLDIwMDYwLDIwMDczLDIwMTE1LDMzNDE2LDIzMzg3LDIxODY4LDIyMDMxLDIwMTY0LDIxMzg5LDIxNDA1LDIxNDExLDIx''@;'; put 'put ''NDEzLDIxNDIyLDM4NzU3LDM2MTg5LDIxMjc0LDIxNDkzLDIxMjg2LDIxMjk0LDIxMzEwLDM2MTg4LDIxMzUwLDIxMzQ3LDIwOTk0LDIxZTMsMjEwMDYsMjEwMzcsMjEwNDMsMjEwNTUsMjEwNTYsMjEwNjgsMjEwODYsMjEwODksMjEwODQsMzM5NjcsMjExMTcsMjExMjIsMjExMjEsMjExMzYs''@;'; put 'put ''MjExMzksMjA4NjYsMzI1OTYsMjAxNTUsMjAxNjMsMjAxNjksMjAxNjIsMjAyMDAsMjAxOTMsMjAyMDMsMjAxOTAsMjAyNTEsMjAyMTEsMjAyNTgsMjAzMjQsMjAyMTMsMjAyNjEsMjAyNjMsMjAyMzMsMjAyNjcsMjAzMTgsMjAzMjcsMjU5MTIsMjAzMTQsMjAzMTcsMzYwMTQsMzYwMTUsMzYw''@;'; put 'put ''MTYsMzYwMTcsMzYwMTgsMzYwMTksMzYwMjAsMzYwMjEsMzYwMjIsMzYwMjMsMzYwMjQsMzYwMjUsMzYwMjYsMzYwMjcsMzYwMjgsMzYwMjksMzYwMzAsMzYwMzEsMzYwMzIsMzYwMzMsMzYwMzQsMzYwMzUsMzYwMzYsMzYwMzcsMzYwMzgsMzYwMzksMzYwNDAsMzYwNDEsMzYwNDIsMzYwNDMs''@;'; put 'put ''MzYwNDQsMzYwNDUsMzYwNDYsMzYwNDcsMzYwNDgsMzYwNDksMzYwNTAsMzYwNTEsMzYwNTIsMzYwNTMsMzYwNTQsMzYwNTUsMzYwNTYsMzYwNTcsMzYwNTgsMzYwNTksMzYwNjAsMzYwNjEsMzYwNjIsMzYwNjMsMzYwNjQsMzYwNjUsMzYwNjYsMzYwNjcsMzYwNjgsMzYwNjksMzYwNzAsMzYw''@;'; put 'put ''NzEsMzYwNzIsMzYwNzMsMzYwNzQsMzYwNzUsMzYwNzYsMzYwNzcsMzYwNzgsMzYwNzksMzYwODAsMzYwODEsMzYwODIsMzYwODMsMzYwODQsMzYwODUsMzYwODYsMzYwODcsMzYwODgsMzYwODksMzYwOTAsMzYwOTEsMzYwOTIsMzYwOTMsMzYwOTQsMzYwOTUsMzYwOTYsMzYwOTcsMzYwOTgs''@;'; put 'put ''MzYwOTksMzYxMDAsMzYxMDEsMzYxMDIsMzYxMDMsMzYxMDQsMzYxMDUsMzYxMDYsMzYxMDcsMzYxMDgsMzYxMDksMjAzMTksMjAzMTEsMjAyNzQsMjAyODUsMjAzNDIsMjAzNDAsMjAzNjksMjAzNjEsMjAzNTUsMjAzNjcsMjAzNTAsMjAzNDcsMjAzOTQsMjAzNDgsMjAzOTYsMjAzNzIsMjA0''@;'; put 'put ''NTQsMjA0NTYsMjA0NTgsMjA0MjEsMjA0NDIsMjA0NTEsMjA0NDQsMjA0MzMsMjA0NDcsMjA0NzIsMjA1MjEsMjA1NTYsMjA0NjcsMjA1MjQsMjA0OTUsMjA1MjYsMjA1MjUsMjA0NzgsMjA1MDgsMjA0OTIsMjA1MTcsMjA1MjAsMjA2MDYsMjA1NDcsMjA1NjUsMjA1NTIsMjA1NTgsMjA1ODgs''@;'; put 'put ''MjA2MDMsMjA2NDUsMjA2NDcsMjA2NDksMjA2NjYsMjA2OTQsMjA3NDIsMjA3MTcsMjA3MTYsMjA3MTAsMjA3MTgsMjA3NDMsMjA3NDcsMjAxODksMjc3MDksMjAzMTIsMjAzMjUsMjA0MzAsNDA4NjQsMjc3MTgsMzE4NjAsMjA4NDYsMjQwNjEsNDA2NDksMzkzMjAsMjA4NjUsMjI4MDQsMjEy''@;'; put 'put ''NDEsMjEyNjEsMzUzMzUsMjEyNjQsMjA5NzEsMjI4MDksMjA4MjEsMjAxMjgsMjA4MjIsMjAxNDcsMzQ5MjYsMzQ5ODAsMjAxNDksMzMwNDQsMzUwMjYsMzExMDQsMjMzNDgsMzQ4MTksMzI2OTYsMjA5MDcsMjA5MTMsMjA5MjUsMjA5MjQsMzYxMTAsMzYxMTEsMzYxMTIsMzYxMTMsMzYxMTQs''@;'; put 'put ''MzYxMTUsMzYxMTYsMzYxMTcsMzYxMTgsMzYxMTksMzYxMjAsMzYxMjEsMzYxMjIsMzYxMjMsMzYxMjQsMzYxMjgsMzYxNzcsMzYxNzgsMzYxODMsMzYxOTEsMzYxOTcsMzYyMDAsMzYyMDEsMzYyMDIsMzYyMDQsMzYyMDYsMzYyMDcsMzYyMDksMzYyMTAsMzYyMTYsMzYyMTcsMzYyMTgsMzYy''@;'; put 'put ''MTksMzYyMjAsMzYyMjEsMzYyMjIsMzYyMjMsMzYyMjQsMzYyMjYsMzYyMjcsMzYyMzAsMzYyMzEsMzYyMzIsMzYyMzMsMzYyMzYsMzYyMzcsMzYyMzgsMzYyMzksMzYyNDAsMzYyNDIsMzYyNDMsMzYyNDUsMzYyNDYsMzYyNDcsMzYyNDgsMzYyNDksMzYyNTAsMzYyNTEsMzYyNTIsMzYyNTMs''@;'; put 'put ''MzYyNTQsMzYyNTYsMzYyNTcsMzYyNTgsMzYyNjAsMzYyNjEsMzYyNjIsMzYyNjMsMzYyNjQsMzYyNjUsMzYyNjYsMzYyNjcsMzYyNjgsMzYyNjksMzYyNzAsMzYyNzEsMzYyNzIsMzYyNzQsMzYyNzgsMzYyNzksMzYyODEsMzYyODMsMzYyODUsMzYyODgsMzYyODksMzYyOTAsMzYyOTMsMzYy''@;'; put 'put ''OTUsMzYyOTYsMzYyOTcsMzYyOTgsMzYzMDEsMzYzMDQsMzYzMDYsMzYzMDcsMzYzMDgsMjA5MzUsMjA4ODYsMjA4OTgsMjA5MDEsMzU3NDQsMzU3NTAsMzU3NTEsMzU3NTQsMzU3NjQsMzU3NjUsMzU3NjcsMzU3NzgsMzU3NzksMzU3ODcsMzU3OTEsMzU3OTAsMzU3OTQsMzU3OTUsMzU3OTYs''@;'; put 'put ''MzU3OTgsMzU4MDAsMzU4MDEsMzU4MDQsMzU4MDcsMzU4MDgsMzU4MTIsMzU4MTYsMzU4MTcsMzU4MjIsMzU4MjQsMzU4MjcsMzU4MzAsMzU4MzMsMzU4MzYsMzU4MzksMzU4NDAsMzU4NDIsMzU4NDQsMzU4NDcsMzU4NTIsMzU4NTUsMzU4NTcsMzU4NTgsMzU4NjAsMzU4NjEsMzU4NjIsMzU4''@;'; put 'put ''NjUsMzU4NjcsMzU4NjQsMzU4NjksMzU4NzEsMzU4NzIsMzU4NzMsMzU4NzcsMzU4NzksMzU4ODIsMzU4ODMsMzU4ODYsMzU4ODcsMzU4OTAsMzU4OTEsMzU4OTMsMzU4OTQsMjEzNTMsMjEzNzAsMzg0MjksMzg0MzQsMzg0MzMsMzg0NDksMzg0NDIsMzg0NjEsMzg0NjAsMzg0NjYsMzg0NzMs''@;'; put 'put ''Mzg0ODQsMzg0OTUsMzg1MDMsMzg1MDgsMzg1MTQsMzg1MTYsMzg1MzYsMzg1NDEsMzg1NTEsMzg1NzYsMzcwMTUsMzcwMTksMzcwMjEsMzcwMTcsMzcwMzYsMzcwMjUsMzcwNDQsMzcwNDMsMzcwNDYsMzcwNTAsMzYzMDksMzYzMTIsMzYzMTMsMzYzMTYsMzYzMjAsMzYzMjEsMzYzMjIsMzYz''@;'; put 'put ''MjUsMzYzMjYsMzYzMjcsMzYzMjksMzYzMzMsMzYzMzQsMzYzMzYsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDIsMzYzNDgsMzYzNTAsMzYzNTEsMzYzNTIsMzYzNTMsMzYzNTQsMzYzNTUsMzYzNTYsMzYzNTgsMzYzNTksMzYzNjAsMzYzNjMsMzYzNjUsMzYzNjYsMzYzNjgsMzYzNjksMzYzNzAs''@;'; put 'put ''MzYzNzEsMzYzNzMsMzYzNzQsMzYzNzUsMzYzNzYsMzYzNzcsMzYzNzgsMzYzNzksMzYzODAsMzYzODQsMzYzODUsMzYzODgsMzYzODksMzYzOTAsMzYzOTEsMzYzOTIsMzYzOTUsMzYzOTcsMzY0MDAsMzY0MDIsMzY0MDMsMzY0MDQsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MTEsMzY0MTIsMzY0''@;'; put 'put ''MTQsMzY0MTUsMzY0MTksMzY0MjEsMzY0MjIsMzY0MjgsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzIsMzY0MzUsMzY0MzYsMzY0MzcsMzY0MzgsMzY0MzksMzY0NDAsMzY0NDIsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDcsMzY0NDgsMzY0NDksMzY0NTAsMzY0NTEsMzY0NTIsMzY0NTMs''@;'; put 'put ''MzY0NTUsMzY0NTYsMzY0NTgsMzY0NTksMzY0NjIsMzY0NjUsMzcwNDgsMzcwNDAsMzcwNzEsMzcwNjEsMzcwNTQsMzcwNzIsMzcwNjAsMzcwNjMsMzcwNzUsMzcwOTQsMzcwOTAsMzcwODQsMzcwNzksMzcwODMsMzcwOTksMzcxMDMsMzcxMTgsMzcxMjQsMzcxNTQsMzcxNTAsMzcxNTUsMzcx''@;'; put 'put ''NjksMzcxNjcsMzcxNzcsMzcxODcsMzcxOTAsMjEwMDUsMjI4NTAsMjExNTQsMjExNjQsMjExNjUsMjExODIsMjE3NTksMjEyMDAsMjEyMDYsMjEyMzIsMjE0NzEsMjkxNjYsMzA2NjksMjQzMDgsMjA5ODEsMjA5ODgsMzk3MjcsMjE0MzAsMjQzMjEsMzAwNDIsMjQwNDcsMjIzNDgsMjI0NDEs''@;'; put 'put ''MjI0MzMsMjI2NTQsMjI3MTYsMjI3MjUsMjI3MzcsMjIzMTMsMjIzMTYsMjIzMTQsMjIzMjMsMjIzMjksMjIzMTgsMjIzMTksMjIzNjQsMjIzMzEsMjIzMzgsMjIzNzcsMjI0MDUsMjIzNzksMjI0MDYsMjIzOTYsMjIzOTUsMjIzNzYsMjIzODEsMjIzOTAsMjIzODcsMjI0NDUsMjI0MzYsMjI0''@;'; put 'put ''MTIsMjI0NTAsMjI0NzksMjI0MzksMjI0NTIsMjI0MTksMjI0MzIsMjI0ODUsMjI0ODgsMjI0OTAsMjI0ODksMjI0ODIsMjI0NTYsMjI1MTYsMjI1MTEsMjI1MjAsMjI1MDAsMjI0OTMsMzY0NjcsMzY0NjksMzY0NzEsMzY0NzIsMzY0NzMsMzY0NzQsMzY0NzUsMzY0NzcsMzY0NzgsMzY0ODAs''@;'; put 'put ''MzY0ODIsMzY0ODMsMzY0ODQsMzY0ODYsMzY0ODgsMzY0ODksMzY0OTAsMzY0OTEsMzY0OTIsMzY0OTMsMzY0OTQsMzY0OTcsMzY0OTgsMzY0OTksMzY1MDEsMzY1MDIsMzY1MDMsMzY1MDQsMzY1MDUsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTEsMzY1MTIsMzY1MTMsMzY1MTQsMzY1MTUsMzY1''@;'; put 'put ''MTYsMzY1MTcsMzY1MTgsMzY1MTksMzY1MjAsMzY1MjEsMzY1MjIsMzY1MjUsMzY1MjYsMzY1MjgsMzY1MjksMzY1MzEsMzY1MzIsMzY1MzMsMzY1MzQsMzY1MzUsMzY1MzYsMzY1MzcsMzY1MzksMzY1NDAsMzY1NDEsMzY1NDIsMzY1NDMsMzY1NDQsMzY1NDUsMzY1NDYsMzY1NDcsMzY1NDgs''@;'; put 'put ''MzY1NDksMzY1NTAsMzY1NTEsMzY1NTIsMzY1NTMsMzY1NTQsMzY1NTUsMzY1NTYsMzY1NTcsMzY1NTksMzY1NjAsMzY1NjEsMzY1NjIsMzY1NjMsMzY1NjQsMzY1NjUsMzY1NjYsMzY1NjcsMzY1NjgsMzY1NjksMzY1NzAsMzY1NzEsMzY1NzIsMzY1NzMsMzY1NzQsMzY1NzUsMzY1NzYsMzY1''@;'; put 'put ''NzcsMzY1NzgsMzY1NzksMzY1ODAsMjI1MzksMjI1NDEsMjI1MjUsMjI1MDksMjI1MjgsMjI1NTgsMjI1NTMsMjI1OTYsMjI1NjAsMjI2MjksMjI2MzYsMjI2NTcsMjI2NjUsMjI2ODIsMjI2NTYsMzkzMzYsNDA3MjksMjUwODcsMzM0MDEsMzM0MDUsMzM0MDcsMzM0MjMsMzM0MTgsMzM0NDgs''@;'; put 'put ''MzM0MTIsMzM0MjIsMzM0MjUsMzM0MzEsMzM0MzMsMzM0NTEsMzM0NjQsMzM0NzAsMzM0NTYsMzM0ODAsMzM0ODIsMzM1MDcsMzM0MzIsMzM0NjMsMzM0NTQsMzM0ODMsMzM0ODQsMzM0NzMsMzM0NDksMzM0NjAsMzM0NDEsMzM0NTAsMzM0MzksMzM0NzYsMzM0ODYsMzM0NDQsMzM1MDUsMzM1''@;'; put 'put ''NDUsMzM1MjcsMzM1MDgsMzM1NTEsMzM1NDMsMzM1MDAsMzM1MjQsMzM0OTAsMzM0OTYsMzM1NDgsMzM1MzEsMzM0OTEsMzM1NTMsMzM1NjIsMzM1NDIsMzM1NTYsMzM1NTcsMzM1MDQsMzM0OTMsMzM1NjQsMzM2MTcsMzM2MjcsMzM2MjgsMzM1NDQsMzM2ODIsMzM1OTYsMzM1ODgsMzM1ODUs''@;'; put 'put ''MzM2OTEsMzM2MzAsMzM1ODMsMzM2MTUsMzM2MDcsMzM2MDMsMzM2MzEsMzM2MDAsMzM1NTksMzM2MzIsMzM1ODEsMzM1OTQsMzM1ODcsMzM2MzgsMzM2MzcsMzY1ODEsMzY1ODIsMzY1ODMsMzY1ODQsMzY1ODUsMzY1ODYsMzY1ODcsMzY1ODgsMzY1ODksMzY1OTAsMzY1OTEsMzY1OTIsMzY1''@;'; put 'put ''OTMsMzY1OTQsMzY1OTUsMzY1OTYsMzY1OTcsMzY1OTgsMzY1OTksMzY2MDAsMzY2MDEsMzY2MDIsMzY2MDMsMzY2MDQsMzY2MDUsMzY2MDYsMzY2MDcsMzY2MDgsMzY2MDksMzY2MTAsMzY2MTEsMzY2MTIsMzY2MTMsMzY2MTQsMzY2MTUsMzY2MTYsMzY2MTcsMzY2MTgsMzY2MTksMzY2MjAs''@;'; put 'put ''MzY2MjEsMzY2MjIsMzY2MjMsMzY2MjQsMzY2MjUsMzY2MjYsMzY2MjcsMzY2MjgsMzY2MjksMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzMsMzY2MzQsMzY2MzUsMzY2MzYsMzY2MzcsMzY2MzgsMzY2MzksMzY2NDAsMzY2NDEsMzY2NDIsMzY2NDMsMzY2NDQsMzY2NDUsMzY2NDYsMzY2NDcsMzY2''@;'; put 'put ''NDgsMzY2NDksMzY2NTAsMzY2NTEsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NTUsMzY2NTYsMzY2NTcsMzY2NTgsMzY2NTksMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjQsMzY2NjUsMzY2NjYsMzY2NjcsMzY2NjgsMzY2NjksMzY2NzAsMzY2NzEsMzY2NzIsMzY2NzMsMzY2NzQsMzY2NzUs''@;'; put 'put ''MzY2NzYsMzM2NDAsMzM1NjMsMzM2NDEsMzM2NDQsMzM2NDIsMzM2NDUsMzM2NDYsMzM3MTIsMzM2NTYsMzM3MTUsMzM3MTYsMzM2OTYsMzM3MDYsMzM2ODMsMzM2OTIsMzM2NjksMzM2NjAsMzM3MTgsMzM3MDUsMzM2NjEsMzM3MjAsMzM2NTksMzM2ODgsMzM2OTQsMzM3MDQsMzM3MjIsMzM3''@;'; put 'put ''MjQsMzM3MjksMzM3OTMsMzM3NjUsMzM3NTIsMjI1MzUsMzM4MTYsMzM4MDMsMzM3NTcsMzM3ODksMzM3NTAsMzM4MjAsMzM4NDgsMzM4MDksMzM3OTgsMzM3NDgsMzM3NTksMzM4MDcsMzM3OTUsMzM3ODQsMzM3ODUsMzM3NzAsMzM3MzMsMzM3MjgsMzM4MzAsMzM3NzYsMzM3NjEsMzM4ODQs''@;'; put 'put ''MzM4NzMsMzM4ODIsMzM4ODEsMzM5MDcsMzM5MjcsMzM5MjgsMzM5MTQsMzM5MjksMzM5MTIsMzM4NTIsMzM4NjIsMzM4OTcsMzM5MTAsMzM5MzIsMzM5MzQsMzM4NDEsMzM5MDEsMzM5ODUsMzM5OTcsMzRlMywzNDAyMiwzMzk4MSwzNDAwMywzMzk5NCwzMzk4MywzMzk3OCwzNDAxNiwzMzk1''@;'; put 'put ''MywzMzk3NywzMzk3MiwzMzk0MywzNDAyMSwzNDAxOSwzNDA2MCwyOTk2NSwzNDEwNCwzNDAzMiwzNDEwNSwzNDA3OSwzNDEwNiwzNjY3NywzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MSwzNjY4MiwzNjY4MywzNjY4NCwzNjY4NSwzNjY4NiwzNjY4NywzNjY4OCwzNjY4OSwzNjY5MCwzNjY5MSwz''@;'; put 'put ''NjY5MiwzNjY5MywzNjY5NCwzNjY5NSwzNjY5NiwzNjY5NywzNjY5OCwzNjY5OSwzNjcwMCwzNjcwMSwzNjcwMiwzNjcwMywzNjcwNCwzNjcwNSwzNjcwNiwzNjcwNywzNjcwOCwzNjcwOSwzNjcxNCwzNjczNiwzNjc0OCwzNjc1NCwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MCwzNjc3MiwzNjc3''@;'; put 'put ''MywzNjc3NCwzNjc3NSwzNjc3OCwzNjc4MCwzNjc4MSwzNjc4MiwzNjc4MywzNjc4NiwzNjc4NywzNjc4OCwzNjc4OSwzNjc5MSwzNjc5MiwzNjc5NCwzNjc5NSwzNjc5NiwzNjc5OSwzNjgwMCwzNjgwMywzNjgwNiwzNjgwOSwzNjgxMCwzNjgxMSwzNjgxMiwzNjgxMywzNjgxNSwzNjgxOCwz''@;'; put 'put ''NjgyMiwzNjgyMywzNjgyNiwzNjgzMiwzNjgzMywzNjgzNSwzNjgzOSwzNjg0NCwzNjg0NywzNjg0OSwzNjg1MCwzNjg1MiwzNjg1MywzNjg1NCwzNjg1OCwzNjg1OSwzNjg2MCwzNjg2MiwzNjg2MywzNjg3MSwzNjg3MiwzNjg3NiwzNjg3OCwzNjg4MywzNjg4NSwzNjg4OCwzNDEzNCwzNDEw''@;'; put 'put ''NywzNDA0NywzNDA0NCwzNDEzNywzNDEyMCwzNDE1MiwzNDE0OCwzNDE0MiwzNDE3MCwzMDYyNiwzNDExNSwzNDE2MiwzNDE3MSwzNDIxMiwzNDIxNiwzNDE4MywzNDE5MSwzNDE2OSwzNDIyMiwzNDIwNCwzNDE4MSwzNDIzMywzNDIzMSwzNDIyNCwzNDI1OSwzNDI0MSwzNDI2OCwzNDMwMywz''@;'; put 'put ''NDM0MywzNDMwOSwzNDM0NSwzNDMyNiwzNDM2NCwyNDMxOCwyNDMyOCwyMjg0NCwyMjg0OSwzMjgyMywyMjg2OSwyMjg3NCwyMjg3MiwyMTI2MywyMzU4NiwyMzU4OSwyMzU5NiwyMzYwNCwyNTE2NCwyNTE5NCwyNTI0NywyNTI3NSwyNTI5MCwyNTMwNiwyNTMwMywyNTMyNiwyNTM3OCwyNTMz''@;'; put 'put ''NCwyNTQwMSwyNTQxOSwyNTQxMSwyNTUxNywyNTU5MCwyNTQ1NywyNTQ2NiwyNTQ4NiwyNTUyNCwyNTQ1MywyNTUxNiwyNTQ4MiwyNTQ0OSwyNTUxOCwyNTUzMiwyNTU4NiwyNTU5MiwyNTU2OCwyNTU5OSwyNTU0MCwyNTU2NiwyNTU1MCwyNTY4MiwyNTU0MiwyNTUzNCwyNTY2OSwyNTY2NSwy''@;'; put 'put ''NTYxMSwyNTYyNywyNTYzMiwyNTYxMiwyNTYzOCwyNTYzMywyNTY5NCwyNTczMiwyNTcwOSwyNTc1MCwzNjg4OSwzNjg5MiwzNjg5OSwzNjkwMCwzNjkwMSwzNjkwMywzNjkwNCwzNjkwNSwzNjkwNiwzNjkwNywzNjkwOCwzNjkxMiwzNjkxMywzNjkxNCwzNjkxNSwzNjkxNiwzNjkxOSwzNjky''@;'; put 'put ''MSwzNjkyMiwzNjkyNSwzNjkyNywzNjkyOCwzNjkzMSwzNjkzMywzNjkzNCwzNjkzNiwzNjkzNywzNjkzOCwzNjkzOSwzNjk0MCwzNjk0MiwzNjk0OCwzNjk0OSwzNjk1MCwzNjk1MywzNjk1NCwzNjk1NiwzNjk1NywzNjk1OCwzNjk1OSwzNjk2MCwzNjk2MSwzNjk2NCwzNjk2NiwzNjk2Nywz''@;'; put 'put ''Njk2OSwzNjk3MCwzNjk3MSwzNjk3MiwzNjk3NSwzNjk3NiwzNjk3NywzNjk3OCwzNjk3OSwzNjk4MiwzNjk4MywzNjk4NCwzNjk4NSwzNjk4NiwzNjk4NywzNjk4OCwzNjk5MCwzNjk5MywzNjk5NiwzNjk5NywzNjk5OCwzNjk5OSwzNzAwMSwzNzAwMiwzNzAwNCwzNzAwNSwzNzAwNiwzNzAw''@;'; put 'put ''NywzNzAwOCwzNzAxMCwzNzAxMiwzNzAxNCwzNzAxNiwzNzAxOCwzNzAyMCwzNzAyMiwzNzAyMywzNzAyNCwzNzAyOCwzNzAyOSwzNzAzMSwzNzAzMiwzNzAzMywzNzAzNSwzNzAzNywzNzA0MiwzNzA0NywzNzA1MiwzNzA1MywzNzA1NSwzNzA1NiwyNTcyMiwyNTc4MywyNTc4NCwyNTc1Mywy''@;'; put 'put ''NTc4NiwyNTc5MiwyNTgwOCwyNTgxNSwyNTgyOCwyNTgyNiwyNTg2NSwyNTg5MywyNTkwMiwyNDMzMSwyNDUzMCwyOTk3NywyNDMzNywyMTM0MywyMTQ4OSwyMTUwMSwyMTQ4MSwyMTQ4MCwyMTQ5OSwyMTUyMiwyMTUyNiwyMTUxMCwyMTU3OSwyMTU4NiwyMTU4NywyMTU4OCwyMTU5MCwyMTU3''@;'; put 'put ''MSwyMTUzNywyMTU5MSwyMTU5MywyMTUzOSwyMTU1NCwyMTYzNCwyMTY1MiwyMTYyMywyMTYxNywyMTYwNCwyMTY1OCwyMTY1OSwyMTYzNiwyMTYyMiwyMTYwNiwyMTY2MSwyMTcxMiwyMTY3NywyMTY5OCwyMTY4NCwyMTcxNCwyMTY3MSwyMTY3MCwyMTcxNSwyMTcxNiwyMTYxOCwyMTY2Nywy''@;'; put 'put ''MTcxNywyMTY5MSwyMTY5NSwyMTcwOCwyMTcyMSwyMTcyMiwyMTcyNCwyMTY3MywyMTY3NCwyMTY2OCwyMTcyNSwyMTcxMSwyMTcyNiwyMTc4NywyMTczNSwyMTc5MiwyMTc1NywyMTc4MCwyMTc0NywyMTc5NCwyMTc5NSwyMTc3NSwyMTc3NywyMTc5OSwyMTgwMiwyMTg2MywyMTkwMywyMTk0''@;'; put 'put ''MSwyMTgzMywyMTg2OSwyMTgyNSwyMTg0NSwyMTgyMywyMTg0MCwyMTgyMCwzNzA1OCwzNzA1OSwzNzA2MiwzNzA2NCwzNzA2NSwzNzA2NywzNzA2OCwzNzA2OSwzNzA3NCwzNzA3NiwzNzA3NywzNzA3OCwzNzA4MCwzNzA4MSwzNzA4MiwzNzA4NiwzNzA4NywzNzA4OCwzNzA5MSwzNzA5Miwz''@;'; put 'put ''NzA5MywzNzA5NywzNzA5OCwzNzEwMCwzNzEwMiwzNzEwNCwzNzEwNSwzNzEwNiwzNzEwNywzNzEwOSwzNzExMCwzNzExMSwzNzExMywzNzExNCwzNzExNSwzNzExNiwzNzExOSwzNzEyMCwzNzEyMSwzNzEyMywzNzEyNSwzNzEyNiwzNzEyNywzNzEyOCwzNzEyOSwzNzEzMCwzNzEzMSwzNzEz''@;'; put 'put ''MiwzNzEzMywzNzEzNCwzNzEzNSwzNzEzNiwzNzEzNywzNzEzOCwzNzEzOSwzNzE0MCwzNzE0MSwzNzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0NywzNzE0OCwzNzE0OSwzNzE1MSwzNzE1MiwzNzE1MywzNzE1NiwzNzE1NywzNzE1OCwzNzE1OSwzNzE2MCwzNzE2MSwzNzE2MiwzNzE2Mywz''@;'; put 'put ''NzE2NCwzNzE2NSwzNzE2NiwzNzE2OCwzNzE3MCwzNzE3MSwzNzE3MiwzNzE3MywzNzE3NCwzNzE3NSwzNzE3NiwzNzE3OCwzNzE3OSwzNzE4MCwzNzE4MSwzNzE4MiwzNzE4MywzNzE4NCwzNzE4NSwzNzE4NiwzNzE4OCwyMTgxNSwyMTg0NiwyMTg3NywyMTg3OCwyMTg3OSwyMTgxMSwyMTgw''@;'; put 'put ''OCwyMTg1MiwyMTg5OSwyMTk3MCwyMTg5MSwyMTkzNywyMTk0NSwyMTg5NiwyMTg4OSwyMTkxOSwyMTg4NiwyMTk3NCwyMTkwNSwyMTg4MywyMTk4MywyMTk0OSwyMTk1MCwyMTkwOCwyMTkxMywyMTk5NCwyMjAwNywyMTk2MSwyMjA0NywyMTk2OSwyMTk5NSwyMTk5NiwyMTk3MiwyMTk5MCwy''@;'; put 'put ''MTk4MSwyMTk1NiwyMTk5OSwyMTk4OSwyMjAwMiwyMjAwMywyMTk2NCwyMTk2NSwyMTk5MiwyMjAwNSwyMTk4OCwzNjc1NiwyMjA0NiwyMjAyNCwyMjAyOCwyMjAxNywyMjA1MiwyMjA1MSwyMjAxNCwyMjAxNiwyMjA1NSwyMjA2MSwyMjEwNCwyMjA3MywyMjEwMywyMjA2MCwyMjA5MywyMjEx''@;'; put 'put ''NCwyMjEwNSwyMjEwOCwyMjA5MiwyMjEwMCwyMjE1MCwyMjExNiwyMjEyOSwyMjEyMywyMjEzOSwyMjE0MCwyMjE0OSwyMjE2MywyMjE5MSwyMjIyOCwyMjIzMSwyMjIzNywyMjI0MSwyMjI2MSwyMjI1MSwyMjI2NSwyMjI3MSwyMjI3NiwyMjI4MiwyMjI4MSwyMjMwMCwyNDA3OSwyNDA4OSwy''@;'; put 'put ''NDA4NCwyNDA4MSwyNDExMywyNDEyMywyNDEyNCwzNzE4OSwzNzE5MSwzNzE5MiwzNzIwMSwzNzIwMywzNzIwNCwzNzIwNSwzNzIwNiwzNzIwOCwzNzIwOSwzNzIxMSwzNzIxMiwzNzIxNSwzNzIxNiwzNzIyMiwzNzIyMywzNzIyNCwzNzIyNywzNzIyOSwzNzIzNSwzNzI0MiwzNzI0MywzNzI0''@;'; put 'put ''NCwzNzI0OCwzNzI0OSwzNzI1MCwzNzI1MSwzNzI1MiwzNzI1NCwzNzI1NiwzNzI1OCwzNzI2MiwzNzI2MywzNzI2NywzNzI2OCwzNzI2OSwzNzI3MCwzNzI3MSwzNzI3MiwzNzI3MywzNzI3NiwzNzI3NywzNzI3OCwzNzI3OSwzNzI4MCwzNzI4MSwzNzI4NCwzNzI4NSwzNzI4NiwzNzI4Nywz''@;'; put 'put ''NzI4OCwzNzI4OSwzNzI5MSwzNzI5MiwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwzNzMwMiwzNzMwMywzNzMwNCwzNzMwNSwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMCwzNzMxMSwzNzMxMiwzNzMxMywzNzMxNCwzNzMxNSwzNzMxNiwzNzMxNywzNzMxOCwzNzMyMCwzNzMyMywzNzMyOCwzNzMz''@;'; put 'put ''MCwzNzMzMSwzNzMzMiwzNzMzMywzNzMzNCwzNzMzNSwzNzMzNiwzNzMzNywzNzMzOCwzNzMzOSwzNzM0MSwzNzM0MiwzNzM0MywzNzM0NCwzNzM0NSwzNzM0NiwzNzM0NywzNzM0OCwzNzM0OSwyNDExOSwyNDEzMiwyNDE0OCwyNDE1NSwyNDE1OCwyNDE2MSwyMzY5MiwyMzY3NCwyMzY5Mywy''@;'; put 'put ''MzY5NiwyMzcwMiwyMzY4OCwyMzcwNCwyMzcwNSwyMzY5NywyMzcwNiwyMzcwOCwyMzczMywyMzcxNCwyMzc0MSwyMzcyNCwyMzcyMywyMzcyOSwyMzcxNSwyMzc0NSwyMzczNSwyMzc0OCwyMzc2MiwyMzc4MCwyMzc1NSwyMzc4MSwyMzgxMCwyMzgxMSwyMzg0NywyMzg0NiwyMzg1NCwyMzg0''@;'; put 'put ''NCwyMzgzOCwyMzgxNCwyMzgzNSwyMzg5NiwyMzg3MCwyMzg2MCwyMzg2OSwyMzkxNiwyMzg5OSwyMzkxOSwyMzkwMSwyMzkxNSwyMzg4MywyMzg4MiwyMzkxMywyMzkyNCwyMzkzOCwyMzk2MSwyMzk2NSwzNTk1NSwyMzk5MSwyNDAwNSwyNDQzNSwyNDQzOSwyNDQ1MCwyNDQ1NSwyNDQ1Nywy''@;'; put 'put ''NDQ2MCwyNDQ2OSwyNDQ3MywyNDQ3NiwyNDQ4OCwyNDQ5MywyNDUwMSwyNDUwOCwzNDkxNCwyNDQxNywyOTM1NywyOTM2MCwyOTM2NCwyOTM2NywyOTM2OCwyOTM3OSwyOTM3NywyOTM5MCwyOTM4OSwyOTM5NCwyOTQxNiwyOTQyMywyOTQxNywyOTQyNiwyOTQyOCwyOTQzMSwyOTQ0MSwyOTQy''@;'; put 'put ''NywyOTQ0MywyOTQzNCwzNzM1MCwzNzM1MSwzNzM1MiwzNzM1MywzNzM1NCwzNzM1NSwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2MCwzNzM2MSwzNzM2MiwzNzM2MywzNzM2NCwzNzM2NSwzNzM2NiwzNzM2NywzNzM2OCwzNzM2OSwzNzM3MCwzNzM3MSwzNzM3MiwzNzM3MywzNzM3NCwz''@;'; put 'put ''NzM3NSwzNzM3NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM4NywzNzM4OCwzNzM4OSwzNzM5MCwzNzM5MSwzNzM5MiwzNzM5MywzNzM5NCwzNzM5NSwzNzM5NiwzNzM5NywzNzM5OCwzNzM5OSwzNzQwMCwzNzQwMSwzNzQw''@;'; put 'put ''MiwzNzQwMywzNzQwNCwzNzQwNSwzNzQwNiwzNzQwNywzNzQwOCwzNzQwOSwzNzQxMCwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNSwzNzQxNiwzNzQxNywzNzQxOCwzNzQxOSwzNzQyMCwzNzQyMSwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNSwzNzQyNiwzNzQyNywzNzQyOCwzNzQyOSwz''@;'; put 'put ''NzQzMCwzNzQzMSwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNSwzNzQzNiwzNzQzNywzNzQzOCwzNzQzOSwzNzQ0MCwzNzQ0MSwzNzQ0MiwzNzQ0MywzNzQ0NCwzNzQ0NSwyOTQzNSwyOTQ2MywyOTQ1OSwyOTQ3MywyOTQ1MCwyOTQ3MCwyOTQ2OSwyOTQ2MSwyOTQ3NCwyOTQ5NywyOTQ3NywyOTQ4''@;'; put 'put ''NCwyOTQ5NiwyOTQ4OSwyOTUyMCwyOTUxNywyOTUyNywyOTUzNiwyOTU0OCwyOTU1MSwyOTU2NiwzMzMwNywyMjgyMSwzOTE0MywyMjgyMCwyMjc4NiwzOTI2NywzOTI3MSwzOTI3MiwzOTI3MywzOTI3NCwzOTI3NSwzOTI3NiwzOTI4NCwzOTI4NywzOTI5MywzOTI5NiwzOTMwMCwzOTMwMywz''@;'; put 'put ''OTMwNiwzOTMwOSwzOTMxMiwzOTMxMywzOTMxNSwzOTMxNiwzOTMxNywyNDE5MiwyNDIwOSwyNDIwMywyNDIxNCwyNDIyOSwyNDIyNCwyNDI0OSwyNDI0NSwyNDI1NCwyNDI0MywzNjE3OSwyNDI3NCwyNDI3MywyNDI4MywyNDI5NiwyNDI5OCwzMzIxMCwyNDUxNiwyNDUyMSwyNDUzNCwyNDUy''@;'; put 'put ''NywyNDU3OSwyNDU1OCwyNDU4MCwyNDU0NSwyNDU0OCwyNDU3NCwyNDU4MSwyNDU4MiwyNDU1NCwyNDU1NywyNDU2OCwyNDYwMSwyNDYyOSwyNDYxNCwyNDYwMywyNDU5MSwyNDU4OSwyNDYxNywyNDYxOSwyNDU4NiwyNDYzOSwyNDYwOSwyNDY5NiwyNDY5NywyNDY5OSwyNDY5OCwyNDY0Miwz''@;'; put 'put ''NzQ0NiwzNzQ0NywzNzQ0OCwzNzQ0OSwzNzQ1MCwzNzQ1MSwzNzQ1MiwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NiwzNzQ1NywzNzQ1OCwzNzQ1OSwzNzQ2MCwzNzQ2MSwzNzQ2MiwzNzQ2MywzNzQ2NCwzNzQ2NSwzNzQ2NiwzNzQ2NywzNzQ2OCwzNzQ2OSwzNzQ3MCwzNzQ3MSwzNzQ3MiwzNzQ3''@;'; put 'put ''MywzNzQ3NCwzNzQ3NSwzNzQ3NiwzNzQ3NywzNzQ3OCwzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4MiwzNzQ4MywzNzQ4NCwzNzQ4NSwzNzQ4NiwzNzQ4NywzNzQ4OCwzNzQ4OSwzNzQ5MCwzNzQ5MSwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OCwzNzQ5OSwzNzUwMCwzNzUwMSwz''@;'; put 'put ''NzUwMiwzNzUwMywzNzUwNCwzNzUwNSwzNzUwNiwzNzUwNywzNzUwOCwzNzUwOSwzNzUxMCwzNzUxMSwzNzUxMiwzNzUxMywzNzUxNCwzNzUxNSwzNzUxNiwzNzUxNywzNzUxOSwzNzUyMCwzNzUyMSwzNzUyMiwzNzUyMywzNzUyNCwzNzUyNSwzNzUyNiwzNzUyNywzNzUyOCwzNzUyOSwzNzUz''@;'; put 'put ''MCwzNzUzMSwzNzUzMiwzNzUzMywzNzUzNCwzNzUzNSwzNzUzNiwzNzUzNywzNzUzOCwzNzUzOSwzNzU0MCwzNzU0MSwzNzU0MiwzNzU0MywyNDY4MiwyNDcwMSwyNDcyNiwyNDczMCwyNDc0OSwyNDczMywyNDcwNywyNDcyMiwyNDcxNiwyNDczMSwyNDgxMiwyNDc2MywyNDc1MywyNDc5Nywy''@;'; put 'put ''NDc5MiwyNDc3NCwyNDc5NCwyNDc1NiwyNDg2NCwyNDg3MCwyNDg1MywyNDg2NywyNDgyMCwyNDgzMiwyNDg0NiwyNDg3NSwyNDkwNiwyNDk0OSwyNTAwNCwyNDk4MCwyNDk5OSwyNTAxNSwyNTA0NCwyNTA3NywyNDU0MSwzODU3OSwzODM3NywzODM3OSwzODM4NSwzODM4NywzODM4OSwzODM5''@;'; put 'put ''MCwzODM5NiwzODM5OCwzODQwMywzODQwNCwzODQwNiwzODQwOCwzODQxMCwzODQxMSwzODQxMiwzODQxMywzODQxNSwzODQxOCwzODQyMSwzODQyMiwzODQyMywzODQyNSwzODQyNiwyMDAxMiwyOTI0NywyNTEwOSwyNzcwMSwyNzczMiwyNzc0MCwyNzcyMiwyNzgxMSwyNzc4MSwyNzc5Miwy''@;'; put 'put ''Nzc5NiwyNzc4OCwyNzc1MiwyNzc1MywyNzc2NCwyNzc2NiwyNzc4MiwyNzgxNywyNzg1NiwyNzg2MCwyNzgyMSwyNzg5NSwyNzg5NiwyNzg4OSwyNzg2MywyNzgyNiwyNzg3MiwyNzg2MiwyNzg5OCwyNzg4MywyNzg4NiwyNzgyNSwyNzg1OSwyNzg4NywyNzkwMiwzNzU0NCwzNzU0NSwzNzU0''@;'; put 'put ''NiwzNzU0NywzNzU0OCwzNzU0OSwzNzU1MSwzNzU1MiwzNzU1MywzNzU1NCwzNzU1NSwzNzU1NiwzNzU1NywzNzU1OCwzNzU1OSwzNzU2MCwzNzU2MSwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NiwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MiwzNzU3MywzNzU3NCwz''@;'; put 'put ''NzU3NSwzNzU3NywzNzU3OCwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4MywzNzU4NCwzNzU4NSwzNzU4NiwzNzU4NywzNzU4OCwzNzU4OSwzNzU5MCwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NCwzNzU5NSwzNzU5NiwzNzU5NywzNzU5OCwzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMiwzNzYw''@;'; put 'put ''MywzNzYwNCwzNzYwNSwzNzYwNiwzNzYwNywzNzYwOCwzNzYwOSwzNzYxMCwzNzYxMSwzNzYxMiwzNzYxMywzNzYxNCwzNzYxNSwzNzYxNiwzNzYxNywzNzYxOCwzNzYxOSwzNzYyMCwzNzYyMSwzNzYyMiwzNzYyMywzNzYyNCwzNzYyNSwzNzYyNiwzNzYyNywzNzYyOCwzNzYyOSwzNzYzMCwz''@;'; put 'put ''NzYzMSwzNzYzMiwzNzYzMywzNzYzNCwzNzYzNSwzNzYzNiwzNzYzNywzNzYzOCwzNzYzOSwzNzY0MCwzNzY0MSwyNzk2MSwyNzk0MywyNzkxNiwyNzk3MSwyNzk3NiwyNzkxMSwyNzkwOCwyNzkyOSwyNzkxOCwyNzk0NywyNzk4MSwyNzk1MCwyNzk1NywyNzkzMCwyNzk4MywyNzk4NiwyNzk4''@;'; put 'put ''OCwyNzk1NSwyODA0OSwyODAxNSwyODA2MiwyODA2NCwyNzk5OCwyODA1MSwyODA1MiwyNzk5NiwyOGUzLDI4MDI4LDI4MDAzLDI4MTg2LDI4MTAzLDI4MTAxLDI4MTI2LDI4MTc0LDI4MDk1LDI4MTI4LDI4MTc3LDI4MTM0LDI4MTI1LDI4MTIxLDI4MTgyLDI4MDc1LDI4MTcyLDI4MDc4LDI4''@;'; put 'put ''MjAzLDI4MjcwLDI4MjM4LDI4MjY3LDI4MzM4LDI4MjU1LDI4Mjk0LDI4MjQzLDI4MjQ0LDI4MjEwLDI4MTk3LDI4MjI4LDI4MzgzLDI4MzM3LDI4MzEyLDI4Mzg0LDI4NDYxLDI4Mzg2LDI4MzI1LDI4MzI3LDI4MzQ5LDI4MzQ3LDI4MzQzLDI4Mzc1LDI4MzQwLDI4MzY3LDI4MzAzLDI4MzU0''@;'; put 'put ''LDI4MzE5LDI4NTE0LDI4NDg2LDI4NDg3LDI4NDUyLDI4NDM3LDI4NDA5LDI4NDYzLDI4NDcwLDI4NDkxLDI4NTMyLDI4NDU4LDI4NDI1LDI4NDU3LDI4NTUzLDI4NTU3LDI4NTU2LDI4NTM2LDI4NTMwLDI4NTQwLDI4NTM4LDI4NjI1LDM3NjQyLDM3NjQzLDM3NjQ0LDM3NjQ1LDM3NjQ2LDM3''@;'; put 'put ''NjQ3LDM3NjQ4LDM3NjQ5LDM3NjUwLDM3NjUxLDM3NjUyLDM3NjUzLDM3NjU0LDM3NjU1LDM3NjU2LDM3NjU3LDM3NjU4LDM3NjU5LDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY0LDM3NjY1LDM3NjY2LDM3NjY3LDM3NjY4LDM3NjY5LDM3NjcwLDM3NjcxLDM3NjcyLDM3NjczLDM3Njc0''@;'; put 'put ''LDM3Njc1LDM3Njc2LDM3Njc3LDM3Njc4LDM3Njc5LDM3NjgwLDM3NjgxLDM3NjgyLDM3NjgzLDM3Njg0LDM3Njg1LDM3Njg2LDM3Njg3LDM3Njg4LDM3Njg5LDM3NjkwLDM3NjkxLDM3NjkyLDM3NjkzLDM3Njk1LDM3Njk2LDM3Njk3LDM3Njk4LDM3Njk5LDM3NzAwLDM3NzAxLDM3NzAyLDM3''@;'; put 'put ''NzAzLDM3NzA0LDM3NzA1LDM3NzA2LDM3NzA3LDM3NzA4LDM3NzA5LDM3NzEwLDM3NzExLDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE1LDM3NzE2LDM3NzE3LDM3NzE4LDM3NzE5LDM3NzIwLDM3NzIxLDM3NzIyLDM3NzIzLDM3NzI0LDM3NzI1LDM3NzI2LDM3NzI3LDM3NzI4LDM3NzI5LDM3NzMw''@;'; put 'put ''LDM3NzMxLDM3NzMyLDM3NzMzLDM3NzM0LDM3NzM1LDM3NzM2LDM3NzM3LDM3NzM5LDI4NjE3LDI4NTgzLDI4NjAxLDI4NTk4LDI4NjEwLDI4NjQxLDI4NjU0LDI4NjM4LDI4NjQwLDI4NjU1LDI4Njk4LDI4NzA3LDI4Njk5LDI4NzI5LDI4NzI1LDI4NzUxLDI4NzY2LDIzNDI0LDIzNDI4LDIz''@;'; put 'put ''NDQ1LDIzNDQzLDIzNDYxLDIzNDgwLDI5OTk5LDM5NTgyLDI1NjUyLDIzNTI0LDIzNTM0LDM1MTIwLDIzNTM2LDM2NDIzLDM1NTkxLDM2NzkwLDM2ODE5LDM2ODIxLDM2ODM3LDM2ODQ2LDM2ODM2LDM2ODQxLDM2ODM4LDM2ODUxLDM2ODQwLDM2ODY5LDM2ODY4LDM2ODc1LDM2OTAyLDM2ODgx''@;'; put 'put ''LDM2ODc3LDM2ODg2LDM2ODk3LDM2OTE3LDM2OTE4LDM2OTA5LDM2OTExLDM2OTMyLDM2OTQ1LDM2OTQ2LDM2OTQ0LDM2OTY4LDM2OTUyLDM2OTYyLDM2OTU1LDI2Mjk3LDM2OTgwLDM2OTg5LDM2OTk0LDM3ZTMsMzY5OTUsMzcwMDMsMjQ0MDAsMjQ0MDcsMjQ0MDYsMjQ0MDgsMjM2MTEsMjE2''@;'; put 'put ''NzUsMjM2MzIsMjM2NDEsMjM0MDksMjM2NTEsMjM2NTQsMzI3MDAsMjQzNjIsMjQzNjEsMjQzNjUsMzMzOTYsMjQzODAsMzk3MzksMjM2NjIsMjI5MTMsMjI5MTUsMjI5MjUsMjI5NTMsMjI5NTQsMjI5NDcsMzc3NDAsMzc3NDEsMzc3NDIsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDYsMzc3NDcs''@;'; put 'put ''Mzc3NDgsMzc3NDksMzc3NTAsMzc3NTEsMzc3NTIsMzc3NTMsMzc3NTQsMzc3NTUsMzc3NTYsMzc3NTcsMzc3NTgsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjMsMzc3NjQsMzc3NjUsMzc3NjYsMzc3NjcsMzc3NjgsMzc3NjksMzc3NzAsMzc3NzEsMzc3NzIsMzc3NzMsMzc3NzQsMzc3''@;'; put 'put ''NzYsMzc3NzcsMzc3NzgsMzc3NzksMzc3ODAsMzc3ODEsMzc3ODIsMzc3ODMsMzc3ODQsMzc3ODUsMzc3ODYsMzc3ODcsMzc3ODgsMzc3ODksMzc3OTAsMzc3OTEsMzc3OTIsMzc3OTMsMzc3OTQsMzc3OTUsMzc3OTYsMzc3OTcsMzc3OTgsMzc3OTksMzc4MDAsMzc4MDEsMzc4MDIsMzc4MDMs''@;'; put 'put ''Mzc4MDQsMzc4MDUsMzc4MDYsMzc4MDcsMzc4MDgsMzc4MDksMzc4MTAsMzc4MTEsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTUsMzc4MTYsMzc4MTcsMzc4MTgsMzc4MTksMzc4MjAsMzc4MjEsMzc4MjIsMzc4MjMsMzc4MjQsMzc4MjUsMzc4MjYsMzc4MjcsMzc4MjgsMzc4MjksMzc4MzAsMzc4''@;'; put 'put ''MzEsMzc4MzIsMzc4MzMsMzc4MzUsMzc4MzYsMzc4MzcsMjI5MzUsMjI5ODYsMjI5NTUsMjI5NDIsMjI5NDgsMjI5OTQsMjI5NjIsMjI5NTksMjI5OTksMjI5NzQsMjMwNDUsMjMwNDYsMjMwMDUsMjMwNDgsMjMwMTEsMjNlMywyMzAzMywyMzA1MiwyMzA0OSwyMzA5MCwyMzA5MiwyMzA1Nywy''@;'; put 'put ''MzA3NSwyMzA1OSwyMzEwNCwyMzE0MywyMzExNCwyMzEyNSwyMzEwMCwyMzEzOCwyMzE1NywzMzAwNCwyMzIxMCwyMzE5NSwyMzE1OSwyMzE2MiwyMzIzMCwyMzI3NSwyMzIxOCwyMzI1MCwyMzI1MiwyMzIyNCwyMzI2NCwyMzI2NywyMzI4MSwyMzI1NCwyMzI3MCwyMzI1NiwyMzI2MCwyMzMw''@;'; put 'put ''NSwyMzMxOSwyMzMxOCwyMzM0NiwyMzM1MSwyMzM2MCwyMzU3MywyMzU4MCwyMzM4NiwyMzM5NywyMzQxMSwyMzM3NywyMzM3OSwyMzM5NCwzOTU0MSwzOTU0MywzOTU0NCwzOTU0NiwzOTU1MSwzOTU0OSwzOTU1MiwzOTU1MywzOTU1NywzOTU2MCwzOTU2MiwzOTU2OCwzOTU3MCwzOTU3MSwz''@;'; put 'put ''OTU3NCwzOTU3NiwzOTU3OSwzOTU4MCwzOTU4MSwzOTU4MywzOTU4NCwzOTU4NiwzOTU4NywzOTU4OSwzOTU5MSwzMjQxNSwzMjQxNywzMjQxOSwzMjQyMSwzMjQyNCwzMjQyNSwzNzgzOCwzNzgzOSwzNzg0MCwzNzg0MSwzNzg0MiwzNzg0MywzNzg0NCwzNzg0NSwzNzg0NywzNzg0OCwzNzg0''@;'; put 'put ''OSwzNzg1MCwzNzg1MSwzNzg1MiwzNzg1MywzNzg1NCwzNzg1NSwzNzg1NiwzNzg1NywzNzg1OCwzNzg1OSwzNzg2MCwzNzg2MSwzNzg2MiwzNzg2MywzNzg2NCwzNzg2NSwzNzg2NiwzNzg2NywzNzg2OCwzNzg2OSwzNzg3MCwzNzg3MSwzNzg3MiwzNzg3MywzNzg3NCwzNzg3NSwzNzg3Niwz''@;'; put 'put ''Nzg3NywzNzg3OCwzNzg3OSwzNzg4MCwzNzg4MSwzNzg4MiwzNzg4MywzNzg4NCwzNzg4NSwzNzg4NiwzNzg4NywzNzg4OCwzNzg4OSwzNzg5MCwzNzg5MSwzNzg5MiwzNzg5MywzNzg5NCwzNzg5NSwzNzg5NiwzNzg5NywzNzg5OCwzNzg5OSwzNzkwMCwzNzkwMSwzNzkwMiwzNzkwMywzNzkw''@;'; put 'put ''NCwzNzkwNSwzNzkwNiwzNzkwNywzNzkwOCwzNzkwOSwzNzkxMCwzNzkxMSwzNzkxMiwzNzkxMywzNzkxNCwzNzkxNSwzNzkxNiwzNzkxNywzNzkxOCwzNzkxOSwzNzkyMCwzNzkyMSwzNzkyMiwzNzkyMywzNzkyNCwzNzkyNSwzNzkyNiwzNzkyNywzNzkyOCwzNzkyOSwzNzkzMCwzNzkzMSwz''@;'; put 'put ''NzkzMiwzNzkzMywzNzkzNCwzMjQyOSwzMjQzMiwzMjQ0NiwzMjQ0OCwzMjQ0OSwzMjQ1MCwzMjQ1NywzMjQ1OSwzMjQ2MCwzMjQ2NCwzMjQ2OCwzMjQ3MSwzMjQ3NSwzMjQ4MCwzMjQ4MSwzMjQ4OCwzMjQ5MSwzMjQ5NCwzMjQ5NSwzMjQ5NywzMjQ5OCwzMjUyNSwzMjUwMiwzMjUwNiwzMjUw''@;'; put 'put ''NywzMjUxMCwzMjUxMywzMjUxNCwzMjUxNSwzMjUxOSwzMjUyMCwzMjUyMywzMjUyNCwzMjUyNywzMjUyOSwzMjUzMCwzMjUzNSwzMjUzNywzMjU0MCwzMjUzOSwzMjU0MywzMjU0NSwzMjU0NiwzMjU0NywzMjU0OCwzMjU0OSwzMjU1MCwzMjU1MSwzMjU1NCwzMjU1NSwzMjU1NiwzMjU1Nywz''@;'; put 'put ''MjU1OSwzMjU2MCwzMjU2MSwzMjU2MiwzMjU2MywzMjU2NSwyNDE4NiwzMDA3OSwyNDAyNywzMDAxNCwzNzAxMywyOTU4MiwyOTU4NSwyOTYxNCwyOTYwMiwyOTU5OSwyOTY0NywyOTYzNCwyOTY0OSwyOTYyMywyOTYxOSwyOTYzMiwyOTY0MSwyOTY0MCwyOTY2OSwyOTY1NywzOTAzNiwyOTcw''@;'; put 'put ''NiwyOTY3MywyOTY3MSwyOTY2MiwyOTYyNiwyOTY4MiwyOTcxMSwyOTczOCwyOTc4NywyOTczNCwyOTczMywyOTczNiwyOTc0NCwyOTc0MiwyOTc0MCwzNzkzNSwzNzkzNiwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0MSwzNzk0MiwzNzk0MywzNzk0NCwzNzk0NSwzNzk0NiwzNzk0Nywz''@;'; put 'put ''Nzk0OCwzNzk0OSwzNzk1MSwzNzk1MiwzNzk1MywzNzk1NCwzNzk1NSwzNzk1NiwzNzk1NywzNzk1OCwzNzk1OSwzNzk2MCwzNzk2MSwzNzk2MiwzNzk2MywzNzk2NCwzNzk2NSwzNzk2NiwzNzk2NywzNzk2OCwzNzk2OSwzNzk3MCwzNzk3MSwzNzk3MiwzNzk3MywzNzk3NCwzNzk3NSwzNzk3''@;'; put 'put ''NiwzNzk3NywzNzk3OCwzNzk3OSwzNzk4MCwzNzk4MSwzNzk4MiwzNzk4MywzNzk4NCwzNzk4NSwzNzk4NiwzNzk4NywzNzk4OCwzNzk4OSwzNzk5MCwzNzk5MSwzNzk5MiwzNzk5MywzNzk5NCwzNzk5NiwzNzk5NywzNzk5OCwzNzk5OSwzOGUzLDM4MDAxLDM4MDAyLDM4MDAzLDM4MDA0LDM4''@;'; put 'put ''MDA1LDM4MDA2LDM4MDA3LDM4MDA4LDM4MDA5LDM4MDEwLDM4MDExLDM4MDEyLDM4MDEzLDM4MDE0LDM4MDE1LDM4MDE2LDM4MDE3LDM4MDE4LDM4MDE5LDM4MDIwLDM4MDMzLDM4MDM4LDM4MDQwLDM4MDg3LDM4MDk1LDM4MDk5LDM4MTAwLDM4MTA2LDM4MTE4LDM4MTM5LDM4MTcyLDM4MTc2''@;'; put 'put ''LDI5NzIzLDI5NzIyLDI5NzYxLDI5Nzg4LDI5NzgzLDI5NzgxLDI5Nzg1LDI5ODE1LDI5ODA1LDI5ODIyLDI5ODUyLDI5ODM4LDI5ODI0LDI5ODI1LDI5ODMxLDI5ODM1LDI5ODU0LDI5ODY0LDI5ODY1LDI5ODQwLDI5ODYzLDI5OTA2LDI5ODgyLDM4ODkwLDM4ODkxLDM4ODkyLDI2NDQ0LDI2''@;'; put 'put ''NDUxLDI2NDYyLDI2NDQwLDI2NDczLDI2NTMzLDI2NTAzLDI2NDc0LDI2NDgzLDI2NTIwLDI2NTM1LDI2NDg1LDI2NTM2LDI2NTI2LDI2NTQxLDI2NTA3LDI2NDg3LDI2NDkyLDI2NjA4LDI2NjMzLDI2NTg0LDI2NjM0LDI2NjAxLDI2NTQ0LDI2NjM2LDI2NTg1LDI2NTQ5LDI2NTg2LDI2NTQ3''@;'; put 'put ''LDI2NTg5LDI2NjI0LDI2NTYzLDI2NTUyLDI2NTk0LDI2NjM4LDI2NTYxLDI2NjIxLDI2Njc0LDI2Njc1LDI2NzIwLDI2NzIxLDI2NzAyLDI2NzIyLDI2NjkyLDI2NzI0LDI2NzU1LDI2NjUzLDI2NzA5LDI2NzI2LDI2Njg5LDI2NzI3LDI2Njg4LDI2Njg2LDI2Njk4LDI2Njk3LDI2NjY1LDI2''@;'; put 'put ''ODA1LDI2NzY3LDI2NzQwLDI2NzQzLDI2NzcxLDI2NzMxLDI2ODE4LDI2OTkwLDI2ODc2LDI2OTExLDI2OTEyLDI2ODczLDM4MTgzLDM4MTk1LDM4MjA1LDM4MjExLDM4MjE2LDM4MjE5LDM4MjI5LDM4MjM0LDM4MjQwLDM4MjU0LDM4MjYwLDM4MjYxLDM4MjYzLDM4MjY0LDM4MjY1LDM4MjY2''@;'; put 'put ''LDM4MjY3LDM4MjY4LDM4MjY5LDM4MjcwLDM4MjcyLDM4MjczLDM4Mjc0LDM4Mjc1LDM4Mjc2LDM4Mjc3LDM4Mjc4LDM4Mjc5LDM4MjgwLDM4MjgxLDM4MjgyLDM4MjgzLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4Mjg3LDM4Mjg4LDM4Mjg5LDM4MjkwLDM4MjkxLDM4MjkyLDM4MjkzLDM4Mjk0LDM4''@;'; put 'put ''Mjk1LDM4Mjk2LDM4Mjk3LDM4Mjk4LDM4Mjk5LDM4MzAwLDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA0LDM4MzA1LDM4MzA2LDM4MzA3LDM4MzA4LDM4MzA5LDM4MzEwLDM4MzExLDM4MzEyLDM4MzEzLDM4MzE0LDM4MzE1LDM4MzE2LDM4MzE3LDM4MzE4LDM4MzE5LDM4MzIwLDM4MzIxLDM4MzIy''@;'; put 'put ''LDM4MzIzLDM4MzI0LDM4MzI1LDM4MzI2LDM4MzI3LDM4MzI4LDM4MzI5LDM4MzMwLDM4MzMxLDM4MzMyLDM4MzMzLDM4MzM0LDM4MzM1LDM4MzM2LDM4MzM3LDM4MzM4LDM4MzM5LDM4MzQwLDM4MzQxLDM4MzQyLDM4MzQzLDM4MzQ0LDM4MzQ1LDM4MzQ2LDM4MzQ3LDI2OTE2LDI2ODY0LDI2''@;'; put 'put ''ODkxLDI2ODgxLDI2OTY3LDI2ODUxLDI2ODk2LDI2OTkzLDI2OTM3LDI2OTc2LDI2OTQ2LDI2OTczLDI3MDEyLDI2OTg3LDI3MDA4LDI3MDMyLDI3ZTMsMjY5MzIsMjcwODQsMjcwMTUsMjcwMTYsMjcwODYsMjcwMTcsMjY5ODIsMjY5NzksMjcwMDEsMjcwMzUsMjcwNDcsMjcwNjcsMjcwNTEs''@;'; put 'put ''MjcwNTMsMjcwOTIsMjcwNTcsMjcwNzMsMjcwODIsMjcxMDMsMjcwMjksMjcxMDQsMjcwMjEsMjcxMzUsMjcxODMsMjcxMTcsMjcxNTksMjcxNjAsMjcyMzcsMjcxMjIsMjcyMDQsMjcxOTgsMjcyOTYsMjcyMTYsMjcyMjcsMjcxODksMjcyNzgsMjcyNTcsMjcxOTcsMjcxNzYsMjcyMjQsMjcy''@;'; put 'put ''NjAsMjcyODEsMjcyODAsMjczMDUsMjcyODcsMjczMDcsMjk0OTUsMjk1MjIsMjc1MjEsMjc1MjIsMjc1MjcsMjc1MjQsMjc1MzgsMjc1MzksMjc1MzMsMjc1NDYsMjc1NDcsMjc1NTMsMjc1NjIsMzY3MTUsMzY3MTcsMzY3MjEsMzY3MjIsMzY3MjMsMzY3MjUsMzY3MjYsMzY3MjgsMzY3Mjcs''@;'; put 'put ''MzY3MjksMzY3MzAsMzY3MzIsMzY3MzQsMzY3MzcsMzY3MzgsMzY3NDAsMzY3NDMsMzY3NDcsMzgzNDgsMzgzNDksMzgzNTAsMzgzNTEsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNTYsMzgzNTcsMzgzNTgsMzgzNTksMzgzNjAsMzgzNjEsMzgzNjIsMzgzNjMsMzgzNjQsMzgzNjUsMzgz''@;'; put 'put ''NjYsMzgzNjcsMzgzNjgsMzgzNjksMzgzNzAsMzgzNzEsMzgzNzIsMzgzNzMsMzgzNzQsMzgzNzUsMzgzODAsMzgzOTksMzg0MDcsMzg0MTksMzg0MjQsMzg0MjcsMzg0MzAsMzg0MzIsMzg0MzUsMzg0MzYsMzg0MzcsMzg0MzgsMzg0MzksMzg0NDAsMzg0NDEsMzg0NDMsMzg0NDQsMzg0NDUs''@;'; put 'put ''Mzg0NDcsMzg0NDgsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjIsMzg0NjUsMzg0NjcsMzg0NzQsMzg0NzgsMzg0NzksMzg0ODEsMzg0ODIsMzg0ODMsMzg0ODYsMzg0ODcsMzg0ODgsMzg0ODksMzg0OTAsMzg0OTIsMzg0OTMsMzg0OTQsMzg0OTYsMzg0OTksMzg1MDEsMzg1MDIsMzg1''@;'; put 'put ''MDcsMzg1MDksMzg1MTAsMzg1MTEsMzg1MTIsMzg1MTMsMzg1MTUsMzg1MjAsMzg1MjEsMzg1MjIsMzg1MjMsMzg1MjQsMzg1MjUsMzg1MjYsMzg1MjcsMzg1MjgsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzUsMzg1MzcsMzg1MzgsMzY3NDksMzY3NTAsMzY3NTEsMzY3NjAsMzY3NjIs''@;'; put 'put ''MzY1NTgsMjUwOTksMjUxMTEsMjUxMTUsMjUxMTksMjUxMjIsMjUxMjEsMjUxMjUsMjUxMjQsMjUxMzIsMzMyNTUsMjk5MzUsMjk5NDAsMjk5NTEsMjk5NjcsMjk5NjksMjk5NzEsMjU5MDgsMjYwOTQsMjYwOTUsMjYwOTYsMjYxMjIsMjYxMzcsMjY0ODIsMjYxMTUsMjYxMzMsMjYxMTIsMjg4''@;'; put 'put ''MDUsMjYzNTksMjYxNDEsMjYxNjQsMjYxNjEsMjYxNjYsMjYxNjUsMzI3NzQsMjYyMDcsMjYxOTYsMjYxNzcsMjYxOTEsMjYxOTgsMjYyMDksMjYxOTksMjYyMzEsMjYyNDQsMjYyNTIsMjYyNzksMjYyNjksMjYzMDIsMjYzMzEsMjYzMzIsMjYzNDIsMjYzNDUsMzYxNDYsMzYxNDcsMzYxNTAs''@;'; put 'put ''MzYxNTUsMzYxNTcsMzYxNjAsMzYxNjUsMzYxNjYsMzYxNjgsMzYxNjksMzYxNjcsMzYxNzMsMzYxODEsMzYxODUsMzUyNzEsMzUyNzQsMzUyNzUsMzUyNzYsMzUyNzgsMzUyNzksMzUyODAsMzUyODEsMjkyOTQsMjkzNDMsMjkyNzcsMjkyODYsMjkyOTUsMjkzMTAsMjkzMTEsMjkzMTYsMjkz''@;'; put 'put ''MjMsMjkzMjUsMjkzMjcsMjkzMzAsMjUzNTIsMjUzOTQsMjU1MjAsMzg1NDAsMzg1NDIsMzg1NDUsMzg1NDYsMzg1NDcsMzg1NDksMzg1NTAsMzg1NTQsMzg1NTUsMzg1NTcsMzg1NTgsMzg1NTksMzg1NjAsMzg1NjEsMzg1NjIsMzg1NjMsMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjgsMzg1Njks''@;'; put 'put ''Mzg1NzAsMzg1NzEsMzg1NzIsMzg1NzMsMzg1NzQsMzg1NzUsMzg1NzcsMzg1NzgsMzg1ODAsMzg1ODEsMzg1ODMsMzg1ODQsMzg1ODYsMzg1ODcsMzg1OTEsMzg1OTQsMzg1OTUsMzg2MDAsMzg2MDIsMzg2MDMsMzg2MDgsMzg2MDksMzg2MTEsMzg2MTIsMzg2MTQsMzg2MTUsMzg2MTYsMzg2''@;'; put 'put ''MTcsMzg2MTgsMzg2MTksMzg2MjAsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MjUsMzg2MjYsMzg2MjcsMzg2MjgsMzg2MjksMzg2MzAsMzg2MzEsMzg2MzUsMzg2MzYsMzg2MzcsMzg2MzgsMzg2NDAsMzg2NDEsMzg2NDIsMzg2NDQsMzg2NDUsMzg2NDgsMzg2NTAsMzg2NTEsMzg2NTIsMzg2NTMs''@;'; put 'put ''Mzg2NTUsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjYsMzg2NjcsMzg2NjgsMzg2NzIsMzg2NzMsMzg2NzQsMzg2NzYsMzg2NzcsMzg2NzksMzg2ODAsMzg2ODEsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODcsMzg2ODgsMjU2NjMsMjU4MTYsMzI3NzIsMjc2MjYsMjc2MzUsMjc2NDUsMjc2MzcsMjc2''@;'; put 'put ''NDEsMjc2NTMsMjc2NTUsMjc2NTQsMjc2NjEsMjc2NjksMjc2NzIsMjc2NzMsMjc2NzQsMjc2ODEsMjc2ODksMjc2ODQsMjc2OTAsMjc2OTgsMjU5MDksMjU5NDEsMjU5NjMsMjkyNjEsMjkyNjYsMjkyNzAsMjkyMzIsMzQ0MDIsMjEwMTQsMzI5MjcsMzI5MjQsMzI5MTUsMzI5NTYsMjYzNzgs''@;'; put 'put ''MzI5NTcsMzI5NDUsMzI5MzksMzI5NDEsMzI5NDgsMzI5NTEsMzI5OTksMzNlMywzMzAwMSwzMzAwMiwzMjk4NywzMjk2MiwzMjk2NCwzMjk4NSwzMjk3MywzMjk4MywyNjM4NCwzMjk4OSwzMzAwMywzMzAwOSwzMzAxMiwzMzAwNSwzMzAzNywzMzAzOCwzMzAxMCwzMzAyMCwyNjM4OSwzMzA0''@;'; put 'put ''MiwzNTkzMCwzMzA3OCwzMzA1NCwzMzA2OCwzMzA0OCwzMzA3NCwzMzA5NiwzMzEwMCwzMzEwNywzMzE0MCwzMzExMywzMzExNCwzMzEzNywzMzEyMCwzMzEyOSwzMzE0OCwzMzE0OSwzMzEzMywzMzEyNywyMjYwNSwyMzIyMSwzMzE2MCwzMzE1NCwzMzE2OSwyODM3MywzMzE4NywzMzE5NCwz''@;'; put 'put ''MzIyOCwyNjQwNiwzMzIyNiwzMzIxMSwzODY4OSwzODY5MCwzODY5MSwzODY5MiwzODY5MywzODY5NCwzODY5NSwzODY5NiwzODY5NywzODY5OSwzODcwMCwzODcwMiwzODcwMywzODcwNSwzODcwNywzODcwOCwzODcwOSwzODcxMCwzODcxMSwzODcxNCwzODcxNSwzODcxNiwzODcxNywzODcx''@;'; put 'put ''OSwzODcyMCwzODcyMSwzODcyMiwzODcyMywzODcyNCwzODcyNSwzODcyNiwzODcyNywzODcyOCwzODcyOSwzODczMCwzODczMSwzODczMiwzODczMywzODczNCwzODczNSwzODczNiwzODczNywzODc0MCwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0OCwzODc0OSwzODc1MSwzODc1NSwz''@;'; put 'put ''ODc1NiwzODc1OCwzODc1OSwzODc2MCwzODc2MiwzODc2MywzODc2NCwzODc2NSwzODc2NiwzODc2NywzODc2OCwzODc2OSwzODc3MCwzODc3MywzODc3NSwzODc3NiwzODc3NywzODc3OCwzODc3OSwzODc4MSwzODc4MiwzODc4MywzODc4NCwzODc4NSwzODc4NiwzODc4NywzODc4OCwzODc5''@;'; put 'put ''MCwzODc5MSwzODc5MiwzODc5MywzODc5NCwzODc5NiwzODc5OCwzODc5OSwzODgwMCwzODgwMywzODgwNSwzODgwNiwzODgwNywzODgwOSwzODgxMCwzODgxMSwzODgxMiwzODgxMywzMzIxNywzMzE5MCwyNzQyOCwyNzQ0NywyNzQ0OSwyNzQ1OSwyNzQ2MiwyNzQ4MSwzOTEyMSwzOTEyMiwz''@;'; put 'put ''OTEyMywzOTEyNSwzOTEyOSwzOTEzMCwyNzU3MSwyNDM4NCwyNzU4NiwzNTMxNSwyNmUzLDQwNzg1LDI2MDAzLDI2MDQ0LDI2MDU0LDI2MDUyLDI2MDUxLDI2MDYwLDI2MDYyLDI2MDY2LDI2MDcwLDI4ODAwLDI4ODI4LDI4ODIyLDI4ODI5LDI4ODU5LDI4ODY0LDI4ODU1LDI4ODQzLDI4ODQ5''@;'; put 'put ''LDI4OTA0LDI4ODc0LDI4OTQ0LDI4OTQ3LDI4OTUwLDI4OTc1LDI4OTc3LDI5MDQzLDI5MDIwLDI5MDMyLDI4OTk3LDI5MDQyLDI5MDAyLDI5MDQ4LDI5MDUwLDI5MDgwLDI5MTA3LDI5MTA5LDI5MDk2LDI5MDg4LDI5MTUyLDI5MTQwLDI5MTU5LDI5MTc3LDI5MjEzLDI5MjI0LDI4NzgwLDI4''@;'; put 'put ''OTUyLDI5MDMwLDI5MTEzLDI1MTUwLDI1MTQ5LDI1MTU1LDI1MTYwLDI1MTYxLDMxMDM1LDMxMDQwLDMxMDQ2LDMxMDQ5LDMxMDY3LDMxMDY4LDMxMDU5LDMxMDY2LDMxMDc0LDMxMDYzLDMxMDcyLDMxMDg3LDMxMDc5LDMxMDk4LDMxMTA5LDMxMTE0LDMxMTMwLDMxMTQzLDMxMTU1LDI0NTI5''@;'; put 'put ''LDI0NTI4LDM4ODE0LDM4ODE1LDM4ODE3LDM4ODE4LDM4ODIwLDM4ODIxLDM4ODIyLDM4ODIzLDM4ODI0LDM4ODI1LDM4ODI2LDM4ODI4LDM4ODMwLDM4ODMyLDM4ODMzLDM4ODM1LDM4ODM3LDM4ODM4LDM4ODM5LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQzLDM4ODQ0LDM4ODQ1LDM4ODQ2LDM4''@;'; put 'put ''ODQ3LDM4ODQ4LDM4ODQ5LDM4ODUwLDM4ODUxLDM4ODUyLDM4ODUzLDM4ODU0LDM4ODU1LDM4ODU2LDM4ODU3LDM4ODU4LDM4ODU5LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODYzLDM4ODY0LDM4ODY1LDM4ODY2LDM4ODY3LDM4ODY4LDM4ODY5LDM4ODcwLDM4ODcxLDM4ODcyLDM4ODczLDM4ODc0''@;'; put 'put ''LDM4ODc1LDM4ODc2LDM4ODc3LDM4ODc4LDM4ODc5LDM4ODgwLDM4ODgxLDM4ODgyLDM4ODgzLDM4ODg0LDM4ODg1LDM4ODg4LDM4ODk0LDM4ODk1LDM4ODk2LDM4ODk3LDM4ODk4LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA1LDM4OTA2LDM4OTA3LDM4OTA4LDM4OTA5LDM4OTEwLDM4OTExLDM4''@;'; put 'put ''OTEyLDM4OTEzLDM4OTE0LDM4OTE1LDM4OTE2LDM4OTE3LDM4OTE4LDM4OTE5LDM4OTIwLDM4OTIxLDM4OTIyLDM4OTIzLDM4OTI0LDM4OTI1LDM4OTI2LDI0NjM2LDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NjY1LDI0Njc1LDI0NzQ3LDI0ODM4LDI0ODQ1LDI0OTI1LDI1MDAxLDI0OTg5''@;'; put 'put ''LDI1MDM1LDI1MDQxLDI1MDk0LDMyODk2LDMyODk1LDI3Nzk1LDI3ODk0LDI4MTU2LDMwNzEwLDMwNzEyLDMwNzIwLDMwNzI5LDMwNzQzLDMwNzQ0LDMwNzM3LDI2MDI3LDMwNzY1LDMwNzQ4LDMwNzQ5LDMwNzc3LDMwNzc4LDMwNzc5LDMwNzUxLDMwNzgwLDMwNzU3LDMwNzY0LDMwNzU1LDMw''@;'; put 'put ''NzYxLDMwNzk4LDMwODI5LDMwODA2LDMwODA3LDMwNzU4LDMwODAwLDMwNzkxLDMwNzk2LDMwODI2LDMwODc1LDMwODY3LDMwODc0LDMwODU1LDMwODc2LDMwODgxLDMwODgzLDMwODk4LDMwOTA1LDMwODg1LDMwOTMyLDMwOTM3LDMwOTIxLDMwOTU2LDMwOTYyLDMwOTgxLDMwOTY0LDMwOTk1''@;'; put 'put ''LDMxMDEyLDMxMDA2LDMxMDI4LDQwODU5LDQwNjk3LDQwNjk5LDQwNzAwLDMwNDQ5LDMwNDY4LDMwNDc3LDMwNDU3LDMwNDcxLDMwNDcyLDMwNDkwLDMwNDk4LDMwNDg5LDMwNTA5LDMwNTAyLDMwNTE3LDMwNTIwLDMwNTQ0LDMwNTQ1LDMwNTM1LDMwNTMxLDMwNTU0LDMwNTY4LDM4OTI3LDM4''@;'; put 'put ''OTI4LDM4OTI5LDM4OTMwLDM4OTMxLDM4OTMyLDM4OTMzLDM4OTM0LDM4OTM1LDM4OTM2LDM4OTM3LDM4OTM4LDM4OTM5LDM4OTQwLDM4OTQxLDM4OTQyLDM4OTQzLDM4OTQ0LDM4OTQ1LDM4OTQ2LDM4OTQ3LDM4OTQ4LDM4OTQ5LDM4OTUwLDM4OTUxLDM4OTUyLDM4OTUzLDM4OTU0LDM4OTU1''@;'; put 'put ''LDM4OTU2LDM4OTU3LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYxLDM4OTYyLDM4OTYzLDM4OTY0LDM4OTY1LDM4OTY2LDM4OTY3LDM4OTY4LDM4OTY5LDM4OTcwLDM4OTcxLDM4OTcyLDM4OTczLDM4OTc0LDM4OTc1LDM4OTc2LDM4OTc3LDM4OTc4LDM4OTc5LDM4OTgwLDM4OTgxLDM4OTgyLDM4''@;'; put 'put ''OTgzLDM4OTg0LDM4OTg1LDM4OTg2LDM4OTg3LDM4OTg4LDM4OTg5LDM4OTkwLDM4OTkxLDM4OTkyLDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk2LDM4OTk3LDM4OTk4LDM4OTk5LDM5ZTMsMzkwMDEsMzkwMDIsMzkwMDMsMzkwMDQsMzkwMDUsMzkwMDYsMzkwMDcsMzkwMDgsMzkwMDksMzkwMTAs''@;'; put 'put ''MzkwMTEsMzkwMTIsMzkwMTMsMzkwMTQsMzkwMTUsMzkwMTYsMzkwMTcsMzkwMTgsMzkwMTksMzkwMjAsMzkwMjEsMzkwMjIsMzA1NjIsMzA1NjUsMzA1OTEsMzA2MDUsMzA1ODksMzA1OTIsMzA2MDQsMzA2MDksMzA2MjMsMzA2MjQsMzA2NDAsMzA2NDUsMzA2NTMsMzAwMTAsMzAwMTYsMzAw''@;'; put 'put ''MzAsMzAwMjcsMzAwMjQsMzAwNDMsMzAwNjYsMzAwNzMsMzAwODMsMzI2MDAsMzI2MDksMzI2MDcsMzU0MDAsMzI2MTYsMzI2MjgsMzI2MjUsMzI2MzMsMzI2NDEsMzI2MzgsMzA0MTMsMzA0MzcsMzQ4NjYsMzgwMjEsMzgwMjIsMzgwMjMsMzgwMjcsMzgwMjYsMzgwMjgsMzgwMjksMzgwMzEs''@;'; put 'put ''MzgwMzIsMzgwMzYsMzgwMzksMzgwMzcsMzgwNDIsMzgwNDMsMzgwNDQsMzgwNTEsMzgwNTIsMzgwNTksMzgwNTgsMzgwNjEsMzgwNjAsMzgwNjMsMzgwNjQsMzgwNjYsMzgwNjgsMzgwNzAsMzgwNzEsMzgwNzIsMzgwNzMsMzgwNzQsMzgwNzYsMzgwNzcsMzgwNzksMzgwODQsMzgwODgsMzgw''@;'; put 'put ''ODksMzgwOTAsMzgwOTEsMzgwOTIsMzgwOTMsMzgwOTQsMzgwOTYsMzgwOTcsMzgwOTgsMzgxMDEsMzgxMDIsMzgxMDMsMzgxMDUsMzgxMDQsMzgxMDcsMzgxMTAsMzgxMTEsMzgxMTIsMzgxMTQsMzgxMTYsMzgxMTcsMzgxMTksMzgxMjAsMzgxMjIsMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjYs''@;'; put 'put ''MzkwMjcsMzkwMjgsMzkwNTEsMzkwNTQsMzkwNTgsMzkwNjEsMzkwNjUsMzkwNzUsMzkwODAsMzkwODEsMzkwODIsMzkwODMsMzkwODQsMzkwODUsMzkwODYsMzkwODcsMzkwODgsMzkwODksMzkwOTAsMzkwOTEsMzkwOTIsMzkwOTMsMzkwOTQsMzkwOTUsMzkwOTYsMzkwOTcsMzkwOTgsMzkw''@;'; put 'put ''OTksMzkxMDAsMzkxMDEsMzkxMDIsMzkxMDMsMzkxMDQsMzkxMDUsMzkxMDYsMzkxMDcsMzkxMDgsMzkxMDksMzkxMTAsMzkxMTEsMzkxMTIsMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkxMTcsMzkxMTksMzkxMjAsMzkxMjQsMzkxMjYsMzkxMjcsMzkxMzEsMzkxMzIsMzkxMzMsMzkxMzYs''@;'; put 'put ''MzkxMzcsMzkxMzgsMzkxMzksMzkxNDAsMzkxNDEsMzkxNDIsMzkxNDUsMzkxNDYsMzkxNDcsMzkxNDgsMzkxNDksMzkxNTAsMzkxNTEsMzkxNTIsMzkxNTMsMzkxNTQsMzkxNTUsMzkxNTYsMzkxNTcsMzkxNTgsMzkxNTksMzkxNjAsMzkxNjEsMzkxNjIsMzkxNjMsMzkxNjQsMzkxNjUsMzkx''@;'; put 'put ''NjYsMzkxNjcsMzkxNjgsMzkxNjksMzkxNzAsMzkxNzEsMzkxNzIsMzkxNzMsMzkxNzQsMzkxNzUsMzgxMjEsMzgxMjMsMzgxMjYsMzgxMjcsMzgxMzEsMzgxMzIsMzgxMzMsMzgxMzUsMzgxMzcsMzgxNDAsMzgxNDEsMzgxNDMsMzgxNDcsMzgxNDYsMzgxNTAsMzgxNTEsMzgxNTMsMzgxNTQs''@;'; put 'put ''MzgxNTcsMzgxNTgsMzgxNTksMzgxNjIsMzgxNjMsMzgxNjQsMzgxNjUsMzgxNjYsMzgxNjgsMzgxNzEsMzgxNzMsMzgxNzQsMzgxNzUsMzgxNzgsMzgxODYsMzgxODcsMzgxODUsMzgxODgsMzgxOTMsMzgxOTQsMzgxOTYsMzgxOTgsMzgxOTksMzgyMDAsMzgyMDQsMzgyMDYsMzgyMDcsMzgy''@;'; put 'put ''MTAsMzgxOTcsMzgyMTIsMzgyMTMsMzgyMTQsMzgyMTcsMzgyMjAsMzgyMjIsMzgyMjMsMzgyMjYsMzgyMjcsMzgyMjgsMzgyMzAsMzgyMzEsMzgyMzIsMzgyMzMsMzgyMzUsMzgyMzgsMzgyMzksMzgyMzcsMzgyNDEsMzgyNDIsMzgyNDQsMzgyNDUsMzgyNDYsMzgyNDcsMzgyNDgsMzgyNDks''@;'; put 'put ''MzgyNTAsMzgyNTEsMzgyNTIsMzgyNTUsMzgyNTcsMzgyNTgsMzgyNTksMzgyMDIsMzA2OTUsMzA3MDAsMzg2MDEsMzExODksMzEyMTMsMzEyMDMsMzEyMTEsMzEyMzgsMjM4NzksMzEyMzUsMzEyMzQsMzEyNjIsMzEyNTIsMzkxNzYsMzkxNzcsMzkxNzgsMzkxNzksMzkxODAsMzkxODIsMzkx''@;'; put 'put ''ODMsMzkxODUsMzkxODYsMzkxODcsMzkxODgsMzkxODksMzkxOTAsMzkxOTEsMzkxOTIsMzkxOTMsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTcsMzkxOTgsMzkxOTksMzkyMDAsMzkyMDEsMzkyMDIsMzkyMDMsMzkyMDQsMzkyMDUsMzkyMDYsMzkyMDcsMzkyMDgsMzkyMDksMzkyMTAsMzkyMTEs''@;'; put 'put ''MzkyMTIsMzkyMTMsMzkyMTUsMzkyMTYsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjIsMzkyMjMsMzkyMjQsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMjksMzkyMzAsMzkyMzEsMzkyMzIsMzkyMzMsMzkyMzQsMzkyMzUsMzkyMzYsMzkyMzcsMzkyMzgsMzkyMzksMzky''@;'; put 'put ''NDAsMzkyNDEsMzkyNDIsMzkyNDMsMzkyNDQsMzkyNDUsMzkyNDYsMzkyNDcsMzkyNDgsMzkyNDksMzkyNTAsMzkyNTEsMzkyNTQsMzkyNTUsMzkyNTYsMzkyNTcsMzkyNTgsMzkyNTksMzkyNjAsMzkyNjEsMzkyNjIsMzkyNjMsMzkyNjQsMzkyNjUsMzkyNjYsMzkyNjgsMzkyNzAsMzkyODMs''@;'; put 'put ''MzkyODgsMzkyODksMzkyOTEsMzkyOTQsMzkyOTgsMzkyOTksMzkzMDUsMzEyODksMzEyODcsMzEzMTMsNDA2NTUsMzkzMzMsMzEzNDQsMzAzNDQsMzAzNTAsMzAzNTUsMzAzNjEsMzAzNzIsMjk5MTgsMjk5MjAsMjk5OTYsNDA0ODAsNDA0ODIsNDA0ODgsNDA0ODksNDA0OTAsNDA0OTEsNDA0''@;'; put 'put ''OTIsNDA0OTgsNDA0OTcsNDA1MDIsNDA1MDQsNDA1MDMsNDA1MDUsNDA1MDYsNDA1MTAsNDA1MTMsNDA1MTQsNDA1MTYsNDA1MTgsNDA1MTksNDA1MjAsNDA1MjEsNDA1MjMsNDA1MjQsNDA1MjYsNDA1MjksNDA1MzMsNDA1MzUsNDA1MzgsNDA1MzksNDA1NDAsNDA1NDIsNDA1NDcsNDA1NTAs''@;'; put 'put ''NDA1NTEsNDA1NTIsNDA1NTMsNDA1NTQsNDA1NTUsNDA1NTYsNDA1NjEsNDA1NTcsNDA1NjMsMzAwOTgsMzAxMDAsMzAxMDIsMzAxMTIsMzAxMDksMzAxMjQsMzAxMTUsMzAxMzEsMzAxMzIsMzAxMzYsMzAxNDgsMzAxMjksMzAxMjgsMzAxNDcsMzAxNDYsMzAxNjYsMzAxNTcsMzAxNzksMzAx''@;'; put 'put ''ODQsMzAxODIsMzAxODAsMzAxODcsMzAxODMsMzAyMTEsMzAxOTMsMzAyMDQsMzAyMDcsMzAyMjQsMzAyMDgsMzAyMTMsMzAyMjAsMzAyMzEsMzAyMTgsMzAyNDUsMzAyMzIsMzAyMjksMzAyMzMsMzkzMDgsMzkzMTAsMzkzMjIsMzkzMjMsMzkzMjQsMzkzMjUsMzkzMjYsMzkzMjcsMzkzMjgs''@;'; put 'put ''MzkzMjksMzkzMzAsMzkzMzEsMzkzMzIsMzkzMzQsMzkzMzUsMzkzMzcsMzkzMzgsMzkzMzksMzkzNDAsMzkzNDEsMzkzNDIsMzkzNDMsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDcsMzkzNDgsMzkzNDksMzkzNTAsMzkzNTEsMzkzNTIsMzkzNTMsMzkzNTQsMzkzNTUsMzkzNTYsMzkzNTcsMzkz''@;'; put 'put ''NTgsMzkzNTksMzkzNjAsMzkzNjEsMzkzNjIsMzkzNjMsMzkzNjQsMzkzNjUsMzkzNjYsMzkzNjcsMzkzNjgsMzkzNjksMzkzNzAsMzkzNzEsMzkzNzIsMzkzNzMsMzkzNzQsMzkzNzUsMzkzNzYsMzkzNzcsMzkzNzgsMzkzNzksMzkzODAsMzkzODEsMzkzODIsMzkzODMsMzkzODQsMzkzODUs''@;'; put 'put ''MzkzODYsMzkzODcsMzkzODgsMzkzODksMzkzOTAsMzkzOTEsMzkzOTIsMzkzOTMsMzkzOTQsMzkzOTUsMzkzOTYsMzkzOTcsMzkzOTgsMzkzOTksMzk0MDAsMzk0MDEsMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDUsMzk0MDYsMzk0MDcsMzk0MDgsMzk0MDksMzk0MTAsMzk0MTEsMzk0MTIsMzk0''@;'; put 'put ''MTMsMzk0MTQsMzk0MTUsMzk0MTYsMzk0MTcsMzAyMzUsMzAyNjgsMzAyNDIsMzAyNDAsMzAyNzIsMzAyNTMsMzAyNTYsMzAyNzEsMzAyNjEsMzAyNzUsMzAyNzAsMzAyNTksMzAyODUsMzAzMDIsMzAyOTIsMzAzMDAsMzAyOTQsMzAzMTUsMzAzMTksMzI3MTQsMzE0NjIsMzEzNTIsMzEzNTMs''@;'; put 'put ''MzEzNjAsMzEzNjYsMzEzNjgsMzEzODEsMzEzOTgsMzEzOTIsMzE0MDQsMzE0MDAsMzE0MDUsMzE0MTEsMzQ5MTYsMzQ5MjEsMzQ5MzAsMzQ5NDEsMzQ5NDMsMzQ5NDYsMzQ5NzgsMzUwMTQsMzQ5OTksMzUwMDQsMzUwMTcsMzUwNDIsMzUwMjIsMzUwNDMsMzUwNDUsMzUwNTcsMzUwOTgsMzUw''@;'; put 'put ''NjgsMzUwNDgsMzUwNzAsMzUwNTYsMzUxMDUsMzUwOTcsMzUwOTEsMzUwOTksMzUwODIsMzUxMjQsMzUxMTUsMzUxMjYsMzUxMzcsMzUxNzQsMzUxOTUsMzAwOTEsMzI5OTcsMzAzODYsMzAzODgsMzA2ODQsMzI3ODYsMzI3ODgsMzI3OTAsMzI3OTYsMzI4MDAsMzI4MDIsMzI4MDUsMzI4MDYs''@;'; put 'put ''MzI4MDcsMzI4MDksMzI4MDgsMzI4MTcsMzI3NzksMzI4MjEsMzI4MzUsMzI4MzgsMzI4NDUsMzI4NTAsMzI4NzMsMzI4ODEsMzUyMDMsMzkwMzIsMzkwNDAsMzkwNDMsMzk0MTgsMzk0MTksMzk0MjAsMzk0MjEsMzk0MjIsMzk0MjMsMzk0MjQsMzk0MjUsMzk0MjYsMzk0MjcsMzk0MjgsMzk0''@;'; put 'put ''MjksMzk0MzAsMzk0MzEsMzk0MzIsMzk0MzMsMzk0MzQsMzk0MzUsMzk0MzYsMzk0MzcsMzk0MzgsMzk0MzksMzk0NDAsMzk0NDEsMzk0NDIsMzk0NDMsMzk0NDQsMzk0NDUsMzk0NDYsMzk0NDcsMzk0NDgsMzk0NDksMzk0NTAsMzk0NTEsMzk0NTIsMzk0NTMsMzk0NTQsMzk0NTUsMzk0NTYs''@;'; put 'put ''Mzk0NTcsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjEsMzk0NjIsMzk0NjMsMzk0NjQsMzk0NjUsMzk0NjYsMzk0NjcsMzk0NjgsMzk0NjksMzk0NzAsMzk0NzEsMzk0NzIsMzk0NzMsMzk0NzQsMzk0NzUsMzk0NzYsMzk0NzcsMzk0NzgsMzk0NzksMzk0ODAsMzk0ODEsMzk0ODIsMzk0ODMsMzk0''@;'; put 'put ''ODQsMzk0ODUsMzk0ODYsMzk0ODcsMzk0ODgsMzk0ODksMzk0OTAsMzk0OTEsMzk0OTIsMzk0OTMsMzk0OTQsMzk0OTUsMzk0OTYsMzk0OTcsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDEsMzk1MDIsMzk1MDMsMzk1MDQsMzk1MDUsMzk1MDYsMzk1MDcsMzk1MDgsMzk1MDksMzk1MTAsMzk1MTEs''@;'; put 'put ''Mzk1MTIsMzk1MTMsMzkwNDksMzkwNTIsMzkwNTMsMzkwNTUsMzkwNjAsMzkwNjYsMzkwNjcsMzkwNzAsMzkwNzEsMzkwNzMsMzkwNzQsMzkwNzcsMzkwNzgsMzQzODEsMzQzODgsMzQ0MTIsMzQ0MTQsMzQ0MzEsMzQ0MjYsMzQ0MjgsMzQ0MjcsMzQ0NzIsMzQ0NDUsMzQ0NDMsMzQ0NzYsMzQ0''@;'; put 'put ''NjEsMzQ0NzEsMzQ0NjcsMzQ0NzQsMzQ0NTEsMzQ0NzMsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MTAsMzQ0ODAsMzQ0OTAsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ1MTEsMzQ0ODQsMzQ1MzcsMzQ1NDUsMzQ1NDYsMzQ1NDEsMzQ1NDcsMzQ1MTIsMzQ1NzksMzQ1MjYsMzQ1NDgsMzQ1MjcsMzQ1MjAs''@;'; put 'put ''MzQ1MTMsMzQ1NjMsMzQ1NjcsMzQ1NTIsMzQ1NjgsMzQ1NzAsMzQ1NzMsMzQ1NjksMzQ1OTUsMzQ2MTksMzQ1OTAsMzQ1OTcsMzQ2MDYsMzQ1ODYsMzQ2MjIsMzQ2MzIsMzQ2MTIsMzQ2MDksMzQ2MDEsMzQ2MTUsMzQ2MjMsMzQ2OTAsMzQ1OTQsMzQ2ODUsMzQ2ODYsMzQ2ODMsMzQ2NTYsMzQ2''@;'; put 'put ''NzIsMzQ2MzYsMzQ2NzAsMzQ2OTksMzQ2NDMsMzQ2NTksMzQ2ODQsMzQ2NjAsMzQ2NDksMzQ2NjEsMzQ3MDcsMzQ3MzUsMzQ3MjgsMzQ3NzAsMzk1MTQsMzk1MTUsMzk1MTYsMzk1MTcsMzk1MTgsMzk1MTksMzk1MjAsMzk1MjEsMzk1MjIsMzk1MjMsMzk1MjQsMzk1MjUsMzk1MjYsMzk1Mjcs''@;'; put 'put ''Mzk1MjgsMzk1MjksMzk1MzAsMzk1MzEsMzk1MzgsMzk1NTUsMzk1NjEsMzk1NjUsMzk1NjYsMzk1NzIsMzk1NzMsMzk1NzcsMzk1OTAsMzk1OTMsMzk1OTQsMzk1OTUsMzk1OTYsMzk1OTcsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDMsMzk2MDQsMzk2MDUsMzk2MDksMzk2MTEsMzk2MTMsMzk2''@;'; put 'put ''MTQsMzk2MTUsMzk2MTksMzk2MjAsMzk2MjIsMzk2MjMsMzk2MjQsMzk2MjUsMzk2MjYsMzk2MjksMzk2MzAsMzk2MzEsMzk2MzIsMzk2MzQsMzk2MzYsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDEsMzk2NDIsMzk2NDMsMzk2NDQsMzk2NDUsMzk2NDYsMzk2NDgsMzk2NTAsMzk2NTEsMzk2NTIs''@;'; put 'put ''Mzk2NTMsMzk2NTUsMzk2NTYsMzk2NTcsMzk2NTgsMzk2NjAsMzk2NjIsMzk2NjQsMzk2NjUsMzk2NjYsMzk2NjcsMzk2NjgsMzk2NjksMzk2NzAsMzk2NzEsMzk2NzIsMzk2NzQsMzk2NzYsMzk2NzcsMzk2NzgsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODQsMzk2ODUsMzk2ODYsMzQ3''@;'; put 'put ''NTgsMzQ2OTYsMzQ2OTMsMzQ3MzMsMzQ3MTEsMzQ2OTEsMzQ3MzEsMzQ3ODksMzQ3MzIsMzQ3NDEsMzQ3MzksMzQ3NjMsMzQ3NzEsMzQ3NDksMzQ3NjksMzQ3NTIsMzQ3NjIsMzQ3NzksMzQ3OTQsMzQ3ODQsMzQ3OTgsMzQ4MzgsMzQ4MzUsMzQ4MTQsMzQ4MjYsMzQ4NDMsMzQ4NDksMzQ4NzMs''@;'; put 'put ''MzQ4NzYsMzI1NjYsMzI1NzgsMzI1ODAsMzI1ODEsMzMyOTYsMzE0ODIsMzE0ODUsMzE0OTYsMzE0OTEsMzE0OTIsMzE1MDksMzE0OTgsMzE1MzEsMzE1MDMsMzE1NTksMzE1NDQsMzE1MzAsMzE1MTMsMzE1MzQsMzE1MzcsMzE1MjAsMzE1MjUsMzE1MjQsMzE1MzksMzE1NTAsMzE1MTgsMzE1''@;'; put 'put ''NzYsMzE1NzgsMzE1NTcsMzE2MDUsMzE1NjQsMzE1ODEsMzE1ODQsMzE1OTgsMzE2MTEsMzE1ODYsMzE2MDIsMzE2MDEsMzE2MzIsMzE2NTQsMzE2NTUsMzE2NzIsMzE2NjAsMzE2NDUsMzE2NTYsMzE2MjEsMzE2NTgsMzE2NDQsMzE2NTAsMzE2NTksMzE2NjgsMzE2OTcsMzE2ODEsMzE2OTIs''@;'; put 'put ''MzE3MDksMzE3MDYsMzE3MTcsMzE3MTgsMzE3MjIsMzE3NTYsMzE3NDIsMzE3NDAsMzE3NTksMzE3NjYsMzE3NTUsMzk2ODcsMzk2ODksMzk2OTAsMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTcsMzk2OTgsMzk3MDAsMzk3MDEsMzk3MDIsMzk3MDMsMzk3MDQsMzk3MDUsMzk3''@;'; put 'put ''MDYsMzk3MDcsMzk3MDgsMzk3MDksMzk3MTAsMzk3MTIsMzk3MTMsMzk3MTQsMzk3MTYsMzk3MTcsMzk3MTgsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjMsMzk3MjQsMzk3MjUsMzk3MjYsMzk3MjgsMzk3MjksMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzQsMzk3MzUsMzk3MzYsMzk3Mzcs''@;'; put 'put ''Mzk3MzgsMzk3NDEsMzk3NDIsMzk3NDMsMzk3NDQsMzk3NTAsMzk3NTQsMzk3NTUsMzk3NTYsMzk3NTgsMzk3NjAsMzk3NjIsMzk3NjMsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NjgsMzk3NjksMzk3NzAsMzk3NzEsMzk3NzIsMzk3NzMsMzk3NzQsMzk3NzUsMzk3NzYsMzk3NzcsMzk3NzgsMzk3''@;'; put 'put ''NzksMzk3ODAsMzk3ODEsMzk3ODIsMzk3ODMsMzk3ODQsMzk3ODUsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTEsMzk3OTIsMzk3OTMsMzk3OTQsMzk3OTUsMzk3OTYsMzk3OTcsMzk3OTgsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDIsMzk4MDMsMzE3NzUsMzE3ODYsMzE3ODIs''@;'; put 'put ''MzE4MDAsMzE4MDksMzE4MDgsMzMyNzgsMzMyODEsMzMyODIsMzMyODQsMzMyNjAsMzQ4ODQsMzMzMTMsMzMzMTQsMzMzMTUsMzMzMjUsMzMzMjcsMzMzMjAsMzMzMjMsMzMzMzYsMzMzMzksMzMzMzEsMzMzMzIsMzMzNDIsMzMzNDgsMzMzNTMsMzMzNTUsMzMzNTksMzMzNzAsMzMzNzUsMzMz''@;'; put 'put ''ODQsMzQ5NDIsMzQ5NDksMzQ5NTIsMzUwMzIsMzUwMzksMzUxNjYsMzI2NjksMzI2NzEsMzI2NzksMzI2ODcsMzI2ODgsMzI2OTAsMzE4NjgsMjU5MjksMzE4ODksMzE5MDEsMzE5MDAsMzE5MDIsMzE5MDYsMzE5MjIsMzE5MzIsMzE5MzMsMzE5MzcsMzE5NDMsMzE5NDgsMzE5NDksMzE5NDQs''@;'; put 'put ''MzE5NDEsMzE5NTksMzE5NzYsMzMzOTAsMjYyODAsMzI3MDMsMzI3MTgsMzI3MjUsMzI3NDEsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTAsMzI3NTUsMzE5OTIsMzIxMTksMzIxNjYsMzIxNzQsMzIzMjcsMzI0MTEsNDA2MzIsNDA2MjgsMzYyMTEsMzYyMjgsMzYyNDQsMzYyNDEsMzYyNzMsMzYx''@;'; put 'put ''OTksMzYyMDUsMzU5MTEsMzU5MTMsMzcxOTQsMzcyMDAsMzcxOTgsMzcxOTksMzcyMjAsMzk4MDQsMzk4MDUsMzk4MDYsMzk4MDcsMzk4MDgsMzk4MDksMzk4MTAsMzk4MTEsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTYsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjAsMzk4MjEsMzk4MjIs''@;'; put 'put ''Mzk4MjMsMzk4MjQsMzk4MjUsMzk4MjYsMzk4MjcsMzk4MjgsMzk4MjksMzk4MzAsMzk4MzEsMzk4MzIsMzk4MzMsMzk4MzQsMzk4MzUsMzk4MzYsMzk4MzcsMzk4MzgsMzk4MzksMzk4NDAsMzk4NDEsMzk4NDIsMzk4NDMsMzk4NDQsMzk4NDUsMzk4NDYsMzk4NDcsMzk4NDgsMzk4NDksMzk4''@;'; put 'put ''NTAsMzk4NTEsMzk4NTIsMzk4NTMsMzk4NTQsMzk4NTUsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NTksMzk4NjAsMzk4NjEsMzk4NjIsMzk4NjMsMzk4NjQsMzk4NjUsMzk4NjYsMzk4NjcsMzk4NjgsMzk4NjksMzk4NzAsMzk4NzEsMzk4NzIsMzk4NzMsMzk4NzQsMzk4NzUsMzk4NzYsMzk4Nzcs''@;'; put 'put ''Mzk4NzgsMzk4NzksMzk4ODAsMzk4ODEsMzk4ODIsMzk4ODMsMzk4ODQsMzk4ODUsMzk4ODYsMzk4ODcsMzk4ODgsMzk4ODksMzk4OTAsMzk4OTEsMzk4OTIsMzk4OTMsMzk4OTQsMzk4OTUsMzk4OTYsMzk4OTcsMzk4OTgsMzk4OTksMzcyMTgsMzcyMTcsMzcyMzIsMzcyMjUsMzcyMzEsMzcy''@;'; put 'put ''NDUsMzcyNDYsMzcyMzQsMzcyMzYsMzcyNDEsMzcyNjAsMzcyNTMsMzcyNjQsMzcyNjEsMzcyNjUsMzcyODIsMzcyODMsMzcyOTAsMzcyOTMsMzcyOTQsMzcyOTUsMzczMDEsMzczMDAsMzczMDYsMzU5MjUsNDA1NzQsMzYyODAsMzYzMzEsMzYzNTcsMzY0NDEsMzY0NTcsMzYyNzcsMzYyODcs''@;'; put 'put ''MzYyODQsMzYyODIsMzYyOTIsMzYzMTAsMzYzMTEsMzYzMTQsMzYzMTgsMzYzMDIsMzYzMDMsMzYzMTUsMzYyOTQsMzYzMzIsMzYzNDMsMzYzNDQsMzYzMjMsMzYzNDUsMzYzNDcsMzYzMjQsMzYzNjEsMzYzNDksMzYzNzIsMzYzODEsMzYzODMsMzYzOTYsMzYzOTgsMzYzODcsMzYzOTksMzY0''@;'; put 'put ''MTAsMzY0MTYsMzY0MDksMzY0MDUsMzY0MTMsMzY0MDEsMzY0MjUsMzY0MTcsMzY0MTgsMzY0MzMsMzY0MzQsMzY0MjYsMzY0NjQsMzY0NzAsMzY0NzYsMzY0NjMsMzY0NjgsMzY0ODUsMzY0OTUsMzY1MDAsMzY0OTYsMzY1MDgsMzY1MTAsMzU5NjAsMzU5NzAsMzU5NzgsMzU5NzMsMzU5OTIs''@;'; put 'put ''MzU5ODgsMjYwMTEsMzUyODYsMzUyOTQsMzUyOTAsMzUyOTIsMzk5MDAsMzk5MDEsMzk5MDIsMzk5MDMsMzk5MDQsMzk5MDUsMzk5MDYsMzk5MDcsMzk5MDgsMzk5MDksMzk5MTAsMzk5MTEsMzk5MTIsMzk5MTMsMzk5MTQsMzk5MTUsMzk5MTYsMzk5MTcsMzk5MTgsMzk5MTksMzk5MjAsMzk5''@;'; put 'put ''MjEsMzk5MjIsMzk5MjMsMzk5MjQsMzk5MjUsMzk5MjYsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzEsMzk5MzIsMzk5MzMsMzk5MzQsMzk5MzUsMzk5MzYsMzk5MzcsMzk5MzgsMzk5MzksMzk5NDAsMzk5NDEsMzk5NDIsMzk5NDMsMzk5NDQsMzk5NDUsMzk5NDYsMzk5NDcsMzk5NDgs''@;'; put 'put ''Mzk5NDksMzk5NTAsMzk5NTEsMzk5NTIsMzk5NTMsMzk5NTQsMzk5NTUsMzk5NTYsMzk5NTcsMzk5NTgsMzk5NTksMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjMsMzk5NjQsMzk5NjUsMzk5NjYsMzk5NjcsMzk5NjgsMzk5NjksMzk5NzAsMzk5NzEsMzk5NzIsMzk5NzMsMzk5NzQsMzk5NzUsMzk5''@;'; put 'put ''NzYsMzk5NzcsMzk5NzgsMzk5NzksMzk5ODAsMzk5ODEsMzk5ODIsMzk5ODMsMzk5ODQsMzk5ODUsMzk5ODYsMzk5ODcsMzk5ODgsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTIsMzk5OTMsMzk5OTQsMzk5OTUsMzUzMDEsMzUzMDcsMzUzMTEsMzUzOTAsMzU2MjIsMzg3MzksMzg2MzMsMzg2NDMs''@;'; put 'put ''Mzg2MzksMzg2NjIsMzg2NTcsMzg2NjQsMzg2NzEsMzg2NzAsMzg2OTgsMzg3MDEsMzg3MDQsMzg3MTgsNDA4MzIsNDA4MzUsNDA4MzcsNDA4MzgsNDA4MzksNDA4NDAsNDA4NDEsNDA4NDIsNDA4NDQsNDA3MDIsNDA3MTUsNDA3MTcsMzg1ODUsMzg1ODgsMzg1ODksMzg2MDYsMzg2MTAsMzA2''@;'; put 'put ''NTUsMzg2MjQsMzc1MTgsMzc1NTAsMzc1NzYsMzc2OTQsMzc3MzgsMzc4MzQsMzc3NzUsMzc5NTAsMzc5OTUsNDAwNjMsNDAwNjYsNDAwNjksNDAwNzAsNDAwNzEsNDAwNzIsMzEyNjcsNDAwNzUsNDAwNzgsNDAwODAsNDAwODEsNDAwODIsNDAwODQsNDAwODUsNDAwOTAsNDAwOTEsNDAwOTQs''@;'; put 'put ''NDAwOTUsNDAwOTYsNDAwOTcsNDAwOTgsNDAwOTksNDAxMDEsNDAxMDIsNDAxMDMsNDAxMDQsNDAxMDUsNDAxMDcsNDAxMDksNDAxMTAsNDAxMTIsNDAxMTMsNDAxMTQsNDAxMTUsNDAxMTYsNDAxMTcsNDAxMTgsNDAxMTksNDAxMjIsNDAxMjMsNDAxMjQsNDAxMjUsNDAxMzIsNDAxMzMsNDAx''@;'; put 'put ''MzQsNDAxMzUsNDAxMzgsNDAxMzksMzk5OTYsMzk5OTcsMzk5OTgsMzk5OTksNGU0LDQwMDAxLDQwMDAyLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA2LDQwMDA3LDQwMDA4LDQwMDA5LDQwMDEwLDQwMDExLDQwMDEyLDQwMDEzLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE3LDQwMDE4LDQwMDE5LDQw''@;'; put 'put ''MDIwLDQwMDIxLDQwMDIyLDQwMDIzLDQwMDI0LDQwMDI1LDQwMDI2LDQwMDI3LDQwMDI4LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDMyLDQwMDMzLDQwMDM0LDQwMDM1LDQwMDM2LDQwMDM3LDQwMDM4LDQwMDM5LDQwMDQwLDQwMDQxLDQwMDQyLDQwMDQzLDQwMDQ0LDQwMDQ1LDQwMDQ2LDQwMDQ3''@;'; put 'put ''LDQwMDQ4LDQwMDQ5LDQwMDUwLDQwMDUxLDQwMDUyLDQwMDUzLDQwMDU0LDQwMDU1LDQwMDU2LDQwMDU3LDQwMDU4LDQwMDU5LDQwMDYxLDQwMDYyLDQwMDY0LDQwMDY3LDQwMDY4LDQwMDczLDQwMDc0LDQwMDc2LDQwMDc5LDQwMDgzLDQwMDg2LDQwMDg3LDQwMDg4LDQwMDg5LDQwMDkzLDQw''@;'; put 'put ''MTA2LDQwMTA4LDQwMTExLDQwMTIxLDQwMTI2LDQwMTI3LDQwMTI4LDQwMTI5LDQwMTMwLDQwMTM2LDQwMTM3LDQwMTQ1LDQwMTQ2LDQwMTU0LDQwMTU1LDQwMTYwLDQwMTYxLDQwMTQwLDQwMTQxLDQwMTQyLDQwMTQzLDQwMTQ0LDQwMTQ3LDQwMTQ4LDQwMTQ5LDQwMTUxLDQwMTUyLDQwMTUz''@;'; put 'put ''LDQwMTU2LDQwMTU3LDQwMTU5LDQwMTYyLDM4NzgwLDM4Nzg5LDM4ODAxLDM4ODAyLDM4ODA0LDM4ODMxLDM4ODI3LDM4ODE5LDM4ODM0LDM4ODM2LDM5NjAxLDM5NjAwLDM5NjA3LDQwNTM2LDM5NjA2LDM5NjEwLDM5NjEyLDM5NjE3LDM5NjE2LDM5NjIxLDM5NjE4LDM5NjI3LDM5NjI4LDM5''@;'; put 'put ''NjMzLDM5NzQ5LDM5NzQ3LDM5NzUxLDM5NzUzLDM5NzUyLDM5NzU3LDM5NzYxLDM5MTQ0LDM5MTgxLDM5MjE0LDM5MjUzLDM5MjUyLDM5NjQ3LDM5NjQ5LDM5NjU0LDM5NjYzLDM5NjU5LDM5Njc1LDM5NjYxLDM5NjczLDM5Njg4LDM5Njk1LDM5Njk5LDM5NzExLDM5NzE1LDQwNjM3LDQwNjM4''@;'; put 'put ''LDMyMzE1LDQwNTc4LDQwNTgzLDQwNTg0LDQwNTg3LDQwNTk0LDM3ODQ2LDQwNjA1LDQwNjA3LDQwNjY3LDQwNjY4LDQwNjY5LDQwNjcyLDQwNjcxLDQwNjc0LDQwNjgxLDQwNjc5LDQwNjc3LDQwNjgyLDQwNjg3LDQwNzM4LDQwNzQ4LDQwNzUxLDQwNzYxLDQwNzU5LDQwNzY1LDQwNzY2LDQw''@;'; put 'put ''NzcyLDQwMTYzLDQwMTY0LDQwMTY1LDQwMTY2LDQwMTY3LDQwMTY4LDQwMTY5LDQwMTcwLDQwMTcxLDQwMTcyLDQwMTczLDQwMTc0LDQwMTc1LDQwMTc2LDQwMTc3LDQwMTc4LDQwMTc5LDQwMTgwLDQwMTgxLDQwMTgyLDQwMTgzLDQwMTg0LDQwMTg1LDQwMTg2LDQwMTg3LDQwMTg4LDQwMTg5''@;'; put 'put ''LDQwMTkwLDQwMTkxLDQwMTkyLDQwMTkzLDQwMTk0LDQwMTk1LDQwMTk2LDQwMTk3LDQwMTk4LDQwMTk5LDQwMjAwLDQwMjAxLDQwMjAyLDQwMjAzLDQwMjA0LDQwMjA1LDQwMjA2LDQwMjA3LDQwMjA4LDQwMjA5LDQwMjEwLDQwMjExLDQwMjEyLDQwMjEzLDQwMjE0LDQwMjE1LDQwMjE2LDQw''@;'; put 'put ''MjE3LDQwMjE4LDQwMjE5LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjIzLDQwMjI0LDQwMjI1LDQwMjI2LDQwMjI3LDQwMjI4LDQwMjI5LDQwMjMwLDQwMjMxLDQwMjMyLDQwMjMzLDQwMjM0LDQwMjM1LDQwMjM2LDQwMjM3LDQwMjM4LDQwMjM5LDQwMjQwLDQwMjQxLDQwMjQyLDQwMjQzLDQwMjQ0''@;'; put 'put ''LDQwMjQ1LDQwMjQ2LDQwMjQ3LDQwMjQ4LDQwMjQ5LDQwMjUwLDQwMjUxLDQwMjUyLDQwMjUzLDQwMjU0LDQwMjU1LDQwMjU2LDQwMjU3LDQwMjU4LDU3OTA4LDU3OTA5LDU3OTEwLDU3OTExLDU3OTEyLDU3OTEzLDU3OTE0LDU3OTE1LDU3OTE2LDU3OTE3LDU3OTE4LDU3OTE5LDU3OTIwLDU3''@;'; put 'put ''OTIxLDU3OTIyLDU3OTIzLDU3OTI0LDU3OTI1LDU3OTI2LDU3OTI3LDU3OTI4LDU3OTI5LDU3OTMwLDU3OTMxLDU3OTMyLDU3OTMzLDU3OTM0LDU3OTM1LDU3OTM2LDU3OTM3LDU3OTM4LDU3OTM5LDU3OTQwLDU3OTQxLDU3OTQyLDU3OTQzLDU3OTQ0LDU3OTQ1LDU3OTQ2LDU3OTQ3LDU3OTQ4''@;'; put 'put ''LDU3OTQ5LDU3OTUwLDU3OTUxLDU3OTUyLDU3OTUzLDU3OTU0LDU3OTU1LDU3OTU2LDU3OTU3LDU3OTU4LDU3OTU5LDU3OTYwLDU3OTYxLDU3OTYyLDU3OTYzLDU3OTY0LDU3OTY1LDU3OTY2LDU3OTY3LDU3OTY4LDU3OTY5LDU3OTcwLDU3OTcxLDU3OTcyLDU3OTczLDU3OTc0LDU3OTc1LDU3''@;'; put 'put ''OTc2LDU3OTc3LDU3OTc4LDU3OTc5LDU3OTgwLDU3OTgxLDU3OTgyLDU3OTgzLDU3OTg0LDU3OTg1LDU3OTg2LDU3OTg3LDU3OTg4LDU3OTg5LDU3OTkwLDU3OTkxLDU3OTkyLDU3OTkzLDU3OTk0LDU3OTk1LDU3OTk2LDU3OTk3LDU3OTk4LDU3OTk5LDU4ZTMsNTgwMDEsNDAyNTksNDAyNjAs''@;'; put 'put ''NDAyNjEsNDAyNjIsNDAyNjMsNDAyNjQsNDAyNjUsNDAyNjYsNDAyNjcsNDAyNjgsNDAyNjksNDAyNzAsNDAyNzEsNDAyNzIsNDAyNzMsNDAyNzQsNDAyNzUsNDAyNzYsNDAyNzcsNDAyNzgsNDAyNzksNDAyODAsNDAyODEsNDAyODIsNDAyODMsNDAyODQsNDAyODUsNDAyODYsNDAyODcsNDAy''@;'; put 'put ''ODgsNDAyODksNDAyOTAsNDAyOTEsNDAyOTIsNDAyOTMsNDAyOTQsNDAyOTUsNDAyOTYsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDAsNDAzMDEsNDAzMDIsNDAzMDMsNDAzMDQsNDAzMDUsNDAzMDYsNDAzMDcsNDAzMDgsNDAzMDksNDAzMTAsNDAzMTEsNDAzMTIsNDAzMTMsNDAzMTQsNDAzMTUs''@;'; put 'put ''NDAzMTYsNDAzMTcsNDAzMTgsNDAzMTksNDAzMjAsNDAzMjEsNDAzMjIsNDAzMjMsNDAzMjQsNDAzMjUsNDAzMjYsNDAzMjcsNDAzMjgsNDAzMjksNDAzMzAsNDAzMzEsNDAzMzIsNDAzMzMsNDAzMzQsNDAzMzUsNDAzMzYsNDAzMzcsNDAzMzgsNDAzMzksNDAzNDAsNDAzNDEsNDAzNDIsNDAz''@;'; put 'put ''NDMsNDAzNDQsNDAzNDUsNDAzNDYsNDAzNDcsNDAzNDgsNDAzNDksNDAzNTAsNDAzNTEsNDAzNTIsNDAzNTMsNDAzNTQsNTgwMDIsNTgwMDMsNTgwMDQsNTgwMDUsNTgwMDYsNTgwMDcsNTgwMDgsNTgwMDksNTgwMTAsNTgwMTEsNTgwMTIsNTgwMTMsNTgwMTQsNTgwMTUsNTgwMTYsNTgwMTcs''@;'; put 'put ''NTgwMTgsNTgwMTksNTgwMjAsNTgwMjEsNTgwMjIsNTgwMjMsNTgwMjQsNTgwMjUsNTgwMjYsNTgwMjcsNTgwMjgsNTgwMjksNTgwMzAsNTgwMzEsNTgwMzIsNTgwMzMsNTgwMzQsNTgwMzUsNTgwMzYsNTgwMzcsNTgwMzgsNTgwMzksNTgwNDAsNTgwNDEsNTgwNDIsNTgwNDMsNTgwNDQsNTgw''@;'; put 'put ''NDUsNTgwNDYsNTgwNDcsNTgwNDgsNTgwNDksNTgwNTAsNTgwNTEsNTgwNTIsNTgwNTMsNTgwNTQsNTgwNTUsNTgwNTYsNTgwNTcsNTgwNTgsNTgwNTksNTgwNjAsNTgwNjEsNTgwNjIsNTgwNjMsNTgwNjQsNTgwNjUsNTgwNjYsNTgwNjcsNTgwNjgsNTgwNjksNTgwNzAsNTgwNzEsNTgwNzIs''@;'; put 'put ''NTgwNzMsNTgwNzQsNTgwNzUsNTgwNzYsNTgwNzcsNTgwNzgsNTgwNzksNTgwODAsNTgwODEsNTgwODIsNTgwODMsNTgwODQsNTgwODUsNTgwODYsNTgwODcsNTgwODgsNTgwODksNTgwOTAsNTgwOTEsNTgwOTIsNTgwOTMsNTgwOTQsNTgwOTUsNDAzNTUsNDAzNTYsNDAzNTcsNDAzNTgsNDAz''@;'; put 'put ''NTksNDAzNjAsNDAzNjEsNDAzNjIsNDAzNjMsNDAzNjQsNDAzNjUsNDAzNjYsNDAzNjcsNDAzNjgsNDAzNjksNDAzNzAsNDAzNzEsNDAzNzIsNDAzNzMsNDAzNzQsNDAzNzUsNDAzNzYsNDAzNzcsNDAzNzgsNDAzNzksNDAzODAsNDAzODEsNDAzODIsNDAzODMsNDAzODQsNDAzODUsNDAzODYs''@;'; put 'put ''NDAzODcsNDAzODgsNDAzODksNDAzOTAsNDAzOTEsNDAzOTIsNDAzOTMsNDAzOTQsNDAzOTUsNDAzOTYsNDAzOTcsNDAzOTgsNDAzOTksNDA0MDAsNDA0MDEsNDA0MDIsNDA0MDMsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MDgsNDA0MDksNDA0MTAsNDA0MTEsNDA0MTIsNDA0MTMsNDA0''@;'; put 'put ''MTQsNDA0MTUsNDA0MTYsNDA0MTcsNDA0MTgsNDA0MTksNDA0MjAsNDA0MjEsNDA0MjIsNDA0MjMsNDA0MjQsNDA0MjUsNDA0MjYsNDA0MjcsNDA0MjgsNDA0MjksNDA0MzAsNDA0MzEsNDA0MzIsNDA0MzMsNDA0MzQsNDA0MzUsNDA0MzYsNDA0MzcsNDA0MzgsNDA0MzksNDA0NDAsNDA0NDEs''@;'; put 'put ''NDA0NDIsNDA0NDMsNDA0NDQsNDA0NDUsNDA0NDYsNDA0NDcsNDA0NDgsNDA0NDksNDA0NTAsNTgwOTYsNTgwOTcsNTgwOTgsNTgwOTksNTgxMDAsNTgxMDEsNTgxMDIsNTgxMDMsNTgxMDQsNTgxMDUsNTgxMDYsNTgxMDcsNTgxMDgsNTgxMDksNTgxMTAsNTgxMTEsNTgxMTIsNTgxMTMsNTgx''@;'; put 'put ''MTQsNTgxMTUsNTgxMTYsNTgxMTcsNTgxMTgsNTgxMTksNTgxMjAsNTgxMjEsNTgxMjIsNTgxMjMsNTgxMjQsNTgxMjUsNTgxMjYsNTgxMjcsNTgxMjgsNTgxMjksNTgxMzAsNTgxMzEsNTgxMzIsNTgxMzMsNTgxMzQsNTgxMzUsNTgxMzYsNTgxMzcsNTgxMzgsNTgxMzksNTgxNDAsNTgxNDEs''@;'; put 'put ''NTgxNDIsNTgxNDMsNTgxNDQsNTgxNDUsNTgxNDYsNTgxNDcsNTgxNDgsNTgxNDksNTgxNTAsNTgxNTEsNTgxNTIsNTgxNTMsNTgxNTQsNTgxNTUsNTgxNTYsNTgxNTcsNTgxNTgsNTgxNTksNTgxNjAsNTgxNjEsNTgxNjIsNTgxNjMsNTgxNjQsNTgxNjUsNTgxNjYsNTgxNjcsNTgxNjgsNTgx''@;'; put 'put ''NjksNTgxNzAsNTgxNzEsNTgxNzIsNTgxNzMsNTgxNzQsNTgxNzUsNTgxNzYsNTgxNzcsNTgxNzgsNTgxNzksNTgxODAsNTgxODEsNTgxODIsNTgxODMsNTgxODQsNTgxODUsNTgxODYsNTgxODcsNTgxODgsNTgxODksNDA0NTEsNDA0NTIsNDA0NTMsNDA0NTQsNDA0NTUsNDA0NTYsNDA0NTcs''@;'; put 'put ''NDA0NTgsNDA0NTksNDA0NjAsNDA0NjEsNDA0NjIsNDA0NjMsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjcsNDA0NjgsNDA0NjksNDA0NzAsNDA0NzEsNDA0NzIsNDA0NzMsNDA0NzQsNDA0NzUsNDA0NzYsNDA0NzcsNDA0NzgsNDA0ODQsNDA0ODcsNDA0OTQsNDA0OTYsNDA1MDAsNDA1MDcsNDA1''@;'; put 'put ''MDgsNDA1MTIsNDA1MjUsNDA1MjgsNDA1MzAsNDA1MzEsNDA1MzIsNDA1MzQsNDA1MzcsNDA1NDEsNDA1NDMsNDA1NDQsNDA1NDUsNDA1NDYsNDA1NDksNDA1NTgsNDA1NTksNDA1NjIsNDA1NjQsNDA1NjUsNDA1NjYsNDA1NjcsNDA1NjgsNDA1NjksNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzMs''@;'; put 'put ''NDA1NzYsNDA1NzcsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODIsNDA1ODUsNDA1ODYsNDA1ODgsNDA1ODksNDA1OTAsNDA1OTEsNDA1OTIsNDA1OTMsNDA1OTYsNDA1OTcsNDA1OTgsNDA1OTksNDA2MDAsNDA2MDEsNDA2MDIsNDA2MDMsNDA2MDQsNDA2MDYsNDA2MDgsNDA2MDksNDA2MTAsNDA2''@;'; put 'put ''MTEsNDA2MTIsNDA2MTMsNDA2MTUsNDA2MTYsNDA2MTcsNDA2MTgsNTgxOTAsNTgxOTEsNTgxOTIsNTgxOTMsNTgxOTQsNTgxOTUsNTgxOTYsNTgxOTcsNTgxOTgsNTgxOTksNTgyMDAsNTgyMDEsNTgyMDIsNTgyMDMsNTgyMDQsNTgyMDUsNTgyMDYsNTgyMDcsNTgyMDgsNTgyMDksNTgyMTAs''@;'; put 'put ''NTgyMTEsNTgyMTIsNTgyMTMsNTgyMTQsNTgyMTUsNTgyMTYsNTgyMTcsNTgyMTgsNTgyMTksNTgyMjAsNTgyMjEsNTgyMjIsNTgyMjMsNTgyMjQsNTgyMjUsNTgyMjYsNTgyMjcsNTgyMjgsNTgyMjksNTgyMzAsNTgyMzEsNTgyMzIsNTgyMzMsNTgyMzQsNTgyMzUsNTgyMzYsNTgyMzcsNTgy''@;'; put 'put ''MzgsNTgyMzksNTgyNDAsNTgyNDEsNTgyNDIsNTgyNDMsNTgyNDQsNTgyNDUsNTgyNDYsNTgyNDcsNTgyNDgsNTgyNDksNTgyNTAsNTgyNTEsNTgyNTIsNTgyNTMsNTgyNTQsNTgyNTUsNTgyNTYsNTgyNTcsNTgyNTgsNTgyNTksNTgyNjAsNTgyNjEsNTgyNjIsNTgyNjMsNTgyNjQsNTgyNjUs''@;'; put 'put ''NTgyNjYsNTgyNjcsNTgyNjgsNTgyNjksNTgyNzAsNTgyNzEsNTgyNzIsNTgyNzMsNTgyNzQsNTgyNzUsNTgyNzYsNTgyNzcsNTgyNzgsNTgyNzksNTgyODAsNTgyODEsNTgyODIsNTgyODMsNDA2MTksNDA2MjAsNDA2MjEsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjUsNDA2MjYsNDA2MjcsNDA2''@;'; put 'put ''MjksNDA2MzAsNDA2MzEsNDA2MzMsNDA2MzQsNDA2MzYsNDA2MzksNDA2NDAsNDA2NDEsNDA2NDIsNDA2NDMsNDA2NDUsNDA2NDYsNDA2NDcsNDA2NDgsNDA2NTAsNDA2NTEsNDA2NTIsNDA2NTYsNDA2NTgsNDA2NTksNDA2NjEsNDA2NjIsNDA2NjMsNDA2NjUsNDA2NjYsNDA2NzAsNDA2NzMs''@;'; put 'put ''NDA2NzUsNDA2NzYsNDA2NzgsNDA2ODAsNDA2ODMsNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTEsNDA2OTIsNDA2OTMsNDA2OTQsNDA2OTUsNDA2OTYsNDA2OTgsNDA3MDEsNDA3MDMsNDA3MDQsNDA3MDUsNDA3MDYsNDA3MDcsNDA3MDgsNDA3MDksNDA3MTAsNDA3''@;'; put 'put ''MTEsNDA3MTIsNDA3MTMsNDA3MTQsNDA3MTYsNDA3MTksNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjUsNDA3MjYsNDA3MjgsNDA3MzAsNDA3MzEsNDA3MzIsNDA3MzMsNDA3MzQsNDA3MzUsNDA3MzcsNDA3MzksNDA3NDAsNDA3NDEsNDA3NDIsNDA3NDMsNDA3NDQsNDA3NDUsNDA3NDYsNDA3NDcs''@;'; put 'put ''NDA3NDksNDA3NTAsNDA3NTIsNDA3NTMsNTgyODQsNTgyODUsNTgyODYsNTgyODcsNTgyODgsNTgyODksNTgyOTAsNTgyOTEsNTgyOTIsNTgyOTMsNTgyOTQsNTgyOTUsNTgyOTYsNTgyOTcsNTgyOTgsNTgyOTksNTgzMDAsNTgzMDEsNTgzMDIsNTgzMDMsNTgzMDQsNTgzMDUsNTgzMDYsNTgz''@;'; put 'put ''MDcsNTgzMDgsNTgzMDksNTgzMTAsNTgzMTEsNTgzMTIsNTgzMTMsNTgzMTQsNTgzMTUsNTgzMTYsNTgzMTcsNTgzMTgsNTgzMTksNTgzMjAsNTgzMjEsNTgzMjIsNTgzMjMsNTgzMjQsNTgzMjUsNTgzMjYsNTgzMjcsNTgzMjgsNTgzMjksNTgzMzAsNTgzMzEsNTgzMzIsNTgzMzMsNTgzMzQs''@;'; put 'put ''NTgzMzUsNTgzMzYsNTgzMzcsNTgzMzgsNTgzMzksNTgzNDAsNTgzNDEsNTgzNDIsNTgzNDMsNTgzNDQsNTgzNDUsNTgzNDYsNTgzNDcsNTgzNDgsNTgzNDksNTgzNTAsNTgzNTEsNTgzNTIsNTgzNTMsNTgzNTQsNTgzNTUsNTgzNTYsNTgzNTcsNTgzNTgsNTgzNTksNTgzNjAsNTgzNjEsNTgz''@;'; put 'put ''NjIsNTgzNjMsNTgzNjQsNTgzNjUsNTgzNjYsNTgzNjcsNTgzNjgsNTgzNjksNTgzNzAsNTgzNzEsNTgzNzIsNTgzNzMsNTgzNzQsNTgzNzUsNTgzNzYsNTgzNzcsNDA3NTQsNDA3NTUsNDA3NTYsNDA3NTcsNDA3NTgsNDA3NjAsNDA3NjIsNDA3NjQsNDA3NjcsNDA3NjgsNDA3NjksNDA3NzAs''@;'; put 'put ''NDA3NzEsNDA3NzMsNDA3NzQsNDA3NzUsNDA3NzYsNDA3NzcsNDA3NzgsNDA3NzksNDA3ODAsNDA3ODEsNDA3ODIsNDA3ODMsNDA3ODYsNDA3ODcsNDA3ODgsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTMsNDA3OTQsNDA3OTUsNDA3OTYsNDA3OTcsNDA3OTgsNDA3OTksNDA4MDAsNDA4''@;'; put 'put ''MDEsNDA4MDIsNDA4MDMsNDA4MDQsNDA4MDUsNDA4MDYsNDA4MDcsNDA4MDgsNDA4MDksNDA4MTAsNDA4MTEsNDA4MTIsNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTgsNDA4MTksNDA4MjAsNDA4MjEsNDA4MjIsNDA4MjMsNDA4MjQsNDA4MjUsNDA4MjYsNDA4MjcsNDA4Mjgs''@;'; put 'put ''NDA4MjksNDA4MzAsNDA4MzMsNDA4MzQsNDA4NDUsNDA4NDYsNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTEsNDA4NTIsNDA4NTMsNDA4NTQsNDA4NTUsNDA4NTYsNDA4NjAsNDA4NjEsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjgsNDA4NjksNjM3ODgsNjM4NjUsNjM4OTMsNjM5''@;'; put 'put ''NzUsNjM5ODUsNTgzNzgsNTgzNzksNTgzODAsNTgzODEsNTgzODIsNTgzODMsNTgzODQsNTgzODUsNTgzODYsNTgzODcsNTgzODgsNTgzODksNTgzOTAsNTgzOTEsNTgzOTIsNTgzOTMsNTgzOTQsNTgzOTUsNTgzOTYsNTgzOTcsNTgzOTgsNTgzOTksNTg0MDAsNTg0MDEsNTg0MDIsNTg0MDMs''@;'; put 'put ''NTg0MDQsNTg0MDUsNTg0MDYsNTg0MDcsNTg0MDgsNTg0MDksNTg0MTAsNTg0MTEsNTg0MTIsNTg0MTMsNTg0MTQsNTg0MTUsNTg0MTYsNTg0MTcsNTg0MTgsNTg0MTksNTg0MjAsNTg0MjEsNTg0MjIsNTg0MjMsNTg0MjQsNTg0MjUsNTg0MjYsNTg0MjcsNTg0MjgsNTg0MjksNTg0MzAsNTg0''@;'; put 'put ''MzEsNTg0MzIsNTg0MzMsNTg0MzQsNTg0MzUsNTg0MzYsNTg0MzcsNTg0MzgsNTg0MzksNTg0NDAsNTg0NDEsNTg0NDIsNTg0NDMsNTg0NDQsNTg0NDUsNTg0NDYsNTg0NDcsNTg0NDgsNTg0NDksNTg0NTAsNTg0NTEsNTg0NTIsNTg0NTMsNTg0NTQsNTg0NTUsNTg0NTYsNTg0NTcsNTg0NTgs''@;'; put 'put ''NTg0NTksNTg0NjAsNTg0NjEsNTg0NjIsNTg0NjMsNTg0NjQsNTg0NjUsNTg0NjYsNTg0NjcsNTg0NjgsNTg0NjksNTg0NzAsNTg0NzEsNjQwMTIsNjQwMTMsNjQwMTQsNjQwMTUsNjQwMTcsNjQwMTksNjQwMjAsNjQwMjQsNjQwMzEsNjQwMzIsNjQwMzMsNjQwMzUsNjQwMzYsNjQwMzksNjQw''@;'; put 'put ''NDAsNjQwNDEsMTE5MDUsNTk0MTQsNTk0MTUsNTk0MTYsMTE5MDgsMTM0MjcsMTMzODMsMTE5MTIsMTE5MTUsNTk0MjIsMTM3MjYsMTM4NTAsMTM4MzgsMTE5MTYsMTE5MjcsMTQ3MDIsMTQ2MTYsNTk0MzAsMTQ3OTksMTQ4MTUsMTQ5NjMsMTQ4MDAsNTk0MzUsNTk0MzYsMTUxODIsMTU0NzAs''@;'; put 'put ''MTU1ODQsMTE5NDMsNTk0NDEsNTk0NDIsMTE5NDYsMTY0NzAsMTY3MzUsMTE5NTAsMTcyMDcsMTE5NTUsMTE5NTgsMTE5NTksNTk0NTEsMTczMjksMTczMjQsMTE5NjMsMTczNzMsMTc2MjIsMTgwMTcsMTc5OTYsNTk0NTksMTgyMTEsMTgyMTcsMTgzMDAsMTgzMTcsMTE5NzgsMTg3NTksMTg4''@;'; put 'put ''MTAsMTg4MTMsMTg4MTgsMTg4MTksMTg4MjEsMTg4MjIsMTg4NDcsMTg4NDMsMTg4NzEsMTg4NzAsNTk0NzYsNTk0NzcsMTk2MTksMTk2MTUsMTk2MTYsMTk2MTcsMTk1NzUsMTk2MTgsMTk3MzEsMTk3MzIsMTk3MzMsMTk3MzQsMTk3MzUsMTk3MzYsMTk3MzcsMTk4ODYsNTk0OTIsNTg0NzIs''@;'; put 'put ''NTg0NzMsNTg0NzQsNTg0NzUsNTg0NzYsNTg0NzcsNTg0NzgsNTg0NzksNTg0ODAsNTg0ODEsNTg0ODIsNTg0ODMsNTg0ODQsNTg0ODUsNTg0ODYsNTg0ODcsNTg0ODgsNTg0ODksNTg0OTAsNTg0OTEsNTg0OTIsNTg0OTMsNTg0OTQsNTg0OTUsNTg0OTYsNTg0OTcsNTg0OTgsNTg0OTksNTg1''@;'; put 'put ''MDAsNTg1MDEsNTg1MDIsNTg1MDMsNTg1MDQsNTg1MDUsNTg1MDYsNTg1MDcsNTg1MDgsNTg1MDksNTg1MTAsNTg1MTEsNTg1MTIsNTg1MTMsNTg1MTQsNTg1MTUsNTg1MTYsNTg1MTcsNTg1MTgsNTg1MTksNTg1MjAsNTg1MjEsNTg1MjIsNTg1MjMsNTg1MjQsNTg1MjUsNTg1MjYsNTg1Mjcs''@;'; put 'put ''NTg1MjgsNTg1MjksNTg1MzAsNTg1MzEsNTg1MzIsNTg1MzMsNTg1MzQsNTg1MzUsNTg1MzYsNTg1MzcsNTg1MzgsNTg1MzksNTg1NDAsNTg1NDEsNTg1NDIsNTg1NDMsNTg1NDQsNTg1NDUsNTg1NDYsNTg1NDcsNTg1NDgsNTg1NDksNTg1NTAsNTg1NTEsNTg1NTIsNTg1NTMsNTg1NTQsNTg1''@;'; put 'put ''NTUsNTg1NTYsNTg1NTcsNTg1NTgsNTg1NTksNTg1NjAsNTg1NjEsNTg1NjIsNTg1NjMsNTg1NjQsNTg1NjVdLCJnYjE4MDMwLXJhbmdlcyI6W1swLDEyOF0sWzM2LDE2NV0sWzM4LDE2OV0sWzQ1LDE3OF0sWzUwLDE4NF0sWzgxLDIxNl0sWzg5LDIyNl0sWzk1LDIzNV0sWzk2LDIzOF0sWzEw''@;'; put 'put ''MCwyNDRdLFsxMDMsMjQ4XSxbMTA0LDI1MV0sWzEwNSwyNTNdLFsxMDksMjU4XSxbMTI2LDI3Nl0sWzEzMywyODRdLFsxNDgsMzAwXSxbMTcyLDMyNV0sWzE3NSwzMjldLFsxNzksMzM0XSxbMjA4LDM2NF0sWzMwNiw0NjNdLFszMDcsNDY1XSxbMzA4LDQ2N10sWzMwOSw0NjldLFszMTAsNDcx''@;'; put 'put ''XSxbMzExLDQ3M10sWzMxMiw0NzVdLFszMTMsNDc3XSxbMzQxLDUwNl0sWzQyOCw1OTRdLFs0NDMsNjEwXSxbNTQ0LDcxMl0sWzU0NSw3MTZdLFs1NTgsNzMwXSxbNzQxLDkzMF0sWzc0Miw5MzhdLFs3NDksOTYyXSxbNzUwLDk3MF0sWzgwNSwxMDI2XSxbODE5LDExMDRdLFs4MjAsMTEwNl0s''@;'; put 'put ''Wzc5MjIsODIwOV0sWzc5MjQsODIxNV0sWzc5MjUsODIxOF0sWzc5MjcsODIyMl0sWzc5MzQsODIzMV0sWzc5NDMsODI0MV0sWzc5NDQsODI0NF0sWzc5NDUsODI0Nl0sWzc5NTAsODI1Ml0sWzgwNjIsODM2NV0sWzgxNDgsODQ1Ml0sWzgxNDksODQ1NF0sWzgxNTIsODQ1OF0sWzgxNjQsODQ3''@;'; put 'put ''MV0sWzgxNzQsODQ4Ml0sWzgyMzYsODU1Nl0sWzgyNDAsODU3MF0sWzgyNjIsODU5Nl0sWzgyNjQsODYwMl0sWzgzNzQsODcxM10sWzgzODAsODcyMF0sWzgzODEsODcyMl0sWzgzODQsODcyNl0sWzgzODgsODczMV0sWzgzOTAsODczN10sWzgzOTIsODc0MF0sWzgzOTMsODc0Ml0sWzgzOTQs''@;'; put 'put ''ODc0OF0sWzgzOTYsODc1MV0sWzg0MDEsODc2MF0sWzg0MDYsODc2Nl0sWzg0MTYsODc3N10sWzg0MTksODc4MV0sWzg0MjQsODc4N10sWzg0MzcsODgwMl0sWzg0MzksODgwOF0sWzg0NDUsODgxNl0sWzg0ODIsODg1NF0sWzg0ODUsODg1OF0sWzg0OTYsODg3MF0sWzg1MjEsODg5Nl0sWzg2''@;'; put 'put ''MDMsODk3OV0sWzg5MzYsOTMyMl0sWzg5NDYsOTM3Ml0sWzkwNDYsOTU0OF0sWzkwNTAsOTU4OF0sWzkwNjMsOTYxNl0sWzkwNjYsOTYyMl0sWzkwNzYsOTYzNF0sWzkwOTIsOTY1Ml0sWzkxMDAsOTY2Ml0sWzkxMDgsOTY3Ml0sWzkxMTEsOTY3Nl0sWzkxMTMsOTY4MF0sWzkxMzEsOTcwMl0s''@;'; put 'put ''WzkxNjIsOTczNV0sWzkxNjQsOTczOF0sWzkyMTgsOTc5M10sWzkyMTksOTc5NV0sWzExMzI5LDExOTA2XSxbMTEzMzEsMTE5MDldLFsxMTMzNCwxMTkxM10sWzExMzM2LDExOTE3XSxbMTEzNDYsMTE5MjhdLFsxMTM2MSwxMTk0NF0sWzExMzYzLDExOTQ3XSxbMTEzNjYsMTE5NTFdLFsxMTM3''@;'; put 'put ''MCwxMTk1Nl0sWzExMzcyLDExOTYwXSxbMTEzNzUsMTE5NjRdLFsxMTM4OSwxMTk3OV0sWzExNjgyLDEyMjg0XSxbMTE2ODYsMTIyOTJdLFsxMTY4NywxMjMxMl0sWzExNjkyLDEyMzE5XSxbMTE2OTQsMTIzMzBdLFsxMTcxNCwxMjM1MV0sWzExNzE2LDEyNDM2XSxbMTE3MjMsMTI0NDddLFsx''@;'; put 'put ''MTcyNSwxMjUzNV0sWzExNzMwLDEyNTQzXSxbMTE3MzYsMTI1ODZdLFsxMTk4MiwxMjg0Ml0sWzExOTg5LDEyODUwXSxbMTIxMDIsMTI5NjRdLFsxMjMzNiwxMzIwMF0sWzEyMzQ4LDEzMjE1XSxbMTIzNTAsMTMyMThdLFsxMjM4NCwxMzI1M10sWzEyMzkzLDEzMjYzXSxbMTIzOTUsMTMyNjdd''@;'; put 'put ''LFsxMjM5NywxMzI3MF0sWzEyNTEwLDEzMzg0XSxbMTI1NTMsMTM0MjhdLFsxMjg1MSwxMzcyN10sWzEyOTYyLDEzODM5XSxbMTI5NzMsMTM4NTFdLFsxMzczOCwxNDYxN10sWzEzODIzLDE0NzAzXSxbMTM5MTksMTQ4MDFdLFsxMzkzMywxNDgxNl0sWzE0MDgwLDE0OTY0XSxbMTQyOTgsMTUx''@;'; put 'put ''ODNdLFsxNDU4NSwxNTQ3MV0sWzE0Njk4LDE1NTg1XSxbMTU1ODMsMTY0NzFdLFsxNTg0NywxNjczNl0sWzE2MzE4LDE3MjA4XSxbMTY0MzQsMTczMjVdLFsxNjQzOCwxNzMzMF0sWzE2NDgxLDE3Mzc0XSxbMTY3MjksMTc2MjNdLFsxNzEwMiwxNzk5N10sWzE3MTIyLDE4MDE4XSxbMTczMTUs''@;'; put 'put ''MTgyMTJdLFsxNzMyMCwxODIxOF0sWzE3NDAyLDE4MzAxXSxbMTc0MTgsMTgzMThdLFsxNzg1OSwxODc2MF0sWzE3OTA5LDE4ODExXSxbMTc5MTEsMTg4MTRdLFsxNzkxNSwxODgyMF0sWzE3OTE2LDE4ODIzXSxbMTc5MzYsMTg4NDRdLFsxNzkzOSwxODg0OF0sWzE3OTYxLDE4ODcyXSxbMTg2''@;'; put 'put ''NjQsMTk1NzZdLFsxODcwMywxOTYyMF0sWzE4ODE0LDE5NzM4XSxbMTg5NjIsMTk4ODddLFsxOTA0Myw0MDg3MF0sWzMzNDY5LDU5MjQ0XSxbMzM0NzAsNTkzMzZdLFszMzQ3MSw1OTM2N10sWzMzNDg0LDU5NDEzXSxbMzM0ODUsNTk0MTddLFszMzQ5MCw1OTQyM10sWzMzNDk3LDU5NDMxXSxb''@;'; put 'put ''MzM1MDEsNTk0MzddLFszMzUwNSw1OTQ0M10sWzMzNTEzLDU5NDUyXSxbMzM1MjAsNTk0NjBdLFszMzUzNiw1OTQ3OF0sWzMzNTUwLDU5NDkzXSxbMzc4NDUsNjM3ODldLFszNzkyMSw2Mzg2Nl0sWzM3OTQ4LDYzODk0XSxbMzgwMjksNjM5NzZdLFszODAzOCw2Mzk4Nl0sWzM4MDY0LDY0MDE2''@;'; put 'put ''XSxbMzgwNjUsNjQwMThdLFszODA2Niw2NDAyMV0sWzM4MDY5LDY0MDI1XSxbMzgwNzUsNjQwMzRdLFszODA3Niw2NDAzN10sWzM4MDc4LDY0MDQyXSxbMzkxMDgsNjUwNzRdLFszOTEwOSw2NTA5M10sWzM5MTEzLDY1MTA3XSxbMzkxMTQsNjUxMTJdLFszOTExNSw2NTEyN10sWzM5MTE2LDY1''@;'; put 'put ''MTMyXSxbMzkyNjUsNjUzNzVdLFszOTM5NCw2NTUxMF0sWzE4OWUzLDY1NTM2XV0samlzMDIwODpbMTIyODgsMTIyODksMTIyOTAsNjUyOTIsNjUyOTQsMTI1MzksNjUzMDYsNjUzMDcsNjUzMTEsNjUyODEsMTI0NDMsMTI0NDQsMTgwLDY1MzQ0LDE2OCw2NTM0Miw2NTUwNyw2NTM0MywxMjU0''@;'; put 'put ''MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw4MjEzLDgyMDgsNjUyOTUsNjUzNDAsNjUzNzQsODc0MSw2NTM3Miw4MjMwLDgyMjksODIxNiw4MjE3LDgyMjAsODIyMSw2NTI4OCw2NTI4OSwxMjMwOCwxMjMwOSw2NTMzOSw2NTM0MSw2NTM3''@;'; put 'put ''MSw2NTM3MywxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSw2NTI5MSw2NTI5MywxNzcsMjE1LDI0Nyw2NTMwOSw4ODAwLDY1MzA4LDY1MzEwLDg4MDYsODgwNyw4NzM0LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2''@;'; put 'put ''NTUwOSw2NTI4NCw2NTUwNCw2NTUwNSw2NTI4NSw2NTI4Myw2NTI4Niw2NTI5MCw2NTMxMiwxNjcsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4MjUxLDEyMzA2LDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODc0Myw4NzQ0LDY1NTA2LDg2NTgsODY2MCw4NzA0LDg3MDcs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''ODQ5MSw4MjQwLDk4MzksOTgzNyw5ODM0LDgyMjQsODIyNSwxODIsbnVsbCxudWxsLG51bGwsbnVsbCw5NzExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1''@;'; put 'put ''MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgs''@;'; put 'put ''NjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUz''@;'; put 'put ''NTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsbnVsbCxudWxsLG51bGwsbnVsbCwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2''@;'; put 'put ''MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwx''@;'; put 'put ''MjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQx''@;'; put 'put ''OCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI0NDks''@;'; put 'put ''MTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0''@;'; put 'put ''NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQs''@;'; put 'put ''MTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1''@;'; put 'put ''MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA0MCwxMDQxLDEwNDIsMTA0''@;'; put 'put ''MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5''@;'; put 'put ''MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUw''@;'; put 'put ''OCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTMx''@;'; put 'put ''Miw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsOTMyNyw5MzI4LDkzMjksOTMzMCw5MzMxLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCwxMzEyOSwxMzA3Niwx''@;'; put 'put ''MzA5MCwxMzEzMywxMzA4MCwxMzA5NSwxMzA1OSwxMzExMCwxMzEzNywxMzE0MywxMzA2OSwxMzA5NCwxMzA5MSwxMzA5OSwxMzEzMCwxMzExNSwxMzIxMiwxMzIxMywxMzIxNCwxMzE5OCwxMzE5OSwxMzI1MiwxMzIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MTMxNzksMTIzMTcsMTIzMTksODQ3MCwxMzI2MSw4NDgxLDEyOTY0LDEyOTY1LDEyOTY2LDEyOTY3LDEyOTY4LDEyODQ5LDEyODUwLDEyODU3LDEzMTgyLDEzMTgxLDEzMTgwLDg3ODYsODgwMSw4NzQ3LDg3NTAsODcyMSw4NzMwLDg4NjksODczNiw4NzM1LDg4OTUsODc1Nyw4NzQ1LDg3NDYs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDEyNCwyMTc4MiwyMzA0MywzODQ2MywyMTY5NiwyNDg1OSwyNTM4''@;'; put 'put ''NCwyMzAzMCwzNjg5OCwzMzkwOSwzMzU2NCwzMTMxMiwyNDc0NiwyNTU2OSwyODE5NywyNjA5MywzMzg5NCwzMzQ0NiwzOTkyNSwyNjc3MSwyMjMxMSwyNjAxNywyNTIwMSwyMzQ1MSwyMjk5MiwzNDQyNywzOTE1NiwzMjA5OCwzMjE5MCwzOTgyMiwyNTExMCwzMTkwMywzNDk5OSwyMzQzMywy''@;'; put 'put ''NDI0NSwyNTM1MywyNjI2MywyNjY5NiwzODM0MywzODc5NywyNjQ0NywyMDE5NywyMDIzNCwyMDMwMSwyMDM4MSwyMDU1MywyMjI1OCwyMjgzOSwyMjk5NiwyMzA0MSwyMzU2MSwyNDc5OSwyNDg0NywyNDk0NCwyNjEzMSwyNjg4NSwyODg1OCwzMDAzMSwzMDA2NCwzMTIyNywzMjE3MywzMjIz''@;'; put 'put ''OSwzMjk2MywzMzgwNiwzNDkxNSwzNTU4NiwzNjk0OSwzNjk4NiwyMTMwNywyMDExNywyMDEzMywyMjQ5NSwzMjk0NiwzNzA1NywzMDk1OSwxOTk2OCwyMjc2OSwyODMyMiwzNjkyMCwzMTI4MiwzMzU3NiwzMzQxOSwzOTk4MywyMDgwMSwyMTM2MCwyMTY5MywyMTcyOSwyMjI0MCwyMzAzNSwy''@;'; put 'put ''NDM0MSwzOTE1NCwyODEzOSwzMjk5NiwzNDA5MywzODQ5OCwzODUxMiwzODU2MCwzODkwNywyMTUxNSwyMTQ5MSwyMzQzMSwyODg3OSwzMjcwMSwzNjgwMiwzODYzMiwyMTM1OSw0MDI4NCwzMTQxOCwxOTk4NSwzMDg2NywzMzI3NiwyODE5OCwyMjA0MCwyMTc2NCwyNzQyMSwzNDA3NCwzOTk5''@;'; put 'put ''NSwyMzAxMywyMTQxNywyODAwNiwyOTkxNiwzODI4NywyMjA4MiwyMDExMywzNjkzOSwzODY0MiwzMzYxNSwzOTE4MCwyMTQ3MywyMTk0MiwyMzM0NCwyNDQzMywyNjE0NCwyNjM1NSwyNjYyOCwyNzcwNCwyNzg5MSwyNzk0NSwyOTc4NywzMDQwOCwzMTMxMCwzODk2NCwzMzUyMSwzNDkwNywz''@;'; put 'put ''NTQyNCwzNzYxMywyODA4MiwzMDEyMywzMDQxMCwzOTM2NSwyNDc0MiwzNTU4NSwzNjIzNCwzODMyMiwyNzAyMiwyMTQyMSwyMDg3MCwyMjI5MCwyMjU3NiwyMjg1MiwyMzQ3NiwyNDMxMCwyNDYxNiwyNTUxMywyNTU4OCwyNzgzOSwyODQzNiwyODgxNCwyODk0OCwyOTAxNywyOTE0MSwyOTUw''@;'; put 'put ''MywzMjI1NywzMzM5OCwzMzQ4OSwzNDE5OSwzNjk2MCwzNzQ2Nyw0MDIxOSwyMjYzMywyNjA0NCwyNzczOCwyOTk4OSwyMDk4NSwyMjgzMCwyMjg4NSwyNDQ0OCwyNDU0MCwyNTI3NiwyNjEwNiwyNzE3OCwyNzQzMSwyNzU3MiwyOTU3OSwzMjcwNSwzNTE1OCw0MDIzNiw0MDIwNiw0MDY0NCwy''@;'; put 'put ''MzcxMywyNzc5OCwzMzY1OSwyMDc0MCwyMzYyNywyNTAxNCwzMzIyMiwyNjc0MiwyOTI4MSwyMDA1NywyMDQ3NCwyMTM2OCwyNDY4MSwyODIwMSwzMTMxMSwzODg5OSwxOTk3OSwyMTI3MCwyMDIwNiwyMDMwOSwyMDI4NSwyMDM4NSwyMDMzOSwyMTE1MiwyMTQ4NywyMjAyNSwyMjc5OSwyMzIz''@;'; put 'put ''MywyMzQ3OCwyMzUyMSwzMTE4NSwyNjI0NywyNjUyNCwyNjU1MCwyNzQ2OCwyNzgyNywyODc3OSwyOTYzNCwzMTExNywzMTE2NiwzMTI5MiwzMTYyMywzMzQ1NywzMzQ5OSwzMzU0MCwzMzY1NSwzMzc3NSwzMzc0NywzNDY2MiwzNTUwNiwyMjA1NywzNjAwOCwzNjgzOCwzNjk0MiwzODY4Niwz''@;'; put 'put ''NDQ0MiwyMDQyMCwyMzc4NCwyNTEwNSwyOTI3MywzMDAxMSwzMzI1MywzMzQ2OSwzNDU1OCwzNjAzMiwzODU5NywzOTE4NywzOTM4MSwyMDE3MSwyMDI1MCwzNTI5OSwyMjIzOCwyMjYwMiwyMjczMCwyNDMxNSwyNDU1NSwyNDYxOCwyNDcyNCwyNDY3NCwyNTA0MCwyNTEwNiwyNTI5NiwyNTkx''@;'; put 'put ''MywzOTc0NSwyNjIxNCwyNjgwMCwyODAyMywyODc4NCwzMDAyOCwzMDM0MiwzMjExNywzMzQ0NSwzNDgwOSwzODI4MywzODU0MiwzNTk5NywyMDk3NywyMTE4MiwyMjgwNiwyMTY4MywyMzQ3NSwyMzgzMCwyNDkzNiwyNzAxMCwyODA3OSwzMDg2MSwzMzk5NSwzNDkwMywzNTQ0MiwzNzc5OSwz''@;'; put 'put ''OTYwOCwyODAxMiwzOTMzNiwzNDUyMSwyMjQzNSwyNjYyMywzNDUxMCwzNzM5MCwyMTEyMywyMjE1MSwyMTUwOCwyNDI3NSwyNTMxMywyNTc4NSwyNjY4NCwyNjY4MCwyNzU3OSwyOTU1NCwzMDkwNiwzMTMzOSwzNTIyNiwzNTI4MiwzNjIwMywzNjYxMSwzNzEwMSwzODMwNywzODU0OCwzODc2''@;'; put 'put ''MSwyMzM5OCwyMzczMSwyNzAwNSwzODk4OSwzODk5MCwyNTQ5OSwzMTUyMCwyNzE3OSwyNzI2MywyNjgwNiwzOTk0OSwyODUxMSwyMTEwNiwyMTkxNywyNDY4OCwyNTMyNCwyNzk2MywyODE2NywyODM2OSwzMzg4MywzNTA4OCwzNjY3NiwxOTk4OCwzOTk5MywyMTQ5NCwyNjkwNywyNzE5NCwz''@;'; put 'put ''ODc4OCwyNjY2NiwyMDgyOCwzMTQyNywzMzk3MCwzNzM0MCwzNzc3MiwyMjEwNyw0MDIzMiwyNjY1OCwzMzU0MSwzMzg0MSwzMTkwOSwyMWUzLDMzNDc3LDI5OTI2LDIwMDk0LDIwMzU1LDIwODk2LDIzNTA2LDIxMDAyLDIxMjA4LDIxMjIzLDI0MDU5LDIxOTE0LDIyNTcwLDIzMDE0LDIzNDM2''@;'; put 'put ''LDIzNDQ4LDIzNTE1LDI0MTc4LDI0MTg1LDI0NzM5LDI0ODYzLDI0OTMxLDI1MDIyLDI1NTYzLDI1OTU0LDI2NTc3LDI2NzA3LDI2ODc0LDI3NDU0LDI3NDc1LDI3NzM1LDI4NDUwLDI4NTY3LDI4NDg1LDI5ODcyLDI5OTc2LDMwNDM1LDMwNDc1LDMxNDg3LDMxNjQ5LDMxNzc3LDMyMjMzLDMy''@;'; put 'put ''NTY2LDMyNzUyLDMyOTI1LDMzMzgyLDMzNjk0LDM1MjUxLDM1NTMyLDM2MDExLDM2OTk2LDM3OTY5LDM4MjkxLDM4Mjg5LDM4MzA2LDM4NTAxLDM4ODY3LDM5MjA4LDMzMzA0LDIwMDI0LDIxNTQ3LDIzNzM2LDI0MDEyLDI5NjA5LDMwMjg0LDMwNTI0LDIzNzIxLDMyNzQ3LDM2MTA3LDM4NTkz''@;'; put 'put ''LDM4OTI5LDM4OTk2LDM5ZTMsMjAyMjUsMjAyMzgsMjEzNjEsMjE5MTYsMjIxMjAsMjI1MjIsMjI4NTUsMjMzMDUsMjM0OTIsMjM2OTYsMjQwNzYsMjQxOTAsMjQ1MjQsMjU1ODIsMjY0MjYsMjYwNzEsMjYwODIsMjYzOTksMjY4MjcsMjY4MjAsMjcyMzEsMjQxMTIsMjc1ODksMjc2NzEsMjc3''@;'; put 'put ''NzMsMzAwNzksMzEwNDgsMjMzOTUsMzEyMzIsMzJlMywyNDUwOSwzNTIxNSwzNTM1MiwzNjAyMCwzNjIxNSwzNjU1NiwzNjYzNywzOTEzOCwzOTQzOCwzOTc0MCwyMDA5NiwyMDYwNSwyMDczNiwyMjkzMSwyMzQ1MiwyNTEzNSwyNTIxNiwyNTgzNiwyNzQ1MCwyOTM0NCwzMDA5NywzMTA0Nywz''@;'; put 'put ''MjY4MSwzNDgxMSwzNTUxNiwzNTY5NiwyNTUxNiwzMzczOCwzODgxNiwyMTUxMywyMTUwNywyMTkzMSwyNjcwOCwyNzIyNCwzNTQ0MCwzMDc1OSwyNjQ4NSw0MDY1MywyMTM2NCwyMzQ1OCwzMzA1MCwzNDM4NCwzNjg3MCwxOTk5MiwyMDAzNywyMDE2NywyMDI0MSwyMTQ1MCwyMTU2MCwyMzQ3''@;'; put 'put ''MCwyNDMzOSwyNDYxMywyNTkzNywyNjQyOSwyNzcxNCwyNzc2MiwyNzg3NSwyODc5MiwyOTY5OSwzMTM1MCwzMTQwNiwzMTQ5NiwzMjAyNiwzMTk5OCwzMjEwMiwyNjA4NywyOTI3NSwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTMxMiwyNTM2OSwyODE5MiwzNDM5NCwzNTM3NywzNjMxNywz''@;'; put 'put ''NzYyNCwyODQxNywzMTE0MiwzOTc3MCwyMDEzNiwyMDEzOSwyMDE0MCwyMDM3OSwyMDM4NCwyMDY4OSwyMDgwNywzMTQ3OCwyMDg0OSwyMDk4MiwyMTMzMiwyMTI4MSwyMTM3NSwyMTQ4MywyMTkzMiwyMjY1OSwyMzc3NywyNDM3NSwyNDM5NCwyNDYyMywyNDY1NiwyNDY4NSwyNTM3NSwyNTk0''@;'; put 'put ''NSwyNzIxMSwyNzg0MSwyOTM3OCwyOTQyMSwzMDcwMywzMzAxNiwzMzAyOSwzMzI4OCwzNDEyNiwzNzExMSwzNzg1NywzODkxMSwzOTI1NSwzOTUxNCwyMDIwOCwyMDk1NywyMzU5NywyNjI0MSwyNjk4OSwyMzYxNiwyNjM1NCwyNjk5NywyOTU3NywyNjcwNCwzMTg3MywyMDY3NywyMTIyMCwy''@;'; put 'put ''MjM0MywyNDA2MiwzNzY3MCwyNjAyMCwyNzQyNywyNzQ1MywyOTc0OCwzMTEwNSwzMTE2NSwzMTU2MywzMjIwMiwzMzQ2NSwzMzc0MCwzNDk0MywzNTE2NywzNTY0MSwzNjgxNywzNzMyOSwyMTUzNSwzNzUwNCwyMDA2MSwyMDUzNCwyMTQ3NywyMTMwNiwyOTM5OSwyOTU5MCwzMDY5NywzMzUx''@;'; put 'put ''MCwzNjUyNywzOTM2NiwzOTM2OCwzOTM3OCwyMDg1NSwyNDg1OCwzNDM5OCwyMTkzNiwzMTM1NCwyMDU5OCwyMzUwNywzNjkzNSwzODUzMywyMDAxOCwyNzM1NSwzNzM1MSwyMzYzMywyMzYyNCwyNTQ5NiwzMTM5MSwyNzc5NSwzODc3MiwzNjcwNSwzMTQwMiwyOTA2NiwzODUzNiwzMTg3NCwy''@;'; put 'put ''NjY0NywzMjM2OCwyNjcwNSwzNzc0MCwyMTIzNCwyMTUzMSwzNDIxOSwzNTM0NywzMjY3NiwzNjU1NywzNzA4OSwyMTM1MCwzNDk1MiwzMTA0MSwyMDQxOCwyMDY3MCwyMTAwOSwyMDgwNCwyMTg0MywyMjMxNywyOTY3NCwyMjQxMSwyMjg2NSwyNDQxOCwyNDQ1MiwyNDY5MywyNDk1MCwyNDkz''@;'; put 'put ''NSwyNTAwMSwyNTUyMiwyNTY1OCwyNTk2NCwyNjIyMywyNjY5MCwyODE3OSwzMDA1NCwzMTI5MywzMTk5NSwzMjA3NiwzMjE1MywzMjMzMSwzMjYxOSwzMzU1MCwzMzYxMCwzNDUwOSwzNTMzNiwzNTQyNywzNTY4NiwzNjYwNSwzODkzOCw0MDMzNSwzMzQ2NCwzNjgxNCwzOTkxMiwyMTEyNywy''@;'; put 'put ''NTExOSwyNTczMSwyODYwOCwzODU1MywyNjY4OSwyMDYyNSwyNzQyNCwyNzc3MCwyODUwMCwzMTM0OCwzMjA4MCwzNDg4MCwzNTM2MywyNjM3NiwyMDIxNCwyMDUzNywyMDUxOCwyMDU4MSwyMDg2MCwyMTA0OCwyMTA5MSwyMTkyNywyMjI4NywyMjUzMywyMzI0NCwyNDMxNCwyNTAxMCwyNTA4''@;'; put 'put ''MCwyNTMzMSwyNTQ1OCwyNjkwOCwyNzE3NywyOTMwOSwyOTM1NiwyOTQ4NiwzMDc0MCwzMDgzMSwzMjEyMSwzMDQ3NiwzMjkzNywzNTIxMSwzNTYwOSwzNjA2NiwzNjU2MiwzNjk2MywzNzc0OSwzODUyMiwzODk5NywzOTQ0Myw0MDU2OCwyMDgwMywyMTQwNywyMTQyNywyNDE4NywyNDM1OCwy''@;'; put 'put ''ODE4NywyODMwNCwyOTU3MiwyOTY5NCwzMjA2NywzMzMzNSwzNTMyOCwzNTU3OCwzODQ4MCwyMDA0NiwyMDQ5MSwyMTQ3NiwyMTYyOCwyMjI2NiwyMjk5MywyMzM5NiwyNDA0OSwyNDIzNSwyNDM1OSwyNTE0NCwyNTkyNSwyNjU0MywyODI0NiwyOTM5MiwzMTk0NiwzNDk5NiwzMjkyOSwzMjk5''@;'; put 'put ''MywzMzc3NiwzNDM4MiwzNTQ2MywzNjMyOCwzNzQzMSwzODU5OSwzOTAxNSw0MDcyMywyMDExNiwyMDExNCwyMDIzNywyMTMyMCwyMTU3NywyMTU2NiwyMzA4NywyNDQ2MCwyNDQ4MSwyNDczNSwyNjc5MSwyNzI3OCwyOTc4NiwzMDg0OSwzNTQ4NiwzNTQ5MiwzNTcwMywzNzI2NCwyMDA2Miwz''@;'; put 'put ''OTg4MSwyMDEzMiwyMDM0OCwyMDM5OSwyMDUwNSwyMDUwMiwyMDgwOSwyMDg0NCwyMTE1MSwyMTE3NywyMTI0NiwyMTQwMiwyMTQ3NSwyMTUyMSwyMTUxOCwyMTg5NywyMjM1MywyMjQzNCwyMjkwOSwyMzM4MCwyMzM4OSwyMzQzOSwyNDAzNywyNDAzOSwyNDA1NSwyNDE4NCwyNDE5NSwyNDIx''@;'; put 'put ''OCwyNDI0NywyNDM0NCwyNDY1OCwyNDkwOCwyNTIzOSwyNTMwNCwyNTUxMSwyNTkxNSwyNjExNCwyNjE3OSwyNjM1NiwyNjQ3NywyNjY1NywyNjc3NSwyNzA4MywyNzc0MywyNzk0NiwyODAwOSwyODIwNywyODMxNywzMDAwMiwzMDM0MywzMDgyOCwzMTI5NSwzMTk2OCwzMjAwNSwzMjAyNCwz''@;'; put 'put ''MjA5NCwzMjE3NywzMjc4OSwzMjc3MSwzMjk0MywzMjk0NSwzMzEwOCwzMzE2NywzMzMyMiwzMzYxOCwzNDg5MiwzNDkxMywzNTYxMSwzNjAwMiwzNjA5MiwzNzA2NiwzNzIzNywzNzQ4OSwzMDc4MywzNzYyOCwzODMwOCwzODQ3NywzODkxNywzOTMyMSwzOTY0MCw0MDI1MSwyMTA4MywyMTE2''@;'; put 'put ''MywyMTQ5NSwyMTUxMiwyMjc0MSwyNTMzNSwyODY0MCwzNTk0NiwzNjcwMyw0MDYzMywyMDgxMSwyMTA1MSwyMTU3OCwyMjI2OSwzMTI5NiwzNzIzOSw0MDI4OCw0MDY1OCwyOTUwOCwyODQyNSwzMzEzNiwyOTk2OSwyNDU3MywyNDc5NCwzOTU5MiwyOTQwMywzNjc5NiwyNzQ5MiwzODkxNSwy''@;'; put 'put ''MDE3MCwyMjI1NiwyMjM3MiwyMjcxOCwyMzEzMCwyNDY4MCwyNTAzMSwyNjEyNywyNjExOCwyNjY4MSwyNjgwMSwyODE1MSwzMDE2NSwzMjA1OCwzMzM5MCwzOTc0NiwyMDEyMywyMDMwNCwyMTQ0OSwyMTc2NiwyMzkxOSwyNDAzOCwyNDA0NiwyNjYxOSwyNzgwMSwyOTgxMSwzMDcyMiwzNTQw''@;'; put 'put ''OCwzNzc4MiwzNTAzOSwyMjM1MiwyNDIzMSwyNTM4NywyMDY2MSwyMDY1MiwyMDg3NywyNjM2OCwyMTcwNSwyMjYyMiwyMjk3MSwyMzQ3MiwyNDQyNSwyNTE2NSwyNTUwNSwyNjY4NSwyNzUwNywyODE2OCwyODc5NywzNzMxOSwyOTMxMiwzMDc0MSwzMDc1OCwzMTA4NSwyNTk5OCwzMjA0OCwz''@;'; put 'put ''Mzc1NiwzNTAwOSwzNjYxNywzODU1NSwyMTA5MiwyMjMxMiwyNjQ0OCwzMjYxOCwzNjAwMSwyMDkxNiwyMjMzOCwzODQ0MiwyMjU4NiwyNzAxOCwzMjk0OCwyMTY4MiwyMzgyMiwyMjUyNCwzMDg2OSw0MDQ0MiwyMDMxNiwyMTA2NiwyMTY0MywyNTY2MiwyNjE1MiwyNjM4OCwyNjYxMywzMTM2''@;'; put 'put ''NCwzMTU3NCwzMjAzNCwzNzY3OSwyNjcxNiwzOTg1MywzMTU0NSwyMTI3MywyMDg3NCwyMTA0NywyMzUxOSwyNTMzNCwyNTc3NCwyNTgzMCwyNjQxMywyNzU3OCwzNDIxNywzODYwOSwzMDM1MiwzOTg5NCwyNTQyMCwzNzYzOCwzOTg1MSwzMDM5OSwyNjE5NCwxOTk3NywyMDYzMiwyMTQ0Miwy''@;'; put 'put ''MzY2NSwyNDgwOCwyNTc0NiwyNTk1NSwyNjcxOSwyOTE1OCwyOTY0MiwyOTk4NywzMTYzOSwzMjM4NiwzNDQ1MywzNTcxNSwzNjA1OSwzNzI0MCwzOTE4NCwyNjAyOCwyNjI4MywyNzUzMSwyMDE4MSwyMDE4MCwyMDI4MiwyMDM1MSwyMTA1MCwyMTQ5NiwyMTQ5MCwyMTk4NywyMjIzNSwyMjc2''@;'; put 'put ''MywyMjk4NywyMjk4NSwyMzAzOSwyMzM3NiwyMzYyOSwyNDA2NiwyNDEwNywyNDUzNSwyNDYwNSwyNTM1MSwyNTkwMywyMzM4OCwyNjAzMSwyNjA0NSwyNjA4OCwyNjUyNSwyNzQ5MCwyNzUxNSwyNzY2MywyOTUwOSwzMTA0OSwzMTE2OSwzMTk5MiwzMjAyNSwzMjA0MywzMjkzMCwzMzAyNiwz''@;'; put 'put ''MzI2NywzNTIyMiwzNTQyMiwzNTQzMywzNTQzMCwzNTQ2OCwzNTU2NiwzNjAzOSwzNjA2MCwzODYwNCwzOTE2NCwyNzUwMywyMDEwNywyMDI4NCwyMDM2NSwyMDgxNiwyMzM4MywyMzU0NiwyNDkwNCwyNTM0NSwyNjE3OCwyNzQyNSwyODM2MywyNzgzNSwyOTI0NiwyOTg4NSwzMDE2NCwzMDkx''@;'; put 'put ''MywzMTAzNCwzMjc4MCwzMjgxOSwzMzI1OCwzMzk0MCwzNjc2NiwyNzcyOCw0MDU3NSwyNDMzNSwzNTY3Miw0MDIzNSwzMTQ4MiwzNjYwMCwyMzQzNywzODYzNSwxOTk3MSwyMTQ4OSwyMjUxOSwyMjgzMywyMzI0MSwyMzQ2MCwyNDcxMywyODI4NywyODQyMiwzMDE0MiwzNjA3NCwyMzQ1NSwz''@;'; put 'put ''NDA0OCwzMTcxMiwyMDU5NCwyNjYxMiwzMzQzNywyMzY0OSwzNDEyMiwzMjI4NiwzMzI5NCwyMDg4OSwyMzU1NiwyNTQ0OCwzNjE5OCwyNjAxMiwyOTAzOCwzMTAzOCwzMjAyMywzMjc3MywzNTYxMywzNjU1NCwzNjk3NCwzNDUwMywzNzAzNCwyMDUxMSwyMTI0MiwyMzYxMCwyNjQ1MSwyODc5''@;'; put 'put ''NiwyOTIzNywzNzE5NiwzNzMyMCwzNzY3NSwzMzUwOSwyMzQ5MCwyNDM2OSwyNDgyNSwyMDAyNywyMTQ2MiwyMzQzMiwyNTE2MywyNjQxNywyNzUzMCwyOTQxNywyOTY2NCwzMTI3OCwzMzEzMSwzNjI1OSwzNzIwMiwzOTMxOCwyMDc1NCwyMTQ2MywyMTYxMCwyMzU1MSwyNTQ4MCwyNzE5Mywz''@;'; put 'put ''MjE3MiwzODY1NiwyMjIzNCwyMTQ1NCwyMTYwOCwyMzQ0NywyMzYwMSwyNDAzMCwyMDQ2MiwyNDgzMywyNTM0MiwyNzk1NCwzMTE2OCwzMTE3OSwzMjA2NiwzMjMzMywzMjcyMiwzMzI2MSwzMzMxMSwzMzkzNiwzNDg4NiwzNTE4NiwzNTcyOCwzNjQ2OCwzNjY1NSwzNjkxMywzNzE5NSwzNzIy''@;'; put 'put ''OCwzODU5OCwzNzI3NiwyMDE2MCwyMDMwMywyMDgwNSwyMTMxMywyNDQ2NywyNTEwMiwyNjU4MCwyNzcxMywyODE3MSwyOTUzOSwzMjI5NCwzNzMyNSwzNzUwNywyMTQ2MCwyMjgwOSwyMzQ4NywyODExMywzMTA2OSwzMjMwMiwzMTg5OSwyMjY1NCwyOTA4NywyMDk4NiwzNDg5OSwzNjg0OCwy''@;'; put 'put ''MDQyNiwyMzgwMywyNjE0OSwzMDYzNiwzMTQ1OSwzMzMwOCwzOTQyMywyMDkzNCwyNDQ5MCwyNjA5MiwyNjk5MSwyNzUyOSwyODE0NywyODMxMCwyODUxNiwzMDQ2MiwzMjAyMCwyNDAzMywzNjk4MSwzNzI1NSwzODkxOCwyMDk2NiwyMTAyMSwyNTE1MiwyNjI1NywyNjMyOSwyODE4NiwyNDI0''@;'; put 'put ''NiwzMjIxMCwzMjYyNiwyNjM2MCwzNDIyMywzNDI5NSwzNTU3NiwyMTE2MSwyMTQ2NSwyMjg5OSwyNDIwNywyNDQ2NCwyNDY2MSwzNzYwNCwzODUwMCwyMDY2MywyMDc2NywyMTIxMywyMTI4MCwyMTMxOSwyMTQ4NCwyMTczNiwyMTgzMCwyMTgwOSwyMjAzOSwyMjg4OCwyMjk3NCwyMzEwMCwy''@;'; put 'put ''MzQ3NywyMzU1OCwyMzU2NywyMzU2OSwyMzU3OCwyNDE5NiwyNDIwMiwyNDI4OCwyNDQzMiwyNTIxNSwyNTIyMCwyNTMwNywyNTQ4NCwyNTQ2MywyNjExOSwyNjEyNCwyNjE1NywyNjIzMCwyNjQ5NCwyNjc4NiwyNzE2NywyNzE4OSwyNzgzNiwyODA0MCwyODE2OSwyODI0OCwyODk4OCwyODk2''@;'; put 'put ''NiwyOTAzMSwzMDE1MSwzMDQ2NSwzMDgxMywzMDk3NywzMTA3NywzMTIxNiwzMTQ1NiwzMTUwNSwzMTkxMSwzMjA1NywzMjkxOCwzMzc1MCwzMzkzMSwzNDEyMSwzNDkwOSwzNTA1OSwzNTM1OSwzNTM4OCwzNTQxMiwzNTQ0MywzNTkzNywzNjA2MiwzNzI4NCwzNzQ3OCwzNzc1OCwzNzkxMiwz''@;'; put 'put ''ODU1NiwzODgwOCwxOTk3OCwxOTk3NiwxOTk5OCwyMDA1NSwyMDg4NywyMTEwNCwyMjQ3OCwyMjU4MCwyMjczMiwyMzMzMCwyNDEyMCwyNDc3MywyNTg1NCwyNjQ2NSwyNjQ1NCwyNzk3MiwyOTM2NiwzMDA2NywzMTMzMSwzMzk3NiwzNTY5OCwzNzMwNCwzNzY2NCwyMjA2NSwyMjUxNiwzOTE2''@;'; put 'put ''NiwyNTMyNSwyNjg5MywyNzU0MiwyOTE2NSwzMjM0MCwzMjg4NywzMzM5NCwzNTMwMiwzOTEzNSwzNDY0NSwzNjc4NSwyMzYxMSwyMDI4MCwyMDQ0OSwyMDQwNSwyMTc2NywyMzA3MiwyMzUxNywyMzUyOSwyNDUxNSwyNDkxMCwyNTM5MSwyNjAzMiwyNjE4NywyNjg2MiwyNzAzNSwyODAyNCwy''@;'; put 'put ''ODE0NSwzMDAwMywzMDEzNywzMDQ5NSwzMTA3MCwzMTIwNiwzMjA1MSwzMzI1MSwzMzQ1NSwzNDIxOCwzNTI0MiwzNTM4NiwzNjUyMywzNjc2MywzNjkxNCwzNzM0MSwzODY2MywyMDE1NCwyMDE2MSwyMDk5NSwyMjY0NSwyMjc2NCwyMzU2MywyOTk3OCwyMzYxMywzMzEwMiwzNTMzOCwzNjgw''@;'; put 'put ''NSwzODQ5OSwzODc2NSwzMTUyNSwzNTUzNSwzODkyMCwzNzIxOCwyMjI1OSwyMTQxNiwzNjg4NywyMTU2MSwyMjQwMiwyNDEwMSwyNTUxMiwyNzcwMCwyODgxMCwzMDU2MSwzMTg4MywzMjczNiwzNDkyOCwzNjkzMCwzNzIwNCwzNzY0OCwzNzY1NiwzODU0MywyOTc5MCwzOTYyMCwyMzgxNSwy''@;'; put 'put ''MzkxMywyNTk2OCwyNjUzMCwzNjI2NCwzODYxOSwyNTQ1NCwyNjQ0MSwyNjkwNSwzMzczMywzODkzNSwzODU5MiwzNTA3MCwyODU0OCwyNTcyMiwyMzU0NCwxOTk5MCwyODcxNiwzMDA0NSwyNjE1OSwyMDkzMiwyMTA0NiwyMTIxOCwyMjk5NSwyNDQ0OSwyNDYxNSwyNTEwNCwyNTkxOSwyNTk3''@;'; put 'put ''MiwyNjE0MywyNjIyOCwyNjg2NiwyNjY0NiwyNzQ5MSwyODE2NSwyOTI5OCwyOTk4MywzMDQyNywzMTkzNCwzMjg1NCwyMjc2OCwzNTA2OSwzNTE5OSwzNTQ4OCwzNTQ3NSwzNTUzMSwzNjg5MywzNzI2NiwzODczOCwzODc0NSwyNTk5MywzMTI0NiwzMzAzMCwzODU4NywyNDEwOSwyNDc5Niwy''@;'; put 'put ''NTExNCwyNjAyMSwyNjEzMiwyNjUxMiwzMDcwNywzMTMwOSwzMTgyMSwzMjMxOCwzMzAzNCwzNjAxMiwzNjE5NiwzNjMyMSwzNjQ0NywzMDg4OSwyMDk5OSwyNTMwNSwyNTUwOSwyNTY2NiwyNTI0MCwzNTM3MywzMTM2MywzMTY4MCwzNTUwMCwzODYzNCwzMjExOCwzMzI5MiwzNDYzMywyMDE4''@;'; put 'put ''NSwyMDgwOCwyMTMxNSwyMTM0NCwyMzQ1OSwyMzU1NCwyMzU3NCwyNDAyOSwyNTEyNiwyNTE1OSwyNTc3NiwyNjY0MywyNjY3NiwyNzg0OSwyNzk3MywyNzkyNywyNjU3OSwyODUwOCwyOTAwNiwyOTA1MywyNjA1OSwzMTM1OSwzMTY2MSwzMjIxOCwzMjMzMCwzMjY4MCwzMzE0NiwzMzMwNywz''@;'; put 'put ''MzMzNywzNDIxNCwzNTQzOCwzNjA0NiwzNjM0MSwzNjk4NCwzNjk4MywzNzU0OSwzNzUyMSwzODI3NSwzOTg1NCwyMTA2OSwyMTg5MiwyODQ3MiwyODk4MiwyMDg0MCwzMTEwOSwzMjM0MSwzMzIwMywzMTk1MCwyMjA5MiwyMjYwOSwyMzcyMCwyNTUxNCwyNjM2NiwyNjM2NSwyNjk3MCwyOTQw''@;'; put 'put ''MSwzMDA5NSwzMDA5NCwzMDk5MCwzMTA2MiwzMTE5OSwzMTg5NSwzMjAzMiwzMjA2OCwzNDMxMSwzNTM4MCwzODQ1OSwzNjk2MSw0MDczNiwyMDcxMSwyMTEwOSwyMTQ1MiwyMTQ3NCwyMDQ4OSwyMTkzMCwyMjc2NiwyMjg2MywyOTI0NSwyMzQzNSwyMzY1MiwyMTI3NywyNDgwMywyNDgxOSwy''@;'; put 'put ''NTQzNiwyNTQ3NSwyNTQwNywyNTUzMSwyNTgwNSwyNjA4OSwyNjM2MSwyNDAzNSwyNzA4NSwyNzEzMywyODQzNywyOTE1NywyMDEwNSwzMDE4NSwzMDQ1NiwzMTM3OSwzMTk2NywzMjIwNywzMjE1NiwzMjg2NSwzMzYwOSwzMzYyNCwzMzkwMCwzMzk4MCwzNDI5OSwzNTAxMywzNjIwOCwzNjg2''@;'; put 'put ''NSwzNjk3MywzNzc4MywzODY4NCwzOTQ0MiwyMDY4NywyMjY3OSwyNDk3NCwzMzIzNSwzNDEwMSwzNjEwNCwzNjg5NiwyMDQxOSwyMDU5NiwyMTA2MywyMTM2MywyNDY4NywyNTQxNywyNjQ2MywyODIwNCwzNjI3NSwzNjg5NSwyMDQzOSwyMzY0NiwzNjA0MiwyNjA2MywzMjE1NCwyMTMzMCwz''@;'; put 'put ''NDk2NiwyMDg1NCwyNTUzOSwyMzM4NCwyMzQwMywyMzU2MiwyNTYxMywyNjQ0OSwzNjk1NiwyMDE4MiwyMjgxMCwyMjgyNiwyNzc2MCwzNTQwOSwyMTgyMiwyMjU0OSwyMjk0OSwyNDgxNiwyNTE3MSwyNjU2MSwzMzMzMywyNjk2NSwzODQ2NCwzOTM2NCwzOTQ2NCwyMDMwNywyMjUzNCwyMzU1''@;'; put 'put ''MCwzMjc4NCwyMzcyOSwyNDExMSwyNDQ1MywyNDYwOCwyNDkwNywyNTE0MCwyNjM2NywyNzg4OCwyODM4MiwzMjk3NCwzMzE1MSwzMzQ5MiwzNDk1NSwzNjAyNCwzNjg2NCwzNjkxMCwzODUzOCw0MDY2NywzOTg5OSwyMDE5NSwyMTQ4OCwyMjgyMywzMTUzMiwzNzI2MSwzODk4OCw0MDQ0MSwy''@;'; put 'put ''ODM4MSwyODcxMSwyMTMzMSwyMTgyOCwyMzQyOSwyNTE3NiwyNTI0NiwyNTI5OSwyNzgxMCwyODY1NSwyOTczMCwzNTM1MSwzNzk0NCwyODYwOSwzNTU4MiwzMzU5MiwyMDk2NywzNDU1MiwyMTQ4MiwyMTQ4MSwyMDI5NCwzNjk0OCwzNjc4NCwyMjg5MCwzMzA3MywyNDA2MSwzMTQ2NiwzNjc5''@;'; put 'put ''OSwyNjg0MiwzNTg5NSwyOTQzMiw0MDAwOCwyNzE5NywzNTUwNCwyMDAyNSwyMTMzNiwyMjAyMiwyMjM3NCwyNTI4NSwyNTUwNiwyNjA4NiwyNzQ3MCwyODEyOSwyODI1MSwyODg0NSwzMDcwMSwzMTQ3MSwzMTY1OCwzMjE4NywzMjgyOSwzMjk2NiwzNDUwNywzNTQ3NywzNzcyMywyMjI0Mywy''@;'; put 'put ''MjcyNywyNDM4MiwyNjAyOSwyNjI2MiwyNzI2NCwyNzU3MywzMDAwNywzNTUyNywyMDUxNiwzMDY5MywyMjMyMCwyNDM0NywyNDY3NywyNjIzNCwyNzc0NCwzMDE5NiwzMTI1OCwzMjYyMiwzMzI2OCwzNDU4NCwzNjkzMywzOTM0NywzMTY4OSwzMDA0NCwzMTQ4MSwzMTU2OSwzMzk4OCwzNjg4''@;'; put 'put ''MCwzMTIwOSwzMTM3OCwzMzU5MCwyMzI2NSwzMDUyOCwyMDAxMywyMDIxMCwyMzQ0OSwyNDU0NCwyNTI3NywyNjE3MiwyNjYwOSwyNzg4MCwzNDQxMSwzNDkzNSwzNTM4NywzNzE5OCwzNzYxOSwzOTM3NiwyNzE1OSwyODcxMCwyOTQ4MiwzMzUxMSwzMzg3OSwzNjAxNSwxOTk2OSwyMDgwNiwy''@;'; put 'put ''MDkzOSwyMTg5OSwyMzU0MSwyNDA4NiwyNDExNSwyNDE5MywyNDM0MCwyNDM3MywyNDQyNywyNDUwMCwyNTA3NCwyNTM2MSwyNjI3NCwyNjM5NywyODUyNiwyOTI2NiwzMDAxMCwzMDUyMiwzMjg4NCwzMzA4MSwzMzE0NCwzNDY3OCwzNTUxOSwzNTU0OCwzNjIyOSwzNjMzOSwzNzUzMCwzODI2''@;'; put 'put ''MywzODkxNCw0MDE2NSwyMTE4OSwyNTQzMSwzMDQ1MiwyNjM4OSwyNzc4NCwyOTY0NSwzNjAzNSwzNzgwNiwzODUxNSwyNzk0MSwyMjY4NCwyNjg5NCwyNzA4NCwzNjg2MSwzNzc4NiwzMDE3MSwzNjg5MCwyMjYxOCwyNjYyNiwyNTUyNCwyNzEzMSwyMDI5MSwyODQ2MCwyNjU4NCwzNjc5NSwz''@;'; put 'put ''NDA4NiwzMjE4MCwzNzcxNiwyNjk0MywyODUyOCwyMjM3OCwyMjc3NSwyMzM0MCwzMjA0NCwyOTIyNiwyMTUxNCwzNzM0Nyw0MDM3MiwyMDE0MSwyMDMwMiwyMDU3MiwyMDU5NywyMTA1OSwzNTk5OCwyMTU3NiwyMjU2NCwyMzQ1MCwyNDA5MywyNDIxMywyNDIzNywyNDMxMSwyNDM1MSwyNDcx''@;'; put 'put ''NiwyNTI2OSwyNTQwMiwyNTU1MiwyNjc5OSwyNzcxMiwzMDg1NSwzMTExOCwzMTI0MywzMjIyNCwzMzM1MSwzNTMzMCwzNTU1OCwzNjQyMCwzNjg4MywzNzA0OCwzNzE2NSwzNzMzNiw0MDcxOCwyNzg3NywyNTY4OCwyNTgyNiwyNTk3MywyODQwNCwzMDM0MCwzMTUxNSwzNjk2OSwzNzg0MSwy''@;'; put 'put ''ODM0NiwyMTc0NiwyNDUwNSwyNTc2NCwzNjY4NSwzNjg0NSwzNzQ0NCwyMDg1NiwyMjYzNSwyMjgyNSwyMzYzNywyNDIxNSwyODE1NSwzMjM5OSwyOTk4MCwzNjAyOCwzNjU3OCwzOTAwMywyODg1NywyMDI1MywyNzU4MywyODU5MywzZTQsMzg2NTEsMjA4MTQsMjE1MjAsMjI1ODEsMjI2MTUs''@;'; put 'put ''MjI5NTYsMjM2NDgsMjQ0NjYsMjYwMDcsMjY0NjAsMjgxOTMsMzAzMzEsMzM3NTksMzYwNzcsMzY4ODQsMzcxMTcsMzc3MDksMzA3NTcsMzA3NzgsMjExNjIsMjQyMzAsMjIzMDMsMjI5MDAsMjQ1OTQsMjA0OTgsMjA4MjYsMjA5MDgsMjA5NDEsMjA5OTIsMjE3NzYsMjI2MTIsMjI2MTYsMjI4''@;'; put 'put ''NzEsMjM0NDUsMjM3OTgsMjM5NDcsMjQ3NjQsMjUyMzcsMjU2NDUsMjY0ODEsMjY2OTEsMjY4MTIsMjY4NDcsMzA0MjMsMjgxMjAsMjgyNzEsMjgwNTksMjg3ODMsMjkxMjgsMjQ0MDMsMzAxNjgsMzEwOTUsMzE1NjEsMzE1NzIsMzE1NzAsMzE5NTgsMzIxMTMsMjEwNDAsMzM4OTEsMzQxNTMs''@;'; put 'put ''MzQyNzYsMzUzNDIsMzU1ODgsMzU5MTAsMzYzNjcsMzY4NjcsMzY4NzksMzc5MTMsMzg1MTgsMzg5NTcsMzk0NzIsMzgzNjAsMjA2ODUsMjEyMDUsMjE1MTYsMjI1MzAsMjM1NjYsMjQ5OTksMjU3NTgsMjc5MzQsMzA2NDMsMzE0NjEsMzMwMTIsMzM3OTYsMzY5NDcsMzc1MDksMjM3NzYsNDAx''@;'; put 'put ''OTksMjEzMTEsMjQ0NzEsMjQ0OTksMjgwNjAsMjkzMDUsMzA1NjMsMzExNjcsMzE3MTYsMjc2MDIsMjk0MjAsMzU1MDEsMjY2MjcsMjcyMzMsMjA5ODQsMzEzNjEsMjY5MzIsMjM2MjYsNDAxODIsMzM1MTUsMjM0OTMsMzcxOTMsMjg3MDIsMjIxMzYsMjM2NjMsMjQ3NzUsMjU5NTgsMjc3ODgs''@;'; put 'put ''MzU5MzAsMzY5MjksMzg5MzEsMjE1ODUsMjYzMTEsMzczODksMjI4NTYsMzcwMjcsMjA4NjksMjAwNDUsMjA5NzAsMzQyMDEsMzU1OTgsMjg3NjAsMjU0NjYsMzc3MDcsMjY5NzgsMzkzNDgsMzIyNjAsMzAwNzEsMjEzMzUsMjY5NzYsMzY1NzUsMzg2MjcsMjc3NDEsMjAxMDgsMjM2MTIsMjQz''@;'; put 'put ''MzYsMzY4NDEsMjEyNTAsMzYwNDksMzI5MDUsMzQ0MjUsMjQzMTksMjYwODUsMjAwODMsMjA4MzcsMjI5MTQsMjM2MTUsMzg4OTQsMjAyMTksMjI5MjIsMjQ1MjUsMzU0NjksMjg2NDEsMzExNTIsMzEwNzQsMjM1MjcsMzM5MDUsMjk0ODMsMjkxMDUsMjQxODAsMjQ1NjUsMjU0NjcsMjU3NTQs''@;'; put 'put ''MjkxMjMsMzE4OTYsMjAwMzUsMjQzMTYsMjAwNDMsMjI0OTIsMjIxNzgsMjQ3NDUsMjg2MTEsMzIwMTMsMzMwMjEsMzMwNzUsMzMyMTUsMzY3ODYsMzUyMjMsMzQ0NjgsMjQwNTIsMjUyMjYsMjU3NzMsMzUyMDcsMjY0ODcsMjc4NzQsMjc5NjYsMjk3NTAsMzA3NzIsMjMxMTAsMzI2MjksMzM0''@;'; put 'put ''NTMsMzkzNDAsMjA0NjcsMjQyNTksMjUzMDksMjU0OTAsMjU5NDMsMjY0NzksMzA0MDMsMjkyNjAsMzI5NzIsMzI5NTQsMzY2NDksMzcxOTcsMjA0OTMsMjI1MjEsMjMxODYsMjY3NTcsMjY5OTUsMjkwMjgsMjk0MzcsMzYwMjMsMjI3NzAsMzYwNjQsMzg1MDYsMzY4ODksMzQ2ODcsMzEyMDQs''@;'; put 'put ''MzA2OTUsMzM4MzMsMjAyNzEsMjEwOTMsMjEzMzgsMjUyOTMsMjY1NzUsMjc4NTAsMzAzMzMsMzE2MzYsMzE4OTMsMzMzMzQsMzQxODAsMzY4NDMsMjYzMzMsMjg0NDgsMjkxOTAsMzIyODMsMzM3MDcsMzkzNjEsNDA2MTQsMjA5ODksMzE2NjUsMzA4MzQsMzE2NzIsMzI5MDMsMzE1NjAsMjcz''@;'; put 'put ''NjgsMjQxNjEsMzI5MDgsMzAwMzMsMzAwNDgsMjA4NDMsMzc0NzQsMjgzMDAsMzAzMzAsMzcyNzEsMzk2NTgsMjAyNDAsMzI2MjQsMjUyNDQsMzE1NjcsMzgzMDksNDAxNjksMjIxMzgsMjI2MTcsMzQ1MzIsMzg1ODgsMjAyNzYsMjEwMjgsMjEzMjIsMjE0NTMsMjE0NjcsMjQwNzAsMjU2NDQs''@;'; put 'put ''MjYwMDEsMjY0OTUsMjc3MTAsMjc3MjYsMjkyNTYsMjkzNTksMjk2NzcsMzAwMzYsMzIzMjEsMzMzMjQsMzQyODEsMzYwMDksMzE2ODQsMzczMTgsMjkwMzMsMzg5MzAsMzkxNTEsMjU0MDUsMjYyMTcsMzAwNTgsMzA0MzYsMzA5MjgsMzQxMTUsMzQ1NDIsMjEyOTAsMjEzMjksMjE1NDIsMjI5''@;'; put 'put ''MTUsMjQxOTksMjQ0NDQsMjQ3NTQsMjUxNjEsMjUyMDksMjUyNTksMjZlMywyNzYwNCwyNzg1MiwzMDEzMCwzMDM4MiwzMDg2NSwzMTE5MiwzMjIwMywzMjYzMSwzMjkzMywzNDk4NywzNTUxMywzNjAyNywzNjk5MSwzODc1MCwzOTEzMSwyNzE0NywzMTgwMCwyMDYzMywyMzYxNCwyNDQ5NCwy''@;'; put 'put ''NjUwMywyNzYwOCwyOTc0OSwzMDQ3MywzMjY1NCw0MDc2MywyNjU3MCwzMTI1NSwyMTMwNSwzMDA5MSwzOTY2MSwyNDQyMiwzMzE4MSwzMzc3NywzMjkyMCwyNDM4MCwyNDUxNywzMDA1MCwzMTU1OCwzNjkyNCwyNjcyNywyMzAxOSwyMzE5NSwzMjAxNiwzMDMzNCwzNTYyOCwyMDQ2OSwyNDQy''@;'; put 'put ''NiwyNzE2MSwyNzcwMywyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTQxMywzNTk2MSwyNDI4NywyNTU1MSwzMDE0OSwzMTE4NiwzMzQ5NSwzNzY3MiwzNzYxOCwzMzk0OCwzNDU0MSwzOTk4MSwyMTY5NywyNDQyOCwyNTk5NiwyNzk5NiwyODY5MywzNjAwNywzNjA1MSwzODk3MSwyNTkzNSwy''@;'; put 'put ''OTk0MiwxOTk4MSwyMDE4NCwyMjQ5NiwyMjgyNywyMzE0MiwyMzUwMCwyMDkwNCwyNDA2NywyNDIyMCwyNDU5OCwyNTIwNiwyNTk3NSwyNjAyMywyNjIyMiwyODAxNCwyOTIzOCwzMTUyNiwzMzEwNCwzMzE3OCwzMzQzMywzNTY3NiwzNmUzLDM2MDcwLDM2MjEyLDM4NDI4LDM4NDY4LDIwMzk4''@;'; put 'put ''LDI1NzcxLDI3NDk0LDMzMzEwLDMzODg5LDM0MTU0LDM3MDk2LDIzNTUzLDI2OTYzLDM5MDgwLDMzOTE0LDM0MTM1LDIwMjM5LDIxMTAzLDI0NDg5LDI0MTMzLDI2MzgxLDMxMTE5LDMzMTQ1LDM1MDc5LDM1MjA2LDI4MTQ5LDI0MzQzLDI1MTczLDI3ODMyLDIwMTc1LDI5Mjg5LDM5ODI2LDIw''@;'; put 'put ''OTk4LDIxNTYzLDIyMTMyLDIyNzA3LDI0OTk2LDI1MTk4LDI4OTU0LDIyODk0LDMxODgxLDMxOTY2LDMyMDI3LDM4NjQwLDI1OTkxLDMyODYyLDE5OTkzLDIwMzQxLDIwODUzLDIyNTkyLDI0MTYzLDI0MTc5LDI0MzMwLDI2NTY0LDIwMDA2LDM0MTA5LDM4MjgxLDM4NDkxLDMxODU5LDM4OTEz''@;'; put 'put ''LDIwNzMxLDIyNzIxLDMwMjk0LDMwODg3LDIxMDI5LDMwNjI5LDM0MDY1LDMxNjIyLDIwNTU5LDIyNzkzLDI5MjU1LDMxNjg3LDMyMjMyLDM2Nzk0LDM2ODIwLDM2OTQxLDIwNDE1LDIxMTkzLDIzMDgxLDI0MzIxLDM4ODI5LDIwNDQ1LDMzMzAzLDM3NjEwLDIyMjc1LDI1NDI5LDI3NDk3LDI5''@;'; put 'put ''OTk1LDM1MDM2LDM2NjI4LDMxMjk4LDIxMjE1LDIyNjc1LDI0OTE3LDI1MDk4LDI2Mjg2LDI3NTk3LDMxODA3LDMzNzY5LDIwNTE1LDIwNDcyLDIxMjUzLDIxNTc0LDIyNTc3LDIyODU3LDIzNDUzLDIzNzkyLDIzNzkxLDIzODQ5LDI0MjE0LDI1MjY1LDI1NDQ3LDI1OTE4LDI2MDQxLDI2Mzc5''@;'; put 'put ''LDI3ODYxLDI3ODczLDI4OTIxLDMwNzcwLDMyMjk5LDMyOTkwLDMzNDU5LDMzODA0LDM0MDI4LDM0NTYyLDM1MDkwLDM1MzcwLDM1OTE0LDM3MDMwLDM3NTg2LDM5MTY1LDQwMTc5LDQwMzAwLDIwMDQ3LDIwMTI5LDIwNjIxLDIxMDc4LDIyMzQ2LDIyOTUyLDI0MTI1LDI0NTM2LDI0NTM3LDI1''@;'; put 'put ''MTUxLDI2MjkyLDI2Mzk1LDI2NTc2LDI2ODM0LDIwODgyLDMyMDMzLDMyOTM4LDMzMTkyLDM1NTg0LDM1OTgwLDM2MDMxLDM3NTAyLDM4NDUwLDIxNTM2LDM4OTU2LDIxMjcxLDIwNjkzLDIxMzQwLDIyNjk2LDI1Nzc4LDI2NDIwLDI5Mjg3LDMwNTY2LDMxMzAyLDM3MzUwLDIxMTg3LDI3ODA5''@;'; put 'put ''LDI3NTI2LDIyNTI4LDI0MTQwLDIyODY4LDI2NDEyLDMyNzYzLDIwOTYxLDMwNDA2LDI1NzA1LDMwOTUyLDM5NzY0LDQwNjM1LDIyNDc1LDIyOTY5LDI2MTUxLDI2NTIyLDI3NTk4LDIxNzM3LDI3MDk3LDI0MTQ5LDMzMTgwLDI2NTE3LDM5ODUwLDI2NjIyLDQwMDE4LDI2NzE3LDIwMTM0LDIw''@;'; put 'put ''NDUxLDIxNDQ4LDI1MjczLDI2NDExLDI3ODE5LDM2ODA0LDIwMzk3LDMyMzY1LDQwNjM5LDE5OTc1LDI0OTMwLDI4Mjg4LDI4NDU5LDM0MDY3LDIxNjE5LDI2NDEwLDM5NzQ5LDI0MDUxLDMxNjM3LDIzNzI0LDIzNDk0LDM0NTg4LDI4MjM0LDM0MDAxLDMxMjUyLDMzMDMyLDIyOTM3LDMxODg1''@;'; put 'put ''LDI3NjY1LDMwNDk2LDIxMjA5LDIyODE4LDI4OTYxLDI5Mjc5LDMwNjgzLDM4Njk1LDQwMjg5LDI2ODkxLDIzMTY3LDIzMDY0LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDMwNDMxLDM2ODU1LDM3NTI4LDQwMTgwLDIzMDE4LDI5Mjc3LDI4MzU3LDIwODEzLDI2ODI1LDMyMTkxLDMyMjM2LDM4''@;'; put 'put ''NzU0LDQwNjM0LDI1NzIwLDI3MTY5LDMzNTM4LDIyOTE2LDIzMzkxLDI3NjExLDI5NDY3LDMwNDUwLDMyMTc4LDMyNzkxLDMzOTQ1LDIwNzg2LDI2NDA4LDQwNjY1LDMwNDQ2LDI2NDY2LDIxMjQ3LDM5MTczLDIzNTg4LDI1MTQ3LDMxODcwLDM2MDE2LDIxODM5LDI0NzU4LDMyMDExLDM4Mjcy''@;'; put 'put ''LDIxMjQ5LDIwMDYzLDIwOTE4LDIyODEyLDI5MjQyLDMyODIyLDM3MzI2LDI0MzU3LDMwNjkwLDIxMzgwLDI0NDQxLDMyMDA0LDM0MjIwLDM1Mzc5LDM2NDkzLDM4NzQyLDI2NjExLDM0MjIyLDM3OTcxLDI0ODQxLDI0ODQwLDI3ODMzLDMwMjkwLDM1NTY1LDM2NjY0LDIxODA3LDIwMzA1LDIw''@;'; put 'put ''Nzc4LDIxMTkxLDIxNDUxLDIzNDYxLDI0MTg5LDI0NzM2LDI0OTYyLDI1NTU4LDI2Mzc3LDI2NTg2LDI4MjYzLDI4MDQ0LDI5NDk0LDI5NDk1LDMwMDAxLDMxMDU2LDM1MDI5LDM1NDgwLDM2OTM4LDM3MDA5LDM3MTA5LDM4NTk2LDM0NzAxLDIyODA1LDIwMTA0LDIwMzEzLDE5OTgyLDM1NDY1''@;'; put 'put ''LDM2NjcxLDM4OTI4LDIwNjUzLDI0MTg4LDIyOTM0LDIzNDgxLDI0MjQ4LDI1NTYyLDI1NTk0LDI1NzkzLDI2MzMyLDI2OTU0LDI3MDk2LDI3OTE1LDI4MzQyLDI5MDc2LDI5OTkyLDMxNDA3LDMyNjUwLDMyNzY4LDMzODY1LDMzOTkzLDM1MjAxLDM1NjE3LDM2MzYyLDM2OTY1LDM4NTI1LDM5''@;'; put 'put ''MTc4LDI0OTU4LDI1MjMzLDI3NDQyLDI3Nzc5LDI4MDIwLDMyNzE2LDMyNzY0LDI4MDk2LDMyNjQ1LDM0NzQ2LDM1MDY0LDI2NDY5LDMzNzEzLDM4OTcyLDM4NjQ3LDI3OTMxLDMyMDk3LDMzODUzLDM3MjI2LDIwMDgxLDIxMzY1LDIzODg4LDI3Mzk2LDI4NjUxLDM0MjUzLDM0MzQ5LDM1MjM5''@;'; put 'put ''LDIxMDMzLDIxNTE5LDIzNjUzLDI2NDQ2LDI2NzkyLDI5NzAyLDI5ODI3LDMwMTc4LDM1MDIzLDM1MDQxLDM3MzI0LDM4NjI2LDM4NTIwLDI0NDU5LDI5NTc1LDMxNDM1LDMzODcwLDI1NTA0LDMwMDUzLDIxMTI5LDI3OTY5LDI4MzE2LDI5NzA1LDMwMDQxLDMwODI3LDMxODkwLDM4NTM0LDMx''@;'; put 'put ''NDUyLDQwODQ1LDIwNDA2LDI0OTQyLDI2MDUzLDM0Mzk2LDIwMTAyLDIwMTQyLDIwNjk4LDIwMDAxLDIwOTQwLDIzNTM0LDI2MDA5LDI2NzUzLDI4MDkyLDI5NDcxLDMwMjc0LDMwNjM3LDMxMjYwLDMxOTc1LDMzMzkxLDM1NTM4LDM2OTg4LDM3MzI3LDM4NTE3LDM4OTM2LDIxMTQ3LDMyMjA5''@;'; put 'put ''LDIwNTIzLDIxNDAwLDI2NTE5LDI4MTA3LDI5MTM2LDI5NzQ3LDMzMjU2LDM2NjUwLDM4NTYzLDQwMDIzLDQwNjA3LDI5NzkyLDIyNTkzLDI4MDU3LDMyMDQ3LDM5MDA2LDIwMTk2LDIwMjc4LDIwMzYzLDIwOTE5LDIxMTY5LDIzOTk0LDI0NjA0LDI5NjE4LDMxMDM2LDMzNDkxLDM3NDI4LDM4''@;'; put 'put ''NTgzLDM4NjQ2LDM4NjY2LDQwNTk5LDQwODAyLDI2Mjc4LDI3NTA4LDIxMDE1LDIxMTU1LDI4ODcyLDM1MDEwLDI0MjY1LDI0NjUxLDI0OTc2LDI4NDUxLDI5MDAxLDMxODA2LDMyMjQ0LDMyODc5LDM0MDMwLDM2ODk5LDM3Njc2LDIxNTcwLDM5NzkxLDI3MzQ3LDI4ODA5LDM2MDM0LDM2MzM1''@;'; put 'put ''LDM4NzA2LDIxMTcyLDIzMTA1LDI0MjY2LDI0MzI0LDI2MzkxLDI3MDA0LDI3MDI4LDI4MDEwLDI4NDMxLDI5MjgyLDI5NDM2LDMxNzI1LDMyNzY5LDMyODk0LDM0NjM1LDM3MDcwLDIwODQ1LDQwNTk1LDMxMTA4LDMyOTA3LDM3NjgyLDM1NTQyLDIwNTI1LDIxNjQ0LDM1NDQxLDI3NDk4LDM2''@;'; put 'put ''MDM2LDMzMDMxLDI0Nzg1LDI2NTI4LDQwNDM0LDIwMTIxLDIwMTIwLDM5OTUyLDM1NDM1LDM0MjQxLDM0MTUyLDI2ODgwLDI4Mjg2LDMwODcxLDMzMTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQzMzIsMTk5ODQsMTk5ODksMjAwMTAsMjAw''@;'; put 'put ''MTcsMjAwMjIsMjAwMjgsMjAwMzEsMjAwMzQsMjAwNTQsMjAwNTYsMjAwOTgsMjAxMDEsMzU5NDcsMjAxMDYsMzMyOTgsMjQzMzMsMjAxMTAsMjAxMjYsMjAxMjcsMjAxMjgsMjAxMzAsMjAxNDQsMjAxNDcsMjAxNTAsMjAxNzQsMjAxNzMsMjAxNjQsMjAxNjYsMjAxNjIsMjAxODMsMjAxOTAs''@;'; put 'put ''MjAyMDUsMjAxOTEsMjAyMTUsMjAyMzMsMjAzMTQsMjAyNzIsMjAzMTUsMjAzMTcsMjAzMTEsMjAyOTUsMjAzNDIsMjAzNjAsMjAzNjcsMjAzNzYsMjAzNDcsMjAzMjksMjAzMzYsMjAzNjksMjAzMzUsMjAzNTgsMjAzNzQsMjA3NjAsMjA0MzYsMjA0NDcsMjA0MzAsMjA0NDAsMjA0NDMsMjA0''@;'; put 'put ''MzMsMjA0NDIsMjA0MzIsMjA0NTIsMjA0NTMsMjA1MDYsMjA1MjAsMjA1MDAsMjA1MjIsMjA1MTcsMjA0ODUsMjAyNTIsMjA0NzAsMjA1MTMsMjA1MjEsMjA1MjQsMjA0NzgsMjA0NjMsMjA0OTcsMjA0ODYsMjA1NDcsMjA1NTEsMjYzNzEsMjA1NjUsMjA1NjAsMjA1NTIsMjA1NzAsMjA1NjYs''@;'; put 'put ''MjA1ODgsMjA2MDAsMjA2MDgsMjA2MzQsMjA2MTMsMjA2NjAsMjA2NTgsMjA2ODEsMjA2ODIsMjA2NTksMjA2NzQsMjA2OTQsMjA3MDIsMjA3MDksMjA3MTcsMjA3MDcsMjA3MTgsMjA3MjksMjA3MjUsMjA3NDUsMjA3MzcsMjA3MzgsMjA3NTgsMjA3NTcsMjA3NTYsMjA3NjIsMjA3NjksMjA3''@;'; put 'put ''OTQsMjA3OTEsMjA3OTYsMjA3OTUsMjA3OTksMjA4MDAsMjA4MTgsMjA4MTIsMjA4MjAsMjA4MzQsMzE0ODAsMjA4NDEsMjA4NDIsMjA4NDYsMjA4NjQsMjA4NjYsMjIyMzIsMjA4NzYsMjA4NzMsMjA4NzksMjA4ODEsMjA4ODMsMjA4ODUsMjA4ODYsMjA5MDAsMjA5MDIsMjA4OTgsMjA5MDUs''@;'; put 'put ''MjA5MDYsMjA5MDcsMjA5MTUsMjA5MTMsMjA5MTQsMjA5MTIsMjA5MTcsMjA5MjUsMjA5MzMsMjA5MzcsMjA5NTUsMjA5NjAsMzQzODksMjA5NjksMjA5NzMsMjA5NzYsMjA5ODEsMjA5OTAsMjA5OTYsMjEwMDMsMjEwMTIsMjEwMDYsMjEwMzEsMjEwMzQsMjEwMzgsMjEwNDMsMjEwNDksMjEw''@;'; put 'put ''NzEsMjEwNjAsMjEwNjcsMjEwNjgsMjEwODYsMjEwNzYsMjEwOTgsMjExMDgsMjEwOTcsMjExMDcsMjExMTksMjExMTcsMjExMzMsMjExNDAsMjExMzgsMjExMDUsMjExMjgsMjExMzcsMzY3NzYsMzY3NzUsMjExNjQsMjExNjUsMjExODAsMjExNzMsMjExODUsMjExOTcsMjEyMDcsMjEyMTQs''@;'; put 'put ''MjEyMTksMjEyMjIsMzkxNDksMjEyMTYsMjEyMzUsMjEyMzcsMjEyNDAsMjEyNDEsMjEyNTQsMjEyNTYsMzAwMDgsMjEyNjEsMjEyNjQsMjEyNjMsMjEyNjksMjEyNzQsMjEyODMsMjEyOTUsMjEyOTcsMjEyOTksMjEzMDQsMjEzMTIsMjEzMTgsMjEzMTcsMTk5OTEsMjEzMjEsMjEzMjUsMjA5''@;'; put 'put ''NTAsMjEzNDIsMjEzNTMsMjEzNTgsMjI4MDgsMjEzNzEsMjEzNjcsMjEzNzgsMjEzOTgsMjE0MDgsMjE0MTQsMjE0MTMsMjE0MjIsMjE0MjQsMjE0MzAsMjE0NDMsMzE3NjIsMzg2MTcsMjE0NzEsMjYzNjQsMjkxNjYsMjE0ODYsMjE0ODAsMjE0ODUsMjE0OTgsMjE1MDUsMjE1NjUsMjE1Njgs''@;'; put 'put ''MjE1NDgsMjE1NDksMjE1NjQsMjE1NTAsMjE1NTgsMjE1NDUsMjE1MzMsMjE1ODIsMjE2NDcsMjE2MjEsMjE2NDYsMjE1OTksMjE2MTcsMjE2MjMsMjE2MTYsMjE2NTAsMjE2MjcsMjE2MzIsMjE2MjIsMjE2MzYsMjE2NDgsMjE2MzgsMjE3MDMsMjE2NjYsMjE2ODgsMjE2NjksMjE2NzYsMjE3''@;'; put 'put ''MDAsMjE3MDQsMjE2NzIsMjE2NzUsMjE2OTgsMjE2NjgsMjE2OTQsMjE2OTIsMjE3MjAsMjE3MzMsMjE3MzQsMjE3NzUsMjE3ODAsMjE3NTcsMjE3NDIsMjE3NDEsMjE3NTQsMjE3MzAsMjE4MTcsMjE4MjQsMjE4NTksMjE4MzYsMjE4MDYsMjE4NTIsMjE4MjksMjE4NDYsMjE4NDcsMjE4MTYs''@;'; put 'put ''MjE4MTEsMjE4NTMsMjE5MTMsMjE4ODgsMjE2NzksMjE4OTgsMjE5MTksMjE4ODMsMjE4ODYsMjE5MTIsMjE5MTgsMjE5MzQsMjE4ODQsMjE4OTEsMjE5MjksMjE4OTUsMjE5MjgsMjE5NzgsMjE5NTcsMjE5ODMsMjE5NTYsMjE5ODAsMjE5ODgsMjE5NzIsMjIwMzYsMjIwMDcsMjIwMzgsMjIw''@;'; put 'put ''MTQsMjIwMTMsMjIwNDMsMjIwMDksMjIwOTQsMjIwOTYsMjkxNTEsMjIwNjgsMjIwNzAsMjIwNjYsMjIwNzIsMjIxMjMsMjIxMTYsMjIwNjMsMjIxMjQsMjIxMjIsMjIxNTAsMjIxNDQsMjIxNTQsMjIxNzYsMjIxNjQsMjIxNTksMjIxODEsMjIxOTAsMjIxOTgsMjIxOTYsMjIyMTAsMjIyMDQs''@;'; put 'put ''MjIyMDksMjIyMTEsMjIyMDgsMjIyMTYsMjIyMjIsMjIyMjUsMjIyMjcsMjIyMzEsMjIyNTQsMjIyNjUsMjIyNzIsMjIyNzEsMjIyNzYsMjIyODEsMjIyODAsMjIyODMsMjIyODUsMjIyOTEsMjIyOTYsMjIyOTQsMjE5NTksMjIzMDAsMjIzMTAsMjIzMjcsMjIzMjgsMjIzNTAsMjIzMzEsMjIz''@;'; put 'put ''MzYsMjIzNTEsMjIzNzcsMjI0NjQsMjI0MDgsMjIzNjksMjIzOTksMjI0MDksMjI0MTksMjI0MzIsMjI0NTEsMjI0MzYsMjI0NDIsMjI0NDgsMjI0NjcsMjI0NzAsMjI0ODQsMjI0ODIsMjI0ODMsMjI1MzgsMjI0ODYsMjI0OTksMjI1MzksMjI1NTMsMjI1NTcsMjI2NDIsMjI1NjEsMjI2MjYs''@;'; put 'put ''MjI2MDMsMjI2NDAsMjc1ODQsMjI2MTAsMjI1ODksMjI2NDksMjI2NjEsMjI3MTMsMjI2ODcsMjI2OTksMjI3MTQsMjI3NTAsMjI3MTUsMjI3MTIsMjI3MDIsMjI3MjUsMjI3MzksMjI3MzcsMjI3NDMsMjI3NDUsMjI3NDQsMjI3NTcsMjI3NDgsMjI3NTYsMjI3NTEsMjI3NjcsMjI3NzgsMjI3''@;'; put 'put ''NzcsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODYsMjI3OTQsMjI4MDAsMjI4MTEsMjY3OTAsMjI4MjEsMjI4MjgsMjI4MjksMjI4MzQsMjI4NDAsMjI4NDYsMzE0NDIsMjI4NjksMjI4NjQsMjI4NjIsMjI4NzQsMjI4NzIsMjI4ODIsMjI4ODAsMjI4ODcsMjI4OTIsMjI4ODksMjI5MDQsMjI5MTMs''@;'; put 'put ''MjI5NDEsMjAzMTgsMjAzOTUsMjI5NDcsMjI5NjIsMjI5ODIsMjMwMTYsMjMwMDQsMjI5MjUsMjMwMDEsMjMwMDIsMjMwNzcsMjMwNzEsMjMwNTcsMjMwNjgsMjMwNDksMjMwNjYsMjMxMDQsMjMxNDgsMjMxMTMsMjMwOTMsMjMwOTQsMjMxMzgsMjMxNDYsMjMxOTQsMjMyMjgsMjMyMzAsMjMy''@;'; put 'put ''NDMsMjMyMzQsMjMyMjksMjMyNjcsMjMyNTUsMjMyNzAsMjMyNzMsMjMyNTQsMjMyOTAsMjMyOTEsMjMzMDgsMjMzMDcsMjMzMTgsMjMzNDYsMjMyNDgsMjMzMzgsMjMzNTAsMjMzNTgsMjMzNjMsMjMzNjUsMjMzNjAsMjMzNzcsMjMzODEsMjMzODYsMjMzODcsMjMzOTcsMjM0MDEsMjM0MDgs''@;'; put 'put ''MjM0MTEsMjM0MTMsMjM0MTYsMjU5OTIsMjM0MTgsMjM0MjQsMjM0MjcsMjM0NjIsMjM0ODAsMjM0OTEsMjM0OTUsMjM0OTcsMjM1MDgsMjM1MDQsMjM1MjQsMjM1MjYsMjM1MjIsMjM1MTgsMjM1MjUsMjM1MzEsMjM1MzYsMjM1NDIsMjM1MzksMjM1NTcsMjM1NTksMjM1NjAsMjM1NjUsMjM1''@;'; put 'put ''NzEsMjM1ODQsMjM1ODYsMjM1OTIsMjM2MDgsMjM2MDksMjM2MTcsMjM2MjIsMjM2MzAsMjM2MzUsMjM2MzIsMjM2MzEsMjM0MDksMjM2NjAsMjM2NjIsMjAwNjYsMjM2NzAsMjM2NzMsMjM2OTIsMjM2OTcsMjM3MDAsMjI5MzksMjM3MjMsMjM3MzksMjM3MzQsMjM3NDAsMjM3MzUsMjM3NDks''@;'; put 'put ''MjM3NDIsMjM3NTEsMjM3NjksMjM3ODUsMjM4MDUsMjM4MDIsMjM3ODksMjM5NDgsMjM3ODYsMjM4MTksMjM4MjksMjM4MzEsMjM5MDAsMjM4MzksMjM4MzUsMjM4MjUsMjM4MjgsMjM4NDIsMjM4MzQsMjM4MzMsMjM4MzIsMjM4ODQsMjM4OTAsMjM4ODYsMjM4ODMsMjM5MTYsMjM5MjMsMjM5''@;'; put 'put ''MjYsMjM5NDMsMjM5NDAsMjM5MzgsMjM5NzAsMjM5NjUsMjM5ODAsMjM5ODIsMjM5OTcsMjM5NTIsMjM5OTEsMjM5OTYsMjQwMDksMjQwMTMsMjQwMTksMjQwMTgsMjQwMjIsMjQwMjcsMjQwNDMsMjQwNTAsMjQwNTMsMjQwNzUsMjQwOTAsMjQwODksMjQwODEsMjQwOTEsMjQxMTgsMjQxMTks''@;'; put 'put ''MjQxMzIsMjQxMzEsMjQxMjgsMjQxNDIsMjQxNTEsMjQxNDgsMjQxNTksMjQxNjIsMjQxNjQsMjQxMzUsMjQxODEsMjQxODIsMjQxODYsNDA2MzYsMjQxOTEsMjQyMjQsMjQyNTcsMjQyNTgsMjQyNjQsMjQyNzIsMjQyNzEsMjQyNzgsMjQyOTEsMjQyODUsMjQyODIsMjQyODMsMjQyOTAsMjQy''@;'; put 'put ''ODksMjQyOTYsMjQyOTcsMjQzMDAsMjQzMDUsMjQzMDcsMjQzMDQsMjQzMDgsMjQzMTIsMjQzMTgsMjQzMjMsMjQzMjksMjQ0MTMsMjQ0MTIsMjQzMzEsMjQzMzcsMjQzNDIsMjQzNjEsMjQzNjUsMjQzNzYsMjQzODUsMjQzOTIsMjQzOTYsMjQzOTgsMjQzNjcsMjQ0MDEsMjQ0MDYsMjQ0MDcs''@;'; put 'put ''MjQ0MDksMjQ0MTcsMjQ0MjksMjQ0MzUsMjQ0MzksMjQ0NTEsMjQ0NTAsMjQ0NDcsMjQ0NTgsMjQ0NTYsMjQ0NjUsMjQ0NTUsMjQ0NzgsMjQ0NzMsMjQ0NzIsMjQ0ODAsMjQ0ODgsMjQ0OTMsMjQ1MDgsMjQ1MzQsMjQ1NzEsMjQ1NDgsMjQ1NjgsMjQ1NjEsMjQ1NDEsMjQ3NTUsMjQ1NzUsMjQ2''@;'; put 'put ''MDksMjQ2NzIsMjQ2MDEsMjQ1OTIsMjQ2MTcsMjQ1OTAsMjQ2MjUsMjQ2MDMsMjQ1OTcsMjQ2MTksMjQ2MTQsMjQ1OTEsMjQ2MzQsMjQ2NjYsMjQ2NDEsMjQ2ODIsMjQ2OTUsMjQ2NzEsMjQ2NTAsMjQ2NDYsMjQ2NTMsMjQ2NzUsMjQ2NDMsMjQ2NzYsMjQ2NDIsMjQ2ODQsMjQ2ODMsMjQ2NjUs''@;'; put 'put ''MjQ3MDUsMjQ3MTcsMjQ4MDcsMjQ3MDcsMjQ3MzAsMjQ3MDgsMjQ3MzEsMjQ3MjYsMjQ3MjcsMjQ3MjIsMjQ3NDMsMjQ3MTUsMjQ4MDEsMjQ3NjAsMjQ4MDAsMjQ3ODcsMjQ3NTYsMjQ1NjAsMjQ3NjUsMjQ3NzQsMjQ3NTcsMjQ3OTIsMjQ5MDksMjQ4NTMsMjQ4MzgsMjQ4MjIsMjQ4MjMsMjQ4''@;'; put 'put ''MzIsMjQ4MjAsMjQ4MjYsMjQ4MzUsMjQ4NjUsMjQ4MjcsMjQ4MTcsMjQ4NDUsMjQ4NDYsMjQ5MDMsMjQ4OTQsMjQ4NzIsMjQ4NzEsMjQ5MDYsMjQ4OTUsMjQ4OTIsMjQ4NzYsMjQ4ODQsMjQ4OTMsMjQ4OTgsMjQ5MDAsMjQ5NDcsMjQ5NTEsMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MzksMjQ5NDgs''@;'; put 'put ''MjQ5NDMsMjQ5MzMsMjQ5NDUsMjQ5MjcsMjQ5MjUsMjQ5MTUsMjQ5NDksMjQ5ODUsMjQ5ODIsMjQ5NjcsMjUwMDQsMjQ5ODAsMjQ5ODYsMjQ5NzAsMjQ5NzcsMjUwMDMsMjUwMDYsMjUwMzYsMjUwMzQsMjUwMzMsMjUwNzksMjUwMzIsMjUwMjcsMjUwMzAsMjUwMTgsMjUwMzUsMzI2MzMsMjUw''@;'; put 'put ''MzcsMjUwNjIsMjUwNTksMjUwNzgsMjUwODIsMjUwNzYsMjUwODcsMjUwODUsMjUwODQsMjUwODYsMjUwODgsMjUwOTYsMjUwOTcsMjUxMDEsMjUxMDAsMjUxMDgsMjUxMTUsMjUxMTgsMjUxMjEsMjUxMzAsMjUxMzQsMjUxMzYsMjUxMzgsMjUxMzksMjUxNTMsMjUxNjYsMjUxODIsMjUxODcs''@;'; put 'put ''MjUxNzksMjUxODQsMjUxOTIsMjUyMTIsMjUyMTgsMjUyMjUsMjUyMTQsMjUyMzQsMjUyMzUsMjUyMzgsMjUzMDAsMjUyMTksMjUyMzYsMjUzMDMsMjUyOTcsMjUyNzUsMjUyOTUsMjUzNDMsMjUyODYsMjU4MTIsMjUyODgsMjUzMDgsMjUyOTIsMjUyOTAsMjUyODIsMjUyODcsMjUyNDMsMjUy''@;'; put 'put ''ODksMjUzNTYsMjUzMjYsMjUzMjksMjUzODMsMjUzNDYsMjUzNTIsMjUzMjcsMjUzMzMsMjU0MjQsMjU0MDYsMjU0MjEsMjU2MjgsMjU0MjMsMjU0OTQsMjU0ODYsMjU0NzIsMjU1MTUsMjU0NjIsMjU1MDcsMjU0ODcsMjU0ODEsMjU1MDMsMjU1MjUsMjU0NTEsMjU0NDksMjU1MzQsMjU1Nzcs''@;'; put 'put ''MjU1MzYsMjU1NDIsMjU1NzEsMjU1NDUsMjU1NTQsMjU1OTAsMjU1NDAsMjU2MjIsMjU2NTIsMjU2MDYsMjU2MTksMjU2MzgsMjU2NTQsMjU4ODUsMjU2MjMsMjU2NDAsMjU2MTUsMjU3MDMsMjU3MTEsMjU3MTgsMjU2NzgsMjU4OTgsMjU3NDksMjU3NDcsMjU3NjUsMjU3NjksMjU3MzYsMjU3''@;'; put 'put ''ODgsMjU4MTgsMjU4MTAsMjU3OTcsMjU3OTksMjU3ODcsMjU4MTYsMjU3OTQsMjU4NDEsMjU4MzEsMzMyODksMjU4MjQsMjU4MjUsMjUyNjAsMjU4MjcsMjU4MzksMjU5MDAsMjU4NDYsMjU4NDQsMjU4NDIsMjU4NTAsMjU4NTYsMjU4NTMsMjU4ODAsMjU4ODQsMjU4NjEsMjU4OTIsMjU4OTEs''@;'; put 'put ''MjU4OTksMjU5MDgsMjU5MDksMjU5MTEsMjU5MTAsMjU5MTIsMzAwMjcsMjU5MjgsMjU5NDIsMjU5NDEsMjU5MzMsMjU5NDQsMjU5NTAsMjU5NDksMjU5NzAsMjU5NzYsMjU5ODYsMjU5ODcsMzU3MjIsMjYwMTEsMjYwMTUsMjYwMjcsMjYwMzksMjYwNTEsMjYwNTQsMjYwNDksMjYwNTIsMjYw''@;'; put 'put ''NjAsMjYwNjYsMjYwNzUsMjYwNzMsMjYwODAsMjYwODEsMjYwOTcsMjY0ODIsMjYxMjIsMjYxMTUsMjYxMDcsMjY0ODMsMjYxNjUsMjYxNjYsMjYxNjQsMjYxNDAsMjYxOTEsMjYxODAsMjYxODUsMjYxNzcsMjYyMDYsMjYyMDUsMjYyMTIsMjYyMTUsMjYyMTYsMjYyMDcsMjYyMTAsMjYyMjQs''@;'; put 'put ''MjYyNDMsMjYyNDgsMjYyNTQsMjYyNDksMjYyNDQsMjYyNjQsMjYyNjksMjYzMDUsMjYyOTcsMjYzMTMsMjYzMDIsMjYzMDAsMjYzMDgsMjYyOTYsMjYzMjYsMjYzMzAsMjYzMzYsMjYxNzUsMjYzNDIsMjYzNDUsMjYzNTIsMjYzNTcsMjYzNTksMjYzODMsMjYzOTAsMjYzOTgsMjY0MDYsMjY0''@;'; put 'put ''MDcsMzg3MTIsMjY0MTQsMjY0MzEsMjY0MjIsMjY0MzMsMjY0MjQsMjY0MjMsMjY0MzgsMjY0NjIsMjY0NjQsMjY0NTcsMjY0NjcsMjY0NjgsMjY1MDUsMjY0ODAsMjY1MzcsMjY0OTIsMjY0NzQsMjY1MDgsMjY1MDcsMjY1MzQsMjY1MjksMjY1MDEsMjY1NTEsMjY2MDcsMjY1NDgsMjY2MDQs''@;'; put 'put ''MjY1NDcsMjY2MDEsMjY1NTIsMjY1OTYsMjY1OTAsMjY1ODksMjY1OTQsMjY2MDYsMjY1NTMsMjY1NzQsMjY1NjYsMjY1OTksMjcyOTIsMjY2NTQsMjY2OTQsMjY2NjUsMjY2ODgsMjY3MDEsMjY2NzQsMjY3MDIsMjY4MDMsMjY2NjcsMjY3MTMsMjY3MjMsMjY3NDMsMjY3NTEsMjY3ODMsMjY3''@;'; put 'put ''NjcsMjY3OTcsMjY3NzIsMjY3ODEsMjY3NzksMjY3NTUsMjczMTAsMjY4MDksMjY3NDAsMjY4MDUsMjY3ODQsMjY4MTAsMjY4OTUsMjY3NjUsMjY3NTAsMjY4ODEsMjY4MjYsMjY4ODgsMjY4NDAsMjY5MTQsMjY5MTgsMjY4NDksMjY4OTIsMjY4MjksMjY4MzYsMjY4NTUsMjY4MzcsMjY5MzQs''@;'; put 'put ''MjY4OTgsMjY4ODQsMjY4MzksMjY4NTEsMjY5MTcsMjY4NzMsMjY4NDgsMjY4NjMsMjY5MjAsMjY5MjIsMjY5MDYsMjY5MTUsMjY5MTMsMjY4MjIsMjcwMDEsMjY5OTksMjY5NzIsMjdlMywyNjk4NywyNjk2NCwyNzAwNiwyNjk5MCwyNjkzNywyNjk5NiwyNjk0MSwyNjk2OSwyNjkyOCwyNjk3''@;'; put 'put ''NywyNjk3NCwyNjk3MywyNzAwOSwyNjk4NiwyNzA1OCwyNzA1NCwyNzA4OCwyNzA3MSwyNzA3MywyNzA5MSwyNzA3MCwyNzA4NiwyMzUyOCwyNzA4MiwyNzEwMSwyNzA2NywyNzA3NSwyNzA0NywyNzE4MiwyNzAyNSwyNzA0MCwyNzAzNiwyNzAyOSwyNzA2MCwyNzEwMiwyNzExMiwyNzEzOCwy''@;'; put 'put ''NzE2MywyNzEzNSwyNzQwMiwyNzEyOSwyNzEyMiwyNzExMSwyNzE0MSwyNzA1NywyNzE2NiwyNzExNywyNzE1NiwyNzExNSwyNzE0NiwyNzE1NCwyNzMyOSwyNzE3MSwyNzE1NSwyNzIwNCwyNzE0OCwyNzI1MCwyNzE5MCwyNzI1NiwyNzIwNywyNzIzNCwyNzIyNSwyNzIzOCwyNzIwOCwyNzE5''@;'; put 'put ''MiwyNzE3MCwyNzI4MCwyNzI3NywyNzI5NiwyNzI2OCwyNzI5OCwyNzI5OSwyNzI4NywzNDMyNywyNzMyMywyNzMzMSwyNzMzMCwyNzMyMCwyNzMxNSwyNzMwOCwyNzM1OCwyNzM0NSwyNzM1OSwyNzMwNiwyNzM1NCwyNzM3MCwyNzM4NywyNzM5NywzNDMyNiwyNzM4NiwyNzQxMCwyNzQxNCwz''@;'; put 'put ''OTcyOSwyNzQyMywyNzQ0OCwyNzQ0NywzMDQyOCwyNzQ0OSwzOTE1MCwyNzQ2MywyNzQ1OSwyNzQ2NSwyNzQ3MiwyNzQ4MSwyNzQ3NiwyNzQ4MywyNzQ4NywyNzQ4OSwyNzUxMiwyNzUxMywyNzUxOSwyNzUyMCwyNzUyNCwyNzUyMywyNzUzMywyNzU0NCwyNzU0MSwyNzU1MCwyNzU1NiwyNzU2''@;'; put 'put ''MiwyNzU2MywyNzU2NywyNzU3MCwyNzU2OSwyNzU3MSwyNzU3NSwyNzU4MCwyNzU5MCwyNzU5NSwyNzYwMywyNzYxNSwyNzYyOCwyNzYyNywyNzYzNSwyNzYzMSw0MDYzOCwyNzY1NiwyNzY2NywyNzY2OCwyNzY3NSwyNzY4NCwyNzY4MywyNzc0MiwyNzczMywyNzc0NiwyNzc1NCwyNzc3OCwy''@;'; put 'put ''Nzc4OSwyNzgwMiwyNzc3NywyNzgwMywyNzc3NCwyNzc1MiwyNzc2MywyNzc5NCwyNzc5MiwyNzg0NCwyNzg4OSwyNzg1OSwyNzgzNywyNzg2MywyNzg0NSwyNzg2OSwyNzgyMiwyNzgyNSwyNzgzOCwyNzgzNCwyNzg2NywyNzg4NywyNzg2NSwyNzg4MiwyNzkzNSwzNDg5MywyNzk1OCwyNzk0''@;'; put 'put ''NywyNzk2NSwyNzk2MCwyNzkyOSwyNzk1NywyNzk1NSwyNzkyMiwyNzkxNiwyODAwMywyODA1MSwyODAwNCwyNzk5NCwyODAyNSwyNzk5MywyODA0NiwyODA1MywyODY0NCwyODAzNywyODE1MywyODE4MSwyODE3MCwyODA4NSwyODEwMywyODEzNCwyODA4OCwyODEwMiwyODE0MCwyODEyNiwy''@;'; put 'put ''ODEwOCwyODEzNiwyODExNCwyODEwMSwyODE1NCwyODEyMSwyODEzMiwyODExNywyODEzOCwyODE0MiwyODIwNSwyODI3MCwyODIwNiwyODE4NSwyODI3NCwyODI1NSwyODIyMiwyODE5NSwyODI2NywyODIwMywyODI3OCwyODIzNywyODE5MSwyODIyNywyODIxOCwyODIzOCwyODE5NiwyODQx''@;'; put 'put ''NSwyODE4OSwyODIxNiwyODI5MCwyODMzMCwyODMxMiwyODM2MSwyODM0MywyODM3MSwyODM0OSwyODMzNSwyODM1NiwyODMzOCwyODM3MiwyODM3MywyODMwMywyODMyNSwyODM1NCwyODMxOSwyODQ4MSwyODQzMywyODc0OCwyODM5NiwyODQwOCwyODQxNCwyODQ3OSwyODQwMiwyODQ2NSwy''@;'; put 'put ''ODM5OSwyODQ2NiwyODM2NCwyODQ3OCwyODQzNSwyODQwNywyODU1MCwyODUzOCwyODUzNiwyODU0NSwyODU0NCwyODUyNywyODUwNywyODY1OSwyODUyNSwyODU0NiwyODU0MCwyODUwNCwyODU1OCwyODU2MSwyODYxMCwyODUxOCwyODU5NSwyODU3OSwyODU3NywyODU4MCwyODYwMSwyODYx''@;'; put 'put ''NCwyODU4NiwyODYzOSwyODYyOSwyODY1MiwyODYyOCwyODYzMiwyODY1NywyODY1NCwyODYzNSwyODY4MSwyODY4MywyODY2NiwyODY4OSwyODY3MywyODY4NywyODY3MCwyODY5OSwyODY5OCwyODUzMiwyODcwMSwyODY5NiwyODcwMywyODcyMCwyODczNCwyODcyMiwyODc1MywyODc3MSwy''@;'; put 'put ''ODgyNSwyODgxOCwyODg0NywyODkxMywyODg0NCwyODg1NiwyODg1MSwyODg0NiwyODg5NSwyODg3NSwyODg5MywyODg4OSwyODkzNywyODkyNSwyODk1NiwyODk1MywyOTAyOSwyOTAxMywyOTA2NCwyOTAzMCwyOTAyNiwyOTAwNCwyOTAxNCwyOTAzNiwyOTA3MSwyOTE3OSwyOTA2MCwyOTA3''@;'; put 'put ''NywyOTA5NiwyOTEwMCwyOTE0MywyOTExMywyOTExOCwyOTEzOCwyOTEyOSwyOTE0MCwyOTEzNCwyOTE1MiwyOTE2NCwyOTE1OSwyOTE3MywyOTE4MCwyOTE3NywyOTE4MywyOTE5NywyOTIwMCwyOTIxMSwyOTIyNCwyOTIyOSwyOTIyOCwyOTIzMiwyOTIzNCwyOTI0MywyOTI0NCwyOTI0Nywy''@;'; put 'put ''OTI0OCwyOTI1NCwyOTI1OSwyOTI3MiwyOTMwMCwyOTMxMCwyOTMxNCwyOTMxMywyOTMxOSwyOTMzMCwyOTMzNCwyOTM0NiwyOTM1MSwyOTM2OSwyOTM2MiwyOTM3OSwyOTM4MiwyOTM4MCwyOTM5MCwyOTM5NCwyOTQxMCwyOTQwOCwyOTQwOSwyOTQzMywyOTQzMSwyMDQ5NSwyOTQ2MywyOTQ1''@;'; put 'put ''MCwyOTQ2OCwyOTQ2MiwyOTQ2OSwyOTQ5MiwyOTQ4NywyOTQ4MSwyOTQ3NywyOTUwMiwyOTUxOCwyOTUxOSw0MDY2NCwyOTUyNywyOTU0NiwyOTU0NCwyOTU1MiwyOTU2MCwyOTU1NywyOTU2MywyOTU2MiwyOTY0MCwyOTYxOSwyOTY0NiwyOTYyNywyOTYzMiwyOTY2OSwyOTY3OCwyOTY2Miwy''@;'; put 'put ''OTg1OCwyOTcwMSwyOTgwNywyOTczMywyOTY4OCwyOTc0NiwyOTc1NCwyOTc4MSwyOTc1OSwyOTc5MSwyOTc4NSwyOTc2MSwyOTc4OCwyOTgwMSwyOTgwOCwyOTc5NSwyOTgwMiwyOTgxNCwyOTgyMiwyOTgzNSwyOTg1NCwyOTg2MywyOTg5OCwyOTkwMywyOTkwOCwyOTY4MSwyOTkyMCwyOTky''@;'; put 'put ''MywyOTkyNywyOTkyOSwyOTkzNCwyOTkzOCwyOTkzNiwyOTkzNywyOTk0NCwyOTk0MywyOTk1NiwyOTk1NSwyOTk1NywyOTk2NCwyOTk2NiwyOTk2NSwyOTk3MywyOTk3MSwyOTk4MiwyOTk5MCwyOTk5NiwzMDAxMiwzMDAyMCwzMDAyOSwzMDAyNiwzMDAyNSwzMDA0MywzMDAyMiwzMDA0Miwz''@;'; put 'put ''MDA1NywzMDA1MiwzMDA1NSwzMDA1OSwzMDA2MSwzMDA3MiwzMDA3MCwzMDA4NiwzMDA4NywzMDA2OCwzMDA5MCwzMDA4OSwzMDA4MiwzMDEwMCwzMDEwNiwzMDEwOSwzMDExNywzMDExNSwzMDE0NiwzMDEzMSwzMDE0NywzMDEzMywzMDE0MSwzMDEzNiwzMDE0MCwzMDEyOSwzMDE1NywzMDE1''@;'; put 'put ''NCwzMDE2MiwzMDE2OSwzMDE3OSwzMDE3NCwzMDIwNiwzMDIwNywzMDIwNCwzMDIwOSwzMDE5MiwzMDIwMiwzMDE5NCwzMDE5NSwzMDIxOSwzMDIyMSwzMDIxNywzMDIzOSwzMDI0NywzMDI0MCwzMDI0MSwzMDI0MiwzMDI0NCwzMDI2MCwzMDI1NiwzMDI2NywzMDI3OSwzMDI4MCwzMDI3OCwz''@;'; put 'put ''MDMwMCwzMDI5NiwzMDMwNSwzMDMwNiwzMDMxMiwzMDMxMywzMDMxNCwzMDMxMSwzMDMxNiwzMDMyMCwzMDMyMiwzMDMyNiwzMDMyOCwzMDMzMiwzMDMzNiwzMDMzOSwzMDM0NCwzMDM0NywzMDM1MCwzMDM1OCwzMDM1NSwzMDM2MSwzMDM2MiwzMDM4NCwzMDM4OCwzMDM5MiwzMDM5MywzMDM5''@;'; put 'put ''NCwzMDQwMiwzMDQxMywzMDQyMiwzMDQxOCwzMDQzMCwzMDQzMywzMDQzNywzMDQzOSwzMDQ0MiwzNDM1MSwzMDQ1OSwzMDQ3MiwzMDQ3MSwzMDQ2OCwzMDUwNSwzMDUwMCwzMDQ5NCwzMDUwMSwzMDUwMiwzMDQ5MSwzMDUxOSwzMDUyMCwzMDUzNSwzMDU1NCwzMDU2OCwzMDU3MSwzMDU1NSwz''@;'; put 'put ''MDU2NSwzMDU5MSwzMDU5MCwzMDU4NSwzMDYwNiwzMDYwMywzMDYwOSwzMDYyNCwzMDYyMiwzMDY0MCwzMDY0NiwzMDY0OSwzMDY1NSwzMDY1MiwzMDY1MywzMDY1MSwzMDY2MywzMDY2OSwzMDY3OSwzMDY4MiwzMDY4NCwzMDY5MSwzMDcwMiwzMDcxNiwzMDczMiwzMDczOCwzMTAxNCwzMDc1''@;'; put 'put ''MiwzMTAxOCwzMDc4OSwzMDg2MiwzMDgzNiwzMDg1NCwzMDg0NCwzMDg3NCwzMDg2MCwzMDg4MywzMDkwMSwzMDg5MCwzMDg5NSwzMDkyOSwzMDkxOCwzMDkyMywzMDkzMiwzMDkxMCwzMDkwOCwzMDkxNywzMDkyMiwzMDk1NiwzMDk1MSwzMDkzOCwzMDk3MywzMDk2NCwzMDk4MywzMDk5NCwz''@;'; put 'put ''MDk5MywzMTAwMSwzMTAyMCwzMTAxOSwzMTA0MCwzMTA3MiwzMTA2MywzMTA3MSwzMTA2NiwzMTA2MSwzMTA1OSwzMTA5OCwzMTEwMywzMTExNCwzMTEzMywzMTE0Myw0MDc3OSwzMTE0NiwzMTE1MCwzMTE1NSwzMTE2MSwzMTE2MiwzMTE3NywzMTE4OSwzMTIwNywzMTIxMiwzMTIwMSwzMTIw''@;'; put 'put ''MywzMTI0MCwzMTI0NSwzMTI1NiwzMTI1NywzMTI2NCwzMTI2MywzMTEwNCwzMTI4MSwzMTI5MSwzMTI5NCwzMTI4NywzMTI5OSwzMTMxOSwzMTMwNSwzMTMyOSwzMTMzMCwzMTMzNyw0MDg2MSwzMTM0NCwzMTM1MywzMTM1NywzMTM2OCwzMTM4MywzMTM4MSwzMTM4NCwzMTM4MiwzMTQwMSwz''@;'; put 'put ''MTQzMiwzMTQwOCwzMTQxNCwzMTQyOSwzMTQyOCwzMTQyMywzNjk5NSwzMTQzMSwzMTQzNCwzMTQzNywzMTQzOSwzMTQ0NSwzMTQ0MywzMTQ0OSwzMTQ1MCwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MiwzMTQ2OSwzMTQ3MiwzMTQ5MCwzMTUwMywzMTQ5OCwzMTQ5NCwzMTUzOSwzMTUxMiwzMTUx''@;'; put 'put ''MywzMTUxOCwzMTU0MSwzMTUyOCwzMTU0MiwzMTU2OCwzMTYxMCwzMTQ5MiwzMTU2NSwzMTQ5OSwzMTU2NCwzMTU1NywzMTYwNSwzMTU4OSwzMTYwNCwzMTU5MSwzMTYwMCwzMTYwMSwzMTU5NiwzMTU5OCwzMTY0NSwzMTY0MCwzMTY0NywzMTYyOSwzMTY0NCwzMTY0MiwzMTYyNywzMTYzNCwz''@;'; put 'put ''MTYzMSwzMTU4MSwzMTY0MSwzMTY5MSwzMTY4MSwzMTY5MiwzMTY5NSwzMTY2OCwzMTY4NiwzMTcwOSwzMTcyMSwzMTc2MSwzMTc2NCwzMTcxOCwzMTcxNywzMTg0MCwzMTc0NCwzMTc1MSwzMTc2MywzMTczMSwzMTczNSwzMTc2NywzMTc1NywzMTczNCwzMTc3OSwzMTc4MywzMTc4NiwzMTc3''@;'; put 'put ''NSwzMTc5OSwzMTc4NywzMTgwNSwzMTgyMCwzMTgxMSwzMTgyOCwzMTgyMywzMTgwOCwzMTgyNCwzMTgzMiwzMTgzOSwzMTg0NCwzMTgzMCwzMTg0NSwzMTg1MiwzMTg2MSwzMTg3NSwzMTg4OCwzMTkwOCwzMTkxNywzMTkwNiwzMTkxNSwzMTkwNSwzMTkxMiwzMTkyMywzMTkyMiwzMTkyMSwz''@;'; put 'put ''MTkxOCwzMTkyOSwzMTkzMywzMTkzNiwzMTk0MSwzMTkzOCwzMTk2MCwzMTk1NCwzMTk2NCwzMTk3MCwzOTczOSwzMTk4MywzMTk4NiwzMTk4OCwzMTk5MCwzMTk5NCwzMjAwNiwzMjAwMiwzMjAyOCwzMjAyMSwzMjAxMCwzMjA2OSwzMjA3NSwzMjA0NiwzMjA1MCwzMjA2MywzMjA1MywzMjA3''@;'; put 'put ''MCwzMjExNSwzMjA4NiwzMjA3OCwzMjExNCwzMjEwNCwzMjExMCwzMjA3OSwzMjA5OSwzMjE0NywzMjEzNywzMjA5MSwzMjE0MywzMjEyNSwzMjE1NSwzMjE4NiwzMjE3NCwzMjE2MywzMjE4MSwzMjE5OSwzMjE4OSwzMjE3MSwzMjMxNywzMjE2MiwzMjE3NSwzMjIyMCwzMjE4NCwzMjE1OSwz''@;'; put 'put ''MjE3NiwzMjIxNiwzMjIyMSwzMjIyOCwzMjIyMiwzMjI1MSwzMjI0MiwzMjIyNSwzMjI2MSwzMjI2NiwzMjI5MSwzMjI4OSwzMjI3NCwzMjMwNSwzMjI4NywzMjI2NSwzMjI2NywzMjI5MCwzMjMyNiwzMjM1OCwzMjMxNSwzMjMwOSwzMjMxMywzMjMyMywzMjMxMSwzMjMwNiwzMjMxNCwzMjM1''@;'; put 'put ''OSwzMjM0OSwzMjM0MiwzMjM1MCwzMjM0NSwzMjM0NiwzMjM3NywzMjM2MiwzMjM2MSwzMjM4MCwzMjM3OSwzMjM4NywzMjIxMywzMjM4MSwzNjc4MiwzMjM4MywzMjM5MiwzMjM5MywzMjM5NiwzMjQwMiwzMjQwMCwzMjQwMywzMjQwNCwzMjQwNiwzMjM5OCwzMjQxMSwzMjQxMiwzMjU2OCwz''@;'; put 'put ''MjU3MCwzMjU4MSwzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MiwzMjU5MywzMjU5NywzMjU5NiwzMjYwMCwzMjYwNywzMjYwOCwzMjYxNiwzMjYxNywzMjYxNSwzMjYzMiwzMjY0MiwzMjY0NiwzMjY0MywzMjY0OCwzMjY0NywzMjY1MiwzMjY2MCwzMjY3MCwzMjY2OSwzMjY2NiwzMjY3NSwzMjY4''@;'; put 'put ''NywzMjY5MCwzMjY5NywzMjY4NiwzMjY5NCwzMjY5NiwzNTY5NywzMjcwOSwzMjcxMCwzMjcxNCwzMjcyNSwzMjcyNCwzMjczNywzMjc0MiwzMjc0NSwzMjc1NSwzMjc2MSwzOTEzMiwzMjc3NCwzMjc3MiwzMjc3OSwzMjc4NiwzMjc5MiwzMjc5MywzMjc5NiwzMjgwMSwzMjgwOCwzMjgzMSwz''@;'; put 'put ''MjgyNywzMjg0MiwzMjgzOCwzMjg1MCwzMjg1NiwzMjg1OCwzMjg2MywzMjg2NiwzMjg3MiwzMjg4MywzMjg4MiwzMjg4MCwzMjg4NiwzMjg4OSwzMjg5MywzMjg5NSwzMjkwMCwzMjkwMiwzMjkwMSwzMjkyMywzMjkxNSwzMjkyMiwzMjk0MSwyMDg4MCwzMjk0MCwzMjk4NywzMjk5NywzMjk4''@;'; put 'put ''NSwzMjk4OSwzMjk2NCwzMjk4NiwzMjk4MiwzMzAzMywzMzAwNywzMzAwOSwzMzA1MSwzMzA2NSwzMzA1OSwzMzA3MSwzMzA5OSwzODUzOSwzMzA5NCwzMzA4NiwzMzEwNywzMzEwNSwzMzAyMCwzMzEzNywzMzEzNCwzMzEyNSwzMzEyNiwzMzE0MCwzMzE1NSwzMzE2MCwzMzE2MiwzMzE1Miwz''@;'; put 'put ''MzE1NCwzMzE4NCwzMzE3MywzMzE4OCwzMzE4NywzMzExOSwzMzE3MSwzMzE5MywzMzIwMCwzMzIwNSwzMzIxNCwzMzIwOCwzMzIxMywzMzIxNiwzMzIxOCwzMzIxMCwzMzIyNSwzMzIyOSwzMzIzMywzMzI0MSwzMzI0MCwzMzIyNCwzMzI0MiwzMzI0NywzMzI0OCwzMzI1NSwzMzI3NCwzMzI3''@;'; put 'put ''NSwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NSwzMzI4NywzMzI5MCwzMzI5MywzMzI5NiwzMzMwMiwzMzMyMSwzMzMyMywzMzMzNiwzMzMzMSwzMzM0NCwzMzM2OSwzMzM2OCwzMzM3MywzMzM3MCwzMzM3NSwzMzM4MCwzMzM3OCwzMzM4NCwzMzM4NiwzMzM4NywzMzMyNiwzMzM5MywzMzM5OSwz''@;'; put 'put ''MzQwMCwzMzQwNiwzMzQyMSwzMzQyNiwzMzQ1MSwzMzQzOSwzMzQ2NywzMzQ1MiwzMzUwNSwzMzUwNywzMzUwMywzMzQ5MCwzMzUyNCwzMzUyMywzMzUzMCwzMzY4MywzMzUzOSwzMzUzMSwzMzUyOSwzMzUwMiwzMzU0MiwzMzUwMCwzMzU0NSwzMzQ5NywzMzU4OSwzMzU4OCwzMzU1OCwzMzU4''@;'; put 'put ''NiwzMzU4NSwzMzYwMCwzMzU5MywzMzYxNiwzMzYwNSwzMzU4MywzMzU3OSwzMzU1OSwzMzU2MCwzMzY2OSwzMzY5MCwzMzcwNiwzMzY5NSwzMzY5OCwzMzY4NiwzMzU3MSwzMzY3OCwzMzY3MSwzMzY3NCwzMzY2MCwzMzcxNywzMzY1MSwzMzY1MywzMzY5NiwzMzY3MywzMzcwNCwzMzc4MCwz''@;'; put 'put ''MzgxMSwzMzc3MSwzMzc0MiwzMzc4OSwzMzc5NSwzMzc1MiwzMzgwMywzMzcyOSwzMzc4MywzMzc5OSwzMzc2MCwzMzc3OCwzMzgwNSwzMzgyNiwzMzgyNCwzMzcyNSwzMzg0OCwzNDA1NCwzMzc4NywzMzkwMSwzMzgzNCwzMzg1MiwzNDEzOCwzMzkyNCwzMzkxMSwzMzg5OSwzMzk2NSwzMzkw''@;'; put 'put ''MiwzMzkyMiwzMzg5NywzMzg2MiwzMzgzNiwzMzkwMywzMzkxMywzMzg0NSwzMzk5NCwzMzg5MCwzMzk3NywzMzk4MywzMzk1MSwzNDAwOSwzMzk5NywzMzk3OSwzNDAxMCwzNGUzLDMzOTg1LDMzOTkwLDM0MDA2LDMzOTUzLDM0MDgxLDM0MDQ3LDM0MDM2LDM0MDcxLDM0MDcyLDM0MDkyLDM0''@;'; put 'put ''MDc5LDM0MDY5LDM0MDY4LDM0MDQ0LDM0MTEyLDM0MTQ3LDM0MTM2LDM0MTIwLDM0MTEzLDM0MzA2LDM0MTIzLDM0MTMzLDM0MTc2LDM0MjEyLDM0MTg0LDM0MTkzLDM0MTg2LDM0MjE2LDM0MTU3LDM0MTk2LDM0MjAzLDM0MjgyLDM0MTgzLDM0MjA0LDM0MTY3LDM0MTc0LDM0MTkyLDM0MjQ5''@;'; put 'put ''LDM0MjM0LDM0MjU1LDM0MjMzLDM0MjU2LDM0MjYxLDM0MjY5LDM0Mjc3LDM0MjY4LDM0Mjk3LDM0MzE0LDM0MzIzLDM0MzE1LDM0MzAyLDM0Mjk4LDM0MzEwLDM0MzM4LDM0MzMwLDM0MzUyLDM0MzY3LDM0MzgxLDIwMDUzLDM0Mzg4LDM0Mzk5LDM0NDA3LDM0NDE3LDM0NDUxLDM0NDY3LDM0''@;'; put 'put ''NDczLDM0NDc0LDM0NDQzLDM0NDQ0LDM0NDg2LDM0NDc5LDM0NTAwLDM0NTAyLDM0NDgwLDM0NTA1LDM0ODUxLDM0NDc1LDM0NTE2LDM0NTI2LDM0NTM3LDM0NTQwLDM0NTI3LDM0NTIzLDM0NTQzLDM0NTc4LDM0NTY2LDM0NTY4LDM0NTYwLDM0NTYzLDM0NTU1LDM0NTc3LDM0NTY5LDM0NTcz''@;'; put 'put ''LDM0NTUzLDM0NTcwLDM0NjEyLDM0NjIzLDM0NjE1LDM0NjE5LDM0NTk3LDM0NjAxLDM0NTg2LDM0NjU2LDM0NjU1LDM0NjgwLDM0NjM2LDM0NjM4LDM0Njc2LDM0NjQ3LDM0NjY0LDM0NjcwLDM0NjQ5LDM0NjQzLDM0NjU5LDM0NjY2LDM0ODIxLDM0NzIyLDM0NzE5LDM0NjkwLDM0NzM1LDM0''@;'; put 'put ''NzYzLDM0NzQ5LDM0NzUyLDM0NzY4LDM4NjE0LDM0NzMxLDM0NzU2LDM0NzM5LDM0NzU5LDM0NzU4LDM0NzQ3LDM0Nzk5LDM0ODAyLDM0Nzg0LDM0ODMxLDM0ODI5LDM0ODE0LDM0ODA2LDM0ODA3LDM0ODMwLDM0NzcwLDM0ODMzLDM0ODM4LDM0ODM3LDM0ODUwLDM0ODQ5LDM0ODY1LDM0ODcw''@;'; put 'put ''LDM0ODczLDM0ODU1LDM0ODc1LDM0ODg0LDM0ODgyLDM0ODk4LDM0OTA1LDM0OTEwLDM0OTE0LDM0OTIzLDM0OTQ1LDM0OTQyLDM0OTc0LDM0OTMzLDM0OTQxLDM0OTk3LDM0OTMwLDM0OTQ2LDM0OTY3LDM0OTYyLDM0OTkwLDM0OTY5LDM0OTc4LDM0OTU3LDM0OTgwLDM0OTkyLDM1MDA3LDM0''@;'; put 'put ''OTkzLDM1MDExLDM1MDEyLDM1MDI4LDM1MDMyLDM1MDMzLDM1MDM3LDM1MDY1LDM1MDc0LDM1MDY4LDM1MDYwLDM1MDQ4LDM1MDU4LDM1MDc2LDM1MDg0LDM1MDgyLDM1MDkxLDM1MTM5LDM1MTAyLDM1MTA5LDM1MTE0LDM1MTE1LDM1MTM3LDM1MTQwLDM1MTMxLDM1MTI2LDM1MTI4LDM1MTQ4''@;'; put 'put ''LDM1MTAxLDM1MTY4LDM1MTY2LDM1MTc0LDM1MTcyLDM1MTgxLDM1MTc4LDM1MTgzLDM1MTg4LDM1MTkxLDM1MTk4LDM1MjAzLDM1MjA4LDM1MjEwLDM1MjE5LDM1MjI0LDM1MjMzLDM1MjQxLDM1MjM4LDM1MjQ0LDM1MjQ3LDM1MjUwLDM1MjU4LDM1MjYxLDM1MjYzLDM1MjY0LDM1MjkwLDM1''@;'; put 'put ''MjkyLDM1MjkzLDM1MzAzLDM1MzE2LDM1MzIwLDM1MzMxLDM1MzUwLDM1MzQ0LDM1MzQwLDM1MzU1LDM1MzU3LDM1MzY1LDM1MzgyLDM1MzkzLDM1NDE5LDM1NDEwLDM1Mzk4LDM1NDAwLDM1NDUyLDM1NDM3LDM1NDM2LDM1NDI2LDM1NDYxLDM1NDU4LDM1NDYwLDM1NDk2LDM1NDg5LDM1NDcz''@;'; put 'put ''LDM1NDkzLDM1NDk0LDM1NDgyLDM1NDkxLDM1NTI0LDM1NTMzLDM1NTIyLDM1NTQ2LDM1NTYzLDM1NTcxLDM1NTU5LDM1NTU2LDM1NTY5LDM1NjA0LDM1NTUyLDM1NTU0LDM1NTc1LDM1NTUwLDM1NTQ3LDM1NTk2LDM1NTkxLDM1NjEwLDM1NTUzLDM1NjA2LDM1NjAwLDM1NjA3LDM1NjE2LDM1''@;'; put 'put ''NjM1LDM4ODI3LDM1NjIyLDM1NjI3LDM1NjQ2LDM1NjI0LDM1NjQ5LDM1NjYwLDM1NjYzLDM1NjYyLDM1NjU3LDM1NjcwLDM1Njc1LDM1Njc0LDM1NjkxLDM1Njc5LDM1NjkyLDM1Njk1LDM1NzAwLDM1NzA5LDM1NzEyLDM1NzI0LDM1NzI2LDM1NzMwLDM1NzMxLDM1NzM0LDM1NzM3LDM1NzM4''@;'; put 'put ''LDM1ODk4LDM1OTA1LDM1OTAzLDM1OTEyLDM1OTE2LDM1OTE4LDM1OTIwLDM1OTI1LDM1OTM4LDM1OTQ4LDM1OTYwLDM1OTYyLDM1OTcwLDM1OTc3LDM1OTczLDM1OTc4LDM1OTgxLDM1OTgyLDM1OTg4LDM1OTY0LDM1OTkyLDI1MTE3LDM2MDEzLDM2MDEwLDM2MDI5LDM2MDE4LDM2MDE5LDM2''@;'; put 'put ''MDE0LDM2MDIyLDM2MDQwLDM2MDMzLDM2MDY4LDM2MDY3LDM2MDU4LDM2MDkzLDM2MDkwLDM2MDkxLDM2MTAwLDM2MTAxLDM2MTA2LDM2MTAzLDM2MTExLDM2MTA5LDM2MTEyLDQwNzgyLDM2MTE1LDM2MDQ1LDM2MTE2LDM2MTE4LDM2MTk5LDM2MjA1LDM2MjA5LDM2MjExLDM2MjI1LDM2MjQ5''@;'; put 'put ''LDM2MjkwLDM2Mjg2LDM2MjgyLDM2MzAzLDM2MzE0LDM2MzEwLDM2MzAwLDM2MzE1LDM2Mjk5LDM2MzMwLDM2MzMxLDM2MzE5LDM2MzIzLDM2MzQ4LDM2MzYwLDM2MzYxLDM2MzUxLDM2MzgxLDM2MzgyLDM2MzY4LDM2MzgzLDM2NDE4LDM2NDA1LDM2NDAwLDM2NDA0LDM2NDI2LDM2NDIzLDM2''@;'; put 'put ''NDI1LDM2NDI4LDM2NDMyLDM2NDI0LDM2NDQxLDM2NDUyLDM2NDQ4LDM2Mzk0LDM2NDUxLDM2NDM3LDM2NDcwLDM2NDY2LDM2NDc2LDM2NDgxLDM2NDg3LDM2NDg1LDM2NDg0LDM2NDkxLDM2NDkwLDM2NDk5LDM2NDk3LDM2NTAwLDM2NTA1LDM2NTIyLDM2NTEzLDM2NTI0LDM2NTI4LDM2NTUw''@;'; put 'put ''LDM2NTI5LDM2NTQyLDM2NTQ5LDM2NTUyLDM2NTU1LDM2NTcxLDM2NTc5LDM2NjA0LDM2NjAzLDM2NTg3LDM2NjA2LDM2NjE4LDM2NjEzLDM2NjI5LDM2NjI2LDM2NjMzLDM2NjI3LDM2NjM2LDM2NjM5LDM2NjM1LDM2NjIwLDM2NjQ2LDM2NjU5LDM2NjY3LDM2NjY1LDM2Njc3LDM2Njc0LDM2''@;'; put 'put ''NjcwLDM2Njg0LDM2NjgxLDM2Njc4LDM2Njg2LDM2Njk1LDM2NzAwLDM2NzA2LDM2NzA3LDM2NzA4LDM2NzY0LDM2NzY3LDM2NzcxLDM2NzgxLDM2NzgzLDM2NzkxLDM2ODI2LDM2ODM3LDM2ODM0LDM2ODQyLDM2ODQ3LDM2OTk5LDM2ODUyLDM2ODY5LDM2ODU3LDM2ODU4LDM2ODgxLDM2ODg1''@;'; put 'put ''LDM2ODk3LDM2ODc3LDM2ODk0LDM2ODg2LDM2ODc1LDM2OTAzLDM2OTE4LDM2OTE3LDM2OTIxLDM2ODU2LDM2OTQzLDM2OTQ0LDM2OTQ1LDM2OTQ2LDM2ODc4LDM2OTM3LDM2OTI2LDM2OTUwLDM2OTUyLDM2OTU4LDM2OTY4LDM2OTc1LDM2OTgyLDM4NTY4LDM2OTc4LDM2OTk0LDM2OTg5LDM2''@;'; put 'put ''OTkzLDM2OTkyLDM3MDAyLDM3MDAxLDM3MDA3LDM3MDMyLDM3MDM5LDM3MDQxLDM3MDQ1LDM3MDkwLDM3MDkyLDI1MTYwLDM3MDgzLDM3MTIyLDM3MTM4LDM3MTQ1LDM3MTcwLDM3MTY4LDM3MTk0LDM3MjA2LDM3MjA4LDM3MjE5LDM3MjIxLDM3MjI1LDM3MjM1LDM3MjM0LDM3MjU5LDM3MjU3''@;'; put 'put ''LDM3MjUwLDM3MjgyLDM3MjkxLDM3Mjk1LDM3MjkwLDM3MzAxLDM3MzAwLDM3MzA2LDM3MzEyLDM3MzEzLDM3MzIxLDM3MzIzLDM3MzI4LDM3MzM0LDM3MzQzLDM3MzQ1LDM3MzM5LDM3MzcyLDM3MzY1LDM3MzY2LDM3NDA2LDM3Mzc1LDM3Mzk2LDM3NDIwLDM3Mzk3LDM3MzkzLDM3NDcwLDM3''@;'; put 'put ''NDYzLDM3NDQ1LDM3NDQ5LDM3NDc2LDM3NDQ4LDM3NTI1LDM3NDM5LDM3NDUxLDM3NDU2LDM3NTMyLDM3NTI2LDM3NTIzLDM3NTMxLDM3NDY2LDM3NTgzLDM3NTYxLDM3NTU5LDM3NjA5LDM3NjQ3LDM3NjI2LDM3NzAwLDM3Njc4LDM3NjU3LDM3NjY2LDM3NjU4LDM3NjY3LDM3NjkwLDM3Njg1''@;'; put 'put ''LDM3NjkxLDM3NzI0LDM3NzI4LDM3NzU2LDM3NzQyLDM3NzE4LDM3ODA4LDM3ODA0LDM3ODA1LDM3NzgwLDM3ODE3LDM3ODQ2LDM3ODQ3LDM3ODY0LDM3ODYxLDM3ODQ4LDM3ODI3LDM3ODUzLDM3ODQwLDM3ODMyLDM3ODYwLDM3OTE0LDM3OTA4LDM3OTA3LDM3ODkxLDM3ODk1LDM3OTA0LDM3''@;'; put 'put ''OTQyLDM3OTMxLDM3OTQxLDM3OTIxLDM3OTQ2LDM3OTUzLDM3OTcwLDM3OTU2LDM3OTc5LDM3OTg0LDM3OTg2LDM3OTgyLDM3OTk0LDM3NDE3LDM4ZTMsMzgwMDUsMzgwMDcsMzgwMTMsMzc5NzgsMzgwMTIsMzgwMTQsMzgwMTcsMzgwMTUsMzgyNzQsMzgyNzksMzgyODIsMzgyOTIsMzgyOTQs''@;'; put 'put ''MzgyOTYsMzgyOTcsMzgzMDQsMzgzMTIsMzgzMTEsMzgzMTcsMzgzMzIsMzgzMzEsMzgzMjksMzgzMzQsMzgzNDYsMjg2NjIsMzgzMzksMzgzNDksMzgzNDgsMzgzNTcsMzgzNTYsMzgzNTgsMzgzNjQsMzgzNjksMzgzNzMsMzgzNzAsMzg0MzMsMzg0NDAsMzg0NDYsMzg0NDcsMzg0NjYsMzg0''@;'; put 'put ''NzYsMzg0NzksMzg0NzUsMzg1MTksMzg0OTIsMzg0OTQsMzg0OTMsMzg0OTUsMzg1MDIsMzg1MTQsMzg1MDgsMzg1NDEsMzg1NTIsMzg1NDksMzg1NTEsMzg1NzAsMzg1NjcsMzg1NzcsMzg1NzgsMzg1NzYsMzg1ODAsMzg1ODIsMzg1ODQsMzg1ODUsMzg2MDYsMzg2MDMsMzg2MDEsMzg2MDUs''@;'; put 'put ''MzUxNDksMzg2MjAsMzg2NjksMzg2MTMsMzg2NDksMzg2NjAsMzg2NjIsMzg2NjQsMzg2NzUsMzg2NzAsMzg2NzMsMzg2NzEsMzg2NzgsMzg2ODEsMzg2OTIsMzg2OTgsMzg3MDQsMzg3MTMsMzg3MTcsMzg3MTgsMzg3MjQsMzg3MjYsMzg3MjgsMzg3MjIsMzg3MjksMzg3NDgsMzg3NTIsMzg3''@;'; put 'put ''NTYsMzg3NTgsMzg3NjAsMjEyMDIsMzg3NjMsMzg3NjksMzg3NzcsMzg3ODksMzg3ODAsMzg3ODUsMzg3NzgsMzg3OTAsMzg3OTUsMzg3OTksMzg4MDAsMzg4MTIsMzg4MjQsMzg4MjIsMzg4MTksMzg4MzUsMzg4MzYsMzg4NTEsMzg4NTQsMzg4NTYsMzg4NTksMzg4NzYsMzg4OTMsNDA3ODMs''@;'; put 'put ''Mzg4OTgsMzE0NTUsMzg5MDIsMzg5MDEsMzg5MjcsMzg5MjQsMzg5NjgsMzg5NDgsMzg5NDUsMzg5NjcsMzg5NzMsMzg5ODIsMzg5OTEsMzg5ODcsMzkwMTksMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjgsMzkwMjcsMzkwODIsMzkwODcsMzkwODksMzkwOTQsMzkxMDgsMzkxMDcsMzkxMTAsMzkx''@;'; put 'put ''NDUsMzkxNDcsMzkxNzEsMzkxNzcsMzkxODYsMzkxODgsMzkxOTIsMzkyMDEsMzkxOTcsMzkxOTgsMzkyMDQsMzkyMDAsMzkyMTIsMzkyMTQsMzkyMjksMzkyMzAsMzkyMzQsMzkyNDEsMzkyMzcsMzkyNDgsMzkyNDMsMzkyNDksMzkyNTAsMzkyNDQsMzkyNTMsMzkzMTksMzkzMjAsMzkzMzMs''@;'; put 'put ''MzkzNDEsMzkzNDIsMzkzNTYsMzkzOTEsMzkzODcsMzkzODksMzkzODQsMzkzNzcsMzk0MDUsMzk0MDYsMzk0MDksMzk0MTAsMzk0MTksMzk0MTYsMzk0MjUsMzk0MzksMzk0MjksMzkzOTQsMzk0NDksMzk0NjcsMzk0NzksMzk0OTMsMzk0OTAsMzk0ODgsMzk0OTEsMzk0ODYsMzk1MDksMzk1''@;'; put 'put ''MDEsMzk1MTUsMzk1MTEsMzk1MTksMzk1MjIsMzk1MjUsMzk1MjQsMzk1MjksMzk1MzEsMzk1MzAsMzk1OTcsMzk2MDAsMzk2MTIsMzk2MTYsMzk2MzEsMzk2MzMsMzk2MzUsMzk2MzYsMzk2NDYsMzk2NDcsMzk2NTAsMzk2NTEsMzk2NTQsMzk2NjMsMzk2NTksMzk2NjIsMzk2NjgsMzk2NjUs''@;'; put 'put ''Mzk2NzEsMzk2NzUsMzk2ODYsMzk3MDQsMzk3MDYsMzk3MTEsMzk3MTQsMzk3MTUsMzk3MTcsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjYsMzk3MjcsMzk3MzAsMzk3NDgsMzk3NDcsMzk3NTksMzk3NTcsMzk3NTgsMzk3NjEsMzk3NjgsMzk3OTYsMzk4MjcsMzk4MTEsMzk4MjUsMzk4''@;'; put 'put ''MzAsMzk4MzEsMzk4MzksMzk4NDAsMzk4NDgsMzk4NjAsMzk4NzIsMzk4ODIsMzk4NjUsMzk4NzgsMzk4ODcsMzk4ODksMzk4OTAsMzk5MDcsMzk5MDYsMzk5MDgsMzk4OTIsMzk5MDUsMzk5OTQsMzk5MjIsMzk5MjEsMzk5MjAsMzk5NTcsMzk5NTYsMzk5NDUsMzk5NTUsMzk5NDgsMzk5NDIs''@;'; put 'put ''Mzk5NDQsMzk5NTQsMzk5NDYsMzk5NDAsMzk5ODIsMzk5NjMsMzk5NzMsMzk5NzIsMzk5NjksMzk5ODQsNDAwMDcsMzk5ODYsNDAwMDYsMzk5OTgsNDAwMjYsNDAwMzIsNDAwMzksNDAwNTQsNDAwNTYsNDAxNjcsNDAxNzIsNDAxNzYsNDAyMDEsNDAyMDAsNDAxNzEsNDAxOTUsNDAxOTgsNDAy''@;'; put 'put ''MzQsNDAyMzAsNDAzNjcsNDAyMjcsNDAyMjMsNDAyNjAsNDAyMTMsNDAyMTAsNDAyNTcsNDAyNTUsNDAyNTQsNDAyNjIsNDAyNjQsNDAyODUsNDAyODYsNDAyOTIsNDAyNzMsNDAyNzIsNDAyODEsNDAzMDYsNDAzMjksNDAzMjcsNDAzNjMsNDAzMDMsNDAzMTQsNDAzNDYsNDAzNTYsNDAzNjEs''@;'; put 'put ''NDAzNzAsNDAzODgsNDAzODUsNDAzNzksNDAzNzYsNDAzNzgsNDAzOTAsNDAzOTksNDAzODYsNDA0MDksNDA0MDMsNDA0NDAsNDA0MjIsNDA0MjksNDA0MzEsNDA0NDUsNDA0NzQsNDA0NzUsNDA0NzgsNDA1NjUsNDA1NjksNDA1NzMsNDA1NzcsNDA1ODQsNDA1ODcsNDA1ODgsNDA1OTQsNDA1''@;'; put 'put ''OTcsNDA1OTMsNDA2MDUsNDA2MTMsNDA2MTcsNDA2MzIsNDA2MTgsNDA2MjEsMzg3NTMsNDA2NTIsNDA2NTQsNDA2NTUsNDA2NTYsNDA2NjAsNDA2NjgsNDA2NzAsNDA2NjksNDA2NzIsNDA2NzcsNDA2ODAsNDA2ODcsNDA2OTIsNDA2OTQsNDA2OTUsNDA2OTcsNDA2OTksNDA3MDAsNDA3MDEs''@;'; put 'put ''NDA3MTEsNDA3MTIsMzAzOTEsNDA3MjUsNDA3MzcsNDA3NDgsNDA3NjYsNDA3NzgsNDA3ODYsNDA3ODgsNDA4MDMsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDYsNDA4MDcsNDA4MTIsNDA4MTAsNDA4MjMsNDA4MTgsNDA4MjIsNDA4NTMsNDA4NjAsNDA4NjQsMjI1NzUsMjcwNzksMzY5NTMsMjk3''@;'; put 'put ''OTYsMjA5NTYsMjkwODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIw''@;'; put 'put ''NDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5''@;'; put 'put ''LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIz''@;'; put 'put ''NTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0''@;'; put 'put ''LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2''@;'; put 'put ''NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0''@;'; put 'put ''LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5''@;'; put 'put ''Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3''@;'; put 'put ''LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMz''@;'; put 'put ''NjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0''@;'; put 'put ''LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3''@;'; put 'put ''NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3''@;'; put 'put ''LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5''@;'; put 'put ''ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4''@;'; put 'put ''NTUzLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0NzAsODQ4MSw4NzU3LDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIw''@;'; put 'put ''MzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0''@;'; put 'put ''LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIz''@;'; put 'put ''NDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4''@;'; put 'put ''LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2''@;'; put 'put ''MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2''@;'; put 'put ''LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0''@;'; put 'put ''MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYz''@;'; put 'put ''LDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMy''@;'; put 'put ''NTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3''@;'; put 'put ''LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3''@;'; put 'put ''NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMw''@;'; put 'put ''LDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5''@;'; put 'put ''Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0samlzMDIxMjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNzI4LDcxMSwxODQsNzI5LDczMywxNzUsNzMxLDczMCw2NTM3NCw5MDAsOTAxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjEsMTY2LDE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTg2LDE3MCwxNjksMTc0LDg0ODIsMTY0LDg0NzAsbnVs''@;'; 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 ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkwMiw5MDQsOTA1LDkwNiw5MzgsbnVs''@;'; put 'put ''bCw5MDgsbnVsbCw5MTAsOTM5LG51bGwsOTExLG51bGwsbnVsbCxudWxsLG51bGwsOTQwLDk0MSw5NDIsOTQzLDk3MCw5MTIsOTcyLDk2Miw5NzMsOTcxLDk0NCw5NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM4''@;'; put 'put ''LDEwMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE4LDExMTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTgsMjcyLG51bGwsMjk0LG51bGwsMzA2LG51bGwsMzIxLDMxOSxudWxsLDMzMCwyMTYsMzM4LG51bGwsMzU4LDIyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjIsMzIwLDMyOSwzMzEsMjQ4LDMzOSwyMjMsMzU5LDI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDE5MywxOTIsMTk2LDE5NCwyNTgsNDYxLDI1NiwyNjAsMTk3LDE5NSwyNjIsMjY0LDI2OCwxOTksMjY2LDI3MCwyMDEsMjAwLDIwMywyMDIsMjgyLDI3OCwyNzQsMjgwLG51bGwsMjg0LDI4NiwyOTAsMjg4LDI5MiwyMDUsMjA0LDIwNywyMDYsNDYzLDMwNCwyOTgsMzAyLDI5NiwzMDgs''@;'; put 'put ''MzEwLDMxMywzMTcsMzE1LDMyMywzMjcsMzI1LDIwOSwyMTEsMjEwLDIxNCwyMTIsNDY1LDMzNiwzMzIsMjEzLDM0MCwzNDQsMzQyLDM0NiwzNDgsMzUyLDM1MCwzNTYsMzU0LDIxOCwyMTcsMjIwLDIxOSwzNjQsNDY3LDM2OCwzNjIsMzcwLDM2NiwzNjAsNDcxLDQ3NSw0NzMsNDY5LDM3Miwy''@;'; put 'put ''MjEsMzc2LDM3NCwzNzcsMzgxLDM3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIyNSwyMjQsMjI4LDIyNiwyNTksNDYyLDI1NywyNjEsMjI5LDIyNywyNjMsMjY1LDI2OSwyMzEsMjY3LDI3MSwyMzMsMjMyLDIzNSwyMzQsMjgzLDI3OSwyNzUsMjgxLDUwMSwyODUsMjg3''@;'; put 'put ''LG51bGwsMjg5LDI5MywyMzcsMjM2LDIzOSwyMzgsNDY0LG51bGwsMjk5LDMwMywyOTcsMzA5LDMxMSwzMTQsMzE4LDMxNiwzMjQsMzI4LDMyNiwyNDEsMjQzLDI0MiwyNDYsMjQ0LDQ2NiwzMzcsMzMzLDI0NSwzNDEsMzQ1LDM0MywzNDcsMzQ5LDM1MywzNTEsMzU3LDM1NSwyNTAsMjQ5LDI1''@;'; put 'put ''MiwyNTEsMzY1LDQ2OCwzNjksMzYzLDM3MSwzNjcsMzYxLDQ3Miw0NzYsNDc0LDQ3MCwzNzMsMjUzLDI1NSwzNzUsMzc4LDM4MiwzODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLDE5OTcwLDE5OTcyLDE5OTczLDE5OTgwLDE5OTg2LDE5OTk5LDIwMDAzLDIwMDA0LDIwMDA4LDIwMDExLDIwMDE0LDIwMDE1LDIwMDE2LDIwMDIxLDIwMDMyLDIwMDMzLDIwMDM2LDIwMDM5LDIwMDQ5LDIwMDU4LDIwMDYwLDIwMDY3LDIwMDcyLDIwMDczLDIwMDg0LDIw''@;'; put 'put ''MDg1LDIwMDg5LDIwMDk1LDIwMTA5LDIwMTE4LDIwMTE5LDIwMTI1LDIwMTQzLDIwMTUzLDIwMTYzLDIwMTc2LDIwMTg2LDIwMTg3LDIwMTkyLDIwMTkzLDIwMTk0LDIwMjAwLDIwMjA3LDIwMjA5LDIwMjExLDIwMjEzLDIwMjIxLDIwMjIyLDIwMjIzLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjMy''@;'; put 'put ''LDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQ1LDIwMjQ2LDIwMjQ3LDIwMjQ5LDIwMjcwLDIwMjczLDIwMzIwLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg4LDIwMjkwLDIwMjk2LDIwMjk3LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzEyLDIwMzE5LDIw''@;'; put 'put ''MzIzLDIwMzMwLDIwMzMyLDIwMzM0LDIwMzM3LDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUwLDIwMzUzLDIwMzU0LDIwMzU2LDIwMzU3LDIwMzYxLDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzcyLDIwMzc1LDIwMzc3LDIwMzc4LDIwMzgyLDIwMzgz''@;'; put 'put ''LDIwNDAyLDIwNDA3LDIwNDA5LDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDIxLDIwNDIyLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDMxLDIwNDM0LDIwNDQ0LDIwNDQ4LDIwNDUwLDIwNDY0LDIwNDY2LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIw''@;'; put 'put ''NDgxLDIwNDg0LDIwNDg3LDIwNDkwLDIwNDkyLDIwNDk0LDIwNDk2LDIwNDk5LDIwNTAzLDIwNTA0LDIwNTA3LDIwNTA4LDIwNTA5LDIwNTEwLDIwNTE0LDIwNTE5LDIwNTI2LDIwNTI4LDIwNTMwLDIwNTMxLDIwNTMzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ5LDIwNTUwLDIwNTU0LDIwNTU2''@;'; put 'put ''LDIwNTU4LDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY3LDIwNTY5LDIwNTc1LDIwNTc2LDIwNTc4LDIwNTc5LDIwNTgyLDIwNTgzLDIwNTg2LDIwNTg5LDIwNTkyLDIwNTkzLDIwNTM5LDIwNjA5LDIwNjExLDIwNjEyLDIwNjE0LDIwNjE4LDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI2LDIwNjI3LDIw''@;'; put 'put ''NjI4LDIwNjMwLDIwNjM1LDIwNjM2LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjUwLDIwNjU1LDIwNjU2LDIwNjY1LDIwNjY2LDIwNjY5LDIwNjcyLDIwNjc1LDIwNjc2LDIwNjc5LDIwNjg0LDIwNjg2LDIwNjg4LDIwNjkxLDIwNjkyLDIwNjk2LDIwNzAwLDIwNzAxLDIwNzAz''@;'; put 'put ''LDIwNzA2LDIwNzA4LDIwNzEwLDIwNzEyLDIwNzEzLDIwNzE5LDIwNzIxLDIwNzI2LDIwNzMwLDIwNzM0LDIwNzM5LDIwNzQyLDIwNzQzLDIwNzQ0LDIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzIyLDIwNzUyLDIwNzU5LDIwNzYxLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzcxLDIw''@;'; put 'put ''Nzc1LDIwNzc2LDIwNzgwLDIwNzgxLDIwNzgzLDIwNzg1LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkyLDIwNzkzLDIwODAyLDIwODEwLDIwODE1LDIwODE5LDIwODIxLDIwODIzLDIwODI0LDIwODMxLDIwODM2LDIwODM4LDIwODYyLDIwODY3LDIwODY4LDIwODc1LDIwODc4LDIwODg4LDIwODkz''@;'; put 'put ''LDIwODk3LDIwODk5LDIwOTA5LDIwOTIwLDIwOTIyLDIwOTI0LDIwOTI2LDIwOTI3LDIwOTMwLDIwOTM2LDIwOTQzLDIwOTQ1LDIwOTQ2LDIwOTQ3LDIwOTQ5LDIwOTUyLDIwOTU4LDIwOTYyLDIwOTY1LDIwOTc0LDIwOTc4LDIwOTc5LDIwOTgwLDIwOTgzLDIwOTkzLDIwOTk0LDIwOTk3LDIx''@;'; put 'put ''MDEwLDIxMDExLDIxMDEzLDIxMDE0LDIxMDE2LDIxMDI2LDIxMDMyLDIxMDQxLDIxMDQyLDIxMDQ1LDIxMDUyLDIxMDYxLDIxMDY1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgyLDIxMDg0LDIxMDg3LDIxMDg4LDIxMDg5LDIxMDk0LDIxMTAyLDIxMTExLDIxMTEyLDIxMTEzLDIxMTIwLDIxMTIy''@;'; put 'put ''LDIxMTI1LDIxMTMwLDIxMTMyLDIxMTM5LDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY3LDIxMTY4LDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc4LDIxMTc5LDIxMTgxLDIxMTg0LDIxMTg4LDIxMTkwLDIxMTkyLDIxMTk2LDIx''@;'; put 'put ''MTk5LDIxMjAxLDIxMjA0LDIxMjA2LDIxMjExLDIxMjEyLDIxMjE3LDIxMjIxLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI4LDIxMjMyLDIxMjMzLDIxMjM2LDIxMjM4LDIxMjM5LDIxMjQ4LDIxMjUxLDIxMjU4LDIxMjU5LDIxMjYwLDIxMjY1LDIxMjY3LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4''@;'; put 'put ''LDIxMjc5LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk2LDIxMjk4LDIxMzAxLDIxMzA4LDIxMzA5LDIxMzEwLDIxMzE0LDIxMzI0LDIxMzIzLDIxMzM3LDIxMzM5LDIxMzQ1LDIxMzQ3LDIxMzQ5LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY5LDIxMzc0LDIx''@;'; put 'put ''Mzc5LDIxMzgzLDIxMzg0LDIxMzkwLDIxMzk1LDIxMzk2LDIxNDAxLDIxNDA1LDIxNDA5LDIxNDEyLDIxNDE4LDIxNDE5LDIxNDIzLDIxNDI2LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDM0LDIxNDM3LDIxNDQwLDIxNDQ1LDIxNDU1LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY5''@;'; put 'put ''LDIxNDcwLDIxNDcyLDIxNDc4LDIxNDc5LDIxNDkzLDIxNTA2LDIxNTIzLDIxNTMwLDIxNTM3LDIxNTQzLDIxNTQ0LDIxNTQ2LDIxNTUxLDIxNTUzLDIxNTU2LDIxNTU3LDIxNTcxLDIxNTcyLDIxNTc1LDIxNTgxLDIxNTgzLDIxNTk4LDIxNjAyLDIxNjA0LDIxNjA2LDIxNjA3LDIxNjA5LDIx''@;'; put 'put ''NjExLDIxNjEzLDIxNjE0LDIxNjIwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjQwLDIxNjQxLDIxNjQ1LDIxNjQ5LDIxNjUzLDIxNjU0LDIxNjYwLDIxNjYzLDIxNjY1LDIxNjcwLDIxNjcxLDIxNjczLDIxNjc0LDIxNjc3LDIxNjc4LDIxNjgxLDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkx''@;'; put 'put ''LDIxNjk1LDIxNzAyLDIxNzA2LDIxNzA5LDIxNzEwLDIxNzI4LDIxNzM4LDIxNzQwLDIxNzQzLDIxNzUwLDIxNzU2LDIxNzU4LDIxNzU5LDIxNzYwLDIxNzYxLDIxNzY1LDIxNzY4LDIxNzY5LDIxNzcyLDIxNzczLDIxNzc0LDIxNzgxLDIxODAyLDIxODAzLDIxODEwLDIxODEzLDIxODE0LDIx''@;'; put 'put ''ODE5LDIxODIwLDIxODIxLDIxODI1LDIxODMxLDIxODMzLDIxODM0LDIxODM3LDIxODQwLDIxODQxLDIxODQ4LDIxODUwLDIxODUxLDIxODU0LDIxODU2LDIxODU3LDIxODYwLDIxODYyLDIxODg3LDIxODg5LDIxODkwLDIxODk0LDIxODk2LDIxOTAyLDIxOTAzLDIxOTA1LDIxOTA2LDIxOTA3''@;'; put 'put ''LDIxOTA4LDIxOTExLDIxOTIzLDIxOTI0LDIxOTMzLDIxOTM4LDIxOTUxLDIxOTUzLDIxOTU1LDIxOTU4LDIxOTYxLDIxOTYzLDIxOTY0LDIxOTY2LDIxOTY5LDIxOTcwLDIxOTcxLDIxOTc1LDIxOTc2LDIxOTc5LDIxOTgyLDIxOTg2LDIxOTkzLDIyMDA2LDIyMDE1LDIyMDIxLDIyMDI0LDIy''@;'; put 'put ''MDI2LDIyMDI5LDIyMDMwLDIyMDMxLDIyMDMyLDIyMDMzLDIyMDM0LDIyMDQxLDIyMDYwLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDczLDIyMDc1LDIyMDc2LDIyMDc3LDIyMDc5LDIyMDgwLDIyMDgxLDIyMDgzLDIyMDg0LDIyMDg2LDIyMDg5LDIyMDkxLDIyMDkzLDIyMDk1LDIyMTAw''@;'; put 'put ''LDIyMTEwLDIyMTEyLDIyMTEzLDIyMTE0LDIyMTE1LDIyMTE4LDIyMTIxLDIyMTI1LDIyMTI3LDIyMTI5LDIyMTMwLDIyMTMzLDIyMTQ4LDIyMTQ5LDIyMTUyLDIyMTU1LDIyMTU2LDIyMTY1LDIyMTY5LDIyMTcwLDIyMTczLDIyMTc0LDIyMTc1LDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIy''@;'; put 'put ''MTg3LDIyMTg4LDIyMTg5LDIyMTkzLDIyMTk1LDIyMTk5LDIyMjA2LDIyMjEzLDIyMjE3LDIyMjE4LDIyMjE5LDIyMjIzLDIyMjI0LDIyMjIwLDIyMjIxLDIyMjMzLDIyMjM2LDIyMjM3LDIyMjM5LDIyMjQxLDIyMjQ0LDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjU3LDIyMjUxLDIyMjUz''@;'; put 'put ''LDIyMjYyLDIyMjYzLDIyMjczLDIyMjc0LDIyMjc5LDIyMjgyLDIyMjg0LDIyMjg5LDIyMjkzLDIyMjk4LDIyMjk5LDIyMzAxLDIyMzA0LDIyMzA2LDIyMzA3LDIyMzA4LDIyMzA5LDIyMzEzLDIyMzE0LDIyMzE2LDIyMzE4LDIyMzE5LDIyMzIzLDIyMzI0LDIyMzMzLDIyMzM0LDIyMzM1LDIy''@;'; put 'put ''MzQxLDIyMzQyLDIyMzQ4LDIyMzQ5LDIyMzU0LDIyMzcwLDIyMzczLDIyMzc1LDIyMzc2LDIyMzc5LDIyMzgxLDIyMzgyLDIyMzgzLDIyMzg0LDIyMzg1LDIyMzg3LDIyMzg4LDIyMzg5LDIyMzkxLDIyMzkzLDIyMzk0LDIyMzk1LDIyMzk2LDIyMzk4LDIyNDAxLDIyNDAzLDIyNDEyLDIyNDIw''@;'; put 'put ''LDIyNDIzLDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDMzLDIyNDIxLDIyNDM5LDIyNDQwLDIyNDQxLDIyNDQ0LDIyNDU2LDIyNDYxLDIyNDcxLDIyNDcyLDIyNDc2LDIyNDc5LDIyNDg1LDIyNDkzLDIyNDk0LDIyNTAwLDIyNTAyLDIyNTAzLDIyNTA1LDIyNTA5LDIy''@;'; put 'put ''NTEyLDIyNTE3LDIyNTE4LDIyNTIwLDIyNTI1LDIyNTI2LDIyNTI3LDIyNTMxLDIyNTMyLDIyNTM2LDIyNTM3LDIyNDk3LDIyNTQwLDIyNTQxLDIyNTU1LDIyNTU4LDIyNTU5LDIyNTYwLDIyNTY2LDIyNTY3LDIyNTczLDIyNTc4LDIyNTg1LDIyNTkxLDIyNjAxLDIyNjA0LDIyNjA1LDIyNjA3''@;'; put 'put ''LDIyNjA4LDIyNjEzLDIyNjIzLDIyNjI1LDIyNjI4LDIyNjMxLDIyNjMyLDIyNjQ4LDIyNjUyLDIyNjU1LDIyNjU2LDIyNjU3LDIyNjYzLDIyNjY0LDIyNjY1LDIyNjY2LDIyNjY4LDIyNjY5LDIyNjcxLDIyNjcyLDIyNjc2LDIyNjc4LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjk0LDIy''@;'; put 'put ''Njk3LDIyNzA1LDIyNzA2LDIyNzI0LDIyNzE2LDIyNzIyLDIyNzI4LDIyNzMzLDIyNzM0LDIyNzM2LDIyNzM4LDIyNzQwLDIyNzQyLDIyNzQ2LDIyNzQ5LDIyNzUzLDIyNzU0LDIyNzYxLDIyNzcxLDIyNzg5LDIyNzkwLDIyNzk1LDIyNzk2LDIyODAyLDIyODAzLDIyODA0LDM0MzY5LDIyODEz''@;'; put 'put ''LDIyODE3LDIyODE5LDIyODIwLDIyODI0LDIyODMxLDIyODMyLDIyODM1LDIyODM3LDIyODM4LDIyODQ3LDIyODUxLDIyODU0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODkxLDIyODkzLDIyODk1LDIyODk4LDIyOTAxLDIyOTAyLDIy''@;'; put 'put ''OTA1LDIyOTA3LDIyOTA4LDIyOTIzLDIyOTI0LDIyOTI2LDIyOTMwLDIyOTMzLDIyOTM1LDIyOTQzLDIyOTQ4LDIyOTUxLDIyOTU3LDIyOTU4LDIyOTU5LDIyOTYwLDIyOTYzLDIyOTY3LDIyOTcwLDIyOTcyLDIyOTc3LDIyOTc5LDIyOTgwLDIyOTg0LDIyOTg2LDIyOTg5LDIyOTk0LDIzMDA1''@;'; put 'put ''LDIzMDA2LDIzMDA3LDIzMDExLDIzMDEyLDIzMDE1LDIzMDIyLDIzMDIzLDIzMDI1LDIzMDI2LDIzMDI4LDIzMDMxLDIzMDQwLDIzMDQ0LDIzMDUyLDIzMDUzLDIzMDU0LDIzMDU4LDIzMDU5LDIzMDcwLDIzMDc1LDIzMDc2LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDg1LDIzMDg4LDIzMTA4LDIz''@;'; put 'put ''MTA5LDIzMTExLDIzMTEyLDIzMTE2LDIzMTIwLDIzMTI1LDIzMTM0LDIzMTM5LDIzMTQxLDIzMTQzLDIzMTQ5LDIzMTU5LDIzMTYyLDIzMTYzLDIzMTY2LDIzMTc5LDIzMTg0LDIzMTg3LDIzMTkwLDIzMTkzLDIzMTk2LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAyLDIzMjA3LDIzMjEyLDIzMjE3''@;'; put 'put ''LDIzMjE4LDIzMjE5LDIzMjIxLDIzMjI0LDIzMjI2LDIzMjI3LDIzMjMxLDIzMjM2LDIzMjM4LDIzMjQwLDIzMjQ3LDIzMjU4LDIzMjYwLDIzMjY0LDIzMjY5LDIzMjc0LDIzMjc4LDIzMjg1LDIzMjg2LDIzMjkzLDIzMjk2LDIzMjk3LDIzMzA0LDIzMzE5LDIzMzQ4LDIzMzIxLDIzMzIzLDIz''@;'; put 'put ''MzI1LDIzMzI5LDIzMzMzLDIzMzQxLDIzMzUyLDIzMzYxLDIzMzcxLDIzMzcyLDIzMzc4LDIzMzgyLDIzMzkwLDIzNDAwLDIzNDA2LDIzNDA3LDIzNDIwLDIzNDIxLDIzNDIyLDIzNDIzLDIzNDI1LDIzNDI4LDIzNDMwLDIzNDM0LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQzLDIzNDQ0LDIzNDQ2''@;'; put 'put ''LDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDg0LDIzNDg4LDIzNDg5LDIzNTAxLDIzNTAzLDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTIwLDIzNTM1LDIzNTM3LDIzNTQwLDIzNTQ5LDIzNTY0LDIzNTc1LDIzNTgyLDIz''@;'; put 'put ''NTgzLDIzNTg3LDIzNTkwLDIzNTkzLDIzNTk1LDIzNTk2LDIzNTk4LDIzNjAwLDIzNjAyLDIzNjA1LDIzNjA2LDIzNjQxLDIzNjQyLDIzNjQ0LDIzNjUwLDIzNjUxLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjYxLDIzNjY0LDIzNjY4LDIzNjY5LDIzNjc0LDIzNjc1LDIzNjc2LDIzNjc3LDIzNjg3''@;'; put 'put ''LDIzNjg4LDIzNjkwLDIzNjk1LDIzNjk4LDIzNzA5LDIzNzExLDIzNzEyLDIzNzE0LDIzNzE1LDIzNzE4LDIzNzIyLDIzNzMwLDIzNzMyLDIzNzMzLDIzNzM4LDIzNzUzLDIzNzU1LDIzNzYyLDIzNzczLDIzNzY3LDIzNzkwLDIzNzkzLDIzNzk0LDIzNzk2LDIzODA5LDIzODE0LDIzODIxLDIz''@;'; put 'put ''ODI2LDIzODUxLDIzODQzLDIzODQ0LDIzODQ2LDIzODQ3LDIzODU3LDIzODYwLDIzODY1LDIzODY5LDIzODcxLDIzODc0LDIzODc1LDIzODc4LDIzODgwLDIzODkzLDIzODg5LDIzODk3LDIzODgyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA4LDIzOTE0LDIzOTE3LDIzOTIwLDIzOTI5''@;'; put 'put ''LDIzOTMwLDIzOTM0LDIzOTM1LDIzOTM3LDIzOTM5LDIzOTQ0LDIzOTQ2LDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTYxLDIzOTYzLDIzOTY3LDIzOTY4LDIzOTc1LDIzOTc5LDIzOTg0LDIzOTg4LDIzOTkyLDIzOTkzLDI0MDAzLDI0MDA3LDI0MDExLDI0MDE2LDI0MDE0LDI0MDI0LDI0''@;'; put 'put ''MDI1LDI0MDMyLDI0MDM2LDI0MDQxLDI0MDU2LDI0MDU3LDI0MDY0LDI0MDcxLDI0MDc3LDI0MDgyLDI0MDg0LDI0MDg1LDI0MDg4LDI0MDk1LDI0MDk2LDI0MTEwLDI0MTA0LDI0MTE0LDI0MTE3LDI0MTI2LDI0MTM5LDI0MTQ0LDI0MTM3LDI0MTQ1LDI0MTUwLDI0MTUyLDI0MTU1LDI0MTU2''@;'; put 'put ''LDI0MTU4LDI0MTY4LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc2LDI0MTkyLDI0MjAzLDI0MjA2LDI0MjI2LDI0MjI4LDI0MjI5LDI0MjMyLDI0MjM0LDI0MjM2LDI0MjQxLDI0MjQzLDI0MjUzLDI0MjU0LDI0MjU1LDI0MjYyLDI0MjY4LDI0MjY3LDI0MjcwLDI0MjczLDI0''@;'; put 'put ''Mjc0LDI0Mjc2LDI0Mjc3LDI0Mjg0LDI0Mjg2LDI0MjkzLDI0Mjk5LDI0MzIyLDI0MzI2LDI0MzI3LDI0MzI4LDI0MzM0LDI0MzQ1LDI0MzQ4LDI0MzQ5LDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcyLDI0Mzc0LDI0Mzc5LDI0Mzgx''@;'; put 'put ''LDI0MzgzLDI0Mzg0LDI0Mzg4LDI0Mzg5LDI0MzkxLDI0Mzk3LDI0NDAwLDI0NDA0LDI0NDA4LDI0NDExLDI0NDE2LDI0NDE5LDI0NDIwLDI0NDIzLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDU3LDI0NDYxLDI0NDYzLDI0NDcwLDI0NDc2LDI0''@;'; put 'put ''NDc3LDI0NDgyLDI0NDg3LDI0NDkxLDI0NDg0LDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NTA0LDI0NTE2LDI0NTE5LDI0NTIwLDI0NTIxLDI0NTIzLDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTQyLDI0NTQ1LDI0NTQ2LDI0NTUyLDI0NTUzLDI0NTU0LDI0NTU2LDI0NTU3''@;'; put 'put ''LDI0NTU4LDI0NTU5LDI0NTYyLDI0NTYzLDI0NTY2LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg2LDI0NTg5LDI0NTk1LDI0NTk2LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA3LDI0NjEyLDI0NjIxLDI0NjI3LDI0NjI5LDI0NjQwLDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUyLDI0NjU3LDI0NjYwLDI0''@;'; put 'put ''NjYyLDI0NjYzLDI0NjY5LDI0NjczLDI0Njc5LDI0Njg5LDI0NzAyLDI0NzAzLDI0NzA2LDI0NzEwLDI0NzEyLDI0NzE0LDI0NzE4LDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI4LDI0NzMzLDI0NzM0LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQ0LDI0NzUyLDI0NzUzLDI0NzU5LDI0NzYzLDI0NzY2''@;'; put 'put ''LDI0NzcwLDI0NzcyLDI0Nzc2LDI0Nzc3LDI0Nzc4LDI0Nzc5LDI0NzgyLDI0NzgzLDI0Nzg4LDI0Nzg5LDI0NzkzLDI0Nzk1LDI0Nzk3LDI0Nzk4LDI0ODAyLDI0ODA1LDI0ODE4LDI0ODIxLDI0ODI0LDI0ODI4LDI0ODI5LDI0ODM0LDI0ODM5LDI0ODQyLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0''@;'; put 'put ''ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU3LDI0ODYwLDI0ODYyLDI0ODY2LDI0ODc0LDI0ODc1LDI0ODgwLDI0ODgxLDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg5LDI0ODk3LDI0OTAxLDI0OTAyLDI0OTA1LDI0OTI2LDI0OTI4LDI0OTQwLDI0OTQ2LDI0OTUyLDI0OTU1LDI0OTU2''@;'; put 'put ''LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYzLDI0OTY0LDI0OTcxLDI0OTczLDI0OTc4LDI0OTc5LDI0OTgzLDI0OTg0LDI0OTg4LDI0OTg5LDI0OTkxLDI0OTkyLDI0OTk3LDI1ZTMsMjUwMDIsMjUwMDUsMjUwMTYsMjUwMTcsMjUwMjAsMjUwMjQsMjUwMjUsMjUwMjYsMjUwMzgsMjUwMzksMjUw''@;'; put 'put ''NDUsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTcsMjUwNTgsMjUwNjMsMjUwNjUsMjUwNjEsMjUwNjgsMjUwNjksMjUwNzEsMjUwODksMjUwOTEsMjUwOTIsMjUwOTUsMjUxMDcsMjUxMDksMjUxMTYsMjUxMjAsMjUxMjIsMjUxMjMsMjUxMjcsMjUxMjksMjUxMzEsMjUxNDUsMjUxNDks''@;'; put 'put ''MjUxNTQsMjUxNTUsMjUxNTYsMjUxNTgsMjUxNjQsMjUxNjgsMjUxNjksMjUxNzAsMjUxNzIsMjUxNzQsMjUxNzgsMjUxODAsMjUxODgsMjUxOTcsMjUxOTksMjUyMDMsMjUyMTAsMjUyMTMsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyNTQsMjUyNTYsMjUyNjcsMjUyNzAsMjUyNzEsMjUy''@;'; put 'put ''NzQsMjUyNzgsMjUyNzksMjUyODQsMjUyOTQsMjUzMDEsMjUzMDIsMjUzMDYsMjUzMjIsMjUzMzAsMjUzMzIsMjUzNDAsMjUzNDEsMjUzNDcsMjUzNDgsMjUzNTQsMjUzNTUsMjUzNTcsMjUzNjAsMjUzNjMsMjUzNjYsMjUzNjgsMjUzODUsMjUzODYsMjUzODksMjUzOTcsMjUzOTgsMjU0MDEs''@;'; put 'put ''MjU0MDQsMjU0MDksMjU0MTAsMjU0MTEsMjU0MTIsMjU0MTQsMjU0MTgsMjU0MTksMjU0MjIsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzIsMjU0MzUsMjU0NDUsMjU0NDYsMjU0NTIsMjU0NTMsMjU0NTcsMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjgsMjU0NjksMjU0NzEsMjU0NzQsMjU0NzYsMjU0''@;'; put 'put ''NzksMjU0ODIsMjU0ODgsMjU0OTIsMjU0OTMsMjU0OTcsMjU0OTgsMjU1MDIsMjU1MDgsMjU1MTAsMjU1MTcsMjU1MTgsMjU1MTksMjU1MzMsMjU1MzcsMjU1NDEsMjU1NDQsMjU1NTAsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NjQsMjU1NjgsMjU1NzMsMjU1NzgsMjU1ODAsMjU1ODYs''@;'; put 'put ''MjU1ODcsMjU1ODksMjU1OTIsMjU1OTMsMjU2MDksMjU2MTAsMjU2MTYsMjU2MTgsMjU2MjAsMjU2MjQsMjU2MzAsMjU2MzIsMjU2MzQsMjU2MzYsMjU2MzcsMjU2NDEsMjU2NDIsMjU2NDcsMjU2NDgsMjU2NTMsMjU2NjEsMjU2NjMsMjU2NzUsMjU2NzksMjU2ODEsMjU2ODIsMjU2ODMsMjU2''@;'; put 'put ''ODQsMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTksMjU3MDksMjU3MTUsMjU3MTYsMjU3MjMsMjU3MjUsMjU3MzMsMjU3MzUsMjU3NDMsMjU3NDQsMjU3NDUsMjU3NTIsMjU3NTMsMjU3NTUsMjU3NTcsMjU3NTksMjU3NjEsMjU3NjMsMjU3NjYsMjU3Njgs''@;'; put 'put ''MjU3NzIsMjU3NzksMjU3ODksMjU3OTAsMjU3OTEsMjU3OTYsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDYsMjU4MDgsMjU4MDksMjU4MTMsMjU4MTUsMjU4MjgsMjU4MjksMjU4MzMsMjU4MzQsMjU4MzcsMjU4NDAsMjU4NDUsMjU4NDcsMjU4NTEsMjU4NTUsMjU4NTcsMjU4NjAsMjU4''@;'; put 'put ''NjQsMjU4NjUsMjU4NjYsMjU4NzEsMjU4NzUsMjU4NzYsMjU4NzgsMjU4ODEsMjU4ODMsMjU4ODYsMjU4ODcsMjU4OTAsMjU4OTQsMjU4OTcsMjU5MDIsMjU5MDUsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjMsMjU5MjcsMjU5MjksMjU5MzYsMjU5MzgsMjU5NDAsMjU5NTEsMjU5NTIsMjU5NTks''@;'; put 'put ''MjU5NjMsMjU5NzgsMjU5ODEsMjU5ODUsMjU5ODksMjU5OTQsMjYwMDIsMjYwMDUsMjYwMDgsMjYwMTMsMjYwMTYsMjYwMTksMjYwMjIsMjYwMzAsMjYwMzQsMjYwMzUsMjYwMzYsMjYwNDcsMjYwNTAsMjYwNTYsMjYwNTcsMjYwNjIsMjYwNjQsMjYwNjgsMjYwNzAsMjYwNzIsMjYwNzksMjYw''@;'; put 'put ''OTYsMjYwOTgsMjYxMDAsMjYxMDEsMjYxMDUsMjYxMTAsMjYxMTEsMjYxMTIsMjYxMTYsMjYxMjAsMjYxMjEsMjYxMjUsMjYxMjksMjYxMzAsMjYxMzMsMjYxMzQsMjYxNDEsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgs''@;'; put 'put ''MjYxNjAsMjYxNjEsMjYxNjMsMjYxNjksMjYxNjcsMjYxNzYsMjYxODEsMjYxODIsMjYxODYsMjYxODgsMjYxOTMsMjYxOTAsMjYxOTksMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDgsMjYyMDksMjYzNjMsMjYyMTgsMjYyMTksMjYyMjAsMjYyMzgsMjYyMjcsMjYyMjksMjYyMzksMjYy''@;'; put 'put ''MzEsMjYyMzIsMjYyMzMsMjYyMzUsMjYyNDAsMjYyMzYsMjYyNTEsMjYyNTIsMjYyNTMsMjYyNTYsMjYyNTgsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzEsMjYyNzIsMjYyNzYsMjYyODUsMjYyODksMjYyOTAsMjYyOTMsMjYyOTksMjYzMDMsMjYzMDQsMjYzMDYsMjYzMDcsMjYzMTIs''@;'; put 'put ''MjYzMTYsMjYzMTgsMjYzMTksMjYzMjQsMjYzMzEsMjYzMzUsMjYzNDQsMjYzNDcsMjYzNDgsMjYzNTAsMjYzNjIsMjYzNzMsMjYzNzUsMjYzODIsMjYzODcsMjYzOTMsMjYzOTYsMjY0MDAsMjY0MDIsMjY0MTksMjY0MzAsMjY0MzcsMjY0MzksMjY0NDAsMjY0NDQsMjY0NTIsMjY0NTMsMjY0''@;'; put 'put ''NjEsMjY0NzAsMjY0NzYsMjY0NzgsMjY0ODQsMjY0ODYsMjY0OTEsMjY0OTcsMjY1MDAsMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTUsMjY1MTgsMjY1MjAsMjY1MjEsMjY1MjMsMjY1NDQsMjY1NDUsMjY1NDYsMjY1NDksMjY1NTUsMjY1NTYsMjY1NTcsMjY2MTcsMjY1NjAsMjY1NjIsMjY1NjMs''@;'; put 'put ''MjY1NjUsMjY1NjgsMjY1NjksMjY1NzgsMjY1ODMsMjY1ODUsMjY1ODgsMjY1OTMsMjY1OTgsMjY2MDgsMjY2MTAsMjY2MTQsMjY2MTUsMjY3MDYsMjY2NDQsMjY2NDksMjY2NTMsMjY2NTUsMjY2NjQsMjY2NjMsMjY2NjgsMjY2NjksMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzUsMjY2ODMsMjY2''@;'; put 'put ''ODcsMjY2OTIsMjY2OTMsMjY2OTgsMjY3MDAsMjY3MDksMjY3MTEsMjY3MTIsMjY3MTUsMjY3MzEsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3NDEsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NTQsMjY3NTYsMjY3NTgsMjY3NjAsMjY3NzQsMjY3NzYsMjY3NzgsMjY3ODAs''@;'; put 'put ''MjY3ODUsMjY3ODcsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTgsMjY4MDIsMjY4MTEsMjY4MjEsMjY4MjQsMjY4MjgsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzgsMjY4NDEsMjY4NDQsMjY4NDUsMjY4NTMsMjY4NTYsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjQsMjY4NjUsMjY4''@;'; put 'put ''NjksMjY4NzAsMjY4NzUsMjY4NzYsMjY4NzcsMjY4ODYsMjY4ODksMjY4OTAsMjY4OTYsMjY4OTcsMjY4OTksMjY5MDIsMjY5MDMsMjY5MjksMjY5MzEsMjY5MzMsMjY5MzYsMjY5MzksMjY5NDYsMjY5NDksMjY5NTMsMjY5NTgsMjY5NjcsMjY5NzEsMjY5NzksMjY5ODAsMjY5ODEsMjY5ODIs''@;'; put 'put ''MjY5ODQsMjY5ODUsMjY5ODgsMjY5OTIsMjY5OTMsMjY5OTQsMjcwMDIsMjcwMDMsMjcwMDcsMjcwMDgsMjcwMjEsMjcwMjYsMjcwMzAsMjcwMzIsMjcwNDEsMjcwNDUsMjcwNDYsMjcwNDgsMjcwNTEsMjcwNTMsMjcwNTUsMjcwNjMsMjcwNjQsMjcwNjYsMjcwNjgsMjcwNzcsMjcwODAsMjcw''@;'; put 'put ''ODksMjcwOTQsMjcwOTUsMjcxMDYsMjcxMDksMjcxMTgsMjcxMTksMjcxMjEsMjcxMjMsMjcxMjUsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzksMjcxNTEsMjcxNTMsMjcxNTcsMjcxNjIsMjcxNjUsMjcxNjgsMjcxNzIsMjcxNzYsMjcxODQsMjcxODYsMjcxODgsMjcxOTEsMjcxOTUsMjcxOTgs''@;'; put 'put ''MjcxOTksMjcyMDUsMjcyMDYsMjcyMDksMjcyMTAsMjcyMTQsMjcyMTYsMjcyMTcsMjcyMTgsMjcyMjEsMjcyMjIsMjcyMjcsMjcyMzYsMjcyMzksMjcyNDIsMjcyNDksMjcyNTEsMjcyNjIsMjcyNjUsMjcyNjcsMjcyNzAsMjcyNzEsMjcyNzMsMjcyNzUsMjcyODEsMjcyOTEsMjcyOTMsMjcy''@;'; put 'put ''OTQsMjcyOTUsMjczMDEsMjczMDcsMjczMTEsMjczMTIsMjczMTMsMjczMTYsMjczMjUsMjczMjYsMjczMjcsMjczMzQsMjczMzcsMjczMzYsMjczNDAsMjczNDQsMjczNDgsMjczNDksMjczNTAsMjczNTYsMjczNTcsMjczNjQsMjczNjcsMjczNzIsMjczNzYsMjczNzcsMjczNzgsMjczODgs''@;'; put 'put ''MjczODksMjczOTQsMjczOTUsMjczOTgsMjczOTksMjc0MDEsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTUsMjc0MTksMjc0MjIsMjc0MjgsMjc0MzIsMjc0MzUsMjc0MzYsMjc0MzksMjc0NDUsMjc0NDYsMjc0NTEsMjc0NTUsMjc0NjIsMjc0NjYsMjc0NjksMjc0NzQsMjc0NzgsMjc0ODAsMjc0''@;'; put 'put ''ODUsMjc0ODgsMjc0OTUsMjc0OTksMjc1MDIsMjc1MDQsMjc1MDksMjc1MTcsMjc1MTgsMjc1MjIsMjc1MjUsMjc1NDMsMjc1NDcsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NjAsMjc1NjEsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjgsMjc1NzYsMjc1NzcsMjc1ODEsMjc1ODIsMjc1ODcs''@;'; put 'put ''Mjc1ODgsMjc1OTMsMjc1OTYsMjc2MDYsMjc2MTAsMjc2MTcsMjc2MTksMjc2MjIsMjc2MjMsMjc2MzAsMjc2MzMsMjc2MzksMjc2NDEsMjc2NDcsMjc2NTAsMjc2NTIsMjc2NTMsMjc2NTcsMjc2NjEsMjc2NjIsMjc2NjQsMjc2NjYsMjc2NzMsMjc2NzksMjc2ODYsMjc2ODcsMjc2ODgsMjc2''@;'; put 'put ''OTIsMjc2OTQsMjc2OTksMjc3MDEsMjc3MDIsMjc3MDYsMjc3MDcsMjc3MTEsMjc3MjIsMjc3MjMsMjc3MjUsMjc3MjcsMjc3MzAsMjc3MzIsMjc3MzcsMjc3MzksMjc3NDAsMjc3NTUsMjc3NTcsMjc3NTksMjc3NjQsMjc3NjYsMjc3NjgsMjc3NjksMjc3NzEsMjc3ODEsMjc3ODIsMjc3ODMs''@;'; put 'put ''Mjc3ODUsMjc3OTYsMjc3OTcsMjc3OTksMjc4MDAsMjc4MDQsMjc4MDcsMjc4MjQsMjc4MjYsMjc4MjgsMjc4NDIsMjc4NDYsMjc4NTMsMjc4NTUsMjc4NTYsMjc4NTcsMjc4NTgsMjc4NjAsMjc4NjIsMjc4NjYsMjc4NjgsMjc4NzIsMjc4NzksMjc4ODEsMjc4ODMsMjc4ODQsMjc4ODYsMjc4''@;'; put 'put ''OTAsMjc4OTIsMjc5MDgsMjc5MTEsMjc5MTQsMjc5MTgsMjc5MTksMjc5MjEsMjc5MjMsMjc5MzAsMjc5NDIsMjc5NDMsMjc5NDQsMjc3NTEsMjc5NTAsMjc5NTEsMjc5NTMsMjc5NjEsMjc5NjQsMjc5NjcsMjc5OTEsMjc5OTgsMjc5OTksMjgwMDEsMjgwMDUsMjgwMDcsMjgwMTUsMjgwMTYs''@;'; put 'put ''MjgwMjgsMjgwMzQsMjgwMzksMjgwNDksMjgwNTAsMjgwNTIsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNzQsMjgwNzYsMjgwODQsMjgwODcsMjgwODksMjgwOTMsMjgwOTUsMjgxMDAsMjgxMDQsMjgxMDYsMjgxMTAsMjgxMTEsMjgxMTgsMjgxMjMsMjgxMjUsMjgxMjcsMjgxMjgsMjgxMzAsMjgx''@;'; put 'put ''MzMsMjgxMzcsMjgxNDMsMjgxNDQsMjgxNDgsMjgxNTAsMjgxNTYsMjgxNjAsMjgxNjQsMjgxOTAsMjgxOTQsMjgxOTksMjgyMTAsMjgyMTQsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjgsMjgyMjksMjgyMzIsMjgyMzMsMjgyMzUsMjgyMzksMjgyNDEsMjgyNDIsMjgyNDMsMjgyNDQsMjgyNDcs''@;'; put 'put ''MjgyNTIsMjgyNTMsMjgyNTQsMjgyNTgsMjgyNTksMjgyNjQsMjgyNzUsMjgyODMsMjgyODUsMjgzMDEsMjgzMDcsMjgzMTMsMjgzMjAsMjgzMjcsMjgzMzMsMjgzMzQsMjgzMzcsMjgzMzksMjgzNDcsMjgzNTEsMjgzNTIsMjgzNTMsMjgzNTUsMjgzNTksMjgzNjAsMjgzNjIsMjgzNjUsMjgz''@;'; put 'put ''NjYsMjgzNjcsMjgzOTUsMjgzOTcsMjgzOTgsMjg0MDksMjg0MTEsMjg0MTMsMjg0MjAsMjg0MjQsMjg0MjYsMjg0MjgsMjg0MjksMjg0MzgsMjg0NDAsMjg0NDIsMjg0NDMsMjg0NTQsMjg0NTcsMjg0NTgsMjg0NjMsMjg0NjQsMjg0NjcsMjg0NzAsMjg0NzUsMjg0NzYsMjg0NjEsMjg0OTUs''@;'; put 'put ''Mjg0OTcsMjg0OTgsMjg0OTksMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDksMjg1MTAsMjg1MTMsMjg1MTQsMjg1MjAsMjg1MjQsMjg1NDEsMjg1NDIsMjg1NDcsMjg1NTEsMjg1NTIsMjg1NTUsMjg1NTYsMjg1NTcsMjg1NjAsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjYsMjg1NzAsMjg1NzUsMjg1''@;'; put 'put ''NzYsMjg1ODEsMjg1ODIsMjg1ODMsMjg1ODQsMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTcsMjg1OTgsMjg2MDQsMjg2MTMsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MzQsMjg2MzgsMjg2NDgsMjg2NDksMjg2NTYsMjg2NjEsMjg2NjUsMjg2NjgsMjg2NjksMjg2NzIsMjg2NzcsMjg2NzgsMjg2Nzks''@;'; put 'put ''Mjg2ODUsMjg2OTUsMjg3MDQsMjg3MDcsMjg3MTksMjg3MjQsMjg3MjcsMjg3MjksMjg3MzIsMjg3MzksMjg3NDAsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NTYsMjg3NTcsMjg3NjUsMjg3NjYsMjg3NTAsMjg3NzIsMjg3NzMsMjg3ODAsMjg3ODIsMjg3ODksMjg3OTAsMjg3OTgsMjg4''@;'; put 'put ''MDEsMjg4MDUsMjg4MDYsMjg4MjAsMjg4MjEsMjg4MjIsMjg4MjMsMjg4MjQsMjg4MjcsMjg4MzYsMjg4NDMsMjg4NDgsMjg4NDksMjg4NTIsMjg4NTUsMjg4NzQsMjg4ODEsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODgsMjg4OTIsMjg5MDAsMjg5MjIsMjg5MzEsMjg5MzIsMjg5MzMs''@;'; put 'put ''Mjg5MzQsMjg5MzUsMjg5MzksMjg5NDAsMjg5NDMsMjg5NTgsMjg5NjAsMjg5NzEsMjg5NzMsMjg5NzUsMjg5NzYsMjg5NzcsMjg5ODQsMjg5OTMsMjg5OTcsMjg5OTgsMjg5OTksMjkwMDIsMjkwMDMsMjkwMDgsMjkwMTAsMjkwMTUsMjkwMTgsMjkwMjAsMjkwMjIsMjkwMjQsMjkwMzIsMjkw''@;'; put 'put ''NDksMjkwNTYsMjkwNjEsMjkwNjMsMjkwNjgsMjkwNzQsMjkwODIsMjkwODMsMjkwODgsMjkwOTAsMjkxMDMsMjkxMDQsMjkxMDYsMjkxMDcsMjkxMTQsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjQsMjkxMzEsMjkxMzIsMjkxMzksMjkxNDIsMjkxNDUsMjkxNDYsMjkxNDgsMjkxNzYsMjkxODIs''@;'; put 'put ''MjkxODQsMjkxOTEsMjkxOTIsMjkxOTMsMjkyMDMsMjkyMDcsMjkyMTAsMjkyMTMsMjkyMTUsMjkyMjAsMjkyMjcsMjkyMzEsMjkyMzYsMjkyNDAsMjkyNDEsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTMsMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjcsMjkyNjksMjkyNzAsMjkyNzQsMjkyNzYsMjky''@;'; put 'put ''NzgsMjkyODAsMjkyODMsMjkyODgsMjkyOTEsMjkyOTQsMjkyOTUsMjkyOTcsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMTEsMjkzMTYsMjkzMjEsMjkzMjUsMjkzMjYsMjkzMzEsMjkzMzksMjkzNTIsMjkzNTcsMjkzNTgsMjkzNjEsMjkzNjQsMjkzNzQsMjkzNzcsMjkzODMsMjkzODUs''@;'; put 'put ''MjkzODgsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDcsMjk0MTMsMjk0MjcsMjk0MjgsMjk0MzQsMjk0MzUsMjk0MzgsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDcsMjk0NTEsMjk0NTMsMjk0NTgsMjk0NTksMjk0NjQsMjk0NjUsMjk0NzAsMjk0NzQsMjk0NzYsMjk0NzksMjk0ODAsMjk0ODQsMjk0''@;'; put 'put ''ODksMjk0OTAsMjk0OTMsMjk0OTgsMjk0OTksMjk1MDEsMjk1MDcsMjk1MTcsMjk1MjAsMjk1MjIsMjk1MjYsMjk1MjgsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzYsMjk1NDIsMjk1NDMsMjk1NDUsMjk1NDcsMjk1NDgsMjk1NTAsMjk1NTEsMjk1NTMsMjk1NTksMjk1NjEsMjk1NjQsMjk1Njgs''@;'; put 'put ''Mjk1NjksMjk1NzEsMjk1NzMsMjk1NzQsMjk1ODIsMjk1ODQsMjk1ODcsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTYsMjk1OTgsMjk1OTksMjk2MDAsMjk2MDIsMjk2MDUsMjk2MDYsMjk2MTAsMjk2MTEsMjk2MTMsMjk2MjEsMjk2MjMsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzEsMjk2MzcsMjk2''@;'; put 'put ''MzgsMjk2NDEsMjk2NDMsMjk2NDQsMjk2NDcsMjk2NTAsMjk2NTEsMjk2NTQsMjk2NTcsMjk2NjEsMjk2NjUsMjk2NjcsMjk2NzAsMjk2NzEsMjk2NzMsMjk2ODQsMjk2ODUsMjk2ODcsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTMsMjk2OTUsMjk2OTYsMjk2OTcsMjk3MDAsMjk3MDMsMjk3MDYs''@;'; put 'put ''Mjk3MTMsMjk3MjIsMjk3MjMsMjk3MzIsMjk3MzQsMjk3MzYsMjk3MzcsMjk3MzgsMjk3MzksMjk3NDAsMjk3NDEsMjk3NDIsMjk3NDMsMjk3NDQsMjk3NDUsMjk3NTMsMjk3NjAsMjk3NjMsMjk3NjQsMjk3NjYsMjk3NjcsMjk3NzEsMjk3NzMsMjk3NzcsMjk3NzgsMjk3ODMsMjk3ODksMjk3''@;'; put 'put ''OTQsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDMsMjk4MDUsMjk4MDYsMjk4MDksMjk4MTAsMjk4MjQsMjk4MjUsMjk4MjksMjk4MzAsMjk4MzEsMjk4MzMsMjk4MzksMjk4NDAsMjk4NDEsMjk4NDIsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTIsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTksMjk4NjIs''@;'; put 'put ''Mjk4NjQsMjk4NjUsMjk4NjYsMjk4NjcsMjk4NzAsMjk4NzEsMjk4NzMsMjk4NzQsMjk4NzcsMjk4ODEsMjk4ODMsMjk4ODcsMjk4OTYsMjk4OTcsMjk5MDAsMjk5MDQsMjk5MDcsMjk5MTIsMjk5MTQsMjk5MTUsMjk5MTgsMjk5MTksMjk5MjQsMjk5MjgsMjk5MzAsMjk5MzEsMjk5MzUsMjk5''@;'; put 'put ''NDAsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NTEsMjk5NTgsMjk5NzAsMjk5NzQsMjk5NzUsMjk5ODQsMjk5ODUsMjk5ODgsMjk5OTEsMjk5OTMsMjk5OTQsMjk5OTksMzAwMDYsMzAwMDksMzAwMTMsMzAwMTQsMzAwMTUsMzAwMTYsMzAwMTksMzAwMjMsMzAwMjQsMzAwMzAsMzAwMzIsMzAwMzQs''@;'; put 'put ''MzAwMzksMzAwNDYsMzAwNDcsMzAwNDksMzAwNjMsMzAwNjUsMzAwNzMsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODEsMzAwODUsMzAwOTYsMzAwOTgsMzAwOTksMzAxMDEsMzAxMDUsMzAxMDgsMzAxMTQsMzAxMTYsMzAxMzIsMzAxMzgsMzAxNDMsMzAxNDQsMzAxNDUsMzAx''@;'; put 'put ''NDgsMzAxNTAsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjcsMzAxNzIsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODAsMzAxODMsMzAxODgsMzAxOTAsMzAxOTEsMzAxOTMsMzAyMDEsMzAyMDgsMzAyMTAsMzAyMTEsMzAyMTIsMzAyMTUsMzAyMTYsMzAyMTgsMzAyMjAsMzAyMjMsMzAyMjYsMzAyMjcs''@;'; put 'put ''MzAyMjksMzAyMzAsMzAyMzMsMzAyMzUsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDMsMzAyNDUsMzAyNDYsMzAyNDksMzAyNTMsMzAyNTgsMzAyNTksMzAyNjEsMzAyNjQsMzAyNjUsMzAyNjYsMzAyNjgsMzAyODIsMzAyNzIsMzAyNzMsMzAyNzUsMzAyNzYsMzAyNzcsMzAyODEsMzAyODMsMzAy''@;'; put 'put ''OTMsMzAyOTcsMzAzMDMsMzAzMDgsMzAzMDksMzAzMTcsMzAzMTgsMzAzMTksMzAzMjEsMzAzMjQsMzAzMzcsMzAzNDEsMzAzNDgsMzAzNDksMzAzNTcsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjcsMzAzNjgsMzAzNzAsMzAzNzEsMzAzNzIsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzgs''@;'; put 'put ''MzAzODEsMzAzOTcsMzA0MDEsMzA0MDUsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTQsMzA0MjAsMzA0MjUsMzA0MzIsMzA0MzgsMzA0NDAsMzA0NDQsMzA0NDgsMzA0NDksMzA0NTQsMzA0NTcsMzA0NjAsMzA0NjQsMzA0NzAsMzA0NzQsMzA0NzgsMzA0ODIsMzA0ODQsMzA0ODUsMzA0ODcsMzA0''@;'; put 'put ''ODksMzA0OTAsMzA0OTIsMzA0OTgsMzA1MDQsMzA1MDksMzA1MTAsMzA1MTEsMzA1MTYsMzA1MTcsMzA1MTgsMzA1MjEsMzA1MjUsMzA1MjYsMzA1MzAsMzA1MzMsMzA1MzQsMzA1MzgsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NTAsMzA1NTEsMzA1NTYsMzA1NTgsMzA1NTksMzA1NjAs''@;'; put 'put ''MzA1NjIsMzA1NjQsMzA1NjcsMzA1NzAsMzA1NzIsMzA1NzYsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODYsMzA1ODksMzA1OTIsMzA1OTYsMzA2MDQsMzA2MDUsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTgsMzA2MjMsMzA2MjYsMzA2MzEsMzA2MzQsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDUsMzA2''@;'; put 'put ''NTQsMzA2NTksMzA2NjUsMzA2NzMsMzA2NzQsMzA2NzcsMzA2ODEsMzA2ODYsMzA2ODcsMzA2ODgsMzA2OTIsMzA2OTQsMzA2OTgsMzA3MDAsMzA3MDQsMzA3MDUsMzA3MDgsMzA3MTIsMzA3MTUsMzA3MjUsMzA3MjYsMzA3MjksMzA3MzMsMzA3MzQsMzA3MzcsMzA3NDksMzA3NTMsMzA3NTQs''@;'; put 'put ''MzA3NTUsMzA3NjUsMzA3NjYsMzA3NjgsMzA3NzMsMzA3NzUsMzA3ODcsMzA3ODgsMzA3OTEsMzA3OTIsMzA3OTYsMzA3OTgsMzA4MDIsMzA4MTIsMzA4MTQsMzA4MTYsMzA4MTcsMzA4MTksMzA4MjAsMzA4MjQsMzA4MjYsMzA4MzAsMzA4NDIsMzA4NDYsMzA4NTgsMzA4NjMsMzA4NjgsMzA4''@;'; put 'put ''NzIsMzA4ODEsMzA4NzcsMzA4NzgsMzA4NzksMzA4ODQsMzA4ODgsMzA4OTIsMzA4OTMsMzA4OTYsMzA4OTcsMzA4OTgsMzA4OTksMzA5MDcsMzA5MDksMzA5MTEsMzA5MTksMzA5MjAsMzA5MjEsMzA5MjQsMzA5MjYsMzA5MzAsMzA5MzEsMzA5MzMsMzA5MzQsMzA5NDgsMzA5MzksMzA5NDMs''@;'; put 'put ''MzA5NDQsMzA5NDUsMzA5NTAsMzA5NTQsMzA5NjIsMzA5NjMsMzA5NzYsMzA5NjYsMzA5NjcsMzA5NzAsMzA5NzEsMzA5NzUsMzA5ODIsMzA5ODgsMzA5OTIsMzEwMDIsMzEwMDQsMzEwMDYsMzEwMDcsMzEwMDgsMzEwMTMsMzEwMTUsMzEwMTcsMzEwMjEsMzEwMjUsMzEwMjgsMzEwMjksMzEw''@;'; put 'put ''MzUsMzEwMzcsMzEwMzksMzEwNDQsMzEwNDUsMzEwNDYsMzEwNTAsMzEwNTEsMzEwNTUsMzEwNTcsMzEwNjAsMzEwNjQsMzEwNjcsMzEwNjgsMzEwNzksMzEwODEsMzEwODMsMzEwOTAsMzEwOTcsMzEwOTksMzExMDAsMzExMDIsMzExMTUsMzExMTYsMzExMjEsMzExMjMsMzExMjQsMzExMjUs''@;'; put 'put ''MzExMjYsMzExMjgsMzExMzEsMzExMzIsMzExMzcsMzExNDQsMzExNDUsMzExNDcsMzExNTEsMzExNTMsMzExNTYsMzExNjAsMzExNjMsMzExNzAsMzExNzIsMzExNzUsMzExNzYsMzExNzgsMzExODMsMzExODgsMzExOTAsMzExOTQsMzExOTcsMzExOTgsMzEyMDAsMzEyMDIsMzEyMDUsMzEy''@;'; put 'put ''MTAsMzEyMTEsMzEyMTMsMzEyMTcsMzEyMjQsMzEyMjgsMzEyMzQsMzEyMzUsMzEyMzksMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDksMzEyNTMsMzEyNTksMzEyNjIsMzEyNjUsMzEyNzEsMzEyNzUsMzEyNzcsMzEyNzksMzEyODAsMzEyODQsMzEyODUsMzEyODgsMzEyODksMzEyOTAsMzEzMDAs''@;'; put 'put ''MzEzMDEsMzEzMDMsMzEzMDQsMzEzMDgsMzEzMTcsMzEzMTgsMzEzMjEsMzEzMjQsMzEzMjUsMzEzMjcsMzEzMjgsMzEzMzMsMzEzMzUsMzEzMzgsMzEzNDEsMzEzNDksMzEzNTIsMzEzNTgsMzEzNjAsMzEzNjIsMzEzNjUsMzEzNjYsMzEzNzAsMzEzNzEsMzEzNzYsMzEzNzcsMzEzODAsMzEz''@;'; put 'put ''OTAsMzEzOTIsMzEzOTUsMzE0MDQsMzE0MTEsMzE0MTMsMzE0MTcsMzE0MTksMzE0MjAsMzE0MzAsMzE0MzMsMzE0MzYsMzE0MzgsMzE0NDEsMzE0NTEsMzE0NjQsMzE0NjUsMzE0NjcsMzE0NjgsMzE0NzMsMzE0NzYsMzE0ODMsMzE0ODUsMzE0ODYsMzE0OTUsMzE1MDgsMzE1MTksMzE1MjMs''@;'; put 'put ''MzE1MjcsMzE1MjksMzE1MzAsMzE1MzEsMzE1MzMsMzE1MzQsMzE1MzUsMzE1MzYsMzE1MzcsMzE1NDAsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTksMzE1NjYsMzE1NzMsMzE1ODQsMzE1ODgsMzE1OTAsMzE1OTMsMzE1OTQsMzE1OTcsMzE1OTksMzE2MDIsMzE2MDMsMzE2MDcsMzE2''@;'; put 'put ''MjAsMzE2MjUsMzE2MzAsMzE2MzIsMzE2MzMsMzE2MzgsMzE2NDMsMzE2NDYsMzE2NDgsMzE2NTMsMzE2NjAsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjksMzE2NzAsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2ODIsMzE2ODUsMzE2ODgsMzE2OTAsMzE3MDAsMzE3MDIsMzE3MDMsMzE3MDUs''@;'; put 'put ''MzE3MDYsMzE3MDcsMzE3MjAsMzE3MjIsMzE3MzAsMzE3MzIsMzE3MzMsMzE3MzYsMzE3MzcsMzE3MzgsMzE3NDAsMzE3NDIsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NTAsMzE3NTMsMzE3NTUsMzE3NTYsMzE3NTgsMzE3NTksMzE3NjksMzE3NzEsMzE3NzYsMzE3ODEsMzE3ODIsMzE3''@;'; put 'put ''ODQsMzE3ODgsMzE3OTMsMzE3OTUsMzE3OTYsMzE3OTgsMzE4MDEsMzE4MDIsMzE4MTQsMzE4MTgsMzE4MjksMzE4MjUsMzE4MjYsMzE4MjcsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4NDEsMzE4NDMsMzE4NDcsMzE4NDksMzE4NTMsMzE4NTQsMzE4NTYsMzE4NTgs''@;'; put 'put ''MzE4NjUsMzE4NjgsMzE4NjksMzE4NzgsMzE4NzksMzE4ODcsMzE4OTIsMzE5MDIsMzE5MDQsMzE5MTAsMzE5MjAsMzE5MjYsMzE5MjcsMzE5MzAsMzE5MzEsMzE5MzIsMzE5MzUsMzE5NDAsMzE5NDMsMzE5NDQsMzE5NDUsMzE5NDksMzE5NTEsMzE5NTUsMzE5NTYsMzE5NTcsMzE5NTksMzE5''@;'; put 'put ''NjEsMzE5NjIsMzE5NjUsMzE5NzQsMzE5NzcsMzE5NzksMzE5ODksMzIwMDMsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTUsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjIsMzIwMjksMzIwMzAsMzIwMzUsMzIwMzgsMzIwNDIsMzIwNDUsMzIwNDksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjQsMzIwNjUs''@;'; put 'put ''MzIwNzEsMzIwNzIsMzIwNzcsMzIwODEsMzIwODMsMzIwODcsMzIwODksMzIwOTAsMzIwOTIsMzIwOTMsMzIxMDEsMzIxMDMsMzIxMDYsMzIxMTIsMzIxMjAsMzIxMjIsMzIxMjMsMzIxMjcsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzMsMzIxMzQsMzIxMzYsMzIxMzksMzIxNDAsMzIxNDEsMzIx''@;'; put 'put ''NDUsMzIxNTAsMzIxNTEsMzIxNTcsMzIxNTgsMzIxNjYsMzIxNjcsMzIxNzAsMzIxNzksMzIxODIsMzIxODMsMzIxODUsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMTUsMzIyMTcsMzIyNTYsMzIyMjYsMzIyMjksMzIyMzAsMzIyMzQsMzIyMzUs''@;'; put 'put ''MzIyMzcsMzIyNDEsMzIyNDUsMzIyNDYsMzIyNDksMzIyNTAsMzIyNjQsMzIyNzIsMzIyNzMsMzIyNzcsMzIyNzksMzIyODQsMzIyODUsMzIyODgsMzIyOTUsMzIyOTYsMzIzMDAsMzIzMDEsMzIzMDMsMzIzMDcsMzIzMTAsMzIzMTksMzIzMjQsMzIzMjUsMzIzMjcsMzIzMzQsMzIzMzYsMzIz''@;'; put 'put ''MzgsMzIzNDQsMzIzNTEsMzIzNTMsMzIzNTQsMzIzNTcsMzIzNjMsMzIzNjYsMzIzNjcsMzIzNzEsMzIzNzYsMzIzODIsMzIzODUsMzIzOTAsMzIzOTEsMzIzOTQsMzIzOTcsMzI0MDEsMzI0MDUsMzI0MDgsMzI0MTAsMzI0MTMsMzI0MTQsMzI1NzIsMzI1NzEsMzI1NzMsMzI1NzQsMzI1NzUs''@;'; put 'put ''MzI1NzksMzI1ODAsMzI1ODMsMzI1OTEsMzI1OTQsMzI1OTUsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDksMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MjEsMzI2MjUsMzI2MzcsMzI2MzgsMzI2MzksMzI2NDAsMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NjIsMzI2NjMsMzI2''@;'; put 'put ''NjgsMzI2NzMsMzI2NzQsMzI2NzgsMzI2ODIsMzI2ODUsMzI2OTIsMzI3MDAsMzI3MDMsMzI3MDQsMzI3MDcsMzI3MTIsMzI3MTgsMzI3MTksMzI3MzEsMzI3MzUsMzI3MzksMzI3NDEsMzI3NDQsMzI3NDgsMzI3NTAsMzI3NTEsMzI3NTQsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzUs''@;'; put 'put ''MzI3NzYsMzI3NzgsMzI3ODEsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3ODgsMzI3OTAsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDAsMzI4MDQsMzI4MDYsMzI4MTIsMzI4MTQsMzI4MTYsMzI4MjAsMzI4MjEsMzI4MjMsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzYsMzI4''@;'; put 'put ''NjQsMzI4NjgsMzI4NzAsMzI4NzcsMzI4ODEsMzI4ODUsMzI4OTcsMzI5MDQsMzI5MTAsMzI5MjQsMzI5MjYsMzI5MzQsMzI5MzUsMzI5MzksMzI5NTIsMzI5NTMsMzI5NjgsMzI5NzMsMzI5NzUsMzI5NzgsMzI5ODAsMzI5ODEsMzI5ODMsMzI5ODQsMzI5OTIsMzMwMDUsMzMwMDYsMzMwMDgs''@;'; put 'put ''MzMwMTAsMzMwMTEsMzMwMTQsMzMwMTcsMzMwMTgsMzMwMjIsMzMwMjcsMzMwMzUsMzMwNDYsMzMwNDcsMzMwNDgsMzMwNTIsMzMwNTQsMzMwNTYsMzMwNjAsMzMwNjMsMzMwNjgsMzMwNzIsMzMwNzcsMzMwODIsMzMwODQsMzMwOTMsMzMwOTUsMzMwOTgsMzMxMDAsMzMxMDYsMzMxMTEsMzMx''@;'; put 'put ''MjAsMzMxMjEsMzMxMjcsMzMxMjgsMzMxMjksMzMxMzMsMzMxMzUsMzMxNDMsMzMxNTMsMzMxNjgsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNjMsMzMxNjYsMzMxNzQsMzMxNzYsMzMxNzksMzMxODIsMzMxODYsMzMxOTgsMzMyMDIsMzMyMDQsMzMyMTEsMzMyMjcsMzMyMTksMzMyMjEsMzMyMjYs''@;'; put 'put ''MzMyMzAsMzMyMzEsMzMyMzcsMzMyMzksMzMyNDMsMzMyNDUsMzMyNDYsMzMyNDksMzMyNTIsMzMyNTksMzMyNjAsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzIsMzMyNzMsMzMyNzcsMzMyNzksMzMyODAsMzMyODMsMzMyOTUsMzMyOTksMzMzMDAsMzMzMDUsMzMzMDYsMzMz''@;'; put 'put ''MDksMzMzMTMsMzMzMTQsMzMzMjAsMzMzMzAsMzMzMzIsMzMzMzgsMzMzNDcsMzMzNDgsMzMzNDksMzMzNTAsMzMzNTUsMzMzNTgsMzMzNTksMzMzNjEsMzMzNjYsMzMzNzIsMzMzNzYsMzMzNzksMzMzODMsMzMzODksMzMzOTYsMzM0MDMsMzM0MDUsMzM0MDcsMzM0MDgsMzM0MDksMzM0MTEs''@;'; put 'put ''MzM0MTIsMzM0MTUsMzM0MTcsMzM0MTgsMzM0MjIsMzM0MjUsMzM0MjgsMzM0MzAsMzM0MzIsMzM0MzQsMzM0MzUsMzM0NDAsMzM0NDEsMzM0NDMsMzM0NDQsMzM0NDcsMzM0NDgsMzM0NDksMzM0NTAsMzM0NTQsMzM0NTYsMzM0NTgsMzM0NjAsMzM0NjMsMzM0NjYsMzM0NjgsMzM0NzAsMzM0''@;'; put 'put ''NzEsMzM0NzgsMzM0ODgsMzM0OTMsMzM0OTgsMzM1MDQsMzM1MDYsMzM1MDgsMzM1MTIsMzM1MTQsMzM1MTcsMzM1MTksMzM1MjYsMzM1MjcsMzM1MzMsMzM1MzQsMzM1MzYsMzM1MzcsMzM1NDMsMzM1NDQsMzM1NDYsMzM1NDcsMzM2MjAsMzM1NjMsMzM1NjUsMzM1NjYsMzM1NjcsMzM1Njks''@;'; put 'put ''MzM1NzAsMzM1ODAsMzM1ODEsMzM1ODIsMzM1ODQsMzM1ODcsMzM1OTEsMzM1OTQsMzM1OTYsMzM1OTcsMzM2MDIsMzM2MDMsMzM2MDQsMzM2MDcsMzM2MTMsMzM2MTQsMzM2MTcsMzM2MjEsMzM2MjIsMzM2MjMsMzM2NDgsMzM2NTYsMzM2NjEsMzM2NjMsMzM2NjQsMzM2NjYsMzM2NjgsMzM2''@;'; put 'put ''NzAsMzM2NzcsMzM2ODIsMzM2ODQsMzM2ODUsMzM2ODgsMzM2ODksMzM2OTEsMzM2OTIsMzM2OTMsMzM3MDIsMzM3MDMsMzM3MDUsMzM3MDgsMzM3MjYsMzM3MjcsMzM3MjgsMzM3MzUsMzM3MzcsMzM3NDMsMzM3NDQsMzM3NDUsMzM3NDgsMzM3NTcsMzM2MTksMzM3NjgsMzM3NzAsMzM3ODIs''@;'; put 'put ''MzM3ODQsMzM3ODUsMzM3ODgsMzM3OTMsMzM3OTgsMzM4MDIsMzM4MDcsMzM4MDksMzM4MTMsMzM4MTcsMzM3MDksMzM4MzksMzM4NDksMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjYsMzM4NjksMzM4NzEsMzM4NzMsMzM4NzQsMzM4NzgsMzM4ODAsMzM4ODEsMzM4ODIsMzM4ODQsMzM4ODgsMzM4''@;'; put 'put ''OTIsMzM4OTMsMzM4OTUsMzM4OTgsMzM5MDQsMzM5MDcsMzM5MDgsMzM5MTAsMzM5MTIsMzM5MTYsMzM5MTcsMzM5MjEsMzM5MjUsMzM5MzgsMzM5MzksMzM5NDEsMzM5NTAsMzM5NTgsMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjcsMzM5NjksMzM5NzIsMzM5NzgsMzM5ODEsMzM5ODIsMzM5ODQs''@;'; put 'put ''MzM5ODYsMzM5OTEsMzM5OTIsMzM5OTYsMzM5OTksMzQwMDMsMzQwMTIsMzQwMjMsMzQwMjYsMzQwMzEsMzQwMzIsMzQwMzMsMzQwMzQsMzQwMzksMzQwOTgsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNTAsMzQwNTEsMzQwNTUsMzQwNjAsMzQwNjIsMzQwNjQsMzQwNzYsMzQwNzgsMzQwODIsMzQw''@;'; put 'put ''ODMsMzQwODQsMzQwODUsMzQwODcsMzQwOTAsMzQwOTEsMzQwOTUsMzQwOTksMzQxMDAsMzQxMDIsMzQxMTEsMzQxMTgsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzQsMzQxMzcsMzQxNDAsMzQxNDEsMzQxNDIsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDgsMzQxNTUs''@;'; put 'put ''MzQxNTksMzQxNjksMzQxNzAsMzQxNzEsMzQxNzMsMzQxNzUsMzQxNzcsMzQxODEsMzQxODIsMzQxODUsMzQxODcsMzQxODgsMzQxOTEsMzQxOTUsMzQyMDAsMzQyMDUsMzQyMDcsMzQyMDgsMzQyMTAsMzQyMTMsMzQyMTUsMzQyMjgsMzQyMzAsMzQyMzEsMzQyMzIsMzQyMzYsMzQyMzcsMzQy''@;'; put 'put ''MzgsMzQyMzksMzQyNDIsMzQyNDcsMzQyNTAsMzQyNTEsMzQyNTQsMzQyMjEsMzQyNjQsMzQyNjYsMzQyNzEsMzQyNzIsMzQyNzgsMzQyODAsMzQyODUsMzQyOTEsMzQyOTQsMzQzMDAsMzQzMDMsMzQzMDQsMzQzMDgsMzQzMDksMzQzMTcsMzQzMTgsMzQzMjAsMzQzMjEsMzQzMjIsMzQzMjgs''@;'; put 'put ''MzQzMjksMzQzMzEsMzQzMzQsMzQzMzcsMzQzNDMsMzQzNDUsMzQzNTgsMzQzNjAsMzQzNjIsMzQzNjQsMzQzNjUsMzQzNjgsMzQzNzAsMzQzNzQsMzQzODYsMzQzODcsMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTcsMzQ0MDAsMzQ0MDEsMzQ0MDIsMzQ0MDMsMzQ0MDQsMzQ0MDksMzQ0''@;'; put 'put ''MTIsMzQ0MTUsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjYsMzQ0NDUsMzQ0NDksMzQ0NTQsMzQ0NTYsMzQ0NTgsMzQ0NjAsMzQ0NjUsMzQ0NzAsMzQ0NzEsMzQ0NzIsMzQ0NzcsMzQ0ODEsMzQ0ODMsMzQ0ODQsMzQ0ODUsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTUsMzQ0OTYsMzQ0OTcsMzQ0OTks''@;'; put 'put ''MzQ1MDEsMzQ1MTMsMzQ1MTQsMzQ1MTcsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjgsMzQ1MzEsMzQ1MzMsMzQ1MzUsMzQ0NDAsMzQ1NTQsMzQ1NTYsMzQ1NTcsMzQ1NjQsMzQ1NjUsMzQ1NjcsMzQ1NzEsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzksMzQ1ODAsMzQ1ODUsMzQ1OTAsMzQ1OTEsMzQ1''@;'; put 'put ''OTMsMzQ1OTUsMzQ2MDAsMzQ2MDYsMzQ2MDcsMzQ2MDksMzQ2MTAsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjIsMzQ2MjQsMzQ2MjcsMzQ2MjksMzQ2MzcsMzQ2NDgsMzQ2NTMsMzQ2NTcsMzQ2NjAsMzQ2NjEsMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2ODMsMzQ2OTEsMzQ2OTIsMzQ2OTMs''@;'; put 'put ''MzQ2OTQsMzQ2OTUsMzQ2OTYsMzQ2OTcsMzQ2OTksMzQ3MDAsMzQ3MDQsMzQ3MDcsMzQ3MDksMzQ3MTEsMzQ3MTIsMzQ3MTMsMzQ3MTgsMzQ3MjAsMzQ3MjMsMzQ3MjcsMzQ3MzIsMzQ3MzMsMzQ3MzQsMzQ3MzcsMzQ3NDEsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NjAsMzQ3NjEsMzQ3NjIsMzQ3''@;'; put 'put ''NjYsMzQ3NzMsMzQ3NzQsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODMsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTQsMzQ3OTUsMzQ3OTcsMzQ4MDEsMzQ4MDMsMzQ4MDgsMzQ4MTAsMzQ4MTUsMzQ4MTcsMzQ4MTksMzQ4MjIsMzQ4MjUsMzQ4MjYsMzQ4MjcsMzQ4MzIsMzQ4NDEsMzQ4MzQsMzQ4MzUs''@;'; put 'put ''MzQ4MzYsMzQ4NDAsMzQ4NDIsMzQ4NDMsMzQ4NDQsMzQ4NDYsMzQ4NDcsMzQ4NTYsMzQ4NjEsMzQ4NjIsMzQ4NjQsMzQ4NjYsMzQ4NjksMzQ4NzQsMzQ4NzYsMzQ4ODEsMzQ4ODMsMzQ4ODUsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTcsMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5''@;'; put 'put ''MDYsMzQ5MDgsMzQ5MTEsMzQ5MTIsMzQ5MTYsMzQ5MjEsMzQ5MjksMzQ5MzcsMzQ5MzksMzQ5NDQsMzQ5NjgsMzQ5NzAsMzQ5NzEsMzQ5NzIsMzQ5NzUsMzQ5NzYsMzQ5ODQsMzQ5ODYsMzUwMDIsMzUwMDUsMzUwMDYsMzUwMDgsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjIsMzUwMjUs''@;'; put 'put ''MzUwMjYsMzUwMjcsMzUwMzUsMzUwMzgsMzUwNDcsMzUwNTUsMzUwNTYsMzUwNTcsMzUwNjEsMzUwNjMsMzUwNzMsMzUwNzgsMzUwODUsMzUwODYsMzUwODcsMzUwOTMsMzUwOTQsMzUwOTYsMzUwOTcsMzUwOTgsMzUxMDAsMzUxMDQsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMjAsMzUxMjEsMzUx''@;'; put 'put ''MjIsMzUxMjUsMzUxMjksMzUxMzAsMzUxMzQsMzUxMzYsMzUxMzgsMzUxNDEsMzUxNDIsMzUxNDUsMzUxNTEsMzUxNTQsMzUxNTksMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzksMzUxODIsMzUxODQsMzUxODcsMzUxODksMzUxOTQsMzUxOTUsMzUxOTYsMzUxOTcs''@;'; put 'put ''MzUyMDksMzUyMTMsMzUyMTYsMzUyMjAsMzUyMjEsMzUyMjcsMzUyMjgsMzUyMzEsMzUyMzIsMzUyMzcsMzUyNDgsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNjAsMzUyODQsMzUyODUsMzUyODYsMzUyODcsMzUyODgsMzUzMDEsMzUzMDUsMzUzMDcsMzUzMDksMzUzMTMsMzUzMTUsMzUz''@;'; put 'put ''MTgsMzUzMjEsMzUzMjUsMzUzMjcsMzUzMzIsMzUzMzMsMzUzMzUsMzUzNDMsMzUzNDUsMzUzNDYsMzUzNDgsMzUzNDksMzUzNTgsMzUzNjAsMzUzNjIsMzUzNjQsMzUzNjYsMzUzNzEsMzUzNzIsMzUzNzUsMzUzODEsMzUzODMsMzUzODksMzUzOTAsMzUzOTIsMzUzOTUsMzUzOTcsMzUzOTks''@;'; put 'put ''MzU0MDEsMzU0MDUsMzU0MDYsMzU0MTEsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MjAsMzU0MjEsMzU0MjUsMzU0MjksMzU0MzEsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDksMzU0NTAsMzU0NTEsMzU0NTQsMzU0NTUsMzU0NTYsMzU0NTksMzU0NjIsMzU0NjcsMzU0NzEsMzU0NzIsMzU0NzQsMzU0''@;'; put 'put ''NzgsMzU0NzksMzU0ODEsMzU0ODcsMzU0OTUsMzU0OTcsMzU1MDIsMzU1MDMsMzU1MDcsMzU1MTAsMzU1MTEsMzU1MTUsMzU1MTgsMzU1MjMsMzU1MjYsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzcsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDMsMzU1NDksMzU1NTEsMzU1NjQsMzU1NjgsMzU1NzIs''@;'; put 'put ''MzU1NzMsMzU1NzQsMzU1ODAsMzU1ODMsMzU1ODksMzU1OTAsMzU1OTUsMzU2MDEsMzU2MTIsMzU2MTQsMzU2MTUsMzU1OTQsMzU2MjksMzU2MzIsMzU2MzksMzU2NDQsMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMzU2NTQsMzU2NTYsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NzMsMzU2NjEsMzU2''@;'; put 'put ''NzgsMzU2ODMsMzU2OTMsMzU3MDIsMzU3MDQsMzU3MDUsMzU3MDgsMzU3MTAsMzU3MTMsMzU3MTYsMzU3MTcsMzU3MjMsMzU3MjUsMzU3MjcsMzU3MzIsMzU3MzMsMzU3NDAsMzU3NDIsMzU3NDMsMzU4OTYsMzU4OTcsMzU5MDEsMzU5MDIsMzU5MDksMzU5MTEsMzU5MTMsMzU5MTUsMzU5MTks''@;'; put 'put ''MzU5MjEsMzU5MjMsMzU5MjQsMzU5MjcsMzU5MjgsMzU5MzEsMzU5MzMsMzU5MjksMzU5MzksMzU5NDAsMzU5NDIsMzU5NDQsMzU5NDUsMzU5NDksMzU5NTUsMzU5NTcsMzU5NTgsMzU5NjMsMzU5NjYsMzU5NzQsMzU5NzUsMzU5NzksMzU5ODQsMzU5ODYsMzU5ODcsMzU5OTMsMzU5OTUsMzU5''@;'; put 'put ''OTYsMzYwMDQsMzYwMjUsMzYwMjYsMzYwMzcsMzYwMzgsMzYwNDEsMzYwNDMsMzYwNDcsMzYwNTQsMzYwNTMsMzYwNTcsMzYwNjEsMzYwNjUsMzYwNzIsMzYwNzYsMzYwNzksMzYwODAsMzYwODIsMzYwODUsMzYwODcsMzYwODgsMzYwOTQsMzYwOTUsMzYwOTcsMzYwOTksMzYxMDUsMzYxMTQs''@;'; put 'put ''MzYxMTksMzYxMjMsMzYxOTcsMzYyMDEsMzYyMDQsMzYyMDYsMzYyMjMsMzYyMjYsMzYyMjgsMzYyMzIsMzYyMzcsMzYyNDAsMzYyNDEsMzYyNDUsMzYyNTQsMzYyNTUsMzYyNTYsMzYyNjIsMzYyNjcsMzYyNjgsMzYyNzEsMzYyNzQsMzYyNzcsMzYyNzksMzYyODEsMzYyODMsMzYyODgsMzYy''@;'; put 'put ''OTMsMzYyOTQsMzYyOTUsMzYyOTYsMzYyOTgsMzYzMDIsMzYzMDUsMzYzMDgsMzYzMDksMzYzMTEsMzYzMTMsMzYzMjQsMzYzMjUsMzYzMjcsMzYzMzIsMzYzMzYsMzYyODQsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDksMzYzNTMsMzYzNTYsMzYzNTcsMzYzNTgsMzYzNjMsMzYzNjksMzYzNzIs''@;'; put 'put ''MzYzNzQsMzYzODQsMzYzODUsMzYzODYsMzYzODcsMzYzOTAsMzYzOTEsMzY0MDEsMzY0MDMsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MDksMzY0MTMsMzY0MTYsMzY0MTcsMzY0MjcsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzYsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDksMzY0NTAsMzY0''@;'; put 'put ''NTcsMzY0NjAsMzY0NjEsMzY0NjMsMzY0NjQsMzY0NjUsMzY0NzMsMzY0NzQsMzY0NzUsMzY0ODIsMzY0ODMsMzY0ODksMzY0OTYsMzY0OTgsMzY1MDEsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTAsMzY1MTQsMzY1MTksMzY1MjEsMzY1MjUsMzY1MjYsMzY1MzEsMzY1MzMsMzY1MzgsMzY1Mzks''@;'; put 'put ''MzY1NDQsMzY1NDUsMzY1NDcsMzY1NDgsMzY1NTEsMzY1NTksMzY1NjEsMzY1NjQsMzY1NzIsMzY1ODQsMzY1OTAsMzY1OTIsMzY1OTMsMzY1OTksMzY2MDEsMzY2MDIsMzY1ODksMzY2MDgsMzY2MTAsMzY2MTUsMzY2MTYsMzY2MjMsMzY2MjQsMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzgsMzY2''@;'; put 'put ''NDAsMzY2NDEsMzY2NDMsMzY2NDUsMzY2NDcsMzY2NDgsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjYsMzY2NzIsMzY2NzMsMzY2NzUsMzY2NzksMzY2ODcsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTYsMzY3MDEsMzY3MDIsMzY3MDks''@;'; put 'put ''MzY3NjUsMzY3NjgsMzY3NjksMzY3NzIsMzY3NzMsMzY3NzQsMzY3ODksMzY3OTAsMzY3OTIsMzY3OTgsMzY4MDAsMzY4MDEsMzY4MDYsMzY4MTAsMzY4MTEsMzY4MTMsMzY4MTYsMzY4MTgsMzY4MTksMzY4MjEsMzY4MzIsMzY4MzUsMzY4MzYsMzY4NDAsMzY4NDYsMzY4NDksMzY4NTMsMzY4''@;'; put 'put ''NTQsMzY4NTksMzY4NjIsMzY4NjYsMzY4NjgsMzY4NzIsMzY4NzYsMzY4ODgsMzY4OTEsMzY5MDQsMzY5MDUsMzY5MTEsMzY5MDYsMzY5MDgsMzY5MDksMzY5MTUsMzY5MTYsMzY5MTksMzY5MjcsMzY5MzEsMzY5MzIsMzY5NDAsMzY5NTUsMzY5NTcsMzY5NjIsMzY5NjYsMzY5NjcsMzY5NzIs''@;'; put 'put ''MzY5NzYsMzY5ODAsMzY5ODUsMzY5OTcsMzdlMywzNzAwMywzNzAwNCwzNzAwNiwzNzAwOCwzNzAxMywzNzAxNSwzNzAxNiwzNzAxNywzNzAxOSwzNzAyNCwzNzAyNSwzNzAyNiwzNzAyOSwzNzA0MCwzNzA0MiwzNzA0MywzNzA0NCwzNzA0NiwzNzA1MywzNzA2OCwzNzA1NCwzNzA1OSwzNzA2''@;'; put 'put ''MCwzNzA2MSwzNzA2MywzNzA2NCwzNzA3NywzNzA3OSwzNzA4MCwzNzA4MSwzNzA4NCwzNzA4NSwzNzA4NywzNzA5MywzNzA3NCwzNzExMCwzNzA5OSwzNzEwMywzNzEwNCwzNzEwOCwzNzExOCwzNzExOSwzNzEyMCwzNzEyNCwzNzEyNSwzNzEyNiwzNzEyOCwzNzEzMywzNzEzNiwzNzE0MCwz''@;'; put 'put ''NzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0OCwzNzE1MCwzNzE1MiwzNzE1NywzNzE1NCwzNzE1NSwzNzE1OSwzNzE2MSwzNzE2NiwzNzE2NywzNzE2OSwzNzE3MiwzNzE3NCwzNzE3NSwzNzE3NywzNzE3OCwzNzE4MCwzNzE4MSwzNzE4NywzNzE5MSwzNzE5MiwzNzE5OSwzNzIwMywzNzIw''@;'; put 'put ''NywzNzIwOSwzNzIxMCwzNzIxMSwzNzIxNywzNzIyMCwzNzIyMywzNzIyOSwzNzIzNiwzNzI0MSwzNzI0MiwzNzI0MywzNzI0OSwzNzI1MSwzNzI1MywzNzI1NCwzNzI1OCwzNzI2MiwzNzI2NSwzNzI2NywzNzI2OCwzNzI2OSwzNzI3MiwzNzI3OCwzNzI4MSwzNzI4NiwzNzI4OCwzNzI5Miwz''@;'; put 'put ''NzI5MywzNzI5NCwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwzNzMwMiwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMSwzNzMxNCwzNzMxNSwzNzMxNywzNzMzMSwzNzMzMiwzNzMzNSwzNzMzNywzNzMzOCwzNzM0MiwzNzM0OCwzNzM0OSwzNzM1MywzNzM1NCwzNzM1NiwzNzM1NywzNzM1OCwzNzM1''@;'; put 'put ''OSwzNzM2MCwzNzM2MSwzNzM2NywzNzM2OSwzNzM3MSwzNzM3MywzNzM3NiwzNzM3NywzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NSwzNzM4NiwzNzM4OCwzNzM5MiwzNzM5NCwzNzM5NSwzNzM5OCwzNzQwMCwzNzQwNCwzNzQwNSwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNiwz''@;'; put 'put ''NzQyMiwzNzQyMywzNzQyNCwzNzQyNywzNzQyOSwzNzQzMCwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNiwzNzQzOCwzNzQ0MCwzNzQ0MiwzNzQ0MywzNzQ0NiwzNzQ0NywzNzQ1MCwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NywzNzQ2NCwzNzQ2NSwzNzQ2OCwzNzQ2OSwzNzQ3MiwzNzQ3MywzNzQ3''@;'; put 'put ''NywzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4NiwzNzQ4NywzNzQ4OCwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OSwzNzUwMCwzNzUwMSwzNzUwMywzNzUxMiwzNzUxMywzNzUxNCwzNzUxNywzNzUxOCwzNzUyMiwzNzUyNywzNzUyOSwzNzUzNSwzNzUzNiwzNzU0MCwzNzU0MSwz''@;'; put 'put ''NzU0MywzNzU0NCwzNzU0NywzNzU1MSwzNzU1NCwzNzU1OCwzNzU2MCwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NiwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4NCwzNzU4NywzNzU4OSwzNzU5''@;'; put 'put ''MSwzNzU5MiwzNzU5MywzNzU5NiwzNzU5NywzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMywzNzYwNSwzNzYwNywzNzYwOCwzNzYxMiwzNzYxNCwzNzYxNiwzNzYyNSwzNzYyNywzNzYzMSwzNzYzMiwzNzYzNCwzNzY0MCwzNzY0NSwzNzY0OSwzNzY1MiwzNzY1MywzNzY2MCwzNzY2MSwzNzY2Miwz''@;'; put 'put ''NzY2MywzNzY2NSwzNzY2OCwzNzY2OSwzNzY3MSwzNzY3MywzNzY3NCwzNzY4MywzNzY4NCwzNzY4NiwzNzY4NywzNzcwMywzNzcwNCwzNzcwNSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNywzNzcxOSwzNzcyMCwzNzcyMiwzNzcyNiwzNzczMiwzNzczMywzNzczNSwzNzczNywzNzczOCwzNzc0''@;'; put 'put ''MSwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NywzNzc0OCwzNzc1MCwzNzc1NCwzNzc1NywzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2OCwzNzc3MCwzNzc3MSwzNzc3MywzNzc3NSwzNzc3OCwzNzc4MSwzNzc4NCwzNzc4NywzNzc5MCwzNzc5MywzNzc5NSwzNzc5NiwzNzc5OCwzNzgwMCwz''@;'; put 'put ''NzgwMywzNzgxMiwzNzgxMywzNzgxNCwzNzgxOCwzNzgwMSwzNzgyNSwzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMywzNzgzNCwzNzgzNSwzNzgzNiwzNzgzNywzNzg0MywzNzg0OSwzNzg1MiwzNzg1NCwzNzg1NSwzNzg1OCwzNzg2MiwzNzg2MywzNzg4MSwzNzg3OSwzNzg4MCwzNzg4''@;'; put 'put ''MiwzNzg4MywzNzg4NSwzNzg4OSwzNzg5MCwzNzg5MiwzNzg5NiwzNzg5NywzNzkwMSwzNzkwMiwzNzkwMywzNzkwOSwzNzkxMCwzNzkxMSwzNzkxOSwzNzkzNCwzNzkzNSwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0NywzNzk1MSwzNzk0OSwzNzk1NSwzNzk1NywzNzk2MCwzNzk2Miwz''@;'; put 'put ''Nzk2NCwzNzk3MywzNzk3NywzNzk4MCwzNzk4MywzNzk4NSwzNzk4NywzNzk5MiwzNzk5NSwzNzk5NywzNzk5OCwzNzk5OSwzODAwMSwzODAwMiwzODAyMCwzODAxOSwzODI2NCwzODI2NSwzODI3MCwzODI3NiwzODI4MCwzODI4NCwzODI4NSwzODI4NiwzODMwMSwzODMwMiwzODMwMywzODMw''@;'; put 'put ''NSwzODMxMCwzODMxMywzODMxNSwzODMxNiwzODMyNCwzODMyNiwzODMzMCwzODMzMywzODMzNSwzODM0MiwzODM0NCwzODM0NSwzODM0NywzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM2MSwzODM2MiwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM3MiwzODM3NCwzODQyOSwzODQzMCwz''@;'; put 'put ''ODQzNCwzODQzNiwzODQzNywzODQzOCwzODQ0NCwzODQ0OSwzODQ1MSwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MCwzODQ2MSwzODQ2NSwzODQ4MiwzODQ4NCwzODQ4NiwzODQ4NywzODQ4OCwzODQ5NywzODUxMCwzODUxNiwzODUyMywzODUyNCwzODUyNiwzODUyNywzODUyOSwzODUz''@;'; put 'put ''MCwzODUzMSwzODUzMiwzODUzNywzODU0NSwzODU1MCwzODU1NCwzODU1NywzODU1OSwzODU2NCwzODU2NSwzODU2NiwzODU2OSwzODU3NCwzODU3NSwzODU3OSwzODU4NiwzODYwMiwzODYxMCwyMzk4NiwzODYxNiwzODYxOCwzODYyMSwzODYyMiwzODYyMywzODYzMywzODYzOSwzODY0MSwz''@;'; put 'put ''ODY1MCwzODY1OCwzODY1OSwzODY2MSwzODY2NSwzODY4MiwzODY4MywzODY4NSwzODY4OSwzODY5MCwzODY5MSwzODY5NiwzODcwNSwzODcwNywzODcyMSwzODcyMywzODczMCwzODczNCwzODczNSwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0NywzODc1NSwzODc1OSwzODc2MiwzODc2''@;'; put 'put ''NiwzODc3MSwzODc3NCwzODc3NSwzODc3NiwzODc3OSwzODc4MSwzODc4MywzODc4NCwzODc5MywzODgwNSwzODgwNiwzODgwNywzODgwOSwzODgxMCwzODgxNCwzODgxNSwzODgxOCwzODgyOCwzODgzMCwzODgzMywzODgzNCwzODgzNywzODgzOCwzODg0MCwzODg0MSwzODg0MiwzODg0NCwz''@;'; put 'put ''ODg0NiwzODg0NywzODg0OSwzODg1MiwzODg1MywzODg1NSwzODg1NywzODg1OCwzODg2MCwzODg2MSwzODg2MiwzODg2NCwzODg2NSwzODg2OCwzODg3MSwzODg3MiwzODg3MywzODg3NywzODg3OCwzODg4MCwzODg3NSwzODg4MSwzODg4NCwzODg5NSwzODg5NywzODkwMCwzODkwMywzODkw''@;'; put 'put ''NCwzODkwNiwzODkxOSwzODkyMiwzODkzNywzODkyNSwzODkyNiwzODkzMiwzODkzNCwzODk0MCwzODk0MiwzODk0NCwzODk0NywzODk1MCwzODk1NSwzODk1OCwzODk1OSwzODk2MCwzODk2MiwzODk2MywzODk2NSwzODk0OSwzODk3NCwzODk4MCwzODk4MywzODk4NiwzODk5MywzODk5NCwz''@;'; put 'put ''ODk5NSwzODk5OCwzODk5OSwzOTAwMSwzOTAwMiwzOTAxMCwzOTAxMSwzOTAxMywzOTAxNCwzOTAxOCwzOTAyMCwzOTA4MywzOTA4NSwzOTA4NiwzOTA4OCwzOTA5MiwzOTA5NSwzOTA5NiwzOTA5OCwzOTA5OSwzOTEwMywzOTEwNiwzOTEwOSwzOTExMiwzOTExNiwzOTEzNywzOTEzOSwzOTE0''@;'; put 'put ''MSwzOTE0MiwzOTE0MywzOTE0NiwzOTE1NSwzOTE1OCwzOTE3MCwzOTE3NSwzOTE3NiwzOTE4NSwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5NCwzOTE5NSwzOTE5NiwzOTE5OSwzOTIwMiwzOTIwNiwzOTIwNywzOTIxMSwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyNSwzOTIyNiwz''@;'; put 'put ''OTIyNywzOTIyOCwzOTIzMiwzOTIzMywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0NSwzOTI0NiwzOTI1MiwzOTI1NiwzOTI1NywzOTI1OSwzOTI2MCwzOTI2MiwzOTI2MywzOTI2NCwzOTMyMywzOTMyNSwzOTMyNywzOTMzNCwzOTM0NCwzOTM0NSwzOTM0NiwzOTM0OSwzOTM1MywzOTM1NCwzOTM1''@;'; put 'put ''NywzOTM1OSwzOTM2MywzOTM2OSwzOTM3OSwzOTM4MCwzOTM4NSwzOTM4NiwzOTM4OCwzOTM5MCwzOTM5OSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwOCwzOTQxMiwzOTQxMywzOTQxNywzOTQyMSwzOTQyMiwzOTQyNiwzOTQyNywzOTQyOCwzOTQzNSwzOTQzNiwzOTQ0MCwzOTQ0MSwzOTQ0Niwz''@;'; put 'put ''OTQ1NCwzOTQ1NiwzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MywzOTQ2OSwzOTQ3MCwzOTQ3NSwzOTQ3NywzOTQ3OCwzOTQ4MCwzOTQ5NSwzOTQ4OSwzOTQ5MiwzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMiwzOTUwNSwzOTUwOCwzOTUxMCwzOTUxNywzOTU5NCwzOTU5NiwzOTU5OCwzOTU5OSwzOTYw''@;'; put 'put ''MiwzOTYwNCwzOTYwNSwzOTYwNiwzOTYwOSwzOTYxMSwzOTYxNCwzOTYxNSwzOTYxNywzOTYxOSwzOTYyMiwzOTYyNCwzOTYzMCwzOTYzMiwzOTYzNCwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MywzOTY0NCwzOTY0OCwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NywzOTY2MCwzOTY2NiwzOTY2Nywz''@;'; put 'put ''OTY2OSwzOTY3MywzOTY3NCwzOTY3NywzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4MywzOTY4NCwzOTY4NSwzOTY4OCwzOTY4OSwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5OCwzOTcwMiwzOTcwNSwzOTcwNywzOTcwOCwzOTcxMiwzOTcxOCwzOTcyMywzOTcyNSwzOTcz''@;'; put 'put ''MSwzOTczMiwzOTczMywzOTczNSwzOTczNywzOTczOCwzOTc0MSwzOTc1MiwzOTc1NSwzOTc1NiwzOTc2NSwzOTc2NiwzOTc2NywzOTc3MSwzOTc3NCwzOTc3NywzOTc3OSwzOTc4MSwzOTc4MiwzOTc4NCwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5NSwzOTc5NywzOTc5OSwz''@;'; put 'put ''OTgwMCwzOTgwMSwzOTgwNywzOTgwOCwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMSwzOTgyMywzOTgyNCwzOTgyOCwzOTgzNCwzOTgzNywzOTgzOCwzOTg0NiwzOTg0NywzOTg0OSwzOTg1MiwzOTg1NiwzOTg1NywzOTg1OCwzOTg2MywzOTg2NCwzOTg2''@;'; put 'put ''NywzOTg2OCwzOTg3MCwzOTg3MSwzOTg3MywzOTg3OSwzOTg4MCwzOTg4NiwzOTg4OCwzOTg5NSwzOTg5NiwzOTkwMSwzOTkwMywzOTkwOSwzOTkxMSwzOTkxNCwzOTkxNSwzOTkxOSwzOTkyMywzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMywzOTkzNSwzOTkzNiwzOTkzOCwzOTk0Nywz''@;'; put 'put ''OTk1MSwzOTk1MywzOTk1OCwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2NCwzOTk2NiwzOTk3MCwzOTk3MSwzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk4NSwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5Nyw0MDAwMSw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwOSw0MDAxMCw0MDAxNCw0MDAx''@;'; put 'put ''NSw0MDAxNiw0MDAxOSw0MDAyMCw0MDAyMiw0MDAyNCw0MDAyNyw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzNSw0MDA0MSw0MDA0Miw0MDAyOCw0MDA0Myw0MDA0MCw0MDA0Niw0MDA0OCw0MDA1MCw0MDA1Myw0MDA1NSw0MDA1OSw0MDE2Niw0MDE3OCw0MDE4Myw0MDE4NSw0MDIwMyw0MDE5NCw0''@;'; put 'put ''MDIwOSw0MDIxNSw0MDIxNiw0MDIyMCw0MDIyMSw0MDIyMiw0MDIzOSw0MDI0MCw0MDI0Miw0MDI0Myw0MDI0NCw0MDI1MCw0MDI1Miw0MDI2MSw0MDI1Myw0MDI1OCw0MDI1OSw0MDI2Myw0MDI2Niw0MDI3NSw0MDI3Niw0MDI4Nyw0MDI5MSw0MDI5MCw0MDI5Myw0MDI5Nyw0MDI5OCw0MDI5''@;'; put 'put ''OSw0MDMwNCw0MDMxMCw0MDMxMSw0MDMxNSw0MDMxNiw0MDMxOCw0MDMyMyw0MDMyNCw0MDMyNiw0MDMzMCw0MDMzMyw0MDMzNCw0MDMzOCw0MDMzOSw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM1Myw0MDM2Miw0MDM2NCw0MDM2Niw0MDM2OSw0MDM3Myw0MDM3Nyw0MDM4MCw0MDM4Myw0''@;'; put 'put ''MDM4Nyw0MDM5MSw0MDM5Myw0MDM5NCw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQxMCw0MDQxNCw0MDQxNSw0MDQxNiw0MDQyMSw0MDQyMyw0MDQyNSw0MDQyNyw0MDQzMCw0MDQzMiw0MDQzNSw0MDQzNiw0MDQ0Niw0MDQ1OCw0MDQ1MCw0MDQ1NSw0MDQ2Miw0MDQ2NCw0MDQ2NSw0MDQ2''@;'; put 'put ''Niw0MDQ2OSw0MDQ3MCw0MDQ3Myw0MDQ3Niw0MDQ3Nyw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Niw0MDU3OCw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Myw0MDU5MCw0MDU5MSw0MDU5OCw0MDYwMCw0MDYwMyw0MDYwNiw0MDYxMiw0MDYxNiw0MDYyMCw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNyw0''@;'; put 'put ''MDYyOCw0MDYyOSw0MDY0Niw0MDY0OCw0MDY1MSw0MDY2MSw0MDY3MSw0MDY3Niw0MDY3OSw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5Myw0MDY5Niw0MDcwMyw0MDcwNiw0MDcwNyw0MDcxMyw0MDcxOSw0MDcyMCw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNiw0MDcy''@;'; put 'put ''Nyw0MDcyOSw0MDczMCw0MDczMSw0MDczNSw0MDczOCw0MDc0Miw0MDc0Niw0MDc0Nyw0MDc1MSw0MDc1Myw0MDc1NCw0MDc1Niw0MDc1OSw0MDc2MSw0MDc2Miw0MDc2NCw0MDc2NSw0MDc2Nyw0MDc2OSw0MDc3MSw0MDc3Miw0MDc3Myw0MDc3NCw0MDc3NSw0MDc4Nyw0MDc4OSw0MDc5MCw0''@;'; put 'put ''MDc5MSw0MDc5Miw0MDc5NCw0MDc5Nyw0MDc5OCw0MDgwOCw0MDgwOSw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOSw0MDgyMSw0MDgyNiw0MDgyOSw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1Miw0MDg1NCw0MDg1NSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2''@;'; put 'put ''OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGlibTg2NjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYy''@;'; put 'put ''LDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsOTYxNyw5NjE4LDk2MTksOTQ3NCw5NTA4LDk1NjksOTU3MCw5NTU4''@;'; put 'put ''LDk1NTcsOTU3MSw5NTUzLDk1NTksOTU2NSw5NTY0LDk1NjMsOTQ4OCw5NDkyLDk1MjQsOTUxNiw5NTAwLDk0NzIsOTUzMiw5NTY2LDk1NjcsOTU2Miw5NTU2LDk1NzcsOTU3NCw5NTY4LDk1NTIsOTU4MCw5NTc1LDk1NzYsOTU3Miw5NTczLDk1NjEsOTU2MCw5NTU0LDk1NTUsOTU3OSw5NTc4''@;'; put 'put ''LDk0OTYsOTQ4NCw5NjA4LDk2MDQsOTYxMiw5NjE2LDk2MDAsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMDI1LDExMDUsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDM4LDExMTgsMTc2LDg3Mjks''@;'; put 'put ''MTgzLDg3MzAsODQ3MCwxNjQsOTYzMiwxNjBdLCJpc28tODg1OS0yIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4''@;'; put 'put ''LDE1OSwxNjAsMjYwLDcyOCwzMjEsMTY0LDMxNywzNDYsMTY3LDE2OCwzNTIsMzUwLDM1NiwzNzcsMTczLDM4MSwzNzksMTc2LDI2MSw3MzEsMzIyLDE4MCwzMTgsMzQ3LDcxMSwxODQsMzUzLDM1MSwzNTcsMzc4LDczMywzODIsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTks''@;'; put 'put ''MjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3Mywz''@;'; put 'put ''MjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sImlzby04ODU5LTMiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUw''@;'; put 'put ''LDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyOTQsNzI4LDE2MywxNjQsbnVsbCwyOTIsMTY3LDE2OCwzMDQsMzUwLDI4NiwzMDgsMTczLG51bGwsMzc5LDE3NiwyOTUsMTc4LDE3OSwxODAsMTgxLDI5MywxODMsMTg0LDMwNSwzNTEsMjg3LDMwOSwxODksbnVsbCwz''@;'; put 'put ''ODAsMTkyLDE5MywxOTQsbnVsbCwxOTYsMjY2LDI2NCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNyxudWxsLDIwOSwyMTAsMjExLDIxMiwyODgsMjE0LDIxNSwyODQsMjE3LDIxOCwyMTksMjIwLDM2NCwzNDgsMjIzLDIyNCwyMjUsMjI2LG51bGwsMjI4LDI2NywyNjUsMjMx''@;'; put 'put ''LDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksbnVsbCwyNDEsMjQyLDI0MywyNDQsMjg5LDI0NiwyNDcsMjg1LDI0OSwyNTAsMjUxLDI1MiwzNjUsMzQ5LDcyOV0sImlzby04ODU5LTQiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAs''@;'; put 'put ''MTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMzEyLDM0MiwxNjQsMjk2LDMxNSwxNjcsMTY4LDM1MiwyNzQsMjkwLDM1OCwxNzMsMzgxLDE3NSwxNzYsMjYxLDczMSwzNDMsMTgwLDI5Nywz''@;'; put 'put ''MTYsNzExLDE4NCwzNTMsMjc1LDI5MSwzNTksMzMwLDM4MiwzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjk4LDI3MiwzMjUsMzMyLDMxMCwyMTIsMjEzLDIxNCwyMTUsMjE2LDM3MCwyMTgsMjE5LDIyMCwzNjAsMzYyLDIy''@;'; put 'put ''MywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyOTksMjczLDMyNiwzMzMsMzExLDI0NCwyNDUsMjQ2LDI0NywyNDgsMzcxLDI1MCwyNTEsMjUyLDM2MSwzNjMsNzI5XSwiaXNvLTg4NTktNSI6WzEyOCwxMjksMTMwLDEzMSwxMzIs''@;'; put 'put ''MTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAz''@;'; put 'put ''NSwxMDM2LDE3MywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4''@;'; put 'put ''LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAx''@;'; put 'put ''LDExMDIsMTEwMyw4NDcwLDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDE2NywxMTE4LDExMTldLCJpc28tODg1OS02IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIs''@;'; put 'put ''MTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCxudWxsLG51bGwsMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU0OCwxNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTYzLG51bGwsbnVsbCxudWxsLDE1NjcsbnVsbCwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgs''@;'; put 'put ''MTU4OSwxNTkwLDE1OTEsMTU5MiwxNTkzLDE1OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MDAsMTYwMSwxNjAyLDE2MDMsMTYwNCwxNjA1LDE2MDYsMTYwNywxNjA4LDE2MDksMTYxMCwxNjExLDE2MTIsMTYxMywxNjE0LDE2MTUsMTYxNiwxNjE3LDE2MTgsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sImlzby04ODU5LTciOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIs''@;'; put 'put ''MTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjE2LDgyMTcsMTYzLDgzNjQsODM2NywxNjYsMTY3LDE2OCwxNjksODkwLDE3MSwxNzIsMTczLG51bGwsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDkwMSw5MDIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEy''@;'; put 'put ''LDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUz''@;'; put 'put ''LDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJpc28tODg1OS04IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIs''@;'; put 'put ''MTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMs''@;'; put 'put ''MTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4MjE1LDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51''@;'; put 'put ''bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sImlzby04ODU5LTEwIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1''@;'; put 'put ''OSwxNjAsMjYwLDI3NCwyOTAsMjk4LDI5NiwzMTAsMTY3LDMxNSwyNzIsMzUyLDM1OCwzODEsMTczLDM2MiwzMzAsMTc2LDI2MSwyNzUsMjkxLDI5OSwyOTcsMzExLDE4MywzMTYsMjczLDM1MywzNTksMzgyLDgyMTMsMzYzLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2''@;'; put 'put ''OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyMDcsMjA4LDMyNSwzMzIsMjExLDIxMiwyMTMsMjE0LDM2MCwyMTYsMzcwLDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDIzOSwyNDAsMzI2''@;'; put 'put ''LDMzMywyNDMsMjQ0LDI0NSwyNDYsMzYxLDI0OCwzNzEsMjUwLDI1MSwyNTIsMjUzLDI1NCwzMTJdLCJpc28tODg1OS0xMyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAs''@;'; put 'put ''MTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMjEsMTYyLDE2MywxNjQsODIyMiwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDgyMjAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIz''@;'; put 'put ''MCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5''@;'; put 'put ''LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw4MjE3XSwiaXNvLTg4NTktMTQiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQx''@;'; put 'put ''LDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw3NjgyLDc2ODMsMTYzLDI2NiwyNjcsNzY5MCwxNjcsNzgwOCwxNjksNzgxMCw3NjkxLDc5MjIsMTczLDE3NCwzNzYsNzcxMCw3NzExLDI4OCwyODksNzc0''@;'; put 'put ''NCw3NzQ1LDE4Miw3NzY2LDc4MDksNzc2Nyw3ODExLDc3NzYsNzkyMyw3ODEyLDc4MTMsNzc3NywxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMzcyLDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDc3ODYsMjE2LDIxNywyMTgs''@;'; put 'put ''MjE5LDIyMCwyMjEsMzc0LDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMzczLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDc3ODcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMzc1LDI1NV0sImlzby04ODU5LTE1Ijpb''@;'; put 'put ''MTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2NCwxNjUsMzUyLDE2NywzNTMs''@;'; put 'put ''MTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwzODEsMTgxLDE4MiwxODMsMzgyLDE4NSwxODYsMTg3LDMzOCwzMzksMzc2LDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwy''@;'; put 'put ''MTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1''@;'; put 'put ''MSwyNTIsMjUzLDI1NCwyNTVdLCJpc28tODg1OS0xNiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYw''@;'; put 'put ''LDI2MCwyNjEsMzIxLDgzNjQsODIyMiwzNTIsMTY3LDM1MywxNjksNTM2LDE3MSwzNzcsMTczLDM3OCwzNzksMTc2LDE3NywyNjgsMzIyLDM4MSw4MjIxLDE4MiwxODMsMzgyLDI2OSw1MzcsMTg3LDMzOCwzMzksMzc2LDM4MCwxOTIsMTkzLDE5NCwyNTgsMTk2LDI2MiwxOTgsMTk5LDIwMCwy''@;'; put 'put ''MDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjcyLDMyMywyMTAsMjExLDIxMiwzMzYsMjE0LDM0NiwzNjgsMjE3LDIxOCwyMTksMjIwLDI4MCw1MzgsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjYzLDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNzMsMzI0LDI0''@;'; put 'put ''MiwyNDMsMjQ0LDMzNywyNDYsMzQ3LDM2OSwyNDksMjUwLDI1MSwyNTIsMjgxLDUzOSwyNTVdLCJrb2k4LXIiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIs''@;'; put 'put ''OTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSw5NTcwLDk1NzEs''@;'; put 'put ''OTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwx''@;'; put 'put ''MDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0Miwx''@;'; put 'put ''MDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLCJrb2k4LXUiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAs''@;'; put 'put ''ODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsMTEwOCw5NTU2LDExMTAsMTExMSw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsMTE2OSwxMTE4LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSwxMDI4LDk1NzEsMTAzMCwxMDMxLDk1NzQs''@;'; put 'put ''OTU3NSw5NTc2LDk1NzcsOTU3OCwxMTY4LDEwMzgsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwx''@;'; put 'put ''MDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0Nywx''@;'; put 'put ''MDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLG1hY2ludG9zaDpbMTk2LDE5NywxOTksMjAxLDIwOSwyMTQsMjIwLDIyNSwyMjQsMjI2LDIyOCwyMjcsMjI5LDIzMSwyMzMsMjMyLDIzNCwyMzUsMjM3LDIzNiwyMzgsMjM5LDI0MSwyNDMsMjQyLDI0NCwyNDYsMjQ1LDI1MCwyNDksMjUxLDI1Miw4''@;'; put 'put ''MjI0LDE3NiwxNjIsMTYzLDE2Nyw4MjI2LDE4MiwyMjMsMTc0LDE2OSw4NDgyLDE4MCwxNjgsODgwMCwxOTgsMjE2LDg3MzQsMTc3LDg4MDQsODgwNSwxNjUsMTgxLDg3MDYsODcyMSw4NzE5LDk2MCw4NzQ3LDE3MCwxODYsOTM3LDIzMCwyNDgsMTkxLDE2MSwxNzIsODczMCw0MDIsODc3Niw4''@;'; put 'put ''NzEwLDE3MSwxODcsODIzMCwxNjAsMTkyLDE5NSwyMTMsMzM4LDMzOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsOTY3NCwyNTUsMzc2LDgyNjAsODM2NCw4MjQ5LDgyNTAsNjQyNTcsNjQyNTgsODIyNSwxODMsODIxOCw4MjIyLDgyNDAsMTk0LDIwMiwxOTMsMjAzLDIwMCwy''@;'; put 'put ''MDUsMjA2LDIwNywyMDQsMjExLDIxMiw2Mzc0MywyMTAsMjE4LDIxOSwyMTcsMzA1LDcxMCw3MzIsMTc1LDcyOCw3MjksNzMwLDE4NCw3MzMsNzMxLDcxMV0sIndpbmRvd3MtODc0IjpbODM2NCwxMjksMTMwLDEzMSwxMzIsODIzMCwxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0''@;'; put 'put ''MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwzNTk1LDM1OTYsMzU5NywzNTk4LDM1OTksMzYwMCwzNjAx''@;'; put 'put ''LDM2MDIsMzYwMywzNjA0LDM2MDUsMzYwNiwzNjA3LDM2MDgsMzYwOSwzNjEwLDM2MTEsMzYxMiwzNjEzLDM2MTQsMzYxNSwzNjE2LDM2MTcsMzYxOCwzNjE5LDM2MjAsMzYyMSwzNjIyLDM2MjMsMzYyNCwzNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywzNjM0''@;'; put 'put ''LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwzNjQwLDM2NDEsMzY0MixudWxsLG51bGwsbnVsbCxudWxsLDM2NDcsMzY0OCwzNjQ5LDM2NTAsMzY1MSwzNjUyLDM2NTMsMzY1NCwzNjU1LDM2NTYsMzY1NywzNjU4LDM2NTksMzY2MCwzNjYxLDM2NjIsMzY2MywzNjY0LDM2NjUsMzY2NiwzNjY3''@;'; put 'put ''LDM2NjgsMzY2OSwzNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQsMzY3NSxudWxsLG51bGwsbnVsbCxudWxsXSwid2luZG93cy0xMjUwIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwzNTIsODI0OSwzNDYsMzU2LDM4MSwzNzcsMTQ0LDgyMTYsODIxNyw4''@;'; put 'put ''MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMzUzLDgyNTAsMzQ3LDM1NywzODIsMzc4LDE2MCw3MTEsNzI4LDMyMSwxNjQsMjYwLDE2NiwxNjcsMTY4LDE2OSwzNTAsMTcxLDE3MiwxNzMsMTc0LDM3OSwxNzYsMTc3LDczMSwzMjIsMTgwLDE4MSwxODIsMTgzLDE4NCwyNjEsMzUx''@;'; put 'put ''LDE4NywzMTcsNzMzLDMxOCwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTks''@;'; put 'put ''MjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwid2luZG93cy0xMjUxIjpbMTAyNiwxMDI3LDgyMTgsMTEwNyw4MjIyLDgyMzAsODIyNCw4''@;'; put 'put ''MjI1LDgzNjQsODI0MCwxMDMzLDgyNDksMTAzNCwxMDM2LDEwMzUsMTAzOSwxMTA2LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTExMyw4MjUwLDExMTQsMTExNiwxMTE1LDExMTksMTYwLDEwMzgsMTExOCwxMDMyLDE2NCwxMTY4LDE2NiwxNjcsMTAyNSwx''@;'; put 'put ''NjksMTAyOCwxNzEsMTcyLDE3MywxNzQsMTAzMSwxNzYsMTc3LDEwMzAsMTExMCwxMTY5LDE4MSwxODIsMTgzLDExMDUsODQ3MCwxMTA4LDE4NywxMTEyLDEwMjksMTEwOSwxMTExLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEw''@;'; put 'put ''NTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEw''@;'; put 'put ''ODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDNdLCJ3aW5kb3dzLTEyNTIiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5''@;'; put 'put ''LDMzOCwxNDEsMzgxLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDM4MiwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4''@;'; put 'put ''LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTks''@;'; put 'put ''MjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLCJ3aW5kb3dzLTEyNTMiOls4MzY0''@;'; put 'put ''LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDkwMSw5MDIsMTYzLDE2NCwxNjUs''@;'; put 'put ''MTY2LDE2NywxNjgsMTY5LG51bGwsMTcxLDE3MiwxNzMsMTc0LDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCwxODEsMTgyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2''@;'; put 'put ''LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3''@;'; put 'put ''LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSwid2luZG93cy0xMjU0IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMy''@;'; put 'put ''LDg0ODIsMzUzLDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5''@;'; put 'put ''MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI4NiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwzMDQsMzUwLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0''@;'; put 'put ''LDIzNSwyMzYsMjM3LDIzOCwyMzksMjg3LDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDMwNSwzNTEsMjU1XSwid2luZG93cy0xMjU1IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwxNDAsMTQx''@;'; put 'put ''LDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzYyLDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4''@;'; put 'put ''MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsMTkxLDE0NTYsMTQ1NywxNDU4LDE0NTksMTQ2MCwxNDYxLDE0NjIsMTQ2MywxNDY0LDE0NjUsMTQ2NiwxNDY3LDE0NjgsMTQ2OSwxNDcwLDE0NzEsMTQ3MiwxNDczLDE0NzQsMTQ3NSwxNTIwLDE1MjEsMTUyMiwxNTIz''@;'; put 'put ''LDE1MjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEy''@;'; put 'put ''LDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLCJ3aW5kb3dzLTEyNTYiOls4MzY0LDE2NjIsODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxNjU3LDgyNDksMzM4LDE2NzAsMTY4OCwxNjcyLDE3MTEsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEs''@;'; put 'put ''ODIxMiwxNzA1LDg0ODIsMTY4MSw4MjUwLDMzOSw4MjA0LDgyMDUsMTcyMiwxNjAsMTU0OCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MjYsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTU2MywxODcsMTg4LDE4''@;'; put 'put ''OSwxOTAsMTU2NywxNzI5LDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMjE1LDE1OTEsMTU5MiwxNTkzLDE1OTQsMTYwMCwxNjAxLDE2MDIs''@;'; put 'put ''MTYwMywyMjQsMTYwNCwyMjYsMTYwNSwxNjA2LDE2MDcsMTYwOCwyMzEsMjMyLDIzMywyMzQsMjM1LDE2MDksMTYxMCwyMzgsMjM5LDE2MTEsMTYxMiwxNjEzLDE2MTQsMjQ0LDE2MTUsMTYxNiwyNDcsMTYxNywyNDksMTYxOCwyNTEsMjUyLDgyMDYsODIwNywxNzQ2XSwid2luZG93cy0xMjU3''@;'; put 'put ''IjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTY4LDcxMSwxODQsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE3NSw3MzEsMTU5LDE2MCxudWxsLDE2MiwxNjMs''@;'; put 'put ''MTY0LG51bGwsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAs''@;'; put 'put ''MzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwy''@;'; put 'put ''NDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw3MjldLCJ3aW5kb3dzLTEyNTgiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIx''@;'; put 'put ''Miw3MzIsODQ4MiwxNTQsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwx''@;'; put 'put ''OTIsMTkzLDE5NCwyNTgsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMyw3NjgsMjA1LDIwNiwyMDcsMjcyLDIwOSw3NzcsMjExLDIxMiw0MTYsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDQzMSw3NzEsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjI5LDIzMCwyMzEsMjMyLDIz''@;'; put 'put ''MywyMzQsMjM1LDc2OSwyMzcsMjM4LDIzOSwyNzMsMjQxLDgwMywyNDMsMjQ0LDQxNywyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsNDMyLDgzNjMsMjU1XSwieC1tYWMtY3lyaWxsaWMiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAs''@;'; put 'put ''MTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsODIyNCwxNzYsMTE2OCwxNjMsMTY3LDgyMjYsMTgyLDEwMzAsMTc0LDE2OSw4NDgyLDEwMjYsMTEwNiw4''@;'; put 'put ''ODAwLDEwMjcsMTEwNyw4NzM0LDE3Nyw4ODA0LDg4MDUsMTExMCwxODEsMTE2OSwxMDMyLDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzMywxMTEzLDEwMzQsMTExNCwxMTEyLDEwMjksMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDEwMzUsMTExNSwxMDM2LDExMTYsMTEw''@;'; put 'put ''OSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsODIyMiwxMDM4LDExMTgsMTAzOSwxMTE5LDg0NzAsMTAyNSwxMTA1LDExMDMsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4''@;'; put 'put ''LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiw4MzY0XX19KHRoaXN8fHt9KX0sNjQzMTg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQWUsX3QsbnQpe3JldHVy''@;'; put 'put ''biBfdDw9QWUmJkFlPD1udH11ZS5leHBvcnRzJiYhSVsiZW5jb2RpbmctaW5kZXhlcyJdJiYoSVsiZW5jb2RpbmctaW5kZXhlcyJdPXkoNjc5NTEpWyJlbmNvZGluZy1pbmRleGVzIl0pO3ZhciBCPU1hdGguZmxvb3I7ZnVuY3Rpb24gdyhBZSl7aWYodm9pZCAwPT09QWUpcmV0dXJue307aWYo''@;'; put 'put ''QWU9PT1PYmplY3QoQWUpKXJldHVybiBBZTt0aHJvdyBUeXBlRXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGRpY3Rpb25hcnkiKX1mdW5jdGlvbiBPKEFlKXtyZXR1cm4gMDw9QWUmJkFlPD0xMjd9dmFyIHo9TyxOPS0xO2Z1bmN0aW9uIEwoQWUpe3RoaXMudG9rZW5zPVtd''@;'; put 'put ''LnNsaWNlLmNhbGwoQWUpLHRoaXMudG9rZW5zLnJldmVyc2UoKX1MLnByb3RvdHlwZT17ZW5kT2ZTdHJlYW06ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy50b2tlbnMubGVuZ3RofSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW5zLmxlbmd0aD90aGlzLnRva2Vucy5wb3AoKTpOfSxw''@;'; put 'put ''cmVwZW5kOmZ1bmN0aW9uKEFlKXtpZihBcnJheS5pc0FycmF5KEFlKSlmb3IodmFyIF90PUFlO190Lmxlbmd0aDspdGhpcy50b2tlbnMucHVzaChfdC5wb3AoKSk7ZWxzZSB0aGlzLnRva2Vucy5wdXNoKEFlKX0scHVzaDpmdW5jdGlvbihBZSl7aWYoQXJyYXkuaXNBcnJheShBZSkpZm9yKHZh''@;'; put 'put ''ciBfdD1BZTtfdC5sZW5ndGg7KXRoaXMudG9rZW5zLnVuc2hpZnQoX3Quc2hpZnQoKSk7ZWxzZSB0aGlzLnRva2Vucy51bnNoaWZ0KEFlKX19O3ZhciBLPS0xO2Z1bmN0aW9uIFUoQWUsX3Qpe2lmKEFlKXRocm93IFR5cGVFcnJvcigiRGVjb2RlciBlcnJvciIpO3JldHVybiBfdHx8NjU1MzN9''@;'; put 'put ''ZnVuY3Rpb24gVyhBZSl7dGhyb3cgVHlwZUVycm9yKCJUaGUgY29kZSBwb2ludCAiK0FlKyIgY291bGQgbm90IGJlIGVuY29kZWQuIil9ZnVuY3Rpb24gZWUoQWUpe3JldHVybiBBZT1TdHJpbmcoQWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbChuZSxBZSk/bmVbQWVdOm51bGx9dmFyIEo9W3tlbmNvZGluZ3M6W3tsYWJlbHM6WyJ1bmljb2RlLTEtMS11dGYtOCIsInV0Zi04IiwidXRmOCJdLG5hbWU6IlVURi04In1dLGhlYWRpbmc6IlRoZSBFbmNvZGluZyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyI4NjYiLCJjcDg2NiIs''@;'; put 'put ''ImNzaWJtODY2IiwiaWJtODY2Il0sbmFtZToiSUJNODY2In0se2xhYmVsczpbImNzaXNvbGF0aW4yIiwiaXNvLTg4NTktMiIsImlzby1pci0xMDEiLCJpc284ODU5LTIiLCJpc284ODU5MiIsImlzb184ODU5LTIiLCJpc29fODg1OS0yOjE5ODciLCJsMiIsImxhdGluMiJdLG5hbWU6IklTTy04''@;'; put 'put ''ODU5LTIifSx7bGFiZWxzOlsiY3Npc29sYXRpbjMiLCJpc28tODg1OS0zIiwiaXNvLWlyLTEwOSIsImlzbzg4NTktMyIsImlzbzg4NTkzIiwiaXNvXzg4NTktMyIsImlzb184ODU5LTM6MTk4OCIsImwzIiwibGF0aW4zIl0sbmFtZToiSVNPLTg4NTktMyJ9LHtsYWJlbHM6WyJjc2lzb2xhdGlu''@;'; put 'put ''NCIsImlzby04ODU5LTQiLCJpc28taXItMTEwIiwiaXNvODg1OS00IiwiaXNvODg1OTQiLCJpc29fODg1OS00IiwiaXNvXzg4NTktNDoxOTg4IiwibDQiLCJsYXRpbjQiXSxuYW1lOiJJU08tODg1OS00In0se2xhYmVsczpbImNzaXNvbGF0aW5jeXJpbGxpYyIsImN5cmlsbGljIiwiaXNvLTg4''@;'; put 'put ''NTktNSIsImlzby1pci0xNDQiLCJpc284ODU5LTUiLCJpc284ODU5NSIsImlzb184ODU5LTUiLCJpc29fODg1OS01OjE5ODgiXSxuYW1lOiJJU08tODg1OS01In0se2xhYmVsczpbImFyYWJpYyIsImFzbW8tNzA4IiwiY3Npc284ODU5NmUiLCJjc2lzbzg4NTk2aSIsImNzaXNvbGF0aW5hcmFi''@;'; put 'put ''aWMiLCJlY21hLTExNCIsImlzby04ODU5LTYiLCJpc28tODg1OS02LWUiLCJpc28tODg1OS02LWkiLCJpc28taXItMTI3IiwiaXNvODg1OS02IiwiaXNvODg1OTYiLCJpc29fODg1OS02IiwiaXNvXzg4NTktNjoxOTg3Il0sbmFtZToiSVNPLTg4NTktNiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGlu''@;'; put 'put ''Z3JlZWsiLCJlY21hLTExOCIsImVsb3RfOTI4IiwiZ3JlZWsiLCJncmVlazgiLCJpc28tODg1OS03IiwiaXNvLWlyLTEyNiIsImlzbzg4NTktNyIsImlzbzg4NTk3IiwiaXNvXzg4NTktNyIsImlzb184ODU5LTc6MTk4NyIsInN1bl9ldV9ncmVlayJdLG5hbWU6IklTTy04ODU5LTcifSx7bGFi''@;'; put 'put ''ZWxzOlsiY3Npc284ODU5OGUiLCJjc2lzb2xhdGluaGVicmV3IiwiaGVicmV3IiwiaXNvLTg4NTktOCIsImlzby04ODU5LTgtZSIsImlzby1pci0xMzgiLCJpc284ODU5LTgiLCJpc284ODU5OCIsImlzb184ODU5LTgiLCJpc29fODg1OS04OjE5ODgiLCJ2aXN1YWwiXSxuYW1lOiJJU08tODg1''@;'; put 'put ''OS04In0se2xhYmVsczpbImNzaXNvODg1OThpIiwiaXNvLTg4NTktOC1pIiwibG9naWNhbCJdLG5hbWU6IklTTy04ODU5LTgtSSJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluNiIsImlzby04ODU5LTEwIiwiaXNvLWlyLTE1NyIsImlzbzg4NTktMTAiLCJpc284ODU5MTAiLCJsNiIsImxhdGluNiJd''@;'; put 'put ''LG5hbWU6IklTTy04ODU5LTEwIn0se2xhYmVsczpbImlzby04ODU5LTEzIiwiaXNvODg1OS0xMyIsImlzbzg4NTkxMyJdLG5hbWU6IklTTy04ODU5LTEzIn0se2xhYmVsczpbImlzby04ODU5LTE0IiwiaXNvODg1OS0xNCIsImlzbzg4NTkxNCJdLG5hbWU6IklTTy04ODU5LTE0In0se2xhYmVs''@;'; put 'put ''czpbImNzaXNvbGF0aW45IiwiaXNvLTg4NTktMTUiLCJpc284ODU5LTE1IiwiaXNvODg1OTE1IiwiaXNvXzg4NTktMTUiLCJsOSJdLG5hbWU6IklTTy04ODU5LTE1In0se2xhYmVsczpbImlzby04ODU5LTE2Il0sbmFtZToiSVNPLTg4NTktMTYifSx7bGFiZWxzOlsiY3Nrb2k4ciIsImtvaSIs''@;'; put 'put ''ImtvaTgiLCJrb2k4LXIiLCJrb2k4X3IiXSxuYW1lOiJLT0k4LVIifSx7bGFiZWxzOlsia29pOC1ydSIsImtvaTgtdSJdLG5hbWU6IktPSTgtVSJ9LHtsYWJlbHM6WyJjc21hY2ludG9zaCIsIm1hYyIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuIl0sbmFtZToibWFjaW50b3NoIn0se2xhYmVs''@;'; put 'put ''czpbImRvcy04NzQiLCJpc28tODg1OS0xMSIsImlzbzg4NTktMTEiLCJpc284ODU5MTEiLCJ0aXMtNjIwIiwid2luZG93cy04NzQiXSxuYW1lOiJ3aW5kb3dzLTg3NCJ9LHtsYWJlbHM6WyJjcDEyNTAiLCJ3aW5kb3dzLTEyNTAiLCJ4LWNwMTI1MCJdLG5hbWU6IndpbmRvd3MtMTI1MCJ9LHts''@;'; put 'put ''YWJlbHM6WyJjcDEyNTEiLCJ3aW5kb3dzLTEyNTEiLCJ4LWNwMTI1MSJdLG5hbWU6IndpbmRvd3MtMTI1MSJ9LHtsYWJlbHM6WyJhbnNpX3gzLjQtMTk2OCIsImFzY2lpIiwiY3AxMjUyIiwiY3A4MTkiLCJjc2lzb2xhdGluMSIsImlibTgxOSIsImlzby04ODU5LTEiLCJpc28taXItMTAwIiwi''@;'; put 'put ''aXNvODg1OS0xIiwiaXNvODg1OTEiLCJpc29fODg1OS0xIiwiaXNvXzg4NTktMToxOTg3IiwibDEiLCJsYXRpbjEiLCJ1cy1hc2NpaSIsIndpbmRvd3MtMTI1MiIsIngtY3AxMjUyIl0sbmFtZToid2luZG93cy0xMjUyIn0se2xhYmVsczpbImNwMTI1MyIsIndpbmRvd3MtMTI1MyIsIngtY3Ax''@;'; put 'put ''MjUzIl0sbmFtZToid2luZG93cy0xMjUzIn0se2xhYmVsczpbImNwMTI1NCIsImNzaXNvbGF0aW41IiwiaXNvLTg4NTktOSIsImlzby1pci0xNDgiLCJpc284ODU5LTkiLCJpc284ODU5OSIsImlzb184ODU5LTkiLCJpc29fODg1OS05OjE5ODkiLCJsNSIsImxhdGluNSIsIndpbmRvd3MtMTI1''@;'; put 'put ''NCIsIngtY3AxMjU0Il0sbmFtZToid2luZG93cy0xMjU0In0se2xhYmVsczpbImNwMTI1NSIsIndpbmRvd3MtMTI1NSIsIngtY3AxMjU1Il0sbmFtZToid2luZG93cy0xMjU1In0se2xhYmVsczpbImNwMTI1NiIsIndpbmRvd3MtMTI1NiIsIngtY3AxMjU2Il0sbmFtZToid2luZG93cy0xMjU2''@;'; put 'put ''In0se2xhYmVsczpbImNwMTI1NyIsIndpbmRvd3MtMTI1NyIsIngtY3AxMjU3Il0sbmFtZToid2luZG93cy0xMjU3In0se2xhYmVsczpbImNwMTI1OCIsIndpbmRvd3MtMTI1OCIsIngtY3AxMjU4Il0sbmFtZToid2luZG93cy0xMjU4In0se2xhYmVsczpbIngtbWFjLWN5cmlsbGljIiwieC1t''@;'; put 'put ''YWMtdWtyYWluaWFuIl0sbmFtZToieC1tYWMtY3lyaWxsaWMifV0saGVhZGluZzoiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjaGluZXNlIiwiY3NnYjIzMTIiLCJjc2lzbzU4Z2IyMzEyODAiLCJnYjIzMTIiLCJnYl8yMzEyIiwiZ2JfMjMx''@;'; put 'put ''Mi04MCIsImdiayIsImlzby1pci01OCIsIngtZ2JrIl0sbmFtZToiR0JLIn0se2xhYmVsczpbImdiMTgwMzAiXSxuYW1lOiJnYjE4MDMwIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJi''@;'; put 'put ''aWc1IiwiYmlnNS1oa3NjcyIsImNuLWJpZzUiLCJjc2JpZzUiLCJ4LXgtYmlnNSJdLG5hbWU6IkJpZzUifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2V1Y3BrZGZtdGphcGFuZXNl''@;'; put 'put ''IiwiZXVjLWpwIiwieC1ldWMtanAiXSxuYW1lOiJFVUMtSlAifSx7bGFiZWxzOlsiY3Npc28yMDIyanAiLCJpc28tMjAyMi1qcCJdLG5hbWU6IklTTy0yMDIyLUpQIn0se2xhYmVsczpbImNzc2hpZnRqaXMiLCJtczkzMiIsIm1zX2thbmppIiwic2hpZnQtamlzIiwic2hpZnRfamlzIiwic2pp''@;'; put 'put ''cyIsIndpbmRvd3MtMzFqIiwieC1zamlzIl0sbmFtZToiU2hpZnRfSklTIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIEphcGFuZXNlIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2V1Y2tyIiwiY3Nrc2M1NjAxMTk4NyIsImV1Yy1rciIsImlzby1pci0xNDkiLCJr''@;'; put 'put ''b3JlYW4iLCJrc19jXzU2MDEtMTk4NyIsImtzX2NfNTYwMS0xOTg5Iiwia3NjNTYwMSIsImtzY181NjAxIiwid2luZG93cy05NDkiXSxuYW1lOiJFVUMtS1IifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgS29yZWFuIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2lz''@;'; put 'put ''bzIwMjJrciIsImh6LWdiLTIzMTIiLCJpc28tMjAyMi1jbiIsImlzby0yMDIyLWNuLWV4dCIsImlzby0yMDIyLWtyIl0sbmFtZToicmVwbGFjZW1lbnQifSx7bGFiZWxzOlsidXRmLTE2YmUiXSxuYW1lOiJVVEYtMTZCRSJ9LHtsYWJlbHM6WyJ1dGYtMTYiLCJ1dGYtMTZsZSJdLG5hbWU6IlVU''@;'; put 'put ''Ri0xNkxFIn0se2xhYmVsczpbIngtdXNlci1kZWZpbmVkIl0sbmFtZToieC11c2VyLWRlZmluZWQifV0saGVhZGluZzoiTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzIn1dLG5lPXt9O0ouZm9yRWFjaChmdW5jdGlvbihBZSl7QWUuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oX3Qp''@;'; put 'put ''e190LmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKG50KXtuZVtudF09X3R9KX0pfSk7dmFyIHAsaWU9e30sbGU9e307ZnVuY3Rpb24gbWUoQWUsX3Qpe3JldHVybiBfdCYmX3RbQWVdfHxudWxsfWZ1bmN0aW9uIF9lKEFlLF90KXt2YXIgbnQ9X3QuaW5kZXhPZihBZSk7cmV0dXJuLTE9PT1udD9u''@;'; put 'put ''dWxsOm50fWZ1bmN0aW9uIFRlKEFlKXtpZighKCJlbmNvZGluZy1pbmRleGVzImluIEkpKXRocm93IEVycm9yKCJJbmRleGVzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTtyZXR1cm4gSVsiZW5jb2RpbmctaW5kZXhlcyJd''@;'; put 'put ''W0FlXX12YXIgeCxDPSJ1dGYtOCI7ZnVuY3Rpb24gVChBZSxfdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgVCkpdGhyb3cgVHlwZUVycm9yKCJDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3JnZXQgJ25ldyc/Iik7QWU9dm9pZCAwIT09QWU/U3RyaW5nKEFlKTpDLF90PXcoX3QpLHRo''@;'; put 'put ''aXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2lnbm9yZUJPTT0hMSx0aGlzLl9CT01zZWVuPSExLHRoaXMuX2Vycm9yX21vZGU9InJlcGxhY2VtZW50Iix0aGlzLl9kb19ub3RfZmx1c2g9ITE7dmFyIG50PWVlKEFlKTtpZihudWxsPT09bnR8fCJyZXBsYWNlbWVu''@;'; put 'put ''dCI9PT1udC5uYW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQWUpO2lmKCFsZVtudC5uYW1lXSl0aHJvdyBFcnJvcigiRGVjb2RlciBub3QgcHJlc2VudC4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3ZhciBR''@;'; put 'put ''ZT10aGlzO3JldHVybiBRZS5fZW5jb2Rpbmc9bnQsX3QuZmF0YWwmJihRZS5fZXJyb3JfbW9kZT0iZmF0YWwiKSxfdC5pZ25vcmVCT00mJihRZS5faWdub3JlQk9NPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPVFlLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNl''@;'; put 'put ''KCksdGhpcy5mYXRhbD0iZmF0YWwiPT09UWUuX2Vycm9yX21vZGUsdGhpcy5pZ25vcmVCT009UWUuX2lnbm9yZUJPTSksUWV9ZnVuY3Rpb24gSChBZSxfdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSCkpdGhyb3cgVHlwZUVycm9yKCJDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3Jn''@;'; put 'put ''ZXQgJ25ldyc/Iik7aWYoX3Q9dyhfdCksdGhpcy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9lbmNvZGVyPW51bGwsdGhpcy5fZG9fbm90X2ZsdXNoPSExLHRoaXMuX2ZhdGFsPV90LmZhdGFsPyJmYXRhbCI6InJlcGxhY2VtZW50IixfdC5OT05TVEFOREFSRF9hbGxvd0xlZ2FjeUVuY29kaW5nKXt2''@;'; put 'put ''YXIgUWU9ZWUoQWU9dm9pZCAwIT09QWU/U3RyaW5nKEFlKTpDKTtpZihudWxsPT09UWV8fCJyZXBsYWNlbWVudCI9PT1RZS5uYW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQWUpO2lmKCFpZVtRZS5uYW1lXSl0aHJvdyBFcnJvcigiRW5jb2RlciBub3QgcHJlc2Vu''@;'; put 'put ''dC4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3RoaXMuX2VuY29kaW5nPVFlfWVsc2UgdGhpcy5fZW5jb2Rpbmc9ZWUoInV0Zi04Iiksdm9pZCAwIT09QWUmJiJjb25zb2xlImluIEkmJmNvbnNvbGUud2FybigiVGV4dEVuY29kZXIgY29u''@;'; put 'put ''c3RydWN0b3IgY2FsbGVkIHdpdGggZW5jb2RpbmcgbGFiZWwsIHdoaWNoIGlzIGlnbm9yZWQuIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9dGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpKSx0aGlzfWZ1bmN0aW9uIGooQWUpe3ZhciBfdD1B''@;'; put 'put ''ZS5mYXRhbCxudD0wLFFlPTAsdW49MCx5dD0xMjgsTXQ9MTkxO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihEdCxpdCl7aWYoaXQ9PT1OJiYwIT09dW4pcmV0dXJuIHVuPTAsVShfdCk7aWYoaXQ9PT1OKXJldHVybiBLO2lmKDA9PT11bil7aWYoXyhpdCwwLDEyNykpcmV0dXJuIGl0O2lmKF8oaXQs''@;'; put 'put ''MTk0LDIyMykpdW49MSxudD0zMSZpdDtlbHNlIGlmKF8oaXQsMjI0LDIzOSkpMjI0PT09aXQmJih5dD0xNjApLDIzNz09PWl0JiYoTXQ9MTU5KSx1bj0yLG50PTE1Jml0O2Vsc2V7aWYoIV8oaXQsMjQwLDI0NCkpcmV0dXJuIFUoX3QpOzI0MD09PWl0JiYoeXQ9MTQ0KSwyNDQ9PT1pdCYmKE10''@;'; put 'put ''PTE0MyksdW49MyxudD03Jml0fXJldHVybiBudWxsfWlmKCFfKGl0LHl0LE10KSlyZXR1cm4gbnQ9dW49UWU9MCx5dD0xMjgsTXQ9MTkxLER0LnByZXBlbmQoaXQpLFUoX3QpO2lmKHl0PTEyOCxNdD0xOTEsbnQ9bnQ8PDZ8NjMmaXQsKFFlKz0xKSE9PXVuKXJldHVybiBudWxsO3ZhciAkZT1u''@;'; put 'put ''dDtyZXR1cm4gbnQ9dW49UWU9MCwkZX19ZnVuY3Rpb24gRShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFlO3ZhciB1bix5dDtfKFFlLDEyOCwyMDQ3KT8odW49MSx5dD0xOTIpOl8oUWUsMjA0OCw2NTUzNSk/KHVu''@;'; put 'put ''PTIseXQ9MjI0KTpfKFFlLDY1NTM2LDExMTQxMTEpJiYodW49Myx5dD0yNDApO2Zvcih2YXIgTXQ9WyhRZT4+Nip1bikreXRdO3VuPjA7KU10LnB1c2goMTI4fDYzJlFlPj42Kih1bi0xKSksdW4tPTE7cmV0dXJuIE10fX1mdW5jdGlvbiBtKEFlLF90KXt2YXIgbnQ9X3QuZmF0YWw7dGhpcy5o''@;'; put 'put ''YW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4pcmV0dXJuIEs7aWYoTyh1bikpcmV0dXJuIHVuO3ZhciB5dD1BZVt1bi0xMjhdO3JldHVybiBudWxsPT09eXQ/VShudCk6eXR9fWZ1bmN0aW9uIEEoQWUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OKXJl''@;'; put 'put ''dHVybiBLO2lmKHoodW4pKXJldHVybiB1bjt2YXIgeXQ9X2UodW4sQWUpO3JldHVybiBudWxsPT09eXQmJlcodW4pLHl0KzEyOH19ZnVuY3Rpb24gYWUoQWUpe3ZhciBfdD1BZS5mYXRhbCxudD0wLFFlPTAsdW49MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oeXQsTXQpe2lmKE10PT09TiYmMD09''@;'; put 'put ''PW50JiYwPT09UWUmJjA9PT11bilyZXR1cm4gSzt2YXIgRHQ7aWYoTXQ9PT1OJiYoMCE9PW50fHwwIT09UWV8fDAhPT11bikmJihudD0wLFFlPTAsdW49MCxVKF90KSksMCE9PXVuKXtEdD1udWxsLF8oTXQsNDgsNTcpJiYoRHQ9ZnVuY3Rpb24gU2UoQWUpe2lmKEFlPjM5NDE5JiZBZTwxODll''@;'; put 'put ''M3x8QWU+MTIzNzU3NSlyZXR1cm4gbnVsbDtpZig3NDU3PT09QWUpcmV0dXJuIDU5MzM1O3ZhciB1bixfdD0wLG50PTAsUWU9VGUoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKHVuPTA7dW48UWUubGVuZ3RoOysrdW4pe3ZhciB5dD1RZVt1bl07aWYoISh5dFswXTw9QWUpKWJyZWFrO190PXl0WzBd''@;'; put 'put ''LG50PXl0WzFdfXJldHVybiBudCtBZS1fdH0oMTAqKDEyNiooMTAqKG50LTEyOSkrUWUtNDgpK3VuLTEyOSkrTXQtNDgpKTt2YXIgaXQ9W1FlLHVuLE10XTtyZXR1cm4gbnQ9MCxRZT0wLHVuPTAsbnVsbD09PUR0Pyh5dC5wcmVwZW5kKGl0KSxVKF90KSk6RHR9aWYoMCE9PVFlKXJldHVybiBf''@;'; put 'put ''KE10LDEyOSwyNTQpPyh1bj1NdCxudWxsKTooeXQucHJlcGVuZChbUWUsTXRdKSxudD0wLFFlPTAsVShfdCkpO2lmKDAhPT1udCl7aWYoXyhNdCw0OCw1NykpcmV0dXJuIFFlPU10LG51bGw7dmFyICRlPW50LHR0PW51bGw7bnQ9MDt2YXIgSGU9TXQ8MTI3PzY0OjY1O3JldHVybihfKE10LDY0''@;'; put 'put ''LDEyNil8fF8oTXQsMTI4LDI1NCkpJiYodHQ9MTkwKigkZS0xMjkpKyhNdC1IZSkpLG51bGw9PT0oRHQ9bnVsbD09PXR0P251bGw6bWUodHQsVGUoImdiMTgwMzAiKSkpJiZPKE10KSYmeXQucHJlcGVuZChNdCksbnVsbD09PUR0P1UoX3QpOkR0fXJldHVybiBPKE10KT9NdDoxMjg9PT1NdD84''@;'; put 'put ''MzY0Ol8oTXQsMTI5LDI1NCk/KG50PU10LG51bGwpOlUoX3QpfX1mdW5jdGlvbiB0ZShBZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4pcmV0dXJuIEs7aWYoeih1bikpcmV0dXJuIHVuO2lmKDU4ODUzPT09dW4pcmV0dXJuIFcodW4pO2lmKF90JiY4MzY0PT09''@;'; put 'put ''dW4pcmV0dXJuIDEyODt2YXIgeXQ9X2UodW4sVGUoImdiMTgwMzAiKSk7aWYobnVsbCE9PXl0KXt2YXIgRHQ9eXQlMTkwO3JldHVybltCKHl0LzE5MCkrMTI5LER0KyhEdDw2Mz82NDo2NSldfWlmKF90KXJldHVybiBXKHVuKTt5dD1mdW5jdGlvbiBqZShBZSl7aWYoNTkzMzU9PT1BZSlyZXR1''@;'; put 'put ''cm4gNzQ1Nzt2YXIgdW4sX3Q9MCxudD0wLFFlPVRlKCJnYjE4MDMwLXJhbmdlcyIpO2Zvcih1bj0wO3VuPFFlLmxlbmd0aDsrK3VuKXt2YXIgeXQ9UWVbdW5dO2lmKCEoeXRbMV08PUFlKSlicmVhaztfdD15dFsxXSxudD15dFswXX1yZXR1cm4gbnQrQWUtX3R9KHVuKTt2YXIgJGU9Qih5dC8x''@;'; put 'put ''MC8xMjYvMTApLHR0PUIoKHl0LT0xMCokZSoxMjYqMTApLzEwLzEyNiksSGU9QigoeXQtPTEwKnR0KjEyNikvMTApO3JldHVyblskZSsxMjksdHQrNDgsSGUrMTI5LHl0LTEwKkhlKzQ4XX19ZnVuY3Rpb24gc2UoQWUpe3ZhciBfdD1BZS5mYXRhbCxudD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlv''@;'; put 'put ''bihRZSx1bil7aWYodW49PT1OJiYwIT09bnQpcmV0dXJuIG50PTAsVShfdCk7aWYodW49PT1OJiYwPT09bnQpcmV0dXJuIEs7aWYoMCE9PW50KXt2YXIgeXQ9bnQsTXQ9bnVsbDtudD0wO3ZhciBEdD11bjwxMjc/NjQ6OTg7c3dpdGNoKChfKHVuLDY0LDEyNil8fF8odW4sMTYxLDI1NCkpJiYo''@;'; put 'put ''TXQ9MTU3Kih5dC0xMjkpKyh1bi1EdCkpLE10KXtjYXNlIDExMzM6cmV0dXJuWzIwMiw3NzJdO2Nhc2UgMTEzNTpyZXR1cm5bMjAyLDc4MF07Y2FzZSAxMTY0OnJldHVyblsyMzQsNzcyXTtjYXNlIDExNjY6cmV0dXJuWzIzNCw3ODBdfXZhciBpdD1udWxsPT09TXQ/bnVsbDptZShNdCxUZSgi''@;'; put 'put ''YmlnNSIpKTtyZXR1cm4gbnVsbD09PWl0JiZPKHVuKSYmUWUucHJlcGVuZCh1biksbnVsbD09PWl0P1UoX3QpOml0fXJldHVybiBPKHVuKT91bjpfKHVuLDEyOSwyNTQpPyhudD11bixudWxsKTpVKF90KX19ZnVuY3Rpb24gd2UoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYo''@;'; put 'put ''UWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2YXIgdW49ZnVuY3Rpb24gYihBZSl7dmFyIF90PXg9eHx8VGUoImJpZzUiKS5tYXAoZnVuY3Rpb24obnQsUWUpe3JldHVybiBRZTw1MDI0P251bGw6bnR9KTtyZXR1cm4gOTU1Mj09PUFlfHw5NTY2PT09QWV8fDk1Njk9PT1BZXx8''@;'; put 'put ''OTU3OD09PUFlfHwyMTMxMz09PUFlfHwyMTMxNz09PUFlP190Lmxhc3RJbmRleE9mKEFlKTpfZShBZSxfdCl9KFFlKTtpZihudWxsPT09dW4pcmV0dXJuIFcoUWUpO3ZhciB5dD1CKHVuLzE1NykrMTI5O2lmKHl0PDE2MSlyZXR1cm4gVyhRZSk7dmFyIE10PXVuJTE1NztyZXR1cm5beXQsTXQr''@;'; put 'put ''KE10PDYzPzY0Ojk4KV19fWZ1bmN0aW9uIFVlKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9ITEsUWU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24odW4seXQpe2lmKHl0PT09TiYmMCE9PVFlKXJldHVybiBRZT0wLFUoX3QpO2lmKHl0PT09TiYmMD09PVFlKXJldHVybiBLO2lmKDE0Mj09PVFlJiZf''@;'; put 'put ''KHl0LDE2MSwyMjMpKXJldHVybiBRZT0wLDY1MjE2K3l0O2lmKDE0Mz09PVFlJiZfKHl0LDE2MSwyNTQpKXJldHVybiBudD0hMCxRZT15dCxudWxsO2lmKDAhPT1RZSl7dmFyIE10PVFlO1FlPTA7dmFyIER0PW51bGw7cmV0dXJuIF8oTXQsMTYxLDI1NCkmJl8oeXQsMTYxLDI1NCkmJihEdD1t''@;'; put 'put ''ZSg5NCooTXQtMTYxKSsoeXQtMTYxKSxUZShudD8iamlzMDIxMiI6ImppczAyMDgiKSkpLG50PSExLF8oeXQsMTYxLDI1NCl8fHVuLnByZXBlbmQoeXQpLG51bGw9PT1EdD9VKF90KTpEdH1yZXR1cm4gTyh5dCk/eXQ6MTQyPT09eXR8fDE0Mz09PXl0fHxfKHl0LDE2MSwyNTQpPyhRZT15dCxu''@;'; put 'put ''dWxsKTpVKF90KX19ZnVuY3Rpb24gSmUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTtpZigxNjU9PT1RZSlyZXR1cm4gOTI7aWYoODI1ND09PVFlKXJldHVybiAxMjY7aWYoXyhRZSw2NTM3Nyw2NTQzOSkpcmV0''@;'; put 'put ''dXJuWzE0MixRZS02NTM3NysxNjFdOzg3MjI9PT1RZSYmKFFlPTY1MjkzKTt2YXIgdW49X2UoUWUsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT11bj9XKFFlKTpbQih1bi85NCkrMTYxLHVuJTk0KzE2MV19fWZ1bmN0aW9uIG90KEFlKXt2YXIgX3Q9QWUuZmF0YWwsUWU9MCx5dD0wLE10''@;'; put 'put ''PSExO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihEdCxpdCl7c3dpdGNoKFFlKXtkZWZhdWx0OmNhc2UgMDpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTpfKGl0LDAsMTI3KSYmMTQhPT1pdCYmMTUhPT1pdCYmMjchPT1pdD8oTXQ9ITEsaXQpOml0PT09Tj9LOihNdD0hMSxVKF90KSk7Y2FzZSAx''@;'; put 'put ''OnJldHVybiAyNz09PWl0PyhRZT01LG51bGwpOjkyPT09aXQ/KE10PSExLDE2NSk6MTI2PT09aXQ/KE10PSExLDgyNTQpOl8oaXQsMCwxMjcpJiYxNCE9PWl0JiYxNSE9PWl0JiYyNyE9PWl0JiY5MiE9PWl0JiYxMjYhPT1pdD8oTXQ9ITEsaXQpOml0PT09Tj9LOihNdD0hMSxVKF90KSk7Y2Fz''@;'; put 'put ''ZSAyOnJldHVybiAyNz09PWl0PyhRZT01LG51bGwpOl8oaXQsMzMsOTUpPyhNdD0hMSw2NTM0NCtpdCk6aXQ9PT1OP0s6KE10PSExLFUoX3QpKTtjYXNlIDM6cmV0dXJuIDI3PT09aXQ/KFFlPTUsbnVsbCk6XyhpdCwzMywxMjYpPyhNdD0hMSx5dD1pdCxRZT00LG51bGwpOml0PT09Tj9LOihN''@;'; put 'put ''dD0hMSxVKF90KSk7Y2FzZSA0OmlmKDI3PT09aXQpcmV0dXJuIFFlPTUsVShfdCk7aWYoXyhpdCwzMywxMjYpKXtRZT0zO3ZhciB0dD1tZSg5NCooeXQtMzMpK2l0LTMzLFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09dHQ/VShfdCk6dHR9cmV0dXJuIGl0PT09Tj8oUWU9MyxEdC5wcmVw''@;'; put 'put ''ZW5kKGl0KSxVKF90KSk6KFFlPTMsVShfdCkpO2Nhc2UgNTpyZXR1cm4gMzY9PT1pdHx8NDA9PT1pdD8oeXQ9aXQsUWU9NixudWxsKTooRHQucHJlcGVuZChpdCksTXQ9ITEsUWU9MCxVKF90KSk7Y2FzZSA2OnZhciBIZT15dDt5dD0wO3ZhciB1dD1udWxsO2lmKDQwPT09SGUmJjY2PT09aXQm''@;'; put 'put ''Jih1dD0wKSw0MD09PUhlJiY3ND09PWl0JiYodXQ9MSksNDA9PT1IZSYmNzM9PT1pdCYmKHV0PTIpLDM2PT09SGUmJig2ND09PWl0fHw2Nj09PWl0KSYmKHV0PTMpLG51bGwhPT11dCl7UWU9UWU9dXQ7dmFyIHF0PU10O3JldHVybiBNdD0hMCxxdD9VKF90KTpudWxsfXJldHVybiBEdC5wcmVw''@;'; put 'put ''ZW5kKFtIZSxpdF0pLE10PSExLFFlPTAsVShfdCl9fX1mdW5jdGlvbiB4ZShBZSl7dmFyIFFlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHVuLHl0KXtpZih5dD09PU4mJjAhPT1RZSlyZXR1cm4gdW4ucHJlcGVuZCh5dCksUWU9MCxbMjcsNDAsNjZdO2lmKHl0PT09TiYmMD09PVFlKXJldHVy''@;'; put 'put ''biBLO2lmKCEoMCE9PVFlJiYxIT09UWV8fDE0IT09eXQmJjE1IT09eXQmJjI3IT09eXQpKXJldHVybiBXKDY1NTMzKTtpZigwPT09UWUmJnooeXQpKXJldHVybiB5dDtpZigxPT09UWUmJih6KHl0KSYmOTIhPT15dCYmMTI2IT09eXR8fDE2NT09eXR8fDgyNTQ9PXl0KSl7aWYoeih5dCkpcmV0''@;'; put 'put ''dXJuIHl0O2lmKDE2NT09PXl0KXJldHVybiA5MjtpZig4MjU0PT09eXQpcmV0dXJuIDEyNn1pZih6KHl0KSYmMCE9PVFlKXJldHVybiB1bi5wcmVwZW5kKHl0KSxRZT0wLFsyNyw0MCw2Nl07aWYoKDE2NT09PXl0fHw4MjU0PT09eXQpJiYxIT09UWUpcmV0dXJuIHVuLnByZXBlbmQoeXQpLFFl''@;'; put 'put ''PTEsWzI3LDQwLDc0XTs4NzIyPT09eXQmJih5dD02NTI5Myk7dmFyIE10PV9lKHl0LFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09TXQ/Vyh5dCk6MiE9PVFlPyh1bi5wcmVwZW5kKHl0KSxRZT0yLFsyNywzNiw2Nl0pOltCKE10Lzk0KSszMyxNdCU5NCszM119fWZ1bmN0aW9uIHZlKEFl''@;'; put 'put ''KXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TiYmMCE9PW50KXJldHVybiBudD0wLFUoX3QpO2lmKHVuPT09TiYmMD09PW50KXJldHVybiBLO2lmKDAhPT1udCl7dmFyIHl0PW50LE10PW51bGw7bnQ9MDt2YXIgRHQ9dW48MTI3PzY0''@;'; put 'put ''OjY1LGl0PXl0PDE2MD8xMjk6MTkzO2lmKChfKHVuLDY0LDEyNil8fF8odW4sMTI4LDI1MikpJiYoTXQ9MTg4Kih5dC1pdCkrdW4tRHQpLF8oTXQsODgzNiwxMDcxNSkpcmV0dXJuIDQ4NTA4K010O3ZhciAkZT1udWxsPT09TXQ/bnVsbDptZShNdCxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVs''@;'; put 'put ''bD09PSRlJiZPKHVuKSYmUWUucHJlcGVuZCh1biksbnVsbD09PSRlP1UoX3QpOiRlfXJldHVybiBPKHVuKXx8MTI4PT09dW4/dW46Xyh1biwxNjEsMjIzKT82NTIxNit1bjpfKHVuLDEyOSwxNTkpfHxfKHVuLDIyNCwyNTIpPyhudD11bixudWxsKTpVKF90KX19ZnVuY3Rpb24gWGUoQWUpe3Ro''@;'; put 'put ''aXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpfHwxMjg9PT1RZSlyZXR1cm4gUWU7aWYoMTY1PT09UWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1RZSlyZXR1cm4gMTI2O2lmKF8oUWUsNjUzNzcsNjU0MzkpKXJldHVybiBRZS02NTM3NysxNjE7ODcy''@;'; put 'put ''Mj09PVFlJiYoUWU9NjUyOTMpO3ZhciB1bj1mdW5jdGlvbiBWKEFlKXtyZXR1cm4ocD1wfHxUZSgiamlzMDIwOCIpLm1hcChmdW5jdGlvbihudCxRZSl7cmV0dXJuIF8oUWUsODI3Miw4ODM1KT9udWxsOm50fSkpLmluZGV4T2YoQWUpfShRZSk7aWYobnVsbD09PXVuKXJldHVybiBXKFFlKTt2''@;'; put 'put ''YXIgeXQ9Qih1bi8xODgpLER0PXVuJTE4ODtyZXR1cm5beXQrKHl0PDMxPzEyOToxOTMpLER0KyhEdDw2Mz82NDo2NSldfX1mdW5jdGlvbiB6ZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4mJjAhPT1udClyZXR1cm4gbnQ9''@;'; put 'put ''MCxVKF90KTtpZih1bj09PU4mJjA9PT1udClyZXR1cm4gSztpZigwIT09bnQpe3ZhciB5dD1udCxNdD1udWxsO250PTAsXyh1biw2NSwyNTQpJiYoTXQ9MTkwKih5dC0xMjkpKyh1bi02NSkpO3ZhciBEdD1udWxsPT09TXQ/bnVsbDptZShNdCxUZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09''@;'; put 'put ''TXQmJk8odW4pJiZRZS5wcmVwZW5kKHVuKSxudWxsPT09RHQ/VShfdCk6RHR9cmV0dXJuIE8odW4pP3VuOl8odW4sMTI5LDI1NCk/KG50PXVuLG51bGwpOlUoX3QpfX1mdW5jdGlvbiBEZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihR''@;'; put 'put ''ZSkpcmV0dXJuIFFlO3ZhciB1bj1fZShRZSxUZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09dW4/VyhRZSk6W0IodW4vMTkwKSsxMjksdW4lMTkwKzY1XX19ZnVuY3Rpb24gRmUoQWUsX3Qpe3ZhciBudD1BZT4+OCxRZT0yNTUmQWU7cmV0dXJuIF90P1tudCxRZV06W1FlLG50XX1mdW5jdGlv''@;'; put 'put ''biBPZShBZSxfdCl7dmFyIG50PV90LmZhdGFsLFFlPW51bGwsdW49bnVsbDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oeXQsTXQpe2lmKE10PT09TiYmKG51bGwhPT1RZXx8bnVsbCE9PXVuKSlyZXR1cm4gVShudCk7aWYoTXQ9PT1OJiZudWxsPT09UWUmJm51bGw9PT11bilyZXR1cm4gSztpZihu''@;'; put 'put ''dWxsPT09UWUpcmV0dXJuIFFlPU10LG51bGw7dmFyIER0O2lmKER0PUFlPyhRZTw8OCkrTXQ6KE10PDw4KStRZSxRZT1udWxsLG51bGwhPT11bil7dmFyIGl0PXVuO3JldHVybiB1bj1udWxsLF8oRHQsNTYzMjAsNTczNDMpPzY1NTM2KzEwMjQqKGl0LTU1Mjk2KSsoRHQtNTYzMjApOih5dC5w''@;'; put 'put ''cmVwZW5kKEZlKER0LEFlKSksVShudCkpfXJldHVybiBfKER0LDU1Mjk2LDU2MzE5KT8odW49RHQsbnVsbCk6XyhEdCw1NjMyMCw1NzM0Myk/VShudCk6RHR9fWZ1bmN0aW9uIEllKEFlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TilyZXR1cm4gSztpZihfKHVu''@;'; put 'put ''LDAsNjU1MzUpKXJldHVybiBGZSh1bixBZSk7dmFyIHl0PUZlKDU1Mjk2Kyh1bi02NTUzNj4+MTApLEFlKSxNdD1GZSg1NjMyMCsodW4tNjU1MzYmMTAyMyksQWUpO3JldHVybiB5dC5jb25jYXQoTXQpfX1mdW5jdGlvbiBWZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtyZXR1''@;'; put 'put ''cm4gUWU9PT1OP0s6TyhRZSk/UWU6NjMzNjArUWUtMTI4fX1mdW5jdGlvbiBrZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtyZXR1cm4gUWU9PT1OP0s6eihRZSk/UWU6XyhRZSw2MzM2MCw2MzQ4Nyk/UWUtNjMzNjArMTI4OlcoUWUpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkm''@;'; put 'put ''JihPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImZhdGFsIix7Z2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJpZ25vcmVCT00iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWdub3JlQk9NfX0pKSxULnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oX3QsbnQpe3ZhciBR''@;'; put 'put ''ZTtRZT0ib2JqZWN0Ij09dHlwZW9mIF90JiZfdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KF90KToib2JqZWN0Ij09dHlwZW9mIF90JiYiYnVmZmVyImluIF90JiZfdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShfdC5idWZmZXIs''@;'; put 'put ''X3QuYnl0ZU9mZnNldCxfdC5ieXRlTGVuZ3RoKTpuZXcgVWludDhBcnJheSgwKSxudD13KG50KSx0aGlzLl9kb19ub3RfZmx1c2h8fCh0aGlzLl9kZWNvZGVyPWxlW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZXJyb3JfbW9kZX0pLHRoaXMuX0JPTXNlZW49''@;'; put 'put ''ITEpLHRoaXMuX2RvX25vdF9mbHVzaD0hIW50LnN0cmVhbTtmb3IodmFyIE10LHVuPW5ldyBMKFFlKSx5dD1bXTs7KXt2YXIgRHQ9dW4ucmVhZCgpO2lmKER0PT09Tnx8KE10PXRoaXMuX2RlY29kZXIuaGFuZGxlcih1bixEdCkpPT09SylicmVhaztudWxsIT09TXQmJihBcnJheS5pc0FycmF5''@;'; put 'put ''KE10KT95dC5wdXNoLmFwcGx5KHl0LE10KTp5dC5wdXNoKE10KSl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7ZG97aWYoKE10PXRoaXMuX2RlY29kZXIuaGFuZGxlcih1bix1bi5yZWFkKCkpKT09PUspYnJlYWs7bnVsbCE9PU10JiYoQXJyYXkuaXNBcnJheShNdCk/eXQucHVzaC5hcHBseSh5''@;'; put 'put ''dCxNdCk6eXQucHVzaChNdCkpfXdoaWxlKCF1bi5lbmRPZlN0cmVhbSgpKTt0aGlzLl9kZWNvZGVyPW51bGx9cmV0dXJuIGZ1bmN0aW9uIGl0KCRlKXtyZXR1cm4gZnVuY3Rpb24gZyhBZSxfdCl7cmV0dXJuLTEhPT1BZS5pbmRleE9mKF90KX0oWyJVVEYtOCIsIlVURi0xNkxFIiwiVVRGLTE2''@;'; put 'put ''QkUiXSx0aGlzLl9lbmNvZGluZy5uYW1lKSYmIXRoaXMuX2lnbm9yZUJPTSYmIXRoaXMuX0JPTXNlZW4mJigkZS5sZW5ndGg+MCYmNjUyNzk9PT0kZVswXT8odGhpcy5fQk9Nc2Vlbj0hMCwkZS5zaGlmdCgpKTokZS5sZW5ndGg+MCYmKHRoaXMuX0JPTXNlZW49ITApKSxmdW5jdGlvbiBGKEFl''@;'; put 'put ''KXtmb3IodmFyIF90PSIiLG50PTA7bnQ8QWUubGVuZ3RoOysrbnQpe3ZhciBRZT1BZVtudF07UWU8PTY1NTM1P190Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFFlKTooUWUtPTY1NTM2LF90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhRZT4+MTApLDU2MzIwKygxMDIzJlFlKSkpfXJldHVy''@;'; put 'put ''biBfdH0oJGUpfS5jYWxsKHRoaXMseXQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZW5jb2RpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpfX0pLEgucHJvdG90eXBl''@;'; put 'put ''LmVuY29kZT1mdW5jdGlvbihfdCxudCl7X3Q9dm9pZCAwPT09X3Q/IiI6U3RyaW5nKF90KSxudD13KG50KSx0aGlzLl9kb19ub3RfZmx1c2h8fCh0aGlzLl9lbmNvZGVyPWllW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZmF0YWx9KSksdGhpcy5fZG9fbm90''@;'; put 'put ''X2ZsdXNoPSEhbnQuc3RyZWFtO2Zvcih2YXIgeXQsUWU9bmV3IEwoZnVuY3Rpb24gUChBZSl7Zm9yKHZhciBfdD1TdHJpbmcoQWUpLG50PV90Lmxlbmd0aCxRZT0wLHVuPVtdO1FlPG50Oyl7dmFyIHl0PV90LmNoYXJDb2RlQXQoUWUpO2lmKHl0PDU1Mjk2fHx5dD41NzM0Myl1bi5wdXNoKHl0''@;'; put 'put ''KTtlbHNlIGlmKDU2MzIwPD15dCYmeXQ8PTU3MzQzKXVuLnB1c2goNjU1MzMpO2Vsc2UgaWYoNTUyOTY8PXl0JiZ5dDw9NTYzMTkpaWYoUWU9PT1udC0xKXVuLnB1c2goNjU1MzMpO2Vsc2V7dmFyIE10PV90LmNoYXJDb2RlQXQoUWUrMSk7NTYzMjA8PU10JiZNdDw9NTczNDM/KHVuLnB1c2go''@;'; put 'put ''NjU1MzYrKCgxMDIzJnl0KTw8MTApKygxMDIzJk10KSksUWUrPTEpOnVuLnB1c2goNjU1MzMpfVFlKz0xfXJldHVybiB1bn0oX3QpKSx1bj1bXTs7KXt2YXIgTXQ9UWUucmVhZCgpO2lmKE10PT09Tnx8KHl0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihRZSxNdCkpPT09SylicmVhaztBcnJheS5p''@;'; put 'put ''c0FycmF5KHl0KT91bi5wdXNoLmFwcGx5KHVuLHl0KTp1bi5wdXNoKHl0KX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtmb3IoOyh5dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoUWUsUWUucmVhZCgpKSkhPT1LOylBcnJheS5pc0FycmF5KHl0KT91bi5wdXNoLmFwcGx5KHVuLHl0KTp1bi5wdXNo''@;'; put 'put ''KHl0KTt0aGlzLl9lbmNvZGVyPW51bGx9cmV0dXJuIG5ldyBVaW50OEFycmF5KHVuKX0saWVbIlVURi04Il09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgRShBZSl9LGxlWyJVVEYtOCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGooQWUpfSwiZW5jb2RpbmctaW5kZXhlcyJpbiBJJiZKLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oQWUpeyJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIj09PUFlLmhlYWRpbmcmJkFlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKF90KXt2YXIgbnQ9X3QubmFtZSxRZT1UZShudC50b0xvd2VyQ2FzZSgpKTtsZVtudF09ZnVuY3Rpb24odW4pe3JldHVybiBu''@;'; put 'put ''ZXcgbShRZSx1bil9LGllW250XT1mdW5jdGlvbih1bil7cmV0dXJuIG5ldyBBKFFlLHVuKX19KX0pLGxlLkdCSz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBhZShBZSl9LGllLkdCSz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB0ZShBZSwhMCl9LGllLmdiMTgwMzA9ZnVuY3Rpb24oQWUpe3Jl''@;'; put 'put ''dHVybiBuZXcgdGUoQWUpfSxsZS5nYjE4MDMwPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGFlKEFlKX0saWUuQmlnNT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB3ZShBZSl9LGxlLkJpZzU9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgc2UoQWUpfSxpZVsiRVVDLUpQIl09ZnVuY3Rpb24oQWUp''@;'; put 'put ''e3JldHVybiBuZXcgSmUoQWUpfSxsZVsiRVVDLUpQIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgVWUoQWUpfSxpZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB4ZShBZSl9LGxlWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IG90KEFlKX0s''@;'; put 'put ''aWUuU2hpZnRfSklTPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IFhlKEFlKX0sbGUuU2hpZnRfSklTPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHZlKEFlKX0saWVbIkVVQy1LUiJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IERlKEFlKX0sbGVbIkVVQy1LUiJdPWZ1bmN0aW9uKEFlKXtyZXR1''@;'; put 'put ''cm4gbmV3IHplKEFlKX0saWVbIlVURi0xNkJFIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgSWUoITAsQWUpfSxsZVsiVVRGLTE2QkUiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBPZSghMCxBZSl9LGllWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEllKCExLEFlKX0s''@;'; put 'put ''bGVbIlVURi0xNkxFIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgT2UoITEsQWUpfSxpZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBrZShBZSl9LGxlWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IFZlKEFlKX0sSS5UZXh0RW5j''@;'; put 'put ''b2Rlcnx8KEkuVGV4dEVuY29kZXI9SCksSS5UZXh0RGVjb2Rlcnx8KEkuVGV4dERlY29kZXI9VCksdWUuZXhwb3J0cyYmKHVlLmV4cG9ydHM9e1RleHRFbmNvZGVyOkkuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6SS5UZXh0RGVjb2RlcixFbmNvZGluZ0luZGV4ZXM6SVsiZW5jb2RpbmctaW5k''@;'; put 'put ''ZXhlcyJdfSl9KHRoaXN8fHt9KX0sMzM5ODp1ZT0+e2Z1bmN0aW9uIHkoSSl7dHJ5e2lmKCFnbG9iYWwubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBfPWdsb2JhbC5sb2NhbFN0b3JhZ2VbSV07cmV0dXJuIG51bGwhPV8mJiJ0cnVlIj09PVN0cmluZyhfKS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gWChJLF8pe2lmKHkoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gSTt2YXIgZz0hMTtyZXR1cm4gZnVuY3Rpb24gQigpe2lmKCFnKXtpZih5KCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKF8pO3koInRyYWNlRGVwcmVjYXRp''@;'; put 'put ''b24iKT9jb25zb2xlLnRyYWNlKF8pOmNvbnNvbGUud2FybihfKSxnPSEwfXJldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwxMjk1NDoodWUsWCx5KT0+eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1nLEkuZXhwb3J0cy5pc19odHRwX3VyaT1CLEku''@;'; put 'put ''ZXhwb3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMuaXNfd2ViX3VyaT1QLEkuZXhwb3J0cy5pc1VyaT1nLEkuZXhwb3J0cy5pc0h0dHBVcmk9QixJLmV4cG9ydHMuaXNIdHRwc1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8o''@;'; put 'put ''PzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBnKEYpe2lmKEYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVte''@;'; put 'put ''MC05YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChGKSl7dmFyIE8sTixMLEssVSx6PSIiLFc9IiI7aWYoTj0oTz1fKEYpKVsyXSxMPU9bM10sSz1PWzRdLFU9T1s1XSwoej1PWzFdKSYmei5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0''@;'; put 'put ''aCl7aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChMKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFcrPXorIjoiLE4mJk4ubGVuZ3RoJiYoVys9Ii8vIitOKSxX''@;'; put 'put ''Kz1MLEsmJksubGVuZ3RoJiYoVys9Ij8iK0spLFUmJlUubGVuZ3RoJiYoVys9IiMiK1UpLFd9fX1mdW5jdGlvbiBCKEYsTyl7aWYoZyhGKSl7dmFyIHosSyxXLFksTj0iIixMPSIiLFU9IiIscT0iIjtpZihMPSh6PV8oRikpWzJdLEs9elszXSxXPXpbNF0sWT16WzVdLE49elsxXSl7aWYoTyl7''@;'; put 'put ''aWYoImh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykkLy50ZXN0KEwpJiYoVT1MLm1hdGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLHErPU4rIjoiLHEr''@;'; put 'put ''PSIvLyIrTCxVJiYocSs9VSkscSs9SyxXJiZXLmxlbmd0aCYmKHErPSI/IitXKSxZJiZZLmxlbmd0aCYmKHErPSIjIitZKSxxfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gQihGLCEwKX1mdW5jdGlvbiBQKEYpe3JldHVybiBCKEYpfHx3KEYpfX0odWU9eS5ubWQodWUpKX0sODY2MToodWUsWCx5''@;'; put 'put ''KT0+e3VlLmV4cG9ydHM9eSg4NjYxKX0sMzUzNTg6KHVlLFgseSk9Pnt2YXIgST17Ii4vYWYiOjExNTQ0LCIuL2FmLmpzIjoxMTU0NCwiLi9hciI6MzMxMDgsIi4vYXItZHoiOjUyMTU1LCIuL2FyLWR6LmpzIjo1MjE1NSwiLi9hci1rdyI6NTM1ODMsIi4vYXIta3cuanMiOjUzNTgzLCIuL2Fy''@;'; put 'put ''LWx5Ijo0MTYzOCwiLi9hci1seS5qcyI6NDE2MzgsIi4vYXItbWEiOjg3ODIzLCIuL2FyLW1hLmpzIjo4NzgyMywiLi9hci1wcyI6NzcxMiwiLi9hci1wcy5qcyI6NzcxMiwiLi9hci1zYSI6NzgyNjEsIi4vYXItc2EuanMiOjc4MjYxLCIuL2FyLXRuIjo1NjcwMywiLi9hci10bi5qcyI6NTY3''@;'; put 'put ''MDMsIi4vYXIuanMiOjMzMTA4LCIuL2F6Ijo0NjUwOCwiLi9hei5qcyI6NDY1MDgsIi4vYmUiOjE2NzY2LCIuL2JlLmpzIjoxNjc2NiwiLi9iZyI6Mjg1NjQsIi4vYmcuanMiOjI4NTY0LCIuL2JtIjo5NzQ2MiwiLi9ibS5qcyI6OTc0NjIsIi4vYm4iOjE3MTA3LCIuL2JuLWJkIjo0MzQzOCwi''@;'; put 'put ''Li9ibi1iZC5qcyI6NDM0MzgsIi4vYm4uanMiOjE3MTA3LCIuL2JvIjo5MDA0LCIuL2JvLmpzIjo5MDA0LCIuL2JyIjo1MDkyNywiLi9ici5qcyI6NTA5MjcsIi4vYnMiOjg3NzY4LCIuL2JzLmpzIjo4Nzc2OCwiLi9jYSI6NTYyOTEsIi4vY2EuanMiOjU2MjkxLCIuL2NzIjo4NTMwMSwiLi9j''@;'; put 'put ''cy5qcyI6ODUzMDEsIi4vY3YiOjY2NjY2LCIuL2N2LmpzIjo2NjY2NiwiLi9jeSI6NTUxNjMsIi4vY3kuanMiOjU1MTYzLCIuL2RhIjo4NzM2MCwiLi9kYS5qcyI6ODczNjAsIi4vZGUiOjQ1OTMyLCIuL2RlLWF0Ijo0MzI0OCwiLi9kZS1hdC5qcyI6NDMyNDgsIi4vZGUtY2giOjgzMjIyLCIu''@;'; put 'put ''L2RlLWNoLmpzIjo4MzIyMiwiLi9kZS5qcyI6NDU5MzIsIi4vZHYiOjY0MDUsIi4vZHYuanMiOjY0MDUsIi4vZWwiOjYwNzE4LCIuL2VsLmpzIjo2MDcxOCwiLi9lbi1hdSI6MzYzMTksIi4vZW4tYXUuanMiOjM2MzE5LCIuL2VuLWNhIjo4MDU5NywiLi9lbi1jYS5qcyI6ODA1OTcsIi4vZW4t''@;'; put 'put ''Z2IiOjUxODAwLCIuL2VuLWdiLmpzIjo1MTgwMCwiLi9lbi1pZSI6ODA3LCIuL2VuLWllLmpzIjo4MDcsIi4vZW4taWwiOjk1OTYwLCIuL2VuLWlsLmpzIjo5NTk2MCwiLi9lbi1pbiI6ODQ0MTgsIi4vZW4taW4uanMiOjg0NDE4LCIuL2VuLW56Ijo0Njg2NSwiLi9lbi1uei5qcyI6NDY4NjUs''@;'; put 'put ''Ii4vZW4tc2ciOjMyNjQ3LCIuL2VuLXNnLmpzIjozMjY0NywiLi9lbyI6NjE5MzEsIi4vZW8uanMiOjYxOTMxLCIuL2VzIjo0NjY3OSwiLi9lcy1kbyI6NDE4MDUsIi4vZXMtZG8uanMiOjQxODA1LCIuL2VzLW14Ijo4MzQ0NSwiLi9lcy1teC5qcyI6ODM0NDUsIi4vZXMtdXMiOjgxNTE2LCIu''@;'; put 'put ''L2VzLXVzLmpzIjo4MTUxNiwiLi9lcy5qcyI6NDY2NzksIi4vZXQiOjg4MTUwLCIuL2V0LmpzIjo4ODE1MCwiLi9ldSI6ODA3NTcsIi4vZXUuanMiOjgwNzU3LCIuL2ZhIjo2NTc0MiwiLi9mYS5qcyI6NjU3NDIsIi4vZmkiOjMzOTU4LCIuL2ZpLmpzIjozMzk1OCwiLi9maWwiOjQ2NzIwLCIu''@;'; put 'put ''L2ZpbC5qcyI6NDY3MjAsIi4vZm8iOjk4MzUyLCIuL2ZvLmpzIjo5ODM1MiwiLi9mciI6NDA1OSwiLi9mci1jYSI6NDIwOTYsIi4vZnItY2EuanMiOjQyMDk2LCIuL2ZyLWNoIjo5NTc1OSwiLi9mci1jaC5qcyI6OTU3NTksIi4vZnIuanMiOjQwNTksIi4vZnkiOjE1OTU4LCIuL2Z5LmpzIjox''@;'; put 'put ''NTk1OCwiLi9nYSI6OTQxNDMsIi4vZ2EuanMiOjk0MTQzLCIuL2dkIjo2NzAyOCwiLi9nZC5qcyI6NjcwMjgsIi4vZ2wiOjgwNDI4LCIuL2dsLmpzIjo4MDQyOCwiLi9nb20tZGV2YSI6NzY4NjEsIi4vZ29tLWRldmEuanMiOjc2ODYxLCIuL2dvbS1sYXRuIjo1NzcxOCwiLi9nb20tbGF0bi5q''@;'; put 'put ''cyI6NTc3MTgsIi4vZ3UiOjI2ODI3LCIuL2d1LmpzIjoyNjgyNywiLi9oZSI6MjE5MzYsIi4vaGUuanMiOjIxOTM2LCIuL2hpIjozMTMzMiwiLi9oaS5qcyI6MzEzMzIsIi4vaHIiOjkxOTU3LCIuL2hyLmpzIjo5MTk1NywiLi9odSI6NDg5MjgsIi4vaHUuanMiOjQ4OTI4LCIuL2h5LWFtIjo1''@;'; put 'put ''NjIxNSwiLi9oeS1hbS5qcyI6NTYyMTUsIi4vaWQiOjU4NiwiLi9pZC5qcyI6NTg2LCIuL2lzIjo5MDIxMSwiLi9pcy5qcyI6OTAyMTEsIi4vaXQiOjcwMTcwLCIuL2l0LWNoIjoyMjM0MCwiLi9pdC1jaC5qcyI6MjIzNDAsIi4vaXQuanMiOjcwMTcwLCIuL2phIjozOTc3MCwiLi9qYS5qcyI6''@;'; put 'put ''Mzk3NzAsIi4vanYiOjczODc1LCIuL2p2LmpzIjo3Mzg3NSwiLi9rYSI6Nzk0OTksIi4va2EuanMiOjc5NDk5LCIuL2trIjo5MzU3MywiLi9ray5qcyI6OTM1NzMsIi4va20iOjY4ODA3LCIuL2ttLmpzIjo2ODgwNywiLi9rbiI6NjUwODIsIi4va24uanMiOjY1MDgyLCIuL2tvIjoyMDEzNywi''@;'; put 'put ''Li9rby5qcyI6MjAxMzcsIi4va3UiOjcwMTExLCIuL2t1LWttciI6NjM3NDQsIi4va3Uta21yLmpzIjo2Mzc0NCwiLi9rdS5qcyI6NzAxMTEsIi4va3kiOjk5MTg3LCIuL2t5LmpzIjo5OTE4NywiLi9sYiI6MzU5NjksIi4vbGIuanMiOjM1OTY5LCIuL2xvIjozMzUyNiwiLi9sby5qcyI6MzM1''@;'; put 'put ''MjYsIi4vbHQiOjkwNDExLCIuL2x0LmpzIjo5MDQxMSwiLi9sdiI6MzI2MjEsIi4vbHYuanMiOjMyNjIxLCIuL21lIjo4NTg2OSwiLi9tZS5qcyI6ODU4NjksIi4vbWkiOjM1ODgxLCIuL21pLmpzIjozNTg4MSwiLi9tayI6OTIzOTEsIi4vbWsuanMiOjkyMzkxLCIuL21sIjoyMTEyNiwiLi9t''@;'; put 'put ''bC5qcyI6MjExMjYsIi4vbW4iOjQ0ODkyLCIuL21uLmpzIjo0NDg5MiwiLi9tciI6NTkwODAsIi4vbXIuanMiOjU5MDgwLCIuL21zIjo3MDM5OSwiLi9tcy1teSI6MjU5NTAsIi4vbXMtbXkuanMiOjI1OTUwLCIuL21zLmpzIjo3MDM5OSwiLi9tdCI6Nzk5MDIsIi4vbXQuanMiOjc5OTAyLCIu''@;'; put 'put ''L215Ijo3Mjk4NSwiLi9teS5qcyI6NzI5ODUsIi4vbmIiOjY3ODU5LCIuL25iLmpzIjo2Nzg1OSwiLi9uZSI6MTM2NDIsIi4vbmUuanMiOjEzNjQyLCIuL25sIjo2NTQ0MSwiLi9ubC1iZSI6OTk4NzUsIi4vbmwtYmUuanMiOjk5ODc1LCIuL25sLmpzIjo2NTQ0MSwiLi9ubiI6ODEzMTEsIi4v''@;'; put 'put ''bm4uanMiOjgxMzExLCIuL29jLWxuYyI6NzI1NjcsIi4vb2MtbG5jLmpzIjo3MjU2NywiLi9wYS1pbiI6NTY5NjIsIi4vcGEtaW4uanMiOjU2OTYyLCIuL3BsIjo2MTA2MywiLi9wbC5qcyI6NjEwNjMsIi4vcHQiOjc4NzE5LCIuL3B0LWJyIjo5NzQ3NiwiLi9wdC1ici5qcyI6OTc0NzYsIi4v''@;'; put 'put ''cHQuanMiOjc4NzE5LCIuL3JvIjo1MTAwNCwiLi9yby5qcyI6NTEwMDQsIi4vcnUiOjUxMzI2LCIuL3J1LmpzIjo1MTMyNiwiLi9zZCI6NzI2MDgsIi4vc2QuanMiOjcyNjA4LCIuL3NlIjoxMzkxMSwiLi9zZS5qcyI6MTM5MTEsIi4vc2kiOjI1MTQ3LCIuL3NpLmpzIjoyNTE0NywiLi9zayI6''@;'; put 'put ''MjM3NDEsIi4vc2suanMiOjIzNzQxLCIuL3NsIjo5M2UzLCIuL3NsLmpzIjo5M2UzLCIuL3NxIjo2MDQ1MSwiLi9zcS5qcyI6NjA0NTEsIi4vc3IiOjU1MDQ2LCIuL3NyLWN5cmwiOjQwOTA1LCIuL3NyLWN5cmwuanMiOjQwOTA1LCIuL3NyLmpzIjo1NTA0NiwiLi9zcyI6ODU3NjUsIi4vc3Mu''@;'; put 'put ''anMiOjg1NzY1LCIuL3N2Ijo5OTI5MCwiLi9zdi5qcyI6OTkyOTAsIi4vc3ciOjUzNDQ5LCIuL3N3LmpzIjo1MzQ0OSwiLi90YSI6NzI2ODgsIi4vdGEuanMiOjcyNjg4LCIuL3RlIjozMjA2MCwiLi90ZS5qcyI6MzIwNjAsIi4vdGV0Ijo5MzI5MCwiLi90ZXQuanMiOjkzMjkwLCIuL3RnIjo4''@;'; put 'put ''Mjk0LCIuL3RnLmpzIjo4Mjk0LCIuL3RoIjoxMjMxLCIuL3RoLmpzIjoxMjMxLCIuL3RrIjozNzQ2LCIuL3RrLmpzIjozNzQ2LCIuL3RsLXBoIjo0OTA0MCwiLi90bC1waC5qcyI6NDkwNDAsIi4vdGxoIjoxNzE4NywiLi90bGguanMiOjE3MTg3LCIuL3RyIjo2MDE1MywiLi90ci5qcyI6NjAx''@;'; put 'put ''NTMsIi4vdHpsIjo4ODUyMSwiLi90emwuanMiOjg4NTIxLCIuL3R6bSI6MTgwMTAsIi4vdHptLWxhdG4iOjIyMjM0LCIuL3R6bS1sYXRuLmpzIjoyMjIzNCwiLi90em0uanMiOjE4MDEwLCIuL3VnLWNuIjo2MzM0OSwiLi91Zy1jbi5qcyI6NjMzNDksIi4vdWsiOjY4NDc5LCIuL3VrLmpzIjo2''@;'; put 'put ''ODQ3OSwiLi91ciI6NDMwMjQsIi4vdXIuanMiOjQzMDI0LCIuL3V6IjoxOTgwMCwiLi91ei1sYXRuIjo3MjM3NiwiLi91ei1sYXRuLmpzIjo3MjM3NiwiLi91ei5qcyI6MTk4MDAsIi4vdmkiOjg5MzY2LCIuL3ZpLmpzIjo4OTM2NiwiLi94LXBzZXVkbyI6Njk3MDIsIi4veC1wc2V1ZG8uanMi''@;'; put 'put ''OjY5NzAyLCIuL3lvIjo3MjY1NSwiLi95by5qcyI6NzI2NTUsIi4vemgtY24iOjU3NSwiLi96aC1jbi5qcyI6NTc1LCIuL3poLWhrIjoxODM1MSwiLi96aC1oay5qcyI6MTgzNTEsIi4vemgtbW8iOjUxNjI2LCIuL3poLW1vLmpzIjo1MTYyNiwiLi96aC10dyI6ODg4NywiLi96aC10dy5qcyI6''@;'; put 'put ''ODg4N307ZnVuY3Rpb24gXyhCKXt2YXIgdz1nKEIpO3JldHVybiB5KHcpfWZ1bmN0aW9uIGcoQil7aWYoIXkubyhJLEIpKXt2YXIgdz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitCKyInIik7dGhyb3cgdy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix3fXJldHVybiBJW0JdfV8u''@;'; put 'put ''a2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhJKX0sXy5yZXNvbHZlPWcsdWUuZXhwb3J0cz1fLF8uaWQ9MzUzNTh9LDgzMzM3OigpPT57fSw3ODk4MjooKT0+e30sNDc3OTA6KCk9Pnt9LDc3OTY1OigpPT57fSw2NjA4OTooKT0+e30sNzkzNjg6KCk9Pnt9LDE1NzkxOigpPT57''@;'; put 'put ''fSw2MTA5MzooKT0+e30sNjQ2ODg6KCk9Pnt9LDUxMDY5OigpPT57fSwxNTM0MDooKT0+e30sNzk4Mzg6KCk9Pnt9LDYzNzc5OigpPT57fSw3NzE5OTooKT0+e30sMjUxNzI6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uIFgoeSxJKXt0aGlzLnY9eSx0aGlzLms9SX0sdWUuZXhwb3J0cy5fX2Vz''@;'; put 'put ''TW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSw5MzUxMzoodWUsWCx5KT0+e3ZhciBJPXkoMjUxNzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24gXyhnKXt2YXIgQj17fSx3PSExO2Z1bmN0aW9uIFAoRixPKXtyZXR1cm4gdz0hMCxPPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHop''@;'; put 'put ''e3ooZ1tGXShPKSl9KSx7ZG9uZTohMSx2YWx1ZTpuZXcgSShPLDEpfX1yZXR1cm4gQlt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLml0ZXJhdG9yfHwiQEBpdGVyYXRvciJdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEIubmV4dD1mdW5jdGlvbihGKXtyZXR1cm4gdz8odz0hMSxGKTpQKCJu''@;'; put 'put ''ZXh0IixGKX0sImZ1bmN0aW9uIj09dHlwZW9mIGcudGhyb3cmJihCLnRocm93PWZ1bmN0aW9uKEYpe2lmKHcpdGhyb3cgdz0hMSxGO3JldHVybiBQKCJ0aHJvdyIsRil9KSwiZnVuY3Rpb24iPT10eXBlb2YgZy5yZXR1cm4mJihCLnJldHVybj1mdW5jdGlvbihGKXtyZXR1cm4gdz8odz0hMSxG''@;'; put 'put ''KTpQKCJyZXR1cm4iLEYpfSksQn0sdWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSw4Mjg4MTp1ZT0+e2Z1bmN0aW9uIHkoSSl7ZnVuY3Rpb24gXyhnKXtpZihPYmplY3QoZykhPT1nKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVy''@;'; put 'put ''cm9yKGcrIiBpcyBub3QgYW4gb2JqZWN0LiIpKTt2YXIgQj1nLmRvbmU7cmV0dXJuIFByb21pc2UucmVzb2x2ZShnLnZhbHVlKS50aGVuKGZ1bmN0aW9uKHcpe3JldHVybnt2YWx1ZTp3LGRvbmU6Qn19KX1yZXR1cm4oeT1mdW5jdGlvbihCKXt0aGlzLnM9Qix0aGlzLm49Qi5uZXh0fSkucHJv''@;'; put 'put ''dG90eXBlPXtzOm51bGwsbjpudWxsLG5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLm4uYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSxyZXR1cm46ZnVuY3Rpb24oQil7dmFyIHc9dGhpcy5zLnJldHVybjtyZXR1cm4gdm9pZCAwPT09dz9Qcm9taXNlLnJlc29sdmUoe3ZhbHVlOkIsZG9u''@;'; put 'put ''ZTohMH0pOl8ody5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9LHRocm93OmZ1bmN0aW9uKEIpe3ZhciB3PXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PXc/UHJvbWlzZS5yZWplY3QoQik6Xyh3LmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX19LG5ldyB5KEkpfXVlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24gWChJKXt2YXIgXyxnLEIsdz0yO2Zvcih0eXBlb2YgU3ltYm9sPCJ1IiYmKGc9U3ltYm9sLmFzeW5jSXRlcmF0b3IsQj1TeW1ib2wuaXRlcmF0b3IpO3ctLTspe2lmKGcmJm51bGwhPShfPUlbZ10pKXJldHVybiBfLmNhbGwoSSk7aWYoQiYmbnVsbCE9KF89SVtCXSkpcmV0dXJuIG5l''@;'; put 'put ''dyB5KF8uY2FsbChJKSk7Zz0iQEBhc3luY0l0ZXJhdG9yIixCPSJAQGl0ZXJhdG9yIn10aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgaXMgbm90IGFzeW5jIGl0ZXJhYmxlIil9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sMjkyOTM6''@;'; put 'put ''dWU9PntmdW5jdGlvbiBYKEksXyxnLEIsdyxQLEYpe3RyeXt2YXIgTz1JW1BdKEYpLHo9Ty52YWx1ZX1jYXRjaChOKXtyZXR1cm4gdm9pZCBnKE4pfU8uZG9uZT9fKHopOlByb21pc2UucmVzb2x2ZSh6KS50aGVuKEIsdyl9dWUuZXhwb3J0cz1mdW5jdGlvbiB5KEkpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBfPXRoaXMsZz1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEIsdyl7dmFyIFA9SS5hcHBseShfLGcpO2Z1bmN0aW9uIEYoeil7WChQLEIsdyxGLE8sIm5leHQiLHopfWZ1bmN0aW9uIE8oeil7WChQLEIsdyxGLE8sInRocm93Iix6KX1GKHZvaWQgMCl9KX19''@;'; put 'put ''LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sNTMzNDQ6KHVlLFgseSk9Pnt2YXIgST15KDI1MTcyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oZyl7cmV0dXJuIG5ldyBJKGcsMCl9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBv''@;'; put 'put ''cnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sNDI5NTg6KHVlLFgseSk9Pnt2YXIgST15KDI1MTcyKTtmdW5jdGlvbiBnKEIpe3ZhciB3LFA7ZnVuY3Rpb24gRih6LE4pe3RyeXt2YXIgTD1CW3pdKE4pLEs9TC52YWx1ZSxVPUsgaW5zdGFuY2VvZiBJO1Byb21pc2UucmVzb2x2ZShVP0sudjpLKS50''@;'; put 'put ''aGVuKGZ1bmN0aW9uKFcpe2lmKFUpe3ZhciBZPSJyZXR1cm4iPT09ej8icmV0dXJuIjoibmV4dCI7aWYoIUsua3x8Vy5kb25lKXJldHVybiBGKFksVyk7Vz1CW1ldKFcpLnZhbHVlfU8oTC5kb25lPyJyZXR1cm4iOiJub3JtYWwiLFcpfSxmdW5jdGlvbihXKXtGKCJ0aHJvdyIsVyl9KX1jYXRj''@;'; put 'put ''aChXKXtPKCJ0aHJvdyIsVyl9fWZ1bmN0aW9uIE8oeixOKXtzd2l0Y2goeil7Y2FzZSJyZXR1cm4iOncucmVzb2x2ZSh7dmFsdWU6Tixkb25lOiEwfSk7YnJlYWs7Y2FzZSJ0aHJvdyI6dy5yZWplY3QoTik7YnJlYWs7ZGVmYXVsdDp3LnJlc29sdmUoe3ZhbHVlOk4sZG9uZTohMX0pfSh3PXcu''@;'; put 'put ''bmV4dCk/Rih3LmtleSx3LmFyZyk6UD1udWxsfXRoaXMuX2ludm9rZT1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihMLEspe3ZhciBVPXtrZXk6eixhcmc6TixyZXNvbHZlOkwscmVqZWN0OkssbmV4dDpudWxsfTtQP1A9UC5uZXh0PVU6KHc9UD1VLEYoeixOKSl9''@;'; put 'put ''KX0sImZ1bmN0aW9uIiE9dHlwZW9mIEIucmV0dXJuJiYodGhpcy5yZXR1cm49dm9pZCAwKX1nLnByb3RvdHlwZVsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciJdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGcucHJvdG90''@;'; put 'put ''eXBlLm5leHQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsQil9LGcucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9pbnZva2UoInRocm93IixCKX0sZy5wcm90b3R5cGUucmV0dXJuPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9pbnZva2Uo''@;'; put 'put ''InJldHVybiIsQil9LHVlLmV4cG9ydHM9ZnVuY3Rpb24gXyhCKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcoQi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0sdWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSwzMTQ4MzoodWUsWCx5''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDE5MTUwKSxfPXkoNzUyMTIpLGc9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7aWYoSShCKSlyZXR1cm4gQjt0aHJvdyBuZXcgZyhfKEIpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LDI3Njc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEk9eSg0MzQwNiksXz1TdHJpbmcsZz1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtpZihJKEIpKXJldHVybiBCO3Rocm93IG5ldyBnKCJDYW4ndCBzZXQgIitfKEIpKyIgYXMgYSBwcm90b3R5cGUiKX19LDM3NzMxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXko''@;'; put 'put ''OTc1NDEpLmhhczt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiBJKF8pLF99fSw3MDgyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4MDEyKSxfPXkoOTc5NTEpLGc9eSg0NDY0OCkuZixCPUkoInVuc2NvcGFibGVzIiksdz1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT09''@;'; put 'put ''d1tCXSYmZyh3LEIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpfKG51bGwpfSksdWUuZXhwb3J0cz1mdW5jdGlvbihQKXt3W0JdW1BdPSEwfX0sNjMzMzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjgpLF89VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtpZihJ''@;'; put 'put ''KEIsZykpcmV0dXJuIGc7dGhyb3cgbmV3IF8oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwxMTA4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzI2MzMpLF89U3RyaW5nLGc9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7aWYoSShCKSlyZXR1cm4gQjt0aHJvdyBu''@;'; put 'put ''ZXcgZyhfKEIpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0sMzg4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDcxNzEpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2Zvcih2YXIgdz0wLFA9YXJndW1lbnRzLmxlbmd0aD4yP0I6SShnKSxGPW5ldyBfKFApO1A+dzspRlt3XT1n''@;'; put 'put ''W3crK107cmV0dXJuIEZ9fSw3NDgyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzMTYyKSxfPXkoNzQ4NSksZz15KDcxNzEpLEI9ZnVuY3Rpb24odyl7cmV0dXJuIGZ1bmN0aW9uKFAsRixPKXt2YXIgej1JKFApLE49Zyh6KTtpZigwPT09TilyZXR1cm4hdyYmLTE7dmFyIEss''@;'; put 'put ''TD1fKE8sTik7aWYodyYmRiE9Ril7Zm9yKDtOPkw7KWlmKChLPXpbTCsrXSkhPUspcmV0dXJuITB9ZWxzZSBmb3IoO04+TDtMKyspaWYoKHd8fEwgaW4geikmJnpbTF09PT1GKXJldHVybiB3fHxMfHwwO3JldHVybiF3JiYtMX19O3VlLmV4cG9ydHM9e2luY2x1ZGVzOkIoITApLGluZGV4T2Y6''@;'; put 'put ''QighMSl9fSwzOTIwNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNjcyNzcpLGc9VHlwZUVycm9yLEI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix3PUkmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChQKXtyZXR1cm4gUCBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7dWUuZXhwb3J0cz13P2Z1bmN0aW9uKFAsRil7aWYoXyhQKSYmIUIoUCwibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbmV3IGco''@;'; put 'put ''IkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1cm4gUC5sZW5ndGg9Rn06ZnVuY3Rpb24oUCxGKXtyZXR1cm4gUC5sZW5ndGg9Rn19LDc3NjM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpO3VlLmV4cG9ydHM9SShbXS5zbGljZSl9LDQyOTI2Oih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTEwOCksXz15KDY2NTQyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQix3LFApe3RyeXtyZXR1cm4gUD9CKEkodylbMF0sd1sxXSk6Qih3KX1jYXRjaChGKXtfKGcsInRocm93IixGKX19fSw4NjY3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDU4NjA3KSxfPUkoe30udG9TdHJpbmcpLGc9SSgiIi5zbGljZSk7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm4gZyhfKEIpLDgsLTEpfX0sNzE4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzODU5NSksXz15KDE5MTUwKSxnPXkoODY2NzUpLHc9eSg1ODAx''@;'; put 'put ''MikoInRvU3RyaW5nVGFnIiksUD1PYmplY3QsRj0iQXJndW1lbnRzIj09PWcoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt1ZS5leHBvcnRzPUk/ZzpmdW5jdGlvbih6KXt2YXIgTixMLEs7cmV0dXJuIHZvaWQgMD09PXo/IlVuZGVmaW5lZCI6bnVsbD09PXo/Ik51bGwiOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YoTD1mdW5jdGlvbih6LE4pe3RyeXtyZXR1cm4geltOXX1jYXRjaHt9fShOPVAoeiksdykpP0w6Rj9nKE4pOiJPYmplY3QiPT09KEs9ZyhOKSkmJl8oTi5jYWxsZWUpPyJBcmd1bWVudHMiOkt9fSw0ODYzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM4ZTMp''@;'; put 'put ''LF89eSg4ODA3OCksZz15KDU0MTIyKSxCPXkoNDQ2NDgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQLEYpe2Zvcih2YXIgTz1fKFApLHo9Qi5mLE49Zy5mLEw9MDtMPE8ubGVuZ3RoO0wrKyl7dmFyIEs9T1tMXTshSSh3LEspJiYoIUZ8fCFJKEYsSykpJiZ6KHcsSyxOKFAsSykpfX19LDgyODM0''@;'; put 'put ''Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpO3VlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXtmdW5jdGlvbiBfKCl7fXJldHVybiBfLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgXykhPT1fLnByb3RvdHlwZX0pfSw1ODk3''@;'; put 'put ''ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKFgseSl7cmV0dXJue3ZhbHVlOlgsZG9uZTp5fX19LDM2Njc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg0NDY0OCksZz15KDc3NzczKTt1ZS5leHBvcnRzPUk/ZnVuY3Rpb24oQix3LFAp''@;'; put 'put ''e3JldHVybiBfLmYoQix3LGcoMSxQKSl9OmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQlt3XT1QLEJ9fSw3Nzc3Mzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKFgseSl7cmV0dXJue2VudW1lcmFibGU6ISgxJlgpLGNvbmZpZ3VyYWJsZTohKDImWCksd3JpdGFibGU6ISg0''@;'; put 'put ''JlgpLHZhbHVlOnl9fX0sNTg3OTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDQ0NjQ4KSxnPXkoNzc3NzMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3LFApe0k/Xy5mKEIsdyxnKDAsUCkpOkJbd109UH19LDQ0MDM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoMTY5ODApLF89eSg0NDY0OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIsdyl7cmV0dXJuIHcuZ2V0JiZJKHcuZ2V0LEIse2dldHRlcjohMH0pLHcuc2V0JiZJKHcuc2V0LEIse3NldHRlcjohMH0pLF8uZihnLEIsdyl9fSwzMTA4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDE5MTUwKSxfPXkoNDQ2NDgpLGc9eSgxNjk4MCksQj15KDQ4MTA0KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGLE8pe098fChPPXt9KTt2YXIgej1PLmVudW1lcmFibGUsTj12b2lkIDAhPT1PLm5hbWU/Ty5uYW1lOlA7aWYoSShGKSYmZyhGLE4sTyksTy5nbG9iYWwpej93W1Bd''@;'; put 'put ''PUY6QihQLEYpO2Vsc2V7dHJ5e08udW5zYWZlP3dbUF0mJih6PSEwKTpkZWxldGUgd1tQXX1jYXRjaHt9ej93W1BdPUY6Xy5mKHcsUCx7dmFsdWU6RixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohTy5ub25Db25maWd1cmFibGUsd3JpdGFibGU6IU8ubm9uV3JpdGFibGV9KX1yZXR1cm4g''@;'; put 'put ''d319LDE0NzUwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzEwODMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2Zvcih2YXIgdyBpbiBnKUkoXyx3LGdbd10sQik7cmV0dXJuIF99fSw0ODEwNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPU9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7dHJ5e18oSSxnLHt2YWx1ZTpCLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoe0lbZ109Qn1yZXR1cm4gQn19LDQzMTk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzUyMTIpLF89''@;'; put 'put ''VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtpZighZGVsZXRlIGdbQl0pdGhyb3cgbmV3IF8oIkNhbm5vdCBkZWxldGUgcHJvcGVydHkgIitJKEIpKyIgb2YgIitJKGcpKX19LDQ2Mzg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpO3VlLmV4cG9ydHM9''@;'; put 'put ''IUkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pfSw1NTk4ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPXkoMzI2MzMpLGc9SS5kb2N1bWVudCxCPV8oZykmJl8o''@;'; put 'put ''Zy5jcmVhdGVFbGVtZW50KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBCP2cuY3JlYXRlRWxlbWVudCh3KTp7fX19LDMzMTY6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7aWYoST45MDA3MTk5MjU0NzQwOTkxKXRocm93IFgo''@;'; put 'put ''Ik1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiBJfX0sNTg1NDA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmlu''@;'; put 'put ''ZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSw0NDEzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIzNTgpO3VlLmV4cG9ydHM9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QoSSl9LDIxNTEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXko''@;'; put 'put ''NDcwOTIpO3VlLmV4cG9ydHM9Ik5PREUiPT09SX0sMjM1ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDMzOTYzKS5uYXZpZ2F0b3IsZz1fJiZfLnVzZXJBZ2VudDt1ZS5leHBvcnRzPWc/U3RyaW5nKGcpOiIifSw0NDA2NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRixP''@;'; put 'put ''LEk9eSgzMzk2MyksXz15KDIzNTgpLGc9SS5wcm9jZXNzLEI9SS5EZW5vLHc9ZyYmZy52ZXJzaW9uc3x8QiYmQi52ZXJzaW9uLFA9dyYmdy52ODtQJiYoTz0oRj1QLnNwbGl0KCIuIikpWzBdPjAmJkZbMF08ND8xOisoRlswXStGWzFdKSksIU8mJl8mJighKEY9Xy5tYXRjaCgvRWRnZVwvKFxk''@;'; put 'put ''KykvKSl8fEZbMV0+PTc0KSYmKEY9Xy5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKE89K0ZbMV0pLHVlLmV4cG9ydHM9T30sNDcwOTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDIzNTgpLGc9eSg4NjY3NSksQj1mdW5jdGlvbih3KXtyZXR1cm4gXy5zbGlj''@;'; put 'put ''ZSgwLHcubGVuZ3RoKT09PXd9O3VlLmV4cG9ydHM9QigiQnVuLyIpPyJCVU4iOkIoIkNsb3VkZmxhcmUtV29ya2VycyIpPyJDTE9VREZMQVJFIjpCKCJEZW5vLyIpPyJERU5PIjpCKCJOb2RlLmpzLyIpPyJOT0RFIjpJLkJ1biYmInN0cmluZyI9PXR5cGVvZiBCdW4udmVyc2lvbj8iQlVOIjpJ''@;'; put 'put ''LkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9uPyJERU5PIjoicHJvY2VzcyI9PT1nKEkucHJvY2Vzcyk/Ik5PREUiOkkud2luZG93JiZJLmRvY3VtZW50PyJCUk9XU0VSIjoiUkVTVCJ9LDk4ODU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89RXJy''@;'; put 'put ''b3IsZz1JKCIiLnJlcGxhY2UpLEI9U3RyaW5nKG5ldyBfKCJ6eGNhc2QiKS5zdGFjayksdz0vXG5ccyphdCBbXjpdKjpbXlxuXSovLFA9dy50ZXN0KEIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXtpZihQJiYic3RyaW5nIj09dHlwZW9mIEYmJiFfLnByZXBhcmVTdGFja1RyYWNlKWZvcig7''@;'; put 'put ''Ty0tOylGPWcoRix3LCIiKTtyZXR1cm4gRn19LDIyMzA0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzY2NzgpLF89eSg5ODg1NCksZz15KDc0OTY0KSxCPUVycm9yLmNhcHR1cmVTdGFja1RyYWNlO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQLEYsTyl7ZyYmKEI/Qih3LFApOkko''@;'; put 'put ''dywic3RhY2siLF8oRixPKSkpfX0sNzQ5NjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTU5MiksXz15KDc3NzczKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7dmFyIGc9bmV3IEVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZyl8fChPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoZywic3RhY2siLF8oMSw3KSksNyE9PWcuc3RhY2spfSl9LDI4MzY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89eSg1NDEyMikuZixnPXkoMzY2NzgpLEI9eSgzMTA4Myksdz15KDQ4MTA0KSxQPXkoNDg2MzkpLEY9eSgxNjM2Myk7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihPLHope3ZhciBXLFkscSxlZSxKLE49Ty50YXJnZXQsTD1PLmdsb2JhbCxLPU8uc3RhdDtpZihXPUw/STpLP0lbTl18fHcoTix7fSk6SVtOXSYmSVtOXS5wcm90b3R5cGUpZm9yKFkgaW4geil7aWYoZWU9eltZXSxxPU8uZG9udENhbGxHZXRTZXQ/KEo9XyhXLFkpKSYmSi52YWx1ZTpX''@;'; put 'put ''W1ldLCFGKEw/WTpOKyhLPyIuIjoiIyIpK1ksTy5mb3JjZWQpJiZ2b2lkIDAhPT1xKXtpZih0eXBlb2YgZWU9PXR5cGVvZiBxKWNvbnRpbnVlO1AoZWUscSl9KE8uc2hhbXx8cSYmcS5zaGFtKSYmZyhlZSwic2hhbSIsITApLEIoVyxZLGVlLE8pfX19LDU1NTkyOnVlPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3VlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dHJ5e3JldHVybiEhWCgpfWNhdGNoe3JldHVybiEwfX19LDQwMjIwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzUxNTcpLF89RnVuY3Rpb24ucHJvdG90eXBlLGc9Xy5hcHBseSxCPV8uY2FsbDt1ZS5leHBvcnRzPSJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KEk/Qi5iaW5kKGcpOmZ1bmN0aW9uKCl7cmV0dXJuIEIuYXBwbHkoZyxhcmd1bWVudHMpfSl9LDc4ODExOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzYyOSksXz15KDMxNDgzKSxnPXkoNzUxNTcpLEI9SShJLmJpbmQpO3Vl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4gXyh3KSx2b2lkIDA9PT1QP3c6Zz9CKHcsUCk6ZnVuY3Rpb24oKXtyZXR1cm4gdy5hcHBseShQLGFyZ3VtZW50cyl9fX0sNzUxNTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTU5Mik7dWUuZXhwb3J0cz0hSShmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBfPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIF98fF8uaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSl9LDQ2OTI2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzUxNTcpLF89RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dWUu''@;'; put 'put ''ZXhwb3J0cz1JP18uYmluZChfKTpmdW5jdGlvbigpe3JldHVybiBfLmFwcGx5KF8sYXJndW1lbnRzKX19LDg5OTgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSgzOGUzKSxnPUZ1bmN0aW9uLnByb3RvdHlwZSxCPUkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURl''@;'; put 'put ''c2NyaXB0b3Isdz1fKGcsIm5hbWUiKSxQPXcmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsRj13JiYoIUl8fEkmJkIoZywibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dWUuZXhwb3J0cz17RVhJU1RTOncsUFJPUEVSOlAsQ09ORklHVVJBQkxFOkZ9fSw2OTIyNzoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMzE0ODMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCLHcpe3RyeXtyZXR1cm4gSShfKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZyxCKVt3XSkpfWNhdGNoe319fSwzNjI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoODY2NzUpLF89eSg1ODYwNyk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtpZigiRnVuY3Rpb24iPT09SShnKSlyZXR1cm4gXyhnKX19LDU4NjA3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzUxNTcpLF89RnVuY3Rpb24ucHJvdG90eXBlLGc9Xy5jYWxsLEI9SSYmXy5iaW5k''@;'; put 'put ''LmJpbmQoZyxnKTt1ZS5leHBvcnRzPUk/QjpmdW5jdGlvbih3KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZy5hcHBseSh3LGFyZ3VtZW50cyl9fX0sNjY1MDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcpe3ZhciBCPUlb''@;'; put 'put ''X10sdz1CJiZCLnByb3RvdHlwZTtyZXR1cm4gdyYmd1tnXX19LDEyMjAyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89eSgxOTE1MCk7dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rpb24oQil7cmV0dXJuIF8o''@;'; put 'put ''Qik/Qjp2b2lkIDB9KElbQl0pOklbQl0mJklbQl1bd119fSw3NTQyNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3JldHVybntpdGVyYXRvcjpYLG5leHQ6WC5uZXh0LGRvbmU6ITF9fX0sNjM2Mjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0Njky''@;'; put 'put ''NiksXz15KDExMDgpLGc9eSg3NTQyNCksQj15KDM2OTMyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7KCFQfHwic3RyaW5nIiE9dHlwZW9mIHcpJiZfKHcpO3ZhciBGPUIodyk7cmV0dXJuIGcoXyh2b2lkIDAhPT1GP0koRix3KTp3KSl9fSwzNjkzMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDcxODI0KSxfPXkoODYxMTUpLGc9eSg5NDQ2OCksQj15KDE5MjU4KSxQPXkoNTgwMTIpKCJpdGVyYXRvciIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7aWYoIWcoRikpcmV0dXJuIF8oRixQKXx8XyhGLCJAQGl0ZXJhdG9yIil8fEJbSShGKV19fSw0MzU4NDoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMzE0ODMpLGc9eSgxMTA4KSxCPXkoNzUyMTIpLHc9eSgzNjkzMiksUD1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg8Mj93KEYpOk87aWYoXyh6KSlyZXR1cm4gZyhJKHosRikp''@;'; put 'put ''O3Rocm93IG5ldyBQKEIoRikrIiBpcyBub3QgaXRlcmFibGUiKX19LDg0NTI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSg2NzI3NyksZz15KDE5MTUwKSxCPXkoODY2NzUpLHc9eSg2ODMzMiksUD1JKFtdLnB1c2gpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7''@;'; put 'put ''aWYoZyhGKSlyZXR1cm4gRjtpZihfKEYpKXtmb3IodmFyIE89Ri5sZW5ndGgsej1bXSxOPTA7TjxPO04rKyl7dmFyIEw9RltOXTsic3RyaW5nIj09dHlwZW9mIEw/UCh6LEwpOigibnVtYmVyIj09dHlwZW9mIEx8fCJOdW1iZXIiPT09QihMKXx8IlN0cmluZyI9PT1CKEwpKSYmUCh6LHcoTCkp''@;'; put 'put ''fXZhciBLPXoubGVuZ3RoLFU9ITA7cmV0dXJuIGZ1bmN0aW9uKFcsWSl7aWYoVSlyZXR1cm4gVT0hMSxZO2lmKF8odGhpcykpcmV0dXJuIFk7Zm9yKHZhciBxPTA7cTxLO3ErKylpZih6W3FdPT09VylyZXR1cm4gWX19fX0sODYxMTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgz''@;'; put 'put ''MTQ4MyksXz15KDk0NDY4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7dmFyIHc9Z1tCXTtyZXR1cm4gXyh3KT92b2lkIDA6SSh3KX19LDQzNjMyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzE0ODMpLF89eSgxMTA4KSxnPXkoNDY5MjYpLEI9eSg2NDU1MCksdz15KDc1NDI0''@;'; put 'put ''KSxQPSJJbnZhbGlkIHNpemUiLEY9UmFuZ2VFcnJvcixPPVR5cGVFcnJvcix6PU1hdGgubWF4LE49ZnVuY3Rpb24oTCxLKXt0aGlzLnNldD1MLHRoaXMuc2l6ZT16KEssMCksdGhpcy5oYXM9SShMLmhhcyksdGhpcy5rZXlzPUkoTC5rZXlzKX07Ti5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHcoXyhnKHRoaXMua2V5cyx0aGlzLnNldCkpKX0saW5jbHVkZXM6ZnVuY3Rpb24oTCl7cmV0dXJuIGcodGhpcy5oYXMsdGhpcy5zZXQsTCl9fSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe18oTCk7dmFyIEs9K0wuc2l6ZTtpZihLIT1LKXRocm93IG5ldyBPKFApO3Zh''@;'; put 'put ''ciBVPUIoSyk7aWYoVTwwKXRocm93IG5ldyBGKFApO3JldHVybiBuZXcgTihMLFUpfX0sOTYzMzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDMxOTUwKSxnPU1hdGguZmxvb3IsQj1JKCIiLmNoYXJBdCksdz1JKCIiLnJlcGxhY2UpLFA9SSgiIi5zbGljZSks''@;'; put 'put ''Rj0vXCQoWyQmJ2BdfFxkezEsMn18PFtePl0qPikvZyxPPS9cJChbJCYnYF18XGR7MSwyfSkvZzt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMLEssVSxXKXt2YXIgWT1MK3oubGVuZ3RoLHE9Sy5sZW5ndGgsZWU9TztyZXR1cm4gdm9pZCAwIT09VSYmKFU9XyhVKSxlZT1GKSx3KFcsZWUsZnVu''@;'; put 'put ''Y3Rpb24oSixuZSl7dmFyIGllO3N3aXRjaChCKG5lLDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiB6O2Nhc2UiYCI6cmV0dXJuIFAoTiwwLEwpO2Nhc2UiJyI6cmV0dXJuIFAoTixZKTtjYXNlIjwiOmllPVVbUChuZSwxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbGU9K25l''@;'; put 'put ''O2lmKDA9PT1sZSlyZXR1cm4gSjtpZihsZT5xKXt2YXIgbWU9ZyhsZS8xMCk7cmV0dXJuIDA9PT1tZT9KOm1lPD1xP3ZvaWQgMD09PUtbbWUtMV0/QihuZSwxKTpLW21lLTFdK0IobmUsMSk6Sn1pZT1LW2xlLTFdfXJldHVybiB2b2lkIDA9PT1pZT8iIjppZX0pfX0sMzM5NjM6ZnVuY3Rpb24o''@;'; put 'put ''dWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgWD1mdW5jdGlvbih5KXtyZXR1cm4geSYmeS5NYXRoPT09TWF0aCYmeX07dWUuZXhwb3J0cz1YKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fFgoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fFgoIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBzZWxmJiZzZWxmKXx8WCgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsKXx8WCgib2JqZWN0Ij09dHlwZW9mIHRoaXMmJnRoaXMpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwzOGUzOih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgzMTk1MCksZz1JKHt9Lmhhc093blByb3BlcnR5KTt1ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHcsUCl7cmV0dXJuIGcoXyh3KSxQKX19LDM0NjcwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e319LDg3MzcyOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTIyMDIpO3VlLmV4cG9ydHM9SSgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sNTcyNDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDU1NTkyKSxnPXkoNTU5ODgpO3VlLmV4cG9ydHM9IUkmJiFfKGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDU1ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoNTU1OTIpLGc9eSg4NjY3NSksQj1PYmplY3Qsdz1J''@;'; put 'put ''KCIiLnNwbGl0KTt1ZS5leHBvcnRzPV8oZnVuY3Rpb24oKXtyZXR1cm4hQigieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSk/ZnVuY3Rpb24oUCl7cmV0dXJuIlN0cmluZyI9PT1nKFApP3coUCwiIik6QihQKX06Qn0sMTcyOTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgx''@;'; put 'put ''OTE1MCksXz15KDMyNjMzKSxnPXkoMjE2MTIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3LFApe3ZhciBGLE87cmV0dXJuIGcmJkkoRj13LmNvbnN0cnVjdG9yKSYmRiE9PVAmJl8oTz1GLnByb3RvdHlwZSkmJk8hPT1QLnByb3RvdHlwZSYmZyhCLE8pLEJ9fSwyNjkzMToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMTkxNTApLGc9eSg0ODM1NiksQj1JKEZ1bmN0aW9uLnRvU3RyaW5nKTtfKGcuaW5zcGVjdFNvdXJjZSl8fChnLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odyl7cmV0dXJuIEIodyl9KSx1ZS5leHBvcnRzPWcuaW5zcGVjdFNvdXJjZX0sNjQ4''@;'; put 'put ''NTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMjYzMyksXz15KDM2Njc4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7SShCKSYmImNhdXNlImluIEImJl8oZywiY2F1c2UiLEIuY2F1c2UpfX0sNDczNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSyxVLFcsST15KDQ4''@;'; put 'put ''NjkxKSxfPXkoMzM5NjMpLGc9eSgzMjYzMyksQj15KDM2Njc4KSx3PXkoMzhlMyksUD15KDQ4MzU2KSxGPXkoNzk2NjIpLE89eSgzNDY3MCksej0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLE49Xy5UeXBlRXJyb3I7aWYoSXx8UC5zdGF0ZSl7dmFyIGVlPVAuc3RhdGV8fChQLnN0YXRl''@;'; put 'put ''PW5ldygwLF8uV2Vha01hcCkpO2VlLmdldD1lZS5nZXQsZWUuaGFzPWVlLmhhcyxlZS5zZXQ9ZWUuc2V0LEs9ZnVuY3Rpb24obmUsaWUpe2lmKGVlLmhhcyhuZSkpdGhyb3cgbmV3IE4oeik7cmV0dXJuIGllLmZhY2FkZT1uZSxlZS5zZXQobmUsaWUpLGllfSxVPWZ1bmN0aW9uKG5lKXtyZXR1''@;'; put 'put ''cm4gZWUuZ2V0KG5lKXx8e319LFc9ZnVuY3Rpb24obmUpe3JldHVybiBlZS5oYXMobmUpfX1lbHNle3ZhciBKPUYoInN0YXRlIik7T1tKXT0hMCxLPWZ1bmN0aW9uKG5lLGllKXtpZih3KG5lLEopKXRocm93IG5ldyBOKHopO3JldHVybiBpZS5mYWNhZGU9bmUsQihuZSxKLGllKSxpZX0sVT1m''@;'; put 'put ''dW5jdGlvbihuZSl7cmV0dXJuIHcobmUsSik/bmVbSl06e319LFc9ZnVuY3Rpb24obmUpe3JldHVybiB3KG5lLEopfX11ZS5leHBvcnRzPXtzZXQ6SyxnZXQ6VSxoYXM6VyxlbmZvcmNlOmZ1bmN0aW9uKG5lKXtyZXR1cm4gVyhuZSk/VShuZSk6SyhuZSx7fSl9LGdldHRlckZvcjpmdW5jdGlv''@;'; put 'put ''bihuZSl7cmV0dXJuIGZ1bmN0aW9uKGllKXt2YXIgbGU7aWYoIWcoaWUpfHwobGU9VShpZSkpLnR5cGUhPT1uZSl0aHJvdyBuZXcgTigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK25lKyIgcmVxdWlyZWQiKTtyZXR1cm4gbGV9fX19LDY2NzkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPXkoNTgwMTIpLF89eSgxOTI1OCksZz1JKCJpdGVyYXRvciIpLEI9QXJyYXkucHJvdG90eXBlO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIHZvaWQgMCE9PXcmJihfLkFycmF5PT09d3x8QltnXT09PXcpfX0sNjcyNzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4''@;'; put 'put ''NjY3NSk7dWUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihnKXtyZXR1cm4iQXJyYXkiPT09SShnKX19LDE5MTUwOnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbDt1ZS5leHBvcnRzPXR5cGVvZiBYPiJ1IiYmdm9p''@;'; put 'put ''ZCAwIT09WD9mdW5jdGlvbih5KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeXx8eT09PVh9OmZ1bmN0aW9uKHkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB5fX0sMTYzNjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTU5MiksXz15KDE5MTUwKSxnPS8jfFwucHJvdG90''@;'; put 'put ''eXBlXC4vLEI9ZnVuY3Rpb24oeixOKXt2YXIgTD1QW3coeildO3JldHVybiBMPT09T3x8TCE9PUYmJihfKE4pP0koTik6ISFOKX0sdz1CLm5vcm1hbGl6ZT1mdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopLnJlcGxhY2UoZywiLiIpLnRvTG93ZXJDYXNlKCl9LFA9Qi5kYXRhPXt9LEY9Qi5O''@;'; put 'put ''QVRJVkU9Ik4iLE89Qi5QT0xZRklMTD0iUCI7dWUuZXhwb3J0cz1CfSw5NDQ2ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3JldHVybiBudWxsPT1YfX0sMzI2MzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxOTE1MCk7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihfKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIF8/bnVsbCE9PV86SShfKX19LDQzNDA2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzI2MzMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIEkoXyl8fG51bGw9PT1ffX0sODg3ODg6dWU9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dWUuZXhwb3J0cz0hMX0sODg4Njc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMjYzMyksXz15KDg2Njc1KSxCPXkoNTgwMTIpKCJtYXRjaCIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7dmFyIFA7cmV0dXJuIEkodykmJih2b2lkIDAhPT0oUD13W0JdKT8hIVA6IlJlZ0V4cCI9''@;'; put 'put ''PT1fKHcpKX19LDkyOTk4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTIyMDIpLF89eSgxOTE1MCksZz15KDQ2OCksQj15KDY2OTk1KSx3PU9iamVjdDt1ZS5leHBvcnRzPUI/ZnVuY3Rpb24oUCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBQfTpmdW5jdGlvbihQKXt2YXIgRj1J''@;'; put 'put ''KCJTeW1ib2wiKTtyZXR1cm4gXyhGKSYmZyhGLnByb3RvdHlwZSx3KFApKX19LDExMzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNik7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcsQil7Zm9yKHZhciBGLE8sdz1CP186Xy5pdGVyYXRvcixQPV8ubmV4dDshKEY9SShQLHcp''@;'; put 'put ''KS5kb25lOylpZih2b2lkIDAhPT0oTz1nKEYudmFsdWUpKSlyZXR1cm4gT319LDMwNzg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzg4MTEpLF89eSg0NjkyNiksZz15KDExMDgpLEI9eSg3NTIxMiksdz15KDY2NzkyKSxQPXkoNzE3MSksRj15KDQ2OCksTz15KDQzNTg0KSx6''@;'; put 'put ''PXkoMzY5MzIpLE49eSg2NjU0MiksTD1UeXBlRXJyb3IsSz1mdW5jdGlvbihXLFkpe3RoaXMuc3RvcHBlZD1XLHRoaXMucmVzdWx0PVl9LFU9Sy5wcm90b3R5cGU7dWUuZXhwb3J0cz1mdW5jdGlvbihXLFkscSl7dmFyIF9lLFRlLFNlLGplLFYscCxiLEo9ISghcXx8IXEuQVNfRU5UUklFUyks''@;'; put 'put ''bmU9ISghcXx8IXEuSVNfUkVDT1JEKSxpZT0hKCFxfHwhcS5JU19JVEVSQVRPUiksbGU9ISghcXx8IXEuSU5URVJSVVBURUQpLG1lPUkoWSxxJiZxLnRoYXQpLHg9ZnVuY3Rpb24oVCl7cmV0dXJuIF9lJiZOKF9lLCJub3JtYWwiLFQpLG5ldyBLKCEwLFQpfSxDPWZ1bmN0aW9uKFQpe3JldHVy''@;'; put 'put ''biBKPyhnKFQpLGxlP21lKFRbMF0sVFsxXSx4KTptZShUWzBdLFRbMV0pKTpsZT9tZShULHgpOm1lKFQpfTtpZihuZSlfZT1XLml0ZXJhdG9yO2Vsc2UgaWYoaWUpX2U9VztlbHNle2lmKCEoVGU9eihXKSkpdGhyb3cgbmV3IEwoQihXKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHcoVGUpKXtm''@;'; put 'put ''b3IoU2U9MCxqZT1QKFcpO2plPlNlO1NlKyspaWYoKFY9QyhXW1NlXSkpJiZGKFUsVikpcmV0dXJuIFY7cmV0dXJuIG5ldyBLKCExKX1fZT1PKFcsVGUpfWZvcihwPW5lP1cubmV4dDpfZS5uZXh0OyEoYj1fKHAsX2UpKS5kb25lOyl7dHJ5e1Y9QyhiLnZhbHVlKX1jYXRjaChUKXtOKF9lLCJ0''@;'; put 'put ''aHJvdyIsVCl9aWYoIm9iamVjdCI9PXR5cGVvZiBWJiZWJiZGKFUsVikpcmV0dXJuIFZ9cmV0dXJuIG5ldyBLKCExKX19LDY2NTQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgxMTA4KSxnPXkoODYxMTUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3LFApe3Zh''@;'; put 'put ''ciBGLE87XyhCKTt0cnl7aWYoIShGPWcoQiwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dyl0aHJvdyBQO3JldHVybiBQfUY9SShGLEIpfWNhdGNoKHope089ITAsRj16fWlmKCJ0aHJvdyI9PT13KXRocm93IFA7aWYoTyl0aHJvdyBGO3JldHVybiBfKEYpLFB9fSw2OTkxNzoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoOTc5NTEpLGc9eSgzNjY3OCksQj15KDE0NzUwKSx3PXkoNTgwMTIpLFA9eSg0NzM2KSxGPXkoODYxMTUpLE89eSg3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUsej15KDU4OTc4KSxOPXkoNjY1NDIpLEw9dygidG9TdHJpbmdUYWciKSxL''@;'; put 'put ''PSJJdGVyYXRvckhlbHBlciIsVT0iV3JhcEZvclZhbGlkSXRlcmF0b3IiLFc9UC5zZXQsWT1mdW5jdGlvbihKKXt2YXIgbmU9UC5nZXR0ZXJGb3IoSj9VOkspO3JldHVybiBCKF8oTykse25leHQ6ZnVuY3Rpb24oKXt2YXIgbGU9bmUodGhpcyk7aWYoSilyZXR1cm4gbGUubmV4dEhhbmRsZXIo''@;'; put 'put ''KTtpZihsZS5kb25lKXJldHVybiB6KHZvaWQgMCwhMCk7dHJ5e3ZhciBtZT1sZS5uZXh0SGFuZGxlcigpO3JldHVybiBsZS5yZXR1cm5IYW5kbGVyUmVzdWx0P21lOnoobWUsbGUuZG9uZSl9Y2F0Y2goX2Upe3Rocm93IGxlLmRvbmU9ITAsX2V9fSxyZXR1cm46ZnVuY3Rpb24oKXt2YXIgaWU9''@;'; put 'put ''bmUodGhpcyksbGU9aWUuaXRlcmF0b3I7aWYoaWUuZG9uZT0hMCxKKXt2YXIgbWU9RihsZSwicmV0dXJuIik7cmV0dXJuIG1lP0kobWUsbGUpOnoodm9pZCAwLCEwKX1pZihpZS5pbm5lcil0cnl7TihpZS5pbm5lci5pdGVyYXRvciwibm9ybWFsIil9Y2F0Y2goX2Upe3JldHVybiBOKGxlLCJ0''@;'; put 'put ''aHJvdyIsX2UpfXJldHVybiBsZSYmTihsZSwibm9ybWFsIikseih2b2lkIDAsITApfX0pfSxxPVkoITApLGVlPVkoITEpO2coZWUsTCwiSXRlcmF0b3IgSGVscGVyIiksdWUuZXhwb3J0cz1mdW5jdGlvbihKLG5lLGllKXt2YXIgbGU9ZnVuY3Rpb24oX2UsVGUpe1RlPyhUZS5pdGVyYXRvcj1f''@;'; put 'put ''ZS5pdGVyYXRvcixUZS5uZXh0PV9lLm5leHQpOlRlPV9lLFRlLnR5cGU9bmU/VTpLLFRlLnJldHVybkhhbmRsZXJSZXN1bHQ9ISFpZSxUZS5uZXh0SGFuZGxlcj1KLFRlLmNvdW50ZXI9MCxUZS5kb25lPSExLFcodGhpcyxUZSl9O3JldHVybiBsZS5wcm90b3R5cGU9bmU/cTplZSxsZX19LDQx''@;'; put 'put ''MjUyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnKXt2YXIgQj1JLkl0ZXJhdG9yLHc9QiYmQi5wcm90b3R5cGUsUD13JiZ3W19dLEY9ITE7aWYoUCl0cnl7UC5jYWxsKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9''@;'; put 'put ''fSxyZXR1cm46ZnVuY3Rpb24oKXtGPSEwfX0sLTEpfWNhdGNoKE8pe08gaW5zdGFuY2VvZiBnfHwoRj0hMSl9aWYoIUYpcmV0dXJuIFB9fSw3ODk2ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTCxLLFUsST15KDU1NTkyKSxfPXkoMTkxNTApLGc9eSgzMjYzMyksQj15KDk3OTUxKSx3''@;'; put 'put ''PXkoMjY0MDApLFA9eSgzMTA4MyksRj15KDU4MDEyKSxPPXkoODg3ODgpLHo9RigiaXRlcmF0b3IiKSxOPSExO1tdLmtleXMmJigibmV4dCJpbihVPVtdLmtleXMoKSk/KEs9dyh3KFUpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoTD1LKTpOPSEwKSwhZyhMKXx8SShmdW5jdGlvbigpe3ZhciBZ''@;'; put 'put ''PXt9O3JldHVybiBMW3pdLmNhbGwoWSkhPT1ZfSk/TD17fTpPJiYoTD1CKEwpKSxfKExbel0pfHxQKEwseixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6TCxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOk59fSwxOTI1ODp1ZT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt1ZS5leHBvcnRzPXt9fSw3MTcxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTQyMzcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIEkoXy5sZW5ndGgpfX0sMTY5ODA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDU1NTkyKSxn''@;'; put 'put ''PXkoMTkxNTApLEI9eSgzOGUzKSx3PXkoNDYzODcpLFA9eSg4OTk4MSkuQ09ORklHVVJBQkxFLEY9eSgyNjkzMSksTz15KDQ3MzYpLHo9Ty5lbmZvcmNlLE49Ty5nZXQsTD1TdHJpbmcsSz1PYmplY3QuZGVmaW5lUHJvcGVydHksVT1JKCIiLnNsaWNlKSxXPUkoIiIucmVwbGFjZSksWT1JKFtd''@;'; put 'put ''LmpvaW4pLHE9dyYmIV8oZnVuY3Rpb24oKXtyZXR1cm4gOCE9PUsoZnVuY3Rpb24oKXt9LCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSksZWU9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLEo9dWUuZXhwb3J0cz1mdW5jdGlvbihuZSxpZSxsZSl7IlN5bWJvbCgiPT09VShMKGll''@;'; put 'put ''KSwwLDcpJiYoaWU9IlsiK1coTChpZSksL15TeW1ib2xcKChbXildKilcKS4qJC8sIiQxIikrIl0iKSxsZSYmbGUuZ2V0dGVyJiYoaWU9ImdldCAiK2llKSxsZSYmbGUuc2V0dGVyJiYoaWU9InNldCAiK2llKSwoIUIobmUsIm5hbWUiKXx8UCYmbmUubmFtZSE9PWllKSYmKHc/SyhuZSwibmFt''@;'; put 'put ''ZSIse3ZhbHVlOmllLGNvbmZpZ3VyYWJsZTohMH0pOm5lLm5hbWU9aWUpLHEmJmxlJiZCKGxlLCJhcml0eSIpJiZuZS5sZW5ndGghPT1sZS5hcml0eSYmSyhuZSwibGVuZ3RoIix7dmFsdWU6bGUuYXJpdHl9KTt0cnl7bGUmJkIobGUsImNvbnN0cnVjdG9yIikmJmxlLmNvbnN0cnVjdG9yP3cm''@;'; put 'put ''JksobmUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6bmUucHJvdG90eXBlJiYobmUucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2h7fXZhciBtZT16KG5lKTtyZXR1cm4gQihtZSwic291cmNlIil8fChtZS5zb3VyY2U9WShlZSwic3RyaW5nIj09dHlwZW9mIGllP2llOiIiKSksbmV9O0Z1bmN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS50b1N0cmluZz1KKGZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcykmJk4odGhpcykuc291cmNlfHxGKHRoaXMpfSwidG9TdHJpbmciKX0sMTg1NTY6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9TWF0aC5jZWlsLHk9TWF0aC5mbG9vcjt1ZS5leHBvcnRzPU1hdGgudHJ1bmN8''@;'; put 'put ''fGZ1bmN0aW9uKF8pe3ZhciBnPStfO3JldHVybihnPjA/eTpYKShnKX19LDM5MTE2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgzMzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gdm9pZCAwPT09Xz9hcmd1bWVudHMubGVuZ3RoPDI/IiI6ZzpJKF8pfX0sOTc5''@;'; put 'put ''NTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIGVlLEk9eSgxMTA4KSxfPXkoNzExNjgpLGc9eSg1ODU0MCksQj15KDM0NjcwKSx3PXkoODczNzIpLFA9eSg1NTk4OCksRj15KDc5NjYyKSxOPSJwcm90b3R5cGUiLEw9InNjcmlwdCIsSz1GKCJJRV9QUk9UTyIpLFU9ZnVuY3Rpb24oKXt9''@;'; put 'put ''LFc9ZnVuY3Rpb24obmUpe3JldHVybiI8IitMKyI+IituZSsiPC8iK0wrIj4ifSxZPWZ1bmN0aW9uKG5lKXtuZS53cml0ZShXKCIiKSksbmUuY2xvc2UoKTt2YXIgaWU9bmUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gbmU9bnVsbCxpZX0sSj1mdW5jdGlvbigpe3RyeXtlZT1uZXcgQWN0''@;'; put 'put ''aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaHt9Sj10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmRvbWFpbiYmZWU/WShlZSk6ZnVuY3Rpb24oKXt2YXIgbGUsbmU9UCgiaWZyYW1lIiksaWU9ImphdmEiK0wrIjoiO3JldHVybiBuZS5zdHlsZS5kaXNwbGF5PSJub25lIix3LmFwcGVu''@;'; put 'put ''ZENoaWxkKG5lKSxuZS5zcmM9U3RyaW5nKGllKSwobGU9bmUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGxlLndyaXRlKFcoImRvY3VtZW50LkY9T2JqZWN0IikpLGxlLmNsb3NlKCksbGUuRn0oKTpZKGVlKTtmb3IodmFyIG5lPWcubGVuZ3RoO25lLS07KWRlbGV0ZSBKW05dW2db''@;'; put 'put ''bmVdXTtyZXR1cm4gSigpfTtCW0tdPSEwLHVlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oaWUsbGUpe3ZhciBtZTtyZXR1cm4gbnVsbCE9PWllPyhVW05dPUkoaWUpLG1lPW5ldyBVLFVbTl09bnVsbCxtZVtLXT1pZSk6bWU9SigpLHZvaWQgMD09PWxlP21lOl8uZihtZSxsZSl9''@;'; put 'put ''fSw3MTE2ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoMjY5MjkpLGc9eSg0NDY0OCksQj15KDExMDgpLHc9eSg5MzE2MiksUD15KDEwMTQzKTtYLmY9SSYmIV8/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oTyx6KXtCKE8pO2Zvcih2YXIgVyxO''@;'; put 'put ''PXcoeiksTD1QKHopLEs9TC5sZW5ndGgsVT0wO0s+VTspZy5mKE8sVz1MW1UrK10sTltXXSk7cmV0dXJuIE99fSw0NDY0ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNTcyNDQpLGc9eSgyNjkyOSksQj15KDExMDgpLHc9eSg1OTQxMCksUD1UeXBlRXJyb3Is''@;'; put 'put ''Rj1PYmplY3QuZGVmaW5lUHJvcGVydHksTz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHo9ImVudW1lcmFibGUiLE49ImNvbmZpZ3VyYWJsZSIsTD0id3JpdGFibGUiO1guZj1JP2c/ZnVuY3Rpb24oVSxXLFkpe2lmKEIoVSksVz13KFcpLEIoWSksImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFUmJiJwcm90b3R5cGUiPT09VyYmInZhbHVlImluIFkmJkwgaW4gWSYmIVlbTF0pe3ZhciBxPU8oVSxXKTtxJiZxW0xdJiYoVVtXXT1ZLnZhbHVlLFk9e2NvbmZpZ3VyYWJsZTpOIGluIFk/WVtOXTpxW05dLGVudW1lcmFibGU6eiBpbiBZP1lbel06cVt6XSx3cml0YWJsZTohMX0pfXJldHVy''@;'; put 'put ''biBGKFUsVyxZKX06RjpmdW5jdGlvbihVLFcsWSl7aWYoQihVKSxXPXcoVyksQihZKSxfKXRyeXtyZXR1cm4gRihVLFcsWSl9Y2F0Y2h7fWlmKCJnZXQiaW4gWXx8InNldCJpbiBZKXRocm93IG5ldyBQKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpO3JldHVybiJ2YWx1ZSJpbiBZJiYoVVtX''@;'; put 'put ''XT1ZLnZhbHVlKSxVfX0sNTQxMjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDQ2OTI2KSxnPXkoMzk2MiksQj15KDc3NzczKSx3PXkoOTMxNjIpLFA9eSg1OTQxMCksRj15KDM4ZTMpLE89eSg1NzI0NCksej1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw''@;'; put 'put ''dG9yO1guZj1JP3o6ZnVuY3Rpb24oTCxLKXtpZihMPXcoTCksSz1QKEspLE8pdHJ5e3JldHVybiB6KEwsSyl9Y2F0Y2h7fWlmKEYoTCxLKSlyZXR1cm4gQighXyhnLmYsTCxLKSxMW0tdKX19LDM2MTQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjMzMTMpLGc9eSg1ODU0MCku''@;'; put 'put ''Y29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtYLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHcpe3JldHVybiBJKHcsZyl9fSwyODA3MDoodWUsWCk9PnsidXNlIHN0cmljdCI7WC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDI2NDAwOih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzhlMyksXz15KDE5MTUwKSxnPXkoMzE5NTApLEI9eSg3OTY2Miksdz15KDgyODM0KSxQPUIoIklFX1BST1RPIiksRj1PYmplY3QsTz1GLnByb3RvdHlwZTt1ZS5leHBvcnRzPXc/Ri5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih6KXt2YXIgTj1nKHop''@;'; put 'put ''O2lmKEkoTixQKSlyZXR1cm4gTltQXTt2YXIgTD1OLmNvbnN0cnVjdG9yO3JldHVybiBfKEwpJiZOIGluc3RhbmNlb2YgTD9MLnByb3RvdHlwZTpOIGluc3RhbmNlb2YgRj9POm51bGx9fSw0Njg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyk7dWUuZXhwb3J0cz1JKHt9''@;'; put 'put ''LmlzUHJvdG90eXBlT2YpfSwyMzMxMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMzhlMyksZz15KDkzMTYyKSxCPXkoNzQ4MjQpLmluZGV4T2Ysdz15KDM0NjcwKSxQPUkoW10ucHVzaCk7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe3ZhciBLLHo9ZyhGKSxO''@;'; put 'put ''PTAsTD1bXTtmb3IoSyBpbiB6KSFfKHcsSykmJl8oeixLKSYmUChMLEspO2Zvcig7Ty5sZW5ndGg+TjspXyh6LEs9T1tOKytdKSYmKH5CKEwsSyl8fFAoTCxLKSk7cmV0dXJuIEx9fSwxMDE0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIzMzEzKSxfPXkoNTg1NDApO3VlLmV4''@;'; put 'put ''cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEIpe3JldHVybiBJKEIsXyl9fSwzOTYyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXz1JJiYheS5jYWxsKHsxOjJ9LDEpO1guZj1f''@;'; put 'put ''P2Z1bmN0aW9uKEIpe3ZhciB3PUkodGhpcyxCKTtyZXR1cm4hIXcmJncuZW51bWVyYWJsZX06eX0sMjE2MTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2OTIyNyksXz15KDMyNjMzKSxnPXkoODgyNzUpLEI9eSgyNzY3KTt1ZS5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVP''@;'; put 'put ''Znx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBGLHc9ITEsUD17fTt0cnl7KEY9SShPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkoUCxbXSksdz1QIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2h7fXJldHVybiBmdW5jdGlvbih6LE4pe3JldHVybiBnKHopLEIoTiks''@;'; put 'put ''Xyh6KSYmKHc/Rih6LE4pOnouX19wcm90b19fPU4pLHp9fSgpOnZvaWQgMCl9LDkzODY1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgxOTE1MCksZz15KDMyNjMzKSxCPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7dmFyIEYsTztpZigic3Ry''@;'; put 'put ''aW5nIj09PVAmJl8oRj13LnRvU3RyaW5nKSYmIWcoTz1JKEYsdykpfHxfKEY9dy52YWx1ZU9mKSYmIWcoTz1JKEYsdykpfHwic3RyaW5nIiE9PVAmJl8oRj13LnRvU3RyaW5nKSYmIWcoTz1JKEYsdykpKXJldHVybiBPO3Rocm93IG5ldyBCKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUiKX19LDg4MDc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTIyMDIpLF89eSg1ODYwNyksZz15KDM2MTQzKSxCPXkoMjgwNzApLHc9eSgxMTA4KSxQPV8oW10uY29uY2F0KTt1ZS5leHBvcnRzPUkoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKE8p''@;'; put 'put ''e3ZhciB6PWcuZih3KE8pKSxOPUIuZjtyZXR1cm4gTj9QKHosTihPKSk6en19LDYwMzIxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDQ2NDgpLmY7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcsQil7QiBpbiBffHxJKF8sQix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBnW0JdfSxzZXQ6ZnVuY3Rpb24odyl7Z1tCXT13fX0pfX0sMjI3NTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMTA4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIF89SSh0aGlzKSxnPSIiO3JldHVybiBfLmhhc0luZGljZXMmJihnKz0iZCIpLF8uZ2xvYmFs''@;'; put 'put ''JiYoZys9ImciKSxfLmlnbm9yZUNhc2UmJihnKz0iaSIpLF8ubXVsdGlsaW5lJiYoZys9Im0iKSxfLmRvdEFsbCYmKGcrPSJzIiksXy51bmljb2RlJiYoZys9InUiKSxfLnVuaWNvZGVTZXRzJiYoZys9InYiKSxfLnN0aWNreSYmKGcrPSJ5IiksZ319LDM3MDc1Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgzOGUzKSxnPXkoNDY4KSxCPXkoMjI3NTQpLHc9UmVnRXhwLnByb3RvdHlwZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPVAuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PUZ8fCJmbGFncyJpbiB3fHxfKFAsImZsYWdzIil8fCFnKHcsUCk/RjpJ''@;'; put 'put ''KEIsUCl9fSw4ODI3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk0NDY4KSxfPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2lmKEkoZykpdGhyb3cgbmV3IF8oIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrZyk7cmV0dXJuIGd9fSw0MzI0OToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgTixJPXkoMzM5NjMpLF89eSg0MDIyMCksZz15KDE5MTUwKSxCPXkoNDcwOTIpLHc9eSgyMzU4KSxQPXkoNzc2MzkpLEY9eSgyNzk2NyksTz1JLkZ1bmN0aW9uLHo9L01TSUUgLlwuLy50ZXN0KHcpfHwiQlVOIj09PUImJigoTj1JLkJ1bi52ZXJzaW9uLnNwbGl0KCIu''@;'; put 'put ''IikpLmxlbmd0aDwzfHwiMCI9PT1OWzBdJiYoTlsxXTwzfHwiMyI9PT1OWzFdJiYiMCI9PT1OWzJdKSk7dWUuZXhwb3J0cz1mdW5jdGlvbihOLEwpe3ZhciBLPUw/MjoxO3JldHVybiB6P2Z1bmN0aW9uKFUsVyl7dmFyIFk9Rihhcmd1bWVudHMubGVuZ3RoLDEpPksscT1nKFUpP1U6TyhVKSxl''@;'; put 'put ''ZT1ZP1AoYXJndW1lbnRzLEspOltdLEo9WT9mdW5jdGlvbigpe18ocSx0aGlzLGVlKX06cTtyZXR1cm4gTD9OKEosVyk6TihKKX06Tn19LDE0NDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzU0MSksXz15KDIxOTEwKSxnPUkuU2V0LEI9SS5hZGQ7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbih3KXt2YXIgUD1uZXcgZztyZXR1cm4gXyh3LGZ1bmN0aW9uKEYpe0IoUCxGKX0pLFB9fSw4MDIxMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLGc9eSgxNDQ1KSxCPXkoMzAzMzkpLHc9eSg0MzYzMiksUD15KDIxOTEwKSxGPXkoMTEzOCks''@;'; put 'put ''Tz1fLmhhcyx6PV8ucmVtb3ZlO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIEs9SSh0aGlzKSxVPXcoTCksVz1nKEspO3JldHVybiBCKEspPD1VLnNpemU/UChLLGZ1bmN0aW9uKFkpe1UuaW5jbHVkZXMoWSkmJnooVyxZKX0pOkYoVS5nZXRJdGVyYXRvcigpLGZ1bmN0aW9uKFkpe08oSyxZ''@;'; put 'put ''KSYmeihXLFkpfSksV319LDk3NTQxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89U2V0LnByb3RvdHlwZTt1ZS5leHBvcnRzPXtTZXQsYWRkOkkoXy5hZGQpLGhhczpJKF8uaGFzKSxyZW1vdmU6SShfLmRlbGV0ZSkscHJvdG86X319LDYxODc5Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSksZz15KDMwMzM5KSxCPXkoNDM2MzIpLHc9eSgyMTkxMCksUD15KDExMzgpLEY9Xy5TZXQsTz1fLmFkZCx6PV8uaGFzO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIEs9SSh0aGlzKSxVPUIoTCksVz1uZXcgRjtyZXR1cm4g''@;'; put 'put ''ZyhLKT5VLnNpemU/UChVLmdldEl0ZXJhdG9yKCksZnVuY3Rpb24oWSl7eihLLFkpJiZPKFcsWSl9KTp3KEssZnVuY3Rpb24oWSl7VS5pbmNsdWRlcyhZKSYmTyhXLFkpfSksV319LDczNjI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSkuaGFzLGc9''@;'; put 'put ''eSgzMDMzOSksQj15KDQzNjMyKSx3PXkoMjE5MTApLFA9eSgxMTM4KSxGPXkoNjY1NDIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeil7dmFyIE49SSh0aGlzKSxMPUIoeik7aWYoZyhOKTw9TC5zaXplKXJldHVybiExIT09dyhOLGZ1bmN0aW9uKFUpe2lmKEwuaW5jbHVkZXMoVSkpcmV0dXJuITF9''@;'; put 'put ''LCEwKTt2YXIgSz1MLmdldEl0ZXJhdG9yKCk7cmV0dXJuITEhPT1QKEssZnVuY3Rpb24oVSl7aWYoXyhOLFUpKXJldHVybiBGKEssIm5vcm1hbCIsITEpfSl9fSw3NDgzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoMzAzMzkpLGc9eSgyMTkxMCksQj15KDQz''@;'; put 'put ''NjMyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPUkodGhpcyksTz1CKFApO3JldHVybiEoXyhGKT5PLnNpemUpJiYhMSE9PWcoRixmdW5jdGlvbih6KXtpZighTy5pbmNsdWRlcyh6KSlyZXR1cm4hMX0sITApfX0sOTYwNjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgz''@;'; put 'put ''NzczMSksXz15KDk3NTQxKS5oYXMsZz15KDMwMzM5KSxCPXkoNDM2MzIpLHc9eSgxMTM4KSxQPXkoNjY1NDIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7dmFyIHo9SSh0aGlzKSxOPUIoTyk7aWYoZyh6KTxOLnNpemUpcmV0dXJuITE7dmFyIEw9Ti5nZXRJdGVyYXRvcigpO3JldHVybiExIT09''@;'; put 'put ''dyhMLGZ1bmN0aW9uKEspe2lmKCFfKHosSykpcmV0dXJuIFAoTCwibm9ybWFsIiwhMSl9KX19LDIxOTEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgxMTM4KSxnPXkoOTc1NDEpLEI9Zy5TZXQsdz1nLnByb3RvLFA9SSh3LmZvckVhY2gpLEY9SSh3LmtleXMp''@;'; put 'put ''LE89RihuZXcgQikubmV4dDt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gTD9fKHtpdGVyYXRvcjpGKHopLG5leHQ6T30sTik6UCh6LE4pfX0sNTM1MDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMjIwMiksXz1mdW5jdGlvbihCKXtyZXR1cm57c2l6ZTpCLGhh''@;'; put 'put ''czpmdW5jdGlvbigpe3JldHVybiExfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX19fSxnPWZ1bmN0aW9uKEIpe3JldHVybntzaXplOkIsaGFzOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGtleXM6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImUiKX19fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7dmFyIFA9SSgiU2V0Iik7dHJ5eyhuZXcgUClbQl0oXygwKSk7dHJ5e3JldHVybihuZXcgUClbQl0oXygtMSkpLCExfWNhdGNoe2lmKCF3KXJldHVybiEwO3RyeXtyZXR1cm4obmV3IFApW0JdKGcoLTEvMCkpLCExfWNhdGNoe3Zh''@;'; put 'put ''ciBGPW5ldyBQO3JldHVybiBGLmFkZCgxKSxGLmFkZCgyKSx3KEZbQl0oZygxLzApKSl9fX1jYXRjaHtyZXR1cm4hMX19fSwzMDMzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY5MjI3KSxfPXkoOTc1NDEpO3VlLmV4cG9ydHM9SShfLnByb3RvLCJzaXplIiwiZ2V0Iil8fGZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBnLnNpemV9fSw4NTAzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLGc9eSgxNDQ1KSxCPXkoNDM2MzIpLHc9eSgxMTM4KSxQPV8uYWRkLEY9Xy5oYXMsTz1fLnJlbW92ZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKE4pe3Zh''@;'; put 'put ''ciBMPUkodGhpcyksSz1CKE4pLmdldEl0ZXJhdG9yKCksVT1nKEwpO3JldHVybiB3KEssZnVuY3Rpb24oVyl7RihMLFcpP08oVSxXKTpQKFUsVyl9KSxVfX0sMjA1MDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDk3NTQxKS5hZGQsZz15KDE0NDUpLEI9eSg0''@;'; put 'put ''MzYzMiksdz15KDExMzgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIE89SSh0aGlzKSx6PUIoRikuZ2V0SXRlcmF0b3IoKSxOPWcoTyk7cmV0dXJuIHcoeixmdW5jdGlvbihMKXtfKE4sTCl9KSxOfX0sNzk2NjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzQ4NCksXz15''@;'; put 'put ''KDYzOTUxKSxnPUkoImtleXMiKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe3JldHVybiBnW0JdfHwoZ1tCXT1fKEIpKX19LDQ4MzU2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3ODgpLF89eSgzMzk2MyksZz15KDQ4MTA0KSxCPSJfX2NvcmUtanNfc2hhcmVkX18iLHc9dWUu''@;'; put 'put ''ZXhwb3J0cz1fW0JdfHxnKEIse30pOyh3LnZlcnNpb25zfHwody52ZXJzaW9ucz1bXSkpLnB1c2goe3ZlcnNpb246IjMuNDIuMCIsbW9kZTpJPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJo''@;'; put 'put ''dHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQyLjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sODc0ODQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0ODM1Nik7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihfLGcpe3JldHVybiBJW19dfHwoSVtfXT1nfHx7fSl9fSwzNjUwNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ0MDY2KSxfPXkoNTU1OTIpLEI9eSgzMzk2MykuU3RyaW5nO3VlLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhXyhmdW5jdGlv''@;'; put 'put ''bigpe3ZhciB3PVN5bWJvbCgic3ltYm9sIGRldGVjdGlvbiIpO3JldHVybiFCKHcpfHwhKE9iamVjdCh3KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZJJiZJPDQxfSl9LDc1OTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF9lLFRlLFNlLGplLEk9eSgzMzk2MyksXz15''@;'; put 'put ''KDQwMjIwKSxnPXkoNzg4MTEpLEI9eSgxOTE1MCksdz15KDM4ZTMpLFA9eSg1NTU5MiksRj15KDg3MzcyKSxPPXkoNzc2MzkpLHo9eSg1NTk4OCksTj15KDI3OTY3KSxMPXkoNDQxMzcpLEs9eSgyMTUxMCksVT1JLnNldEltbWVkaWF0ZSxXPUkuY2xlYXJJbW1lZGlhdGUsWT1JLnByb2Nlc3Ms''@;'; put 'put ''cT1JLkRpc3BhdGNoLGVlPUkuRnVuY3Rpb24sSj1JLk1lc3NhZ2VDaGFubmVsLG5lPUkuU3RyaW5nLGllPTAsbGU9e30sbWU9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7UChmdW5jdGlvbigpe19lPUkubG9jYXRpb259KTt2YXIgVj1mdW5jdGlvbihDKXtpZih3KGxlLEMpKXt2YXIgVD1sZVtDXTtk''@;'; put 'put ''ZWxldGUgbGVbQ10sVCgpfX0scD1mdW5jdGlvbihDKXtyZXR1cm4gZnVuY3Rpb24oKXtWKEMpfX0sYj1mdW5jdGlvbihDKXtWKEMuZGF0YSl9LHg9ZnVuY3Rpb24oQyl7SS5wb3N0TWVzc2FnZShuZShDKSxfZS5wcm90b2NvbCsiLy8iK19lLmhvc3QpfTsoIVV8fCFXKSYmKFU9ZnVuY3Rpb24o''@;'; put 'put ''VCl7Tihhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBIPUIoVCk/VDplZShUKSxqPU8oYXJndW1lbnRzLDEpO3JldHVybiBsZVsrK2llXT1mdW5jdGlvbigpe18oSCx2b2lkIDAsail9LFRlKGllKSxpZX0sVz1mdW5jdGlvbihUKXtkZWxldGUgbGVbVF19LEs/VGU9ZnVuY3Rpb24oQyl7WS5uZXh0''@;'; put 'put ''VGljayhwKEMpKX06cSYmcS5ub3c/VGU9ZnVuY3Rpb24oQyl7cS5ub3cocChDKSl9OkomJiFMPyhqZT0oU2U9bmV3IEopLnBvcnQyLFNlLnBvcnQxLm9ubWVzc2FnZT1iLFRlPWcoamUucG9zdE1lc3NhZ2UsamUpKTpJLmFkZEV2ZW50TGlzdGVuZXImJkIoSS5wb3N0TWVzc2FnZSkmJiFJLmlt''@;'; put 'put ''cG9ydFNjcmlwdHMmJl9lJiYiZmlsZToiIT09X2UucHJvdG9jb2wmJiFQKHgpPyhUZT14LEkuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYiwhMSkpOlRlPW1lIGluIHooInNjcmlwdCIpP2Z1bmN0aW9uKEMpe0YuYXBwZW5kQ2hpbGQoeigic2NyaXB0IikpW21lXT1mdW5jdGlvbigpe0Yu''@;'; put 'put ''cmVtb3ZlQ2hpbGQodGhpcyksVihDKX19OmZ1bmN0aW9uKEMpe3NldFRpbWVvdXQocChDKSwwKX0pLHVlLmV4cG9ydHM9e3NldDpVLGNsZWFyOld9fSw3NDg1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQ1NTApLF89TWF0aC5tYXgsZz1NYXRoLm1pbjt1ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKEIsdyl7dmFyIFA9SShCKTtyZXR1cm4gUDwwP18oUCt3LDApOmcoUCx3KX19LDkzMTYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU4KSxfPXkoODgyNzUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoXyhnKSl9fSw2NDU1MDoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDE4NTU2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3ZhciBnPStfO3JldHVybiBnIT1nfHwwPT09Zz8wOkkoZyl9fSw5NDIzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0NTUwKSxfPU1hdGgubWluO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7''@;'; put 'put ''dmFyIEI9SShnKTtyZXR1cm4gQj4wP18oQiw5MDA3MTk5MjU0NzQwOTkxKTowfX0sMzE5NTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODI3NSksXz1PYmplY3Q7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4gXyhJKGcpKX19LDg1NjU2Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgzMjYzMyksZz15KDkyOTk4KSxCPXkoODYxMTUpLHc9eSg5Mzg2NSksUD15KDU4MDEyKSxGPVR5cGVFcnJvcixPPVAoInRvUHJpbWl0aXZlIik7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKCFfKHopfHxnKHopKXJldHVybiB6O3ZhciBLLEw9''@;'; put 'put ''Qih6LE8pO2lmKEwpe2lmKHZvaWQgMD09PU4mJihOPSJkZWZhdWx0IiksSz1JKEwseixOKSwhXyhLKXx8ZyhLKSlyZXR1cm4gSzt0aHJvdyBuZXcgRigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PU4mJihOPSJudW1iZXIiKSx3KHos''@;'; put 'put ''Til9fSw1OTQxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg1NjU2KSxfPXkoOTI5OTgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7dmFyIEI9SShnLCJzdHJpbmciKTtyZXR1cm4gXyhCKT9COkIrIiJ9fSwzODU5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZz17fTtn''@;'; put 'put ''W3koNTgwMTIpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdWUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcoZyl9LDY4MzMyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE4MjQpLF89U3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7aWYoIlN5bWJvbCI9PT1JKGcpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIF8oZyl9fSw3NTIxMjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlvbih5KXt0cnl7cmV0dXJuIFgoeSl9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''Ik9iamVjdCJ9fX0sNjM5NTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz0wLGc9TWF0aC5yYW5kb20oKSxCPUkoMS4udG9TdHJpbmcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT13PyIiOncpKyIpXyIrQigrK18rZywz''@;'; put 'put ''Nil9fSw2Njk5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM2NTA2KTt1ZS5leHBvcnRzPUkmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LDI2OTI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg1NTU5''@;'; put 'put ''Mik7dWUuZXhwb3J0cz1JJiZfKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KX0sMjc5Njc6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9VHlwZUVycm9y''@;'; put 'put ''O3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtpZih5PEkpdGhyb3cgbmV3IFgoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIHl9fSw0ODY5MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPXkoMTkxNTApLGc9SS5XZWFrTWFwO3VlLmV4cG9ydHM9XyhnKSYm''@;'; put 'put ''L25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhnKSl9LDU4MDEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89eSg4NzQ4NCksZz15KDM4ZTMpLEI9eSg2Mzk1MSksdz15KDM2NTA2KSxQPXkoNjY5OTUpLEY9SS5TeW1ib2wsTz1fKCJ3a3MiKSx6PVA/Ri5mb3J8fEY6''@;'; put 'put ''RiYmRi53aXRob3V0U2V0dGVyfHxCO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTil7cmV0dXJuIGcoTyxOKXx8KE9bTl09dyYmZyhGLE4pP0ZbTl06eigiU3ltYm9sLiIrTikpLE9bTl19fSwzMjkzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKSxfPXkoMzhlMyksZz15KDM2''@;'; put 'put ''Njc4KSxCPXkoNDY4KSx3PXkoMjE2MTIpLFA9eSg0ODYzOSksRj15KDYwMzIxKSxPPXkoMTcyOTYpLHo9eSgzOTExNiksTj15KDY0ODU1KSxMPXkoMjIzMDQpLEs9eSg0NjM4NyksVT15KDg4Nzg4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFcsWSxxLGVlKXt2YXIgSj0ic3RhY2tUcmFjZUxpbWl0''@;'; put 'put ''IixuZT1lZT8yOjEsaWU9Vy5zcGxpdCgiLiIpLGxlPWllW2llLmxlbmd0aC0xXSxtZT1JLmFwcGx5KG51bGwsaWUpO2lmKG1lKXt2YXIgX2U9bWUucHJvdG90eXBlO2lmKCFVJiZfKF9lLCJjYXVzZSIpJiZkZWxldGUgX2UuY2F1c2UsIXEpcmV0dXJuIG1lO3ZhciBUZT1JKCJFcnJvciIpLFNl''@;'; put 'put ''PVkoZnVuY3Rpb24oamUsVil7dmFyIHA9eihlZT9WOmplLHZvaWQgMCksYj1lZT9uZXcgbWUoamUpOm5ldyBtZTtyZXR1cm4gdm9pZCAwIT09cCYmZyhiLCJtZXNzYWdlIixwKSxMKGIsU2UsYi5zdGFjaywyKSx0aGlzJiZCKF9lLHRoaXMpJiZPKGIsdGhpcyxTZSksYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD5uZSYmTihiLGFyZ3VtZW50c1tuZV0pLGJ9KTtpZihTZS5wcm90b3R5cGU9X2UsIkVycm9yIiE9PWxlP3c/dyhTZSxUZSk6UChTZSxUZSx7bmFtZTohMH0pOksmJkogaW4gbWUmJihGKFNlLG1lLEopLEYoU2UsbWUsInByZXBhcmVTdGFja1RyYWNlIikpLFAoU2UsbWUpLCFVKXRyeXtfZS5u''@;'; put 'put ''YW1lIT09bGUmJmcoX2UsIm5hbWUiLGxlKSxfZS5jb25zdHJ1Y3Rvcj1TZX1jYXRjaHt9cmV0dXJuIFNlfX19LDM5MDkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMTk1MCksZz15KDcxNzEpLEI9eSg2NDU1MCksdz15KDcwODI0KTtJKHt0YXJnZXQ6IkFy''@;'; put 'put ''cmF5Iixwcm90bzohMH0se2F0OmZ1bmN0aW9uKEYpe3ZhciBPPV8odGhpcyksej1nKE8pLE49QihGKSxMPU4+PTA/Tjp6K047cmV0dXJuIEw8MHx8TD49ej92b2lkIDA6T1tMXX19KSx3KCJhdCIpfSw3NzUyNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzE5''@;'; put 'put ''NTApLGc9eSg3MTcxKSxCPXkoMzkyMDYpLHc9eSgzMzE2KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDp5KDU1NTkyKShmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KXx8IWZ1bmN0aW9u''@;'; put 'put ''KCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbihMKXt2YXIgSz1fKHRoaXMpLFU9ZyhLKSxXPWFyZ3VtZW50cy5sZW5ndGg7''@;'; put 'put ''dyhVK1cpO2Zvcih2YXIgWT0wO1k8VztZKyspS1tVXT1hcmd1bWVudHNbWV0sVSsrO3JldHVybiBCKEssVSksVX19KX0sMjMwMTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDU4NjA3KSxnPXkoMzE0ODMpLEI9eSg5MzE2Miksdz15KDM4ODEpLFA9eSg2NjUw''@;'; put 'put ''MyksRj15KDcwODI0KSxPPUFycmF5LHo9XyhQKCJBcnJheSIsInNvcnQiKSk7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHt0b1NvcnRlZDpmdW5jdGlvbihMKXt2b2lkIDAhPT1MJiZnKEwpO3ZhciBLPUIodGhpcyksVT13KE8sSyk7cmV0dXJuIHooVSxMKX19KSxGKCJ0b1NvcnRlZCIp''@;'; put 'put ''fSw2ODE0NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDcwODI0KSgiZmxhdE1hcCIpfSw5MzkwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDcwODI0KSgiZmxhdCIpfSwyOTc2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzE5NTApLGc9eSg3MTcx''@;'; put 'put ''KSxCPXkoMzkyMDYpLHc9eSg0MzE5NSksUD15KDMzMTYpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOjEhPT1bXS51bnNoaWZ0KDApfHwhZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnVuc2hp''@;'; put 'put ''ZnQoKX1jYXRjaChOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHt1bnNoaWZ0OmZ1bmN0aW9uKEwpe3ZhciBLPV8odGhpcyksVT1nKEspLFc9YXJndW1lbnRzLmxlbmd0aDtpZihXKXtQKFUrVyk7Zm9yKHZhciBZPVU7WS0tOyl7dmFyIHE9WStXO1kgaW4gSz9LW3FdPUtb''@;'; put 'put ''WV06dyhLLHEpfWZvcih2YXIgZWU9MDtlZTxXO2VlKyspS1tlZV09YXJndW1lbnRzW2VlXX1yZXR1cm4gQihLLFUrVyl9fSl9LDQ5NTM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMzk2MyksZz15KDQwMjIwKSxCPXkoMzI5MzApLHc9IldlYkFzc2VtYmx5''@;'; put 'put ''IixQPV9bd10sRj03IT09bmV3IEVycm9yKCJlIix7Y2F1c2U6N30pLmNhdXNlLE89ZnVuY3Rpb24oTixMKXt2YXIgSz17fTtLW05dPUIoTixMLEYpLEkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxhcml0eToxLGZvcmNlZDpGfSxLKX0sej1mdW5jdGlvbihOLEwpe2lmKFAmJlBbTl0pe3Zh''@;'; put 'put ''ciBLPXt9O0tbTl09Qih3KyIuIitOLEwsRiksSSh7dGFyZ2V0Oncsc3RhdDohMCxjb25zdHJ1Y3RvcjohMCxhcml0eToxLGZvcmNlZDpGfSxLKX19O08oIkVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiRXZhbEVy''@;'; put 'put ''cm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiUmFuZ2VFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlJlZmVyZW5jZUVycm9yIixmdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiU3ludGF4RXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJUeXBlRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJVUklFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLHooIkNvbXBpbGVFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEsp''@;'; put 'put ''e3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLHooIkxpbmtFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLHooIlJ1bnRpbWVFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4s''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfX0pfSw5NjE4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzM5NjMpLGc9eSg2MzMzNiksQj15KDExMDgpLHc9eSgxOTE1MCksUD15KDI2NDAwKSxGPXkoNDQwMzkpLE89eSg1ODc5NSksej15KDU1NTkyKSxOPXkoMzhlMyksTD15''@;'; put 'put ''KDU4MDEyKSxLPXkoNzg5NjgpLkl0ZXJhdG9yUHJvdG90eXBlLFU9eSg0NjM4NyksVz15KDg4Nzg4KSxZPSJjb25zdHJ1Y3RvciIscT0iSXRlcmF0b3IiLGVlPUwoInRvU3RyaW5nVGFnIiksSj1UeXBlRXJyb3IsbmU9X1txXSxpZT1XfHwhdyhuZSl8fG5lLnByb3RvdHlwZSE9PUt8fCF6KGZ1''@;'; put 'put ''bmN0aW9uKCl7bmUoe30pfSksbGU9ZnVuY3Rpb24oKXtpZihnKHRoaXMsSyksUCh0aGlzKT09PUspdGhyb3cgbmV3IEooIkFic3RyYWN0IGNsYXNzIEl0ZXJhdG9yIG5vdCBkaXJlY3RseSBjb25zdHJ1Y3RhYmxlIil9LG1lPWZ1bmN0aW9uKF9lLFRlKXtVP0YoSyxfZSx7Y29uZmlndXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBUZX0sc2V0OmZ1bmN0aW9uKFNlKXtpZihCKHRoaXMpLHRoaXM9PT1LKXRocm93IG5ldyBKKCJZb3UgY2FuJ3QgcmVkZWZpbmUgdGhpcyBwcm9wZXJ0eSIpO04odGhpcyxfZSk/dGhpc1tfZV09U2U6Tyh0aGlzLF9lLFNlKX19KTpLW19lXT1UZX07''@;'; put 'put ''TihLLGVlKXx8bWUoZWUscSksKGllfHwhTihLLFkpfHxLW1ldPT09T2JqZWN0KSYmbWUoWSxsZSksbGUucHJvdG90eXBlPUssSSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDppZX0se0l0ZXJhdG9yOmxlfSl9LDM5NTk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXko''@;'; put 'put ''MjgzNjcpLF89eSg0NjkyNiksZz15KDMwNzg3KSxCPXkoMzE0ODMpLHc9eSgxMTA4KSxQPXkoNzU0MjQpLEY9eSg2NjU0Miksej15KDQxMjUyKSgiZXZlcnkiLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2V2ZXJ5OmZ1bmN0aW9u''@;'; put 'put ''KEwpe3codGhpcyk7dHJ5e0IoTCl9Y2F0Y2goVyl7Rih0aGlzLCJ0aHJvdyIsVyl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTCk7dmFyIEs9UCh0aGlzKSxVPTA7cmV0dXJuIWcoSyxmdW5jdGlvbihXLFkpe2lmKCFMKFcsVSsrKSlyZXR1cm4gWSgpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVE''@;'; put 'put ''OiEwfSkuc3RvcHBlZH19KX0sOTI1ODA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzE0ODMpLEI9eSgxMTA4KSx3PXkoNzU0MjQpLFA9eSg2OTkxNyksRj15KDQyOTI2KSxPPXkoODg3ODgpLHo9eSg2NjU0MiksTj15KDQxMjUyKSxMPSFP''@;'; put 'put ''JiZOKCJmaWx0ZXIiLFR5cGVFcnJvciksSz1QKGZ1bmN0aW9uKCl7Zm9yKHZhciBxLEosVT10aGlzLml0ZXJhdG9yLFc9dGhpcy5wcmVkaWNhdGUsWT10aGlzLm5leHQ7Oyl7aWYocT1CKF8oWSxVKSksdGhpcy5kb25lPSEhcS5kb25lKXJldHVybjtpZihGKFUsVyxbSj1xLnZhbHVlLHRoaXMu''@;'; put 'put ''Y291bnRlcisrXSwhMCkpcmV0dXJuIEp9fSk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6T3x8TH0se2ZpbHRlcjpmdW5jdGlvbihXKXtCKHRoaXMpO3RyeXtnKFcpfWNhdGNoKFkpe3oodGhpcywidGhyb3ciLFkpfXJldHVybiBMP18oTCx0aGlzLFcpOm5l''@;'; put 'put ''dyBLKHcodGhpcykse3ByZWRpY2F0ZTpXfSl9fSl9LDI2MzU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMwNzg3KSxCPXkoMzE0ODMpLHc9eSgxMTA4KSxQPXkoNzU0MjQpLEY9eSg2NjU0Miksej15KDQxMjUyKSgiZmluZCIsVHlwZUVy''@;'; put 'put ''cm9yKTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDp6fSx7ZmluZDpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtCKEwpfWNhdGNoKFcpe0YodGhpcywidGhyb3ciLFcpfWlmKHopcmV0dXJuIF8oeix0aGlzLEwpO3ZhciBLPVAodGhpcyksVT0wO3JldHVybiBn''@;'; put 'put ''KEssZnVuY3Rpb24oVyxZKXtpZihMKFcsVSsrKSlyZXR1cm4gWShXKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnJlc3VsdH19KX0sMzY1Nzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzE0ODMpLEI9eSgxMTA4KSx3PXko''@;'; put 'put ''NzU0MjQpLFA9eSg2MzYyNyksRj15KDY5OTE3KSxPPXkoNjY1NDIpLHo9eSg4ODc4OCksTj15KDQxMjUyKSxMPSF6JiZOKCJmbGF0TWFwIixUeXBlRXJyb3IpLEs9RihmdW5jdGlvbigpe2Zvcih2YXIgWSxxLFU9dGhpcy5pdGVyYXRvcixXPXRoaXMubWFwcGVyOzspe2lmKHE9dGhpcy5pbm5l''@;'; put 'put ''cil0cnl7aWYoIShZPUIoXyhxLm5leHQscS5pdGVyYXRvcikpKS5kb25lKXJldHVybiBZLnZhbHVlO3RoaXMuaW5uZXI9bnVsbH1jYXRjaChlZSl7TyhVLCJ0aHJvdyIsZWUpfWlmKFk9QihfKHRoaXMubmV4dCxVKSksdGhpcy5kb25lPSEhWS5kb25lKXJldHVybjt0cnl7dGhpcy5pbm5lcj1Q''@;'; put 'put ''KFcoWS52YWx1ZSx0aGlzLmNvdW50ZXIrKyksITEpfWNhdGNoKGVlKXtPKFUsInRocm93IixlZSl9fX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp8fEx9LHtmbGF0TWFwOmZ1bmN0aW9uKFcpe0IodGhpcyk7dHJ5e2coVyl9Y2F0Y2goWSl7Tyh0aGlz''@;'; put 'put ''LCJ0aHJvdyIsWSl9cmV0dXJuIEw/XyhMLHRoaXMsVyk6bmV3IEsodyh0aGlzKSx7bWFwcGVyOlcsaW5uZXI6bnVsbH0pfX0pfSwzMTM1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMDc4NyksQj15KDMxNDgzKSx3PXkoMTEwOCksUD15''@;'; put 'put ''KDc1NDI0KSxGPXkoNjY1NDIpLHo9eSg0MTI1MikoImZvckVhY2giLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2ZvckVhY2g6ZnVuY3Rpb24oTCl7dyh0aGlzKTt0cnl7QihMKX1jYXRjaChXKXtGKHRoaXMsInRocm93IixXKX1p''@;'; put 'put ''Zih6KXJldHVybiBfKHosdGhpcyxMKTt2YXIgSz1QKHRoaXMpLFU9MDtnKEssZnVuY3Rpb24oVyl7TChXLFUrKyl9LHtJU19SRUNPUkQ6ITB9KX19KX0sNzEzNTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzE0ODMpLEI9eSgxMTA4KSx3''@;'; put 'put ''PXkoNzU0MjQpLFA9eSg2OTkxNyksRj15KDQyOTI2KSxPPXkoNjY1NDIpLHo9eSg0MTI1MiksTj15KDg4Nzg4KSxMPSFOJiZ6KCJtYXAiLFR5cGVFcnJvciksSz1QKGZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5pdGVyYXRvcixXPUIoXyh0aGlzLm5leHQsVSkpO2lmKCEodGhpcy5kb25lPSEhVy5k''@;'; put 'put ''b25lKSlyZXR1cm4gRihVLHRoaXMubWFwcGVyLFtXLnZhbHVlLHRoaXMuY291bnRlcisrXSwhMCl9KTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpOfHxMfSx7bWFwOmZ1bmN0aW9uKFcpe0IodGhpcyk7dHJ5e2coVyl9Y2F0Y2goWSl7Tyh0aGlzLCJ0aHJv''@;'; put 'put ''dyIsWSl9cmV0dXJuIEw/XyhMLHRoaXMsVyk6bmV3IEsodyh0aGlzKSx7bWFwcGVyOld9KX19KX0sNTMzNDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMwNzg3KSxnPXkoMzE0ODMpLEI9eSgxMTA4KSx3PXkoNzU0MjQpLFA9eSg2NjU0MiksRj15KDQxMjUy''@;'; put 'put ''KSxPPXkoNDAyMjApLHo9eSg1NTU5MiksTj1UeXBlRXJyb3IsTD16KGZ1bmN0aW9uKCl7W10ua2V5cygpLnJlZHVjZShmdW5jdGlvbigpe30sdm9pZCAwKX0pLEs9IUwmJkYoInJlZHVjZSIsTik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6THx8S30se3Jl''@;'; put 'put ''ZHVjZTpmdW5jdGlvbihXKXtCKHRoaXMpO3RyeXtnKFcpfWNhdGNoKG5lKXtQKHRoaXMsInRocm93IixuZSl9dmFyIFk9YXJndW1lbnRzLmxlbmd0aDwyLHE9WT92b2lkIDA6YXJndW1lbnRzWzFdO2lmKEspcmV0dXJuIE8oSyx0aGlzLFk/W1ddOltXLHFdKTt2YXIgZWU9dyh0aGlzKSxKPTA7''@;'; put 'put ''aWYoXyhlZSxmdW5jdGlvbihuZSl7WT8oWT0hMSxxPW5lKTpxPVcocSxuZSxKKSxKKyt9LHtJU19SRUNPUkQ6ITB9KSxZKXRocm93IG5ldyBOKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIHF9fSl9LDkzNzg6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzA3ODcpLEI9eSgzMTQ4Myksdz15KDExMDgpLFA9eSg3NTQyNCksRj15KDY2NTQyKSx6PXkoNDEyNTIpKCJzb21lIixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9''@;'; put 'put ''LHtzb21lOmZ1bmN0aW9uKEwpe3codGhpcyk7dHJ5e0IoTCl9Y2F0Y2goVyl7Rih0aGlzLCJ0aHJvdyIsVyl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTCk7dmFyIEs9UCh0aGlzKSxVPTA7cmV0dXJuIGcoSyxmdW5jdGlvbihXLFkpe2lmKEwoVyxVKyspKXJldHVybiBZKCl9LHtJU19SRUNPUkQ6''@;'; put 'put ''ITAsSU5URVJSVVBURUQ6ITB9KS5zdG9wcGVkfX0pfSw5NTQ5MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMTIyMDIpLGc9eSg0MDIyMCksQj15KDQ2OTI2KSx3PXkoNTg2MDcpLFA9eSg1NTU5MiksRj15KDE5MTUwKSxPPXkoOTI5OTgpLHo9eSg3NzYzOSks''@;'; put 'put ''Tj15KDg0NTI0KSxMPXkoMzY1MDYpLEs9U3RyaW5nLFU9XygiSlNPTiIsInN0cmluZ2lmeSIpLFc9dygvLi8uZXhlYyksWT13KCIiLmNoYXJBdCkscT13KCIiLmNoYXJDb2RlQXQpLGVlPXcoIiIucmVwbGFjZSksSj13KDEuLnRvU3RyaW5nKSxuZT0vW1x1RDgwMC1cdURGRkZdL2csaWU9L15b''@;'; put 'put ''XHVEODAwLVx1REJGRl0kLyxsZT0vXltcdURDMDAtXHVERkZGXSQvLG1lPSFMfHxQKGZ1bmN0aW9uKCl7dmFyIGplPV8oIlN5bWJvbCIpKCJzdHJpbmdpZnkgZGV0ZWN0aW9uIik7cmV0dXJuIltudWxsXSIhPT1VKFtqZV0pfHwie30iIT09VSh7YTpqZX0pfHwie30iIT09VShPYmplY3QoamUp''@;'; put 'put ''KX0pLF9lPVAoZnVuY3Rpb24oKXtyZXR1cm4nIlxcdWRmMDZcXHVkODM0IichPT1VKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1VKCJcdWRlYWQiKX0pLFRlPWZ1bmN0aW9uKGplLFYpe3ZhciBwPXooYXJndW1lbnRzKSxiPU4oVik7aWYoRihiKXx8dm9pZCAwIT09amUmJiFPKGpl''@;'; put 'put ''KSlyZXR1cm4gcFsxXT1mdW5jdGlvbih4LEMpe2lmKEYoYikmJihDPUIoYix0aGlzLEsoeCksQykpLCFPKEMpKXJldHVybiBDfSxnKFUsbnVsbCxwKX0sU2U9ZnVuY3Rpb24oamUsVixwKXt2YXIgYj1ZKHAsVi0xKSx4PVkocCxWKzEpO3JldHVybiBXKGllLGplKSYmIVcobGUseCl8fFcobGUs''@;'; put 'put ''amUpJiYhVyhpZSxiKT8iXFx1IitKKHEoamUsMCksMTYpOmplfTtVJiZJKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsYXJpdHk6Myxmb3JjZWQ6bWV8fF9lfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKFYscCxiKXt2YXIgeD16KGFyZ3VtZW50cyksQz1nKG1lP1RlOlUsbnVsbCx4KTtyZXR1cm4gX2Um''@;'; put 'put ''JiJzdHJpbmciPT10eXBlb2YgQz9lZShDLG5lLFNlKTpDfX0pfSw1NzcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMDc4NyksZz15KDU4Nzk1KTtJKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHcpe3ZhciBQPXt9''@;'; put 'put ''O3JldHVybiBfKHcsZnVuY3Rpb24oRixPKXtnKFAsRixPKX0se0FTX0VOVFJJRVM6ITB9KSxQfX0pfSw2OTg3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoODAyMTMpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSko''@;'; put 'put ''ImRpZmZlcmVuY2UiLGZ1bmN0aW9uKHcpe3JldHVybiAwPT09dy5zaXplfSl9LHtkaWZmZXJlbmNlOl99KX0sMTYwOTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDU1NTkyKSxnPXkoNjE4NzkpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZv''@;'; put 'put ''cmNlZDoheSg1MzUwNSkoImludGVyc2VjdGlvbiIsZnVuY3Rpb24oUCl7cmV0dXJuIDI9PT1QLnNpemUmJlAuaGFzKDEpJiZQLmhhcygyKX0pfHxfKGZ1bmN0aW9uKCl7cmV0dXJuIjMsMiIhPT1TdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLDIsM10pLmludGVyc2VjdGlvbihuZXcgU2V0''@;'; put 'put ''KFszLDJdKSkpKX0pfSx7aW50ZXJzZWN0aW9uOmd9KX0sOTU2MDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDczNjI0KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJpc0Rpc2pvaW50RnJvbSIsZnVuY3Rpb24o''@;'; put 'put ''dyl7cmV0dXJuIXd9KX0se2lzRGlzam9pbnRGcm9tOl99KX0sMTY0OTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDc0ODM5KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJpc1N1YnNldE9mIixmdW5jdGlvbih3''@;'; put 'put ''KXtyZXR1cm4gd30pfSx7aXNTdWJzZXRPZjpffSl9LDYxOTM0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg5NjA2Mik7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgiaXNTdXBlcnNldE9mIixmdW5jdGlvbih3KXty''@;'; put 'put ''ZXR1cm4hd30pfSx7aXNTdXBlcnNldE9mOl99KX0sMTAxMDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDg1MDM5KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJzeW1tZXRyaWNEaWZmZXJlbmNlIil9LHtzeW1t''@;'; put 'put ''ZXRyaWNEaWZmZXJlbmNlOl99KX0sMjY4ODk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDIwNTA3KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJ1bmlvbiIpfSx7dW5pb246X30pfSwxNDM2MDoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNTg2MDcpLGc9eSg4ODI3NSksQj15KDY0NTUwKSx3PXkoNjgzMzIpLFA9eSg1NTU5MiksRj1fKCIiLmNoYXJBdCk7SSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpQKGZ1bmN0aW9uKCl7cmV0dXJuIlx1ZDg0MiIhPT0i''@;'; put 'put ''XHV7MjBiYjd9Ii5hdCgtMil9KX0se2F0OmZ1bmN0aW9uKE4pe3ZhciBMPXcoZyh0aGlzKSksSz1MLmxlbmd0aCxVPUIoTiksVz1VPj0wP1U6SytVO3JldHVybiBXPDB8fFc+PUs/dm9pZCAwOkYoTCxXKX19KX0sMTYyMjk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2Nyks''@;'; put 'put ''Xz15KDQ2OTI2KSxnPXkoNTg2MDcpLEI9eSg4ODI3NSksdz15KDE5MTUwKSxQPXkoMzI2MzMpLEY9eSg4ODg2NyksTz15KDY4MzMyKSx6PXkoODYxMTUpLE49eSgzNzA3NSksTD15KDk2MzM5KSxLPXkoNTgwMTIpLFU9eSg4ODc4OCksVz1LKCJyZXBsYWNlIiksWT1UeXBlRXJyb3IscT1nKCIi''@;'; put 'put ''LmluZGV4T2YpLGVlPWcoIiIucmVwbGFjZSksSj1nKCIiLnNsaWNlKSxuZT1NYXRoLm1heDtJKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBsYWNlQWxsOmZ1bmN0aW9uKGxlLG1lKXt2YXIgVGUsU2UsamUsVixwLGIseCxDLFQsSCxfZT1CKHRoaXMpLGo9MCxFPSIiO2lmKFAobGUp''@;'; put 'put ''KXtpZigoVGU9RihsZSkpJiYoU2U9TyhCKE4obGUpKSksIX5xKFNlLCJnIikpKXRocm93IG5ldyBZKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKGplPXoobGUsVykpcmV0dXJuIF8oamUsbGUsX2UsbWUpO2lmKFUmJlRlKXJldHVybiBlZShP''@;'; put 'put ''KF9lKSxsZSxtZSl9Zm9yKFY9TyhfZSkscD1PKGxlKSwoYj13KG1lKSl8fChtZT1PKG1lKSksQz1uZSgxLHg9cC5sZW5ndGgpLFQ9cShWLHApOy0xIT09VDspSD1iP08obWUocCxULFYpKTpMKHAsVixULFtdLHZvaWQgMCxtZSksRSs9SihWLGosVCkrSCxqPVQreCxUPVQrQz5WLmxlbmd0aD8t''@;'; put 'put ''MTpxKFYscCxUK0MpO3JldHVybiBqPFYubGVuZ3RoJiYoRSs9SihWLGopKSxFfX0pfSw0MzI4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDk2MTgwKX0sMTM5MDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSgzOTU5NSl9LDY1NzQ1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koOTI1''@;'; put 'put ''ODApfSw4MTI2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDI2MzU3KX0sNzQ5OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDM2NTc4KX0sMjk3MDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSgzMTM1Myl9LDY1MTE3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koNzEzNTQpfSw0''@;'; put 'put ''NDIxMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDUzMzQ4KX0sMjAyOTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg5Mzc4KX0sNjg3Njg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMzOTYzKSxnPXkoNzU5NikuY2xlYXI7SSh7Z2xvYmFsOiEwLGJp''@;'; put 'put ''bmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6Xy5jbGVhckltbWVkaWF0ZSE9PWd9LHtjbGVhckltbWVkaWF0ZTpnfSl9LDEwMzYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koNjg3NjgpLHkoODIzMDYpfSw4MjMwNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxf''@;'; put 'put ''PXkoMzM5NjMpLGc9eSg3NTk2KS5zZXQsQj15KDQzMjQ5KSx3PV8uc2V0SW1tZWRpYXRlP0IoZywhMSk6ZztJKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDpfLnNldEltbWVkaWF0ZSE9PXd9LHtzZXRJbW1lZGlhdGU6d30pfSwzMjE5OnVlPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlw''@;'; put 'put ''ZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0s''@;'; put 'put ''ImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsi''@;'; put 'put ''Y2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5Ijoy''@;'; put 'put ''NTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2''@;'; put 'put ''LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6''@;'; put 'put ''IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4''@;'; put 'put ''IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5''@;'; put 'put ''cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0''@;'; put 'put ''cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJh''@;'; put 'put ''ZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0''@;'; put 'put ''ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVy''@;'; put 'put ''IjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw2Mjk1MTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBv''@;'; put 'put ''cnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEy''@;'; put 'put ''MjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2''@;'; put 'put ''Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4''@;'; put 'put ''MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2gi''@;'; put 'put ''OiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7''@;'; put 'put ''InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2Iiwi''@;'; put 'put ''aWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNI''@;'; put 'put ''QSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJo''@;'; put 'put ''YXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2gi''@;'; put 'put ''OiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNo''@;'; put 'put ''Ijoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNo''@;'; put 'put ''Ijoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24i''@;'; put 'put ''OiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDY0NTg5OnVlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIx''@;'; put 'put ''LjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMjMyNDE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0''@;'; put 'put ''MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2''@;'; put 'put ''MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNk''@;'; put 'put ''MTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlm''@;'; put 'put ''MjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYx''@;'; put 'put ''NDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1Zjgz''@;'; put 'put ''NjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3''@;'; put 'put ''Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2Ix''@;'; put 'put ''MzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNk''@;'; put 'put ''YzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4''@;'; put 'put ''M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2''@;'; put 'put ''ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4''@;'; put 'put ''ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5''@;'; put 'put ''NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2''@;'; put 'put ''MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1''@;'; put 'put ''MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFl''@;'; put 'put ''OGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2Mx''@;'; put 'put ''MmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUy''@;'; put 'put ''ZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0''@;'; put 'put ''YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2''@;'; put 'put ''YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNh''@;'; put 'put ''MTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2''@;'; put 'put ''NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5''@;'; put 'put ''ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQx''@;'; put 'put ''ZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3Yzcw''@;'; put 'put ''MjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZi''@;'; put 'put ''OGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdl''@;'; put 'put ''YmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0''@;'; put 'put ''MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIz''@;'; put 'put ''MDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNm''@;'; put 'put ''YThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1''@;'; put 'put ''ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlk''@;'; put 'put ''Y2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5''@;'; put 'put ''YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIx''@;'; put 'put ''NzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgz''@;'; put 'put ''MTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4''@;'; put 'put ''NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFh''@;'; put 'put ''MzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3''@;'; put 'put ''ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2''@;'; put 'put ''ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0Mzhi''@;'; put 'put ''NDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDE2MzY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17ckU6''@;'; put 'put ''IjYuNi4xIn19LDQzMjY3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siODc0MCIsIlx1NDNmMFx1NGMzMlx1NDYwM1x1NDVhNlx1NDU3OFx1ezI3MjY3fVx1NGQ3N1x1NDViM1x1ezI3Y2IxfVx1NGNlMlx1ezI3Y2M1fVx1M2I5NVx1NDczNlx1NDc0NFx1NGM0''@;'; put 'put ''N1x1NGM0MFx1ezI0MmJmfVx1ezIzNjE3fVx1ezI3MzUyfVx1ezI2ZThifVx1ezI3MGQyfVx1NGM1N1x1ezJhMzUxfVx1NDc0Zlx1NDVkYVx1NGM4NVx1ezI3YzZjfVx1NGQwN1x1NGFhNFx1NDZhMVx1ezI2YjIzfVx1NzIyNVx1ezI1YTU0fVx1ezIxYTYzfVx1ezIzZTA2fVx1ezIzZjYxfVx1''@;'; put 'put ''NjY0ZFx1NTZmYiJdLFsiODc2NyIsIlx1N2Q5NVx1NTkxZFx1ezI4YmI5fVx1M2RmNFx1OTczNFx1ezI3YmVmfVx1NWJkYlx1ezIxZDVlfVx1NWFhNFx1MzYyNVx1ezI5ZWIwfVx1NWFkMVx1NWJiN1x1NWNmY1x1Njc2ZVx1ODU5M1x1ezI5OTQ1fVx1NzQ2MVx1NzQ5ZFx1Mzg3NVx1ezIxZDUz''@;'; put 'put ''fVx1ezIzNjllfVx1ezI2MDIxfVx1M2VlYyJdLFsiODdhMSIsIlx1ezI1OGRlfVx1M2FmNVx1N2FmY1x1OWY5N1x1ezI0MTYxfVx1ezI4OTBkfVx1ezIzMWVhfVx1ezIwYThhfVx1ezIzMjVlfVx1NDMwYVx1ODQ4NFx1OWY5Nlx1OTQyZlx1NDkzMFx1ODYxM1x1NTg5Nlx1OTc0YVx1OTIxOFx1''@;'; put 'put ''NzlkMFx1N2EzMlx1NjY2MFx1NmEyOVx1ODg5ZFx1NzQ0Y1x1N2JjNVx1Njc4Mlx1N2EyY1x1NTI0Zlx1OTA0Nlx1MzRlNlx1NzNjNFx1ezI1ZGI5fVx1NzRjNlx1OWZjN1x1NTdiM1x1NDkyZlx1NTQ0Y1x1NDEzMVx1ezIzNjhlfVx1NTgxOFx1N2E3Mlx1ezI3YjY1fVx1OGI4Zlx1NDZhZVx1''@;'; put 'put ''ezI2ZTg4fVx1NDE4MVx1ezI1ZDk5fVx1N2JhZVx1ezIyNGJjfVx1OWZjOFx1ezIyNGMxfVx1ezIyNGM5fVx1ezIyNGNjfVx1OWZjOVx1ODUwNFx1ezIzNWJifVx1NDBiNFx1OWZjYVx1NDRlMVx1ezJhZGZmfVx1NjJjMVx1NzA2ZVx1OWZjYiJdLFsiODg0MCIsIlx1MzFjMCIsNCwiXHV7MjAx''@;'; put 'put ''MGN9XHUzMWM1XHV7MjAwZDF9XHV7MjAwY2R9XHUzMWM2XHUzMWM3XHV7MjAwY2J9XHV7MjFmZTh9XHUzMWM4XHV7MjAwY2F9XHUzMWM5XHUzMWNhXHUzMWNiXHUzMWNjXHV7MjAxMGV9XHUzMWNkXHUzMWNlXHUwMTAwXHhjMVx1MDFjZFx4YzBcdTAxMTJceGM5XHUwMTFhXHhjOFx1MDE0Y1x4''@;'; put 'put ''ZDNcdTAxZDFceGQyXHUwZmZmXHhjYVx1MDMwNFx1MWViZVx1MGZmZlx4Y2FcdTAzMGNcdTFlYzBceGNhXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAyNTFcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhm''@;'; put 'put ''OVx1MDFkNlx1MDFkOFx1MDFkYSJdLFsiODhhMSIsIlx1MDFkY1x4ZmNcdTBmZmZceGVhXHUwMzA0XHUxZWJmXHUwZmZmXHhlYVx1MDMwY1x1MWVjMVx4ZWFcdTAyNjFcdTIzZGFcdTIzZGIiXSxbIjg5NDAiLCJcdXsyYTNhOX1cdXsyMTE0NX0iXSxbIjg5NDMiLCJcdTY1MGEiXSxbIjg5NDYi''@;'; put 'put ''LCJcdTRlM2RcdTZlZGRcdTlkNGVcdTkxZGYiXSxbIjg5NGMiLCJcdXsyNzczNX1cdTY0OTFcdTRmMWFcdTRmMjhcdTRmYThcdTUxNTZcdTUxNzRcdTUxOWNcdTUxZTRcdTUyYTFcdTUyYThcdTUzM2JcdTUzNGVcdTUzZDFcdTUzZDhcdTU2ZTJcdTU4ZjBcdTU5MDRcdTU5MDdcdTU5MzJcdTU5''@;'; put 'put ''MzRcdTViNjZcdTViOWVcdTViOWZcdTVjOWFcdTVlODZcdTYwM2JcdTY1ODlcdTY3ZmVcdTY4MDRcdTY4NjVcdTZkNGVcdTcwYmNcdTc1MzVcdTdlYTRcdTdlYWNcdTdlYmFcdTdlYzdcdTdlY2ZcdTdlZGZcdTdmMDZcdTdmMzdcdTgyN2FcdTgyY2ZcdTgzNmZcdTg5YzZcdThiYmVcdThiZTJc''@;'; put 'put ''dThmNjZcdThmNjdcdThmNmUiXSxbIjg5YTEiLCJcdTc0MTFcdTdjZmNcdTdkY2RcdTY5NDZcdTdhYzlcdTUyMjciXSxbIjg5YWIiLCJcdTkxOGNcdTc4YjhcdTkxNWVcdTgwYmMiXSxbIjg5YjAiLCJcdThkMGJcdTgwZjZcdXsyMDllN30iXSxbIjg5YjUiLCJcdTgwOWZcdTllYzdcdTRjY2Rc''@;'; put 'put ''dTlkYzlcdTllMGNcdTRjM2VcdXsyOWRmNn1cdXsyNzAwZX1cdTllMGFcdXsyYTEzM31cdTM1YzEiXSxbIjg5YzEiLCJcdTZlOWFcdTgyM2VcdTc1MTkiXSxbIjg5YzUiLCJcdTQ5MTFcdTlhNmNcdTlhOGZcdTlmOTlcdTc5ODdcdXsyODQ2Y31cdXsyMWRjYX1cdXsyMDVkMH1cdXsyMmFlNn1c''@;'; put 'put ''dTRlMjRcdTRlODFcdTRlODBcdTRlODdcdTRlYmZcdTRlZWJcdTRmMzdcdTM0NGNcdTRmYmRcdTNlNDhcdTUwMDNcdTUwODhcdTM0N2RcdTM0OTNcdTM0YTVcdTUxODZcdTU5MDVcdTUxZGJcdTUxZmNcdTUyMDVcdTRlODlcdTUyNzlcdTUyOTBcdTUzMjdcdTM1YzdcdTUzYTlcdTM1NTFcdTUz''@;'; put 'put ''YjBcdTM1NTNcdTUzYzJcdTU0MjNcdTM1NmRcdTM1NzJcdTM2ODFcdTU0OTNcdTU0YTNcdTU0YjRcdTU0YjlcdTU0ZDBcdTU0ZWZcdTU1MThcdTU1MjNcdTU1MjhcdTM1OThcdTU1M2ZcdTM1YTVcdTM1YmZcdTU1ZDdcdTM1YzUiXSxbIjhhNDAiLCJcdXsyN2Q4NH1cdTU1MjUiXSxbIjhhNDMi''@;'; put 'put ''LCJcdXsyMGM0Mn1cdXsyMGQxNX1cdXsyNTEyYn1cdTU1OTBcdXsyMmNjNn1cdTM5ZWNcdXsyMDM0MX1cdThlNDZcdXsyNGRiOH1cdXsyOTRlNX1cdTQwNTNcdXsyODBiZX1cdTc3N2FcdXsyMmMzOH1cdTNhMzRcdTQ3ZDVcdXsyODE1ZH1cdXsyNjlmMn1cdXsyNGRlYX1cdTY0ZGRcdXsyMGQ3''@;'; put 'put ''Y31cdXsyMGZiNH1cdXsyMGNkNX1cdXsyMTBmNH1cdTY0OGRcdThlN2VcdXsyMGU5Nn1cdXsyMGMwYn1cdXsyMGY2NH1cdXsyMmNhOX1cdXsyODI1Nn1cdXsyNDRkM30iXSxbIjhhNjQiLCJcdXsyMGQ0Nn1cdXsyOWE0ZH1cdXsyODBlOX1cdTQ3ZjRcdXsyNGVhN31cdXsyMmNjMn1cdTlhYjJc''@;'; put 'put ''dTNhNjdcdXsyOTVmNH1cdTNmZWRcdTM1MDZcdXsyNTJjN31cdXsyOTdkNH1cdXsyNzhjOH1cdXsyMmQ0NH1cdTlkNmVcdTk4MTUiXSxbIjhhNzYiLCJcdTQzZDlcdXsyNjBhNX1cdTY0YjRcdTU0ZTNcdXsyMmQ0Y31cdXsyMmJjYX1cdXsyMTA3N31cdTM5ZmJcdXsyMTA2Zn0iXSxbIjhhYTEi''@;'; put 'put ''LCJcdXsyNjZkYX1cdXsyNjcxNn1cdXsyNzlhMH1cdTY0ZWFcdXsyNTA1Mn1cdXsyMGM0M31cdThlNjhcdXsyMjFhMX1cdXsyOGI0Y31cdXsyMDczMX0iXSxbIjhhYWMiLCJcdTQ4MGJcdXsyMDFhOX1cdTNmZmFcdTU4NzNcdXsyMmQ4ZH0iXSxbIjhhYjIiLCJcdXsyNDVjOH1cdXsyMDRmY31c''@;'; put 'put ''dXsyNjA5N31cdXsyMGY0Y31cdXsyMGQ5Nn1cdTU1NzlcdTQwYmJcdTQzYmEiXSxbIjhhYmIiLCJcdTRhYjRcdXsyMmE2Nn1cdXsyMTA5ZH1cdTgxYWFcdTk4ZjVcdXsyMGQ5Y31cdTYzNzlcdTM5ZmVcdXsyMjc3NX1cdThkYzBcdTU2YTFcdTY0N2NcdTNlNDMiXSxbIjhhYzkiLCJcdXsyYTYw''@;'; put 'put ''MX1cdXsyMGUwOX1cdXsyMmFjZn1cdXsyMmNjOX0iXSxbIjhhY2UiLCJcdXsyMTBjOH1cdXsyMzljMn1cdTM5OTJcdTNhMDZcdXsyODI5Yn1cdTM1NzhcdXsyNWU0OX1cdXsyMjBjN31cdTU2NTJcdXsyMGYzMX1cdXsyMmNiMn1cdXsyOTcyMH1cdTM0YmNcdTZjM2RcdXsyNGUzYn0iXSxbIjhh''@;'; put 'put ''ZGYiLCJcdXsyNzU3NH1cdXsyMmU4Yn1cdXsyMjIwOH1cdXsyYTY1Yn1cdXsyOGNjZH1cdXsyMGU3YX1cdXsyMGMzNH1cdXsyNjgxY31cdTdmOTNcdXsyMTBjZn1cdXsyMjgwM31cdXsyMjkzOX1cdTM1ZmJcdXsyNTFlM31cdXsyMGU4Y31cdXsyMGY4ZH1cdXsyMGVhYX1cdTNmOTNcdXsyMGYz''@;'; put 'put ''MH1cdXsyMGQ0N31cdXsyMTE0Zn1cdXsyMGU0Y30iXSxbIjhhZjYiLCJcdXsyMGVhYn1cdXsyMGJhOX1cdXsyMGQ0OH1cdXsyMTBjMH1cdXsyMTEzZH1cdTNmZjlcdXsyMjY5Nn1cdTY0MzJcdXsyMGZhZH0iXSxbIjhiNDAiLCJcdXsyMzNmNH1cdXsyNzYzOX1cdXsyMmJjZX1cdXsyMGQ3ZX1c''@;'; put 'put ''dXsyMGQ3Zn1cdXsyMmM1MX1cdXsyMmM1NX1cdTNhMThcdXsyMGU5OH1cdXsyMTBjN31cdXsyMGYyZX1cdXsyYTYzMn1cdXsyNmI1MH1cdXsyOGNkMn1cdXsyOGQ5OX1cdXsyOGNjYX1cdTk1YWFcdTU0Y2NcdTgyYzRcdTU1YjkiXSxbIjhiNTUiLCJcdXsyOWVjM31cdTljMjZcdTlhYjZcdXsy''@;'; put 'put ''Nzc1ZX1cdXsyMmRlZX1cdTcxNDBcdTgxNmRcdTgwZWNcdTVjMWNcdXsyNjU3Mn1cdTgxMzRcdTM3OTdcdTUzNWZcdXsyODBiZH1cdTkxYjZcdXsyMGVmYX1cdXsyMGUwZn1cdXsyMGU3N31cdXsyMGVmYn1cdTM1ZGRcdXsyNGRlYn1cdTM2MDlcdXsyMGNkNn1cdTU2YWZcdXsyMjdiNX1cdXsy''@;'; put 'put ''MTBjOX1cdXsyMGUxMH1cdXsyMGU3OH1cdXsyMTA3OH1cdXsyMTE0OH1cdXsyODIwN31cdXsyMTQ1NX1cdXsyMGU3OX1cdXsyNGU1MH1cdXsyMmRhNH1cdTVhNTRcdXsyMTAxZH1cdXsyMTAxZX1cdXsyMTBmNX1cdXsyMTBmNn1cdTU3OWNcdXsyMGUxMX0iXSxbIjhiYTEiLCJcdXsyNzY5NH1c''@;'; put 'put ''dXsyODJjZH1cdXsyMGZiNX1cdXsyMGU3Yn1cdXsyNTE3ZX1cdTM3MDNcdXsyMGZiNn1cdXsyMTE4MH1cdXsyNTJkOH1cdXsyYTJiZH1cdXsyNDlkYX1cdXsyMTgzYX1cdXsyNDE3N31cdXsyODI3Y31cdTU4OTlcdTUyNjhcdTM2MWFcdXsyNTczZH1cdTdiYjJcdTViNjhcdTQ4MDBcdTRiMmNc''@;'; put 'put ''dTlmMjdcdTQ5ZTdcdTljMWZcdTliOGRcdXsyNWI3NH1cdXsyMzEzZH1cdTU1ZmJcdTM1ZjJcdTU2ODlcdTRlMjhcdTU5MDJcdXsyMWJjMX1cdXsyZjg3OH1cdTk3NTFcdXsyMDA4Nn1cdTRlNWJcdTRlYmJcdTM1M2VcdTVjMjNcdTVmNTFcdTVmYzRcdTM4ZmFcdTYyNGNcdTY1MzVcdTZiN2Fc''@;'; put 'put ''dTZjMzVcdTZjM2FcdTcwNmNcdTcyMmJcdTRlMmNcdTcyYWRcdXsyNDhlOX1cdTdmNTJcdTc5M2JcdTdjZjlcdTdmNTNcdXsyNjI2YX1cdTM0YzEiXSxbIjhiZGUiLCJcdXsyNjM0Yn1cdTgwMDJcdTgwODBcdXsyNjYxMn1cdXsyNjk1MX1cdTUzNWRcdTg4NjRcdTg5YzFcdXsyNzhiMn1cdThi''@;'; put 'put ''YTBcdThkMWRcdTk0ODVcdTk1NzhcdTk1N2ZcdTk1ZThcdXsyOGUwZn1cdTk3ZTZcdTk4NzVcdTk4Y2VcdTk4ZGVcdTk5NjNcdXsyOTgxMH1cdTljN2NcdTllMWZcdTllYzRcdTZiNmZcdWY5MDdcdTRlMzdcdXsyMDA4N31cdTk2MWRcdTYyMzdcdTk0YTIiXSxbIjhjNDAiLCJcdTUwM2JcdTZk''@;'; put 'put ''ZmVcdXsyOWM3M31cdTlmYTZcdTNkYzlcdTg4OGZcdXsyNDE0ZX1cdTcwNzdcdTVjZjVcdTRiMjBcdXsyNTFjZH1cdTM1NTlcdXsyNWQzMH1cdTYxMjJcdXsyOGEzMn1cdThmYTdcdTkxZjZcdTcxOTFcdTY3MTlcdTczYmFcdXsyMzI4MX1cdXsyYTEwN31cdTNjOGJcdXsyMTk4MH1cdTRiMTBc''@;'; put 'put ''dTc4ZTRcdTc0MDJcdTUxYWVcdXsyODcwZn1cdTQwMDlcdTZhNjNcdXsyYTJiYX1cdTQyMjNcdTg2MGZcdXsyMGE2Zn1cdTdhMmFcdXsyOTk0N31cdXsyOGFlYX1cdTk3NTVcdTcwNGRcdTUzMjRcdXsyMjA3ZX1cdTkzZjRcdTc2ZDlcdXsyODllM31cdTlmYTdcdTc3ZGRcdTRlYTNcdTRmZjBc''@;'; put 'put ''dTUwYmNcdTRlMmZcdTRmMTdcdTlmYThcdTU0MzRcdTdkOGJcdTU4OTJcdTU4ZDBcdXsyMWRiNn1cdTVlOTJcdTVlOTlcdTVmYzJcdXsyMjcxMn1cdTY1OGIiXSxbIjhjYTEiLCJcdXsyMzNmOX1cdTY5MTlcdTZhNDNcdXsyM2M2M31cdTZjZmYiXSxbIjhjYTciLCJcdTcyMDBcdXsyNDUwNX1c''@;'; put 'put ''dTczOGNcdTNlZGJcdXsyNGExM31cdTViMTVcdTc0YjlcdThiODNcdXsyNWNhNH1cdXsyNTY5NX1cdTdhOTNcdTdiZWNcdTdjYzNcdTdlNmNcdTgyZjhcdTg1OTdcdTlmYTlcdTg4OTBcdTlmYWFcdThlYjlcdTlmYWJcdThmY2ZcdTg1NWZcdTk5ZTBcdTkyMjFcdTlmYWNcdXsyOGRiOX1cdXsy''@;'; put 'put ''MTQzZn1cdTQwNzFcdTQyYTJcdTVhMWEiXSxbIjhjYzkiLCJcdTk4NjhcdTY3NmJcdTQyNzZcdTU3M2QiXSxbIjhjY2UiLCJcdTg1ZDZcdXsyNDk3Yn1cdTgyYmZcdXsyNzEwZH1cdTRjODFcdXsyNmQ3NH1cdTVkN2JcdXsyNmIxNX1cdXsyNmZiZX1cdTlmYWRcdTlmYWVcdTViOTZcdTlmYWZc''@;'; put 'put ''dTY2ZTdcdTdlNWJcdTZlNTdcdTc5Y2FcdTNkODhcdTQ0YzNcdXsyMzI1Nn1cdXsyMjc5Nn1cdTQzOWFcdTQ1MzYiXSxbIjhjZTYiLCJcdTVjZDVcdXsyM2IxYX1cdThhZjlcdTVjNzhcdTNkMTJcdXsyMzU1MX1cdTVkNzhcdTlmYjJcdTcxNTdcdTQ1NThcdXsyNDBlY31cdXsyMWUyM31cdTRj''@;'; put 'put ''NzdcdTM5NzhcdTM0NGFcdXsyMDFhNH1cdXsyNmM0MX1cdThhY2NcdTRmYjRcdXsyMDIzOX1cdTU5YmZcdTgxNmNcdTk4NTZcdXsyOThmYX1cdTVmM2IiXSxbIjhkNDAiLCJcdXsyMGI5Zn0iXSxbIjhkNDIiLCJcdXsyMjFjMX1cdXsyODk2ZH1cdTQxMDJcdTQ2YmJcdXsyOTA3OX1cdTNmMDdc''@;'; put 'put ''dTlmYjNcdXsyYTFiNX1cdTQwZjhcdTM3ZDZcdTQ2ZjdcdXsyNmM0Nn1cdTQxN2NcdXsyODZiMn1cdXsyNzNmZn1cdTQ1NmRcdTM4ZDRcdXsyNTQ5YX1cdTQ1NjFcdTQ1MWJcdTRkODlcdTRjN2JcdTRkNzZcdTQ1ZWFcdTNmYzhcdXsyNGIwZn1cdTM2NjFcdTQ0ZGVcdTQ0YmRcdTQxZWRcdTVk''@;'; put 'put ''M2VcdTVkNDhcdTVkNTZcdTNkZmNcdTM4MGZcdTVkYTRcdTVkYjlcdTM4MjBcdTM4MzhcdTVlNDJcdTVlYmRcdTVmMjVcdTVmODNcdTM5MDhcdTM5MTRcdTM5M2ZcdTM5NGRcdTYwZDdcdTYxM2RcdTVjZTVcdTM5ODlcdTYxYjdcdTYxYjlcdTYxY2ZcdTM5YjhcdTYyMmNcdTYyOTBcdTYyZTVc''@;'; put 'put ''dTYzMThcdTM5ZjhcdTU2YjEiXSxbIjhkYTEiLCJcdTNhMDNcdTYzZTJcdTYzZmJcdTY0MDdcdTY0NWFcdTNhNGJcdTY0YzBcdTVkMTVcdTU2MjFcdTlmOWZcdTNhOTdcdTY1ODZcdTNhYmRcdTY1ZmZcdTY2NTNcdTNhZjJcdTY2OTJcdTNiMjJcdTY3MTZcdTNiNDJcdTY3YTRcdTY4MDBcdTNi''@;'; put 'put ''NThcdTY4NGFcdTY4ODRcdTNiNzJcdTNiNzFcdTNiN2JcdTY5MDlcdTY5NDNcdTcyNWNcdTY5NjRcdTY5OWZcdTY5ODVcdTNiYmNcdTY5ZDZcdTNiZGRcdTZhNjVcdTZhNzRcdTZhNzFcdTZhODJcdTNiZWNcdTZhOTlcdTNiZjJcdTZhYWJcdTZhYjVcdTZhZDRcdTZhZjZcdTZiODFcdTZiYzFc''@;'; put 'put ''dTZiZWFcdTZjNzVcdTZjYWFcdTNjY2JcdTZkMDJcdTZkMDZcdTZkMjZcdTZkODFcdTNjZWZcdTZkYTRcdTZkYjFcdTZlMTVcdTZlMThcdTZlMjlcdTZlODZcdXsyODljMH1cdTZlYmJcdTZlZTJcdTZlZGFcdTlmN2ZcdTZlZThcdTZlZTlcdTZmMjRcdTZmMzRcdTNkNDZcdXsyM2Y0MX1cdTZm''@;'; put 'put ''ODFcdTZmYmVcdTNkNmFcdTNkNzVcdTcxYjdcdTVjOTlcdTNkOGFcdTcwMmNcdTNkOTFcdTcwNTBcdTcwNTRcdTcwNmZcdTcwN2ZcdTcwODlcdXsyMDMyNX1cdTQzYzFcdTM1ZjFcdXsyMGVkOH0iXSxbIjhlNDAiLCJcdXsyM2VkN31cdTU3YmVcdXsyNmVkM31cdTcxM2VcdXsyNTdlMH1cdTM2''@;'; put 'put ''NGVcdTY5YTJcdXsyOGJlOX1cdTViNzRcdTdhNDlcdXsyNThlMX1cdXsyOTRkOX1cdTdhNjVcdTdhN2RcdXsyNTlhY31cdTdhYmJcdTdhYjBcdTdhYzJcdTdhYzNcdTcxZDFcdXsyNjQ4ZH1cdTQxY2FcdTdhZGFcdTdhZGRcdTdhZWFcdTQxZWZcdTU0YjJcdXsyNWMwMX1cdTdiMGJcdTdiNTVc''@;'; put 'put ''dTdiMjlcdXsyNTMwZX1cdXsyNWNmZX1cdTdiYTJcdTdiNmZcdTgzOWNcdXsyNWJiNH1cdXsyNmM3Zn1cdTdiZDBcdTg0MjFcdTdiOTJcdTdiYjhcdXsyNWQyMH1cdTNkYWRcdXsyNWM2NX1cdTg0OTJcdTdiZmFcdTdjMDZcdTdjMzVcdXsyNWNjMX1cdTdjNDRcdTdjODNcdXsyNDg4Mn1cdTdj''@;'; put 'put ''YTZcdTY2N2RcdXsyNDU3OH1cdTdjYzlcdTdjYzdcdTdjZTZcdTdjNzRcdTdjZjNcdTdjZjVcdTdjY2UiXSxbIjhlYTEiLCJcdTdlNjdcdTQ1MWRcdXsyNmU0NH1cdTdkNWRcdXsyNmVkNn1cdTc0OGRcdTdkODlcdTdkYWJcdTcxMzVcdTdkYjNcdTdkZDJcdXsyNDA1N31cdXsyNjAyOX1cdTdk''@;'; put 'put ''ZTRcdTNkMTNcdTdkZjVcdXsyMTdmOX1cdTdkZTVcdXsyODM2ZH1cdTdlMWRcdXsyNjEyMX1cdXsyNjE1YX1cdTdlNmVcdTdlOTJcdTQzMmJcdTk0NmNcdTdlMjdcdTdmNDBcdTdmNDFcdTdmNDdcdTc5MzZcdXsyNjJkMH1cdTk5ZTFcdTdmOTdcdXsyNjM1MX1cdTdmYTNcdXsyMTY2MX1cdXsy''@;'; put 'put ''MDA2OH1cdTQ1NWNcdXsyMzc2Nn1cdTQ1MDNcdXsyODMzYX1cdTdmZmFcdXsyNjQ4OX1cdTgwMDVcdTgwMDhcdTgwMWRcdTgwMjhcdTgwMmZcdXsyYTA4N31cdXsyNmNjM31cdTgwM2JcdTgwM2NcdTgwNjFcdXsyMjcxNH1cdTQ5ODlcdXsyNjYyNn1cdXsyM2RlM31cdXsyNjZlOH1cdTY3MjVc''@;'; put 'put ''dTgwYTdcdXsyOGE0OH1cdTgxMDdcdTgxMWFcdTU4YjBcdXsyMjZmNn1cdTZjN2ZcdXsyNjQ5OH1cdXsyNGZiOH1cdTY0ZTdcdXsyMTQ4YX1cdTgyMThcdXsyMTg1ZX1cdTZhNTNcdXsyNGE2NX1cdXsyNGE5NX1cdTQ0N2FcdTgyMjlcdXsyMGIwZH1cdXsyNmE1Mn1cdXsyM2Q3ZX1cdTRmZjlc''@;'; put 'put ''dXsyMTRmZH1cdTg0ZTJcdTgzNjJcdXsyNmIwYX1cdXsyNDlhN31cdXsyMzUzMH1cdXsyMTc3M31cdXsyM2RmOH1cdTgyYWFcdTY5MWJcdXsyZjk5NH1cdTQxZGIiXSxbIjhmNDAiLCJcdTg1NGJcdTgyZDBcdTgzMWFcdXsyMGUxNn1cdXsyMTdiNH1cdTM2YzFcdXsyMzE3ZH1cdXsyMzU1YX1c''@;'; put 'put ''dTgyN2JcdTgyZTJcdTgzMThcdXsyM2U4Yn1cdXsyNmRhM31cdXsyNmIwNX1cdXsyNmI5N31cdXsyMzVjZX1cdTNkYmZcdTgzMWRcdTU1ZWNcdTgzODVcdTQ1MGJcdXsyNmRhNX1cdTgzYWNcdTgzYzFcdTgzZDNcdTM0N2VcdXsyNmVkNH1cdTZhNTdcdTg1NWFcdTM0OTZcdXsyNmU0Mn1cdXsy''@;'; put 'put ''MmVlZn1cdTg0NThcdXsyNWJlNH1cdTg0NzFcdTNkZDNcdTQ0ZTRcdTZhYTdcdTg0NGFcdXsyM2NiNX1cdTc5NThcdTg0YThcdXsyNmI5Nn1cdXsyNmU3N31cdXsyNmU0M31cdTg0ZGVcdTg0MGZcdTgzOTFcdTQ0YTBcdTg0OTNcdTg0ZTRcdXsyNWM5MX1cdTQyNDBcdXsyNWNjMH1cdTQ1NDNc''@;'; put 'put ''dTg1MzRcdTVhZjJcdXsyNmU5OX1cdTQ1MjdcdTg1NzNcdTQ1MTZcdTY3YmZcdTg2MTYiXSxbIjhmYTEiLCJcdXsyODYyNX1cdXsyODYzYn1cdTg1YzFcdXsyNzA4OH1cdTg2MDJcdXsyMTU4Mn1cdXsyNzBjZH1cdXsyZjliMn1cdTQ1NmFcdTg2MjhcdTM2NDhcdXsyMThhMn1cdTUzZjdcdXsy''@;'; put 'put ''NzM5YX1cdTg2N2VcdTg3NzFcdXsyYTBmOH1cdTg3ZWVcdXsyMmMyN31cdTg3YjFcdTg3ZGFcdTg4MGZcdTU2NjFcdTg2NmNcdTY4NTZcdTQ2MGZcdTg4NDVcdTg4NDZcdXsyNzVlMH1cdXsyM2RiOX1cdXsyNzVlNH1cdTg4NWVcdTg4OWNcdTQ2NWJcdTg4YjRcdTg4YjVcdTYzYzFcdTg4YzVc''@;'; put 'put ''dTc3NzdcdXsyNzcwZn1cdTg5ODdcdTg5OGFcdTg5YTZcdTg5YTlcdTg5YTdcdTg5YmNcdXsyOGEyNX1cdTg5ZTdcdXsyNzkyNH1cdXsyN2FiZH1cdThhOWNcdTc3OTNcdTkxZmVcdThhOTBcdXsyN2E1OX1cdTdhZTlcdXsyN2IzYX1cdXsyM2Y4Zn1cdTQ3MTNcdXsyN2IzOH1cdTcxN2NcdThi''@;'; put 'put ''MGNcdThiMWZcdXsyNTQzMH1cdXsyNTU2NX1cdThiM2ZcdThiNGNcdThiNGRcdThhYTlcdXsyNGE3YX1cdThiOTBcdThiOWJcdThhYWZcdXsyMTZkZn1cdTQ2MTVcdTg4NGZcdThjOWJcdXsyN2Q1NH1cdXsyN2Q4Zn1cdXsyZjlkNH1cdTM3MjVcdXsyN2Q1M31cdThjZDZcdXsyN2Q5OH1cdXsy''@;'; put 'put ''N2RiZH1cdThkMTJcdThkMDNcdXsyMTkxMH1cdThjZGJcdTcwNWNcdThkMTFcdXsyNGNjOX1cdTNlZDBcdThkNzciXSxbIjkwNDAiLCJcdThkYTlcdXsyODAwMn1cdXsyMTAxNH1cdXsyNDk4YX1cdTNiN2NcdXsyODFiY31cdXsyNzEwY31cdTdhZTdcdThlYWRcdThlYjZcdThlYzNcdTkyZDRc''@;'; put 'put ''dThmMTlcdThmMmRcdXsyODM2NX1cdXsyODQxMn1cdThmYTVcdTkzMDNcdXsyYTI5Zn1cdXsyMGE1MH1cdThmYjNcdTQ5MmFcdXsyODlkZX1cdXsyODUzZH1cdXsyM2RiYn1cdTVlZjhcdXsyMzI2Mn1cdThmZjlcdXsyYTAxNH1cdXsyODZiY31cdXsyODUwMX1cdXsyMjMyNX1cdTM5ODBcdXsy''@;'; put 'put ''NmVkN31cdTkwMzdcdXsyODUzY31cdXsyN2FiZX1cdTkwNjFcdXsyODU2Y31cdXsyODYwYn1cdTkwYThcdXsyODcxM31cdTkwYzRcdXsyODZlNn1cdTkwYWVcdTkwZmRcdTkxNjdcdTNhZjBcdTkxYTlcdTkxYzRcdTdjYWNcdXsyODkzM31cdXsyMWU4OX1cdTkyMGVcdTZjOWZcdTkyNDFcdTky''@;'; put 'put ''NjJcdXsyNTViOX1cdTkyYjlcdXsyOGFjNn1cdXsyM2M5Yn1cdXsyOGIwY31cdXsyNTVkYn0iXSxbIjkwYTEiLCJcdXsyMGQzMX1cdTkzMmNcdTkzNmJcdXsyOGFlMX1cdXsyOGJlYn1cdTcwOGZcdTVhYzNcdXsyOGFlMn1cdXsyOGFlNX1cdTQ5NjVcdTkyNDRcdXsyOGJlY31cdXsyOGMzOX1c''@;'; put 'put ''dXsyOGJmZn1cdTkzNzNcdTk0NWJcdThlYmNcdTk1ODVcdTk1YTZcdTk0MjZcdTk1YTBcdTZmZjZcdTQyYjlcdXsyMjY3YX1cdXsyODZkOH1cdXsyMTI3Y31cdXsyM2UyZX1cdTQ5ZGZcdTZjMWNcdTk2N2JcdTk2OTZcdTQxNmNcdTk2YTNcdXsyNmVkNX1cdTYxZGFcdTk2YjZcdTc4ZjVcdXsy''@;'; put 'put ''OGFlMH1cdTk2YmRcdTUzY2NcdTQ5YTFcdXsyNmNiOH1cdXsyMDI3NH1cdXsyNjQxMH1cdXsyOTBhZn1cdXsyOTBlNX1cdXsyNGFkMX1cdXsyMTkxNX1cdXsyMzMwYX1cdTk3MzFcdTg2NDJcdTk3MzZcdTRhMGZcdTQ1M2RcdTQ1ODVcdXsyNGFlOX1cdTcwNzVcdTViNDFcdTk3MWJcdTk3NWNc''@;'; put 'put ''dXsyOTFkNX1cdTk3NTdcdTViNGFcdXsyOTFlYn1cdTk3NWZcdTk0MjVcdTUwZDBcdXsyMzBiN31cdXsyMzBiY31cdTk3ODlcdTk3OWZcdTk3YjFcdTk3YmVcdTk3YzBcdTk3ZDJcdTk3ZTBcdXsyNTQ2Y31cdTk3ZWVcdTc0MWNcdXsyOTQzM31cdTk3ZmZcdTk3ZjVcdXsyOTQxZH1cdXsyNzk3''@;'; put 'put ''YX1cdTRhZDFcdTk4MzRcdTk4MzNcdTk4NGJcdTk4NjZcdTNiMGVcdXsyNzE3NX1cdTNkNTFcdXsyMDYzMH1cdXsyNDE1Y30iXSxbIjkxNDAiLCJcdXsyNTcwNn1cdTk4Y2FcdTk4YjdcdTk4YzhcdTk4YzdcdTRhZmZcdXsyNmQyN31cdXsyMTZkM31cdTU1YjBcdTk4ZTFcdTk4ZTZcdTk4ZWNc''@;'; put 'put ''dTkzNzhcdTk5MzlcdXsyNGEyOX1cdTRiNzJcdXsyOTg1N31cdXsyOTkwNX1cdTk5ZjVcdTlhMGNcdTlhM2JcdTlhMTBcdTlhNThcdXsyNTcyNX1cdTM2YzRcdXsyOTBiMX1cdXsyOWJkNX1cdTlhZTBcdTlhZTJcdXsyOWIwNX1cdTlhZjRcdTRjMGVcdTliMTRcdTliMmRcdXsyODYwMH1cdTUw''@;'; put 'put ''MzRcdTliMzRcdXsyNjlhOH1cdTM4YzNcdXsyMzA3ZH1cdTliNTBcdTliNDBcdXsyOWQzZX1cdTVhNDVcdXsyMTg2M31cdTliOGVcdXsyNDI0Yn1cdTljMDJcdTliZmZcdTljMGNcdXsyOWU2OH1cdTlkZDRcdXsyOWZiN31cdXsyYTE5Mn1cdXsyYTFhYn1cdXsyYTBlMX1cdXsyYTEyM31cdXsy''@;'; put 'put ''YTFkZn1cdTlkN2VcdTlkODNcdXsyYTEzNH1cdTllMGVcdTY4ODgiXSxbIjkxYTEiLCJcdTlkYzRcdXsyMjE1Yn1cdXsyYTE5M31cdXsyYTIyMH1cdXsyMTkzYn1cdXsyYTIzM31cdTlkMzlcdXsyYTBiOX1cdXsyYTJiNH1cdTllOTBcdTllOTVcdTllOWVcdTllYTJcdTRkMzRcdTllYWFcdTll''@;'; put 'put ''YWZcdXsyNDM2NH1cdTllYzFcdTNiNjBcdTM5ZTVcdTNkMWRcdTRmMzJcdTM3YmVcdXsyOGMyYn1cdTlmMDJcdTlmMDhcdTRiOTZcdTk0MjRcdXsyNmRhMn1cdTlmMTdcdTlmMTZcdTlmMzlcdTU2OWZcdTU2OGFcdTlmNDVcdTk5YjhcdXsyOTA4Yn1cdTk3ZjJcdTg0N2ZcdTlmNjJcdTlmNjlc''@;'; put 'put ''dTdhZGNcdTlmOGVcdTcyMTZcdTRiYmVcdXsyNDk3NX1cdXsyNDliYn1cdTcxNzdcdXsyNDlmOH1cdXsyNDM0OH1cdXsyNGE1MX1cdTczOWVcdXsyOGJkYX1cdXsyMThmYX1cdTc5OWZcdXsyODk3ZX1cdXsyOGUzNn1cdTkzNjlcdTkzZjNcdXsyOGE0NH1cdTkyZWNcdTkzODFcdTkzY2JcdXsy''@;'; put 'put ''ODk2Y31cdXsyNDRiOX1cdTcyMTdcdTNlZWJcdTc3NzJcdTdhNDNcdTcwZDBcdXsyNDQ3M31cdXsyNDNmOH1cdTcxN2VcdXsyMTdlZn1cdTcwYTNcdXsyMThiZX1cdXsyMzU5OX1cdTNlYzdcdXsyMTg4NX1cdXsyNTQyZn1cdXsyMTdmOH1cdTM3MjJcdXsyMTZmYn1cdXsyMTgzOX1cdTM2ZTFc''@;'; put 'put ''dXsyMTc3NH1cdXsyMThkMX1cdXsyNWY0Yn1cdTM3MjNcdXsyMTZjMH1cdTU3NWJcdXsyNGEyNX1cdXsyMTNmZX1cdXsyMTJhOH0iXSxbIjkyNDAiLCJcdXsyMTNjNn1cdXsyMTRiNn1cdTg1MDNcdXsyMzZhNn1cdTg1MDNcdTg0NTVcdXsyNDk5NH1cdXsyNzE2NX1cdXsyM2UzMX1cdXsyNTU1''@;'; put 'put ''Y31cdXsyM2VmYn1cdXsyNzA1Mn1cdTQ0ZjRcdXsyMzZlZX1cdXsyOTk5ZH1cdXsyNmYyNn1cdTY3ZjlcdTM3MzNcdTNjMTVcdTNkZTdcdTU4NmNcdXsyMTkyMn1cdTY4MTBcdTQwNTdcdXsyMzczZn1cdXsyNDBlMX1cdXsyNDA4Yn1cdXsyNDEwZn1cdXsyNmMyMX1cdTU0Y2JcdTU2OWVcdXsy''@;'; put 'put ''NjZiMX1cdTU2OTJcdXsyMGZkZn1cdXsyMGJhOH1cdXsyMGUwZH1cdTkzYzZcdXsyOGIxM31cdTkzOWNcdTRlZjhcdTUxMmJcdTM4MTlcdXsyNDQzNn1cdTRlYmNcdXsyMDQ2NX1cdXsyMDM3Zn1cdTRmNGJcdTRmOGFcdXsyNTY1MX1cdTVhNjhcdXsyMDFhYn1cdXsyMDNjYn1cdTM5OTlcdXsy''@;'; put 'put ''MDMwYX1cdXsyMDQxNH1cdTM0MzVcdTRmMjlcdXsyMDJjMH1cdXsyOGViM31cdXsyMDI3NX1cdThhZGFcdXsyMDIwY31cdTRlOTgiXSxbIjkyYTEiLCJcdTUwY2RcdTUxMGRcdTRmYTJcdTRmMDNcdXsyNGEwZX1cdXsyM2U4YX1cdTRmNDJcdTUwMmVcdTUwNmNcdTUwODFcdTRmY2NcdTRmZTVc''@;'; put 'put ''dTUwNThcdTUwZmNcdTUxNTlcdTUxNWJcdTUxNWRcdTUxNWVcdTZlNzZcdXsyMzU5NX1cdXsyM2UzOX1cdXsyM2ViZn1cdTZkNzJcdXsyMTg4NH1cdXsyM2U4OX1cdTUxYThcdTUxYzNcdXsyMDVlMH1cdTQ0ZGRcdXsyMDRhM31cdXsyMDQ5Mn1cdXsyMDQ5MX1cdThkN2FcdXsyOGE5Y31cdXsy''@;'; put 'put ''MDcwZX1cdTUyNTlcdTUyYTRcdXsyMDg3M31cdTUyZTFcdTkzNmVcdTQ2N2FcdTcxOGNcdXsyNDM4Y31cdXsyMGMyMH1cdXsyNDlhY31cdXsyMTBlNH1cdTY5ZDFcdXsyMGUxZH1cdTc0NzlcdTNlZGVcdTc0OTlcdTc0MTRcdTc0NTZcdTczOThcdTRiOGVcdXsyNGFiY31cdXsyNDA4ZH1cdTUz''@;'; put 'put ''ZDBcdTM1ODRcdTcyMGZcdXsyNDBjOX1cdTU1YjRcdXsyMDM0NX1cdTU0Y2RcdXsyMGJjNn1cdTU3MWRcdTkyNWRcdTk2ZjRcdTkzNjZcdTU3ZGRcdTU3OGRcdTU3N2ZcdTM2M2VcdTU4Y2JcdTVhOTlcdXsyOGE0Nn1cdXsyMTZmYX1cdXsyMTc2Zn1cdXsyMTcxMH1cdTVhMmNcdTU5YjhcdTky''@;'; put 'put ''OGZcdTVhN2VcdTVhY2ZcdTVhMTJcdXsyNTk0Nn1cdXsyMTlmM31cdXsyMTg2MX1cdXsyNDI5NX1cdTM2ZjVcdTZkMDVcdTc0NDNcdTVhMjFcdXsyNWU4M30iXSxbIjkzNDAiLCJcdTVhODFcdXsyOGJkN31cdXsyMDQxM31cdTkzZTBcdTc0OGNcdXsyMTMwM31cdTcxMDVcdTQ5NzJcdTk0MDhc''@;'; put 'put ''dXsyODlmYn1cdTkzYmRcdTM3YTBcdTVjMWVcdTVjOWVcdTVlNWVcdTVlNDhcdXsyMTk5Nn1cdXsyMTk3Y31cdXsyM2FlZX1cdTVlY2RcdTViNGZcdXsyMTkwM31cdXsyMTkwNH1cdTM3MDFcdXsyMThhMH1cdTM2ZGRcdXsyMTZmZX1cdTM2ZDNcdTgxMmFcdXsyOGE0N31cdXsyMWRiYX1cdXsy''@;'; put 'put ''MzQ3Mn1cdXsyODlhOH1cdTVmMGNcdTVmMGVcdXsyMTkyN31cdXsyMTdhYn1cdTVhNmJcdXsyMTczYn1cdTViNDRcdTg2MTRcdXsyNzVmZH1cdTg4NjBcdTYwN2VcdXsyMjg2MH1cdXsyMjYyYn1cdTVmZGJcdTNlYjhcdXsyMjVhZn1cdXsyMjViZX1cdXsyOTA4OH1cdXsyNmY3M31cdTYxYzBc''@;'; put 'put ''dXsyMDAzZX1cdXsyMDA0Nn1cdXsyMjYxYn1cdTYxOTlcdTYxOThcdTYwNzVcdXsyMmM5Yn1cdXsyMmQwN31cdXsyNDZkNH1cdXsyOTE0ZH0iXSxbIjkzYTEiLCJcdTY0NzFcdXsyNDY2NX1cdXsyMmI2YX1cdTNhMjlcdXsyMmIyMn1cdXsyMzQ1MH1cdXsyOThlYX1cdXsyMmU3OH1cdTYzMzdc''@;'; put 'put ''dXsyYTQ1Yn1cdTY0YjZcdTYzMzFcdTYzZDFcdXsyNDllM31cdXsyMmQ2N31cdTYyYTRcdXsyMmNhMX1cdTY0M2JcdTY1NmJcdTY5NzJcdTNiZjRcdXsyMzA4ZX1cdXsyMzJhZH1cdXsyNDk4OX1cdXsyMzJhYn1cdTU1MGRcdXsyMzJlMH1cdXsyMThkOX1cdXsyOTQzZn1cdTY2Y2VcdXsyMzI4''@;'; put 'put ''OX1cdXsyMzFiM31cdTNhZTBcdTQxOTBcdXsyNTU4NH1cdXsyOGIyMn1cdXsyNTU4Zn1cdXsyMTZmY31cdXsyNTU1Yn1cdXsyNTQyNX1cdTc4ZWVcdXsyMzEwM31cdXsyMTgyYX1cdXsyMzIzNH1cdTM0NjRcdXsyMzIwZn1cdXsyMzE4Mn1cdXsyNDJjOX1cdTY2OGVcdXsyNmQyNH1cdTY2NmJc''@;'; put 'put ''dTRiOTNcdTY2MzBcdXsyNzg3MH1cdXsyMWRlYn1cdTY2NjNcdXsyMzJkMn1cdXsyMzJlMX1cdTY2MWVcdXsyNTg3Mn1cdTM4ZDFcdXsyMzgzYX1cdXsyMzdiY31cdTNiOTlcdXsyMzdhMn1cdXsyMzNmZX1cdTc0ZDBcdTNiOTZcdTY3OGZcdXsyNDYyYX1cdTY4YjZcdTY4MWVcdTNiYzRcdTZh''@;'; put 'put ''YmVcdTM4NjNcdXsyMzdkNX1cdXsyNDQ4N31cdTZhMzNcdTZhNTJcdTZhYzlcdTZiMDVcdXsyMTkxMn1cdTY1MTFcdTY4OThcdTZhNGNcdTNiZDdcdTZhN2FcdTZiNTdcdXsyM2ZjMH1cdXsyM2M5YX1cdTkzYTBcdTkyZjJcdXsyOGJlYX1cdXsyOGFjYn0iXSxbIjk0NDAiLCJcdTkyODlcdXsy''@;'; put 'put ''ODAxZX1cdXsyODlkY31cdTk0NjdcdTZkYTVcdTZmMGJcdXsyNDllY31cdTZkNjdcdXsyM2Y3Zn1cdTNkOGZcdTZlMDRcdXsyNDAzY31cdTVhM2RcdTZlMGFcdTU4NDdcdTZkMjRcdTc4NDJcdTcxM2JcdXsyNDMxYX1cdXsyNDI3Nn1cdTcwZjFcdTcyNTBcdTcyODdcdTcyOTRcdXsyNDc4Zn1c''@;'; put 'put ''dXsyNDcyNX1cdTUxNzlcdXsyNGFhNH1cdXsyMDVlYn1cdTc0N2FcdXsyM2VmOH1cdXsyMzY1Zn1cdXsyNGE0YX1cdXsyNDkxN31cdXsyNWZlMX1cdTNmMDZcdTNlYjFcdXsyNGFkZn1cdXsyOGMyM31cdXsyM2YzNX1cdTYwYTdcdTNlZjNcdTc0Y2NcdTc0M2NcdTkzODdcdTc0MzdcdTQ0OWZc''@;'; put 'put ''dXsyNmRlYX1cdTQ1NTFcdTc1ODNcdTNmNjNcdXsyNGNkOX1cdXsyNGQwNn1cdTNmNThcdTc1NTVcdTc2NzNcdXsyYTVjNn1cdTNiMTlcdTc0NjhcdXsyOGFjY31cdXsyNDlhYn1cdXsyNDk4ZX1cdTNhZmIiXSxbIjk0YTEiLCJcdTNkY2RcdXsyNGE0ZX1cdTNlZmZcdXsyNDljNX1cdXsyNDhm''@;'; put 'put ''M31cdTkxZmFcdTU3MzJcdTkzNDJcdXsyOGFlM31cdXsyMTg2NH1cdTUwZGZcdXsyNTIyMX1cdXsyNTFlN31cdTc3NzhcdXsyMzIzMn1cdTc3MGVcdTc3MGZcdTc3N2JcdXsyNDY5N31cdXsyMzc4MX1cdTNhNWVcdXsyNDhmMH1cdTc0MzhcdTc0OWJcdTNlYmZcdXsyNGFiYX1cdXsyNGFjN31c''@;'; put 'put ''dTQwYzhcdXsyNGE5Nn1cdXsyNjFhZX1cdTkzMDdcdXsyNTU4MX1cdTc4MWVcdTc4OGRcdTc4ODhcdTc4ZDJcdTczZDBcdTc5NTlcdXsyNzc0MX1cdXsyNTZlM31cdTQxMGVcdTc5OWJcdTg0OTZcdTc5YTVcdTZhMmRcdXsyM2VmYX1cdTdhM2FcdTc5ZjRcdTQxNmVcdXsyMTZlNn1cdTQxMzJc''@;'; put 'put ''dTkyMzVcdTc5ZjFcdXsyMGQ0Y31cdXsyNDk4Y31cdXsyMDI5OX1cdXsyM2RiYX1cdXsyMTc2ZX1cdTM1OTdcdTU1NmJcdTM1NzBcdTM2YWFcdXsyMDFkNH1cdXsyMGMwZH1cdTdhZTJcdTVhNTlcdXsyMjZmNX1cdXsyNWFhZn1cdXsyNWE5Y31cdTVhMGRcdXsyMDI1Yn1cdTc4ZjBcdTVhMmFc''@;'; put 'put ''dXsyNWJjNn1cdTdhZmVcdTQxZjlcdTdjNWRcdTdjNmRcdTQyMTFcdXsyNWJiM31cdXsyNWViY31cdXsyNWVhNn1cdTdjY2RcdXsyNDlmOX1cdXsyMTdiMH1cdTdjOGVcdTdjN2NcdTdjYWVcdTZhYjJcdTdkZGNcdTdlMDdcdTdkZDNcdTdmNGVcdXsyNjI2MX0iXSxbIjk1NDAiLCJcdXsyNjE1''@;'; put 'put ''Y31cdXsyN2I0OH1cdTdkOTdcdXsyNWU4Mn1cdTQyNmFcdXsyNmI3NX1cdXsyMDkxNn1cdTY3ZDZcdXsyMDA0ZX1cdXsyMzVjZn1cdTU3YzRcdXsyNjQxMn1cdXsyNjNmOH1cdXsyNDk2Mn1cdTdmZGRcdTdiMjdcdXsyMDgyY31cdXsyNWFlOX1cdXsyNWQ0M31cdTdiMGNcdXsyNWUwZX1cdTk5''@;'; put 'put ''ZTZcdTg2NDVcdTlhNjNcdTZhMWNcdXsyMzQzZn1cdTM5ZTJcdXsyNDlmN31cdXsyNjVhZH1cdTlhMWZcdXsyNjVhMH1cdTg0ODBcdXsyNzEyN31cdXsyNmNkMX1cdTQ0ZWFcdTgxMzdcdTQ0MDJcdTgwYzZcdTgxMDlcdTgxNDJcdXsyNjdiNH1cdTk4YzNcdXsyNmE0Mn1cdTgyNjJcdTgyNjVc''@;'; put 'put ''dXsyNmE1MX1cdTg0NTNcdXsyNmRhN31cdTg2MTBcdXsyNzIxYn1cdTVhODZcdTQxN2ZcdXsyMTg0MH1cdTViMmJcdXsyMThhMX1cdTVhZTRcdXsyMThkOH1cdTg2YTBcdXsyZjliY31cdXsyM2Q4Zn1cdTg4MmRcdXsyNzQyMn1cdTVhMDIiXSxbIjk1YTEiLCJcdTg4NmVcdTRmNDVcdTg4ODdc''@;'; put 'put ''dTg4YmZcdTg4ZTZcdTg5NjVcdTg5NGRcdXsyNTY4M31cdTg5NTRcdXsyNzc4NX1cdXsyNzc4NH1cdXsyOGJmNX1cdXsyOGJkOX1cdXsyOGI5Y31cdXsyODlmOX1cdTNlYWRcdTg0YTNcdTQ2ZjVcdTQ2Y2ZcdTM3ZjJcdThhM2RcdThhMWNcdXsyOTQ0OH1cdTVmNGRcdTkyMmJcdXsyNDI4NH1c''@;'; put 'put ''dTY1ZDRcdTcxMjlcdTcwYzRcdXsyMTg0NX1cdTlkNmRcdThjOWZcdThjZTlcdXsyN2RkY31cdTU5OWFcdTc3YzNcdTU5ZjBcdTQzNmVcdTM2ZDRcdThlMmFcdThlYTdcdXsyNGMwOX1cdThmMzBcdThmNGFcdTQyZjRcdTZjNThcdTZmYmJcdXsyMjMyMX1cdTQ4OWJcdTZmNzlcdTZlOGJcdXsy''@;'; put 'put ''MTdkYX1cdTliZTlcdTM2YjVcdXsyNDkyZn1cdTkwYmJcdTkwOTdcdTU1NzFcdTQ5MDZcdTkxYmJcdTk0MDRcdXsyOGE0Yn1cdTQwNjJcdXsyOGFmY31cdTk0MjdcdXsyOGMxZH1cdXsyOGMzYn1cdTg0ZTVcdThhMmJcdTk1OTlcdTk1YTdcdTk1OTdcdTk1OTZcdXsyOGQzNH1cdTc0NDVcdTNl''@;'; put 'put ''YzJcdXsyNDhmZn1cdXsyNGE0Mn1cdXsyNDNlYX1cdTNlZTdcdXsyMzIyNX1cdTk2OGZcdXsyOGVlN31cdXsyOGU2Nn1cdXsyOGU2NX1cdTNlY2NcdXsyNDllZH1cdXsyNGE3OH1cdXsyM2ZlZX1cdTc0MTJcdTc0NmJcdTNlZmNcdTk3NDFcdXsyOTBiMH0iXSxbIjk2NDAiLCJcdTY4NDdcdTRh''@;'; put 'put ''MWRcdXsyOTA5M31cdXsyNTdkZn1cdTk3NWRcdTkzNjhcdXsyODk4OX1cdXsyOGMyNn1cdXsyOGIyZn1cdXsyNjNiZX1cdTkyYmFcdTViMTFcdThiNjlcdTQ5M2NcdTczZjlcdXsyNDIxYn1cdTk3OWJcdTk3NzFcdTk5MzhcdXsyMGYyNn1cdTVkYzFcdXsyOGJjNX1cdXsyNGFiMn1cdTk4MWZc''@;'; put 'put ''dXsyOTRkYX1cdTkyZjZcdXsyOTVkN31cdTkxZTVcdTQ0YzBcdXsyOGI1MH1cdXsyNGE2N31cdXsyOGI2NH1cdTk4ZGNcdXsyOGE0NX1cdTNmMDBcdTkyMmFcdTQ5MjVcdTg0MTRcdTk5M2JcdTk5NGRcdXsyN2IwNn1cdTNkZmRcdTk5OWJcdTRiNmZcdTk5YWFcdTlhNWNcdXsyOGI2NX1cdXsy''@;'; put 'put ''NThjOH1cdTZhOGZcdTlhMjFcdTVhZmVcdTlhMmZcdXsyOThmMX1cdTRiOTBcdXsyOTk0OH1cdTk5YmNcdTRiYmRcdTRiOTdcdTkzN2RcdTU4NzJcdXsyMTMwMn1cdTU4MjJcdXsyNDliOH0iXSxbIjk2YTEiLCJcdXsyMTRlOH1cdTc4NDRcdXsyMjcxZn1cdXsyM2RiOH1cdTY4YzVcdTNkN2Rc''@;'; put 'put ''dTk0NThcdTM5MjdcdTYxNTBcdXsyMjc4MX1cdXsyMjk2Yn1cdTYxMDdcdTljNGZcdTljNTNcdTljN2JcdTljMzVcdTljMTBcdTliN2ZcdTliY2ZcdXsyOWUyZH1cdTliOWZcdXsyYTFmNX1cdXsyYTBmZX1cdTlkMjFcdTRjYWVcdXsyNDEwNH1cdTllMThcdTRjYjBcdTlkMGNcdXsyYTFiNH1c''@;'; put 'put ''dXsyYTBlZH1cdXsyYTBmM31cdXsyOTkyZn1cdTlkYTVcdTg0YmRcdXsyNmUxMn1cdXsyNmZkZn1cdXsyNmI4Mn1cdTg1ZmNcdTQ1MzNcdXsyNmRhNH1cdXsyNmU4NH1cdXsyNmRmMH1cdTg0MjBcdTg1ZWVcdXsyNmUwMH1cdXsyMzdkN31cdXsyNjA2NH1cdTc5ZTJcdXsyMzU5Y31cdXsyMzY0''@;'; put 'put ''MH1cdTQ5MmRcdXsyNDlkZX1cdTNkNjJcdTkzZGJcdTkyYmVcdTkzNDhcdXsyMDJiZn1cdTc4YjlcdTkyNzdcdTk0NGRcdTRmZTRcdTM0NDBcdTkwNjRcdXsyNTU1ZH1cdTc4M2RcdTc4NTRcdTc4YjZcdTc4NGJcdXsyMTc1N31cdXsyMzFjOX1cdXsyNDk0MX1cdTM2OWFcdTRmNzJcdTZmZGFc''@;'; put 'put ''dTZmZDlcdTcwMWVcdTcwMWVcdTU0MTRcdXsyNDFiNX1cdTU3YmJcdTU4ZjNcdTU3OGFcdTlkMTZcdTU3ZDdcdTcxMzRcdTM0YWZcdXsyNDFhY31cdTcxZWJcdXsyNmM0MH1cdXsyNGY5N31cdTViMjhcdXsyMTdiNX1cdXsyOGE0OX0iXSxbIjk3NDAiLCJcdTYxMGNcdTVhY2VcdTVhMGJcdTQy''@;'; put 'put ''YmNcdXsyNDQ4OH1cdTM3MmNcdTRiN2JcdXsyODlmY31cdTkzYmJcdTkzYjhcdXsyMThkNn1cdXsyMGYxZH1cdTg0NzJcdXsyNmNjMH1cdXsyMTQxM31cdXsyNDJmYX1cdXsyMmMyNn1cdXsyNDNjMX1cdTU5OTRcdXsyM2RiN31cdXsyNjc0MX1cdTdkYThcdXsyNjE1Yn1cdXsyNjBhNH1cdXsy''@;'; put 'put ''NDliOX1cdXsyNDk4Yn1cdXsyODlmYX1cdTkyZTVcdTczZTJcdTNlZTlcdTc0YjRcdXsyOGI2M31cdXsyMTg5Zn1cdTNlZTFcdXsyNGFiM31cdTZhZDhcdTczZjNcdTczZmJcdTNlZDZcdXsyNGEzZX1cdXsyNGE5NH1cdXsyMTdkOX1cdXsyNGE2Nn1cdXsyMDNhN31cdXsyMTQyNH1cdXsyNDll''@;'; put 'put ''NX1cdTc0NDhcdXsyNDkxNn1cdTcwYTVcdXsyNDk3Nn1cdTkyODRcdTczZTZcdTkzNWZcdXsyMDRmZX1cdTkzMzFcdXsyOGFjZX1cdXsyOGExNn1cdTkzODZcdXsyOGJlN31cdXsyNTVkNX1cdTQ5MzVcdXsyOGE4Mn1cdTcxNmIiXSxbIjk3YTEiLCJcdXsyNDk0M31cdXsyMGNmZn1cdTU2YTRc''@;'; put 'put ''dXsyMDYxYX1cdXsyMGJlYn1cdXsyMGNiOH1cdTU1MDJcdTc5YzRcdXsyMTdmYX1cdTdkZmVcdXsyMTZjMn1cdXsyNGE1MH1cdXsyMTg1Mn1cdTQ1MmVcdTk0MDFcdTM3MGFcdXsyOGFjMH1cdXsyNDlhZH1cdTU5YjBcdXsyMThiZn1cdXsyMTg4M31cdXsyNzQ4NH1cdTVhYTFcdTM2ZTJcdXsy''@;'; put 'put ''M2Q1Yn1cdTM2YjBcdTkyNWZcdTVhNzlcdXsyOGE4MX1cdXsyMTg2Mn1cdTkzNzRcdTNjY2RcdXsyMGFiNH1cdTRhOTZcdTM5OGFcdTUwZjRcdTNkNjlcdTNkNGNcdXsyMTM5Y31cdTcxNzVcdTQyZmJcdXsyODIxOH1cdTZlMGZcdXsyOTBlNH1cdTQ0ZWJcdTZkNTdcdXsyN2U0Zn1cdTcwNjdc''@;'; put 'put ''dTZjYWZcdTNjZDZcdXsyM2ZlZH1cdXsyM2UyZH1cdTZlMDJcdTZmMGNcdTNkNmZcdXsyMDNmNX1cdTc1NTFcdTM2YmNcdTM0YzhcdTQ2ODBcdTNlZGFcdTQ4NzFcdTU5YzRcdTkyNmVcdTQ5M2VcdThmNDFcdXsyOGMxY31cdXsyNmJjMH1cdTU4MTJcdTU3YzhcdTM2ZDZcdXsyMTQ1Mn1cdTcw''@;'; put 'put ''ZmVcdXsyNDM2Mn1cdXsyNGE3MX1cdXsyMmZlM31cdXsyMTJiMH1cdXsyMjNiZH1cdTY4YjlcdTY5NjdcdXsyMTM5OH1cdXsyMzRlNX1cdXsyN2JmNH1cdXsyMzZkZn1cdXsyOGE4M31cdXsyMzdkNn1cdXsyMzNmYX1cdXsyNGM5Zn1cdTZhMWFcdXsyMzZhZH1cdXsyNmNiN31cdTg0M2VcdTQ0''@;'; put 'put ''ZGZcdTQ0Y2UiXSxbIjk4NDAiLCJcdXsyNmQyNn1cdXsyNmQ1MX1cdXsyNmM4Mn1cdXsyNmZkZX1cdTZmMTdcdXsyNzEwOX1cdTgzM2RcdXsyMTczYX1cdTgzZWRcdXsyNmM4MH1cdXsyNzA1M31cdXsyMTdkYn1cdTU5ODlcdTVhODJcdXsyMTdiM31cdTVhNjFcdTVhNzFcdXsyMTkwNX1cdXsy''@;'; put 'put ''NDFmY31cdTM3MmRcdTU5ZWZcdXsyMTczY31cdTM2YzdcdTcxOGVcdTkzOTBcdTY2OWFcdXsyNDJhNX1cdTVhNmVcdTVhMmJcdXsyNDI5M31cdTZhMmJcdXsyM2VmOX1cdXsyNzczNn1cdXsyNDQ1Yn1cdXsyNDJjYX1cdTcxMWRcdXsyNDI1OX1cdXsyODllMX1cdTRmYjBcdXsyNmQyOH1cdTVj''@;'; put 'put ''YzJcdXsyNDRjZX1cdXsyN2U0ZH1cdXsyNDNiZH1cdTZhMGNcdXsyNDI1Nn1cdXsyMTMwNH1cdTcwYTZcdTcxMzNcdXsyNDNlOX1cdTNkYTVcdTZjZGZcdXsyZjgyNX1cdXsyNGE0Zn1cdTdlNjVcdTU5ZWJcdTVkMmZcdTNkZjNcdTVmNWNcdXsyNGE1ZH1cdXsyMTdkZn1cdTdkYTRcdTg0MjYi''@;'; put 'put ''XSxbIjk4YTEiLCJcdTU0ODVcdXsyM2FmYX1cdXsyMzMwMH1cdXsyMDIxNH1cdTU3N2VcdXsyMDhkNX1cdXsyMDYxOX1cdTNmZTVcdXsyMWY5ZX1cdXsyYTJiNn1cdTcwMDNcdXsyOTE1Yn1cdTVkNzBcdTczOGZcdTdjZDNcdXsyOGE1OX1cdXsyOTQyMH1cdTRmYzhcdTdmZTdcdTcyY2RcdTcz''@;'; put 'put ''MTBcdXsyN2FmNH1cdTczMzhcdTczMzlcdXsyNTZmNn1cdTczNDFcdTczNDhcdTNlYTlcdXsyN2IxOH1cdTkwNmNcdTcxZjVcdXsyNDhmMn1cdTczZTFcdTgxZjZcdTNlY2FcdTc3MGNcdTNlZDFcdTZjYTJcdTU2ZmRcdTc0MTlcdTc0MWVcdTc0MWZcdTNlZTJcdTNlZjBcdTNlZjRcdTNlZmFc''@;'; put 'put ''dTc0ZDNcdTNmMGVcdTNmNTNcdTc1NDJcdTc1NmRcdTc1NzJcdTc1OGRcdTNmN2NcdTc1YzhcdTc1ZGNcdTNmYzBcdTc2NGRcdTNmZDdcdTc2NzRcdTNmZGNcdTc2N2FcdXsyNGY1Y31cdTcxODhcdTU2MjNcdTg5ODBcdTU4NjlcdTQwMWRcdTc3NDNcdTQwMzlcdTY3NjFcdTQwNDVcdTM1ZGJc''@;'; put 'put ''dTc3OThcdTQwNmFcdTQwNmZcdTVjNWVcdTc3YmVcdTc3Y2JcdTU4ZjJcdTc4MThcdTcwYjlcdTc4MWNcdTQwYThcdTc4MzlcdTc4NDdcdTc4NTFcdTc4NjZcdTg0NDhcdXsyNTUzNX1cdTc5MzNcdTY4MDNcdTc5MzJcdTQxMDMiXSxbIjk5NDAiLCJcdTQxMDlcdTc5OTFcdTc5OTlcdThmYmJc''@;'; put 'put ''dTdhMDZcdThmYmNcdTQxNjdcdTdhOTFcdTQxYjJcdTdhYmNcdTgyNzlcdTQxYzRcdTdhY2ZcdTdhZGJcdTQxY2ZcdTRlMjFcdTdiNjJcdTdiNmNcdTdiN2JcdTdjMTJcdTdjMWJcdTQyNjBcdTQyN2FcdTdjN2JcdTdjOWNcdTQyOGNcdTdjYjhcdTQyOTRcdTdjZWRcdThmOTNcdTcwYzBcdXsy''@;'; put 'put ''MGNjZn1cdTdkY2ZcdTdkZDRcdTdkZDBcdTdkZmRcdTdmYWVcdTdmYjRcdTcyOWZcdTQzOTdcdTgwMjBcdTgwMjVcdTdiMzlcdTgwMmVcdTgwMzFcdTgwNTRcdTNkY2NcdTU3YjRcdTcwYTBcdTgwYjdcdTgwZTlcdTQzZWRcdTgxMGNcdTczMmFcdTgxMGVcdTgxMTJcdTc1NjBcdTgxMTRcdTQ0''@;'; put 'put ''MDFcdTNiMzlcdTgxNTZcdTgxNTlcdTgxNWEiXSxbIjk5YTEiLCJcdTQ0MTNcdTU4M2FcdTgxN2NcdTgxODRcdTQ0MjVcdTgxOTNcdTQ0MmRcdTgxYTVcdTU3ZWZcdTgxYzFcdTgxZTRcdTgyNTRcdTQ0OGZcdTgyYTZcdTgyNzZcdTgyY2FcdTgyZDhcdTgyZmZcdTQ0YjBcdTgzNTdcdTk2Njlc''@;'; put 'put ''dTY5OGFcdTg0MDVcdTcwZjVcdTg0NjRcdTYwZTNcdTg0ODhcdTQ1MDRcdTg0YmVcdTg0ZTFcdTg0ZjhcdTg1MTBcdTg1MzhcdTg1NTJcdTQ1M2JcdTg1NmZcdTg1NzBcdTg1ZTBcdTQ1NzdcdTg2NzJcdTg2OTJcdTg2YjJcdTg2ZWZcdTk2NDVcdTg3OGJcdTQ2MDZcdTQ2MTdcdTg4YWVcdTg4''@;'; put 'put ''ZmZcdTg5MjRcdTg5NDdcdTg5OTFcdXsyNzk2N31cdThhMjlcdThhMzhcdThhOTRcdThhYjRcdThjNTFcdThjZDRcdThjZjJcdThkMWNcdTQ3OThcdTU4NWZcdThkYzNcdTQ3ZWRcdTRlZWVcdThlM2FcdTU1ZDhcdTU3NTRcdThlNzFcdTU1ZjVcdThlYjBcdTQ4MzdcdThlY2VcdThlZTJcdThl''@;'; put 'put ''ZTRcdThlZWRcdThlZjJcdThmYjdcdThmYzFcdThmY2FcdThmY2NcdTkwMzNcdTk5YzRcdTQ4YWRcdTk4ZTBcdTkyMTNcdTQ5MWVcdTkyMjhcdTkyNThcdTkyNmJcdTkyYjFcdTkyYWVcdTkyYmYiXSxbIjlhNDAiLCJcdTkyZTNcdTkyZWJcdTkyZjNcdTkyZjRcdTkyZmRcdTkzNDNcdTkzODRc''@;'; put 'put ''dTkzYWRcdTQ5NDVcdTQ5NTFcdTllYmZcdTk0MTdcdTUzMDFcdTk0MWRcdTk0MmRcdTk0M2VcdTQ5NmFcdTk0NTRcdTk0NzlcdTk1MmRcdTk1YTJcdTQ5YTdcdTk1ZjRcdTk2MzNcdTQ5ZTVcdTY3YTBcdTRhMjRcdTk3NDBcdTRhMzVcdTk3YjJcdTk3YzJcdTU2NTRcdTRhZTRcdTYwZThcdTk4''@;'; put 'put ''YjlcdTRiMTlcdTk4ZjFcdTU4NDRcdTk5MGVcdTk5MTlcdTUxYjRcdTk5MWNcdTk5MzdcdTk5NDJcdTk5NWRcdTk5NjJcdTRiNzBcdTk5YzVcdTRiOWRcdTlhM2NcdTliMGZcdTdhODNcdTliNjlcdTliODFcdTliZGRcdTliZjFcdTliZjRcdTRjNmRcdTljMjBcdTM3NmZcdXsyMWJjMn1cdTlk''@;'; put 'put ''NDlcdTljM2EiXSxbIjlhYTEiLCJcdTllZmVcdTU2NTBcdTlkOTNcdTlkYmRcdTlkYzBcdTlkZmNcdTk0ZjZcdThmYjZcdTllN2JcdTllYWNcdTllYjFcdTllYmRcdTllYzZcdTk0ZGNcdTllZTJcdTllZjFcdTllZjhcdTdhYzhcdTlmNDRcdXsyMDA5NH1cdXsyMDJiN31cdXsyMDNhMH1cdTY5''@;'; put 'put ''MWFcdTk0YzNcdTU5YWNcdXsyMDRkN31cdTU4NDBcdTk0YzFcdTM3YjlcdXsyMDVkNX1cdXsyMDYxNX1cdXsyMDY3Nn1cdXsyMTZiYX1cdTU3NTdcdTcxNzNcdXsyMGFjMn1cdXsyMGFjZH1cdXsyMGJiZn1cdTU0NmFcdXsyZjgzYn1cdXsyMGJjYn1cdTU0OWVcdXsyMGJmYn1cdXsyMGMzYn1c''@;'; put 'put ''dXsyMGM1M31cdXsyMGM2NX1cdXsyMGM3Y31cdTYwZTdcdXsyMGM4ZH1cdTU2N2FcdXsyMGNiNX1cdXsyMGNkZH1cdXsyMGNlZH1cdXsyMGQ2Zn1cdXsyMGRiMn1cdXsyMGRjOH1cdTY5NTVcdTljMmZcdTg3YTVcdXsyMGUwNH1cdXsyMGUwZX1cdXsyMGVkN31cdXsyMGY5MH1cdXsyMGYyZH1c''@;'; put 'put ''dXsyMGU3M31cdTVjMjBcdXsyMGZiY31cdTVlMGJcdXsyMTA1Y31cdXsyMTA0Zn1cdXsyMTA3Nn1cdTY3MWVcdXsyMTA3Yn1cdXsyMTA4OH1cdXsyMTA5Nn1cdTM2NDdcdXsyMTBiZn1cdXsyMTBkM31cdXsyMTEyZn1cdXsyMTEzYn1cdTUzNjRcdTg0YWRcdXsyMTJlM31cdXsyMTM3NX1cdXsy''@;'; put 'put ''MTMzNn1cdThiODFcdXsyMTU3N31cdXsyMTYxOX1cdXsyMTdjM31cdXsyMTdjN31cdTRlNzhcdTcwYmJcdXsyMTgyZH1cdXsyMTk2YX0iXSxbIjliNDAiLCJcdXsyMWEyZH1cdXsyMWE0NX1cdXsyMWMyYX1cdXsyMWM3MH1cdXsyMWNhY31cdXsyMWVjOH1cdTYyYzNcdXsyMWVkNX1cdXsyMWYx''@;'; put 'put ''NX1cdTcxOThcdTY4NTVcdXsyMjA0NX1cdTY5ZTlcdTM2YzhcdXsyMjI3Y31cdXsyMjNkN31cdXsyMjNmYX1cdXsyMjcyYX1cdXsyMjg3MX1cdXsyMjk0Zn1cdTgyZmRcdXsyMjk2N31cdXsyMjk5M31cdXsyMmFkNX1cdTg5YTVcdXsyMmFlOH1cdThmYTBcdXsyMmIwZX1cdTk3YjhcdXsyMmIz''@;'; put 'put ''Zn1cdTk4NDdcdTlhYmRcdXsyMmM0Y30iXSxbIjliNjIiLCJcdXsyMmM4OH1cdXsyMmNiN31cdXsyNWJlOH1cdXsyMmQwOH1cdXsyMmQxMn1cdXsyMmRiN31cdXsyMmQ5NX1cdXsyMmU0Mn1cdXsyMmY3NH1cdXsyMmZjY31cdXsyMzAzM31cdXsyMzA2Nn1cdXsyMzMxZn1cdXsyMzNkZX1cdTVm''@;'; put 'put ''YjFcdTY2NDhcdTY2YmZcdXsyN2E3OX1cdXsyMzU2N31cdXsyMzVmM31cdTcyMDFcdXsyNDliYX1cdTc3ZDdcdXsyMzYxYX1cdXsyMzcxNn1cdTdlODdcdXsyMDM0Nn1cdTU4YjVcdTY3MGUiXSxbIjliYTEiLCJcdTY5MThcdXsyM2FhN31cdXsyNzY1N31cdXsyNWZlMn1cdXsyM2UxMX1cdXsy''@;'; put 'put ''M2ViOX1cdXsyNzVmZX1cdXsyMjA5YX1cdTQ4ZDBcdTRhYjhcdXsyNDExOX1cdXsyOGE5YX1cdXsyNDJlZX1cdXsyNDMwZH1cdXsyNDAzYn1cdXsyNDMzNH1cdXsyNDM5Nn1cdXsyNGE0NX1cdXsyMDVjYX1cdTUxZDJcdXsyMDYxMX1cdTU5OWZcdXsyMWVhOH1cdTNiYmVcdXsyM2NmZn1cdXsy''@;'; put 'put ''NDQwNH1cdXsyNDRkNn1cdTU3ODhcdXsyNDY3NH1cdTM5OWJcdXsyNDcyZn1cdXsyODVlOH1cdXsyOTljOX1cdTM3NjJcdXsyMjFjM31cdThiNWVcdXsyOGI0ZX1cdTk5ZDZcdXsyNDgxMn1cdXsyNDhmYn1cdXsyNGExNX1cdTcyMDlcdXsyNGFjMH1cdXsyMGM3OH1cdTU5NjVcdXsyNGVhNX1c''@;'; put 'put ''dXsyNGY4Nn1cdXsyMDc3OX1cdThlZGFcdXsyNTAyY31cdTUyOGZcdTU3M2ZcdTcxNzFcdXsyNTI5OX1cdXsyNTQxOX1cdXsyM2Y0YX1cdXsyNGFhN31cdTU1YmNcdXsyNTQ0Nn1cdXsyNTQ2ZX1cdXsyNmI1Mn1cdTkxZDRcdTM0NzNcdXsyNTUzZn1cdXsyNzYzMn1cdXsyNTU1ZX1cdTQ3MThc''@;'; put 'put ''dXsyNTU2Mn1cdXsyNTU2Nn1cdXsyNTdjN31cdXsyNDkzZn1cdXsyNTg1ZH1cdTUwNjZcdTM0ZmJcdXsyMzNjY31cdTYwZGVcdXsyNTkwM31cdTQ3N2NcdXsyODk0OH1cdXsyNWFhZX1cdXsyNWI4OX1cdXsyNWMwNn1cdXsyMWQ5MH1cdTU3YTFcdTcxNTFcdTZmYjZcdXsyNjEwMn1cdXsyN2Mx''@;'; put 'put ''Mn1cdTkwNTZcdXsyNjFiMn1cdXsyNGY5YX1cdThiNjJcdXsyNjQwMn1cdXsyNjQ0YX0iXSxbIjljNDAiLCJcdTVkNWJcdXsyNmJmN31cdThmMzZcdXsyNjQ4NH1cdXsyMTkxY31cdThhZWFcdXsyNDlmNn1cdXsyNjQ4OH1cdXsyM2ZlZn1cdXsyNjUxMn1cdTRiYzBcdXsyNjViZn1cdXsyNjZi''@;'; put 'put ''NX1cdXsyMjcxYn1cdTk0NjVcdXsyNTdlMX1cdTYxOTVcdTVhMjdcdXsyZjhjZH1cdTRmYmJcdTU2YjlcdXsyNDUyMX1cdXsyNjZmY31cdTRlNmFcdXsyNDkzNH1cdTk2NTZcdTZkOGZcdXsyNmNiZH1cdTM2MThcdTg5NzdcdXsyNjc5OX1cdXsyNjg2ZX1cdXsyNjQxMX1cdXsyNjg1ZX1cdTcx''@;'; put 'put ''ZGZcdXsyNjhjN31cdTdiNDJcdXsyOTBjMH1cdXsyMGExMX1cdXsyNjkyNn1cdTkxMDRcdXsyNjkzOX1cdTdhNDVcdTlkZjBcdXsyNjlmYX1cdTlhMjZcdXsyNmEyZH1cdTM2NWZcdXsyNjQ2OX1cdXsyMDAyMX1cdTc5ODNcdXsyNmEzNH1cdXsyNmI1Yn1cdTVkMmNcdXsyMzUxOX1cdTgzY2Zc''@;'; put 'put ''dXsyNmI5ZH1cdTQ2ZDBcdXsyNmNhNH1cdTc1M2JcdTg4NjVcdXsyNmRhZX1cdTU4YjYiXSxbIjljYTEiLCJcdTM3MWNcdXsyMjU4ZH1cdXsyNzA0Yn1cdXsyNzFjZH1cdTNjNTRcdXsyNzI4MH1cdXsyNzI4NX1cdTkyODFcdXsyMjE3YX1cdXsyNzI4Yn1cdTkzMzBcdXsyNzJlNn1cdXsyNDlk''@;'; put 'put ''MH1cdTZjMzlcdTk0OWZcdXsyNzQ1MH1cdXsyMGVmOH1cdTg4MjdcdTg4ZjVcdXsyMjkyNn1cdXsyODQ3M31cdXsyMTdiMX1cdTZlYjhcdXsyNGEyYX1cdXsyMTgyMH1cdTM5YTRcdTM2YjlcdTVjMTBcdTc5ZTNcdTQ1M2ZcdTY2YjZcdXsyOWNhZH1cdXsyOThhNH1cdTg5NDNcdXsyNzdjY31c''@;'; put 'put ''dXsyNzg1OH1cdTU2ZDZcdTQwZGZcdXsyMTYwYX1cdTM5YTFcdXsyMzcyZn1cdXsyODBlOH1cdXsyMTNjNX1cdTcxYWRcdTgzNjZcdXsyNzlkZH1cdXsyOTFhOH1cdTVhNjdcdTRjYjdcdXsyNzBhZn1cdXsyODlhYn1cdXsyNzlmZH1cdXsyN2EwYX1cdXsyN2IwYn1cdXsyN2Q2Nn1cdXsyNDE3''@;'; put 'put ''YX1cdTdiNDNcdTc5N2VcdXsyODAwOX1cdTZmYjVcdXsyYTJkZn1cdTZhMDNcdXsyODMxOH1cdTUzYTJcdXsyNmUwN31cdTkzYmZcdTY4MzZcdTk3NWRcdXsyODE2Zn1cdXsyODAyM31cdXsyNjliNX1cdXsyMTNlZH1cdXsyMzIyZn1cdXsyODA0OH1cdTVkODVcdXsyOGMzMH1cdXsyODA4M31c''@;'; put 'put ''dTU3MTVcdTk4MjNcdXsyODk0OX1cdTVkYWJcdXsyNDk4OH1cdTY1YmVcdTY5ZDVcdTUzZDJcdXsyNGFhNX1cdXsyM2Y4MX1cdTNjMTFcdTY3MzZcdXsyODA5MH1cdXsyODBmNH1cdXsyODEyZX1cdXsyMWZhMX1cdXsyODE0Zn0iXSxbIjlkNDAiLCJcdXsyODE4OX1cdXsyODFhZn1cdXsyODIx''@;'; put 'put ''YX1cdXsyODMwNn1cdXsyODMyZn1cdXsyODM4YX1cdTM1Y2FcdXsyODQ2OH1cdXsyODZhYX1cdTQ4ZmFcdTYzZTZcdXsyODk1Nn1cdTc4MDhcdTkyNTVcdXsyODliOH1cdTQzZjJcdXsyODllN31cdTQzZGZcdXsyODllOH1cdXsyOGI0Nn1cdXsyOGJkNH1cdTU5ZjhcdXsyOGMwOX1cdThmMGJc''@;'; put 'put ''dXsyOGZjNX1cdXsyOTBlY31cdTdiNTFcdXsyOTExMH1cdXsyOTEzY31cdTNkZjdcdXsyOTE1ZX1cdXsyNGFjYX1cdThmZDBcdTcyOGZcdTU2OGJcdXsyOTRlN31cdXsyOTVlOX1cdXsyOTViMH1cdXsyOTViOH1cdXsyOTczMn1cdXsyOThkMX1cdXsyOTk0OX1cdXsyOTk2YX1cdXsyOTljM31c''@;'; put 'put ''dXsyOWEyOH1cdXsyOWIwZX1cdXsyOWQ1YX1cdXsyOWQ5Yn1cdTdlOWZcdXsyOWVmOH1cdXsyOWYyM31cdTRjYTRcdTk1NDdcdXsyYTI5M31cdTcxYTJcdXsyYTJmZn1cdTRkOTFcdTkwMTJcdXsyYTVjYn1cdTRkOWNcdXsyMGM5Y31cdThmYmVcdTU1YzEiXSxbIjlkYTEiLCJcdThmYmFcdXsy''@;'; put 'put ''MjRiMH1cdThmYjlcdXsyNGE5M31cdTQ1MDlcdTdlN2ZcdTZmNTZcdTZhYjFcdTRlZWFcdTM0ZTRcdXsyOGIyY31cdXsyNzg5ZH1cdTM3M2FcdThlODBcdXsyMTdmNX1cdXsyODAyNH1cdXsyOGI2Y31cdXsyOGI5OX1cdXsyN2EzZX1cdXsyNjZhZn1cdTNkZWJcdXsyNzY1NX1cdXsyM2NiN31c''@;'; put 'put ''dXsyNTYzNX1cdXsyNTk1Nn1cdTRlOWFcdXsyNWU4MX1cdXsyNjI1OH1cdTU2YmZcdXsyMGU2ZH1cdThlMGVcdTViNmRcdXsyM2U4OH1cdXsyNGM5ZX1cdTYzZGVcdTYyZDBcdXsyMTdmNn1cdXsyMTg3Yn1cdTY1MzBcdTU2MmRcdXsyNWM0YX1cdTU0MWFcdXsyNTMxMX1cdTNkYzZcdXsyOWQ5''@;'; put 'put ''OH1cdTRjN2RcdTU2MjJcdTU2MWVcdTdmNDlcdXsyNWVkOH1cdTU5NzVcdXsyM2Q0MH1cdTg3NzBcdTRlMWNcdXsyMGZlYX1cdXsyMGQ0OX1cdXsyMzZiYX1cdTgxMTdcdTlkNWVcdThkMThcdTc2M2JcdTljNDVcdTc2NGVcdTc3YjlcdTkzNDVcdTU0MzJcdTgxNDhcdTgyZjdcdTU2MjVcdTgx''@;'; put 'put ''MzJcdTg0MThcdTgwYmRcdTU1ZWFcdTc5NjJcdTU2NDNcdTU0MTZcdXsyMGU5ZH1cdTM1Y2VcdTU2MDVcdTU1ZjFcdTY2ZjFcdXsyODJlMn1cdTM2MmRcdTc1MzRcdTU1ZjBcdTU1YmFcdTU0OTdcdTU1NzJcdXsyMGM0MX1cdXsyMGM5Nn1cdTVlZDBcdXsyNTE0OH1cdXsyMGU3Nn1cdXsyMmM2''@;'; put 'put ''Mn0iXSxbIjllNDAiLCJcdXsyMGVhMn1cdTllYWJcdTdkNWFcdTU1ZGVcdXsyMTA3NX1cdTYyOWRcdTk3NmRcdTU0OTRcdThjY2RcdTcxZjZcdTkxNzZcdTYzZmNcdTYzYjlcdTYzZmVcdTU1NjlcdXsyMmI0M31cdTljNzJcdXsyMmViM31cdTUxOWFcdTM0ZGZcdXsyMGRhN31cdTUxYTdcdTU0''@;'; put 'put ''NGRcdTU1MWVcdTU1MTNcdTc2NjZcdThlMmRcdXsyNjg4YX1cdTc1YjFcdTgwYjZcdTg4MDRcdTg3ODZcdTg4YzdcdTgxYjZcdTg0MWNcdXsyMTBjMX1cdTQ0ZWNcdTczMDRcdXsyNDcwNn1cdTViOTBcdTgzMGJcdXsyNjg5M31cdTU2N2JcdXsyMjZmNH1cdXsyN2QyZn1cdXsyNDFhM31cdXsy''@;'; put 'put ''N2Q3M31cdXsyNmVkMH1cdXsyNzJiNn1cdTkxNzBcdXsyMTFkOX1cdTkyMDhcdXsyM2NmY31cdXsyYTZhOX1cdXsyMGVhY31cdXsyMGVmOX1cdTcyNjZcdXsyMWNhMn1cdTQ3NGVcdXsyNGZjMn1cdXsyN2ZmOX1cdXsyMGZlYn1cdTQwZmEiXSxbIjllYTEiLCJcdTljNWRcdTY1MWZcdXsyMmRh''@;'; put 'put ''MH1cdTQ4ZjNcdXsyNDdlMH1cdXsyOWQ3Y31cdXsyMGZlY31cdXsyMGUwYX1cdTYwNjJcdXsyNzVhM31cdXsyMGZlZH0iXSxbIjllYWQiLCJcdXsyNjA0OH1cdXsyMTE4N31cdTcxYTNcdTdlOGVcdTlkNTBcdTRlMWFcdTRlMDRcdTM1NzdcdTViMGRcdTZjYjJcdTUzNjdcdTM2YWNcdTM5ZGNc''@;'; put 'put ''dTUzN2RcdTM2YTVcdXsyNDYxOH1cdTU4OWFcdXsyNGI2ZX1cdTgyMmRcdTU0NGJcdTU3YWFcdXsyNWE5NX1cdXsyMDk3OX0iXSxbIjllYzUiLCJcdTNhNTJcdXsyMjQ2NX1cdTczNzRcdXsyOWVhY31cdTRkMDlcdTliZWRcdXsyM2NmZX1cdXsyOWYzMH1cdTRjNWJcdXsyNGZhOX1cdXsyOTU5''@;'; put 'put ''ZX1cdXsyOWZkZX1cdTg0NWNcdXsyM2RiNn1cdXsyNzJiMn1cdXsyNjdiM31cdXsyMzcyMH1cdTYzMmVcdTdkMjVcdXsyM2VmN31cdXsyM2UyY31cdTNhMmFcdTkwMDhcdTUyY2NcdTNlNzRcdTM2N2FcdTQ1ZTlcdXsyMDQ4ZX1cdTc2NDBcdTVhZjBcdXsyMGViNn1cdTc4N2FcdXsyN2YyZX1c''@;'; put 'put ''dTU4YTdcdTQwYmZcdTU2N2NcdTliOGJcdTVkNzRcdTc2NTRcdXsyYTQzNH1cdTllODVcdTRjZTFcdTc1ZjlcdTM3ZmJcdTYxMTlcdXsyMzBkYX1cdXsyNDNmMn0iXSxbIjllZjUiLCJcdTU2NWRcdXsyMTJhOX1cdTU3YTdcdXsyNDk2M31cdXsyOWUwNn1cdTUyMzRcdXsyNzBhZX1cdTM1YWRc''@;'; put 'put ''dTZjNGFcdTlkN2MiXSxbIjlmNDAiLCJcdTdjNTZcdTliMzlcdTU3ZGVcdXsyMTc2Y31cdTVjNTNcdTY0ZDNcdXsyOTRkMH1cdXsyNjMzNX1cdXsyNzE2NH1cdTg2YWRcdXsyMGQyOH1cdXsyNmQyMn1cdXsyNGFlMn1cdXsyMGQ3MX0iXSxbIjlmNGYiLCJcdTUxZmVcdXsyMWYwZn1cdTVkOGVc''@;'; put 'put ''dTk3MDNcdXsyMWRkMX1cdTllODFcdTkwNGNcdTdiMWZcdTliMDJcdTVjZDFcdTdiYTNcdTYyNjhcdTYzMzVcdTlhZmZcdTdiY2ZcdTliMmFcdTdjN2VcdTliMmVcdTdjNDJcdTdjODZcdTljMTVcdTdiZmNcdTliMDlcdTlmMTdcdTljMWJcdXsyNDkzZX1cdTlmNWFcdTU1NzNcdTViYzNcdTRm''@;'; put 'put ''ZmRcdTllOThcdTRmZjJcdTUyNjBcdTNlMDZcdTUyZDFcdTU3NjdcdTUwNTZcdTU5YjdcdTVlMTJcdTk3YzhcdTlkYWJcdThmNWNcdTU0NjlcdTk3YjRcdTk5NDBcdTk3YmFcdTUzMmNcdTYxMzAiXSxbIjlmYTEiLCJcdTY5MmNcdTUzZGFcdTljMGFcdTlkMDJcdTRjM2JcdTk2NDFcdTY5ODBc''@;'; put 'put ''dTUwYTZcdTc1NDZcdXsyMTc2ZH1cdTk5ZGFcdTUyNzMiXSxbIjlmYWUiLCJcdTkxNTlcdTk2ODFcdTkxNWMiXSxbIjlmYjIiLCJcdTkxNTFcdXsyOGU5N31cdTYzN2ZcdXsyNmQyM31cdTZhY2FcdTU2MTFcdTkxOGVcdTc1N2FcdTYyODVcdXsyMDNmY31cdTczNGZcdTdjNzBcdXsyNWMyMX1c''@;'; put 'put ''dXsyM2NmZH0iXSxbIjlmYzEiLCJcdXsyNDkxOX1cdTc2ZDZcdTliOWRcdTRlMmFcdXsyMGNkNH1cdTgzYmVcdTg4NDIiXSxbIjlmYzkiLCJcdTVjNGFcdTY5YzBcdTUwZWRcdTU3N2FcdTUyMWZcdTVkZjVcdTRlY2VcdTZjMzFcdXsyMDFmMn1cdTRmMzlcdTU0OWNcdTU0ZGFcdTUyOWFcdThk''@;'; put 'put ''ODJcdTM1ZmVcdTVmMGNcdTM1ZjMiXSxbIjlmZGIiLCJcdTZiNTJcdTkxN2NcdTlmYTVcdTliOTdcdTk4MmVcdTk4YjRcdTlhYmFcdTllYThcdTllODRcdTcxN2FcdTdiMTQiXSxbIjlmZTciLCJcdTZiZmFcdTg4MThcdTdmNzgiXSxbIjlmZWIiLCJcdTU2MjBcdXsyYTY0YX1cdThlNzdcdTlm''@;'; put 'put ''NTMiXSxbIjlmZjAiLCJcdThkZDRcdThlNGZcdTllMWNcdThlMDFcdTYyODJcdXsyODM3ZH1cdThlMjhcdThlNzVcdTdhZDNcdXsyNGE3N31cdTdhM2VcdTc4ZDhcdTZjZWFcdThhNjdcdTc2MDciXSxbImEwNDAiLCJcdXsyOGE1YX1cdTlmMjZcdTZjY2VcdTg3ZDZcdTc1YzNcdXsyYTJiMn1c''@;'; put 'put ''dTc4NTNcdXsyZjg0MH1cdThkMGNcdTcyZTJcdTczNzFcdThiMmRcdTczMDJcdTc0ZjFcdThjZWJcdXsyNGFiYn1cdTg2MmZcdTVmYmFcdTg4YTBcdTQ0YjciXSxbImEwNTUiLCJcdXsyMTgzYn1cdXsyNmUwNX0iXSxbImEwNTgiLCJcdThhN2VcdXsyMjUxYn0iXSxbImEwNWIiLCJcdTYwZmRc''@;'; put 'put ''dTc2NjdcdTlhZDdcdTlkNDRcdTkzNmVcdTliOGZcdTg3ZjUiXSxbImEwNjMiLCJcdTg4MGZcdThjZjdcdTczMmNcdTk3MjFcdTliYjBcdTM1ZDZcdTcyYjJcdTRjMDdcdTdjNTFcdTk5NGFcdXsyNjE1OX1cdTYxNTlcdTRjMDRcdTllOTZcdTYxN2QiXSxbImEwNzMiLCJcdTU3NWZcdTYxNmZc''@;'; put 'put ''dTYyYTZcdTYyMzlcdTYyY2VcdTNhNWNcdTYxZTJcdTUzYWFcdXsyMzNmNX1cdTYzNjRcdTY4MDJcdTM1ZDIiXSxbImEwYTEiLCJcdTVkNTdcdXsyOGJjMn1cdThmZGFcdXsyOGUzOX0iXSxbImEwYTYiLCJcdTUwZDlcdXsyMWQ0Nn1cdTc5MDZcdTUzMzJcdTk2MzhcdXsyMGYzYn1cdTQwNjUi''@;'; put 'put ''XSxbImEwYWUiLCJcdTc3ZmUiXSxbImEwYjAiLCJcdTdjYzJcdXsyNWYxYX1cdTdjZGFcdTdhMmRcdTgwNjZcdTgwNjNcdTdkNGRcdTc1MDVcdTc0ZjJcdTg5OTRcdTgyMWFcdTY3MGNcdTgwNjJcdXsyNzQ4Nn1cdTgwNWJcdTc0ZjBcdTgxMDNcdTc3MjRcdTg5ODlcdXsyNjdjY31cdTc1NTNc''@;'; put 'put ''dXsyNmVkMX1cdTg3YTlcdTg3Y2VcdTgxYzhcdTg3OGNcdThhNDlcdThjYWRcdThiNDNcdTc3MmJcdTc0ZjhcdTg0ZGFcdTM2MzVcdTY5YjJcdThkYTYiXSxbImEwZDQiLCJcdTg5YTlcdTc0NjhcdTZkYjlcdTg3YzFcdXsyNDAxMX1cdTc0ZTdcdTNkZGJcdTcxNzZcdTYwYTRcdTYxOWNcdTNj''@;'; put 'put ''ZDFcdTcxNjJcdTYwNzciXSxbImEwZTIiLCJcdTdmNzFcdXsyOGIyZH1cdTcyNTBcdTYwZTlcdTRiN2VcdTUyMjBcdTNjMThcdXsyM2NjN31cdXsyNWVkN31cdXsyNzY1Nn1cdXsyNTUzMX1cdXsyMTk0NH1cdXsyMTJmZX1cdXsyOTkwM31cdXsyNmRkY31cdXsyNzBhZH1cdTVjYzFcdXsyNjFh''@;'; put 'put ''ZH1cdXsyOGEwZn1cdXsyMzY3N31cdXsyMDBlZX1cdXsyNjg0Nn1cdXsyNGYwZX1cdTQ1NjJcdTViMWZcdXsyNjM0Y31cdTlmNTBcdTllYTZcdXsyNjI2Yn0iXSxbImEzYzAiLCJcdTI0MDAiLDMxLCJcdTI0MjEiXSxbImM2YTEiLCJcdTI0NjAiLDksIlx1MjQ3NCIsOSwiXHUyMTcwIiw5LCJc''@;'; put 'put ''dTRlMzZcdTRlM2ZcdTRlODVcdTRlYTBcdTUxODJcdTUxOTZcdTUxYWJcdTUyZjlcdTUzMzhcdTUzNjlcdTUzYjZcdTU5MGFcdTViODBcdTVkZGJcdTJmMzNcdTVlN2ZcdTVlZjRcdTVmNTBcdTVmNjFcdTY1MzRcdTY1ZTBcdTc1OTJcdTc2NzZcdThmYjVcdTk2YjZceGE4XHUwMmM2XHUzMGZk''@;'; put 'put ''XHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHVmZjNiXHVmZjNkXHUyNzNkXHUzMDQxIiwyM10sWyJjNzQwIiwiXHUzMDU5Iiw1OCwiXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0Il0sWyJjN2ExIiwiXHUzMGE1Iiw4MSwiXHUwNDEwIiw1LCJc''@;'; put 'put ''dTA0MDFcdTA0MTYiLDRdLFsiYzg0MCIsIlx1MDQxYiIsMjYsIlx1MDQ1MVx1MDQzNiIsMjUsIlx1MjFlN1x1MjFiOFx1MjFiOVx1MzFjZlx1ezIwMGNjfVx1NGU1YVx1ezIwMDhhfVx1NTIwMlx1NDQ5MSJdLFsiYzhhMSIsIlx1OWZiMFx1NTE4OFx1OWZiMVx1ezI3NjA3fSJdLFsiYzhjZCIs''@;'; put 'put ''Ilx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MzA5Ylx1MzA5Y1x1MmU4MFx1MmU4NFx1MmU4Nlx1MmU4N1x1MmU4OFx1MmU4YVx1MmU4Y1x1MmU4ZFx1MmU5NVx1MmU5Y1x1MmU5ZFx1MmVhNVx1MmVhN1x1MmVhYVx1MmVhY1x1MmVhZVx1MmViNlx1MmViY1x1''@;'; put 'put ''MmViZVx1MmVjNlx1MmVjYVx1MmVjY1x1MmVjZFx1MmVjZlx1MmVkNlx1MmVkN1x1MmVkZVx1MmVlMyJdLFsiYzhmNSIsIlx1MDI4M1x1MDI1MFx1MDI1Ylx1MDI1NFx1MDI3NVx1MDE1M1x4ZjhcdTAxNGJcdTAyOGFcdTAyNmEiXSxbImY5ZmUiLCJcdWZmZWQiXSxbImZhNDAiLCJcdXsyMDU0''@;'; put 'put ''N31cdTkyZGJcdXsyMDVkZn1cdXsyM2ZjNX1cdTg1NGNcdTQyYjVcdTczZWZcdTUxYjVcdTM2NDlcdXsyNDk0Mn1cdXsyODllNH1cdTkzNDRcdXsyMTlkYn1cdTgyZWVcdXsyM2NjOH1cdTc4M2NcdTY3NDRcdTYyZGZcdXsyNDkzM31cdXsyODlhYX1cdXsyMDJhMH1cdXsyNmJiM31cdXsyMTMw''@;'; put 'put ''NX1cdTRmYWJcdXsyMjRlZH1cdTUwMDhcdXsyNmQyOX1cdXsyN2E4NH1cdXsyMzYwMH1cdXsyNGFiMX1cdXsyMjUxM31cdTUwMjlcdXsyMDM3ZX1cdTVmYTRcdXsyMDM4MH1cdXsyMDM0N31cdTZlZGJcdXsyMDQxZn1cdTUwN2RcdTUxMDFcdTM0N2FcdTUxMGVcdTk4NmNcdTM3NDNcdTg0MTZc''@;'; put 'put ''dXsyNDlhNH1cdXsyMDQ4N31cdTUxNjBcdXsyMzNiNH1cdTUxNmFcdXsyMGJmZn1cdXsyMjBmY31cdXsyMDJlNX1cdXsyMjUzMH1cdXsyMDU4ZX1cdXsyMzIzM31cdXsyMTk4M31cdTViODJcdTg3N2RcdXsyMDViM31cdXsyM2M5OX1cdTUxYjJcdTUxYjgiXSxbImZhYTEiLCJcdTlkMzRcdTUx''@;'; put 'put ''YzlcdTUxY2ZcdTUxZDFcdTNjZGNcdTUxZDNcdXsyNGFhNn1cdTUxYjNcdTUxZTJcdTUzNDJcdTUxZWRcdTgzY2RcdTY5M2VcdXsyMzcyZH1cdTVmN2JcdTUyMGJcdTUyMjZcdTUyM2NcdTUyYjVcdTUyNTdcdTUyOTRcdTUyYjlcdTUyYzVcdTdjMTVcdTg1NDJcdTUyZTBcdTg2MGRcdXsyNmIx''@;'; put 'put ''M31cdTUzMDVcdXsyOGFkZX1cdTU1NDlcdTZlZDlcdXsyM2Y4MH1cdXsyMDk1NH1cdXsyM2ZlY31cdTUzMzNcdTUzNDRcdXsyMGJlMn1cdTZjY2JcdXsyMTcyNn1cdTY4MWJcdTczZDVcdTYwNGFcdTNlYWFcdTM4Y2NcdXsyMTZlOH1cdTcxZGRcdTQ0YTJcdTUzNmRcdTUzNzRcdXsyODZhYn1c''@;'; put 'put ''dTUzN2VcdTUzN2ZcdXsyMTU5Nn1cdXsyMTYxM31cdTc3ZTZcdTUzOTNcdXsyOGE5Yn1cdTUzYTBcdTUzYWJcdTUzYWVcdTczYTdcdXsyNTc3Mn1cdTNmNTlcdTczOWNcdTUzYzFcdTUzYzVcdTZjNDlcdTRlNDlcdTU3ZmVcdTUzZDlcdTNhYWJcdXsyMGI4Zn1cdTUzZTBcdXsyM2ZlYn1cdXsy''@;'; put 'put ''MmRhM31cdTUzZjZcdXsyMGM3N31cdTU0MTNcdTcwNzlcdTU1MmJcdTY2NTdcdTZkNWJcdTU0NmRcdXsyNmI1M31cdXsyMGQ3NH1cdTU1NWRcdTU0OGZcdTU0YTRcdTQ3YTZcdXsyMTcwZH1cdXsyMGVkZH1cdTNkYjRcdXsyMGQ0ZH0iXSxbImZiNDAiLCJcdXsyODliY31cdXsyMjY5OH1cdTU1''@;'; put 'put ''NDdcdTRjZWRcdTU0MmZcdTc0MTdcdTU1ODZcdTU1YTlcdTU2MDVcdXsyMThkN31cdXsyNDAzYX1cdTQ1NTJcdXsyNDQzNX1cdTY2YjNcdXsyMTBiNH1cdTU2MzdcdTY2Y2RcdXsyMzI4YX1cdTY2YTRcdTY2YWRcdTU2NGRcdTU2NGZcdTc4ZjFcdTU2ZjFcdTk3ODdcdTUzZmVcdTU3MDBcdTU2''@;'; put 'put ''ZWZcdTU2ZWRcdXsyOGI2Nn1cdTM2MjNcdXsyMTI0Zn1cdTU3NDZcdXsyNDFhNX1cdTZjNmVcdTcwOGJcdTU3NDJcdTM2YjFcdXsyNmM3ZX1cdTU3ZTZcdXsyMTQxNn1cdTU4MDNcdXsyMTQ1NH1cdXsyNDM2M31cdTU4MjZcdXsyNGJmNX1cdTU4NWNcdTU4YWFcdTM1NjFcdTU4ZTBcdTU4ZGNc''@;'; put 'put ''dXsyMTIzY31cdTU4ZmJcdTViZmZcdTU3NDNcdXsyYTE1MH1cdXsyNDI3OH1cdTkzZDNcdTM1YTFcdTU5MWZcdTY4YTZcdTM2YzNcdTZlNTkiXSxbImZiYTEiLCJcdXsyMTYzZX1cdTVhMjRcdTU1NTNcdXsyMTY5Mn1cdTg1MDVcdTU5YzlcdXsyMGQ0ZX1cdXsyNmM4MX1cdXsyNmQyYX1cdXsy''@;'; put 'put ''MTdkY31cdTU5ZDlcdXsyMTdmYn1cdXsyMTdiMn1cdXsyNmRhNn1cdTZkNzFcdXsyMTgyOH1cdXsyMTZkNX1cdTU5ZjlcdXsyNmU0NX1cdTVhYWJcdTVhNjNcdTM2ZTZcdXsyNDlhOX1cdTVhNzdcdTM3MDhcdTVhOTZcdTc0NjVcdTVhZDNcdXsyNmZhMX1cdXsyMjU1NH1cdTNkODVcdXsyMTkx''@;'; put 'put ''MX1cdTM3MzJcdXsyMTZiOH1cdTVlODNcdTUyZDBcdTViNzZcdTY1ODhcdTViN2NcdXsyN2EwZX1cdTQwMDRcdTQ4NWRcdXsyMDIwNH1cdTViZDVcdTYxNjBcdXsyMWEzNH1cdXsyNTljY31cdXsyMDVhNX1cdTViZjNcdTViOWRcdTRkMTBcdTVjMDVcdXsyMWI0NH1cdTVjMTNcdTczY2VcdTVj''@;'; put 'put ''MTRcdXsyMWNhNX1cdXsyNmIyOH1cdTVjNDlcdTQ4ZGRcdTVjODVcdTVjZTlcdTVjZWZcdTVkOGJcdXsyMWRmOX1cdXsyMWUzN31cdTVkMTBcdTVkMThcdTVkNDZcdXsyMWVhNH1cdTVjYmFcdTVkZDdcdTgyZmNcdTM4MmRcdXsyNDkwMX1cdXsyMjA0OX1cdXsyMjE3M31cdTgyODdcdTM4MzZc''@;'; put 'put ''dTNiYzJcdTVlMmVcdTZhOGFcdTVlNzVcdTVlN2FcdXsyNDRiY31cdXsyMGNkM31cdTUzYTZcdTRlYjdcdTVlZDBcdTUzYThcdXsyMTc3MX1cdTVlMDlcdTVlZjRcdXsyODQ4Mn0iXSxbImZjNDAiLCJcdTVlZjlcdTVlZmJcdTM4YTBcdTVlZmNcdTY4M2VcdTk0MWJcdTVmMGRcdXsyMDFjMX1c''@;'; put 'put ''dXsyZjg5NH1cdTNhZGVcdTQ4YWVcdXsyMTMzYX1cdTVmM2FcdXsyNjg4OH1cdXsyMjNkMH1cdTVmNThcdXsyMjQ3MX1cdTVmNjNcdTk3YmRcdXsyNmU2ZX1cdTVmNzJcdTkzNDBcdXsyOGEzNn1cdTVmYTdcdTVkYjZcdTNkNWZcdXsyNTI1MH1cdXsyMWY2YX1cdXsyNzBmOH1cdXsyMjY2OH1c''@;'; put 'put ''dTkxZDZcdXsyMDI5ZX1cdXsyOGEyOX1cdTYwMzFcdTY2ODVcdXsyMTg3N31cdTM5NjNcdTNkYzdcdTM2MzlcdTU3OTBcdXsyMjdiNH1cdTc5NzFcdTNlNDBcdTYwOWVcdTYwYTRcdTYwYjNcdXsyNDk4Mn1cdXsyNDk4Zn1cdXsyN2E1M31cdTc0YTRcdTUwZTFcdTVhYTBcdTYxNjRcdTg0MjRc''@;'; put 'put ''dTYxNDJcdXsyZjhhNn1cdXsyNmVkMn1cdTYxODFcdTUxZjRcdXsyMDY1Nn1cdTYxODdcdTViYWFcdXsyM2ZiN30iXSxbImZjYTEiLCJcdXsyMjg1Zn1cdTYxZDNcdXsyOGI5ZH1cdXsyOTk1ZH1cdTYxZDBcdTM5MzJcdXsyMjk4MH1cdXsyMjhjMX1cdTYwMjNcdTYxNWNcdTY1MWVcdTYzOGJc''@;'; put 'put ''dXsyMDExOH1cdTYyYzVcdXsyMTc3MH1cdTYyZDVcdXsyMmUwZH1cdTYzNmNcdXsyNDlkZn1cdTNhMTdcdTY0MzhcdTYzZjhcdXsyMTM4ZX1cdXsyMTdmY31cdTY0OTBcdTZmOGFcdXsyMmUzNn1cdTk4MTRcdXsyNDA4Y31cdXsyNTcxZH1cdTY0ZTFcdTY0ZTVcdTk0N2JcdTNhNjZcdTY0M2Fc''@;'; put 'put ''dTNhNTdcdTY1NGRcdTZmMTZcdXsyNGEyOH1cdXsyNGEyM31cdTY1ODVcdTY1NmRcdTY1NWZcdXsyMzA3ZX1cdTY1YjVcdXsyNDk0MH1cdTRiMzdcdTY1ZDFcdTQwZDhcdXsyMTgyOX1cdTY1ZTBcdTY1ZTNcdTVmZGZcdXsyMzQwMH1cdTY2MThcdXsyMzFmN31cdXsyMzFmOH1cdTY2NDRcdXsy''@;'; put 'put ''MzFhNH1cdXsyMzFhNX1cdTY2NGJcdXsyMGU3NX1cdTY2NjdcdXsyNTFlNn1cdTY2NzNcdTY2NzRcdXsyMWUzZH1cdXsyMzIzMX1cdXsyODVmNH1cdXsyMzFjOH1cdXsyNTMxM31cdTc3YzVcdXsyMjhmN31cdTk5YTRcdTY3MDJcdXsyNDM5Y31cdXsyNGEyMX1cdTNiMmJcdTY5ZmFcdXsyMzdj''@;'; put 'put ''Mn1cdTY3NWVcdTY3NjdcdTY3NjJcdXsyNDFjZH1cdXsyOTBlZH1cdTY3ZDdcdTQ0ZTlcdTY4MjJcdTZlNTBcdTkyM2NcdTY4MDFcdXsyMzNlNn1cdXsyNmRhMH1cdTY4NWQiXSxbImZkNDAiLCJcdXsyMzQ2Zn1cdTY5ZTFcdTZhMGJcdXsyOGFkZn1cdTY5NzNcdTY4YzNcdXsyMzVjZH1cdTY5''@;'; put 'put ''MDFcdTY5MDBcdTNkMzJcdTNhMDFcdXsyMzYzY31cdTNiODBcdTY3YWNcdTY5NjFcdXsyOGE0YX1cdTQyZmNcdTY5MzZcdTY5OThcdTNiYTFcdXsyMDNjOX1cdTgzNjNcdTUwOTBcdTY5ZjlcdXsyMzY1OX1cdXsyMjEyYX1cdTZhNDVcdXsyMzcwM31cdTZhOWRcdTNiZjNcdTY3YjFcdTZhYzhc''@;'; put 'put ''dXsyOTE5Y31cdTNjMGRcdTZiMWRcdXsyMDkyM31cdTYwZGVcdTZiMzVcdTZiNzRcdXsyMjdjZH1cdTZlYjVcdXsyM2FkYn1cdXsyMDNiNX1cdXsyMTk1OH1cdTM3NDBcdTU0MjFcdXsyM2I1YX1cdTZiZTFcdXsyM2VmY31cdTZiZGNcdTZjMzdcdXsyMjQ4Yn1cdXsyNDhmMX1cdXsyNmI1MX1c''@;'; put 'put ''dTZjNWFcdTgyMjZcdTZjNzlcdXsyM2RiY31cdTQ0YzVcdXsyM2RiZH1cdXsyNDFhNH1cdXsyNDkwY31cdXsyNDkwMH0iXSxbImZkYTEiLCJcdXsyM2NjOX1cdTM2ZTVcdTNjZWJcdXsyMGQzMn1cdTliODNcdXsyMzFmOX1cdXsyMjQ5MX1cdTdmOGZcdTY4MzdcdXsyNmQyNX1cdXsyNmRhMX1c''@;'; put 'put ''dXsyNmRlYn1cdTZkOTZcdTZkNWNcdTZlN2NcdTZmMDRcdXsyNDk3Zn1cdXsyNDA4NX1cdXsyNmU3Mn1cdTg1MzNcdXsyNmY3NH1cdTUxYzdcdTZjOWNcdTZlMWRcdTg0MmVcdXsyOGIyMX1cdTZlMmZcdXsyM2UyZn1cdTc0NTNcdXsyM2Y4Mn1cdTc5Y2NcdTZlNGZcdTVhOTFcdXsyMzA0Yn1c''@;'; put 'put ''dTZmZjhcdTM3MGRcdTZmOWRcdXsyM2UzMH1cdTZlZmFcdXsyMTQ5N31cdXsyNDAzZH1cdTQ1NTVcdTkzZjBcdTZmNDRcdTZmNWNcdTNkNGVcdTZmNzRcdXsyOTE3MH1cdTNkM2JcdTZmOWZcdXsyNDE0NH1cdTZmZDNcdXsyNDA5MX1cdXsyNDE1NX1cdXsyNDAzOX1cdXsyM2ZmMH1cdXsyM2Zi''@;'; put 'put ''NH1cdXsyNDEzZn1cdTUxZGZcdXsyNDE1Nn1cdXsyNDE1N31cdXsyNDE0MH1cdXsyNjFkZH1cdTcwNGJcdTcwN2VcdTcwYTdcdTcwODFcdTcwY2NcdTcwZDVcdTcwZDZcdTcwZGZcdTQxMDRcdTNkZThcdTcxYjRcdTcxOTZcdXsyNDI3N31cdTcxMmJcdTcxNDVcdTVhODhcdTcxNGFcdTcxNmVc''@;'; put 'put ''dTVjOWNcdXsyNDM2NX1cdTcxNGZcdTkzNjJcdXsyNDJjMX1cdTcxMmNcdXsyNDQ1YX1cdXsyNGEyN31cdXsyNGEyMn1cdTcxYmFcdXsyOGJlOH1cdTcwYmRcdTcyMGUiXSxbImZlNDAiLCJcdTk0NDJcdTcyMTVcdTU5MTFcdTk0NDNcdTcyMjRcdTkzNDFcdXsyNTYwNX1cdTcyMmVcdTcyNDBc''@;'; put 'put ''dXsyNDk3NH1cdTY4YmRcdTcyNTVcdTcyNTdcdTNlNTVcdXsyMzA0NH1cdTY4MGRcdTZmM2RcdTcyODJcdTczMmFcdTczMmJcdXsyNDgyM31cdXsyODgyYn1cdTQ4ZWRcdXsyODgwNH1cdTczMjhcdTczMmVcdTczY2ZcdTczYWFcdXsyMGMzYX1cdXsyNmEyZX1cdTczYzlcdTc0NDlcdXsyNDFl''@;'; put 'put ''Mn1cdXsyMTZlN31cdXsyNGEyNH1cdTY2MjNcdTM2YzVcdXsyNDliN31cdXsyNDk4ZH1cdXsyNDlmYn1cdTczZjdcdTc0MTVcdTY5MDNcdXsyNGEyNn1cdTc0MzlcdXsyMDVjM31cdTNlZDdcdTc0NWNcdXsyMjhhZH1cdTc0NjBcdXsyOGViMn1cdTc0NDdcdTczZTRcdTc0NzZcdTgzYjlcdTc0''@;'; put 'put ''NmNcdTM3MzBcdTc0NzRcdTkzZjFcdTZhMmNcdTc0ODJcdTQ5NTNcdXsyNGE4Y30iXSxbImZlYTEiLCJcdXsyNDE1Zn1cdXsyNGE3OX1cdXsyOGI4Zn1cdTViNDZcdXsyOGMwM31cdXsyMTg5ZX1cdTc0YzhcdXsyMTk4OH1cdTc1MGVcdTc0ZTlcdTc1MWVcdXsyOGVkOX1cdXsyMWE0Yn1cdTVi''@;'; put 'put ''ZDdcdXsyOGVhY31cdTkzODVcdTc1NGRcdTc1NGFcdTc1NjdcdTc1NmVcdXsyNGY4Mn1cdTNmMDRcdXsyNGQxM31cdTc1OGVcdTc0NWRcdTc1OWVcdTc1YjRcdTc2MDJcdTc2MmNcdTc2NTFcdTc2NGZcdTc2NmZcdTc2NzZcdXsyNjNmNX1cdTc2OTBcdTgxZWZcdTM3ZjhcdXsyNjkxMX1cdXsy''@;'; put 'put ''NjkwZX1cdTc2YTFcdTc2YTVcdTc2YjdcdTc2Y2NcdXsyNmY5Zn1cdTg0NjJcdXsyNTA5ZH1cdXsyNTE3ZH1cdXsyMWUxY31cdTc3MWVcdTc3MjZcdTc3NDBcdTY0YWZcdXsyNTIyMH1cdTc3NThcdXsyMzJhY31cdTc3YWZcdXsyODk2NH1cdXsyODk2OH1cdXsyMTZjMX1cdTc3ZjRcdTc4MDlc''@;'; put 'put ''dXsyMTM3Nn1cdXsyNGExMn1cdTY4Y2FcdTc4YWZcdTc4YzdcdTc4ZDNcdTk2YTVcdTc5MmVcdXsyNTVlMH1cdTc4ZDdcdTc5MzRcdTc4YjFcdXsyNzYwY31cdThmYjhcdTg4ODRcdXsyOGIyYn1cdXsyNjA4M31cdXsyMjYxY31cdTc5ODZcdTg5MDBcdTY5MDJcdTc5ODBcdXsyNTg1N31cdTc5''@;'; put 'put ''OWRcdXsyN2IzOX1cdTc5M2NcdTc5YTlcdTZlMmFcdXsyNzEyNn1cdTNlYThcdTc5YzZcdXsyOTEwZH1cdTc5ZDQiXV0nKX0sNzQ0ODg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3LCJcdTIwYWMiXSxbIjgxNDAiLCJcdTRlMDJc''@;'; put 'put ''dTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRl''@;'; put 'put ''NTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmEiLDUsIlx1NGU3Mlx1NGU3NCIsOSwiXHU0ZTdmIiw2LCJcdTRlODdcdTRlOGEiXSxbIjgxODAiLCJcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRl''@;'; put 'put ''YWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZc''@;'; put 'put ''dTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDIiLDYsIlx1NGYwYlx1NGYwY1x1NGYxMiIsNCwiXHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0ZjI5XHU0ZjJjXHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5''@;'; put 'put ''XHU0ZjNiXHU0ZjNlIiw0LCJcdTRmNDRcdTRmNDVcdTRmNDciLDUsIlx1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4''@;'; put 'put ''MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMiJdLFsiODI0MCIsIlx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMCIsNCwiXHU0''@;'; put 'put ''ZmI2Iiw4LCJcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDIiLDQsIlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1''@;'; put 'put ''NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZiIsMTFdLFsiODI4MCIsIlx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZiIsMTAsIlx1''@;'; put 'put ''NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MCIsNCwiXHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkIiw3LCJcdTUwNjYiLDUsIlx1NTA2ZCIsOCwiXHU1MDc4XHU1MDc5XHU1''@;'; put 'put ''MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlIiwyMCwiXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkIiw0LCJcdTUwYjMiLDYsIlx1NTBiYyJdLFsiODM0MCIsIlx1NTBiZCIsMTcsIlx1''@;'; put 'put ''NTBkMCIsNSwiXHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiIiwxMCwiXHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2Iiw0LCJcdTUwZmMiLDksIlx1NTEwOCJdLFsiODM4MCIsIlx1NTEwOVx1NTEwYVx1NTEwYyIsNSwiXHU1MTEzIiwx''@;'; put 'put ''MywiXHU1MTIyIiwyOCwiXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkIiw0LCJcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2Vc''@;'; put 'put ''dTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTYiLDQsIlx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFi''@;'; put 'put ''YVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMiIsNV0sWyI4NDQwIiwiXHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1Iiw1LCJcdTUxZWNcdTUxZWVcdTUxZjFc''@;'; put 'put ''dTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUy''@;'; put 'put ''MzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDQiLDUsIlx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OCJdLFsiODQ4MCIsIlx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1''@;'; put 'put ''NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3MyIsOSwiXHU1MjdlXHU1MjgwXHU1MjgzIiw0LCJcdTUyODkiLDYsIlx1NTI5MVx1NTI5Mlx1NTI5NCIsNiwiXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0Iiw5LCJcdTUy''@;'; put 'put ''YzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDkiLDUsIlx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNSIsMTAsIlx1NTJmMSIsNywiXHU1MmZiXHU1''@;'; put 'put ''MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0XHU1MzA3XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlIl0sWyI4NTQwIiwiXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4''@;'; put 'put ''XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmIiw5LCJcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUz''@;'; put 'put ''NzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGYiXSxbIjg1ODAiLCJcdTUzOTAiLDQsIlx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1''@;'; put 'put ''NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZiIsNiwiXHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzIiw0LCJcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJc''@;'; put 'put ''dTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0''@;'; put 'put ''NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWQiLDQsIlx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OSIsNywiXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1''@;'; put 'put ''NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExIl0sWyI4NjQwIiwiXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1''@;'; put 'put ''XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwIiw0LCJcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjQiLDUsIlx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYSIsNCwiXHU1NTEyXHU1NTEzXHU1NTE1Iiw1LCJc''@;'; put 'put ''dTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjYiXSxbIjg2ODAiLCJcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1''@;'; put 'put ''NGIiLDQsIlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1NyIsNCwiXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmIiw1LCJcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1''@;'; put 'put ''OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdcdTU1OWFcdTU1OWJcdTU1OWVcdTU1YTAiLDYsIlx1NTVhOCIsOCwiXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmIiw0LCJcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1''@;'; put 'put ''ZDBcdTU1ZDVcdTU1ZDciLDQsIlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOCIsNCwiXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1Il0sWyI4NzQwIiwiXHU1NjA2XHU1NjA3XHU1NjBhXHU1NjBiXHU1''@;'; put 'put ''NjBkXHU1NjEwIiw3LCJcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDAi''@;'; put 'put ''LDExLCJcdTU2NGYiLDQsIlx1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZCIsNF0sWyI4NzgwIiwiXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1NjZlXHU1NjZmXHU1NjcwXHU1NjcyXHU1NjczXHU1Njc0XHU1Njc1XHU1Njc3XHU1Njc4XHU1Njc5XHU1NjdhXHU1NjdkIiw3''@;'; put 'put ''LCJcdTU2ODciLDYsIlx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NCIsMTQsIlx1NTZhNCIsMTAsIlx1NTZiMCIsNiwiXHU1NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkIiwxMiwiXHU1NmNiIiw4LCJcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTUiLDUsIlx1NTZl''@;'; put 'put ''Y1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYiIsNl0sWyI4ODQwIiwiXHU1NzEyIiw5LCJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZc''@;'; put 'put ''dTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzQiLDQsIlx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1MiIsNCwiXHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1Nzcw''@;'; put 'put ''XHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwIl0sWyI4ODgwIiwiXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkIiw0LCJcdTU3OTQiLDYsIlx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdh''@;'; put 'put ''OFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOSIsOCwiXHU1N2M0Iiw2LCJcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTUiLDcs''@;'; put 'put ''Ilx1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1NTgxNlx1''@;'; put 'put ''NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNSIsNCwiXHU1ODJiIiw0LCJcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzYiLDddLFsiODk0MCIsIlx1NTgzZSIsNSwiXHU1ODQ1Iiw2LCJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJc''@;'; put 'put ''dTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTkiLDQsIlx1NTg1ZiIsNSwiXHU1ODY2Iiw0LCJcdTU4NmQiLDE2LCJcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGMiXSxbIjg5ODAiLCJcdTU4OGQiLDQsIlx1NTg5NCIsNCwiXHU1ODliXHU1''@;'; put 'put ''ODljXHU1ODlkXHU1OGEwIiw3LCJcdTU4YWEiLDE3LCJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzYiLDEwLCJcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDYiLDEzLCJcdTU4ZTUiLDUsIlx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1''@;'; put 'put ''NThmN1x1NThmOFx1NThmYSIsNywiXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4Iiw0LCJcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJc''@;'; put 'put ''dTU5MzNcdTU5MzVcdTU5MzZcdTU5M2IiXSxbIjhhNDAiLCJcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWIiLDQsIlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2NiIsMTIsIlx1NTk3''@;'; put 'put ''NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNiJd''@;'; put 'put ''LFsiOGE4MCIsIlx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliMyIsNSwiXHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmIiw2LCJcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGUiLDQsIlx1NTllNFx1''@;'; put 'put ''NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZCIsMTEsIlx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWEx''@;'; put 'put ''ZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYSIsNiwiXHU1YTMzXHU1YTM1XHU1YTM3Iiw0LCJcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDEiLDQsIlx1NWE0N1x1NWE0OFx1NWE0YiIsOSwiXHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1YTViIiw1XSxb''@;'; put 'put ''IjhiNDAiLCJcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmIiLDgsIlx1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MCIsMTcsIlx1NWE5MyIsNiwiXHU1YTljIiwxMywiXHU1YWFiXHU1YWFjIl0sWyI4YjgwIiwiXHU1YWFkIiw0''@;'; put 'put ''LCJcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjkiLDQsIlx1NWFiZlx1NWFjMFx1NWFjMyIsNSwiXHU1YWNhXHU1YWNiXHU1YWNkIiw0LCJcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVh''@;'; put 'put ''ZWFcdTVhZWMiLDQsIlx1NWFmMiIsMjIsIlx1NWIwYSIsMTEsIlx1NWIxOCIsMjUsIlx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOCIsNywiXHU1YjQxIiw2XSxbIjhjNDAiLCJcdTViNDgiLDcsIlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1''@;'; put 'put ''NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJh''@;'; put 'put ''ZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZiJdLFsiOGM4MCIsIlx1NWJkMVx1NWJkNCIsOCwiXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1''@;'; put 'put ''YmU3XHU1YmU5Iiw0LCJcdTViZWZcdTViZjEiLDYsIlx1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1''@;'; put 'put ''NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1''@;'; put 'put ''YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2NyIsNiwiXHU1YzcwXHU1YzcyIiw2LCJcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODMiLDQsIlx1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZCIsNCwi''@;'; put 'put ''XHU1Y2E0Iiw0XSxbIjhkNDAiLCJcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzUiLDUsIlx1NWNjYyIsNSwiXHU1Y2QzIiw1LCJcdTVjZGEiLDYsIlx1NWNlMlx1NWNl''@;'; put 'put ''M1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMSIsOSwiXHU1Y2ZjIiw0XSxbIjhkODAiLCJcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDgiLDUsIlx1NWQwZiIsNCwiXHU1ZDE1XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFjXHU1ZDFkXHU1ZDFmIiw0LCJcdTVk''@;'; put 'put ''MjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmYiLDQsIlx1NWQzNSIsNywiXHU1ZDNmIiw3LCJcdTVkNDhcdTVkNDlcdTVkNGQiLDEwLCJcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWUiLDEwLCJcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzUiLDEy''@;'; put 'put ''LCJcdTVkODMiLDIxLCJcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTAiXSxbIjhlNDAiLCJcdTVkYTEiLDIxLCJcdTVkYjgiLDEyLCJcdTVkYzYiLDYsIlx1NWRjZSIsMTIsIlx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZCJdLFsiOGU4''@;'; put 'put ''MCIsIlx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOCIsNCwiXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlIiw3LCJcdTVlMjgiLDQsIlx1NWUyZlx1NWUzMFx1NWUzMiIsNCwiXHU1ZTM5XHU1ZTNhXHU1''@;'; put 'put ''ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2Iiw1LCJcdTVlNGQiLDYsIlx1NWU1NiIsNCwiXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzIiwxNCwiXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1''@;'; put 'put ''ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4Iiw0LCJcdTVlYWUiLDQsIlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZiIsNl0sWyI4ZjQwIiwiXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiIiw1LCJcdTVlZDRc''@;'; put 'put ''dTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGMiLDExLCJcdTVlZTlcdTVlZWIiLDgsIlx1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYx''@;'; put 'put ''OVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNCJdLFsiOGY4MCIsIlx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMiIsNiwiXHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxIiwxNCwiXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1''@;'; put 'put ''ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1Zjkz''@;'; put 'put ''XHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyIiw1LCJcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWYiLDUsIlx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZSIsNCwiXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQz''@;'; put 'put ''XHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3Il0sWyI5MDQwIiwiXHU2''@;'; put 'put ''MDA4XHU2MDA5XHU2MDBiXHU2MDBjXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2MDJkXHU2MDJlXHU2MDMwIiw0LCJcdTYwMzYiLDQsIlx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NCIsNiwiXHU2MDRjXHU2''@;'; put 'put ''MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVlXHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwIl0sWyI5MDgwIiwiXHU2MDgxXHU2MDgy''@;'; put 'put ''XHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIwXHU2MGIzXHU2''@;'; put 'put ''MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJkIiw3LCJcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2MiLDQsIlx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMSIsNCwiXHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3XHU2MGY4XHU2''@;'; put 'put ''MGZiIiw0LCJcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyYyIsMTgsIlx1''@;'; put 'put ''NjE0MCIsNl0sWyI5MTQwIiwiXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2Iiw2LCJcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjkiLDYsIlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3''@;'; put 'put ''NFx1NjE3Nlx1NjE3OCIsMTgsIlx1NjE4Y1x1NjE4ZFx1NjE4ZiIsNCwiXHU2MTk1Il0sWyI5MTgwIiwiXHU2MTk2Iiw2LCJcdTYxOWUiLDgsIlx1NjFhYVx1NjFhYlx1NjFhZCIsOSwiXHU2MWI4Iiw1LCJcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzMiLDQsIlx1NjFjOVx1NjFjYyIsNCwiXHU2''@;'; put 'put ''MWQzXHU2MWQ1IiwxNiwiXHU2MWU3IiwxMywiXHU2MWY2Iiw4LCJcdTYyMDAiLDUsIlx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1''@;'; put 'put ''NjIzMlx1NjIzNVx1NjIzNlx1NjIzOCIsNCwiXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhIl0sWyI5MjQwIiwiXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjIiw2LCJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYyNzRcdTYyNzVc''@;'; put 'put ''dTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGIiLDUsIlx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJi''@;'; put 'put ''MFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMSJdLFsiOTI4MCIsIlx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1''@;'; put 'put ''NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMy''@;'; put 'put ''ZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzMyIsNSwiXHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2Iiw3LCJcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYz''@;'; put 'put ''NmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTkiLDYsIlx1''@;'; put 'put ''NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMCJdLFsiOTM0MCIsIlx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNk''@;'; put 'put ''NFx1NjNkNVx1NjNkNyIsNiwiXHU2M2RmXHU2M2UyXHU2M2U0Iiw0LCJcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDYiLDQsIlx1NjQwZFx1NjQwZVx1NjQx''@;'; put 'put ''MVx1NjQxMlx1NjQxNSIsNSwiXHU2NDFkXHU2NDFmXHU2NDIyXHU2NDIzXHU2NDI0Il0sWyI5MzgwIiwiXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlIiw1LCJcdTY0MzUiLDQsIlx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0YiIsNiwi''@;'; put 'put ''XHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5Iiw0LCJcdTY0NWYiLDcsIlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZSIsOSwiXHU2NDdiIiw2LCJcdTY0ODNcdTY0ODZcdTY0ODgiLDgsIlx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1''@;'; put 'put ''NjQ5ZiIsNCwiXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4XHU2NGFhXHU2NGFiXHU2NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2NGMxXHU2NGMzXHU2NGM0XHU2NGM2Iiw2LCJcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRc''@;'; put 'put ''dTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGEiXSxbIjk0NDAiLCJcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTciLDI0LCJcdTY1MDEiLDcsIlx1NjUwYSIsNywiXHU2NTEzIiw0LCJcdTY1MTkiLDhdLFsiOTQ4MCIsIlx1NjUyMlx1NjUyM1x1NjUy''@;'; put 'put ''NFx1NjUyNiIsNCwiXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwIiw0LCJcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1''@;'; put 'put ''NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzgiLDE0LCJcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVc''@;'; put 'put ''dTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjEiLDcsIlx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVk''@;'; put 'put ''MVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOCIsNywiXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViIl0sWyI5NTQwIiwiXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiIiw0LCJcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2''@;'; put 'put ''MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzciLDQsIlx1NjYzZFx1NjYzZlx1''@;'; put 'put ''NjY0MFx1NjY0Mlx1NjY0NCIsNiwiXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4Il0sWyI5NTgwIiwiXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5Iiw0LCJcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2Nzhc''@;'; put 'put ''dTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OTgiLDQsIlx1NjY5ZSIsOCwiXHU2NmE5Iiw0LCJc''@;'; put 'put ''dTY2YWYiLDQsIlx1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZiIsMjUsIlx1NjZkYVx1NjZkZSIsNywiXHU2NmU3XHU2NmU4XHU2NmVhIiw1LCJcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJc''@;'; put 'put ''dTY3MDMiXSxbIjk2NDAiLCJcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjAiLDUsIlx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1Njcz''@;'; put 'put ''Nlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1NyIsNCwiXHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZiXHU2NzZjXHU2''@;'; put 'put ''NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2Il0sWyI5NjgwIiwiXHU2Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2XHU2Nzg4XHU2NzhhXHU2NzhjXHU2NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2Nzk2XHU2Nzk5''@;'; put 'put ''XHU2NzliXHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2N2E2XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5Iiw3LCJcdTY3YzJcdTY3YzUiLDksIlx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1Njdl''@;'; put 'put ''OFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNSIsNywiXHU2N2ZlXHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4Iiw0LCJcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjIiLDYsIlx1NjgyYiIsNiwiXHU2ODM0''@;'; put 'put ''XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2ODQ3XHU2ODRiXHU2ODRkXHU2ODRmXHU2ODUyXHU2ODU2Iiw1XSxbIjk3NDAiLCJcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmMiLDcsIlx1Njg3NVx1Njg3OCIsOCwiXHU2ODgyXHU2ODg0XHU2ODg3Iiw3LCJcdTY4''@;'; put 'put ''OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OTgiLDksIlx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOCJdLFsiOTc4MCIsIlx1NjhiOSIsNiwiXHU2OGMxXHU2OGMzIiw1''@;'; put 'put ''LCJcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGIiLDQsIlx1NjhlMVx1NjhlMlx1NjhlNCIsOSwiXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2''@;'; put 'put ''OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2Iiw0LCJcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTMiLDExLCJcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjUiLDcsIlx1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1''@;'; put 'put ''NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0MyIsMTYsIlx1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1ZiJdLFsiOTg0MCIsIlx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3''@;'; put 'put ''MiIsNCwiXHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlIiw1LCJcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWQiLDksIlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1Njli''@;'; put 'put ''M1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZCJdLFsiOTg4MCIsIlx1NjliZVx1NjliZlx1NjljMFx1NjljMiIsNywiXHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1Iiw1LCJcdTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTEiLDExLCJcdTY5''@;'; put 'put ''ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjMiLDksIlx1NjlmZVx1NmEwMCIsOSwiXHU2YTBiIiwxMSwiXHU2YTE5Iiw1LCJcdTZhMjBcdTZhMjIiLDUsIlx1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNiIsNiwiXHU2YTNmIiw0LCJc''@;'; put 'put ''dTZhNDVcdTZhNDZcdTZhNDgiLDcsIlx1NmE1MSIsNiwiXHU2YTVhIl0sWyI5OTQwIiwiXHU2YTVjIiw0LCJcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjYiLDEwLCJcdTZhNzIiLDYsIlx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NSIsOCwiXHU2''@;'; put 'put ''YThmXHU2YTkyIiw0LCJcdTZhOTgiLDcsIlx1NmFhMSIsNV0sWyI5OTgwIiwiXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFkIiwxMTQsIlx1NmIyNVx1NmIyNlx1NmIyOCIsNl0sWyI5YTQwIiwiXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2''@;'; put 'put ''YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkIiwxMSwiXHU2YjVhIiw3LCJcdTZiNjhcdTZiNjlcdTZiNmIiLDEzLCJcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODgiXSxbIjlhODAiLCJc''@;'; put 'put ''dTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWMiLDQsIlx1NmJhMiIsNywiXHU2YmFiIiw3LCJcdTZiYjZcdTZiYjgiLDYsIlx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNiIsNCwiXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2''@;'; put 'put ''YmQ4XHU2YmRhXHU2YmRjIiw0LCJcdTZiZTIiLDcsIlx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZSIsNiwiXHU2YzA4Iiw0LCJcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZj''@;'; put 'put ''MWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGIiLDQsIlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OCJd''@;'; put 'put ''LFsiOWI0MCIsIlx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2YiIsNCwiXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2Yzkx''@;'; put 'put ''XHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2''@;'; put 'put ''Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4Il0sWyI5YjgwIiwiXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1''@;'; put 'put ''XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmIiw1LCJcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZk''@;'; put 'put ''MzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJc''@;'; put 'put ''dTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2QiLDQsIlx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5NiIsNCwiXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIz''@;'; put 'put ''XHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5Iiw1LCJcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2EiXSxbIjljNDAiLCJcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZk''@;'; put 'put ''ZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmQiLDcsIlx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1''@;'; put 'put ''NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNSJdLFsiOWM4MCIsIlx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYiIsNywiXHU2ZTQ1Iiw3LCJcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJc''@;'; put 'put ''dTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjAiLDEwLCJcdTZlNmNcdTZlNmRcdTZlNmYiLDE0LCJcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGEiLDQsIlx1NmU5MSIsNiwiXHU2ZTk5XHU2ZTlhXHU2ZTliXHU2ZTlkXHU2ZTll''@;'; put 'put ''XHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2ZWJjXHU2ZWJlXHU2ZWJmXHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5XHU2ZWNhXHU2''@;'; put 'put ''ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3XHU2ZWVhIiw1XSxbIjlkNDAiLCJcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmEiLDcsIlx1NmYwM1x1NmYw''@;'; put 'put ''NFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYSIsNCwiXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2Iiw5LCJcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzciLDYsIlx1NmYzZlx1NmY0MFx1NmY0''@;'; put 'put ''MVx1NmY0MiJdLFsiOWQ4MCIsIlx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZSIsOSwiXHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3Iiw1LCJcdTZmNmZcdTZmNzBcdTZmNzFcdTZm''@;'; put 'put ''NzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2QiLDYsIlx1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4ZiIsMTIsIlx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMiIsNCwiXHU2ZmE4IiwxMCwiXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2ZmJhIiw1''@;'; put 'put ''LCJcdTZmYzFcdTZmYzMiLDUsIlx1NmZjYSIsNiwiXHU2ZmQzIiwxMCwiXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1Il0sWyI5ZTQwIiwiXHU2ZmU2Iiw3LCJcdTZmZjAiLDMyLCJcdTcwMTIiLDcsIlx1NzAxYyIsNiwiXHU3MDI0Iiw2XSxbIjllODAiLCJcdTcwMmIiLDksIlx1NzAz''@;'; put 'put ''Nlx1NzAzN1x1NzAzOFx1NzAzYSIsMTcsIlx1NzA0ZFx1NzA0ZVx1NzA1MCIsMTMsIlx1NzA1ZiIsMTEsIlx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1''@;'; put 'put ''NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZSIsMTIsIlx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYiIsMTIs''@;'; put 'put ''Ilx1NzBkYSJdLFsiOWY0MCIsIlx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMCIsNiwiXHU3MGY4XHU3MGZhXHU3MGZiXHU3MGZjXHU3MGZlIiwxMCwiXHU3MTBiIiw0LCJcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcx''@;'; put 'put ''MWIiLDEwLCJcdTcxMjciLDcsIlx1NzEzMlx1NzEzM1x1NzEzNCJdLFsiOWY4MCIsIlx1NzEzNVx1NzEzNyIsMTMsIlx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0ZiIsMTIsIlx1NzE1ZFx1NzE1ZiIsNCwiXHU3MTY1XHU3MTY5Iiw0LCJcdTcxNmZcdTcxNzBcdTcx''@;'; put 'put ''NzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2UiLDUsIlx1NzE4NSIsNCwiXHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhIiw0LCJcdTcxYTEiLDYsIlx1NzFhOVx1NzFh''@;'; put 'put ''YVx1NzFhYlx1NzFhZCIsNSwiXHU3MWI0XHU3MWI2XHU3MWI3XHU3MWI4XHU3MWJhIiw4LCJcdTcxYzQiLDksIlx1NzFjZiIsNF0sWyJhMDQwIiwiXHU3MWQ2Iiw5LCJcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZTgiLDUsIlx1NzFlZiIsOSwiXHU3MWZhIiwxMSwiXHU3MjA3''@;'; put 'put ''IiwxOV0sWyJhMDgwIiwiXHU3MjFiXHU3MjFjXHU3MjFlIiw5LCJcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDAiLDYsIlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1''@;'; put 'put ''NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4''@;'; put 'put ''M1x1NzI4NSIsNCwiXHU3MjhjXHU3MjhlXHU3MjkwXHU3MjkxXHU3MjkzIiwxMSwiXHU3MmEwIiwxMSwiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhIiw2LCJcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcy''@;'; put 'put ''ZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGIiXSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsNywi''@;'; put 'put ''XHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUy''@;'; put 'put ''MjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2''@;'; put 'put ''XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmExIiwiXHUyMTcwIiw5XSxbImEyYjEiLCJcdTI0ODgiLDE5LCJcdTI0NzQiLDE5LCJcdTI0NjAiLDldLFsiYTJlNSIsIlx1MzIyMCIsOV0sWyJhMmYxIiwiXHUyMTYwIiwx''@;'; put 'put ''MV0sWyJhM2ExIiwiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1Iiw4OCwiXHVmZmUzIl0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmExIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsi''@;'; put 'put ''YTZlMCIsIlx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NCJdLFsiYTZlZSIsIlx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMSJdLFsiYTZmNCIsIlx1ZmUzM1x1ZmUzNCJdLFsiYTdhMSIsIlx1MDQxMCIs''@;'; put 'put ''NSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4NDAiLCJcdTAyY2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIxMDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlcdTIyMTVcdTIyMWZcdTIyMjNc''@;'; put 'put ''dTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTAiLDM1LCJcdTI1ODEiLDZdLFsiYTg4MCIsIlx1MjU4OCIsNywiXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlIl0sWyJhOGExIiwiXHUw''@;'; put 'put ''MTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxIl0sWyJhOGJkIiwiXHUwMTQ0XHUwMTQ4Il0sWyJh''@;'; put 'put ''OGMwIiwiXHUwMjYxIl0sWyJhOGM1IiwiXHUzMTA1IiwzNl0sWyJhOTQwIiwiXHUzMDIxIiw4LCJcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTQiXSxbImE5NTkiLCJcdTIxMjFc''@;'; put 'put ''dTMyMzEiXSxbImE5NWMiLCJcdTIwMTAiXSxbImE5NjAiLCJcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDkiLDksIlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OSIsOF0sWyJhOTgwIiwiXHVmZTYyIiw0LCJcdWZlNjhcdWZlNjlcdWZl''@;'; put 'put ''NmFcdWZlNmIiXSxbImE5OTYiLCJcdTMwMDciXSxbImE5YTQiLCJcdTI1MDAiLDc1XSxbImFhNDAiLCJcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTIiLDUsIlx1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNCIsNSwiXHU3MzBi''@;'; put 'put ''XHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3''@;'; put 'put ''MzNkXHU3MzQwIiw4XSxbImFhODAiLCJcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNTgiLDcsIlx1NzM2MSIsMTAsIlx1NzM2ZVx1NzM3MFx1NzM3MSJdLFsiYWI0MCIsIlx1NzM3MiIsMTEsIlx1NzM3ZiIsNCwi''@;'; put 'put ''XHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzIiw1LCJcdTczYWFcdTczYWNcdTczYWRcdTczYjFcdTcz''@;'; put 'put ''YjRcdTczYjVcdTczYjZcdTczYjhcdTczYjlcdTczYmNcdTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzMiLDRdLFsiYWI4MCIsIlx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMiIsNiwiXHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2''@;'; put 'put ''XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzIiw0XSxbImFjNDAiLCJcdTczZjgiLDEwLCJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTEiLDgsIlx1NzQxYyIsNSwiXHU3NDIzXHU3NDI0XHU3NDI3XHU3''@;'; put 'put ''NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3Iiw0LCJcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDIiLDExXSxbImFjODAiLCJcdTc0NGUiLDYsIlx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MCIsMTIsIlx1NzQ2ZVx1NzQ2Zlx1NzQ3MSIsNCwiXHU3NDc4XHU3NDc5''@;'; put 'put ''XHU3NDdhIl0sWyJhZDQwIiwiXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxIiwxMCwiXHU3NDlkXHU3NDlmIiw3LCJcdTc0YWEiLDE1LCJcdTc0YmIiLDEyXSxbImFkODAiLCJc''@;'; put 'put ''dTc0YzgiLDksIlx1NzRkMyIsOCwiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3Iiw2LCJcdTc0ZjBcdTc0ZjFcdTc0ZjIiXSxbImFlNDAiLCJcdTc0ZjNcdTc0ZjVcdTc0ZjgiLDYsIlx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNSIsNywiXHU3NTBlXHU3NTEwXHU3NTEyXHU3''@;'; put 'put ''NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwIiw0LCJcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1M2ZcdTc1NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NGFcdTc1NGRc''@;'; put 'put ''dTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1NTZcdTc1NTdcdTc1NTgiXSxbImFlODAiLCJcdTc1NWQiLDcsIlx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2YiIsNiwiXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhIiw0LCJcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVc''@;'; put 'put ''dTc1ODciXSxbImFmNDAiLCJcdTc1ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTYiLDQsIlx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVj''@;'; put 'put ''Nlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1''@;'; put 'put ''NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwNyJdLFsiYWY4MCIsIlx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYy''@;'; put 'put ''N1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NCJdLFsiYjA0MCIsIlx1NzY0NSIsNiwiXHU3NjRlIiw1LCJcdTc2NTVcdTc2NTciLDQsIlx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2''@;'; put 'put ''MVx1NzY2Mlx1NzY2NCIsNiwiXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwIiw3LCJcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2''@;'; put 'put ''OWFcdTc2OWIiXSxbImIwODAiLCJcdTc2OWMiLDcsIlx1NzZhNSIsOCwiXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1Iiw5LCJcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4''@;'; put 'put ''OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRc''@;'; put 'put ''dTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4''@;'; put 'put ''ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjUiXSxbImIx''@;'; put 'put ''NDAiLCJcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVcdTc2ZTAiLDQsIlx1NzZlNiIsNywiXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAy''@;'; put 'put ''XHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlIiwxMCwiXHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiIl0sWyJiMTgwIiwiXHU3NzJjXHU3NzJlXHU3NzMwIiw0LCJcdTc3MzlcdTc3M2JcdTc3M2RcdTc3''@;'; put 'put ''M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZcdTc3NDgiLDcsIlx1Nzc1MiIsNywiXHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4''@;'; put 'put ''Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2''@;'; put 'put ''XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5''@;'; put 'put ''MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzIl0sWyJiMjQwIiwiXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYw''@;'; put 'put ''XHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkIiwxMSwiXHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2Iiw1LCJcdTc3OGZcdTc3OTBcdTc3OTMiLDExLCJcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3''@;'; put 'put ''YjFcdTc3YjJcdTc3YjRcdTc3YjYiLDRdLFsiYjI4MCIsIlx1NzdiY1x1NzdiZVx1NzdjMCIsMTIsIlx1NzdjZSIsOCwiXHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkIiw0LCJcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNc''@;'; put 'put ''dTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThk''@;'; put 'put ''MjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNc''@;'; put 'put ''dTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2''@;'; put 'put ''MGNcdTczMTYiXSxbImIzNDAiLCJcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDMiLDUsIlx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1''@;'; put 'put ''NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0''@;'; put 'put ''ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YSJdLFsiYjM4MCIsIlx1Nzg1Ylx1Nzg1Y1x1Nzg1ZSIsMTEsIlx1Nzg2ZiIsNywiXHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkIiw2LCJcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUz''@;'; put 'put ''ODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhc''@;'; put 'put ''dThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRm''@;'; put 'put ''ODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdc''@;'; put 'put ''dTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWEiXSxbImI0NDAiLCJcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJcdTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZcdTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZcdTc4YTgiLDcs''@;'; put 'put ''Ilx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYSIs''@;'; put 'put ''OV0sWyJiNDgwIiwiXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkIiw0LCJcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmIiLDUsIlx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNiIsNiwiXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2''@;'; put 'put ''XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2''@;'; put 'put ''MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTlj''@;'; put 'put ''XHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1''@;'; put 'put ''ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlIl0sWyJiNTQwIiwiXHU3OTBkIiw1LCJcdTc5MTQiLDksIlx1NzkxZiIsNCwiXHU3OTI1IiwxNCwiXHU3OTM1Iiw0LCJcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGEiLDgsIlx1Nzk1''@;'; put 'put ''NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2MyJdLFsiYjU4MCIsIlx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MCIsNiwiXHU3OTc5XHU3OTdiIiw0LCJcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5''@;'; put 'put ''OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNc''@;'; put 'put ''dThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZk''@;'; put 'put ''YTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZc''@;'; put 'put ''dTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTAiXSxbImI2NDAiLCJcdTc5OTMiLDYsIlx1Nzk5YiIsMTEsIlx1NzlhOCIsMTAsIlx1NzliNCIsNCwiXHU3OWJjXHU3OWJm''@;'; put 'put ''XHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5Iiw1LCJcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWEiXSxbImI2ODAiLCJcdTc5ZWNcdTc5ZWVcdTc5ZjEiLDYs''@;'; put 'put ''Ilx1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZiIsNCwiXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5''@;'; put 'put ''NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1''@;'; put 'put ''XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2''@;'; put 'put ''Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNm''@;'; put 'put ''XHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjIl0sWyJiNzQwIiwiXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0IiwxNCwiXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwIiw1LCJcdTdhNDciLDksIlx1N2E1MiIsNCwiXHU3YTU4IiwxNl0sWyJiNzgw''@;'; put 'put ''IiwiXHU3YTY5Iiw2LCJcdTdhNzFcdTdhNzJcdTdhNzNcdTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdcdTdhODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdhOGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdhOWVcdTdhYTFc''@;'; put 'put ''dTdhYTJcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3''@;'; put 'put ''NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZc''@;'; put 'put ''dTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5''@;'; put 'put ''MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGQiXSxbImI4NDAiLCJcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWUiLDQsIlx1N2FiNCIsMTAsIlx1N2FjMCIsMTAsIlx1N2FjYyIs''@;'; put 'put ''OSwiXHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3Iiw1LCJcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjMiXSxbImI4ODAiLCJcdTdhZjQiLDQsIlx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1''@;'; put 'put ''N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5''@;'; put 'put ''YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1''@;'; put 'put ''OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4''@;'; put 'put ''Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1''@;'; put 'put ''OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOSJdLFsiYjk0MCIsIlx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZiIsNSwiXHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5''@;'; put 'put ''XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzIiwxMCwiXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2Iiw2LCJcdTdiOGVcdTdiOGYiXSxbImI5ODAiLCJcdTdiOTFcdTdi''@;'; put 'put ''OTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjkiLDcsIlx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1''@;'; put 'put ''Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5''@;'; put 'put ''NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1''@;'; put 'put ''NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4''@;'; put 'put ''YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOCJdLFsiYmE0MCIsIlx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNCIsNCwiXHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3''@;'; put 'put ''YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyIiw0LCJcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdiZmYiLDcsIlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMCIsNSwiXHU3''@;'; put 'put ''YzE3XHU3YzE4XHU3YzE5Il0sWyJiYTgwIiwiXHU3YzFhIiw0LCJcdTdjMjAiLDUsIlx1N2MyOFx1N2MyOVx1N2MyYiIsMTIsIlx1N2MzOSIsNSwiXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2''@;'; put 'put ''ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlk''@;'; put 'put ''XHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4''@;'; put 'put ''ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2Il0sWyJi''@;'; put 'put ''YjQwIiwiXHU3YzQzIiw5LCJcdTdjNGUiLDM2LCJcdTdjNzUiLDUsIlx1N2M3ZSIsOV0sWyJiYjgwIiwiXHU3Yzg4XHU3YzhhIiw2LCJcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdj''@;'; put 'put ''YWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjQiLDQsIlx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1''@;'; put 'put ''NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0''@;'; put 'put ''ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1''@;'; put 'put ''NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NSJdLFsiYmM0MCIsIlx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2Nj''@;'; put 'put ''OVx1N2NjYlx1N2NjZSIsNiwiXHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxIiw2LCJcdTdjZTkiLDUsIlx1N2NmMCIsNywiXHU3Y2Y5XHU3Y2ZhXHU3Y2ZjIiwxMywiXHU3ZDBiIiw1XSxbImJjODAiLCJcdTdkMTEiLDE0LCJcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdk''@;'; put 'put ''MjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzAiLDYsIlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1''@;'; put 'put ''NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1Njdi''@;'; put 'put ''N1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1''@;'; put 'put ''ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNiJdLFsiYmQ0MCIsIlx1N2QzNyIsNTQsIlx1N2Q2ZiIsN10sWyJiZDgwIiwiXHU3''@;'; put 'put ''ZDc4IiwzMiwiXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2''@;'; put 'put ''XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4''@;'; put 'put ''ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNh''@;'; put 'put ''XHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4Il0sWyJiZTQwIiwiXHU3ZDk5IiwxMiwiXHU3ZGE3Iiw2LCJcdTdkYWYiLDQyXSxbImJlODAiLCJcdTdkZGEiLDMyLCJcdTVjM2RcdTUyYjJcdTgzNDZc''@;'; put 'put ''dTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdh''@;'; put 'put ''NzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVc''@;'; put 'put ''dTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUx''@;'; put 'put ''YjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmIiXSxbImJmNDAiLCJcdTdkZmIiLDYyXSxbImJmODAiLCJcdTdlM2FcdTdlM2MiLDQsIlx1N2U0MiIsNCwiXHU3ZTQ4IiwyMSwiXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2''@;'; put 'put ''XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2''@;'; put 'put ''OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVk''@;'; put 'put ''XHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3''@;'; put 'put ''YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwIl0sWyJjMDQwIiwiXHU3ZTVlIiwzNSwiXHU3ZTgzIiwyMywiXHU3ZTljXHU3ZTlkXHU3ZTllIl0sWyJjMDgwIiwiXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3''@;'; put 'put ''XHU3ZjM5XHU3ZjNiIiw2LCJcdTdmNDNcdTdmNDYiLDksIlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2''@;'; put 'put ''NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1''@;'; put 'put ''NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1Nzli''@;'; put 'put ''Ylx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMCJdLFsiYzE0MCIsIlx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1''@;'; put 'put ''N2Y2MFx1N2Y2MyIsNCwiXHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyIiw3LCJcdTdmOGJcdTdmOGRcdTdmOGYiLDQsIlx1N2Y5NSIsNCwiXHU3ZjliXHU3''@;'; put 'put ''ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4Iiw2LCJcdTdmYjEiXSxbImMxODAiLCJcdTdmYjMiLDQsIlx1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZiIsNCwiXHU3''@;'; put 'put ''ZmQ2XHU3ZmQ3XHU3ZmQ5Iiw1LCJcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNc''@;'; put 'put ''dTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcw''@;'; put 'put ''YzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZc''@;'; put 'put ''dTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmYiXSxbImMyNDAiLCJcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdm''@;'; put 'put ''ZjJcdTdmZjQiLDYsIlx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYiIsNSwiXHU4MDMyXHU4MDM0XHU4MDM5XHU4''@;'; put 'put ''MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3Il0sWyJjMjgwIiwiXHU4MDU5XHU4MDViIiwxMywiXHU4MDZiIiw1LCJcdTgwNzIiLDExLCJcdTk2ODZc''@;'; put 'put ''dTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2''@;'; put 'put ''NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFc''@;'; put 'put ''dTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUz''@;'; put 'put ''NTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmIiXSxbImMzNDAiLCJcdTgwN2VcdTgwODFcdTgwODJcdTgwODVcdTgwODhcdTgwOGFcdTgwOGQiLDUsIlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1''@;'; put 'put ''ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjNyIsNCwiXHU4MGNmIiw2LCJcdTgwZDhcdTgwZGZcdTgwZTBcdTgwZTJcdTgwZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgwZmVcdTgwZmZc''@;'; put 'put ''dTgxMDBcdTgxMDFcdTgxMDNcdTgxMDRcdTgxMDVcdTgxMDdcdTgxMDhcdTgxMGIiXSxbImMzODAiLCJcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWYiLDEyLCJcdTgxMmRcdTgxMmVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzkiLDQs''@;'; put 'put ''Ilx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1''@;'; put 'put ''NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYy''@;'; put 'put ''NVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1''@;'; put 'put ''NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OCJdLFsiYzQ0MCIsIlx1ODE0MCIsNSwiXHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViIiw0LCJc''@;'; put 'put ''dTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODMiLDQsIlx1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5MiIsNSwiXHU4MTk5''@;'; put 'put ''XHU4MTlhXHU4MTllIiw0LCJcdTgxYTRcdTgxYTUiXSxbImM0ODAiLCJcdTgxYTdcdTgxYTlcdTgxYWIiLDcsIlx1ODFiNCIsNSwiXHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkIiw2LCJcdTY0NzlcdTg2MTFcdTZhMjFc''@;'; put 'put ''dTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2''@;'; put 'put ''ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVc''@;'; put 'put ''dTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1''@;'; put 'put ''NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODEiXSxbImM1NDAiLCJcdTgxZDQiLDE0LCJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWUiLDQsIlx1ODFmNSIsNSwiXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3Iiw0LCJcdTgy''@;'; put 'put ''MGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTUiLDUsIlx1ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZiJdLFsiYzU4MCIsIlx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1''@;'; put 'put ''ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MCIsNywiXHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwIiw3LCJcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNc''@;'; put 'put ''dTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1''@;'; put 'put ''MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlc''@;'; put 'put ''dTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDciXSxbImM2NDAiLCJcdTgy''@;'; put 'put ''NmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVcdTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBcdTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgyOTBcdTgyOTNcdTgyOTRcdTgyOTVcdTgyOTZcdTgyOWFcdTgyOWJcdTgyOWVcdTgyYTBc''@;'; put 'put ''dTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgyYjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgyYzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlcdTgyZGFcdTgyZGRcdTgyZTJcdTgyZTdcdTgyZThcdTgyZTlcdTgyZWFcdTgyZWNcdTgy''@;'; put 'put ''ZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVcdTgyZjZcdTgyZjgiXSxbImM2ODAiLCJcdTgyZmFcdTgyZmMiLDQsIlx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZCIsOSwiXHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4''@;'; put 'put ''MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4''@;'; put 'put ''XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1''@;'; put 'put ''NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkx''@;'; put 'put ''XHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwIl0sWyJjNzQwIiwiXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhIiw0LCJcdTgzNTNcdTgz''@;'; put 'put ''NTUiLDQsIlx1ODM1ZFx1ODM2Mlx1ODM3MCIsNiwiXHU4Mzc5XHU4MzdhXHU4MzdlIiw2LCJcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTEiLDYs''@;'; put 'put ''Ilx1ODNhY1x1ODNhZFx1ODNhZSJdLFsiYzc4MCIsIlx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1''@;'; put 'put ''ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1''@;'; put 'put ''Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1''@;'; put 'put ''NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMz''@;'; put 'put ''MFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMCJdLFsiYzg0MCIsIlx1ODNlZVx1ODNlZlx1ODNmMyIs''@;'; put 'put ''NCwiXHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyIiw1LCJcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWUiLDUsIlx1ODQyOSIsNywiXHU4NDMyIiw1LCJcdTg0MzlcdTg0M2FcdTg0M2JcdTg0''@;'; put 'put ''M2UiLDcsIlx1ODQ0N1x1ODQ0OFx1ODQ0OSJdLFsiYzg4MCIsIlx1ODQ0YSIsNiwiXHU4NDUyIiw0LCJcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjQiLDQsIlx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3''@;'; put 'put ''Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1''@;'; put 'put ''NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMz''@;'; put 'put ''OFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1''@;'; put 'put ''NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMSJdLFsiYzk0MCIsIlx1ODQ3ZCIsNCwiXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmIiw3LCJcdTg0OThcdTg0OWFcdTg0OWJcdTg0OWRc''@;'; put 'put ''dTg0OWVcdTg0OWZcdTg0YTBcdTg0YTIiLDEyLCJcdTg0YjBcdTg0YjFcdTg0YjNcdTg0YjVcdTg0YjZcdTg0YjdcdTg0YmJcdTg0YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZcdTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJcdTg0ZDRcdTg0''@;'; put 'put ''ZDVcdTg0ZDciXSxbImM5ODAiLCJcdTg0ZDgiLDQsIlx1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlNyIsNCwiXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxIiwxMCwiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5''@;'; put 'put ''YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1''@;'; put 'put ''XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4''@;'; put 'put ''ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYw''@;'; put 'put ''XHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzIl0sWyJjYTQwIiwiXHU4NTAzIiw4LCJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjIiLDgsIlx1ODUyZCIsOSwi''@;'; put 'put ''XHU4NTNlIiw0LCJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGIiLDEwXSxbImNhODAiLCJcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWYiLDQsIlx1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OSIsOCwiXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4''@;'; put 'put ''NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2Yy''@;'; put 'put ''XHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4''@;'; put 'put ''OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2Njkx''@;'; put 'put ''XHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxIl0sWyJjYjQwIiwiXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4Iiw2LCJcdTg1OTAiLDEwLCJcdTg1OWQiLDYsIlx1ODVh''@;'; put 'put ''NVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMSIsNSwiXHU4NWI4XHU4NWJhIiw2LCJcdTg1YzIiLDYsIlx1ODVjYSIsNCwiXHU4NWQxXHU4NWQyIl0sWyJjYjgwIiwiXHU4NWQ0XHU4NWQ2Iiw1LCJcdTg1ZGQiLDYsIlx1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1''@;'; put 'put ''ODVlYSIsMTQsIlx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5''@;'; put 'put ''NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1''@;'; put 'put ''OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2Iw''@;'; put 'put ''Ylx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NCJdLFsiY2M0MCIsIlx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMCIsNCwiXHU4NjA2IiwxMCwiXHU4NjEyXHU4NjEzXHU4NjE0XHU4''@;'; put 'put ''NjE1XHU4NjE3IiwxNSwiXHU4NjI4XHU4NjJhIiwxMywiXHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwIl0sWyJjYzgwIiwiXHU4NjQxIiwxMSwiXHU4NjUyXHU4NjUzXHU4NjU1Iiw0LCJcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2NjFcdTg2NjMi''@;'; put 'put ''LDcsIlx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5''@;'; put 'put ''Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1''@;'; put 'put ''NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIx''@;'; put 'put ''NFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjMyJdLFsiY2Q0MCIsIlx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3MiIsNiwiXHU4NjgzIiw2LCJcdTg2OGUiLDQsIlx1ODY5NFx1ODY5NiIsNSwiXHU4NjllIiw0LCJc''@;'; put 'put ''dTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmIiLDQsIlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkYyJdLFsiY2Q4MCIs''@;'; put 'put ''Ilx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1''@;'; put 'put ''ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5''@;'; put 'put ''NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1''@;'; put 'put ''OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1''@;'; put 'put ''YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMSJdLFsiY2U0MCIsIlx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1''@;'; put 'put ''ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MCIsNiwiXHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2''@;'; put 'put ''XHU4NzU4XHU4NzVhIiw1LCJcdTg3NjFcdTg3NjJcdTg3NjYiLDcsIlx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NSJdLFsiY2U4MCIsIlx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4''@;'; put 'put ''ZSIsNCwiXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4Iiw2LCJcdTg3YTAiLDQsIlx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1Njcy''@;'; put 'put ''YVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1''@;'; put 'put ''NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1''@;'; put 'put ''ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YSJdLFsiY2Y0MCIsIlx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1''@;'; put 'put ''ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMSIsNCwiXHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjIiw0LCJcdTg3ZDQiLDYsIlx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1''@;'; put 'put ''ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZiIsOV0sWyJjZjgwIiwiXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0Iiw1LCJcdTg4MGIiLDcsIlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgx''@;'; put 'put ''YVx1ODgxYyIsNCwiXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3''@;'; put 'put ''NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNl''@;'; put 'put ''XHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2''@;'; put 'put ''YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzIl0sWyJkMDQwIiwiXHU4ODI0IiwxMywiXHU4ODMzIiw1LCJcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJc''@;'; put 'put ''dTg4NDNcdTg4NDYiLDUsIlx1ODg0ZSIsNSwiXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhIiw2LCJcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2EiXSxbImQwODAiLCJcdTg4N2JcdTg4N2NcdTg4ODBc''@;'; put 'put ''dTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTciLDQsIlx1ODg5ZCIsNCwiXHU4OGEzXHU4OGE1Iiw1LCJcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRc''@;'; put 'put ''dTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVm''@;'; put 'put ''YzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVc''@;'; put 'put ''dTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTVi''@;'; put 'put ''YTNcdTYwYWNcdTY1Y2JcdTczODQiXSxbImQxNDAiLCJcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjIiLDQsIlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1''@;'; put 'put ''ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYSIsNCwiXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5Iiw2LCJcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDMiLDVdLFsiZDE4MCIsIlx1ODkw''@;'; put 'put ''OVx1ODkwYiIsNCwiXHU4OTExXHU4OTE0Iiw0LCJcdTg5MWMiLDQsIlx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3''@;'; put 'put ''NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1''@;'; put 'put ''ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0''@;'; put 'put ''ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1''@;'; put 'put ''NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3NiJdLFsiZDI0MCIsIlx1ODkzOCIsOCwiXHU4OTQyXHU4OTQzXHU4OTQ1IiwyNCwiXHU4OTYwIiw1LCJcdTg5NjciLDE5LCJcdTg5N2MiXSxbImQyODAiLCJcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5ODRcdTg5ODVc''@;'; put 'put ''dTg5ODciLDI2LCJcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZk''@;'; put 'put ''YjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2Fc''@;'; put 'put ''dTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgz''@;'; put 'put ''NmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTAiXSxbImQzNDAiLCJcdTg5YTIiLDMwLCJcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRc''@;'; put 'put ''dTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjQiLDZdLFsiZDM4MCIsIlx1ODlmYiIsNCwiXHU4YTAxIiw1LCJcdThhMDgiLDIxLCJcdTUzNzBcdTgyZjFcdTZhMzFcdTVh''@;'; put 'put ''NzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNc''@;'; put 'put ''dTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2''@;'; put 'put ''YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdc''@;'; put 'put ''dTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODkiXSxbImQ0NDAiLCJcdThhMWUiLDMxLCJcdThhM2YiLDgsIlx1OGE0OSIsMjFdLFsiZDQ4MCIsIlx1OGE1ZiIsMjUsIlx1OGE3YSIsNiwiXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5''@;'; put 'put ''ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4''@;'; put 'put ''XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4''@;'; put 'put ''ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYw''@;'; put 'put ''XHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3Il0sWyJkNTQwIiwiXHU4YTgxIiw3LCJcdThhOGIiLDcsIlx1OGE5NCIsNDZdLFsiZDU4MCIsIlx1OGFjMyIsMzIsIlx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1''@;'; put 'put ''NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRh''@;'; put 'put ''OFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1''@;'; put 'put ''NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUz''@;'; put 'put ''ZiJdLFsiZDY0MCIsIlx1OGFlNCIsMzQsIlx1OGIwOCIsMjddLFsiZDY4MCIsIlx1OGIyNFx1OGIyNVx1OGIyNyIsMzAsIlx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0''@;'; put 'put ''Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1''@;'; put 'put ''NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYz''@;'; put 'put ''Y1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MSJdLFsiZDc0MCIsIlx1OGI0NiIsMzEsIlx1''@;'; put 'put ''OGI2NyIsNCwiXHU4YjZkIiwyNV0sWyJkNzgwIiwiXHU4Yjg3IiwyNCwiXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3''@;'; put 'put ''YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5''@;'; put 'put ''XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1''@;'; put 'put ''MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3Il0sWyJkODQwIiwiXHU4YzM4Iiw4LCJcdThjNDJcdThjNDNc''@;'; put 'put ''dThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThjNGQiLDcsIlx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1YiIsNSwiXHU4YzYzIiw2LCJcdThjNmMiLDYsIlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3YiIsNiwiXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3Il0sWyJkODgw''@;'; put 'put ''IiwiXHU4Yzg4XHU4YzhiXHU4YzhkIiw2LCJcdThjOTVcdThjOTZcdThjOTdcdThjOTkiLDIwLCJcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRc''@;'; put 'put ''dTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUz''@;'; put 'put ''MWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJc''@;'; put 'put ''dTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWQiXSxbImQ5NDAiLCJcdThjYWUiLDYyXSxbImQ5ODAiLCJcdThjZWQi''@;'; put 'put ''LDMyLCJcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUw''@;'; put 'put ''MjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZc''@;'; put 'put ''dTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4''@;'; put 'put ''NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmMiXSxbImRhNDAiLCJcdThkMGUiLDE0LCJcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVc''@;'; put 'put ''dThkNmZcdThkNzFcdThkNzJcdThkNzgiLDgsIlx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4YyIsNCwiXHU4ZDkyXHU4ZDkzXHU4ZDk1Iiw5LCJcdThkYTBcdThkYTEiXSxbImRhODAiLCJcdThkYTJcdThkYTQiLDEyLCJcdThkYjJcdThkYjZcdThkYjdcdThkYjlc''@;'; put 'put ''dThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThi''@;'; put 'put ''YzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNc''@;'; put 'put ''dThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2''@;'; put 'put ''MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmEiXSxbImRi''@;'; put 'put ''NDAiLCJcdThkZDVcdThkZDhcdThkZDlcdThkZGNcdThkZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThkZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZcdThkZmNcdThkZmUiLDYsIlx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUw''@;'; put 'put ''ZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNSIsNywiXHU4ZTIwXHU4ZTIxXHU4ZTI0Iiw0LCJcdThlMmJcdThlMmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdcdThlMzhcdThlM2JcdThlM2NcdThlM2UiXSxbImRiODAiLCJcdThlM2ZcdThlNDNcdThlNDVcdThl''@;'; put 'put ''NDZcdThlNGMiLDQsIlx1OGU1MyIsNSwiXHU4ZTVhIiwxMSwiXHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5''@;'; put 'put ''MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJm''@;'; put 'put ''XHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1''@;'; put 'put ''NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkIl0sWyJkYzQwIiwiXHU4ZTczXHU4ZTc1''@;'; put 'put ''XHU4ZTc3Iiw0LCJcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODgiLDYsIlx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NSIsNiwiXHU4ZTlkXHU4ZTlmIiwxMSwiXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzIiw2LCJcdThlYmIiLDddLFsiZGM4MCIs''@;'; put 'put ''Ilx1OGVjMyIsMTAsIlx1OGVjZiIsMjEsIlx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1''@;'; put 'put ''ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJl''@;'; put 'put ''MVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1''@;'; put 'put ''ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NSJdLFsiZGQ0MCIsIlx1OGVlNSIsNjJdLFsiZGQ4MCIsIlx1OGYyNCIsMzIsIlx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1''@;'; put 'put ''ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgw''@;'; put 'put ''N1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1''@;'; put 'put ''ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRl''@;'; put 'put ''M1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYSJdLFsiZGU0MCIsIlx1OGY0NSIsMzIsIlx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1''@;'; put 'put ''OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNiJdLFsiZGU4MCIsIlx1OGZjOSIsNCwiXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVj''@;'; put 'put ''XHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4''@;'; put 'put ''NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNj''@;'; put 'put ''XHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2''@;'; put 'put ''MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0''@;'; put 'put ''XHU2NDZkXHU2NDk2Il0sWyJkZjQwIiwiXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3Iiw1LCJcdTkwMzAiLDQsIlx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OCIsNCwiXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2''@;'; put 'put ''XHU5MDU5XHU5MDVhXHU5MDVjIiw1LCJcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmYiLDQsIlx1OTA3NiIsNiwiXHU5MDdlXHU5MDgxIl0sWyJkZjgwIiwiXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjIiw0LCJcdTkwOTJc''@;'; put 'put ''dTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0''@;'; put 'put ''ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdc''@;'; put 'put ''dTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0''@;'; put 'put ''YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRc''@;'; put 'put ''dTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2MiXSxbImUwNDAiLCJcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkw''@;'; put 'put ''ZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDUiLDE5LCJcdTkxMWFcdTkxMWJcdTkxMWMiXSxbImUwODAiLCJcdTkxMWRc''@;'; put 'put ''dTkxMWZcdTkxMjBcdTkxMjFcdTkxMjQiLDEwLCJcdTkxMzBcdTkxMzIiLDYsIlx1OTEzYSIsOCwiXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdl''@;'; put 'put ''XHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1''@;'; put 'put ''NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1Njdj''@;'; put 'put ''XHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjIl0sWyJlMTQwIiwiXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5''@;'; put 'put ''MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwIiw0LCJcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkxOGZcdTkxOTMi''@;'; put 'put ''LDYsIlx1OTE5YyIsNSwiXHU5MWE0Iiw1LCJcdTkxYWJcdTkxYWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmIiXSxbImUxODAiLCJcdTkxYmMiLDEwLCJcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDIiLDksIlx1OTFkZCIsOCwiXHU1ZTM3XHU1''@;'; put 'put ''ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0''@;'; put 'put ''XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4''@;'; put 'put ''YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQy''@;'; put 'put ''XHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhIl0sWyJlMjQwIiwiXHU5MWU2Iiw2Ml0sWyJlMjgwIiwiXHU5MjI1IiwzMiwiXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5''@;'; put 'put ''XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3Iiw1LCJcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5''@;'; put 'put ''OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVc''@;'; put 'put ''dTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDIiXSxbImUzNDAiLCJcdTky''@;'; put 'put ''NDYiLDQ1LCJcdTkyNzUiLDE2XSxbImUzODAiLCJcdTkyODYiLDcsIlx1OTI4ZiIsMjQsIlx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEy''@;'; put 'put ''MFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1''@;'; put 'put ''OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3''@;'; put 'put ''NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZSJdLFsiZTQ0MCIsIlx1OTJhOCIsNSwiXHU5MmFmIiwyNCwiXHU5MmM5Iiwz''@;'; put 'put ''MV0sWyJlNDgwIiwiXHU5MmU5IiwzMiwiXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2''@;'; put 'put ''ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2''@;'; put 'put ''XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2''@;'; put 'put ''ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxIl0sWyJlNTQwIiwiXHU5MzBhIiw1MSwiXHU5MzNmIiwxMF0sWyJlNTgwIiwiXHU5MzRhIiwzMSwiXHU5MzZiXHU2ZmM5XHU2''@;'; put 'put ''ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMw''@;'; put 'put ''XHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5''@;'; put 'put ''MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJk''@;'; put 'put ''XHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzIl0sWyJlNjQwIiwiXHU5MzZjIiwzNCwiXHU5MzkwIiwyN10sWyJlNjgwIiwiXHU5M2FjIiwyOSwiXHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0''@;'; put 'put ''XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1''@;'; put 'put ''YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1Yjcz''@;'; put 'put ''XHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5''@;'; put 'put ''YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5Il0sWyJlNzQwIiwiXHU5M2NlIiw3LCJcdTkzZDciLDU0XSxbImU3ODAiLCJcdTk0MGUiLDMyLCJcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdl''@;'; put 'put ''ZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNc''@;'; put 'put ''dTdmMWJcdTdmMWZcdTdmMjEiLDYsIlx1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZiIsNCwiXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5''@;'; put 'put ''XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjIl0sWyJlODQwIiwiXHU5NDJmIiwxNCwiXHU5NDNmIiw0MywiXHU5NDZjXHU5NDZkXHU5''@;'; put 'put ''NDZlXHU5NDZmIl0sWyJlODgwIiwiXHU5NDcwIiwyMCwiXHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdl''@;'; put 'put ''XHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2''@;'; put 'put ''Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMz''@;'; put 'put ''XHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2''@;'; put 'put ''OTIwXHU2OGY5Il0sWyJlOTQwIiwiXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3Iiw3LCJcdTk1ODAiLDQyXSxbImU5ODAiLCJcdTk1YWIiLDMyLCJcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5''@;'; put 'put ''NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRc''@;'; put 'put ''dTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZh''@;'; put 'put ''OTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2Fc''@;'; put 'put ''dThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGIiXSxbImVhNDAiLCJcdTk1Y2MiLDI3LCJcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2MjBcdTk2MjMiLDYsIlx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYz''@;'; put 'put ''OFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1NyJdLFsiZWE4MCIsIlx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZCIs''@;'; put 'put ''NCwiXHU5NjczXHU5Njc4IiwxMiwiXHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTEx''@;'; put 'put ''XHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2''@;'; put 'put ''Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNl''@;'; put 'put ''XHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwIl0sWyJlYjQwIiwiXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5''@;'; put 'put ''NjlhXHU5NjliXHU5NjlkIiw5LCJcdTk2YTgiLDcsIlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNiIsOSwiXHU5NmUxIiw2LCJcdTk2''@;'; put 'put ''ZWIiXSxbImViODAiLCJcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVc''@;'; put 'put ''dTk3MTciLDQsIlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1''@;'; put 'put ''NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1''@;'; put 'put ''ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2''@;'; put 'put ''OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYiJdLFsiZWM0MCIsIlx1OTcyMSIsOCwiXHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzIiw0LCJcdTk3''@;'; put 'put ''M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2YiLDE4LCJcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmEiLDddLFsiZWM4MCIsIlx1OTc3Mlx1OTc3NVx1OTc3NyIsNCwiXHU5NzdkIiw3LCJc''@;'; put 'put ''dTk3ODYiLDQsIlx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OSIsNCwiXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQw''@;'; put 'put ''XHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3''@;'; put 'put ''MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQz''@;'; put 'put ''XHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwIl0sWyJlZDQwIiwiXHU5NzllXHU5NzlmXHU5''@;'; put 'put ''N2ExXHU5N2EyXHU5N2E0Iiw2LCJcdTk3YWNcdTk3YWVcdTk3YjBcdTk3YjFcdTk3YjNcdTk3YjUiLDQ2XSxbImVkODAiLCJcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWUiLDQsIlx1OTdmNFx1OTdmNyIsMjMsIlx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBh''@;'; put 'put ''Ylx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1''@;'; put 'put ''NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1Nzhj''@;'; put 'put ''OVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1''@;'; put 'put ''Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OCJdLFsiZWU0MCIsIlx1OTgwZiIsNjJdLFsiZWU4MCIsIlx1OTg0ZSIsMzIsIlx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1''@;'; put 'put ''NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5''@;'; put 'put ''MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNiIsNCwiXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4Iiw2LCJcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0''@;'; put 'put ''ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWEiXSxbImVmNDAiLCJcdTk4NmYiLDUsIlx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOCIsMzcsIlx1OThjZlx1''@;'; put 'put ''OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMCIsNF0sWyJlZjgwIiwiXHU5OGU1XHU5OGU2XHU5OGU5IiwzMCwiXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5''@;'; put 'put ''NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyIiw0LCJcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2Vc''@;'; put 'put ''dTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjQiLDgsIlx1OTU2Zlx1OTU3MVx1OTU3''@;'; put 'put ''Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNCJdLFsiZjA0MCIsIlx1OTkwOCIsNCwiXHU5OTBlXHU5OTBmXHU5OTExIiwyOCwiXHU5OTJmIiwyNl0sWyJmMDgwIiwiXHU5OTRh''@;'; put 'put ''Iiw5LCJcdTk5NTYiLDEyLCJcdTk5NjRcdTk5NjZcdTk5NzNcdTk5NzhcdTk5NzlcdTk5N2JcdTk5N2VcdTk5ODJcdTk5ODNcdTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTll''@;'; put 'put ''MjBcdTllMjJcdTllMjgiLDQsIlx1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1''@;'; put 'put ''OWU1ZVx1OWU2M1x1OWU2NiIsNiwiXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0''@;'; put 'put ''XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5Il0sWyJmMTQwIiwiXHU5OThjXHU5OThlXHU5OTlhIiwxMCwiXHU5OWE2XHU5OWE3XHU5OWE5Iiw0N10sWyJmMTgwIiwi''@;'; put 'put ''XHU5OWQ5IiwzMiwiXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3''@;'; put 'put ''YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZl''@;'; put 'put ''XHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4''@;'; put 'put ''MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzIl0sWyJmMjQwIiwiXHU5OWZhIiw2Ml0sWyJmMjgwIiwiXHU5YTM5IiwzMiwiXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5''@;'; put 'put ''ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1''@;'; put 'put ''XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4''@;'; put 'put ''NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5''@;'; put 'put ''XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyIl0sWyJmMzQwIiwiXHU5YTVhIiwxNywiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5Iiw2LCJcdTlhYjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJcdTlhYmRcdTlh''@;'; put 'put ''YmVcdTlhYmZcdTlhYzNcdTlhYzRcdTlhYzYiLDQsIlx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkYyJdLFsiZjM4MCIsIlx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1''@;'; put 'put ''OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMCIsOCwiXHU5YWZhXHU5YWZjIiw2LCJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRc''@;'; put 'put ''dTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdi''@;'; put 'put ''MmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZc''@;'; put 'put ''dTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGIiXSxbImY0NDAiLCJcdTli''@;'; put 'put ''MDdcdTliMDkiLDUsIlx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNCIsMTAsIlx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNCIsMTAsIlx1OWIzMFx1OWIzMVx1OWIzMyIsNywiXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5''@;'; put 'put ''YjUzXHU5YjU1Iiw1XSxbImY0ODAiLCJcdTliNWIiLDMyLCJcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgy''@;'; put 'put ''MzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVc''@;'; put 'put ''dTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdl''@;'; put 'put ''NDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjQiXSxbImY1NDAiLCJcdTliN2MiLDYyXSxbImY1ODAiLCJcdTliYmIiLDMyLCJcdTkxNjJcdTkxNjFcdTkx''@;'; put 'put ''NzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlc''@;'; put 'put ''dThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThl''@;'; put 'put ''MmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJc''@;'; put 'put ''dThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGMiXSxbImY2NDAiLCJcdTliZGMiLDYyXSxbImY2ODAiLCJcdTljMWIiLDMyLCJcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFc''@;'; put 'put ''dTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODUiLDUsIlx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNj''@;'; put 'put ''YVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZSIsNSwiXHU5Y2E1Iiw0LCJcdTljYWJcdTljYWRcdTljYWVcdTljYjAiLDcs''@;'; put 'put ''Ilx1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYiJdLFsiZjc0MCIsIlx1OWMzYyIsNjJdLFsiZjc4MCIsIlx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5''@;'; put 'put ''Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZSIsNCwiXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjIiw0LCJcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTlj''@;'; put 'put ''ZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVc''@;'; put 'put ''dTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTll''@;'; put 'put ''ODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDQiXSxbImY4''@;'; put 'put ''NDAiLCJcdTljZTMiLDYyXSxbImY4ODAiLCJcdTlkMjIiLDMyXSxbImY5NDAiLCJcdTlkNDMiLDYyXSxbImY5ODAiLCJcdTlkODIiLDMyXSxbImZhNDAiLCJcdTlkYTMiLDYyXSxbImZhODAiLCJcdTlkZTIiLDMyXSxbImZiNDAiLCJcdTllMDMiLDI3LCJcdTllMjRcdTllMjdcdTllMmVcdTll''@;'; put 'put ''MzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzQiLDksIlx1OWU4MCJdLFsiZmI4MCIsIlx1OWU4MVx1OWU4M1x1''@;'; put 'put ''OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4YyIsNSwiXHU5ZTk0Iiw4LCJcdTllOWVcdTllYTAiLDUsIlx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYSJdLFsiZmM0MCIsIlx1OWVhYiIsOCwiXHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5ZWJjXHU5ZWJmIiw0LCJcdTll''@;'; put 'put ''YzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjAiLDgsIlx1OWVmYVx1''@;'; put 'put ''OWVmZFx1OWVmZiIsNl0sWyJmYzgwIiwiXHU5ZjA2Iiw0LCJcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWEiLDUsIlx1OWYyMVx1OWYyMyIsOCwiXHU5ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMxIl0sWyJmZDQwIiwiXHU5ZjMyIiw0LCJcdTlmMzhc''@;'; put 'put ''dTlmM2FcdTlmM2NcdTlmM2YiLDQsIlx1OWY0NSIsMTAsIlx1OWY1MiIsMzhdLFsiZmQ4MCIsIlx1OWY3OSIsNSwiXHU5ZjgxXHU5ZjgyXHU5ZjhkIiwxMSwiXHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExIiw0LCJcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjEiXSxbImZlNDAiLCJcdWZh''@;'; put 'put ''MGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjkiXV0nKX0sMjExNjY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3''@;'; put 'put ''XSxbIjgxNDEiLCJcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGIiLDQsIlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNSIsNiwiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0Il0sWyI4MTYxIiwiXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNk''@;'; put 'put ''XHVhYzNlXHVhYzNmXHVhYzQxIiw5LCJcdWFjNGNcdWFjNGUiLDUsIlx1YWM1NSJdLFsiODE4MSIsIlx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZCIsMTgsIlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3YiIsNCwiXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhk''@;'; put 'put ''XHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1Iiw2LCJcdWFjOWVcdWFjYTIiLDUsIlx1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMSIsNiwiXHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2Nk''@;'; put 'put ''Iiw3LCJcdWFjZDZcdWFjZDgiLDcsIlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmNyIsNCwiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3Iiw0LCJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTMi''@;'; put 'put ''XSxbIjgyNDEiLCJcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjEiLDcsIlx1YWQyYVx1YWQyYlx1YWQyZSIsNV0sWyI4MjYxIiwiXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkIiw2LCJcdWFkNDZcdWFk''@;'; put 'put ''NDhcdWFkNGEiLDUsIlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1NyJdLFsiODI4MSIsIlx1YWQ1OSIsNywiXHVhZDYyXHVhZDY0Iiw3LCJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODMiLDQsIlx1YWQ4''@;'; put 'put ''YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MSIsMTAsIlx1YWQ5ZSIsNSwiXHVhZGE1IiwxNywiXHVhZGI4Iiw3LCJcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzkiLDYsIlx1YWRkMlx1YWRkNCIsNywiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUz''@;'; put 'put ''XHVhZGU1IiwxOF0sWyI4MzQxIiwiXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyIiw1LCJcdWFlMGFcdWFlMGNcdWFlMGUiLDUsIlx1YWUxNSIsN10sWyI4MzYxIiwiXHVhZTFkIiwxOCwiXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjIl0sWyI4MzgxIiwi''@;'; put 'put ''XHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3Iiw0LCJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFl''@;'; put 'put ''NzEiLDYsIlx1YWU3YVx1YWU3ZSIsNSwiXHVhZTg2Iiw1LCJcdWFlOGQiLDQ2LCJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzUiLDYsIlx1YWVjZVx1YWVkMiIsNSwiXHVhZWRhXHVhZWRiXHVhZWRkIiw4XSxbIjg0NDEiLCJcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFl''@;'; put 'put ''ZWUiLDUsIlx1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZCIsOF0sWyI4NDYxIiwiXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExIiwxOF0sWyI4NDgxIiwiXHVhZjI0Iiw3LCJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFm''@;'; put 'put ''MzUiLDYsIlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YSIsNSwiXHVhZjUxIiwxMCwiXHVhZjVlIiw1LCJcdWFmNjYiLDE4LCJcdWFmN2EiLDUsIlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OSIsNiwiXHVhZjkyXHVhZjkzXHVhZjk0''@;'; put 'put ''XHVhZjk2Iiw1LCJcdWFmOWQiLDI2LCJcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmUiXSxbIjg1NDEiLCJcdWFmYmZcdWFmYzEiLDUsIlx1YWZjYVx1YWZjY1x1YWZjZiIsNCwiXHVhZmQ1Iiw2LCJcdWFmZGQiLDRdLFsiODU2MSIsIlx1YWZlMiIsNSwiXHVhZmVhIiw1LCJcdWFmZjJcdWFmZjNc''@;'; put 'put ''dWFmZjVcdWFmZjZcdWFmZjdcdWFmZjkiLDYsIlx1YjAwMlx1YjAwMyJdLFsiODU4MSIsIlx1YjAwNSIsNiwiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1Iiw2LCJcdWIwMWUiLDksIlx1YjAyOSIsMjYsIlx1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1''@;'; put 'put ''YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZSIsMjksIlx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NSIsNiwiXHViMDhlXHViMDkwXHViMDkyIiw1LCJcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTQiXSxbIjg2''@;'; put 'put ''NDEiLCJcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmQiLDYsIlx1YjBjNlx1YjBjYSIsNSwiXHViMGQyIl0sWyI4NjYxIiwiXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5Iiw2LCJcdWIwZTFcdWIwZTJc''@;'; put 'put ''dWIwZTNcdWIwZTRcdWIwZTYiLDEwXSxbIjg2ODEiLCJcdWIwZjEiLDIyLCJcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWUiLDQsIlx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEyYlx1YjEyZCIsNiwiXHViMTM2XHVi''@;'; put 'put ''MTNhIiw1LCJcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDkiLDYsIlx1YjE1Mlx1YjE1M1x1YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2MSIsMjIsIlx1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4MyIs''@;'; put 'put ''NCwiXHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkIl0sWyI4NzQxIiwiXHViMTllIiw5LCJcdWIxYTkiLDE1XSxbIjg3NjEiLCJcdWIxYjkiLDE4LCJcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIx''@;'; put 'put ''ZDJcdWIxZDNcdWIxZDUiXSxbIjg3ODEiLCJcdWIxZDYiLDUsIlx1YjFkZVx1YjFlMCIsNywiXHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxIiw3LCJcdWIxZmFcdWIxZmNcdWIxZmUiLDUsIlx1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZCIsNiwiXHViMjE2XHViMjE4''@;'; put 'put ''XHViMjFhIiw1LCJcdWIyMjEiLDE4LCJcdWIyMzUiLDYsIlx1YjIzZCIsMjYsIlx1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MSIsNiwiXHViMjZhIiw0XSxbIjg4NDEiLCJcdWIyNmYiLDQsIlx1YjI3NiIsNSwiXHViMjdkIiw2LCJcdWIyODZcdWIyODdcdWIyODhc''@;'; put 'put ''dWIyOGEiLDRdLFsiODg2MSIsIlx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5YiIsNCwiXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3Il0sWyI4ODgx''@;'; put 'put ''IiwiXHViMmI4IiwxNSwiXHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzIiw0LCJcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVc''@;'; put 'put ''dWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDkiLDYsIlx1YjMxMlx1YjMxNiIsNSwiXHViMzFkIiw1NCwiXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzIl0sWyI4OTQxIiwiXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZm''@;'; put 'put ''XHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5Iiw2LCJcdWIzODJcdWIzODYiLDUsIlx1YjM4ZCJdLFsiODk2MSIsIlx1YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NSIsMTAsIlx1YjNhMiIsNSwiXHViM2E5XHViM2FhXHViM2FiXHViM2FkIl0sWyI4OTgxIiwi''@;'; put 'put ''XHViM2FlIiwyMSwiXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5IiwxOCwiXHViM2ZkIiwxOCwiXHVi''@;'; put 'put ''NDExIiw2LCJcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjEiLDYsIlx1YjQyYVx1YjQyYyIsNywiXHViNDM1IiwxNV0sWyI4YTQxIiwiXHViNDQ1IiwxMCwiXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5Iiw2LCJcdWI0NjJcdWI0NjRcdWI0NjYi''@;'; put 'put ''XSxbIjhhNjEiLCJcdWI0NjciLDQsIlx1YjQ2ZCIsMTgsIlx1YjQ4MVx1YjQ4MiJdLFsiOGE4MSIsIlx1YjQ4MyIsNCwiXHViNDg5IiwxOSwiXHViNDllIiw1LCJcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0YWJcdWI0YWQiLDcsIlx1YjRiNlx1YjRiOFx1YjRiYSIsNSwiXHVi''@;'; put 'put ''NGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5Iiw2LCJcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDYiLDUsIlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlNyIsNCwiXHViNGVlXHViNGYwXHViNGYyIiw1LCJcdWI0ZjkiLDI2LCJcdWI1MTZcdWI1''@;'; put 'put ''MTdcdWI1MTlcdWI1MWFcdWI1MWQiXSxbIjhiNDEiLCJcdWI1MWUiLDUsIlx1YjUyNlx1YjUyYiIsNCwiXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5Iiw2LCJcdWI1NDJcdWI1NDYiXSxbIjhiNjEiLCJcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1''@;'; put 'put ''NTFcdWI1NTJcdWI1NTNcdWI1NTUiLDYsIlx1YjU1ZVx1YjU2MiIsOF0sWyI4YjgxIiwiXHViNTZiIiw1MiwiXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2Iiw0LCJcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJc''@;'; put 'put ''dWI1YzNcdWI1YzUiLDYsIlx1YjVjZVx1YjVkMiIsNSwiXHViNWQ5IiwxOCwiXHViNWVkIiwxOF0sWyI4YzQxIiwiXHViNjAwIiwxNSwiXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5Iiw0XSxbIjhjNjEiLCJcdWI2MWUiLDYsIlx1YjYyNiIsNSwiXHViNjJkIiw2LCJcdWI2''@;'; put 'put ''MzUiLDVdLFsiOGM4MSIsIlx1YjYzYiIsMTIsIlx1YjY0OSIsMjYsIlx1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OSIsNTAsIlx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZhNSIsNSwiXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyIiwxNl0sWyI4ZDQxIiwiXHViNmMzIiwx''@;'; put 'put ''NiwiXHViNmQ1Iiw4XSxbIjhkNjEiLCJcdWI2ZGUiLDE3LCJcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmEiXSxbIjhkODEiLCJcdWI2ZmIiLDQsIlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNiIsMzMsIlx1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1Yjcz''@;'; put 'put ''MSIsNiwiXHViNzNhXHViNzNjIiw3LCJcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGQiLDYsIlx1Yjc1NiIsOSwiXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5Iiw2LCJcdWI3NzJcdWI3NzRcdWI3NzYiLDUsIlx1Yjc3ZVx1Yjc3Zlx1''@;'; put 'put ''Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NSIsNiwiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllIl0sWyI4ZTQxIiwiXHViNzlmXHViN2ExIiw2LCJcdWI3YWFcdWI3YWUiLDUsIlx1YjdiNlx1YjdiN1x1YjdiOSIsOF0sWyI4ZTYxIiwiXHViN2MyIiw0LCJc''@;'; put 'put ''dWI3YzhcdWI3Y2EiLDE5XSxbIjhlODEiLCJcdWI3ZGUiLDEzLCJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjUiLDYsIlx1YjdmZVx1YjgwMiIsNCwiXHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExIiw2LCJcdWI4MWFcdWI4MWNcdWI4MWUiLDUsIlx1Yjgy''@;'; put 'put ''Nlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZCIsNiwiXHViODM2XHViODNhIiw1LCJcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDUiLDExLCJcdWI4NTJcdWI4NTQiLDcsIlx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NSIsNiwiXHViODZlXHViODcwXHViODcyIiw1LCJc''@;'; put 'put ''dWI4NzlcdWI4N2FcdWI4N2JcdWI4N2QiLDddLFsiOGY0MSIsIlx1Yjg4NSIsNywiXHViODhlIiwxN10sWyI4ZjYxIiwiXHViOGEwIiw3LCJcdWI4YTkiLDYsIlx1YjhiMVx1YjhiMlx1YjhiM1x1YjhiNVx1YjhiNlx1YjhiN1x1YjhiOSIsNF0sWyI4ZjgxIiwiXHViOGJlXHViOGJmXHViOGMy''@;'; put 'put ''XHViOGM0XHViOGM2Iiw1LCJcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDUiLDcsIlx1YjhkZVx1YjhlMFx1YjhlMiIsNSwiXHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxIiw2LCJcdWI4ZmFcdWI4ZmNcdWI4ZmUiLDUsIlx1YjkwNSIsMTgsIlx1''@;'; put 'put ''YjkxOSIsNiwiXHViOTIxIiwyNiwiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1Iiw2LCJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTIiLDVdLFsiOTA0MSIsIlx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MSIsNiwiXHViOTZhXHViOTZjXHViOTZlIiw1LCJc''@;'; put 'put ''dWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2QiXSxbIjkwNjEiLCJcdWI5N2UiLDUsIlx1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4ZiIsMTVdLFsiOTA4MSIsIlx1Yjk5ZiIsMTIsIlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNSIsNiwiXHViOWJlXHVi''@;'; put 'put ''OWMwXHViOWMyIiw1LCJcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDMiLDQsIlx1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZCIsNiwiXHViOWY2XHViOWZiIiw0LCJcdWJhMDIiLDUsIlx1YmEwOSIsMTEsIlx1YmExNiIsMzMs''@;'; put 'put ''Ilx1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0NiJdLFsiOTE0MSIsIlx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZCIsNiwiXHViYTY2XHVi''@;'; put 'put ''YTZhIiw1XSxbIjkxNjEiLCJcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzkiLDksIlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZCIsNV0sWyI5MTgxIiwiXHViYTkzIiwyMCwiXHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzIiw0LCJcdWJh''@;'; put 'put ''YmFcdWJhYmNcdWJhYmUiLDUsIlx1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOSIsMTQsIlx1YmFkYSIsMzMsIlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNSIsNywiXHViYjBlXHViYjEwXHViYjEyIiw1LCJcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJi''@;'; put 'put ''MWZcdWJiMjEiLDZdLFsiOTI0MSIsIlx1YmIyOFx1YmIyYVx1YmIyYyIsNywiXHViYjM3XHViYjM5XHViYjNhXHViYjNmIiw0LCJcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTIiXSxbIjkyNjEiLCJcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTki''@;'; put 'put ''LDcsIlx1YmI2Mlx1YmI2NCIsNywiXHViYjZkIiw0XSxbIjkyODEiLCJcdWJiNzIiLDIxLCJcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTEiLDE4LCJcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWQiLDYsIlx1YmJiNVx1YmJiNlx1YmJi''@;'; put 'put ''OCIsNywiXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5Iiw2LCJcdWJiZDFcdWJiZDJcdWJiZDQiLDM1LCJcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDEiXSxbIjkzNDEiLCJcdWJjMDMiLDQsIlx1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMx''@;'; put 'put ''OVx1YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNSJdLFsiOTM2MSIsIlx1YmMzNlx1YmMzN1x1YmMzOSIsNiwiXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHVi''@;'; put 'put ''YzRlXHViYzRmXHViYzUxIiw4XSxbIjkzODEiLCJcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWUiLDM3LCJcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGYiLDQsIlx1YmM5Nlx1YmM5OFx1YmM5YiIsNCwiXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5Iiw2LCJcdWJjYjJc''@;'; put 'put ''dWJjYjYiLDUsIlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNSIsNywiXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkIiwyMiwiXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkIl0sWyI5NDQxIiwiXHViY2Zl''@;'; put 'put ''Iiw1LCJcdWJkMDZcdWJkMDhcdWJkMGEiLDUsIlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNSIsOF0sWyI5NDYxIiwiXHViZDFlIiw1LCJcdWJkMjUiLDYsIlx1YmQyZCIsMTJdLFsiOTQ4MSIsIlx1YmQzYSIsNSwiXHViZDQxIiw2LCJcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJk''@;'; put 'put ''NTEiLDYsIlx1YmQ1YSIsOSwiXHViZDY1XHViZDY2XHViZDY3XHViZDY5IiwyMiwiXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiIiw0LCJcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWQiLDYsIlx1YmRhNSIsMTAsIlx1YmRiMSIsNiwiXHViZGI5IiwyNF0s''@;'; put 'put ''WyI5NTQxIiwiXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkIiwxMSwiXHViZGVhIiw1LCJcdWJkZjEiXSxbIjk1NjEiLCJcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjkiLDYsIlx1YmUwMVx1YmUwMlx1YmUwNFx1YmUwNiIsNSwiXHVi''@;'; put 'put ''ZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzIl0sWyI5NTgxIiwiXHViZTE1Iiw2LCJcdWJlMWVcdWJlMjAiLDM1LCJcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGYiLDQsIlx1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1''@;'; put 'put ''YmU2NVx1YmU2Nlx1YmU2N1x1YmU2OVx1YmU2YiIsNCwiXHViZTcyXHViZTc2Iiw0LCJcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODUiLDYsIlx1YmU4ZVx1YmU5MiIsNSwiXHViZTlhIiwxMywiXHViZWE5IiwxNF0sWyI5NjQxIiwiXHViZWI4IiwyMywiXHViZWQyXHViZWQz''@;'; put 'put ''Il0sWyI5NjYxIiwiXHViZWQ1XHViZWQ2XHViZWQ5Iiw2LCJcdWJlZTFcdWJlZTJcdWJlZTYiLDUsIlx1YmVlZCIsOF0sWyI5NjgxIiwiXHViZWY2IiwxMCwiXHViZjAyIiw1LCJcdWJmMGEiLDEzLCJcdWJmMWFcdWJmMWUiLDMzLCJcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJm''@;'; put 'put ''NDkiLDYsIlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1NiIsNDRdLFsiOTc0MSIsIlx1YmY4MyIsMTYsIlx1YmY5NSIsOF0sWyI5NzYxIiwiXHViZjllIiwxNywiXHViZmIxIiw3XSxbIjk3ODEiLCJcdWJmYjkiLDExLCJcdWJmYzYiLDUsIlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1''@;'; put 'put ''YmZkNSIsNiwiXHViZmRkXHViZmRlXHViZmUwXHViZmUyIiw4OSwiXHVjMDNkXHVjMDNlXHVjMDNmIl0sWyI5ODQxIiwiXHVjMDQwIiwxNiwiXHVjMDUyIiw1LCJcdWMwNTlcdWMwNWFcdWMwNWIiXSxbIjk4NjEiLCJcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjEiLDYsIlx1YzA2YSIsMTVdLFsi''@;'; put 'put ''OTg4MSIsIlx1YzA3YSIsMjEsIlx1YzA5Mlx1YzA5M1x1YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OSIsNiwiXHVjMGEyXHVjMGE0XHVjMGE2Iiw1LCJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjciLDQsIlx1YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBj''@;'; put 'put ''ZFx1YzBjZVx1YzBjZlx1YzBkMSIsNiwiXHVjMGRhXHVjMGRlIiw1LCJcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWQiLDYsIlx1YzBmNlx1YzBmOFx1YzBmYSIsNSwiXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5Iiw2LCJcdWMxMTFcdWMxMTJc''@;'; put 'put ''dWMxMTNcdWMxMTRcdWMxMTYiLDUsIlx1YzEyMVx1YzEyMlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZSJdLFsiOTk0MSIsIlx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MSIsNiwiXHVjMTRhXHVjMTRl''@;'; put 'put ''Iiw1LCJcdWMxNTZcdWMxNTciXSxbIjk5NjEiLCJcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWQiLDYsIlx1YzE2Nlx1YzE2YSIsNSwiXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiIl0sWyI5OTgxIiwiXHVjMTdjIiw4LCJcdWMxODYiLDUsIlx1''@;'; put 'put ''YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5NyIsNCwiXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxIiwxMSwiXHVjMWJlIiw1LCJcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2Fc''@;'; put 'put ''dWMxY2JcdWMxY2QiLDYsIlx1YzFkNVx1YzFkNlx1YzFkOSIsNiwiXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5Iiw2LCJcdWMxZjJcdWMxZjQiLDcsIlx1YzFmZVx1YzFmZlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNSIsNiwiXHVjMjBlXHVjMjEwXHVjMjEyIiw1''@;'; put 'put ''LCJcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjMiXSxbIjlhNDEiLCJcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzUiLDE2XSxbIjlhNjEiLCJcdWMyNDZcdWMyNDdcdWMyNDkiLDYsIlx1YzI1Mlx1YzI1''@;'; put 'put ''M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OSIsNiwiXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2Il0sWyI5YTgxIiwiXHVjMjY3Iiw0LCJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzUiLDYsIlx1YzI3ZVx1YzI4MFx1YzI4MiIsNSwiXHVjMjhhIiw1LCJcdWMyOTEi''@;'; put 'put ''LDYsIlx1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZSIsNSwiXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlIiw1LCJcdWMyYjZcdWMyYjhcdWMyYmEiLDMzLCJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTUiLDUsIlx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1''@;'; put 'put ''YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMSIsNiwiXHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmIl0sWyI5YjQxIiwiXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkIiw2LCJcdWMzMjZcdWMzMjdcdWMzMmEiLDhdLFsi''@;'; put 'put ''OWI2MSIsIlx1YzMzMyIsMTcsIlx1YzM0NiIsN10sWyI5YjgxIiwiXHVjMzRlIiwyNSwiXHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczIiw0LCJcdWMzN2FcdWMzN2JcdWMzN2UiLDUsIlx1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZCIs''@;'; put 'put ''NTAsIlx1YzNjMSIsMjIsIlx1YzNkYSJdLFsiOWM0MSIsIlx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlMyIsNCwiXHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlIiw1LCJcdWMzZjZcdWMzZjdcdWMzZjkiLDVdLFsiOWM2MSIsIlx1YzNmZiIsOCwiXHVjNDA5Iiw2LCJcdWM0MTEiLDldLFsi''@;'; put 'put ''OWM4MSIsIlx1YzQxYiIsOCwiXHVjNDI1Iiw2LCJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzUiLDYsIlx1YzQzZSIsOSwiXHVjNDQ5IiwyNiwiXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkIiw2LCJcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2Ei''@;'; put 'put ''LDUsIlx1YzQ4MSIsMTgsIlx1YzQ5NSIsNiwiXHVjNDlkIiwxMl0sWyI5ZDQxIiwiXHVjNGFhIiwxMywiXHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkIiw4XSxbIjlkNjEiLCJcdWM0YzYiLDI1XSxbIjlkODEiLCJcdWM0ZTAiLDgsIlx1YzRlYSIsNSwiXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2''@;'; put 'put ''XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyIiw5LCJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTUiLDYsIlx1YzUxZCIsMTAsIlx1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMSIsNiwiXHVjNTNhXHVjNTNjXHVjNTNl''@;'; put 'put ''Iiw1LCJcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjkiLDYsIlx1YzU3Mlx1YzU3NiIsNSwiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgz''@;'; put 'put ''XHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0Il0sWyI5ZTQxIiwiXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExIiw3LCJcdWM1YWEiLDksIlx1YzViNiJdLFsiOWU2MSIsIlx1YzVi''@;'; put 'put ''N1x1YzViYVx1YzViZiIsNCwiXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5Iiw2LCJcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTciXSxbIjllODEiLCJcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1''@;'; put 'put ''ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTEiLDYsIlx1YzYxYVx1YzYxZCIsNiwiXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVj''@;'; put 'put ''NjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5Iiw2LCJcdWM2NTJcdWM2NTYiLDUsIlx1YzY1ZVx1YzY1Zlx1YzY2MSIsMTAsIlx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3MiIsNSwiXHVjNjdhXHVjNjdiXHVjNjdkXHVj''@;'; put 'put ''NjdlXHVjNjdmXHVjNjgxIiw2LCJcdWM2OGFcdWM2OGNcdWM2OGUiLDUsIlx1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5ZCIsNiwiXHVjNmE2Il0sWyI5ZjQxIiwiXHVjNmE4XHVjNmFhIiw1LCJcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmIiLDQsIlx1YzZj''@;'; put 'put ''Mlx1YzZjNFx1YzZjNiIsNSwiXHVjNmNlIl0sWyI5ZjYxIiwiXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1Iiw2LCJcdWM2ZGVcdWM2ZGZcdWM2ZTIiLDUsIlx1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMiJdLFsiOWY4MSIsIlx1YzZmMyIsNCwiXHVjNmZh''@;'; put 'put ''XHVjNmZiXHVjNmZjXHVjNmZlIiw1LCJcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGQiLDYsIlx1YzcxNlx1YzcxOFx1YzcxYSIsNSwiXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5Iiw2LCJcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2Fc''@;'; put 'put ''dWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDUiLDQsIlx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MSIsNiwiXHVjNzY5XHVjNzZhXHVjNzZjIiw3LCJcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2Jc''@;'; put 'put ''dWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWIiLDQsIlx1YzdhMlx1YzdhNyIsNCwiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3Il0sWyJhMDQxIiwi''@;'; put 'put ''XHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyIiw1LCJcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDEiLDYsIlx1YzdkOVx1YzdkYVx1YzdkYlx1YzdkYyJdLFsiYTA2MSIsIlx1YzdkZSIsNSwiXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2Vk''@;'; put 'put ''IiwxM10sWyJhMDgxIiwiXHVjN2ZiIiw0LCJcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGIiLDQsIlx1YzgxMlx1YzgxNFx1YzgxNyIsNCwiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1Iiw2LCJcdWM4MmVcdWM4MzBcdWM4MzIiLDUsIlx1Yzgz''@;'; put 'put ''OVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MSIsNiwiXHVjODRhXHVjODRiXHVjODRlIiw1LCJcdWM4NTUiLDI2LCJcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2IiLDQsIlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZSIsNSwi''@;'; put 'put ''XHVjODk1Iiw3LCJcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTQiXSxbImExNDEiLCJcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTkiLDE4LCJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzEiXSxbImExNjEiLCJcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4''@;'; put 'put ''Y2JcdWM4Y2QiLDYsIlx1YzhkNlx1YzhkOFx1YzhkYSIsNSwiXHVjOGUyXHVjOGUzXHVjOGU1Il0sWyJhMTgxIiwiXHVjOGU2IiwxNCwiXHVjOGY2Iiw1LCJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDciLDQsIlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVc''@;'; put 'put ''dTIwMjZceGE4XHUzMDAzXHhhZFx1MjAxNVx1MjIyNVx1ZmYzY1x1MjIzY1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsOSwiXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZl''@;'; put 'put ''MFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIx''@;'; put 'put ''OTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTIiXSxbImEyNDEiLCJcdWM5MTBcdWM5MTIi''@;'; put 'put ''LDUsIlx1YzkxOSIsMThdLFsiYTI2MSIsIlx1YzkyZCIsNiwiXHVjOTM1IiwxOF0sWyJhMjgxIiwiXHVjOTQ4Iiw3LCJcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTkiLDYsIlx1Yzk2Mlx1Yzk2NCIsNywiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUy''@;'; put 'put ''MjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIy''@;'; put 'put ''OTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUy''@;'; put 'put ''NjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZSJdLFsiYTM0MSIsIlx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NSIsNiwiXHVjOTdkIiwxMCwiXHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmIl0sWyJhMzYxIiwiXHVjOTkxIiw2''@;'; put 'put ''LCJcdWM5OWFcdWM5OWNcdWM5OWUiLDE2XSxbImEzODEiLCJcdWM5YWYiLDE2LCJcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2IiLDQsIlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMSIsNTgsIlx1ZmZlNlx1ZmYzZCIsMzIsIlx1ZmZlMyJdLFsiYTQ0MSIs''@;'; put 'put ''Ilx1YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1YzllZVx1YzlmMiIsNSwiXHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0Il0sWyJhNDYxIiwiXHVjYTA1XHVjYTA2XHVjYTA3XHVj''@;'; put 'put ''YTBhXHVjYTBlIiw1LCJcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTkiLDEyXSxbImE0ODEiLCJcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmEiLDI4LCJcdTMxMzEiLDkzXSxbImE1NDEiLCJcdWNhNDciLDQsIlx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NSIsNiwiXHVjYTVlXHVj''@;'; put 'put ''YTYyIiw1LCJcdWNhNjlcdWNhNmEiXSxbImE1NjEiLCJcdWNhNmIiLDE3LCJcdWNhN2UiLDUsIlx1Y2E4NVx1Y2E4NiJdLFsiYTU4MSIsIlx1Y2E4NyIsMTYsIlx1Y2E5OSIsMTQsIlx1MjE3MCIsOV0sWyJhNWIwIiwiXHUyMTYwIiw5XSxbImE1YzEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZd''@;'; put 'put ''LFsiYTVlMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhNjQxIiwiXHVjYWE4IiwxOSwiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1Il0sWyJhNjYxIiwiXHVjYWM2Iiw1LCJcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGEiLDUs''@;'; put 'put ''Ilx1Y2FlMSIsNl0sWyJhNjgxIiwiXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVkIiw2LCJcdWNhZjUiLDE4LCJcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZc''@;'; put 'put ''dTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1''@;'; put 'put ''MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDMiLDddLFsiYTc0MSIsIlx1Y2IwYiIsNCwiXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1''@;'; put 'put ''XHVjYjE2XHVjYjE3XHVjYjE5Iiw2LCJcdWNiMjIiLDddLFsiYTc2MSIsIlx1Y2IyYSIsMjIsIlx1Y2I0Mlx1Y2I0M1x1Y2I0NCJdLFsiYTc4MSIsIlx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0YVx1Y2I0Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MSIsNiwiXHVjYjVhXHVjYjViXHVjYjVjXHVj''@;'; put 'put ''YjVlIiw1LCJcdWNiNjUiLDcsIlx1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNjNFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OSIsOSwiXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwIiw5LCJcdTMz''@;'; put 'put ''ODAiLDQsIlx1MzNiYSIsNSwiXHUzMzkwIiw0LCJcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMz''@;'; put 'put ''YzYiXSxbImE4NDEiLCJcdWNiNmQiLDEwLCJcdWNiN2EiLDE0XSxbImE4NjEiLCJcdWNiODkiLDE4LCJcdWNiOWQiLDZdLFsiYTg4MSIsIlx1Y2JhNCIsMTksIlx1Y2JiOSIsMTEsIlx4YzZceGQwXHhhYVx1MDEyNiJdLFsiYThhNiIsIlx1MDEzMiJdLFsiYThhOCIsIlx1MDEzZlx1MDE0MVx4''@;'; put 'put ''ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YSJdLFsiYThiMSIsIlx1MzI2MCIsMjcsIlx1MjRkMCIsMjUsIlx1MjQ2MCIsMTQsIlx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZSJdLFsiYTk0MSIsIlx1Y2JjNSIsMTQsIlx1Y2JkNSIsMTBdLFsiYTk2''@;'; put 'put ''MSIsIlx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYSIsMThdLFsiYTk4MSIsIlx1Y2JmZCIsMTQsIlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNSIsNiwiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBc''@;'; put 'put ''dTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDAiLDI3LCJcdTI0OWMiLDI1LCJcdTI0NzQiLDE0LCJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODQiXSxbImFhNDEi''@;'; put 'put ''LCJcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzEiLDYsIlx1Y2MzYVx1Y2MzZiIsNCwiXHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlIl0sWyJhYTYxIiwiXHVjYzRmIiw0LCJcdWNjNTZcdWNjNWEiLDUsIlx1Y2M2MVx1Y2M2Mlx1Y2M2''@;'; put 'put ''M1x1Y2M2NVx1Y2M2N1x1Y2M2OSIsNiwiXHVjYzcxXHVjYzcyIl0sWyJhYTgxIiwiXHVjYzczXHVjYzc0XHVjYzc2IiwyOSwiXHUzMDQxIiw4Ml0sWyJhYjQxIiwiXHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExIiw2LCJcdWNjYWFc''@;'; put 'put ''dWNjYWUiLDUsIlx1Y2NiNlx1Y2NiN1x1Y2NiOSJdLFsiYWI2MSIsIlx1Y2NiYVx1Y2NiYlx1Y2NiZCIsNiwiXHVjY2M2XHVjY2M4XHVjY2NhIiw1LCJcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDUiLDVdLFsiYWI4MSIsIlx1Y2NkYiIsOCwiXHVjY2U1Iiw2LCJcdWNjZWRcdWNjZWVcdWNjZWZc''@;'; put 'put ''dWNjZjEiLDEyLCJcdTMwYTEiLDg1XSxbImFjNDEiLCJcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDIiLDUsIlx1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMSIsNiwiXHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwIl0sWyJhYzYxIiwiXHVjZDIxXHVjZDIyXHVjZDIzXHVj''@;'; put 'put ''ZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkIiwxMSwiXHVjZDNhIiw0XSxbImFjODEiLCJcdWNkM2YiLDI4LCJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYWNkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJh''@;'; put 'put ''ZDQxIiwiXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1Iiw2LCJcdWNkNmVcdWNkNzBcdWNkNzIiLDUsIlx1Y2Q3OSIsN10sWyJhZDYxIiwiXHVjZDgxIiw2LCJcdWNkODkiLDEwLCJcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWYiXSxbImFkODEiLCJcdWNk''@;'; put 'put ''YTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWEiLDUsIlx1Y2RiMSIsMTgsIlx1Y2RjNSJdLFsiYWU0MSIsIlx1Y2RjNiIsNSwiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxIiwxNl0sWyJhZTYxIiwiXHVjZGUyIiw1LCJcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVc''@;'; put 'put ''dWNkZWZcdWNkZjEiLDYsIlx1Y2RmYVx1Y2RmY1x1Y2RmZSIsNF0sWyJhZTgxIiwiXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkIiw2LCJcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWEiLDUsIlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2Uy''@;'; put 'put ''N1x1Y2UyOVx1Y2UyYVx1Y2UyYiJdLFsiYWY0MSIsIlx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNiIsMTldLFsiYWY2MSIsIlx1Y2U0YSIsMTMsIlx1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2MiIsNSwiXHVjZTZhXHVjZTZjIl0sWyJhZjgxIiwiXHVjZTZl''@;'; put 'put ''Iiw1LCJcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2QiLDYsIlx1Y2U4Nlx1Y2U4OFx1Y2U4YSIsNSwiXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5Il0sWyJiMDQxIiwiXHVjZTlhIiw1LCJcdWNlYTJcdWNlYTYiLDUsIlx1Y2VhZSIsMTJdLFsiYjA2MSIs''@;'; put 'put ''Ilx1Y2ViYiIsNSwiXHVjZWMyIiwxOV0sWyJiMDgxIiwiXHVjZWQ2IiwxMywiXHVjZWU2XHVjZWU3XHVjZWU5XHVjZWVhXHVjZWVkIiw2LCJcdWNlZjZcdWNlZmEiLDUsIlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMCIsNywiXHVhYzE5Iiw0LCJcdWFj''@;'; put 'put ''MjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZc''@;'; put 'put ''dWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFj''@;'; put 'put ''ZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDYiXSxbImIxNDEiLCJcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDkiLDYsIlx1''@;'; put 'put ''Y2YxMlx1Y2YxNFx1Y2YxNiIsNSwiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzIl0sWyJiMTYxIiwiXHVjZjI1Iiw2LCJcdWNmMmVcdWNmMzIiLDUsIlx1Y2YzOSIsMTFdLFsiYjE4MSIsIlx1Y2Y0NSIsMTQsIlx1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1''@;'; put 'put ''ZCIsNiwiXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVh''@;'; put 'put ''ZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQw''@;'; put 'put ''XHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVh''@;'; put 'put ''ZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4Il0sWyJiMjQxIiwiXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3''@;'; put 'put ''XHVjZjc5Iiw2LCJcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODYiLDUsIlx1Y2Y4ZCJdLFsiYjI2MSIsIlx1Y2Y4ZSIsMTgsIlx1Y2ZhMiIsNSwiXHVjZmE5Il0sWyJiMjgxIiwiXHVjZmFhIiw1LCJcdWNmYjEiLDE4LCJcdWNmYzUiLDYsIlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1''@;'; put 'put ''YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYy''@;'; put 'put ''ZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1''@;'; put 'put ''YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0''@;'; put 'put ''YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OSJdLFsiYjM0MSIsIlx1Y2ZjYyIsMTksIlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOSJdLFsiYjM2MSIsIlx1Y2ZlYSIsNSwiXHVjZmYyXHVjZmY0XHVjZmY2Iiw1LCJcdWNmZmRcdWNmZmVcdWNm''@;'; put 'put ''ZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDUiLDVdLFsiYjM4MSIsIlx1ZDAwYiIsNSwiXHVkMDEyIiw1LCJcdWQwMTkiLDE5LCJcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBc''@;'; put 'put ''dWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWIiLDQsIlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjEx''@;'; put 'put ''MFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1''@;'; put 'put ''YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZCJdLFsiYjQ0MSIsIlx1ZDAyZSIsNSwiXHVkMDM2XHVkMDM3XHVkMDM5''@;'; put 'put ''XHVkMDNhXHVkMDNiXHVkMDNkIiw2LCJcdWQwNDZcdWQwNDhcdWQwNGEiLDVdLFsiYjQ2MSIsIlx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OSIsNiwiXHVkMDYxIiwxMCwiXHVkMDZlXHVkMDZmIl0sWyJiNDgxIiwiXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1Iiw2''@;'; put 'put ''LCJcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODIiLDE4LCJcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNc''@;'; put 'put ''dWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIy''@;'; put 'put ''ZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWIiLDQsIlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmNyIsNCwiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHVi''@;'; put 'put ''MzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1Il0sWyJiNTQxIiwiXHVkMDk1IiwxNCwiXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkIiw1XSxbImI1NjEiLCJcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmEiLDUs''@;'; put 'put ''Ilx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYSIsNSwiXHVkMGQyXHVkMGQ2Iiw0XSxbImI1ODEiLCJcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTUiLDYsIlx1ZDBlZVx1ZDBmMiIsNSwiXHVkMGY5IiwxMSwiXHViMzY3XHViMzY5XHViMzZiXHVi''@;'; put 'put ''MzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5''@;'; put 'put ''XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHVi''@;'; put 'put ''NGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1''@;'; put 'put ''XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4Il0sWyJiNjQxIiwiXHVkMTA1Iiw3LCJcdWQxMGUiLDE3XSxbImI2NjEiLCJcdWQxMjAiLDE1LCJcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2Ui''@;'; put 'put ''XSxbImI2ODEiLCJcdWQxM2ZcdWQxNDJcdWQxNDYiLDUsIlx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NSIsNiwiXHVkMTVlXHVkMTYwXHVkMTYyIiw1LCJcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNc''@;'; put 'put ''dWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1''@;'; put 'put ''ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVc''@;'; put 'put ''dWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3''@;'; put 'put ''OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTciXSxbImI3NDEiLCJcdWQxNmUiLDEzLCJcdWQxN2QiLDYsIlx1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YSJdLFsiYjc2MSIsIlx1ZDE4YiIsMjAsIlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhNyJdLFsiYjc4MSIsIlx1ZDFhOSIs''@;'; put 'put ''NiwiXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxIiwxNCwiXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2Vj''@;'; put 'put ''XHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHVi''@;'; put 'put ''ODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUx''@;'; put 'put ''XHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5Il0sWyJiODQxIiwiXHVkMWQwIiw3''@;'; put 'put ''LCJcdWQxZDkiLDE3XSxbImI4NjEiLCJcdWQxZWIiLDgsIlx1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOSIsMTNdLFsiYjg4MSIsIlx1ZDIwOFx1ZDIwYSIsNSwiXHVkMjExIiwyNCwiXHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHVi''@;'; put 'put ''OThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlIiw0LCJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRc''@;'; put 'put ''dWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJh''@;'; put 'put ''NjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmMiXSxbImI5NDEiLCJc''@;'; put 'put ''dWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzUiLDYsIlx1ZDIzZVx1ZDI0MFx1ZDI0MiIsNSwiXHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjIl0sWyJiOTYxIiwiXHVkMjRkIiwxNCwiXHVkMjVkIiw2LCJcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjgiXSxbImI5''@;'; put 'put ''ODEiLCJcdWQyNjkiLDIyLCJcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJi''@;'; put 'put ''M2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNc''@;'; put 'put ''dWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTQiLDQsIlx1YmMxYiIsNCwiXHViYzI0XHViYzI1XHViYzI3XHViYzI5XHViYzJkXHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQwXHViYzQx''@;'; put 'put ''XHViYzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHViYzRkXHViYzUwXHViYzVkXHViYzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3Il0sWyJiYTQxIiwiXHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2Iiw1LCJcdWQy''@;'; put 'put ''OWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTUiLDYsIlx1ZDJhZCJdLFsiYmE2MSIsIlx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMiIsNSwiXHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzIiw0LCJcdWQyY2FcdWQyY2MiLDVdLFsiYmE4MSIsIlx1ZDJkMlx1''@;'; put 'put ''ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZCIsNiwiXHVkMmU2Iiw5LCJcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNc''@;'; put 'put ''dWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJk''@;'; put 'put ''NDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhc''@;'; put 'put ''dWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJl''@;'; put 'put ''NjFcdWJlNjQiXSxbImJiNDEiLCJcdWQyZmIiLDQsIlx1ZDMwMlx1ZDMwNFx1ZDMwNiIsNSwiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3Iiw0LCJcdWQzMWVcdWQzMjJcdWQzMjMiXSxbImJiNjEiLCJcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQz''@;'; put 'put ''MmVcdWQzMmZcdWQzMzEiLDYsIlx1ZDMzYVx1ZDMzZSIsNSwiXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5Il0sWyJiYjgxIiwiXHVkMzRhIiwzMSwiXHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHVi''@;'; put 'put ''ZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0''@;'; put 'put ''XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVj''@;'; put 'put ''MGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0Il0sWyJiYzQxIiwi''@;'; put 'put ''XHVkMzZhIiwxNywiXHVkMzdlXHVkMzdmXHVkMzgxXHVkMzgyXHVkMzgzXHVkMzg1XHVkMzg2XHVkMzg3Il0sWyJiYzYxIiwiXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzkyIiw1LCJcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTEiLDYsIlx1ZDNhYVx1ZDNh''@;'; put 'put ''Y1x1ZDNhZSJdLFsiYmM4MSIsIlx1ZDNhZiIsNCwiXHVkM2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkIiw2LCJcdWQzYzZcdWQzYzdcdWQzY2EiLDUsIlx1ZDNkMSIsNSwiXHVjMGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0''@;'; put 'put ''XHVjMTA4XHVjMTEwXHVjMTE1XHVjMTFjIiw0LCJcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMx''@;'; put 'put ''NWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhc''@;'; put 'put ''dWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmQiXSxb''@;'; put 'put ''ImJkNDEiLCJcdWQzZDdcdWQzZDkiLDcsIlx1ZDNlMlx1ZDNlNCIsNywiXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3Il0sWyJiZDYxIiwiXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyIiw1LCJcdWQ0MDkiLDEzXSxbImJk''@;'; put 'put ''ODEiLCJcdWQ0MTciLDUsIlx1ZDQxZSIsMjUsIlx1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5''@;'; put 'put ''OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1''@;'; put 'put ''YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNk''@;'; put 'put ''OFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMCJdLFsiYmU0MSIsIlx1ZDQzOCIsNywiXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1IiwxNF0sWyJiZTYxIiwiXHVkNDU0''@;'; put 'put ''Iiw3LCJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjUiLDcsIlx1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3MiJdLFsiYmU4MSIsIlx1ZDQ3MyIsNCwiXHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzIiw0LCJcdWQ0OGFcdWQ0OGNcdWQ0OGUiLDUsIlx1''@;'; put 'put ''ZDQ5NSIsOCwiXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBj''@;'; put 'put ''XHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVj''@;'; put 'put ''NTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5''@;'; put 'put ''XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0Iiw2LCJcdWM1Y2NcdWM1Y2UiXSxbImJmNDEiLCJcdWQ0OWUiLDEwLCJcdWQ0YWEiLDE0XSxbImJmNjEiLCJcdWQ0YjkiLDE4LCJcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDUiXSxbImJmODEiLCJcdWQ0ZDYi''@;'; put 'put ''LDUsIlx1ZDRkZFx1ZDRkZVx1ZDRlMCIsNywiXHVkNGU5XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYxIiw2LCJcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBc''@;'; put 'put ''dWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmMiLDUsIlx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYz''@;'; put 'put ''Ylx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1''@;'; put 'put ''YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOCJdLFsiYzA0MSIsIlx1ZDRmZSIsNSwiXHVkNTA1''@;'; put 'put ''XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkIiw2LCJcdWQ1MTZcdWQ1MTgiLDVdLFsiYzA2MSIsIlx1ZDUxZSIsMjVdLFsiYzA4MSIsIlx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NSIsNiwiXHVkNTRlXHVkNTUw''@;'; put 'put ''XHVkNTUyIiw1LCJcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3''@;'; put 'put ''MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTEiLDcsIlx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1''@;'; put 'put ''Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1Yzdj''@;'; put 'put ''MVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYSJdLFsiYzE0MSIsIlx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZSIsNSwiXHVkNTc2XHVkNTc3XHVkNTc5XHVk''@;'; put 'put ''NTdhXHVkNTdiXHVkNTdkIiw2LCJcdWQ1ODZcdWQ1OGFcdWQ1OGIiXSxbImMxNjEiLCJcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTEiLDE5LCJcdWQ1YTZcdWQ1YTciXSxbImMxODEiLCJcdWQ1YTgiLDMxLCJcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRc''@;'; put 'put ''dWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4''@;'; put 'put ''OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZc''@;'; put 'put ''dWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5''@;'; put 'put ''YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDMiXSxbImMyNDEiLCJcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDMiLDQsIlx1ZDVkYVx1ZDVkY1x1ZDVkZSIsNSwiXHVkNWU2XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVlIl0sWyJjMjYxIiwiXHVk''@;'; put 'put ''NWVmIiw0LCJcdWQ1ZjZcdWQ1ZjhcdWQ1ZmEiLDUsIlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOSIsNiwiXHVkNjEyIl0sWyJjMjgxIiwiXHVkNjE2Iiw1LCJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjUiLDcsIlx1ZDYyZSIsOSwiXHVkNjNh''@;'; put 'put ''XHVkNjNiXHVjOWQ1XHVjOWQ2XHVjOWQ5XHVjOWRhXHVjOWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVjOWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZjXHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVjYTE4XHVj''@;'; put 'put ''YTI5XHVjYTRjXHVjYTRkXHVjYTUwXHVjYTU0XHVjYTVjXHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVjYWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVjXHVjYWY0''@;'; put 'put ''XHVjYjA4XHVjYjEwXHVjYjE0XHVjYjE4XHVjYjIwXHVjYjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVjYjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVjYzE0XHVj''@;'; put 'put ''YzFjXHVjYzFkXHVjYzIxXHVjYzIyXHVjYzI3XHVjYzI4XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiIl0sWyJjMzQxIiwiXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRm''@;'; put 'put ''XHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkIiw0XSxbImMzNjEiLCJcdWQ2NjIiLDQsIlx1ZDY2OFx1ZDY2YSIsNSwiXHVkNjcyXHVkNjczXHVkNjc1IiwxMV0sWyJjMzgxIiwiXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2Iiw1LCJcdWQ2OGVc''@;'; put 'put ''dWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTUiLDcsIlx1ZDY5ZVx1ZDZhMFx1ZDZhMiIsNSwiXHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4''@;'; put 'put ''XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVj''@;'; put 'put ''ZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIw''@;'; put 'put ''XHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1Il0sWyJjNDQxIiwiXHVkNmFiXHVkNmFkXHVk''@;'; put 'put ''NmFlXHVkNmFmXHVkNmIxIiw3LCJcdWQ2YmFcdWQ2YmMiLDcsIlx1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYiJdLFsiYzQ2MSIsIlx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYSIsNSwiXHVkNmUxXHVkNmUyXHVkNmUzXHVk''@;'; put 'put ''NmU1XHVkNmU2XHVkNmU3XHVkNmU5Iiw0XSxbImM0ODEiLCJcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjYiLDUsIlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNSIsMTEsIlx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1''@;'; put 'put ''Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1''@;'; put 'put ''Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1''@;'; put 'put ''NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1''@;'; put 'put ''ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzYyJdLFsiYzU0MSIsIlx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMSIsNiwiXHVkNzJhXHVkNzJjXHVkNzJlIiw1LCJcdWQ3MzZcdWQ3MzdcdWQ3MzkiXSxbImM1''@;'; put 'put ''NjEiLCJcdWQ3M2FcdWQ3M2JcdWQ3M2QiLDYsIlx1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YSIsNSwiXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhIiw0XSxbImM1ODEiLCJcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3''@;'; put 'put ''NzFcdWQ3NzJcdWQ3NzNcdWQ3NzUiLDYsIlx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4MiIsNSwiXHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVkMDU4XHVkMDYwXHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVk''@;'; put 'put ''MGE1XHVkMGE4XHVkMGFjXHVkMGI0XHVkMGI1XHVkMGI3XHVkMGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRjXHVkMGRkXHVkMGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBk''@;'; put 'put ''XHVkMTMwXHVkMTMxXHVkMTM0XHVkMTM4XHVkMTNhXHVkMTQwXHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVkMTYxXHVkMTY4XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVk''@;'; put 'put ''MWIwXHVkMWIxXHVkMWIzXHVkMWI1XHVkMWJhXHVkMWJjXHVkMWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNjXHVkMjNkXHVkMjNmXHVkMjQxXHVkMjQ4XHVkMjVjIl0sWyJjNjQxIiwiXHVkNzhkXHVkNzhlXHVkNzhm''@;'; put 'put ''XHVkNzkxIiw2LCJcdWQ3OWFcdWQ3OWNcdWQ3OWUiLDVdLFsiYzZhMSIsIlx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1''@;'; put 'put ''ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMy''@;'; put 'put ''OFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1''@;'; put 'put ''ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMSJdLFsiYzdhMSIsIlx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2''@;'; put 'put ''NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1''@;'; put 'put ''ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4''@;'; put 'put ''N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1''@;'; put 'put ''ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMCJdLFsiYzhhMSIsIlx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3''@;'; put 'put ''NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1''@;'; put 'put ''ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2''@;'; put 'put ''MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZCJdLFsiY2FhMSIsIlx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1''@;'; put 'put ''NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJi''@;'; put 'put ''Y1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1''@;'; put 'put ''OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2Qz''@;'; put 'put ''YVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NSJdLFsiY2JhMSIsIlx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1''@;'; put 'put ''N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNh''@;'; put 'put ''N1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1''@;'; put 'put ''NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMiJdLFsiY2NhMSIsIlx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFh''@;'; put 'put ''OVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1''@;'; put 'put ''N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5''@;'; put 'put ''Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1''@;'; put 'put ''NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMCJdLFsiY2RhMSIsIlx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMz''@;'; put 'put ''Ylx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1''@;'; put 'put ''OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5''@;'; put 'put ''Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkYyJdLFsiY2VhMSIsIlx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1''@;'; put 'put ''NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMy''@;'; put 'put ''MVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1''@;'; put 'put ''NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVj''@;'; put 'put ''N1x1NGZmMVx1NTE3N1x1NTJmZSJdLFsiY2ZhMSIsIlx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1''@;'; put 'put ''NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNj''@;'; put 'put ''YVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1''@;'; put 'put ''NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNCJdLFsiZDBhMSIsIlx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0''@;'; put 'put ''NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1''@;'; put 'put ''NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNj''@;'; put 'put ''YVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1''@;'; put 'put ''NjI4MFx1NjVkN1x1NjVlMyJdLFsiZDFhMSIsIlx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0''@;'; put 'put ''OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1''@;'; put 'put ''NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZSIsNSwiXHU5MGEzXHVmOTE0Iiw0LCJcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdc''@;'; put 'put ''dWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjUiXSxbImQyYTEiLCJcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjgiLDQsIlx1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3''@;'; put 'put ''NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzMyIsNSwiXHU5OWQxXHVmOTM5IiwxMCwiXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2''@;'; put 'put ''MGYxXHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4XHVmOTQ5XHU1YzNmXHVmOTRhIiw3LCJcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTIiLDUsIlx1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNiJdLFsiZDNhMSIsIlx1NGUzOVx1NGViNlx1''@;'; put 'put ''NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZj''@;'; put 'put ''N1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1''@;'; put 'put ''OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2''@;'; put 'put ''MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQxN1x1Njg0MyJdLFsiZDRhMSIsIlx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1''@;'; put 'put ''OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2''@;'; put 'put ''ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1''@;'; put 'put ''OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NSJdLFsiZDVhMSIsIlx1ODYzZlx1ODdiYVx1ODhm''@;'; put 'put ''OFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1''@;'; put 'put ''N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmEx''@;'; put 'put ''MVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1''@;'; put 'put ''NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyMyJdLFsiZDZhMSIsIlx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJh''@;'; put 'put ''ZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1''@;'; put 'put ''Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1Njcy''@;'; put 'put ''N1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmYyJdLFsiZDdhMSIsIlx1OTA3Y1x1OWIyN1x1OWY4ZFx1''@;'; put 'put ''NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2''@;'; put 'put ''ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1''@;'; put 'put ''NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZh''@;'; put 'put ''M1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyYyJdLFsiZDhhMSIsIlx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1''@;'; put 'put ''NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4''@;'; put 'put ''NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1''@;'; put 'put ''OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNSJdLFsiZDlhMSIsIlx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3''@;'; put 'put ''ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1''@;'; put 'put ''NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYz''@;'; put 'put ''NFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1''@;'; put 'put ''OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4NyJdLFsiZGFhMSIsIlx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1Njhi''@;'; put 'put ''Nlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1''@;'; put 'put ''NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1Njlj''@;'; put 'put ''M1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MSJdLFsiZGJhMSIsIlx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1''@;'; put 'put ''OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBh''@;'; put 'put ''Nlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1''@;'; put 'put ''NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQz''@;'; put 'put ''YVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1NiJdLFsiZGNhMSIsIlx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1''@;'; put 'put ''NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkx''@;'; put 'put ''M1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1''@;'; put 'put ''NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2NiJdLFsiZGRhMSIsIlx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2''@;'; put 'put ''Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1''@;'; put 'put ''NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1Njhk''@;'; put 'put ''YVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1''@;'; put 'put ''Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNSJdLFsiZGVhMSIsIlx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1''@;'; put 'put ''Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1''@;'; put 'put ''NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3''@;'; put 'put ''Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YSJdLFsiZGZhMSIsIlx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1''@;'; put 'put ''NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTEx''@;'; put 'put ''Zlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1''@;'; put 'put ''NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1Njhm''@;'; put 'put ''Mlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3MiJdLFsiZTBhMSIsIlx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1''@;'; put 'put ''NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIz''@;'; put 'put ''OVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1''@;'; put 'put ''OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2YyJdLFsiZTFhMSIsIlx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUx''@;'; put 'put ''Nlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1''@;'; put 'put ''NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2''@;'; put 'put ''Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1''@;'; put 'put ''NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMSJdLFsiZTJhMSIsIlx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1''@;'; put 'put ''N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1''@;'; put 'put ''OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1Nzdh''@;'; put 'put ''Y1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyNyJdLFsiZTNhMSIsIlx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1''@;'; put 'put ''N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1Njdi''@;'; put 'put ''ZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1''@;'; put 'put ''OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJl''@;'; put 'put ''Nlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MSJdLFsiZTRhMSIsIlx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1''@;'; put 'put ''ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0''@;'; put 'put ''OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1''@;'; put 'put ''OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZCJdLFsiZTVhMSIsIlx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFi''@;'; put 'put ''Nlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1''@;'; put 'put ''NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5''@;'; put 'put ''ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1''@;'; put 'put ''Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4MiJdLFsiZTZhMSIsIlx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3''@;'; put 'put ''OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1''@;'; put 'put ''NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5''@;'; put 'put ''ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMiJdLFsiZTdhMSIsIlx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1''@;'; put 'put ''ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZj''@;'; put 'put ''OFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1''@;'; put 'put ''ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVm''@;'; put 'put ''Zlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiMyJdLFsiZThhMSIsIlx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1''@;'; put 'put ''NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2Zl''@;'; put 'put ''Ylx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1''@;'; put 'put ''NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMSJdLFsiZTlhMSIsIlx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdl''@;'; put 'put ''Zlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1''@;'; put 'put ''NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5''@;'; put 'put ''MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1''@;'; put 'put ''NzE4OVx1ODAxOFx1ODJiOFx1ODU1MyJdLFsiZWFhMSIsIlx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4''@;'; put 'put ''NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1''@;'; put 'put ''NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBh''@;'; put 'put ''MFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYiJdLFsiZWJhMSIsIlx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1''@;'; put 'put ''ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2''@;'; put 'put ''Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1''@;'; put 'put ''NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4''@;'; put 'put ''Zlx1ODdmYlx1ODg2M1x1OGFiYyJdLFsiZWNhMSIsIlx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1''@;'; put 'put ''NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVj''@;'; put 'put ''MVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1''@;'; put 'put ''NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NCJdLFsiZWRhMSIsIlx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIz''@;'; put 'put ''YVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1''@;'; put 'put ''NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThl''@;'; put 'put ''Zlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1''@;'; put 'put ''OGQxM1x1OTFhY1x1OTU3NyJdLFsiZWVhMSIsIlx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0''@;'; put 'put ''N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1''@;'; put 'put ''NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBi''@;'; put 'put ''M1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMSJdLFsiZWZhMSIsIlx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1''@;'; put 'put ''N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcx''@;'; put 'put ''MVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1''@;'; put 'put ''NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMy''@;'; put 'put ''MFx1OTcwNlx1OTc1NiJdLFsiZjBhMSIsIlx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1''@;'; put 'put ''OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1''@;'; put 'put ''Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1''@;'; put 'put ''NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2YiJdLFsiZjFhMSIsIlx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2''@;'; put 'put ''YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1''@;'; put 'put ''N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2''@;'; put 'put ''Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1''@;'; put 'put ''NGU0Ylx1NTNlYSJdLFsiZjJhMSIsIlx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFm''@;'; put 'put ''M1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1''@;'; put 'put ''NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRj''@;'; put 'put ''Nlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZiJdLFsiZjNhMSIsIlx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1''@;'; put 'put ''NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5''@;'; put 'put ''YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1''@;'; put 'put ''NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1Njdm''@;'; put 'put ''NVx1N2I1NiJdLFsiZjRhMSIsIlx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1''@;'; put 'put ''NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNi''@;'; put 'put ''ZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1''@;'; put 'put ''NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMiJdLFsiZjVhMSIsIlx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5''@;'; put 'put ''Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1''@;'; put 'put ''ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEz''@;'; put 'put ''Nlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1''@;'; put 'put ''ODQwMyJdLFsiZjZhMSIsIlx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNk''@;'; put 'put ''OVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1''@;'; put 'put ''NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAy''@;'; put 'put ''Y1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExNyJdLFsiZjdhMSIsIlx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1''@;'; put 'put ''NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThi''@;'; put 'put ''MVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1''@;'; put 'put ''OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIx''@;'; put 'put ''MSJdLFsiZjhhMSIsIlx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1''@;'; put 'put ''N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcw''@;'; put 'put ''M1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1''@;'; put 'put ''NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0MyJdLFsiZjlhMSIsIlx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhh''@;'; put 'put ''Ylx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1''@;'; put 'put ''OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFi''@;'; put 'put ''Ylx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYSJd''@;'; put 'put ''LFsiZmFhMSIsIlx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0''@;'; put 'put ''Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1''@;'; put 'put ''NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkz''@;'; put 'put ''ZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4YiJdLFsiZmJhMSIsIlx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1''@;'; put 'put ''OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRj''@;'; put 'put ''Zlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1''@;'; put 'put ''NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NSJdLFsi''@;'; put 'put ''ZmNhMSIsIlx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEwYlx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5YVx1NTk1MFx1NWJhNlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1''@;'; put 'put ''NzRiMFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQzYlx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1NjY0M1x1NjY0NFx1NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2Jj''@;'; put 'put ''MVx1N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRlZVx1NmZhZVx1NzA3MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMzNFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1''@;'; put 'put ''NzM3Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1Njg5Zlx1NmQ4ZFx1NmRjNiJdLFsiZmRhMSIsIlx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4''@;'; put 'put ''Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1''@;'; put 'put ''OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0''@;'; put 'put ''Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MCJdXScpfSw3''@;'; put 'put ''MjMyNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiYTE0MCIsIlx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1''@;'; put 'put ''MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMw''@;'; put 'put ''MTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWEiXSxbImExYTEiLCJcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThc''@;'; put 'put ''dTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1''@;'; put 'put ''XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2''@;'; put 'put ''MiIsNCwiXHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUy''@;'; put 'put ''MjIzXHVmZjBmIl0sWyJhMjQwIiwiXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0''@;'; put 'put ''XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MSIsNywiXHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1''@;'; put 'put ''XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkIl0sWyJhMmExIiwiXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwIiw5LCJcdTIxNjAiLDksIlx1MzAyMSIsOCwiXHU1MzQx''@;'; put 'put ''XHU1MzQ0XHU1MzQ1XHVmZjIxIiwyNSwiXHVmZjQxIiwyMV0sWyJhMzQwIiwiXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxIiwxNiwiXHUwM2EzIiw2LCJcdTAzYjEiLDE2LCJcdTAzYzMiLDYsIlx1MzEwNSIsMTBdLFsiYTNhMSIsIlx1MzExMCIsMjUsIlx1MDJkOVx1MDJjOVx1MDJj''@;'; put 'put ''YVx1MDJjN1x1MDJjYiJdLFsiYTNlMSIsIlx1MjBhYyJdLFsiYTQ0MCIsIlx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1''@;'; put 'put ''NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJm''@;'; put 'put ''OFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZCJdLFsiYTRhMSIsIlx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1''@;'; put 'put ''NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMx''@;'; put 'put ''Nlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1''@;'; put 'put ''NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4''@;'; put 'put ''Ylx1NGUxOSJdLFsiYTU0MCIsIlx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1''@;'; put 'put ''NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNl''@;'; put 'put ''Ylx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNiJdLFsiYTVhMSIsIlx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1''@;'; put 'put ''NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRk''@;'; put 'put ''Y1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1''@;'; put 'put ''NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OCJdLFsiYTY0MCIsIlx1NTE3''@;'; put 'put ''MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1''@;'; put 'put ''NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4''@;'; put 'put ''OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NCJdLFsiYTZhMSIsIlx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1''@;'; put 'put ''NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2Yz''@;'; put 'put ''Nlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1''@;'; put 'put ''NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2MyJdLFsiYTc0MCIsIlx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYz''@;'; put 'put ''Nlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1''@;'; put 'put ''NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0''@;'; put 'put ''YVx1NTc1MVx1NTc0MFx1NTc0ZCJdLFsiYTdhMSIsIlx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1''@;'; put 'put ''NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZj''@;'; put 'put ''Y1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1''@;'; put 'put ''NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MCJdLFsiYTg0MCIsIlx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4''@;'; put 'put ''OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1''@;'; put 'put ''NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5MiJdLFsi''@;'; put 'put ''YThhMSIsIlx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1''@;'; put 'put ''OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3''@;'; put 'put ''NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1''@;'; put 'put ''NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NSJdLFsiYTk0MCIsIlx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3''@;'; put 'put ''Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1''@;'; put 'put ''NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NSJdLFsiYTlhMSIsIlx1NWM0Nlx1NWNiN1x1NWNh''@;'; put 'put ''MVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1''@;'; put 'put ''NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJk''@;'; put 'put ''Mlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1''@;'; put 'put ''NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYSJdLFsiYWE0MCIsIlx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4''@;'; put 'put ''OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1''@;'; put 'put ''NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMCJdLFsiYWFhMSIsIlx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIy''@;'; put 'put ''ZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1''@;'; put 'put ''NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJi''@;'; put 'put ''ZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1''@;'; put 'put ''OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NCJdLFsiYWI0MCIsIlx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZj''@;'; put 'put ''YVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1''@;'; put 'put ''NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMSJdLFsiYWJhMSIsIlx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4''@;'; put 'put ''Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1''@;'; put 'put ''NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4''@;'; put 'put ''OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1''@;'; put 'put ''NjJmNyJdLFsiYWM0MCIsIlx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1Njdk''@;'; put 'put ''NFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1''@;'; put 'put ''NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxNyJdLFsiYWNhMSIsIlx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBh''@;'; put 'put ''Ylx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1''@;'; put 'put ''NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0''@;'; put 'put ''Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNCJdLFsiYWQ0MCIsIlx1ODAxMFx1''@;'; put 'put ''ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJk''@;'; put 'put ''Mlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1''@;'; put 'put ''OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNSJdLFsiYWRhMSIsIlx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdj''@;'; put 'put ''Ylx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1''@;'; put 'put ''NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMy''@;'; put 'put ''YVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYSJdLFsiYWU0MCIsIlx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1''@;'; put 'put ''NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJi''@;'; put 'put ''M1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1''@;'; put 'put ''NWY5MVx1NWY5MFx1NjA1OSJdLFsiYWVhMSIsIlx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1''@;'; put 'put ''NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1''@;'; put 'put ''NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4''@;'; put 'put ''OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5MyJdLFsiYWY0MCIsIlx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1''@;'; put 'put ''NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1''@;'; put 'put ''OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzNyJdLFsiYWZh''@;'; put 'put ''MSIsIlx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4''@;'; put 'put ''OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1''@;'; put 'put ''ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1''@;'; put 'put ''MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0MyJdLFsiYjA0MCIsIlx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1''@;'; put 'put ''ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAw''@;'; put 'put ''MFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MSJdLFsiYjBhMSIsIlx1OTY1Ylx1OTY1ZFx1OTY2NFx1''@;'; put 'put ''OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAw''@;'; put 'put ''Zlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1''@;'; put 'put ''NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdm''@;'; put 'put ''OVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MCJdLFsiYjE0MCIsIlx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1''@;'; put 'put ''NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2''@;'; put 'put ''Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZCJdLFsiYjFhMSIsIlx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1''@;'; put 'put ''NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5''@;'; put 'put ''OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1''@;'; put 'put ''NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5''@;'; put 'put ''Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYSJdLFsiYjI0MCIsIlx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1''@;'; put 'put ''NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4''@;'; put 'put ''MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNiJdLFsiYjJhMSIsIlx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1''@;'; put 'put ''NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2Ix''@;'; put 'put ''ZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1''@;'; put 'put ''ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3''@;'; put 'put ''YyJdLFsiYjM0MCIsIlx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1''@;'; put 'put ''OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAx''@;'; put 'put ''Zlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNCJdLFsiYjNhMSIsIlx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1''@;'; put 'put ''OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5''@;'; put 'put ''YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1''@;'; put 'put ''NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MCJdLFsiYjQ0MCIsIlx1NWE3N1x1NWE5''@;'; put 'put ''YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1''@;'; put 'put ''NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4''@;'; put 'put ''Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZCJdLFsiYjRhMSIsIlx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1''@;'; put 'put ''NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1Njhm''@;'; put 'put ''Mlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1''@;'; put 'put ''NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYiJdLFsiYjU0MCIsIlx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3''@;'; put 'put ''Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1''@;'; put 'put ''NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2Ew''@;'; put 'put ''NVx1N2EwMFx1N2E5OCJdLFsiYjVhMSIsIlx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1''@;'; put 'put ''N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQw''@;'; put 'put ''ZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1''@;'; put 'put ''ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MSJdLFsiYjY0MCIsIlx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4''@;'; put 'put ''Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1''@;'; put 'put ''OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MSJdLFsiYjZhMSIs''@;'; put 'put ''Ilx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1''@;'; put 'put ''OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMy''@;'; put 'put ''Zlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1''@;'; put 'put ''NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiYyJdLFsiYjc0MCIsIlx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjEx''@;'; put 'put ''YVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1''@;'; put 'put ''NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2ZCJdLFsiYjdhMSIsIlx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1''@;'; put 'put ''NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1''@;'; put 'put ''NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2''@;'; put 'put ''OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1''@;'; put 'put ''NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2MyJdLFsiYjg0MCIsIlx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3''@;'; put 'put ''Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1''@;'; put 'put ''N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2YiJdLFsiYjhhMSIsIlx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQz''@;'; put 'put ''ZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1''@;'; put 'put ''ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2''@;'; put 'put ''Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1''@;'; put 'put ''OGYwM1x1OGYwOVx1OGVmZVx1OGYwYSJdLFsiYjk0MCIsIlx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2''@;'; put 'put ''OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1''@;'; put 'put ''OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNCJdLFsiYjlhMSIsIlx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBl''@;'; put 'put ''N1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1''@;'; put 'put ''NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFk''@;'; put 'put ''OFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0NyJd''@;'; put 'put ''LFsiYmE0MCIsIlx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVk''@;'; put 'put ''Nlx1NjZhMlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1''@;'; put 'put ''NmVmZVx1NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMiJdLFsiYmFhMSIsIlx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVmMlx1NmVj''@;'; put 'put ''Y1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1Nzc4NFx1''@;'; put 'put ''Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2JiOFx1N2I4''@;'; put 'put ''N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhYyJdLFsiYmI0MCIsIlx1N2Y3MFx1N2ZlMFx1''@;'; put 'put ''N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRi''@;'; put 'put ''OFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1''@;'; put 'put ''OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNCJdLFsiYmJhMSIsIlx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYx''@;'; put 'put ''NVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1''@;'; put 'put ''OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFi''@;'; put 'put ''MFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkYyJdLFsiYmM0MCIsIlx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1''@;'; put 'put ''NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFm''@;'; put 'put ''NVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1''@;'; put 'put ''NjE1NVx1NjE4MiJdLFsiYmNhMSIsIlx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5''@;'; put 'put ''M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1''@;'; put 'put ''NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1''@;'; put 'put ''OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4MyJdLFsiYmQ0MCIsIlx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1''@;'; put 'put ''NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2Ji''@;'; put 'put ''NFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZiJdLFsiYmRhMSIsIlx1''@;'; put 'put ''N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2''@;'; put 'put ''Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1''@;'; put 'put ''OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUx''@;'; put 'put ''Zlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZSJdLFsiYmU0MCIsIlx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1''@;'; put 'put ''OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkw''@;'; put 'put ''YVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOSJdLFsiYmVhMSIsIlx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1''@;'; put 'put ''NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThj''@;'; put 'put ''MVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1''@;'; put 'put ''NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1''@;'; put 'put ''Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMSJdLFsiYmY0MCIsIlx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1''@;'; put 'put ''NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1Nzlh''@;'; put 'put ''Nlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYSJdLFsiYmZhMSIsIlx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1''@;'; put 'put ''N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4''@;'; put 'put ''ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1''@;'; put 'put ''OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJm''@;'; put 'put ''Y1x1OTMyYlx1OTMwNFx1OTMxYSJdLFsiYzA0MCIsIlx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1''@;'; put 'put ''OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVk''@;'; put 'put ''OFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4NyJdLFsiYzBhMSIsIlx1NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1''@;'; put 'put ''NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4''@;'; put 'put ''MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1''@;'; put 'put ''NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhYyJdLFsi''@;'; put 'put ''YzE0MCIsIlx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1''@;'; put 'put ''N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFj''@;'; put 'put ''Mlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYSJdLFsiYzFhMSIsIlx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1''@;'; put 'put ''ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNm''@;'; put 'put ''Ylx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1''@;'; put 'put ''OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMSJdLFsiYzI0MCIsIlx1OTlmZlx1OWJhZVx1OWJh''@;'; put 'put ''Ylx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1''@;'; put 'put ''NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3''@;'; put 'put ''NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OCJdLFsiYzJhMSIsIlx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1''@;'; put 'put ''N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4''@;'; put 'put ''Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1''@;'; put 'put ''OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNiJdLFsiYzM0MCIsIlx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1''@;'; put 'put ''M1x1OThiYVx1OTkzZVx1OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1''@;'; put 'put ''NThkZlx1NThlMlx1NWJmNVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJh''@;'; put 'put ''Mlx1NzM3OCJdLFsiYzNhMSIsIlx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1''@;'; put 'put ''N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0''@;'; put 'put ''ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1''@;'; put 'put ''OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZSJdLFsiYzQ0MCIsIlx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJk''@;'; put 'put ''Nlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1''@;'; put 'put ''NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3YyJdLFsiYzRhMSIsIlx1N2U4''@;'; put 'put ''Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1''@;'; put 'put ''OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEz''@;'; put 'put ''OFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1''@;'; put 'put ''ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NCJdLFsiYzU0MCIsIlx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQz''@;'; put 'put ''Mlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1''@;'; put 'put ''OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2YyJdLFsiYzVhMSIsIlx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3''@;'; put 'put ''ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1''@;'; put 'put ''OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4''@;'; put 'put ''YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1''@;'; put 'put ''N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5MiJdLFsiYzY0MCIsIlx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYw''@;'; put 'put ''N1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1''@;'; put 'put ''OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3MiJdLFsiYzk0MCIsIlx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4''@;'; put 'put ''ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1''@;'; put 'put ''NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNSJdLFsi''@;'; put 'put ''YzlhMSIsIlx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1''@;'; put 'put ''NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3''@;'; put 'put ''Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1''@;'; put 'put ''NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0YiJdLFsiY2E0MCIsIlx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4''@;'; put 'put ''MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1''@;'; put 'put ''NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOCJdLFsiY2FhMSIsIlx1NTQzZFx1NTQ0Zlx1NTQ0''@;'; put 'put ''MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1''@;'; put 'put ''NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZl''@;'; put 'put ''OFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1''@;'; put 'put ''NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0NyJdLFsiY2I0MCIsIlx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4''@;'; put 'put ''Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1''@;'; put 'put ''NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5MyJdLFsiY2JhMSIsIlx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5''@;'; put 'put ''Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1''@;'; put 'put ''NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5''@;'; put 'put ''MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1''@;'; put 'put ''NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1NTc2MiJdLFsiY2M0MCIsIlx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTlj''@;'; put 'put ''N1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1''@;'; put 'put ''NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYiJdLFsiY2NhMSIsIlx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAy''@;'; put 'put ''ZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1''@;'; put 'put ''NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5''@;'; put 'put ''OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1''@;'; put 'put ''NmNmMiJdLFsiY2Q0MCIsIlx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4''@;'; put 'put ''Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1''@;'; put 'put ''NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYSJdLFsiY2RhMSIsIlx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBi''@;'; put 'put ''NVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1''@;'; put 'put ''OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZk''@;'; put 'put ''OVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZiJdLFsiY2U0MCIsIlx1NTRjM1x1''@;'; put 'put ''ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdh''@;'; put 'put ''NVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1''@;'; put 'put ''NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYiJdLFsiY2VhMSIsIlx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUy''@;'; put 'put ''MFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1''@;'; put 'put ''NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjVi''@;'; put 'put ''Zlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYSJdLFsiY2Y0MCIsIlx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1''@;'; put 'put ''NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1Njdj''@;'; put 'put ''YVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1''@;'; put 'put ''NmQwMFx1NmQxZFx1NmQ0MiJdLFsiY2ZhMSIsIlx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0''@;'; put 'put ''MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1''@;'; put 'put ''NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1Nzgx''@;'; put 'put ''MFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MCJdLFsiZDA0MCIsIlx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1''@;'; put 'put ''N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBj''@;'; put 'put ''Zlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYSJdLFsiZDBh''@;'; put 'put ''MSIsIlx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBj''@;'; put 'put ''NVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1''@;'; put 'put ''NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUx''@;'; put 'put ''N1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMSJdLFsiZDE0MCIsIlx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1''@;'; put 'put ''NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJh''@;'; put 'put ''Y1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2NyJdLFsiZDFhMSIsIlx1NjA0MVx1NjBhMlx1NjA4OFx1''@;'; put 'put ''NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0''@;'; put 'put ''MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1''@;'; put 'put ''Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIy''@;'; put 'put ''Zlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNCJdLFsiZDI0MCIsIlx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1''@;'; put 'put ''NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBk''@;'; put 'put ''MVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OCJdLFsiZDJhMSIsIlx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1''@;'; put 'put ''NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzVi''@;'; put 'put ''MFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1''@;'; put 'put ''NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4''@;'; put 'put ''Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMCJdLFsiZDM0MCIsIlx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1''@;'; put 'put ''N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIw''@;'; put 'put ''MVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMiJdLFsiZDNhMSIsIlx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1''@;'; put 'put ''ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZh''@;'; put 'put ''MVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1''@;'; put 'put ''OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1''@;'; put 'put ''MCJdLFsiZDQ0MCIsIlx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1''@;'; put 'put ''NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0''@;'; put 'put ''ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NSJdLFsiZDRhMSIsIlx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1''@;'; put 'put ''NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgw''@;'; put 'put ''ZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1''@;'; put 'put ''NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZiJdLFsiZDU0MCIsIlx1NWQzMFx1NWQx''@;'; put 'put ''Mlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1''@;'; put 'put ''NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5''@;'; put 'put ''Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5ZiJdLFsiZDVhMSIsIlx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1''@;'; put 'put ''Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1Njhh''@;'; put 'put ''NFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1''@;'; put 'put ''NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOSJdLFsiZDY0MCIsIlx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRj''@;'; put 'put ''ZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1''@;'; put 'put ''NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVj''@;'; put 'put ''ZVx1NzVkMlx1NzVjZiJdLFsiZDZhMSIsIlx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1''@;'; put 'put ''Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2Ix''@;'; put 'put ''OFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1''@;'; put 'put ''N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZiJdLFsiZDc0MCIsIlx1ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEy''@;'; put 'put ''ZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1''@;'; put 'put ''ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiNyJdLFsiZDdhMSIs''@;'; put 'put ''Ilx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1''@;'; put 'put ''ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRj''@;'; put 'put ''Mlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1''@;'; put 'put ''OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYSJdLFsiZDg0MCIsIlx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2''@;'; put 'put ''YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1''@;'; put 'put ''NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzNyJdLFsiZDhhMSIsIlx1NTgxOVx1NTgxZVx1NTgyN1x1NTgy''@;'; put 'put ''M1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1''@;'; put 'put ''NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2''@;'; put 'put ''Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1''@;'; put 'put ''NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNCJdLFsiZDk0MCIsIlx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0''@;'; put 'put ''YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1''@;'; put 'put ''NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMiJdLFsiZDlhMSIsIlx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3''@;'; put 'put ''Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1''@;'; put 'put ''NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5''@;'; put 'put ''N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1''@;'; put 'put ''NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZSJdLFsiZGE0MCIsIlx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUz''@;'; put 'put ''NVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1''@;'; put 'put ''NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNiJdLFsiZGFhMSIsIlx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUy''@;'; put 'put ''Zlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1''@;'; put 'put ''Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0''@;'; put 'put ''ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NSJd''@;'; put 'put ''LFsiZGI0MCIsIlx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIz''@;'; put 'put ''ZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1''@;'; put 'put ''ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmMyJdLFsiZGJhMSIsIlx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNm''@;'; put 'put ''ZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1''@;'; put 'put ''ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4''@;'; put 'put ''MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYSJdLFsiZGM0MCIsIlx1OGVmOVx1OGVlNlx1''@;'; put 'put ''OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2''@;'; put 'put ''MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1''@;'; put 'put ''OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OCJdLFsiZGNhMSIsIlx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBi''@;'; put 'put ''ZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1''@;'; put 'put ''NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1''@;'; put 'put ''ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNiJdLFsiZGQ0MCIsIlx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1''@;'; put 'put ''NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVj''@;'; put 'put ''N1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1''@;'; put 'put ''NjQyMFx1NjQyNCJdLFsiZGRhMSIsIlx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQx''@;'; put 'put ''Ylx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1''@;'; put 'put ''Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1''@;'; put 'put ''MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmYyJdLFsiZGU0MCIsIlx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1''@;'; put 'put ''NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmVi''@;'; put 'put ''M1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1MyJdLFsiZGVhMSIsIlx1''@;'; put 'put ''NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0''@;'; put 'put ''Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1''@;'; put 'put ''Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3''@;'; put 'put ''Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExMyJdLFsiZGY0MCIsIlx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1''@;'; put 'put ''N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2''@;'; put 'put ''N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2ZiJdLFsiZGZhMSIsIlx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1''@;'; put 'put ''ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQz''@;'; put 'put ''YVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1''@;'; put 'put ''ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhk''@;'; put 'put ''YVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNCJdLFsiZTA0MCIsIlx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1''@;'; put 'put ''OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRl''@;'; put 'put ''OVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZiJdLFsiZTBhMSIsIlx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1''@;'; put 'put ''OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1''@;'; put 'put ''NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1''@;'; put 'put ''OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBm''@;'; put 'put ''MFx1NTBlZlx1NTBlM1x1NTBlMCJdLFsiZTE0MCIsIlx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1''@;'; put 'put ''NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFl''@;'; put 'put ''ZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMCJdLFsiZTFhMSIsIlx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1''@;'; put 'put ''NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1''@;'; put 'put ''Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1''@;'; put 'put ''NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOSJdLFsi''@;'; put 'put ''ZTI0MCIsIlx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1''@;'; put 'put ''NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYw''@;'; put 'put ''OVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYSJdLFsiZTJhMSIsIlx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1''@;'; put 'put ''NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1''@;'; put 'put ''MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1''@;'; put 'put ''Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5MyJdLFsiZTM0MCIsIlx1Nzk5N1x1Nzk4OFx1Nzk5''@;'; put 'put ''Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1''@;'; put 'put ''N2NiYlx1N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2Rj''@;'; put 'put ''OVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZSJdLFsiZTNhMSIsIlx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1''@;'; put 'put ''ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRk''@;'; put 'put ''Mlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1''@;'; put 'put ''ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYiJdLFsiZTQ0MCIsIlx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5''@;'; put 'put ''ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1''@;'; put 'put ''OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJh''@;'; put 'put ''YVx1OTI4ZCJdLFsiZTRhMSIsIlx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1''@;'; put 'put ''OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTli''@;'; put 'put ''OVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1''@;'; put 'put ''NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OCJdLFsiZTU0MCIsIlx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThh''@;'; put 'put ''Ylx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1''@;'; put 'put ''NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OSJdLFsiZTVhMSIsIlx1NjE5''@;'; put 'put ''Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1''@;'; put 'put ''NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1Njlm''@;'; put 'put ''ZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1''@;'; put 'put ''NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5MiJdLFsiZTY0MCIsIlx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1''@;'; put 'put ''MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1''@;'; put 'put ''NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OSJdLFsiZTZhMSIsIlx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4''@;'; put 'put ''Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1''@;'; put 'put ''NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2Ji''@;'; put 'put ''OVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1''@;'; put 'put ''N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5ZiJdLFsiZTc0MCIsIlx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUw''@;'; put 'put ''OVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1''@;'; put 'put ''ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2MiJdLFsiZTdhMSIsIlx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1''@;'; put 'put ''Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1''@;'; put 'put ''ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFk''@;'; put 'put ''OFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1''@;'; put 'put ''OGUxOVx1OGUyNlx1OGUyNyJdLFsiZTg0MCIsIlx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEy''@;'; put 'put ''OVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1''@;'; put 'put ''OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkMyJdLFsiZThhMSIsIlx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcw''@;'; put 'put ''NVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1''@;'; put 'put ''OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNm''@;'; put 'put ''Y1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZSJdLFsiZTk0''@;'; put 'put ''MCIsIlx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIx''@;'; put 'put ''YVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1''@;'; put 'put ''NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYSJdLFsiZTlhMSIsIlx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3''@;'; put 'put ''Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1''@;'; put 'put ''NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMw''@;'; put 'put ''Nlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOCJdLFsiZWE0MCIsIlx1NmZhMlx1NmZjOVx1NmZhYlx1''@;'; put 'put ''NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2''@;'; put 'put ''Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1''@;'; put 'put ''Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OSJdLFsiZWFhMSIsIlx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2Fi''@;'; put 'put ''MVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1''@;'; put 'put ''N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFi''@;'; put 'put ''NVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OCJdLFsiZWI0MCIsIlx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1''@;'; put 'put ''ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5''@;'; put 'put ''Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1''@;'; put 'put ''OGFlMCJdLFsiZWJhMSIsIlx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2''@;'; put 'put ''Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1''@;'; put 'put ''OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJm''@;'; put 'put ''YVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwYyJdLFsiZWM0MCIsIlx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1''@;'; put 'put ''OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTll''@;'; put 'put ''M1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NSJdLFsiZWNhMSIsIlx1OWI3ZFx1''@;'; put 'put ''OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEy''@;'; put 'put ''MFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1''@;'; put 'put ''NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5''@;'; put 'put ''Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZSJdLFsiZWQ0MCIsIlx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1''@;'; put 'put ''NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRh''@;'; put 'put ''YVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNiJdLFsiZWRhMSIsIlx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1''@;'; put 'put ''NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2Jm''@;'; put 'put ''NFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1''@;'; put 'put ''N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVh''@;'; put 'put ''MFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZSJdLFsiZWU0MCIsIlx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1''@;'; put 'put ''ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdi''@;'; put 'put ''ZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZSJdLFsiZWVhMSIsIlx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1''@;'; put 'put ''OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5''@;'; put 'put ''YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1''@;'; put 'put ''OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5''@;'; put 'put ''YVx1OTdhMVx1OTc5YyJdLFsiZWY0MCIsIlx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1''@;'; put 'put ''OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4''@;'; put 'put ''Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMCJdLFsiZWZhMSIsIlx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1''@;'; put 'put ''OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFl''@;'; put 'put ''ZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1''@;'; put 'put ''NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3NiJdLFsiZjA0MCIs''@;'; put 'put ''Ilx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1''@;'; put 'put ''NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1''@;'; put 'put ''N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMiJdLFsiZjBhMSIsIlx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1''@;'; put 'put ''ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdk''@;'; put 'put ''OVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1''@;'; put 'put ''OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2NyJdLFsiZjE0MCIsIlx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1''@;'; put 'put ''ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1''@;'; put 'put ''OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdh''@;'; put 'put ''ZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYSJdLFsiZjFhMSIsIlx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1''@;'; put 'put ''OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0''@;'; put 'put ''Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1''@;'; put 'put ''NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MCJdLFsiZjI0MCIsIlx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUw''@;'; put 'put ''ZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1''@;'; put 'put ''NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1Nzkx''@;'; put 'put ''YiJdLFsiZjJhMSIsIlx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1''@;'; put 'put ''N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVk''@;'; put 'put ''MVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1''@;'; put 'put ''ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NSJdLFsiZjM0MCIsIlx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRh''@;'; put 'put ''Y1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1''@;'; put 'put ''OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNiJdLFsiZjNhMSIsIlx1OTdiM1x1OTdi''@;'; put 'put ''N1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1''@;'; put 'put ''OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4''@;'; put 'put ''MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1''@;'; put 'put ''OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMiJdLFsiZjQ0MCIsIlx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVk''@;'; put 'put ''Zlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1''@;'; put 'put ''NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOSJdLFsiZjRhMSIsIlx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0''@;'; put 'put ''OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1''@;'; put 'put ''ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1''@;'; put 'put ''NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1''@;'; put 'put ''OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZiJdLFsiZjU0MCIsIlx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThj''@;'; put 'put ''Mlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1''@;'; put 'put ''OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5YiJdLFsiZjVhMSIsIlx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5''@;'; put 'put ''ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1''@;'; put 'put ''NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1Nzky''@;'; put 'put ''ZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1''@;'; put 'put ''ODYxZVx1ODYyNSJdLFsiZjY0MCIsIlx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1''@;'; put 'put ''ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1''@;'; put 'put ''OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYSJdLFsiZjZhMSIsIlx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMy''@;'; put 'put ''OFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1''@;'; put 'put ''OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIw''@;'; put 'put ''OFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YSJdLFsiZjc0MCIsIlx1''@;'; put 'put ''N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3''@;'; put 'put ''Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1''@;'; put 'put ''OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YSJdLFsiZjdhMSIsIlx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMz''@;'; put 'put ''N1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1''@;'; put 'put ''OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4''@;'; put 'put ''M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZSJdLFsiZjg0MCIsIlx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1''@;'; put 'put ''OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0''@;'; put 'put ''Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1''@;'; put 'put ''OWYzN1x1OWYzNlx1OWY0M1x1OWY0ZiJdLFsiZjhhMSIsIlx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1Nzli''@;'; put 'put ''N1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1''@;'; put 'put ''OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3''@;'; put 'put ''Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YSJdLFsiZjk0MCIsIlx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1''@;'; put 'put ''ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVh''@;'; put 'put ''MVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYSJd''@;'; put 'put ''LFsiZjlhMSIsIlx1OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIw''@;'; put 'put ''N1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1''@;'; put 'put ''Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1''@;'; put 'put ''Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5MyJdXScpfSw1NjQwNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiOGVhMSIsIlx1''@;'; put 'put ''ZmY2MSIsNjJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1''@;'; put 'put ''XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZmMGJcdWZm''@;'; put 'put ''MGRceGIxXHhkN1x4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYw''@;'; put 'put ''NVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjNyJdLFsiYTJhMSIsIlx1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJiYSIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1''@;'; put 'put ''MjI4M1x1MjIyYVx1MjIyOSJdLFsiYTJjYSIsIlx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiYTJkYyIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIy''@;'; put 'put ''Ylx1MjIyYyJdLFsiYTJmMiIsIlx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbImEyZmUiLCJcdTI1ZWYiXSxbImEzYjAiLCJcdWZmMTAiLDldLFsiYTNjMSIsIlx1ZmYyMSIsMjVdLFsiYTNlMSIsIlx1ZmY0MSIsMjVdLFsiYTRhMSIsIlx1MzA0MSIs''@;'; put 'put ''ODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0s''@;'; put 'put ''WyJhOGExIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3''@;'; put 'put ''XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyIl0sWyJhZGExIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbImFkYzAiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJc''@;'; put 'put ''dTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbImFkZGYiLCJcdTMzN2JcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIy''@;'; put 'put ''Ylx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiYjBhMSIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1''@;'; put 'put ''NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYw''@;'; put 'put ''YVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1''@;'; put 'put ''NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiYjFhMSIsIlx1OTY2Mlx1OTY3''@;'; put 'put ''MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1''@;'; put 'put ''NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBh''@;'; put 'put ''Nlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1''@;'; put 'put ''OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkYyJdLFsiYjJhMSIsIlx1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0''@;'; put 'put ''Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1''@;'; put 'put ''Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1''@;'; put 'put ''OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiYjNhMSIsIlx1OWI0MVx1NjY2Nlx1''@;'; put 'put ''NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlh''@;'; put 'put ''OFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1''@;'; put 'put ''Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYlx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1''@;'; put 'put ''Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMSJdLFsiYjRhMSIsIlx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1''@;'; put 'put ''NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2Yz''@;'; put 'put ''Nlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1''@;'; put 'put ''OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiYjVhMSIsIlx1NmE1Zlx1NWUzMFx1NmJj''@;'; put 'put ''NVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1''@;'; put 'put ''NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNj''@;'; put 'put ''YVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1''@;'; put 'put ''OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhYyJdLFsiYjZhMSIsIlx1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAy''@;'; put 'put ''Zlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1''@;'; put 'put ''Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMz''@;'; put 'put ''YVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiYjdhMSIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1''@;'; put 'put ''OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4''@;'; put 'put ''Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1''@;'; put 'put ''OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVh''@;'; put 'put ''N1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3MiJdLFsiYjhhMSIsIlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1''@;'; put 'put ''OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIz''@;'; put 'put ''OFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1''@;'; put 'put ''NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMSJdLFsiYjlhMSIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdh''@;'; put 'put ''Mlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1''@;'; put 'put ''NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3''@;'; put 'put ''MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1''@;'; put 'put ''NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiYyJdLFsiYmFhMSIsIlx1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0''@;'; put 'put ''Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1''@;'; put 'put ''NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRi''@;'; put 'put ''Mlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzNyJdLFsiYmJhMSIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1''@;'; put 'put ''NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3''@;'; put 'put ''OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1''@;'; put 'put ''NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYz''@;'; put 'put ''Y1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0MiJdLFsiYmNhMSIsIlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1''@;'; put 'put ''N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2''@;'; put 'put ''OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1''@;'; put 'put ''NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OCJdLFsiYmRhMSIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEw''@;'; put 'put ''MVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1''@;'; put 'put ''NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVl''@;'; put 'put ''Y1x1Njk2Zlx1NmI4OVx1NmRmM1x1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1''@;'; put 'put ''NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZiJdLFsiYmVhMSIsIlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVl''@;'; put 'put ''MFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1''@;'; put 'put ''N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3''@;'; put 'put ''MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZSJdLFsiYmZhMSIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1''@;'; put 'put ''ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1Nzll''@;'; put 'put ''Nlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1''@;'; put 'put ''OTE2Mlx1NTZmM1x1NTNhOFx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2''@;'; put 'put ''ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZSJdLFsiYzBhMSIsIlx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1''@;'; put 'put ''NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5''@;'; put 'put ''MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1''@;'; put 'put ''NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYSJdLFsiYzFhMSIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVh''@;'; put 'put ''Nlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1''@;'; put 'put ''NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4''@;'; put 'put ''M1x1NjMzZlx1NjNiYlx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1''@;'; put 'put ''OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZSJdLFsiYzJhMSIsIlx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1''@;'; put 'put ''Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1''@;'; put 'put ''NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRm''@;'; put 'put ''OVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYSJdLFsiYzNhMSIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1''@;'; put 'put ''NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5''@;'; put 'put ''NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1''@;'; put 'put ''N2I1MVx1ODRjNFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNh''@;'; put 'put ''Zlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNSJdLFsiYzRhMSIsIlx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1''@;'; put 'put ''OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1Njlm''@;'; put 'put ''Ylx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1''@;'; put 'put ''NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJdLFsiYzVhMSIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRl''@;'; put 'put ''Mlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1''@;'; put 'put ''NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1''@;'; put 'put ''YVx1NTFhY1x1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1''@;'; put 'put ''N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMCJdLFsiYzZhMSIsIlx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5''@;'; put 'put ''ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1''@;'; put 'put ''ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2Uw''@;'; put 'put ''NFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsiYzdhMSIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1''@;'; put 'put ''NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRm''@;'; put 'put ''NFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1''@;'; put 'put ''Njg4NVx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIw''@;'; put 'put ''Nlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNiJdLFsiYzhhMSIsIlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1''@;'; put 'put ''OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2''@;'; put 'put ''OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1''@;'; put 'put ''N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiYzlhMSIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5''@;'; put 'put ''ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1''@;'; put 'put ''ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3''@;'; put 'put ''N1x1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1''@;'; put 'put ''NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZCJdLFsiY2FhMSIsIlx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2Qx''@;'; put 'put ''Ylx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1''@;'; put 'put ''NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2Mz''@;'; put 'put ''Zlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiY2JhMSIsIlx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1''@;'; put 'put ''ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFh''@;'; put 'put ''OFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1''@;'; put 'put ''NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWVi''@;'; put 'put ''Zlx1NGUwN1x1NjE2Mlx1NmU4MCJdLFsiY2NhMSIsIlx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1''@;'; put 'put ''NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1''@;'; put 'put ''Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1''@;'; put 'put ''OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiY2RhMSIsIlx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3''@;'; put 'put ''ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1''@;'; put 'put ''NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1NmM4''@;'; put 'put ''M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1''@;'; put 'put ''NjhhOFx1NzQwNlx1NzQ4MyJdLFsiY2VhMSIsIlx1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZi''@;'; put 'put ''Nlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1''@;'; put 'put ''Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcw''@;'; put 'put ''YVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiY2ZhMSIsIlx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1''@;'; put 'put ''OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNj''@;'; put 'put ''NFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiZDBhMSIsIlx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1''@;'; put 'put ''NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1''@;'; put 'put ''Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1''@;'; put 'put ''NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBi''@;'; put 'put ''MiJdLFsiZDFhMSIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1''@;'; put 'put ''NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFi''@;'; put 'put ''Mlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1''@;'; put 'put ''NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOCJdLFsiZDJhMSIsIlx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThl''@;'; put 'put ''ZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1''@;'; put 'put ''NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQz''@;'; put 'put ''Y1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJd''@;'; put 'put ''LFsiZDNhMSIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUz''@;'; put 'put ''M1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1''@;'; put 'put ''NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZj''@;'; put 'put ''MVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOSJdLFsiZDRhMSIsIlx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1''@;'; put 'put ''NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgy''@;'; put 'put ''MVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1''@;'; put 'put ''NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsi''@;'; put 'put ''ZDVhMSIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1''@;'; put 'put ''NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1''@;'; put 'put ''Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1''@;'; put 'put ''NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1MyJdLFsiZDZhMSIsIlx1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNh''@;'; put 'put ''Ylx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1''@;'; put 'put ''NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUx''@;'; put 'put ''YVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiZDdh''@;'; put 'put ''MSIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0''@;'; put 'put ''MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1''@;'; put 'put ''NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0''@;'; put 'put ''ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YSJdLFsiZDhhMSIsIlx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1''@;'; put 'put ''NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEz''@;'; put 'put ''ZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1''@;'; put 'put ''NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiZDlhMSIs''@;'; put 'put ''Ilx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1''@;'; put 'put ''NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4''@;'; put 'put ''MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1''@;'; put 'put ''NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiYyJdLFsiZGFhMSIsIlx1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRl''@;'; put 'put ''M1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1''@;'; put 'put ''NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYz''@;'; put 'put ''NFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiZGJhMSIsIlx1''@;'; put 'put ''NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2''@;'; put 'put ''M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1''@;'; put 'put ''NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1Njkw''@;'; put 'put ''Zlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZCJdLFsiZGNhMSIsIlx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1''@;'; put 'put ''NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1Njlk''@;'; put 'put ''M1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1''@;'; put 'put ''NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiZGRhMSIsIlx1NmE5''@;'; put 'put ''N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1''@;'; put 'put ''NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJj''@;'; put 'put ''Nlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1''@;'; put 'put ''NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZSJdLFsiZGVhMSIsIlx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQx''@;'; put 'put ''Mlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1''@;'; put 'put ''NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVj''@;'; put 'put ''OVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZGZhMSIsIlx1NmYzZVx1''@;'; put 'put ''NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZl''@;'; put 'put ''Y1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1''@;'; put 'put ''NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFi''@;'; put 'put ''OVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmYyJdLFsiZTBhMSIsIlx1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1''@;'; put 'put ''NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMx''@;'; put 'put ''Nlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1''@;'; put 'put ''NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTFhMSIsIlx1NzRlMFx1NzRl''@;'; put 'put ''M1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1''@;'; put 'put ''NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVj''@;'; put 'put ''YVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1''@;'; put 'put ''NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MCJdLFsiZTJhMSIsIlx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZi''@;'; put 'put ''OFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1''@;'; put 'put ''Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1Nzgx''@;'; put 'put ''Mlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTNhMSIsIlx1NzhlN1x1NzhkYVx1''@;'; put 'put ''NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1Nzlk''@;'; put 'put ''NVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1''@;'; put 'put ''N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2Iw''@;'; put 'put ''YVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MCJdLFsiZTRhMSIsIlx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1''@;'; put 'put ''N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2Mx''@;'; put 'put ''N1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1''@;'; put 'put ''N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTVhMSIsIlx1N2QwMlx1N2QxY1x1N2Qx''@;'; put 'put ''NVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1''@;'; put 'put ''N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2''@;'; put 'put ''Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1''@;'; put 'put ''N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYSJdLFsiZTZhMSIsIlx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4''@;'; put 'put ''Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1''@;'; put 'put ''ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4''@;'; put 'put ''Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTdhMSIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1''@;'; put 'put ''ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFi''@;'; put 'put ''YVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1''@;'; put 'put ''ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5''@;'; put 'put ''M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOSJdLFsiZThhMSIsIlx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1''@;'; put 'put ''ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQy''@;'; put 'put ''Mlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1''@;'; put 'put ''ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTlhMSIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1''@;'; put 'put ''NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1''@;'; put 'put ''ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZh''@;'; put 'put ''Ylx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1''@;'; put 'put ''ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OSJdLFsiZWFhMSIsIlx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdj''@;'; put 'put ''Nlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1''@;'; put 'put ''ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhm''@;'; put 'put ''Y1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZSJdLFsiZWJhMSIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1''@;'; put 'put ''ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGEx''@;'; put 'put ''MFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1''@;'; put 'put ''OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0''@;'; put 'put ''Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2YiJdLFsiZWNhMSIsIlx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1''@;'; put 'put ''OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNl''@;'; put 'put ''M1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1''@;'; put 'put ''OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YSJdLFsiZWRhMSIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0''@;'; put 'put ''OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1''@;'; put 'put ''OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0''@;'; put 'put ''Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1''@;'; put 'put ''OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOCJdLFsiZWVhMSIsIlx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4''@;'; put 'put ''MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1''@;'; put 'put ''OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0''@;'; put 'put ''NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZSJdLFsiZWZhMSIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1''@;'; put 'put ''OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQx''@;'; put 'put ''MFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1''@;'; put 'put ''OTU5Nlx1OTU5OFx1OTU5OVx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0''@;'; put 'put ''Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZSJdLFsiZjBhMSIsIlx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1''@;'; put 'put ''OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0''@;'; put 'put ''OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1''@;'; put 'put ''OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MCJdLFsiZjFhMSIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThi''@;'; put 'put ''MVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1''@;'; put 'put ''OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0''@;'; put 'put ''Mlx1OWE0MFx1OWE0M1x1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1''@;'; put 'put ''OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmNyJdLFsiZjJhMSIsIlx1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0''@;'; put 'put ''ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1''@;'; put 'put ''OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNl''@;'; put 'put ''Y1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OCJdLFsiZjNhMSIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1''@;'; put 'put ''OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUx''@;'; put 'put ''ZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1''@;'; put 'put ''OWVlOFx1OWVlZlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3''@;'; put 'put ''N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMCJdLFsiZjRhMSIsIlx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZjlhMSIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1''@;'; put 'put ''NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIx''@;'; put 'put ''NVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1''@;'; put 'put ''NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiNyJdLFsi''@;'; put 'put ''ZmFhMSIsIlx1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1''@;'; put 'put ''NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3''@;'; put 'put ''M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1''@;'; put 'put ''NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZmJhMSIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQy''@;'; put 'put ''YVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1''@;'; put 'put ''N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEy''@;'; put 'put ''MVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYSJdLFsiZmNh''@;'; put 'put ''MSIsIlx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJl''@;'; put 'put ''MFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1''@;'; put 'put ''OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZmNmMSIsIlx1MjE3MCIsOSwi''@;'; put 'put ''XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyI4ZmEyYWYiLCJcdTAyZDhcdTAyYzdceGI4XHUwMmQ5XHUwMmRkXHhhZlx1MDJkYlx1MDJkYVx1ZmY1ZVx1MDM4NFx1MDM4NSJdLFsiOGZhMmMyIiwiXHhhMVx4YTZceGJmIl0sWyI4ZmEyZWIiLCJceGJhXHhhYVx4YTlceGFlXHUyMTIyXHhh''@;'; put 'put ''NFx1MjExNiJdLFsiOGZhNmUxIiwiXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwM2FhIl0sWyI4ZmE2ZTciLCJcdTAzOGMiXSxbIjhmYTZlOSIsIlx1MDM4ZVx1MDNhYiJdLFsiOGZhNmVjIiwiXHUwMzhmIl0sWyI4ZmE2ZjEiLCJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAz''@;'; put 'put ''OTBcdTAzY2NcdTAzYzJcdTAzY2RcdTAzY2JcdTAzYjBcdTAzY2UiXSxbIjhmYTdjMiIsIlx1MDQwMiIsMTAsIlx1MDQwZVx1MDQwZiJdLFsiOGZhN2YyIiwiXHUwNDUyIiwxMCwiXHUwNDVlXHUwNDVmIl0sWyI4ZmE5YTEiLCJceGM2XHUwMTEwIl0sWyI4ZmE5YTQiLCJcdTAxMjYiXSxbIjhm''@;'; put 'put ''YTlhNiIsIlx1MDEzMiJdLFsiOGZhOWE4IiwiXHUwMTQxXHUwMTNmIl0sWyI4ZmE5YWIiLCJcdTAxNGFceGQ4XHUwMTUyIl0sWyI4ZmE5YWYiLCJcdTAxNjZceGRlIl0sWyI4ZmE5YzEiLCJceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0Mlx1MDE0MFx1MDE0OVx1''@;'; put 'put ''MDE0Ylx4ZjhcdTAxNTNceGRmXHUwMTY3XHhmZSJdLFsiOGZhYWExIiwiXHhjMVx4YzBceGM0XHhjMlx1MDEwMlx1MDFjZFx1MDEwMFx1MDEwNFx4YzVceGMzXHUwMTA2XHUwMTA4XHUwMTBjXHhjN1x1MDEwYVx1MDEwZVx4YzlceGM4XHhjYlx4Y2FcdTAxMWFcdTAxMTZcdTAxMTJcdTAxMTgi''@;'; put 'put ''XSxbIjhmYWFiYSIsIlx1MDExY1x1MDExZVx1MDEyMlx1MDEyMFx1MDEyNFx4Y2RceGNjXHhjZlx4Y2VcdTAxY2ZcdTAxMzBcdTAxMmFcdTAxMmVcdTAxMjhcdTAxMzRcdTAxMzZcdTAxMzlcdTAxM2RcdTAxM2JcdTAxNDNcdTAxNDdcdTAxNDVceGQxXHhkM1x4ZDJceGQ2XHhkNFx1MDFkMVx1''@;'; put 'put ''MDE1MFx1MDE0Y1x4ZDVcdTAxNTRcdTAxNThcdTAxNTZcdTAxNWFcdTAxNWNcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNjJceGRhXHhkOVx4ZGNceGRiXHUwMTZjXHUwMWQzXHUwMTcwXHUwMTZhXHUwMTcyXHUwMTZlXHUwMTY4XHUwMWQ3XHUwMWRiXHUwMWQ5XHUwMWQ1XHUwMTc0XHhkZFx1MDE3''@;'; put 'put ''OFx1MDE3Nlx1MDE3OVx1MDE3ZFx1MDE3YiJdLFsiOGZhYmExIiwiXHhlMVx4ZTBceGU0XHhlMlx1MDEwM1x1MDFjZVx1MDEwMVx1MDEwNVx4ZTVceGUzXHUwMTA3XHUwMTA5XHUwMTBkXHhlN1x1MDEwYlx1MDEwZlx4ZTlceGU4XHhlYlx4ZWFcdTAxMWJcdTAxMTdcdTAxMTNcdTAxMTlcdTAx''@;'; put 'put ''ZjVcdTAxMWRcdTAxMWYiXSxbIjhmYWJiZCIsIlx1MDEyMVx1MDEyNVx4ZWRceGVjXHhlZlx4ZWVcdTAxZDAiXSxbIjhmYWJjNSIsIlx1MDEyYlx1MDEyZlx1MDEyOVx1MDEzNVx1MDEzN1x1MDEzYVx1MDEzZVx1MDEzY1x1MDE0NFx1MDE0OFx1MDE0Nlx4ZjFceGYzXHhmMlx4ZjZceGY0XHUw''@;'; put 'put ''MWQyXHUwMTUxXHUwMTRkXHhmNVx1MDE1NVx1MDE1OVx1MDE1N1x1MDE1Ylx1MDE1ZFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE2M1x4ZmFceGY5XHhmY1x4ZmJcdTAxNmRcdTAxZDRcdTAxNzFcdTAxNmJcdTAxNzNcdTAxNmZcdTAxNjlcdTAxZDhcdTAxZGNcdTAxZGFcdTAxZDZcdTAxNzVceGZk''@;'; put 'put ''XHhmZlx1MDE3N1x1MDE3YVx1MDE3ZVx1MDE3YyJdLFsiOGZiMGExIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTBjXHU0ZTEyXHU0ZTFmXHU0ZTIzXHU0ZTI0XHU0ZTI4XHU0ZTJiXHU0ZTJlXHU0ZTJmXHU0ZTMwXHU0ZTM1XHU0ZTQwXHU0ZTQxXHU0ZTQ0XHU0ZTQ3XHU0ZTUxXHU0ZTVhXHU0''@;'; put 'put ''ZTVjXHU0ZTYzXHU0ZTY4XHU0ZTY5XHU0ZTc0XHU0ZTc1XHU0ZTc5XHU0ZTdmXHU0ZThkXHU0ZTk2XHU0ZTk3XHU0ZTlkXHU0ZWFmXHU0ZWI5XHU0ZWMzXHU0ZWQwXHU0ZWRhXHU0ZWRiXHU0ZWUwXHU0ZWUxXHU0ZWUyXHU0ZWU4XHU0ZWVmXHU0ZWYxXHU0ZWYzXHU0ZWY1XHU0ZWZkXHU0ZWZl''@;'; put 'put ''XHU0ZWZmXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA4XHU0ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjE1XHU0ZjE2XHU0ZjE3XHU0ZjE5XHU0ZjJlXHU0ZjMxXHU0ZjYwXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlXHU0ZjQwXHU0ZjQyXHU0ZjQ4XHU0ZjQ5XHU0ZjRiXHU0ZjRjXHU0''@;'; put 'put ''ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjU4XHU0ZjVmXHU0ZjYzXHU0ZjZhXHU0ZjZjXHU0ZjZlXHU0ZjcxXHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjdlXHU0ZjgxXHU0ZjgyXHU0Zjg0Il0sWyI4ZmIxYTEiLCJcdTRmODVcdTRmODlcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRm''@;'; put 'put ''OTJcdTRmOTNcdTRmOTRcdTRmOTdcdTRmOTlcdTRmOWFcdTRmOWVcdTRmOWZcdTRmYjJcdTRmYjdcdTRmYjlcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzVcdTRmYzZcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmY2ZcdTRmZDJcdTRmZGNcdTRmZTBc''@;'; put 'put ''dTRmZTJcdTRmZjBcdTRmZjJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDRcdTUwMDdcdTUwMGFcdTUwMGNcdTUwMGVcdTUwMTBcdTUwMTNcdTUwMTdcdTUwMThcdTUwMWJcdTUwMWNcdTUwMWRcdTUwMWVcdTUwMjJcdTUwMjdcdTUwMmVcdTUwMzBcdTUwMzJcdTUwMzNcdTUw''@;'; put 'put ''MzVcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDVcdTUwNDZcdTUwNGFcdTUwNGNcdTUwNGVcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTdcdTUwNTlcdTUwNWZcdTUwNjBcdTUwNjJcdTUwNjNcdTUwNjZcdTUwNjdcdTUwNmFcdTUwNmRcdTUwNzBcdTUwNzFcdTUwM2JcdTUwODFcdTUwODNcdTUwODRc''@;'; put 'put ''dTUwODZcdTUwOGFcdTUwOGVcdTUwOGZcdTUwOTAiXSxbIjhmYjJhMSIsIlx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5Nlx1NTA5Ylx1NTA5Y1x1NTA5ZSIsNCwiXHU1MGFhXHU1MGFmXHU1MGIwXHU1MGI5XHU1MGJhXHU1MGJkXHU1MGMwXHU1MGMzXHU1MGM0XHU1MGM3XHU1MGNjXHU1MGNlXHU1''@;'; put 'put ''MGQwXHU1MGQzXHU1MGQ0XHU1MGQ4XHU1MGRjXHU1MGRkXHU1MGRmXHU1MGUyXHU1MGU0XHU1MGU2XHU1MGU4XHU1MGU5XHU1MGVmXHU1MGYxXHU1MGY2XHU1MGZhXHU1MGZlXHU1MTAzXHU1MTA2XHU1MTA3XHU1MTA4XHU1MTBiXHU1MTBjXHU1MTBkXHU1MTBlXHU1MGYyXHU1MTEwXHU1MTE3''@;'; put 'put ''XHU1MTE5XHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTIzXHU1MTI3XHU1MTI4XHU1MTJjXHU1MTJkXHU1MTJmXHU1MTMxXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM4XHU1MTM5XHU1MTQyXHU1MTRhXHU1MTRmXHU1MTUzXHU1MTU1XHU1MTU3XHU1MTU4XHU1MTVmXHU1MTY0XHU1MTY2XHU1''@;'; put 'put ''MTdlXHU1MTgzXHU1MTg0XHU1MThiXHU1MThlXHU1MTk4XHU1MTlkXHU1MWExXHU1MWEzXHU1MWFkXHU1MWI4XHU1MWJhXHU1MWJjXHU1MWJlXHU1MWJmXHU1MWMyIl0sWyI4ZmIzYTEiLCJcdTUxYzhcdTUxY2ZcdTUxZDFcdTUxZDJcdTUxZDNcdTUxZDVcdTUxZDhcdTUxZGVcdTUxZTJcdTUx''@;'; put 'put ''ZTVcdTUxZWVcdTUxZjJcdTUxZjNcdTUxZjRcdTUxZjdcdTUyMDFcdTUyMDJcdTUyMDVcdTUyMTJcdTUyMTNcdTUyMTVcdTUyMTZcdTUyMThcdTUyMjJcdTUyMjhcdTUyMzFcdTUyMzJcdTUyMzVcdTUyM2NcdTUyNDVcdTUyNDlcdTUyNTVcdTUyNTdcdTUyNThcdTUyNWFcdTUyNWNcdTUyNWZc''@;'; put 'put ''dTUyNjBcdTUyNjFcdTUyNjZcdTUyNmVcdTUyNzdcdTUyNzhcdTUyNzlcdTUyODBcdTUyODJcdTUyODVcdTUyOGFcdTUyOGNcdTUyOTNcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWZcdTUyYjBcdTUyYjZcdTUyYjdcdTUy''@;'; put 'put ''YjhcdTUyYmFcdTUyYmJcdTUyYmRcdTUyYzBcdTUyYzRcdTUyYzZcdTUyYzhcdTUyY2NcdTUyY2ZcdTUyZDFcdTUyZDRcdTUyZDZcdTUyZGJcdTUyZGNcdTUyZTFcdTUyZTVcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWNcdTUyZjBcdTUyZjFcdTUyZjRcdTUyZjZcdTUyZjdcdTUzMDBcdTUzMDNc''@;'; put 'put ''dTUzMGFcdTUzMGIiXSxbIjhmYjRhMSIsIlx1NTMwY1x1NTMxMVx1NTMxM1x1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMzMFx1NTMzMlx1NTMzNVx1NTMzY1x1NTMzZFx1NTMzZVx1NTM0Mlx1NTM0Y1x1''@;'; put 'put ''NTM0Ylx1NTM1OVx1NTM1Ylx1NTM2MVx1NTM2M1x1NTM2NVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3OVx1NTM3ZVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4ZVx1NTM5M1x1NTM5NFx1NTM5OVx1NTM5ZFx1NTNhMVx1NTNhNFx1NTNhYVx1NTNhYlx1NTNhZlx1NTNiMlx1NTNiNFx1NTNiNVx1NTNi''@;'; put 'put ''N1x1NTNiOFx1NTNiYVx1NTNiZFx1NTNjMFx1NTNjNVx1NTNjZlx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkZFx1NTNkZVx1NTNlMFx1NTNlNlx1NTNlN1x1NTNmNVx1NTQwMlx1NTQxM1x1NTQxYVx1NTQyMVx1NTQyN1x1NTQyOFx1NTQyYVx1NTQyZlx1NTQzMVx1NTQzNFx1NTQzNVx1''@;'; put 'put ''NTQ0M1x1NTQ0NFx1NTQ0N1x1NTQ0ZFx1NTQ0Zlx1NTQ1ZVx1NTQ2Mlx1NTQ2NFx1NTQ2Nlx1NTQ2N1x1NTQ2OVx1NTQ2Ylx1NTQ2ZFx1NTQ2ZVx1NTQ3NFx1NTQ3ZiJdLFsiOGZiNWExIiwiXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg4XHU1NDg5XHU1NDhkXHU1NDkxXHU1NDk1XHU1NDk2XHU1''@;'; put 'put ''NDljXHU1NDlmXHU1NGExXHU1NGE2XHU1NGE3XHU1NGE5XHU1NGFhXHU1NGFkXHU1NGFlXHU1NGIxXHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJiXHU1NGJmXHU1NGM2XHU1NGNhXHU1NGNkXHU1NGNlXHU1NGUwXHU1NGVhXHU1NGVjXHU1NGVmXHU1NGY2XHU1NGZjXHU1NGZlXHU1NGZmXHU1NTAw''@;'; put 'put ''XHU1NTAxXHU1NTA1XHU1NTA4XHU1NTA5XHU1NTBjXHU1NTBkXHU1NTBlXHU1NTE1XHU1NTJhXHU1NTJiXHU1NTMyXHU1NTM1XHU1NTM2XHU1NTNiXHU1NTNjXHU1NTNkXHU1NTQxXHU1NTQ3XHU1NTQ5XHU1NTRhXHU1NTRkXHU1NTUwXHU1NTUxXHU1NTU4XHU1NTVhXHU1NTViXHU1NTVlXHU1''@;'; put 'put ''NTYwXHU1NTYxXHU1NTY0XHU1NTY2XHU1NTdmXHU1NTgxXHU1NTgyXHU1NTg2XHU1NTg4XHU1NThlXHU1NThmXHU1NTkxXHU1NTkyXHU1NTkzXHU1NTk0XHU1NTk3XHU1NWEzXHU1NWE0XHU1NWFkXHU1NWIyXHU1NWJmXHU1NWMxXHU1NWMzXHU1NWM2XHU1NWM5XHU1NWNiXHU1NWNjXHU1NWNl''@;'; put 'put ''XHU1NWQxXHU1NWQyIl0sWyI4ZmI2YTEiLCJcdTU1ZDNcdTU1ZDdcdTU1ZDhcdTU1ZGJcdTU1ZGVcdTU1ZTJcdTU1ZTlcdTU1ZjZcdTU1ZmZcdTU2MDVcdTU2MDhcdTU2MGFcdTU2MGQiLDUsIlx1NTYxOVx1NTYyY1x1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOVx1NTYzYlx1NTYzY1x1''@;'; put 'put ''NTYzZFx1NTYzZlx1NTY0MFx1NTY0MVx1NTY0M1x1NTY0NFx1NTY0Nlx1NTY0OVx1NTY0Ylx1NTY0ZFx1NTY0Zlx1NTY1NFx1NTY1ZVx1NTY2MFx1NTY2MVx1NTY2Mlx1NTY2M1x1NTY2Nlx1NTY2OVx1NTY2ZFx1NTY2Zlx1NTY3MVx1NTY3Mlx1NTY3NVx1NTY4NFx1NTY4NVx1NTY4OFx1NTY4''@;'; put 'put ''Ylx1NTY4Y1x1NTY5NVx1NTY5OVx1NTY5YVx1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZiMVx1NTZiM1x1NTZiN1x1NTZiZVx1NTZjNVx1NTZjOVx1NTZjYVx1NTZjYlx1NTZjZlx1NTZkMFx1NTZjY1x1NTZjZFx1NTZkOVx1''@;'; put 'put ''NTZkY1x1NTZkZFx1NTZkZlx1NTZlMVx1NTZlNCIsNCwiXHU1NmYxXHU1NmViXHU1NmVkIl0sWyI4ZmI3YTEiLCJcdTU2ZjZcdTU2ZjdcdTU3MDFcdTU3MDJcdTU3MDdcdTU3MGFcdTU3MGNcdTU3MTFcdTU3MTVcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MjBcdTU3MjJcdTU3MjNcdTU3MjRcdTU3''@;'; put 'put ''MjVcdTU3MjlcdTU3MmFcdTU3MmNcdTU3MmVcdTU3MmZcdTU3MzNcdTU3MzRcdTU3M2RcdTU3M2VcdTU3M2ZcdTU3NDVcdTU3NDZcdTU3NGNcdTU3NGRcdTU3NTJcdTU3NjJcdTU3NjVcdTU3NjdcdTU3NjhcdTU3NmJcdTU3NmQiLDQsIlx1NTc3M1x1NTc3NFx1NTc3NVx1NTc3N1x1NTc3OVx1''@;'; put 'put ''NTc3YVx1NTc3Ylx1NTc3Y1x1NTc3ZVx1NTc4MVx1NTc4M1x1NTc4Y1x1NTc5NFx1NTc5N1x1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhMVx1NTc5NVx1NTdhN1x1NTdhOFx1NTdhOVx1NTdhY1x1NTdiOFx1NTdiZFx1NTdjN1x1NTdjOFx1NTdjY1x1NTdjZlx1NTdk''@;'; put 'put ''NVx1NTdkZFx1NTdkZVx1NTdlNFx1NTdlNlx1NTdlN1x1NTdlOVx1NTdlZFx1NTdmMFx1NTdmNVx1NTdmNlx1NTdmOFx1NTdmZFx1NTdmZVx1NTdmZlx1NTgwM1x1NTgwNFx1NTgwOFx1NTgwOVx1NTdlMSJdLFsiOGZiOGExIiwiXHU1ODBjXHU1ODBkXHU1ODFiXHU1ODFlXHU1ODFmXHU1ODIw''@;'; put 'put ''XHU1ODI2XHU1ODI3XHU1ODJkXHU1ODMyXHU1ODM5XHU1ODNmXHU1ODQ5XHU1ODRjXHU1ODRkXHU1ODRmXHU1ODUwXHU1ODU1XHU1ODVmXHU1ODYxXHU1ODY0XHU1ODY3XHU1ODY4XHU1ODc4XHU1ODdjXHU1ODdmXHU1ODgwXHU1ODgxXHU1ODg3XHU1ODg4XHU1ODg5XHU1ODhhXHU1ODhjXHU1''@;'; put 'put ''ODhkXHU1ODhmXHU1ODkwXHU1ODk0XHU1ODk2XHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGE2XHU1OGE5XHU1OGIxXHU1OGIyXHU1OGM0XHU1OGJjXHU1OGMyXHU1OGM4XHU1OGNkXHU1OGNlXHU1OGQwXHU1OGQyXHU1OGQ0XHU1OGQ2XHU1OGRhXHU1OGRkXHU1OGUxXHU1OGUyXHU1OGU5''@;'; put 'put ''XHU1OGYzXHU1OTA1XHU1OTA2XHU1OTBiXHU1OTBjXHU1OTEyXHU1OTEzXHU1OTE0XHU4NjQxXHU1OTFkXHU1OTIxXHU1OTIzXHU1OTI0XHU1OTI4XHU1OTJmXHU1OTMwXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNmXHU1OTQzXHU1OTQ2XHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1OTVkXHU1''@;'; put 'put ''OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTZiXHU1OTZkIl0sWyI4ZmI5YTEiLCJcdTU5NmZcdTU5NzJcdTU5NzVcdTU5NzZcdTU5NzlcdTU5N2JcdTU5N2NcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OTJcdTU5OTVcdTU5OTdcdTU5OWZcdTU5YTRcdTU5YTdcdTU5YWRcdTU5YWVcdTU5YWZcdTU5''@;'; put 'put ''YjBcdTU5YjNcdTU5YjdcdTU5YmFcdTU5YmNcdTU5YzFcdTU5YzNcdTU5YzRcdTU5YzhcdTU5Y2FcdTU5Y2RcdTU5ZDJcdTU5ZGRcdTU5ZGVcdTU5ZGZcdTU5ZTNcdTU5ZTRcdTU5ZTdcdTU5ZWVcdTU5ZWZcdTU5ZjFcdTU5ZjJcdTU5ZjRcdTU5ZjdcdTVhMDBcdTVhMDRcdTVhMGNcdTVhMGRc''@;'; put 'put ''dTVhMGVcdTVhMTJcdTVhMTNcdTVhMWVcdTVhMjNcdTVhMjRcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmRcdTVhMzBcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGNcdTVhNTBcdTVhNTVcdTVhNWVcdTVhNjNcdTVhNjVcdTVhNjdcdTVhNmRcdTVhNzdcdTVhN2FcdTVhN2JcdTVhN2VcdTVh''@;'; put 'put ''OGJcdTVhOTBcdTVhOTNcdTVhOTZcdTVhOTlcdTVhOWNcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTJcdTVhYTdcdTVhYWNcdTVhYjFcdTVhYjJcdTVhYjNcdTVhYjVcdTVhYjhcdTVhYmFcdTVhYmJcdTVhYmYiXSxbIjhmYmFhMSIsIlx1NWFjNFx1NWFjNlx1NWFjOFx1NWFjZlx1NWFkYVx1NWFk''@;'; put 'put ''Y1x1NWFlMFx1NWFlNVx1NWFlYVx1NWFlZVx1NWFmNVx1NWFmNlx1NWFmZFx1NWIwMFx1NWIwMVx1NWIwOFx1NWIxN1x1NWIzNFx1NWIxOVx1NWIxYlx1NWIxZFx1NWIyMVx1NWIyNVx1NWIyZFx1NWIzOFx1NWI0MVx1NWI0Ylx1NWI0Y1x1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2OFx1NWI2ZVx1''@;'; put 'put ''NWI2Zlx1NWI3Y1x1NWI3ZFx1NWI3ZVx1NWI3Zlx1NWI4MVx1NWI4NFx1NWI4Nlx1NWI4YVx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5M1x1NWI5NFx1NWI5Nlx1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiY1x1NWJjMFx1NWJjMVx1NWJj''@;'; put 'put ''ZFx1NWJjZlx1NWJkNiIsNCwiXHU1YmUwXHU1YmVmXHU1YmYxXHU1YmY0XHU1YmZkXHU1YzBjXHU1YzE3XHU1YzFlXHU1YzFmXHU1YzIzXHU1YzI2XHU1YzI5XHU1YzJiXHU1YzJjXHU1YzJlXHU1YzMwXHU1YzMyXHU1YzM1XHU1YzM2XHU1YzU5XHU1YzVhXHU1YzVjXHU1YzYyXHU1YzYzXHU1''@;'; put 'put ''YzY3XHU1YzY4XHU1YzY5Il0sWyI4ZmJiYTEiLCJcdTVjNmRcdTVjNzBcdTVjNzRcdTVjNzVcdTVjN2FcdTVjN2JcdTVjN2NcdTVjN2RcdTVjODdcdTVjODhcdTVjOGFcdTVjOGZcdTVjOTJcdTVjOWRcdTVjOWZcdTVjYTBcdTVjYTJcdTVjYTNcdTVjYTZcdTVjYWFcdTVjYjJcdTVjYjRcdTVj''@;'; put 'put ''YjVcdTVjYmFcdTVjYzlcdTVjY2JcdTVjZDJcdTVjZGRcdTVjZDdcdTVjZWVcdTVjZjFcdTVjZjJcdTVjZjRcdTVkMDFcdTVkMDZcdTVkMGRcdTVkMTJcdTVkMmJcdTVkMjNcdTVkMjRcdTVkMjZcdTVkMjdcdTVkMzFcdTVkMzRcdTVkMzlcdTVkM2RcdTVkM2ZcdTVkNDJcdTVkNDNcdTVkNDZc''@;'; put 'put ''dTVkNDhcdTVkNTVcdTVkNTFcdTVkNTlcdTVkNGFcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjRcdTVkNmFcdTVkNmRcdTVkNzBcdTVkNzlcdTVkN2FcdTVkN2VcdTVkN2ZcdTVkODFcdTVkODNcdTVkODhcdTVkOGFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTlcdTVkOWJcdTVk''@;'; put 'put ''OWZcdTVkYTBcdTVkYTdcdTVkYWJcdTVkYjBcdTVkYjRcdTVkYjhcdTVkYjlcdTVkYzNcdTVkYzdcdTVkY2JcdTVkZDBcdTVkY2VcdTVkZDhcdTVkZDlcdTVkZTBcdTVkZTQiXSxbIjhmYmNhMSIsIlx1NWRlOVx1NWRmOFx1NWRmOVx1NWUwMFx1NWUwN1x1NWUwZFx1NWUxMlx1NWUxNFx1NWUx''@;'; put 'put ''NVx1NWUxOFx1NWUxZlx1NWUyMFx1NWUyZVx1NWUyOFx1NWUzMlx1NWUzNVx1NWUzZVx1NWU0Ylx1NWU1MFx1NWU0OVx1NWU1MVx1NWU1Nlx1NWU1OFx1NWU1Ylx1NWU1Y1x1NWU1ZVx1NWU2OFx1NWU2YSIsNCwiXHU1ZTcwXHU1ZTgwXHU1ZThiXHU1ZThlXHU1ZWEyXHU1ZWE0XHU1ZWE1XHU1''@;'; put 'put ''ZWE4XHU1ZWFhXHU1ZWFjXHU1ZWIxXHU1ZWIzXHU1ZWJkXHU1ZWJlXHU1ZWJmXHU1ZWM2XHU1ZWNjXHU1ZWNiXHU1ZWNlXHU1ZWQxXHU1ZWQyXHU1ZWQ0XHU1ZWQ1XHU1ZWRjXHU1ZWRlXHU1ZWU1XHU1ZWViXHU1ZjAyXHU1ZjA2XHU1ZjA3XHU1ZjA4XHU1ZjBlXHU1ZjE5XHU1ZjFjXHU1ZjFk''@;'; put 'put ''XHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjM0XHU1ZjM2XHU1ZjNiXHU1ZjNkXHU1ZjNmXHU1ZjQwXHU1ZjQ0XHU1ZjQ1XHU1ZjQ3XHU1ZjRkXHU1ZjUwXHU1ZjU0XHU1ZjU4XHU1ZjViXHU1ZjYwXHU1ZjYzXHU1ZjY0XHU1ZjY3Il0s''@;'; put 'put ''WyI4ZmJkYTEiLCJcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmODlcdTVmOGRcdTVmOGZcdTVmOTZcdTVmOWNcdTVmOWRcdTVmYTJcdTVmYTdcdTVmYWJcdTVmYTRcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjhcdTVmYzRcdTVmYzdcdTVm''@;'; put 'put ''YzhcdTVmYzlcdTVmY2JcdTVmZDAiLDQsIlx1NWZkZVx1NWZlMVx1NWZlMlx1NWZlOFx1NWZlOVx1NWZlYVx1NWZlY1x1NWZlZFx1NWZlZVx1NWZlZlx1NWZmMlx1NWZmM1x1NWZmNlx1NWZmYVx1NWZmY1x1NjAwN1x1NjAwYVx1NjAwZFx1NjAxM1x1NjAxNFx1NjAxN1x1NjAxOFx1NjAxYVx1''@;'; put 'put ''NjAxZlx1NjAyNFx1NjAyZFx1NjAzM1x1NjAzNVx1NjA0MFx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0Y1x1NjA1MVx1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1ZFx1NjA2MVx1NjA2N1x1NjA3MVx1NjA3ZVx1NjA3Zlx1NjA4Mlx1NjA4Nlx1NjA4OFx1NjA4YVx1NjA4ZVx1NjA5MVx1NjA5M1x1NjA5''@;'; put 'put ''NVx1NjA5OFx1NjA5ZFx1NjA5ZVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhOFx1NjBiMFx1NjBiMVx1NjBiNyJdLFsiOGZiZWExIiwiXHU2MGJiXHU2MGJlXHU2MGMyXHU2MGM0XHU2MGM4XHU2MGM5XHU2MGNhXHU2MGNiXHU2MGNlXHU2MGNmXHU2MGQ0XHU2MGQ1XHU2MGQ5XHU2MGRiXHU2MGRk''@;'; put 'put ''XHU2MGRlXHU2MGUyXHU2MGU1XHU2MGYyXHU2MGY1XHU2MGY4XHU2MGZjXHU2MGZkXHU2MTAyXHU2MTA3XHU2MTBhXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMTlcdTYxMWNcdTYxMWVcdTYxMjJcdTYxMmFcdTYxMmJcdTYxMzBcdTYxMzFcdTYxMzVcdTYxMzZcdTYxMzdcdTYx''@;'; put 'put ''MzlcdTYxNDFcdTYxNDVcdTYxNDZcdTYxNDlcdTYxNWVcdTYxNjBcdTYxNmNcdTYxNzJcdTYxNzhcdTYxN2JcdTYxN2NcdTYxN2ZcdTYxODBcdTYxODFcdTYxODNcdTYxODRcdTYxOGJcdTYxOGRcdTYxOTJcdTYxOTNcdTYxOTdcdTYxOThcdTYxOWNcdTYxOWRcdTYxOWZcdTYxYTBcdTYxYTVc''@;'; put 'put ''dTYxYThcdTYxYWFcdTYxYWRcdTYxYjhcdTYxYjlcdTYxYmNcdTYxYzBcdTYxYzFcdTYxYzJcdTYxY2VcdTYxY2ZcdTYxZDVcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTFcdTYxZTJcdTYxZTdcdTYxZTlcdTYxZTUiXSxbIjhmYmZhMSIsIlx1NjFlY1x1NjFlZFx1NjFlZlx1NjIwMVx1''@;'; put 'put ''NjIwM1x1NjIwNFx1NjIwN1x1NjIxM1x1NjIxNVx1NjIxY1x1NjIyMFx1NjIyMlx1NjIyM1x1NjIyN1x1NjIyOVx1NjIyYlx1NjIzOVx1NjIzZFx1NjI0Mlx1NjI0M1x1NjI0NFx1NjI0Nlx1NjI0Y1x1NjI1MFx1NjI1MVx1NjI1Mlx1NjI1NFx1NjI1Nlx1NjI1YVx1NjI1Y1x1NjI2NFx1NjI2''@;'; put 'put ''ZFx1NjI2Zlx1NjI3M1x1NjI3YVx1NjI3ZFx1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjJhNlx1NjJhOFx1NjJiM1x1NjJiNlx1NjJiN1x1NjJiYVx1NjJiZVx1NjJiZlx1NjJjNFx1NjJjZVx1NjJkNVx1NjJkNlx1NjJkYVx1NjJlYVx1NjJmMlx1NjJmNFx1NjJmY1x1NjJmZFx1NjMwM1x1''@;'; put 'put ''NjMwNFx1NjMwYVx1NjMwYlx1NjMwZFx1NjMxMFx1NjMxM1x1NjMxNlx1NjMxOFx1NjMyOVx1NjMyYVx1NjMyZFx1NjMzNVx1NjMzNlx1NjMzOVx1NjMzY1x1NjM0MVx1NjM0Mlx1NjM0M1x1NjM0NFx1NjM0Nlx1NjM0YVx1NjM0Ylx1NjM0ZVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1OFx1NjM1''@;'; put 'put ''Ylx1NjM2NVx1NjM2Nlx1NjM2Y1x1NjM2ZFx1NjM3MVx1NjM3NFx1NjM3NSJdLFsiOGZjMGExIiwiXHU2Mzc4XHU2MzdjXHU2MzdkXHU2MzdmXHU2MzgyXHU2Mzg0XHU2Mzg3XHU2MzhhXHU2MzkwXHU2Mzk0XHU2Mzk1XHU2Mzk5XHU2MzlhXHU2MzllXHU2M2E0XHU2M2E2XHU2M2FkXHU2M2Fl''@;'; put 'put ''XHU2M2FmXHU2M2JkXHU2M2MxXHU2M2M1XHU2M2M4XHU2M2NlXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2RjXHU2M2UwXHU2M2U1XHU2M2VhXHU2M2VjXHU2M2YyXHU2M2YzXHU2M2Y1XHU2M2Y4XHU2M2Y5XHU2NDA5XHU2NDBhXHU2NDEwXHU2NDEyXHU2NDE0XHU2NDE4XHU2NDFlXHU2''@;'; put 'put ''NDIwXHU2NDIyXHU2NDI0XHU2NDI1XHU2NDI5XHU2NDJhXHU2NDJmXHU2NDMwXHU2NDM1XHU2NDNkXHU2NDNmXHU2NDRiXHU2NDRmXHU2NDUxXHU2NDUyXHU2NDUzXHU2NDU0XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYzXHU2NDZkXHU2NDczXHU2NDc0''@;'; put 'put ''XHU2NDdiXHU2NDdkXHU2NDg1XHU2NDg3XHU2NDhmXHU2NDkwXHU2NDkxXHU2NDk4XHU2NDk5XHU2NDliXHU2NDlkXHU2NDlmXHU2NGExXHU2NGEzXHU2NGE2XHU2NGE4XHU2NGFjXHU2NGIzXHU2NGJkXHU2NGJlXHU2NGJmIl0sWyI4ZmMxYTEiLCJcdTY0YzRcdTY0YzlcdTY0Y2FcdTY0Y2Jc''@;'; put 'put ''dTY0Y2NcdTY0Y2VcdTY0ZDBcdTY0ZDFcdTY0ZDVcdTY0ZDdcdTY0ZTRcdTY0ZTVcdTY0ZTlcdTY0ZWFcdTY0ZWRcdTY0ZjBcdTY0ZjVcdTY0ZjdcdTY0ZmJcdTY0ZmZcdTY1MDFcdTY1MDRcdTY1MDhcdTY1MDlcdTY1MGFcdTY1MGZcdTY1MTNcdTY1MTRcdTY1MTZcdTY1MTlcdTY1MWJcdTY1''@;'; put 'put ''MWVcdTY1MWZcdTY1MjJcdTY1MjZcdTY1MjlcdTY1MmVcdTY1MzFcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDNcdTY1NDdcdTY1NDlcdTY1NTBcdTY1NTJcdTY1NTRcdTY1NWZcdTY1NjBcdTY1NjdcdTY1NmJcdTY1N2FcdTY1N2RcdTY1ODFcdTY1ODVcdTY1OGFcdTY1OTJcdTY1OTVcdTY1OThc''@;'; put 'put ''dTY1OWRcdTY1YTBcdTY1YTNcdTY1YTZcdTY1YWVcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YmZcdTY1YzJcdTY1YzhcdTY1YzlcdTY1Y2VcdTY1ZDBcdTY1ZDRcdTY1ZDZcdTY1ZDhcdTY1ZGZcdTY1ZjBcdTY1ZjJcdTY1ZjRcdTY1ZjVcdTY1ZjlcdTY1ZmVcdTY1ZmZcdTY2MDBcdTY2MDRcdTY2''@;'; put 'put ''MDhcdTY2MDlcdTY2MGRcdTY2MTFcdTY2MTJcdTY2MTVcdTY2MTZcdTY2MWQiXSxbIjhmYzJhMSIsIlx1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMVx1NjYzM1x1NjYzOVx1NjYzN1x1NjY0MFx1NjY0''@;'; put 'put ''NVx1NjY0Nlx1NjY0YVx1NjY0Y1x1NjY1MVx1NjY0ZVx1NjY1N1x1NjY1OFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY2MFx1NjY2MVx1NjZmYlx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY3ZVx1NjY3M1x1NjY3NVx1NjY3Zlx1NjY3N1x1NjY3OFx1NjY3OVx1NjY3Ylx1NjY4MFx1NjY3Y1x1NjY4Ylx1''@;'; put 'put ''NjY4Y1x1NjY4ZFx1NjY5MFx1NjY5Mlx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5Zlx1NjZhMFx1NjZhNFx1NjZhZFx1NjZiMVx1NjZiMlx1NjZiNVx1NjZiYlx1NjZiZlx1NjZjMFx1NjZjMlx1NjZjM1x1NjZjOFx1NjZjY1x1NjZjZVx1NjZjZlx1NjZkNFx1NjZkYlx1NjZkZlx1NjZl''@;'; put 'put ''OFx1NjZlYlx1NjZlY1x1NjZlZVx1NjZmYVx1NjcwNVx1NjcwN1x1NjcwZVx1NjcxM1x1NjcxOVx1NjcxY1x1NjcyMFx1NjcyMlx1NjczM1x1NjczZVx1Njc0NVx1Njc0N1x1Njc0OFx1Njc0Y1x1Njc1NFx1Njc1NVx1Njc1ZCJdLFsiOGZjM2ExIiwiXHU2NzY2XHU2NzZjXHU2NzZlXHU2Nzc0''@;'; put 'put ''XHU2Nzc2XHU2NzdiXHU2NzgxXHU2Nzg0XHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkzXHU2Nzk2XHU2Nzk4XHU2Nzk5XHU2NzliXHU2N2IwXHU2N2IxXHU2N2IyXHU2N2I1XHU2N2JiXHU2N2JjXHU2N2JkXHU2N2Y5XHU2N2MwXHU2N2MyXHU2N2MzXHU2N2M1XHU2N2M4XHU2N2M5XHU2N2QyXHU2''@;'; put 'put ''N2Q3XHU2N2Q5XHU2N2RjXHU2N2UxXHU2N2U2XHU2N2YwXHU2N2YyXHU2N2Y2XHU2N2Y3XHU2ODUyXHU2ODE0XHU2ODE5XHU2ODFkXHU2ODFmXHU2ODI4XHU2ODI3XHU2ODJjXHU2ODJkXHU2ODJmXHU2ODMwXHU2ODMxXHU2ODMzXHU2ODNiXHU2ODNmXHU2ODQ0XHU2ODQ1XHU2ODRhXHU2ODRj''@;'; put 'put ''XHU2ODU1XHU2ODU3XHU2ODU4XHU2ODViXHU2ODZiXHU2ODZlIiw0LCJcdTY4NzVcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4ODJcdTY4ODRcdTY4ODZcdTY4ODhcdTY4OTZcdTY4OThcdTY4OWFcdTY4OWNcdTY4YTFcdTY4YTNcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWVcdTY4YjJcdTY4''@;'; put 'put ''YmJcdTY4YzVcdTY4YzhcdTY4Y2NcdTY4Y2YiXSxbIjhmYzRhMSIsIlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNlx1NjhkOVx1NjhkY1x1NjhkZFx1NjhlNVx1NjhlOFx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhmMFx1NjhmMVx1NjhmNVx1NjhmNlx1NjhmYlx1NjhmY1x1NjhmZFx1Njkw''@;'; put 'put ''Nlx1NjkwOVx1NjkwYVx1NjkxMFx1NjkxMVx1NjkxM1x1NjkxNlx1NjkxN1x1NjkzMVx1NjkzM1x1NjkzNVx1NjkzOFx1NjkzYlx1Njk0Mlx1Njk0NVx1Njk0OVx1Njk0ZVx1Njk1N1x1Njk1Ylx1Njk2M1x1Njk2NFx1Njk2NVx1Njk2Nlx1Njk2OFx1Njk2OVx1Njk2Y1x1Njk3MFx1Njk3MVx1''@;'; put 'put ''Njk3Mlx1Njk3YVx1Njk3Ylx1Njk3Zlx1Njk4MFx1Njk4ZFx1Njk5Mlx1Njk5Nlx1Njk5OFx1NjlhMVx1NjlhNVx1NjlhNlx1NjlhOFx1NjlhYlx1NjlhZFx1NjlhZlx1NjliN1x1NjliOFx1NjliYVx1NjliY1x1NjljNVx1NjljOFx1NjlkMVx1NjlkNlx1NjlkN1x1NjllMlx1NjllNVx1Njll''@;'; put 'put ''ZVx1NjllZlx1NjlmMVx1NjlmM1x1NjlmNVx1NjlmZVx1NmEwMFx1NmEwMVx1NmEwM1x1NmEwZlx1NmExMVx1NmExNVx1NmExYVx1NmExZFx1NmEyMFx1NmEyNFx1NmEyOFx1NmEzMFx1NmEzMiJdLFsiOGZjNWExIiwiXHU2YTM0XHU2YTM3XHU2YTNiXHU2YTNlXHU2YTNmXHU2YTQ1XHU2YTQ2''@;'; put 'put ''XHU2YTQ5XHU2YTRhXHU2YTRlXHU2YTUwXHU2YTUxXHU2YTUyXHU2YTU1XHU2YTU2XHU2YTViXHU2YTY0XHU2YTY3XHU2YTZhXHU2YTcxXHU2YTczXHU2YTdlXHU2YTgxXHU2YTgzXHU2YTg2XHU2YTg3XHU2YTg5XHU2YThiXHU2YTkxXHU2YTliXHU2YTlkXHU2YTllXHU2YTlmXHU2YWE1XHU2''@;'; put 'put ''YWFiXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWI0XHU2YWJkXHU2YWJlXHU2YWJmXHU2YWM2XHU2YWM5XHU2YWM4XHU2YWNjXHU2YWQwXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWRjXHU2YWRkXHU2YWU0XHU2YWU3XHU2YWVjXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWZjXHU2YWZkXHU2YjAyXHU2YjAz''@;'; put 'put ''XHU2YjA2XHU2YjA3XHU2YjA5XHU2YjBmXHU2YjEwXHU2YjExXHU2YjE3XHU2YjFiXHU2YjFlXHU2YjI0XHU2YjI4XHU2YjJiXHU2YjJjXHU2YjJmXHU2YjM1XHU2YjM2XHU2YjNiXHU2YjNmXHU2YjQ2XHU2YjRhXHU2YjRkXHU2YjUyXHU2YjU2XHU2YjU4XHU2YjVkXHU2YjYwXHU2YjY3XHU2''@;'; put 'put ''YjZiXHU2YjZlXHU2YjcwXHU2Yjc1XHU2YjdkIl0sWyI4ZmM2YTEiLCJcdTZiN2VcdTZiODJcdTZiODVcdTZiOTdcdTZiOWJcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYThcdTZiYTlcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYjBcdTZiYjhcdTZiYjlcdTZiYmRcdTZiYmVcdTZiYzNcdTZi''@;'; put 'put ''YzRcdTZiYzlcdTZiY2NcdTZiZDZcdTZiZGFcdTZiZTFcdTZiZTNcdTZiZTZcdTZiZTdcdTZiZWVcdTZiZjFcdTZiZjdcdTZiZjlcdTZiZmZcdTZjMDJcdTZjMDRcdTZjMDVcdTZjMDlcdTZjMGRcdTZjMGVcdTZjMTBcdTZjMTJcdTZjMTlcdTZjMWZcdTZjMjZcdTZjMjdcdTZjMjhcdTZjMmNc''@;'; put 'put ''dTZjMmVcdTZjMzNcdTZjMzVcdTZjMzZcdTZjM2FcdTZjM2JcdTZjM2ZcdTZjNGFcdTZjNGJcdTZjNGRcdTZjNGZcdTZjNTJcdTZjNTRcdTZjNTlcdTZjNWJcdTZjNWNcdTZjNmJcdTZjNmRcdTZjNmZcdTZjNzRcdTZjNzZcdTZjNzhcdTZjNzlcdTZjN2JcdTZjODVcdTZjODZcdTZjODdcdTZj''@;'; put 'put ''ODlcdTZjOTRcdTZjOTVcdTZjOTdcdTZjOThcdTZjOWNcdTZjOWZcdTZjYjBcdTZjYjJcdTZjYjRcdTZjYzJcdTZjYzZcdTZjY2RcdTZjY2ZcdTZjZDBcdTZjZDFcdTZjZDJcdTZjZDRcdTZjZDYiXSxbIjhmYzdhMSIsIlx1NmNkYVx1NmNkY1x1NmNlMFx1NmNlN1x1NmNlOVx1NmNlYlx1NmNl''@;'; put 'put ''Y1x1NmNlZVx1NmNmMlx1NmNmNFx1NmQwNFx1NmQwN1x1NmQwYVx1NmQwZVx1NmQwZlx1NmQxMVx1NmQxM1x1NmQxYVx1NmQyNlx1NmQyN1x1NmQyOFx1NmM2N1x1NmQyZVx1NmQyZlx1NmQzMVx1NmQzOVx1NmQzY1x1NmQzZlx1NmQ1N1x1NmQ1ZVx1NmQ1Zlx1NmQ2MVx1NmQ2NVx1NmQ2N1x1''@;'; put 'put ''NmQ2Zlx1NmQ3MFx1NmQ3Y1x1NmQ4Mlx1NmQ4N1x1NmQ5MVx1NmQ5Mlx1NmQ5NFx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmRhYVx1NmRhY1x1NmRiNFx1NmRiN1x1NmRiOVx1NmRiZFx1NmRiZlx1NmRjNFx1NmRjOFx1NmRjYVx1NmRjZVx1NmRjZlx1NmRkNlx1NmRkYlx1NmRkZFx1NmRkZlx1NmRl''@;'; put 'put ''MFx1NmRlMlx1NmRlNVx1NmRlOVx1NmRlZlx1NmRmMFx1NmRmNFx1NmRmNlx1NmRmY1x1NmUwMFx1NmUwNFx1NmUxZVx1NmUyMlx1NmUyN1x1NmUzMlx1NmUzNlx1NmUzOVx1NmUzYlx1NmUzY1x1NmU0NFx1NmU0NVx1NmU0OFx1NmU0OVx1NmU0Ylx1NmU0Zlx1NmU1MVx1NmU1Mlx1NmU1M1x1''@;'; put 'put ''NmU1NFx1NmU1N1x1NmU1Y1x1NmU1ZFx1NmU1ZSJdLFsiOGZjOGExIiwiXHU2ZTYyXHU2ZTYzXHU2ZTY4XHU2ZTczXHU2ZTdiXHU2ZTdkXHU2ZThkXHU2ZTkzXHU2ZTk5XHU2ZWEwXHU2ZWE3XHU2ZWFkXHU2ZWFlXHU2ZWIxXHU2ZWIzXHU2ZWJiXHU2ZWJmXHU2ZWMwXHU2ZWMxXHU2ZWMzXHU2''@;'; put 'put ''ZWM3XHU2ZWM4XHU2ZWNhXHU2ZWNkXHU2ZWNlXHU2ZWNmXHU2ZWViXHU2ZWVkXHU2ZWVlXHU2ZWY5XHU2ZWZiXHU2ZWZkXHU2ZjA0XHU2ZjA4XHU2ZjBhXHU2ZjBjXHU2ZjBkXHU2ZjE2XHU2ZjE4XHU2ZjFhXHU2ZjFiXHU2ZjI2XHU2ZjI5XHU2ZjJhXHU2ZjJmXHU2ZjMwXHU2ZjMzXHU2ZjM2''@;'; put 'put ''XHU2ZjNiXHU2ZjNjXHU2ZjJkXHU2ZjRmXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjVkXHU2ZjVlXHU2ZjYxXHU2ZjYyXHU2ZjY4XHU2ZjZjXHU2ZjdkXHU2ZjdlXHU2ZjgzXHU2Zjg3XHU2Zjg4XHU2ZjhiXHU2ZjhjXHU2ZjhkXHU2ZjkwXHU2ZjkyXHU2ZjkzXHU2''@;'; put 'put ''Zjk0XHU2Zjk2XHU2ZjlhXHU2ZjlmXHU2ZmEwXHU2ZmE1XHU2ZmE2XHU2ZmE3XHU2ZmE4XHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmI1XHU2ZmI2XHU2ZmJjXHU2ZmM1XHU2ZmM3XHU2ZmM4XHU2ZmNhIl0sWyI4ZmM5YTEiLCJcdTZmZGFcdTZmZGVcdTZmZThcdTZmZTlcdTZmZjBcdTZmZjVcdTZm''@;'; put 'put ''ZjlcdTZmZmNcdTZmZmRcdTcwMDBcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMGRcdTcwMTdcdTcwMjBcdTcwMjNcdTcwMmZcdTcwMzRcdTcwMzdcdTcwMzlcdTcwM2NcdTcwNDNcdTcwNDRcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNTRcdTcwNTVcdTcwNWRcdTcwNWVcdTcwNGVcdTcwNjRc''@;'; put 'put ''dTcwNjVcdTcwNmNcdTcwNmVcdTcwNzVcdTcwNzZcdTcwN2VcdTcwODFcdTcwODVcdTcwODZcdTcwOTQiLDQsIlx1NzA5Ylx1NzBhNFx1NzBhYlx1NzBiMFx1NzBiMVx1NzBiNFx1NzBiN1x1NzBjYVx1NzBkMVx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkOFx1NzBkY1x1NzBlNFx1NzBm''@;'; put 'put ''YVx1NzEwMyIsNCwiXHU3MTBiXHU3MTBjXHU3MTBmXHU3MTFlXHU3MTIwXHU3MTJiXHU3MTJkXHU3MTJmXHU3MTMwXHU3MTMxXHU3MTM4XHU3MTQxXHU3MTQ1XHU3MTQ2XHU3MTQ3XHU3MTRhXHU3MTRiXHU3MTUwXHU3MTUyXHU3MTU3XHU3MTVhXHU3MTVjXHU3MTVlXHU3MTYwIl0sWyI4ZmNh''@;'; put 'put ''YTEiLCJcdTcxNjhcdTcxNzlcdTcxODBcdTcxODVcdTcxODdcdTcxOGNcdTcxOTJcdTcxOWFcdTcxOWJcdTcxYTBcdTcxYTJcdTcxYWZcdTcxYjBcdTcxYjJcdTcxYjNcdTcxYmFcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzRcdTcxY2JcdTcxY2NcdTcxZDNcdTcxZDZcdTcxZDlcdTcxZGFcdTcx''@;'; put 'put ''ZGNcdTcxZjhcdTcxZmVcdTcyMDBcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMTNcdTcyMTdcdTcyMWFcdTcyMWRcdTcyMWZcdTcyMjRcdTcyMmJcdTcyMmZcdTcyMzRcdTcyMzhcdTcyMzlcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDVcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTNcdTcyNTVcdTcyNTZc''@;'; put 'put ''dTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjhcdTcyNmJcdTcyNmVcdTcyNmZcdTcyNzFcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2ZcdTcyODRcdTcyODlcdTcyOGRcdTcyOGVcdTcyOTNcdTcyOWJcdTcyYThcdTcyYWRcdTcyYWVcdTcyYjFcdTcyYjRcdTcyYmVcdTcy''@;'; put 'put ''YzFcdTcyYzdcdTcyYzlcdTcyY2NcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGZcdTcyZTVcdTcyZjNcdTcyZjRcdTcyZmFcdTcyZmIiXSxbIjhmY2JhMSIsIlx1NzJmZVx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwN1x1NzMwYlx1NzMwZFx1NzMxMlx1NzMxM1x1NzMxOFx1NzMxOVx1NzMxZVx1NzMy''@;'; put 'put ''Mlx1NzMyNFx1NzMyN1x1NzMyOFx1NzMyY1x1NzMzMVx1NzMzMlx1NzMzNVx1NzMzYVx1NzMzYlx1NzMzZFx1NzM0M1x1NzM0ZFx1NzM1MFx1NzM1Mlx1NzM1Nlx1NzM1OFx1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM2Nlx1NzM2N1x1NzM2OVx1NzM2Ylx1NzM2Y1x1NzM2ZVx1NzM2Zlx1''@;'; put 'put ''NzM3MVx1NzM3N1x1NzM3OVx1NzM3Y1x1NzM4MFx1NzM4MVx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4ZVx1NzM5MFx1NzM5M1x1NzM5NVx1NzM5N1x1NzM5OFx1NzM5Y1x1NzM5ZVx1NzM5Zlx1NzNhMFx1NzNhMlx1NzNhNVx1NzNhNlx1NzNhYVx1NzNhYlx1NzNhZFx1NzNiNVx1NzNiN1x1NzNi''@;'; put 'put ''OVx1NzNiY1x1NzNiZFx1NzNiZlx1NzNjNVx1NzNjNlx1NzNjOVx1NzNjYlx1NzNjY1x1NzNjZlx1NzNkMlx1NzNkM1x1NzNkNlx1NzNkOVx1NzNkZFx1NzNlMVx1NzNlM1x1NzNlNlx1NzNlN1x1NzNlOVx1NzNmNFx1NzNmNVx1NzNmN1x1NzNmOVx1NzNmYVx1NzNmYlx1NzNmZCJdLFsiOGZj''@;'; put 'put ''Y2ExIiwiXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDA0XHU3NDA3XHU3NDBhXHU3NDExXHU3NDFhXHU3NDFiXHU3NDI0XHU3NDI2XHU3NDI4Iiw5LCJcdTc0MzlcdTc0NDBcdTc0NDNcdTc0NDRcdTc0NDZcdTc0NDdcdTc0NGJcdTc0NGRcdTc0NTFcdTc0NTJcdTc0NTdcdTc0NWRcdTc0NjJcdTc0''@;'; put 'put ''NjZcdTc0NjdcdTc0NjhcdTc0NmJcdTc0NmRcdTc0NmVcdTc0NzFcdTc0NzJcdTc0ODBcdTc0ODFcdTc0ODVcdTc0ODZcdTc0ODdcdTc0ODlcdTc0OGZcdTc0OTBcdTc0OTFcdTc0OTJcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWNcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTNcdTc0YTZcdTc0YThc''@;'; put 'put ''dTc0YTlcdTc0YWFcdTc0YWJcdTc0YWVcdTc0YWZcdTc0YjFcdTc0YjJcdTc0YjVcdTc0YjlcdTc0YmJcdTc0YmZcdTc0YzhcdTc0YzlcdTc0Y2NcdTc0ZDBcdTc0ZDNcdTc0ZDhcdTc0ZGFcdTc0ZGJcdTc0ZGVcdTc0ZGZcdTc0ZTRcdTc0ZThcdTc0ZWFcdTc0ZWJcdTc0ZWZcdTc0ZjRcdTc0''@;'; put 'put ''ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmZcdTc1MDYiXSxbIjhmY2RhMSIsIlx1NzUxMlx1NzUxNlx1NzUxN1x1NzUyMFx1NzUyMVx1NzUyNFx1NzUyN1x1NzUyOVx1NzUyYVx1NzUyZlx1NzUzNlx1NzUzOVx1NzUzZFx1NzUzZVx1NzUzZlx1NzU0MFx1NzU0M1x1NzU0N1x1NzU0OFx1NzU0ZVx1NzU1''@;'; put 'put ''MFx1NzU1Mlx1NzU1N1x1NzU1ZVx1NzU1Zlx1NzU2MVx1NzU2Zlx1NzU3MVx1NzU3OSIsNSwiXHU3NTgxXHU3NTg1XHU3NTkwXHU3NTkyXHU3NTkzXHU3NTk1XHU3NTk5XHU3NTljXHU3NWEyXHU3NWE0XHU3NWI0XHU3NWJhXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM0XHU3NWM2XHU3NWNjXHU3''@;'; put 'put ''NWNlXHU3NWNmXHU3NWQ3XHU3NWRjXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU0XHU3NWU3XHU3NWVjXHU3NWVlXHU3NWVmXHU3NWYxXHU3NWY5XHU3NjAwXHU3NjAyXHU3NjAzXHU3NjA0XHU3NjA3XHU3NjA4XHU3NjBhXHU3NjBjXHU3NjBmXHU3NjEyXHU3NjEzXHU3NjE1XHU3NjE2XHU3NjE5''@;'; put 'put ''XHU3NjFiXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIzXHU3NjI1XHU3NjI2XHU3NjI5XHU3NjJkXHU3NjMyXHU3NjMzXHU3NjM1XHU3NjM4XHU3NjM5Il0sWyI4ZmNlYTEiLCJcdTc2M2FcdTc2M2NcdTc2NGFcdTc2NDBcdTc2NDFcdTc2NDNcdTc2NDRcdTc2NDVcdTc2NDlcdTc2NGJcdTc2NTVc''@;'; put 'put ''dTc2NTlcdTc2NWZcdTc2NjRcdTc2NjVcdTc2NmRcdTc2NmVcdTc2NmZcdTc2NzFcdTc2NzRcdTc2ODFcdTc2ODVcdTc2OGNcdTc2OGRcdTc2OTVcdTc2OWJcdTc2OWNcdTc2OWRcdTc2OWZcdTc2YTBcdTc2YTIiLDYsIlx1NzZhYVx1NzZhZFx1NzZiZFx1NzZjMVx1NzZjNVx1NzZjOVx1NzZj''@;'; put 'put ''Ylx1NzZjY1x1NzZjZVx1NzZkNFx1NzZkOVx1NzZlMFx1NzZlNlx1NzZlOFx1NzZlY1x1NzZmMFx1NzZmMVx1NzZmNlx1NzZmOVx1NzZmY1x1NzcwMFx1NzcwNlx1NzcwYVx1NzcwZVx1NzcxMlx1NzcxNFx1NzcxNVx1NzcxN1x1NzcxOVx1NzcxYVx1NzcxY1x1NzcyMlx1NzcyOFx1NzcyZFx1''@;'; put 'put ''NzcyZVx1NzcyZlx1NzczNFx1NzczNVx1NzczNlx1NzczOVx1NzczZFx1NzczZVx1Nzc0Mlx1Nzc0NVx1Nzc0Nlx1Nzc0YVx1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1Nlx1Nzc1N1x1Nzc1Y1x1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2MiJdLFsiOGZjZmExIiwiXHU3NzY0XHU3NzY3XHU3''@;'; put 'put ''NzZhXHU3NzZjXHU3NzcwXHU3NzcyXHU3NzczXHU3Nzc0XHU3NzdhXHU3NzdkXHU3NzgwXHU3Nzg0XHU3NzhjXHU3NzhkXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3NzlhXHU3NzlmXHU3N2EyXHU3N2E3XHU3N2FhXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2I1XHU3N2JlXHU3N2MzXHU3N2M5XHU3N2Qx''@;'; put 'put ''XHU3N2QyXHU3N2Q1XHU3N2Q5XHU3N2RlXHU3N2RmXHU3N2UwXHU3N2U0XHU3N2U2XHU3N2VhXHU3N2VjXHU3N2YwXHU3N2YxXHU3N2Y0XHU3N2Y4XHU3N2ZiXHU3ODA1XHU3ODA2XHU3ODA5XHU3ODBkXHU3ODBlXHU3ODExXHU3ODFkXHU3ODIxXHU3ODIyXHU3ODIzXHU3ODJkXHU3ODJlXHU3''@;'; put 'put ''ODMwXHU3ODM1XHU3ODM3XHU3ODQzXHU3ODQ0XHU3ODQ3XHU3ODQ4XHU3ODRjXHU3ODRlXHU3ODUyXHU3ODVjXHU3ODVlXHU3ODYwXHU3ODYxXHU3ODYzXHU3ODY0XHU3ODY4XHU3ODZhXHU3ODZlXHU3ODdhXHU3ODdlXHU3ODhhXHU3ODhmXHU3ODk0XHU3ODk4XHU3OGExXHU3ODlkXHU3ODll''@;'; put 'put ''XHU3ODlmXHU3OGE0XHU3OGE4XHU3OGFjXHU3OGFkXHU3OGIwXHU3OGIxXHU3OGIyXHU3OGIzIl0sWyI4ZmQwYTEiLCJcdTc4YmJcdTc4YmRcdTc4YmZcdTc4YzdcdTc4YzhcdTc4YzlcdTc4Y2NcdTc4Y2VcdTc4ZDJcdTc4ZDNcdTc4ZDVcdTc4ZDZcdTc4ZTRcdTc4ZGJcdTc4ZGZcdTc4ZTBc''@;'; put 'put ''dTc4ZTFcdTc4ZTZcdTc4ZWFcdTc4ZjJcdTc4ZjNcdTc5MDBcdTc4ZjZcdTc4ZjdcdTc4ZmFcdTc4ZmJcdTc4ZmZcdTc5MDZcdTc5MGNcdTc5MTBcdTc5MWFcdTc5MWNcdTc5MWVcdTc5MWZcdTc5MjBcdTc5MjVcdTc5MjdcdTc5MjlcdTc5MmRcdTc5MzFcdTc5MzRcdTc5MzVcdTc5M2JcdTc5''@;'; put 'put ''M2RcdTc5M2ZcdTc5NDRcdTc5NDVcdTc5NDZcdTc5NGFcdTc5NGJcdTc5NGZcdTc5NTFcdTc5NTRcdTc5NThcdTc5NWJcdTc5NWNcdTc5NjdcdTc5NjlcdTc5NmJcdTc5NzJcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2VcdTc5OGJcdTc5OGNcdTc5OTFcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZc''@;'; put 'put ''dTc5OThcdTc5OWJcdTc5OWNcdTc5YTFcdTc5YThcdTc5YTlcdTc5YWJcdTc5YWZcdTc5YjFcdTc5YjRcdTc5YjhcdTc5YmJcdTc5YzJcdTc5YzRcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2ZcdTc5ZDRcdTc5ZDZcdTc5ZGFcdTc5ZGRcdTc5ZGUiXSxbIjhmZDFhMSIsIlx1NzllMFx1NzllMlx1''@;'; put 'put ''NzllNVx1NzllYVx1NzllYlx1NzllZFx1NzlmMVx1NzlmOFx1NzlmY1x1N2EwMlx1N2EwM1x1N2EwN1x1N2EwOVx1N2EwYVx1N2EwY1x1N2ExMVx1N2ExNVx1N2ExYlx1N2ExZVx1N2EyMVx1N2EyN1x1N2EyYlx1N2EyZFx1N2EyZlx1N2EzMFx1N2EzNFx1N2EzNVx1N2EzOFx1N2EzOVx1N2Ez''@;'; put 'put ''YVx1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0Y1x1N2E1NVx1N2E1Nlx1N2E1OVx1N2E1Y1x1N2E1ZFx1N2E1Zlx1N2E2MFx1N2E2NVx1N2E2N1x1N2E2YVx1N2E2ZFx1N2E3NVx1N2E3OFx1N2E3ZVx1N2E4MFx1N2E4Mlx1N2E4NVx1N2E4Nlx1N2E4YVx1N2E4Ylx1N2E5MFx1N2E5MVx1''@;'; put 'put ''N2E5NFx1N2E5ZVx1N2FhMFx1N2FhM1x1N2FhY1x1N2FiM1x1N2FiNVx1N2FiOVx1N2FiYlx1N2FiY1x1N2FjNlx1N2FjOVx1N2FjY1x1N2FjZVx1N2FkMVx1N2FkYlx1N2FlOFx1N2FlOVx1N2FlYlx1N2FlY1x1N2FmMVx1N2FmNFx1N2FmYlx1N2FmZFx1N2FmZVx1N2IwN1x1N2IxNFx1N2Ix''@;'; put 'put ''Zlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyYVx1N2IyYlx1N2IyZFx1N2IyZVx1N2IyZlx1N2IzMCJdLFsiOGZkMmExIiwiXHU3YjMxXHU3YjM0XHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQ3XHU3YjRlXHU3YjU1XHU3YjYwXHU3YjY0XHU3YjY2XHU3YjY5XHU3YjZhXHU3YjZkXHU3YjZm''@;'; put 'put ''XHU3YjcyXHU3YjczXHU3Yjc3XHU3Yjg0XHU3Yjg5XHU3YjhlXHU3YjkwXHU3YjkxXHU3Yjk2XHU3YjliXHU3YjllXHU3YmEwXHU3YmE1XHU3YmFjXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmI1XHU3YmI2XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmMyXHU3YmM1XHU3YmM4XHU3YmNhXHU3''@;'; put 'put ''YmQ0XHU3YmQ2XHU3YmQ3XHU3YmQ5XHU3YmRhXHU3YmRiXHU3YmU4XHU3YmVhXHU3YmYyXHU3YmY0XHU3YmY1XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZjXHU3YmZlXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA2XHU3YzA5XHU3YzBiXHU3YzBjXHU3YzBlXHU3YzBmXHU3YzE5XHU3YzFi''@;'; put 'put ''XHU3YzIwXHU3YzI1XHU3YzI2XHU3YzI4XHU3YzJjXHU3YzMxXHU3YzMzXHU3YzM0XHU3YzM2XHU3YzM5XHU3YzNhXHU3YzQ2XHU3YzRhXHU3YzU1XHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU5Iiw1XSxbIjhmZDNhMSIsIlx1N2M2MVx1N2M2M1x1N2M2N1x1N2M2OVx1N2M2ZFx1N2M2ZVx1N2M3''@;'; put 'put ''MFx1N2M3Mlx1N2M3OVx1N2M3Y1x1N2M3ZFx1N2M4Nlx1N2M4N1x1N2M4Zlx1N2M5NFx1N2M5ZVx1N2NhMFx1N2NhNlx1N2NiMFx1N2NiNlx1N2NiN1x1N2NiYVx1N2NiYlx1N2NiY1x1N2NiZlx1N2NjNFx1N2NjN1x1N2NjOFx1N2NjOVx1N2NjZFx1N2NjZlx1N2NkM1x1N2NkNFx1N2NkNVx1''@;'; put 'put ''N2NkN1x1N2NkOVx1N2NkYVx1N2NkZFx1N2NlNlx1N2NlOVx1N2NlYlx1N2NmNVx1N2QwM1x1N2QwN1x1N2QwOFx1N2QwOVx1N2QwZlx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNlx1N2QxZFx1N2QxZVx1N2QyM1x1N2QyNlx1N2QyYVx1N2QyZFx1N2QzMVx1N2QzY1x1N2QzZFx1N2QzZVx1N2Q0''@;'; put 'put ''MFx1N2Q0MVx1N2Q0N1x1N2Q0OFx1N2Q0ZFx1N2Q1MVx1N2Q1M1x1N2Q1N1x1N2Q1OVx1N2Q1YVx1N2Q1Y1x1N2Q1ZFx1N2Q2NVx1N2Q2N1x1N2Q2YVx1N2Q3MFx1N2Q3OFx1N2Q3YVx1N2Q3Ylx1N2Q3Zlx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NVx1N2Q4Nlx1N2Q4OFx1N2Q4Ylx1N2Q4Y1x1''@;'; put 'put ''N2Q4ZFx1N2Q5MVx1N2Q5Nlx1N2Q5N1x1N2Q5ZCJdLFsiOGZkNGExIiwiXHU3ZDllXHU3ZGE2XHU3ZGE3XHU3ZGFhXHU3ZGIzXHU3ZGI2XHU3ZGI3XHU3ZGI5XHU3ZGMyIiw0LCJcdTdkY2NcdTdkY2RcdTdkY2VcdTdkZDdcdTdkZDlcdTdlMDBcdTdkZTJcdTdkZTVcdTdkZTZcdTdkZWFcdTdk''@;'; put 'put ''ZWJcdTdkZWRcdTdkZjFcdTdkZjVcdTdkZjZcdTdkZjlcdTdkZmFcdTdlMDhcdTdlMTBcdTdlMTFcdTdlMTVcdTdlMTdcdTdlMWNcdTdlMWRcdTdlMjBcdTdlMjdcdTdlMjhcdTdlMmNcdTdlMmRcdTdlMmZcdTdlMzNcdTdlMzZcdTdlM2ZcdTdlNDRcdTdlNDVcdTdlNDdcdTdlNGVcdTdlNTBc''@;'; put 'put ''dTdlNTJcdTdlNThcdTdlNWZcdTdlNjFcdTdlNjJcdTdlNjVcdTdlNmJcdTdlNmVcdTdlNmZcdTdlNzNcdTdlNzhcdTdlN2VcdTdlODFcdTdlODZcdTdlODdcdTdlOGFcdTdlOGRcdTdlOTFcdTdlOTVcdTdlOThcdTdlOWFcdTdlOWRcdTdlOWVcdTdmM2NcdTdmM2JcdTdmM2RcdTdmM2VcdTdm''@;'; put 'put ''M2ZcdTdmNDNcdTdmNDRcdTdmNDdcdTdmNGZcdTdmNTJcdTdmNTNcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNjFcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNmQiXSxbIjhmZDVhMSIsIlx1N2Y3MVx1N2Y3ZFx1N2Y3ZVx1N2Y3Zlx1N2Y4MFx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5''@;'; put 'put ''MVx1N2Y5Nlx1N2Y5N1x1N2Y5Y1x1N2ZhMVx1N2ZhMlx1N2ZhNlx1N2ZhYVx1N2ZhZFx1N2ZiNFx1N2ZiY1x1N2ZiZlx1N2ZjMFx1N2ZjM1x1N2ZjOFx1N2ZjZVx1N2ZjZlx1N2ZkYlx1N2ZkZlx1N2ZlM1x1N2ZlNVx1N2ZlOFx1N2ZlY1x1N2ZlZVx1N2ZlZlx1N2ZmMlx1N2ZmYVx1N2ZmZFx1''@;'; put 'put ''N2ZmZVx1N2ZmZlx1ODAwN1x1ODAwOFx1ODAwYVx1ODAwZFx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxNFx1ODAxNlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMFx1ODAyNFx1ODAyNlx1ODAyY1x1ODAyZVx1ODAzMFx1ODAzNFx1ODAzNVx1ODAzN1x1ODAzOVx1ODAzYVx1ODAzY1x1ODAz''@;'; put 'put ''ZVx1ODA0MFx1ODA0NFx1ODA2MFx1ODA2NFx1ODA2Nlx1ODA2ZFx1ODA3MVx1ODA3NVx1ODA4MVx1ODA4OFx1ODA4ZVx1ODA5Y1x1ODA5ZVx1ODBhNlx1ODBhN1x1ODBhYlx1ODBiOFx1ODBiOVx1ODBjOFx1ODBjZFx1ODBjZlx1ODBkMlx1ODBkNFx1ODBkNVx1ODBkN1x1ODBkOFx1ODBlMFx1''@;'; put 'put ''ODBlZFx1ODBlZSJdLFsiOGZkNmExIiwiXHU4MGYwXHU4MGYyXHU4MGYzXHU4MGY2XHU4MGY5XHU4MGZhXHU4MGZlXHU4MTAzXHU4MTBiXHU4MTE2XHU4MTE3XHU4MTE4XHU4MTFjXHU4MTFlXHU4MTIwXHU4MTI0XHU4MTI3XHU4MTJjXHU4MTMwXHU4MTM1XHU4MTNhXHU4MTNjXHU4MTQ1XHU4''@;'; put 'put ''MTQ3XHU4MTRhXHU4MTRjXHU4MTUyXHU4MTU3XHU4MTYwXHU4MTYxXHU4MTY3XHU4MTY4XHU4MTY5XHU4MTZkXHU4MTZmXHU4MTc3XHU4MTgxXHU4MTkwXHU4MTg0XHU4MTg1XHU4MTg2XHU4MThiXHU4MThlXHU4MTk2XHU4MTk4XHU4MTliXHU4MTllXHU4MWEyXHU4MWFlXHU4MWIyXHU4MWI0''@;'; put 'put ''XHU4MWJiXHU4MWNiXHU4MWMzXHU4MWM1XHU4MWNhXHU4MWNlXHU4MWNmXHU4MWQ1XHU4MWQ3XHU4MWRiXHU4MWRkXHU4MWRlXHU4MWUxXHU4MWU0XHU4MWViXHU4MWVjXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY4XHU4MWY5XHU4MWZkXHU4MWZmXHU4MjAwXHU4MjAzXHU4''@;'; put 'put ''MjBmXHU4MjEzXHU4MjE0XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIxXHU4MjIyXHU4MjI4XHU4MjMyXHU4MjM0XHU4MjNhXHU4MjQzXHU4MjQ0XHU4MjQ1XHU4MjQ2Il0sWyI4ZmQ3YTEiLCJcdTgyNGJcdTgyNGVcdTgyNGZcdTgyNTFcdTgyNTZcdTgyNWNcdTgyNjBcdTgyNjNcdTgyNjdcdTgy''@;'; put 'put ''NmRcdTgyNzRcdTgyN2JcdTgyN2RcdTgyN2ZcdTgyODBcdTgyODFcdTgyODNcdTgyODRcdTgyODdcdTgyODlcdTgyOGFcdTgyOGVcdTgyOTFcdTgyOTRcdTgyOTZcdTgyOThcdTgyOWFcdTgyOWJcdTgyYTBcdTgyYTFcdTgyYTNcdTgyYTRcdTgyYTdcdTgyYThcdTgyYTlcdTgyYWFcdTgyYWVc''@;'; put 'put ''dTgyYjBcdTgyYjJcdTgyYjRcdTgyYjdcdTgyYmFcdTgyYmNcdTgyYmVcdTgyYmZcdTgyYzZcdTgyZDBcdTgyZDVcdTgyZGFcdTgyZTBcdTgyZTJcdTgyZTRcdTgyZThcdTgyZWFcdTgyZWRcdTgyZWZcdTgyZjZcdTgyZjdcdTgyZmRcdTgyZmVcdTgzMDBcdTgzMDFcdTgzMDdcdTgzMDhcdTgz''@;'; put 'put ''MGFcdTgzMGJcdTgzNTRcdTgzMWJcdTgzMWRcdTgzMWVcdTgzMWZcdTgzMjFcdTgzMjJcdTgzMmNcdTgzMmRcdTgzMmVcdTgzMzBcdTgzMzNcdTgzMzdcdTgzM2FcdTgzM2NcdTgzM2RcdTgzNDJcdTgzNDNcdTgzNDRcdTgzNDdcdTgzNGRcdTgzNGVcdTgzNTFcdTgzNTVcdTgzNTZcdTgzNTdc''@;'; put 'put ''dTgzNzBcdTgzNzgiXSxbIjhmZDhhMSIsIlx1ODM3ZFx1ODM3Zlx1ODM4MFx1ODM4Mlx1ODM4NFx1ODM4Nlx1ODM4ZFx1ODM5Mlx1ODM5NFx1ODM5NVx1ODM5OFx1ODM5OVx1ODM5Ylx1ODM5Y1x1ODM5ZFx1ODNhNlx1ODNhN1x1ODNhOVx1ODNhY1x1ODNiZVx1ODNiZlx1ODNjMFx1ODNjN1x1''@;'; put 'put ''ODNjOVx1ODNjZlx1ODNkMFx1ODNkMVx1ODNkNFx1ODNkZFx1ODM1M1x1ODNlOFx1ODNlYVx1ODNmNlx1ODNmOFx1ODNmOVx1ODNmY1x1ODQwMVx1ODQwNlx1ODQwYVx1ODQwZlx1ODQxMVx1ODQxNVx1ODQxOVx1ODNhZFx1ODQyZlx1ODQzOVx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0YVx1ODQ0''@;'; put 'put ''ZFx1ODQ0Zlx1ODQ1MVx1ODQ1Mlx1ODQ1Nlx1ODQ1OFx1ODQ1OVx1ODQ1YVx1ODQ1Y1x1ODQ2MFx1ODQ2NFx1ODQ2NVx1ODQ2N1x1ODQ2YVx1ODQ3MFx1ODQ3M1x1ODQ3NFx1ODQ3Nlx1ODQ3OFx1ODQ3Y1x1ODQ3ZFx1ODQ4MVx1ODQ4NVx1ODQ5Mlx1ODQ5M1x1ODQ5NVx1ODQ5ZVx1ODRhNlx1''@;'; put 'put ''ODRhOFx1ODRhOVx1ODRhYVx1ODRhZlx1ODRiMVx1ODRiNFx1ODRiYVx1ODRiZFx1ODRiZVx1ODRjMFx1ODRjMlx1ODRjN1x1ODRjOFx1ODRjY1x1ODRjZlx1ODRkMyJdLFsiOGZkOWExIiwiXHU4NGRjXHU4NGU3XHU4NGVhXHU4NGVmXHU4NGYwXHU4NGYxXHU4NGYyXHU4NGY3XHU4NTMyXHU4''@;'; put 'put ''NGZhXHU4NGZiXHU4NGZkXHU4NTAyXHU4NTAzXHU4NTA3XHU4NTBjXHU4NTBlXHU4NTEwXHU4NTFjXHU4NTFlXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI3XHU4NTJhXHU4NTJiXHU4NTJmXHU4NTMzXHU4NTM0XHU4NTM2XHU4NTNmXHU4NTQ2XHU4NTRmIiw0LCJcdTg1NTZcdTg1NTlc''@;'; put 'put ''dTg1NWMiLDYsIlx1ODU2NFx1ODU2Ylx1ODU2Zlx1ODU3OVx1ODU3YVx1ODU3Ylx1ODU3ZFx1ODU3Zlx1ODU4MVx1ODU4NVx1ODU4Nlx1ODU4OVx1ODU4Ylx1ODU4Y1x1ODU4Zlx1ODU5M1x1ODU5OFx1ODU5ZFx1ODU5Zlx1ODVhMFx1ODVhMlx1ODVhNVx1ODVhN1x1ODViNFx1ODViNlx1ODVi''@;'; put 'put ''N1x1ODViOFx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMlx1ODVjN1x1ODVjYVx1ODVjYlx1ODVjZVx1ODVhZFx1ODVkOFx1ODVkYVx1ODVkZlx1ODVlMFx1ODVlNlx1ODVlOFx1ODVlZFx1ODVmM1x1ODVmNlx1ODVmYyJdLFsiOGZkYWExIiwiXHU4NWZmXHU4NjAwXHU4NjA0XHU4NjA1''@;'; put 'put ''XHU4NjBkXHU4NjBlXHU4NjEwXHU4NjExXHU4NjEyXHU4NjE4XHU4NjE5XHU4NjFiXHU4NjFlXHU4NjIxXHU4NjI3XHU4NjI5XHU4NjM2XHU4NjM4XHU4NjNhXHU4NjNjXHU4NjNkXHU4NjQwXHU4NjQyXHU4NjQ2XHU4NjUyXHU4NjUzXHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjVkXHU4''@;'; put 'put ''NjYwIiw0LCJcdTg2NjlcdTg2NmNcdTg2NmZcdTg2NzVcdTg2NzZcdTg2NzdcdTg2N2FcdTg2OGRcdTg2OTFcdTg2OTZcdTg2OThcdTg2OWFcdTg2OWNcdTg2YTFcdTg2YTZcdTg2YTdcdTg2YThcdTg2YWRcdTg2YjFcdTg2YjNcdTg2YjRcdTg2YjVcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmZc''@;'; put 'put ''dTg2YzBcdTg2YzFcdTg2YzNcdTg2YzVcdTg2ZDFcdTg2ZDJcdTg2ZDVcdTg2ZDdcdTg2ZGFcdTg2ZGNcdTg2ZTBcdTg2ZTNcdTg2ZTVcdTg2ZTdcdTg2ODhcdTg2ZmFcdTg2ZmNcdTg2ZmRcdTg3MDRcdTg3MDVcdTg3MDdcdTg3MGJcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTNcdTg3MTRcdTg3''@;'; put 'put ''MTlcdTg3MWVcdTg3MWZcdTg3MjFcdTg3MjMiXSxbIjhmZGJhMSIsIlx1ODcyOFx1ODcyZVx1ODcyZlx1ODczMVx1ODczMlx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODczZVx1ODc0MFx1ODc0M1x1ODc0NVx1ODc0ZFx1ODc1OFx1ODc1ZFx1ODc2MVx1ODc2NFx1ODc2NVx1ODc2Zlx1ODc3''@;'; put 'put ''MVx1ODc3Mlx1ODc3Ylx1ODc4MyIsNiwiXHU4NzhiXHU4NzhjXHU4NzkwXHU4NzkzXHU4Nzk1XHU4Nzk3XHU4Nzk4XHU4Nzk5XHU4NzllXHU4N2EwXHU4N2EzXHU4N2E3XHU4N2FjXHU4N2FkXHU4N2FlXHU4N2IxXHU4N2I1XHU4N2JlXHU4N2JmXHU4N2MxXHU4N2M4XHU4N2M5XHU4N2NhXHU4''@;'; put 'put ''N2NlXHU4N2Q1XHU4N2Q2XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RmXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2VhXHU4N2ViXHU4N2VkXHU4N2YxXHU4N2YzXHU4N2Y4XHU4N2ZhXHU4N2ZmXHU4ODAxXHU4ODAzXHU4ODA2XHU4ODA5XHU4ODBhXHU4ODBiXHU4ODEwXHU4ODE5XHU4ODEyXHU4ODEz''@;'; put 'put ''XHU4ODE0XHU4ODE4XHU4ODFhXHU4ODFiXHU4ODFjXHU4ODFlXHU4ODFmXHU4ODI4XHU4ODJkXHU4ODJlXHU4ODMwXHU4ODMyXHU4ODM1Il0sWyI4ZmRjYTEiLCJcdTg4M2FcdTg4M2NcdTg4NDFcdTg4NDNcdTg4NDVcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NTFcdTg4NTVc''@;'; put 'put ''dTg4NTZcdTg4NThcdTg4NWFcdTg4NWNcdTg4NWZcdTg4NjBcdTg4NjRcdTg4NjlcdTg4NzFcdTg4NzlcdTg4N2JcdTg4ODBcdTg4OThcdTg4OWFcdTg4OWJcdTg4OWNcdTg4OWZcdTg4YTBcdTg4YThcdTg4YWFcdTg4YmFcdTg4YmRcdTg4YmVcdTg4YzBcdTg4Y2EiLDQsIlx1ODhkMVx1ODhk''@;'; put 'put ''Mlx1ODhkM1x1ODhkYlx1ODhkZVx1ODhlN1x1ODhlZlx1ODhmMFx1ODhmMVx1ODhmNVx1ODhmN1x1ODkwMVx1ODkwNlx1ODkwZFx1ODkwZVx1ODkwZlx1ODkxNVx1ODkxNlx1ODkxOFx1ODkxOVx1ODkxYVx1ODkxY1x1ODkyMFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkzMFx1ODkzMVx1ODkzMlx1''@;'; put 'put ''ODkzNVx1ODkzOVx1ODkzYVx1ODkzZVx1ODk0MFx1ODk0Mlx1ODk0NVx1ODk0Nlx1ODk0OVx1ODk0Zlx1ODk1Mlx1ODk1N1x1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2Ylx1ODk2ZVx1ODk3MFx1ODk3M1x1ODk3NVx1ODk3YSJdLFsiOGZkZGExIiwiXHU4OTdiXHU4''@;'; put 'put ''OTdjXHU4OTdkXHU4OTg5XHU4OThkXHU4OTkwXHU4OTk0XHU4OTk1XHU4OTliXHU4OTljXHU4OTlmXHU4OWEwXHU4OWE1XHU4OWIwXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWJjXHU4OWQ0Iiw0LCJcdTg5ZTVcdTg5ZTlcdTg5ZWJcdTg5ZWRcdTg5ZjFcdTg5ZjNcdTg5ZjZcdTg5Zjlc''@;'; put 'put ''dTg5ZmRcdTg5ZmZcdThhMDRcdThhMDVcdThhMDdcdThhMGZcdThhMTFcdThhMTJcdThhMTRcdThhMTVcdThhMWVcdThhMjBcdThhMjJcdThhMjRcdThhMjZcdThhMmJcdThhMmNcdThhMmZcdThhMzVcdThhMzdcdThhM2RcdThhM2VcdThhNDBcdThhNDNcdThhNDVcdThhNDdcdThhNDlcdThh''@;'; put 'put ''NGRcdThhNGVcdThhNTNcdThhNTZcdThhNTdcdThhNThcdThhNWNcdThhNWRcdThhNjFcdThhNjVcdThhNjdcdThhNzVcdThhNzZcdThhNzdcdThhNzlcdThhN2FcdThhN2JcdThhN2VcdThhN2ZcdThhODBcdThhODNcdThhODZcdThhOGJcdThhOGZcdThhOTBcdThhOTJcdThhOTZcdThhOTdc''@;'; put 'put ''dThhOTlcdThhOWZcdThhYTdcdThhYTlcdThhYWVcdThhYWZcdThhYjMiXSxbIjhmZGVhMSIsIlx1OGFiNlx1OGFiN1x1OGFiYlx1OGFiZVx1OGFjM1x1OGFjNlx1OGFjOFx1OGFjOVx1OGFjYVx1OGFkMVx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkN1x1OGFkZFx1OGFkZlx1OGFlY1x1OGFmMFx1''@;'; put 'put ''OGFmNFx1OGFmNVx1OGFmNlx1OGFmY1x1OGFmZlx1OGIwNVx1OGIwNlx1OGIwYlx1OGIxMVx1OGIxY1x1OGIxZVx1OGIxZlx1OGIwYVx1OGIyZFx1OGIzMFx1OGIzN1x1OGIzY1x1OGI0MiIsNCwiXHU4YjQ4XHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU5XHU4YjRkXHU4YjVlXHU4YjYzXHU4YjZk''@;'; put 'put ''XHU4Yjc2XHU4Yjc4XHU4Yjc5XHU4YjdjXHU4YjdlXHU4YjgxXHU4Yjg0XHU4Yjg1XHU4YjhiXHU4YjhkXHU4YjhmXHU4Yjk0XHU4Yjk1XHU4YjljXHU4YjllXHU4YjlmXHU4YzM4XHU4YzM5XHU4YzNkXHU4YzNlXHU4YzQ1XHU4YzQ3XHU4YzQ5XHU4YzRiXHU4YzRmXHU4YzUxXHU4YzUzXHU4''@;'; put 'put ''YzU0XHU4YzU3XHU4YzU4XHU4YzViXHU4YzVkXHU4YzU5XHU4YzYzXHU4YzY0XHU4YzY2XHU4YzY4XHU4YzY5XHU4YzZkXHU4YzczXHU4Yzc1XHU4Yzc2XHU4YzdiXHU4YzdlXHU4Yzg2Il0sWyI4ZmRmYTEiLCJcdThjODdcdThjOGJcdThjOTBcdThjOTJcdThjOTNcdThjOTlcdThjOWJcdThj''@;'; put 'put ''OWNcdThjYTRcdThjYjlcdThjYmFcdThjYzVcdThjYzZcdThjYzlcdThjY2JcdThjY2ZcdThjZDZcdThjZDVcdThjZDlcdThjZGRcdThjZTFcdThjZThcdThjZWNcdThjZWZcdThjZjBcdThjZjJcdThjZjVcdThjZjdcdThjZjhcdThjZmVcdThjZmZcdThkMDFcdThkMDNcdThkMDlcdThkMTJc''@;'; put 'put ''dThkMTdcdThkMWJcdThkNjVcdThkNjlcdThkNmNcdThkNmVcdThkN2ZcdThkODJcdThkODRcdThkODhcdThkOGRcdThkOTBcdThkOTFcdThkOTVcdThkOWVcdThkOWZcdThkYTBcdThkYTZcdThkYWJcdThkYWNcdThkYWZcdThkYjJcdThkYjVcdThkYjdcdThkYjlcdThkYmJcdThkYzBcdThk''@;'; put 'put ''YzVcdThkYzZcdThkYzdcdThkYzhcdThkY2FcdThkY2VcdThkZDFcdThkZDRcdThkZDVcdThkZDdcdThkZDlcdThkZTRcdThkZTVcdThkZTdcdThkZWNcdThkZjBcdThkYmNcdThkZjFcdThkZjJcdThkZjRcdThkZmRcdThlMDFcdThlMDRcdThlMDVcdThlMDZcdThlMGJcdThlMTFcdThlMTRc''@;'; put 'put ''dThlMTZcdThlMjBcdThlMjFcdThlMjIiXSxbIjhmZTBhMSIsIlx1OGUyM1x1OGUyNlx1OGUyN1x1OGUzMVx1OGUzM1x1OGUzNlx1OGUzN1x1OGUzOFx1OGUzOVx1OGUzZFx1OGU0MFx1OGU0MVx1OGU0Ylx1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1NFx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1''@;'; put 'put ''OGU2MVx1OGU2Mlx1OGU2OVx1OGU2Y1x1OGU2ZFx1OGU2Zlx1OGU3MFx1OGU3MVx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU4Mlx1OGU4M1x1OGU4OVx1OGU5MFx1OGU5Mlx1OGU5NVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5ZVx1OGVhMlx1OGVhN1x1OGVhOVx1OGVhZFx1OGVhZVx1OGViM1x1OGVi''@;'; put 'put ''NVx1OGViYVx1OGViYlx1OGVjMFx1OGVjMVx1OGVjM1x1OGVjNFx1OGVjN1x1OGVjZlx1OGVkMVx1OGVkNFx1OGVkY1x1OGVlOFx1OGVlZVx1OGVmMFx1OGVmMVx1OGVmN1x1OGVmOVx1OGVmYVx1OGVlZFx1OGYwMFx1OGYwMlx1OGYwN1x1OGYwOFx1OGYwZlx1OGYxMFx1OGYxNlx1OGYxN1x1''@;'; put 'put ''OGYxOFx1OGYxZVx1OGYyMFx1OGYyMVx1OGYyM1x1OGYyNVx1OGYyN1x1OGYyOFx1OGYyY1x1OGYyZFx1OGYyZVx1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzYVx1OGY0MFx1OGY0MSJdLFsiOGZlMWExIiwiXHU4ZjQzXHU4ZjQ3XHU4ZjRmXHU4ZjUxIiw0LCJcdThmNThcdThmNWRcdThm''@;'; put 'put ''NWVcdThmNjVcdThmOWRcdThmYTBcdThmYTFcdThmYTRcdThmYTVcdThmYTZcdThmYjVcdThmYjZcdThmYjhcdThmYmVcdThmYzBcdThmYzFcdThmYzZcdThmY2FcdThmY2JcdThmY2RcdThmZDBcdThmZDJcdThmZDNcdThmZDVcdThmZTBcdThmZTNcdThmZTRcdThmZThcdThmZWVcdThmZjFc''@;'; put 'put ''dThmZjVcdThmZjZcdThmZmJcdThmZmVcdTkwMDJcdTkwMDRcdTkwMDhcdTkwMGNcdTkwMThcdTkwMWJcdTkwMjhcdTkwMjlcdTkwMmZcdTkwMmFcdTkwMmNcdTkwMmRcdTkwMzNcdTkwMzRcdTkwMzdcdTkwM2ZcdTkwNDNcdTkwNDRcdTkwNGNcdTkwNWJcdTkwNWRcdTkwNjJcdTkwNjZcdTkw''@;'; put 'put ''NjdcdTkwNmNcdTkwNzBcdTkwNzRcdTkwNzlcdTkwODVcdTkwODhcdTkwOGJcdTkwOGNcdTkwOGVcdTkwOTBcdTkwOTVcdTkwOTdcdTkwOThcdTkwOTlcdTkwOWJcdTkwYTBcdTkwYTFcdTkwYTJcdTkwYTVcdTkwYjBcdTkwYjJcdTkwYjNcdTkwYjRcdTkwYjZcdTkwYmRcdTkwY2NcdTkwYmVc''@;'; put 'put ''dTkwYzMiXSxbIjhmZTJhMSIsIlx1OTBjNFx1OTBjNVx1OTBjN1x1OTBjOFx1OTBkNVx1OTBkN1x1OTBkOFx1OTBkOVx1OTBkY1x1OTBkZFx1OTBkZlx1OTBlNVx1OTBkMlx1OTBmNlx1OTBlYlx1OTBlZlx1OTBmMFx1OTBmNFx1OTBmZVx1OTBmZlx1OTEwMFx1OTEwNFx1OTEwNVx1OTEwNlx1''@;'; put 'put ''OTEwOFx1OTEwZFx1OTExMFx1OTExNFx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExY1x1OTExZVx1OTEyMFx1OTEyNVx1OTEyMlx1OTEyM1x1OTEyN1x1OTEyOVx1OTEyZVx1OTEyZlx1OTEzMVx1OTEzNFx1OTEzNlx1OTEzN1x1OTEzOVx1OTEzYVx1OTEzY1x1OTEzZFx1OTE0M1x1OTE0''@;'; put 'put ''N1x1OTE0OFx1OTE0Zlx1OTE1M1x1OTE1N1x1OTE1OVx1OTE1YVx1OTE1Ylx1OTE2MVx1OTE2NFx1OTE2N1x1OTE2ZFx1OTE3NFx1OTE3OVx1OTE3YVx1OTE3Ylx1OTE4MVx1OTE4M1x1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4ZVx1OTE5MVx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5OFx1OTE5ZVx1''@;'; put 'put ''OTFhMVx1OTFhNlx1OTFhOFx1OTFhY1x1OTFhZFx1OTFhZVx1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiYlx1OTFiY1x1OTFiZFx1OTFiZiJdLFsiOGZlM2ExIiwiXHU5MWMyXHU5MWMzXHU5MWM1XHU5MWQzXHU5MWQ0XHU5MWQ3XHU5MWQ5XHU5MWRhXHU5MWRlXHU5MWU0XHU5''@;'; put 'put ''MWU1XHU5MWU5XHU5MWVhXHU5MWVjIiw1LCJcdTkxZjdcdTkxZjlcdTkxZmJcdTkxZmRcdTkyMDBcdTkyMDFcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDlcdTkyMGFcdTkyMGNcdTkyMTBcdTkyMTJcdTkyMTNcdTkyMTZcdTkyMThcdTkyMWNcdTkyMWRcdTkyMjNcdTkyMjRcdTkyMjVc''@;'; put 'put ''dTkyMjZcdTkyMjhcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzNcdTkyMzVcdTkyMzZcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2NcdTkyM2VcdTkyNDBcdTkyNDJcdTkyNDNcdTkyNDZcdTkyNDdcdTkyNGFcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTFcdTkyNThcdTkyNTlcdTkyNWNcdTkyNWRcdTky''@;'; put 'put ''NjBcdTkyNjFcdTkyNjVcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzUiLDQsIlx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3Zlx1OTI4OFx1OTI4OVx1OTI4YVx1OTI4ZFx1OTI4ZVx1OTI5Mlx1OTI5NyJdLFsiOGZlNGExIiwiXHU5Mjk5XHU5MjlmXHU5MmEwXHU5MmE0''@;'; put 'put ''XHU5MmE1XHU5MmE3XHU5MmE4XHU5MmFiXHU5MmFmXHU5MmIyXHU5MmI2XHU5MmI4XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJmIiw0LCJcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzhcdTkyY2JcdTkyY2NcdTkyY2RcdTkyY2VcdTkyZDBcdTkyZDNcdTkyZDVcdTkyZDdcdTkyZDhcdTky''@;'; put 'put ''ZDlcdTkyZGNcdTkyZGRcdTkyZGZcdTkyZTBcdTkyZTFcdTkyZTNcdTkyZTVcdTkyZTdcdTkyZThcdTkyZWNcdTkyZWVcdTkyZjBcdTkyZjlcdTkyZmJcdTkyZmZcdTkzMDBcdTkzMDJcdTkzMDhcdTkzMGRcdTkzMTFcdTkzMTRcdTkzMTVcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjFc''@;'; put 'put ''dTkzMjRcdTkzMjVcdTkzMjdcdTkzMjlcdTkzMmFcdTkzMzNcdTkzMzRcdTkzMzZcdTkzMzdcdTkzNDdcdTkzNDhcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTVcdTkzNTdcdTkzNThcdTkzNWFcdTkzNWVcdTkzNjRcdTkzNjVcdTkzNjdcdTkzNjlcdTkzNmFcdTkzNmRcdTkzNmZcdTkz''@;'; put 'put ''NzBcdTkzNzFcdTkzNzNcdTkzNzRcdTkzNzYiXSxbIjhmZTVhMSIsIlx1OTM3YVx1OTM3ZFx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4OFx1OTM4YVx1OTM4Ylx1OTM4ZFx1OTM4Zlx1OTM5Mlx1OTM5NVx1OTM5OFx1OTM5Ylx1OTM5ZVx1OTNhMVx1OTNhM1x1OTNhNFx1OTNhNlx1OTNh''@;'; put 'put ''OFx1OTNhYlx1OTNiNFx1OTNiNVx1OTNiNlx1OTNiYVx1OTNhOVx1OTNjMVx1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOSIsNCwiXHU5M2QzXHU5M2Q5XHU5M2RjXHU5M2RlXHU5M2RmXHU5M2UyXHU5M2U2XHU5M2U3XHU5M2Y5XHU5M2Y3XHU5M2Y4XHU5M2ZhXHU5M2ZiXHU5M2ZkXHU5''@;'; put 'put ''NDAxXHU5NDAyXHU5NDA0XHU5NDA4XHU5NDA5XHU5NDBkXHU5NDBlXHU5NDBmXHU5NDE1XHU5NDE2XHU5NDE3XHU5NDFmXHU5NDJlXHU5NDJmXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDNiXHU5NDNmXHU5NDNkXHU5NDQzXHU5NDQ1XHU5NDQ4XHU5NDRhXHU5NDRjXHU5NDU1XHU5NDU5''@;'; put 'put ''XHU5NDVjXHU5NDVmXHU5NDYxXHU5NDYzXHU5NDY4XHU5NDZiXHU5NDZkXHU5NDZlXHU5NDZmXHU5NDcxXHU5NDcyXHU5NDg0XHU5NDgzXHU5NTc4XHU5NTc5Il0sWyI4ZmU2YTEiLCJcdTk1N2VcdTk1ODRcdTk1ODhcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTFc''@;'; put 'put ''dTk1YTZcdTk1YTlcdTk1YWJcdTk1YWNcdTk1YjRcdTk1YjZcdTk1YmFcdTk1YmRcdTk1YmZcdTk1YzZcdTk1YzhcdTk1YzlcdTk1Y2JcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDlcdTk1ZGFcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTRcdTk1ZTZcdTk2MWRcdTk2MWVcdTk2''@;'; put 'put ''MjJcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MmNcdTk2MzFcdTk2MzNcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2NcdTk2M2RcdTk2NDFcdTk2NTJcdTk2NTRcdTk2NTZcdTk2NTdcdTk2NThcdTk2NjFcdTk2NmVcdTk2NzRcdTk2N2JcdTk2N2NcdTk2N2VcdTk2N2ZcdTk2ODFcdTk2ODJc''@;'; put 'put ''dTk2ODNcdTk2ODRcdTk2ODlcdTk2OTFcdTk2OTZcdTk2OWFcdTk2OWRcdTk2OWZcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YTlcdTk2YWVcdTk2YWZcdTk2YjNcdTk2YmFcdTk2Y2FcdTk2ZDJcdTVkYjJcdTk2ZDhcdTk2ZGFcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTlcdTk2ZWZcdTk2ZjFcdTk2''@;'; put 'put ''ZmFcdTk3MDIiXSxbIjhmZTdhMSIsIlx1OTcwM1x1OTcwNVx1OTcwOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyOFx1OTczMVx1OTczM1x1OTc0MVx1OTc0M1x1OTc0YVx1OTc0ZVx1OTc0Zlx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Ylx1OTc2M1x1OTc2''@;'; put 'put ''N1x1OTc2YVx1OTc2ZVx1OTc3M1x1OTc3Nlx1OTc3N1x1OTc3OFx1OTc3Ylx1OTc3ZFx1OTc3Zlx1OTc4MFx1OTc4OVx1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5ZVx1OTc5Zlx1OTdhMlx1OTdhY1x1OTdhZVx1OTdiMVx1OTdiMlx1OTdiNVx1OTdiNlx1OTdiOFx1OTdiOVx1''@;'; put 'put ''OTdiYVx1OTdiY1x1OTdiZVx1OTdiZlx1OTdjMVx1OTdjNFx1OTdjNVx1OTdjN1x1OTdjOVx1OTdjYVx1OTdjY1x1OTdjZFx1OTdjZVx1OTdkMFx1OTdkMVx1OTdkNFx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkZFx1OTdkZVx1OTdlMFx1OTdkYlx1OTdlMVx1OTdlNFx1OTdlZlx1OTdmMVx1OTdm''@;'; put 'put ''NFx1OTdmN1x1OTdmOFx1OTdmYVx1OTgwN1x1OTgwYVx1OTgxOVx1OTgwZFx1OTgwZVx1OTgxNFx1OTgxNlx1OTgxY1x1OTgxZVx1OTgyMFx1OTgyM1x1OTgyNiJdLFsiOGZlOGExIiwiXHU5ODJiXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMyXHU5ODMzXHU5ODM1XHU5ODI1XHU5ODNlXHU5ODQ0''@;'; put 'put ''XHU5ODQ3XHU5ODRhXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU2XHU5ODU3XHU5ODU5XHU5ODVhXHU5ODYyXHU5ODYzXHU5ODY1XHU5ODY2XHU5ODZhXHU5ODZjXHU5OGFiXHU5OGFkXHU5OGFlXHU5OGIwXHU5OGI0XHU5OGI3XHU5OGI4XHU5OGJhXHU5OGJiXHU5OGJmXHU5OGMyXHU5OGM1XHU5''@;'; put 'put ''OGM4XHU5OGNjXHU5OGUxXHU5OGUzXHU5OGU1XHU5OGU2XHU5OGU3XHU5OGVhXHU5OGYzXHU5OGY2XHU5OTAyXHU5OTA3XHU5OTA4XHU5OTExXHU5OTE1XHU5OTE2XHU5OTE3XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFmXHU5OTIyXHU5OTI2XHU5OTI3XHU5OTJiXHU5OTMxIiw0LCJcdTk5Mzlc''@;'; put 'put ''dTk5M2FcdTk5M2JcdTk5M2NcdTk5NDBcdTk5NDFcdTk5NDZcdTk5NDdcdTk5NDhcdTk5NGRcdTk5NGVcdTk5NTRcdTk5NThcdTk5NTlcdTk5NWJcdTk5NWNcdTk5NWVcdTk5NWZcdTk5NjBcdTk5OWJcdTk5OWRcdTk5OWZcdTk5YTZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjUiXSxbIjhmZTlh''@;'; put 'put ''MSIsIlx1OTliOVx1OTliYVx1OTliZFx1OTliZlx1OTljM1x1OTljOVx1OTlkM1x1OTlkNFx1OTlkOVx1OTlkYVx1OTlkY1x1OTlkZVx1OTllN1x1OTllYVx1OTllYlx1OTllY1x1OTlmMFx1OTlmNFx1OTlmNVx1OTlmOVx1OTlmZFx1OTlmZVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwYlx1OWEw''@;'; put 'put ''Y1x1OWExMFx1OWExMVx1OWExNlx1OWExZVx1OWEyMFx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyN1x1OWEyZFx1OWEyZVx1OWEzM1x1OWEzNVx1OWEzNlx1OWEzOFx1OWE0N1x1OWE0MVx1OWE0NFx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZVx1OWE1MVx1OWE1NFx1OWE1Nlx1OWE1ZFx1OWFhYVx1''@;'; put 'put ''OWFhY1x1OWFhZVx1OWFhZlx1OWFiMlx1OWFiNFx1OWFiNVx1OWFiNlx1OWFiOVx1OWFiYlx1OWFiZVx1OWFiZlx1OWFjMVx1OWFjM1x1OWFjNlx1OWFjOFx1OWFjZVx1OWFkMFx1OWFkMlx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkYlx1OWFkY1x1OWFlMFx1OWFlNFx1OWFlNVx1OWFlN1x1OWFl''@;'; put 'put ''OVx1OWFlY1x1OWFmMlx1OWFmM1x1OWFmNVx1OWFmOVx1OWFmYVx1OWFmZFx1OWFmZiIsNF0sWyI4ZmVhYTEiLCJcdTliMDRcdTliMDVcdTliMDhcdTliMDlcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTJcdTliMTZcdTliMTlcdTliMWJcdTliMWNcdTliMjBcdTliMjZcdTli''@;'; put 'put ''MmJcdTliMmRcdTliMzNcdTliMzRcdTliMzVcdTliMzdcdTliMzlcdTliM2FcdTliM2RcdTliNDhcdTliNGJcdTliNGNcdTliNTVcdTliNTZcdTliNTdcdTliNWJcdTliNWVcdTliNjFcdTliNjNcdTliNjVcdTliNjZcdTliNjhcdTliNmEiLDQsIlx1OWI3M1x1OWI3NVx1OWI3N1x1OWI3OFx1''@;'; put 'put ''OWI3OVx1OWI3Zlx1OWI4MFx1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4ZFx1OWI4Zlx1OWI5MFx1OWI5NFx1OWI5YVx1OWI5ZFx1OWI5ZVx1OWJhNlx1OWJhN1x1OWJhOVx1OWJhY1x1OWJiMFx1OWJiMVx1OWJiMlx1OWJiN1x1OWJiOFx1OWJiYlx1OWJi''@;'; put 'put ''Y1x1OWJiZVx1OWJiZlx1OWJjMVx1OWJjN1x1OWJjOFx1OWJjZVx1OWJkMFx1OWJkN1x1OWJkOFx1OWJkZFx1OWJkZlx1OWJlNVx1OWJlN1x1OWJlYVx1OWJlYlx1OWJlZlx1OWJmM1x1OWJmN1x1OWJmOCJdLFsiOGZlYmExIiwiXHU5YmY5XHU5YmZhXHU5YmZkXHU5YmZmXHU5YzAwXHU5YzAy''@;'; put 'put ''XHU5YzBiXHU5YzBmXHU5YzExXHU5YzE2XHU5YzE4XHU5YzE5XHU5YzFhXHU5YzFjXHU5YzFlXHU5YzIyXHU5YzIzXHU5YzI2Iiw0LCJcdTljMzFcdTljMzVcdTljMzZcdTljMzdcdTljM2RcdTljNDFcdTljNDNcdTljNDRcdTljNDVcdTljNDlcdTljNGFcdTljNGVcdTljNGZcdTljNTBcdTlj''@;'; put 'put ''NTNcdTljNTRcdTljNTZcdTljNThcdTljNWJcdTljNWRcdTljNWVcdTljNWZcdTljNjNcdTljNjlcdTljNmFcdTljNWNcdTljNmJcdTljNjhcdTljNmVcdTljNzBcdTljNzJcdTljNzVcdTljNzdcdTljN2JcdTljZTZcdTljZjJcdTljZjdcdTljZjlcdTlkMGJcdTlkMDJcdTlkMTFcdTlkMTdc''@;'; put 'put ''dTlkMThcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMmZcdTlkMzBcdTlkMzJcdTlkMzNcdTlkMzRcdTlkM2FcdTlkM2NcdTlkNDVcdTlkM2RcdTlkNDJcdTlkNDNcdTlkNDdcdTlkNGFcdTlkNTNcdTlkNTRcdTlkNWZcdTlkNjNcdTlkNjJcdTlkNjVcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNzBcdTlk''@;'; put 'put ''NzZcdTlkNzdcdTlkN2IiXSxbIjhmZWNhMSIsIlx1OWQ3Y1x1OWQ3ZVx1OWQ4M1x1OWQ4NFx1OWQ4Nlx1OWQ4YVx1OWQ4ZFx1OWQ4ZVx1OWQ5Mlx1OWQ5M1x1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWRhMVx1OWRhYVx1OWRhY1x1OWRhZVx1OWRiMVx1OWRiNVx1OWRiOVx1OWRiY1x1OWRi''@;'; put 'put ''Zlx1OWRjM1x1OWRjN1x1OWRjOVx1OWRjYVx1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkYVx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlNVx1OWRlN1x1OWRlOVx1OWRlYlx1OWRlZVx1OWRmMFx1OWRmM1x1OWRmNFx1OWRmZVx1OWUwYVx1OWUwMlx1OWUwN1x1OWUwZVx1OWUxMFx1OWUxMVx1''@;'; put 'put ''OWUxMlx1OWUxNVx1OWUxNlx1OWUxOVx1OWUxY1x1OWUxZFx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU4MFx1OWU4Mlx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4N1x1OWU4ZVx1OWU4Zlx1OWU5Nlx1OWU5OFx1OWU5Ylx1OWU5ZVx1OWVhNFx1OWVhOFx1OWVhY1x1OWVhZVx1OWVhZlx1OWViMFx1OWVi''@;'; put 'put ''M1x1OWViNFx1OWViNVx1OWVjNlx1OWVjOFx1OWVjYlx1OWVkNVx1OWVkZlx1OWVlNFx1OWVlN1x1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmNSJdLFsiOGZlZGExIiwiXHU5ZWY4XHU5ZWZmXHU5ZjAyXHU5ZjAzXHU5ZjA5XHU5ZjBmXHU5ZjEwXHU5ZjExXHU5ZjEy''@;'; put 'put ''XHU5ZjE0XHU5ZjE2XHU5ZjE3XHU5ZjE5XHU5ZjFhXHU5ZjFiXHU5ZjFmXHU5ZjIyXHU5ZjI2XHU5ZjJhXHU5ZjJiXHU5ZjJmXHU5ZjMxXHU5ZjMyXHU5ZjM0XHU5ZjM3XHU5ZjM5XHU5ZjNhXHU5ZjNjXHU5ZjNkXHU5ZjNmXHU5ZjQxXHU5ZjQzIiw0LCJcdTlmNTNcdTlmNTVcdTlmNTZcdTlm''@;'; put 'put ''NTdcdTlmNThcdTlmNWFcdTlmNWRcdTlmNWVcdTlmNjhcdTlmNjlcdTlmNmQiLDQsIlx1OWY3M1x1OWY3NVx1OWY3YVx1OWY3ZFx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5NFx1OWY5Nlx1OWY5N1x1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNSJdXScpfSw5OTEyOTp1ZT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sidUNoYXJzIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1OCwyNzYsMjg0LDMwMCwzMjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYs''@;'; put 'put ''NTk0LDYxMCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2NSw4NDUyLDg0NTQsODQ1OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2''@;'; put 'put ''LDg3MzEsODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMyMiw5MzcyLDk1NDgsOTU4OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1''@;'; put 'put ''LDk3MzgsOTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEzLDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjkyLDEyMzEyLDEyMzE5LDEyMzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUw''@;'; put 'put ''LDEyOTY0LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEzMjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0ODE2LDE0OTY0LDE1MTgzLDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3''@;'; put 'put ''NjIzLDE3OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAxLDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIwLDE5NzM4LDE5ODg3LDQwODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3''@;'; put 'put ''LDU5NDQzLDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYzNzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0MDQyLDY1MDc0LDY1MDkzLDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSwiZ2JDaGFy''@;'; put 'put ''cyI6WzAsMzYsMzgsNDUsNTAsODEsODksOTUsOTYsMTAwLDEwMywxMDQsMTA1LDEwOSwxMjYsMTMzLDE0OCwxNzIsMTc1LDE3OSwyMDgsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzNDEsNDI4LDQ0Myw1NDQsNTQ1LDU1OCw3NDEsNzQyLDc0OSw3NTAsODA1LDgxOSw4MjAsNzky''@;'; put 'put ''Miw3OTI0LDc5MjUsNzkyNyw3OTM0LDc5NDMsNzk0NCw3OTQ1LDc5NTAsODA2Miw4MTQ4LDgxNDksODE1Miw4MTY0LDgxNzQsODIzNiw4MjQwLDgyNjIsODI2NCw4Mzc0LDgzODAsODM4MSw4Mzg0LDgzODgsODM5MCw4MzkyLDgzOTMsODM5NCw4Mzk2LDg0MDEsODQwNiw4NDE2LDg0MTksODQy''@;'; put 'put ''NCw4NDM3LDg0MzksODQ0NSw4NDgyLDg0ODUsODQ5Niw4NTIxLDg2MDMsODkzNiw4OTQ2LDkwNDYsOTA1MCw5MDYzLDkwNjYsOTA3Niw5MDkyLDkxMDAsOTEwOCw5MTExLDkxMTMsOTEzMSw5MTYyLDkxNjQsOTIxOCw5MjE5LDExMzI5LDExMzMxLDExMzM0LDExMzM2LDExMzQ2LDExMzYxLDEx''@;'; put 'put ''MzYzLDExMzY2LDExMzcwLDExMzcyLDExMzc1LDExMzg5LDExNjgyLDExNjg2LDExNjg3LDExNjkyLDExNjk0LDExNzE0LDExNzE2LDExNzIzLDExNzI1LDExNzMwLDExNzM2LDExOTgyLDExOTg5LDEyMTAyLDEyMzM2LDEyMzQ4LDEyMzUwLDEyMzg0LDEyMzkzLDEyMzk1LDEyMzk3LDEyNTEw''@;'; put 'put ''LDEyNTUzLDEyODUxLDEyOTYyLDEyOTczLDEzNzM4LDEzODIzLDEzOTE5LDEzOTMzLDE0MDgwLDE0Mjk4LDE0NTg1LDE0Njk4LDE1NTgzLDE1ODQ3LDE2MzE4LDE2NDM0LDE2NDM4LDE2NDgxLDE2NzI5LDE3MTAyLDE3MTIyLDE3MzE1LDE3MzIwLDE3NDAyLDE3NDE4LDE3ODU5LDE3OTA5LDE3''@;'; put 'put ''OTExLDE3OTE1LDE3OTE2LDE3OTM2LDE3OTM5LDE3OTYxLDE4NjY0LDE4NzAzLDE4ODE0LDE4OTYyLDE5MDQzLDMzNDY5LDMzNDcwLDMzNDcxLDMzNDg0LDMzNDg1LDMzNDkwLDMzNDk3LDMzNTAxLDMzNTA1LDMzNTEzLDMzNTIwLDMzNTM2LDMzNTUwLDM3ODQ1LDM3OTIxLDM3OTQ4LDM4MDI5''@;'; put 'put ''LDM4MDM4LDM4MDY0LDM4MDY1LDM4MDY2LDM4MDY5LDM4MDc1LDM4MDc2LDM4MDc4LDM5MTA4LDM5MTA5LDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MjY1LDM5Mzk0LDE4OTAwMF19Jyl9LDU1OTE0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siYTE0MCIs''@;'; put 'put ''Ilx1ZTRjNiIsNjJdLFsiYTE4MCIsIlx1ZTUwNSIsMzJdLFsiYTI0MCIsIlx1ZTUyNiIsNjJdLFsiYTI4MCIsIlx1ZTU2NSIsMzJdLFsiYTJhYiIsIlx1ZTc2NiIsNV0sWyJhMmUzIiwiXHUyMGFjXHVlNzZkIl0sWyJhMmVmIiwiXHVlNzZlXHVlNzZmIl0sWyJhMmZkIiwiXHVlNzcwXHVlNzcx''@;'; put 'put ''Il0sWyJhMzQwIiwiXHVlNTg2Iiw2Ml0sWyJhMzgwIiwiXHVlNWM1IiwzMSwiXHUzMDAwIl0sWyJhNDQwIiwiXHVlNWU2Iiw2Ml0sWyJhNDgwIiwiXHVlNjI1IiwzMl0sWyJhNGY0IiwiXHVlNzcyIiwxMF0sWyJhNTQwIiwiXHVlNjQ2Iiw2Ml0sWyJhNTgwIiwiXHVlNjg1IiwzMl0sWyJhNWY3''@;'; put 'put ''IiwiXHVlNzdkIiw3XSxbImE2NDAiLCJcdWU2YTYiLDYyXSxbImE2ODAiLCJcdWU2ZTUiLDMyXSxbImE2YjkiLCJcdWU3ODUiLDddLFsiYTZkOSIsIlx1ZTc4ZCIsNl0sWyJhNmVjIiwiXHVlNzk0XHVlNzk1Il0sWyJhNmYzIiwiXHVlNzk2Il0sWyJhNmY2IiwiXHVlNzk3Iiw4XSxbImE3NDAi''@;'; put 'put ''LCJcdWU3MDYiLDYyXSxbImE3ODAiLCJcdWU3NDUiLDMyXSxbImE3YzIiLCJcdWU3YTAiLDE0XSxbImE3ZjIiLCJcdWU3YWYiLDEyXSxbImE4OTYiLCJcdWU3YmMiLDEwXSxbImE4YmMiLCJcdWU3YzciXSxbImE4YmYiLCJcdTAxZjkiXSxbImE4YzEiLCJcdWU3YzlcdWU3Y2FcdWU3Y2JcdWU3''@;'; put 'put ''Y2MiXSxbImE4ZWEiLCJcdWU3Y2QiLDIwXSxbImE5NTgiLCJcdWU3ZTIiXSxbImE5NWIiLCJcdWU3ZTMiXSxbImE5NWQiLCJcdWU3ZTRcdWU3ZTVcdWU3ZTYiXSxbImE5ODkiLCJcdTMwM2VcdTJmZjAiLDExXSxbImE5OTciLCJcdWU3ZjQiLDEyXSxbImE5ZjAiLCJcdWU4MDEiLDE0XSxbImFh''@;'; put 'put ''YTEiLCJcdWUwMDAiLDkzXSxbImFiYTEiLCJcdWUwNWUiLDkzXSxbImFjYTEiLCJcdWUwYmMiLDkzXSxbImFkYTEiLCJcdWUxMWEiLDkzXSxbImFlYTEiLCJcdWUxNzgiLDkzXSxbImFmYTEiLCJcdWUxZDYiLDkzXSxbImQ3ZmEiLCJcdWU4MTAiLDRdLFsiZjhhMSIsIlx1ZTIzNCIsOTNdLFsi''@;'; put 'put ''ZjlhMSIsIlx1ZTI5MiIsOTNdLFsiZmFhMSIsIlx1ZTJmMCIsOTNdLFsiZmJhMSIsIlx1ZTM0ZSIsOTNdLFsiZmNhMSIsIlx1ZTNhYyIsOTNdLFsiZmRhMSIsIlx1ZTQwYSIsOTNdLFsiZmU1MCIsIlx1MmU4MVx1ZTgxNlx1ZTgxN1x1ZTgxOFx1MmU4NFx1MzQ3M1x1MzQ0N1x1MmU4OFx1MmU4''@;'; put 'put ''Ylx1ZTgxZVx1MzU5ZVx1MzYxYVx1MzYwZVx1MmU4Y1x1MmU5N1x1Mzk2ZVx1MzkxOFx1ZTgyNlx1MzljZlx1MzlkZlx1M2E3M1x1MzlkMFx1ZTgyYlx1ZTgyY1x1M2I0ZVx1M2M2ZVx1M2NlMFx1MmVhN1x1ZTgzMVx1ZTgzMlx1MmVhYVx1NDA1Nlx1NDE1Zlx1MmVhZVx1NDMzN1x1MmViM1x1''@;'; put 'put ''MmViNlx1MmViN1x1ZTgzYlx1NDNiMVx1NDNhY1x1MmViYlx1NDNkZFx1NDRkNlx1NDY2MVx1NDY0Y1x1ZTg0MyJdLFsiZmU4MCIsIlx1NDcyM1x1NDcyOVx1NDc3Y1x1NDc4ZFx1MmVjYVx1NDk0N1x1NDk3YVx1NDk3ZFx1NDk4Mlx1NDk4M1x1NDk4NVx1NDk4Nlx1NDk5Zlx1NDk5Ylx1NDli''@;'; put 'put ''N1x1NDliNlx1ZTg1NFx1ZTg1NVx1NGNhM1x1NGM5Zlx1NGNhMFx1NGNhMVx1NGM3N1x1NGNhMlx1NGQxMyIsNiwiXHU0ZGFlXHVlODY0XHVlNDY4Iiw5M11dJyl9LDQwNjc5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyOF0sWyJh''@;'; put 'put ''MSIsIlx1ZmY2MSIsNjJdLFsiODE0MCIsIlx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRk''@;'; put 'put ''XHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZm''@;'; put 'put ''MGJcdWZmMGRceGIxXHhkNyJdLFsiODE4MCIsIlx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVm''@;'; put 'put ''ZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiODFiOCIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1''@;'; put 'put ''MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiODFjOCIsIlx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiODFkYSIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIz''@;'; put 'put ''NVx1MjIyYlx1MjIyYyJdLFsiODFmMCIsIlx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbIjgxZmMiLCJcdTI1ZWYiXSxbIjgyNGYiLCJcdWZmMTAiLDldLFsiODI2MCIsIlx1ZmYyMSIsMjVdLFsiODI4MSIsIlx1ZmY0MSIsMjVdLFsiODI5ZiIsIlx1''@;'; put 'put ''MzA0MSIsODJdLFsiODM0MCIsIlx1MzBhMSIsNjJdLFsiODM4MCIsIlx1MzBlMCIsMjJdLFsiODM5ZiIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyI4M2JmIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbIjg0NDAiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiODQ3MCIsIlx1''@;'; put 'put ''MDQzMCIsNSwiXHUwNDUxXHUwNDM2Iiw3XSxbIjg0ODAiLCJcdTA0M2UiLDE3XSxbIjg0OWYiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNc''@;'; put 'put ''dTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDIiXSxbIjg3NDAiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiODc1ZiIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1''@;'; put 'put ''MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiODc3ZSIsIlx1MzM3YiJdLFsiODc4MCIsIlx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJh''@;'; put 'put ''NCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyI4ODlmIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2''@;'; put 'put ''MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3''@;'; put 'put ''XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3''@;'; put 'put ''ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUw''@;'; put 'put ''XHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyI4OTQwIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1''@;'; put 'put ''NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRl''@;'; put 'put ''XHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2Il0sWyI4OTgwIiwiXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2''@;'; put 'put ''ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3Mzhi''@;'; put 'put ''XHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0''@;'; put 'put ''ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIy''@;'; put 'put ''XHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2''@;'; put 'put ''MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyI4YTQwIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4''@;'; put 'put ''XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4''@;'; put 'put ''OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiIl0sWyI4YTgwIiwiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3''@;'; put 'put ''XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1''@;'; put 'put ''MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3''@;'; put 'put ''XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1''@;'; put 'put ''NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNh''@;'; put 'put ''XHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0sWyI4YjQwIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0''@;'; put 'put ''ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNk''@;'; put 'put ''XHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxIl0sWyI4YjgwIiwiXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3''@;'; put 'put ''Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2''@;'; put 'put ''XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5''@;'; put 'put ''YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdm''@;'; put 'put ''XHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0''@;'; put 'put ''ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyI4YzQwIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2''@;'; put 'put ''XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3''@;'; put 'put ''ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4Il0sWyI4YzgwIiwiXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0''@;'; put 'put ''XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3''@;'; put 'put ''ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRl''@;'; put 'put ''XHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0''@;'; put 'put ''ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5''@;'; put 'put ''XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyI4ZDQwIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2''@;'; put 'put ''NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThm''@;'; put 'put ''XHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkIl0sWyI4ZDgwIiwiXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4''@;'; put 'put ''YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4''@;'; put 'put ''XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1''@;'; put 'put ''MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4''@;'; put 'put ''XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3''@;'; put 'put ''YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyI4ZTQwIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYz''@;'; put 'put ''XHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1''@;'; put 'put ''YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyIl0sWyI4ZTgwIiwiXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2''@;'; put 'put ''XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4''@;'; put 'put ''MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUw''@;'; put 'put ''XHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5''@;'; put 'put ''MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAw''@;'; put 'put ''XHU1NmRhXHU1M2NlXHU1NDY4Il0sWyI4ZjQwIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5''@;'; put 'put ''MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYw''@;'; put 'put ''XHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzIl0sWyI4ZjgwIiwiXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2''@;'; put 'put ''NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4''@;'; put 'put ''XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2''@;'; put 'put ''ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2''@;'; put 'put ''XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1''@;'; put 'put ''NjMxXHU1N2Y0XHU5OGZlIl0sWyI5MDQwIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIw''@;'; put 'put ''XHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3''@;'; put 'put ''NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4Il0sWyI5MDgwIiwiXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0''@;'; put 'put ''XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1''@;'; put 'put ''MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5''@;'; put 'put ''XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3''@;'; put 'put ''YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdm''@;'; put 'put ''XHU3YmFkXHU3ZGRhIl0sWyI5MTQwIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3''@;'; put 'put ''Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFh''@;'; put 'put ''XHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiIl0sWyI5MTgwIiwiXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3''@;'; put 'put ''ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5''@;'; put 'put ''XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2''@;'; put 'put ''MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJl''@;'; put 'put ''XHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4''@;'; put 'put ''NmY4XHU1M2VhIl0sWyI5MjQwIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUx''@;'; put 'put ''XHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3''@;'; put 'put ''NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0Il0sWyI5MjgwIiwiXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4''@;'; put 'put ''XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2''@;'; put 'put ''NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODlj''@;'; put 'put ''XHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0''@;'; put 'put ''ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0''@;'; put 'put ''XHU5MDEzIl0sWyI5MzQwIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1''@;'; put 'put ''ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZk''@;'; put 'put ''XHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjIl0sWyI5MzgwIiwiXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2''@;'; put 'put ''OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2''@;'; put 'put ''XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2''@;'; put 'put ''YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1''@;'; put 'put ''XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1''@;'; put 'put ''MTY1Il0sWyI5NDQwIiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEy''@;'; put 'put ''XHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2''@;'; put 'put ''NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1Il0sWyI5NDgwIiwiXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVh''@;'; put 'put ''XHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1''@;'; put 'put ''MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4''@;'; put 'put ''XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2''@;'; put 'put ''Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3Zjhl''@;'; put 'put ''Il0sWyI5NTQwIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2''@;'; put 'put ''ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4''@;'; put 'put ''XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3Il0sWyI5NTgwIiwiXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2''@;'; put 'put ''NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2''@;'; put 'put ''XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1''@;'; put 'put ''MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJi''@;'; put 'put ''XHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0s''@;'; put 'put ''WyI5NjQwIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4''@;'; put 'put ''XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1''@;'; put 'put ''MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2Il0sWyI5NjgwIiwiXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2Zl''@;'; put 'put ''XHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3''@;'; put 'put ''YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRk''@;'; put 'put ''XHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1''@;'; put 'put ''NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyI5''@;'; put 'put ''NzQwIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4''@;'; put 'put ''NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5''@;'; put 'put ''XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyIl0sWyI5NzgwIiwiXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0''@;'; put 'put ''ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5''@;'; put 'put ''XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4''@;'; put 'put ''MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3''@;'; put 'put ''XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyI5ODQw''@;'; put 'put ''IiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZk''@;'; put 'put ''XHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyI5ODlmIiwiXHU1ZjBjXHU0''@;'; put 'put ''ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2''@;'; put 'put ''XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0''@;'; put 'put ''ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUw''@;'; put 'put ''XHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyI5OTQwIiwiXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1''@;'; put 'put ''MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1''@;'; put 'put ''XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkIl0sWyI5OTgwIiwiXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1''@;'; put 'put ''MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFj''@;'; put 'put ''XHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1''@;'; put 'put ''MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVl''@;'; put 'put ''XHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1''@;'; put 'put ''NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyI5YTQwIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5''@;'; put 'put ''XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1''@;'; put 'put ''NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4Il0sWyI5YTgwIiwiXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2''@;'; put 'put ''XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1''@;'; put 'put ''NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0''@;'; put 'put ''XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1''@;'; put 'put ''OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1''@;'; put 'put ''XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyI5YjQwIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1''@;'; put 'put ''YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQw''@;'; put 'put ''XHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwIl0sWyI5YjgwIiwiXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1''@;'; put 'put ''YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1Yjcx''@;'; put 'put ''XHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1''@;'; put 'put ''ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5''@;'; put 'put ''XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1''@;'; put 'put ''ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyI5YzQwIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAz''@;'; put 'put ''XHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1''@;'; put 'put ''ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwIl0sWyI5YzgwIiwiXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1''@;'; put 'put ''XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2''@;'; put 'put ''MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBl''@;'; put 'put ''XHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2''@;'; put 'put ''MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZj''@;'; put 'put ''XHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyI5ZDQwIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2''@;'; put 'put ''MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4''@;'; put 'put ''XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiIl0sWyI5ZDgwIiwiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2''@;'; put 'put ''M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3''@;'; put 'put ''XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2''@;'; put 'put ''NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUw''@;'; put 'put ''XHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2''@;'; put 'put ''Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyI5ZTQwIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJl''@;'; put 'put ''XHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2''@;'; put 'put ''N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlIl0sWyI5ZTgwIiwiXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhm''@;'; put 'put ''XHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2''@;'; put 'put ''OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYx''@;'; put 'put ''XHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2''@;'; put 'put ''YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4''@;'; put 'put ''XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyI5ZjQwIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2''@;'; put 'put ''YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2Yjll''@;'; put 'put ''XHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmIl0sWyI5ZjgwIiwiXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2''@;'; put 'put ''YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2Vh''@;'; put 'put ''XHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2''@;'; put 'put ''ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQz''@;'; put 'put ''XHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2''@;'; put 'put ''ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJlMDQwIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2''@;'; put 'put ''XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3''@;'; put 'put ''MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkIl0sWyJlMDgwIiwiXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2''@;'; put 'put ''XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3''@;'; put 'put ''MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQy''@;'; put 'put ''XHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3''@;'; put 'put ''M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhi''@;'; put 'put ''XHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMTQwIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3''@;'; put 'put ''NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEz''@;'; put 'put ''XHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmIl0sWyJlMTgwIiwiXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3''@;'; put 'put ''NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3Njgz''@;'; put 'put ''XHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3''@;'; put 'put ''NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2Ji''@;'; put 'put ''XHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3''@;'; put 'put ''OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlMjQwIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThh''@;'; put 'put ''XHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3''@;'; put 'put ''YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwIl0sWyJlMjgwIiwiXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1''@;'; put 'put ''XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3''@;'; put 'put ''Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzEx''@;'; put 'put ''XHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3''@;'; put 'put ''YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2Vm''@;'; put 'put ''XHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlMzQwIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3''@;'; put 'put ''ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBh''@;'; put 'put ''XHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3Il0sWyJlMzgwIiwiXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3''@;'; put 'put ''ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1''@;'; put 'put ''XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3''@;'; put 'put ''ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYy''@;'; put 'put ''XHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4''@;'; put 'put ''MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJlNDQwIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVm''@;'; put 'put ''XHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4''@;'; put 'put ''MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0Il0sWyJlNDgwIiwiXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4Mjky''@;'; put 'put ''XHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4''@;'; put 'put ''MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2Zk''@;'; put 'put ''XHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4''@;'; put 'put ''NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZj''@;'; put 'put ''XHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlNTQwIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4''@;'; put 'put ''NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFh''@;'; put 'put ''XHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjIl0sWyJlNTgwIiwiXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4''@;'; put 'put ''NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2Fm''@;'; put 'put ''XHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4''@;'; put 'put ''ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJm''@;'; put 'put ''XHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4''@;'; put 'put ''OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlNjQwIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJm''@;'; put 'put ''XHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4''@;'; put 'put ''YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3Il0sWyJlNjgwIiwiXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUx''@;'; put 'put ''XHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4''@;'; put 'put ''YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2Fk''@;'; put 'put ''XHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4''@;'; put 'put ''ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1''@;'; put 'put ''XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlNzQwIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4''@;'; put 'put ''ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBj''@;'; put 'put ''XHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjIl0sWyJlNzgwIiwiXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4''@;'; put 'put ''ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4''@;'; put 'put ''XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5''@;'; put 'put ''MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1''@;'; put 'put ''XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5''@;'; put 'put ''MmZhXHU5MzQ0XHU5MzJlIl0sWyJlODQwIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2Mz''@;'; put 'put ''XHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5''@;'; put 'put ''NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5Il0sWyJlODgwIiwiXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNj''@;'; put 'put ''XHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5''@;'; put 'put ''NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0''@;'; put 'put ''XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5''@;'; put 'put ''NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZi''@;'; put 'put ''XHU5ODZmXHU5ODcwIl0sWyJlOTQwIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5''@;'; put 'put ''OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZi''@;'; put 'put ''XHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzIl0sWyJlOTgwIiwiXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5''@;'; put 'put ''YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4''@;'; put 'put ''XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5''@;'; put 'put ''YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3''@;'; put 'put ''XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5''@;'; put 'put ''ZDQ2XHU5ZDQ4Il0sWyJlYTQwIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMy''@;'; put 'put ''XHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5''@;'; put 'put ''ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmIl0sWyJlYTgwIiwiXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNl''@;'; put 'put ''XHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJlZDQwIiwiXHU3ZThhXHU4OTFjXHU5''@;'; put 'put ''MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcw''@;'; put 'put ''XHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1''@;'; put 'put ''NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmIl0sWyJlZDgwIiwiXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3''@;'; put 'put ''XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2''@;'; put 'put ''NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0''@;'; put 'put ''XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2''@;'; put 'put ''ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJlZTQwIiwiXHU3MmJlXHU3MzI0XHVmYTE2''@;'; put 'put ''XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3''@;'; put 'put ''ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3''@;'; put 'put ''XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5Il0sWyJlZTgwIiwiXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4''@;'; put 'put ''ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3''@;'; put 'put ''XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5''@;'; put 'put ''NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJi''@;'; put 'put ''XHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJlZWVmIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbImYwNDAiLCJcdWUwMDAiLDYyXSxbImYwODAiLCJcdWUwM2YiLDEyNF0sWyJmMTQwIiwiXHVlMGJjIiw2Ml0sWyJmMTgwIiwiXHVlMGZi''@;'; put 'put ''IiwxMjRdLFsiZjI0MCIsIlx1ZTE3OCIsNjJdLFsiZjI4MCIsIlx1ZTFiNyIsMTI0XSxbImYzNDAiLCJcdWUyMzQiLDYyXSxbImYzODAiLCJcdWUyNzMiLDEyNF0sWyJmNDQwIiwiXHVlMmYwIiw2Ml0sWyJmNDgwIiwiXHVlMzJmIiwxMjRdLFsiZjU0MCIsIlx1ZTNhYyIsNjJdLFsiZjU4MCIs''@;'; put 'put ''Ilx1ZTNlYiIsMTI0XSxbImY2NDAiLCJcdWU0NjgiLDYyXSxbImY2ODAiLCJcdWU0YTciLDEyNF0sWyJmNzQwIiwiXHVlNTI0Iiw2Ml0sWyJmNzgwIiwiXHVlNTYzIiwxMjRdLFsiZjg0MCIsIlx1ZTVlMCIsNjJdLFsiZjg4MCIsIlx1ZTYxZiIsMTI0XSxbImY5NDAiLCJcdWU2OWMiXSxbImZh''@;'; put 'put ''NDAiLCJcdTIxNzAiLDksIlx1MjE2MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZj''@;'; put 'put ''XHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhIl0sWyJmYTgwIiwiXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1''@;'; put 'put ''MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUz''@;'; put 'put ''XHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2''@;'; put 'put ''MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5''@;'; put 'put ''XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2''@;'; put 'put ''YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmIl0sWyJmYjQwIiwiXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3''@;'; put 'put ''XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3''@;'; put 'put ''NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5Il0sWyJmYjgwIiwiXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3''@;'; put 'put ''XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4''@;'; put 'put ''ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRl''@;'; put 'put ''XHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5''@;'; put 'put ''MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1''@;'; put 'put ''XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5Il0sWyJmYzQwIiwiXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl1dJyl9LDE1NTc5OnVlPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQu''@;'; put 'put ''MS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6''@;'; put 'put ''ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMt''@;'; put 'put ''MjU2LWNmYiJ9Jyl9fSx1ZT0+e3VlKHVlLnM9MzYwOTUpfV0pOw=='';'; 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.df27a246540ea5ee-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHsyNDA1MDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMTg4ODMpLHQoNTQ5NDApLHQoMzkyNzEpLHQoNTI0NDQpLHQoMjYyMDMpLHQoMTU2MjYp''@;'; put 'put ''LHQoODgwMjUpLHQoNTY0NDIpLHQoMzI4OTkpLHQoNjYzNzQpLHQoNDI0NiksdCgyMjkxMyksdCgxMDc0MyksdCg2NTg0NiksdCg5MzUzKSx0KDk2OTM1KSx0KDkyNTY4KTt2YXIgZHQ9dCg4MzgzOCk7d2luZG93Lmdsb2JhbD13aW5kb3csd2luZG93Lmdsb2JhbC5CdWZmZXI9d2luZG93Lmds''@;'; put 'put ''b2JhbC5CdWZmZXJ8fGR0LkJ1ZmZlcix3aW5kb3cucHJvY2Vzcz17dmVyc2lvbjoiIn19LDEzOTgxOihjLGwpPT57InVzZSBzdHJpY3QiO2wuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWYoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQteH0sbC50b0J5dGVBcnJheT1mdW5j''@;'; put 'put ''dGlvbiBwKGcpe3ZhciBELFQsRj1mKGcpLHg9RlswXSx3PUZbMV0sQz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCx3KSksST0wLE09dz4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChUKV08PDE4fG5bZy5jaGFyQ29kZUF0''@;'; put 'put ''KFQrMSldPDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxDW0krK109RD4+MTYmMjU1LENbSSsrXT1EPj44JjI1NSxDW0krK109MjU1JkQ7cmV0dXJuIDI9PT13JiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltnLmNoYXJDb2RlQXQoVCsxKV0+PjQs''@;'; put 'put ''Q1tJKytdPTI1NSZEKSwxPT09dyYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixDW0krK109RD4+OCYyNTUsQ1tJKytdPTI1NSZEKSxDfSxsLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRShnKXtmb3IodmFy''@;'; put 'put ''IEQsRj1nLmxlbmd0aCx4PUYlMyx3PVtdLEM9MTYzODMsST0wLE09Ri14O0k8TTtJKz1DKXcucHVzaChtKGcsSSxJK0M+TT9NOkkrQykpO3JldHVybiAxPT09eD93LnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZ3LnB1c2godFsoRD0oZ1tGLTJdPDw4KStn''@;'; put 'put ''W0YtMV0pPj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9Iiksdy5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''MDEyMzQ1Njc4OSsvIixhPTA7YTw2NDsrK2EpdFthXT1zW2FdLG5bcy5jaGFyQ29kZUF0KGEpXT1hO2Z1bmN0aW9uIGYoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFy''@;'; put 'put ''IEY9Zy5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24gbShnLEQsRil7Zm9yKHZhciB3PVtdLEM9RDtDPEY7Qys9Myl3''@;'; put 'put ''LnB1c2goZCgoZ1tDXTw8MTYmMTY3MTE2ODApKyhnW0MrMV08PDgmNjUyODApKygyNTUmZ1tDKzJdKSkpO3JldHVybiB3LmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSw4MzgzODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7bC5CdWZmZXI9aSxsLlNsb3dCdWZmZXI9ZnVuY3Rpb24gQyhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGwu''@;'; put 'put ''SU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBmKGgpe2lmKGg+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgscixvKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4g''@;'; put 'put ''UmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbShoKX1yZXR1cm4gdihoLHIsbyl9ZnVuY3Rpb24gdihoLHIsbyl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0Vu''@;'; put 'put ''Y29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIG89MHxJKGgscikseT1mKG8pLFA9eS53cml0ZShoLHIpO3JldHVybiBQIT09byYmKHk9eS5zbGljZSgwLFApKSx5fShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gRChoKXtpZihfdChoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihfdChoLEFycmF5QnVmZmVyKXx8aCYmX3QoaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2Yg''@;'; put 'put ''U2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoX3QoaCxTaGFyZWRBcnJheUJ1ZmZlcil8fGgmJl90KGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBt''@;'; put 'put ''dXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgeT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPXkmJnkhPT1oKXJldHVybiBpLmZyb20oeSxyLG8pO3ZhciBQPWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHx3''@;'; put 'put ''KGgubGVuZ3RoKSxvPWYocik7cmV0dXJuIDA9PT1vLmxlbmd0aHx8aC5jb3B5KG8sMCwwLHIpLG99cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fG1uKGgubGVuZ3RoKT9mKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXko''@;'; put 'put ''aC5kYXRhKT9nKGguZGF0YSk6dm9pZCAwfShoKTtpZihQKXJldHVybiBQO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV0oInN0cmluZyIpLHIsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVu''@;'; put 'put ''Y3Rpb24gcChoKXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAi''@;'; put 'put ''c2l6ZSInKX1mdW5jdGlvbiBtKGgpe3JldHVybiBwKGgpLGYoaDwwPzA6MHx3KGgpKX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHx3KGgubGVuZ3RoKSxvPWYocikseT0wO3k8cjt5Kz0xKW9beV09MjU1JmhbeV07cmV0dXJuIG99ZnVuY3Rpb24gRihoLHIsbyl7aWYo''@;'; put 'put ''cjwwfHxoLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKG98fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMn''@;'; put 'put ''KTt2YXIgeTtyZXR1cm4geT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1vP25ldyBVaW50OEFycmF5KGgpOnZvaWQgMD09PW8/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsbyksT2JqZWN0LnNldFByb3RvdHlwZU9mKHksaS5wcm90b3R5cGUpLHl9ZnVuY3Rpb24gdyhoKXtp''@;'; put 'put ''ZihoPj1hKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBJKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5s''@;'; put 'put ''ZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxfdChoLEFycmF5QnVmZmVyKSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1''@;'; put 'put ''ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7dmFyIG89aC5sZW5ndGgseT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF5JiYwPT09bylyZXR1cm4gMDtmb3IodmFyIFA9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2Fz''@;'; put 'put ''ZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbztjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBybihoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm87Y2FzZSJoZXgiOnJldHVybiBvPj4+MTtjYXNl''@;'; put 'put ''ImJhc2U2NCI6cmV0dXJuIGRuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKFApcmV0dXJuIHk/LTE6cm4oaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksUD0hMH19ZnVuY3Rpb24gTShoLHIsbyl7dmFyIHk9ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8''@;'; put 'put ''fCgodm9pZCAwPT09b3x8bz50aGlzLmxlbmd0aCkmJihvPXRoaXMubGVuZ3RoKSxvPD0wKXx8KG8+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLG8pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6''@;'; put 'put ''cmV0dXJuIHEodGhpcyxyLG8pO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixvKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBmdCh0aGlzLHIsbyk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsbyk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUi''@;'; put 'put ''OmNhc2UidXRmLTE2bGUiOnJldHVybiBidCh0aGlzLHIsbyk7ZGVmYXVsdDppZih5KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSx5PSEwfX1mdW5jdGlvbiBUKGgscixvKXt2YXIgeT1oW3JdO2hbcl09aFtvXSxoW29d''@;'; put 'put ''PXl9ZnVuY3Rpb24gYihoLHIsbyx5LFApe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG8/KHk9byxvPTApOm8+MjE0NzQ4MzY0Nz9vPTIxNDc0ODM2NDc6bzwtMjE0NzQ4MzY0OCYmKG89LTIxNDc0ODM2NDgpLG1uKG89K28pJiYobz1QPzA6aC5sZW5ndGgt''@;'; put 'put ''MSksbzwwJiYobz1oLmxlbmd0aCtvKSxvPj1oLmxlbmd0aCl7aWYoUClyZXR1cm4tMTtvPWgubGVuZ3RoLTF9ZWxzZSBpZihvPDApe2lmKCFQKXJldHVybi0xO289MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLHkpKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5n''@;'; put 'put ''dGg/LTE6TChoLHIsbyx5LFApO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1A/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixvKTpVaW50OEFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5sYXN0SW5kZXhPZi5jYWxsKGgscixvKTpMKGgsW3JdLG8seSxQKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBMKGgscixvLHksUCl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsanQ9ci5sZW5ndGg7aWYodm9pZCAw''@;'; put 'put ''IT09eSYmKCJ1Y3MyIj09PSh5PVN0cmluZyh5KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXl8fCJ1dGYxNmxlIj09PXl8fCJ1dGYtMTZsZSI9PT15KSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixqdC89MixvLz0yfWZ1bmN0aW9uIF8oUXQsYW4pe3Jl''@;'; put 'put ''dHVybiAxPT09Sz9RdFthbl06UXQucmVhZFVJbnQxNkJFKGFuKkspfWlmKFApe3ZhciBRPS0xO2ZvcihIPW87SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PWp0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0t''@;'; put 'put ''MX1lbHNlIGZvcihvK2p0PiQmJihvPSQtanQpLEg9bztIPj0wO0gtLSl7Zm9yKHZhciBpdD0hMCx6dD0wO3p0PGp0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsbyx5KXtvPU51bWJlcihvKXx8''@;'; put 'put ''MDt2YXIgUD1oLmxlbmd0aC1vO3k/KHk9TnVtYmVyKHkpKT5QJiYoeT1QKTp5PVA7dmFyIEs9ci5sZW5ndGg7eT5LLzImJih5PUsvMik7Zm9yKHZhciAkPTA7JDx5OysrJCl7dmFyIGp0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYobW4oanQpKXJldHVybiAkO2hbbyskXT1qdH1y''@;'; put 'put ''ZXR1cm4gJH1mdW5jdGlvbiBaKGgscixvLHkpe3JldHVybiBzbihybihyLGgubGVuZ3RoLW8pLGgsbyx5KX1mdW5jdGlvbiBudChoLHIsbyx5KXtyZXR1cm4gc24oZnVuY3Rpb24geG4oaCl7Zm9yKHZhciByPVtdLG89MDtvPGgubGVuZ3RoOysrbylyLnB1c2goMjU1JmguY2hhckNvZGVBdChv''@;'; put 'put ''KSk7cmV0dXJuIHJ9KHIpLGgsbyx5KX1mdW5jdGlvbiB0dChoLHIsbyx5KXtyZXR1cm4gc24oZG4ociksaCxvLHkpfWZ1bmN0aW9uIHl0KGgscixvLHkpe3JldHVybiBzbihmdW5jdGlvbiBxdChoLHIpe2Zvcih2YXIgbyx5LEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCl5''@;'; put 'put ''PShvPWguY2hhckNvZGVBdCgkKSk+PjgsSy5wdXNoKG8lMjU2KSxLLnB1c2goeSk7cmV0dXJuIEt9KHIsaC5sZW5ndGgtbyksaCxvLHkpfWZ1bmN0aW9uIG10KGgscixvKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZvPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsbykpfWZ1bmN0aW9u''@;'; put 'put ''IHEoaCxyLG8pe289TWF0aC5taW4oaC5sZW5ndGgsbyk7Zm9yKHZhciB5PVtdLFA9cjtQPG87KXt2YXIgXyxILFEsaXQsSz1oW1BdLCQ9bnVsbCxqdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKFAranQ8PW8pc3dpdGNoKGp0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MjoxMjg9PSgxOTImKF89aFtQKzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFtQKzJdLDEyOD09KDE5MiYoXz1oW1ArMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxp''@;'; put 'put ''dD41NzM0MykmJigkPWl0KTticmVhaztjYXNlIDQ6SD1oW1ArMl0sUT1oW1ArM10sMTI4PT0oMTkyJihfPWhbUCsxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0''@;'; put 'put ''KX1udWxsPT09JD8oJD02NTUzMyxqdD0xKTokPjY1NTM1JiYoeS5wdXNoKCgkLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCkseS5wdXNoKCQpLFArPWp0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlLmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIG89IiIseT0wO3k8cjspbys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZSh5LHkrPVgpKTtyZXR1cm4gb30oeSl9bC5rTWF4TGVuZ3RoPWEsIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgp''@;'; put 'put ''e3RyeXt2YXIgaD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4g''@;'; put 'put ''VXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZm''@;'; put 'put ''ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixvKXty''@;'; put 'put ''ZXR1cm4gdihoLHIsbyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsbyl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLG8pe3JldHVybiBw''@;'; put 'put ''KGgpLGg8PTA/ZihoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbz9mKGgpLmZpbGwocixvKTpmKGgpLmZpbGwocik6ZihoKX0oaCxyLG8pfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiBtKGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4gbSho''@;'; put 'put ''KX0saS5pc0J1ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1yLl9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixvKXtpZihfdChyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxfdChvLFVp''@;'; put 'put ''bnQ4QXJyYXkpJiYobz1pLmZyb20obyxvLm9mZnNldCxvLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFy''@;'; put 'put ''cmF5Jyk7aWYocj09PW8pcmV0dXJuIDA7Zm9yKHZhciB5PXIubGVuZ3RoLFA9by5sZW5ndGgsSz0wLCQ9TWF0aC5taW4oeSxQKTtLPCQ7KytLKWlmKHJbS10hPT1vW0tdKXt5PXJbS10sUD1vW0tdO2JyZWFrfXJldHVybiB5PFA/LTE6UDx5PzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIp''@;'; put 'put ''e3N3aXRjaChTdHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2''@;'; put 'put ''bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbihyLG8pe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IGkuYWxsb2MoMCk7dmFyIHk7aWYodm9pZCAwPT09bylmb3Iobz0wLHk9MDt5PHIubGVuZ3RoOysreSlvKz1yW3ldLmxlbmd0aDt2YXIgUD1pLmFsbG9jVW5zYWZlKG8pLEs9MDtmb3IoeT0wO3k8ci5sZW5ndGg7Kyt5KXt2YXIgJD1yW3ldO2lmKF90KCQsVWludDhBcnJheSkpSyskLmxlbmd0''@;'; put 'put ''aD5QLmxlbmd0aD9pLmZyb20oJCkuY29weShQLEspOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFAsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHko''@;'; put 'put ''UCxLKX1LKz0kLmxlbmd0aH1yZXR1cm4gUH0saS5ieXRlTGVuZ3RoPUksaS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBi''@;'; put 'put ''ZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIG89MDtvPHI7bys9MilUKHRoaXMsbyxvKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXpl''@;'; put 'put ''IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBvPTA7bzxyO28rPTQpVCh0aGlzLG8sbyszKSxUKHRoaXMsbysxLG8rMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIG89MDtvPHI7bys9OClUKHRoaXMsbyxvKzcpLFQodGhpcyxvKzEsbys2KSxUKHRoaXMsbysyLG8rNSksVCh0aGlzLG8rMyxvKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50''@;'; put 'put ''b0xvY2FsZVN0cmluZz1pLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9u''@;'; put 'put ''KHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLG89bC5JTlNQRUNUX01B''@;'; put 'put ''WF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsbykucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5vJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmluc3BlY3QpLGkucHJv''@;'; put 'put ''dG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixvLHksUCxLKXtpZihfdChyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2Yg''@;'; put 'put ''dHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByKTtpZih2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT15JiYoeT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PVAmJihQPTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxvPDB8fHk+ci5sZW5ndGh8''@;'; put 'put ''fFA8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoUD49SyYmbz49eSlyZXR1cm4gMDtpZihQPj1LKXJldHVybi0xO2lmKG8+PXkpcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShLPj4+PTApLShQPj4+''@;'; put 'put ''PTApLGp0PSh5Pj4+PTApLShvPj4+PTApLF89TWF0aC5taW4oJCxqdCksSD10aGlzLnNsaWNlKFAsSyksUT1yLnNsaWNlKG8seSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxqdD1RW2l0XTticmVha31yZXR1cm4gJDxqdD8tMTpqdDwkPzE6MH0saS5wcm90b3R5''@;'; put 'put ''cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixvLHkpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHIsbyx5KX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLG8seSl7cmV0dXJuIGIodGhpcyxyLG8seSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHIsbyx5KXtyZXR1''@;'; put 'put ''cm4gYih0aGlzLHIsbyx5LCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocixvLHksUCl7aWYodm9pZCAwPT09bylQPSJ1dGY4Iix5PXRoaXMubGVuZ3RoLG89MDtlbHNlIGlmKHZvaWQgMD09PXkmJiJzdHJpbmciPT10eXBlb2YgbylQPW8seT10aGlzLmxlbmd0aCxvPTA7ZWxzZXtp''@;'; put 'put ''ZighaXNGaW5pdGUobykpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO28+Pj49MCxpc0Zpbml0ZSh5KT8oeT4+Pj0wLHZvaWQgMD09PVAmJihQPSJ1dGY4IikpOihQPXkseT12''@;'; put 'put ''b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLW87aWYoKHZvaWQgMD09PXl8fHk+SykmJih5PUspLHIubGVuZ3RoPjAmJih5PDB8fG88MCl8fG8+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7UHx8KFA9InV0''@;'; put 'put ''ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2goUCl7Y2FzZSJoZXgiOnJldHVybiBVKHRoaXMscixvLHkpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLG8seSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQodGhpcyxyLG8seSk7''@;'; put 'put ''Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsbyx5KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixvLHkpO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1Ap''@;'; put 'put ''O1A9KCIiK1ApLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlvbiBWKGgscixvKXt2''@;'; put 'put ''YXIgeT0iIjtvPU1hdGgubWluKGgubGVuZ3RoLG8pO2Zvcih2YXIgUD1yO1A8bzsrK1ApeSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFtQXSk7cmV0dXJuIHl9ZnVuY3Rpb24gZnQoaCxyLG8pe3ZhciB5PSIiO289TWF0aC5taW4oaC5sZW5ndGgsbyk7Zm9yKHZhciBQPXI7UDxvOysrUCl5''@;'; put 'put ''Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbUF0pO3JldHVybiB5fWZ1bmN0aW9uIGR0KGgscixvKXt2YXIgeT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghb3x8bzwwfHxvPnkpJiYobz15KTtmb3IodmFyIFA9IiIsSz1yO0s8bzsrK0spUCs9VG5baFtLXV07cmV0dXJuIFB9ZnVuY3Rpb24g''@;'; put 'put ''YnQoaCxyLG8pe2Zvcih2YXIgeT1oLnNsaWNlKHIsbyksUD0iIixLPTA7Szx5Lmxlbmd0aC0xO0srPTIpUCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W0tdKzI1Nip5W0srMV0pO3JldHVybiBQfWZ1bmN0aW9uIE90KGgscixvKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi''@;'; put 'put ''b2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPm8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsbyx5LFAsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+UHx8cjxLKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihvK3k+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIp''@;'; put 'put ''fWZ1bmN0aW9uIFl0KGgscixvLHksUCxLKXtpZihvK3k+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gb24oaCxyLG8seSxQKXtyZXR1cm4g''@;'; put 'put ''cj0rcixvPj4+PTAsUHx8WXQoaCwwLG8sNCksZS53cml0ZShoLHIsbyx5LDIzLDQpLG8rNH1mdW5jdGlvbiBHdChoLHIsbyx5LFApe3JldHVybiByPStyLG8+Pj49MCxQfHxZdChoLDAsbyw4KSxlLndyaXRlKGgscixvLHksNTIsOCksbys4fWkucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHIs''@;'; put 'put ''byl7dmFyIHk9dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz15KTwwJiYocj0wKTpyPnkmJihyPXkpLChvPXZvaWQgMD09PW8/eTp+fm8pPDA/KG8rPXkpPDAmJihvPTApOm8+eSYmKG89eSksbzxyJiYobz1yKTt2YXIgUD10aGlzLnN1YmFycmF5KHIsbyk7cmV0dXJuIE9iamVjdC5zZXRQcm90''@;'; put 'put ''b3R5cGVPZihQLGkucHJvdG90eXBlKSxQfSxpLnByb3RvdHlwZS5yZWFkVWludExFPWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixvLHkpe3I+Pj49MCxvPj4+PTAseXx8T3QocixvLHRoaXMubGVuZ3RoKTtmb3IodmFyIFA9dGhpc1tyXSxLPTEsJD0wOysrJDxvJiYoSyo9MjU2''@;'; put 'put ''KTspUCs9dGhpc1tyKyRdKks7cmV0dXJuIFB9LGkucHJvdG90eXBlLnJlYWRVaW50QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLG8seSl7cj4+Pj0wLG8+Pj49MCx5fHxPdChyLG8sdGhpcy5sZW5ndGgpO2Zvcih2YXIgUD10aGlzW3IrLS1vXSxLPTE7bz4wJiYoSyo9MjU2''@;'; put 'put ''KTspUCs9dGhpc1tyKy0tb10qSztyZXR1cm4gUH0saS5wcm90b3R5cGUucmVhZFVpbnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWludDE2TEU9aS5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+''@;'; put 'put ''Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0aGlzW3JdfHRoaXNb''@;'; put 'put ''cisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJvdG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tyXSsodGhp''@;'; put 'put ''c1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHIsbyx5KXtyPj4+PTAsbz4+Pj0wLHl8fE90KHIsbyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBQPXRoaXNbcl0sSz0xLCQ9MDsrKyQ8byYmKEsqPTI1Nik7KVArPXRoaXNbcisk''@;'; put 'put ''XSpLO3JldHVybiBQPj0oSyo9MTI4KSYmKFAtPU1hdGgucG93KDIsOCpvKSksUH0saS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsbyx5KXtyPj4+PTAsbz4+Pj0wLHl8fE90KHIsbyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBQPW8sSz0xLCQ9dGhpc1tyKy0tUF07UD4wJiYoSyo9MjU2''@;'; put 'put ''KTspJCs9dGhpc1tyKy0tUF0qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRoLnBvdygyLDgqbykpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigyNTUtdGhpc1tyXSsx''@;'; put 'put ''KTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLG8pe3I+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciB5PXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZ5PzQyOTQ5MDE3NjB8eTp5fSxpLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihyLG8pe3I+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciB5PXRoaXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZ5PzQyOTQ5MDE3NjB8eTp5fSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3Qociw0LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNbciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisxXTw8MTZ8dGhpc1ty''@;'; put 'put ''KzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+''@;'; put 'put ''Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGkucHJvdG90eXBlLnJl''@;'; put 'put ''YWREb3VibGVCRT1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3Qociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLG8seSxQKXtyPStyLG8+Pj49MCx5''@;'; put 'put ''Pj4+PTAsUHx8TnQodGhpcyxyLG8seSxNYXRoLnBvdygyLDgqeSktMSwwKTt2YXIgJD0xLGp0PTA7Zm9yKHRoaXNbb109MjU1JnI7KytqdDx5JiYoJCo9MjU2KTspdGhpc1tvK2p0XT1yLyQmMjU1O3JldHVybiBvK3l9LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJvdG90eXBlLndyaXRl''@;'; put 'put ''VUludEJFPWZ1bmN0aW9uKHIsbyx5LFApe3I9K3Isbz4+Pj0wLHk+Pj49MCxQfHxOdCh0aGlzLHIsbyx5LE1hdGgucG93KDIsOCp5KS0xLDApO3ZhciAkPXktMSxqdD0xO2Zvcih0aGlzW28rJF09MjU1JnI7LS0kPj0wJiYoanQqPTI1Nik7KXRoaXNbbyskXT1yL2p0JjI1NTtyZXR1cm4gbyt5''@;'; put 'put ''fSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24ocixvLHkpe3JldHVybiByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbywxLDI1NSwwKSx0aGlzW29dPTI1NSZyLG8rMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1pLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiw2NTUzNSwwKSx0aGlzW29dPTI1NSZyLHRoaXNbbysxXT1yPj4+OCxvKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihyLG8seSl7cmV0dXJuIHI9K3Isbz4+Pj0wLHl8fE50KHRoaXMscixvLDIsNjU1MzUsMCksdGhpc1tvXT1yPj4+OCx0aGlzW28rMV09MjU1JnIsbysyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24ocixvLHkpe3JldHVy''@;'; put 'put ''biByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbyw0LDQyOTQ5NjcyOTUsMCksdGhpc1tvKzNdPXI+Pj4yNCx0aGlzW28rMl09cj4+PjE2LHRoaXNbbysxXT1yPj4+OCx0aGlzW29dPTI1NSZyLG8rNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sNCw0Mjk0OTY3Mjk1LDApLHRoaXNbb109cj4+PjI0LHRoaXNbbysxXT1yPj4+MTYsdGhpc1tvKzJdPXI+Pj44LHRoaXNbbyszXT0yNTUmcixvKzR9LGkucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rp''@;'; put 'put ''b24ocixvLHksUCl7aWYocj0rcixvPj4+PTAsIVApe3ZhciBLPU1hdGgucG93KDIsOCp5LTEpO050KHRoaXMscixvLHksSy0xLC1LKX12YXIgJD0wLGp0PTEsXz0wO2Zvcih0aGlzW29dPTI1NSZyOysrJDx5JiYoanQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW28rJC0xXSYmKF89MSks''@;'; put 'put ''dGhpc1tvKyRdPShyL2p0fDApLV8mMjU1O3JldHVybiBvK3l9LGkucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24ocixvLHksUCl7aWYocj0rcixvPj4+PTAsIVApe3ZhciBLPU1hdGgucG93KDIsOCp5LTEpO050KHRoaXMscixvLHksSy0xLC1LKX12YXIgJD15LTEsanQ9MSxfPTA7Zm9y''@;'; put 'put ''KHRoaXNbbyskXT0yNTUmcjstLSQ+PTAmJihqdCo9MjU2KTspcjwwJiYwPT09XyYmMCE9PXRoaXNbbyskKzFdJiYoXz0xKSx0aGlzW28rJF09KHIvanR8MCktXyYyNTU7cmV0dXJuIG8reX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAs''@;'; put 'put ''eXx8TnQodGhpcyxyLG8sMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlzW29dPTI1NSZyLG8rMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiwzMjc2NywtMzI3NjgpLHRoaXNbb109MjU1''@;'; put 'put ''JnIsdGhpc1tvKzFdPXI+Pj44LG8rMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiwzMjc2NywtMzI3NjgpLHRoaXNbb109cj4+PjgsdGhpc1tvKzFdPTI1NSZyLG8rMn0saS5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVJbnQzMkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW29dPTI1NSZyLHRoaXNbbysxXT1yPj4+OCx0aGlzW28rMl09cj4+PjE2LHRoaXNbbyszXT1yPj4+MjQsbys0fSxpLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixvLHkpe3JldHVybiByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbyw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbb109cj4+PjI0LHRoaXNbbysxXT1yPj4+MTYsdGhpc1tvKzJdPXI+Pj44LHRo''@;'; put 'put ''aXNbbyszXT0yNTUmcixvKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihyLG8seSl7cmV0dXJuIG9uKHRoaXMscixvLCEwLHkpfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixvLHkpe3JldHVybiBvbih0aGlzLHIsbywhMSx5KX0saS5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLG8seSl7cmV0dXJuIEd0KHRoaXMscixvLCEwLHkpfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gR3QodGhpcyxyLG8sITEseSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixvLHksUCl7aWYoIWku''@;'; put 'put ''aXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoeXx8KHk9MCksIVAmJjAhPT1QJiYoUD10aGlzLmxlbmd0aCksbz49ci5sZW5ndGgmJihvPXIubGVuZ3RoKSxvfHwobz0wKSxQPjAmJlA8eSYmKFA9eSksUD09PXl8fDA9PT1y''@;'; put 'put ''Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHk8MHx8eT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKFA8MCl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtQPnRoaXMubGVuZ3RoJiYoUD10aGlzLmxlbmd0aCksci5sZW5ndGgtbzxQLXkmJihQPXIubGVuZ3RoLW8reSk7dmFyIEs9UC15O3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKG8seSxQKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkoeSxQKSxvKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsbyx5LFApe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBvPyhQPW8sbz0wLHk9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgeSYmKFA9eSx5PXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1QJiYic3RyaW5nIiE9dHlwZW9mIFApdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgUCYmIWkuaXNFbmNvZGluZyhQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1ApO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1QJiZLPDEyOHx8ImxhdGluMSI9PT1QKSYmKHI9Syl9fWVs''@;'; put 'put ''c2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYobzwwfHx0aGlzLmxlbmd0aDxvfHx0aGlzLmxlbmd0aDx5KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih5PD1vKXJldHVybiB0aGlzO3Zh''@;'; put 'put ''ciAkO2lmKG8+Pj49MCx5PXZvaWQgMD09PXk/dGhpcy5sZW5ndGg6eT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPW87JDx5OysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIganQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLFApLF89anQubGVuZ3RoO2lmKDA9PT1fKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8eS1vOysrJCl0aGlzWyQrb109anRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHVuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gcm4oaCxyKXtyPXJ8''@;'; put 'put ''fDEvMDtmb3IodmFyIG8seT1oLmxlbmd0aCxQPW51bGwsSz1bXSwkPTA7JDx5OysrJCl7aWYoKG89aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmbzw1NzM0NCl7aWYoIVApe2lmKG8+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigkKzE9PT15KXsoci09''@;'; put 'put ''Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9UD1vO2NvbnRpbnVlfWlmKG88NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSxQPW87Y29udGludWV9bz02NTUzNisoUC01NTI5Njw8MTB8by01NjMyMCl9ZWxzZSBQJiYoci09Myk+LTEmJksucHVzaCgyMzks''@;'; put 'put ''MTkxLDE4OSk7aWYoUD1udWxsLG88MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1c2gobyl9ZWxzZSBpZihvPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChvPj42fDE5Miw2MyZvfDEyOCl9ZWxzZSBpZihvPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1c2gobz4+MTJ8MjI0''@;'; put 'put ''LG8+PjYmNjN8MTI4LDYzJm98MTI4KX1lbHNle2lmKCEobzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChvPj4xOHwyNDAsbz4+MTImNjN8MTI4LG8+PjYmNjN8MTI4LDYzJm98MTI4KX19cmV0dXJuIEt9ZnVu''@;'; put 'put ''Y3Rpb24gZG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24geW4oaCl7aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZSh1biwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofShoKSl9ZnVuY3Rpb24g''@;'; put 'put ''c24oaCxyLG8seSl7Zm9yKHZhciBQPTA7UDx5JiYhKFArbz49ci5sZW5ndGh8fFA+PWgubGVuZ3RoKTsrK1ApcltQK29dPWhbUF07cmV0dXJuIFB9ZnVuY3Rpb24gX3QoaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3ImJm51bGwhPWguY29u''@;'; put 'put ''c3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0aW9uIG1uKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxvPTA7bzwxNjsrK28pZm9yKHZhciB5PTE2Km8sUD0w''@;'; put 'put ''O1A8MTY7KytQKXJbeStQXT1oW29dK2hbUF07cmV0dXJuIHJ9KCl9LDIyMDIwOihjLGwpPT57bC5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsYSl7dmFyIHUsZixpPTgqYS1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyxtPWU/YS0xOjAsRT1lPy0xOjEsZz10W24rbV07Zm9yKG0rPUUsdT1nJigx''@;'; put 'put ''PDwtZCktMSxnPj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24rbV0sbSs9RSxkLT04KTtmb3IoZj11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7Zj0yNTYqZit0W24rbV0sbSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBmP05hTjoxLzAqKGc/LTE6MSk7''@;'; put 'put ''Zis9TWF0aC5wb3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmYqTWF0aC5wb3coMix1LXMpfSxsLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsYSx1KXt2YXIgZixpLHYscD04KnUtYS0xLGQ9KDE8PHApLTEsbT1kPj4xLEU9MjM9PT1hP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6''@;'; put 'put ''MCxnPXM/MDp1LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGY9ZCk6KGY9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1mKSk8MSYmKGYt''@;'; put 'put ''LSx2Kj0yKSwobis9ZittPj0xP0UvdjpFKk1hdGgucG93KDIsMS1tKSkqdj49MiYmKGYrKyx2Lz0yKSxmK20+PWQ/KGk9MCxmPWQpOmYrbT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsYSksZis9bSk6KGk9bipNYXRoLnBvdygyLG0tMSkqTWF0aC5wb3coMixhKSxmPTApKTthPj04O3RbZStn''@;'; put 'put ''XT0yNTUmaSxnKz1ELGkvPTI1NixhLT04KTtmb3IoZj1mPDxhfGkscCs9YTtwPjA7dFtlK2ddPTI1NSZmLGcrPUQsZi89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDk2OTM1OigpPT57InVzZSBzdHJpY3QiO2NvbnN0IGM9Z2xvYmFsVGhpcztmdW5jdGlvbiBsKFMpe3JldHVybihjLl9f''@;'; put 'put ''Wm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIikrU31jb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdT1PYmplY3QuY3JlYXRlLGY9QXJyYXkucHJvdG90eXBlLnNs''@;'; put 'put ''aWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLHY9InJlbW92ZUV2ZW50TGlzdGVuZXIiLHA9bChpKSxkPWwodiksbT0idHJ1ZSIsRT0iZmFsc2UiLGc9bCgiIik7ZnVuY3Rpb24gRChTLFIpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChTLFIpfWZ1bmN0aW9uIEYoUyxSLEIsTyxOKXtyZXR1cm4g''@;'; put 'put ''Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKFMsUixCLE8sTil9Y29uc3QgeD1sLHc9dHlwZW9mIHdpbmRvdzwidSIsQz13P3dpbmRvdzp2b2lkIDAsST13JiZDfHxnbG9iYWxUaGlzLE09InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gVChTLFIpe2ZvcihsZXQgQj1TLmxlbmd0aC0x''@;'; put 'put ''O0I+PTA7Qi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBTW0JdJiYoU1tCXT1EKFNbQl0sUisiXyIrQikpO3JldHVybiBTfWZ1bmN0aW9uIEwoUyl7cmV0dXJuIVN8fCExIT09Uy53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgUy5nZXQmJnR5cGVvZiBTLnNldD4idSIpfWNvbnN0IFU9dHlw''@;'; put 'put ''ZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFo9ISgibnciaW4gSSkmJnR5cGVvZiBJLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT1JLnByb2Nlc3MudG9TdHJpbmcoKSxudD0hWiYmIVUmJiEoIXd8fCFDLkhUTUxF''@;'; put 'put ''bGVtZW50KSx0dD10eXBlb2YgSS5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09SS5wcm9jZXNzLnRvU3RyaW5nKCkmJiFVJiYhKCF3fHwhQy5IVE1MRWxlbWVudCkseXQ9e30sbXQ9eCgiZW5hYmxlX2JlZm9yZXVubG9hZCIpLHE9ZnVuY3Rpb24oUyl7aWYoIShTPVN8fEkuZXZl''@;'; put 'put ''bnQpKXJldHVybjtsZXQgUj15dFtTLnR5cGVdO1J8fChSPXl0W1MudHlwZV09eCgiT05fUFJPUEVSVFkiK1MudHlwZSkpO2NvbnN0IEI9dGhpc3x8Uy50YXJnZXR8fEksTz1CW1JdO2xldCBOO3JldHVybiBudCYmQj09PUMmJiJlcnJvciI9PT1TLnR5cGU/KE49TyYmTy5jYWxsKHRoaXMsUy5t''@;'; put 'put ''ZXNzYWdlLFMuZmlsZW5hbWUsUy5saW5lbm8sUy5jb2xubyxTLmVycm9yKSwhMD09PU4mJlMucHJldmVudERlZmF1bHQoKSk6KE49TyYmTy5hcHBseSh0aGlzLGFyZ3VtZW50cyksImJlZm9yZXVubG9hZCI9PT1TLnR5cGUmJklbbXRdJiYic3RyaW5nIj09dHlwZW9mIE4/Uy5yZXR1cm5WYWx1''@;'; put 'put ''ZT1OOm51bGwhPU4mJiFOJiZTLnByZXZlbnREZWZhdWx0KCkpLE59O2Z1bmN0aW9uIFgoUyxSLEIpe2xldCBPPWUoUyxSKTtpZighTyYmQiYmZShCLFIpJiYoTz17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSwhT3x8IU8uY29uZmlndXJhYmxlKXJldHVybjtjb25zdCBOPXgoIm9u''@;'; put 'put ''IitSKyJwYXRjaGVkIik7aWYoUy5oYXNPd25Qcm9wZXJ0eShOKSYmU1tOXSlyZXR1cm47ZGVsZXRlIE8ud3JpdGFibGUsZGVsZXRlIE8udmFsdWU7Y29uc3QgSj1PLmdldCxvdD1PLnNldCxzdD1SLnNsaWNlKDIpO2xldCBsdD15dFtzdF07bHR8fChsdD15dFtzdF09eCgiT05fUFJPUEVSVFki''@;'; put 'put ''K3N0KSksTy5zZXQ9ZnVuY3Rpb24oU3Qpe2xldCBydD10aGlzOyFydCYmUz09PUkmJihydD1JKSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtsdF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoc3QscSksb3QmJm90LmNhbGwocnQsbnVsbCkscnRbbHRdPVN0LCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTdCYmcnQuYWRkRXZlbnRMaXN0ZW5lcihzdCxxLCExKSl9LE8uZ2V0PWZ1bmN0aW9uKCl7bGV0IFN0PXRoaXM7aWYoIVN0JiZTPT09SSYmKFN0PUkpLCFTdClyZXR1cm4gbnVsbDtjb25zdCBydD1TdFtsdF07aWYocnQpcmV0dXJuIHJ0O2lmKEope2xldCB4dD1KLmNhbGwodGhpcyk7aWYo''@;'; put 'put ''eHQpcmV0dXJuIE8uc2V0LmNhbGwodGhpcyx4dCksImZ1bmN0aW9uIj09dHlwZW9mIFN0W01dJiZTdC5yZW1vdmVBdHRyaWJ1dGUoUikseHR9cmV0dXJuIG51bGx9LHMoUyxSLE8pLFNbTl09ITB9ZnVuY3Rpb24gZXQoUyxSLEIpe2lmKFIpZm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspWChT''@;'; put 'put ''LCJvbiIrUltPXSxCKTtlbHNle2NvbnN0IE89W107Zm9yKGNvbnN0IE4gaW4gUykib24iPT1OLnNsaWNlKDAsMikmJk8ucHVzaChOKTtmb3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKylYKFMsT1tOXSxCKX19Y29uc3QgVj14KCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gZnQoUyl7Y29u''@;'; put 'put ''c3QgUj1JW1NdO2lmKCFSKXJldHVybjtJW3goUyldPVIsSVtTXT1mdW5jdGlvbigpe2NvbnN0IE49VChhcmd1bWVudHMsUyk7c3dpdGNoKE4ubGVuZ3RoKXtjYXNlIDA6dGhpc1tWXT1uZXcgUjticmVhaztjYXNlIDE6dGhpc1tWXT1uZXcgUihOWzBdKTticmVhaztjYXNlIDI6dGhpc1tWXT1u''@;'; put 'put ''ZXcgUihOWzBdLE5bMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW1ZdPW5ldyBSKE5bMF0sTlsxXSxOWzJdKTticmVhaztjYXNlIDQ6dGhpc1tWXT1uZXcgUihOWzBdLE5bMV0sTlsyXSxOWzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxPdChJ''@;'; put 'put ''W1NdLFIpO2NvbnN0IEI9bmV3IFIoZnVuY3Rpb24oKXt9KTtsZXQgTztmb3IoTyBpbiBCKSJYTUxIdHRwUmVxdWVzdCI9PT1TJiYicmVzcG9uc2VCbG9iIj09PU98fGZ1bmN0aW9uKE4peyJmdW5jdGlvbiI9PXR5cGVvZiBCW05dP0lbU10ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXNbVl1bTl0uYXBwbHkodGhpc1tWXSxhcmd1bWVudHMpfTpzKElbU10ucHJvdG90eXBlLE4se3NldDpmdW5jdGlvbihKKXsiZnVuY3Rpb24iPT10eXBlb2YgSj8odGhpc1tWXVtOXT1EKEosUysiLiIrTiksT3QodGhpc1tWXVtOXSxKKSk6dGhpc1tWXVtOXT1KfSxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpc1tWXVtOXX19KX0oTyk7Zm9yKE8gaW4gUikicHJvdG90eXBlIiE9PU8mJlIuaGFzT3duUHJvcGVydHkoTykmJihJW1NdW09dPVJbT10pfWZ1bmN0aW9uIGR0KFMsUixCKXtsZXQgTz1TO2Zvcig7TyYmIU8uaGFzT3duUHJvcGVydHkoUik7KU89YShPKTshTyYmU1tSXSYm''@;'; put 'put ''KE89Uyk7Y29uc3QgTj14KFIpO2xldCBKPW51bGw7aWYoTyYmKCEoSj1PW05dKXx8IU8uaGFzT3duUHJvcGVydHkoTikpJiYoSj1PW05dPU9bUl0sTChPJiZlKE8sUikpKSl7Y29uc3Qgc3Q9QihKLE4sUik7T1tSXT1mdW5jdGlvbigpe3JldHVybiBzdCh0aGlzLGFyZ3VtZW50cyl9LE90KE9b''@;'; put 'put ''Ul0sSil9cmV0dXJuIEp9ZnVuY3Rpb24gYnQoUyxSLEIpe2xldCBPPW51bGw7ZnVuY3Rpb24gTihKKXtjb25zdCBvdD1KLmRhdGE7cmV0dXJuIG90LmFyZ3Nbb3QuY2JJZHhdPWZ1bmN0aW9uKCl7Si5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxPLmFwcGx5KG90LnRhcmdldCxvdC5h''@;'; put 'put ''cmdzKSxKfU89ZHQoUyxSLEo9PmZ1bmN0aW9uKG90LHN0KXtjb25zdCBsdD1CKG90LHN0KTtyZXR1cm4gbHQuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBzdFtsdC5jYklkeF0/RihsdC5uYW1lLHN0W2x0LmNiSWR4XSxsdCxOKTpKLmFwcGx5KG90LHN0KX0pfWZ1bmN0aW9uIE90KFMs''@;'; put 'put ''Uil7U1t4KCJPcmlnaW5hbERlbGVnYXRlIildPVJ9bGV0IE50PSExLFl0PSExO2Z1bmN0aW9uIEd0KCl7aWYoTnQpcmV0dXJuIFl0O050PSEwO3RyeXtjb25zdCBTPUMubmF2aWdhdG9yLnVzZXJBZ2VudDsoLTEhPT1TLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Uy5pbmRleE9mKCJUcmlkZW50''@;'; put 'put ''LyIpfHwtMSE9PVMuaW5kZXhPZigiRWRnZS8iKSkmJihZdD0hMCl9Y2F0Y2h7fXJldHVybiBZdH1mdW5jdGlvbiB1bihTKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU31mdW5jdGlvbiB5bihTKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFN9bGV0IHJuPSExO2lmKHR5cGVvZiB3aW5kb3c8''@;'; put 'put ''InUiKXRyeXtjb25zdCBTPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JuPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixTLFMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixTLFMpfWNhdGNoe3JuPSExfWNv''@;'; put 'put ''bnN0IHhuPXt1c2VHOiEwfSxxdD17fSxkbj17fSxzbj1uZXcgUmVnRXhwKCJeIitnKyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksX3Q9eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gbW4oUyxSKXtjb25zdCBCPShSP1IoUyk6UykrRSxPPShSP1IoUyk6UykrbSxOPWcrQixKPWcrTztx''@;'; put 'put ''dFtTXT17fSxxdFtTXVtFXT1OLHF0W1NdW21dPUp9ZnVuY3Rpb24gVG4oUyxSLEIsTyl7Y29uc3QgTj1PJiZPLmFkZHx8aSxKPU8mJk8ucm18fHYsb3Q9TyYmTy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsc3Q9TyYmTy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsbHQ9eChOKSxT''@;'; put 'put ''dD0iLiIrTisiOiIscnQ9InByZXBlbmRMaXN0ZW5lciIseHQ9Ii4iK3J0KyI6IixEdD1mdW5jdGlvbih2dCxZLGt0KXtpZih2dC5pc1JlbW92ZWQpcmV0dXJuO2NvbnN0IEx0PXZ0LmNhbGxiYWNrO2xldCBYdDsib2JqZWN0Ij09dHlwZW9mIEx0JiZMdC5oYW5kbGVFdmVudCYmKHZ0LmNhbGxi''@;'; put 'put ''YWNrPXV0PT5MdC5oYW5kbGVFdmVudCh1dCksdnQub3JpZ2luYWxEZWxlZ2F0ZT1MdCk7dHJ5e3Z0Lmludm9rZSh2dCxZLFtrdF0pfWNhdGNoKHV0KXtYdD11dH1jb25zdCBLdD12dC5vcHRpb25zO3JldHVybiBLdCYmIm9iamVjdCI9PXR5cGVvZiBLdCYmS3Qub25jZSYmWVtKXS5jYWxsKFks''@;'; put 'put ''a3QudHlwZSx2dC5vcmlnaW5hbERlbGVnYXRlP3Z0Lm9yaWdpbmFsRGVsZWdhdGU6dnQuY2FsbGJhY2ssS3QpLFh0fTtmdW5jdGlvbiBCdCh2dCxZLGt0KXtpZighKFk9WXx8Uy5ldmVudCkpcmV0dXJuO2NvbnN0IEx0PXZ0fHxZLnRhcmdldHx8UyxYdD1MdFtxdFtZLnR5cGVdW2t0P206RV1d''@;'; put 'put ''O2lmKFh0KXtjb25zdCBLdD1bXTtpZigxPT09WHQubGVuZ3RoKXtjb25zdCB1dD1EdChYdFswXSxMdCxZKTt1dCYmS3QucHVzaCh1dCl9ZWxzZXtjb25zdCB1dD1YdC5zbGljZSgpO2ZvcihsZXQgV3Q9MDtXdDx1dC5sZW5ndGgmJighWXx8ITAhPT1ZW190XSk7V3QrKyl7Y29uc3QgSXQ9RHQo''@;'; put 'put ''dXRbV3RdLEx0LFkpO0l0JiZLdC5wdXNoKEl0KX19aWYoMT09PUt0Lmxlbmd0aCl0aHJvdyBLdFswXTtmb3IobGV0IHV0PTA7dXQ8S3QubGVuZ3RoO3V0Kyspe2NvbnN0IFd0PUt0W3V0XTtSLm5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrKCgpPT57dGhyb3cgV3R9KX19fWNvbnN0IEh0PWZ1bmN0''@;'; put 'put ''aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMSl9LHRuPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMCl9O2Z1bmN0aW9uIG5uKHZ0LFkpe2lmKCF2dClyZXR1cm4hMTtsZXQga3Q9ITA7WSYmdm9pZCAwIT09WS51c2VHJiYoa3Q9WS51c2VHKTtjb25zdCBMdD1ZJiZZLnZoO2xl''@;'; put 'put ''dCBYdD0hMDtZJiZ2b2lkIDAhPT1ZLmNoa0R1cCYmKFh0PVkuY2hrRHVwKTtsZXQgS3Q9ITE7WSYmdm9pZCAwIT09WS5ydCYmKEt0PVkucnQpO2xldCB1dD12dDtmb3IoO3V0JiYhdXQuaGFzT3duUHJvcGVydHkoTik7KXV0PWEodXQpO2lmKCF1dCYmdnRbTl0mJih1dD12dCksIXV0fHx1dFts''@;'; put 'put ''dF0pcmV0dXJuITE7Y29uc3QgV3Q9WSYmWS5ldmVudE5hbWVUb1N0cmluZyxJdD17fSxUdD11dFtsdF09dXRbTl0sZ3Q9dXRbeChKKV09dXRbSl0sUHQ9dXRbeChvdCldPXV0W290XSxlbj11dFt4KHN0KV09dXRbc3RdO2xldCBKdDtZJiZZLnByZXBlbmQmJihKdD11dFt4KFkucHJlcGVuZCld''@;'; put 'put ''PXV0W1kucHJlcGVuZF0pO2NvbnN0IFp0PWt0P2Z1bmN0aW9uKGspe2lmKCFJdC5pc0V4aXN0aW5nKXJldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsSXQuY2FwdHVyZT90bjpIdCxJdC5vcHRpb25zKX06ZnVuY3Rpb24oayl7cmV0dXJuIFR0LmNhbGwoSXQudGFyZ2V0LEl0''@;'; put 'put ''LmV2ZW50TmFtZSxrLmludm9rZSxJdC5vcHRpb25zKX0sQ3Q9a3Q/ZnVuY3Rpb24oayl7aWYoIWsuaXNSZW1vdmVkKXtjb25zdCBHPXF0W2suZXZlbnROYW1lXTtsZXQgcHQ7RyYmKHB0PUdbay5jYXB0dXJlP206RV0pO2NvbnN0IE10PXB0JiZrLnRhcmdldFtwdF07aWYoTXQpZm9yKGxldCBj''@;'; put 'put ''dD0wO2N0PE10Lmxlbmd0aDtjdCsrKWlmKE10W2N0XT09PWspe010LnNwbGljZShjdCwxKSxrLmlzUmVtb3ZlZD0hMCxrLnJlbW92ZUFib3J0TGlzdGVuZXImJihrLnJlbW92ZUFib3J0TGlzdGVuZXIoKSxrLnJlbW92ZUFib3J0TGlzdGVuZXI9bnVsbCksMD09PU10Lmxlbmd0aCYmKGsuYWxs''@;'; put 'put ''UmVtb3ZlZD0hMCxrLnRhcmdldFtwdF09bnVsbCk7YnJlYWt9fWlmKGsuYWxsUmVtb3ZlZClyZXR1cm4gZ3QuY2FsbChrLnRhcmdldCxrLmV2ZW50TmFtZSxrLmNhcHR1cmU/dG46SHQsay5vcHRpb25zKX06ZnVuY3Rpb24oayl7cmV0dXJuIGd0LmNhbGwoay50YXJnZXQsay5ldmVudE5hbWUs''@;'; put 'put ''ay5pbnZva2Usay5vcHRpb25zKX0sdm49WSYmWS5kaWZmP1kuZGlmZjpmdW5jdGlvbihrLEcpe2NvbnN0IHB0PXR5cGVvZiBHO3JldHVybiJmdW5jdGlvbiI9PT1wdCYmay5jYWxsYmFjaz09PUd8fCJvYmplY3QiPT09cHQmJmsub3JpZ2luYWxEZWxlZ2F0ZT09PUd9LHBuPVpvbmVbeCgiVU5Q''@;'; put 'put ''QVRDSEVEX0VWRU5UUyIpXSxjbj1TW3goIlBBU1NJVkVfRVZFTlRTIildLFc9ZnVuY3Rpb24oayxHLHB0LE10LGN0PSExLHd0PSExKXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBSdD10aGlzfHxTO2xldCBGdD1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEZ0PVkudHJh''@;'; put 'put ''bnNmZXJFdmVudE5hbWUoRnQpKTtsZXQgJHQ9YXJndW1lbnRzWzFdO2lmKCEkdClyZXR1cm4gay5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoWiYmInVuY2F1Z2h0RXhjZXB0aW9uIj09PUZ0KXJldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtsZXQgVXQ9ITE7aWYoImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mICR0KXtpZighJHQuaGFuZGxlRXZlbnQpcmV0dXJuIGsuYXBwbHkodGhpcyxhcmd1bWVudHMpO1V0PSEwfWlmKEx0JiYhTHQoaywkdCxSdCxhcmd1bWVudHMpKXJldHVybjtjb25zdCBFbj1ybiYmISFjbiYmLTEhPT1jbi5pbmRleE9mKEZ0KSxsbj1mdW5jdGlvbiB6KGspe2lmKCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgayYmbnVsbCE9PWspe2NvbnN0IEc9ey4uLmt9O3JldHVybiBrLnNpZ25hbCYmKEcuc2lnbmFsPWsuc2lnbmFsKSxHfXJldHVybiBrfShmdW5jdGlvbiBBdChrLEcpe3JldHVybiFybiYmIm9iamVjdCI9PXR5cGVvZiBrJiZrPyEhay5jYXB0dXJlOnJuJiZHPyJib29s''@;'; put 'put ''ZWFuIj09dHlwZW9mIGs/e2NhcHR1cmU6ayxwYXNzaXZlOiEwfTprPyJvYmplY3QiPT10eXBlb2YgayYmITEhPT1rLnBhc3NpdmU/ey4uLmsscGFzc2l2ZTohMH06azp7cGFzc2l2ZTohMH06a30oYXJndW1lbnRzWzJdLEVuKSksU249bG4/LnNpZ25hbDtpZihTbj8uYWJvcnRlZClyZXR1cm47''@;'; put 'put ''aWYocG4pZm9yKGxldCBobj0wO2huPHBuLmxlbmd0aDtobisrKWlmKEZ0PT09cG5baG5dKXJldHVybiBFbj9rLmNhbGwoUnQsRnQsJHQsbG4pOmsuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnN0IEFuPSEhbG4mJigiYm9vbGVhbiI9PXR5cGVvZiBsbnx8bG4uY2FwdHVyZSksRm49ISghbG58''@;'; put 'put ''fCJvYmplY3QiIT10eXBlb2YgbG4pJiZsbi5vbmNlLEJuPVpvbmUuY3VycmVudDtsZXQgd249cXRbRnRdO3dufHwobW4oRnQsV3QpLHduPXF0W0Z0XSk7Y29uc3QgRG49d25bQW4/bTpFXTtsZXQgSW4sT249UnRbRG5dLGJuPSExO2lmKE9uKXtpZihibj0hMCxYdClmb3IobGV0IGhuPTA7aG48''@;'; put 'put ''T24ubGVuZ3RoO2huKyspaWYodm4oT25baG5dLCR0KSlyZXR1cm59ZWxzZSBPbj1SdFtEbl09W107Y29uc3Qgam49UnQuY29uc3RydWN0b3IubmFtZSxDbj1kbltqbl07Q24mJihJbj1DbltGdF0pLElufHwoSW49am4rRysoV3Q/V3QoRnQpOkZ0KSksSXQub3B0aW9ucz1sbixGbiYmKEl0Lm9w''@;'; put 'put ''dGlvbnMub25jZT0hMSksSXQudGFyZ2V0PVJ0LEl0LmNhcHR1cmU9QW4sSXQuZXZlbnROYW1lPUZ0LEl0LmlzRXhpc3Rpbmc9Ym47Y29uc3QgUG49a3Q/eG46dm9pZCAwO1BuJiYoUG4udGFza0RhdGE9SXQpLFNuJiYoSXQub3B0aW9ucy5zaWduYWw9dm9pZCAwKTtjb25zdCBmbj1Cbi5zY2hl''@;'; put 'put ''ZHVsZUV2ZW50VGFzayhJbiwkdCxQbixwdCxNdCk7aWYoU24pe0l0Lm9wdGlvbnMuc2lnbmFsPVNuO2NvbnN0IGhuPSgpPT5mbi56b25lLmNhbmNlbFRhc2soZm4pO2suY2FsbChTbiwiYWJvcnQiLGhuLHtvbmNlOiEwfSksZm4ucmVtb3ZlQWJvcnRMaXN0ZW5lcj0oKT0+U24ucmVtb3ZlRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigiYWJvcnQiLGhuKX1yZXR1cm4gSXQudGFyZ2V0PW51bGwsUG4mJihQbi50YXNrRGF0YT1udWxsKSxGbiYmKEl0Lm9wdGlvbnMub25jZT0hMCksIXJuJiYiYm9vbGVhbiI9PXR5cGVvZiBmbi5vcHRpb25zfHwoZm4ub3B0aW9ucz1sbiksZm4udGFyZ2V0PVJ0LGZuLmNhcHR1''@;'; put 'put ''cmU9QW4sZm4uZXZlbnROYW1lPUZ0LFV0JiYoZm4ub3JpZ2luYWxEZWxlZ2F0ZT0kdCksd3Q/T24udW5zaGlmdChmbik6T24ucHVzaChmbiksY3Q/UnQ6dm9pZCAwfX07cmV0dXJuIHV0W05dPVcoVHQsU3QsWnQsQ3QsS3QpLEp0JiYodXRbcnRdPVcoSnQseHQsZnVuY3Rpb24oayl7cmV0dXJu''@;'; put 'put ''IEp0LmNhbGwoSXQudGFyZ2V0LEl0LmV2ZW50TmFtZSxrLmludm9rZSxJdC5vcHRpb25zKX0sQ3QsS3QsITApKSx1dFtKXT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShH''@;'; put 'put ''KSk7Y29uc3QgcHQ9YXJndW1lbnRzWzJdLE10PSEhcHQmJigiYm9vbGVhbiI9PXR5cGVvZiBwdHx8cHQuY2FwdHVyZSksY3Q9YXJndW1lbnRzWzFdO2lmKCFjdClyZXR1cm4gZ3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKEx0JiYhTHQoZ3QsY3Qsayxhcmd1bWVudHMpKXJldHVybjtjb25z''@;'; put 'put ''dCB3dD1xdFtHXTtsZXQgUnQ7d3QmJihSdD13dFtNdD9tOkVdKTtjb25zdCBGdD1SdCYma1tSdF07aWYoRnQpZm9yKGxldCAkdD0wOyR0PEZ0Lmxlbmd0aDskdCsrKXtjb25zdCBVdD1GdFskdF07aWYodm4oVXQsY3QpKXJldHVybiBGdC5zcGxpY2UoJHQsMSksVXQuaXNSZW1vdmVkPSEwLDAh''@;'; put 'put ''PT1GdC5sZW5ndGh8fChVdC5hbGxSZW1vdmVkPSEwLGtbUnRdPW51bGwsTXR8fCJzdHJpbmciIT10eXBlb2YgRyl8fChrW2crIk9OX1BST1BFUlRZIitHXT1udWxsKSxVdC56b25lLmNhbmNlbFRhc2soVXQpLEt0P2s6dm9pZCAwfXJldHVybiBndC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHV0''@;'; put 'put ''W290XT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9W10sTXQ9aChrLFd0P1d0KEcpOkcpO2ZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKyl7''@;'; put 'put ''Y29uc3Qgd3Q9TXRbY3RdO3B0LnB1c2god3Qub3JpZ2luYWxEZWxlZ2F0ZT93dC5vcmlnaW5hbERlbGVnYXRlOnd0LmNhbGxiYWNrKX1yZXR1cm4gcHR9LHV0W3N0XT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7WSYmWS50cmFuc2ZlckV2ZW50''@;'; put 'put ''TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9cXRbR107aWYocHQpe2NvbnN0IHd0PWtbcHRbRV1dLFJ0PWtbcHRbbV1dO2lmKHd0KXtjb25zdCBGdD13dC5zbGljZSgpO2ZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNb''@;'; put 'put ''Sl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX1pZihSdCl7Y29uc3QgRnQ9UnQuc2xpY2UoKTtmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3RoOyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTt0aGlzW0pdLmNh''@;'; put 'put ''bGwodGhpcyxHLFV0Lm9yaWdpbmFsRGVsZWdhdGU/VXQub3JpZ2luYWxEZWxlZ2F0ZTpVdC5jYWxsYmFjayxVdC5vcHRpb25zKX19fX1lbHNle2NvbnN0IHB0PU9iamVjdC5rZXlzKGspO2ZvcihsZXQgTXQ9MDtNdDxwdC5sZW5ndGg7TXQrKyl7Y29uc3Qgd3Q9c24uZXhlYyhwdFtNdF0pO2xl''@;'; put 'put ''dCBSdD13dCYmd3RbMV07UnQmJiJyZW1vdmVMaXN0ZW5lciIhPT1SdCYmdGhpc1tzdF0uY2FsbCh0aGlzLFJ0KX10aGlzW3N0XS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoS3QpcmV0dXJuIHRoaXN9LE90KHV0W05dLFR0KSxPdCh1dFtKXSxndCksZW4mJk90KHV0W3N0XSxlbiks''@;'; put 'put ''UHQmJk90KHV0W290XSxQdCksITB9bGV0IFZ0PVtdO2ZvcihsZXQgdnQ9MDt2dDxCLmxlbmd0aDt2dCsrKVZ0W3Z0XT1ubihCW3Z0XSxPKTtyZXR1cm4gVnR9ZnVuY3Rpb24gaChTLFIpe2lmKCFSKXtjb25zdCBKPVtdO2ZvcihsZXQgb3QgaW4gUyl7Y29uc3Qgc3Q9c24uZXhlYyhvdCk7bGV0''@;'; put 'put ''IGx0PXN0JiZzdFsxXTtpZihsdCYmKCFSfHxsdD09PVIpKXtjb25zdCBTdD1TW290XTtpZihTdClmb3IobGV0IHJ0PTA7cnQ8U3QubGVuZ3RoO3J0KyspSi5wdXNoKFN0W3J0XSl9fXJldHVybiBKfWxldCBCPXF0W1JdO0J8fChtbihSKSxCPXF0W1JdKTtjb25zdCBPPVNbQltFXV0sTj1TW0Jb''@;'; put 'put ''bV1dO3JldHVybiBPP04/Ty5jb25jYXQoTik6Ty5zbGljZSgpOk4/Ti5zbGljZSgpOltdfWZ1bmN0aW9uIHIoUyxSKXtjb25zdCBCPVMuRXZlbnQ7QiYmQi5wcm90b3R5cGUmJlIucGF0Y2hNZXRob2QoQi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsTz0+ZnVuY3Rpb24o''@;'; put 'put ''TixKKXtOW190XT0hMCxPJiZPLmFwcGx5KE4sSil9KX1jb25zdCB5PXgoInpvbmVUYXNrIik7ZnVuY3Rpb24gUChTLFIsQixPKXtsZXQgTj1udWxsLEo9bnVsbDtCKz1PO2NvbnN0IG90PXt9O2Z1bmN0aW9uIHN0KFN0KXtjb25zdCBydD1TdC5kYXRhO3J0LmFyZ3NbMF09ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gU3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y29uc3QgeHQ9Ti5hcHBseShTLHJ0LmFyZ3MpO3JldHVybiB5bih4dCk/cnQuaGFuZGxlSWQ9eHQ6KHJ0LmhhbmRsZT14dCxydC5pc1JlZnJlc2hhYmxlPXVuKHh0LnJlZnJlc2gpKSxTdH1mdW5jdGlvbiBsdChTdCl7Y29u''@;'; put 'put ''c3R7aGFuZGxlOnJ0LGhhbmRsZUlkOnh0fT1TdC5kYXRhO3JldHVybiBKLmNhbGwoUyxydD8/eHQpfU49ZHQoUyxSKz1PLFN0PT5mdW5jdGlvbihydCx4dCl7aWYodW4oeHRbMF0pKXtjb25zdCBEdD17aXNSZWZyZXNoYWJsZTohMSxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1PLGRlbGF5OiJU''@;'; put 'put ''aW1lb3V0Ij09PU98fCJJbnRlcnZhbCI9PT1PP3h0WzFdfHwwOnZvaWQgMCxhcmdzOnh0fSxCdD14dFswXTt4dFswXT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gQnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7Y29uc3R7aGFuZGxlOmt0LGhhbmRsZUlkOkx0LGlzUGVyaW9kaWM6WHQs''@;'; put 'put ''aXNSZWZyZXNoYWJsZTpLdH09RHQ7IVh0JiYhS3QmJihMdD9kZWxldGUgb3RbTHRdOmt0JiYoa3RbeV09bnVsbCkpfX07Y29uc3QgSHQ9RihSLHh0WzBdLER0LHN0LGx0KTtpZighSHQpcmV0dXJuIEh0O2NvbnN0e2hhbmRsZUlkOnRuLGhhbmRsZTpubixpc1JlZnJlc2hhYmxlOlZ0LGlzUGVy''@;'; put 'put ''aW9kaWM6dnR9PUh0LmRhdGE7aWYodG4pb3RbdG5dPUh0O2Vsc2UgaWYobm4mJihublt5XT1IdCxWdCYmIXZ0KSl7Y29uc3QgWT1ubi5yZWZyZXNoO25uLnJlZnJlc2g9ZnVuY3Rpb24oKXtjb25zdHt6b25lOmt0LHN0YXRlOkx0fT1IdDtyZXR1cm4ibm90U2NoZWR1bGVkIj09PUx0PyhIdC5f''@;'; put 'put ''c3RhdGU9InNjaGVkdWxlZCIsa3QuX3VwZGF0ZVRhc2tDb3VudChIdCwxKSk6InJ1bm5pbmciPT09THQmJihIdC5fc3RhdGU9InNjaGVkdWxpbmciKSxZLmNhbGwodGhpcyl9fXJldHVybiBubj8/dG4/P0h0fXJldHVybiBTdC5hcHBseShTLHh0KX0pLEo9ZHQoUyxCLFN0PT5mdW5jdGlvbihy''@;'; put 'put ''dCx4dCl7Y29uc3QgRHQ9eHRbMF07bGV0IEJ0O3luKER0KT8oQnQ9b3RbRHRdLGRlbGV0ZSBvdFtEdF0pOihCdD1EdD8uW3ldLEJ0P0R0W3ldPW51bGw6QnQ9RHQpLEJ0Py50eXBlP0J0LmNhbmNlbEZuJiZCdC56b25lLmNhbmNlbFRhc2soQnQpOlN0LmFwcGx5KFMseHQpfSl9ZnVuY3Rpb24g''@;'; put 'put ''XyhTLFIsQil7aWYoIUJ8fDA9PT1CLmxlbmd0aClyZXR1cm4gUjtjb25zdCBPPUIuZmlsdGVyKEo9PkoudGFyZ2V0PT09Uyk7aWYoIU98fDA9PT1PLmxlbmd0aClyZXR1cm4gUjtjb25zdCBOPU9bMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUi5maWx0ZXIoSj0+LTE9PT1OLmluZGV4T2Yo''@;'; put 'put ''SikpfWZ1bmN0aW9uIEgoUyxSLEIsTyl7UyYmZXQoUyxfKFMsUixCKSxPKX1mdW5jdGlvbiBRKFMpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTKS5maWx0ZXIoUj0+Ui5zdGFydHNXaXRoKCJvbiIpJiZSLmxlbmd0aD4yKS5tYXAoUj0+Ui5zdWJzdHJpbmcoMikpfWZ1bmN0''@;'; put 'put ''aW9uIE1uKFMsUixCLE8sTil7Y29uc3QgSj1ab25lLl9fc3ltYm9sX18oTyk7aWYoUltKXSlyZXR1cm47Y29uc3Qgb3Q9UltKXT1SW09dO1JbT109ZnVuY3Rpb24oc3QsbHQsU3Qpe3JldHVybiBsdCYmbHQucHJvdG90eXBlJiZOLmZvckVhY2goZnVuY3Rpb24ocnQpe2NvbnN0IHh0PWAke0J9''@;'; put 'put ''LiR7T306OmArcnQsRHQ9bHQucHJvdG90eXBlO3RyeXtpZihEdC5oYXNPd25Qcm9wZXJ0eShydCkpe2NvbnN0IEJ0PVMuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKER0LHJ0KTtCdCYmQnQudmFsdWU/KEJ0LnZhbHVlPVMud3JhcFdpdGhDdXJyZW50Wm9uZShCdC52YWx1ZSx4dCks''@;'; put 'put ''Uy5fcmVkZWZpbmVQcm9wZXJ0eShsdC5wcm90b3R5cGUscnQsQnQpKTpEdFtydF0mJihEdFtydF09Uy53cmFwV2l0aEN1cnJlbnRab25lKER0W3J0XSx4dCkpfWVsc2UgRHRbcnRdJiYoRHRbcnRdPVMud3JhcFdpdGhDdXJyZW50Wm9uZShEdFtydF0seHQpKX1jYXRjaHt9fSksb3QuY2FsbChS''@;'; put 'put ''LHN0LGx0LFN0KX0sUy5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQoUltPXSxvdCl9Y29uc3QgUm49ZnVuY3Rpb24gbigpe2NvbnN0IFM9Z2xvYmFsVGhpcyxSPSEwPT09U1tsKCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVjayIpXTtpZihTLlpvbmUmJihSfHwiZnVuY3Rpb24iIT10eXBlb2YgUy5ab25l''@;'; put 'put ''Ll9fc3ltYm9sX18pKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gUy5ab25lPz89ZnVuY3Rpb24gdCgpe2NvbnN0IFM9Yy5wZXJmb3JtYW5jZTtmdW5jdGlvbiBSKEF0KXtTJiZTLm1hcmsmJlMubWFyayhBdCl9ZnVuY3Rpb24gQihBdCxhdCl7UyYmUy5t''@;'; put 'put ''ZWFzdXJlJiZTLm1lYXN1cmUoQXQsYXQpfVIoIlpvbmUiKTtsZXQgTz0oKCk9PntjbGFzcyBBdHtzdGF0aWN7dGhpcy5fX3N5bWJvbF9fPWx9c3RhdGljIGFzc2VydFpvbmVQYXRjaGVkKCl7aWYoYy5Qcm9taXNlIT09SXQuWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUu''@;'; put 'put ''anMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBv''@;'; put 'put ''bHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfXN0YXRpYyBnZXQgcm9vdCgpe2xldCBBPUF0LmN1cnJlbnQ7Zm9yKDtBLnBhcmVu''@;'; put 'put ''dDspQT1BLnBhcmVudDtyZXR1cm4gQX1zdGF0aWMgZ2V0IGN1cnJlbnQoKXtyZXR1cm4gZ3Quem9uZX1zdGF0aWMgZ2V0IGN1cnJlbnRUYXNrKCl7cmV0dXJuIFB0fXN0YXRpYyBfX2xvYWRfcGF0Y2goQSxqLGh0PSExKXtpZihJdC5oYXNPd25Qcm9wZXJ0eShBKSl7Y29uc3QgRXQ9ITA9PT1j''@;'; put 'put ''W2woImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKCFodCYmRXQpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK0EpfWVsc2UgaWYoIWNbIl9fWm9uZV9kaXNhYmxlXyIrQV0pe2NvbnN0IEV0PSJab25lOiIrQTtSKEV0KSxJdFtBXT1qKGMsQXQsVHQpLEIoRXQsRXQp''@;'; put 'put ''fX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWNvbnN0cnVjdG9yKEEsail7dGhpcy5fcGFyZW50PUEsdGhpcy5fbmFtZT1qP2oubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9aiYmai5wcm9wZXJ0''@;'; put 'put ''aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IEoodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLGopfWdldChBKXtjb25zdCBqPXRoaXMuZ2V0Wm9uZVdpdGgoQSk7aWYoailyZXR1cm4gai5fcHJvcGVydGllc1tBXX1nZXRab25lV2l0aChBKXtsZXQg''@;'; put 'put ''aj10aGlzO2Zvcig7ajspe2lmKGouX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQSkpcmV0dXJuIGo7aj1qLl9wYXJlbnR9cmV0dXJuIG51bGx9Zm9yayhBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9y''@;'; put 'put ''ayh0aGlzLEEpfXdyYXAoQSxqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrQSk7Y29uc3QgaHQ9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLEEsaiksRXQ9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gRXQucnVuR3VhcmRlZChodCx0aGlzLGFyZ3VtZW50cyxqKX19cnVuKEEsaixodCxFdCl7Z3Q9e3BhcmVudDpndCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEEsaixodCxFdCl9ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1bkd1YXJk''@;'; put 'put ''ZWQoQSxqPW51bGwsaHQsRXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsQSxqLGh0LEV0KX1jYXRjaChadCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsWnQpKXRocm93IFp0fX1m''@;'; put 'put ''aW5hbGx5e2d0PWd0LnBhcmVudH19cnVuVGFzayhBLGosaHQpe2lmKEEuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoQS56b25lfHxubikubmFtZSsiOyBFeGVjdXRpb246ICIr''@;'; put 'put ''dGhpcy5uYW1lKyIpIik7Y29uc3QgRXQ9QSx7dHlwZTpadCxkYXRhOntpc1BlcmlvZGljOkN0PSExLGlzUmVmcmVzaGFibGU6Z249ITF9PXt9fT1BO2lmKEEuc3RhdGU9PT1WdCYmKFp0PT09V3R8fFp0PT09dXQpKXJldHVybjtjb25zdCB2bj1BLnN0YXRlIT1rdDt2biYmRXQuX3RyYW5zaXRp''@;'; put 'put ''b25UbyhrdCxZKTtjb25zdCBwbj1QdDtQdD1FdCxndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e1p0PT11dCYmQS5kYXRhJiYhQ3QmJiFnbiYmKEEuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsRXQsaixodCl9Y2F0Y2go''@;'; put 'put ''Y24pe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGNuKSl0aHJvdyBjbn19ZmluYWxseXtjb25zdCBjbj1BLnN0YXRlO2lmKGNuIT09VnQmJmNuIT09WHQpaWYoWnQ9PVd0fHxDdHx8Z24mJmNuPT09dnQpdm4mJkV0Ll90cmFuc2l0aW9uVG8oWSxrdCx2dCk7ZWxzZXtj''@;'; put 'put ''b25zdCB6PUV0Ll96b25lRGVsZWdhdGVzO3RoaXMuX3VwZGF0ZVRhc2tDb3VudChFdCwtMSksdm4mJkV0Ll90cmFuc2l0aW9uVG8oVnQsa3QsVnQpLGduJiYoRXQuX3pvbmVEZWxlZ2F0ZXM9eil9Z3Q9Z3QucGFyZW50LFB0PXBufX1zY2hlZHVsZVRhc2soQSl7aWYoQS56b25lJiZBLnpvbmUh''@;'; put 'put ''PT10aGlzKXtsZXQgaHQ9dGhpcztmb3IoO2h0Oyl7aWYoaHQ9PT1BLnpvbmUpdGhyb3cgRXJyb3IoYGNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICR7dGhpcy5uYW1lfSB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAke0Euem9uZS5uYW1lfWApO2h0PWh0LnBh''@;'; put 'put ''cmVudH19QS5fdHJhbnNpdGlvblRvKHZ0LFZ0KTtjb25zdCBqPVtdO0EuX3pvbmVEZWxlZ2F0ZXM9aixBLl96b25lPXRoaXM7dHJ5e0E9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLEEpfWNhdGNoKGh0KXt0aHJvdyBBLl90cmFuc2l0aW9uVG8oWHQsdnQsVnQpLHRoaXMu''@;'; put 'put ''X3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gQS5fem9uZURlbGVnYXRlcz09PWomJnRoaXMuX3VwZGF0ZVRhc2tDb3VudChBLDEpLEEuc3RhdGU9PXZ0JiZBLl90cmFuc2l0aW9uVG8oWSx2dCksQX1zY2hlZHVsZU1pY3JvVGFzayhBLGosaHQsRXQpe3JldHVy''@;'; put 'put ''biB0aGlzLnNjaGVkdWxlVGFzayhuZXcgb3QoS3QsQSxqLGh0LEV0LHZvaWQgMCkpfXNjaGVkdWxlTWFjcm9UYXNrKEEsaixodCxFdCxadCl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBvdCh1dCxBLGosaHQsRXQsWnQpKX1zY2hlZHVsZUV2ZW50VGFzayhBLGosaHQsRXQsWnQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgb3QoV3QsQSxqLGh0LEV0LFp0KSl9Y2FuY2VsVGFzayhBKXtpZihBLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEEu''@;'; put 'put ''em9uZXx8bm4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKEEuc3RhdGU9PT1ZfHxBLnN0YXRlPT09a3Qpe0EuX3RyYW5zaXRpb25UbyhMdCxZLGt0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxBKX1jYXRjaChqKXt0aHJvdyBBLl90cmFu''@;'; put 'put ''c2l0aW9uVG8oWHQsTHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGopLGp9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChBLC0xKSxBLl90cmFuc2l0aW9uVG8oVnQsTHQpLEEucnVuQ291bnQ9LTEsQX19X3VwZGF0ZVRhc2tDb3VudChBLGope2NvbnN0IGh0PUEu''@;'; put 'put ''X3pvbmVEZWxlZ2F0ZXM7LTE9PWomJihBLl96b25lRGVsZWdhdGVzPW51bGwpO2ZvcihsZXQgRXQ9MDtFdDxodC5sZW5ndGg7RXQrKylodFtFdF0uX3VwZGF0ZVRhc2tDb3VudChBLnR5cGUsail9fXJldHVybiBBdH0pKCk7Y29uc3QgTj17bmFtZToiIixvbkhhc1Rhc2s6KEF0LGF0LEEsaik9''@;'; put 'put ''PkF0Lmhhc1Rhc2soQSxqKSxvblNjaGVkdWxlVGFzazooQXQsYXQsQSxqKT0+QXQuc2NoZWR1bGVUYXNrKEEsaiksb25JbnZva2VUYXNrOihBdCxhdCxBLGosaHQsRXQpPT5BdC5pbnZva2VUYXNrKEEsaixodCxFdCksb25DYW5jZWxUYXNrOihBdCxhdCxBLGopPT5BdC5jYW5jZWxUYXNrKEEs''@;'; put 'put ''ail9O2NsYXNzIEp7Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1jb25zdHJ1Y3RvcihhdCxBLGope3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLl96b25lPWF0LHRoaXMuX3BhcmVudERlbGVnYXRlPUEsdGhpcy5fZm9ya1pT''@;'; put 'put ''PWomJihqJiZqLm9uRm9yaz9qOkEuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9aiYmKGoub25Gb3JrP0E6QS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1qJiYoai5vbkZvcms/dGhpcy5fem9uZTpBLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPWomJihqLm9uSW50ZXJj''@;'; put 'put ''ZXB0P2o6QS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9aiYmKGoub25JbnRlcmNlcHQ/QTpBLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1qJiYoai5vbkludGVyY2VwdD90aGlzLl96b25lOkEuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZv''@;'; put 'put ''a2VaUz1qJiYoai5vbkludm9rZT9qOkEuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PWomJihqLm9uSW52b2tlP0E6QS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9aiYmKGoub25JbnZva2U/dGhpcy5fem9uZTpBLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJy''@;'; put 'put ''b3JaUz1qJiYoai5vbkhhbmRsZUVycm9yP2o6QS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PWomJihqLm9uSGFuZGxlRXJyb3I/QTpBLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9aiYmKGoub25IYW5kbGVFcnJvcj90aGlzLl96b25l''@;'; put 'put ''OkEuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPWomJihqLm9uU2NoZWR1bGVUYXNrP2o6QS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9aiYmKGoub25TY2hlZHVsZVRhc2s/QTpBLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hl''@;'; put 'put ''ZHVsZVRhc2tDdXJyWm9uZT1qJiYoai5vblNjaGVkdWxlVGFzaz90aGlzLl96b25lOkEuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9aiYmKGoub25JbnZva2VUYXNrP2o6QS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1qJiYoai5vbkludm9r''@;'; put 'put ''ZVRhc2s/QTpBLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPWomJihqLm9uSW52b2tlVGFzaz90aGlzLl96b25lOkEuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPWomJihqLm9uQ2FuY2VsVGFzaz9qOkEuX2NhbmNlbFRhc2taUyksdGhp''@;'; put 'put ''cy5fY2FuY2VsVGFza0RsZ3Q9aiYmKGoub25DYW5jZWxUYXNrP0E6QS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1qJiYoai5vbkNhbmNlbFRhc2s/dGhpcy5fem9uZTpBLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hh''@;'; put 'put ''c1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PWomJmoub25IYXNUYXNrOyhodHx8QSYmQS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9qOk4sdGhpcy5faGFzVGFza0RsZ3Q9QSx0aGlz''@;'; put 'put ''Ll9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXRoaXMuX3pvbmUsai5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPU4sdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1BLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLGou''@;'; put 'put ''b25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPU4sdGhpcy5faW52b2tlVGFza0RsZ3Q9QSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSksai5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9Tix0aGlzLl9jYW5jZWxUYXNrRGxndD1BLHRoaXMuX2Nh''@;'; put 'put ''bmNlbFRhc2tDdXJyWm9uZT10aGlzLl96b25lKSl9Zm9yayhhdCxBKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGF0LEEpOm5ldyBPKGF0LEEpfWludGVyY2VwdChhdCxBLGope3JldHVybiB0aGlzLl9pbnRlcmNlcHRa''@;'; put 'put ''Uz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGF0LEEsaik6QX1pbnZva2UoYXQsQSxqLGh0LEV0KXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tl''@;'; put 'put ''RGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxhdCxBLGosaHQsRXQpOkEuYXBwbHkoaixodCl9aGFuZGxlRXJyb3IoYXQsQSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFu''@;'; put 'put ''ZGxlRXJyb3JDdXJyWm9uZSxhdCxBKX1zY2hlZHVsZVRhc2soYXQsQSl7bGV0IGo9QTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJmouX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSxqPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2No''@;'; put 'put ''ZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsYXQsQSksanx8KGo9QSk7ZWxzZSBpZihBLnNjaGVkdWxlRm4pQS5zY2hlZHVsZUZuKEEpO2Vsc2V7aWYoQS50eXBlIT1LdCl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBz''@;'; put 'put ''Y2hlZHVsZUZuLiIpO0h0KEEpfXJldHVybiBqfWludm9rZVRhc2soYXQsQSxqLGh0KXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGF0LEEsaixodCk6''@;'; put 'put ''QS5jYWxsYmFjay5hcHBseShqLGh0KX1jYW5jZWxUYXNrKGF0LEEpe2xldCBqO2lmKHRoaXMuX2NhbmNlbFRhc2taUylqPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGF0LEEpO2Vsc2V7aWYoIUEu''@;'; put 'put ''Y2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtqPUEuY2FuY2VsRm4oQSl9cmV0dXJuIGp9aGFzVGFzayhhdCxBKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tD''@;'; put 'put ''dXJyWm9uZSxhdCxBKX1jYXRjaChqKXt0aGlzLmhhbmRsZUVycm9yKGF0LGopfX1fdXBkYXRlVGFza0NvdW50KGF0LEEpe2NvbnN0IGo9dGhpcy5fdGFza0NvdW50cyxodD1qW2F0XSxFdD1qW2F0XT1odCtBO2lmKEV0PDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRo''@;'; put 'put ''ZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9aHQmJjAhPUV0fHx0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSx7bWljcm9UYXNrOmoubWljcm9UYXNrPjAsbWFjcm9UYXNrOmoubWFjcm9UYXNrPjAsZXZlbnRUYXNrOmouZXZlbnRUYXNrPjAsY2hhbmdlOmF0fSl9fWNsYXNzIG90e2NvbnN0cnVjdG9y''@;'; put 'put ''KGF0LEEsaixodCxFdCxadCl7aWYodGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPWF0LHRoaXMuc291cmNlPUEsdGhpcy5kYXRhPWh0LHRoaXMuc2NoZWR1bGVGbj1FdCx0''@;'; put 'put ''aGlzLmNhbmNlbEZuPVp0LCFqKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPWo7Y29uc3QgQ3Q9dGhpczt0aGlzLmludm9rZT1hdD09PVd0JiZodCYmaHQudXNlRz9vdC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIG90Lmludm9r''@;'; put 'put ''ZVRhc2suY2FsbChjLEN0LHRoaXMsYXJndW1lbnRzKX19c3RhdGljIGludm9rZVRhc2soYXQsQSxqKXthdHx8KGF0PXRoaXMpLGVuKys7dHJ5e3JldHVybiBhdC5ydW5Db3VudCsrLGF0LnpvbmUucnVuVGFzayhhdCxBLGopfWZpbmFsbHl7MT09ZW4mJnRuKCksZW4tLX19Z2V0IHpvbmUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fem9uZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9Y2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCl7dGhpcy5fdHJhbnNpdGlvblRvKFZ0LHZ0KX1fdHJhbnNpdGlvblRvKGF0LEEsail7aWYodGhpcy5fc3RhdGUhPT1BJiZ0aGlzLl9zdGF0ZSE9PWopdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGAke3RoaXMudHlwZX0gJyR7dGhpcy5zb3VyY2V9JzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICcke2F0fScsIGV4cGVjdGluZyBzdGF0ZSAnJHtBfScke2o/IiBvciAnIitqKyInIjoiIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0nLmApO3RoaXMuX3N0YXRlPWF0LGF0PT1WdCYmKHRo''@;'; put 'put ''aXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9dG9KU09OKCl7cmV0dXJu''@;'; put 'put ''e3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19fWNvbnN0IHN0PWwoInNldFRpbWVvdXQiKSxsdD1sKCJQcm9taXNlIiksU3Q9bCgidGhlbiIpO2xldCBEdCxydD1bXSx4''@;'; put 'put ''dD0hMTtmdW5jdGlvbiBCdChBdCl7aWYoRHR8fGNbbHRdJiYoRHQ9Y1tsdF0ucmVzb2x2ZSgwKSksRHQpe2xldCBhdD1EdFtTdF07YXR8fChhdD1EdC50aGVuKSxhdC5jYWxsKER0LEF0KX1lbHNlIGNbc3RdKEF0LDApfWZ1bmN0aW9uIEh0KEF0KXswPT09ZW4mJjA9PT1ydC5sZW5ndGgmJkJ0''@;'; put 'put ''KHRuKSxBdCYmcnQucHVzaChBdCl9ZnVuY3Rpb24gdG4oKXtpZigheHQpe2Zvcih4dD0hMDtydC5sZW5ndGg7KXtjb25zdCBBdD1ydDtydD1bXTtmb3IobGV0IGF0PTA7YXQ8QXQubGVuZ3RoO2F0Kyspe2NvbnN0IEE9QXRbYXRdO3RyeXtBLnpvbmUucnVuVGFzayhBLG51bGwsbnVsbCl9Y2F0''@;'; put 'put ''Y2goail7VHQub25VbmhhbmRsZWRFcnJvcihqKX19fVR0Lm1pY3JvdGFza0RyYWluRG9uZSgpLHh0PSExfX1jb25zdCBubj17bmFtZToiTk8gWk9ORSJ9LFZ0PSJub3RTY2hlZHVsZWQiLHZ0PSJzY2hlZHVsaW5nIixZPSJzY2hlZHVsZWQiLGt0PSJydW5uaW5nIixMdD0iY2FuY2VsaW5nIixY''@;'; put 'put ''dD0idW5rbm93biIsS3Q9Im1pY3JvVGFzayIsdXQ9Im1hY3JvVGFzayIsV3Q9ImV2ZW50VGFzayIsSXQ9e30sVHQ9e3N5bWJvbDpsLGN1cnJlbnRab25lRnJhbWU6KCk9Pmd0LG9uVW5oYW5kbGVkRXJyb3I6SnQsbWljcm90YXNrRHJhaW5Eb25lOkp0LHNjaGVkdWxlTWljcm9UYXNrOkh0LHNo''@;'; put 'put ''b3dVbmNhdWdodEVycm9yOigpPT4hT1tsKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildLHBhdGNoRXZlbnRUYXJnZXQ6KCk9PltdLHBhdGNoT25Qcm9wZXJ0aWVzOkp0LHBhdGNoTWV0aG9kOigpPT5KdCxiaW5kQXJndW1lbnRzOigpPT5bXSxwYXRjaFRoZW46KCk9Pkp0LHBh''@;'; put 'put ''dGNoTWFjcm9UYXNrOigpPT5KdCxwYXRjaEV2ZW50UHJvdG90eXBlOigpPT5KdCxpc0lFT3JFZGdlOigpPT4hMSxnZXRHbG9iYWxPYmplY3RzOigpPT57fSxPYmplY3REZWZpbmVQcm9wZXJ0eTooKT0+SnQsT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOigpPT57fSxPYmplY3RDcmVh''@;'; put 'put ''dGU6KCk9Pnt9LEFycmF5U2xpY2U6KCk9PltdLHBhdGNoQ2xhc3M6KCk9Pkp0LHdyYXBXaXRoQ3VycmVudFpvbmU6KCk9Pkp0LGZpbHRlclByb3BlcnRpZXM6KCk9PltdLGF0dGFjaE9yaWdpblRvUGF0Y2hlZDooKT0+SnQsX3JlZGVmaW5lUHJvcGVydHk6KCk9Pkp0LHBhdGNoQ2FsbGJhY2tz''@;'; put 'put ''OigpPT5KdCxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpCdH07bGV0IGd0PXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBPKG51bGwsbnVsbCl9LFB0PW51bGwsZW49MDtmdW5jdGlvbiBKdCgpe31yZXR1cm4gQigiWm9uZSIsIlpvbmUiKSxPfSgpLFMuWm9uZX0oKTsoZnVuY3Rpb24gTm4oUyl7KGZ1''@;'; put 'put ''bmN0aW9uIFF0KFMpe1MuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoUixCLE8pPT57Y29uc3QgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEo9T2JqZWN0LmRlZmluZVByb3BlcnR5LHN0PU8uc3ltYm9sLGx0PVtdLFN0PSExIT09UltzdCgiRElTQUJMRV9XUkFQ''@;'; put 'put ''UElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxydD1zdCgiUHJvbWlzZSIpLHh0PXN0KCJ0aGVuIiksRHQ9Il9fY3JlYXRpb25UcmFjZV9fIjtPLm9uVW5oYW5kbGVkRXJyb3I9ej0+e2lmKE8uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7Y29uc3QgVz16JiZ6LnJlamVjdGlvbjtXP2Nv''@;'; put 'put ''bnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLFcgaW5zdGFuY2VvZiBFcnJvcj9XLm1lc3NhZ2U6VywiOyBab25lOiIsei56b25lLm5hbWUsIjsgVGFzazoiLHoudGFzayYmei50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLFcsVyBpbnN0YW5jZW9mIEVycm9yP1cuc3Rh''@;'; put 'put ''Y2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKHopfX0sTy5taWNyb3Rhc2tEcmFpbkRvbmU9KCk9Pntmb3IoO2x0Lmxlbmd0aDspe2NvbnN0IHo9bHQuc2hpZnQoKTt0cnl7ei56b25lLnJ1bkd1YXJkZWQoKCk9Pnt0aHJvdyB6LnRocm93T3JpZ2luYWw/ei5yZWplY3Rpb246en0pfWNhdGNoKFcp''@;'; put 'put ''e0h0KFcpfX19O2NvbnN0IEJ0PXN0KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEh0KHope08ub25VbmhhbmRsZWRFcnJvcih6KTt0cnl7Y29uc3QgVz1CW0J0XTsiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMseil9Y2F0Y2h7fX1mdW5jdGlv''@;'; put 'put ''biB0bih6KXtyZXR1cm4geiYmei50aGVufWZ1bmN0aW9uIG5uKHope3JldHVybiB6fWZ1bmN0aW9uIFZ0KHope3JldHVybiBDdC5yZWplY3Qoeil9Y29uc3QgdnQ9c3QoInN0YXRlIiksWT1zdCgidmFsdWUiKSxrdD1zdCgiZmluYWxseSIpLEx0PXN0KCJwYXJlbnRQcm9taXNlVmFsdWUiKSxY''@;'; put 'put ''dD1zdCgicGFyZW50UHJvbWlzZVN0YXRlIiksS3Q9IlByb21pc2UudGhlbiIsdXQ9bnVsbCxXdD0hMCxJdD0hMSxUdD0wO2Z1bmN0aW9uIGd0KHosVyl7cmV0dXJuIGs9Pnt0cnl7QXQoeixXLGspfWNhdGNoKEcpe0F0KHosITEsRyl9fX1jb25zdCBQdD1mdW5jdGlvbigpe2xldCB6PSExO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24oKXt6fHwoej0hMCxrLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZW49IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEp0PXN0KCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gQXQoeixXLGspe2NvbnN0IEc9UHQoKTtp''@;'; put 'put ''Zih6PT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKGVuKTtpZih6W3Z0XT09PXV0KXtsZXQgcHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2Yga3x8ImZ1bmN0aW9uIj09dHlwZW9mIGspJiYocHQ9ayYmay50aGVuKX1jYXRjaChNdCl7cmV0dXJuIEcoKCk9PntBdCh6LCExLE10KX0pKCksen1p''@;'; put 'put ''ZihXIT09SXQmJmsgaW5zdGFuY2VvZiBDdCYmay5oYXNPd25Qcm9wZXJ0eSh2dCkmJmsuaGFzT3duUHJvcGVydHkoWSkmJmtbdnRdIT09dXQpQShrKSxBdCh6LGtbdnRdLGtbWV0pO2Vsc2UgaWYoVyE9PUl0JiYiZnVuY3Rpb24iPT10eXBlb2YgcHQpdHJ5e3B0LmNhbGwoayxHKGd0KHosVykp''@;'; put 'put ''LEcoZ3QoeiwhMSkpKX1jYXRjaChNdCl7RygoKT0+e0F0KHosITEsTXQpfSkoKX1lbHNle3pbdnRdPVc7Y29uc3QgTXQ9eltZXTtpZih6W1ldPWsseltrdF09PT1rdCYmVz09PVd0JiYoelt2dF09eltYdF0seltZXT16W0x0XSksVz09PUl0JiZrIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IGN0''@;'; put 'put ''PUIuY3VycmVudFRhc2smJkIuY3VycmVudFRhc2suZGF0YSYmQi5jdXJyZW50VGFzay5kYXRhW0R0XTtjdCYmSihrLEp0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpjdH0pfWZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7KWooeixNdFtjdCsrXSxN''@;'; put 'put ''dFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSk7aWYoMD09TXQubGVuZ3RoJiZXPT1JdCl7elt2dF09VHQ7bGV0IGN0PWs7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uIG90KHope3JldHVybiB6JiZ6LnRvU3RyaW5nPT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZz8oei5jb25zdHJ1Y3RvciYmei5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeSh6KTp6P3oudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeil9KGspKyhrJiZrLnN0YWNrPyJcbiIray5zdGFjazoiIikpfWNhdGNo''@;'; put 'put ''KHd0KXtjdD13dH1TdCYmKGN0LnRocm93T3JpZ2luYWw9ITApLGN0LnJlamVjdGlvbj1rLGN0LnByb21pc2U9eixjdC56b25lPUIuY3VycmVudCxjdC50YXNrPUIuY3VycmVudFRhc2ssbHQucHVzaChjdCksTy5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIHp9Y29uc3QgYXQ9c3QoInJl''@;'; put 'put ''amVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gQSh6KXtpZih6W3Z0XT09PVR0KXt0cnl7Y29uc3QgVz1CW2F0XTtXJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMse3JlamVjdGlvbjp6W1ldLHByb21pc2U6en0pfWNhdGNoe316W3Z0XT1JdDtmb3IobGV0IFc9MDtX''@;'; put 'put ''PGx0Lmxlbmd0aDtXKyspej09PWx0W1ddLnByb21pc2UmJmx0LnNwbGljZShXLDEpfX1mdW5jdGlvbiBqKHosVyxrLEcscHQpe0Eoeik7Y29uc3QgTXQ9elt2dF0sY3Q9TXQ/ImZ1bmN0aW9uIj09dHlwZW9mIEc/RzpubjoiZnVuY3Rpb24iPT10eXBlb2YgcHQ/cHQ6VnQ7Vy5zY2hlZHVsZU1p''@;'; put 'put ''Y3JvVGFzayhLdCwoKT0+e3RyeXtjb25zdCB3dD16W1ldLFJ0PSEhayYma3Q9PT1rW2t0XTtSdCYmKGtbTHRdPXd0LGtbWHRdPU10KTtjb25zdCBGdD1XLnJ1bihjdCx2b2lkIDAsUnQmJmN0IT09VnQmJmN0IT09bm4/W106W3d0XSk7QXQoaywhMCxGdCl9Y2F0Y2god3Qpe0F0KGssITEsd3Qp''@;'; put 'put ''fX0sayl9Y29uc3QgRXQ9ZnVuY3Rpb24oKXt9LFp0PVIuQWdncmVnYXRlRXJyb3I7Y2xhc3MgQ3R7c3RhdGljIHRvU3RyaW5nKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9c3RhdGljIHJlc29sdmUoVyl7cmV0dXJuIFcgaW5zdGFuY2Vv''@;'; put 'put ''ZiBDdD9XOkF0KG5ldyB0aGlzKG51bGwpLFd0LFcpfXN0YXRpYyByZWplY3QoVyl7cmV0dXJuIEF0KG5ldyB0aGlzKG51bGwpLEl0LFcpfXN0YXRpYyB3aXRoUmVzb2x2ZXJzKCl7Y29uc3QgVz17fTtyZXR1cm4gVy5wcm9taXNlPW5ldyBDdCgoayxHKT0+e1cucmVzb2x2ZT1rLFcucmVqZWN0''@;'; put 'put ''PUd9KSxXfXN0YXRpYyBhbnkoVyl7aWYoIVd8fCJmdW5jdGlvbiIhPXR5cGVvZiBXW1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7Y29uc3Qgaz1bXTtsZXQgRz0wO3RyeXtmb3IobGV0IGN0IG9m''@;'; put 'put ''IFcpRysrLGsucHVzaChDdC5yZXNvbHZlKGN0KSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUcpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0''@;'; put 'put ''ZWQiKSk7bGV0IHB0PSExO2NvbnN0IE10PVtdO3JldHVybiBuZXcgQ3QoKGN0LHd0KT0+e2ZvcihsZXQgUnQ9MDtSdDxrLmxlbmd0aDtSdCsrKWtbUnRdLnRoZW4oRnQ9PntwdHx8KHB0PSEwLGN0KEZ0KSl9LEZ0PT57TXQucHVzaChGdCksRy0tLDA9PT1HJiYocHQ9ITAsd3QobmV3IFp0KE10''@;'; put 'put ''LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBrLEcscHQ9bmV3IHRoaXMoKHd0LFJ0KT0+e2s9d3QsRz1SdH0pO2Z1bmN0aW9uIE10KHd0KXtrKHd0KX1mdW5jdGlvbiBjdCh3dCl7Ryh3dCl9Zm9yKGxldCB3dCBvZiBXKXRuKHd0KXx8KHd0''@;'; put 'put ''PXRoaXMucmVzb2x2ZSh3dCkpLHd0LnRoZW4oTXQsY3QpO3JldHVybiBwdH1zdGF0aWMgYWxsKFcpe3JldHVybiBDdC5hbGxXaXRoQ2FsbGJhY2soVyl9c3RhdGljIGFsbFNldHRsZWQoVyl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgQ3Q/dGhpczpDdCkuYWxsV2l0''@;'; put 'put ''aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJyb3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsayl7bGV0IEcscHQsTXQ9bmV3IHRoaXMoKEZ0LCR0''@;'; put 'put ''KT0+e0c9RnQscHQ9JHR9KSxjdD0yLHd0PTA7Y29uc3QgUnQ9W107Zm9yKGxldCBGdCBvZiBXKXt0bihGdCl8fChGdD10aGlzLnJlc29sdmUoRnQpKTtjb25zdCAkdD13dDt0cnl7RnQudGhlbihVdD0+e1J0WyR0XT1rP2sudGhlbkNhbGxiYWNrKFV0KTpVdCxjdC0tLDA9PT1jdCYmRyhSdCl9''@;'; put 'put ''LFV0PT57az8oUnRbJHRdPWsuZXJyb3JDYWxsYmFjayhVdCksY3QtLSwwPT09Y3QmJkcoUnQpKTpwdChVdCl9KX1jYXRjaChVdCl7cHQoVXQpfWN0Kyssd3QrK31yZXR1cm4gY3QtPTIsMD09PWN0JiZHKFJ0KSxNdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBrPXRoaXM7aWYoIShrIGluc3RhbmNl''@;'; put 'put ''b2YgQ3QpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7a1t2dF09dXQsa1tZXT1bXTt0cnl7Y29uc3QgRz1QdCgpO1cmJlcoRyhndChrLFd0KSksRyhndChrLEl0KSkpfWNhdGNoKEcpe0F0KGssITEsRyl9fWdldFtTeW1ib2wudG9TdHJpbmdUYWdd''@;'; put 'put ''KCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4gQ3R9dGhlbihXLGspe2xldCBHPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFHfHwiZnVuY3Rpb24iIT10eXBlb2YgRykmJihHPXRoaXMuY29uc3RydWN0b3J8fEN0KTtjb25zdCBwdD1u''@;'; put 'put ''ZXcgRyhFdCksTXQ9Qi5jdXJyZW50O3JldHVybiB0aGlzW3Z0XT09dXQ/dGhpc1tZXS5wdXNoKE10LHB0LFcsayk6aih0aGlzLE10LHB0LFcsaykscHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IGs9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5z''@;'; put 'put ''cGVjaWVzXTsoIWt8fCJmdW5jdGlvbiIhPXR5cGVvZiBrKSYmKGs9Q3QpO2NvbnN0IEc9bmV3IGsoRXQpO0dba3RdPWt0O2NvbnN0IHB0PUIuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChwdCxHLFcsVyk6aih0aGlzLHB0LEcsVyxXKSxHfX1DdC5yZXNvbHZlPUN0''@;'; put 'put ''LnJlc29sdmUsQ3QucmVqZWN0PUN0LnJlamVjdCxDdC5yYWNlPUN0LnJhY2UsQ3QuYWxsPUN0LmFsbDtjb25zdCBnbj1SW3J0XT1SLlByb21pc2U7Ui5Qcm9taXNlPUN0O2NvbnN0IHZuPXN0KCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHBuKHope2NvbnN0IFc9ei5wcm90b3R5cGUsaz1OKFcs''@;'; put 'put ''InRoZW4iKTtpZihrJiYoITE9PT1rLndyaXRhYmxlfHwhay5jb25maWd1cmFibGUpKXJldHVybjtjb25zdCBHPVcudGhlbjtXW3h0XT1HLHoucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24ocHQsTXQpe3JldHVybiBuZXcgQ3QoKHd0LFJ0KT0+e0cuY2FsbCh0aGlzLHd0LFJ0KX0pLnRoZW4ocHQs''@;'; put 'put ''TXQpfSx6W3ZuXT0hMH1yZXR1cm4gTy5wYXRjaFRoZW49cG4sZ24mJihwbihnbiksZHQoUiwiZmV0Y2giLHo9PmZ1bmN0aW9uIGNuKHope3JldHVybiBmdW5jdGlvbihXLGspe2xldCBHPXouYXBwbHkoVyxrKTtpZihHIGluc3RhbmNlb2YgQ3QpcmV0dXJuIEc7bGV0IHB0PUcuY29uc3RydWN0''@;'; put 'put ''b3I7cmV0dXJuIHB0W3ZuXXx8cG4ocHQpLEd9fSh6KSkpLFByb21pc2VbQi5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09bHQsQ3R9KX0pKFMpLGZ1bmN0aW9uIGFuKFMpe1MuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsUj0+e2NvbnN0IEI9RnVuY3Rpb24ucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLE89eCgiT3JpZ2luYWxEZWxlZ2F0ZSIpLE49eCgiUHJvbWlzZSIpLEo9eCgiRXJyb3IiKSxvdD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXtjb25zdCBydD10aGlzW09dO2lmKHJ0KXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBydD9CLmNhbGwocnQp''@;'; put 'put ''Ok9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChydCk7aWYodGhpcz09PVByb21pc2Upe2NvbnN0IHh0PVJbTl07aWYoeHQpcmV0dXJuIEIuY2FsbCh4dCl9aWYodGhpcz09PUVycm9yKXtjb25zdCB4dD1SW0pdO2lmKHh0KXJldHVybiBCLmNhbGwoeHQpfX1yZXR1cm4gQi5jYWxsKHRo''@;'; put 'put ''aXMpfTtvdFtPXT1CLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1vdDtjb25zdCBzdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZSYmdGhpcyBpbnN0YW5jZW9m''@;'; put 'put ''IFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOnN0LmNhbGwodGhpcyl9fSl9KFMpLGZ1bmN0aW9uIGtuKFMpe1MuX19sb2FkX3BhdGNoKCJ1dGlsIiwoUixCLE8pPT57Y29uc3QgTj1RKFIpO08ucGF0Y2hPblByb3BlcnRpZXM9ZXQsTy5wYXRjaE1ldGhvZD1kdCxPLmJpbmRBcmd1bWVudHM9''@;'; put 'put ''VCxPLnBhdGNoTWFjcm9UYXNrPWJ0O2NvbnN0IEo9Qi5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksb3Q9Qi5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7UltvdF0mJihSW0pdPVJbb3RdKSxSW0pdJiYoQltKXT1CW290XT1SW0pdKSxPLnBhdGNoRXZlbnRQcm90b3R5''@;'; put 'put ''cGU9cixPLnBhdGNoRXZlbnRUYXJnZXQ9VG4sTy5pc0lFT3JFZGdlPUd0LE8uT2JqZWN0RGVmaW5lUHJvcGVydHk9cyxPLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj1lLE8uT2JqZWN0Q3JlYXRlPXUsTy5BcnJheVNsaWNlPWYsTy5wYXRjaENsYXNzPWZ0LE8ud3JhcFdpdGhDdXJy''@;'; put 'put ''ZW50Wm9uZT1ELE8uZmlsdGVyUHJvcGVydGllcz1fLE8uYXR0YWNoT3JpZ2luVG9QYXRjaGVkPU90LE8uX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LE8ucGF0Y2hDYWxsYmFja3M9TW4sTy5nZXRHbG9iYWxPYmplY3RzPSgpPT4oe2dsb2JhbFNvdXJjZXM6ZG4sem9u''@;'; put 'put ''ZVN5bWJvbEV2ZW50TmFtZXM6cXQsZXZlbnROYW1lczpOLGlzQnJvd3NlcjpudCxpc01peDp0dCxpc05vZGU6WixUUlVFX1NUUjptLEZBTFNFX1NUUjpFLFpPTkVfU1lNQk9MX1BSRUZJWDpnLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6aSxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnZ9KX0p''@;'; put 'put ''fShTKX0pKFJuKSxmdW5jdGlvbiB6dChTKXtTLl9fbG9hZF9wYXRjaCgibGVnYWN5IixSPT57Y29uc3QgQj1SW1MuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07QiYmQigpfSksUy5fX2xvYWRfcGF0Y2goInRpbWVycyIsUj0+e2NvbnN0IEI9InNldCIsTz0iY2xlYXIiO1AoUixCLE8sIlRp''@;'; put 'put ''bWVvdXQiKSxQKFIsQixPLCJJbnRlcnZhbCIpLFAoUixCLE8sIkltbWVkaWF0ZSIpfSksUy5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsUj0+e1AoUiwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksUChSLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwi''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUiKSxQKFIsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksUy5fX2xvYWRfcGF0Y2goImJsb2NraW5nIiwoUixCKT0+e2NvbnN0IE89WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXTtmb3IobGV0IE49MDtOPE8ubGVuZ3Ro''@;'; put 'put ''O04rKylkdChSLE9bTl0sKG90LHN0LGx0KT0+ZnVuY3Rpb24oU3QscnQpe3JldHVybiBCLmN1cnJlbnQucnVuKG90LFIscnQsbHQpfSl9KSxTLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLChSLEIsTyk9PnsoZnVuY3Rpb24ganQoUyxSKXtSLnBhdGNoRXZlbnRQcm90b3R5cGUoUyxSKX0p''@;'; put 'put ''KFIsTyksZnVuY3Rpb24gJChTLFIpe2lmKFpvbmVbUi5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pcmV0dXJuO2NvbnN0e2V2ZW50TmFtZXM6Qix6b25lU3ltYm9sRXZlbnROYW1lczpPLFRSVUVfU1RSOk4sRkFMU0VfU1RSOkosWk9ORV9TWU1CT0xfUFJFRklYOm90fT1SLmdldEdsb2Jh''@;'; put 'put ''bE9iamVjdHMoKTtmb3IobGV0IGx0PTA7bHQ8Qi5sZW5ndGg7bHQrKyl7Y29uc3QgU3Q9QltsdF0sRHQ9b3QrKFN0K0opLEJ0PW90KyhTdCtOKTtPW1N0XT17fSxPW1N0XVtKXT1EdCxPW1N0XVtOXT1CdH1jb25zdCBzdD1TLkV2ZW50VGFyZ2V0O3N0JiZzdC5wcm90b3R5cGUmJlIucGF0Y2hF''@;'; put 'put ''dmVudFRhcmdldChTLFIsW3N0JiZzdC5wcm90b3R5cGVdKX0oUixPKTtjb25zdCBOPVIuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtOJiZOLnByb3RvdHlwZSYmTy5wYXRjaEV2ZW50VGFyZ2V0KFIsTyxbTi5wcm90b3R5cGVdKX0pLFMuX19sb2FkX3BhdGNoKCJNdXRhdGlvbk9ic2VydmVy''@;'; put 'put ''IiwoUixCLE8pPT57ZnQoIk11dGF0aW9uT2JzZXJ2ZXIiKSxmdCgiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpfSksUy5fX2xvYWRfcGF0Y2goIkludGVyc2VjdGlvbk9ic2VydmVyIiwoUixCLE8pPT57ZnQoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxTLl9fbG9hZF9wYXRjaCgiRmlsZVJl''@;'; put 'put ''YWRlciIsKFIsQixPKT0+e2Z0KCJGaWxlUmVhZGVyIil9KSxTLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLChSLEIsTyk9PnshZnVuY3Rpb24gaXQoUyxSKXtpZihaJiYhdHR8fFpvbmVbUy5zeW1ib2woInBhdGNoRXZlbnRzIildKXJldHVybjtjb25zdCBCPVIuX19ab25lX2lnbm9yZV9v''@;'; put 'put ''bl9wcm9wZXJ0aWVzO2xldCBPPVtdO2lmKG50KXtjb25zdCBOPXdpbmRvdztPPU8uY29uY2F0KFsiRG9jdW1lbnQiLCJTVkdFbGVtZW50IiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwiSFRNTEJvZHlFbGVtZW50IiwiSFRNTE1lZGlhRWxlbWVudCIsIkhUTUxGcmFtZVNldEVsZW1lbnQiLCJI''@;'; put 'put ''VE1MRnJhbWVFbGVtZW50IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJIVE1MTWFycXVlZUVsZW1lbnQiLCJXb3JrZXIiXSk7Y29uc3QgSj1mdW5jdGlvbiBvbigpe3RyeXtjb25zdCBTPUMubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PVMuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1TLmluZGV4''@;'; put 'put ''T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0Ok4saWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTtIKE4sUShOKSxCJiZCLmNvbmNhdChKKSxhKE4pKX1PPU8uY29uY2F0KFsiWE1MSHR0cFJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdEV2ZW50''@;'; put 'put ''VGFyZ2V0IiwiSURCSW5kZXgiLCJJREJSZXF1ZXN0IiwiSURCT3BlbkRCUmVxdWVzdCIsIklEQkRhdGFiYXNlIiwiSURCVHJhbnNhY3Rpb24iLCJJREJDdXJzb3IiLCJXZWJTb2NrZXQiXSk7Zm9yKGxldCBOPTA7TjxPLmxlbmd0aDtOKyspe2NvbnN0IEo9UltPW05dXTtKJiZKLnByb3RvdHlw''@;'; put 'put ''ZSYmSChKLnByb3RvdHlwZSxRKEoucHJvdG90eXBlKSxCKX19KE8sUil9KSxTLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChSLEIsTyk9PnshZnVuY3Rpb24gSyhTLFIpe2NvbnN0e2lzQnJvd3NlcjpCLGlzTWl4Ok99PVIuZ2V0R2xvYmFsT2JqZWN0cygpOyhCfHxPKSYmUy5jdXN0''@;'; put 'put ''b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFMmJlIucGF0Y2hDYWxsYmFja3MoUixTLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmli''@;'; put 'put ''dXRlQ2hhbmdlZENhbGxiYWNrIiwiZm9ybUFzc29jaWF0ZWRDYWxsYmFjayIsImZvcm1EaXNhYmxlZENhbGxiYWNrIiwiZm9ybVJlc2V0Q2FsbGJhY2siLCJmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2siXSl9KFIsTyl9KSxTLl9fbG9hZF9wYXRjaCgiWEhSIiwoUixCKT0+eyFmdW5jdGlvbiBT''@;'; put 'put ''dChydCl7Y29uc3QgeHQ9cnQuWE1MSHR0cFJlcXVlc3Q7aWYoIXh0KXJldHVybjtjb25zdCBEdD14dC5wcm90b3R5cGU7bGV0IEh0PUR0W3BdLHRuPUR0W2RdO2lmKCFIdCl7Y29uc3QgVHQ9cnQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihUdCl7Y29uc3QgZ3Q9VHQucHJvdG90eXBl''@;'; put 'put ''O0h0PWd0W3BdLHRuPWd0W2RdfX1jb25zdCBubj0icmVhZHlzdGF0ZWNoYW5nZSIsVnQ9InNjaGVkdWxlZCI7ZnVuY3Rpb24gdnQoVHQpe2NvbnN0IGd0PVR0LmRhdGEsUHQ9Z3QudGFyZ2V0O1B0W290XT0hMSxQdFtsdF09ITE7Y29uc3QgZW49UHRbSl07SHR8fChIdD1QdFtwXSx0bj1QdFtk''@;'; put 'put ''XSksZW4mJnRuLmNhbGwoUHQsbm4sZW4pO2NvbnN0IEp0PVB0W0pdPSgpPT57aWYoUHQucmVhZHlTdGF0ZT09PVB0LkRPTkUpaWYoIWd0LmFib3J0ZWQmJlB0W290XSYmVHQuc3RhdGU9PT1WdCl7Y29uc3QgYXQ9UHRbQi5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV07aWYoMCE9PVB0LnN0YXR1''@;'; put 'put ''cyYmYXQmJmF0Lmxlbmd0aD4wKXtjb25zdCBBPVR0Lmludm9rZTtUdC5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBqPVB0W0IuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2ZvcihsZXQgaHQ9MDtodDxqLmxlbmd0aDtodCsrKWpbaHRdPT09VHQmJmouc3BsaWNlKGh0LDEpOyFndC5hYm9ydGVk''@;'; put 'put ''JiZUdC5zdGF0ZT09PVZ0JiZBLmNhbGwoVHQpfSxhdC5wdXNoKFR0KX1lbHNlIFR0Lmludm9rZSgpfWVsc2UhZ3QuYWJvcnRlZCYmITE9PT1QdFtvdF0mJihQdFtsdF09ITApfTtyZXR1cm4gSHQuY2FsbChQdCxubixKdCksUHRbT118fChQdFtPXT1UdCksV3QuYXBwbHkoUHQsZ3QuYXJncyks''@;'; put 'put ''UHRbb3RdPSEwLFR0fWZ1bmN0aW9uIFkoKXt9ZnVuY3Rpb24ga3QoVHQpe2NvbnN0IGd0PVR0LmRhdGE7cmV0dXJuIGd0LmFib3J0ZWQ9ITAsSXQuYXBwbHkoZ3QudGFyZ2V0LGd0LmFyZ3MpfWNvbnN0IEx0PWR0KER0LCJvcGVuIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe3JldHVybiBUdFtOXT0w''@;'; put 'put ''PT1ndFsyXSxUdFtzdF09Z3RbMV0sTHQuYXBwbHkoVHQsZ3QpfSksS3Q9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx1dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksV3Q9ZHQoRHQsInNlbmQiLCgpPT5mdW5jdGlvbihUdCxndCl7aWYoITA9PT1CLmN1cnJlbnRbdXRdfHxUdFtOXSlyZXR1cm4g''@;'; put 'put ''V3QuYXBwbHkoVHQsZ3QpO3tjb25zdCBQdD17dGFyZ2V0OlR0LHVybDpUdFtzdF0saXNQZXJpb2RpYzohMSxhcmdzOmd0LGFib3J0ZWQ6ITF9LGVuPUYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLFksUHQsdnQsa3QpO1R0JiYhMD09PVR0W2x0XSYmIVB0LmFib3J0ZWQmJmVuLnN0YXRlPT09VnQm''@;'; put 'put ''JmVuLmludm9rZSgpfX0pLEl0PWR0KER0LCJhYm9ydCIsKCk9PmZ1bmN0aW9uKFR0LGd0KXtjb25zdCBQdD1mdW5jdGlvbiBCdChUdCl7cmV0dXJuIFR0W09dfShUdCk7aWYoUHQmJiJzdHJpbmciPT10eXBlb2YgUHQudHlwZSl7aWYobnVsbD09UHQuY2FuY2VsRm58fFB0LmRhdGEmJlB0LmRh''@;'; put 'put ''dGEuYWJvcnRlZClyZXR1cm47UHQuem9uZS5jYW5jZWxUYXNrKFB0KX1lbHNlIGlmKCEwPT09Qi5jdXJyZW50W0t0XSlyZXR1cm4gSXQuYXBwbHkoVHQsZ3QpfSl9KFIpO2NvbnN0IE89eCgieGhyVGFzayIpLE49eCgieGhyU3luYyIpLEo9eCgieGhyTGlzdGVuZXIiKSxvdD14KCJ4aHJTY2hl''@;'; put 'put ''ZHVsZWQiKSxzdD14KCJ4aHJVUkwiKSxsdD14KCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksUy5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixSPT57Ui5uYXZpZ2F0b3ImJlIubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbiBiKFMsUil7Y29uc3QgQj1TLmNvbnN0cnVjdG9y''@;'; put 'put ''Lm5hbWU7Zm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspe2NvbnN0IE49UltPXSxKPVNbTl07aWYoSil7aWYoIUwoZShTLE4pKSljb250aW51ZTtTW05dPShzdD0+e2NvbnN0IGx0PWZ1bmN0aW9uKCl7cmV0dXJuIHN0LmFwcGx5KHRoaXMsVChhcmd1bWVudHMsQisiLiIrTikpfTtyZXR1cm4g''@;'; put 'put ''T3QobHQsc3QpLGx0fSkoSil9fX0oUi5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksUy5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsKFIsQik9PntmdW5jdGlvbiBPKE4pe3JldHVybiBmdW5jdGlvbihK''@;'; put 'put ''KXtoKFIsTikuZm9yRWFjaChzdD0+e2NvbnN0IGx0PVIuUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKGx0KXtjb25zdCBTdD1uZXcgbHQoTix7cHJvbWlzZTpKLnByb21pc2UscmVhc29uOkoucmVqZWN0aW9ufSk7c3QuaW52b2tlKFN0KX19KX19Ui5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihC''@;'; put 'put ''W3goInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPU8oInVuaGFuZGxlZHJlamVjdGlvbiIpLEJbeCgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09TygicmVqZWN0aW9uaGFuZGxlZCIpKX0pLFMuX19sb2FkX3BhdGNoKCJxdWV1ZU1pY3JvdGFzayIsKFIsQixPKT0+eyFm''@;'; put 'put ''dW5jdGlvbiBvKFMsUil7Ui5wYXRjaE1ldGhvZChTLCJxdWV1ZU1pY3JvdGFzayIsQj0+ZnVuY3Rpb24oTyxOKXtab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInF1ZXVlTWljcm90YXNrIixOWzBdKX0pfShSLE8pfSl9KFJuKX0sOTI1Njg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijtj''@;'; put 'put ''b25zdCBuPXQoODI1NzQpO0ludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdFRvUGFydHM9ZnVuY3Rpb24oSSl7bGV0IE09dGhpcy5yZXNvbHZlZE9wdGlvbnMoKSxUPWZ1bmN0aW9uIEMoSSl7dmFyIFosbnQsdHQseXQsbXQsTT1JLmF2YWlsYWJsZUZvcm1hdHMsVD1JLnRpbWVG''@;'; put 'put ''b3JtYXRzLGI9SS5kYXRlRm9ybWF0cyxMPUkubWVkaXVtLFU9W10scT1bXSxYPVtdO2Z1bmN0aW9uIGV0KFYsZnQpe3ZhciBkdD1uZXcgQXJyYXkoKFYubWF0Y2goL00vZyl8fFtdKS5sZW5ndGgrMSksYnQ9bmV3IEFycmF5KChWLm1hdGNoKC9FL2cpfHxbXSkubGVuZ3RoKzEpO3JldHVybiBk''@;'; put 'put ''dC5sZW5ndGg+MiYmKGZ0PWZ0LnJlcGxhY2UoLyhNfEwpKy8sZHQuam9pbigiJDEiKSkpLGJ0Lmxlbmd0aD4yJiYoZnQ9ZnQucmVwbGFjZSgvKFtFZWNdKSsvLGJ0LmpvaW4oIiQxIikpKSxmdH1mb3IoWiBpbiBNKU0uaGFzT3duUHJvcGVydHkoWikmJigodHQ9dyhudD1ldChaLE1bWl0pKSkm''@;'; put 'put ''JihVLnB1c2godHQpLEYodHQpP1gucHVzaChudCk6eCh0dCkmJnEucHVzaChudCkpKTtmb3IoeXQ9MDt5dDxxLmxlbmd0aDt5dCs9MSlmb3IobXQ9MDttdDxYLmxlbmd0aDttdCs9MSkodHQ9dyhudD1MLnJlcGxhY2UoInswfSIscVt5dF0pLnJlcGxhY2UoInsxfSIsWFttdF0pLnJlcGxhY2Uo''@;'; put 'put ''L15bLFxzXSt8Wyxcc10rJC9naSwiIikpKSYmVS5wdXNoKHR0KTtmb3IoWiBpbiBUKVQuaGFzT3duUHJvcGVydHkoWikmJigodHQ9dyhudD1ldChaLFRbWl0pKSkmJlUucHVzaCh0dCkpO2ZvcihaIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShaKSYmKCh0dD13KG50PWV0KFosYltaXSkpKSYmVS5w''@;'; put 'put ''dXNoKHR0KSk7cmV0dXJuIFV9KG4uZGF0ZS5mb3JtYXRzKSxiPXt9O2Zvcih2YXIgTCBpbiBmKXMuY2FsbChmLEwpJiYoYlsiW1siK0wrIl1dIl09TVtMXSk7bGV0IFo9ZnVuY3Rpb24gaShJLE0sVCl7Zm9yKHZhciBxLG10PS0xLzAsWD0wLGV0PU0ubGVuZ3RoO1g8ZXQ7KXt2YXIgVj1NW1hd''@;'; put 'put ''LGZ0PTA7Zm9yKHZhciBkdCBpbiBmKWlmKHMuY2FsbChmLGR0KSl7dmFyIGJ0PUlbIltbIitkdCsiXV0iXSxPdD1zLmNhbGwoVixkdCk/VltkdF06dm9pZCAwO2lmKHZvaWQgMD09PWJ0JiZ2b2lkIDAhPT1PdClmdC09MjA7ZWxzZSBpZih2b2lkIDAhPT1idCYmdm9pZCAwPT09T3QpZnQtPTEy''@;'; put 'put ''MDtlbHNle3ZhciBOdD1bIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25nIl0sWXQ9YS5jYWxsKE50LGJ0KSxvbj1hLmNhbGwoTnQsT3QpLEd0PU1hdGgubWF4KE1hdGgubWluKG9uLVl0LDIpLC0yKTtUJiYoKCJudW1lcmljIj09PWJ0fHwiMi1kaWdpdCI9PT1idCkm''@;'; put 'put ''JiJudW1lcmljIiE9PU90JiYiMi1kaWdpdCIhPT1PdHx8Im51bWVyaWMiIT09YnQmJiIyLWRpZ2l0IiE9PWJ0JiYoIjItZGlnaXQiPT09T3R8fCJudW1lcmljIj09PU90KSkmJihmdC09OCksMj09PUd0P2Z0LT02OjE9PT1HdD9mdC09MzotMT09PUd0P2Z0LT02Oi0yPT09R3QmJihmdC09OCl9''@;'; put 'put ''fWZ0Pm10JiYobXQ9ZnQscT1WKSxYKyt9cmV0dXJuIHF9KGIsVCk7cmV0dXJuIGZ1bmN0aW9uIGUoSSxNKXtpZighaXNGaW5pdGUoTSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdmFsaWQgZGF0ZSBwYXNzZWQgdG8gZm9ybWF0VG9QYXJ0cyIpO2Zvcih2YXIgcSxUPSJlbi1VUyIs''@;'; put 'put ''Yj1JLnBhdHRlcm4sWj0obmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7dXNlR3JvdXBpbmc6ITF9KSxuZXcgSW50bC5OdW1iZXJGb3JtYXQoW1RdLHttaW5pbXVtSW50ZWdlckRpZ2l0czoyLHVzZUdyb3VwaW5nOiExfSksZnVuY3Rpb24gdihJLE0sVCl7dmFyIGI9bmV3IERhdGUoSSksTD0i''@;'; put 'put ''Z2V0IisoVHx8IiIpO3JldHVybnsiW1t3ZWVrZGF5XV0iOmJbTCsiRGF5Il0oKSwiW1tlcmFdXSI6KyhiW0wrIkZ1bGxZZWFyIl0oKT49MCksIltbeWVhcl1dIjpiW0wrIkZ1bGxZZWFyIl0oKSwiW1ttb250aF1dIjpiW0wrIk1vbnRoIl0oKSwiW1tkYXldXSI6YltMKyJEYXRlIl0oKSwiW1to''@;'; put 'put ''b3VyXV0iOmJbTCsiSG91cnMiXSgpLCJbW21pbnV0ZV1dIjpiW0wrIk1pbnV0ZXMiXSgpLCJbW3NlY29uZF1dIjpiW0wrIlNlY29uZHMiXSgpLCJbW2luRFNUXV0iOiExfX0oTSkpLG50PSJncmVnb3J5Iix0dD1uLmRhdGUuY2FsZW5kYXJzLHl0PVtdLG10PS97KFtefV0rKX0vZyxYPTA7bnVs''@;'; put 'put ''bCE9PShxPW10LmV4ZWMoYikpOyl7WDxxLmluZGV4JiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOmIuc3Vic3RyKFgscS5pbmRleC1YKX0pO3ZhciBldD1xWzFdLFY9bnVsbDtpZihzLmNhbGwoSSxldCkpe3ZhciBmdCxkdD1JW2V0XSxidD1aWyJbWyIrZXQrIl1dIl07aWYoInll''@;'; put 'put ''YXIiPT09ZXQmJmJ0PD0wP2J0PTEtYnQ6Im1vbnRoIj09PWV0P2J0Kys6ImhvdXIiPT09ZXQmJiEwPT09SVsiW1tob3VyMTJdXSJdJiYoZnQ9KGJ0JT0xMikhPT1aWyJbWyIrZXQrIl1dIl0sMD09PWJ0JiYhMD09PUlbIltbaG91ck5vMF1dIl0mJihidD0xMikpLCJudW1lcmljIj09PWR0KVY9''@;'; put 'put ''YnQ7ZWxzZSBpZigiMi1kaWdpdCI9PT1kdCkoVj1idCkubGVuZ3RoPjImJihWPVYuc2xpY2UoLTIpKTtlbHNlIGlmKGR0IGluIHUpc3dpdGNoKGV0KXtjYXNlIm1vbnRoIjpWPXAodHQsbnQsIm1vbnRocyIsZHQsWlsiW1siK2V0KyJdXSJdKTticmVhaztjYXNlIndlZWtkYXkiOnRyeXtWPXAo''@;'; put 'put ''dHQsbnQsImRheXMiLGR0LFpbIltbIitldCsiXV0iXSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3ZWVrZGF5IGRhdGEgZm9yIGxvY2FsZSAiK1QpfWJyZWFrO2Nhc2UidGltZVpvbmVOYW1lIjpWPSIiO2JyZWFrO2RlZmF1bHQ6Vj1aWyJbWyIrZXQrIl1dIl19fWVs''@;'; put 'put ''c2UiYW1wbSI9PT1ldCYmKFY9cCh0dCxudCwiZGF5UGVyaW9kcyIsZnQ/InBtIjoiYW0iKSk7bnVsbCE9PVYmJih5dC5wdXNoKHt0eXBlOnFbMV0sdmFsdWU6Vn0pLFg9cS5pbmRleCtxWzBdLmxlbmd0aCl9cmV0dXJuIFg8Yi5sZW5ndGgmJnl0LnB1c2goe3R5cGU6InNlcGFyYXRvciIsdmFs''@;'; put 'put ''dWU6Yi5zdWJzdHIoWCl9KSx5dH0oWixJKX07dmFyIHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLHU9T2JqZWN0LmNyZWF0ZShudWxsLHtuYXJyb3c6e30sc2hvcnQ6e30sbG9uZzp7fX0pLGY9e3dlZWtkYXk6WyJuYXJyb3ciLCJz''@;'; put 'put ''aG9ydCIsImxvbmciXSxlcmE6WyJuYXJyb3ciLCJzaG9ydCIsImxvbmciXSx5ZWFyOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxtb250aDpbIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZGF5OlsiMi1kaWdpdCIsIm51bWVyaWMiXSxob3VyOlsiMi1kaWdpdCIs''@;'; put 'put ''Im51bWVyaWMiXSxtaW51dGU6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHNlY29uZDpbIjItZGlnaXQiLCJudW1lcmljIl0sdGltZVpvbmVOYW1lOlsic2hvcnQiLCJsb25nIl19O2Z1bmN0aW9uIHAoSSxNLFQsYixMKXt2YXIgVT1JW01dJiZJW01dW1RdP0lbTV1bVF06SS5ncmVnb3J5W1RdLFo9''@;'; put 'put ''e25hcnJvdzpbInNob3J0IiwibG9uZyJdLHNob3J0OlsibG9uZyIsIm5hcnJvdyJdLGxvbmc6WyJzaG9ydCIsIm5hcnJvdyJdfSxudD1zLmNhbGwoVSxiKT9VW2JdOnMuY2FsbChVLFpbYl1bMF0pP1VbWltiXVswXV06VVtaW2JdWzFdXTtyZXR1cm4gbnVsbCE9TD9udFtMXTpudH12YXIgZD0v''@;'; put 'put ''KD86W0VlY117MSw2fXxHezEsNX18KD86W3lZdV0rfFV7MSw1fSl8W01MXXsxLDV9fGR7MSwyfXxhfFtoa0hLXXsxLDJ9fG17MSwyfXxzezEsMn18ensxLDR9KSg/PShbXiddKidbXiddKicpKlteJ10qJCkvZyxtPS9bUXhYVk92WkFTamdGRHdXSVFxSF0vLEU9e21vbnRoOlsibnVtZXJpYyIs''@;'; put 'put ''IjItZGlnaXQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSx3ZWVrZGF5Olsic2hvcnQiLCJzaG9ydCIsInNob3J0IiwibG9uZyIsIm5hcnJvdyJdLGVyYTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXX0sZz1bIndlZWtkYXkiLCJlcmEiLCJ5ZWFyIiwibW9udGgi''@;'; put 'put ''LCJkYXkiXSxEPVsiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRpbWVab25lTmFtZSJdO2Z1bmN0aW9uIEYoSSl7Zm9yKHZhciBNPTA7TTxELmxlbmd0aDtNKz0xKWlmKEkuaGFzT3duUHJvcGVydHkoRFtNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geChJKXtmb3IodmFyIE09MDtN''@;'; put 'put ''PGcubGVuZ3RoO00rPTEpaWYoSS5oYXNPd25Qcm9wZXJ0eShnW01dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB3KEkpe2lmKCFtLnRlc3QoSSkpe3ZhciBNPXt9O3JldHVybiBNLnBhdHRlcm49SS5yZXBsYWNlKGQsZnVuY3Rpb24oVCl7c3dpdGNoKFQuY2hhckF0KDApKXtjYXNlIkUi''@;'; put 'put ''OmNhc2UiZSI6Y2FzZSJjIjpyZXR1cm4gTS53ZWVrZGF5PUUud2Vla2RheVtULmxlbmd0aC0xXSwie3dlZWtkYXl9IjtjYXNlIkciOnJldHVybiBNLmVyYT1FLmVyYVtULmxlbmd0aC0xXSwie2VyYX0iO2Nhc2UieSI6Y2FzZSJZIjpjYXNlInUiOmNhc2UiVSI6cmV0dXJuIE0ueWVhcj0yPT09''@;'; put 'put ''VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3llYXJ9IjtjYXNlIk0iOmNhc2UiTCI6cmV0dXJuIE0ubW9udGg9RS5tb250aFtULmxlbmd0aC0xXSwie21vbnRofSI7Y2FzZSJkIjpyZXR1cm4gTS5kYXk9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntkYXl9IjtjYXNl''@;'; put 'put ''ImEiOnJldHVybiJ7YW1wbX0iO2Nhc2UiaCI6Y2FzZSJIIjpjYXNlImsiOmNhc2UiSyI6cmV0dXJuIE0uaG91cj0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie2hvdXJ9IjtjYXNlIm0iOnJldHVybiBNLm1pbnV0ZT0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwi''@;'; put 'put ''e21pbnV0ZX0iO2Nhc2UicyI6cmV0dXJuIE0uc2Vjb25kPTI9PT1ULmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7c2Vjb25kfSI7Y2FzZSJ6IjpyZXR1cm4gTS50aW1lWm9uZU5hbWU9VC5sZW5ndGg8ND8ic2hvcnQiOiJsb25nIiwie3RpbWVab25lTmFtZX0ifX0pLE0ucGF0dGVybj1N''@;'; put 'put ''LnBhdHRlcm4ucmVwbGFjZSgvJyhbXiddKiknL2csZnVuY3Rpb24oVCxiKXtyZXR1cm4gYnx8IicifSksTS5wYXR0ZXJuLmluZGV4T2YoInthbXBtfSIpPi0xJiYoTS5ob3VyMTI9ITAsTS5wYXR0ZXJuMTI9TS5wYXR0ZXJuLE0ucGF0dGVybj1NLnBhdHRlcm4ucmVwbGFjZSgie2FtcG19Iiwi''@;'; put 'put ''IikucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpKSxNfX19LDY2Mzc0OihjLGwsdCk9Pnt0KDgyOTc1KSx0KDQ3ODk5KSx0KDkzODYzKSx0KDQ1NzApLHQoOTY1MTEpLHQoOTU4NTMpLHQoOTcwNzUpLHQoMzUwNCksdCg1NDkxMyksdCgzOTgxMyksdCg4''@;'; put 'put ''NjUxMSksdCg1ODg4OCksdCg4MTQ0OSksdCg0Nzg3NCksdCgzNDYwOSksdCgzMzcwNiksdCgxOTYyMCksdCg1Nzc2MiksdCgxNTE0NCksdCg3NTM2OSksdCg3NjIwOSksdCg5NTE2NSksdCg1NjA5NCl9LDMyODk5OihjLGwsdCk9Pnt0KDEzMjkyKSx0KDUyMzQ2KSx0KDk0MjkpLHQoNzg0OSks''@;'; put 'put ''dCg0ODk1MSksYy5leHBvcnRzPURhdGV9LDM5MjcxOihjLGwsdCk9Pnt0KDY1MDQ5KSx0KDcwNDg5KSx0KDk1NTAyKSx0KDU2MDk0KX0sMjI5MTM6KGMsbCx0KT0+e3QoMTc0ODIpLHQoODI5NzUpLHQoMzU4OTApLHQoOTMzODYpLHQoNTYwOTQpfSw4ODAyNTooYyxsLHQpPT57dCg3NjY0OCks''@;'; put 'put ''dCg1NTc3MSksdCg4MjM5MiksdCg3MjMzNSksdCg3NDg5NiksdCg5NDUyMSksdCgyOTE0NyksdCg0MTMxOCksdCg4NDM1MiksdCgxNTMyNyksdCg1NzUwOSksdCgxNTkwOSksdCg3OTU4NCksdCg0MDM0NSksdCg5OTEzNCksdCg2NzkwMSksdCg0NjU5MiksdCg1NjA5NCl9LDE1NjI2OihjLGws''@;'; put 'put ''dCk9Pnt0KDY0NTA5KSx0KDM3NzI3KSx0KDY3MDEpLHQoMzQ0MTkpLHQoOTE5MzMpLHQoNTU1MzgpLHQoMzk0OTcpLHQoNDEwNCksdCg2MDIxMCksdCg1NjU3NiksdCg4NDQzNyksdCg4ODA1MCksdCg1NjA5NCl9LDU0OTQwOihjLGwsdCk9Pnt0KDk5NjUwKSx0KDkzNSksdCg2NjA2NCksdCg4''@;'; put 'put ''OTQ0OCksdCgyMjY0MiksdCg1M2UzKSx0KDg4NjQ3KSx0KDgxODk1KSx0KDQ4MjM2KSx0KDczODIyKSx0KDE1NTcyKSx0KDY5MzE4KSx0KDY1MDMyKSx0KDc5MDczKSx0KDExNDMwKSx0KDM4NDUxKSx0KDE4MTMyKSx0KDE3NDgyKSx0KDU2MDk0KX0sMjYyMDM6KGMsbCx0KT0+e3QoOTYxMDgp''@;'; put 'put ''LHQoNTYwOTQpfSw1MjQ0NDooYyxsLHQpPT57dCg5MDU3MSksdCg1NjA5NCl9LDY1ODQ2OihjLGwsdCk9Pnt0KDcxMDMpLHQoODI1ODYpLHQoOTI1NTIpLHQoNDM3NiksdCg3NTE1MyksdCgxMTg3OSksdCg1MjY1MCksdCgzMTEwNCksdCgyMTg4MyksdCgzNTQzMyksdCg1NWUzKSx0KDE1OTMy''@;'; put 'put ''KSx0KDU0NDMpLHQoMjYzMTYpLHQoNTYwOTQpfSw0MjQ2OihjLGwsdCk9Pnt0KDgzMDEpLHQoOTQxMTYpLHQoNzg2MDQpLHQoMzk2MzgpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDEwNzQzOihjLGwsdCk9Pnt0KDE3NDgyKSx0KDgyOTc1KSx0KDM1ODkw''@;'; put 'put ''KSx0KDcxNjMyKSx0KDU2MDk0KX0sNTY0NDI6KGMsbCx0KT0+e3QoMTIyMjApLHQoMjM0ODMpLHQoMjA5NTcpLHQoODI5NzUpLHQoMzI0MDUpLHQoMTcyMjQpLHQoMjg4NzIpLHQoNDQ4OTQpLHQoMTAxNzcpLHQoNjQ5NzkpLHQoODkwMTEpLHQoNTQ1OTEpLHQoNDczMzQpLHQoNzA4MyksdCg2''@;'; put 'put ''OTIxMyksdCgzODQzNyksdCg2MjIyMCksdCg3NjU0OSksdCg0MjgxOCksdCgyODU0MyksdCgzNTU5KSx0KDg0MTUzKSx0KDQwNDApLHQoNjgzMDUpLHQoNzQ3MDEpLHQoMjAzNDEpLHQoNTYwOTQpfSwxODg4MzooYyxsLHQpPT57dCg5OTY1MCksdCgxNzQ4MiksdCg1NjA5NCl9LDkzNTM6KGMs''@;'; put 'put ''bCx0KT0+e3QoNzc0OTEpLHQoNzQ5MDcpLHQoNzkxMDApLHQoMTkyNjkpLHQoOTEzMTkpLHQoNzk3MzIpLHQoMTE3NiksdCgzMTA3KSx0KDYxNjkxKSx0KDU2MDk0KX0sNjMzODc6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBUeXBlRXJy''@;'; put 'put ''b3IobCsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBsfX0sMTUxMjI6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmIk51bWJlciIhPW4oZSkpdGhyb3cgVHlwZUVycm9yKHMpO3JldHVybitlfX0sODgx''@;'; put 'put ''ODQ6KGMsbCx0KT0+e3ZhciBuPXQoNjc1NzQpKCJ1bnNjb3BhYmxlcyIpLGU9QXJyYXkucHJvdG90eXBlO251bGw9PWVbbl0mJnQoMzMzNDEpKGUsbix7fSksYy5leHBvcnRzPWZ1bmN0aW9uKHMpe2Vbbl1bc109ITB9fSwyODgyODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTEy''@;'; put 'put ''MTIpKCEwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLGEpe3JldHVybiBzKyhhP24oZSxzKS5sZW5ndGg6MSl9fSwxNjQ0MDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCxuLGUpe2lmKCEobCBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1lJiZlIGluIGwpdGhyb3cgVHlwZUVycm9yKG4rIjog''@;'; put 'put ''aW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGx9fSw0MjI4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sODQ0Mzg6KGMsbCx0KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgbj10KDE4MjcwKSxlPXQoNzAxNTcpLHM9dCg4MTQ4NSk7Yy5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHUsZil7dmFyIGk9bih0aGlzKSx2PXMoaS5sZW5ndGgpLHA9ZSh1LHYpLGQ9ZShmLHYpLG09YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1sy''@;'; put 'put ''XTp2b2lkIDAsRT1NYXRoLm1pbigodm9pZCAwPT09bT92OmUobSx2KSktZCx2LXApLGc9MTtmb3IoZDxwJiZwPGQrRSYmKGc9LTEsZCs9RS0xLHArPUUtMSk7RS0tID4wOylkIGluIGk/aVtwXT1pW2RdOmRlbGV0ZSBpW3BdLHArPWcsZCs9ZztyZXR1cm4gaX19LDM1NTY0OihjLGwsdCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCgxODI3MCksZT10KDcwMTU3KSxzPXQoODE0ODUpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXtmb3IodmFyIGY9bih0aGlzKSxpPXMoZi5sZW5ndGgpLHY9YXJndW1lbnRzLmxlbmd0aCxwPWUodj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaSksZD12PjI/YXJndW1l''@;'; put 'put ''bnRzWzJdOnZvaWQgMCxtPXZvaWQgMD09PWQ/aTplKGQsaSk7bT5wOylmW3ArK109dTtyZXR1cm4gZn19LDgwOTU2OihjLGwsdCk9Pnt2YXIgbj10KDQ4NzkwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXt2YXIgYT1bXTtyZXR1cm4gbihlLCExLGEucHVzaCxhLHMpLGF9fSw2MTQ2NDooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg1NzIyMSksZT10KDgxNDg1KSxzPXQoNzAxNTcpO2MuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24odSxmLGkpe3ZhciBtLHY9bih1KSxwPWUodi5sZW5ndGgpLGQ9cyhpLHApO2lmKGEmJmYhPWYpe2Zvcig7cD5kOylpZigobT12W2QrK10pIT1tKXJl''@;'; put 'put ''dHVybiEwfWVsc2UgZm9yKDtwPmQ7ZCsrKWlmKChhfHxkIGluIHYpJiZ2W2RdPT09ZilyZXR1cm4gYXx8ZHx8MDtyZXR1cm4hYSYmLTF9fX0sNjYxNzk6KGMsbCx0KT0+e3ZhciBuPXQoMzUwNTIpLGU9dCg2MTI0OSkscz10KDE4MjcwKSxhPXQoODE0ODUpLHU9dCg5MzE5MSk7Yy5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKGYsaSl7dmFyIHY9MT09ZixwPTI9PWYsZD0zPT1mLG09ND09ZixFPTY9PWYsZz01PT1mfHxFLEQ9aXx8dTtyZXR1cm4gZnVuY3Rpb24oRix4LHcpe2Zvcih2YXIgVSxaLEM9cyhGKSxJPWUoQyksTT1uKHgsdywzKSxUPWEoSS5sZW5ndGgpLGI9MCxMPXY/RChGLFQpOnA/RChG''@;'; put 'put ''LDApOnZvaWQgMDtUPmI7YisrKWlmKChnfHxiIGluIEkpJiYoWj1NKFU9SVtiXSxiLEMpLGYpKWlmKHYpTFtiXT1aO2Vsc2UgaWYoWilzd2l0Y2goZil7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gVTtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOkwucHVzaChVKX1lbHNlIGlmKG0pcmV0''@;'; put 'put ''dXJuITE7cmV0dXJuIEU/LTE6ZHx8bT9tOkx9fX0sNjU0MzooYyxsLHQpPT57dmFyIG49dCg2MzM4NyksZT10KDE4MjcwKSxzPXQoNjEyNDkpLGE9dCg4MTQ4NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsZixpLHYscCl7bihmKTt2YXIgZD1lKHUpLG09cyhkKSxFPWEoZC5sZW5ndGgpLGc9cD9F''@;'; put 'put ''LTE6MCxEPXA/LTE6MTtpZihpPDIpZm9yKDs7KXtpZihnIGluIG0pe3Y9bVtnXSxnKz1EO2JyZWFrfWlmKGcrPUQscD9nPDA6RTw9Zyl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3A/Zz49MDpFPmc7Zys9RClnIGlu''@;'; put 'put ''IG0mJih2PWYodixtW2ddLGcsZCkpO3JldHVybiB2fX0sNjM2MDY6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCg3Nzk4MSkscz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgdTtyZXR1cm4gZShhKSYmKCJmdW5jdGlvbiI9PXR5cGVvZih1PWEuY29u''@;'; put 'put ''c3RydWN0b3IpJiYodT09PUFycmF5fHxlKHUucHJvdG90eXBlKSkmJih1PXZvaWQgMCksbih1KSYmbnVsbD09PSh1PXVbc10pJiYodT12b2lkIDApKSx2b2lkIDA9PT11P0FycmF5OnV9fSw5MzE5MTooYyxsLHQpPT57dmFyIG49dCg2MzYwNik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0''@;'; put 'put ''dXJuIG5ldyhuKGUpKShzKX19LDE1NTM4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg2MzM4NyksZT10KDQzMzA1KSxzPXQoMjQ4NzcpLGE9W10uc2xpY2UsdT17fTtjLmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odil7dmFyIHA9bih0aGlzKSxkPWEuY2FsbChhcmd1''@;'; put 'put ''bWVudHMsMSksbT1mdW5jdGlvbigpe3ZhciBFPWQuY29uY2F0KGEuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/ZnVuY3Rpb24oaSx2LHApe2lmKCEodiBpbiB1KSl7Zm9yKHZhciBkPVtdLG09MDttPHY7bSsrKWRbbV09ImFbIittKyJdIjt1W3ZdPUZ1bmN0aW9u''@;'; put 'put ''KCJGLGEiLCJyZXR1cm4gbmV3IEYoIitkLmpvaW4oIiwiKSsiKSIpfXJldHVybiB1W3ZdKGkscCl9KHAsRS5sZW5ndGgsRSk6cyhwLEUsdil9O3JldHVybiBlKHAucHJvdG90eXBlKSYmKG0ucHJvdG90eXBlPXAucHJvdG90eXBlKSxtfX0sMzQ4NDg6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkp''@;'; put 'put ''LGU9dCg2NzU3NCkoInRvU3RyaW5nVGFnIikscz0iQXJndW1lbnRzIj09bihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgZixpLHY7cmV0dXJuIHZvaWQgMD09PXU/IlVuZGVmaW5lZCI6bnVsbD09PXU/Ik51bGwiOiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YoaT1mdW5jdGlvbih1LGYpe3RyeXtyZXR1cm4gdVtmXX1jYXRjaHt9fShmPU9iamVjdCh1KSxlKSk/aTpzP24oZik6Ik9iamVjdCI9PSh2PW4oZikpJiYiZnVuY3Rpb24iPT10eXBlb2YgZi5jYWxsZWU/IkFyZ3VtZW50cyI6dn19LDU1MDg5OmM9Pnt2YXIgbD17fS50b1N0cmluZztj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGwuY2FsbCh0KS5zbGljZSg4LC0xKX19LDM2MTk3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Nzk2NykuZixlPXQoODQ3MTkpLHM9dCg5NjA2NSksYT10KDM1MDUyKSx1PXQoMTY0NDApLGY9dCg0ODc5MCksaT10KDk4MTc1KSx2''@;'; put 'put ''PXQoNzQ5NzApLHA9dCg1NTc2MiksZD10KDE3NjMpLG09dCgxMjk4OCkuZmFzdEtleSxFPXQoMTI4ODgpLGc9ZD8iX3MiOiJzaXplIixEPWZ1bmN0aW9uKEYseCl7dmFyIEMsdz1tKHgpO2lmKCJGIiE9PXcpcmV0dXJuIEYuX2lbd107Zm9yKEM9Ri5fZjtDO0M9Qy5uKWlmKEMuaz09eClyZXR1''@;'; put 'put ''cm4gQ307Yy5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihGLHgsdyxDKXt2YXIgST1GKGZ1bmN0aW9uKE0sVCl7dShNLEkseCwiX2kiKSxNLl90PXgsTS5faT1lKG51bGwpLE0uX2Y9dm9pZCAwLE0uX2w9dm9pZCAwLE1bZ109MCxudWxsIT1UJiZmKFQsdyxNW0NdLE0pfSk7cmV0''@;'; put 'put ''dXJuIHMoSS5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBUPUUodGhpcyx4KSxiPVQuX2ksTD1ULl9mO0w7TD1MLm4pTC5yPSEwLEwucCYmKEwucD1MLnAubj12b2lkIDApLGRlbGV0ZSBiW0wuaV07VC5fZj1ULl9sPXZvaWQgMCxUW2ddPTB9LGRlbGV0ZTpmdW5jdGlvbihN''@;'; put 'put ''KXt2YXIgVD1FKHRoaXMseCksYj1EKFQsTSk7aWYoYil7dmFyIEw9Yi5uLFU9Yi5wO2RlbGV0ZSBULl9pW2IuaV0sYi5yPSEwLFUmJihVLm49TCksTCYmKEwucD1VKSxULl9mPT1iJiYoVC5fZj1MKSxULl9sPT1iJiYoVC5fbD1VKSxUW2ddLS19cmV0dXJuISFifSxmb3JFYWNoOmZ1bmN0aW9u''@;'; put 'put ''KFQpe0UodGhpcyx4KTtmb3IodmFyIEwsYj1hKFQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7TD1MP0wubjp0aGlzLl9mOylmb3IoYihMLnYsTC5rLHRoaXMpO0wmJkwucjspTD1MLnB9LGhhczpmdW5jdGlvbihUKXtyZXR1cm4hIUQoRSh0aGlzLHgpLFQpfX0p''@;'; put 'put ''LGQmJm4oSS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLHgpW2ddfX0pLEl9LGRlZjpmdW5jdGlvbihGLHgsdyl7dmFyIEksTSxDPUQoRix4KTtyZXR1cm4gQz9DLnY9dzooRi5fbD1DPXtpOk09bSh4LCEwKSxrOngsdjp3LHA6ST1GLl9sLG46dm9pZCAw''@;'; put 'put ''LHI6ITF9LEYuX2Z8fChGLl9mPUMpLEkmJihJLm49QyksRltnXSsrLCJGIiE9PU0mJihGLl9pW01dPUMpKSxGfSxnZXRFbnRyeTpELHNldFN0cm9uZzpmdW5jdGlvbihGLHgsdyl7aShGLHgsZnVuY3Rpb24oQyxJKXt0aGlzLl90PUUoQyx4KSx0aGlzLl9rPUksdGhpcy5fbD12b2lkIDB9LGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBDPXRoaXMsST1DLl9rLE09Qy5fbDtNJiZNLnI7KU09TS5wO3JldHVybiBDLl90JiYoQy5fbD1NPU0/TS5uOkMuX3QuX2YpP3YoMCwia2V5cyI9PUk/TS5rOiJ2YWx1ZXMiPT1JP00udjpbTS5rLE0udl0pOihDLl90PXZvaWQgMCx2KDEpKX0sdz8iZW50cmllcyI6''@;'; put 'put ''InZhbHVlcyIsIXcsITApLHAoeCl9fX0sOTk4ODI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk2MDY1KSxlPXQoMTI5ODgpLmdldFdlYWsscz10KDQyMjgpLGE9dCg0MzMwNSksdT10KDE2NDQwKSxmPXQoNDg3OTApLGk9dCg2NjE3OSksdj10KDU3OTE3KSxwPXQoMTI4ODgpLGQ9''@;'; put 'put ''aSg1KSxtPWkoNiksRT0wLGc9ZnVuY3Rpb24oeCl7cmV0dXJuIHguX2x8fCh4Ll9sPW5ldyBEKX0sRD1mdW5jdGlvbigpe3RoaXMuYT1bXX0sRj1mdW5jdGlvbih4LHcpe3JldHVybiBkKHguYSxmdW5jdGlvbihDKXtyZXR1cm4gQ1swXT09PXd9KX07RC5wcm90b3R5cGU9e2dldDpmdW5jdGlv''@;'; put 'put ''bih4KXt2YXIgdz1GKHRoaXMseCk7aWYodylyZXR1cm4gd1sxXX0saGFzOmZ1bmN0aW9uKHgpe3JldHVybiEhRih0aGlzLHgpfSxzZXQ6ZnVuY3Rpb24oeCx3KXt2YXIgQz1GKHRoaXMseCk7Qz9DWzFdPXc6dGhpcy5hLnB1c2goW3gsd10pfSxkZWxldGU6ZnVuY3Rpb24oeCl7dmFyIHc9bSh0''@;'; put 'put ''aGlzLmEsZnVuY3Rpb24oQyl7cmV0dXJuIENbMF09PT14fSk7cmV0dXJufncmJnRoaXMuYS5zcGxpY2UodywxKSwhIX53fX0sYy5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih4LHcsQyxJKXt2YXIgTT14KGZ1bmN0aW9uKFQsYil7dShULE0sdywiX2kiKSxULl90PXcsVC5faT1F''@;'; put 'put ''KyssVC5fbD12b2lkIDAsbnVsbCE9YiYmZihiLEMsVFtJXSxUKX0pO3JldHVybiBuKE0ucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24oVCl7aWYoIWEoVCkpcmV0dXJuITE7dmFyIGI9ZShUKTtyZXR1cm4hMD09PWI/ZyhwKHRoaXMsdykpLmRlbGV0ZShUKTpiJiZ2KGIsdGhpcy5faSkmJmRl''@;'; put 'put ''bGV0ZSBiW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24oYil7aWYoIWEoYikpcmV0dXJuITE7dmFyIEw9ZShiKTtyZXR1cm4hMD09PUw/ZyhwKHRoaXMsdykpLmhhcyhiKTpMJiZ2KEwsdGhpcy5faSl9fSksTX0sZGVmOmZ1bmN0aW9uKHgsdyxDKXt2YXIgST1lKHModyksITApO3JldHVybiEwPT09''@;'; put 'put ''ST9nKHgpLnNldCh3LEMpOklbeC5faV09Qyx4fSx1ZnN0b3JlOmd9fSw1ODkzMzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg5MjEyNykscz10KDI4ODU5KSxhPXQoOTYwNjUpLHU9dCgxMjk4OCksZj10KDQ4NzkwKSxpPXQoMTY0NDApLHY9dCg0MzMwNSkscD10''@;'; put 'put ''KDc5NDQ4KSxkPXQoOTg5MzEpLG09dCgzODQ0KSxFPXQoOTg4ODApO2MuZXhwb3J0cz1mdW5jdGlvbihnLEQsRix4LHcsQyl7dmFyIEk9bltnXSxNPUksVD13PyJzZXQiOiJhZGQiLGI9TSYmTS5wcm90b3R5cGUsTD17fSxVPWZ1bmN0aW9uKHEpe3ZhciBYPWJbcV07cyhiLHEsImRlbGV0ZSI9''@;'; put 'put ''PXE/ZnVuY3Rpb24oZXQpe3JldHVybiEoQyYmIXYoZXQpKSYmWC5jYWxsKHRoaXMsMD09PWV0PzA6ZXQpfToiaGFzIj09cT9mdW5jdGlvbihWKXtyZXR1cm4hKEMmJiF2KFYpKSYmWC5jYWxsKHRoaXMsMD09PVY/MDpWKX06ImdldCI9PXE/ZnVuY3Rpb24oVil7cmV0dXJuIEMmJiF2KFYpP3Zv''@;'; put 'put ''aWQgMDpYLmNhbGwodGhpcywwPT09Vj8wOlYpfToiYWRkIj09cT9mdW5jdGlvbihWKXtyZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWKSx0aGlzfTpmdW5jdGlvbihWLGZ0KXtyZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWLGZ0KSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBN''@;'; put 'put ''JiYoQ3x8Yi5mb3JFYWNoJiYhcChmdW5jdGlvbigpeyhuZXcgTSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIFo9bmV3IE0sbnQ9WltUXShDP3t9Oi0wLDEpIT1aLHR0PXAoZnVuY3Rpb24oKXtaLmhhcygxKX0pLHl0PWQoZnVuY3Rpb24ocSl7bmV3IE0ocSl9KSxtdD0hQyYmcChmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgcT1uZXcgTSxYPTU7WC0tOylxW1RdKFgsWCk7cmV0dXJuIXEuaGFzKC0wKX0pO3l0fHwoKE09RChmdW5jdGlvbihxLFgpe2kocSxNLGcpO3ZhciBldD1FKG5ldyBJLHEsTSk7cmV0dXJuIG51bGwhPVgmJmYoWCx3LGV0W1RdLGV0KSxldH0pKS5wcm90b3R5cGU9YixiLmNv''@;'; put 'put ''bnN0cnVjdG9yPU0pLCh0dHx8bXQpJiYoVSgiZGVsZXRlIiksVSgiaGFzIiksdyYmVSgiZ2V0IikpLChtdHx8bnQpJiZVKFQpLEMmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfWVsc2UgTT14LmdldENvbnN0cnVjdG9yKEQsZyx3LFQpLGEoTS5wcm90b3R5cGUsRiksdS5ORUVEPSEwO3JldHVy''@;'; put 'put ''biBtKE0sZyksTFtnXT1NLGUoZS5HK2UuVytlLkYqKE0hPUkpLEwpLEN8fHguc2V0U3Ryb25nKE0sZyx3KSxNfX0sNTYwOTQ6Yz0+e3ZhciBsPWMuZXhwb3J0cz17dmVyc2lvbjoiMi42LjEyIn07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bCl9LDY3MjI3OihjLGwsdCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIG49dCg0Nzk2NyksZT10KDExOTk2KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyxhLHUpe2EgaW4gcz9uLmYocyxhLGUoMCx1KSk6c1thXT11fX0sMzUwNTI6KGMsbCx0KT0+e3ZhciBuPXQoNjMzODcpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsYSl7aWYobihlKSx2b2lkIDA9PT1z''@;'; put 'put ''KXJldHVybiBlO3N3aXRjaChhKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBlLmNhbGwocyx1KX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbih1LGYpe3JldHVybiBlLmNhbGwocyx1LGYpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHUsZixpKXtyZXR1cm4gZS5jYWxsKHMsdSxm''@;'; put 'put ''LGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShzLGFyZ3VtZW50cyl9fX0sNTUzODU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDc5NDQ4KSxlPURhdGUucHJvdG90eXBlLmdldFRpbWUscz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyxhPWZ1bmN0aW9uKHUp''@;'; put 'put ''e3JldHVybiB1Pjk/dToiMCIrdX07Yy5leHBvcnRzPW4oZnVuY3Rpb24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSl8fCFuKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSk/ZnVuY3Rpb24oKXtp''@;'; put 'put ''ZighaXNGaW5pdGUoZS5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgZj10aGlzLGk9Zi5nZXRVVENGdWxsWWVhcigpLHY9Zi5nZXRVVENNaWxsaXNlY29uZHMoKSxwPWk8MD8iLSI6aT45OTk5PyIrIjoiIjtyZXR1cm4gcCsoIjAwMDAwIitN''@;'; put 'put ''YXRoLmFicyhpKSkuc2xpY2UocD8tNjotNCkrIi0iK2EoZi5nZXRVVENNb250aCgpKzEpKyItIithKGYuZ2V0VVRDRGF0ZSgpKSsiVCIrYShmLmdldFVUQ0hvdXJzKCkpKyI6IithKGYuZ2V0VVRDTWludXRlcygpKSsiOiIrYShmLmdldFVUQ1NlY29uZHMoKSkrIi4iKyh2Pjk5P3Y6IjAiK2Eo''@;'; put 'put ''dikpKyJaIn06c30sMjAxMDc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg4MzA0OCkscz0ibnVtYmVyIjtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7aWYoInN0cmluZyIhPT1hJiZhIT09cyYmImRlZmF1bHQiIT09YSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBo''@;'; put 'put ''aW50Iik7cmV0dXJuIGUobih0aGlzKSxhIT1zKX19LDMzNDQ6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsKXtpZihudWxsPT1sKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrbCk7cmV0dXJuIGx9fSwxNzYzOihjLGwsdCk9PntjLmV4cG9ydHM9IXQoNzk0NDgpKGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sNDYwMzQ6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCg2NzUyNikuZG9jdW1lbnQscz1uKGUpJiZuKGUuY3JlYXRlRWxlbWVudCk7Yy5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKGEpe3JldHVybiBzP2UuY3JlYXRlRWxlbWVudChhKTp7fX19LDg2MTQwOmM9PntjLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIu''@;'; put 'put ''c3BsaXQoIiwiKX0sMTU5Njk6KGMsbCx0KT0+e3ZhciBuPXQoNTEzMTEpLGU9dCgxMDYwKSxzPXQoODQ0OSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciB1PW4oYSksZj1lLmY7aWYoZilmb3IodmFyIGQsaT1mKGEpLHY9cy5mLHA9MDtpLmxlbmd0aD5wOyl2LmNhbGwoYSxkPWlbcCsrXSkm''@;'; put 'put ''JnUucHVzaChkKTtyZXR1cm4gdX19LDkyMTI3OihjLGwsdCk9Pnt2YXIgbj10KDY3NTI2KSxlPXQoNTYwOTQpLHM9dCgzMzM0MSksYT10KDI4ODU5KSx1PXQoMzUwNTIpLGY9InByb3RvdHlwZSIsaT1mdW5jdGlvbih2LHAsZCl7dmFyIEksTSxULGIsbT12JmkuRixFPXYmaS5HLEQ9diZpLlAs''@;'; put 'put ''Rj12JmkuQix4PUU/bjp2JmkuUz9uW3BdfHwobltwXT17fSk6KG5bcF18fHt9KVtmXSx3PUU/ZTplW3BdfHwoZVtwXT17fSksQz13W2ZdfHwod1tmXT17fSk7Zm9yKEkgaW4gRSYmKGQ9cCksZClUPSgoTT0hbSYmeCYmdm9pZCAwIT09eFtJXSk/eDpkKVtJXSxiPUYmJk0/dShULG4pOkQmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBUP3UoRnVuY3Rpb24uY2FsbCxUKTpULHgmJmEoeCxJLFQsdiZpLlUpLHdbSV0hPVQmJnModyxJLGIpLEQmJkNbSV0hPVQmJihDW0ldPVQpfTtuLmNvcmU9ZSxpLkY9MSxpLkc9MixpLlM9NCxpLlA9OCxpLkI9MTYsaS5XPTMyLGkuVT02NCxpLlI9MTI4LGMuZXhw''@;'; put 'put ''b3J0cz1pfSwyNTIwMzooYyxsLHQpPT57dmFyIG49dCg2NzU3NCkoIm1hdGNoIik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBzPS8uLzt0cnl7Ii8uLyJbZV0ocyl9Y2F0Y2h7dHJ5e3JldHVybiBzW25dPSExLCEiLy4vIltlXShzKX1jYXRjaHt9fXJldHVybiEwfX0sNzk0NDg6Yz0+e2Mu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbihsKXt0cnl7cmV0dXJuISFsKCl9Y2F0Y2h7cmV0dXJuITB9fX0sNjkyMjg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDk0MTE2KTt2YXIgbj10KDI4ODU5KSxlPXQoMzMzNDEpLHM9dCg3OTQ0OCksYT10KDMzNDQpLHU9dCg2NzU3NCksZj10KDY5NjAwKSxpPXUo''@;'; put 'put ''InNwZWNpZXMiKSx2PSFzKGZ1bmN0aW9uKCl7dmFyIGQ9Ly4vO3JldHVybiBkLmV4ZWM9ZnVuY3Rpb24oKXt2YXIgbT1bXTtyZXR1cm4gbS5ncm91cHM9e2E6IjcifSxtfSwiNyIhPT0iIi5yZXBsYWNlKGQsIiQ8YT4iKX0pLHA9ZnVuY3Rpb24oKXt2YXIgZD0vKD86KS8sbT1kLmV4ZWM7ZC5l''@;'; put 'put ''eGVjPWZ1bmN0aW9uKCl7cmV0dXJuIG0uYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgRT0iYWIiLnNwbGl0KGQpO3JldHVybiAyPT09RS5sZW5ndGgmJiJhIj09PUVbMF0mJiJiIj09PUVbMV19KCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGQsbSxFKXt2YXIgZz11KGQpLEQ9IXMoZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTT17fTtyZXR1cm4gTVtnXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIltkXShNKX0pLEY9RD8hcyhmdW5jdGlvbigpe3ZhciBNPSExLFQ9L2EvO3JldHVybiBULmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gTT0hMCxudWxsfSwic3BsaXQiPT09ZCYmKFQuY29uc3RydWN0b3I9e30s''@;'; put 'put ''VC5jb25zdHJ1Y3RvcltpXT1mdW5jdGlvbigpe3JldHVybiBUfSksVFtnXSgiIiksIU19KTp2b2lkIDA7aWYoIUR8fCFGfHwicmVwbGFjZSI9PT1kJiYhdnx8InNwbGl0Ij09PWQmJiFwKXt2YXIgeD0vLi9bZ10sdz1FKGEsZywiIltkXSxmdW5jdGlvbihULGIsTCxVLFope3JldHVybiBiLmV4''@;'; put 'put ''ZWM9PT1mP0QmJiFaP3tkb25lOiEwLHZhbHVlOnguY2FsbChiLEwsVSl9Ontkb25lOiEwLHZhbHVlOlQuY2FsbChMLGIsVSl9Ontkb25lOiExfX0pLEk9d1sxXTtuKFN0cmluZy5wcm90b3R5cGUsZCx3WzBdKSxlKFJlZ0V4cC5wcm90b3R5cGUsZywyPT1tP2Z1bmN0aW9uKE0sVCl7cmV0dXJu''@;'; put 'put ''IEkuY2FsbChNLHRoaXMsVCl9OmZ1bmN0aW9uKE0pe3JldHVybiBJLmNhbGwoTSx0aGlzKX0pfX19LDExNTg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpO2MuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPW4odGhpcykscz0iIjtyZXR1cm4gZS5nbG9iYWwmJihzKz0iZyIp''@;'; put 'put ''LGUuaWdub3JlQ2FzZSYmKHMrPSJpIiksZS5tdWx0aWxpbmUmJihzKz0ibSIpLGUudW5pY29kZSYmKHMrPSJ1IiksZS5zdGlja3kmJihzKz0ieSIpLHN9fSw0ODc5MDooYyxsLHQpPT57dmFyIG49dCgzNTA1MiksZT10KDk3MzY4KSxzPXQoMTUwOCksYT10KDQyMjgpLHU9dCg4MTQ4NSksZj10''@;'; put 'put ''KDIwNzYyKSxpPXt9LHY9e30scD1jLmV4cG9ydHM9ZnVuY3Rpb24oZCxtLEUsZyxEKXt2YXIgQyxJLE0sVCxGPUQ/ZnVuY3Rpb24oKXtyZXR1cm4gZH06ZihkKSx4PW4oRSxnLG0/MjoxKSx3PTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEYpdGhyb3cgVHlwZUVycm9yKGQrIiBpcyBub3QgaXRl''@;'; put 'put ''cmFibGUhIik7aWYocyhGKSl7Zm9yKEM9dShkLmxlbmd0aCk7Qz53O3crKylpZigoVD1tP3goYShJPWRbd10pWzBdLElbMV0pOngoZFt3XSkpPT09aXx8VD09PXYpcmV0dXJuIFR9ZWxzZSBmb3IoTT1GLmNhbGwoZCk7IShJPU0ubmV4dCgpKS5kb25lOylpZigoVD1lKE0seCxJLnZhbHVlLG0p''@;'; put 'put ''KT09PWl8fFQ9PT12KXJldHVybiBUfTtwLkJSRUFLPWkscC5SRVRVUk49dn0sNDk0NjE6KGMsbCx0KT0+e2MuZXhwb3J0cz10KDQ0NTU2KSgibmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZyIsRnVuY3Rpb24udG9TdHJpbmcpfSw2NzUyNjpjPT57dmFyIGw9Yy5leHBvcnRzPXR5cGVvZiB3aW5k''@;'; put 'put ''b3c8InUiJiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6dHlwZW9mIHNlbGY8InUiJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPWwpfSw1NzkxNzpjPT57dmFyIGw9e30uaGFzT3duUHJvcGVydHk7Yy5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbCh0LG4pfX0sMzMzNDE6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPXQoMTc2Myk/ZnVuY3Rpb24ocyxhLHUpe3JldHVybiBuLmYocyxhLGUoMSx1KSl9OmZ1bmN0aW9uKHMsYSx1KXtyZXR1cm4g''@;'; put 'put ''c1thXT11LHN9fSw2MTMwODooYyxsLHQpPT57dmFyIG49dCg2NzUyNikuZG9jdW1lbnQ7Yy5leHBvcnRzPW4mJm4uZG9jdW1lbnRFbGVtZW50fSwyMjk1NjooYyxsLHQpPT57Yy5leHBvcnRzPSF0KDE3NjMpJiYhdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHQoNDYwMzQpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sOTg4ODA6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCgyNTE3MCkuc2V0O2MuZXhwb3J0cz1mdW5jdGlvbihzLGEsdSl7dmFyIGksZj1hLmNvbnN0cnVjdG9yO3JldHVybiBmIT09''@;'; put 'put ''dSYmImZ1bmN0aW9uIj09dHlwZW9mIGYmJihpPWYucHJvdG90eXBlKSE9PXUucHJvdG90eXBlJiZuKGkpJiZlJiZlKHMsaSksc319LDI0ODc3OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCx0LG4pe3ZhciBlPXZvaWQgMD09PW47c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGU/bCgp''@;'; put 'put ''OmwuY2FsbChuKTtjYXNlIDE6cmV0dXJuIGU/bCh0WzBdKTpsLmNhbGwobix0WzBdKTtjYXNlIDI6cmV0dXJuIGU/bCh0WzBdLHRbMV0pOmwuY2FsbChuLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBlP2wodFswXSx0WzFdLHRbMl0pOmwuY2FsbChuLHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6''@;'; put 'put ''cmV0dXJuIGU/bCh0WzBdLHRbMV0sdFsyXSx0WzNdKTpsLmNhbGwobix0WzBdLHRbMV0sdFsyXSx0WzNdKX1yZXR1cm4gbC5hcHBseShuLHQpfX0sNjEyNDk6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkpO2MuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmpl''@;'; put 'put ''Y3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PW4oZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sMTUwODooYyxsLHQpPT57dmFyIG49dCg2MDkwNiksZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQg''@;'; put 'put ''MCE9PWEmJihuLkFycmF5PT09YXx8c1tlXT09PWEpfX0sNzc5ODE6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkpO2MuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihzKXtyZXR1cm4iQXJyYXkiPT1uKHMpfX0sMzM4NDI6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9TWF0aC5mbG9v''@;'; put 'put ''cjtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIW4oYSkmJmlzRmluaXRlKGEpJiZlKGEpPT09YX19LDQzMzA1OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBsP251bGwhPT1sOiJmdW5jdGlvbiI9PXR5cGVvZiBsfX0sOTU0MTE6KGMsbCx0KT0+''@;'; put 'put ''e3ZhciBuPXQoNDMzMDUpLGU9dCg1NTA4OSkscz10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIHU7cmV0dXJuIG4oYSkmJih2b2lkIDAhPT0odT1hW3NdKT8hIXU6IlJlZ0V4cCI9PWUoYSkpfX0sOTczNjg6KGMsbCx0KT0+e3ZhciBuPXQoNDIyOCk7Yy5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKGUscyxhLHUpe3RyeXtyZXR1cm4gdT9zKG4oYSlbMF0sYVsxXSk6cyhhKX1jYXRjaChpKXt2YXIgZj1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1mJiZuKGYuY2FsbChlKSksaX19fSw2MDMyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg4NDcxOSksZT10KDEx''@;'; put 'put ''OTk2KSxzPXQoMzg0NCksYT17fTt0KDMzMzQxKShhLHQoNjc1NzQpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjLmV4cG9ydHM9ZnVuY3Rpb24odSxmLGkpe3UucHJvdG90eXBlPW4oYSx7bmV4dDplKDEsaSl9KSxzKHUsZisiIEl0ZXJhdG9yIil9fSw5ODE3NTooYyxs''@;'; put 'put ''LHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjI3NTApLGU9dCg5MjEyNykscz10KDI4ODU5KSxhPXQoMzMzNDEpLHU9dCg2MDkwNiksZj10KDYwMzIpLGk9dCgzODQ0KSx2PXQoNDA2MjcpLHA9dCg2NzU3NCkoIml0ZXJhdG9yIiksZD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxF''@;'; put 'put ''PSJrZXlzIixnPSJ2YWx1ZXMiLEQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307Yy5leHBvcnRzPWZ1bmN0aW9uKEYseCx3LEMsSSxNLFQpe2Yodyx4LEMpO3ZhciBYLGV0LFYsYj1mdW5jdGlvbihmdCl7aWYoIWQmJmZ0IGluIG50KXJldHVybiBudFtmdF07c3dpdGNoKGZ0KXtjYXNlIEU6Y2Fz''@;'; put 'put ''ZSBnOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgdyh0aGlzLGZ0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMsZnQpfX0sTD14KyIgSXRlcmF0b3IiLFU9ST09ZyxaPSExLG50PUYucHJvdG90eXBlLHR0PW50W3BdfHxudFsiQEBpdGVyYXRvciJdfHxJJiZudFtJ''@;'; put 'put ''XSx5dD10dHx8YihJKSxtdD1JP1U/YigiZW50cmllcyIpOnl0OnZvaWQgMCxxPSJBcnJheSI9PXgmJm50LmVudHJpZXN8fHR0O2lmKHEmJihWPXYocS5jYWxsKG5ldyBGKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmVi5uZXh0JiYoaShWLEwsITApLCFuJiYiZnVuY3Rpb24iIT10eXBlb2YgVltw''@;'; put 'put ''XSYmYShWLHAsRCkpLFUmJnR0JiZ0dC5uYW1lIT09ZyYmKFo9ITAseXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHQuY2FsbCh0aGlzKX0pLCghbnx8VCkmJihkfHxafHwhbnRbcF0pJiZhKG50LHAseXQpLHVbeF09eXQsdVtMXT1ELEkpaWYoWD17dmFsdWVzOlU/eXQ6YihnKSxrZXlzOk0/eXQ6YihF''@;'; put 'put ''KSxlbnRyaWVzOm10fSxUKWZvcihldCBpbiBYKWV0IGluIG50fHxzKG50LGV0LFhbZXRdKTtlbHNlIGUoZS5QK2UuRiooZHx8WikseCxYKTtyZXR1cm4gWH19LDk4OTMxOihjLGwsdCk9Pnt2YXIgbj10KDY3NTc0KSgiaXRlcmF0b3IiKSxlPSExO3RyeXt2YXIgcz1bN11bbl0oKTtzLnJldHVy''@;'; put 'put ''bj1mdW5jdGlvbigpe2U9ITB9LEFycmF5LmZyb20ocyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaHt9Yy5leHBvcnRzPWZ1bmN0aW9uKGEsdSl7aWYoIXUmJiFlKXJldHVybiExO3ZhciBmPSExO3RyeXt2YXIgaT1bN10sdj1pW25dKCk7di5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6''@;'; put 'put ''Zj0hMH19LGlbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdn0sYShpKX1jYXRjaHt9cmV0dXJuIGZ9fSw3NDk3MDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWx9fX0sNjA5MDY6Yz0+e2MuZXhwb3J0cz17fX0sMjI3NTA6Yz0+e2MuZXhwb3J0cz0hMX0s''@;'; put 'put ''NzU1NTE6Yz0+e3ZhciBsPU1hdGguZXhwbTE7Yy5leHBvcnRzPSFsfHxsKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGwoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1sKC0yZS0xNyk/ZnVuY3Rpb24obil7cmV0dXJuIDA9PShuPStuKT9uOm4+LTFlLTYmJm48MWUtNj9uK24qbi8y''@;'; put 'put ''Ok1hdGguZXhwKG4pLTF9Omx9LDcyMTIyOihjLGwsdCk9Pnt2YXIgbj10KDM3MzMpLGU9TWF0aC5wb3cscz1lKDIsLTUyKSxhPWUoMiwtMjMpLHU9ZSgyLDEyNykqKDItYSksZj1lKDIsLTEyNik7Yy5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbihwKXt2YXIgRSxnLGQ9TWF0aC5hYnMo''@;'; put 'put ''cCksbT1uKHApO3JldHVybiBkPGY/bSooZC9mL2ErMS9zLTEvcykqZiphOihnPShFPSgxK2EvcykqZCktKEUtZCkpPnV8fGchPWc/bSooMS8wKTptKmd9fSw3MTQ3MzpjPT57Yy5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0''@;'; put 'put ''LzI6TWF0aC5sb2coMSt0KX19LDM3MzM6Yz0+e2MuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LDEyOTg4OihjLGwsdCk9Pnt2YXIgbj10KDQ0MTUpKCJtZXRhIiksZT10KDQzMzA1KSxzPXQoNTc5MTcpLGE9dCg0Nzk2''@;'; put 'put ''NykuZix1PTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxpPSF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBmKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksdj1mdW5jdGlvbihnKXthKGcsbix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7fX19KX0s''@;'; put 'put ''RT1jLmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihnLEQpe2lmKCFlKGcpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZz9nOigic3RyaW5nIj09dHlwZW9mIGc/IlMiOiJQIikrZztpZighcyhnLG4pKXtpZighZihnKSlyZXR1cm4iRiI7aWYoIUQpcmV0dXJuIkUiO3Yo''@;'; put 'put ''Zyl9cmV0dXJuIGdbbl0uaX0sZ2V0V2VhazpmdW5jdGlvbihnLEQpe2lmKCFzKGcsbikpe2lmKCFmKGcpKXJldHVybiEwO2lmKCFEKXJldHVybiExO3YoZyl9cmV0dXJuIGdbbl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZyl7cmV0dXJuIGkmJkUuTkVFRCYmZihnKSYmIXMoZyxuKSYmdihnKSxn''@;'; put 'put ''fX19LDk3MzgwOihjLGwsdCk9Pnt2YXIgbj10KDkzMzg2KSxlPXQoOTIxMjcpLHM9dCg0NDU1NikoIm1ldGFkYXRhIiksYT1zLnN0b3JlfHwocy5zdG9yZT1uZXcodCg3OTM5NykpKSx1PWZ1bmN0aW9uKEUsZyxEKXt2YXIgRj1hLmdldChFKTtpZighRil7aWYoIUQpcmV0dXJuO2Euc2V0KEUs''@;'; put 'put ''Rj1uZXcgbil9dmFyIHg9Ri5nZXQoZyk7aWYoIXgpe2lmKCFEKXJldHVybjtGLnNldChnLHg9bmV3IG4pfXJldHVybiB4fTtjLmV4cG9ydHM9e3N0b3JlOmEsbWFwOnUsaGFzOmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMCE9PUYmJkYuaGFzKEUpfSxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oRSxnLEQpe3ZhciBGPXUoZyxELCExKTtyZXR1cm4gdm9pZCAwPT09Rj92b2lkIDA6Ri5nZXQoRSl9LHNldDpmdW5jdGlvbihFLGcsRCxGKXt1KEQsRiwhMCkuc2V0KEUsZyl9LGtleXM6ZnVuY3Rpb24oRSxnKXt2YXIgRD11KEUsZywhMSksRj1bXTtyZXR1cm4gRCYmRC5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKHgsdyl7Ri5wdXNoKHcpfSksRn0sa2V5OmZ1bmN0aW9uKEUpe3JldHVybiB2b2lkIDA9PT1FfHwic3ltYm9sIj09dHlwZW9mIEU/RTpTdHJpbmcoRSl9LGV4cDpmdW5jdGlvbihFKXtlKGUuUywiUmVmbGVjdCIsRSl9fX0sMjgyMDY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDE3NjMpLGU9dCg1MTMxMSkscz10KDEwNjApLGE9dCg4NDQ5KSx1PXQoMTgyNzApLGY9dCg2MTI0OSksaT1PYmplY3QuYXNzaWduO2MuZXhwb3J0cz0haXx8dCg3OTQ0OCkoZnVuY3Rpb24oKXt2YXIgdj17fSxwPXt9LGQ9U3ltYm9sKCksbT0iYWJjZGVmZ2hpamtsbW5vcHFy''@;'; put 'put ''c3QiO3JldHVybiB2W2RdPTcsbS5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihFKXtwW0VdPUV9KSw3IT1pKHt9LHYpW2RdfHxPYmplY3Qua2V5cyhpKHt9LHApKS5qb2luKCIiKSE9bX0pP2Z1bmN0aW9uKHAsZCl7Zm9yKHZhciBtPXUocCksRT1hcmd1bWVudHMubGVuZ3RoLGc9MSxEPXMu''@;'; put 'put ''ZixGPWEuZjtFPmc7KWZvcih2YXIgTSx4PWYoYXJndW1lbnRzW2crK10pLHc9RD9lKHgpLmNvbmNhdChEKHgpKTplKHgpLEM9dy5sZW5ndGgsST0wO0M+STspTT13W0krK10sKCFufHxGLmNhbGwoeCxNKSkmJihtW01dPXhbTV0pO3JldHVybiBtfTppfSw4NDcxOTooYyxsLHQpPT57dmFyIG49''@;'; put 'put ''dCg0MjI4KSxlPXQoMjE2MjYpLHM9dCg4NjE0MCksYT10KDQwNzY2KSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxmPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24oKXt2YXIgRSx2PXQoNDYwMzQpKCJpZnJhbWUiKSxwPXMubGVuZ3RoO2Zvcih2LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQoNjEz''@;'; put 'put ''MDgpLmFwcGVuZENoaWxkKHYpLHYuc3JjPSJqYXZhc2NyaXB0OiIsKEU9di5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksRS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxFLmNsb3NlKCksaT1FLkY7cC0tOylkZWxldGUgaVtmXVtzW3BdXTtyZXR1''@;'; put 'put ''cm4gaSgpfTtjLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24ocCxkKXt2YXIgbTtyZXR1cm4gbnVsbCE9PXA/KHVbZl09bihwKSxtPW5ldyB1LHVbZl09bnVsbCxtW2FdPXApOm09aSgpLHZvaWQgMD09PWQ/bTplKG0sZCl9fSw0Nzk2NzooYyxsLHQpPT57dmFyIG49dCg0MjI4KSxl''@;'; put 'put ''PXQoMjI5NTYpLHM9dCg4MzA0OCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bC5mPXQoMTc2Myk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGYsaSx2KXtpZihuKGYpLGk9cyhpLCEwKSxuKHYpLGUpdHJ5e3JldHVybiBhKGYsaSx2KX1jYXRjaHt9aWYoImdldCJpbiB2fHwic2V0''@;'; put 'put ''ImluIHYpdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEiKTtyZXR1cm4idmFsdWUiaW4gdiYmKGZbaV09di52YWx1ZSksZn19LDIxNjI2OihjLGwsdCk9Pnt2YXIgbj10KDQ3OTY3KSxlPXQoNDIyOCkscz10KDUxMzExKTtjLmV4cG9ydHM9dCgxNzYzKT9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih1LGYpe2UodSk7Zm9yKHZhciBkLGk9cyhmKSx2PWkubGVuZ3RoLHA9MDt2PnA7KW4uZih1LGQ9aVtwKytdLGZbZF0pO3JldHVybiB1fX0sNjg2NDE6KGMsbCx0KT0+e3ZhciBuPXQoODQ0OSksZT10KDExOTk2KSxzPXQoNTcyMjEpLGE9dCg4MzA0''@;'; put 'put ''OCksdT10KDU3OTE3KSxmPXQoMjI5NTYpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtsLmY9dCgxNzYzKT9pOmZ1bmN0aW9uKHAsZCl7aWYocD1zKHApLGQ9YShkLCEwKSxmKXRyeXtyZXR1cm4gaShwLGQpfWNhdGNoe31pZih1KHAsZCkpcmV0dXJuIGUoIW4uZi5jYWxsKHAs''@;'; put 'put ''ZCkscFtkXSl9fSw0NzY1OihjLGwsdCk9Pnt2YXIgbj10KDU3MjIxKSxlPXQoNTk0MTUpLmYscz17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6''@;'; put 'put ''W107Yy5leHBvcnRzLmY9ZnVuY3Rpb24oaSl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoaSk/ZnVuY3Rpb24oZil7dHJ5e3JldHVybiBlKGYpfWNhdGNoe3JldHVybiBhLnNsaWNlKCl9fShpKTplKG4oaSkpfX0sNTk0MTU6KGMsbCx0KT0+e3ZhciBuPXQoMzQ1NjEpLGU9''@;'; put 'put ''dCg4NjE0MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtsLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGEpe3JldHVybiBuKGEsZSl9fSwxMDYwOihjLGwpPT57bC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDQwNjI3OihjLGwsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDU3OTE3KSxlPXQoMTgyNzApLHM9dCg0MDc2NikoIklFX1BST1RPIiksYT1PYmplY3QucHJvdG90eXBlO2MuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHUpe3JldHVybiB1PWUodSksbih1LHMpP3Vbc106ImZ1bmN0aW9uIj09dHlwZW9mIHUuY29uc3RydWN0''@;'; put 'put ''b3ImJnUgaW5zdGFuY2VvZiB1LmNvbnN0cnVjdG9yP3UuY29uc3RydWN0b3IucHJvdG90eXBlOnUgaW5zdGFuY2VvZiBPYmplY3Q/YTpudWxsfX0sMzQ1NjE6KGMsbCx0KT0+e3ZhciBuPXQoNTc5MTcpLGU9dCg1NzIyMSkscz10KDYxNDY0KSghMSksYT10KDQwNzY2KSgiSUVfUFJPVE8iKTtj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odSxmKXt2YXIgZCxpPWUodSksdj0wLHA9W107Zm9yKGQgaW4gaSlkIT1hJiZuKGksZCkmJnAucHVzaChkKTtmb3IoO2YubGVuZ3RoPnY7KW4oaSxkPWZbdisrXSkmJih+cyhwLGQpfHxwLnB1c2goZCkpO3JldHVybiBwfX0sNTEzMTE6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoMzQ1NjEpLGU9dCg4NjE0MCk7Yy5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihhKXtyZXR1cm4gbihhLGUpfX0sODQ0OTooYyxsKT0+e2wuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sODA5MjM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg1NjA5NCkscz10KDc5NDQ4''@;'; put 'put ''KTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSx1KXt2YXIgZj0oZS5PYmplY3R8fHt9KVthXXx8T2JqZWN0W2FdLGk9e307aVthXT11KGYpLG4obi5TK24uRipzKGZ1bmN0aW9uKCl7ZigxKX0pLCJPYmplY3QiLGkpfX0sOTYyMjI6KGMsbCx0KT0+e3ZhciBuPXQoNTk0MTUpLGU9dCgxMDYwKSxzPXQo''@;'; put 'put ''NDIyOCksYT10KDY3NTI2KS5SZWZsZWN0O2MuZXhwb3J0cz1hJiZhLm93bktleXN8fGZ1bmN0aW9uKGYpe3ZhciBpPW4uZihzKGYpKSx2PWUuZjtyZXR1cm4gdj9pLmNvbmNhdCh2KGYpKTppfX0sMzM1ODk6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLnBhcnNlRmxvYXQsZT10KDQwNjI5KS50''@;'; put 'put ''cmltO2MuZXhwb3J0cz0xL24odCg3ODQ1MSkrIi0wIikhPS0xLzA/ZnVuY3Rpb24oYSl7dmFyIHU9ZShTdHJpbmcoYSksMyksZj1uKHUpO3JldHVybiAwPT09ZiYmIi0iPT11LmNoYXJBdCgwKT8tMDpmfTpufSw4MjczODooYyxsLHQpPT57dmFyIG49dCg2NzUyNikucGFyc2VJbnQsZT10KDQw''@;'; put 'put ''NjI5KS50cmltLHM9dCg3ODQ1MSksYT0vXlstK10/MFt4WF0vO2MuZXhwb3J0cz04IT09bihzKyIwOCIpfHwyMiE9PW4ocysiMHgxNiIpP2Z1bmN0aW9uKGYsaSl7dmFyIHY9ZShTdHJpbmcoZiksMyk7cmV0dXJuIG4odixpPj4+MHx8KGEudGVzdCh2KT8xNjoxMCkpfTpufSwxMTk5NjpjPT57''@;'; put 'put ''Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmwpLGNvbmZpZ3VyYWJsZTohKDImbCksd3JpdGFibGU6ISg0JmwpLHZhbHVlOnR9fX0sOTYwNjU6KGMsbCx0KT0+e3ZhciBuPXQoMjg4NTkpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsYSl7Zm9yKHZhciB1IGlu''@;'; put 'put ''IHMpbihlLHUsc1t1XSxhKTtyZXR1cm4gZX19LDI4ODU5OihjLGwsdCk9Pnt2YXIgbj10KDY3NTI2KSxlPXQoMzMzNDEpLHM9dCg1NzkxNyksYT10KDQ0MTUpKCJzcmMiKSx1PXQoNDk0NjEpLGY9InRvU3RyaW5nIixpPSgiIit1KS5zcGxpdChmKTt0KDU2MDk0KS5pbnNwZWN0U291cmNlPWZ1''@;'; put 'put ''bmN0aW9uKHYpe3JldHVybiB1LmNhbGwodil9LChjLmV4cG9ydHM9ZnVuY3Rpb24odixwLGQsbSl7dmFyIEU9ImZ1bmN0aW9uIj09dHlwZW9mIGQ7RSYmKHMoZCwibmFtZSIpfHxlKGQsIm5hbWUiLHApKSx2W3BdIT09ZCYmKEUmJihzKGQsYSl8fGUoZCxhLHZbcF0/IiIrdltwXTppLmpvaW4o''@;'; put 'put ''U3RyaW5nKHApKSkpLHY9PT1uP3ZbcF09ZDptP3ZbcF0/dltwXT1kOmUodixwLGQpOihkZWxldGUgdltwXSxlKHYscCxkKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLGYsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8dS5jYWxsKHRoaXMpfSl9LDUy''@;'; put 'put ''NTM1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzNDg0OCksZT1SZWdFeHAucHJvdG90eXBlLmV4ZWM7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsYSl7dmFyIHU9cy5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB1KXt2YXIgZj11LmNhbGwocyxhKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsIik7cmV0dXJuIGZ9aWYoIlJlZ0V4cCIhPT1uKHMpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBp''@;'; put 'put ''bmNvbXBhdGlibGUgcmVjZWl2ZXIiKTtyZXR1cm4gZS5jYWxsKHMsYSl9fSw2OTYwMDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBwLGQsbj10KDExNTgpLGU9UmVnRXhwLnByb3RvdHlwZS5leGVjLHM9U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLGE9ZSx1PSJsYXN0SW5kZXgiLGY9KGQ9''@;'; put 'put ''L2IqL2csZS5jYWxsKHA9L2EvLCJhIiksZS5jYWxsKGQsImEiKSwwIT09cFt1XXx8MCE9PWRbdV0pLGk9dm9pZCAwIT09LygpPz8vLmV4ZWMoIiIpWzFdOyhmfHxpKSYmKGE9ZnVuY3Rpb24oZCl7dmFyIEUsZyxELEYsbT10aGlzO3JldHVybiBpJiYoZz1uZXcgUmVnRXhwKCJeIittLnNvdXJj''@;'; put 'put ''ZSsiJCg/IVxccykiLG4uY2FsbChtKSkpLGYmJihFPW1bdV0pLEQ9ZS5jYWxsKG0sZCksZiYmRCYmKG1bdV09bS5nbG9iYWw/RC5pbmRleCtEWzBdLmxlbmd0aDpFKSxpJiZEJiZELmxlbmd0aD4xJiZzLmNhbGwoRFswXSxnLGZ1bmN0aW9uKCl7Zm9yKEY9MTtGPGFyZ3VtZW50cy5sZW5ndGgt''@;'; put 'put ''MjtGKyspdm9pZCAwPT09YXJndW1lbnRzW0ZdJiYoRFtGXT12b2lkIDApfSksRH0pLGMuZXhwb3J0cz1hfSw3MzU5OmM9PntjLmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LG4pe3JldHVybiB0PT09bj8wIT09dHx8MS90PT0xL246dCE9dCYmbiE9bn19LDI1MTcwOihjLGwsdCk9Pnt2''@;'; put 'put ''YXIgbj10KDQzMzA1KSxlPXQoNDIyOCkscz1mdW5jdGlvbihhLHUpe2lmKGUoYSksIW4odSkmJm51bGwhPT11KXRocm93IFR5cGVFcnJvcih1KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2MuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57''@;'; put 'put ''fT9mdW5jdGlvbihhLHUsZil7dHJ5eyhmPXQoMzUwNTIpKEZ1bmN0aW9uLmNhbGwsdCg2ODY0MSkuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGEsW10pLHU9IShhIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoe3U9ITB9cmV0dXJuIGZ1bmN0aW9uKHYscCl7cmV0dXJu''@;'; put 'put ''IHModixwKSx1P3YuX19wcm90b19fPXA6Zih2LHApLHZ9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpzfX0sNTU3NjI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNDc5NjcpLHM9dCgxNzYzKSxhPXQoNjc1NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHUpe3ZhciBmPW5bdV07cyYmZiYmIWZbYV0mJmUuZihmLGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDM4NDQ6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLmYsZT10KDU3OTE3KSxzPXQoNjc1NzQpKCJ0b1N0cmluZ1RhZyIpO2MuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihhLHUsZil7YSYmIWUoYT1mP2E6YS5wcm90b3R5cGUscykmJm4oYSxzLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dX0pfX0sNDA3NjY6KGMsbCx0KT0+e3ZhciBuPXQoNDQ1NTYpKCJrZXlzIiksZT10KDQ0MTUpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gbltzXXx8KG5b''@;'; put 'put ''c109ZShzKSl9fSw0NDU1NjooYyxsLHQpPT57dmFyIG49dCg1NjA5NCksZT10KDY3NTI2KSxzPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9ZVtzXXx8KGVbc109e30pOyhjLmV4cG9ydHM9ZnVuY3Rpb24odSxmKXtyZXR1cm4gYVt1XXx8KGFbdV09dm9pZCAwIT09Zj9mOnt9KX0pKCJ2ZXJzaW9u''@;'; put 'put ''cyIsW10pLnB1c2goe3ZlcnNpb246bi52ZXJzaW9uLG1vZGU6dCgyMjc1MCk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSwxOTE5MDooYyxsLHQpPT57dmFyIG49dCg0MjI4KSxlPXQoNjMzODcpLHM9dCg2NzU3''@;'; put 'put ''NCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSx1KXt2YXIgaSxmPW4oYSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWZ8fG51bGw9PShpPW4oZilbc10pP3U6ZShpKX19LDg2ODg0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg3OTQ0OCk7Yy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGUscyl7cmV0dXJuISFlJiZuKGZ1bmN0aW9uKCl7cz9lLmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6ZS5jYWxsKG51bGwpfSl9fSw5MTIxMjooYyxsLHQpPT57dmFyIG49dCgyNzA4NyksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oYSx1''@;'; put 'put ''KXt2YXIgcCxkLGY9U3RyaW5nKGUoYSkpLGk9bih1KSx2PWYubGVuZ3RoO3JldHVybiBpPDB8fGk+PXY/cz8iIjp2b2lkIDA6KHA9Zi5jaGFyQ29kZUF0KGkpKTw1NTI5Nnx8cD41NjMxOXx8aSsxPT09dnx8KGQ9Zi5jaGFyQ29kZUF0KGkrMSkpPDU2MzIwfHxkPjU3MzQzP3M/Zi5jaGFyQXQo''@;'; put 'put ''aSk6cDpzP2Yuc2xpY2UoaSxpKzIpOmQtNTYzMjArKHAtNTUyOTY8PDEwKSs2NTUzNn19fSw3ODk0MjooYyxsLHQpPT57dmFyIG49dCg5NTQxMSksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzLGEsdSl7aWYobihhKSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZyMiK3UrIiBkb2Vzbid0''@;'; put 'put ''IGFjY2VwdCByZWdleCEiKTtyZXR1cm4gU3RyaW5nKGUocykpfX0sNTI0Njg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDMzNDQpLGE9LyIvZyx1PWZ1bmN0aW9uKGYsaSx2LHApe3ZhciBkPVN0cmluZyhzKGYpKSxtPSI8IitpO3JldHVybiIiIT09diYmKG0rPSIg''@;'; put 'put ''Iit2Kyc9IicrU3RyaW5nKHApLnJlcGxhY2UoYSwiJnF1b3Q7IikrJyInKSxtKyI+IitkKyI8LyIraSsiPiJ9O2MuZXhwb3J0cz1mdW5jdGlvbihmLGkpe3ZhciB2PXt9O3ZbZl09aSh1KSxuKG4uUCtuLkYqZShmdW5jdGlvbigpe3ZhciBwPSIiW2ZdKCciJyk7cmV0dXJuIHAhPT1wLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl8fHAuc3BsaXQoJyInKS5sZW5ndGg+M30pLCJTdHJpbmciLHYpfX0sMjc5MjY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDI3MDg3KSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciB1PVN0cmluZyhlKHRoaXMpKSxmPSIiLGk9bihhKTtpZihpPDB8''@;'; put 'put ''fGk9PTEvMCl0aHJvdyBSYW5nZUVycm9yKCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZSIpO2Zvcig7aT4wOyhpPj4+PTEpJiYodSs9dSkpMSZpJiYoZis9dSk7cmV0dXJuIGZ9fSw0MDYyOTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzNDQpLHM9dCg3OTQ0OCksYT10KDc4NDUxKSx1''@;'; put 'put ''PSJbIithKyJdIixpPVJlZ0V4cCgiXiIrdSt1KyIqIiksdj1SZWdFeHAodSt1KyIqJCIpLHA9ZnVuY3Rpb24obSxFLGcpe3ZhciBEPXt9LEY9cyhmdW5jdGlvbigpe3JldHVybiEhYVttXSgpfHwiXHUyMDBiXHg4NSIhPSJcdTIwMGJceDg1IlttXSgpfSkseD1EW21dPUY/RShkKTphW21dO2cm''@;'; put 'put ''JihEW2ddPXgpLG4obi5QK24uRipGLCJTdHJpbmciLEQpfSxkPXAudHJpbT1mdW5jdGlvbihtLEUpe3JldHVybiBtPVN0cmluZyhlKG0pKSwxJkUmJihtPW0ucmVwbGFjZShpLCIiKSksMiZFJiYobT1tLnJlcGxhY2UodiwiIikpLG19O2MuZXhwb3J0cz1wfSw3ODQ1MTpjPT57Yy5leHBvcnRz''@;'; put 'put ''PSJcdFxuXHZcZlxyIFx4YTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMmZcdTIwNWZcdTMwMDBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MDE1NzooYyxsLHQpPT57dmFyIG49dCgyNzA4Nyks''@;'; put 'put ''ZT1NYXRoLm1heCxzPU1hdGgubWluO2MuZXhwb3J0cz1mdW5jdGlvbihhLHUpe3JldHVybihhPW4oYSkpPDA/ZShhK3UsMCk6cyhhLHUpfX0sMjcwODc6Yz0+e3ZhciBsPU1hdGguY2VpbCx0PU1hdGguZmxvb3I7Yy5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBpc05hTihuPStuKT8wOihu''@;'; put 'put ''PjA/dDpsKShuKX19LDU3MjIxOihjLGwsdCk9Pnt2YXIgbj10KDYxMjQ5KSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuKGUocykpfX0sODE0ODU6KGMsbCx0KT0+e3ZhciBuPXQoMjcwODcpLGU9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBz''@;'; put 'put ''PjA/ZShuKHMpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwxODI3MDooYyxsLHQpPT57dmFyIG49dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChuKGUpKX19LDgzMDQ4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZigh''@;'; put 'put ''bihlKSlyZXR1cm4gZTt2YXIgYSx1O2lmKHMmJiJmdW5jdGlvbiI9PXR5cGVvZihhPWUudG9TdHJpbmcpJiYhbih1PWEuY2FsbChlKSl8fCJmdW5jdGlvbiI9PXR5cGVvZihhPWUudmFsdWVPZikmJiFuKHU9YS5jYWxsKGUpKXx8IXMmJiJmdW5jdGlvbiI9PXR5cGVvZihhPWUudG9TdHJpbmcp''@;'; put 'put ''JiYhbih1PWEuY2FsbChlKSkpcmV0dXJuIHU7dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDQ0MTU6Yz0+e3ZhciBsPTAsdD1NYXRoLnJhbmRvbSgpO2MuZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0''@;'; put 'put ''KHZvaWQgMD09PW4/IiI6biwiKV8iLCgrK2wrdCkudG9TdHJpbmcoMzYpKX19LDEyODg4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZighbihlKXx8ZS5fdCE9PXMpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrcysi''@;'; put 'put ''IHJlcXVpcmVkISIpO3JldHVybiBlfX0sMjMwMTE6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLGU9dCg1NjA5NCkscz10KDIyNzUwKSxhPXQoNDc5NjApLHU9dCg0Nzk2NykuZjtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7dmFyIGk9ZS5TeW1ib2x8fChlLlN5bWJvbD1zP3t9Om4uU3ltYm9sfHx7''@;'; put 'put ''fSk7Il8iIT1mLmNoYXJBdCgwKSYmIShmIGluIGkpJiZ1KGksZix7dmFsdWU6YS5mKGYpfSl9fSw0Nzk2MDooYyxsLHQpPT57bC5mPXQoNjc1NzQpfSw2NzU3NDooYyxsLHQpPT57dmFyIG49dCg0NDU1NikoIndrcyIpLGU9dCg0NDE1KSxzPXQoNjc1MjYpLlN5bWJvbCxhPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBzOyhjLmV4cG9ydHM9ZnVuY3Rpb24oZil7cmV0dXJuIG5bZl18fChuW2ZdPWEmJnNbZl18fChhP3M6ZSkoIlN5bWJvbC4iK2YpKX0pLnN0b3JlPW59LDIwNzYyOihjLGwsdCk9Pnt2YXIgbj10KDM0ODQ4KSxlPXQoNjc1NzQpKCJpdGVyYXRvciIpLHM9dCg2MDkwNik7Yy5leHBv''@;'; put 'put ''cnRzPXQoNTYwOTQpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEpcmV0dXJuIGFbZV18fGFbIkBAaXRlcmF0b3IiXXx8c1tuKGEpXX19LDE5NjIwOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUCwiQXJyYXkiLHtjb3B5V2l0aGluOnQoODQ0MzgpfSksdCg4''@;'; put 'put ''ODE4NCkoImNvcHlXaXRoaW4iKX0sNTg4ODg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDQpO24obi5QK24uRiohdCg4Njg4NCkoW10uZXZlcnksITApLCJBcnJheSIse2V2ZXJ5OmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHNb''@;'; put 'put ''MV0pfX0pfSw1Nzc2MjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIkFycmF5Iix7ZmlsbDp0KDM1NTY0KX0pLHQoODgxODQpKCJmaWxsIil9LDM5ODEzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgyKTtuKG4uUCtuLkYqIXQoODY4ODQp''@;'; put 'put ''KFtdLmZpbHRlciwhMCksIkFycmF5Iix7ZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHNbMV0pfX0pfSw3NTM2OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNikscz0iZmluZEluZGV4IixhPSEwO3MgaW5bXSYmQXJy''@;'; put 'put ''YXkoMSlbc10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsIkFycmF5Iix7ZmluZEluZGV4OmZ1bmN0aW9uKGYpe3JldHVybiBlKHRoaXMsZixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksdCg4ODE4NCkocyl9LDE1MTQ0OihjLGwsdCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSg1KSxzPSJmaW5kIixhPSEwO3MgaW5bXSYmQXJyYXkoMSlbc10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsIkFycmF5Iix7ZmluZDpmdW5jdGlvbihmKXtyZXR1cm4gZSh0aGlzLGYsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSwzNTA0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgwKSxzPXQoODY4ODQpKFtdLmZvckVhY2gsITApO24obi5QK24uRiohcywiQXJyYXkiLHtmb3JFYWNoOmZ1bmN0aW9uKHUpe3JldHVybiBl''@;'; put 'put ''KHRoaXMsdSxhcmd1bWVudHNbMV0pfX0pfSw5Mzg2MzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzUwNTIpLGU9dCg5MjEyNykscz10KDE4MjcwKSxhPXQoOTczNjgpLHU9dCgxNTA4KSxmPXQoODE0ODUpLGk9dCg2NzIyNyksdj10KDIwNzYyKTtlKGUuUytlLkYqIXQoOTg5MzEp''@;'; put 'put ''KGZ1bmN0aW9uKHApe0FycmF5LmZyb20ocCl9KSwiQXJyYXkiLHtmcm9tOmZ1bmN0aW9uKGQpe3ZhciBDLEksTSxULG09cyhkKSxFPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksZz1hcmd1bWVudHMubGVuZ3RoLEQ9Zz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsRj12b2lkIDAh''@;'; put 'put ''PT1ELHg9MCx3PXYobSk7aWYoRiYmKEQ9bihELGc+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT13fHxFPT1BcnJheSYmdSh3KSlmb3IoST1uZXcgRShDPWYobS5sZW5ndGgpKTtDPng7eCsrKWkoSSx4LEY/RChtW3hdLHgpOm1beF0pO2Vsc2UgZm9yKFQ9dy5jYWxsKG0pLEk9bmV3''@;'; put 'put ''IEU7IShNPVQubmV4dCgpKS5kb25lO3grKylpKEkseCxGP2EoVCxELFtNLnZhbHVlLHhdLCEwKTpNLnZhbHVlKTtyZXR1cm4gSS5sZW5ndGg9eCxJfX0pfSwzNDYwOTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2MTQ2NCkoITEpLHM9W10uaW5kZXhPZixhPSEh''@;'; put 'put ''cyYmMS9bMV0uaW5kZXhPZigxLC0wKTwwO24obi5QK24uRiooYXx8IXQoODY4ODQpKHMpKSwiQXJyYXkiLHtpbmRleE9mOmZ1bmN0aW9uKGYpe3JldHVybiBhP3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOmUodGhpcyxmLGFyZ3VtZW50c1sxXSl9fSl9LDQ3ODk5OihjLGwsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KTtuKG4uUywiQXJyYXkiLHtpc0FycmF5OnQoNzc5ODEpfSl9LDk1MTY1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg4ODE4NCksZT10KDc0OTcwKSxzPXQoNjA5MDYpLGE9dCg1NzIyMSk7Yy5leHBvcnRzPXQoOTgxNzUpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24o''@;'; put 'put ''dSxmKXt0aGlzLl90PWEodSksdGhpcy5faT0wLHRoaXMuX2s9Zn0sZnVuY3Rpb24oKXt2YXIgdT10aGlzLl90LGY9dGhpcy5fayxpPXRoaXMuX2krKztyZXR1cm4hdXx8aT49dS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGUoMSkpOmUoMCwia2V5cyI9PWY/aToidmFsdWVzIj09Zj91W2ldOltp''@;'; put 'put ''LHVbaV1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sOTY1MTE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9W10uam9pbjtuKG4uUCtuLkYqKHQoNjEyNDkpIT1PYmpl''@;'; put 'put ''Y3R8fCF0KDg2ODg0KShzKSksIkFycmF5Iix7am9pbjpmdW5jdGlvbih1KXtyZXR1cm4gcy5jYWxsKGUodGhpcyksdm9pZCAwPT09dT8iLCI6dSl9fSl9LDMzNzA2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPXQoMjcwODcpLGE9dCg4MTQ4NSks''@;'; put 'put ''dT1bXS5sYXN0SW5kZXhPZixmPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGZ8fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24odil7aWYoZilyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHA9ZSh0aGlzKSxk''@;'; put 'put ''PWEocC5sZW5ndGgpLG09ZC0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihtPU1hdGgubWluKG0scyhhcmd1bWVudHNbMV0pKSksbTwwJiYobT1kK20pO20+PTA7bS0tKWlmKG0gaW4gcCYmcFttXT09PXYpcmV0dXJuIG18fDA7cmV0dXJuLTF9fSl9LDU0OTEzOihjLGwsdCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgxKTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLm1hcCwhMCksIkFycmF5Iix7bWFwOmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHNbMV0pfX0pfSw0NTcwOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEy''@;'; put 'put ''NyksZT10KDY3MjI3KTtuKG4uUytuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7fXJldHVybiEoQXJyYXkub2YuY2FsbChzKWluc3RhbmNlb2Ygcyl9KSwiQXJyYXkiLHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLHU9YXJndW1lbnRzLmxlbmd0aCxmPW5ldygiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5KSh1KTt1PmE7KWUoZixhLGFyZ3VtZW50c1thKytdKTtyZXR1cm4gZi5sZW5ndGg9dSxmfX0pfSw0Nzg3NDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NTQzKTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLnJlZHVj''@;'; put 'put ''ZVJpZ2h0LCEwKSwiQXJyYXkiLHtyZWR1Y2VSaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gZSh0aGlzLGEsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHNbMV0sITApfX0pfSw4MTQ0OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NTQzKTtuKG4uUCtuLkYqIXQo''@;'; put 'put ''ODY4ODQpKFtdLnJlZHVjZSwhMCksIkFycmF5Iix7cmVkdWNlOmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMSl9fSl9LDk1ODUzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDYxMzA4KSxzPXQoNTUw''@;'; put 'put ''ODkpLGE9dCg3MDE1NyksdT10KDgxNDg1KSxmPVtdLnNsaWNlO24obi5QK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe2UmJmYuY2FsbChlKX0pLCJBcnJheSIse3NsaWNlOmZ1bmN0aW9uKHYscCl7dmFyIGQ9dSh0aGlzLmxlbmd0aCksbT1zKHRoaXMpO2lmKHA9dm9pZCAwPT09cD9kOnAsIkFy''@;'; put 'put ''cmF5Ij09bSlyZXR1cm4gZi5jYWxsKHRoaXMsdixwKTtmb3IodmFyIEU9YSh2LGQpLGc9YShwLGQpLEQ9dShnLUUpLEY9bmV3IEFycmF5KEQpLHg9MDt4PEQ7eCsrKUZbeF09IlN0cmluZyI9PW0/dGhpcy5jaGFyQXQoRSt4KTp0aGlzW0UreF07cmV0dXJuIEZ9fSl9LDg2NTExOihjLGwsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgzKTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLnNvbWUsITApLCJBcnJheSIse3NvbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGUodGhpcyxhLGFyZ3VtZW50c1sxXSl9fSl9LDk3MDc1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIG49dCg5MjEyNyksZT10KDYzMzg3KSxzPXQoMTgyNzApLGE9dCg3OTQ0OCksdT1bXS5zb3J0LGY9WzEsMiwzXTtuKG4uUCtuLkYqKGEoZnVuY3Rpb24oKXtmLnNvcnQodm9pZCAwKX0pfHwhYShmdW5jdGlvbigpe2Yuc29ydChudWxsKX0pfHwhdCg4Njg4NCkodSkpLCJBcnJheSIse3Nv''@;'; put 'put ''cnQ6ZnVuY3Rpb24odil7cmV0dXJuIHZvaWQgMD09PXY/dS5jYWxsKHModGhpcykpOnUuY2FsbChzKHRoaXMpLGUodikpfX0pfSw3NjIwOTooYyxsLHQpPT57dCg1NTc2MikoIkFycmF5Iil9LDEzMjkyOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiRGF0ZSIse25vdzpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pfSw5NDI5OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTUzODUpO24obi5QK24uRiooRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1lKSwiRGF0ZSIse3RvSVNPU3RyaW5nOmV9KX0sNTIzNDY6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoMTgyNzApLHM9dCg4MzA0OCk7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDF9fSl9KSwiRGF0ZSIse3RvSlNPTjpmdW5jdGlvbih1KXt2YXIgZj1lKHRoaXMpLGk9cyhmKTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGl8fGlzRmluaXRlKGkpP2YudG9JU09TdHJpbmcoKTpudWxsfX0pfSw0ODk1MTooYyxsLHQpPT57dmFyIG49dCg2NzU3NCkoInRvUHJp''@;'; put 'put ''bWl0aXZlIiksZT1EYXRlLnByb3RvdHlwZTtuIGluIGV8fHQoMzMzNDEpKGUsbix0KDIwMTA3KSl9LDc4NDk6KGMsbCx0KT0+e3ZhciBuPURhdGUucHJvdG90eXBlLGU9IkludmFsaWQgRGF0ZSIscz0idG9TdHJpbmciLGE9bltzXSx1PW4uZ2V0VGltZTtuZXcgRGF0ZShOYU4pKyIiIT1lJiZ0''@;'; put 'put ''KDI4ODU5KShuLHMsZnVuY3Rpb24oKXt2YXIgaT11LmNhbGwodGhpcyk7cmV0dXJuIGk9PWk/YS5jYWxsKHRoaXMpOmV9KX0sNjUwNDk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5QLCJGdW5jdGlvbiIse2JpbmQ6dCgxNTUzOCl9KX0sOTU1MDI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDQzMzA1KSxlPXQoNDA2MjcpLHM9dCg2NzU3NCkoImhhc0luc3RhbmNlIiksYT1GdW5jdGlvbi5wcm90b3R5cGU7cyBpbiBhfHx0KDQ3OTY3KS5mKGEscyx7dmFsdWU6ZnVuY3Rpb24odSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFuKHUpKXJldHVybiExO2lmKCFu''@;'; put 'put ''KHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdSBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt1PWUodSk7KWlmKHRoaXMucHJvdG90eXBlPT09dSlyZXR1cm4hMDtyZXR1cm4hMX19KX0sNzA0ODk6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLmYsZT1GdW5jdGlvbi5wcm90b3R5cGUscz0vXlxzKmZ1bmN0''@;'; put 'put ''aW9uIChbXiAoXSopLyxhPSJuYW1lIjthIGluIGV8fHQoMTc2MykmJm4oZSxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybigiIit0aGlzKS5tYXRjaChzKVsxXX1jYXRjaHtyZXR1cm4iIn19fSl9LDkzMzg2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCgzNjE5NyksZT10KDEyODg4KSxzPSJNYXAiO2MuZXhwb3J0cz10KDU4OTMzKShzLGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih1KXt2YXIgZj1uLmdldEVu''@;'; put 'put ''dHJ5KGUodGhpcyxzKSx1KTtyZXR1cm4gZiYmZi52fSxzZXQ6ZnVuY3Rpb24odSxmKXtyZXR1cm4gbi5kZWYoZSh0aGlzLHMpLDA9PT11PzA6dSxmKX19LG4sITApfSw3NjY0ODooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcxNDczKSxzPU1hdGguc3FydCxhPU1hdGguYWNvc2g7bihu''@;'; put 'put ''LlMrbi5GKiEoYSYmNzEwPT1NYXRoLmZsb29yKGEoTnVtYmVyLk1BWF9WQUxVRSkpJiZhKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihmKXtyZXR1cm4oZj0rZik8MT9OYU46Zj45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhmKStNYXRoLkxOMjplKGYtMStzKGYtMSkqcyhm''@;'; put 'put ''KzEpKX19KX0sNTU3NzE6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5hc2luaDtuKG4uUytuLkYqIShlJiYxL2UoMCk+MCksIk1hdGgiLHthc2luaDpmdW5jdGlvbiBzKGEpe3JldHVybiBpc0Zpbml0ZShhPSthKSYmMCE9YT9hPDA/LXMoLWEpOk1hdGgubG9nKGErTWF0aC5zcXJ0''@;'; put 'put ''KGEqYSsxKSk6YX19KX0sODIzOTI6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShlJiYxL2UoLTApPDApLCJNYXRoIix7YXRhbmg6ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PShhPSthKT9hOk1hdGgubG9nKCgxK2EpLygxLWEpKS8yfX0pfSw3MjMzNToo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDM3MzMpO24obi5TLCJNYXRoIix7Y2JydDpmdW5jdGlvbihhKXtyZXR1cm4gZShhPSthKSpNYXRoLnBvdyhNYXRoLmFicyhhKSwxLzMpfX0pfSw3NDg5NjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtjbHozMjpmdW5j''@;'; put 'put ''dGlvbihzKXtyZXR1cm4ocz4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHMrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSw5NDUyMTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmV4cDtuKG4uUywiTWF0aCIse2Nvc2g6ZnVuY3Rpb24oYSl7cmV0dXJuKGUoYT0rYSkrZSgtYSkp''@;'; put 'put ''LzJ9fSl9LDI5MTQ3OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpO24obi5TK24uRiooZSE9TWF0aC5leHBtMSksIk1hdGgiLHtleHBtMTplfSl9LDQxMzE4OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2Zyb3VuZDp0KDcyMTIyKX0pfSw4NDM1Mjoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmFicztuKG4uUywiTWF0aCIse2h5cG90OmZ1bmN0aW9uKGEsdSl7Zm9yKHZhciBkLG0sZj0wLGk9MCx2PWFyZ3VtZW50cy5sZW5ndGgscD0wO2k8djspcDwoZD1lKGFyZ3VtZW50c1tpKytdKSk/KGY9ZioobT1wL2QpKm0rMSxwPWQpOmYr''@;'; put 'put ''PWQ+MD8obT1kL3ApKm06ZDtyZXR1cm4gcD09PTEvMD8xLzA6cCpNYXRoLnNxcnQoZil9fSl9LDE1MzI3OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguaW11bDtuKG4uUytuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4tNSE9ZSg0Mjk0OTY3Mjk1LDUpfHwyIT1lLmxlbmd0''@;'; put 'put ''aH0pLCJNYXRoIix7aW11bDpmdW5jdGlvbihhLHUpe3ZhciBmPTY1NTM1LGk9K2Esdj0rdSxwPWYmaSxkPWYmdjtyZXR1cm4gMHxwKmQrKChmJmk+Pj4xNikqZCtwKihmJnY+Pj4xNik8PDE2Pj4+MCl9fSl9LDU3NTA5OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xv''@;'; put 'put ''ZzEwOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKSpNYXRoLkxPRzEwRX19KX0sMTU5MDk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7bG9nMXA6dCg3MTQ3Myl9KX0sNzk1ODQ6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7bG9nMjpm''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gTWF0aC5sb2cocykvTWF0aC5MTjJ9fSl9LDQwMzQ1OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse3NpZ246dCgzNzMzKX0pfSw5OTEzNDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc1NTUxKSxzPU1hdGguZXhwO24obi5TK24u''@;'; put 'put ''Rip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1PSt1KTwxPyhlKHUpLWUoLXUpKS8yOihzKHUtMSktcygtdS0xKSkqKE1hdGguRS8yKX19KX0sNjc5MDE6KGMsbCx0''@;'; put 'put ''KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3NTU1MSkscz1NYXRoLmV4cDtuKG4uUywiTWF0aCIse3Rhbmg6ZnVuY3Rpb24odSl7dmFyIGY9ZSh1PSt1KSxpPWUoLXUpO3JldHVybiBmPT0xLzA/MTppPT0xLzA/LTE6KGYtaSkvKHModSkrcygtdSkpfX0pfSw0NjU5MjooYyxsLHQpPT57dmFyIG49''@;'; put 'put ''dCg5MjEyNyk7bihuLlMsIk1hdGgiLHt0cnVuYzpmdW5jdGlvbihzKXtyZXR1cm4ocz4wP01hdGguZmxvb3I6TWF0aC5jZWlsKShzKX19KX0sNjQ1MDk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNTc5MTcpLHM9dCg1NTA4OSksYT10KDk4ODgwKSx1PXQoODMw''@;'; put 'put ''NDgpLGY9dCg3OTQ0OCksaT10KDU5NDE1KS5mLHY9dCg2ODY0MSkuZixwPXQoNDc5NjcpLmYsZD10KDQwNjI5KS50cmltLG09Ik51bWJlciIsRT1uW21dLGc9RSxEPUUucHJvdG90eXBlLEY9cyh0KDg0NzE5KShEKSk9PW0seD0idHJpbSJpbiBTdHJpbmcucHJvdG90eXBlLHc9ZnVuY3Rpb24o''@;'; put 'put ''VCl7dmFyIGI9dShULCExKTtpZigic3RyaW5nIj09dHlwZW9mIGImJmIubGVuZ3RoPjIpe3ZhciBVLFosbnQsTD0oYj14P2IudHJpbSgpOmQoYiwzKSkuY2hhckNvZGVBdCgwKTtpZig0Mz09PUx8fDQ1PT09TCl7aWYoODg9PT0oVT1iLmNoYXJDb2RlQXQoMikpfHwxMjA9PT1VKXJldHVybiBO''@;'; put 'put ''YU59ZWxzZSBpZig0OD09PUwpe3N3aXRjaChiLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpaPTIsbnQ9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpaPTgsbnQ9NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rYn1mb3IodmFyIHEsdHQ9Yi5zbGljZSgyKSx5dD0wLG10PXR0Lmxlbmd0''@;'; put 'put ''aDt5dDxtdDt5dCsrKWlmKChxPXR0LmNoYXJDb2RlQXQoeXQpKTw0OHx8cT5udClyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludCh0dCxaKX19cmV0dXJuK2J9O2lmKCFFKCIgMG8xIil8fCFFKCIwYjEiKXx8RSgiKzB4MSIpKXtFPWZ1bmN0aW9uKGIpe3ZhciBMPWFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''MT8wOmIsVT10aGlzO3JldHVybiBVIGluc3RhbmNlb2YgRSYmKEY/ZihmdW5jdGlvbigpe0QudmFsdWVPZi5jYWxsKFUpfSk6cyhVKSE9bSk/YShuZXcgZyh3KEwpKSxVLEUpOncoTCl9O2Zvcih2YXIgTSxDPXQoMTc2Myk/aShnKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVf''@;'; put 'put ''SU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksST0wO0MubGVuZ3RoPkk7''@;'; put 'put ''SSsrKWUoZyxNPUNbSV0pJiYhZShFLE0pJiZwKEUsTSx2KGcsTSkpO0UucHJvdG90eXBlPUQsRC5jb25zdHJ1Y3Rvcj1FLHQoMjg4NTkpKG4sbSxFKX19LDM0NDE5OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sOTE5''@;'; put 'put ''MzM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2NzUyNikuaXNGaW5pdGU7bihuLlMsIk51bWJlciIse2lzRmluaXRlOmZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmZShhKX19KX0sNTU1Mzg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJOdW1iZXIi''@;'; put 'put ''LHtpc0ludGVnZXI6dCgzMzg0Mil9KX0sMzk0OTc6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJOdW1iZXIiLHtpc05hTjpmdW5jdGlvbihzKXtyZXR1cm4gcyE9c319KX0sNDEwNDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzODQyKSxzPU1hdGguYWJzO24obi5TLCJO''@;'; put 'put ''dW1iZXIiLHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHUpe3JldHVybiBlKHUpJiZzKHUpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSw2MDIxMDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSw1NjU3Njoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sODQ0Mzc6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzU4OSk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9ZSksIk51bWJlciIse3Bh''@;'; put 'put ''cnNlRmxvYXQ6ZX0pfSw4ODA1MDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDgyNzM4KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9ZSksIk51bWJlciIse3BhcnNlSW50OmV9KX0sMzc3Mjc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoMjcwODcp''@;'; put 'put ''LHM9dCgxNTEyMiksYT10KDI3OTI2KSx1PTEuLnRvRml4ZWQsZj1NYXRoLmZsb29yLGk9WzAsMCwwLDAsMCwwXSx2PSJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hIixwPSIwIixkPWZ1bmN0aW9uKEYseCl7Zm9yKHZhciB3PS0xLEM9eDsrK3c8NjspaVt3XT0oQys9Ripp''@;'; put 'put ''W3ddKSUxZTcsQz1mKEMvMWU3KX0sbT1mdW5jdGlvbihGKXtmb3IodmFyIHg9Nix3PTA7LS14Pj0wOylpW3hdPWYoKHcrPWlbeF0pL0YpLHc9dyVGKjFlN30sRT1mdW5jdGlvbigpe2Zvcih2YXIgRj02LHg9IiI7LS1GPj0wOylpZigiIiE9PXh8fDA9PT1GfHwwIT09aVtGXSl7dmFyIHc9U3Ry''@;'; put 'put ''aW5nKGlbRl0pO3g9IiI9PT14P3c6eCthLmNhbGwocCw3LXcubGVuZ3RoKSt3fXJldHVybiB4fSxnPWZ1bmN0aW9uKEYseCx3KXtyZXR1cm4gMD09PXg/dzp4JTI9PTE/ZyhGLHgtMSx3KkYpOmcoRipGLHgvMix3KX07bihuLlArbi5GKighIXUmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMp''@;'; put 'put ''fHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhdCg3OTQ0OCkoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b0ZpeGVkOmZ1bmN0''@;'; put 'put ''aW9uKHgpe3ZhciBULGIsTCxVLHc9cyh0aGlzLHYpLEM9ZSh4KSxJPSIiLE09cDtpZihDPDB8fEM+MjApdGhyb3cgUmFuZ2VFcnJvcih2KTtpZih3IT13KXJldHVybiJOYU4iO2lmKHc8PS0xZTIxfHx3Pj0xZTIxKXJldHVybiBTdHJpbmcodyk7aWYodzwwJiYoST0iLSIsdz0tdyksdz4xZS0y''@;'; put 'put ''MSlpZihUPWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD0wLHc9Rjt3Pj00MDk2Oyl4Kz0xMix3Lz00MDk2O2Zvcig7dz49MjspeCs9MSx3Lz0yO3JldHVybiB4fSh3KmcoMiw2OSwxKSktNjksYj1UPDA/dypnKDIsLVQsMSk6dy9nKDIsVCwxKSxiKj00NTAzNTk5NjI3MzcwNDk2LChUPTUyLVQpPjAp''@;'; put 'put ''e2ZvcihkKDAsYiksTD1DO0w+PTc7KWQoMWU3LDApLEwtPTc7Zm9yKGQoZygxMCxMLDEpLDApLEw9VC0xO0w+PTIzOyltKDE8PDIzKSxMLT0yMzttKDE8PEwpLGQoMSwxKSxtKDIpLE09RSgpfWVsc2UgZCgwLGIpLGQoMTw8LVQsMCksTT1FKCkrYS5jYWxsKHAsQyk7cmV0dXJuIE09Qz4wP0kr''@;'; put 'put ''KChVPU0ubGVuZ3RoKTw9Qz8iMC4iK2EuY2FsbChwLEMtVSkrTTpNLnNsaWNlKDAsVS1DKSsiLiIrTS5zbGljZShVLUMpKTpJK019fSl9LDY3MDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNzk0NDgpLHM9dCgxNTEyMiksYT0xLi50b1ByZWNpc2lvbjtuKG4u''@;'; put 'put ''UCtuLkYqKGUoZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1hLmNhbGwoMSx2b2lkIDApfSl8fCFlKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9QcmVjaXNpb246ZnVuY3Rpb24oZil7dmFyIGk9cyh0aGlzLCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0''@;'; put 'put ''aW9uISIpO3JldHVybiB2b2lkIDA9PT1mP2EuY2FsbChpKTphLmNhbGwoaSxmKX19KX0sMTE0MzA6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TK24uRiwiT2JqZWN0Iix7YXNzaWduOnQoMjgyMDYpfSl9LDkzNTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIs''@;'; put 'put ''e2NyZWF0ZTp0KDg0NzE5KX0pfSw4OTQ0ODooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMrbi5GKiF0KDE3NjMpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0aWVzOnQoMjE2MjYpfSl9LDY2MDY0OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYqIXQoMTc2MyksIk9iamVj''@;'; put 'put ''dCIse2RlZmluZVByb3BlcnR5OnQoNDc5NjcpLmZ9KX0sNDgyMzY6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCgxMjk4OCkub25GcmVlemU7dCg4MDkyMykoImZyZWV6ZSIsZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBzJiZuKHUpP3MoZSh1KSk6dX19KX0sMjI2''@;'; put 'put ''NDI6KGMsbCx0KT0+e3ZhciBuPXQoNTcyMjEpLGU9dCg2ODY0MSkuZjt0KDgwOTIzKSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLHUpe3JldHVybiBlKG4oYSksdSl9fSl9LDgxODk1OihjLGwsdCk9Pnt0KDgwOTIzKSgiZ2V0T3duUHJv''@;'; put 'put ''cGVydHlOYW1lcyIsZnVuY3Rpb24oKXtyZXR1cm4gdCg0NzY1KS5mfSl9LDUzZTM6KGMsbCx0KT0+e3ZhciBuPXQoMTgyNzApLGU9dCg0MDYyNyk7dCg4MDkyMykoImdldFByb3RvdHlwZU9mIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZShuKGEpKX19KX0sNzkwNzM6''@;'; put 'put ''KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpO3QoODA5MjMpKCJpc0V4dGVuc2libGUiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4hIW4oYSkmJighZXx8ZShhKSl9fSl9LDY5MzE4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTt0KDgwOTIzKSgiaXNGcm96ZW4iLGZ1bmN0''@;'; put 'put ''aW9uKGUpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4hbihhKXx8ISFlJiZlKGEpfX0pfSw2NTAzMjooYyxsLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzU2VhbGVkIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIW4oYSl8fCEhZSYmZShhKX19KX0sMzg0''@;'; put 'put ''NTE6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJPYmplY3QiLHtpczp0KDczNTkpfSl9LDg4NjQ3OihjLGwsdCk9Pnt2YXIgbj10KDE4MjcwKSxlPXQoNTEzMTEpO3QoODA5MjMpKCJrZXlzIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZShuKGEpKX19KX0s''@;'; put 'put ''MTU1NzI6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCgxMjk4OCkub25GcmVlemU7dCg4MDkyMykoInByZXZlbnRFeHRlbnNpb25zIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSw3MzgyMjooYyxsLHQpPT57dmFyIG49dCg0''@;'; put 'put ''MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgic2VhbCIsZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBzJiZuKHUpP3MoZSh1KSk6dX19KX0sMTgxMzI6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJPYmplY3QiLHtzZXRQcm90b3R5cGVPZjp0''@;'; put 'put ''KDI1MTcwKS5zZXR9KX0sMTc0ODI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM0ODQ4KSxlPXt9O2VbdCg2NzU3NCkoInRvU3RyaW5nVGFnIildPSJ6IixlKyIiIT0iW29iamVjdCB6XSImJnQoMjg4NTkpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9LCEwKX0sOTYxMDg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzU4OSk7bihuLkcrbi5GKihwYXJzZUZsb2F0IT1lKSx7cGFyc2VGbG9hdDplfSl9LDkwNTcxOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoODI3MzgpO24obi5H''@;'; put 'put ''K24uRioocGFyc2VJbnQhPWUpLHtwYXJzZUludDplfSl9LDcxMDM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2MzM4Nykscz10KDQyMjgpLGE9KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5hcHBseSx1PUZ1bmN0aW9uLmFwcGx5O24obi5TK24uRiohdCg3OTQ0OCkoZnVuY3Rpb24oKXth''@;'; put 'put ''KGZ1bmN0aW9uKCl7fSl9KSwiUmVmbGVjdCIse2FwcGx5OmZ1bmN0aW9uKGksdixwKXt2YXIgZD1lKGkpLG09cyhwKTtyZXR1cm4gYT9hKGQsdixtKTp1LmNhbGwoZCx2LG0pfX0pfSw4MjU4NjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDg0NzE5KSxzPXQoNjMzODcpLGE9dCg0MjI4''@;'; put 'put ''KSx1PXQoNDMzMDUpLGY9dCg3OTQ0OCksaT10KDE1NTM4KSx2PSh0KDY3NTI2KS5SZWZsZWN0fHx7fSkuY29uc3RydWN0LHA9ZihmdW5jdGlvbigpe2Z1bmN0aW9uIG0oKXt9cmV0dXJuISh2KGZ1bmN0aW9uKCl7fSxbXSxtKWluc3RhbmNlb2YgbSl9KSxkPSFmKGZ1bmN0aW9uKCl7dihmdW5j''@;'; put 'put ''dGlvbigpe30pfSk7bihuLlMrbi5GKihwfHxkKSwiUmVmbGVjdCIse2NvbnN0cnVjdDpmdW5jdGlvbihFLGcpe3MoRSksYShnKTt2YXIgRD1hcmd1bWVudHMubGVuZ3RoPDM/RTpzKGFyZ3VtZW50c1syXSk7aWYoZCYmIXApcmV0dXJuIHYoRSxnLEQpO2lmKEU9PUQpe3N3aXRjaChnLmxlbmd0''@;'; put 'put ''aCl7Y2FzZSAwOnJldHVybiBuZXcgRTtjYXNlIDE6cmV0dXJuIG5ldyBFKGdbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBFKGdbMF0sZ1sxXSxnWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBFKGdbMF0sZ1sxXSxnWzJdLGdbM10pfXZhciBGPVtu''@;'; put 'put ''dWxsXTtyZXR1cm4gRi5wdXNoLmFwcGx5KEYsZyksbmV3KGkuYXBwbHkoRSxGKSl9dmFyIHg9RC5wcm90b3R5cGUsdz1lKHUoeCk/eDpPYmplY3QucHJvdG90eXBlKSxDPUZ1bmN0aW9uLmFwcGx5LmNhbGwoRSx3LGcpO3JldHVybiB1KEMpP0M6d319KX0sOTI1NTI6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDc5NjcpLGU9dCg5MjEyNykscz10KDQyMjgpLGE9dCg4MzA0OCk7ZShlLlMrZS5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShuLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLCJSZWZsZWN0Iix7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24o''@;'; put 'put ''ZixpLHYpe3MoZiksaT1hKGksITApLHModik7dHJ5e3JldHVybiBuLmYoZixpLHYpLCEwfWNhdGNoe3JldHVybiExfX19KX0sNDM3NjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDY4NjQxKS5mLHM9dCg0MjI4KTtuKG4uUywiUmVmbGVjdCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9u''@;'; put 'put ''KHUsZil7dmFyIGk9ZShzKHUpLGYpO3JldHVybiEoaSYmIWkuY29uZmlndXJhYmxlKSYmZGVsZXRlIHVbZl19fSl9LDc1MTUzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDQyMjgpLHM9ZnVuY3Rpb24oYSl7dGhpcy5fdD1lKGEpLHRoaXMuX2k9MDt2YXIgZix1''@;'; put 'put ''PXRoaXMuX2s9W107Zm9yKGYgaW4gYSl1LnB1c2goZil9O3QoNjAzMikocywiT2JqZWN0IixmdW5jdGlvbigpe3ZhciBmLGE9dGhpcyx1PWEuX2s7ZG97aWYoYS5faT49dS5sZW5ndGgpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX13aGlsZSghKChmPXVbYS5faSsrXSlpbiBhLl90KSk7''@;'; put 'put ''cmV0dXJue3ZhbHVlOmYsZG9uZTohMX19KSxuKG4uUywiUmVmbGVjdCIse2VudW1lcmF0ZTpmdW5jdGlvbih1KXtyZXR1cm4gbmV3IHModSl9fSl9LDUyNjUwOihjLGwsdCk9Pnt2YXIgbj10KDY4NjQxKSxlPXQoOTIxMjcpLHM9dCg0MjI4KTtlKGUuUywiUmVmbGVjdCIse2dldE93blByb3Bl''@;'; put 'put ''cnR5RGVzY3JpcHRvcjpmdW5jdGlvbih1LGYpe3JldHVybiBuLmYocyh1KSxmKX19KX0sMzExMDQ6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg0MDYyNykscz10KDQyMjgpO24obi5TLCJSZWZsZWN0Iix7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odSl7cmV0dXJuIGUocyh1KSl9fSl9''@;'; put 'put ''LDExODc5OihjLGwsdCk9Pnt2YXIgbj10KDY4NjQxKSxlPXQoNDA2MjcpLHM9dCg1NzkxNyksYT10KDkyMTI3KSx1PXQoNDMzMDUpLGY9dCg0MjI4KTthKGEuUywiUmVmbGVjdCIse2dldDpmdW5jdGlvbiBpKHYscCl7dmFyIG0sRSxkPWFyZ3VtZW50cy5sZW5ndGg8Mz92OmFyZ3VtZW50c1sy''@;'; put 'put ''XTtyZXR1cm4gZih2KT09PWQ/dltwXToobT1uLmYodixwKSk/cyhtLCJ2YWx1ZSIpP20udmFsdWU6dm9pZCAwIT09bS5nZXQ/bS5nZXQuY2FsbChkKTp2b2lkIDA6dShFPWUodikpP2koRSxwLGQpOnZvaWQgMH19KX0sMjE4ODM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJSZWZs''@;'; put 'put ''ZWN0Iix7aGFzOmZ1bmN0aW9uKHMsYSl7cmV0dXJuIGEgaW4gc319KX0sMzU0MzM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg0MjI4KSxzPU9iamVjdC5pc0V4dGVuc2libGU7bihuLlMsIlJlZmxlY3QiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSksIXN8fHMo''@;'; put 'put ''dSl9fSl9LDU1ZTM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJSZWZsZWN0Iix7b3duS2V5czp0KDk2MjIyKX0pfSwxNTkzMjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDQyMjgpLHM9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO24obi5TLCJSZWZsZWN0Iix7cHJldmVu''@;'; put 'put ''dEV4dGVuc2lvbnM6ZnVuY3Rpb24odSl7ZSh1KTt0cnl7cmV0dXJuIHMmJnModSksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSwyNjMxNjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDI1MTcwKTtlJiZuKG4uUywiUmVmbGVjdCIse3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGEsdSl7ZS5j''@;'; put 'put ''aGVjayhhLHUpO3RyeXtyZXR1cm4gZS5zZXQoYSx1KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDU0NDM6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLGU9dCg2ODY0MSkscz10KDQwNjI3KSxhPXQoNTc5MTcpLHU9dCg5MjEyNyksZj10KDExOTk2KSxpPXQoNDIyOCksdj10KDQzMzA1KTt1KHUu''@;'; put 'put ''UywiUmVmbGVjdCIse3NldDpmdW5jdGlvbiBwKGQsbSxFKXt2YXIgRix4LGc9YXJndW1lbnRzLmxlbmd0aDw0P2Q6YXJndW1lbnRzWzNdLEQ9ZS5mKGkoZCksbSk7aWYoIUQpe2lmKHYoeD1zKGQpKSlyZXR1cm4gcCh4LG0sRSxnKTtEPWYoMCl9aWYoYShELCJ2YWx1ZSIpKXtpZighMT09PUQu''@;'; put 'put ''d3JpdGFibGV8fCF2KGcpKXJldHVybiExO2lmKEY9ZS5mKGcsbSkpe2lmKEYuZ2V0fHxGLnNldHx8ITE9PT1GLndyaXRhYmxlKXJldHVybiExO0YudmFsdWU9RSxuLmYoZyxtLEYpfWVsc2Ugbi5mKGcsbSxmKDAsRSkpO3JldHVybiEwfXJldHVybiB2b2lkIDAhPT1ELnNldCYmKEQuc2V0LmNh''@;'; put 'put ''bGwoZyxFKSwhMCl9fSl9LDgzMDE6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLGU9dCg5ODg4MCkscz10KDQ3OTY3KS5mLGE9dCg1OTQxNSkuZix1PXQoOTU0MTEpLGY9dCgxMTU4KSxpPW4uUmVnRXhwLHY9aSxwPWkucHJvdG90eXBlLGQ9L2EvZyxtPS9hL2csRT1uZXcgaShkKSE9PWQ7aWYo''@;'; put 'put ''dCgxNzYzKSYmKCFFfHx0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBtW3QoNjc1NzQpKCJtYXRjaCIpXT0hMSxpKGQpIT1kfHxpKG0pPT1tfHwiL2EvaSIhPWkoZCwiaSIpfSkpKXtpPWZ1bmN0aW9uKHcsQyl7dmFyIEk9dGhpcyBpbnN0YW5jZW9mIGksTT11KHcpLFQ9dm9pZCAwPT09Qzty''@;'; put 'put ''ZXR1cm4hSSYmTSYmdy5jb25zdHJ1Y3Rvcj09PWkmJlQ/dzplKEU/bmV3IHYoTSYmIVQ/dy5zb3VyY2U6dyxDKTp2KChNPXcgaW5zdGFuY2VvZiBpKT93LnNvdXJjZTp3LE0mJlQ/Zi5jYWxsKHcpOkMpLEk/dGhpczpwLGkpfTtmb3IodmFyIGc9ZnVuY3Rpb24oeCl7eCBpbiBpfHxzKGkseCx7''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2W3hdfSxzZXQ6ZnVuY3Rpb24odyl7dlt4XT13fX0pfSxEPWEodiksRj0wO0QubGVuZ3RoPkY7KWcoRFtGKytdKTtwLmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGU9cCx0KDI4ODU5KShuLCJSZWdFeHAiLGkpfXQoNTU3NjIp''@;'; put 'put ''KCJSZWdFeHAiKX0sOTQxMTY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY5NjAwKTt0KDkyMTI3KSh7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDpuIT09Ly4vLmV4ZWN9LHtleGVjOm59KX0sMzk2Mzg6KGMsbCx0KT0+e3QoMTc2MykmJiJnIiE9Ly4vZy5mbGFncyYm''@;'; put 'put ''dCg0Nzk2NykuZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6dCgxMTU4KX0pfSw0MDQwOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODE0ODUpLHM9dCgyODgyOCksYT10KDUyNTM1KTt0KDY5MjI4KSgibWF0Y2giLDEsZnVu''@;'; put 'put ''Y3Rpb24odSxmLGksdil7cmV0dXJuW2Z1bmN0aW9uKGQpe3ZhciBtPXUodGhpcyksRT1kPy5bZl07cmV0dXJuIHZvaWQgMCE9PUU/RS5jYWxsKGQsbSk6bmV3IFJlZ0V4cChkKVtmXShTdHJpbmcobSkpfSxmdW5jdGlvbihwKXt2YXIgZD12KGkscCx0aGlzKTtpZihkLmRvbmUpcmV0dXJuIGQu''@;'; put 'put ''dmFsdWU7dmFyIG09bihwKSxFPVN0cmluZyh0aGlzKTtpZighbS5nbG9iYWwpcmV0dXJuIGEobSxFKTt2YXIgZz1tLnVuaWNvZGU7bS5sYXN0SW5kZXg9MDtmb3IodmFyIHgsRD1bXSxGPTA7bnVsbCE9PSh4PWEobSxFKSk7KXt2YXIgdz1TdHJpbmcoeFswXSk7RFtGXT13LCIiPT09dyYmKG0u''@;'; put 'put ''bGFzdEluZGV4PXMoRSxlKG0ubGFzdEluZGV4KSxnKSksRisrfXJldHVybiAwPT09Rj9udWxsOkR9XX0pfSw2ODMwNTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDIyOCksZT10KDE4MjcwKSxzPXQoODE0ODUpLGE9dCgyNzA4NyksdT10KDI4ODI4KSxmPXQoNTI1MzUpLGk9TWF0''@;'; put 'put ''aC5tYXgsdj1NYXRoLm1pbixwPU1hdGguZmxvb3IsZD0vXCQoWyQmYCddfFxkXGQ/fDxbXj5dKj4pL2csbT0vXCQoWyQmYCddfFxkXGQ/KS9nLEU9ZnVuY3Rpb24oZyl7cmV0dXJuIHZvaWQgMD09PWc/ZzpTdHJpbmcoZyl9O3QoNjkyMjgpKCJyZXBsYWNlIiwyLGZ1bmN0aW9uKGcsRCxGLHgp''@;'; put 'put ''e3JldHVybltmdW5jdGlvbihJLE0pe3ZhciBUPWcodGhpcyksYj1JPy5bRF07cmV0dXJuIHZvaWQgMCE9PWI/Yi5jYWxsKEksVCxNKTpGLmNhbGwoU3RyaW5nKFQpLEksTSl9LGZ1bmN0aW9uKEMsSSl7dmFyIE09eChGLEMsdGhpcyxJKTtpZihNLmRvbmUpcmV0dXJuIE0udmFsdWU7dmFyIFQ9''@;'; put 'put ''bihDKSxiPVN0cmluZyh0aGlzKSxMPSJmdW5jdGlvbiI9PXR5cGVvZiBJO0x8fChJPVN0cmluZyhJKSk7dmFyIFU9VC5nbG9iYWw7aWYoVSl7dmFyIFo9VC51bmljb2RlO1QubGFzdEluZGV4PTB9Zm9yKHZhciBudD1bXTs7KXt2YXIgdHQ9ZihULGIpO2lmKG51bGw9PT10dHx8KG50LnB1c2go''@;'; put 'put ''dHQpLCFVKSlicmVhazsiIj09PVN0cmluZyh0dFswXSkmJihULmxhc3RJbmRleD11KGIscyhULmxhc3RJbmRleCksWikpfWZvcih2YXIgbXQ9IiIscT0wLFg9MDtYPG50Lmxlbmd0aDtYKyspe3R0PW50W1hdO2Zvcih2YXIgZXQ9U3RyaW5nKHR0WzBdKSxWPWkodihhKHR0LmluZGV4KSxiLmxl''@;'; put 'put ''bmd0aCksMCksZnQ9W10sZHQ9MTtkdDx0dC5sZW5ndGg7ZHQrKylmdC5wdXNoKEUodHRbZHRdKSk7dmFyIGJ0PXR0Lmdyb3VwcztpZihMKXt2YXIgT3Q9W2V0XS5jb25jYXQoZnQsVixiKTt2b2lkIDAhPT1idCYmT3QucHVzaChidCk7dmFyIE50PVN0cmluZyhJLmFwcGx5KHZvaWQgMCxPdCkp''@;'; put 'put ''fWVsc2UgTnQ9dyhldCxiLFYsZnQsYnQsSSk7Vj49cSYmKG10Kz1iLnNsaWNlKHEsVikrTnQscT1WK2V0Lmxlbmd0aCl9cmV0dXJuIG10K2Iuc2xpY2UocSl9XTtmdW5jdGlvbiB3KEMsSSxNLFQsYixMKXt2YXIgVT1NK0MubGVuZ3RoLFo9VC5sZW5ndGgsbnQ9bTtyZXR1cm4gdm9pZCAwIT09''@;'; put 'put ''YiYmKGI9ZShiKSxudD1kKSxGLmNhbGwoTCxudCxmdW5jdGlvbih0dCx5dCl7dmFyIG10O3N3aXRjaCh5dC5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIEM7Y2FzZSJgIjpyZXR1cm4gSS5zbGljZSgwLE0pO2Nhc2UiJyI6cmV0dXJuIEkuc2xpY2UoVSk7Y2Fz''@;'; put 'put ''ZSI8IjptdD1iW3l0LnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBxPSt5dDtpZigwPT09cSlyZXR1cm4gdHQ7aWYocT5aKXt2YXIgWD1wKHEvMTApO3JldHVybiAwPT09WD90dDpYPD1aP3ZvaWQgMD09PVRbWC0xXT95dC5jaGFyQXQoMSk6VFtYLTFdK3l0LmNoYXJBdCgxKTp0dH1t''@;'; put 'put ''dD1UW3EtMV19cmV0dXJuIHZvaWQgMD09PW10PyIiOm10fSl9fSl9LDc0NzAxOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoNzM1OSkscz10KDUyNTM1KTt0KDY5MjI4KSgic2VhcmNoIiwxLGZ1bmN0aW9uKGEsdSxmLGkpe3JldHVybltmdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''ZD1hKHRoaXMpLG09cD8uW3VdO3JldHVybiB2b2lkIDAhPT1tP20uY2FsbChwLGQpOm5ldyBSZWdFeHAocClbdV0oU3RyaW5nKGQpKX0sZnVuY3Rpb24odil7dmFyIHA9aShmLHYsdGhpcyk7aWYocC5kb25lKXJldHVybiBwLnZhbHVlO3ZhciBkPW4odiksbT1TdHJpbmcodGhpcyksRT1kLmxh''@;'; put 'put ''c3RJbmRleDtlKEUsMCl8fChkLmxhc3RJbmRleD0wKTt2YXIgZz1zKGQsbSk7cmV0dXJuIGUoZC5sYXN0SW5kZXgsRSl8fChkLmxhc3RJbmRleD1FKSxudWxsPT09Zz8tMTpnLmluZGV4fV19KX0sMjAzNDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk1NDExKSxlPXQoNDIyOCks''@;'; put 'put ''cz10KDE5MTkwKSxhPXQoMjg4MjgpLHU9dCg4MTQ4NSksZj10KDUyNTM1KSxpPXQoNjk2MDApLHY9dCg3OTQ0OCkscD1NYXRoLm1pbixkPVtdLnB1c2gsbT0ic3BsaXQiLEU9Imxlbmd0aCIsZz0ibGFzdEluZGV4IixEPTQyOTQ5NjcyOTUsRj0hdihmdW5jdGlvbigpe1JlZ0V4cChELCJ5Iil9''@;'; put 'put ''KTt0KDY5MjI4KSgic3BsaXQiLDIsZnVuY3Rpb24oeCx3LEMsSSl7dmFyIE07cmV0dXJuIE09ImMiPT0iYWJiYyJbbV0oLyhiKSovKVsxXXx8NCE9InRlc3QiW21dKC8oPzopLywtMSlbRV18fDIhPSJhYiJbbV0oLyg/OmFiKSovKVtFXXx8NCE9Ii4iW21dKC8oLj8pKC4/KS8pW0VdfHwiLiJb''@;'; put 'put ''bV0oLygpKCkvKVtFXT4xfHwiIlttXSgvLj8vKVtFXT9mdW5jdGlvbihULGIpe3ZhciBMPVN0cmluZyh0aGlzKTtpZih2b2lkIDA9PT1UJiYwPT09YilyZXR1cm5bXTtpZighbihUKSlyZXR1cm4gQy5jYWxsKEwsVCxiKTtmb3IodmFyIG10LHEsWCxVPVtdLG50PTAsdHQ9dm9pZCAwPT09Yj9E''@;'; put 'put ''OmI+Pj4wLHl0PW5ldyBSZWdFeHAoVC5zb3VyY2UsKFQuaWdub3JlQ2FzZT8iaSI6IiIpKyhULm11bHRpbGluZT8ibSI6IiIpKyhULnVuaWNvZGU/InUiOiIiKSsoVC5zdGlja3k/InkiOiIiKSsiZyIpOyhtdD1pLmNhbGwoeXQsTCkpJiYhKChxPXl0W2ddKT5udCYmKFUucHVzaChMLnNsaWNl''@;'; put 'put ''KG50LG10LmluZGV4KSksbXRbRV0+MSYmbXQuaW5kZXg8TFtFXSYmZC5hcHBseShVLG10LnNsaWNlKDEpKSxYPW10WzBdW0VdLG50PXEsVVtFXT49dHQpKTspeXRbZ109PT1tdC5pbmRleCYmeXRbZ10rKztyZXR1cm4gbnQ9PT1MW0VdPyhYfHwheXQudGVzdCgiIikpJiZVLnB1c2goIiIpOlUu''@;'; put 'put ''cHVzaChMLnNsaWNlKG50KSksVVtFXT50dD9VLnNsaWNlKDAsdHQpOlV9OiIwIlttXSh2b2lkIDAsMClbRV0/ZnVuY3Rpb24oVCxiKXtyZXR1cm4gdm9pZCAwPT09VCYmMD09PWI/W106Qy5jYWxsKHRoaXMsVCxiKX06QyxbZnVuY3Rpb24oYixMKXt2YXIgVT14KHRoaXMpLFo9Yj8uW3ddO3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT1aP1ouY2FsbChiLFUsTCk6TS5jYWxsKFN0cmluZyhVKSxiLEwpfSxmdW5jdGlvbihULGIpe3ZhciBMPUkoTSxULHRoaXMsYixNIT09Qyk7aWYoTC5kb25lKXJldHVybiBMLnZhbHVlO3ZhciBVPWUoVCksWj1TdHJpbmcodGhpcyksbnQ9cyhVLFJlZ0V4cCksdHQ9VS51''@;'; put 'put ''bmljb2RlLG10PW5ldyBudChGP1U6Il4oPzoiK1Uuc291cmNlKyIpIiwoVS5pZ25vcmVDYXNlPyJpIjoiIikrKFUubXVsdGlsaW5lPyJtIjoiIikrKFUudW5pY29kZT8idSI6IiIpKyhGPyJ5IjoiZyIpKSxxPXZvaWQgMD09PWI/RDpiPj4+MDtpZigwPT09cSlyZXR1cm5bXTtpZigwPT09Wi5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIG51bGw9PT1mKG10LFopP1taXTpbXTtmb3IodmFyIFg9MCxldD0wLFY9W107ZXQ8Wi5sZW5ndGg7KXttdC5sYXN0SW5kZXg9Rj9ldDowO3ZhciBkdCxmdD1mKG10LEY/WjpaLnNsaWNlKGV0KSk7aWYobnVsbD09PWZ0fHwoZHQ9cCh1KG10Lmxhc3RJbmRleCsoRj8wOmV0''@;'; put 'put ''KSksWi5sZW5ndGgpKT09PVgpZXQ9YShaLGV0LHR0KTtlbHNle2lmKFYucHVzaChaLnNsaWNlKFgsZXQpKSxWLmxlbmd0aD09PXEpcmV0dXJuIFY7Zm9yKHZhciBidD0xO2J0PD1mdC5sZW5ndGgtMTtidCsrKWlmKFYucHVzaChmdFtidF0pLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtldD1YPWR0''@;'; put 'put ''fX1yZXR1cm4gVi5wdXNoKFouc2xpY2UoWCkpLFZ9XX0pfSw3ODYwNDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMzk2MzgpO3ZhciBuPXQoNDIyOCksZT10KDExNTgpLHM9dCgxNzYzKSxhPSJ0b1N0cmluZyIsdT0vLi9bYV0sZj1mdW5jdGlvbihpKXt0KDI4ODU5KShSZWdFeHAucHJvdG90''@;'; put 'put ''eXBlLGEsaSwhMCl9O3QoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIi9hL2IiIT11LmNhbGwoe3NvdXJjZToiYSIsZmxhZ3M6ImIifSl9KT9mKGZ1bmN0aW9uKCl7dmFyIHY9bih0aGlzKTtyZXR1cm4iLyIuY29uY2F0KHYuc291cmNlLCIvIiwiZmxhZ3MiaW4gdj92LmZsYWdzOiFzJiZ2IGlu''@;'; put 'put ''c3RhbmNlb2YgUmVnRXhwP2UuY2FsbCh2KTp2b2lkIDApfSk6dS5uYW1lIT1hJiZmKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY2FsbCh0aGlzKX0pfSw3MTYzMjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzYxOTcpLGU9dCgxMjg4OCk7Yy5leHBvcnRzPXQoNTg5MzMpKCJTZXQiLGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih1KXtyZXR1cm4gbi5kZWYoZSh0aGlzLCJTZXQiKSx1PTA9PT11PzA6dSx1KX19LG4pfSw2NDk3OTooYyxsLHQpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJhbmNob3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwibmFtZSIscyl9fSl9LDg5MDExOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJpZyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG4odGhpcywiYmlnIiwiIiwiIil9fSl9LDU0NTkxOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJsaW5rIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJibGluayIsIiIsIiIpfX0pfSw0NzMzNDooYyxsLHQpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3QoNTI0NjgpKCJib2xkIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJiIiwiIiwiIil9fSl9LDMyNDA1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDkxMjEyKSghMSk7bihuLlAsIlN0cmluZyIse2NvZGVQb2lu''@;'; put 'put ''dEF0OmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSl9fSl9LDE3MjI0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDgxNDg1KSxzPXQoNzg5NDIpLGE9ImVuZHNXaXRoIix1PSIiW2FdO24obi5QK24uRip0KDI1MjAzKShhKSwiU3RyaW5nIix7ZW5kc1dpdGg6''@;'; put 'put ''ZnVuY3Rpb24oaSl7dmFyIHY9cyh0aGlzLGksYSkscD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkPWUodi5sZW5ndGgpLG09dm9pZCAwPT09cD9kOk1hdGgubWluKGUocCksZCksRT1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHYsRSxtKTp2LnNsaWNlKG0tRS5s''@;'; put 'put ''ZW5ndGgsbSk9PT1FfX0pfSw3MDgzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZpeGVkIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJ0dCIsIiIsIiIpfX0pfSw2OTIxMzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJmb250''@;'; put 'put ''Y29sb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJmb250IiwiY29sb3IiLHMpfX0pfSwzODQzNzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJmb250c2l6ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRo''@;'; put 'put ''aXMsImZvbnQiLCJzaXplIixzKX19KX0sMTIyMjA6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3MDE1Nykscz1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7bihuLlMrbi5GKighIWEmJjEhPWEubGVuZ3RoKSwiU3RyaW5nIix7ZnJvbUNvZGVQb2ludDpm''@;'; put 'put ''dW5jdGlvbihmKXtmb3IodmFyIGQsaT1bXSx2PWFyZ3VtZW50cy5sZW5ndGgscD0wO3Y+cDspe2lmKGQ9K2FyZ3VtZW50c1twKytdLGUoZCwxMTE0MTExKSE9PWQpdGhyb3cgUmFuZ2VFcnJvcihkKyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO2kucHVzaChkPDY1NTM2P3MoZCk6cyg1''@;'; put 'put ''NTI5NisoKGQtPTY1NTM2KT4+MTApLGQlMTAyNCs1NjMyMCkpfXJldHVybiBpLmpvaW4oIiIpfX0pfSwyODg3MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3ODk0Mikscz0iaW5jbHVkZXMiO24obi5QK24uRip0KDI1MjAzKShzKSwiU3RyaW5nIix7aW5jbHVk''@;'; put 'put ''ZXM6ZnVuY3Rpb24odSl7cmV0dXJuISF+ZSh0aGlzLHUscykuaW5kZXhPZih1LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjIyMjA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiaXRhbGljcyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG4odGhpcywiaSIsIiIsIiIpfX0pfSw4Mjk3NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTEyMTIpKCEwKTt0KDk4MTc1KShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBhLGU9''@;'; put 'put ''dGhpcy5fdCxzPXRoaXMuX2k7cmV0dXJuIHM+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGE9bihlLHMpLHRoaXMuX2krPWEubGVuZ3RoLHt2YWx1ZTphLGRvbmU6ITF9KX0pfSw3NjU0OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJsaW5rIixmdW5jdGlvbihu''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiYSIsImhyZWYiLHMpfX0pfSwyMzQ4MzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPXQoODE0ODUpO24obi5TLCJTdHJpbmciLHtyYXc6ZnVuY3Rpb24odSl7Zm9yKHZhciBmPWUodS5yYXcpLGk9cyhmLmxl''@;'; put 'put ''bmd0aCksdj1hcmd1bWVudHMubGVuZ3RoLHA9W10sZD0wO2k+ZDspcC5wdXNoKFN0cmluZyhmW2QrK10pKSxkPHYmJnAucHVzaChTdHJpbmcoYXJndW1lbnRzW2RdKSk7cmV0dXJuIHAuam9pbigiIil9fSl9LDQ0ODk0OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUCwiU3RyaW5nIix7''@;'; put 'put ''cmVwZWF0OnQoMjc5MjYpfSl9LDQyODE4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInNtYWxsIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzbWFsbCIsIiIsIiIpfX0pfSwxMDE3NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQo''@;'; put 'put ''OTIxMjcpLGU9dCg4MTQ4NSkscz10KDc4OTQyKSxhPSJzdGFydHNXaXRoIix1PSIiW2FdO24obi5QK24uRip0KDI1MjAzKShhKSwiU3RyaW5nIix7c3RhcnRzV2l0aDpmdW5jdGlvbihpKXt2YXIgdj1zKHRoaXMsaSxhKSxwPWUoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50''@;'; put 'put ''c1sxXTp2b2lkIDAsdi5sZW5ndGgpKSxkPVN0cmluZyhpKTtyZXR1cm4gdT91LmNhbGwodixkLHApOnYuc2xpY2UocCxwK2QubGVuZ3RoKT09PWR9fSl9LDI4NTQzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInN0cmlrZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIG4odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDM1NTk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic3ViIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdWIiLCIiLCIiKX19KX0sODQxNTM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt0KDUyNDY4KSgic3VwIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdXAiLCIiLCIiKX19KX0sMjA5NTc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDQwNjI5KSgidHJpbSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhp''@;'; put 'put ''cywzKX19KX0sOTk2NTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNTc5MTcpLHM9dCgxNzYzKSxhPXQoOTIxMjcpLHU9dCgyODg1OSksZj10KDEyOTg4KS5LRVksaT10KDc5NDQ4KSx2PXQoNDQ1NTYpLHA9dCgzODQ0KSxkPXQoNDQxNSksbT10KDY3NTc0KSxF''@;'; put 'put ''PXQoNDc5NjApLGc9dCgyMzAxMSksRD10KDE1OTY5KSxGPXQoNzc5ODEpLHg9dCg0MjI4KSx3PXQoNDMzMDUpLEM9dCgxODI3MCksST10KDU3MjIxKSxNPXQoODMwNDgpLFQ9dCgxMTk5NiksYj10KDg0NzE5KSxMPXQoNDc2NSksVT10KDY4NjQxKSxaPXQoMTA2MCksbnQ9dCg0Nzk2NyksdHQ9''@;'; put 'put ''dCg1MTMxMSkseXQ9VS5mLG10PW50LmYscT1MLmYsWD1uLlN5bWJvbCxldD1uLkpTT04sVj1ldCYmZXQuc3RyaW5naWZ5LGZ0PSJwcm90b3R5cGUiLGR0PW0oIl9oaWRkZW4iKSxidD1tKCJ0b1ByaW1pdGl2ZSIpLE90PXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE50PXYoInN5bWJvbC1yZWdp''@;'; put 'put ''c3RyeSIpLFl0PXYoInN5bWJvbHMiKSxvbj12KCJvcC1zeW1ib2xzIiksR3Q9T2JqZWN0W2Z0XSx1bj0iZnVuY3Rpb24iPT10eXBlb2YgWCYmISFaLmYseW49bi5RT2JqZWN0LHJuPSF5bnx8IXluW2Z0XXx8IXluW2Z0XS5maW5kQ2hpbGQseG49cyYmaShmdW5jdGlvbigpe3JldHVybiA3IT1i''@;'; put 'put ''KG10KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG10KHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKF8sSCxRKXt2YXIgaXQ9eXQoR3QsSCk7aXQmJmRlbGV0ZSBHdFtIXSxtdChfLEgsUSksaXQmJl8hPT1HdCYmbXQoR3QsSCxpdCl9Om10LHF0PWZ1bmN0aW9u''@;'; put 'put ''KF8pe3ZhciBIPVl0W19dPWIoWFtmdF0pO3JldHVybiBILl9rPV8sSH0sZG49dW4mJiJzeW1ib2wiPT10eXBlb2YgWC5pdGVyYXRvcj9mdW5jdGlvbihfKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIF99OmZ1bmN0aW9uKF8pe3JldHVybiBfIGluc3RhbmNlb2YgWH0sc249ZnVuY3Rpb24oSCxR''@;'; put 'put ''LGl0KXtyZXR1cm4gSD09PUd0JiZzbihvbixRLGl0KSx4KEgpLFE9TShRLCEwKSx4KGl0KSxlKFl0LFEpPyhpdC5lbnVtZXJhYmxlPyhlKEgsZHQpJiZIW2R0XVtRXSYmKEhbZHRdW1FdPSExKSxpdD1iKGl0LHtlbnVtZXJhYmxlOlQoMCwhMSl9KSk6KGUoSCxkdCl8fG10KEgsZHQsVCgxLHt9''@;'; put 'put ''KSksSFtkdF1bUV09ITApLHhuKEgsUSxpdCkpOm10KEgsUSxpdCl9LF90PWZ1bmN0aW9uKEgsUSl7eChIKTtmb3IodmFyIGFuLGl0PUQoUT1JKFEpKSx6dD0wLFF0PWl0Lmxlbmd0aDtRdD56dDspc24oSCxhbj1pdFt6dCsrXSxRW2FuXSk7cmV0dXJuIEh9LFRuPWZ1bmN0aW9uKEgpe3ZhciBR''@;'; put 'put ''PU90LmNhbGwodGhpcyxIPU0oSCwhMCkpO3JldHVybiEodGhpcz09PUd0JiZlKFl0LEgpJiYhZShvbixIKSkmJighKFF8fCFlKHRoaXMsSCl8fCFlKFl0LEgpfHxlKHRoaXMsZHQpJiZ0aGlzW2R0XVtIXSl8fFEpfSxoPWZ1bmN0aW9uKEgsUSl7aWYoSD1JKEgpLFE9TShRLCEwKSxIIT09R3R8''@;'; put 'put ''fCFlKFl0LFEpfHxlKG9uLFEpKXt2YXIgaXQ9eXQoSCxRKTtyZXR1cm4gaXQmJmUoWXQsUSkmJiEoZShILGR0KSYmSFtkdF1bUV0pJiYoaXQuZW51bWVyYWJsZT0hMCksaXR9fSxyPWZ1bmN0aW9uKEgpe2Zvcih2YXIgUXQsUT1xKEkoSCkpLGl0PVtdLHp0PTA7US5sZW5ndGg+enQ7KSFlKFl0''@;'; put 'put ''LFF0PVFbenQrK10pJiZRdCE9ZHQmJlF0IT1mJiZpdC5wdXNoKFF0KTtyZXR1cm4gaXR9LG89ZnVuY3Rpb24oSCl7Zm9yKHZhciBhbixRPUg9PT1HdCxpdD1xKFE/b246SShIKSksenQ9W10sUXQ9MDtpdC5sZW5ndGg+UXQ7KWUoWXQsYW49aXRbUXQrK10pJiYoIVF8fGUoR3QsYW4pKSYmenQu''@;'; put 'put ''cHVzaChZdFthbl0pO3JldHVybiB6dH07dW58fCh1KChYPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFgpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIEg9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksUT1m''@;'; put 'put ''dW5jdGlvbihpdCl7dGhpcz09PUd0JiZRLmNhbGwob24saXQpLGUodGhpcyxkdCkmJmUodGhpc1tkdF0sSCkmJih0aGlzW2R0XVtIXT0hMSkseG4odGhpcyxILFQoMSxpdCkpfTtyZXR1cm4gcyYmcm4mJnhuKEd0LEgse2NvbmZpZ3VyYWJsZTohMCxzZXQ6UX0pLHF0KEgpfSlbZnRdLCJ0b1N0''@;'; put 'put ''cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFUuZj1oLG50LmY9c24sdCg1OTQxNSkuZj1MLmY9cix0KDg0NDkpLmY9VG4sWi5mPW8scyYmIXQoMjI3NTApJiZ1KEd0LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsVG4sITApLEUuZj1mdW5jdGlvbihfKXtyZXR1cm4gcXQobShfKSl9''@;'; put 'put ''KSxhKGEuRythLlcrYS5GKiF1bix7U3ltYm9sOlh9KTtmb3IodmFyIHk9Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIp''@;'; put 'put ''LFA9MDt5Lmxlbmd0aD5QOyltKHlbUCsrXSk7Zm9yKHZhciBLPXR0KG0uc3RvcmUpLCQ9MDtLLmxlbmd0aD4kOylnKEtbJCsrXSk7YShhLlMrYS5GKiF1biwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKF8pe3JldHVybiBlKE50LF8rPSIiKT9OdFtfXTpOdFtfXT1YKF8pfSxrZXlGb3I6ZnVuY3Rp''@;'; put 'put ''b24oSCl7aWYoIWRuKEgpKXRocm93IFR5cGVFcnJvcihIKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgUSBpbiBOdClpZihOdFtRXT09PUgpcmV0dXJuIFF9LHVzZVNldHRlcjpmdW5jdGlvbigpe3JuPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtybj0hMX19KSxhKGEuUythLkYqIXVu''@;'; put 'put ''LCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oSCxRKXtyZXR1cm4gdm9pZCAwPT09UT9iKEgpOl90KGIoSCksUSl9LGRlZmluZVByb3BlcnR5OnNuLGRlZmluZVByb3BlcnRpZXM6X3QsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmgsZ2V0T3duUHJvcGVydHlOYW1lczpyLGdldE93blByb3Bl''@;'; put 'put ''cnR5U3ltYm9sczpvfSk7dmFyIGp0PWkoZnVuY3Rpb24oKXtaLmYoMSl9KTthKGEuUythLkYqanQsIk9iamVjdCIse2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihIKXtyZXR1cm4gWi5mKEMoSCkpfX0pLGV0JiZhKGEuUythLkYqKCF1bnx8aShmdW5jdGlvbigpe3ZhciBfPVgoKTty''@;'; put 'put ''ZXR1cm4iW251bGxdIiE9VihbX10pfHwie30iIT1WKHthOl99KXx8Int9IiE9VihPYmplY3QoXykpfSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKEgpe2Zvcih2YXIgenQsUXQsUT1bSF0saXQ9MTthcmd1bWVudHMubGVuZ3RoPml0OylRLnB1c2goYXJndW1lbnRzW2l0KytdKTtpZihR''@;'; put 'put ''dD16dD1RWzFdLCh3KHp0KXx8dm9pZCAwIT09SCkmJiFkbihIKSlyZXR1cm4gRih6dCl8fCh6dD1mdW5jdGlvbihhbixNbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFF0JiYoTW49UXQuY2FsbCh0aGlzLGFuLE1uKSksIWRuKE1uKSlyZXR1cm4gTW59KSxRWzFdPXp0LFYuYXBwbHkoZXQsUSl9''@;'; put 'put ''fSksWFtmdF1bYnRdfHx0KDMzMzQxKShYW2Z0XSxidCxYW2Z0XS52YWx1ZU9mKSxwKFgsIlN5bWJvbCIpLHAoTWF0aCwiTWF0aCIsITApLHAobi5KU09OLCJKU09OIiwhMCl9LDc5Mzk3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIEYsbj10KDY3NTI2KSxlPXQoNjYxNzkpKDApLHM9dCgy''@;'; put 'put ''ODg1OSksYT10KDEyOTg4KSx1PXQoMjgyMDYpLGY9dCg5OTg4MiksaT10KDQzMzA1KSx2PXQoMTI4ODgpLHA9dCgxMjg4OCksZD0hbi5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBuLG09IldlYWtNYXAiLEU9YS5nZXRXZWFrLGc9T2JqZWN0LmlzRXh0ZW5zaWJsZSxEPWYudWZz''@;'; put 'put ''dG9yZSx4PWZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sdz17Z2V0OmZ1bmN0aW9uKE0pe2lmKGkoTSkpe3ZhciBUPUUoTSk7cmV0dXJuITA9PT1UP0Qodih0aGlzLG0pKS5nZXQoTSk6''@;'; put 'put ''VD9UW3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbihNLFQpe3JldHVybiBmLmRlZih2KHRoaXMsbSksTSxUKX19LEM9Yy5leHBvcnRzPXQoNTg5MzMpKG0seCx3LGYsITAsITApO3AmJmQmJih1KChGPWYuZ2V0Q29uc3RydWN0b3IoeCxtKSkucHJvdG90eXBlLHcpLGEuTkVFRD0hMCxl''@;'; put 'put ''KFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oSSl7dmFyIE09Qy5wcm90b3R5cGUsVD1NW0ldO3MoTSxJLGZ1bmN0aW9uKGIsTCl7aWYoaShiKSYmIWcoYikpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBGKTt2YXIgVT10aGlzLl9mW0ldKGIsTCk7cmV0dXJuInNldCI9PUk/''@;'; put 'put ''dGhpczpVfXJldHVybiBULmNhbGwodGhpcyxiLEwpfSl9KSl9LDc3NDkxOihjLGwsdCk9Pnt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz1uLmtleSxhPW4uc2V0O24uZXhwKHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbihmLGksdixwKXthKGYsaSxlKHYpLHMocCkpfX0pfSw3NDkwNzooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXksYT1uLm1hcCx1PW4uc3RvcmU7bi5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGksdil7dmFyIHA9YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSksZD1hKGUodikscCwhMSk7aWYodm9pZCAw''@;'; put 'put ''PT09ZHx8IWQuZGVsZXRlKGkpKXJldHVybiExO2lmKGQuc2l6ZSlyZXR1cm4hMDt2YXIgbT11LmdldCh2KTtyZXR1cm4gbS5kZWxldGUocCksISFtLnNpemV8fHUuZGVsZXRlKHYpfX0pfSwxOTI2OTooYyxsLHQpPT57dmFyIG49dCg3MTYzMiksZT10KDgwOTU2KSxzPXQoOTczODApLGE9dCg0''@;'; put 'put ''MjI4KSx1PXQoNDA2MjcpLGY9cy5rZXlzLGk9cy5rZXksdj1mdW5jdGlvbihwLGQpe3ZhciBtPWYocCxkKSxFPXUocCk7aWYobnVsbD09PUUpcmV0dXJuIG07dmFyIGc9dihFLGQpO3JldHVybiBnLmxlbmd0aD9tLmxlbmd0aD9lKG5ldyBuKG0uY29uY2F0KGcpKSk6ZzptfTtzLmV4cCh7Z2V0''@;'; put 'put ''TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGQpe3JldHVybiB2KGEoZCksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDppKGFyZ3VtZW50c1sxXSkpfX0pfSw3OTEwMDooYyxsLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg0MDYyNyksYT1uLmhhcyx1PW4uZ2V0LGY9bi5rZXksaT1m''@;'; put 'put ''dW5jdGlvbih2LHAsZCl7aWYoYSh2LHAsZCkpcmV0dXJuIHUodixwLGQpO3ZhciBFPXMocCk7cmV0dXJuIG51bGwhPT1FP2kodixFLGQpOnZvaWQgMH07bi5leHAoe2dldE1ldGFkYXRhOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIGkocCxlKGQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Zihh''@;'; put 'put ''cmd1bWVudHNbMl0pKX19KX0sNzk3MzI6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4ua2V5cyxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZil7cmV0dXJuIHMoZShmKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRz''@;'; put 'put ''WzFdKSl9fSl9LDkxMzE5OihjLGwsdCk9Pnt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz1uLmdldCxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbihmLGkpe3JldHVybiBzKGYsZShpKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9''@;'; put 'put ''LDExNzY6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPXQoNDA2MjcpLGE9bi5oYXMsdT1uLmtleSxmPWZ1bmN0aW9uKGksdixwKXtpZihhKGksdixwKSlyZXR1cm4hMDt2YXIgbT1zKHYpO3JldHVybiBudWxsIT09bSYmZihpLG0scCl9O24uZXhwKHtoYXNNZXRhZGF0YTpm''@;'; put 'put ''dW5jdGlvbih2LHApe3JldHVybiBmKHYsZShwKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LDMxMDc6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uaGFzLGE9bi5rZXk7bi5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGYs''@;'; put 'put ''aSl7cmV0dXJuIHMoZixlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sNjE2OTE6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPXQoNjMzODcpLGE9bi5rZXksdT1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oZCxtKXt1KGksdiwodm9pZCAwIT09bT9lOnMpKGQpLGEobSkpfX19KX0sMzU4OTA6KGMsbCx0KT0+e2Zvcih2YXIgbj10KDk1MTY1KSxlPXQoNTEzMTEpLHM9dCgyODg1OSksYT10KDY3NTI2KSx1PXQoMzMzNDEpLGY9dCg2MDkwNiksaT10KDY3NTc0KSx2PWkoIml0''@;'; put 'put ''ZXJhdG9yIikscD1pKCJ0b1N0cmluZ1RhZyIpLGQ9Zi5BcnJheSxtPXtDU1NSdWxlTGlzdDohMCxDU1NTdHlsZURlY2xhcmF0aW9uOiExLENTU1ZhbHVlTGlzdDohMSxDbGllbnRSZWN0TGlzdDohMSxET01SZWN0TGlzdDohMSxET01TdHJpbmdMaXN0OiExLERPTVRva2VuTGlzdDohMCxEYXRh''@;'; put 'put ''VHJhbnNmZXJJdGVtTGlzdDohMSxGaWxlTGlzdDohMSxIVE1MQWxsQ29sbGVjdGlvbjohMSxIVE1MQ29sbGVjdGlvbjohMSxIVE1MRm9ybUVsZW1lbnQ6ITEsSFRNTFNlbGVjdEVsZW1lbnQ6ITEsTWVkaWFMaXN0OiEwLE1pbWVUeXBlQXJyYXk6ITEsTmFtZWROb2RlTWFwOiExLE5vZGVMaXN0''@;'; put 'put ''OiEwLFBhaW50UmVxdWVzdExpc3Q6ITEsUGx1Z2luOiExLFBsdWdpbkFycmF5OiExLFNWR0xlbmd0aExpc3Q6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYXRoU2VnTGlzdDohMSxTVkdQb2ludExpc3Q6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNvdXJjZUJ1ZmZl''@;'; put 'put ''ckxpc3Q6ITEsU3R5bGVTaGVldExpc3Q6ITAsVGV4dFRyYWNrQ3VlTGlzdDohMSxUZXh0VHJhY2tMaXN0OiExLFRvdWNoTGlzdDohMX0sRT1lKG0pLGc9MDtnPEUubGVuZ3RoO2crKyl7dmFyIEMsRD1FW2ddLEY9bVtEXSx4PWFbRF0sdz14JiZ4LnByb3RvdHlwZTtpZih3JiYod1t2XXx8dSh3''@;'; put 'put ''LHYsZCksd1twXXx8dSh3LHAsRCksZltEXT1kLEYpKWZvcihDIGluIG4pd1tDXXx8cyh3LEMsbltDXSwhMCl9fSw4MjU3NDpjPT57InVzZSBzdHJpY3QiO2MuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImxvY2FsZSI6ImVuIiwiZGF0ZSI6eyJjYSI6WyJncmVnb3J5IiwiYnVkZGhpc3QiLCJjaGlu''@;'; put 'put ''ZXNlIiwiY29wdGljIiwiZGFuZ2kiLCJldGhpb2FhIiwiZXRoaW9waWMiLCJnZW5lcmljIiwiaGVicmV3IiwiaW5kaWFuIiwiaXNsYW1pYyIsImlzbGFtaWNjIiwiamFwYW5lc2UiLCJwZXJzaWFuIiwicm9jIl0sImhvdXJObzAiOnRydWUsImhvdXIxMiI6dHJ1ZSwiZm9ybWF0cyI6eyJzaG9y''@;'; put 'put ''dCI6InsxfSwgezB9IiwibWVkaXVtIjoiezF9LCB7MH0iLCJmdWxsIjoiezF9IFwnYXRcJyB7MH0iLCJsb25nIjoiezF9IFwnYXRcJyB7MH0iLCJhdmFpbGFibGVGb3JtYXRzIjp7ImQiOiJkIiwiRSI6ImNjYyIsIkVkIjoiZCBFIiwiRWhtIjoiRSBoOm1tIGEiLCJFSG0iOiJFIEhIOm1tIiwi''@;'; put 'put ''RWhtcyI6IkUgaDptbTpzcyBhIiwiRUhtcyI6IkUgSEg6bW06c3MiLCJHeSI6InkgRyIsIkd5TU1NIjoiTU1NIHkgRyIsIkd5TU1NZCI6Ik1NTSBkLCB5IEciLCJHeU1NTUVkIjoiRSwgTU1NIGQsIHkgRyIsImgiOiJoIGEiLCJIIjoiSEgiLCJobSI6Img6bW0gYSIsIkhtIjoiSEg6bW0iLCJo''@;'; put 'put ''bXMiOiJoOm1tOnNzIGEiLCJIbXMiOiJISDptbTpzcyIsImhtc3YiOiJoOm1tOnNzIGEgdiIsIkhtc3YiOiJISDptbTpzcyB2IiwiaG12IjoiaDptbSBhIHYiLCJIbXYiOiJISDptbSB2IiwiTSI6IkwiLCJNZCI6Ik0vZCIsIk1FZCI6IkUsIE0vZCIsIk1NTSI6IkxMTCIsIk1NTWQiOiJNTU0g''@;'; put 'put ''ZCIsIk1NTUVkIjoiRSwgTU1NIGQiLCJNTU1NZCI6Ik1NTU0gZCIsIm1zIjoibW06c3MiLCJ5IjoieSIsInlNIjoiTS95IiwieU1kIjoiTS9kL3kiLCJ5TUVkIjoiRSwgTS9kL3kiLCJ5TU1NIjoiTU1NIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1NTUVkIjoiRSwgTU1NIGQsIHkiLCJ5TU1N''@;'; put 'put ''TSI6Ik1NTU0geSIsInlRUVEiOiJRUVEgeSIsInlRUVFRIjoiUVFRUSB5In0sImRhdGVGb3JtYXRzIjp7InlNTU1NRUVFRWQiOiJFRUVFLCBNTU1NIGQsIHkiLCJ5TU1NTWQiOiJNTU1NIGQsIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1kIjoiTS9kL3l5In0sInRpbWVGb3JtYXRzIjp7Imht''@;'; put 'put ''bXNzenp6eiI6Img6bW06c3MgYSB6enp6IiwiaG1zeiI6Img6bW06c3MgYSB6IiwiaG1zIjoiaDptbTpzcyBhIiwiaG0iOiJoOm1tIGEifX0sImNhbGVuZGFycyI6eyJidWRkaGlzdCI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8i''@;'; put 'put ''LCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3Qi''@;'; put 'put ''LCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJN''@;'; put 'put ''b25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQkUiXSwic2hvcnQiOlsiQkUiXSwibG9uZyI6WyJCRSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiY2hpbmVzZSI6eyJt''@;'; put 'put ''b250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNbzEiLCJNbzIiLCJNbzMiLCJNbzQiLCJNbzUiLCJNbzYiLCJNbzciLCJNbzgiLCJNbzkiLCJNbzEwIiwiTW8xMSIsIk1vMTIiXSwibG9uZyI6WyJN''@;'; put 'put ''b250aDEiLCJNb250aDIiLCJNb250aDMiLCJNb250aDQiLCJNb250aDUiLCJNb250aDYiLCJNb250aDciLCJNb250aDgiLCJNb250aDkiLCJNb250aDEwIiwiTW9udGgxMSIsIk1vbnRoMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQi''@;'; put 'put ''OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImNv''@;'; put 'put ''cHRpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIlRvdXQiLCJCYWJhIiwiSGF0b3IiLCJLaWFoayIsIlRvYmEiLCJBbXNoaXIiLCJCYXJhbWhhdCIsIkJhcmFtb3VkYSIsIkJh''@;'; put 'put ''c2hhbnMiLCJQYW9uYSIsIkVwZXAiLCJNZXNyYSIsIk5hc2llIl0sImxvbmciOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwiQmFzaGFucyIsIlBhb25hIiwiRXBlcCIsIk1lc3JhIiwiTmFzaWUiXX0sImRheXMi''@;'; put 'put ''OnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0''@;'; put 'put ''dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImRhbmdpIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIz''@;'; put 'put ''IiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpbIk1vbnRoMSIsIk1vbnRoMiIsIk1vbnRoMyIsIk1v''@;'; put 'put ''bnRoNCIsIk1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJU''@;'; put 'put ''aHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZXRoaW9waWMiOnsibW9udGhzIjp7Im5hcnJvdyI6''@;'; put 'put ''WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJO''@;'; put 'put ''ZWhhc3NlIiwiUGFndW1lbiJdLCJsb25nIjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJT''@;'; put 'put ''IiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFz''@;'; put 'put ''Ijp7Im5hcnJvdyI6WyJFUkEwIiwiRVJBMSJdLCJzaG9ydCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb2FhIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2''@;'; put 'put ''IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXSwibG9u''@;'; put 'put ''ZyI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwi''@;'; put 'put ''UyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCJdLCJz''@;'; put 'put ''aG9ydCI6WyJFUkEwIl0sImxvbmciOlsiRVJBMCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ2VuZXJpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNMDEi''@;'; put 'put ''LCJNMDIiLCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXSwibG9uZyI6WyJNMDEiLCJNMDIiLCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXX0sImRheXMiOnsibmFycm93''@;'; put 'put ''IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0s''@;'; put 'put ''ImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImdyZWdvcnkiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwi''@;'; put 'put ''TSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIs''@;'; put 'put ''Ikp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0''@;'; put 'put ''Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkIiLCJBIiwiQkNFIiwiQ0UiXSwic2hvcnQiOlsiQkMiLCJBRCIsIkJDRSIsIkNFIl0sImxvbmciOlsiQmVm''@;'; put 'put ''b3JlIENocmlzdCIsIkFubm8gRG9taW5pIiwiQmVmb3JlIENvbW1vbiBFcmEiLCJDb21tb24gRXJhIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJoZWJyZXciOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIx''@;'; put 'put ''MCIsIjExIiwiMTIiLCIxMyIsIjciXSwic2hvcnQiOlsiVGlzaHJpIiwiSGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl0sImxvbmciOlsiVGlzaHJpIiwi''@;'; put 'put ''SGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1''@;'; put 'put ''biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBTSJdLCJzaG9ydCI6WyJBTSJdLCJsb25n''@;'; put 'put ''IjpbIkFNIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpbmRpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiQ2hhaXRyYSIsIlZhaXNha2hhIiwiSnlhaXN0''@;'; put 'put ''aGEiLCJBc2FkaGEiLCJTcmF2YW5hIiwiQmhhZHJhIiwiQXN2aW5hIiwiS2FydGlrYSIsIkFncmFoYXlhbmEiLCJQYXVzYSIsIk1hZ2hhIiwiUGhhbGd1bmEiXSwibG9uZyI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFpc3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEiLCJCaGFkcmEiLCJBc3Zp''@;'; put 'put ''bmEiLCJLYXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJT''@;'; put 'put ''dW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiU2FrYSJdLCJzaG9ydCI6WyJTYWthIl0sImxvbmciOlsiU2FrYSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9''@;'; put 'put ''fSwiaXNsYW1pYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0u''@;'; put 'put ''IiwiU2hhdy4iLCJEaHVcdTAyYmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2Fs''@;'; put 'put ''IiwiRGh1XHUwMmJibC1RaVx1MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIs''@;'; put 'put ''Ik1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpc2xhbWljYyI6''@;'; put 'put ''eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0uIiwiU2hhdy4iLCJE''@;'; put 'put ''aHVcdTAyYmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1XHUwMmJi''@;'; put 'put ''bC1RaVx1MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1''@;'; put 'put ''ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJqYXBhbmVzZSI6eyJtb250aHMiOnsi''@;'; put 'put ''bmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVh''@;'; put 'put ''cnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJU''@;'; put 'put ''dWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBc''@;'; put 'put ''dTIwMTM2NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3''@;'; put 'put ''MTcpIiwiWVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwi''@;'; put 'put ''VGVucHlcdTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRh''@;'; put 'put ''aWRcdTAxNGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtc''@;'; put 'put ''dTAxNGQgKDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4''@;'; put 'put ''OThcdTIwMTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAx''@;'; put 'put ''Mzk2MSkiLCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3''@;'; put 'put ''OCkiLCJUZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5''@;'; put 'put ''OTVcdTIwMTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUg''@;'; put 'put ''KDEwMjRcdTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUy''@;'; put 'put ''MDEzMTA1MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFr''@;'; put 'put ''dSAoMTA3N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJK''@;'; put 'put ''XHUwMTRkdG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIs''@;'; put 'put ''IkVpa3lcdTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMx''@;'; put 'put ''MTMyKSIsIkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1''@;'; put 'put ''MDE2YmFuICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJc''@;'; put 'put ''dTAxNGNobyAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMx''@;'; put 'put ''MTc1KSIsIkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTAp''@;'; put 'put ''IiwiS2Vua3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgx''@;'; put 'put ''MjA3XHUyMDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1''@;'; put 'put ''KSIsIkthcm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJL''@;'; put 'put ''YXRlaSAoMTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIs''@;'; put 'put ''IktlbmNoXHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRk''@;'; put 'put ''Y2hcdTAxNGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMx''@;'; put 'put ''Mjk5KSIsIlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFc''@;'; put 'put ''dTIwMTMxMzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYp''@;'; put 'put ''IiwiS2FyeWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYp''@;'; put 'put ''IiwiU2hcdTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFc''@;'; put 'put ''dTIwMTMxMzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkg''@;'; put 'put ''KDEzOTRcdTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAx''@;'; put 'put ''MzE0NTIpIiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2''@;'; put 'put ''NykiLCJcdTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUy''@;'; put 'put ''MDEzMTUwNCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4''@;'; put 'put ''XHUyMDEzMTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkg''@;'; put 'put ''KDE2MjRcdTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVu''@;'; put 'put ''ICgxNjYxXHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwi''@;'; put 'put ''U2hcdTAxNGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4g''@;'; put 'put ''KDE3NDhcdTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRk''@;'; put 'put ''d2EgKDE4MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4''@;'; put 'put ''NTRcdTIwMTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTSIsIlQiLCJTIiwiSCJdLCJzaG9ydCI6WyJUYWlrYSAo''@;'; put 'put ''NjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhc''@;'; put 'put ''dTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRk''@;'; put 'put ''LXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4Miki''@;'; put 'put ''LCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIs''@;'; put 'put ''Ik5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4''@;'; put 'put ''ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdc''@;'; put 'put ''dTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5''@;'; put 'put ''NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5''@;'; put 'put ''MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJK''@;'; put 'put ''aWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIw''@;'; put 'put ''MTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgx''@;'; put 'put ''MDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVp''@;'; put 'put ''Y2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAx''@;'; put 'put ''MzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEz''@;'; put 'put ''MSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlc''@;'; put 'put ''dTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIs''@;'; put 'put ''IkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzEx''@;'; put 'put ''NzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMx''@;'; put 'put ''MTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEy''@;'; put 'put ''MDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMx''@;'; put 'put ''MjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwi''@;'; put 'put ''QnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIs''@;'; put 'put ''IkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAx''@;'; put 'put ''NGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUy''@;'; put 'put ''MDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEz''@;'; put 'put ''MTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1''@;'; put 'put ''MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIs''@;'; put 'put ''IktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlc''@;'; put 'put ''dTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1''@;'; put 'put ''ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMx''@;'; put 'put ''NDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYp''@;'; put 'put ''IiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5''@;'; put 'put ''Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgx''@;'; put 'put ''NTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgx''@;'; put 'put ''NjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1h''@;'; put 'put ''bmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwi''@;'; put 'put ''SFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgx''@;'; put 'put ''NzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNl''@;'; put 'put ''aSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVp''@;'; put 'put ''ICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNZWlq''@;'; put 'put ''aSIsIlRhaXNoXHUwMTRkIiwiU2hcdTAxNGR3YSIsIkhlaXNlaSJdLCJsb25nIjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRk''@;'; put 'put ''ICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUy''@;'; put 'put ''MDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3''@;'; put 'put ''LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQp''@;'; put 'put ''IiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0''@;'; put 'put ''ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMx''@;'; put 'put ''XHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAx''@;'; put 'put ''Mzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4g''@;'; put 'put ''KDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJD''@;'; put 'put ''aFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDAp''@;'; put 'put ''IiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVc''@;'; put 'put ''dTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwi''@;'; put 'put ''S2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAx''@;'; put 'put ''MzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUy''@;'; put 'put ''MDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDEx''@;'; put 'put ''NDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1Niki''@;'; put 'put ''LCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYp''@;'; put 'put ''IiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUy''@;'; put 'put ''MDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIw''@;'; put 'put ''MTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAx''@;'; put 'put ''NGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwi''@;'; put 'put ''Slx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEy''@;'; put 'put ''NDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1''@;'; put 'put ''MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4''@;'; put 'put ''KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEz''@;'; put 'put ''MTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAx''@;'; put 'put ''NGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMx''@;'; put 'put ''MzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1''@;'; put 'put ''MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEz''@;'; put 'put ''ODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0''@;'; put 'put ''MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1''@;'; put 'put ''MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0''@;'; put 'put ''ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAo''@;'; put 'put ''MTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgx''@;'; put 'put ''NTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0''@;'; put 'put ''ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0''@;'; put 'put ''ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZc''@;'; put 'put ''dTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUy''@;'; put 'put ''MDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUw''@;'; put 'put ''MTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdl''@;'; put 'put ''bmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1laWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1MDE0ZHdhIiwiSGVpc2VpIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJwZXJzaWFuIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsi''@;'; put 'put ''MSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFu''@;'; put 'put ''ZCJdLCJsb25nIjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFuZCJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwi''@;'; put 'put ''UyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQVAiXSwic2hv''@;'; put 'put ''cnQiOlsiQVAiXSwibG9uZyI6WyJBUCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwicm9jIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIs''@;'; put 'put ''IkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRl''@;'; put 'put ''Y2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2Rh''@;'; put 'put ''eSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl0sInNob3J0IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwibG9uZyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJw''@;'; put 'put ''bSI6IlBNIn19fX0sIm51bWJlciI6eyJudSI6WyJsYXRuIl0sInBhdHRlcm5zIjp7ImRlY2ltYWwiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9In0sImN1cnJlbmN5Ijp7InBvc2l0aXZlUGF0dGVybiI6IntjdXJy''@;'; put 'put ''ZW5jeX17bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e2N1cnJlbmN5fXtudW1iZXJ9In0sInBlcmNlbnQiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn17cGVyY2VudFNpZ259IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17bnVtYmVyfXtwZXJjZW50''@;'; put 'put ''U2lnbn0ifX0sInN5bWJvbHMiOnsibGF0biI6eyJkZWNpbWFsIjoiLiIsImdyb3VwIjoiLCIsIm5hbiI6Ik5hTiIsInBsdXNTaWduIjoiKyIsIm1pbnVzU2lnbiI6Ii0iLCJwZXJjZW50U2lnbiI6IiUiLCJpbmZpbml0eSI6Ilx1MjIxZSJ9fSwiY3VycmVuY2llcyI6eyJBVUQiOiJBJCIsIkJS''@;'; put 'put ''TCI6IlIkIiwiQ0FEIjoiQ0EkIiwiQ05ZIjoiQ05ceGE1IiwiRVVSIjoiXHUyMGFjIiwiR0JQIjoiXHhhMyIsIkhLRCI6IkhLJCIsIklMUyI6Ilx1MjBhYSIsIklOUiI6Ilx1MjBiOSIsIkpQWSI6Ilx4YTUiLCJLUlciOiJcdTIwYTkiLCJNWE4iOiJNWCQiLCJOWkQiOiJOWiQiLCJUV0QiOiJO''@;'; put 'put ''VCQiLCJVU0QiOiIkIiwiVk5EIjoiXHUyMGFiIiwiWEFGIjoiRkNGQSIsIlhDRCI6IkVDJCIsIlhPRiI6IkNGQSIsIlhQRiI6IkNGUEYifX19Jyl9fSxjPT57dmFyIGw9bj0+YyhjLnM9bik7bCgyNDA1MCksbCg5NjkzNSl9XSk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.402fc3cfbc7e1bd4-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30scD17fTtmdW5jdGlvbiByKGUpe3ZhciBhPXBbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYS5leHBvcnRzO3ZhciB0PXBbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBv''@;'; put 'put ''cnRzLHIpLHQubG9hZGVkPSEwLHQuZXhwb3J0c31yLm09cyxlPVtdLHIuTz0oYSx0LG8sbCk9PntpZighdCl7dmFyIGM9MS8wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2Zvcih2YXJbdCxvLGxdPWVbbl0sZD0hMCxmPTA7Zjx0Lmxlbmd0aDtmKyspKCExJmx8fGM+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhyLk8pLmV2ZXJ5KF89PnIuT1tfXSh0W2ZdKSk/dC5zcGxpY2UoZi0tLDEpOihkPSExLGw8YyYmKGM9bCkpO2lmKGQpe2Uuc3BsaWNlKG4tLSwxKTt2YXIgdT1vKCk7dm9pZCAwIT09dSYmKGE9dSl9fXJldHVybiBhfWw9bHx8MDtmb3IodmFyIG49ZS5sZW5ndGg7bj4wJiZlW24tMV1bMl0+''@;'; put 'put ''bDtuLS0pZVtuXT1lW24tMV07ZVtuXT1bdCxvLGxdfSxyLm49ZT0+e3ZhciBhPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiByLmQoYSx7YX0pLGF9LHIuZD0oZSxhKT0+e2Zvcih2YXIgdCBpbiBhKXIubyhhLHQpJiYhci5vKGUsdCkmJk9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OmFbdF19KX0sci51PWU9PmUrIi4yNjg5NmQ5M2UwNTZkY2I5LmpzIixyLm89KGUsYSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGEpLHIucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmlu''@;'; put 'put ''Z1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10p''@;'; put 'put ''LGUpLCgoKT0+e3ZhciBlO3IudHQ9KCk9Pih2b2lkIDA9PT1lJiYoZT17Y3JlYXRlU2NyaXB0VVJMOmE9PmF9LHR5cGVvZiB0cnVzdGVkVHlwZXM8InUiJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5JiYoZT10cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2J1bmRsZXIiLGUp''@;'; put 'put ''KSksZSl9KSgpLHIudHU9ZT0+ci50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKSxyLnA9IiIsKCgpPT57ci5iPWRvY3VtZW50LmJhc2VVUkl8fHNlbGYubG9jYXRpb24uaHJlZjt2YXIgZT17MTIxOjB9O3IuTy5qPW89PjA9PT1lW29dO3ZhciBhPShvLGwpPT57dmFyIGYsdSxbbixjLGRdPWwsaT0w''@;'; put 'put ''O2lmKG4uc29tZShiPT4wIT09ZVtiXSkpe2ZvcihmIGluIGMpci5vKGMsZikmJihyLm1bZl09Y1tmXSk7aWYoZCl2YXIgdj1kKHIpfWZvcihvJiZvKGwpO2k8bi5sZW5ndGg7aSsrKXIubyhlLHU9bltpXSkmJmVbdV0mJmVbdV1bMF0oKSxlW3VdPTA7cmV0dXJuIHIuTyh2KX0sdD1zZWxmLndl''@;'; put 'put ''YnBhY2tDaHVua2RhdGFjb250cm9sbGVyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXJ8fFtdO3QuZm9yRWFjaChhLmJpbmQobnVsbCwwKSksdC5wdXNoPWEuYmluZChudWxsLHQucHVzaC5iaW5kKHQpKX0pKCl9KSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.f418d7e71dbfd309-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''IWZ1bmN0aW9uKEMsUCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9QKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLFApOlAoKEM9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRo''@;'; put 'put ''aXM6Q3x8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihDKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUChhLGkpe2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgdT1pW3RdO3UuZW51bWVyYWJsZT11LmVudW1lcmFibGV8fCExLHUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp''@;'; put 'put ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIsbil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHxudWxsPT09cilyZXR1cm4gcjt2YXIgcz1yW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwPT09cylyZXR1''@;'; put 'put ''cm4gU3RyaW5nKHIpO2lmKCJvYmplY3QiIT10eXBlb2Yocz1zLmNhbGwociwic3RyaW5nIikpKXJldHVybiBzO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9KGU9dS5rZXkpKT9lOlN0cmluZyhlKSx1KX12YXIgZX1m''@;'; put 'put ''dW5jdGlvbiB2KCl7cmV0dXJuKHY9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihhKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgdCx1PWFyZ3VtZW50c1tpXTtmb3IodCBpbiB1KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbCh1LHQpJiYoYVt0XT11W3RdKX1yZXR1cm4gYX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBKKGEsaSl7KG51bGw9PWl8fGk+YS5sZW5ndGgpJiYoaT1hLmxlbmd0aCk7Zm9yKHZhciB0PTAsdT1uZXcgQXJyYXkoaSk7dDxpO3QrKyl1W3RdPWFbdF07cmV0dXJuIHV9''@;'; put 'put ''ZnVuY3Rpb24gVShhLGkpe3ZhciB0LHU9dHlwZW9mIFN5bWJvbDwidSImJmFbU3ltYm9sLml0ZXJhdG9yXXx8YVsiQEBpdGVyYXRvciJdO2lmKHUpcmV0dXJuKHU9dS5jYWxsKGEpKS5uZXh0LmJpbmQodSk7aWYoQXJyYXkuaXNBcnJheShhKXx8KHU9ZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihl''@;'; put 'put ''KXJldHVybiJzdHJpbmciPT10eXBlb2YgZT9KKGUscik6Ik1hcCI9PT0obj0iT2JqZWN0Ij09PShuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKSkmJmUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5uYW1lOm4pfHwiU2V0Ij09PW4/QXJyYXkuZnJvbShl''@;'; put 'put ''KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0ooZSxyKTp2b2lkIDB9KGEpKXx8aSYmYSYmIm51bWJlciI9PXR5cGVvZiBhLmxlbmd0aClyZXR1cm4gdSYmKGE9dSksdD0wLGZ1bmN0aW9uKCl7cmV0dXJuIHQ+PWEu''@;'; put 'put ''bGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTphW3QrK119fTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZl''@;'; put 'put ''IGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG9lPTA7ZnVuY3Rpb24gSyhhKXtyZXR1cm4iX19wcml2YXRlXyIrb2UrKysiXyIrYX1mdW5jdGlvbiBHKGEsaSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsaSkpcmV0dXJuIGE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpfWZ1bmN0aW9uIFEoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIs''@;'; put 'put ''aGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51''@;'; put 'put ''bGwseGh0bWw6ITF9fWZ1bmN0aW9uIFcoYSl7Qy5kZWZhdWx0cz1hfWZ1bmN0aW9uIFkoYSl7cmV0dXJuIGNlW2FdfUMuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp''@;'; put 'put ''Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs''@;'; put 'put ''LHhodG1sOiExfTt2YXIgZWU9L1smPD4iJ10vLGxlPW5ldyBSZWdFeHAoZWUuc291cmNlLCJnIiksdGU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLERlPW5ldyBSZWdFeHAodGUuc291cmNlLCJnIiksY2U9eyImIjoiJmFtcDsiLCI8IjoiJmx0''@;'; put 'put ''OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9O2Z1bmN0aW9uIHkoYSxpKXtpZihpKXtpZihlZS50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UobGUsWSl9ZWxzZSBpZih0ZS50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UoRGUsWSk7cmV0dXJuIGF9dmFyIHBlPS8mKCMoPzpc''@;'; put 'put ''ZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIHVlKGEpe3JldHVybiBhLnJlcGxhY2UocGUsZnVuY3Rpb24oaSx0KXtyZXR1cm4iY29sb24iPT09KHQ9dC50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Quc3Vic3RyaW5nKDEpKToiIn0pfXZhciBoZT0vKF58W15cW10pXF4vZztmdW5jdGlvbiBFKGEsaSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/YTphLnNvdXJjZSxpPWl8fCIi''@;'; put 'put ''O3ZhciB0PXtyZXBsYWNlOmZ1bmN0aW9uKHUsZSl7cmV0dXJuIGU9KGU9ZS5zb3VyY2V8fGUpLnJlcGxhY2UoaGUsIiQxIiksYT1hLnJlcGxhY2UodSxlKSx0fSxnZXRSZWdleDpmdW5jdGlvbigpe3JldHVybiBuZXcgUmVnRXhwKGEsaSl9fTtyZXR1cm4gdH12YXIgZ2U9L1teXHc6XS9nLGZl''@;'; put 'put ''PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gbmUoYSxpLHQpe2lmKGEpe3RyeXt1PWRlY29kZVVSSUNvbXBvbmVudCh1ZSh0KSkucmVwbGFjZShnZSwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09dS5pbmRleE9mKCJqYXZhc2NyaXB0''@;'; put 'put ''OiIpfHwwPT09dS5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PXUuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH12YXIgdTtpJiYhZmUudGVzdCh0KSYmKGE9dCxNWyIgIisodT1pKV18fChNWyIgIit1XT1GZS50ZXN0KHUpP3UrIi8iOkgodSwiLyIsITApKSxpPS0xPT09KHU9TVsiICIr''@;'; put 'put ''dV0pLmluZGV4T2YoIjoiKSx0PSIvLyI9PT1hLnN1YnN0cmluZygwLDIpP2k/YTp1LnJlcGxhY2UoZGUsIiQxIikrYToiLyI9PT1hLmNoYXJBdCgwKT9pP2E6dS5yZXBsYWNlKEFlLCIkMSIpK2E6dSthKTt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1''@;'; put 'put ''cm4gbnVsbH1yZXR1cm4gdH12YXIgTT17fSxGZT0vXlteOl0rOlwvKlteL10qJC8sZGU9L14oW146XSs6KVtcc1xTXSokLyxBZT0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sST17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHJlKGEsaSl7dmFyIHQ9YS5yZXBsYWNlKC9cfC9nLGZ1''@;'; put 'put ''bmN0aW9uKGUscixuKXtmb3IodmFyIHM9ITEscD1yOzA8PS0tcCYmIlxcIj09PW5bcF07KXM9IXM7cmV0dXJuIHM/InwiOiIgfCJ9KS5zcGxpdCgvIFx8LyksdT0wO2lmKHRbMF0udHJpbSgpfHx0LnNoaWZ0KCksMDx0Lmxlbmd0aCYmIXRbdC5sZW5ndGgtMV0udHJpbSgpJiZ0LnBvcCgpLHQu''@;'; put 'put ''bGVuZ3RoPmkpdC5zcGxpY2UoaSk7ZWxzZSBmb3IoO3QubGVuZ3RoPGk7KXQucHVzaCgiIik7Zm9yKDt1PHQubGVuZ3RoO3UrKyl0W3VdPXRbdV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiB0fWZ1bmN0aW9uIEgoYSxpLHQpe3ZhciB1PWEubGVuZ3RoO2lmKDA9PT11KXJl''@;'; put 'put ''dHVybiIiO2Zvcih2YXIgZT0wO2U8dTspe3ZhciByPWEuY2hhckF0KHUtZS0xKTtpZigociE9PWl8fHQpJiYocj09PWl8fCF0KSlicmVhaztlKyt9cmV0dXJuIGEuc2xpY2UoMCx1LWUpfWZ1bmN0aW9uIGllKGEscix0LHUpe3ZhciBlPXIuaHJlZixuPShyPXIudGl0bGU/eShyLnRpdGxlKTpu''@;'; put 'put ''dWxsLGFbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpKTtyZXR1cm4iISIhPT1hWzBdLmNoYXJBdCgwKT8odS5zdGF0ZS5pbkxpbms9ITAsYT17dHlwZToibGluayIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDpuLHRva2Vuczp1LmlubGluZVRva2VucyhuKX0sdS5zdGF0ZS5pbkxp''@;'; put 'put ''bms9ITEsYSk6e3R5cGU6ImltYWdlIixyYXc6dCxocmVmOmUsdGl0bGU6cix0ZXh0Onkobil9fXZhciBqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5zcGFjZT1mdW5jdGlvbih0KXtpZigodD10''@;'; put 'put ''aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyh0KSkmJjA8dFswXS5sZW5ndGgpcmV0dXJue3R5cGU6InNwYWNlIixyYXc6dFswXX19LGkuY29kZT1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpKXJldHVybiB1PWVbMF0ucmVwbGFjZSgvXiB7''@;'; put 'put ''MSw0fS9nbSwiIikse3R5cGU6ImNvZGUiLHJhdzplWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/dTpIKHUsIlxuIil9fSxpLmZlbmNlcz1mdW5jdGlvbihzKXt2YXIgdSxlLHIsbjtpZihzPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4''@;'; put 'put ''ZWMocykpcmV0dXJuIGU9dT1zWzBdLHI9c1szXXx8IiIsZT1udWxsPT09KGU9dS5tYXRjaCgvXihccyspKD86YGBgKS8pKT9yOihuPWVbMV0sci5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocCl7dmFyIGc9cC5tYXRjaCgvXlxzKy8pO3JldHVybiBudWxsIT09ZyYmZ1swXS5sZW5ndGg+PW4u''@;'; put 'put ''bGVuZ3RoP3Auc2xpY2Uobi5sZW5ndGgpOnB9KS5qb2luKCJcbiIpKSx7dHlwZToiY29kZSIscmF3OnUsbGFuZzpzWzJdJiZzWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRleHQ6ZX19LGkuaGVhZGluZz1mdW5jdGlvbihyKXt2YXIgdSxlO2lm''@;'; put 'put ''KHI9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMocikpcmV0dXJuIHU9clsyXS50cmltKCksLyMkLy50ZXN0KHUpJiYoZT1IKHUsIiMiKSwhdGhpcy5vcHRpb25zLnBlZGFudGljJiZlJiYhLyAkLy50ZXN0KGUpfHwodT1lLnRyaW0oKSkpLHt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxk''@;'; put 'put ''ZXB0aDpyWzFdLmxlbmd0aCx0ZXh0OnUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHUpfX0saS5ocj1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyh0KSlyZXR1cm57dHlwZToiaHIiLHJhdzp0WzBdfX0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKG4pe3ZhciB1LGUs''@;'; put 'put ''cjtpZihuPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKG4pKXJldHVybiB1PW5bMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksZT10aGlzLmxleGVyLnN0YXRlLnRvcCx0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCxyPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnModSksdGhpcy5s''@;'; put 'put ''ZXhlci5zdGF0ZS50b3A9ZSx7dHlwZToiYmxvY2txdW90ZSIscmF3Om5bMF0sdG9rZW5zOnIsdGV4dDp1fX0saS5saXN0PWZ1bmN0aW9uKHQpe3ZhciB1PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHQpO2lmKHUpe3ZhciBlLHIsbixzLHAsZyxELG8sRixkLHgsaD0xPChrPXVbMV0udHJp''@;'; put 'put ''bSgpKS5sZW5ndGgsbD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6aCxzdGFydDpoPytrLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfSxrPWg/IlxcZHsxLDl9XFwiK2suc2xpY2UoLTEpOiJcXCIrazt0aGlzLm9wdGlvbnMucGVkYW50aWMmJihrPWg/azoiWyorLV0iKTtm''@;'; put 'put ''b3IodmFyIGI9bmV3IFJlZ0V4cCgiXiggezAsM30iK2srIikoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpIik7dCYmKHg9ITEsdT1iLmV4ZWModCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KHQpOyl7aWYodD10LnN1YnN0cmluZygoZT11WzBdKS5sZW5ndGgpLEQ9dVsyXS5zcGxp''@;'; put 'put ''dCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsvLGZ1bmN0aW9uKEwpe3JldHVybiIgIi5yZXBlYXQoMypMLmxlbmd0aCl9KSxvPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHM9MixkPUQudHJpbUxlZnQoKSk6KHM9dVsyXS5zZWFyY2goL1teIF0vKSxkPUQuc2xp''@;'; put 'put ''Y2Uocz00PHM/MTpzKSxzKz11WzFdLmxlbmd0aCkscD0hMSwhRCYmL14gKiQvLnRlc3QobykmJihlKz1vKyJcbiIsdD10LnN1YnN0cmluZyhvLmxlbmd0aCsxKSx4PSEwKSwheClmb3IodmFyIHc9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSg/OlsqKy1dfFxcZHsxLDl9''@;'; put 'put ''Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpIiksQT1uZXcgUmVnRXhwKCJeIHswLCIrTWF0aC5taW4oMyxzLTEpKyJ9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSIpLEI9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsi''@;'; put 'put ''fSg/OmBgYHx+fn4pIiksXz1uZXcgUmVnRXhwKCJeIHswLCIrTWF0aC5taW4oMyxzLTEpKyJ9IyIpO3QmJihvPUY9dC5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKG89by5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCFCLnRlc3Qobykp''@;'; put 'put ''JiYhXy50ZXN0KG8pJiYhdy50ZXN0KG8pJiYhQS50ZXN0KHQpOyl7aWYoby5zZWFyY2goL1teIF0vKT49c3x8IW8udHJpbSgpKWQrPSJcbiIrby5zbGljZShzKTtlbHNle2lmKHB8fDQ8PUQuc2VhcmNoKC9bXiBdLyl8fEIudGVzdChEKXx8Xy50ZXN0KEQpfHxBLnRlc3QoRCkpYnJlYWs7ZCs9''@;'; put 'put ''IlxuIitvfXB8fG8udHJpbSgpfHwocD0hMCksZSs9RisiXG4iLHQ9dC5zdWJzdHJpbmcoRi5sZW5ndGgrMSksRD1vLnNsaWNlKHMpfWwubG9vc2V8fChnP2wubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChlKSYmKGc9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYocj0vXlxbWyB4WF1cXSAvLmV4''@;'; put 'put ''ZWMoZCkpJiYobj0iWyBdICIhPT1yWzBdLGQ9ZC5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSksbC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzplLHRhc2s6ISFyLGNoZWNrZWQ6bixsb29zZTohMSx0ZXh0OmR9KSxsLnJhdys9ZX1sLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFd''@;'; put 'put ''LnJhdz1lLnRyaW1SaWdodCgpLGwuaXRlbXNbbC5pdGVtcy5sZW5ndGgtMV0udGV4dD1kLnRyaW1SaWdodCgpLGwucmF3PWwucmF3LnRyaW1SaWdodCgpO2Zvcih2YXIgeixhZT1sLml0ZW1zLmxlbmd0aCwkPTA7JDxhZTskKyspdGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsbC5pdGVtc1skXS50''@;'; put 'put ''b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhsLml0ZW1zWyRdLnRleHQsW10pLGwubG9vc2V8fCh6PTA8KHo9bC5pdGVtc1skXS50b2tlbnMuZmlsdGVyKGZ1bmN0aW9uKEwpe3JldHVybiJzcGFjZSI9PT1MLnR5cGV9KSkubGVuZ3RoJiZ6LnNvbWUoZnVuY3Rpb24oTCl7cmV0dXJuL1xu''@;'; put 'put ''Lipcbi8udGVzdChMLnJhdyl9KSxsLmxvb3NlPXopO2lmKGwubG9vc2UpZm9yKCQ9MDskPGFlOyQrKylsLml0ZW1zWyRdLmxvb3NlPSEwO3JldHVybiBsfX0saS5odG1sPWZ1bmN0aW9uKGUpe3ZhciB1O2lmKGU9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMoZSkpcmV0dXJuIHU9e3R5cGU6''@;'; put 'put ''Imh0bWwiLGJsb2NrOiEwLHJhdzplWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09ZVsxXXx8InNjcmlwdCI9PT1lWzFdfHwic3R5bGUiPT09ZVsxXSksdGV4dDplWzBdfSx0aGlzLm9wdGlvbnMuc2FuaXRpemUmJihlPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhp''@;'; put 'put ''cy5vcHRpb25zLnNhbml0aXplcihlWzBdKTp5KGVbMF0pLHUudHlwZT0icGFyYWdyYXBoIix1LnRleHQ9ZSx1LnRva2Vucz10aGlzLmxleGVyLmlubGluZShlKSksdX0saS5kZWY9ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhuKSlyZXR1cm4g''@;'; put 'put ''dT1uWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxlPW5bMl0/blsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixyPW5bM10mJm5bM10uc3Vic3RyaW5nKDEsblszXS5sZW5ndGgtMSkucmVw''@;'; put 'put ''bGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx7dHlwZToiZGVmIix0YWc6dSxyYXc6blswXSxocmVmOmUsdGl0bGU6cn19LGkudGFibGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWModCkpe3ZhciB1PXt0eXBlOiJ0YWJsZSIsaGVhZGVy''@;'; put 'put ''OnJlKHRbMV0pLm1hcChmdW5jdGlvbihnKXtyZXR1cm57dGV4dDpnfX0pLGFsaWduOnRbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOnRbM10mJnRbM10udHJpbSgpP3RbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lm''@;'; put 'put ''KHUuaGVhZGVyLmxlbmd0aD09PXUuYWxpZ24ubGVuZ3RoKXt1LnJhdz10WzBdO2Zvcih2YXIgZSxyLG4scz11LmFsaWduLmxlbmd0aCxwPTA7cDxzO3ArKyl1LmFsaWduW3BdPS9eICotKzogKiQvLnRlc3QodS5hbGlnbltwXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdCh1LmFsaWduW3Bd''@;'; put 'put ''KT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KHUuYWxpZ25bcF0pPyJsZWZ0IjpudWxsO2ZvcihzPXUucm93cy5sZW5ndGgscD0wO3A8cztwKyspdS5yb3dzW3BdPXJlKHUucm93c1twXSx1LmhlYWRlci5sZW5ndGgpLm1hcChmdW5jdGlvbihnKXtyZXR1cm57dGV4dDpnfX0pO2ZvcihzPXUu''@;'; put 'put ''aGVhZGVyLmxlbmd0aCxlPTA7ZTxzO2UrKyl1LmhlYWRlcltlXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUodS5oZWFkZXJbZV0udGV4dCk7Zm9yKHM9dS5yb3dzLmxlbmd0aCxlPTA7ZTxzO2UrKylmb3Iobj11LnJvd3NbZV0scj0wO3I8bi5sZW5ndGg7cisrKW5bcl0udG9rZW5zPXRoaXMu''@;'; put 'put ''bGV4ZXIuaW5saW5lKG5bcl0udGV4dCk7cmV0dXJuIHV9fX0saS5saGVhZGluZz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyh0KSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OnRbMF0sZGVwdGg6Ij0iPT09dFsyXS5jaGFyQXQoMCk/MToyLHRleHQ6''@;'; put 'put ''dFsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFsxXSl9fSxpLnBhcmFncmFwaD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMoZSkpcmV0dXJuIHU9IlxuIj09PWVbMV0uY2hhckF0KGVbMV0ubGVuZ3RoLTEpP2VbMV0uc2xpY2UoMCwt''@;'; put 'put ''MSk6ZVsxXSx7dHlwZToicGFyYWdyYXBoIixyYXc6ZVswXSx0ZXh0OnUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHUpfX0saS50ZXh0PWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWModCkpcmV0dXJue3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dFswXSx0''@;'; put 'put ''b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFswXSl9fSxpLmVzY2FwZT1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHQpKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzp0WzBdLHRleHQ6eSh0WzFdKX19LGkudGFnPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5y''@;'; put 'put ''dWxlcy5pbmxpbmUudGFnLmV4ZWModCkpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0''@;'; put 'put ''ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2Jk''@;'; put 'put ''fHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6dFswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVy''@;'; put 'put ''LnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXX19LGkubGluaz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmxp''@;'; put 'put ''bmsuZXhlYyh0KSl7dmFyIHU9dFsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KHUpKXtpZighLz4kLy50ZXN0KHUpKXJldHVybjt2YXIgcj1IKHUuc2xpY2UoMCwtMSksIlxcIik7aWYoKHUubGVuZ3RoLXIubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNlLTE8''@;'; put 'put ''KHI9ZnVuY3Rpb24ocyxwKXtpZigtMSE9PXMuaW5kZXhPZihwWzFdKSlmb3IodmFyIGc9cy5sZW5ndGgsRD0wLG89MDtvPGc7bysrKWlmKCJcXCI9PT1zW29dKW8rKztlbHNlIGlmKHNbb109PT1wWzBdKUQrKztlbHNlIGlmKHNbb109PT1wWzFdJiYtLUQ8MClyZXR1cm4gbztyZXR1cm4tMX0o''@;'; put 'put ''dFsyXSwiKCkiKSkmJihuPSgwPT09dFswXS5pbmRleE9mKCIhIik/NTo0KSt0WzFdLmxlbmd0aCtyLHRbMl09dFsyXS5zdWJzdHJpbmcoMCxyKSx0WzBdPXRbMF0uc3Vic3RyaW5nKDAsbikudHJpbSgpLHRbM109IiIpO3I9dFsyXTt2YXIgZSxuPSIiO3JldHVybiB0aGlzLm9wdGlvbnMucGVk''@;'; put 'put ''YW50aWM/KGU9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKHIpKSYmKHI9ZVsxXSxuPWVbM10pOm49dFszXT90WzNdLnNsaWNlKDEsLTEpOiIiLHI9ci50cmltKCksaWUodCx7aHJlZjoocj0vXjwvLnRlc3Qocik/dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0''@;'; put 'put ''KHUpP3Iuc2xpY2UoMSk6ci5zbGljZSgxLC0xKTpyKSYmci5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOm4mJm4ucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sdFswXSx0aGlzLmxleGVyKX19LGkucmVmbGluaz1mdW5jdGlv''@;'; put 'put ''bih0LHUpe3ZhciBlO2lmKGU9KGU9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpcmV0dXJuKHQ9dVsodD0oZVsyXXx8ZVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSkudG9Mb3dlckNhc2UoKV0pP2llKGUsdCxlWzBd''@;'; put 'put ''LHRoaXMubGV4ZXIpOnt0eXBlOiJ0ZXh0IixyYXc6dT1lWzBdLmNoYXJBdCgwKSx0ZXh0OnV9fSxpLmVtU3Ryb25nPWZ1bmN0aW9uKHQsdSxlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYociYmKCFyWzNdfHwh''@;'; put 'put ''ZS5tYXRjaCgvKD86WzAtOUEtWmEtelx4QUFceEIyXHhCM1x4QjVceEI5XHhCQVx4QkMtXHhCRVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3''@;'; put 'put ''Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NjAtXHUwNjY5XHUw''@;'; put 'put ''NjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDMC1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQw''@;'; put 'put ''LVx1MDg1OFx1MDg2MC1cdTA4NkFcdTA4NzAtXHUwODg3XHUwODg5LVx1MDg4RVx1MDhBMC1cdTA4QzlcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5''@;'; put 'put ''QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RTYtXHUwOUYxXHUwOUY0LVx1MDlGOVx1MDlGQ1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEz''@;'; put 'put ''NVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTZGXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUx''@;'; put 'put ''XHUwQUU2LVx1MEFFRlx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjY2LVx1MEI2Rlx1MEI3MS1cdTBCNzdcdTBCODNcdTBCODUt''@;'; put 'put ''XHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEJFNi1cdTBCRjJcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEt''@;'; put 'put ''XHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM1RFx1MEM2MFx1MEM2MVx1MEM2Ni1cdTBDNkZcdTBDNzgtXHUwQzdFXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDRERcdTBDREVcdTBDRTBc''@;'; put 'put ''dTBDRTFcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDA0LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1OC1cdTBENjFcdTBENjYtXHUwRDc4XHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIz''@;'; put 'put ''LVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBERTYtXHUwREVGXHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg2LVx1MEU4QVx1MEU4Qy1cdTBFQTNcdTBFQTVcdTBFQTctXHUwRUIwXHUwRUIyXHUwRUIz''@;'; put 'put ''XHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjIwLVx1MEYzM1x1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0YtXHUxMDQ5XHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEw''@;'; put 'put ''NjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTA5MC1cdTEwOTlcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUx''@;'; put 'put ''Mjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzY5LVx1MTM3Q1x1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1''@;'; put 'put ''XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcxMVx1MTcxRi1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUx''@;'; put 'put ''N0RDXHUxN0UwLVx1MTdFOVx1MTdGMC1cdTE3RjlcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3OFx1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5''@;'; put 'put ''XHUxOUQwLVx1MTlEQVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQTgwLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Q1x1MUI1MC1cdTFCNTlcdTFCODMtXHUxQkEwXHUxQkFFLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNDAtXHUxQzQ5XHUx''@;'; put 'put ''QzRELVx1MUM3RFx1MUM4MC1cdTFDODhcdTFDOTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YzXHUxQ0Y1XHUxQ0Y2XHUxQ0ZBXHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAt''@;'; put 'put ''XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3''@;'; put 'put ''MFx1MjA3MVx1MjA3NC1cdTIwNzlcdTIwN0YtXHUyMDg5XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0''@;'; put 'put ''RVx1MjE1MC1cdTIxODlcdTI0NjAtXHUyNDlCXHUyNEVBLVx1MjRGRlx1Mjc3Ni1cdTI3OTNcdTJDMDAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkNGRFx1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJE''@;'; put 'put ''QTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZc''@;'; put 'put ''dTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJGXHUzMTMxLVx1MzE4RVx1MzE5Mi1cdTMxOTVcdTMxQTAtXHUzMUJGXHUzMUYwLVx1MzFGRlx1MzIyMC1cdTMyMjlcdTMyNDgtXHUzMjRGXHUzMjUxLVx1MzI1Rlx1MzI4MC1cdTMyODlcdTMyQjEtXHUz''@;'; put 'put ''MkJGXHUzNDAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3Q0FcdUE3RDBcdUE3RDFcdUE3RDNc''@;'; put 'put ''dUE3RDUtXHVBN0Q5XHVBN0YyLVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTgzMC1cdUE4MzVcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThEMC1cdUE4RDlcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTAwLVx1QTkyNVx1QTkz''@;'; put 'put ''MC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1''@;'; put 'put ''QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY5''@;'; put 'put ''XHVBQjcwLVx1QUJFMlx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVG''@;'; put 'put ''QjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1c''@;'; put 'put ''dUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDA3LVx1''@;'; put 'put ''REQzM1x1REQ0MC1cdURENzhcdUREOEFcdUREOEJcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMS1cdURFRkJcdURGMDAtXHVERjIzXHVERjJELVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4''@;'; put 'put ''MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERDcwLVx1REQ3QVx1REQ3Qy1cdUREOEFcdUREOEMtXHVERDkyXHVERDk0XHVERDk1XHVERDk3LVx1RERBMVx1RERBMy1cdUREQjFcdUREQjMt''@;'; put 'put ''XHVEREI5XHVEREJCXHVEREJDXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XHVERjgwLVx1REY4NVx1REY4Ny1cdURGQjBcdURGQjItXHVERkJBXXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVE''@;'; put 'put ''QzU1XHVEQzU4LVx1REM3Nlx1REM3OS1cdURDOUVcdURDQTctXHVEQ0FGXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1RENGQi1cdUREMUJcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCQy1cdUREQ0ZcdURERDItXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTkt''@;'; put 'put ''XHVERTM1XHVERTQwLVx1REU0OFx1REU2MC1cdURFN0VcdURFODAtXHVERTlGXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRcdURFRUItXHVERUVGXHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNTgtXHVERjcyXHVERjc4LVx1REY5MVx1REZBOS1cdURGQUZdfFx1RDgwM1tcdURDMDAt''@;'; put 'put ''XHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJcdURDRkEtXHVERDIzXHVERDMwLVx1REQzOVx1REU2MC1cdURFN0VcdURFODAtXHVERUE5XHVERUIwXHVERUIxXHVERjAwLVx1REYyN1x1REYzMC1cdURGNDVcdURGNTEtXHVERjU0XHVERjcwLVx1REY4MVx1REZCMC1cdURGQ0JcdURG''@;'; put 'put ''RTAtXHVERkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM1Mi1cdURDNkZcdURDNzFcdURDNzJcdURDNzVcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDMtXHVERDI2XHVERDM2LVx1REQzRlx1REQ0NFx1REQ0N1x1REQ1MC1cdURENzJcdURENzZcdUREODMt''@;'; put 'put ''XHVEREIyXHVEREMxLVx1RERDNFx1REREMC1cdUREREFcdURERENcdURERTEtXHVEREY0XHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFM0ZcdURFNDBcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REVG''@;'; put 'put ''MC1cdURFRjlcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVERjUwXHVERjVELVx1REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzUwLVx1REM1OVx1REM1Ri1c''@;'; put 'put ''dURDNjFcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUFBXHVERUI4XHVERUMwLVx1REVDOVx1REYwMC1cdURGMUFcdURGMzAtXHVERjNC''@;'; put 'put ''XHVERjQwLVx1REY0Nl18XHVEODA2W1x1REMwMC1cdURDMkJcdURDQTAtXHVEQ0YyXHVEQ0ZGLVx1REQwNlx1REQwOVx1REQwQy1cdUREMTNcdUREMTVcdUREMTZcdUREMTgtXHVERDJGXHVERDNGXHVERDQxXHVERDUwLVx1REQ1OVx1RERBMC1cdUREQTdcdUREQUEtXHVEREQwXHVEREUxXHVE''@;'; put 'put ''REUzXHVERTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODlcdURFOURcdURFQjAtXHVERUY4XXxcdUQ4MDdbXHVEQzAwLVx1REMwOFx1REMwQS1cdURDMkVcdURDNDBcdURDNTAtXHVEQzZDXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEIt''@;'; put 'put ''XHVERDMwXHVERDQ2XHVERDUwLVx1REQ1OVx1REQ2MC1cdURENjVcdURENjdcdURENjhcdURENkEtXHVERDg5XHVERDk4XHVEREEwLVx1RERBOVx1REVFMC1cdURFRjJcdURGMDJcdURGMDQtXHVERjEwXHVERjEyLVx1REYzM1x1REY1MC1cdURGNTlcdURGQjBcdURGQzAtXHVERkQ0XXxcdUQ4''@;'; put 'put ''MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxcdUQ4MEJbXHVERjkwLVx1REZGMF18W1x1RDgwQ1x1RDgxQy1cdUQ4MjBcdUQ4MjJcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4NzQtXHVEODc5XHVEODgwLVx1RDg4''@;'; put 'put ''M1x1RDg4NS1cdUQ4ODddW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJGXHVEQzQxLVx1REM0Nl18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFNzAtXHVERUJFXHVERUMwLVx1REVDOVx1REVE''@;'; put 'put ''MC1cdURFRURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNUItXHVERjYxXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURFNDAtXHVERTk2XHVERjAwLVx1REY0QVx1REY1MFx1REY5My1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgy''@;'; put 'put ''MVtcdURDMDAtXHVERkY3XXxcdUQ4MjNbXHVEQzAwLVx1RENENVx1REQwMC1cdUREMDhdfFx1RDgyQltcdURGRjAtXHVERkYzXHVERkY1LVx1REZGQlx1REZGRFx1REZGRV18XHVEODJDW1x1REMwMC1cdUREMjJcdUREMzJcdURENTAtXHVERDUyXHVERDU1XHVERDY0LVx1REQ2N1x1REQ3MC1c''@;'; put 'put ''dURFRkJdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzRbXHVERUMwLVx1REVEM1x1REVFMC1cdURFRjNcdURGNjAtXHVERjc4XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURD''@;'; put 'put ''QTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1''@;'; put 'put ''REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZD''@;'; put 'put ''RS1cdURGRkZdfFx1RDgzN1tcdURGMDAtXHVERjFFXHVERjI1LVx1REYyQV18XHVEODM4W1x1REMzMC1cdURDNkRcdUREMDAtXHVERDJDXHVERDM3LVx1REQzRFx1REQ0MC1cdURENDlcdURENEVcdURFOTAtXHVERUFEXHVERUMwLVx1REVFQlx1REVGMC1cdURFRjldfFx1RDgzOVtcdURDRDAt''@;'; put 'put ''XHVEQ0VCXHVEQ0YwLVx1RENGOVx1REZFMC1cdURGRTZcdURGRTgtXHVERkVCXHVERkVEXHVERkVFXHVERkYwLVx1REZGRV18XHVEODNBW1x1REMwMC1cdURDQzRcdURDQzctXHVEQ0NGXHVERDAwLVx1REQ0M1x1REQ0Qlx1REQ1MC1cdURENTldfFx1RDgzQltcdURDNzEtXHVEQ0FCXHVEQ0FE''@;'; put 'put ''LVx1RENBRlx1RENCMS1cdURDQjRcdUREMDEtXHVERDJEXHVERDJGLVx1REQzRFx1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQt''@;'; put 'put ''XHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1''@;'; put 'put ''REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4M0NbXHVERDAwLVx1REQwQ118XHVEODNFW1x1REZGMC1cdURGRjldfFx1RDg2OVtcdURDMDAtXHVERURGXHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzlcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMx''@;'; put 'put ''RFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMwMC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdUQ4ODRbXHVEQzAwLVx1REY0QVx1REY1MC1cdURGRkZdfFx1RDg4OFtcdURDMDAtXHVERkFGXSkvKSkmJighclsxXSYm''@;'; put 'put ''IXJbMl18fCFlfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGUpKSl7dmFyIG49clswXS5sZW5ndGgtMSxzPW4scD0wLGc9IioiPT09clswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGlt''@;'; put 'put ''VW5kO2ZvcihnLmxhc3RJbmRleD0wLHU9dS5zbGljZSgtMSp0Lmxlbmd0aCtuKTtudWxsIT0ocj1nLmV4ZWModSkpOyl7dmFyIEQsbz1yWzFdfHxyWzJdfHxyWzNdfHxyWzRdfHxyWzVdfHxyWzZdO2lmKG8paWYobz1vLmxlbmd0aCxyWzNdfHxyWzRdKXMrPW87ZWxzZSBpZigocls1XXx8cls2''@;'; put 'put ''XSkmJm4lMyYmISgobitvKSUzKSlwKz1vO2Vsc2UgaWYoISgwPChzLT1vKSkpcmV0dXJuIG89TWF0aC5taW4obyxvK3MrcCksRD10LnNsaWNlKDAsbityLmluZGV4K28rMSksTWF0aC5taW4obixvKSUyPyhvPUQuc2xpY2UoMSwtMSkse3R5cGU6ImVtIixyYXc6RCx0ZXh0Om8sdG9rZW5zOnRo''@;'; put 'put ''aXMubGV4ZXIuaW5saW5lVG9rZW5zKG8pfSk6KG89RC5zbGljZSgyLC0yKSx7dHlwZToic3Ryb25nIixyYXc6RCx0ZXh0Om8sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG8pfSl9fX0saS5jb2Rlc3Bhbj1mdW5jdGlvbihuKXt2YXIgdSxlLHI7aWYobj10aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS5jb2RlLmV4ZWMobikpcmV0dXJuIHI9blsyXS5yZXBsYWNlKC9cbi9nLCIgIiksdT0vW14gXS8udGVzdChyKSxlPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpLHI9eShyPXUmJmU/ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTpyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpuWzBdLHRl''@;'; put 'put ''eHQ6cn19LGkuYnI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpKXJldHVybnt0eXBlOiJiciIscmF3OnRbMF19fSxpLmRlbD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpKXJldHVybnt0eXBlOiJkZWwiLHJhdzp0WzBd''@;'; put 'put ''LHRleHQ6dFsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnModFsyXSl9fSxpLmF1dG9saW5rPWZ1bmN0aW9uKHIsdSl7dmFyIGU7aWYocj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHIpKXJldHVybiB1PSJAIj09PXJbMl0/Im1haWx0bzoiKyhlPXkodGhpcy5vcHRp''@;'; put 'put ''b25zLm1hbmdsZT91KHJbMV0pOnJbMV0pKTplPXkoclsxXSkse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6ZSxocmVmOnUsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmUsdGV4dDplfV19fSxpLnVybD1mdW5jdGlvbih0LHUpe3ZhciBlLHIsbixzO2lmKGU9dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''dXJsLmV4ZWModCkpe2lmKCJAIj09PWVbMl0pbj0ibWFpbHRvOiIrKHI9eSh0aGlzLm9wdGlvbnMubWFuZ2xlP3UoZVswXSk6ZVswXSkpO2Vsc2V7Zm9yKDtzPWVbMF0sZVswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZVswXSlbMF0scyE9PWVbMF07KTtyPXkoZVswXSks''@;'; put 'put ''bj0id3d3LiI9PT1lWzFdPyJodHRwOi8vIitlWzBdOmVbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzplWzBdLHRleHQ6cixocmVmOm4sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX0saS5pbmxpbmVUZXh0PWZ1bmN0aW9uKHQsdSl7aWYodD10aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS50ZXh0LmV4ZWModCkpcmV0dXJuIHU9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6eSh0WzBdKTp0WzBdOnkodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRz''@;'; put 'put ''P3UodFswXSk6dFswXSkse3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dX19LGF9KCksZj17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkp''@;'; put 'put ''fH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9''@;'; put 'put ''KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRl''@;'; put 'put ''eHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4q''@;'; put 'put ''fCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xc''@;'; put 'put ''bnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/''@;'; put 'put ''OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6SSxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhl''@;'; put 'put ''YWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8''@;'; put 'put ''XChbXigpXSpcKSkvfSxjPShmLmRlZj1FKGYuZGVmKS5yZXBsYWNlKCJsYWJlbCIsZi5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixmLl90aXRsZSkuZ2V0UmVnZXgoKSxmLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxmLmxpc3RJdGVtU3RhcnQ9RSgvXiggKikoYnVsbCkgKi8pLnJl''@;'; put 'put ''cGxhY2UoImJ1bGwiLGYuYnVsbGV0KS5nZXRSZWdleCgpLGYubGlzdD1FKGYubGlzdCkucmVwbGFjZSgvYnVsbC9nLGYuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2Uo''@;'; put 'put ''ImRlZiIsIlxcbisoPz0iK2YuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksZi5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8''@;'; put 'put ''ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJh''@;'; put 'put ''bXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixmLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxmLmh0bWw9RShmLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixmLl9jb21tZW50''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWciLGYuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxmLmxoZWFkaW5nPUUoZi5saGVhZGluZykucmVwbGFjZSgv''@;'; put 'put ''YnVsbC9nLGYuYnVsbGV0KS5nZXRSZWdleCgpLGYucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJi''@;'; put 'put ''bG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxu''@;'; put 'put ''fC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsZi5fdGFnKS5nZXRSZWdleCgpLGYuYmxvY2txdW90ZT1FKGYuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixmLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxmLm5vcm1hbD12KHt9LGYp''@;'; put 'put ''LGYuZ2ZtPXYoe30sZi5ub3JtYWwse3RhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0''@;'; put 'put ''bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0pLGYuZ2ZtLnRhYmxlPUUoZi5nZm0udGFibGUpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxc''@;'; put 'put ''bl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8''@;'; put 'put ''cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmdmbS5wYXJhZ3JhcGg9RShmLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIs''@;'; put 'put ''IiIpLnJlcGxhY2UoInRhYmxlIixmLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFb''@;'; put 'put ''LildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLnBlZGFudGljPXYoe30sZi5ub3JtYWwse2h0bWw6RSgiXiAqKD86Y29tbWVu''@;'; put 'put ''dCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsZi5fY29tbWVudCkucmVwbGFj''@;'; put 'put ''ZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0Bd''@;'; put 'put ''KkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6SSxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSsp''@;'; put 'put ''ICooPzpcbit8JCkvLHBhcmFncmFwaDpFKGYubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLGYubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+Iiku''@;'; put 'put ''cmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfSkse2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5d''@;'; put 'put ''KnxlbWFpbCk+Lyx1cmw6SSx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNd''@;'; put 'put ''Kj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgp''@;'; put 'put ''IixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/''@;'; put 'put ''PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15w''@;'; put 'put ''dW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10p''@;'; put 'put ''fFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6SSx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1c''@;'; put 'put ''bil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99KTtmdW5jdGlvbiBrZShhKXtyZXR1cm4gYS5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUy''@;'; put 'put ''MDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9n''@;'; put 'put ''LCJcdTIwMjYiKX1mdW5jdGlvbiBzZShhKXtmb3IodmFyIGksdD0iIix1PWEubGVuZ3RoLGU9MDtlPHU7ZSsrKWk9YS5jaGFyQ29kZUF0KGUpLHQrPSImIyIrKGk9LjU8TWF0aC5yYW5kb20oKT8ieCIraS50b1N0cmluZygxNik6aSkrIjsiO3JldHVybiB0fWMuX3B1bmN0dWF0aW9uPSJcXHB7''@;'; put 'put ''UH0kKzw9PmBefH4iLGMucHVuY3R1YXRpb249RShjLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxjLmFueVB1''@;'; put 'put ''bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyxjLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLGMuX2NvbW1lbnQ9RShmLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLGMuZW1TdHJvbmcubERlbGltPUUoYy5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBs''@;'; put 'put ''YWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuZW1TdHJvbmcuckRlbGltQXN0PUUoYy5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbVVuZD1FKGMuZW1TdHJv''@;'; put 'put ''bmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5hbnlQdW5jdHVhdGlvbj1FKGMuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9lc2NhcGVzPUUoYy5f''@;'; put 'put ''ZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sYy5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1a''@;'; put 'put ''MC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxjLmF1dG9saW5rPUUoYy5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixjLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixjLl9lbWFpbCku''@;'; put 'put ''Z2V0UmVnZXgoKSxjLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sYy50YWc9RShjLnRhZykucmVwbGFjZSgiY29tbWVudCIsYy5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRl''@;'; put 'put ''IixjLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksYy5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sYy5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxjLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoi''@;'; put 'put ''fCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLGMubGluaz1FKGMubGluaykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixjLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsYy5fdGl0bGUpLmdldFJlZ2V4KCksYy5yZWZsaW5rPUUoYy5yZWZs''@;'; put 'put ''aW5rKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5ub2xpbms9RShjLm5vbGluaykucmVwbGFjZSgicmVmIixmLl9sYWJlbCkuZ2V0UmVnZXgoKSxjLnJlZmxpbmtTZWFyY2g9RShjLnJlZmxpbmtTZWFyY2gsImciKS5yZXBs''@;'; put 'put ''YWNlKCJyZWZsaW5rIixjLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsYy5ub2xpbmspLmdldFJlZ2V4KCksYy5ub3JtYWw9dih7fSxjKSxjLnBlZGFudGljPXYoe30sYy5ub3JtYWwse3N0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8h''@;'; put 'put ''Xyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxl''@;'; put 'put ''bmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpFKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOkUoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwi''@;'; put 'put ''LGMuX2xhYmVsKS5nZXRSZWdleCgpfSksYy5nZm09dih7fSxjLm5vcm1hbCx7ZXNjYXBlOkUoYy5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10q''@;'; put 'put ''W2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7''@;'; put 'put ''Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aq''@;'; put 'put ''fl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99KSxjLmdmbS51cmw9RShjLmdmbS51cmwsImkiKS5yZXBsYWNl''@;'; put 'put ''KCJlbWFpbCIsYy5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLGMuYnJlYWtzPXYoe30sYy5nZm0se2JyOkUoYy5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6RShjLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2Uo''@;'; put 'put ''L1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX0pO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1lfHxDLmRlZmF1bHRzLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhp''@;'; put 'put ''cy5vcHRpb25zLnRva2VuaXplcnx8bmV3IGosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucywodGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcykuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiEx''@;'; put 'put ''LGluUmF3QmxvY2s6ITEsdG9wOiEwfSxlPXtibG9jazpmLm5vcm1hbCxpbmxpbmU6Yy5ub3JtYWx9LHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oZS5ibG9jaz1mLnBlZGFudGljLGUuaW5saW5lPWMucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihlLmJsb2NrPWYuZ2ZtLGUuaW5saW5lPXRo''@;'; put 'put ''aXMub3B0aW9ucy5icmVha3M/Yy5icmVha3M6Yy5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWV9YS5sZXg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikubGV4KGUpfSxhLmxleElubGluZT1mdW5jdGlvbihlLHIpe3JldHVybiBuZXcgYShyKS5pbmxpbmVUb2tlbnMoZSl9O3ZhciB0''@;'; put 'put ''LHU9YS5wcm90b3R5cGU7cmV0dXJuIHUubGV4PWZ1bmN0aW9uKGUpe3ZhciByO2ZvcihlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7cj10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKHIuc3JjLHIu''@;'; put 'put ''dG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9LHUuYmxvY2tUb2tlbnM9ZnVuY3Rpb24oZSxyKXt2YXIgbixzLHAsZyxEPXRoaXM7Zm9yKHZvaWQgMD09PXImJihyPVtdKSxlPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9lLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIi''@;'; put 'put ''KTplLnJlcGxhY2UoL14oICopKFx0KykvZ20sZnVuY3Rpb24oRixkLHgpe3JldHVybiBkKyIgICAgIi5yZXBlYXQoeC5sZW5ndGgpfSk7ZTspe3ZhciBvPWZ1bmN0aW9uKCl7aWYoRC5vcHRpb25zLmV4dGVuc2lvbnMmJkQub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZELm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucy5ibG9jay5zb21lKGZ1bmN0aW9uKGwpe3JldHVybiEhKG49bC5jYWxsKHtsZXhlcjpEfSxlLHIpKSYmKGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihuPUQudG9rZW5pemVyLnNwYWNlKGUpKXJldHVybiBlPWUu''@;'; put 'put ''c3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksMT09PW4ucmF3Lmxlbmd0aCYmMDxyLmxlbmd0aD9yW3IubGVuZ3RoLTFdLnJhdys9IlxuIjpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUQudG9rZW5pemVyLmNvZGUoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwhKHM9clty''@;'; put 'put ''Lmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09cy50eXBlJiYidGV4dCIhPT1zLnR5cGU/ci5wdXNoKG4pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi50ZXh0LEQuaW5saW5lUXVldWVbRC5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPXMudGV4dCksImNvbnRpbnVlIjtpZigo''@;'; put 'put ''bj1ELnRva2VuaXplci5mZW5jZXMoZSkpfHwobj1ELnRva2VuaXplci5oZWFkaW5nKGUpKXx8KG49RC50b2tlbml6ZXIuaHIoZSkpfHwobj1ELnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXx8KG49RC50b2tlbml6ZXIubGlzdChlKSl8fChuPUQudG9rZW5pemVyLmh0bWwoZSkpKXJldHVybiBl''@;'; put 'put ''PWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5kZWYoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwhKHM9cltyLmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09cy50eXBlJiYidGV4dCIhPT1zLnR5cGU/''@;'; put 'put ''RC50b2tlbnMubGlua3Nbbi50YWddfHwoRC50b2tlbnMubGlua3Nbbi50YWddPXtocmVmOm4uaHJlZix0aXRsZTpuLnRpdGxlfSk6KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnJhdyxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJj''@;'; put 'put ''b250aW51ZSI7aWYoKG49RC50b2tlbml6ZXIudGFibGUoZSkpfHwobj1ELnRva2VuaXplci5saGVhZGluZyhlKSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjt2YXIgRixkLHg7aWYocD1lLEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9w''@;'; put 'put ''dGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrJiYoRj0xLzAsZD1lLnNsaWNlKDEpLEQub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihsKXsibnVtYmVyIj09dHlwZW9mKHg9bC5jYWxsKHtsZXhlcjp0aGlzfSxkKSkmJjA8PXgmJihGPU1hdGgubWluKEYs''@;'; put 'put ''eCkpfSksRjwxLzApJiYwPD1GJiYocD1lLnN1YnN0cmluZygwLEYrMSkpLEQuc3RhdGUudG9wJiYobj1ELnRva2VuaXplci5wYXJhZ3JhcGgocCkpKXJldHVybiBzPXJbci5sZW5ndGgtMV0sZyYmInBhcmFncmFwaCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIitu''@;'; put 'put ''LnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSxnPXAubGVuZ3RoIT09ZS5sZW5ndGgsZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci50''@;'; put 'put ''ZXh0KGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlLnBvcCgpLEQuaW5saW5lUXVldWVbRC5pbmxpbmVRdWV1ZS5s''@;'; put 'put ''ZW5ndGgtMV0uc3JjPXMudGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoZSl7dmFyIGg9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRC5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihoKSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvciho''@;'; put 'put ''KX19KCk7aWYoImNvbnRpbnVlIiE9PW8mJiJicmVhayI9PT1vKWJyZWFrfXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxyfSx1LmlubGluZT1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzplLHRva2VuczpyPXZvaWQgMD09PXI/W106cn0pLHJ9LHUuaW5s''@;'; put 'put ''aW5lVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRCxvLEY9dGhpcyxkPSh2b2lkIDA9PT1yJiYocj1bXSksZSk7aWYodGhpcy50b2tlbnMubGlua3Mpe3ZhciB4PU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZigwPHgubGVuZ3RoKWZvcig7bnVsbCE9KGc9dGhpcy50''@;'; put 'put ''b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhkKSk7KXguaW5jbHVkZXMoZ1swXS5zbGljZShnWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1swXS5sZW5ndGgtMikrIl0iK2Quc2xpY2UodGhp''@;'; put 'put ''cy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oZz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiWyIrImEiLnJlcGVhdChnWzBdLmxlbmd0aC0yKSsi''@;'; put 'put ''XSIrZC5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oZz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhkKSk7KWQ9ZC5zbGljZSgwLGcuaW5kZXgpKyIrKyIrZC5zbGljZSh0aGlz''@;'; put 'put ''LnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2U7KXt2YXIgaD1mdW5jdGlvbigpe2lmKER8fChvPSIiKSxEPSExLEYub3B0aW9ucy5leHRlbnNpb25zJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJkYub3B0aW9ucy5leHRlbnNpb25z''@;'; put 'put ''LmlubGluZS5zb21lKGZ1bmN0aW9uKEEpe3JldHVybiEhKG49QS5jYWxsKHtsZXhlcjpGfSxlLHIpKSYmKGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmVzY2FwZShlKSlyZXR1cm4gZT1lLnN1YnN0''@;'; put 'put ''cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIudGFnKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PW4udHlwZSYmInRleHQiPT09cy50eXBlPyhzLnJhdys9bi5yYXcs''@;'; put 'put ''cy50ZXh0Kz1uLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIubGluayhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIucmVmbGluayhlLEYudG9rZW5zLmxpbmtzKSlyZXR1''@;'; put 'put ''cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZigobj1GLnRva2VuaXplci5lbVN0cm9uZyhlLGQs''@;'; put 'put ''bykpfHwobj1GLnRva2VuaXplci5jb2Rlc3BhbihlKSl8fChuPUYudG9rZW5pemVyLmJyKGUpKXx8KG49Ri50b2tlbml6ZXIuZGVsKGUpKXx8KG49Ri50b2tlbml6ZXIuYXV0b2xpbmsoZSxzZSkpfHwhRi5zdGF0ZS5pbkxpbmsmJihuPUYudG9rZW5pemVyLnVybChlLHNlKSkpcmV0dXJuIGU9''@;'; put 'put ''ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjt2YXIgbCxrLGI7aWYocD1lLEYub3B0aW9ucy5leHRlbnNpb25zJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSYmKGw9MS8wLGs9ZS5zbGljZSgxKSxGLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFy''@;'; put 'put ''dElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKEEpeyJudW1iZXIiPT10eXBlb2YoYj1BLmNhbGwoe2xleGVyOnRoaXN9LGspKSYmMDw9YiYmKGw9TWF0aC5taW4obCxiKSl9KSxsPDEvMCkmJjA8PWwmJihwPWUuc3Vic3RyaW5nKDAsbCsxKSksbj1GLnRva2VuaXplci5pbmxpbmVUZXh0KHAsa2Up''@;'; put 'put ''KXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIl8iIT09bi5yYXcuc2xpY2UoLTEpJiYobz1uLnJhdy5zbGljZSgtMSkpLEQ9ITAsKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRp''@;'; put 'put ''bnVlIjtpZihlKXt2YXIgdz0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZihGLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHcpLCJicmVhayI7dGhyb3cgbmV3IEVycm9yKHcpfX0oKTtpZigiY29udGludWUiIT09aCYmImJyZWFrIj09PWgp''@;'; put 'put ''YnJlYWt9cmV0dXJuIHJ9LHU9YSwodD1be2tleToicnVsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybntibG9jazpmLGlubGluZTpjfX19XSkmJlAodSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxhfSgpLFo9ZnVuY3Rpb24oKXtmdW5jdGlv''@;'; put 'put ''biBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLmNvZGU9ZnVuY3Rpb24odCxuLGUpe3ZhciByO3JldHVybiBuPShufHwiIikubWF0Y2goL1xTKi8pWzBdLHRoaXMub3B0aW9ucy5oaWdobGlnaHQmJm51bGwhPShyPXRoaXMub3B0aW9u''@;'; put 'put ''cy5oaWdobGlnaHQodCxuKSkmJnIhPT10JiYoZT0hMCx0PXIpLHQ9dC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLG4/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgreShuKSsnIj4nKyhlP3Q6eSh0LCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+''@;'; put 'put ''IisoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifSxpLmJsb2NrcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIit0KyI8L2Jsb2NrcXVvdGU+XG4ifSxpLmh0bWw9ZnVuY3Rpb24odCx1KXtyZXR1cm4gdH0saS5oZWFkaW5nPWZ1bmN0aW9uKHQsdSxlLHIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzPyI8aCIrdSsnIGlkPSInKyh0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K3Iuc2x1ZyhlKSkrJyI+Jyt0KyI8L2giK3UrIj5cbiI6IjxoIit1KyI+Iit0KyI8L2giK3UrIj5cbiJ9LGkuaHI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25z''@;'; put 'put ''LnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn0saS5saXN0PWZ1bmN0aW9uKHQsdSxlKXt2YXIgcj11PyJvbCI6InVsIjtyZXR1cm4iPCIrcisodSYmMSE9PWU/JyBzdGFydD0iJytlKyciJzoiIikrIj5cbiIrdCsiPC8iK3IrIj5cbiJ9LGkubGlzdGl0ZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxs''@;'; put 'put ''aT4iK3QrIjwvbGk+XG4ifSxpLmNoZWNrYm94PWZ1bmN0aW9uKHQpe3JldHVybiI8aW5wdXQgIisodD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9LGkucGFyYWdyYXBoPWZ1bmN0aW9uKHQp''@;'; put 'put ''e3JldHVybiI8cD4iK3QrIjwvcD5cbiJ9LGkudGFibGU9ZnVuY3Rpb24odCx1KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIit0KyI8L3RoZWFkPlxuIisodT11JiYiPHRib2R5PiIrdSsiPC90Ym9keT4iKSsiPC90YWJsZT5cbiJ9LGkudGFibGVyb3c9ZnVuY3Rpb24odCl7cmV0dXJuIjx0''@;'; put 'put ''cj5cbiIrdCsiPC90cj5cbiJ9LGkudGFibGVjZWxsPWZ1bmN0aW9uKHQsdSl7dmFyIGU9dS5oZWFkZXI/InRoIjoidGQiO3JldHVybih1LmFsaWduPyI8IitlKycgYWxpZ249IicrdS5hbGlnbisnIj4nOiI8IitlKyI+IikrdCsiPC8iK2UrIj5cbiJ9LGkuc3Ryb25nPWZ1bmN0aW9uKHQpe3Jl''@;'; put 'put ''dHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0saS5lbT1mdW5jdGlvbih0KXtyZXR1cm4iPGVtPiIrdCsiPC9lbT4ifSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiI8Y29kZT4iK3QrIjwvY29kZT4ifSxpLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8i''@;'; put 'put ''PGJyLz4iOiI8YnI+In0saS5kZWw9ZnVuY3Rpb24odCl7cmV0dXJuIjxkZWw+Iit0KyI8L2RlbD4ifSxpLmxpbms9ZnVuY3Rpb24odCx1LGUpe3JldHVybiBudWxsPT09KHQ9bmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLHQpKT9lOih0PSc8YSBocmVmPSIn''@;'; put 'put ''K3QrJyInLHUmJih0Kz0nIHRpdGxlPSInK3UrJyInKSx0KyI+IitlKyI8L2E+Iil9LGkuaW1hZ2U9ZnVuY3Rpb24odCx1LGUpe3JldHVybiBudWxsPT09KHQ9bmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLHQpKT9lOih0PSc8aW1nIHNyYz0iJyt0KyciIGFs''@;'; put 'put ''dD0iJytlKyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsodGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iKSl9LGkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYX0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5zdHJvbmc9''@;'; put 'put ''ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuY29kZXNwYW49ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4g''@;'; put 'put ''dH0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4iIitlfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4iIitlfSxpLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGF9KCksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLnNlZW49e319dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5y''@;'; put 'put ''ZXBsYWNlKC9ccy9nLCItIil9LGkuZ2V0TmV4dFNhZmVTbHVnPWZ1bmN0aW9uKHQsdSl7dmFyIGU9dCxyPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGUpKWZvcihyPXRoaXMuc2Vlblt0XTtlPXQrIi0iKyArK3IsdGhpcy5zZWVuLmhhc093blByb3BlcnR5KGUpOyk7cmV0dXJuIHV8''@;'; put 'put ''fCh0aGlzLnNlZW5bdF09cix0aGlzLnNlZW5bZV09MCksZX0saS5zbHVnPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXt9KSx0PXRoaXMuc2VyaWFsaXplKHQpLHRoaXMuZ2V0TmV4dFNhZmVTbHVnKHQsdS5kcnlydW4pfSxhfSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBh''@;'; put 'put ''KHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBaLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVu''@;'; put 'put ''ZGVyZXI9bmV3IE4sdGhpcy5zbHVnZ2VyPW5ldyBYfWEucGFyc2U9ZnVuY3Rpb24odCx1KXtyZXR1cm4gbmV3IGEodSkucGFyc2UodCl9LGEucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCx1KXtyZXR1cm4gbmV3IGEodSkucGFyc2VJbmxpbmUodCl9O3ZhciBpPWEucHJvdG90eXBlO3JldHVybiBp''@;'; put 'put ''LnBhcnNlPWZ1bmN0aW9uKHQsdSl7dm9pZCAwPT09dSYmKHU9ITApO2Zvcih2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGgsbCxrLGIsdyxBPSIiLEI9dC5sZW5ndGgsXz0wO188QjtfKyspaWYobz10W19dLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tvLnR5cGVdJiYoITEhPT0odz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sbykpfHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0''@;'; put 'put ''YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhvLnR5cGUpKSlBKz13fHwiIjtlbHNlIHN3aXRjaChvLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOkErPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNl''@;'; put 'put ''ImhlYWRpbmciOkErPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSxvLmRlcHRoLHVlKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6QSs9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5jb2RlKG8udGV4dCxvLmxhbmcsby5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoZz1GPSIiLG49by5oZWFkZXIubGVuZ3RoLGU9MDtlPG47ZSsrKWcrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoby5oZWFkZXJbZV0udG9rZW5zKSx7aGVh''@;'; put 'put ''ZGVyOiEwLGFsaWduOm8uYWxpZ25bZV19KTtmb3IoRis9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKSxEPSIiLG49by5yb3dzLmxlbmd0aCxlPTA7ZTxuO2UrKyl7Zm9yKGc9IiIscz0ocD1vLnJvd3NbZV0pLmxlbmd0aCxyPTA7cjxzO3IrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0''@;'; put 'put ''aGlzLnBhcnNlSW5saW5lKHBbcl0udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOm8uYWxpZ25bcl19KTtEKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGcpfUErPXRoaXMucmVuZGVyZXIudGFibGUoRixEKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOkQ9dGhpcy5wYXJzZShvLnRva2Vucyks''@;'; put 'put ''QSs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKEQpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKEY9by5vcmRlcmVkLHo9by5zdGFydCxkPW8ubG9vc2Usbj1vLml0ZW1zLmxlbmd0aCxEPSIiLGU9MDtlPG47ZSsrKWw9KGg9by5pdGVtc1tlXSkuY2hlY2tlZCxrPWgudGFzayx4PSIiLGgudGFz''@;'; put 'put ''ayYmKGI9dGhpcy5yZW5kZXJlci5jaGVja2JveChsKSxkPzA8aC50b2tlbnMubGVuZ3RoJiYicGFyYWdyYXBoIj09PWgudG9rZW5zWzBdLnR5cGU/KGgudG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udGV4dCxoLnRva2Vuc1swXS50b2tlbnMmJjA8aC50b2tlbnNbMF0udG9rZW5z''@;'; put 'put ''Lmxlbmd0aCYmInRleHQiPT09aC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihoLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1iKyIgIitoLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmgudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6Yn0pOngrPWIpLHgrPXRoaXMucGFy''@;'; put 'put ''c2UoaC50b2tlbnMsZCksRCs9dGhpcy5yZW5kZXJlci5saXN0aXRlbSh4LGssbCk7QSs9dGhpcy5yZW5kZXJlci5saXN0KEQsRix6KTtjb250aW51ZTtjYXNlImh0bWwiOkErPXRoaXMucmVuZGVyZXIuaHRtbChvLnRleHQsby5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJhZ3JhcGgiOkErPXRo''@;'; put 'put ''aXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihEPW8udG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpOm8udGV4dDtfKzE8QiYmInRleHQiPT09dFtfKzFdLnR5cGU7KUQrPSJcbiIrKChvPXRbKytf''@;'; put 'put ''XSkudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpOm8udGV4dCk7QSs9dT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChEKTpEO2NvbnRpbnVlO2RlZmF1bHQ6dmFyIHo9J1Rva2VuIHdpdGggIicrby50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5z''@;'; put 'put ''aWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcih6KTt0aHJvdyBuZXcgRXJyb3Ioeil9cmV0dXJuIEF9LGkucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCx1KXt1PXV8fHRoaXMucmVuZGVyZXI7Zm9yKHZhciBlLHIsbj0iIixzPXQubGVuZ3RoLHA9MDtwPHM7cCsrKWlmKGU9dFtwXSx0aGlz''@;'; put 'put ''Lm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZS50eXBlXSYmKCExIT09KHI9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0uY2FsbCh7cGFyc2VyOnRo''@;'; put 'put ''aXN9LGUpKXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhlLnR5cGUpKSluKz1yfHwiIjtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOm4rPXUudGV4''@;'; put 'put ''dChlLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6bis9dS5odG1sKGUudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpuKz11LmxpbmsoZS5ocmVmLGUudGl0bGUsdGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJpbWFnZSI6bis9dS5pbWFnZShlLmhyZWYsZS50aXRsZSxlLnRl''@;'; put 'put ''eHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpuKz11LnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImVtIjpuKz11LmVtKHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOm4rPXUuY29kZXNwYW4oZS50ZXh0KTticmVh''@;'; put 'put ''aztjYXNlImJyIjpuKz11LmJyKCk7YnJlYWs7Y2FzZSJkZWwiOm4rPXUuZGVsKHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2RlZmF1bHQ6dmFyIGc9J1Rva2VuIHdpdGggIicrZS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQp''@;'; put 'put ''cmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihnKTt0aHJvdyBuZXcgRXJyb3IoZyl9cmV0dXJuIG59LGF9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkucHJlcHJvY2Vzcz1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gdH0saS5wb3N0cHJvY2Vzcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYX0oKSxxPShPLnBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSxLKCJwYXJzZU1hcmtkb3duIikpLFY9Sygib25FcnJvciIpO2Z1bmN0aW9uIENlKGEsaSl7''@;'; put 'put ''dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24odSxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCk7dmFyIG4scz12KHt9LGUpLHA9KGU9dih7fSx0LmRlZmF1bHRzLHMpLEcodCxWKVtWXShlLnNpbGVudCxlLmFzeW5jLHIpKTtpZihudWxsPT11KXJldHVybiBwKG5ldyBF''@;'; put 'put ''cnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIHUpcmV0dXJuIHAobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh''@;'; put 'put ''bGwodSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKHM9ciwobj1lKSYmIW4uc2lsZW50JiYocyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBp''@;'; put 'put ''biB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChuLnNhbml0aXplfHxuLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVj''@;'; put 'put ''YXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLCFuLmhpZ2hsaWdodCYmImxh''@;'; put 'put ''bmd1YWdlLSI9PT1uLmxhbmdQcmVmaXh8fGNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRo''@;'; put 'put ''ZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksbi5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBz''@;'; put 'put ''aW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZh''@;'; put 'put ''bHNlfWAuIiksbi5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0''@;'; put 'put ''dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxuLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5k''@;'; put 'put ''IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksbi54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2Ug''@;'; put 'put ''dmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLG4uaGVhZGVySWRzfHxuLmhlYWRlclByZWZpeCkmJmNvbnNvbGUu''@;'; put 'put ''d2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdh''@;'; put 'put ''cm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpLGUuaG9va3MmJihlLmhvb2tzLm9wdGlvbnM9ZSkscil7dmFyIGcsRD1lLmhpZ2hsaWdo''@;'; put 'put ''dDt0cnl7ZS5ob29rcyYmKHU9ZS5ob29rcy5wcmVwcm9jZXNzKHUpKSxnPWEodSxlKX1jYXRjaChoKXtyZXR1cm4gcChoKX12YXIgbyxGPWZ1bmN0aW9uKGgpe3ZhciBsO2lmKCFoKXRyeXtlLndhbGtUb2tlbnMmJnQud2Fsa1Rva2VucyhnLGUud2Fsa1Rva2VucyksbD1pKGcsZSksZS5ob29r''@;'; put 'put ''cyYmKGw9ZS5ob29rcy5wb3N0cHJvY2VzcyhsKSl9Y2F0Y2goayl7aD1rfXJldHVybiBlLmhpZ2hsaWdodD1ELGg/cChoKTpyKG51bGwsbCl9O3JldHVybiFEfHxELmxlbmd0aDwzP0YoKTooZGVsZXRlIGUuaGlnaGxpZ2h0LGcubGVuZ3RoPyhvPTAsdC53YWxrVG9rZW5zKGcsZnVuY3Rpb24o''@;'; put 'put ''aCl7ImNvZGUiPT09aC50eXBlJiYobysrLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtEKGgudGV4dCxoLmxhbmcsZnVuY3Rpb24obCxrKXtpZihsKXJldHVybiBGKGwpO251bGwhPWsmJmshPT1oLnRleHQmJihoLnRleHQ9ayxoLmVzY2FwZWQ9ITApLDA9PS0tbyYmRigpfSl9LDApKX0pLHZvaWQo''@;'; put 'put ''MD09PW8mJkYoKSkpOkYoKSl9aWYoZS5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUuaG9va3M/ZS5ob29rcy5wcmVwcm9jZXNzKHUpOnUpLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGEoaCxlKX0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGUud2Fsa1Rva2Vucz9Qcm9taXNlLmFs''@;'; put 'put ''bCh0LndhbGtUb2tlbnMoaCxlLndhbGtUb2tlbnMpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTpofSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gaShoLGUpfSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gZS5ob29rcz9lLmhvb2tzLnBvc3Rwcm9jZXNzKGgpOmh9KS5jYXRjaChwKTt0''@;'; put 'put ''cnl7ZS5ob29rcyYmKHU9ZS5ob29rcy5wcmVwcm9jZXNzKHUpKTt2YXIgZD1hKHUsZSkseD0oZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZCxlLndhbGtUb2tlbnMpLGkoZCxlKSk7cmV0dXJuIGUuaG9va3M/ZS5ob29rcy5wb3N0cHJvY2Vzcyh4KTp4fWNhdGNoKGgpe3JldHVybiBwKGgp''@;'; put 'put ''fX19ZnVuY3Rpb24gRWUoYSxpLHQpe3JldHVybiBmdW5jdGlvbih1KXt2YXIgZTtpZih1Lm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsYSlyZXR1cm4gZT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+''@;'; put 'put ''Iit5KHUubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiIsaT9Qcm9taXNlLnJlc29sdmUoZSk6dD92b2lkIHQobnVsbCxlKTplO2lmKGkpcmV0dXJuIFByb21pc2UucmVqZWN0KHUpO2lmKCF0KXRocm93IHU7dCh1KX19ST1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkodGhpcyxWLHt2YWx1ZTpFZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHEse3ZhbHVlOkNlfSksdGhpcy5kZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGln''@;'; put 'put ''aGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGws''@;'; put 'put ''eGh0bWw6ITF9LHRoaXMub3B0aW9ucz10aGlzLnNldE9wdGlvbnMsdGhpcy5wYXJzZT1HKHRoaXMscSlbcV0oUy5sZXgsVC5wYXJzZSksdGhpcy5wYXJzZUlubGluZT1HKHRoaXMscSlbcV0oUy5sZXhJbmxpbmUsVC5wYXJzZUlubGluZSksdGhpcy5QYXJzZXI9VCx0aGlzLnBhcnNlcj1ULnBh''@;'; put 'put ''cnNlLHRoaXMuUmVuZGVyZXI9Wix0aGlzLlRleHRSZW5kZXJlcj1OLHRoaXMuTGV4ZXI9Uyx0aGlzLmxleGVyPVMubGV4LHRoaXMuVG9rZW5pemVyPWosdGhpcy5TbHVnZ2VyPVgsdGhpcy5Ib29rcz1PLHRoaXMudXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT1hLnByb3RvdHlwZTty''@;'; put 'put ''ZXR1cm4gaS53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsdSl7Zm9yKHZhciBlLHI9dGhpcyxuPVtdLHM9VSh0KTshKGU9cygpKS5kb25lOykhZnVuY3Rpb24oKXt2YXIgcD1lLnZhbHVlO3N3aXRjaChuPW4uY29uY2F0KHUuY2FsbChyLHApKSxwLnR5cGUpe2Nhc2UidGFibGUiOmZvcih2YXIgZz1V''@;'; put 'put ''KHAuaGVhZGVyKTshKEQ9ZygpKS5kb25lOyl7dmFyIEQ9RC52YWx1ZTtuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhELnRva2Vucyx1KSl9Zm9yKHZhciBvLEY9VShwLnJvd3MpOyEobz1GKCkpLmRvbmU7KWZvcih2YXIgZD1VKG8udmFsdWUpOyEoeD1kKCkpLmRvbmU7KXt2YXIgeD14LnZhbHVl''@;'; put 'put ''O249bi5jb25jYXQoci53YWxrVG9rZW5zKHgudG9rZW5zLHUpKX1icmVhaztjYXNlImxpc3QiOm49bi5jb25jYXQoci53YWxrVG9rZW5zKHAuaXRlbXMsdSkpO2JyZWFrO2RlZmF1bHQ6ci5kZWZhdWx0cy5leHRlbnNpb25zJiZyLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnIu''@;'; put 'put ''ZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1twLnR5cGVdP3IuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1twLnR5cGVdLmZvckVhY2goZnVuY3Rpb24oaCl7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMocFtoXSx1KSl9KTpwLnRva2VucyYmKG49bi5jb25jYXQoci53YWxr''@;'; put 'put ''VG9rZW5zKHAudG9rZW5zLHUpKSl9fSgpO3JldHVybiBufSxpLnVzZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLHU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fSxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248''@;'; put 'put ''ZTtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgcCxnPXYoe30scyk7aWYoZy5hc3luYz10LmRlZmF1bHRzLmFzeW5jfHxnLmFzeW5jfHwhMSxzLmV4dGVuc2lvbnMmJihzLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihsKXtpZighbC5u''@;'; put 'put ''YW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTt2YXIgaztpZihsLnJlbmRlcmVyJiYodS5yZW5kZXJlcnNbbC5uYW1lXT0oaz11LnJlbmRlcmVyc1tsLm5hbWVdKT9mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIp''@;'; put 'put ''LEE9MDtBPGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPWwucmVuZGVyZXIuYXBwbHkodGhpcyx3KTtyZXR1cm4hMT09PUI/ay5hcHBseSh0aGlzLHcpOkJ9OmwucmVuZGVyZXIpLGwudG9rZW5pemVyKXtpZighbC5sZXZlbHx8ImJsb2NrIiE9PWwubGV2ZWwmJiJpbmxpbmUiIT09bC5s''@;'; put 'put ''ZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTt1W2wubGV2ZWxdP3VbbC5sZXZlbF0udW5zaGlmdChsLnRva2VuaXplcik6dVtsLmxldmVsXT1bbC50b2tlbml6ZXJdLGwuc3RhcnQmJigiYmxvY2siPT09bC5sZXZlbD91''@;'; put 'put ''LnN0YXJ0QmxvY2s/dS5zdGFydEJsb2NrLnB1c2gobC5zdGFydCk6dS5zdGFydEJsb2NrPVtsLnN0YXJ0XToiaW5saW5lIj09PWwubGV2ZWwmJih1LnN0YXJ0SW5saW5lP3Uuc3RhcnRJbmxpbmUucHVzaChsLnN0YXJ0KTp1LnN0YXJ0SW5saW5lPVtsLnN0YXJ0XSkpfWwuY2hpbGRUb2tlbnMm''@;'; put 'put ''Jih1LmNoaWxkVG9rZW5zW2wubmFtZV09bC5jaGlsZFRva2Vucyl9KSxnLmV4dGVuc2lvbnM9dSkscy5yZW5kZXJlcil7dmFyIEQsbz10LmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgWih0LmRlZmF1bHRzKTtmb3IoRCBpbiBzLnJlbmRlcmVyKSFmdW5jdGlvbihsKXt2YXIgaz1vW2xdO29bbF09''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLnJlbmRlcmVyW2xdLmFwcGx5KG8sdyk7cmV0dXJuITE9PT1CP2suYXBwbHkobyx3KTpCfX0oRCk7Zy5yZW5kZXJlcj1vfWlmKHMu''@;'; put 'put ''dG9rZW5pemVyKXt2YXIgRixkPXQuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgaih0LmRlZmF1bHRzKTtmb3IoRiBpbiBzLnRva2VuaXplcikhZnVuY3Rpb24obCl7dmFyIGs9ZFtsXTtkW2xdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0w''@;'; put 'put ''O0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy50b2tlbml6ZXJbbF0uYXBwbHkoZCx3KTtyZXR1cm4hMT09PUI/ay5hcHBseShkLHcpOkJ9fShGKTtnLnRva2VuaXplcj1kfWlmKHMuaG9va3Mpe3ZhciB4LGg9dC5kZWZhdWx0cy5ob29rc3x8bmV3IE87Zm9yKHggaW4gcy5ob29r''@;'; put 'put ''cykhZnVuY3Rpb24obCl7dmFyIGs9aFtsXTtoW2xdPU8ucGFzc1Rocm91Z2hIb29rcy5oYXMobCk/ZnVuY3Rpb24oYil7cmV0dXJuIHQuZGVmYXVsdHMuYXN5bmM/UHJvbWlzZS5yZXNvbHZlKHMuaG9va3NbbF0uY2FsbChoLGIpKS50aGVuKGZ1bmN0aW9uKHcpe3JldHVybiBrLmNhbGwoaCx3''@;'; put 'put ''KX0pOihiPXMuaG9va3NbbF0uY2FsbChoLGIpLGsuY2FsbChoLGIpKX06ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLmhvb2tzW2xdLmFwcGx5KGgsdyk7cmV0dXJuITE9PT1C''@;'; put 'put ''P2suYXBwbHkoaCx3KTpCfX0oeCk7Zy5ob29rcz1ofXMud2Fsa1Rva2VucyYmKHA9dC5kZWZhdWx0cy53YWxrVG9rZW5zLGcud2Fsa1Rva2Vucz1mdW5jdGlvbihsKXt2YXIgaz1bXTtyZXR1cm4gay5wdXNoKHMud2Fsa1Rva2Vucy5jYWxsKHRoaXMsbCkpLHA/ay5jb25jYXQocC5jYWxsKHRo''@;'; put 'put ''aXMsbCkpOmt9KSx0LmRlZmF1bHRzPXYoe30sdC5kZWZhdWx0cyxnKX0pLHRoaXN9LGkuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz12KHt9LHRoaXMuZGVmYXVsdHMsdCksdGhpc30sYX0oKTt2YXIgUj1uZXcgSShDLmRlZmF1bHRzKTtmdW5jdGlvbiBtKGEs''@;'; put 'put ''aSx0KXtyZXR1cm4gUi5wYXJzZShhLGksdCl9bS5vcHRpb25zPW0uc2V0T3B0aW9ucz1mdW5jdGlvbihhKXtyZXR1cm4gUi5zZXRPcHRpb25zKGEpLFcobS5kZWZhdWx0cz1SLmRlZmF1bHRzKSxtfSxtLmdldERlZmF1bHRzPVEsbS5kZWZhdWx0cz1DLmRlZmF1bHRzLG0udXNlPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIFIudXNlLmFwcGx5KFIsYXJndW1lbnRzKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS53YWxrVG9rZW5zPWZ1bmN0aW9uKGEsaSl7cmV0dXJuIFIud2Fsa1Rva2VucyhhLGkpfSxtLnBhcnNlSW5saW5lPVIucGFyc2VJbmxpbmUsbS5QYXJzZXI9VCxtLnBhcnNlcj1U''@;'; put 'put ''LnBhcnNlLG0uUmVuZGVyZXI9WixtLlRleHRSZW5kZXJlcj1OLG0uTGV4ZXI9UyxtLmxleGVyPVMubGV4LG0uVG9rZW5pemVyPWosbS5TbHVnZ2VyPVgsbS5Ib29rcz1PO3ZhciBtZT0obS5wYXJzZT1tKS5vcHRpb25zLHhlPW0uc2V0T3B0aW9ucyxiZT1tLnVzZSx3ZT1tLndhbGtUb2tlbnMs''@;'; put 'put ''QmU9bS5wYXJzZUlubGluZSx5ZT1tLHZlPVQucGFyc2UsX2U9Uy5sZXg7Qy5Ib29rcz1PLEMuTGV4ZXI9UyxDLk1hcmtlZD1JLEMuUGFyc2VyPVQsQy5SZW5kZXJlcj1aLEMuU2x1Z2dlcj1YLEMuVGV4dFJlbmRlcmVyPU4sQy5Ub2tlbml6ZXI9aixDLmdldERlZmF1bHRzPVEsQy5sZXhlcj1f''@;'; put 'put ''ZSxDLm1hcmtlZD1tLEMub3B0aW9ucz1tZSxDLnBhcnNlPXllLEMucGFyc2VJbmxpbmU9QmUsQy5wYXJzZXI9dmUsQy5zZXRPcHRpb25zPXhlLEMudXNlPWJlLEMud2Fsa1Rva2Vucz13ZX0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.e45854681934e986-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''QGNoYXJzZXQgIlVURi04IjsvKiEKICogQ29weXJpZ2h0IChjKSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLgogKgogKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9yYXRpb24gYmFzZWQgaW4K''@;'; put 'put ''ICogR2R5bmlhLCBQb2xhbmQsIGF0IEFsZWphIFp3eWNpZXN0d2EgOTYtOTgsIHJlZ2lzdGVyZWQgYnkgdGhlIERpc3RyaWN0IENvdXJ0IGluIEdkYW5zayB1bmRlciBudW1iZXIKICogNTM4NjUxLCBFVSB0YXggSUQgbnVtYmVyOiBQTDU4NjIyOTQwMDIsIHNoYXJlIGNhcGl0YWw6IFBMTiA2''@;'; put 'put ''Miw4MDAuMDAuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC0KICogbGljZW5zZWQgLSBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3Ig''@;'; put 'put ''Y29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IKICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LgogKgogKiBJZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkg''@;'; put 'put ''Zm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nCiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwKICog''@;'; put 'put ''eW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImhhbmRzb250YWJsZS1ub24tY29tbWVyY2lhbC1saWNlbnNlLnBkZiIgZmlsZS4KICoKICogWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0''@;'; put 'put ''IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlCiAqIGxpY2Vuc2UgYWdyZWVtZW50LgogKgogKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUK''@;'; put 'put ''ICogY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuCiAqCiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiCiAqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMg''@;'; put 'put ''T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTwogKiBMRUdBTCBUSEVPUlksIFNIQUxMIEhBTkRTT05DT0RFIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULAogKiBJTkRJUkVDVCwgU1BFQ0lBTCwg''@;'; put 'put ''SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZlcnNpb246IDE1LjMuMAogKiBSZWxlYXNlIGRhdGU6IDI5LzA0LzIwMjUgKGJ1aWx0''@;'; put 'put ''IGF0IDI0LzA0LzIwMjUgMTA6NTk6MTEpCiAqLy5oYW5kc29udGFibGUgLnRhYmxlIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRke2JvcmRlci10b3A6bm9uZX0uaGFuZHNvbnRhYmxlIHRye2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlIHRke2JhY2tncm91bmQtY29sb3I6aW5oZXJp''@;'; put 'put ''dH0uaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhh''@;'; put 'put ''bmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7''@;'; put 'put ''Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZHtib3JkZXI6MDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGgsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVy''@;'; put 'put ''LWxlZnQ6bm9uZX0uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50ZCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50aHts''@;'; put 'put ''aW5lLWhlaWdodDoyMXB4O3BhZGRpbmc6MH0uY29sLWxnLTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTAuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMi5oYW5kc29udGFibGUsLmNvbC1sZy0zLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLWxnLTQuaGFuZHNvbnRhYmxlLC5jb2wtbGctNS5oYW5kc29udGFibGUsLmNvbC1sZy02LmhhbmRzb250YWJsZSwuY29sLWxnLTcuaGFuZHNvbnRhYmxlLC5jb2wtbGctOC5oYW5kc29udGFibGUsLmNvbC1sZy05LmhhbmRzb250YWJsZSwuY29sLW1kLTEuaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtbWQtMTAuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTEuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMi5oYW5kc29udGFibGUsLmNvbC1tZC0zLmhhbmRzb250YWJsZSwuY29sLW1kLTQuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNS5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC1tZC02LmhhbmRzb250YWJsZSwuY29sLW1kLTcuaGFuZHNvbnRhYmxlLC5jb2wtbWQtOC5oYW5kc29udGFibGUsLmNvbC1tZC05LmhhbmRzb250YWJsZSAuY29sLXNtLTEuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTAuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTEuaGFuZHNvbnRhYmxlLC5jb2wt''@;'; put 'put ''c20tMTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMi5oYW5kc29udGFibGUsLmNvbC1zbS0zLmhhbmRzb250YWJsZSwuY29sLXNtLTQuaGFuZHNvbnRhYmxlLC5jb2wtc20tNS5oYW5kc29udGFibGUsLmNvbC1zbS02LmhhbmRzb250YWJsZSwuY29sLXNtLTcuaGFuZHNvbnRhYmxlLC5jb2wtc20t''@;'; put 'put ''OC5oYW5kc29udGFibGUsLmNvbC1zbS05LmhhbmRzb250YWJsZSAuY29sLXhzLTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTAuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMi5oYW5kc29udGFibGUsLmNvbC14cy0z''@;'; put 'put ''LmhhbmRzb250YWJsZSwuY29sLXhzLTQuaGFuZHNvbnRhYmxlLC5jb2wteHMtNS5oYW5kc29udGFibGUsLmNvbC14cy02LmhhbmRzb250YWJsZSwuY29sLXhzLTcuaGFuZHNvbnRhYmxlLC5jb2wteHMtOC5oYW5kc29udGFibGUsLmNvbC14cy05LmhhbmRzb250YWJsZXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDtwYWRkaW5nLXJpZ2h0OjB9LmhhbmRzb250YWJsZSAudGFibGUtc3RyaXBlZD50Ym9keT50cjpudGgtb2YtdHlwZSgybil7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmhpZGV7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96''@;'; put 'put ''LWJveC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDti''@;'; put 'put ''b3JkZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUgY29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0''@;'; put 'put ''OjIxcHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmU7b3V0bGluZS13aWR0aDowO3doaXRlLXNwYWNlOnByZS13cmFwfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGgsW2Rpcj1ydGxdLmhh''@;'; put 'put ''bmRzb250YWJsZSB0ZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY31b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNj''@;'; put 'put ''Y2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQt''@;'; put 'put ''d2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVycyB0''@;'; put 'put ''aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNo''@;'; put 'put ''aWxkIHRoLC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY30uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklu''@;'; put 'put ''bGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGQsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaHRfbWFz''@;'; put 'put ''dGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHgg''@;'; put 'put ''c29saWQgI2NjY31bZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQg''@;'; put 'put ''dHIgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3Jk''@;'; put 'put ''ZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaHRfbWFz''@;'; put 'put ''dGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgs''@;'; put 'put ''Lmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RDaGls''@;'; put 'put ''ZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Y29sb3I6IzIyMjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGhlYWQgdGh7cGFkZGluZzow''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjY30uaGFuZHNvbnRhYmxlIHRoZWFkIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOjJweCA0cHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxLjF9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAud3RCb3JkZXJ7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwfS5oYW5kc29udGFibGUgLnd0''@;'; put 'put ''Qm9yZGVyLmFyZWF7ei1pbmRleDo4fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmZpbGx7ei1pbmRleDo2fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntmb250LXNpemU6MDtjdXJzb3I6Y3Jvc3NoYWlyfS5odF9jbG9uZV9tYXN0ZXJ7ei1pbmRleDoxMDB9Lmh0X2Nsb25lX2lubGlu''@;'; put 'put ''ZV9zdGFydHt6LWluZGV4OjEyMH0uaHRfY2xvbmVfYm90dG9te3otaW5kZXg6MTMwfS5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4OjE1MH0uaHRfY2xvbmVfdG9we3otaW5kZXg6MTYwfS5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4''@;'; put 'put ''OjE4MH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSB0ci5oaWRkZW4sLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGQsLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGh7ZGlzcGxheTpub25lfS5odF9tYXN0ZXIsLmh0X2Nsb25lX2lubGlu''@;'; put 'put ''ZV9zdGFydCwuaHRfY2xvbmVfdG9wLC5odF9jbG9uZV9ib3R0b217b3ZlcmZsb3c6aGlkZGVufS5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50aGVhZCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUu''@;'; put 'put ''aHRDb3JlPnRib2R5PnRyPnRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9zdGFydCB0YWJsZS5odENvcmU+dGhlYWR7dmlzaWJpbGl0eTpoaWRkZW59Lmh0X2Nsb25lX3RvcCAud3RIb2xkZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCAud3RIb2xkZXIsLmh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bSAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGV7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2''@;'; put 'put ''ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3fS5oYW5kc29udGFibGUgYXtjb2xvcjojMTA0YWNjfS5oYW5kc29udGFibGUuaHRBdXRvU2l6ZXt2aXNpYmlsaXR5OmhpZGRlbjtsZWZ0Oi05OTAwMHB4O3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDotOTkwMDBweH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmJlYmEhaW1wb3J0YW50fS5oYW5kc29udGFibGUgdGQuaHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGQuaW52aXNpYmxlU2VsZWN0''@;'; put 'put ''aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9ue291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb257YmFja2dyb3VuZDojZmZmMH0u''@;'; put 'put ''aG90LWRpc3BsYXktbGljZW5zZS1pbmZve2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2Nv''@;'; put 'put ''bG9yOiMzNzM3Mzc7cGFkZGluZzo1cHggMCAzcHg7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtjb2xvcjojMTA0YWNjO2ZvbnQtc2l6ZToxMHB4fS5oYW5kc29udGFibGUgLmh0Rm9jdXNDYXRjaGVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7b3Bh''@;'; put 'put ''Y2l0eTowO2JvcmRlcjowO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDowO2hlaWdodDowfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Y3Vyc29yOmNvbC1yZXNpemU7ei1pbmRleDoyMTA7d2lkdGg6NXB4O2hlaWdodDoyNXB4fS5o''@;'; put 'put ''YW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2N1cnNvcjpyb3ctcmVzaXplO3otaW5kZXg6MjEwO2hlaWdodDo1cHg7d2lkdGg6NTBweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyOmhvdmVyLC5oYW5kc29udGFibGUgLm1h''@;'; put 'put ''bnVhbENvbHVtblJlc2l6ZXIuYWN0aXZlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRifS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlk''@;'; put 'put ''ZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDp1bnNldDt0b3A6MDtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGI7ZGlzcGxheTpub25lO3dpZHRoOjA7Ym9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgIzc3Nztib3JkZXItbGVmdDpub25lO21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6dW5zZXR9''@;'; put 'put ''W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRle2xlZnQ6dW5zZXQ7Ym9yZGVyLWxlZnQ6MXB4IGRhc2hlZCAjNzc3O2JvcmRlci1yaWdodDpub25lO21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSAubWFudWFsUm93''@;'; put 'put ''UmVzaXplckd1aWRle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGI7ZGlzcGxheTpub25lO2hlaWdodDowO2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjNzc3O21hcmdpbi10b3A6NXB4fS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVt''@;'; put 'put ''blJlc2l6ZXJHdWlkZS5hY3RpdmUsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplckd1aWRlLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO3otaW5kZXg6MjA5fS5oYW5kc29udGFibGUgdGQuYXJlYSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMiwuaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRkLmFyZWEtMywuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNCwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5o''@;'; put 'put ''YW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJs''@;'; put 'put ''ZSB0ZC5hcmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7YmFja2dyb3VuZDojMDA1ZWZmfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtMTpiZWZvcmV7b3BhY2l0eTouMn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40MX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IHRkLmFyZWEtNTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi41OH0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmN1cnJlbnQsLmhhbmRzb250YWJsZSB0aGVh''@;'; put 'put ''ZCB0aC5jdXJyZW50e2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMnB4ICM0Yjg5ZmZ9LmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGN9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6IzhlYjBlNztjb2xvcjojMDAwfS5oYW5kc29udGFibGVJbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lLXdpZHRoOjA7bWFyZ2luOjA7cGFk''@;'; put 'put ''ZGluZzoxcHggNXB4IDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtsaW5lLWhlaWdodDoyMXB4O2ZvbnQtc2l6ZTppbmhlcml0O2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7cmVzaXplOm5vbmU7ZGlzcGxheTpibG9jaztjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiNmZmY7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVJbnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lmh0U2VsZWN0RWRpdG9ye3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlfS5odFNlbGVjdEVkaXRvciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm1lbnVsaXN0LWJ1dHRvbiFpbXBvcnRhbnQ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MnB4IHNvbGlkICM0Yjg5ZmY7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaHRTZWxl''@;'; put 'put ''Y3RFZGl0b3Igc2VsZWN0OmZvY3Vze291dGxpbmU6bm9uZX0uaHRTZWxlY3RFZGl0b3IgLmh0QXV0b2NvbXBsZXRlQXJyb3d7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0RGltbWVke2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSAuaHRTdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0U3VibWVudSA6YWZ0ZXJ7Y29udGVudDoiXDI1YjYiO2NvbG9yOiM3Nzc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O2ZvbnQtc2l6ZTo5cHh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRTdWJtZW51IDphZnRlcntjb250ZW50OiIifVtkaXI9cnRsXS5oYW5k''@;'; put 'put ''c29udGFibGUgLmh0U3VibWVudSA6YmVmb3Jle2NvbnRlbnQ6IlwyNWMwIjtjb2xvcjojNzc3O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NXB4O2ZvbnQtc2l6ZTo5cHh9LmhhbmRzb250YWJsZSAuaHRMZWZ0e3RleHQtYWxpZ246bGVmdH0uaGFuZHNvbnRhYmxlIC5odENlbnRlcnt0ZXh0LWFs''@;'; put 'put ''aWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmhhbmRzb250YWJsZSAuaHRKdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeX0uaGFuZHNvbnRhYmxlIC5odFRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmhhbmRzb250YWJsZSAuaHRNaWRkbGV7dmVydGlj''@;'; put 'put ''YWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0Qm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uaGFuZHNvbnRhYmxlIC5odFBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LmhhbmRzb250YWJsZS5saXN0Ym94e21hcmdpbjowfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfbWFzdGVy''@;'; put 'put ''IHRhYmxle2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7YmFja2dyb3VuZDojZmZmfS5oYW5kc29udGFibGUubGlzdGJveCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmxhc3Qt''@;'; put 'put ''Y2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUubGlzdGJveCB0ZHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5oYW5kc29udGFibGUubGlzdGJveCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7d2hpdGUt''@;'; put 'put ''c3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmhhbmRzb250YWJsZS5saXN0Ym94IHRkLmh0RGltbWVke2N1cnNvcjpkZWZhdWx0O2NvbG9yOmluaGVyaXQ7Zm9udC1zdHlsZTppbmhlcml0fS5oYW5kc29udGFibGUubGlzdGJveCAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRk''@;'; put 'put ''ZW59LmhhbmRzb250YWJsZS5saXN0Ym94IHRyIHRkLmN1cnJlbnQsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2VlZX0uaHRfZWRpdG9yX2hpZGRlbnt6LWluZGV4Oi0xfS5odF9lZGl0b3JfdmlzaWJsZXt6LWluZGV4OjIwMH0uaGFuZHNvbnRhYmxlIHRk''@;'; put 'put ''Lmh0U2VhcmNoUmVzdWx0e2JhY2tncm91bmQ6I2ZjZWRkOTtjb2xvcjojNTgzNzA3fS5oYW5kc29udGFibGUubW9iaWxlLC5oYW5kc29udGFibGUubW9iaWxlIC53dEhvbGRlcnstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6''@;'; put 'put ''bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uaGFuZHNvbnRhYmxlLm1vYmlsZSAuaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDstd2Vi''@;'; put 'put ''a2l0LWFwcGVhcmFuY2U6bm9uZX0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZS1IaXRBcmVhe2xlZnQ6LTEwMDAwcHg7cmlnaHQ6dW5zZXQ7dG9wOi0xMDAwMHB4O3otaW5kZXg6OTk5OX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsW2Rpcj1y''@;'; put 'put ''dGxdLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhe3JpZ2h0Oi0xMDAwMHB4O2xlZnQ6dW5zZXR9LmhhbmRzb250YWJsZS5oaWRlLXR3ZWVue2FuaW1hdGlvbjpvcGFjaXR5LWhp''@;'; put 'put ''ZGUgLjNzO2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfS5oYW5kc29udGFibGUuc2hvdy10d2VlbnthbmltYXRpb246b3BhY2l0eS1zaG93IC4zczthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5p''@;'; put 'put ''bWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNiYmI7Y3Vyc29yOmRlZmF1bHQ7d2lkdGg6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6IzU1NX0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZCAuaHRBdXRvY29tcGxldGVBcnJvdzpob3Zlcntjb2xvcjojMWExYTFhfS5oYW5k''@;'; put 'put ''c29udGFibGUgdGQgLmh0QXV0b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6Izc3N30uaGFuZHNvbnRhYmxlIHRkLmFyZWEgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6I2QzZDNkM30uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dC5ub1ZhbHVle29wYWNpdHk6LjV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWx7Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlckxhYmVsLmZ1bGxXaWR0aHt3''@;'; put 'put ''aWR0aDoxMDAlfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7bGVmdDp1bnNldDtyaWdodDo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjQTZBNkE2O2xpbmUtaGVpZ2h0OjhweDtjb2xv''@;'; put 'put ''cjojMjIyO2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTBweDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaGFkb3c6MCAwIDAgM3B4ICNlZWU7YmFja2dyb3VuZDojZWVlO3RleHQtYWxpZ246Y2VudGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmNv''@;'; put 'put ''bGxhcHNpYmxlSW5kaWNhdG9ye3JpZ2h0OnVuc2V0O2xlZnQ6NXB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gdGhlYWQgdGg6aGFzKC5jb2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0UmlnaHQgc3Bhbi5jb2xIZWFkZXJ7bWFyZ2luLXJpZ2h0OjIwcHh9LmhhbmRzb250YWJsZVtkaXI9cnRs''@;'; put 'put ''XSB0aGVhZCB0aDpoYXMoLmNvbGxhcHNpYmxlSW5kaWNhdG9yKSBkaXYuaHRMZWZ0IHNwYW4uY29sSGVhZGVye21hcmdpbi1sZWZ0OjIwcHh9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZ3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNw''@;'; put 'put ''YW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXXttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDotMTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNj''@;'; put 'put ''ZW5kaW5nXSwuaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6LTEwcHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRpbmddOm9ubHkt''@;'; put 'put ''Y2hpbGQsLmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1hc2NlbmRp''@;'; put 'put ''bmddOm9ubHktY2hpbGQsLmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmddOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uOmhvdmVy''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXt0b3A6NTAlO21hcmdpbi10b3A6LTZweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtyaWdodDotOXB4O2xlZnQ6dW5zZXQ7Y29udGVudDoiIjtoZWlnaHQ6MTBweDt3aWR0aDo1cHg7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb24teDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHNwYW4u''@;'; put 'put ''Y29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YmVmb3Jle3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDowO2xlZnQ6LTlweDtyaWdodDp1bnNldDtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6bGVmdH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuYXNjZW5kaW5n''@;'; put 'put ''OmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4''@;'; put 'put ''NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRk5KUkVGVWVBSHR6amtTZ0NBVUJOSFBnc295OTcrdWxHWFJxSkU1TCt4a3hvWXQyVWRzTGI1YnFGSU56K2FMdXVMbjVySXUyUmtPM2ZacFdFTmltTmdpdzZpQllSVFBNTEpqR0Z4UVoxaHh4Yi94QkkxcUM4azM5Q2RLQUFB''@;'; put 'put ''QUFFbEZUa1N1UW1DQyl9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmRlc2NlbmRpbmc6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBb0NBTUFBQURKN3lycEFB''@;'; put 'put ''QUFLbEJNVkVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLRTg2SUFBQUFEWFJTVGxNQUJCRW1SR3BybEpXNzJlNzd0VGtUS3dBQUFGSkpSRUZVZUFIdHpqa1NnQ0FRUk5GbVFZVVo3bjlkS1V2cnUwVG12UEFuM2JyMFFmZ2RaNXh4Nngr''@;'; put 'put ''clFuMjNHcVRZbnExRkRjbnV6WklPMldtZWRWcUlSVnhnR0tFeWpOZ1lSaktHa1oxaEZJWjNJNzBMeU0wVnRVOEFBQUFBU1VWT1JLNUNZSUk9KX0uaHRHaG9zdFRhYmxlIC5odENvcmUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiKiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDoyMHB4fS5oYW5kc29udGFibGUuaHRHaG9zdFRhYmxlIHRhYmxlIHRoZWFkIHRoe2JvcmRlci1ib3R0b20td2lkdGg6MH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJs''@;'; put 'put ''ZSB0Ym9keSB0ciB0aCwuaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0Ym9keSB0ciB0ZHtib3JkZXItdG9wLXdpZHRoOjB9LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OnVuc2V0O2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOjZweCBzb2xpZCBibGFja31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxs''@;'; put 'put ''OmFmdGVye2xlZnQ6MDtyaWdodDp1bnNldDtib3JkZXItcmlnaHQ6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudHN7ZGlzcGxheTpub25lO3otaW5kZXg6MTA1OTtwb3NpdGlvbjphYnNvbHV0ZX0uaHRDb21tZW50''@;'; put 'put ''c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDpub25lO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6I2ZmZjt3aWR0aDoyMTVweDtoZWlnaHQ6OTBweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweDtvdXRsaW5lOjAhaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYXtib3Jk''@;'; put 'put ''ZXItcmlnaHQ6M3B4IHNvbGlkICNjY2M7Ym9yZGVyLWxlZnQ6bm9uZX0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWE6Zm9jdXN7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHgsaW5zZXQgMCAwIDAgMXB4ICM1MjkyZjc7Ym9y''@;'; put 'put ''ZGVyLWxlZnQ6M3B4IHNvbGlkICM1MjkyZjc7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdLmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JvcmRlci1yaWdodDozcHggc29saWQgIzUyOTJmNztib3JkZXItbGVmdDpub25lfS8qIQogKiBIYW5kc29udGFi''@;'; put 'put ''bGUgQ29udGV4dE1lbnUKICovLmh0Q29udGV4dE1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcCwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tLC5odENvbnRl''@;'; put 'put ''eHRNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odENvbnRleHRNZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcntkaXNwbGF5Om5vbmV9Lmh0Q29udGV4dE1lbnUgLmh0X21h''@;'; put 'put ''c3RlciB0YWJsZS5odENvcmV7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fVtkaXI9cnRsXS5odENvbnRleHRN''@;'; put 'put ''ZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odENvbnRleHRNZW51LmhhbmRzb250YWJsZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lmh0Q29udGV4dE1lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5o''@;'; put 'put ''dENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lmh0Q29udGV4dE1l''@;'; put 'put ''bnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowfVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNo''@;'; put 'put ''aWxke2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tn''@;'; put 'put ''cm91bmQ6I2YzZjNmM30uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVmYXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVk''@;'; put 'put ''e2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5''@;'; put 'put ''Om5vbmV9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6NnB4fVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21h''@;'; put 'put ''cmdpbi1sZWZ0OjZweH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bh''@;'; put 'put ''bi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn10ZXh0YXJlYS5IYW5kc29udGFibGVDb3B5UGFzdGV7cG9zaXRpb246Zml4ZWQhaW1wb3J0YW50O3RvcDowIWltcG9ydGFudDtyaWdodDoxMDAlIWlt''@;'; put 'put ''cG9ydGFudDtvdmVyZmxvdzpoaWRkZW47b3BhY2l0eTowO291dGxpbmU6MCBub25lIWltcG9ydGFudH0vKiEKICogSGFuZHNvbnRhYmxlIERyb3Bkb3duTWVudQogKi8uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBle2JhY2tncm91bmQ6I2VlZTtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4''@;'; put 'put ''IHNvbGlkICNiYmI7Y29sb3I6I2JiYjtmb250LXNpemU6OXB4O2xpbmUtaGVpZ2h0OjlweDtwYWRkaW5nOjJweDttYXJnaW46M3B4IDFweCAwIDVweDtmbG9hdDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBle2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZVtkaXI9cnRs''@;'; put 'put ''XSAuY2hhbmdlVHlwZXttYXJnaW46M3B4IDVweCAwIDFweH0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmJlZm9yZXtjb250ZW50OiJcMjViYyAgIn0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmhvdmVye2JvcmRlcjoxcHggc29saWQgIzc3Nztjb2xvcjojNzc3O2N1cnNvcjpwb2ludGVy''@;'; put 'put ''fS5odERyb3Bkb3duTWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA2MH0uaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX3RvcCwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHREcm9wZG93bk1lbnUgLmh0X2Ns''@;'; put 'put ''b25lX2lubGluZV9zdGFydCwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5odERyb3Bkb3duTWVudSB0YWJsZS5odENvcmV7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZS5odENvcmV7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItbGVmdC13aWR0aDoycHh9Lmh0RHJvcGRvd25NZW51LmhhbmRzb250YWJsZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lmh0RHJvcGRvd25NZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGR7YmFja2dyb3VuZDojZmZmO2JvcmRlci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3Qt''@;'; put 'put ''Y2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDowfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTllOX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6Izk5OX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpIHRhYmxlIHRib2R5IHRyLmh0SGlkZGVue2Rpc3BsYXk6bm9uZX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6MTBw''@;'; put 'put ''eH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVk''@;'; put 'put ''e3JpZ2h0OjRweDtsZWZ0OjB9Lmh0RHJvcGRvd25NZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0vKiEKICogSGFuZHNvbnRhYmxlIEZpbHRlcnMKICovLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7ei1pbmRleDoxMDcwfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcntkaXNwbGF5Om5vbmV9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlLmh0Q29yZXtib3Jk''@;'; put 'put ''ZXI6MXB4IHNvbGlkICNiYmI7Ym9yZGVyLWJvdHRvbS13aWR0aDoycHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtiYWNr''@;'; put 'put ''Z3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJz''@;'; put 'put ''dC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0''@;'; put 'put ''LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJlbnR7''@;'; put 'put ''YmFja2dyb3VuZDojZTllOWU5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQu''@;'; put 'put ''aHREaXNhYmxlZHtjb2xvcjojOTk5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0''@;'; put 'put ''ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHh9Lmh0RmlsdGVy''@;'; put 'put ''c0NvbmRpdGlvbnNNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odE1lbnVGaWx0ZXJpbmd7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2M7aGVpZ2h0OjEzNXB4O292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odF9tYXN0''@;'; put 'put ''ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2N1cnNvcjphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVMYWJlbHtmb250LXNpemU6Ljc1ZW19LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUFjdGlvbkJhcnt0ZXh0LWFsaWdu''@;'; put 'put ''OmNlbnRlcjtwYWRkaW5nLXRvcDoxMHB4O3BhZGRpbmctYm90dG9tOjNweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uLmJvcmRlcntib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgI2NjYyFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlv''@;'; put 'put ''biAuaHRVSUlucHV0e3BhZGRpbmc6MCAwIDVweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoe3Bh''@;'; put 'put ''ZGRpbmc6MH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07''@;'; put 'put ''cGFkZGluZzo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc0FjdGl2ZSAuY2hhbmdlVHlwZXtib3JkZXI6MXB4IHNvbGlkICM1MDky''@;'; put 'put ''NzI7Y29sb3I6IzE4ODA0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNkMmUwZDl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwgYSwuaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxsIGF7Zm9udC1zaXplOi43NWVtfS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3t0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3t0ZXh0LWFsaWduOmxlZnR9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7bWFyZ2luOjAgNXB4IDAgMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OjFlbX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dHttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0e3Bh''@;'; put 'put ''ZGRpbmc6M3B4IDAgN3B4O3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dCBpbnB1dHtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDF9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0SWNvbntwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbiBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzAwMDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjE5cHg7bWluLXdpZHRoOjY0cHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNiOWI5Yjl9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PS3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRV''@;'; put 'put ''SUJ1dHRvbk9LIGlucHV0e2JhY2tncm91bmQtY29sb3I6IzBmOWQ1ODtib3JkZXItY29sb3I6IzE4ODA0ZTtjb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiM5MmRkOGQ7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOiM3Y2I4Nzg7Y29sb3I6IzAwMH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0OmhvdmVye2JvcmRlci1jb2xvcjojMWE2ZjQ2fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3R7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWJvdHRvbTo3cHg7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb257YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7cGFkZGlu''@;'; put 'put ''ZzozcHggMjBweCAzcHggMTBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JvcmRlcjoxcHggc29saWQgI2I5Yjli''@;'; put 'put ''OX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0RHJvcGRvd246YWZ0ZXJ7Y29udGVudDoiXDI1YjIiO2ZvbnQtc2l6ZTo3cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0RHJvcGRvd246YmVmb3Jle2NvbnRlbnQ6IlwyNWJjIjtm''@;'; put 'put ''b250LXNpemU6N3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjhweH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmhhbmRzb250YWJsZSAuaHRDb3Jle2JvcmRlcjpub25lfS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odENvcmUgdGQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCBpbnB1dHtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDE7cGFkZGluZzozcHh9LmhhbmRzb250YWJsZSAuaHRVSVJh''@;'; put 'put ''ZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjVweDtoZWlnaHQ6MTAwJX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6NXB4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbzpsYXN0LWNo''@;'; put 'put ''aWxke21hcmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDouNWV4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXttYXJnaW4tcmlnaHQ6MDttYXJn''@;'; put 'put ''aW4tbGVmdDouNWV4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbyBsYWJlbHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudU9wZXJhdG9yc3twYWRkaW5nLWJvdHRvbTo1cHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW57cG9zaXRp''@;'; put 'put ''b246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXIsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7Y29sb3I6I2JiYjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2ZvbnQtc2l6ZTo1cHQ7dHJhbnNmb3JtOnRyYW5zbGF0''@;'; put 'put ''ZVkoLTUwJSl9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoLmFmdGVySGlkZGVuQ29sdW1uIGRpdi5odExlZnR7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoLmJlZm9y''@;'; put 'put ''ZUhpZGRlbkNvbHVtbiBkaXYuaHRSaWdodCwuaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIHRoLmFmdGVySGlkZGVuQ29sdW1uIGRpdi5odFJpZ2h0e21hcmdpbi1yaWdodDoxMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGguYmVmb3JlSGlkZGVuQ29sdW1uIGRpdi5odExlZnR7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTBweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlcntyaWdodDoxcHg7Y29udGVudDoiXDI1YzAifVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3JpZ2h0OmluaXRpYWw7bGVmdDoxcHg7Y29udGVudDoiXDI1YjYi''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2xlZnQ6MXB4O2NvbnRlbnQ6IlwyNWI2In1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtyaWdodDoxcHg7bGVmdDppbml0aWFsO2NvbnRlbnQ6IlwyNWMwIn0vKiEKICog''@;'; put 'put ''SGFuZHNvbnRhYmxlIEhpZGRlblJvd3MKICovLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVmb3JlLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29sb3I6I2JiYjtmb250LXNpemU6NnB0O2xpbmUtaGVpZ2h0OjZwdDtwb3NpdGlvbjphYnNvbHV0ZTts''@;'; put 'put ''ZWZ0OjJweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdywuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmJlZm9yZXtjb250ZW50OiJcMjViMiI7Ym90dG9tOjJweH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIHRoLmFmdGVySGlkZGVuUm93OmFmdGVye2NvbnRlbnQ6IlwyNWJjIjt0b3A6MnB4fS5oYW5kc29udGFibGUuaHRfX3NlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5iZWZvcmVIaWRkZW5Sb3cuaHRfX2hpZ2hsaWdodDpiZWZvcmUsLmhhbmRzb250YWJsZS5odF9fc2VsZWN0aW9uLS1y''@;'; put 'put ''b3dzIHRib2R5IHRoLmFmdGVySGlkZGVuUm93Lmh0X19oaWdobGlnaHQ6YWZ0ZXJ7Y29sb3I6I2VlZX0uaGFuZHNvbnRhYmxlIHRkLmFmdGVySGlkZGVuUm93LmZpcnN0VmlzaWJsZVJvdywuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93LmZpcnN0VmlzaWJsZVJvd3tib3JkZXItdG9w''@;'; put 'put ''OjFweCBzb2xpZCAjQ0NDfS5odFJvd0hlYWRlcnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciB0aDpudGgtY2hpbGQoMiksLmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0''@;'; put 'put ''X2Nsb25lX2lubGluZV9zdGFydCB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1sZWZ0OjAgbm9uZX0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLmFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5o''@;'; put 'put ''YW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zICosLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRz''@;'; put 'put ''b250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgLm1hbnVhbENvbHVtblJlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUt''@;'; put 'put ''LWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7d2lkdGg6MnB4O3RvcDowO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJn''@;'; put 'put ''aW4taW5saW5lLWVuZDowO3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tncm91bmQ6IzM0MzQzNDQwO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5k''@;'; put 'put ''c29udGFibGUub24tbW92aW5nLS1jb2x1bW5zLnNob3ctdWkgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLWNvbHVtbnMgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlLmh0''@;'; put 'put ''X19tYW51YWxSb3dNb3ZlLmFmdGVyLXNlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzICosLmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92''@;'; put 'put ''ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgLm1hbnVhbFJvd1Jlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0''@;'; put 'put ''X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5le2JhY2tncm91''@;'; put 'put ''bmQ6Izc1NzU3NTtoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tdG9wOi0xcHg7ei1pbmRleDoyMDV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtiYWNrZ3JvdW5kOiMzNDM0MzQ7YmFja2dyb3VuZDojMzQzNDM0NDA7ZGlzcGxheTpub25lO3otaW5kZXg6MjA1''@;'; put 'put ''O3BvaW50ZXItZXZlbnRzOm5vbmV9LmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3Muc2hvdy11aSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cyAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtkaXNwbGF5OmJsb2NrfS5o''@;'; put 'put ''YW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdOm5vdChbY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsXSk6YmVmb3Jle29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFz''@;'; put 'put ''cyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtbXVsdGlwbGVdOmJlZm9yZXtvcGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2Vs''@;'; put 'put ''bC0wXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMV06YmVmb3Jle29wYWNpdHk6LjJ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dz''@;'; put 'put ''cGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTJdOmJlZm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlT''@;'; put 'put ''ZWxlY3RlZE1lcmdlZENlbGwtM106YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC00XTpiZWZvcmV7b3BhY2l0eTouNDF9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTVdOmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxp''@;'; put 'put ''Z2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNl06YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC03XTpiZWZvcmV7b3Bh''@;'; put 'put ''Y2l0eTouNTh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1zb3J0LV17bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6LTE1cHh9LmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPXNvcnQtXXttYXJnaW4tbGVmdDox''@;'; put 'put ''NXB4O21hcmdpbi1yaWdodDotMTVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNwYW5bY2xhc3MqPXNvcnQtXTpvbmx5LWNoaWxke21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi1sZWZ0Oi0yMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2Ns''@;'; put 'put ''YXNzKj1zb3J0LV06b25seS1jaGlsZHttYXJnaW4tbGVmdDoyMHB4O21hcmdpbi1yaWdodDotMjBweH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7dG9wOjUwJTttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7bGVm''@;'; put 'put ''dDp1bnNldDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6dW5zZXQ7Zm9udC1zaXplOjhweDtoZWlnaHQ6OHB4O2xpbmUtaGVpZ2h0OjEuMX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7bGVmdDotMTVweDtyaWdodDp1bnNl''@;'; put 'put ''dDtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzXj1zb3J0LV06YWZ0ZXIsLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzKj0iIHNvcnQtIl06YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDoiKyJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMTphZnRlcntjb250ZW50OiIxIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0yOmFmdGVye2NvbnRlbnQ6IjIifS5oYW5kc29udGFibGUg''@;'; put 'put ''c3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTM6YWZ0ZXJ7Y29udGVudDoiMyJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNDphZnRlcntjb250ZW50OiI0In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcu''@;'; put 'put ''c29ydC01OmFmdGVye2NvbnRlbnQ6IjUifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTY6YWZ0ZXJ7Y29udGVudDoiNiJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNzphZnRlcntjb250ZW50OiI3In0uaHRH''@;'; put 'put ''aG9zdFRhYmxlIHRoIGRpdiBidXR0b24uY2hhbmdlVHlwZStzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9yRGlzYWJsZWQpe3BhZGRpbmctcmlnaHQ6NXB4fS5oYW5kc29udGFibGUgdGhlYWQgdGguaGlkZGVuSGVhZGVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSl7ZGlz''@;'; put 'put ''cGxheTpub25lfXRoZWFkIHRoLmhpZGRlbkhlYWRlclRleHQgLmNvbEhlYWRlcntvcGFjaXR5OjB9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxze3RleHQtYWxpZ246bGVmdDtwYWRkaW5nLWxlZnQ6N3B4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVs''@;'; put 'put ''c3t0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6N3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMXB4O3JpZ2h0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2''@;'; put 'put ''Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTFweDtsZWZ0OnVuc2V0fS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscywuaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVz''@;'; put 'put ''dGluZ0xldmVsc3tyaWdodDoxMHB4O2xlZnQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxzLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaGFuZHNvbnRhYmxlIHRo''@;'; put 'put ''IGRpdi5odF9uZXN0aW5nTGV2ZWxze2xlZnQ6MTBweDtyaWdodDp1bnNldH0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2s7d2lkdGg6MTBweDtoZWlnaHQ6MXB4O2Zsb2F0OmxlZnR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbF9lbXB0eXtmbG9hdDpyaWdodH0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVsOmFmdGVye2NvbnRlbnQ6IlwyNTEwIjtmb250''@;'; put 'put ''LXNpemU6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozcHh9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMnB4O2xlZnQ6dW5zZXQ7Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0Oi0ycHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUg''@;'; put 'put ''dGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmFmdGVye2NvbnRlbnQ6Ii0ifS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbiwuaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRz''@;'; put 'put ''b250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntyaWdodDowO2xlZnQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFy''@;'; put 'put ''dH4uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9ue2xlZnQ6MDtyaWdodDp1bnNldH0vKiEKICogUGlrYWRheQogKiBDb3B5cmlnaHQgwqkgMjAxNCBEYXZpZCBCdXNoZWxsIHwgQlNEICYgTUlUIGxpY2Vuc2UgfCBodHRwczovL2RidXNoZWxsLmNvbS8KICovLnBpa2Etc2lu''@;'; put 'put ''Z2xle3otaW5kZXg6OTk5OTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOiMzMzM7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tLWNvbG9yOiNiYmI7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFs''@;'; put 'put ''LHNhbnMtc2VyaWZ9LnBpa2Etc2luZ2xlOmJlZm9yZSwucGlrYS1zaW5nbGU6YWZ0ZXJ7Y29udGVudDoiICI7ZGlzcGxheTp0YWJsZX0ucGlrYS1zaW5nbGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucGlrYS1zaW5nbGUuaXMtaGlkZGVue2Rpc3BsYXk6bm9uZX0ucGlrYS1zaW5nbGUuaXMtYm91bmR7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7Ym94LXNoYWRvdzowIDVweCAxNXB4IC01cHggIzAwMDAwMDgwfS5waWthLWxlbmRhcntmbG9hdDpsZWZ0O3dpZHRoOjI0MHB4O21hcmdpbjo4cHh9LnBpa2EtdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2EtbGFiZWx7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDo5OTk5O292ZXJmbG93OmhpZGRlbjttYXJnaW46MDtwYWRkaW5nOjVweCAzcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5waWth''@;'; put 'put ''LXRpdGxlIHNlbGVjdHtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTg7bWFyZ2luOjA7bGVmdDowO3RvcDo1cHg7b3BhY2l0eTowfS5waWthLXByZXYsLnBpa2EtbmV4dHtkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO291''@;'; put 'put ''dGxpbmU6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7d2lkdGg6MjBweDtoZWlnaHQ6MzBweDt0ZXh0LWluZGVudDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50''@;'; put 'put ''ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo3NSUgNzUlO29wYWNpdHk6LjV9LnBpa2EtcHJldjpob3ZlciwucGlrYS1uZXh0OmhvdmVye29wYWNpdHk6MX0ucGlrYS1wcmV2LC5pcy1ydGwgLnBpa2EtbmV4dHtmbG9hdDpsZWZ0O2JhY2tncm91bmQtaW1h''@;'; put 'put ''Z2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBZUNBWUFBQUFzRWo1ckFBQUFVa2xFUVZSNDJ1M1ZNUW9BSUJBRFFmOFBnaitPRDloRzJDdE9OSkIyeW1Ra0tlMEhid0FQMHh1Y0RpUVdBUklUSURFQkVuTWdNUThTOCtBcUJJbDZrS2dI''@;'; put 'put ''aVhxUXFBZUplcEJvL3ozOEovVTB1QUhsYUJrQmw5STRHd0FBQUFCSlJVNUVya0pnZ2c9PSl9LnBpa2EtbmV4dCwuaXMtcnRsIC5waWthLXByZXZ7ZmxvYXQ6cmlnaHQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFC''@;'; put 'put ''UUFBQUFlQ0FZQUFBQXNFajVyQUFBQVUwbEVRVlI0MnUzVk93b0FNQWdFMGR3ZkFuTmpVMjZiWWtCQ0ZHd2ZpTDlWVldvTytCSjRHZjNndHNFS0tvRkJOVENvQ0FZVndhQWlHTlFHTVVITWtqR2JnamsybUlPTnVYbzBuQzhYbkNmMUpYZ0FyVklaQVFoNVRLWUFBQUFBU1VWT1JLNUNZSUk9KX0u''@;'; put 'put ''cGlrYS1wcmV2LmlzLWRpc2FibGVkLC5waWthLW5leHQuaXMtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouMn0ucGlrYS1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnBpa2EtdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNp''@;'; put 'put ''bmc6MDtib3JkZXI6MH0ucGlrYS10YWJsZSB0aCwucGlrYS10YWJsZSB0ZHt3aWR0aDoxNC4yODU3MTQyODU3MTQyODYlO3BhZGRpbmc6MH0ucGlrYS10YWJsZSB0aHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjI1cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246''@;'; put 'put ''Y2VudGVyfS5waWthLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7Ym9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTtwYWRkaW5nOjVweDtjb2xvcjojNjY2O2Zv''@;'; put 'put ''bnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZjVmNWY1O2hlaWdodDppbml0aWFsfS5waWthLXdlZWt7Zm9udC1zaXplOjExcHg7Y29sb3I6Izk5OX0uaXMtdG9kYXkgLnBpa2EtYnV0dG9ue2NvbG9yOiMzYWY7Zm9udC13ZWlnaHQ6''@;'; put 'put ''NzAwfS5pcy1zZWxlY3RlZCAucGlrYS1idXR0b24sLmhhcy1ldmVudCAucGlrYS1idXR0b257Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICMxNzhmZTU7Ym9yZGVyLXJhZGl1czozcHh9Lmhhcy1ldmVudCAucGlr''@;'; put 'put ''YS1idXR0b257YmFja2dyb3VuZDojMDA1ZGE5O2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICMwMDc2Yzl9LmlzLWRpc2FibGVkIC5waWthLWJ1dHRvbiwuaXMtaW5yYW5nZSAucGlrYS1idXR0b257YmFja2dyb3VuZDojZDVlOWY3fS5pcy1zdGFydHJhbmdlIC5waWthLWJ1dHRvbntjb2xv''@;'; put 'put ''cjojZmZmO2JhY2tncm91bmQ6IzZjYjMxZDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LmlzLWVuZHJhbmdlIC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQ6IzNhZjtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LmlzLWRpc2FibGVkIC5waWth''@;'; put 'put ''LWJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lO2N1cnNvcjpkZWZhdWx0O2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIC5waWthLWJ1dHRvbntjb2xvcjojOTk5O29wYWNpdHk6LjN9LmlzLXNlbGVjdGlvbi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpu''@;'; put 'put ''b25lO2N1cnNvcjpkZWZhdWx0fS5waWthLWJ1dHRvbjpob3ZlciwucGlrYS1yb3cucGljay13aG9sZS13ZWVrOmhvdmVyIC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQ6I2ZmODAwMDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LnBpa2EtdGFibGUgYWJicnti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7Y3Vyc29yOmhlbHB9Y2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3J9Y2xyLWljb24gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tl''@;'; put 'put ''e3N0cm9rZTpjdXJyZW50Q29sb3J9Y2xyLWljb24uaXMtZ3JlZW4sY2xyLWljb24uaXMtc3VjY2Vzc3tmaWxsOiMyZTg1MDB9Y2xyLWljb24uaXMtZ3JlZW4gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLXN1Y2Nlc3MgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9r''@;'; put 'put ''ZTojMmU4NTAwfWNsci1pY29uLmlzLXJlZCxjbHItaWNvbi5pcy1kYW5nZXIsY2xyLWljb24uaXMtZXJyb3J7ZmlsbDojZTAyMjAwfWNsci1pY29uLmlzLXJlZCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtZGFuZ2VyIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHIt''@;'; put 'put ''aWNvbi5pcy1lcnJvciAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24uaXMtd2FybmluZ3tmaWxsOiNjMjdiMDB9Y2xyLWljb24uaXMtd2FybmluZyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNjMjdiMDB9Y2xyLWljb24uaXMtYmx1ZSxj''@;'; put 'put ''bHItaWNvbi5pcy1pbmZve2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1ibHVlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbmZvIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5pcy13aGl0ZSxjbHItaWNvbi5pcy1pbnZlcnNl''@;'; put 'put ''e2ZpbGw6I2ZmZn1jbHItaWNvbi5pcy13aGl0ZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtaW52ZXJzZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNmZmZ9Y2xyLWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1oaWdobGln''@;'; put 'put ''aHQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uW3NoYXBlJD0iIHVwIl0gc3ZnLGNsci1pY29uW2Rpcj11cF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoMCl9Y2xyLWljb25bc2hhcGUkPSIgZG93biJdIHN2ZyxjbHItaWNvbltkaXI9ZG93bl0gc3Zne3Ry''@;'; put 'put ''YW5zZm9ybTpyb3RhdGUoMTgwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiByaWdodCJdIHN2ZyxjbHItaWNvbltkaXI9cmlnaHRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiBsZWZ0Il0gc3ZnLGNsci1pY29uW2Rpcj1sZWZ0XSBzdmd7dHJhbnNmb3JtOnJv''@;'; put 'put ''dGF0ZSgyNzBkZWcpfWNsci1pY29uW2ZsaXA9aG9yaXpvbnRhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWCgxODBkZWcpfWNsci1pY29uW2ZsaXA9dmVydGljYWxdIHN2Z3t0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX1jbHItaWNvbiAuY2xyLWktYmFkZ2V7''@;'; put 'put ''ZmlsbDojZTAyMjAwfWNsci1pY29uIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24+KntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2s7cG9pbnRlci1ldmVudHM6bm9uZX1jbHItaWNvbj5zdmd7dHJhbnNpdGlv''@;'; put 'put ''bjppbmhlcml0fWNsci1pY29uPnN2ZyB0aXRsZXtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLXNvbGlkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYmFkZ2VkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQ6bm90KC5jbHItaS1vdXRsaW5lKSxjbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYmFkZ2VkOm5vdCguY2xyLWktb3V0bGluZSl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWR7ZGlzcGxheTpibG9j''@;'; put 'put ''a31jbHItaWNvbltjbGFzcyo9aGFzLWFsZXJ0XSAuY2FuLWFsZXJ0IC5jbHItaS1vdXRsaW5lOm5vdCguY2xyLWktb3V0bGluZS0tYWxlcnRlZCl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmUtLWJhZGdlZHtkaXNwbGF5''@;'; put 'put ''OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1iYWRnZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZHtkaXNwbGF5OmJsb2NrfWNsci1pY29u''@;'; put 'put ''LmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYWxlcnRlZDpub3QoLmNsci1pLXNv''@;'; put 'put ''bGlkKSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2VkOm5vdCguY2xyLWktc29saWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQtLWJhZGdlZHtk''@;'; put 'put ''aXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQs''@;'; put 'put ''Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlk''@;'; put 'put ''IC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlk''@;'; put 'put ''IC5jbHItaS1vdXRsaW5lLS1hbGVydGVkLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1zb2xpZDpub3QoLmNsci1pLXNvbGlkLS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5j''@;'; put 'put ''bHItaS1iYWRnZXtmaWxsOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2V7ZmlsbDojZTAyMjAwfWNsci1pY29u''@;'; put 'put ''Lmhhcy1iYWRnZS0tZXJyb3IgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdle2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdlIC50cmFu''@;'; put 'put ''c3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbiAuaXMt''@;'; put 'put ''b2ZmLXNjcmVlbntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDt0b3A6LTFweCFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5n''@;'; put 'put ''OjAhaW1wb3J0YW50O21hcmdpbjowIDAgLTFweCFpbXBvcnRhbnR9OnJvb3R7LS1jZHMtZ2xvYmFsLWJhc2U6MjA7LS1jZHMtZ2xvYmFsLXNjYWxlLXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZToxOy0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5OjE7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWxheW91dC1ncmlkLWNvbHM6MTI7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14czo1NzZweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtOjc2OHB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbWQ6OTkycHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZzoxMjAw''@;'; put 'put ''cHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bDoxNDQwcHg7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzOmNhbGMoOCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbTpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0''@;'; put 'put ''LXNwYWNlLW1kOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bDpjYWxjKDMyICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4bDpjYWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eGw6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTA6Y2FsYygwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTpjYWxjKDEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0yOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2Fs''@;'; put 'put ''ZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNDpjYWxjKDYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS01OmNhbGMoOCAqIHZhcigtLWNkcy1p''@;'; put 'put ''bnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTY6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTc6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTg6Y2FsYygx''@;'; put 'put ''OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTk6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEwOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMTpjYWxjKDM2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTI6Y2FsYyg0OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEzOmNhbGMoNjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2Nh''@;'; put 'put ''bGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xNDpjYWxjKDcyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTU6Y2FsYyg5NiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrOmhzbCgwLCAwJSwg''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZTpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDpoc2woOTMsIDgwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwOmhzbCg5MywgODAlLCA4MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0y''@;'; put 'put ''MDA6aHNsKDkzLCA4MCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMDpoc2woOTMsIDgwJSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwOmhzbCg5MywgODAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDA6aHNsKDkzLCA4MCUsIDQ0JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMDpoc2woOTMsIDgwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwOmhzbCg5MywgODAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDA6aHNsKDkzLCA4MCUsIDIzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkw''@;'; put 'put ''MDpoc2woOTMsIDgwJSwgMTclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMDpoc2woOTMsIDgwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yNTpoc2woMTk4LCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwOmhzbCgxOTgsIDEwMCUsIDk1JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzU6aHNsKDE5OCwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDA6aHNsKDE5OCwgMTAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDA6aHNsKDE5OCwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0z''@;'; put 'put ''MDA6aHNsKDE5OCwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDA6aHNsKDE5OCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDA6aHNsKDE5OCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDA6aHNsKDE5OCwgMTAwJSwgNDMl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDA6aHNsKDE5OCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDA6aHNsKDE5OCwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDA6aHNsKDE5OCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS0xMDAwOmhzbCgxOTgsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDpoc2woMjgyLCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwOmhzbCgyODIsIDgwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMDpoc2woMjgy''@;'; put 'put ''LCA3MyUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDA6aHNsKDI4MiwgNjYlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwOmhzbCgyODIsIDYwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMDpoc2woMjgyLCA2MCUsIDU3JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXZpb2xldC02MDA6aHNsKDI4MiwgNjAlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwOmhzbCgyODMsIDgwJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMDpoc2woMjgyLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9s''@;'; put 'put ''ZXQtOTAwOmhzbCgyODIsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwOmhzbCgyODIsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDpoc2woOSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDpoc2woOSwgMTAwJSwgOTQl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMDpoc2woOSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTMwMDpoc2woOSwgMTAwJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMDpoc2woOSwgMTAwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMDpo''@;'; put 'put ''c2woOSwgMTAwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMDpoc2woOSwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMDpoc2woOSwgMTAwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTkwMDpoc2woOSwgMTAwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDA6aHNsKDksIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwOmhzbCg0MSwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwOmhzbCg0MSwgMTAw''@;'; put 'put ''JSwgOTIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwOmhzbCg0MSwgMTAwJSwgODYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwOmhzbCg0MSwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwOmhzbCg0MSwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3Itb2NocmUtNTAwOmhzbCg0MCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwOmhzbCgzOSwgMTAwJSwgNTAlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwOmhzbCgzOCwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwOmhzbCgz''@;'; put 'put ''NywgMTAwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwOmhzbCgzNiwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMDpoc2woMzUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwOmhzbCgyMzgsIDEwMCUsIDk2JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTEwMDpoc2woMjM4LCA1OCUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMDpoc2woMjM4LCA1MyUsIDc5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMDpoc2woMjM4LCA1MiUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWxhdmVuZGVyLTQwMDpoc2woMjM4LCA1OCUsIDY0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwMDpoc2woMjM4LCA1OSUsIDU4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMDpoc2woMjM4LCA2MCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVy''@;'; put 'put ''LTcwMDpoc2woMjM4LCA2OSUsIDQ1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTgwMDpoc2woMjM4LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci05MDA6aHNsKDIzOCwgMTAwJSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwMDpoc2wo''@;'; put 'put ''MjM4LCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MDpoc2woMjExLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDA6aHNsKDIxMSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMjAwOmhzbCgyMTEsIDEwMCUsIDgxJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTMwMDpoc2woMjExLCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS00MDA6aHNsKDIxMSwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTAwOmhzbCgyMTEsIDEwMCUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6''@;'; put 'put ''dXJlLTYwMDpoc2woMjExLCAxMDAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS03MDA6aHNsKDIxMSwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwOmhzbCgyMTEsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTkwMDpoc2woMjExLCAx''@;'; put 'put ''MDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwOmhzbCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTA6aHNsKDE4NCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDA6aHNsKDE4NCwgMTAwJSwgODYlKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYXF1YS0yMDA6aHNsKDE4NCwgMTAwJSwgNzUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDA6aHNsKDE4NCwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDA6aHNsKDE4NCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDA6aHNs''@;'; put 'put ''KDE4NCwgMTAwJSwgNDMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDA6aHNsKDE4NCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDA6aHNsKDE4NCwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDA6aHNsKDE4NCwgMTAwJSwgMTglKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYXF1YS05MDA6aHNsKDE4NCwgMTAwJSwgMTMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwOmhzbCgxODQsIDEwMCUsIDEwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTA6aHNsKDE2MCwgODMlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTEw''@;'; put 'put ''MDpoc2woMTYwLCA4MiUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMjAwOmhzbCgxNjAsIDc4JSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0zMDA6aHNsKDE2MCwgNjklLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMDpoc2woMTYwLCA2OSUsIDUzJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwOmhzbCgxNjAsIDY0JSwgNDUlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS02MDA6aHNsKDE2MCwgNjklLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTcwMDpoc2woMTYwLCA2NCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAw''@;'; put 'put ''OmhzbCgxNjAsIDEwMCUsIDIxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtOTAwOmhzbCgxNjAsIDcwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0xMDAwOmhzbCgxNjAsIDY5JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwOmhzbCg1MCwgMTAwJSwgOTUlKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDpoc2woNTAsIDEwMCUsIDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0yMDA6aHNsKDUwLCAxMDAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwOmhzbCg1MCwgMTAwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''eWVsbG93LTQwMDpoc2woNDYsIDEwMCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDA6aHNsKDQ0LCAxMDAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwOmhzbCg0MiwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTcwMDpoc2woNDAs''@;'; put 'put ''IDEwMCUsIDM3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy04MDA6aHNsKDQwLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctOTAwOmhzbCg0MCwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDA6aHNsKDQwLCAxMDAlLCAxMyUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1saW1lLTUwOmhzbCg2NiwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDA6aHNsKDY2LCA5NSUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAwOmhzbCg2NiwgODUlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTMwMDpoc2wo''@;'; put 'put ''NjYsIDgwJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS00MDA6aHNsKDY2LCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTAwOmhzbCg2NiwgOTAlLCA0MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTYwMDpoc2woNjYsIDkwJSwgMzYlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS03MDA6aHNsKDY2LCAxMDAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTgwMDpoc2woNjYsIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtOTAwOmhzbCg2NiwgMTAwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwOmhzbCg2Niwg''@;'; put 'put ''MTAwJSwgNyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTA6aHNsKDI1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwOmhzbCgyNSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTIwMDpoc2woMjUsIDk0JSwgNzglKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTMwMDpoc2woMjUsIDEwMCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDA6aHNsKDI1LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTAwOmhzbCgyNSwgMTAwJSwgNDglKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdGFuZ2VyaW5lLTYwMDpoc2woMjUsIDEwMCUsIDQxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS03MDA6aHNsKDI1LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtODAwOmhzbCgyNSwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dGFuZ2VyaW5lLTkwMDpoc2woMjUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0xMDAwOmhzbCgyNSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS01MDpoc2woMzQ1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEw''@;'; put 'put ''MDpoc2woMzQ1LCAxMDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTIwMDpoc2woMzQ1LCAxMDAlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTMwMDpoc2woMzQ1LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTQwMDpoc2woMzQ1LCAx''@;'; put 'put ''MDAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTUwMDpoc2woMzQ1LCA4MSUsIDUwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNjAwOmhzbCgzNDUsIDgzJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS03MDA6aHNsKDM0NSwgOTElLCAzMSUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1tYWdlbnRhLTgwMDpoc2woMzQ1LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTkwMDpoc2woMzQ1LCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEwMDA6aHNsKDM0NSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcGluay01MDpoc2woMzI0LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDpoc2woMzI0LCA5NSUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMjAwOmhzbCgzMjQsIDg0JSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0zMDA6aHNsKDMyNCwgNzgl''@;'; put 'put ''LCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMDpoc2woMzI0LCA3OCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwOmhzbCgzMjQsIDY0JSwgNTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay02MDA6aHNsKDMyNCwgODAlLCAzOSUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1waW5rLTcwMDpoc2woMzI0LCAxMDAlLCAzMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTgwMDpoc2woMzI0LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTkwMDpoc2woMzI0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDA6aHNsKDMyNCwg''@;'; put 'put ''MTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTUwOmhzbCgyODIsIDMlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwOmhzbCgyODIsIDMlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMjAwOmhzbCgyODIsIDMlLCA4NCUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMzAwOmhzbCgyODIsIDMlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNDAwOmhzbCgyODIsIDMlLCA2MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTAwOmhzbCgyODIsIDMlLCA1NCUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci13YXJtLWdyYXktNjAwOmhzbCgyODIsIDMlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNzAwOmhzbCgyODIsIDMlLCAzNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktODAwOmhzbCgyODIsIDMlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdy''@;'; put 'put ''YXktOTAwOmhzbCgyODIsIDMlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwMDpoc2woMjgyLCAzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNTA6aHNsKDIzOCwgMjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDA6aHNsKDIzOCwgMjAl''@;'; put 'put ''LCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0yMDA6aHNsKDIzOCwgMjAlLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0zMDA6aHNsKDIzOCwgMjAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS00MDA6aHNsKDIzOCwgMjAlLCA2MyUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1zbGF0ZS01MDA6aHNsKDIzOCwgMjMlLCA1NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS02MDA6aHNsKDIzOCwgMjQlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS03MDA6aHNsKDIzOCwgMjglLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS04MDA6aHNsKDIz''@;'; put 'put ''OCwgMjglLCAyOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS05MDA6aHNsKDIzOCwgMjglLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDAwOmhzbCgyMzgsIDI4JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTUwOmhzbCgyMTEsIDEwMCUsIDk3JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWljZS0xMDA6aHNsKDIxMSwgNTglLCA5MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMjAwOmhzbCgyMTEsIDUzJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTMwMDpoc2woMjExLCA0OSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS00MDA6aHNsKDIxMSwg''@;'; put 'put ''NDclLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTAwOmhzbCgyMTEsIDQ3JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTYwMDpoc2woMjExLCA1NiUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS03MDA6aHNsKDIxMSwgNjklLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1pY2UtODAwOmhzbCgyMTEsIDY5JSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTkwMDpoc2woMjExLCAxMDAlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMTAwMDpoc2woMjExLCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTA6aHNsKDIxMSwg''@;'; put 'put ''MjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMTAwOmhzbCgyMTEsIDIwJSwgOTAlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTIwMDpoc2woMjExLCAyMCUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0zMDA6aHNsKDIxMSwgMjAlLCA3MiUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNDAwOmhzbCgyMTEsIDIwJSwgNjElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwMDpoc2woMjExLCAyMCUsIDUzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS02MDA6aHNsKDIxMSwgMjAlLCA0NCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb29sLWdyYXktNzAwOmhzbCgyMTEsIDIzJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTgwMDpoc2woMjExLCAzMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS05MDA6aHNsKDIxMSwgNDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb29sLWdyYXktMTAwMDpoc2woMjExLCA2MyUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi01MDpoc2woNDEsIDIzJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTEwMDpoc2woNDEsIDIyJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTIwMDpoc2woNDEsIDI3JSwg''@;'; put 'put ''ODIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTMwMDpoc2woNDEsIDIzJSwgNjglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTQwMDpoc2woNDEsIDIzJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwMDpoc2woNDEsIDIwJSwgNDclKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTYw''@;'; put 'put ''MDpoc2woNDEsIDIwJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTcwMDpoc2woNDEsIDIwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTgwMDpoc2woNDEsIDIzJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTkwMDpoc2woNDEsIDIzJSwgMjElKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdGFuLTEwMDA6aHNsKDQxLCAyMiUsIDE2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNTpoc2woMTk4LCAzMyUsIDk5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDpoc2woMTk4LCAzNiUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0xMDA6aHNsKDE5OCwgMjAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwOmhzbCgxOTgsIDE0JSwgODIlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMDpoc2woMTk4LCAxMCUsIDcxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi00MDA6aHNsKDE5OCwgOSUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDA6aHNsKDE5OCwgMTAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwOmhzbCgxOTgsIDE0JSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTcwMDpoc2woMTk4LCAxOSUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDA6aHNsKDE5OCwgMjMlLCAyMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwOmhzbCgxOTgsIDI4JSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTEwMDA6aHNsKDE5OCwgMzAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMDpoc2woMjAwLCAzMSUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMDpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwOmhzbCgw''@;'; put 'put ''LCAwJSwgOTglKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDA6aHNsKDAsIDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTIwMDpoc2woMCwgMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMzAwOmhzbCgwLCAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3Jh''@;'; put 'put ''eS00MDA6aHNsKDAsIDAlLCA4MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwMDpoc2woMCwgMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNjAwOmhzbCgwLCAwJSwgNTUlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDA6aHNsKDAsIDAlLCA0MCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ncmF5LTgwMDpoc2woMCwgMCUsIDI3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktOTAwOmhzbCgwLCAwJSwgMjAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDAwOmhzbCgwLCAwJSwgMCUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''ODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0OjMwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRy''@;'; put 'put ''YWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0wOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yOmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS01OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02''@;'; put 'put ''OmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS04OmNhbGMoMzIgKiB2YXIo''@;'; put 'put ''LS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS05OmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQi''@;'; put 'put ''LCBzYW5zLXNlcmlmOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2UtZm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLCBDb25zb2xh''@;'; put 'put ''cywgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0Oi4xNzAzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQ6LjUxN2VtOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1s''@;'; put 'put ''aW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''bGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplOmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQ6''@;'; put 'put ''MS40Mjg1NzE0ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZzotLjAwNzE0Mjg2ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemU6Y2FsYyg0MCAq''@;'; put 'put ''IHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodDoxLjFlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3Bs''@;'; put 'put ''YXktZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNj''@;'; put 'put ''YWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtd2VpZ2h0OjUw''@;'; put 'put ''MDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXNpemU6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZzotLjAwODMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAxZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''c3Vic2VjdGlvbi1mb250LXNpemU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0u''@;'; put 'put ''MDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1l''@;'; put 'put ''c3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0OmNhbGMoNDAwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Up''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQ6MS4yMzA3N2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZzotLjAwNzY5MmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0z''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodDoxLjQ1NDU0NWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQ6NDAwOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNt''@;'; put 'put ''YWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZzouMDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGFuZ2VyLWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1pbnN0YW50OjBzOy0tY2RzLWdsb2JhbC1hbmlt''@;'; put 'put ''YXRpb24tZHVyYXRpb24tcXVpY2tlc3Q6LjFzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcXVpY2tlcjouMTVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcXVpY2s6LjJzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2Vjb25kYXJ5Oi4zczstLWNk''@;'; put 'put ''cy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXByaW1hcnk6LjRzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvdzouNXM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1zbG93ZXI6LjdzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VzdDou''@;'; put 'put ''OHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctcHJpbWFyeTpjdWJpYy1iZXppZXIoMCwuOTksMCwuOTkpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLXNlY29uZGFyeTpjdWJpYy1iZXppZXIoMCwgMS41LCAuNSwgMSk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmct''@;'; put 'put ''bG9vcDpjdWJpYy1iZXppZXIoLjE3LCAuNCwgLjgsIC43OSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwOmNhbGMoNCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMDpjYWxjKDEyICogKDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwOjUwJTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMDpjYWxjKDEgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXdpZHRoLTIwMDpjYWxjKDIgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMDpjYWxjKDMgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXdpZHRoLTQwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwOjAgY2FsYygoMSAvIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0pIGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjUpOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwOjAgY2FsYygoMSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwgMjApKSAqIDFyZW0pIGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjMpOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAgY2FsYygoMSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0p''@;'; put 'put ''IGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjIpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTA6aHNsYSgwLCAwJSwgMCUsIDApOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTEwMDpoc2xhKDAsIDAlLCAw''@;'; put 'put ''JSwgLjIpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTIwMDpoc2xhKDAsIDAlLCAwJSwgLjQpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMDpoc2xhKDAsIDAlLCAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAy''@;'; put 'put ''cHg7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtd2Via2l0OjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQ6MXB4Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi10''@;'; put 'put ''b3VjaC10YXJnZXQ6Y2FsYygzNiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWJsdWUtNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxl''@;'; put 'put ''Y3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLXN1Y2Nlc3MtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''d2FybmluZy1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1k''@;'; put 'put ''YW5nZXItY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItc2Vjb25k''@;'; put 'put ''YXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFs''@;'; put 'put ''LWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LW5ldXRyYWwtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTI1KTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJh''@;'; put 'put ''Y2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1kYXJrOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZl''@;'; put 'put ''cnNlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1j''@;'; put 'put ''b250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZDpoc2xhKDAsIDAlLCAxMDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2Fybmlu''@;'; put 'put ''Zy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1hbHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Ymx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''ZGFyay1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15''@;'; put 'put ''ZWxsb3c6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2No''@;'; put 'put ''cmUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTUwKTstLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtdGludDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotYm9yZGVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0yLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTMtYXF1YTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTYtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1saW1lLTkwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1nZW5lcmFsLTExLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzLXZpb2xldDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE1LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNj''@;'; put 'put ''ZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3IteWVsbG93LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXZlcml0eS1mcmVlLXNwYWNlLWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1ibHVlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0yMDA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtYmx1ZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS05MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtdmlvbGV0LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12''@;'; put 'put ''aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9j''@;'; put 'put ''aHJlLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0zMDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwt''@;'; put 'put ''b2NocmUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS00''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1h''@;'; put 'put ''cXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNl''@;'; put 'put ''cXVlbnRpYWwtYXF1YS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWdyZWVuLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4t''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC1yZWQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1yZWQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1z''@;'; put 'put ''ZXF1ZW50aWFsLXJlZC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTgwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctdmlvbGV0LWFxdWEtdi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy12aW9sZXQtYXF1YS12LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xl''@;'; put 'put ''dC1hcXVhLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1h''@;'; put 'put ''LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtOTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1''@;'; put 'put ''ZS1qYWRlLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTQwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWphZGUtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy1ibHVlLWdyZWVuLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4t''@;'; put 'put ''bmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNDAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVl''@;'; put 'put ''bi04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdy''@;'; put 'put ''ZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''cmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodDozMDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMDpj''@;'; put 'put ''YWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNk''@;'; put 'put ''cy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUt''@;'; put 'put ''MykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNp''@;'; put 'put ''emUtOTpjYWxjKDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJD''@;'; put 'put ''bGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29uc29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0Oi4xNDc1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQ6MS40Mjg1NzE0ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nOi0uMDA3MTQyODZlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemU6Y2FsYyg0MCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXNpemU6Y2FsYygzMiAqIHZhcigt''@;'; put 'put ''LWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1mb250''@;'; put 'put ''LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktaGVhZGxpbmUtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXNpemU6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodDoxLjMzMzMzM2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemU6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAx''@;'; put 'put ''ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlv''@;'; put 'put ''bi1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1z''@;'; put 'put ''aXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0OmNhbGMoNDAwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZzotLjAwNzY5MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodDoxLjQ1NDU0NWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZzou''@;'; put 'put ''MDE4MTgyZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''bWFsbGNhcHRpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5m''@;'; put 'put ''by1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0xOmNhbGMoKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIHZhcigtLWNkcy1nbG9iYWwtc2NhbGUtbGF5b3V0LXNwYWNlKSk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMjpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNjYWxlLXNwYWNlKSk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMzpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLXR5cG9ncmFwaHkpKX1odG1se2ZvbnQtc2l6ZTpjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpLzE2KSoxMDAl''@;'; put 'put ''KTtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1bY2RzLWJhc2UtZm9udD0iMTYiXXstLWNkcy1nbG9iYWwtYmFzZToxNn1bY2RzLXRoZW1lXXtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYXBwLWJhY2tncm91bmQpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApfVtjZHMtY29udHJvbF0gOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtY29udHJvbF0g''@;'; put 'put ''OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtY29udHJvbF1bX2Rpc2FibGVkXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCl9aHRtbFtjZHMt''@;'; put 'put ''Zm9jdXMtdHJhcF17b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDt3aWR0aDoxMDB2dztoZWlnaHQ6MTAwdmh9W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHkpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0''@;'; put 'put ''XVtjZHMtbGF5b3V0fj1ncmlkXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWdyaWRdOmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPWhlYWRpbmddLFtjZHMtdGV4dCo9aGVhZGxpbmVdLFtjZHMtdGV4dCo9c2VjdGlvbl0sW2Nkcy10ZXh0Kj1z''@;'; put 'put ''dWJzZWN0aW9uXSxbY2RzLXRleHQqPXRpdGxlXXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9Y2Fw''@;'; put 'put ''dGlvbl0sW2Nkcy10ZXh0Kj1tZXNzYWdlXSxbY2RzLXRleHQqPXNlY29uZGFyeV0sW2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25de2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWRpc3BsYXldOmJlZm9yZXtjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1o''@;'; put 'put ''ZWFkaW5nXSxbY2RzLXRleHQqPWhlYWRsaW5lXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWhlYWRpbmddOmJlZm9yZSxbY2RzLXRleHQqPWhlYWRsaW5lXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KSAt''@;'; put 'put ''IDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oZWFkaW5nXTphZnRlcixbY2RzLXRleHQqPWhlYWRsaW5lXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdo''@;'; put 'put ''dCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXRpdGxlXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0p''@;'; put 'put ''fVtjZHMtdGV4dCo9dGl0bGVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgo''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTphZnRlcntjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z''@;'; put 'put ''dWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7''@;'; put 'put ''aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt''@;'; put 'put ''aGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Ym9keV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWln''@;'; put 'put ''aHQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1saW5lLWhlaWdodCl9W2Nkcy10ZXh0Kj1ib2R5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWln''@;'; put 'put ''aHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1ib2R5W2Nkcy10ZXh0Kj1ib2R5XTphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9bWVzc2FnZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1jYXB0aW9uXTpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVp''@;'; put 'put ''Z2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1jYXB0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAu''@;'; put 'put ''MDQ0ZW0pfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWln''@;'; put 'put ''aHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudDtsaW5lLWhlaWdodDppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6''@;'; put 'put ''aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCl9W2Nkcy10''@;'; put 'put ''ZXh0fj1saW5rXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3ZlcikhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKSxbY2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12aXNpdGVkXXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pOmhvdmVyLFtjZHMtdGV4dH49bGlua11bY2RzLXRleHR+PXZpc2l0ZWRdOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpIWltcG9ydGFudH1AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXtbY2RzLXRleHQ9bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLW91dGxpbmUtd2Via2l0KX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKTtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcikgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBpbnNldH1bY2RzLXRleHR+PWV4dHJhYm9sZF17Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49Ym9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PXNlbWlib2xkXXtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PW1lZGl1bV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''dGV4dH49cmVndWxhcl17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLXRleHR+PWNhcGl0YWxpemVde3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUhaW1wb3J0YW50fVtjZHMtdGV4dH49dXBwZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49bG93ZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTpsb3dl''@;'; put 'put ''cmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49dHJ1bmNhdGVde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcyFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXTphZnRlcixbY2RzLXRleHR+PXRy''@;'; put 'put ''dW5jYXRlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PW1vbm9zcGFjZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseSl9W2Nkcy10ZXh0fj1saGVde3BhZGRpbmc6LjA1cHggMH1b''@;'; put 'put ''Y2RzLXRleHR+PWxoZV06YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLWxheW91dH49ZGlzYWJsZS1saGVdOmJlZm9yZSxbY2RzLXRleHR+PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLXRleHR+PWRpc2FibGUtbGhlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9aDBdLFtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4''@;'; put 'put ''dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNl''@;'; put 'put ''cmlmKTtmb250LXNpemU6MnJlbTtmb250LXdlaWdodDoyMDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oMF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjZyZW07bGlu''@;'; put 'put ''ZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTU2ZW19W2Nkcy10ZXh0Kj1oMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgxXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxb''@;'; put 'put ''Y2RzLXRleHQqPWg2XXtmb250LXNpemU6MS40cmVtO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgo''@;'; put 'put ''KDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTpiZWZvcmV7Y29u''@;'; put 'put ''dGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTphZnRl''@;'; put 'put ''cntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi45cmVtO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6LS4wMTExMTFlbX1bY2RzLXRleHQqPWg0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMzMz''@;'; put 'put ''MzMzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMzMzMzMzZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQt''@;'; put 'put ''c2l6ZTouOHJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg1XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWg2XXtmb250LXNpemU6LjdyZW07''@;'; put 'put ''Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOi0uMDMxMjVlbX1bY2RzLXRleHQqPWg2XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVp''@;'; put 'put ''Z2h0KSArIC4yNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDZdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC4yNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDBdLFtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZToxLjJyZW07Zm9udC13ZWlnaHQ6''@;'; put 'put ''NDAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApO2xpbmUtaGVpZ2h0OjEuMTY2NjdlbTtsZXR0ZXItc3BhY2luZzotLjAwODMzM2VtfVtjZHMtdGV4dCo9cDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXAwXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6''@;'; put 'put ''MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxj''@;'; put 'put ''KCgxLjE2NjY3ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZTouN3JlbTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDI5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTQyODZlbX1bY2Rz''@;'; put 'put ''LXRleHQqPXAxXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdl''@;'; put 'put ''bSl9W2Nkcy10ZXh0Kj1wMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQyOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAyXSxbY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250''@;'; put 'put ''LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjg0NjE1ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbX1bY2RzLXRleHQqPXAyXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wM106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDNdOmFmdGVye2NvbnRlbnQ6IiI7ZGlz''@;'; put 'put ''cGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42cmVtO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoyZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzNl''@;'; put 'put ''bX1bY2RzLXRleHQqPXA0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIC41ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''NF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgx''@;'; put 'put ''ZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10''@;'; put 'put ''ZXh0Kj1wNl0sW2Nkcy10ZXh0Kj1wN10sW2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXplOi41NXJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4wOTA5MDllbTtsZXR0ZXItc3BhY2luZzouMDE4MTgyZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpICsg''@;'; put 'put ''LjAzN2VtKX1bY2RzLXRleHQqPXA2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA3XSxbY2RzLXRleHQqPXA4XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''N106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2Rz''@;'; put 'put ''LXRleHQqPXA3XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRl''@;'; put 'put ''ci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA4XXtmb250LXNpemU6LjVyZW07bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wOF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdl''@;'; put 'put ''bSl9W2Nkcy10ZXh0Kj1wOF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0LDpyb290ey0tXDNiNCAxOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eHMpOy0tXDNiNCAyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4cyk7LS1cM2I0IDM6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHMpOy0tXDNiNCA0OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXNtKTstLVwzYjQgNTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCk7LS1c''@;'; put 'put ''M2I0IDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcpOy0tXDNiNCA3OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsKTstLVwzYjQgODp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eGwpOy0tXDNiNCA5OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNl''@;'; put 'put ''LXh4eGwpfVtjZHMtbGF5b3V0Kj0iYWxpZ246ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXtm''@;'; put 'put ''bGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6ZmlsbCJdPip7ZmxleC1ncm93OjEh''@;'; put 'put ''aW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhzOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhzOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImFsaWduQHNtOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0id3JhcEBzbTpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7Zmxl''@;'; put 'put ''eC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbWQ6bm9uZSJde2ZsZXgtd3JhcDpub3dy''@;'; put 'put ''YXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''MTIwMHB4KXtbY2RzLWxheW91dCo9ImFsaWduQGxnOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEBsZzpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpz''@;'; put 'put ''dHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6ZmlsbCJd''@;'; put 'put ''Pip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhsOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkB4bDpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1z''@;'; put 'put ''dGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7''@;'; put 'put ''YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRv''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpi''@;'; put 'put ''b3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0''@;'; put 'put ''Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3Rh''@;'; put 'put ''cnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBzbTpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2gi''@;'; put 'put ''XXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBz''@;'; put 'put ''bTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50''@;'; put 'put ''ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBzbTp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpy''@;'; put 'put ''aWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpyZXZlcnNl''@;'; put 'put ''Il17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1n''@;'; put 'put ''cm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpz''@;'; put 'put ''dHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDph''@;'; put 'put ''dXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVu''@;'; put 'put ''ZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRh''@;'; put 'put ''bnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17YWxp''@;'; put 'put ''Z24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''Omhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0''@;'; put 'put ''Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3Jv''@;'; put 'put ''dzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1o''@;'; put 'put ''b3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhsOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2gi''@;'; put 'put ''XXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhs''@;'; put 'put ''OnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFy''@;'; put 'put ''Z2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJd''@;'; put 'put ''e2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJd''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNh''@;'; put 'put ''bC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGln''@;'; put 'put ''bi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd''@;'; put 'put ''e21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXth''@;'; put 'put ''bGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhz''@;'; put 'put ''OnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhz''@;'; put 'put ''OmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4''@;'; put 'put ''LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1p''@;'; put 'put ''dGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2gi''@;'; put 'put ''XT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206''@;'; put 'put ''YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQG1kOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6''@;'; put 'put ''dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBt''@;'; put 'put ''ZDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17''@;'; put 'put ''bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1''@;'; put 'put ''dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBsZzpyZXZlcnNlIl17Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRp''@;'; put 'put ''Y2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRj''@;'; put 'put ''aCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNl''@;'; put 'put ''bnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSxbY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNo''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJdPip7ZmxleC1ncm93''@;'; put 'put ''OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeGw6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeGw6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fVtjZHMtbGF5b3V0fj1ncmlkXXtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6c3RhcnQ7YWxpZ24tY29u''@;'; put 'put ''dGVudDpzdGFydDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KHZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29scyksMWZyKTt3aWR0aDoxMDAlfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj1yb3dzXXtncmlkLXRlbXBsYXRlLXJvd3M6cmVwZWF0KDEyLGF1dG8pfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ncmlkXT5bY2RzLWxheW91dCo9cm93XXthbGlnbi1zZWxmOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJjb2xzOmF1dG8iXXtncmlkLWF1dG8tZmxvdzpjb2x1bW47Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmluaXRpYWx9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xzQCJdPip7Z3JpZC1jb2x1bW46c3BhbiB2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpfVtjZHMtbGF5b3V0Kj0iY29sQCJde2dyaWQtY29sdW1uOnNwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjMiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFu''@;'; put 'put ''IDR9W2Nkcy1sYXlvdXQqPSJjb2xzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzOjgiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFu''@;'; put 'put ''IDl9W2Nkcy1sYXlvdXQqPSJjb2xzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2w6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3c6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2w6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3c6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4g''@;'; put 'put ''OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo5Il17Z3JpZC1yb3c6c3BhbiA5L3Nw''@;'; put 'put ''YW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMSJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''dzoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2w6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''OnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3c6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''OnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6''@;'; put 'put ''ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0''@;'; put 'put ''LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5k''@;'; put 'put ''LTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0''@;'; put 'put ''LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTgi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTkiXXtn''@;'; put 'put ''cmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTkiXXtn''@;'; put 'put ''cmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0x''@;'; put 'put ''MCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVu''@;'; put 'put ''ZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpz''@;'; put 'put ''dGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFy''@;'; put 'put ''dH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtq''@;'; put 'put ''dXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7''@;'; put 'put ''anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFu''@;'; put 'put ''IDN9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xzQHhzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHhzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHhz''@;'; put 'put ''OjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjkiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjExIl0+Kntn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEyIl0+''@;'; put 'put ''KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbHNAc206MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAc206MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAc206MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAc206MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAc206MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAc206MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAc206NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAc206NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAc206''@;'; put 'put ''NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAc206NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAc206NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAc206NiJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAc206NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAc206NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAc206OCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAc206OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAc206OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAc206OSJdPip7Z3JpZC1yb3c6c3BhbiA5''@;'; put 'put ''L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAc206MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAc206MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAc206MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4g''@;'; put 'put ''MTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAc206MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAc206MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAc206MTIiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BtZDoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoy''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BtZDozIl0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo1Il0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo2Il0+KntncmlkLXJvdzpzcGFuIDYv''@;'; put 'put ''c3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BtZDoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93c0BtZDoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVk''@;'; put 'put ''aWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BsZzoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoyIl0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BsZzozIl0+KntncmlkLXJvdzpzcGFuIDMv''@;'; put 'put ''c3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BsZzo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0BsZzo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzox''@;'; put 'put ''MCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0Bs''@;'; put 'put ''ZzoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDox''@;'; put 'put ''NDQwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0B4bDoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAy''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0B4bDoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0B4bDozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0B4bDo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0B4bDo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo3''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo4Il0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMSJdPip7Z3JpZC1y''@;'; put 'put ''b3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeHM6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czozIl17Z3JpZC1yb3c6c3BhbiAz''@;'; put 'put ''L3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo1Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3Bh''@;'; put 'put ''biA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEwIl17Z3Jp''@;'; put 'put ''ZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQHhzOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbEBzbTox''@;'; put 'put ''Il17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbToyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjUiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjYiXXtn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHNtOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QHNtOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTAiXXtncmlkLXJvdzpzcGFuIDEw''@;'; put 'put ''L3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206''@;'; put 'put ''MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sQG1kOjEiXXtncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQG1kOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NiJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ni9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OCJde2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAbWQ6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMiJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQGxnOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3Bh''@;'; put 'put ''biAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjIiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxn''@;'; put 'put ''OjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QGxnOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OCJde2dyaWQtY29sdW1uOnNw''@;'; put 'put ''YW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6OSJd''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAbGc6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIv''@;'; put 'put ''c3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhsOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4bDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjIiXXtncmlkLXJvdzpzcGFuIDIvc3Bh''@;'; put 'put ''biAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjQiXXtncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhsOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDgh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6OSJde2dyaWQtcm93OnNw''@;'; put 'put ''YW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''eGw6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEB4czpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMyJde2dyaWQtY29sdW1uLWVuZDoz''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNCJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNCJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3Rh''@;'; put 'put ''cnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEB4czplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeHM6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4czplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTkiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFy''@;'; put 'put ''dC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEzIl17''@;'; put 'put ''Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3''@;'; put 'put ''NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEiXXtncmlkLXJvdy1z''@;'; put 'put ''dGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTIiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTMi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dA''@;'; put 'put ''c206ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHNtOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAc206ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6''@;'; put 'put ''NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC03Il17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC04Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVu''@;'; put 'put ''ZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d0BzbTpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAc206ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTEiXXtncmlkLXJv''@;'; put 'put ''dy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQt''@;'; put 'put ''MTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAc206c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEBtZDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QG1kOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNCJde2dyaWQtcm93LWVu''@;'; put 'put ''ZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNSJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQt''@;'; put 'put ''NiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6''@;'; put 'put ''c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd0BtZDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMCJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBtZDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEzIl17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0yIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''ZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0zIl17Z3JpZC1j''@;'; put 'put ''b2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0z''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0Bs''@;'; put 'put ''ZzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQGxnOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEBsZzpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOCJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOCJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3Rh''@;'; put 'put ''cnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQGxnOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbEBsZzpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6''@;'; put 'put ''MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEyIl17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0''@;'; put 'put ''YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAbGc6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0''@;'; put 'put ''YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAeGw6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QHhsOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC01Il17Z3JpZC1yb3ct''@;'; put 'put ''c3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC02Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC03''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd0B4bDpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEwIl17Z3JpZC1yb3ct''@;'; put 'put ''c3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEx''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHhsOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6''@;'; put 'put ''MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91''@;'; put 'put ''dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpi''@;'; put 'put ''b3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRl''@;'; put 'put ''bXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwt''@;'; put 'put ''Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0''@;'; put 'put ''b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6''@;'; put 'put ''c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9t''@;'; put 'put ''Il17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0''@;'; put 'put ''cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRl''@;'; put 'put ''ciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19W2Nkcy1sYXlvdXR+PSJkaXNwbGF5Om5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6Y29udGVudHMiXXtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAc206bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNt''@;'; put 'put ''OmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''Ojk5MnB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDpibG9jayJde2Rpc3BsYXk6YmxvY2sh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''ZGlzcGxheUBsZzpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEg''@;'; put 'put ''KG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAeGw6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmJsb2NrIl17ZGlz''@;'; put 'put ''cGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1y''@;'; put 'put ''ZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0''@;'; put 'put ''b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Z2FwOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXA6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXA6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im06bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4cyJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4cyJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InA6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im06eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC14Onh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6''@;'; put 'put ''bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eGwi''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTptZCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0teTpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eGwiXXttYXJnaW4tbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14Onh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4cyJd''@;'; put 'put ''e3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLWw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6c20iXXtwYWRkaW5n''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtbDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtYjptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OmxnIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6bGciXXtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLWI6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWI6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXI6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6''@;'; put 'put ''eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tbDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4cyJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1sOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1iOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Om1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0''@;'; put 'put ''IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bWQiXXttYXJnaW4t''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6''@;'; put 'put ''bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1yOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4bCJde21hcmdpbi1ib3R0''@;'; put 'put ''b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6''@;'; put 'put ''eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRh''@;'; put 'put ''bnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHhzOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJnYXBAeHM6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEB4czpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImdhcEB4czp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAeHM6bm9uZSJde3BhZGRp''@;'; put 'put ''bmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6c20iXXttYXJnaW46dmFyKC0tXDNi''@;'; put 'put ''NCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOmxnIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eGwiXXttYXJnaW46dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHh4bCJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAx''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC14QHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnNtIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteUB4czptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4bCJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS15QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXlAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAeHM6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1iQHhzOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4cyJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4cyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1sQHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6''@;'; put 'put ''bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtbEB4czptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOmxnIl17cGFkZGluZy1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC10QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6''@;'; put 'put ''eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1yQHhzOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10QHhzOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHhz''@;'; put 'put ''Il17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnhzIl17bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''ckB4czpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bWQiXXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHhzOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4bCJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1yQHhzOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4bCJde21hcmdpbi1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWJAeHM6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJnYXBAc206bm9u''@;'; put 'put ''ZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBzbTp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNt''@;'; put 'put ''OnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBzbTpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAc206eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBzbTpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bm9uZSJde21hcmdpbjowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4cyJde21hcmdpbjp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206bWQiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTpsZyJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHhsIl17cGFkZGluZzp2''@;'; put 'put ''YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHh4bCJde21h''@;'; put 'put ''cmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRp''@;'; put 'put ''bmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eHhzIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnNtIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''eUBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEBzbTp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eHMiXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS15QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpzbSJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teEBzbTptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTpsZyJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teUBzbTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4eGwiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtdEBzbTpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sQHNtOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC10QHNtOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHMi''@;'; put 'put ''XXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206c20iXXtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQHNtOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOmxn''@;'; put 'put ''Il17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtckBzbTp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHNtOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHhsIl17cGFkZGluZy10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1sQHNtOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tYkBzbTpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXJAc206eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eHhzIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWJAc206eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAz''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnhzIl17''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQHNtOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206''@;'; put 'put ''bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLWJAc206bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eGwiXXttYXJnaW4tdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''bEBzbTp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHh4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tbEBzbTp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4cyJde2dhcDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBtZDptZCJde2dh''@;'; put 'put ''cDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9Imdh''@;'; put 'put ''cEBtZDp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQG1kOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhzIl17bWFyZ2luOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpzbSJde3BhZGRpbmc6dmFy''@;'; put 'put ''KC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOm1kIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4bCJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eGwiXXttYXJn''@;'; put 'put ''aW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm5v''@;'; put 'put ''bmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHh4cyJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm1kIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEBtZDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4bCJde3BhZGRp''@;'; put 'put ''bmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAbWQ6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1k''@;'; put 'put ''OnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1k''@;'; put 'put ''OmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBt''@;'; put 'put ''ZDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtckBtZDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4cyJde3BhZGRp''@;'; put 'put ''bmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXJAbWQ6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHMiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAbWQ6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnNt''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQG1kOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6bGciXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtbEBtZDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4''@;'; put 'put ''bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eHhsIl17cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdEBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHMi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4cyJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''dEBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOm1kIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS10QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eGwiXXttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXRAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBt''@;'; put 'put ''ZDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkp''@;'; put 'put ''IWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImdhcEBsZzpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iZ2FwQGxnOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBsZzptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOmxnIl17Z2FwOnZhcigt''@;'; put 'put ''LVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQGxnOm5v''@;'; put 'put ''bmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHh4cyJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4cyJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnNtIl17bWFyZ2lu''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpsZyJde3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhsIl17bWFy''@;'; put 'put ''Z2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteUBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFk''@;'; put 'put ''ZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpzbSJde3Bh''@;'; put 'put ''ZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhA''@;'; put 'put ''bGc6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteUBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnNtIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS15QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnhsIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eHhsIl17bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpub25lIl17cGFkZGluZy1yaWdodDowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QGxnOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHMi''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtbEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnNtIl17cGFkZGluZy1yaWdo''@;'; put 'put ''dDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC10QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpsZyJd''@;'; put 'put ''e3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4bCJde3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQGxnOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''YkBsZzp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tckBsZzpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tdEBsZzp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4eHMiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yQGxnOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4cyJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAbGc6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm1k''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tckBsZzpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bGciXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJA''@;'; put 'put ''bGc6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eGwiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQGxnOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcEB4bDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAeGw6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEB4bDptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eGwiXXtnYXA6dmFyKC0tXDNiNCA3''@;'; put 'put ''KX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHhsOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpub25lIl17''@;'; put 'put ''bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHhzIl17cGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnhzIl17bWFy''@;'; put 'put ''Z2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDptZCJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOmxnIl17''@;'; put 'put ''bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eGwi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4''@;'; put 'put ''bDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4eHMiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LXhAeGw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bWQiXXtwYWRkaW5nLXRvcDp2YXIo''@;'; put 'put ''LS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4bCJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpub25lIl17bWFyZ2luLXRvcDow''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4cyJd''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnNt''@;'; put 'put ''Il17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOmxn''@;'; put 'put ''Il17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6''@;'; put 'put ''eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpub25lIl17cGFkZGluZy1ib3R0b206''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4cyJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHMiXXtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtckB4bDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpzbSJd''@;'; put 'put ''e3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bWQiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAeGw6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnhs''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tYkB4bDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnhzIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWxAeGw6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bWQiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tbEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQHhsOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4''@;'; put 'put ''bDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmZpbGwiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6Y2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49ImNvbnRhaW5lcjp4cyJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtbGF5b3V0LXdpZHRoLXhzKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpzbSJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjptZCJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtbGF5b3V0LXdpZHRoLW1kKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpsZyJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLWxnKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjp4bCJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhsKX0qLDphZnRlciw6YmVmb3JlLDpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveH1bY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29s''@;'; put 'put ''b3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ibHVlLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0z''@;'; put 'put ''MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktd2FybmluZy1ob3Zl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxh''@;'; put 'put ''dmVuZGVyLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWlu''@;'; put 'put ''dmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1vcGFjaXR5LTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2Vs''@;'; put 'put ''ZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxl''@;'; put 'put ''Y3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXI6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXI6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtc2Vjb25kYXJ5LWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52''@;'; put 'put ''ZXJzZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy10aW50OnRy''@;'; put 'put ''YW5zcGFyZW50Oy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0''@;'; put 'put ''YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10''@;'; put 'put ''aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Z3JheS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJs''@;'; put 'put ''dWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''YXp1cmUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MCk7LS1jZHMtYWxpYXMtdXRp''@;'; put 'put ''bGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3c6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93''@;'; put 'put ''LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS1yZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXRpbnQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC00''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotYm9yZGVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTUtYmx1ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC03LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTgtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTAtbGltZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWxpbWUtNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTExLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTUtYXF1YTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWFxdWEtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNi1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LXNldmVyaXR5LXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmct''@;'; put 'put ''bGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktaW1tZWRpYXRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWNyaXRpY2FsOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtZmlsbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZp''@;'; put 'put ''b2xldC01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''b2NocmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1''@;'; put 'put ''YS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3Jl''@;'; put 'put ''ZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1n''@;'; put 'put ''cmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApfTpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwfWh0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsaW5lLWhlaWdodDox''@;'; put 'put ''LjE1Oy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5''@;'; put 'put ''OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRlbXBsYXRlLFtoaWRkZW5de2Rpc3BsYXk6bm9uZX1h''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDpvYmplY3RzfWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQt''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe2ZvbnQtc2l6ZToyZW07bWFy''@;'; put 'put ''Z2luOi42N2VtIDB9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVt''@;'; put 'put ''fXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjFlbX1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2JveC1zaXppbmc6Y29udGVu''@;'; put 'put ''dC1ib3g7aGVpZ2h0OjA7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDttYXJnaW46MH10ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjE1fW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH1idXR0b24saW5wdXR7b3ZlcmZsb3c6''@;'; put 'put ''dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1idXR0b25dOjotbW96''@;'; put 'put ''LWZvY3VzLWlubmVyLFt0eXBlPXJlc2V0XTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1zdWJtaXRdOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAu''@;'; put 'put ''NjI1ZW0gLjc1ZW19bGVnZW5ke2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6dGFibGU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vcm1hbH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfVt0eXBlPWNoZWNrYm94XSxbdHlwZT1yYWRpb117''@;'; put 'put ''Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZp''@;'; put 'put ''ZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdl''@;'; put 'put ''YmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OnJvb3R7LS1jbHItY29sb3ItbmV1dHJhbC0wOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCA5OCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwOmhzbCgxOTgsIDAlLCA5NSUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCA5MSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwOmhzbCgxOTgsIDAlLCA4NyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOmhzbCgxOTgsIDAlLCA4MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCA3''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCA1NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCA0MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtODAwOmhzbCgxOTgsIDAlLCAyNyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAyMCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpoc2wo''@;'; put 'put ''MTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRy''@;'; put 'put ''YWwtNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1j''@;'; put 'put ''bHItY29sb3Itb24tbmV1dHJhbC05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItYWN0aW9uLTUwOmhzbCgxOTgsIDgzJSwgOTQlKTstLWNsci1jb2xvci1hY3Rpb24tMTAwOmhzbCgxOTgsIDgx''@;'; put 'put ''JSwgODglKTstLWNsci1jb2xvci1hY3Rpb24tMjAwOmhzbCgxOTgsIDc4JSwgNzglKTstLWNsci1jb2xvci1hY3Rpb24tMzAwOmhzbCgxOTgsIDY5JSwgNjklKTstLWNsci1jb2xvci1hY3Rpb24tNDAwOmhzbCgxOTgsIDY2JSwgNTclKTstLWNsci1jb2xvci1hY3Rpb24tNTAwOmhzbCgxOTgs''@;'; put 'put ''IDgwJSwgNDYlKTstLWNsci1jb2xvci1hY3Rpb24tNjAwOmhzbCgxOTgsIDEwMCUsIDMyJSk7LS1jbHItY29sb3ItYWN0aW9uLTcwMDpoc2woMTk4LCAxMDAlLCAyOCUpOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6aHNsKDE5OCwgMTAwJSwgMjQlKTstLWNsci1jb2xvci1hY3Rpb24tOTAwOmhz''@;'; put 'put ''bCgxOTgsIDEwMCUsIDIxJSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0''@;'; put 'put ''aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LW9uLWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgyODIsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDI4MiwgNTklLCA4NyUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LXNlY29uZGFyeS1hY3Rpb24tMjAwOmhzbCgyODIsIDUxJSwgNzglKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMwMDpoc2woMjgyLCA0NSUsIDcwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDI4MiwgNDQlLCA2MiUpOy0tY2xyLWNvbG9yLXNlY29uZGFy''@;'; put 'put ''eS1hY3Rpb24tNTAwOmhzbCgyODIsIDQzJSwgNTQlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTYwMDpoc2woMjgyLCA1MCUsIDQ1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi03MDA6aHNsKDI4MiwgNjklLCAzNyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24t''@;'; put 'put ''ODAwOmhzbCgyODIsIDEwMCUsIDI5JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDI4MiwgMTAwJSwgMjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUw''@;'; put 'put ''OmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMzAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItZGFuZ2VyLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6aHNsKDksIDk1JSwgOTIlKTstLWNsci1jb2xvci1kYW5nZXIt''@;'; put 'put ''MjAwOmhzbCg5LCA5MSUsIDg2JSk7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDpoc2woOSwgODMlLCA3NiUpOy0tY2xyLWNvbG9yLWRhbmdlci00MDA6aHNsKDksIDg1JSwgNjclKTstLWNsci1jb2xvci1kYW5nZXItNTAwOmhzbCg5LCA4OCUsIDYxJSk7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDpo''@;'; put 'put ''c2woOSwgOTIlLCA1MCUpOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6aHNsKDksIDEwMCUsIDQzJSk7LS1jbHItY29sb3ItZGFuZ2VyLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNsci1jb2xvci1kYW5nZXItOTAwOmhzbCg5LCAxMDAlLCAzMCUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOmhz''@;'; put 'put ''bCg5LCAxMDAlLCAyMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2Vy''@;'; put 'put ''LTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LWRhbmdlci03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDAwOmhzbCgxOTgsIDAlLCAxMDAl''@;'; put 'put ''KTstLWNsci1jb2xvci13YXJuaW5nLTUwOmhzbCg0OCwgMTAwJSwgOTUlKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDpoc2woNDgsIDEwMCUsIDg5JSk7LS1jbHItY29sb3Itd2FybmluZy0yMDA6aHNsKDQ4LCAxMDAlLCA4MyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctMzAwOmhzbCg0OCwgOTgl''@;'; put 'put ''LCA3MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNDAwOmhzbCg0OCwgOTQlLCA1NyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAwOmhzbCg0OCwgOTUlLCA0OCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNjAwOmhzbCg0NiwgMTAwJSwgNDUlKTstLWNsci1jb2xvci13YXJuaW5nLTcwMDpoc2woNDMs''@;'; put 'put ''IDEwMCUsIDQyJSk7LS1jbHItY29sb3Itd2FybmluZy04MDA6aHNsKDQxLCAxMDAlLCAzNCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctOTAwOmhzbCgzOCwgMTAwJSwgMjglKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6aHNsKDMxLCAxMDAlLCAxOSUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''NTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1v''@;'; put 'put ''bi13YXJuaW5nLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTcwMDpoc2woMTk4LCAwJSwgMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLXdhcm5pbmctODAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy05MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTA6aHNsKDkzLCA1''@;'; put 'put ''MiUsIDg4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6aHNsKDkzLCA1OCUsIDc1JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0yMDA6aHNsKDkzLCA3NiUsIDQ5JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0zMDA6aHNsKDkzLCA3NyUsIDQ0JSk7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6aHNsKDkz''@;'; put 'put ''LCA3OSUsIDQwJSk7LS1jbHItY29sb3Itc3VjY2Vzcy01MDA6aHNsKDkzLCA2NyUsIDM4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy02MDA6aHNsKDkzLCA4NSUsIDMyJSk7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6aHNsKDkzLCAxMDAlLCAyNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwOmhz''@;'; put 'put ''bCg5MywgMTAwJSwgMjElKTstLWNsci1jb2xvci1zdWNjZXNzLTkwMDpoc2woOTMsIDEwMCUsIDE2JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDAwOmhzbCg5MywgMTAwJSwgMTMlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3Vj''@;'; put 'put ''Y2Vzcy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zdWNjZXNzLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtODAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1ncmlkLWd1dHRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpOy0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtcm93LW1hcmdpbjpjYWxj''@;'; put 'put ''KHZhcigtLWNsci1ncmlkLWd1dHRlci13aWR0aCkgKiAtLjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNsb3NlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYmFzZWZvbnQtc2l6ZToxMjUlOy0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItZ2xvYmFsLWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQpOy0tY2xyLWds''@;'; put 'put ''b2JhbC1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xy''@;'; put 'put ''LWdsb2JhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItZ2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1nbG9iYWwtZm9udC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKX06cm9vdHstLWNs''@;'; put 'put ''ci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3I6cmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHk6TWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1j''@;'; put 'put ''bHItYm9keS1mb250OnZhcigtLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5KTstLWNsci1mb250OnZhcigtLWNsci1ib2R5LWZvbnQpOy0tY2xyLWRpc3BsYXktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udC13ZWlnaHQtbGlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXI6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZCk7LS1jbHItZm9udC13ZWlnaHQtZXh0cmFib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9s''@;'; put 'put ''ZCk7LS1jbHItaDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpOy0tY2xyLWgxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc3BsYXktZm9udC13ZWlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpOy0tY2xyLWgxLWxldHRlci1zcGFjaW5nOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6''@;'; put 'put ''ZSk7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQpOy0tY2xyLWgyLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWhlYWRsaW5lLWxpbmUtaGVpZ2h0KTstLWNsci1oMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMy1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTstLWNsci1oMy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1j''@;'; put 'put ''bHItaDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpOy0tY2xyLWgzLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKTstLWNsci1oNC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItaDQtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHIt''@;'; put 'put ''aDQtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItaDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpOy0tY2xyLWg1LWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWg1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDYtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTstLWNsci1oNi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTstLWNsci1oNi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oNi1saW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTstLWNsci1oNi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKTstLWNsci1wMC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00NTApOy0tY2xyLXAwLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7LS1jbHItcDAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7LS1jbHItcDAtbGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7LS1jbHItcDAtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTst''@;'; put 'put ''LWNsci1wMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDItZm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7LS1jbHItcDItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTstLWNsci1wMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDMtZm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAzLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItcDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMy1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXA0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1wNC1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItcDQt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA1LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXA1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDUtbGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7LS1jbHItcDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7LS1jbHItcDYtbGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9u''@;'; put 'put ''LWZvbnQtc2l6ZSk7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wNy1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xy''@;'; put 'put ''LXA3LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDgtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wOC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wOC1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRp''@;'; put 'put ''b24tbGluZS1oZWlnaHQpOy0tY2xyLXA4LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItbGlzdC1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1hbGln''@;'; put 'put ''bi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wIWltcG9ydGFudH0uY2xyLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5jbHItYWxpZ24tYm90dG9te3ZlcnRpY2Fs''@;'; put 'put ''LWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmNsci1jbGVhcmZpeDphZnRlcntjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uY2xyLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZXtkaXNwbGF5OmlubGluZSFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXAtcmV2ZXJz''@;'; put 'put ''ZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc2hy''@;'; put 'put ''aW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1lbmR7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWNlbnRlcnthbGlnbi1jb250ZW50OmNl''@;'; put 'put ''bnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3Ry''@;'; put 'put ''ZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWVuZHthbGlnbi1z''@;'; put 'put ''ZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0cmV0Y2h7YWxpZ24tc2VsZjpz''@;'; put 'put ''dHJldGNoIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtc20tcm93LXJldmVyc2V7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ub3dy''@;'; put 'put ''YXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNt''@;'; put 'put ''LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMt''@;'; put 'put ''c20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVu''@;'; put 'put ''dDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''c2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYt''@;'; put 'put ''c20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhIChtaW4t''@;'; put 'put ''d2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1tZC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMXtm''@;'; put 'put ''bGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1k''@;'; put 'put ''LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3Rh''@;'; put 'put ''cnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtYmFzZWxpbmV7YWxpZ24taXRlbXM6''@;'; put 'put ''YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtZW5k''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1hbGlnbi1jb250ZW50LW1kLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtYXV0b3thbGlnbi1zZWxmOmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctcm93''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1sZy1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbi1y''@;'; put 'put ''ZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcC1yZXZlcnNle2Zs''@;'; put 'put ''ZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxl''@;'; put 'put ''eC1sZy1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1j''@;'; put 'put ''b250ZW50LWxnLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFj''@;'; put 'put ''ZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1z''@;'; put 'put ''LWxnLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWdu''@;'; put 'put ''LWl0ZW1zLWxnLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1hcm91bmR7YWxp''@;'; put 'put ''Z24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGct''@;'; put 'put ''c3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1i''@;'; put 'put ''YXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1u''@;'; put 'put ''LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRh''@;'; put 'put ''bnR9LmNsci1mbGV4LXhsLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0we2ZsZXgtc2hyaW5rOjAh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5k''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RyZXRjaHthbGlnbi1pdGVt''@;'; put 'put ''czpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1j''@;'; put 'put ''ZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fS5jbHItZmxleC14cy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgteHMtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14cy11bm9yZGVyZWR7b3JkZXI6MH0uY2xyLWZsZXgtaXRl''@;'; put 'put ''bXMteHMtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH0uY2xyLWZsZXgteHMtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0u''@;'; put 'put ''Y2xyLWZsZXgteHMtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14cy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtY2VudGVye2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhzLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNl''@;'; put 'put ''LWJldHdlZW59QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgtc20tbGFzdHtvcmRlcjoxfS5jbHItZmxleC1zbS11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1pdGVtcy1zbS10''@;'; put 'put ''b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtc20tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXRvcHthbGln''@;'; put 'put ''bi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXNtLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtc20tYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6Zmxl''@;'; put 'put ''eC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNs''@;'; put 'put ''ci1mbGV4LWl0ZW1zLXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LW1kLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbWQtdW5vcmRlcmVke29yZGVyOjB9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtaXRlbXMtbWQtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLW1kLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC1tZC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LW1kLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo3Njhw''@;'; put 'put ''eCl7LmNsci1mbGV4LWl0ZW1zLW1kLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0''@;'; put 'put ''ZW1zLW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1s''@;'; put 'put ''Zy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LWxnLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWl0ZW1zLWxnLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5j''@;'; put 'put ''bHItZmxleC1pdGVtcy1sZy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbGctbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1sZy1ib3R0''@;'; put 'put ''b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMt''@;'; put 'put ''bGctcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''MTIwMHB4KXsuY2xyLWZsZXgteGwtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXhsLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgteGwtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0''@;'; put 'put ''fS5jbHItZmxleC1pdGVtcy14bC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1m''@;'; put 'put ''bGV4LXhsLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteGwtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1z''@;'; put 'put ''LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14bC1iZXR3ZWVu''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX0uY2xyLWZsb2F0LXhzLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWZsb2F0LXNtLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNs''@;'; put 'put ''ci1mbG9hdC1tZC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxvYXQtbGctbGVmdHtm''@;'; put 'put ''bG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbG9hdC14bC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItZmxvYXQteGwtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19LmNsci1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS5jbHItaGlkZGVuLXhzLXVwe2Rpc3BsYXk6bm9uZSFpbXBv''@;'; put 'put ''cnRhbnR9QG1lZGlhIChtYXgtd2lkdGg6NTc1Ljk4cHgpey5jbHItaGlkZGVuLXhzLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItaGlkZGVuLXNtLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2''@;'; put 'put ''Ny45OHB4KXsuY2xyLWhpZGRlbi1zbS1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWhpZGRlbi1tZC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7LmNsci1oaWRkZW4tbWQtZG93''@;'; put 'put ''bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1oaWRkZW4tbGctdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsuY2xyLWhpZGRlbi1sZy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1oaWRkZW4teGwtdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNsci1oaWRkZW4teGwtZG93biwuY2xyLXZpc2libGUtcHJpbnQtYmxvY2t7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXBy''@;'; put 'put ''aW50LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJp''@;'; put 'put ''bnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmNsci1oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9y''@;'; put 'put ''dGFudH19LmNsci1jb250YWluZXJ7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmcpO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LmNs''@;'; put 'put ''ci1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1yaWdodDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKTttYXJnaW4tbGVmdDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKX0uY2xyLW5vLWd1dHRlcnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5v''@;'; put 'put ''LWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEyLC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29s''@;'; put 'put ''LXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29sLWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNs''@;'; put 'put ''ci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNsci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywuY2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQs''@;'; put 'put ''LmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1tZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29sLW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHIt''@;'; put 'put ''Y29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHItY29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwuY2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20t''@;'; put 'put ''NSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHItY29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wtOSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xy''@;'; put 'put ''LWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29sdW1uLXBhZGRp''@;'; put 'put ''bmcpfS5jbHItY29se2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9''@;'; put 'put ''LmNsci1jb2wtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNv''@;'; put 'put ''bC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLTh7Zmxl''@;'; put 'put ''eDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLTExe2ZsZXg6MCAw''@;'; put 'put ''IDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItMHtvcmRlcjowfS5jbHItb3JkZXIt''@;'; put 'put ''MXtvcmRlcjoxfS5jbHItb3JkZXItMntvcmRlcjoyfS5jbHItb3JkZXItM3tvcmRlcjozfS5jbHItb3JkZXItNHtvcmRlcjo0fS5jbHItb3JkZXItNXtvcmRlcjo1fS5jbHItb3JkZXItNntvcmRlcjo2fS5jbHItb3JkZXItN3tvcmRlcjo3fS5jbHItb3JkZXItOHtvcmRlcjo4fS5jbHItb3Jk''@;'; put 'put ''ZXItOXtvcmRlcjo5fS5jbHItb3JkZXItMTB7b3JkZXI6MTB9LmNsci1vcmRlci0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC03e21hcmdpbi1sZWZ0''@;'; put 'put ''OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2''@;'; put 'put ''NjY2NyV9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItY29sLXNte2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1zbS0xe2ZsZXg6MCAwIDgu''@;'; put 'put ''MzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1zbS00e2ZsZXg6MCAwIDMz''@;'; put 'put ''LjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLXNtLTd7ZmxleDowIDAg''@;'; put 'put ''NTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtc20tMTB7ZmxleDow''@;'; put 'put ''IDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItc20t''@;'; put 'put ''Zmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1zbS1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItc20tMHtvcmRlcjowfS5jbHItb3JkZXItc20tMXtvcmRlcjoxfS5jbHItb3JkZXItc20tMntvcmRlcjoyfS5jbHItb3JkZXItc20tM3tvcmRlcjozfS5jbHItb3JkZXItc20tNHtvcmRlcjo0fS5j''@;'; put 'put ''bHItb3JkZXItc20tNXtvcmRlcjo1fS5jbHItb3JkZXItc20tNntvcmRlcjo2fS5jbHItb3JkZXItc20tN3tvcmRlcjo3fS5jbHItb3JkZXItc20tOHtvcmRlcjo4fS5jbHItb3JkZXItc20tOXtvcmRlcjo5fS5jbHItb3JkZXItc20tMTB7b3JkZXI6MTB9LmNsci1vcmRlci1zbS0xMXtvcmRl''@;'; put 'put ''cjoxMX0uY2xyLW9yZGVyLXNtLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1zbS0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS0z''@;'; put 'put ''e21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1zbS00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtc20tN3ttYXJnaW4tbGVm''@;'; put 'put ''dDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LXNtLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTExe21hcmdpbi1s''@;'; put 'put ''ZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1jb2wtbWR7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLW1kLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLW1k''@;'; put 'put ''LTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLW1k''@;'; put 'put ''LTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wt''@;'; put 'put ''bWQtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNv''@;'; put 'put ''bC1tZC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9''@;'; put 'put ''LmNsci1vcmRlci1tZC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLW1kLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1tZC0we29yZGVyOjB9LmNsci1vcmRlci1tZC0xe29yZGVyOjF9LmNsci1vcmRlci1tZC0ye29yZGVyOjJ9LmNsci1vcmRlci1tZC0ze29yZGVyOjN9LmNsci1vcmRlci1t''@;'; put 'put ''ZC00e29yZGVyOjR9LmNsci1vcmRlci1tZC01e29yZGVyOjV9LmNsci1vcmRlci1tZC02e29yZGVyOjZ9LmNsci1vcmRlci1tZC03e29yZGVyOjd9LmNsci1vcmRlci1tZC04e29yZGVyOjh9LmNsci1vcmRlci1tZC05e29yZGVyOjl9LmNsci1vcmRlci1tZC0xMHtvcmRlcjoxMH0uY2xyLW9y''@;'; put 'put ''ZGVyLW1kLTExe29yZGVyOjExfS5jbHItb3JkZXItbWQtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbWQtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LW1kLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1tZC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1t''@;'; put 'put ''ZC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQt''@;'; put 'put ''bWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWNvbC1sZ3tmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtbGctYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5v''@;'; put 'put ''bmV9LmNsci1jb2wtbGctMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoy''@;'; put 'put ''NSV9LmNsci1jb2wtbGctNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRo''@;'; put 'put ''OjUwJX0uY2xyLWNvbC1sZy03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy05e2ZsZXg6MCAwIDc1JTttYXgtd2lk''@;'; put 'put ''dGg6NzUlfS5jbHItY29sLWxnLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctMTJ7ZmxleDowIDAgMTAwJTtt''@;'; put 'put ''YXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWxnLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGctbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLWxnLTB7b3JkZXI6MH0uY2xyLW9yZGVyLWxnLTF7b3JkZXI6MX0uY2xyLW9yZGVyLWxnLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLWxnLTN7b3JkZXI6''@;'; put 'put ''M30uY2xyLW9yZGVyLWxnLTR7b3JkZXI6NH0uY2xyLW9yZGVyLWxnLTV7b3JkZXI6NX0uY2xyLW9yZGVyLWxnLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLWxnLTd7b3JkZXI6N30uY2xyLW9yZGVyLWxnLTh7b3JkZXI6OH0uY2xyLW9yZGVyLWxnLTl7b3JkZXI6OX0uY2xyLW9yZGVyLWxnLTEwe29y''@;'; put 'put ''ZGVyOjEwfS5jbHItb3JkZXItbGctMTF7b3JkZXI6MTF9LmNsci1vcmRlci1sZy0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1sZy0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtbGctMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTJ7bWFyZ2luLWxlZnQ6MTYu''@;'; put 'put ''NjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtbGctNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTZ7bWFyZ2luLWxlZnQ6NTAl''@;'; put 'put ''fS5jbHItb2Zmc2V0LWxnLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1sZy0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMz''@;'; put 'put ''JX0uY2xyLW9mZnNldC1sZy0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWNvbC14bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1''@;'; put 'put ''dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wteGwtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTN7ZmxleDowIDAg''@;'; put 'put ''MjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wteGwtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtNntmbGV4OjAg''@;'; put 'put ''MCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC14bC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC05e2ZsZXg6''@;'; put 'put ''MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXhsLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtMTJ7''@;'; put 'put ''ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXhsLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXIteGwtbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXhsLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXhsLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXhsLTJ7b3JkZXI6Mn0uY2xyLW9y''@;'; put 'put ''ZGVyLXhsLTN7b3JkZXI6M30uY2xyLW9yZGVyLXhsLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXhsLTV7b3JkZXI6NX0uY2xyLW9yZGVyLXhsLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXhsLTd7b3JkZXI6N30uY2xyLW9yZGVyLXhsLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXhsLTl7b3JkZXI6OX0uY2xy''@;'; put 'put ''LW9yZGVyLXhsLTEwe29yZGVyOjEwfS5jbHItb3JkZXIteGwtMTF7b3JkZXI6MTF9LmNsci1vcmRlci14bC0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQteGwtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTJ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQteGwtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTZ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC14bC0xMHttYXJnaW4tbGVm''@;'; put 'put ''dDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19LmNsci1icmVhay1yb3d7d2lkdGg6MTAwJX0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fWxpe2NvbG9yOnZhcigtLWNsci1saXN0LWl0ZW0tY29sb3IpO2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9dWw6bm90KFtjZHMtbGlzdF0pLG9sOm5vdChbY2RzLWxpc3RdKXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OjB9dWwubGlzdDpub3QoW2Nkcy1saXN0XSksb2wubGlzdDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjpvdXRzaWRlO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0''@;'; put 'put ''Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206MH11bDpub3QoLmxpc3QtdW5zdHlsZWQpOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVkLG9sOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNil9bGk+dWw6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfXVsLmxpc3QtZ3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6''@;'; put 'put ''bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1wcmV7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMH1wcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOnZhcigtLWNkcy1hbGlhcy11dGls''@;'; put 'put ''aXR5LXJlZCk7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfWgxOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgxLWNv''@;'; put 'put ''bG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgxLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMS1sZXR0ZXItc3BhY2luZyl9aDI6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDItZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgyLWxldHRlci1zcGFjaW5nKX1oMzpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2xyLWgzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDMtbGV0dGVyLXNwYWNpbmcpfWg0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZh''@;'; put 'put ''cigtLWNsci1oNC1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg0LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDQtbGluZS1oZWlnaHQpO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOnZhcigtLWNsci1oNC1sZXR0ZXItc3BhY2luZyl9aDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg1LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''aDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg1LWxldHRlci1zcGFjaW5nKX1o''@;'; put 'put ''Njpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDYtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDYtbGV0dGVyLXNwYWNpbmcpfWJvZHk6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6MCFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNs''@;'; put 'put ''ci1wMS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IHA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDEt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1w''@;'; put 'put ''MC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAwLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDAtbGV0dGVyLXNwYWNpbmcpfWJv''@;'; put 'put ''ZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMi1jb2xvcik7Zm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDItbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAzOm5vdChbY2RzLXRl''@;'; put 'put ''eHRdKSxib2R5IHAucDM6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMy1mb250''@;'; put 'put ''LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDMtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA0Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDQ6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1wNC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA0LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDQtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA1Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDU6bm90KFtjZHMtdGV4dF0pe21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNS1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA1LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDUtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXA2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDYtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJn''@;'; put 'put ''aW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA3LWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDctbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA4Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wOC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wOC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wOC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA4LWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jbHItcDgtbGV0dGVyLXNwYWNpbmcpfS50ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCl9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9y''@;'; put 'put ''dGFudH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fWh0bWw6bm90KFtjZHMtdGV4dF0pe2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7Zm9udC1mYW1pbHk6dmFy''@;'; put 'put ''KC0tY2xyLWZvbnQpO2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYqMTAwJSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZp''@;'; put 'put ''c2l0ZWQpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpfWh0bWx7Ym94LXNpemluZzpib3JkZXItYm94fSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWh0bWx7LW1zLW92''@;'; put 'put ''ZXJmbG93LXN0eWxlOnNjcm9sbGJhcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1bcm9sZT1idXR0b25de2N1cnNvcjpwb2ludGVyfWEsYXJlYSxidXR0b24sW3JvbGU9YnV0dG9uXSxpbnB1dCxsYWJlbCxzZWxlY3Qs''@;'; put 'put ''c3VtbWFyeSx0ZXh0YXJlYXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9ufWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1p''@;'; put 'put ''bnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5wdXRbdHlwZT1tb250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJn''@;'; put 'put ''aW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDppbmhlcml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0''@;'; put 'put ''b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH0uY2xyLXNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292''@;'; put 'put ''ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5hbGVydC1pY29uLC5jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MDti''@;'; put 'put ''YWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5p''@;'; put 'put ''Y29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUy''@;'; put 'put ''MG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJG''@;'; put 'put ''Y3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0ElMjM3NDc0NzQlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEuMyUyQzAlMkMxJTJDMC0yLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xh''@;'; put 'put ''c3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyNC4yNyUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01LjI3JTJDMEw1LjU3JTJDMjUuNTRBMyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4''@;'; put 'put ''JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUyQzguNTVhMSUyQzElMkMwJTJDMCUyQzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUy''@;'; put 'put ''RnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3Zn''@;'; put 'put ''K3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUy''@;'; put 'put ''RjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZl''@;'; put 'put ''bm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBaHNsKDE5OCwgMCUsIDEwMCUpJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlh''@;'; put 'put ''bmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4z''@;'; put 'put ''JTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJGY2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0''@;'; put 'put ''JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMwJTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFh''@;'; put 'put ''MSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDJTJGc3ZnJTNFIil9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUy''@;'; put 'put ''MiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxl''@;'; put 'put ''JTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5v''@;'; put 'put ''bmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4wMDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIy''@;'; put 'put ''UmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNE''@;'; put 'put ''JTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYzOTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5Nzgx''@;'; put 'put ''NTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQuODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUyQzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIy''@;'; put 'put ''LjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMzMTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDky''@;'; put 'put ''MyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUyMDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42''@;'; put 'put ''MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQzJTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMl''@;'; put 'put ''MkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMxNi4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0''@;'; put 'put ''MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUyQzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIw''@;'; put 'put ''MjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEyMDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQuMzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUw''@;'; put 'put ''NTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIwMjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcxJTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJD''@;'; put 'put ''MjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEyMDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIl''@;'; put 'put ''MjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4wOTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4w''@;'; put 'put ''MzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUyMEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJD''@;'; put 'put ''MTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYxNzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMuNjc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgx''@;'; put 'put ''ODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6''@;'; put 'put ''MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDouMDVyZW0haW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luOjAgMCAuMDVyZW0haW1wb3J0YW50fS5jbHItcG9wb3Zlci1jb250ZW50e3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTA1MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1idG4tdmVydGljYWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItYnRuLWhvcml6b250''@;'; put 'put ''YWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nOjA7LS1jbHItYnRuLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRk''@;'; put 'put ''aW5nKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZyk7LS1jbHItYnRuLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1idG4taGVpZ2h0LXNtOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItYnRuLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYnRuLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDp2YXIoLS1jbHItYnRuLWhlaWdodC1zbSk7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3Rh''@;'; put 'put ''bmRhcmQtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZzp2YXIoLS1jbHItYnRuLXBhZGRpbmcpOy0tY2xyLWJ0bi1ncm91cC1mb2N1cy1vdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7LS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVm''@;'; put 'put ''YXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpOy0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNr''@;'; put 'put ''ZWQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQp''@;'; put 'put ''Oy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQp''@;'; put 'put ''Oy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZSk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYmctY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDAp''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2Vk''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNz''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRu''@;'; put 'put ''LXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91''@;'; put 'put ''dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyKTstLWNsci1idG4tZGFu''@;'; put 'put ''Z2VyLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmUpOy0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWNo''@;'; put 'put ''ZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1o''@;'; put 'put ''b3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXIt''@;'; put 'put ''b3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5p''@;'; put 'put ''bmctaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyKTstLWNsci1idG4td2FybmluZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlKTstLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''ZGFyayk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmct''@;'; put 'put ''b3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGlu''@;'; put 'put ''ZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3Rp''@;'; put 'put ''dmUpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJs''@;'; put 'put ''ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1uZXV0cmFsLW91''@;'; put 'put ''dGxpbmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGlu''@;'; put 'put ''ZS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstYm9yZGVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4tbGluay1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay12aXNpdGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCk7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGlu''@;'; put 'put ''ay1wcmltYXJ5LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGlu''@;'; put 'put ''ay1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2Fybmlu''@;'; put 'put ''Zy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1i''@;'; put 'put ''dG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFj''@;'; put 'put ''dGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFu''@;'; put 'put ''c3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFs''@;'; put 'put ''LWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTst''@;'; put 'put ''LWNsci1idG4taW52ZXJzZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXIpOy0tY2xyLWJ0bi1pbnZlcnNlLWhv''@;'; put 'put ''dmVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmUpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtY2hlY2tl''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNl''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6dmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIHNvbGlkO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xNCk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxp''@;'; put 'put ''Z246bWlkZGxlO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZyl9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNvbG9yKX0uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXIt''@;'; put 'put ''Y29sb3IpfS5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yKX0uYnRuOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFj''@;'; put 'put ''dGl2ZS1jb2xvcil9LmJ0bi5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4sLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmRpc2FibGVkIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjZHMtaWNvbiwuYnRuLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjbHItaWNvbiwuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4gLmNsci1s''@;'; put 'put ''b2FkaW5nLWJ0bi1jb250ZW50LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uYnRuLWdyb3VwPi5idG4gY2xyLWljb24s''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKSwwKX1hLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuLC5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeSAuYnRuLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''c2Vjb25kYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpfWEuYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2RzLWljb24sYS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyLC5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2RzLWljb24sYS5idG46aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmhvdmVyIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIGEuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9YS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46YWN0aXZlIGNkcy1pY29uLGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9YS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0bixhLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJvcmRlci1jb2xvcil9YS5idG4uZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjZHMtaWNvbixhLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuZGlzYWJsZWQuYnRuIGNsci1pY29uLGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2RzLWljb24sYS5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWluZm8sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuLC5idG4taW5mbyAuYnRuLC5idG4taW5mbyAuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biwuYnRuLmJ0bi1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LmJ0biwuYnRuLXByaW1hcnkgLmJ0biwuYnRuLXByaW1hcnkg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmlt''@;'; put 'put ''YXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm8gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNsci1pY29uLC5idG4taW5mbyAuYnRuIGNkcy1pY29uLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvIC5idG46aG92ZXIsLmJ0bi5idG4tcHJpbWFy''@;'; put 'put ''eTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRu''@;'; put 'put ''LWluZm86aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvIC5idG46YWN0aXZlLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFy''@;'; put 'put ''eSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm86YWN0aXZlIGNs''@;'; put 'put ''ci1pY29uLC5idG4taW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4uYnRuLWluZm86ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29y''@;'; put 'put ''Om5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1pbmZvLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWlu''@;'; put 'put ''Zm8gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzIC5idG4sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzIC5idG4gY2Rz''@;'; put 'put ''LWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRu''@;'; put 'put ''LXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1z''@;'; put 'put ''dWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJu''@;'; put 'put ''aW5nLmJ0biwuYnRuLXdhcm5pbmcgLmJ0biwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpfS5idG4uYnRuLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZyAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3Zl''@;'; put 'put ''ciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biwuYnRuLWRhbmdlciAuYnRuLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlcjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlciAu''@;'; put 'put ''YnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJvcmRl''@;'; put 'put ''ci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJhbCAuYnRuLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRy''@;'; put 'put ''YWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbCBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUsLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFs''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZSAuYnRuLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4s''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xy''@;'; put 'put ''LWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRu''@;'; put 'put ''IGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNv''@;'; put 'put ''bG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3Zl''@;'; put 'put ''ciBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46''@;'; put 'put ''aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92''@;'; put 'put ''ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29u''@;'; put 'put ''LC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4t''@;'; put 'put ''c2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRp''@;'; put 'put ''c2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuOmRp''@;'; put 'put ''c2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biwuYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZSAuYnRuLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXByaW1hcnktb3V0bGluZSAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuLC5idG4uYnRuLWluZm8tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bnti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1v''@;'; put 'put ''dXRsaW5lLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNsci1pY29uLC5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0''@;'; put 'put ''bGluZSAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4g''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNk''@;'; put 'put ''cy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZv''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpo''@;'; put 'put ''b3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tcHJp''@;'; put 'put ''bWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkLC5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWlu''@;'; put 'put ''Zm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRs''@;'; put 'put ''aW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXN1Y2Nlc3MgLmJ0biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zdWNj''@;'; put 'put ''ZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3Mg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1z''@;'; put 'put ''dWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24s''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5n''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIs''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0''@;'; put 'put ''bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUs''@;'; put 'put ''LmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5i''@;'; put 'put ''dG46YWN0aXZlIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLW91''@;'; put 'put ''dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVk''@;'; put 'put ''IGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tZGFuZ2Vy''@;'; put 'put ''LW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlci5idG4sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIgLmJ0biwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1k''@;'; put 'put ''YW5nZXItb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUtZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRu''@;'; put 'put ''LWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVk''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFu''@;'; put 'put ''Z2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRh''@;'; put 'put ''bmdlcjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5i''@;'; put 'put ''dG4sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1''@;'; put 'put ''dHJhbC1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXJ7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRy''@;'; put 'put ''YWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1u''@;'; put 'put ''ZXV0cmFsLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''bmV1dHJhbDpkaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAu''@;'; put 'put ''YnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuLC5idG4tbGluayAuYnRuLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tbGluayBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluayBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2xyLWljb24sLmJ0bi1saW5r''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1saW5rIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29uLC5idG4tbGluayAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rIC5idG46aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmhvdmVyIGNsci1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluazphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjbHItaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkLC5idG4uYnRuLWxpbms6ZGlzYWJsZWQsLmJ0bi1saW5rIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4uYnRuLWxpbmsuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1saW5rLXByaW1hcnkuYnRuLC5idG4tbGluay1wcmltYXJ5IC5idG4sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5IGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0''@;'; put 'put ''bi5idG4tbGluay1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5i''@;'; put 'put ''dG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4t''@;'; put 'put ''bGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nl''@;'; put 'put ''c3MuYnRuLC5idG4tbGluay1zdWNjZXNzIC5idG4sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzcyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmst''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1saW5r''@;'; put 'put ''LXN1Y2Nlc3M6aG92ZXIsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1z''@;'; put 'put ''dWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nl''@;'; put 'put ''c3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tbGluay1zdWNjZXNz''@;'; put 'put ''IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1saW5rLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuLC5idG4t''@;'; put 'put ''bGluay13YXJuaW5nIC5idG4sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYm9y''@;'; put 'put ''ZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0bi1saW5rLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13''@;'; put 'put ''YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92''@;'; put 'put ''ZXIsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmc6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5p''@;'; put 'put ''bmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biwuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3Zlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVy''@;'; put 'put ''IGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlLC5idG4tbGlu''@;'; put 'put ''ay1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1saW5rLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLWRhbmdlcjpkaXNhYmxlZCwuYnRuLWxpbmstZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpO2N1''@;'; put 'put ''cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJs''@;'; put 'put ''ZWQtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsOmhvdmVyLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1o''@;'; put 'put ''b3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlLC5idG4tbGluay1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuLC5idG4taW52ZXJzZSAuYnRuLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVy''@;'; put 'put ''c2UgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1pbnZlcnNlIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4taW52ZXJzZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2xyLWljb24sLmJ0bi1pbnZlcnNl''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1pbnZlcnNlOmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc20sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4tc20gLmJ0bntmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1p''@;'; put 'put ''Ym9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVw''@;'; put 'put ''cGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmJ0bi1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSAwfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRue21hcmdpbi1yaWdodDowfS5idG4uYnRuLWxpbmsuYnRuLWludmVyc2V7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCgu''@;'; put 'put ''YnRuLWxpbmspIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksMCl9LmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2RzLWljb257aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1i''@;'; put 'put ''dG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpfS5idG4taWNvbnttaW4td2lkdGg6MH0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1s''@;'; put 'put ''aW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZHtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4tZ3JvdXAuYnRuLXNtIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tZ3JvdXAuYnRuIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZXtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNl''@;'; put 'put ''LXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmNoZWNrYm94LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biwucmFkaW8uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRue3BhZGRpbmc6MH0uY2hlY2ti''@;'; put 'put ''b3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5yYWRpby5idG4gbGFiZWwsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLWlubGluZS5idG4gbGFiZWx7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1pdGVtczpjZW50ZXI7cGxhY2UtY29udGVudDpjZW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LmJ0bjpkaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG4u''@;'; put 'put ''ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXIsLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFk''@;'; put 'put ''aW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVyLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LmNoZWNrYm94LmJ0biBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWx7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVse3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2Jv''@;'; put 'put ''eC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVs''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWws''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVy''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1i''@;'; put 'put ''Zy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZl''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2''@;'; put 'put ''ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVt''@;'; put 'put ''IC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVj''@;'; put 'put ''a2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1p''@;'; put 'put ''Y29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hl''@;'; put 'put ''Y2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpk''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHIt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hl''@;'; put 'put ''Y2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''aGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1j''@;'; put 'put ''b2xvcil9LmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNl''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpfS5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVse3dpZHRoOjEwMCV9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5i''@;'; put 'put ''dG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1j''@;'; put 'put ''aGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZv''@;'; put 'put ''LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFy''@;'; put 'put ''eSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlv''@;'; put 'put ''LmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1w''@;'; put 'put ''cmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29s''@;'; put 'put ''b3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtYmctY29sb3IpO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8u''@;'; put 'put ''YnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRs''@;'; put 'put ''aW5lLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlv''@;'; put 'put ''LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNil9LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cCBjbHItZHJvcGRvd246bGFzdC1jaGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1''@;'; put 'put ''cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKX0uYnRuLWdyb3VwIC5idG57bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufS5idG4tZ3JvdXAgLmJ0biBsYWJlbHtoZWlnaHQ6MTAwJX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106aG92ZXIsLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVye2FwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjE7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6SGlnaGxpZ2h0IHNvbGlkIDJweH0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106aG92ZXI6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXI6Oi1tcy1jaGVja3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQt''@;'; put 'put ''cmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpkaXNhYmxlZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDpub25lfS5idG4tZ3Jv''@;'; put 'put ''dXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5Pi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsIC50b29sdGlwOm5vdCg6bGFzdC1jaGls''@;'; put 'put ''ZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0''@;'; put 'put ''bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlcj4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZz4uYnRu''@;'; put 'put ''Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIDAgMH0uYnRuLWdyb3VwPi5idG4tZ3JvdXAtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGls''@;'; put 'put ''ZCk+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSB2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6Zmlyc3QtY2hpbGQ+LmJ0bjpmaXJzdC1jaGls''@;'; put 'put ''ZHtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1n''@;'; put 'put ''cm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRuLWdyb3VwLW92ZXJmbG93IC5idG57Ym9yZGVyLWxlZnQ6bm9uZX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4taWNvbi1saW5rLmJ0bi1saW5rIC5idG4sLmJ0bi1ncm91cC5idG4taWNvbiAu''@;'; put 'put ''YnRue21pbi13aWR0aDowfS5idG4tZ3JvdXAgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmJsb2NrfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2RzLWljb24sLmJ0bi1ncm91cCAu''@;'; put 'put ''ZHJvcGRvd24tbWVudSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSAuY2xyLWljb24tdGl0bGV7ZGlzcGxheTppbmxpbmV9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZX0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNr''@;'; put 'put ''Ym94IGlucHV0W3R5cGU9cmFkaW9dLC5yYWRpbyBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowfS5kcm9wZG93bi1tZW51LmNs''@;'; put 'put ''ci1idXR0b24tZ3JvdXAtbWVudXt2aXNpYmlsaXR5OnZpc2libGV9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjEuOHJlbTt0cmFu''@;'; put 'put ''c2l0aW9uOmNvbG9yIGxpbmVhciAuMnM7Zm9udC13ZWlnaHQ6MjAwO3RleHQtc2hhZG93Om5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZSBjZHMtaWNvbiwuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3Ip''@;'; put 'put ''fS5jbG9zZTpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTpob3ZlciBjZHMtaWNvbiwuY2xvc2U6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNv''@;'; put 'put ''bG9yLWFjdGl2ZSl9LmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5l''@;'; put 'put ''LWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1i''@;'; put 'put ''b3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoOmNhbGMoMTQ0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQt''@;'; put 'put ''YWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHIt''@;'; put 'put ''YWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1pbmZvKTstLWNsci1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50KTstLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTst''@;'; put 'put ''LWNsci1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1h''@;'; put 'put ''Y3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRp''@;'; put 'put ''bnQpOy0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250''@;'; put 'put ''LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludCk7LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1kYW5nZXItYm9yZGVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9u''@;'; put 'put ''dC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1k''@;'; put 'put ''YW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1j''@;'; put 'put ''b2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRy''@;'; put 'put ''YWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtaW5m''@;'; put 'put ''by1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13''@;'; put 'put ''YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5n''@;'; put 'put ''ZXIpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdl''@;'; put 'put ''ci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFu''@;'; put 'put ''Z2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0''@;'; put 'put ''cmFsKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1z''@;'; put 'put ''aGFkZSk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGUpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWlu''@;'; put 'put ''Zm8tcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDAp''@;'; put 'put ''Oy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxp''@;'; put 'put ''Z2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5hbGVydC1pY29u''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtZmxleDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTgpfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0''@;'; put 'put ''e2ZsZXg6MSAxO3RleHQtYWxpZ246bGVmdDthbGlnbi1zZWxmOmNlbnRlcn0uYWxlcnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpyb3c7d2lkdGg6YXV0bztib3JkZXItcmFkaXVzOnZhcigtLWNsci1hbGVydC1ib3JkZXJyYWRpdXMpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0IC5hbGVydC1pdGVtcyAu''@;'; put 'put ''YWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0u''@;'; put 'put ''YWxlcnQgLmNsb3NlOmZvY3VzLC5hbGVydCAuY2xvc2U6aG92ZXIsLmFsZXJ0IC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmZvY3VzIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1p''@;'; put 'put ''dGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''aW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''LmJ0biwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24u''@;'; put 'put ''YnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVy''@;'; put 'put ''dC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxl''@;'; put 'put ''cnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3Zlciwu''@;'; put 'put ''YWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNj''@;'; put 'put ''ZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNz''@;'; put 'put ''IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNk''@;'; put 'put ''cy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0''@;'; put 'put ''aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9u''@;'; put 'put ''dC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdl''@;'; put 'put ''KSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb25zIC5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5p''@;'; put 'put ''bmcgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBh''@;'; put 'put ''Om5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0''@;'; put 'put ''aW9uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2Jv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5h''@;'; put 'put ''bGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5j''@;'; put 'put ''bG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWx7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xv''@;'; put 'put ''cik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHIt''@;'; put 'put ''aWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dCwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTIpIDB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWlj''@;'; put 'put ''b24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpiZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlv''@;'; put 'put ''bnM+LmFsZXJ0LWFjdGlvbjpub3QoOmxhc3QtY2hpbGQpLC5hbGVydCAuYWxlcnQtYWN0aW9ucz4uZHJvcGRvd246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xle3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmFsZXJ0IC5hbGVydC1hY3Rpb24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQgLmNsb3Nle29yZGVyOjEwMDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5l''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowfS5hbGVydCAuYWxlcnQtc3Bp''@;'; put 'put ''bm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnN7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+''@;'; put 'put ''LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydC5hbGVydC1saWdodHdlaWdodHtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1ze3BhZGRpbmc6MH0uYWxl''@;'; put 'put ''cnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6MDttYXJnaW46MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYWxlcnQtYWN0aW9ucywuYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0IC5jbG9zZXtkaXNwbGF5Om5vbmV9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0Om5vdCguYWxlcnQtc20pIC5hbGVydC1pY29ue21hcmdpbjowfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdo''@;'; put 'put ''dC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5h''@;'; put 'put ''bGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29s''@;'; put 'put ''b3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1kYW5nZXIgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2Vp''@;'; put 'put ''Z2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbHttYXJnaW46MDtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdp''@;'; put 'put ''ZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1''@;'; put 'put ''cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm97YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''aXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1p''@;'; put 'put ''dGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''ZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlv''@;'; put 'put ''bi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24t''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxs''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNs''@;'; put 'put ''ci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVy''@;'; put 'put ''dC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''bmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0''@;'; put 'put ''cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1u''@;'; put 'put ''ZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3Nle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''d2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cywuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNs''@;'; put 'put ''b3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''YTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3Rp''@;'; put 'put ''dmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1ze2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYWxl''@;'; put 'put ''cnQtYWN0aW9uc3twYWRkaW5nOjB9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMH0uYWxlcnQtc20gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFs''@;'; put 'put ''ZXJ0LWljb24td3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbSAuYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20gLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0LXNt''@;'; put 'put ''IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjB9LmFsZXJ0LXNtIC5jbG9zZXttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0zKSAwfS5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2Vp''@;'; put 'put ''Z2h0IC5hbGVydC1pdGVtc3tnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25zLC5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZmxleC1iYXNpczp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVydCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6''@;'; put 'put ''d3JhcH0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5MCV9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCV9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uc3ttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKX19LmFsZXJ0LWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsZXJ0cyAuYWxlcnR7bWFyZ2luLXRvcDowfS5hbGVydHMgLmFsZXJ0cy13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmFsZXJ0cyAuYWxlcnRzLXdyYXBwZXIg''@;'; put 'put ''Y2xyLWFsZXJ0e2ZsZXg6MSAxIDEwMCV9LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmct''@;'; put 'put ''Y29sb3IpfS5hbGVydHMuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcil9LmFsZXJ0''@;'; put 'put ''cy5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEx''@;'; put 'put ''KTtmbGV4OjEgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCl9YnV0dG9uLmFsZXJ0cy1wYWdlci1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0cy1wYWdlci1i''@;'; put 'put ''dXR0b24gY2RzLWljb24sLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItY29udHJvbHtkaXNwbGF5OmZsZXg7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2w+KntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXI7ZmxleDoxIDEgYXV0b306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYXJkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1j''@;'; put 'put ''bHItY2FyZC10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhcmQtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jYXJkLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci1jYXJkLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FyZC1jbGlja2Fi''@;'; put 'put ''bGUtYm94LXNoYWRvdzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3IpOy0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLWNvbnRlbnQtdGl0''@;'; put 'put ''bGUtY29sb3I6dmFyKC0tY2xyLWNhcmQtdGl0bGUtY29sb3IpOy0tY2xyLWNhcmQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jYXJke2JveC1zaGFkb3c6dmFyKC0tY2xyLWNhcmQtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''Y2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXI6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3gtc2hhZG93KTtib3Jk''@;'; put 'put ''ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZSxib3gtc2hhZG93IC4y''@;'; put 'put ''cyBlYXNlLHRyYW5zZm9ybSAuMnMgZWFzZX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyLC5jYXJkIC5jYXJkLXRpdGxlLC5jYXJkIC5jYXJkLXRleHQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2ssLmNhcmQgLmxpc3QsLmNhcmQgLmxpc3QtdW5zdHlsZWR7bWFyZ2luLXRvcDowO21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAuY2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2Fy''@;'; put 'put ''ZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDph''@;'; put 'put ''dXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jYXJkLWJnLWNvbG9yKTt3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2FyZCAu''@;'; put 'put ''YWxlcnR7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDowO3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtwYWRkaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uY2FyZCAubGlzdC1ncm91cHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5jYXJkIC5saXN0LWdyb3VwLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1j''@;'; put 'put ''YXJkLWJvcmRlci1jb2xvcil9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jYXJkIC5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKX19LmNhcmQtYmxv''@;'; put 'put ''Y2t7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpfWgzLmNhcmQtaGVhZGVyLC5jYXJkLWhlYWRlcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtjb2xvcjp2YXIoLS1jbHItY2Fy''@;'; put 'put ''ZC1oZWFkZXItdGl0bGUtY29sb3IpfWg0LmNhcmQtdGl0bGUsLmNhcmQtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC1jb250ZW50''@;'; put 'put ''LXRpdGxlLWNvbG9yKX1oMS5jYXJkLWhlYWRlcixoMS5jYXJkLXRpdGxlLGgyLmNhcmQtaGVhZGVyLGgyLmNhcmQtdGl0bGUsaDMuY2FyZC1oZWFkZXIsaDMuY2FyZC10aXRsZSxoNC5jYXJkLWhlYWRlcixoNC5jYXJkLXRpdGxlLGg1LmNhcmQtaGVhZGVyLGg1LmNhcmQtdGl0bGUsaDYuY2Fy''@;'; put 'put ''ZC1oZWFkZXIsaDYuY2FyZC10aXRsZXttYXJnaW4tdG9wOjB9LmNhcmQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpfS5jYXJkLWltZzpmaXJzdC1jaGls''@;'; put 'put ''ZD5pbWd7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRp''@;'; put 'put ''dXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6''@;'; put 'put ''bGFzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC1ibG9jayAuYnRuLC5jYXJkLWJsb2NrIC5idG4uYnRuLWxpbmssLmNhcmQtYmxvY2sgLmNhcmQtbGluaywuY2FyZC1mb290ZXIgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi5idG4t''@;'; put 'put ''bGluaywuY2FyZC1mb290ZXIgLmNhcmQtbGluaywuY2FyZC1ibG9jayAuYnRuLWdyb3VwIC5idG4sLmNhcmQtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0uY2FyZC1oZWFkZXIsLmNhcmQtYmxvY2t7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNv''@;'; put 'put ''bGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdp''@;'; put 'put ''ZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1kaXZpZGVyLWNvbG9yKX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVye21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7d2lk''@;'; put 'put ''dGg6YXV0b30uY2FyZC1oZWFkZXIrLmNhcmQtZGl2aWRlciwuY2FyZC1ibG9jaysuY2FyZC1kaXZpZGVye2Rpc3BsYXk6bm9uZX0uY2FyZC1tZWRpYS1ibG9ja3tkaXNwbGF5OmZsZXh9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtaW1hZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zmxl''@;'; put 'put ''eDowIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNhcmQtbWVkaWEt''@;'; put 'put ''YmxvY2sgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpO21h''@;'; put 'put ''cmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGl0bGUsLmNhcmQtbWVkaWEtYmxvY2sgc3BhbiwuY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXJkLW1lZGlhLWJs''@;'; put 'put ''b2NrLndyYXB7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXJkLW1lZGlhLWJsb2NrLndyYXAgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3Qt''@;'; put 'put ''dW5zdHlsZWR7cGFkZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29sdW1uLWNvdW50OjM7Y29sdW1uLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JyZWFrLWluc2lkZTphdm9pZDtjb2x1bW4tZmlsbDpiYWxhbmNlOy13ZWJr''@;'; put 'put ''aXQtcGVyc3BlY3RpdmU6MX0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy0ye2NvbHVtbi1jb3VudDoyfS5jYXJkLWNvbHVtbnMuY2FyZC1jb2x1bW5zLTR7Y29sdW1uLWNvdW50OjR9LmNhcmQtY29sdW1ucyAuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KX0uY2FyZC1jb2x1bW5zIC5jbGlja2FibGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuY2hlY2tib3guYnRuIGxhYmVsLC5jYXJkIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5jYXJkIC5y''@;'; put 'put ''YWRpby5idG4gbGFiZWwsLmNhcmQgLnJhZGlvLWlubGluZS5idG4gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1uYXYtYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLW5hdi1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1uYXYtc2VsZWN0ZWQtYWN0''@;'; put 'put ''aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItbmF2LWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItbmF2LWxpbmstYWN0''@;'; put 'put ''aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX1AbWVkaWEgc2NyZWVue3NlY3Rpb25bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfX1bZGF0YS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJ1dHRvbi5uYXYtbGlua3tib3Jk''@;'; put 'put ''ZXItcmFkaXVzOjA7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTttaW4td2lkdGg6MH0udGFicy1vdmVyZmxvd3twb3NpdGlvbjpyZWxhdGl2ZX0udGFicy1vdmVyZmxvdyAuZHJvcGRvd24tbWVudXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7Ym94LXNoYWRvdzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO292ZXJmbG93OmhpZGRlbn0udGFicy1vdmVyZmxvdyAuYnRue2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7''@;'; put 'put ''cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApfS50YWItY29udGVudHtkaXNwbGF5OmlubGluZX1fOi1tcy1mdWxsc2NyZWVuIC50YWItY29udGVudCw6cm9vdCAu''@;'; put 'put ''dGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9LnRhYnMtdmVydGljYWw+Lm5hdntoZWlnaHQ6YXV0bztib3gtc2hhZG93Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTIpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5re3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXI6MDtmbGV4LXNocmluazowO21hcmdpbi10b3A6MDtt''@;'; put 'put ''YXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYnRue21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC50YWJzLXZlcnRpY2FsPi5uYXYgLm5h''@;'; put 'put ''di1saW5rOmhvdmVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0udGFicy1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTAwJX0udGFicy1hY3Rpb25zW3Bvc2l0aW9ufj1sZWZ0XXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3RhcnR9LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49cmlnaHRde2p1c3RpZnktY29udGVudDplbmR9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xy''@;'; put 'put ''LWRyb3Bkb3duLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRyb3Bkb3duLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50KTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xv''@;'; put 'put ''cik7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1kcm9wZG93bi1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNl''@;'; put 'put ''bGVjdGVkKTstLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1m''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1kcm9wZG93bi1pdGVtLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IgKTstLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZHJvcGRv''@;'; put 'put ''d24taXRlbS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yICk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''c2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcjp0cmFuc3BhcmVudH0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''aW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmRyb3Bk''@;'; put 'put ''b3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcn0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZs''@;'; put 'put ''b3c6dW5zZXR9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49''@;'; put 'put ''Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24g''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0u''@;'; put 'put ''ZHJvcGRvd24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3Bh''@;'; put 'put ''Y2U6bm93cmFwfS5kcm9wZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Mik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9w''@;'; put 'put ''ZG93bi1pdGVte3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24t''@;'; put 'put ''aXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRl''@;'; put 'put ''bS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXN1Y2Nlc3M6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1z''@;'; put 'put ''dWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9y''@;'; put 'put ''KX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWxpbms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0u''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''b3V0bGluZS1kYW5nZXI6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJu''@;'; put 'put ''aW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDppbmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVk''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmlt''@;'; put 'put ''YXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4u''@;'; put 'put ''ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8u''@;'; put 'put ''ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2Fi''@;'; put 'put ''bGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpk''@;'; put 'put ''aXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJp''@;'; put 'put ''bWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1p''@;'; put 'put ''dGVtLmFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LW91dGxpbmUuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3Rp''@;'; put 'put ''dmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1wcmltYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0uYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2Vy''@;'; put 'put ''LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWZ0ZXJ7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1s''@;'; put 'put ''O2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''c3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTEl''@;'; put 'put ''MjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7LXdlYmtpdC1tYXNrLXJlcGVhdDpu''@;'; put 'put ''by1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvdmVyO21hc2stc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tbGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFm''@;'; put 'put ''dGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXByaW1hcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhw''@;'; put 'put ''YW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6''@;'; put 'put ''YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5k''@;'; put 'put ''YWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3Rp''@;'; put 'put ''dmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9y''@;'; put 'put ''KX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxl''@;'; put 'put ''ZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ci5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4td2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tbGluay5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''d2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMikpfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1pdGVte3RleHQtZGVjb3JhdGlvbjpub25lfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1k''@;'; put 'put ''aXZpZGVye2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItY29sb3IpO21hcmdpbjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJm''@;'; put 'put ''bG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e3Zpc2liaWxpdHk6dmlzaWJsZX0uYnRuLWdyb3VwLW92ZXJm''@;'; put 'put ''bG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwu''@;'; put 'put ''ZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6MTAwJTtib3R0b206YXV0bzttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0''@;'; put 'put ''Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFi''@;'; put 'put ''cy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cudG9wLXJp''@;'; put 'put ''Z2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVu''@;'; put 'put ''dXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW46MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMH0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4u''@;'; put 'put ''ZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6''@;'; put 'put ''YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93Lmxl''@;'; put 'put ''ZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51''@;'; put 'put ''LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJv''@;'; put 'put ''dHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtsZWZ0OjEwMCU7cmlnaHQ6YXV0bzttYXJnaW46MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRy''@;'; put 'put ''b3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRv''@;'; put 'put ''d24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93biAuZHJvcGRvd24tbWVudXtib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGV9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBl''@;'; put 'put ''cj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRv''@;'; put 'put ''cD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCAxMDAlIGF1dG8gYXV0bzttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJv''@;'; put 'put ''cGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93''@;'; put 'put ''biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCBhdXRvIGF1dG8gMTAwJTttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5k''@;'; put 'put ''cm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3Jh''@;'; put 'put ''cHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4u''@;'; put 'put ''ZHJvcGRvd24tbWVudXtpbnNldDphdXRvIGF1dG8gMCAxMDAlO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfTpy''@;'; put 'put ''b290IFtjZHMtdGhlbWVdey0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4taGludC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWZvb3Rlci1nYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1sb2dpbi1jb3B5cmlnaHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTst''@;'; put 'put ''LWNsci1sb2dpbi13ZWxjb21lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1sb2dpbi1lcnJvci1pY29uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcik7LS1jbHItbG9naW4tbG9nby1jb2xvcjojNzE3MTc1Oy0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcjp2YXIoLS1jbHItaDItY29sb3IpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWln''@;'; put 'put ''aHQpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseTp2YXIoLS1jbHItaDItZm9udC1mYW1pbHkpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nOnZhcigtLWNs''@;'; put 'put ''ci1oMi1sZXR0ZXItc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117LS1jbHItbG9naW4tbG9nby1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKX0ubG9naW4td3JhcHBlcntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9z''@;'; put 'put ''dmcreG1sO2NoYXJzZXQ9dXRmOCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiUzRiUzRSUwRCUwQSUzQyUyMURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAlMjItJTJGJTJGVzNDJTJGJTJGRFREJTIwU1ZHJTIwMS4xJTJGJTJGRU4lMjIl''@;'; put 'put ''MjAlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRkdyYXBoaWNzJTJGU1ZHJTJGMS4xJTJGRFREJTJGc3ZnMTEuZHRkJTIyJTNFJTBEJTBBJTNDc3ZnJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGlkJTNEJTIybm8tYXNwZWN0''@;'; put 'put ''LXJhdGlvJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjB4JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweSUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGhlaWdodCUzRCUyMjIwNTUuNTVweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHdpZHRoJTNEJTIyMTQ0MHB4JTIyJTBEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjA1NS41NSUyMDE0NDAlMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pbllNaW4lMjBzbGljZSUyMiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2Rlc2MlM0VMb2dpbiUyMElt''@;'; put 'put ''YWdlJTNDJTJGZGVzYyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMHRy''@;'; put 'put ''YW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwLTQuMDAwMDAwJTI5JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0ZBRkFGQSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjQlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTEwOC40MyUyMDE0NDMuNjMlMjAxMTA5LjA4JTIwMTQ0My42MyUyMDQ0My40NCUy''@;'; put 'put ''MDc3Ny43NCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1t''@;'; put 'put ''b2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAzMzQuOTIlMjA0NDMuNDQlMjA3NzcuNzQlMjAwLjc5JTIwMzM0LjQ5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDIxMS44OCUyMDAuNzklMjAzMjkuNiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwMC43OSUyMDkuNzMlMjAwLjc5JTIwMjExLjg4JTIwOTAuMjclMjAzMDEuNDYlMjA1OS42MiUyMDI3MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjUwMy43NyUyMDE0NDMuNjMlMjA2OTcuNDclMjAxNDQzLjYzJTIwODAzLjc0JTIwMTMzNy4zNiUyMDcwNi45MyUyMDEyNDAuNDMl''@;'; put 'put ''MjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjIxNTguMzMlMjA2OTEuMTUlMjAwLjc5JTIwODQ4LjcyJTIwMC43OSUy''@;'; put 'put ''MDE0MjcuNDMlMjA0NDcuNTIlMjA5ODAuNyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NFRERFMCUyMiUyMHBvaW50cyUzRCUyMjI1Ny43MSUyMDU5MS43''@;'; put 'put ''NSUyMDAuNzklMjAzMzQuNDklMjAwLjc5JTIwNTMzLjQyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTlDOUQ1JTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMC43OSUyMDUzMy40MiUyMDAuNzklMjA4NDguNzIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0''@;'; put 'put ''RTclMjIlMjBwb2ludHMlM0QlMjI4MDYuNDYlMjAxMTQwLjg5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNDQ3LjUyJTIwOTgwLjclMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEZDNERGJTIyJTIwcG9pbnRzJTNEJTIyNDQ3LjUyJTIwOTgwLjclMjAwLjc5JTIwMTQyNy40MyUyMDAuNzklMjAxNDQzLjYzJTIwNTAzLjc3JTIwMTQ0My42MyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjI2MDguMjMlMjA4MTkuOTklMjA1NDYuOTQlMjA4ODEuMjglMjA4MDYuNDYlMjAxMTQwLjg5JTIwODY3LjY0JTIwMTA3''@;'; put 'put ''OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyNDIwLjA1JTIwNDI5LjM5JTIwMzE5LjAxJTIwNTMwLjQ1JTIw''@;'; put 'put ''NjA4LjIzJTIwODE5Ljk5JTIwNzA5LjMlMjA3MTguOTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUy''@;'; put 'put ''MDcxOC45MSUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2OC43NCUyMDk3OC42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVC''@;'; put 'put ''NUJDJTIyJTIwcG9pbnRzJTNEJTIyNjE5LjU5JTIwMjI5LjgyJTIwMzkzLjQyJTIwMy4xMiUyMDMyNy4yNyUyMDMuMTIlMjAxNjAuNjUlMjAxNjkuNzQlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAzMTkuMDElMjA1MzAuNDUlMjA5MC4yNyUyMDMwMS40NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDU5LjYyJTIwMjcwLjc3JTIwOTAuMjclMjAzMDEuNDYlMjAzMTkuMDElMjA1MzAuNDUlMjA0MjAuMDUlMjA0MjkuMzklMjIl''@;'; put 'put ''M0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4NEM0RDIlMjIlMjBwb2ludHMlM0QlMjI1OS42MiUyMDI3MC43NyUyMDAuNzklMjAzMjkuNiUyMDAuNzklMjAzMzQu''@;'; put 'put ''NDklMjAyNTcuNzElMjA1OTEuNzUlMjAzMTkuMDElMjA1MzAuNDUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjI1''@;'; put 'put ''MzcuNTUlMjAzLjEyJTIwMzkzLjQyJTIwMy4xMiUyMDYxOS41OSUyMDIyOS44MiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''Mzg3RDFEQiUyMiUyMHBvaW50cyUzRCUyMjg0Ni4yNSUyMDMuMTIlMjA1MzcuNTUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxs''@;'; put 'put ''JTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyOTA5Ljg3JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA3OTAuNDMlMjAxNDQzLjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMjU3LjcxJTIwNTkxLjc1JTIwNDQzLjQ0JTIwNzc3Ljc0JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIw''@;'; put 'put ''MTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyODY3LjY0JTIwMTA3OS43JTIwODA2LjQ2JTIwMTE0MC44''@;'; put 'put ''OSUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIy''@;'; put 'put ''MTA2NS41NyUyMDEwNzUuNTIlMjA5NjguNzQlMjA5NzguNiUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwl''@;'; put 'put ''M0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjIlMjAxMTY3LjklMjA3NzkuNCUyMDEyNjQuNjglMjA4NzYuNCUyMDEzMzYuODclMjA4MDQuMjIlMjAxMjQwLjA4JTIw''@;'; put 'put ''NzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwNjkxLjc0JTIwMTU3LjY2''@;'; put 'put ''JTIwNjE5LjU5JTIwMjI5LjgyJTIwOTA4LjY2JTIwNTE5LjU2JTIwOTgwLjgzJTIwNDQ3LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIy''@;'; put 'put ''JTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA5NjguNzQlMjA5NzguNiUyMDExNjcuOTElMjA3NzkuNCUyMDkwOC42NiUyMDUxOS41NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5''@;'; put 'put ''Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDkwOC42NiUyMDUxOS41NSUyMDExNjcuOTElMjA3NzkuNCUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDM0LjU5JTIwMy4xMiUyMDg0Ni4yNSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjA5ODAuODMlMjA0NDcuMzklMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNF''@;'; put 'put ''JTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMSUyMDEzMzYuODclMjA4MDQuMjIlMjAxNTg2LjAx''@;'; put 'put ''JTIwNTU1LjA4JTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjEyMjkuNzUlMjAx''@;'; put 'put ''OTguNDclMjA5ODAuODMlMjA0NDcuMzklMjAxMjQwLjA4JTIwNzA3LjIxJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3''@;'; put 'put ''Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE0OTEuMTglMjAxMTAzLjQyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjA5NDkuNzglMjAxMjg0LjI3JTIwMTEwOS4wOCUyMDE0NDMuNjMlMjAxMTUwLjk4JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzVCOEM1JTIyJTIwcG9pbnRzJTNEJTIyMTE1MC45OCUyMDE0NDMuNjMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDExOTEuMDkl''@;'; put 'put ''MjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxMTEyLjAzJTIw''@;'; put 'put ''MTEyMi4wMiUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2lu''@;'; put 'put ''dHMlM0QlMjIxMTkxLjA5JTIwMTQwMy41MSUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxMjkyLjIyJTIwMTMwMi4zOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nw''@;'; put 'put ''b2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzgzLjMlMjA4NTAuNzUlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTQ5MS4xOCUyMDEx''@;'; put 'put ''MDMuNDIlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAz''@;'; put 'put ''LjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIz''@;'; put 'put ''NkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMTYzMi40NiUyMDYwMS41OSUyMDEzODMuMyUyMDg1MC43NSUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUy''@;'; put 'put ''MDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzhDQUQ0JTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEw''@;'; put 'put ''MzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyODAzLjc0JTIwMTMzNy4zNiUyMDg1MC4xOSUyMDEzODMuODclMjA5NDkuNzglMjAxMjg0LjI3JTIwOTAzLjMxJTIwMTIzNy43OCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAxMDc1LjUyJTIwMTExMi4wMyUyMDExMjIuMDIlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTI2NC42OSUyMDg3Ni40JTIyJTNFJTNDJTJG''@;'; put 'put ''cG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzdCOEQ5JTIyJTIwcG9pbnRzJTNEJTIyNjk3LjQ3JTIwMTQ0My42MyUyMDc5MC40MyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgz''@;'; put 'put ''Ljg3JTIwODAzLjc0JTIwMTMzNy4zNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMl''@;'; put 'put ''MjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2''@;'; put 'put ''JTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQy''@;'; put 'put ''OSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4y''@;'; put 'put ''NzU0MjklMjklMjAlMjIlMjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEEl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjQyJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40''@;'; put 'put ''NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUy''@;'; put 'put ''MHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4My4zJTIwODUwLjc1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUl''@;'; put 'put ''MjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUy''@;'; put 'put ''MG92ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQzRTYlMjIlMjBwb2ludHMlM0QlMjIyMDU2JTIwMC4xMiUyMDE2NDUuNDklMjAwLjEyJTIwMTY0OC40OSUyMDMuMTIlMjAxOTQ0LjA3JTIwMy4xMiUyMDE3OTYu''@;'; put 'put ''MjIlMjAxNTAuOTklMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMjA1NC40NSUyMDg2LjY0JTIwMjA1NC40NSUyMDE3OS42JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTYlMjA0MTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3QUI5RDklMjIlMjBwb2ludHMlM0QlMjIxNjQ4LjQ5JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxOTQ0LjA3JTIwMy4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2QUVENCUyMiUyMHBvaW50cyUzRCUyMjIwNTQuNDUlMjA4Ni42NCUyMDE4OTMuMTIlMjAyNDcuOTclMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NC40NSUyMDE3OS42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTg4NC44MiUyMDcwOS43OCUyMDIwNTQuNDUlMjA4NzkuNTclMjAyMDU0LjQ1JTIwNTQwLjE1JTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTQ4OS4xNCUyMDQ1OC4xMiUyMDE0ODkuMTQlMjA0NTguMTIlMjAxMzcxLjEzJTIw''@;'; put 'put ''MzM5Ljk5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTc5Ni4yMiUyMDE1MC45OSUyMDE2NDguNDklMjAzLjEy''@;'; put 'put ''JTIwMTQyNS4xJTIwMy4xMiUyMDEzMDEuOTElMjAxMjYuMzElMjAxNTYxLjMlMjAzODUuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjB0''@;'; put 'put ''cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzk4Ljk1NDA2NiUyQyUyMDM4OC43OTg3ODElMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3OTguOTU0MDY2JTJDJTIwLTM4OC43OTg3ODElMjklMjAlMjIlMjB4JTNEJTIyMTYzMi44MjQwNyUyMiUyMHklM0Ql''@;'; put 'put ''MjIzNTUuOTMzNzgxJTIyJTIwd2lkdGglM0QlMjIzMzIuMjYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUy''@;'; put 'put ''MiUyMHBvaW50cyUzRCUyMjE1ODYuMDElMjA1NTUuMDglMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNTczLjcxMTU3NyUyQyUyMDQ3MC42MjAyNjMlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE1NzMuNzExNTc3JTJDJTIwLTQ3MC42MjAyNjMlMjkl''@;'; put 'put ''MjAlMjIlMjB4JTNEJTIyMTUyMi42ODE1OCUyMiUyMHklM0QlMjI0MDIuMDg1MjYzJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIxMzcuMDclMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzU4LjY3Njc1OCUyQyUyMDY1NS43NjcxMjAlMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3NTguNjc2NzU4JTJDJTIwLTY1NS43NjcxMjAl''@;'; put 'put ''MjklMjAlMjIlMjB4JTNEJTIyMTcwNy42NDY3NiUyMiUyMHklM0QlMjI1MjguMjkyMTIlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjI1NC45NSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHBvaW50cyUzRCUyMjEzMDEuOTElMjAxMjYuMzElMjAxMTc4Ljg0JTIwMy4xMiUyMDEwMzQuNTklMjAzLjEyJTIwMTIyOS43NSUyMDE5OC40NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzgzQzBDOCUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDIwNTQuNDUlMjA4NzkuNTclMjAxODg0LjgyJTIwNzA5Ljc4JTIyJTNF''@;'; put 'put ''JTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzN0RDNkRDJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTM5NS41MTY5MDElMkMlMjAyOTIuMjA2NTE5JTI5JTIw''@;'; put 'put ''cm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMzk1LjUxNjkwMSUyQyUyMC0yOTIuMjA2NTE5JTI5JTIwJTIyJTIweCUzRCUyMjEzNDQuNDkxOSUyMiUyMHklM0QlMjIxMDguNzAxNTE5JTIyJTIwd2lkdGglM0QlMjIxMDIuMDUlMjIlMjBoZWlnaHQlM0QlMjIzNjcuMDEl''@;'; put 'put ''MjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2OEI4RDUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNjQ1LjMxMzYxOSUyQyUyMDU0Mi4yNDk3NjAlMjkl''@;'; put 'put ''MjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE2NDUuMzEzNjE5JTJDJTIwLTU0Mi4yNDk3NjAlMjklMjAlMjIlMjB4JTNEJTIyMTU5NC4yODM2MiUyMiUyMHklM0QlMjI1MDkuMzg0NzYlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjY1Ljcz''@;'; put 'put ''JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAzLjAw''@;'; put 'put ''MDAwMCUyOSUyMiUyMHN0cm9rZSUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjE1JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNMC45NSUyQzAuMTIlMjBMMC45NSUyQzg0MC4xMiUy''@;'; put 'put ''MiUyMGlkJTNEJTIyU2hhcGUlMjIlM0UlM0MlMkZwYXRoJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTND''@;'; put 'put ''JTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNhbGMoNTgwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9naW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''bG9naW4tYmFja2dyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OmF1dG87''@;'; put 'put ''bWluLWhlaWdodDoxMDB2aDt3aWR0aDpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1oZWFkZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuYWN0aW9ucywubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAuYWN0aW9uc3ttYXJnaW4tbGVmdDphdXRvfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCxcICUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTA1JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDUlMjAxNiUyMiUy''@;'; put 'put ''MGZpbGwlM0QlMjJub25lJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00NC45MzcxJTIwMTQuOEw0MC4zNTk4JTIwMi4wMDA4MkM0MC4yOTMyJTIwMS44MDA5NCUyMDQwLjIyNjYlMjAxLjYwMTA2''@;'; put 'put ''JTIwNDAuMjI2NiUyMDEuNDAxMTdDNDAuMjI2NiUyMDAuODY4MTUzJTIwNDAuNjkzJTIwMC4zNDE3OTclMjA0MS4zNTI2JTIwMC4zNDE3OTdDNDEuOTUyMiUyMDAuMzQxNzk3JTIwNDIuMzQ1MyUyMDAuNzQxNTYzJTIwNDIuNDc4NiUyMDEuMjY3OTJMNDYuMjU2NCUyMDEyLjI3NDhMNTAuMTAw''@;'; put 'put ''OCUyMDEuMjY3OTJDNTAuMzAwNyUyMDAuNzM0OSUyMDUwLjYzMzglMjAwLjM0MTc5NyUyMDUxLjIyNjglMjAwLjM0MTc5N0g1MS4zNkM1MS45NTk3JTIwMC4zNDE3OTclMjA1Mi4zNTI4JTIwMC43NDE1NjMlMjA1Mi41NTI3JTIwMS4yNjc5Mkw1Ni4zMzA1JTIwMTIuMjc0OEw2MC4xNzQ5JTIw''@;'; put 'put ''MS4yMDEyOUM2MC4zMDgyJTIwMC43MzQ5MDElMjA2MC42NDEzJTIwMC4zNDE3OTclMjA2MS4yMzQzJTIwMC4zNDE3OTdDNjEuOTAwNiUyMDAuMzQxNzk3JTIwNjIuMzYwMyUyMDAuODA4MTg4JTIwNjIuMzYwMyUyMDEuNDAxMTdDNjIuMzYwMyUyMDEuNjAxMDYlMjA2Mi4yOTM2JTIwMS44Njc1''@;'; put 'put ''NyUyMDYyLjIyNyUyMDIuMDAwODJMNTcuNTgzMSUyMDE0LjhDNTcuMzE2NiUyMDE1LjQ2NjMlMjA1Ni44NTAyJTIwMTUuNzkyOCUyMDU2LjMyMzglMjAxNS43OTI4SDU2LjI1NzJDNTUuNjU3NSUyMDE1Ljc5MjglMjA1NS4yNjQ0JTIwMTUuNDU5NiUyMDU0Ljk5NzklMjAxNC44TDUxLjI4Njgl''@;'; put 'put ''MjAzLjkyNjM2TDQ3LjUwOSUyMDE0LjhDNDcuMzA5MSUyMDE1LjQ2NjMlMjA0Ni44NDk0JTIwMTUuNzkyOCUyMDQ2LjMxNjMlMjAxNS43OTI4SDQ2LjI0OTdDNDUuNjUwMSUyMDE1Ljc5MjglMjA0NS4xOTAzJTIwMTUuNDU5NiUyMDQ0LjkyMzglMjAxNC44SDQ0LjkzNzFaJTIyJTIwZmlsbCUz''@;'; put 'put ''RCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTc4LjM1MjUlMjAxLjQ2NzhDNzguMzUyNSUyMDAuODY4MTUyJTIwNzguODE4OSUyMDAuMzQxNzk3JTIwNzkuNDc4NSUyMDAuMzQxNzk3QzgwLjEzODIlMjAwLjM0MTc5NyUyMDgwLjYwNDUlMjAwLjgwODE4NyUyMDgw''@;'; put 'put ''LjYwNDUlMjAxLjQ2NzhWNC4wNTI5NkM4MS43MzA2JTIwMS41MzQ0MyUyMDg0LjE4MjUlMjAwLjM0MTc5NyUyMDg1Ljg0MTUlMjAwLjM0MTc5N0M4Ni41MDExJTIwMC4zNDE3OTclMjA4Ni45Njc1JTIwMC44MDgxODclMjA4Ni45Njc1JTIwMS40Njc4Qzg2Ljk2NzUlMjAyLjA2NzQ1JTIwODYu''@;'; put 'put ''NTY3NyUyMDIuNTI3MTglMjA4NS45NzQ3JTIwMi41OTM4MUM4My4wNTY0JTIwMi45MjY5NSUyMDgwLjY3MTIlMjA1LjExMjM0JTIwODAuNjcxMiUyMDkuNDg5NzhWMTQuNTkzNUM4MC42NzEyJTIwMTUuMTkzMSUyMDgwLjIwNDglMjAxNS43MTk1JTIwNzkuNTQ1MiUyMDE1LjcxOTVDNzguODg1''@;'; put 'put ''NiUyMDE1LjcxOTUlMjA3OC40MTkyJTIwMTUuMTg2NCUyMDc4LjQxOTIlMjAxNC41OTM1VjEuNDYxMTQlMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNOTQuMTI5NCUyMDE1LjkyNzJDOTAuMDg1MSUyMDE1LjkyNzIlMjA4Ni43MDclMjAxMi43''@;'; put 'put ''NDI0JTIwODYuNzA3JTIwOC4xNzE3VjguMTA1MDhDODYuNzA3JTIwMy43OTQyNyUyMDg5LjY5MTklMjAwLjM0OTYwOSUyMDkzLjgwMjklMjAwLjM0OTYwOUM5OC4xODAzJTIwMC4zNDk2MDklMjAxMDAuNjk5JTIwMy45OTQxNSUyMDEwMC42OTklMjA3LjkxMTg2QzEwMC42OTklMjA4LjUxMTUx''@;'; put 'put ''JTIwMTAwLjIzMiUyMDguOTcxMjMlMjA5OS42Mzk1JTIwOC45NzEyM0g4OC44OTkxQzg5LjIzMjIlMjAxMi4yMjI3JTIwOTEuNDg0MiUyMDE0LjAwODMlMjA5NC4xMzYlMjAxNC4wMDgzQzk1Ljk5NDklMjAxNC4wMDgzJTIwOTcuMzIwOCUyMDEzLjI4MiUyMDk4LjM4MDIlMjAxMi4yODI2Qzk4''@;'; put 'put ''LjU4MDElMjAxMi4xNDk0JTIwOTguNzglMjAxMi4wMTYxJTIwOTkuMDM5OCUyMDEyLjAxNjFDOTkuNTcyOCUyMDEyLjAxNjElMjAxMDAuMDMzJTIwMTIuNDgyNSUyMDEwMC4wMzMlMjAxMi45NDIyQzEwMC4wMzMlMjAxMy4yMDg4JTIwOTkuODk5MyUyMDEzLjQ3NTMlMjA5OS42OTk0JTIwMTMu''@;'; put 'put ''NjY4NUM5OC4zMDY5JTIwMTQuOTk0NCUyMDk2LjY0NzklMjAxNS45MjA1JTIwOTQuMTI5NCUyMDE1LjkyMDVWMTUuOTI3MlpNOTguNTA2OCUyMDcuMjM4OTFDOTguMzA2OSUyMDQuNTIwNTElMjA5Ni43MTQ1JTIwMi4xMzUyMyUyMDkzLjgwMjklMjAyLjEzNTIzQzkxLjIxNzclMjAyLjEzNTIz''@;'; put 'put ''JTIwODkuMjkyMiUyMDQuMzIwNjIlMjA4OC45NjU3JTIwNy4yMzg5MUg5OC41MTM1SDk4LjUwNjhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTYyLjM3NSUyMDExLjIxNThDNjIuMzc1JTIwNy45NjQ0JTIwNjUuMDI2OCUyMDYuMzA1Mzcl''@;'; put 'put ''MjA2OC44MDQ2JTIwNi4zMDUzN0M3MC43MzAxJTIwNi4zMDUzNyUyMDcyLjEyMjYlMjA2LjU3MTg4JTIwNzMuNDQxOSUyMDYuOTcxNjVWNi40Mzg2M0M3My40NDE5JTIwMy43MjAyMiUyMDcxLjc4MjglMjAyLjMyNzclMjA2OC45MzEyJTIwMi4zMjc3QzY3LjQwNTQlMjAyLjMyNzclMjA2Ni41''@;'; put 'put ''NDU5JTIwMi41Mjc1OCUyMDY1LjQxOTklMjAyLjk5Mzk3QzY1LjI4NjYlMjAzLjA2MDYlMjA2NS4xNTM0JTIwMy4wNjA2JTIwNjUuMDIwMSUyMDMuMDYwNkM2NC40ODcxJTIwMy4wNjA2JTIwNjQuMDI3NCUyMDIuNTk0MjElMjA2NC4wMjc0JTIwMi4wNjc4NUM2NC4wMjc0JTIwMS42MDE0NiUy''@;'; put 'put ''MDY0LjIyNzMlMjAxLjM0MTYxJTIwNjQuNjI3JTIwMS4xNDE3MkM2Ni4wODYyJTIwMC40NzU0NDclMjA2Ny4yMTIyJTIwMC4yODIyMjclMjA2OS4xMzc3JTIwMC4yODIyMjdDNzEuMjU2NSUyMDAuMjgyMjI3JTIwNzIuOTE1NSUyMDAuODE1MjUyJTIwNzMuOTc0OSUyMDEuOTQxMjZDNzQuOTY3''@;'; put 'put ''NiUyMDIuOTM0MDElMjA3NS41MDA3JTIwNC4zOTMxNiUyMDc1LjUwMDclMjA2LjMxODdWMTQuNjA3MkM3NS41MDA3JTIwMTUuMjczNSUyMDc1LjAzNDMlMjAxNS43MzMyJTIwNzQuNDQxMyUyMDE1LjczMzJDNzMuNzc1JTIwMTUuNzMzMiUyMDczLjM4MTklMjAxNS4yNjY4JTIwNzMuMzgxOSUy''@;'; put 'put ''MDE0LjY3MzhWMTMuMjE0N0M3Mi4zMjI1JTIwMTQuNjA3MiUyMDcwLjU5NjklMjAxNS43OTk4JTIwNjcuOTQ1MSUyMDE1Ljc5OThDNjUuMjI2NyUyMDE1LjkzMzElMjA2Mi4zNzUlMjAxNC4zNDA3JTIwNjIuMzc1JTIwMTEuMjIyNVYxMS4yMTU4Wk03My41MTUyJTIwMTAuMDg5OFY4LjYzMDY4''@;'; put 'put ''QzcyLjM4OTElMjA4LjI5NzU0JTIwNzAuOTMlMjA3Ljk2NDQlMjA2OS4wNzExJTIwNy45NjQ0QzY2LjIxOTQlMjA3Ljk2NDQlMjA2NC42OTM3JTIwOS4yMjM2NiUyMDY0LjY5MzclMjAxMS4wODI2VjExLjE0OTJDNjQuNjkzNyUyMDEzLjA3NDclMjA2Ni40MTkzJTIwMTQuMTM0MSUyMDY4LjQ3''@;'; put 'put ''MTQlMjAxNC4xMzQxQzcxLjI1NjUlMjAxNC4xMzQxJTIwNzMuNTA4NSUyMDEyLjQ3NTElMjA3My41MDg1JTIwMTAuMDg5OEg3My41MTUyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00LjEwMjIyJTIwMS4yNjg2MkMzLjYzNTgzJTIwMC4y''@;'; put 'put ''MDkyMzclMjAyLjM3NjU2JTIwLTAuMzIzNzg3JTIwMS4yNTA1NSUyMDAuMjA5MjM1QzAuMTI0NTQ1JTIwMC43NDIyNTYlMjAtMC4yNzUyMTglMjAyLjAwMTUyJTIwMC4xOTExNzYlMjAzLjA2MDlMNC45NjE3MiUyMDEzLjQ3NDhDNS42ODc5NiUyMDE1LjEzMzglMjA2LjQ4NzQ5JTIwMTUuOTI2''@;'; put 'put ''NyUyMDguMDEzMjclMjAxNS45MjY3QzkuNTM5MDQlMjAxNS45MjY3JTIwMTAuMjY1MyUyMDE1LjAwMDYlMjAxMS4wNjQ4JTIwMTMuNDc0OEMxMS4wNjQ4JTIwMTMuNDc0OCUyMDE1LjI0MjQlMjA0LjM4Njc5JTIwMTUuMzA5JTIwNC4zMjY4M0MxNS4zNzU2JTIwNC4yNjAyJTIwMTUuNTA4OSUy''@;'; put 'put ''MDMuOTI3MDYlMjAxNS45MDg2JTIwMy45MjcwNkMxNi4yNDE4JTIwMy45MjcwNiUyMDE2LjU2ODMlMjA0LjE5MzU3JTIwMTYuNTY4MyUyMDQuNTkzMzRWMTMuNDgxNUMxNi41NjgzJTIwMTQuODc0JTIwMTcuMjk0NSUyMDE2JTIwMTguODIwMyUyMDE2QzIwLjM0NjElMjAxNiUyMDIxLjA3MjMl''@;'; put 'put ''MjAxNC44NzQlMjAyMS4wNzIzJTIwMTMuNDgxNVY2LjE4NTc0QzIxLjA3MjMlMjA0Ljc5MzIyJTIwMjIuMDY1JTIwMy44NjcxJTIwMjMuNDU3NiUyMDMuODY3MUMyNC44NTAxJTIwMy44NjcxJTIwMjUuNzA5NiUyMDQuNzkzMjIlMjAyNS43MDk2JTIwNi4xODU3NFYxMy40ODE1QzI1LjcwOTYl''@;'; put 'put ''MjAxNC44NzQlMjAyNi40NDI1JTIwMTYlMjAyNy45NjE2JTIwMTZDMjkuNDgwNyUyMDE2JTIwMzAuMjEzNiUyMDE0Ljg3NCUyMDMwLjIxMzYlMjAxMy40ODE1VjYuMTg1NzRDMzAuMjEzNiUyMDQuNzkzMjIlMjAzMS4yMDY0JTIwMy44NjcxJTIwMzIuNTk4OSUyMDMuODY3MUMzMy45OTE0JTIw''@;'; put 'put ''My44NjcxJTIwMzQuODUwOSUyMDQuNzkzMjIlMjAzNC44NTA5JTIwNi4xODU3NFYxMy40ODE1QzM0Ljg1MDklMjAxNC44NzQlMjAzNS41NzcxJTIwMTYlMjAzNy4xMDI5JTIwMTZDMzguNjI4NyUyMDE2JTIwMzkuMzU0OSUyMDE0Ljg3NCUyMDM5LjM1NDklMjAxMy40ODE1VjUuMTkyOTlDMzku''@;'; put 'put ''MzU0OSUyMDIuMTQxNDQlMjAzNi45MDMlMjAwLjAyMjY3ODElMjAzMy45ODQ3JTIwMC4wMjI2NzgxQzMxLjA2NjQlMjAwLjAyMjY3ODElMjAyOS4yMTQyJTIwMi4wODE0OCUyMDI5LjIxNDIlMjAyLjA4MTQ4QzI4LjA4ODIlMjAwLjgyMjIxMyUyMDI2Ljc2MjMlMjAwLjAyMjY3ODElMjAyNC41''@;'; put 'put ''MTAzJTIwMC4wMjI2NzgxQzIyLjEyNSUyMDAuMDIyNjc4MSUyMDE5Ljk5OTYlMjAyLjA4MTQ4JTIwMTkuOTk5NiUyMDIuMDgxNDhDMTkuMDA2OCUyMDAuODIyMjEzJTIwMTcuMzQ3OCUyMDAuMDIyNjc4MSUyMDE1Ljk1NTMlMjAwLjAyMjY3ODFDMTMuODM2NSUyMDAuMDIyNjc4MSUyMDEyLjEx''@;'; put 'put ''MDklMjAwLjk0ODgwNSUyMDExLjExODElMjAzLjM0MDc0TDguMDY2NTclMjAxMC41Njk4TDQuMDg4ODklMjAxLjI4ODYxTDQuMTAyMjIlMjAxLjI2ODYyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk0xMDAuODkyJTIwMi4yMDA3MUMxMDAu''@;'; put 'put ''ODkyJTIwMS4xNDEzMyUyMDEwMS42ODQlMjAwLjM0MTc5NyUyMDEwMi43NTElMjAwLjM0MTc5N0MxMDMuODE3JTIwMC4zNDE3OTclMjAxMDQuNjA5JTIwMS4yMDEyOSUyMDEwNC42MDklMjAyLjIwMDcxQzEwNC42MDklMjAzLjIwMDEzJTIwMTAzLjgxNyUyMDQuMDU5NjIlMjAxMDIuNzUxJTIw''@;'; put 'put ''NC4wNTk2MkMxMDEuNzU4JTIwNC4wNTk2MiUyMDEwMC44OTIlMjAzLjIwMDEzJTIwMTAwLjg5MiUyMDIuMjAwNzFaTTEwNC4yNyUyMDIuMjAwNzFDMTA0LjI3JTIwMS4zNDEyMSUyMDEwMy42MSUyMDAuNjc0OTM1JTIwMTAyLjc0NCUyMDAuNjc0OTM1QzEwMS44NzglMjAwLjY3NDkzNSUyMDEw''@;'; put 'put ''MS4yMTglMjAxLjQwMTE4JTIwMTAxLjIxOCUyMDIuMjAwNzFDMTAxLjIxOCUyMDMuMDYwMjElMjAxMDEuODc4JTIwMy43MjY0OCUyMDEwMi43NDQlMjAzLjcyNjQ4QzEwMy42MSUyMDMuNzI2NDglMjAxMDQuMjclMjAzLjAwMDI0JTIwMTA0LjI3JTIwMi4yMDA3MVolMjIlMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAyLjA4NSUyMDEuNDAyMDNDMTAyLjA4NSUyMDEuMjY4NzclMjAxMDIuMTUyJTIwMS4yMDIxNSUyMDEwMi4yODUlMjAxLjIwMjE1SDEwMi44ODVDMTAzLjE1MSUyMDEuMjAyMTUlMjAxMDMuMjg0JTIwMS4yNjg3NyUyMDEw''@;'; put 'put ''My40MTglMjAxLjQwMjAzQzEwMy41NTElMjAxLjUzNTI4JTIwMTAzLjU1MSUyMDEuNjY4NTQlMjAxMDMuNTUxJTIwMS44MDE3OUMxMDMuNTUxJTIwMi4wNjgzJTIwMTAzLjQxOCUyMDIuMjY4MTklMjAxMDMuMjE4JTIwMi4zMzQ4MkwxMDMuNDg0JTIwMi42Njc5NkMxMDMuNTI5JTIwMi43MTIz''@;'; put 'put ''NyUyMDEwMy41NTElMjAyLjc1Njc5JTIwMTAzLjU1MSUyMDIuODAxMjFDMTAzLjU1MSUyMDIuOTM0NDYlMjAxMDMuNDg0JTIwMy4wMDEwOSUyMDEwMy4zNTElMjAzLjAwMTA5QzEwMy4yODQlMjAzLjAwMTA5JTIwMTAzLjIxOCUyMDIuOTM0NDclMjAxMDMuMTUxJTIwMi44Njc4NEwxMDIuNzUx''@;'; put 'put ''JTIwMi40MDE0NEgxMDIuNDE4VjIuODAxMjFDMTAyLjQxOCUyMDIuOTM0NDYlMjAxMDIuMzUyJTIwMy4wMDEwOSUyMDEwMi4yMTglMjAzLjAwMTA5QzEwMi4wODUlMjAzLjAwMTA5JTIwMTAyLjAxOSUyMDIuOTM0NDYlMjAxMDIuMDE5JTIwMi44MDEyMVYxLjQwODY5SDEwMi4wODVWMS40MDIw''@;'; put 'put ''M1pNMTAyLjg3OCUyMDIuMTI4MjdDMTAzLjA3OCUyMDIuMTI4MjclMjAxMDMuMjExJTIwMS45OTUwMiUyMDEwMy4yMTElMjAxLjg2MTc2QzEwMy4yMTElMjAxLjY2MTg4JTIwMTAzLjA3OCUyMDEuNTk1MjUlMjAxMDIuODc4JTIwMS41OTUyNUgxMDIuNDc4VjIuMTI4MjdIMTAyLjg3OFolMjIl''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tbG9nby1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxv''@;'; put 'put ''Z2luIC5sb2dpbi1mb290ZXJ7Z2FwOnZhcigtLWNsci1sb2dpbi1mb290ZXItZ2FwKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciBhLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVyIC5jb3B5cmlnaHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWJvZHl7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVt''@;'; put 'put ''bjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi10aXRsZS1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAud2VsY29tZXtjb2xvcjp2YXIoLS1jbHItbG9naW4td2VsY29tZS1jb2xvcik7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuc3VidGl0bGUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuaGludHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1sb2dpbi1oaW50LWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLnRyYWRlbWFya3tjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0KTtmb250LWZhbWlseTp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1sb2dpbi10cmFk''@;'; put 'put ''ZW1hcmstbGV0dGVyLXNwYWNpbmcpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAu''@;'; put 'put ''bG9naW4tZ3JvdXAgLmF1dGgtc291cmNlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnBhc3N3b3JkLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNoZWNrYm94LC5sb2dp''@;'; put 'put ''bi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWFyZ2luOjAgMCB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEzKSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlcj4uY2xyLWlucHV0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cHttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91''@;'; put 'put ''cD4uY2xyLWlucHV0e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmxvZ2luLXdyYXBwZXIg''@;'; put 'put ''LmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb24gLnBhc3N3b3Jke3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4tZ3JvdXAgLmVycm9ye2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpub25lO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1l''@;'; put 'put ''cnJvci1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEw''@;'; put 'put ''MCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yOmJlZm9yZXtjb250ZW50OiIiO21hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24l''@;'; put 'put ''M0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUy''@;'; put 'put ''Mmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0Ul''@;'; put 'put ''M0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMl''@;'; put 'put ''MkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUy''@;'; put 'put ''MiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb3ZlcjttYXNrLXNpemU6Y292ZXI7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1jb2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFwcGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91''@;'; put 'put ''bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIwJX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1A''@;'; put 'put ''bWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tn''@;'; put 'put ''cm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAw''@;'; put 'put ''IHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29udGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4wNXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250''@;'; put 'put ''ZW50LWFyZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHkubm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJv''@;'; put 'put ''ZHkubm8tc2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290''@;'; put 'put ''IFtjZHMtdGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFj''@;'; put 'put ''a2dyb3VuZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMo''@;'; put 'put ''ODY0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1t''@;'; put 'put ''ZC13aWR0aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhse3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRl''@;'; put 'put ''eDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVh''@;'; put 'put ''ZGVyLC5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIp''@;'; put 'put ''fX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5zaWRlLXBhbmVsIC5tb2RhbHtsZWZ0OmluaXRpYWw7cGFkZGluZzowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVye2hlaWdodDoxMDAlfS5z''@;'; put 'put ''aWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVyIC5tb2RhbC1jb250ZW50e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1kaWFsb2d7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2hlaWdo''@;'; put 'put ''dDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntpbnNldDowO3BhZGRpbmc6MH0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntmbGV4OjEgMTttYXgtaGVpZ2h0OjEwMCV9Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4''@;'; put 'put ''OjEwNTA7d2lkdGg6dmFyKC0tY2xyLW1vZGFsLW1kLXdpZHRoKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3cpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IpO21heC13aWR0aDoxMDAlfS5tb2RhbC1kaWFsb2cubW9kYWwtc217d2lkdGg6dmFyKC0tY2xyLW1v''@;'; put 'put ''ZGFsLXNtLXdpZHRoKX0ubW9kYWwtZGlhbG9nLm1vZGFsLWxne3dpZHRoOnZhcigtLWNsci1tb2RhbC1sZy13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC14bHt3aWR0aDp2YXIoLS1jbHItbW9kYWwteGwtd2lkdGgpfS5tb2RhbC1oZWFkZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyKy5tb2RhbC1mb290ZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSsubW9kYWwtZm9vdGVye3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxl''@;'; put 'put ''IC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGV7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''dGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjowfS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlciAuc2lkZS1w''@;'; put 'put ''YW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSl7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLW1vZGFsLXRpdGxl''@;'; put 'put ''LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZyl9Lm1vZGFs''@;'; put 'put ''LWhlYWRlciAuY2xvc2UsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UsLm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7Zm9udC1zaXplOmluaXRpYWw7bGluZS1oZWlnaHQ6aW5pdGlhbH0ubW9kYWwtaGVhZGVyIC5jbG9z''@;'; put 'put ''ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwt''@;'; put 'put ''aGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1tb2RhbC1jbG9zZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJs''@;'; put 'put ''ZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1ob3Zlcil9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vz''@;'; put 'put ''c2libGUgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1vZGFsLXRpdGxlLXdyYXBwZXJ7ZmxleDoxfS5tb2RhbC10aXRsZS13cmFwcGVyIC5tb2RhbC10aXRsZSBoMywubW9kYWwtdGl0bGUtd3JhcHBlciAuc2lkZS1wYW5l''@;'; put 'put ''bC10aXRsZSBoM3ttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0Ojcwdmg7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5tb2RhbC1ib2R5LXdyYXBwZXIgLm1vZGFsLWJvZHksLm1vZGFsLWJvZHktd3JhcHBlciAuc2lkZS1wYW5lbC1ib2R5e2Nv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0ubW9kYWwtYm9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHkt''@;'; put 'put ''d3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1mb290ZXIsLnNpZGUtcGFuZWwtZm9vdGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm1vZGFsLWZvb3RlciAuYnRuLC5zaWRlLXBhbmVsLWZvb3RlciAuYnRue21hcmdpbjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsu''@;'; put 'put ''bW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0OjU1dmh9fS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yKTt6LWluZGV4OjEwNDB9Lm1vZGFsIC5tb2RhbC1uYXZ7ZGlzcGxheTpub25lfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwt''@;'; put 'put ''c2NyZWVuIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjF9Lm1vZGFsLm1vZGFsLWZ1bGwtc2Ny''@;'; put 'put ''ZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtYm9keS13cmFwcGVyLC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAu''@;'; put 'put ''bW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5e2ZsZXgtZ3JvdzoxO21heC1oZWlnaHQ6MTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1oZWFkZXItaGVpZ2h0OmNhbGMoNjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2xyLWhlYWRlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwKTstLWNsci1oZWFkZXItMi1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0t''@;'; put 'put ''Y2xyLWhlYWRlci0zLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwKTstLWNsci1oZWFkZXItNC1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpOy0tY2xyLWhlYWRlci01LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTctYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKTstLWNsci1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAp''@;'; put 'put ''Oy0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRl''@;'; put 'put ''ci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNl''@;'; put 'put ''YXJjaC1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1oZWFkZXItc2VhcmNoLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNs''@;'; put 'put ''ci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tNDAwKTstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCBIaWdobGlnaHQ7LS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dyYXB9aGVhZGVyLmhlYWRlci0xLC5oZWFkZXIuaGVhZGVyLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTIsLmhlYWRlci5oZWFkZXItMntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNCwuaGVhZGVyLmhlYWRlci00e2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci00LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTUsLmhlYWRlci5oZWFkZXItNXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLTYtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNywuaGVhZGVyLmhlYWRlci03e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci03LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTgsLmhlYWRlci5oZWFkZXItOHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjE3MWN9aGVh''@;'; put 'put ''ZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6Y2FsYygyMDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWhlYWRlciAuYnJhbmRpbmc+YSxo''@;'; put 'put ''ZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5hLC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9aGVhZGVyIC5icmFuZGluZz5hOmZvY3VzLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9aGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24saGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjZHMt''@;'; put 'put ''aWNvbiwuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGlu''@;'; put 'put ''ZyAudGl0bGV7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKTtmb250LWZhbWlseTp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10''@;'; put 'put ''ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9aGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHIt''@;'; put 'put ''aWNvbiwuaGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1j''@;'; put 'put ''b2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLW5h''@;'; put 'put ''diAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpk''@;'; put 'put ''aXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2Fi''@;'; put 'put ''bGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2xy''@;'; put 'put ''LWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbiwu''@;'; put 'put ''aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIGNsci1pY29ue2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsaGVhZGVyIC5oZWFkZXItYWN0''@;'; put 'put ''aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0e2dh''@;'; put 'put ''cDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29u''@;'; put 'put ''LXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24t''@;'; put 'put ''dGV4dCBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1p''@;'; put 'put ''Y29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xy''@;'; put 'put ''LWljb257dHJhbnNmb3JtOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYt''@;'; put 'put ''dGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6''@;'; put 'put ''bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1z''@;'; put 'put ''cGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cyxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''bmF2IC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmhlYWRlci1uYXYsLmhlYWRlciAuaGVhZGVyLW5hdntkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eDowIDAgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBle3Bvc2l0''@;'; put 'put ''aW9uOnJlbGF0aXZlfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItYWN0aW9ucywuaGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz46''@;'; put 'put ''bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+Om5vdCguZHJvcGRvd24pOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlOmJlZm9yZSwuaGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5k''@;'; put 'put ''cm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xv''@;'; put 'put ''cil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rp''@;'; put 'put ''b25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVke2N1cnNvcjpub3Qt''@;'; put 'put ''YWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1h''@;'; put 'put ''bmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5v''@;'; put 'put ''dChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpu''@;'; put 'put ''b3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWlj''@;'; put 'put ''b24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2xlZnQ6YXV0bztyaWdodDowfWhlYWRlciAuc2VhcmNoLWJveCxoZWFkZXIgLnNlYXJjaCwuaGVhZGVyIC5zZWFyY2gtYm94LC5oZWFkZXIgLnNlYXJjaHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1''@;'; put 'put ''dG87bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNlYXJjaC1ib3g6aG92ZXIsaGVhZGVyIC5zZWFyY2g6aG92ZXIsLmhl''@;'; put 'put ''YWRlciAuc2VhcmNoLWJveDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxl''@;'; put 'put ''ZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsaGVhZGVyIC5zZWFyY2g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dG9wOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bGVmdDphdXRvfWhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFyY2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNo''@;'; put 'put ''IGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApO21hcmdpbi1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLXJp''@;'; put 'put ''Z2h0KTt0ZXh0LWFsaWduOmNlbnRlcn1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlM0UlM0Nk''@;'; put 'put ''ZWZzJTNFJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzZmZmZmZmJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTNDdGl0bGUlM0VTZWFyY2glM0MlMkZ0aXRsZSUzRSUzQ2clMjBpZCUzRCUyMmljb25zJTIyJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBk''@;'; put 'put ''JTNEJTIyTTE1JTJDNC4wNUExMC45NSUyQzEwLjk1JTJDMCUyQzElMkMxJTJDNC4wNSUyQzE1JTJDMTElMkMxMSUyQzAlMkMwJTJDMSUyQzE1JTJDNC4wNU0xNSUyQzJBMTMlMkMxMyUyQzAlMkMxJTJDMCUyQzI4JTJDMTUlMkMxMyUyQzEzJTJDMCUyQzAlMkMwJTJDMTUlMkMyWiUyMiUyRiUz''@;'; put 'put ''RSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwJTIwZCUzRCUyMk0zMy43MSUyQzMyLjI5bC03LjM3LTcuNDItMS40MiUyQzEuNDElMkM3LjM3JTJDNy40MmExJTJDMSUyQzAlMkMxJTJDMCUyQzEuNDItMS40MVolMjIlMkYlM0UlM0MlMkZnJTNFJTNDJTJGc3ZnJTNFKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowO21hcmdpbi1yaWdodDpjYWxjKC0xKih2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgdmFyKC0t''@;'; put 'put ''Y2xyLWhlYWRlci1zZWFyY2gtZ2FwKSkpfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCBpbnB1dCxoZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dHtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpO21hcmdpbjphdXRvfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRd''@;'; put 'put ''e2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWlucHV0LWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3Bh''@;'; put 'put ''ZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgMip2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIg''@;'; put 'put ''LnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2Vh''@;'; put 'put ''cmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbCwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVy''@;'; put 'put ''IC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXN7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMHMgNjAwMDAwcyxjb2xvciAwcyA2MDAwMDBzO3Ry''@;'; put 'put ''YW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBzIDYwMDAwMHN9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLC5oZWFkZXIgLnNlYXJjaC1i''@;'; put 'put ''b3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlcixoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTpob3Zlcntib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxle291dGxpbmU6MDtib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZSl9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0''@;'; put 'put ''W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06YWN0aXZlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0''@;'; put 'put ''eXBlPXRleHRdOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06YWN0aXZle2JhY2tncm91bmQ6MCAwfWhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmcrLnNlYXJjaCxoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94LC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3h7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOm5vbmU7ZGlzcGxheTpub25lfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94''@;'; put 'put ''IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjB9fWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXJlZ3VsYXIpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC0uMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9YTpu''@;'; put 'put ''b3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1h''@;'; put 'put ''Y3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay1ob3Zlci1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlu''@;'; put 'put ''azpob3ZlciBjZHMtaWNvbixhOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRu''@;'; put 'put ''LC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbGluay1hY3RpdmUtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwu''@;'; put 'put ''YWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1h''@;'; put 'put ''Om5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpo''@;'; put 'put ''b3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVyKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4s''@;'; put 'put ''Lm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9YS5saW5rLW5vcm1hbDpsaW5re2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1saW5rLWNvbG9yKX1hLmxpbmstaG92ZXJlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YS5saW5rLXZpc2l0ZWQ6bGlua3tjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGluay12aXNpdGVkLWNvbG9yKX1hLmxpbmstdmlzaXRlZC1ob3ZlcjpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfS5uYXZ7ZGlzcGxheTpmbGV4O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2dhcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5uYXYgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1pdGVtLmFjdGl2ZT4ubmF2LWxpbmt7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcik7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0fS5uYXYgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2IC5uYXYtbGluay5idG57dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MCAwIGNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXJhZGl1czowfS5uYXYgLm5hdi1saW5rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1uYXYtbGluay1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29s''@;'; put 'put ''b3IpfS5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZSwubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbSAuMnMgZWFzZS1pbn0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywu''@;'; put 'put ''bmF2IC5uYXYtbGluazphY3RpdmUsLm5hdiAubmF2LWxpbmsuYWN0aXZle3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKX0ubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0ubmF2IC5uYXYtbGluay5uYXYt''@;'; put 'put ''aXRlbXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LnN1Yi1uYXYsLnN1Ym5hdntkaXNwbGF5OmZsZXg7Ym94LXNo''@;'; put 'put ''YWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCBoc2woMTk4LCAwJSwg''@;'; put 'put ''ODAlKSkgaW5zZXQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdWItbmF2IC5uYXYsLnN1Ym5hdiAubmF2''@;'; put 'put ''e2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3ViLW5hdiAubmF2LWl0ZW0sLnN1Yi1uYXYgLm5hdi1pdGVtIGEsLnN1Ym5hdiAubmF2LWl0ZW0sLnN1Ym5hdiAubmF2LWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uc3ViLW5hdiBhc2lkZSwuc3VibmF2IGFzaWRle2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci12ZXJ0aWNhbC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1yaWdodC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNh''@;'; put 'put ''cmV0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRl''@;'; put 'put ''bS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxl''@;'; put 'put ''Y3RlZC1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJh''@;'; put 'put ''Y2tncm91bmQtc2hhZGUtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24t''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRy''@;'; put 'put ''aWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCk7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItY29sbGFwc2VkLW1hcmdpbjptaXhpbnMuYmFzZWxpbmVQeCgzKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt3aWxsLWNoYW5nZTp3''@;'; put 'put ''aWR0aDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLWluLW91dH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJp''@;'; put 'put ''Z2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1h''@;'; put 'put ''Y3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3Ry''@;'; put 'put ''YW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNv''@;'; put 'put ''bnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10''@;'; put 'put ''ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6''@;'; put 'put ''ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9''@;'; put 'put ''YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIg''@;'; put 'put ''Y2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdn''@;'; put 'put ''ZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dl''@;'; put 'put ''ci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmds''@;'; put 'put ''ZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBj''@;'; put 'put ''ZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFs''@;'; put 'put ''bCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRy''@;'; put 'put ''aWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRleHR7ZmxleDoxIDEgYXV0bzt3aGl0''@;'; put 'put ''ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2Rpc3BsYXk6ZmxleDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWhlYWRlcntwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7''@;'; put 'put ''YWxpZ24tc2VsZjpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci12ZXJ0aWNhbC1uYXYgY2xyLXZlcnRpY2FsLW5hdi1ncm91cC1jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''IC5uYXYtYnRue2ZsZXg6MSAxIGF1dG87cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXY+Lm5h''@;'; put 'put ''di1saW5rLC5jbHItdmVydGljYWwtbmF2IC5uYXYtY29udGVudD4ubmF2LWxpbmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXIgLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb24rLm5hdi1ncm91cC10ZXh0e3BhZGRpbmctbGVm''@;'; put 'put ''dDowfS5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtY29udGVudD4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAu''@;'; put 'put ''bmF2LWdyb3VwLXRyaWdnZXJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXRvcC1sZXZlbC1mb250LXdlaWdodCl9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFz''@;'; put 'put ''LWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmc6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNoaWxkLXBhZGRpbmcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudHtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rOmhvdmVyfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6YWN0''@;'; put 'put ''aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2Om5vdCguaXMtY29sbGFwc2VkKSAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2Vye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3Zl''@;'; put 'put ''cmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWR7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWF4''@;'; put 'put ''LXdpZHRoOmNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpICsgY2FsYygxNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO2N1cnNvcjpwb2ludGVyfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtaWNvbnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubWFpbi1jb250YWluZXI6''@;'; put 'put ''bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdp''@;'; put 'put ''ZHRoKX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rfi5uYXYtZ3JvdXAtdHJpZ2dl''@;'; put 'put ''cntmbGV4OjAgMCBjYWxjKHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemUpICsgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbikpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6''@;'; put 'put ''ZSkpKTtwb2ludGVyLWV2ZW50czpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGluaywubWFpbi1jb250YWluZXI6''@;'; put 'put ''bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXJ7cGFkZGluZzowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJm''@;'; put 'put ''bG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtj''@;'; put 'put ''bGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb24ubmF2LWdyb3VwLXRyaWdnZXItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7d2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tbGVmdDpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWxpbmt7ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29s''@;'; put 'put ''bGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2t9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25z''@;'; put 'put ''IC5uYXYtbGlua3tkaXNwbGF5OmZsZXh9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXAtdGV4dCwu''@;'; put 'put ''bWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgs''@;'; put 'put ''MXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYt''@;'; put 'put ''dHJpZ2dlcntvcmRlcjoyO21hcmdpbi10b3A6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JheS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMtMTAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXJhZGl1cy0xMDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhv''@;'; put 'put ''dmVyLC5jbHItbmF2LWNsb3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFu''@;'; put 'put ''LC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwt''@;'; put 'put ''YWxpZ246bWlkZGxlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9w''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDow''@;'; put 'put ''IDB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmlnZ2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlk''@;'; put 'put ''ZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3Zl''@;'; put 'put ''cmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNCkpO3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2''@;'; put 'put ''ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhl''@;'; put 'put ''YWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dl''@;'; put 'put ''cjpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2FibGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGUoY2FsYygtMSpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVy''@;'; put 'put ''IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lk''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTIgLm5hdiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0''@;'; put 'put ''ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5h''@;'; put 'put ''di1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''Lm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZv''@;'; put 'put ''cmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFj''@;'; put 'put ''dGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3Vi''@;'; put 'put ''LW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6''@;'; put 'put ''aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6''@;'; put 'put ''aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5v''@;'; put 'put ''bmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3Jl''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtj''@;'; put 'put ''b250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNv''@;'; put 'put ''bG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0''@;'; put 'put ''aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEq''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIg''@;'; put 'put ''LmhlYWRlciAuYnJhbmRpbmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRp''@;'; put 'put ''b246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29s''@;'; put 'put ''b3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYu''@;'; put 'put ''Y2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsg''@;'; put 'put ''Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ct''@;'; put 'put ''bWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAu''@;'; put 'put ''bmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6''@;'; put 'put ''YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2Jv''@;'; put 'put ''dHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3Jk''@;'; put 'put ''ZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5r''@;'; put 'put ''LmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUg''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10''@;'; put 'put ''ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhlcml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+''@;'; put 'put ''Lm5hdi1saW5re292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1l''@;'; put 'put ''bnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmJyYW5kaW5nIC5jbHItdm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVk''@;'; put 'put ''O3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5t''@;'; put 'put ''YWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1''@;'; put 'put ''cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFu''@;'; put 'put ''c2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0''@;'; put 'put ''cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhl''@;'; put 'put ''ZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9w''@;'; put 'put ''ZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zv''@;'; put 'put ''cm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFt''@;'; put 'put ''YnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5h''@;'; put 'put ''di1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0ye3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmd7bWF4LXdpZHRoOmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0u''@;'; put 'put ''bWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lk''@;'; put 'put ''dGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7''@;'; put 'put ''cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0''@;'; put 'put ''bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHIt''@;'; put 'put ''YmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MTAwKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktdmlvbGV0KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRp''@;'; put 'put ''Y2FsLWFsaWduOm1pZGRsZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTtib3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2UtY29sb3IpfS5iYWRnZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRnZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5''@;'; put 'put ''LC5iYWRnZS5iYWRnZS0xe2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJhZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1v''@;'; put 'put ''cmFuZ2UsLmJhZGdlLmJhZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5i''@;'; put 'put ''YWRnZS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6''@;'; put 'put ''cm9vdCAuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMTAwMCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxl''@;'; put 'put ''ZCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1''@;'; put 'put ''ZSk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxh''@;'; put 'put ''YmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwt''@;'; put 'put ''c3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFi''@;'; put 'put ''ZWwtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGFiZWwtZm9udC1jb2xvci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsOmhhcyg+LmJhZGdlKSwubGFiZWw6aGFzKD5jZHMtaWNvbiksYS5sYWJlbDpoYXMoPi5iYWRnZSksYS5sYWJlbDpoYXMoPmNkcy1pY29uKXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMyl9LmxhYmVsIC5iYWRnZSwubGFiZWwgY2RzLWljb24sYS5sYWJlbCAuYmFkZ2UsYS5sYWJlbCBjZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWw6aGFzKC5iYWRnZSksYS5sYWJlbDpoYXMoLmJhZGdlKXtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0z''@;'; put 'put ''KX0ubGFiZWwuY2xpY2thYmxlOm5vdCg6aGFzKC50ZXh0KSksYS5sYWJlbC5jbGlja2FibGU6bm90KDpoYXMoLnRleHQpKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYWJlbC5jbGlja2FibGU+LnRleHQsYS5sYWJlbC5jbGlja2FibGU+LnRleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVy''@;'; put 'put ''bGluZX0ubGFiZWw6dmlzaXRlZCxhLmxhYmVsOnZpc2l0ZWR7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpfS5sYWJlbDpmb2N1cywubGFiZWw6aG92ZXIsLmxhYmVsOmFjdGl2ZSxhLmxhYmVsOmZvY3VzLGEubGFiZWw6aG92ZXIsYS5sYWJlbDphY3RpdmV7dGV4dC1k''@;'; put 'put ''ZWNvcmF0aW9uOm5vbmV9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3ZlcixhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yKX0ubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFi''@;'; put 'put ''ZWwtYmctYWN0aXZlLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0ubGFiZWwubGFiZWwtZ3JheSwubGFiZWwubGFiZWwtMSxhLmxhYmVsLmxhYmVsLWdyYXksYS5sYWJlbC5sYWJlbC0xe2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IpfS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZSxhLmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5sYWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0''@;'; put 'put ''aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWUsLmxhYmVsLmxhYmVsLTMsYS5sYWJlbC5sYWJlbC1ibHVlLGEubGFiZWwubGFiZWwtM3tib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13''@;'; put 'put ''aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ibHVlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZSwubGFiZWwubGFiZWwtNCxhLmxhYmVsLmxhYmVsLW9yYW5nZSxhLmxhYmVsLmxhYmVsLTR7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgp''@;'; put 'put ''IHNvbGlkIHZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdlLGEubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1saWdodC1ibHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGln''@;'; put 'put ''aHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvLGEubGFiZWwubGFiZWwtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbz4uYmFkZ2UsYS5sYWJl''@;'; put 'put ''bC5sYWJlbC1pbmZvPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9LmxhYmVsLmxhYmVsLXN1Y2Nlc3MsYS5sYWJlbC5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzPi5i''@;'; put 'put ''YWRnZSxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dy''@;'; put 'put ''b3VuZDp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC13YXJuaW5nLWJvcmRlci1jb2xvcil9Lmxh''@;'; put 'put ''YmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdlLGEubGFiZWwubGFiZWwtd2FybmluZz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfS5sYWJlbC5sYWJlbC1kYW5nZXIsYS5sYWJlbC5s''@;'; put 'put ''YWJlbC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJv''@;'; put 'put ''cmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1kYW5nZXI+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmxhYmVsPi5iYWRnZSxhLmxh''@;'; put 'put ''YmVsPi5iYWRnZXttYXJnaW46MH0ubGFiZWwuZGlzYWJsZWQsLmxhYmVsOmRpc2FibGVkLGEubGFiZWwuZGlzYWJsZWQsYS5sYWJlbDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmxhYmVsLmRpc2FibGVkIC5iYWRnZSwubGFiZWw6ZGlzYWJsZWQgLmJhZGdlLGEubGFiZWwuZGlzYWJsZWQgLmJhZGdl''@;'; put 'put ''LGEubGFiZWw6ZGlzYWJsZWQgLmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7LmxhYmVsLGEubGFiZWx7dmVydGljYWwtYWxpZ246Ym90dG9tfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1wcm9ncmVz''@;'; put 'put ''cy1kZWZhdWx0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFk''@;'; put 'put ''ZSk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdp''@;'; put 'put ''bjowO292ZXJmbG93OmhpZGRlbjttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1v''@;'; put 'put ''ei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYmctY29sb3IpO2JvcmRlcjow''@;'; put 'put ''O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpfS5wcm9ncmVzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjot''@;'; put 'put ''d2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcil9''@;'; put 'put ''LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVsZW1lbnR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXBy''@;'; put 'put ''b2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47Ym9yZGVyLXJhZGl1czowfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnBy''@;'; put 'put ''b2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1w''@;'; put 'put ''cm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sYWJlbGVkLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wcm9ncmVzcy1sYWJlbC1jb2xvcil9LnByb2dyZXNzLmxhYmVsZWQ+c3BhbiwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7bWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MuY29tcGFjdDpub3QoLmxhYmVsZWQpLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdDpub3QoLmxhYmVsZWQpe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5wcm9ncmVzcy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdC5sYWJlbGVkPi5wcm9ncmVzcy1tZXRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1mYWRlezAle29wYWNpdHk6MX10b3tv''@;'; put 'put ''cGFjaXR5OjB9fS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjNzIGxpbmVhciAuNXMgZm9yd2FyZHN9LnByb2dy''@;'; put 'put ''ZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzcywucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3N7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1vdXQgMXN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6''@;'; put 'put ''Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9n''@;'; put 'put ''cmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9LnBy''@;'; put 'put ''b2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXIsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcnstbW96LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFu''@;'; put 'put ''c2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1''@;'; put 'put ''ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGUuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC42cyBs''@;'; put 'put ''aW5lYXIgMXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12''@;'; put 'put ''YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0y''@;'; put 'put ''KX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1sb29wZXJ7MCV7bGVmdDotMTAwJX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9v''@;'; put 'put ''cD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlv''@;'; put 'put ''bjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3dp''@;'; put 'put ''ZHRoOjUwJX0ucHJvZ3Jlc3MubG9vcC5kYW5nZXI6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sb29wLndhcm5pbmc6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5w''@;'; put 'put ''cm9ncmVzcy5sb29wLnN1Y2Nlc3M6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZh''@;'; put 'put ''dWx0LWNvbG9yKTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2NvbnRlbnQ6IiAifS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jl''@;'; put 'put ''c3MtbWV0ZXJbZGF0YS12YWx1ZT0iMiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzIl06YmVmb3Jle3dpZHRoOjIlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjciXTpiZWZvcmV7d2lkdGg6NSV9''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwIl06YmVm''@;'; put 'put ''b3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjExIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEyIl06YmVmb3Jle3dpZHRoOjEwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRh''@;'; put 'put ''LXZhbHVlPSIxMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRl''@;'; put 'put ''cltkYXRhLXZhbHVlPSIxNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNyJdOmJlZm9yZXt3aWR0aDoxNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRp''@;'; put 'put ''Yz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjEiXTpiZWZvcmUsLnByb2dyZXNz''@;'; put 'put ''LXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjIiXTpiZWZvcmV7d2lkdGg6MjAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjIzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI0Il06''@;'; put 'put ''YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9''@;'; put 'put ''IjI3Il06YmVmb3Jle3dpZHRoOjI1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1t''@;'; put 'put ''ZXRlcltkYXRhLXZhbHVlPSIzMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMiJdOmJlZm9yZXt3aWR0aDozMCV9LnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzUiXTpiZWZvcmUsLnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzciXTpiZWZvcmV7d2lkdGg6MzUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM4''@;'; put 'put ''Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjQxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQyIl06YmVmb3Jle3dpZHRoOjQwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSI0NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NyJdOmJlZm9yZXt3aWR0aDo0NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDkiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTIiXTpiZWZv''@;'; put 'put ''cmV7d2lkdGg6NTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjUzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjU1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU3Il06YmVmb3Jle3dpZHRoOjU1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MiJdOmJlZm9yZXt3aWR0aDo2MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjMiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjYiXTpi''@;'; put 'put ''ZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjciXTpiZWZvcmV7d2lkdGg6NjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjY5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjcyIl06YmVmb3Jle3dpZHRoOjcwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NyJdOmJlZm9yZXt3aWR0aDo3''@;'; put 'put ''NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODAi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODIiXTpiZWZvcmV7d2lkdGg6ODAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjgzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9Ijg2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg3Il06YmVmb3Jle3dpZHRoOjg1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OCJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MSJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MiJdOmJlZm9yZXt3aWR0aDo5MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''OTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTYiXTpiZWZvcmV7d2lkdGg6OTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9Ijk3Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk5Il06YmVmb3Jle3dpZHRoOjk4JX0ucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMDAiXTpiZWZvcmV7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVye3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5wcm9ncmVzcy1zdGF0aWMuc3VjY2Vzcz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mtc3RhdGljLndhcm5pbmc+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYy5kYW5nZXI+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywu''@;'; put 'put ''Y2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3toZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMCAwfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy50b3AsLmNhcmQt''@;'; put 'put ''YmxvY2sgLnByb2dyZXNzLXN0YXRpYy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWMudG9we21hcmdpbi10b3A6MDt0b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSl9LmNhcmQtYmxvY2sgLnByb2dyZXNzPnByb2dyZXNz''@;'; put 'put ''LC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyLC5jYXJkLWZvb3RlciAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlfS5wcm9ncmVzcy1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MtYmxvY2s+KntmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucHJvZ3Jlc3MtYmxvY2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDow''@;'; put 'put ''fS5wcm9ncmVzcy1ibG9jaz5sYWJlbCwucHJvZ3Jlc3MtYmxvY2s+c3BhbnttYXgtd2lkdGg6MzMlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MsLnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1zdGF0aWN7ZmxleDowIDEgYXV0b30ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3Vwe2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6YXV0bztmbGV4OjAgMSBhdXRvO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3d7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3Mt''@;'; put 'put ''bGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvdz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLWxlZnQ6MDtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nre21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWJsb2NrIC5wcm9n''@;'; put 'put ''cmVzcy1ibG9jaz5sYWJlbHttYXgtd2lkdGg6MzMlfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7''@;'; put 'put ''bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jl''@;'; put 'put ''c3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5wcm9ncmVzcy1ibG9jaz5sYWJlbCw6cm9vdCAucHJvZ3Jlc3MtYmxvY2s+''@;'; put 'put ''bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1zcGlubmVy''@;'; put 'put ''LXNtYWxsLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTstLWNsci1zcGlubmVyLWluc2lkZS1idXR0b24tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXNwaW5uZXItbWVkaXVtLXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC00MDApOy0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7LS1jbHItc3Bpbm5lci1maWxsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0t''@;'; put 'put ''Y2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50KTstLWNsci1zcGlubmVyLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1zcGlubmVyLWZpbGwt''@;'; put 'put ''aW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApOy0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNil9LnNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1''@;'; put 'put ''bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdl''@;'; put 'put ''aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZp''@;'; put 'put ''bml0ZTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjA7dGV4dC1pbmRlbnQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5zcGlubmVyOmFmdGVye2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNw''@;'; put 'put ''aW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NsaXAtcGF0aDplbGxpcHNlKDEwMCUgNTMuNSUg''@;'; put 'put ''YXQgMCAwKTtib3JkZXI6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zdHJva2Utd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRp''@;'; put 'put ''dXM6dmFyKC0tY2xyLXNwaW5uZXItYm9yZGVyLXJhZGl1cyl9LnNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlu''@;'; put 'put ''bmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmls''@;'; put 'put ''bC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzKX0uc3Bpbm5lci5zcGlubmVyLW1ke2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSl9LnNwaW5uZXIuc3Bpbm5lci1tZDpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1tZDphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdp''@;'; put 'put ''ZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZSwuc3Bpbm5lci5zcGlubmVyLXNte2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21p''@;'; put 'put ''bi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0ZXIsLnNwaW5uZXIuc3Bpbm5lci1zbTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1zbTphZnRlcntoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1z''@;'; put 'put ''cGlubmVyLXNtYWxsLXN0cm9rZS13aWR0aCl9LnNwaW5uZXIuc3Bpbm5lci1pbmxpbmV7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1hcmdpbi1yaWdodCl9LnNwaW5uZXIuc3Bpbm5lci1pbnZlcnNlOmJlZm9yZXtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWludmVyc2U6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1i''@;'; put 'put ''b3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXIuc3Bpbm5lci1uZXV0cmFsLTA6YmVmb3Jle2JvcmRlci1jb2xvcjojMDAwfS5zcGlubmVyLnNwaW5uZXItbmV1dHJhbC0wOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWNvbG9yKTtib3JkZXItcmlnaHQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2FuaW1hdGlvbjpub25lO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdC''@;'; put 'put ''b3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53''@;'; put 'put ''My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxzZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIydHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzc0NzQ3NCUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJDMy4yOSUyQzE3LjI3YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZz''@;'; put 'put ''dmclM0UpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNrOmFmdGVyLC5zcGlubmVyLnNwaW5uZXItY2hlY2s6''@;'; put 'put ''YmVmb3Jle2JvcmRlcjowfS5idG4gLnNwaW5uZXJ7bWFyZ2luLXJpZ2h0OjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyl9LmJ0biAuc3Bpbm5lcjpiZWZvcmUsLmJ0biAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRvbi1zdHJva2Utd2lkdGgpfS5idG4taWNvbjpub3QoLmJ0bi1zbSkgLnNwaW5uZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmJlZm9yZSwuY2xyLXRy''@;'; put 'put ''ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoKX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xy''@;'; put 'put ''LXRhYmxlLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItdGFibGUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLW5vYm9yZGVyLWJvcmRlcndpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQpOy0t''@;'; put 'put ''Y2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwt''@;'; put 'put ''Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRhYmxlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItdGhlYWQtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRp''@;'; put 'put ''bnQpOy0tY2xyLXRhYmxlLWhlYWRlci1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00MDApOy0tY2xyLXRhYmxlLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDAgMCAwOy0tY2xyLXRoZWFkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFibGUtc21hbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NCk7LS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1mb250''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci10YWJsZS1saW5laGVpZ2h0Om1peGlucy5iYXNlbGluZVB4KDE0KTstLWNsci10YWJsZS1jZWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWNvbXBh''@;'; put 'put ''Y3Qtcm93LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZzpjYWxjKCAodmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCkgLSB2YXIoLS1jbHItdGFibGUtbGluZWhlaWdodCkpICogLjUgKX0udGFibGV7''@;'; put 'put ''Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGgsLnRhYmxlIHRke2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUg''@;'; put 'put ''dGgubGVmdCwudGFibGUgdGQubGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRhYmxlIHRoLmxlZnQ6Zmlyc3QtY2hpbGQsLnRhYmxlIHRkLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LnRhYmxlIHRoLnJpZ2h0LC50YWJsZSB0ZC5yaWdodHt0''@;'; put 'put ''ZXh0LWFsaWduOnJpZ2h0fS50YWJsZSB0ZHttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0udGFibGUgdGh7Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXIt''@;'; put 'put ''Ym90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxl''@;'; put 'put ''IHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1y''@;'; put 'put ''YWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMp''@;'; put 'put ''fS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hp''@;'; put 'put ''bGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS1jb21wYWN0IHRke21pbi1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qt''@;'; put 'put ''cm93LWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aGVhZCB0aHtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9t''@;'; put 'put ''OjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50''@;'; put 'put ''YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNo''@;'; put 'put ''aWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNo''@;'; put 'put ''aWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0''@;'; put 'put ''aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGls''@;'; put 'put ''ZCB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNl''@;'; put 'put ''bGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtbm9ib3JkZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowfS50YWJsZS50YWJs''@;'; put 'put ''ZS1ub2JvcmRlciB0aHtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQg''@;'; put 'put ''dGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoLC50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIg''@;'; put 'put ''dGQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10b29sdGlw''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC13ZWlnaHQpfS50b29sdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzp2aXNpYmxlfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowO3RyYW5zaXRp''@;'; put 'put ''b246b3BhY2l0eSAuM3MgbGluZWFyO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjEwNTB9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDotMjBweDtjb250ZW50OiIiO3otaW5kZXg6LTF9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCBs''@;'; put 'put ''aXtjb2xvcjppbmhlcml0fS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudHt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxfS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQ6ZW1wdHksLnRvb2x0aXA6Zm9jdXM+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudDplbXB0eXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LnRvb2x0aXA6Zm9jdXN7b3V0bGluZTowfS50b29sdGlwOmZvY3VzPjpmaXJzdC1jaGlsZHtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0''@;'; put 'put ''KTtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSl9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3Atcmln''@;'; put 'put ''aHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50''@;'; put 'put ''b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXIt''@;'; put 'put ''bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9t''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNv''@;'; put 'put ''bnRlbnQudG9vbHRpcC10b3AtbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIDUwJSAxMDAlIGF1dG87Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1yaWdodC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVu''@;'; put 'put ''dC50b29sdGlwLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29s''@;'; put 'put ''dGlwLWJvdHRvbS1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdo''@;'; put 'put ''dCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJh''@;'; put 'put ''ZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlw''@;'; put 'put ''LWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6MDtib3R0b206YXV0bztyaWdodDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJv''@;'; put 'put ''dHRvbS1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9v''@;'; put 'put ''bHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUgNTAlIGF1dG8gYXV0bztib3JkZXItdG9wLXJpZ2h0LXJhZGl1czow''@;'; put 'put ''O21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9t''@;'; put 'put ''LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodHtwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZTtpbnNldDo1MCUgYXV0byBhdXRvIDEwMCU7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRv''@;'; put 'put ''b2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0OmNhbGModmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSAxMDAlIGF1dG8gYXV0bztt''@;'; put 'put ''YXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi1yaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6''@;'; put 'put ''MDtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJh''@;'; put 'put ''bnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC14cz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC14c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRv''@;'; put 'put ''b2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLW1kPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLW1ke3dpZHRoOmNhbGMoMjQwKigxcmVt''@;'; put 'put ''L3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcD4uYnRuKy50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi10b3A6''@;'; put 'put ''Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pKX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpm''@;'; put 'put ''b2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1mb3Jtcy1iYXNlbGluZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWZvcm1zLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWZvcm0t''@;'; put 'put ''ZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtdGV4dC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLWludmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtdmFs''@;'; put 'put ''aWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDAp''@;'; put 'put ''Oy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMCk7LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1mb2N1c2VkLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXN1YnRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQt''@;'; put 'put ''d2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nOjAgY2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSAvIDMpOy0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0OmNhbGMoNCAqIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpOy0tY2xyLWZvcm1z''@;'; put 'put ''LWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNs''@;'; put 'put ''ci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''bGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYWRpby1jaGVja2VkLWRpc2FibGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXIt''@;'; put 'put ''YmFja2dyb3VuZC1zaGFkZSk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTcpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLWRpc2FibGVkOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5k''@;'; put 'put ''OnRyYW5zcGFyZW50Oy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZTpjYWxjKDEwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UpKSk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29u''@;'; put 'put ''dHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQg''@;'; put 'put ''LmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5n''@;'; put 'put ''ZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1jb250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZv''@;'; put 'put ''bnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4''@;'; put 'put ''dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vzc3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xv''@;'; put 'put ''cil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNwbGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNv''@;'; put 'put ''bntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''YmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9yaXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNvbnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3Qp''@;'; put 'put ''IC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1j''@;'; put 'put ''b250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lk''@;'; put 'put ''dGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUt''@;'; put 'put ''aWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1''@;'; put 'put ''bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVs''@;'; put 'put ''bC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFy''@;'; put 'put ''ZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHIt''@;'; put 'put ''Zm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xy''@;'; put 'put ''LWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qt''@;'; put 'put ''d3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRh''@;'; put 'put ''aW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2ZsZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdodDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1m''@;'; put 'put ''dWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpub3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5j''@;'; put 'put ''bHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpu''@;'; put 'put ''b25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWln''@;'; put 'put ''aHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJv''@;'; put 'put ''bC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25l''@;'; put 'put ''O2hlaWdodDpjYWxjKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpO2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KSouMTI1KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO2xlZnQ6Y2FsYyhjYWxjKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpKi41KTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7b3V0''@;'; put 'put ''bGluZTowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zm''@;'; put 'put ''c2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5j''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVy''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcil9LmNsci1jaGVja2JveC13''@;'; put 'put ''cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpkaXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmJlZm9yZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpk''@;'; put 'put ''aXNhYmxlZDppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtaW5kZXRlcm1pbmF0ZS1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZs''@;'; put 'put ''ZXh9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmUgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7d2lkdGg6YXV0b30uY2xyLWVycm9yIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlcjpub3QoLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIpIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNh''@;'; put 'put ''YmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdy''@;'; put 'put ''YXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257''@;'; put 'put ''bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29s''@;'; put 'put ''dXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUp''@;'; put 'put ''fS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNh''@;'; put 'put ''bGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDoxLjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFw''@;'; put 'put ''cGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0''@;'; put 'put ''dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNl''@;'; put 'put ''dDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1A''@;'; put 'put ''bWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3JhcHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''O21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtn''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNsci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5jbHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHIt''@;'; put 'put ''aW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUs''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSku''@;'; put 'put ''Y2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXpl''@;'; put 'put ''OjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3Jl''@;'; put 'put ''YWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQt''@;'; put 'put ''c2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2Jv''@;'; put 'put ''cmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3Jk''@;'; put 'put ''ZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNr''@;'; put 'put ''Z3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJl''@;'; put 'put ''bGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3JvdW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91''@;'; put 'put ''cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1''@;'; put 'put ''dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257Zmls''@;'; put 'put ''bDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNs''@;'; put 'put ''YXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6''@;'; put 'put ''bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAw''@;'; put 'put ''JSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xv''@;'; put 'put ''cikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNz''@;'; put 'put ''IC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWlucHV0LWdyb3VwOmhhcyhpbnB1dFtyZWFkb25seV0pLC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1pbnB1dC1ncm91cDpoYXMoaW5wdXRbcmVhZG9ubHldKSAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMsLmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dC1ncm91cCAu''@;'; put 'put ''Y2xyLWlucHV0LWdyb3VwLWFjdGlvbnN7ZGlzcGxheTpub25lfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXstd2Via2l0LWFwcGVhcmFuY2U6bm9u''@;'; put 'put ''ZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXJhZGlvLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxh''@;'; put 'put ''YmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05''@;'; put 'put ''KTtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9y''@;'; put 'put ''ZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyOi4wNXJlbSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpiZWZvcmV7Ym9yZGVyOjA7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hhZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZDpkaXNhYmxlZDpiZWZvcmV7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1zaGFkb3cpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkp''@;'; put 'put ''KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2Fi''@;'; put 'put ''bGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIC5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmVtcHR5e3BhZGRp''@;'; put 'put ''bmctbGVmdDowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXJhZGlv''@;'; put 'put ''LXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGMoNCp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFy''@;'; put 'put ''KC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVy''@;'; put 'put ''O3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVj''@;'; put 'put ''dDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6''@;'; put 'put ''ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0''@;'; put 'put ''aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpm''@;'; put 'put ''b2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFtt''@;'; put 'put ''dWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpo''@;'; put 'put ''b3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXIt''@;'; put 'put ''Y29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFw''@;'; put 'put ''cGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNl''@;'; put 'put ''bGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFu''@;'; put 'put ''ZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIl''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VD''@;'; put 'put ''YXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMx''@;'; put 'put ''JTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyOmhv''@;'; put 'put ''dmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OmNhbGModmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVj''@;'; put 'put ''dFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVs''@;'; put 'put ''dGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVy''@;'; put 'put ''LWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9u''@;'; put 'put ''LWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3IpfS5jbHItZXJyb3Igc2Vs''@;'; put 'put ''ZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5vLXJl''@;'; put 'put ''cGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItZXJyb3Igc2VsZWN0''@;'; put 'put ''Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1p''@;'; put 'put ''bnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxl''@;'; put 'put ''XSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0W211bHRpcGxl''@;'; put 'put ''XXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9s''@;'; put 'put ''LWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0OmhvdmVyLC5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdp''@;'; put 'put ''bi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItdGV4dGFy''@;'; put 'put ''ZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xv''@;'; put 'put ''cjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcil9LmNsci10ZXh0YXJlYTpk''@;'; put 'put ''aXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9y''@;'; put 'put ''ZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXRleHRhcmVhe2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLXRleHRhcmVhLXdyYXBw''@;'; put 'put ''ZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdp''@;'; put 'put ''ZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci10''@;'; put 'put ''b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1v''@;'; put 'put ''ZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2Fi''@;'; put 'put ''bGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1j''@;'; put 'put ''bHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10b2dnbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2p1c3RpZnktY29udGVudDpzdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xy''@;'; put 'put ''LXRvZ2dsZS13cmFwcGVyIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZsZXg6MSAxIGF1dG99LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtw''@;'; put 'put ''b3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmbGV4OjAgMCBhdXRvO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCl9LmNsci10b2dnbGUt''@;'; put 'put ''d3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9y''@;'; put 'put ''ZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yKTtsZWZ0OjA7''@;'; put 'put ''cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1p''@;'; put 'put ''bjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1c3tvdXRsaW5lOjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0''@;'; put 'put ''cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yLW9uKTt0cmFuc2l0''@;'; put 'put ''aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnQ7bGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7cmlnaHQ6MH0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCl7bGVmdDowfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRp''@;'; put 'put ''c2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3Jh''@;'; put 'put ''cHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNs''@;'; put 'put ''ci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbHtmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7bWFyZ2luLXRvcDowfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjB9LmNsci10b2dnbGUtcmlnaHQgLmNsci10b2dnbGUtd3JhcHBlcntmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtcmlnaHQgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRo''@;'; put 'put ''dW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNz''@;'; put 'put ''LWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xy''@;'; put 'put ''LXJhbmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3BhZGRpbmc6MDst''@;'; put 'put ''d2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRl''@;'; put 'put ''ci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBw''@;'; put 'put ''ZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1''@;'; put 'put ''dFt0eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVz''@;'; put 'put ''cy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1yYW5nZV17Ym9y''@;'; put 'put ''ZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7Ym9yZGVyOjA7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAl''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVsbHNjcmVlbiAu''@;'; put 'put ''Y2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciw6''@;'; put 'put ''cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9''@;'; put 'put ''cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdOjot''@;'; put 'put ''bXMtdHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2st''@;'; put 'put ''Y29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XTo6LXdl''@;'; put 'put ''YmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0uY2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1''@;'; put 'put ''JTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1kYXRh''@;'; put 'put ''bGlzdC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7cGFk''@;'; put 'put ''ZGluZy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9LmNsci1pbnB1''@;'; put 'put ''dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdy''@;'; put 'put ''YXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6LXdlYmtpdC1v''@;'; put 'put ''dXRlci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQt''@;'; put 'put ''c2VwYXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vw''@;'; put 'put ''LWljb24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJlci1pbnB1dC13''@;'; put 'put ''cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLW9wdGlv''@;'; put 'put ''bi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxl''@;'; put 'put ''Y3RlZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhbGVuZGFyLXRv''@;'; put 'put ''ZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''LWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1m''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsg''@;'; put 'put ''KDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6MTA1MH0uZGF0''@;'; put 'put ''ZXBpY2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lkdGg6Y2FsYyg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKX0uZGF0ZXBpY2tlci5oYXMtcmFuZ2Ut''@;'; put 'put ''b3B0aW9ue3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAr''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3toZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNSkpO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigtLWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3BsYXk6ZmxleDti''@;'; put 'put ''b3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigtLWNsci1idG4t''@;'; put 'put ''aG9yaXpvbnRhbC1tYXJnaW4pfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMoMTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5j''@;'; put 'put ''YWxlbmRhci1zd2l0Y2hlcnMsLnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4OjEgMSBhdXRv''@;'; put 'put ''O2JvcmRlci1zcGFjaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTExKX0ud2Vla2RheXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1idG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxpbmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxlbmRhci1idG46''@;'; put 'put ''YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3Ip''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6MH0uZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXktYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJn''@;'; put 'put ''KX0uZGF5LWJ0bjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNh''@;'; put 'put ''bGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwt''@;'; put 'put ''Zm9udC13ZWlnaHQpfS5kYXktYnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXIt''@;'; put 'put ''YWN0aXZlLWNlbGwtY29sb3IpfS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRl''@;'; put 'put ''ci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhjbHVkZWR7ZGlz''@;'; put 'put ''cGxheTpub25lfS5kYXktYnRuLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0uc3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0u''@;'; put 'put ''c3dpdGNoZXIgY2RzLWljb24sLnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1vbnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdnZXIueWVhci1y''@;'; put 'put ''YW5nZSwueWVhcnBpY2tlci10cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5tb250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEyKSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpKTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS55ZWFyc3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnRoLC55ZWFye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4t''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6Y2FsYyguNSpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5tb250aDpob3ZlciwueWVhcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5tb250aDphY3RpdmUsLnllYXI6YWN0aXZl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0ubW9udGguaXMtdG9kYXksLnllYXIuaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFy''@;'; put 'put ''KC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5tb250aC5pcy1zZWxlY3RlZCwubW9udGguaXMtc3RhcnQtcmFuZ2UsLm1vbnRoLmlzLWVuZC1yYW5n''@;'; put 'put ''ZSwueWVhci5pcy1zZWxlY3RlZCwueWVhci5pcy1zdGFydC1yYW5nZSwueWVhci5pcy1lbmQtcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yKX0u''@;'; put 'put ''bW9udGguaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2UpLC55ZWFyLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lm1vbnRoLmlzLWVuZC1yYW5nZTpub3QoLmlzLXN0''@;'; put 'put ''YXJ0LXJhbmdlKSwueWVhci5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ubW9udGguaXMtc2VsZWN0ZWQ6Zm9jdXMsLnllYXIuaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2''@;'; put 'put ''YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9Lm1vbnRoLmlzLWRpc2FibGVkLC55ZWFyLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5v''@;'; put 'put ''bmV9Lm1vbnRoLmlzLWRpc2FibGVkOmhvdmVyLC55ZWFyLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5tb250aHMsLnllYXJze3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lm1vbnRoe3RleHQtYWxpZ246Y2Vu''@;'; put 'put ''dGVyO2hlaWdodDpjYWxjKDUqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNvbWJvYm94LWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNvbWJvYm94LW1pbi13aWR0aDpjYWxjKDE2OCAqICgxcmVtIC8gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aDpjYWxjKDM2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1jb21ib2JveC1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLWNvbWJvYm94LXRleHQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWNvbWJvYm94LXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNv''@;'; put 'put ''bWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS02KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''aG92ZXIpOy0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItY29t''@;'; put 'put ''Ym9ib3gtcGlsbC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgMDstLWNsci1jb21ib2JveC1waWxsLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cy0xMDApfS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9se2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bGVmdDow''@;'; put 'put ''O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzKX0uY2xyLWZvY3Vze3dpZHRoOjEwMCV9LmNsci1lcnJvciAuY2xyLWZvY3Vz''@;'; put 'put ''LWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwKSArIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNikgKyB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KSkgMCB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9i''@;'; put 'put ''b3gtbWluLXdpZHRoKTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXR7cGFkZGluZzowO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dDpub3QoOmRp''@;'; put 'put ''c2FibGVkKXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4odmFyKC0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aCksMTAwJSk7cGFkZGluZy1ib3R0b206Y2FsYygzKigxcmVtL3ZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dC5jbHItY29tYm9ib3gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyLmludmFsaWR7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1j''@;'; put 'put ''b2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1yZW1vdmUtYnRue2JhY2tncm91bmQ6MCAw''@;'; put 'put ''O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5n''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQpO21hcmdpbjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW4pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94''@;'; put 'put ''LXBpbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXMpO2JvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIC5jbHItY29tYm9ib3gtcGlsbC1jb250ZW50e2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcik7cGFkZGluZzowfS5jbHItY29tYm9i''@;'; put 'put ''b3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbiwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb257bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFi''@;'; put 'put ''ZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbltzaGFwZT13aW5kb3ctY2xvc2VdLC5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbltzaGFwZT13aW5kb3ctY2xvc2Vde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyOm5vdCguZGlzYWJsZWQpOmhvdmVyLC5jbHItY29tYm9ib3gtd3JhcHBlcjpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC10cmlnZ2Vye3BhZGRpbmctbGVmdDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGlu''@;'; put 'put ''Zy1yaWdodCk7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjpjdXJyZW50Q29sb3I7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZHtjb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJvYm94LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC10''@;'; put 'put ''cmlnZ2VyLWZvbnQtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXIt''@;'; put 'put ''c3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDApO21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRpb246c3RhdGljO21heC1oZWlnaHQ6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkp''@;'; put 'put ''O292ZXJmbG93LXk6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5ne3BhZGRpbmc6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZy10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMt''@;'; put 'put ''ZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWNvbWJvYm94LW9wdGlvbntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0t''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQt''@;'; put 'put ''dHJhbnNmb3JtOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9w''@;'; put 'put ''dGlvbjpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb246aG92ZXIuYWN0aXZl''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpmb2N1c3t6LWlu''@;'; put 'put ''ZGV4OmluaGVyaXR9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''ZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6aG92ZXIsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNs''@;'; put 'put ''ci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6YWN0aXZlLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uY2xyLWZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmNsci1jb21ib2JveC1vcHRpb25z''@;'; put 'put ''IC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfX0uY2xyLWNvbWJvYm94LWRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZp''@;'; put 'put ''bHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdGFjay12aWV3LWJvcmRlci13''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDAp''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRh''@;'; put 'put ''YmxlLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBh''@;'; put 'put ''bmRhYmxlLXJvdy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1ob3Zlci1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFj''@;'; put 'put ''dGl2ZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLXN0YWNr''@;'; put 'put ''LXZpZXctcm93LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3Rh''@;'; put 'put ''Y2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplKTstLWNsci1zdGFjay12aWV3LXN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXct''@;'; put 'put ''c3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1iZy1jb2xvcik7''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5k''@;'; put 'put ''ZWQtcm93LWNvbG9yKX0uc3RhY2staGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAxIGF1dG87bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDA7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9uc3tkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2ZsZXg6MCAwIGF1dG99LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9ucyAuc3RhY2stYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uc3RhY2stdmlld3tvdmVyZmxvdy15OmF1dG87d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luLXRvcDowO2JvcmRl''@;'; put 'put ''cjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItcmFkaXVzKX0uc3RhY2stdmlldyBkZCwuc3RhY2stdmlldyBkdHttYXJnaW4t''@;'; put 'put ''aW5saW5lLXN0YXJ0OjA7bWFyZ2luLWxlZnQ6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtvdmVyZmxvdy15OmhpZGRlbjtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCk7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pfS5zdGFjay12aWV3Pi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0''@;'; put 'put ''LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jaGFuZ2VkOmJlZm9yZXtjb250ZW50OiIgIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MDt3aWR0aDowO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB2YXIoLS1j''@;'; put 'put ''bHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7YWxpZ24tc2VsZjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IpO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmcpO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWw6Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zdGFjay12aWV3IC5zdGFjay12aWV3LWtleXtmbGV4OjAgMSA0MCU7bWF4LXdpZHRoOjQwJTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc3RhY2stdmll''@;'; put 'put ''dyAuc3RhY2stYmxvY2stY2FyZXR7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7ZmxleDoxIDEgYXV0bzt3aWR0aDo2MCU7bWFyZ2luLWJvdHRvbTowfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbntmbGV4OjAgMCBhdXRvO3dpZHRoOjEw''@;'; put 'put ''MCV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9ja3tib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3Rh''@;'; put 'put ''Y2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCwuc3RhY2stdmlldyAu''@;'; put 'put ''c3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6cG9pbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNr''@;'; put 'put ''Z3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBdmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yKSUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNF''@;'; put 'put ''Q2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJD''@;'; put 'put ''MSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNr''@;'; put 'put ''LXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xvciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1i''@;'; put 'put ''bG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92ZXIpfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKX0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWx7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgp''@;'; put 'put ''O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKTtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0''@;'; put 'put ''YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpfS5zdGFjay12aWV3IC5z''@;'; put 'put ''dGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4''@;'; put 'put ''cGFuZGVkLWhvdmVyLXJvdy1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2Nr''@;'; put 'put ''LWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNh''@;'; put 'put ''cmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0ubW9kYWwgLnN0YWNrLXZpZXd7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IGNsci1zdGFjay1ibG9jay5zdGFjay1ibG9jay1leHBhbmRhYmxlIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7''@;'; put 'put ''Y29udGVudDpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmUsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTpub25l''@;'; put 'put ''fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10cmVlLWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVy''@;'; put 'put ''KTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItdHJlZS1saW5rLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0''@;'; put 'put ''aXZlKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci10cmVlLW5vZGUtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xv''@;'; put 'put ''cik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yKTstLWNs''@;'; put 'put ''ci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXRleHQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1zZWxlY3RlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0''@;'; put 'put ''ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''b3BhY2l0eS0wKX0uY2xyLXRyZWUtbm9kZXtkaXNwbGF5OmJsb2NrfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmt7cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2hlY2tib3h7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmct''@;'; put 'put ''ZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNv''@;'; put 'put ''bnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9k''@;'; put 'put ''ZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVl''@;'; put 'put ''LW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13''@;'; put 'put ''ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRh''@;'; put 'put ''aW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6''@;'; put 'put ''MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjB9LmNsci10cmVlLW5vZGUt''@;'; put 'put ''Y29udGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY2hlY2tib3h7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApKTtvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApfS5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1cyl9LmNsci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTApfS5jbHItdHJlZW5vZGUtY29udGVudDpub3QoOmhhcyguY2xyLXRyZWVub2RlLWxpbmspKXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29u''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUt''@;'; put 'put ''Y29udGVudC10ZXh0LW9ubHktY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0uY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3h7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNsci10cmVlbm9k''@;'; put 'put ''ZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5r''@;'; put 'put ''OmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1jaGVja2JveCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2Rl''@;'; put 'put ''LWxpbmsgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2ti''@;'; put 'put ''b3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbDphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2''@;'; put 'put ''ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpj''@;'; put 'put ''aGVja2VkKTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0e2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21hcmdpbjowO3BhZGRpbmc6MDtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcil9LmNsci10cmVlbm9kZS1jYXJldDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlLW5vZGUtY2FyZXQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLXNwaW5uZXIt''@;'; put 'put ''Y29udGFpbmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtwYWRkaW5nOmNhbGMoKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkqLjUpfS5jbHItdHJlZW5vZGUt''@;'; put 'put ''c3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLWNoaWxk''@;'; put 'put ''cmVue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpbGwtY2hhbmdlOmhlaWdodDtvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXRyZWVub2RlLWxpbmt7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5jbHItdHJlZW5vZGUtbGluazpob3Zlciwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbms6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZGF0YWdyaWQtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLXJvdy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3Vu''@;'; put 'put ''ZCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWFj''@;'; put 'put ''dGlvbi1wb3BvdmVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtcm93LXNl''@;'; put 'put ''bGVjdGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4t''@;'; put 'put ''c3dpdGNoLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zl''@;'; put 'put ''cik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1n''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci00MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwt''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVu''@;'; put 'put ''dC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1i''@;'; put 'put ''YWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1saW5lLWhlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1j''@;'; put 'put ''b2xvcik7LS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemU6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWRhdGFncmlkLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1h''@;'; put 'put ''cnJvdy1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldDpjYWxjKC0xICogdG9rZW5zLiRjZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZzptaXhpbnMuYmFzZWxpbmVQeCg5''@;'; put 'put ''KX0uZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyk7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFn''@;'; put 'put ''cmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ucmlnaHQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1jZWxse21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOnZhcigtLWNsci10aGVhZC1jb2xvcik7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hp''@;'; put 'put ''bGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlk''@;'; put 'put ''LXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQt''@;'; put 'put ''cm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNv''@;'; put 'put ''bXBhY3QgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZyl9LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFw''@;'; put 'put ''O3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLmNkay12aXJ0dWFsLXNjcm9sbGFibGUgLmRhdGFncmlkLXJvd3N7ZmxleC1ncm93OjB9LmRhdGFncmlkLW92ZXJmbG93LWVsbGlwc2lzIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscz4uZGF0YWdy''@;'; put 'put ''aWQtY2VsbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcp''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEwKX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1jb2xvcil9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiBzdmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0fS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVy''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWJvdHRvbWNlbGxwYWRkaW5nKX0uZGF0YWdyaWQtaGVhZGVyLC5kYXRhZ3JpZC1ib2R5LC5kYXRhZ3JpZC1yb3csLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY2VsbCwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6YmxvY2t9LmRhdGFncmlkLXJvd3tib3JkZXItdG9wLXN0eWxl''@;'; put 'put ''OnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1yb3c6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wOm5vbmV9LmRhdGFncmlkLXJvdzpob3Zlciwu''@;'; put 'put ''ZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZCwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkIC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc3RpY2t5e2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkOmhvdmVyLC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlLC5k''@;'; put 'put ''YXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdzphY3RpdmUsLmRhdGFncmlkLXJv''@;'; put 'put ''dzphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b257YmFja2dyb3VuZC1jb2xvcjp1bnNldH0uZGF0YWdyaWQtcm93LmRhdGFncmlk''@;'; put 'put ''LXJvdy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b24gLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRv''@;'; put 'put ''O2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRh''@;'; put 'put ''aWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtY29udGFpbmVye2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZm9udHNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJvcmRlcndpZHRoKSk7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3Qg''@;'; put 'put ''aW5wdXR7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kYXRh''@;'; put 'put ''Z3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAu''@;'; put 'put ''c2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LmRh''@;'; put 'put ''dGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6ZmxleDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRhdGFncmlkLXJv''@;'; put 'put ''dy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6LWluZGV4OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbDpsYXN0LWNoaWxkOmFm''@;'; put 'put ''dGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vk''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''bi1zZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFw''@;'; put 'put ''fS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlkLXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cg''@;'; put 'put ''bm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtYWN0aW9uLWJhcn4uZGF0YWdyaWQtc3Bpbm5lcntoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSk7dG9wOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7ei1pbmRleDo1MDJ9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93Omhv''@;'; put 'put ''dmVyLC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRpcmVjdGlvbjpyb3d9''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7ZGlzcGxheTpmbGV4O2ZsZXg6MSAx''@;'; put 'put ''IGF1dG87dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtv''@;'; put 'put ''dXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLXN0cmluZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLW51bWVyaWMtZmlsdGVye2Rpc3BsYXk6ZmxleDtvcmRlcjo5OTttYXJnaW4tbGVmdDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXR7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdy''@;'; put 'put ''aWQtZmlsdGVyLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNr''@;'; put 'put ''Z3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6''@;'; put 'put ''ZTpjb250YWlufWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNkcy1pY29uLC5kYXRhZ3JpZC10''@;'; put 'put ''YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmls''@;'; put 'put ''dGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3ot''@;'; put 'put ''YXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTt0''@;'; put 'put ''ZXh0LWFsaWduOmxlZnQ7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTpmbGV4fWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5idG57aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRp''@;'; put 'put ''dGxlIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDpjYWxjKC0xKjEwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlOmhvdmVy''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpO21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG87aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LXRpdGxlIC5zb3J0LWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjAgMCBhdXRvO3dpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3JkZXI6MTAwO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21h''@;'; put 'put ''cmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO3JpZ2h0OmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7Y3Vyc29yOmNvbC1yZXNpemU7aGVpZ2h0OmNhbGMoMTAwJSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci13aWR0aC0xMDApKTt6LWluZGV4OjUwMX1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLWhhbmRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAu''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2Vye3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2Rpc3BsYXk6bm9uZTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2hlaWdo''@;'; put 'put ''dDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7''@;'; put 'put ''Y3Vyc29yOmNvbC1yZXNpemV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0u''@;'; put 'put ''ZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIGRvdHRlZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1k''@;'; put 'put ''YXJrKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRh''@;'; put 'put ''Z3JpZC1zZWxlY3QsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1yb3ctYWN0aW9uc3ttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVt''@;'; put 'put ''bi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2JvcmRlcjowfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZmxleDowIDAgdmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTtt''@;'; put 'put ''YXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtcm93LWFjdGlvbnN7YmFja2dyb3VuZDowIDB9LmRh''@;'; put 'put ''dGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpj''@;'; put 'put ''ZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46''@;'; put 'put ''MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQt''@;'; put 'put ''Y2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRv''@;'; put 'put ''Z2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuY2xyLXRvZ2dsZS13cmFwcGVye21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3Bvc2l0aW9u''@;'; put 'put ''OnJlbGF0aXZlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXJ7ZmxleDoxIDEgYXV0bztk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpub25lO3dpZHRoOjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci5kYXRhZ3Jp''@;'; put 'put ''ZC1lbXB0eXtib3JkZXItdG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSk7Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItaW1hZ2V7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5k''@;'; put 'put ''LWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcyJTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1s''@;'; put 'put ''bnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUz''@;'; put 'put ''RCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVz''@;'; put 'put ''ZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIzMC45MDI1ODA4JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQl''@;'; put 'put ''M0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0xMCUyMiUyMHN0cm9rZSUzRCUyMiUyM0MxREZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIu''@;'; put 'put ''OCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4bGluayUzQWhyZWYlM0QlMjIlMjNwYXRoLTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''M0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIwTDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUx''@;'; put 'put ''LjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4yOTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQl''@;'; put 'put ''M0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDgl''@;'; put 'put ''MjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUy''@;'; put 'put ''MEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42JTJDMzQuODk5MjM2NSUyMEw1My45NzM0OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEy''@;'; put 'put ''LjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2MzcyMTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIwTDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkx''@;'; put 'put ''Nzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2Ul''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMuMzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjEx''@;'; put 'put ''JTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUyQzEyLjYzNTU4ODYlMjA1NC42JTJDMTIuMTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1''@;'; put 'put ''JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUyQzguOTI4NDEwMzQlMjA0OC4wMzEyMzcxJTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQl''@;'; put 'put ''MjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBD''@;'; put 'put ''NS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUyMDUuODA2MTQzNSUyQzEyLjYzNTU4ODYlMjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIy''@;'; put 'put ''MjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMxNy4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0''@;'; put 'put ''JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4zNTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgwNDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41''@;'; put 'put ''NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJD''@;'; put 'put ''Ny4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYuMzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAy''@;'; put 'put ''JTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUyMDExLjExNDU2MyUyQzguNTczMjQyMTklMjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYw''@;'; put 'put ''ODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0Ui''@;'; put 'put ''KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1zY3JvbGxhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMg''@;'; put 'put ''LmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25zKTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNl''@;'; put 'put ''bGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1y''@;'; put 'put ''ZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5kYXRhZ3JpZC1mb290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24t''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2xyLWRhdGFncmlkLWZvb3Rlci1wYWdpbmF0aW9u''@;'; put 'put ''LWdhcCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXple2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemUgLmNsci1wYWdlLXNpemUtc2VsZWN0e2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxs''@;'; put 'put ''Y2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3Zl''@;'; put 'put ''cnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtZm9vdGVyIC5j''@;'; put 'put ''b2x1bW4tc3dpdGNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTgpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1wYWRkaW5nKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtY29sb3IpO21hcmdpbjowfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2ds''@;'; put 'put ''ZS0tYWN0aW9uLmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmhv''@;'; put 'put ''dmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmFjdGl2ZSwuZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpkaXNhYmxlZDphY3RpdmV7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1h''@;'; put 'put ''Y3Rpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjphY3RpdmUsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1h''@;'; put 'put ''Y3Rpb246Zm9jdXN7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJs''@;'; put 'put ''ZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5kYXRhZ3JpZC1zcGlubmVye3Bv''@;'; put 'put ''c2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQpO3otaW5kZXg6NTkwfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2Vs''@;'; put 'put ''bC1jb21wYWN0LXBhZGRpbmcpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieSkpKX0uZGF0YWdy''@;'; put 'put ''aWQtY29tcGFjdCAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0''@;'; put 'put ''YWdyaWQtY2VsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKTt0cmFuc2Zvcm06dHJhbnNsYXRlWShj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCAuYmFkZ2V7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTEpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuc3Bpbm5lcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmRhdGFn''@;'; put 'put ''cmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfWJ1dHRvbi5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1j''@;'; put 'put ''YXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue21hcmdpbjowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNlbGx7cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cGFkZGluZy1ib3R0b206dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZyl9LmRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNkcy1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1leGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBlPWNoZWNr''@;'; put 'put ''LWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pLC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlciBjbHItaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJp''@;'; put 'put ''YW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtzaGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0''@;'; put 'put ''IC5kYXRhZ3JpZC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLXZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9''@;'; put 'put ''LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9u''@;'; put 'put ''e291dGxpbmUtb2Zmc2V0OnZhcigtLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVy''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAw''@;'; put 'put ''fS5wYWdpbmF0aW9uLWxpc3R7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2ZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kOjAgMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMtMTAwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudDpmb2N1cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0''@;'; put 'put ''aW9uLWN1cnJlbnQuY2xyLWZvY3Vze2JhY2tncm91bmQ6MCAwO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcil9LnBhZ2luYXRpb24tbGlzdD4q''@;'; put 'put ''e3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24tbGlzdCAucGFn''@;'; put 'put ''aW5hdGlvbi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5h''@;'; put 'put ''dGlvbi1sYXN0OmRpc2FibGVkLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXM6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0OmRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpO2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZDtvcGFjaXR5OjF9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbGFzdCwucGFnaW5h''@;'; put 'put ''dGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1idG4tY29sb3IpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5wYWdpbmF0aW9uLWxp''@;'; put 'put ''c3QgYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm97Ym9yZGVyOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7d2lkdGg6MDtmbGV4OjAgMCBhdXRvIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7ZGlzcGxheTpibG9jayFpbXBvcnRh''@;'; put 'put ''bnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfS5kYXRhZ3JpZC1p''@;'; put 'put ''bm5lci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0bzttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3Jh''@;'; put 'put ''cHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcj4uY2RrLXZpcnR1YWwtc2Ny''@;'; put 'put ''b2xsYWJsZSBkaXYuZGF0YWdyaWQtdGFibGV7b3ZlcmZsb3c6dW5zZXR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGNsci1kZy1jZWxse3dpZHRoOjEwMCUhaW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3Bl''@;'; put 'put ''bj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY29sdW1uOmZpcnN0LWNoaWxke3dpZHRoOmF1dG8haW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItcmln''@;'; put 'put ''aHQ6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7d2lkdGg6MzQlfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyLC5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcm93e2JvcmRlci1yaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRhdGFncmlkLWRldGFpbC1v''@;'; put 'put ''cGVuIC5wYWdpbmF0aW9ue3dpZHRoOjEwMCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3R7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdp''@;'; put 'put ''bi1yaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW57cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dG9wOmNhbGMoMTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjphZnRlcntjb250ZW50OiIi''@;'; put 'put ''O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7dG9wOmNhbGMoMTEqKDFyZW0v''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmRhdGFncmlkLWRldGFpbC1wYW5le21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFk''@;'; put 'put ''aXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYmctY29sb3IpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZsZXgt''@;'; put 'put ''Z3JvdzoyO3dpZHRoOjY2JX0uZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG87aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nKX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWJvZHl7ZmxleDoxIDEgYXV0bztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWln''@;'; put 'put ''aHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRp''@;'; put 'put ''dGxle2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZXtmbGV4OjEgMSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5''@;'; put 'put ''OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5re21pbi13aWR0aDphdXRvO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGluayBjZHMtaWNvbntoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7bWluLWhlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13''@;'; put 'put ''ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9YnV0dG9uLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZGV0YWlsLWNh''@;'; put 'put ''cmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmRpc2FibGVkIGNkcy1pY29uLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVuIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbntib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJl''@;'; put 'put ''dC1pY29uLW9wZW4tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRh''@;'; put 'put ''YmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDowO21pbi13aWR0aDp1''@;'; put 'put ''bnNldH0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsuZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlu''@;'; put 'put ''bmVyLXdyYXBwZXJ7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZXtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJv''@;'; put 'put ''cmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7d2lkdGg6Y2FsYygyNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxMDUwfS5jb2x1bW4t''@;'; put 'put ''c3dpdGNoIC5zd2l0Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1''@;'; put 'put ''YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5jb2x1bW4tc3dp''@;'; put 'put ''dGNoIC5zd2l0Y2gtaGVhZGVyIGgxLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgyLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgzLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg0LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg1LC5jb2x1bW4tc3dp''@;'; put 'put ''dGNoIC5zd2l0Y2gtaGVhZGVyIGg2e2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0uY29sdW1uLXN3aXRjaCAuc3dp''@;'; put 'put ''dGNoLWhlYWRlciBidXR0b257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXIt''@;'; put 'put ''Zm9udC1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWhvdmVyLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24g''@;'; put 'put ''Y2RzLWljb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWFjdGl2ZS1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50e21heC1oZWlnaHQ6Y2FsYygzMDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292''@;'; put 'put ''ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudCBsaXtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5idG57bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24tcmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZmlsdGVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3cp''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQt''@;'; put 'put ''ZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmU7Zm9udC1zaXplOnVuc2V0fS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1hcHBseXttYXJnaW4tYm90dG9tOjB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybXtkaXNwbGF5''@;'; put 'put ''OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSBpbnB1dC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KX0uZGF0YWdyaWQtZmls''@;'; put 'put ''dGVyIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gt''@;'; put 'put ''c2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2ZvbnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSk7Ym9yZGVyLXRvcDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9u''@;'; put 'put ''LWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKTtib3JkZXIt''@;'; put 'put ''cmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXRvcDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEpKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDpjYWxjKHZhcigt''@;'; put 'put ''LWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJm''@;'; put 'put ''bG93IC5hY3Rpb24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''YWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlcntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06aG92ZXIuYWN0aXZl''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7cG9p''@;'; put 'put ''bnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9''@;'; put 'put ''LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlz''@;'; put 'put ''YWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGV7ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LW1hc3RlciwuZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LWNsaWNrYWJsZXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxle2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0OmF1dG99LmRh''@;'; put 'put ''dGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXJ7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5k''@;'; put 'put ''YXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVy''@;'; put 'put ''LXN0eWxlOnNvbGlkO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvdyBjbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1o''@;'; put 'put ''b3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZC1ob3N0LmRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlk''@;'; put 'put ''LWZpeGVkLWNvbHVtbntkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBjbHItc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6LTIwMCV9fS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4t''@;'; put 'put ''b3V0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9w''@;'; put 'put ''YWNpdHksdHJhbnNmb3JtfS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uc2tlbGV0b24tbG9hZGluZzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRpbmctZ3JhZGllbnQpO2FuaW1hdGlvbjp2YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1za2VsZXRvbi1kdXJhdGlvbikgY2xyLXNrZWxldG9uLWxv''@;'; put 'put ''YWRpbmcgdmFyKC0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dCkgaW5maW5pdGU7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXdpemFy''@;'; put 'put ''ZC1tYWluLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1tYWluLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tY29sb3ItYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWNvbG9yLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7''@;'; put 'put ''LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7''@;'; put 'put ''LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWhvdmVyLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3Jv''@;'; put 'put ''dW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVycm9yLWljb24t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2ZS1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC10aXRsZS10ZXh0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQ6YXV0bzstLWNsci13aXph''@;'; put 'put ''cmQtaGVhZGVyLWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci13aXph''@;'; put 'put ''cmQtYm94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXdpemFyZC1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtYm94LXNoYWRvdyk7aGVpZ2h0OjUw''@;'; put 'put ''JTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKSAwO2JveC1zaGFkb3c6bm9uZTtwYWRkaW5nOjA7ZmxleDoyIDIgYXV0''@;'; put 'put ''bzt3aWR0aDo2NiU7aGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSAwfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7''@;'; put 'put ''d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAubW9kYWwtZm9vdGVy''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtmbGV4OjAgMCB2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTttYXgtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7cGFkZGluZzowIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG57bWFyZ2luOjA7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpibG9j''@;'; put 'put ''a30uY2xyLXdpemFyZCAubW9kYWwtdGl0bGUtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMSBhdXRvO3dpZHRoOjEwMCU7b3V0bGluZTowfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWhlYWRlci1hY3Rpb25z''@;'; put 'put ''LXdyYXBwZXJ7ZmxleDoxIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci13aXphcmQgLmNsci13aXphcmQt''@;'; put 'put ''aGVhZGVyLWFjdGlvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2JvcmRlcjow''@;'; put 'put ''O3BhZGRpbmc6MDttYXJnaW46MDttaW4td2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtsaW5lLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2NvbG9yOnZhcigtLWNsci13''@;'; put 'put ''aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcik7dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gYXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhl''@;'; put 'put ''YWRlci1hY3Rpb246aG92ZXIsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1c3tjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVyZWQpfS5jbHIt''@;'; put 'put ''d2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2hlaWdodDoxMDAlO3dpZHRoOjM0JTttYXgtd2lkdGg6MzQlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXk6YXV0''@;'; put 'put ''bztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''d2l6YXJkLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZzowIDAgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRl''@;'; put 'put ''LXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbXtkaXNwbGF5OmJsb2NrO2JvcmRlci1sZWZ0OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6''@;'; put 'put ''ZSkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yKTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSBidXR0b24uY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0aXZlLWJnY29s''@;'; put 'put ''b3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmst''@;'; put 'put ''aG92ZXItYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6YWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJk''@;'; put 'put ''LXN0ZXBuYXYtbGluay1hY3RpdmUtYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstdGl0bGV7d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOm5vcm1hbH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LWl0ZW0uY29tcGxldGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxl''@;'; put 'put ''dGUgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1jb21wbGV0ZS1pY29uLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3J7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcik7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmVycm9yIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1pY29uey0tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0''@;'; put 'put ''aDoxMDAlO2Rpc3BsYXk6ZmxleDtwbGFjZS1jb250ZW50Om5vcm1hbDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7aGVpZ2h0OmF1dG87''@;'; put 'put ''bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtd2lkdGg6aW5oZXJpdDtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1''@;'; put 'put ''bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHIt''@;'; put 'put ''d2l6YXJkLXN0ZXBuYXYtbGluay1pY29ue2Rpc3BsYXk6ZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlu''@;'; put 'put ''ay1wYWdlLW51bWJlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle21hcmdpbi10b3A6MDtmbGV4OjAgMCBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7cGFkZGluZzp2YXIoLS1jbHItd2l6YXJkLWRl''@;'; put 'put ''ZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXg6MSAx''@;'; put 'put ''IDEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtbmF2e2hlaWdodDphdXRvfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25ze3RleHQtYWxpZ246cmlnaHQ7bWFyZ2lu''@;'; put 'put ''OjB9LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJk''@;'; put 'put ''IC5jbHItd2l6YXJkLWJ0bi13cmFwcGVye2ZsZXg6MCAxIGF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJbYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi5idG4tbGlua3twYWRkaW5nOjB9LmNsci13aXphcmQg''@;'; put 'put ''LmNsci13aXphcmQtY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXBhZ2U6bm90KFthcmlhLWhpZGRlbj10cnVlXSl7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZofS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5LXdy''@;'; put 'put ''YXBwZXJ7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg1MDQq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJk''@;'; put 'put ''LndpemFyZC1sZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtY29udGVudCwu''@;'; put 'put ''Y2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFy''@;'; put 'put ''ZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZo''@;'; put 'put ''O21heC1oZWlnaHQ6bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMo''@;'; put 'put ''MzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpub3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXtsZWZ0OmNhbGMoNTAlICsgY2FsYygxMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKTtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt0b3A6NDAlfS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZD46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZHtwYWRkaW5nLXRv''@;'; put 'put ''cDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZD4uZm9ybS1ibG9jazpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtLWlubGluZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmNsci13aXphcmQtLWlubGluZT5jbHItbW9kYWw+Lm1vZGFsOmZvY3Vze291''@;'; put 'put ''dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50fS5jbHItd2l6YXJkLS1pbmxpbmUgY2xyLW1vZGFse2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbHtwYWRkaW5nOjA7cG9zaXRpb246c3RhdGljO2hl''@;'; put 'put ''aWdodDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVyIC5uYXYtcGFuZWx7aGVpZ2h0Ojk5JTt3aWR0aDo5OSV9LmNs''@;'; put 'put ''ci13aXphcmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWNvbnRlbnR7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDoxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDphdXRvfS5jbHItd2l6YXJkLS1pbmxp''@;'; put 'put ''bmUgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRp''@;'; put 'put ''YWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdy''@;'; put 'put ''YXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1o''@;'; put 'put ''ZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6''@;'; put 'put ''YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxl''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLndpemFyZC1pbi1wYWdlLndpemFyZC1pbi1wYWdlLS1maWxsLWNvbnRlbnQtYXJlYXtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDpjYWxjKDEwMCUgKyAyLjRyZW0pO21hcmdpbjotMS4ycmVtfS53aXphcmQtaW4tcGFnZSAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW57LmNsci13aXphcmQtcGFnZVthcmlhLWhp''@;'; put 'put ''ZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6Y2FsYygtMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fTpyb290IFtjZHMtdGhlbWVdey0t''@;'; put 'put ''Y2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFy''@;'; put 'put ''KC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVy''@;'; put 'put ''OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLXBzdWVkby1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHNldWRvLWJvcmRlcik7LS1jbHItc2ln''@;'; put 'put ''bnBvc3QtYm9yZGVyLXNpemU6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSl9LnNpZ25wb3N0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdDpob3ZlcntjdXJzb3I6cG9pbnRlcn0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKXttYXJnaW46MDtwYWRk''@;'; put 'put ''aW5nOjA7Ym9yZGVyLXdpZHRoOjA7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25w''@;'; put 'put ''b3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3Nl''@;'; put 'put ''KS5hY3RpdmUgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZlIGNsci1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2ZS1jb2xvcil9''@;'; put 'put ''LnNpZ25wb3N0IC5zaWducG9zdC1jb250ZW50LWhlYWRlciBidXR0b257bGluZS1oZWlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QtdHJpZ2dlcnttYXJnaW46MDtkaXNwbGF5OmlubGluZS1mbGV4fS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMik7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwfS5zaWducG9zdC1jb250ZW50OmhvdmVye2N1cnNvcjpkZWZhdWx0fS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''IC5wb3BvdmVyLXBvaW50ZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtjb250ZW50OiIiO2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxl''@;'; put 'put ''ZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2JvdHRvbTpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9w''@;'; put 'put ''LXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7Ym90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlk''@;'; put 'put ''ZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1z''@;'; put 'put ''aWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAu''@;'; put 'put ''cG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jl''@;'; put 'put ''e2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlk''@;'; put 'put ''ZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2Jv''@;'; put 'put ''cmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3Qt''@;'; put 'put ''Y29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQg''@;'; put 'put ''LnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlz''@;'; put 'put ''aWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25w''@;'; put 'put ''b3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20t''@;'; put 'put ''cmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNp''@;'; put 'put ''Z25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXIt''@;'; put 'put ''cG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcil9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRv''@;'; put 'put ''cCAucG9wb3Zlci1wb2ludGVye2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZv''@;'; put 'put ''cmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0u''@;'; put 'put ''c2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOjUwJX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9y''@;'; put 'put ''ZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNp''@;'; put 'put ''YmxlLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0''@;'; put 'put ''b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVy''@;'; put 'put ''LXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJl''@;'; put 'put ''Zm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNp''@;'; put 'put ''Z25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10''@;'; put 'put ''b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAlfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3Jk''@;'; put 'put ''ZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0''@;'; put 'put ''b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDt0b3A6MDtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXIgLnNpZ25w''@;'; put 'put ''b3N0LXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1yaWdodDphdXRvfS5zaWducG9zdC13cmFwe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIGNhbGMoMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50''@;'; put 'put ''LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtY29udGVudC1iZy1jb2xvcik7ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW59LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bWF4LWhlaWdodDpjYWxjKDQ1MCooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLWFjY29yZGlvbntkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOjA7d2lkdGg6MTAw''@;'; put 'put ''JTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246bGVmdH0uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWhvdmVyKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPmRpdj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''ci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD4uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVyLC5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVy''@;'; put 'put ''OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxk''@;'; put 'put ''IC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtm''@;'; put 'put ''bGV4OjEgMSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQ6MCAwO3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZsZXgtZmxvdzpyb3d9fS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRp''@;'; put 'put ''b24tc3RhdHVzLC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tdGl0bGUsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVs''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wfS5jbHItYWNjb3JkaW9uLXRpdGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOnZhcigtLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGgpO21heC13aWR0aDpjYWxjKDI2NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2lkdGg6MTAwJX0uY2xy''@;'; put 'put ''LWFjY29yZGlvbi1kZXNjcmlwdGlvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6Y2FsYyg2NTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDpjYWxjKDQw''@;'; put 'put ''KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNj''@;'; put 'put ''b3JkaW9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7ZGlzcGxheTpub25lfS5jbHItYWNjb3JkaW9uLWNvbnRlbnQgLmNsci1mb3JtLC5jbHItYWNjb3JkaW9uLWNvbnRlbnQubmctdHJpZ2dl''@;'; put 'put ''cntwYWRkaW5nOjB9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93OnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtY3Vy''@;'; put 'put ''cmVudC1pbmRpY2F0b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4gLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3Jk''@;'; put 'put ''ZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''cntiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVu''@;'; put 'put ''LWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVh''@;'; put 'put ''ZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2liaWxpdHk6dmlzaWJsZTt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24tY29tcGxldGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5''@;'; put 'put ''OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2Nv''@;'; put 'put ''cmRpb24tcGFuZWwtY29tcGxldGUgLm5nLXRyaWdnZXIuY2xyLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAg''@;'; put 'put ''dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24tZXJyb3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1udW1iZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24tbnVtYmVye3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRp''@;'; put 'put ''bmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFk''@;'; put 'put ''ZXIpe2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpe2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpKy5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uPi5jbHItYWNjb3JkaW9uLWNv''@;'; put 'put ''bnRlbnR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3Jt''@;'; put 'put ''cykgLmNsci1hY2NvcmRpb24tcGFuZWwrLmNsci1hY2NvcmRpb24tcGFuZWw+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnVuc2V0O2JvcmRlci10b3At''@;'; put 'put ''cmlnaHQtcmFkaXVzOnVuc2V0fS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOm5vdCg6bGFzdC1jaGlsZCk+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBw''@;'; put 'put ''ZXItaGVhZGVyKSwuY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpub3QoOmxhc3QtY2hpbGQpPmRpdltjbGFzcyo9Y2xyLWFjY29yZGlvbi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRl''@;'; put 'put ''cikrLmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24+LmNsci1hY2NvcmRpb24tY29udGVudHtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp1bnNldDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp1bnNldH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xy''@;'; put 'put ''LWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWZvbnQtc2l6ZSl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOmF1dG99LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNkcy1pY29uLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9u''@;'; put 'put ''LXN0YXR1cyBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MCFpbXBvcnRh''@;'; put 'put ''bnQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbTowIWltcG9ydGFudH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1hY2Nv''@;'; put 'put ''cmRpb24tdGV4dC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNl''@;'; put 'put ''bGVjdGVkKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTst''@;'; put 'put ''LWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2''@;'; put 'put ''ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1kYW5nZXIpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0''@;'; put 'put ''LWN1cnJlbnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OmNhbGMoNTYqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXN7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTEyKTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3Rl''@;'; put 'put ''cC1zdGF0dXM+LmNsci1zdGVwLWVycm9yLWljb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1jb21wbGV0ZS1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZzowfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1j''@;'; put 'put ''b21wbGV0ZS1jb2xvcil9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdp''@;'; put 'put ''ZHRoOmNhbGMoMjY0KjFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSk7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVyPi5jbHItc3RlcC1udW1iZXJ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOSl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLWFjY29yZGlvbi10aXRsZXttaW4td2lkdGg6aW5pdGlhbDttYXgtd2lkdGg6aW5pdGlhbDt3aWR0aDppbml0''@;'; put 'put ''aWFsO21hcmdpbi1sZWZ0OjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgp''@;'; put 'put ''ey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRv''@;'; put 'put ''bj4uY2xyLXN0ZXAtc3RhdHVze21pbi13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnt3aWR0aDppbml0aWFsfS5jbHItc3Rl''@;'; put 'put ''cHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4td2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjB9fS5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3Jt''@;'; put 'put ''cyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7ZGlzcGxheTpub25lfX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwLWJ1dHRvbnttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9Y2xyLXN0ZXBwZXItcGFuZWwgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''MSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGltZWxpbmUtbGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5lLWlu''@;'; put 'put ''Y29tcGxldGUtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdGltZWxpbmV7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttaW4td2lkdGg6Y2FsYygxNzUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWNpcmNsZV17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3Rl''@;'; put 'put ''cC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAg''@;'; put 'put ''Y2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdWNjZXNzLXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1l''@;'; put 'put ''cnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXJ7bWFyZ2luOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YWZ0ZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YmVmb3Jle2hlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5OmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpICsgdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpLGNhbGMoLS41Kih2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpKSl9LmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWJvdHRvbTp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5n''@;'; put 'put ''KTtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pO2xp''@;'; put 'put ''bmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOmlu''@;'; put 'put ''aXRpYWw7bWluLWhlaWdodDppbml0aWFsfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9c3Vj''@;'; put 'put ''Y2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZG90LWNpcmNs''@;'; put 'put ''ZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOmluaGVyaXR9LmNsci10aW1lbGluZS1zdGVwLXRpdGxle21hcmdpbjp2YXIo''@;'; put 'put ''LS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRp''@;'; put 'put ''bWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVs''@;'; put 'put ''aW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLS41Kih2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpIC0gdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpLGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0yMDApKSl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOmNhbGMoNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwIDB9LmNs''@;'; put 'put ''ci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2FsYygxNzgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItYnJlYWRjcnVtYi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9''@;'; put 'put ''LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOm5v''@;'; put 'put ''dCg6bGFzdC1jaGlsZCk6YWZ0ZXJ7Y29udGVudDoiLyI7bWFyZ2luOjAgdmFyKC0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZSk7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbTpsYXN0''@;'; put 'put ''LWNoaWxke2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWV4cGFuZHttYXJnaW46MDtwYWRkaW5nOjA7Z2FwOjA7bWluLXdpZHRoOi1tb3otZml0LWNvbnRlbnQ7bWluLXdpZHRoOmZpdC1jb250''@;'; put 'put ''ZW50fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGUWdBQk1BQUFBQW04QUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFB''@;'; put 'put ''QUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNhQUFBT2RqeStlamxIVTFWQ0FBQUpNQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxRQUFBQVRRQUFBR0JvUHF6clkyMWhjQUFBQ2FBQUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTURBQUFBREFB''@;'; put 'put ''QUFBOEVZNEJqR1p3WjIwQUFBdzhBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbmdBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZ0FBQU5uTUFBR2dVeEZJZ04yaGxZV1FBQUVqMEFBQUFOZ0FBQURZTFlZZ1VhR2hsWVFBQVNTd0FBQUFoQUFBQUpBZDJCREpvYlhSNEFBQkpVQUFBQW9nQUFBVHV1''@;'; put 'put ''UEkvRkd4dlkyRUFBRXZZQUFBQ2NnQUFBbnFKYW5Cd2JXRjRjQUFBVGt3QUFBQWdBQUFBSUFLRUFlbHVZVzFsQUFCT2JBQUFBWUlBQUFOV0xkQ0U5WEJ2YzNRQUFFL3dBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFVNVFBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJVR0FBQUFBWUFBQUFHOW5oWW1B''@;'; put 'put ''QUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNCYkZiVkZmN091ZmUrdi8w''@;'; put 'put ''TFdFb0xDQjBEVWhreFRXV0VTVVZHaVdNRnNWUERtRUVIWmx1Y1k2MVE3QmpaaURGS0hacWw2WXpERHBFMHFBeU1Oc0JRc1NLeXBxdk9PVWRrWTZZaFlGd0h5RFltMDduRkNQTDJ2Zk4rNkY5b3QvR0ZqOE81OTkxN3p6bmY3Ym1GQU1oaU1oWkM1dFhXTFVZQlBEMklZemorSTFDNGhtODNyVVRw''@;'; put 'put ''aW04Mk5hQjhSY09LQnM0Ry9jbG9PaU5oeCsreUdJMEptR0llaHdyVXVZNTBORnBscTByVWlvZ2Z5ZkRWL0dLYytRSktMMEJRRzdlU0EyYWpCWjhpbG5GUUhvUHpaS3djUVJHRzhXUi9qN3ZqN1hGdmZCUkQvSWsvR0hMa3Q0TjYrN2gzL3YrUHh6OGRjb1gzaGh3WitqeC9qUGNPTWJJOTdvdjNK''@;'; put 'put ''YmpJMzh1L3Ywa3cyQjV4SzdPa21NaE1UMkcyUGtjb3FnaUhxd2lQNlVUQUY0Z0lNNGtNcmlFS01Jc29aRzVuczFKckNNSDkrQkZuUGtnRVpyeUYvaGNJd1l1RTRDVkNjWkR3K0FQaGNaUUkrRE1SNFRnUjRUMGl3bWtpZ3crSURNNFFoYXplcDF3dEpySlNMTVVvbEJJcElaZEtLWGtjSzV2bDJ0''@;'; put 'put ''T29rZ3ArY3lVaGR1NzB4R29uZG5aaWJ5Y09tRWNVb0pZb3hBSWlpMFZFRVJyeGZhNlFSQkpaSkpGRkV2QVRQTXI1YlVRaGZvWk5uUDhFZnM3NTI0a2k3Q1F5MkVVVTRCZEVCcnVKQWp4SFpQQThVWUE5UkNFNmlVTHNKN0xvSXJMb0pyTG9JYko0bFJEOG1oRExUb1IzaUNMOGlVanpvcFlYdGJ4''@;'; put 'put ''NHkwdXd2QVRMaTdlOGVNdUxsekV5aHZtNlhDNG5KemtLWExXS0dackNHbGV4dHROWjA1bk16Q3htcEJHcmNEZWE4RDJzWmkzdnh6bzA0d0ZtNFVGR3Y1TVJQY2RLdnNnS0htVGxqckppeDFtcDB6ekpHYnRaeGR5M05MbGZlcS9kdzlla2lYRVBwN3IyVVhldDhiOEdVYXVOREhZSExveWNTakRJ''@;'; put 'put ''bDZlSHZCdW56aXVlOS9wbzNCdzNYenlTM3JwNGM3eDUwSkcvMkRlS2N0T0VtQ1lVWHlNY2JpVThiaU1DbGhJUkZmRW81eVJxRUZPRG1ob1VIVVNFSFVSa2xSYXJ0RmlseFNvdFZsZkZNY0xoQk9Gd2tuQTRTd1NjSXlJWktTTloxMUV5aWx3bVplU2tvbUlWRlJrdjQ3bStvaEtYRVVVWVNRd3pw''@;'; put 'put ''WXNwWFUzcExxZjArVVMrMHIzRkUrWEZrekdsdTV6Uyt6WHVMU3B2VVdVc3F2TktUeldlcW5zdk1iU3VrMmk5YVZaekVTYktkUlpueHZUclRMK2FpemxSc2VZaVQ3U3NlZkhuSzlwWkZqSXlUYTdoN3NsUHIxcEd1SWoxdXBWeExXVWtiWXhrSXg1ak5FL2dTVHlGcll4b095UFp3ZHZZeWROMjha''@;'; put 'put ''UTlQTjB4MXVBa1QzYU9KeGpGM2Nad2wvRmNjWUxwV1RIQ09rcUpxYU9FdTlUUUVyTnIySW1PUkJQSWZjeC90NnlYRm5sRU5rcTdiSlZuWkpmc2tYM1NMYS9MQVRra2grVmRPU0duNUVQNVdNNnAxNndXNjJndDE4azZWYXQwaHM3U3VWcXJkYnBJbCtqdGVvZlc2eXBkby9mb09uMUlXM1dEYnRJ''@;'; put 'put ''dHVrMDdkTGQyNm43dDBUZjBMWDFiajJpZm50VDM5U1A5eE1GRmJwZ3JjV1BkQkZmaHJuVFQzTlZ1dHJ2T0xYQTN1c1h1TnZjTmQ2ZTd5elc1SDdoNzNRUHV4KzVoMStZMnV5ZmQwMjZIZTk3dGRWM3VOZmVtKzczcmRlKzRZKzZ2N2gvdTMrNnNWMS9nUi9oU1A4NVA5Rk44cFovdXEvMGNQODh2''@;'; put 'put ''OURmN1cveFMveTIvM0svMHEvMWFmNTlmNzF2OEkzNmpiL2RiL1ROK2w5L2o5L2x1LzdvLzRBLzV3LzVkZjhLZjhoLzZqLzI1NEVNMkZJZlJvVHhNRGxORFZaZ1Jab1c1b1RiVWhVVmhTYmc5M0JIcXc2cXdKdHdUMW9XSFFtdllFRGFGTFdGYjZBaTdRMmZZSDNyQ0crR3Q4SFk0RXZyQ3lmQisr''@;'; put 'put ''Q2g4RWlHS29tRzhIVTI2azl4c1BOKzR4bmhEd21nMGJqUFAybjUvam04d3JqUysxbmhsd2xwbTl2WEdjNHdybEQ5VDVRcmpxNHlyRTBhOWNidStURzR3ZjZYeGJQUDNHcDh4ejBUang0MG5HVWZHQzF3OStTbmpwc0ZaZjVVWFk0MzVMMkY4MlhpTGNXTS95N0kwZHJQdk1uN1ZlTU9sbkdiQTdF''@;'; put 'put ''djVldU1LN2ZwZnJNOE95RlhYWUl5NXhvOGIxL2N6czlkbDJmdnZuT2F6YTFDZWxNZE5lV2NlWU9mVnRObjhWNWcvMzU1dk9Xd3hlMWxlNXRNb0J0ZzJtcW9pMzU5bXRUcTFiVTZxbWJRNmFkU3BQbk4yenAvTWFUTzczYTA1cjk2Y3hnNmEzWlBZdVpxbUdWdWJVM0s0eUorZUljM2JBYlBYV28w''@;'; put 'put ''T0pmTmRxc0FiYks5ZW0yTTNJdFh0QUgrbDJXZHlOZHA1UWRYNS92UUdYWnVubWJRaStmWldzNytlK20yKzNRc3RNNy9wSWFlMFNYbjJIT1BJUEVQWmZ6UDdib3V1MXV3M3pjNWZ1U2IrSmJrcTNuOVJwZkozck03ZDdxNy9nd2ZPVkh6VzNxWGd1MnNxczVLOFRqMjdkaVc3WVBMQ2p2QjV2c1F5''@;'; put 'put ''bUlGcTlyQ2tjNDlnMy80aWUzclN1VWZhRzdYRU92Y28vbDYxa0gyb2ppakRUZXh6bzlucGJ1SHZQa3VJY3V2bG4ySFhXOGF1MWNpMzIwUjd2YzFrUjIvbmVsdlkrYjVpdmUrcjdINHZzME8rZ2dQNERsOTBwL0ZEZTFWdXhEOGw0REYyNHZIb3NKN2F5Zk9LWEdhL20wV1FlTDJwOEQ3Y1NWN1Bi''@;'; put 'put ''bGVFc2R5cmdoRk53OVU4OVhVODVZMVl6TkVYVEx1L016NXNiSGVHR3Uzbmc4YkxqYmNaOXhtZk5TN0NsN2pQY254WE1sSWdoWktWSWhrdUl5NDkwWDhBdGxLWFdBQUFBQUVBQUFBS0FCd0FIZ0FCUkVaTVZBQUlBQVFBQUFBQS8vOEFBQUFBQUFCNDJtTmdackpnbk1EQXlzREMxTVVVd2NEQTRB''@;'; put 'put ''MmhHZU1ZUkJqTmdIeWdGQnl3TXlDQlVPOXdQd1lIQmdYVlA4elMvNDBaR0ppUE1xb3FNREJNQnNreHNUS3RCMUlLREV3QXhsY0tOZ0FBQUhqYXRaTlpVSTVSSE1aLy83ZDlFU29VOWZiMmFkTkdvaFJGOXFYSXZwU3MyYkt2MlJyckVFTkZVc2llSktNWkUxTlR0aHZ1dURWampMN1BsVnZ1REIz''@;'; put 'put ''SFYwd3p6TGh5WnQ1ejNuUE9uT2VjZVo3ZkgzQ2g2d3RCZEk5VTZwazQ1NjVTck1jbGpNT05nWlJ3aXpydTBrZ1R6YlRRSmg0U0lJTWtUQVpMbkNSSnFxUkxwa3lWSE1tVFFpbVNFaVBWZUdXOGQ0a3lqNXV0NWhQemkrVnVCVnJCVnFobHM2S3NZVmE2ZGQvbUgvbE5LWDJIeFkwZTJvOXA0NW40''@;'; put 'put ''U244eHhTYXhraWdwa2lZWmtpWFpraXNGc2tFMmErMlh4bHV0ZmNoc01kdk56NVpoQlZoQlZvaFRlNmlWOWt0YmZWUXYxSFAxVkxXclZ2VklOYXVIcWtrMXFnWlZyK3JVTlZXcmFsUzFxbEtWcWtLVnFUT3FWSjNvZk5PWjFabjAvWk9qM0ZIZ3lIZkUyQWZhL2V3K2RpKzdtOTNvK05yeHVlUHdo''@;'; put 'put ''NUIzeVYxZS9hZm1ibmc3aytDUFd3U2orOC80aDBiWFNSZGNkWGJ1ZU9DSkY5NzQ0RXN2L09oTkgvcmlUd0NCOUtNL0F3Z2lXR2M4U0tjZWlrbVlUaVFjRzRPSklKSW9vb2xoQ0xIRUVVOENpUXhsR0VrTUo1a1JqQ1NGVkVhUlJqcWpHVU1HbVl6VnpHUXhuZ2xNWkJLVG1jSlVwakdkR1dTVHcw''@;'; put 'put ''eG1rY3RzNWpDWGVjeG5BUXRaeEdKTldoNzVMS1dBWlN4bmhYNy9EbmF5bTJJT2NaelRsRk5HQmVjNVJ5VlZWSE9SR2k1eGhjdlVjcFhyM05RVS9XVDBOZzJhcFh1YXBwOXRGYXUxSGRGczRHeTNOK3Raby90ZG5QanRWdUZmSEx4QVBadFoyV05sTFpza1JvOWIyTTR4N0Rna1hQTVpLVkc2QWlL''@;'; put 'put ''NG8zY2VvR21XQkYwUDhkMW5pcHhoeExLTnZXeGxIM3M0d0VGZFMvczV3bEc5ZFpoU1RuR1MxN3FhZXJGT3ZNUmJmTmdvZnBwL3p4K1F6YXJvZU5wallNQUNISUhRa3NHU2FUMERBOU51SmxZR2h2OGh6TkwvalpsMi8vL0NkSUJKOFArWC8zNGdQZ0RJUFEwaWVOcXRWbWwzMDBZVWxieGxJeHRa''@;'; put 'put ''YUZGTHgweWNwdEhJcEJTQ0FRTkJpdTFDdWpoYkswRnBwVGhKOXdXNjBYMWY4Szk1Y3RwejZEZCtXdThiMlNhQmhKNzIxQi8wN3N5N00yK2JlV015bENCajNhOEVRaXpkTllhV2x5aTNlczJuVXhiTkJPRzJhSzc3bENwRWYvVWF2VWFqSVRlc2ZKNk1nQXhQTHJZTTAvQkMxeUZUa1FpM0hVb3Bz''@;'; put 'put ''U25vWHAweTA5ZGFNMmEvVjJsVUtGZng4NVF1QkN2WC9iek1XMDFmVUwyT3FZWEFFbFJpVkFvQ0VTZnNhSk5tTU5VZUNacGovUnd6NzlWOUFXK2FrYUQrdWg5aVJyQ3VuOUU4by9uUUNvTWdzTWkwZzBDU1VmZTNnc0NodEJMWUoxT0k0Rm5XcS91VWxTN2xwSXM0QWpKRGh6Skt3aSt4R1djM1hN''@;'; put 'put ''RWE5dGhLUE9BdlNKVUdwV2Z6VUhxaUtab3dFTTlsQ3doeTJRL3JWclFTK0RMSUI0SVdWbjNvTEE2dGJkK2hyS0llejI0WnFTUlRPUXlsSzVGeDZVYVUydGdtc3dFRGxKMTFxRWNKZG5YQWE5ek5HQnVDZDZDRk1HQkt1S2hkN1ZXdG5nSERxN2l6K1c3dSs5VGVXdlFudTVnMlhQQVFkeWdxVFJs''@;'; put 'put ''eFhYUytESXR6U3NLQ2t4MHZVUjBaTFNZbUJnNVlUbE5ZWlZqM1E5dTk2SkRTQWJVRyt0TW90aVh6d1d6ZW9VRVZwMUlWMm93V0hScFNJQXBCaDd5cnZCeEF1Z0VOOG1nRm8wR01IQnJHTmlNNkpRSVphTUF1RFhtaGFJYUNocEEwaDBiVTBwb2ZaellYZ3lrYTNKSzNIUnBWUzh2KzBtb3lhZVV4''@;'; put 'put ''UDZibkQ2dllHUGJXL1hoNEdBV01YQnEyK2N6aUpMdnhJZjRNNGtQbUpDcVJMdFQ5bUpPSGFOMG02c3RtWi9NU3l6cllTdlM4QkZlQlp3SkVVb1AvTmN6dUxkVUJCWXdOWTB3aVd4NFpGMXVtYWVwYWpTa2pObEtWTlorR3BTc3FOSUREMXcvRG9TdENtUDl6ZE5RMGhnelhiWWJ4NFp4TmQyenJP''@;'; put 'put ''TkkwanRqR2JJY21WR3l5bkVTZVdSNVJjWnJsWXlyT3NIeGN4Vm1XUjFXY1kybXB1SWZsRXlydVpmbWtpdnRZUHFOa0orK1VDNUZoS1lwazN1QUw0dERzTHVWa1Yza3pVZHE3bE5OZDVhMUVlVXdaTkdqL2gvaWVRbnpINEpkQWZDenppSS9sY2NUSFVpSStsbE9JajJVQjhiR2NSbndzbjBaOExH''@;'; put 'put ''Y1FIMHVsUkZrZlUwZkI3R2dvUEhiQjA2WEUxVk44Vm91S0hKc2MzTUlUdUFBMWNVQVZaVlNTM0JFZnliQTQrcmx1YWMxSk9qRWJaODJKaW85R3hnRSt1enN6RDZ0UEtuRmErL3NjZUdibFlTTzRuZnNhNTNsajhnK0RmNHNYWlNrK2FVNXdjS2VRQUhpOHY4TzRGVkhKb2RPcWVLVHMwUHcvVVhH''@;'; put 'put ''Q0c2Q2ZRVTJNeVlJb2locmZmT1R5U3JOWmt6VzBDaDlQQkRvcjJzRzhhVTZNSTZVbHRLaEpHZ0V0ZzY1WjBEVHE4K3l0WmxFS1VXNWl2N043S2FLWTdFVVp6SUFwS09TbXNiRHM3NlJFV2xnN3FlbjAwY0RsUnRxTG5pdzFXMVp4aGIwSDcyUEl6U3g1TjFKZXVDa3A3VVdiVUtlOHlBSU91WkU5''@;'; put 'put ''dUNhQ1cyanZzb3BpU2xpb0lqNEliUVg3N1dORUppMHpneTZCSW1SeHNySVA3WW9kT2FLQ2RnTGZldElxNzl0QzdjOTE4aUF3bTUxdTUwR1drYUx6WFJYMWFuMVYxdGdvVjYvY1RSOEgwODZ3c2VZWFJSbFBMbnZmbmhUc1Y2Y0V1UUpHVjNhLzdrbng5anZXN1VwSlB0c1hkbm5pZFVvVjhsK0FC''@;'; put 'put ''MFB1bFBjaUdrV1JzMWlsRWMrdlczZ3lSVGtveGtWekhCZjAwaDd0aWxYZm8xM1lkKzJqVmx4V1ZMSWZaZEJWZE5adXdqYytYd2pxUUNvS1dxUWlWbmc2WkQ2Ym5acndzWlM0TEVYY3MyVFhSZlFkUENFZDRyODR4TFgvNjl4eUZOeWl5aEpkYU5jSnlRZHRIeXZvclNXN2s0Y3FSbWZ0dkd4bm9o''@;'; put 'put ''MUpOK2dhZ3A1SUxqaitYdUF1anhYcEZPN3o4d2ZNWDhGMjV2Z1luUWErcXVnTXhCTG5yWUlFaXlyZTBrNm1YbEI4aEdrSjhFWFZRck1DZUFuQVpQQ3lhcGw2cGc2Z1o1YVpVd0ZZWVE2RFZlWXdXR01PZzNXMWc2NTNHZWdWSUZPalY5V09tY3o1UU1sY3dEeVQwVFhtYVhTZGVScTl4anlOYnJC''@;'; put 'put ''TkQrQjF0c25nRGJiSklHU2JEQ0xtVkFFMm1NT2d3UndHbTh4aHNLWDljb0cydFYrTTN0UitNWHBMKzhYb2JlMFhvM2UwWDR6ZTFYNHhlay83eGVoOTVQaGN0NEFmNkJGZEJQd3dnWmNBUCtLazY5RUNSamZ4akxZNXR4TEluSTgxeDJ4elBzSGk4OTFkUDlVanZlS3pCUEtLenhQSTlOdllwMDM0''@;'; put 'put ''SW9GTStES0JUUGdLM0hKM3Y2LzFTTk8vU1NEVHYwMGcwNy9EeWpiaCt3UXk0WWNFTXVGSGNDOTA5L3RKanpUOTV3UXkvWmNFTXYxWHJHd1Rma3NnRTM1UElCUHVxSjIrVEtyelo5VzFxWGVMMGxQMTI1MTMyUGtiWlRPNkxBQUFBQUVBQWYvL0FBOTQyclY5Q1hoYlY1bm9PZWRLdXBJbDJiNWFM''@;'; put 'put ''Y3Vick5YV2FtdXp2TWpYUzd3dmNiekZTUnhuYzV5MEtWM1NsaTRocExRTkZBcVVBV1pZaHI0dTBLRk1TNUsyZEtIdEZDaFEycUhMREcrQWVjTUg1UTB6TEcvWUJqb3diWDA5L3puM1hsbTI3S2J3ZlMrMUpQdnFyUC81OStVVWxhSEZ0U1QrRk9kR0hLcEFkdVJDWHRTRTBpaUh1dEFRY29tTzNu''@;'; put 'put ''eG5lemFUYkE3NjZxdXJIRUtsUVVOUVdTS3M5UWdlM3A2MGUrM0p0RGVkVFBQc2s0ZGYxYWYwR2YyazM4Q1R0UHE3MG9aMXlDYlQrRlBTczdqclAzdDY3K3Z0dmUrKzNrYVBwN2UzOTBpdjU5YjdqalI2am5qdXUrOCt6NUVqdHc0TTNIZDBvT0ZGN21kOUhyOEhmbTQ2MWpndzREc0l2dzE0T25z''@;'; put 'put ''Ymo5elE1b3p2dlBMS0I2KzhjbWQ4eFJQM3dBOUNCRTJ2L1I2ZEkrZlkzdnhpSThJWUxTS0V5a2NSSWR5U0JuT2NreHZUYURRVm1uSy9VS25sbldGcmt2TTZBdWxVSnRucXNOdDAzdjNENW9URzdiWlpxNnV0NUp4a2VkRnRzN2pkRnBzYm9iVTFOSWdmeFdQa2s1V05xQXloU2c3ZUgwRjAzaUM4''@;'; put 'put ''WFFmenVsRTl1bUgwdkhmbmJqRlVvU05JeXhGTUVGNDJZb09oZkxTODBzenh2SDdSVkViMGVtRlVnd21wSUdOdU1VQWZzQytSbmo5YTJrOXB1Q0RXSVZSZlYxc0QwN2lyWFZWT1dMQlZLUHpqYThPWVQvSmUzcHRscjJ5U3ZaSThlL0gwUy95YnpJM21HMk50c2J2Z2RhMzUyc3c3emRjcGY5MWdm''@;'; put 'put ''dml1ekYzNGE5OU5Qd2IvMHQ5TlB3Ny8wdDhGU01iV0hpVVI4Z2ZrUVNFVVI1MWlMdWIzMWRWV3U1dzJzNm5NWU9hSURpT09qQ0RDa1pzUlJ2Z1dDbWEwQkhCeG9yR21wcVo0VTl4aEZ5eGEzaEgybFdQQWtYUU1CN01PcHhERDZWUWVad0ZaSEU0ZW5nbDEySTRjem5RNWZHVFNxVUJRSUpIVWtS''@;'; put 'put ''MWl6OGxvYU9meG93ZGE5K2JFS3haRHZwbm81ZStROW9zN09rYXdlV1owNnVhNU5OZmR5MmNqclRzcmNXWDFycUhrYkZyWDJXV2NiZlZHZU9sTjkrNUpYSk8yL1o0ZmJwV3lJNm1XRG9mMEpxeE5pK0pyLzBYK2xYd0pNTVVLcHhaSEhlaUYwZk5WY0hKaEk5YVdZYXpUNGhXa1EzcURUbjhNYVRS''@;'; put 'put ''b2lXQ0tTV1k0RW03SnhCT09xK0RHM0tQbmc5QWwvcFpkRURSbC9mZ2xFK1o1Snc5bm50eWlCeUhRbG5aRFcvZGFXQkFEaVVSRGc4MkdVS0lqMFo1Sk5jUWJZcUdBcmQ1V1YxMWx0UWlWc0pueVFEbHZEMXRrNENaYkFhYTJjdXpGU2V5MVVLQjZHM1YybXlPSk5uMmZ4K3ZmL2ZWQU1EUVlpUTdD''@;'; put 'put ''ZXhSL3FGTnE3cndtMXg2SnRMV0g4ZFJBS0RnWWxiK0t0ZEdIdVFoZWpFN0VXM1pHbzVPSmxva28zclU2aFQ4NGtNNE1EbVRUQTlMeDZFUkxZaUlXbll5M1RFWVRBNW4wSVAwSzlzZWhwclhma3hQa01ZQjlHUGhQWHV5SVIvMTFOVzZYMDRETE9GTFBrSXBpUGw0Q01uYU1hb3V3S2hKcGFJaWtJ''@;'; put 'put ''Nm1HY0VOenVGRUhtS1VONnJ5TmRFL1o0bzNCTjg1TTFxbmpuWWp1ekNudjBwSU5CT0hQT3B3a2lhVjlKenVQNU83eDFFWEdFNUhoOE54YzVzcElVeWFSdkZyNmRGZHQvVVJmcmprMGZqcC90bm1vbVQrdzNMS1F1MmtnT3VpTGpJVERJODM1VVovNFR2RkExZkhoYThqeDlsaE5WNmdoRzI3dVdq''@;'; put 'put ''MDNkOHRZMS82UTZBVmlBSDZCUGtFK2lVd29PbnJlQVloaXBDeUpuUzhHSktoRTlNOTUrQk12VXRJWlgzakU3aU93SFd1QkkxVmc3Mng1bFNBNHkva2cvbzlEM3NvcXArQTlsSUhXK2JVNUhDTlB3ZGk2aDAxYW5BZ3pOcFoxQXZuWW5Qem5MN25rc0hkdTRaeDMxNDl2dU9ISHUvMjd2MzdWRHk0''@;'; put 'put ''RVlDS2c1emxjcC9iVFFUOG5JN2FzRExEWXVZVTU3MkhvZk11RkgxejFkZWpIdXROK0hmZ200SDFmUXJOSUZMdjhHSlBKSGQyeFJwZE5xMGQ0RjlZaWJvVERXSU9SRnFNVkhkWnF5UkpGYU8wWTdHNFd6UXdQWmRKTndkb2FOMCt4RTFiYWpYbmdCbkJxUWZnam0rbkd3WUQ4VzdMVjZhakh3U0lJ''@;'; put 'put ''WkxMQUp0aHp1dzA2VldDSDA4RitaNzNoUHlkajNWODJHM1RlaW9aeXJjYk1hOHFjMFhBa1ppL1Q4R2F0eHRMczB4bk13S3owdXNwS0xtVFRhczA4VnlhRWRSR25JK3dvNDNpelR1TUlPWXc2dmRtQWJ6THJhMXFhYTh4VlBHZlNhNHk4V1JBc0ZpTnYxT2hOWEZsalRYTkxqZDVzMWp0YTQ2Wnly''@;'; put 'put ''c0hJbVhSYUUxOG1FR2dpbUhpVFZtZml5aHNzK25pclEyK21CNHY2MEhGU1RsTElpQUtBRXhvT2EyWUJsNEV6WUE0dEE3blRvOWZnY2NiREszVjhkUmg3cWZSTVV5bWFKT1hmekQvM1hQNmJPUDVOK2dzZGIzTHROSG9NN1VUbHlDa0M2YUpCRmFXQU1Id1dpajJBODQzcklvMmZESnF0SU5HY05m''@;'; put 'put ''V2g0OUVFRlczK3VscXhsWTdWaG42TE8zQU1xTEZLdEROa25GMUhScUdTb2FMSDdtbkRuTFNLWTExc1A4TWdZejhIOHh1cHRrQ2ZBSmZEMklucFFSdFJtWStEQXk2V3FFY1VhV29xU0ZLODlwdTFSL0hIeVU5aFhrRXNwNE9DNU1CWHl4TlNWb1VuQjZTN0I4aFAzM3daTWZuYUFiemlHSGtTMkZz''@;'; put 'put ''OWlvaE5nRmhzeHpKWHdDRFkyUUlxZ1o0cTZ5dnJxaHlNRCtwZ0lack5mSTZrVXpIc2JhUkVBZ3dBNDNjUERyNTdhdXIwNE9EcHFmekJUT1pnUG44b2t6bVVOKzI5WjJYbDdyMTc3MTVadVdkdjU5alp1ZG4zam82ZW5aczdPOFpnVUEzdmI0QzgxeUczV0FWSHlRRzhSbVN1alFFL3h3UXJBeDBm''@;'; put 'put ''ekNZRjc1TzMxRDZZRXNtQjJaYVRxMU9JOVcrQlRlbGhQeTdVTEFhTlpiQWR3QVpDUmhnNEdidWpDc3NpWWpKR2NQcUNHcjRxblBWVC9rVlh6d2NMSEs0Q3cvbTB3S24wTnUxb3VtSm5MSHI5Y09laDNOak10L0JKcWFudFgvS1hwcHA2QTVmN3hmN1VZcTd2MU5DRDhobUdBSjVhbUQrTXVzVk9k''@;'; put 'put ''elhNNVFPQ2hoWEFNa0NTUXdzQ2NvbmpORXVBb0xBWWtKZExsS2Fkakp6RHFObm45L2o5UE8rQ2s2YWNJOW5LV0dzWXA1MnRHWG1OT2o2WVVibXdBdnhYVGtXaXZxUDV4Rmo0ME55T2diRjl6Y09SekVKVGVQSDkrU1B0QTIyZFU1Mlg5SnA2MnB1VFdYOVBVNzYzRS9kMyt2TytkQ3AwS2pHWDd0''@;'; put 'put ''b2xsTS8yWmZlbUdENkU0QzBGOEM5RFpoUVZtMDBZVUhCRXA0VjlZQVQ2NmxFQUlST2xGWm94bzlGb05nSU5DNVpLdWw2L0o0aVRBdFZZdldrQjQ5dWt6eHZ3elBpbGw0clN6eDlzd3k5SXVZNEhmNFp2a003SzU5UUdjSExDUEExVTczRUFleE1xT2FKQkdFNEszcEdHQVlrc3lwSjdJNUFhVUgy''@;'; put 'put ''allBMlVBRWsrUDBwVmZLYUFsajkrVjZTNWVhVTlQaEdKVENRbVIxc04rSVBTUTN6ZlhPZHlaLzVFcjZrOUdZOGx3MlBSeUZBb1c0V1h1bDV2U1IvSTk2eTBNMWgwd2hyOWNKWnUwT043eFc0Z0lvNEVxb2hXUTBaMHdHSTBXazZ6Z2dwaWxJY0ZxdHlpcGdhaG1xYWFrSzhST2xkNy9RRTlLTVJJ''@;'; put 'put ''V1JMbElCVExuSHlBa2tzdGhqOHM2Z2Jva1NieGU0NTJkWjNvUFgxbThOVFlPMlo5bzNPNS9abnF5M3I5RTVIWVJMei9zTGx5M3hCK01IT3dPMytzNjhrN1YvN213SzdXNGFuYjUyenBidWxNZkx3NVB0dzAzclY3V1laekIyekV3T2lwWHF3QkdZSVpOVkUraEpudUR0b3ZhRGNjTEE5NzBoNDdN''@;'; put 'put ''SWlucEhmamw2VHZESk9ydWxwVzMwUDFpUlRBb1liQklRemo5WXM5TmgwQmJqdkNGd0ZCNFJwNkFBS0dzMkpjSXhLaGNJaDBSTnBUclRYaG1tWVpHaEVEWldPVWUyUTJxUlFLZkFxd2tGbUpVL2s3V0U0WVovbko1VDJ6dlozRDNjYzZPbzkxajdYM3p2WmMwZGMwRW8rTVJFQjdpSStFV25ZbFV0''@;'; put 'put ''T1J5SzUwWWxlTHFXVSsyN1hmN3BqTHBxWmpzWmxVYnRibTJOK1puVy9CdDN0eWZsOUhZMk9ITDVCcklOSUZYejRRNnZaaTdPME9CZkkrdE5YNTExWEMwUnYwWUQ4UTJMb1dDRmxMVm9BVU9OZ3Z4emxHaTZTRmV2Nk5EWFRIQWErZm5iOURQbjVRMFNuQ2RtSDZod0lCQzRYRk92UDgzS2FUNzJM''@;'; put 'put ''NHNJT2RmQXZEQXZMa3hwT1hzVUU2UTA5ZXhnRjVEMHltNE5kQmZzQ3lSczlIUVZOeVVxYk9WaXJJMXB0V3R0N2NWRkRCZDhDa1ZvcWZMNGdXa3draGs5UGtzRlF5UWFSVE5BMVZFSkV0aEpKTitjUjMxbGlwZExMV1NIT3FuQUo3ajhsYS9EcllleFd3RGg0SnlJUy9nQXdYTUg0Y2YrRjhNa3h4''@;'; put 'put ''TjRzV3NVU21BWGQxRCtzSTZGUFd0Tjl1eHZZc2ZrNjZBWi9GWFpsWDgwOC9uV2Y3N0VOZkplWDRYd0JiZWRRbzFsTWNwMlllMkU0Y21WVllQdUdvTGxCSk9UN2xFdlMvUHZ6M1VwcTkvaVYvWng3bUhFT0x4S3JPeWNHYzJTaE9hKzNhTVh3VzVueE95bjBhWm53MTh5cWQwNzMyZS93dHdJOHE1''@;'; put 'put ''RU5aTWVVd0dTbUx4SlROY3pEeDZTS1pReG0rRm1zMFRzMll5K1h5dWJ6K0tsOVFSeGVpeXMxMXJzNU11V0k1LzB6NzNxU3ZweWs3N3cvdk85dSttRXJ1YmU4eHErQzlXaHZzOERaMitwTHg1cE10TThuSXpwenhQVVdtTlYxblpPMTJiZ2U1RjNXakNWakwrVHJBQWFIUlEvUmNnNFZvOUowZFlH''@;'; put 'put ''ZHlJKzcxWndiMTJZTGNPR1EwRUEzSUFSM2x5cm95MEMzNXcwaGhkc0JFOUhwdUNUWW82S25OVmcvdG8yQmNhN0JoSHIzZFRrM1VOZ1NZNlEyY2Z1V2luYldBcVMxVUpuQkl1N0o5TDU3WHpTT2RqbDlpM1NjWHdNYXJFa1dFeEFseGZHZ0FnSkVQQkpvQ3ZrREF4THRMdEpuR1FMQ0lPbHNkenF5''@;'; put 'put ''VFp5WmM2MGJtbEd4bGRvR1hxdEhNenFPUEhVbmNmLzdZVlYrNTRzaURSNU5Uc1dpbnZtNjJKVDdjM0hPOHZYWFFZbTR2aTRUcTY5b0RpNS9adS96RmxmMTM3Y3NmemxyYTM5RWYzR01nN2VuNHprUlA2dXFqRHg2NS9DdFhIdnpzMHNSbEdiQkRFNUdKWlAvSnZwaTNWOXY2VCs2R1FIaWhkL1pq''@;'; put 'put ''OHl2bmx2ZCtackhHNC9ZM3ZMWThhaXRMNXpNTHFiWUJkdVlOOFBaMTRQczhTUEt3R0RKZ0FNd0lZQ0NncEFha09CV3JZRlJRalVxdjE1ZnB5MlFWdVFxa09NOU0ycUFSazZ4MDdlQUFqdE9mdy9mZmY4ODk1TnpxMUt2NGpIUUdnTDRmeGo4RzQxZUNwdFdJdXNSMjRQd3dndzZvRHVTamRobk9W''@;'; put 'put ''bkVROFZqV3hPbGM3bXFMNEttdmJuUTNWamtFbDhVVmFkQXpSWGlqQVBCZ3F1cUF6bU8zS3I4SSszRnJkaTZSakxmM3BSWTdwSy9oVU1mb2VOZFBmdE0zTjlmM0czSXVNdEdTSG5kV0w3Wmw1aEw0MXI1MHF1L1gwcVBqSFIxajBtOHBINkh5NndOQXA3VW9Kb2FyWGNZeWlpUWpLcnQyYkhCaHdZ''@;'; put 'put ''TmFWQlB3QjZnTFM3TisvbnpwbWVQc3ZRY08zTHM0Y0tZbEVyb2tOMzdMeE1RdDQ3bExRcEdXTXdNbU9MbWxldzltV3lOTmlhbjNUazYrYnlyUkhHMXBnM09oY0h1RTZWZDJaclVVd01RTWNnVk1KcVBOWXJTYjdJRUc2dHV4cWxnWnhsa0YvU2hFZm43SmZZdUw5MTN5ODUvUDN6WStmdHY4L2VU''@;'; put 'put ''YzdyOCtmUGd6dXp1RzM3TnIxMDNEcTg4eCtUOEo4OFZnUGlPS2l4R1ZLMUpkU3JNSW9xdThXQnRtVm9aUjluaUJhbVdsL0ZHUVgzZmc2NlQzNFRzbEQvNFJ1ZXExdkNSMWtYTmRoZkhUTUw0Qk5Za0JkWHpLNmRpb3Fvb0JYeGlRZ1k3TWVCNGIyY3ZHUFNYZDBvUC9uUTM2VlhWTWVsNTN3bmw1''@;'; put 'put ''VUZwc0JhMExjZldFYUxSTWlkZHFFRU11WmdNN3FDYktXQ3hvRzZBUkJyeXltZWNSTmhMdnBzTkxlL0VIc0xYbGp1RkZkb0REZDhBQlh0OGxIMkQ2Uk5OMzhHSHB2K001K1FqYkVsSDFDUDJlODZpdzU2c1lUSU9pVDFGWGwwRkhwdnVsZnFrS3RCbVdtTzRXWGtsNEoxZUowcUlvNG5zcE9lRnV1''@;'; put 'put ''bTNwSmR3cWo0cyt6SHlzVnVyQVdMZDVaSE1SREo1SlVhUzlxSjBFc3VjWmFDdFFMR0xtQmNOb3BpeVRKUTZReWNuQUxxQkttMThEM1lzMFpWZ0dKYk1IVHpaRW5YdGJ3djBCRWF3elUzY3lIczFGZHJiaWY1UmlmWmQwd2h6N1lLZ3IyRDRieEZxRFhrdVlkTVBNODhiSm5sT3J4U0xMMDZTQWt3''@;'; put 'put ''YWdDUkJkKzBSODZhejBLazVOUzcrN0d0WXJuUVNkK3pucC9YamsxRXNNZnYwd0xvRnh0VlFuWll1bW96RTZrRUduUlZwQm9JdjJBNTRrQlVLa1hyRUxVRzcxUTZ3L3BhRmZySytMMzJKZE5rRmRsd0dNRXE5Z2dCUFlMMklkMW9taTlMcjBPbDJXRGYvSDZoUUpzczkvVnNmOVM0YkxkYUtiSjZS''@;'; put 'put ''a1ZFdGhWQXpMOHNwalBnNGpEdEZqZVlJTXduaURxMDlRL2t0eCtIZi9QK3hxbWVuc3YvdkFnYnYzajk4OE1YSHp1SXk0Q3NzNWVPL1MwbWNQZGs2OWIzTHl2Vk15M2pKNVFISDJJT3pOQkh3SExHTllCWkFxaDZtYlpOMlJEMXNzTjlzc1pudTVYUWcwNktnVDMxUGdQWGF2eXBhRlNWdzljR1ZQ''@;'; put 'put ''ejVVRC8wZkVGZk1uVHN5L1RNNjFIYzZESEpOd3g4emc0S3owZkRFTWJHQlY1c1FNOWF0cmlRN01QT2FCNURDSGg5Zk5wMkxmdHQxdUQ5bURzVUNRTW1HUTVFNStnelNHRlpGc01PdmNKSXJKN3lKTlkwMDc0MWQyTGFvd1dwdTRwdW02Qmw4QlNManEya1J2WWtjZ1hBQ1c5UDM4Y3VKWThGQ3FH''@;'; put 'put ''RnhGOENxSDlZRDhKTlFCcDVxbXk2Q0tLT3hOSVhlZnp5TUlWc3A3WUxWV2J4QnNZSUZCVHB0VVlFWU9YamIvNk1qRHo0a01kRkxzWlFZMmZNdlY1Ukw4WStEN05JV2M3RWQ4alVUSVV5aEk1WlhEVHUxaVFyVktGVlRVeVZza3I0SW80SXY0S0tnb2pTc3FTaUNvUW11ZCt6bWNDazc5OHYzcDBK''@;'; put 'put ''RmIweE5OZTQ5ZWZWbkhTczh0SjBMaDQ5bllVTk9lbzFkZW1Uc3hZc3lsV285NE83MlpyaXIzOUhoMlQvSlFhM1BjMitWcmFYTzVkKy9NTGlSbFBoZ0ZHQTB6SFVQMjFSVE1TdG01b3FqYTJBdDJwUmVveGYwclV2TXJFY3pLTG9XTzV3QS96a0ovTy9LSWRZcERIK1BpcmRtUnplYXpxYUtZOHEy''@;'; put 'put ''TkxBelhuaGtVc3d6enhNRXpVNmFSVzJid0o2V1Z2dU1kSGNmNzZHOHp0NHpJYTFYMUlSMmRTOHZzWU9DYUNzT1V1UTZvL0RMWG9Yd00rQWI1dXZRUEEvQ0RUZGhFdVM2ODdpSUhZQ3cvbUVrYVJrc3dWaG5sKzhBb2FGaUppWEcyZWVBVWxrb3RsYUpKTjZZL25OZUl2ZjZoYnp3eitKV3ZELzI4''@;'; put 'put ''NXh2ZjdJSGhuaUw5N0RWRmRxOStYbDRueUZCeU0rTnR3QnNOT2hnYWpwNnluL0pSTE9PYXhXSVJLRnhobFRDa2dZMk9UMkhkNUk5K05JbDU2YjhuZi9UcUpKNlg3c2MrNlFkNEh1K0dkNTg4dGdYR1BnTmo2MUd0V0szamdBZ0xERTd4QkZnRTZnbFF4b1FqQzBtLzJQblRuMDlJLzY4UFYrRy9r''@;'; put 'put ''ajRQb3gyWGZrYkhhb2V4UkZYdVUzaXV1OWtLdm9XQ204MGlzQlZuWlJjRENQOTIvSUMwRjc4aFRlTUxxNjhuU1hkWGN2V3JzdXlmV3ZzZ2JpTS9mSnRXWEJJUUMxNVRQejEzN3Fma2g2MnJWdXA3WFh0ajdWRjgxelkrVUE1MFcrMEFYcEpkb0JpMXdIeFZoZmxrLzl3eW9tb1o5ZGZTK2RENmZF''@;'; put 'put ''NWcrbWw0dGNCMFArMGh2Mng5OHh3ZFBvTS9neCtVY2V1QzdraS82QUR1enJ5V01EUDE0RjZ0ZUZndTZGQy9OUW5zZ2ZkK0wzTlgrMDAzNTBBSy9lclZWK21hcGJWM2tsMXI1Mkc2QmpiR05qNWpPZ1FQQUNSa1p2V0JuVG41WEx1SmlONGtMME5mSit0cmdwNUQ4TTNWRmhESDhxeFpwN2U3OThZ''@;'; put 'put ''cytVckZoMlgrMWdyNnd5K0lnS29CNDNhSzQxV1kwemhCSUFpZ3hkZlZham1kVmtQTldLMk9hR1Z2SmRYaVhZeFdSdlZZcDFPVkxqZVltTzZBMisrcGg1RmNQci9YYWdBNElZY2RBRlhzNm1LMkViVndMYUIrcWVFd2ZQcEUzbjBpdSt1U3pHTDd4TkxBem9GcDEvNEYxeVhsczVNOXV5YzZpSERO''@;'; put 'put ''UWVrYnV5S3RlMGRhSnlMMTlyNTlzV1NyNU02M1RWZjN0Q2E3NUpnMHlZTjhzWUFGMGkxMlZwUVJyWWJ4eWNyUmdsdkd4WFNvRGM0NXF4VWhhNlBWNDNaQlQyRGJtNXh6UVlwVFFyRlBUaFc5SHp1Uno1L283VDVjbjgvWEgrNE96U1FTTThuMGRDdzJuU2JDNEkxalk2Y0dPOVBMNUVucDM5S2RV''@;'; put 'put ''azNib2M3T2cyM1U3WDB3QzJlVUFIai9CdUM5dFEzaTJ0NEdjYnlsRGZMYkd3WUhieGhLTHZyRDdxRmdkbDg2dlM4YkduYUgvZnRUcHFGM2pZeWNHZ3I1bW1zYmNnYzdPZzdsUEhYTi9pWjY5aG1BbTJjZGJnTEg0RWFoeFFESFZHdmxySG5tejFNVTdHSzRXUUplZ2NJTkt3ZTl2a3FCYkpiTEhn''@;'; put 'put ''cXVYaFY0TnpHSUpSbjB5Sk9yTzViVG5ZT254c1p1Qk9CaDkrcFZXUXF4VE52QnpzNUQxRjRDdUJFZndNMko2cWlWQ1R5R0kwd1FFMDVEbGd2TGM0M3FpdlNIcWlxRXF1cXFhdDNWOEpjRERBTzZVcDhNc1dJdHdsTkhra1RIZTJDeCtNZ0JkN0RoK3ZiKzZ3WjNYTE5qN0IwZDBxZzJNNXVhdUxR''@;'; put 'put ''TVg2czdNQm4xMVRaN28wT254a1p2SEJ5K2RTRTkzNEwvZG5ubjFCRkdmeUFQOEJSNUJhVFZIckdzQXV1MGxSanB5SWpzREtsQk9wMTJDVFNHS21ad28wWFFmbVRIRzh0UXFBWmxWd2QwdGxMNjVZSlk1dld5MkJYUHUyVmU1Nlg4aHptR21QTllaMy9zMWx2ek16UDlxVlNrd1JHbzloRnRUa3Jo''@;'; put 'put ''YitjRzIwYzhNVWV6UjZiMStOb01xUUVZMGxqOGtMaWpycExvdElvZkUyZ1pHSjZPckZENmhvbEJzYUZ1R1ZmQm1XbEZZdzBnTytWd09JeFFIL0Q3ZlpUR3NhQ1FDN01xTWh1OG1ZQUY2UklzcU9tK2NxanpTbDlOdzJMTHdyRzZGYkgzMHE2dVMzdDdqdGJkT3B0SXpLYVQwL0g0ZEpKb3BkYmVs''@;'; put 'put ''ZlpBZld1dForL2svblM3ZU1YQWppdkVYUHFRdENjeGx3WDd2bVV1RGRCbmNCK0h0ejhBSHR0cHBNSWkrN1laRG9PeXhyeHRyaUp6REZRSndlYTFVZnVUMGpxQVVuSFhDQXE1NDhzV1d2SVQrZWhJT0orM0w3WVJvWFZQVG5vRTkvZE1CM3FEMG1OQTE2K0ZNd3llM2ZEK2NmSVZrTkVWMUFJc3VG''@;'; put 'put ''T3I2TUVKbzZvMVhWRnVOakYzcVhhVHU1UUhFYkxiNWJKWTRBVzhoRnppc2dqVjFZTEZ0Yno2Qm95Lzl0VGFCUG9JRzk5TmNiNEMrSEk1MXNCcGFZdG00amlHSnhyZ2NocU5XelBHWExSdVU3WFRZUlhZckh5SmsxWTVLcVk4NmJ3enlncmVFYTBvTS9zRnR6ZmZuMXBmeXBzL01mQnBMZDlVVHpL''@;'; put 'put ''ckw3UU5NM2dEU3dEcWV4Skc5NG9OQmczUUc2ZXlXN29hVlQ4UnJFemFZeXJvR0M4RjJGYi9ZT0xMeS9rOGJwckNWZExQZm5YMGZRRE9XaHlWNVJjOW52ZkR1S3JkVzFsaTk0NEJsSUJWeUcyNUlPQ3lGNlhFbG9acTJlN1ZhZ1ZHWExvbE1BWjFPdGVvaHNiOTVIUDNva2F2WVBWYXZUWURVRkhS''@;'; put 'put ''MGVzMi9KSzB5M2dMNytTKzZWaCtxRTJjeWcvU3Q3eDFLdDArWjYvYzMxbUVFaFA1OVUraUhXdUtkNlpBSkJWd1V0aUVrOEtmZ1pQMnQ0R1QybG1Ha2dxZkhJUjVOOW1icm92YW00NjN0amRmT3pVOGZHcHc4TWJoNFJzSE00dlo3R0ltUzkrenBwRjNEUTJkb2hJRzVFeXUvWEF1ZDZpOS9WQ3Uv''@;'; put 'put ''VkM3dko1cDREbDVXRStKYkJhS1pmTzZXS1lBc3VLTHltWVZNSCtXYkpaK1RTNHNsOGhtS2c5blFCNEtXOGhEb1VnZXJvdkNVWmt2YmljUGhZdHh3cmVRaDlyVlNTeXNDOFJsS2JSQkhtSTBEZmkxQUdzMTBTdzhPVHFyNHRlNkpnSENRN0RKT3JjbGs3UVhNT3B2VGd5MDcwMENHYjdTazR0UHA2''@;'; put 'put ''VWZFZTBsMUk0RDNlUnBHRE93cGIzcDJteHZCcERmRnk2Mk56UEY1cVpEa1V6VTJpVHMyTDU5VmRTemJ5RTkyRGV3ZnpJKzFSby8wRnkvYzZTbHIydG5kakRjTXBzeU5mbGl2UzMrWU5UdTdzczA5L3JyM1ltV3FLK3hxVnJ3NWNMaC9vRE1JL3l3eGlueVVaRG5jVEhpeERxMmI4TGRURmtpV2FU''@;'; put 'put ''T1U0Q0JUcWRxQUV4dVdodXA0UFRMZXFpZzVIMEFSNkp1L0V3V1Q5bGFxMVA5TXpQNTk3ekhWMjJwTjlvcmhaRjJQSlA3MElkeTBnT2VabE1aNDAwdzczOFJyVXpQSE0wdUdkRUNkNkd6VWYwSVVlSkNhcEtHSGRtOU5pL3pjUmJwUlpUZHlsYTVnUCtMa25HYlN0UnczRzhBQlFOUjR6SHBLVWJV''@;'; put 'put ''ZUZqZUwralZ4RWEwYWg2RWFxbXB1b0ZnWVJhRlZUWXQzVHNlZjJ6SHExa1FuaVA0VVNwRE1MQTl4Rm1oZjZtTktyeTFqZXJ0dmUwdk1oOTVmKytEK1E5K0tBOGpUdUNINkd2MURYeS9ORit3cGZFZllXeVdkMVBHYTdDR3NqbHE2Y0RZSENseWdJS3RTdkhFQXhhUE5aaDBacE84RlorNzk5N2hi''@;'; put 'put ''MzFsK05PZkhuN211ZTkvSCt0WFgzeHhWZm9qSGJkdWJZeTRZRnlCd3Rxb0o3QmtqTUVBVm9ZdW9LR2JVenliRnB1WG9hR01oZDJZWTdzb3gveGhmMld0dDdhcHZQNWYrNS81VXQrdnFzYXlqd2paQ3Flcmo1aWxMdnpzNnBPZFdTenZCZGduZmdubTNNYU9GZDdhanMzZ1B1bFpmSWYwRkI2UWpy''@;'; put 'put ''WGdUM2EwU0NzZGJOencyaDY4bHp3QkhBVmc1R0p5b0JMam9VYVdWUVFONWhXQ3hXaFNjRkF4cDRuaExnenNQMDExS1pxOTZTd25kcWNjRk9GcEdKekhwbGwvSXRzVzk4K09hRHZ5THV6ekI3ellsZS9RM2hucVQzOHdGVzJKcFc3UDlBZjFjWDFOb3ZtT2VOWmt6aVErSEU3VTZPTXd5MlZyajZL''@;'; put 'put ''N3Q3R0pxWVM5TEpWU2tvS28vMmtQM3MvV0hoTDllbWJMQ21CUk5tSTh1SjVXdDBSQk5VbXpaUWx2Q3p0QmJBVGxnSDZXeHVxemRhUVdBOWJiRzNYd0NTY1NZeXNPQkh4c3hTT3ovbmhiTmdFN2VTY3NOdnpoZU5ac3lzYnZhS2FMMVFmN003ZW5ZaTNSMUFmVC9TSDkyaHJxd2MzNE5QNkN3R1B6''@;'; put 'put ''bWlUOUVoa3VJUHk0OUVzV0phYXladGZhSFBvaUVWUjlqSzJPQ2p6WHFKcERZaVVsK2hqVGllUmtMdEFPa2g5VjRxbStZWE9DQ0dyOGRIVUgvcFVxWHg4RisyMGMxUUJsQVpkc3FLOXhWemx0VnJPMlRGYUMxQlJkV1hsbVBFaW9sdEdGaHN1OTZSaFJjM0xwV2RLa1hIckdQckNYZ0R2amwyWmpZ''@;'; put 'put ''djVJTG5ja0w4YW1HOE5WK1VadmQxVll1bW0rcjIrK0ljUjE5eHJIcnVydHZXclVLSFp4UVU5emRUMG56V3NhcXB1dlBpbmd1NFdUY3U1VUZoWWFZWEd1UGxHRW82VkpHb2ludVo0OEh0WmlBa3lUSjh6bHk1UjhtcTNCODBWdTkxcFVLOWo4UHREZnFLcmt0M3ZTV1pZdHQ5SDhyTVUweDRkRUpH''@;'; put 'put ''TkhMZ2N5ZE1kSlY3eHlJUWVjK3NVWHU3cnE2MTdNM2Q1L29sTk1SV050MGFuazdia1hOL2llSE5RVGJNUElnTUgyUUR6TE5qaXF3d1RVRkEzaGxzdFlXcmFjWCtTd1d5MXFDbmFsa1NaaHMzUjR1NXJFQnk5RzhQaTJoMTU1NVpVK2VEMzBSK3F0d3YyNVBibnJyb00zZkNsMVdiSHo2eWQ3OEJ4''@;'; put 'put ''NWdPVkJ0REl2U1pBbUNnSXlNOGZsa3BhandNS1RXMlE2VUFkS3NTTGRXdlQ3dnFvcW9kSlZKWnhUUHNrZSt1bXFwTC9MbjRDL1laVEdYOFovVjltSXcxcFV5ZUV3ZWxMeDI4emlhOGpadCtQem9ma0szVGdqdlVET3RyeGRuNCtUOXo3UmR6WkxYcTQ0SS9PNjROcExnTVBuNExSQmYwZFVmQ0p5''@;'; put 'put ''bW9yTzkxQXh4dHgyekcwYllGSUJLenBNQjFWcHFQL1cyTCtTYXp2YzlkdjBqV2tjYnRtZHkrMXVXYTBuWDF6ZEplZGkvZ1I5Q25jQTBPcEVkeEdYSUpSOVRCWWxNR2FLb0xkWVhjMU1rSis0clBURDZsTDhXV3NpZW8xbVFhSnIyZDRxblRiQVphc0J4SmVlOG1ld3JFMWdXVGVBT2czeVdITUZ6''@;'; put 'put ''YllBcnIyeXpsZ1AwR0YydWtVUGF3S1lkWHE3TmdzaXpTVjFJWmZWNS9OUndVMUJ4NkxSekxaVnRCdnF1d0xobFVtK0ZHd0xWY1VxTGJVK1I1M2RhaXV2OUNTcU5QcW92OFlYcXpBSEtSSllqY0pFRHJPYWhoU2MrN1BzM0NNOFBmY0llbHJKeHhqQi84ejRsUSsxaTluR0txZEpRK1R3QWtGMHJR''@;'; put 'put ''d2haUVlHMHVjQVVrU2V6K3QyMmEwRnZFVEZMRXhKanFKdUlaMnFmUUt6d1NHRnIzbTJ5Q0ZaNTNQU21TMnlTTmdlbU4rY3U3NnlFZFpLODNUNjBFZlJGNUQrQXNIbjVUU2RMZG9jeDg1dDJweFUyMkFlZlhHYk5pdUZObVoweHpadDVncHpIVVdmazl1UXpXMitVUmpIaUw2OXNZMmNIOEU5eEdq''@;'; put 'put ''QmdnYkZmb0h5SWliMTlRZ0RGOUxET2VnMXl3WmdrTHBGMENzVmY3WlcxcHlZR1dXcHRFRHZDb1ZCR1lGallqVmlucVpKRktBaGdDVmhVeVBuMG12N1IvRHRSQ2Q1ZnFhRTBHbENSWmYwRHZ3UjZYS2t4TDFGbHFlUVFhK0w3a3c2R05Ed09qZGdhalVObWJrcUFJL0xNZUcwQ3ZwSGFDeUt3MWZB''@;'; put 'put ''RzlLOFEvVXlPVVlSOEhURnBBTHBkd0RXN1NZMHljWkdNM05vSDRRMXA5OXVKMXB2RTl2UWlUdDFzVjVpZUhNSG1nMUZqbXpSRDQzUnRCeGp3TjhNMUdjRkE2b0dwR1VGVnZuRFpncVVaZWhXcmxDeWVHMVB1VVpmdTVrOHErWS9QcjlWamtZOHkzbnhScXB0MHgvNXpKNlNwQTJLVHl5SGd1RjNT''@;'; put 'put ''S0dCOXpOOHdrVjR1Ym5OY2ZUd05tMU9xbTJBQm03Y3BzMWNZWnlqNkNxNXpUcCtyMUV0N2NOc3JvaThuclU3dGhvSFZ4YTFPWTVzbTl1cy9RTEdlWTJ0SnlLdlorMXZTOXI4TzdUNUkxdVBQTTdSdFhzMnJnZG9xUm5lWG1DeDBscWF6YnRSMDFqVVl4b29OUlNwR2hVVjhGRmJVY05LcmV6UXpR''@;'; put 'put ''d3lwMnpkMEdmR1UxSlFqWHlncXlRUDVpdCtUazU0R1JsUlUxNitnLyt4a1BhQ3UvTzRkZlYyT2ZubEQzbFdpZ1J3WURGOXhsTmFGSjd5aVJKWXNUZzFnMVdyY3I2UGxmQ2R6VzJPNDl3MmJVNnFiZUI4WDltbXpVcWhqUms5dEUyYnVjSmNSOUZ6bS9nWFJydlFYK0t2RVIwSUE5M0RlcG9iQ1Vw''@;'; put 'put ''bEVFZ2ttSFZtblRoemUrUjIrZWVEWVR5aC9uYjc3V0drNXZQK2p1WEkrMUNjMWdkRndyVTFMb2ZKb0djK0dwYTJvN2c5SEhMNFJGY1VQdkg3L1hGL0xHZ05XbGtHdHByVkdnQWJMMXVVTDVma2tjT0pGVEpGY2tnYVUrL0hNNmtEZCs5dnZ6U1dIcDZMWjRBMjIwOUUwOE96cS84Vzh1TlQvdmtZ''@;'; put 'put ''MENnK2NmTkV5Q2ZkQW4rUm1uZnZXUHJzd1lDMzYxRExtUjFBbmZRMzZUc3JJZnh3VFQwUXFmVDlxZmROWm84MlNlTTE5UXgyTEtiTXpxbE5PY3NuU3M1N2M1dmo2UDl1MCthazJnYk84Z3ZidEprcmpITVUzYjJaVm1XOWw4M1ZxY3oxOU1aeE51VWF4QmozaEhQUUx1dXdFdVVvRksyQjVLbHcy''@;'; put 'put ''Q3FjbFU0aDRLbms1UWhvc2loRHcxL0kwT2o1NTVJTWpWTXNSYVB0cG1kbUJnZG5wQmRrbVRQRGNuR2VCUnB1RVdOR1VNS1pHZ0lDaDF0UkV5NlpXeHN2NnVSMFFhdlA0L2RFdkN3a1VaSzdIY2JwOVlJRmxYRlQvK3BNZWw4dXR5L1ZHbW5yU2UzSjdoa0k3d2pOOWUzbzZCaWZiRytmRklrNU9a''@;'; put 'put ''MUlUQ2RUTTFYdS9kbjBmRXVIcnp2WU1kb3hrbTRiSGMrdFNnQkhPVjc1TXNDeEgyUXZRWDJYeS9TOThUa0g4UDFFMGZQbjFmYVlQMURjL3VuQ2MzTnY4Zk1IQ3VNZm5TOTZ6cmtMN1kxVU93TWFndWZjWGFERFJVSEw2MEhIeE9VYWdKM0hEVXFDSGV0SkR1dktES0I0OGpvdERhT1c2VWpaQ3RJ''@;'; put 'put ''akhhL1hMWnNOUk0wR2RvMldHMDBjRlliVXR3TzBsVTdIWWdpbGU5SmlaM3NzRlV1MkpHQ0NpTlhuOWZsOS9nb0F1UnJFa3ROVFM2S3JzZ043VTJnTDBWeHpOZVpLWHBYalhIM1hldXV1R2RwN2FYSG9kZkNBdzN0NVQwbnNTN3BsSWtwRHNwUDljaFJzb0tOallHRnNQU2JibGMza2kyTmkwa3g0''@;'; put 'put ''TkJxbzdtbE5kY280bGxnVFdld3pneTZJN2tUYzA2RFJhdXhZcDAyQldxOHJxUFdxWHVQbjRTdUNkVmVnNGhUN1FsQ0tucU1icWJwSmdEWFc2a0JwZnN2V29yZTBJYlVFMEpGQ2V3MnRBZ1hKQk12TXlBcUpucThPYS81RVJZUVcwV1dTK0hDSkl0SnphZGRXa2RyR3VVUjVpUUdSMDQ5ZXM2TWtl''@;'; put 'put ''TnNZMGpSaWlwTnlUSlRpL0pCTUN6Zkl1THJ4T2FXRmU0dWVQNisyeC95bHhlMGZLSXh6OUJCN3ZrWlp3MjFzbkpmazhUOGd0eDhGZ0JtTG5oK3ZrTnYvRzN6OGhvMy9ranorZmZMekg4UEg3OWo0Y3Z1am4xbXZxMmdsZncvYVFoVHRFYTJWekt0YUMrb0FhQU0ycTZVTUQ4bDU1dzdWQlMxc3lB''@;'; put 'put ''NXppemFhcHNGaHNsTDhHQ3k1dXJxNmFGMGs0QXY0YWQ2c0twa0tpVkFCS2lEcFNkSnM3czFlZWZ4UGkrS1Z3OE5YOVhTZDZEL1dGejU4eW5td1B0c1ZEQjl5amxUTXhtT3piWm5aZUdJdVF5eGZPTER6OUVEdnRhUERKM3RtWnVhenFYQzFyN3JHRzBsNVZsOUk3bXR2MjVOSzdzbTE3MDBCdk9S''@;'; put 'put ''WUVPVTFVekt2R1ZtSCt5Q0Q0eTUyVG4zb3ZWcytQNDdPRnoxL1hua084TDJ1ZUp5bkM4L05lNHFmUDZBK1IwY3ZsM2xXSHpwTnlra2Q4NU81MFNHNXdMcUdWaXRRMXd2UzhGaXIwUjdXcVVGR0Z5MmtiVVJJcDVhRXFPMjBXczA4a0kxMmlYV1lYQkFkekNCeVYxYURjRktkYkhwcW9SWUhQY0V1''@;'; put 'put ''S2k1cXdBN0ZNdjBwTGIvNGpsck84RFhWSkozTlgxaXZZdUFLOFMwbldHN05yQVlKTFB0UXNOcmxOT3EwR2ozR1drNEpoS3duTUd6V1hEd2VUN09ueVc4SldqWm9Mc1dLQzlOYm5GaU93bWtVclFXNFprTncrTWJCNmY2RzRXNXZhUGpVNEs3QmhtRlJPdG1DVGFsOGRqR0w4V0xXNVpSZVMrYnh4''@;'; put 'put ''L2VuaHQ0MTB1SWZEaHhJRFowYWFRMk1TbS9tY1h1Zy9WRHV1KzJIYzRHQkd1azVQNXlSSEZlZ1o3MWJwakdGSmpjK3B6andzYUxuejZ2dE1iK3Z1UDBEaFhHT1RzdlBaVjg2SFdlZk1zN0hpK0p5Rjh1WitiUGljc0tmSDVmalZyWkltaW5heHdQS1BtQi9NNmpJeGs4VS9BREhGTDIrV0krV1pm''@;'; put 'put ''clpna3cvTmxMY2QyL0JQMkJROUxiU3ZoY0tjdDh3TGZPdWhyVnB6Z3E2bWhOVlUvaTVzSTdUWTRLZElGRzRFWkF4aUJvL1I1a096UzZYR0ZXMUtDdE5TNm1xcnFyMkNZTGc4RkRab2xXOE45bWdYSFFoUytqV3JKRndWbTlMdk1NdTlCY3FNR29hUGJVTjFoL2NmLzhkdGJtRXM4bjBLVmFOMGVp''@;'; put 'put ''dWJiRGpIYXdtZytaMFRaTWMwRWd6aUxCRmNRL1ZTTnlZS2lROGlVVU5uSjdYWTYyK21TWkJVNldFMXhPK1VJbnFvdXVzQUN0TnIxZGpuRW93RGRZZERvY3o0WFRBWndVMUpPUXBBeU85c1BMME5tcUlYVkEzRXloSytDSTV1aTIzb3lUcDYvQUplWDgvVjVPLzZDN2RVV1BmeHV3dm1oREd0dnlS''@;'; put 'put ''UWhhWWFpOTlnT25ZQVVYSC9rT0pyaTduWDFGNkdGRG80Wk5GZlUrcWZiRWVQYk5OMytlVnZnVHJENjdibG8rd3ZrR2w3ODBsZUVSenJiNUdub1EyZzZ4TkJXanhGbVNBTm85ekZ0b0kyaWoyTTJEb3U1R2FuM1VJYUxRYXZoa1EreXdhWXREVGFrc3RUWnpXb21VNG1zcENCWlhDNTZqam5QRTlK''@;'; put 'put ''eGx6dTkzTjdxWWdqWUFHdklycjNGdVNwNlVXd3FQTjRlbERQUnZpMCtmUDUzdldVSEdRZW5UMVMwVkpXMzhiNisxZGZXUkRtTHJneDBnVS9CakhZTmxid0JYMGo3TUYvZVBZTE5yS0I0TEwwUGUyNmF2cUxoeTBVZXBkZ0Fab3ZVc045ZXBWZ293UU1LM1hWVE5KS1lMemk0am5GWWNlWlhjVm8w''@;'; put 'put ''eVlBUUZZV1gxeERhb1JiRjZhMFMxUVhGZnJZTHdxUmp0bDVNOFdGY1pNeXVoYlE5RzdSbnEyVUNYRGtEVU11QnlxWWNVdE5JNTBtT1d6MFJ0ZnpvaFd2dy80YnprR3hSUTBHaDRFcndhMFlBK3R1VU02RUxRNnpUS04wYWdIclZ6OXdCSVFHSmxhcVlqMnEwMFpBUERoclhyUWJMSktkbVZNek9X''@;'; put 'put ''MUJ2eGVMdzN4YURadVNGZVNIQ2RydEx5YUkzZDlZWk1HVzltbVRMa1dzQ3RzWXVCdkZLT2hzbGJadWNOR2l0UG13SUp3ZU12dzkxankzQlkrTWYwV1BySE4rcXRla1pXc1Rvang4V2FGano5YjBsZk9mYU44ZkVUbTR5dEtYK25YdE1aSTdndjRVMEdNVEVkaTdUbnFsSXFoUERvc0hvaldFejFm''@;'; put 'put ''NWFTR09LMkRSME5HNmh6bTlKb1ZnNm9vbFFQMTZYUUNkV3N5TkpMamprdHkzREVlcCs2dWVEN2VsVTFYeENwaTRTYXZwNmJhYnFWdXJ5cVRxaVRScTFSa3ZjajVKK2JWWWJlcnhsc1hNQWhPcCtXWGJ5dkZicStudXJvdDZnaUg2T1VuYzI4MzN3NzArZjhOK0ZYR2FGcjJCUjViKzNpSnYvQmxh''@;'; put 'put ''S05sTkMzci9NZnVVSElHMXFiUkQ0RXVyVFRPVGlXbVZZNnpxMlhvRkdTcXZQR0JmR1RwMXFxVUFkMUNKYjRmVXV5cnRvc3l3VkV4VVIweGtic1ZVY2hrOU5vYk1OY1RMTmJub1RlcTJHMUV3M213WExaZk9ESlZXYXdvRUFrTEVqZlVnUlhpcURCdm1VSm5WUmZrcE9VLzZwSVdxTlZXVlZVNVNa''@;'; put 'put ''Zm1kVnZ5OWZMaTFGaWdVTFhxZ0hYV3QraDUvTWZWTjVTRkFnN1NTczIvV3ZldEFnL2pOL21HV000ZDJHTGFRbTZjVUpJYk41clAwendTR0c4ZjRQUVZJRWNhQVhjWlR1TnZ5WFliUE9jWXJrOG96MjlqejFrZEZwT2JjVVZ1bHBYUUQ0QUVsM08zUXB0SnBZMEZQU3EzZVZSdEk5ZHpQYW1PQStO''@;'; put 'put ''ZnhXUWNMcEp4ZEp3d2F6T3B0TGx1WXhzNWo1WjBBWTZZYVFhYnlWaG1BTTJlMHhPMXNtMVRrWmdabWUyRklqRStUWkVrYStjRjBpWDE3dGtqZnVRalhWMjRMaWJHOEpUMHlxZzRLa21va0t1TFdRNWpnMWhyTE9OMVZLanFsZXE1U3FVWXhNNHVlOEU4YUxYS3dCaFA1Y2ZIODFQNFFMUDBBbmFH''@;'; put 'put ''eEJBK0lqM1pYT3hqdmw3MU1RT01mbFVDUjlrV2ZGbXhCYW4rY1pmY0Y4N21MOW1adFNobjgzdTV2ZlJybWtlb3RvZm45eFhOZGJMZ3o5YkRhV3c5MS9NRnUxTi9EQlg1bFJNRnYvSXg5T1VTZlVXMnM4NFdiTWRqaDlCVy9tOWNqdjZ4Sk82MjBYNGx1UHkwckRPbmdMRStDK2RxQVl1L1hjd1dx''@;'; put 'put ''bEQxcEZDR2FxRGxkbXFlRFRNMmFxMDFEaHRMckpNRnNXczl2S2F5UXhwaFcxZGIvTElvWHYySC9mY2NPSERQZmhLWFBEdmxnSThpakhkL2V2L1MzZnU3Vmw4ZzJZbGJKeWZlUGFUWWxkd2JMSjgwaWRyUmxEamh4SG9kZGQweHJRRTR2VmF2V1RZWmlFNG5WMVc2Um8xOEdVZDFlc1ZsbDByNXdJ''@;'; put 'put ''cEl0YWR5Mll3djZXdU5OTk9VVTZzdjRQT2JZZEViSFhicmZMeEl5RFpzNHVoSWxyWmNoK3lwRzdxaDBmdXVrVUdXaHpuOExxL251cUdDekpXT0ZXVms0ak1iY3RYSGUzc201QnpOOFc1eFRCYSt4V21hYXY2NklvTVBzck5OSy9qN1RBbGV5SG1IOUd4blpkL1BtS0tyQWY0ZVpQaWJWdkQwQ2Jr''@;'; put 'put ''OTRPOEN3OTlaNWJteGFLNlQ2bHlBdisvZGNxNzlESDluWmZ5MXlYT3h1amkyem95eXpydEtjRi9PWmFUcm5KUFhxY1JXWTJzaXE2a1QwUnVpTTluYVVLL1I2ZDAwNmw1ZENhS2RwbGhyRlA5amRHTmNGZlRGSlJEc0R0a2cwdUt0QTZ1eFRZSFZpL2VpM3N2NDVrRHB4YnJKUWQ4dFFxdGJkSlJq''@;'; put 'put ''cXlaZnhFZFRHNndXQTVnQlB0azl1VTEwRlYrOGVwQkUwa2QyVkd3VmFCMjhQckY5VGVITjg2bVNlR3RPMnhaL2l5cERscGNxc3J6VVBKeFpUV3RMZloxR3kyK01oV3RHM0tEeERtOFpFT2Q1M1JLaXllQm8zWmR4MFlENFJUdHRHUkMvU0s5dEErS2wvWlNBdUM4Y2Vuc0JjWHl4QkZ6ODlLR1JM''@;'; put 'put ''UVBqaWFYQXRsbTVvN3UwalNXbkZhemZQazIzbUQ1UHF2UUp0SDFzRy9wOFhxVlByTThxdGFSQW43U1cxSU1lRnUxVmNMVElhUWFKWUtLWFo0MTRzRVk5NUNhRWFJcnBGU3hFUlU1UlI1V2FvTUYwT1VMd0FaRGticXdlVmpQdG9FSGM2YmZSUXd4dWFrd0xBZ2src3FrUGl4VFE0bjVHV1BTTTJJ''@;'; put 'put ''MVRXNTRRdGJ0cCtTdWV0VzV4Q2pWbHRDWTJ0Z25XZlVVMXNuNmdBWnIzSEVmUGlhNG1yT2VhN2NTZ2o5b0lNWlJFVGlKSXE5SGVYSVpwYlkvaENoQmVBRjVhMmNOeG1rV2RYTjlURWtDSnJ2ZlJHOGpwaTNVQ2NHN1pYZ21tRkhYaktKQXMwQzJPNGl3YjJ3bkFvcTZJYlNJcXVEUkQyOGt3SHdk''@;'; put 'put ''S2NEZVNYYy9hYm1qd1Yyd1JRQmxNRm1keXg2cDBmamtuaTlVc014ek5Lamo2emhJY3Bibm1QMkM2NnJ5c3E1S21FbjFXanYwbUNySGZZK2hqcGJvejg4MmVMZmhtancyZ29yanhOd3F4WlNQNlZrbmNtUFZsY1VmWjMydThBVzBWdXdZOTdQTmI5UVdMditCYnh1VkxTS20zbm1iMTFuN1VJYlk1''@;'; put 'put ''Z0NXVnc4bUM2TVBjaUhKN2hYcEhLblA3cmh0RjBNUHZxL0w2ZmZKZEZyTFhmSk0zWkZOOU5qazdlR2JLcktzcWVBeXFEbHl0VkdxVGM2d3VHMXNhRkJlQnY5cnh5UlBGZGRzczczNmE3QUM3aDYzVkFMYWlIbXM1UDZhM0VpbkovdFJmV1VpL0wzWlgrbWhOVGNoREk5UWIvWlFiYy9IWGJVcXlR''@;'; put 'put ''M1pMRnFmbTU5Y05USGZVT0xBNVNiOWd4akY4b2ZYZ0RLZmE1VndCUEZXQ0MzSStQdVY3ZTVnK3hLUHZGZVVIbkZUekErRDVyU1Y5WlIvNDg2b1BIUE9McUtqdlhDRzM0Q2c2VllJTHJFNmI0VXVYb2pNOVZESytuQU5QOFdWUjFwa1VYSlA3enFsOXdUNzk3alo5SDFENlVqL2NuVVY5VHhiNjZ0''@;'; put 'put ''RU4yL1I5WHAwWDYzc1puckw2dDF2aDdDdW9yNEJtNWRLNkJlWXJFTmF2TjNFenhLeEE1VloydllsdVUzV2J2cWlxN2FITnBXeHkvaXdlSWMrL3pacHRKNjNaL2x6WHNmVFV6alI1L3JiRnhhM0hLTlJwRUhRejBNN1ZTcFdHTWtZMnlYdTcwenVuMHNlNnlQT0xpN2NwWTR6ancrUUN2VzJSamRG''@;'; put 'put ''STh3WTAxTkZWbWtKclJpWS9WMGhJVnZiTHpJdjd4K3BDam14dGJkWVJxaDFySXVOMWRTRzcwMmtQMWRiTGMreEJkekIvU0lETjhaYjV1WnV6bmVjVjc4YTZOME91Z1lSMW16azN5NmR1WTZQU1lqNmFVYnlpeFJ6RzNIeWg4SXg3VzFuVnhmY2szOWpaR1E3RHE5cm5xM2I1L1M0eUx2OGQ3bXp5''@;'; put 'put ''dStTSGNwN3dORnBGTmlTZ2RyYUN1TXJQYUtVa0F5R3RjZ0Q1UHMrNEdVZS9tWlFyUjN3T2paSlpyZHp0VytUY3ZhSEQ2MjRwT0hRZlpKNGJtK0xKbGUrZEpWMzRESGthZHQ3TDVzM2FBSVo2NXMreVlqd0VRcERWZUJDTVZ0ak5CZk5xY1RmaEpwbVM1d0JScUZVUUExSE5UYjE0bE9yWWRCSDBh''@;'; put 'put ''Z3R6dlV0d21FT21aajRSdExQZmcyYjZPK216V0N2S2gvaHNwL29wbjBjM2ZwemxnL09vbXEycVFndllPRVN0MUt1dGxrSWV1WlAzK3BYRWNKenRQWnNoTDFmYzlHR1dJSTdYNXFSZnJ6MjhkajhxUno0MmdxdDhpMm9WWDJFc2Z1Tmx1RitRZlpBMlY0MzNEZG0zeVB5TUJmNTR2Y29mVVIvT2JN''@;'; put 'put ''TWZYMWI1SStwRFR4WHgxdlcreC9HWEw5cjNPQmFMK3M0VitoN0ZReVg4VWU3N1FLSHZVZXEzWlBjVEx0QTRRbkVNNHMwMVdRZDRjMDNSQVJKcnU2a3ZYL1pMc3piZmZGT1NZenR2U2tvYjJiKzlVaGpIREx4dWEvLzIwd1gvdG5rY2JaazcxcmVGanJFeHprdFEzd25sZmxYMG44U0FveGUvZi9n''@;'; put 'put ''ZnBEaU9kcWg5dVBhMzBZY2piMHBxbjJIOGJYU0IzQWs0MC9vd29NdlFwc3U0WFpzdTQ1YXJoaFlla2JISXFqcTlaU0Y5Z1Y2blhHMm4xeW1UVytsOXloYTNmSjh5aFNQK0ZucU1mQXFnVUlHb0xHQTFRR1NrVUFNRTY4QW4yVHBxVWZzanRlVkVYWXFaRmRheisrTFpZcXdieWo0NHh2NFdIdlZW''@;'; put 'put ''K1N6c1JwR05LM0p1dThCLzNXYXRydEoxNCt2SXB5cUQ4cnJaK3I4SzY3Y1UxazlSU3QwSXZYUHJjZHlOUC8ybjFWSDhyNzYrZUx5M04vNjQvQkh2ay9GbkdQQXFoSFlDYmdpQUcxNTQveXJEY1FIZkRBMTRlaysvWm5mUlBmM2RhQlJtK3cvNXJ2NldDcXd0bDYvUjEyT2RDWmNaZFdYRlYrOWJ6''@;'; put 'put ''UmJPYU9TV0JFTWxyeW0rc1Q5OWtZN3M5bjI1TjA5N2M4cTkvYmt0KzIxeGMzOUpYekEwTW1Oam9xamU0RDgyUHphM2E2YzRLbzRNOUNlNkUvbTJ6SmEzK2R2K2pOdjhHemI5N1N0cTI1RDVrMi82eDhPRHdjSWYwaFBxdmY5MzUvN1Uvd0hBbHY4emdQWC9LUUM5VnlpTjF2RGYwZHNtSHRaaW5B''@;'; put 'put ''aDNZeWZBTG5CdjVoT2Z5THorZGROalQ1aVZPNTNTb0dRcjdUaldMcGgxOHRGUGZDTDkyYy8yUHZHWTZldmZZTExpWjhxZGluRTBLWTdWdUlsR0IrTFBpT25OdUJvcUNqWGNzZ0dUTW95Tk5BKzhrUGx2d2thajZ1bGd0bUVzRW01dUVpeCtzUGtFcTk5TWZWU0ZlenFDWUJCUzB3SSs4cVNRYktl''@;'; put 'put ''am1VUUFaQ2Q4MFBqWGkvS1ZpMk8zTFR2MlRYSzZYWWRjUjI0WlZoTCtaejdreGNQU1oza05YcExPMTM5MFQ0SmR3OWg3Y2lqbmRIcnFjMzJYZHJKcy93TVR1VnB2dFMwM2UwS1c3emhPeXZGbHdBZDFENE5DbDJCY1Q3NHA5ako2Unl4VGRFRFY0WUFyZXdRUDRWWlg2WXZ4b1NUQXBVNnBKZGQv''@;'; put 'put ''eVdVMWEwbGlpMHRTU292QzY5NnFLUHlONVcxcndvSE81VGxCQnVDRUVsdDRnTkcvL1B5Qzhudzk5aWsvZjc3d25MKzYrUGtENm5OMDlOTGk1K3ZqOTRGYXRmNzhiS0g5c2YxSWdjRTB1UXhnUUdNRitpODFlYTBZWUZCaWlxbVFXTGZEQXB0aGNwbHNseFVEUnJITC9yTUlQb3FOTmxjRUlzVTgr''@;'; put 'put ''NHNOV1FucmE2WjJ0YndYc0wzL29tZ3ZUeGRnWXA2VDVTaE4rL2tJdTV0Q3hZV2s0SjFXcnFPZzM2L053UGZhMHUrMXE1UG9md0FQZm54NUFBQUJBQUFBQVFBQXRDY0F3bDhQUFBVQUh3UG9BQUFBQU5QQm5ZWUFBQUFBMUw2bTlmOVcvdThFV0FQRkFBQUFDQUFDQUFBQUFBQUFlTnBqWUdSZ1lE''@;'; put 'put ''NzY3ellEQTB2SC83RC9rMWtpR0lBaXlJRFJHZ0NsaGdhdkFBQUFlTnFObEUxb0UxRVVoYys3azVVTHdUOFVCU2xxRWx1YnBLMmhEYVkwbEJSYmJVclNqbllSYWtXaEN4ZGFZclc2RnRHNkV4RVhYZmtEVXZjdUJiSHVSTWdtdU5LSytFTVVXbHhrSVMwNG52dWFxWFhTZ29IRE56TzViOTY3NTUx''@;'; put 'put ''NXBvWXo0TThNVVFjb0E5ZmNSNzg4UkZUT0krN3NRRUllb0JrZjBXL0cwRVBGelF6U01veXNBZkptQ2lrczRvUzU2LzJVSjBpYkl2YktTYlJMRHc3TEJGVkFTczZoVzA1elRBRkp2YmIxSE11NkxuMFBtVE0xN0hOS2FKVXZhSkpIR0pjNTF0YklDZFlWcVNydlh5R1BCVjd2NGh3M01TYUgwT2NN''@;'; put 'put ''c0laMVRwVC8zMERlOGhacnVIYVpSa3plWTFUZkdXcEdXSjRoSXZld1hhN2ptTG1BWWE1NWhXdzNuOUVwQmUrM1NTTWpYZWlRSzNCbE45cklUbkhSeHA3RE1ra2ZzaGhDQlJtODlWN0lOZ3ppSFhMT0ZITDZYSzdaZWxmSG1LdjBjQkV4TThseFdmNmZZRzlKSEpROTdHMEErMFZZY3dkSHpGWmNK''@;'; put 'put ''T1BtSlhycCs0aWRzMGhQdUVZeml6Nnp4SnJueU5oMWpTT0tEL1E4eWZzbEpPblhxbGNieVBsT3FuL3EzVHBod1N1cmYrUVA2cHV6QlMyK2QwSEpUb3hZcW4vcnBmN1JaK25BS2V2VkJuTEtwUGJpL2l0VXZEZjBiNUQ4U24yU1M4eUY3MTFRbWd0bDF2cjdWK3FmK3F6VWZuWE9JTFYzbmQrbjVv''@;'; put 'put ''ajdZdnU5elQxVlAzUk5tMUd6cHZ0ZEo3MnFjTDNxWFJPNVFoN1hQbXdHbVFQTm9XWmhqV2NSTmhIdXZjNnIvUVZvZldWdmExeEdNdFRDZVpsYnpVNERtV1hOVXdPbjZ4bnpxZnVqSG0xQy9RWnNEblVQMWIvNnQ2QjVERkl6em14bXJCNHo4MlV5UjNWVHI1bkRYM3dHYjlSL1o1QU5udGJuWkc3''@;'; put 'put ''aFZGZlBHeXhUVHdIcFJjcTVqQlRQQkhzdW1IbHlucHlsdnlWZTgxd0t6U0JoV2hHaFlqTG5WVzArSEk0dDRlaC9pWm1CK3dlYlAvVU1lTnBOd2wxSUdnRUFBR0R6djFOUE8vVzY4KzY2WCs5dWV1ZWRkeEVSRVRKRVFpUWtZa2owRU5GRFJFUVBRMEpreEFqcElYeUlpQmdqSW1TRWhJd1lJU042''@;'; put 'put ''a0JnUnd3ZUpIaVFpSWlRaWVoZ1NNbVRzWlEvait3d0d3L0kvZTRaeUQ5S3pib3diVDR3UEpvTUpOMVZOZDJhcm1USy9OVStiRDh3MWk5RXlaOW14UEZxVDFpWHJveTFwMjdFZDJzNXM5N2FPUGRXYjZNMzIvZ1FnSUFua2dCTFFkbENPSWNlQ1k5dnh6WEhudERvbm5Cdk9sb3R6cmJwMlhYVlhH''@;'; put 'put ''MlRBTkpnRkQ4QnpzQWwyM1FQdVVmYzdkOVVEZXFZOFpVKzNMOVZYN1d0REhMUUNmWWFPdlVidm1MZmd2ZkZwdmhsZnhmZms1LzBKLzN2L3ZyOEpXK0VKZUI0K2drL2hsLzVZZjdHL2pqZ1JCQmxDMHNnSHBJVGFVUis2aU9iUklycVBIcVBuNkhXQUNqd0gvbUFlak1FR3NRU1d3UmF4UEhhSjNX''@;'; put 'put ''QXZ1QUdIY0E0ZndxZndHbjZGdC9BT0FSQTRNVTFVaU8vRUQ2SkIzQkpQeE92QUpqbEl4c2dVbVNIbnlSVXlUMjZRMjVTZDhsRVVKVkhEVkp4S1V4VWFwaGs2UW8vUUNYcVNMdE1uOUFWOVJiZm9YMHlNT1dYcVRKTjVaam9zd09Jc3h4YllYYmJFbnJBMUR1SStjVWRjbGJ2a3Jybjc0RXJ3WTdB''@;'; put 'put ''WVBPY1JQc1RIK0JTZjRSZjVQRi9rOS9rRzN4VkFJU0R3Z2liRWhiUXdKeXdMYThLbTBCUm54R1V4SnhiRUxiRWtmaFZyWXYzTllXZ3R0QlhhQzRmQ2pmQkQrRld5U3o2Smx6UXBMcVdsTDFKWEJ1V0FMTW5EY2xLZWtSZmtuRnlRZCtXU2ZDMTNJb0ZJS3BLTlZDTnRaVXlaVlRhVlBhV3NuQ29Y''@;'; put 'put ''U2xOcEtSMFZVSEZWVkVmVXhIOW0xWnhhVWMraVFKU0pqa2N6MFl3Mm9jMXBXZTFCYSt0R2ZWUWYxNmYwV1gxSlg5WFg5WVorcXovcHZ3ZUJ2MHRBdlNvQUFBQUJBQUFCUEFCWUFBb0FQd0FFQUFJQUtBQTVBSXNBQUFDREFSWUFBd0FCZU5xRmtzMU93a0FVaGM4VUpJREdLREV1R2hkOUFmbFRJ''@;'; put 'put ''ZXBTdzBaUUl3bzdFaEFFSWxBdHhZVFg4Q24wVGZ4NUFkMjRkdTNhaFlmaHRxREJrRWs3Mzh5NTk5eTUwd0tJNFFNQnFHQUV3Q0dmTVN0WVhJM1p3RExxd2dGazRBZ0hrY1NEOEFKTXZBbUhtUHNsSEVaYXhZUWpNSlhudVlodFZSRmVRa25kQzY5Z1RYMEtyeUtxdm9XZnNHNkVoSitSTkRhRVh4''@;'; put 'put ''QTI4c0t2aUJyblkzNFB3RFFxT0lDTkd3eDU0amFhYU1IbHlSNzVwSG55RkR1eFVLTnFNYTZsWS9ya0l1Y3VzL3JNN1NHT0Fock1jN1NUalk1RTVYM0hNK3BOREtoVUdaVmlSbEtQZlZ6Z0NHVWNrMlo1YkU1NXpLdGgvYWxTNHNwaFRGdWYwWnFxT3E5U2lYVEoyV2JNcVBNVDVqYzRqL0xxMUty''@;'; put 'put ''a1UrcERYZC9sM3Y5M00vSnp1ZHBEZ3VQdWw3T3RmYnUrYTV5YXpiV1gwNWVzSmxXWHV3TitDUzhtd2RtcjJkVmRUbW9tWm5ZNGEyL1NjNWxxRFZjNjMvVnZxeUIzbDlPcXhaSFJXcFluUzJHWDd5M3MrUDlLRnRlTWEyaC9SKzQ5NXpzV2Njc08ybFFjeG5SK0FHaWlndmNBQUhqYWJaTlhiQnhW''@;'; put 'put ''RklhLzM3RjMzVFpPNzcxWHgxNzN4Q2t1YThleFl5Y3VjZXpFU2NhN1kyZnhlaGZHdTNGc3VnUUNIa0R3d2pQbENSQzlDaVI0UUtKWDBYc0gwWG1rQisvY0NWNGs3c044L3htZDg1OHo5OTRoQzNlZEcyQWUvN05VbTM2UXhReXl5Y0dIbjF6eXlLZUFRZ0xNcEloWnpHWU9jNmZxNTdPQWhTeGlN''@;'; put 'put ''VXRZeWpLV3M0S1ZyR0kxYTFqTE90YXpnWTFzWWpOYjJNbzJ0bFBNRGtvb0pVZ1o1VlJRU1JYVjFMQ1RYZFN5bXozc1pSOTExTk5BSXlHYWFHWS9MUnlnbFRZTzBrNEhoemhNSjExMDA4TVJlamxLSC8wYzR6Z0RuT0FrcDdDNG5hdTRtcHU1Z1R0NG4rdTVscWY1bUR1NWpidDVubWU1aDBIQzNF''@;'; put 'put ''aUVGN0Y1amhkNGxaZDRtVmY0bGlIZTREVmU1MTZHK1lXYmVKczNlWXZUZk0rUFhNY0ZSQmxobEJoeGJpSEJSVnlJd3hncGtweGhuTzg0eXlRVFhNeWxYTUpqM01ybFhNWVZYTWtQL01Uanl0SU1aU3RIUHZuNWk3ODVKNVNyUE9WTEtsQ2hBcHFwSXMzU2JNM2hWMzdUWE0zVGZDM1FRaTNpZDk3''@;'; put 'put ''UllpM1JVaTNUY3EzZ2M3N1FTcTNTYXEzUldxM1RlbTNRUm0zaVB1N1habTNSVm0zVGRoVnJoMHI0Z3ovNWtxOVVxcURLVks0S1ZhcEsxYXJSVHUxU3JYWnJqL1pxSDArb1R2VnFVQ05mODQxQ3ZNdG5mTUNIZk1TbnZNY25hbEt6OXF0RkI5U3FOaDFVdXpwMFNJZlZxUzUxcTBkSDFNc0RQTWdq''@;'; put 'put ''UE1wRFBNdzEzS1dqUE1PVFBLVStmbGEvanVtNEJuUkNKM1ZLbGdZVlZrUzJodngxbzFiWVNjVDlscUd2YnRDeHo5Zyt5NFcvTGpHY2lOc2pmc3ZRMXhpMjBra1JnOGFwQ2l2cEQza1d0bUYrS0pKSVd1R3dIVS9tMi85S2Y4aXpzajJya1BHd1hSUTJoeE9qbzVaSkxSek9DUHd0bm52VVk0dm5F''@;'; put 'put ''elVzYk0yc0hNa0lmRzFXT0pXMGZUR0ROdE12WnRCdVhzWmRGTFpuZXNRelBkcE5ldHlGdjhPYklXRVk2RGlkaWc5YlRtbzBacVdTZ1VSbTVPczBIUnpUb1RPemc1UFpvZE4wY0F5NlROV1lDMzhxSGkwcHJReDZMUE4xbTZTa21hYkhteVpsbU5QalJPUERPYW4wTTlEem44bFNtWkcveDl2QmxH''@;'; put 'put ''RkJiempxaEZPalF6SDdiTUY0aHU3TDBCUFQydGR2WnB4MGtkOC9mZHFUMDZlZG5qaFlWdVd5TEZqcDZ4MTJyS2xyTlc3UWF4ekdYZVQxUnFLMlk0OUZ4L0xHejZ0MFhXbW92dHBqamNjR2o0MitQbU0wNFNMOU5saFNFdlJZNXJIY1k0WEhTc05nVTNZbzVTVGNvS0twSWNjcXRtTEpmTXVkeFVq''@;'; put 'put ''MzdxZGxrVFg5MmVrNFlKMGYwQ1M2M2RPeXdQdDlqRGI3bXRaNVZ2bzBUSEl5R291NHliblcyTlFlUld3bkwySjc2aCszWmJjaEFBQUFlTnBqOE43QmNDSW9ZaU1qWTEva0JzYWRIQXdjRE1rRkd4blluVFpKTWpKb2dSaWJlVGdZT1NBc01UWXdpOE5wRjdNREF5TURKNURONmJTTEFjcG1abkRa''@;'; put 'put ''cU1MWUVSaXh3YUVqWWlOemlzdEdOUkJ2RjBjREF5T0xRMGR5U0FSSVNTUVFiT2JqWU9UUjJzSDR2M1VEUys5R0pnYVh6YXdwYkF3dUxnRCtIQ1ZnQUFBQUFBRlltUFozQUFBPSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9u''@;'; put 'put ''dC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGVWtBQk1BQUFBQXBRZ0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVS''@;'; put 'put ''VVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNYQUFBT2RqNThmRXhIVTFWQ0FBQUpMQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxNQUFBQVRRQUFBR0JvUUt6elkyMWhjQUFBQ1p3QUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTUNBQUFBREFBQUFBOEVhd0JwR1p3WjIwQUFB''@;'; put 'put ''dzRBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFblFBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZkFBQU40d0FBSEc0LzdIR0RHaGxZV1FBQUVvSUFBQUFOZ0FBQURZTFpZZ1NhR2hsWVFBQVNrQUFBQUFoQUFBQUpBZDZCQ0JvYlhSNEFBQktaQUFBQW9ZQUFBVGFxMU0rVld4dlkyRUFBRXpzQUFB''@;'; put 'put ''Q2N3QUFBbnBON2pMbWJXRjRjQUFBVDJBQUFBQWdBQUFBSUFLRUFwRnVZVzFsQUFCUGdBQUFBWEVBQUFNUUkreDRZWEJ2YzNRQUFGRDBBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWSmdBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWSEFBQUFBWUFBQUFHOW5kWW1BQUFBQUVBQUFBQTFGRzFhZ0FB''@;'; put 'put ''QUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNOYkpiVkZYN091ZmUrMzlldmdLV1VINkVnSVZnYjB4Ukdt''@;'; put 'put ''QWl5YVJoVVJ5cVNqaWthWnZiam5JUHgxMkV6RnVmNGNXZ1dVaGVIREFscEVQa3gyZ0NpWWtYR3VvWXh4ellDeWd4aFlGd0h5QlltMCtsQ1JIbjN2T2Y5c0MvUWJ1TUpENGR6NzN2dlBlYzh0K2NXQXFDQUVaZ0ttVnhYUHdONWVIb1F4M0Q4UjZCd2M3N2RPQThWYzcvUk9BZVZjK2ZNbmNQWm9E''@;'; put 'put ''OFpUV2NrN1BoZEFRTXdERlhtY1JpSmV0ZWFqa1lMYkZXSm1oSHhJK205aUY4TU5sOUF4V2NRMU1YTjVJQ0pXSWxQRWN0Z0tJL0JlVEpJanFFVXZYaXlmOFFkOFpiNFNId2NQZnlKMys5eDVQZmRlanU1ZC9iL0orT2Y5N2pDdXoyTzlIeWVQOFc3ZWhqWkVuZkd1eE5jNWovQ3Y3OUwwTjBlY1RP''@;'; put 'put ''enBCak9URmN4VzljUmlsckNZUlRoTVlZSStEd1JZUnlSdzNnaWp3bEVDWE03a1pWcUlnUkw4UlBPZkpRSXpQaEsrbDhtQks4UWdsY0p4U0hDNDAzQzR6Z1I4RmNpd2traXdydEVoTE5FRHU4VE9ad25TbGk5VDdsYVRCU2tUTXBRSXVWU1RxNlFDdkpnVnJiQXRVZFRKU1A1emZXRTJMblRFNnVk''@;'; put 'put ''Mk5tSnZaMDRZREtSUngxUmd0dUlBaHFJVXN6SGcxd2hpU1N5U0NLTEpPQnhQTW41cTRrUy9BSnJPZjlwYk9MOExVUXB0aEU1YkNmeWVJSElZUWVSeDR0RURpOFJlZXdrU3RCR2xHQVBVVUE3VVVBSFVjQmVvb0RmRUlMZkVtTFppZkEyVVlxL0VHbGUxUEtpbGhkdmVRbVdsMkI1OFpZWGIzbnhN''@;'; put 'put ''bEFHTWw5WHk5WGtKRWVCcTlZeVExV3NjUzFyTzRZMUhjZk1UR0JHNW1NQkZxSVIzOGNpMW5JcGxtRTVIbUVXSG1YMDJ4alJpNnprSzZ6Z0lWYnVPQ3Qya3BVNnk1T2N0NXRWeG4wcmt2dWxEOXM5M0NlTmpMczMxYldidW11T1ArcEdyVGJTM1IzNGJPUk1nbTYrUE52ajNUaHpVZkc4MThmajVm''@;'; put 'put ''SHl5MGZTV3hldmk5ZDFPL0kzKzBaUmFab1EwNFRpcTRURDNZVEhQVVRBTENLaUlwN2tuRVFOWW1wUVU0T2lsWWl3bFlpczBtS1ZGcXUwV0tYRjZxbzRRVGljSWh4T0V3NmZFQUVYaUVqNlNsL1d0Wi8wSS9lWC91U2tvbUlWRlJraVE3aStvZ1pYRWFYb1MvUXlwWXNwWFUzcHJxajBXNG1zMHIz''@;'; put 'put ''RkUyWGl5Wm5TWFZIcFhScjNGcFczcUhJVzFVV2xweHBQMWIyTDZGblhTYlRlTkt2RkNCUGxPb3N6Wi9wMXBsOHR4cHlvV0l1UkoxcldUUHhaUlR2TFFrNUd5M2p1bnZ6MHFtT0VEYXpYM1l4ckZpTlp6VWpXNENsRzh6UTI0QmxzWkVSYkdNbFczc1kybnJhZHA5ekwwNTFnRFU3elpCZDRnbjdj''@;'; put 'put ''YlNCM0djSVZoNW1lRlgyc281U2JPc3E1eTgyMHhPeWIyWW1PUmNQSW5jeC9oNnlRbGZLRXJKRVcyU2pQeVhiWktidWxRMTZYQTNKWWpzbzdja3JPeUFkeVRpNm8xNEtXNlFDdDFCRmFyYlU2Vmlmb0xWcW45ZHFnTS9WZXZVOW42d0p0MG9kMG1UNm16YnBLMStwNjNheXR1a1BiZEkvdTFmMTZV''@;'; put 'put ''Ti9TWTlxcHAvVTkvVkEvZG5DUjYrWEszU0EzekkxMDE3dlI3Z1kzMFUxeXQ3bHBib2E3eDMzZDNlKys1eHJkRDl6RDdoSDNVL2N6dDlxdGN4dmNzMjZyZThudGN1MXVuL3VEZThNZGNXKzdFKzd2N3AvdTMrNFRyejd2Ky9nS1A5Z1A5MVcreG8veE4vb3Yrc2wrcXAvdTcvU3ovRGY5QTM2ZVgr''@;'; put 'put ''Ui82SmY0Rlg2bGY4S3Y4UzErbzMvT2IvYzcvVzdmNFYvM0IveGhmOVMvNDAvNU0vNERmODVmQ0Q0VVFsa1lFQ3JEaUZBZGFzUFlNQ0hjRXVwQ2ZXZ0lNOE85NGI0d095d0lUZUdoc0N3OEZwckRxckEyckErYlEydllFZHJDbnJBMzdBOEh3MXZoV09nTXA4Tjc0Y1B3Y1lRb2lucnhkaXpXYmVR''@;'; put 'put ''bHhuVVpYcFV3bW94YnpMTzB5MS9rYWNZMXhqY1pQNWl3RGpWN3V2RWs0MnVWUDFPbDJuaVU4WlNFc2RCNGs3NUdialQvZU9PSjV1ODBQbStlNjR3M0dGY1o1NDBiM0d6eTg4YUx1MmQ5TXh1aithOWdURE4rMXJpcGkrV3VOSGF6NXhudk0xNTFKYWNaTVB0S25tNThyYmIvTDlhTmwrU3F2VHZH''@;'; put 'put ''bDQyZk1WN1l4Y3hldTJYdnYzT2F6L1p1dVNyRGl6Tm52c1RPMUhTSithdk5uN1hUckQ1dTlsMlp6SS9xR3IxbzIyaXFpcXcvemVxVTFMWTVxV2JTNnFSUnAvb3Mya1YvTXFmRjdFMnU2YUo2aXhwN3crejlpVjJzYVpxeFZOdXA5ckwrOUF4cDNnNmEvU09yMFo5TjUrZHNmcXFjVHB0ak55TFY3''@;'; put 'put ''U1grR3JQUHA3Yk5TVldkOWFjMzZLYU1adEtLWk8wWHpQNVc2cmY1ZGk5MHFQazNtRDlWV2xYR25tU2NOMDlQOWtmcGZiSG83akQ3c05uWmxldmlYeVhWaWZkY1ZxbnNqbE9LdDd2OS8rQkxaeXF1c1hjcCtPNnFabGFTMTZsbjE2NWhGMHhlMkJFK3g1ZFlEbU54STN0WTBybjdzRzkvZ1QwOTZk''@;'; put 'put ''eDk3WTFhYnAyN0gzK3Ztc28rVkUvMHh4M3Njd1BZNmU3azd6NHppVXJyNVVQWjliN0dyaldmYjdmaDlub2J4NDdld3ZYV3MvUGRicjN2Syt4K3I3RkQvaElIOEIyKzZNNWlzYjBxMStCZkV2QVVPL0VRdEZwUGJlTjVSYTZ5MzgwaVNQeGpVK0VTM0U5ZXdXNVhpa0hjYXlRakdvMGJlT3BKUE9V''@;'; put 'put ''MHpPRG9yMDI3ZnpRK2FteDNCdnN5Zk1oNHJ2Rm00MVJWT2JOTDhTWHU4d0MrS3puSlM0a1VwRlI2UzU4clQvUWY2ajZiS1FBQUFRQUFBQW9BSEFBZUFBRkVSa3hVQUFnQUJBQUFBQUQvL3dBQUFBQUFBSGphWTJCbWNtQ2N3TURLd01MVXhSVEJ3TURnRGFFWjR4aEVHTTJBZktBVUhMQXpJSUZR''@;'; put 'put ''NzNBL0JnY0dCZFUvek5ML2pSa1ltSTh5cWlzd01Fd0d5VEd4TXEwSFVnb01UQURKWlFwQUFBQUFlTnExazFsUWpsRWN4bi8vdDMwUktoVDE5dlpwMDBhaUZFWDJwY2krbEt6WnNxL1pHdXNRUTBWU3lKNGtveGtUVTFPMkcrNjROV09NdnMrVlcrNE1IY2RYVERQTXVISm0zblBlYzg2YzU1eDVu''@;'; put 'put ''dDhmY0tIckMwRjBqMVRxbVRqbnJsS3N4eVdNdzQyQmxIQ0xPdTdTU0JQTnROQW1IaElnZ3lSTUJrdWNKRW1xcEV1bVRKVWN5Wk5DS1pJU0k5VjRaYngzaVRLUG02M21FL09MNVc0RldzRldxR1d6b3F4aFZycDEzK1lmK1UwcGZZZkZqUjdhajJuam1maEtmekhGSnJHU0tDbVNKaG1TSmRtU0t3''@;'; put 'put ''V3lRVFpyN1pmR1c2MTl5R3d4MjgzUGxtRUZXRUZXaUZON3FKWDJTMXQ5VkMvVWMvVlV0YXRXOVVnMXE0ZXFTVFdxQmxXdjZ0UTFWYXRxVkxXcVVwV3FRcFdwTTZwVW5laDgwNW5WbWZUOWs2UGNVZURJZDhUWUI5cjk3RDUyTDd1YjNlajQydkc1NC9DSGtIZkpYVjc5cCtadWVEdVQ0STliQktQ''@;'; put 'put ''N3ovaUhSdGRKRjF4MWR1NTQ0SWtYM3ZqZ1N5Lzg2RTBmK3VKUEFJSDBvejhEQ0NKWVp6eElweDZLU1poT0pCd2JnNGtna2lpaWlXRUlzY1FSVHdLSkRHVVlTUXdubVJHTUpJVlVScEZHT3FNWlF3YVpqTlhNWkRHZUNVeGtFcE9ad2xTbU1aMFpaSlBEVEdhUnkyem1NSmQ1ekdjQkMxbkVZazFh''@;'; put 'put ''SHZrc3BZQmxMR2VGZnY4T2RyS2JZZzV4bk5PVVUwWUY1emxISlZWVWM1RWFMbkdGeTlSeWxldmMxQlQ5WlBRMkRacWxlNXFtbjIwVnE3VWQwV3pnYkxjMzYxbWorMTJjK08xVzRWOGN2RUE5bTFuWlkyVXRteVJHajF2WXpqSHNPQ1JjOHhrcFVib0NJcmlqZHg2Z2FaWUVYUS94M1dlS25HSEVz''@;'; put 'put ''bzI5YkdVZmV6akFRVjFMK3puQ1ViMTFtRkpPY1pMWHVwcDZzVTY4eEZ0ODJDaCttbi9QSDVETnF1aDQybU5nd0FMOGdkQ1p3WmxwUFFNRDAyNG1WZ2FHL3lITTB2K05tWGIvLzhKMGpFbncvNWYvZmlBK0FNOVBEVmg0MnExV2FYZlRSaFNWdkdVakcxbG9VVXZIVEp5bTBjaWtGSUlCQTBHSzdV''@;'; put 'put ''SzZPRnNyUVdtbE9FbjNCYnJSZlYvd3IzbHkyblBvTjM1YTd4dlpKb0dFbnZiVUgvVHV6THN6YjV0NVl6S1VJR1BkcndSQ0xOMDFocGFYS0xkNnphZFRGczBFNGJab3J2dVVLa1IvOVJxOVJxTWhONng4bm95QURFOHV0Z3pUOEVMWElWT1JDTGNkU2lteEtlaGVuVExUMTFvelpyOVhhVlFvVi9I''@;'; put 'put ''emxDNEVLOWY5dk14YlRWOVF2WTZwaGNBU1ZHSlVDZ0lSSit4b2syWXcxUjRKbW1QOUhEUHYxWDBCYjVxUm9QNjZIMkpHc0s2ZjBUeWorZEFLZ3lDd3lMU0RRSkpSOTdlQ3dLRzBFdGduVTRqZ1dkYXIrNVNWTHVXa2l6Z0NNa09ITWtyQ0w3RVpaemRjd1JyMjJFbzg0QzlJbFFhbFovTlFlcUlw''@;'; put 'put ''bWpBUXoyVUxDSExaRCt0V3RCTDRNc2dIZ2haV2ZlZ3NEcTF0MzZHc29oN1BiaG1wSkZNNURLVXJrWEhwUnBUYTJDYXpBUU9VblhXb1J3bDJkY0JyM00wWUc0SjNvSVV3WUVxNHFGM3RWYTJlQWNPcnVMUDVidTc3MU41YTlDZTdtRFpjOEJCM0tDcE5HWEZkZEw0TWkzTkt3b0tUSFM5UkhSa3RK''@;'; put 'put ''aVlHRGxoT1UxaGxXUGREMjczb2tOSUJ0UWI2MHlpMkpmUEJiTjZoUVJXblVoWGFqQllkR2xJZ0NrR0h2S3U4SEVDNkFRM3lhQVdqUVl3Y0dzWTJJem9sQWhsb3dDNE5lYUZvaG9LR2tEU0hSdFRTbWg5bk5oZURLUnJja3JjZEdsVkx5LzdTYWpKcDVURS9wdWNQcTlnWTl0YjllSGdZQll4Y0dy''@;'; put 'put ''YjV6T0lrdS9FaC9nemlRK1lrS3BFdTFQMllrNGRvM1NicXkyWm44eExMT3RoSzlMd0VWNEZuQWtSU2cvODF6TzR0MVFFRmpBMWpUQ0piSGhrWFc2WnA2bHFOS1NNMlVwVTFuNGFsS3lvMGdNUFhEOE9oSzBLWS8zTjAxRFNHRE5kdGh2SGhuRTEzYk9zNDBqU08yTVpzaHlaVWJMS2NSSjVaSGxG''@;'; put 'put ''eG11VmpLczZ3ZkZ6RldaWkhWWnhqYWFtNGgrVVRLdTVsK2FTSysxZytvMlFuNzVRTGtXRXBpbVRlNEF2aTBPd3U1V1JYZVROUjJydVUwMTNsclVSNVRCazBhUCtIK0o1Q2ZNZmdsMEI4TFBPSWorVnh4TWRTSWo2V1U0aVBaUUh4c1p4R2ZDeWZSbndzWnhBZlM2VkVXUjlUUjhIc2FDZzhkc0hU''@;'; put 'put ''cGNUVlUzeFdpNG9jbXh6Y3doTzRBRFZ4UUJWbFZKTGNFUi9Kc0RqNnVXNXB6VWs2TVJ0bnpZbUtqMGJHQVQ2N096TVBxMDhxY1ZyNyt4eDRadVZoSTdpZCt4cm5lV1B5RDROL2l4ZGxLVDVwVG5Cd3A1QUFlTHkvdzdnVlVjbWgwNnA0cE96US9EOVJjWUlib0o5QlRZekpnaWlLR3Q5ODVQSktz''@;'; put 'put ''MW1UTmJRS0gwOEVPaXZhd2J4cFRvd2pwU1cwcUVrYUFTMkRybG5RTk9yejdLMW1VUXBSYm1LL3Mzc3BvcGpzUlJuTWdDa281S2F4c096dnBFUmFXRHVwNmZUUndPVkcyb3VlTERWYlZuR0Z2UWZ2WThqTkxIazNVbDY0S1NudFJadFFwN3pJQWc2NWtUMjRKb0piYU8reWltSktXS2dpUGdodEJm''@;'; put 'put ''dnRZMFFtTFRPRExvRWlaSEd5c2cvdGloMDVvb0oyQXQ5NjBpcnYyMEx0ejNYeUlEQ2JuVzduUVphUm92TmRGZlZxZlZYVzJDaFhyOXhOSHdmVHpyQ3g1aGRGR1U4dWU5K2VGT3hYcHdTNUFrWlhkci91U2ZIMk85YnRTa2srMnhkMmVlSjFTaFh5WDRBSFErNlU5eUlhUlpHeldLVVJ6NjliZURK''@;'; put 'put ''Rk9TakdSWE1jRi9UU0h1MktWZCtqWGRoMzdhTldYRlpVc2g5bDBGVjAxbTdDTno1ZkNPcEFLZ3BhcENKV2VEcGtQcHVkbXZDeGxMZ3NSZHl6Wk5kRjlCMDhJUjNpdnpqRXRmL3IzSElVM0tMS0VsMW8xd25KQjIwZksraXRKYnVUaHlwR1orMjhiR2VpSFVrMzZCcUNua2d1T1A1ZTRDNlBGZWtV''@;'; put 'put ''N3ZQekI4eGZ3WGJtK0JpZEJyNnE2QXpFRXVldGdnU0xLdDdTVHFaZVVIeUVhUW53UmRWQ3N3SjRDY0JrOExKcW1YcW1EcUJubHBsVEFWaGhEb05WNWpCWVl3NkRkYldEcm5jWjZCVWdVNk5YMVk2WnpQbEF5VnpBUEpQUk5lWnBkSjE1R3IzR1BJMXVzRTBQNEhXMnllQU50c2tnWkpzTUl1WlVB''@;'; put 'put ''VGFZdzZEQkhBYWJ6R0d3cGYxeWdiYTFYNHplMUg0eGVrdjd4ZWh0N1JlamQ3UmZqTjdWZmpGNlQvdkY2SDNrK0Z5M2dCL29FVjBFL0RDQmx3QS80cVRyMFFKR04vR010am0zRXNpY2p6WEhiSE0rd2VMejNWMC8xU085NHJNRThvclBFOGowMjlpblRmZ2lnVXo0TW9GTStBcmNjbmUvci9WSTA3''@;'; put 'put ''OUpJTk8vVFNEVHY4UEtOdUg3QkRMaGh3UXk0VWR3TDNUMyswbVBOUDNuQkRMOWx3UXkvVmVzYkJOK1N5QVRmazhnRSs2b25iNU1xdk5uMWJXcGQ0dlNVL1hiblhmWStSdGxNN29zQUFBQUFRQUIvLzhBRDNqYXRYMEplR1BWZWVnNTUwcTZramZ0a21WNTBTN2JzaVRiMnJ4YnRyeEt0dXl4eCtQ''@;'; put 'put ''WlBKNWh4dU1aR0FpVEdRakxERXNJSlNTa1NVTkMyZ1JDQ0R4YWFGa213TEJNRmdoZlNpWUxKQzl0bXJSWjJyUXA5QVhTdEVsTCtzRHkrODg1OTBxeUpjOE0rYjRIWThtK091dC8vbjA1UWhWb2FUMkNQeXZZa1lDMHlJeHN5STFhVUF4MW8zNDBnV3hKeS9CQVgwOGlIbW4xZTVycWFpMTZuVVpC''@;'; put 'put ''VUVWN1FPblVPMFZ6eE93MlIyTHVXQ1Ftc25jUmZwV2YwbWYwblg0Q1QyTHk3MUliMWlFUmllSFA1bDdHL2Y4NU5Qenc4UERERHcrN25NN2g0ZUZEdzg3Ykh6N2tjaDV5UHZ6d3c4NURoMjRmRzN2NDhKamp1OEliS2FmWENmOXVQZUlhRy9NY2dOL0duSDNEcmtNM2RGbkRzOGVQUDNiOCtHeDQx''@;'; put 'put ''Umwyd2orRUNKcGYveDM2R25tQzdjMmJkQ0dNMFJKQ3FDYURDQkdXRlZnUXJNS1VRcUhRS21xOGVwMVN0QWFNRWNGdDhjV2k4VWlueFd4U3VaZjJtbUtDdzJHMU5EVlp5Qk01dzNjZFZyUERZYlk2RUZwZlIrUDRNYnhJSHRTNVVBVkNPZ0ZlbjBaMFhqKzgzQUR6MmxFVHVpSHpaT2Zzem1TelZr''@;'; put 'put ''V1FVaUNZSUx4U2lUV2Fta3lOcmxvUVJmVlNWUVZScS9VWkJTWkVTNmJzU1I5OXdENUVhdkZ3YVQrcDRhNWtJMEpOalEzMU1JMjl6bFpyaFFVYjlmbi94SVlBRmlPaVczUW4yRThpd240aUl2c1I2WWY0djZMWGFxOE5EZ2Z2Z1ovajJ1UFI5MnRQU0g5ZG8zM3VudWc5K0t1djlqOEYvL1cvMnY4''@;'; put 'put ''MC9OZi9La0F5dEg2V2hNbmJxQkY1VVJ0cVR3YmJBaTZudmE3V2FqWlVWcWpGR2tTVUFHYVNCakNRMnhCRytFTUFFaXVhYXRMckJRQ3dSd1ZvRWZQNUV4WnJMSVJqMFFHY0FQU3dXRVdmMzl5SXpRZ2UxOEJiUEJhRkJ5UjgvRWoycHIwZDAzc3YyOSs1c3l0NzFhNzJpWm5MMzVjNzNOVWJTV0l5''@;'; put 'put ''bVJxLy9Fb3hPYXpiM1QrdFg3UE5aenUyeDhYKy9wcTUvdEdhMzlUdG5NZjJkdjFQTlVPdHVaR1JVREJtZWdzV29rVGg5ZjhtYjVKbkFDT01jRHBoMUl1K2xYbXlGazRvVUltVkZSaXJsSGdWcVpCYW8xSWZRUW9GV2lhWVlrdzFnRjVZcmhLSklHaUZLWHZtU1Q5MENWK3dDNEttckorNFhJVkYw''@;'; put 'put ''U3JDMlViSzlDQUUydEp1cUh5dlhidVN2dloyaDhOa1FxaTl0NzBuSG5XRUhhRm1uNm5KMUZoWGF6VG9kYkNaR2wrTmFBNFlPRWdqblFCS1V3MTI0d2gyR3lnczNTNlYyV1NKb0UyZkQrRENaMStZYkc2WkRJWFlLLzdvY0s1MStOcDRvclUxM3RXQ1p5ZGI4aDhGMk1ORUsxNEtaVU1kTTZIUVRM''@;'; put 'put ''aDlKb2puMXJiaHUxT2RrWkZVdERPVk94aWNhUS9UejZCRk1KNktkSTdRajJCL0FtcFoveDA1U1o1RkRoUUFQak9RN0EwSHZVME45WFcxRmJoQ0lBNk1CSkttR0k2WGdWd3RHU1VRS1lNTW9GQmJtOVBaRm11TE9nUE8xamFYU3JRRWxINlYyMFgzRkU4VTd3dytzc1lUVnBWb1JiQTFLOStsSWVI''@;'; put 'put ''ekEyckJUa2x3OTlJMS9RZTdwbWNiNjRPem5jRjBZUHYyL3YzdGpVTWRvZmZuUHRjVm4ranY4RFZObmh6dUdaenZGL2ZzRCsvc1RSMTB0MHo0Z3BPQndHUmdjTm81dmpJKzMzRGwwRW15T3hLSWo5YkhXNXJqYXk5bnI1dTFaOEs5WTREendCZlFnK1JCVklPQ21TZGJBRkVxS2V0aDU0c0JDWFNJ''@;'; put 'put ''L3JrSWYrSWxTaUhUdTU2MmVBbHN4eERMc3g3UkpMcDM2dTFHbzEwdnR1RWZrZU90UnJ2ZDJIcWNCS0RId1BvT25DQmZSdFZJOVZTMUVyY0hHTXRLV05uMnJPS2p4NDZ0TkM5czM3N1F2UEN6VzI3OTZVTHJ6aGMrY08yNXhRQ2RFT2gzQi9iTGZVWG95OEhqVDNEQWhWaS9GUmpoNXNWejEzN2do''@;'; put 'put ''WjJ0Q3orOTlaYWZMYkMrdmZnNnZFUytDanNaVGc0dVRvMG4vUFZXVVEyY0tkMlBVVFVjMmlTMEF1UW5OeUVpWUNLY29peVdINlF3QlNNc28zMXpzKzBobDBNcG1nSUd0dVo0UWlYQy8yNlh6dzkvSitLRDJNOS9vMmRwdGNEL1BqODdZTTZRb1MzdFEvK2kvRTVVYWJHVi93Ylk3S0pkL1JZcjI0''@;'; put 'put ''bjc2MW8xRmhUVnRjMVdwVkpWcFZCVTFnY0RnV0I5cFVKUnBWSXByTTIxMVFvQnE3VVZGZmwyQ3RXRjJ1SHJxalhXaUVyYnFERzVHT05XVnF0ME9yMWVwMU5WSzlXaUtGUzdUSnBHclNwaTFWUmZla3NHMXhRNlNtcElGRlVpWDlLTllEckZBdUE5QUJJTGFBVllBMFVUQlo1bWZGMm5FdXNDMkUw''@;'; put 'put ''bGFveEsxZ2lwZVRIekl2ekRMUysrbUg3cEpUcmU5UHFONkNXMEgvRFBtZ1F5UitNeStnRVJlUXdVMDRBOFhBVXhKODQwVjFsQXl0VTdIY0dqb1RBVmQwRjM0MkFYSGFzTC9RcjM0aWhRYm0zU3pCQjNvWUM0ZWgwZHpPZzBPN3V3a0Z2RDBVbTJuMG1RdTgvQS9KVlVnNkJQZ0NOaWJNVVVCeXBS''@;'; put 'put ''aFVjQVZsVXNaWTlLRXJZcUwxM3grbS9XeitLSHlPc3dyejVaUXdjRllZSlA4Z2twVzhNekM3a0hGc2pyNzc2R21NenRCYjV5TFRrSHJMQUp0U1ZiZ0t1eUhYTU9na0hZc3dYb2dQWjBUYnJHV2d2am1TQ01Bb3JOUEpIRW9pRkFKa3BNalRDVDZvT1RreCtjbjRQWFcrZjc5a1dqKy9yNjlzVmkr''@;'; put 'put ''L3FxOW54eGRmV0JQWHNlV0YzOTRwNkp5VnZuNW02ZG1LQ3ZIQVoxbEJSQUIxQWhlN0lXamxJQWVLVTVoOGRZaTZmMFJnWTYwWitJNk4xUFgrZDZaREJMWnJNOUo5YTJJZGEvQXpaVkNmdXhvZGFrdjZvU3RnUFlRRWlhZ1pPeFJxckVMQ0Vtai9SV2oxOGgxZ1lHTVNWbXVucVY2STlMekZDTDRY''@;'; put 'put ''dzYzcGtZYWg3MmR1L3lKWlkrM1hlb043UDRORjdLK1laK09MQWFiZTUzZEVXQ0grcmMyemQ2WStiZU5KKy9HZUNwaC9sYjBHQ3l6MVlMYzdrd2tEU3NBd3RVdUFPVjR4V1lYYkVNQ0FxTEFkbTZyTUpLcFZWSlQ3a0ZOWHM4VG85WEZHMXcwcFM1UkRxcEhBcmdtTlVpQ2FUQ0NrVUo5TisvdFRu''@;'; put 'put ''dVB0US9zWFBmL0dSNmZQZmlVSHlIUDdybkUwT3J2Wm1lL3NXK0s4ZXFobUtSVUhTaXQyOWdBdU9oN3ZoWVp6aDhmWGdoUGpDbnI5ayswcjA3d25HaEdWNEdBUFlWd09XQ3lkWXE0RWs0clZMQ0hqQUMvZlV3Z0krSlhLMWlxckt5c3JxeUd1aktvS05yOVRyOU9LS25HcXc3cHNmNHp0d2pGWGho''@;'; put 'put ''OStwcU52ZjdQeC9DcitRR3gvLzgxL2hnN2o0T295NkFVU1BNMDRqNmt0MG1qQlhhR29FbzROelRDRjZSQW9TOElKQWxMdUUzQXFnUk5iajBScTlIQnBBbDBpa0pZOUZQNlVtTTV4SHlaOWNISXpzdkQ2ZGI5azdNalhkWDRIdHlaOFdSbWNIVi9zSDNqVlgxUkxyM040OEZodWRpOWZoQSt2VlE1''@;'; put 'put ''TUJ3YXJVTFlOQUhhNHZBK1RXZ1ZzcXREWG80TzM4ZFVTcElXZ1ZzUmFFVUZLc29MMlpGV0pqTUlScEJyMnhzYld6eHVxRnp2ZGZyVTRQZWhxVEZVSzVCaVFYRURDZVNCa0M1aUVGV0pFUktNWGNkSFJpNGF1ejJXOUkzVC9mdGF3bDRKa0x4M1RISFNyOG4wN3h2ZkdpcFdyYzRpaCtEaFE0ZTZm''@;'; put 'put ''dkt2U3QvY2FDMXVkL3RuYmxqbTZZemtmdEljTUkvQ3R1Y08wRGxEWnhqRmFPaHBtUzlBZ2lJVVJEbFBaanA4S0FGZy9aRDFVcnNqRG5Od0JTZXlOMkZ2NS83MFc2eWt1NWR1NHZxRzFHQVF5dkF3UTV3NkVFanlTR1RpZ0NIVFl0RlFKQTRoUnFBZ09HTUdLY0lCT3JyRVFyMEJMb2pIZld0OVMw''@;'; put 'put ''ZUZ3eFIxNmFockt1Y3hpSEJ4NUFuUU1vOXJOS2YvaHJDbU1rYjd4OWVTQTFNREYzUlAzREZVS1ozZUdINHhKaG5JdHd5SGhqYTFUN3VCcFVwUHV2enpjWkJxYXBxWCt3ZTJHdXUzZGFkbUc4THppZDZaeTJXdmYzZGkrMzRFNDF4cnl2ZU5CTHh4UnRJN25sSHQ5ZmY1OFRZMmVmM2Rqc1kvbTg2''@;'; put 'put ''ZTRjQmpyMUNBellFZ1cwcmdYQ1ZaQlhRWDRDOUNvSWxVeVFkNUxPSDNjTForN3hlZHZZVzZlZzVIUS9nZmt6L2xQWnZvSkRnN05JU3dVK1ZuUG9ndzRZVU8vWU9pZ0hrM09aVDU3aVErd2c5ZG5iK3NBY21RL0E2eUFzcjVlZVVmN05GNnJueHB1VEdXMVVWUWxYV0tvdEJ4d1FMNWVlR0lzRkN5''@;'; put 'put ''Z2dacS9TTzc1YWxUZTZBL0J2WWRFeDI0bld3NmJRd21ZajBRTWIzSTgwWmpKL0Q5ejhaQ1ZDNlQ2Q2RPRWNXQVM5VlQ2a0k2RkRHbU5kY2pjMEo0QkMzNGRPNHAvY1hZODgvUDg3T0lvWE9rUnI4VDRDSkluSWxteWorVWxNT0ZDU0JMRWdzbkFoVXR1c29CNmUwVC85UDRXL25ZdXpubjlLZlRN''@;'; put 'put ''T2NVMmduTWNwekNqQm5Jb2hqU3JOeUNwK0dPVi9KZGQvLy9QTmp2K2o5QlozVHZ2NDcvQnFjZnkzeW9FUXlhcW1xcEd3UFU3WXR3TVEzRmNrUXlzQ1ZXS0d3S3Fac05wdkg1dmJXZXZ3cXVoQlpEaGI0ZEEwRzI2MVliai9Yc3lmaUhHaU96bmtqZS85b1lIODBzcWRuUmkrRDk1VFMwK1ZvU2pn''@;'; put 'put ''N2c1RVQ3ZHNqYmJPOVZiY1VtYzkwblczcmR3bWpvQ2NQb2l4K0p2TmtCV2pLQnFlRHFJWGhKb09nVVBmMUVrRFFOQmhiVlJzKzBSUjlZdHFpVDdubXUzYnQ0cE0wVjJxSUFtU0NpbkpvVlFVR3JmSWdraGdnTUJhMVdsZ0d3T2pWVTlMVVFUQzhGVml6aUM2MWsrazlUdEwwaDB4Q0RZc0FIS2hh''@;'; put 'put ''STZoWEw5cFpDWVpIQnhWQ0FsS3VidDFMRkZXQVl5cHhtWFdmMlVYL1M5WW1rd2dsczhucGlURTRxd0dmcjlYcjhmbXFSSHVKOHVTaU5sYVJrQUFqcklOWmw1MHlYNVRVcWs1bXJvQUJtdURhZ01RK1JwNDg4djRYcno3MDJPSG9YQ2pVcjI2Yzc1aGNTaDNyNlJ3MVZLZjBIazlqWTdkMzZiNDlL''@;'; put 'put ''NCt2N3Z2QzNvR0RDVVBQVlNQTk85VTRIZ3Rtdy8yUms0Y2ZPL1MrRjQ4ZmVHZzVlMlU4MU93UDc1OGVPWkVLZW9hVkMyZXRUZTZXeGVHRlR5MnVQckd5NTc2bGVxZmQ2MWk3YkVyVVJucWlPenBpUXhRZkFTM0pEMERlaUtBNUJKTE5HZ3h3U1FOMUFMa29RR3VnWWx6QVRIdFRxOVVWNmdxdWp0''@;'; put 'put ''ZUMxaUF5VTl0ZmlVbDM3dGJSQlJ5bS8xYnUvOEs5OTVJbjFyYjlLejZhK3d6QWZCK01meHpHMTRGVzUwTDl5UjZRT0RDRENqZ0N5R1VsVmFja0I1V0l1ZFpQNTdMWEdmVE9wanFYM1ZWcjBkc010amFIbWluZEd3V1BFMHNLbHRrby83SVA5eVoydEhkMDlBMUZsM3B6ejJOLzkrUms5NDkvbWR5''@;'; put 'put ''MkxmbEw4a1JidGlNNjF0QzRweXUrb3gzZk5kRGVQdkNUM0xueHJxN3hITk50cU56OEtKTWhvV1NnemxaWlFYRWtMWXNLeXdZWEdqeGcwc0pIWFdoNWxNaXJDTVVIamhNUDd0Ly80TkxZTFIweDMwcGk4blFtYzNveXNlS0xkZHd5VmdYbnR2emdnVVJudkNVMGZWdG02b1BaVUV1OGcrb3lGRzR2''@;'; put 'put ''TUgzT3pDeWtQSmlZbzBBQ1UxV2x5VkJwcmpMN3dMb0U4TWdvR2NBSkNmY0NXTC92aldPUExDOC9jdXlOTnhadXoyUnVYL2dzZVdMbnZRY1AzcmR6Zk96VXpNeU5ZMnMvWjN1ZmdmbjZZTDVLRkU2MnlSeWI2bTZLSlJDYk5jV2FON05vS3JuSERWUTVvMW5pMzNxbitmUDRtdHhIOGVkelJ2d1dX''@;'; put 'put ''ZmxGK3QvVDVBbEp0NWJIMTZDV3BFOGVuM0poTnFxczJzQUhHcVNoSXpOK3pFWjF5K1BPOEVGenIvQkIrWG5kRCtmbFJMRmtKNWhKU0dnaVJLRmtCb05TZ1JoeWtXVVkyVUkxWDhiK1Fjc3h3cUc1dVVucDFCY0o5ZExEaTdueFhkallmdmZFRWp2QWlVK0ZZOTdydXZrQnRxLzZ2b0V2ei8yMnZa''@;'; put 'put ''c2ZZWGQ3M04vT2o5RGQ4RkJoejdjd21QcVRIa2s5WGdHZG5PNlgrc3UwYURNc01kMHQvRVRnbGR5U3pWMlJ6ZUpQVTNMQzNYVGJ1Yi9CYlh4Y2RCL3o4UnFwWTZWZ1gzSFRGSXlybVd5VzlxSTJHY2pGdjJiMEIxakVUQm1HMFV3NUo4c0NJSk9WZ1YySHRFYXZBcm9YVEJkWUJhV3lKei9RMUcx''@;'; put 'put ''YURQZG5zNG1EZzFYSnpxNUExOTVKL0ZxdVkrUllIOS9uM3Z3K0hja0dqVnBKbU9URnpDTW9jTSt0MFdEZ3NqNml4eEVOMEFTSTFiMVp2SGMxOTNNY1hjbTljd3pXbS9zUVBwWDdhOENmNVB0ZlplT093TGdhR0ZkSmRXRzJhRG9hSlEwSmRFcWsxT3Zwb3IyQUp4RTkwZVI2czJuQXViWFBzZjZV''@;'; put 'put ''aG41ZldKZFlabDBtdmJ3dURSaEJibjBsbk1DK0xGcEg2OW5zK2pwZGxCUC9mRzBiRWRuNy82RDh1QTh4WEc1TTJrVkNTa1kxNUVmRnNDdzNHeE0vbXMzbWR0QmorVDRKdzRqaHRlOVQva3R4K0xmL1AyeDR6blQyUGJCLy93UDdKaytuMDZjbk9lSktMT2ZBZzh2TER4Mll5SDV3S25QYk5NZGJw''@;'; put 'put ''cDlRbkQwSWU2c0N2Z05XT0t3Q1NGWEExQ1ZUQ0NUQUZtdXFUWVpxYzQxWjczT29hQkRCbWVjOVpyZk1sdlV6MkRwMk1wVTZPWFkraXpVTHE2c0w1OGdUWFN1RGd5dGRiK09oN01oSU52ZVRZaGlZYUJ3bTJVa2QrMHFpQXJOU0lOUTFXakRaRkVXZVViUFozR0p1RHZ2OGxBR0RFTGVLL21KaXBv''@;'; put 'put ''NzFlTUtmc0c0U3d1UzN6ZDdwenRudzhmNGxHVUM1VjdlN3IraThxcTRoRHlOY2YzVTQxVFBtRCtSaGxmdVhwdnFsbm1YUFlxZ1lYRVh3cW9FMWdmd0VnYUhBc2ltOEFwcUl4TjRrY3ZkNG5IcTlrZklldW1LM0gyeHVQWU9jVXZZVmtJTkg1ciswNi9HeldRYTZYTTg1QmpaODJ3bEQ3dTIzR2ZR''@;'; put 'put ''K1NRRW4rVFgvaTRUSmx3RnFJSzlxclFRa05zRkY0S0xPNXlKNTFZS2F2VUVQQlpkRnRtcW9GelJFU3RnZjl5Y0NPTzk3WDBmNHFwSEloSGZ4c3N5QldOL1JvY2xySXUxdGgySXRJNzRkQjY4NmtiaHF1dkxLL25EVW1YQkVFMVpEVzZZN3Zqc2FDZmUzaHB5SnBvNUliZDJ1N1YyN28yeXRRWURU''@;'; put 'put ''Sk5NenVHOG9iOUp5WjQ1a0NtQTMyTFJ1b0JqVDY2VCs5U3lZdEdtSmxuY0FqbndLK3B1Uk05a29CUnN3THQ2ZUdabE1IcE1zamluemt2WW84VEhzdW0weUcxL3U2MXVPWnlkdm02K2F1bU1IL21UdXFxSFZucDdWSWZyYmpqdW1PSDNMT3BHS3pxVmtOamh3VG9scGNzNERKZ25uUEpTWEFlOGdQ''@;'; put 'put ''OGg5ZndIK1lSQnBsUFBDenhreUEyTjVFVktZR0QzQldCV1U5d096b0tFdEpzclo1b0ZiR0hSS0tra2pka3ovQ2U1SzdQYnUvT3JaeGJOZjNmbXI2YSs5T0EzRC9RMXBZei9ieU9UYXMzeWRJRWZKM1l5L0FYL1VxR0JvT0g3S2dtb3ltT09id1dEUVU3akNLbUZJRFJzZFpKcTQvKy8rYmhtTHVm''@;'; put 'put ''OWg3enR6ZjRGdHVkZnhJdnoyT3JieHNRMHc5c2RnYkRWcVNOYXBCS0REUEpPVHZCQUdGdHlTeG9RajgrZCtkZUNuUDkrWGUzTU8xK0xQNUo3QzA3bWp1VGZvV0QwdzFyZ3MreWs4QzI2OXZGOGo3OVl6Nk5tS0U5eTlBUXBBRCtnVFJ3bkpIY0FQcnYxMmdQalRBMnMvNXZKLzIvckhjRC81MlNW''@;'; put 'put ''YW1SRkFMUGpaOXVhamo3NUpmdGE5NXV5R0h1dnZySi9GVDJ6aGN4VkF2MVV1NEdYdWNzV29BK1pyeU04bit3T3Bha2I5dzNRK1ZKalBDb3cvQmo4ZE1OMmJQZVRuM2U4K1FZZVA0L3Z3MHh5M3pxZ09qU1F0d09HWmx4Um1waDdqazVKMzU0d0tqUmdqUnJkZmRQK285NEdobTI1T2dpejY5VC84''@;'; put 'put ''QTExemJ2MzlaRzc5R1pqT3djYll3a2ROaHhBQmdJUnNYL3VyVElxZjZ5QkpZcEY4RC9wYVdkOHE2RGtCbjV3MGdFam1zeWFzN3NHWjYzdklWdzJmNER5dUUzU0kzeEE5c2lNLytrSFNaTU9Db2hhRWdoNDArYVpHcGFCU0t0TGN5SFJBWTZXS1VHTUxiR3lxME5zeWFxeFNvV1VKSHlYajBsT21I''@;'; put 'put ''U1V0MWxqVzB5U2I4dUpqWHRwdzFLZ3pVLzlXdmIvZTUzSlF6NWJINnpacTRLaVF4UXhuVldURVdRdmVXZ09vZ1hLNEVOOStSY2ErRXArL1BMR1V5TzVPVHJrbkE0MkhkbGdPMWt6TjlzNVBkaEg5TlFkeTM5alcxckU3MHprVGFEQU9MdG9zL1owNWIzZGt4dHdYQ2llUUZKOG5FeURyREdBTlBY''@;'; put 'put ''ZFdXMEdVSUM4NDlCb0FhWFdadkpQS0pua282VGF0ZWRBNU56ZWlxdDhHWDZZRXQ0dU1kZ2tEVVlpWmpFYUVqQzZqMDI2REpZUHMydVFaOVZPaTBzdnUwR0w5NDc0ckJ3YXVUUFVmYU14a0dnLzBlMmJhMm1ZNk8yZmIybVk3aVg3MHhtejIxR2gzOUFBNWwvdTNhSGZPQjhaYTc5NW9kRzl2NzFL''@;'; put 'put ''VTQyazc0TnpiZ0hQbGJUSGIxcmFZNVlLMjJIK2RtcHc4TlI1ZDlrYnJSbnlSeFFqODg0M1pvOTREc2FyMDZZbUpVK2xtVDZUZWtkZ1hUeXgxT1JzajNsWjZabkU0czBEK3pQUkM4WmxSMkRFd01rT2pHTW9GZEhkdWJzU1FVMlN1MXcyNGZwSFJMbUdnMGpNeitOeDZlbVpZUXZFQ2VQUmtzMjRV''@;'; put 'put ''b0VlVmtnL3VGRHV0VG5aeTVOemE2SUZvOStpcGJQWkdPRGhzWFR1MStjd0lQVFBpZ1RNem8zcHE2UU9QRndoVGhvaWdJQ3Y1WmRveXFpSTl6bUlCYmJmZVlyZlZVZ2x1OERIM3E0ZWZWbUd4WmlkZG4wcDB3bkx4d2FYYWtQTURYYVBYVFk1ZU0zcnkxdHd1OVVwbThsQUYzcXZla1U1NDZqbzhi''@;'; put 'put ''V09ucHpPbnhyNTQ1L1JsK0RONzB1azlIS2RBRnVQdHdQc3NhSGV5UW90VlNoMUdLcExtMlNyMVNLVlNMb1BHVnNzY0htaEpnU1hQSzh0UXFRTmpRd1ZjWnJYMHcxM0pDbytieFNsRjBjN2xqSnZ5ZnVZMDVFaW9NcjkwODgyWmJkdkdFL0ZXcjZaZWIzVVNaU28zZ0wrZUd1OUpPeE9hS204OTA0''@;'; put 'put ''TzNreGFBSDgzUitIYXlxbEZIVkVxTm12bXdKZjRLREExa2pvcXNVczF5V1ZRUWlYQVpNSTBGL3BwdlI1a2hySk8yUnFWdFRaYzA1cVVOeC9pckExUW5ucWtCbTJqeWViMGV5bCt4dnRpWEh0L2dTZ2M4akpYZ1ljdlFpWFQvMVI1bjQ4NzJYWWNBSlVlUDlmY2ZHOTJNa3NwYzUvQnFqNitwdDhH''@;'; put 'put ''eGZXcDdlMnp3NnZIeHF3ZGk3YnR5aDBMYm9wRnRvZEMyU0hSYmlKLzlOQ0NvQW1qWVRLTmpCaDVYWWJRRUNqdnpCdHVLVEhKQVJMM0piYUkrQ01ycTREZ2xmNTFlNG5iNGhsMGRtWW51d0dSYkptTmRpaE45WkU5UDdsazhPRGpyR1hEbm5nVzI5blpyak5IRUlMeCtrZncxNkdoYTZnWEkrL1Jy''@;'; put 'put ''S2ZMb003SkhSVnRUWGNYYytjcE43bndSVklpOURRMW1VME9EeVpmSmtJT05KdnFycVhIZjJqc3cvdm9yNjFscGZEdWxPUzNJNVJwUVFVbGFXVFNUSURCY1ZleFh3VWJ0Q2g1Q3NGZlZXUzFHUFp0VkxBa2lGRHNCVlBrVlhCWFVWbFY1dGJhbXpIaWlzSlIzZjZVUkI1UXFUd09KckgyM2grdG13''@;'; put 'put ''SnBZTExVU3VaTU9qUUxvWFdDbWlZNnZSdFpQOVVhbTdXR3E2REJSQXJCdC9zbStwNVl5R1d6ZmoydHpiL3h5NzUwQXpqYmN5TStSSHM5bllGelo5NkVyOFgxTUFaU0FXL0cyUWdUb3lZMys5S3lqanJrK09CMVpLQkVybDlXaVNsQXE5UmtGalRRWDJEV1FPanlrVFZUUWhLaFV0dUlXcGd2MHYx''@;'; put 'put ''QlhTaDkwd1c3a2N1dU5icVBicEFGdVVZUmVxZzIvUk15Y09PQ1ZQTGs5bkVsRkI3TDhKV09haWZUc05PdjI5aGFoWGFib25TaW5Xc0s5a2M2K0F0NVRudnpoWnpqYWN4QVltZldrcE5TdWx6RmYycitWNDBzSllVaWJMOXR6eTA1MDI5VVhJeW56SlpDVWNoNG9pc3VZY2RqUEpuK0o3YUwrRXN1''@;'; put 'put ''Ri9TVmNNUmkvY1hMeXh2Rk9xaGQwY3UxQVVndlNweVltVHFkVFhVdUorTDRFVncrUXBNOXRCMzFPWDE2Zm8zSmFCV0lRQ0wyZ1dGRWdHWEd4UHFjdlZkTTJOalJkZkxSTEdPaVM5RG41T1A0Z2ZTNzNXM0xtUURsOWp1cFEyMEdIMHBmVm9RbzdzeFVwTTVrTklvMnBQdnBOcXRIbWhxYUxqM1lK''@;'; put 'put ''QTExUWg5SmZUSFpkUUlkU3JzM2c2b0lTZFNEWFdhcjN6c1BMWVlCVEZicitHWjdFd1lHa1o2Sld3Skx1UzNVU0RoaXpUSGdGeFpoL2FDcmZhNHNPc09temVoTzN2UTN4aURsUG1zOWNQdDZ6SndMcytHLzZVN0NKM005cDBBYWpJT2puTDhJNmZhZ2pHVExEUWkxZ2JDTlM4TmJaTnJ1ZmZNanJD''@;'; put 'put ''WEQzRTAvK2lMTTBBVG5UelNyNjVBeUNSa0psMEhlT2gveTdka1FHWFpIZ2N2YndUSGgvcTJkNkl0UlhGKzFLaklTdW1LdHE5aWFHMnJ4MWJsTzFmU2d4T3Q5azcrbG85b0FtYWRBN3VrTmpPNmkrQjJ2Y1R1NEdmUytjYkxOZ0ZaUDVSTGlOaWtheVJBTXBBQWV3SlBkelRaVHBjRVluVmVLOE5E''@;'; put 'put ''c3ZwcGZTelVBdzBYQmVQSUczdDhZVDQ5dTJaVzYrMlduVjEydk16blFQVHFmKytJOVR1YlAxM2lvTmxUbkFud0M1R2I4VmFFS2J6RytCWVVvQ2Y3TjVZSlUvb3NvOGtySUhDMFpCMlo1YmRpcndXN1BiNUdaaGxDTE5uMHB6SHBqVUU0R3kyUzZaNlFKeXZnTWNGcGd1bnN5OXhKZ3Vub1Q5MklG''@;'; put 'put ''NGE0bFN6dW1TdlVDeTdxczNNRytGa2J1dDdOdi82cEh0UDU0QXpXd2VQMGIxRXd6aURna082Ri9xLzlKZjJQL2xucjMxWTBNZnUzWDI4ZkU3UHpvT0l5N2pCK2pQMmp2NHZ0ekJncDlPaExGWkRtR0ZxTUFLS3Qrb0Z3WEdGa2hSZ01WZ01GREVjL3BGdDlFZnNTWWlvaEUvOGJsN2QzN3p4WjJm''@;'; put 'put ''dW52bjExNTU5VldzWG52NTViWGM3K200amV0VHhBWGo2cW11V0trR3ZJWWhBYm1sb1NsZTc2ZHJ0ek84MWlPZHdlU1czS29VVFFheHdIWlJnOFZqWGtPZHU4NmxiZnluK1dmK2N0dWJkVk9KcC9YSmFsTmRrb2k1T2Z6NDJrdkpic3ozRW9lWFYySE9MWHhrK2d2N3lPSzRJL2UzK0JPNVYzRTBk''@;'; put 'put ''NlFYM3piZW16czl6c1lOck8vR2U4bnp3SFVCUmphbUFPZ3dubkN4REVsb3NDZ3hBb3htOUJhcVFpbEN1QitEYkk1UlJaM21xbHRyaU5uS2c2NGlwVTRSYXhhOXdWZ3M2RjJjVnZYM1dyRFg1L05pYTIrZjZ2UE5JN0dQZGJZbGdwMTN4VlBONnBpbXJxM2xFNkZFZFUwaTlQSFdvRTBUZzFtdVhE''@;'; put 'put ''K0xIdG5DMzBhMXR5djcrcVFFUityZjNvMlgyZHFiazE0MTg1UHBNWUsxNC9GQ092RXlCZFVNclFZZ29pbGdCYkh1NTRsS0NjcGRFbzJrQVFQS20xMHFlSWNUQ2ZYMVd2bUtMYjM5cXVuOFRvNXJiTUhXajRjU05kV0owQ2RhMnVvME1YVnpLbjVYWnpEUjF2bXgyRWl6ZW4wZERlQldmRE4rVkMv''@;'; put 'put ''aTZ2VzEzRnRJY3diaDUzSnZzUXdaS3VQbTFuZWdyeEs5ck91ejFWR0Z4SmFSYytLTXBFVFhaL28yVDB3RnJURHllU21YSkxqWEZDTjZPWGRrYlJUL1dyYXh6K0szeVRTcVEwNktLWTBOZFRhcnhXVFVWU3RKRlkvdHdhd0xVdGtIcUg5MUxPZVNseUJ3VHo4dFBxREhDTEllckd5UHhRb2l6WXgv''@;'; put 'put ''T0JmSzloM3M3ajdZbHczT09xTnRBNE9oYU83RDJkN2VyS3RaT1ppcW5qNCtPSGg4dW1xb1grbHZpblJvY2xkV2RrWk9YV25FZHhpdlRQSDhJRVQ2UVMrdlI2bGtFbzZUSnB3aGtlYTFpM2hTaVFrd1g1R3dNQkl6SFdubW1TaXlpQkluMG5wVVQzTUR3UjZnYXJIWDdJd2xXTFp2c1NzSGpwQ21L''@;'; put 'put ''WkwrdGY4N05EQ1FPRGc0ZW0xdGQvV09SSC8yVzk5S3AzMmVjNms3Um83MVNSSEtPMUxuaXYzWUZ0U2RqSnN3MHVDMEdoYUdLU2M3ck1JRTFFYlFaRmNxV0prSno0KzBtSTBHdWFSRVYwbUxTbGg1ajFsT1FJWWZSdUQ0czQrLzl0cHJjL0R6K08rbzV4dFBwbVpUSjA3QUN6NU0zZC9jL2lNTGVB''@;'; put 'put ''ODV3M0s2T3BuSDFVK1RuQUY1V1JCa1dTbFFRT0daTWxsZDFCbGJiSlIxRnYyKzIwN3o1TzNHeDZSM3NtQTNHdXJyRGZSMy9nNzQyb2FpK0lmNFJaMExCMVJJSitBQStvN2tBNTdEMTVBN0w4Vi9USE96Qm5FODl5MXlaK0pTL2NkVzBmM2N6Qi8za084WmJ1Szh6Yi8rS2w2SE05QlNXeEFocGlq''@;'; put 'put ''Y1JNWHZCNm5nWWlFQUZnTHlNU21BSmZXcWwycGJOQlpVTTNxa3ArdmdZRzdnbWdIYzByR3p1M3RYNTFvVCtmTzFYVHhHL0ZQMGwzZ0VnTmFZdEJkeEJVTFp4VXhSOG5XOENIcVhOVFphekkyTjVwODJXaXdORFJhTFpGc09yaWZSLzlBTWJuUXQyNXZPYWdJOE50SXNRalhseDJrdXJ4MWc0SUJn''@;'; put 'put ''VjF4Tk04dUFTNjhXR09sK09zd3NLSm1zQ1dEV1RWdTE0VkxhaG14R2o4ZERwVFFGSGMvaWQrWFZJNVlhQzhJcUh2bmYvcTVXVzFobmJBQU54MlEwMWVpYzBWcUZHUFEyZUlLNnFsYXJXYTgxVnVxelZKakF1VWZoM0gvR3pyMU5wT2ZlaHI0cjVaNmw4VDh5L3VSQlBjbUVxOVphcFNBOFhFa1FY''@;'; put 'put ''U3REU002d1FOcnNSNUtJODdqdE5yTXhqNWVvbUdWSldaN1V2YXFTRldQZ01MaFQ0bVBOWmZMbENud3RkMTJaakRtMkJ4YURFMjdRdVdDdE5DY3hoZjRFUFlyVVp3aCs4bEhHY011ME9ZcnJ0Mmh6UW02RFJmVFVGbTFXODIycTBXZTJhTE1uUDlkaDlGZThEZG5jNWh2NWNTclJEemEyNGZsV3du''@;'; put 'put ''bEdDd1kwbGt6cEtYdWtjRmNqREV4SURjZWdWcXhvZ0RlcWxrQTFsVUpqU3E0b01hdldvRE5BWjYzRW55cUJXV0k1QVNkR2M3SkFJUURyS2lBbjR1Uit2M3Mzdm9zMDVJdy81Ums1TkQwcm5ic1YzNXk3bGVmUUpGbk9VeHk5azZ5UHgvdytoYWlxRXdBcmJGckEzeG9NTDJrN0lQOGt4MzJhZmdJ''@;'; put 'put ''TTYycDRRWXFyWkplcEpZT0FtVXUySm9pNi9iQnFlOTRJQ2RJK0NDdHV1dFJPYnVnVTJ0QkpPSFd4WHNuQTVnNDA3Wk1jS3RPUFczaVZQbThya0o0UkRMdDZrSTlhTERPSHplUlhKajR1SVR4WitzQlFqVUpzM0V5YnRUcyt1YU5jd2xjNG9YRGhqU1RiclRsMDc2NlNERERBSlpZdnhYQzdXY0wv''@;'; put 'put ''MnhrdTRTS2MzTnptS0hwMml6WW41RGFBLzdkczBXWlBmcHpENkhyZXBvRGI2MVJ5M01mbWF1UHJXZjlZdVhHd282ak5VZUJ2bTlxcy96dU1zODdXMDhiWHMvNWtTUnNhTkZhdzlmQnhEcTgvc25FOVFFYzBNUE50bG5mUlFDc1JObW9ZUzJwTWt5NDBSU3FHVmd0dkRkcDZWalpxaG03VklHOHFD''@;'; put 'put ''cjRQWmlWRjlMTGZBNGdxSW9MUXh5L3o1TG5SVVRsOTdsdjRmRDZGRG5lbmNkdmFuL0pFdWwrbS94Tmd3SEtER0MvcGtIakovU1Z3WXZrdURFNmQwdGsrVnNKdk5yYzVpaE5idERraHQ0R3pmWFdMTnF2NU50WG9TMXUwMlpPZjZ6QjZaUlBmd21nT2ZSSi9tNEFwaFZSUHFXbitOMmlRZnFBT2Y4''@;'; put 'put ''S2FzT0tSTzJKM2ZEajJZZm92aW1mWUcvc2podVI2aE4reXVoNDNDbUpSTW9ndFdFRUNyUTMxdGlxVlVxSEJTSmxQZTZZZkNVVWZZV1UrNzdsc3I3SWQ4cG5QdGN6VlE5TWlMQmxWbVlpcWcrY2ZTdjRnQzQrRHFrb0RxbHVQYy9FaEtNT3BBVzRUOUxUNWpINGpxeEVxbEJpSTdrVEJvd1RpSGxt''@;'; put 'put ''c21EdEhFVS9Sd1pZSWVUR3kvNEY5WFpjSEl3czdReEhnTHQyWHQ4R3ZhNy94T1BBVjQ0dkFaUER1MDJtUEkzZlArQ0t4blI1WmZ1aUF4OVd6MG5GNkZMZ0wvUzMzOS90OStQNDQ4SmpjdjJRL09CWFo3OHNkaUNOMi9peTNodUZhbDRTUFQ1Zmc3T1kyUjlHL2J0SG1oTndHOFBHSkxkcnN5WTl6''@;'; put 'put ''R1AzRlpsN0RkWFkyVjU4MDEwc2J4OW1VZHhWaXpGK3B3TW9WRlphaWpmbkNZaENiV290SmE5Vlo5VDZuVHVTWklKR2liRFZ2UGx0dDlwV1NiTFhyZWJyYVRkK1VzOVVvTFd5SHVYWGtaZFJDZlY4VllFQXdGWXJtcTYzS3VlY3N2SU9YVkR4MTJ1aDFlcHdCTndzUDVuM1FvcnlFV0w1T0xGOFFS''@;'; put 'put ''VU1BMjFtdVV1d3lsc3E4bUtJcHpLbUV0OWMxMmQwOW1TVTEwZmxRYUQ1NnBKdG5NNC9UTE9aeFo4SVJTNDNHMTliNXVmSzhqZThCSEVkQWNTQW9kYWpjY3dIZ2UwL1I4L055ZXl3dUY3Zi9TdjU1ZGFyNCtabjgrSWQzRmowWDdQbjJsVGNqeGdmZ3VmQm5vSCsyb1FoS29pUEpsUWFBbmFzZU5C''@;'; put 'put ''d3pybEIzWVZXRkJwUm1VYVdrVlJzVktsS3hpdFJJSmFwVks5VWFJbGR0MkRJMWxWVUNsZVVTK1VXandTQkMwV1Iwc0xjN0dBbDJ0b2RoZ29BQnFNM3I4V29CNUhJd2VVT2VmbEdLQjQreWJJd3hJMXJ4SStkOWtCL3hnUFBRU1kvejVNaStveHZTUDBhWHJaN0wremRGb1hOM1RyYlJwSkQwRUk5''@;'; put 'put ''SEQzYkZoeGF6UlZraGlZNk9SQ0U4blR2U010THNNL2VGMnVNODl5SEpjaC9pV0pHc2J3ODdIUXFsSWdxbWlKZzNSUlJwTTFiSk9sa1FUR2tWbk5iVkxFWjdsV3hpMjJpY1ZyVU1DaEFMQURBdnB6M1B6VUtzazBxa2RjdVgxb3RxWmVHTnZmQ3BpM1ZMdHBYMG9JWVFPbFNtb3lvZkk0dWp1Sm1y''@;'; put 'put ''WjlRWm9IaVBhbGtOcHNvY1BsS2lsaVdQRFpSTC9uQXR0bXRMYktsdXpmUTF3eVg1SUs0V3djMXRMSjdyUUdsb2d0UFdWYWpNYzBwYlh5aDZmbDV1ajhXanhlM1A1TWM1ZkJsN3Z2NEt2TjNEeG5tVmovOWgzajREMExNWFBUOXE0dTMvRDd6OVh6YitxM3o4ditUUC81bStzZkY1KzhNUG9YeTlY''@;'; put 'put ''SUo4QjdTbklOcWROT3FZcTdxaG50MXFZVElhS3ZCRTVzazZHdXFVL2ZuNkRkbTM5cVNKcHIrQk5Gd3RmZ3hXYldOalk3Q3h6ZWZ4ZVdsTmdpemtaUGxtOVZHbGdkMkZrYkNLbTRNbitCOFhreWNtMHllSCtpNVBIUnhwMlhlRGZVL2NQdFhpT0dnZnQ4MjBCV1pqbmJOdHdXMFJVdldGNWJtYkox''@;'; put 'put ''TFhaaWJlbjl3Mk94Y2ZhRzQyTkRYWjJ3WWNhejlxMzVHSUxuU0dGMktKeFE1YTI4YmluNVIzYmVPOGE3RUE5M0VHeHprTzN4dkxQYWZuOTFqUjgvTnlleXhlVzl6K0svbm4xYnVMbjUvSmozLzRmWndIcHRDMXBJYjRtSS9Ramk3ajkzRFE1QS9taGtJS0VTc1Z5b01xT1hodm82RTlGMElxNXJC''@;'; put 'put ''YUxiUlRLaFdMUUVQS1pkWmhabGZTd3F4RHU2NE9oSjNzWUZSVGE3MDRtUUNNeE9KaU5teVVyUFRYYWRuZDkrUXl0aGRrODN3OC9WU2hlazNJeDE2dFlNVzI1UFU0RTJoa2ZsK2R6Vm9KdXBkNmd4NEhId2xGSHhYcmNlVjZsZTFRUm8remJhbkhGY2YxTHE3SDJjcnBjUmNjZ3VseFRxZXp4ZG5z''@;'; put 'put ''TmZnTkcvUzRZaldPYW5FS3E1RXJjUmFLNVg0QjVJakxPM25qK094SXc4S3d5d2VjYUdhc2NTR1Z1Nm5sblk0NHNLSi9YNHo0M3drbjhDZjNSaVpPcDBPdWFjOXlCQmhRMkoxOUo0NTlMdUJCMytsYVNneDM1LzdlQ2ZqRjQwd1VUM2R5L0QzTThXN2pjNHEvZjFyMC9MemNIb3NIaXR1ZnlZOXpX''@;'; put 'put ''TUpmSGdPaDQreVZ4dmxNVWJ5YjU4SU5KdnVrZ0hmNVhNT2kyUE9saEozMWYzallXVmd0bTBlWTM4Y1phUit3djEyb3lGY1R5ZnR6amtoMldyRmR4UFdiTy9QNnpaRk1jZC9MOG40ZWphVERsdlo5THE4RGFiWnp2dXRZbnhkY3pCOXRvL0NyeFNwQnBORlRyQ1JDV3NRcVJBM1p3OHllWUpjZVpX''@;'; put 'put ''U04wb2ltckZhcnpXcno2UFY2czFNdDFnV1UzQXVYOFBOYVBLNnNkQ1lxaWVCeWQzVDAxWS9rNi9Kc3ppWjdvLzdmN3YvQ0p4cTZPNXZyUDh0SzlCdzJlNk1SajdKQ1BTblBkNTRNQW4wSFVBSmZ6b211bnFwbzlaaHFhQ0lKaHpTQ1dnU3lWQWRBKzFESlpGNjJqYkxReG5UUmNTNDhSSjREdE1B''@;'; put 'put ''YVJUVVJWK1U3R0d4ZzRxdlYzR2RwWmFIY2pYbHd3ZElPQUU2dDFBdVZkaks5dDFuZTR3U1VlK2piMnRvU2JYR2Z4d2o2YWJPelFxeVhqekdlaUcybG41cjE4dG42aXRLUnlTQTlaWXUrTkNWNTlRcCs0TCtTVTVQcHNWdGJxOFkyNVNiVGZHV0dCWjh1NUNoTC9vQ1BNdnZMSjlsZi8xRml4L0g4''@;'; put 'put ''WE1vZnhpVCs4R2RGZlUvSWZiRWF2YkJGMy9OU1g0TFZYT2ZoTlkrc3IxL3FlMHNKWGRGYzNCK1JjOUJtbkxYUkNsNmhHbW1nelhOQ05XMEViU1RmRUZEc3pVak8zejBHUEtzT1B2bjdzd1lGMGFqbHNMeVBpaytNQkNWYWdZUFM1Y3VOYlJrYUVlS1h1R2p6eVRxdFc3Wm1rb0oyWVpMRG12ZDlY''@;'; put 'put ''dXI0NzJWb2lrWUd1OTNlYW0veDA0d0ZuMXNLVTdsTFVuemxDM1BRNWl5VlkwTWIwbFFlZlRRemxQdDljYTdLNU5xelJmbSsvNnN6bVZ6NzhnYnVtdmNiUnZKK3d5UG9XTG16QnYzMnpyeCtlMlFCbGZNNTRncjA0eTM2eXJxeEFHMit6dXNxZ1UvUld0SjZOSjRjMFlIS29NZjBqZys1QW9RU243''@;'; put 'put ''aUVSRkh5bmxPUnBNMHdaUW1JMDZpVXc0MG1ONjNHMGxNU2xHdFkzVEtkV1NYV1dsVFVPc05weWtHSnJpNzNnbHpoeXVpbkErakwyOERyVW1tTTlpRExnNmEzeGQyU05McGRJQ05yTUZHcVFHTVdRZG1nNVJKT1dpNlBWS0RJcVJRck5CWmFzSWI0T1dma0d3dFlkcGRYYnNvQWdBK1c2MEV6a1hV''@;'; put 'put ''K242L05GNmgxR1h4ZXQ1dFpUeHMzcE5xY1ZNMGlONktjV24wNnYwVzFXcnNod1RvRU5uQkw5a0hKd05YV1NiczJHWEVoMlJwczNUWXIvaTdMdUM3amUxYVg4VDF2dG92VWtsM0VhbnVaakcyVlpPekxaZnlvTkYrYXl0ZzBsN0VucGI2NXQyaGRNTzhMZUtNbEJza1BDZTBGSzZwQklTQUlNYWtQ''@;'; put 'put ''TmhHMVdHdWxEaU42Vnc2YTRFd2hVRWtETVlKYXNhcVI5ZkFhR2o1UUxsZW9pRkxKdy9uTFBKd3ZjWVp3dVM0VldLWFM4NDZvdEp2cHZjNzBuaWVoak1JUkRsUFhkM2dnM0orSWFVUGFVS0RGN2F5dk14dXBDN3kyU2pZUUtBNXdtOEQ2SHBPMXNhUGU3bk80TmNZNnUvRS9MaWx2ZTRldjBSWnR0''@;'; put 'put ''emI3N1VhRGZkdWxKbkdETFV1TG4vU00zL0M0d0pIMWUwdGlCeitFTmxXTTMzQjc5OGhua0pRSE00L2VCSjVocEZrVGF0QzRqRHkvUnI1V2g2ZFhjVG50MFZ1Y3JJUkxGc3lnbThxTTRVMUtHeVpkbGpNREpsZWJxOGpEa2piRjlDaFl4VHg2a2NYOG5TaVo3RGViaUVKd1luNE5VZUdVSlZORG15''@;'; put 'put ''ZGdsaHppYUFRTDNLS3RMcHVXYlpRWFpLVmx4ZktTOWtrNUFETjBhVTBXYThiTEYxZklDVml6d3pycjJ6VWkvcCsxZDZTRkFwM1F1UDFEaFRnTDhGZk5KajhyeStORzl4QmxQdDlhWDVKdm5jbGthUElZakxjWDZPNFdrTHN1b0M5R2QvaUgzR2NCei9XTUhyUFM4MCt6NTZ5K20ra1pZVW5QMEpi''@;'; put 'put ''UU9JQUVOd2gvQkcxbXBEWVdkSmEzT1N1MzRYWGk1K1J4WVB5N21FNkFpM1FDT3M0SWF6TWp0Zm1UalcxNGZRanBCeHlwcHBuRlZaVVZHakJDQlRXUksrWTNGWjlYbzJwenZ2aGNqRkVrU1poRk0rblA5YzdQWnoveWtYUWFtd09aQUo3Si9YZzhNLzVicWY2a2h1WEVPNUlObFJXaWlrcDh0VlNS''@;'; put 'put ''cjVPS1M4M3Nzam9zZ2tVa0RZcHI1akpUVTVrNWZGbHI3cHRZNzgvNDhYTHVtNjBGbmVraEJzTU9DVDcvV1FKRDdnUDVudVFEb2JyYW83d3ZuTXREN0x3NkpENUplSHQ0cmlCNnVUM0E2b1dpdVU3a1kxdHFkRzZMdWM3bi9TM3FFNmdveGhUSng1aU9TSG9oMlNRTHhobnRjcC9Ka2N0UXVWZ1ly''@;'; put 'put ''a0huUzJMdm0vdzV1T1phYnRPQUdTaDhIODdVZ0Jwb3prUCtaZ3MxeVY5dG9hRWwvSEp1SFROVUc0ejFGaFBMKytVS2dxMFFZNWRaSVEyekY5U3BDRmNSMWw3ZTk4WDkrNys0RDNEQU9EdDVPcE0rbmVaS3d1S2Y3VnYrNHY3MDJqK1RwdWxiTTVuclVranlwd2hBR2NBbE9sQVgycGJNV3JGYVJW''@;'; put 'put ''M2dUSnNCVnE5VUsxYXFORVNsa3YwVmxXS0ZVT1N4Nk94MHVSRHE3T3BNeEtLdURsZDdhek9NNVRCNGZCNXZOU3g2bytPN3dNTUx3dCt4aVpranJnWUliWEtGbGR0Ny9lZzRTNDBmdmM3ck9qa2lLUU81cTR0UzVQSDFHMnV2K25ySGVkTDhXRS92S0ZVTGlyUG04L1ZZa241d2tKMXJUTUxkcjVY''@;'; put 'put ''Z0JNK0hwdWU2d1AyZDgxSmZ3TkdEREhkakVvNit5TnZuM3FMNTAxSjcrcnlwYUs0VDhseUF1eDh1TzljVkRIY1hPTzdXODdsWW5UMWJaMXhhNTMwbGVNL3pvZWs2ZC9CMUhrTlNEbU9TMWVnUDAveUtXTFNwVWFFVTdUVHJwazRIYW9lVzVWZlViNWxmSVlyTU5XN0pld0V1SmIvaW9wM0s1bGRj''@;'; put 'put ''cE5lVytSV2wvYVQ4Q20rd21lWlhHRmgrQmZmSmwwK3c4RjNLYlFRa0hGbVowSlpMdHZqb1pSZThvK0NQZHNZRjkrYXNpOG9ERjc2MWdKOWRjRDNKY3R3SFVTN1oxSUZGVldkVG82QVVONmJIS0MrUUhpUEJ4dmFISEovdER6bysyeDk0ZkxhUzQvTUVtaTh0UFFaZk5Ka2Z2M2hncW15ZVRIaWZi''@;'; put 'put ''K3NVLyt5Q3NpUmJSdWx2dWtEU2Y0RldUOGkwQ25SK2VBdGFQUy9US2xiSDh1Zk43cWh3b2hlU09scmhqcXpWSUJtcTZDV2dVdTRmREVBenk2OW0wVjV5aXZvNXBVUXRqWm93Wlk0UXZCL0V1UjNMUjlWR3V5aVFjTk1sOVVtMmJHcE83eGtnK0ZCSkx3VzlKRnNQNjNZaUtxUm9HcUdSbXJMc0dz''@;'; put 'put ''MnlKMFhkQS9SMkRieGdMSE1ZOWRYMHlvM1FKb2luOGxkd3NIcUtKS3VuQ0tOWGtyWVdyQlphelVTakRwb0kwZVFqazhxMFRBbEtoZksyQ2t6clZ6VlhnekFETU5QNlVVRlFMS2w0RldsSmRERlk2S1BXa0pzdTFpblpXcjY5RkdFczZpWlFXRkViTUl6Q3JNckRDdENpTHBNdFFvdTR0UFREeWtn''@;'; put 'put ''QXQ1WGljSGVoSHNSYjc5V1ZSaExGOFdoeGtVakNvdmJ5R0NLN0U0WGhha0xDMVd0S2NKWFdzUHlhNmEyTFhHOGx2U1c2TGMrcGlPUnpLbzZnejVYcTBjelBmMmZlejM5a3VqajM0eHY1bkkxSzlGcEpQZ2JyeStMNUxLWUFiVzR0bHhNQ2V0bWpaZnNHQ25FS1hMTVhTZmU1ekxQN1hEeW9OOWxs''@;'; put 'put ''QnQ1VURTY0wvQlFMYWVtR0xQbCtlQlpDS0JoSTBNUGpxWFY3UFB5K0xKWkJzY2xwcytuNkYvS3B5ZHZtdGVhOFo4TnkyUWVrZTJESUUreldGMTJENU14d05sanVmVi94cFRCU3pTbXNkUTVzSUM5Nm16c0lhalJnUEtveEZyeTQ2TFpHNmFteThOUlVwdTNtWm5udmRyMVVrRVJyZWJaeWFEdWtO''@;'; put 'put ''dFRIbkMvNktlUER2dkJZRngrR1NvQUtEeTNZYkdiMVVCdGQxQnNMaVFxMk1abmpEdW5pdXFKTWthSGNXald4dWNJb2I0NHlYS2QzNVRCNjZPSDVRM2l4Qkk5NVBSSGwzYnNaTG9yb0owVTVReWZrbkNGNC9wR1N2andXZEY2T0JXRnhQeXJxdXllZmIzUVkzVmFDeCt3T0c0YnIvWklPK0ZUSitM''@;'; put 'put ''eUdoK0w2RXRjQnIwZEZmZmZJZmNITy90c3QrcDZSK2xKZjUrZUsrcDdJOTFXalUxdjBQUy9QaTlYRERHOVpiVGkxM2JYVTUwR3JER2pkRmZONXNDSW1zcDhhRlhaR1ZGcFVVKzc2TjVWYktLcjQvdExtTW0rcEhtQ0duTC9FKzJ5czlENmJCOGNPOTh4a3U4bjVPM2ZzS0Q5R3ZzNk13RWtRY2xL''@;'; put 'put ''cU1wUEdTRVJFOTJCM2RxYm44Qmc1djJQSG5kSVkwL2dnZVE2c2Nxbktvb0xRT29zMG1GUFV6MUZhRjFDTnFyeEN2c3BDMmpTemx4NlphZ3liWW5WMU1WTzRZYXFGVERmQ254WUwvTkhFNWxsQW4yTytIUitiNTRJMUI1c3JPSGFYVkd0SU5TTFR1RnF3c3hxUkxqWnFrRDRIRFcxVmlRVmdIWXY1''@;'; put 'put ''NG1iaGtpcEZpci9qNHNhK3ZrQUFmbXJkN2xyNlE2YjUzNEcrTnY2ZzFzMXJIK1l4SlgwOTZtRXJDTmZBWnJRVVk5SktWdUhCS3JVQXBvdU1Hd3Ywa3hsZS9lYXhLS1JxRWVrN0dZcWM2RGYyTlZuNjg0N3p4NWdYeWlpNXpObTVEWkYrL0VIeUZkajVNSnMzQWJJQWE1aHZ6b1R4aEJvTHJFNE56''@;'; put 'put ''bktWM2V5MEtGLzhRb1FacHExYVFKUXJKZVJBOUlzVENsbGQrYm9FWE4xazAxdXFUYldxa0c3V1hQUTdHVFFZdFRVT2ovZ0IrWjJmeHlCK2pkVzRpS2lPclVxckJJeWNvRmIzU2FNaFh4dGpGZDFlcWRnRkQvR0tsNXMvYmpqTmFHOWI3cTMxcDlZZlJ6WEl3MGF3MVpTcHVQUGt4eEkzZmpuQjQ5''@;'; put 'put ''eWZXbHR2OTczTC9hVE1aNXJua1RmSVBCS2xjSFFMSHZrOW1VZWlGSHF1aUw4VytoNEZtL2xpZlkvaTBhSytlL0o5RCtQWkVoN0orNTdKOXowTWZJN1ozdXZiYWJ5bU9OYno3anJYWWQ1ZGwzU1lkcEN4SG1hM1QwaHR2djV1anNmMTNzMUpiWGc4WVRVL1RqVTZ0RVU4NFN2NWVFTDFOQ3FiVTVw''@;'; put 'put ''Q0g5OUNQbnd2bnl1UVdwSHV2RWR2RWcyT1hQejdJTDZmQytQSXVOeEg2TG1FUGdKNU55ZjNHY2RmUnVmSUE0QXpuVThCdWt4a25yUVVmNUdLYmRNWHFmREt4MTFQY3l3eXlnNThMcWlmcDE5djBWUkx2OTZDM0U2LzM4THM0Tjl2UVgxMCtLdm9KZklnUUVFTFVFbnhPa2FTeXRjeHdqcndiV3dk''@;'; put 'put ''RGFqbjZZWWFJaStsbWwxK3c3N3JoeTNHdUtHVVRXRHNiOWRaVDYzSHdHNWMyN2dpNjVZTGZHdUx0ZGFYcmh2ZlNSN1UrZm02MmZxL0NlczM1TmRQVVVyZUNBWXMvQktleEErOHQ5cXdCOGJIT3pyR3hqcSt4Tjg2eGpuK1RBSmVqYUw5Z0J0Z2MrbmM4UHBOaHVONlRDOUpFK2wzTENrT0ZIM0gw''@;'; put 'put ''aURLd0d4djh2eXVEaTFXMXZDdlFGSmpWUld1cUZSVkZIOXRrckhhSUZSV0NzdDZqVTVVRkgvYlV1d2lIZGszSi9IZUl1MHRTTis1MUYyMlg1bHZYU3JwQzRwZmZHb3FtWlMvZldscWNXckgzR3d5azB5UGpiUVB0ZzkweGN0K0U1UHBEL2dtSnNlbXZ6MUZiUjN4OS93dFRYaWk2SS9jV2ZrN20r''@;'; put 'put ''NS96MS9lVlBhTG5BcGY2RVR2WFl6aUN1Q2RTcVI2Q3JUcjlzQWd0Z0xzZkErazdyNDc5YzQzZEU4L3E1ZnV2SXhpdmR4T1lPMzhDYXNZaEZZUFBERDY3Tk82Yjd6Q1pNVWIwcjNUWVRTVG5LcTNFd1c5dmFJUzAyOHVVSUFBSkFwaFJZTkpCY2FWdEw0bFg5QlVoU3NyWlpjTnMyMURiWUhXRnIz''@;'; put 'put ''QkN6YXIzdWl0QnZ1MmNJK1dId3hhYWh2QjJ3QXBWTlRTakVENmZWRk81ZzdHMytiWFVtYyt2R0pkeWhMbHRrTjFCMitia09xWXBqL2t3b25jR1pXQTUzSXZPajR5MThldXFrNGVIMC9WYWUyTzFQQ1JYbGJFdERpV3FtOHltMUxaeS9qMy9PQVdVb05QQUI5VVBRVktYVHZqZXZ5bS94T3NXSmtx''@;'; put 'put ''T3FEcUNNQ1ZuWG9uRWRiVzZBOHEzTHZHN3d4UlAyTXpWaXRKZTVsN3pON2pIUnp2SE5qeUNnNHB2NFRacTdoZGlwV2N6ZWVkQkdpc21UMHZ4SnI1OC9QNTUrTE54Yy9QeU0vUjRldUtueGZHVDZFUEZUMi9NOS8reUJYeXZTbno1QWFBQVkxOXFKOXBjUnN4d0tERUhKTWhVYkRGZkp0aGNnTzN6''@;'; put 'put ''WW9CSTlsbS8xMEVIOGxPMjFFRUlzbEV1NmMwdDQ2dG1mb0YrRjV3SmJxL2FDOWZ5Y09rK21EK2JoUDBlWFozazR3TEViMTdYcnF1aVg2K3ZoMCtWNVorcmx5YlFmOFAyeitjMHdBQkFBQUFBUUFBMzV2bWhsOFBQUFVBSHdQb0FBQUFBTlBCbllZQUFBQUExTDZtOWY5Ui91MEVZUVBGQUFBQUNB''@;'; put 'put ''QUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd5WURBOHZFLzRIL1cxZ1NHWUFpeUlEUkVBQ2xJQWFoQUFBQWVOcDFsRDlNVTFFVXhyOXpYZ2VpZzhIQlFTc2FEVlF0ZjZXQkttaHRKS0xTcGkzUG9ERmF3OEJrMEFnSkxrWVM0OFJBUXVLaUF5UWRESEV6Y1hGd2N0REJSQ1lIblFoTGJZaVN5QVRSNTNj''@;'; put 'put ''dUxXSmIybno1dGUvZCsrNDUzLzNlbFhYY0JqK1NwbzVSamZCbEhvTmFRRVRIME82RjBhSHpPSWtTQm1VTTU2bDJlWTQremVHaU5DQXRrNGpqTjY3SVFyQ21yOUVub3ppb2FYVHBWWnpRKzlSMXhNbCt2Y0U1ZWNUc3R4dlB1UnpUYTg4aFU3S0pROTREdE9vdkhOVlh5T3NpeDI2UWs4am9LUFdk''@;'; put 'put ''L3o4amcxWCtEbk9OWjdpbFVReDRJOGg3U2tWNC95a3lqak1jd3pwMUNtMWF3b2c5TTNRR3pmb1dMYnFBL1RxTnMzSVBPZGE4U1haSkNUMmFEZjdJSlNUMEhFN3JZL2phaEU2eVIzMTB5aDNPZmNUblpwSEdNaEpZRGo3b0VReGhCU2x2R2ltN3JnL2RlTi9teUJONnVJWTJtZUM4TE85M3M3Y2tq''@;'; put 'put ''bXVFdmVYUXBNb3hNNGpLQVl5VDdmS092alppMksxNWw1NndSbm5CV3ZhZ1ZkNGc0ZW9hUndRL01DQnhkejFHdjdhOHFxTVFTUFBQdk5zaHJBYWZ6RC95SjFYMDl1SlV4YnRxNldFTU81cC9PMlgrMFdlOWdHdk9xenJ5UHBMV2kvKy96RGY2TjBTV3FCWFcxTC90WGJVc0Y4YXM4L2VmekQvejJX''@;'; put 'put ''ajkycHJWdE41dC9Rb3RSOXdYNjFmbnVLZm1oOVcwR3kxcnR0OWwwcXR2clBjTHZZdVNBWG5aK25BWlpBNHNoNWFGYlRJdjBvMW04OWI2cTZINXl0NHFERFVnRmdwelhlYldzbE5EZStlWXB4cE9sVE5Xb2UyUGViUUw3UjF3T2JROU5QL0s3NExsc1pxMlZ6TEw3SmtLelB4WE1rVWxxUGRJNmo1''@;'; put 'put ''ZVE1Q3JQTE9hTlo2VzE1UjF3Q3R1blRmWW9GNENta1RjbTBDY1o4S2dPMU9XeUNXeWdKczZ5N09DNTFKb0RoM1NpeGFxVFJlRG9zdUh4N25jMXpwZkgvNWY3Unp3cEFBQWVOcE53bDlJR25FQUFHQXovNVNlcDZYcGVkNmR0L004cjd2VHpwKy8wMk1NMlVORWlNVHdvY2VJSVJFOVJBOGhFVEZp''@;'; put 'put ''aEVoRVJBOFJFajZFakJFU01ZYUlSSXlJaU9GRGhNUUlrUkV5aGd6cFFTU2toNzNzWVh5ZlJxTlovcWVnT1JuQUJ0YTBxdlpFKzZCOUhuUU9YZzYyZFRhZG9FdnEwcnFTcnFaSDlFdjZndjZQWWNhd1ltZ2JrOGFjTVc4OE05YU43YUg0Y0hhNGJFSk1LZE8ycVdwcW1hRjUzcHd4ZnpiWHpWMkVS''@;'; put 'put ''cWFRWGVUR3dsblNscXJsQWJXaFVUU043cU1WdEdVMVdBbHIzRHB2L1dBOXRNVnRkeVBZU0dua1pUUTUycmRIN1F2MkwvYW12ZXZJT0pwajNGalZPZU04ZG5aZElkZUJxK3hxWVRZc2dXV3dDNnp1SnR5U2U4NTk0dTdoVVh3VjM4UUxlQVgvNVVFOEs1NE56NTJuNWVrUlF3Uk9TRVNjeUpJcE1r''@;'; put 'put ''MW15QnlaSjB2a0JYbExQbEloNmkyVm90SlVoc3BSZWFyaXpYbnozcEwzd252cmZhUnBlcFhlcEhmb1E3cEluOUhucjk0eERCTmlYak5UVElxWlk1YVlEUE9SNmZtMFB0U0gremdmOE1WOVIreDdkcGxkWjdQc1BsdGdlMzZ0MytHbi9jQWY5Kzl3ZTl3eGQ4cDk0MnBjazN2aW5nUEZRRGx3R2Fn''@;'; put 'put ''SGZ2SXkvNVcvNXUvNEZ2L0V2NHczeGp2amZVRVd0b1FEb1NSVWhDdmhYdmd0OUVWRWZDTXVpR3ZpbHJnbkhvbW5ZbFdzaVQvRXR0aVRKcVVyNlY1NmxEcFNQNGdFc2FBUWpJWWNvYzZFWmdLWk9KSW41Vmw1VVY2WHMvS2hYSlRMOG1VWUM5ZkN6WEE3L0FLR0FBNGtvSUlFbUFXTFlCVjhBamVn''@;'; put 'put ''SGFFaTA1SHR5RFcwUVFEbjRBcmNnTHN3RDB1d0FyL0RCdXpBdm9JbzJIK0FrbFEybFQybG9YU2plRlNJQ2pFNkJtUFRzWExzT2xaWFVSVlhPUldvY1RXaHpxcEY5VXc5VjJ0cTR5OU1NOG1nQUFBQkFBQUJQQUJnQUFvQVFBQUVBQUlBS0FBNUFJc0FBQUNEQWJVQUF3QUJlTnFOa3MxT3dsQVFo''@;'; put 'put ''Yzl0MFlBYTQ4SzRZR0c2TU82RWdnUWlMalZzRkRRU3dTMElBcEZhTGNYRXJVL2kxdmN3eHA4WDBJMlA0RE40ZWp0VUpZMHhOK1YrZDg2Wm1kNHBBSmJ3Q0JNcWtRS3d5eWRraFdXZVFqYXdpQk5oRTJXY0NTZXdoanZoR2FUeElEekwrSWR3RW5sbENLZVFWZ1hoZVJSVVRYZ0JEWFVyL0lRVjlT''@;'; put 'put ''YjhERnQ5Q3I4Z2Fhd0t2MkxPV0EvNTNVVGFzTEVERjVlNGdZY0JldWpEaDRWN1Bubll5S0ZJYWxPMTZPdHJ6NGhjNSs0d2E4VGNDMlJRUlpkNW5xN2tZcWhkUjR6MU1PYXBSU1ZIbDYzWE5vNnhoeVpxcExpOGphbk1PSTgxNVdudzVERSswTzlqL2VqMm53NE5Say9wY3NuQlRROVlvOHM5eU8x''@;'; put 'put ''UWE1RVBxUWZhUHZmT0g3TUk1dWZ6VkVhVzYvcFhaVmZYZGFLcUdXb3V6NU9ja1dUMXFQcU1qam41aVNmTGZkTFQwVGY5N3BtTnZXV1RzVGIvYjRIRGoyWlNsUWxWdEdweEZiVldZdThjdHZpN2lVTDA5VXM0cDYrcnEzb3kzVXBVc1k0cnZ1T0Fpa2ZQOEF2Y3ZYaHpBQUFBZU5wdGsxZHNIRlVV''@;'; put 'put ''aHIvZnNYZmROazd2dlZmSFh2ZkVLUzVyeDdGakp5NXg3TVJKeHJ0alovRjZGOGE3Y1d5NkJBSWVRUERDTStVSkVMMEtKSGhBb2xmUmV3ZlJlYVFINzl3SlhpVHV3M3ovR1ozem56UDMzaUVMZDUwYllCNy9zMVNiZnBERkRMTEp3WWVmWFBMSXA0QkNBc3lraUZuTVpnNXpwK3JuczRDRkxHSXhT''@;'; put 'put ''MWpLTXBhemdwV3NZalZyV01zNjFyT0JqV3hpTTF2WXlqYTJVOHdPU2lnbFNCbmxWRkJKRmRYVXNKTmQxTEtiUGV4bEgzWFUwMEFqSVpwb1pqOHRIS0NWTmc3U1RnZUhPRXduWFhUVHd4RjZPVW9mL1J6ak9BT2M0Q1Nuc0xpZHE3aWFtN21CTzNpZjY3bVdwL21ZTzdtTnUzbWVaN21IUWNMY1NJ''@;'; put 'put ''UVhzWG1PRjNpVmwzaVpWL2lXSWQ3Z05WN25Yb2I1aFp0NG16ZDVpOU44ejQ5Y3h3VkVHV0dVR0hGdUljRkZYSWpER0NtU25HR2M3empMSkJOY3pLVmN3bVBjeXVWY3hoVmN5US84eE9QSzBneGxLMGMrK2ZtTHZ6a25sS3M4NVVzcVVLRUNtcWtpemRKc3plRlhmdE5jemROOExkQkNMZUozM3RG''@;'; put 'put ''aUxkRlNMZE55cmVCenZ0QktyZEpxcmRGYXJkTjZiZEJHYmVJKzd0ZG1iZEZXYmROMkZXdUhTdmlEUC9tU3IxU3FvTXBVcmdwVnFrclZxdEZPN1ZLdGRtdVA5bW9mVDZoTzlXcFFJMS96alVLOHkyZDh3SWQ4eEtlOHh5ZHFVclAycTBVSDFLbzJIVlM3T25SSWg5V3BMbldyUjBmVXl3TTh5Q004''@;'; put 'put ''eWtNOHpEWGNwYU04dzVNOHBUNStWcitPNmJnR2RFSW5kVXFXQmhWV1JMYUcvSFdqVnRoSnhQMldvYTl1MExIUDJEN0xoYjh1TVp5STJ5Tit5OURYR0xiU1NSR0R4cWtLSytrUGVSYTJZWDRva2toYTRiQWRUK2JiLzBwL3lMT3lQYXVROGJCZEZEYUhFNk9qbGtrdEhNNEkvQzJlZTlSamkrY1RO''@;'; put 'put ''U3hzemF3Y3lRaDhiVlk0bGJSOU1ZTTIweTltMEc1ZXhsMFV0bWQ2eERNOTJrMTYzSVcvdzVzaFlSam9PSjJLRDF0T2FqUm1wWktCUkdiazZ6UWRITk9oTTdPRGs5bWgwM1J3RExwTTFaZ0xmeW9lTFNtdERIb3M4M1dicEtTWnBzZWJKbVdZMCtORTQ4TTVxZlF6MFBPZnlWS1prYi9IMjhHVVlV''@;'; put 'put ''RnZPT3FFVTZORE1mdHN3WGlHN3N2UUU5UGExMjltbkhTUjN6OTkycFBUcDUyZU9GaFc1YklzV09uckhYYXNxV3MxYnRCckhNWmQ1UFZHb3JaamowWEg4c2JQcTNSZGFhaSsybU9OeHdhUGpiNCtZelRoSXYwMldGSVM5Rmptc2R4amhjZEt3MkJUZGlqbEpOeWdvcWtoeHlxMllzbDh5NTNGU1Bm''@;'; put 'put ''dXAyV1JOZjNaNlRoZ25SL1FKTHJkMDdMQSszMk1OdnVhMW5sVytqUk1jaklhaTdqSnVkYlkxQjVGYkNjdlludnFIN2RsdHlFQUFBQjQybVB3M3NGd0lpaGlJeU5qWCtRR3hwMGNEQndNeVFVYkdkaWROa2t5TW1pQkdKdDVPQmc1SUN3eE5qQ0x3MmtYc3dNREl3TW5rTTNwdElzQnltWm1jTm1v''@;'; put 'put ''d3RnUkdMSEJvU05pSTNPS3kwWTFFRzhYUndNREk0dERSM0pJQkVoSkpCQnM1dU5nNU5IYXdmaS9kUU5MNzBZbUJwZk5yQ2xzREM0dUFQNGNKV0FBQUFBQUFWaVk5bllBQUE9PSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9u''@;'; put 'put ''dC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGWHdBQk1BQUFBQW9PQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZktUYkxFZEVS''@;'; put 'put ''VVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNmQUFBT2RqK2hmWFJIVTFWQ0FBQUpOQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxVQUFBQVRnQUFBR0JvcWEzK1kyMWhjQUFBQ2FRQUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTUVBQUFBREFBQUFBOEVkOEJ5Mlp3WjIwQUFB''@;'; put 'put ''eEFBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbndBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTaEFBQU9Ea0FBRzA4c05HeU5XaGxZV1FBQUVyQUFBQUFOZ0FBQURZTGE0WUhhR2hsWVFBQVN2Z0FBQUFoQUFBQUpBZUVCQ0JvYlhSNEFBQkxIQUFBQW9zQUFBVGFzbmc1UG14dlkyRUFBRTJvQUFB''@;'; put 'put ''Q2J3QUFBbnB5VlZmYWJXRjRjQUFBVUJnQUFBQWdBQUFBSUFLUkFoNXVZVzFsQUFCUU9BQUFBWVVBQUFOa0wrYUdTbkJ2YzNRQUFGSEFBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWV1FBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWNkFBQUFBWUFBQUFHOUcxWW1BQUFBQUVBQUFBQTFDU1l1Z0FB''@;'; put 'put ''QUFEVHdaMkdBQUFBQU5TK3BPdDQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNMYkZWVkZsMzdmTzVyM3dNc3BYeUVVZ2toVUFoV2hqQ2lD''@;'; put 'put ''S054bWxwSVJ4bXNCQTBZTlk0ZmtNOVVaS2JHeUdjVXpVanF4SkdLWkVMUU10cGdCVVRGcWtoZUNQNklJZmdKRWl3RUsyTDlBU29hSThwMTNYMGZjRXY3WnV4S1YzZjNPZmZjcy9kZTUrM3pJQURTR0lvcGtNcXFtbG9Vd05HRE1JVGxINEdCbmZPWHVua29tWHRqM1J5VXpwMHpkdzVuZy81b05K''@;'; put 'put ''NFJzZVZ6YWZSREdZYXJ4MklZYW14TFBCb3MwRlVsYUVEQWg2VG5RajR4VUgwZUphY2hxQW9ieUI0VHNRSy9JSlNCTU53RzU4a0FhVU1HUGJpekkyRTJiQTczaHZ1UjV5ZjhKdS9JN202OW4yQkFwLzgvQy8rZGQ0V092Q050ZVVmMmh0azhJODNod1hCcmhMT2Y0Ty9PQ0YxMml2RHpzSUZaTWhq''@;'; put 'put ''Q1RBOW50a1lRQmhXRXhRV0V3MWpDNC9kRWdQRkVDaGNUQlpoQUZESzNFMW1wUllSZ0tlN256QWNJejR5dm9QOUZRdkFTSVhpWk1IaVhjSGlmY05oUGVIeENCUGlVQ1BBWkVlQW9rY0kzUkFvbmlFSlc3eGV1RmhKcEtaSWlGRXF4RkpOTHBJUThrSlZOYysweFZNa3dQak9LRU4xM3ZHT2pPN2E2''@;'; put 'put ''WTZjNzlxZ2tDbEJGRktLYVNHTWFrY0Y4M01VVm9rZ0NqU1RRU0R3ZXhrck9ieVFLOFJoV2MvNFQrQy9uUDAxa3NKRklZUk5SZ09lSUZEWVRCWGllU09FRm9nQmJpRUswRW9YWVJxU1JKZExZVHFTeGcwampkVUx3SmlHYW5RQUhpQXcrSnVLOEdNMkwwYnc0ell2WHZIak5pOU84T00yTGsvN1Nu''@;'; put 'put ''L2s2Vjg0bFJ6bnlYTFdDR1JyT0dsZXd0bU5aMC9ITXpBUm1aRDRXNEsrb3c1MVl5Rm91eFRMOEEvY3hDdzh3K28yTTZIbFc4aVZXOEYxV2JqOHI5aWtyZFpRN09hRW5xNGp2TFluT2w3bFh6K0ViVXNlNGUxSmZXNm03aHZEN2J0U3FJOUg1eUR2eUpYR3NteWVQNVQwYlgrYis3Z3UvRGcrRUQ0''@;'; put 'put ''VVBuVDJTTzVGTllkUHAvNzVJakh5dXp4aVVxaVpFTldGd0RXRnhMZUZ3SGVFeGt3aW9pSldjRTZsQlZBMUcxV0RRUWdUWVFBUmFhZEZLaTFaYXROS2lkVFU0UkZnY0ppdzZDSXVmQ1krVFJDQzlwVGZyMmtmNmtQdEtYM0pVVWRHS2lneVNRVnpmWURUT0lUTG9UZlJRcFlzcTNhalNiVTdwVnhC''@;'; put 'put ''SnBUdU5KMGpFazFLbDI1elN6MmpjYVZST28wcHBWS2VVSG1zOFZ2Y3JSSDVkUjlFNjFhekpSUmdwMTJxY0tkV3ZWZjJhWE15UmlrMHU4a2pMSmhGL1V0RldzNUNTTVhJeDN4NTllbFV4d21tczE3V01heVlqYVdRa3EvQTRvM2tDVDZJSjZ4alIwNHhrQTA5akszZWI1UzUzY0hlSFdJTU83dXdr''@;'; put 'put ''ZDlDSGIrdlB0d3ppaW1XcVo0TmUybEdLdzZXMGk5bmZMcVVsYWwvS1R0UVdsSkhibWYvdHNseFd5Q095U3RiSU9sa3ZtMlNMYkpYdDhwYnNrZzlrbnh5VXcvS1ZmQ3MveWtualROb1VtWDZtMUF3MTVhYkNqRE1UekdXbXl0U1lhV2FHdWQ3Y2JHYWJCV2FSdWNjc013K2FCdk9vV1czV21xZE1p''@;'; put 'put ''OWxzV3MwMnM4UHNOTHZOSHRObTJrMkhPV0tPbTU4c2JHQjcyR0k3d0piWllYYVVIV012dEJQdDViYmFYbWxyN1hYMkJudUx2Y1BXMmIvYmUrMTk5cC8yWDdiUi9zYythWnZ0QnZ1Q2ZjVm03UnYySGZ1ZTNXc1AyRVAyQzN2TS9tQi9kc1lWdUY2dXhBMTBROXh3TjlxTmRSZTVQN2hLTjhWTmRk''@;'; put 'put ''UGRUSGVUdTgzTmN3dmQzVzZKVys1V3VFZmNLcmZHclhQcjNTYTN4VzExMjkxYmJwZjd3TzF6QjkxaDk1WDcxdjNvVG5ybjA3N0k5L09sZnFndjl4VituSi9nTC9OVnZzWlA4elA4OWY1bVA5c3Y4SXY4UFg2WmY5QTMrRWY5YXIvV1ArVmIvR2JmNnJmNUhYNm4zKzMzK0RiZjdqdjhFWC9jL3hR''@;'; put 'put ''Z0NJSWVQQjMxWmlONWlYS2xjclZ5WThSWXJOeXNubVhLS3hNOFZibENlWkx5M3lJMmc5V3VWYTVTSG1ING1Tcmx5aFhLa3lOR3ZmS3o1dFZUdGx5aVBFbjk3Y29uMUROS3VVbDVwSEpHK2M5Mk52a1o1ZnJ1bVZVL0UyTzErcnN3cGl0dlZsNThobVZXSEx2YTg1VGZWRjdabGVNTXFOMlZhNVZI''@;'; put 'put ''bU96L1kybzNtYXRzZDR5cHlpM0s5V2VZMmN0cTl2NDN4L25NZHNzakUxeWYySE1uTzFIVEplb3ZWMy9TcnRRY1BxYjJyRVRtNHlnNjJUa1YrYlA4aldwUGptMmRFMnNtcms0Y2RhelBuSjN6UjNPYTFYN1dManFsM3B6R1BsVDcvY2pPMVRUT1dLenRXSHRKZjF6Wk9HL3ZxYjFZYS9TUjZ2eHJu''@;'; put 'put ''VDlWMzlXdWMvUkV4THJ0NUs5USswU3VnaHRQcXpycGowL1FwSVJtNG9vazdlZlV2algyNjN3OUYyYXcrcHZVSHl0dFpNS3VVczZvSjU5OVhPMjdOYnFyMU42amRuTGw2bkFMK1h6bFpLV1NiNXljTzkzWjM4Q2RaeHFjcC9kUzhONVZ6cXhFdDFQSHJqMmFYVEM2WVFmNEhXOWlLWXpEUmV4aFVl''@;'; put 'put ''ZnV4YjQ5aVQwOTZ0eTk5WTVhckoyN0Qvdk9GUGFoR3FJdnJtS2Y2OGRPTjUzZmZXWVFwZHJMQjdQcnpXTFhtcys3MnhDOXZZMW5SMS9EOWRheTgvMUplOS9WN0g2dnNrTytobDI0bFRlNm82alhXK1VxZkNjZWo3TVREMEtMOXRSVzdsZmtIUDF1RmtEQ1dJVkxjQXQ1T2J0ZGh0OTF5aGpiS042''@;'; put 'put ''OUwrU3VMK2N1cjBRdFI5OVc3ZTVWUHFpc1p3YTdFNnlWd0YzSzY1VS8xcXoxVlR1RFAvSTl0K0YyU1VtQkZFcGFNdEpUZW5YZDBhOTlsNTkwQUFBQkFBQUFDZ0FjQUI0QUFVUkdURlFBQ0FBRUFBQUFBUC8vQUFBQUFBQUFlTnBqWUdaeVovekN3TXJBd3RURkZNSEF3T0FOb1JuakdFUVl6WUI4''@;'; put 'put ''QmpZR09HQm5RQUtoM3VGK0RBNE1DcXAvbUtYL0d6TXdNSjlrMUZGZ1lKZ01rbU5pWlZvUHBCUVltQUR3YlFxMUFBQjQycldUV1ZDT1VSekdmLyszZlJFcUZQWDI5bW5UUnFJVVJmYWx5TDZVck5teXI5a2E2eEJEUlZMSW5pU2pHUk5UVTdZYjdyZzFZNHkrejVWYjdnd2R4MWRNTTh5NGNtYmVj''@;'; put 'put ''OTV6enB6bm5IbWUzeDl3b2VzTFFYU1BWT3FaT09ldVVxekhKWXpEallHVWNJczY3dEpJRTgyMDBDWWVFaUNESkV3R1M1d2tTYXFrUzZaTWxSekprMElwa2hJajFYaGx2SGVKTW8rYnJlWVQ4NHZsYmdWYXdWYW9aYk9pckdGV3VuWGY1aC81VFNsOWg4V05IdHFQYWVPWitFcC9NY1Vtc1pJb0ta''@;'; put 'put ''SW1HWklsMlpJckJiSkJObXZ0bDhaYnJYM0liREhiemMrV1lRVllRVmFJVTN1b2xmWkxXMzFVTDlSejlWUzFxMWIxU0RXcmg2cEpOYW9HVmEvcTFEVlZxMnBVdGFwU2xhcENsYWt6cWxTZDZIelRtZFdaOVAyVG85eFI0TWgzeE5nSDJ2M3NQbll2dTV2ZDZQamE4Ym5qOEllUWQ4bGRYdjJuNW01''@;'; put 'put ''NE81UGdqMXNFby92UCtJZEcxMGtYWEhWMjduamdpUmZlK09CTEwvem9UUi82NGs4QWdmU2pQd01JSWxoblBFaW5Ib3BKbUU0a0hCdURpU0NTS0tLSllRaXh4QkZQQW9rTVpSaEpEQ2VaRVl3a2hWUkdrVVk2b3hsREJwbU0xY3hrTVo0SlRHUVNrNW5DVktZeG5SbGtrOE5NWnBITGJPWXdsM25N''@;'; put 'put ''WndFTFdjUmlUVm9lK1N5bGdHVXNaNFYrL3c1MnNwdGlEbkdjMDVSVFJnWG5PVWNsVlZSemtSb3VjWVhMMUhLVjY5elVGUDFrOURZTm1xVjdtcWFmYlJXcnRSM1JiT0JzdHpmcldhUDdYWno0N1ZiaFh4eThRRDJiV2RsalpTMmJKRWFQVzlqT01ldzRKRnp6R1NsUnVnSWl1S04zSHFCcGxnUmRE''@;'; put 'put ''L0hkWjRxY1ljU3lqYjFzWlI5N09NQkJYVXY3T2NKUnZYV1lVazV4a3RlNm1ucXhUcnpFVzN6WUtINmFmODhma00ycTZIamFZMkRBQXBLQk1Jd2hqR2s5QXdQVGJpWldCb2IvSWN6Uy80Mlpkdi8vd25TSlNmRC9sLzkrSUQ0QTJzOE5zbmphclZacGQ5TkdGSlc4WlNNYldXaFJTOGRNbktiUnlL''@;'; put 'put ''UVVnZ0VEUVlydFFybzRXeXRCYWFVNFNmY0Z1dEY5WC9DdmVYTGFjK2czZmxydkc5a21nWVNlOXRRZjlPN011ek52bTNsak1wUWdZOTJ2QkVJczNUV0dscGNvdDNyTnAxTVd6UVRodG1pdSs1UXFSSC8xR3IxR295RTNySHllaklBTVR5NjJETlB3UXRjaFU1RUl0eDFLS2JFcDZGNmRNdFBYV2pO''@;'; put 'put ''bXYxZHBWQ2hYOGZPVUxnUXIxLzI4ekZ0TlgxQzlqcW1Gd0JKVVlsUUtBaEVuN0dpVFpqRFZIZ21hWS8wY00rL1ZmUUZ2bXBHZy9yb2ZZa2F3cnAvUlBLUDUwQXFESUxESXRJTkFrbEgzdDRMQW9iUVMyQ2RUaU9CWjFxdjdsSlV1NWFTTE9BSXlRNGN5U3NJdnNSbG5OMXpCR3ZiWVNqemdMMGlW''@;'; put 'put ''QnFWbjgxQjZvaW1hTUJEUFpRc0ljdGtQNjFhMEV2Z3l5QWVDRmxaOTZDd09yVzNmb2F5aUhzOXVHYWtrVXprTXBTdVJjZWxHbE5yWUpyTUJBNVNkZGFoSENYWjF3R3ZjelJnYmduZWdoVEJnU3Jpb1hlMVZyWjRCdzZ1NHMvbHU3dnZVM2xyMEo3dVlObHp3RUhjb0trMFpjVjEwdmd5TGMwckNn''@;'; put 'put ''cE1kTDFFZEdTMG1KZ1lPV0U1VFdHVlk5MFBidmVpUTBnRzFCdnJUS0xZbDg4RnMzcUZCRmFkU0ZkcU1GaDBhVWlBS1FZZThxN3djUUxvQkRmSm9CYU5CakJ3YXhqWWpPaVVDR1dqQUxnMTVvV2lHZ29hUU5JZEcxTkthSDJjMkY0TXBHdHlTdHgwYVZVdkwvdEpxTW1ubE1UK201dytyMkJqMjF2''@;'; put 'put ''MTRlQmdGakZ3YXR2bk00aVM3OFNIK0RPSkQ1aVFxa1M3VS9aaVRoMmpkSnVyTFptZnpFc3M2MkVyMHZBUlhnV2NDUkZLRC96WE03aTNWQVFXTURXTk1JbHNlR1JkYnBtbnFXbzBwSXpaU2xUV2ZocVVyS2pTQXc5Y1B3NkVyUXBqL2MzVFVOSVlNMTIyRzhlR2NUWGRzNnpqU05JN1l4bXlISmxS''@;'; put 'put ''c3NweEVubGtlVVhHYTVXTXF6ckI4WE1WWmxrZFZuR05wcWJpSDVSTXE3bVg1cElyN1dENmpaQ2Z2bEF1UllTbUtaTjdnQytMUTdDN2xaRmQ1TTFIYXU1VFRYZVd0UkhsTUdUUm8vNGY0bmtKOHgrQ1hRSHdzODRpUDVYSEV4MUlpUHBaVGlJOWxBZkd4bkVaOExKOUdmQ3huRUI5THBVUlpIMU5I''@;'; put 'put ''d2V4b0tEeDJ3ZE9seE5WVGZGYUxpaHliSE56Q0U3Z0FOWEZBRldWVWt0d1JIOG13T1BxNWJtbk5TVG94RzJmTmlZcVBSc1lCUHJzN013K3JUeXB4V3Z2N0hIaG01V0VqdUozN0d1ZDVZL0lQZzMrTEYyVXBQbWxPY0hDbmtBQjR2TC9EdUJWUnlhSFRxbmlrN05EOFAxRnhnaHVnbjBGTmpNbUNL''@;'; put 'put ''SW9hMzN6azhrcXpXWk0xdEFvZlR3UTZLOXJCdkdsT2pDT2xKYlNvU1JvQkxZT3VXZEEwNnZQc3JXWlJDbEZ1WXIremV5bWltT3hGR2N5QUtTamtwckd3N08ra1JGcFlPNm5wOU5IQTVVYmFpNTRzTlZ0V2NZVzlCKzlqeU0wc2VUZFNYcmdwS2UxRm0xQ252TWdDRHJtUlBiZ21nbHRvNzdLS1lr''@;'; put 'put ''cFlxQ0krQ0cwRisrMWpSQ1l0TTRNdWdTSmtjYkt5RCsyS0hUbWlnbllDMzNyU0t1L2JRdTNQZGZJZ01KdWRidWRCbHBHaTgxMFY5V3A5VmRiWUtGZXYzRTBmQjlQT3NMSG1GMFVaVHk1NzM1NFU3RmVuQkxrQ1JsZDJ2KzVKOGZZNzF1MUtTVDdiRjNaNTRuVktGZkpmZ0FkRDdwVDNJaHBGa2JO''@;'; put 'put ''WXBSSFByMXQ0TWtVNUtNWkZjeHdYOU5JZTdZcFYzNk5kMkhmdG8xWmNWbFN5SDJYUVZYVFdic0kzUGw4STZrQXFDbHFrSWxaNE9tUSttNTJhOExHVXVDeEYzTE5rMTBYMEhUd2hIZUsvT01TMS8rdmNjaFRjb3NvU1hXalhDY2tIYlI4cjZLMGx1NU9IS2tabjdieHNaNklkU1Rmb0dvS2VTQzQ0''@;'; put 'put ''L2w3Z0xvOFY2UlR1OC9NSHpGL0JkdWI0R0owR3Zxcm9ETVFTNTYyQ0JJc3EzdEpPcGw1UWZJUnBDZkJGMVVLekFuZ0p3R1R3c21xWmVxWU9vR2VXbVZNQldHRU9nMVhtTUZoakRvTjF0WU91ZHhub0ZTQlRvMWZWanBuTStVREpYTUE4azlFMTVtbDBuWGthdmNZOGpXNndUUS9nZGJiSjRBMjJ5''@;'; put 'put ''U0JrbXd3aTVsUUJOcGpEb01FY0Jwdk1ZYkNsL1hLQnRyVmZqTjdVZmpGNlMvdkY2RzN0RjZOM3RGK00zdFYrTVhwUCs4WG9mZVQ0WExlQUgrZ1JYUVQ4TUlHWEFEL2lwT3ZSQWtZMzhZeTJPYmNTeUp5UE5jZHNjejdCNHZQZFhUL1ZJNzNpc3dUeWlzOFR5UFRiMktkTitDS0JUUGd5Z1V6NEN0''@;'; put 'put ''eHlkNyt2OVVqVHYwa2cwNzlOSU5PL3c4bzI0ZnNFTXVHSEJETGhSM0F2ZFBmN1NZODAvZWNFTXYyWEJETDlWNnhzRTM1TElCTitUeUFUN3FpZHZreXE4MmZWdGFsM2k5SlQ5ZHVkZDlqNUcyVXp1aXdBQUFBQkFBSC8vd0FQZU5xMWZRbDRaRldaNkRublZ0V3RMYW5VbnFTeTFaNmxrdHBTcWV5''@;'; put 'put ''cDdFdGw2WFJuN2U0a3ZTWHBwcUZwNklWRlFCQWJCa1ZSbkhFYnhVRVFCMWthQkZxVVpSeEdCWjQ5TGlNT09vN29tM0ZHSGJmbkcwWjBKRGZ2UCtmY1czV3pOVGpmOTZDVFZPNzl6L2FmZnovL2Y0S01hR0U5aVQ4dWVKQ0FMTWlKU3BBZjFhQVVha0VkYUFpVlpGdzluZTJ0NmFaa2JUaFFXVnJz''@;'; put 'put ''c2hZWk5BUVpZM1ZhcjlVck9wTk92ek9aOHFlU0taSDlGT0dqOHBRK296L3BHM2lTVWo3TE1LeEJPcG5DSDVmK0RuZjgzKzZlQjNwNkhuaWd4K2YxOXZUMEhPbnhubnZnaU05N3hQdkFBdzk0anh3NU56RHd3TXBBMWQ4TFArdjFCcjN3NzVhanZvR0J3RUg0Tk9CdDcvRWR1YjdaSGQxMTFWV1BY''@;'; put 'put ''SFhWcnVpcU4rcUZmd2dSTkxyK092b1dPYy9XRnN6NEVNWm9BU0ZVbUVXRUNFc2FMQWh1WVZTajBWZzBoVUZya1ZaMDE5bVRndDhWU2pVMkpSTXVwMFBubnpsVDBxY05oOHM4b1pDSG5KZDhQNnd1S3cySFM4dXFFVnBmUjMzNFhud0RlYkRJaDR3SUZRbncvU1ZFeHczQXR4dGhYQStxUk1PWkFZ''@;'; put 'put ''dU9JSzFBTUVGNDJZUU5oc0pzWVZHQklJcjZCYk9SNlBYV3JBWVRZaUdqQ0ZWV2xKZEJLMDlwU2JFYnhyZGJjLytKNVhWWVRJcCswWjltWCtrayswcUs3RXVrTC9HYnNTdnRKeUs3SXUrTlRFUXV0eCtQWFdHL0FqNjlGNTZjc1AzTmUyUHZ4UmVleno0Qy8yV2Z6ejRLLzJXZlI0Q1owUG9GMGti''@;'; put 'put ''ZVFCVW9pQ0tvUGxNYnFmTjVQYVhGYnFmTlpOU0xoWWhvQVcxa0JKYUZDVDRJNjNPajBVcXJWUUJzQlhTd3g2bFFPTzF5cHhwd3FyRVRwMkd2WFc0eEZIWldZQ2VDeDRYWWFXdEtOY0lEMG5ibXNxbDNIZWpJN2oxeUpMbXZkZXJLeGRiKzhSTlhTWmRIRTNWTnY4NjBaSzQ0S1daNml2WmxoMncv''@;'; put 'put ''S3AzZWxaeHBGanM2emJ0SE82My82Sm1id3U0YTZ3dUdGcjgwMzFaZDNXRDlKc3hEaXlMcnZ5TnI1Q25ZWFR0Z09vcmEwUC9LUGxhOGF5NVRaOEphSThZNkxWNUZPcVEzNlBSSGtVYURsZ2ltdTE4QWV5QXNtVVVpQ0JaaDFKTjlMQXhOb3Bkc2dnQ1V0Uk9YekZnVTNlS29KNVBjcGdVaEFFdWJv''@;'; put 'put ''ZTFiemM5blFyRllWWlhEZ1ZDc0xkYmExRmdWcldxb0Rqa3FIUldseFhhYnRRZ1dVeGdxRkoxMU5vN1JaQUl3NlNqRWZwekVmb1pLdjAvbmRMaVNhTlA3VHB4Lzk2bVJtdHFSV0F5K1o2UDR2YnVrOE1UcFJESVVqaWREZU85SUxUemtyNnJqOUdFaWpQYzFqRWZqdXhvYUptTHhpWG84dFRhSi83''@;'; put 'put ''SWpHdTNzaURWMFN2dnFKK0pSK2c0ZzZydnA0ODZHYUNlaXRCTmNmNTNjUUw2QXZLZ2VOYUhPVEZzOEdxNnFLUGVVbUloUklGNk1CREpDYVJzdkFldTVzbHBnT0lZWm9LQ0dCcCt2b2FraDVhdjNSU0orbmVpcTA0YkNPcitQTHFvcHJWNGF2SE0zcGQwNjBZM28ydHg4bmJZMGdOT2xrcUF2c2U5''@;'; put 'put ''MDEzSkxkcUs4Tkxxbk1UWlJQekU5MUZkWE9SR05uWlQrTWxsYzJ0TlU3M2NNWE5HeE9wbzIraHJuWW5QdHZRZjhOZjJoaG13a2txMXZIdzNzR2VpYURDejNuU0lqMFhCcDJsc2FEd2NTYTY5MVh6MmNtbXpLSUlRcG42TW55WVBJak95WklpcEYyUGJpVVdlQXdNUnRlWGtoK3FldFhyZmJhN1hF''@;'; put 'put ''OEg4c2U5MCtuOXU3UEl4b0g2M3JNN2lQUElzS2tPNkpBaTJPMVRFeGszWURnOENpeEFldnZISzFjV3JYNUo3RzJSL2Q4cTdYOWpSTlAzWHExRk5UYWRhMkZ0bzJLbTFGYU11UkVFNXovTlR1bVlSMnE5RERxZW1ucmo3MTVFelRudGZlZGN1UDlyQzJLWHdDSHlEUG80T29PWlBhT3pIVVZGM2gx''@;'; put 'put ''dWxoRVNNQ3hocU10Qml0NnJCV1M1YUFlRjFhRUVJQWVtRFA3czcyV0lQUFd5ZFNTb1NacHB2U09oSCs5L3ZDL0RmZzlRWWNEdkhma2dtM0MvNW52M0ZVQUN4QU5QRlg3TmRDREJ0WmdmbHZ0SnN3dEhlNW1aaDkzbXJVRWJ1ajJxclRXUTBhYzNHRHdXMDJ1dzBOeFdhTnNVaWp0MVk3N0VSbnRK''@;'; put 'put ''b0xLSnpSWmdnNUdXQUJBN1NXYXFLT0FnYm9EQmxzUmdwWmdFOVlUS1VKbjduQTdqTUtGdEZnRVFzdEdyMVdxOWRZQ3ZVV3ZWaWtNZnJzQldaZm90Ums0WkJpa2VnekF5aThaYUNpQVZ2TkhOVHNnNWNjbHVHMEd5MFRCMmxHSmhUSytKRkd3SnBwb0cyUUZGaEF5OEQrZUFFQmFzZVk0QzdTaWFW''@;'; put 'put ''MTJFODFZSXBxd2lSeFBMdi9tV2YyUDR1OXp6NDcvL3p6dEwrQjlXdlF0OUYxcUJDNU04REthRkNoTVdDVWdJM1NHSENBVDBWbXUyb0xQS0Z3bVRjY2poMkx4RUU5aFZPMS91RTA3YXNSL1FTMzQwN2d6dUtNRTlHT3B1bWNZVVlJWmxSRU83TjduZDVHckpkK2p6djNzdlgwZ3A1OEVjWTNVWTFQ''@;'; put 'put ''bjREVXc5aU5LVEdZa0RFZ0FCR290ZUpsc2tZMDU3UWhYdi9WK2dWOGdmd1V4clZtQ21tbnQ4TFlwL21BVkhUaGtjdWwreTRuUDMyVGltNVFKazBnTzI0aHo0QzRxMFNSVEEwUUgxc3hseElZbERPYlFGRVJLTmJLb29waUY1T0xvRy9xTkp2bEhrazFObUMvanpKU0JZd2szcGJOM2pZOWZTNmJQ''@;'; put 'put ''VGVkbm9uRlp0THAyWGg4Tm0zZTkrblYxWHYzN2J0M2RmWFQreFo2cngwZHZhYTM5NXJSMFd0N0dRNWczYmdjZExZT2VUTEZzSlVDNEd1RVMzR01MWGpVYW1lb0U4UHBwTlgvaFd0cW45cTlRdEtqdys5WW0wU3NmUlFXVlF6cktVYTFtYkRKQ01zQmFpQmtoS0dUaVQ5cWRDd2dwbk9zN2tCSUl4''@;'; put 'put ''YlhkV0ZGYW92aEpsbmNXVEJzVC9UTnZyYlJwcWFaVU4rQmoyZU9kWXpNM1l1SEpmZWViN1VzUnB1Nkd4UHQ1eHFYT3ZxdkhmcXpSVGEySDNCWkFXUFhvSzVNZTBreGpPUERtTURvTUFXbXVCSEJ5ekN5WmdtSUV5WUN1bk9KOHJ5YnNYc05xZzRFdklHZ0tKYkFMbE9oa2t4UVBRT1dtanZSdEhs''@;'; put 'put ''Nm9vejJmemhYMngwNDFOcXphMm84bSsyZDNOV2VuQXAxTFh5NC8zajdTR3ZIVE9kVncrWk1xcmN1a1dsTXBmRmUzSnlNZFVick82K0xUVGUxNzdZVjd1bHQzWmZrZE9DSGIxbkF1eEdrRzFnZlpqQXk4SWhPQzJ2QUNHek5GVUFkVTZrV3phakpaQ293RlFCUDJZcm9YSVBlTUU1YXFiWHBUMWtG''@;'; put 'put ''Zkt2MGtBbVBYWHY0OFBKdjc1bkVYNWFHNXU5NUEvZEx6OERxNDRDZkdoaWpETFZuV213Zzlnck1CR3ZBbmhsQjhCMXBRSUVMQWxuZzJuc2pjc0FjODFudEFUOUREaGc2U1JrallwaHlrZGlVSThPL09OSTF0OUt6WjAvdlpNK2dFWDlXK3FLdVo2enphRWYzcVJIejVVUDd4dHZhaGhOVmVIWHhZ''@;'; put 'put ''aVI1cUtmdldFdU9CN3BnM3p5b0d2V0Q3UU5ydHdMUkJJdUpWaU9NNkVDYWFMU0NaaFhsTktnSTgxSUVRMWtaeks2NkxPejNRdnZTUURDa0I0c015Yk9od29MeWlGdmtyQUhDT0duTDBScGxrNDhlNjh4Y1BYakg3ZGx6ZTY2Y2J3ejBSeHFuRXJqcVVJdTdOempUM1RKVldEamVqVC9mZUxDbis3''@;'; put 'put ''TDI1ejZ4K3RrREUrTmViLzkxMmJxWTlOSHFibi9IU0VkaWJKYlNIZ2dkNG1aOFU1a3BBMzJDR2RkUWVZT1puUTEyTFZnMTFGckUzcFRYQ1lMZ3I2U1A0QjlMUHpwTkpoZEgxejVKN1lnbzRDSEY4QkFHMzZNdjArM1FFWkNxSTZJS0E3SjAwQU1HTU93UGt3N1YxUlFKMWFucXhtaDlXYmdzNUt1''@;'; put 'put ''aXFJZ1lxTGphenBDUWthT3lvdHowTStpaFFrSnRpWitmN1p2c2J1L3J2YktyKzhxZXdaYnVYZjFuaDFKemsrM3R1MlpUdlh0and3SC9jSHh2cnprMjI5cXh6MVc4cTdsNUtsSS9sVzdkNVhMdmEyK2RpK0tQdHNmcU85b2I0bTJDOUpXdWhLK3BBdU9LSmwraWkrNTFHdGFZeWU5MVJSSHNzUUc0''@;'; put 'put ''VkUrMUJxeFVDenlxSmF0QTZRSXNUeEJjV1pVU1VQYWFMekFZQ0xLOWR2R3Q1aHdMMnBiK0lpL1lScGZPWmFJcmliKzRaWmN6YlBlNzJEYlgweDBuejJ6Y1piN3owa2ZvTnJQOXBtdGdlb0xvUUNlNHFjeW1NcHJOME1vZEtpMTNxTXhtaE14dXM4dFd4SlNIVHJZZ0ZPVkJ0bEVrWmZKUGZJdWlV''@;'; put 'put ''YVJUeWlmd3M1aCtKRHJ3czBEL1drVmtCZW44UG1SNEhPT244ZnNlUzlaeE9wd2hoTXdESGVxZTBCR3drZXlwb0xNQU85UDQ2OUw3OENrY0gvdkJ6RU1QelRLKzYwWlBFQWYrQlZDZWlIeVpTa3F2MURkRDRCQ1FhVmxNRTRIcTd5SXFwU21uMC8rNzhYZWtldmIxaS9uYjVtSE1FUmpUcVl3cHdK''@;'; put 'put ''anBlcHpTT3JVaitCU00rWFVwOWNoREQ4MzhZT3dIZEV6Myt1djRPN0QvVHJDVzA1bEd1MEZQeFJ1bTRsbUFnVzlTNlFrcXFMVllvM0ZyUmwwdWw5ZFZGU3oyQjNWMElqSUg1NlF4TUxaemc3LzZ4TzZqZmMwekE1Mkx0M2NkYW9yUHBRODRGTXplcXV1TzFIVk5kVjRWbjJtTVRMYWFUL3dnNzhy''@;'; put 'put ''UytVWFc3eFQ2eVgyQW13bjBvNHk1eWthTWhzNE9Jb0tRekQ3bUJ3Y3BCWWFPUWRBWWJqSmpveFliWjVFV0pMV294VWVSYU1KNlVYOFk2WFNLMzBQOUsxaUcxVUM5cXhwb25GUWF3MklOUnNHdytwYWQ2TUREYXNtMVFrZ25JTjNxenEzMWVuRVdnVXU5eExxWkFEK3JwS2NIb1o2Sm52SGhRVmhV''@;'; put 'put ''SmhRSzIwT0JVS2hBTE50aVF2aENZUlh2SkZ6dXRGdmtFaUZCTWE2eUxoTE1ZdmNyb2xUbXI5N0hWcS8rOHNubFI1YlRNOUZvaDdGaVZ6UTJXdGR6V1d1OHoyNmVMdEs0RGQ3eThyUi8zeWYyTHorNnNuRFBZc2R5eXQ1eXN0ZmVGMHpFYWdkcm02T25WeDVldnZMTFZ4MjRiM0hpeW5Ra0hLcVA3''@;'; put 'put ''R3JzUGRWWDUrL1NUYmpQdEpncXFtcW11NlkvT0xQNjZQTCtUK3d2cnlvTGVMRXh0aWNSYll4TzFNZmIyZjZWd3JmdmdSd1dRWlBXWmFvTldFUHdDRkFSa0pVR3RDaFZiV0R3VTB0R3I5Y2I5VVp1bWhhREZoV1pheGsyWVJLUlB0NStFb2ZwdjhOM3duL2svTnJrVC9HQTlDWEErNndjMHloQ0pj''@;'; put 'put ''aUhPakt0SUlsaEJCMXdqbFpEdE5TOGtJTXJJdVlXTUIzTFUycXplaXRMZlI1ZnNjdGFZaXVKVk9tWkFicFJJSHN4MDZwMTJHbFhQc3ppZ1piNVJEemUwZDEwb0VONkJOYzM5dlEwdnZScTYvQnc2NnZrZkdRODNqanNxZGpiMGpRZHd4OU0xOVUxZjFWNnFTdVI2UG9YWmcvRlFOYmVEYnhXamhv''@;'; put 'put ''eWRhVWxKcU9HR2hXS1BIVnRDUC9BZzNKVUZncUdhUGhIa3ljQmNldXU0NmI3RHgyNmYybm8xc1JnWUxHeDkweC8vNW5leHNYQVlPTFdJZlBCKzVlVzdqdllrdXdMUjRhdUhSaTRiaWdTN2t1MndMNVF2SDJaMlRkTzVpM2swTVFjWXhsTlpwUERabkthbmFFcUxVV1BRcGgxT0MwVFlCMjJ6djdx''@;'; put 'put ''eENNSER6NXk0bGYvT1hGOWYvODd4dDlQenM5OTR2RGhUODd0ejV3YUhyNDZJeG5ZMnNHQUlYMHduZ2xGTXhGRnNsRjdSck1BdXFWUWJZVXk2OTdFdzB0ZzN0aWRzcHl6ZXAyUDQ4dWxQOGNma2tUOEJ6TDVsY1Z2TDVMemkyaEQvd1pVa3drcC9WTnB4WHBWVkQ2OE1DQUQ3Wm5KTGRhclgrbDNo''@;'; put 'put ''WGI2MHFMMFhkNHAzNi83WWIrOEtKVkpnTXVBaEVwQ05GcG1QR3MxaUJFWDkwK3BKY2pFSkdoL08yeWFuN3RYWHV0Ry90MjBlU2svL2pOY0Z2dUw0YVhQSERyMG1hV1JQNDhOK2s4MDlkRU43SXZzOHorTnI1WitIVy9qVzlpYTZBdlY4eTJzOEh3Z3YrWTdHVTdEbVlCc01pNkRqVXJYUytOREZy''@;'; put 'put ''UVpsNWl1RnI2UzhKM2N1U3pkc2J5TXI2SHNoS1BTdDhsNTZUWHNnMTVvcThkWmZKTEdGVlMrQm5mVHdORVlYVjZtclFEV0NmcmpHNHovZ0lxWWFjOG9taG1zWkVrQVluSXp0QmNoaXoyb2dlWjVVeDVtUWJuc3NldTlnL1pkZGMyRHl5M0wzZVpNb3I4NnVhY2J0RlM4Ny9KMnZzNFo2T3BEYkox''@;'; put 'put ''Vm1YS0RYa3VZaHNJc0FpYndHS1hkWnVNNk1XbkZTUVAyZzJ2b24xbkdmYmRJLzQ3cjMvbGZSMkM2MHNmeGl2UjE2VGJjZVB4bDNpOElZdkNYenlNdHRSSFpwR2x2aUc0K1I1MFdhYTFXT3VrZzBFblNTaHhTdzhvaTBOemFlZFllZUFnSUlEY3ZjWnQ1T2F6S3ZEemdGUGl0SnRpQjJlWGYvbmFa''@;'; put 'put ''ZnNHY3V2RGZBdkovVG45S2JybFA4akNqNDRxTVJ5UmtTNCsyWEk4WXB1Um4vZUgzTGk5TForaVd2RUVNYTVQdzlRYVZ2WlIrZi8vL3c1ZmxBZ2VvOHVCOVM3Mm4rL3RQOTNLcEk0c2JlTHAwLzhHRm9lc0dCcTRkNGpUTGRBR2wxK093TmpQSUhQQkdZUmJBcGdLbW9ZbDhBQnlXV0ZqZ3NCVTRD''@;'; put 'put ''NTNXVUpXT0JyKzlPYm5qOUNzaTJackYzaUVZOS9UUXM4dlludDIzTC9zb09kK3ltc21zdHZ3R2p3MjB0dzlJYjZweDRLQTJmQ1pCQTloRUsxQkhScUJod0x3UG8xRkZBWjFPWjlnWnFnK0ZxZkJGTUFkeGd5S21NZVIwT08xdTJvQVY4dnVRZjdoMUxIcFYrNUtDSHVsWFBZZGFsK3R6K01FVlZ6''@;'; put 'put ''UjA5ZldHYW5KNGt2NlFtTzZiNjU5UUlTcVBwMEtZQytoTVFnTmlpa3U0akxSYVdhVEpMQTVPc3RWcXAvS0d6dFFmQnIvVHlqQ21UY3E0SXNjUFRwdy8vZGYzTERPVVNmMlBNblRoVzA0NS8vQ2IzekNzdllzaWpORjBhUDIvU0J0NUZyd0IwRkV1Si9WSENWYWhpUVpZVlRxcUdvV0RFVDlGVTk0''@;'; put 'put ''TERUZVFiUVNlVzZhbGo1M3FXTDZ4YjNSaVlmeHdjOGNWZmFQWHAxb2p5NDNCZGw5b3NPdlVtZGFySmt3bnNnYzZJZzF4cDYxaHRLMWxmeW9SSGEyT2xNYzhsZFVlaTJkdXBtMS9pczZ6Qm5BMHlld0tIaGZKdVhZOGtDR2J5TmdQdnAwZnVNVDR2MG4xdnl5RGE3Y284KzR1b0l0N29EM1l2WmtL''@;'; put 'put ''T1ppT3NYcHBUdVJ3QkJ5SytxWENpdnN6aXR6Q3Z0dXp5L0g1NXVhNStNcm9iZFBtc1R0bThmdWwweDBIbXNBMHdIZEtWOC9lTWNibGpHSUQ2ZWhZV3VhTGdxU1VoU1NYTkdDcWMwbGpvQkYxRHliZms3NS9FdjdSL1FHR1ByLzJIVkxQK2dLdlFGUENlQWo2TWxKWkR3S0NudUV3MWMwV0R4TENW''@;'; put 'put ''cVNsbXBNS0hmZ24rRTNZWDNueXdZZFBQdnpneVg5WmZ1b0xWRks4VHN6c2E1TDQxMzZJbEw3SnA1ZzhBM2xvMEVIWGhJWmpxWTJHT2EzWmJEWXJ4U3ZNRXJvMHNON3hKN0R3anE5OTdUb3NTR3ZYZiszRjYvQ2M5TmRZbFA2QVorSFRIN0RJK3k2QXZqOEdmZXRSZWFaVVIza3ZKOWhrYjl6R3pt''@;'; put 'put ''N2tQbUhMcXFSZlhmLzMzem9qL2VZb0xzQ2ZscDdIUGRLaTlKKzByeWJvYTdlaTZ5ays4eUd0bkgrZkMyblpyR3pHYWU3bWc4SnZ3dStUM2tHS3BGUDRnMnYvTmtISTRzU2F4UFg5K1BxN2NULzU3dHYwdnBKQVdQQTEvc1puUHZNRytlN0FXaHN3RUY3Ly9mb0YvTGM3eEJzRnNHZjFsK01GSG03''@;'; put 'put ''RUtBcmpoWFBqS2ZFd2FvclIyQ2dkRCtYSGM0T3dUOEZYOUlFSGZ2LzdKdkxWZ1RmUDArNFQrSlA0QzV5Mkh0Y2Q2Y3U0UUtxekNDR01US09scCtVb3grTTYxR2RQMnYxaDBmL3Q0VStPbnprekJ0cm4xOS84SnAyenRINGwyYjMrTkF4WHhmcllJVDVMdXhBQmdZUk1yVDA4Tk16M3RZdGtzSnU4''@;'; put 'put ''QW0zZHJLMFpXbEpwZjlvR1BpQWZOZTMyZHgyNGRvaDgyZkhuM0tlckI1dmhEOFFLZkJGQ04yWWN4VmpRdUVFUldNRnlyeWpYQ2pxdEJudzdCN2huVlFDczFSSHRLdk05cVFGZmt0Vmo2b3JKOU9nQnUyY3JDT1VxQnFlWVpQTVpwOGVEa0Nma0NYb3JZZGlTUU5Cdk53QlNrY3NKV0ZVSHBuS09y''@;'; put 'put ''QTNzTStYY0N0OSs5Y0d5cGZqVThmUlN5OGp1enNIT3FjRFIvYlo1Yy9kb2FxUTdRYXhuRDBrdkRvWWplN09KaWJxeW9wYXh1dUZHS1o2czczYzAxZFRFK1pySFFONU1neDZ5Z1pmeTdBV0xFVFFRbGxkWkRzUlZsTTFGV0Vya2NCcGRJdWdpOEZTOUFPVGRERVJOc2cyQk45bWw5U3FIZlRzREFv''@;'; put 'put ''enF0V0x1YjRDWkIwL1ZZYmNqWlBmWnZaNFNtRGJvbUUyaHZEQmxBS3NTd1ZQYkI1KzdvclB6aXQ2MnBZcERoeW9YMjl3ak5UVWowWWJobXByaEJtSUZGMkg4aHY1VWZDOTVSdnB0TENXMVJLZFRxYWxvZENxVm1vNXltb29BZlVoQUgrV29NUk0zQWg1S1REREpVbUJ5SWVjdGxlenNMYmt1NlMy''@;'; put 'put ''OWZ0Tkk5c2JocGtPaFhuZDNvR0VpR3AySUJucUtlOE9IbTgwak53NE4zVEJTRytvc3JVaE14eFBUaVVwUFJ6akM5NC9hRWMyNS9iTUs2djJqaUdSN3c1d0I5ZjVaOHZ1M0dZZ1JxY2pDaHB4SWxmMmpnSVdYQkdUN0o3K2wwTXg0MmdpemRmOXNJYitWN2grV0NUNlBKQ3ZadEgraytWREZVbHN2''@;'; put 'put ''MzhURnlxdlp6a1haTHBKbjF2cjN4bFA5TjR5UHY2TS9GY09XdGJzMjd4K04yYnhPd3JCL0x0aVVUS2FEMEkxamg2NWd3eEJCUTVaek01WG5MeE9kR3l4Z2Q3bTdyTFFFbWpyQmo2THpEZkJ0VXh0ZlhqcEhuZWlGS2VPRmFYZW43NXJtb2V1SCtzOE9qcDlzazQ0WjUzdTY1czI0eVRDYUdhMHF6''@;'; put 'put ''Z1FpQXplTWo3NWpJUHVlL1QyNzhSWFpycTRzcFRFdmZGc2szNEpoOTJhTVJWaW50V0trb3pFbHVsbGxTS2ZUTG9HbFZjeUNFMmhCZytWb0lpZ3FUNllVSEFNZFNKM1ZyUy9uTThhZ241MnZpYUtINndnL2xkczhGTWJwVWVmODF2WFhIeHdmSDIwdmEzSUc5T1ZGcmtxaW5aSW04T05UblowVERt''@;'; put 'put ''dVAzdVQzVUR4RzE2ZElJK0N4RXRXaGF6T1dpaUtpMCtaanM3S0lCRGtIYWtOSFZxbGh1Q1JxaU16ekRLbDJKaUp6SUZROHdrd3BJTm9FQmlLeXFncWhxcnFxMmxBQVJxd01CWU1CS2lLeFZlWjI3clYxNEkzRWt5S3FzMy9TMkh2TmFOZXBVTGhzTnJwbnFYS3h0ZmQ0UjhmeDN0YWxDcURIL3Y2''@;'; put 'put ''NXVYNmlsUkk5cTYyaHloRlB4V2h2dGo3ZWRYSnc4R1JuTXJKSHVtYnZ3TUQ4L01BQVAvdWpockNWeFNWUFBtVmpKaFBmR2pkaWJBUW1NWXRGbGloV3NNdzlidTdzYjMwTmIvSVBXYlJEZmdPTVVzQ3RQYXZENzZCaEFTcmhZTmZrUUpwVkZuTDQ5dm40d2Q3R1VFLzQwS0hpZWRpVzVMNVc2UXU0''@;'; put 'put ''dVhYWTIreVYvZ2FrMlZxMUxPczc0UHVUNUIvQWpyS2dBVDV0Vnk0b1hVd3B4U3JicVo2TUErdzVUQTJOVmRYamVXbzZXQW9MekN4U3JkMFVxUmJCQ2pqZzk1Y1UrLzNGaWNPSHliNUFjYkUvNEM0T3pLejlrWTYvL3RMNnVEeCtLVHFTTVZwQXR4WmlEY2xSdDFZMUYwRmdwS3M1b0FQTWVEU011''@;'; put 'put ''aEVBQ0lpZFBtMThDVEtGUmRGTHpTVXVweHhIRjdmRTBXVkhnSnJKdXR4RVQ4YUxDa3I4eFJXSHh6cnlFMzd6UDQzNk1hUGZRd0pycjNidVl2cytDQXVnWjRZbXRQUUZBM1BTbEoyM2NnMUk1NFEzN0xtVmF6ejFDOWh0Y0hZWDJLOGIzc3pQWDdCWjdjd2l4TlFZWWlvTVhPbXU3NTc5OUo1RGg5''@;'; put 'put ''YXV4UjdwMzc0L2RRNjJzd2ZyT1IyaXo4RjhCTlRPcDJHaXdRdzVJQ0pQd0tTS2tYalliMG9BYlg3K3lYelFaT2pRSVNvK2tiSk9vUTk0MjAvbFR5bkcyaXFNV0V5Yk1yV0xDaGJ0a2w3VUNWcXROYXVocDdac1dTQjU0SGY2VmdkdmlVNVhrbnM1ejBJMWZ1VHpXKzErdTk5aEFQbWpvbVRkaGc5''@;'; put 'put ''SkorZGUrRTcrWmpwMnNDUGVQTUMrSFQ3c0dJczN6N3B0KzlvVUNtOXRHZXBOU2M4cFA0bDJLRnpmSElzMUl4V2ZXc0cvSHJ0Z05SUE9xSFFOZHVaT2FhazhzcXE1a05IVUZ2N2tUT2hBZHBqOFppYlVpY3FNWlI1czJxMDdmTGg0VHMyRG5RM1M0MFNiRGNjVS9UTUtjOW9VOXloNXk3aUg2OUp4''@;'; put 'put ''ajlkdnpJTHBNSFRqQ0JnS3pISm9pTzZLd2ovWmNCaTVZUWplellEZEVKOU9jQU5Dc2YybXdQYXpNdHZoNkdiYmoycHlIYmd2d1B4NUE0eGl5TTQxUFpNS20yMURGY3pic05NVTlQMlA3RFRwdjhuajg5dlphZFFtbWdLYlNGblhScHNvdjY0U2xXR1NWWFFTczNLc20yeW1EVENYc0Yrc20xWFFu''@;'; put 'put ''MkMvYU5jbXNDNXZ3TXhML1Z2dFQzRGI4VWxZbHduMVhERHBxS2N1cjhyS0ZDYllNdHo4Wk1hQVU2SG92RmxLN1lBTElHV1ltTEUxSlowS0NiKzgzTFBybUhqNE1QN0h0cG5KUHVtZmlQWXdqN204amwrRThZTFUzblZnZ3AzZ0hjT3dJUHh5a1plU3paR1hJQW9FYWdQTTNnMnBRaTlZc1RTNFRx''@;'; put 'put ''WnhGMExGOHN0bkdxS3pjNUdtNW82bFBjZjJ4QS9YUmNZR3FwUHVoa1R6WVB6RWpMazZPTmdWcktpcXNwYjJkQXhNVjVVTng3eGxqbUtIeFZyWkhodWFvL1lTekhHUmZBanNwV2dtNHNZNkd1WUZzKzVXcWt2SUFqMDBBQ1NBWjNhQW0zTE1Cckw3cUJFVTVPNlZWYzR6QW9sTEQ3Q2EwbmpSMlZU''@;'; put 'put ''V1BqbytmdkQ2Nnl0ZFJlWDZFcXRqb2hQSHB0Ny8vaW5wVlkvZnBPYzVTSzhEUHJWTXZ0aGhRSktUTHlCYVpJMnBjZ2ZkeWxOWjhPYzlRQzVmUU1YN1dleGZaUVpUUmNWbVpDVVdLbGFhRlNFRHhQSkhFQ2tnWlBDdzlCSVZNbmhDenNraGRVU3I1T1Fva1F6RkJyVGFtTWR0NTZFWDEvRjc3em4r''@;'; put 'put ''VHd0ZytKekFkMU1GamNFcVJrSTF0TjhhdzdGZU9vWlR2bnpOelZNM24xMStkTjhOTis2REh0K0piNkZmYTMvRU4wczM1Mk5OTnVpYjVZQVpSUTNOSjZHZFl3eDlDMFIxS0dDejJTajFlTU9pM3g1T3V0TkowWTd2ZTkvN1QzejF1WlB2UG5maTJhOCsvenpXcjMzKzgyOUtiOUIrUzlaSFNUMzBh''@;'; put 'put ''NlhaTUNZOWdTbFRJNEhJWFZQaVBFRG43bUhFYVVWRk5vYzZMTmlGQmJhS1Fpd2VyM1dWKzBwODV0TFhMbnZnazZzLzhleHVlZEkxV21SenBZbGVPb28vdW5heEw0UDVXa0I4NHUvQm1EdkVlYXlYanZNa3NFLzZDYjVIZWcwSHBMMGorTkQ4aUhUUFBPdTNlbjB2UGtLK0NGS3JPaE1zWWNZbGFH''@;'; put 'put ''azg1UE1TbXVNR0lMTXlQMk0wWVhWUi9VMURnR2xRUmlsZ3N6Qk5LSFlYRXFlYkh4V0tsTXRFYk41Zmplc2JVeEZjdlRDaGIydDE0bEFvSE1TdWxqYjlQVFVEVGJmRjYzcnE0dWZTQTlYNmJvTzd0dm85RGVtQ3duVERIZFcxeFladUdPZXk5UXZvQ1JZMzJqay9EbXlJeTRhSGxWdzFtbis1RjYr''@;'; put 'put ''eWRRQis5Q3p1UTArcGhud1lEN0l1WnVYVGU0UW5hTzQyRVIxMWJ0QnBZWjZCa3FZWkpta1FEeUtRUDhnb1dBOXNUMjFiaXd1bUhncGhaMnViZmhkZEZCV3UxZnQzTFJ1S2E2dnZhRWdYRnFRYjNsTmQ2elowNjZzSDB1Zll3bTVMOTlmb2FlNTVDNjdHdCtGSHJTSXVXRitYZm9rTWp5UDh0UFJM''@;'; put 'put ''bGczQmM5OW4wTGVZYkxXd1V5czZRYXFRbVZIT2NwM3M5THhvby9ITERFdWVhQWkyVGZKQk9YbWc1VXdKbUZCS3ZzQmFQMzVOOFQ4dllJbU1BUzk0S1dZcXlrdEwzQzZIdmFoQVM4ejhmQXBHblpiVDdrSGNsN0ljT3A0MXptUFhORitjYmlyb1RuQS9BK0FqZzJyQlA1eUtUblVjYm0wNTBqSFZz''@;'; put 'put ''TnZiRzJodEMvVktkL2MwTnZZRWE3V1pQdlBZVlYxZFY0NFY5SFJxcTcyZHRTYnBMMHlSanBzUDJQR0M3V0FiejRGRVpBeHN5VExVbThuQVR0RmtJaVRTWEdRUkQyc3hBYUVxRW5ZY3d2d3ptbFVraXR5NVJ6enBxOHhxRHdaQXMxRGpMdWowcHRJc2UxTWQ3TkNWWTVwNlJzYldmanFVeWJTc1pB''@;'; put 'put ''YXU4d3dXVE1TYmg1NTdibTZ1b2ZhaHdYTjlsN2ZMcDJ5M0RENmtqczI2VUV1bXlZR1JBWStBaXlreXQyUkZod21ZVFdER0xSdFpqUURQZVhNNTdUYWxCcURJUktzQVdIbUZVMGtvaFMvRzhQalJlNzd5bGE4Y2hhOTdXRFFYRHc1bUIwK2NnRy80S0EzcHN2M3FJcFA0YXZJY3k5OUpzQ2hpbUNh''@;'; put 'put ''dEF2Mnl3UDZTVnFDSXdoUGJaUERRQUtQYSswaW9QaTlXVnJwZFZaWHV4OWpQS2hlWnBEKzlUdnFNL3dSNnJVRkovSC93M3hYNWNKMFdGUW00RHIwcXh6WEg4UzNrcnJjVEU2VjVPRjI0UjNxZTNOWDlkbU9pYnRGLzRlQUhoc2dyRGxsdUI5YS9BWDdQbzdEVC9nejQ0YURwRUxtSnF0VjNVUzNH''@;'; put 'put ''d3Ryc1dDUEV0QUpXekI5Nm1FdlBOd29ITG10dFhzN2c4ckd6WXpnUW4yOXQzWnRZcXlJZlhUc0tmWGVpVjlDWFFIV1o2Sm1pU2pBUUtqSW1WTW0wVFNyc0hRb0VTa3ZoNnhYNDRmZkRSem5ldTk2SjFxRkJNVHJEMW1ZQmUwVmpONUI4Vk1KTW94SmczSU9xMXB5a1NVUWd0RmZ6VXZVQU8zMEJD''@;'; put 'put ''NUNCQUdIZHRCTU0xOW5GeUcwUEJBSlVaMVBNc1FRTkZvNVE1VHpTV3BOWHExc2pKVEdyczl6djhBQnRXbXhWN2NYNlNLZzgyRkJVRUhVN0xJVTJvMjBzemVwallyRG52Mk43SHRIUlBZK2c3ekU2REsrUDRIOWxzc21MV2pQcFNxZkRyQ0g4NkkwZ09sRkdqRnhZZ2VZNWdHUjE1NjBxZHRtdE9a''@;'; put 'put ''cEVhbkhGVTNFU2FiZE9NVmxCdHVDa0xNRmltL09pOHVKTXVtcHpaaFNiT3p0TEVtNHE4dEZxSHF1SWV0R2ZvYzhoL2VNRVAvWTVKbVMzZ1RtR0hUdkFuRlZnc0lnZTNBSG04aHhNQWZyb0RqQ3J1YkZXMEwwY2hteUdlVG5YandsOWN5TU16eE1TWGdNWlpBRlRmekRUWjZYeWgybDZjTUpCOHRD''@;'; put 'put ''c05MMW0yUUFDVWJjQWRxWjh4cVBsMWhKejVXeEZObWh0a1lXU0NTUWtWakpIVWpTWkNLd0NjRkd5U2dhSnRMYm5ETDZUTkV2aXQza3F5VjEza2ZPTDBvZnhNZWtqTFBlamsrWHFwRERKbE5iV0NFUWo2aXFBTk11eEJwZlpnRzZ0bUFoYW1kenI2ZEdzZ0UvQ042UTVvUVFQWmZrdE8ydWczUTdB''@;'; put 'put ''bkQyRVJnMm9BZHRBR3lHc3VlbHR0NnFrOVVBYldnazN2R1d6VEdSekM1clhSNDVzMTVESC9Xa2NJWVVhZzdYQWRsNG5WVFU4Qm12QnNtall6SDNibnZjbThjdUxnY0dHNjNvSzlaV2JXZE05Yy9mTTVveWx5VWk0TDlxczhXN2syR2Jqa1UvTWJjeGdRb3ltV0w0UG8vRnFtUS9leVdnS3EyaHpN''@;'; put 'put ''OHd4OVBnT01HY1ZHT0NEYTNlQVdjMzFzNEpPY3BnOGphOWZwRGt6Ykt3SW44LzYrN2IwQTZJQ0oxUXd4NUJuTTh6NnJ3SEd4dVlUNGZOWlA3OEY1dDhCcG9UTmgvZXpzdjdaamZNQmZxcUZiOTluT1FUbE5MdDhvM1d4b0dkbkRBYVZlV0d4d0k5eVN4bXI4WE5Dc3dMUU5jWjhISUU1VEVtckVr''@;'; put 'put ''TUEza3FLb1BEeDEzbnkxOERBcjZaNSt0ZXorSmxjQ2hodVdNVCt0VWQ0SXRpTGkvOEFPR0Q1TFV5bXhHV1pjdThXUExHY0RZYW5oTHkzbjlraWR6YkRITU94SFdET0tqQ3d0MS9kQWVieUhFd0JlbklIbU5YY1dDdm91VTN5aStaTTNZRmZKUTVRQXJvbmRBakg2b0poNEl4d211WnN1dkdIejcw''@;'; put 'put ''N2MrNjI3dHZPZGI3NzNCM24zdDNKUG1mZWZRNnhlalVsUjRWV3VkYWpjN0ovNjhJYVVsZGJYbFppMXRHVWJLUVZSanpzcWFCNml1SHBQRzlReklJcDlMamVsZFZ0T0VFRWcwSjlwT1RpUjRJNjlYRmZwaENZdlQ0UUNkbkRkbFp4b1dSeGg4QTlUS3N5VUpNaWNya3hENDBqWHU2RlhVbnkxZVRC''@;'; put 'put ''KzViU3E1R0dJL01OamNEYVRVY2o5VWZtSkZSWmhrZTdzc0RoT0hPNnY2Sk1laUtUSmNVMzlDM2RmOUJYbVZxSjM5Z0h2TzJ0YkZ5UmZqenR3emRURHBmK01IVGRRTU8wWDdxNW51S2U1V213Zlc2V2FlSFJMZlN5R2VZWSt2RU9NR2NWR0tDRnorNEFzNXJyWndWOWFqT2ZjMXVaamRVdWovWGN4''@;'; put 'put ''bjQyNWU4MFpPcUFPclFhckYzV1lmbjRLMWVFQ1pyTDRuSlkzRVZ1YThoYkpQS3NncVFxMnltWXkzWmFlV1pMdHRPWmx0Vk05MHJMOWQ4YmFHL3ZsOVp5c1N2aUpWOERTVFgvbEJIc2Rob3VxUWZxcUFBZEFFcE1vTWRFK1hSVHZLRERjdGk2VEU1cVhNMEJxbDdQWjR6MmdEZmdyZk96WTYxY2pG''@;'; put 'put ''UlVwcHBTY28xU2lsNmdjZWF4bGlPWnpPSG1nKzAwVzNaM2U4dndjRXQ3Sk5uYjA1anNYU2JtcHVsb2RMcnBXTHBpWDNQVGRHeWU1c25PZEVhaTdaMXhtak1LdU9aNUFxOEFydnRBdnhQVXU0aTJlUzdBSG54QTlmeWlBby9GV1RYOEM3bm5CUVBxNTgvbCtsK1pVRDBYS25Qd3BoczVuOEp6NFVO''@;'; put 'put ''Z0gwWlFFbVZ3TjYvcExTc0RMSHM5WUkwNHNWSGZqSFZHQXlHaWpucDJ1aEc1aUhkSEdCT0Z5YjgyYlBONmZwNlBFd0hDb2xXR3EwaVBkS0pldDF4Z0lFcEdma20yMEdRV3FCYlBKdzNRY1pzdTJjYU1jeTJ5aGRoa1VnbU16T2FHS04rTUZnNi9aUmRnUmxRMU50YlhJOVNZYWV4cWE2bFAxaWRp''@;'; put 'put ''VWNCY25UM2dEd1FEUVV2T3JGRFMzTGRrWVBEemlVMEh2aUJ6T25EdXZQRmxmdnFiT1JuMFh0bTdkRUtWbmpIWHZWQVNXRzNiZkNJc2ZhQTNUTE0yZWxyNDJYQkxJdEV5TjVaUDI0alhSeEtxazJMcERuK2JQK0JvcXFtTnNieUVUcGFYa0VJUFpjcURXS3RwREJHZE5sVktrSzRFQzZpNEVEYTRB''@;'; put 'put ''THhtbld3V0JtaDVBQUZqUVFjY3BXT3N4MHJkZU5MRkFaRENIcXpZZFVFS0MzQTNYUm80NDlzQ3h3cmdqK1RBdFJUM3hoQ3ozaGkzQm5SL291RkdFeVh3RCtiaWxxMkdXM0gzOGE3dHNpY0NkWnNOdHhiRDJPbWVMZGtVbkw5NGZnRGwzeUhPMTh2YlBhZDgvUkhWODRzS1BCWVgxZkRQNWZwWm1X''@;'; put 'put ''SFAxNy9HenV4b1A5L2cvZC9PNFdsUUxLSjZmc3pKNFg4R3o4MnMvMi93L2gva3ozOE16KzJzZnc2L2NpK1BMOUdhcVU3eVRWUUdWdGJlakwySTFRYktscFBEYmpQaW9leGpwZlFZVHduZVd6ZGtsOUpEWHd5YUFKTlY5V053ZDh2THkydkxhd0srVUpEbTJ5c3FXTkcrN2hBMUtVTGNwaUJ5OHFt''@;'; put 'put ''TzI5by9uKzQ1a3gwOTI5dDJyT2RBYjNqZm1mTEpxb2FsL2dNVlBRVnoxY094Z1hsNjlHSDUxTktlVzRaN3o0NE9YZFUxUGpyUjJCc29yZ3luNjNyTDEzNjJsSTJPMWk4T3g4Y2pGRS84VEkvS3kwa3VML2ZtOFQzSzhMZWI0L1gwZHMvcHZqMmdlbjVSZ2NmaUZXcjRGM0xQQy9hcm56K1g2Mzls''@;'; put 'put ''bWN2ZGJuUkVybXUyZ01YY2xnSHRyRlBPekJFTFRTRU5rUDhza0w5MlNRUysxRTR3ajlCVFZBcmFWWWtrNnFscnJqNUdCOGRRWGFPRXJjR2dweVFRS1BrRnJhWDZsdndML2xLb3RDUVlMQ2tOZGMwL3IzeUVPU2xuakc1VWhXcHlOcHNEYkxZd1FMbE5ZSjNwRlpzTm5ncXFwOXZhYkNYYjJXenFB''@;'; put 'put ''N0x0YkRhdjExdmpyUTdhd3JZTk5wdmFaS01XbThadDV3YWJpeHBzWVFFRVp6ZzRjdVBRWkUvWi9oNWZDQmg2b3I5c2Z5OEl1NS9VeEtLN292ODhFZlhDSi96Qi9ZbWhHMGNpVldPaGhTU3djcjEzL0xkeGJQSUFOMzhSMkxrOUtyM2hZZnZHejJqby9zOXh1amlJdG5sTzZlSkRxdWNYRlhnczds''@;'; put 'put ''WERQNWZyWjJVM2Y4N1BIbWcvKytWKzdsYWRxL0tjckEvbnoxVzNUWmZiZXJhNlE3cmN0b2V3MjcrV00rZm9JZXpiUElXMS9zOVBZWVhWcmVseU9kdzhKK01HY0RhSlZER1hsbHhjNWlqNjJCYS9odHMvZCtYc242T0RhTHVZRGphZyszWm9tN09kc0dHU3k4YlM5VDJDRjJ4Zk4vVFNrV2t0d1VC''@;'; put 'put ''OVdJZkppQjVNYnRocXNzTEtmZWk5TTBEUFNsbWRIWTBXRnhlWEZwY0dhT3pHNGFWQkJ5MlBvYVg5WVY0S3hsVitJbTBpZ3RlZmlIZTRDOXB6ZFdIRkZlVWxaUmJwemp2dnFtaE5CTXQ0aVZpRnU5aGp4WjJzVUV6T085MURlb0JuNlUxQ1QzTUdMUE9BNlZXS2llQ0FxZFZIOUlKZUZESFcxOENV''@;'; put 'put ''bVdXMjNXdXQvRnJtNFJyb1dkUVRjVldwWkM4QngxcXY1NUZDdDNxSm5rejlWbGhRM0JhNUFkb0VQNSt4MXRiV3Btb2JRd0U3R0UxaHIxRXN5NkVsdFlQTjVMUXFpQXFwTWxoSkQwVlp5WllrMXBXck9lcCtxeVN6VWdTR3kvbzNKclBTL0ZhR3pZL2xrMXBsdi9odTVndUZaRi9vNTF0OEtwN0xT''@;'; put 'put ''WGwzUU9iZEQ2cmFubFhhWWoxNmJJZTJGK1cyQk92bk9IMnkyalhXTml5M1BiMnR6LzViOGd6QURESVlpOUFCSnJrQllKNFdNQVVDR0RsR0FwVC96bHlPNTdVZ1Qwcmh6V3NYYkJwaTBDdW56U0dxVmpBU3RHZ1pOZ2draTE0djU5RFJVeEYrTVFWUENLTFNwM1pIYUNiRmFSTW0xZDFFRVVNYld4''@;'; put 'put ''UmVzc1VHNER5Y1RpZm44YXFCYVR6UDV2RjRhajAxWVhvaUgvTEx4elgrTFdtZ3lrVWdhSE0yeGJXWkRla1U5OTkvS0NQOVVwMVQwYi8yakNvbjlHT3Q3ZTFyWDkrUVZaR0xvYlhrWW1oSDRmOXQ5aHZzdWJ0eTl0elJjYlJkL0EwYjBYZDJhS3ZZZ2dMQWZKSFh5QUhQOTdFN0ZnWXpmVVdnaUsy''@;'; put 'put ''QU8zNkdUTFA3S2VPSkMwZ1U1WUF5RmZLV0xETWtnREh0V3VYWXplR25WVFpXeW9CS1BhSmY0VE8zekpHcUFzVmh6bFVWVEU1SlR5alZpb3lIbXBtSTRqV0c5S3h5aGVYS2hsQTllbWZHUnIyS0VDWmFzQjJJQVd3Qm1nbGZCdlJSRGVhK1JxdlRMTk5ncmJMajh1MDRMR09HU1ErbXJZSUtLRnMv''@;'; put 'put ''UHJ4ZEM1cW9XaFFPaCt2REVaZlBIbXIwQjFtWVY5eTBJdDJXdEZ2cUd5QTU5ZmJIMmNMY0luVzZnbzBwdU5YZ21VbS9rYjJ1VW5laHNuS2JGYXZ5Y2NFSHcyZDRTdTQyc1ZqOU5ySFl6YjZBWHZZRldLMG1vNUZhV1dkOWVVdGJuazlMYVdTRTY2eFRjbHZwWjdUT2s3Y0YyckdRVXNUdmZ3QjR3''@;'; put 'put ''WThLVVFOcVJmZGtIUFdWUkM4cTVRb0N2UTRFRFhINVVHZWlSeFNDWHJOcXdQbDZYbEhVTG9FYnJkWHkwKzBsZnJydG9aZDZiWVUyWXAzT3l0dWdUUzNBbVk1R2FZUTIyaHB0U1NVdERaYUd1aHEvdDZ6VWFhZVIybUt6WXRyUys2aTROZXYrRTlKMmNXVlZWZGdmTURncnExei8vWlladkpOMXZy''@;'; put 'put ''SzJocEpnVGFYTFZUWDZ0dEo1d1pkNkRZaXhpdkUvajFrZlhmL1VscmoyOXdDbWxQRS85N2VPZm96SHRPTHJlOURyd01NT251ZEFzSVBuZ1NoWGVmQWNJSzR6QTE2WGw1WEx5Q2R3YVZva3FYRHE2NVJVTGVabEhXZFBxdXNjZ1FMeWtHd3IwTnpaZFJqckJYWVc3YVc1NjA0SDBRaGVKakowcW8y''@;'; put 'put ''VlRYTkxqcU5ZMGtKVlJXbXgyMlVwMkRZdjFxNU15SzJlMFNINWpIcVl6cXpDYlQ4YzUxUExuMVd2VmNFc3kyTW1IWDU5N1kveU5JRm1hZm5OVS9rekFKQjN4azF4U0paakNuNndObGZIYTkxU3h6dDQrREJOY29MK1pvQUhQZ1M2MEFlMHpuZ0EveXYzbWVGNUJlT05jZm41cDlselZqdkxkSDlV''@;'; put 'put ''MXYzV0xmd0dISXJyaGZjQXpJUU00MElYT013RkJZYlg0RDZqOUFQOVA4ejBORmJwYWRyUFlRWXpJY09jM3dqRDgvbEpMOUJJQWMzNE5KdU1CbkMxQkQxUnFwRTNGZllXb0FKbnJyQlhURkVpU1R0RkorbVZHbmJ0V3JuMTFzVkZzQUVYYXZDSTlQUGVoZDRmeXZVQ1hwYVhuTTBVbUl5aWptcGdm''@;'; put 'put ''VDR2M1FRZmkrUjZ2bHhhY0w3RXo4TitVdzViNXVlZmRMTDdzekROQzVUSHg5N0pRMk5qaHlieHdScnBKYXdMTDRUeG5QU0RtdHlaeVUzS21Rbmc4UmZiNFJwODlsZGtuNTNhV2Zkeld3bjI3MkcycjNGWnR2SFk2aEE4dHhLckFnODRmU0ZuV3ozTVpIQmNsc0dmMzJHc2k3bjRnUDQ0VXAyVHRP''@;'; put 'put ''VE9TWTZpcDdiWVpkeHZ2aXZuNHg5ZFFOdWQ1K0RDeldjc2N0dXBmUHdCRjE0bTU2R0NzSDRWOXQ2R3l1bTVmZTUyQVQzSlhTOWdvS1hVU3E0WTg5VEs3V1V1QjhzcjVZcTlKSDljbkV1dWNHSnIzZ3pxNDZwOTdma0Q5eDg4ZFA4UzZaSEVZWHAwZWJxUEsvZTVqeTh1M2J1MEtKbnhmdzJjSFJp''@;'; put 'put ''NGt0OUZDSE1XL2gzME8xMVhDNXJLVExxeFhtY2d0QUNaaFFlQWhqUmF2V2JaYkNBNm5SSUtNSWxHUVJVTVNDYjlmb1NTTGNubXBwUS80WS9YMVVCM1huc2dGQWdXd0x3M2hsSHpNbDZsdGpXYmJEcFpoUXRsUEg3YWV6b1lQTk16ek5LYmUwNEhBeWU3RlRVdVhhUEtjOGJYYnFpcjZXeEtkZkhN''@;'; put 'put ''NTQ3R1ZEdlQ1MFNkL0l5dnBKcGQxdXZIMmQ2bVpQcjk0aGE2NERtM2RHK25lV3d1Szl0K1FLZkhHZjJtWkRxOXlPR2xuOUVjWFJtZVBvL21iSWpqakg1VE12M2V2TzFZWnhqOVRuUDZ0Zkd4V08wem0yZVRQTStQYktGOW5xdEw1em5ENTNrRXlYWFRuYXh1dWd2OWQ4WVZqNVdYYVhUNkVxekJ4''@;'; put 'put ''WVZFMEJTQXVhRFpQbGNBek04bDBQa3U3dmRwOGRaVGY5czJ1UUp2M1dyYlhJRzNhclpqcnNBMkRYbXVnRGtZOGRQMEhLL1ZBRjdGSlVMTm9iZFJIazdhcnIxaW02Q3orMzJybHlvWlAzNVN0em4yYkR4MHlSSnllYjlZem5VSFdnZmpDb3U2V0FYUml1WEFrNlcwNEZDOWM2SzhjNUdOT3llS3Vp''@;'; put 'put ''VkVLekJRUGlLMEpjbWpmdFBHdldXanlpMjdEYnZ3RnEzWUVlTjIyN2ExSGQ4MVU2QzJtbTJhSHZ5WlM1MFA0TGZLTE1jdkhoemZMc0VqdmhUZU1kMTgxNHgyYzVhSE5seTVjLzY1aWpmUEtyd0pmTDI0QTI5ZVZIZ1Q2K3M0YjlZQWI5SzdBcXJRRnpNV054YVF5d3pLd0VUdklwUzNGZ0ExN0tT''@;'; put 'put ''R25ueVNHMmlRVDA0ek11Z0pzL08ySE5oRWFCTU5QWWg1TzIweU5adkE1V09iTGEwME5KWUlKaDVNdG9vNjdIU2JxTmZwRlhmWUkrckkwenNPOEQ3NzFuM3dPT205QjV1eTRIcHkxeUN3dlA1T2x0ZmZnTDZXS2E3QmVxSFdTUXg2QnlhR1hGS2ZOa2YvV28zMlZpT0dpV0xEU1ZCY2dHRmFVeWdJ''@;'; put 'put ''bWdVZHJ5emt1WHZJZ3hRczFlZmI2QTNrcHJkcWxLbmRIcDZsQnFJanFtWUN4Uk9WMncyb25oVWJ1QUZUTkxLaDJZR1N0eFlndUNuaDQvZ1cyazIwNTJzU0FtWFZSWnV6Q0p2MW8ybDFtVUtmMnhoZzlNZnVwR0EwbXBacDlJb3ROT29GRzBaZ3R1d3N0MlhKeEJaN2wrY2h0T1R5RUk1dW80ZDRy''@;'; put 'put ''UHl1WEt6ODZBaFM1VEM4bk10ek1LRy8zNUxEd05xeTgyMFdsd2VZbTdmTG93QWI3QlBidG0zUHgvcHg0VzRrMzZleGg5Mm5FYURuTTA0UVJ3V3dyWVZBNHN4Tmx0TlA4bkgxdk5NRUxRS0JZbi9Rd2U4bll0a0VtOElRbTY3ZklQZU0zamF0dCtWaUQ0NGoxOG4zY0pEejdOWU5TNmtjYlBCNTNQ''@;'; put 'put ''ZWNWRi9Ld2VjNkFIT2RBNy9JajI3aVV0cFNySWRORVRFVy9GaUg2WmxORVh2aVo1RnI0RkU4TEFkN3krUktGMXBac2sxOHQwcCtUV082dWVxVGpTRmRZNENXdUlXOW9pckV2YlVTSlptTDRwSTVGa1JTMTZVY3pydXZ3YkxOQlNxS2t3aDd4ZTRLWWZUWXluTmU4TmdXT3VLMUtGUm03bVcwSUtM''@;'; put 'put ''dnFQSmN6aXA1THZEODNWdmE4ck9IaThyWkF4Ym5rYXJ0YWk1SFpnWGRzSVdPMkIwZWpOWTZaRnRyUzU2YlhQOUJhVzJCMjFyeWVTTnZ1NnEwQmQvMzJ6dTBmVTV1UytPQkgxYTFQWnRycTBkbmQyaDdVUmtYNjlzWTNiQzZXdXBQRjlJNEJNMUlwelU3TEE3QkNtRElBV3E5ZXhoUkY2SUNlMEM1''@;'; put 'put ''N2twVkRtdklsOEYrZmt2dEs4MGJQMHd1dnMyN1BOejBMby9Qeks3Mmo0LzFrWXQzN3Q2OWZSKzUraVNDYmdXZU95MVhKOGw5cEpPaXY2dHZiTHgvZFpaYzNMMzdUcm1QRVh3RmVRNzJVYzdHTnhLYWp6OWlBQlU1dEYzK2VBRXlCNFZjTnI0Y2NtSk95Y1BqbFkyT1ZHbHB5dEZZTVZGTFJxb3FV''@;'; put 'put ''ZzZYeTVHcXFHTGpUS0tIV0t3bHhNYTVaRzc2NWt4L0picy9IeW1SYXdsR3NFT29aTFVFemF4WGVtOE96YVpmMVdJQk9IdzJWd1FxdksyS0F2WDk5VGQxZFVVaW5aMFJlb0U2L1NJai9QZElWNEkvY1B0NGp2d2VRTG9iV1ZFcm0wRzBFQlpqb2RReW9tV1ZBT3hXR01EcExKT0VBbjB6d2F1bUFp''@;'; put 'put ''Nk5YRlVnMzhPdUNqTGYwRkhoN3M4RmxoOWhVU0czSEZMbWQ3bVRkbnc3ZVFGRzdtSGpwcDNRczRGVmFUa3dIdEpqWVpBZW1KTlpxazZCZmxlVkt6U0lNTUdNUXhmb1VLMU1ISWlhZk1vVnkvU0dkSzR5L2JqQVYyeDFtK3h1YmJwbzJzaysyOXk2dEdXR2ROcXNCUVVWWHNNNytFLzlEWHcvdXZC''@;'; put 'put ''L3NGb0lFWlh5aWdFdElHZUl1cmFuN2JaY0RZVmI5QWZsb2dpY1BmQ0JRZktLNDVZUE9kN0orSzVYK3RuNmsrdGZBcVlLc0I1SytGM2tHK3UwQXJtK3hJMlhrbC9nZ1UxUFZWVjRuUWN0V1FBekp4OXZVdVFqNnNWMU84akhWeFQ1aUhyUjR3aHQwL1lZZnZvdDJ4N0RYYXEycTdtMks3aC9pM3pr''@;'; put 'put ''YlovTHRWMUJYK2YrN2ZvZ1BjOVFuNFc4K1R0dVA3ejVPOWwraUFCTW1QbkdRekxNMHd5R3FHQjRyUDN5WEQ4RlFBM2J4OXBmeU1YYUM4YlF0am1RdmVpOU8raUdWM0xuMHIwSHVPNXRSUDlHVExqanJlK0JmMVdxd1IxelNodWgvVzIwRWZSdi9sNXAwNDAvZ3k2U3p3TE5sREY2R2RwY0VNZnB4''@;'; put 'put ''YTdFeTNsczlvWDhCZmJrOWcwMzJEUGJCMzhXZlpzOENDdTJBQVppdkxhTnhISzFiVEFtL21zMlpqbTkwYW04RU9oOFF5R1R3SVJhb0RoZ1l6ZEliUnhidStOVXNHNkhhVldwUHZQNTRVZklnMFZoUGo4MnozK0dlZHB5ODZSa29reVlZdkZodkF2V1pObXBMb2pXeGJPNm9FMTE4WSszK256d3I0''@;'; put 'put ''WCtleGcrZWVudlh2akE4ZFFMZFBOT2RCM3NQVGd5Ulg3NC9zK01ocTNBSXdqa1FHVDlkNW96cXIrUDBnWFVPSXQreWZNYzR4YXNMZVIvdmtTUGRXWnNOT21NNmo5NVlpK3dDU2FUc0dRMUZJa2E5VjlLU2IxRlEvWlhUM2hya2JZVzVMK1gwckp0dTIzK1lzcVd0dUNCTkkyT1pqTEtYMDRablIy''@;'; put 'put ''ZDJiMHJrODJNRFBURnVtS2R6VTNiL2hVVngvL2dyNmhVYmZvOW9JS3RhdnFULzhJS0hza3F2NHhFcGZQSzMxdjVLL29oOGFmODRaWDg1NG1HM0I5aHlmOHhGZ3pXZlJLWDRMK2pOK1k4QVFaenJLNEx1d0YzZ2Z0MjMzMzM3amRmdEQ5eHdjRnJXUUd1UW9FVEdGdzQ3UlpyUC9qQjNaLys5T0NG''@;'; put 'put ''Sit3dnZzeDB3Uy9rTzNTamFDSXpXdVloR25ySGdJbFo2UnBRY09CYkx4c3dNV0pzb3JVT3VSb1hNMHRPNVJFUStCNUZEWkc2MmhxckxRak9vTlVlTEtEQnE5eEZRMkh3RkZubVNTclpTZktWbFRSaERKRHM5cktRS2l0dlNkdzZOUGFlRmZmTUlORU03eTladm0xRUxta1p1TmFMSzZXWFlDR3Qw''@;'; put 'put ''dmNyYnNwT3NtdDN1NjhlN0M4dUFDWGVlMWs3SzJnWjYrb3ZLN0hiK2dkbVpabmxKUTU4UGNnNTNST0UxaERZYzdkN1gwL3Y5V2FHREpneUFraGRyOVZMaExVMStwWExYV2lSNzJMUVAxVmlMOUNTMkRaM1BXMjlLNkhsOENYdVN2amozaDJ2U3BCajlpMVV4dU9ZZk9idytWd3N2NFhxTHZaY2Rj''@;'; put 'put ''N0tubC9NUFJldlE5dkJvNVdyMU0vei9mZktmaXAvZmxjTy91Z3g1VDZLUGVSZGdBTXZpZ01PcW4wMkREalk3R01waU1oN1dJSE5LSGtYODdqVWFKRTlybldrUWc5M3Y5UUlrbDJ2ZXpmblByRDVVbiticndQODdVK3AxdkZDRGg4RlIzTTUvT2c4dTNOR29ZT2sxVCttM0I2RGFkNGJ2TmR1ZmE5''@;'; put 'put ''ZG0wRC9ENUQ4RWlJQUFBQUFBUUFBQUFFQUFBOENHK3hmRHp6MUFCOEQ2QUFBQUFEVHdaMkdBQUFBQU5TK3BPdi9RLzdvQkhVRHlRQUFBQWdBQWdBQUFBQUFBSGphWTJCa1lHQSsrZThLQXdQTG92L08veXRZU2htQUlzaUEwUkFBcGZJR3F3QUFBSGphZFpRL2FKTlJGTVhQdlY4R1JSeXNXRkZz''@;'; put 'put ''YXpIV0prU2ExdGhxd2NZMHhWU1RTRnRyZzBJWGNWQVJzYUNwNHVKU3NRNHU0dVJrRUYwczZ1Ulcvd3ppNEs2VE9FbFVXbWdvV0FyMTg5eG5JakdKQ1ljZmVmbmVlL2VlZDc0bnk1Z0VQNUtsV3FrZHlNaHJER2tCUWIySURpK01pRDdFYnF4Z1NDNmhud3JMZmV6WGNTU2tDVWRrQ2pGWmo2UTg4''@;'; put 'put ''eGYwSlhvbGoyYisxNldqMktYVDFDUzZOWTllUFlVK1BjdnhQUHJjODV5ckdZNXhIZktZckdLck44VzlTdGl1ejVIVE9VUjFsYnlHdEo2bml2ejlFV21zSWFPdDJNS2FKblFmQnIzVHlIa2VGZUwvczBnNzN1UHpyRjJ2STZRTEdMRTFBd2ZRcHZQVUUyelVXNnp6Q282ejVoV3lTNzZoUjBmOFh6''@;'; put 'put ''S0J1QjdHWHAxQlZuZXlsaG11TllhSW5FTzczbVR0T1F4akNZZXc1TC9YVHFSUXdyQjNCeWtiWjUwUk40OXpaQlpaS2FGRGJuQmVqbjBtME93Tm9VVWo3RzBjMjNRZGV1UXVPcVVGRjhpd3ZNSkI4OTN0T1kyWTFTZ3ZXRXNiUWp5THVLdnJOb0w0aVFFWmNPTlIrclhIZWRWQWdTYlMvRFB2cW9R''@;'; put 'put ''MS80UDVSeTVTWDczTkNGZThxNVVHa1hFMC82cGwvdEZubmxuV2VkVkEzanhwdll6OUsvcjJqdjZseUNMMVJhL3kvQ3ZlMWNweVlUVC9xbVgrbWM5RzY5ZjJyS1gxYnZ0WGFEbml1VmkvK3FEc3k1amJwekV0YTNiZVpkS3J6NnozRTczckpuM3lxUFhoTXNnY1dBNHRDMzk1QnUweWlIYnoxdnFy''@;'; put 'put ''WThqVkVLa3dzQUhSd0NidXk5eGFkdXJJTEZ1ZTZzaDh1NHhWYU9kakh2Mkg5ZzY0SE5vWm1uL2xkOEh5V0V2THVCU1lQZE5UeFBHZFBFRWxxRGZvMXpESDRDY3JhOWF5enRQeW5ySU1lTVUvOXcxV3FjZUF4aEh6THZNZWFTcmZLWXZrSXZrSUovVXQ3d3JlUzRFQzM4TWtnbFJZNS93ZkxoOGU1''@;'; put 'put ''L0pjRzN5enlQNEdqNWZ3dEFCNDJrWENYVWdhY1FBQWNMdXVNNzh1TXp2UDIzbWZlcDk1bnYvejdrRWlRaUpDSXFJbmllSERpQmd4WXNTSWlJZ3h4aDVHUkVRUEVTSVJzWWM5REFtSkVTRWo5aEFqSWtSaWpKQWhFaElpTVVhSWpOakxZUHgrTnB0dDhaKzg3V09YclNzTFVkQTJWSVRLMEgzM1h2''@;'; put 'put ''ZFpkd09HNERBOERMK0ZEK0ZhejJqUFVrOEpZWkFVVXJSajlobjduSDNWbnJjWGUrSGV1c1B2V0hBVUhBMG43a3c1dDUwbFo4V0Z1SUJyeHJYbU9uRGR1Y1B1ZGZlcHgrdlJQZk9lRGMrSnA0R2lhQko5aWk2aE8rZ3hXa0ZiZmMvN0hyMFQzbXEvM3YvR1ovTmxmWG5mbjRHeGdaY0RGVC9sbi9l''@;'; put 'put ''WEIwY0dsd2ZQTVJpYndoYXhISFllZ0FKYVlDV3dIYmdKTkhFS1g4Q1A4WWRnSWpnYXpBWlhnaCtDRjRSR0pJa05JazhVaURPaVF0d1M3U2VqcEpma3lBUTVUbWJJQlhLTjNDVDN5U2I1R1BLR3VGQWlOQjdLaEpZcG1NSW9pVXBTazFTV3l0RVFqZElFTGRDQUhxSFRUSnBwTVIwV1lYMHN4U3Fz''@;'; put 'put ''eGFiWUtiYkVmbU92MlJyYllqc2N3azF6MTF5TmEzRWRIdUY5L0E2L3p4L3hKZjZLdndrcjRYSzRIcjZQUUJFMHdrUkFKQmxwUkRvQ0l1QkNXSGdsZEVTM2lJdUthSWtwc1NGMkpFUWFscmFrQSttejlGVzZrbXJTYnhtUmNYbENmaWZ2eW9keVFUNlZMK1VmY2xOdUswNEZVK2FVVzZXdHdxcFhK''@;'; put 'put ''VlZOVGFxVGFtWklqL1pHaWFnUUxXcXoyZ3R0WGR2U2N0b243VVM3MEw3SHROaEJyQmo3RWl2SHFyRjdIZEpSbmRHSDlCRTlyYS9xT2Iyay80cVQ4V3g4TDE0SENBQmdERXlEWjJBUnZBWWJJQThLNEF4Y2dwK2crWitCR0l5Uk5tYU5QZVBJcUJvdG81V29KOXFtMjF3MTM1dTdadG1zbW5mbWd3''@;'; put 'put ''VlpxRVZZODlhU3RXNXRXdm0vYW16QVRRQUFBUUFBQVR3QVlnQUtBRDhBQkFBQ0FDZ0FPUUNMQUFBQWtBRkJBQU1BQVhqYWhaTE5Uc0pBRklWUEN4cUloS0F4THJwcVhMaVR2eWdZWEdyY0NHb2tscDBKU0FWaXNkQVdFMS9GTnpEeFFmeDVBamMrZzB1WG5nNjNDQVlsazJhK21YdnV1VE8zQTJB''@;'; put 'put ''Tkg0aEJpeWNCSFBJYnM0Wk5yc2FzSTQxcjRSajJFQWpIVWNTVDhCS01pYzh5YzcrRUV5aHFobkFTaGxZVlhzR09Gbm1tWUdrUHdobXNhNS9DcTBqcGNlRm5iT2daNFJmazlTM2hWeVIwUy9nTmFmMXl6Tzh4R0xxREE3Z1k0QjRlZXVpZ3k1T2JlT1JYUkI0RmxFZ3RSazNxdWtyamsrdWMrOHp5''@;'; put 'put ''bVh1TExHcXdtZWNwSnhlT3FNTGRObmxFN1RtNVEzTFFwSzdBbkx3YSs3akFNUm80SWMxejJaNXhXVnpIL0ZYSjRzcWpxcWRPYWs1Vlhsek40bnhGalV0VjJJRlRPdGhUOVpya004YkRXSlZ6KzU4ZWhYME51S29neDNFMzQrd3EzLzdFTmN1WXkzV1U0MHRXaDlHQXV5UCtrVWlUNHh6VjdLdDcv''@;'; put 'put ''dFRNemIzalgzdlJyUnZrRnQ5eTZCQk1PbGFUL2gycHFNbFJVckV5ejFaZ3ZJSmR2cGpvMVpSeFE1M05DZ1BwdjAxdm45bVJheDFEN3ZRWTh4aHp2Z0hGZllWakFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQ''@;'; put 'put ''RENNK1VKRUwwS0pIaEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpXeGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pO''@;'; put 'put ''ZDFMS2JQZXhsSDNYVTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1''@;'; put 'put ''SWNGRlhJakRHQ21TbkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZhcmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQ''@;'; put 'put ''L21TcjFTcW9NcFVyZ3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29h''@;'; put 'put ''OXUwTEhQMkQ3TGhiOHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJq''@;'; put 'put ''b09KMktEMXRPYWpSbXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQYTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25y''@;'; put 'put ''SFhhc3FXczFidEJySE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xBKzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZi''@;'; put 'put ''Q2N2WW52cUg3ZGx0eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhSd01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RR''@;'; put 'put ''Tkw3MFltQnBmTnJDbHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTlHd0FBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hh''@;'; put 'put ''cnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZhRUFCTUFBQUFBb3VBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY1lBQUFPZGtEQ2ZwWkhVMVZDQUFB''@;'; put 'put ''SkxBQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQnBFcThKWTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWhFQjhXWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFB''@;'; put 'put ''T013QUFHOGtIZDdZbDJobFlXUUFBRXRJQUFBQU5nQUFBRFlMYzRnUmFHaGxZUUFBUzRBQUFBQWhBQUFBSkFlUkJDQm9iWFI0QUFCTHBBQUFBb3dBQUFUYXVZNDBKMnh2WTJFQUFFNHdBQUFDZEFBQUFuclUrN24yYldGNGNBQUFVS1FBQUFBZ0FBQUFJQUtVQTFCdVlXMWxBQUJReEFBQUFZNEFB''@;'; put 'put ''QU42TWdpSVduQnZjM1FBQUZKVUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZmZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQldmQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUln''@;'; put 'put ''UkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZStYL3NWYWlubFIrZ1lJWVFoYVRvZ1RKUWdHa1k2MHhSVXhsdzFhTGJwbklNaGpESENOdWNLYzJBV0Fwcy9YU1VMUSsxMGtncXNDbmJXa1lZ''@;'; put 'put ''d1J0eENaQkxEb0RBR0ZhcHhNb1F0QnBWM3ozdmVEL3ZXdHRNKzZkUFRjKzk3MzN2T2VlNTM3Z2NCa01jNDFFTG0xTlF0UUJFOFBZaGpPUDRSS056aWJ5Ni9EeFZMdnI1OE1TcVhMRjZ5bUxOQmZ6S2F6a2pZOGJrOGhtTU1KcGpIWVR6cVhFczZHaTJ6VlNYYWdJZ1B5ZUFWZkdLVStRSXFQb0tn''@;'; put 'put ''SnQ1QURwaUo5ZmdRc1l5Q2NodWNKeU9sRXlVWXhKMmRqVHZpWitQRDhURU04Qk9mRzNEa1VML2VMbFQyK3YrdCtKRUJWM2h6d0pHakE0L0Urd1lZZVRZK0hyY24rSmovTUgvL2txRHYyK1BYNG8zeFJ1WjFMRE05Z2RuNkhLR29KaHcrVDNoTUpRSytRRVNZVHVSd0xWR0VHVVF4Y3p1VGxWcEpD''@;'; put 'put ''RmJqWjV5NWpnak0rSHI2ZHhLQ0Z3bkJId2pGUWNMak5jTGpHQkZ3aW9qd0JoSGhEQkhoTEpIRE9TS0g5NGxpVnU5RHJoWVRlU21UTWhSTHVaU1RLNlNDUElxVnpYUHR5VlRKZUQ0emlSRGJkN3BqdFIwNzI3RzNIUWZNSVlwUVF4VGpSaUtQK1VRSmx1TDdYQ0dKSkxKSUlvc2tZQ01lNC94R29o''@;'; put 'put ''aS93aWJPZndLLzVmeG5pQkpzSjNMWVFSVGg5MFFPclVRUm5pZHllSUVvd2k2aUdHMUVNWFlUZVhRUWVld2g4dGhMNVBFblF2Qm5RaXc3RVk0VEpmZ25rZVpGTFM5cWVmR1dsMkI1Q1pZWGIzbnhsaGN2STJRRTgzV2xYRWxPY2hTNGFqVXpOSUUxcm1adHA3S20wNW1aR2N6SVVpekRkN0VjMzhN''@;'; put 'put ''SzFuSTExdUNuZUpCWldNZm90ek9pNTFuSkYxbkJnNnpjTVZic0RWYnFMSGZ5dnAyc01yNjNJamxmK29DZHczMnluSEVQcHI3YXFidU44WC82VWF1TjhPK1pBVWZlSkM3MDgrVDVUenBQY1dmOHIvZ2Y4U005Snk5NzB1SXo4ZFo0NjBmL2RXZWZ0MmVVSnpqUmhKZ21GRjhoSEc0alBHNG5BaFlT''@;'; put 'put ''RVJYeEdPY2thaEJUZzVvYUZDMUVoRzFFWkpVV3E3UllwY1VxTFZaWFJSZmhjSnB3NkNZY1BpQUNMaEdSREpFaHJPdFFHVW9lSnNQSVNVWEZLaW95V2taemZVVVZyaUJLTUlRWVpFb1hVN3FhMGwxQjZWOGlza3IzRmsrVWlTZG5TbmNGcGZkbzNGdFUzcUxLV1ZTWGxaNXFQRlgzUzhUQXVrNmk5''@;'; put 'put ''YVpaTFVTWUtOZFpuRG5UcnpQOWFpSG1STVZhaUR6UnNtYml6eXJhV1JaeU1sbXU1ZHVUVDY4YVJqaWY5YnFOY1Mxa0pJMk1wQW1QTTVvbjhDU2VRak1qZW9hUmJPTnBiT051TzdqTHZkeGRGMnZReloxZDRnNkc4bTBqK0piUlhIR002VmxSYWgybFBQNEo3WExNdy9XMHhPenIyWWs2b3pIa2s4''@;'; put 'put ''ei9IbGtyNitWaGFaTE4waXhiWllmc2twZGxqK3lYQTNKSWpzZ0pPUzF2eTd2eW5seFNyM2t0MCtGYXFlTjBvbGJyTkoyaE4yaU4xdWw4cmRjNzlXNWRwTXQwcGQ2dmEvUWgzYUNQNmliZG9rOXJpN1pxbSs3V3ZmcUt2cXF2YTZlZTFHNTlSeS9vUlFjWHVVR3UzSTEwWTl4NE44bE5kbGU3bVc2''@;'; put 'put ''MnU5SE5jd3ZjN2U1cjdoNzNIYmZjclhJUHVBZmR6OTB2WEtQN3RYdlMvYzV0Y3krNGwxeUgyK2YrNnY3bURydmpyc3U5NWY3dC91cys4T3FMZkttdjhLUDhXRC9CVi9tcC9oby95OC94dGY1bWY2dGY2TC9oNy9YMytSWCtoNzdCci9Yci9jTyt5Vy8yelg2cjMrRjMrWmY5SHIvZkgvQ0gvQkYv''@;'; put 'put ''d3AvMmIvdDMvWHYrVXZBaEg4ckM4RkFaeG9XSm9UcE1DelBDRGFFbTFJWDVvVDdjR2U0T2k4S3lzRExjSDlhRWg4S0c4R2pZRkxhRXAwTkxhQTF0WVhmWUcxNEpyNGJYUTJjNEdickRPK0ZDdUJnaGlxSkJQQjJyZER1NXdYaTJjYTF4VThKWVo5eHFualhHalJtK3hYaUs4U3hqVzQxMVN1ejZ6''@;'; put 'put ''R3FUbEorcGNwVnh0ZkhjaExIYWVLZTJreHZNZjEwUDQ1VHh4Y3hUemNaVnhxWEd0N2hGNUJialZmMnpuc3ZFV0d2K1BvdzdqTnVOMS9XdzNKWEdidllTNC8zR2pYMDV6Y0FBTzZrM25xUWRuOFQ2eTE2NTZ1aVA4VlhqbmNhcmU1aDUrelQ4ZjFabWJudDRWV2JQdmV4TVRSdk1mNVg1cy9ac3kr''@;'; put 'put ''RnZ6TDRyay9uMExiMXNHMDNybS9VM21UMDN0VzFPcXBtME9tblVxVDRMZHNHZnpHazFlNmRiZVZtOUJZMTFtbjAwc1FzMVRYT1NhanZOVE5iZm1MRVBtZDFnTlRwcU9qL1ZvMEJxdGVQeWlVQmYveFN6TDZhMnpVbFZuZlduSjJoV1JqUFZtY3luOWc2ekYyV3FZSG5UU3ZNM216OVZXbFhHVHJO''@;'; put 'put ''YW1zbDhYL3U4MlQreTZHNHkrKzltWjFldWpiY2xLOGZQZmF4UzJUZk9MWnp1amsvQnZXY3FQbXYzVXZEZU5aRlpTVzZubmwyN2lsMHd1V0ZIbU1LYldBN1RjQTE3V05LNVM5bTNyMk5QVHpyM0VMdWpsbHZuSHNydlZiWHNRM1hFTU56RVBqZWNuZTVXZnZlcEp5cXRsMytHWGU4T2RxMmx2THVO''@;'; put 'put ''dGR2YmRIYjB6Vnh2Q3p2ZlhPdDlYMmIzYTJlSC9DTU80RnU4MFozRkQreFcyWVR6RXZBNE8vRm90RmhQYmVOK1JhNnc3MllSSkY1aEttekFQZVMxN0hZbEdNbDNqV2RFazNFMWR6MmJ1NXlIQlJ3OWFOcnRNajV0YkdjR1J6SjgxUGpIeHM4Wm43Q3NqVE83QkYva2UrN0Z0eVVuUlZJc2VTbVJ3''@;'; put 'put ''VkxhZDBmL0EzSUZvYmNBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtOG1XS1lHQmxZR0hxQXRJTURONFFtakdPUVlUUkRNaG5ZR2VBQXlRbUEwT29kN2dmZ3dPRGd1b2ZadW4veGd3TXpPY1lEUlVZR0NhRDVKaFltZFlES1FVR0pnQzhpUW9yQUFBQWVO''@;'; put 'put ''cTFrMWxRamxFY3huLy90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1''@;'; put 'put ''Y0pFbXFwRXVtVEpVY3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1FRldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcx''@;'; put 'put ''cTRlcVNUV3FCbFd2NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpnU3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktT''@;'; put 'put ''WmhPSkJ3Ymc0a2draWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhuTk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFC''@;'; put 'put ''VDlaUFEyRFpxbGU1cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1GSk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVo''@;'; put 'put ''NDJtTmd3QUxLZ1RDRElZTnBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowajBudy81Zi9maUErQU9ZTERncDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNseTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1''@;'; put 'put ''WXpLVUlHUGRyd1JDTE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FTVkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJi''@;'; put 'put ''NXFSb1A2NkgySkdzSzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hnaFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtY''@;'; put 'put ''SHBScFRhMkNhekFRT1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRRYjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tH''@;'; put 'put ''SHZLdThIRUM2QVEzeWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAyWWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JT''@;'; put 'put ''Zy84MXpPNHQxUUVGakExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0''@;'; put 'put ''QXZpME93dTVXUlhlVE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhRQlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2ow''@;'; put 'put ''YkdBVDY3T3pNUHEwOHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBTVzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNz''@;'; put 'put ''cG9wanNSUm5NZ0NrbzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgwNW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFS''@;'; put 'put ''b3ZOZEZmVnFmVlhXMkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgzN2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFw''@;'; put 'put ''Q0pXZURwa1BwdWRtdkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVFdWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENj''@;'; put 'put ''Qms4TEpxbVhxbURxQm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92''@;'; put 'put ''RjZIM2srRnkzZ0Ivb0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdReTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4r''@;'; put 'put ''U3lBVGZrOGdFKzZvbmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmRGekZsV2hWdmU3M2VsT3I5NWJVMmxxOVNkMnQxdEpxdGZaK1dtenRxMjFrMlJheXNDM0oyR0JiWnJPeE1lQ1FCUUloSk01a2c0U1FZekloWUpaQUlDUXpXU1loem9KL2Z1WVBK''@;'; put 'put ''d21UU2VDZkpIK3lURDRoazhtQW52NnRxdmRhcmMwNDg4L1lVcXY3dlZ2MXF1NStiOTJxUmlZMHZaekVIeGQ4U0VENXlJMEtVUUJWb1JScVJ1Mm9EeFhLbnE2T3RwWjBZeklhQ1pZVkZYanNOcU9PSUZOdFRPKzMreVYzMGgxd0oxT0JWRElsc2I4U3ZOV3UwbXYwTDcwRFYxTGFleFdHTlVnblUv''@;'; put 'put ''amp5amR4K3h1ZFhlZTd1czZmNzZydys3dTZ1dlozK2U4NnY3L0N2OTkvL3Z4NS8vNzlkMjNkZW41dWEva1BoRjkzKzBOKytMbGpvV0xyMXVBc3ZOdnFiK3VxMkgreXlWc3pkdXpZNDhlT2pkWE0rMnY4OElNUVFWdVgzMFN2a3d0c2JpRzVBbUdNcGhGQzFrRkVpRENqdzRMZ0ZZWjBPbDIremhx''@;'; put 'put ''eTIvU1NOK1pNQ2dGUE9OWFFtS3ozdUYxaVlQUytrdTJHUktLaUxGRmRUaTRvOWIrcjhaY2xFbVgrR29TV2wxRW5Qb2NmSmhkc0ZjaUVrRTJBMTFjUmZXNEZ2TndPei9XaE10UXZiODBYQ2RJTEJCT0VENWl4MFdnZHROcnlCRWt5VEZ0TXhHQ3dEK293SWZsa0NLR3kwcEppYU9Vcktpend3dk9k''@;'; put 'put ''OXV3L3FTU0dwYVFVa0FKcDlwdE9zdCtreEg0bGVwT1ErRUh2UW5RNmVpWjZkWFMvWjM5OHpqTVA3ODdBbFhuUHQ4N0V6K0RISDk4RkNEMi82L0ZkbjROL3V4NUhnSm15NWVkSUwva3pLa0ZCRkVNSk9SYUwrc3VMQ3IwZWw5MXNNa2hXUlBDQUhpUGNEL1BDQk0vQ0JMMW9xTlJ1RndCZFFSR0lu''@;'; put 'put ''QXBIMGg1dktvRUJiV21ndGNjcmhTUHVVdXhHY05XSzNZN0dWQU5jSUwwbkR1MSs5NzYrZ2NuNStjVTl1Mis0dXFkbjROaHg1Vmc0R295LzJsalRkR1JSa3J0dHU2ZTZuZC8wN1pnWVh6UzNkMWpHOTdUYXZsSzA4eXJzRE9hZk45YVVLa2ZySy93UjI5TklqNnFXLzEyd2ttZUJzazdBY2cxcVJk''@;'; put 'put ''OGRmTEpnYktjY00yTzlDV05SaitlUmlBeEcwYkNBZERvMFF6Q2xmQjdnWDVpeFNFUVE4b1VoMytDVEVXaFNjOWttQ0VCWk8ybkdnaVhKS3czNTVPUUdMUWdCV05vTWJkeHFha29PMTlhV2w3dGNDTlcyMXJZME5wVFhsQ2NxdzY0eVYybFJnZE5odDhGa3JHR3I1STQ1S0RJN2NMSWVzT2l5NGdC''@;'; put 'put ''TzRnQkRZNkJDZExzOFNiVG1mZ2RldWZlcG9XaDB1TFp1T0JvYnFzUHYzNk9FOWl3bUVvRmdkU0tBNTRaaWNMRnVpTjRLSm1vQ0FYcHhLakZhV3plV1NJekJhelcrYW1rY2Z6WWRpemVscTJOcFpTSXhXbGM3VmxQRElBYlQ4VmdUdllVbzMvaVgvMGplUmI2RXlsRWNOYUlPdWJVMkVTNHJLUzRx''@;'; put 'put ''TUJrRlVnNjhMcEFCeXRkNEJzVE9NNmdIWVdPWUFlYXBydmI3cXh1clUvNjRQeGF2RUNWUFRCOFJBeFdjZ1hKbkJyZThqV212S0hrUm5acVhUOU9SRGtlQXJXQ3FwSGhrYXJGenZxVnZ0TGlnYnJLaFlYdk4wTGI2dnFxUzZickU5Y29uRXA3Q3RwcG9tU2t6MlJPTDlkVGxqWS9WVHJWM1R3Y3JP''@;'; put 'put ''OE9Ka1VUMWNFM3pZTGgxcUgwZ3ZrOCtUbHJpZ2NMYTBvSjRvS0o2NlMrcDNXTUZ6Y0c2Rm9Rd2xYSDBMWkJsQzNMS05xcEJHSG54a0R0SVlPQ09GVjBoQmE1eVIzeStDUEE3ZnZWdzBGZFo2UXNlN2tXMGo4YmxxL0FZK1FyS1ErSXplWHBjRzJNcUp1MWxzL0JLbjF0Y1BKZ1pIeDRleit6Nitk''@;'; put 'put ''bXovekxldGUzQ2tTTlBiT3RtYmNQUVZ0YmFTdENXWXlHUzVnZ0tUd3dQVDJRT1FnL3oyNTQ0Y3VUQ3RxNHg2T1BuWTZ4dEF1L0grOGpmb1htVWxodG1obnFhcWdDWE1JY0JBV01kUmlEVzh5TFc2OGtNOEs1SEQvb0hJT2VtSnVXT3VwcUFQeVpSUm9TQnBodlRvZ1QvQXhYaENQL1lDQlRnN3lt''@;'; put 'put ''bHZCNXZLZmF5enhvcVJLa1JicVhwUnkrN1lNVVNKU2FGZEx2Z1U2QUNPa2pnQ0w4Z0JsNTBtVVdTVnhCdzZZMUdtMDV2TFlpV1c2MmwxVjZyWG1jM2lBWnZoV1EzRTlIc3lyTzZURmdVN0M0aDRPQ2dCc2xlclM5d3V3cHFYWkloQjFvUXNRbEVZNy9ENGt1VTVoczlmclBPYURTWUhJYThQSk1v''@;'; put 'put ''bXZLc0JvZFpNcGgwMW5MUlpzZ3ZUZmdzRG9mRlZhc3JkT2M1aERJVEJUWWE4bldtZkNJYWphTE5vck1hRENZTjNsMm9xM1ZaSEJUSEhXaVdGSkkyWkVaaE9ZQjBBdGJ0QUY0SHpZRUZkQURVQVo1R2dPdGhwc1J0b2xRVXd3RnFEVlBVS2laSjRaZXUreEw4NEtJWFhsajQ4cGRwZjVubFJmUUw5''@;'; put 'put ''RUZrUlY0WnhvOTZOWjREd1FrNktNK0JTRlRrNEhvOFlTbXJUcFNIRTlYSmF4TzFOZVhsaWZiYXl1Mk50Szg2OU0rNEEvZUJ0QmJJYmtRNzJrSDVBa2FFWUVRMjJwblQ3L2JYNFR6bGo3anZFT09aZHJDWlA0SG5tNm4xcDFkQUMyTHN4WlE3ek1nVUZJQXJjaTNrSWRVNldyS1dFUy8vWnZrNS9C''@;'; put 'put ''M3lLM2l1WGJiU1RzL0NzMi9nRDZTcURHODVxNXcvUzM3MTlpWEU3R1hkOHB2a0h2SWlxTDh5RkplcmdCdlpqTG5Xd0dDbzJRQnNOakN5WmJiU0FnL1RrMkI2WXJxMWVwQ2tHaExBWEZTd1N1RkpocnVIaCsrZW5IemYwTkQ3SnV0SDQvSFIrdnF4ZUh5czNyTDdNL1B6RCsvZS9mRDgvR2QyTDNa''@;'; put 'put ''Y3YzWHI5ZTN0OUxXRDRZQVNOZzB5THlLZlhBQ2tGQUJmQTF5clk1eVBoK3hPaGpvcGtrN2FBeS9lbFB6Ni9sT2tiSERuMmFWeHhOckhZVkpobUU4Qmlzb1Jzd21tQTl4QXlBQkRKMU9IMUFHWlJzd0cyYjNCc0U0cWlHV3dwc1dsU0tPcS8vSXhrS2Q2U1c3Y1VwdmNWamsrOTJEUGRabit5ZnR4''@;'; put 'put ''V3BIbXZwdmNIcXRwcWFzZGZIZmpOUjFiYnU2K1laRTl1eFJ3R1lWblY2R00zRlpZQU0rcHdKakEwMkVJQTlTR2cwRS9BRS9XelFCendrQVEwczlRSmVCbDhsK0ZLb05CZnpBa1NZVkFaYXBra3ZYTTdraXBwS2R4N2ZBa0ZlMy9lSGQ4S0xRMzNkNDMyRDg4M05IWDExUTNIaHJZKzhtKzY5djdX''@;'; put 'put ''dHEzeXpjTVdUS3BpYXBFVTNXaUJoL0dkZkZvS2w0MWRLSjJSMlBiaE4yNnZiTjFkd1BuZzFKNDJRbDRONEcycTVhakZ2QTM4SUNvaHpsZ0JIN25IS0NPbWRoODNaRFpiTTR6NTRGTU9XeDByQ0YvQkNmdDFQTU1GR0lCbjFZZXQrQ3Q1MlptVHYzazNDeCtRUmsvZEE1SUdGRit6T2tUQXh3MXdI''@;'; put 'put ''T0tLWTRjb0F2ekxFU0F6ckVlQVk1MEFLRUR1eTRJWkpvYjlkVTRBZyt0d3U0TUJoaU93UFZSTVZRaFJhZ3dTWTFaYnJ6L3dNRFUzbzdCb2ZhUmpoMG0vTHp5VlJIZUxiUjMzVEppdVhacWNrdERTcTRONHVzV240b21yK25lZW0wTHgwRXRqRzBBNk9kREVkUW5iN0VCRHV6QVBBVllKNFN3WHFj''@;'; put 'put ''YkVFR3g2UFNDYmg1bGphc0VZOU4wUkhFeGpEQlNIQTc0b1l1aVlDaHNBRDhOcVNPaWVvT3BiSWxMaVFRZkhGbTI4eVR4SXdjN3VtN3N2L2ZlNFh0Mkh0L1ZIdWlPMVE0bGRPVlhOeGc3L0tNdGRZUDVCVGZpTHpYczYrbysxUGFWVHg1OGRHWjRwcXlzZWFFN1ZLVThXdEZjbnU1TXhqOU04WnVF''@;'; put 'put ''aVFTWS9KVEp4V0JvTUpNZXFuY3c4NzNCMXdWdmh6cVEySi95dTBFaFBLQThqUCtnL085N1NmdmkxVXNYcUg4UkJUeDBxbmhJb1I2NTB5VVMwSzREVXM3MFZTMWhnT2xqSUJEVEVwV1ZGQU9WcWNxR21tcUtoNHB5aW9lNGthcXRqVHdNRlRNNTNwV1h2Z2ZiWkNYVXgvalhrMXVITTgyZFd4YTd1''@;'; put 'put ''by8zZERYSlE3MG5CK3RHK2hzYiswWnEyOGRqWFJDd3hNYmJMVFZUclcxVDNvTFJwdWJ0OGVydFRjMmozZ0s0c3JNR1A5UVlyVXczVnNVYUJPVlNVN3kwcG9pUW9wcFM2a1FSVkE5ekhGcWhkU25RRitpdE40TEFHZ0JyT3Bpc0hzUlZUK2FCNlFXWW9TQjRCblBzZ1VacmZ4bWRZeWdZWXJUMmNG''@;'; put 'put ''Sno0UVVyVEQrb2MzYUE1ZWJhRVdqOTkrdW9MRFBxTjFNeVYxS0NreGRYVTVsVFhua0V5TXpJVGVmQTdBV3hnRzN3VXQxTmRUVWJYaUVQc3ZROHlMSllFTEo0TFI2SGpSa1JVWFV0TkNOQ05qQW9GZXBmZkVTekxNcGQyanVJdlppZEpCYUl2ZklSc2t2SURvaTZGUm1md3ZoNWZPdVR5Umpsd3pU''@;'; put 'put ''YVRrU3lHL2hRZkVZazREczVVeUYzSG5hbjhTWGxiL0JCSEpuOTBkeUREODR6dWV0QWo1RkMvQ2ZnUEFsMURENVpCbUdCQTFFdlZwalY0a1k3QnMrL2dISXlqZVFRaEJCa2g2cklpVEE4OVJ5MThGU1RVelZBLzNmZ255b2g5dnVuaFpNTE1KNCtHSTlYRzQ4QTQwbFg0NVRlcmUvREIyRThsNVM2''@;'; put 'put ''Rng5OGNPNUhzeitpNDNFdXY0bGZBZDV3SXo5cWwxczBubkFDK3d0VW1nUWRFZzdBeUxqelJyVmlWa2Q1UEI2L3B6emtEUWFaYm5TcUFpNUZWcmpldlNyS2ZXSm9iMGY5Y0dkLzlRMjluZnZUOCtQSHZCcnU3OVkxVjRZYit3YVNyZlU3Rzd1dmMrejVQeXNCTUVIeDVmY0xXOGdqU0VZajZKTHM5''@;'; put 'put ''cGVYQ1FhaEd4c05EcXd6dHJjUkVWaVlSMWpWRVBmcXNIRVMxRGhFVFZTN2lpYnFFdTVEcXVZQ3ZXQXdDRE9nZE8wR0dwWlYwVWdPaUdFd0NvYjVkMnlzQjhMVVVUVXRJUDM4NXEwa1NaeEVvaWpOc09hakVKQVZkQUlUZDQ1MER2ZHRoVmxrd3VGWUtCZ09XeVRmT3RlaWdnWWRXUVhxOGRLd2hB''@;'; put 'put ''dFNQY1Z2anRkUnp6eDcwQ2daM0xBaWJaMFg1aGEvZG5UK0MvdWJkOVhWdGx1S1J4S0QwNTBIVzJxNm5aWjVhNTdaV3U0cmJxaVkrc1QwM0JmbTlqdzQwM1lnNVdvKzF1M3ZGM0VpRnBIRERkRWJEbnhoN3NqWGp1MTllSHI4V0ZNc0VvN3RHK3MrM2wzbGJ6UDBkVFNPMm9yTEtyZTM3L2pBOXJr''@;'; put 'put ''bkR1ejV4SjZTOHBLZ0gzc25NclpZZmF5M3FycVIyeFludkx3S2Vsa0NDeHVUSzQxWXg0SjdIWEMwRHF3cnRYVVFHVkFQeDhDY1hlNnlGb0IxbFZnSUdqRmpVcXA4c2VFZVhBWS9kOCtlT0hIcUZMbXdOUDVyN0ZmK0JkQU9VUWQ1SC9TZkQ1NFA0MXJRWC9BRUVlUkZyeU42Nm5hb0NSZ0pjOCtZ''@;'; put 'put ''UHF1bzBHNHJMeTMwRi9tOWJsdUJ2U0JXYm1DT0tjTzhwcC85bUZuWkdIWTd0VGRqZUx4MVQ4TnNXMWZUL296eUdaeE10TFltdm5ReDJkbVp2RWd1eEVmcjlqZVU3RzVxM0ZHTFAxSVhDdGM5cnZ4VE9oWkwvd1BWQzlXZ2R6OEdzbFdDR3VRNkNPTlJvUmxzYVJHWVdSQXRWWDk1VmlXSjRFSUpL''@;'; put 'put ''ZzZId2pSSmxHVU5qMlpIYyttT0c4L3YyM2QrNzhDN2sxUGxVM1VkaDJYNWNFZmRsSDluL1hzR0xMT2ZuWmw1WkxhMVlWc28xblZFN2p6U0ZRMVBwRm9aYlNqdXZzVjhIemVMSkxLb1lrRzBpaXFMMmVVd3V5M3VjTG1lb2toanpoZ09xVXdZdy9heE40NCt1Vy9mazBmZlFNdDlSek9abzMxM2tn''@;'; put 'put ''czdQN2x2MzRNN2o3VWU3TzVlYUZXU0ZBY1FtWUx0dVFEcXVFYU9henFOS2hEZE5PZ1NhNjZIeWp4L00wOURVWDNpVnZXYjNlLytCN3hQZVJDL2Qra3RvaWZ0NXhlZldTUVhGcm1QcGZWdlJGVnlXT3NmZUUzSGV0WGNBTGhoUkViYU0rVXoxck05b1BWN21uYjZ4S0x5T3UrVTArMXZnVzUrMUNv''@;'; put 'put ''MzJZQmNkdkROeTdBT21BdzZwbHBScjBPTXpWYTBJbk9Sd0M5d0F2RUNQQUR6MjNOTTRub2lwZ0w0WFRoVWQyNXc5dEY5K3g2ZEhmcHczVlQ1Z1dUbU9sbStMaE1aSzM4TW4xVCtOZG5PU2RtV3pKS3l5SHRhbS9kSEdWNGpjbEQxSlErQUQwdm5UUE5KK1dndFBqR2RNZndtNFpWODlMVHl0NmRQ''@;'; put 'put ''NDBrcVZqaWsvSlJjVUg2TkM2Q1hmbWoxTFpiTHBIbUluRmlFaDNFUWlQUnpZUVJZTzlpT2Z3SllHK1VrNXZyakFlNTd3ZUJtQkdBb0wwTzlEZVU3UXpwb3Z1THF3eWlvdUQxNXVtSzdveStTN0R6VnV0QmxrZXNuZ2pYOUxmZ2xwYTduY0J1bjd5aDBkWjdOczF3dU1ScjBCQngwUElCWnhremcr''@;'; put 'put ''VXludzhIdFlkS09rMFljZ05BeE1Ib2FWMzlNK1IyT2ZQejE2ZE13dVNmeG1QSkQ1WFpjdWY4ZmVML1VxU2lGZnZYVWQyU0RwcjJocTVHR09qM1MyKzEwMENIZ2xhUWRGRkxnMUNMdzNkSTNXWHVRSThHNk1pNXBnM0c1N05xNGZCQTBCT3htb01EWTZkZGVQM1hxOWRmb21LYnhJNEQ4NzlHL1Nr''@;'; put 'put ''cnRrM3lSOFhLcDdKTUlXZGVqSTlzamhpRUZXSC80MEtsVHlqbmFYd2wrSGZwN1hTbWhjazU1V1BudmlIVzUydGw3L3Bwcnp1L3RPSlRKSE9yZ3VrZFZPck9Qek14OGRuYXg2MGluZktTTGN5elRPNVJmajdQOGxwdEdxekFLRUZVQjA5VEZTckljcG1qTmN6bnkzRmEzUFZ3dTBrUzVQNnQ3M0lH''@;'; put 'put ''c2J1N0ZzZjRidTd0djdIL2lOQzdwSEIzdC9EUzUwTExRMWJYUThpdThxNzJob2YwMWxJc0RGL1h0NVhxYTdDWjZnZWgxb1BRRUNKT3pnWTB1SjJ2b2Ryc2o3bkIxT0VKVk1OaHlyeFRKRldNWWpTNGRTWHNiVjJHRktNR0tMVjBETlVmYjltcm9VWDdXTXRXMUo1REZEeTY3TnQ0MkxBY3JzM2g2''@;'; put 'put ''bzJwa2VLeTFlejJlVGdDZXJEQ1dwRnliUitXYXhvclVkQjRBUjBTTkZVV0JNTEdFSWJ2dFFEcGs5Vk1wOThiOEVZaE43WDdWLy9LcWNYVU00OTk4NXE3VERHMjdocjZnREg2YVllMVh2Mko0RzE0c2VKUGpqY3RHMmZLZlNDLzVDcXBFZFhMQ0M1RmhBVmdzUkhJeFJqM0RIS05WaVNLaDZpREZH''@;'; put 'put ''QlZ4SHFwQ2FKTWdxM1FmaTNwVXR2cjl1WmErK1Z2YmUveWQ3V056clpsanZTTzNOL1pVSDBnbU8vdDIzbnhMKzQxajV1YkdxZW1HU0hHZzBPcXNIdTVvbldtc3E5a1RpYVpDbFZVdTM5Umt4MHlLalRXb3h2S1Nta1BKaG44ODZhRzZ5amdBOFY4QUpBYTlTaHBlUFFYaDM2SXF4LzNBSTQ5Q2Uv''@;'; put 'put ''Qi81VkkxRVk5eDd0emN5T1VLdWpTRFRCVVhEM2cwSFliOWQ0K2NUb3duRzhZVHA0YnYzbWtadVdjbnZsczUyYlNydm41WEUzNjNjdFBPZTBZNFhsMHcxbjltOFNvOFM4L2lWZENhcXNMa1dnZGNkcTUxakRRYjc4UGtuNVZmM0tQODR1NmYvSVRxWFBqOU16R3l2Z29SMHBVeWVZSytURlR2ZzdL''@;'; put 'put ''Z2F6L01sTFBKZzdadzJQVFVrbElGQkQ5Q3dJd0RoZS83MENQdi9jeUgzdmZqMDE5NEhCUzU0c0svcGIrZ09SU0Y4SEZDN0VFK3ozUWI2RWFqQ0YwVG1zdWxmSWU1YVhFNEhIYUtWeGhsQkh3MkllbE5KL0ZqYVBuRHp6NzNJYlM4Zk83WjV4N0FPNVhQdmZrbW5zUTczM3dUK2pTb2V0eUFTdVFp''@;'; put 'put ''a2NwZlZybXBrYnFETGZVWTJVaEJzK0VDNVE4Zit1clg3bFArN3huZ3dNZVZpeml0YkZNVUxlNmYxbXcreGVOSzJpc2IrMmZUWGc0N0cybWFwd0RBOENmeHJjcjdRWjIvRzU5WitxY1ovTFBGR2FXQzIvMkI1VnZ4Q1BrK2o4dzhHMFJtdGl1UHpNRE91djBEV1Bmd3c4cmI1UHZibG5ac1k3aGQv''@;'; put 'put ''dmZsNS9DUE5zbFpDdUQ3bXM3aVhUeGxTZjJRVzNIZDZ2SFFsQVViRDlNRDZuaTBiQnQxNW1qbWxZNEg1WTdIQzhZaUJYNVU5Y01QWTUzeWRqMTViTnZiRnppdGEvQ0QrTXVjSjU4UzkvZklIckFNTEFzSkk2TVoyUnZVRE1wVEl1cHhKcDJVM0JjblA3NzcwS0Zkd0R1Ly8rWTM2WnlVNVVOa1l2''@;'; put 'put ''bEZlR2c1NjJPVEhERHRRZ0lDRUxKOTZRdGJ4dmp6TXlTRHcrUVZhT3RsYlMyWXhxOEkzZURBWUl6WVU5UGVRR2J4eGgzazY1NlA4dmdpQWpKTGlKM2xNMjZYdllWWTBCV0FNWEZBRkZCV1NrUTlzSVNvaDRqUUJTZ3JCM2k5U0dpNEp1aG1hRHhRT0dqQW9vaG1WRmIyZ2Z1MEhvUUtKSVBUL0xv''@;'; put 'put ''cDJhMmxRWGlxSnhnT09JMkFXK1J4QTNKelRZUlhEWU1iYVI0a3BhMlg0YnR2dWJsNEtwSGVXZCs4dDZXdnY3MnJZeVI2L1Y3cnFLbGxTMEp1amhQN3pmdVVpeDJCU05WZ1hmMUl2TmhhM3hQWjBhaTBKU0l0cnBwZ01LNnVNNU5ac0djT1ZJcCt4S2RueXNjNndZU1JuZ3o0dEErQWhvRXBmcnVF''@;'; put 'put ''TXNsZ05xdFRxS2J3Nk5UQjFQazRWL25YQWxHUGIxV3lUdzJVL2RyYTQrYUFBSk56VzRzb1ZzRk1RVHpzY2tLTTZDeDFsaFI2WVRaMnUzTk4rakJDNWNmT01ra3JLNDc0K2NQdDdZZDdtdmVVblR4WnRxZTVmUHYyVG5saVFpYjJMYmVPakp6YVVsYzlRVjVVL3FPNlRobTh1cjkvZXJxLy8ycmdy''@;'; put 'put ''MHJBbVI1NDVYSXhXT0htTVpqbnNqSFlIODhNRGQwKzBId2dQT0h1S0kvMlJlSEhuL0ZNUk9iYUxBT24rL3BPRFZSSCtncUtxNGZqMWNQVkpZVzlWUW5PdjNFWTAxYVZqbCtUVFhhSWp3VkdRcFZvRkh1TUlDeTh5Q1ZhL2dyUjFnSXhqcFZZaXBKenJFWTBDbWk5TENBam1ucVhRak5kdHhwbVBk''@;'; put 'put ''RWM0WUNkRWcydjRYNlAxMDV5aUVhMkFxMmFlaGpsbXZhVVRRREJPb0Z3NU1XbExXUHgyaTJuUmtadTNWSWJ4K0xTdzFtaVpXVThCblR6QURGa3VaMVFnbUhtdGVsQTcrcklnZXpvMURHcjNPWDF3cDhTYjNGUklUUjFRelJHeHhqazVNcDE0dnpVYXhNbFB4QVY3eHp5RFB0dmFSNjR0WC9yTGYy''@;'; put 'put ''amkyM0tTZk53dW1FNEQ5dk0zYW05cFo2eFFQWFdVeU5EdDI0ZHVuZW1zUnR2YVVzbTI2anVBa2NiTDVEL0FZODlJNXRzV05SRG5DaFNLbElDRlNOUjFNK0F4MWJBa2gxb1dnZjBzNnZHenNkckNMSXdubzFnNUNJSVFrUlFUZlByYndJNVRLRUFXK3lUSkI5WWVPcmQyT2x5SDh1MmFmN1d2OXg0''@;'; put 'put ''NDgyRGd4TnlTYXNuWVBUbGUwcUkvb0N5RjMvNlFHUG5kbzl6eEdpcUtBSmNSNWUza3c3QWRSbUtvWTl3SG5TVVlyMWd3MFJjU1JMNzJFWGQ2b3VxbmlrSFZRa21TQ1R6TUJsaFJnS0c1dXFCa2NYSnRHd1doR3BZbUFjRlJHdkFRTXVXbHlOVUhpdVBob013bnJKd0tCU2tXaGJiVmNYQTQ4ZDJ2''@;'; put 'put ''SnJsVXF0WXJnTVVRdWVObGRXK3F4SkR1OHAycDdzT3RiVWQ2a3BmWFR3Mk50YlJQamJhUWZSS2ZkZDhTN2hzcXJDa3A3VTdtc2djN2UwOTJsRmJOYXk4YjZ5alkzUzBvMk1NNkFzZU9TbGg4Y1BSWisxMEtWc2xyUmN4MFlNck0zcG1MVWhXTkt2VTI5YU5ic09kbFlzczg2TGVBV3JtQVFKY3lH''@;'; put 'put ''bDNCbHcwUlVGVklSQ1V6NGtHN1c2WUtENDNXWGRUZTIzRHdNbVRCVmNsaVQyNXUwWDVFcTVMZFhjbGxKZEFvc0xWWEhab3B1ZmI1R2ZnditXanJYeklubXpDdklCeWtGMzFqMzB5K0tSd0N6eUkrWnpMVTlRMXliZm1XVmdXWGI4bWl5NkJON0cvcXFxa3VLcXF1T1BrU2JJdFdremZGa2RIbHQ2''@;'; put 'put ''aXoxLyt6dktJK253ZjJrK3RFaEdzb09PeWtxSFBHWXNnTUpiVzdSVUJLejRkNDNvRUFBSmlTMk9yYjRJT1lobCtuNlhJNjNIYTJlaWtkVG4rM0J5RG1CM3BZcU05MytTM2VrcE9idXRhR2ZMYmI1a04wenF4b29pNGwxN3IyYkdTRzRnQjNjMW81a3RHRml4cWxMZHpVMG5IaFZmUjNNNU5ZKzRO''@;'; put 'put ''b0RZRTNkUHM0Nm83VTFQUE9leE81cFZpNmxBeFd3Zis4MVV2My9kQS84bVRQNzhmbHlxdnZUeDhCMWl6SFgraTQ2RVZHbDhsMUw5cTQ4TXdVMTlVVGN5b0F6RG41R3A4N0pPV3pKdWErdUpLOHFZYjZBV3FsODhUK0Z2WUFYSWZRRmM5VjE1RXNCNnJGc2hERlk1K3hpQ0pnbDV2SDlUUmxXVTJK''@;'; put 'put ''ZEJJOEpuZUZlRXVFY1hDN00wcGxpNEtvSW9BOERCd3NSSFUwbG91WHMzTzliVFNKa2wrTUZsM2MxTzhQbk56VTNXZGZQS2thNmkyY2JMQXVhdEY0KzlVc3JPOVJ2bW05cGZvdDRiakRZbnFGSjlETjVOUk84ak9PTFdrV0xDQVh0SXNxWk9GY25xcWpleTVVc2o0YXAxOFhsWUlwVFZDV05zclVp''@;'; put 'put ''bXN6NUhDcHFqeUF0RnZDVEZmamZvZEV6Q3VOZm1Yd25mTXYzZ3VuMytoTHNlWmdRSDJHdTJMeGNEcDZJL0YrcU9xd3pGd3FxL3Y5TUFDK0J2eDRXcnVlSENkc0JWMC9DeU1oL29jaDVtblNFeTVQZ2Z6QUVTQit0VTUzaHJGa3BON0NFdzdySFVrYzJDdTBLbHovN1ZPblVLZW1samwwMUgvYVR2''@;'; put 'put ''NFQzd3VaMVEvbUR0Um1QdkI4RUVRVnZ2QjJla1Y1dmcxZzVweFlrNlNmWTNMdFFybXl0MmYxSlc0UC9xbDBiZFgzSjh4WlhMRis4Rm9LN3ljSUZTOWRUNXJac1VKZkJaMlppbkJEZUllSy9NUjNCb3pyM2l5MUQxNERoUU0wekNPeHFSYms3a2Z6MmEyelowOGlmOVgyOEt1QWVVdG90L1BaYWg4''@;'; put 'put ''K1UzOEEzaGVKZldSUGZCQUwwVG40Q1d6SlVBMTVWTzRVY29udmlibEU5NGc0MU9LdmFXRUt1WnYzNUpJYjlzVlN0U2xNOFB4dXFubWhybDRNamhjNFkrNW92R21nZVRSM1phcTBJNjJrZ0tmTDk4V2JJN1hEbFQ1UzZhOEJZVnVtOXVXbDErUnFSK1lvajRYakhXQmZBaDhyaG81N3NVaVRUbURh''@;'; put 'put ''M2lXMmhReVRSY3hBQnNRM3UzbDdpQnprWndWMUVjSzhYVTF1MW9UQmN4SUY5VWEwM2pCMDFvaVR3d08zbnpqalNXZWZKK3h4T25aM29tOUIrNjc3NER5SDBVVkppT3pDU0RQUHFMbmVzYVo5VVpWUFFNcVJyV2VPWEdsVjd1cUdvQ1ZVSkxyR1ZmQUZXRHJFVGs4UkcwV0c1V2QrS2g2YWRLVURY''@;'; put 'put ''RE1XNkJhUU5uZ2Z1VVNWVGE0VjYwaEF0OU5yOVVRYVZrVnpVKzBPMWowN3VUcEg4Y2RIL25RblQ4OUR1N1BlL0V0MUZpelhJOVFDKzNYNTVIc2w4OGpGWnc4Zkh6dWhrTW5uemh5NVBvajBPT244Q3o5WFhvTFg2TTh0Skx2QW8rVDE2eVpKQjNXMFpRWHpTcEEzd0xKV2FSd09CeDZscnlVQXM0''@;'; put 'put ''SVRTWkpUdnlSMjg3YzlZMFgzbjNUVFhlOThJM0hIOGVHcFljZmZsdjVNK3QzZVlnMFFiODJXcjFqTnRBaFUyWWxhdGVVVWZmU3Nmc0VkZlhCNGN4bDFBd1cyQ3hFNlFQdDNxSkFXY0xsK2VrZGYzUGZiVDl0dnVXTDFyeWR6b29FTVNxMzRUdVhYcm1QOFBwR2VIa2RucmRKdnNtK2FiNUpvdm1t''@;'; put 'put ''QkhZb2IrTEhzZkk3N0ZFR3AzRG5vU25sN3creDNPWHlMbnlZdklEOHFGSU9GYkI4SUZocTNPY3ZwM2xnbXN1Y1ZBVWJvMUc3aDlwd21vSk1nM1pKZ2JoRlFOSWdyaUZ1TDF1K2xLaW9TVGgvTm9xckcxSnhITnU3emRUYzVNYkRrVEIyTnpXYlBoWHRhenBURXgyTzF0N1czRmRwR0RaNEkrRzdK''@;'; put 'put ''b3VzNmVwM2hhczhobUZPczdubDU5RGZzZnpVNXJWODRFZk03ZHlwMWRWaGlOVjI0ZXZaUEFBL0JwWS9zdVVUMU9mSGpFY3htbFFyMGhBZXBTWG5SSExGdkdEWElnMk42VEJNSjRIQlpTTXdBUS9UVlY0d0YxS0VEajBVR2FKRE4yNmJqZUY0UXdQTWFYYmJsTUZURlg1WGRkcGFOSGxYT09LRmVW''@;'; put 'put ''VDJOZDlXQy9PcU9kUFVGNVdXbDFFS1IvQjkrR203aFBNUVVYNkRqRThoL0x6eUcxYXRRVzFoei9KVjZCZE12K2F6MVRNNk9HcVFtVlBPRW10T3VtNjEyZ0ZtemlVdmlBVC9Kdm1NV3JyUWUxL0pkbUxYcWhXV3R1Q1grVE1xbDU4amVqS01DbEU1eFVwSmNXR0J4KzEwNUZ0MDJNTFh5ZUNwTzlU''@;'; put 'put ''RUlrYkRSYXptTWtqcjNMa09wU1h1bEtEaGlCMmkxeUNFMWVBQjRLL3YyOVYrb0tWbGY4ZXUydTNsRXhXMTlZRUo1WlBwZUR4TkxISlAzdkRSVE9iSWNGNVhoeGl0NkF1YmxCZk5rZDUzYlhmaWxITjdrdFZwMHJ6cGk2Z1lkY3N5MEpJV09pR0oxazlMdUY4UGNSM0dFbUZMTWl3eW94VlBrc1NU''@;'; put 'put ''QVloWHBCWGJuYUVnbUJicTNJWGMvbFNhVlppdTB2Z2xtSmJIa2VtbGZ4enQ3bTVkNk41eVc4bU92UDVZZmRlVFQ4N05wZW8rTVhpMjUzQ2J1dEozNitBblVFNXUySU9hNVVZWFJrWThBTkdseE1LU09SRVRjSm5BdUI4d3NUME52QzZQNGxMYnMyQXowMTBMYkR1SVd5dDZoVjhtNVBqckgzamho''@;'; put 'put ''UmZPUFAvODgvZjlrbWFUY2MvZ2xzR0RCK0VGSDZJcFpVYXJEQm5DN3lNWFdXMVJQY3RDUm1oaExmQXRXMUNZMFFzVVVYaDBnK29pbXFETWpUN3FjOTd2Q3dhTENrUEJvbWVDSWZhWERORy80WUtpa1BZWGVEV0M2b2tSZjl0V2dXTTZaQk53REwybTVrVUg4TDNrM0pYa1ZHa2RVQWFQS0UrVGM0''@;'; put 'put ''TlhtbFAxU29FdkxqNndnN3ppdVpQTHNILzVaZEpPbmdCS0IyU0l3Tm1DejIzVW5ONUpMUmRMcTdQbGxEQ3pCRmp6ZCtpQ01sMVhzZlllYW0yZTY4UnRlMjdlZzh2cWQ3VzA3cWxmS2lkM0w5MEVmVGVqNzZIdjROMkF0RkxabDZNUUNGVVZvemtGdjQyNTJJdEdTMHVpMFpMdlJVdExvL1JYelJj''@;'; put 'put ''dnQ0TVpNWVBkdXBITkxkK0ZpYzVwSkR3aElZQkJ0dEo4QkRqMkFzRzZvNGl1WFFoa2ZrV2I3bVVycmVEeU1SQmdyTnMyZytGMnVnQjVuY0Zna05wcGlqbGVSMTRSWGxXUVNmZkcvTFNxTlZGVWJ5c284VHNMN1haSG5xdTh1MEFmRDVlRUU3YThCcThqUDg5bWNnMmwyWDZlT05EY3ltZ2UxMU9h''@;'; put 'put ''eDlIcmZEL1A4Z0QrSmROTGZ0UXBkNVFCNTd0Z1lHN3F6UTRnUFNJQ0xkR2ptQk0xYmNYS2F5RXlSc2hmWHVoMTJsV05SWU5pbEt1eDFCS2lsVFFZM1VLREcxUWwxcnkyTUd0Rm95blhyaTNOUW13T3JNWkh1TU5XUVZmZzdCTEVZYmVqenlQRFV3US8rWG1tYURlQU9RajZlR09ZRXhvTWx0QkRt''@;'; put 'put ''OEFjeThMa29ZOXVBbk04KzZ3NTlHRU9ROWJDdkp6dHh3eDh1UW9HYUFBK2kvQkhWbHZrUUZ2bGJqdFZqUlRsQm9SQkFSbVFqaGgwQjR5Z0Y4VnBjRFBWcFNZOWQ1UllOT2V3T2FCeHZxcWJ6S0Fvc1ZiSWtxTDFUWDQzdGd2a2tGYlFzb3dHUDREZlQ3WXR2ZlV0WHRseTU1M2t3cUx5R042aFBN''@;'; put 'put ''WnJVZHBaRFZFS0cyVi9GUmIxVVVJZ0xBZjFXSUoxdU5nQkhHekhSQkFIU3VubUtjNzkxYlFhUk1CSDRRWHBybC9KTVRKMXJzWnNZT2oyd3RoOUxCZnBnRVlKMmdoaDNXMVgzS3FVYm1sYTFVbzQ5WTdONVBqYUZpQjlBdG0vVVVPK1ZrRFRDaW5VRUlxQ0ZQcmQxUEx3ZEc0K1ZqWEZXbUZjRTRO''@;'; put 'put ''b2hRc3ZUZmwzSms3MldQVmxheVhWTy9uQWpyV2xWSFBSOEVSZGk4Ni9Xb0NiVEFjK3ZuTjFhUlh3RmF0QllueGVxY3JDQ2NaWE9JYy8xOEljUkk5dEFuTkNnd0ZaT0xvSnpQRnNQM1B3bjhHczhQbnk5MmdORDN0V25JOW4rZjNyK2dHbXhsMDVNQWZCdXErQldmNHR3QVRaZU9KOFBNdVByNE1C''@;'; put 'put ''YTRYamJEeThuN25sUjFhUEIyU3FDbDUreVdvYVNsQ2IzTHphMDVnMnNQVUpZNDZya1o4UGYwcnlpOW4rUkRjMHl3TzdZMXJKSmJDQUtXbm5KZVcwR00yZGxNRDQ0eC94Z3JTK3ZqZDI4SXEwTCtESHNsVnBPTENJaTVhK3dXdlQvbmJ4YWNBQnE3ZGhlcVZPMVN1ZldZY25Wa1BDOEZTdjB2YVQ2''@;'; put 'put ''M1RQV3BpRHVHb1RtQk1hRE5EMks1dkFITXZDNUtIbk5vRTVubjNXSEhwNmpRNmp0V0czUTd4U0FwWkFmRVpFdURZV2lvQllSTkxldEZmeTRvL2NlZWZBbldlSHo5NHhjTWVkdDUvTnZqK0wyT0t5VmpQakJSc1VSWGVwOGEwTDYwaGx4RmZrTll0NkhSaGF2VERnWTFlRm5Lc1lycXI1bGdLV1Nh''@;'; put 'put ''RWxBNTVCY2RXU0l6Z1h1Y3RSSHI2R0tPYXVEOHJXaW9xS2FFVlYyQkZ4c0IwaTJWSnpLWkN0cXFjeEl2SjRNYTk4MVZGT2lHQlBrbnd2ZWMzNXZkZnVyankrTTVFRW1UNUkzeW41UlFXNHBpa0RrbzByRDJYcWxCODJaNGozMXA2Wno4NjIxc3pYbmVxaEVsMHpyL3g2dUF4ZkV3Q3hmcVByU09k''@;'; put 'put ''RXAvSlFnTnM2VmlQQzZOdWs4c0NqNitWcERjeEI5T05OWUU1b01GbGJ0eDdtZUxZZnpZN2x5RGYzbDltejJ0Um52YkM2bjV4NksxcEhsSkJqd0JWNkhkWWZFTEc2ZkpiZFBBcG1LOS9qeXZmYXZQYXczeWF4NmpKM01xZnFLcFN0dWpwMVlhWHFTaDVqVlZmSFdoYzZ1eFphYnZwMVIwTkQrK3Rx''@;'; put 'put ''WFdLU2ZCZGtmdXBaTS9qdE5IZmxCNDRvQmFVdlFNQXhyeFZUZS9qeXNJalZsSFd4V2xZNW53WE11VDBsbTV4QmY5QWZEN0RWcm5YN0ttSTRwUlU2cFRSTFFKTmV2YTNYZG5jZmJFMG1XUFh1Y0txK3M3TStWVkhkMWxKVDAzcUtHSnQyMXRYdGJHb1lMK1FWdklkcDVlNWNZN2lxb1RHdU9EbnRl''@;'; put 'put ''YTNCSzREckhqRHVCSFZQYlhSZEFCcmNrM1A5a2dhUHBiRmMrSmV5MS9NR2NxOWZ6UFkvdHpYbnVoRE13cHRQYy9tRTY4Sjk0Q05Xb3dZa2swT0RUNXJvaWtwRk1SRFZCMzZBRzV0SUV4Wk44R0RSS0JBa2lRTmdxYzBBVTdZeEREWkw0RXlZSlFwbXVZS3ViRmZXVmVsYU1NTUdZQ3NReG8waHB1''@;'; put 'put ''Zy9Qc1VZTW9uRU5HbUFtRkNVaUhnZ3owaW85OHNUK0ZhelJhQk93MHBkQTUxeDZuSk5MRGpiWU5DS3plYmN4cGEvL25tMi81L25VV1ExZ3N6UzV2TWczYUprdU9MV3NyeTJJVnBwUnZlRnYyTVhETWx5ZVNxVlNJQ2pKYWN5cmMySmhrU3lyaFo0TEU1RG4xQXdsSi8xdXRac1VQRG1iUGxneXps''@;'; put 'put ''cjF0WlJZenZPNXNKZjVPdnNIWWZENVllNzloNWZxWU5wdXJxMmZYZFJhSC9MMnNWMzVmT0R0RHltcFk2dnd0ZFh4NU5UUTlueW1PS2llRlZsZGM2aXZQSTVPZUYzMVFSRDNBNVdndTlNYXo4YTBHTnlTUkRyZGNrUUVmVU5oVUNmQWd6QmNSNUlHTVRHUkZTalJvZ0tSR0QwbzBnRURTUXlWY1hp''@;'; put 'put ''SzE3SnNoY3NsUTlyOUFwUldJQzc3ZkxBY3NVNk9IYSt3ZjRzdUo2dDVZZVplOHZ5MUxxLzByR2x0U2o0S3dmeTEvdTFCWjNYWlRhcVQ4R210VzZ0Y2ZpR3JuWGxLbGs5RkdONnJvL3J2Mm0wd1hXcS96NlFjLzJTQm8rbDdibndGN1A5ekhIOXQvd3R0clpKKzNtWjkvOXVEdDhOQkd6THVYN1F3''@;'; put 'put ''K0YvQ2RkTFdmOHY4LzRmNWRkZmhldGgxaitIbjN1UTUrSHFXYTNOLzJTMVlydGtwNDB0cDJRUHZuQ1ljQjh2eGZCb0N4MzJWZFhBZElFY2c4WEVaRDczOHBTY1Yxek1hOEhDSWJwSFFuTlJzdTVKZU1YbHlsMFB3bTlzNzdsbGVQaGtUOHRDMTU3TzhPU1JzdDZCWTUzVDVhMGw0K09kOHZoRUo3''@;'; put 'put ''RS9kUFgyc3dQZE53MzFIc3NNRGZiWDlaY25heHFpL2I2bHYrem9rcS9hMXRsOWxZWWZVc0xzeVRpM0p5cGQrTG9qeGRzRXgrZmhqYTVUZWoyVWMvMlNCbytsZmJud0wyV3ZyKzcvWXJiL3VTbHVsenJRTmxKSStsbE8xVWYzVFFEZmEzVUZpS1h2a0E1WWZwSnRJSk5BRnZXakxGejIyWXJBKzlB''@;'; put 'put ''eXJRYWF0OGd0TllDb09YY0hHYzZQeGtxTG8xVWxmNkQ3M1g2b2ZzQmZwbitqeGFXeHBvV1h0TGN3Sm0wTjFrdHpzRmxmMXVzaU9oSUpGeFhxOURxemdhaStMTDBxckZ6ZDBKY3QzTWlYelYwMTNNaVg5ZnY5VmY3SzBEdjVzanF2dW1YU3cxeFpDZFJsUER4MFptQjRTOUcrN29vSXZCdlpXclN2''@;'; put 'put ''UnpsWC9IS3dNdG9mKzA1ZnpQY0RmeFIvY0U5OTMrbUJhT2xJYURvSkVod3JHLzFsL044OElNT1BnaERYeFg3dnB1ZkhzTFVyU3Z1ZHEyUjQ5ZlVWR2ViWEwybndXUm5tMXk5bSsxRmxXRjJQb2Yzc1VmdTVOMmZObWRlNWZUeTNWSEdUdXNQMTY4NmIxQjF1dUVDOThXMjFCSkV1VVA5M2xSMHF3''@;'; put 'put ''dnlhc3NNc1RpNnFPQUZjOWVYbXpUTFpQTlVDZW1CZGpNZDl3bk5abjNDaEo3ZnQ0V3oreW9nZTNLVHRON0orbzNGVTNaTzN2RTJvZ0hpZ0FLU3pYVzRwd3BLdUFJdVlEQmdnREFFU2t6bTJIVXZQOWhXd0ZWUzFKS3V3c05CWDZBdjY3WGE3eTArekwzcWVWRXdISW55N1hwS2pxVDZOd2QrdkNO''@;'; put 'put ''Zlh0YnZMR3JLNzk3Q24yRmRRWUZOK2MrTEVmV1Z0OVVFZjN6M2s4M2dLYkRqTk52U3A5WDdiU0MvSWFneWwwUXRjOEh3bFdLY3ZoaGpDZ3cxQ1RZSVlEVWFNalRFc1lmQkVONzhMNWx5VjNLaTJSWk1wSGJDNGhZTjBEUUhQaUlUUFVrMDBzUktBeEhwZ0ZueXdKa3krdmJrTnBtUkhQQjVQeHh2''@;'; put 'put ''RFFXY2dHQTY0L0hRVklvdWJUUXFDUVl2Wk5YU0ZjNHFEU1MvRG0zbDlnZkRjTFJ5QmY5RUtoVGtXMXhZSzArSmhodE5QYWdYRGFxN2dZeXhPREt0eDRpL1d4WnU4UHBiSzdsWlZkdS9PNWhrK3htSlYxaFliMFBsTjJsNVMyeEpzR09WOHl2WVlzcllSdGUzQ09qNk5ReHhqSmk4Q1RDK0R5UmQy''@;'; put 'put ''a0Q4aEk4QThULzVFZ1FCR3pSdUJCSnpKMXMyK0MvUkpFWXpwTmRua0FNTHJnT2JhS255WW1oV01CRDA2QVB4cnkrNzAxYWhPc0ZZd1JiVlBkRk5vdEpycVJGTkRxMXRZTDl0aUZmQUtuQ2lxQmRHNXdOVDlkdmg4dnJBdkZLTFZDdUdBdXFRVldGOWJvaFl2b053U2szZDFyS294ZWVpaGt4M0t2''@;'; put 'put ''MnVGSnAxTGY1OVRaL3YrcnFhbXBSL242aW1lVDh4azg0a0xhUDg2T25QZjdWeldkMXRRZGRtYVhDUTJvUjlzMGxieit3U0FlWXJucUVEZWg5blpHS0NOaXJFQnMxMU9lbEhIOTFXcUoyTFErbnVKU1NFZ1VSTTlwb3U0TmxxUk9McExWUHNmMEVTTURET3hVaDRqZXVVV25uSHY0ZUxFcFloY1dL''@;'; put 'put ''UXBkeVk0VEFjdHNKcmpFSXFqTTdLRFJnd2hUUFFHY0FCQnR5QzZ5YndJK0tBU1hIa2RqUFFBelZScmxGV1BOMkxsUXN5UFpGWXBwSUd5T2VOOUc3VWd0SFF1SEE3SHd6RlBoVE1jRElSWWpsdFM1K0RWVk1yYTZtWHE5eU8xZ3ZtMXJSWTZxMkk2WFoxdGRTRnpFS0l1NVM5cVFGWHN0VHBoc2ht''@;'; put 'put ''WXZzV1JVOVFNNFJXZVpYWE5HK1NoRFJ2a29kZjYrUWJWUjJCN1o1bU5pcW8yNnF2cjJ2SjZZMnFqQnJpTldsVGJLcS9UZmJlOExmQktQdkVqZmtZSHdBczF5SW9TcUFYOW1VdTd0eHBMK2pLc00wQW9wL05pSXVqb0VTNm96OGZ1aUJ2Y1VhMUN6RXlYY1FTRGJ0NklWelpoUzVKK0JzSm9xdmEx''@;'; put 'put ''ZmIxT2tuTncyL29tSml5S2R0NFFyVzBtVnlOa3BPZTg0UGxzMDh2QTAvaTdwb2Ftdld0YWFwcFR5ZnhFZmlKV0ZmQVhGN21kTlAxZFlOSDhZbm9jQUhlRjlYOUZSVFF1RFFXclFpRmpZU0JVaUlWM3JJNGVxZ3VYZGNhTEE1VjAvYnIzQ2txbElmNzZPVEI0Z3VrUnZnNndzUHp3dXJXQ253Qk1K''@;'; put 'put ''ZE1qUEVaYitBUmYwMjFhM29ZVTBBVXV1ak9Vcm5qUzQxY0k3cytlNDhJTHF6VHA5L2pabmlaTkx1aE9XRTNnRlNidnVsT1cxVkt1K2h2VWhpQjQxcmZaV3I4ZkhaTE5idXIyKzBIUXFSRUowSlZqTVljcFZPOCtQeXVzakxhbExMUlpLVkJlQXpCRnQybVZseFpCaEptZnQyR0pzbE5kbGsxN2M4''@;'; put 'put ''YytyNVlMYktGektQSG1uMnpqazFncEcxZ0t3M3hLYXZQMCtOK1czbEpucEs3bG9HK3RyTUdBampXdHlRZHJOY1Q2N0w1dSs3cDkzYlEwV0wvMEZ2UTNDbko0bnAwM21lQnlpSC9QL1grNEhtUHlPYUplZjRKZnAzdXBtWjlSby9vWnpuVXl6K0o1NFY2QUdWVmhQT2c1RHZPY0JzUDNaTCtvOVFQ''@;'; put 'put ''OWY1LzVCRGpISjZEOTNNbGdSamVHNGZzeVNCL3dVeDZ0dkxXWVRVWlJEeEpJdE4zcGF6WjY1NkU4dDdiUk95V2wwclFZMnkyNVNaOFNBUC8rMUtuRnhiY2lSeUo0aS9LZm1hTWQzOUgyZlRTdyt2QkJPYzlza2tScTZRMElhMVhpWm5oclUvZDBac3V6VjdaNSt0Z25iYkZyYXVxTGJsYjdneVV3''@;'; put 'put ''OStyemNjUDR5YUdoaytONGI1Vnk4VC9EUjhKNFF2bHRGY3F1V2QyaHJWa0JIbC9mQ05la2hQbDA0NnRpL1RHZzN4Y1pYZXRVL1dybDhIQzloTmcxZU1EcFJiVHlyQlBaOVRFRCt0d216N3FVelVNWTlxR2NkYXBNZHAxcUFUMjV6Z2ZrOGZtNWJDNWhZUkp0dEo2R3JXdlh1TlMyKzFieUhOaXE3''@;'; put 'put ''aHNDeFN2UVBiWU9vRktMbk02ZU9HRWcyU01uakhScnZWYXZ4eUxDRW1leHg4V0tlcWxyWWFJRkxwb3prUzEwY1dQN3luYnZIZXJ5L1F1emRCLzhMT2xkZXFzcmMwak9ITTd3UmZ5cFQxdzk4K21yRjVVVS9sN21zQ3pQTnpNN0JtTVdmZzcrQloxWE05b3VqM3N4alVUME9wcGUxd3NEd0VNNnZV''@;'; put 'put ''RjN3R0lrb3FpbEhNeVNTY2hKT2lTVGdRQkN5ZVprVTJNcVVCK29pMVZCZDM1bk1Cd001Y0c0VnlkcFY4eEJqdCtnVzNPT2pPcERDSGs4Tzl0NUpCdzVLdk1DODh6UlNQQzZqT1pJS0xmbDFKdmpXMWJ0ajJxc3EwM3pDdlRHbXRvVWN5bDB1VVhvdUo4NkY2cHZjWUxSTnFYeTc5UHIrSUxYUDFQ''@;'; put 'put ''YTd1QzVQelgrN1FVK1BjSDRONlh5NlNzY1hubWQxa3VyOFBSNlI5WS9QY0g0TjZYeTc4MGJQdXQyeHI4N09QOGErYlBZSG5nMnprWjFuQStzNDMxZU4wM0hlUlVmNTI1dC8zdzcyei9mZ2Q2V1MrckFHYWt2S1JiMFVoSGRmWWgxdU1BS0xra2VLOXJnZWVmNDZub05TUkpud1BQMURLS1ZOTWE2''@;'; put 'put ''Y28zcU5lVWE3OWlvZEYyTmgzRHFuVnF4ZGNPTmlqWFd0K08xR3VaUWRZU1dhZGdOVW5Fc0tHNmF5YjZDUXdKSTc2bnJOOGhwZXg4NGVKbHpBNjVmRkN2V3BMWXRzNWM3UmtDdGYyOW45ZTh5WFNlb3c2Syt2cFRveEpJaWduVGdMaUdnRnhIeVZxOFQ2Tmc2Z2JaU3FkYXViTEpPb0tObmFOMTJl''@;'; put 'put ''V0M2VHJBR1RsMG4wTUJGdnVjdlhnbjRaYXVnbDBFdkxhaDlwNHA4L0lPOW94dmhOM2xOK0hKbCt0c21wVFdMQjJreFVuYlp1djBjZVRxaHlSUEk0dVFtOG5SSmt5ZHNLT2Z5RkFSNW9tYzhsS01YNUh3dlVNUmpBWXFZNlhtVEtrVmlHa1VvNnNncG1nQlU2N09NQnNMOHMzV0VpV2NSZmlWdDVL''@;'; put 'put ''bzE0Q3A1MXJYU1VUTFpZZGpscUp3RzgxUWFUQ0FNZm1rVFd0RWdueDRYZ0dlZDY2bmhLNlhuVmF5cEl1ek1IbC9COWtPMHMvMFFDZlJ0dWFBS0c0U29teGdOTGt5TTJhSklmVmJONkhYNnN5WU1BOFhHbzJCc0FNTjBONllnNktaRnZpZVQxejRpWDNaWnNucWxqY0ZJYm51blJuSjBZM2hXV29u''@;'; put 'put ''MjV6UVRLSjdvZVFZSlZNMDJhWGdCVXpUcm9kdUVvOWR2M1BCU0FjQ3BkUnlja2xmMmNnUjhjZHZhS3N5MGFhdzVkM3ZIUklFbHhQaVBuU1hDZURTdDh1ajZYRWdKK0IwRnpQK2M1UDRudVdhZGo4cHJPRExaR282RkRXd0h6NldmeStiU3Rad0tiL3R5dGtaRXExSE1yZjlnYlZsdEFNdmJBOHdk''@;'; put 'put ''RzlXZ2dOOTAzNFp0aDFmV0FyQzFENm5ub0d4ajU2QUU2TnFOQzdRK0xSck9vL3NxQnRSVHBiUXp4MW5PWFF0MjJKYS9RTEFnRUhUeE02Wm9VTG9tYzdIbTFCVHk2UERkazdac3VzSXhmMG85UFlWY1lHZWxXTDFxZ3NKZjVIMzRXTzVSS253ZnpqWXlDM0ZNQ04zR3cza3JtRlFCWW0xZENBTjdE''@;'; put 'put ''ZmhXWFNEWlZad1N2YmJEYStQMHI1L2Y1eWxmYlVWblRjYlhIUFE3QTY2QXkwK3QyN3BVNzhyV25hUTlteE1uc3l3aXpjL2R5bk1TNTBhbmF6ZjFhSkVkMElxZDhjTDRzWVhYQytHdWRYekU5KzlRbmJtTDhZS0V2cHRUSTNSQ3F4R0M2N2V0YTh2WEtDNXBheFJZbWtBNWJZOW42NHZtMEEzcitJ''@;'; put 'put ''aWR3Y0o0clgzVGVrYStiNGJ5MmpUM2o0NmduTGJIdGJZYjVnMTUyNHRxVzVvMy9HQk8yeFBadGh2bHBuamJTOXB6c2FHQm43MUM5eVhUR0RpZjdzaWdGZjEwbnhNWlFPcW1JYktYZXR3K3h0VDV5THJSa1dWaUlEOW5HL0hURyt3ZHByWDNONU5MVjNpZWlwZWVwM0orNGVEWThOQW91WFQvNk9q''@;'; put 'put ''R2ZXVDNkUkYwRnRqeUJuVlhsOXBIT2lrRk1xTkR3Mk1IRjhpbGtaSDcxVDU2b1k5dlFIU3I3bWd3RWJxbllZQ0dHbjBiMWVEbklVdEl5TzVvVUNmTmdva254L3d0cm9haW9nWlhTL2w0alBUNnkxdGNYaTk4OExQbkRLRVhXVDRseko1ejJmcit0YnNsdEIwU0t5a09kVDlHTHdiOXh2WmpOTEZl''@;'; put 'put ''NlNaV3VpTmhIcVFVWTJFeXU0bFd1S0pkR2JuZlczQjdaMmQxUXBZVDN2SnlyOGZ2OTVEZXpnVDluT2hzOG52NFJiN1BZQnZXZzAyem94WTJnaG9yVENhZmNnejltb28rOWVRZXdPa2swNFlDdlVPbmFrZTJvRWVuN3N4UXo5K3ZXRkdJcDlwTHZNTmMvRUg3UGM3U09UNG04Smt5UnJja2FjUHZK''@;'; put 'put ''eStCWEhleDU2YnBma3dqMjkzbXhyalBnSVZlZGlqUkpEV3B3TVB6MnRFbFJCamx1eFdDSWJiWmpUNGYwY1B2MlZIYTNBTlVhU29Hc0NWUTZIQ2JIQjU5eHBDc2NXc2Y1UHpkcE4xdXM1aDlwVWE2UThoaUxpNDEzYTdTSkVQWGlkaTV0VVY4NTRVZXVMS1BocVUzT0IzWnZTaGVLUkJTTjVmZ0hj''@;'; put 'put ''ZjREcE8vOGR6QjVLOVJlWDM1dWVWdkl5c0tzaDRLK2JuenEvZTVCYk45Q2FzUG9QOEt6MStXaElKVnlqTFBUYkk4SmRjcFhGZmVvZWxLMUkwck50R1ZyMmk2RW5VRHhFWnREK0luMzdIdFFkeVMwL1o0dHUwY2JscW5LM25iaTltMmMraHJQRDVkYnFGblYrYXVuN3o5ZSs1THZQMTcxWmVJTERm''@;'; put 'put ''VE5RbWVaMmN3Rjk3K0hWOG5lL3QzS2d6UDF4L0w5cE9IcnQwa1gvOVNObCtmTjRJMnJDWHRSdS9aeEU2OGtsM0w3bGJqM0RyME0yTEJ2ZTk4N2o4OW03ajNvTlpHYUwrQ05vTGw3VGUxTmkzNEEraFY4Z1R3VFRIam1iNjFtd281enppMTFEaFBybjUzNVFzTHlOMnJ2ckdBemltRDcwZS9JQmRn''@;'; put 'put ''eHZrMDY4ajNDSkxTN0I1QmVDYitQbnRtQ2FxUXkwcXN3T3VyTm9VSlRMa0ZDNElPZHVMWDZtZnJOeDBLTHQ5a1dNR2M5M3g4K0lmQUd4RStQamJPUDhBNEhkbHhNcGV6Vk12dmpxSHplQkkvRGxDYjdMR2k1d3V3UFZacnpoZDRxajBZYkE4RTJNLzVZRnVRdjROTEhFL3R3RGRmUmg4RTJrTlFZ''@;'; put 'put ''d3ZBNng4WUQ5dnh6d0ZBb3QrUG83czc1L3R4TW1nUW52eGJYbFJWbDQvMVZ2NzFOUVlzV3JESkxKcHl2L0xHbWVjUXpHWmh4bTYwU2JyY2I4cEp2VU5EOXEwM3ZMVkVXd3ZxOStVMGI5aHVnMi9NV2RjV29wSEdvU0ZaMXI0NVoyaHk2S3FKTVhsUUh0amFVNXVwN1docTNQQmJkRnovaFcvUktW''@;'; put 'put ''L3pPWmdEVzk3NFYzL0REaDVrZitpSDRWcmxjOXIzN1h3SzNnQnM4TXEvZUVkOVAxYVQreVU4SzEvR2c4SFRyOGNSL0cxNkt0RXplb3hyWXhuc0Jkd0ZIcG05Ly83WnBZdWVwNS8xOHYzQUFCZlQ0QVFHRjBsN3BRaEFQZkpJLzdOUGV5NStqOW1EMzZubkk5ZWdIZktFRDZoV2pIVWlvV1VrR0pu''@;'; put 'put ''cHFmUTZNSGNRYlI4d1ltTEMyRXgzakdTM0NWbFlEU3RQUGNGckRVckVZOUVxdXlNRTRhSGRHY3FEVUhMbDJLY0l4STdjV1U5MmtKVmNDQzB2QTFSNy9Td3h5bllJMWI5bllPVGVlZTlZRnhHNmR4VE92M2RJM1JXVXVhNE1pOHJQOVFRSGxEZEtGN3ZuMkpIS25jZjdlajNtUWs5dnorRjJ0aWVv''@;'; put 'put ''dTZtMzBHUDI5SFlNMGU5c3dVV2tFTjhKdWs1OGh0QjlHTTdzYWUxMzBuUGFtVk1EYm8wQW10ZHY5eE5oYVluKzVwd1J4cys0TUR6cmRlYnBTZTEvL2JDSnQ4WTJQR3lDMTJIQWMwQzM0MXAxcmVBSnJUNERybjlEdmI2eVJzdXZYOHBlbDQ3blhyK29YVWR6QjNPdnY1SzkzbjBxOS9xNTdQV0Zl''@;'; put 'put ''ZTFzdEcza0hwWWpUOEM4SXdFbmhubHZYRllEczAvbVZOUGs0T0VlRm5SWmM1RnhranRkZjFKeHdtT3ZYS3lvY2RkamEzRkQ0MnlPRzRpelA1MHo5cGV5T01pN2p0dERXcnIvTlhaT2owYnZwRDJ3VlR0eEI5TjZPTGl2WDM5ZnZ6U0svaC9pRXp6NkFBRUFBQUFCQUFCVkVyVCtYdzg4OVFBZkEr''@;'; put 'put ''Z0FBQUFBMDhHZGhnQUFBQURVdnFiMS96Yis0d1NLQTg0QUFBQUlBQUlBQUFBQUFBQjQybU5nWkdCZ1B2ZnZQQU1EeStiL1p2OXpXTG9ZZ0NMSWdORVFBS2NOQnJnQUFBQjQybldVeldzVFVSVEZ6NzB6RkVFSTJFUlFRb3pHWUV4TXFrbTEwV290YVdwaUJXdnNScXhZRjFJWExsUzZVRVFGa2E1''@;'; put 'put ''RVJWMjRjMVhwMG9WS2QzYWhDQVg5QzBSUXV0Q0NDaFZLb1M2TTV6NHpFcE9hY0RqejhkNjhlMy92ek1nU1RvTS9PVXBGcVJRcU1vK1NUaUdoRTRoN1JhVDFDYlpJQjBweUJUM1VObm1BTGoyQmd4emZMeGVSbC9Yb2s5bjZWMzNKNDl2bzFGUEk4djRtdlVtZHhRNjlqbDA2aW00OWp3eVBDMjQ4''@;'; put 'put ''NStvd2l2WWMrbUZaUWRpN3hIbUxDT3NNYXZvTU9WMmgzMENWZFZUMUM4OC9vaW9oREdrYzYvUXBqdWtCbEx3enFIaytsZUg5ZTZnNmYrem14TGxXa3M4YjBoK0krRVZzMU5mWXdIbHI5QzY2NVJxT3NPWmxlazRXc0ZOcjlWOHl6cHJLU09rZFZEU0I3ZlNzamlBbEU0anBKR3NmdzRBSTlvdlU1''@;'; put 'put ''N1JBSG9LeTl3Z0R2RjdXcTI1OHhlYklmVEpjd21hWjVMd3hzcXloMDZ0eTdUd2k3RGVpSVhUSlF5UWxpWFAwbEx6Q0huSWZkR3ZlUXQ1cWxEbldzcHYzM3BHeDFUWEZQUUQyU2RsZHo1SlhnbjJGblJiL2xaL2tHc2JQMkRWSlF2VzN4by8ralpyM29rZ0g3RnFsbVFaTDQ5Y3M0MGZPZXBJeVZx''@;'; put 'put ''dkllMEczWHNpdVdlVDJ4cGpSUDFNZjlESUtmOW0xeW5KaGJ2eWFaZnlNczduMWEydTJ1dlZ1NndkdU9lSytXTC9NY3RieHNKcWEvWGpUdVdYTjlydmhaUFdKOWI0bnU3MnNINDRoKzNBWlpBNHNoKzQ4OEhIRVpBUXhZMnY5dGJseFpXK0IreUhrL0E3V3lkeGFkdHFjV2JZOHRUbno3VElXdU8y''@;'; put 'put ''UE1mcVAyenZnY21oN2FQd2E3NExsc2RVdDR6TEQ3RFdFbi9SUmFwQ2E1WmhEdklaNlQvRE1WbTlqMmxpVGRjTmIrUE85NFRPQmFVRDdrUGN1OE5zUlJhLzdMcXhGTDlVdjArUzE3TDRWOEo4akxjUFlTbkYvNjk5ZFBqek81YjZ1OHErZzhoc3BZOWZPZU5wRndsMUk0bkFBQVBDMWx0K3VNcHRP''@;'; put 'put ''OTNIK042ZWJPN2U1TlVGNmtpUGlDQi9paUFpSkhvNklPT1E0SXFLSEl5VGlrQjRPa1pDSU9FSWlJdUtJRUxtSGtPZ2hZa1FQSVJFUlIvUWdJdEpEeUNFUjkzSncvSDRRQkdYKzJZYjJ1NkN1TkV6QTMrRWorQXB1ZGYvb1B1OXVJUlpFUUpKSUR0bEg2ajBqUGNzOTV5YkJOR1k2TWI4eHA4MFo4''@;'; put 'put ''NnE1YkRZc2xLVnQ1YXpMMWpQcmkwMjBUZGoyYk5lMmhwMndqOXJuN0hsN3hRRTVFbzZDbytZVW5XUE9ySFBQV1VNaGxFUEgwVlYwRXpYUVZxK2psK3ZkNlJ2dVcrdjM5cy8zWDdxbVhHVlhlMkJpWUh2Z3dpMjZsOXpWUVc1d1kvQVNZN0VaN0FBenNJNkg4MHg3Y3A1clQ4dXJlMGU4Uzk1VEhN''@;'; put 'put ''VlQrRHBleE12NEZmN3FZMzFydnJ5djd1djRIWDdLTC91VC9nLytMU0pEckJCNW9rU1VpWFBpbG1nU3IrUjdNazFteUJVeVQ1YklNbmxOVFZPZnFTeFZvSGFwQ3ZWTXArazVlb0Zlb2RmcElsMEtKQUozZ1hyZ0dVREFBYnlBQlRJWUJudmdHRlNCQVc3QUkzaGlFc3dKYzhIVW1BZW14WFRZSlhh''@;'; put 'put ''VjNXQjMyR08yR3V3TC9nb2F3WnRnSTlqbUxKeVBBNXpCM1hNTjdpVmtDWTJIYXFGNjZEbHNDcnZDVlBpSmgzbVVmOGNmOGxXK3hqL3dMUUVTWEFJcjZNS3NVQkxLd3Fsd0tkd0tUZUZQeEJiQkl1R0lGc21LaUlpSlFJeUtDWEZNbkJUbnhjVzNxU2dVZFVXcDZJRTBMbjJVRnFWdlVrSGFsWTZr''@;'; put 'put ''TStsS1p1Vk4rVUN1eUJkeVRhN0xIY1drZUJWVzBaV2tzcUJzS0JXbEdjTmlrN0ZDN0xjS3E3S2FWRlBxalBwSi9hcm0xQzMxVUsycWhucXZOdjdURUkzU1JyVkpyYWo5MU82MHB0WWNlaGhxNnpaOVdjL3BSZDNRYi9SSC9VbC9pVnZpN3ZoVWZEYitKWjZONS84Q0RCRE15QUFCQUFBQlBBQm9B''@;'; put 'put ''QW9BUVFBRUFBSUFLQUE1QUlzQUFBQ1RBbXNBQXdBQmVOcU5rc3RPd2tBVWh2OFdOS0RHS0RIR3NPcktHQk81cWVCdFlkU3dVZFJJaEswZ0ZSckJZaWxHWGZvMmJsejZERjZld0kyUDREUDRkeml0TjJMSXBKMXY1dnpuUHpPbkJSRERPMExRd2xFQU8zeDZyR0dPcXg3ckdFZFRPSVFOM0FxSHNZ''@;'; put 'put ''Skg0U0hFOFNFOGpGa3RJaHhCUmtzSVJ4SFhUb1JIc2FUNVBtTW9hUS9DRTVqU3c4S1RpT2t6d2srWTF1ZUZuNUhTTjRWZkVOSGJ3cThZMGE5Ny9CWkNYTC9ETm15MGNRTUhGdXBvd0lXQmV6NFpwSkJHbGxSbDFLQ3VvVFFkY3BGemkxa2Q1bDRnZ1FKTTVqbkt5V1lmZkpWSmxVWGFVcnMxSEhH''@;'; put 'put ''bmppNjVRbldhbVNrMTFuR01YWlN4VCtybnRSQjQrVTZEVmpSKzFTeHg1VkJycVpNYjM4NHdXTjBTK1pRNm0wcXZLd2QwTVRsNzJUWEdLdVJEeHIzWUh1ZmFQMzN6ZXUxeXRZWWt4OVVQWjF2NXRnTFhCR00yMTM1T1I3THFqTHJjN2ZJcitab2taNzltUzkzMXEyYXk3ejM3N2YzdFpaazdWWndw''@;'; put 'put ''SHpmb1hVRTZtVmRSZ3lPcllqbWVNSTFWdmhleEhQeFBPWnhUWjZvNmpueUZmT0JZeENWdllqSGlVTlA4QkxoWmg1Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0ZzdWdRQ0hrRHd3alBsQ1JDOUNpUjRRS0pYMFhzSDBYbWtC''@;'; put 'put ''Ky9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFTUlhWMUxDVFhkU3ltejNzWlI5MTFOTkFJeUdhYUdZL0xS''@;'; put 'put ''eWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJCbGhsQmh4YmlIQlJWeUl3eGdwa3B4aG5PODR5eVFUWE15''@;'; put 'put ''bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhWcmgwcjRnei81a3E5VXFxREtWSzRLVmFwSzFhclJUdTFT''@;'; put 'put ''clhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZU2NUOWxxR3ZidEN4ejlnK3k0Vy9MakdjaU5zamZzdlEx''@;'; put 'put ''eGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2OE9iSVdFWTZEaWRpZzliVG1vMFpxV1NnVVJtNU9zMEhS''@;'; put 'put ''elRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1V3lMRmpwNngxMnJLbHJOVzdRYXh6R1hlVDFScUsyWTQ5''@;'; put 'put ''RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJuVzJOUWVSV3duTDJKNzZoKzNaYmNoQUFBQWVOcGo4TjdC''@;'; put 'put ''Y0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RSMnNINHYzVURTKzlHSmdhWHphd3BiQXd1TGdEK0hDVmdB''@;'; put 'put ''QUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo2MDA7Zm9udC1zdHlsZTpub3JtYWx9Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZX1jbHItbW9kYWwub3BlbntkaXNwbGF5OmlubGluZX1jbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpibG9ja31jbHItc3Rh''@;'; put 'put ''Y2stYmxvY2t7ZGlzcGxheTpibG9ja31jbHItc3RhY2staGVhZGVye2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLXZpZXd7ZGlzcGxheTpibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseTp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZh''@;'; put 'put ''bWlseSk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tc2tlbGV0b24tZHVyYXRpb246NHM7LS1jZHMtZ2xvYmFsLWFu''@;'; put 'put ''aW1hdGlvbi1lYXNpbmctaW4tb3V0OmN1YmljLWJlemllciguNDIsIC4wMSwgLjU4LCAxKTstLWNkcy1hbGlhcy1vYmplY3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBhdXRvIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3Rp''@;'; put 'put ''dmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1j''@;'; put 'put ''bGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1z''@;'; put 'put ''aGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNr''@;'; put 'put ''Z3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKX06cm9vdCBbY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3Rl''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''YmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1za2VsZXRvbi1sb2FkaW5nLWdyYWRpZW50OmxpbmVhci1ncmFkaWVudCggOTBkZWcsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZCkgMCUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCkgMzUlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApIDY1JSwgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKSAxMDAl''@;'; put 'put ''ICk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNo''@;'; put 'put ''YWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AY2hhcnNldCAiVVRGLTgiO0Bmb250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0''@;'; put 'put ''eS1kaXNjO3NyYzp1cmwoaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25vcHBhL3RleHQtc2VjdXJpdHkvbWFzdGVyL2Rpc3QvdGV4dC1zZWN1cml0eS1kaXNjLndvZmYpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRvcDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJh''@;'; put 'put ''cntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAwYyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxh''@;'; put 'put ''eTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHls''@;'; put 'put ''ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFj''@;'; put 'put ''aXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgLnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDoxMjBweDttYXgtaGVpZ2h0OjEyMHB4O2hlaWdodDoxMjBweH1hcHAtZWRpdG9yIC5pbmZvQmFye21hcmdpbi10b3A6MTRweDti''@;'; put 'put ''YWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWVkaXRvciAuaW5mb0JhciBz''@;'; put 'put ''cGFue3dpZHRoOjgwJX1hcHAtZWRpdG9yIC5pbmZvQmFyOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9YXBwLWVkaXRvciAuaW5mb0Jhcjpob3ZlciBzcGFue3dpZHRoOnVuc2V0fWFwcC1lZGl0b3IgLnBrSGVhZGVye2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZm''@;'; put 'put ''O21hcmdpbjotMXB4fWFwcC1lZGl0b3IgLmhlYWRlckJhcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKX1hcHAtZWRpdG9yIC5lcnJvci1pY29ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfWFwcC1lZGl0b3Ig''@;'; put 'put ''LmJ0bkN0cmx7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtZWRpdG9yIC5jYXJkLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH1hcHAtZWRpdG9yIC5oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59YXBwLWVkaXRvciAubXktZHJvcC16''@;'; put 'put ''b25le2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9YXBwLWVkaXRvciAubnYtZmlsZS1vdmVye2JvcmRlcjpzb2xpZCAycHggZ3Jl''@;'; put 'put ''ZW59YXBwLWVkaXRvciAuZmlsZS1kcm9wLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1lZGl0b3IgLnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDo5cHghaW1wb3J0YW50fWFwcC1lZGl0b3IgLnByb2dyZXNzLGFwcC1lZGl0''@;'; put 'put ''b3IgLnByb2dyZXNzLXN0YXRpY3t3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19YXBwLWVkaXRvciAuaG90RWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1lZGl0b3IgLmV4Y2VsLXBhcnNpbmd7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''cG9zaXRpb246cmVsYXRpdmV9YXBwLWVkaXRvciAuZXhjZWwtcGFyc2luZyAuZGV0YWlsc3ttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9YXBwLWVkaXRvciAuZWRpdC1yZWNvcmQtc3Bpbm5lcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmOTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXthcHAtZWRpdG9yIC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6MzJweCFp''@;'; put 'put ''bXBvcnRhbnR9YXBwLWVkaXRvciAuY2FyZC1ibG9jayxhcHAtZWRpdG9yIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfX1hcHAtZWRpdG9yIC5jb250ZW50LWFyZWF7cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtwYWRkaW5nLXRvcDowfWFwcC1lZGl0b3IgLmRyb3AtYXJl''@;'; put 'put ''YXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9YXBwLWVkaXRvciAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXpl''@;'; put 'put ''OjIwcHg7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNkYmRiZGI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzAwMH1hcHAtZWRpdG9yICNzdWJtaXRCdG4sYXBwLWVkaXRvciAjY2FuY2VsU3VibWl0QnRue3dpZHRoOjE1MHB4fWFwcC1lZGl0b3IgLnZpZXctdGFi''@;'; put 'put ''bGV7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7YXBwLWVkaXRvciAuaWNvbi1jb2xsYXBzZSAudGV4dHtkaXNwbGF5Om5vbmV9fW15LWFwcCBhcHAtcmVxdWVzdHMtbW9kYWx7ei1pbmRleDoxMDAw''@;'; put 'put ''MH1teS1hcHAgaGVhZGVyLmFwcC1oZWFkZXJ7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZmZmfW15LWFwcCAubG9nbyBpbWcud2l0aG91dC10ZXh0e3dpZHRoOjMwcHh9bXktYXBwIC5sb2dvIGltZy53aXRoLXRleHR7d2lkdGg6MjEwcHh9bXktYXBwIC5oZWFkZXItaGFt''@;'; put 'put ''YnVyZ2VyLXRyaWdnZXJ7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO21hcmdpbi1sZWZ0OjEwcHh9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3Np''@;'; put 'put ''dGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMHZoIWltcG9ydGFudDt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7ei1pbmRleDoxMDU7YmFja2dyb3VuZDojMjEyMTIxODB9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNlIC5leHBpcmVkLWRldGFpbHN7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fW15LWFwcCAu''@;'; put 'put ''ZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZSAubWFpbHRve2NvbG9yOiM4ZGM1M2V9bXktYXBwIC5tYWluLWNvbnRhaW5lciAudXBkYXRlLWtleXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7cGFkZGluZzowIDEw''@;'; put 'put ''cHg7YmFja2dyb3VuZDojMDAwMDAwMjZ9bXktYXBwIC5hbGVydC1pY29uLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1teS1hcHAgLm5hdi10ZXh0e21hcmdpbi1yaWdodDoyMHB4fW15LWFwcCAuc2lkZWJhci10b2dnbGV7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH1teS1hcHAgLnNpZGViYXItdG9nZ2xlIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9bXktYXBwIGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLmRyb3Bkb3due3Bvc2l0aW9uOnVuc2V0fW15LWFwcCBoZWFk''@;'; put 'put ''ZXIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiNmYWZhZmF9bXktYXBwIGhlYWRlciAubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6IzFkMmYzZH1teS1hcHAgLm5vdGZ7YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9bXktYXBwIC50b2dnbGUtc3dpdGNo''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfW15''@;'; put 'put ''LWFwcCAubWFpbi1jb250YWluZXJ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9bXktYXBwIC5jb250ZW50LWNvbnRhaW5lcnt6LWluZGV4OjAhaW1wb3J0YW50fW15LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiM0OTVh''@;'; put 'put ''Njc7Y29sb3I6I2ZmZn1teS1hcHAgLmFwcC1sb2FkaW5nIC5sb2FkaW5nLWxvZ297bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe215LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgt''@;'; put 'put ''c3RhcnQ7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9bXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssbXkt''@;'; put 'put ''YXBwIC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluayxteS1hcHAgLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6''@;'; put 'put ''MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn1teS1hcHAgLmNhcmQtYmxvY2ssbXktYXBwIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfW15LWFwcCAubWFpbi1jb250''@;'; put 'put ''YWluZXJbX25nY29udGVudC1jMF0gLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF17cGFkZGluZzowcmVtfX0uaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDog''@;'; put 'put ''NDgwcHgpe2gye2ZvbnQtc2l6ZTouN3JlbSFpbXBvcnRhbnR9aDN7Zm9udC1zaXplOi43cmVtfX0ubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1wcmltYXJ5e2Jv''@;'; put 'put ''cmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNv''@;'; put 'put ''bixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9LmJ0bi1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi42NX0uYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3Rl''@;'; put 'put ''eHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6IzcyOTVhZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0''@;'; put 'put ''bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAu''@;'; put 'put ''aW5wdXRzIHRleHRhcmVhe2ZvbnQtc2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0''@;'; put 'put ''aDoyOTBweH0uaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5odE1vYmlsZUVkaXRvckNvbnRh''@;'; put 'put ''aW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC53dEJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBl''@;'; put 'put ''KG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk3KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFpbXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6''@;'; put 'put ''bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGUgdGJvZHkgdHIgdGgsYm9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29s''@;'; put 'put ''dW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojMmQ0MDQ4O2JvcmRlci1jb2xvcjojNjk3Yzg1fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgdGQsYm9keVtjZHMtdGhlbWU9ZGFy''@;'; put 'put ''a10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tn''@;'; put 'put ''cm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9w''@;'; put 'put ''OjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRp''@;'; put 'put ''bmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0''@;'; put 'put ''YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBh''@;'; put 'put ''cmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAz''@;'; put 'put ''ZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xy''@;'; put 'put ''LXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21lLWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQg''@;'; put 'put ''LnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdodDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJh''@;'; put 'put ''ciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNpZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtj''@;'; put 'put ''dXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJlc2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJl''@;'; put 'put ''c2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1z''@;'; put 'put ''aWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntwYWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFy''@;'; put 'put ''TmF2e3otaW5kZXg6MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7YXBwLXNpZGViYXIgI3NpZGViYXJOYXZ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fWFwcC14bG1hcCAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW59YXBwLXhsbWFwIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1hcHAteGxtYXAgLm5vLXRhYmxlLXNlbGVjdGVke3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAudGl0bGUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXJ9YXBwLXhsbWFwIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC14bG1hcCAuc3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC14bG1hcCAudmlld2VyVGl0bGV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXhs''@;'; put 'put ''bWFwIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAteGxtYXAgLmNvbnRlbnQtYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MDZiMDA2ZX1hcHAteGxtYXAgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfWFwcC14bG1hcCAuZHJvcC1hcmVhIHNwYW57Zm9udC1z''@;'; put 'put ''aXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9YXBwLW11bHRpLWRhdGFzZXQgLm5vLXRhYmxlLXNlbGVjdGVke2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9YXBwLW11bHRpLWRhdGFzZXQgLmhlYWRlci1yb3d7cGFkZGluZzoxNXB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM31h''@;'; put 'put ''cHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1pbnB1dC13cmFwcGVye21heC13aWR0aDo1MDBweDt3aWR0aDoxMDAlfWFwcC1tdWx0aS1kYXRhc2V0IC5kYXRhc2V0LWlucHV0LXdyYXBwZXIgdGV4dGFyZWF7bWluLWhlaWdodDoyMDBweDtoZWlnaHQ6MjAwcHh9YXBwLW11bHRpLWRhdGFzZXQg''@;'; put 'put ''LnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDo3MHB4O21heC1oZWlnaHQ6NzBweDtoZWlnaHQ6NzBweH1hcHAtbXVsdGktZGF0YXNldCAubG9nLXdyYXBwZXJ7bWFyZ2luOjAgMTBweDtoZWlnaHQ6YXV0b31hcHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9uc3tib3Jk''@;'; put 'put ''ZXItdG9wOjFweCBzb2xpZCAjZDNkM2QzfWFwcC1tdWx0aS1kYXRhc2V0IC5saWNlbmNlLWxpbWl0LW5vdGljZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayl9YXBwLW11bHRpLWRhdGFzZXQgLnN1Ym1pc3Npb24tcmVzdWx0c3tib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCAjZDNkM2QzfXRkLm5vdC1tYXRjaGVke2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMDU0fWFwcC1zdWJtaXR0ZWQgLm5vQm9yZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH1hcHAtc3VibWl0dGVkIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxl''@;'; put 'put ''ZnQ+LnRvb2x0aXAtY29udGVudCxhcHAtc3VibWl0dGVkIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdHtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fWFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250''@;'; put 'put ''ZW50OmJlZm9yZSxhcHAtc3VibWl0dGVkIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9YXBwLXN1Ym1pdHRlZCAu''@;'; put 'put ''bm8tc3VibWl0dGVkLXRhYmxlc3toZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtYXBwcm92ZSAuY29sdW1uLWNlbnRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1hcHByb3ZlIC5k''@;'; put 'put ''YXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7b3V0bGluZTpub25lIWltcG9ydGFudH1hcHAtYXBwcm92ZSAubGlua3N7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfWFwcC1hcHByb3ZlIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudCxhcHAtYXBwcm92ZSAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnR7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH1hcHAtYXBwcm92ZSAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jl''@;'; put 'put ''LGFwcC1hcHByb3ZlIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9YXBwLWFwcHJvdmUgLm5vQm9yZGVye2JvcmRl''@;'; put 'put ''ci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH1hcHAtYXBwcm92ZSAuYXBwcm92YWxzLWxpc3Qtd3JhcHBlcntoZWlnaHQ6NzB2aDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''fWFwcC1hcHByb3ZlIC5ub2FwcHJvdmFscy1pbmZvLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtaGlzdG9yeSAucmVqZWN0ZWR7''@;'; put 'put ''Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9YXBwLWhpc3RvcnkgLmFjY2VwdGVke2NvbG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfWFwcC1oaXN0b3J5IC5oc0NlbGx7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9YXBwLWhpc3RvcnkgLmJ0Q2VsbHtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fWFwcC1oaXN0b3J5IC52ZXJDZW50ZXJ7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3b3JkLWJyZWFrOmJyZWFrLWFsbH1hcHAtaGlzdG9yeSAubG9hZC1tb3JlIGlucHV0e3dpZHRoOjkwcHh9YXBwLWhpc3RvcnkgI25vRGF0YUNvbnRhaW5lcntoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtaGlzdG9yeSAudGFi''@;'; put 'put ''bGUtbGlua3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtdmlld2VyIC5jYXJke21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNl''@;'; put 'put ''Om5vd3JhcH1hcHAtdmlld2VyIC50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlv''@;'; put 'put ''bi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn1hcHAtdmlld2VyIC5oZWFkZXItcm93IC50aXRsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtdmlld2VyIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmZsZXgtZW5kO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtdmlld2VyIC5zd3ttYXJnaW46MXJlbSAwcmVtIC41cmVtIDFyZW19YXBwLXZpZXdlciAuaW5mb0JhcnttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFk''@;'; put 'put ''ZGluZzozcHg7Zm9udC1zaXplOjE2cHh9YXBwLXZpZXdlciAuZmlsdGVyU2lkZXttYXJnaW4tdG9wOjI2cHg7bWFyZ2luLWJvdHRvbToxOXB4fWFwcC12aWV3ZXIgLm9wdGlvbnMtZHJvcGRvd24gY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH1hcHAtdmlld2VyIC5kcm9wZG93bi1tZW51e3dp''@;'; put 'put ''ZHRoOjE4MHB4O21hcmdpbi10b3A6LTE4cHg7cGFkZGluZzowfWFwcC12aWV3ZXIgLmRyb3Bkb3duLW1lbnUgLmJ0bnt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9YXBwLXZpZXdlciAuY2FyZEZsZXh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBwLXZpZXdl''@;'; put 'put ''ciAubm9EYXRhe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDoxfWFwcC12aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC12aWV3ZXIg''@;'; put 'put ''LmVkaXRCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fWFwcC12aWV3ZXIgLmJ0blZpZXd7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLmNvbnRlbnQtYXJlYXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''Y29sdW1ufWFwcC12aWV3ZXIgLmRvd25sb2FkLXNlbGVjdCAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fWFwcC12aWV3ZXIgLnJlZnJlc2gtdGFibGV7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fWFwcC12aWV3ZXIgLmxpYmluZm97cGFkZGlu''@;'; put 'put ''ZzoxMHB4IDIwcHg7b3ZlcmZsb3c6YXV0b31hcHAtdmlld2VyIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLGFwcC12aWV3ZXIgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5w''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwYjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwNmUhaW1wb3J0YW50fWFwcC12aWV3ZXIgLm5vLXRhYmxlLXNlbGVj''@;'; put 'put ''dGVkLWluZm97YmFja2dyb3VuZDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC12aWV3ZXIgLndlYi1xdWVyeXttYXgtaGVpZ2h0OjM1dmh9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktdGV4dHttaW4taGVpZ2h0''@;'; put 'put ''OjEwMHB4O21heC1oZWlnaHQ6MTAwcHg7d2lkdGg6MTAwJSFpbXBvcnRhbnR9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciBjbHIt''@;'; put 'put ''dGV4dGFyZWEtY29udGFpbmVye21hcmdpbjowIWltcG9ydGFudH1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVyIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXJ7bWFyZ2luLWxlZnQ6''@;'; put 'put ''MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBmb3Jte3BhZGRpbmctbGVmdDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pY29ue21hcmdpbi10b3A6NHB4fWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7''@;'; put 'put ''bWFyZ2luLXRvcDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5jbHItY29udHJvbC1jb250YWluZXJ7bWFyZ2luLWxlZnQ6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7YXBwLXZpZXdlciAuZmlsdGVyQnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6Y2VudGVyfWFwcC12aWV3ZXIgLmVkaXRCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7YXBwLXZpZXdlciAucm93e21hcmdpbi1yaWdodDowcmVtO21hcmdpbi1sZWZ0OjByZW19fWFwcC1ncm91cCAuc2lkZWJh''@;'; put 'put ''ci1oZWlnaHR7aGVpZ2h0OjEwMCV9YXBwLWdyb3VwIC5ncm91cC1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9YXBwLWdyb3VwIC5ncm91cC1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLWdyb3VwIC5ncm91cC1pbmZvIHRke3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyfWFwcC1ncm91cCAuZ3JvdXAtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fWFwcC1ncm91cCAuZ3JvdXAtZGF0YXttaW4taGVpZ2h0OmF1dG99YXBwLWdyb3VwIC5ncm91cC1kYXRhIGgzLGFwcC1ncm91cCAuZ3JvdXAtZGF0YSBoNXt0ZXh0LWFs''@;'; put 'put ''aWduOmNlbnRlcn1hcHAtZ3JvdXAgLmdyb3VwLWRhdGEgLm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFwcC1ncm91cCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99''@;'; put 'put ''QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1ncm91cCAuZ3JvdXAtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29s''@;'; put 'put ''b3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3JvdXAgLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzI5NDA0Yn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWdyb3VwIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAt''@;'; put 'put ''Z3JvdXAgLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2U2ZTZlNn1hcHAtdXNlciAuc2lkZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9YXBwLXVzZXIgLnVzZXItaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fWFwcC11c2VyIC51c2VyLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAt''@;'; put 'put ''dXNlciAudXNlci1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAtdXNlciAudXNlci1kYXRhe21pbi1oZWlnaHQ6YXV0b31hcHAtdXNlciAudXNlci1kYXRhIGgzLGFwcC11c2VyIC51c2Vy''@;'; put 'put ''LWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXVzZXIgLnVzZXItdGFibGV7d2lkdGg6MTAwJX1hcHAtdXNlciAudXNlci10YWJsZSB0aGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9YXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9YXBw''@;'; put 'put ''LXVzZXIgLndpZHRoLTUwe3dpZHRoOjUwJX1hcHAtdXNlciAud2lkdGgtMzN7d2lkdGg6MzMlfWFwcC11c2VyIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo1MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7YXBwLXVzZXIgLnVz''@;'; put 'put ''ZXItZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItZGF0YXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1p''@;'; put 'put ''bmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdh''@;'; put 'put ''Nztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9YXBwLXJlcXVlc3RzLW1vZGFsey0tbGluZS1oZWlnaHQ6IDE2cHg7LS1saW5lLXRvcDog''@;'; put 'put ''MHB4fWFwcC1yZXF1ZXN0cy1tb2RhbCAubG9nLXdyYXBwZXIuc2FzbG9ne3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOnByZTtmb250LWZhbWlseTptb25vc3BhY2V9YXBwLXJlcXVlc3RzLW1vZGFsIC5sb2ctd3JhcHBlci5zYXNsb2cgLmhpZ2hsaWdodGVkLWxpbmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjojZmYwM31hcHAtcmVxdWVzdHMtbW9kYWwgLmxpbmUtaGlnaGxpZ2h0LW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTthbmltYXRpb246ZmFkZU91dCAzcyBmb3J3YXJkczt6LWluZGV4OjEwfWFwcC1yZXF1ZXN0''@;'; put 'put ''cy1tb2RhbCAudGVtcC1oZWlnaHQtc2V0dGVye2hlaWdodDp2YXIoLS1saW5lLWhlaWdodCl9YXBwLXJlcXVlc3RzLW1vZGFsIC5saW5lLXBvc2l0aW9uLXNldHRlcnt0b3A6dmFyKC0tbGluZS10b3ApfWFwcC1yZXF1ZXN0cy1tb2RhbCAudGVtcC1saW5lLWhlaWdodC1jYWxje3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO2hlaWdodDphdXRvfWFwcC1yZXF1ZXN0cy1tb2RhbCAuZXJyb3ItaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2YwMDN9YXBwLXJlcXVlc3RzLW1vZGFsIC53YXJuaW5nLWhpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAzfUBrZXlm''@;'; put 'put ''cmFtZXMgZmFkZU91dHswJXtvcGFjaXR5OjF9NzAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fWFwcC1yZXF1ZXN0cy1tb2RhbCAuaGlnaGxpZ2h0ZWQtbGluZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MWEyMjAyYn1hcHAtcmVxdWVzdHMtbW9kYWwgLmVycm9yLWxpbmV7Y29sb3I6I2UxMjIwMH1h''@;'; put 'put ''cHAtcmVxdWVzdHMtbW9kYWwgLndhcm5pbmctbGluZXtjb2xvcjojZjJhZjAwfWFwcC1yZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbTo1cHh9YXBwLXJl''@;'; put 'put ''cXVlc3RzLW1vZGFsIC5kcm9wZG93bi1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Q4ZTNlOX1hcHAtcmVxdWVzdHMtbW9kYWwgLm5vLXJlcXN7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfS5y''@;'; put 'put ''ZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0ucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4IDEwcHggNXB4fS53b3JrLXRhYmxlcy1kcm9wZG93''@;'; put 'put ''biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9LnN0YWNrLXZpZXd7aGVpZ2h0OmF1dG8haW1wb3J0YW50O21hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnQ7LXdlYmtpdC1tYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50fS5jb250ZW50IGNs''@;'; put 'put ''ci1pY29ue21hcmdpbi1ib3R0b206NXB4fS5jb250ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3JkZXI6MH0uY29udGVudCAuc3RhY2stYmxvY2stbGFiZWx7d2lkdGg6MTAwJTtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6LjZyZW0haW1wb3J0YW50fS5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZXJyLWxpbmtzIC5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99YXBwLXN5''@;'; put 'put ''c3RlbSAuY29udGVudC1ib3h7bWF4LXdpZHRoOjEyODlweH1hcHAtc3lzdGVtIC5zeXMtaW5mbz5kaXZ7ZmxleDoxfWFwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hpbGQoMil7bWFyZ2luOjAgMzBweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rpb24sYXBwLXN5c3RlbSAudXNlci1hY3Rp''@;'; put 'put ''b257ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJnaW4tYm90dG9tOjVweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rp''@;'; put 'put ''b24gYnV0dG9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0aW9uIGJ1dHRvbnttaW4td2lkdGg6MTAycHh9YXBwLXN5c3RlbSAuZGFya3tmb250LXdlaWdodDo3MDA7bWFyZ2luLWxlZnQ6NXB4fUBtZWRpYSAobWF4LXdpZHRoOiA5OTNweCl7YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2Om50aC1jaGls''@;'; put 'put ''ZCgyKXttYXJnaW46MH1hcHAtc3lzdGVtIC5zeXMtaW5mbyBkaXZ7bWFyZ2luOjIwcHggMH19YXBwLXF1ZXJ5IC5jb250ZW50e2Rpc3BsYXk6ZmxleH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXF1''@;'; put 'put ''ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLWxvZ2lje2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjE1cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1''@;'; put 'put ''ZXJ5e3BhZGRpbmc6MzBweCAwIDIwcHggMjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246cmVsYXRpdmV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5Pi5jbHItcm93''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJvdzpub3QoOmxhc3QtY2hpbGQpe3BhZGRpbmctYm90dG9tOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1ib3R0b206MXB4''@;'; put 'put ''IHNvbGlkIHJnYmEoMCwwLDAsLjE2KX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Y29sb3I6Z3JheX1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhcmlhYmxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJs''@;'; put 'put ''ZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhcmlhYmxlLWNvbCAuZGF0YWxpc3Qtd3JhcHBlciBpbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXIgLmNsYXVzZS1xdWVyeSAub3BlcmF0b3ItY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAub3BlcmF0b3ItY29sIGNsci1zZWxlY3QtY29udGFpbmVye2hlaWdo''@;'; put 'put ''dDo0NXB4O21hcmdpbi10b3A6MDt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY2hlY2tib3gtdmFsc3t3aWR0aDoxMDAlO3BhZGRpbmc6MCA1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAu''@;'; put 'put ''Y2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHMgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHMgc2VjdGlvbnttYXgt''@;'; put 'put ''aGVpZ2h0OjEyMHB4O292ZXJmbG93LXk6c2Nyb2xsfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNs''@;'; put 'put ''YXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzIC5jbHItY29u''@;'; put 'put ''dHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNv''@;'; put 'put ''bnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzIGlucHV0W3R5cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJh''@;'; put 'put ''bmdlLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5l''@;'; put 'put ''ciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdl''@;'; put 'put ''LXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5mcm9te21hcmdpbi1i''@;'; put 'put ''b3R0b206MTBweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbT5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFs''@;'; put 'put ''dWUtY29sIC5yYW5nZS12YWxzIC5mcm9tIGlucHV0W3R5cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20sYXBwLXF1ZXJ5IC5j''@;'; put 'put ''b250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRve21pbi13aWR0aDoxMDBweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbT5p''@;'; put 'put ''bnB1dCxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAu''@;'; put 'put ''cmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVdLGFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50byBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1x''@;'; put 'put ''dWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHMgLmNs''@;'; put 'put ''ci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25l''@;'; put 'put ''fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscz5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIGlucHV0W3R5''@;'; put 'put ''cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5jbGF1c2UtYnV0dG9uc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3c7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnMgYnV0dG9ue21pbi13aWR0aDphdXRvfWFwcC1xdWVyeSAuaW52YWxpZC1jbGF1c2V7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNkOTRi''@;'; put 'put ''MzF9YXBwLXF1ZXJ5IC5jbGF1c2Utcm93IGNsci1pY29ue21hcmdpbjowfWFwcC1xdWVyeSAuY2xhdXNlLXJvdzphZnRlcntwb3NpdGlvbjpyZWxhdGl2ZTtjb250ZW50OiIiO2hlaWdodDouNDE2NjdyZW07d2lkdGg6LjQxNjY3cmVtO3RvcDouMjkxNjdyZW07cmlnaHQ6LjI1cmVtO2JhY2tn''@;'; put 'put ''cm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZ1wyMDI2JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmcl''@;'; put 'put ''M0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjB9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjhweDttYXJnaW46MDtib3JkZXItcmFkaXVzOjFweDtkaXNw''@;'; put 'put ''bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDo2NnB4O3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gc3Bhbi5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDt0b3A6MTBw''@;'; put 'put ''eH1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGV7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1xdWVyeSAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9''@;'; put 'put ''YXBwLXF1ZXJ5IGNsci1kYXRlLWNvbnRhaW5lcnttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9YXBwLXF1ZXJ5IGlucHV0W3R5cGU9dGltZV17Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjNiM2IzfWFwcC1xdWVyeSBpbnB1dFt0eXBl''@;'; put 'put ''PXRpbWVdOmZvY3Vze291dGxpbmU6bm9uZX1hcHAtcXVlcnkgLmluLXZhbHVlcy1tb2RhbCAubW9kYWwtZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNkOGQ4ZDg7bWFyZ2luLXRvcDoxMHB4fWFwcC1xdWVyeSAucHJvZ3Jlc3MsYXBwLXF1ZXJ5IC5wcm9ncmVzcy1zdGF0aWN7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp0cmFuc3BhcmVudDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7dG9wOjNweH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXF1ZXJ5IC5jbGF1c2UtbG9naWN7YmFja2dyb3VuZDojZTllOWU5fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtcXVlcnkgLmNsYXVzZS1xdWVyeXti''@;'; put 'put ''YWNrZ3JvdW5kOiNmYmY4Zjh9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5saW5lLW51bWJlcnN7Ym9yZGVyLWNvbG9yOiM5ODk3OTchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1xdWVyeSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6IzE5MmEzMH1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1kYXJrXSBhcHAtcXVlcnkgLmNsYXVzZS1xdWVyeXtiYWNrZ3JvdW5kOiMyNjNlNDh9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHN7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGgyLGFwcC1sb2dpbiAuc2lk''@;'; put 'put ''ZUJhclByb3BzIGgzLGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGg0LGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGg1LGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGlucHV0e2NvbG9yOiNlMGUwZTB9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgYnV0dG9ue2JvcmRlci1jb2xvcjp3aGVhdCFpbXBv''@;'; put 'put ''cnRhbnR9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgYXtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH1h''@;'; put 'put ''cHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlcj4qe3BvaW50ZXItZXZlbnRzOmF1dG99YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXJ7d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6''@;'; put 'put ''I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2lue3ot''@;'; put 'put ''aW5kZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC50aXRsZXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpu''@;'; put 'put ''b3JtYWw7bGluZS1oZWlnaHQ6MzZweH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC50aXRsZSAud2VsY29tZXttYXJnaW4tdG9wOjM2cHh9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9y''@;'; put 'put ''bS5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLmxvZ2luLWdyb3VwPip7bWFyZ2luOjZweCAwIDE4cHh9''@;'; put 'put ''YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlIC5sb2dpbi1zaWRlYmFye3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlIC5vdmVybGF5e2Rpc3BsYXk6YmxvY2t9YXBwLWxvZ2luIC5s''@;'; put 'put ''b2dpbi1zaWRlYmFyLXdyYXBwZXIgLm92ZXJsYXl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6IzIxMjEyMTgwO3otaW5kZXg6MTAwfWFwcC1sb2dpbiAubG9naW4tbG9nb3ttYXgtd2lkdGg6MjAwcHh9''@;'; put 'put ''LmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LWdyb3VwLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC51c2VybmFtZSwubG9naW4t''@;'; put 'put ''c2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0ubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LXdyYXBwZXIsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgYnV0dG9ue21heC13aWR0aDpub25lfWFw''@;'; put 'put ''cC10ZXJtcyA6aG9zdHtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmNWY2ZmZ9YXBwLXRlcm1zIC5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZHtvcGFjaXR5Oi41fWFwcC10ZXJtcyAuY2FyZHtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdp''@;'; put 'put ''bi10b3A6MH1hcHAtdGVybXMgLmNhcmQgLmNhcmQtYmxvY2t7ZmxleDoxO292ZXJmbG93OmF1dG99YXBwLXRlcm1zIC5hY2NlcHQtY2hlY2tib3h7cGFkZGluZzoxMHB4IDE1cHh9YXBwLWRlcGxveSAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWRlcGxveSAuYnRue21hcmdpbi10b3A6MTBweH1h''@;'; put 'put ''cHAtZGVwbG95IC5sb2ctd3JhcHBlcnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjOWM5Yzk7cGFkZGluZzoxMHB4O292ZXJmbG93OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXB9YXBwLWRlcGxveSAjY29udGV4dHMtYnRue3BhZGRpbmc6M3B4IDAg''@;'; put 'put ''MDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWRlcGxveSAudmFsaWRhdGlvbi1iYXJ7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MjBweDth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9YXBwLWRlcGxveSAudmFsaWRhdGlvbi1iYXIgY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb257cGFkZGluZzowIDE1cHh9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9uIC5jbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlcnttYXJnaW46MjBweCAwfWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbiAuYnRuLWF1dG9kZXBsb3l7ZGlzcGxheTpibG9jazttYXJnaW46MTVweCAwfWFwcC1hbGVydHMgY2xyLWFsZXJ0c3tkaXNwbGF5OmJsb2NrfWFwcC1tYW51YWwtZGVwbG95IC5jbGVhci1tZW1vcnktYnV0''@;'; put 'put ''dG9ue3JpZ2h0OjEwcHg7dG9wOjJweH1hcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBl''@;'; put 'put ''YXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9YXBwLWxpbmVhZ2UgI2dyYXBoe2hlaWdodDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjZTRlNGU0O21hcmdpbi10b3A6MTBweH1hcHAtbGluZWFnZSAuc2VsZWN0aW9uLXdyYXBwZXJ7d2lkdGg6MTAwJTttYXgtd2lkdGg6NjcwcHh9YXBwLWxpbmVhZ2UgLmNvbHVtbi1hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5O2NvbG9yOiMwMDB9YXBwLWxpbmVhZ2Ug''@;'; put 'put ''LmNvbnRlbnQtYXJlYXtwYWRkaW5nOi41cmVtIWltcG9ydGFudH1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhIC5jYXJke21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4KX1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhIC5jYXJkIC5jYXJkLWJsb2Nre3BhZGRpbmc6LjVyZW0gLjM1cmVt''@;'; put 'put ''IWltcG9ydGFudH1hcHAtbGluZWFnZSBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWxpbmVhZ2UgLmJ0bi1ncm91cC5kaXJlY3Rpb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX1hcHAtbGluZWFnZSAuZ3JhcGgtcmVuZGVyLXNwaW5u''@;'; put 'put ''ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjEwcHh9YXBwLWxpbmVhZ2UgLmJpZ2xpbmVhZ2Utcm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4fWFwcC1saW5lYWdlIC5tb2RhbC1mb290ZXIgcHttYXJnaW46MH1hcHAtbGluZWFnZSAubGluZWFnZS10aXRsZS13cmFwcGVye2xlZnQ6MTJweH1hcHAtbGluZWFnZSAubWF4LWRlcHRoLWlucHV0e3dpZHRoOjEwMCV9QG1lZGlhICht''@;'; put 'put ''YXgtd2lkdGg6IDc2OHB4KXthcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToyMHB4fX1kYy10cmVlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1kYy10cmVlIGNsci10cmVlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29u''@;'; put 'put ''dGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2hlaWdodDo3NXZoO292''@;'; put 'put ''ZXJmbG93OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo0cHh9YXBwLW1ldGFkYXRhIC5jb2xzLWhlYWR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9YXBwLW1ldGFkYXRhIC5vYmplY3QtdGV4dHtkaXNwbGF5''@;'; put 'put ''OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX1hcHAtbWV0YWRhdGEgLnJlcG8tZHJvcGRvd257bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9''@;'; put 'put ''YXBwLW1ldGFkYXRhIC5jbHItYWNjb3JkaW9uLXRpdGxle3dpZHRoOjEwMCV9YXBwLW1ldGFkYXRhIC5mbG9hdC1yaWdodHttYXJnaW46MDtmbG9hdDpyaWdodH1hcHAtbWV0YWRhdGEgLmZ1bGwtd2lkdGh7d2lkdGg6MTAwJX1hcHAtbWV0YWRhdGEgLm9iamVjdC11cml7bWFyZ2luOjVweCAw''@;'; put 'put ''IDB9YXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH1hcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czozcHh9YXBwLW1ldGFkYXRhIC5kYXRhZ3JpZC1ob3N0e2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fWFwcC1tZXRhZGF0YSAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLW1ldGFkYXRhIC5jb250ZW50LWFy''@;'; put 'put ''ZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA1NTYwfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBh''@;'; put 'put ''cHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOX1hcHAtbGljZW5zaW5ne2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRk''@;'; put 'put ''aW5nOjIwcHh9YXBwLWxpY2Vuc2luZyAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWxpY2Vuc2luZyAua2V5LWVycm9ye2ZvbnQtc2l6ZToxNnB4fWFwcC1saWNlbnNpbmcgLm1pc3NrZXl7Y29sb3I6I2U3NGMzY31hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtLGFwcC1saWNlbnNpbmcg''@;'; put 'put ''LmFjdGl2YXRpb24ta2V5LWZvcm17cGFkZGluZzowfWFwcC1saWNlbnNpbmcgLmxpY2Vuc2Uta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lcixhcHAtbGljZW5zaW5nIC5hY3RpdmF0aW9uLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtbGljZW5z''@;'; put 'put ''aW5nIC5saWNlbnNlLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEsYXBwLWxpY2Vuc2luZyAuYWN0aXZhdGlvbi1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7aGVpZ2h0OjE3MHB4O21heC1oZWlnaHQ6MTcwcHg7bWlu''@;'; put 'put ''LWhlaWdodDoxNzBweDtyZXNpemU6bm9uZX1hcHAtbGljZW5zaW5nIC5hcHBseS1rZXlze2hlaWdodDo0MHB4fWFwcC1saWNlbnNpbmcgLmRyb3AtYXJlYXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxNXB4O2JvcmRlcjoy''@;'; put 'put ''cHggZGFzaGVkICNiMmIyYjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1hcHAtbGljZW5zaW5nIGNsci10YWJzIGJ1dHRvbntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmxpY2VuY2Utbm90aWNle2ZvbnQtc2l6ZToxNHB4''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFse3otaW5kZXg6MTMwMH1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpfWFwcC12aWV3Ym94''@;'; put 'put ''ZXMgY2xyLW1vZGFsLnJvb3QtbW9kYWwgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0Ojgwdmh9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keXttYXgtaGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCV9YXBwLXZpZXdib3hlcyBkYy10cmVle292ZXJmbG93OmF1dG87Zmxl''@;'; put 'put ''eDoxfWFwcC12aWV3Ym94ZXMgLnRvb2x0aXAtbG9uZ3t3b3JkLWJyZWFrOmJyZWFrLXdvcmR9YXBwLXZpZXdib3hlcyAuYWRkLW5ld3t3aWR0aDo1MCU7cGFkZGluZy1yaWdodDo1cHh9YXBwLXZpZXdib3hlcyAuYWRkLW5ldz5we21hcmdpbi1ib3R0b206MXB4fWFwcC12aWV3Ym94ZXMgLnZp''@;'; put 'put ''ZXdib3gtbGltaXQtbm90aWNle29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY31hcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3Blbnt3aWR0aDo1MCV9YXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveHtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9YXBwLXZp''@;'; put 'put ''ZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveC5zZWxlY3RlZHtiYWNrZ3JvdW5kOiMzYzg1MDAyZX1hcHAtdmlld2JveGVzIC52aWV3Ym94ZXMtY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX1hcHAtdmll''@;'; put 'put ''d2JveGVzIC52aWV3Ym94e21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9YXBwLXZpZXdib3hlcyAudmlld2JveC5mb2N1c2Vke3otaW5kZXg6MTEwMDtvdXRsaW5lOm5vbmV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuY29udGVudHtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCww''@;'; put 'put ''LDAsLjMwMTk2MDc4NDMpO2JhY2tncm91bmQ6I2ZmZjtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXg6MTtvdmVyZmxvdy14OmF1dG99YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGV7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAw''@;'; put 'put ''O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC50YWJsZS10aXRsZXt3aGl0ZS1zcGFjZTpwcmUt''@;'; put 'put ''d3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9uc3tkaXNwbGF5OmZsZXg7bWluLXdpZHRoOjM1cHh9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUgLmFjdGlvbnMgY2xyLWljb257Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7bWFyZ2luLWxlZnQ6NXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29uOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNsaWNrLWljb257Y3Vyc29yOnBvaW50ZXJ9YXBwLXZpZXdib3hlcyAu''@;'; put 'put ''dmlld2JveCAuY2xpY2staWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxle3Bvc2l0aW9uOmFic29sdXRlfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuY29ybmVye3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7''@;'; put 'put ''Y3Vyc29yOm53c2UtcmVzaXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUucmlnaHR7d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZS5ib3R0b217aGVpZ2h0OjJweDt3aWR0aDoxMDAlO2N1''@;'; put 'put ''cnNvcjpucy1yZXNpemV9YXBwLXZpZXdib3hlcyAuY29scy1zZWFyY2h7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3ODQzMTM3MjUpO2JvcmRlci1yYWRpdXM6M3B4fWFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtib3JkZXI6c29saWQg''@;'; put 'put ''MXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3h7cGFkZGluZzoycHggMTBweDtib3JkZXItYm90''@;'; put 'put ''dG9tOnNvbGlkIDFweCAjY2NjO2NvbG9yOiMwMDAwMDBkZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOm1vdmU7Zm9udC1zaXplOjE0cHh9''@;'; put 'put ''YXBwLXZpZXdib3hlcyAuY29sLWJveC5zZWFyY2g6Zm9jdXN7YmFja2dyb3VuZDojMDAwMDAwMWF9YXBwLXZpZXdib3hlcyAuY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwMjR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcHJldmlld3tib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCAjMDAwMywwIDhweCAxMHB4IDFweCAjMDAwMDAwMjQsMCAzcHggMTRweCAycHggIzAwMDAwMDFmO3otaW5kZXg6MTMwMCFpbXBvcnRhbnR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcGxhY2Vo''@;'; put 'put ''b2xkZXJ7b3BhY2l0eTowfWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLWFuaW1hdGluZ3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuY29sLWJveDpsYXN0LWNoaWxke2JvcmRlcjpub25lfWFwcC12aWV3Ym94ZXMgLmNvbHMt''@;'; put 'put ''bGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nIC5jb2wtYm94Om5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1hcHAtdmlld2JveGVzIC5kaXNhYmxlZHtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWlt''@;'; put 'put ''cG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfWFwcC12aWV3Ym94ZXMgLmZpbHRlci1hY3RpdmV7Y29sb3I6IzAwNzJhM31hcHAtdmlld2JveGVzIGhvdC10YWJsZSAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9YXBwLXZpZXdib3hlcyBo''@;'; put 'put ''b3QtdGFibGUgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSxhcHAtdmlld2JveGVzIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMw''@;'; put 'put ''NmIwMGIwfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRkLnJlYWRvbmx5''@;'; put 'put ''Q2VsbHtvcGFjaXR5Oi41fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3g6aG92ZXJ7YmFja2dyb3VuZDojMzE0YjU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MTRiNTc7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6Izg1ODU4NX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2wtYm94e2JhY2tncm91bmQ6IzMxNGI1Nztib3JkZXItY29sb3I6Izg1ODU4NTtjb2xvcjppbmhlcml0fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdmll''@;'; put 'put ''d2JveGVzIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6I2U4ZThlOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29scy1saXN0e2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29s''@;'; put 'put ''LWJveHtiYWNrZ3JvdW5kOiNmZmZ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRjLWxvYy1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRoOjUwMHB4fWFwcC1hdXRvbWF0aWMtZGVwbG95IC5hdXRvLWRlcGxveXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDA2O3otaW5kZXg6MTAwfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveHt3aWR0aDo0MDBweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDojZmZmO2Rpc3BsYXk6ZmxleDtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNoYWRvdzoxcHggMXB4IDhweCAjMDAwMDAwODJ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLnNwaW5uZXItYm94IC5idXR0b25ze2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3BhY2UtYmV0d2Vlbjt3aWR0aDoxMDAlfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktc3RhdHVzLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3cgcHtt''@;'; put 'put ''YXJnaW46MCAwIDAgMTBweH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN1Y2Nlc3N7Y29sb3I6IzZlY2Y0NH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LWVycm9ye2NvbG9yOiNlNzRjM2N9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS11bmRldGVybWluYXRlZHtjb2xv''@;'; put 'put ''cjojY2FjYWNhfWFwcC1hdXRvbWF0aWMtZGVwbG95IGhye2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3MDU4ODIzNTMpfWFwcC1pbmZvLW1vZGFsIC5jbHItYWJvcnQtbW9kYWwgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtaW5mby1t''@;'; put 'put ''b2RhbCAuY2xyLWFib3J0LW1vZGFsIC5tb2RhbHt6LWluZGV4OjIwNTB9YXBwLWluZm8tbW9kYWwgLm1vZGFsLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1pbmZvLW1vZGFsIC5zYXNTZXJ2aWNle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9YXBwLWlu''@;'; put 'put ''Zm8tbW9kYWwgLm1vZGFsLWZvb3Rlcntwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtaW5mby1tb2RhbCAuc3lzdGV4dHtvdmVyZmxvdzphdXRvO21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfWFwcC1pbmZvLW1vZGFsIC5zeXN0ZXh0IHB7''@;'; put 'put ''bWFyZ2luLXRvcDowO3dvcmQtd3JhcDpicmVhay13b3JkfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29s''@;'; put 'put ''dW1uLWVudHJ5IC5uYW1lLWlucHV0LXJvd3t3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLm5hbWUtaW5wdXQtcm93IC5jZWxsLWRlc2N7bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fWFw''@;'; put 'put ''cC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBwZXJ7ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5pbnB1dHMtd3JhcHBl''@;'; put 'put ''cj4qOm5vdCguZGF0ZS1maWVsZCk6bm90KGNsci1zZWxlY3QtY29udGFpbmVyKXtmbGV4OjF9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IHB7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRy''@;'; put 'put ''eSAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0''@;'; put 'put ''LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQx''@;'; put 'put ''NjY3cmVtO21hcmdpbi1yaWdodDo2cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBh''@;'; put 'put ''cHAtc29mdC1zZWxlY3QgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1l''@;'; put 'put ''ZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29s''@;'; put 'put ''dW1uLWVudHJ5OmZpcnN0LWNoaWxkIHA6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmRhdGUtZmllbGR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1t''@;'; put 'put ''b2RhbCAuZGF0ZS1maWVsZCB0ZXh0YXJlYXt3aWR0aDoyMzBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5kYXRlLWZpZWxkIC5kYXRlLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDo0cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2Rh''@;'; put 'put ''bCAuZGF0ZS1maWVsZCAuZGF0ZS1waWNrZXIgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nLWJvdHRvbToxMHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwg''@;'; put 'put ''Y2xyLXNlbGVjdC1jb250YWluZXJ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czouMTI1cmVtO21hcmdpbi1yaWdodDo1cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFw''@;'; put 'put ''cGVye21heC1oZWlnaHQ6dW5zZXR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWlu''@;'; put 'put ''ZXIgc2VsZWN0e2hlaWdodDphdXRvO3BhZGRpbmc6MTBweCAyMHB4IDEwcHggMTBweDtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fWFw''@;'; put 'put ''cC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVye3dpZHRoOjIyNHB4O2JvcmRlcjox''@;'; put 'put ''cHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHIt''@;'; put 'put ''aW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1lZGl0LXJlY29y''@;'; put 'put ''ZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIuaW52''@;'; put 'put ''YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWVkaXQt''@;'; put 'put ''cmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVh''@;'; put 'put ''LmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX1hcHAt''@;'; put 'put ''ZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6''@;'; put 'put ''NXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtwYWRkaW5nOjAgMCAxcmVtfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5wcmV2LW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdC1yZWNv''@;'; put 'put ''cmQgLnByZXYtbmV4dCBwe21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0IGJ1dHRvbnttYXJnaW46MCAxMHB4fWFwcC1lZGl0LXJlY29yZCAuZm9jdXNhYmxlOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfWFwcC1lZGl0LXJlY29yZCAuZW50cnktaW5wdXQtbGVm''@;'; put 'put ''dC1vZmZzZXR7bGVmdDotMzBweH1hcHAtZWRpdC1yZWNvcmQgLnZhbGlkYXRpb24taW5mby1hbGVydHt3aWR0aDozMTBweH1hcHAtYXV0b2NvbXBsZXRlIC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9''@;'; put 'put ''YXBwLWF1dG9jb21wbGV0ZSBpbnB1dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAtYXV0b2NvbXBsZXRlIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5vdmVy''@;'; put 'put ''bGF5e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdHtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIw''@;'; put 'put ''MDB9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDoj''@;'; put 'put ''MDAwMDAwMGZ9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5sb2FkLW1vcmV7dGV4dC1hbGlnbjpjZW50ZXI7Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiMyMTMzM2I7Ym9yZGVyOjFweCBzb2xpZCAjNTc1NzU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hdXRvY29tcGxldGUgaW5wdXR7Y29s''@;'; put 'put ''b3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdCBvcHRpb257Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojZmZmfWFwcC1jb250YWN0LWxpbmsgLnVuc2V0e2Nv''@;'; put 'put ''bG9yOnVuc2V0fWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgY2xyLXRhYnN7bWF4LWhlaWdodDo3MHZofWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWIt''@;'; put 'put ''Y29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1kYXRhc2V0LWluZm8gY2xyLW1vZGFsIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9YXBwLWRhdGFzZXQtaW5mbyAuY2xpY2thYmxlLXJvd3tjdXJzb3I6cG9pbnRlcn1hcHAtZGF0YXNldC1pbmZvIC5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRsaW5lOm5vbmU7b3V0bGluZS1vZmZzZXQ6MH1hcHAtdXBsb2FkLXN0YXRlcntkaXNwbGF5OmJsb2NrfWFwcC11cGxvYWQtc3RhdGVyIHB7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLWFwcHJvdmUtZGV0YWlscyAubG9h''@;'; put 'put ''ZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLWFwcHJvdmUtZGV0YWlscyAubW9kYWxMYXJnZXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWls''@;'; put 'put ''cyAuYWRkZWRSb3d7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5kZWxldGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0''@;'; put 'put ''YWlscyAudXBkYXRlZFJvd3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2h7YmFja2dyb3VuZDojMDAwMDAwMWE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1''@;'; put 'put ''cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2g6aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4NjZ9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+''@;'; put 'put ''LnRvb2x0aXAtY29udGVudCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7Zm9udC1zaXplOi41NDE2N3JlbTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29s''@;'; put 'put ''b3I6I2YwZjFlYztsaW5lLWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3''@;'; put 'put ''cmVtfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZS1kZXRhaWxz''@;'; put 'put ''IC50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlk''@;'; put 'put ''ICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZXtib3JkZXI6MHB4IHNvbGlkfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvZ2dsZS1zd2l0''@;'; put 'put ''Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlQ29udHtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnQgdGR7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsSW5m''@;'; put 'put ''b3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1hcHByb3ZlLWRl''@;'; put 'put ''dGFpbHMgLmFwcHJvdmFsSW5mb3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuYXBwcm92YWxCYWNre2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH1hcHAt''@;'; put 'put ''YXBwcm92ZS1kZXRhaWxzIC5jYXJke21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKDEwMHZoICsgLTBweCkhaW1wb3J0YW50fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRkLmxlZnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGgubGVmdHt0ZXh0LWFs''@;'; put 'put ''aWduOmxlZnQ7d2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGQubGVmdCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0aC5sZWZ0e3RleHQtYWxpZ246bGVmdDtmbGV4OjE7d2lkdGg6MzAwcHghaW1wb3J0YW50fWFwcC1hcHByb3Zl''@;'; put 'put ''LWRldGFpbHMgLnRvb2xse3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH1hcHAtYXBw''@;'; put 'put ''cm92ZS1kZXRhaWxzICNhY2NlcHRCdG4sYXBwLWFwcHJvdmUtZGV0YWlscyAjcmVqZWN0QnRue3dpZHRoOjE3NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xle21pbi13aWR0aDo3NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgY2xyLW1vZGFsIC5tb2RhbC1i''@;'; put 'put ''b2R5LXdyYXBwZXJ7b3ZlcmZsb3c6YXV0b31hcHAtYXBwcm92ZS1kZXRhaWxzIC5yb3dzLW5vdGljZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXplOjE1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAucm93cy1u''@;'; put 'put ''b3RpY2UgY2xyLWljb257bWFyZ2luOjB9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiM5Mzk3MWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuYWRkZWRSb3d7YmFja2dy''@;'; put 'put ''b3VuZDojNTY5OTVmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmRlbGV0ZWRSb3d7YmFja2dyb3VuZDojOGE1YTVhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC51cGRhdGVkUm93e2JhY2tncm91bmQ6I2Zh''@;'; put 'put ''ZmRhOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuYWRkZWRSb3d7YmFja2dyb3VuZDojOTJkMDlhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6I2U2YjNiM31hcHAt''@;'; put 'put ''dml5YS1hcGktZXhwbG9yZXIgLmFwaS1jb2xsZWN0aW9uLWRyb3Bkb3due21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47''@;'; put 'put ''d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhIGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWE+bmd4LWpzb24tdmlld2Vye2hlaWdodDoxMDAlfWFwcC12aXlhLWFw''@;'; put 'put ''aS1leHBsb3JlciAuanNvbi1hcmVhPm5neC1qc29uLXZpZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLXRvZ2dsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5l''@;'; put 'put ''bmRwb2ludC1icmVhZGNydW1ze21hcmdpbjowIDAgMCAxMHB4fWFwcC12aXlhLWFwaS1leHBsb3JlciAucXVlcnktcGFyYW1zIGlucHV0e3dpZHRoOjcwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvcntsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtk''@;'; put 'put ''aXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlO21hcmdpbi1yaWdodDoxMHB4fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgLnNwaW5uZXJ7dmVydGljYWwtYWxpZ246bWlkZGxlfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1p''@;'; put 'put ''bmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnR7bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcHttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcDpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHIt''@;'; put 'put ''c2lnbnBvc3QtY29udGVudCBwOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFue21hcmdpbi1sZWZ0OjEwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWlu''@;'; put 'put ''ZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW4ucnVubmluZ3tjb2xvcjojZTliZjA0fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLnN1Y2Nlc3N7Y29sb3I6IzYwYjUxNX1hcHAtbG9hZGluZy1pbmRp''@;'; put 'put ''Y2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5mYWlse2NvbG9yOiNjOTIxMDB9YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIC5leGNlbC1wYXNzd29yZC1yb290IC5tb2RhbHt6LWluZGV4OjEwNjB9YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIC5t''@;'; put 'put ''b2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYnV0dG9uc3tkaXNwbGF5OmZsZXg7Z2FwOjVweH1hcHAtc3RhZ2UgLnJlamVjdGVke2Nv''@;'; put 'put ''bG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfWFwcC1zdGFnZSAuYWNjZXB0ZWR7Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9YXBwLXN0YWdlIC5iYXNlVGFibGVMaW5re2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifWJvZHlbY2RzLXRoZW1lPWRh''@;'; put 'put ''cmtdIGFwcC1zdGFnZSAuYmFzZVRhYmxlTGlua3tjb2xvcjojNGVjMGZmfWFwcC1zb2Z0LXNlbGVjdCAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDox''@;'; put 'put ''MDAlO291dGxpbmU6bm9uZX1hcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRh''@;'; put 'put ''bnR9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5k''@;'; put 'put ''aWNhdG9ye21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgbGFiZWwuc2Vjb25kTGFiZWxBY3RpdmUgc3Bhbjpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTou''@;'; put 'put ''Nn1hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6NTB2d31hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRo''@;'; put 'put ''OjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciAudGhpblByb2dyZXNze2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9YXBwLWhlYWRlci1h''@;'; put 'put ''Y3Rpb25ze2Rpc3BsYXk6Y29udGVudHN9YXBwLWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHR7bWFyZ2luLXRvcDoxMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuY29weVJpZ2h0IHNwYW57d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1h''@;'; put 'put ''bGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fWFwcC1oZWFkZXItYWN0aW9ucyAudXNlci1uYXYtdG9nZ2xle3BhZGRpbmc6MCAxMHB4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9w''@;'; put 'put ''ZG93bntwYWRkaW5nLXJpZ2h0OjE1cHg7bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1oZWFkZXItYWN0aW9ucyAu''@;'; put 'put ''YXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9YXBwLWhlYWRlci1hY3Rp''@;'; put 'put ''b25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRvbi5kcm9wZG93bi10b2dnbGUgLmJhZGdlLmhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnV7Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfWFw''@;'; put 'put ''cC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuc2VwYXJhdG9ye21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRy''@;'; put 'put ''b3Bkb3duLWl0ZW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0gLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjI2cHg7bWFyZ2luLXJpZ2h0OjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVte3Bh''@;'; put 'put ''ZGRpbmc6MH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLnRvZ2dsZS1zd2l0Y2h7bWFyZ2luOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1oZWFkZXItYWN0aW9u''@;'; put 'put ''cyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLWxvZ291dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDoxNXB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taXRlbSAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hl''@;'; put 'put ''aWdodDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSBpbnB1dHtpbnNldDowO2N1cnNvcjpwb2ludGVyfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBj''@;'; put 'put ''bHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLWhlYWRlci1hY3Rpb25zIC5kZWJ1Zy10b2dnbGUtbGFiZWx7cGFkZGluZy1sZWZ0OjQy''@;'; put 'put ''cHh9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtaGVhZGVyLWFjdGlvbnMgLnNpZGVuYXYtY29udGVudCBhLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjppbmhlcml0O3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiM1NjU2NTZ9fWFwcC1oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsuZC1ibG9j''@;'; put 'put ''ayBzcGFuLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXZhdGFyLWltZ3t3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MHB4fS5jbHItaW5wdXQtd3JhcHBlci5zbWFsbC1tdCAuY2xyLWZvcm0tY29udHJv''@;'; put 'put ''bHttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya117c2Nyb2xsYmFyLXdpZHRoOnRoaW47c2Nyb2xsYmFyLWNvbG9yOiMzYjUyNjggIzI3Mzg0OX1ib2R5W2Nkcy10aGVtZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MTFweH1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDojM2I1MjY4fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiMyNzM4NDk7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjNweCBzb2xpZCAjM2I1MjY4''@;'; put 'put ''fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGNsci1pY29uLmlzLWhpZ2hsaWdodHtmaWxsOiM0ZWMwZmZ9Ym9keSxodG1se2ZvbnQtd2VpZ2h0OjQwMCFpbXBvcnRhbnQ7cGFkZGluZzowO21hcmdpbjowfWJvZHkuc2hvdWxkLWxvZ2luIGNsci1tb2RhbCxodG1sLnNob3VsZC1sb2dpbiBjbHItbW9k''@;'; put 'put ''YWx7ZGlzcGxheTpub25lIWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBidXR0b246Zm9jdXN7b3V0bGluZTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MXB4IHNvbGlkIHJnYigyNTUsMjU1LDI1NSl9Ym9keVtjZHMtdGhlbWU9''@;'; put 'put ''bGlnaHRdIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MXB4IHNvbGlkIHJnYigwLDAsMCl9LnNlbGVjdC10YWJsZS1pY29uLC5zZWxlY3QtbGlicmFyeS1pY29ue3dpZHRoOjgwcHh9W2Nkcy10ZXh0''@;'; put 'put ''PWxhYmVsXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLXRleHQ9bGFiZWxMaW5rXXtsaW5lLWhlaWdodDoxLjghaW1wb3J0YW50fVtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNh''@;'; put 'put ''cHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl06YWZ0ZXIsW2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5dOmJlZm9yZXtkaXNwbGF5Om5vbmV9Lm1vZGFsIC5tb2RhbC1ib2R5e3BhZGRpbmc6MTVweH0ubW9kYWwgLm1vZGFsLWZv''@;'; put 'put ''b3RlcntwYWRkaW5nOjAgMTVweCAxNXB4fS5sb2ctd3JhcHBlcnttaW4taGVpZ2h0OjUwcHg7cGFkZGluZzoxMHB4O21hcmdpbi10b3A6MTBweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MXB4IHNvbGlkICNlMmUyZTI7aGVpZ2h0OjQ4dmg7b3ZlcmZs''@;'; put 'put ''b3c6YXV0b30uc2xpZGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMyMHB4O21hcmdpbi1sZWZ0Ojc1cHg7bWFyZ2luLXRvcDo3MHB4O2hlaWdodDo1cHg7b3ZlcmZsb3cteDpoaWRkZW59LmxpbmV7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTouNDtiYWNrZ3JvdW5kOiM3M2Q1NDQ7d2lk''@;'; put 'put ''dGg6MTUwJTtoZWlnaHQ6NXB4fS5zdWJsaW5le3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6IzczZDU0NDtoZWlnaHQ6NXB4fS5pbmN7YW5pbWF0aW9uOmluY3JlYXNlIDJzIGluZmluaXRlfS5kZWN7YW5pbWF0aW9uOmRlY3JlYXNlIDJzIC41cyBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGlu''@;'; put 'put ''Y3JlYXNlezAle2xlZnQ6LTUlO3dpZHRoOjUlfXRve2xlZnQ6MTMwJTt3aWR0aDoxMDAlfX1Aa2V5ZnJhbWVzIGRlY3JlYXNlezAle2xlZnQ6LTgwJTt3aWR0aDo4MCV9dG97bGVmdDoxMTAlO3dpZHRoOjEwJX19LmFwcC1sb2FkaW5ne2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwdmg7YmFja2dyb3VuZDojMzE0MzUxO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjIwMDA7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MH0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5v''@;'; put 'put ''bmV9LmgtYXV0b3toZWlnaHQ6YXV0b30uaC11bnNldC1pe2hlaWdodDp1bnNldCFpbXBvcnRhbnR9Lm1pbi1oLTUwdmh7bWluLWhlaWdodDo1MHZofS5oLTI0dmgsLmgtMjV2aHtoZWlnaHQ6MjV2aH0uaC03MHZoe2hlaWdodDo3MHZofS5oLTgwdmh7aGVpZ2h0Ojgwdmh9LmgtMTAwe2hlaWdo''@;'; put 'put ''dDoxMDAlfS53LTUwdnd7d2lkdGg6NTB2d30udy0xMDB7d2lkdGg6MTAwJX0udy0xMDAtaXt3aWR0aDoxMDAlIWltcG9ydGFudH0udy00MHt3aWR0aDo0MCV9Lm1pbi13LTB7bWluLXdpZHRoOjBweH0ubXgtNXttYXJnaW46MCA1cHh9Lm15LTV7bWFyZ2luOjVweCAwfS5teS0xNXttYXJnaW46''@;'; put 'put ''MTVweCAwfS5teS0xMC1teC1hdXRve21hcmdpbjoxMHB4IGF1dG99Lm0tMHttYXJnaW46MCFpbXBvcnRhbnR9Lm0tMTB7bWFyZ2luOjEwcHh9Lm10LTB7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubXQtMy1uZWdhdGl2ZXttYXJnaW4tdG9wOi0zcHh9Lm10LTV7bWFyZ2luLXRvcDo1cHh9Lm10''@;'; put 'put ''LTUtaXttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9Lm10LTJ7bWFyZ2luLXRvcDoycHh9Lm10LTItaXttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9Lm10LTEwe21hcmdpbi10b3A6MTBweH0ubXQtMTV7bWFyZ2luLXRvcDoxNXB4fS5tdC0yMHttYXJnaW4tdG9wOjIwcHh9Lm1sLTB7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6MH0ubWwtM3ttYXJnaW4tbGVmdDozcHh9Lm1sLTV7bWFyZ2luLWxlZnQ6NXB4fS5tbC01LWl7bWFyZ2luLWxlZnQ6NXB4IWltcG9ydGFudH0ubWwtMTB7bWFyZ2luLWxlZnQ6MTBweH0ubWwtMTV7bWFyZ2luLWxlZnQ6MTVweH0ubWwtMjB7bWFyZ2luLWxlZnQ6MjBweH0ubWwtMjAt''@;'; put 'put ''aXttYXJnaW4tbGVmdDoyMHB4IWltcG9ydGFudH0ubXItMHttYXJnaW4tcmlnaHQ6MH0ubXItNXttYXJnaW4tcmlnaHQ6NXB4fS5tci01aXttYXJnaW4tcmlnaHQ6NXB4IWltcG9ydGFudH0ubXItMTB7bWFyZ2luLXJpZ2h0OjEwcHh9Lm1yLTEye21hcmdpbi1yaWdodDoxMnB4fS5tci0yMHtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6MjBweH0ubWItMHttYXJnaW4tYm90dG9tOjB9Lm1iLTBpe21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9Lm1iLTV7bWFyZ2luLWJvdHRvbTo1cHh9Lm1iLTEwe21hcmdpbi1ib3R0b206MTBweH0ubWItMTAtaXttYXJnaW4tYm90dG9tOjEwcHghaW1wb3J0YW50fS5tYi0x''@;'; put 'put ''NXttYXJnaW4tYm90dG9tOjE1cHh9Lm1iLTIwe21hcmdpbi1ib3R0b206MjBweH0ubWItMzB7bWFyZ2luLWJvdHRvbTozMHB4fS5wLTB7cGFkZGluZzowfS5wLTEwe3BhZGRpbmc6MTBweH0ucGItMHtwYWRkaW5nLWJvdHRvbTowfS5wYi0xMHtwYWRkaW5nLWJvdHRvbToxMHB4fS5weS01e3Bh''@;'; put 'put ''ZGRpbmc6NXB4IDB9LnB5LTEwe3BhZGRpbmc6MTBweCAwfS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50e2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmJhY2tncm91bmQtdHJhbnNwYXJlbnQtaXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNv''@;'; put 'put ''bG9yLWdyYXl7Y29sb3I6IzVhNWE1YX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbG9yLWRhcmstZ3JheXtjb2xvcjojNDk1OTY3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZGFya2VyLWdyYXl7Y29sb3I6IzMxNDM1MX0uY29sb3Itd2hpdGV7Y29sb3I6I2ZmZn0uY29sb3Itd2hp''@;'; put 'put ''dGUtaXtjb2xvcjojZmZmIWltcG9ydGFudH0uY29sb3ItZ3JlZW57Y29sb3I6IzRiOWU0Yn0uY29sb3ItZGMtZ3JlZW57Y29sb3I6IzgxYjQ0MH0uY29sb3ItcmVke2NvbG9yOiNlNDU0NTR9LmNvbG9yLW9yYW5nZXtjb2xvcjojZTY3ZTIyfS5jb2xvci1ibHVle2NvbG9yOiMzZjhjYzN9LmNv''@;'; put 'put ''bG9yLXllbGxvd3tjb2xvcjojZjFjNDBmfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLWRlZnVhbHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1kZWZhdWx0LWl7Y3Vyc29yOmRlZmF1bHQhaW1wb3J0YW50fS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50e2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnR9LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZm9udC1zaXplLTE1e2ZvbnQtc2l6ZToxNXB4fS5mb250LXNp''@;'; put 'put ''emUtMTh7Zm9udC1zaXplOjE4cHh9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZvbnQtYm9sZC1pe2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnR9LmZvbnQtd2VpZ2h0LTMwMHtmb250LXdlaWdodDozMDB9LmZvbnQtd2VpZ2h0LTcwMHtmb250LXdlaWdodDo3MDB9LndvcmQtYnJlYWt7''@;'; put 'put ''d29yZC1icmVhazpicmVhay13b3JkfS53b3JkLWJyZWFrLWFsbHt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5kLW5vbmV7ZGlzcGxheTpub25lfS5kLWJsb2Nre2Rp''@;'; put 'put ''c3BsYXk6YmxvY2t9LmQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kLWZsZXh7ZGlzcGxheTpmbGV4fS5kLWNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXgtdW5zZXR7ZmxleDp1bnNldH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZH0uYWxpZ24t''@;'; put 'put ''c2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlci1pe2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXIhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0u''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1nYXAtNXtnYXA6NXB4fS5jbHItZ2FwLTB7Z2FwOjB9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30uei1pbmRleC1oaWdo''@;'; put 'put ''ZXN0e3otaW5kZXg6MTAwMDAwMDB9LnZlcnRpY2FsLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lmljb24tZGMtZmlsbHtmaWxsOiM4MWI0NDB9LmRhdGFncmlkLWN1c3RvbS1mb290ZXIgLmRhdGFncmlkLW91dGVyLXdyYXBwZXIsLnRleHQtYXJlYS1mdWxsLXdpZHRoIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXIsLnRleHQtYXJlYS1mdWxsLXdpZHRoIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWF7d2lkdGg6MTAwJX0udGV4dC1hcmVhLWZ1bGwtd2lkdGggY2xyLXRleHRhcmVhLWNvbnRhaW5lcnttYXJnaW46MCFpbXBvcnRhbnR9LnRleHQtYXJlYS1mdWxs''@;'; put 'put ''LXdpZHRoIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9LnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDotNnB4IWltcG9ydGFudDtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7ei1pbmRleDoxMDAwMCFpbXBvcnRhbnR9LnByb2dyZXNzLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWN7YmFja2dyb3VuZC1jb2xvcjojZjVmNmZlO2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6NnB4O21hcmdpbjowO21heC1oZWlnaHQ6LjU4MzMzM3JlbTttaW4taGVpZ2h0Oi4xNjY2NjdyZW07b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7d2lkdGg6Y2Fs''@;'; put 'put ''YygxMDAlIC0gNjNweCl9LnByb2dyZXNzLmxvb3A6YWZ0ZXJ7YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1sb29wZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtjb250ZW50OiIgIjt0b3A6LjE2NjY2N3JlbTtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9j''@;'; put 'put ''aztiYWNrZ3JvdW5kLWNvbG9yOiM2MGI1MTU7d2lkdGg6NzUlfS5iYWRnZS13YXJuaW5ne2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhIC5jYXJkLWhlYWRlciBoM3ttYXJnaW4tdG9wOjEwcHh9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtw''@;'; put 'put ''YWRkaW5nOjE1cHggMTVweCAwfS5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0uc2hvdy1jbG9zZSAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2''@;'; put 'put ''ZTt0b3A6LTE4cHg7cmlnaHQ6LTEwcHh9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojZDk0YjJlO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmV9LmNhcmQtaGVhZGVye2ZvbnQtd2VpZ2h0OjMwMH0uc2VsZWN0IHNlbGVjdDpmb2N1c3tib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCAjNDk1OTY3O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZyx0cmFuc3BhcmVudCA5NSUsIzQ5NWE2NyAwKSBuby1yZXBlYXR9LmNsci10cmVlbm9kZS1jaGlsZHJlbnttYXJnaW4tbGVmdDouMnJlbSFpbXBvcnRhbnR9LnRhYmxlLWFjdGl2ZTpmb2N1c3tiYWNrZ3JvdW5k''@;'; put 'put ''OiNkOGUzZTl9Y2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcixjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0e3dpZHRoOjEwMCV9dGJvZHl7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6NDAwfWgzLGg0e2NvbG9yOiM1ODU4NTg7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxcmVtO21hcmdpbi10b3A6MXJlbTttYXJnaW4tYm90dG9tOjB9aDEsaDJ7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNw''@;'; put 'put ''YWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjJyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1jbHItaWNvbi5pcy1pbmZve2ZpbGw6IzgwYjQ0MX0uZGF0YWdyaWQtaG9zdCwuZGF0YWdyaWQtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTotd2Vi''@;'; put 'put ''a2l0LWJveCFpbXBvcnRhbnR9LmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi5idG4td2FybmluZ3tib3JkZXItY29sb3I6I2VmNGYyZTtiYWNrZ3JvdW5kLWNvbG9yOiNkOTRiMmU7Y29sb3I6I2ZmZn0uYnRu''@;'; put 'put ''LmJ0bi1zbTpoYXMoY2xyLWljb24pe2xpbmUtaGVpZ2h0OjJ9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZmxleC0xe2ZsZXg6MX0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZs''@;'; put 'put ''ZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uYm9yZGVyLTB7Ym9yZGVyOjB9LmJveC1zaGFkb3ctbm9uZXtib3gtc2hhZG93Om5vbmV9LmJveC1zaGFkb3ctbm9uZS1pe2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9Lmh0Q3VzdG9tSGlkZGVue2Rpc3BsYXk6bm9uZX1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXSAuaHREYXJre2JhY2tncm91bmQ6Izg4ODtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmh0RGFya3tiYWNrZ3JvdW5kOiMzYzU2NjI7Y29sb3I6I2VlZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5kYXJrVEg6bm90KC5w''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGUpe2JhY2tncm91bmQ6IzQ4N2Q5Njtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmRhcmtUSC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQ6IzNiNmI4MX0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Nv''@;'; put 'put ''bG9yOiM4MjgyODJ9LmhhbmRzb250YWJsZS5saXN0Ym94e3BhZGRpbmc6NXB4IDAgNXB4IDVweDtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQ6I2U2MjcwMGFkIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHJl''@;'; put 'put ''ZCFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAubnVtZXJpY0xpc3Rib3h7dGV4dC1hbGlnbjpyaWdodH0ubWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51bnZpc2libGV7dmlzaWJpbGl0eTpo''@;'; put 'put ''aWRkZW59Lm5vLWJvcmRlcnN7Ym9yZGVyOjB9LmNhcmQubm8tYm9yZGVycywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtZm9vdGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtaGVh''@;'; put 'put ''ZGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtYmxvY2ssLmNhcmQubm8taW5uZXItYm9yZGVycyAuY2FyZC1mb290ZXJ7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LmQtc20tbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLXNt''@;'; put 'put ''LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1zbS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1zbS10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1zbS10YWJs''@;'; put 'put ''ZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtc20tZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXNtLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHIt''@;'; put 'put ''ZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLXNtLTV7Z2FwOjVweH0uY2xyLWdhcC1zbS0we2dhcDowfX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1tZC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1w''@;'; put 'put ''b3J0YW50fS5kLW1kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbWQtdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbWQtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwh''@;'; put 'put ''aW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1tZC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9u''@;'; put 'put ''OnJvd30uY2xyLWdhcC1tZC01e2dhcDo1cHh9LmNsci1nYXAtbWQtMHtnYXA6MH19QG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbGctaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1sZy1pbmxpbmUtYmxvY2t7''@;'; put 'put ''ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLWxnLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLWxnLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3Bs''@;'; put 'put ''YXk6ZmxleCFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtbGctNXtnYXA6NXB4''@;'; put 'put ''fS5jbHItZ2FwLWxnLTB7Z2FwOjB9fS5kYXRhZ3JpZC1ib2R5e3BhZGRpbmctYm90dG9tOjJyZW0haW1wb3J0YW50fS5hYm9ydE1zZ3t3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTptb25vc3BhY2V9I2dyYXBoIHN2Z3toZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5uby10YWJsZS1z''@;'; put 'put ''ZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDt3aWR0aDox''@;'; put 'put ''MDAlO2hlaWdodDoxMDAlO3RvcDowfS5jb3B5UmlnaHR7YmFja2dyb3VuZDojNDk1OTY3IWltcG9ydGFudDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMCA0cHg7ei1pbmRleDox''@;'; put 'put ''MDB9Lm5hdi10cmVlPmNsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1jbHItdHJlZS1ub2Rle292ZXJmbG93LXk6dmlzaWJsZX1jbHItdHJlZS1ub2RlOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZSAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNhcmV0e3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7cGFkZGluZzowIDhweDt3aWR0aDphdXRvO2hlaWdodDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn1jbHIt''@;'; put 'put ''dHJlZS1ub2RlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90dG9tOjVweH0udHJlZS1zZWFyY2gtd3JhcHBl''@;'; put 'put ''cntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206''@;'; put 'put ''MDttYXJnaW46MCAwIDNweDtjdXJzb3I6cG9pbnRlcn0uY2xyLXRyZWUtbm9kZXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0uY29udGVudC1jb250YWluZXJ7d2lkdGg6MTAwJX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7Lnd0SG9sZGVye3dpZHRoOjEwMCUhaW1wb3J0YW50fX1p''@;'; put 'put ''bnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtjbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtwYWRkaW5nLWJvdHRvbToyMHB4O21pbi1oZWlnaHQ6YXV0b30uY2xy''@;'; put 'put ''LXRyZWUtbm9kZXttaW4taGVpZ2h0OjI0cHh9LmNsci10cmVlbm9kZS1jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29ue21pbi13aWR0aDoxNnB4O21pbi1oZWlnaHQ6''@;'; put 'put ''MTZweH0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbntib3R0b206MnB4fS5jb250ZW50LWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0uY29udGVudC1hcmVhPi5jYXJke21hcmdpbi1ib3R0b206MjBweH0ucmVjb3JkLWVkaXQtbW9kYWwgdGV4dGFyZWF7bWluLWhlaWdodDo0MnB4fX0uYm9y''@;'; put 'put ''ZGVyLWJvdHRvbS1kaXZpZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9LmxvYWRpbmdTcGlubmVye2hlaWdodDo3MHZoO2ZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5k''@;'; put 'put ''aXNhYmxlLXBhc3N3b3JkLW1hbmFnZXJ7LXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2M7LW1vei10ZXh0LXNlY3VyaXR5OmRpc2M7dGV4dC1zZWN1cml0eTpkaXNjO2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzY30ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9aHIubGlnaHR7Ym9y''@;'; put 'put ''ZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RlZGVkZX0uc3Bpbm5lcntiYWNrZ3JvdW5kOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NwaW5uZXIuMTZmNzYzY2ViYzZiNjRkZi1zdmcpIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvY2FyZXQuNjVmMWZjMGFjYmU0YzdmZi1zdmcpIWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJr''@;'; put 'put ''XSAudGFibGUtc2VhcmNoLXdyYXBwZXJ7YmFja2dyb3VuZDojMjEzMzNifS50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi13aWR0aDoxNzBweH0udGFibGUt''@;'; put 'put ''c2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE5cHg7dG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29u''@;'; put 'put ''e2N1cnNvcjpwb2ludGVyfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBbbmFtZT1zZWFyY2gtaW5wdXRde3BhZGRpbmctcmlnaHQ6MjVweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lcnttYXJnaW4tdG9wOi01cHg7bWFyZ2luLXJpZ2h0OjB9''@;'; put 'put ''LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXIgbGFiZWx7ZGlzcGxheTpub25lfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItY2hlY2tib3gtY29udGFpbmVye21hcmdpbi10b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bp''@;'; put 'put ''bi1idXR0b24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dFt0eXBlPW51bWJlcl17LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0u''@;'; put 'put ''ZGMtbG9ja2VkLWNvbnRyb2x7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fS5saW5rLWl0e2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Cg=='';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=caret-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-library-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAG7CAYAAACLjj9uAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecVNW9x0+7907dQhNLYmLLS4wmStmOYIslGk0sicanRo0JILALqIltLXRYECtJjGkmKinGhiCwC1soorFEk5iosWEBtszutFvOee8uDM7OzrLT596Z/37ey8rOOf/y/Z+Z39x7T8EIfoAA''@;'; put 'put ''EAACQAAIAIGsEsBZtQ7GgQAQAAJAAAgAAQRiC4MACAABIAAEgECWCYDYZhkwmAcCQAAIAAEgAGILYwAIAAEgAASAQJYJpC229zVP9Zgxjo4JtMur82vH/yyQ5fjBfJ4IPL6v7rHuL5pyf1+eQgK3RUYg8tkzdfL9foyReKjtB96ran/ZW2QYIF2bEBggtg83X+EIGOIPCvZ8HSOKMSYYIRxp0/8b''@;'; put 'put ''7/u3+aL5GkYYMSq7zVf6Xx7+R+xtsu/X8O2HaiESNmEGmfbPABOp2MtU3ilkknBtIoUxO8QWyGY5p4CpoLqkPV5j3qRpv18Tpqsbql8gMcChEJF/7/2973XzlxBYGOb/EkxoiPted1J+/pVTfhVK2CE0BAI5IDDgHXl/6yXlSO79d8jwjcyBb3ABBIAAEMgoAZm4exzcfcTV1as7M2oYjAGBNAkM''@;'; put 'put ''ENtVO84ZJTj+d0DvKUvTLnQHAkAACOScgEScPRhrR06v2LAn587BIRA4AIEBYvtA+/ljkMTfDOrdpUANCAABIGA3AhJxdGscHdlQvRaubO1WvAKPd5DYYln8O6B1lRR43pAeEAACBUgAxLYAi1ogKQ0SWyKjt/xaZ/8MY/gBAkAACNiJAIitnapVXLHGEVv8tl/b4y4uDHuz5ULXCGZSsrmbEyIN''@;'; put 'put ''oYXMmdoCcZ5sf2h/YAKMKC6zhcG1MCWSMhyvvfVQg8O1K4bXI+ySyVXn4f4le2bfyH8n2v+zWcOJ9tjfLt505/2fT+bqB0YU53BWTbGlGjtiat0zXcO1hdeBQC4JDBTbV84fI+nSB77wJ3EFRwjBBSIXC52/SBDSdSUsJE6Exknu1gXE0JGT8K0ZoQPGqTn35pHsNw1/dEw2WWUqO4M5rZkadKay''@;'; put 'put ''dAihIe6xDFWjRGqR69zTeUOnzM10uo+dFOSpsU8n8H19NWPoz4Z4ddAMOuS4FIgwGUvHIkyfoYTJ8cIDsc1A0cBEVggMElvFcH7SHfowrjMhOHeotHTalBabSEpWmIFRIAAE8kRgUVuNVwj1A5m64s4rAbHNU2HA7bAEkhZb3ucsmfuNdQMuIIb1Ag2AABAAAhkgsHJrRYlfNd5TmDvuigkQ2wxA''@;'; put 'put ''BhNZIQBimxWsYBQIAIFsENh7ZRv+QKbuoa5se6jGvgjPbLNBH2ymQwDENh160BcIAIGcEth3G/lDmbq88RxLxNGjK+Ev1J/Q0p3TwMAZEBiGAIgtDBEgAARsQwDE1jalgkBjCIDYwpAAAkDANgRAbG1TKggUxBbGABAAAnYlcF/zZE8v8++E28h2rWDxxp3sla3B+5ylMBu5eAcMZA4E8kkgEbGV''@;'; put 'put ''mXH4tePX9+QzTvANBGIJgNjCmAACQMA2BPaKbWCnTJ1DTpACsbVNOYsqUBDboio3JAsE7E1g7zNbzRTbuHuLmbORQWztXeNCjR7EtlArC3kBgQIkAGJbgEUtkpRAbIuk0JAmECgEAuYOUgFNfHiAK9tumRlfgGe2hVDtwsoBxLaw6gnZAIGCJrBwx7hSFKQfgNgWdJkLMjkQ24IsKyQFBAqTwMId''@;'; put 'put ''p5aioO+AYqsr4S/CDlKFWX87ZzVIbIk69Hm2QnBY+mPnakPsQMDmBEyxxUHfB9LQE6S6QWxtXuQCDT+pw+NBbAt0FEBaQMAmBEBsbVIoCHMQgQFiu/KlM0crhvMdv7Yn7tncILYwgoAAEMgngeXNk8tUFngfrmzzWQXwnQoBENtUqEEfIAAE8kIAxDYv2MFpBgiA2GYAIpgAAkAgNwQWtNaWE6S+''@;'; put 'put ''B1e2ueENXjJHII7YOt72a51xd2eB28iZAw+WgAAQSJ4AiG3yzKCHNQiA2FqjDhAFEAACCRBIRGypxo6YWvdMVwLmoAkQyBkBENucoQZHQAAIpEugqaNqhGYY7x7oNjKIbbqUoX82CIDYZoMq2AQCQCArBEBss4IVjOaAAIhtDiCDCyAABDJDAMQ2MxzBSu4JgNjmnjl4BAJAIEUCw4ktI0o30yR4''@;'; put 'put ''ZpsiX+iWPQKw9Cd7bMEyEAACGSYAYpthoGAuZwRAbHOGGhwBASCQLgEQ23QJQv98EQCxzRd58AsEgEDSBIZb+gO3kZNGCh1yRADENkegwQ0QAALpEwCxTZ8hWMgPARDb/HAHr0AACKRAYLi9keHKNgWo0CUnBEBsc4IZnAABIJAJAiC2maAINvJBAMQ2H9TBJxAAAikRGO48W7iyTQkrdMoBARDb''@;'; put 'put ''HEAGF0AACGSGAIhtZjiCldwTALHNPXPwCASAQIoE4DZyiuCgW94JgNjmvQQQABAAAokSALFNlBS0sxqBeGL7X7+2xxUvUCE4533OkrnfWOe3WiIQDxAAAoVPAJb+FH6NCzVDENtCrSzkBQQKkEACO0h1MU06Es6zLcDi2zwlEFubFxDCBwLFRMAUW9Uw3pWp0xMvb0YUENtiGhA2yhWe2dqoWBAq''@;'; put 'put ''ECh2AkubJ4/SWeCdA4mtoahH1J/Q0l3srCB/axEYILardpwzCgnJfGbrhme21ioURAMEgABCKzfXjQ7g8NsgtjAa7EYgabE1JHro9RNbPrZbohAvEAAC9iewYuspB4W13v9IQ95GljsNRTsSrmztX+tCyyCO2LJ3/Fpn3OchQgguU8/Vugg0myCECDPzt65JmBKOdSwG2IuGZb4eD57BiYj+OxN4''@;'; put 'put ''wL8TAR7tdyg/FEv9/g3tsxjJUDHta3sg3xRzbIi9sUf/94Cchdb/Oo/JMZGcYttEx2ocIL5ILNG/k/UXySvSj+7LI9pOdE5UGrpmRpy+w8UTqVVsvcx/J8phf+w4/rgbLoZEXo/lFMsr0bpH84sen0ONgdj6m7WObWvoQ78XE8ktmTaUDa7//vdGVP0jPA40Xky/aoxzrCKdMF01BNYkIh2v8/Bf''@;'; put 'put ''GJEd8WJkRO5UmDji2vHre5LJAdoCgWwTGPAmvXfb+SMZQe8EtE7vUI650DUuuGG+jhGO9B9SZLOdQPbs788twy5E1JeJaGzmn9PwaZqK/poSMR35W/Trsa+llWF0PmkZSrGzFYde0t8XU8g9l3mnnE9KHcWAgRz5h+j/MUFJ1BF3aaL5mim2cGWbwnCCLlknEEdsxdsBrask657BARAAAkAgwwRA''@;'; put 'put ''bDMMFMxljACIbcZQgiEgAATyTcAUW6bJR8E623xXAvzHEhi09Ec2lLcCWteQt5EBIRAAAkDAqgQYUToJNo6ZXrFhj1VjhLiKk8AAsb1v+1ljKVbePNAz2+LEBFkDASBgBwLmphYKU465dvxTu+0QL8RYPAQGiO09L517iFO43vOFP6LFgwAyBQJAoFAImGJLsHE0XNkWSkULJ48BYnt/6yXlsuTa''@;'; put 'put ''iAzjYC6M/hnH5gxZbE483v8TmdaKzcnIOMw+HqMagSGJOIwxHxGkGHivmajpttF2Y2dWpjSJMeWqiIHzeFO2k0zHgUyH7jl8bEPPBk6UYprzWhNNJRk8SbYdyCCBvIfHmmQEiTVPY7Z5lIPk6pW6z/iFHfq9OhDqvqnD/XHvrc/e2cTmMiHe/2+MCRVIZwGy86Ch+DHiQJI28j2EEUci+nNoYI/I''@;'; put 'put ''yoiA3vOqgpzfmzZldV9iNYFWQCA3BAa9b3/zymXu3s4Q9o5wCPO3GYZXdfS/OYIjnf2//WqXKA+7he4Mlwpm/KtP/aR0qHCduPyLP6564r+ZTEcIhO9Zc6Y8lM2xh3vEx+/27c9txllrwpn0D7aAQKERWPnsmUpiOR0V0+w//f8233MXHbs6donssCZXbf72wV34g3/J1Bl3nohC3bsJL5kQFMYn''@;'; put 'put ''pjHzc8e9y69ddNFqI/I54HUehLsUf//73RfepTVOadGHdQwNgECOCST3JTkmOFOYQ1r4gz71k7Kh4lZlqexGWGCe47KCOyBgDwKL2mq8nIffV5g77hd2B/N2hiV2ZP0JT8Bex/YoKUQ5BIE0xfZ0d0grfb9P/bR8KMI4jMvrp8Cm4DACgQAQGExg4fPjSoWC31OYO+7afhcr6eZhfgQs5YHRY3cC''@;'; put 'put ''aYntkldOd5fqZR/2hYe+jQxia/chAvEDgewRMMUWOfB7Mo0vtk5W2mMIeuT0ir/AUp7slQEs54BAWmL7m1dOd4dAbHNQJnABBAqTwHBXtk5W6jMEPQLEtjDrX0xZZUBsy3f2hT8ecntHuLItpuEEuQKB5AgkILY9hIijYN1sclyhtfUIgNharyYQERAoGgIgtkVT6qJPFMS26IcAAAAC+SOwvHly''@;'; put 'put ''WZj1vXugZ7ZwZZu/+oDnzBEAsc0cS7AEBIBAkgRAbJMEBs1tSwDE1ralg8CBgP0J7BVb/3sydcXd1MKcjQxXtvavM2QwYBvG5HGYs5HD+siPesM7hzwlCCZIJc8VegCBYiEAYlsslYY8076yBbGFQQQEgECqBBa01pZjFH4XrmxTJQj97EIAxNYulYI4gUABEgCxLcCiQkpxCYDYwsAAAkAgbwSa''@;'; put 'put ''OqpGqIb+X7iyzVsJwHGOCIDY5gg0uAECQGAwARBbGBXFQgDEtlgqDXkCAQsSGF5svT2EYNhByoK1g5CSIwBimxwvaA0EgEAGCczfNnEkUcU7Q99GBrHNIG4wlUcCaYntfa9f6JFDbCcs/cljBcE1ELAxgUTE1hASnPpj4xpD6HsJpC22Uoh8CAcRwHACAkAgFQKJiC3cRk6FLPSxGgEQW6tVBOIB''@;'; put 'put ''AkVEYGnzuFE6I2/DbeQiKnqRpgpiW6SFh7SBgBUIJHJlC7eRrVApiCFdAiC26RKE/kAACKRMIJErWxDblPFCRwsRALG1UDEgFCBQbARAbIut4sWbL4ht8dYeMgcCeSewT2zfkqmrJF4wLlbSrQt21PSKv+zJe7AQABBIg0BaYmue+hPSy3fCbOQ0KgBdgUARE9j7zJa/PdTh8SC2RTw4Cix1ENsC''@;'; put 'put ''KyikAwTsRADE1k7VgljTIQBimw496AsEgEBaBEBs08IHnW1EAMTWRsWKF2pTR5VT455yig2JEnlQPSWuCm3f3xnhg17XVSOtMRAbU7wYBrXBg+PIVBkMQUSsLYOr/X9jMu3/rfO9bUw2kbaRv/W3IxwLxgjWGcdqYM+0KS19mYoP7AwkAGILI6JYCKT1QQvPbPM/TJZvOfm2oNYz08E85fmPprAi''@;'; put 'put ''0IyQ3+s4+JefuqQ5jceuVgsrO2tkA2JrjTpAFNknAGKbfcZZ9XDvtnNWqobvuqw6KWLjpY7DfutV1KsvArHNyigwxRaH+dsKc8Ns5KwQBqNWIQBia5VKpBjHA9u/dXdQ756RYnfoNgyBcvlzD6nI9eNrx/9MA1iZJwBim3mmYNGaBEBsrVmXhKMCsU0YVUoNS5SDf26IkmkgtinhG7YTiO2wiKBB''@;'; put 'put ''gRAAsbV5Ie9/4byVIa0LbiNnqY5eeewD14x/bGqWzBe9WRDboh8CRQMAxNbmpQaxzW4BPdLoe3444Y9wmz5LmEFsswQWzFqOAIit5UqSXEDDiS1BLIQx1QXi+5a5YGH+RHmJHQMxS2f6/zloOU1yUVquNUYIY4wRFoIzgQznUBG62Ii7fzTxL7Msl0GBBARiWyCFhDSGJQBiOywiazc40DNbc+kK''@;'; put 'put ''w55zZtduaLZ2FvmLblnb5EpMxJahxbZ8xY8mPlGfvwgL2zOIbWHXF7L7jACIrc1Hw4HEVgjOdcG/ckNt+79snmbWwl/RVvMlTtg/h3LgpGXLf1zx14asBVDkhhMR24CuHtlQvbazyFFB+jYnAGJr8wI+sP28FUG9a+ZQaXCdHztnUusbNk8za+Eva609BlM65JcRh1TaNHXCk7OzFkCRGx5ObB3M''@;'; put 'put ''2x3SNRDbIh8nhZA+iK3Nqzjc0h8d83HXV7W+ZPM0sxY+iG3W0CZkeFixlbxdIU07Cq5sE8IJjSxMAMTWwsVJJLThJkgZQjtubk3H3xOxVYxtFrXVfEk6wG1khZUumzbxyTnFyCYXOYPY5oIy+LACARBbK1QhjRhAbNOAhxBa2jH5fwgS/xjKCohtenyH6w1iOxwheL1QCIDY2rySILbpFXD5lklf''@;'; put 'put ''FgIP+UwbxDY9vsP1BrEdjhC8XigEQGxtXslV2867x290TR8qDbiNfOACL91c9xXCyOtDXtmS0mXTKuE2crbeJiC22SILdq1GAMTWahVJMp5V2759j9/YM6TYqlz/6o217UOKSZLuCq75kvbJX6VYvAa3kfNTWhDb/HAHr7knAGKbe+YZ9Qhimx7Opo5JxyGEXwWxTY9jqr1BbFMlB/3sRgDE1m4V''@;'; put 'put ''i4kXxDa9Ai7ZWnc85eQVENv0OKbau6mjakRY194Z6jxbByz9SRUt9LMYARBbixUk2XBAbJMlNrD9stbar2FKXx7KCmxqkR7f4XrDle1whOD1QiEAYmvzSoLYplfA4a5sYbvG9PgO1xvEdjhC8HqhEACxtXklQWzTKyCIbXr80u0Nt5HTJQj97UIAxNYulRoizuHW2cJs5AMXeLjZyC4Gp/5k8y0C''@;'; put 'put ''YptNumDbSgRAbK1UjRRiAbFNAVpUl6a2mmMRYUNuZwm3kdPjO1xvENvhCMHrhUIAxNbmlRxObGFTi/SubEFss/sGAbHNLl+wbh0CILbWqUVKkQx36g9C4viG6s1DbtqQktMC6jTcbWQQ2+wWG8Q2u3zBunUIgNhapxYpRXL/9nOXh/SeWUN1hvNsD4x1uO0aHVJ509QJT8B5timNzuE7gdgOzwha''@;'; put 'put ''FAYBEFub1/GBbec0BQ1ffbw0DK5rmJOvw+HxQxd5uCtbOIggu28QENvs8gXr1iEAYmudWqQUyX1bz1ka5r64V14G18Iy9f6vykWLadyzz0OYOuLWXSI61jgT8QKJvGb+jn59qPYpJRPTKdbXgWwyEj+n+H38/X/WeVhwrtRoPPTHoWwr1Lt4WsXTN2QiH7AxmACILYyKYiEAYmvzSt+37axFYcN/''@;'; put 'put ''/VBpECwhgpjNs8xe+BzpiAttSAcycS+YXvnsT7MXQXFb3ie2byvMXRqPBGzXWNzjo5CyB7G1eTVXbjtzoW4E4MorS3WUqGPedRVrb86S+aI3C2Jb9EOgaACA2Nq81CC22S0gJY47Z1auvTW7XorXOoht8da+2DIHsbV5xe/bevbSMO+D2bJZqiPFyu0zq9Y1Zsl80ZsFsS36IVA0AEBsbV7qVdu/''@;'; put 'put ''c79f3/1jm6dh2fAJke+YVfn8bZYN0OaBgdjavIAQfsIEQGwTRmXNhr986bJHukPvXWLN6OwflUy9S6ZXPD3kBDT7Z5jfDEBs88sfvOeOAIht7lhnxdN9289dGtQ6Z2bFeJEb1Yxgr0PyLquvaplX5Ciylj6IbdbQgmGLEQCxtVhBkg3n8ccvpG+M3iWVKOH+WvrCStx1ssnaLfb2Jk/WXcbH9nn0''@;'; put 'put ''iy5abRQ7j2zlD2KbLbJg12oEQGytVhGIBwgUEQEQ2yIqdpGnCmJb5AMA0gcC+SQAYptP+uA7lwRAbHNJG3wBASAwgACILQyIYiEAYlsslYY8gYAFCYDYWrAoEFJWCKQttmF95Ee94Z3eoaLDYVxeP6WlOyvRg1EgAARsTQDE1tblg+CTIABimwQsaAoEgEBmCYDYZpYnWLMuARBb69YGIgMCBU8A''@;'; put 'put ''xLbgSwwJ7iOQdbFVZansxvHre4A4EAACQCCWAIgtjIliIQBiWyyVhjyBgAUJgNhasCgQUlYIgNhmBSsYBQJAIBECILaJUII2hUAAxLYQqgg5AAGbEtgrturbCvOUxkvBIXm7Qpp2VEP12k6bpghhA4F+AiC2MBCAABDIGwEQ27yhB8c5JgBim2Pg4A4IAIHPCIDYwmgoFgIgtsVSacgTCFiQQCJi''@;'; put 'put ''i0LiyKl1z3RZMHwICQgkTADENmFU0BAIAIFMEwCxzTRRsGdVAiC2Vq0MxAUEioAAiG0RFBlS7CcAYgsDAQgAgbwRALHNG3pwnGMCILY5Bg7ugAAQ+IwAiC2MhmIhAGJbLJWGPIGABQmA2FqwKBBSVgiA2GYFKxgFAkAgEQIgtolQgjaFQADEthCqCDkAAZsSWNBaW45E8J0D7SAFS39sWlwIewAB''@;'; put 'put ''EFsYEEAACOSNAIht3tCD4xwTALHNMXBwBwSAwGcEQGxhNBQLARDbYqk05AkELEjAfGar6upbMvOUxQvPPIgAbiNbsHAQUtIEQGyTRgYdgAAQyBSBRMQWTv3JFG2wk08CILb5pA++gUCREwCxLfIBUETpg9gWUbEh1cEEVm49s4RpvZTLClENJhyGX/Riod9Q294LvLJPAMQ2+4zBgzUIgNhaow4Q''@;'; put 'put ''RY4IPNB++hjElK8KjC+gmNb4Qp8ezpHOorYuFQghPsL5hY+ccsm/e4IfvEwRXa0K450ZlWt8OQqzaNyA2BZNqYs+0ayLLQ7j8vopLd1FTxoA5I1AY/NkNkJhxxGqzPaFPj5DorKbEtmRaEA6V4MOWrITY/J7QvD90yY++3GifaHdgQmA2MIIKRYCILbFUukizNMU2TKZnhAwfHdSTGol6nCni0Ei''@;'; put 'put ''zg8RMn6DdHTvdbXP70zXXrH3B7Et9hFQPPmD2BZPrYsq06U7Jo+iKp2ncf9ljCjOeMlzYWgG1zSBuIEQEv3/hzAmmFKCmUwwNW8vx/3Rufa2g7l/rLDO5mvHv6gVFdwMJgtim0GYYMrSBEBsLV0eCC4VAstbTzmCE+0xjPH42P5CCNGn7Xnfzcr+GtT61hHD8cJNp277JLrd0uZxo8JYP06RPZOJ''@;'; put 'put ''YBcLJI7BGMd9r0jE/Qw39Btn1qz7eyqxFnsfENtiHwHFkz+IbfHUuigyXdo6uRYT47cYky9EJ8yFoUvE2RxSux8Mcve6xiktfYkAWbVjnBTQvIeGdf+tAolvK9RdGttPM0J+Fy19REP6HQ3VGz9MxC602UsAxBZGQrEQALEtlkoXQZ53d0w5RQjyMMf656LTDWm+lwlVfurylW+ccdaacKoozK0F''@;'; put 'put ''GeFXqnrgJ06pdFSsHdXw90jY9XNFkhZOr9iwJ1U/xdQPxLaYql3cuYLYFnf9Cyb7pe2TJgW1zt+75ZGHRpIyuKZS6rgHh/hdmZwRv3j75LFM53cZXP8+JZISCzGk9b7mlcfM2FPi7Wg8drVaMJCzkAiIbRaggklLEgCxtWRZIKhkCCzfMvkLYS3wnMycX4r004xwgAvjbnffqNvTuZo9UBxL2iee''@;'; put 'put ''rBt8oUQdJ8ROpjK4FlZoyTpMjDv2BLSXG6e06MnkVCxtQWyLpdKQJ4gtjAFbEzB3gBJC/7Mh1FOirmjDlEjfa6je9JdcJLe4teqbjCrLEeJHmrOZo30KwTlC9A+c8VvmVmx+Jxfx2MkHiK2dqgWxpkMAxDYdetA3rwSEQLipfVITwmhmZLYwF7pGBLmpobZ1SS6DW/nsmYrfs/smgfRpDlYyItY3''@;'; put 'put ''RnQXIWRxSA+ugq0gP6OTiNhyLh09veIv8Aw8lwMafGWcQNpiq+ojPvaFP/IMFRnsIJXxmoHBfQTuaTvtEA1rbyAs9s8QFgI90Vu26+LGY9/Iy7PSxc0TxiJKZguMpkrU4YotFuf6fzGhd3K347G5X1vnL/ZigtgW+wgonvxBbIun1gWX6d1bTr1N5+ptkavakO7rZNR5yvU1HS/nO9llrbXH+I3u''@;'; put 'put ''+zzyyFNjYxGCG4bgWyXsmHvohyO2X3TRanNTjaL8AbEtyrIXZdIgtkVZdvsn3dTxjREyZVtUo++YSDaaoTXdUNcx2yrZPf74hfSdQ94/m2JpMcFk/+StSHw6Dwcl4nqaCH7HzJqWotwUY/62iSNJ2PjPgQ6Ph9vIVhnREEc6BEBs06EHffNGYPmWyVcIIR7+TGjD78tCqqif1PpR3oIawvHy5sll''@;'; put 'put ''OlNvF5hfE2/rSCzIJ5hIi0pD6gNXTmkJWS3+bMZjB7E1vzT5R++SAmNGM9ITLCUyoiaTsC5zt673EM2nvYuQDjPOszlS7G8bxNb+NSy6DMxdnQQ6/OGAuufSSPIC4ftmV7dMtzKMee3jv+okJTcIrl8ab/tHr3zwS0Gts2ns+6WPFsutZSuLbf9Zx5LzK5KQr/Yqoyo6g+8frBp9I7m5lTYWiGIF''@;'; put 'put ''OZjX71XGfCiE+lpfuGsdIupz145/+j0rj0OILT8EQGzzwx28pkHAPGSAhMULCKP+LRnN7RIxIt+9vm7L02mYzUnXRoGIs73mJCx4E6Py12OdmttKKrRkrUaCNzRMbH49J0Hl0YkVxfbe7eccSxGZRbF8mk/debB5KEUiiMx9t7nQwxJ17qBIukUTPdsaqrcEE+kLbQqfAIht4de44DK8u+O0UzQR''@;'; put 'put ''WEMwk8zkJOJ4WSBykp0Od29snuxwSoGLQ1rf7V5l9OGxRVKNgE+h7l/qQl4wt2bdpwVXxH0JWUVsV+04xxXS1QqJOqf7QjtPlamzJB3m5hK0gNbziVcZvVx3Satg5nk6NAujL4htYdSxqLJYseXUei60pqikf3vYB2OutOOtV1NsREi9DmMyw8G85YOudDl/n1HncoLpQ3b6MpHogLSC2C7fcvKJ''@;'; put 'put ''BEkLQ3p39VBnHhtC1wyuBnQeDplHMyKECMVMokR2mM/hhzqO0dzUhGBpi8Ska6dPXFvwdyoSrXsxtgOxLcaq2zzne7Z+49caD/1vJA0h0NTZNZsesHNai9urjwypvgedUukkSgbftlT1wBtO5r3GIfe8UEjn5+ZTbBtfv1Au83WfgYRYypF2dOz4Mbfc1Hn4n5jQjbqubuE88CZj7p2qEQ66VSY0''@;'; put 'put ''6nAgWTvIMPRjFNk7zjDUixiRv0CJNOi2c0jv63TS0lk91ZMeacSN3M5jFWJPjQCIbWrcoFeeCJi3+whyPtGrfnLafrFFxjmzq9ss/7x2OGTm81xl87hTKVWWUcyOjTeJihHpCYTETddVbPgHxv2n3dv6J19ia7L2ttfcbSDjqtgZ4poR6iOYNYeMvntvOemVdYkCNm06Wk88TWalDVyoUyI7m1UV''@;'; put 'put ''AAAgAElEQVSPOaL7O5n3J9zfd++0BI94TNQ3tLM+ARBb69cIIowi8FDbuV5VxpuCevcJ+8WW46rZtS1bCwVUY/NkprDg/wqhLY13a1k1Ar0Sdq5yCj5/al1bl53zzpfY3rP1zDmq0bcIY0Ki+WlG8In//wbTGKrd/lojRildgZqi6+o4+YsOwpbrInxOtP3+OVRIPC8bnstmTFqzy861g9iTIwBi''@;'; put 'put ''mxwvaJ1nAqbY6or0vF/bXREJhRN0+pzKTc/nObSMu5+/uW40Fv6ZCJPpCht8aD0S+CNMyJ0UK4/Y9XluPsR2efvJjboI3Rh9PGJQ9+2WsGNqqVN9IlO36c0vTW7ZuLJEPqjRr+06JHqAOGhpW5j3zayv2vhSxgcOGLQkARBbS5YFghqKgHkbmWL3477wR2dH2hhCmzm3pmNloVJb2l59eEDtfNAt''@;'; put 'put ''jz4NY9K/oUL0T0jzvexio2d2q2qH3TZWyLXYLu845Tydh39DCfVGGPapu9+nhF1z06RX1mZjDK1om/IlHRuPEowHLPXCiP4LCfrd+prn8769aDbyBpsDCYDYwoiwFYGHmyc7VM+In/m1PZdFAidIvm1W9fN32CqRFIJd0Fo5WQh9kUwdJ8bOftWMUEAizieRwHc11NpnfW4uxfbebacc0xvuXacw''@;'; put 'put ''5/6lVn3q7vfccsl5s6u3/C2FkiTcpamj6lCK3Q8aQvtmdCcnK31D4331nRWT1sPEqYRx2rIhiK0ty1bcQd+99bRbDK7uF1cH8z76qdt5eeOxq/Ny0k8uq2Ee5Rf0dl6iGoF5bnnEwbG+da4GJaSswowunFW54ZNcxpaKr1yJrbmu2S1pj1PC9j9DVY1ApyDkez+p2ZbwJKhUcoz0WbL2dLfh7n5E''@;'; put 'put ''Js5vRdtR9cBup1x6dVfF+qdSfU6cTlzQNzcEQGxzwxm8ZJDAPS+cW6NpPW0Rk2Gt70M3HnNCMU04adwxzuX0k1sZc14fb9ayEOJDIUij7HP+dsZZa8IZxJ9RU7kSW3MtbUjzNSvMvX+zCpWH5t5Yu21pRhMaxtjCHeNKcUh+RCLy/scgZhenVN4Z0rtvqK9q+UUu4wFfuSMAYps71uApQwTu237W''@;'; put 'put ''WH+46wVG5cNMk+bGAUiwc2bXNj+bIRe2MbO8tfYIv+h9yMXKJscGbR7lF9b9bzho+bSG2g2tVkwqF2Lb1FHlNDhdTQndL3CcG+sNJL59Q217b665LGqr8eqG/16nVLp/rbgZQ1jv6ypxHHz5tIlPP5XrmMBf9gmA2GafMXjIMAHzVqpWGnwUY3FexDRG9A/11RsvybArW5gzD2boCbHTCGKLCWHH''@;'; put 'put ''xga97yi/ZwzEb5lT3fJPKyWVC7FdufXMSiH0pwyhjjJz14xgH8POc2fXbmrOFwvzJKF3D9l5Bcbogej1uOY+3xJx3H3Yh2NuteOOaPniaQe/ILZ2qBLEOIjA0vbJFxAsVkdecEnl7wlNr/5x9dMfFiuuBa215YgHZgssfuRgJSNjOZhH+SFMFypG6NdWWZ+bbbE1l994JON3hJCLIzy4MDb0qeyb''@;'; put 'put ''jRY4zvCOluOnUkxud0ql/V8EzB/zQAOFuhtxMNgEm18Uzrs5LbG97/ULPUqIfuQLf+QZCgkO4/L6KS3dhYMMMrECAfNWnEyU1wQy9s8slYiy4LrKdT+1Qnz5jGFRW80hEqa3GUK7nBJZiY3F4Oo7FEm3M5/70Xw/z8222N7TdtohksPbElD39G/HaAqZYQR/cP2kF36VzxpF+17WVlMZ0H1/jp3w''@;'; put 'put ''hgV5UmD5yobqtZ1WiRXiSJ1AWmL7m1dOd6v6iI9BbFMvAPRMnUBT++SlCPMGhHD/OCaIfcyRGN9QvbFor26jaZpLhQgSyxmRj4/dKclsJxHns9wI3TCjuuX1fG39mG2xXd5+8skq9/9Voo7+CwLOjY8IMY602tF3d246/mQhxG898ogBm1+4pPLHdN47bXrFhj2pv1OgpxUIgNhaoQoQQ0oEFm+f''@;'; put 'put ''PFaEgy9K1BH1AYU3MeI81647KqUE4gCd+p8NHvrhN83nuRjjY2Kb9i8Vwo4nOSO3zq7Y8Gam/Q9nL+tiu2XyFZzzX0ZmbBPMtjql7kmZ2iVquPySeX3e5nEH6zzY4pVHD6hTWO/7m8JKz4EvkcnQtF5bEFvr1QQiSoLA4s2V1xHKmiKbPJh7zzLCVh38/sjrYILJZyAX7ji1lISC1ziZd7bGg2Nj''@;'; put 'put ''ETPs8AnEHyQGuvu62ud3JlGCtJpmW2zv3XrG3SoPzjCDNGdnU8QWdVefdItVN5CYt7XiIAd3PI4RmjQArMCvCY4vm13X/EpawKFz3giA2OYNPTjOBAFzZnK4xPdnSthZEXvmczmK6Z3dYXGn3bYvzASTA9lYumPyKKLyOw2uXxm9N3Ckj/k8l2B5gUcpeeTa8U8Fsh1PU0fVCFVX35KZpyyeL4fk''@;'; put 'put ''7eJcOnp6xV9Suo26tK1mEyGsX7h0roawoGfOrWtryXZe6dhfubWipC+s/tkhlZwSbSegdX3slkedDfspp0M3f31BbPPHHjxniMDSzRVfMbB4UqLOI6NNKswzhxHyQC5EI0Op5MzMoraKKRJx3s6FVhnvKDgHK2kJ6b2LfKWjN2ZzZ65siq05E3mky7FdM4L9J0RpPBwQyJh4Y+0Llj/E3ZwAKLj2''@;'; put 'put ''S5k5L4geFJoe2ClL7svrq1rW52ywgKOMEMi62KqyVHbj+PU9GYkWjACBIQgs6qiaKHT9TzJz9W90EfXzHJbYtPoJG94GeIMJLGmv/hbD8jKO+BF430SzSCvzljzF8p8QN26ZWdP8ZjYmUWVTbJc3Ty7zoV2veZVR/WNCNYJ9MqWHN1RvscXsXnOXMNkvHlaY+4LoCW4hvbdLwq6r5tS2PZGNmsD7''@;'; put 'put ''JDsEQGyzwxWs5oHAkvbqKg8b85ug0XVUtHsnK/MFjb5FmhG6Jx87BuUBRVIuTVEK08BcQuhsFmepEMVSJ0XSYr/huz/T/LIptnufB6N/yczZv+aYC6NXptphMyq3+ZIClOfGS9qrF1Is3RAdhvnFgRF56pyatt/mOTxwnyABENsEQUEzexBY2lo7LqB3/tGjjP5CdMTmc1yB0DaZOX809t2Sv8Pk''@;'; put 'put ''qcH1NI/y6wl9usKrjD6DEdkxkB/nmhH6p1sZ03BdxTMZO4oum2Jr7kOs9al/c8sjvmjmYu7OpEieI+1wQEM0e3NG+b9G/+N2tzLypoGCG/C5pRGzrqtc+7A93p3FHWVaYpvIphZwG7m4B1g+sjc/wANq8A8uufT0WP/mB67O1Y2KVHq91bYuzAerWJ/mB/s7h+w8StV9D7rlEYP2Wza4Fg7pfa94''@;'; put 'put ''pPJZPdWbtqV7So1Zq5CuvuXIwgSpvc9sPa2a0Vtp5mnGrgt+xk/qtlp6glS8cSAEwkvbKk/RRPgxBysZEWnDBTcEN37DMZ6Z6bsOVhiPhRQDiG0hVRNy2U/APFJNIl0zEcJzorfCizQIar7dXmXMQp2jh2GHnsEDxxQqiXRfpPHQ/BLloP27dEVa7r1KLPmdQfC82RPXvZ/q0DNv9aKw/h8H82Zl''@;'; put 'put ''NvKy9snrMRb9s3r7D6zA5OaGqk0L7fqsc17bCWcig//aKZWNjmbuZGW/MkTfHNj8ItWRmP1+ILbZZwwe8khg5ea60WHCmzBGF8ebddsb/vS/HmXk9R45+IQVNzrII7p+1+YkHUeAXG4Izdy/d8AHvPl6UPftlqjzQdznWTj3G+v8yca7T2z/7WDe8nh90136c++2by5Tjd6GiG2C5I1OufMMO9d6''@;'; put 'put ''0eaqiRjjPzIqfS6aGcG0WaKOS6ZNfPbjZOsA7bNPAMQ2+4zBgwUILNg04WKBjUUK9Xx+8PmvQsjU+3vV0Bsbqtf+xwLhWi6Epo6qQ33hzgc88ugzIxuIRAepGaF/O2nJNWM/KGtL5nn40uZxo1Qq3syW2C7pqJlFBG2K1Nwjj3ozRAK1M05cs8tykJMIaMGmqhM04XvSI++daR35YcjRShm9CAQ3''@;'; put 'put ''CZg5agpimyPQ4Cb/BMyj6LqD7PtcGHcozB27RKj/mZ5MvL/QmViUzq3R/GeanQgaBSKujuov6kbotw7mrYr1woVhnp/7moOUXZHoTkfZFtvlraccEeDd25ySp/9Unf7lTES6ZFbVhseyQyl3Vhc3TxgrKyXPcqT3ryOO/AiB/05k+i1Y7pa7WiTiCcQ2EUrQpqAI3Nc82RNk+lUCi9soYYNuX4Z0''@;'; put 'put ''X6dMvQ8jhSycM75ld0Eln4FkGl//iqx0ur6vG+G7Yk+qMc2bz3MZcTwkGfyuGZNaD3gFOextZObp5EI+JtUdpMxafyI+XFPmOKR2b+pCOGjpQ/oefXq+TzzKQCnQgi2VX8CaYa4vPzHankLdrxp66Nszaja+lQk/YCN9AiC26TMECzYlsLi9+kgh+DyCyHnxti6kWPkHEfguEg4/CeeKDi7y/M11''@;'; put 'put ''oykO34gQvlaiDndsC8GN9xBh87lb/t3cr8V/nrt3NnLYnCAV/5ltmmJrxtTUMeWksN77V4W5S81/q0aw10VHnjOjes0mmw7dAWGb5xhrRvczHnnkgLsNYd3/scxc35ldvbmjEPK0ew4gtnavIMSfNoElrbUVfm3Xg15lzHEYExprkAu+hWF2u1P2bbTzxJq0QQ1hYEHrieNcbOT1quH/VuyXFnMG''@;'; put 'put ''sFsa1ebXulf2quKZ2APbTaEQIvBWNsXWnJnulIJ/lIjj7EgKGNFWQ+bfLpQ7F+aXFs0Qj0hUOSO6TBiRnYLz7zbUbmrNVv3BbmIEQGwT4wStioDAgs0Tr8ZI3CEz18Gx6ZrPc12sfDXi+u27qqretuqpMfks0+L26tMJJsuxIP+DMSaxsUjEtUY39J/2VNe8GuGXC7E141jWVnOWwPhJgun+L1OE''@;'; put 'put ''KD+ZWbFukV2XAcXyNW+Z+1loFSXSd6O3dwxqPbsVWnrJnNpNz+dzfBS7bxDbYh8BkP8AAuZVUKmDzmBYWqTx4CA6BtdVSpV7ZIIXwJrGwYPH3HxhSVvVDIdUcr3OQwMOQjdby8TZKzD5hSHCi8ydnHIltk0dVc6wrj+qMNe5n13dkk4h8PcaajauK5S3gTl+FeJfpEiu/mMFIz/79lO+fG5d21OF''@;'; put 'put ''kqvd8gCxtVvFIN6cEGhqm3IspdIKQ4RPjeeQYvkfHImbe0rKn87mqTg5STYLTpY2Tx6FJe0mXWhXS9TpiXVBhLQbYX67QfE6NdyzPfI8Nbadg3k6KSFfunb8U2lPVGvqmHxUQOtsc0nlB0X8+NXOD71s1Cmzapv/lQUMeTFpzhp3bJ5wHSL4LjmKvWr4fRJx3N5Q3ba8UK7m8wI4RacZEFv2sS+8''@;'; put 'put ''c9DkiEg8sF1jipWBbnknYJ6Vq5b4LvA6xs7xq7u/HhuQeWvZq4x50q91roBJKIPLZX7oO9snnuikJbNUHro43vrcEnns33rCO78Wfdsz2pIptjrj/5OJdbHmVffi9vHTKHasiL6dzLDjhTAOXD23svXVvA+6DAVg5jq/ddxZQmgPRX+5MJ+hUywtdso9t8L8gwzBTtAMiG2CoKBZ8RIwb0ES5Lwq''@;'; put 'put ''bPhvlqhj/1VRhEhY9/cokvfXOhULrp/YArv3xBkq5vm5BtcXSMRxAiVMjm1iHhOB8eCPI1NssaZ9+cc16z7NxAg03cxrOf5hh1xy6UDxF68yJF8xo3r93zLhxyo2FrR8fULQ6HukzHno0dExYST9FhMx126HMliFaypxZEBs6Ue+8EeDbhPBlW0q5YA+ViZgbv0YxGojQujyeEtdAlr3J25pxK2U''@;'; put 'put ''OB6dUbnGVse45YK7uT7X3V12GhZkMSH0K/F8xoquQj17NEGPnVX55CeZinHJ2tPdyB1sxFjUR1/h+tXOj1ys/OqGms1rCuk2610dVYeqwV3PlDkP/Vo0w6Dme8Ell15UX9Xy30yxBTtDEwCxhdEBBJIksHhTxdGESYsxwufEWyqEEHqJc3RzX82mtemeipNkaLZo3j9ZSdNuYlS5nhImHegqV6Gu''@;'; put 'put ''PZqQMiq2pj8zht5Qz30eZeTl0bewVSOwW6auH9ZXbSqog9nnr584MoA+3TTCdfix0bxVI/ASI95vz6nZ+K4tBo+Ng8y62OIwLq+f0tJtY0YQOhAYRMB8Hlm6dUpVX2jXg25l5FdjG3Bh6DpXN8nU9aOG6hbYbznOGFq0teKwcMj/kEceOegoRLO5eZVLMetm1FExveLZNzM9DPceJ/juFUKg5TJ1''@;'; put 'put ''evffjTOCfTJ1Lmmo3nRHpn3m015jR9UIovke90ij+k9Bivz4wp++5XGOvXhOZfOL+Yyv0H1nXWwFUz4P+8wW+jAq3vzMU3HcquuH3NB+IlFlTCyJ/ue5zP1LrPMl9ZNaPypeUvEzN/er7vTTOl0Eb1GYu4IRxRnb0iONaNG5eqvfob001E5UqXI1vzQprePPZ0S+hxJp//pq88uSQypZperGrYV0''@;'; put 'put ''BOOStce7NQdbKDPXj6KfWQdV325Z8lztr259Cu7GpDqaDtwvbbGVQ2xnb3jn/m+Fse6cdNTNqtHVzAUWCOlI54QjpO1vRjDDBIth49jbP7Uf077Z/0B+eAIxIMRQtA0ujP6YCKb99s38DvRDhsjhQLlxoQuTUWqZJ9crkTokYzHRmpk5xtqlFAvDENj8HfsaFyTlsRBriwhdmHGa/0/ZQF+Gvndc''@;'; put 'put ''mn8XuggbQuv3S6W97bBBuUG4y/xNiDzSLZXcEzA6B9ymi/jrCX/yjlsecYcQ+E9wyPfgUWSKnret9qiA0fOASyqfEnsyk87VkGYEX3PL5dd1h8SLjVNaDvxmS2agmptetNYe4zd6nvLII46J7hrUul50OMvOnz1xc8pn9iYZSk6aL2mbdJHB/atk5tl/jrBmhAKcG8vd/tF3FsK+0TkBmYSTtD7E''@;'; put 'put ''73v9Qo8UIh/2hT8uScInNAUCBUHA3OCCC10TiHMkhCEzd/8H11Aza/cl/TIWeF6Pip6O3bqwIKCkmUT/phjtFWf+/x3kOymRv0Zits/sP+QAy09QxO+cVdue0bWx5jGCQrBHMCYnDUhDoH8ILK4utOVdi9omfNvFRt+rcf+AHdOwIE0uxXfLteNfDKRZTugeRSAtsX2o7Vyv4XR+AGILYwoIDCZw''@;'; put 'put ''INHVudqqMM9VMyqe/08hzXzN5DhYvLnyalUE73JJZYOWW5lbEDLiWEV1x4o5UzJ3MtPCHaeW4qD/DxKVz4zOxZyp7JZHn9dQvXF7JnPMty1zSZaqBx6JPb0JI/YzSuS5MKs+cxUCsc0cS7AEBOISGEp0heAGxcoDKtPnwfrc+INnefPkMo0Gb2LMMSe2hUDmFg3G+xSRBb7yPb9sPPYNNRNDcNWO''@;'; put 'put ''ca6ekHI3I9LV0fZUPbCbYuUHhbbl4cK2CcfqRvgvLql8/1pcIYT5DOVZB+eXTa1r68oE12K3kZbYrtx6ZolDKnkfrmyLfRhB/sMRONBVbkDrv2q61SW5f3/t+Kfg1l0MTPPW8sptk47qC/t+7pRKB97iRQiZh9aHNN8rCi2ZOreubdtwtUjkdXPiVk+A/YRSpTH6+XFY7+uhVJl1fU3HrxKxY5c2''@;'; put 'put ''C1qPKw+ogfZy52Ffjo5ZcL2dY/e352ZoUxG78MhGnGmJ7f2vnl3ONM9/QWyzURqwWYgEhhJdUzAwpi8jTu7AJPR8Q/WWwacgFCKQJHIyt88MebtPE0jcJVFlwAYNphnVCPQy7HiSIL6gobb99SRMD3FHAuGFrRMuR0jcrTD3/nkpmhHsY9g5v1fDSzI9USvdmNPpv7R53CiV8tUOVjI52g7F0lZD''@;'; put 'put ''6JfBErZ06CKUnti2nl3OXO53+sKf9B/KDD9AAAgkRmDoW8tC6FzdrEhlM7orKv8OR/kN5mluSKHq4gpDhG53SqWjY1uYJ9zI1PNL2RCLZkxq3ZVYRYZuNX/T+LM4Uh92SeUDlnYx5LhPR6iglgat3FpRsifQvbrUMXbA2ueg1vsPr1J+wYzKDW+ky7NY+6clto+/fqHc2+uZjwQ7VOehgMG1/dPx''@;'; put 'put ''zecpGCPOhcHNJyscC47NBwFcCIT2HnWJScySn30LOvi+qHB/W/Mn+mhMbq61OeDSD3Mhh9mL76uqQGb7yL8QwnGX4Jiv7/UjCBeYkwOyEQktFRrK1/DDbaB9My7eH/fev8fw6P/33vzi5zacv4G5D9c68rrge7+skf3+P4uLR/GOtfdZtAf2FLv8I7o1RnE20jXzx8l/gRQC7V3CFTVm9udojmOT''@;'; put 'put ''O+HmkBYYmaPYHJjmX7kwiPl6/184xsKclcwFNgxz3COM+/9t/t18HWHOkWE6IkTCzpGE0Ckc952IKXXFkjCvnmTi/JmOlEVwCy/+OJm3teIgWcU3C4KvYkQetD7XMNR3EKY3+8s7/5ju89xFbRPH64b6hFMqPTQ6GoPrz0rM8YNC2mN471pc+pBDKrk4OldVD7zHsPvSOXUtbYl+RkC7zwikJbYA''@;'; put 'put ''EggAgfQILG+tPULF+nyKpQtil7mYlmXqfksYxq17qqoehavc+KwXbppQzTFvUqhrQrzTgyTiWKMb4Z/Oqm55JZ2Z3/PaJ3yda6E1bnnE2AGRcNKuyOKCaQV0CIW5jzXb47jXxbzXROca0vu6FFL2ndm1G5rTG/nF1xvEtvhqDhlbjIB5mdzUVns0pqQJIXx2bHi8f9YyfRlhdGN9Vct6i4VviXAa''@;'; put 'put ''myczWQqeLmNpGcH0f2KDMrimIsQeVRi5aUZlywepBr2obfyXKHauJZgcPsAGxlslQ/rOdbXP70zVttX6mdtZ/mfsW3co1H1jzP7RPoW6L6+vbnnCajFbOR4QWytXB2IrKgL9h363T7hA17X5Lrn0yNjkdR4OysT1a4H5IjipJf7QmL9t4kgc1mZyIX7slEpHxbYigu5GGN0uwvx3qe7ZPr914jG6''@;'; put 'put ''7n/Wo4waUCOK5W2c8UvqJ2x4u5AG7rxNX/shxnShg3nLI3mZm4s4qffmztLy+xuPXZ2RJVeFxCxeLiC2hV5hyM92BMwj4ISr59L/n9xwR7zzc0O6r1Mh3l9i4lxQSPv2ZrJQi9pqDkHCuEEg4wqZugbtcKfp4f9IVJmPsPpoKjO/mzqqRggh/RFjPCU6blUPviUT75UNtRtaM5lPvm0t6qiaGFK7''@;'; put 'put ''V3vlMZ8fEIsQf2KG+8czJq1JeyJavnPMtn8Q22wTBvtAIEUCi5orDjOodgfB7EKZOgedGU2x8g+OtJuFCK1JRTBSDMtW3ea3jqvwsPL6sBE4jxJJiQ3eyUo3B7Sulb1lY59K9grN3G3Kw5UHVb3vu9F2Zer+WNX6ZvpqTv5jIT1nn7d53IkSlh5nVBlwRS+E2ECpdGkhTRLLxiAHsc0GVbAJBDJI''@;'; put 'put ''wDw/lzK2RCD8zejDziMuhBDbERY/7a1qbYYTW+KDX9xa9U1KpGUY4wEHDZitzZ28ZOp+Thf63Pqq9f9IpnTmMiSElZ8Jblwy8Lmmv8fBSq/trqxbXUiCu3hz5YmaCD0ZOytbIq6NQkXfhSvcoUcPiG0y7yxoCwTyRMCcRLWg9YTvCCEWO6XSL8aGYS6vo9Txc86NOxuqN36YpzAt7baxebLDzfSZ''@;'; put 'put ''DsnboPHAoOMQGVZ6EDLuC3N6dzLLrczarNgy5XaB+C3RACiW/aoevHNuXdsiS4NJMrhlHVUnKKT81yr3H7f/Cx8SwsVGNOuq/7JCmiSWJJoDNgexzSRNsAUEskxg34YO30eI3y4z54DTWkzX5vNcmbh/5pCUpdMrNuzJcji2NL98c93BgpJGQ2iXx7u1zDl/n2ByW0PNpocTTdCc3FbWcfJVBtIe''@;'; put 'put ''jL7C7d8ZTOD5vTWtjYV012FFa83nVcz/xIg8PpoRQcoOZPDvzKpb/16i7IqlHYhtsVQa8iwoAndtmvA5hNSbJaJcKlGnOzY5guTXMRLzVTf5a6YPXC8EkOaylncOee9kwY0FMnOPi83JPDxewZ61GtJ/0lC9/rVEcu6/+7B5wmyJyvMoYfL+qz7BDUbdt3QFQwW1veOC1glHcK79zimVVkXzYdjx''@;'; put 'put ''gi7QJQ3Va/+TCLdiaQNiWyyVhjwLkoD5PNenf/zzEuXgiYwog3ZR0oW6yck8c/Z4yl5NdgJQQQKLSco8cKAzIF2uc/8dLqn8IIxx9PZs5n7LPRJ2/tyQybJET2ZauHn8d3WuLnfJ5QM2v5CQc6mGREHNIF+4Y1wp8pOHZcl1fjTasO7/l4OWXllfs2FLMYyjRHIEsU2EErQBAhYnsGjz+IlhI/gr''@;'; put 'put ''jzJqwKktZtgG18IaV5sdzHMdbCYfv5DmnsBhg16hGcFbHaxkZGyrsN7XRZG8otSlLk3kUPUl7dVf9Yf3PFHiGDtg5q5f71rvoJ5L59Z0fGrxIZVweOaRhL6gdC+lypXRnfrU3R84SMn3r5+0ZVPCxgq4IYhtARcXUisuAuYEIIJ23cSoY7qDecpisw9qPbtc8qjbekL6w41TWkLFRSexbJe2Vx/e''@;'; put 'put ''G9p9b4njoLPibf0Y0nr/rtCSaxpqWrYNt/WjudtUUPU9U+I4eODmF4g9g3X1ykwckpBYVtlvZW7vKO9WlijMOz367oCq93XLzPm9huq257IfhbU9gNhauz4QHRBImkDj1ooSWdXvkqjjRxQzKdqAOWvZr3V+4JZG3Iax/hiszx2M13ye++6hH345pAfvd0sldbEtDK5rQa1rh1sZNW129ea/HahA''@;'; put 'put ''5uYXfrXvGbc8ojK6XXfwo9fKXYecW0g7gZmTxOTN46+UqHw/JdL+Z9aaEfQzosztrW5dVUiTxJJ9Y4LYJksM2gMBmxBY2loxzqfuub/MeejE2JDNCUAGN7bIxDOjvub5l22SUk7DNO8UyKT3YpX7G0uUg74Q61ztP5nJ9RA2jEX1k1o/Giq4Ba215f7wB8+OcB0+QHBDat/rTlp2bn1dYW3vuKB1''@;'; put 'put ''whmaEfi5Rx51WISJ+ShDYd57///IqztmVK7x5bSQFnEGYmuRQkAYQCAbBCKCYYjwTW555NGDBcPf45DKH2WGsWBa9cb3hrs1mo0YrW7TfJ4b1ND3VSNwy6ATfxBCAa37E4k4H+SI3f2TurauePksaqvxYkrSxfgAACAASURBVMxXMSx/L/p187mmWy65eHb1lg6rc0gmvsXt1V9HHP2eUWnAHAIh''@;'; put 'put ''+DqMpR8U41pwENtkRhC0BQI2JRCZAIQFuZ0QOuh5rvlsjVHvQwLJi5PZ0MGmOFIKe97mcQczTOcIJK6Rqcsba0Q31LcpkZdKNPTIjMptg67eVj57phL0di6mhE0lmLFI/6DWvUvGjmv8ddueKqTbrEs3V3wlYPj/6FFGDhBcSuTNBjcuKTbBBbFN6W0HnYCAPQks2TTpi5jxJoSQufXj/g/8SDaM''@;'; put 'put ''OP7JuT73kA9GrLnootXmUffwE0PAZBgW3ebh6nXxGAY130tuVvKjmdWbdsS7U7C4tWImJmxJ9PP0sO7voVhqCNRu+VUhCe6CLZVfCAb3PFfmOORL0RgNrr/gQK7zimm3KRBb+CgBAkVGoH/zhfbxZ5bIB9+m6r5Bz3PNvYI98pinekN7ls2pa2krMjwJpWtOBnK3VZ6NCVsc7/xcc+coiqQ/c67d''@;'; put 'put ''PLuu7c1Yo/Pbxp+FOP9d9LF1OldDFEt3z67ZfGNCQdik0bJNEz5nEGoeYDDgmbVC3X/ThXbxzMrn/22TVNIKE8Q2LXzQGQjYl8C+25qXCCHmxdv60fzwd7CS3xoM3VY/fu2QE4DsSyD9yM3jEHVn1w0IiRkKc5fGWlSNgI9ix88Upt4Ze2t5cdvEOoMbf1WYZ/85seZsccTFQ706m9o4pUVPP0Jr''@;'; put 'put ''WGjcMc6F+wJrvPKYSdER9am73y2XDz3juup1/7RGpNmLAsQ2e2zBMhCwBYEl7dVjsKA/EsiYQYk0aEMHmXreMWeXCiSvgvNz45d0wabxJyjMeZ3G1Ysk6hiwfaYQQnjlg17waZ+u6Csd86fonbzu3PTVb0vEdb9MnQdFLJvtGZFX4C7pJzPOWhO2xSBKIEhz3kBIE79j1HlOzC3ltxBml82t2VTQ''@;'; put 'put ''u02B2CYwSKAJECgGAuazSM7C87Ag5zMiO2JzJpi9KhC+3SU5n7t2/FOBYmCSTI7m7fmFm080D5OfJzHX+HjPc2XqeU7j+k31VWtfithe0F49QVW7HvcqYwYsL+KCP+Zg8rRCOlDCFNy+cPjnDqn0omi2GLH/IoyvrK9a35IMczu1BbG1U7UgViCQAwLLOiadIBGlSefq5Fh35rNILowOiuTbejXc''@;'; put 'put ''Wki3OjOJdklr1fmEyAsxRoPOzzW4GsKIPWogftMNte07Tb+L26uPZEL6MyLo+Og4VD2w1iGXXF5IB7Objy/Cpb3zKaYNA3P1d8vM/YOG6k1/yWQtrGILxNYqlYA4gICFCPTvonTIB1cHdd/NbnnkoRjhQZ8VEnE9jLBx53UV696xUOiWCWXv89w9N2CErpPjbJ8phPgQYXRnb+nuhxuPfUM1t4pU''@;'; put 'put ''9fBTDsmz/5xYMxku+EYu0UsTPQjBMgAOEIi5vSPahZZ4pZHTo7fFNIxwH2POy2dVNv+l0NZ8g9jaYWRCjEAgxwTua57s8TFdcjDHWJkoD4aNvgETWyLhBHXf7hL54LtIMPDQtCktfTkO0xbuFrXVHEIQ/wlC5IfRR++ZwZszvzUj/B9MyPU31G59sn89tM4eo4SdEZ2cX+38u5O4Lp4zadsbtkg6''@;'; put 'put ''wSAXt1Z9U+Ohh51SyahIF3NiHsOsya0EGq8d/6KWoCnLNwOxtXyJIEAgkH0C5qH0WHIdjHV8iUydp6p68JiA3ikTRKhEnSXxNuWPRMUFN9fjbndK7plhvefvsN9y/Hot3DShWkPh+Q7qqYw9tN7gahghspoJfFtQVntQ0HjQIXsuiLbEhf5PxPH359S1vZj9EZE7D+as7KDe9zuvPPrz0V4pVn5n''@;'; put 'put ''CDyzUCblgdjmbkyBJyBgOQKLt08eS3R0BUXk0rDRd7hMnYN2Rko0aI2HA1ig7UwpnX7Yf0v+CZtiDCZn3j51drlOEhzFPbQ+pPv2IIR+rQi2QjDlZoTQD6InWgW0ro8d1PuDObXtaxKtix3aLW6f8PWQau42NXrACUkIoY0Sly8rhM0vQGztMBIhRiCQYQLmrU2BtBu5oV7skErHZNK8agR7HVLp''@;'; put 'put ''7wUjt8P63PhkzdvFvaHgtQLjOS6pbBD/oNb1osxKV7lY6aVho/ekaCtBrXePQj0//PzOg/5aSF9o5neM+x83HvFrQ6gDNlqRqWcD14PXzqjZ+FYmx2mubYHY5po4+AMCeSRw77ZTRmq6qPdrXde65M+ekw28Xdk/41gzN1gIG71dGDGdIGwwqqCw0ScTzCSZukowItT8b4wHT54y7VGsPDSzat3V''@;'; put 'put ''eUzX8q7NI/hUQ5+LEZ4uUacnNmAHLQmPdh+lvO/bv1Kov4nOw0GB8NJgzZbGQtresf9Oi6Y9RjCtQ1GT8mTmek1F/HsNE9e+bvmiDhEgiK1dKwdxA4EkCSzZWne8P/Dx417l4GPiCWRA6/rEr3W+7iCe+72O8mZfWPF9ZddoYbp548LV4iurL9z/efHG6F1YYf7PEyHOkqn74pDhPy56B6WQ3rvH''@;'; put 'put ''6SyfWD+hsI6PSxJ5ws3vajthvDD4CrdUVpNoJ4Nrqsycd82s3HBnon3s0G5p87hRkmPkbw0RHjBJzC2NfDNs+C6fUbl+qx3yiI0RxNaOVYOYgUASBMznhI7OkukI8dvlmKsn81xbzQhvxgg3obDRFmJef7JrZxubJzOF6V6Mtat0IzTXvOpVqHNZV+XGWwvpqisJ5Ck1Neuk7Hacr/LgwtgNLoYy''@;'; put 'put ''aN59oJj+zCn3ziikmbvmhD1faHdrieOQcdG564b6jkMq++aMyjW2m5UNYpvS2wI6AQF7EDDXelKvdpvBw+ZWjEp01J3B918rlUbf4jecaxuntIQykZG59aOmB8+h1PX4DbXtvZmwWWw2FrQeV24Y6DqM6QynVDpo+8x4PDAiqyVKflxIu02Zt9g5Z48RQk6Nzplz423GHJfPqlxvq0MyQGyL7Z0M''@;'; put 'put ''+RYNgVU7xkm7/NoKhXqvoYRJkcQ1I+QnWJ7HtN4H6qe83F00QGyW6F2bJnwuZHQu8UgjzjTvFgwbvhAbCZevnFW3/r1h29qkgbneu5v6fuVk3u9Eh9wb3vXfcuWQb8+oXv83m6SCQGztUimIEwgkSeDuradeqevafZggZ6RrSPN9igid89O6Hb9N0hw0zxOBZa21xwQN34NDnZ8bHZYvtPNfZfJh''@;'; put 'put ''35pV2/yvPIWbcbfm7XVP18hpAhkLKZHkiIM+ddd7Hlb+nYba9h0Zd5oFgyC2WYAKJoFAvgksaau5SCD+K0bk/UJLsfyGqgd/MLeubVu+4wP/yROYt+nEi7jQVrjl8rHRM3VjLYW0vjddxHHarLr2grnCNXNc0l73XYzE7wimNJKzwY1XEeanza3p+DR5orntAWKbW97gDQhknUBTx6nHhbWu5xTJ''@;'; put 'put ''c0jEmWYE35ao8r2G6tbtWQ8AHGSNgHkurBIgNxOMr4u3VOgzEdLeogh/1y5XfYkCW9JePQMjvNRcchbpw4jjibHvlVxg9TXHILaJVhnaAQEbEFjUVuNFQntOos7qSLi6oX6AiXT53JrNG22QAoSYAAHzlCBV6/2FSx4x6GSmSPeQ7utUSOnZs2tbbLlUZigMTe2TViCMZ0ZeN/eXVojrkulVax9P''@;'; put 'put ''AF3emoDY5g09OAYCmSewcus3Zuk8tDzqCkelWPpRQ82mhzPvDSzmk4C55Mophc5CAt3BiHRcvP2rg5pvt0ceOW1m1XpLC1EyHJe8crqb+3paJOoYH3V1+09K6JRpE5/9OBlbuWwLYptL2uALCGSRwPId3zhYC/k6GJH3H0IeUPc8r4QPOX/uN9b5s+gaTOeZwOL26u8wrCxBiH8xNhS/uucDh1Qy''@;'; put 'put ''zg7PNRPFuLS1dpwuws/LzFUe6eNk5cs+mfD16xtxI0/UTi7bgdjmkjb4AgJZJLByyzdu0EVoYcQFQfRtgfVv1ldt/kcW3YJpixAw91sOavQ2jMVURmRHJCyKpUe6QvrVmVpLbZF00dKOutsJIrdG4lH14Kdeh+tr0ya2WPLqFsTWKiMH4gACaRBYsfWUg/pCu7e65LL9V7Wc85vm1LbOT8MsdLUh''@;'; put 'put ''gaaOkw9FwrhVIHENpfJWhsU5hbTZRaQki7ZOPkyova/JzFMW+ZtM3OdNr3z2r1YsG4itFasCMQGBJAk0tU26imOximDSvywirPs/8CqlXy/ED9kk0RRl85XPnqmoJb6TCaEfNFRvfq0QIew9rtD7Z4k4zo7k55VH/+Ka8X+8xor5gthasSoQExBIgoC5U5Qv5FhHCds/M5Vz/Z6+mvZZsDdxEiCh''@;'; put 'put ''qe0ILGmdPJlS0RwJ3COP/rceDFZMrXumy2rJgNharSIQDxBIksDyzXUHh1HwFZm5R5tdzdNgGJYm19ds2pKkKWgOBGxFYOGOU0tFoOsthXn695DWjFCfh42aOK3qGcvNUwCxtdXQgmCBwGACK7ee8hW/2tMROeLOr3budMueiQ3VWz4EXkCgkAmYt8v18uA2JMTXInliwi6sr9zwR6vlDWJrtYpA''@;'; put 'put ''PEAgSQJNHafMNHhw8Wf7xuK/1Fe1fAdj1H8WLfwAgUIl8PjjF9LdXwzfG9J6fhTJUZZK7pk+4akZVssZxNZqFYF4gECSBO7ectpjhlAv2nsLWVcxQj+cU9v+6yTNQHMgYEsCyztOnsWFtiyyqUeZ47C1PzjxkQEHz1shMRBbK1QBYgACaRBYsHn8PxXm/pJpQjUCPkKkE6+v6XgrDZPQFQjYhsCK''@;'; put 'put ''LVMqdK61EUyZGbSEXe/Jkuf4a8ev7rFSEiC2VqoGxAIEUiDwsxcu+HuftuvYvWIb7MWYT7ihdkfBHLGWAhLoUkQE7mk77ZAQCrxDCes/fk/V/d2YlB97Q+3zO62EAcTWStWAWIBAkgRWbj2zBAn+mi5Cn49c2WIsf/mG2nZLfdAkmRY0BwIJE1i149RSzZDeVI3AGLOTQMLcmrRudvVmSx0sD2Kb''@;'; put 'put ''cEmhIRCwHgHzgyagin8IpB9sRhfW/T0COY/+6aTWXdaLFiICApknYB7IcKh3zKu96idfNq0bXA0z6rikvqr5z5n3lrpFENvU2UFPIJB3AsubJ5fJLu/LYcN3eOTKVuLoq7NPeuH9vAcHAQCBHBBoFI1k1AsvPq/qvpMj7hhx1M+oXLsiB+4TdgFimzAqaAgErEdg+d8ml/GA8TLGJCK2veZxa3Nq''@;'; put 'put ''Ot61XrQQERDIPAEhEL532xmLNR6cE7HukEoemjrhqasz7y11iyC2qbODnkAg7wQaX79QLvd1bzKEWmkGo/NwUCB69g217fu3sMt7kBAAEMgygbu3nHK5ztWH8L69wZ1SecePJzxRk2W3SZkHsU0KFzQGAtYjsHLr6ct1Hp4ViYwjfsec6tbbrBcpRAQEskNgWdspUwwUeDZytKBLGvnOx32dxzRO''@;'; put 'put ''adGz4zF5qyC2yTODHkDAUgRWbvvG/4Y034OMyE4zMG4Y22fXtlXCDlKWKhMEk0UCTW1TjtWEf6tEnR7TjUzcPk2RD68/4YnuLLpNyjSIbVK4oDEQsB6BRZsnniew+I1MXV4zurDWt4s6vcdfb9FDtK1HECKyO4FFbTWHCB5+XWbuvWfbCtQnCflL11lorS2Ird1HGcRf9ATMDxoZs1aB0RH9V7ZC''@;'; put 'put ''1wjH5zbUtT1X9HAAQFEQ2Lve3Nihi/DRZsI6V0MKcZ4ys3pjh1UAgNhapRIQBxBIkYC5zpDgPU965BFn9n+pF0L8/1Xusj0VlTc04kaeolnoBgRsRWD+5nEvOZjnBDNo85hJh1Ry7nUVz621ShIgtlapBMQBBNIgsLjtpDouAs9EbiX3qXs+cLhGTYBbyWlAha62InDftrN/ETb6rooErVDvvbsm''@;'; put 'put ''jp9plS+cILa2Gk4QLBCIT2DVjnGu3rCrhWAyIdKCYmXejMp1t8BEKRg1xUBg+ZbJNwkh7orkOsJ5+NP/7X7vfKvMSAaxLYZRCDkWBYFl7bUNGNNlkWRDum+PRx4xaUblhjeKAgAkWdQEVmw95XhV929lROmflW9wfecoTTryyiktISuAAbG1QhUgBiCQAQIrtp5ykISdm8NG7zERcwSR58JcveiG''@;'; put 'put ''2vbeDLgAE0DAsgSWtdZ+TUdqW2T5T7njc592hd76QkP1lqAVggaxtUIVIAYgkCECTR0n34iQsSBijgvDoITdVl/VMi9DLsAMELAkgRVbKw4KqOobDlYywgzQHPsuufSYqROeedsKAYPYWqEKEAMQyBCBJa+c7qaB8FNIoCkRk4bguyim/9tQ3QJLgTLEGcxYj8Dyv51XVmI4X+tRdx5mRicENwgi''@;'; put 'put ''dfU1m7ZYIVoQWytUAWIAAhkkcPfW044Oqp3bZebZu8AfIeRXO99xOcecMbtiw5sZdAWmgIBlCJhrbcN69z8pkfuPmzTFVsKu6hnVa7dbIUgQWytUAWIAAhkm0NQ26SoD6fdTIskR0wTR17Hg351Z0/L3DLsDc0Ag7wQebp7sCLlL1gb1nkl7xVYIJyuZM7Xi6aa8B4cQArG1QhUgBiCQYQJL2ydN''@;'; put 'put ''EsJ4lhLmjjatUO+rWJDLplY++WqGXYI5IJB3AvduP3u5qvftP5SjxHHoYwb/12XXjn9Ry3dwILb5rgD4BwIZIrDy2TMVURaqlZjn0t7wroslqrjimQ7rfe8rjpIzGyY2v54h12AGCFiCwAPbzvlm0PA9FRXMe4y4jptRucaX7wBBbPNdAfAPBDJAYOXWyYcFtNBKjMTpEnUMuJqNmNeMUMDJSj/F''@;'; put 'put ''mP5V13pX1te1WWKWZgbSBxNAoJ/AkrZJV1GCfxHBUeI4pNMX6jy6oXptZ74RgdjmuwLgHwikSWBp+0kTEDIeIpgeF2vK4FqYEcd7Ahl/MAReXaKw9384br0PdpVKEzp0tySBFe0nTQjxwHqZukoiATqR97AfVz/9Yb4DBrHNdwXAPxBIg0BT+6TT/VrnL93yyEOjzZgiq7CSP2s8cG9v6e4djce+''@;'; put 'put ''oabhBroCAVsQMO/waIa+A2N6UCRgQtjXZlVuyPscBRBbWwwhCBIIDCawuL36CsNQVyjMXRp51ZyBGTb6PpCQ43p/XcfjjRjBqT8weIqGwP+1d+fxdZTl4sDfbWbOknOSphuUTQGvCAoCaZOcpG3SdKOKChcKondB0UopaZO2FMX7MaJQuiVtCkJBFC4XvbYISIHSLUmzF1IuXBblB1xRsC2U7Ged''@;'; put 'put ''mfd9f59JOSEcWrKd/Tz5w4+fnJnnfZ7vTHkyc2bet7q1MNene593qrnnhIu2sdySpTOeOJBoBGi2iT4CMD4IjEGgpqXkqhDvf2Dou7TW1SzG6GEbs/9kWf7+zjGEhV1AIKUFpES4tn3+PVyGbvy42bo3L52xsyLRhUGzTfQRgPFBYJQCm1tLF3iNzoccyoRTwrsGzb4uhbhuPOvw1D8uXryDjzIk''@;'; put 'put ''bA4CaSNQ0zrvdon0/wgX5GAT6/wm/XqlZ0dC50iGZps2pxgUkgkCte1l53cHj+x0qZPPHtJoO6XES2+b/eL2TDCAGkHgswQ2tcz+Acbo/vA2kxznvNiv9M++6YId3kTKQbNNpD6MDQKjENjYUTIJBY3thLDBeY91HuinxPat1UWNdaMIBZuCQNoKVLeWLBTS3EkwZVaRE9TT/hpQ0aVLL/xddyKL''@;'; put 'put ''hmabSH0YGwRGIbClde5ajoxbw7sIaRoCyeW3FLXeO4owsCkIpLXAuuaiPCTNvQq1DcwNzojtQ405L1yS9/iRRBYOzTaR+jA2CIxQoKap+Gwv7212qrkDk6xbPwYPPnZL8cHF8M7sCBFhs4wQ2NAyfwqSvpcoYQP/Vgwe8CrYWVBZnNgZ06DZZsTpB0WmssD27VfTw2f0VnERvA1jPPBvNmh6X2NU''@;'; put 'put ''++YtRa1vp3JtkDsIRFugpr4kR7HbD+rC/0/h2BjjeRWFDfuiPdZo4kGzHY0WbAsCCRCobi7J06WvTqUOlzW8zv19Gsm6rqKo/pkEpANDgkBSC2zruNwR0P0NApnTP05Urqj0NG5JZOLQbBOpD2ODwAgEatsW/tSUgV+EN+0NHu3QnNkLf5L/PLxLOwI/2CSzBKw7QZ2fMx8MmF3/Fq6cEdvm8oLd''@;'; put 'put ''CX3XFpptZp2HUG2KCVS3LshVCNpviOBXrdSF5Bwj5ZqVRfV/TLFSIF0QiJvAlra5VVwaPwsP6FQm/veS6Y9/O24JnGAgaLaJ1IexQWAYgZqW0q9JLJ4Ob6Zz/1GVsrxKT1vCJ1aHgwcCySqwuXX21QKhwffOnUruCwibJUvydvoTlTM020TJw7ggMAKB2vb5600RWj14O4xqz5m8/8pKT1tCZ8MZ''@;'; put 'put ''QeqwCQgkTGBTc0kBpaRNyOOTqdmY67BqGl+5IYFL7UGzTdjpAAODwGcLbHh5vhP3BeoIJTPCW0okf7TS07gN7EAABE4ucE/rgnNNLN7k8vhiV7rp7XGoU6xF5N9LlBs020TJw7ggMIzA+vqSU0K485BTzZ1mbWrNf0yw4+JbZ7b8HfBAAAROLrCt4/JJvlDfSwijgaUnDR70qcReXFHU8FKi3KDZ''@;'; put 'put ''JkoexgWB4ZptY8ElAhn7wyv7EMTeCIng9DXFLf2ABwIgcHKB39aX2PSs3J0+o3NueCsu5A2rixsfTJQbNNtEycO4IDCMwJ0H8hZRQnco1OawNnUpU59j3g+uuL60IQh4IAACJxeoqi9hkx3OmhD3LgtvxbC6qbxw76pEuUGzTZQ8jAsCwwhsbC66khA2+IqPylxPiQl8cfkXdoUADwRA4LMFatvm''@;'; put 'put ''3qiL0FaCCbW21Iht100Fuxclyg2abaLkYVwQGEZgQ4vneoqV34Q3s7MJv3vfqVxfdcGO4099wA8IgMBJBba0ly4yuP4kwUyxNlKo41W/oXjWFD+VkK9hoNnCyQoCSSqwsanwh4Sqg08eO5SJD2L8txuX5B0ykjRlSAsEkkZgQ4unEEnUQImiWkm51FPe7dd7vlqZoNd/oNkmzakBiYDAJwU2tBRf''@;'; put 'put ''TzEdvLJ1sOz/OurUvg9XtnCmgMDwAtWtc04T0niTYGK3tg6Z3u4skvvlm4v3Hh5+7+hvAc02+qYQEQSiInBX84zrFKz9J/7oO6cJ2unPdIf0qys9O2BCi6gIQ5B0FrirY2624T36mlOdOPD6j24G+h006+LyorqErJQFzTadzzaoLaUFtrSUfNnP+xs1ljXh+F/m/sMuzX3hsvz9sABBSh9ZSD4e''@;'; put 'put ''AlUSEVfr7IMYozxrPFPoQRvL+mZ5wd498Rg/cgxotolQhzFBYAQCm9vLpgZCPYc0JWvgL3MphUBCXrJyZvPLI9gdNgGBjBaQEuFtHVc85De6/jUMgSX9eUVRXVUiYKDZJkIdxgSBEQhYt8HsBmnkMnTh4OaYXFNZWD84wfoIwsAmIJCRAlazvfeFy9cHzb7Bd2tt1P3I0vydg803njDQbOOpDWOB''@;'; put 'put ''wCgEqupLbE7FeIIStnBwN4lqK4sOLB9FGNgUBDJWoLqt5Eec61sGn0jWpuz7waU75iUCBJptItRhTBAYocD6Fs8tDCvrwpvbmbuhlwS+dWvevt4RhoDNQCBjBapbS87Vue9FlTpcFoLf7PmbG02bXj5r17F4o0Czjbc4jAcCoxDY2Fpynmn6W1Vm/+ghKW+3xtxXVHrqD4wiDGwKAhkpsK656IsY''@;'; put 'put ''8ecZ0dwWgFs91R8S3muPTc97pgpXiXiiQLONpzaMBQKjFNjWcanj/f7gnixtUlF4V4rV6uWFe1eOMhRsDgIZJ7ChxTPF4MG/2Jhr4I9V60dIbmrUtVbqaGs8r3Ch2Wbc6QcFp5rA1raFJYYM1Ifz9htdRxzKhAWVnsZXUq0WyBcE4imwffvV9G/TDu+hhM2JHNend75rV3M32UPkwZtKG7yxzgua''@;'; put 'put ''bayFIT4IjFOgtj3f3eXrbnTbT70oHIoR+z1dLlclzCY1TlzYPe0FNljvqxvHttmZ62JGtIHZpIb+BE1fm5O5V3WHxItVMVxRC5pt2p9qUGA6CGxsLrpMIvkEJYpm1WMthq0xx3UrCuufSof6oAYQiKVA1Wvnq1k9ORcFDd99DjXnksixrFvLIdPf5FZyly8r3PcqxkhGOx9ottEWhXggECOBn+77''@;'; put 'put ''fFuu48yCwatbrL5uULxw5Yw978ZoSAgLAmklsLG+ZBJS+A8Vqq3k0siNLE6j7k5T6A8KBW2uyNt9JJrFQ7ONpibEAoEYCmxoKsjnyNyjUufAk5XWj5S8KUubsHBJ3k5/DIeG0CCQVgLrmoumEYRuJ5hcjzEhny6O/ZUS/Ivy/H0PResqF5ptWp1CUEw6C1gz4qxvzr9bobalQ+tkxP4IDQSXxuMh''@;'; put 'put ''j3T2hdoyS8CaOzm7teTCPv2Du13a5MGn/T/+Q1YIU5gvOdmEpcsKnz04Xh1otuMVhP1BII4C1m2wfnT02Wxt6vShw1Kk3a87UeXqi/b44pgODAUCKS9gzdRmU3zfIJLeyah2TmRBBg/5bcz9uOTGL1cU178x1oKh2Y5VDvYDgQQJ1LSVfM7kxnZK2CcaLkH0SYlFRUVhwzsJSg2GBYGUFVjXXOSS''@;'; put 'put ''wriZy9AKu5IzObKQgNn3YZaaW2swfu+qvIYPR1soNNvRisH2IJAEAlbD7Qkc3pttO/Xcoen49Z43s5SJN/ToorWqtMFMglQhBRBIKYFNB6afYRL6M4LxdylRB57+/+QPeYthdocpvX+o9LSNeG1paLYpdRpAsiDwscDa+kvO1dSsnQjj84a6CGmaWNIHMWG/qPTU/QPMQAAERi+wtiV/PpXs5wTj''@;'; put 'put ''6QRTOjSCtdylS52836d3bzntH5OeW7x4Bx9uBGi2wwnB5yCQxAIbWuZPMXnXkxpzFkam6Te6j7qVU+9Apv8P5bOa4j7xehKzQWogMCKBqvoSZleCi4Qw1mos6/zInaQU3MbcT5jE+Pny6Xte/ayg0GxHRA4bgUDyClS3FtrtbOr2gNn99cgshRQ8aPZ8MMl+9n2G7v/1zcV7DydvJZAZCCSngPVv''@;'; put 'put ''THB6FSZkLcb4tMgsTTHwENVjCOm3lRc0vHeiKqDZJuexhaxAYMQC9zy/cLrk+DFd+s882U7WbS8hRSu2KVeM5eGOEScDdT3IRAAAH41JREFUG4JAGgtsODDr8338H7/KUibNVKjN+ek/btEbDjVnWdAIvljp2d019HNotml8YkBp6S1wV8fcbLuJ1wSMnqUqdWSfqFrd9PYw6viQIuUPQjG3rZzR''@;'; put 'put ''CLNNpfdpAdXFWMB6PzeraeZ5Pt55f5Y6sfCEk2JI/GebMuHGpTOeGFwKE5ptjA8MhAeBWAhsbJx5viTiXkrYrE//dc1NjNBfpJS/IUTbDg9JxeIIQEwQQGh9c8E1GNF1BJMzIpuuQpzPkID/2vBkM9Bs4YwBgRQTqG4uylOY+2FD+D/xwIaUUtqYqz1g9PyGI/SHNcUt/SlWGqQLAiknUNt+mZsS''@;'; put 'put ''tj9k9uUNJi9Rv8q065bl73k6/Dtotil3aCHhTBaoaZtZ5A31bHequdOGOoRM7+s26r6lN+f9vVUXvK5nshHUDgLxFNjaOvcrXrP3gMYcgwvUa9T902MzLl1bhasENNt4Hg0YCwSiILC+saAoJHyfarSmNJ5UOF1aMaspqquURCFlCAECaS9wR8NX/mRXc78RLlRI8Q7Scqavytv5iVmm4Mo27U8F''@;'; put 'put ''KDAdBNa3eM4JGN11LnXK4BPHOvf3M2Jf79J81UvyDsGqP+lwoKGGlBLY1FxSYEr/XoXas6zEheScYmVphaf+/shCoNmm1KGFZDNRwHrqWPq6ntMU1+Batjr396nYXllZ3PhgJppAzSCQaIGBd28FOUCGzFGuEeeuY/kzvj709jHcRk70kYLxQWAEAtayelsOzl0nhLE6vLk1a40p+G1rZrauG0EI''@;'; put 'put ''2AQEQCAGAhubi9YSwm79uJkSH8ZK2YrCPSdcjg+ubGNwECAkCERLYENbSQk3fX9SqWNwwXiM6dYVBXXLo7WodbRyhTggkCkCtY2XTSYqPqgL3+c/brZ0e4Wn7pqTGUCzzZSzA+pMOYGB21SS7SSYlIWT7wu9/5aTuOevnv38X1OuIEgYBNJE4O62RZUh4d2IMR7oodw0OylBsyuLW16DZpsmBxnK''@;'; put 'put ''yByBmrbZl5nceIISZWCZL4MHfQqyfbty5oGdmaMAlYJAcglsap5dasrAU+GHoqzsFOpYc3P+rvWflSlc2SbXcYRsQGBAoOq1q9Wcvu4/CmkMLi7Ahfm42xa8dkneIQOYQAAE4i9g3W1ixPV7U4S+GR7detVH5Vkzymft+syVtaDZxv94wYggMKzAxpZZs0wReFqlDpe1sTU7FMaytNLTNDjX6rBB''@;'; put 'put ''YAMQAIGoCmxunXO1LgIPM6LarcBCcpNhbdkKz/5tww0EzXY4IfgcBBIgsPX5y/7DMP23h4fm0njTp6sXVpU2BBOQDgwJAhkvsP75klMUk+yRiH8ljKFSx06nP7D4+hH8u4Rmm/GnEAAkm8C2jssdAd1/QCBzYK5V61UfhPAvVxY1ViVbrpAPCGSKQHVraTVCoiJcL5bYiwiZXVFY9+JIDKDZjkQJ''@;'; put 'put ''tgGBOApsbi79IsfmQYzJwLJ5pggFKFGLVnoa/yeOacBQIAACHwnc3TLnLMqymgO89/QwCsHq4z1B45qq0gZzJFDQbEeiBNuAQBwFNrXOuklKuYVgQq1hQ6b3HY2p51d62gJxTAOGAgEQ+EhgS9v8X3EZujEMIkyzkzBaWulpfGWkSNBsRyoF24FAnATu71h8p1d//8fh4bgwn1hd3HJlnIaHYUAA''@;'; put 'put ''BIYI1LbOvTjAvc0K1RzWr62vdVSadevNBbs2jgYKmu1otGBbEIixgDU9Y237vBe41C+1hjJ40M+w4+qVxfXPxnhoCA8CIBAhYL2CN8nbv13ngcFXfUxpvCk0x/Rb8/b1jgYMmu1otGBbEIixwK+avjYBqeTlIO87wxrq+IIDquezZqaJcUoQHgQyVmBzW9k1XOiP4o++0uHC0BViLx/Jqz6RaNBs''@;'; put 'put ''M/Y0gsKTUWBbx9zsgC4PCWSe81Gz7VeofTY8HJWMRwtySmeBmvqSHKShRonk4Ks+jNie7HK5r6m6YIc+2tqh2Y5WDLYHgRgKWLeRH37pXx7vCvz9W9YwQgouhbxt9cxmWOEnhu4QGgQiBWrb5pebMrQl/HshzE5G1a+tKKw/4ao+wwlCsx1OCD4HgTgKWM3214eueaBfP/r98LAY0Y0VnrrBJfbi''@;'; put 'put ''mA4MBQIZKVDTNvdLCtGe07n3zEEAiR7p0/H3RvqqD9xGzshTB4pOJYHa9vnrTREabK42ln3P0hlPLUulGiBXEEhVgSpZRZwtu5+kRL08XINpBo8qijanorDxz2OtC65sxyoH+4FAjAS2tJf9kAtzcK5Vm+Les3T6zgUxGg7CggAIDBGobp0zQ+f9e4euIa1grfLmwj0144GCZjsePdgXBGIgsKW1''@;'; put 'put ''tCwkAjsZ0QYmO7dR9+tL83deEIOhICQIgECEwNa2+Y8bMnTF4FWtNN600ey88oJdfePBgmY7Hj3YFwRiIFDTVHx2SAYOqSwrxwqvm/6eLM197rL8/Z0xGA5CggAIfCRgveqjc/9DjKg261fWqj5EkhsqixsfHi8SNNvxCsL+IBBlgbs65maTQH87o7bzrNBcGCGGldKKogNtUR4KwoEACHwksK65''@;'; put 'put ''yKUS1iwRujCMohHXrpsKnl4UDSRottFQhBggEGWBjS0znyCYDLz+M/CD6S/7Cmb9rApXiSgPBeFAAAQQQrXtC1bq3L8uPCc5kqifYm3hcs+e1mgAQbONhiLEAIEoC2xuLVnCpbgXYzzwb5QRewfqwsXli3aFojwUhAOBjBeobl1wbsD8oM3O3JMG/75FdHuFp+6aaOFAs42WJMQBgSgKbG4u+qKP''@;'; put 'put ''+5rsSvZkK6w1uYWKtenlnn2wzF4UnSEUCFTVl7AJGruHI+OHYQ2Th95XmFo6nld9ImWh2cK5BgJJKLB9+9X06Jm995si9L1weobQnwkY2lVVpQ3BJEwZUgKBlBTY3DY/3+D9DfSjh6KsIihWypcX7tsazYKg2UZTE2KBQBQFNjYXfUci+SAlimaFtRaRV6ijuKKw7sUoDgOhQCBjBapeO19VP9Se''@;'; put 'put ''tinueYN/1HL9DYUiT6WnrSuaMNBso6kJsUAgigK17fluIbJ2CWR6Pr66De3KsRlXLck75I/iUBAKBDJSoKZlzhxd+HYq1DawVq2QpoER+eHKoqaHog0CzTbaohAPBKIosKHF8wOC6H0YE/Lx1W3WdysK9z0exWEgFAhknMDdB8smhri+GyMysHa09aPRrGcdft8/Xx+Dr2qg2WbcKQYFp5JAdWuh''@;'; put 'put ''XQj2FCFkbjjvgNF7jFHnojXFLR2pVAvkCgLJJLC1fd5yQ4RqEDr+xL+C7ZILlL+i6LkXYpEnNNtYqEJMEIiiwKam4osCon+PQ8mZMhgWo3aT4itumdFwNIpDQSgQyAiBmsaZp/plb4ddmTAtXDAj9j91BYLWA4hmLBCg2cZCFWKCQJQF1rd45mOJngo/LGWF183AQQ2r11XMbP6/KA8H4UAgrQXu''@;'; put 'put ''aV94a4D7fhmewIJz4xgj6vyKooaXYlU4NNtYyUJcEIiywNrGSx7RmOu7Q8MSRNtMJL63ytPwlygPB+FAIC0FNreV5vv0nqftyvEJLKz5jxmx3bKicN+4VvUZDgua7XBC8DkIJImA9XSyN6Q/NvQ1BSs1r975bo596ne6Zsxsgekck+RgQRpJKVD77GWa33Vsl0qdpeEEdTPwukPFheUFB8e1qs9w''@;'; put 'put ''BUOzHU4IPgeBJBKwGm7IINspVT+xvq3Bgz5GbNswtt1R6dkd1fcDk6h8SAUExiVQ3Vw2ExGzMRxESiEQxj9Y6Wn8zbgCj2BnaLYjQIJNQCCZBO6pL8nqpj2/cbDsq4fmJaWUAaP3Lac2cXlFYd2uZMoZcgGBRAtUty7IFdy3i1A6I5wLI9qTGtO+syRvZ8zfW4dmm+gzAMYHgTEIWDPfKB/afkAw''@;'; put 'put ''uUNjzuyhIbgwdEbtBzAS/7GisP7gGMLDLiCQdgKbmmduwISsChcmhNmpMvvXywv2tcejWGi28VCGMUAgRgJ3tl56ntd37NFcx5kXEkzZ0GGsW8uUqI+rSPl5eVHd2zFKAcKCQNILbG6aeyZTWL0uAmcPJivRI306/l6sXvWJRIFmm/SnCSQIAsMLrG2avlDnvm0udfKZkVvrpreHYHU7o+4fw/e5''@;'; put 'put ''w1vCFuklYC3q0XmWfmuA9/wyXJlhBo+oilYWzVV9hlODZjucEHwOAikisKHFM8VndG91sOxvMKLZItMO6L3/59BylvS6P2isuuB1PUXKgjRBYFwCNW2zLwuZvt+r9PjXLdazDYxoq5YX7q0eV+BR7gzNdpRgsDkIJLvAhgOzPi9o6CGF2GZF5mr9h8arH3s5S8m9cWVxS1y+q0p2L8gvvQXuPrjo''@;'; put 'put ''KZ37Lg9XyYXxFiXywkpPWyCelUOzjac2jAUCcRIYWDqsy75MCHPNJ6Z5/Gh8U+hBjNAfNKb9tLyg4b04pQXDgEBcBWray64yTP8j7KO1arkwDULoj+Lxqk9kodBs43roYTAQiK9AdWthLhdoFZfGTSp1uiNHD5p9XRgpv2M05xeri/Z8EN/sYDQQiJ1AbePMyZyxOonEl8OjDMx/7HItrrpgR9y/''@;'; put 'put ''RoFmG7tjDZFBIGkE1rUVfMmGs1eHzN5rGdHskYm5tFP+0qcfrRUO7T9XX7THlzSJQyIgMAYBKRHe3Dpzo0B4BcZ4YHlKJGQfxsrCiqL9bWMIOe5doNmOmxACgEDqCGxsKiomlNVKKS4Kr5E7NHtKtH0cyx+f/rec/1m8eAdPncogUxD4WKC2Zc45CnM0BHj/6eHfEkR+t8JT/51EOUGzTZQ8jAsC''@;'; put 'put ''CRKw1sjlgnzfpU29zW90nhKZBkYkoFLnw6bsq15e0PhmgtKEYUFgzAK17fPvM0VoSTiAyUPvY0WZv7qg6X/HHHScO0KzHScg7A4CqSpwV8fcbKYbtxGEVp+wBon8hCq/IF1KTfmiXaFUrRPyziyB2ta5F/vNnjqVOXMGr2qxUhnrVX2GU4ZmO5wQfA4CaSxgfbe1sdVzAcOOm00R+HdKmBpZrlOd''@;'; put 'put ''8qpf/3CrRMFH4v26RBrTQ2kxEPhtfYmtz679FxfBfw6H58J8267Y8pfl7++MwZAjDgnNdsRUsCEIpLfAxpZZsxCSGwgmgxO1hyu21vxUaVajQObPVhTsa05vCaguVQW2tJddGzL9vw2/6mPVQST94YqiugcSXRM020QfARgfBJJIwHo/19U7ZT7FZK2QfPCViaFNF0uyExP0s4rCxlcxRjKJ0odU''@;'; put 'put ''MlhgY0fJJBISexHGXw0zKMT+lCF6r02GOzLQbDP45ITSQeBkAlbTdfa4fyyEXK1QmzNyOylFn8ocWzEyaxJ9ew6OIghYAjVtc2+U0vhVWIMiJUQoLr45f29HMghBs02GowA5gECSCmxuL5saNPu3qcT+zROlaHLjQ4bpzyuLm+5O0hIgrQwQqHmh7GzG2W5DBM8dbLZY++Op72ZfkyyvsEGzzYAT''@;'; put 'put ''EUoEgfEIWKumvDPt7wv8oa7Nbvu0L5zgKpcr1NHKublmhWd/O9xaHo827DtagSpZRRzNu/7IqO1b4X2tVX0UwuZVFre8Ntp4sdoemm2sZCEuCKSZQFXHpQ5H0HZ50OzelKVOPi2yPFOE/Bipj1HCflLpqftHmpUP5SSpwOaWsukh4W1QqM1hpWjNf6xgddWKovraZEoZmm0yHQ3IBQRSQKCmviRH''@;'; put 'put ''Z97lXPJyG3PnRqasm4EjCrNVG6r6wK15+3pToCRIMUUFql67Wp3U3/+oLgJXhUsImt7/zeauoptKG7zJVBY022Q6GpALCKSQQHVr4WlevX+rnbkXUaJokan79e43XbapK7pdOfsSMfF7ClFCqmMUqGkrvVJK8cfw7tYrakjKG1YVtzw8xpAx2w2abcxoITAIZIbAXQcKPZSSaoLp9MFJ34eUzoi9''@;'; put 'put ''wRT6morCuhfg+9zMOCfiUWV164JcJAP7h77qw7D6uCm9302GV30iDaDZxuOsgDFAIM0FqupLmFPVvxYw+u7OUicOTv4eLptL01CIfadEbGVF4XPvpDkHlBcHgdrWuStMZNQMXtUK3s2wtmBF0f4X4jD8qIeAZjtqMtgBBEDgZAK17fnugIErJRKVKrW7Irfj3PjQruTcpwteU+nZ3QWSIDAWgS3t''@;'; put 'put ''877QFzxS5xzyh521qs+09yb9a7K86gNXtmM5srAPCIDAqAQ2HZh1hk92VmvUeZlC7Z+aFCNg9r3t0iYuDxiBxjXFLf2jCg4bZ7zA5tay+wQyh67qcxQryoJEruoz3EGBK9vhhOBzEACBMQusb/GcY4rQvRpxlJ1o/VxfqPNVhzK1/IzDuY3JekUy5uJhx5gIVLfOmaHzvj0qdWZbA0gpBCO21csL''@;'; put 'put ''91bHZMAoBYVmGyVICAMCIHBygXWNhd8ypO9eO8uZijH+xH93TBEKEET/QAX5Se/MsvercJUASxA4kYC1StXaxot32xT3vPDnhjD+n2qo+RWlDT3JrAbNNpmPDuQGAmkksK65yCWlvhwhdItKHZ/6PtdqugiRR20se2V5wa6+NCodSomSQO3BsplBw7+bEdVuheTCCGGEv7+quOXRKA0RszDQbGNG''@;'; put 'put ''C4FBAAROJHBX8/QLODfW2Zh7UeRVrpRSOtXJL+umd3VXMNRQVdpggiIIWAK17Ze5De6rxxhfEhZhxPbkKX93X5UKX0FAs4XzGARAIO4C1u3ADS1FxQih9YywgsgErCsWhdrrJZK3VRTWvRj3BGHApBOoaS27SUi9Nvzdv+SylxJlXrK+6hMJCM026U4pSAgEMkfAmm/ZFqT/kqVMWq1z3zmRlQvB''@;'; put 'put ''ezTmepibwXtXFNe/kTkyUOlQAWv1qb7g0eez1Elnhn9PMP3vFYV1304VKWi2qXKkIE8QSGOBDS/Pd6L+wBohQxUKtWdFlmpy/RgjyjpGnQ/A97lpfCKcoDTrLkjtwbkruTA2hD82TP9hhdkXVnoaX0kVDWi2qXKkIE8QyACBtU3Tz7Yz90qDB26gRFEjS87WTvlLd+hozcrCAw/A1I8ZcEIMLAo/''@;'; put 'put ''5xK/0b3bztyTwhUzzJaXF+5PqlV9hjsa0GyHE4LPQQAE4ipQJRFxNhdMx4TVEkxnRA4upeCU2Oq4aa5eObP+5bgmB4PFVaCqvsRmo96nVeYsCw8sBP8rsrEZq/IaPoxrMuMcDJrtOAFhdxAAgdgIDKyfG2DftSu5qw3hPzdyFOv7XIU4fi2wfk9FYQPMtxybw5DQqFta55UFeO8Tn5j6E9MbKwvr''@;'; put 'put ''7ktoYmMYHJrtGNBgFxAAgfgJHF8/138Tl0blidbPtb7PtTFnLTJC28pnNR2LX2YwUiwF7j5YNtFvBJ5mRBl8Wl2lzp1Ov3/x9aUNwViOHYvY0GxjoQoxQQAEoi5Q0zjz1BAO3E2wsogR1RY5QEDvPqxR11a7qdydbAuHRx0jAwJWt5QuFUjfTDBTrHIxwj6KtDnlnt3Pp2L50GxT8ahBziCQwQJ3''@;'; put 'put ''NE4vCxgfbM6xnfklggmNpFCw41UuzdtJD3uqfNGuUAZTpWzp1lUtF6iJS/NL4SIYsf+pK7/gylSdzhOabcqejpA4CGSugPUQla0p/3JTBu5zKBNOiZSQUgpT6B2a4vzBioL9/5u5UqlXufWqz9bnF67STe+dBFM2UIGUfZTSOcsL6g+lXkXHM4Zmm6pHDvIGARBAd3Vcmh3o7d+sKa5v2ljWhEgS''@;'; put 'put ''U4T8EuGn7dj+k/KiureBLPkFNjXPLjVlcKdCbQNLM3JhGip13Jrsq/oMJwvNdjgh+BwEQCDpBTa350/1Br13KTRrsUJtjsiEDR706dz/ikPN+WmW6m9bknfIn/RFZWCCtc9epuEJ/PeGDF0RLt9a1UchrsJKz+6uVCaBZpvKRw9yBwEQ+ITAna2XnodNtAYhfIXGjq93OvTHWuhAIvEGRuheVdof''@;'; put 'put ''6zSMD2Cxg+Q5iba2LSwJ8J5nGNEG/mDiwtQp1Zan4qs+karQbJPnPINMQAAEoiSwscVzltforrZT98ITXelaw1hXuypxPE0xXecKmX9OxddJosSVFGFqOhacinT9OYnEheGENJr1rN9mLF590R5fUiQ5jiSg2Y4DD3YFARBIbgFr+kck5BpMyHXqCeZcDmdPEH1bYvSIoOw3ldP3vAdTQcb/uFa3''@;'; put 'put ''lW5BUpSHR7ZW9dG0rG8sm/FsY/yzif6I0GyjbwoRQQAEkkjAerp17fMzclFQ/6lE6Lt2JXtwjt3INK2l/UwResfO3A8yibf7ZKhrTXFLfxKV85mpbOu4VEFogsPgklGT0n5FJ0qQY8NGpSqoNBnnPOgOrSl+Kqlqqmlb+DkbVVsCZu+0cIGMKDtQl/Iv6fL6FjTbVPlXBHmCAAiMW6Cm/qs5QUYW''@;'; put 'put ''S4GWKcx+Hv1owoQTBbZuMzOiee1swh6d+/YRotQhhPoSueqQtToS9WGNEFNBBtaoSs5lRPsCRuSrNuY+3eDGNJ17J+tmX5YuQkQiMfjfeOvr6ix1IpcSfTjBfvobhgh1h8y+twSnj9k4f+/7CWzAW9rm3cul/qPwcRCCd2GpzEmnua+h2Y77ny8EAAEQSDUB6wqwL+T6Ijd9twtszj7RNJCRNenc''@;'; put 'put ''3ysl8mVrU17RpdGgUdtugxvHOBPcFpKcaNkhtd8Zur70oVFPJfjb+n+3CaVLkURTuNqnmcLGpGEQQlm2RMY/SYRnEMIulFKc1hN8b6r1/inGmFKsapQo2nj8rT8qnGruMYU46rjQd0rM2xl5v3NJ3iFjPHFHum/twdKL/KH+BpU5c6x9pBRCpVlrluXv2pROt/Oh2Y70jIDtQAAE0lLAem0oYPCv''@;'; put 'put ''ZSmTvu03ugsUavvUeronK1zngT400Bwcerbt9KMqdbzNkfG+Yfr/RiR52RB6jySoH3MhqEKkkIIhRBWExCSKqWYI/iWHkjNBIvk5hm2nBY3eM3pC/3CZIjgwmQNGhI4mn2gcoJDp7861n9FkysCvHb7A3lg+OFZVX8Im2tTtQ1/14cJ8i9vsebfm7euNRj3JEgOabbIcCcgDBEAg4QLr22d9AZv8''@;'; put 'put ''KkbUqwwRPJ9gqhBMPzUlZMITPUkC1lWhRFJYyxBKJCUa+P9yYGuMMbb+9/gUl4RghMnx3534R0huutUp9Qb3387YsYOxuNKtaS+7yjSDj1LCBtYutr4zZ0hdVlHc8OtkNR5rXtBsxyoH+4EACKStgDUdJGooUR1KYI6N5SySUi7SuXfaeG/ZRgvMakoKcXQRjI5QqrXrPHCYmwGvIQIfcsTfZcT9''@;'; put 'put ''jkqFty+k9Q0dU3X4s4lunG5yfiYjyufsWm5xQO8rUqnttJPlZjVujblekdy4Mytk7IzWla61Vu0EGz3EpXl+eGyNZj2zdMYzl6fT7eNwbdBso3X2QxwQAIG0FahuLbRjk+UEcahAY7ZLNOK+pD/0/vkCmW6F2LMoUQauzKL1Y32Pago9YGMuL6XqEYbYC0He9xZC6GVpsne5U+2agLqNI/azzaoL''@;'; put 'put ''duhjHdd6UrumrdCGOT3VIPhrutFf7lCzP7V2sBXfutKVUh60kewbb/Y8+8pYxwzvt6Vt3o9MEfrV4NW1RP0atS+6qeC55vHGTsb9odkm41GBnEAABJJeYFvHpY5OTu1KCJ/GEf+8JORUjdpzGVJPVZnrLILIWbrpzzFkUDOFQax7uAgjoRG7oSouv5DysJDme7rpPyIx7xZcD5hC9yLMj1JC/mow''@;'; put 'put ''ckTpyQn6VD0Ur1muqjouddh86ldVpvxbkPdfdaIHx3Qe6Lez7EelKdeumLnv72M5UJuen3+GItB+U4S+EN7fetWnK2BeF69ax5L3ePaBZjsePdgXBEAABE4isH371fRvX+y1aQFKeSBANGbikMmkrhhcIdPMSs+OQDLjbW4qOjMgA9WUqJeFp08cmm/Q9Ha5tMm/lBI/OJrXoSyXI2f0buUydGM4''@;'; put 'put ''nmEGj6jUvqiiqOGlZDYZT27QbMejB/uCAAiAQJoLbGjxfJkRezUXoTknelgMY/Yywfhn3QHzmZFclVqv+vhC/QeGzl3NkFJR7tm3OZ0podmm89GF2kAABEAgSgJ3NU9fnKNN+7HP6L4Io08/xexUpjweNHo3Lffsaf2sIbe0z3+Mi9A/h7cRUrzjEO5Lls58pjtKqSZlGGi2SXlYICkQAAEQSD6B''@;'; put 'put ''qtfOV909U2/gUv8FJSw3MsOBp6Spcxsj4vZl+fs7Iz+vaSm7ypC+h4felsaILKnw1N+ffNVGNyNottH1hGggAAIgkPYCNU3FZ+vIvINgcuWJnsRmxPYGFuh2A/U9UelpG/hu+q6OudlKSK/HGF8cBlKw9kSnO/va8TxRnSrY0GxT5UhBniAAAiCQZALVzUV5PaEPfuXSJl8U2XSPvyok2jWSXY4I''@;'; put 'put ''elsI/dumDN1tTTU5UIZEfUgST2Vx/WtJVlZM0oFmGxNWCAoCIAACmSOwvrloZsjsfcCpTvxiZNVCCm5Xcv6uYtXdb3w4Mfw5Repjyz17r84UJWi2mXKkoU4QAAEQiKGA9X2u2mnfyIhyAyOa/bOGEoJ3U0qKKgob/xzDlJIqNDTbpDockAwIgAAIpK6ANSPVXe0FZxFTriWYXnGy6S0Voq64uWDv''@;'; put 'put ''ltStdPSZQ7MdvRnsAQIgAAIg8BkC1sQV7007fJ7A5E6CyTeGbqrz4OvI7vKk26o+w50Q0GyHE4LPQQAEQAAExiRgLaGXpfAbhDRvZ1SdTJGiE8wW3Fz4XMOYAqbwTtBsU/jgQeogAAIgkAoCtY0zJyNVu19KkhXktivXFD/Vnwp5RzNHaLbR1IRYIAACIAACIHACAWi2cFqAAAiAAAiAQIwFoNnG''@;'; put 'put ''GBjCgwAIgAAIgAA0WzgHQAAEQAAEQCDGAtBsYwwM4UEABEAABEAAmi2cAyAAAiAAAiAQYwFotjEGhvAgAAIgAAIg8P8BcbF+IvaVe9EAAAAASUVORK5CYII='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-table-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAGTCAYAAABgcbg1AAAAAXNSR0IArs4c6QAAIABJREFUeF7sXQecVNXVv+WVmdm+gKBgRY3GLxqlLNsQY4nGoFGDGhOjsVNEqiXFoKJIEdTYiCWxRlEESyAWBNkCKGpMYo0FQRTp26a89+69X+7Mzu7b2ZmdXnb2zC+R3Zl7zzn3f+7b/9xyzsEIXoAAIAAI''@;'; put 'put ''AAKAACCQVgRwWqWDcEAAEAAEAAFAABBA3ch2ycYrSpqdjKrEgYvaAbK4JuSPJvP6/3Ux3f9vKl4mc3eTZZTELr+ItfVoSwstiOsLhdbk67G9Sl1xyQvg1n2ModjZ5bppwAaVOvz/KsToprMnn4Tqi4ZnpDEnMtZY50QsmMQqK1y74Jij+dPeN3S8oX4I+iKIfbBvLM9FT+ON5p9oczwWnOJ9Duwy''@;'; put 'put ''48EwFltiwTw4/+1z30van4e2wPPgpSZWiO7/mfk8hGjU+8uj798Trw3QHhDIBAIdf8SXNI5zGq7yvzrVku8TTDVKVAUjQjHCGOMAKQuBhP+39pdAnWSNEepGekKIsEQopKT2V6BfZ7PgL+3v2PrHy++ddgYNxn57O3nLbn9ksANy4mVY+xgjjdWPKeq0E0mspS4/3lii0q7b3kb2acdPCG63O4Bd''@;'; put 'put ''AKcgrl3ADTPILoC09+wJFzkf4p2Ydrvi7Rtve2ybWz341P9R13FiTNpxD37WPu3lgNvHTBBCAcjlmKQfgvPePtcDHgg/90Nt6vrciK4PQ+dzFvwp3ocgMJs6n7Uu6mP1ZWzPSUB06PPck/+6zv1g/y7zyz9e+R/p1/Z574deyDe4fI+zgF6iMeH9zBJt55x71H2t8c4baA8IpBuBjgfxkbfO39+H''@;'; put 'put ''PJ95rL1aupWCfEAAEAAEUo1AodYfKaR4n0uO+8uOVMsGeYBAsgh0kO3ijecNFcL7kdvcqyYrFPoDAoAAIJBpBCTZEoP0u6zq2d2Z1g36AIFoCHSQ7QPvnXMYstiHbnOPEq0TfA4IAAKAQK4hIMnW8njLJ9T+Hc5tc805YE/nUeRD74w71OLmR0C2MCsAAUCgNyIgybaNsrKpxy7f2xvtB5vzG4GQ''@;'; put 'put ''bWTfx0C2+e1wGB0gkK8IANnmq2fzY1ydF6TePvsQA/FPgGzzw7EwCkCgryEAZNvXPN67xttBtg9uGHcwI+anPZEt46ZPIG4PN+kI7rFf2O8MeuiIVEggZKF3AZmgte34+4Mwgj93hPtQouo9yWXcMgViZrsT8hTj2EJoAlEncUUl2RoHfmyfw1KOdAcmWNHsoW7hfGFxn0eIQPhJ11e4EKmYxxJO''@;'; put 'put ''VbzjS3BKZr2b/ZnwuyXwH0ykXyhRI0ZLANlm3XdgQA8IdPzBuf+9nx2ELfTfnshWI/opFmL/kvKIYfBW3ddBvJrbhYVmyEBEpFIW01+9tiRcozGas+RixmhbECf5r0GcWPXKfzlWiY5VpBSVuoY8tcP9+bHhYBIyxhbT3zBFvGp5GZN4mIrV5Y++Thn29uALzd3pJ8OWrCNW/4WzK9axJ+H6HrtG''@;'; put 'put ''sz34ueHhGKGCgKz2f4KChWEShVFKNO2nnBv3RiJcl1q6wmDGTB9r2okNjRPdx32MCoelCK9idTwD0g9B2T35I3Rgdv/YP7P7Kls4pkJvpLlify6kHtlOqBpRGR4qBK+PpFuSbekXRDn33GfDfPlJhcUgAxBIHAHbme24A4QwP+95G7loyLSql7cmrg56xorAkg/GaYgPeuXrln+NCU+2nCMujpxe''@;'; put 'put ''W/9prDKhXXwILGo4sZIh31qCadgb+i6t/MGrhi+7Ij6p0DpRBO7ZcGI/g1k7gWwTRRD6ZROBDrK9960z96cYf9ET2apcG3x1zWvfZNPgvqJ78cYr1BKHvvKb5n+dGIlsGWKHX1vd+HlfwSTT47yjfswoga16gikNp7tA7f/IlSOWXpppu/qqPiDbvur5/Bh3XGSLEB0yreoNWNlmwPexkC3G1vem''@;'; put 'put ''Va37LAPm9EkVd647ocLiZkMksi3UBz1+xbBnft0nwcnCoBc2/rgcIe8uWNlmAXxQmTQCnRek1p89hFH+Zc/byEC2SSMeo4BYyJZwcdjU2vovYhQJzeJEAMg2TsDS3BzINs0Ag/i0ItB5Qapx3GCsmpuAbNOKd8zCJdkWadqKba3/PinSNjK38KEzj1/7ZcxCoWFcCATI1mogmITdRi5S933i8hFP''@;'; put 'put ''XxiXUGicMAJAtglDBx1zAIEOsn343TP2Mxn5Csg2B7yCEAKyzb4fgGyz7wO7BUC2ueUPsCY+BGy3kc/eVwi+Gcg2PgDT1RrINl3Ixi43Ktlqg568fPgzv4pdIrRMBgEg22TQg77ZRiAusoXbyJlzF5Bt5rCOpCkq2cI2ckadBGSbUbhBWYoRsN1GHjeIYnMLhP6kGOEExQHZJghcCrtFuyAFZ7Yp''@;'; put 'put ''BDsGUUC2MYAETXIWASDbHHVNLGRrEHPoDZXrN+XoEHq9WQsba0dyIRoh9Cc3XAlkmxt+ACsSQwDINjHc0t7LH/qj6Su/aY2c1ALINr1uWNBw/AiE2Dog2/TiHKt0INtYkYJ2uYiALc72jIGMkq9hGzk33BRLnC2QbXp9BWSbXnzjlQ5kGy9i0D6XEOiMs33/rH2wIbYC2eaGe4Bss++HhfVjhnNs''@;'; put 'put ''rY+0si3SBj52+fAlF2Xf0r5hAZBt3/Bzvo4SyDZHPQtkm33HANlm3wd2C4Bsc8sfYE18CADZxodXxloD2WYM6oiKgGyz7wMg29zyAViTOAJAtoljl9aeQLZphTcm4QvqaoYhguQ2ctgSe7CNHBOMKWsEK9uUQQmCsoAAkG0WQI9FJZBtLCiltw2QbXrxjVc6kG28iEH7XEKgg2wfeXfcAIOZ30C6''@;'; put 'put ''xtxwD5Bt9v0QC9ludYrLZx31rJF9a/PfAiDb/PdxPo8QyDZHvRsL2ULVn/Q6LxrZFmoDH/sGyDa9TrBJB7LNGNSgKA0IANmmAdRUiASyTQWKycmIRrbyzBZWtslhHE9vINt40IK2uYYAkG2ueaTdHiDb7Dtm0bra4xgXGyJdkIKVbWZ9BGSbWbxBW2oRALJNLZ4pkxZI16it+AaKx6cM03gFAdnG''@;'; put 'put ''i1h62wPZphdfkJ5eBGwl9sb2F4J+Cxek0gt4rNJjKUQAZ7axoplYu2hkW6QNeHSrE18BF6QSwzfeXkC28SIG7XMJgVCylbeR1cgG0iHTqt7YmksDyFdbgGyz71kg2+z7wG4BkG1u+QOsiQ8BINv48MpYa0m2xZr6929b/3NyOKVCcA4r2/S6A8g2vfjGK/2+upoyL6W7I/Ur1Pqj0i+Icu65z7J4''@;'; put 'put ''ZUN7QCDdCADZphvhBOXHQraEi8Om1tZ/kaAK6BYFASDb3JoisLLNLX+ANfEhAGQbH14Zaw1kmzGoIyqKRrZwGzmzPgKyzSzeoC21CADZphbPlEmTZFuoKS9/1/rBKZG2kWFlmzK4wwoCsk0vvvFKB7KNFzFon0sIANnmkjdstgDZZt8x0cgWbiNn1keSbE3WtEWluiucZjizzaw/QFt8CADZxodX''@;'; put 'put ''xlr7byPr9KVtLR/+GFa2GYO9i6JoZAvbyJn1y8LGynKT8S0qdQDZZhZ60JYCBIBsUwBiOkT4yValL21rA7JNB76xyIyWrhHINhYUU9emnWw3q9RRACvb1OEKkjKDAJBtZnCOW4sk2wKVvri97cNTYWUbN3wp6RCNbGEbOSUwxyxkTl1NGUGmXNkC2caMGjTMFQSAbHPFEyF2+M9sVfLCd20fnQZk''@;'; put 'put ''mx0nAdlmB/dIWmFlm1v+AGviQyA0N/JWyCAVH4Dpag1kmy5kY5cLZBs7VploCSvbTKAMOtKFAJBtupBNUm6AbPHy79o+/kmklS1kkEoS5CjdgWzTi2+80oFs40UM2ucSAkC2ueQNmy2zVo9RhpZ/74UdQLZZ8xCQbdagD6sYtpFzyx9gTXwIANnGh1fGWkuyPbTf4cu3t35yOqxsMwZ7F0VAttnB''@;'; put 'put ''PZJWINvc8gdYEx8CQLbx4ZWx1n6yLTts2Xb3pz8Fss0Y7EC22YE6Jq2wjRwTTNAoRxGA4vE56hgg2+w7Bla22feB3QJY2eaWP8Ca+BDoINv73z9rH2wIeRtZiSwC6tnGB2/irSXZHlJ22LKdsLJNHMQkewLZJglgirsD2aYYUBCXUQSAbDMKd+zK/Bekyg5/fof7k7GwjRw7bqlsCWSbSjSTlwVk''@;'; put 'put ''mzyGICF7CADZZg/7HjX7ybZ06NIdns/OALLNjpOAbLODeyStQLa55Q+wJj4EgGzjwytjrYFsMwZ1REXRyBZyI2fWR0C2mcUbtKUWgQ6yfXD9GQMZJV/DmW1qAU5UGpBtosilrl80si3SBj621Skun3XUs0bqtIIkWNnCHMhHBIBsc9SrsZCtQcyhN1Su35SjQ+j1ZkUj20J90OPfOPhlQLaZcTWs''@;'; put 'put ''bDODM2hJDwJAtunBNWmpQLZJQ5i0gKj1bIFsk8Y4HgEQZxsPWtA21xDoINt73xo3iGJzC2wj54aL/KE/5UOf29n22ZnhLBKCc1jZptdX0ci2SN33ia0udimsbNPrh6B0INvM4Axa0oMAkG16cE1aaiDO9pBnd7o//xmQbdJwJiQAyDYh2NLWCcg2bdCC4AwgAGSbAZATUSHJ9uDSQ5bs8nx+ViSy''@;'; put 'put ''FYgdMqO68atE5EOf6Ajc0Tj6WCH4WwTTsIleirRBT2518ktgZRsdy1S0ALJNBYogI1sIANlmC/koev1kW3LwM7u8X5wNZJsdJwHZZgf3SFqBbHPLH2BNfAgA2caHV8ZaS7I9qPTAv+32bPo5kG3GYO+iaF5D1Q8JIm/DyjY7+IdqDZCtsVmlzsJwFhVq/VHpF0Q599xnWW5YDFYAAp0IANnm6GyQ''@;'; put 'put ''ZHtgyYFP7fFuGgdkmx0nzV9fezRmfCPBihrOArgglVm/ANlmFm/QlloEOsh28caz9xWCb+7pNrLKtcFX17z2TWpNAGnhEAiQ7f5P7PFuPi8S2ZqcH3x9bcNmQDA9CMxvqPo/jPC7kcgW4mzTg3vP28iwss0s6qAtVQjERbZYc+w3dfgr36ZKOciJjIAk2/1Lhjze5N1yfiSyRRY+aPrxa7cAjulB''@;'; put 'put ''YGF99VEco/cirmy1AY9udeIr4IJUevAPlbpo9ZhSn+LerFFnEWwjZwZz0JI6BDrI9k/vnrGfyshXPa1sgWxTB3w0SbGsbC1qHHjdqA1fR5MFnyeGwIK1td8XlP+TRthGLlT7P3zFiKWXJSYdesWLQIBs2zZr1AVkGy940D7rCHSQ7cPvnrGfGYVsdQXvO3Hkmm1Zt7oPGBDLBSmMrQOmVa3b2gfg''@;'; put 'put ''yMoQo5Gtk5YvHl+x7KqsGNcHlQLZ9kGn59GQO6v+NI4bjFVzU08rWyDbzHl+8cYrVAe1nukpzhbINr3+8JMt4f+kJPwFKZ0W3TOx4uWr02sFSA8iIC9IYWR81dM2sukkRROPerYVUAMEcg2BuMgWITpkWtUbsJLKgBeXfDBO85qlS3e6P/1pOHWQrjH9Tmgn2/coUbRw2oBs0+8Du4ZYbiO3UVY2''@;'; put 'put ''9djlezNrGWgDBKIjYCtEcPYQRvmXPa9sC46dOHLFP6OLhRbJIrB44y/6l+oDlmxtef+E8GQrOBbqmGk1q+qS1QX9wyOwaMOPfsQs3z8i3kbWBj7WpO6dMPOYV9sAw/QjcMdbp+wvTPcXkeKeZZwtkG36/QAaEkMgLrLdt+ioeoLoToQRoVjjAnFLqsWIYowQQVj+gxFGol0u6W6Vv03Xl79T4GXr''@;'; put 'put ''3963vX1Qkuho2ylHdhYo8LtNFiLtfYOfoYCB/pdApJsdgf7C1sYvV4SDFiPuf18g/2D9P3PBROB3/z+c+xswgREWDAkufw7IE0LI/wsmm8i+8j2pnbQLxEIw4bWafrrLvckRybXl+gH/UTXnJyp2StAxwYpAwmYvlqBggiUSApF2QDDCfn/J//n/L/9DMMWys+wSwJi0YxEQYrdB4tn+RrvdkSef''@;'; put 'put ''HGg7PAGQbK8gtp3zpdu8CHg07EsgbvNNpz8k9n4/Ci4hbveHH2/5s+DyJb+pMCE448iyuLDkz1z6hSP5m8kopophef5vr2/LsZFGV6wP2uNUyl4XmPsoUUm7ukBCBakOYyx4YADEP4ElthjLH7EgBBGB/S9E/S7wf+b/3f84BeazdF7AT4Hf2ueo9GH3Z6LjHX/D0Gci+DwE5m1QVvfnMej/yF7t''@;'; put 'put ''/CSIe/BZCPrajr8EQ45Ytg08E50+CkriyD9RuPSDQEz+y2RDizHGkeGzuEm5YEV7PJvC5gqXcoBsY/EYtMkWArakFmfuTzH+oueqP9kyE/QCAoAAINAzAkC2MENyGQEg21z2DtgGCAACMSMAZBszVNAwCwjYklqMO0AI83NY2WbBC6ASEAAEkkYAyDZpCEFAGhEAsk0juCAaEAAEMocAkG3msAZN''@;'; put 'put ''8SMAZBs/ZtADEAAEchABINscdAqY1IEAkC1MBkAAEMgLBIBs88KNeTuIuMiWCybDGsKGwkRAKErbeETlrQ9sAwtGLwXeihRPGOwgwyMECkQYwSsVCHQJM8IYExoIu4n84sIyAyE/tmYhoVLhevcoNBVDyTsZgWejp2cCyDbvnJ5XA4rrNjJB6kU+3Po2FVhgRjkjnDFOBCUcMyywxhixsIqDv4ci''@;'; put 'put ''RU015G+MgSyiYIVbCbMuUwNxpdQMxPYGfw/qDr4faktou2helWMO10aOP/i+IsyOnxkPtGdq5+d+OwUWEqugPPlzwH6OiUooshRCFItyoZaVOYY83OTbemg4vfIP/P/+8MzmzFwqKPNhxjgjCsOW1UG+FhGYklDMw480aEcnbjxpPqAkGG8dkBrExD9eIrD8PbSN3To5l6L5JdLndl9EkxG0K2iL''@;'; put 'put ''oJRgRnVC1fM4YtdHIlyK9dWM+f5oMW8gX7hCOTM4U7WAz02DY+RASDE4tjQi5L/yfemXAAaB8dmxl/Mgmr3dnqsQnOPtn6n2dv+HezaCz4HdHvn8yGdFCKxoRDlOIPRUJHuheHymPAl6EkEgLrKFeraJQJxYH1mI4ODSoc/t8nx2Zniy5VxgetSMqjUfJ6YBekVDYNG62uMYF+sJpmGLxytEnz95''@;'; put 'put ''1KvXRpMDn6cGgXs2nNjPYNZOINvU4AlSMotAB9k+uD56ukYg28w5J0C2By/Z5fnirEhkyxA7/Nrqxs8zZ1Xf0nRHXc0xgoi3I6VrVIlzwdWj/jGzb6GSvdEubKwsNxnfrFJHQTgrYGWbPd+A5ugIdJDt/TFU/QGyjQ5oqlq0r2yX7vJ8dkYksuUWPnTm8Wu/TJVOkNMVgYWNo3/ABXsnEtnqSsFd''@;'; put 'put ''E0eumAK4ZQaBQCECcwuQbWbwBi2pRaCDbNuLx8sSe2G3zKRaINvUgt+TNEm2Q8sOf36H+5OxkcjWIObQGyrXb8qcVX1LUzSy1WjxnyZVvDS5b6GSvdEC2WYPe9CcPAK228hn7ysE/wrINnlQUyFBku0hZYct66nEnkDskBnVjV+lQh/I6I7A/PW1R2PGN0Zc2UI924xOm1hK7JV+QZRzz302UAwC''@;'; put 'put ''XoBADiEAZJtDzrCbIsn20H6HL9/e+snpkVa2QLbpdV7gzBZtjBRuAvVs04t/qHQg28ziDdpSiwCQbWrxTJk0SbaHlR/x4ndtH50WiWxhGzllcIcVBGSbXnzjlQ5kGy9i0D6XEAgl2809FSKAM9vMuW7xxivUIpW+uK3tw1OBbDOHu13TvIaqHxJE3o60stWUknsnjXxxUnas63ta4cy27/k8n0YM''@;'; put 'put ''ZJuj3pRkW6gpL3/X+sEpQLbZcdIdjaOPFYK/FYlsHUrJvROAbDPmHCDbjEENitKAAJBtGkBNhUhJtsWa+vdvW/9zMpBtKhCNX0Y0snUqxfeNH/nSxPglQ49EEACyTQQ16JMrCNgySI0bRLG5BbaRc8M1/m1kTVuxrfXfJwHZZscn0cjWoZTcP2HkixOyY13f0wpk2/d8nk8jBrLNUW8C2WbfMVHJ''@;'; put 'put ''Vi19YMKIF8Zn39K+YQGQbd/wc76OEsg2Rz0rybbEoa/8pvlfJ8LKNjtOas+NvCHimS2QbUYdA2SbUbhBWYoRALJNMaCpEgdkmyokE5cTjWydtHTx+IoXrkpcA/SMBwHIjRwPWtA21xCIi2wRokOmVb2xNdcGkY/2LPlgnMbFoBWwss2ed6OTbfni8RXLgGwz5CIg2wwBDWrSggCQbVpgTV5oLGQL''@;'; put 'put ''hQiSx7knCdHI1qWU/fmqkcuvTK8VID2IAJAtzIXejACQbY56z7+NrGkrvunhNjKQbXqdF5VstfIHrxq+7Ir0WgHSgWxhDuQDAkC2OerFWG4jA9mm13nRbiO7gGzT64AQ6bCyzSjcoCzFCNiKx58xkFHydU9xtnBmm2L0exAXS1ILINv0+iMa2TqV8ofGj1x2eXqtAOmwsoU5kA8IANnmqBeBbLPv''@;'; put 'put ''GCDb7PvAbgGsbHPLH2BNfAgA2caHV8ZaB8hWefnbHnIjw8o2ve4IkC3bEKmerUvt9/BVI56/LL1WgHRY2cIcyAcEgGxz1Iv+M1udvrSt5cMfhzNRCM6BbNPrvEDVH/xWJLJ1Kv0eGj/yedhGTq8bOqTDyjZDQIOatCAAZJsWWJMX2l5i76VtbUC2yaOZmIRAPVvxNqxsE8Mv1b2AbFONKMjLJAJA''@;'; put 'put ''tplEOw5dkmwLVPri9h7q2cLKNg5AE2g6f33t0ZjxjUC2CYCXhi5AtmkAFURmDIFQspVVf9TI2iGDVKY8469nq5IXvmv76DTYRs4U6l31LGwc/QMu2DuRt5HhNnImPQNkm0m0QVeqEQCyTTWiKZInydal4uU72j7+CZBtikCNU8zC+uqjOEbvAdnGCVyamgPZpglYEJsRBIBsMwJz/Er828gaWra9''@;'; put 'put ''9ZPTgWzjxy8VPW6vrz6KYvQexUrY3R6Is00FyrHLALKNHStomXsIANnmnk/8FvnJVhHPb3d/+lMg2+w4acHa2u8Lyv8JZJsd/EO1Atnmhh/AisQQALJNDLe095q1eowytOzw53e4PxkLZJt2uMMqmLtu1JGE0fcpCb+ydSnlD141EnIjZ8o7QLaZQhr0pAMBINt0oJoCmX6yLR26dIfnszOAbFMA''@;'; put 'put ''aAIigGwTAC2NXYBs0wguiE47AkC2aYc4MQVAtonhlspeCxorjxCcyJWtFk4ulNhLJdrRZQXIln2lUmdhuNaFWn9U+gVRzj33WRZdGrQABDKLAJBtZvGOWZsk20PKhz63s+2zM2FlGzNsKW04t776ewShfwHZphTWhIUB2SYMHXTMAQSAbHPACeFM8JNt2dBnd7o/+xmQbXacdEddzeEc839TooZd''@;'; put 'put ''2Tpp+eLxFcuuyo51fU/rnLqaMoKMzbCy7Xu+z4cRA9nmqBf9ZFt6yLM7PZ9HJFuDmENvqFy/KUeH0OvNmvdmxWGY0v9EIluHWvrAhBEvjO/1A+0lAwCy7SWOAjPDIgBkm6MTI3Bme8iSHZ7Pz4q0sgWyTa/z5jVUDcUCfUCJqofTBGSbXvxDpQPZZhZv0JZaBIBsU4tnyqRJsj249JAlu4BsU4Zp''@;'; put 'put ''vILmvznyYESVj4Bs40UuPe2BbNODK0jNDAJAtpnBOW4tAbI9eMkuzxewso0bvdR0mLNu1EEKwx9TosHKNjWQJiUFyDYp+KBzlhEAss2yAyKp95NtycHP7PJ+cTZsI2fHSQsaqg7kQnysEM0RdhtZKbl/wsgXJ2THur6nFci27/k8n0YMZJuj3gSyzb5j5q6uGIJV8t8eyPbe/pv0ayCuMzO+kmSL''@;'; put 'put ''kfGVRp1F4TRCnG1m/ABaEkMAyDYx3NLeC7aR0w5xh4L5759SoDdRl6X4NKEoBFsWVzkVFjW/bzHj5UhntrpScNfEkSumZM7Svq2pnWw3a5DUom9PhF46eiDbHHUckG36HDNLzCIDGxv7W0T7vqpovyCIVDf5vh3MhRVS3QcjhWgFGHc8Jl2MUnHBoqsrV0xLn6Ug2Y4AkC3Mh96MAJBtjnovFrIV''@;'; put 'put ''iB0yo7rxqxwdQs6ZJVewDq9yJEF4SpN326kq1QsjrVojGS+EQEHydaglD/T/Up8E28iZcTVsI2cGZ9CSHgQ6yPb+98/aBxvia7e5J2ztzoB6OmRa1Rtb02MKSLUjAGSbuvmwZMk4um1Ia42F2uZa3DhaIbozWemSdAv1gV9YyHPRxOEv1ycrD/pHRwDINjpG0CJ3EQCyzVHfANmmxjF3rj9xoEDo''@;'; put 'put ''JsNs/ZVKHQXhpDJuGVyYBhfMFIhzhBDGiGCMqUKxqkfKjSxlCcG/cinlV5q7jDWTf7LSlxqrQUo4BIBsYV70ZgTiIluVa4Ovrnntm9484N5ieyy3kWEbuWdv3t140rEM878IwY4JbSkJ1sfa9jiUwic8vj1rsa69r7jJXspNS7ZlRFWwohRZ1HdMobLPGCZ8Yy1hHBjuZjLjps+plrwqkHXzwK9K''@;'; put 'put ''34Nt5fQ8ZUC26cEVpGYGASDbzOAct5ZAIYKDnt7p/vKccJ2F4BzINjKsi9adeJLg1sMIowPsrSQxqsS5xme1PkQ8npUzf/yvtlids7BxzKEm89wskBgb7kasxX0ehRY8qDIyd1d19bZZeJZcJcMrRQgA2aYISBCTFQSAbLMCe3SlkmwPKjvo6d09kK3J+cHX1zZsji6tb7W4a/3JP6FIeczg7n7B''@;'; put 'put ''kQshuMHcnyjYcd3M2vqXkkFkwcYx/bHJrzTNthmaUlgaKstkPrdCtD9h7Jw3reqV3cnogr6dCADZwmzozQjERbZwQSpzrvaTbemBf9vt2fRzWNnGjvuC9cefbBqtz+hKYVkn0cpzWDzfYZDZE09Y0xq7tJ5bzq2v3k8j+u1MGBcQTGloa8Nq+8ipFF+2p/KN9bMwglVuksAD2SYJIHTPKgJAtlmF''@;'; put 'put ''P7LywAWpA5/a5dk0Dsg2NifdWXfSASbyrKFUOTjYw+I+N+Pm7TeMfueW2KTE32pufcUJROBFhGhH45CgXC4sU8H6S4yJm6fXrn4/funQI4gAkC3Mhd6MAJBtjnovcEHqwKd2eYFsY3HRotVjSlWXc4XB3JXB9gZra1Kx64LpNWtXxCIjmTYy/HZBfc3PKFXvQIh3kH1QpiRdgtSlCKM/TKsqLbZ5''@;'; put 'put ''AAAgAElEQVRa81kyuvpqXyDbvur5/Bh3XGQLt5Ez53Qg2/iwvqvxpMWWMC63ryyFYNOnV9cvjE9Scq3vXl9R7DHFbwUS4zXqKg6VhhHdoSqOuw2L3QfnufFhDWQbH17QOrcQiCuDFJBt5pwHZ7axY333+tOGGFbre4SQ/sFeBCkrzQI6buYxr8Z82zh2jdFb3rZhZD9ikt9hIa5UqcNl7yGQvK7F''@;'; put 'put ''vlKwfptZqDyVLRujjyK3WgTI1veVRl1QiCC3XAPWxIBAXGQLF6RiQDRFTRZvvEJ1EOPpXd4vI5bY4xY+dObxa79MkcpeK+bet8Yu8FnN04MD8FltTQrVTptZ3bgum4OSW8sL62sO8/K2R5xqcXWoLVwwC2H0jiL0q6+pWrURYySyaW+u617YWFluMGsTkG2uewrsC4dAXGSrENf+k0et/BqgTD8C''@;'; put 'put ''kmyd1Fqy0/P5z8Jpk3G2DLHDr61u/Dz91uSuhvsbTtmHaIXvtJm7hgStFEjc01K59ppcuQF894rTdKOkdSzByrxw57kyPpdifSm3xI3w5SnyXJNkazL2lQpVf3L3gQTLIiLQQbb3vjVuEMXm5p5yI2u04HuTKlZ8CnimH4G/rB7jUMuPXLa97cNTI5Etwnj49Kq176XfmtzVcO+Gn17rtZpuw5j4''@;'; put 'put ''Q284t7bpyDUsFzOdSbIQnNxkCvOicDVZiVB2CiJu1i3jiQm19XtyF/XsWCbjm5HP+pZgqoSzIN31bOVOxf31p5eqql7AEHYylfvtoCaxGLG82GG1jv/B3/fCDkV25keua42LbIv0fW8yedsGwRBjwuBCcMEx98vAmGKCBOaYYsyE/z2CSYd8jgPv2YMRWTs63QIUQ1CTMv3yBOvYZpPvhf4eCra0''@;'; put 'put ''Jx0O4Ah32+4T7bYREfiMCy4E7WzXxdYw/YPYBfs7qKvIQUsW7fR+vn94shXCoRT92RLGiwJhU7aRNhBBbBgFfEMxIXYZnAfw9L8oQkF/hfrMP44wfgu1J+ifoI9C/SX9HBxXt75+vIIzAaEgZhKvAM4MCYGEBJTL8bVjyhnFuu4qdpLia5t8X1cF5QqE751etWZSOvyeKplz6iqGOajraoH4ReFk''@;'; put 'put ''Fqj9PjKYd7XAbIVg5h7DP7dMRLDAghHCMcIEUyw4IfK9gJ86fSoZQH4elB18RoO/y2fVrjfcc+KfI1HmRk94yPkf6XP7c2Gfe/45jLAgRPqey1oPQm7fCMFMpCJEGTlYYPZYJLnpIFtJsA+v+3GZ0It/SDC9wKmU/rDJ+93BbdYOnTOG5RQlSOMurcwo1vfZLBD/3GLeNwXz/H2X1vodnMen6qnp''@;'; put 'put ''/XI6HrrFG8/eVyZV77nqT+8fcG8ZgUyKTzDtoQJTbxlJcnbK9IqBP8L+v92hf8AFxaozGNpqccOLED/n2poNaQ/1SW5Ugd5z6ytOxogsoFj9QWh8rvzcYqaJMJdfpOzkiG2/Br7odvkYoXjLBqZiLKmU0ZPPw+WmDupOJdkubBzn1LDnSIrJVYiQMa3Gd0Mo0WKuFmUwT7OmuN5xKcVz3KbvHbh5''@;'; put 'put ''nsoZ0jtlAdn2Tr+B1WEQ0GnhB8jdNiqVWaLSDfSsjcNcDrf6S0u4b3GpZQPD6bPX0E23Pb1ZfirIdvHGsS6DmbWaUjhhj3vzCeG2++PFyG3u3Vag9rvD4L7F19U0tMTbH9rnBwIdZPund8/YT2VkE6xs88OxfXEUClGfmTzq9fN749gXrB7WnynKHwTiF4eLzwXCje7VZMn2rvWnDEMCzfaxluOV''@;'; put 'put ''CKtYIYSwhOHh3PT5t7f9WwtYIVhVKVZ0SlStB0vXaFS5clLFKrj3Et2dedcilGzlNnLYywd5N3IYUK9HoDsB4SnTqtbc1ZsHtqiu5hC3aH3UQYsqg5e+7OMB0o3s3UTJVsa093PqZyKE7zC558BQDXJbW2CxmSCl3sfa1mJufc4x30QJbvVZVLiQ6vAq7oHYoocV6v0rTOY5lxJlcDj/eazmnU61''@;'; put 'put ''ZMaQLQOegFKMvflJjd92INv4MYMeOYJAKPFwbp0zo6bh+RwxLykz5jVUnUMEuRljfAQOueAmBQPpdoc3EbKVRFugmvMF4leGrmZN5nUrWFtrIu9fMNJWxroFLI8GnF71VI26rjKstiqVOgrs1spQL00p+QPnzfdNq1rnSWqiQOdegwCQba9xFRgaikA3smVW7Yzahvp8QWphY6XTYugSk3tnOdXi''@;'; put 'put ''juxYsNIN7+F4yXbJknF02wHNV/uslrn27V/GLUMg9IZA1k3X1WxYn8x8mrd+9GEKx7O5YOeEVobigr2iUP2iKaNWfZeMDujbOxAAsu0dfuqTVsqchh0DxzKODHcJWQklW8HF6ZkoOpBpZ8g0hQQZv8eYjFeI3u1GrB0HSRT+AJowq+HArebA3eVwW5yZHleq9cVDtv7sXg211zNk3Wi/4WxYbXsJ''@;'; put 'put ''Vq+5tnZdxBCjROyeW1d1Yalz37ltxs597f1dSnmDlzdPmDJq1b8SkQt9eg8CcZGtigseNkXbJ0gG2GLBhJDBtpbhDzYLhGe0x9wG4mv9zRD2x8v5fydcYN4Zeyvfw7a4hWD/UPj8f2fDvPziQ16YhIuBDcT8Be0MdpF2SZuCv3eMIyRGEHfEnYSTHWuKPVnOlCDcoY8iab9//FgQLCjFWEYTEhUT''@;'; put 'put ''SnXqGOCgJVe1GNs7CqB3HaoQKil4jTHPGxayWoRgjGNuII4shDmX8Yq43R/y54A/Om2VIZuiPUbT7oOOPu1+kp91vNfuq6A/pL+C/gzKCJ0Dof6Rc8L+nt0nQX8E5oycYkhI1Pw2SHukYv+HiDq1ogOKtIGTdns2l3T4E/Ebp1fVpa2UXrYf6wUNVQd6rNZHnUpJDWlP4mG3iSDFawnfrYbl/ZfA''@;'; put 'put ''FqNIUbhAJibM4DL2XYblYqRiQXSM/JGrCsEyNFsG7WKKBCYEyzhegQnvjCfiBAl7nLQMeu58ZgLPZjAeW/5MOMGcdvbHtudUzvQuNrOuz4/sJ9tLV/vnV/uzT5Di1KnjSB9r+3UkP8RDtgvX/WgsZ+ZThJDCoDyv1bxLxerlM2vfWpYOX8vzeIvwZylWj+v6DNBPKMFnTx616sN06AWZuYFAXGSL''@;'; put 'put ''Ncd+U4e/8m1umJ7/Vjz49nmPtJjbfhP2i4ZM10jxEdeOWvvf/Eci/AgXv33O023mzvOCn+qKa8HEkStn5jsec9cMPxkr2kKKlaPC1c8lSFnq4+7f3VD79hf5hMV9dTVlHkJ2hYtJluOMlWz9dY+xZyMlyoAgPh6zaYdGCsfOrK3fkE7MbltbO6BIcz1ucu+P7XqcStknHqvpymlVq99Mp36QnT0E''@;'; put 'put ''QuNsZbrGiLeRCVEGwflC5pz10Mbz/tJsbLs4EtkiCx80/fi1WzJnUW5pWtgwejrCeEHQqmJ90Evu4uZxkw9b6U+Ekc8vuQ06t6HyCs69tzmU4vLQsTJuGjotfNRQjd/OGL5mZz5gIWsW+xT35kixr7GS7cLGMa8hJE4KYmJxs0WGXF1Xsz4jl+vmv39KAW71LCWYdCFcxs0WlTgvmFK16uV88BeM''@;'; put 'put ''oSsCQLY5PCMeeuf8x5t93/4KyDa8k+6sr/6egdh7wXNMk/l2OEXZUZNHr9yRw25NqWm3bxxWItrQDZjQiVpIgn55SoI5+e5/pxJzplSuujulirMgLEC2bbLEXrc6wbGubBetO+lIw2p5235DWAh807SqNTdlMqdxoO4xflKl+k/tUBbq+7S0+XZOmVq1+pEsQAwq04hAaG7kLT2tbHUF7ztx5Jpt''@;'; put 'put ''abQHRNsQePjdX/2tybslbJIGWfXHosaB143a0GerMN2+8aQS1ef7AmPiX9nJg16FOs++ZtQrL/S1ibSwsfLQVl/T/YX6gI4VWxADmYjBYG0fOdTyK6ZWvtbQW7GR/kaeps3JkO3Cxh+9jhA7MYgBRqTBp9HTrx/+elOmcZn/ytEFPl3c7dLKL7HrNpi7xUFLxk2pev2VTNsE+tKHQAfZPrj+jIGM''@;'; put 'put ''kq+BbNMHdryS//LuhUv2eDePi7Syxdg6YFrVuq3xys2n9netO+VVJnwnB8ek0YKX+C4xbvJP8n8rOdSPizcOU3d58ckO7LoTYXxY6OfyprJGClZalF07vRdmMUp2ZXvn+lOPVjCpN1ibv/i8xQ2PQvSzp1Wt+Ue2nolZApGidTW/sph5v0odrqAdMsaXIHX+zNr6WdmyDfSmFoEOsr3//bP2wYbY''@;'; put 'put ''2hPZwgWp1IIfTdqj7168tKfi8UC2CN297uSLLWH8JYhlsWPQd8J0V15e8dKX0fDN18/9pETdN3BkXe5QispCx6lgRzOhdD73isW9acu9nWzlytZPlqGvaGe2d647ZQUXvtOC/VTifNdttYyJNVlFuuaLPH+/Ze0PLlexNk9XCjtv1wvOHbTkVkXBt185/CV3uvSD3MwgAGSbGZwT0vLYe5cu3+n5''@;'; put 'put ''7MxIK9u+vo0scZHF45lC/2Mwd8fNUodScu/2tuYps05YYyUEfJ50mt9QtQ9BZBbGdHzYOcTZZqroc00nfbQ3lIKT8cYYGV8lckHq7ndPG1CE+v97j3dzZ7EHgWdMq15zR664e279yOEm8/3dpZbuE7RJHgFggZebyLoo218KcgWn3moHkG0Oe+7xf1724g73f8dGItu+fhs5iMud6068iwtrcvB3''@;'; put 'put ''ih07VayfOGHUi30+UYBcNd2+duQJAvM5DqVgZLi5pCuFr3HGbxq4pXB9LufrbU/usVkNuQgWHFNPK9t71p9yssdqfSlYflAI8R1hzmOnjs6tUMbZb/5gNBfsyUJtwBA74TqUoqd9zJoEpfpy+A92FNM6yPaRd8cNMJj5DWwj544zgWxj88W9b40Z1OrzvatSrSM7j0YK3scEnTpx5Aq40Pc/GGet''@;'; put 'put ''HuMoUs1TOMJzKKHfD0VW1gLWSMEKxNlvp9Ss/iQ25DPbKhmyvXvdKeMt4bsvaDHBSuNeLztx1glrvJkdRXRtMnlJi2/HyyWO/f7P3tpjNr2tKfv8dGb1q9ujS4EWuYYAkG2ueaTdHpkg/ZCyw5btdH/aJTSg89su5ybnB19f27A5R4eQUbMWNv7oei6M2fb8sy6l7Am3pV4xrepZSPbe7g0ZKkS8''@;'; put 'put ''2uUOpXiaxb1dUgfKJgQpuzBBf2Zc3Dut6o2cunyXDNne/9bP/uqx9lzUQbZEnT9l1OvXZnSSxqFsbn31fhSTvxFMRtu7CSHe5YhcNLN6zX/iEAdNcwABINsccEI4EyTZHtrv8OXbWz85PdznMvQHyLYTGVn022O2vMyFOCH4LhfMctCSu3YWuX4766hnjRx1dVbMunP9iQOZZd7EkPHrcPmWObc2''@;'; put 'put ''YUJvL9TaHr9y+Ds5cTknGbK9e90p71jC15EmkSD11FwPrVnYWFnuY9Zynbpq7ZOk2bvtC5fe75xrqxv/mZXJA0oTQgDINiHY0t8JyDZ+jO+oqzmGY/EiJcoBwd6yFqlLLb7B7eB/7g2XgOIfdXI95q0dcTylzpsFEtXh8i07SNHrBvLMcyp711w5/J1AsfQsvST5mIx9lciZ7QNvn/WJ29x9uDTd''@;'; put 'put ''ZN42lWo/mlZV91aWhhKzWvkFQyX8MYLVLjtcPrN1K6GOC6+tbliTyWQcMRsODbshAGSbo5MiFrIViB0yo7rxqxwdQlbMmreuthpZ5lKF6p23Tv2W0FUqIlN3VdZ8MAvPkvUN4NWOwN0rTtON4ubTEca3EkyPCAVGfmGh1PkyYvyP02pWf5At4BIl23tXjylsIq1bHGpBqbTdYG3NRC/83rW9JEGP''@;'; put 'put ''zDbVZpiP6Erh2f6yHO0vWThBVwrGT6usfw4IN1uzMna9QLaxY5XRlkC2icN9x9raEwtdAx9tM3YMtktRifNbxn0PKJTcO6li1a7ENeRnT3mei930dwjjCaEFz+WIMSLfUarfYTHxcDZuxSYa+iP7KYhvolT1p3lkzGpSVcf3elue9/n11fMIpjPshRjkFweVOK+ZVlX3KBBubj+XQLY56h8/2ZYd''@;'; put 'put ''vny7O/KZLaxsIztvXn11rcGan3Gp5d0uASGENmrUOVmlOzZme2s0F6ffvIaqoR6j6V6XWjImGCpjt9Ni3o8Ltf4zrF389Uxm6kqUbGWaR+Jxf6VQ1Z8wwmSe1gKtaNikXphF69Y3j1mgUdckSjQ96BOZ3tFFy6bs9hlP5eLt6lyc49mwyVaIYGx/Iei3EPqTDTd01xkg28OWbe/hNrJBzKE3VK7f''@;'; put 'put ''lBsW554V/j/OwnhRU5w1odbJwvQWN9c4ievKydVvfJ571mffornrRh3JTPOvOi0YLgvLhlrkNlveK9RKxu8ddfzbmdiaT5RsFzZWOov0A95p8W07MjgGFevnX1356jPZRzl+CxY21pxqMnOpPb2jlCK4eMxCbBIkv4gf00z0iItsVa4NvrrmtW8yYVhf1wFkm5oZIONLncQ9SxAxIVyaP6/VvLtI''@;'; put 'put ''22+OT2n7a76UoksNcgEpsz74vubYVXARE6Ys5dcvXP1cBy15EjE0a1L1irTeHwiQrU9W/Yk7XeO9G8Zu9LHmYUFsnErJHYRsvaG37mzMqTvuVILUboRbqPZ7TODmyVdmobBCKuddPsoCss1RrwLZptYxc+urizSiPyIQ+3m3VS4Swm3s/tqllM+cXrO2V652UotWd2nyEpW7aPdlQrBbdaWgI39v''@;'; put 'put ''sGXgEpXjHiTU29J1npsM2T688fyHmoxvLw3aq9OiOuRu/cnEE9a0phu7dMmf82blsZSI5QrVO27fy9pXBKsNXDjPn1b1ck7FSacLh94iF8g2Rz0VC9lyCx868/i1fTbhfryukxVWHHUjLmDImu1Uig8M7c8FZw6l9BnBfLdcXfXqx/HK7wvtb68bdoDbar6nVN+vWxpRWT/XYr7/FjnKp0wYsXJl''@;'; put 'put ''qvFoJ9tNiZTYu2v9KXMY910ftKnUMXiTz+OpGF+9rFdnY7q9fsRRXqPphWLHvkPteKvE1aAI8avxlf+AY6ZUT8QE5QHZJghcursB2aYP4Vkbh7mcXvXXgrM/aIprv1BNcpWmK8V/xZjPvbriVfgyEwKQ/0tLw4gjBeMP6WrhqO5fWphlWG3vF6r9Lp9c9fp7qfJkMmS76O0TD7G87vcp1QqlPTIp''@;'; put 'put ''jK4UXDKp4h+Ppsq+bMlZ2Fg5GCP9BYFExza5tAUj/AEl9NzJo1Z9mC3bQG8nAnGRLUJ0SK6lcMtXZwLZpt+zcmtZRcpVjJvXUUXtF6pRJj/QqPNBhavz4a5Cd38EznOLLzV5240FWvmg0BYW93k0WvioMH03Tx1d922yHpVki4T3y3Db2FJ2T4UIAoXa8bsurdSf2EK+CtT+j/t2uC/P5I3qZDGI''@;'; put 'put ''1P/2uuoDkDCWa4rrWHsbjRa8L5hx4dVVr/87XbpBbmwIhJKtLESgRu4KZBsbrMm3ArJNHsNYJcx7s+IwQfFslejnhuujEOcnBKM5ptv7wtQT1uyNVW5faXfb2toBCrb+KBC/OGx8rkDfKIrjLmooD06o/fueRHFJhmylzoWNJxxvce8/FKI55O8GczcV6gPOmDRyxdpEbcqlfrKkomG1vexUS0fY''@;'; put 'put ''7fKaLd8UqCW/vqZq9apcsrev2QJkm6MeX7zxCrVAwc9vd38csRABnNmm1nkL64+vdVt7H3FppYeGSubCMglW/q0QZY6u7H2ht95iTS1indJkKb95DRUVBbT8WkO4zwqnp1Qf8n6LueM+r+X423U1L7bEa4u/eDxt+VJTCv2ZoEJf0YrHL1kyjm4Zsv0NjFBHcn+M6DqdGadPqK1P+EtAvONIZ/u7''@;'; put 'put ''19YO8GH2OKXqj+16MCLfcI4un16zekU69YPsyAgA2ebo7ACyzY5jAreWtUkW902npPvWsixFV6D2W2IS67YpI/6Rk6XosoNcQOvijcPUZsP5UwWpCwTih4SzxamUreKI3bBjxLB34onPTZZspS3zG2pPR4I/T4miBW1TSeEtuzxtN886YY2VTexSpVveSXC51UcURT/PLtNjNu8s0EovnVK5+sVU''@;'; put 'put ''6QI5sSMAZBs7VhltCWSbUbi7KVuwcUx/Byu402e1/BJ3pqPtaOezWvc4lJLHKOELJo9a83V2rc097TJrE/X6rtAV19RwpfwU7GhSqf6UwT2Lrhn12n9jGYEkWw9t/sKhFJWFax9tZSv7yHPmgj1lL1CinBqUQZDahAm96JpRr7wQix29oY0/vpx6F1GqXEYwVYI2y3zKBWr5dIe69ynYncmsJ4Fs''@;'; put 'put ''M4t3zNr8ZKuhZT2V2INt5JjhTKjhXY0/qjK4dzXBihaOcKVQhegfC85vcWjO5VcOfyknStElNNg0dfKX8mPGHy1uXKhSh/8msP2FEf1OUxx3Gm3uB6Kdh8vczdwtvkyGbKXuRevGHNRm7Gq0p/JsNXZtKdIH/Xhq5esfpQmKjIuVuwx7vcoMjMiNwXNqaYT/tj0puG23z5wH6R0z5xYg28xhHZcm''@;'; put 'put ''INu44EpL4/nra49GFnsrmB9YyIPJMKtc+cerRB/0ktdqWqyre9+EFUN3d8ytrxjloEVTfax1bLj6uaX64Hfcxt4HsNf9dKREEwGyRV86lMKEV7ZBy+bVVVxDiLrAvupzKCX/NLn3smtGvfpOWiZUloTOqRs5Dgv2Z/tZNxfMdKjFf24zmm6A9I6ZcQyQbWZwjlsLkG3ckKW8w/y1tUcjwt6mRO04''@;'; put 'put ''35NKIpGuPM91KcVPCSxmQ3xueHfMq6s8lSNztkqcP8SY0NBWLrV8tSV8s/hOsSE0JEduI3tp66ZEQn9C9ciMWE2urQ861eILCKYddhBMP6aEXnh1xWsbUz6hsijwtrXDqy3uW1KolXeJK3epZSuYcF81ceSrW7JoXp9QDWSbo24Gss2+Y9qL0b9lv0wTtCoS4crP3eaebcXqgFm+AvoEFKzv7kdJ''@;'; put 'put ''dN7SljNUpM0TiB0U2kJ+adGJ62VMldm7R1b+O3iJyn9BSmnbnEhu5HCzqf38djbGZBqxEX+bsfubArXsN9Oq176a/VmYOgvmvzn6YA/f+UqhPuAwu1ST+T4qpCVnTKx65bPUaQNJoQgA2ebonJBk61Lx8h1tH/8knIkyAw6c2abXefMaqn6IBZZkGzb2XCUFzxJC93cbu44LXf1Kywim/yGC3mah''@;'; put 'put ''1uXTqtZ50mtt75Mu42YpMq5ngl8ZbrWKEd2hE+c9mJkPjK9+dbskW0Nxb1Gps9vZrxx9LBekQlGSF4kUtPsBh1b8S/uWso+5tzvU4omDN5cvO/fcZ1nvQze8xTL5hdfcubrYMSjkpjj+r44LzpxY+fe8ObPONZ8B2eaaR9rtAbLNvmPmras9jnC+nuDwZIuRdotVgOeqHlbV6t31gFMtOghj0q0U''@;'; put 'put ''ncmNtS5SNmlX5cgP4gl1yT4CmbFgTl3NIaa1589OtXR0uC82QvAtFKvzKKfPe1DLfxWiu8JZlgjZBuXMr6++FCFxr71+rzyLV4h6a5MPz8mXsCA5XpnfGmN9uUrULtmmvGbT9kLHwJ9PrnilLjOe71tagGxz1N+SbAtVvPw7WNlmzUML6mqGISLWRSJbhejzJ4969VppoIxtLPDpl3HOfqtSx8BQ''@;'; put 'put ''o+WFFJ0W/oWZ1q1Tal/fnLVB5bDiW9cMPxkTMVujjmPDYV7mOODjPd7NR0QaQjJkK2XOWTv8HJU67iOY7mPX4VTKHm013dfOrH61VxctsI9J1vi1OH7wf2fU59u30DlnpkacF+2urH4Gvhim9mEJIVvyjdvcC+kaU4txQtKAbBOCLaWdFjQcPwIh1mjfXrQrUIjrjsmjVs6wv3fv6jGFbYpnASHa''@;'; put 'put ''ZfY/YsE2/tWD1n8WwuqTk0etbE6pwXkibEHjmCNMq/kxjRbKovUdf6OCw4t0Xp4s2Ur5i+pOPMQjmt5wKAVdqkK5jb3/LHaUjc23mOpF68b8knP2mH1HRgjBkeD3t1SfNBkIN3UPFZBt6rBMqaQA2ZIXvmv76LRwguHMNqVwhxW2sLF2JBeiISLZUufCyRX/mB6u89z66u8RhG6jRDk79HNZik7B''@;'; put 'put ''2gcCidlTKldB/dwIrpzXUHWOgtQ5CKMuF3oika4kW4GaSpMtnC7jcAlSn2HCGGk3jSDyscXMX82orc+r0KAFDTUXFqgD7vRYu8s7xyuERov+wgWfCl8KU/O3Bsg2NTimXAqQbcohjVvgnXUnVFjErI9EtiouWHR15YppkQTLsNyFDWMq2sydjxTq/Y7sRrqCcyZYg0pdV+ZTMoW4ge6hg7zAVKAZ''@;'; put 'put ''VzDmuylSTuTgSleSbRtlZVOPXZ50sQiZAUvx+p4nhPzIbl6rsXOLQy//2bWVde+mcpzZlrWw4YQzfaz1L7ri6hLD7FCKnkY+MSGZAhLZHluu6AeyzRVPhNgBZJt9x9y57oQKi0cmW10puGviyBVTolkqCcOleH4tELo53HmuP9SFFv3FomjOdIh3jLDLUFluMH4jRuLScLeRJeE6lCKkUMeRVw5f''@;'; put 'put ''+nE0n8TyuTwS8GniPoTRhfb2XrNlm6o4LptZ3fj3WOT0ljYLGqpGmMz3nK4UHmC3WaHOemyy86DMZHKeBLJNDr+09QayTRu0MQuORrYaLf7TpIqXJscqUK6WkLt5Dsb41+FK0bnN3d8WaANuobjtycmjNsB5bgiwcqdg0brKoV7T95hDLaoMh7vgfLOuFV04ccSKOoyRiNU3kdr5V9aqeSMlyg32''@;'; put 'put ''NibzuQlRp8ysrnswWR251H9RXc0hzWz36iJtQBfCJUh5jxDtjMmjVkIe8AQdBmSbIHDp7gZkm26Eo8uPRrZOUnzf+FEvTYwuqWuLhY2VP2CczAp3nssFswii/8IIz3HpLVDKLwy4MimGUdx8OsZUfnHpKAYfbBpMisE4nzWtZvUH8fontL2/fGB9xXiB+O32hBoyNEjFrtl7q16/bRZGPFk9udJ/''@;'; put 'put ''YWPloUIoz2BMjrPb5KBF7wsufgGxuIl5Csg2MdzS3gvINu0QR1UQjWwdaukDE0a8MD6qoDANZJL4Fl9BpdvYdV+h3v+o0CaMWyYTxlqXWjx58qhVHyaiI9/7zH/llAJc4LnC4K2/cyjF/ULHazJPq0KcfyTw2c8AACAASURBVOZIn5ts2I6fcNeOOMtC5gNOtWRAUJescyyPAEwubphW9crufMHc''@;'; put 'put ''X2GJtKx2qIU/7Lqi93xeqAwYC4Qbv6fjIluVa4Nh3z5+kBPp4U/XqNIXt7d92FEKzC4HbiMngmp8faKRrVMpf2j8yGWXxye1a2t5LuhRzcuZsK4Ld55rWK17VVLwEOFi4dTRdd8moytf+857a8wgjeHbuGAXI9Q9VMhixhcqdczVfOKpSEUOYsVmfsPISsMyn3OqxV1yDCMkVmHNeeHU4a/kjY9k''@;'; put 'put ''hi+d4ucRImPs+BiWZ7Ouui6dWrnm9Vhxg3YIAdnm6CyQZFuk0he3AdlmzUPRyLZA7f/IlSOWXpoKA2WoEOe+3xNMfhbuApAs5Yc4noMIWQ6hGOERv72x8seIWbepxHlsaHyu3ClwaaVrOOM3DdxSuD6ZFIxz6o4bZjLvC4XagMF2SwjSGpmCz8+nS25z66uLFEwfxxifaR+rz2prcmllF1wz6rUV''@;'; put 'put ''qZj/fUEGkG2OejkWsjWIOfSGyvWbcnQIvd6saGRbpA149PLhz12cyoEurK8ejqljDuPGCaFJMeSWJUL0HYrobJfe/CqU8uuOvMyMxDgZS4l2O0L84NAWFve5FaQvJ4jcPKVm9SeJ+u62upGHE4SWa9TZJaSLYPVdSsjP86nqk8RUcOVuhNEl9uQXBnM3O9XSSXsqXnsyn86sE50T0foB2UZDKEuf''@;'; put 'put ''A9lmCXib2mhJLQr1QY9/c9yRF6c6y468AetUPL9g3JjlUIu73AqV5skLQE61bAli1pxdPuOzfMrbmyqv3722doCbmDcIbl6sh6l/SwTdqSj6Imqxh2SRg0T03vLmDw8zrZalpc4hP7D3V6nrPcLJL/PtXPP2N0dcjwj+nWYrBGFxn0dXim/cU1Ry96yjnjUSwbGv9Okg27vfHTdAY8bWntI1wplt''@;'; put 'put ''5qbFkg/GaZbV/4WetpEFYofMqG78KnNW9S1N0ci2SBv05FYnvyRdf2TkFh4ldCLi/DpCaGko+l6rZZdTKXuCK/SOfNq6TOUsk1VudKLcZHDvuHDhVoybnyvUdYfmtR5P5Dx3YWNlucXE05RoJ9m3rg3m+dxJS399TdWrjakcT7Zl3VF//Ale1vSM/ZKYtIlztgQ5lIkzhq/ZmW0bc1U/kG2OegbI''@;'; put 'put ''NvuOiZYbudgx+Kli3fzNuWn+Rj+voWooQmIOEuinCtGcocioxPkpFmQ+9rqfToQwso90+i2YVz+y1qX0m+yxmsbaK/sENReq/RpazZ33NfvI87NOWOONx6LbNw4r0c3Suzg3L8QYd1R9Uolzq8HarmmpqluWT9us89bVVmtCeY4jPqgrTniNrqBfTBy5Zls8+PWVtkC2OeppINvsO2Zh/ZjhHFvr''@;'; put 'put ''IqVrLNH3e7rIYV2UbrINIiHPcxXqmm9wb224IgcY4XcQJn9o8vLXYGs5/PxZ2Hj8WYxbswkmR4SWQ2TcMhSivyy4uLG5+viP4jke8Ce/UIz7CKEX2eV6rZY9Gim8rLV67fJ8ItwFddU1hvAsdShFXSokKdixSuXigkS35rP/1KfPAiDb9GGblGRJtobV/4WeQn9gGzkpiKN2jka2xfrgZ4od5q8z''@;'; put 'put ''RbbSYBmfu9en/4pbvlt0tbDLbVj/dp6wTIdS8rTB2M3NlZVfxEMYUQHJkwYLVo/pLxTrUodaNNXk7m7lEAlSdxGCHjF9xp+mH792SzzDXlBf/VuO+B8UojmC/QhWWi1mzDngm0Fzk7kFHY8dmWh725qRlUWO8sUm93Q5s3YqZXXMbL5wUvUbcMRlcwSQbSZmZQI6JNmaVr/lPVX9AbJNANg4ukSr''@;'; put 'put ''ZyvJ1l2856LJh630xSE2JU3lSqpYF1fL+rnhznMNq22vQgsf1hibO3l03Y6UKM0zIQsbfzSYYHSLxX2/Clc/V3C2WRB6a6sPPxLPTsEddTW/Zth6QCF61y1/IWY3V639Yz6tcO+oqzkcEbIUY/x/9ukhb2UjC50FtZs7UQGyzdE/IAGyLV/WU/F4CP1Jr/MWras9jnG+PlLx+BJ98NNtxXsuzgbZ''@;'; put 'put ''dmwtN1Yeagk8nyI6FmNCQxHRaMHnnLGbd1dWPgGr3PDzZX7dqJM4EvMVoh8Trn6uTgpf93HP76ZWvvF2rPmW59QNm0CxuiCUcDXs/MNOr3dBvOfC6Z3pyUlf0Fh5BGfiWYXqXQhXo4Xvc8EvmDxqJWRAQ7akFnAbObkJl+re/gxSGlq2vfWT08PJlhmkgGxTjXpXeXc0jj5WCLYhEtnKC1Luoj2X''@;'; put 'put ''ZJNsgxbPbzi+ss27fXGxc58uW3qBz4VAiL7nIPpvJoz6x7/Si1rvlD7rg+9rzj3FlzDuu9WhFNvqugbGI3NWO2jJY6Zi/T7WLFG3r/3hmQhrj2vUWdSJihA6Lb631SS/va7mxZbeiVZ3qwPZpsgyhPDx9k85Y18rquMXU0a9Xp8vY010HLCyTRS5NPeTZOui7Lkdns/OiES2sI2cXifMX197NGZ8''@;'; put 'put ''YySylXG23uLmy3OBbCUSswQihetqT7ZM78Oa6gpznssZ50adQp2XT6ta81l60eud0mX6TLdmTWTc9zt70YHglxZ5iYpSxz2GSm65fvjrTdFGKW+Su307Xyl27Ds02FYIIQzuqVedBWfnU6hMoCQh+ivC4hw7LvJIQ1eLL5ha+cbKaHjl8+dxkS3WHPvF+q0un0HLxNgk2TpV9uzOts+6pEnrfGA5''@;'; put 'put ''Nzk/+Prahs2ZsKcv6pjfUPV/GOF3I5FtgTrgkW9deHy64mwTxVz+0WtWWmZjRC7pThgIecymnQVq/5s4ok/lU/L8RPEK10+eRbZae+4p0vuf3P1zIQzL+6mmF10+rWJVXTS9t7x59MGG1bqizLn/Efa2Oil43ce9F0+remNrNBm95fNZq8coDsWzWKOOS7oQLnM360rhb6ZWrn6+t4wl1XYC2aYa''@;'; put 'put ''0RTJ869sFb50h/u/YyOtbIFsUwR2BDELG0f/gAv2TiSydWnlD25zKpNyjWyDw7lnw4n9DMu6B2F0fugQueCszdy1tUQdNJvQtmegfm73SSCJo0ixjjKEsVhXnBWhLRg3DbfV9E+HUjrxupqGjT3NxtvW1g5gfO8LBVp5lzq8e73ffliuDT47mdSR6X0K4pe+ZMk4umm/r6cihG6x38o2mbdNU1w3''@;'; put 'put ''Tq1cvTB+qb2/RwfZ3v/+Wftgg3/dUwYpWNlmzuEBskVLd7g/iUi2sI2cXn9E20Z2KCX3Thj54qT0WpG89LsaTzix1dz7oFMt7pYrWJ5FCiHeVhXHVVNGrYLz3DBwy5vfuuK5wGAtfwwtqi6by5SFKnb+1RDG7OtqGr6J5DFJuG2+LS/2KzhwlL2N12j9QNOKfj6jas3HyXs7NyTIkoRzGyp/gYT1''@;'; put 'put ''gH13RX7J0xTXXT6HuHHmMa+25Ya1mbEiLrJViGv/yaNWfp0Z0/q2lrv/e5rez3PQi9+1fnhKpJUts/AR1x6/9r99G6n0jT4QZ2s2RlrZynq221ubro4nLCR91vYsWdYnJbo+zWPtvlRTXCHl4RAymLvFoZQ8TjhfOLn6jc+zZWcu65XpMzEWFxtW2+9camm3+Fyf1bpHIY4HsKkunHFC+LSF8185''@;'; put 'put ''ugC5Cv5KqfZz+1jbjF1bC7SyX06rqnszlzGI17YFDaNHK8TxLBe+juQXQgiOkHhdV7QLJlWs2hWvzN7aPi6ydan9xpm89R1BKUG+QGihhVW/DEp4h6wgGBbu/l6gbaBPtl7UDG+XtIepRATtCrazvxePzQo3RU8BmLpNmEVU7Nen6YgJUxTj0tICvd8jW1v+8/3wZCu4QhxTEBb/wIxxO9bh8I3k''@;'; put 'put ''i2jjybavotkX7XPGzQ5/yraKICL4nv9nDXd8LkzWnmov4Bmd0rEeq2V+uGxN8vNS5+B6w/BcyxjbYREPZlzOna4et+MXaks426VNoe/bbfQ/c7YxKX6dnS/L9hzqluIfD1YUji2LW5wIrtMinSsTLGFexYSvI7VgUIIkDJUWPEKZuAPq54afXfMbqvZhzLgOYXx5uDNxWT+XEm2BJawnrqtp6Hbj''@;'; put 'put ''+O4Vp+m+kj0LKdYn2DXIs3RdcY2fUd34XLR53Zs+n19XU8GEsUxTnPva7VawusYS9Jy+cm8gLrINbDlxFr+jZehBrr1kkWlpV/di052W2j8P/pzsWHrS568vHMRKUKJ2ZKGJhB7jpk/4x5HaV+q+DdnHm3o7kxl1ONDs4yZY1cPFXdp1ymdC/r/rnLG38EtMHZzdfd35ZUHu3XWdXna98hKsbCsU''@;'; put 'put ''ohfIcclfQ9p3GE6x8m/O0c20SXtp8k8yn7QjGb9mqu+CtbXfd/PdfypQ+42x50QO6m8z9mws1vpfs+/X/TaEZo6S58FOpW0CQvhWe/1ig7U1q8R5fUvprodnHfVh3lTRWdhY+YNm354Xi/WBB3X5csiMtxxC+WlfSLwSF9lmahKDHkAAEMgcApFIV5byK9b3e8nH9t7vUPbWQ/3c7j6Rq1R30c5T''@;'; put 'put ''CFZuU4jWJamDbC3r5xKsv4gYv2XG6LpuyR1urx9+GmPscada3C8oXX55w4LciYl547SqdZ7MzYT0apr3ZsVhiuJYijDqEguuEH2jQN4LrhmV30diXW4jq8zY6jH3qumFHKQDAoBALiIQiXQN5m5y0JLHmWLMmz4yvlzBuTjOdNh09/qKYq9JbubI/I1GC4pDdfi354lzseVw3B4an3v7myNGCyxe''@;'; put 'put ''0pXOfjJpDUL4rxibk/KJcBetrd3Xg9r+7lCKjrVj1Grs3FzgHHTy9IpVn6bDP7kgs3Nl23DWPkjlWzzWXi0XDAMbAAFAIDsIRCJdnRZ+6bVaHlaZ+HNf2PZLBP05dccNc+DCySYyxnXLjYwQKtb3e6fZu31Bgb53qX2n4NY3jzlXpQUPKEQtC+qVhOtUSx+iBE29cvhL7kTsycU+d64/cSBj5jMY''@;'; put 'put ''d802JQT6inN23sza+g25aHeyNnWQ7b1v/WQQQepXQLbJQgr9AYHej0BP57kYkX9igWY79cKV+UQCqfTavIaKUyxm3aJR5zCCaZec1bIyk4odL3Bs3jh4y8BPg+e5c+oqhvmspudCzzUxpi9SrF84edTK5lTamE1ZMga8zdf6mKo4fmK3g2L9aySs866peqMxm/alQ7eNbM/cnyD0GZBtOmAGmYBA''@;'; put 'put ''70QgEun6L4Vh9A7i9KZWE0P93DDuDdS49Z2GMb4FY3pkaP1cGZ9LBPkbU7U/XjdqjT+kclFdzSGC0mUIoaPtImUsNCHk3KmVazb1zpnU3WqZ/GLLkB13YSQm2j/1Wi27VFI4YWbN2iX5MlY5jg6yXbxx3AGMez/2Ws1dy0Ll02hhLIAAIJBSBBi3TF0tfJQb7BYopxYeWnme2+IzpyHEJznVko6L''@;'; put 'put ''UMHWFjO+RIjOdlvKU7Ia0Jy6EYcIzl9wqIVdLlwpxPEOo9a5U0es+iKlTsyiMJnPW3nzqPt1pfQ3lCgd94UMy9PkUEuv3G9LyXP5UgO4c2X7wbhCl1d/AGEyCCMZdcwRwYpCEVUxIQQJTAIlvGTQACFEYIwwIQh3DWsQQoaucCHjCrgU5P+5M5Yxkl+7hmFkIEQEd4TYdDNJCNZzKI1/jN1fojNs''@;'; put 'put ''xx/BYy/HxQWPKBMjiU/7xxK99l/8sRo4ACPnXTEhBOP2wI2gI7AI8UUkrIP62uOeutgl38visxdRtYzTSsSuwBixnJb+WK9QGbzDl/4AqsDnsnkgBktI7NsvqwiB5Lyw+0H6gMr/kKA/2r/BRsfQb073lwzIke8G50BAXsD/AnMZIM6FkJNBcIQ5978vAs0xQfJxk591jBPL4cu5wjEm/gdR/kuo''@;'; put 'put ''//32lz9sRVBFzjXGDS9HvCPkRCN6kVMp2adQ22e/7W2f9m/yhU/j6zWbthdo+8zeU1yyOFfTVyYyf1LZ59a1w/ZViToTIzKRErXb3RiDuT/GgvzBU7vh+ZI1Y4oN1feUSrTT7DaYzLdZI/r5U6vfXJdK27Ita97ainMwoU9SotrTDyBC1DudivN3+XBcEf2PQra9APoBAUAgYwg81DiunGraYIHE''@;'; put 'put ''LynVTvWYzUe4rV1d/gD2ZIwQaCOlzkv3Voz6D9TPDY/U3LXDRxrCXOBSiqtDt5YDMdv0OY7M3xNDa+KK93GF6qfaJRGsbGaMnTe9Zs36jE2MDCiaUzdqDOe+5+xhUFKtTgqeRR73JRNPWNOaATPSpgLINm3QgmBAoPcg8KcNYw+mhFzJmfEzg7u/l4zl/rW24I26ql8yKY9DOZLBSPadV1d5KsZk''@;'; put 'put ''PiVKt/hcf7IUbj5MSMEcjShzLeE7z67PazXvduDii6fVvvlSsnbkUv85bw4/liHjJZda1qVEJMFqgyzdN2XUqu9yyd54bAGyjQctaAsI5BkCd68/bQjj3ttM7v05xaojWsaseIYvCUOjroeRQf8wefTKHfH07SttZ20c5lJarMkKVa7TlMJS+7jlcYDPbP1PgV52j4uWXd5i7hjelXBbdzvV4svz''@;'; put 'put ''rWzdbauHHVHo6Pe0JXzH2MfrUEtXM+659OqKV7/sjfMDyLY3eg1sBgSSRODutacNQBr/rdvYc5mmOAsjiTOs1r1MpmlFnBOkcIKpUKiOfFar6r+8gQgJJYlQWbpS8uSATfpF+XLRJUnow3afU1dTRoR5o6o4poQ2kF9a/ld/GPd3HUy3NL/b5WMZRoQQWVSku3+fTxm+5q6vGKJyx1KE0Ej7gBXq''@;'; put 'put ''eI9x9supla9/lA4/pFMmkG060QXZgEAOInB3449H7vFtebJQ6z803ErWbe7d5rNaP3IpJYtVjlcRXWtr9umi3PO1QOgw/4h2Oz24WPfhZs3ArraCwQgbp1Kq/txgnmN0paAkOGyDeVp0pfzoqZX/yJuQlXS51F+Wbu2IWkzIXSp1/DBWPZKMKXHc6lL33JpvhOsU5X+1hPvELitcpfgDg7VeOqVy''@;'; put 'put ''da9KfgFkG+uMhnaAQB4gML9h9CzOvdPtye+Dw/IxTx3B5E4ulNU+S2mJt3SgTK7vKFIKFK/vGou7p8oV7/8KHcyaMmrNzfab+XkAY1qHIPMte4p3ne+z2mYXav2HxKJMEq5K9L8y4Z6cT+kdF6we079NfPtakWNQly8fpuX9zKWUjL266tVeUwMYyDaWmQxtAIFejsD8908p0D3oNpN5rw5dzTZ5''@;'; put 'put ''vv3IpZf/3mM6Vsg4z1QMVf6RtFT3OV7T9WiqZKbCrt4kQ24tC942DWNyta4UduwW9DQGjNQXmGZdNmN4+Hq6vWn8QVtvXV8xULXIEwrRTrLbzzn/XKHKL3vLChfItjfOPrAZEIgDgVliFnE1rHxUIY5f2buZzNOmEsftPs7vvaG2fk8cIqFpBhGYW1+9n8fY9WenWjxGpc6CaKoxIm9iRn+dT0lG''@;'; put 'put ''5EUytZU9qquFZ9nTX7b4tn9VqA84a3rV2vei4ZLtz4Fss+0B0A8IpBEBeQ54z1unX8K5+RATnYXtPWbTdxjR64zR7zw+C8ukGPDKdQRk/VyfaH3QoRRVRrs13uT99jOXs/yM6yrX97qLRJH8MOuD72uFu0vGc4xuV4jWUeu71dj5ta4UnHVdzVsbc9mHQLa57B2wDRBIEoGFDbXnG9z3Z406i2yi''@;'; put 'put ''3uXCvGpGdePbSYqH7hlGwF8/t3jvxabV+sf/b+/M46Oqzj5+lrvMloSEHbVaW1srVqwEkswkmMgmuFYL1drW2triAoEEBKy+bbq4QIAkIChql7eLWql1QUDCkpA9CO5Lbat1X1izzXKXc87bG3rzxoBCktnnmX9aP3PP8/ye77nkN3fmnPO4lazRn5c+qLe/Icuuixb7mt6MssyIpitvyPuOQOLB''@;'; put 'put ''3l2VOGevYkZmLDw/fltAgtlG9LaA4EAgdgQqG3xf1bjZIEuOYbYKzez6J6Xq7MW+phdipwwyD5ZAeaN3BGOhhQKROb1Xf/eNa3LjTSKUHywqqG0YbM54Gr+sIW8uQWQlJVLPsZcycTwhDpGrimdu+f+vcOJINJhtHE0GSAEC4SKwtqbQ00X9z8iSy2fHZJx9LLj5rcWTWhrDlQfixJbA8l05Z2gi''@;'; put 'put ''cL9Tzijo28rPVtalH/zALQ37VrId71je4LNO31r0//e3qTultGvn5j7zSGxn5djZwWzjcVZAExAYJIGKpsk3C2TeY4exjlAkmF5f4q357SBDw/A4JFBen/fN/zQi+QXF0llHGsZ8+hU02g845IybFnp3bYhD+QOSVL51mttwHNjmkNPy7AAydf2TYDzp5ombPx5Q0AgOArONIFwIDQRiQWBdfX5m''@;'; put 'put ''F2bPSUQ5zc4fNNsbnJJzWjLtwYwF23jOaS0gSjs87JsyVctNoZ/SV2unvv9dtxgxflFR8mwLKq/LOcdEvFaVXJl2vQ7qufOmnE23xdtcgdnG24yAHiAwSAKrm6f/1BShO+wwBElvc8Smlnpr/zXI0DA8AQisrisYHqLmbYLz62Xq6N4qZPWJJFj5M22Tfxyvv2kOFO2KxvxfEUxvt8ebTDukyO6z''@;'; put 'put ''4q1pAZjtQGcYxgGBOCRwT+MFp3aa7Y2q7OnumiIEZ0yYSxfnN6+IQ7kgKYIEVjXlnUSxa5nOQrMwwnWmw/Gtpdnb2yOYMiahVzVdcJJutr9in9HNuKkTpHxzYX7N5pgI+oykYLbxNBugBQgMksC61otLQ6xzpR0moLe95VJcE0q9zYcGGRqGJyAB66tl10HXBKHQd5bktr6fgCWckOTyeu8zlMrT''@;'; put 'put ''7YvdcuZv50x44kcnNDhKF4HZRgk0pAECkSawqinPiZGzViDW0ynFYMFlSwp2L410bogPBGJJoLJx0iSOUS1CuNvT3PLQfyHckT0njp7kwWxjeYdAbiAQRgJ3tk4cSjT+uiK5h1thGdc1hHH2Lb6mV8KYBkIBgbgjYP1OHUChN5T/LpQyuRZQkPO8Bfk1b8SLWDDbeJkJ0AEEBkmgvKXgHG5oTfb5''@;'; put 'put ''uX790IcOOe0bt/ia9g0yNAwHAnFNYP2eS1y6abxo8OCXLaHWVjeJKFfNz9v+aLwIB7ONl5kAHUBgkASqmqcuZkJf1hMG06dL83ZeMsiwMBwIxD0B6wzwe/dc+kDIaO/5ndYhpd1708Snb4oX8WC28TIToAMIDILA+j3jZc5OfiLI2mZaYbjgDBF6w6K82gcHERaGAoGEIVDZMmUp58ZdtuDhzi/W''@;'; put 'put ''mW1vT78uTG0jBwsCzHawBGE8EIgDAla/Wt7Z8cp/Goh3H2Rhcj2kIMe58fSbVRxgAglJTKCycdokjrVddolOacghZJCv3eh7PC5+RgGzTeKbD0pLHQLWWcjO9JNebtPe7zZba3EUQ2T80vzGV1OHAlSaygTWNEwd4xdtryvUlf7fD5xBj5p19k0TNr0VD1zAbONhFkADEBgkgdUtM9Iplv6usY7u''@;'; put 'put ''tmvWky2j4mu35rW8PcjQMBwIJASBVU3TsyQiXja5NsYSjJGkUypNKc7ZWh8PBYDZxsMsgAYgMEgC6/dMyQga+A0u9JG22QpEvrQkv/HDQYaG4UAgIQhYK5IRkpv8+sFxtmBVSr/u5okbfx8PBYDZxsMsgAYgMEgC1pOtSh2v+41D3Z/qrSdbWdCxJQUNcfEV2iDLg+FA4LgEyl6dpWR2tD/GhHax''@;'; put 'put ''fXG6MvrX12c/8j/HHRyFC8BsowAZUgCBSBNY1uBLk4n8GkLiZCsX44amSNLX5+fW/TPSuSE+EIgXAlUtU+/8z3qFW209Q92nP3ntuN9dHg/6wGzjYRZAAxAYJIGymkLHUKej0eDB86xQXJgGQerFpb6d1YMMDcOBQMIQqGiefI0Q5p9swVnO017xK4G8m8du6Ip1EWC2sZ4ByA8EwkRgXevF60Ks''@;'; put 'put ''80Y7nISVlcV52xaFKTyEAQJxT2Bl0ySvEKKOYEItsUMcJ30SMIJj5+Y8fjDW4sFsYz0DkB8IhInA2taLfqSxrp5DLDAiL5V4a3oWi4QpDYQBAnFLoKI+/3QNac/b238cNL2LUvkrc7L/9lGsRYPZxnoGID8QCBOB8gbfbILJwxgT0v1VMjeDArtPu8VXHReb+sNUJoQBAp9JYEXN+GEaYX93yhlD''@;'; put 'put ''rYswokFVdsbFXlswW7hxgUCSELD2GcqYvGaIQPf2Hy6YSTCaXepteDxJSoQygMDnErBW5ROMX9KZ/9Qj/wZMQ6LuixbkVm+LNTow21jPAOQHAmEi8LuaQsd+SauXqJJth1Soa83cnC3FYUoBYYBAXBOw9tp2am0vE0xOtz9wuqWhs2/MeTLmHzjBbOP61gFxQKB/BFY1Tb4QIXOLPSpotH/icI6Y''@;'; put 'put ''sHBi9Xv9iwRXA4HEJHBv62V/CLK279nq3fKw++dMeGxOrKsBs431DEB+IBBGAtYZyaZDbmVCP8sKK5AQElbL5+dtWxLGNBAKCMQtgarmaWVMaD+3BY50f23HNePumxJrwWC2sZ4ByA8EwkygovH8xQKjnr62JtcCijrkvAUTnnkjzKkgHBCIOwKrm6ZPNFGo1RZGCG1zSu6T5mRvDMRSLJhtLOlD''@;'; put 'put ''biAQAQLr6vMzkZLZGmIdZ9jhJeKoDZpdly7Jb+yMQEoICQTihkBFc4FPCNJgCxrh/krnoWDg5OLcP3fEUiSYbSzpQ24gECECK5uKbsWI32mHF0IImaq/Ks7d1vP1WoRSQ1ggEFMCFXUFozUUfE2R3EMsIYwbwaHKF776w4mPxHTdAphtTG8LSA4EIkPAaiaPuwKPE0yn2hkoVvxCiCsXeLdvjUxW''@;'; put 'put ''iAoEYk+goqZwiDtt+PNd+r7/9nY2dCyYd1FB695YqgOzjSV9yA0EIkhg+e7CUUbw8EtOechwO43fOPyuU86avshb+/cIpobQQCBmBKy9tkHj4CsydZ5y5MnW1CmSfaX5tXtiJqr7gA14AQEgkLQEltXnfE+mjj98qkCBXsYIf7/EV/tC0hYOhaUsAWu/ecDp2qhxf/cKZCE4l6lrYXHu1spYQgGz''@;'; put 'put ''jSV9yA0EIkzA2ncrhP4ExkTtnUqhnhcpkX9yQ/YTz2KMRIRlQHggEFUClc1T7+ZC79nulqaM+OuPszfMiqqIPsnAbGNJuzpOogAAIABJREFUH3IDgQgQsNrtpcvG2YQ4vxMwDv/AIXsyj5UmZHT826WOvHxB7jMvRUAGhAQCMSOwumnG+SYK1NoChOBvd+r0jLKiWjNWosBsY0Ue8gKBCBAob/SO''@;'; put 'put ''YJzdi5GYJlOn51gpDBbsUojnQ4LpFs3Q1i4+HxrMR2AqIGQMCSxvyJkpEccmW0KaMvqg3vnxaTcX1casry2YbQxvCEgNBMJJYEXj+RM40u+TsNLdQL73y+RaECP6Bsb0Mcz5RhOLt2DPbTjpQ6x4IrB816QzOAnuVagrzdJl3f8SyTi51Lv1UKx0gtnGijzkBQJhIiAEwhUN518c5O2/ccoZPSuP''@;'; put 'put ''j/yR0UMSdTzMuXZvl6q9Wpa9N6an6ISpZAgDBD6XgHWwS4iS1xHC3R2wGDc0WeCvLChofDdW6MBsY0Ue8gKBMBCwjLa8yXst50aV3TDbCmsdYvGf32vfVqnntsUFzQ+HIRWEAAIJQ2BZgy/NZP6XnHJGz15bB/GMm+etjtmWNzDbhLl9QCgQOJpARUPRFZro+l1vo2Xc0AmWH2IyvnXxxNqPgRsQ''@;'; put 'put ''SDUCZa/OUkYH+B/8xoFv99SO6a9L83b+T6xYgNnGijzkBQKDJLCq8YJpOmv/iyJ5uo+ls14GC/kl4rxhoa/2T4MMD8OBQEITWLt7ZqVm+ufbRcjEvWle7uaLY1UUmG2syENeIDAIAiuaCs8M6gd3upWs0XYYnQW7kOA/XjppzyODCA1DgUBSEKhsnlzMhVllF5PpOHn3def9OSdWxYHZxoo85AUC''@;'; put 'put ''AyRw954pGVIo+BQh0iQ7hGb621XivqQ0f1f9AMPCMCCQVARWNRZdhjB/wi4qQx39jinYuDnZG9pjUSiYbSyoQ04gMAgClU0X3MWEuRhjTKww1kpLhsz5S/N3rx9EWBgKBJKKwIqWwnxJ0Houjpxj4ZSGhJDJvnyj9+kPYlEomG0sqENOIDBAApUNRV/tYodqXfKQUXYIxvW/nfrhybNnz97ABhgW''@;'; put 'put ''hgGBpCNQ8ezk07GJnufCTLeK48I03MqQ826csOmVWBQLZhsL6pATCAyQwJrmC8sMEezpSWuw0FuYqxfCKVADBArDkpZAxfOXD3Ex/IpfP3TSEbNlpoN6Lpub+8zmWBQNZhsL6pATCAyAwIr6/PEa79zklId0b9Q3ua6pkusH83N3wIKoAfCEIclNYP2eS1y6aTQZPDjOqtTaey4Reen8vB3LY1E5''@;'; put 'put ''mG0sqENOIDAAAqubp91uCu1X9tAu/cBrTpkW3eJ7ad8AwsEQIJDUBNbvGS9z/oUHguaha+1C3XLW+jkTHr8hFoWD2caCOuQEAv0ksK7+okyuiFqd+c+xhloHV0hYuabEV/vXfoaCy4FAyhCobL7gV//5+vh2u+Asxxc3/uC8318aCwBgtrGgDjmBQD8JVLZMudIwgw9RIinWUM3s+pAQx4Ql+Y0f''@;'; put 'put ''9jMUXA4EUoZARfPka4Qwew54yVJPeYUFO7w/yn+qM9oQwGyjTRzyAYEBELhn98X36GbnzfZQUxgPZ6jatXOy9xoDCAdDgEBKEKhsLspBCLdwcWShvkvK2icM9PUbfY9H/acXMNuUuOWgyEQmsH7PlAzNoC2mCJ1p1WG1C+OM/WDp+c8+msh1gXYgEGkCFXUFo3WsvyJTR5aVy9r+QxXHmSUTdrwV''@;'; put 'put ''6dx944PZRps45AMC/SRQ0Vx4mmZ2vaBQd4Y11K8f+sgphp6zqKj2QD9DweVAIKUIrK0p9Phl7WWJKN3df6ztP4rkvqA4Z2vUT1oDs02pWw+KTUQClY2TJunC2CoRxWHpZ9x8lhJ+fqm3OZiI9YBmIBAtAqs3z1Cdw92bOo39k62cQgiuSmk/nZuzaVm0NNh5wGyjTRzyAYF+Eihv9H6XYvmP9jCF''@;'; put 'put ''ev46N2fTrH6GgcuBQMoRKBNlZOSzz1cEzbZiu3iPMuL3P8necF20YYDZRps45AMC/SRQ1Tz1eib0B+xhEpE3FOdun93PMHA5EEhJAn3//WSoo5t+NP4RX7RhgNlGmzjkAwL9JFDVMmUR40a5PUym7j/My9ncs1G/n+HgciCQUgQqWyZP5dystotOV0a8fX32hi9GGwKYbbSJQz4g0E8Clc2Tf8qF''@;'; put 'put ''eYc9zCGlPXjTxKd/3M8wcDkQSEkCK+p9+YRKPQuiMh2nfcIDh8+I9l5bMNuUvP2g6EQiUNU8uZQJc6WtWaFpDx3wOK8rG7tBT6Q6QCsQiAUBazW/yYyXKZE8Vn5rRbJE1ZMX5O74JJp6wGyjSRtyAYEBEChv8P0IIbTOPj0qTR65sdMQ3y71boDVyAPgCUNSi0BFTeGQIG1/0yGlH9lryzmThHr6''@;'; put 'put ''goLt70aTBJhtNGlDLiAwAAIrmgrPNJm/VaGu7r6cmtn1nioNO7fUu/XQAMLBECCQUgRWNeU5kVAaEEbnWYULwTnF0swF3pqt0QQBZhtN2pALCAyAwPLdhaOEFnpZpuowa7hudrXJ2JmzsKDhHwMIB0OAQEoRePTRWfSTL3StNHhgfrfZou5We3fPz93x02iCALONJm3IBQQGQMDq+CMU3KqxzjOs''@;'; put 'put ''4SbXQ5TQWQu9DU8PIBwMAQIpR6CiqXCRQKJnRb9LHva3GyY8dmU0QYDZRpM25AICAyBgNcEOGoGtXJj59nDO2PJFBQ1LBhAOhgCBlCOwoiH3GkLUnu4/QxwntfzwvIfyogkCzDaatCEXEBgggYrmwp8LIcrs4U4pY1fI33F5SVFt2wBDwjAgkDIEKuunfMHA/n9QoqhW0ZrZtS/LNWbsnOyNUTtf''@;'; put 'put ''HMw2ZW43KDSRCVS1TBsfNDp2KlTtXiSls0CHiw65tNi7bVci1wXagUA0CKxo9J7KOHtepo5MK1+GOiakmV1X35Sz8Ylo5LdygNlGizTkAQKDILCswZfm1/Y/PcQ5epIdRiHO1QeCoYVlRbXmIELDUCCQ9ASsFckBw/+WS84cZRers2CHRx66kuvo3uJJW/ZHGgKYbaQJQ3wgECYCFc1FPs30b1Go''@;'; put 'put ''M80KGTI7Djllz9SSvPrnwpQCwgCBpCRQVlMouSX9aUrl6X0LDBiHPnJKGStkajxYnNvaESkAYLaRIgtxgUCYCVTUnDvkEO+qzXSeNM4OLRPXAweDwZvg6TbMsCFc0hFY1uD7qma0/a8qeb4uU4erb4EhM7DbLWWWHNb058qKakPhBgBmG26iEA8IRJDAquai2SYL/l4iqtNKYzAtoMqe7y/I3f5Y''@;'; put 'put ''BNNCaCCQFASEQLiy6fzcgNmxzimnjUMIH+WBQaOzziFnLSjN2/4CxkiEq3Aw23CRhDhAIAoErKPn2sXH29MdI8fb6QiSXpKEuHSub+c7UZAAKYBAwhO4s3XiUKpL18tEni+wGIX7mK5K0w5yod+vSfqqRdm1YVmxDGab8LcNFJBqBJY3F/iYEdysSu7ulcndLy4andhxxY2+6n2pxgPqBQIDJWCt''@;'; put 'put ''UuYC3Y6Q+K5EFEffOARLbxMk3am5xEO3jKv2DzSPNQ7MdjD0YCwQiBGB5fV590hUubl3eoW6/0h0PP+mgk2HYyQL0gKBhCSwqsE31m+2/9YlZ03A+Oivlk2m7VXl9DnFOdXPDfSrZTDbhLw1QHSqE7h7z/iMYEdXdYZj1ESbhXXmqyp5fm/4A6Vw2EWq3yFQ/0AI3N0wYTbm9A5ZUr/cd7wQgsvU''@;'; put 'put ''+RfMxS/neav/3t/4YLb9JQbXA4E4IXDH9pyRskqelqiS3WO4QgiFurYZXP9hqXfnB3EiFWQAgYQhsLolJz1o4FKM0WJ7IWJv8ToLdqYpQ1czDVX1Z38umG3C3AIgFAgcTWBZg2+MX/9kxxDHSWf2fjdotr/pVob9YEHu9gbgBgSAQP8JLN816Qwi4V8KYV5h95Lu/aGWEvkdgpQ7TdH2p1Jv83F7''@;'; put 'put ''S4PZ9n8OYAQQiCsCdzXlfZky8YhE1Z4VypZAg4X8quR+lGD+s+Lc2vfjSjSIAQIJQMBqz/fvMe9dJGHldozxhL6SueAsUx29q0Pft6bEW/u5Rz+C2SbAhINEIHA8AtZWBjMU/ItHzprc99qQ2XXIIw//BaWhR2+eWPvx8WLB+0AACHyaQFlNocMta1dwwctk6uhuddn7xbihOaS0pwRGdxTnbH3x''@;'; put 'put ''WPzAbOGuAgJJQuDuPVMy0oXrzyGj/aK+JVmLpzTTf3iE60sPBFnb+nk51f9OkrKhDCAQNQJrawo9IUVcTTD5lUB8ZN/E1rdJDinjcS6xn5dM2PFW7/fBbKM2TZAICESWwL3PXjyRmWyDLgJf+LxMlCgvOCQyc0721o8iqwiiA4HkJLCqKe/LHaHDD7iUzNxj7c8VAv3dqaSXhgy9tdS79ZBFAcw2''@;'; put 'put ''Oe8FqCqFCKyrvyjTkMylQfPwjXaTgr7l62ZXm0RdBxXq/JtA4oH5udv+mUKIoFQgEHYCR37P/fAbutm+1q0M7dmCZycyuR7EiP7DrWTOv2nixl1gtmGfAggIBKJHoKJxch7GaC1H5jeO+upYCCFT9V1TmPcLKv/RQ9SDc7I3BqKnDjIBgeQnsH7PeFeX5rkGI/4zhMnJfSt2ShlbjZDxPTDb5L8X''@;'; put 'put ''oMIkJVDVMnWmg6bf5zcOnNK7ROsTdZoy8pWAceARJ0e/u6mgAU6UStJ7AMqKHwIVe6aPdiPPti79wFhbFRa4y6mkffeGCRufBLONn7kCJUDghAmsaZ56qd9s+4NCXRm9B+lm4DVC5RJHe8au4plbtBMOCBcCASAwKAKrm6ZPDPH2Gomo3e37uGDMIaeXzZ24+dfWf4PZDgovDAYC0SdQ0Vh0kcY7''@;'; put 'put ''/6xQd4/RWvv9OGIbXZLz+rk5Ow5GXxVkBAKpS8DaGuSS/Fsk6iq0KXDB3zZV9dyl2dvbwWxT996AyhOUQFXjtLO7zE+2O+UhPdsOdBbskqjjDqXNXQFPswk6sSA7oQlUtUwv0sz2TfbxjlwwUyaO0vl529f0fKWc0BWCeCCQQgRW7CkcxkKhapmoPYuhrH19hMjzbvE1/C6FUECpQCBuCNzbOG2E''@;'; put 'put ''gdlOE5k9v9VKxPmkyduv7n2MI3yNHDdTBkKAwGcTEALhe1ovXG7w4CL7KiE4Rwj/cqGv7hfADggAgdgQqGgqukcg3tPuEgsSoJjmF3u3P99bEZhtbOYHsgKBfhFY2TC5yBSdT8rUmWYPlInz/oPB0PyyotpQv4LBxUAACISFQHnjtBEeSdkbZJ09W34k4niiOHfrN/smALMNC3IIAgQiR6D7iDhV''@;'; put 'put ''bMIITbKzdGr73nHTYTMXTap/LXKZITIQAAKfR2Bt68WLNda5zL7G2uojMPeWeuteBrOFewcIJBiBiqbJlxs88LB9LJzOAh2EyLMW+5qqE6wUkAsEkoZAeeOkCwzm3+CQPFlWUdaiKFVy3zYvZ+vyYxUJT7ZJM/VQSDISWNWU55RJ5lMG90+x6+OCP7HQW38FxkgkY81QExCIdwLWVp8sp/KwybXL''@;'; put 'put ''ba2Ms39LhnReSVFtG5htvM8g6AMCfQisaio432D6Jpk63NZb1ulQBCmXLcrftQ1gAQEgEBsCVS2TrzKY9keCqWQpYNw0JCLNLfHuuv+zFMGTbWzmCrICgRMiUNU87TYmtO4TaI78ozb+JRnKhM/69HxCQeEiIAAEBkxg5e5pp8icbzO58VU7iEKdG2W6/8o52XsNMNsBo4WBQCA2BH5XU+g4JPPt''@;'; put 'put ''mGCfrYAIcucCX81tsVEEWYEAEKhsumANR2xuDwmBOglRpy7Iq279PDrwZAv3DhCIUwIV9ZNPZ1jbQwjNtCTqLNCpUMeUUm/97jiVDLKAQFITWN0y4yyZyNuCZvuYXh+A/zLmg2HXzJ69gYHZJvX0Q3HJSmBZo/c6LMS6nlXIRugDQeSv3wpdfJJ1yqGuOCawfs942WQjH9SY//u2TJNpn2DimHKL''@;'; put 'put ''r/aV40mHJ9vjEYL3gUCMCNy3+5JFfqPtbowJtSRwzjYqHWmz4PzjGE0IpE1pAlVN07xBdniLQl3p3f8eBTMl4lq8IK+64kTAgNmeCCW4BgjEgMDKxvydGNMiOzUV8uXzfdufjIEUSAkEUprA6s0zVGko/WuIdV7c81QrjH96OMk50X7RYLYpfQtB8fFKoHzrNDfxaI0Yo3GWRpNrAUqU/IXeuk+d''@;'; put 'put ''txqv+kEXEEgmAlWt067Vja71lMjqkada0yCC3liaX/ebE60TzPZEScF1QCCKBKxP0n73vlpV9uRaaRk3dAk7C0t8O5qjKANSAYGUJ1DZMnkk4mIHR6ynq49MnE8ZvP2q3l19jgcKzPZ4hOB9IBAjAmtaZ6wxWKBni4EQ4vaFvro7YiQH0gKBlCRwT/OFpboIrrSLF5y3YSJPL/Xu7NeuADDblLx9''@;'; put 'put ''oOhEILCmdfqvDRbq2VMrEUdlce7WkkTQDhqBQDIQuKd15lcwwtUa6zrVrocgeYNTOXzN5x1gcazawWyT4Y6AGpKSQEVz4c+FEGV2cW45a/2cCY/fkJTFQlFAIM4IWD2kVzblbySYXmRLM5m+jyLHtIUFNS/2Vy6YbX+JwfVAIEoEVjYWfJcL9qC9KMMjDd8p+w9cdB30r43SDECaVCawumVKbtDo''@;'; put 'put ''3G6fSy6EEDJWSou92ysHwgXMdiDUYAwQiAKB5XUFPoH1apk6XFa6dGXUOwzxcXOyN7RHIT2kAAIpTeCe3TOe1M3ApTYEnYVeV02nd6DnkoPZpvTtBMXHM4EVjd5TTa6/pFB39yZ6gwXbZeoZW+rd+UE86wZtQCDRCVQ2T/62wQK/p0Rx9NQi0A9Lfbt+N9DawGwHSg7GAYEIE1hXn59pSM43mNCH''@;'; put 'put ''W6msr7Ewki4s9e2EpvERZg/hU5fAPa2ThxqM1Qgkvm5TUGnaZoniWXOyNwYGSgbMdqDkYBwQiAKBquZp1UxoU+1UElFWFuduWxSF1JACCKQkgTXN00p0HlqBMSbdAATqlIkyY17etsbBAAGzHQw9GAsEIkygsmn6XI5Ca+w0CnW/6DfaC5bkN3ZGODWEBwIpR8DqtBXgh1qdcvqwng+4WPnbofQh''@;'; put 'put ''V5eN3aAPBgiY7WDowVggEGECVY2FZwd5V4NC3RlWKoMFuxx0yPT53uqmCKeG8EAg5QhUtUz5DePGD+3CGTMOSJJjeknezucGCwPMdrAEYTwQiCCBsppCaYQ7408hs+3bPX8AuFmd7sj65mB+P4qgZAgNBBKSgLXVJ2C0b7W7+lhFqJL71psmbF6GMRKDLQrMdrAEYTwQiDCBVQ2TfsQxu5dgSbZS''@;'; put 'put ''aaa/PUMZNumm3GdeinBqCA8EUobAsvqJ9TJ15vf6UPsvD3b7bvRV7wsHBDDbcFCEGEAgggSsVclcSd+pM/+5PX8IkLllmCZfAQdcRBA8hE4ZAhXNUwpNFnjGPkCGcVOnVJ1fmrfzvnBBALMNF0mIAwQiSKCiuaiUcWMZwVSy0jBuaAp1fX9+3vZHI5gWQgOBpCewum7GcJMGtiKMvmEXK2PX04Zo''@;'; put 'put ''m92frj7HAwVmezxC8D4QiAMC6/eMd/k1z9MIo55m8n790EcuxfOthd5mWCwVB3MEEhKTwNqWC5eGmP8OjEn3Vh+rqw9CdMbC/NqWcFYEZhtOmhALCESQQHl9fo7OuzY65YzuQy6sF8XSiyY1Llk4se69CKaG0EAgKQks3104Sg8efsElDxlpFyghecMhzfxOWVGtGc6iwWzDSRNiAYEIE6hsmXKl''@;'; put 'put ''yUKP2F8nW+lMpj+HufytW86v+3eE00N4IJBUBNa0Tl2sm9pd9gEWJtP2SVSZUuqteznchYLZhpsoxAMCESRQ9uosxXn4/T/KRJndOw1Byh5dsKsW+3a+GcH0EBoIJA2BypbJ5wT0thqH5Mmyi5KpY8m8nK3LI1EkmG0kqEJMIBBBAssafGkCmU8rxDGpd5oO/ZO30qVR3y7x1e4Nx77ACJYAoYFA''@;'; put 'put ''zAncXZ+9U6HunjUQjJtvojT3uFvGVfsjIQ7MNhJUISYQiDCBu/dMyZBCob8SQqf0TmWtUqZEXoeQ49el3q2HIiwDwgOBhCRgHWBhML0JY9ztgVaTD4LpDSXemvsjVRCYbaTIQlwgEGEC5Vunubmz7VFZcs7smypotL/llrKuW+DbWRdhGRAeCCQUgdV1BcOZRLYLhM6xhTto2tZ9Huelgz3/+PNA''@;'; put 'put ''gNkm1G0CYoHApwms3jxDDbgPlCCCb1Oo09P7XSE4o1ja9p+9DD9b4Nv1LLADAqlOQAiEK5oKKxAW83tYCNyFEZ1W4tvRHEk+YLaRpAuxgUCUCCyvyz3vsPbhg8PdX+zZmG+n7j4NhyhPCEletHBiNWwRitKcQJr4I7B2d+EoJFy7NeY/xVaHkfzoSe9nfmf27A0skorBbCNJF2IDgSgSKHv1LMV5''@;'; put 'put ''OP1ik4Xu670X15Zgci1AkLyBK3Tp4om1H0dRGqQCAjEnYD3V3rvnkltDRscdPR9EmbEfU2XSIm/t3yMtEMw20oQhPhCIMoHKlpyRXaHQgy5lyMXHSh0yO99Jk4YtIJq+/eai2q4oy4N0QCAmBCqaC6cYTNsoEcVhC5CxWjovr7oiGoLAbKNBGXIAgSgTsD7FVzUWfcUkxv8SRHP6pmfcNIJG2z/S''@;'; put 'put ''naNK2nJ27CjDiEdZIqQDAlEjsH7PeNlko57QWFfPYsJIb/XpWxyYbdSmGxIBgegTWFtT6OmS/SWMm/MdUvrQo01X12Ti3oIJXnw4x/dmGS4D043+NEHGCBOobJ78bZOH/mi3qfzvVp/rS7w1v41w6p7wYLbRIg15gEAMCdzZOnGobKhLTR78sSq5M/pK0VmgQyGOJxGWby317vwghlIhNRAIK4E1''@;'; put 'put ''DVPHcCp2MGGcaQdWiXvL/jT35ZHc6gNPtmGdRggGBBKLwN0NE8aqJL3Y4P7vSUR19lU/xHHKv7r0g/cFTfn+JflPdSZWdaAWCHyaQJkoI0Oa66o4YnPtdzAifozR5AV5Na3R5AVPttGkDbmAQJwQWNVUcD5CZJUQ4lz7EPbe0hTqrkPY/J8Dfr0p3N1P4gQByEgBAqsbZ3xJluW6oNk+xi6XYvWx''@;'; put 'put ''+XnV34p2+WC20SYO+YBAnBDoPoHK3XldmjJsccjs6Nl32OsJIOhWsv5imv6Km3KfeSlOZIMMIHBCBKyn2qHNTfcaSPuJPYBzdljG0qT5vtpXTihIGC8Csw0jTAgFBBKRgHXOsqqJn+m88ydyn1OorHo45wcdkms1wubauTk7DiZijaA59QisaZ2a7dfbdijUlW5VL4TgMnUuLs7dujIWNMBsY0Ed''@;'; put 'put ''cgKBOCRwd4NvrEfKWBQ0266mRFb7SsxQxvyjXf9oHULa/aXe5mAclgCSgEA3gVVNeU6ZZm4wmP8iG4nBjH8Ip2vi0uzt7bHABGYbC+qQEwjEMYGVDecXISyWCyS+QTChfaUqxNNoIm1pW9Bsgd9z43giU1haVeu0axnTft/z9bEwDSLoj0vz6/43VljAbGNFHvICgTgnsKr5/Etk7Fxh8OBX+krl''@;'; put 'put ''ghkSkbdxwZaW5NW9Av1z43wyU0jePa2ThzKO6pkwv2aXLRPHU/Nyt14WSwxgtrGkD7mBQJwTKH9xmpv4g7eZTJt3rN9zMSJBgukyJuga6J8b55OZIvJWN19YbIpglV0uFiQgMC4q9e7cHUsEYLaxpA+5gUCCEFjW4BuDEL9fIvJMjI403O79MljoY5mqd5d663r+yCVIaSAziQhUtUw9Q8bqjhDr''@;'; put 'put ''7FldT5Hy1/nebbNiXSaYbaxnAPIDgQQhYJ23fHfDhMma3rYu3TnmjL6yrSPwVMndojNtQayfIhIEKcgMIwGrt7OW3vUEJeTCnrACdSJB8krza14NY6oBhQKzHRA2GAQEUpdAWU2hpNLgZQbvqvAow47an2v1z5Ww8jhiZknJpPqPUpcUVB5NAquaLpios67tCnWm2XkV6lw8N+eZ8mjq+KxcYLbx''@;'; put 'put ''MAugAQgkIIFlDb40wULzEcG3KNTdvZfx0y/sJ5jeGZLx2lhtt0hArCB5AATKagodWU7HIyYP9iyCYpz9W+VpOcWTtuwfQMiwDwGzDTtSCAgEUovA8prCUSFy6D6PnHnM1Z5+/fA/3UpWcUdebTW08kuteyNa1R7p6qP9iWAqWTkZN3QJKTeX5Nc+GC0Nx8sDZns8QvA+EAACxyVg/Z5b3jgxHyO5''@;'; put 'put ''nBLpGP1zDV2hzjqB+O3zc2t2w1ah4yKFC06QwLr6/EydKg0csbPsIRJ1blTp/ivnZO81TjBMxC8Ds404YkgABFKHwJFFKh2XhcyOCreS1XP4u03A5FqAIvlvskRvLc6tfT91yEClkSJQ1TJ1vsFCK3sOYBG4kxA8NdpdfY5XH5jt8QjB+0AACPSbwF31+ZkE6QsFEvPss2l7B2HcOKSQtLWGoq1e''@;'; put 'put ''lF17oN8JYAAQQAhVNBee1qUdaHArQ0+ygVhdfQ6H9Kvi7XQzMFu4ZYEAEIgYAWt/rma236dS92SZOlx9EwWNjn+nKyMXBFhnzZL8RuifG7GZSM7Aq5oK70VI3GBXZ5ihjyXsunBhQc2L8VYxmG28zQjoAQJJSKCiPv90Hem/lYhagDEhfUvs0g6+7paH3nzKhyPqZs/ewJIQAZQUZgKVzUU5QaNz''@;'; put 'put ''qyq5M6zQXHCmUNeSWHX1OV55YLbHIwTvAwEgEDYCyxt839bMjlWf8XtukCD5b5TS2096b/h7YLphw550gcpePUtRDzq3qJLnArs4LsTbbuTIudFXvS8eCwazjcdZAU1AIIkJdP+eK4xbEBbFMnW6+5aqm/42SuTHEE776S1x+ocziacnIUqrapo6WeNdGyWiOI881ZoGxcrcEm/N/fFaAJhtvM4M''@;'; put 'put ''6AICSU7grvqc8RixcooV77H657rkzBd0pi1JCwbrriuqDSU5DijvBAms2FM4jBpouxBinD1EJu5NBj88K577LIPZnuAEw2VAAAhEhkB5o/cCiuVyIfi5x/o9V5XSmgyk3zrm7YxG+Go5MnOQSFHXtMxYZPDA/x/BKEQHEvLFpfk76uO5DjDbeJ4d0AYEUoSAddyeW9ZuSFNHLQkYh0b1LZsgSVel''@;'; put 'put ''9IeDKFBeMmHra3AoRorcGH3KXNZSeLLCjMD4AAALhklEQVQW2t/U+0xuq6sPbpO+WzxzixbPVMBs43l2QBsQSDECa2sKPSFF/I9ArNQ+eq83AoIkTSbOCo0b5dA/N8VuDoRQZfPUn3Kh32FXbjLtE4qk6QsLGuJuq0/f2QGzTb37FSoGAnFPYNmu3K+5HVm3a2bX1Rgf3T830/mFN7u0g2vm5W6G''@;'; put 'put ''/rlxP5vhEVjVMm180Di8Q6Gu7q0+CAlBiVoyP3dbQtwDYLbhuQ8gChAAAmEmYJ23XNU0qQARaS0X7Oy+4a3+uS4la69p+hfMy9vWGOb0EC7OCNxVl12jSu5CW5YQ4l1Vks+bm7PjYJxJPaYcMNtEmCXQCARSmMCqpjwnE+LHHnnELUGz/eS+KAiSdbeS9YhfdNy5YMIzb6QwqqQtfXXr5IKQ4d8q''@;'; put 'put ''EbV7q4/J9RDFSvFC364HEqVoMNtEmSnQCQRSnMDqlpx0zZAXM6TPV6jT0xcHRiQoEccKoaM18dLDNMWnLCzlW119ggRvx5icZwdUafozEkVXzsneGAhLkigEAbONAmRIAQSAQPgIVLbkjNQN8YBEnZccK6rOAh0Sdi0zHTI0rQ8f9phFsrr6mCy0yt4WhhHxYyHPXOCrrouZqAEkBrMdADQYAgSA''@;'; put 'put ''QGwJWL/nLqufODNotlVmOEZ/+VhqVOp5nXHjDhrSn7y5qLYrtooh+0AIlDdOG6EQvosJ40x7vEKdG92B0OxEO+gEzHYgdwCMAQJAIC4IdP+ey9iFIRZc51ayjtqfa4nk3HxepWmlI99Lq4dDMeJi2k5YxLrWi5YEzY477adaxoz9MlIvWVBQ03rCQeLkQjDbOJkIkAEEgMDACayoGT+sU3RVOSXP''@;'; put 'put ''TEXyDOkb6b8LaqpV2fHToCrevmVctX/g2WBkNAgsb/AVcB56qvd8SsSx6FBOXkUZLuPR0BDOHGC24aQJsYAAEIgpgYq6gtFdon2FTByXHmsRlWW6JtdedytDbw+ZgXrooRvT6frc5FXNU/7KhHGlfZHJ2VuyIY0vKapti1/Vn60MzDYRZw00AwEg8LkE7t6V93VMxW1CsJkKdaX1vZhxU8eE/Atj''@;'; put 'put ''6TcKkx4Z+eGQT+Ar5vi5qVa3TMnVzECt3aCCcdOQSHx39TkePTDb4xGC94EAEEhYAlbT+k7WVqlS9wUydRzVzs8qLGR2HFJp2haKXFWyHnodFlPFdrorWyaP5MzcijDq6eqjUs8zGjt0RTx39TkeNTDb4xGC94EAEEh4Aivqcs5iGC3igl2hSu7/Hvf36bKsnqgESW9hgh8mWH5Id+IP4bfd6E/9''@;'; put 'put ''qqYL1iDE5tqZKZI1KkTRXN+O5uirCV9GMNvwsYRIQAAIxDmBZQ2+MUwEf4YFvkqVPMc0XasELphpMv0dh5z2W0rowwpVP0mUAxTW7xkvK51pNICGS1LaYerXHR5V0ok9NViTu0yZM1WSTIQ+NDLfOp3Hy1foFc0XnuakanPAbOtZWW5t9ZHp/ivnZO814vz2+lx5YLaJPHugHQgAgQERuLN14lBq''@;'; put 'put ''8O9xjn5CifxFiSiOzwrEBWecm++7lMxtIda5iZquVpdLabeMKtoGUCbKyOi9G6llpgeyFCoHmYdil4th7RTM8akYo7EuKeNUk7HTTB4cFTQ73IzrMsLCMtvuv/dCCO6WMzWMSGe6Y9TrGvd/4Nf3v0q5a7OJ2z48+f2T9ViZ7z0tM36j88AP7bng3DyIhDJ9UUHN3gFNdBwNArONo8kAKUAACESf''@;'; put 'put ''QHldwTkMB39BsDxdIkr32buf97IaIBg89PEQx+iXQ2Zgl0zlzQiZBw3OdM4DHW5FN62nxddmjRX92aJiGelZG17Fh0/PJFrGewR1onQcMGXmUCVFmE7G6TlEoBxKlXOY4Ke0h97NIogqEnWmEUzo8XQf730hOFcl97syce/UTP8mzFhLNBeOrW6dPk43A3t712Jt9SnO3bryeNoT4X0w20SYJdAI''@;'; put 'put ''BIBAxAlYx0AaJrrao4z+jt848I1j9dP9PBFHjolU/WnqiI8cNO1NnQU/0HnnmxiRF02EOxSBAowbAssSJwxTJoTEEc8iWFYQ5mNV6swiWDqVEPVk3ew8rUPfN5RxXZWp46hzoCMOAyGkM39bmjJyu879a9tDqKGsqNaMVF7rg8aIZ/duCpkdF9o5hODvcI9zbLL8bg5mG6m7B+ICASCQsASWt0w6''@;'; put 'put ''g3B2pYxd15g8dBZCVlfdo/vqxmOBAgmBRI8ygf77HwYLdlj/X6au9CPvdv/5x9b/YPT5taUpI3aGjM5fReoUrqqWaVeZLPSQzdj69oAiac4C386E6epzvHsBzPZ4hOB9IAAEUpaAdQbzL16bJbsOvzvFpQyfyUxtBkP66fECRDe72hQprR0jtE+W0p43WPAjQ/i7DFM7wDF/28XlN3Widmn5De29''@;'; put 'put ''Nac35w3RGP8iY9rpquQ+TZU92UH9cJ5Mnad8Vm3Wb70ydT1nCv2XHSG+JVxPulZXH0N2NDNufNXOrVLP5v0e1zfLxm7Q44X1YHWA2Q6WIIwHAkAgZQiU1RRK6So6jQk91yVnTfDIQ70HAm+fihAfap/fG24Y1lOeRJRPKJU/RAjV+fWDb1Ikv0EpfR8Zos3lChwY7Ipi60PF/XvHS22G/GVqSjN1''@;'; put 'put ''EZjnkNJOPVYtXDAmOGqVZc+NC3KfeWmw9Va1TL2Zcf2eXs/inZSSovm5ib8oqjcbMNvB3ikwHggAgZQlYJnvqeg0qd35XgY32Sk6D54pSdLJEnFmqcQ5XMKOUQLxMRrzp+ksqDJhUowwwRhxmTg1RXL5KZIOcSz2cW7sN5jexkWgyxCsTTD2Eab0X7JKP2nvpIdHp3WyaK1+Xr15hhpKPzhRpWlz''@;'; put 'put ''TK5fhY+xAItxQ3NKQx5CLPSLub6d7wzkJljTMHUMkmmdwYJfssdLyPHkqPfTr4zViuiB1HEiY8BsT4QSXAMEgAAQ6CcBa9EPqq0lZ40YTvz79hM9LY10HNR6/ubStE4uDR/C1fZTeOZbh+Nmr2vfMlc0XnCqybsqJaJcQjA9atVz0Gjfn66OucPgh+/vzwlPFp+s3c3rTRa63s4pOD+MhFS0sKDm''@;'; put 'put ''xX7ijvvLwWzjfopAIBAAAkAgtgS6vz6Xja9yTO5ECF3Ud6uRdQgIwfQlgskvnHLHlhN5Al/dMvkszQw+Z59/bFUoU7V0Xk51RWyrjUx2MNvIcIWoQAAIAIGkI2CdTtUeVC73qCOWhMy28X0L7P5qWc56LGR2rO/SSdNnLaKy4ujmsEcNHrq856lWiHc9asbXEuWkrv5OLphtf4nB9UAACACBFCew''@;'; put 'put ''qinPaXBxreD8Z4rkHN0Xh8GCXQ4p4086xz+/xVe9r+/7lU0XzDK49idKJMV6r3urD5ZvXODdsT5Z0YLZJuvMQl1AAAgAgQgTWN7o/RLnxi8xwpfK1HnU4RsKdb+JEP+VTOUN9hNrRU3hEKTieoH42bY8mbg3iUPiyuKZW7QIS45ZeDDbmKGHxEAACACBxCdg/Z7rlI1sv7ZvXbpjxNkES3LfqgTC''@;'; put 'put ''zzqJ+0Yqaf8KGeT7TGir7WswIn4kRH6Jr/aFxKfx2RWA2Sbz7EJtQAAIAIEoESh79SzFczhzssb89zjljKMO/rAWUXnU4Z/I2JHern2YZsuSiPpEcW71N6MkM2ZpwGxjhh4SAwEgAASSj8CKmsJhTArdiRC/+lhfLX+qYoE6COUFC3LrB304RryTBLON9xkCfUAACACBBCRQ3ug9myD5Lia0yRJR''@;'; put 'put ''j+qmZLUuVKlj4bzcbVUJWF6/JYPZ9hsZDAACQAAIAIETJVDRWHguxnSlKfTze+/PNTl7y21I424uqu060ViJfB2YbSLPHmgHAkAACCQAAWtfrV9PX8C4toQSeShFikGwdNm8vC1bEkB+WCSC2YYFIwQBAkAACACB4xFY0zrtizJx/wYh7NJZcFpx7paO441JlvfBbJNlJqEOIAAEgEACELDORB69''@;'; put 'put ''d68jWU+K+qwp+D9J1vEz+kjcvQAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;